//# 7 errors, 1,432 messages
//#
/*
    //#DCCSendWindow.java:1:1: class: com.dmdirc.addons.dcc.DCCSendWindow$1
    //#DCCSendWindow.java:1:1: method: com.dmdirc.addons.dcc.DCCSendWindow$1.com.dmdirc.addons.dcc.DCCSendWindow$1__static_init
    //#DCCSendWindow.java:1:1: class: com.dmdirc.addons.dcc.DCCSendWindow
    //#DCCSendWindow.java:1:1: method: com.dmdirc.addons.dcc.DCCSendWindow.com.dmdirc.addons.dcc.DCCSendWindow__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.config.IdentityManager;
import com.dmdirc.parser.irc.IRCParser;
import com.dmdirc.parser.irc.SocketState;
import com.dmdirc.parser.irc.callbacks.interfaces.ISocketClosed;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JProgressBar;

import net.miginfocom.swing.MigLayout;

/**
 * This class links DCC Send objects to a window.
 *
 * @author Shane 'Dataforce' McCormack
 */
public class DCCSendWindow extends DCCFrame implements DCCSendInterface, ActionListener, ISocketClosed {
	/** The DCCSend object we are a window for */
	private final DCCSend dcc;
	
	/** Other Nickname */
	private final String otherNickname;
	
	/** Total data transfered */
	private volatile long transferCount = 0;
	
	/** Time Started */
	private long timeStarted = 0;
	
	/** Progress Bar */
	private final JProgressBar progress = new JProgressBar();
	
	/** Status Label */
	private final JLabel status = new JLabel("Status: Waiting");
	
	/** Speed Label */
	private final JLabel speed = new JLabel("Speed: Unknown");
	
	/** Time Label */
	private final JLabel remaining = new JLabel("Time Remaining: Unknown");
	
	/** Time Taken */
	private final JLabel taken = new JLabel("Time Taken: 00:00");
	
	/** Button */
	private final JButton button = new JButton("Cancel");

    /** Plugin that this send belongs to. */
    private final DCCPlugin myPlugin;
	
	/** IRC Parser that caused this send */
	private IRCParser parser = null;
	
	/**
	 * Creates a new instance of DCCSendWindow with a given DCCSend object.
	 *
	 * @param plugin the DCC Plugin responsible for this window
	 * @param dcc The DCCSend object this window wraps around
	 * @param title The title of this window
	 * @param targetNick Nickname of target
	 * @param parser The IRC parser that initiated this send
	 */
	public DCCSendWindow(final DCCPlugin plugin, final DCCSend dcc, final String title, final String targetNick, final IRCParser parser) {
		super(plugin, title, dcc.getType() == DCCSend.TransferType.SEND ? "dcc-send-inactive" : "dcc-receive-inactive");
    //#DCCSendWindow.java:95: method: void com.dmdirc.addons.dcc.DCCSendWindow.com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): "&#10;&#10;Closing this window will close all the active DCCs"._tainted
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): "From: "._tainted
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): "Recieving: "._tainted
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): "Sending: "._tainted
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): "To: "._tainted
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): __Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): __Descendant_Table[others]
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): __Dispatch_Table.getContentPane()Ljava/awt/Container;
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com/dmdirc/FrameContainer.java.awt.Color.BLACK
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com/dmdirc/Server.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[others]
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com/dmdirc/addons/dcc/DCCSend$TransferType.SEND
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com/dmdirc/addons/dcc/DCCSend.__Descendant_Table[com/dmdirc/addons/dcc/DCCSend]
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com/dmdirc/addons/dcc/DCCSend.__Descendant_Table[others]
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.getShortFileName()Ljava/lang/String;
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.getType()Lcom/dmdirc/addons/dcc/DCCSend$TransferType;
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.setHandler(Lcom/dmdirc/addons/dcc/DCCSendInterface;)V
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): dcc
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): dcc.__Tag
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): dcc.filename
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): dcc.transferType
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): parser
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): plugin
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): plugin.childFrames
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): plugin.container
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): plugin.container.__Tag
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): targetNick
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): targetNick._tainted
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.__Tag
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): title
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): dcc.handler
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new DCCPlugin$3(createContainer#1) num objects
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new DCCPlugin$3(createContainer#1).__Tag
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new DCCPlugin$3(createContainer#1).changer
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new DCCPlugin$3(createContainer#1).config
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new DCCPlugin$3(createContainer#1).icon
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new DCCPlugin$3(createContainer#1).listeners
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new DCCPlugin$3(createContainer#1).myWindow
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new DCCPlugin$3(createContainer#1).notification
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new DCCPlugin$3(createContainer#1).plugin
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new DCCPlugin$3(createContainer#1).this$0
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new DCCPlugin$3(createContainer#1).title
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new DCCPlugin$3(createContainer#1).windowClosing
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new FrameContainer$IconChanger(FrameContainer#2) num objects
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new FrameContainer$IconChanger(FrameContainer#2).__Tag
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new FrameContainer$IconChanger(FrameContainer#2).this$0
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new JButton(DCCSendWindow#6) num objects
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new JLabel(DCCSendWindow#2) num objects
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new JLabel(DCCSendWindow#3) num objects
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new JLabel(DCCSendWindow#4) num objects
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new JLabel(DCCSendWindow#5) num objects
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new JProgressBar(DCCSendWindow#1) num objects
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new ListenerList(FrameContainer#1) num objects
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new ListenerList(FrameContainer#1).__Lock
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): plugin.container
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.__Tag
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.button
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.changer
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.config
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.dcc
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.icon
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.listeners
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.myPlugin
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.myWindow
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.notification
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.otherNickname
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.parser
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.plugin
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.progress
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.remaining
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.speed
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.status
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.taken
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.timeStarted
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.title
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.transferCount
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.windowClosing
    //#new obj(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new DCCPlugin$3(createContainer#1)
    //#new obj(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new FrameContainer$IconChanger(FrameContainer#2)
    //#new obj(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new JButton(DCCSendWindow#6)
    //#new obj(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new JLabel(DCCSendWindow#2)
    //#new obj(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new JLabel(DCCSendWindow#3)
    //#new obj(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new JLabel(DCCSendWindow#4)
    //#new obj(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new JLabel(DCCSendWindow#5)
    //#new obj(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new JProgressBar(DCCSendWindow#1)
    //#new obj(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new ListenerList(FrameContainer#1)
    //#pre[3] (void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): dcc != null
    //#pre[4] (void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): dcc.__Tag == com/dmdirc/addons/dcc/DCCSend
    //#pre[5] (void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): init'ed(dcc.filename)
    //#pre[6] (void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): init'ed(dcc.transferType)
    //#pre[7] (void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): init'ed(plugin.container)
    //#pre[8] (void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.__Tag == com/dmdirc/addons/dcc/DCCSendWindow
    //#pre[10] (void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): plugin != null
    //#pre[12] (void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): (soft) plugin.childFrames != null
    //#presumption(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com.dmdirc.addons.ui_swing.components.frames.TextFrame:getContentPane(...)@192 != null
    //#presumption(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com.dmdirc.addons.ui_swing.components.frames.TextFrame:getContentPane(...)@192 != null
    //#presumption(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com.dmdirc.addons.ui_swing.components.frames.TextFrame:getContentPane(...)@192 != null
    //#presumption(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com.dmdirc.addons.ui_swing.components.frames.TextFrame:getContentPane(...)@192 != null
    //#presumption(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com.dmdirc.addons.ui_swing.components.frames.TextFrame:getContentPane(...)@192 != null
    //#presumption(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com.dmdirc.addons.ui_swing.components.frames.TextFrame:getContentPane(...)@192 != null
    //#presumption(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com.dmdirc.addons.ui_swing.components.frames.TextFrame:getContentPane(...)@192 != null
    //#presumption(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com.dmdirc.addons.ui_swing.components.frames.TextFrame:getContentPane(...)@192 != null
    //#presumption(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com.dmdirc.addons.ui_swing.components.frames.TextFrame:getContentPane(...)@192 != null
    //#presumption(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com.dmdirc.addons.ui_swing.components.frames.TextFrame:getContentPane(...)@192 != null
    //#presumption(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com.dmdirc.addons.ui_swing.components.frames.TextFrame:getContentPane(...)@192 != null
    //#presumption(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com.dmdirc.config.IdentityManager:getGlobalConfig(...)@138 init'ed
    //#presumption(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): com.dmdirc.parser.irc.IRCParser:getCallbackManager(...)@101 != null
    //#presumption(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): (soft) init'ed(com/dmdirc/FrameContainer.java.awt.Color.BLACK)
    //#presumption(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): plugin.container.__Tag@128 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.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): dcc.handler == this
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): dcc.handler != null
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new FrameContainer$IconChanger(FrameContainer#2).this$0 == dcc.handler
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): plugin.container == One-of{old plugin.container, &new DCCPlugin$3(createContainer#1)}
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): plugin.container != null
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.__Tag == com/dmdirc/addons/dcc/DCCSendWindow
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.button == &new JButton(DCCSendWindow#6)
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.changer == &new FrameContainer$IconChanger(FrameContainer#2)
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.config != null
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.dcc == dcc
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.dcc != null
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.icon in Addr_Set{&"dcc-receive-inactive",&"dcc-send-inactive"}
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.listeners == &new ListenerList(FrameContainer#1)
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.myPlugin == plugin
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.myPlugin != null
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.myWindow != null
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.notification == com/dmdirc/FrameContainer.java.awt.Color.BLACK
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): init'ed(this.notification)
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.otherNickname == targetNick
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): init'ed(this.otherNickname)
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.parser == parser
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): init'ed(this.parser)
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.plugin == plugin
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.plugin != null
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.progress == &new JProgressBar(DCCSendWindow#1)
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.remaining == &new JLabel(DCCSendWindow#4)
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.speed == &new JLabel(DCCSendWindow#3)
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.status == &new JLabel(DCCSendWindow#2)
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.taken == &new JLabel(DCCSendWindow#5)
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): init'ed(this.timeStarted)
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.title == title
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): init'ed(this.title)
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): this.transferCount == 0
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): init'ed(this.windowClosing)
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new DCCPlugin$3(createContainer#1) num objects <= 1
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new FrameContainer$IconChanger(FrameContainer#2) num objects == new DCCPlugin$3(createContainer#1) num objects
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new ListenerList(FrameContainer#1) num objects == new DCCPlugin$3(createContainer#1) num objects
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new DCCPlugin$3(createContainer#1).__Tag == com/dmdirc/addons/dcc/DCCPlugin$3
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new DCCPlugin$3(createContainer#1).changer == &new FrameContainer$IconChanger(FrameContainer#2)
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new DCCPlugin$3(createContainer#1).config != null
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new DCCPlugin$3(createContainer#1).icon == &"dcc"
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new DCCPlugin$3(createContainer#1).listeners == &new ListenerList(FrameContainer#1)
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new DCCPlugin$3(createContainer#1).myWindow != null
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new DCCPlugin$3(createContainer#1).notification == com/dmdirc/FrameContainer.java.awt.Color.BLACK
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): init'ed(new DCCPlugin$3(createContainer#1).notification)
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new DCCPlugin$3(createContainer#1).plugin == plugin
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new DCCPlugin$3(createContainer#1).plugin != null
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new DCCPlugin$3(createContainer#1).this$0 == new DCCPlugin$3(createContainer#1).plugin
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new DCCPlugin$3(createContainer#1).title == &"DCCs"
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new DCCPlugin$3(createContainer#1).windowClosing == 0
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new FrameContainer$IconChanger(FrameContainer#2) num objects == 1
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new JButton(DCCSendWindow#6) num objects == 1
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new JLabel(DCCSendWindow#2) num objects == 1
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new JLabel(DCCSendWindow#3) num objects == 1
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new JLabel(DCCSendWindow#4) num objects == 1
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new JLabel(DCCSendWindow#5) num objects == 1
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new JProgressBar(DCCSendWindow#1) num objects == 1
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new ListenerList(FrameContainer#1) num objects == 1
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new FrameContainer$IconChanger(FrameContainer#2).__Tag == com/dmdirc/FrameContainer$IconChanger
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): new FrameContainer$IconChanger(FrameContainer#2).this$0 == &new DCCPlugin$3(createContainer#1)
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): init'ed(new ListenerList(FrameContainer#1).__Lock)
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): Effects-of-calling:java.io.File
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): Effects-of-calling:com.dmdirc.addons.dcc.DCCFrame
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): Effects-of-calling:java.io.File:getName
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): Effects-of-calling:com.dmdirc.addons.dcc.DCCPlugin$3
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:getText
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setText
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): Effects-of-calling:getFrame
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.frames.TextFrame:getContentPane
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): Effects-of-calling:java.awt.Container:add
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): Effects-of-calling:com.dmdirc.ui.WindowManager:addWindow
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:open
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): Effects-of-calling:java.util.List:add
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): Effects-of-calling:com.dmdirc.interfaces.IconChangeListener:iconChanged
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): Effects-of-calling:com.dmdirc.config.ConfigManager:removeListener
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): Effects-of-calling:com.dmdirc.config.ConfigManager:addChangeListener
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): Effects-of-calling:com.dmdirc.config.IdentityManager:getGlobalConfig
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): Effects-of-calling:com.dmdirc.FrameContainer
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): Effects-of-calling:com.dmdirc.util.ReturnableThread
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): Effects-of-calling:com.dmdirc.addons.ui_swing.UIUtilities:invokeAndWait
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): Effects-of-calling:com.dmdirc.util.ListenerList
    //#test_vector(void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)): parser: Addr_Set{null}, Inverse{null}
		this.dcc = dcc;
		this.parser = parser;
        this.myPlugin = plugin;
        
		if (parser != null) {
			parser.getCallbackManager().addNonCriticalCallback("onSocketClosed", this);
    //#DCCSendWindow.java:101: Warning: method not available - call not analyzed
    //#    call on CallbackManager com.dmdirc.parser.irc.IRCParser:getCallbackManager()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCSendWindow
    //#    method: void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)
    //#    unanalyzed callee: CallbackManager com.dmdirc.parser.irc.IRCParser:getCallbackManager()
    //#DCCSendWindow.java:101: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.parser.irc.callbacks.CallbackManager:addNonCriticalCallback(String, ICallbackInterface)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCSendWindow
    //#    method: void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)
    //#    unanalyzed callee: bool com.dmdirc.parser.irc.callbacks.CallbackManager:addNonCriticalCallback(String, ICallbackInterface)
		}
		dcc.setHandler(this);

		otherNickname = targetNick;
		
		getContentPane().setLayout(new MigLayout());
    //#DCCSendWindow.java:107: ?precondition failure
    //#    com/dmdirc/addons/dcc/DCCFrame.getContentPane: this.myWindow != null
    //#    severity: MEDIUM
    //#    class: com.dmdirc.addons.dcc.DCCSendWindow
    //#    method: void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)
    //#    basic block: bb_6
    //#    assertion: this.myWindow != null
    //#    callee: Container com/dmdirc/addons/dcc/DCCFrame.getContentPane()
    //#    callee assertion: this.myWindow != null
    //#    callee file: DCCFrame.java
    //#    callee precondition index: [3]
    //#    callee srcpos: 192
    //#    VN: this.myWindow
    //#    Expected: Inverse{null}
    //#    Bad: Addr_Set{null}
    //#    Attribs:  Ptr  null in Bad
    //#DCCSendWindow.java:107: Warning: method not available - call not analyzed
    //#    call on void net.miginfocom.swing.MigLayout()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCSendWindow
    //#    method: void com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)
    //#    unanalyzed callee: void net.miginfocom.swing.MigLayout()
		
		progress.setMinimum(0);
		progress.setMaximum(100);
		progress.setStringPainted(true);
		progress.setValue(0);
		
		if (dcc.getType() == DCCSend.TransferType.SEND) {
			getContentPane().add(new JLabel("Sending: "+dcc.getShortFileName()), "wrap");
			getContentPane().add(new JLabel("To: "+targetNick), "wrap");
		} else {
			getContentPane().add(new JLabel("Recieving: "+dcc.getShortFileName()), "wrap");
			getContentPane().add(new JLabel("From: "+targetNick), "wrap");
		}
		getContentPane().add(status, "wrap");
		getContentPane().add(speed, "wrap");
		getContentPane().add(remaining, "wrap");
		getContentPane().add(taken, "wrap");
		getContentPane().add(progress, "growx, wrap");
		
		button.addActionListener(this);
		getContentPane().add(button, "wrap, align right");
		
		plugin.addWindow(this);
	}
    //#DCCSendWindow.java:131: end of method: void com.dmdirc.addons.dcc.DCCSendWindow.com.dmdirc.addons.dcc.DCCSendWindow(DCCPlugin, DCCSend, String, String, IRCParser)
	
	/** {@inheritDoc} */
    @Override
	public void onSocketClosed(final IRCParser tParser) {
		// Remove our reference to the parser (and its reference to us)
		parser.getCallbackManager().delAllCallback(this);
    //#DCCSendWindow.java:137: method: void com.dmdirc.addons.dcc.DCCSendWindow.onSocketClosed(IRCParser)
    //#DCCSendWindow.java:137: Warning: method not available - call not analyzed
    //#    call on CallbackManager com.dmdirc.parser.irc.IRCParser:getCallbackManager()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCSendWindow
    //#    method: void onSocketClosed(IRCParser)
    //#    unanalyzed callee: CallbackManager com.dmdirc.parser.irc.IRCParser:getCallbackManager()
    //#DCCSendWindow.java:137: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.callbacks.CallbackManager:delAllCallback(ICallbackInterface)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCSendWindow
    //#    method: void onSocketClosed(IRCParser)
    //#    unanalyzed callee: void com.dmdirc.parser.irc.callbacks.CallbackManager:delAllCallback(ICallbackInterface)
    //#input(void onSocketClosed(IRCParser)): this
    //#input(void onSocketClosed(IRCParser)): this.button
    //#input(void onSocketClosed(IRCParser)): this.parser
    //#output(void onSocketClosed(IRCParser)): this.parser
    //#pre[1] (void onSocketClosed(IRCParser)): this.parser != null
    //#pre[3] (void onSocketClosed(IRCParser)): this.button != null
    //#presumption(void onSocketClosed(IRCParser)): com.dmdirc.parser.irc.IRCParser:getCallbackManager(...)@137 != null
    //#post(void onSocketClosed(IRCParser)): this.parser == null
    //#test_vector(void onSocketClosed(IRCParser)): java.lang.String:equals(...)@140: {0}, {1}
		parser = null;
		// Can't resend without the parser.
		if ("Resend".equals(button.getText())) {
			button.setText("Close Window");
		}
	}
    //#DCCSendWindow.java:143: end of method: void com.dmdirc.addons.dcc.DCCSendWindow.onSocketClosed(IRCParser)
	
	/**
	 * Get the DCCSend Object associated with this window
	 *
	 * @return The DCCSend Object associated with this window
	 */
	public DCCSend getDCC() {
		return dcc;
    //#DCCSendWindow.java:151: method: DCCSend com.dmdirc.addons.dcc.DCCSendWindow.getDCC()
    //#input(DCCSend getDCC()): this
    //#input(DCCSend getDCC()): this.dcc
    //#output(DCCSend getDCC()): return_value
    //#post(DCCSend getDCC()): return_value == this.dcc
    //#post(DCCSend getDCC()): init'ed(return_value)
    //#DCCSendWindow.java:151: end of method: DCCSend com.dmdirc.addons.dcc.DCCSendWindow.getDCC()
	}
	
	/** {@inheritDoc} */
    @Override
	public void actionPerformed(final ActionEvent e) {
		if (e.getActionCommand().equals("Cancel")) {
    //#DCCSendWindow.java:157: method: void com.dmdirc.addons.dcc.DCCSendWindow.actionPerformed(ActionEvent)
    //#input(void actionPerformed(ActionEvent)): " "._tainted
    //#input(void actionPerformed(ActionEvent)): " 0 "._tainted
    //#input(void actionPerformed(ActionEvent)): " T"._tainted
    //#input(void actionPerformed(ActionEvent)): "" "._tainted
    //#input(void actionPerformed(ActionEvent)): ""._tainted
    //#input(void actionPerformed(ActionEvent)): "."._tainted
    //#input(void actionPerformed(ActionEvent)): "127.0.0.1"._tainted
    //#input(void actionPerformed(ActionEvent)): ":"._tainted
    //#input(void actionPerformed(ActionEvent)): "No available sockets in range "._tainted
    //#input(void actionPerformed(ActionEvent)): "SEND ""._tainted
    //#input(void actionPerformed(ActionEvent)): __Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void actionPerformed(ActionEvent)): __Descendant_Table[others]
    //#input(void actionPerformed(ActionEvent)): __Dispatch_Table.close()V
    //#input(void actionPerformed(ActionEvent)): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void actionPerformed(ActionEvent)): __Dispatch_Table.socketClosed(Lcom/dmdirc/addons/dcc/DCCSend;)V
    //#input(void actionPerformed(ActionEvent)): __Dispatch_Table.socketOpened(Lcom/dmdirc/addons/dcc/DCCSend;)V
    //#input(void actionPerformed(ActionEvent)): com.dmdirc.parser.irc.SocketState.OPEN
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/Server.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCC.__Descendant_Table[com/dmdirc/addons/dcc/DCCChat]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCC.__Descendant_Table[com/dmdirc/addons/dcc/DCCSend]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCC.__Descendant_Table[com/dmdirc/addons/dcc/DCC]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCC.__Descendant_Table[others]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCC.__Dispatch_Table.connect()V
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCC.__Dispatch_Table.listen()V
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCC.__Dispatch_Table.listen(II)V
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCC.__Dispatch_Table.socketClosed()V
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCC.__Dispatch_Table.socketOpened()V
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCChat.__Descendant_Table[com/dmdirc/addons/dcc/DCCChat]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCChat.__Descendant_Table[others]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCChat.__Dispatch_Table.connect()V
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCChat.__Dispatch_Table.listen()V
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCChat.__Dispatch_Table.listen(II)V
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCChat.__Dispatch_Table.socketClosed()V
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCChat.__Dispatch_Table.socketOpened()V
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCChatInterface.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatInterface]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCChatInterface.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCChatInterface.__Descendant_Table[others]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCChatInterface.__Dispatch_Table.socketClosed(Lcom/dmdirc/addons/dcc/DCCChat;)V
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCChatInterface.__Dispatch_Table.socketOpened(Lcom/dmdirc/addons/dcc/DCCChat;)V
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.socketClosed(Lcom/dmdirc/addons/dcc/DCCChat;)V
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.socketOpened(Lcom/dmdirc/addons/dcc/DCCChat;)V
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCSend$TransferType.RECEIVE
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCSend$TransferType.SEND
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCSend.SENDS
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCSend.__Descendant_Table[com/dmdirc/addons/dcc/DCCSend]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCSend.__Descendant_Table[others]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.close()V
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.connect()V
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.getFileName()Ljava/lang/String;
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.getFileSize()J
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.getPort()I
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.getToken()Ljava/lang/String;
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.getType()Lcom/dmdirc/addons/dcc/DCCSend$TransferType;
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.isTurbo()Z
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.listen()V
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.listen(II)V
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.makeToken()Ljava/lang/String;
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.reset()V
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.setFileName(Ljava/lang/String;)V
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.setFileStart(I)I
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.setToken(Ljava/lang/String;)V
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.socketClosed()V
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.socketOpened()V
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCSendInterface.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendInterface]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCSendInterface.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCSendInterface.__Descendant_Table[others]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCSendInterface.__Dispatch_Table.socketClosed(Lcom/dmdirc/addons/dcc/DCCSend;)V
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/dcc/DCCSendInterface.__Dispatch_Table.socketOpened(Lcom/dmdirc/addons/dcc/DCCSend;)V
    //#input(void actionPerformed(ActionEvent)): e
    //#input(void actionPerformed(ActionEvent)): this
    //#input(void actionPerformed(ActionEvent)): this.__Lock
    //#input(void actionPerformed(ActionEvent)): this.__Tag
    //#input(void actionPerformed(ActionEvent)): this.button
    //#input(void actionPerformed(ActionEvent)): this.dcc
    //#input(void actionPerformed(ActionEvent)): this.dcc.__Tag
    //#input(void actionPerformed(ActionEvent)): this.dcc.address
    //#input(void actionPerformed(ActionEvent)): this.dcc.fileIn
    //#input(void actionPerformed(ActionEvent)): this.dcc.filename
    //#input(void actionPerformed(ActionEvent)): this.dcc.filename._tainted
    //#input(void actionPerformed(ActionEvent)): this.dcc.handler.__Tag
    //#input(void actionPerformed(ActionEvent)): this.dcc.port
    //#input(void actionPerformed(ActionEvent)): this.dcc.serverListeningSem
    //#input(void actionPerformed(ActionEvent)): this.dcc.serverSocket
    //#input(void actionPerformed(ActionEvent)): this.dcc.serverSocketSem
    //#input(void actionPerformed(ActionEvent)): this.dcc.size
    //#input(void actionPerformed(ActionEvent)): this.dcc.socket
    //#input(void actionPerformed(ActionEvent)): this.dcc.startpos
    //#input(void actionPerformed(ActionEvent)): this.dcc.transferType
    //#input(void actionPerformed(ActionEvent)): this.dcc.turbo
    //#input(void actionPerformed(ActionEvent)): this.myPlugin
    //#input(void actionPerformed(ActionEvent)): this.otherNickname
    //#input(void actionPerformed(ActionEvent)): this.parser
    //#input(void actionPerformed(ActionEvent)): this.plugin
    //#input(void actionPerformed(ActionEvent)): this.status
    //#output(void actionPerformed(ActionEvent)): java.lang.Integer:toString(...)._tainted
    //#output(void actionPerformed(ActionEvent)): new BufferedReader(socketOpened#2) num objects
    //#output(void actionPerformed(ActionEvent)): new DataInputStream(setFileName#2) num objects
    //#output(void actionPerformed(ActionEvent)): new DataInputStream(socketOpened#5) num objects
    //#output(void actionPerformed(ActionEvent)): new DataOutputStream(socketOpened#2) num objects
    //#output(void actionPerformed(ActionEvent)): new DataOutputStream(socketOpened#4) num objects
    //#output(void actionPerformed(ActionEvent)): new File(setFileName#1) num objects
    //#output(void actionPerformed(ActionEvent)): new File(socketOpened#1) num objects
    //#output(void actionPerformed(ActionEvent)): new PrintWriter(socketOpened#1) num objects
    //#output(void actionPerformed(ActionEvent)): new ServerSocket(listen#1*) num objects
    //#output(void actionPerformed(ActionEvent)): new Socket(connect#1) num objects
    //#output(void actionPerformed(ActionEvent)): new Thread(connect#2) num objects
    //#output(void actionPerformed(ActionEvent)): this.dcc.address
    //#output(void actionPerformed(ActionEvent)): this.dcc.fileIn
    //#output(void actionPerformed(ActionEvent)): this.dcc.fileOut
    //#output(void actionPerformed(ActionEvent)): this.dcc.filename
    //#output(void actionPerformed(ActionEvent)): this.dcc.handler.timeStarted
    //#output(void actionPerformed(ActionEvent)): this.dcc.in
    //#output(void actionPerformed(ActionEvent)): this.dcc.listen
    //#output(void actionPerformed(ActionEvent)): this.dcc.myThread
    //#output(void actionPerformed(ActionEvent)): this.dcc.out
    //#output(void actionPerformed(ActionEvent)): this.dcc.port
    //#output(void actionPerformed(ActionEvent)): this.dcc.readSize
    //#output(void actionPerformed(ActionEvent)): this.dcc.serverSocket
    //#output(void actionPerformed(ActionEvent)): this.dcc.socket
    //#output(void actionPerformed(ActionEvent)): this.dcc.startpos
    //#output(void actionPerformed(ActionEvent)): this.dcc.token
    //#output(void actionPerformed(ActionEvent)): this.dcc.transferFile
    //#output(void actionPerformed(ActionEvent)): this.transferCount
    //#new obj(void actionPerformed(ActionEvent)): java.lang.Integer:toString(...)
    //#new obj(void actionPerformed(ActionEvent)): new BufferedReader(socketOpened#2)
    //#new obj(void actionPerformed(ActionEvent)): new DataInputStream(setFileName#2)
    //#new obj(void actionPerformed(ActionEvent)): new DataInputStream(socketOpened#5)
    //#new obj(void actionPerformed(ActionEvent)): new DataOutputStream(socketOpened#2)
    //#new obj(void actionPerformed(ActionEvent)): new DataOutputStream(socketOpened#4)
    //#new obj(void actionPerformed(ActionEvent)): new File(setFileName#1)
    //#new obj(void actionPerformed(ActionEvent)): new File(socketOpened#1)
    //#new obj(void actionPerformed(ActionEvent)): new PrintWriter(socketOpened#1)
    //#new obj(void actionPerformed(ActionEvent)): new ServerSocket(listen#1*)
    //#new obj(void actionPerformed(ActionEvent)): new Socket(connect#1)
    //#new obj(void actionPerformed(ActionEvent)): new Thread(connect#2)
    //#pre[3] (void actionPerformed(ActionEvent)): e != null
    //#pre[4] (void actionPerformed(ActionEvent)): (soft) init'ed(this.dcc.address)
    //#pre[5] (void actionPerformed(ActionEvent)): (soft) init'ed(this.dcc.fileIn)
    //#pre[7] (void actionPerformed(ActionEvent)): (soft) init'ed(this.dcc.filename)
    //#pre[15] (void actionPerformed(ActionEvent)): (soft) init'ed(this.dcc.port)
    //#pre[17] (void actionPerformed(ActionEvent)): (soft) init'ed(this.dcc.serverSocket)
    //#pre[18] (void actionPerformed(ActionEvent)): (soft) init'ed(this.dcc.socket)
    //#pre[19] (void actionPerformed(ActionEvent)): (soft) init'ed(this.dcc.startpos)
    //#pre[24] (void actionPerformed(ActionEvent)): (soft) this.__Tag == com/dmdirc/addons/dcc/DCCSendWindow
    //#pre[25] (void actionPerformed(ActionEvent)): (soft) this.button != null
    //#pre[26] (void actionPerformed(ActionEvent)): (soft) this.dcc != null
    //#pre[30] (void actionPerformed(ActionEvent)): (soft) this.dcc.__Tag == com/dmdirc/addons/dcc/DCCSend
    //#pre[46] (void actionPerformed(ActionEvent)): (soft) this.dcc.serverListeningSem != null
    //#pre[47] (void actionPerformed(ActionEvent)): (soft) this.dcc.serverSocketSem != null
    //#pre[48] (void actionPerformed(ActionEvent)): (soft) init'ed(this.dcc.size)
    //#pre[49] (void actionPerformed(ActionEvent)): (soft) init'ed(this.dcc.transferType)
    //#pre[50] (void actionPerformed(ActionEvent)): (soft) init'ed(this.dcc.turbo)
    //#pre[51] (void actionPerformed(ActionEvent)): (soft) this.myPlugin != null
    //#pre[53] (void actionPerformed(ActionEvent)): (soft) init'ed(this.parser)
    //#pre[54] (void actionPerformed(ActionEvent)): (soft) this.plugin != null
    //#pre[55] (void actionPerformed(ActionEvent)): (soft) this.status != null
    //#presumption(void actionPerformed(ActionEvent)): com.dmdirc.config.IdentityManager:getGlobalConfig(...)@187 != null
    //#presumption(void actionPerformed(ActionEvent)): com.dmdirc.parser.irc.IRCParser:getIRCStringConverter(...)@176 != null
    //#presumption(void actionPerformed(ActionEvent)): init'ed(com.dmdirc.parser.irc.SocketState.OPEN)
    //#presumption(void actionPerformed(ActionEvent)): java.awt.event.ActionEvent:getActionCommand(...)@157 != null
    //#presumption(void actionPerformed(ActionEvent)): java.awt.event.ActionEvent:getActionCommand(...)@165 != null
    //#presumption(void actionPerformed(ActionEvent)): java.awt.event.ActionEvent:getActionCommand(...)@199 != null
    //#post(void actionPerformed(ActionEvent)): java.lang.Integer:toString(...)._tainted == 0
    //#post(void actionPerformed(ActionEvent)): this.dcc.address == One-of{old this.dcc.address, 0}
    //#post(void actionPerformed(ActionEvent)): init'ed(this.dcc.address)
    //#post(void actionPerformed(ActionEvent)): this.dcc.fileIn == One-of{old this.dcc.fileIn, &new DataInputStream(setFileName#2), null}
    //#post(void actionPerformed(ActionEvent)): init'ed(this.dcc.fileIn)
    //#post(void actionPerformed(ActionEvent)): possibly_updated(this.dcc.fileOut)
    //#post(void actionPerformed(ActionEvent)): this.dcc.filename == old this.dcc.filename
    //#post(void actionPerformed(ActionEvent)): init'ed(this.dcc.filename)
    //#post(void actionPerformed(ActionEvent)): this.dcc.handler.timeStarted == old this.dcc.handler.timeStarted
    //#post(void actionPerformed(ActionEvent)): possibly_updated(this.dcc.in)
    //#post(void actionPerformed(ActionEvent)): possibly_updated(this.dcc.listen)
    //#post(void actionPerformed(ActionEvent)): this.dcc.myThread == One-of{old this.dcc.myThread, &new Thread(connect#2)}
    //#post(void actionPerformed(ActionEvent)): possibly_updated(this.dcc.out)
    //#post(void actionPerformed(ActionEvent)): init'ed(this.dcc.port)
    //#post(void actionPerformed(ActionEvent)): this.dcc.readSize == One-of{old this.dcc.startpos, old this.dcc.readSize}
    //#post(void actionPerformed(ActionEvent)): init'ed(this.dcc.serverSocket)
    //#post(void actionPerformed(ActionEvent)): init'ed(this.dcc.socket)
    //#post(void actionPerformed(ActionEvent)): init'ed(this.dcc.startpos)
    //#post(void actionPerformed(ActionEvent)): this.dcc.token == One-of{old this.dcc.token, &java.lang.Integer:toString(...)}
    //#post(void actionPerformed(ActionEvent)): possibly_updated(this.dcc.transferFile)
    //#post(void actionPerformed(ActionEvent)): this.transferCount == One-of{0, old this.transferCount}
    //#post(void actionPerformed(ActionEvent)): new BufferedReader(socketOpened#2) num objects == 0
    //#post(void actionPerformed(ActionEvent)): new DataInputStream(setFileName#2) num objects <= 1
    //#post(void actionPerformed(ActionEvent)): new DataInputStream(socketOpened#5) num objects == 0
    //#post(void actionPerformed(ActionEvent)): new DataOutputStream(socketOpened#2) num objects == 0
    //#post(void actionPerformed(ActionEvent)): new DataOutputStream(socketOpened#4) num objects == 0
    //#post(void actionPerformed(ActionEvent)): new File(setFileName#1) num objects <= 1
    //#post(void actionPerformed(ActionEvent)): new File(socketOpened#1) num objects == 0
    //#post(void actionPerformed(ActionEvent)): new PrintWriter(socketOpened#1) num objects == 0
    //#post(void actionPerformed(ActionEvent)): new ServerSocket(listen#1*) num objects <= 1
    //#post(void actionPerformed(ActionEvent)): new Socket(connect#1) num objects == 0
    //#post(void actionPerformed(ActionEvent)): new Thread(connect#2) num objects <= 1
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.Long:valueOf
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.String:format
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:javax.swing.JButton:setText
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:getType
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.util.MapList:containsKey
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.util.MapList:get
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.util.ArrayList:iterator
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:trigger
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:getArity
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.interfaces.ActionListener:processEvent
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:javax.swing.JLabel:setText
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.System:currentTimeMillis
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:setIcon
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.Math:floor
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:javax.swing.JProgressBar:setValue
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.util.List:remove
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.util.concurrent.Semaphore:release
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.util.concurrent.Semaphore:tryAcquire
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.Thread:sleep
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.net.ServerSocket:isClosed
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.net.ServerSocket:close
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.net.Socket:isClosed
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.net.Socket:close
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:socketClosed
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.Double:valueOf
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:isWindowClosing
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.io.File
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.io.DataInputStream:skipBytes
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.io.File:getAbsolutePath
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.io.FileInputStream
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.io.DataInputStream
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.config.IdentityManager:getGlobalConfig
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.addons.dcc.DCCPlugin:getDomain
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.config.ConfigManager:getOption
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.String:isEmpty
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getMyself
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.parser.irc.ClientInfo:getHost
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.net.InetAddress:getByName
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.net.InetAddress:getHostAddress
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.net.InetAddress:getLocalHost
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.String:split
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.Long:parseLong
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.String:hashCode
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.Math:abs
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.Integer:toString
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptionBool
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptionInt
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:listen
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:getFrame
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.StringBuffer
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:addLine
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.io.DataOutputStream:close
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.io.DataInputStream:close
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:connect
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.util.concurrent.Semaphore:acquireUninterruptibly
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.net.ServerSocket
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.io.IOException
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.net.Socket:getOutputStream
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.io.PrintWriter
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.net.Socket:getInputStream
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.io.InputStreamReader
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.io.BufferedReader
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:socketOpened
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.net.ServerSocket:getLocalPort
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.net.Socket
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.Thread
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.Thread:start
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.ui.interfaces.Window:close
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.io.FileOutputStream
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.io.DataOutputStream
    //#test_vector(void actionPerformed(ActionEvent)): this.parser: Addr_Set{null}, Inverse{null}
    //#test_vector(void actionPerformed(ActionEvent)): com.dmdirc.config.ConfigManager:getOptionBool(...)@187: {0}, {1}
    //#test_vector(void actionPerformed(ActionEvent)): com.dmdirc.parser.irc.IRCStringConverter:equalsIgnoreCase(...)@176: {0}, {1}
    //#test_vector(void actionPerformed(ActionEvent)): java.lang.String:equals(...)@157: {0}, {1}
    //#test_vector(void actionPerformed(ActionEvent)): java.lang.String:equals(...)@165: {0}, {1}
    //#test_vector(void actionPerformed(ActionEvent)): java.lang.String:equals(...)@199: {0}, {1}
			if (dcc.getType() == DCCSend.TransferType.SEND) {
				button.setText("Resend");
			} else {
				button.setText("Close Window");
			}
			status.setText("Status: Cancelled");
			dcc.close();
		} else if (e.getActionCommand().equals("Resend")) {
			button.setText("Cancel");
			status.setText("Status: Resending...");
			synchronized (this) {
				transferCount = 0;
			}
			dcc.reset();
			if (parser != null && parser.getSocketState() == SocketState.OPEN) {
    //#DCCSendWindow.java:172: Warning: method not available - call not analyzed
    //#    call on SocketState com.dmdirc.parser.irc.IRCParser:getSocketState()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCSendWindow
    //#    method: void actionPerformed(ActionEvent)
    //#    unanalyzed callee: SocketState com.dmdirc.parser.irc.IRCParser:getSocketState()
				final String myNickname = parser.getMyNickname();
    //#DCCSendWindow.java:173: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.IRCParser:getMyNickname()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCSendWindow
    //#    method: void actionPerformed(ActionEvent)
    //#    unanalyzed callee: String com.dmdirc.parser.irc.IRCParser:getMyNickname()
				// Check again incase we have changed nickname to the same nickname that
				// this send is for.
				if (parser.getIRCStringConverter().equalsIgnoreCase(otherNickname, myNickname)) {
    //#DCCSendWindow.java:176: Warning: method not available - call not analyzed
    //#    call on IRCStringConverter com.dmdirc.parser.irc.IRCParser:getIRCStringConverter()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCSendWindow
    //#    method: void actionPerformed(ActionEvent)
    //#    unanalyzed callee: IRCStringConverter com.dmdirc.parser.irc.IRCParser:getIRCStringConverter()
    //#DCCSendWindow.java:176: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.parser.irc.IRCStringConverter:equalsIgnoreCase(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCSendWindow
    //#    method: void actionPerformed(ActionEvent)
    //#    unanalyzed callee: bool com.dmdirc.parser.irc.IRCStringConverter:equalsIgnoreCase(String, String)
					final Thread errorThread = new Thread(new Runnable() {
    //#DCCSendWindow.java:177: method: void com.dmdirc.addons.dcc.DCCSendWindow$1.com.dmdirc.addons.dcc.DCCSendWindow$1(DCCSendWindow)
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow$1(DCCSendWindow)): Param_1
    //#input(void com.dmdirc.addons.dcc.DCCSendWindow$1(DCCSendWindow)): this
    //#output(void com.dmdirc.addons.dcc.DCCSendWindow$1(DCCSendWindow)): this.this$0
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow$1(DCCSendWindow)): this.this$0 == Param_1
    //#post(void com.dmdirc.addons.dcc.DCCSendWindow$1(DCCSendWindow)): init'ed(this.this$0)
    //#DCCSendWindow.java:177: end of method: void com.dmdirc.addons.dcc.DCCSendWindow$1.com.dmdirc.addons.dcc.DCCSendWindow$1(DCCSendWindow)
						/** {@inheritDoc} */
						@Override
						public void run() {
							JOptionPane.showMessageDialog(null, "You can't DCC yourself.", "DCC Error", JOptionPane.ERROR_MESSAGE);
    //#DCCSendWindow.java:181: method: void com.dmdirc.addons.dcc.DCCSendWindow$1.run()
						}
    //#DCCSendWindow.java:182: end of method: void com.dmdirc.addons.dcc.DCCSendWindow$1.run()
					});
					errorThread.start();
					return;
				} else {
					if (IdentityManager.getGlobalConfig().getOptionBool(plugin.getDomain(), "send.reverse")) {
    //#DCCSendWindow.java:187: Warning: method not available - call not analyzed
    //#    call on ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCSendWindow
    //#    method: void actionPerformed(ActionEvent)
    //#    unanalyzed callee: ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#DCCSendWindow.java:187: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCSendWindow
    //#    method: void actionPerformed(ActionEvent)
    //#    unanalyzed callee: String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#DCCSendWindow.java:187: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCSendWindow
    //#    method: void actionPerformed(ActionEvent)
    //#    unanalyzed callee: bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
						parser.sendCTCP(otherNickname, "DCC", "SEND \""+(new File(dcc.getFileName())).getName()+"\" "+DCC.ipToLong(myPlugin.getListenIP(parser))+" 0 "+dcc.getFileSize()+" "+dcc.makeToken()+((dcc.isTurbo()) ? " T" : ""));
    //#DCCSendWindow.java:188: ?precondition failure
    //#    com/dmdirc/addons/dcc/DCC.ipToLong: ip != null
    //#    severity: MEDIUM
    //#    class: com.dmdirc.addons.dcc.DCCSendWindow
    //#    method: void actionPerformed(ActionEvent)
    //#    basic block: bb_15
    //#    assertion: getListenIP(...) != null
    //#    callee: long com/dmdirc/addons/dcc/DCC.ipToLong(String)
    //#    callee assertion: ip != null
    //#    callee file: DCC.java
    //#    callee precondition index: [1]
    //#    callee srcpos: 308
    //#    VN: getListenIP(...)
    //#    Expected: Inverse{null}
    //#    Bad: Addr_Set{null}
    //#    Attribs:  Ptr  null in Bad
    //#DCCSendWindow.java:188: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.IRCParser:sendCTCP(String, String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCSendWindow
    //#    method: void actionPerformed(ActionEvent)
    //#    unanalyzed callee: void com.dmdirc.parser.irc.IRCParser:sendCTCP(String, String, String)
						return;
					} else if (plugin.listen(dcc)) {
    //#DCCSendWindow.java:190: ?!precondition failure
    //#    com/dmdirc/addons/dcc/DCCPlugin.listen: (soft) dcc.serverSocket != null
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.dcc.DCCSendWindow
    //#    method: void actionPerformed(ActionEvent)
    //#    basic block: bb_19
    //#    assertion: (soft) this.serverSocket != null
    //#    callee: bool com/dmdirc/addons/dcc/DCCPlugin.listen(DCC)
    //#    callee assertion: (soft) dcc.serverSocket != null
    //#    callee file: DCCPlugin.java
    //#    callee precondition index: [37]
    //#    callee srcpos: 210
    //#    VN: this.serverSocket
    //#    Expected: Inverse{null}
    //#    Bad: Addr_Set{null}
    //#    Attribs:  Ptr  null in Bad  Soft
						parser.sendCTCP(otherNickname, "DCC", "SEND \""+(new File(dcc.getFileName())).getName()+"\" "+DCC.ipToLong(myPlugin.getListenIP(parser))+" "+dcc.getPort()+" "+dcc.getFileSize()+((dcc.isTurbo()) ? " T" : ""));
    //#DCCSendWindow.java:191: ?precondition failure
    //#    com/dmdirc/addons/dcc/DCC.ipToLong: ip != null
    //#    severity: MEDIUM
    //#    class: com.dmdirc.addons.dcc.DCCSendWindow
    //#    method: void actionPerformed(ActionEvent)
    //#    basic block: bb_20
    //#    assertion: getListenIP(...) != null
    //#    callee: long com/dmdirc/addons/dcc/DCC.ipToLong(String)
    //#    callee assertion: ip != null
    //#    callee file: DCC.java
    //#    callee precondition index: [1]
    //#    callee srcpos: 308
    //#    VN: getListenIP(...)
    //#    Expected: Inverse{null}
    //#    Bad: Addr_Set{null}
    //#    Attribs:  Ptr  null in Bad
    //#DCCSendWindow.java:191: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.IRCParser:sendCTCP(String, String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCSendWindow
    //#    method: void actionPerformed(ActionEvent)
    //#    unanalyzed callee: void com.dmdirc.parser.irc.IRCParser:sendCTCP(String, String, String)
						return;
					}
				}
			} else {
				status.setText("Status: Resend failed.");
				button.setText("Close Window");
			}
		} else if (e.getActionCommand().equals("Close Window")) {
			close();
		}
	}
    //#DCCSendWindow.java:202: end of method: void com.dmdirc.addons.dcc.DCCSendWindow.actionPerformed(ActionEvent)
	
	/**
	 * Called when data is sent/recieved
	 *
	 * @param dcc The DCCSend that this message is from
	 * @param bytes The number of new bytes that were transfered
	 */
    @Override
	public void dataTransfered(final DCCSend dcc, final int bytes) {
		final double percent;
		synchronized (this) {
    //#DCCSendWindow.java:213: method: void com.dmdirc.addons.dcc.DCCSendWindow.dataTransfered(DCCSend, int)
    //#input(void dataTransfered(DCCSend, int)): ":"._tainted
    //#input(void dataTransfered(DCCSend, int)): __Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void dataTransfered(DCCSend, int)): __Descendant_Table[others]
    //#input(void dataTransfered(DCCSend, int)): __Dispatch_Table.updateSpeedAndTime()V
    //#input(void dataTransfered(DCCSend, int)): bytes
    //#input(void dataTransfered(DCCSend, int)): com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions(DCCActions__static_init#9).__Tag
    //#input(void dataTransfered(DCCSend, int)): com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions(DCCActions__static_init#9).type
    //#input(void dataTransfered(DCCSend, int)): com.dmdirc.addons.dcc.actions.DCCEvents__static_init.new DCCEvents(DCCEvents__static_init#25).__Tag
    //#input(void dataTransfered(DCCSend, int)): com/dmdirc/actions/ActionManager.killSwitch
    //#input(void dataTransfered(DCCSend, int)): com/dmdirc/actions/ActionManager.listeners
    //#input(void dataTransfered(DCCSend, int)): com/dmdirc/actions/CoreActionType.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void dataTransfered(DCCSend, int)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/interfaces/ActionMetaType]
    //#input(void dataTransfered(DCCSend, int)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ActionEvents]
    //#input(void dataTransfered(DCCSend, int)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ChannelEvents]
    //#input(void dataTransfered(DCCSend, int)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ClientEvents]
    //#input(void dataTransfered(DCCSend, int)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/PluginEvents]
    //#input(void dataTransfered(DCCSend, int)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/QueryEvents]
    //#input(void dataTransfered(DCCSend, int)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ServerEvents]
    //#input(void dataTransfered(DCCSend, int)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/addons/dcc/actions/DCCEvents]
    //#input(void dataTransfered(DCCSend, int)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[others]
    //#input(void dataTransfered(DCCSend, int)): com/dmdirc/actions/interfaces/ActionMetaType.__Dispatch_Table.getArity()I
    //#input(void dataTransfered(DCCSend, int)): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/actions/CoreActionType]
    //#input(void dataTransfered(DCCSend, int)): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/actions/interfaces/ActionType]
    //#input(void dataTransfered(DCCSend, int)): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/addons/dcc/actions/DCCActions]
    //#input(void dataTransfered(DCCSend, int)): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[others]
    //#input(void dataTransfered(DCCSend, int)): com/dmdirc/actions/interfaces/ActionType.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void dataTransfered(DCCSend, int)): com/dmdirc/actions/metatypes/ActionEvents.__Dispatch_Table.getArity()I
    //#input(void dataTransfered(DCCSend, int)): com/dmdirc/actions/metatypes/ChannelEvents.__Dispatch_Table.getArity()I
    //#input(void dataTransfered(DCCSend, int)): com/dmdirc/actions/metatypes/ClientEvents.__Dispatch_Table.getArity()I
    //#input(void dataTransfered(DCCSend, int)): com/dmdirc/actions/metatypes/PluginEvents.__Dispatch_Table.getArity()I
    //#input(void dataTransfered(DCCSend, int)): com/dmdirc/actions/metatypes/QueryEvents.__Dispatch_Table.getArity()I
    //#input(void dataTransfered(DCCSend, int)): com/dmdirc/actions/metatypes/ServerEvents.__Dispatch_Table.getArity()I
    //#input(void dataTransfered(DCCSend, int)): com/dmdirc/addons/dcc/DCCSend$TransferType.SEND
    //#input(void dataTransfered(DCCSend, int)): com/dmdirc/addons/dcc/DCCSend.__Descendant_Table[com/dmdirc/addons/dcc/DCCSend]
    //#input(void dataTransfered(DCCSend, int)): com/dmdirc/addons/dcc/DCCSend.__Descendant_Table[others]
    //#input(void dataTransfered(DCCSend, int)): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.getFileSize()J
    //#input(void dataTransfered(DCCSend, int)): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.getFileStart()I
    //#input(void dataTransfered(DCCSend, int)): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.getType()Lcom/dmdirc/addons/dcc/DCCSend$TransferType;
    //#input(void dataTransfered(DCCSend, int)): com/dmdirc/addons/dcc/actions/DCCActions.DCC_SEND_DATATRANSFERED
    //#input(void dataTransfered(DCCSend, int)): com/dmdirc/addons/dcc/actions/DCCActions.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void dataTransfered(DCCSend, int)): com/dmdirc/addons/dcc/actions/DCCEvents.__Dispatch_Table.getArity()I
    //#input(void dataTransfered(DCCSend, int)): dcc
    //#input(void dataTransfered(DCCSend, int)): dcc.__Tag
    //#input(void dataTransfered(DCCSend, int)): dcc.size
    //#input(void dataTransfered(DCCSend, int)): dcc.startpos
    //#input(void dataTransfered(DCCSend, int)): dcc.transferType
    //#input(void dataTransfered(DCCSend, int)): this
    //#input(void dataTransfered(DCCSend, int)): this.__Tag
    //#input(void dataTransfered(DCCSend, int)): this.dcc
    //#input(void dataTransfered(DCCSend, int)): this.dcc.__Tag
    //#input(void dataTransfered(DCCSend, int)): this.dcc.size
    //#input(void dataTransfered(DCCSend, int)): this.dcc.startpos
    //#input(void dataTransfered(DCCSend, int)): this.progress
    //#input(void dataTransfered(DCCSend, int)): this.remaining
    //#input(void dataTransfered(DCCSend, int)): this.speed
    //#input(void dataTransfered(DCCSend, int)): this.status
    //#input(void dataTransfered(DCCSend, int)): this.taken
    //#input(void dataTransfered(DCCSend, int)): this.timeStarted
    //#output(void dataTransfered(DCCSend, int)): com/dmdirc/ServerManager.me
    //#output(void dataTransfered(DCCSend, int)): new ArrayList(ServerManager#1) num objects
    //#output(void dataTransfered(DCCSend, int)): new ServerManager(getServerManager#1) num objects
    //#output(void dataTransfered(DCCSend, int)): new ServerManager(getServerManager#1).__Tag
    //#output(void dataTransfered(DCCSend, int)): new ServerManager(getServerManager#1).servers
    //#output(void dataTransfered(DCCSend, int)): this.transferCount
    //#new obj(void dataTransfered(DCCSend, int)): new ArrayList(ServerManager#1)
    //#new obj(void dataTransfered(DCCSend, int)): new ServerManager(getServerManager#1)
    //#pre[1] (void dataTransfered(DCCSend, int)): (float) (dcc.size) != +0
    //#pre[6] (void dataTransfered(DCCSend, int)): init'ed(com/dmdirc/actions/ActionManager.killSwitch)
    //#pre[7] (void dataTransfered(DCCSend, int)): dcc != null
    //#pre[8] (void dataTransfered(DCCSend, int)): dcc.__Tag == com/dmdirc/addons/dcc/DCCSend
    //#pre[9] (void dataTransfered(DCCSend, int)): init'ed(dcc.size)
    //#pre[10] (void dataTransfered(DCCSend, int)): init'ed(dcc.startpos)
    //#pre[11] (void dataTransfered(DCCSend, int)): init'ed(dcc.transferType)
    //#pre[16] (void dataTransfered(DCCSend, int)): this.__Tag == com/dmdirc/addons/dcc/DCCSendWindow
    //#pre[17] (void dataTransfered(DCCSend, int)): this.dcc != null
    //#pre[18] (void dataTransfered(DCCSend, int)): this.dcc.__Tag == com/dmdirc/addons/dcc/DCCSend
    //#pre[19] (void dataTransfered(DCCSend, int)): init'ed(this.dcc.size)
    //#pre[20] (void dataTransfered(DCCSend, int)): init'ed(this.dcc.startpos)
    //#pre[21] (void dataTransfered(DCCSend, int)): this.progress != null
    //#pre[22] (void dataTransfered(DCCSend, int)): this.remaining != null
    //#pre[23] (void dataTransfered(DCCSend, int)): this.speed != null
    //#pre[24] (void dataTransfered(DCCSend, int)): this.status != null
    //#pre[25] (void dataTransfered(DCCSend, int)): this.taken != null
    //#pre[26] (void dataTransfered(DCCSend, int)): init'ed(this.timeStarted)
    //#pre[4] (void dataTransfered(DCCSend, int)): (soft) com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions(DCCActions__static_init#9).type != null
    //#pre[12] (void dataTransfered(DCCSend, int)): (soft) init'ed(com/dmdirc/ServerManager.me)
    //#presumption(void dataTransfered(DCCSend, int)): (int) (java.lang.Math:floor(...)@226) in {-2_147_483_648..4_294_967_295}
    //#presumption(void dataTransfered(DCCSend, int)): bytes + this.transferCount in {-9_223_372_036_854_775_808..18_446_744_073_709_551_615}
    //#post(void dataTransfered(DCCSend, int)): com/dmdirc/ServerManager.me == old com/dmdirc/ServerManager.me
    //#post(void dataTransfered(DCCSend, int)): init'ed(this.transferCount)
    //#post(void dataTransfered(DCCSend, int)): new ArrayList(ServerManager#1) num objects == 0, if init'ed
    //#post(void dataTransfered(DCCSend, int)): new ServerManager(getServerManager#1) num objects == 0, if init'ed
    //#post(void dataTransfered(DCCSend, int)): new ServerManager(getServerManager#1).__Tag not init'ed, if init'ed
    //#post(void dataTransfered(DCCSend, int)): new ServerManager(getServerManager#1).servers == null
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.lang.Long:valueOf
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.lang.String:format
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:getType
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:com.dmdirc.util.MapList:containsKey
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:com.dmdirc.util.MapList:get
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.util.ArrayList:iterator
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:trigger
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:getArity
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:com.dmdirc.interfaces.ActionListener:processEvent
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:triggerActions
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:javax.swing.JLabel:setText
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.lang.System:currentTimeMillis
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.lang.Math:floor
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.lang.Double:valueOf
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:com.dmdirc.actions.ConditionTree$OPERATION:ordinal
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.util.List:size
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.util.Deque:pollFirst
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.lang.Character:instanceof
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.lang.Character:charValue
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.util.Deque:isEmpty
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:readTerm
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.util.ArrayDeque
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.util.Deque:pollLast
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.util.Deque:addFirst
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:parseStack
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.util.Deque:poll
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.util.Deque:add
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.util.Deque:size
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.lang.String:charAt
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.lang.String:valueOf
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.lang.Integer:parseInt
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.lang.Character:valueOf
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.lang.StringBuilder:length
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:com.dmdirc.config.IdentityManager:getGlobalConfig
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptions
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.lang.StringBuilder:indexOf
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.lang.StringBuilder:replace
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.util.Map:entrySet
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.util.Set:iterator
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.util.Map$Entry:getKey
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.util.Map$Entry:getValue
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:[Ljava.lang.String;:instanceof
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.lang.String:instanceof
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.lang.String:split
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.lang.StringBuffer
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.lang.StringBuffer:length
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.lang.StringBuffer:insert
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.lang.StringBuffer:toString
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:doServerSubstitutions
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:doComponentSubstitutions
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:getServer
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:getState
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:com.dmdirc.ServerState:equals
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:getCompatibleComponents
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.lang.Object:toString
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:get
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:getArgTypes
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:test
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:evaluate
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:getUI
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:com.dmdirc.ui.interfaces.UIController:getActiveWindow
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:getFrame
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:instanceof
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.util.List:get
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:com.dmdirc.commandparser.parsers.GlobalCommandParser:getGlobalCommandParser
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:getCommandParser
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:com.dmdirc.commandparser.parsers.CommandParser:parseCommand
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.lang.StringBuffer:setLength
    //#unanalyzed(void dataTransfered(DCCSend, int)): Effects-of-calling:java.lang.StringBuffer:append
			transferCount += bytes;
			percent = (100.00 / dcc.getFileSize()) * (transferCount + dcc.getFileStart());
		}
		
		if (dcc.getType() == DCCSend.TransferType.SEND) {
			status.setText("Status: Sending");
		} else {
			status.setText("Status: Recieving");
		}
		
		updateSpeedAndTime();
		
		progress.setValue((int)Math.floor(percent));
		
		ActionManager.processEvent(DCCActions.DCC_SEND_DATATRANSFERED, null, this, bytes);
    //#DCCSendWindow.java:228: ?!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.DCCSendWindow
    //#    method: void dataTransfered(DCCSend, int)
    //#    basic block: bb_7
    //#    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
	}
    //#DCCSendWindow.java:229: end of method: void com.dmdirc.addons.dcc.DCCSendWindow.dataTransfered(DCCSend, int)
	
	/**
	 * Update the transfer speed, time remaining and time taken labels.
	 */
	public void updateSpeedAndTime() {
		final long time = (System.currentTimeMillis() - timeStarted) / 1000;
    //#DCCSendWindow.java:235: method: void com.dmdirc.addons.dcc.DCCSendWindow.updateSpeedAndTime()
    //#input(void updateSpeedAndTime()): ":"._tainted
    //#input(void updateSpeedAndTime()): com/dmdirc/addons/dcc/DCCSend.__Descendant_Table[com/dmdirc/addons/dcc/DCCSend]
    //#input(void updateSpeedAndTime()): com/dmdirc/addons/dcc/DCCSend.__Descendant_Table[others]
    //#input(void updateSpeedAndTime()): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.getFileSize()J
    //#input(void updateSpeedAndTime()): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.getFileStart()I
    //#input(void updateSpeedAndTime()): this
    //#input(void updateSpeedAndTime()): this.__Lock
    //#input(void updateSpeedAndTime()): this.dcc
    //#input(void updateSpeedAndTime()): this.dcc.__Tag
    //#input(void updateSpeedAndTime()): this.dcc.size
    //#input(void updateSpeedAndTime()): this.dcc.startpos
    //#input(void updateSpeedAndTime()): this.remaining
    //#input(void updateSpeedAndTime()): this.speed
    //#input(void updateSpeedAndTime()): this.taken
    //#input(void updateSpeedAndTime()): this.timeStarted
    //#pre[2] (void updateSpeedAndTime()): this.dcc != null
    //#pre[3] (void updateSpeedAndTime()): this.dcc.__Tag == com/dmdirc/addons/dcc/DCCSend
    //#pre[4] (void updateSpeedAndTime()): init'ed(this.dcc.size)
    //#pre[5] (void updateSpeedAndTime()): init'ed(this.dcc.startpos)
    //#pre[7] (void updateSpeedAndTime()): this.remaining != null
    //#pre[8] (void updateSpeedAndTime()): this.speed != null
    //#pre[9] (void updateSpeedAndTime()): this.taken != null
    //#pre[10] (void updateSpeedAndTime()): init'ed(this.timeStarted)
    //#presumption(void updateSpeedAndTime()): (int) (java.lang.Math:floor(...)@255) in {-9_223_372_036_854_775_808..18_446_744_073_709_551_615}
    //#presumption(void updateSpeedAndTime()): (this.dcc.startpos - this.dcc.size) + this.transferCount in {-18_446_744_073_709_551_615..9_223_372_036_854_775_808}
    //#unanalyzed(void updateSpeedAndTime()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void updateSpeedAndTime()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void updateSpeedAndTime()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void updateSpeedAndTime()): Effects-of-calling:java.lang.Long:valueOf
    //#unanalyzed(void updateSpeedAndTime()): Effects-of-calling:java.lang.String:format
		final double bytesPerSecond;
		synchronized (this) {
			bytesPerSecond = (time > 0) ? (transferCount / time) : transferCount;
		}
			
		if (bytesPerSecond > 1048576) {
			speed.setText(String.format("Speed: %.2f MB/s", (bytesPerSecond/1048576)));
		} else if (bytesPerSecond > 1024) {
			speed.setText(String.format("Speed: %.2f KB/s", (bytesPerSecond/1024)));
		} else {
			speed.setText(String.format("Speed: %f B/s", bytesPerSecond));
		}
		
		final long remaningBytes;
		synchronized (this) {
			remaningBytes = dcc.getFileSize() - dcc.getFileStart() - transferCount;
		}
		final double remainingSeconds = (bytesPerSecond > 0) ? (remaningBytes / bytesPerSecond) : 1;
		
		remaining.setText(String.format("Time Remaining: %s", duration((int) Math.floor(remainingSeconds))));
		taken.setText(String.format("Time Taken: %s", timeStarted == 0 ? "N/A" : duration(time)));
	}
    //#DCCSendWindow.java:257: end of method: void com.dmdirc.addons.dcc.DCCSendWindow.updateSpeedAndTime()
	
	/**
	 * Get the duration in seconds as a string.
	 *
	 * @param secondsInput to get duration for
	 * @return Duration as a string
	 */
	private String duration(final long secondsInput) {
		final StringBuilder result = new StringBuilder();
    //#DCCSendWindow.java:266: method: String com.dmdirc.addons.dcc.DCCSendWindow.duration(long)
    //#input(String duration(long)): ":"._tainted
    //#input(String duration(long)): secondsInput
    //#output(String duration(long)): java.lang.StringBuilder:toString(...)._tainted
    //#output(String duration(long)): return_value
    //#new obj(String duration(long)): java.lang.StringBuilder:toString(...)
    //#post(String duration(long)): java.lang.StringBuilder:toString(...)._tainted == 0
    //#post(String duration(long)): return_value == &java.lang.StringBuilder:toString(...)
    //#test_vector(String duration(long)): secondsInput: {-9_223_372_036_854_775_808..3_599}, {3_600..18_446_744_073_709_551_615}
    //#test_vector(String duration(long)): secondsInput/3_600: {-2_562_047_788_015_215..0}, {1..5_124_095_576_030_431}
    //#test_vector(String duration(long)): secondsInput/60: {-153_722_867_280_912_930..59}, {60..307_445_734_561_825_860}
		final long hours = (secondsInput / 3600);
		final long minutes = (secondsInput / 60 % 60);
		final long seconds = (secondsInput % 60);
		
		if (hours > 0) { result.append(hours+":"); }
		result.append(String.format("%0,2d:%0,2d",minutes,seconds));
		
		return result.toString();
    //#DCCSendWindow.java:274: end of method: String com.dmdirc.addons.dcc.DCCSendWindow.duration(long)
	}
	
	/**
	 * Called when the socket is closed
	 *
	 * @param dcc The DCCSend that this message is from
	 */
	@Override
	public void socketClosed(final DCCSend dcc) {
		ActionManager.processEvent(DCCActions.DCC_SEND_SOCKETCLOSED, null, this);
    //#DCCSendWindow.java:284: method: void com.dmdirc.addons.dcc.DCCSendWindow.socketClosed(DCCSend)
    //#DCCSendWindow.java:284: ?!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.DCCSendWindow
    //#    method: void socketClosed(DCCSend)
    //#    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
    //#input(void socketClosed(DCCSend)): ":"._tainted
    //#input(void socketClosed(DCCSend)): __Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void socketClosed(DCCSend)): __Descendant_Table[others]
    //#input(void socketClosed(DCCSend)): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketClosed(DCCSend)): __Dispatch_Table.updateSpeedAndTime()V
    //#input(void socketClosed(DCCSend)): com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions(DCCActions__static_init#7).__Tag
    //#input(void socketClosed(DCCSend)): com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions(DCCActions__static_init#7).type
    //#input(void socketClosed(DCCSend)): com.dmdirc.addons.dcc.actions.DCCEvents__static_init.new DCCEvents(DCCEvents__static_init#19).__Tag
    //#input(void socketClosed(DCCSend)): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketClosed(DCCSend)): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketClosed(DCCSend)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void socketClosed(DCCSend)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void socketClosed(DCCSend)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void socketClosed(DCCSend)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void socketClosed(DCCSend)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void socketClosed(DCCSend)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void socketClosed(DCCSend)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void socketClosed(DCCSend)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void socketClosed(DCCSend)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void socketClosed(DCCSend)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void socketClosed(DCCSend)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void socketClosed(DCCSend)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void socketClosed(DCCSend)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void socketClosed(DCCSend)): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void socketClosed(DCCSend)): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketClosed(DCCSend)): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketClosed(DCCSend)): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketClosed(DCCSend)): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketClosed(DCCSend)): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketClosed(DCCSend)): com/dmdirc/Server.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketClosed(DCCSend)): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketClosed(DCCSend)): com/dmdirc/actions/ActionManager.killSwitch
    //#input(void socketClosed(DCCSend)): com/dmdirc/actions/ActionManager.listeners
    //#input(void socketClosed(DCCSend)): com/dmdirc/actions/CoreActionType.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void socketClosed(DCCSend)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/interfaces/ActionMetaType]
    //#input(void socketClosed(DCCSend)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ActionEvents]
    //#input(void socketClosed(DCCSend)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ChannelEvents]
    //#input(void socketClosed(DCCSend)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ClientEvents]
    //#input(void socketClosed(DCCSend)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/PluginEvents]
    //#input(void socketClosed(DCCSend)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/QueryEvents]
    //#input(void socketClosed(DCCSend)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ServerEvents]
    //#input(void socketClosed(DCCSend)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/addons/dcc/actions/DCCEvents]
    //#input(void socketClosed(DCCSend)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[others]
    //#input(void socketClosed(DCCSend)): com/dmdirc/actions/interfaces/ActionMetaType.__Dispatch_Table.getArity()I
    //#input(void socketClosed(DCCSend)): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/actions/CoreActionType]
    //#input(void socketClosed(DCCSend)): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/actions/interfaces/ActionType]
    //#input(void socketClosed(DCCSend)): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/addons/dcc/actions/DCCActions]
    //#input(void socketClosed(DCCSend)): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[others]
    //#input(void socketClosed(DCCSend)): com/dmdirc/actions/interfaces/ActionType.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void socketClosed(DCCSend)): com/dmdirc/actions/metatypes/ActionEvents.__Dispatch_Table.getArity()I
    //#input(void socketClosed(DCCSend)): com/dmdirc/actions/metatypes/ChannelEvents.__Dispatch_Table.getArity()I
    //#input(void socketClosed(DCCSend)): com/dmdirc/actions/metatypes/ClientEvents.__Dispatch_Table.getArity()I
    //#input(void socketClosed(DCCSend)): com/dmdirc/actions/metatypes/PluginEvents.__Dispatch_Table.getArity()I
    //#input(void socketClosed(DCCSend)): com/dmdirc/actions/metatypes/QueryEvents.__Dispatch_Table.getArity()I
    //#input(void socketClosed(DCCSend)): com/dmdirc/actions/metatypes/ServerEvents.__Dispatch_Table.getArity()I
    //#input(void socketClosed(DCCSend)): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketClosed(DCCSend)): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketClosed(DCCSend)): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketClosed(DCCSend)): com/dmdirc/addons/dcc/DCCSend$TransferType.SEND
    //#input(void socketClosed(DCCSend)): com/dmdirc/addons/dcc/DCCSend.__Descendant_Table[com/dmdirc/addons/dcc/DCCSend]
    //#input(void socketClosed(DCCSend)): com/dmdirc/addons/dcc/DCCSend.__Descendant_Table[others]
    //#input(void socketClosed(DCCSend)): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.getFileSize()J
    //#input(void socketClosed(DCCSend)): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.getFileStart()I
    //#input(void socketClosed(DCCSend)): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.getType()Lcom/dmdirc/addons/dcc/DCCSend$TransferType;
    //#input(void socketClosed(DCCSend)): com/dmdirc/addons/dcc/actions/DCCActions.DCC_SEND_SOCKETCLOSED
    //#input(void socketClosed(DCCSend)): com/dmdirc/addons/dcc/actions/DCCActions.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void socketClosed(DCCSend)): com/dmdirc/addons/dcc/actions/DCCEvents.__Dispatch_Table.getArity()I
    //#input(void socketClosed(DCCSend)): dcc
    //#input(void socketClosed(DCCSend)): dcc.__Tag
    //#input(void socketClosed(DCCSend)): dcc.size
    //#input(void socketClosed(DCCSend)): dcc.transferType
    //#input(void socketClosed(DCCSend)): this
    //#input(void socketClosed(DCCSend)): this.__Tag
    //#input(void socketClosed(DCCSend)): this.button
    //#input(void socketClosed(DCCSend)): this.changer
    //#input(void socketClosed(DCCSend)): this.config
    //#input(void socketClosed(DCCSend)): this.dcc
    //#input(void socketClosed(DCCSend)): this.dcc.__Tag
    //#input(void socketClosed(DCCSend)): this.dcc.size
    //#input(void socketClosed(DCCSend)): this.dcc.startpos
    //#input(void socketClosed(DCCSend)): this.listeners
    //#input(void socketClosed(DCCSend)): this.progress
    //#input(void socketClosed(DCCSend)): this.remaining
    //#input(void socketClosed(DCCSend)): this.speed
    //#input(void socketClosed(DCCSend)): this.status
    //#input(void socketClosed(DCCSend)): this.taken
    //#input(void socketClosed(DCCSend)): this.timeStarted
    //#input(void socketClosed(DCCSend)): this.windowClosing
    //#output(void socketClosed(DCCSend)): com/dmdirc/ServerManager.me
    //#output(void socketClosed(DCCSend)): new ArrayList(ServerManager#1) num objects
    //#output(void socketClosed(DCCSend)): new ServerManager(getServerManager#1) num objects
    //#output(void socketClosed(DCCSend)): new ServerManager(getServerManager#1).__Tag
    //#output(void socketClosed(DCCSend)): new ServerManager(getServerManager#1).servers
    //#output(void socketClosed(DCCSend)): this.icon
    //#new obj(void socketClosed(DCCSend)): new ArrayList(ServerManager#1)
    //#new obj(void socketClosed(DCCSend)): new ServerManager(getServerManager#1)
    //#pre[3] (void socketClosed(DCCSend)): init'ed(com/dmdirc/actions/ActionManager.killSwitch)
    //#pre[29] (void socketClosed(DCCSend)): init'ed(this.windowClosing)
    //#pre[1] (void socketClosed(DCCSend)): (soft) com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions(DCCActions__static_init#7).type != null
    //#pre[4] (void socketClosed(DCCSend)): (soft) dcc != null
    //#pre[5] (void socketClosed(DCCSend)): (soft) dcc.__Tag == com/dmdirc/addons/dcc/DCCSend
    //#pre[6] (void socketClosed(DCCSend)): (soft) init'ed(dcc.size)
    //#pre[7] (void socketClosed(DCCSend)): (soft) init'ed(dcc.transferType)
    //#pre[8] (void socketClosed(DCCSend)): (soft) init'ed(com/dmdirc/ServerManager.me)
    //#pre[12] (void socketClosed(DCCSend)): (soft) this.__Tag == com/dmdirc/addons/dcc/DCCSendWindow
    //#pre[13] (void socketClosed(DCCSend)): (soft) this.button != null
    //#pre[15] (void socketClosed(DCCSend)): (soft) this.config != null
    //#pre[16] (void socketClosed(DCCSend)): (soft) this.dcc != null
    //#pre[17] (void socketClosed(DCCSend)): (soft) this.dcc.__Tag == com/dmdirc/addons/dcc/DCCSend
    //#pre[18] (void socketClosed(DCCSend)): (soft) init'ed(this.dcc.size)
    //#pre[19] (void socketClosed(DCCSend)): (soft) init'ed(this.dcc.startpos)
    //#pre[20] (void socketClosed(DCCSend)): (soft) this.listeners != null
    //#pre[22] (void socketClosed(DCCSend)): (soft) this.progress != null
    //#pre[23] (void socketClosed(DCCSend)): (soft) this.remaining != null
    //#pre[24] (void socketClosed(DCCSend)): (soft) this.speed != null
    //#pre[25] (void socketClosed(DCCSend)): (soft) this.status != null
    //#pre[26] (void socketClosed(DCCSend)): (soft) this.taken != null
    //#pre[27] (void socketClosed(DCCSend)): (soft) init'ed(this.timeStarted)
    //#post(void socketClosed(DCCSend)): com/dmdirc/ServerManager.me == old com/dmdirc/ServerManager.me
    //#post(void socketClosed(DCCSend)): this.icon == One-of{old this.icon, &"dcc-send-done", &"dcc-receive-done", &"dcc-send-failed", &"dcc-receive-failed"}
    //#post(void socketClosed(DCCSend)): new ArrayList(ServerManager#1) num objects == undefined
    //#post(void socketClosed(DCCSend)): new ArrayList(ServerManager#1) num objects == 0, if init'ed
    //#post(void socketClosed(DCCSend)): new ServerManager(getServerManager#1) num objects == new ArrayList(ServerManager#1) num objects
    //#post(void socketClosed(DCCSend)): new ServerManager(getServerManager#1).__Tag == new ArrayList(ServerManager#1) num objects
    //#post(void socketClosed(DCCSend)): new ServerManager(getServerManager#1).servers == undefined
    //#post(void socketClosed(DCCSend)): new ServerManager(getServerManager#1).servers == null
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.lang.Long:valueOf
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.lang.String:format
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:getType
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:com.dmdirc.util.MapList:containsKey
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:com.dmdirc.util.MapList:get
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.util.ArrayList:iterator
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:trigger
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:getArity
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:com.dmdirc.interfaces.ActionListener:processEvent
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:triggerActions
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:javax.swing.JLabel:setText
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.lang.System:currentTimeMillis
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.lang.Math:floor
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.lang.Double:valueOf
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:com.dmdirc.actions.ConditionTree$OPERATION:ordinal
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.util.List:size
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.util.Deque:pollFirst
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.lang.Character:instanceof
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.lang.Character:charValue
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.util.Deque:isEmpty
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:readTerm
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.util.ArrayDeque
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.util.Deque:pollLast
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.util.Deque:addFirst
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:parseStack
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.util.Deque:poll
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.util.Deque:add
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.util.Deque:size
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.lang.String:charAt
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.lang.String:valueOf
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.lang.Integer:parseInt
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.lang.Character:valueOf
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.lang.StringBuilder:length
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:com.dmdirc.config.IdentityManager:getGlobalConfig
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptions
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.lang.StringBuilder:indexOf
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.lang.StringBuilder:replace
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.util.Map:entrySet
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.util.Set:iterator
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.util.Map$Entry:getKey
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.util.Map$Entry:getValue
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:[Ljava.lang.String;:instanceof
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.lang.String:instanceof
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.lang.String:split
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.lang.StringBuffer
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.lang.StringBuffer:length
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.lang.StringBuffer:insert
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.lang.StringBuffer:toString
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:doServerSubstitutions
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:doComponentSubstitutions
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:getServer
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:getState
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:com.dmdirc.ServerState:equals
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:getCompatibleComponents
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.lang.Object:toString
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:get
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:getArgTypes
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:test
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:evaluate
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:getUI
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:com.dmdirc.ui.interfaces.UIController:getActiveWindow
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:getFrame
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:instanceof
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.util.List:get
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:com.dmdirc.commandparser.parsers.GlobalCommandParser:getGlobalCommandParser
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:getCommandParser
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:com.dmdirc.commandparser.parsers.CommandParser:parseCommand
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.lang.StringBuffer:setLength
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:java.lang.StringBuffer:append
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:com.dmdirc.interfaces.IconChangeListener:iconChanged
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:com.dmdirc.config.ConfigManager:removeListener
    //#unanalyzed(void socketClosed(DCCSend)): Effects-of-calling:com.dmdirc.config.ConfigManager:addChangeListener
    //#test_vector(void socketClosed(DCCSend)): this.windowClosing: {1}, {0}
		if (!isWindowClosing()) {
			synchronized (this) {
				if (transferCount == dcc.getFileSize()) {
					status.setText("Status: Transfer Compelete.");
					progress.setValue(100);
					setIcon(dcc.getType() == DCCSend.TransferType.SEND ? "dcc-send-done" : "dcc-receive-done");
					button.setText("Close Window");
				} else {
					status.setText("Status: Transfer Failed.");
					setIcon(dcc.getType() == DCCSend.TransferType.SEND ? "dcc-send-failed" : "dcc-receive-failed");
					if (dcc.getType() == DCCSend.TransferType.SEND) {
						button.setText("Resend");
					} else {
						button.setText("Close Window");
					}
				}
			}
			updateSpeedAndTime();
		}
	}
    //#DCCSendWindow.java:304: end of method: void com.dmdirc.addons.dcc.DCCSendWindow.socketClosed(DCCSend)
	
	/**
	 * Called when the socket is opened
	 *
	 * @param dcc The DCCSend that this message is from
	 */
	@Override
	public void socketOpened(final DCCSend dcc) {
		ActionManager.processEvent(DCCActions.DCC_SEND_SOCKETOPENED, null, this);
    //#DCCSendWindow.java:313: method: void com.dmdirc.addons.dcc.DCCSendWindow.socketOpened(DCCSend)
    //#DCCSendWindow.java:313: ?!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.DCCSendWindow
    //#    method: void socketOpened(DCCSend)
    //#    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
    //#DCCSendWindow.java:313: Warning: suspicious precondition
    //#    The precondition for this.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.dcc.DCCSendWindow
    //#    method: void socketOpened(DCCSend)
    //#    suspicious precondition index: [9]
    //#    Attribs:  Soft
    //#input(void socketOpened(DCCSend)): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketOpened(DCCSend)): com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions(DCCActions__static_init#8).__Tag
    //#input(void socketOpened(DCCSend)): com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions(DCCActions__static_init#8).type
    //#input(void socketOpened(DCCSend)): com.dmdirc.addons.dcc.actions.DCCEvents__static_init.new DCCEvents(DCCEvents__static_init#22).__Tag
    //#input(void socketOpened(DCCSend)): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketOpened(DCCSend)): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketOpened(DCCSend)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void socketOpened(DCCSend)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void socketOpened(DCCSend)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void socketOpened(DCCSend)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void socketOpened(DCCSend)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void socketOpened(DCCSend)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void socketOpened(DCCSend)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void socketOpened(DCCSend)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void socketOpened(DCCSend)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void socketOpened(DCCSend)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void socketOpened(DCCSend)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void socketOpened(DCCSend)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void socketOpened(DCCSend)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void socketOpened(DCCSend)): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void socketOpened(DCCSend)): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketOpened(DCCSend)): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketOpened(DCCSend)): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketOpened(DCCSend)): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketOpened(DCCSend)): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketOpened(DCCSend)): com/dmdirc/Server.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketOpened(DCCSend)): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketOpened(DCCSend)): com/dmdirc/actions/ActionManager.killSwitch
    //#input(void socketOpened(DCCSend)): com/dmdirc/actions/ActionManager.listeners
    //#input(void socketOpened(DCCSend)): com/dmdirc/actions/CoreActionType.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void socketOpened(DCCSend)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/interfaces/ActionMetaType]
    //#input(void socketOpened(DCCSend)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ActionEvents]
    //#input(void socketOpened(DCCSend)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ChannelEvents]
    //#input(void socketOpened(DCCSend)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ClientEvents]
    //#input(void socketOpened(DCCSend)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/PluginEvents]
    //#input(void socketOpened(DCCSend)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/QueryEvents]
    //#input(void socketOpened(DCCSend)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ServerEvents]
    //#input(void socketOpened(DCCSend)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/addons/dcc/actions/DCCEvents]
    //#input(void socketOpened(DCCSend)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[others]
    //#input(void socketOpened(DCCSend)): com/dmdirc/actions/interfaces/ActionMetaType.__Dispatch_Table.getArity()I
    //#input(void socketOpened(DCCSend)): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/actions/CoreActionType]
    //#input(void socketOpened(DCCSend)): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/actions/interfaces/ActionType]
    //#input(void socketOpened(DCCSend)): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/addons/dcc/actions/DCCActions]
    //#input(void socketOpened(DCCSend)): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[others]
    //#input(void socketOpened(DCCSend)): com/dmdirc/actions/interfaces/ActionType.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void socketOpened(DCCSend)): com/dmdirc/actions/metatypes/ActionEvents.__Dispatch_Table.getArity()I
    //#input(void socketOpened(DCCSend)): com/dmdirc/actions/metatypes/ChannelEvents.__Dispatch_Table.getArity()I
    //#input(void socketOpened(DCCSend)): com/dmdirc/actions/metatypes/ClientEvents.__Dispatch_Table.getArity()I
    //#input(void socketOpened(DCCSend)): com/dmdirc/actions/metatypes/PluginEvents.__Dispatch_Table.getArity()I
    //#input(void socketOpened(DCCSend)): com/dmdirc/actions/metatypes/QueryEvents.__Dispatch_Table.getArity()I
    //#input(void socketOpened(DCCSend)): com/dmdirc/actions/metatypes/ServerEvents.__Dispatch_Table.getArity()I
    //#input(void socketOpened(DCCSend)): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketOpened(DCCSend)): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketOpened(DCCSend)): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void socketOpened(DCCSend)): com/dmdirc/addons/dcc/DCCSend$TransferType.SEND
    //#input(void socketOpened(DCCSend)): com/dmdirc/addons/dcc/DCCSend.__Descendant_Table[com/dmdirc/addons/dcc/DCCSend]
    //#input(void socketOpened(DCCSend)): com/dmdirc/addons/dcc/DCCSend.__Descendant_Table[others]
    //#input(void socketOpened(DCCSend)): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.getType()Lcom/dmdirc/addons/dcc/DCCSend$TransferType;
    //#input(void socketOpened(DCCSend)): com/dmdirc/addons/dcc/actions/DCCActions.DCC_SEND_SOCKETOPENED
    //#input(void socketOpened(DCCSend)): com/dmdirc/addons/dcc/actions/DCCActions.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void socketOpened(DCCSend)): com/dmdirc/addons/dcc/actions/DCCEvents.__Dispatch_Table.getArity()I
    //#input(void socketOpened(DCCSend)): dcc
    //#input(void socketOpened(DCCSend)): dcc.__Tag
    //#input(void socketOpened(DCCSend)): dcc.transferType
    //#input(void socketOpened(DCCSend)): this
    //#input(void socketOpened(DCCSend)): this.__Tag
    //#input(void socketOpened(DCCSend)): this.changer
    //#input(void socketOpened(DCCSend)): this.config
    //#input(void socketOpened(DCCSend)): this.listeners
    //#input(void socketOpened(DCCSend)): this.status
    //#output(void socketOpened(DCCSend)): com/dmdirc/ServerManager.me
    //#output(void socketOpened(DCCSend)): new ArrayList(ServerManager#1) num objects
    //#output(void socketOpened(DCCSend)): new ServerManager(getServerManager#1) num objects
    //#output(void socketOpened(DCCSend)): new ServerManager(getServerManager#1).__Tag
    //#output(void socketOpened(DCCSend)): new ServerManager(getServerManager#1).servers
    //#output(void socketOpened(DCCSend)): this.icon
    //#output(void socketOpened(DCCSend)): this.timeStarted
    //#new obj(void socketOpened(DCCSend)): new ArrayList(ServerManager#1)
    //#new obj(void socketOpened(DCCSend)): new ServerManager(getServerManager#1)
    //#pre[3] (void socketOpened(DCCSend)): init'ed(com/dmdirc/actions/ActionManager.killSwitch)
    //#pre[4] (void socketOpened(DCCSend)): dcc != null
    //#pre[5] (void socketOpened(DCCSend)): dcc.__Tag == com/dmdirc/addons/dcc/DCCSend
    //#pre[6] (void socketOpened(DCCSend)): init'ed(dcc.transferType)
    //#pre[11] (void socketOpened(DCCSend)): this.config != null
    //#pre[12] (void socketOpened(DCCSend)): this.listeners != null
    //#pre[14] (void socketOpened(DCCSend)): this.status != null
    //#pre[1] (void socketOpened(DCCSend)): (soft) com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions(DCCActions__static_init#8).type != null
    //#pre[7] (void socketOpened(DCCSend)): (soft) init'ed(com/dmdirc/ServerManager.me)
    //#pre[9] (void socketOpened(DCCSend)): (soft) this.__Tag in {com/dmdirc/Channel, com/dmdirc/CustomWindow, com/dmdirc/FrameContainer, com/dmdirc/GlobalWindow, com/dmdirc/MessageTarget, com/dmdirc/Query, com/dmdirc/Raw, com/dmdirc/Server, com/dmdirc/WritableFrameContainer, com/dmdirc/addons/dcc/DCCChatWindow, com/dmdirc/addons/dcc/DCCFrame, com/dmdirc/addons/dcc/DCCPlugin$3, com/dmdirc/addons/dcc/DCCSendWindow}
    //#post(void socketOpened(DCCSend)): com/dmdirc/ServerManager.me == old com/dmdirc/ServerManager.me
    //#post(void socketOpened(DCCSend)): this.icon == One-of{&"dcc-send-active", &"dcc-receive-active"}
    //#post(void socketOpened(DCCSend)): this.icon in Addr_Set{&"dcc-receive-active",&"dcc-send-active"}
    //#post(void socketOpened(DCCSend)): init'ed(this.timeStarted)
    //#post(void socketOpened(DCCSend)): new ArrayList(ServerManager#1) num objects == undefined
    //#post(void socketOpened(DCCSend)): new ArrayList(ServerManager#1) num objects == 0, if init'ed
    //#post(void socketOpened(DCCSend)): new ServerManager(getServerManager#1) num objects == new ArrayList(ServerManager#1) num objects
    //#post(void socketOpened(DCCSend)): new ServerManager(getServerManager#1).__Tag == new ArrayList(ServerManager#1) num objects
    //#post(void socketOpened(DCCSend)): new ServerManager(getServerManager#1).servers == undefined
    //#post(void socketOpened(DCCSend)): new ServerManager(getServerManager#1).servers == null
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:getType
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:com.dmdirc.util.MapList:containsKey
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:com.dmdirc.util.MapList:get
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:java.util.ArrayList:iterator
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:trigger
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:getArity
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:com.dmdirc.interfaces.ActionListener:processEvent
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:triggerActions
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:com.dmdirc.actions.ConditionTree$OPERATION:ordinal
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:java.util.List:size
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:java.util.Deque:pollFirst
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:java.lang.Character:instanceof
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:java.lang.Character:charValue
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:java.util.Deque:isEmpty
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:readTerm
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:java.util.ArrayDeque
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:java.util.Deque:pollLast
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:java.util.Deque:addFirst
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:parseStack
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:java.util.Deque:poll
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:java.util.Deque:add
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:java.util.Deque:size
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:java.lang.String:charAt
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:java.lang.String:valueOf
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:java.lang.Integer:parseInt
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:java.lang.Character:valueOf
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:java.lang.StringBuilder:length
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:com.dmdirc.config.IdentityManager:getGlobalConfig
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptions
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:java.lang.StringBuilder:indexOf
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:java.lang.StringBuilder:replace
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:java.util.Map:entrySet
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:java.util.Set:iterator
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:java.util.Map$Entry:getKey
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:java.util.Map$Entry:getValue
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:[Ljava.lang.String;:instanceof
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:java.lang.String:instanceof
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:java.lang.String:split
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:java.lang.StringBuffer
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:java.lang.StringBuffer:length
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:java.lang.StringBuffer:insert
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:java.lang.StringBuffer:toString
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:doServerSubstitutions
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:doComponentSubstitutions
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:getServer
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:getState
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:com.dmdirc.ServerState:equals
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:getCompatibleComponents
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:java.lang.Object:toString
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:get
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:getArgTypes
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:test
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:evaluate
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:getUI
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:com.dmdirc.ui.interfaces.UIController:getActiveWindow
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:getFrame
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:instanceof
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:java.util.List:get
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:com.dmdirc.commandparser.parsers.GlobalCommandParser:getGlobalCommandParser
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:getCommandParser
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:com.dmdirc.commandparser.parsers.CommandParser:parseCommand
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:java.lang.StringBuffer:setLength
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:java.lang.StringBuffer:append
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:com.dmdirc.interfaces.IconChangeListener:iconChanged
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:com.dmdirc.config.ConfigManager:removeListener
    //#unanalyzed(void socketOpened(DCCSend)): Effects-of-calling:com.dmdirc.config.ConfigManager:addChangeListener
		status.setText("Status: Socket Opened");
		timeStarted = System.currentTimeMillis();
		setIcon(dcc.getType() == DCCSend.TransferType.SEND ? "dcc-send-active" : "dcc-receive-active");
	}
    //#DCCSendWindow.java:317: end of method: void com.dmdirc.addons.dcc.DCCSendWindow.socketOpened(DCCSend)
	
	/**
	 * Closes this container (and it's associated frame).
	 */
	@Override
	public void windowClosing() {
		super.windowClosing();
    //#DCCSendWindow.java:324: method: void com.dmdirc.addons.dcc.DCCSendWindow.windowClosing()
    //#input(void windowClosing()): __Dispatch_Table.socketClosed(Lcom/dmdirc/addons/dcc/DCCSend;)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.__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/DCCChatWindow.__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.__Descendant_Table[com/dmdirc/addons/dcc/DCCSend]
    //#input(void windowClosing()): com/dmdirc/addons/dcc/DCCSend.__Descendant_Table[others]
    //#input(void windowClosing()): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.close()V
    //#input(void windowClosing()): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.removeFromSends()V
    //#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()): 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/DCCSend
    //#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.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: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:javax.swing.JLabel:setText
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.lang.System:currentTimeMillis
    //#unanalyzed(void windowClosing()): Effects-of-calling:setIcon
    //#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.Throwable:__curr_excep_obj
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.util.List:remove
    //#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:java.lang.Double:valueOf
    //#unanalyzed(void windowClosing()): Effects-of-calling:isWindowClosing
    //#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:isEmpty
    //#unanalyzed(void windowClosing()): Effects-of-calling:com.dmdirc.ui.WindowManager:removeWindow
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.lang.StringBuffer
    //#unanalyzed(void windowClosing()): Effects-of-calling:addLine
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.io.DataOutputStream:close
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.io.DataInputStream:close
		dcc.removeFromSends();
		dcc.close();
	}
    //#DCCSendWindow.java:327: end of method: void com.dmdirc.addons.dcc.DCCSendWindow.windowClosing()
}
    //#output(com.dmdirc.addons.dcc.DCCSendWindow$1__static_init): __Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow$1]
    //#output(com.dmdirc.addons.dcc.DCCSendWindow$1__static_init): __Dispatch_Table.run()V
    //#post(com.dmdirc.addons.dcc.DCCSendWindow$1__static_init): __Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow$1] == &__Dispatch_Table
    //#post(com.dmdirc.addons.dcc.DCCSendWindow$1__static_init): __Dispatch_Table.run()V == &run
    //#DCCSendWindow.java:: end of method: com.dmdirc.addons.dcc.DCCSendWindow$1.com.dmdirc.addons.dcc.DCCSendWindow$1__static_init
    //#DCCSendWindow.java:: end of class: com.dmdirc.addons.dcc.DCCSendWindow$1
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.actionPerformed(Ljava/awt/event/ActionEvent;)V
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.activateFrame()V
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.addIconChangeListener(Lcom/dmdirc/interfaces/IconChangeListener;)V
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.addLine(Ljava/lang/StringBuffer;[Ljava/lang/Object;)V
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.addNotificationListener(Lcom/dmdirc/interfaces/NotificationListener;)V
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.addSelectionListener(Lcom/dmdirc/interfaces/SelectionListener;)V
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.clearNotification()V
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.close()V
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.dataTransfered(Lcom/dmdirc/addons/dcc/DCCSend;I)V
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.doNotification(Ljava/lang/String;Lcom/dmdirc/actions/interfaces/ActionType;[Ljava/lang/Object;)V
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.duration(J)Ljava/lang/String;
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.getConfigManager()Lcom/dmdirc/config/ConfigManager;
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.getContentPane()Ljava/awt/Container;
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.getDCC()Lcom/dmdirc/addons/dcc/DCCSend;
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.getIcon()Ljavax/swing/Icon;
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.getMaxLineLength()I
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.getNotification()Ljava/awt/Color;
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.getNumLines(Ljava/lang/String;)I
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.handleNotification(Ljava/lang/String;[Ljava/lang/Object;)V
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.iconUpdated()V
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.isWindowClosing()Z
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.modifyNotificationArgs(Ljava/util/List;Ljava/util/List;)V
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.onSocketClosed(Lcom/dmdirc/parser/irc/IRCParser;)V
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.ownsFrame(Lcom/dmdirc/ui/interfaces/Window;)Z
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.processNotificationArg(Ljava/lang/Object;Ljava/util/List;)Z
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.removeIconChangeListener(Lcom/dmdirc/interfaces/IconChangeListener;)V
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.removeNotificationListener(Lcom/dmdirc/interfaces/NotificationListener;)V
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.removeSelectionListener(Lcom/dmdirc/interfaces/SelectionListener;)V
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.sendLine(Ljava/lang/String;)V
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.sendNotification(Ljava/awt/Color;)V
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.setIcon(Ljava/lang/String;)V
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.socketClosed(Lcom/dmdirc/addons/dcc/DCCSend;)V
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.socketOpened(Lcom/dmdirc/addons/dcc/DCCSend;)V
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.splitLine(Ljava/lang/String;)Ljava/util/List;
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.toString()Ljava/lang/String;
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.updateSpeedAndTime()V
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.windowActivated()V
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.windowClosed()V
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.windowClosing()V
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.windowDeactivated()V
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.windowOpened()V
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#output(com.dmdirc.addons.dcc.DCCSendWindow__static_init): com/dmdirc/addons/dcc/DCCSendInterface.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow] == &__Dispatch_Table
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow] == &__Dispatch_Table
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow] == &__Dispatch_Table
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow] == &__Dispatch_Table
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): com/dmdirc/addons/dcc/DCCSendInterface.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow] == &__Dispatch_Table
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.actionPerformed(Ljava/awt/event/ActionEvent;)V == &actionPerformed
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.activateFrame()V == &com/dmdirc/FrameContainer.activateFrame
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.addIconChangeListener(Lcom/dmdirc/interfaces/IconChangeListener;)V == &com/dmdirc/FrameContainer.addIconChangeListener
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V == &com/dmdirc/FrameContainer.addLine
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.addLine(Ljava/lang/StringBuffer;[Ljava/lang/Object;)V == &com/dmdirc/FrameContainer.addLine
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.addNotificationListener(Lcom/dmdirc/interfaces/NotificationListener;)V == &com/dmdirc/FrameContainer.addNotificationListener
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.addSelectionListener(Lcom/dmdirc/interfaces/SelectionListener;)V == &com/dmdirc/FrameContainer.addSelectionListener
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.clearNotification()V == &com/dmdirc/FrameContainer.clearNotification
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.close()V == &com/dmdirc/FrameContainer.close
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.dataTransfered(Lcom/dmdirc/addons/dcc/DCCSend;I)V == &dataTransfered
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V == &com/dmdirc/WritableFrameContainer.despatchNotification
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__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.DCCSendWindow__static_init): __Dispatch_Table.duration(J)Ljava/lang/String; == &duration
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.getConfigManager()Lcom/dmdirc/config/ConfigManager; == &com/dmdirc/FrameContainer.getConfigManager
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.getContentPane()Ljava/awt/Container; == &com/dmdirc/addons/dcc/DCCFrame.getContentPane
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.getDCC()Lcom/dmdirc/addons/dcc/DCCSend; == &getDCC
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow; == &com/dmdirc/addons/dcc/DCCFrame.getFrame
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window; == &com/dmdirc/addons/dcc/DCCFrame.getFrame
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.getIcon()Ljavax/swing/Icon; == &com/dmdirc/FrameContainer.getIcon
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.getMaxLineLength()I == &com/dmdirc/addons/dcc/DCCFrame.getMaxLineLength
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.getNotification()Ljava/awt/Color; == &com/dmdirc/FrameContainer.getNotification
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.getNumLines(Ljava/lang/String;)I == &com/dmdirc/WritableFrameContainer.getNumLines
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.getServer()Lcom/dmdirc/Server; == &com/dmdirc/addons/dcc/DCCFrame.getServer
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.handleNotification(Ljava/lang/String;[Ljava/lang/Object;)V == &com/dmdirc/WritableFrameContainer.handleNotification
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.iconUpdated()V == &com/dmdirc/FrameContainer.iconUpdated
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.isWindowClosing()Z == &com/dmdirc/addons/dcc/DCCFrame.isWindowClosing
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.modifyNotificationArgs(Ljava/util/List;Ljava/util/List;)V == &com/dmdirc/WritableFrameContainer.modifyNotificationArgs
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.onSocketClosed(Lcom/dmdirc/parser/irc/IRCParser;)V == &onSocketClosed
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.ownsFrame(Lcom/dmdirc/ui/interfaces/Window;)Z == &com/dmdirc/FrameContainer.ownsFrame
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.processNotificationArg(Ljava/lang/Object;Ljava/util/List;)Z == &com/dmdirc/WritableFrameContainer.processNotificationArg
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.removeIconChangeListener(Lcom/dmdirc/interfaces/IconChangeListener;)V == &com/dmdirc/FrameContainer.removeIconChangeListener
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.removeNotificationListener(Lcom/dmdirc/interfaces/NotificationListener;)V == &com/dmdirc/FrameContainer.removeNotificationListener
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.removeSelectionListener(Lcom/dmdirc/interfaces/SelectionListener;)V == &com/dmdirc/FrameContainer.removeSelectionListener
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.sendLine(Ljava/lang/String;)V == &com/dmdirc/addons/dcc/DCCFrame.sendLine
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.sendNotification(Ljava/awt/Color;)V == &com/dmdirc/FrameContainer.sendNotification
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.setIcon(Ljava/lang/String;)V == &com/dmdirc/FrameContainer.setIcon
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.socketClosed(Lcom/dmdirc/addons/dcc/DCCSend;)V == &socketClosed
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.socketOpened(Lcom/dmdirc/addons/dcc/DCCSend;)V == &socketOpened
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.splitLine(Ljava/lang/String;)Ljava/util/List; == &com/dmdirc/WritableFrameContainer.splitLine
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.toString()Ljava/lang/String; == &com/dmdirc/addons/dcc/DCCFrame.toString
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.updateSpeedAndTime()V == &updateSpeedAndTime
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.windowActivated()V == &com/dmdirc/FrameContainer.windowActivated
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.windowClosed()V == &com/dmdirc/FrameContainer.windowClosed
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.windowClosing()V == &windowClosing
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.windowDeactivated()V == &com/dmdirc/FrameContainer.windowDeactivated
    //#post(com.dmdirc.addons.dcc.DCCSendWindow__static_init): __Dispatch_Table.windowOpened()V == &com/dmdirc/FrameContainer.windowOpened
    //#DCCSendWindow.java:: end of method: com.dmdirc.addons.dcc.DCCSendWindow.com.dmdirc.addons.dcc.DCCSendWindow__static_init
    //#DCCSendWindow.java:: end of class: com.dmdirc.addons.dcc.DCCSendWindow
