//# 4 errors, 1,084 messages
//#
/*
    //#DCCChatWindow.java:1:1: class: com.dmdirc.addons.dcc.DCCChatWindow
    //#DCCChatWindow.java:1:1: method: com.dmdirc.addons.dcc.DCCChatWindow.com.dmdirc.addons.dcc.DCCChatWindow__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.actions.ActionManager;
import com.dmdirc.addons.dcc.actions.DCCActions;
import com.dmdirc.Main;
import com.dmdirc.commandparser.parsers.GlobalCommandParser;

/**
 * This class links DCC Chat objects to a window.
 *
 * @author Shane 'Dataforce' McCormack
 */
public class DCCChatWindow extends DCCFrame implements DCCChatInterface {
	/** The DCCChat object we are a window for */
	private final DCCChat dcc;
	
	/** My Nickname */
	private final String nickname;
	
	/** Other Nickname */
	private final String otherNickname;
	
	/**
	 * Creates a new instance of DCCChatWindow with a given DCCChat object.
	 *
	 * @param plugin the DCC Plugin responsible for this window
	 * @param dcc The DCCChat object this window wraps around
	 * @param title The title of this window
	 * @param nick My Current Nickname
	 * @param targetNick Nickname of target
	 */
	public DCCChatWindow(final DCCPlugin plugin, final DCCChat dcc, final String title, final String nick, final String targetNick) {
		super(plugin, title, "dcc-chat-inactive", false);
    //#DCCChatWindow.java:55: method: void com.dmdirc.addons.dcc.DCCChatWindow.com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)
    //#DCCChatWindow.java:55: Warning: suspicious precondition
    //#    The precondition for this.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.dcc.DCCChatWindow
    //#    method: void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)
    //#    suspicious precondition index: [8]
    //#    Attribs:  Soft
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): "&#10;&#10;Closing this window will close all the active DCCs"._tainted
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): com/dmdirc/FrameContainer.java.awt.Color.BLACK
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): com/dmdirc/Main.controller
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): com/dmdirc/Server.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): com/dmdirc/addons/dcc/DCCChat.__Descendant_Table[com/dmdirc/addons/dcc/DCCChat]
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): com/dmdirc/addons/dcc/DCCChat.__Descendant_Table[others]
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): com/dmdirc/addons/dcc/DCCChat.__Dispatch_Table.setHandler(Lcom/dmdirc/addons/dcc/DCCChatInterface;)V
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[others]
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): dcc
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): dcc.__Tag
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): nick
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): plugin
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): plugin.childFrames
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): plugin.container
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): plugin.container.__Tag
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): targetNick
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): this
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): this.__Tag
    //#input(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): title
    //#output(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): dcc.handler
    //#output(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): new DCCPlugin$3(createContainer#1) num objects
    //#output(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): new DCCPlugin$3(createContainer#1).__Tag
    //#output(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): new DCCPlugin$3(createContainer#1).changer
    //#output(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): new DCCPlugin$3(createContainer#1).config
    //#output(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): new DCCPlugin$3(createContainer#1).icon
    //#output(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): new DCCPlugin$3(createContainer#1).listeners
    //#output(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): new DCCPlugin$3(createContainer#1).myWindow
    //#output(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): new DCCPlugin$3(createContainer#1).notification
    //#output(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): new DCCPlugin$3(createContainer#1).plugin
    //#output(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): new DCCPlugin$3(createContainer#1).this$0
    //#output(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): new DCCPlugin$3(createContainer#1).title
    //#output(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): new DCCPlugin$3(createContainer#1).windowClosing
    //#output(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): new FrameContainer$IconChanger(FrameContainer#2) num objects
    //#output(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): new FrameContainer$IconChanger(FrameContainer#2).__Tag
    //#output(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): new FrameContainer$IconChanger(FrameContainer#2).this$0
    //#output(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): new ListenerList(FrameContainer#1) num objects
    //#output(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): new ListenerList(FrameContainer#1).__Lock
    //#output(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): plugin.container
    //#output(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): this.__Tag
    //#output(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): this.changer
    //#output(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): this.config
    //#output(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): this.dcc
    //#output(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): this.icon
    //#output(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): this.listeners
    //#output(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): this.myWindow
    //#output(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): this.nickname
    //#output(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): this.notification
    //#output(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): this.otherNickname
    //#output(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): this.plugin
    //#output(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): this.title
    //#output(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): this.windowClosing
    //#new obj(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): new DCCPlugin$3(createContainer#1)
    //#new obj(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): new FrameContainer$IconChanger(FrameContainer#2)
    //#new obj(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): new ListenerList(FrameContainer#1)
    //#pre[3] (void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): com/dmdirc/Main.controller != null
    //#pre[4] (void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): dcc != null
    //#pre[5] (void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): dcc.__Tag == com/dmdirc/addons/dcc/DCCChat
    //#pre[7] (void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): init'ed(plugin.container)
    //#pre[9] (void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): plugin != null
    //#pre[8] (void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): (soft) this.__Tag in {com/dmdirc/addons/dcc/DCCChatWindow, com/dmdirc/addons/dcc/DCCFrame, com/dmdirc/addons/dcc/DCCPlugin$3, com/dmdirc/addons/dcc/DCCSendWindow}
    //#pre[11] (void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): (soft) plugin.childFrames != null
    //#presumption(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): com.dmdirc.config.IdentityManager:getGlobalConfig(...)@138 init'ed
    //#presumption(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): com.dmdirc.ui.interfaces.UIController:getInputWindow(...)@61 != null
    //#presumption(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): (soft) init'ed(com/dmdirc/FrameContainer.java.awt.Color.BLACK)
    //#presumption(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): plugin.container.__Tag@61 in {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.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): dcc.handler == this
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): dcc.handler != null
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): new FrameContainer$IconChanger(FrameContainer#2).this$0 == dcc.handler
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): plugin.container == One-of{old plugin.container, &new DCCPlugin$3(createContainer#1)}
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): plugin.container != null
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): this.__Tag == old this.__Tag
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): this.__Tag in {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.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): this.changer == &new FrameContainer$IconChanger(FrameContainer#2)
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): this.config != null
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): this.dcc == dcc
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): this.dcc != null
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): this.icon == &"dcc-chat-inactive"
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): this.listeners == &new ListenerList(FrameContainer#1)
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): this.myWindow != null
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): this.nickname == nick
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): init'ed(this.nickname)
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): this.notification == com/dmdirc/FrameContainer.java.awt.Color.BLACK
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): init'ed(this.notification)
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): this.otherNickname == targetNick
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): init'ed(this.otherNickname)
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): this.plugin == plugin
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): this.plugin != null
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): this.title == title
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): init'ed(this.title)
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): init'ed(this.windowClosing)
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): new DCCPlugin$3(createContainer#1) num objects <= 1
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): new FrameContainer$IconChanger(FrameContainer#2) num objects == new DCCPlugin$3(createContainer#1) num objects
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): new ListenerList(FrameContainer#1) num objects == new DCCPlugin$3(createContainer#1) num objects
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): new DCCPlugin$3(createContainer#1).__Tag == com/dmdirc/addons/dcc/DCCPlugin$3
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): new DCCPlugin$3(createContainer#1).changer == &new FrameContainer$IconChanger(FrameContainer#2)
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): new DCCPlugin$3(createContainer#1).config != null
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): new DCCPlugin$3(createContainer#1).icon == &"dcc"
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): new DCCPlugin$3(createContainer#1).listeners == &new ListenerList(FrameContainer#1)
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): new DCCPlugin$3(createContainer#1).myWindow != null
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): new DCCPlugin$3(createContainer#1).notification == com/dmdirc/FrameContainer.java.awt.Color.BLACK
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): init'ed(new DCCPlugin$3(createContainer#1).notification)
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): new DCCPlugin$3(createContainer#1).plugin == plugin
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): new DCCPlugin$3(createContainer#1).plugin != null
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): new DCCPlugin$3(createContainer#1).this$0 == new DCCPlugin$3(createContainer#1).plugin
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): new DCCPlugin$3(createContainer#1).title == &"DCCs"
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): new DCCPlugin$3(createContainer#1).windowClosing == 0
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): new FrameContainer$IconChanger(FrameContainer#2) num objects == 1
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): new ListenerList(FrameContainer#1) num objects == 1
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): new FrameContainer$IconChanger(FrameContainer#2).__Tag == com/dmdirc/FrameContainer$IconChanger
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): new FrameContainer$IconChanger(FrameContainer#2).this$0 == &new DCCPlugin$3(createContainer#1)
    //#post(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): init'ed(new ListenerList(FrameContainer#1).__Lock)
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): Effects-of-calling:com.dmdirc.config.IdentityManager:getGlobalConfig
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): Effects-of-calling:com.dmdirc.FrameContainer
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): Effects-of-calling:com.dmdirc.util.ReturnableThread
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): Effects-of-calling:com.dmdirc.addons.ui_swing.UIUtilities:invokeAndWait
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): Effects-of-calling:com.dmdirc.addons.dcc.DCCPlugin$3
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:getText
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setText
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): Effects-of-calling:getFrame
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.frames.TextFrame:getContentPane
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): Effects-of-calling:java.awt.Container:add
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): Effects-of-calling:com.dmdirc.ui.WindowManager:addWindow
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:open
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): Effects-of-calling:java.util.List:add
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): Effects-of-calling:com.dmdirc.interfaces.IconChangeListener:iconChanged
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): Effects-of-calling:com.dmdirc.config.ConfigManager:removeListener
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): Effects-of-calling:com.dmdirc.config.ConfigManager:addChangeListener
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): Effects-of-calling:com.dmdirc.util.ListenerList
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)): Effects-of-calling:com.dmdirc.addons.dcc.DCCFrame
		this.dcc = dcc;
		dcc.setHandler(this);
		nickname = nick;
		otherNickname = targetNick;
		
		myWindow = Main.getUI().getInputWindow(this, GlobalCommandParser.getGlobalCommandParser());
    //#DCCChatWindow.java:61: Warning: method not available - call not analyzed
    //#    call on GlobalCommandParser com.dmdirc.commandparser.parsers.GlobalCommandParser:getGlobalCommandParser()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCChatWindow
    //#    method: void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)
    //#    unanalyzed callee: GlobalCommandParser com.dmdirc.commandparser.parsers.GlobalCommandParser:getGlobalCommandParser()
    //#DCCChatWindow.java:61: Warning: method not available - call not analyzed
    //#    call on InputWindow com.dmdirc.ui.interfaces.UIController:getInputWindow(WritableFrameContainer, CommandParser)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCChatWindow
    //#    method: void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)
    //#    unanalyzed callee: InputWindow com.dmdirc.ui.interfaces.UIController:getInputWindow(WritableFrameContainer, CommandParser)
		plugin.addWindow(this);
		
		myWindow.setTitle(title);
    //#DCCChatWindow.java:64: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.interfaces.InputWindow:setTitle(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCChatWindow
    //#    method: void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)
    //#    unanalyzed callee: void com.dmdirc.ui.interfaces.InputWindow:setTitle(String)
		myWindow.open();
    //#DCCChatWindow.java:65: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.interfaces.InputWindow:open()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCChatWindow
    //#    method: void com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)
    //#    unanalyzed callee: void com.dmdirc.ui.interfaces.InputWindow:open()
	}
    //#DCCChatWindow.java:66: end of method: void com.dmdirc.addons.dcc.DCCChatWindow.com.dmdirc.addons.dcc.DCCChatWindow(DCCPlugin, DCCChat, String, String, String)
	
	/**
	 * Get the DCCChat Object associated with this window
	 *
	 * @return The DCCChat Object associated with this window
	 */
	public DCCChat getDCC() {
		return dcc;
    //#DCCChatWindow.java:74: method: DCCChat com.dmdirc.addons.dcc.DCCChatWindow.getDCC()
    //#input(DCCChat getDCC()): this
    //#input(DCCChat getDCC()): this.dcc
    //#output(DCCChat getDCC()): return_value
    //#post(DCCChat getDCC()): return_value == this.dcc
    //#post(DCCChat getDCC()): init'ed(return_value)
    //#DCCChatWindow.java:74: end of method: DCCChat com.dmdirc.addons.dcc.DCCChatWindow.getDCC()
	}
	
	/**
	 * Sends a line of text to this container's source.
	 *
	 * @param line The line to be sent
	 */
	@Override
	public void sendLine(final String line) {
		if (dcc.isWriteable()) {
    //#DCCChatWindow.java:84: method: void com.dmdirc.addons.dcc.DCCChatWindow.sendLine(String)
    //#input(void sendLine(String)): "DCCChatError"._tainted
    //#input(void sendLine(String)): "DCCChatSelfMessage"._tainted
    //#input(void sendLine(String)): __Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void sendLine(String)): __Descendant_Table[others]
    //#input(void sendLine(String)): __Dispatch_Table.addLine(Ljava/lang/StringBuffer;[Ljava/lang/Object;)V
    //#input(void sendLine(String)): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void sendLine(String)): com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions(DCCActions__static_init#4).__Tag
    //#input(void sendLine(String)): com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions(DCCActions__static_init#4).type
    //#input(void sendLine(String)): com.dmdirc.addons.dcc.actions.DCCEvents__static_init.new DCCEvents(DCCEvents__static_init#10).__Tag
    //#input(void sendLine(String)): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void sendLine(String)): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void sendLine(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void sendLine(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void sendLine(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void sendLine(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void sendLine(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void sendLine(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void sendLine(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void sendLine(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void sendLine(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void sendLine(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void sendLine(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void sendLine(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void sendLine(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void sendLine(String)): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void sendLine(String)): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void sendLine(String)): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void sendLine(String)): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void sendLine(String)): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void sendLine(String)): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void sendLine(String)): com/dmdirc/Server.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void sendLine(String)): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void sendLine(String)): com/dmdirc/actions/ActionManager.killSwitch
    //#input(void sendLine(String)): com/dmdirc/actions/ActionManager.listeners
    //#input(void sendLine(String)): com/dmdirc/actions/CoreActionType.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void sendLine(String)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/interfaces/ActionMetaType]
    //#input(void sendLine(String)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ActionEvents]
    //#input(void sendLine(String)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ChannelEvents]
    //#input(void sendLine(String)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ClientEvents]
    //#input(void sendLine(String)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/PluginEvents]
    //#input(void sendLine(String)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/QueryEvents]
    //#input(void sendLine(String)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ServerEvents]
    //#input(void sendLine(String)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/addons/dcc/actions/DCCEvents]
    //#input(void sendLine(String)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[others]
    //#input(void sendLine(String)): com/dmdirc/actions/interfaces/ActionMetaType.__Dispatch_Table.getArity()I
    //#input(void sendLine(String)): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/actions/CoreActionType]
    //#input(void sendLine(String)): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/actions/interfaces/ActionType]
    //#input(void sendLine(String)): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/addons/dcc/actions/DCCActions]
    //#input(void sendLine(String)): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[others]
    //#input(void sendLine(String)): com/dmdirc/actions/interfaces/ActionType.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void sendLine(String)): com/dmdirc/actions/metatypes/ActionEvents.__Dispatch_Table.getArity()I
    //#input(void sendLine(String)): com/dmdirc/actions/metatypes/ChannelEvents.__Dispatch_Table.getArity()I
    //#input(void sendLine(String)): com/dmdirc/actions/metatypes/ClientEvents.__Dispatch_Table.getArity()I
    //#input(void sendLine(String)): com/dmdirc/actions/metatypes/PluginEvents.__Dispatch_Table.getArity()I
    //#input(void sendLine(String)): com/dmdirc/actions/metatypes/QueryEvents.__Dispatch_Table.getArity()I
    //#input(void sendLine(String)): com/dmdirc/actions/metatypes/ServerEvents.__Dispatch_Table.getArity()I
    //#input(void sendLine(String)): com/dmdirc/addons/dcc/DCCChat.__Descendant_Table[com/dmdirc/addons/dcc/DCCChat]
    //#input(void sendLine(String)): com/dmdirc/addons/dcc/DCCChat.__Descendant_Table[others]
    //#input(void sendLine(String)): com/dmdirc/addons/dcc/DCCChat.__Dispatch_Table.isWriteable()Z
    //#input(void sendLine(String)): com/dmdirc/addons/dcc/DCCChat.__Dispatch_Table.sendLine(Ljava/lang/String;)V
    //#input(void sendLine(String)): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void sendLine(String)): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void sendLine(String)): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void sendLine(String)): com/dmdirc/addons/dcc/actions/DCCActions.DCC_CHAT_SELFMESSAGE
    //#input(void sendLine(String)): com/dmdirc/addons/dcc/actions/DCCActions.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void sendLine(String)): com/dmdirc/addons/dcc/actions/DCCEvents.__Dispatch_Table.getArity()I
    //#input(void sendLine(String)): line
    //#input(void sendLine(String)): this
    //#input(void sendLine(String)): this.__Tag
    //#input(void sendLine(String)): this.dcc
    //#input(void sendLine(String)): this.dcc.__Tag
    //#input(void sendLine(String)): this.dcc.out
    //#input(void sendLine(String)): this.myWindow
    //#input(void sendLine(String)): this.nickname
    //#output(void sendLine(String)): com/dmdirc/ServerManager.me
    //#output(void sendLine(String)): new ArrayList(ServerManager#1) num objects
    //#output(void sendLine(String)): new ServerManager(getServerManager#1) num objects
    //#output(void sendLine(String)): new ServerManager(getServerManager#1).__Tag
    //#output(void sendLine(String)): new ServerManager(getServerManager#1).servers
    //#new obj(void sendLine(String)): new ArrayList(ServerManager#1)
    //#new obj(void sendLine(String)): new ServerManager(getServerManager#1)
    //#pre[10] (void sendLine(String)): this.__Tag == com/dmdirc/addons/dcc/DCCChatWindow
    //#pre[11] (void sendLine(String)): this.dcc != null
    //#pre[12] (void sendLine(String)): this.dcc.__Tag == com/dmdirc/addons/dcc/DCCChat
    //#pre[13] (void sendLine(String)): init'ed(this.dcc.out)
    //#pre[14] (void sendLine(String)): this.myWindow != null
    //#pre[1] (void sendLine(String)): (soft) com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions(DCCActions__static_init#4).type != null
    //#pre[3] (void sendLine(String)): (soft) init'ed(com/dmdirc/actions/ActionManager.killSwitch)
    //#pre[8] (void sendLine(String)): (soft) init'ed(com/dmdirc/ServerManager.me)
    //#presumption(void sendLine(String)): com.dmdirc.ui.interfaces.InputWindow:getTranscoder(...)@87 != null
    //#presumption(void sendLine(String)): com.dmdirc.ui.interfaces.InputWindow:getTranscoder(...)@91 != null
    //#post(void sendLine(String)): com/dmdirc/ServerManager.me == old com/dmdirc/ServerManager.me
    //#post(void sendLine(String)): new ArrayList(ServerManager#1) num objects == 0, if init'ed
    //#post(void sendLine(String)): new ServerManager(getServerManager#1) num objects == 0, if init'ed
    //#post(void sendLine(String)): new ServerManager(getServerManager#1).__Tag not init'ed, if init'ed
    //#post(void sendLine(String)): new ServerManager(getServerManager#1).servers == null
    //#unanalyzed(void sendLine(String)): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void sendLine(String)): Effects-of-calling:getType
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void sendLine(String)): Effects-of-calling:com.dmdirc.util.MapList:containsKey
    //#unanalyzed(void sendLine(String)): Effects-of-calling:com.dmdirc.util.MapList:get
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.util.ArrayList:iterator
    //#unanalyzed(void sendLine(String)): Effects-of-calling:trigger
    //#unanalyzed(void sendLine(String)): Effects-of-calling:getArity
    //#unanalyzed(void sendLine(String)): Effects-of-calling:com.dmdirc.interfaces.ActionListener:processEvent
    //#unanalyzed(void sendLine(String)): Effects-of-calling:triggerActions
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.io.PrintWriter:printf
    //#unanalyzed(void sendLine(String)): Effects-of-calling:getUI
    //#unanalyzed(void sendLine(String)): Effects-of-calling:com.dmdirc.actions.ConditionTree$OPERATION:ordinal
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.util.List:size
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.util.Deque:pollFirst
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.lang.Character:instanceof
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.lang.Character:charValue
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.util.Deque:isEmpty
    //#unanalyzed(void sendLine(String)): Effects-of-calling:readTerm
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.util.ArrayDeque
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.util.Deque:pollLast
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.util.Deque:addFirst
    //#unanalyzed(void sendLine(String)): Effects-of-calling:parseStack
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.util.Deque:poll
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.util.Deque:add
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.util.Deque:size
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.lang.String:charAt
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.lang.String:valueOf
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.lang.Integer:parseInt
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.lang.Character:valueOf
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.lang.StringBuilder:length
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void sendLine(String)): Effects-of-calling:com.dmdirc.config.IdentityManager:getGlobalConfig
    //#unanalyzed(void sendLine(String)): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptions
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.lang.StringBuilder:indexOf
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.lang.StringBuilder:replace
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.util.Map:entrySet
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.util.Set:iterator
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.util.Map$Entry:getKey
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.util.Map$Entry:getValue
    //#unanalyzed(void sendLine(String)): Effects-of-calling:[Ljava.lang.String;:instanceof
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.lang.String:instanceof
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.lang.String:split
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.lang.StringBuffer
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.lang.StringBuffer:length
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.lang.StringBuffer:insert
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.lang.StringBuffer:toString
    //#unanalyzed(void sendLine(String)): Effects-of-calling:doServerSubstitutions
    //#unanalyzed(void sendLine(String)): Effects-of-calling:doComponentSubstitutions
    //#unanalyzed(void sendLine(String)): Effects-of-calling:getServer
    //#unanalyzed(void sendLine(String)): Effects-of-calling:getState
    //#unanalyzed(void sendLine(String)): Effects-of-calling:com.dmdirc.ServerState:equals
    //#unanalyzed(void sendLine(String)): Effects-of-calling:getCompatibleComponents
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.lang.Object:toString
    //#unanalyzed(void sendLine(String)): Effects-of-calling:get
    //#unanalyzed(void sendLine(String)): Effects-of-calling:getArgTypes
    //#unanalyzed(void sendLine(String)): Effects-of-calling:test
    //#unanalyzed(void sendLine(String)): Effects-of-calling:evaluate
    //#unanalyzed(void sendLine(String)): Effects-of-calling:com.dmdirc.ui.interfaces.UIController:getActiveWindow
    //#unanalyzed(void sendLine(String)): Effects-of-calling:getFrame
    //#unanalyzed(void sendLine(String)): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:instanceof
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.util.List:get
    //#unanalyzed(void sendLine(String)): Effects-of-calling:com.dmdirc.commandparser.parsers.GlobalCommandParser:getGlobalCommandParser
    //#unanalyzed(void sendLine(String)): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:getCommandParser
    //#unanalyzed(void sendLine(String)): Effects-of-calling:com.dmdirc.commandparser.parsers.CommandParser:parseCommand
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.lang.StringBuffer:setLength
    //#unanalyzed(void sendLine(String)): Effects-of-calling:java.lang.StringBuffer:append
    //#unanalyzed(void sendLine(String)): Effects-of-calling:com.dmdirc.ui.interfaces.Window:addLine
    //#test_vector(void sendLine(String)): this.dcc.out: Addr_Set{null}, Inverse{null}
			final StringBuffer buff = new StringBuffer("DCCChatSelfMessage");
			ActionManager.processEvent(DCCActions.DCC_CHAT_SELFMESSAGE, buff, this, line);
    //#DCCChatWindow.java:86: ?!precondition failure
    //#    com/dmdirc/actions/ActionManager.processEvent: (soft) type.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}
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.dcc.DCCChatWindow
    //#    method: void sendLine(String)
    //#    basic block: bb_2
    //#    assertion: (soft) undefined in {340_736, 341_760, 342_528, 343_040, 343_552, 344_064, 344_576, 362_496}
    //#    callee: void com/dmdirc/actions/ActionManager.processEvent(ActionType, StringBuffer, Object[])
    //#    callee assertion: (soft) type.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}
    //#    callee file: ActionManager.java
    //#    callee precondition index: [28]
    //#    callee srcpos: 365
    //#    VN: undefined
    //#    Expected: {340_736, 341_760, 342_528, 343_040, 343_552, 344_064, 344_576, 362_496}
    //#    Bad: {0, Invalid}
    //#    Attribs:  Int  Bad singleton  Bad overlaps +/-1000  Soft  Bad < Exp
			addLine(buff, nickname, myWindow.getTranscoder().encode(line));
    //#DCCChatWindow.java:87: Warning: method not available - call not analyzed
    //#    call on StringTranscoder com.dmdirc.ui.interfaces.InputWindow:getTranscoder()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCChatWindow
    //#    method: void sendLine(String)
    //#    unanalyzed callee: StringTranscoder com.dmdirc.ui.interfaces.InputWindow:getTranscoder()
    //#DCCChatWindow.java:87: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.util.StringTranscoder:encode(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCChatWindow
    //#    method: void sendLine(String)
    //#    unanalyzed callee: String com.dmdirc.util.StringTranscoder:encode(String)
			dcc.sendLine(line);
		} else {
			final StringBuffer buff = new StringBuffer("DCCChatError");
			addLine(buff, "Socket is closed.", myWindow.getTranscoder().encode(line));
    //#DCCChatWindow.java:91: Warning: method not available - call not analyzed
    //#    call on StringTranscoder com.dmdirc.ui.interfaces.InputWindow:getTranscoder()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCChatWindow
    //#    method: void sendLine(String)
    //#    unanalyzed callee: StringTranscoder com.dmdirc.ui.interfaces.InputWindow:getTranscoder()
    //#DCCChatWindow.java:91: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.util.StringTranscoder:encode(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCChatWindow
    //#    method: void sendLine(String)
    //#    unanalyzed callee: String com.dmdirc.util.StringTranscoder:encode(String)
		}
	}
    //#DCCChatWindow.java:93: end of method: void com.dmdirc.addons.dcc.DCCChatWindow.sendLine(String)
	
	/**
	 * Handle a received message
	 *
	 * @param dcc The DCCChat that this message is from
	 * @param message The message
	 */
	@Override
	public void handleChatMessage(final DCCChat dcc, final String message) {
		final StringBuffer buff = new StringBuffer("DCCChatMessage");
    //#DCCChatWindow.java:103: method: void com.dmdirc.addons.dcc.DCCChatWindow.handleChatMessage(DCCChat, String)
    //#input(void handleChatMessage(DCCChat, String)): "DCCChatMessage"._tainted
    //#input(void handleChatMessage(DCCChat, String)): __Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void handleChatMessage(DCCChat, String)): __Descendant_Table[others]
    //#input(void handleChatMessage(DCCChat, String)): __Dispatch_Table.addLine(Ljava/lang/StringBuffer;[Ljava/lang/Object;)V
    //#input(void handleChatMessage(DCCChat, String)): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void handleChatMessage(DCCChat, String)): com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions(DCCActions__static_init#3).__Tag
    //#input(void handleChatMessage(DCCChat, String)): com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions(DCCActions__static_init#3).type
    //#input(void handleChatMessage(DCCChat, String)): com.dmdirc.addons.dcc.actions.DCCEvents__static_init.new DCCEvents(DCCEvents__static_init#7).__Tag
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/Server.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/actions/ActionManager.killSwitch
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/actions/ActionManager.listeners
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/actions/CoreActionType.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/interfaces/ActionMetaType]
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ActionEvents]
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ChannelEvents]
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ClientEvents]
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/PluginEvents]
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/QueryEvents]
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ServerEvents]
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/addons/dcc/actions/DCCEvents]
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[others]
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/actions/interfaces/ActionMetaType.__Dispatch_Table.getArity()I
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/actions/CoreActionType]
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/actions/interfaces/ActionType]
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/addons/dcc/actions/DCCActions]
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[others]
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/actions/interfaces/ActionType.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/actions/metatypes/ActionEvents.__Dispatch_Table.getArity()I
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/actions/metatypes/ChannelEvents.__Dispatch_Table.getArity()I
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/actions/metatypes/ClientEvents.__Dispatch_Table.getArity()I
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/actions/metatypes/PluginEvents.__Dispatch_Table.getArity()I
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/actions/metatypes/QueryEvents.__Dispatch_Table.getArity()I
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/actions/metatypes/ServerEvents.__Dispatch_Table.getArity()I
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/addons/dcc/actions/DCCActions.DCC_CHAT_MESSAGE
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/addons/dcc/actions/DCCActions.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void handleChatMessage(DCCChat, String)): com/dmdirc/addons/dcc/actions/DCCEvents.__Dispatch_Table.getArity()I
    //#input(void handleChatMessage(DCCChat, String)): message
    //#input(void handleChatMessage(DCCChat, String)): this
    //#input(void handleChatMessage(DCCChat, String)): this.__Tag
    //#input(void handleChatMessage(DCCChat, String)): this.myWindow
    //#input(void handleChatMessage(DCCChat, String)): this.otherNickname
    //#output(void handleChatMessage(DCCChat, String)): com/dmdirc/ServerManager.me
    //#output(void handleChatMessage(DCCChat, String)): new ArrayList(ServerManager#1) num objects
    //#output(void handleChatMessage(DCCChat, String)): new ServerManager(getServerManager#1) num objects
    //#output(void handleChatMessage(DCCChat, String)): new ServerManager(getServerManager#1).__Tag
    //#output(void handleChatMessage(DCCChat, String)): new ServerManager(getServerManager#1).servers
    //#new obj(void handleChatMessage(DCCChat, String)): new ArrayList(ServerManager#1)
    //#new obj(void handleChatMessage(DCCChat, String)): new ServerManager(getServerManager#1)
    //#pre[3] (void handleChatMessage(DCCChat, String)): init'ed(com/dmdirc/actions/ActionManager.killSwitch)
    //#pre[10] (void handleChatMessage(DCCChat, String)): this.__Tag == com/dmdirc/addons/dcc/DCCChatWindow
    //#pre[11] (void handleChatMessage(DCCChat, String)): this.myWindow != null
    //#pre[1] (void handleChatMessage(DCCChat, String)): (soft) com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions(DCCActions__static_init#3).type != null
    //#pre[8] (void handleChatMessage(DCCChat, String)): (soft) init'ed(com/dmdirc/ServerManager.me)
    //#presumption(void handleChatMessage(DCCChat, String)): com.dmdirc.ui.interfaces.InputWindow:getTranscoder(...)@105 != null
    //#post(void handleChatMessage(DCCChat, String)): com/dmdirc/ServerManager.me == old com/dmdirc/ServerManager.me
    //#post(void handleChatMessage(DCCChat, String)): new ArrayList(ServerManager#1) num objects == undefined
    //#post(void handleChatMessage(DCCChat, String)): new ArrayList(ServerManager#1) num objects == 0, if init'ed
    //#post(void handleChatMessage(DCCChat, String)): new ServerManager(getServerManager#1) num objects == new ArrayList(ServerManager#1) num objects
    //#post(void handleChatMessage(DCCChat, String)): new ServerManager(getServerManager#1).__Tag == new ArrayList(ServerManager#1) num objects
    //#post(void handleChatMessage(DCCChat, String)): new ServerManager(getServerManager#1).servers == undefined
    //#post(void handleChatMessage(DCCChat, String)): new ServerManager(getServerManager#1).servers == null
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:getType
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:com.dmdirc.util.MapList:containsKey
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:com.dmdirc.util.MapList:get
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:java.util.ArrayList:iterator
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:trigger
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:getArity
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:com.dmdirc.interfaces.ActionListener:processEvent
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:triggerActions
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:getUI
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:com.dmdirc.actions.ConditionTree$OPERATION:ordinal
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:java.util.List:size
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:java.util.Deque:pollFirst
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:java.lang.Character:instanceof
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:java.lang.Character:charValue
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:java.util.Deque:isEmpty
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:readTerm
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:java.util.ArrayDeque
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:java.util.Deque:pollLast
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:java.util.Deque:addFirst
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:parseStack
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:java.util.Deque:poll
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:java.util.Deque:add
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:java.util.Deque:size
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:java.lang.String:charAt
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:java.lang.String:valueOf
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:java.lang.Integer:parseInt
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:java.lang.Character:valueOf
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:java.lang.StringBuilder:length
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:com.dmdirc.config.IdentityManager:getGlobalConfig
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptions
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:java.lang.StringBuilder:indexOf
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:java.lang.StringBuilder:replace
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:java.util.Map:entrySet
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:java.util.Set:iterator
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:java.util.Map$Entry:getKey
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:java.util.Map$Entry:getValue
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:[Ljava.lang.String;:instanceof
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:java.lang.String:instanceof
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:java.lang.String:split
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:java.lang.StringBuffer
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:java.lang.StringBuffer:length
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:java.lang.StringBuffer:insert
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:java.lang.StringBuffer:toString
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:doServerSubstitutions
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:doComponentSubstitutions
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:getServer
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:getState
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:com.dmdirc.ServerState:equals
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:getCompatibleComponents
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:java.lang.Object:toString
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:get
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:getArgTypes
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:test
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:evaluate
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:com.dmdirc.ui.interfaces.UIController:getActiveWindow
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:getFrame
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:instanceof
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:java.util.List:get
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:com.dmdirc.commandparser.parsers.GlobalCommandParser:getGlobalCommandParser
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:getCommandParser
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:com.dmdirc.commandparser.parsers.CommandParser:parseCommand
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:java.lang.StringBuffer:setLength
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:java.lang.StringBuffer:append
    //#unanalyzed(void handleChatMessage(DCCChat, String)): Effects-of-calling:com.dmdirc.ui.interfaces.Window:addLine
		ActionManager.processEvent(DCCActions.DCC_CHAT_MESSAGE, buff, this, otherNickname, message);
    //#DCCChatWindow.java:104: ?!precondition failure
    //#    com/dmdirc/actions/ActionManager.processEvent: (soft) type.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}
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.dcc.DCCChatWindow
    //#    method: void handleChatMessage(DCCChat, String)
    //#    basic block: Entry_BB_1
    //#    assertion: (soft) undefined in {340_736, 341_760, 342_528, 343_040, 343_552, 344_064, 344_576, 362_496}
    //#    callee: void com/dmdirc/actions/ActionManager.processEvent(ActionType, StringBuffer, Object[])
    //#    callee assertion: (soft) type.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}
    //#    callee file: ActionManager.java
    //#    callee precondition index: [28]
    //#    callee srcpos: 365
    //#    VN: undefined
    //#    Expected: {340_736, 341_760, 342_528, 343_040, 343_552, 344_064, 344_576, 362_496}
    //#    Bad: {0, Invalid}
    //#    Attribs:  Int  Bad singleton  Bad overlaps +/-1000  Soft  Bad < Exp
		addLine(buff, otherNickname, myWindow.getTranscoder().encode(message));
    //#DCCChatWindow.java:105: Warning: method not available - call not analyzed
    //#    call on StringTranscoder com.dmdirc.ui.interfaces.InputWindow:getTranscoder()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCChatWindow
    //#    method: void handleChatMessage(DCCChat, String)
    //#    unanalyzed callee: StringTranscoder com.dmdirc.ui.interfaces.InputWindow:getTranscoder()
    //#DCCChatWindow.java:105: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.util.StringTranscoder:encode(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCChatWindow
    //#    method: void handleChatMessage(DCCChat, String)
    //#    unanalyzed callee: String com.dmdirc.util.StringTranscoder:encode(String)
	}
    //#DCCChatWindow.java:106: end of method: void com.dmdirc.addons.dcc.DCCChatWindow.handleChatMessage(DCCChat, String)
	
	/**
	 * Called when the socket is closed
	 *
	 * @param dcc The DCCChat that this message is from
	 */
	@Override
	public void socketClosed(final DCCChat dcc) {
		final StringBuffer buff = new StringBuffer("DCCChatInfo");
    //#DCCChatWindow.java:115: method: void com.dmdirc.addons.dcc.DCCChatWindow.socketClosed(DCCChat)
    //#input(void socketClosed(DCCChat)): "DCCChatInfo"._tainted
    //#input(void socketClosed(DCCChat)): __Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void socketClosed(DCCChat)): __Descendant_Table[others]
    //#input(void socketClosed(DCCChat)): __Dispatch_Table.addLine(Ljava/lang/StringBuffer;[Ljava/lang/Object;)V
    //#input(void socketClosed(DCCChat)): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketClosed(DCCChat)): com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions(DCCActions__static_init#5).__Tag
    //#input(void socketClosed(DCCChat)): com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions(DCCActions__static_init#5).type
    //#input(void socketClosed(DCCChat)): com.dmdirc.addons.dcc.actions.DCCEvents__static_init.new DCCEvents(DCCEvents__static_init#13).__Tag
    //#input(void socketClosed(DCCChat)): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketClosed(DCCChat)): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketClosed(DCCChat)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void socketClosed(DCCChat)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void socketClosed(DCCChat)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void socketClosed(DCCChat)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void socketClosed(DCCChat)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void socketClosed(DCCChat)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void socketClosed(DCCChat)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void socketClosed(DCCChat)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void socketClosed(DCCChat)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void socketClosed(DCCChat)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void socketClosed(DCCChat)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void socketClosed(DCCChat)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void socketClosed(DCCChat)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void socketClosed(DCCChat)): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void socketClosed(DCCChat)): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketClosed(DCCChat)): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketClosed(DCCChat)): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketClosed(DCCChat)): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketClosed(DCCChat)): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketClosed(DCCChat)): com/dmdirc/Server.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketClosed(DCCChat)): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketClosed(DCCChat)): com/dmdirc/actions/ActionManager.killSwitch
    //#input(void socketClosed(DCCChat)): com/dmdirc/actions/ActionManager.listeners
    //#input(void socketClosed(DCCChat)): com/dmdirc/actions/CoreActionType.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void socketClosed(DCCChat)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/interfaces/ActionMetaType]
    //#input(void socketClosed(DCCChat)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ActionEvents]
    //#input(void socketClosed(DCCChat)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ChannelEvents]
    //#input(void socketClosed(DCCChat)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ClientEvents]
    //#input(void socketClosed(DCCChat)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/PluginEvents]
    //#input(void socketClosed(DCCChat)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/QueryEvents]
    //#input(void socketClosed(DCCChat)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ServerEvents]
    //#input(void socketClosed(DCCChat)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/addons/dcc/actions/DCCEvents]
    //#input(void socketClosed(DCCChat)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[others]
    //#input(void socketClosed(DCCChat)): com/dmdirc/actions/interfaces/ActionMetaType.__Dispatch_Table.getArity()I
    //#input(void socketClosed(DCCChat)): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/actions/CoreActionType]
    //#input(void socketClosed(DCCChat)): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/actions/interfaces/ActionType]
    //#input(void socketClosed(DCCChat)): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/addons/dcc/actions/DCCActions]
    //#input(void socketClosed(DCCChat)): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[others]
    //#input(void socketClosed(DCCChat)): com/dmdirc/actions/interfaces/ActionType.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void socketClosed(DCCChat)): com/dmdirc/actions/metatypes/ActionEvents.__Dispatch_Table.getArity()I
    //#input(void socketClosed(DCCChat)): com/dmdirc/actions/metatypes/ChannelEvents.__Dispatch_Table.getArity()I
    //#input(void socketClosed(DCCChat)): com/dmdirc/actions/metatypes/ClientEvents.__Dispatch_Table.getArity()I
    //#input(void socketClosed(DCCChat)): com/dmdirc/actions/metatypes/PluginEvents.__Dispatch_Table.getArity()I
    //#input(void socketClosed(DCCChat)): com/dmdirc/actions/metatypes/QueryEvents.__Dispatch_Table.getArity()I
    //#input(void socketClosed(DCCChat)): com/dmdirc/actions/metatypes/ServerEvents.__Dispatch_Table.getArity()I
    //#input(void socketClosed(DCCChat)): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketClosed(DCCChat)): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketClosed(DCCChat)): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketClosed(DCCChat)): com/dmdirc/addons/dcc/actions/DCCActions.DCC_CHAT_SOCKETCLOSED
    //#input(void socketClosed(DCCChat)): com/dmdirc/addons/dcc/actions/DCCActions.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void socketClosed(DCCChat)): com/dmdirc/addons/dcc/actions/DCCEvents.__Dispatch_Table.getArity()I
    //#input(void socketClosed(DCCChat)): this
    //#input(void socketClosed(DCCChat)): this.__Tag
    //#input(void socketClosed(DCCChat)): this.changer
    //#input(void socketClosed(DCCChat)): this.config
    //#input(void socketClosed(DCCChat)): this.listeners
    //#input(void socketClosed(DCCChat)): this.windowClosing
    //#output(void socketClosed(DCCChat)): com/dmdirc/ServerManager.me
    //#output(void socketClosed(DCCChat)): new ArrayList(ServerManager#1) num objects
    //#output(void socketClosed(DCCChat)): new ServerManager(getServerManager#1) num objects
    //#output(void socketClosed(DCCChat)): new ServerManager(getServerManager#1).__Tag
    //#output(void socketClosed(DCCChat)): new ServerManager(getServerManager#1).servers
    //#output(void socketClosed(DCCChat)): this.icon
    //#new obj(void socketClosed(DCCChat)): new ArrayList(ServerManager#1)
    //#new obj(void socketClosed(DCCChat)): new ServerManager(getServerManager#1)
    //#pre[3] (void socketClosed(DCCChat)): init'ed(com/dmdirc/actions/ActionManager.killSwitch)
    //#pre[7] (void socketClosed(DCCChat)): this.__Tag == com/dmdirc/addons/dcc/DCCChatWindow
    //#pre[12] (void socketClosed(DCCChat)): init'ed(this.windowClosing)
    //#pre[1] (void socketClosed(DCCChat)): (soft) com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions(DCCActions__static_init#5).type != null
    //#pre[4] (void socketClosed(DCCChat)): (soft) init'ed(com/dmdirc/ServerManager.me)
    //#pre[9] (void socketClosed(DCCChat)): (soft) this.config != null
    //#pre[10] (void socketClosed(DCCChat)): (soft) this.listeners != null
    //#post(void socketClosed(DCCChat)): com/dmdirc/ServerManager.me == old com/dmdirc/ServerManager.me
    //#post(void socketClosed(DCCChat)): this.icon == One-of{old this.icon, &"dcc-chat-inactive"}
    //#post(void socketClosed(DCCChat)): new ArrayList(ServerManager#1) num objects == undefined
    //#post(void socketClosed(DCCChat)): new ArrayList(ServerManager#1) num objects == 0, if init'ed
    //#post(void socketClosed(DCCChat)): new ServerManager(getServerManager#1) num objects == new ArrayList(ServerManager#1) num objects
    //#post(void socketClosed(DCCChat)): new ServerManager(getServerManager#1).__Tag == new ArrayList(ServerManager#1) num objects
    //#post(void socketClosed(DCCChat)): new ServerManager(getServerManager#1).servers == undefined
    //#post(void socketClosed(DCCChat)): new ServerManager(getServerManager#1).servers == null
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:getType
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:com.dmdirc.util.MapList:containsKey
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:com.dmdirc.util.MapList:get
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:java.util.ArrayList:iterator
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:trigger
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:getArity
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:com.dmdirc.interfaces.ActionListener:processEvent
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:triggerActions
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:getUI
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:com.dmdirc.actions.ConditionTree$OPERATION:ordinal
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:java.util.List:size
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:java.util.Deque:pollFirst
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:java.lang.Character:instanceof
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:java.lang.Character:charValue
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:java.util.Deque:isEmpty
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:readTerm
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:java.util.ArrayDeque
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:java.util.Deque:pollLast
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:java.util.Deque:addFirst
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:parseStack
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:java.util.Deque:poll
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:java.util.Deque:add
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:java.util.Deque:size
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:java.lang.String:charAt
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:java.lang.String:valueOf
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:java.lang.Integer:parseInt
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:java.lang.Character:valueOf
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:java.lang.StringBuilder:length
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:com.dmdirc.config.IdentityManager:getGlobalConfig
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptions
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:java.lang.StringBuilder:indexOf
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:java.lang.StringBuilder:replace
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:java.util.Map:entrySet
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:java.util.Set:iterator
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:java.util.Map$Entry:getKey
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:java.util.Map$Entry:getValue
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:[Ljava.lang.String;:instanceof
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:java.lang.String:instanceof
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:java.lang.String:split
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:java.lang.StringBuffer
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:java.lang.StringBuffer:length
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:java.lang.StringBuffer:insert
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:java.lang.StringBuffer:toString
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:doServerSubstitutions
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:doComponentSubstitutions
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:getServer
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:getState
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:com.dmdirc.ServerState:equals
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:getCompatibleComponents
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:java.lang.Object:toString
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:get
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:getArgTypes
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:test
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:evaluate
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:com.dmdirc.ui.interfaces.UIController:getActiveWindow
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:getFrame
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:instanceof
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:java.util.List:get
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:com.dmdirc.commandparser.parsers.GlobalCommandParser:getGlobalCommandParser
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:getCommandParser
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:com.dmdirc.commandparser.parsers.CommandParser:parseCommand
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:java.lang.StringBuffer:setLength
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:java.lang.StringBuffer:append
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:com.dmdirc.ui.interfaces.Window:addLine
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:com.dmdirc.interfaces.IconChangeListener:iconChanged
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:com.dmdirc.config.ConfigManager:removeListener
    //#unanalyzed(void socketClosed(DCCChat)): Effects-of-calling:com.dmdirc.config.ConfigManager:addChangeListener
    //#test_vector(void socketClosed(DCCChat)): this.windowClosing: {1}, {0}
		ActionManager.processEvent(DCCActions.DCC_CHAT_SOCKETCLOSED, buff, this);
    //#DCCChatWindow.java:116: ?!precondition failure
    //#    com/dmdirc/actions/ActionManager.processEvent: (soft) type.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}
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.dcc.DCCChatWindow
    //#    method: void socketClosed(DCCChat)
    //#    basic block: Entry_BB_1
    //#    assertion: (soft) undefined in {340_736, 341_760, 342_528, 343_040, 343_552, 344_064, 344_576, 362_496}
    //#    callee: void com/dmdirc/actions/ActionManager.processEvent(ActionType, StringBuffer, Object[])
    //#    callee assertion: (soft) type.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}
    //#    callee file: ActionManager.java
    //#    callee precondition index: [28]
    //#    callee srcpos: 365
    //#    VN: undefined
    //#    Expected: {340_736, 341_760, 342_528, 343_040, 343_552, 344_064, 344_576, 362_496}
    //#    Bad: {0, Invalid}
    //#    Attribs:  Int  Bad singleton  Bad overlaps +/-1000  Soft  Bad < Exp
		addLine(buff, "Socket closed");
		if (!isWindowClosing()) {
			setIcon("dcc-chat-inactive");
		}
	}
    //#DCCChatWindow.java:121: end of method: void com.dmdirc.addons.dcc.DCCChatWindow.socketClosed(DCCChat)
	
	/**
	 * Called when the socket is opened
	 *
	 * @param dcc The DCCChat that this message is from
	 */
	@Override
	public void socketOpened(final DCCChat dcc) {
		final StringBuffer buff = new StringBuffer("DCCChatInfo");
    //#DCCChatWindow.java:130: method: void com.dmdirc.addons.dcc.DCCChatWindow.socketOpened(DCCChat)
    //#input(void socketOpened(DCCChat)): "DCCChatInfo"._tainted
    //#input(void socketOpened(DCCChat)): __Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void socketOpened(DCCChat)): __Descendant_Table[others]
    //#input(void socketOpened(DCCChat)): __Dispatch_Table.addLine(Ljava/lang/StringBuffer;[Ljava/lang/Object;)V
    //#input(void socketOpened(DCCChat)): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketOpened(DCCChat)): com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions(DCCActions__static_init#6).__Tag
    //#input(void socketOpened(DCCChat)): com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions(DCCActions__static_init#6).type
    //#input(void socketOpened(DCCChat)): com.dmdirc.addons.dcc.actions.DCCEvents__static_init.new DCCEvents(DCCEvents__static_init#16).__Tag
    //#input(void socketOpened(DCCChat)): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketOpened(DCCChat)): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketOpened(DCCChat)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void socketOpened(DCCChat)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void socketOpened(DCCChat)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void socketOpened(DCCChat)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void socketOpened(DCCChat)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void socketOpened(DCCChat)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void socketOpened(DCCChat)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void socketOpened(DCCChat)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void socketOpened(DCCChat)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void socketOpened(DCCChat)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void socketOpened(DCCChat)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void socketOpened(DCCChat)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void socketOpened(DCCChat)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void socketOpened(DCCChat)): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void socketOpened(DCCChat)): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketOpened(DCCChat)): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketOpened(DCCChat)): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketOpened(DCCChat)): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketOpened(DCCChat)): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketOpened(DCCChat)): com/dmdirc/Server.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketOpened(DCCChat)): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketOpened(DCCChat)): com/dmdirc/actions/ActionManager.killSwitch
    //#input(void socketOpened(DCCChat)): com/dmdirc/actions/ActionManager.listeners
    //#input(void socketOpened(DCCChat)): com/dmdirc/actions/CoreActionType.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void socketOpened(DCCChat)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/interfaces/ActionMetaType]
    //#input(void socketOpened(DCCChat)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ActionEvents]
    //#input(void socketOpened(DCCChat)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ChannelEvents]
    //#input(void socketOpened(DCCChat)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ClientEvents]
    //#input(void socketOpened(DCCChat)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/PluginEvents]
    //#input(void socketOpened(DCCChat)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/QueryEvents]
    //#input(void socketOpened(DCCChat)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ServerEvents]
    //#input(void socketOpened(DCCChat)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/addons/dcc/actions/DCCEvents]
    //#input(void socketOpened(DCCChat)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[others]
    //#input(void socketOpened(DCCChat)): com/dmdirc/actions/interfaces/ActionMetaType.__Dispatch_Table.getArity()I
    //#input(void socketOpened(DCCChat)): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/actions/CoreActionType]
    //#input(void socketOpened(DCCChat)): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/actions/interfaces/ActionType]
    //#input(void socketOpened(DCCChat)): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/addons/dcc/actions/DCCActions]
    //#input(void socketOpened(DCCChat)): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[others]
    //#input(void socketOpened(DCCChat)): com/dmdirc/actions/interfaces/ActionType.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void socketOpened(DCCChat)): com/dmdirc/actions/metatypes/ActionEvents.__Dispatch_Table.getArity()I
    //#input(void socketOpened(DCCChat)): com/dmdirc/actions/metatypes/ChannelEvents.__Dispatch_Table.getArity()I
    //#input(void socketOpened(DCCChat)): com/dmdirc/actions/metatypes/ClientEvents.__Dispatch_Table.getArity()I
    //#input(void socketOpened(DCCChat)): com/dmdirc/actions/metatypes/PluginEvents.__Dispatch_Table.getArity()I
    //#input(void socketOpened(DCCChat)): com/dmdirc/actions/metatypes/QueryEvents.__Dispatch_Table.getArity()I
    //#input(void socketOpened(DCCChat)): com/dmdirc/actions/metatypes/ServerEvents.__Dispatch_Table.getArity()I
    //#input(void socketOpened(DCCChat)): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketOpened(DCCChat)): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketOpened(DCCChat)): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketOpened(DCCChat)): com/dmdirc/addons/dcc/actions/DCCActions.DCC_CHAT_SOCKETOPENED
    //#input(void socketOpened(DCCChat)): com/dmdirc/addons/dcc/actions/DCCActions.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void socketOpened(DCCChat)): com/dmdirc/addons/dcc/actions/DCCEvents.__Dispatch_Table.getArity()I
    //#input(void socketOpened(DCCChat)): this
    //#input(void socketOpened(DCCChat)): this.__Tag
    //#input(void socketOpened(DCCChat)): this.changer
    //#input(void socketOpened(DCCChat)): this.config
    //#input(void socketOpened(DCCChat)): this.listeners
    //#output(void socketOpened(DCCChat)): com/dmdirc/ServerManager.me
    //#output(void socketOpened(DCCChat)): new ArrayList(ServerManager#1) num objects
    //#output(void socketOpened(DCCChat)): new ServerManager(getServerManager#1) num objects
    //#output(void socketOpened(DCCChat)): new ServerManager(getServerManager#1).__Tag
    //#output(void socketOpened(DCCChat)): new ServerManager(getServerManager#1).servers
    //#output(void socketOpened(DCCChat)): this.icon
    //#new obj(void socketOpened(DCCChat)): new ArrayList(ServerManager#1)
    //#new obj(void socketOpened(DCCChat)): new ServerManager(getServerManager#1)
    //#pre[3] (void socketOpened(DCCChat)): init'ed(com/dmdirc/actions/ActionManager.killSwitch)
    //#pre[6] (void socketOpened(DCCChat)): this.__Tag == com/dmdirc/addons/dcc/DCCChatWindow
    //#pre[8] (void socketOpened(DCCChat)): this.config != null
    //#pre[9] (void socketOpened(DCCChat)): this.listeners != null
    //#pre[1] (void socketOpened(DCCChat)): (soft) com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions(DCCActions__static_init#6).type != null
    //#pre[4] (void socketOpened(DCCChat)): (soft) init'ed(com/dmdirc/ServerManager.me)
    //#post(void socketOpened(DCCChat)): com/dmdirc/ServerManager.me == old com/dmdirc/ServerManager.me
    //#post(void socketOpened(DCCChat)): this.icon == &"dcc-chat-active"
    //#post(void socketOpened(DCCChat)): new ArrayList(ServerManager#1) num objects == undefined
    //#post(void socketOpened(DCCChat)): new ArrayList(ServerManager#1) num objects == 0, if init'ed
    //#post(void socketOpened(DCCChat)): new ServerManager(getServerManager#1) num objects == new ArrayList(ServerManager#1) num objects
    //#post(void socketOpened(DCCChat)): new ServerManager(getServerManager#1).__Tag == new ArrayList(ServerManager#1) num objects
    //#post(void socketOpened(DCCChat)): new ServerManager(getServerManager#1).servers == undefined
    //#post(void socketOpened(DCCChat)): new ServerManager(getServerManager#1).servers == null
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:getType
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:com.dmdirc.util.MapList:containsKey
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:com.dmdirc.util.MapList:get
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:java.util.ArrayList:iterator
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:trigger
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:getArity
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:com.dmdirc.interfaces.ActionListener:processEvent
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:triggerActions
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:getUI
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:com.dmdirc.actions.ConditionTree$OPERATION:ordinal
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:java.util.List:size
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:java.util.Deque:pollFirst
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:java.lang.Character:instanceof
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:java.lang.Character:charValue
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:java.util.Deque:isEmpty
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:readTerm
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:java.util.ArrayDeque
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:java.util.Deque:pollLast
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:java.util.Deque:addFirst
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:parseStack
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:java.util.Deque:poll
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:java.util.Deque:add
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:java.util.Deque:size
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:java.lang.String:charAt
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:java.lang.String:valueOf
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:java.lang.Integer:parseInt
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:java.lang.Character:valueOf
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:java.lang.StringBuilder:length
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:com.dmdirc.config.IdentityManager:getGlobalConfig
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptions
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:java.lang.StringBuilder:indexOf
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:java.lang.StringBuilder:replace
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:java.util.Map:entrySet
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:java.util.Set:iterator
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:java.util.Map$Entry:getKey
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:java.util.Map$Entry:getValue
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:[Ljava.lang.String;:instanceof
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:java.lang.String:instanceof
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:java.lang.String:split
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:java.lang.StringBuffer
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:java.lang.StringBuffer:length
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:java.lang.StringBuffer:insert
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:java.lang.StringBuffer:toString
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:doServerSubstitutions
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:doComponentSubstitutions
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:getServer
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:getState
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:com.dmdirc.ServerState:equals
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:getCompatibleComponents
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:java.lang.Object:toString
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:get
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:getArgTypes
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:test
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:evaluate
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:com.dmdirc.ui.interfaces.UIController:getActiveWindow
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:getFrame
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:instanceof
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:java.util.List:get
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:com.dmdirc.commandparser.parsers.GlobalCommandParser:getGlobalCommandParser
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:getCommandParser
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:com.dmdirc.commandparser.parsers.CommandParser:parseCommand
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:java.lang.StringBuffer:setLength
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:java.lang.StringBuffer:append
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:com.dmdirc.ui.interfaces.Window:addLine
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:com.dmdirc.interfaces.IconChangeListener:iconChanged
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:com.dmdirc.config.ConfigManager:removeListener
    //#unanalyzed(void socketOpened(DCCChat)): Effects-of-calling:com.dmdirc.config.ConfigManager:addChangeListener
		ActionManager.processEvent(DCCActions.DCC_CHAT_SOCKETOPENED, buff, this);
    //#DCCChatWindow.java:131: ?!precondition failure
    //#    com/dmdirc/actions/ActionManager.processEvent: (soft) type.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}
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.dcc.DCCChatWindow
    //#    method: void socketOpened(DCCChat)
    //#    basic block: Entry_BB_1
    //#    assertion: (soft) undefined in {340_736, 341_760, 342_528, 343_040, 343_552, 344_064, 344_576, 362_496}
    //#    callee: void com/dmdirc/actions/ActionManager.processEvent(ActionType, StringBuffer, Object[])
    //#    callee assertion: (soft) type.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}
    //#    callee file: ActionManager.java
    //#    callee precondition index: [28]
    //#    callee srcpos: 365
    //#    VN: undefined
    //#    Expected: {340_736, 341_760, 342_528, 343_040, 343_552, 344_064, 344_576, 362_496}
    //#    Bad: {0, Invalid}
    //#    Attribs:  Int  Bad singleton  Bad overlaps +/-1000  Soft  Bad < Exp
		addLine(buff, "Socket opened");
		setIcon("dcc-chat-active");
	}
    //#DCCChatWindow.java:134: end of method: void com.dmdirc.addons.dcc.DCCChatWindow.socketOpened(DCCChat)
	
	/**
	 * Closes this container (and it's associated frame).
	 */
	@Override
	public void windowClosing() {
		super.windowClosing();
    //#DCCChatWindow.java:141: method: void com.dmdirc.addons.dcc.DCCChatWindow.windowClosing()
    //#input(void windowClosing()): __Dispatch_Table.socketClosed(Lcom/dmdirc/addons/dcc/DCCChat;)V
    //#input(void windowClosing()): com/dmdirc/addons/dcc/DCC.__Descendant_Table[com/dmdirc/addons/dcc/DCCChat]
    //#input(void windowClosing()): com/dmdirc/addons/dcc/DCC.__Descendant_Table[com/dmdirc/addons/dcc/DCCSend]
    //#input(void windowClosing()): com/dmdirc/addons/dcc/DCC.__Descendant_Table[com/dmdirc/addons/dcc/DCC]
    //#input(void windowClosing()): com/dmdirc/addons/dcc/DCC.__Descendant_Table[others]
    //#input(void windowClosing()): com/dmdirc/addons/dcc/DCC.__Dispatch_Table.socketClosed()V
    //#input(void windowClosing()): com/dmdirc/addons/dcc/DCCChat.__Descendant_Table[com/dmdirc/addons/dcc/DCCChat]
    //#input(void windowClosing()): com/dmdirc/addons/dcc/DCCChat.__Descendant_Table[others]
    //#input(void windowClosing()): com/dmdirc/addons/dcc/DCCChat.__Dispatch_Table.close()V
    //#input(void windowClosing()): com/dmdirc/addons/dcc/DCCChat.__Dispatch_Table.socketClosed()V
    //#input(void windowClosing()): com/dmdirc/addons/dcc/DCCChatInterface.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatInterface]
    //#input(void windowClosing()): com/dmdirc/addons/dcc/DCCChatInterface.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void windowClosing()): com/dmdirc/addons/dcc/DCCChatInterface.__Descendant_Table[others]
    //#input(void windowClosing()): com/dmdirc/addons/dcc/DCCChatInterface.__Dispatch_Table.socketClosed(Lcom/dmdirc/addons/dcc/DCCChat;)V
    //#input(void windowClosing()): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void windowClosing()): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void windowClosing()): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void windowClosing()): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void windowClosing()): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[others]
    //#input(void windowClosing()): com/dmdirc/addons/dcc/DCCSend.SENDS
    //#input(void windowClosing()): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.socketClosed()V
    //#input(void windowClosing()): com/dmdirc/addons/dcc/DCCSendInterface.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendInterface]
    //#input(void windowClosing()): com/dmdirc/addons/dcc/DCCSendInterface.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void windowClosing()): com/dmdirc/addons/dcc/DCCSendInterface.__Descendant_Table[others]
    //#input(void windowClosing()): com/dmdirc/addons/dcc/DCCSendInterface.__Dispatch_Table.socketClosed(Lcom/dmdirc/addons/dcc/DCCSend;)V
    //#input(void windowClosing()): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.socketClosed(Lcom/dmdirc/addons/dcc/DCCSend;)V
    //#input(void windowClosing()): this
    //#input(void windowClosing()): this.dcc
    //#input(void windowClosing()): this.dcc.__Tag
    //#input(void windowClosing()): this.dcc.handler.__Tag
    //#input(void windowClosing()): this.dcc.serverListeningSem
    //#input(void windowClosing()): this.dcc.serverSocket
    //#input(void windowClosing()): this.dcc.serverSocketSem
    //#input(void windowClosing()): this.dcc.socket
    //#input(void windowClosing()): this.myWindow
    //#input(void windowClosing()): this.plugin
    //#input(void windowClosing()): this.plugin.childFrames
    //#input(void windowClosing()): this.plugin.container
    //#output(void windowClosing()): this.dcc.in
    //#output(void windowClosing()): this.dcc.out
    //#output(void windowClosing()): this.dcc.serverSocket
    //#output(void windowClosing()): this.dcc.socket
    //#output(void windowClosing()): this.myWindow
    //#output(void windowClosing()): this.plugin.container
    //#output(void windowClosing()): this.windowClosing
    //#pre[11] (void windowClosing()): this.myWindow != null
    //#pre[12] (void windowClosing()): init'ed(this.plugin.container)
    //#pre[16] (void windowClosing()): this.dcc != null
    //#pre[37] (void windowClosing()): this.dcc.serverSocketSem != null
    //#pre[40] (void windowClosing()): this.plugin != null
    //#pre[9] (void windowClosing()): (soft) init'ed(this.dcc.serverSocket)
    //#pre[10] (void windowClosing()): (soft) init'ed(this.dcc.socket)
    //#pre[20] (void windowClosing()): (soft) this.dcc.__Tag == com/dmdirc/addons/dcc/DCCChat
    //#pre[36] (void windowClosing()): (soft) this.dcc.serverListeningSem != null
    //#pre[42] (void windowClosing()): (soft) this.plugin.childFrames != null
    //#post(void windowClosing()): possibly_updated(this.dcc.in)
    //#post(void windowClosing()): possibly_updated(this.dcc.out)
    //#post(void windowClosing()): this.dcc.serverSocket == null
    //#post(void windowClosing()): this.dcc.socket == null
    //#post(void windowClosing()): this.myWindow == null
    //#post(void windowClosing()): this.plugin.container == One-of{old this.plugin.container, null}
    //#post(void windowClosing()): init'ed(this.plugin.container)
    //#post(void windowClosing()): this.windowClosing == 1
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.lang.StringBuffer
    //#unanalyzed(void windowClosing()): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void windowClosing()): Effects-of-calling:getType
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void windowClosing()): Effects-of-calling:com.dmdirc.util.MapList:containsKey
    //#unanalyzed(void windowClosing()): Effects-of-calling:com.dmdirc.util.MapList:get
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.util.ArrayList:iterator
    //#unanalyzed(void windowClosing()): Effects-of-calling:trigger
    //#unanalyzed(void windowClosing()): Effects-of-calling:getArity
    //#unanalyzed(void windowClosing()): Effects-of-calling:com.dmdirc.interfaces.ActionListener:processEvent
    //#unanalyzed(void windowClosing()): Effects-of-calling:addLine
    //#unanalyzed(void windowClosing()): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:setVisible
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void windowClosing()): Effects-of-calling:com.dmdirc.addons.dcc.DCCFrame:close
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.util.List:clear
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.util.List:remove
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.util.List:isEmpty
    //#unanalyzed(void windowClosing()): Effects-of-calling:com.dmdirc.ui.WindowManager:removeWindow
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.util.concurrent.Semaphore:release
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.util.concurrent.Semaphore:tryAcquire
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.lang.Thread:sleep
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.net.ServerSocket:isClosed
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.net.ServerSocket:close
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.net.Socket:isClosed
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.net.Socket:close
    //#unanalyzed(void windowClosing()): Effects-of-calling:socketClosed
    //#unanalyzed(void windowClosing()): Effects-of-calling:setIcon
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.io.DataOutputStream:close
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.io.DataInputStream:close
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.lang.Long:valueOf
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.lang.String:format
    //#unanalyzed(void windowClosing()): Effects-of-calling:javax.swing.JButton:setText
    //#unanalyzed(void windowClosing()): Effects-of-calling:javax.swing.JLabel:setText
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.lang.System:currentTimeMillis
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.lang.Math:floor
    //#unanalyzed(void windowClosing()): Effects-of-calling:javax.swing.JProgressBar:setValue
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.lang.Double:valueOf
    //#unanalyzed(void windowClosing()): Effects-of-calling:isWindowClosing
		dcc.close();
	}
    //#DCCChatWindow.java:143: end of method: void com.dmdirc.addons.dcc.DCCChatWindow.windowClosing()
}
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.activateFrame()V
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.addIconChangeListener(Lcom/dmdirc/interfaces/IconChangeListener;)V
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.addLine(Ljava/lang/StringBuffer;[Ljava/lang/Object;)V
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.addNotificationListener(Lcom/dmdirc/interfaces/NotificationListener;)V
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.addSelectionListener(Lcom/dmdirc/interfaces/SelectionListener;)V
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.clearNotification()V
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.close()V
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.doNotification(Ljava/lang/String;Lcom/dmdirc/actions/interfaces/ActionType;[Ljava/lang/Object;)V
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.getConfigManager()Lcom/dmdirc/config/ConfigManager;
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.getContentPane()Ljava/awt/Container;
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.getDCC()Lcom/dmdirc/addons/dcc/DCCChat;
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.getIcon()Ljavax/swing/Icon;
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.getMaxLineLength()I
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.getNotification()Ljava/awt/Color;
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.getNumLines(Ljava/lang/String;)I
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.handleChatMessage(Lcom/dmdirc/addons/dcc/DCCChat;Ljava/lang/String;)V
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.handleNotification(Ljava/lang/String;[Ljava/lang/Object;)V
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.iconUpdated()V
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.isWindowClosing()Z
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.modifyNotificationArgs(Ljava/util/List;Ljava/util/List;)V
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.ownsFrame(Lcom/dmdirc/ui/interfaces/Window;)Z
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.processNotificationArg(Ljava/lang/Object;Ljava/util/List;)Z
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.removeIconChangeListener(Lcom/dmdirc/interfaces/IconChangeListener;)V
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.removeNotificationListener(Lcom/dmdirc/interfaces/NotificationListener;)V
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.removeSelectionListener(Lcom/dmdirc/interfaces/SelectionListener;)V
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.sendLine(Ljava/lang/String;)V
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.sendNotification(Ljava/awt/Color;)V
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.setIcon(Ljava/lang/String;)V
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.socketClosed(Lcom/dmdirc/addons/dcc/DCCChat;)V
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.socketOpened(Lcom/dmdirc/addons/dcc/DCCChat;)V
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.splitLine(Ljava/lang/String;)Ljava/util/List;
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.toString()Ljava/lang/String;
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.windowActivated()V
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.windowClosed()V
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.windowClosing()V
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.windowDeactivated()V
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.windowOpened()V
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): com/dmdirc/addons/dcc/DCCChatInterface.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#output(com.dmdirc.addons.dcc.DCCChatWindow__static_init): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow] == &__Dispatch_Table
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow] == &__Dispatch_Table
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow] == &__Dispatch_Table
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): com/dmdirc/addons/dcc/DCCChatInterface.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow] == &__Dispatch_Table
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow] == &__Dispatch_Table
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.activateFrame()V == &com/dmdirc/FrameContainer.activateFrame
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.addIconChangeListener(Lcom/dmdirc/interfaces/IconChangeListener;)V == &com/dmdirc/FrameContainer.addIconChangeListener
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V == &com/dmdirc/FrameContainer.addLine
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.addLine(Ljava/lang/StringBuffer;[Ljava/lang/Object;)V == &com/dmdirc/FrameContainer.addLine
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.addNotificationListener(Lcom/dmdirc/interfaces/NotificationListener;)V == &com/dmdirc/FrameContainer.addNotificationListener
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.addSelectionListener(Lcom/dmdirc/interfaces/SelectionListener;)V == &com/dmdirc/FrameContainer.addSelectionListener
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.clearNotification()V == &com/dmdirc/FrameContainer.clearNotification
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.close()V == &com/dmdirc/FrameContainer.close
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V == &com/dmdirc/WritableFrameContainer.despatchNotification
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__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.DCCChatWindow__static_init): __Dispatch_Table.getConfigManager()Lcom/dmdirc/config/ConfigManager; == &com/dmdirc/FrameContainer.getConfigManager
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.getContentPane()Ljava/awt/Container; == &com/dmdirc/addons/dcc/DCCFrame.getContentPane
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.getDCC()Lcom/dmdirc/addons/dcc/DCCChat; == &getDCC
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow; == &com/dmdirc/addons/dcc/DCCFrame.getFrame
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window; == &com/dmdirc/addons/dcc/DCCFrame.getFrame
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.getIcon()Ljavax/swing/Icon; == &com/dmdirc/FrameContainer.getIcon
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.getMaxLineLength()I == &com/dmdirc/addons/dcc/DCCFrame.getMaxLineLength
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.getNotification()Ljava/awt/Color; == &com/dmdirc/FrameContainer.getNotification
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.getNumLines(Ljava/lang/String;)I == &com/dmdirc/WritableFrameContainer.getNumLines
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.getServer()Lcom/dmdirc/Server; == &com/dmdirc/addons/dcc/DCCFrame.getServer
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.handleChatMessage(Lcom/dmdirc/addons/dcc/DCCChat;Ljava/lang/String;)V == &handleChatMessage
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.handleNotification(Ljava/lang/String;[Ljava/lang/Object;)V == &com/dmdirc/WritableFrameContainer.handleNotification
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.iconUpdated()V == &com/dmdirc/FrameContainer.iconUpdated
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.isWindowClosing()Z == &com/dmdirc/addons/dcc/DCCFrame.isWindowClosing
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.modifyNotificationArgs(Ljava/util/List;Ljava/util/List;)V == &com/dmdirc/WritableFrameContainer.modifyNotificationArgs
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.ownsFrame(Lcom/dmdirc/ui/interfaces/Window;)Z == &com/dmdirc/FrameContainer.ownsFrame
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.processNotificationArg(Ljava/lang/Object;Ljava/util/List;)Z == &com/dmdirc/WritableFrameContainer.processNotificationArg
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.removeIconChangeListener(Lcom/dmdirc/interfaces/IconChangeListener;)V == &com/dmdirc/FrameContainer.removeIconChangeListener
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.removeNotificationListener(Lcom/dmdirc/interfaces/NotificationListener;)V == &com/dmdirc/FrameContainer.removeNotificationListener
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.removeSelectionListener(Lcom/dmdirc/interfaces/SelectionListener;)V == &com/dmdirc/FrameContainer.removeSelectionListener
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.sendLine(Ljava/lang/String;)V == &sendLine
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.sendNotification(Ljava/awt/Color;)V == &com/dmdirc/FrameContainer.sendNotification
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.setIcon(Ljava/lang/String;)V == &com/dmdirc/FrameContainer.setIcon
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.socketClosed(Lcom/dmdirc/addons/dcc/DCCChat;)V == &socketClosed
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.socketOpened(Lcom/dmdirc/addons/dcc/DCCChat;)V == &socketOpened
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.splitLine(Ljava/lang/String;)Ljava/util/List; == &com/dmdirc/WritableFrameContainer.splitLine
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.toString()Ljava/lang/String; == &com/dmdirc/addons/dcc/DCCFrame.toString
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.windowActivated()V == &com/dmdirc/FrameContainer.windowActivated
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.windowClosed()V == &com/dmdirc/FrameContainer.windowClosed
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.windowClosing()V == &windowClosing
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.windowDeactivated()V == &com/dmdirc/FrameContainer.windowDeactivated
    //#post(com.dmdirc.addons.dcc.DCCChatWindow__static_init): __Dispatch_Table.windowOpened()V == &com/dmdirc/FrameContainer.windowOpened
    //#DCCChatWindow.java:: end of method: com.dmdirc.addons.dcc.DCCChatWindow.com.dmdirc.addons.dcc.DCCChatWindow__static_init
    //#DCCChatWindow.java:: end of class: com.dmdirc.addons.dcc.DCCChatWindow
