class ThreadBoundPrintStream extends PrintStream {

        ThreadBoundPrintStream(PrintStream systemOutStream) {
            super(systemOutStream);
        }

        private PrintStream getOutputStreamForCurrentThread() {
            return getThreadBoundPrintStream();
        }

        @Override
        public void println() {
            final PrintStream currentStream = getOutputStreamForCurrentThread();
            synchronized (currentStream) {
                currentStream.println();
                currentStream.notifyAll();
            }
        }

        @Override
        public void print(char c) {
            final PrintStream currentStream = getOutputStreamForCurrentThread();
            synchronized (currentStream) {
                currentStream.print(c);
                currentStream.notifyAll();
            }
        }

        @Override
        public void println(char x) {
            final PrintStream currentStream = getOutputStreamForCurrentThread();
            synchronized (currentStream) {
                currentStream.println(x);
                currentStream.notifyAll();
            }
        }

        @Override
        public void print(double d) {
            final PrintStream currentStream = getOutputStreamForCurrentThread();
            synchronized (currentStream) {
                currentStream.print(d);
                currentStream.notifyAll();
            }
        }

        @Override
        public void println(double x) {
            final PrintStream currentStream = getOutputStreamForCurrentThread();
            synchronized (currentStream) {
                currentStream.println(x);
                currentStream.notifyAll();
            }
        }

        @Override
        public void print(float f) {
            final PrintStream currentStream = getOutputStreamForCurrentThread();
            synchronized (currentStream) {
                currentStream.print(f);
                currentStream.notifyAll();
            }
        }

        @Override
        public void println(float x) {
            final PrintStream currentStream = getOutputStreamForCurrentThread();
            synchronized (currentStream) {
                currentStream.println(x);
                currentStream.notifyAll();
            }
        }

        @Override
        public void print(int i) {
            final PrintStream currentStream = getOutputStreamForCurrentThread();
            synchronized (currentStream) {
                currentStream.print(i);
                currentStream.notifyAll();
            }
        }

        @Override
        public void println(int x) {
            final PrintStream currentStream = getOutputStreamForCurrentThread();
            synchronized (currentStream) {
                currentStream.println(x);
                currentStream.notifyAll();
            }
        }

        @Override
        public void print(long l) {
            final PrintStream currentStream = getOutputStreamForCurrentThread();
            synchronized (currentStream) {
                currentStream.print(l);
                currentStream.notifyAll();
            }
        }

        @Override
        public void println(long x) {<FILL_FUNCTION_BODY>}

        @Override
        public void print(boolean b) {
            final PrintStream currentStream = getOutputStreamForCurrentThread();
            synchronized (currentStream) {
                currentStream.print(b);
                currentStream.notifyAll();
            }
        }

        @Override
        public void println(boolean x) {
            final PrintStream currentStream = getOutputStreamForCurrentThread();
            synchronized (currentStream) {
                currentStream.print(x);
                currentStream.notifyAll();
            }
        }

        @Override
        public void print(char s[]) {
            final PrintStream currentStream = getOutputStreamForCurrentThread();
            synchronized (currentStream) {
                currentStream.print(s);
                currentStream.notifyAll();
            }
        }

        @Override
        public void println(char x[]) {
            final PrintStream currentStream = getOutputStreamForCurrentThread();
            synchronized (currentStream) {
                currentStream.print(x);
                currentStream.notifyAll();
            }
        }

        @Override
        public void print(Object obj) {
            final PrintStream currentStream = getOutputStreamForCurrentThread();
            synchronized (currentStream) {
                currentStream.print(obj);
                currentStream.notifyAll();
            }
        }

        @Override
        public void println(Object x) {
            final PrintStream currentStream = getOutputStreamForCurrentThread();
            synchronized (currentStream) {
                currentStream.println(x);
                currentStream.notifyAll();
            }
        }

        @Override
        public void print(String s) {
            final PrintStream currentStream = getOutputStreamForCurrentThread();
            synchronized (currentStream) {
                currentStream.print(s);
                currentStream.notifyAll();
            }
        }

        @Override
        public void println(String x) {
            final PrintStream currentStream = getOutputStreamForCurrentThread();
            synchronized (currentStream) {
                currentStream.println(x);
                currentStream.notifyAll();
            }
        }

        @Override
        public void write(byte b[], int off, int len) {
            final PrintStream currentStream = getOutputStreamForCurrentThread();
            synchronized (currentStream) {
                currentStream.write(b, off, len);
                currentStream.notifyAll();
            }
        }

        @Override
        public void close() {
            getOutputStreamForCurrentThread().close();
        }

        @Override
        public void flush() {
            getOutputStreamForCurrentThread().flush();
        }

        @Override
        public void write(int b) {
            final PrintStream currentStream = getOutputStreamForCurrentThread();
            synchronized (currentStream) {
                currentStream.write(b);
                currentStream.notifyAll();
            }
        }

        @Override
        public void write(byte b[]) throws IOException {
            final PrintStream currentStream = getOutputStreamForCurrentThread();
            synchronized (currentStream) {
                currentStream.write(b);
                currentStream.notifyAll();
            }
        }
    }

            final PrintStream currentStream = getOutputStreamForCurrentThread();
            synchronized (currentStream) {
                currentStream.print(x);
                currentStream.notifyAll();
            }
        
<no_super_class>