public void run() {
		final byte[] buffer = new byte[4096];

		try {
			short idle = 0;

			while (true) {
				final int bytesRead = m_in.read(buffer, 0, buffer.length);

				if (bytesRead ==  -1) {
					break;
				}

				if (bytesRead == 0) {
					idle++;
				} else {
					m_out.write(buffer, 0, bytesRead);
					idle = 0;
				}

				if (idle > 0) {
					Thread.sleep(Math.max(idle * 200, 2000));
				}
			}
		} catch (IOException e) {
			// Be silent about IOExceptions ...
		} catch (InterruptedException e) {
			// ... and InterruptedExceptions.
		}

		// We're exiting, usually because the in stream has been
		// closed. Whatever, close our streams. This will cause the
		// paired thread to exit too.
		try {
			m_out.close();
		} catch (IOException e) {
		}

		try {
			m_in.close();
		} catch (IOException e) {
		}
	}