From ebfc4513e0ba619592af3ba946bd1974d1becb55 Mon Sep 17 00:00:00 2001 From: Trustin Lee Date: Wed, 11 Jan 2012 20:16:14 +0900 Subject: [PATCH] Apply checkstyle to the build Please note that the build will fail at the moment due to various checkstyle violations which should be fixed soon --- .gitignore | 2 +- .../netty/buffer/AbstractChannelBuffer.java | 4 +- .../buffer/BigEndianHeapChannelBuffer.java | 66 +- .../buffer/ByteBufferBackedChannelBuffer.java | 12 +- .../java/io/netty/buffer/ChannelBuffer.java | 2 +- .../java/io/netty/buffer/ChannelBuffers.java | 8 +- .../netty/buffer/CompositeChannelBuffer.java | 2 +- .../buffer/DirectChannelBufferFactory.java | 4 +- .../buffer/LittleEndianHeapChannelBuffer.java | 66 +- .../buffer/AbstractChannelBufferTest.java | 66 +- .../AbstractCompositeChannelBufferTest.java | 30 +- build/pom.xml | 55 + .../build/checkstyle/SuppressionFilter.java | 23 + build/src/main/resources/io/netty/LICENSE.txt | 202 +++ .../main/resources/io/netty/checkstyle.xml | 83 ++ .../codec/http/AbstractDiskHttpData.java | 13 +- .../handler/codec/http/AbstractHttpData.java | 13 +- .../codec/http/AbstractMemoryHttpData.java | 13 +- .../handler/codec/http/CookieDecoder.java | 4 +- .../handler/codec/http/CookieEncoder.java | 10 +- .../handler/codec/http/DefaultCookie.java | 2 +- .../codec/http/DefaultHttpDataFactory.java | 14 +- .../handler/codec/http/DiskAttribute.java | 7 +- .../handler/codec/http/DiskFileUpload.java | 23 +- .../handler/codec/http/HttpCodecUtil.java | 2 +- .../handler/codec/http/HttpDataFactory.java | 8 +- .../netty/handler/codec/http/HttpHeaders.java | 18 +- .../codec/http/HttpMessageDecoder.java | 6 +- .../handler/codec/http/HttpPostBodyUtil.java | 3 +- .../codec/http/HttpPostRequestDecoder.java | 52 +- .../codec/http/HttpPostRequestEncoder.java | 139 +- .../codec/http/HttpRequestDecoder.java | 2 +- .../handler/codec/http/MemoryAttribute.java | 3 +- .../handler/codec/http/MemoryFileUpload.java | 19 +- .../handler/codec/http/MixedAttribute.java | 15 +- .../handler/codec/http/MixedFileUpload.java | 11 +- .../codec/http/QueryStringDecoder.java | 5 +- .../codec/http/QueryStringEncoder.java | 2 +- .../ContinuationWebSocketFrame.java | 2 +- .../codec/http/websocketx/UTF8Output.java | 4 +- .../websocketx/WebSocket08FrameDecoder.java | 18 +- .../websocketx/WebSocket08FrameEncoder.java | 12 +- .../websocketx/WebSocketClientHandshaker.java | 14 +- .../WebSocketClientHandshaker00.java | 2 +- .../WebSocketClientHandshaker08.java | 4 +- .../WebSocketClientHandshaker13.java | 4 +- .../codec/http/websocketx/WebSocketFrame.java | 2 +- .../websocketx/WebSocketServerHandshaker.java | 2 +- .../WebSocketServerHandshaker08.java | 2 +- .../WebSocketServerHandshaker13.java | 2 +- .../WebSocketServerHandshakerFactory.java | 2 +- .../io/netty/handler/codec/base64/Base64.java | 29 +- .../handler/codec/bytes/ByteArrayDecoder.java | 2 +- .../codec/compression/ZlibEncoder.java | 2 +- .../embedder/EmbeddedChannelFactory.java | 2 +- .../netty/handler/codec/frame/Delimiters.java | 2 +- .../frame/LengthFieldBasedFrameDecoder.java | 10 +- .../codec/protobuf/ProtobufDecoder.java | 2 +- .../codec/serialization/ClassResolvers.java | 6 +- .../ObjectDecoderInputStream.java | 3 + .../main/java/io/netty/util/CharsetUtil.java | 6 +- .../io/netty/util/ExternalResourceUtil.java | 2 +- .../java/io/netty/util/HashedWheelTimer.java | 2 +- .../java/io/netty/util/UnsafeDetectUtil.java | 5 +- .../util/internal/AtomicFieldUpdaterUtil.java | 4 +- .../util/internal/ConcurrentHashMap.java | 6 +- .../internal/ConcurrentIdentityHashMap.java | 6 +- .../ConcurrentIdentityWeakKeyHashMap.java | 4 +- .../internal/ConcurrentWeakKeyHashMap.java | 4 +- .../netty/util/internal/ConversionUtil.java | 6 +- .../io/netty/util/internal/ExecutorUtil.java | 2 +- .../io/netty/util/internal/QueueFactory.java | 6 +- .../io/netty/util/internal/StringUtil.java | 2 +- .../util/internal/SystemPropertyUtil.java | 2 +- .../util/internal/ThreadLocalRandom.java | 8 +- .../netty/example/discard/DiscardClient.java | 14 + .../example/discard/DiscardClientHandler.java | 4 +- .../netty/example/discard/DiscardServer.java | 5 + .../example/discard/DiscardServerHandler.java | 4 +- .../io/netty/example/echo/EchoClient.java | 14 + .../io/netty/example/echo/EchoServer.java | 5 + .../example/factorial/FactorialClient.java | 14 + .../factorial/FactorialClientHandler.java | 2 +- .../example/factorial/FactorialServer.java | 5 + .../file/HttpStaticFileServerHandler.java | 3 +- .../http/snoop/HttpRequestHandler.java | 2 +- .../netty/example/http/upload/HttpClient.java | 1216 ++++++++--------- .../http/upload/HttpRequestHandler.java | 4 +- .../autobahn/WebSocketServerHandler.java | 2 +- .../example/http/websocketx/client/App.java | 12 +- .../client/WebSocketClientHandler.java | 4 +- .../websocketx/client/WebSocketException.java | 8 +- .../server/WebSocketServerHandler.java | 2 +- .../server/WebSocketServerIndexPage.java | 6 +- .../sslserver/WebSocketSslServerHandler.java | 2 +- .../WebSocketSslServerIndexPage.java | 6 +- .../WebSocketSslServerSslContext.java | 2 +- .../websocketx/sslserver/package-info.java | 23 +- .../io/netty/example/iostream/IOStream.java | 107 +- .../local/LocalExampleMultthreaded.java | 4 +- .../local/LocalServerPipelineFactory.java | 2 +- .../io/netty/example/proxy/HexDumpProxy.java | 14 + .../netty/example/sctp/SctpClientHandler.java | 12 +- .../securechat/SecureChatKeyStore.java | 2 +- .../SecureChatSslContextFactory.java | 6 +- .../example/uptime/UptimeClientHandler.java | 3 +- .../handler/execution/ChainedExecutor.java | 14 +- .../ChannelDownstreamEventRunnable.java | 2 +- .../execution/ChannelEventRunnable.java | 2 +- .../OrderedMemoryAwareThreadPoolExecutor.java | 2 +- .../ChannelDownstreamEventRunnableFilter.java | 2 +- .../filter/ChannelEventRunnableFilter.java | 4 +- .../ChannelUpstreamEventRunnableFilter.java | 2 +- .../java/io/netty/handler/ipfilter/CIDR.java | 422 +++--- .../java/io/netty/handler/ipfilter/CIDR4.java | 278 ++-- .../java/io/netty/handler/ipfilter/CIDR6.java | 275 ++-- .../handler/ipfilter/IpFilterListener.java | 78 +- .../netty/handler/ipfilter/IpFilterRule.java | 21 +- .../handler/ipfilter/IpFilterRuleHandler.java | 427 +++--- .../handler/ipfilter/IpFilterRuleList.java | 85 +- .../handler/ipfilter/IpFilteringHandler.java | 23 +- .../ipfilter/IpFilteringHandlerImpl.java | 279 ++-- .../java/io/netty/handler/ipfilter/IpSet.java | 23 +- .../io/netty/handler/ipfilter/IpSubnet.java | 227 ++- .../handler/ipfilter/IpSubnetFilterRule.java | 90 +- .../io/netty/handler/ipfilter/IpV4Subnet.java | 464 +++---- .../ipfilter/IpV4SubnetFilterRule.java | 92 +- .../handler/ipfilter/OneIpFilterHandler.java | 76 +- .../netty/handler/ipfilter/PatternRule.java | 268 ++-- .../region/ChannelWritableByteChannel.java | 5 +- .../handler/region/FileRegionEncoder.java | 2 +- .../java/io/netty/handler/ssl/SslHandler.java | 2 +- .../AbstractTrafficShapingHandler.java | 18 +- .../traffic/ChannelTrafficShapingHandler.java | 2 +- .../traffic/GlobalTrafficShapingHandler.java | 2 +- .../netty/handler/traffic/TrafficCounter.java | 26 +- .../netty/handler/traffic/package-info.java | 4 +- pom.xml | 26 + testsuite/pom.xml | 10 + .../socket/AbstractSocketSslEchoTest.java | 6 +- .../http/HttpTunnelAcceptedChannel.java | 2 +- .../HttpTunnelAcceptedChannelFactory.java | 2 +- .../socket/http/HttpTunnelClientChannel.java | 2 +- .../http/HttpTunnelClientSendHandler.java | 2 +- .../http/HttpTunnelClientWorkerOwner.java | 2 +- .../socket/http/HttpTunnelMessageUtils.java | 6 +- .../socket/http/HttpTunnelServerChannel.java | 2 +- ...erverMessageSwitchDownstreamInterface.java | 2 +- .../ServerMessageSwitchUpstreamInterface.java | 2 +- .../channel/socket/http/WriteSplitter.java | 5 +- .../netty/channel/rxtx/RXTXChannelConfig.java | 4 +- .../netty/channel/rxtx/RXTXChannelSink.java | 2 +- .../netty/channel/sctp/SctpChannelImpl.java | 30 +- .../netty/channel/sctp/SctpClientChannel.java | 15 +- .../channel/sctp/SctpClientPipelineSink.java | 20 +- .../channel/sctp/SctpNotificationHandler.java | 9 +- .../channel/sctp/SctpProviderMetadata.java | 2 +- .../channel/sctp/SctpReceiveBufferPool.java | 10 +- .../channel/sctp/SctpSendBufferPool.java | 18 +- .../channel/sctp/SctpServerChannelImpl.java | 16 +- .../channel/sctp/SctpServerPipelineSink.java | 27 +- .../io/netty/channel/sctp/SctpWorker.java | 33 +- .../io/netty/channel/sctp/SelectorUtil.java | 6 +- .../java/io/netty/bootstrap/Bootstrap.java | 2 +- .../java/io/netty/channel/ChannelEvent.java | 2 +- .../channel/ChannelFutureAggregator.java | 4 +- .../netty/channel/ChannelHandlerContext.java | 2 +- .../io/netty/channel/ChannelPipeline.java | 6 +- .../main/java/io/netty/channel/Channels.java | 2 +- .../channel/iostream/IOStreamAddress.java | 2 - .../channel/iostream/IOStreamChannel.java | 9 +- .../channel/iostream/IOStreamChannelSink.java | 16 +- .../channel/local/DefaultLocalChannel.java | 6 +- .../io/netty/channel/local/LocalAddress.java | 2 +- .../channel/local/LocalClientChannelSink.java | 3 +- .../channel/local/LocalServerChannelSink.java | 3 +- .../socket/nio/AbstractWriteRequestQueue.java | 2 +- .../nio/NioClientSocketChannelFactory.java | 4 +- .../nio/NioClientSocketPipelineSink.java | 6 +- .../socket/nio/NioDatagramChannel.java | 2 +- .../socket/nio/NioProviderMetadata.java | 2 +- .../socket/nio/NioServerSocketChannel.java | 2 +- .../channel/socket/nio/SelectorUtil.java | 4 + .../socket/nio/SocketReceiveBufferPool.java | 2 +- .../socket/nio/SocketSendBufferPool.java | 2 +- .../socket/oio/OioAcceptedSocketChannel.java | 2 +- .../socket/oio/OioClientSocketChannel.java | 2 +- .../socket/oio/OioServerSocketChannel.java | 2 +- 188 files changed, 3219 insertions(+), 3061 deletions(-) create mode 100644 build/pom.xml create mode 100644 build/src/main/java/io/netty/build/checkstyle/SuppressionFilter.java create mode 100644 build/src/main/resources/io/netty/LICENSE.txt create mode 100644 build/src/main/resources/io/netty/checkstyle.xml diff --git a/.gitignore b/.gitignore index a490df6613..00ec325140 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,7 @@ *.ipr *.iws .geany -*/target +/target */target /reports */reports diff --git a/buffer/src/main/java/io/netty/buffer/AbstractChannelBuffer.java b/buffer/src/main/java/io/netty/buffer/AbstractChannelBuffer.java index 0350163627..76789fae35 100644 --- a/buffer/src/main/java/io/netty/buffer/AbstractChannelBuffer.java +++ b/buffer/src/main/java/io/netty/buffer/AbstractChannelBuffer.java @@ -135,7 +135,7 @@ public abstract class AbstractChannelBuffer implements ChannelBuffer { @Override public boolean getBoolean(int index) { - return (getByte(index) == 1); + return getByte(index) != 0; } @Override @@ -278,7 +278,7 @@ public abstract class AbstractChannelBuffer implements ChannelBuffer { @Override public boolean readBoolean() { - return (readByte() == 1); + return readByte() != 0; } @Override diff --git a/buffer/src/main/java/io/netty/buffer/BigEndianHeapChannelBuffer.java b/buffer/src/main/java/io/netty/buffer/BigEndianHeapChannelBuffer.java index 4ba94b8609..854749987f 100644 --- a/buffer/src/main/java/io/netty/buffer/BigEndianHeapChannelBuffer.java +++ b/buffer/src/main/java/io/netty/buffer/BigEndianHeapChannelBuffer.java @@ -59,67 +59,67 @@ public class BigEndianHeapChannelBuffer extends HeapChannelBuffer { @Override public short getShort(int index) { - return (short) (array[index] << 8 | array[index+1] & 0xFF); + return (short) (array[index] << 8 | array[index + 1] & 0xFF); } @Override public int getUnsignedMedium(int index) { - return (array[index] & 0xff) << 16 | - (array[index+1] & 0xff) << 8 | - (array[index+2] & 0xff) << 0; + return (array[index] & 0xff) << 16 | + (array[index + 1] & 0xff) << 8 | + (array[index + 2] & 0xff) << 0; } @Override public int getInt(int index) { - return (array[index] & 0xff) << 24 | - (array[index+1] & 0xff) << 16 | - (array[index+2] & 0xff) << 8 | - (array[index+3] & 0xff) << 0; + return (array[index] & 0xff) << 24 | + (array[index + 1] & 0xff) << 16 | + (array[index + 2] & 0xff) << 8 | + (array[index + 3] & 0xff) << 0; } @Override public long getLong(int index) { - return ((long) array[index] & 0xff) << 56 | - ((long) array[index+1] & 0xff) << 48 | - ((long) array[index+2] & 0xff) << 40 | - ((long) array[index+3] & 0xff) << 32 | - ((long) array[index+4] & 0xff) << 24 | - ((long) array[index+5] & 0xff) << 16 | - ((long) array[index+6] & 0xff) << 8 | - ((long) array[index+7] & 0xff) << 0; + return ((long) array[index] & 0xff) << 56 | + ((long) array[index + 1] & 0xff) << 48 | + ((long) array[index + 2] & 0xff) << 40 | + ((long) array[index + 3] & 0xff) << 32 | + ((long) array[index + 4] & 0xff) << 24 | + ((long) array[index + 5] & 0xff) << 16 | + ((long) array[index + 6] & 0xff) << 8 | + ((long) array[index + 7] & 0xff) << 0; } @Override public void setShort(int index, int value) { - array[index ] = (byte) (value >>> 8); - array[index+1] = (byte) (value >>> 0); + array[index] = (byte) (value >>> 8); + array[index + 1] = (byte) (value >>> 0); } @Override public void setMedium(int index, int value) { - array[index ] = (byte) (value >>> 16); - array[index+1] = (byte) (value >>> 8); - array[index+2] = (byte) (value >>> 0); + array[index] = (byte) (value >>> 16); + array[index + 1] = (byte) (value >>> 8); + array[index + 2] = (byte) (value >>> 0); } @Override public void setInt(int index, int value) { - array[index ] = (byte) (value >>> 24); - array[index+1] = (byte) (value >>> 16); - array[index+2] = (byte) (value >>> 8); - array[index+3] = (byte) (value >>> 0); + array[index] = (byte) (value >>> 24); + array[index + 1] = (byte) (value >>> 16); + array[index + 2] = (byte) (value >>> 8); + array[index + 3] = (byte) (value >>> 0); } @Override public void setLong(int index, long value) { - array[index ] = (byte) (value >>> 56); - array[index+1] = (byte) (value >>> 48); - array[index+2] = (byte) (value >>> 40); - array[index+3] = (byte) (value >>> 32); - array[index+4] = (byte) (value >>> 24); - array[index+5] = (byte) (value >>> 16); - array[index+6] = (byte) (value >>> 8); - array[index+7] = (byte) (value >>> 0); + array[index] = (byte) (value >>> 56); + array[index + 1] = (byte) (value >>> 48); + array[index + 2] = (byte) (value >>> 40); + array[index + 3] = (byte) (value >>> 32); + array[index + 4] = (byte) (value >>> 24); + array[index + 5] = (byte) (value >>> 16); + array[index + 6] = (byte) (value >>> 8); + array[index + 7] = (byte) (value >>> 0); } @Override diff --git a/buffer/src/main/java/io/netty/buffer/ByteBufferBackedChannelBuffer.java b/buffer/src/main/java/io/netty/buffer/ByteBufferBackedChannelBuffer.java index 80008af030..9e99c206e3 100644 --- a/buffer/src/main/java/io/netty/buffer/ByteBufferBackedChannelBuffer.java +++ b/buffer/src/main/java/io/netty/buffer/ByteBufferBackedChannelBuffer.java @@ -107,9 +107,9 @@ public class ByteBufferBackedChannelBuffer extends AbstractChannelBuffer { @Override public int getUnsignedMedium(int index) { - return (getByte(index) & 0xff) << 16 | - (getByte(index+1) & 0xff) << 8 | - (getByte(index+2) & 0xff) << 0; + return (getByte(index) & 0xff) << 16 | + (getByte(index + 1) & 0xff) << 8 | + (getByte(index + 2) & 0xff) << 0; } @Override @@ -172,9 +172,9 @@ public class ByteBufferBackedChannelBuffer extends AbstractChannelBuffer { @Override public void setMedium(int index, int value) { - setByte(index, (byte) (value >>> 16)); - setByte(index+1, (byte) (value >>> 8)); - setByte(index+2, (byte) (value >>> 0)); + setByte(index, (byte) (value >>> 16)); + setByte(index + 1, (byte) (value >>> 8)); + setByte(index + 2, (byte) (value >>> 0)); } @Override diff --git a/buffer/src/main/java/io/netty/buffer/ChannelBuffer.java b/buffer/src/main/java/io/netty/buffer/ChannelBuffer.java index 3c06f9a1fa..bda2401971 100644 --- a/buffer/src/main/java/io/netty/buffer/ChannelBuffer.java +++ b/buffer/src/main/java/io/netty/buffer/ChannelBuffer.java @@ -47,7 +47,7 @@ import java.nio.charset.UnsupportedCharsetException; * *
  * {@link ChannelBuffer} buffer = ...;
- * for (int i = 0; i < buffer.capacity(); i ++) {
+ * for (int i = 0; i < buffer.capacity(); i ++) {
  *     byte b = buffer.getByte(i);
  *     System.out.println((char) b);
  * }
diff --git a/buffer/src/main/java/io/netty/buffer/ChannelBuffers.java b/buffer/src/main/java/io/netty/buffer/ChannelBuffers.java
index fd4df8a3d7..5f540b0a8f 100644
--- a/buffer/src/main/java/io/netty/buffer/ChannelBuffers.java
+++ b/buffer/src/main/java/io/netty/buffer/ChannelBuffers.java
@@ -84,7 +84,7 @@ import io.netty.util.CharsetUtil;
  * @apiviz.landmark
  * @apiviz.has io.netty.buffer.ChannelBuffer oneway - - creates
  */
-public class ChannelBuffers {
+public final class ChannelBuffers {
 
     /**
      * Big endian byte order.
@@ -307,7 +307,11 @@ public class ChannelBuffers {
             return EMPTY_BUFFER;
         }
         if (buffer.hasArray()) {
-            return wrappedBuffer(buffer.order(), buffer.array(), buffer.arrayOffset() + buffer.position(),buffer.remaining());
+            return wrappedBuffer(
+                    buffer.order(),
+                    buffer.array(),
+                    buffer.arrayOffset() + buffer.position(),
+                    buffer.remaining());
         } else {
             return new ByteBufferBackedChannelBuffer(buffer);
         }
diff --git a/buffer/src/main/java/io/netty/buffer/CompositeChannelBuffer.java b/buffer/src/main/java/io/netty/buffer/CompositeChannelBuffer.java
index 3fdefca805..e960ffab18 100644
--- a/buffer/src/main/java/io/netty/buffer/CompositeChannelBuffer.java
+++ b/buffer/src/main/java/io/netty/buffer/CompositeChannelBuffer.java
@@ -347,7 +347,7 @@ public class CompositeChannelBuffer extends AbstractChannelBuffer {
             setByte(index + 2, (byte) value);
         } else {
             setShort(index    , (short) value);
-            setByte (index + 2, (byte) (value >>> 16));
+            setByte(index + 2, (byte) (value >>> 16));
         }
     }
 
diff --git a/buffer/src/main/java/io/netty/buffer/DirectChannelBufferFactory.java b/buffer/src/main/java/io/netty/buffer/DirectChannelBufferFactory.java
index 688614f39b..b86a2f71b0 100644
--- a/buffer/src/main/java/io/netty/buffer/DirectChannelBufferFactory.java
+++ b/buffer/src/main/java/io/netty/buffer/DirectChannelBufferFactory.java
@@ -57,9 +57,9 @@ public class DirectChannelBufferFactory extends AbstractChannelBufferFactory {
     private final Object bigEndianLock = new Object();
     private final Object littleEndianLock = new Object();
     private final int preallocatedBufferCapacity;
-    private ChannelBuffer preallocatedBigEndianBuffer = null;
+    private ChannelBuffer preallocatedBigEndianBuffer;
     private int preallocatedBigEndianBufferPosition;
-    private ChannelBuffer preallocatedLittleEndianBuffer = null;
+    private ChannelBuffer preallocatedLittleEndianBuffer;
     private int preallocatedLittleEndianBufferPosition;
 
     /**
diff --git a/buffer/src/main/java/io/netty/buffer/LittleEndianHeapChannelBuffer.java b/buffer/src/main/java/io/netty/buffer/LittleEndianHeapChannelBuffer.java
index 5b097337a6..399cb49afc 100644
--- a/buffer/src/main/java/io/netty/buffer/LittleEndianHeapChannelBuffer.java
+++ b/buffer/src/main/java/io/netty/buffer/LittleEndianHeapChannelBuffer.java
@@ -59,67 +59,67 @@ public class LittleEndianHeapChannelBuffer extends HeapChannelBuffer {
 
     @Override
     public short getShort(int index) {
-        return (short) (array[index] & 0xFF | array[index+1] << 8);
+        return (short) (array[index] & 0xFF | array[index + 1] << 8);
     }
 
     @Override
     public int getUnsignedMedium(int index) {
-        return (array[index  ] & 0xff) <<  0 |
-               (array[index+1] & 0xff) <<  8 |
-               (array[index+2] & 0xff) << 16;
+        return (array[index]     & 0xff) <<  0 |
+               (array[index + 1] & 0xff) <<  8 |
+               (array[index + 2] & 0xff) << 16;
     }
 
     @Override
     public int getInt(int index) {
-        return (array[index  ] & 0xff) <<  0 |
-               (array[index+1] & 0xff) <<  8 |
-               (array[index+2] & 0xff) << 16 |
-               (array[index+3] & 0xff) << 24;
+        return (array[index]     & 0xff) <<  0 |
+               (array[index + 1] & 0xff) <<  8 |
+               (array[index + 2] & 0xff) << 16 |
+               (array[index + 3] & 0xff) << 24;
     }
 
     @Override
     public long getLong(int index) {
-        return ((long) array[index]   & 0xff) <<  0 |
-               ((long) array[index+1] & 0xff) <<  8 |
-               ((long) array[index+2] & 0xff) << 16 |
-               ((long) array[index+3] & 0xff) << 24 |
-               ((long) array[index+4] & 0xff) << 32 |
-               ((long) array[index+5] & 0xff) << 40 |
-               ((long) array[index+6] & 0xff) << 48 |
-               ((long) array[index+7] & 0xff) << 56;
+        return ((long) array[index]     & 0xff) <<  0 |
+               ((long) array[index + 1] & 0xff) <<  8 |
+               ((long) array[index + 2] & 0xff) << 16 |
+               ((long) array[index + 3] & 0xff) << 24 |
+               ((long) array[index + 4] & 0xff) << 32 |
+               ((long) array[index + 5] & 0xff) << 40 |
+               ((long) array[index + 6] & 0xff) << 48 |
+               ((long) array[index + 7] & 0xff) << 56;
     }
 
     @Override
     public void setShort(int index, int value) {
-        array[index  ] = (byte) (value >>> 0);
-        array[index+1] = (byte) (value >>> 8);
+        array[index]     = (byte) (value >>> 0);
+        array[index + 1] = (byte) (value >>> 8);
     }
 
     @Override
     public void setMedium(int index, int   value) {
-        array[index  ] = (byte) (value >>> 0);
-        array[index+1] = (byte) (value >>> 8);
-        array[index+2] = (byte) (value >>> 16);
+        array[index]     = (byte) (value >>> 0);
+        array[index + 1] = (byte) (value >>> 8);
+        array[index + 2] = (byte) (value >>> 16);
     }
 
     @Override
     public void setInt(int index, int   value) {
-        array[index  ] = (byte) (value >>> 0);
-        array[index+1] = (byte) (value >>> 8);
-        array[index+2] = (byte) (value >>> 16);
-        array[index+3] = (byte) (value >>> 24);
+        array[index]     = (byte) (value >>> 0);
+        array[index + 1] = (byte) (value >>> 8);
+        array[index + 2] = (byte) (value >>> 16);
+        array[index + 3] = (byte) (value >>> 24);
     }
 
     @Override
     public void setLong(int index, long  value) {
-        array[index  ] = (byte) (value >>> 0);
-        array[index+1] = (byte) (value >>> 8);
-        array[index+2] = (byte) (value >>> 16);
-        array[index+3] = (byte) (value >>> 24);
-        array[index+4] = (byte) (value >>> 32);
-        array[index+5] = (byte) (value >>> 40);
-        array[index+6] = (byte) (value >>> 48);
-        array[index+7] = (byte) (value >>> 56);
+        array[index]     = (byte) (value >>> 0);
+        array[index + 1] = (byte) (value >>> 8);
+        array[index + 2] = (byte) (value >>> 16);
+        array[index + 3] = (byte) (value >>> 24);
+        array[index + 4] = (byte) (value >>> 32);
+        array[index + 5] = (byte) (value >>> 40);
+        array[index + 6] = (byte) (value >>> 48);
+        array[index + 7] = (byte) (value >>> 56);
     }
 
     @Override
diff --git a/buffer/src/test/java/io/netty/buffer/AbstractChannelBufferTest.java b/buffer/src/test/java/io/netty/buffer/AbstractChannelBufferTest.java
index 62904c15ae..8e3df60f54 100644
--- a/buffer/src/test/java/io/netty/buffer/AbstractChannelBufferTest.java
+++ b/buffer/src/test/java/io/netty/buffer/AbstractChannelBufferTest.java
@@ -69,7 +69,7 @@ public abstract class AbstractChannelBufferTest {
         assertEquals(0, buffer.readerIndex());
     }
 
-    @Test(expected=IndexOutOfBoundsException.class)
+    @Test(expected = IndexOutOfBoundsException.class)
     public void readerIndexBoundaryCheck1() {
         try {
             buffer.writerIndex(0);
@@ -79,7 +79,7 @@ public abstract class AbstractChannelBufferTest {
         buffer.readerIndex(-1);
     }
 
-    @Test(expected=IndexOutOfBoundsException.class)
+    @Test(expected = IndexOutOfBoundsException.class)
     public void readerIndexBoundaryCheck2() {
         try {
             buffer.writerIndex(buffer.capacity());
@@ -89,7 +89,7 @@ public abstract class AbstractChannelBufferTest {
         buffer.readerIndex(buffer.capacity() + 1);
     }
 
-    @Test(expected=IndexOutOfBoundsException.class)
+    @Test(expected = IndexOutOfBoundsException.class)
     public void readerIndexBoundaryCheck3() {
         try {
             buffer.writerIndex(CAPACITY / 2);
@@ -107,12 +107,12 @@ public abstract class AbstractChannelBufferTest {
         buffer.readerIndex(buffer.capacity());
     }
 
-    @Test(expected=IndexOutOfBoundsException.class)
+    @Test(expected = IndexOutOfBoundsException.class)
     public void writerIndexBoundaryCheck1() {
         buffer.writerIndex(-1);
     }
 
-    @Test(expected=IndexOutOfBoundsException.class)
+    @Test(expected = IndexOutOfBoundsException.class)
     public void writerIndexBoundaryCheck2() {
         try {
             buffer.writerIndex(CAPACITY);
@@ -123,7 +123,7 @@ public abstract class AbstractChannelBufferTest {
         buffer.writerIndex(buffer.capacity() + 1);
     }
 
-    @Test(expected=IndexOutOfBoundsException.class)
+    @Test(expected = IndexOutOfBoundsException.class)
     public void writerIndexBoundaryCheck3() {
         try {
             buffer.writerIndex(CAPACITY);
@@ -141,72 +141,72 @@ public abstract class AbstractChannelBufferTest {
         buffer.writerIndex(CAPACITY);
     }
     
-    @Test(expected=IndexOutOfBoundsException.class)
+    @Test(expected = IndexOutOfBoundsException.class)
     public void getBooleanBoundaryCheck1() {
         buffer.getBoolean(-1);
     }
 
-    @Test(expected=IndexOutOfBoundsException.class)
+    @Test(expected = IndexOutOfBoundsException.class)
     public void getBooleanBoundaryCheck2() {
         buffer.getBoolean(buffer.capacity());
     }
 
-    @Test(expected=IndexOutOfBoundsException.class)
+    @Test(expected = IndexOutOfBoundsException.class)
     public void getByteBoundaryCheck1() {
         buffer.getByte(-1);
     }
 
-    @Test(expected=IndexOutOfBoundsException.class)
+    @Test(expected = IndexOutOfBoundsException.class)
     public void getByteBoundaryCheck2() {
         buffer.getByte(buffer.capacity());
     }
 
-    @Test(expected=IndexOutOfBoundsException.class)
+    @Test(expected = IndexOutOfBoundsException.class)
     public void getShortBoundaryCheck1() {
         buffer.getShort(-1);
     }
 
-    @Test(expected=IndexOutOfBoundsException.class)
+    @Test(expected = IndexOutOfBoundsException.class)
     public void getShortBoundaryCheck2() {
         buffer.getShort(buffer.capacity() - 1);
     }
 
-    @Test(expected=IndexOutOfBoundsException.class)
+    @Test(expected = IndexOutOfBoundsException.class)
     public void getMediumBoundaryCheck1() {
         buffer.getMedium(-1);
     }
 
-    @Test(expected=IndexOutOfBoundsException.class)
+    @Test(expected = IndexOutOfBoundsException.class)
     public void getMediumBoundaryCheck2() {
         buffer.getMedium(buffer.capacity() - 2);
     }
 
-    @Test(expected=IndexOutOfBoundsException.class)
+    @Test(expected = IndexOutOfBoundsException.class)
     public void getIntBoundaryCheck1() {
         buffer.getInt(-1);
     }
 
-    @Test(expected=IndexOutOfBoundsException.class)
+    @Test(expected = IndexOutOfBoundsException.class)
     public void getIntBoundaryCheck2() {
         buffer.getInt(buffer.capacity() - 3);
     }
 
-    @Test(expected=IndexOutOfBoundsException.class)
+    @Test(expected = IndexOutOfBoundsException.class)
     public void getLongBoundaryCheck1() {
         buffer.getLong(-1);
     }
 
-    @Test(expected=IndexOutOfBoundsException.class)
+    @Test(expected = IndexOutOfBoundsException.class)
     public void getLongBoundaryCheck2() {
         buffer.getLong(buffer.capacity() - 7);
     }
 
-    @Test(expected=IndexOutOfBoundsException.class)
+    @Test(expected = IndexOutOfBoundsException.class)
     public void getByteArrayBoundaryCheck1() {
         buffer.getBytes(-1, new byte[0]);
     }
 
-    @Test(expected=IndexOutOfBoundsException.class)
+    @Test(expected = IndexOutOfBoundsException.class)
     public void getByteArrayBoundaryCheck2() {
         buffer.getBytes(-1, new byte[0], 0, 0);
     }
@@ -247,42 +247,42 @@ public abstract class AbstractChannelBufferTest {
         assertEquals(0, dst[3]);
     }
 
-    @Test(expected=IndexOutOfBoundsException.class)
+    @Test(expected = IndexOutOfBoundsException.class)
     public void getByteBufferBoundaryCheck() {
         buffer.getBytes(-1, ByteBuffer.allocate(0));
     }
 
-    @Test(expected=IndexOutOfBoundsException.class)
+    @Test(expected = IndexOutOfBoundsException.class)
     public void copyBoundaryCheck1() {
         buffer.copy(-1, 0);
     }
 
-    @Test(expected=IndexOutOfBoundsException.class)
+    @Test(expected = IndexOutOfBoundsException.class)
     public void copyBoundaryCheck2() {
         buffer.copy(0, buffer.capacity() + 1);
     }
 
-    @Test(expected=IndexOutOfBoundsException.class)
+    @Test(expected = IndexOutOfBoundsException.class)
     public void copyBoundaryCheck3() {
         buffer.copy(buffer.capacity() + 1, 0);
     }
 
-    @Test(expected=IndexOutOfBoundsException.class)
+    @Test(expected = IndexOutOfBoundsException.class)
     public void copyBoundaryCheck4() {
         buffer.copy(buffer.capacity(), 1);
     }
 
-    @Test(expected=IndexOutOfBoundsException.class)
+    @Test(expected = IndexOutOfBoundsException.class)
     public void setIndexBoundaryCheck1() {
         buffer.setIndex(-1, CAPACITY);
     }
 
-    @Test(expected=IndexOutOfBoundsException.class)
+    @Test(expected = IndexOutOfBoundsException.class)
     public void setIndexBoundaryCheck2() {
         buffer.setIndex(CAPACITY / 2, CAPACITY / 4);
     }
 
-    @Test(expected=IndexOutOfBoundsException.class)
+    @Test(expected = IndexOutOfBoundsException.class)
     public void setIndexBoundaryCheck3() {
         buffer.setIndex(0, CAPACITY + 1);
     }
@@ -309,7 +309,7 @@ public abstract class AbstractChannelBufferTest {
         assertEquals(0, dst.get(3));
     }
 
-    @Test(expected=IndexOutOfBoundsException.class)
+    @Test(expected = IndexOutOfBoundsException.class)
     public void getDirectByteBufferBoundaryCheck() {
         buffer.getBytes(-1, ByteBuffer.allocateDirect(0));
     }
@@ -754,7 +754,7 @@ public abstract class AbstractChannelBufferTest {
 
     @Test
     public void testRandomByteArrayTransfer1() {
-        byte[] value= new byte[BLOCK_SIZE];
+        byte[] value = new byte[BLOCK_SIZE];
         for (int i = 0; i < buffer.capacity() - BLOCK_SIZE + 1; i += BLOCK_SIZE) {
             random.nextBytes(value);
             buffer.setBytes(i, value);
@@ -774,7 +774,7 @@ public abstract class AbstractChannelBufferTest {
 
     @Test
     public void testRandomByteArrayTransfer2() {
-        byte[] value= new byte[BLOCK_SIZE * 2];
+        byte[] value = new byte[BLOCK_SIZE * 2];
         for (int i = 0; i < buffer.capacity() - BLOCK_SIZE + 1; i += BLOCK_SIZE) {
             random.nextBytes(value);
             buffer.setBytes(i, value, random.nextInt(BLOCK_SIZE), BLOCK_SIZE);
@@ -891,7 +891,7 @@ public abstract class AbstractChannelBufferTest {
 
     @Test
     public void testSequentialByteArrayTransfer1() {
-        byte[] value= new byte[BLOCK_SIZE];
+        byte[] value = new byte[BLOCK_SIZE];
         buffer.writerIndex(0);
         for (int i = 0; i < buffer.capacity() - BLOCK_SIZE + 1; i += BLOCK_SIZE) {
             random.nextBytes(value);
@@ -926,7 +926,7 @@ public abstract class AbstractChannelBufferTest {
         }
 
         random.setSeed(seed);
-        byte[] expectedValue= new byte[BLOCK_SIZE * 2];
+        byte[] expectedValue = new byte[BLOCK_SIZE * 2];
         for (int i = 0; i < buffer.capacity() - BLOCK_SIZE + 1; i += BLOCK_SIZE) {
             random.nextBytes(expectedValue);
             int valueOffset = random.nextInt(BLOCK_SIZE);
diff --git a/buffer/src/test/java/io/netty/buffer/AbstractCompositeChannelBufferTest.java b/buffer/src/test/java/io/netty/buffer/AbstractCompositeChannelBufferTest.java
index ae016cce0a..597ded9905 100644
--- a/buffer/src/test/java/io/netty/buffer/AbstractCompositeChannelBufferTest.java
+++ b/buffer/src/test/java/io/netty/buffer/AbstractCompositeChannelBufferTest.java
@@ -102,16 +102,16 @@ public abstract class AbstractCompositeChannelBufferTest extends
         b.skipBytes(6);
         b.markReaderIndex();
         assertEquals(a.readerIndex(), b.readerIndex());
-        a.readerIndex(a.readerIndex()-1);
-        b.readerIndex(b.readerIndex()-1);
+        a.readerIndex(a.readerIndex() - 1);
+        b.readerIndex(b.readerIndex() - 1);
         assertEquals(a.readerIndex(), b.readerIndex());
-        a.writerIndex(a.writerIndex()-1);
+        a.writerIndex(a.writerIndex() - 1);
         a.markWriterIndex();
-        b.writerIndex(b.writerIndex()-1);
+        b.writerIndex(b.writerIndex() - 1);
         b.markWriterIndex();
         assertEquals(a.writerIndex(), b.writerIndex());
-        a.writerIndex(a.writerIndex()+1);
-        b.writerIndex(b.writerIndex()+1);
+        a.writerIndex(a.writerIndex() + 1);
+        b.writerIndex(b.writerIndex() + 1);
         assertEquals(a.writerIndex(), b.writerIndex());
         assertTrue(ChannelBuffers.equals(a, b));
         // now discard
@@ -256,7 +256,7 @@ public abstract class AbstractCompositeChannelBufferTest extends
         a = wrappedBuffer(order, new byte[] { 1  });
         b = wrappedBuffer(wrappedBuffer(order, new byte[] { 1 }, new byte[1]));
         // to enable writeBytes
-        b.writerIndex(b.writerIndex()-1);
+        b.writerIndex(b.writerIndex() - 1);
         b.writeBytes(
                 wrappedBuffer(order, new byte[] { 2 }));
         assertFalse(ChannelBuffers.equals(a, b));
@@ -265,7 +265,7 @@ public abstract class AbstractCompositeChannelBufferTest extends
         a = wrappedBuffer(order, new byte[] { 1, 2, 3 });
         b = wrappedBuffer(wrappedBuffer(order, new byte[] { 1 }, new byte[2]));
         // to enable writeBytes
-        b.writerIndex(b.writerIndex()-2);
+        b.writerIndex(b.writerIndex() - 2);
         b.writeBytes(
                 wrappedBuffer(order, new byte[] { 2 }));
         b.writeBytes(wrappedBuffer(order, new byte[] { 3 }));
@@ -275,7 +275,7 @@ public abstract class AbstractCompositeChannelBufferTest extends
         a = wrappedBuffer(order, new byte[] { 1, 2, 3 });
         b = wrappedBuffer(wrappedBuffer(order, new byte[] { 0, 1, 2, 3, 4 }, 1, 3));
         // to enable writeBytes
-        b.writerIndex(b.writerIndex()-1);
+        b.writerIndex(b.writerIndex() - 1);
         b.writeBytes(
                 wrappedBuffer(order, new byte[] { 0, 1, 2, 3, 4 }, 3, 1));
         assertTrue(ChannelBuffers.equals(a, b));
@@ -284,7 +284,7 @@ public abstract class AbstractCompositeChannelBufferTest extends
         a = wrappedBuffer(order, new byte[] { 1, 2, 3 });
         b = wrappedBuffer(wrappedBuffer(order, new byte[] { 1, 2 }, new byte[1]));
         // to enable writeBytes
-        b.writerIndex(b.writerIndex()-1);
+        b.writerIndex(b.writerIndex() - 1);
         b.writeBytes(
                 wrappedBuffer(order, new byte[] { 4 }));
         assertFalse(ChannelBuffers.equals(a, b));
@@ -293,7 +293,7 @@ public abstract class AbstractCompositeChannelBufferTest extends
         a = wrappedBuffer(order, new byte[] { 1, 2, 3 });
         b = wrappedBuffer(wrappedBuffer(order, new byte[] { 0, 1, 2, 4, 5 }, 1, 3));
         // to enable writeBytes
-        b.writerIndex(b.writerIndex()-1);
+        b.writerIndex(b.writerIndex() - 1);
         b.writeBytes(
                 wrappedBuffer(order, new byte[] { 0, 1, 2, 4, 5 }, 3, 1));
         assertFalse(ChannelBuffers.equals(a, b));
@@ -302,7 +302,7 @@ public abstract class AbstractCompositeChannelBufferTest extends
         a = wrappedBuffer(order, new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });
         b = wrappedBuffer(wrappedBuffer(order, new byte[] { 1, 2, 3 }, new byte[7]));
         // to enable writeBytes
-        b.writerIndex(b.writerIndex()-7);
+        b.writerIndex(b.writerIndex() - 7);
         b.writeBytes(
                 wrappedBuffer(order, new byte[] { 4, 5, 6 }));
         b.writeBytes(
@@ -313,7 +313,7 @@ public abstract class AbstractCompositeChannelBufferTest extends
         a = wrappedBuffer(order, new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });
         b = wrappedBuffer(wrappedBuffer(order, new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}, 1, 10));
         // to enable writeBytes
-        b.writerIndex(b.writerIndex()-5);
+        b.writerIndex(b.writerIndex() - 5);
         b.writeBytes(
                 wrappedBuffer(order, new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}, 6, 5));
         assertTrue(ChannelBuffers.equals(a, b));
@@ -322,7 +322,7 @@ public abstract class AbstractCompositeChannelBufferTest extends
         a = wrappedBuffer(order, new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });
         b = wrappedBuffer(wrappedBuffer(order, new byte[] { 1, 2, 3, 4, 6 }, new byte[5]));
         // to enable writeBytes
-        b.writerIndex(b.writerIndex()-5);
+        b.writerIndex(b.writerIndex() - 5);
         b.writeBytes(
                 wrappedBuffer(order, new byte[] { 7, 8, 5, 9, 10 }));
         assertFalse(ChannelBuffers.equals(a, b));
@@ -331,7 +331,7 @@ public abstract class AbstractCompositeChannelBufferTest extends
         a = wrappedBuffer(order, new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });
         b = wrappedBuffer(wrappedBuffer(order, new byte[] { 0, 1, 2, 3, 4, 6, 7, 8, 5, 9, 10, 11 }, 1, 10));
         // to enable writeBytes
-        b.writerIndex(b.writerIndex()-5);
+        b.writerIndex(b.writerIndex() - 5);
         b.writeBytes(
                 wrappedBuffer(order, new byte[] { 0, 1, 2, 3, 4, 6, 7, 8, 5, 9, 10, 11 }, 6, 5));
         assertFalse(ChannelBuffers.equals(a, b));
diff --git a/build/pom.xml b/build/pom.xml
new file mode 100644
index 0000000000..74f3f595bf
--- /dev/null
+++ b/build/pom.xml
@@ -0,0 +1,55 @@
+
+
+
+
+  4.0.0
+  
+    io.netty
+    netty-parent
+    4.0.0.Alpha1-SNAPSHOT
+  
+
+  io.netty
+  netty-build
+  1-SNAPSHOT
+  jar
+
+  Netty/Build
+
+  
+    
+      com.puppycrawl.tools
+      checkstyle
+      5.5
+    
+  
+
+  
+    
+      
+        maven-checkstyle-plugin
+        
+          
+            check-style
+            none
+          
+        
+      
+    
+  
+
+
diff --git a/build/src/main/java/io/netty/build/checkstyle/SuppressionFilter.java b/build/src/main/java/io/netty/build/checkstyle/SuppressionFilter.java
new file mode 100644
index 0000000000..86db7aa132
--- /dev/null
+++ b/build/src/main/java/io/netty/build/checkstyle/SuppressionFilter.java
@@ -0,0 +1,23 @@
+package io.netty.build.checkstyle;
+
+import java.util.regex.Pattern;
+
+import com.puppycrawl.tools.checkstyle.api.AuditEvent;
+import com.puppycrawl.tools.checkstyle.api.AutomaticBean;
+import com.puppycrawl.tools.checkstyle.api.Filter;
+import com.puppycrawl.tools.checkstyle.api.FilterSet;
+
+public class SuppressionFilter extends AutomaticBean implements Filter {
+
+    private FilterSet filters = new FilterSet();
+    private Pattern pattern;
+    
+    public void setPattern(String pattern) {
+        this.pattern = Pattern.compile(pattern);
+    }
+
+    @Override
+    public boolean accept(AuditEvent evt) {
+        return !pattern.matcher(evt.getFileName()).find();
+    }
+}
diff --git a/build/src/main/resources/io/netty/LICENSE.txt b/build/src/main/resources/io/netty/LICENSE.txt
new file mode 100644
index 0000000000..d645695673
--- /dev/null
+++ b/build/src/main/resources/io/netty/LICENSE.txt
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/build/src/main/resources/io/netty/checkstyle.xml b/build/src/main/resources/io/netty/checkstyle.xml
new file mode 100644
index 0000000000..2c49ccbde3
--- /dev/null
+++ b/build/src/main/resources/io/netty/checkstyle.xml
@@ -0,0 +1,83 @@
+
+
+
+  
+    
+  
+  
+  
+  
+  
+    
+    
+  
+
+  
+    
+    
+      
+    
+    
+    
+    
+    
+      
+    
+    
+    
+    
+    
+      
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+      
+      
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+      
+    
+    
+    
+    
+      
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+  
+
diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/AbstractDiskHttpData.java b/codec-http/src/main/java/io/netty/handler/codec/http/AbstractDiskHttpData.java
index e25bfaf81b..ebb4290b5d 100644
--- a/codec-http/src/main/java/io/netty/handler/codec/http/AbstractDiskHttpData.java
+++ b/codec-http/src/main/java/io/netty/handler/codec/http/AbstractDiskHttpData.java
@@ -32,14 +32,11 @@ import io.netty.buffer.ChannelBuffers;
  */
 public abstract class AbstractDiskHttpData extends AbstractHttpData {
 
-    protected File file = null;
+    protected File file;
+    private boolean isRenamed;
+    private FileChannel fileChannel;
 
-    private boolean isRenamed = false;
-
-    private FileChannel fileChannel = null;
-
-    public AbstractDiskHttpData(String name, Charset charset, long size)
-            throws NullPointerException, IllegalArgumentException {
+    public AbstractDiskHttpData(String name, Charset charset, long size) {
         super(name, charset, size);
     }
 
@@ -191,7 +188,7 @@ public abstract class AbstractDiskHttpData extends AbstractHttpData {
         file = tempFile();
         FileOutputStream outputStream = new FileOutputStream(file);
         FileChannel localfileChannel = outputStream.getChannel();
-        byte[] bytes = new byte[4096*4];
+        byte[] bytes = new byte[4096 * 4];
         ByteBuffer byteBuffer = ByteBuffer.wrap(bytes);
         int read = inputStream.read(bytes);
         int written = 0;
diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/AbstractHttpData.java b/codec-http/src/main/java/io/netty/handler/codec/http/AbstractHttpData.java
index 3d2b38c9e9..89a5752dd5 100644
--- a/codec-http/src/main/java/io/netty/handler/codec/http/AbstractHttpData.java
+++ b/codec-http/src/main/java/io/netty/handler/codec/http/AbstractHttpData.java
@@ -23,17 +23,12 @@ import java.nio.charset.Charset;
 public abstract class AbstractHttpData implements HttpData {
 
     protected final String name;
-
-    protected long definedSize = 0;
-
-    protected long size = 0;
-
+    protected long definedSize;
+    protected long size;
     protected Charset charset = HttpCodecUtil.DEFAULT_CHARSET;
+    protected boolean completed;
 
-    protected boolean completed = false;
-
-    public AbstractHttpData(String name, Charset charset, long size)
-    throws NullPointerException, IllegalArgumentException {
+    public AbstractHttpData(String name, Charset charset, long size) {
         if (name == null) {
             throw new NullPointerException("name");
         }
diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/AbstractMemoryHttpData.java b/codec-http/src/main/java/io/netty/handler/codec/http/AbstractMemoryHttpData.java
index 7a324a257a..bdd24455f3 100644
--- a/codec-http/src/main/java/io/netty/handler/codec/http/AbstractMemoryHttpData.java
+++ b/codec-http/src/main/java/io/netty/handler/codec/http/AbstractMemoryHttpData.java
@@ -32,14 +32,11 @@ import io.netty.buffer.ChannelBuffers;
  */
 public abstract class AbstractMemoryHttpData extends AbstractHttpData {
 
-    private ChannelBuffer channelBuffer = null;
+    private ChannelBuffer channelBuffer;
+    private int chunkPosition;
+    protected boolean isRenamed;
 
-    private int chunkPosition = 0;
-
-    protected boolean isRenamed = false;
-
-    public AbstractMemoryHttpData(String name, Charset charset, long size)
-            throws NullPointerException, IllegalArgumentException {
+    public AbstractMemoryHttpData(String name, Charset charset, long size) {
         super(name, charset, size);
     }
 
@@ -64,7 +61,7 @@ public abstract class AbstractMemoryHttpData extends AbstractHttpData {
             throw new NullPointerException("inputStream");
         }
         ChannelBuffer buffer = ChannelBuffers.dynamicBuffer();
-        byte[] bytes = new byte[4096*4];
+        byte[] bytes = new byte[4096 * 4];
         int read = inputStream.read(bytes);
         int written = 0;
         while (read > 0) {
diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/CookieDecoder.java b/codec-http/src/main/java/io/netty/handler/codec/http/CookieDecoder.java
index e6f772abd6..e0c3e83ad2 100644
--- a/codec-http/src/main/java/io/netty/handler/codec/http/CookieDecoder.java
+++ b/codec-http/src/main/java/io/netty/handler/codec/http/CookieDecoder.java
@@ -41,10 +41,10 @@ import java.util.regex.Pattern;
  */
 public class CookieDecoder {
 
-    private final static Pattern PATTERN =
+    private static final Pattern PATTERN =
         Pattern.compile("(?:\\s|[;,])*\\$*([^;=]+)(?:=(?:[\"']((?:\\\\.|[^\"])*)[\"']|([^;,]*)))?(\\s*(?:[;,]+\\s*|$))");
 
-    private final static String COMMA = ",";
+    private static final String COMMA = ",";
 
     private final boolean lenient;
 
diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/CookieEncoder.java b/codec-http/src/main/java/io/netty/handler/codec/http/CookieEncoder.java
index 845e5ac9e4..a8de9a8e46 100644
--- a/codec-http/src/main/java/io/netty/handler/codec/http/CookieEncoder.java
+++ b/codec-http/src/main/java/io/netty/handler/codec/http/CookieEncoder.java
@@ -145,7 +145,7 @@ public class CookieEncoder {
                     addQuoted(sb, CookieHeaderNames.COMMENTURL, cookie.getCommentUrl());
                 }
 
-                if(!cookie.getPorts().isEmpty()) {
+                if (!cookie.getPorts().isEmpty()) {
                     sb.append(CookieHeaderNames.PORT);
                     sb.append((char) HttpCodecUtil.EQUALS);
                     sb.append((char) HttpCodecUtil.DOUBLE_QUOTE);
@@ -189,7 +189,7 @@ public class CookieEncoder {
             }
 
             if (cookie.getVersion() >= 1) {
-                if(!cookie.getPorts().isEmpty()) {
+                if (!cookie.getPorts().isEmpty()) {
                     sb.append('$');
                     sb.append(CookieHeaderNames.PORT);
                     sb.append((char) HttpCodecUtil.EQUALS);
@@ -204,8 +204,10 @@ public class CookieEncoder {
             }
         }
 
-        if(sb.length() > 0)
-        	sb.setLength(sb.length() - 1);
+        if (sb.length() > 0) {
+            sb.setLength(sb.length() - 1);
+        }
+
         return sb.toString();
     }
 
diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/DefaultCookie.java b/codec-http/src/main/java/io/netty/handler/codec/http/DefaultCookie.java
index d724406ed9..eaaa7a8dd3 100644
--- a/codec-http/src/main/java/io/netty/handler/codec/http/DefaultCookie.java
+++ b/codec-http/src/main/java/io/netty/handler/codec/http/DefaultCookie.java
@@ -283,7 +283,7 @@ public class DefaultCookie implements Cookie {
         } else if (that.getDomain() == null) {
             return false;
         }
-	    return getDomain().equalsIgnoreCase(that.getDomain());
+        return getDomain().equalsIgnoreCase(that.getDomain());
     }
 
     @Override
diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/DefaultHttpDataFactory.java b/codec-http/src/main/java/io/netty/handler/codec/http/DefaultHttpDataFactory.java
index ef6feabe45..9d5bc79b12 100644
--- a/codec-http/src/main/java/io/netty/handler/codec/http/DefaultHttpDataFactory.java
+++ b/codec-http/src/main/java/io/netty/handler/codec/http/DefaultHttpDataFactory.java
@@ -35,11 +35,11 @@ public class DefaultHttpDataFactory implements HttpDataFactory {
      */
     public static long MINSIZE = 0x4000;
 
-    private boolean useDisk = false;
+    private boolean useDisk;
 
-    private boolean checkSize = false;
+    private boolean checkSize;
 
-    private long minSize = 0L;
+    private long minSize;
 
     /**
      * Keep all HttpDatas until cleanAllHttpDatas() is called.
@@ -91,8 +91,7 @@ public class DefaultHttpDataFactory implements HttpDataFactory {
     }
     
     @Override
-    public Attribute createAttribute(HttpRequest request, String name) throws NullPointerException,
-            IllegalArgumentException {
+    public Attribute createAttribute(HttpRequest request, String name) {
         if (useDisk) {
             Attribute attribute = new DiskAttribute(name);
             List fileToDelete = getList(request);
@@ -111,8 +110,7 @@ public class DefaultHttpDataFactory implements HttpDataFactory {
      * @see io.netty.handler.codec.http2.HttpDataFactory#createAttribute(java.lang.String, java.lang.String)
      */
     @Override
-    public Attribute createAttribute(HttpRequest request, String name, String value)
-            throws NullPointerException, IllegalArgumentException {
+    public Attribute createAttribute(HttpRequest request, String name, String value) {
         if (useDisk) {
             Attribute attribute;
             try {
@@ -143,7 +141,7 @@ public class DefaultHttpDataFactory implements HttpDataFactory {
     @Override
     public FileUpload createFileUpload(HttpRequest request, String name, String filename,
             String contentType, String contentTransferEncoding, Charset charset,
-            long size) throws NullPointerException, IllegalArgumentException {
+            long size) {
         if (useDisk) {
             FileUpload fileUpload = new DiskFileUpload(name, filename, contentType,
                     contentTransferEncoding, charset, size);
diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/DiskAttribute.java b/codec-http/src/main/java/io/netty/handler/codec/http/DiskAttribute.java
index e85e4caa9c..77072c00eb 100644
--- a/codec-http/src/main/java/io/netty/handler/codec/http/DiskAttribute.java
+++ b/codec-http/src/main/java/io/netty/handler/codec/http/DiskAttribute.java
@@ -24,7 +24,7 @@ import io.netty.buffer.ChannelBuffers;
  * Disk implementation of Attributes
  */
 public class DiskAttribute extends AbstractDiskHttpData implements Attribute {
-    public static String baseDirectory = null;
+    public static String baseDirectory;
 
     public static boolean deleteOnExitTemporaryFile = true;
 
@@ -47,8 +47,7 @@ public class DiskAttribute extends AbstractDiskHttpData implements Attribute {
      * @throws IllegalArgumentException
      * @throws IOException
      */
-    public DiskAttribute(String name, String value)
-            throws NullPointerException, IllegalArgumentException, IOException {
+    public DiskAttribute(String name, String value) throws IOException {
         super(name, HttpCodecUtil.DEFAULT_CHARSET, 0); // Attribute have no default size
         setValue(value);
     }
@@ -133,7 +132,7 @@ public class DiskAttribute extends AbstractDiskHttpData implements Attribute {
 
     @Override
     protected String getDiskFilename() {
-        return getName()+postfix;
+        return getName() + postfix;
     }
 
     @Override
diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/DiskFileUpload.java b/codec-http/src/main/java/io/netty/handler/codec/http/DiskFileUpload.java
index 938cd5b12c..544637958c 100644
--- a/codec-http/src/main/java/io/netty/handler/codec/http/DiskFileUpload.java
+++ b/codec-http/src/main/java/io/netty/handler/codec/http/DiskFileUpload.java
@@ -22,7 +22,7 @@ import java.nio.charset.Charset;
  * Disk FileUpload implementation that stores file into real files
  */
 public class DiskFileUpload extends AbstractDiskHttpData implements FileUpload {
-    public static String baseDirectory = null;
+    public static String baseDirectory;
 
     public static boolean deleteOnExitTemporaryFile = true;
 
@@ -30,15 +30,14 @@ public class DiskFileUpload extends AbstractDiskHttpData implements FileUpload {
 
     public static String postfix = ".tmp";
 
-    private String filename = null;
+    private String filename;
 
-    private String contentType = null;
+    private String contentType;
 
-    private String contentTransferEncoding = null;
+    private String contentTransferEncoding;
 
     public DiskFileUpload(String name, String filename, String contentType,
-            String contentTransferEncoding, Charset charset, long size)
-            throws NullPointerException, IllegalArgumentException {
+            String contentTransferEncoding, Charset charset, long size) {
         super(name, charset, size);
         setFilename(filename);
         setContentType(contentType);
@@ -127,12 +126,12 @@ public class DiskFileUpload extends AbstractDiskHttpData implements FileUpload {
 
     @Override
     public String toString() {
-        return HttpPostBodyUtil.CONTENT_DISPOSITION+": "+
-            HttpPostBodyUtil.FORM_DATA+"; "+HttpPostBodyUtil.NAME+"=\"" + getName() +
-                "\"; "+HttpPostBodyUtil.FILENAME+"=\"" + filename + "\"\r\n" +
-                HttpHeaders.Names.CONTENT_TYPE+": " + contentType +
-                (charset != null? "; "+HttpHeaders.Values.CHARSET+"=" + charset + "\r\n" : "\r\n") +
-                HttpHeaders.Names.CONTENT_LENGTH+": " + length() + "\r\n" +
+        return HttpPostBodyUtil.CONTENT_DISPOSITION + ": " +
+            HttpPostBodyUtil.FORM_DATA + "; " + HttpPostBodyUtil.NAME + "=\"" + getName() +
+                "\"; " + HttpPostBodyUtil.FILENAME + "=\"" + filename + "\"\r\n" +
+                HttpHeaders.Names.CONTENT_TYPE + ": " + contentType +
+                (charset != null? "; " + HttpHeaders.Values.CHARSET + "=" + charset + "\r\n" : "\r\n") +
+                HttpHeaders.Names.CONTENT_LENGTH + ": " + length() + "\r\n" +
                 "Completed: " + isCompleted() +
                 "\r\nIsInMemory: " + isInMemory() + "\r\nRealFile: " +
                 file.getAbsolutePath() + " DefaultDeleteAfter: " +
diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/HttpCodecUtil.java b/codec-http/src/main/java/io/netty/handler/codec/http/HttpCodecUtil.java
index 6652672bee..065f8579ab 100644
--- a/codec-http/src/main/java/io/netty/handler/codec/http/HttpCodecUtil.java
+++ b/codec-http/src/main/java/io/netty/handler/codec/http/HttpCodecUtil.java
@@ -22,7 +22,7 @@ import io.netty.util.CharsetUtil;
 
 /**
  */
-class HttpCodecUtil {
+final class HttpCodecUtil {
     //space ' '
     static final byte SP = 32;
 
diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/HttpDataFactory.java b/codec-http/src/main/java/io/netty/handler/codec/http/HttpDataFactory.java
index 678853d9fe..2999bad731 100644
--- a/codec-http/src/main/java/io/netty/handler/codec/http/HttpDataFactory.java
+++ b/codec-http/src/main/java/io/netty/handler/codec/http/HttpDataFactory.java
@@ -29,8 +29,7 @@ public interface HttpDataFactory {
     * @throws NullPointerException
     * @throws IllegalArgumentException
     */
-    Attribute createAttribute(HttpRequest request, String name)
-           throws NullPointerException, IllegalArgumentException;
+    Attribute createAttribute(HttpRequest request, String name);
 
     /**
      *
@@ -41,8 +40,7 @@ public interface HttpDataFactory {
      * @throws NullPointerException
      * @throws IllegalArgumentException
      */
-    Attribute createAttribute(HttpRequest request, String name, String value)
-            throws NullPointerException, IllegalArgumentException;
+    Attribute createAttribute(HttpRequest request, String name, String value);
 
     /**
      *
@@ -56,7 +54,7 @@ public interface HttpDataFactory {
      */
     FileUpload createFileUpload(HttpRequest request, String name, String filename,
                                 String contentType, String contentTransferEncoding, Charset charset,
-                                long size) throws NullPointerException, IllegalArgumentException;
+                                long size);
 
     /**
      * Remove the given InterfaceHttpData from clean list (will not delete the file, except if the file
diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/HttpHeaders.java b/codec-http/src/main/java/io/netty/handler/codec/http/HttpHeaders.java
index fc318957ef..ab844236e6 100644
--- a/codec-http/src/main/java/io/netty/handler/codec/http/HttpHeaders.java
+++ b/codec-http/src/main/java/io/netty/handler/codec/http/HttpHeaders.java
@@ -49,7 +49,7 @@ public class HttpHeaders {
         /**
          * {@code "Accept-Encoding"}
          */
-        public static final String ACCEPT_ENCODING= "Accept-Encoding";
+        public static final String ACCEPT_ENCODING = "Accept-Encoding";
         /**
          * {@code "Accept-Language"}
          */
@@ -57,11 +57,11 @@ public class HttpHeaders {
         /**
          * {@code "Accept-Ranges"}
          */
-        public static final String ACCEPT_RANGES= "Accept-Ranges";
+        public static final String ACCEPT_RANGES = "Accept-Ranges";
         /**
          * {@code "Accept-Patch"}
          */
-        public static final String ACCEPT_PATCH= "Accept-Patch";
+        public static final String ACCEPT_PATCH = "Accept-Patch";
         /**
          * {@code "Age"}
          */
@@ -93,7 +93,7 @@ public class HttpHeaders {
         /**
          * {@code "Content-Language"}
          */
-        public static final String CONTENT_LANGUAGE= "Content-Language";
+        public static final String CONTENT_LANGUAGE = "Content-Language";
         /**
          * {@code "Content-Length"}
          */
@@ -117,7 +117,7 @@ public class HttpHeaders {
         /**
          * {@code "Content-Type"}
          */
-        public static final String CONTENT_TYPE= "Content-Type";
+        public static final String CONTENT_TYPE = "Content-Type";
         /**
          * {@code "Cookie"}
          */
@@ -161,7 +161,7 @@ public class HttpHeaders {
         /**
          * {@code "If-Range"}
          */
-        public static final String IF_RANGE= "If-Range";
+        public static final String IF_RANGE = "If-Range";
         /**
          * {@code "If-Unmodified-Since"}
          */
@@ -229,15 +229,15 @@ public class HttpHeaders {
         /**
          * {@code "Sec-WebSocket-Version"}
          */
-    	public static final String SEC_WEBSOCKET_VERSION = "Sec-WebSocket-Version";
+        public static final String SEC_WEBSOCKET_VERSION = "Sec-WebSocket-Version";
         /**
          * {@code "Sec-WebSocket-Key"}
          */
-    	public static final String SEC_WEBSOCKET_KEY = "Sec-WebSocket-Key";
+        public static final String SEC_WEBSOCKET_KEY = "Sec-WebSocket-Key";
         /**
          * {@code "Sec-WebSocket-Accept"}
          */
-    	public static final String SEC_WEBSOCKET_ACCEPT = "Sec-WebSocket-Accept";
+        public static final String SEC_WEBSOCKET_ACCEPT = "Sec-WebSocket-Accept";
         /**
          * {@code "Server"}
          */
diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/HttpMessageDecoder.java b/codec-http/src/main/java/io/netty/handler/codec/http/HttpMessageDecoder.java
index 5059fba641..128aa46fe2 100644
--- a/codec-http/src/main/java/io/netty/handler/codec/http/HttpMessageDecoder.java
+++ b/codec-http/src/main/java/io/netty/handler/codec/http/HttpMessageDecoder.java
@@ -568,11 +568,9 @@ public abstract class HttpMessageDecoder extends ReplayingDecoder= maxLineLength) {
                     // TODO: Respond with Bad Request and discard the traffic
                     //    or close the connection.
diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/HttpPostBodyUtil.java b/codec-http/src/main/java/io/netty/handler/codec/http/HttpPostBodyUtil.java
index c49cbcc488..e74e1ecdc0 100644
--- a/codec-http/src/main/java/io/netty/handler/codec/http/HttpPostBodyUtil.java
+++ b/codec-http/src/main/java/io/netty/handler/codec/http/HttpPostBodyUtil.java
@@ -23,7 +23,8 @@ import io.netty.util.CharsetUtil;
 /**
  * Shared Static object between HttpMessageDecoder, HttpPostRequestDecoder and HttpPostRequestEncoder
  */
-public class HttpPostBodyUtil {
+final class HttpPostBodyUtil {
+
     public static int chunkSize = 8096;
     /**
      * HTTP content disposition header name.
diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/HttpPostRequestDecoder.java b/codec-http/src/main/java/io/netty/handler/codec/http/HttpPostRequestDecoder.java
index dce84caeb3..df4cf79a21 100644
--- a/codec-http/src/main/java/io/netty/handler/codec/http/HttpPostRequestDecoder.java
+++ b/codec-http/src/main/java/io/netty/handler/codec/http/HttpPostRequestDecoder.java
@@ -50,12 +50,12 @@ public class HttpPostRequestDecoder {
     /**
      * Does request have a body to decode
      */
-    private boolean bodyToDecode = false;
+    private boolean bodyToDecode;
 
     /**
      * Does the last chunk already received
      */
-    private boolean isLastChunk = false;
+    private boolean isLastChunk;
 
     /**
      * HttpDatas from Body
@@ -71,28 +71,28 @@ public class HttpPostRequestDecoder {
     /**
      * The current channelBuffer
      */
-    private ChannelBuffer undecodedChunk = null;
+    private ChannelBuffer undecodedChunk;
 
     /**
      * Does this request is a Multipart request
      */
-    private boolean isMultipart = false;
+    private boolean isMultipart;
 
     /**
      * Body HttpDatas current position
      */
-    private int bodyListHttpDataRank = 0;
+    private int bodyListHttpDataRank;
 
     /**
      * If multipart, this is the boundary for the flobal multipart
      */
-    private String multipartDataBoundary = null;
+    private String multipartDataBoundary;
 
     /**
      * If multipart, there could be internal multiparts (mixed) to the global multipart.
      * Only one level is allowed.
      */
-    private String multipartMixedBoundary = null;
+    private String multipartMixedBoundary;
 
     /**
      * Current status
@@ -102,17 +102,17 @@ public class HttpPostRequestDecoder {
     /**
      * Used in Multipart
      */
-    private Map currentFieldAttributes = null;
+    private Map currentFieldAttributes;
 
     /**
      * The current FileUpload that is currently in decode process
      */
-    private FileUpload currentFileUpload = null;
+    private FileUpload currentFileUpload;
 
     /**
      * The current Attribute that is currently in decode process
      */
-    private Attribute currentAttribute = null;
+    private Attribute currentAttribute;
 
     /**
     *
@@ -122,8 +122,7 @@ public class HttpPostRequestDecoder {
     * @throws ErrorDataDecoderException if the default charset was wrong when decoding or other errors
     */
     public HttpPostRequestDecoder(HttpRequest request)
-            throws ErrorDataDecoderException, IncompatibleDataDecoderException,
-            NullPointerException {
+            throws ErrorDataDecoderException, IncompatibleDataDecoderException {
         this(new DefaultHttpDataFactory(DefaultHttpDataFactory.MINSIZE),
                 request, HttpCodecUtil.DEFAULT_CHARSET);
     }
@@ -137,8 +136,7 @@ public class HttpPostRequestDecoder {
      * @throws ErrorDataDecoderException if the default charset was wrong when decoding or other errors
      */
     public HttpPostRequestDecoder(HttpDataFactory factory, HttpRequest request)
-            throws ErrorDataDecoderException, IncompatibleDataDecoderException,
-            NullPointerException {
+            throws ErrorDataDecoderException, IncompatibleDataDecoderException {
         this(factory, request, HttpCodecUtil.DEFAULT_CHARSET);
     }
 
@@ -153,7 +151,7 @@ public class HttpPostRequestDecoder {
      */
     public HttpPostRequestDecoder(HttpDataFactory factory, HttpRequest request,
             Charset charset) throws ErrorDataDecoderException,
-            IncompatibleDataDecoderException, NullPointerException {
+            IncompatibleDataDecoderException {
         if (factory == null) {
             throw new NullPointerException("factory");
         }
@@ -446,9 +444,9 @@ public class HttpPostRequestDecoder {
                 case DISPOSITION:// search '='
                     if (read == '=') {
                         currentStatus = MultiPartStatus.FIELD;
-                        equalpos = currentpos-1;
+                        equalpos = currentpos - 1;
                         String key = decodeAttribute(
-                                undecodedChunk.toString(firstpos, equalpos-firstpos, charset),
+                                undecodedChunk.toString(firstpos, equalpos - firstpos, charset),
                                 charset);
                         currentAttribute = factory.createAttribute(request, key);
                         firstpos = currentpos;
@@ -467,8 +465,8 @@ public class HttpPostRequestDecoder {
                 case FIELD:// search '&' or end of line
                     if (read == '&') {
                         currentStatus = MultiPartStatus.DISPOSITION;
-                        ampersandpos = currentpos-1;
-                        setFinalBuffer(undecodedChunk.slice(firstpos, ampersandpos-firstpos));
+                        ampersandpos = currentpos - 1;
+                        setFinalBuffer(undecodedChunk.slice(firstpos, ampersandpos - firstpos));
                         firstpos = currentpos;
                         contRead = true;
                     } else if (read == HttpCodecUtil.CR) {
@@ -477,9 +475,9 @@ public class HttpPostRequestDecoder {
                             currentpos++;
                             if (read == HttpCodecUtil.LF) {
                                 currentStatus = MultiPartStatus.PREEPILOGUE;
-                                ampersandpos = currentpos-2;
+                                ampersandpos = currentpos - 2;
                                 setFinalBuffer(
-                                        undecodedChunk.slice(firstpos, ampersandpos-firstpos));
+                                        undecodedChunk.slice(firstpos, ampersandpos - firstpos));
                                 firstpos = currentpos;
                                 contRead = false;
                             } else {
@@ -492,9 +490,9 @@ public class HttpPostRequestDecoder {
                         }
                     } else if (read == HttpCodecUtil.LF) {
                         currentStatus = MultiPartStatus.PREEPILOGUE;
-                        ampersandpos = currentpos-1;
+                        ampersandpos = currentpos - 1;
                         setFinalBuffer(
-                                undecodedChunk.slice(firstpos, ampersandpos-firstpos));
+                                undecodedChunk.slice(firstpos, ampersandpos - firstpos));
                         firstpos = currentpos;
                         contRead = false;
                     }
@@ -509,7 +507,7 @@ public class HttpPostRequestDecoder {
                 ampersandpos = currentpos;
                 if (ampersandpos > firstpos) {
                     setFinalBuffer(
-                            undecodedChunk.slice(firstpos, ampersandpos-firstpos));
+                            undecodedChunk.slice(firstpos, ampersandpos - firstpos));
                 } else if (! currentAttribute.isCompleted()) {
                     setFinalBuffer(ChannelBuffers.EMPTY_BUFFER);
                 }
@@ -521,7 +519,7 @@ public class HttpPostRequestDecoder {
                 // reset index except if to continue in case of FIELD status
                 if (currentStatus == MultiPartStatus.FIELD) {
                     currentAttribute.addContent(
-                            undecodedChunk.slice(firstpos, currentpos-firstpos),
+                            undecodedChunk.slice(firstpos, currentpos - firstpos),
                             false);
                     firstpos = currentpos;
                 }
@@ -1231,7 +1229,7 @@ public class HttpPostRequestDecoder {
                 // so go back of delimiter size
                 try {
                     currentAttribute.addContent(
-                            undecodedChunk.slice(readerIndex, lastPosition-readerIndex),
+                            undecodedChunk.slice(readerIndex, lastPosition - readerIndex),
                             true);
                 } catch (IOException e) {
                     throw new ErrorDataDecoderException(e);
@@ -1240,7 +1238,7 @@ public class HttpPostRequestDecoder {
             } else {
                 try {
                     currentAttribute.addContent(
-                            undecodedChunk.slice(readerIndex, lastPosition-readerIndex),
+                            undecodedChunk.slice(readerIndex, lastPosition - readerIndex),
                             false);
                 } catch (IOException e) {
                     throw new ErrorDataDecoderException(e);
diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/HttpPostRequestEncoder.java b/codec-http/src/main/java/io/netty/handler/codec/http/HttpPostRequestEncoder.java
index 6a038423aa..0a13479608 100644
--- a/codec-http/src/main/java/io/netty/handler/codec/http/HttpPostRequestEncoder.java
+++ b/codec-http/src/main/java/io/netty/handler/codec/http/HttpPostRequestEncoder.java
@@ -51,16 +51,16 @@ public class HttpPostRequestEncoder implements ChunkedInput {
     /**
      * Chunked false by default
      */
-    private boolean isChunked = false;
+    private boolean isChunked;
 
     /**
      * InterfaceHttpData for Body (without encoding)
      */
-    private List bodyListDatas = null;
+    private List bodyListDatas;
     /**
      * The final Multipart List of InterfaceHttpData including encoding
      */
-    private List multipartHttpDatas = null;
+    private List multipartHttpDatas;
 
     /**
      * Does this request is a Multipart request
@@ -70,17 +70,17 @@ public class HttpPostRequestEncoder implements ChunkedInput {
     /**
      * If multipart, this is the boundary for the flobal multipart
      */
-    private String multipartDataBoundary = null;
+    private String multipartDataBoundary;
 
     /**
      * If multipart, there could be internal multiparts (mixed) to the global multipart.
      * Only one level is allowed.
      */
-    private String multipartMixedBoundary = null;
+    private String multipartMixedBoundary;
     /**
      * To check if the header has been finalized
      */
-    private boolean headerFinalized = false;
+    private boolean headerFinalized;
 
     /**
     *
@@ -90,7 +90,7 @@ public class HttpPostRequestEncoder implements ChunkedInput {
     * @throws ErrorDataEncoderException if the request is not a POST
     */
     public HttpPostRequestEncoder(HttpRequest request, boolean multipart)
-            throws ErrorDataEncoderException, NullPointerException {
+            throws ErrorDataEncoderException {
         this(new DefaultHttpDataFactory(DefaultHttpDataFactory.MINSIZE),
                 request, multipart, HttpCodecUtil.DEFAULT_CHARSET);
     }
@@ -104,7 +104,7 @@ public class HttpPostRequestEncoder implements ChunkedInput {
      * @throws ErrorDataEncoderException if the request is not a POST
      */
     public HttpPostRequestEncoder(HttpDataFactory factory, HttpRequest request, boolean multipart)
-            throws ErrorDataEncoderException, NullPointerException {
+            throws ErrorDataEncoderException {
         this(factory, request, multipart, HttpCodecUtil.DEFAULT_CHARSET);
     }
 
@@ -118,8 +118,7 @@ public class HttpPostRequestEncoder implements ChunkedInput {
      * @throws ErrorDataEncoderException if the request is not a POST
      */
     public HttpPostRequestEncoder(HttpDataFactory factory, HttpRequest request,
-            boolean multipart, Charset charset) throws ErrorDataEncoderException,
-            NullPointerException {
+            boolean multipart, Charset charset) throws ErrorDataEncoderException {
         if (factory == null) {
             throw new NullPointerException("factory");
         }
@@ -157,24 +156,24 @@ public class HttpPostRequestEncoder implements ChunkedInput {
     /**
      * Does the last non empty chunk already encoded so that next chunk will be empty (last chunk)
      */
-    private boolean isLastChunk = false;
+    private boolean isLastChunk;
     /**
      * Last chunk already sent
      */
-    private boolean isLastChunkSent = false;
+    private boolean isLastChunkSent;
     /**
      * The current FileUpload that is currently in encode process
      */
-    private FileUpload currentFileUpload = null;
+    private FileUpload currentFileUpload;
     /**
      * While adding a FileUpload, is the multipart currently in Mixed Mode
      */
-    private boolean duringMixedMode = false;
+    private boolean duringMixedMode;
 
     /**
      * Global Body size
      */
-    private long globalBodySize = 0;
+    private long globalBodySize;
 
     /**
      * True if this request is a Multipart request
@@ -224,7 +223,7 @@ public class HttpPostRequestEncoder implements ChunkedInput {
      * @throws ErrorDataEncoderException if the encoding is in error or if the finalize were already done
      */
     public void setBodyHttpDatas(List datas)
-            throws NullPointerException, ErrorDataEncoderException {
+            throws ErrorDataEncoderException {
         if (datas == null) {
             throw new NullPointerException("datas");
         }
@@ -246,7 +245,7 @@ public class HttpPostRequestEncoder implements ChunkedInput {
      * @throws ErrorDataEncoderException if the encoding is in error or if the finalize were already done
      */
     public void addBodyAttribute(String name, String value)
-    throws NullPointerException, ErrorDataEncoderException {
+    throws ErrorDataEncoderException {
         if (name == null) {
             throw new NullPointerException("name");
         }
@@ -268,7 +267,7 @@ public class HttpPostRequestEncoder implements ChunkedInput {
      * @throws ErrorDataEncoderException if the encoding is in error or if the finalize were already done
      */
     public void addBodyFileUpload(String name, File file, String contentType, boolean isText)
-    throws NullPointerException, ErrorDataEncoderException {
+    throws ErrorDataEncoderException {
         if (name == null) {
             throw new NullPointerException("name");
         }
@@ -307,7 +306,7 @@ public class HttpPostRequestEncoder implements ChunkedInput {
      * @throws ErrorDataEncoderException if the encoding is in error or if the finalize were already done
      */
     public void addBodyFileUploads(String name, File[] file, String[] contentType, boolean[] isText)
-    throws NullPointerException, ErrorDataEncoderException {
+    throws ErrorDataEncoderException {
         if (file.length != contentType.length && file.length != isText.length) {
             throw new NullPointerException("Different array length");
         }
@@ -323,7 +322,7 @@ public class HttpPostRequestEncoder implements ChunkedInput {
      * @throws ErrorDataEncoderException if the encoding is in error or if the finalize were already done
      */
     public void addBodyHttpData(InterfaceHttpData data)
-    throws NullPointerException, ErrorDataEncoderException {
+    throws ErrorDataEncoderException {
         if (headerFinalized) {
             throw new ErrorDataEncoderException("Cannot add value once finalized");
         }
@@ -340,12 +339,12 @@ public class HttpPostRequestEncoder implements ChunkedInput {
                     String value = encodeAttribute(attribute.getValue(), charset);
                     Attribute newattribute = factory.createAttribute(request, key, value);
                     multipartHttpDatas.add(newattribute);
-                    globalBodySize += newattribute.getName().length()+1+
-                        newattribute.length()+1;
+                    globalBodySize += newattribute.getName().length() + 1 +
+                        newattribute.length() + 1;
                 } catch (IOException e) {
                     throw new ErrorDataEncoderException(e);
                 }
-            } else if (data instanceof FileUpload){
+            } else if (data instanceof FileUpload) {
                 // since not Multipart, only name=filename => Attribute
                 FileUpload fileUpload = (FileUpload) data;
                 // name=filename& with encoded name and filename
@@ -353,8 +352,8 @@ public class HttpPostRequestEncoder implements ChunkedInput {
                 String value = encodeAttribute(fileUpload.getFilename(), charset);
                 Attribute newattribute = factory.createAttribute(request, key, value);
                 multipartHttpDatas.add(newattribute);
-                globalBodySize += newattribute.getName().length()+1+
-                    newattribute.length()+1;
+                globalBodySize += newattribute.getName().length() + 1 +
+                    newattribute.length() + 1;
             }
             return;
         }
@@ -393,7 +392,7 @@ public class HttpPostRequestEncoder implements ChunkedInput {
         if (data instanceof Attribute) {
             if (duringMixedMode) {
                 InternalAttribute internal = new InternalAttribute();
-                internal.addValue("\r\n--"+multipartMixedBoundary+"--");
+                internal.addValue("\r\n--" + multipartMixedBoundary + "--");
                 multipartHttpDatas.add(internal);
                 multipartMixedBoundary = null;
                 currentFileUpload = null;
@@ -404,24 +403,24 @@ public class HttpPostRequestEncoder implements ChunkedInput {
                 // previously a data field so CRLF
                 internal.addValue("\r\n");
             }
-            internal.addValue("--"+multipartDataBoundary+"\r\n");
+            internal.addValue("--" + multipartDataBoundary + "\r\n");
             // content-disposition: form-data; name="field1"
             Attribute attribute = (Attribute) data;
-            internal.addValue(HttpPostBodyUtil.CONTENT_DISPOSITION+": "+
-                    HttpPostBodyUtil.FORM_DATA+"; "+
-                    HttpPostBodyUtil.NAME+"=\""+
-                    encodeAttribute(attribute.getName(), charset)+"\"\r\n");
+            internal.addValue(HttpPostBodyUtil.CONTENT_DISPOSITION + ": " +
+                    HttpPostBodyUtil.FORM_DATA + "; " +
+                    HttpPostBodyUtil.NAME + "=\"" +
+                    encodeAttribute(attribute.getName(), charset) + "\"\r\n");
             Charset localcharset = attribute.getCharset();
             if (localcharset != null) {
                 // Content-Type: charset=charset
-                internal.addValue(HttpHeaders.Names.CONTENT_TYPE+": "+
-                        HttpHeaders.Values.CHARSET+"="+localcharset+"\r\n");
+                internal.addValue(HttpHeaders.Names.CONTENT_TYPE + ": " +
+                        HttpHeaders.Values.CHARSET + "=" + localcharset + "\r\n");
             }
             // CRLF between body header and data
             internal.addValue("\r\n");
             multipartHttpDatas.add(internal);
             multipartHttpDatas.add(data);
-            globalBodySize += attribute.length()+internal.size();
+            globalBodySize += attribute.length() + internal.size();
         } else if (data instanceof FileUpload) {
             FileUpload fileUpload = (FileUpload) data;
             InternalAttribute internal = new InternalAttribute();
@@ -441,7 +440,7 @@ public class HttpPostRequestEncoder implements ChunkedInput {
 
                     // add endmixedmultipart delimiter, multipart body header and
                     // Data to multipart list
-                    internal.addValue("--"+multipartMixedBoundary+"--");
+                    internal.addValue("--" + multipartMixedBoundary + "--");
                     multipartHttpDatas.add(internal);
                     multipartMixedBoundary = null;
                     // start a new one (could be replaced if mixed start again from here
@@ -475,19 +474,19 @@ public class HttpPostRequestEncoder implements ChunkedInput {
                     // Content-Type: text/plain
                     initMixedMultipart();
                     InternalAttribute pastAttribute =
-                        (InternalAttribute) multipartHttpDatas.get(multipartHttpDatas.size()-2);
+                        (InternalAttribute) multipartHttpDatas.get(multipartHttpDatas.size() - 2);
                     // remove past size
                     globalBodySize -= pastAttribute.size();
-                    String replacement = HttpPostBodyUtil.CONTENT_DISPOSITION+": "+
-                        HttpPostBodyUtil.FORM_DATA+"; "+HttpPostBodyUtil.NAME+"=\""+
-                        encodeAttribute(fileUpload.getName(), charset)+"\"\r\n";
-                    replacement += HttpHeaders.Names.CONTENT_TYPE+": "+
-                        HttpPostBodyUtil.MULTIPART_MIXED+"; "+HttpHeaders.Values.BOUNDARY+
-                        "="+multipartMixedBoundary+"\r\n\r\n";
-                    replacement += "--"+multipartMixedBoundary+"\r\n";
-                    replacement += HttpPostBodyUtil.CONTENT_DISPOSITION+": "+
-                        HttpPostBodyUtil.FILE+"; "+HttpPostBodyUtil.FILENAME+"=\""+
-                        encodeAttribute(fileUpload.getFilename(), charset)+
+                    String replacement = HttpPostBodyUtil.CONTENT_DISPOSITION + ": " +
+                        HttpPostBodyUtil.FORM_DATA + "; " + HttpPostBodyUtil.NAME + "=\"" +
+                        encodeAttribute(fileUpload.getName(), charset) + "\"\r\n";
+                    replacement += HttpHeaders.Names.CONTENT_TYPE + ": " +
+                        HttpPostBodyUtil.MULTIPART_MIXED + "; " + HttpHeaders.Values.BOUNDARY +
+                        "=" + multipartMixedBoundary + "\r\n\r\n";
+                    replacement += "--" + multipartMixedBoundary + "\r\n";
+                    replacement += HttpPostBodyUtil.CONTENT_DISPOSITION + ": " +
+                        HttpPostBodyUtil.FILE + "; " + HttpPostBodyUtil.FILENAME + "=\"" +
+                        encodeAttribute(fileUpload.getFilename(), charset) +
                         "\"\r\n";
                     pastAttribute.setValue(replacement, 1);
                     // update past size
@@ -510,51 +509,51 @@ public class HttpPostRequestEncoder implements ChunkedInput {
             if (localMixed) {
                 // add mixedmultipart delimiter, mixedmultipart body header and
                 // Data to multipart list
-                internal.addValue("--"+multipartMixedBoundary+"\r\n");
+                internal.addValue("--" + multipartMixedBoundary + "\r\n");
                 // Content-Disposition: file; filename="file1.txt"
-                internal.addValue(HttpPostBodyUtil.CONTENT_DISPOSITION+": "+
-                        HttpPostBodyUtil.FILE+"; "+HttpPostBodyUtil.FILENAME+"=\""+
-                        encodeAttribute(fileUpload.getFilename(), charset)+
+                internal.addValue(HttpPostBodyUtil.CONTENT_DISPOSITION + ": " +
+                        HttpPostBodyUtil.FILE + "; " + HttpPostBodyUtil.FILENAME + "=\"" +
+                        encodeAttribute(fileUpload.getFilename(), charset) +
                         "\"\r\n");
 
             } else {
-                internal.addValue("--"+multipartDataBoundary+"\r\n");
+                internal.addValue("--" + multipartDataBoundary + "\r\n");
                 // Content-Disposition: form-data; name="files"; filename="file1.txt"
-                internal.addValue(HttpPostBodyUtil.CONTENT_DISPOSITION+": "+
-                        HttpPostBodyUtil.FORM_DATA+"; "+HttpPostBodyUtil.NAME+"=\""+
-                        encodeAttribute(fileUpload.getName(), charset)+"\"; "+
-                        HttpPostBodyUtil.FILENAME+"=\""+
-                        encodeAttribute(fileUpload.getFilename(), charset)+
+                internal.addValue(HttpPostBodyUtil.CONTENT_DISPOSITION + ": " +
+                        HttpPostBodyUtil.FORM_DATA + "; " + HttpPostBodyUtil.NAME + "=\"" +
+                        encodeAttribute(fileUpload.getName(), charset) + "\"; " +
+                        HttpPostBodyUtil.FILENAME + "=\"" +
+                        encodeAttribute(fileUpload.getFilename(), charset) +
                         "\"\r\n");
             }
             // Content-Type: image/gif
             // Content-Type: text/plain; charset=ISO-8859-1
             // Content-Transfer-Encoding: binary
-            internal.addValue(HttpHeaders.Names.CONTENT_TYPE+": "+
+            internal.addValue(HttpHeaders.Names.CONTENT_TYPE + ": " +
                     fileUpload.getContentType());
             String contentTransferEncoding = fileUpload.getContentTransferEncoding();
             if (contentTransferEncoding != null &&
                     contentTransferEncoding.equals(
                             HttpPostBodyUtil.TransferEncodingMechanism.BINARY.value)) {
-                internal.addValue("\r\n"+HttpHeaders.Names.CONTENT_TRANSFER_ENCODING+
-                        ": "+HttpPostBodyUtil.TransferEncodingMechanism.BINARY.value+
+                internal.addValue("\r\n" + HttpHeaders.Names.CONTENT_TRANSFER_ENCODING +
+                        ": " + HttpPostBodyUtil.TransferEncodingMechanism.BINARY.value +
                         "\r\n\r\n");
             } else if (fileUpload.getCharset() != null) {
-                internal.addValue("; "+HttpHeaders.Values.CHARSET+"="+
-                        fileUpload.getCharset()+"\r\n\r\n");
+                internal.addValue("; " + HttpHeaders.Values.CHARSET + "=" +
+                        fileUpload.getCharset() + "\r\n\r\n");
             } else {
                 internal.addValue("\r\n\r\n");
             }
             multipartHttpDatas.add(internal);
             multipartHttpDatas.add(data);
-            globalBodySize += fileUpload.length()+internal.size();
+            globalBodySize += fileUpload.length() + internal.size();
         }
     }
 
     /**
      * Iterator to be used when encoding will be called chunk after chunk
      */
-    private ListIterator iterator = null;
+    private ListIterator iterator;
 
     /**
      * Finalize the request by preparing the Header in the request and
@@ -573,9 +572,9 @@ public class HttpPostRequestEncoder implements ChunkedInput {
             if (isMultipart) {
                 InternalAttribute internal = new InternalAttribute();
                 if (duringMixedMode) {
-                    internal.addValue("\r\n--"+multipartMixedBoundary+"--");
+                    internal.addValue("\r\n--" + multipartMixedBoundary + "--");
                 }
-                internal.addValue("\r\n--"+multipartDataBoundary+"--\r\n");
+                internal.addValue("\r\n--" + multipartDataBoundary + "--\r\n");
                 multipartHttpDatas.add(internal);
                 multipartMixedBoundary = null;
                 currentFileUpload = null;
@@ -597,7 +596,7 @@ public class HttpPostRequestEncoder implements ChunkedInput {
                         HttpHeaders.Values.MULTIPART_FORM_DATA)) {
                     // ignore
                 } else if (contentType.toLowerCase().startsWith(
-                        HttpHeaders.Values.APPLICATION_X_WWW_FORM_URLENCODED)){
+                        HttpHeaders.Values.APPLICATION_X_WWW_FORM_URLENCODED)) {
                     // ignore
                 } else {
                     request.addHeader(HttpHeaders.Names.CONTENT_TYPE, contentType);
@@ -675,11 +674,11 @@ public class HttpPostRequestEncoder implements ChunkedInput {
     /**
      * The ChannelBuffer currently used by the encoder
      */
-    private ChannelBuffer currentBuffer = null;
+    private ChannelBuffer currentBuffer;
     /**
      * The current InterfaceHttpData to encode (used if more chunks are available)
      */
-    private InterfaceHttpData currentData = null;
+    private InterfaceHttpData currentData;
     /**
      * If not multipart, does the currentBuffer stands for the Key or for the Value
      */
@@ -787,12 +786,12 @@ public class HttpPostRequestEncoder implements ChunkedInput {
                 currentBuffer = ChannelBuffers.wrappedBuffer(
                         buffer, ChannelBuffers.wrappedBuffer("=".getBytes()));
                 //continue
-                size -= buffer.readableBytes()+1;
+                size -= buffer.readableBytes() + 1;
             } else {
                 currentBuffer = ChannelBuffers.wrappedBuffer(currentBuffer,
                     buffer, ChannelBuffers.wrappedBuffer("=".getBytes()));
                 //continue
-                size -= buffer.readableBytes()+1;
+                size -= buffer.readableBytes() + 1;
             }
             if (currentBuffer.readableBytes() >= HttpPostBodyUtil.chunkSize) {
                 buffer = fillChannelBuffer();
diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/HttpRequestDecoder.java b/codec-http/src/main/java/io/netty/handler/codec/http/HttpRequestDecoder.java
index ff6897b450..9d2d0665d1 100644
--- a/codec-http/src/main/java/io/netty/handler/codec/http/HttpRequestDecoder.java
+++ b/codec-http/src/main/java/io/netty/handler/codec/http/HttpRequestDecoder.java
@@ -71,7 +71,7 @@ public class HttpRequestDecoder extends HttpMessageDecoder {
     }
 
     @Override
-    protected HttpMessage createMessage(String[] initialLine) throws Exception{
+    protected HttpMessage createMessage(String[] initialLine) throws Exception {
         return new DefaultHttpRequest(
                 HttpVersion.valueOf(initialLine[2]), HttpMethod.valueOf(initialLine[0]), initialLine[1]);
     }
diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/MemoryAttribute.java b/codec-http/src/main/java/io/netty/handler/codec/http/MemoryAttribute.java
index 93881613e7..0a9bfb8c53 100644
--- a/codec-http/src/main/java/io/netty/handler/codec/http/MemoryAttribute.java
+++ b/codec-http/src/main/java/io/netty/handler/codec/http/MemoryAttribute.java
@@ -36,8 +36,7 @@ public class MemoryAttribute extends AbstractMemoryHttpData implements Attribute
      * @throws IllegalArgumentException
      * @throws IOException
      */
-    public MemoryAttribute(String name, String value)
-            throws NullPointerException, IllegalArgumentException, IOException {
+    public MemoryAttribute(String name, String value) throws IOException {
         super(name, HttpCodecUtil.DEFAULT_CHARSET, 0); // Attribute have no default size
         setValue(value);
     }
diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/MemoryFileUpload.java b/codec-http/src/main/java/io/netty/handler/codec/http/MemoryFileUpload.java
index f3f2509d81..25c3d236f8 100644
--- a/codec-http/src/main/java/io/netty/handler/codec/http/MemoryFileUpload.java
+++ b/codec-http/src/main/java/io/netty/handler/codec/http/MemoryFileUpload.java
@@ -24,15 +24,14 @@ import java.nio.charset.Charset;
  */
 public class MemoryFileUpload extends AbstractMemoryHttpData implements FileUpload {
 
-    private String filename = null;
+    private String filename;
 
-    private String contentType = null;
+    private String contentType;
 
-    private String contentTransferEncoding = null;
+    private String contentTransferEncoding;
 
     public MemoryFileUpload(String name, String filename, String contentType,
-            String contentTransferEncoding, Charset charset, long size)
-            throws NullPointerException, IllegalArgumentException {
+            String contentTransferEncoding, Charset charset, long size) {
         super(name, charset, size);
         setFilename(filename);
         setContentType(contentType);
@@ -116,11 +115,11 @@ public class MemoryFileUpload extends AbstractMemoryHttpData implements FileUplo
     @Override
     public String toString() {
         return HttpPostBodyUtil.CONTENT_DISPOSITION+": "+
-            HttpPostBodyUtil.FORM_DATA+"; "+HttpPostBodyUtil.NAME+"=\"" + getName() +
-            "\"; "+HttpPostBodyUtil.FILENAME+"=\"" + filename + "\"\r\n" +
-            HttpHeaders.Names.CONTENT_TYPE+": " + contentType +
-            (charset != null? "; "+HttpHeaders.Values.CHARSET+"=" + charset + "\r\n" : "\r\n") +
-            HttpHeaders.Names.CONTENT_LENGTH+": " + length() + "\r\n" +
+            HttpPostBodyUtil.FORM_DATA + "; " + HttpPostBodyUtil.NAME+"=\"" + getName() +
+            "\"; " + HttpPostBodyUtil.FILENAME + "=\"" + filename + "\"\r\n" +
+            HttpHeaders.Names.CONTENT_TYPE + ": " + contentType +
+            (charset != null? "; " + HttpHeaders.Values.CHARSET + "=" + charset + "\r\n" : "\r\n") +
+            HttpHeaders.Names.CONTENT_LENGTH + ": " + length() + "\r\n" +
             "Completed: " + isCompleted() +
             "\r\nIsInMemory: " + isInMemory();
     }
diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/MixedAttribute.java b/codec-http/src/main/java/io/netty/handler/codec/http/MixedAttribute.java
index 045a39c395..5aa301037c 100644
--- a/codec-http/src/main/java/io/netty/handler/codec/http/MixedAttribute.java
+++ b/codec-http/src/main/java/io/netty/handler/codec/http/MixedAttribute.java
@@ -26,20 +26,16 @@ import io.netty.buffer.ChannelBuffer;
  * Mixed implementation using both in Memory and in File with a limit of size
  */
 public class MixedAttribute implements Attribute {
-    private Attribute attribute = null;
+    private Attribute attribute;
 
-    private long limitSize = 0;
+    private long limitSize;
 
-    public MixedAttribute(String name,
-            long limitSize) throws NullPointerException,
-            IllegalArgumentException {
+    public MixedAttribute(String name, long limitSize) {
         this.limitSize = limitSize;
         attribute = new MemoryAttribute(name);
     }
 
-    public MixedAttribute(String name, String value,
-            long limitSize) throws NullPointerException,
-            IllegalArgumentException {
+    public MixedAttribute(String name, String value, long limitSize) {
         this.limitSize = limitSize;
         if (value.length() > this.limitSize) {
             try {
@@ -62,8 +58,7 @@ public class MixedAttribute implements Attribute {
     }
 
     @Override
-    public void addContent(ChannelBuffer buffer, boolean last)
-            throws IOException {
+    public void addContent(ChannelBuffer buffer, boolean last) throws IOException {
         if (attribute instanceof MemoryAttribute) {
             if (attribute.length() + buffer.readableBytes() > limitSize) {
                 DiskAttribute diskAttribute = new DiskAttribute(attribute
diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/MixedFileUpload.java b/codec-http/src/main/java/io/netty/handler/codec/http/MixedFileUpload.java
index b98c9375f9..6f0146cb37 100644
--- a/codec-http/src/main/java/io/netty/handler/codec/http/MixedFileUpload.java
+++ b/codec-http/src/main/java/io/netty/handler/codec/http/MixedFileUpload.java
@@ -26,16 +26,15 @@ import io.netty.buffer.ChannelBuffer;
  * Mixed implementation using both in Memory and in File with a limit of size
  */
 public class MixedFileUpload implements FileUpload {
-    private FileUpload fileUpload = null;
+    private FileUpload fileUpload;
 
-    private long limitSize = 0;
+    private long limitSize;
 
-    private long definedSize = 0;
+    private long definedSize;
 
     public MixedFileUpload(String name, String filename, String contentType,
             String contentTransferEncoding, Charset charset, long size,
-            long limitSize) throws NullPointerException,
-            IllegalArgumentException {
+            long limitSize) {
         this.limitSize = limitSize;
         if (size > this.limitSize) {
             fileUpload = new DiskFileUpload(name, filename, contentType,
@@ -57,7 +56,7 @@ public class MixedFileUpload implements FileUpload {
                         .getContentType(), fileUpload
                         .getContentTransferEncoding(), fileUpload.getCharset(),
                         definedSize);
-                if (((MemoryFileUpload) fileUpload).getChannelBuffer() != null){
+                if (((MemoryFileUpload) fileUpload).getChannelBuffer() != null) {
                     diskFileUpload.addContent(((MemoryFileUpload) fileUpload)
                         .getChannelBuffer(), last);
                 }
diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/QueryStringDecoder.java b/codec-http/src/main/java/io/netty/handler/codec/http/QueryStringDecoder.java
index f1e2972d9d..d78198f273 100644
--- a/codec-http/src/main/java/io/netty/handler/codec/http/QueryStringDecoder.java
+++ b/codec-http/src/main/java/io/netty/handler/codec/http/QueryStringDecoder.java
@@ -135,7 +135,7 @@ public class QueryStringDecoder {
      * Creates a new decoder that decodes the specified URI encoded in the
      * specified charset.
      */
-    public QueryStringDecoder(URI uri, Charset charset){
+    public QueryStringDecoder(URI uri, Charset charset) {
         this(uri, charset, DEFAULT_MAX_PARAMS);
     }
 
@@ -174,8 +174,7 @@ public class QueryStringDecoder {
             int pathEndPos = uri.indexOf('?');
             if (pathEndPos < 0) {
                 path = uri;
-            }
-            else {
+            } else {
                 return path = uri.substring(0, pathEndPos);
             }
         }
diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/QueryStringEncoder.java b/codec-http/src/main/java/io/netty/handler/codec/http/QueryStringEncoder.java
index f45fcd8a36..cf1211c806 100644
--- a/codec-http/src/main/java/io/netty/handler/codec/http/QueryStringEncoder.java
+++ b/codec-http/src/main/java/io/netty/handler/codec/http/QueryStringEncoder.java
@@ -106,7 +106,7 @@ public class QueryStringEncoder {
                 sb.append(encodeComponent(param.name, charset));
                 sb.append("=");
                 sb.append(encodeComponent(param.value, charset));
-                if(i != params.size() - 1) {
+                if (i != params.size() - 1) {
                     sb.append("&");
                 }
             }
diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/ContinuationWebSocketFrame.java b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/ContinuationWebSocketFrame.java
index ca77115803..bb2df42aa5 100644
--- a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/ContinuationWebSocketFrame.java
+++ b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/ContinuationWebSocketFrame.java
@@ -25,7 +25,7 @@ import io.netty.util.CharsetUtil;
  */
 public class ContinuationWebSocketFrame extends WebSocketFrame {
 
-    private String aggregatedText = null;
+    private String aggregatedText;
 
     /**
      * Creates a new empty continuation frame.
diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/UTF8Output.java b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/UTF8Output.java
index 58a2872a39..4477699fbc 100644
--- a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/UTF8Output.java
+++ b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/UTF8Output.java
@@ -42,7 +42,7 @@ final class UTF8Output {
             12, 12, 12, 12, 12, 12, 12, 12 };
 
     private int state = UTF8_ACCEPT;
-    private int codep = 0;
+    private int codep;
 
     private final StringBuilder stringBuilder;
 
@@ -60,7 +60,7 @@ final class UTF8Output {
     public void write(int b) {
         byte type = TYPES[b & 0xFF];
 
-        codep = (state != UTF8_ACCEPT) ? (b & 0x3f) | (codep << 6) : (0xff >> type) & (b);
+        codep = (state != UTF8_ACCEPT) ? (b & 0x3f) | (codep << 6) : (0xff >> type) & b;
 
         state = STATES[state + type];
 
diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocket08FrameDecoder.java b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocket08FrameDecoder.java
index 42bc5f6220..518567c8bc 100644
--- a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocket08FrameDecoder.java
+++ b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocket08FrameDecoder.java
@@ -64,20 +64,20 @@ public class WebSocket08FrameDecoder extends ReplayingDecoder> 4;
-            frameOpcode = (b & 0x0F);
+            frameOpcode = b & 0x0F;
 
             if (logger.isDebugEnabled()) {
                 logger.debug("Decoding WebSocket Frame opCode=" + frameOpcode);
@@ -127,7 +127,7 @@ public class WebSocket08FrameDecoder extends ReplayingDecoder>> 8) & 0xFF);
-                header.writeByte((length) & 0xFF);
+                header.writeByte(length & 0xFF);
             } else {
                 header = ChannelBuffers.buffer(10 + maskLength);
                 header.writeByte(b0);
-                header.writeByte(this.maskPayload ? (0xFF) : 127);
+                header.writeByte(this.maskPayload ? 0xFF : 127);
                 header.writeLong(length);
             }
 
@@ -170,4 +170,4 @@ public class WebSocket08FrameEncoder extends OneToOneEncoder {
         return msg;
     }
 
-}
\ No newline at end of file
+}
diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker.java b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker.java
index 4493968db2..23a4d7263c 100644
--- a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker.java
+++ b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker.java
@@ -36,20 +36,14 @@ public abstract class WebSocketClientHandshaker {
 
     private WebSocketVersion version = WebSocketVersion.UNKNOWN;
 
-    private boolean openingHandshakeCompleted = false;
+    private boolean openingHandshakeCompleted;
 
-    private String subProtocolRequest = null;
+    private String subProtocolRequest;
 
-    private String subProtocolResponse = null;
+    private String subProtocolResponse;
 
-    protected Map customHeaders = null;
+    protected Map customHeaders;
 
-    /**
-     * 
-     * @param webSocketURL
-     * @param version
-     * @param subProtocol
-     */
     public WebSocketClientHandshaker(URI webSocketURL, WebSocketVersion version, String subProtocol,
             Map customHeaders) {
         this.webSocketURL = webSocketURL;
diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker00.java b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker00.java
index 2fbfbaed54..cfe0b69b05 100644
--- a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker00.java
+++ b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker00.java
@@ -45,7 +45,7 @@ import io.netty.handler.codec.http.HttpVersion;
  */
 public class WebSocketClientHandshaker00 extends WebSocketClientHandshaker {
 
-    private byte[] expectedChallengeResponseBytes = null;
+    private byte[] expectedChallengeResponseBytes;
 
     /**
      * Constructor specifying the destination web socket location and version to initiate
diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker08.java b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker08.java
index 703a2ca789..5ee0c635fd 100644
--- a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker08.java
+++ b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker08.java
@@ -46,11 +46,11 @@ public class WebSocketClientHandshaker08 extends WebSocketClientHandshaker {
 
     public static final String MAGIC_GUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
 
-    private String expectedChallengeResponseString = null;
+    private String expectedChallengeResponseString;
 
     private static final String protocol = null;
 
-    private boolean allowExtensions = false;
+    private boolean allowExtensions;
 
     /**
      * Constructor specifying the destination web socket location and version to initiate
diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker13.java b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker13.java
index 491636b037..82a79514e8 100644
--- a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker13.java
+++ b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker13.java
@@ -46,11 +46,11 @@ public class WebSocketClientHandshaker13 extends WebSocketClientHandshaker {
 
     public static final String MAGIC_GUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
 
-    private String expectedChallengeResponseString = null;
+    private String expectedChallengeResponseString;
 
     private static final String protocol = null;
 
-    private boolean allowExtensions = false;
+    private boolean allowExtensions;
 
     /**
      * Constructor specifying the destination web socket location and version to initiate
diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketFrame.java b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketFrame.java
index 2f237915bd..9bad30d5c7 100644
--- a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketFrame.java
+++ b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketFrame.java
@@ -31,7 +31,7 @@ public abstract class WebSocketFrame {
     /**
      * RSV1, RSV2, RSV3 used for extensions
      */
-    private int rsv = 0;
+    private int rsv;
 
     /**
      * Contents of this frame
diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker.java b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker.java
index f88b72020b..fd7d29e884 100644
--- a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker.java
+++ b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker.java
@@ -34,7 +34,7 @@ public abstract class WebSocketServerHandshaker {
 
     private String subProtocols;
 
-    private String[] subProtocolsArray = null;
+    private String[] subProtocolsArray;
 
     private WebSocketVersion version = WebSocketVersion.UNKNOWN;
 
diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker08.java b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker08.java
index e26c4812c4..755ea7c992 100644
--- a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker08.java
+++ b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker08.java
@@ -49,7 +49,7 @@ public class WebSocketServerHandshaker08 extends WebSocketServerHandshaker {
 
     public static final String WEBSOCKET_08_ACCEPT_GUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
 
-    private boolean allowExtensions = false;
+    private boolean allowExtensions;
 
     /**
      * Constructor specifying the destination web socket location
diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker13.java b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker13.java
index ea470a3691..b87fc20b58 100644
--- a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker13.java
+++ b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker13.java
@@ -50,7 +50,7 @@ public class WebSocketServerHandshaker13 extends WebSocketServerHandshaker {
 
     public static final String WEBSOCKET_13_ACCEPT_GUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
 
-    private boolean allowExtensions = false;
+    private boolean allowExtensions;
 
     /**
      * Constructor specifying the destination web socket location
diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshakerFactory.java b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshakerFactory.java
index 7dc15f72dd..9badcd0d45 100644
--- a/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshakerFactory.java
+++ b/codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshakerFactory.java
@@ -32,7 +32,7 @@ public class WebSocketServerHandshakerFactory {
 
     private final String subProtocols;
 
-    private boolean allowExtensions = false;
+    private boolean allowExtensions;
 
     /**
      * Constructor specifying the destination web socket location
diff --git a/codec/src/main/java/io/netty/handler/codec/base64/Base64.java b/codec/src/main/java/io/netty/handler/codec/base64/Base64.java
index 64339345ee..f6d01c99da 100644
--- a/codec/src/main/java/io/netty/handler/codec/base64/Base64.java
+++ b/codec/src/main/java/io/netty/handler/codec/base64/Base64.java
@@ -32,7 +32,7 @@ import io.netty.buffer.HeapChannelBufferFactory;
  * @apiviz.landmark
  * @apiviz.uses io.netty.handler.codec.base64.Base64Dialect
  */
-public class Base64 {
+public final class Base64 {
 
     /** Maximum line length (76) of Base64 output. */
     private static final int MAX_LINE_LENGTH = 76;
@@ -207,7 +207,7 @@ public class Base64 {
         // We have to shift left 24 in order to flush out the 1's that appear
         // when Java treats a value as negative that is cast from a byte to an int.
         int inBuff =
-                (numSigBytes > 0? src.getByte(srcOffset    ) << 24 >>>  8 : 0) |
+                (numSigBytes > 0? src.getByte(srcOffset)     << 24 >>>  8 : 0) |
                 (numSigBytes > 1? src.getByte(srcOffset + 1) << 24 >>> 16 : 0) |
                 (numSigBytes > 2? src.getByte(srcOffset + 2) << 24 >>> 24 : 0);
 
@@ -301,9 +301,9 @@ public class Base64 {
             sbiDecode = DECODABET[sbiCrop];
 
             if (sbiDecode >= WHITE_SPACE_ENC) { // White space, Equals sign or better
-                if (sbiDecode >= EQUALS_SIGN_ENC) {
+                if (sbiDecode >= EQUALS_SIGN_ENC) { // Equals sign or better
                     b4[b4Posn ++] = sbiCrop;
-                    if (b4Posn > 3) {
+                    if (b4Posn > 3) { // Quartet built
                         outBuffPosn += decode4to3(
                                 b4, 0, dest, outBuffPosn, dialect);
                         b4Posn = 0;
@@ -312,10 +312,9 @@ public class Base64 {
                         if (sbiCrop == EQUALS_SIGN) {
                             break;
                         }
-                    } // end if: quartet built
-                } // end if: equals sign or better
-            } // end if: white space, equals sign or better
-            else {
+                    }
+                }
+            } else {
                 throw new IllegalArgumentException(
                         "bad Base64 input character at " + i + ": " +
                         src.getUnsignedByte(i) + " (decimal)");
@@ -331,18 +330,16 @@ public class Base64 {
 
         byte[] DECODABET = decodabet(dialect);
 
-        // Example: Dk==
         if (src[srcOffset + 2] == EQUALS_SIGN) {
+            // Example: Dk==
             int outBuff =
                     (DECODABET[src[srcOffset    ]] & 0xFF) << 18 |
                     (DECODABET[src[srcOffset + 1]] & 0xFF) << 12;
 
             dest.setByte(destOffset, (byte) (outBuff >>> 16));
             return 1;
-        }
-
-        // Example: DkL=
-        else if (src[srcOffset + 3] == EQUALS_SIGN) {
+        } else if (src[srcOffset + 3] == EQUALS_SIGN) {
+            // Example: DkL=
             int outBuff =
                     (DECODABET[src[srcOffset    ]] & 0xFF) << 18 |
                     (DECODABET[src[srcOffset + 1]] & 0xFF) << 12 |
@@ -351,10 +348,8 @@ public class Base64 {
             dest.setByte(destOffset    , (byte) (outBuff >>> 16));
             dest.setByte(destOffset + 1, (byte) (outBuff >>>  8));
             return 2;
-        }
-
-        // Example: DkLE
-        else {
+        } else {
+            // Example: DkLE
             int outBuff;
             try {
                 outBuff =
diff --git a/codec/src/main/java/io/netty/handler/codec/bytes/ByteArrayDecoder.java b/codec/src/main/java/io/netty/handler/codec/bytes/ByteArrayDecoder.java
index bfd305297f..c8ef66f2c4 100644
--- a/codec/src/main/java/io/netty/handler/codec/bytes/ByteArrayDecoder.java
+++ b/codec/src/main/java/io/netty/handler/codec/bytes/ByteArrayDecoder.java
@@ -56,7 +56,7 @@ public class ByteArrayDecoder extends OneToOneDecoder {
         if (!(msg instanceof ChannelBuffer)) {
             return msg;
         }
-        ChannelBuffer buf = (ChannelBuffer )msg;
+        ChannelBuffer buf = (ChannelBuffer) msg;
         byte[] array;
         if (buf.hasArray()) {
             if (buf.arrayOffset() == 0 && buf.readableBytes() == buf.capacity()) {
diff --git a/codec/src/main/java/io/netty/handler/codec/compression/ZlibEncoder.java b/codec/src/main/java/io/netty/handler/codec/compression/ZlibEncoder.java
index 960269536a..7a1834e480 100644
--- a/codec/src/main/java/io/netty/handler/codec/compression/ZlibEncoder.java
+++ b/codec/src/main/java/io/netty/handler/codec/compression/ZlibEncoder.java
@@ -157,7 +157,7 @@ public class ZlibEncoder extends OneToOneEncoder implements LifeCycleAwareChanne
                 ZlibUtil.fail(z, "initialization failure", resultCode);
             } else {
                 resultCode = z.deflateSetDictionary(dictionary, dictionary.length);
-                if (resultCode != JZlib.Z_OK){
+                if (resultCode != JZlib.Z_OK) {
                     ZlibUtil.fail(z, "failed to set the dictionary", resultCode);
                 }
             }
diff --git a/codec/src/main/java/io/netty/handler/codec/embedder/EmbeddedChannelFactory.java b/codec/src/main/java/io/netty/handler/codec/embedder/EmbeddedChannelFactory.java
index c2bd56bbf9..c7a8e197fb 100644
--- a/codec/src/main/java/io/netty/handler/codec/embedder/EmbeddedChannelFactory.java
+++ b/codec/src/main/java/io/netty/handler/codec/embedder/EmbeddedChannelFactory.java
@@ -21,7 +21,7 @@ import io.netty.channel.ChannelPipeline;
 
 /**
  */
-class EmbeddedChannelFactory implements ChannelFactory {
+final class EmbeddedChannelFactory implements ChannelFactory {
 
     static final ChannelFactory INSTANCE = new EmbeddedChannelFactory();
 
diff --git a/codec/src/main/java/io/netty/handler/codec/frame/Delimiters.java b/codec/src/main/java/io/netty/handler/codec/frame/Delimiters.java
index e00a059940..8ffc2a5255 100644
--- a/codec/src/main/java/io/netty/handler/codec/frame/Delimiters.java
+++ b/codec/src/main/java/io/netty/handler/codec/frame/Delimiters.java
@@ -21,7 +21,7 @@ import io.netty.buffer.ChannelBuffers;
 /**
  * A set of commonly used delimiters for {@link DelimiterBasedFrameDecoder}.
  */
-public class Delimiters {
+public final class Delimiters {
 
     /**
      * Returns a {@code NUL (0x00)} delimiter, which could be used for
diff --git a/codec/src/main/java/io/netty/handler/codec/frame/LengthFieldBasedFrameDecoder.java b/codec/src/main/java/io/netty/handler/codec/frame/LengthFieldBasedFrameDecoder.java
index 33d95675d9..472184bdf1 100644
--- a/codec/src/main/java/io/netty/handler/codec/frame/LengthFieldBasedFrameDecoder.java
+++ b/codec/src/main/java/io/netty/handler/codec/frame/LengthFieldBasedFrameDecoder.java
@@ -145,8 +145,8 @@ import io.netty.handler.codec.serialization.ObjectDecoder;
  * header from the frame.  If you don't want to strip the prepended header, you
  * could specify 0 for initialBytesToSkip.
  * 
- * lengthFieldOffset   = 1 (= the length of HDR1)
- * lengthFieldLength   = 2
+ * lengthFieldOffset   = 1 (= the length of HDR1)
+ * lengthFieldLength   = 2
  * lengthAdjustment    = 1 (= the length of HDR2)
  * initialBytesToStrip = 3 (= the length of HDR1 + LEN)
  *
@@ -403,14 +403,12 @@ public class LengthFieldBasedFrameDecoder extends FrameDecoder {
             this.tooLongFrameLength = 0;
             discardingTooLongFrame = false;
             if ((!failFast) ||
-                (failFast && firstDetectionOfTooLongFrame))
-            {
+                (failFast && firstDetectionOfTooLongFrame)) {
                 fail(ctx, tooLongFrameLength);
             }
         } else {
             // Keep discarding and notify handlers if necessary.
-            if (failFast && firstDetectionOfTooLongFrame)
-            {
+            if (failFast && firstDetectionOfTooLongFrame) {
                 fail(ctx, this.tooLongFrameLength);
             }
         }
diff --git a/codec/src/main/java/io/netty/handler/codec/protobuf/ProtobufDecoder.java b/codec/src/main/java/io/netty/handler/codec/protobuf/ProtobufDecoder.java
index 2aadf3552b..e15c13fa6c 100644
--- a/codec/src/main/java/io/netty/handler/codec/protobuf/ProtobufDecoder.java
+++ b/codec/src/main/java/io/netty/handler/codec/protobuf/ProtobufDecoder.java
@@ -94,7 +94,7 @@ public class ProtobufDecoder extends OneToOneDecoder {
         ChannelBuffer buf = (ChannelBuffer) msg;
         if (buf.hasArray()) {
             final int offset = buf.readerIndex();
-            if(extensionRegistry == null) {
+            if (extensionRegistry == null) {
                 return prototype.newBuilderForType().mergeFrom(
                         buf.array(), buf.arrayOffset() + offset, buf.readableBytes()).build();
             } else {
diff --git a/codec/src/main/java/io/netty/handler/codec/serialization/ClassResolvers.java b/codec/src/main/java/io/netty/handler/codec/serialization/ClassResolvers.java
index c6c756e94f..edf1ab608c 100644
--- a/codec/src/main/java/io/netty/handler/codec/serialization/ClassResolvers.java
+++ b/codec/src/main/java/io/netty/handler/codec/serialization/ClassResolvers.java
@@ -19,7 +19,7 @@ import java.lang.ref.Reference;
 import java.util.HashMap;
 import java.util.concurrent.ConcurrentHashMap;
 
-public class ClassResolvers {
+public final class ClassResolvers {
 
     /**
      * cache disabled
@@ -86,4 +86,8 @@ public class ClassResolvers {
 
         return ClassResolvers.class.getClassLoader();
     }
+
+    private ClassResolvers() {
+        // Unused
+    }
 }
diff --git a/codec/src/main/java/io/netty/handler/codec/serialization/ObjectDecoderInputStream.java b/codec/src/main/java/io/netty/handler/codec/serialization/ObjectDecoderInputStream.java
index 0d9daece52..3772b87eb6 100644
--- a/codec/src/main/java/io/netty/handler/codec/serialization/ObjectDecoderInputStream.java
+++ b/codec/src/main/java/io/netty/handler/codec/serialization/ObjectDecoderInputStream.java
@@ -191,6 +191,9 @@ public class ObjectDecoderInputStream extends InputStream implements
         return in.readInt();
     }
 
+    /**
+     * @deprecated Use {@link java.io.BufferedReader#readLine()} instead.
+     */
     @Override
     @Deprecated
     public final String readLine() throws IOException {
diff --git a/common/src/main/java/io/netty/util/CharsetUtil.java b/common/src/main/java/io/netty/util/CharsetUtil.java
index df0c4bcfb6..49c44641cf 100644
--- a/common/src/main/java/io/netty/util/CharsetUtil.java
+++ b/common/src/main/java/io/netty/util/CharsetUtil.java
@@ -26,7 +26,7 @@ import java.util.Map;
  * A utility class that provides various common operations and constants
  * related with {@link Charset} and its relevant classes.
  */
-public class CharsetUtil {
+public final class CharsetUtil {
 
     /**
      * 16-bit UTF (UCS Transformation Format) whose byte order is identified by
@@ -61,7 +61,7 @@ public class CharsetUtil {
     public static final Charset US_ASCII = Charset.forName("US-ASCII");
 
     private static final ThreadLocal> encoders =
-        new ThreadLocal>() {
+        new ThreadLocal>() {
             @Override
             protected Map initialValue() {
                 return new IdentityHashMap();
@@ -69,7 +69,7 @@ public class CharsetUtil {
         };
 
     private static final ThreadLocal> decoders =
-        new ThreadLocal>() {
+        new ThreadLocal>() {
             @Override
             protected Map initialValue() {
                 return new IdentityHashMap();
diff --git a/common/src/main/java/io/netty/util/ExternalResourceUtil.java b/common/src/main/java/io/netty/util/ExternalResourceUtil.java
index afdb5d7162..46fcda5d02 100644
--- a/common/src/main/java/io/netty/util/ExternalResourceUtil.java
+++ b/common/src/main/java/io/netty/util/ExternalResourceUtil.java
@@ -19,7 +19,7 @@ package io.netty.util;
  * A utility class that provides the convenient shutdown of
  * {@link ExternalResourceReleasable}s.
  */
-public class ExternalResourceUtil {
+public final class ExternalResourceUtil {
 
     /**
      * Releases the specified {@link ExternalResourceReleasable}s.
diff --git a/common/src/main/java/io/netty/util/HashedWheelTimer.java b/common/src/main/java/io/netty/util/HashedWheelTimer.java
index b4bfe997b7..c8f200c2ec 100644
--- a/common/src/main/java/io/netty/util/HashedWheelTimer.java
+++ b/common/src/main/java/io/netty/util/HashedWheelTimer.java
@@ -545,7 +545,7 @@ public class HashedWheelTimer implements Timer {
             }
 
             if (isCancelled()) {
-                buf.append (", cancelled");
+                buf.append(", cancelled");
             }
 
             return buf.append(')').toString();
diff --git a/common/src/main/java/io/netty/util/UnsafeDetectUtil.java b/common/src/main/java/io/netty/util/UnsafeDetectUtil.java
index 97b909b191..1feebaf549 100644
--- a/common/src/main/java/io/netty/util/UnsafeDetectUtil.java
+++ b/common/src/main/java/io/netty/util/UnsafeDetectUtil.java
@@ -20,11 +20,8 @@ import java.util.concurrent.atomic.AtomicInteger;
 
 /**
  * Utility which checks if {@value #UNSAFE} class can be found in the classpath
- *
-
-
  */
-public class UnsafeDetectUtil {
+public final class UnsafeDetectUtil {
 
     private static final String UNSAFE = "sun.misc.Unsafe";
     private static final boolean UNSAFE_FOUND = isUnsafeFound(AtomicInteger.class.getClassLoader());
diff --git a/common/src/main/java/io/netty/util/internal/AtomicFieldUpdaterUtil.java b/common/src/main/java/io/netty/util/internal/AtomicFieldUpdaterUtil.java
index f4951b8e51..7338e4cf71 100644
--- a/common/src/main/java/io/netty/util/internal/AtomicFieldUpdaterUtil.java
+++ b/common/src/main/java/io/netty/util/internal/AtomicFieldUpdaterUtil.java
@@ -20,7 +20,7 @@ import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
 
 /**
  */
-class AtomicFieldUpdaterUtil {
+final class AtomicFieldUpdaterUtil {
 
     private static final boolean AVAILABLE;
 
@@ -49,7 +49,7 @@ class AtomicFieldUpdaterUtil {
         AVAILABLE = available;
     }
 
-    static  AtomicReferenceFieldUpdater newRefUpdater(Class tclass, Class vclass, String fieldName) {
+    static  AtomicReferenceFieldUpdater newRefUpdater(Class tclass, Class vclass, String fieldName) {
         if (AVAILABLE) {
             return AtomicReferenceFieldUpdater.newUpdater(tclass, vclass, fieldName);
         } else {
diff --git a/common/src/main/java/io/netty/util/internal/ConcurrentHashMap.java b/common/src/main/java/io/netty/util/internal/ConcurrentHashMap.java
index 662481d3f4..a12b4ccc39 100644
--- a/common/src/main/java/io/netty/util/internal/ConcurrentHashMap.java
+++ b/common/src/main/java/io/netty/util/internal/ConcurrentHashMap.java
@@ -42,7 +42,7 @@ import java.util.concurrent.locks.ReentrantLock;
  * @param  the type of mapped values
  */
 public final class ConcurrentHashMap extends AbstractMap
-        implements ConcurrentMap{
+        implements ConcurrentMap {
 
     /**
      * The default initial capacity for this table, used when not otherwise
@@ -65,7 +65,7 @@ public final class ConcurrentHashMap extends AbstractMap
     /**
      * The maximum capacity, used if a higher value is implicitly specified by
      * either of the constructors with arguments.  MUST be a power of two
-     * <= 1<<30 to ensure that entries are indexable using integers.
+     * <= 1<<30 to ensure that entries are indexable using integers.
      */
     static final int MAXIMUM_CAPACITY = 1 << 30;
 
@@ -262,7 +262,7 @@ public final class ConcurrentHashMap extends AbstractMap
 
         Segment(int initialCapacity, float lf) {
             loadFactor = lf;
-            setTable(HashEntry. newArray(initialCapacity));
+            setTable(HashEntry.newArray(initialCapacity));
         }
 
         @SuppressWarnings("unchecked")
diff --git a/common/src/main/java/io/netty/util/internal/ConcurrentIdentityHashMap.java b/common/src/main/java/io/netty/util/internal/ConcurrentIdentityHashMap.java
index f16192ffa8..610bfd8c40 100644
--- a/common/src/main/java/io/netty/util/internal/ConcurrentIdentityHashMap.java
+++ b/common/src/main/java/io/netty/util/internal/ConcurrentIdentityHashMap.java
@@ -42,7 +42,7 @@ import java.util.concurrent.locks.ReentrantLock;
  * @param  the type of mapped values
  */
 public final class ConcurrentIdentityHashMap extends AbstractMap
-        implements ConcurrentMap{
+        implements ConcurrentMap {
 
     /**
      * The default initial capacity for this table, used when not otherwise
@@ -65,7 +65,7 @@ public final class ConcurrentIdentityHashMap extends AbstractMap
     /**
      * The maximum capacity, used if a higher value is implicitly specified by
      * either of the constructors with arguments.  MUST be a power of two
-     * <= 1<<30 to ensure that entries are indexable using integers.
+     * <= 1<<30 to ensure that entries are indexable using integers.
      */
     static final int MAXIMUM_CAPACITY = 1 << 30;
 
@@ -262,7 +262,7 @@ public final class ConcurrentIdentityHashMap extends AbstractMap
 
         Segment(int initialCapacity, float lf) {
             loadFactor = lf;
-            setTable(HashEntry. newArray(initialCapacity));
+            setTable(HashEntry.newArray(initialCapacity));
         }
 
         @SuppressWarnings("unchecked")
diff --git a/common/src/main/java/io/netty/util/internal/ConcurrentIdentityWeakKeyHashMap.java b/common/src/main/java/io/netty/util/internal/ConcurrentIdentityWeakKeyHashMap.java
index 23aec45e5c..b2e791a9e7 100644
--- a/common/src/main/java/io/netty/util/internal/ConcurrentIdentityWeakKeyHashMap.java
+++ b/common/src/main/java/io/netty/util/internal/ConcurrentIdentityWeakKeyHashMap.java
@@ -72,7 +72,7 @@ public final class ConcurrentIdentityWeakKeyHashMap extends AbstractMap extends AbstractMap newArray(initialCapacity));
+            setTable(HashEntry.newArray(initialCapacity));
         }
 
         @SuppressWarnings("unchecked")
diff --git a/common/src/main/java/io/netty/util/internal/ConcurrentWeakKeyHashMap.java b/common/src/main/java/io/netty/util/internal/ConcurrentWeakKeyHashMap.java
index b716bfd27e..29cc6aa1ec 100644
--- a/common/src/main/java/io/netty/util/internal/ConcurrentWeakKeyHashMap.java
+++ b/common/src/main/java/io/netty/util/internal/ConcurrentWeakKeyHashMap.java
@@ -72,7 +72,7 @@ public final class ConcurrentWeakKeyHashMap extends AbstractMap impl
     /**
      * The maximum capacity, used if a higher value is implicitly specified by
      * either of the constructors with arguments.  MUST be a power of two
-     * <= 1<<30 to ensure that entries are indexable using integers.
+     * <= 1<<30 to ensure that entries are indexable using integers.
      */
     static final int MAXIMUM_CAPACITY = 1 << 30;
 
@@ -307,7 +307,7 @@ public final class ConcurrentWeakKeyHashMap extends AbstractMap impl
 
         Segment(int initialCapacity, float lf) {
             loadFactor = lf;
-            setTable(HashEntry. newArray(initialCapacity));
+            setTable(HashEntry.newArray(initialCapacity));
         }
 
         @SuppressWarnings("unchecked")
diff --git a/common/src/main/java/io/netty/util/internal/ConversionUtil.java b/common/src/main/java/io/netty/util/internal/ConversionUtil.java
index ea263aa997..f0ad66bea9 100644
--- a/common/src/main/java/io/netty/util/internal/ConversionUtil.java
+++ b/common/src/main/java/io/netty/util/internal/ConversionUtil.java
@@ -22,7 +22,7 @@ import java.util.List;
  * Conversion utility class to parse a property represented as a string or
  * an object.
  */
-public class ConversionUtil {
+public final class ConversionUtil {
 
     /**
      * Converts the specified object into an integer.
@@ -88,8 +88,8 @@ public class ConversionUtil {
     }
 
     private static final String[] INTEGERS = {
-        "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
-        "10","11","12","13","14","15",
+        "0",  "1",  "2",  "3",  "4",  "5",  "6",  "7",  "8",  "9",
+        "10", "11", "12", "13", "14", "15",
     };
 
     public static String toString(int value) {
diff --git a/common/src/main/java/io/netty/util/internal/ExecutorUtil.java b/common/src/main/java/io/netty/util/internal/ExecutorUtil.java
index b7546ed2e6..3b40648796 100644
--- a/common/src/main/java/io/netty/util/internal/ExecutorUtil.java
+++ b/common/src/main/java/io/netty/util/internal/ExecutorUtil.java
@@ -25,7 +25,7 @@ import java.util.concurrent.TimeUnit;
  * their termination.  An {@link Executor} which is not an {@link ExecutorService}
  * will be ignored silently.
  */
-public class ExecutorUtil {
+public final class ExecutorUtil {
 
     /**
      * Returns {@code true} if and only if the specified {@code executor}
diff --git a/common/src/main/java/io/netty/util/internal/QueueFactory.java b/common/src/main/java/io/netty/util/internal/QueueFactory.java
index 575441787b..78795f3df0 100644
--- a/common/src/main/java/io/netty/util/internal/QueueFactory.java
+++ b/common/src/main/java/io/netty/util/internal/QueueFactory.java
@@ -26,7 +26,7 @@ import io.netty.util.UnsafeDetectUtil;
 
 
  */
-public class QueueFactory {
+public final class QueueFactory {
     
     private static final boolean useUnsafe = UnsafeDetectUtil.isUnsafeFound(QueueFactory.class.getClassLoader());
     
@@ -41,7 +41,7 @@ public class QueueFactory {
      * @param itemClass  the {@link Class} type which will be used as {@link BlockingQueue} items
      * @return queue     the {@link BlockingQueue} implementation
      */
-    public static final  BlockingQueue createQueue(Class itemClass) {
+    public static  BlockingQueue createQueue(Class itemClass) {
         if (useUnsafe) {
             return new LinkedTransferQueue();
         } else {
@@ -56,7 +56,7 @@ public class QueueFactory {
      * @param itemClass   the {@link Class} type which will be used as {@link BlockingQueue} items
      * @return queue      the {@link BlockingQueue} implementation
      */
-    public static final  BlockingQueue createQueue(Collection collection, Class itemClass) {
+    public static  BlockingQueue createQueue(Collection collection, Class itemClass) {
         if (useUnsafe) {
             return new LinkedTransferQueue(collection);
         } else {
diff --git a/common/src/main/java/io/netty/util/internal/StringUtil.java b/common/src/main/java/io/netty/util/internal/StringUtil.java
index 95540f1e30..ee0ab0ffa1 100644
--- a/common/src/main/java/io/netty/util/internal/StringUtil.java
+++ b/common/src/main/java/io/netty/util/internal/StringUtil.java
@@ -20,7 +20,7 @@ import java.util.Formatter;
 /**
  * String utility class.
  */
-public class StringUtil {
+public final class StringUtil {
 
     private StringUtil() {
         // Unused.
diff --git a/common/src/main/java/io/netty/util/internal/SystemPropertyUtil.java b/common/src/main/java/io/netty/util/internal/SystemPropertyUtil.java
index fde1761f91..dcdcaa41a8 100644
--- a/common/src/main/java/io/netty/util/internal/SystemPropertyUtil.java
+++ b/common/src/main/java/io/netty/util/internal/SystemPropertyUtil.java
@@ -20,7 +20,7 @@ import java.util.regex.Pattern;
 /**
  * Accesses the system property swallowing a {@link SecurityException}.
  */
-public class SystemPropertyUtil {
+public final class SystemPropertyUtil {
 
     /**
      * Returns the value of the Java system property with the specified
diff --git a/common/src/main/java/io/netty/util/internal/ThreadLocalRandom.java b/common/src/main/java/io/netty/util/internal/ThreadLocalRandom.java
index 11959f9e15..0afb9ce258 100644
--- a/common/src/main/java/io/netty/util/internal/ThreadLocalRandom.java
+++ b/common/src/main/java/io/netty/util/internal/ThreadLocalRandom.java
@@ -48,9 +48,9 @@ import java.util.Random;
  */
 final class ThreadLocalRandom extends Random {
     // same constants as Random, but must be redeclared because private
-    private final static long multiplier = 0x5DEECE66DL;
-    private final static long addend = 0xBL;
-    private final static long mask = (1L << 48) - 1;
+    private static final long multiplier = 0x5DEECE66DL;
+    private static final long addend = 0xBL;
+    private static final long mask = (1L << 48) - 1;
 
     /**
      * The random seed. We can't use super.seed.
@@ -118,7 +118,7 @@ final class ThreadLocalRandom extends Random {
     @Override
     protected int next(int bits) {
         rnd = rnd * multiplier + addend & mask;
-        return (int) (rnd >>> 48-bits);
+        return (int) (rnd >>> 48 - bits);
     }
 
     private static final long serialVersionUID = -5851777807851030925L;
diff --git a/example/src/main/java/io/netty/example/discard/DiscardClient.java b/example/src/main/java/io/netty/example/discard/DiscardClient.java
index 308d671000..0ff7e8f277 100644
--- a/example/src/main/java/io/netty/example/discard/DiscardClient.java
+++ b/example/src/main/java/io/netty/example/discard/DiscardClient.java
@@ -48,7 +48,21 @@ public class DiscardClient {
         } else {
             firstMessageSize = 256;
         }
+        
+        new DiscardClient(host, port, firstMessageSize).run();
+    }
+    
+    private final String host;
+    private final int port;
+    private final int firstMessageSize;
+    
+    public DiscardClient(String host, int port, int firstMessageSize) {
+        this.host = host;
+        this.port = port;
+        this.firstMessageSize = firstMessageSize;
+    }
 
+    public void run() {
         // Configure the client.
         ClientBootstrap bootstrap = new ClientBootstrap(
                 new NioClientSocketChannelFactory(
diff --git a/example/src/main/java/io/netty/example/discard/DiscardClientHandler.java b/example/src/main/java/io/netty/example/discard/DiscardClientHandler.java
index e8cb15de24..6d033159fe 100644
--- a/example/src/main/java/io/netty/example/discard/DiscardClientHandler.java
+++ b/example/src/main/java/io/netty/example/discard/DiscardClientHandler.java
@@ -38,7 +38,7 @@ public class DiscardClientHandler extends SimpleChannelUpstreamHandler {
     private static final Logger logger = Logger.getLogger(
             DiscardClientHandler.class.getName());
 
-    private long transferredBytes = 0;
+    private long transferredBytes;
     private final byte[] content;
 
     public DiscardClientHandler(int messageSize) {
@@ -84,7 +84,7 @@ public class DiscardClientHandler extends SimpleChannelUpstreamHandler {
 
     @Override
     public void writeComplete(ChannelHandlerContext ctx, WriteCompletionEvent e) {
-        transferredBytes =+e.getWrittenAmount();
+        transferredBytes += e.getWrittenAmount();
     }
 
     @Override
diff --git a/example/src/main/java/io/netty/example/discard/DiscardServer.java b/example/src/main/java/io/netty/example/discard/DiscardServer.java
index 67c6373705..933579416c 100644
--- a/example/src/main/java/io/netty/example/discard/DiscardServer.java
+++ b/example/src/main/java/io/netty/example/discard/DiscardServer.java
@@ -30,6 +30,11 @@ import io.netty.channel.socket.nio.NioServerSocketChannelFactory;
 public class DiscardServer {
 
     public static void main(String[] args) throws Exception {
+        new DiscardServer().run();
+
+    }
+
+    public void run() {
         // Configure the server.
         ServerBootstrap bootstrap = new ServerBootstrap(
                 new NioServerSocketChannelFactory(
diff --git a/example/src/main/java/io/netty/example/discard/DiscardServerHandler.java b/example/src/main/java/io/netty/example/discard/DiscardServerHandler.java
index e87f8e398c..19d7336c49 100644
--- a/example/src/main/java/io/netty/example/discard/DiscardServerHandler.java
+++ b/example/src/main/java/io/netty/example/discard/DiscardServerHandler.java
@@ -34,7 +34,7 @@ public class DiscardServerHandler extends SimpleChannelUpstreamHandler {
     private static final Logger logger = Logger.getLogger(
             DiscardServerHandler.class.getName());
 
-    private long transferredBytes = 0;
+    private long transferredBytes;
 
     public long getTransferredBytes() {
         return transferredBytes;
@@ -53,7 +53,7 @@ public class DiscardServerHandler extends SimpleChannelUpstreamHandler {
     @Override
     public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
         // Discard received data silently by doing nothing.
-        transferredBytes += (((ChannelBuffer) e.getMessage()).readableBytes());
+        transferredBytes += ((ChannelBuffer) e.getMessage()).readableBytes();
     }
 
     @Override
diff --git a/example/src/main/java/io/netty/example/echo/EchoClient.java b/example/src/main/java/io/netty/example/echo/EchoClient.java
index 8a9bac8e4f..08d5ed2cc6 100644
--- a/example/src/main/java/io/netty/example/echo/EchoClient.java
+++ b/example/src/main/java/io/netty/example/echo/EchoClient.java
@@ -51,7 +51,21 @@ public class EchoClient {
         } else {
             firstMessageSize = 256;
         }
+        
+        new EchoClient(host, port, firstMessageSize).run();
+    }
+    
+    private final String host;
+    private final int port;
+    private final int firstMessageSize;
+    
+    public EchoClient(String host, int port, int firstMessageSize) {
+        this.host = host;
+        this.port = port;
+        this.firstMessageSize = firstMessageSize;
+    }
 
+    public void run() {
         // Configure the client.
         ClientBootstrap bootstrap = new ClientBootstrap(
                 new NioClientSocketChannelFactory(
diff --git a/example/src/main/java/io/netty/example/echo/EchoServer.java b/example/src/main/java/io/netty/example/echo/EchoServer.java
index 51c431c234..bf02e7b3cb 100644
--- a/example/src/main/java/io/netty/example/echo/EchoServer.java
+++ b/example/src/main/java/io/netty/example/echo/EchoServer.java
@@ -30,6 +30,11 @@ import io.netty.channel.socket.nio.NioServerSocketChannelFactory;
 public class EchoServer {
 
     public static void main(String[] args) throws Exception {
+        new EchoServer().run();
+
+    }
+
+    public void run() {
         // Configure the server.
         ServerBootstrap bootstrap = new ServerBootstrap(
                 new NioServerSocketChannelFactory(
diff --git a/example/src/main/java/io/netty/example/factorial/FactorialClient.java b/example/src/main/java/io/netty/example/factorial/FactorialClient.java
index 246916fed5..565e44a79c 100644
--- a/example/src/main/java/io/netty/example/factorial/FactorialClient.java
+++ b/example/src/main/java/io/netty/example/factorial/FactorialClient.java
@@ -46,6 +46,20 @@ public class FactorialClient {
             throw new IllegalArgumentException("count must be a positive integer.");
         }
 
+        new FactorialClient(host, port, count).run();
+    }
+
+    private final String host;
+    private final int port;
+    private final int count;
+
+    public FactorialClient(String host, int port, int count) {
+        this.host = host;
+        this.port = port;
+        this.count = count;
+    }
+
+    public void run() {
         // Configure the client.
         ClientBootstrap bootstrap = new ClientBootstrap(
                 new NioClientSocketChannelFactory(
diff --git a/example/src/main/java/io/netty/example/factorial/FactorialClientHandler.java b/example/src/main/java/io/netty/example/factorial/FactorialClientHandler.java
index f6095bd677..72a98ad781 100644
--- a/example/src/main/java/io/netty/example/factorial/FactorialClientHandler.java
+++ b/example/src/main/java/io/netty/example/factorial/FactorialClientHandler.java
@@ -45,7 +45,7 @@ public class FactorialClientHandler extends SimpleChannelUpstreamHandler {
 
     // Stateful properties
     private int i = 1;
-    private int receivedMessages = 0;
+    private int receivedMessages;
     private final int count;
     final BlockingQueue answer = new LinkedBlockingQueue();
 
diff --git a/example/src/main/java/io/netty/example/factorial/FactorialServer.java b/example/src/main/java/io/netty/example/factorial/FactorialServer.java
index f102191b96..94607a8355 100644
--- a/example/src/main/java/io/netty/example/factorial/FactorialServer.java
+++ b/example/src/main/java/io/netty/example/factorial/FactorialServer.java
@@ -28,6 +28,11 @@ import io.netty.channel.socket.nio.NioServerSocketChannelFactory;
 public class FactorialServer {
 
     public static void main(String[] args) throws Exception {
+        new FactorialServer().run();
+
+    }
+
+    public void run() {
         // Configure the server.
         ServerBootstrap bootstrap = new ServerBootstrap(
                 new NioServerSocketChannelFactory(
diff --git a/example/src/main/java/io/netty/example/http/file/HttpStaticFileServerHandler.java b/example/src/main/java/io/netty/example/http/file/HttpStaticFileServerHandler.java
index 037e488b3f..29df997778 100644
--- a/example/src/main/java/io/netty/example/http/file/HttpStaticFileServerHandler.java
+++ b/example/src/main/java/io/netty/example/http/file/HttpStaticFileServerHandler.java
@@ -134,8 +134,7 @@ public class HttpStaticFileServerHandler extends SimpleChannelUpstreamHandler {
 
         // Cache Validation
         String ifModifiedSince = request.getHeader(HttpHeaders.Names.IF_MODIFIED_SINCE);
-        if (ifModifiedSince != null && !ifModifiedSince.equals(""))
-        {
+        if (ifModifiedSince != null && !ifModifiedSince.equals("")) {
             SimpleDateFormat dateFormatter = new SimpleDateFormat(HTTP_DATE_FORMAT, Locale.US);
             Date ifModifiedSinceDate = dateFormatter.parse(ifModifiedSince);
 
diff --git a/example/src/main/java/io/netty/example/http/snoop/HttpRequestHandler.java b/example/src/main/java/io/netty/example/http/snoop/HttpRequestHandler.java
index bbde904733..8c405e499d 100644
--- a/example/src/main/java/io/netty/example/http/snoop/HttpRequestHandler.java
+++ b/example/src/main/java/io/netty/example/http/snoop/HttpRequestHandler.java
@@ -140,7 +140,7 @@ public class HttpRequestHandler extends SimpleChannelUpstreamHandler {
         if (cookieString != null) {
             CookieDecoder cookieDecoder = new CookieDecoder();
             Set cookies = cookieDecoder.decode(cookieString);
-            if(!cookies.isEmpty()) {
+            if (!cookies.isEmpty()) {
                 // Reset the cookies if necessary.
                 CookieEncoder cookieEncoder = new CookieEncoder(true);
                 for (Cookie cookie : cookies) {
diff --git a/example/src/main/java/io/netty/example/http/upload/HttpClient.java b/example/src/main/java/io/netty/example/http/upload/HttpClient.java
index b893113bef..169f12f0ac 100644
--- a/example/src/main/java/io/netty/example/http/upload/HttpClient.java
+++ b/example/src/main/java/io/netty/example/http/upload/HttpClient.java
@@ -57,19 +57,19 @@ public class HttpClient {
         String baseURI = args[0];
         String postSimple, postFile, get;
         if (baseURI.endsWith("/")) {
-            postSimple = baseURI+"formpost";
-            postFile = baseURI+"formpostmultipart";
-            get = baseURI+"formget";
+            postSimple = baseURI + "formpost";
+            postFile = baseURI + "formpostmultipart";
+            get = baseURI + "formget";
         } else {
-            postSimple = baseURI+"/formpost";
-            postFile = baseURI+"/formpostmultipart";
-            get = baseURI+"/formget";
+            postSimple = baseURI + "/formpost";
+            postFile = baseURI + "/formpostmultipart";
+            get = baseURI + "/formget";
         }
         URI uriSimple;
         try {
             uriSimple = new URI(postSimple);
         } catch (URISyntaxException e) {
-            System.err.println("Error: "+e.getMessage());
+            System.err.println("Error: " + e.getMessage());
             return;
         }
         String scheme = uriSimple.getScheme() == null? "http" : uriSimple.getScheme();
@@ -94,7 +94,7 @@ public class HttpClient {
         try {
             uriFile = new URI(postFile);
         } catch (URISyntaxException e) {
-            System.err.println("Error: "+e.getMessage());
+            System.err.println("Error: " + e.getMessage());
             return;
         }
         File file = new File(args[1]);
@@ -121,7 +121,7 @@ public class HttpClient {
         DiskAttribute.baseDirectory = null; // system temp directory
 
         // Simple Get form: no factory used (not usable)
-        List> headers =
+        List> headers =
             formget(bootstrap, host, port, get, uriSimple);
         if (headers == null) {
             factory.cleanAllHttpDatas();
@@ -148,7 +148,7 @@ public class HttpClient {
      * due to limitation on request size).
      * @return the list of headers that will be used in every example after
     **/
-    private static List> formget(ClientBootstrap bootstrap, String host, int port, String get,
+    private static List> formget(ClientBootstrap bootstrap, String host, int port, String get,
             URI uriSimple) {
         // XXX /formget
         // No use of HttpPostRequestEncoder since not a POST
@@ -165,19 +165,19 @@ public class HttpClient {
         // Prepare the HTTP request.
         QueryStringEncoder encoder = new QueryStringEncoder(get);
         // add Form attribute
-        encoder.addParam("getform","GET");
-        encoder.addParam("info","first value");
-        encoder.addParam("secondinfo","secondvalue ���&");
+        encoder.addParam("getform", "GET");
+        encoder.addParam("info", "first value");
+        encoder.addParam("secondinfo", "secondvalue ���&");
         // not the big one since it is not compatible with GET size
         // encoder.addParam("thirdinfo", textArea);
         encoder.addParam("thirdinfo", "third value\r\ntest second line\r\n\r\nnew line\r\n");
-        encoder.addParam("Send","Send");
+        encoder.addParam("Send", "Send");
 
         URI uriGet;
         try {
             uriGet = new URI(encoder.toString());
         } catch (URISyntaxException e) {
-            System.err.println("Error: "+e.getMessage());
+            System.err.println("Error: " + e.getMessage());
             bootstrap.releaseExternalResources();
             return null;
         }
@@ -186,7 +186,7 @@ public class HttpClient {
                 HttpVersion.HTTP_1_1, HttpMethod.GET, uriGet.toASCIIString());
         request.setHeader(HttpHeaders.Names.HOST, host);
         request.setHeader(HttpHeaders.Names.CONNECTION, HttpHeaders.Values.CLOSE);
-        request.setHeader(HttpHeaders.Names.ACCEPT_ENCODING, HttpHeaders.Values.GZIP+","+
+        request.setHeader(HttpHeaders.Names.ACCEPT_ENCODING, HttpHeaders.Values.GZIP + "," +
                 HttpHeaders.Values.DEFLATE);
 
         request.setHeader(HttpHeaders.Names.ACCEPT_CHARSET, "ISO-8859-1,utf-8;q=0.7,*;q=0.7");
@@ -204,7 +204,7 @@ public class HttpClient {
         httpCookieEncoder.addCookie("another-cookie", "bar");
         request.setHeader(HttpHeaders.Names.COOKIE, httpCookieEncoder.encode());
 
-        List> headers = request.getHeaders();
+        List> headers = request.getHeaders();
         // send request
         channel.write(request);
 
@@ -228,7 +228,7 @@ public class HttpClient {
     private static List formpost(ClientBootstrap bootstrap,
             String host, int port,
             URI uriSimple, File file, HttpDataFactory factory,
-            List> headers) {
+            List> headers) {
         // XXX /formpost
         // Start the connection attempt.
         ChannelFuture future = bootstrap.connect(new InetSocketAddress(host, port));
@@ -264,12 +264,12 @@ public class HttpClient {
 
         // add Form attribute
         try {
-            bodyRequestEncoder.addBodyAttribute("getform","POST");
-            bodyRequestEncoder.addBodyAttribute("info","first value");
-            bodyRequestEncoder.addBodyAttribute("secondinfo","secondvalue ���&");
+            bodyRequestEncoder.addBodyAttribute("getform", "POST");
+            bodyRequestEncoder.addBodyAttribute("info", "first value");
+            bodyRequestEncoder.addBodyAttribute("secondinfo", "secondvalue ���&");
             bodyRequestEncoder.addBodyAttribute("thirdinfo", textArea);
             bodyRequestEncoder.addBodyFileUpload("myfile", file, "application/x-zip-compressed", false);
-            bodyRequestEncoder.addBodyAttribute("Send","Send");
+            bodyRequestEncoder.addBodyAttribute("Send", "Send");
         } catch (NullPointerException e) {
             // should not be since not null args
             e.printStackTrace();
@@ -322,7 +322,7 @@ public class HttpClient {
      */
     private static void formpostmultipart(ClientBootstrap bootstrap, String host, int port,
             URI uriFile, File file, HttpDataFactory factory,
-            List> headers, List bodylist) {
+            List> headers, List bodylist) {
         // XXX /formpostmultipart
         // Start the connection attempt.
         ChannelFuture future = bootstrap.connect(new InetSocketAddress(host, port));
@@ -399,591 +399,591 @@ public class HttpClient {
 
     // use to simulate a big TEXTAREA field in a form
     private static final String textArea =
-        "lkjlkjlKJLKJLKJLKJLJlkj lklkj\r\n\r\nLKJJJJJJJJKKKKKKKKKKKKKKK ����&\r\n\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
-        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n"+
+        "lkjlkjlKJLKJLKJLKJLJlkj lklkj\r\n\r\nLKJJJJJJJJKKKKKKKKKKKKKKK ����&\r\n\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
+        "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n" +
         "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM\r\n";
 
 }
diff --git a/example/src/main/java/io/netty/example/http/upload/HttpRequestHandler.java b/example/src/main/java/io/netty/example/http/upload/HttpRequestHandler.java
index 974be7f05d..abcdbe72b1 100644
--- a/example/src/main/java/io/netty/example/http/upload/HttpRequestHandler.java
+++ b/example/src/main/java/io/netty/example/http/upload/HttpRequestHandler.java
@@ -66,14 +66,14 @@ public class HttpRequestHandler extends SimpleChannelUpstreamHandler {
 
     private volatile HttpRequest request;
 
-    private volatile boolean readingChunks = false;
+    private volatile boolean readingChunks;
 
     private final StringBuilder responseContent = new StringBuilder();
 
     private static final HttpDataFactory factory = new DefaultHttpDataFactory(
             DefaultHttpDataFactory.MINSIZE); // Disk if size exceed MINSIZE
 
-    private HttpPostRequestDecoder decoder = null;
+    private HttpPostRequestDecoder decoder;
     static {
         DiskFileUpload.deleteOnExitTemporaryFile = true; // should delete file
                                                          // on exit (in normal
diff --git a/example/src/main/java/io/netty/example/http/websocketx/autobahn/WebSocketServerHandler.java b/example/src/main/java/io/netty/example/http/websocketx/autobahn/WebSocketServerHandler.java
index fe7cc225f3..6c7d9e2c5e 100644
--- a/example/src/main/java/io/netty/example/http/websocketx/autobahn/WebSocketServerHandler.java
+++ b/example/src/main/java/io/netty/example/http/websocketx/autobahn/WebSocketServerHandler.java
@@ -50,7 +50,7 @@ import io.netty.util.CharsetUtil;
 public class WebSocketServerHandler extends SimpleChannelUpstreamHandler {
     private static final InternalLogger logger = InternalLoggerFactory.getInstance(WebSocketServerHandler.class);
 
-    private WebSocketServerHandshaker handshaker = null;
+    private WebSocketServerHandshaker handshaker;
 
     @Override
     public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
diff --git a/example/src/main/java/io/netty/example/http/websocketx/client/App.java b/example/src/main/java/io/netty/example/http/websocketx/client/App.java
index 8ff1817491..9b899afc96 100644
--- a/example/src/main/java/io/netty/example/http/websocketx/client/App.java
+++ b/example/src/main/java/io/netty/example/http/websocketx/client/App.java
@@ -36,13 +36,7 @@ import io.netty.handler.codec.http.websocketx.WebSocketVersion;
 public class App {
 
     public static void main(String[] args) throws Exception {
-        ConsoleHandler ch = new ConsoleHandler();
-        ch.setLevel(Level.FINE);
-        Logger.getLogger("").addHandler(ch);
-        Logger.getLogger("").setLevel(Level.FINE);
-
-        runClient();
-        System.exit(0);
+        new App().runClient();
     }
 
     /**
@@ -50,7 +44,7 @@ public class App {
      * 
      * @throws Exception
      */
-    public static void runClient() throws Exception {
+    public void runClient() throws Exception {
 
         MyCallbackHandler callbackHandler = new MyCallbackHandler();
         WebSocketClientFactory factory = new WebSocketClientFactory();
@@ -91,7 +85,7 @@ public class App {
      * Our web socket callback handler for this app
      */
     public static class MyCallbackHandler implements WebSocketCallback {
-        public boolean connected = false;
+        public boolean connected;
         public ArrayList messagesReceived = new ArrayList();
 
         public MyCallbackHandler() {
diff --git a/example/src/main/java/io/netty/example/http/websocketx/client/WebSocketClientHandler.java b/example/src/main/java/io/netty/example/http/websocketx/client/WebSocketClientHandler.java
index 8790813ee6..b23527cad2 100644
--- a/example/src/main/java/io/netty/example/http/websocketx/client/WebSocketClientHandler.java
+++ b/example/src/main/java/io/netty/example/http/websocketx/client/WebSocketClientHandler.java
@@ -53,9 +53,9 @@ public class WebSocketClientHandler extends SimpleChannelUpstreamHandler impleme
     private URI url;
     private final WebSocketCallback callback;
     private Channel channel;
-    private WebSocketClientHandshaker handshaker = null;
+    private WebSocketClientHandshaker handshaker;
     private final WebSocketVersion version;
-    private Map customHeaders = null;
+    private Map customHeaders;
 
     public WebSocketClientHandler(ClientBootstrap bootstrap, URI url, WebSocketVersion version,
             WebSocketCallback callback, Map customHeaders) {
diff --git a/example/src/main/java/io/netty/example/http/websocketx/client/WebSocketException.java b/example/src/main/java/io/netty/example/http/websocketx/client/WebSocketException.java
index ed227a7925..455238d559 100644
--- a/example/src/main/java/io/netty/example/http/websocketx/client/WebSocketException.java
+++ b/example/src/main/java/io/netty/example/http/websocketx/client/WebSocketException.java
@@ -24,14 +24,12 @@ package io.netty.example.http.websocketx.client;
 import java.io.IOException;
 
 /**
- * Copied from https://github.com/cgbystrom/netty-tools
- * 
  * A WebSocket related exception
+ *
+ * Copied from https://github.com/cgbystrom/netty-tools
  */
 public class WebSocketException extends IOException {
 
-    /**
- */
     private static final long serialVersionUID = 1L;
 
     public WebSocketException(String s) {
@@ -41,4 +39,4 @@ public class WebSocketException extends IOException {
     public WebSocketException(String s, Throwable throwable) {
         super(s, throwable);
     }
-}
\ No newline at end of file
+}
diff --git a/example/src/main/java/io/netty/example/http/websocketx/server/WebSocketServerHandler.java b/example/src/main/java/io/netty/example/http/websocketx/server/WebSocketServerHandler.java
index 7319dbaa8a..af9b2431ea 100644
--- a/example/src/main/java/io/netty/example/http/websocketx/server/WebSocketServerHandler.java
+++ b/example/src/main/java/io/netty/example/http/websocketx/server/WebSocketServerHandler.java
@@ -52,7 +52,7 @@ public class WebSocketServerHandler extends SimpleChannelUpstreamHandler {
 
     private static final String WEBSOCKET_PATH = "/websocket";
 
-    private WebSocketServerHandshaker handshaker = null;
+    private WebSocketServerHandshaker handshaker;
 
     @Override
     public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
diff --git a/example/src/main/java/io/netty/example/http/websocketx/server/WebSocketServerIndexPage.java b/example/src/main/java/io/netty/example/http/websocketx/server/WebSocketServerIndexPage.java
index aea46fbb16..11ed2f518e 100644
--- a/example/src/main/java/io/netty/example/http/websocketx/server/WebSocketServerIndexPage.java
+++ b/example/src/main/java/io/netty/example/http/websocketx/server/WebSocketServerIndexPage.java
@@ -22,7 +22,7 @@ import io.netty.util.CharsetUtil;
 /**
  * Generates the demo HTML page which is served at http://localhost:8080/
  */
-public class WebSocketServerIndexPage {
+public final class WebSocketServerIndexPage {
 
     private static final String NEWLINE = "\r\n";
 
@@ -89,4 +89,8 @@ public class WebSocketServerIndexPage {
                                 + NEWLINE + "" + NEWLINE + "" + NEWLINE + "" + NEWLINE,
                         CharsetUtil.US_ASCII);
     }
+
+    private WebSocketServerIndexPage() {
+        // Unused
+    }
 }
diff --git a/example/src/main/java/io/netty/example/http/websocketx/sslserver/WebSocketSslServerHandler.java b/example/src/main/java/io/netty/example/http/websocketx/sslserver/WebSocketSslServerHandler.java
index c5dc57e373..2fd0f235af 100644
--- a/example/src/main/java/io/netty/example/http/websocketx/sslserver/WebSocketSslServerHandler.java
+++ b/example/src/main/java/io/netty/example/http/websocketx/sslserver/WebSocketSslServerHandler.java
@@ -52,7 +52,7 @@ public class WebSocketSslServerHandler extends SimpleChannelUpstreamHandler {
 
     private static final String WEBSOCKET_PATH = "/websocket";
 
-    private WebSocketServerHandshaker handshaker = null;
+    private WebSocketServerHandshaker handshaker;
 
     @Override
     public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
diff --git a/example/src/main/java/io/netty/example/http/websocketx/sslserver/WebSocketSslServerIndexPage.java b/example/src/main/java/io/netty/example/http/websocketx/sslserver/WebSocketSslServerIndexPage.java
index a06353bb89..ad11d8e9a5 100644
--- a/example/src/main/java/io/netty/example/http/websocketx/sslserver/WebSocketSslServerIndexPage.java
+++ b/example/src/main/java/io/netty/example/http/websocketx/sslserver/WebSocketSslServerIndexPage.java
@@ -22,7 +22,7 @@ import io.netty.util.CharsetUtil;
 /**
  * Generates the demo HTML page which is served at http://localhost:8080/
  */
-public class WebSocketSslServerIndexPage {
+public final class WebSocketSslServerIndexPage {
 
     private static final String NEWLINE = "\r\n";
 
@@ -89,4 +89,8 @@ public class WebSocketSslServerIndexPage {
                                 + NEWLINE + "" + NEWLINE + "" + NEWLINE + "" + NEWLINE,
                         CharsetUtil.US_ASCII);
     }
+
+    private WebSocketSslServerIndexPage() {
+        // Unused
+    }
 }
diff --git a/example/src/main/java/io/netty/example/http/websocketx/sslserver/WebSocketSslServerSslContext.java b/example/src/main/java/io/netty/example/http/websocketx/sslserver/WebSocketSslServerSslContext.java
index b189d0de22..b21cd26502 100644
--- a/example/src/main/java/io/netty/example/http/websocketx/sslserver/WebSocketSslServerSslContext.java
+++ b/example/src/main/java/io/netty/example/http/websocketx/sslserver/WebSocketSslServerSslContext.java
@@ -28,7 +28,7 @@ import io.netty.logging.InternalLoggerFactory;
 /**
  * Creates a {@link SSLContext} for just server certificates.
  */
-public class WebSocketSslServerSslContext {
+public final class WebSocketSslServerSslContext {
 
     private static final InternalLogger logger = InternalLoggerFactory.getInstance(WebSocketSslServerSslContext.class);
     private static final String PROTOCOL = "TLS";
diff --git a/example/src/main/java/io/netty/example/http/websocketx/sslserver/package-info.java b/example/src/main/java/io/netty/example/http/websocketx/sslserver/package-info.java
index f7865b5cae..9ba84ee1b5 100644
--- a/example/src/main/java/io/netty/example/http/websocketx/sslserver/package-info.java
+++ b/example/src/main/java/io/netty/example/http/websocketx/sslserver/package-info.java
@@ -18,19 +18,16 @@
  * 

This package contains an example web socket web server with server SSL. *

To run this example, follow the steps below: *

- *
Step 1. Generate Your Key
- *
- * keytool -genkey -keystore mySrvKeystore -keyalg RSA. - * Make sure that you set the key password to be the same the key file password. - *
- *
Step 2. Specify your key store file and password as system properties
- *
- * -Dkeystore.file.path=<path to mySrvKeystore> -Dkeystore.file.password=<password> - *
- *
Step 3. Run WebSocketSslServer as a Java application
- *
- * Once started, you can test the web server against your browser by navigating to https://localhost:8081/ - *
+ *
Step 1. Generate Your Key + *
+ * keytool -genkey -keystore mySrvKeystore -keyalg RSA. + * Make sure that you set the key password to be the same the key file password. + *
Step 2. Specify your key store file and password as system properties + *
+ * -Dkeystore.file.path=<path to mySrvKeystore> -Dkeystore.file.password=<password> + *
Step 3. Run WebSocketSslServer as a Java application + *
+ * Once started, you can test the web server against your browser by navigating to https://localhost:8081/ *
*

To find out more about setting up key stores, refer to this * giude. diff --git a/example/src/main/java/io/netty/example/iostream/IOStream.java b/example/src/main/java/io/netty/example/iostream/IOStream.java index 487a0a010f..624e2c0f34 100755 --- a/example/src/main/java/io/netty/example/iostream/IOStream.java +++ b/example/src/main/java/io/netty/example/iostream/IOStream.java @@ -15,8 +15,18 @@ */ package io.netty.example.iostream; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + import io.netty.bootstrap.ClientBootstrap; -import io.netty.channel.*; +import io.netty.channel.Channel; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelPipeline; +import io.netty.channel.ChannelPipelineFactory; +import io.netty.channel.DefaultChannelPipeline; +import io.netty.channel.MessageEvent; +import io.netty.channel.SimpleChannelHandler; import io.netty.channel.iostream.IOStreamAddress; import io.netty.channel.iostream.IOStreamChannelFactory; import io.netty.handler.codec.frame.DelimiterBasedFrameDecoder; @@ -24,69 +34,66 @@ import io.netty.handler.codec.frame.Delimiters; import io.netty.handler.codec.string.StringDecoder; import io.netty.handler.codec.string.StringEncoder; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; - /** * An example demonstrating the use of the {@link io.netty.channel.iostream.IOStreamChannel}. */ public class IOStream { - private static volatile boolean running = true; + private static volatile boolean running = true; - public static void main(String[] args) { + public static void main(String[] args) { - final ExecutorService executorService = Executors.newCachedThreadPool(); - final ClientBootstrap bootstrap = new ClientBootstrap(new IOStreamChannelFactory(executorService)); + final ExecutorService executorService = Executors.newCachedThreadPool(); + final ClientBootstrap bootstrap = new ClientBootstrap(new IOStreamChannelFactory(executorService)); - // Configure the event pipeline factory. - bootstrap.setPipelineFactory(new ChannelPipelineFactory() { - @Override - public ChannelPipeline getPipeline() throws Exception { - DefaultChannelPipeline pipeline = new DefaultChannelPipeline(); - pipeline.addLast("framer", new DelimiterBasedFrameDecoder(8192, Delimiters.lineDelimiter())); - pipeline.addLast("decoder", new StringDecoder()); - pipeline.addLast("encoder", new StringEncoder()); - pipeline.addLast("loggingHandler", new SimpleChannelHandler() { - @Override - public void messageReceived(final ChannelHandlerContext ctx, final MessageEvent e) - throws Exception { + // Configure the event pipeline factory. + bootstrap.setPipelineFactory(new ChannelPipelineFactory() { + @Override + public ChannelPipeline getPipeline() throws Exception { + DefaultChannelPipeline pipeline = new DefaultChannelPipeline(); + pipeline.addLast("framer", new DelimiterBasedFrameDecoder(8192, Delimiters.lineDelimiter())); + pipeline.addLast("decoder", new StringDecoder()); + pipeline.addLast("encoder", new StringEncoder()); + pipeline.addLast("loggingHandler", new SimpleChannelHandler() { + @Override + public void messageReceived(final ChannelHandlerContext ctx, final MessageEvent e) + throws Exception { - final String message = (String) e.getMessage(); - synchronized (System.out) { - e.getChannel().write("Message received: " + message); - } - if ("exit".equals(message)) { - IOStream.running = false; - } - super.messageReceived(ctx, e); - } - } - ); - return pipeline; - } - }); + final String message = (String) e.getMessage(); + synchronized (System.out) { + e.getChannel().write("Message received: " + message); + } + if ("exit".equals(message)) { + IOStream.running = false; + } + super.messageReceived(ctx, e); + } + } + ); + return pipeline; + } + }); - // Make a new connection. - ChannelFuture connectFuture = bootstrap.connect(new IOStreamAddress(System.in, System.out)); + // Make a new connection. + ChannelFuture connectFuture = bootstrap.connect(new IOStreamAddress(System.in, System.out)); - // Wait until the connection is made successfully. - Channel channel = connectFuture.awaitUninterruptibly().getChannel(); + // Wait until the connection is made successfully. + Channel channel = connectFuture.awaitUninterruptibly().getChannel(); - while (running) { - try { - Thread.sleep(100); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } + while (running) { + try { + Thread.sleep(100); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } - // Close the connection. - channel.close().awaitUninterruptibly(); + // Close the connection. + channel.close().awaitUninterruptibly(); - // Shut down all thread pools to exit. - bootstrap.releaseExternalResources(); + // Shut down all thread pools to exit. + bootstrap.releaseExternalResources(); - } + } } diff --git a/example/src/main/java/io/netty/example/local/LocalExampleMultthreaded.java b/example/src/main/java/io/netty/example/local/LocalExampleMultthreaded.java index 77e5103b93..4b1ebadb8e 100644 --- a/example/src/main/java/io/netty/example/local/LocalExampleMultthreaded.java +++ b/example/src/main/java/io/netty/example/local/LocalExampleMultthreaded.java @@ -66,7 +66,7 @@ public class LocalExampleMultthreaded { // Read commands from array String[] commands = { "First", "Second", "Third", "quit" }; for (int j = 0; j < 5 ; j++) { - System.err.println("Start "+j); + System.err.println("Start " + j); ChannelFuture channelFuture = cb.connect(socketAddress); channelFuture.awaitUninterruptibly(); if (! channelFuture.isSuccess()) { @@ -87,7 +87,7 @@ public class LocalExampleMultthreaded { channelFuture.getChannel().close(); // Wait until the connection is closed or the connection attempt fails. channelFuture.getChannel().getCloseFuture().awaitUninterruptibly(); - System.err.println("End "+j); + System.err.println("End " + j); } // Release all resources diff --git a/example/src/main/java/io/netty/example/local/LocalServerPipelineFactory.java b/example/src/main/java/io/netty/example/local/LocalServerPipelineFactory.java index afa536820e..14c0e21ebc 100644 --- a/example/src/main/java/io/netty/example/local/LocalServerPipelineFactory.java +++ b/example/src/main/java/io/netty/example/local/LocalServerPipelineFactory.java @@ -73,7 +73,7 @@ public class LocalServerPipelineFactory implements ChannelPipelineFactory { Channels.close(e.getChannel()); return; } - System.err.println("SERVER:"+msg); + System.err.println("SERVER:" + msg); // Write back Channels.write(e.getChannel(), msg); } diff --git a/example/src/main/java/io/netty/example/proxy/HexDumpProxy.java b/example/src/main/java/io/netty/example/proxy/HexDumpProxy.java index 06692b5360..d09a999ffb 100644 --- a/example/src/main/java/io/netty/example/proxy/HexDumpProxy.java +++ b/example/src/main/java/io/netty/example/proxy/HexDumpProxy.java @@ -42,6 +42,20 @@ public class HexDumpProxy { String remoteHost = args[1]; int remotePort = Integer.parseInt(args[2]); + run(localPort, remoteHost, remotePort); + } + + private final int localPort; + private final String remoteHost; + private final int remotePort; + + public HexDumpProxy(int localPort, String remoteHost, int remotePort) { + this.localPort = localPort; + this.remoteHost = remoteHost; + this.remotePort = remotePort; + } + + public void run() { System.err.println( "Proxying *:" + localPort + " to " + remoteHost + ':' + remotePort + " ..."); diff --git a/example/src/main/java/io/netty/example/sctp/SctpClientHandler.java b/example/src/main/java/io/netty/example/sctp/SctpClientHandler.java index 9c09e0a4e7..561fda3d69 100644 --- a/example/src/main/java/io/netty/example/sctp/SctpClientHandler.java +++ b/example/src/main/java/io/netty/example/sctp/SctpClientHandler.java @@ -15,14 +15,18 @@ */ package io.netty.example.sctp; -import io.netty.buffer.ChannelBuffers; -import io.netty.channel.*; -import io.netty.channel.sctp.SctpPayload; - import java.util.concurrent.atomic.AtomicLong; import java.util.logging.Level; import java.util.logging.Logger; +import io.netty.buffer.ChannelBuffers; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelStateEvent; +import io.netty.channel.ExceptionEvent; +import io.netty.channel.MessageEvent; +import io.netty.channel.SimpleChannelUpstreamHandler; +import io.netty.channel.sctp.SctpPayload; + /** * Handler implementation for the echo client. It initiates the message * and upon receiving echo back to the server diff --git a/example/src/main/java/io/netty/example/securechat/SecureChatKeyStore.java b/example/src/main/java/io/netty/example/securechat/SecureChatKeyStore.java index 8d5b96a361..e859bdbb7e 100644 --- a/example/src/main/java/io/netty/example/securechat/SecureChatKeyStore.java +++ b/example/src/main/java/io/netty/example/securechat/SecureChatKeyStore.java @@ -30,7 +30,7 @@ import java.io.InputStream; * -keystore cert.jks *

*/ -public class SecureChatKeyStore { +public final class SecureChatKeyStore { private static final short[] DATA = { 0xfe, 0xed, 0xfe, 0xed, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, diff --git a/example/src/main/java/io/netty/example/securechat/SecureChatSslContextFactory.java b/example/src/main/java/io/netty/example/securechat/SecureChatSslContextFactory.java index edd3c61758..c46de1c73c 100644 --- a/example/src/main/java/io/netty/example/securechat/SecureChatSslContextFactory.java +++ b/example/src/main/java/io/netty/example/securechat/SecureChatSslContextFactory.java @@ -49,7 +49,7 @@ import io.netty.handler.ssl.SslHandler; * to validate the client certificate. * */ -public class SecureChatSslContextFactory { +public final class SecureChatSslContextFactory { private static final String PROTOCOL = "TLS"; private static final SSLContext SERVER_CONTEXT; @@ -99,4 +99,8 @@ public class SecureChatSslContextFactory { public static SSLContext getClientContext() { return CLIENT_CONTEXT; } + + private SecureChatSslContextFactory() { + // Unused + } } diff --git a/example/src/main/java/io/netty/example/uptime/UptimeClientHandler.java b/example/src/main/java/io/netty/example/uptime/UptimeClientHandler.java index f3fce5f542..d934a8e1ec 100644 --- a/example/src/main/java/io/netty/example/uptime/UptimeClientHandler.java +++ b/example/src/main/java/io/netty/example/uptime/UptimeClientHandler.java @@ -84,8 +84,7 @@ public class UptimeClientHandler extends SimpleChannelUpstreamHandler { if (cause instanceof ReadTimeoutException) { // The connection was OK but there was no traffic for last period. println("Disconnecting due to no inbound traffic"); - } - else { + } else { cause.printStackTrace(); } ctx.getChannel().close(); diff --git a/handler/src/main/java/io/netty/handler/execution/ChainedExecutor.java b/handler/src/main/java/io/netty/handler/execution/ChainedExecutor.java index 12068a3aac..8fd95c958d 100644 --- a/handler/src/main/java/io/netty/handler/execution/ChainedExecutor.java +++ b/handler/src/main/java/io/netty/handler/execution/ChainedExecutor.java @@ -28,7 +28,7 @@ import java.util.concurrent.Executor; * * */ -public class ChainedExecutor implements Executor, ExternalResourceReleasable{ +public class ChainedExecutor implements Executor, ExternalResourceReleasable { private final Executor cur; private final Executor next; @@ -43,9 +43,15 @@ public class ChainedExecutor implements Executor, ExternalResourceReleasable{ * @param next the {@link Executor} to use if the {@link ChannelEventRunnableFilter} does not match */ public ChainedExecutor(ChannelEventRunnableFilter filter, Executor cur, Executor next) { - if (cur == null) throw new NullPointerException("cur"); - if (next == null) throw new NullPointerException("next"); - if (filter == null) throw new NullPointerException("filter"); + if (cur == null) { + throw new NullPointerException("cur"); + } + if (next == null) { + throw new NullPointerException("next"); + } + if (filter == null) { + throw new NullPointerException("filter"); + } this.cur = cur; this.next = next; diff --git a/handler/src/main/java/io/netty/handler/execution/ChannelDownstreamEventRunnable.java b/handler/src/main/java/io/netty/handler/execution/ChannelDownstreamEventRunnable.java index 39782183e8..de48f1db1a 100644 --- a/handler/src/main/java/io/netty/handler/execution/ChannelDownstreamEventRunnable.java +++ b/handler/src/main/java/io/netty/handler/execution/ChannelDownstreamEventRunnable.java @@ -22,7 +22,7 @@ import io.netty.channel.ChannelHandlerContext; /** * A {@link ChannelEventRunnable} which sends the specified {@link ChannelEvent} downstream. */ -public final class ChannelDownstreamEventRunnable extends ChannelEventRunnable{ +public final class ChannelDownstreamEventRunnable extends ChannelEventRunnable { public ChannelDownstreamEventRunnable(ChannelHandlerContext ctx, ChannelEvent e) { super(ctx, e); diff --git a/handler/src/main/java/io/netty/handler/execution/ChannelEventRunnable.java b/handler/src/main/java/io/netty/handler/execution/ChannelEventRunnable.java index 66a35df55b..b119e7a66a 100644 --- a/handler/src/main/java/io/netty/handler/execution/ChannelEventRunnable.java +++ b/handler/src/main/java/io/netty/handler/execution/ChannelEventRunnable.java @@ -19,7 +19,7 @@ import io.netty.channel.ChannelEvent; import io.netty.channel.ChannelHandlerContext; import io.netty.util.EstimatableObjectWrapper; -public abstract class ChannelEventRunnable implements Runnable, EstimatableObjectWrapper{ +public abstract class ChannelEventRunnable implements Runnable, EstimatableObjectWrapper { protected final ChannelHandlerContext ctx; protected final ChannelEvent e; diff --git a/handler/src/main/java/io/netty/handler/execution/OrderedMemoryAwareThreadPoolExecutor.java b/handler/src/main/java/io/netty/handler/execution/OrderedMemoryAwareThreadPoolExecutor.java index a6cfd6637d..c2c6da494f 100644 --- a/handler/src/main/java/io/netty/handler/execution/OrderedMemoryAwareThreadPoolExecutor.java +++ b/handler/src/main/java/io/netty/handler/execution/OrderedMemoryAwareThreadPoolExecutor.java @@ -290,7 +290,7 @@ public class OrderedMemoryAwareThreadPoolExecutor extends tasks.add(command); - if (isRunning.get() == false) { + if (!isRunning.get()) { doUnorderedExecute(this); } } diff --git a/handler/src/main/java/io/netty/handler/execution/filter/ChannelDownstreamEventRunnableFilter.java b/handler/src/main/java/io/netty/handler/execution/filter/ChannelDownstreamEventRunnableFilter.java index 8ef60cd885..54629c6c0e 100644 --- a/handler/src/main/java/io/netty/handler/execution/filter/ChannelDownstreamEventRunnableFilter.java +++ b/handler/src/main/java/io/netty/handler/execution/filter/ChannelDownstreamEventRunnableFilter.java @@ -22,7 +22,7 @@ import io.netty.handler.execution.ChannelEventRunnable; * {@link ChannelEventRunnableFilter} implementation which matches {@link ChannelDownstreamEventRunnable} * */ -public class ChannelDownstreamEventRunnableFilter implements ChannelEventRunnableFilter{ +public class ChannelDownstreamEventRunnableFilter implements ChannelEventRunnableFilter { @Override public boolean filter(ChannelEventRunnable event) { diff --git a/handler/src/main/java/io/netty/handler/execution/filter/ChannelEventRunnableFilter.java b/handler/src/main/java/io/netty/handler/execution/filter/ChannelEventRunnableFilter.java index bf3778ccc2..99e42c30e8 100644 --- a/handler/src/main/java/io/netty/handler/execution/filter/ChannelEventRunnableFilter.java +++ b/handler/src/main/java/io/netty/handler/execution/filter/ChannelEventRunnableFilter.java @@ -22,8 +22,8 @@ import io.netty.handler.execution.ChannelEventRunnable; public interface ChannelEventRunnableFilter { /** - * Return true if the {@link ChannelEventRunnable} should get handled by the {@link Executor} + * Return true if the {@link ChannelEventRunnable} should get handled by the {@link Executor} * */ - public boolean filter(ChannelEventRunnable event); + boolean filter(ChannelEventRunnable event); } diff --git a/handler/src/main/java/io/netty/handler/execution/filter/ChannelUpstreamEventRunnableFilter.java b/handler/src/main/java/io/netty/handler/execution/filter/ChannelUpstreamEventRunnableFilter.java index 0614b16787..bca5ea7767 100644 --- a/handler/src/main/java/io/netty/handler/execution/filter/ChannelUpstreamEventRunnableFilter.java +++ b/handler/src/main/java/io/netty/handler/execution/filter/ChannelUpstreamEventRunnableFilter.java @@ -23,7 +23,7 @@ import io.netty.handler.execution.ChannelEventRunnable; * * */ -public class ChannelUpstreamEventRunnableFilter implements ChannelEventRunnableFilter{ +public class ChannelUpstreamEventRunnableFilter implements ChannelEventRunnableFilter { @Override public boolean filter(ChannelEventRunnable event) { diff --git a/handler/src/main/java/io/netty/handler/ipfilter/CIDR.java b/handler/src/main/java/io/netty/handler/ipfilter/CIDR.java index 0cc9cb20e3..b0a4857daa 100644 --- a/handler/src/main/java/io/netty/handler/ipfilter/CIDR.java +++ b/handler/src/main/java/io/netty/handler/ipfilter/CIDR.java @@ -23,252 +23,212 @@ import java.util.StringTokenizer; /** */ -public abstract class CIDR implements Comparable -{ - /** - * The base address of the CIDR notation - */ - protected InetAddress baseAddress; +public abstract class CIDR implements Comparable { + /** The base address of the CIDR notation */ + protected InetAddress baseAddress; - /** - * The mask used in the CIDR notation - */ - protected int cidrMask; + /** The mask used in the CIDR notation */ + protected int cidrMask; - /** - * Create CIDR using the CIDR Notation - * @param baseAddress - * @param cidrMask - * @return the generated CIDR - * @throws UnknownHostException - */ - public static CIDR newCIDR(InetAddress baseAddress, int cidrMask) throws UnknownHostException - { - if (cidrMask < 0) - { - throw new UnknownHostException("Invalid mask length used: " + cidrMask); - } - if (baseAddress instanceof Inet4Address) - { - if (cidrMask > 32) - { + /** + * Create CIDR using the CIDR Notation + * + * @return the generated CIDR + */ + public static CIDR newCIDR(InetAddress baseAddress, int cidrMask) throws UnknownHostException { + if (cidrMask < 0) { throw new UnknownHostException("Invalid mask length used: " + cidrMask); - } - return new CIDR4((Inet4Address) baseAddress, cidrMask); - } - // IPv6. - if (cidrMask > 128) - { - throw new UnknownHostException("Invalid mask length used: " + cidrMask); - } - return new CIDR6((Inet6Address) baseAddress, cidrMask); - } - - /** - * Create CIDR using the normal Notation - * @param baseAddress - * @param scidrMask - * @return the generated CIDR - * @throws UnknownHostException - */ - public static CIDR newCIDR(InetAddress baseAddress, String scidrMask) throws UnknownHostException - { - int cidrMask = getNetMask(scidrMask); - if (cidrMask < 0) - { - throw new UnknownHostException("Invalid mask length used: " + cidrMask); - } - if (baseAddress instanceof Inet4Address) - { - if (cidrMask > 32) - { + } + if (baseAddress instanceof Inet4Address) { + if (cidrMask > 32) { + throw new UnknownHostException("Invalid mask length used: " + cidrMask); + } + return new CIDR4((Inet4Address) baseAddress, cidrMask); + } + // IPv6. + if (cidrMask > 128) { throw new UnknownHostException("Invalid mask length used: " + cidrMask); - } - return new CIDR4((Inet4Address) baseAddress, cidrMask); - } - cidrMask += 96; - // IPv6. - if (cidrMask > 128) - { - throw new UnknownHostException("Invalid mask length used: " + cidrMask); - } - return new CIDR6((Inet6Address) baseAddress, cidrMask); - } + } + return new CIDR6((Inet6Address) baseAddress, cidrMask); + } - /** - * Create CIDR using the CIDR or normal Notation
- * i.e.: - * CIDR subnet = newCIDR ("10.10.10.0/24"); or - * CIDR subnet = newCIDR ("1fff:0:0a88:85a3:0:0:ac1f:8001/24"); or - * CIDR subnet = newCIDR ("10.10.10.0/255.255.255.0"); - * @param cidr - * @return the generated CIDR - * @throws UnknownHostException - */ - public static CIDR newCIDR(String cidr) throws UnknownHostException - { - int p = cidr.indexOf("/"); - if (p < 0) - { - throw new UnknownHostException("Invalid CIDR notation used: " + cidr); - } - String addrString = cidr.substring(0, p); - String maskString = cidr.substring(p + 1); - InetAddress addr = addressStringToInet(addrString); - int mask = 0; - if (maskString.indexOf(".") < 0) - { - mask = parseInt(maskString, -1); - } - else - { - mask = getNetMask(maskString); - if (addr instanceof Inet6Address) - { - mask += 96; - } - } - if (mask < 0) - { - throw new UnknownHostException("Invalid mask length used: " + maskString); - } - return newCIDR(addr, mask); - } + /** + * Create CIDR using the normal Notation + * + * @return the generated CIDR + */ + public static CIDR newCIDR(InetAddress baseAddress, String scidrMask) throws UnknownHostException { + int cidrMask = getNetMask(scidrMask); + if (cidrMask < 0) { + throw new UnknownHostException("Invalid mask length used: " + cidrMask); + } + if (baseAddress instanceof Inet4Address) { + if (cidrMask > 32) { + throw new UnknownHostException("Invalid mask length used: " + cidrMask); + } + return new CIDR4((Inet4Address) baseAddress, cidrMask); + } + cidrMask += 96; + // IPv6. + if (cidrMask > 128) { + throw new UnknownHostException("Invalid mask length used: " + cidrMask); + } + return new CIDR6((Inet6Address) baseAddress, cidrMask); + } - /** @return the baseAddress of the CIDR block. */ - public InetAddress getBaseAddress() - { - return baseAddress; - } + /** + * Create CIDR using the CIDR or normal Notation
+ * i.e.: + * CIDR subnet = newCIDR ("10.10.10.0/24"); or + * CIDR subnet = newCIDR ("1fff:0:0a88:85a3:0:0:ac1f:8001/24"); or + * CIDR subnet = newCIDR ("10.10.10.0/255.255.255.0"); + * + * @return the generated CIDR + */ + public static CIDR newCIDR(String cidr) throws UnknownHostException { + int p = cidr.indexOf("/"); + if (p < 0) { + throw new UnknownHostException("Invalid CIDR notation used: " + cidr); + } + String addrString = cidr.substring(0, p); + String maskString = cidr.substring(p + 1); + InetAddress addr = addressStringToInet(addrString); + int mask = 0; + if (maskString.indexOf(".") < 0) { + mask = parseInt(maskString, -1); + } else { + mask = getNetMask(maskString); + if (addr instanceof Inet6Address) { + mask += 96; + } + } + if (mask < 0) { + throw new UnknownHostException("Invalid mask length used: " + maskString); + } + return newCIDR(addr, mask); + } - /** @return the Mask length. */ - public int getMask() - { - return cidrMask; - } + /** @return the baseAddress of the CIDR block. */ + public InetAddress getBaseAddress() { + return baseAddress; + } - /** @return the textual CIDR notation. */ - @Override - public String toString() - { - return baseAddress.getHostAddress() + "/" + cidrMask; - } + /** @return the Mask length. */ + public int getMask() { + return cidrMask; + } - /** @return the end address of this block. */ - public abstract InetAddress getEndAddress(); + /** @return the textual CIDR notation. */ + @Override + public String toString() { + return baseAddress.getHostAddress() + "/" + cidrMask; + } - /** - * Compares the given InetAddress against the CIDR and returns true if - * the ip is in the subnet-ip-range and false if not. - * @param inetAddress - * @return returns true if the given IP address is inside the currently - * set network. - */ - public abstract boolean contains(InetAddress inetAddress); + /** @return the end address of this block. */ + public abstract InetAddress getEndAddress(); - /* (non-Javadoc) - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public boolean equals(Object arg0) { - if (!(arg0 instanceof CIDR)) { - return false; - } - return (this.compareTo((CIDR) arg0) == 0); - } + /** + * Compares the given InetAddress against the CIDR and returns true if + * the ip is in the subnet-ip-range and false if not. + * + * @return returns true if the given IP address is inside the currently + * set network. + */ + public abstract boolean contains(InetAddress inetAddress); - /** Convert an IPv4 or IPv6 textual representation into an - * InetAddress. - * @param addr - * @return the created InetAddress - * @throws UnknownHostException - */ - private static InetAddress addressStringToInet(String addr) throws UnknownHostException - { - return InetAddress.getByName(addr); - } + @Override + public boolean equals(Object arg0) { + if (!(arg0 instanceof CIDR)) { + return false; + } + return this.compareTo((CIDR) arg0) == 0; + } + + @Override + public int hashCode() { + return baseAddress.hashCode(); + } - /** - * Get the Subnet's Netmask in Decimal format.
- * i.e.: getNetMask("255.255.255.0") returns the integer CIDR mask - * @param netMask a network mask - * @return the integer CIDR mask - * */ - private static int getNetMask(String netMask) - { - StringTokenizer nm = new StringTokenizer(netMask, "."); - int i = 0; - int[] netmask = new int[4]; - while (nm.hasMoreTokens()) - { - netmask[i] = Integer.parseInt(nm.nextToken()); - i++; - } - int mask1 = 0; - for (i = 0; i < 4; i++) - { - mask1 += Integer.bitCount(netmask[i]); - } - return mask1; - } + /** + * Convert an IPv4 or IPv6 textual representation into an + * InetAddress. + * + * @return the created InetAddress + */ + private static InetAddress addressStringToInet(String addr) throws UnknownHostException { + return InetAddress.getByName(addr); + } - /** @param intstr a string containing an integer. - * @param def the default if the string does not contain a valid - * integer. - * @return the inetAddress from the integer - */ - private static int parseInt(String intstr, int def) - { - Integer res; - if (intstr == null) - { - return def; - } - try - { - res = Integer.decode(intstr); - } - catch (Exception e) - { - res = new Integer(def); - } - return res.intValue(); - } + /** + * Get the Subnet's Netmask in Decimal format.
+ * i.e.: getNetMask("255.255.255.0") returns the integer CIDR mask + * + * @param netMask a network mask + * @return the integer CIDR mask + */ + private static int getNetMask(String netMask) { + StringTokenizer nm = new StringTokenizer(netMask, "."); + int i = 0; + int[] netmask = new int[4]; + while (nm.hasMoreTokens()) { + netmask[i] = Integer.parseInt(nm.nextToken()); + i++; + } + int mask1 = 0; + for (i = 0; i < 4; i++) { + mask1 += Integer.bitCount(netmask[i]); + } + return mask1; + } - /** - * Compute a byte representation of IpV4 from a IpV6 - * @param address - * @return the byte representation - * @throws IllegalArgumentException if the IpV6 cannot be mapped to IpV4 - */ - public static byte[] getIpV4FromIpV6(Inet6Address address) throws IllegalArgumentException - { - byte[] baddr = address.getAddress(); - for (int i = 0; i < 9; i++) - { - if (baddr[i] != 0) - { + /** + * @param intstr a string containing an integer. + * @param def the default if the string does not contain a valid + * integer. + * @return the inetAddress from the integer + */ + private static int parseInt(String intstr, int def) { + Integer res; + if (intstr == null) { + return def; + } + try { + res = Integer.decode(intstr); + } catch (Exception e) { + res = new Integer(def); + } + return res.intValue(); + } + + /** + * Compute a byte representation of IpV4 from a IpV6 + * + * @return the byte representation + * @throws IllegalArgumentException if the IpV6 cannot be mapped to IpV4 + */ + public static byte[] getIpV4FromIpV6(Inet6Address address) { + byte[] baddr = address.getAddress(); + for (int i = 0; i < 9; i++) { + if (baddr[i] != 0) { + throw new IllegalArgumentException("This IPv6 address cannot be used in IPv4 context"); + } + } + if (baddr[10] != 0 && baddr[10] != 0xFF || baddr[11] != 0 && baddr[11] != 0xFF) { throw new IllegalArgumentException("This IPv6 address cannot be used in IPv4 context"); - } - } - if (baddr[10] != 0 && baddr[10] != 0xFF || baddr[11] != 0 && baddr[11] != 0xFF) - { - throw new IllegalArgumentException("This IPv6 address cannot be used in IPv4 context"); - } - return new byte[] - {baddr[12], baddr[13], baddr[14], baddr[15]}; - } + } + return new byte[] + {baddr[12], baddr[13], baddr[14], baddr[15]}; + } - /** - * Compute a byte representation of IpV6 from a IpV4 - * @param address - * @return the byte representation - * @throws IllegalArgumentException if the IpV6 cannot be mapped to IpV4 - */ - public static byte[] getIpV6FromIpV4(Inet4Address address) throws IllegalArgumentException - { - byte[] baddr = address.getAddress(); - return new byte[] - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, baddr[0], baddr[1], baddr[2], baddr[3]}; - } + /** + * Compute a byte representation of IpV6 from a IpV4 + * + * @return the byte representation + * @throws IllegalArgumentException if the IpV6 cannot be mapped to IpV4 + */ + public static byte[] getIpV6FromIpV4(Inet4Address address) { + byte[] baddr = address.getAddress(); + return new byte[] + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, baddr[0], baddr[1], baddr[2], baddr[3]}; + } } diff --git a/handler/src/main/java/io/netty/handler/ipfilter/CIDR4.java b/handler/src/main/java/io/netty/handler/ipfilter/CIDR4.java index 9135584078..ab6e773da4 100644 --- a/handler/src/main/java/io/netty/handler/ipfilter/CIDR4.java +++ b/handler/src/main/java/io/netty/handler/ipfilter/CIDR4.java @@ -22,175 +22,141 @@ import java.net.UnknownHostException; /** */ -public class CIDR4 extends CIDR -{ - /** - * The integer for the base address - */ - private int addressInt; +public class CIDR4 extends CIDR { + /** The integer for the base address */ + private int addressInt; - /** - * The integer for the end address - */ - private final int addressEndInt; + /** The integer for the end address */ + private final int addressEndInt; - /** - * @param newaddr - * @param mask - */ - protected CIDR4(Inet4Address newaddr, int mask) - { - cidrMask = mask; - addressInt = ipv4AddressToInt(newaddr); - int newmask = ipv4PrefixLengthToMask(mask); - addressInt &= newmask; - try - { - baseAddress = intToIPv4Address(addressInt); - } - catch (UnknownHostException e) - { - // this should never happen - } - addressEndInt = addressInt + ipv4PrefixLengthToLength(cidrMask) - 1; - } + /** + * @param newaddr + * @param mask + */ + protected CIDR4(Inet4Address newaddr, int mask) { + cidrMask = mask; + addressInt = ipv4AddressToInt(newaddr); + int newmask = ipv4PrefixLengthToMask(mask); + addressInt &= newmask; + try { + baseAddress = intToIPv4Address(addressInt); + } catch (UnknownHostException e) { + // this should never happen + } + addressEndInt = addressInt + ipv4PrefixLengthToLength(cidrMask) - 1; + } - @Override - public InetAddress getEndAddress() - { - try - { - return intToIPv4Address(addressEndInt); - } - catch (UnknownHostException e) - { - // this should never happen - return null; - } - } + @Override + public InetAddress getEndAddress() { + try { + return intToIPv4Address(addressEndInt); + } catch (UnknownHostException e) { + // this should never happen + return null; + } + } - @Override - public int compareTo(CIDR arg) - { - if (arg instanceof CIDR6) - { - byte[] address = getIpV4FromIpV6((Inet6Address) arg.baseAddress); - int net = ipv4AddressToInt(address); - if (net == addressInt && arg.cidrMask == cidrMask) - { - return 0; - } - if (net < addressInt) - { + @Override + public int compareTo(CIDR arg) { + if (arg instanceof CIDR6) { + byte[] address = getIpV4FromIpV6((Inet6Address) arg.baseAddress); + int net = ipv4AddressToInt(address); + if (net == addressInt && arg.cidrMask == cidrMask) { + return 0; + } + if (net < addressInt) { + return 1; + } else if (net > addressInt) { + return -1; + } else if (arg.cidrMask < cidrMask) { + return -1; + } return 1; - } - else if (net > addressInt) - { + } + CIDR4 o = (CIDR4) arg; + if (o.addressInt == addressInt && o.cidrMask == cidrMask) { + return 0; + } + if (o.addressInt < addressInt) { + return 1; + } else if (o.addressInt > addressInt) { return -1; - } - else if (arg.cidrMask < cidrMask) - { + } else if (o.cidrMask < cidrMask) { + // greater Mask means less IpAddresses so -1 return -1; - } - return 1; - } - CIDR4 o = (CIDR4) arg; - if (o.addressInt == addressInt && o.cidrMask == cidrMask) - { - return 0; - } - if (o.addressInt < addressInt) - { - return 1; - } - else if (o.addressInt > addressInt) - { - return -1; - } - else if (o.cidrMask < cidrMask) - { - // greater Mask means less IpAddresses so -1 - return -1; - } - return 1; - } + } + return 1; + } - /* (non-Javadoc) + /* (non-Javadoc) * @see io.netty.handler.ipfilter.CIDR#contains(java.net.InetAddress) */ - @Override - public boolean contains(InetAddress inetAddress) - { - int search = ipv4AddressToInt(inetAddress); - return search >= addressInt && search <= addressEndInt; - } + @Override + public boolean contains(InetAddress inetAddress) { + int search = ipv4AddressToInt(inetAddress); + return search >= addressInt && search <= addressEndInt; + } - /** Given an IPv4 baseAddress length, return the block length. I.e., a - * baseAddress length of 24 will return 256. */ - private static int ipv4PrefixLengthToLength(int prefix_length) - { - return 1 << 32 - prefix_length; - } + /** + * Given an IPv4 baseAddress length, return the block length. I.e., a + * baseAddress length of 24 will return 256. + */ + private static int ipv4PrefixLengthToLength(int prefix_length) { + return 1 << 32 - prefix_length; + } - /** Given a baseAddress length, return a netmask. I.e, a baseAddress length - * of 24 will return 0xFFFFFF00. */ - private static int ipv4PrefixLengthToMask(int prefix_length) - { - return ~((1 << 32 - prefix_length) - 1); - } + /** + * Given a baseAddress length, return a netmask. I.e, a baseAddress length + * of 24 will return 0xFFFFFF00. + */ + private static int ipv4PrefixLengthToMask(int prefix_length) { + return ~((1 << 32 - prefix_length) - 1); + } - /** Convert an integer into an (IPv4) InetAddress. - * @param addr - * @return the created InetAddress - * @throws UnknownHostException - * @throws UnknownHostException - */ - private static InetAddress intToIPv4Address(int addr) throws UnknownHostException - { - byte[] a = new byte[4]; - a[0] = (byte) (addr >> 24 & 0xFF); - a[1] = (byte) (addr >> 16 & 0xFF); - a[2] = (byte) (addr >> 8 & 0xFF); - a[3] = (byte) (addr & 0xFF); - return InetAddress.getByAddress(a); - } + /** + * Convert an integer into an (IPv4) InetAddress. + * + * @return the created InetAddress + */ + private static InetAddress intToIPv4Address(int addr) throws UnknownHostException { + byte[] a = new byte[4]; + a[0] = (byte) (addr >> 24 & 0xFF); + a[1] = (byte) (addr >> 16 & 0xFF); + a[2] = (byte) (addr >> 8 & 0xFF); + a[3] = (byte) (addr & 0xFF); + return InetAddress.getByAddress(a); + } - /** Given an IPv4 address, convert it into an integer. - * @param addr - * @return the integer representation of the InetAddress - * - * @throws IllegalArgumentException if the address is really an - * IPv6 address. - */ - private static int ipv4AddressToInt(InetAddress addr) - { - byte[] address = null; - if (addr instanceof Inet6Address) - { - address = getIpV4FromIpV6((Inet6Address) addr); - } - else - { - address = addr.getAddress(); - } - return ipv4AddressToInt(address); - } + /** + * Given an IPv4 address, convert it into an integer. + * + * @return the integer representation of the InetAddress + * @throws IllegalArgumentException if the address is really an + * IPv6 address. + */ + private static int ipv4AddressToInt(InetAddress addr) { + byte[] address = null; + if (addr instanceof Inet6Address) { + address = getIpV4FromIpV6((Inet6Address) addr); + } else { + address = addr.getAddress(); + } + return ipv4AddressToInt(address); + } - /** Given an IPv4 address as array of bytes, convert it into an integer. - * @param address - * @return the integer representation of the InetAddress - * - * @throws IllegalArgumentException if the address is really an - * IPv6 address. - */ - private static int ipv4AddressToInt(byte[] address) - { - int net = 0; - for (byte addres : address) - { - net <<= 8; - net |= addres & 0xFF; - } - return net; - } + /** + * Given an IPv4 address as array of bytes, convert it into an integer. + * + * @return the integer representation of the InetAddress + * @throws IllegalArgumentException if the address is really an + * IPv6 address. + */ + private static int ipv4AddressToInt(byte[] address) { + int net = 0; + for (byte addres : address) { + net <<= 8; + net |= addres & 0xFF; + } + return net; + } } diff --git a/handler/src/main/java/io/netty/handler/ipfilter/CIDR6.java b/handler/src/main/java/io/netty/handler/ipfilter/CIDR6.java index f56bf8d6c0..f47260afa6 100644 --- a/handler/src/main/java/io/netty/handler/ipfilter/CIDR6.java +++ b/handler/src/main/java/io/netty/handler/ipfilter/CIDR6.java @@ -26,175 +26,140 @@ import io.netty.logging.InternalLoggerFactory; /** */ -public class CIDR6 extends CIDR -{ +public class CIDR6 extends CIDR { - private static final InternalLogger logger = InternalLoggerFactory.getInstance(CIDR6.class); + private static final InternalLogger logger = InternalLoggerFactory.getInstance(CIDR6.class); - /** - * The big integer for the base address - */ - private BigInteger addressBigInt; + /** The big integer for the base address */ + private BigInteger addressBigInt; - /** - * The big integer for the end address - */ - private final BigInteger addressEndBigInt; + /** The big integer for the end address */ + private final BigInteger addressEndBigInt; - /** - * @param newaddress - * @param newmask - */ - protected CIDR6(Inet6Address newaddress, int newmask) - { - cidrMask = newmask; - addressBigInt = ipv6AddressToBigInteger(newaddress); - BigInteger mask = ipv6CidrMaskToMask(newmask); - try - { - addressBigInt = addressBigInt.and(mask); - baseAddress = bigIntToIPv6Address(addressBigInt); - } - catch (UnknownHostException e) - { - // this should never happen. - } - addressEndBigInt = addressBigInt.add(ipv6CidrMaskToBaseAddress(cidrMask)).subtract(BigInteger.ONE); - } + /** + * @param newaddress + * @param newmask + */ + protected CIDR6(Inet6Address newaddress, int newmask) { + cidrMask = newmask; + addressBigInt = ipv6AddressToBigInteger(newaddress); + BigInteger mask = ipv6CidrMaskToMask(newmask); + try { + addressBigInt = addressBigInt.and(mask); + baseAddress = bigIntToIPv6Address(addressBigInt); + } catch (UnknownHostException e) { + // this should never happen. + } + addressEndBigInt = addressBigInt.add(ipv6CidrMaskToBaseAddress(cidrMask)).subtract(BigInteger.ONE); + } - @Override - public InetAddress getEndAddress() - { - try - { - return bigIntToIPv6Address(addressEndBigInt); - } - catch (UnknownHostException e) - { - logger.error("invalid ip address calculated as an end address"); - return null; - } - } + @Override + public InetAddress getEndAddress() { + try { + return bigIntToIPv6Address(addressEndBigInt); + } catch (UnknownHostException e) { + logger.error("invalid ip address calculated as an end address"); + return null; + } + } - @Override - public int compareTo(CIDR arg) - { - if (arg instanceof CIDR4) - { - BigInteger net = ipv6AddressToBigInteger(arg.baseAddress); - int res = net.compareTo(addressBigInt); - if (res == 0) - { - if (arg.cidrMask == cidrMask) - { - return 0; + @Override + public int compareTo(CIDR arg) { + if (arg instanceof CIDR4) { + BigInteger net = ipv6AddressToBigInteger(arg.baseAddress); + int res = net.compareTo(addressBigInt); + if (res == 0) { + if (arg.cidrMask == cidrMask) { + return 0; + } else if (arg.cidrMask < cidrMask) { + return -1; + } + return 1; } - else if (arg.cidrMask < cidrMask) - { - return -1; + return res; + } + CIDR6 o = (CIDR6) arg; + if (o.addressBigInt.equals(addressBigInt) && o.cidrMask == cidrMask) { + return 0; + } + int res = o.addressBigInt.compareTo(addressBigInt); + if (res == 0) { + if (o.cidrMask < cidrMask) { + // greater Mask means less IpAddresses so -1 + return -1; } return 1; - } - return res; - } - CIDR6 o = (CIDR6) arg; - if (o.addressBigInt.equals(addressBigInt) && o.cidrMask == cidrMask) - { - return 0; - } - int res = o.addressBigInt.compareTo(addressBigInt); - if (res == 0) - { - if (o.cidrMask < cidrMask) - { - // greater Mask means less IpAddresses so -1 - return -1; - } - return 1; - } - return res; - } + } + return res; + } - /* (non-Javadoc) + /* (non-Javadoc) * @see io.netty.handler.ipfilter.CIDR#contains(java.net.InetAddress) */ - @Override - public boolean contains(InetAddress inetAddress) - { - BigInteger search = ipv6AddressToBigInteger(inetAddress); - return search.compareTo(addressBigInt) >= 0 && search.compareTo(addressEndBigInt) <= 0; - } + @Override + public boolean contains(InetAddress inetAddress) { + BigInteger search = ipv6AddressToBigInteger(inetAddress); + return search.compareTo(addressBigInt) >= 0 && search.compareTo(addressEndBigInt) <= 0; + } - /** Given an IPv6 baseAddress length, return the block length. I.e., a - * baseAddress length of 96 will return 2**32. */ - private static BigInteger ipv6CidrMaskToBaseAddress(int cidrMask) - { - return BigInteger.ONE.shiftLeft(128 - cidrMask); - } + /** + * Given an IPv6 baseAddress length, return the block length. I.e., a + * baseAddress length of 96 will return 2**32. + */ + private static BigInteger ipv6CidrMaskToBaseAddress(int cidrMask) { + return BigInteger.ONE.shiftLeft(128 - cidrMask); + } - private static BigInteger ipv6CidrMaskToMask(int cidrMask) - { - return BigInteger.ONE.shiftLeft(128 - cidrMask).subtract(BigInteger.ONE).not(); - } + private static BigInteger ipv6CidrMaskToMask(int cidrMask) { + return BigInteger.ONE.shiftLeft(128 - cidrMask).subtract(BigInteger.ONE).not(); + } - /** Given an IPv6 address, convert it into a BigInteger. - * @param addr - * @return the integer representation of the InetAddress - * - * @throws IllegalArgumentException if the address is not an IPv6 - * address. - */ - private static BigInteger ipv6AddressToBigInteger(InetAddress addr) - { - byte[] ipv6; - if (addr instanceof Inet4Address) - { - ipv6 = getIpV6FromIpV4((Inet4Address) addr); - } - else - { - ipv6 = addr.getAddress(); - } - if (ipv6[0] == -1) - { - return new BigInteger(1, ipv6); - } - return new BigInteger(ipv6); - } + /** + * Given an IPv6 address, convert it into a BigInteger. + * + * @return the integer representation of the InetAddress + * @throws IllegalArgumentException if the address is not an IPv6 + * address. + */ + private static BigInteger ipv6AddressToBigInteger(InetAddress addr) { + byte[] ipv6; + if (addr instanceof Inet4Address) { + ipv6 = getIpV6FromIpV4((Inet4Address) addr); + } else { + ipv6 = addr.getAddress(); + } + if (ipv6[0] == -1) { + return new BigInteger(1, ipv6); + } + return new BigInteger(ipv6); + } - /** Convert a big integer into an IPv6 address. - * @param addr - * @return the inetAddress from the integer - * - * @throws UnknownHostException if the big integer is too large, - * and thus an invalid IPv6 address. - */ - private static InetAddress bigIntToIPv6Address(BigInteger addr) throws UnknownHostException - { - byte[] a = new byte[16]; - byte[] b = addr.toByteArray(); - if (b.length > 16 && !(b.length == 17 && b[0] == 0)) - { - throw new UnknownHostException("invalid IPv6 address (too big)"); - } - if (b.length == 16) - { - return InetAddress.getByAddress(b); - } - // handle the case where the IPv6 address starts with "FF". - if (b.length == 17) - { - System.arraycopy(b, 1, a, 0, 16); - } - else - { - // copy the address into a 16 byte array, zero-filled. - int p = 16 - b.length; - for (int i = 0; i < b.length; i++) - { - a[p + i] = b[i]; - } - } - return InetAddress.getByAddress(a); - } + /** + * Convert a big integer into an IPv6 address. + * + * @return the inetAddress from the integer + * @throws UnknownHostException if the big integer is too large, + * and thus an invalid IPv6 address. + */ + private static InetAddress bigIntToIPv6Address(BigInteger addr) throws UnknownHostException { + byte[] a = new byte[16]; + byte[] b = addr.toByteArray(); + if (b.length > 16 && !(b.length == 17 && b[0] == 0)) { + throw new UnknownHostException("invalid IPv6 address (too big)"); + } + if (b.length == 16) { + return InetAddress.getByAddress(b); + } + // handle the case where the IPv6 address starts with "FF". + if (b.length == 17) { + System.arraycopy(b, 1, a, 0, 16); + } else { + // copy the address into a 16 byte array, zero-filled. + int p = 16 - b.length; + for (int i = 0; i < b.length; i++) { + a[p + i] = b[i]; + } + } + return InetAddress.getByAddress(a); + } } diff --git a/handler/src/main/java/io/netty/handler/ipfilter/IpFilterListener.java b/handler/src/main/java/io/netty/handler/ipfilter/IpFilterListener.java index fe0be8540e..2ae727508a 100644 --- a/handler/src/main/java/io/netty/handler/ipfilter/IpFilterListener.java +++ b/handler/src/main/java/io/netty/handler/ipfilter/IpFilterListener.java @@ -23,51 +23,45 @@ import io.netty.channel.ChannelHandlerContext; /** * The listener interface for receiving ipFilter events. - * + * * @see IpFilteringHandler - * - */ -public interface IpFilterListener -{ - - /** - * Called when the channel has the CONNECTED status and the channel was allowed by a previous call to accept(). - * This method enables your implementation to send a message back to the client before closing - * or whatever you need. This method returns a ChannelFuture on which the implementation - * can wait uninterruptibly before continuing.
- * For instance, If a message is sent back, the corresponding ChannelFuture has to be returned. - * @param ctx - * @param e - * @param inetSocketAddress the remote {@link InetSocketAddress} from client - * @return the associated ChannelFuture to be waited for before closing the channel. Null is allowed. - */ - ChannelFuture allowed(ChannelHandlerContext ctx, ChannelEvent e, InetSocketAddress inetSocketAddress); +public interface IpFilterListener { - /** - * Called when the channel has the CONNECTED status and the channel was refused by a previous call to accept(). - * This method enables your implementation to send a message back to the client before closing - * or whatever you need. This method returns a ChannelFuture on which the implementation - * will wait uninterruptibly before closing the channel.
- * For instance, If a message is sent back, the corresponding ChannelFuture has to be returned. - * @param ctx - * @param e - * @param inetSocketAddress the remote {@link InetSocketAddress} from client - * @return the associated ChannelFuture to be waited for before closing the channel. Null is allowed. - */ - ChannelFuture refused(ChannelHandlerContext ctx, ChannelEvent e, InetSocketAddress inetSocketAddress); + /** + * Called when the channel has the CONNECTED status and the channel was allowed by a previous call to accept(). + * This method enables your implementation to send a message back to the client before closing + * or whatever you need. This method returns a ChannelFuture on which the implementation + * can wait uninterruptibly before continuing.
+ * For instance, If a message is sent back, the corresponding ChannelFuture has to be returned. + * + * @param inetSocketAddress the remote {@link InetSocketAddress} from client + * @return the associated ChannelFuture to be waited for before closing the channel. Null is allowed. + */ + ChannelFuture allowed(ChannelHandlerContext ctx, ChannelEvent e, InetSocketAddress inetSocketAddress); - /** - * Called in handleUpstream, if this channel was previously blocked, - * to check if whatever the event, it should be passed to the next entry in the pipeline.
- * If one wants to not block events, just overridden this method by returning always true.

- * Note that OPENED and BOUND events are still passed to the next entry in the pipeline since - * those events come out before the CONNECTED event and so the possibility to filter the connection. - * @param ctx - * @param e - * @return True if the event should continue, False if the event should not continue - * since this channel was blocked by this filter - */ - boolean continues(ChannelHandlerContext ctx, ChannelEvent e); + /** + * Called when the channel has the CONNECTED status and the channel was refused by a previous call to accept(). + * This method enables your implementation to send a message back to the client before closing + * or whatever you need. This method returns a ChannelFuture on which the implementation + * will wait uninterruptibly before closing the channel.
+ * For instance, If a message is sent back, the corresponding ChannelFuture has to be returned. + * + * @param inetSocketAddress the remote {@link InetSocketAddress} from client + * @return the associated ChannelFuture to be waited for before closing the channel. Null is allowed. + */ + ChannelFuture refused(ChannelHandlerContext ctx, ChannelEvent e, InetSocketAddress inetSocketAddress); + + /** + * Called in handleUpstream, if this channel was previously blocked, + * to check if whatever the event, it should be passed to the next entry in the pipeline.
+ * If one wants to not block events, just overridden this method by returning always true.

+ * Note that OPENED and BOUND events are still passed to the next entry in the pipeline since + * those events come out before the CONNECTED event and so the possibility to filter the connection. + * + * @return True if the event should continue, False if the event should not continue + * since this channel was blocked by this filter + */ + boolean continues(ChannelHandlerContext ctx, ChannelEvent e); } diff --git a/handler/src/main/java/io/netty/handler/ipfilter/IpFilterRule.java b/handler/src/main/java/io/netty/handler/ipfilter/IpFilterRule.java index 322670d3cf..31e540c7a3 100644 --- a/handler/src/main/java/io/netty/handler/ipfilter/IpFilterRule.java +++ b/handler/src/main/java/io/netty/handler/ipfilter/IpFilterRule.java @@ -15,20 +15,11 @@ */ package io.netty.handler.ipfilter; -/** - * This Interface defines an Ip Filter Rule. - */ -public interface IpFilterRule extends IpSet -{ - /** - * - * @return True if this Rule is an ALLOW rule - */ - boolean isAllowRule(); +/** This Interface defines an Ip Filter Rule. */ +public interface IpFilterRule extends IpSet { + /** @return True if this Rule is an ALLOW rule */ + boolean isAllowRule(); - /** - * - * @return True if this Rule is a DENY rule - */ - boolean isDenyRule(); + /** @return True if this Rule is a DENY rule */ + boolean isDenyRule(); } diff --git a/handler/src/main/java/io/netty/handler/ipfilter/IpFilterRuleHandler.java b/handler/src/main/java/io/netty/handler/ipfilter/IpFilterRuleHandler.java index 8aacdb7730..a0a9d1089e 100644 --- a/handler/src/main/java/io/netty/handler/ipfilter/IpFilterRuleHandler.java +++ b/handler/src/main/java/io/netty/handler/ipfilter/IpFilterRuleHandler.java @@ -49,277 +49,214 @@ import io.netty.channel.ChannelHandlerContext; * if possible.


* This handler should be created only once and reused on every pipeline since it handles * a global status of what is allowed or blocked.

- * + *

* Note that {@link IpSubnetFilterRule} which supports IPV4 and IPV6 should be used with as much as * possible no mixed IP protocol. Both IPV4 and IPV6 are supported but a mix (IpFilter in IPV6 notation * and the address from the channel in IPV4, or the reverse) can lead to wrong result. */ @Sharable -public class IpFilterRuleHandler extends IpFilteringHandlerImpl -{ - /** - * List of {@link IpFilterRule} - */ - private final CopyOnWriteArrayList ipFilterRuleList = new CopyOnWriteArrayList(); +public class IpFilterRuleHandler extends IpFilteringHandlerImpl { + /** List of {@link IpFilterRule} */ + private final CopyOnWriteArrayList ipFilterRuleList = new CopyOnWriteArrayList(); - /** - * Constructor from a new list of IpFilterRule - * @param newList - */ - public IpFilterRuleHandler(List newList) - { - if (newList != null) - { - ipFilterRuleList.addAll(newList); - } - } + /** Constructor from a new list of IpFilterRule */ + public IpFilterRuleHandler(List newList) { + if (newList != null) { + ipFilterRuleList.addAll(newList); + } + } - /** - * Empty constructor (no IpFilterRule in the List at construction). In such a situation, - * empty list implies allow all. - */ - public IpFilterRuleHandler() - { - } + /** + * Empty constructor (no IpFilterRule in the List at construction). In such a situation, + * empty list implies allow all. + */ + public IpFilterRuleHandler() { + } - // Below are methods directly inspired from CopyOnWriteArrayList methods - /** - * Add an ipFilterRule in the list at the end - * @param ipFilterRule - */ - public void add(IpFilterRule ipFilterRule) - { - if (ipFilterRule == null) - { - throw new NullPointerException("IpFilterRule can not be null"); - } - ipFilterRuleList.add(ipFilterRule); - } + // Below are methods directly inspired from CopyOnWriteArrayList methods - /** - * Add an ipFilterRule in the list at the specified position (shifting to the right other elements) - * @param index - * @param ipFilterRule - */ - public void add(int index, IpFilterRule ipFilterRule) - { - if (ipFilterRule == null) - { - throw new NullPointerException("IpFilterRule can not be null"); - } - ipFilterRuleList.add(index, ipFilterRule); - } + /** Add an ipFilterRule in the list at the end */ + public void add(IpFilterRule ipFilterRule) { + if (ipFilterRule == null) { + throw new NullPointerException("IpFilterRule can not be null"); + } + ipFilterRuleList.add(ipFilterRule); + } - /** - * Appends all of the elements in the specified collection to the end of this list, - * in the order that they are returned by the specified collection's iterator. - * @param c - */ - public void addAll(Collection c) - { - if (c == null) - { - throw new NullPointerException("Collection can not be null"); - } - ipFilterRuleList.addAll(c); - } + /** Add an ipFilterRule in the list at the specified position (shifting to the right other elements) */ + public void add(int index, IpFilterRule ipFilterRule) { + if (ipFilterRule == null) { + throw new NullPointerException("IpFilterRule can not be null"); + } + ipFilterRuleList.add(index, ipFilterRule); + } - /** - * Inserts all of the elements in the specified collection into this list, starting at the specified position. - * @param index - * @param c - */ - public void addAll(int index, Collection c) - { - if (c == null) - { - throw new NullPointerException("Collection can not be null"); - } - ipFilterRuleList.addAll(index, c); - } + /** + * Appends all of the elements in the specified collection to the end of this list, + * in the order that they are returned by the specified collection's iterator. + */ + public void addAll(Collection c) { + if (c == null) { + throw new NullPointerException("Collection can not be null"); + } + ipFilterRuleList.addAll(c); + } - /** - * Append the element if not present. - * @param c - * @return the number of elements added - */ - public int addAllAbsent(Collection c) - { - if (c == null) - { - throw new NullPointerException("Collection can not be null"); - } - return ipFilterRuleList.addAllAbsent(c); - } + /** Inserts all of the elements in the specified collection into this list, starting at the specified position. */ + public void addAll(int index, Collection c) { + if (c == null) { + throw new NullPointerException("Collection can not be null"); + } + ipFilterRuleList.addAll(index, c); + } - /** - * Append the element if not present. - * @param ipFilterRule - * @return true if the element was added - */ - public boolean addIfAbsent(IpFilterRule ipFilterRule) - { - if (ipFilterRule == null) - { - throw new NullPointerException("IpFilterRule can not be null"); - } - return ipFilterRuleList.addIfAbsent(ipFilterRule); - } + /** + * Append the element if not present. + * + * @return the number of elements added + */ + public int addAllAbsent(Collection c) { + if (c == null) { + throw new NullPointerException("Collection can not be null"); + } + return ipFilterRuleList.addAllAbsent(c); + } - /** - * Clear the list - */ - public void clear() - { - ipFilterRuleList.clear(); - } + /** + * Append the element if not present. + * + * @return true if the element was added + */ + public boolean addIfAbsent(IpFilterRule ipFilterRule) { + if (ipFilterRule == null) { + throw new NullPointerException("IpFilterRule can not be null"); + } + return ipFilterRuleList.addIfAbsent(ipFilterRule); + } - /** - * Returns true if this list contains the specified element - * @param ipFilterRule - * @return true if this list contains the specified element - */ - public boolean contains(IpFilterRule ipFilterRule) - { - if (ipFilterRule == null) - { - throw new NullPointerException("IpFilterRule can not be null"); - } - return ipFilterRuleList.contains(ipFilterRule); - } + /** Clear the list */ + public void clear() { + ipFilterRuleList.clear(); + } - /** - * Returns true if this list contains all of the elements of the specified collection - * @param c - * @return true if this list contains all of the elements of the specified collection - */ - public boolean containsAll(Collection c) - { - if (c == null) - { - throw new NullPointerException("Collection can not be null"); - } - return ipFilterRuleList.containsAll(c); - } + /** + * Returns true if this list contains the specified element + * + * @return true if this list contains the specified element + */ + public boolean contains(IpFilterRule ipFilterRule) { + if (ipFilterRule == null) { + throw new NullPointerException("IpFilterRule can not be null"); + } + return ipFilterRuleList.contains(ipFilterRule); + } - /** - * Returns the element at the specified position in this list - * @param index - * @return the element at the specified position in this list - */ - public IpFilterRule get(int index) - { - return ipFilterRuleList.get(index); - } + /** + * Returns true if this list contains all of the elements of the specified collection + * + * @return true if this list contains all of the elements of the specified collection + */ + public boolean containsAll(Collection c) { + if (c == null) { + throw new NullPointerException("Collection can not be null"); + } + return ipFilterRuleList.containsAll(c); + } - /** - * Returns true if this list contains no elements - * @return true if this list contains no elements - */ - public boolean isEmpty() - { - return ipFilterRuleList.isEmpty(); - } + /** + * Returns the element at the specified position in this list + * + * @return the element at the specified position in this list + */ + public IpFilterRule get(int index) { + return ipFilterRuleList.get(index); + } - /** - * Remove the ipFilterRule from the list - * @param ipFilterRule - */ - public void remove(IpFilterRule ipFilterRule) - { - if (ipFilterRule == null) - { - throw new NullPointerException("IpFilterRule can not be null"); - } - ipFilterRuleList.remove(ipFilterRule); - } + /** + * Returns true if this list contains no elements + * + * @return true if this list contains no elements + */ + public boolean isEmpty() { + return ipFilterRuleList.isEmpty(); + } - /** - * Removes the element at the specified position in this list - * @param index - * @return the element previously at the specified position - */ - public IpFilterRule remove(int index) - { - return ipFilterRuleList.remove(index); - } + /** Remove the ipFilterRule from the list */ + public void remove(IpFilterRule ipFilterRule) { + if (ipFilterRule == null) { + throw new NullPointerException("IpFilterRule can not be null"); + } + ipFilterRuleList.remove(ipFilterRule); + } - /** - * Removes from this list all of its elements that are contained in the specified collection - * @param c - */ - public void removeAll(Collection c) - { - if (c == null) - { - throw new NullPointerException("Collection can not be null"); - } - ipFilterRuleList.removeAll(c); - } + /** + * Removes the element at the specified position in this list + * + * @return the element previously at the specified position + */ + public IpFilterRule remove(int index) { + return ipFilterRuleList.remove(index); + } - /** - * Retains only the elements in this list that are contained in the specified collection - * @param c - */ - public void retainAll(Collection c) - { - if (c == null) - { - throw new NullPointerException("Collection can not be null"); - } - ipFilterRuleList.retainAll(c); - } + /** Removes from this list all of its elements that are contained in the specified collection */ + public void removeAll(Collection c) { + if (c == null) { + throw new NullPointerException("Collection can not be null"); + } + ipFilterRuleList.removeAll(c); + } - /** - * Replaces the element at the specified position in this list with the specified element - * @param index - * @param ipFilterRule - * @return the element previously at the specified position - */ - public IpFilterRule set(int index, IpFilterRule ipFilterRule) - { - if (ipFilterRule == null) - { - throw new NullPointerException("IpFilterRule can not be null"); - } - return ipFilterRuleList.set(index, ipFilterRule); - } + /** Retains only the elements in this list that are contained in the specified collection */ + public void retainAll(Collection c) { + if (c == null) { + throw new NullPointerException("Collection can not be null"); + } + ipFilterRuleList.retainAll(c); + } - /** - * Returns the number of elements in this list. - * @return the number of elements in this list. - */ - public int size() - { - return ipFilterRuleList.size(); - } + /** + * Replaces the element at the specified position in this list with the specified element + * + * @return the element previously at the specified position + */ + public IpFilterRule set(int index, IpFilterRule ipFilterRule) { + if (ipFilterRule == null) { + throw new NullPointerException("IpFilterRule can not be null"); + } + return ipFilterRuleList.set(index, ipFilterRule); + } - /* (non-Javadoc) + /** + * Returns the number of elements in this list. + * + * @return the number of elements in this list. + */ + public int size() { + return ipFilterRuleList.size(); + } + + /* (non-Javadoc) * @see io.netty.handler.ipfilter.IpFilteringHandler#accept(io.netty.channel.ChannelHandlerContext, io.netty.channel.ChannelEvent, java.net.InetSocketAddress) */ - @Override - protected boolean accept(ChannelHandlerContext ctx, ChannelEvent e, InetSocketAddress inetSocketAddress) - throws Exception - { - if (ipFilterRuleList.isEmpty()) - { - // No limitation neither in deny or allow, so accept - return true; - } - InetAddress inetAddress = inetSocketAddress.getAddress(); - Iterator iterator = ipFilterRuleList.iterator(); - IpFilterRule ipFilterRule = null; - while (iterator.hasNext()) - { - ipFilterRule = iterator.next(); - if (ipFilterRule.contains(inetAddress)) - { - // Match founds, is it a ALLOW or DENY rule - return ipFilterRule.isAllowRule(); - } - } - // No limitation founds and no allow either, but as it is like Firewall rules, it is therefore accepted - return true; - } + @Override + protected boolean accept(ChannelHandlerContext ctx, ChannelEvent e, InetSocketAddress inetSocketAddress) + throws Exception { + if (ipFilterRuleList.isEmpty()) { + // No limitation neither in deny or allow, so accept + return true; + } + InetAddress inetAddress = inetSocketAddress.getAddress(); + Iterator iterator = ipFilterRuleList.iterator(); + IpFilterRule ipFilterRule = null; + while (iterator.hasNext()) { + ipFilterRule = iterator.next(); + if (ipFilterRule.contains(inetAddress)) { + // Match founds, is it a ALLOW or DENY rule + return ipFilterRule.isAllowRule(); + } + } + // No limitation founds and no allow either, but as it is like Firewall rules, it is therefore accepted + return true; + } } diff --git a/handler/src/main/java/io/netty/handler/ipfilter/IpFilterRuleList.java b/handler/src/main/java/io/netty/handler/ipfilter/IpFilterRuleList.java index 57a9ad9aea..020c35aeae 100644 --- a/handler/src/main/java/io/netty/handler/ipfilter/IpFilterRuleList.java +++ b/handler/src/main/java/io/netty/handler/ipfilter/IpFilterRuleList.java @@ -42,57 +42,48 @@ import io.netty.logging.InternalLoggerFactory; *
* new IPFilterRuleHandler().addAll(new IpFilterRuleList("+n:localhost, -n:*")); *
- * - */ -public class IpFilterRuleList extends ArrayList -{ - private static final long serialVersionUID = -6164162941749588780L; +public class IpFilterRuleList extends ArrayList { + private static final long serialVersionUID = -6164162941749588780L; - private static final InternalLogger logger = InternalLoggerFactory.getInstance(IpFilterRuleList.class); + private static final InternalLogger logger = InternalLoggerFactory.getInstance(IpFilterRuleList.class); - /** - * Instantiates a new ip filter rule list. - * - * @param rules the rules - */ - public IpFilterRuleList(String rules) - { - parseRules(rules); - } + /** + * Instantiates a new ip filter rule list. + * + * @param rules the rules + */ + public IpFilterRuleList(String rules) { + parseRules(rules); + } - private void parseRules(String rules) - { - String[] ruless = rules.split(","); - for (String rule : ruless) - { - parseRule(rule.trim()); - } - } + private void parseRules(String rules) { + String[] ruless = rules.split(","); + for (String rule : ruless) { + parseRule(rule.trim()); + } + } - private void parseRule(String rule) - { - if (rule == null || rule.length() == 0) - return; - if (!(rule.startsWith("+") || rule.startsWith("-"))) - { - logger.error("syntax error in ip filter rule:" + rule); - return; - } + private void parseRule(String rule) { + if (rule == null || rule.length() == 0) { + return; + } + if (!(rule.startsWith("+") || rule.startsWith("-"))) { + logger.error("syntax error in ip filter rule:" + rule); + return; + } - boolean allow = rule.startsWith("+"); - if (rule.charAt(1) == 'n' || rule.charAt(1) == 'i') - this.add(new PatternRule(allow, rule.substring(1))); - else if (rule.charAt(1) == 'c') - try - { - this.add(new IpSubnetFilterRule(allow, rule.substring(3))); - } - catch (UnknownHostException e) - { - logger.error("error parsing ip filter " + rule, e); - } - else - logger.error("syntax error in ip filter rule:" + rule); - } + boolean allow = rule.startsWith("+"); + if (rule.charAt(1) == 'n' || rule.charAt(1) == 'i') { + this.add(new PatternRule(allow, rule.substring(1))); + } else if (rule.charAt(1) == 'c') { + try { + this.add(new IpSubnetFilterRule(allow, rule.substring(3))); + } catch (UnknownHostException e) { + logger.error("error parsing ip filter " + rule, e); + } + } else { + logger.error("syntax error in ip filter rule:" + rule); + } + } } diff --git a/handler/src/main/java/io/netty/handler/ipfilter/IpFilteringHandler.java b/handler/src/main/java/io/netty/handler/ipfilter/IpFilteringHandler.java index 08f5f455a7..0d04ef1ce3 100644 --- a/handler/src/main/java/io/netty/handler/ipfilter/IpFilteringHandler.java +++ b/handler/src/main/java/io/netty/handler/ipfilter/IpFilteringHandler.java @@ -21,18 +21,15 @@ package io.netty.handler.ipfilter; *
* Users can add an {@link IpFilterListener} to add specific actions in case a connection is allowed or refused. */ -public interface IpFilteringHandler -{ - - /** - * Sets the filter listener. - * - * @param listener the new ip filter listener - */ - void setIpFilterListener(IpFilterListener listener); +public interface IpFilteringHandler { - /** - * Remove the filter listener. - */ - void removeIpFilterListener(); + /** + * Sets the filter listener. + * + * @param listener the new ip filter listener + */ + void setIpFilterListener(IpFilterListener listener); + + /** Remove the filter listener. */ + void removeIpFilterListener(); } diff --git a/handler/src/main/java/io/netty/handler/ipfilter/IpFilteringHandlerImpl.java b/handler/src/main/java/io/netty/handler/ipfilter/IpFilteringHandlerImpl.java index b082d86099..2ab117ffd1 100644 --- a/handler/src/main/java/io/netty/handler/ipfilter/IpFilteringHandlerImpl.java +++ b/handler/src/main/java/io/netty/handler/ipfilter/IpFilteringHandlerImpl.java @@ -26,179 +26,148 @@ import io.netty.channel.ChannelUpstreamHandler; import io.netty.channel.Channels; // TODO: Auto-generated Javadoc -/** - * General class that handle Ip Filtering. - * - */ -public abstract class IpFilteringHandlerImpl implements ChannelUpstreamHandler, IpFilteringHandler -{ +/** General class that handle Ip Filtering. */ +public abstract class IpFilteringHandlerImpl implements ChannelUpstreamHandler, IpFilteringHandler { - private IpFilterListener listener = null; + private IpFilterListener listener; - /** - * Called when the channel is connected. It returns True if the corresponding connection - * is to be allowed. Else it returns False. - * @param ctx - * @param e - * @param inetSocketAddress the remote {@link InetSocketAddress} from client - * @return True if the corresponding connection is allowed, else False. - * @throws Exception - */ - protected abstract boolean accept(ChannelHandlerContext ctx, ChannelEvent e, InetSocketAddress inetSocketAddress) - throws Exception; + /** + * Called when the channel is connected. It returns True if the corresponding connection + * is to be allowed. Else it returns False. + * + * @param inetSocketAddress the remote {@link InetSocketAddress} from client + * @return True if the corresponding connection is allowed, else False. + */ + protected abstract boolean accept(ChannelHandlerContext ctx, ChannelEvent e, InetSocketAddress inetSocketAddress) + throws Exception; - /** - * Called when the channel has the CONNECTED status and the channel was refused by a previous call to accept(). - * This method enables your implementation to send a message back to the client before closing - * or whatever you need. This method returns a ChannelFuture on which the implementation - * will wait uninterruptibly before closing the channel.
- * For instance, If a message is sent back, the corresponding ChannelFuture has to be returned. - * @param ctx - * @param e - * @param inetSocketAddress the remote {@link InetSocketAddress} from client - * @return the associated ChannelFuture to be waited for before closing the channel. Null is allowed. - * @throws Exception - */ - protected ChannelFuture handleRefusedChannel(ChannelHandlerContext ctx, ChannelEvent e, - InetSocketAddress inetSocketAddress) throws Exception - { - if (listener == null) - return null; - return listener.refused(ctx, e, inetSocketAddress); - } + /** + * Called when the channel has the CONNECTED status and the channel was refused by a previous call to accept(). + * This method enables your implementation to send a message back to the client before closing + * or whatever you need. This method returns a ChannelFuture on which the implementation + * will wait uninterruptibly before closing the channel.
+ * For instance, If a message is sent back, the corresponding ChannelFuture has to be returned. + * + * @param inetSocketAddress the remote {@link InetSocketAddress} from client + * @return the associated ChannelFuture to be waited for before closing the channel. Null is allowed. + */ + protected ChannelFuture handleRefusedChannel(ChannelHandlerContext ctx, ChannelEvent e, + InetSocketAddress inetSocketAddress) throws Exception { + if (listener == null) { + return null; + } + return listener.refused(ctx, e, inetSocketAddress); + } - protected ChannelFuture handleAllowedChannel(ChannelHandlerContext ctx, ChannelEvent e, - InetSocketAddress inetSocketAddress) throws Exception - { - if (listener == null) - return null; - return listener.allowed(ctx, e, inetSocketAddress); - } + protected ChannelFuture handleAllowedChannel(ChannelHandlerContext ctx, ChannelEvent e, + InetSocketAddress inetSocketAddress) throws Exception { + if (listener == null) { + return null; + } + return listener.allowed(ctx, e, inetSocketAddress); + } - /** - * Internal method to test if the current channel is blocked. Should not be overridden. - * @param ctx - * @return True if the current channel is blocked, else False - */ - protected boolean isBlocked(ChannelHandlerContext ctx) - { - return ctx.getAttachment() != null; - } + /** + * Internal method to test if the current channel is blocked. Should not be overridden. + * + * @return True if the current channel is blocked, else False + */ + protected boolean isBlocked(ChannelHandlerContext ctx) { + return ctx.getAttachment() != null; + } - /** - * Called in handleUpstream, if this channel was previously blocked, - * to check if whatever the event, it should be passed to the next entry in the pipeline.
- * If one wants to not block events, just overridden this method by returning always true.

- * Note that OPENED and BOUND events are still passed to the next entry in the pipeline since - * those events come out before the CONNECTED event and so the possibility to filter the connection. - * @param ctx - * @param e - * @return True if the event should continue, False if the event should not continue - * since this channel was blocked by this filter - * @throws Exception - */ - protected boolean continues(ChannelHandlerContext ctx, ChannelEvent e) throws Exception - { - if (listener != null) - return listener.continues(ctx, e); - else - return false; - } + /** + * Called in handleUpstream, if this channel was previously blocked, + * to check if whatever the event, it should be passed to the next entry in the pipeline.
+ * If one wants to not block events, just overridden this method by returning always true.

+ * Note that OPENED and BOUND events are still passed to the next entry in the pipeline since + * those events come out before the CONNECTED event and so the possibility to filter the connection. + * + * @return True if the event should continue, False if the event should not continue + * since this channel was blocked by this filter + */ + protected boolean continues(ChannelHandlerContext ctx, ChannelEvent e) throws Exception { + if (listener != null) { + return listener.continues(ctx, e); + } else { + return false; + } + } - /* (non-Javadoc) + /* (non-Javadoc) * @see io.netty.channel.ChannelUpstreamHandler#handleUpstream(io.netty.channel.ChannelHandlerContext, io.netty.channel.ChannelEvent) */ - @Override - public void handleUpstream(ChannelHandlerContext ctx, ChannelEvent e) throws Exception - { - if (e instanceof ChannelStateEvent) - { - ChannelStateEvent evt = (ChannelStateEvent) e; - switch (evt.getState()) - { - case OPEN : - case BOUND : - // Special case: OPEND and BOUND events are before CONNECTED, - // but CLOSED and UNBOUND events are after DISCONNECTED: should those events be blocked too? - if (isBlocked(ctx) && !continues(ctx, evt)) - { - // don't pass to next level since channel was blocked early - return; - } - else - { - ctx.sendUpstream(e); - return; - } - case CONNECTED : - if (evt.getValue() != null) - { - // CONNECTED - InetSocketAddress inetSocketAddress = (InetSocketAddress) e.getChannel().getRemoteAddress(); - if (!accept(ctx, e, inetSocketAddress)) - { - ctx.setAttachment(Boolean.TRUE); - ChannelFuture future = handleRefusedChannel(ctx, e, inetSocketAddress); - if (future != null) - { - future.addListener(ChannelFutureListener.CLOSE); - } - else - { - Channels.close(e.getChannel()); - } - if (isBlocked(ctx) && !continues(ctx, evt)) - { + @Override + public void handleUpstream(ChannelHandlerContext ctx, ChannelEvent e) throws Exception { + if (e instanceof ChannelStateEvent) { + ChannelStateEvent evt = (ChannelStateEvent) e; + switch (evt.getState()) { + case OPEN: + case BOUND: + // Special case: OPEND and BOUND events are before CONNECTED, + // but CLOSED and UNBOUND events are after DISCONNECTED: should those events be blocked too? + if (isBlocked(ctx) && !continues(ctx, evt)) { // don't pass to next level since channel was blocked early return; - } - } - else - { - handleAllowedChannel(ctx, e, inetSocketAddress); - } - // This channel is not blocked - ctx.setAttachment(null); - } - else - { - // DISCONNECTED - if (isBlocked(ctx) && !continues(ctx, evt)) - { - // don't pass to next level since channel was blocked early - return; - } - } - break; - } - } - if (isBlocked(ctx) && !continues(ctx, e)) - { - // don't pass to next level since channel was blocked early - return; - } - // Whatever it is, if not blocked, goes to the next level - ctx.sendUpstream(e); - } + } else { + ctx.sendUpstream(e); + return; + } + case CONNECTED: + if (evt.getValue() != null) { + // CONNECTED + InetSocketAddress inetSocketAddress = (InetSocketAddress) e.getChannel().getRemoteAddress(); + if (!accept(ctx, e, inetSocketAddress)) { + ctx.setAttachment(Boolean.TRUE); + ChannelFuture future = handleRefusedChannel(ctx, e, inetSocketAddress); + if (future != null) { + future.addListener(ChannelFutureListener.CLOSE); + } else { + Channels.close(e.getChannel()); + } + if (isBlocked(ctx) && !continues(ctx, evt)) { + // don't pass to next level since channel was blocked early + return; + } + } else { + handleAllowedChannel(ctx, e, inetSocketAddress); + } + // This channel is not blocked + ctx.setAttachment(null); + } else { + // DISCONNECTED + if (isBlocked(ctx) && !continues(ctx, evt)) { + // don't pass to next level since channel was blocked early + return; + } + } + break; + } + } + if (isBlocked(ctx) && !continues(ctx, e)) { + // don't pass to next level since channel was blocked early + return; + } + // Whatever it is, if not blocked, goes to the next level + ctx.sendUpstream(e); + } - /* (non-Javadoc) + /* (non-Javadoc) * @see io.netty.handler.ipfilter.IpFilteringHandler#setIpFilterListener(io.netty.handler.ipfilter.IpFilterListener) */ - @Override - public void setIpFilterListener(IpFilterListener listener) - { - this.listener = listener; - } + @Override + public void setIpFilterListener(IpFilterListener listener) { + this.listener = listener; + } - /* (non-Javadoc) + /* (non-Javadoc) * @see io.netty.handler.ipfilter.IpFilteringHandler#removeIpFilterListener() */ - @Override - public void removeIpFilterListener() - { - this.listener = null; + @Override + public void removeIpFilterListener() { + this.listener = null; - } + } } diff --git a/handler/src/main/java/io/netty/handler/ipfilter/IpSet.java b/handler/src/main/java/io/netty/handler/ipfilter/IpSet.java index a734975e7a..6689480c06 100644 --- a/handler/src/main/java/io/netty/handler/ipfilter/IpSet.java +++ b/handler/src/main/java/io/netty/handler/ipfilter/IpSet.java @@ -17,17 +17,14 @@ package io.netty.handler.ipfilter; import java.net.InetAddress; -/** - * This Interface defines an IpSet object. - */ -public interface IpSet -{ - /** - * Compares the given InetAddress against the IpSet and returns true if - * the InetAddress is contained in this Rule and false if not. - * @param inetAddress1 - * @return returns true if the given IP address is contained in the current - * IpSet. - */ - boolean contains(InetAddress inetAddress1); +/** This Interface defines an IpSet object. */ +public interface IpSet { + /** + * Compares the given InetAddress against the IpSet and returns true if + * the InetAddress is contained in this Rule and false if not. + * + * @return returns true if the given IP address is contained in the current + * IpSet. + */ + boolean contains(InetAddress inetAddress1); } diff --git a/handler/src/main/java/io/netty/handler/ipfilter/IpSubnet.java b/handler/src/main/java/io/netty/handler/ipfilter/IpSubnet.java index 84a1917715..251fefb3dc 100644 --- a/handler/src/main/java/io/netty/handler/ipfilter/IpSubnet.java +++ b/handler/src/main/java/io/netty/handler/ipfilter/IpSubnet.java @@ -20,7 +20,7 @@ import java.net.UnknownHostException; /** * This class allows to check if an IP V4 or V6 Address is contained in a subnet.
- * + *

* Supported IP V4 Formats for the Subnets are: 1.1.1.1/255.255.255.255 or 1.1.1.1/32 (CIDR-Notation) * and (InetAddress,Mask) where Mask is a integer for CIDR-notation or a String for Standard Mask notation.
*

Example1:
@@ -51,141 +51,112 @@ import java.net.UnknownHostException; * IpSubnet ips = new IpSubnet(inetAddress, 24);
* where inetAddress2 is 1fff:0:0a88:85a3:0:0:ac1f:8001
*/ -public class IpSubnet implements IpSet, Comparable -{ - /** - * Internal representation - */ - private CIDR cidr = null; +public class IpSubnet implements IpSet, Comparable { + /** Internal representation */ + private CIDR cidr; - /** - * Create IpSubnet for ALL (used for ALLOW or DENY ALL) - */ - public IpSubnet() - { - // ALLOW or DENY ALL - cidr = null; - } + /** Create IpSubnet for ALL (used for ALLOW or DENY ALL) */ + public IpSubnet() { + // ALLOW or DENY ALL + cidr = null; + } - /** - * Create IpSubnet using the CIDR or normal Notation
- * i.e.:
- * IpSubnet subnet = new IpSubnet("10.10.10.0/24"); or
- * IpSubnet subnet = new IpSubnet("10.10.10.0/255.255.255.0"); or
- * IpSubnet subnet = new IpSubnet("1fff:0:0a88:85a3:0:0:0:0/24"); - * @param netAddress a network address as string. - * @throws UnknownHostException - * */ - public IpSubnet(String netAddress) throws UnknownHostException - { - cidr = CIDR.newCIDR(netAddress); - } + /** + * Create IpSubnet using the CIDR or normal Notation
+ * i.e.:
+ * IpSubnet subnet = new IpSubnet("10.10.10.0/24"); or
+ * IpSubnet subnet = new IpSubnet("10.10.10.0/255.255.255.0"); or
+ * IpSubnet subnet = new IpSubnet("1fff:0:0a88:85a3:0:0:0:0/24"); + * + * @param netAddress a network address as string. + */ + public IpSubnet(String netAddress) throws UnknownHostException { + cidr = CIDR.newCIDR(netAddress); + } - /** - * Create IpSubnet using the CIDR Notation - * @param inetAddress - * @param cidrNetMask - * @throws UnknownHostException - */ - public IpSubnet(InetAddress inetAddress, int cidrNetMask) throws UnknownHostException - { - cidr = CIDR.newCIDR(inetAddress, cidrNetMask); - } + /** Create IpSubnet using the CIDR Notation */ + public IpSubnet(InetAddress inetAddress, int cidrNetMask) throws UnknownHostException { + cidr = CIDR.newCIDR(inetAddress, cidrNetMask); + } - /** - * Create IpSubnet using the normal Notation - * @param inetAddress - * @param netMask - * @throws UnknownHostException - */ - public IpSubnet(InetAddress inetAddress, String netMask) throws UnknownHostException - { - cidr = CIDR.newCIDR(inetAddress, netMask); - } + /** Create IpSubnet using the normal Notation */ + public IpSubnet(InetAddress inetAddress, String netMask) throws UnknownHostException { + cidr = CIDR.newCIDR(inetAddress, netMask); + } - /** - * Compares the given IP-Address against the Subnet and returns true if - * the ip is in the subnet-ip-range and false if not. - * @param ipAddr an ipaddress - * @return returns true if the given IP address is inside the currently - * set network. - * @throws UnknownHostException - * */ - public boolean contains(String ipAddr) throws UnknownHostException - { - InetAddress inetAddress1 = InetAddress.getByName(ipAddr); - return this.contains(inetAddress1); - } + /** + * Compares the given IP-Address against the Subnet and returns true if + * the ip is in the subnet-ip-range and false if not. + * + * @param ipAddr an ipaddress + * @return returns true if the given IP address is inside the currently + * set network. + */ + public boolean contains(String ipAddr) throws UnknownHostException { + InetAddress inetAddress1 = InetAddress.getByName(ipAddr); + return this.contains(inetAddress1); + } - /** - * Compares the given InetAddress against the Subnet and returns true if - * the ip is in the subnet-ip-range and false if not. - * @param inetAddress - * @return returns true if the given IP address is inside the currently - * set network. - * */ - @Override -public boolean contains(InetAddress inetAddress) - { - if (cidr == null) - { - // ANY - return true; - } - return cidr.contains(inetAddress); - } + /** + * Compares the given InetAddress against the Subnet and returns true if + * the ip is in the subnet-ip-range and false if not. + * + * @return returns true if the given IP address is inside the currently + * set network. + */ + @Override + public boolean contains(InetAddress inetAddress) { + if (cidr == null) { + // ANY + return true; + } + return cidr.contains(inetAddress); + } - @Override - public String toString() - { - return cidr.toString(); - } + @Override + public String toString() { + return cidr.toString(); + } - @Override - public boolean equals(Object o) - { - if (!(o instanceof IpSubnet)) - { - return false; - } - IpSubnet ipSubnet = (IpSubnet) o; - return ipSubnet.cidr.equals(cidr); - } + @Override + public boolean equals(Object o) { + if (!(o instanceof IpSubnet)) { + return false; + } + IpSubnet ipSubnet = (IpSubnet) o; + return ipSubnet.cidr.equals(cidr); + } - /** - * Compare two IpSubnet - */ - @Override - public int compareTo(IpSubnet o) - { - return cidr.toString().compareTo(o.cidr.toString()); - } + @Override + public int hashCode() { + return cidr.hashCode(); + } - /** - * Simple test functions - * @param args - * where args[0] is the netmask (standard or CIDR notation) and optional args[1] is - * the inetAddress to test with this IpSubnet - */ - public static void main(String[] args) throws Exception - { - if (args.length != 0) - { - IpSubnet ipSubnet = null; - try - { - ipSubnet = new IpSubnet(args[0]); - } - catch (UnknownHostException e) - { - return; - } - System.out.println("IpSubnet: " + ipSubnet.toString() + " from " + ipSubnet.cidr.getBaseAddress() + " to " - + ipSubnet.cidr.getEndAddress() + " mask " + ipSubnet.cidr.getMask()); - if (args.length > 1) - { - System.out.println("Is IN: " + args[1] + " " + ipSubnet.contains(args[1])); - } - } - } + /** Compare two IpSubnet */ + @Override + public int compareTo(IpSubnet o) { + return cidr.toString().compareTo(o.cidr.toString()); + } + + /** + * Simple test functions + * + * @param args where args[0] is the netmask (standard or CIDR notation) and optional args[1] is + * the inetAddress to test with this IpSubnet + */ + public static void main(String[] args) throws Exception { + if (args.length != 0) { + IpSubnet ipSubnet = null; + try { + ipSubnet = new IpSubnet(args[0]); + } catch (UnknownHostException e) { + return; + } + System.out.println("IpSubnet: " + ipSubnet.toString() + " from " + ipSubnet.cidr.getBaseAddress() + " to " + + ipSubnet.cidr.getEndAddress() + " mask " + ipSubnet.cidr.getMask()); + if (args.length > 1) { + System.out.println("Is IN: " + args[1] + " " + ipSubnet.contains(args[1])); + } + } + } } diff --git a/handler/src/main/java/io/netty/handler/ipfilter/IpSubnetFilterRule.java b/handler/src/main/java/io/netty/handler/ipfilter/IpSubnetFilterRule.java index f0ba8348c3..162a74f409 100644 --- a/handler/src/main/java/io/netty/handler/ipfilter/IpSubnetFilterRule.java +++ b/handler/src/main/java/io/netty/handler/ipfilter/IpSubnetFilterRule.java @@ -24,67 +24,45 @@ import java.net.UnknownHostException; * Note that mix of IPV4 and IPV6 is allowed but it is not recommended. So it is preferable to not * mix IPV4 addresses with IPV6 rules, even if it should work. */ -public class IpSubnetFilterRule extends IpSubnet implements IpFilterRule -{ - /** - * Is this IpV4Subnet an ALLOW or DENY rule - */ - private boolean isAllowRule = true; +public class IpSubnetFilterRule extends IpSubnet implements IpFilterRule { + /** Is this IpV4Subnet an ALLOW or DENY rule */ + private boolean isAllowRule = true; - /** - * Constructor for a ALLOW or DENY ALL - * @param allow True for ALLOW, False for DENY - */ - public IpSubnetFilterRule(boolean allow) - { - isAllowRule = allow; - } + /** + * Constructor for a ALLOW or DENY ALL + * + * @param allow True for ALLOW, False for DENY + */ + public IpSubnetFilterRule(boolean allow) { + isAllowRule = allow; + } - /** - * @param allow True for ALLOW, False for DENY - * @param inetAddress - * @param cidrNetMask - * @throws UnknownHostException - */ - public IpSubnetFilterRule(boolean allow, InetAddress inetAddress, int cidrNetMask) throws UnknownHostException - { - super(inetAddress, cidrNetMask); - isAllowRule = allow; - } + /** @param allow True for ALLOW, False for DENY */ + public IpSubnetFilterRule(boolean allow, InetAddress inetAddress, int cidrNetMask) throws UnknownHostException { + super(inetAddress, cidrNetMask); + isAllowRule = allow; + } - /** - * @param allow True for ALLOW, False for DENY - * @param inetAddress - * @param netMask - * @throws UnknownHostException - */ - public IpSubnetFilterRule(boolean allow, InetAddress inetAddress, String netMask) throws UnknownHostException - { - super(inetAddress, netMask); - isAllowRule = allow; - } + /** @param allow True for ALLOW, False for DENY */ + public IpSubnetFilterRule(boolean allow, InetAddress inetAddress, String netMask) throws UnknownHostException { + super(inetAddress, netMask); + isAllowRule = allow; + } - /** - * @param allow True for ALLOW, False for DENY - * @param netAddress - * @throws UnknownHostException - */ - public IpSubnetFilterRule(boolean allow, String netAddress) throws UnknownHostException - { - super(netAddress); - isAllowRule = allow; - } + /** @param allow True for ALLOW, False for DENY */ + public IpSubnetFilterRule(boolean allow, String netAddress) throws UnknownHostException { + super(netAddress); + isAllowRule = allow; + } - @Override - public boolean isAllowRule() - { - return isAllowRule; - } + @Override + public boolean isAllowRule() { + return isAllowRule; + } - @Override - public boolean isDenyRule() - { - return !isAllowRule; - } + @Override + public boolean isDenyRule() { + return !isAllowRule; + } } diff --git a/handler/src/main/java/io/netty/handler/ipfilter/IpV4Subnet.java b/handler/src/main/java/io/netty/handler/ipfilter/IpV4Subnet.java index 752e6060da..71d6837e5d 100644 --- a/handler/src/main/java/io/netty/handler/ipfilter/IpV4Subnet.java +++ b/handler/src/main/java/io/netty/handler/ipfilter/IpV4Subnet.java @@ -38,289 +38,233 @@ import java.util.Vector; *
Example2 bis:
* IpV4Subnet ips = new IpV4Subnet(inetAddress, "255.255.255.0");
* where inetAddress is 192.168.1.0 and inetAddress2 is 192.168.1.123
- */ -public class IpV4Subnet implements IpSet, Comparable -{ - private static final int SUBNET_MASK = 0x80000000; +public class IpV4Subnet implements IpSet, Comparable { + private static final int SUBNET_MASK = 0x80000000; - private static final int BYTE_ADDRESS_MASK = 0xFF; + private static final int BYTE_ADDRESS_MASK = 0xFF; - private InetAddress inetAddress; + private InetAddress inetAddress; - private int subnet; + private int subnet; - private int mask; + private int mask; - private int cidrMask; + private int cidrMask; - /** - * Create IpV4Subnet for ALL (used for ALLOW or DENY ALL) - */ - public IpV4Subnet() - { - // ALLOW or DENY ALL - mask = -1; - // other will be ignored - inetAddress = null; - subnet = 0; - cidrMask = 0; - } + /** Create IpV4Subnet for ALL (used for ALLOW or DENY ALL) */ + public IpV4Subnet() { + // ALLOW or DENY ALL + mask = -1; + // other will be ignored + inetAddress = null; + subnet = 0; + cidrMask = 0; + } - /** - * Create IpV4Subnet using the CIDR or normal Notation
- * i.e.: - * IpV4Subnet subnet = new IpV4Subnet("10.10.10.0/24"); or - * IpV4Subnet subnet = new IpV4Subnet("10.10.10.0/255.255.255.0"); - * @param netAddress a network address as string. - * @throws UnknownHostException - * */ - public IpV4Subnet(String netAddress) throws UnknownHostException - { - setNetAddress(netAddress); - } + /** + * Create IpV4Subnet using the CIDR or normal Notation
+ * i.e.: + * IpV4Subnet subnet = new IpV4Subnet("10.10.10.0/24"); or + * IpV4Subnet subnet = new IpV4Subnet("10.10.10.0/255.255.255.0"); + * + * @param netAddress a network address as string. + */ + public IpV4Subnet(String netAddress) throws UnknownHostException { + setNetAddress(netAddress); + } - /** - * Create IpV4Subnet using the CIDR Notation - * @param inetAddress - * @param cidrNetMask - */ - public IpV4Subnet(InetAddress inetAddress, int cidrNetMask) - { - setNetAddress(inetAddress, cidrNetMask); - } + /** Create IpV4Subnet using the CIDR Notation */ + public IpV4Subnet(InetAddress inetAddress, int cidrNetMask) { + setNetAddress(inetAddress, cidrNetMask); + } - /** - * Create IpV4Subnet using the normal Notation - * @param inetAddress - * @param netMask - */ - public IpV4Subnet(InetAddress inetAddress, String netMask) - { - setNetAddress(inetAddress, netMask); - } + /** Create IpV4Subnet using the normal Notation */ + public IpV4Subnet(InetAddress inetAddress, String netMask) { + setNetAddress(inetAddress, netMask); + } - /** - * Sets the Network Address in either CIDR or Decimal Notation.
- * i.e.: setNetAddress("1.1.1.1/24"); or
- * setNetAddress("1.1.1.1/255.255.255.0");
- * @param netAddress a network address as string. - * @throws UnknownHostException - * */ - private void setNetAddress(String netAddress) throws UnknownHostException - { - Vector vec = new Vector(); - StringTokenizer st = new StringTokenizer(netAddress, "/"); - while (st.hasMoreTokens()) - { - vec.add(st.nextElement()); - } + /** + * Sets the Network Address in either CIDR or Decimal Notation.
+ * i.e.: setNetAddress("1.1.1.1/24"); or
+ * setNetAddress("1.1.1.1/255.255.255.0");
+ * + * @param netAddress a network address as string. + */ + private void setNetAddress(String netAddress) throws UnknownHostException { + Vector vec = new Vector(); + StringTokenizer st = new StringTokenizer(netAddress, "/"); + while (st.hasMoreTokens()) { + vec.add(st.nextElement()); + } - if (vec.get(1).toString().length() < 3) - { - setNetId(vec.get(0).toString()); - setCidrNetMask(Integer.parseInt(vec.get(1).toString())); - } - else - { - setNetId(vec.get(0).toString()); - setNetMask(vec.get(1).toString()); - } - } + if (vec.get(1).toString().length() < 3) { + setNetId(vec.get(0).toString()); + setCidrNetMask(Integer.parseInt(vec.get(1).toString())); + } else { + setNetId(vec.get(0).toString()); + setNetMask(vec.get(1).toString()); + } + } - /** - * Sets the Network Address in CIDR Notation. - * @param inetAddress - * @param cidrNetMask - * */ - private void setNetAddress(InetAddress inetAddress, int cidrNetMask) - { - setNetId(inetAddress); - setCidrNetMask(cidrNetMask); - } + /** Sets the Network Address in CIDR Notation. */ + private void setNetAddress(InetAddress inetAddress, int cidrNetMask) { + setNetId(inetAddress); + setCidrNetMask(cidrNetMask); + } - /** - * Sets the Network Address in Decimal Notation. - * @param inetAddress - * @param netMask - * */ - private void setNetAddress(InetAddress inetAddress, String netMask) - { - setNetId(inetAddress); - setNetMask(netMask); - } + /** Sets the Network Address in Decimal Notation. */ + private void setNetAddress(InetAddress inetAddress, String netMask) { + setNetId(inetAddress); + setNetMask(netMask); + } - /** - * Sets the BaseAdress of the Subnet.
- * i.e.: setNetId("192.168.1.0"); - * @param netId a network ID - * @throws UnknownHostException - * */ - private void setNetId(String netId) throws UnknownHostException - { - InetAddress inetAddress1 = InetAddress.getByName(netId); - this.setNetId(inetAddress1); - } + /** + * Sets the BaseAdress of the Subnet.
+ * i.e.: setNetId("192.168.1.0"); + * + * @param netId a network ID + */ + private void setNetId(String netId) throws UnknownHostException { + InetAddress inetAddress1 = InetAddress.getByName(netId); + this.setNetId(inetAddress1); + } - /** - * Compute integer representation of InetAddress - * @param inetAddress1 - * @return the integer representation - */ - private int toInt(InetAddress inetAddress1) - { - byte[] address = inetAddress1.getAddress(); - int net = 0; - for (byte addres : address) - { - net <<= 8; - net |= addres & BYTE_ADDRESS_MASK; - } - return net; - } + /** + * Compute integer representation of InetAddress + * + * @return the integer representation + */ + private int toInt(InetAddress inetAddress1) { + byte[] address = inetAddress1.getAddress(); + int net = 0; + for (byte addres : address) { + net <<= 8; + net |= addres & BYTE_ADDRESS_MASK; + } + return net; + } - /** - * Sets the BaseAdress of the Subnet. - * @param inetAddress - * */ - private void setNetId(InetAddress inetAddress) - { - this.inetAddress = inetAddress; - subnet = toInt(inetAddress); - } + /** Sets the BaseAdress of the Subnet. */ + private void setNetId(InetAddress inetAddress) { + this.inetAddress = inetAddress; + subnet = toInt(inetAddress); + } - /** - * Sets the Subnet's Netmask in Decimal format.
- * i.e.: setNetMask("255.255.255.0"); - * @param netMask a network mask - * */ - private void setNetMask(String netMask) - { - StringTokenizer nm = new StringTokenizer(netMask, "."); - int i = 0; - int[] netmask = new int[4]; - while (nm.hasMoreTokens()) - { - netmask[i] = Integer.parseInt(nm.nextToken()); - i++; - } - int mask1 = 0; - for (i = 0; i < 4; i++) - { - mask1 += Integer.bitCount(netmask[i]); - } - setCidrNetMask(mask1); - } + /** + * Sets the Subnet's Netmask in Decimal format.
+ * i.e.: setNetMask("255.255.255.0"); + * + * @param netMask a network mask + */ + private void setNetMask(String netMask) { + StringTokenizer nm = new StringTokenizer(netMask, "."); + int i = 0; + int[] netmask = new int[4]; + while (nm.hasMoreTokens()) { + netmask[i] = Integer.parseInt(nm.nextToken()); + i++; + } + int mask1 = 0; + for (i = 0; i < 4; i++) { + mask1 += Integer.bitCount(netmask[i]); + } + setCidrNetMask(mask1); + } - /** - * Sets the CIDR Netmask
- * i.e.: setCidrNetMask(24); - * @param cidrNetMask a netmask in CIDR notation - * */ - private void setCidrNetMask(int cidrNetMask) - { - cidrMask = cidrNetMask; - mask = SUBNET_MASK >> cidrMask - 1; - } + /** + * Sets the CIDR Netmask
+ * i.e.: setCidrNetMask(24); + * + * @param cidrNetMask a netmask in CIDR notation + */ + private void setCidrNetMask(int cidrNetMask) { + cidrMask = cidrNetMask; + mask = SUBNET_MASK >> cidrMask - 1; + } - /** - * Compares the given IP-Address against the Subnet and returns true if - * the ip is in the subnet-ip-range and false if not. - * @param ipAddr an ipaddress - * @return returns true if the given IP address is inside the currently - * set network. - * @throws UnknownHostException - * */ - public boolean contains(String ipAddr) throws UnknownHostException - { - InetAddress inetAddress1 = InetAddress.getByName(ipAddr); - return this.contains(inetAddress1); - } + /** + * Compares the given IP-Address against the Subnet and returns true if + * the ip is in the subnet-ip-range and false if not. + * + * @param ipAddr an ipaddress + * @return returns true if the given IP address is inside the currently + * set network. + */ + public boolean contains(String ipAddr) throws UnknownHostException { + InetAddress inetAddress1 = InetAddress.getByName(ipAddr); + return this.contains(inetAddress1); + } - /** - * Compares the given InetAddress against the Subnet and returns true if - * the ip is in the subnet-ip-range and false if not. - * @param inetAddress1 - * @return returns true if the given IP address is inside the currently - * set network. - * */ - @Override -public boolean contains(InetAddress inetAddress1) - { - if (mask == -1) - { - // ANY - return true; - } - return (toInt(inetAddress1) & mask) == subnet; - } + /** + * Compares the given InetAddress against the Subnet and returns true if + * the ip is in the subnet-ip-range and false if not. + * + * @return returns true if the given IP address is inside the currently + * set network. + */ + @Override + public boolean contains(InetAddress inetAddress1) { + if (mask == -1) { + // ANY + return true; + } + return (toInt(inetAddress1) & mask) == subnet; + } - @Override - public String toString() - { - return inetAddress.getHostAddress() + "/" + cidrMask; - } + @Override + public String toString() { + return inetAddress.getHostAddress() + "/" + cidrMask; + } - @Override - public boolean equals(Object o) - { - if (!(o instanceof IpV4Subnet)) - { - return false; - } - IpV4Subnet ipV4Subnet = (IpV4Subnet) o; - return ipV4Subnet.subnet == subnet && ipV4Subnet.cidrMask == cidrMask; - } + @Override + public boolean equals(Object o) { + if (!(o instanceof IpV4Subnet)) { + return false; + } + IpV4Subnet ipV4Subnet = (IpV4Subnet) o; + return ipV4Subnet.subnet == subnet && ipV4Subnet.cidrMask == cidrMask; + } + + @Override + public int hashCode() { + return subnet; + } - /** - * Compare two IpV4Subnet - */ - @Override - public int compareTo(IpV4Subnet o) - { - if (o.subnet == subnet && o.cidrMask == cidrMask) - { - return 0; - } - if (o.subnet < subnet) - { - return 1; - } - else if (o.subnet > subnet) - { - return -1; - } - else if (o.cidrMask < cidrMask) - { - // greater Mask means less IpAddresses so -1 - return -1; - } - return 1; - } + /** Compare two IpV4Subnet */ + @Override + public int compareTo(IpV4Subnet o) { + if (o.subnet == subnet && o.cidrMask == cidrMask) { + return 0; + } + if (o.subnet < subnet) { + return 1; + } else if (o.subnet > subnet) { + return -1; + } else if (o.cidrMask < cidrMask) { + // greater Mask means less IpAddresses so -1 + return -1; + } + return 1; + } - /** - * Simple test functions - * @param args - * where args[0] is the netmask (standard or CIDR notation) and optional args[1] is - * the inetAddress to test with this IpV4Subnet - */ - public static void main(String[] args) throws Exception - { - if (args.length != 0) - { - IpV4Subnet ipV4Subnet = null; - try - { - ipV4Subnet = new IpV4Subnet(args[0]); - } - catch (UnknownHostException e) - { - return; - } - if (args.length > 1) - { - System.out.println("Is IN: " + args[1] + " " + ipV4Subnet.contains(args[1])); - } - } - } + /** + * Simple test functions + * + * @param args where args[0] is the netmask (standard or CIDR notation) and optional args[1] is + * the inetAddress to test with this IpV4Subnet + */ + public static void main(String[] args) throws Exception { + if (args.length != 0) { + IpV4Subnet ipV4Subnet = null; + try { + ipV4Subnet = new IpV4Subnet(args[0]); + } catch (UnknownHostException e) { + return; + } + if (args.length > 1) { + System.out.println("Is IN: " + args[1] + " " + ipV4Subnet.contains(args[1])); + } + } + } } diff --git a/handler/src/main/java/io/netty/handler/ipfilter/IpV4SubnetFilterRule.java b/handler/src/main/java/io/netty/handler/ipfilter/IpV4SubnetFilterRule.java index 490eb7e82f..7d5511ff24 100644 --- a/handler/src/main/java/io/netty/handler/ipfilter/IpV4SubnetFilterRule.java +++ b/handler/src/main/java/io/netty/handler/ipfilter/IpV4SubnetFilterRule.java @@ -18,68 +18,46 @@ package io.netty.handler.ipfilter; import java.net.InetAddress; import java.net.UnknownHostException; -/** - * IpV4 only Filter Rule - */ -public class IpV4SubnetFilterRule extends IpV4Subnet implements IpFilterRule -{ - /** - * Is this IpV4Subnet an ALLOW or DENY rule - */ - private boolean isAllowRule = true; +/** IpV4 only Filter Rule */ +public class IpV4SubnetFilterRule extends IpV4Subnet implements IpFilterRule { + /** Is this IpV4Subnet an ALLOW or DENY rule */ + private boolean isAllowRule = true; - /** - * Constructor for a ALLOW or DENY ALL - * @param allow True for ALLOW, False for DENY - */ - public IpV4SubnetFilterRule(boolean allow) - { - isAllowRule = allow; - } + /** + * Constructor for a ALLOW or DENY ALL + * + * @param allow True for ALLOW, False for DENY + */ + public IpV4SubnetFilterRule(boolean allow) { + isAllowRule = allow; + } - /** - * @param allow True for ALLOW, False for DENY - * @param inetAddress - * @param cidrNetMask - */ - public IpV4SubnetFilterRule(boolean allow, InetAddress inetAddress, int cidrNetMask) - { - super(inetAddress, cidrNetMask); - isAllowRule = allow; - } + /** @param allow True for ALLOW, False for DENY */ + public IpV4SubnetFilterRule(boolean allow, InetAddress inetAddress, int cidrNetMask) { + super(inetAddress, cidrNetMask); + isAllowRule = allow; + } - /** - * @param allow True for ALLOW, False for DENY - * @param inetAddress - * @param netMask - */ - public IpV4SubnetFilterRule(boolean allow, InetAddress inetAddress, String netMask) - { - super(inetAddress, netMask); - isAllowRule = allow; - } + /** @param allow True for ALLOW, False for DENY */ + public IpV4SubnetFilterRule(boolean allow, InetAddress inetAddress, String netMask) { + super(inetAddress, netMask); + isAllowRule = allow; + } - /** - * @param allow True for ALLOW, False for DENY - * @param netAddress - * @throws UnknownHostException - */ - public IpV4SubnetFilterRule(boolean allow, String netAddress) throws UnknownHostException - { - super(netAddress); - isAllowRule = allow; - } + /** @param allow True for ALLOW, False for DENY */ + public IpV4SubnetFilterRule(boolean allow, String netAddress) throws UnknownHostException { + super(netAddress); + isAllowRule = allow; + } - @Override - public boolean isAllowRule() - { - return isAllowRule; - } + @Override + public boolean isAllowRule() { + return isAllowRule; + } - @Override - public boolean isDenyRule() - { - return !isAllowRule; - } + @Override + public boolean isDenyRule() { + return !isAllowRule; + } } diff --git a/handler/src/main/java/io/netty/handler/ipfilter/OneIpFilterHandler.java b/handler/src/main/java/io/netty/handler/ipfilter/OneIpFilterHandler.java index 50b2778f3a..24d7868052 100644 --- a/handler/src/main/java/io/netty/handler/ipfilter/OneIpFilterHandler.java +++ b/handler/src/main/java/io/netty/handler/ipfilter/OneIpFilterHandler.java @@ -30,60 +30,50 @@ import io.netty.channel.ChannelStateEvent; * Handler that block any new connection if there are already a currently active * channel connected with the same InetAddress (IP).
*
- * + *

* Take care to not change isBlocked method except if you know what you are doing * since it is used to test if the current closed connection is to be removed * or not from the map of currently connected channel. */ @Sharable -public class OneIpFilterHandler extends IpFilteringHandlerImpl -{ - /** - * HashMap of current remote connected InetAddress - */ - private final ConcurrentMap connectedSet = new ConcurrentHashMap(); +public class OneIpFilterHandler extends IpFilteringHandlerImpl { + /** HashMap of current remote connected InetAddress */ + private final ConcurrentMap connectedSet = new ConcurrentHashMap(); - /* (non-Javadoc) + /* (non-Javadoc) * @see io.netty.handler.ipfilter.IpFilteringHandler#accept(io.netty.channel.ChannelHandlerContext, io.netty.channel.ChannelEvent, java.net.InetSocketAddress) */ - @Override - protected boolean accept(ChannelHandlerContext ctx, ChannelEvent e, InetSocketAddress inetSocketAddress) - throws Exception - { - InetAddress inetAddress = inetSocketAddress.getAddress(); - if (connectedSet.containsKey(inetAddress)) - { - return false; - } - connectedSet.put(inetAddress, Boolean.TRUE); - return true; - } + @Override + protected boolean accept(ChannelHandlerContext ctx, ChannelEvent e, InetSocketAddress inetSocketAddress) + throws Exception { + InetAddress inetAddress = inetSocketAddress.getAddress(); + if (connectedSet.containsKey(inetAddress)) { + return false; + } + connectedSet.put(inetAddress, Boolean.TRUE); + return true; + } - /* (non-Javadoc) + /* (non-Javadoc) * @see io.netty.handler.ipfilter.IpFilteringHandler#handleUpstream(io.netty.channel.ChannelHandlerContext, io.netty.channel.ChannelEvent) */ - @Override - public void handleUpstream(ChannelHandlerContext ctx, ChannelEvent e) throws Exception - { - super.handleUpstream(ctx, e); - // Try to remove entry from Map if already exists - if (e instanceof ChannelStateEvent) - { - ChannelStateEvent evt = (ChannelStateEvent) e; - if (evt.getState() == ChannelState.CONNECTED) - { - if (evt.getValue() == null) - { - // DISCONNECTED but was this channel blocked or not - if (isBlocked(ctx)) - { - // remove inetsocketaddress from set since this channel was not blocked before - InetSocketAddress inetSocketAddress = (InetSocketAddress) e.getChannel().getRemoteAddress(); - connectedSet.remove(inetSocketAddress.getAddress()); - } + @Override + public void handleUpstream(ChannelHandlerContext ctx, ChannelEvent e) throws Exception { + super.handleUpstream(ctx, e); + // Try to remove entry from Map if already exists + if (e instanceof ChannelStateEvent) { + ChannelStateEvent evt = (ChannelStateEvent) e; + if (evt.getState() == ChannelState.CONNECTED) { + if (evt.getValue() == null) { + // DISCONNECTED but was this channel blocked or not + if (isBlocked(ctx)) { + // remove inetsocketaddress from set since this channel was not blocked before + InetSocketAddress inetSocketAddress = (InetSocketAddress) e.getChannel().getRemoteAddress(); + connectedSet.remove(inetSocketAddress.getAddress()); + } + } } - } - } - } + } + } } diff --git a/handler/src/main/java/io/netty/handler/ipfilter/PatternRule.java b/handler/src/main/java/io/netty/handler/ipfilter/PatternRule.java index 7a0836ab0d..fae5d0f888 100644 --- a/handler/src/main/java/io/netty/handler/ipfilter/PatternRule.java +++ b/handler/src/main/java/io/netty/handler/ipfilter/PatternRule.java @@ -46,165 +46,165 @@ import io.netty.logging.InternalLoggerFactory; *
* new PatternRule(false, "n:*") *
- * - */ -public class PatternRule implements IpFilterRule, Comparable -{ - private static final InternalLogger logger = InternalLoggerFactory.getInstance(PatternRule.class); +public class PatternRule implements IpFilterRule, Comparable { + private static final InternalLogger logger = InternalLoggerFactory.getInstance(PatternRule.class); - private Pattern ipPattern = null; + private Pattern ipPattern; - private Pattern namePattern = null; + private Pattern namePattern; - private boolean isAllowRule = true; + private boolean isAllowRule = true; - private boolean localhost = false; + private boolean localhost; - private String pattern = null; + private String pattern; - /** - * Instantiates a new pattern rule. - * - * @param allow indicates if this is an allow or block rule - * @param pattern the filter pattern - */ - public PatternRule(boolean allow, String pattern) - { - this.isAllowRule = allow; - this.pattern = pattern; - parse(pattern); - } + /** + * Instantiates a new pattern rule. + * + * @param allow indicates if this is an allow or block rule + * @param pattern the filter pattern + */ + public PatternRule(boolean allow, String pattern) { + this.isAllowRule = allow; + this.pattern = pattern; + parse(pattern); + } - /** - * returns the pattern. - * - * @return the pattern - */ - public String getPattern() - { - return this.pattern; - } + /** + * returns the pattern. + * + * @return the pattern + */ + public String getPattern() { + return this.pattern; + } - /* (non-Javadoc) + /* (non-Javadoc) * @see io.netty.handler.ipfilter.IpFilterRule#isAllowRule() */ - @Override - public boolean isAllowRule() - { - return isAllowRule; - } + @Override + public boolean isAllowRule() { + return isAllowRule; + } - /* (non-Javadoc) + /* (non-Javadoc) * @see io.netty.handler.ipfilter.IpFilterRule#isDenyRule() */ - @Override - public boolean isDenyRule() - { - return !isAllowRule; - } + @Override + public boolean isDenyRule() { + return !isAllowRule; + } - /* (non-Javadoc) + /* (non-Javadoc) * @see io.netty.handler.ipfilter.IpSet#contains(java.net.InetAddress) */ - @Override - public boolean contains(InetAddress inetAddress) - { - if (localhost) - if (isLocalhost(inetAddress)) - return true; - if (ipPattern != null) - if (ipPattern.matcher(inetAddress.getHostAddress()).matches()) - return true; - if (namePattern != null) - if (namePattern.matcher(inetAddress.getHostName()).matches()) - return true; - return false; - } + @Override + public boolean contains(InetAddress inetAddress) { + if (localhost) { + if (isLocalhost(inetAddress)) { + return true; + } + } + if (ipPattern != null) { + if (ipPattern.matcher(inetAddress.getHostAddress()).matches()) { + return true; + } + } + if (namePattern != null) { + if (namePattern.matcher(inetAddress.getHostName()).matches()) { + return true; + } + } + return false; + } - private void parse(String pattern) - { - if (pattern == null) - return; + private void parse(String pattern) { + if (pattern == null) { + return; + } - String[] acls = pattern.split(","); + String[] acls = pattern.split(","); - String ip = ""; - String name = ""; - for (String c : acls) - { - c = c.trim(); - if (c.equals("n:localhost")) - this.localhost = true; - else if (c.startsWith("n:")) - name = addRule(name, c.substring(2)); - else if (c.startsWith("i:")) - ip = addRule(ip, c.substring(2)); - } - if (ip.length() != 0) - ipPattern = Pattern.compile(ip); - if (name.length() != 0) - namePattern = Pattern.compile(name); + String ip = ""; + String name = ""; + for (String c : acls) { + c = c.trim(); + if (c.equals("n:localhost")) { + this.localhost = true; + } else if (c.startsWith("n:")) { + name = addRule(name, c.substring(2)); + } else if (c.startsWith("i:")) { + ip = addRule(ip, c.substring(2)); + } + } + if (ip.length() != 0) { + ipPattern = Pattern.compile(ip); + } + if (name.length() != 0) { + namePattern = Pattern.compile(name); + } + } - } + private String addRule(String pattern, String rule) { + if (rule == null || rule.length() == 0) { + return pattern; + } + if (pattern.length() != 0) { + pattern += "|"; + } + rule = rule.replaceAll("\\.", "\\\\."); + rule = rule.replaceAll("\\*", ".*"); + rule = rule.replaceAll("\\?", "."); + pattern += "(" + rule + ")"; + return pattern; + } - private String addRule(String pattern, String rule) - { - if (rule == null || rule.length() == 0) - return pattern; - if (pattern.length() != 0) - pattern += "|"; - rule = rule.replaceAll("\\.", "\\\\."); - rule = rule.replaceAll("\\*", ".*"); - rule = rule.replaceAll("\\?", "."); - pattern += "(" + rule + ")"; - return pattern; - } + private boolean isLocalhost(InetAddress address) { + try { + if (address.equals(InetAddress.getLocalHost())) { + return true; + } + } catch (UnknownHostException e) { + logger.info("error getting ip of localhost", e); + } + try { + InetAddress[] addrs = InetAddress.getAllByName("127.0.0.1"); + for (InetAddress addr : addrs) { + if (addr.equals(address)) { + return true; + } + } + } catch (UnknownHostException e) { + logger.info("error getting ip of localhost", e); + } + return false; - private boolean isLocalhost(InetAddress address) - { - try - { - if (address.equals(InetAddress.getLocalHost())) - return true; - } - catch (UnknownHostException e) - { - logger.info("error getting ip of localhost", e); - } - try - { - InetAddress[] addrs = InetAddress.getAllByName("127.0.0.1"); - for (InetAddress addr : addrs) - if (addr.equals(address)) - return true; - } - catch (UnknownHostException e) - { - logger.info("error getting ip of localhost", e); - } - return false; + } - } - - /* (non-Javadoc) + /* (non-Javadoc) * @see java.lang.Comparable#compareTo(java.lang.Object) */ - @Override - public int compareTo(Object o) - { - if (o == null) - return -1; - if (!(o instanceof PatternRule)) - return -1; - PatternRule p = (PatternRule) o; - if (p.isAllowRule() && !this.isAllowRule) - return -1; - if (this.pattern == null && p.pattern == null) - return 0; - if (this.pattern != null) - return this.pattern.compareTo(p.getPattern()); - return -1; - } + @Override + public int compareTo(Object o) { + if (o == null) { + return -1; + } + if (!(o instanceof PatternRule)) { + return -1; + } + PatternRule p = (PatternRule) o; + if (p.isAllowRule() && !this.isAllowRule) { + return -1; + } + if (this.pattern == null && p.pattern == null) { + return 0; + } + if (this.pattern != null) { + return this.pattern.compareTo(p.getPattern()); + } + return -1; + } } diff --git a/handler/src/main/java/io/netty/handler/region/ChannelWritableByteChannel.java b/handler/src/main/java/io/netty/handler/region/ChannelWritableByteChannel.java index 6c1b28305e..2fdaa3f901 100644 --- a/handler/src/main/java/io/netty/handler/region/ChannelWritableByteChannel.java +++ b/handler/src/main/java/io/netty/handler/region/ChannelWritableByteChannel.java @@ -34,13 +34,10 @@ import io.netty.channel.MessageEvent; /** * {@link WritableByteChannel} implementation which will take care to wrap the {@link ByteBuffer} to a {@link ChannelBuffer} and forward it to the next {@link ChannelDownstreamHandler} in the {@link ChannelPipeline} on every {@link #write(ByteBuffer)} * operation. - * - - */ public class ChannelWritableByteChannel implements WritableByteChannel { - private boolean closed = false; + private boolean closed; private final ChannelHandlerContext context; private final ChannelFutureAggregator aggregator; private final SocketAddress remote; diff --git a/handler/src/main/java/io/netty/handler/region/FileRegionEncoder.java b/handler/src/main/java/io/netty/handler/region/FileRegionEncoder.java index f361eace9f..2d73f645c0 100644 --- a/handler/src/main/java/io/netty/handler/region/FileRegionEncoder.java +++ b/handler/src/main/java/io/netty/handler/region/FileRegionEncoder.java @@ -40,7 +40,7 @@ import io.netty.channel.MessageEvent; */ @ChannelHandler.Sharable -public class FileRegionEncoder implements ChannelDownstreamHandler{ +public class FileRegionEncoder implements ChannelDownstreamHandler { @Override public void handleDownstream( diff --git a/handler/src/main/java/io/netty/handler/ssl/SslHandler.java b/handler/src/main/java/io/netty/handler/ssl/SslHandler.java index 16e27b6832..a69ec06286 100644 --- a/handler/src/main/java/io/netty/handler/ssl/SslHandler.java +++ b/handler/src/main/java/io/netty/handler/ssl/SslHandler.java @@ -194,7 +194,7 @@ public class SslHandler extends FrameDecoder private final Queue pendingUnencryptedWrites = new LinkedList(); private final Queue pendingEncryptedWrites = QueueFactory.createQueue(MessageEvent.class); private final NonReentrantLock pendingEncryptedWritesLock = new NonReentrantLock(); - private volatile boolean issueHandshake = false; + private volatile boolean issueHandshake; private static final ChannelFutureListener HANDSHAKE_LISTENER = new ChannelFutureListener() { diff --git a/handler/src/main/java/io/netty/handler/traffic/AbstractTrafficShapingHandler.java b/handler/src/main/java/io/netty/handler/traffic/AbstractTrafficShapingHandler.java index 8e2dfa8b75..320073bb40 100644 --- a/handler/src/main/java/io/netty/handler/traffic/AbstractTrafficShapingHandler.java +++ b/handler/src/main/java/io/netty/handler/traffic/AbstractTrafficShapingHandler.java @@ -70,22 +70,22 @@ public abstract class AbstractTrafficShapingHandler extends /** * Traffic Counter */ - protected TrafficCounter trafficCounter = null; + protected TrafficCounter trafficCounter; /** * Executor to associated to any TrafficCounter */ - protected Executor executor = null; + protected Executor executor; /** * Limit in B/s to apply to write */ - private long writeLimit = 0; + private long writeLimit; /** * Limit in B/s to apply to read */ - private long readLimit = 0; + private long readLimit; /** * Delay between two performance snapshots @@ -129,7 +129,7 @@ public abstract class AbstractTrafficShapingHandler extends */ public AbstractTrafficShapingHandler(Executor executor, long writeLimit, long readLimit, long checkInterval) { - init(executor, writeLimit, readLimit, checkInterval); + init(executor, writeLimit, readLimit, checkInterval); } /** @@ -142,7 +142,7 @@ public abstract class AbstractTrafficShapingHandler extends */ public AbstractTrafficShapingHandler(Executor executor, long writeLimit, long readLimit) { - init(executor, writeLimit, readLimit, DEFAULT_CHECK_INTERVAL); + init(executor, writeLimit, readLimit, DEFAULT_CHECK_INTERVAL); } /** @@ -161,7 +161,7 @@ public abstract class AbstractTrafficShapingHandler extends writeLimit = newWriteLimit; readLimit = newReadLimit; if (trafficCounter != null) { - trafficCounter.resetAccounting(System.currentTimeMillis()+1); + trafficCounter.resetAccounting(System.currentTimeMillis() + 1); } } @@ -193,12 +193,12 @@ public abstract class AbstractTrafficShapingHandler extends /** * Associated ChannelHandlerContext */ - private ChannelHandlerContext ctx = null; + private ChannelHandlerContext ctx; /** * Time to wait before clearing the channel */ - private long timeToWait = 0; + private long timeToWait; /** * @param ctx diff --git a/handler/src/main/java/io/netty/handler/traffic/ChannelTrafficShapingHandler.java b/handler/src/main/java/io/netty/handler/traffic/ChannelTrafficShapingHandler.java index 4ee0f746ba..0c8ca4b2ba 100644 --- a/handler/src/main/java/io/netty/handler/traffic/ChannelTrafficShapingHandler.java +++ b/handler/src/main/java/io/netty/handler/traffic/ChannelTrafficShapingHandler.java @@ -33,7 +33,7 @@ import io.netty.handler.execution.OrderedMemoryAwareThreadPoolExecutor; *
  • Add in your pipeline a new ChannelTrafficShapingHandler, before a recommended {@link ExecutionHandler} (like * {@link OrderedMemoryAwareThreadPoolExecutor} or {@link MemoryAwareThreadPoolExecutor}).
    * ChannelTrafficShapingHandler myHandler = new ChannelTrafficShapingHandler(executor);
    - * executor could be created using Executors.newCachedThreadPool();
    + * executor could be created using Executors.newCachedThreadPool();
    * pipeline.addLast("CHANNEL_TRAFFIC_SHAPING", myHandler);

    * * Note that this handler has a Pipeline Coverage of "one" which means a new handler must be created diff --git a/handler/src/main/java/io/netty/handler/traffic/GlobalTrafficShapingHandler.java b/handler/src/main/java/io/netty/handler/traffic/GlobalTrafficShapingHandler.java index 5810d2998d..73fc97df6d 100644 --- a/handler/src/main/java/io/netty/handler/traffic/GlobalTrafficShapingHandler.java +++ b/handler/src/main/java/io/netty/handler/traffic/GlobalTrafficShapingHandler.java @@ -31,7 +31,7 @@ import io.netty.handler.execution.OrderedMemoryAwareThreadPoolExecutor; *
      *
    • Create your unique GlobalTrafficShapingHandler like:

      * GlobalTrafficShapingHandler myHandler = new GlobalTrafficShapingHandler(executor);

      - * executor could be created using Executors.newCachedThreadPool();
      + * executor could be created using Executors.newCachedThreadPool();
      * pipeline.addLast("GLOBAL_TRAFFIC_SHAPING", myHandler);

      * * Note that this handler has a Pipeline Coverage of "all" which means only one such handler must be created diff --git a/handler/src/main/java/io/netty/handler/traffic/TrafficCounter.java b/handler/src/main/java/io/netty/handler/traffic/TrafficCounter.java index 1f56136734..4904d36840 100644 --- a/handler/src/main/java/io/netty/handler/traffic/TrafficCounter.java +++ b/handler/src/main/java/io/netty/handler/traffic/TrafficCounter.java @@ -34,22 +34,22 @@ public class TrafficCounter { /** * Current written bytes */ - private final AtomicLong currentWrittenBytes = new AtomicLong(0); + private final AtomicLong currentWrittenBytes = new AtomicLong(); /** * Current read bytes */ - private final AtomicLong currentReadBytes = new AtomicLong(0); + private final AtomicLong currentReadBytes = new AtomicLong(); /** * Long life written bytes */ - private final AtomicLong cumulativeWrittenBytes = new AtomicLong(0); + private final AtomicLong cumulativeWrittenBytes = new AtomicLong(); /** * Long life read bytes */ - private final AtomicLong cumulativeReadBytes = new AtomicLong(0); + private final AtomicLong cumulativeReadBytes = new AtomicLong(); /** * Last Time where cumulative bytes where reset to zero @@ -59,27 +59,27 @@ public class TrafficCounter { /** * Last writing bandwidth */ - private long lastWriteThroughput = 0; + private long lastWriteThroughput; /** * Last reading bandwidth */ - private long lastReadThroughput = 0; + private long lastReadThroughput; /** * Last Time Check taken */ - private final AtomicLong lastTime = new AtomicLong(0); + private final AtomicLong lastTime = new AtomicLong(); /** * Last written bytes number during last check interval */ - private long lastWrittenBytes = 0; + private long lastWrittenBytes; /** * Last read bytes number during last check interval */ - private long lastReadBytes = 0; + private long lastReadBytes; /** * Delay between two captures @@ -97,22 +97,22 @@ public class TrafficCounter { /** * The associated TrafficShapingHandler */ - private AbstractTrafficShapingHandler trafficShapingHandler = null; + private AbstractTrafficShapingHandler trafficShapingHandler; /** * Default Executor */ - private Executor executor = null; + private Executor executor; /** * Is Monitor active */ - AtomicBoolean monitorActive = new AtomicBoolean(false); + AtomicBoolean monitorActive = new AtomicBoolean(); /** * Monitor */ - private TrafficMonitoring trafficMonitoring = null; + private TrafficMonitoring trafficMonitoring; /** * Class to implement monitoring at fix delay diff --git a/handler/src/main/java/io/netty/handler/traffic/package-info.java b/handler/src/main/java/io/netty/handler/traffic/package-info.java index a5f6e0be00..2d2c2c2025 100644 --- a/handler/src/main/java/io/netty/handler/traffic/package-info.java +++ b/handler/src/main/java/io/netty/handler/traffic/package-info.java @@ -34,7 +34,7 @@ * * The insertion in the pipeline of one of those handlers can be wherever you want, but * it must be placed before any {@link io.netty.handler.execution.MemoryAwareThreadPoolExecutor} - * in your pipeline.

    • + * in your pipeline
      .
      * It is really recommended to have such a {@link io.netty.handler.execution.MemoryAwareThreadPoolExecutor} * (either non ordered or {@link io.netty.handler.execution.OrderedMemoryAwareThreadPoolExecutor} * ) in your pipeline @@ -74,7 +74,7 @@ * *

      So in your application you will create your own TrafficShapingHandler and set the values to fit your needs.

      * XXXXXTrafficShapingHandler myHandler = new XXXXXTrafficShapingHandler(executor);

      - * where executor could be created using Executors.newCachedThreadPool(); and XXXXX could be either + * where executor could be created using Executors.newCachedThreadPool(); and XXXXX could be either * Global or Channel
      * pipeline.addLast("XXXXX_TRAFFIC_SHAPING", myHandler);
      * ...
      diff --git a/pom.xml b/pom.xml index 3411b34bc0..96c1dd0546 100644 --- a/pom.xml +++ b/pom.xml @@ -268,6 +268,32 @@ true + + maven-checkstyle-plugin + 2.8 + + + check-style + + check + + validate + + true + true + true + io/netty/checkstyle.xml + + + + + + ${project.groupId} + netty-build + 1-SNAPSHOT + + + diff --git a/testsuite/pom.xml b/testsuite/pom.xml index 3b541f4cf0..d7c69b175f 100644 --- a/testsuite/pom.xml +++ b/testsuite/pom.xml @@ -38,6 +38,16 @@ + + maven-jar-plugin + 2.3.2 + + + default-jar + none + + + diff --git a/testsuite/src/test/java/io/netty/testsuite/transport/socket/AbstractSocketSslEchoTest.java b/testsuite/src/test/java/io/netty/testsuite/transport/socket/AbstractSocketSslEchoTest.java index 08b5d35ce7..cd0803730d 100644 --- a/testsuite/src/test/java/io/netty/testsuite/transport/socket/AbstractSocketSslEchoTest.java +++ b/testsuite/src/test/java/io/netty/testsuite/transport/socket/AbstractSocketSslEchoTest.java @@ -122,8 +122,8 @@ public abstract class AbstractSocketSslEchoTest { cb.getPipeline().addLast("handler", ch); if (isExecutorRequired()) { - sb.getPipeline().addFirst("executor",new ExecutionHandler(eventExecutor)); - cb.getPipeline().addFirst("executor",new ExecutionHandler(eventExecutor)); + sb.getPipeline().addFirst("executor", new ExecutionHandler(eventExecutor)); + cb.getPipeline().addFirst("executor", new ExecutionHandler(eventExecutor)); } Channel sc = sb.bind(new InetSocketAddress(0)); @@ -368,7 +368,7 @@ public abstract class AbstractSocketSslEchoTest { * -keystore cert.jks * */ - private static class BogusKeyStore { + private static final class BogusKeyStore { private static final short[] DATA = { 0xfe, 0xed, 0xfe, 0xed, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, diff --git a/transport-http/src/main/java/io/netty/channel/socket/http/HttpTunnelAcceptedChannel.java b/transport-http/src/main/java/io/netty/channel/socket/http/HttpTunnelAcceptedChannel.java index 2d37a5d067..7fa4a5f124 100644 --- a/transport-http/src/main/java/io/netty/channel/socket/http/HttpTunnelAcceptedChannel.java +++ b/transport-http/src/main/java/io/netty/channel/socket/http/HttpTunnelAcceptedChannel.java @@ -36,7 +36,7 @@ import io.netty.channel.socket.SocketChannelConfig; * to change over the lifecycle of a tunnel, especially when an HTTP proxy is in * use. */ -class HttpTunnelAcceptedChannel extends AbstractChannel implements +final class HttpTunnelAcceptedChannel extends AbstractChannel implements SocketChannel, HttpTunnelAcceptedChannelReceiver { private final HttpTunnelAcceptedChannelConfig config; diff --git a/transport-http/src/main/java/io/netty/channel/socket/http/HttpTunnelAcceptedChannelFactory.java b/transport-http/src/main/java/io/netty/channel/socket/http/HttpTunnelAcceptedChannelFactory.java index 94c99b77f5..8a4f1e7540 100644 --- a/transport-http/src/main/java/io/netty/channel/socket/http/HttpTunnelAcceptedChannelFactory.java +++ b/transport-http/src/main/java/io/netty/channel/socket/http/HttpTunnelAcceptedChannelFactory.java @@ -27,4 +27,4 @@ interface HttpTunnelAcceptedChannelFactory { InetSocketAddress remoteAddress); String generateTunnelId(); -} \ No newline at end of file +} diff --git a/transport-http/src/main/java/io/netty/channel/socket/http/HttpTunnelClientChannel.java b/transport-http/src/main/java/io/netty/channel/socket/http/HttpTunnelClientChannel.java index da181b5787..5b1fe27814 100644 --- a/transport-http/src/main/java/io/netty/channel/socket/http/HttpTunnelClientChannel.java +++ b/transport-http/src/main/java/io/netty/channel/socket/http/HttpTunnelClientChannel.java @@ -41,7 +41,7 @@ import io.netty.logging.InternalLoggerFactory; * this type are designed to emulate a normal TCP based socket channel as far as is feasible within the limitations * of the HTTP 1.1 protocol, and the usage patterns permitted by commonly used HTTP proxies and firewalls. */ -public class HttpTunnelClientChannel extends AbstractChannel implements +final class HttpTunnelClientChannel extends AbstractChannel implements SocketChannel { static final InternalLogger LOG = InternalLoggerFactory diff --git a/transport-http/src/main/java/io/netty/channel/socket/http/HttpTunnelClientSendHandler.java b/transport-http/src/main/java/io/netty/channel/socket/http/HttpTunnelClientSendHandler.java index 5697a18e0d..56448d7415 100644 --- a/transport-http/src/main/java/io/netty/channel/socket/http/HttpTunnelClientSendHandler.java +++ b/transport-http/src/main/java/io/netty/channel/socket/http/HttpTunnelClientSendHandler.java @@ -44,7 +44,7 @@ class HttpTunnelClientSendHandler extends SimpleChannelHandler { private final HttpTunnelClientWorkerOwner tunnelChannel; - private String tunnelId = null; + private String tunnelId; private final AtomicBoolean disconnecting; diff --git a/transport-http/src/main/java/io/netty/channel/socket/http/HttpTunnelClientWorkerOwner.java b/transport-http/src/main/java/io/netty/channel/socket/http/HttpTunnelClientWorkerOwner.java index 70b8f34742..e37195bf74 100644 --- a/transport-http/src/main/java/io/netty/channel/socket/http/HttpTunnelClientWorkerOwner.java +++ b/transport-http/src/main/java/io/netty/channel/socket/http/HttpTunnelClientWorkerOwner.java @@ -61,4 +61,4 @@ interface HttpTunnelClientWorkerOwner { */ String getServerHostName(); -} \ No newline at end of file +} diff --git a/transport-http/src/main/java/io/netty/channel/socket/http/HttpTunnelMessageUtils.java b/transport-http/src/main/java/io/netty/channel/socket/http/HttpTunnelMessageUtils.java index e7d9231e55..81e81cb88f 100644 --- a/transport-http/src/main/java/io/netty/channel/socket/http/HttpTunnelMessageUtils.java +++ b/transport-http/src/main/java/io/netty/channel/socket/http/HttpTunnelMessageUtils.java @@ -40,7 +40,7 @@ import io.netty.handler.codec.http.HttpVersion; * Utility class for creating http requests for the operation of the full duplex * http tunnel, and verifying that received requests are of the correct types. */ -public class HttpTunnelMessageUtils { +final class HttpTunnelMessageUtils { private static final String HTTP_URL_PREFIX = "http://"; @@ -333,4 +333,8 @@ public class HttpTunnelMessageUtils { } return response; } + + private HttpTunnelMessageUtils() { + // Unused + } } diff --git a/transport-http/src/main/java/io/netty/channel/socket/http/HttpTunnelServerChannel.java b/transport-http/src/main/java/io/netty/channel/socket/http/HttpTunnelServerChannel.java index 9b66f4eb35..f9d01115a3 100644 --- a/transport-http/src/main/java/io/netty/channel/socket/http/HttpTunnelServerChannel.java +++ b/transport-http/src/main/java/io/netty/channel/socket/http/HttpTunnelServerChannel.java @@ -28,7 +28,7 @@ import io.netty.channel.socket.ServerSocketChannelConfig; /** */ -public class HttpTunnelServerChannel extends AbstractServerChannel implements +final class HttpTunnelServerChannel extends AbstractServerChannel implements ServerSocketChannel { private final ServerSocketChannel realChannel; diff --git a/transport-http/src/main/java/io/netty/channel/socket/http/ServerMessageSwitchDownstreamInterface.java b/transport-http/src/main/java/io/netty/channel/socket/http/ServerMessageSwitchDownstreamInterface.java index 75f15c290d..de42c6a528 100644 --- a/transport-http/src/main/java/io/netty/channel/socket/http/ServerMessageSwitchDownstreamInterface.java +++ b/transport-http/src/main/java/io/netty/channel/socket/http/ServerMessageSwitchDownstreamInterface.java @@ -29,4 +29,4 @@ interface ServerMessageSwitchDownstreamInterface { void routeOutboundData(String tunnelId, ChannelBuffer data, ChannelFuture writeFuture); -} \ No newline at end of file +} diff --git a/transport-http/src/main/java/io/netty/channel/socket/http/ServerMessageSwitchUpstreamInterface.java b/transport-http/src/main/java/io/netty/channel/socket/http/ServerMessageSwitchUpstreamInterface.java index 83b750e9dd..7581fb1375 100644 --- a/transport-http/src/main/java/io/netty/channel/socket/http/ServerMessageSwitchUpstreamInterface.java +++ b/transport-http/src/main/java/io/netty/channel/socket/http/ServerMessageSwitchUpstreamInterface.java @@ -50,4 +50,4 @@ interface ServerMessageSwitchUpstreamInterface { ALIVE, CLOSED } -} \ No newline at end of file +} diff --git a/transport-http/src/main/java/io/netty/channel/socket/http/WriteSplitter.java b/transport-http/src/main/java/io/netty/channel/socket/http/WriteSplitter.java index 7f5d2094cf..8d8ed5ab03 100644 --- a/transport-http/src/main/java/io/netty/channel/socket/http/WriteSplitter.java +++ b/transport-http/src/main/java/io/netty/channel/socket/http/WriteSplitter.java @@ -25,7 +25,7 @@ import io.netty.buffer.ChannelBuffers; * Provides functionality to split a provided ChannelBuffer into multiple fragments which fit * under a specified size threshold. */ -public final class WriteSplitter { +final class WriteSplitter { public static List split(ChannelBuffer buffer, int splitThreshold) { @@ -50,4 +50,7 @@ public final class WriteSplitter { return fragmentList; } + private WriteSplitter() { + // Unused + } } diff --git a/transport-rxtx/src/main/java/io/netty/channel/rxtx/RXTXChannelConfig.java b/transport-rxtx/src/main/java/io/netty/channel/rxtx/RXTXChannelConfig.java index 50537cad84..9de17e3aed 100644 --- a/transport-rxtx/src/main/java/io/netty/channel/rxtx/RXTXChannelConfig.java +++ b/transport-rxtx/src/main/java/io/netty/channel/rxtx/RXTXChannelConfig.java @@ -108,9 +108,9 @@ public class RXTXChannelConfig extends DefaultChannelConfig { private int baudrate = 115200; - private boolean dtr = false; + private boolean dtr; - private boolean rts = false; + private boolean rts; private Stopbits stopbits = RXTXChannelConfig.Stopbits.STOPBITS_1; diff --git a/transport-rxtx/src/main/java/io/netty/channel/rxtx/RXTXChannelSink.java b/transport-rxtx/src/main/java/io/netty/channel/rxtx/RXTXChannelSink.java index 65effa8855..6b1af71a99 100644 --- a/transport-rxtx/src/main/java/io/netty/channel/rxtx/RXTXChannelSink.java +++ b/transport-rxtx/src/main/java/io/netty/channel/rxtx/RXTXChannelSink.java @@ -276,7 +276,7 @@ public class RXTXChannelSink extends AbstractChannelSink { SerialPort serialPort; - volatile boolean closed = false; + volatile boolean closed; @Override public void eventSunk(final ChannelPipeline pipeline, final ChannelEvent e) throws Exception { diff --git a/transport-sctp/src/main/java/io/netty/channel/sctp/SctpChannelImpl.java b/transport-sctp/src/main/java/io/netty/channel/sctp/SctpChannelImpl.java index c87df7e0a9..a73e42c4a6 100644 --- a/transport-sctp/src/main/java/io/netty/channel/sctp/SctpChannelImpl.java +++ b/transport-sctp/src/main/java/io/netty/channel/sctp/SctpChannelImpl.java @@ -15,19 +15,31 @@ */ package io.netty.channel.sctp; -import com.sun.nio.sctp.Association; -import io.netty.buffer.ChannelBuffer; -import io.netty.channel.*; -import io.netty.channel.sctp.SctpSendBufferPool.SendBuffer; -import io.netty.util.internal.ThreadLocalBoolean; +import static io.netty.channel.Channels.*; import java.net.InetSocketAddress; import java.net.SocketAddress; -import java.util.*; +import java.util.Collections; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Queue; +import java.util.Set; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; -import static io.netty.channel.Channels.fireChannelInterestChanged; +import com.sun.nio.sctp.Association; + +import io.netty.buffer.ChannelBuffer; +import io.netty.channel.AbstractChannel; +import io.netty.channel.Channel; +import io.netty.channel.ChannelFactory; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelFutureListener; +import io.netty.channel.ChannelPipeline; +import io.netty.channel.ChannelSink; +import io.netty.channel.MessageEvent; +import io.netty.channel.sctp.SctpSendBufferPool.SendBuffer; +import io.netty.util.internal.ThreadLocalBoolean; /** */ @@ -102,7 +114,7 @@ class SctpChannelImpl extends AbstractChannel implements SctpChannel { try { final Set allLocalAddresses = channel.getAllLocalAddresses(); final Set addresses = new HashSet(allLocalAddresses.size()); - for(SocketAddress socketAddress: allLocalAddresses) { + for (SocketAddress socketAddress: allLocalAddresses) { addresses.add((InetSocketAddress) socketAddress); } return addresses; @@ -132,7 +144,7 @@ class SctpChannelImpl extends AbstractChannel implements SctpChannel { try { final Set allLocalAddresses = channel.getRemoteAddresses(); final Set addresses = new HashSet(allLocalAddresses.size()); - for(SocketAddress socketAddress: allLocalAddresses) { + for (SocketAddress socketAddress: allLocalAddresses) { addresses.add((InetSocketAddress) socketAddress); } return addresses; diff --git a/transport-sctp/src/main/java/io/netty/channel/sctp/SctpClientChannel.java b/transport-sctp/src/main/java/io/netty/channel/sctp/SctpClientChannel.java index ba4615584f..e875e67bb3 100644 --- a/transport-sctp/src/main/java/io/netty/channel/sctp/SctpClientChannel.java +++ b/transport-sctp/src/main/java/io/netty/channel/sctp/SctpClientChannel.java @@ -15,14 +15,19 @@ */ package io.netty.channel.sctp; -import com.sun.nio.sctp.SctpChannel; -import io.netty.channel.*; -import io.netty.logging.InternalLogger; -import io.netty.logging.InternalLoggerFactory; +import static io.netty.channel.Channels.*; import java.io.IOException; -import static io.netty.channel.Channels.fireChannelOpen; +import com.sun.nio.sctp.SctpChannel; + +import io.netty.channel.ChannelException; +import io.netty.channel.ChannelFactory; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelPipeline; +import io.netty.channel.ChannelSink; +import io.netty.logging.InternalLogger; +import io.netty.logging.InternalLoggerFactory; /** */ diff --git a/transport-sctp/src/main/java/io/netty/channel/sctp/SctpClientPipelineSink.java b/transport-sctp/src/main/java/io/netty/channel/sctp/SctpClientPipelineSink.java index 0ac7287ab9..cdd483beb2 100644 --- a/transport-sctp/src/main/java/io/netty/channel/sctp/SctpClientPipelineSink.java +++ b/transport-sctp/src/main/java/io/netty/channel/sctp/SctpClientPipelineSink.java @@ -15,11 +15,7 @@ */ package io.netty.channel.sctp; -import io.netty.channel.*; -import io.netty.logging.InternalLogger; -import io.netty.logging.InternalLoggerFactory; -import io.netty.util.internal.DeadLockProofWorker; -import io.netty.util.internal.QueueFactory; +import static io.netty.channel.Channels.*; import java.io.IOException; import java.net.ConnectException; @@ -35,7 +31,19 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; -import static io.netty.channel.Channels.*; +import io.netty.channel.AbstractChannelSink; +import io.netty.channel.ChannelEvent; +import io.netty.channel.ChannelException; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelFutureListener; +import io.netty.channel.ChannelPipeline; +import io.netty.channel.ChannelState; +import io.netty.channel.ChannelStateEvent; +import io.netty.channel.MessageEvent; +import io.netty.logging.InternalLogger; +import io.netty.logging.InternalLoggerFactory; +import io.netty.util.internal.DeadLockProofWorker; +import io.netty.util.internal.QueueFactory; /** */ diff --git a/transport-sctp/src/main/java/io/netty/channel/sctp/SctpNotificationHandler.java b/transport-sctp/src/main/java/io/netty/channel/sctp/SctpNotificationHandler.java index ed8b22a958..0fe6ab4094 100644 --- a/transport-sctp/src/main/java/io/netty/channel/sctp/SctpNotificationHandler.java +++ b/transport-sctp/src/main/java/io/netty/channel/sctp/SctpNotificationHandler.java @@ -15,7 +15,14 @@ */ package io.netty.channel.sctp; -import com.sun.nio.sctp.*; +import com.sun.nio.sctp.AbstractNotificationHandler; +import com.sun.nio.sctp.AssociationChangeNotification; +import com.sun.nio.sctp.HandlerResult; +import com.sun.nio.sctp.Notification; +import com.sun.nio.sctp.PeerAddressChangeNotification; +import com.sun.nio.sctp.SendFailedNotification; +import com.sun.nio.sctp.ShutdownNotification; + import io.netty.channel.Channels; import io.netty.logging.InternalLogger; import io.netty.logging.InternalLoggerFactory; diff --git a/transport-sctp/src/main/java/io/netty/channel/sctp/SctpProviderMetadata.java b/transport-sctp/src/main/java/io/netty/channel/sctp/SctpProviderMetadata.java index db8ce4bb1a..51902620c8 100644 --- a/transport-sctp/src/main/java/io/netty/channel/sctp/SctpProviderMetadata.java +++ b/transport-sctp/src/main/java/io/netty/channel/sctp/SctpProviderMetadata.java @@ -37,7 +37,7 @@ import java.util.regex.Pattern; * Provides information which is specific to a NIO service provider * implementation. */ -class SctpProviderMetadata { +final class SctpProviderMetadata { static final InternalLogger logger = InternalLoggerFactory.getInstance(SctpProviderMetadata.class); diff --git a/transport-sctp/src/main/java/io/netty/channel/sctp/SctpReceiveBufferPool.java b/transport-sctp/src/main/java/io/netty/channel/sctp/SctpReceiveBufferPool.java index 45484cb1f1..358ccd41a1 100644 --- a/transport-sctp/src/main/java/io/netty/channel/sctp/SctpReceiveBufferPool.java +++ b/transport-sctp/src/main/java/io/netty/channel/sctp/SctpReceiveBufferPool.java @@ -31,7 +31,7 @@ final class SctpReceiveBufferPool { super(); } - final ByteBuffer acquire(int size) { + ByteBuffer acquire(int size) { final SoftReference[] pool = this.pool; for (int i = 0; i < POOL_SIZE; i ++) { SoftReference ref = pool[i]; @@ -60,7 +60,7 @@ final class SctpReceiveBufferPool { return buf; } - final void release(ByteBuffer buffer) { + void release(ByteBuffer buffer) { final SoftReference[] pool = this.pool; for (int i = 0; i < POOL_SIZE; i ++) { SoftReference ref = pool[i]; @@ -72,7 +72,7 @@ final class SctpReceiveBufferPool { // pool is full - replace one final int capacity = buffer.capacity(); - for (int i = 0; i< POOL_SIZE; i ++) { + for (int i = 0; i < POOL_SIZE; i ++) { SoftReference ref = pool[i]; ByteBuffer pooled = ref.get(); if (pooled == null) { @@ -87,7 +87,7 @@ final class SctpReceiveBufferPool { } } - private static final int normalizeCapacity(int capacity) { + private static int normalizeCapacity(int capacity) { // Normalize to multiple of 1024 int q = capacity >>> 10; int r = capacity & 1023; @@ -96,4 +96,4 @@ final class SctpReceiveBufferPool { } return q << 10; } -} \ No newline at end of file +} diff --git a/transport-sctp/src/main/java/io/netty/channel/sctp/SctpSendBufferPool.java b/transport-sctp/src/main/java/io/netty/channel/sctp/SctpSendBufferPool.java index f28babde6b..fc64a1219a 100644 --- a/transport-sctp/src/main/java/io/netty/channel/sctp/SctpSendBufferPool.java +++ b/transport-sctp/src/main/java/io/netty/channel/sctp/SctpSendBufferPool.java @@ -33,14 +33,14 @@ final class SctpSendBufferPool { private static final int ALIGN_SHIFT = 4; private static final int ALIGN_MASK = 15; - PreallocationRef poolHead = null; + PreallocationRef poolHead; Preallocation current = new Preallocation(DEFAULT_PREALLOCATION_SIZE); SctpSendBufferPool() { super(); } - final SendBuffer acquire(Object message) { + SendBuffer acquire(Object message) { if (message instanceof SctpPayload) { return acquire((SctpPayload) message); } else { @@ -49,7 +49,7 @@ final class SctpSendBufferPool { } } - private final SendBuffer acquire(SctpPayload message) { + private SendBuffer acquire(SctpPayload message) { final ChannelBuffer src = message.getPayloadBuffer(); final int streamNo = message.getStreamIdentifier(); final int protocolId = message.getProtocolIdentifier(); @@ -99,7 +99,7 @@ final class SctpSendBufferPool { return dst; } - private final Preallocation getPreallocation() { + private Preallocation getPreallocation() { Preallocation current = this.current; if (current.refCnt == 0) { current.buffer.clear(); @@ -109,7 +109,7 @@ final class SctpSendBufferPool { return getPreallocation0(); } - private final Preallocation getPreallocation0() { + private Preallocation getPreallocation0() { PreallocationRef ref = poolHead; if (ref != null) { do { @@ -128,7 +128,7 @@ final class SctpSendBufferPool { return new Preallocation(DEFAULT_PREALLOCATION_SIZE); } - private static final int align(int pos) { + private static int align(int pos) { int q = pos >>> ALIGN_SHIFT; int r = pos & ALIGN_MASK; if (r != 0) { @@ -270,17 +270,17 @@ final class SctpSendBufferPool { } @Override - public final boolean finished() { + public boolean finished() { return true; } @Override - public final long writtenBytes() { + public long writtenBytes() { return 0; } @Override - public final long totalBytes() { + public long totalBytes() { return 0; } diff --git a/transport-sctp/src/main/java/io/netty/channel/sctp/SctpServerChannelImpl.java b/transport-sctp/src/main/java/io/netty/channel/sctp/SctpServerChannelImpl.java index 2bb7ba1484..335be780bb 100644 --- a/transport-sctp/src/main/java/io/netty/channel/sctp/SctpServerChannelImpl.java +++ b/transport-sctp/src/main/java/io/netty/channel/sctp/SctpServerChannelImpl.java @@ -15,9 +15,7 @@ */ package io.netty.channel.sctp; -import io.netty.channel.*; -import io.netty.logging.InternalLogger; -import io.netty.logging.InternalLoggerFactory; +import static io.netty.channel.Channels.*; import java.io.IOException; import java.net.InetSocketAddress; @@ -30,7 +28,13 @@ import java.util.Set; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; -import static io.netty.channel.Channels.fireChannelOpen; +import io.netty.channel.AbstractServerChannel; +import io.netty.channel.ChannelException; +import io.netty.channel.ChannelFactory; +import io.netty.channel.ChannelPipeline; +import io.netty.channel.ChannelSink; +import io.netty.logging.InternalLogger; +import io.netty.logging.InternalLoggerFactory; /** */ @@ -110,12 +114,12 @@ class SctpServerChannelImpl extends AbstractServerChannel @Override public InetSocketAddress getRemoteAddress() { - return null;// not available for server channel + return null; // not available for server channel } @Override public Set getAllRemoteAddresses() { - return null;// not available for server channel + return null; // not available for server channel } @Override diff --git a/transport-sctp/src/main/java/io/netty/channel/sctp/SctpServerPipelineSink.java b/transport-sctp/src/main/java/io/netty/channel/sctp/SctpServerPipelineSink.java index f89144dfa6..d39ca7b688 100644 --- a/transport-sctp/src/main/java/io/netty/channel/sctp/SctpServerPipelineSink.java +++ b/transport-sctp/src/main/java/io/netty/channel/sctp/SctpServerPipelineSink.java @@ -15,21 +15,32 @@ */ package io.netty.channel.sctp; -import com.sun.nio.sctp.SctpChannel; -import io.netty.channel.*; -import io.netty.channel.Channel; -import io.netty.logging.InternalLogger; -import io.netty.logging.InternalLoggerFactory; -import io.netty.util.internal.DeadLockProofWorker; +import static io.netty.channel.Channels.*; import java.io.IOException; import java.net.SocketAddress; import java.net.SocketTimeoutException; -import java.nio.channels.*; +import java.nio.channels.CancelledKeyException; +import java.nio.channels.ClosedChannelException; +import java.nio.channels.ClosedSelectorException; +import java.nio.channels.SelectionKey; +import java.nio.channels.Selector; import java.util.concurrent.Executor; import java.util.concurrent.atomic.AtomicInteger; -import static io.netty.channel.Channels.*; +import com.sun.nio.sctp.SctpChannel; + +import io.netty.channel.AbstractChannelSink; +import io.netty.channel.Channel; +import io.netty.channel.ChannelEvent; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelPipeline; +import io.netty.channel.ChannelState; +import io.netty.channel.ChannelStateEvent; +import io.netty.channel.MessageEvent; +import io.netty.logging.InternalLogger; +import io.netty.logging.InternalLoggerFactory; +import io.netty.util.internal.DeadLockProofWorker; /** */ diff --git a/transport-sctp/src/main/java/io/netty/channel/sctp/SctpWorker.java b/transport-sctp/src/main/java/io/netty/channel/sctp/SctpWorker.java index a2ebbcbf78..e18d6b85df 100644 --- a/transport-sctp/src/main/java/io/netty/channel/sctp/SctpWorker.java +++ b/transport-sctp/src/main/java/io/netty/channel/sctp/SctpWorker.java @@ -15,21 +15,17 @@ */ package io.netty.channel.sctp; -import com.sun.nio.sctp.*; -import io.netty.buffer.ChannelBuffer; -import io.netty.buffer.ChannelBufferFactory; -import io.netty.channel.Channel; -import io.netty.channel.*; -import io.netty.channel.sctp.SctpSendBufferPool.SendBuffer; -import io.netty.logging.InternalLogger; -import io.netty.logging.InternalLoggerFactory; -import io.netty.util.internal.DeadLockProofWorker; -import io.netty.util.internal.QueueFactory; +import static io.netty.channel.Channels.*; import java.io.IOException; import java.net.SocketAddress; import java.nio.ByteBuffer; -import java.nio.channels.*; +import java.nio.channels.AsynchronousCloseException; +import java.nio.channels.CancelledKeyException; +import java.nio.channels.ClosedChannelException; +import java.nio.channels.NotYetConnectedException; +import java.nio.channels.SelectionKey; +import java.nio.channels.Selector; import java.util.Iterator; import java.util.Queue; import java.util.Set; @@ -39,7 +35,20 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; -import static io.netty.channel.Channels.*; +import com.sun.nio.sctp.MessageInfo; + +import io.netty.buffer.ChannelBuffer; +import io.netty.buffer.ChannelBufferFactory; +import io.netty.channel.Channel; +import io.netty.channel.ChannelException; +import io.netty.channel.ChannelFuture; +import io.netty.channel.MessageEvent; +import io.netty.channel.ReceiveBufferSizePredictor; +import io.netty.channel.sctp.SctpSendBufferPool.SendBuffer; +import io.netty.logging.InternalLogger; +import io.netty.logging.InternalLoggerFactory; +import io.netty.util.internal.DeadLockProofWorker; +import io.netty.util.internal.QueueFactory; /** */ diff --git a/transport-sctp/src/main/java/io/netty/channel/sctp/SelectorUtil.java b/transport-sctp/src/main/java/io/netty/channel/sctp/SelectorUtil.java index e027247d5d..99fbf1d4cb 100644 --- a/transport-sctp/src/main/java/io/netty/channel/sctp/SelectorUtil.java +++ b/transport-sctp/src/main/java/io/netty/channel/sctp/SelectorUtil.java @@ -32,7 +32,7 @@ final class SelectorUtil { static void select(Selector selector) throws IOException { try { - selector.select(10);// does small timeout give more throughput + less CPU usage? + selector.select(10); // does small timeout give more throughput + less CPU usage? } catch (CancelledKeyException e) { // Harmless exception - log anyway logger.debug( @@ -40,4 +40,8 @@ final class SelectorUtil { " raised by a Selector - JDK bug?", e); } } + + private SelectorUtil() { + // Unused + } } diff --git a/transport/src/main/java/io/netty/bootstrap/Bootstrap.java b/transport/src/main/java/io/netty/bootstrap/Bootstrap.java index 76d2e82090..c1903f0365 100644 --- a/transport/src/main/java/io/netty/bootstrap/Bootstrap.java +++ b/transport/src/main/java/io/netty/bootstrap/Bootstrap.java @@ -213,7 +213,7 @@ public class Bootstrap implements ExternalResourceReleasable { } ChannelPipeline pipeline = pipeline(); - for(Map.Entry e: pipelineMap.entrySet()) { + for (Map.Entry e: pipelineMap.entrySet()) { pipeline.addLast(e.getKey(), e.getValue()); } diff --git a/transport/src/main/java/io/netty/channel/ChannelEvent.java b/transport/src/main/java/io/netty/channel/ChannelEvent.java index f5687ad5d8..48436d3f04 100644 --- a/transport/src/main/java/io/netty/channel/ChannelEvent.java +++ b/transport/src/main/java/io/netty/channel/ChannelEvent.java @@ -55,7 +55,7 @@ import io.netty.channel.socket.ServerSocketChannel; * * * - * + * * * * diff --git a/transport/src/main/java/io/netty/channel/ChannelFutureAggregator.java b/transport/src/main/java/io/netty/channel/ChannelFutureAggregator.java index d0aa0feb24..e18f44cff3 100644 --- a/transport/src/main/java/io/netty/channel/ChannelFutureAggregator.java +++ b/transport/src/main/java/io/netty/channel/ChannelFutureAggregator.java @@ -36,7 +36,7 @@ public class ChannelFutureAggregator implements ChannelFutureListener { } public void addFuture(ChannelFuture future) { - synchronized(this) { + synchronized (this) { if (pendingFutures == null) { pendingFutures = new HashSet(); } @@ -74,4 +74,4 @@ public class ChannelFutureAggregator implements ChannelFutureListener { } } -} \ No newline at end of file +} diff --git a/transport/src/main/java/io/netty/channel/ChannelHandlerContext.java b/transport/src/main/java/io/netty/channel/ChannelHandlerContext.java index aa6be8def0..078139be69 100644 --- a/transport/src/main/java/io/netty/channel/ChannelHandlerContext.java +++ b/transport/src/main/java/io/netty/channel/ChannelHandlerContext.java @@ -51,7 +51,7 @@ package io.netty.channel; * public void login(String username, password) { * {@link Channels}.write( * this.ctx, - * {@link Channels}.succeededFuture(this.ctx.getChannel()), + * {@link Channels}.succeededFuture(this.ctx.getChannel()), * new LoginMessage(username, password)); * } * ... diff --git a/transport/src/main/java/io/netty/channel/ChannelPipeline.java b/transport/src/main/java/io/netty/channel/ChannelPipeline.java index f2162d7565..cbdeeab097 100644 --- a/transport/src/main/java/io/netty/channel/ChannelPipeline.java +++ b/transport/src/main/java/io/netty/channel/ChannelPipeline.java @@ -215,7 +215,7 @@ public interface ChannelPipeline { * @throws NullPointerException * if the specified name or handler is {@code null} */ - void addFirst (String name, ChannelHandler handler); + void addFirst(String name, ChannelHandler handler); /** * Appends a {@link ChannelHandler} at the last position of this pipeline. @@ -228,7 +228,7 @@ public interface ChannelPipeline { * @throws NullPointerException * if the specified name or handler is {@code null} */ - void addLast (String name, ChannelHandler handler); + void addLast(String name, ChannelHandler handler); /** * Inserts a {@link ChannelHandler} before an existing handler of this @@ -262,7 +262,7 @@ public interface ChannelPipeline { * @throws NullPointerException * if the specified baseName, name, or handler is {@code null} */ - void addAfter (String baseName, String name, ChannelHandler handler); + void addAfter(String baseName, String name, ChannelHandler handler); /** * Removes the specified {@link ChannelHandler} from this pipeline. diff --git a/transport/src/main/java/io/netty/channel/Channels.java b/transport/src/main/java/io/netty/channel/Channels.java index 37d0529aae..e5852d2ced 100644 --- a/transport/src/main/java/io/netty/channel/Channels.java +++ b/transport/src/main/java/io/netty/channel/Channels.java @@ -47,7 +47,7 @@ import io.netty.util.internal.ConversionUtil; * {@link ChannelHandlerContext#sendDownstream(ChannelEvent)} by yourself. * @apiviz.landmark */ -public class Channels { +public final class Channels { // pipeline factory methods diff --git a/transport/src/main/java/io/netty/channel/iostream/IOStreamAddress.java b/transport/src/main/java/io/netty/channel/iostream/IOStreamAddress.java index a5005a1c79..933288fc1b 100755 --- a/transport/src/main/java/io/netty/channel/iostream/IOStreamAddress.java +++ b/transport/src/main/java/io/netty/channel/iostream/IOStreamAddress.java @@ -26,8 +26,6 @@ import java.net.SocketAddress; */ public class IOStreamAddress extends SocketAddress { - /** - */ private static final long serialVersionUID = -4382415449059935960L; private final InputStream inputStream; diff --git a/transport/src/main/java/io/netty/channel/iostream/IOStreamChannel.java b/transport/src/main/java/io/netty/channel/iostream/IOStreamChannel.java index f38c78ba76..5a68ffb38c 100755 --- a/transport/src/main/java/io/netty/channel/iostream/IOStreamChannel.java +++ b/transport/src/main/java/io/netty/channel/iostream/IOStreamChannel.java @@ -15,10 +15,15 @@ */ package io.netty.channel.iostream; -import io.netty.channel.*; - import java.net.SocketAddress; +import io.netty.channel.AbstractChannel; +import io.netty.channel.ChannelConfig; +import io.netty.channel.ChannelFactory; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelPipeline; +import io.netty.channel.ChannelSink; + /** * A channel to an {@link java.io.InputStream} and an * {@link java.io.OutputStream}. diff --git a/transport/src/main/java/io/netty/channel/iostream/IOStreamChannelSink.java b/transport/src/main/java/io/netty/channel/iostream/IOStreamChannelSink.java index ff0a891101..6930a768e8 100755 --- a/transport/src/main/java/io/netty/channel/iostream/IOStreamChannelSink.java +++ b/transport/src/main/java/io/netty/channel/iostream/IOStreamChannelSink.java @@ -15,15 +15,23 @@ */ package io.netty.channel.iostream; -import io.netty.buffer.ChannelBuffer; -import io.netty.buffer.ChannelBuffers; -import io.netty.channel.*; +import static io.netty.channel.Channels.*; import java.io.OutputStream; import java.io.PushbackInputStream; import java.util.concurrent.ExecutorService; -import static io.netty.channel.Channels.*; +import io.netty.buffer.ChannelBuffer; +import io.netty.buffer.ChannelBuffers; +import io.netty.channel.AbstractChannelSink; +import io.netty.channel.ChannelConfig; +import io.netty.channel.ChannelEvent; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelPipeline; +import io.netty.channel.ChannelState; +import io.netty.channel.ChannelStateEvent; +import io.netty.channel.DefaultChannelConfig; +import io.netty.channel.MessageEvent; /** * A {@link io.netty.channel.ChannelSink} implementation which reads from diff --git a/transport/src/main/java/io/netty/channel/local/DefaultLocalChannel.java b/transport/src/main/java/io/netty/channel/local/DefaultLocalChannel.java index cb34481046..0507ea959a 100644 --- a/transport/src/main/java/io/netty/channel/local/DefaultLocalChannel.java +++ b/transport/src/main/java/io/netty/channel/local/DefaultLocalChannel.java @@ -171,7 +171,7 @@ final class DefaultLocalChannel extends AbstractChannel implements LocalChannel void flushWriteBuffer() { DefaultLocalChannel pairedChannel = this.pairedChannel; if (pairedChannel != null) { - if (pairedChannel.isConnected()){ + if (pairedChannel.isConnected()) { // Channel is open and connected and channelConnected event has // been fired. if (!delivering.get()) { @@ -179,7 +179,7 @@ final class DefaultLocalChannel extends AbstractChannel implements LocalChannel try { for (;;) { MessageEvent e = writeBuffer.poll(); - if(e == null) { + if (e == null) { break; } @@ -206,7 +206,7 @@ final class DefaultLocalChannel extends AbstractChannel implements LocalChannel for (;;) { MessageEvent e = writeBuffer.poll(); - if(e == null) { + if (e == null) { break; } diff --git a/transport/src/main/java/io/netty/channel/local/LocalAddress.java b/transport/src/main/java/io/netty/channel/local/LocalAddress.java index 266f63e376..1853690d82 100644 --- a/transport/src/main/java/io/netty/channel/local/LocalAddress.java +++ b/transport/src/main/java/io/netty/channel/local/LocalAddress.java @@ -104,7 +104,7 @@ public final class LocalAddress extends SocketAddress implements Comparable{ +abstract class AbstractWriteRequestQueue implements BlockingQueue { protected final BlockingQueue queue; diff --git a/transport/src/main/java/io/netty/channel/socket/nio/NioClientSocketChannelFactory.java b/transport/src/main/java/io/netty/channel/socket/nio/NioClientSocketChannelFactory.java index 28cc631877..f91e07cfc0 100644 --- a/transport/src/main/java/io/netty/channel/socket/nio/NioClientSocketChannelFactory.java +++ b/transport/src/main/java/io/netty/channel/socket/nio/NioClientSocketChannelFactory.java @@ -117,7 +117,7 @@ public class NioClientSocketChannelFactory implements ClientSocketChannelFactory public NioClientSocketChannelFactory( Executor bossExecutor, Executor workerExecutor, int workerCount) { - this(bossExecutor, workerExecutor, DEFAULT_BOSS_COUNT, workerCount); + this(bossExecutor, workerExecutor, DEFAULT_BOSS_COUNT, workerCount); } /** @@ -135,7 +135,7 @@ public class NioClientSocketChannelFactory implements ClientSocketChannelFactory public NioClientSocketChannelFactory( Executor bossExecutor, Executor workerExecutor, int bossCount, int workerCount) { - + if (bossExecutor == null) { throw new NullPointerException("bossExecutor"); } diff --git a/transport/src/main/java/io/netty/channel/socket/nio/NioClientSocketPipelineSink.java b/transport/src/main/java/io/netty/channel/socket/nio/NioClientSocketPipelineSink.java index 8fbe800ba6..ad9c69145d 100644 --- a/transport/src/main/java/io/netty/channel/socket/nio/NioClientSocketPipelineSink.java +++ b/transport/src/main/java/io/netty/channel/socket/nio/NioClientSocketPipelineSink.java @@ -54,7 +54,7 @@ class NioClientSocketPipelineSink extends AbstractChannelSink { final Executor bossExecutor; - private final Boss bosses[]; + private final Boss[] bosses; private final NioWorker[] workers; private final AtomicInteger bossIndex = new AtomicInteger(); @@ -63,12 +63,12 @@ class NioClientSocketPipelineSink extends AbstractChannelSink { NioClientSocketPipelineSink( Executor bossExecutor, Executor workerExecutor, int bossCount, int workerCount) { - + this.bossExecutor = bossExecutor; bosses = new Boss[bossCount]; for (int i = 0; i < bosses.length; i ++) { - bosses[i] = new Boss(); + bosses[i] = new Boss(); } workers = new NioWorker[workerCount]; diff --git a/transport/src/main/java/io/netty/channel/socket/nio/NioDatagramChannel.java b/transport/src/main/java/io/netty/channel/socket/nio/NioDatagramChannel.java index 27cfe152b8..d3feb3289c 100644 --- a/transport/src/main/java/io/netty/channel/socket/nio/NioDatagramChannel.java +++ b/transport/src/main/java/io/netty/channel/socket/nio/NioDatagramChannel.java @@ -44,7 +44,7 @@ import io.netty.util.internal.ThreadLocalBoolean; /** * Provides an NIO based {@link io.netty.channel.socket.DatagramChannel}. */ -class NioDatagramChannel extends AbstractChannel +final class NioDatagramChannel extends AbstractChannel implements io.netty.channel.socket.DatagramChannel { /** diff --git a/transport/src/main/java/io/netty/channel/socket/nio/NioProviderMetadata.java b/transport/src/main/java/io/netty/channel/socket/nio/NioProviderMetadata.java index 8b422b42f3..b4152e7b89 100644 --- a/transport/src/main/java/io/netty/channel/socket/nio/NioProviderMetadata.java +++ b/transport/src/main/java/io/netty/channel/socket/nio/NioProviderMetadata.java @@ -37,7 +37,7 @@ import io.netty.util.internal.SystemPropertyUtil; * Provides information which is specific to a NIO service provider * implementation. */ -class NioProviderMetadata { +final class NioProviderMetadata { static final InternalLogger logger = InternalLoggerFactory.getInstance(NioProviderMetadata.class); diff --git a/transport/src/main/java/io/netty/channel/socket/nio/NioServerSocketChannel.java b/transport/src/main/java/io/netty/channel/socket/nio/NioServerSocketChannel.java index 8358017edd..9185dc1e07 100644 --- a/transport/src/main/java/io/netty/channel/socket/nio/NioServerSocketChannel.java +++ b/transport/src/main/java/io/netty/channel/socket/nio/NioServerSocketChannel.java @@ -36,7 +36,7 @@ import io.netty.logging.InternalLoggerFactory; /** */ -class NioServerSocketChannel extends AbstractServerChannel +final class NioServerSocketChannel extends AbstractServerChannel implements io.netty.channel.socket.ServerSocketChannel { private static final InternalLogger logger = diff --git a/transport/src/main/java/io/netty/channel/socket/nio/SelectorUtil.java b/transport/src/main/java/io/netty/channel/socket/nio/SelectorUtil.java index 4e3570fd12..fd62de37a5 100644 --- a/transport/src/main/java/io/netty/channel/socket/nio/SelectorUtil.java +++ b/transport/src/main/java/io/netty/channel/socket/nio/SelectorUtil.java @@ -40,4 +40,8 @@ final class SelectorUtil { " raised by a Selector - JDK bug?", e); } } + + private SelectorUtil() { + // Unused + } } diff --git a/transport/src/main/java/io/netty/channel/socket/nio/SocketReceiveBufferPool.java b/transport/src/main/java/io/netty/channel/socket/nio/SocketReceiveBufferPool.java index 7385eb7457..21384322aa 100644 --- a/transport/src/main/java/io/netty/channel/socket/nio/SocketReceiveBufferPool.java +++ b/transport/src/main/java/io/netty/channel/socket/nio/SocketReceiveBufferPool.java @@ -68,7 +68,7 @@ final class SocketReceiveBufferPool { // pool is full - replace one final int capacity = buffer.capacity(); - for (int i = 0; i< POOL_SIZE; i ++) { + for (int i = 0; i < POOL_SIZE; i ++) { SoftReference ref = pool[i]; ByteBuffer pooled = ref.get(); if (pooled == null) { diff --git a/transport/src/main/java/io/netty/channel/socket/nio/SocketSendBufferPool.java b/transport/src/main/java/io/netty/channel/socket/nio/SocketSendBufferPool.java index 5b03846ec7..a775ed0441 100644 --- a/transport/src/main/java/io/netty/channel/socket/nio/SocketSendBufferPool.java +++ b/transport/src/main/java/io/netty/channel/socket/nio/SocketSendBufferPool.java @@ -35,7 +35,7 @@ final class SocketSendBufferPool { private static final int ALIGN_SHIFT = 4; private static final int ALIGN_MASK = 15; - PreallocationRef poolHead = null; + PreallocationRef poolHead; Preallocation current = new Preallocation(DEFAULT_PREALLOCATION_SIZE); SocketSendBufferPool() { diff --git a/transport/src/main/java/io/netty/channel/socket/oio/OioAcceptedSocketChannel.java b/transport/src/main/java/io/netty/channel/socket/oio/OioAcceptedSocketChannel.java index 5bd4c6174c..629cb5c2f6 100644 --- a/transport/src/main/java/io/netty/channel/socket/oio/OioAcceptedSocketChannel.java +++ b/transport/src/main/java/io/netty/channel/socket/oio/OioAcceptedSocketChannel.java @@ -30,7 +30,7 @@ import io.netty.channel.ChannelSink; /** */ -class OioAcceptedSocketChannel extends OioSocketChannel { +final class OioAcceptedSocketChannel extends OioSocketChannel { private final PushbackInputStream in; private final OutputStream out; diff --git a/transport/src/main/java/io/netty/channel/socket/oio/OioClientSocketChannel.java b/transport/src/main/java/io/netty/channel/socket/oio/OioClientSocketChannel.java index 02a0b32712..b4610098f6 100644 --- a/transport/src/main/java/io/netty/channel/socket/oio/OioClientSocketChannel.java +++ b/transport/src/main/java/io/netty/channel/socket/oio/OioClientSocketChannel.java @@ -27,7 +27,7 @@ import io.netty.channel.ChannelSink; /** */ -class OioClientSocketChannel extends OioSocketChannel { +final class OioClientSocketChannel extends OioSocketChannel { volatile PushbackInputStream in; volatile OutputStream out; diff --git a/transport/src/main/java/io/netty/channel/socket/oio/OioServerSocketChannel.java b/transport/src/main/java/io/netty/channel/socket/oio/OioServerSocketChannel.java index d3b725948f..dfd5300d03 100644 --- a/transport/src/main/java/io/netty/channel/socket/oio/OioServerSocketChannel.java +++ b/transport/src/main/java/io/netty/channel/socket/oio/OioServerSocketChannel.java @@ -36,7 +36,7 @@ import io.netty.logging.InternalLoggerFactory; /** */ -class OioServerSocketChannel extends AbstractServerChannel +final class OioServerSocketChannel extends AbstractServerChannel implements ServerSocketChannel { private static final InternalLogger logger =
      Event nameEvent type and conditionMeaningEvent nameEvent type and conditionMeaning
      {@code "messageReceived"}