Commit 43a48bf5 authored by john selbie's avatar john selbie

First attempt at enabling multi-threading

parent b08a72f0
.\" Automatically generated by Pandoc 1.16.0.2 .\" Automatically generated by Pandoc 1.19.2.4
.\" .\"
.TH "STUNCLIENT" "1" "" "January 22, 2012" "User Manual" .TH "STUNCLIENT" "1" "" "January 22, 2012" "User Manual"
.hy .hy
......
.\" Automatically generated by Pandoc 1.16.0.2 .\" Automatically generated by Pandoc 1.19.2.4
.\" .\"
.TH "STUNSERVER" "1" "" "January 22, 2012" "User Manual" .TH "STUNSERVER" "1" "" "January 22, 2012" "User Manual"
.hy .hy
...@@ -31,7 +31,9 @@ The following options are supported. ...@@ -31,7 +31,9 @@ The following options are supported.
\-\-ddp \-\-ddp
\-\-primaryadvertised \-\-primaryadvertised
\-\-altadvertised \-\-altadvertised
\-\-threading\ THREADCOUNT
\-\-configfile \-\-configfile
\-\-reuseaddr
\-\-help \-\-help
\f[] \f[]
.fi .fi
...@@ -206,6 +208,18 @@ correctly set these parameters for use within Amazon EC2. ...@@ -206,6 +208,18 @@ correctly set these parameters for use within Amazon EC2.
.PP .PP
* * * * * * * * * *
.PP .PP
\f[B]\-\-threading\f[] THREADCOUNT
.PP
The \-\-threading switch specifies the number of threads to use per
socket.
If 0 is specified for THREADCOUNT, this indicates the default mode,
which is that all sockets share a single thread.
This is the recommended value for most scenarios.
Specifying a higher number of threads is useful in scenarios where a
single core is not sufficient to process the entire network load.
.PP
* * * * *
.PP
\f[B]\-\-configfile\f[] FILENAME \f[B]\-\-configfile\f[] FILENAME
.PP .PP
The \-\-configfile switch allows the server to be configured with a JSON The \-\-configfile switch allows the server to be configured with a JSON
......
...@@ -29,7 +29,9 @@ The following options are supported. ...@@ -29,7 +29,9 @@ The following options are supported.
--ddp --ddp
--primaryadvertised --primaryadvertised
--altadvertised --altadvertised
--threading THREADCOUNT
--configfile --configfile
--reuseaddr
--help --help
Details of each option are as follows. Details of each option are as follows.
...@@ -186,6 +188,14 @@ For more details, visit www.stunprotocol.org for details on how to correctly set ...@@ -186,6 +188,14 @@ For more details, visit www.stunprotocol.org for details on how to correctly set
____ ____
**--threading** THREADCOUNT
The --threading switch specifies the number of threads to use per socket. If 0 is specified for THREADCOUNT, this indicates the default mode, which is
that all sockets share a single thread. This is the recommended value for most scenarios. Specifying a higher number of threads is useful in scenarios where a single
core is not sufficient to process the entire network load.
____
**--configfile** FILENAME **--configfile** FILENAME
The --configfile switch allows the server to be configured with a JSON configuration file rather The --configfile switch allows the server to be configured with a JSON configuration file rather
......
...@@ -52,667 +52,710 @@ const char stunserver_text[] = { ...@@ -52,667 +52,710 @@ const char stunserver_text[] = {
0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x64, 0x0a, 0x20, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x64, 0x0a, 0x20,
0x20, 0x20, 0x20, 0x2d, 0x2d, 0x61, 0x6c, 0x74, 0x61, 0x64, 0x76, 0x65, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x61, 0x6c, 0x74, 0x61, 0x64, 0x76, 0x65,
0x72, 0x74, 0x69, 0x73, 0x65, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x72, 0x74, 0x69, 0x73, 0x65, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d,
0x2d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x66, 0x69, 0x6c, 0x65, 0x0a, 0x2d, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x54,
0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x68, 0x65, 0x6c, 0x70, 0x0a, 0x0a, 0x48, 0x52, 0x45, 0x41, 0x44, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x0a, 0x20,
0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x66,
0x61, 0x63, 0x68, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x69, 0x6c, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x72, 0x65,
0x72, 0x65, 0x20, 0x61, 0x73, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x75, 0x73, 0x65, 0x61, 0x64, 0x64, 0x72, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x73, 0x2e, 0x0a, 0x0a, 0x2d, 0x2d, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x4d, 0x2d, 0x2d, 0x68, 0x65, 0x6c, 0x70, 0x0a, 0x0a, 0x44, 0x65, 0x74, 0x61,
0x4f, 0x44, 0x45, 0x0a, 0x0a, 0x57, 0x68, 0x65, 0x72, 0x65, 0x20, 0x74, 0x69, 0x6c, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20,
0x68, 0x65, 0x20, 0x4d, 0x4f, 0x44, 0x45, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x72, 0x65, 0x20, 0x61,
0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x73, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x2e, 0x0a, 0x0a,
0x69, 0x65, 0x64, 0x20, 0x69, 0x73, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x2d, 0x2d, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x4d, 0x4f, 0x44, 0x45, 0x0a,
0x72, 0x20, 0x22, 0x62, 0x61, 0x73, 0x69, 0x63, 0x22, 0x20, 0x6f, 0x72, 0x0a, 0x57, 0x68, 0x65, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4d,
0x20, 0x22, 0x66, 0x75, 0x6c, 0x6c, 0x22, 0x2e, 0x20, 0x49, 0x6e, 0x20, 0x4f, 0x44, 0x45, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65,
0x62, 0x61, 0x73, 0x69, 0x63, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x72, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20,
0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x6c, 0x69, 0x73, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x22, 0x62,
0x69, 0x73, 0x74, 0x65, 0x6e, 0x73, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x61, 0x73, 0x69, 0x63, 0x22, 0x20, 0x6f, 0x72, 0x20, 0x22, 0x66, 0x75,
0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x6c, 0x22, 0x2e, 0x20, 0x49, 0x6e, 0x20, 0x62, 0x61, 0x73, 0x69,
0x20, 0x42, 0x61, 0x73, 0x69, 0x63, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x63, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20,
0x69, 0x73, 0x20, 0x73, 0x75, 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x65,
0x74, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x62, 0x61, 0x73, 0x69, 0x63, 0x20, 0x6e, 0x73, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67,
0x4e, 0x41, 0x54, 0x20, 0x74, 0x72, 0x61, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x65, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x20, 0x42, 0x61, 0x73,
0x6c, 0x20, 0x73, 0x63, 0x65, 0x6e, 0x61, 0x72, 0x69, 0x6f, 0x73, 0x20, 0x69, 0x63, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x69, 0x73, 0x20, 0x73,
0x69, 0x6e, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x61, 0x20, 0x63, 0x75, 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x66, 0x6f,
0x6c, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x20, 0x72, 0x20, 0x62, 0x61, 0x73, 0x69, 0x63, 0x20, 0x4e, 0x41, 0x54, 0x20,
0x74, 0x6f, 0x20, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x74, 0x72, 0x61, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x20, 0x73, 0x63,
0x69, 0x74, 0x73, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x65, 0x6e, 0x61, 0x72, 0x69, 0x6f, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x77,
0x20, 0x49, 0x50, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x68, 0x69, 0x63, 0x68, 0x20, 0x61, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e,
0x61, 0x6e, 0x64, 0x20, 0x6f, 0x62, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x61, 0x74, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x64,
0x20, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x69, 0x74, 0x73, 0x20,
0x67, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x49, 0x50, 0x20,
0x6c, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20,
0x20, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x6f, 0x62, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x70, 0x6f, 0x72,
0x6e, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x53, 0x54, 0x55, 0x4e, 0x20, 0x74, 0x20, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x20, 0x66, 0x6f,
0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x2d, 0x52, 0x45, 0x51, 0x55, 0x45, 0x72, 0x20, 0x61, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x70, 0x6f,
0x53, 0x54, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x72, 0x74, 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x6c, 0x69, 0x73,
0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x75, 0x70, 0x70, 0x74, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x6e, 0x2e, 0x20, 0x54,
0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x62, 0x61, 0x73, 0x68, 0x65, 0x20, 0x53, 0x54, 0x55, 0x4e, 0x20, 0x43, 0x48, 0x41, 0x4e,
0x69, 0x63, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x0a, 0x0a, 0x49, 0x6e, 0x47, 0x45, 0x2d, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x20, 0x61,
0x20, 0x66, 0x75, 0x6c, 0x6c, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x69, 0x73, 0x20,
0x74, 0x68, 0x65, 0x20, 0x53, 0x54, 0x55, 0x4e, 0x20, 0x73, 0x65, 0x72, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65,
0x76, 0x69, 0x63, 0x65, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x73,
0x20, 0x6f, 0x6e, 0x20, 0x74, 0x77, 0x6f, 0x20, 0x64, 0x69, 0x66, 0x66,
0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66,
0x61, 0x63, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x77, 0x6f,
0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x70,
0x6f, 0x72, 0x74, 0x73, 0x20, 0x6f, 0x6e, 0x20, 0x65, 0x61, 0x63, 0x68,
0x2e, 0x20, 0x41, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x62,
0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69,
0x66, 0x79, 0x20, 0x61, 0x6e, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72,
0x76, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x65, 0x6e, 0x64, 0x20,
0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x20, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x6f,
0x6e, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x6c,
0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65,
0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x2f, 0x6f,
0x72, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x20, 0x46, 0x75, 0x6c,
0x6c, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x66, 0x61, 0x63, 0x69, 0x6c,
0x69, 0x74, 0x61, 0x74, 0x65, 0x73, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e,
0x74, 0x73, 0x20, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x69, 0x6e,
0x67, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65,
0x72, 0x20, 0x4e, 0x41, 0x54, 0x20, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69,
0x6f, 0x72, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x4e, 0x41, 0x54, 0x20, 0x66,
0x69, 0x6c, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x62, 0x65, 0x68,
0x61, 0x76, 0x69, 0x6f, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65,
0x20, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x74, 0x68, 0x65,
0x79, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6f, 0x6e, 0x2e, 0x20, 0x46, 0x75,
0x6c, 0x6c, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75,
0x69, 0x72, 0x65, 0x73, 0x20, 0x74, 0x77, 0x6f, 0x20, 0x75, 0x6e, 0x69,
0x71, 0x75, 0x65, 0x20, 0x49, 0x50, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65,
0x73, 0x73, 0x65, 0x73, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20,
0x68, 0x6f, 0x73, 0x74, 0x2e, 0x20, 0x57, 0x68, 0x65, 0x6e, 0x20, 0x72,
0x75, 0x6e, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x54, 0x43, 0x50, 0x2c,
0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x62, 0x6c, 0x65,
0x20, 0x74, 0x6f, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x20,
0x61, 0x20, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x2d, 0x52, 0x45, 0x51,
0x55, 0x45, 0x53, 0x54, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
0x74, 0x65, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20,
0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x0a, 0x0a, 0x49, 0x66, 0x20,
0x74, 0x68, 0x69, 0x73, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74,
0x65, 0x72, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x70,
0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x2c, 0x20, 0x62, 0x61, 0x73,
0x69, 0x63, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74,
0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x2e, 0x0a,
0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79,
0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x49, 0x4e,
0x54, 0x45, 0x52, 0x46, 0x41, 0x43, 0x45, 0x0a, 0x0a, 0x57, 0x68, 0x65,
0x72, 0x65, 0x20, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x46, 0x41, 0x43, 0x45,
0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x69,
0x73, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x61, 0x20, 0x6c,
0x6f, 0x63, 0x61, 0x6c, 0x20, 0x49, 0x50, 0x20, 0x61, 0x64, 0x64, 0x72,
0x65, 0x73, 0x73, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x20, 0x22, 0x31,
0x39, 0x32, 0x2e, 0x31, 0x36, 0x38, 0x2e, 0x31, 0x2e, 0x32, 0x22, 0x29,
0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x68, 0x6f, 0x73, 0x74,
0x20, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65,
0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72,
0x6b, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20,
0x28, 0x65, 0x2e, 0x67, 0x2e, 0x20, 0x22, 0x65, 0x74, 0x68, 0x30, 0x22,
0x29, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65,
0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x64, 0x64,
0x72, 0x65, 0x73, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69,
0x65, 0x64, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x75,
0x73, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73,
0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68,
0x65, 0x20, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x20, 0x6c, 0x69,
0x73, 0x74, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x64, 0x64, 0x72,
0x65, 0x73, 0x73, 0x2e, 0x0a, 0x0a, 0x49, 0x6e, 0x20, 0x62, 0x61, 0x73,
0x69, 0x63, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65,
0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x73, 0x20,
0x74, 0x6f, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61,
0x6c, 0x6c, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65,
0x20, 0x61, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x73, 0x20, 0x28, 0x49,
0x4e, 0x41, 0x44, 0x44, 0x52, 0x5f, 0x41, 0x4e, 0x59, 0x29, 0x2e, 0x20,
0x49, 0x6e, 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x20, 0x6d, 0x6f, 0x64, 0x65,
0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c,
0x74, 0x20, 0x69, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x69, 0x6e, 0x64,
0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73,
0x74, 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68,
0x6f, 0x73, 0x74, 0x20, 0x61, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x20,
0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69,
0x67, 0x75, 0x72, 0x65, 0x64, 0x20, 0x49, 0x50, 0x20, 0x61, 0x64, 0x64,
0x72, 0x65, 0x73, 0x73, 0x2e, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x61,
0x6c, 0x74, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20,
0x49, 0x4e, 0x54, 0x45, 0x52, 0x46, 0x41, 0x43, 0x45, 0x0a, 0x0a, 0x57,
0x68, 0x65, 0x72, 0x65, 0x20, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x46, 0x41,
0x43, 0x45, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64,
0x20, 0x69, 0x73, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x61,
0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x49, 0x50, 0x20, 0x61, 0x64,
0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x20,
0x22, 0x31, 0x39, 0x32, 0x2e, 0x31, 0x36, 0x38, 0x2e, 0x31, 0x2e, 0x33,
0x22, 0x29, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x68, 0x6f,
0x73, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x61,
0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x6e, 0x65, 0x74, 0x77,
0x6f, 0x72, 0x6b, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63,
0x65, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x20, 0x22, 0x65, 0x74, 0x68,
0x31, 0x22, 0x29, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20, 0x70,
0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20,
0x6e, 0x65, 0x61, 0x72, 0x6c, 0x79, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74,
0x69, 0x63, 0x61, 0x6c, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20,
0x2d, 0x2d, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x74,
0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f,
0x6e, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x20, 0x74, 0x68, 0x61,
0x74, 0x20, 0x69, 0x74, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69,
0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x6c, 0x74, 0x65, 0x72,
0x6e, 0x61, 0x74, 0x65, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x69,
0x6e, 0x67, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x66,
0x6f, 0x72, 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x20, 0x6d, 0x6f, 0x64, 0x65,
0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20, 0x6f, 0x70, 0x74, 0x69,
0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65,
0x64, 0x20, 0x69, 0x6e, 0x20, 0x62, 0x61, 0x73, 0x69, 0x63, 0x20, 0x6d, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x62, 0x61, 0x73, 0x69, 0x63, 0x20, 0x6d,
0x6f, 0x64, 0x65, 0x2e, 0x20, 0x49, 0x6e, 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x6f, 0x64, 0x65, 0x2e, 0x0a, 0x0a, 0x49, 0x6e, 0x20, 0x66, 0x75, 0x6c,
0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6c, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20,
0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x73, 0x20, 0x74, 0x6f, 0x53, 0x54, 0x55, 0x4e, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
0x20, 0x62, 0x69, 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x73, 0x20, 0x6f, 0x6e, 0x20,
0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x74, 0x77, 0x6f, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e,
0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x20, 0x61, 0x64, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73,
0x61, 0x70, 0x74, 0x65, 0x72, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x77, 0x6f, 0x20, 0x64, 0x69, 0x66,
0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x64, 0x20, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x73,
0x49, 0x50, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2e, 0x0a, 0x20, 0x6f, 0x6e, 0x20, 0x65, 0x61, 0x63, 0x68, 0x2e, 0x20, 0x41, 0x20,
0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69,
0x6e, 0x67, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x6d,
0x61, 0x79, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x79, 0x20, 0x61,
0x6e, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72,
0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20,
0x74, 0x6f, 0x20, 0x73, 0x65, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20,
0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x62, 0x61, 0x63,
0x6b, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f,
0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e,
0x61, 0x74, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63,
0x65, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x2f, 0x6f, 0x72, 0x20, 0x70, 0x6f,
0x72, 0x74, 0x73, 0x2e, 0x20, 0x46, 0x75, 0x6c, 0x6c, 0x20, 0x6d, 0x6f,
0x64, 0x65, 0x20, 0x66, 0x61, 0x63, 0x69, 0x6c, 0x69, 0x74, 0x61, 0x74,
0x65, 0x73, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x61,
0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f,
0x20, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x4e, 0x41,
0x54, 0x20, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x20, 0x61,
0x6e, 0x64, 0x20, 0x4e, 0x41, 0x54, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65,
0x72, 0x69, 0x6e, 0x67, 0x20, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f,
0x72, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x65, 0x74,
0x77, 0x6f, 0x72, 0x6b, 0x20, 0x74, 0x68, 0x65, 0x79, 0x20, 0x61, 0x72,
0x65, 0x20, 0x6f, 0x6e, 0x2e, 0x20, 0x46, 0x75, 0x6c, 0x6c, 0x20, 0x6d,
0x6f, 0x64, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73,
0x20, 0x74, 0x77, 0x6f, 0x20, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20,
0x49, 0x50, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73,
0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x68, 0x6f, 0x73, 0x74,
0x2e, 0x20, 0x57, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x6f,
0x76, 0x65, 0x72, 0x20, 0x54, 0x43, 0x50, 0x2c, 0x20, 0x74, 0x68, 0x65,
0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x69, 0x73, 0x20,
0x6e, 0x6f, 0x74, 0x20, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20,
0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x61, 0x20, 0x43, 0x48,
0x41, 0x4e, 0x47, 0x45, 0x2d, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54,
0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x66,
0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6c, 0x69, 0x65,
0x6e, 0x74, 0x2e, 0x0a, 0x0a, 0x49, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73,
0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x69,
0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66,
0x69, 0x65, 0x64, 0x2c, 0x20, 0x62, 0x61, 0x73, 0x69, 0x63, 0x20, 0x6d,
0x6f, 0x64, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64,
0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x2e, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d,
0x2d, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x74, 0x65,
0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x46,
0x41, 0x43, 0x45, 0x0a, 0x0a, 0x57, 0x68, 0x65, 0x72, 0x65, 0x20, 0x49,
0x4e, 0x54, 0x45, 0x52, 0x46, 0x41, 0x43, 0x45, 0x20, 0x73, 0x70, 0x65,
0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x69, 0x73, 0x20, 0x65, 0x69,
0x74, 0x68, 0x65, 0x72, 0x20, 0x61, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
0x20, 0x49, 0x50, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20,
0x28, 0x65, 0x2e, 0x67, 0x2e, 0x20, 0x22, 0x31, 0x39, 0x32, 0x2e, 0x31,
0x36, 0x38, 0x2e, 0x31, 0x2e, 0x32, 0x22, 0x29, 0x20, 0x6f, 0x66, 0x20,
0x74, 0x68, 0x65, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x20, 0x6f, 0x72, 0x20,
0x74, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20,
0x61, 0x20, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x69, 0x6e,
0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x28, 0x65, 0x2e, 0x67,
0x2e, 0x20, 0x22, 0x65, 0x74, 0x68, 0x30, 0x22, 0x29, 0x2e, 0x0a, 0x0a,
0x54, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63,
0x65, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x77,
0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20,
0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69,
0x63, 0x65, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72,
0x69, 0x6d, 0x61, 0x72, 0x79, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e,
0x69, 0x6e, 0x67, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2e,
0x0a, 0x0a, 0x49, 0x6e, 0x20, 0x62, 0x61, 0x73, 0x69, 0x63, 0x20, 0x6d,
0x6f, 0x64, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66,
0x61, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x62,
0x69, 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x61,
0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x61, 0x64, 0x61,
0x70, 0x74, 0x65, 0x72, 0x73, 0x20, 0x28, 0x49, 0x4e, 0x41, 0x44, 0x44,
0x52, 0x5f, 0x41, 0x4e, 0x59, 0x29, 0x2e, 0x20, 0x49, 0x6e, 0x20, 0x66,
0x75, 0x6c, 0x6c, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x74, 0x68,
0x65, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x73,
0x20, 0x74, 0x6f, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20,
0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x6e, 0x6f,
0x6e, 0x2d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x20,
0x61, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x20, 0x77, 0x69, 0x74, 0x68,
0x20, 0x61, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65,
0x64, 0x20, 0x49, 0x50, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
0x2e, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x61, 0x6c, 0x74, 0x69, 0x6e,
0x70, 0x6f, 0x72, 0x74, 0x20, 0x50, 0x4f, 0x52, 0x54, 0x4e, 0x55, 0x4d, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x49, 0x4e, 0x54, 0x45,
0x0a, 0x0a, 0x57, 0x68, 0x65, 0x72, 0x65, 0x20, 0x50, 0x4f, 0x52, 0x54, 0x52, 0x46, 0x41, 0x43, 0x45, 0x0a, 0x0a, 0x57, 0x68, 0x65, 0x72, 0x65,
0x4e, 0x55, 0x4d, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x20, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x46, 0x41, 0x43, 0x45, 0x20, 0x73,
0x75, 0x65, 0x20, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x31, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x69, 0x73, 0x20,
0x20, 0x74, 0x6f, 0x20, 0x36, 0x35, 0x35, 0x33, 0x35, 0x2e, 0x0a, 0x0a, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x61, 0x20, 0x6c, 0x6f, 0x63,
0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x6c, 0x20, 0x49, 0x50, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73,
0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x20, 0x22, 0x31, 0x39, 0x32,
0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x2e, 0x31, 0x36, 0x38, 0x2e, 0x31, 0x2e, 0x33, 0x22, 0x29, 0x20, 0x6f,
0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x20, 0x6f,
0x20, 0x66, 0x6f, 0x72, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x69, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f,
0x6e, 0x67, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x66, 0x20, 0x61, 0x20, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20,
0x69, 0x6e, 0x67, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x28, 0x65,
0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x2e, 0x20, 0x54, 0x68, 0x2e, 0x67, 0x2e, 0x20, 0x22, 0x65, 0x74, 0x68, 0x31, 0x22, 0x29, 0x2e,
0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x77, 0x69, 0x0a, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d,
0x6c, 0x6c, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x20, 0x62, 0x6f, 0x74, 0x68, 0x65, 0x74, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x65, 0x61, 0x72,
0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x6c, 0x79, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x6c,
0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x2d, 0x2d, 0x70, 0x72,
0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61,
0x74, 0x65, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x74, 0x63, 0x65, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x65, 0x78,
0x6f, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x63, 0x65, 0x70, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, 0x74,
0x0a, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20, 0x74,
0x74, 0x20, 0x69, 0x73, 0x20, 0x33, 0x34, 0x37, 0x38, 0x2e, 0x0a, 0x0a, 0x68, 0x65, 0x20, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x65,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x61,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x66,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x75, 0x6c, 0x6c, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x0a, 0x0a, 0x54,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x0a, 0x0a, 0x2d, 0x2d, 0x61, 0x6c, 0x74, 0x70, 0x6f, 0x72, 0x74, 0x20,
0x50, 0x4f, 0x52, 0x54, 0x4e, 0x55, 0x4d, 0x0a, 0x0a, 0x57, 0x68, 0x65,
0x72, 0x65, 0x20, 0x50, 0x4f, 0x52, 0x54, 0x4e, 0x55, 0x4d, 0x20, 0x69,
0x73, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x62, 0x65,
0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x31, 0x20, 0x74, 0x6f, 0x20, 0x36,
0x35, 0x35, 0x33, 0x35, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20,
0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x6c, 0x74, 0x65, 0x72,
0x6e, 0x61, 0x74, 0x65, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x74, 0x68,
0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x77, 0x69, 0x6c,
0x6c, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x6f,
0x72, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x20,
0x66, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67,
0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x65, 0x71,
0x75, 0x65, 0x73, 0x74, 0x73, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x73,
0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20,
0x62, 0x69, 0x6e, 0x64, 0x20, 0x62, 0x6f, 0x74, 0x68, 0x20, 0x74, 0x68,
0x65, 0x20, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x20, 0x61, 0x64,
0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68,
0x65, 0x20, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x65, 0x20,
0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x74,
0x68, 0x69, 0x73, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x0a, 0x0a, 0x54,
0x68, 0x69, 0x73, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x68, 0x69, 0x73, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69,
0x73, 0x20, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x73, 0x20, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x69, 0x6e,
0x20, 0x62, 0x61, 0x73, 0x69, 0x63, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x20, 0x62, 0x61, 0x73, 0x69, 0x63, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e,
0x20, 0x54, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x49, 0x6e, 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x20, 0x6d, 0x6f, 0x64,
0x20, 0x69, 0x73, 0x20, 0x33, 0x34, 0x37, 0x39, 0x2e, 0x0a, 0x0a, 0x2d, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75,
0x6c, 0x74, 0x20, 0x69, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x69, 0x6e,
0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x63,
0x6f, 0x6e, 0x64, 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x6c, 0x6f, 0x63, 0x61,
0x6c, 0x68, 0x6f, 0x73, 0x74, 0x20, 0x61, 0x64, 0x61, 0x70, 0x74, 0x65,
0x72, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6e,
0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x64, 0x20, 0x49, 0x50, 0x20, 0x61,
0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2e, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d,
0x0a, 0x2d, 0x2d, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x20, 0x49, 0x50, 0x2d, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x70, 0x6f, 0x72, 0x74,
0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x0a, 0x0a, 0x57, 0x68, 0x65, 0x20, 0x50, 0x4f, 0x52, 0x54, 0x4e, 0x55, 0x4d, 0x0a, 0x0a, 0x57, 0x68,
0x72, 0x65, 0x20, 0x49, 0x50, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x65, 0x72, 0x65, 0x20, 0x50, 0x4f, 0x52, 0x54, 0x4e, 0x55, 0x4d, 0x20,
0x20, 0x69, 0x73, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x22, 0x69, 0x73, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x62,
0x34, 0x22, 0x20, 0x6f, 0x72, 0x20, 0x22, 0x36, 0x22, 0x20, 0x74, 0x6f, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x31, 0x20, 0x74, 0x6f, 0x20,
0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x79, 0x20, 0x74, 0x68, 0x65, 0x36, 0x35, 0x35, 0x33, 0x35, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x69, 0x73,
0x20, 0x75, 0x73, 0x61, 0x67, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x49, 0x50, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x69, 0x6d,
0x56, 0x34, 0x20, 0x6f, 0x72, 0x20, 0x49, 0x50, 0x56, 0x36, 0x2e, 0x0a, 0x61, 0x72, 0x79, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x74, 0x68, 0x65,
0x0a, 0x54, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x77, 0x69, 0x6c, 0x6c,
0x20, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x20, 0x69, 0x73, 0x20, 0x34, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x6f, 0x72,
0x20, 0x66, 0x6f, 0x72, 0x20, 0x49, 0x50, 0x76, 0x34, 0x20, 0x75, 0x73, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x66,
0x61, 0x67, 0x65, 0x2e, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x20,
0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x73, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x73, 0x65,
0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62,
0x69, 0x6e, 0x64, 0x20, 0x62, 0x6f, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65,
0x20, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x20, 0x61, 0x64, 0x64,
0x72, 0x65, 0x73, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65,
0x20, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x65, 0x20, 0x61,
0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68,
0x69, 0x73, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x0a, 0x0a, 0x54, 0x68,
0x65, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x73,
0x20, 0x33, 0x34, 0x37, 0x38, 0x2e, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x70, 0x72, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d,
0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x20, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x61, 0x6c, 0x74, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x50, 0x4f, 0x52, 0x54,
0x0a, 0x0a, 0x57, 0x68, 0x65, 0x72, 0x65, 0x20, 0x50, 0x52, 0x4f, 0x54, 0x4e, 0x55, 0x4d, 0x0a, 0x0a, 0x57, 0x68, 0x65, 0x72, 0x65, 0x20, 0x50,
0x4f, 0x20, 0x69, 0x73, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x4f, 0x52, 0x54, 0x4e, 0x55, 0x4d, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20,
0x49, 0x50, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2c, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65,
0x20, 0x22, 0x75, 0x64, 0x70, 0x22, 0x20, 0x6f, 0x72, 0x20, 0x22, 0x74, 0x6e, 0x20, 0x31, 0x20, 0x74, 0x6f, 0x20, 0x36, 0x35, 0x35, 0x33, 0x35,
0x63, 0x70, 0x22, 0x2e, 0x0a, 0x0a, 0x75, 0x64, 0x70, 0x20, 0x69, 0x73, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74,
0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x68, 0x65, 0x20, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x65,
0x2e, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65,
0x72, 0x76, 0x65, 0x72, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x69,
0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6c, 0x69,
0x73, 0x74, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x66, 0x6f, 0x72, 0x20,
0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x62, 0x69, 0x6e,
0x64, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x73, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69,
0x63, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x69, 0x6e, 0x64,
0x20, 0x62, 0x6f, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72,
0x69, 0x6d, 0x61, 0x72, 0x79, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73,
0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x6c,
0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x65, 0x20, 0x61, 0x64, 0x64, 0x72,
0x65, 0x73, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20,
0x70, 0x6f, 0x72, 0x74, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20,
0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x69, 0x67,
0x6e, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x62, 0x61, 0x73,
0x69, 0x63, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2e, 0x20, 0x54, 0x68, 0x65,
0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x73, 0x20,
0x33, 0x34, 0x37, 0x39, 0x2e, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x6d, 0x61, 0x78, 0x63, 0x6f, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x66,
0x6e, 0x6e, 0x20, 0x4d, 0x41, 0x58, 0x43, 0x4f, 0x4e, 0x4e, 0x0a, 0x0a, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x20, 0x49, 0x50, 0x56, 0x45, 0x52, 0x53,
0x57, 0x68, 0x65, 0x72, 0x65, 0x20, 0x4d, 0x41, 0x58, 0x43, 0x4f, 0x4e, 0x49, 0x4f, 0x4e, 0x0a, 0x0a, 0x57, 0x68, 0x65, 0x72, 0x65, 0x20, 0x49,
0x4e, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x20, 0x69, 0x73, 0x20,
0x20, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x31, 0x20, 0x61, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x22, 0x34, 0x22, 0x20, 0x6f,
0x6e, 0x64, 0x20, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x2e, 0x0a, 0x0a, 0x72, 0x20, 0x22, 0x36, 0x22, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x70, 0x65,
0x46, 0x6f, 0x72, 0x20, 0x54, 0x43, 0x50, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x63, 0x69, 0x66, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x61,
0x2c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x67, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x49, 0x50, 0x56, 0x34, 0x20, 0x6f,
0x65, 0x74, 0x65, 0x72, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x72, 0x20, 0x49, 0x50, 0x56, 0x36, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x65,
0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x66, 0x61, 0x6d,
0x75, 0x6d, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x69, 0x6c, 0x79, 0x20, 0x69, 0x73, 0x20, 0x34, 0x20, 0x66, 0x6f, 0x72,
0x20, 0x73, 0x69, 0x6d, 0x75, 0x6c, 0x74, 0x61, 0x6e, 0x65, 0x6f, 0x75, 0x20, 0x49, 0x50, 0x76, 0x34, 0x20, 0x75, 0x73, 0x61, 0x67, 0x65, 0x2e,
0x73, 0x20, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x65,
0x78, 0x69, 0x73, 0x74, 0x20, 0x61, 0x74, 0x20, 0x61, 0x6e, 0x79, 0x20,
0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x0a,
0x0a, 0x54, 0x68, 0x69, 0x73, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65,
0x74, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, 0x69, 0x67, 0x6e, 0x6f, 0x72,
0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x20, 0x69, 0x73, 0x20,
0x55, 0x44, 0x50, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66,
0x61, 0x75, 0x6c, 0x74, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69,
0x73, 0x20, 0x31, 0x30, 0x30, 0x30, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63,
0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x69, 0x74, 0x79, 0x20, 0x4c, 0x4f, 0x6f, 0x6c, 0x20, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x0a, 0x0a, 0x57, 0x68,
0x47, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x0a, 0x0a, 0x57, 0x68, 0x65, 0x72, 0x65, 0x72, 0x65, 0x20, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x20, 0x69, 0x73,
0x65, 0x20, 0x4c, 0x4f, 0x47, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x20, 0x69, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x49, 0x50, 0x20, 0x70,
0x73, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x67, 0x72, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2c, 0x20, 0x22, 0x75, 0x64,
0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x70, 0x22, 0x20, 0x6f, 0x72, 0x20, 0x22, 0x74, 0x63, 0x70, 0x22, 0x2e,
0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x30, 0x0a, 0x0a, 0x75, 0x64, 0x70, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65,
0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20, 0x70, 0x61, 0x72, 0x61, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x2e, 0x0a, 0x0a, 0x2d,
0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x69, 0x65, 0x73, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x6d, 0x75, 0x63, 0x68, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x20, 0x69, 0x73, 0x20, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x6c, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x72, 0x65, 0x67, 0x61, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x72, 0x64, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a,
0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x65, 0x0a, 0x2d, 0x2d, 0x6d, 0x61, 0x78, 0x63, 0x6f, 0x6e, 0x6e, 0x20, 0x4d,
0x72, 0x72, 0x6f, 0x72, 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6e, 0x41, 0x58, 0x43, 0x4f, 0x4e, 0x4e, 0x0a, 0x0a, 0x57, 0x68, 0x65, 0x72,
0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x20, 0x4d, 0x41, 0x58, 0x43, 0x4f, 0x4e, 0x4e, 0x20, 0x69, 0x73,
0x69, 0x74, 0x79, 0x2e, 0x20, 0x41, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x62, 0x65, 0x74,
0x20, 0x6f, 0x66, 0x20, 0x30, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x31, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x31,
0x69, 0x65, 0x73, 0x20, 0x61, 0x20, 0x76, 0x65, 0x72, 0x79, 0x20, 0x6d, 0x30, 0x30, 0x30, 0x30, 0x30, 0x2e, 0x0a, 0x0a, 0x46, 0x6f, 0x72, 0x20,
0x69, 0x6e, 0x69, 0x6d, 0x61, 0x6c, 0x20, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x54, 0x43, 0x50, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x74, 0x68,
0x74, 0x20, 0x6f, 0x66, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x69, 0x73, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72,
0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20, 0x74,
0x68, 0x65, 0x20, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x20, 0x6e,
0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x69, 0x6d,
0x75, 0x6c, 0x74, 0x61, 0x6e, 0x65, 0x6f, 0x75, 0x73, 0x20, 0x63, 0x6f,
0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x74, 0x68,
0x61, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74,
0x20, 0x61, 0x74, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x67, 0x69, 0x76, 0x65,
0x6e, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x69,
0x73, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20,
0x69, 0x73, 0x20, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x77,
0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x63, 0x6f, 0x6c, 0x20, 0x69, 0x73, 0x20, 0x55, 0x44, 0x50, 0x2e,
0x20, 0x54, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, 0x73, 0x20, 0x31, 0x30,
0x30, 0x30, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x76, 0x65, 0x72, 0x62,
0x6f, 0x73, 0x69, 0x74, 0x79, 0x20, 0x4c, 0x4f, 0x47, 0x4c, 0x45, 0x56,
0x45, 0x4c, 0x0a, 0x0a, 0x57, 0x68, 0x65, 0x72, 0x65, 0x20, 0x4c, 0x4f,
0x47, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20,
0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65,
0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71,
0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x30, 0x2e, 0x0a, 0x0a, 0x54,
0x68, 0x69, 0x73, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65,
0x72, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20,
0x68, 0x6f, 0x77, 0x20, 0x6d, 0x75, 0x63, 0x68, 0x20, 0x69, 0x73, 0x20,
0x70, 0x72, 0x69, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74,
0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x20, 0x77,
0x69, 0x74, 0x68, 0x20, 0x72, 0x65, 0x67, 0x61, 0x72, 0x64, 0x73, 0x20,
0x74, 0x6f, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a,
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72,
0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6e, 0x65, 0x74, 0x77, 0x6f,
0x72, 0x6b, 0x20, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e,
0x20, 0x41, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x20, 0x41, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20,
0x31, 0x20, 0x73, 0x68, 0x6f, 0x77, 0x73, 0x20, 0x73, 0x6c, 0x69, 0x67, 0x30, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20,
0x68, 0x74, 0x6c, 0x79, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x2e, 0x20, 0x41, 0x61, 0x20, 0x76, 0x65, 0x72, 0x79, 0x20, 0x6d, 0x69, 0x6e, 0x69, 0x6d,
0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x32, 0x20, 0x61, 0x6c, 0x20, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x6f, 0x66,
0x73, 0x68, 0x6f, 0x77, 0x73, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x20, 0x6d, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x20, 0x41, 0x20, 0x76,
0x6f, 0x72, 0x65, 0x2e, 0x20, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x79, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x31, 0x20, 0x73, 0x68,
0x69, 0x6e, 0x67, 0x20, 0x33, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x73, 0x6f, 0x77, 0x73, 0x20, 0x73, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x6c, 0x79,
0x68, 0x6f, 0x77, 0x20, 0x61, 0x20, 0x6c, 0x6f, 0x74, 0x20, 0x6d, 0x6f, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x2e, 0x20, 0x41, 0x20, 0x76, 0x61, 0x6c,
0x72, 0x65, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x32, 0x20, 0x73, 0x68, 0x6f, 0x77,
0x61, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x73, 0x20, 0x30, 0x2e, 0x0a, 0x0a, 0x73, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x2e,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x20, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x20,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x33, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x73, 0x68, 0x6f, 0x77, 0x20,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x61, 0x20, 0x6c, 0x6f, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x2e, 0x0a,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x20, 0x69, 0x73, 0x20, 0x30, 0x2e, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x0a, 0x0a, 0x2d, 0x2d, 0x64, 0x64, 0x70, 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x20, 0x2d, 0x2d, 0x64, 0x64, 0x70, 0x20, 0x73, 0x77, 0x69, 0x74, 0x63, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x68, 0x20, 0x69, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x22, 0x44, 0x69, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x20, 0x44, 0x65, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x6e, 0x69, 0x61, 0x6c, 0x20, 0x28, 0x6f, 0x66, 0x20, 0x73, 0x65, 0x72, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d,
0x76, 0x69, 0x63, 0x65, 0x29, 0x20, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x64, 0x64, 0x70, 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x2d, 0x2d, 0x64,
0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2e, 0x20, 0x41, 0x6e, 0x79, 0x20, 0x63, 0x64, 0x70, 0x20, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x20, 0x69, 0x73,
0x6c, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x49, 0x50, 0x20, 0x61, 0x64, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x22, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69,
0x72, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x66, 0x6c, 0x62, 0x75, 0x74, 0x65, 0x64, 0x20, 0x44, 0x65, 0x6e, 0x69, 0x61, 0x6c,
0x6f, 0x6f, 0x64, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x20, 0x28, 0x6f, 0x66, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
0x76, 0x69, 0x63, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x6f, 0x29, 0x20, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
0x6f, 0x20, 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x22, 0x2e, 0x20, 0x41, 0x6e, 0x79, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e,
0x74, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x20, 0x49, 0x50, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
0x74, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x20, 0x69, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x66, 0x6c, 0x6f, 0x6f, 0x64, 0x73,
0x73, 0x20, 0x70, 0x75, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x61, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
0x20, 0x22, 0x70, 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, 0x20, 0x62, 0x6f, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x6f, 0x6f, 0x20, 0x6d, 0x61,
0x78, 0x22, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x6e, 0x79, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x69,
0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x73, 0x6e, 0x20, 0x61, 0x20, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x20, 0x69, 0x6e,
0x75, 0x62, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x74, 0x20, 0x70, 0x61, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x20, 0x69, 0x73, 0x20, 0x70, 0x75,
0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x61, 0x20, 0x22, 0x70, 0x65,
0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x6e, 0x61, 0x6c, 0x74, 0x79, 0x20, 0x62, 0x6f, 0x78, 0x22, 0x20, 0x74,
0x20, 0x49, 0x50, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x64, 0x72, 0x68, 0x61, 0x74, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x73,
0x6f, 0x70, 0x70, 0x65, 0x64, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x72, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x73, 0x75, 0x62, 0x73, 0x65,
0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x61, 0x71, 0x75, 0x65, 0x6e, 0x74, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74,
0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x20, 0x66,
0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x49, 0x50, 0x20,
0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x0a, 0x0a, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x64, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x74, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x65, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x72, 0x65, 0x63,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x65, 0x69, 0x76, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x20, 0x72, 0x65, 0x73,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x0a, 0x0a, 0x2d, 0x2d, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x61, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x64, 0x20, 0x50, 0x52, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x49, 0x4d, 0x41, 0x52, 0x59, 0x2d, 0x49, 0x50, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x61, 0x6c, 0x74, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x64, 0x20, 0x41, 0x4c, 0x54, 0x2d, 0x49, 0x50, 0x0a, 0x0a, 0x57, 0x68, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d,
0x65, 0x72, 0x65, 0x20, 0x50, 0x52, 0x49, 0x4d, 0x41, 0x52, 0x59, 0x2d, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x61, 0x64, 0x76, 0x65, 0x72,
0x49, 0x50, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x41, 0x4c, 0x54, 0x2d, 0x49, 0x74, 0x69, 0x73, 0x65, 0x64, 0x20, 0x50, 0x52, 0x49, 0x4d, 0x41, 0x52,
0x50, 0x20, 0x61, 0x72, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x59, 0x2d, 0x49, 0x50, 0x0a, 0x0a, 0x2d, 0x2d, 0x61, 0x6c, 0x74, 0x61,
0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x49, 0x50, 0x20, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x64, 0x20, 0x41, 0x4c,
0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x54, 0x2d, 0x49, 0x50, 0x0a, 0x0a, 0x57, 0x68, 0x65, 0x72, 0x65, 0x20,
0x67, 0x73, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x20, 0x22, 0x31, 0x30, 0x50, 0x52, 0x49, 0x4d, 0x41, 0x52, 0x59, 0x2d, 0x49, 0x50, 0x20, 0x61,
0x31, 0x2e, 0x32, 0x33, 0x2e, 0x34, 0x35, 0x2e, 0x36, 0x37, 0x22, 0x29, 0x6e, 0x64, 0x20, 0x41, 0x4c, 0x54, 0x2d, 0x49, 0x50, 0x20, 0x61, 0x72,
0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x6e, 0x75, 0x6d, 0x65,
0x65, 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x49, 0x50, 0x20, 0x72, 0x69, 0x63, 0x20, 0x49, 0x50, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65,
0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x73, 0x73, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x28,
0x20, 0x74, 0x68, 0x65, 0x20, 0x2d, 0x2d, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x65, 0x2e, 0x67, 0x2e, 0x20, 0x22, 0x31, 0x30, 0x31, 0x2e, 0x32, 0x33,
0x72, 0x79, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x2e, 0x34, 0x35, 0x2e, 0x36, 0x37, 0x22, 0x29, 0x20, 0x74, 0x68, 0x61,
0x61, 0x6e, 0x64, 0x20, 0x2d, 0x2d, 0x61, 0x6c, 0x74, 0x69, 0x6e, 0x74, 0x74, 0x20, 0x61, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x75,
0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x49, 0x50, 0x20, 0x61, 0x64, 0x64, 0x72,
0x73, 0x73, 0x65, 0x73, 0x20, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x65, 0x73, 0x73, 0x65, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65,
0x65, 0x64, 0x20, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x2e, 0x0a, 0x0a, 0x54, 0x20, 0x2d, 0x2d, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x69, 0x6e,
0x68, 0x65, 0x73, 0x65, 0x20, 0x74, 0x77, 0x6f, 0x20, 0x70, 0x61, 0x72, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20,
0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x2d, 0x2d, 0x61, 0x6c, 0x74, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61,
0x66, 0x6f, 0x72, 0x20, 0x61, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x64, 0x63, 0x65, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73,
0x20, 0x75, 0x73, 0x61, 0x67, 0x65, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x2e, 0x20, 0x64, 0x69, 0x73, 0x63, 0x75, 0x73, 0x73, 0x65, 0x64, 0x20, 0x61,
0x20, 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x62, 0x6f, 0x76, 0x65, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x73, 0x65,
0x64, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x75, 0x70, 0x70, 0x20, 0x74, 0x77, 0x6f, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74,
0x6f, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x65, 0x72, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20,
0x6e, 0x67, 0x20, 0x61, 0x20, 0x53, 0x54, 0x55, 0x4e, 0x20, 0x73, 0x65, 0x61, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x64, 0x20, 0x75, 0x73, 0x61,
0x72, 0x76, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x67, 0x65, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x2e, 0x20, 0x49, 0x74, 0x20,
0x20, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x6f, 0x6e, 0x20, 0x41, 0x6d, 0x61, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x20,
0x7a, 0x6f, 0x6e, 0x20, 0x45, 0x43, 0x32, 0x20, 0x6f, 0x72, 0x20, 0x6f, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x20,
0x74, 0x68, 0x65, 0x72, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x61,
0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x20, 0x53, 0x54, 0x55, 0x4e, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x20, 0x6d, 0x6f, 0x64,
0x72, 0x76, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, 0x72, 0x75, 0x6e, 0x6e, 0x65, 0x20, 0x6f, 0x6e, 0x20, 0x41, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x20,
0x69, 0x6e, 0x67, 0x20, 0x62, 0x65, 0x68, 0x69, 0x6e, 0x64, 0x20, 0x61, 0x45, 0x43, 0x32, 0x20, 0x6f, 0x72, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72,
0x20, 0x4e, 0x41, 0x54, 0x2e, 0x20, 0x44, 0x6f, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x65, 0x64, 0x20, 0x65, 0x6e, 0x76, 0x69,
0x20, 0x73, 0x65, 0x74, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x70, 0x61, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x77, 0x68, 0x65, 0x72,
0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x75, 0x6e, 0x6c, 0x65, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
0x73, 0x73, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x20, 0x20, 0x69, 0x73, 0x20, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x20,
0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x62, 0x65, 0x68, 0x69, 0x6e, 0x64, 0x20, 0x61, 0x20, 0x4e, 0x41, 0x54,
0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x20, 0x2e, 0x20, 0x44, 0x6f, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x65, 0x74,
0x69, 0x74, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x73, 0x2e, 0x0a, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65,
0x0a, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x6c, 0x79, 0x2c, 0x20, 0x77, 0x74, 0x65, 0x72, 0x20, 0x75, 0x6e, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x79,
0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x6f, 0x75, 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x20, 0x73, 0x70, 0x65, 0x63,
0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x20, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x74, 0x68, 0x65,
0x62, 0x65, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x65, 0x74, 0x2c, 0x20, 0x74, 0x20, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x20, 0x69, 0x74, 0x20, 0x63,
0x68, 0x65, 0x20, 0x4f, 0x52, 0x49, 0x47, 0x49, 0x4e, 0x20, 0x61, 0x74, 0x72, 0x65, 0x61, 0x74, 0x65, 0x73, 0x2e, 0x0a, 0x0a, 0x4e, 0x6f, 0x72,
0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2c, 0x20, 0x4f, 0x54, 0x48, 0x6d, 0x61, 0x6c, 0x6c, 0x79, 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f,
0x45, 0x52, 0x2d, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x20, 0x61, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x70, 0x61, 0x72,
0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2c, 0x20, 0x61, 0x6e, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x20, 0x62, 0x65, 0x69, 0x6e,
0x64, 0x20, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x2d, 0x41, 0x44, 0x67, 0x20, 0x73, 0x65, 0x74, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4f,
0x44, 0x52, 0x45, 0x53, 0x53, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x52, 0x49, 0x47, 0x49, 0x4e, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62,
0x75, 0x74, 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x75, 0x74, 0x65, 0x2c, 0x20, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x2d, 0x41,
0x20, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69,
0x62, 0x79, 0x20, 0x71, 0x75, 0x65, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x62, 0x75, 0x74, 0x65, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x43, 0x48,
0x74, 0x68, 0x65, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x61, 0x64, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x2d, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53,
0x61, 0x70, 0x74, 0x65, 0x72, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x73, 0x6f, 0x53, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73,
0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x20, 0x61, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x64, 0x65, 0x74,
0x65, 0x20, 0x49, 0x50, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x71,
0x20, 0x74, 0x68, 0x65, 0x79, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6c, 0x69, 0x75, 0x65, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20,
0x73, 0x74, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x6e, 0x2e, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x61, 0x64, 0x61, 0x70, 0x74, 0x65,
0x57, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x72, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74,
0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x50,
0x69, 0x6e, 0x20, 0x61, 0x20, 0x4e, 0x41, 0x54, 0x20, 0x65, 0x6e, 0x76, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65,
0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x2c, 0x20, 0x62, 0x69, 0x79, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e,
0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x6e, 0x2e, 0x20, 0x57, 0x68, 0x65, 0x6e,
0x73, 0x65, 0x73, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x73, 0x74, 0x69, 0x20, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65,
0x6c, 0x6c, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x61,
0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x20, 0x73, 0x65, 0x74, 0x20, 0x4e, 0x41, 0x54, 0x20, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e,
0x20, 0x6f, 0x66, 0x20, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x20, 0x6d, 0x65, 0x6e, 0x74, 0x2c, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e,
0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x61, 0x74, 0x74, 0x72, 0x67, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x20,
0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2c, 0x20, 0x73, 0x75, 0x63, 0x68, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x73, 0x74, 0x69, 0x6c, 0x6c, 0x20, 0x63,
0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x50, 0x32, 0x50, 0x20, 0x63, 0x6f, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x72,
0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x20, 0x6d, 0x72, 0x65, 0x63, 0x74, 0x20, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20,
0x61, 0x79, 0x20, 0x73, 0x75, 0x63, 0x63, 0x65, 0x65, 0x64, 0x2e, 0x20, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x64, 0x64, 0x72,
0x48, 0x6f, 0x77, 0x65, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x65, 0x73, 0x73, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
0x20, 0x74, 0x68, 0x65, 0x20, 0x4f, 0x52, 0x49, 0x47, 0x49, 0x4e, 0x2c, 0x65, 0x73, 0x2c, 0x20, 0x73, 0x75, 0x63, 0x68, 0x20, 0x74, 0x68, 0x61,
0x20, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x2d, 0x41, 0x44, 0x44, 0x52, 0x45, 0x74, 0x20, 0x50, 0x32, 0x50, 0x20, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63,
0x53, 0x53, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x43, 0x48, 0x41, 0x4e, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x73,
0x47, 0x45, 0x44, 0x2d, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x20, 0x75, 0x63, 0x63, 0x65, 0x65, 0x64, 0x2e, 0x20, 0x48, 0x6f, 0x77, 0x65,
0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x20, 0x73, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x68, 0x65,
0x65, 0x6e, 0x74, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x20, 0x4f, 0x52, 0x49, 0x47, 0x49, 0x4e, 0x2c, 0x20, 0x4f, 0x54, 0x48,
0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x45, 0x52, 0x2d, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x2c, 0x20,
0x65, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x2e, 0x61, 0x6e, 0x64, 0x20, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x2d,
0x20, 0x54, 0x68, 0x65, 0x20, 0x69, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x20, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x20, 0x61, 0x74, 0x74, 0x72,
0x6f, 0x66, 0x20, 0x73, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x20, 0x73, 0x65, 0x6e, 0x74, 0x20,
0x6e, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65,
0x4f, 0x54, 0x48, 0x45, 0x52, 0x2d, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x72, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e,
0x53, 0x20, 0x6f, 0x72, 0x20, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x2e, 0x20, 0x54, 0x68, 0x65,
0x2d, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x20, 0x77, 0x69, 0x6c, 0x20, 0x69, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x73,
0x6c, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e,
0x61, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x61, 0x74, 0x74, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x20, 0x4f, 0x54, 0x48, 0x45,
0x65, 0x6d, 0x70, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x52, 0x2d, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x20, 0x6f, 0x72,
0x6f, 0x20, 0x4e, 0x41, 0x54, 0x20, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x20, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x2d, 0x41, 0x44, 0x44,
0x6f, 0x72, 0x20, 0x74, 0x65, 0x73, 0x74, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x52, 0x45, 0x53, 0x53, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x72, 0x65,
0x4e, 0x41, 0x54, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x63, 0x6c,
0x67, 0x20, 0x74, 0x65, 0x73, 0x74, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74,
0x65, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x6f, 0x20, 0x4e, 0x41,
0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x54, 0x20, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x20, 0x74,
0x74, 0x2e, 0x0a, 0x0a, 0x46, 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x65, 0x73, 0x74, 0x73, 0x20, 0x6f, 0x72, 0x20, 0x4e, 0x41, 0x54, 0x20,
0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x2c, 0x20, 0x76, 0x69, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x65,
0x73, 0x69, 0x74, 0x20, 0x77, 0x77, 0x77, 0x2e, 0x73, 0x74, 0x75, 0x6e, 0x73, 0x74, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x70, 0x6f, 0x72,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x6f, 0x72, 0x67, 0x74, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x72, 0x72, 0x65,
0x20, 0x66, 0x6f, 0x72, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x63, 0x74, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x0a, 0x0a,
0x20, 0x6f, 0x6e, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x46, 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x64, 0x65, 0x74,
0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x6c, 0x79, 0x20, 0x73, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x2c, 0x20, 0x76, 0x69, 0x73, 0x69, 0x74, 0x20,
0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x77, 0x77, 0x77, 0x2e, 0x73, 0x74, 0x75, 0x6e, 0x70, 0x72, 0x6f, 0x74,
0x65, 0x74, 0x65, 0x72, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x75, 0x73, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x6f, 0x72, 0x67, 0x20, 0x66, 0x6f, 0x72,
0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x41, 0x6d, 0x61, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x20, 0x6f, 0x6e, 0x20,
0x7a, 0x6f, 0x6e, 0x20, 0x45, 0x43, 0x32, 0x2e, 0x0a, 0x0a, 0x2d, 0x2d, 0x68, 0x6f, 0x77, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x63, 0x74, 0x6c, 0x79, 0x20, 0x73, 0x65, 0x74, 0x20, 0x74, 0x68, 0x65,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x73, 0x65, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x75, 0x73, 0x65, 0x20, 0x77, 0x69,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x41, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x20,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x45, 0x43, 0x32, 0x2e, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x66, 0x69, 0x6c, 0x65, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x20, 0x46, 0x49, 0x4c, 0x45, 0x4e, 0x41, 0x4d, 0x45, 0x0a, 0x0a, 0x54, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x68, 0x65, 0x20, 0x2d, 0x2d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x66, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x69, 0x6c, 0x65, 0x20, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x20, 0x61, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x74, 0x68,
0x72, 0x76, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x63, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x54, 0x48, 0x52, 0x45,
0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x64, 0x20, 0x77, 0x69, 0x41, 0x44, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x0a, 0x0a, 0x54, 0x68, 0x65,
0x74, 0x68, 0x20, 0x61, 0x20, 0x4a, 0x53, 0x4f, 0x4e, 0x20, 0x63, 0x6f, 0x20, 0x2d, 0x2d, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67,
0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x20, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x20, 0x73, 0x70, 0x65, 0x63,
0x66, 0x69, 0x6c, 0x65, 0x20, 0x72, 0x61, 0x74, 0x68, 0x65, 0x72, 0x20, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x75,
0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x72, 0x65,
0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x69, 0x6e, 0x61, 0x64, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x75, 0x73, 0x65, 0x20, 0x70,
0x65, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x65, 0x72, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x20, 0x49,
0x2e, 0x20, 0x49, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x77, 0x66, 0x20, 0x30, 0x20, 0x69, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69,
0x69, 0x74, 0x63, 0x68, 0x20, 0x69, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x66, 0x69, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x54, 0x48, 0x52,
0x69, 0x66, 0x69, 0x65, 0x64, 0x2c, 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x45, 0x41, 0x44, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x2c, 0x20, 0x74, 0x68,
0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73,
0x64, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
0x65, 0x74, 0x65, 0x72, 0x73, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68,
0x65, 0x20, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x2e, 0x20, 0x28, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x6c, 0x6c,
0x2d, 0x2d, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73, 0x69, 0x74, 0x79, 0x20, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x73, 0x68, 0x61,
0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x72, 0x65, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20,
0x6f, 0x6e, 0x65, 0x20, 0x68, 0x6f, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x29, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73,
0x2e, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x65, 0x61, 0x64, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x63, 0x6f,
0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x69, 0x6e, 0x67, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x75,
0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x73,
0x77, 0x69, 0x74, 0x68, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x63, 0x65, 0x6e, 0x61, 0x72, 0x69, 0x6f, 0x73, 0x2e, 0x20, 0x53, 0x70,
0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x65, 0x63, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x68,
0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x69, 0x67, 0x68, 0x65, 0x72, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72,
0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x20,
0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x61, 0x64, 0x69, 0x73, 0x20, 0x75, 0x73, 0x65, 0x66, 0x75, 0x6c, 0x20, 0x69, 0x6e,
0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x20,
0x53, 0x69, 0x6e, 0x63, 0x65, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70,
0x6c, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65,
0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x2c, 0x20,
0x74, 0x68, 0x69, 0x73, 0x20, 0x68, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65,
0x20, 0x61, 0x64, 0x64, 0x65, 0x64, 0x20, 0x61, 0x64, 0x76, 0x61, 0x6e,
0x74, 0x61, 0x67, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6c, 0x6c, 0x6f,
0x77, 0x69, 0x6e, 0x67, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c,
0x65, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x73, 0x20,
0x61, 0x6e, 0x64, 0x20, 0x49, 0x50, 0x20, 0x66, 0x61, 0x6d, 0x69, 0x6c,
0x69, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x77,
0x69, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61,
0x6d, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x20, 0x28,
0x65, 0x61, 0x63, 0x68, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x73, 0x65,
0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x20, 0x74, 0x68, 0x72, 0x65, 0x61,
0x64, 0x29, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x66, 0x69, 0x65, 0x6c,
0x64, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x63,
0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x20, 0x6e, 0x6f, 0x64, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x61,
0x6d, 0x65, 0x64, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61,
0x6c, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x72,
0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x63,
0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20,
0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x20, 0x28,
0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x65, 0x61,
0x64, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x61, 0x73, 0x68, 0x65, 0x73, 0x20,
0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x29, 0x2e, 0x20, 0x41, 0x6e,
0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x73, 0x74, 0x75,
0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69,
0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x69, 0x6c,
0x65, 0x20, 0x69, 0x73, 0x20, 0x73, 0x68, 0x69, 0x70, 0x70, 0x65, 0x64,
0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x22, 0x74, 0x65, 0x73,
0x74, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x20, 0x66, 0x6f, 0x6c, 0x64, 0x65,
0x72, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x6f, 0x75,
0x72, 0x63, 0x65, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x0a,
0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x72, 0x65, 0x75, 0x73, 0x65, 0x61, 0x64,
0x64, 0x72, 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x2d, 0x2d, 0x72, 0x65,
0x75, 0x73, 0x65, 0x61, 0x64, 0x64, 0x72, 0x20, 0x73, 0x77, 0x69, 0x74,
0x63, 0x68, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x20, 0x74, 0x68,
0x65, 0x20, 0x53, 0x54, 0x55, 0x4e, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65,
0x72, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65,
0x20, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68,
0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65,
0x73, 0x73, 0x65, 0x73, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69,
0x73, 0x20, 0x75, 0x73, 0x65, 0x66, 0x75, 0x6c, 0x20, 0x66, 0x6f, 0x72,
0x20, 0x73, 0x63, 0x65, 0x6e, 0x61, 0x72, 0x69, 0x6f, 0x73, 0x20, 0x77, 0x20, 0x73, 0x63, 0x65, 0x6e, 0x61, 0x72, 0x69, 0x6f, 0x73, 0x20, 0x77,
0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c,
0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x20, 0x6e, 0x65, 0x65, 0x65, 0x20, 0x63, 0x6f, 0x72, 0x65, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f,
0x64, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x65, 0x6e, 0x64, 0x20, 0x66, 0x74, 0x20, 0x73, 0x75, 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74,
0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x54, 0x55, 0x4e, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x20,
0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x74, 0x69, 0x72, 0x65, 0x20, 0x6e,
0x2e, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x6c, 0x6f, 0x61, 0x64, 0x2e,
0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x68, 0x65, 0x6c, 0x70, 0x0a, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
0x0a, 0x50, 0x72, 0x69, 0x6e, 0x74, 0x73, 0x20, 0x74, 0x68, 0x69, 0x73, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x46, 0x49, 0x4c, 0x45, 0x4e, 0x41, 0x4d,
0x20, 0x68, 0x65, 0x6c, 0x70, 0x20, 0x70, 0x61, 0x67, 0x65, 0x0a, 0x0a, 0x45, 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x2d, 0x2d, 0x63, 0x6f, 0x6e,
0x0a, 0x0a, 0x45, 0x58, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x53, 0x0a, 0x0a, 0x66, 0x69, 0x67, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x73, 0x77, 0x69, 0x74,
0x0a, 0x73, 0x74, 0x75, 0x6e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x0a, 0x63, 0x68, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x20, 0x74, 0x68,
0x20, 0x20, 0x20, 0x20, 0x57, 0x69, 0x74, 0x68, 0x20, 0x6e, 0x6f, 0x20, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20,
0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x62, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65,
0x72, 0x74, 0x73, 0x20, 0x61, 0x20, 0x62, 0x61, 0x73, 0x69, 0x63, 0x20, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x4a, 0x53, 0x4f,
0x53, 0x54, 0x55, 0x4e, 0x20, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4e, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74,
0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x6f, 0x6e, 0x20, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x72, 0x61, 0x74,
0x55, 0x44, 0x50, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x33, 0x34, 0x37, 0x68, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x72,
0x38, 0x2e, 0x0a, 0x0a, 0x73, 0x74, 0x75, 0x6e, 0x73, 0x65, 0x72, 0x76, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64,
0x65, 0x72, 0x20, 0x2d, 0x2d, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x66, 0x75, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65,
0x6c, 0x6c, 0x20, 0x2d, 0x2d, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x20, 0x49, 0x66, 0x20, 0x74, 0x68, 0x69,
0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x31, 0x32, 0x73, 0x20, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x20, 0x69, 0x73, 0x20,
0x38, 0x2e, 0x33, 0x34, 0x2e, 0x35, 0x36, 0x2e, 0x37, 0x38, 0x20, 0x2d, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x2c, 0x20, 0x6d,
0x2d, 0x61, 0x6c, 0x74, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x6f, 0x73, 0x74, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x63, 0x6f,
0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x70,
0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x20, 0x77, 0x69,
0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65,
0x64, 0x2e, 0x20, 0x28, 0x2d, 0x2d, 0x76, 0x65, 0x72, 0x62, 0x6f, 0x73,
0x69, 0x74, 0x79, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f,
0x6e, 0x6c, 0x79, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x68, 0x6f, 0x6e, 0x6f,
0x72, 0x65, 0x64, 0x29, 0x2e, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x65, 0x61,
0x64, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75,
0x72, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72,
0x76, 0x65, 0x72, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x63, 0x6f, 0x6d,
0x6d, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x70, 0x61,
0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x74, 0x68,
0x65, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20,
0x72, 0x65, 0x61, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x66, 0x69,
0x6c, 0x65, 0x2e, 0x20, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x20, 0x6d, 0x75,
0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69,
0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x63, 0x61,
0x6e, 0x20, 0x62, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69,
0x65, 0x64, 0x2c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x68, 0x61, 0x73,
0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x64, 0x64, 0x65, 0x64, 0x20, 0x61,
0x64, 0x76, 0x61, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x20, 0x6f, 0x66, 0x20,
0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x6d, 0x75, 0x6c,
0x74, 0x69, 0x70, 0x6c, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63,
0x6f, 0x6c, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x49, 0x50, 0x20, 0x66,
0x61, 0x6d, 0x69, 0x6c, 0x69, 0x65, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x72,
0x75, 0x6e, 0x20, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x74, 0x68,
0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65,
0x73, 0x73, 0x20, 0x28, 0x65, 0x61, 0x63, 0x68, 0x20, 0x69, 0x6e, 0x20,
0x61, 0x20, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x20, 0x74,
0x68, 0x72, 0x65, 0x61, 0x64, 0x29, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20,
0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x65, 0x61,
0x63, 0x68, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6e, 0x6f, 0x64, 0x65, 0x20, 0x61, 0x72,
0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x20, 0x69, 0x64, 0x65, 0x6e,
0x74, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65,
0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69,
0x6e, 0x67, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x20, 0x6c,
0x69, 0x6e, 0x65, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65,
0x72, 0x73, 0x20, 0x28, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65,
0x20, 0x6c, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x61, 0x73,
0x68, 0x65, 0x73, 0x20, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x29,
0x2e, 0x20, 0x41, 0x6e, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,
0x20, 0x73, 0x74, 0x75, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x20, 0x63,
0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x69, 0x73, 0x20, 0x73, 0x68, 0x69,
0x70, 0x70, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20,
0x22, 0x74, 0x65, 0x73, 0x74, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x20, 0x66,
0x6f, 0x6c, 0x64, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65,
0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x70, 0x61, 0x63, 0x6b,
0x61, 0x67, 0x65, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x72, 0x65, 0x75,
0x73, 0x65, 0x61, 0x64, 0x64, 0x72, 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x20,
0x2d, 0x2d, 0x72, 0x65, 0x75, 0x73, 0x65, 0x61, 0x64, 0x64, 0x72, 0x20,
0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77,
0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x54, 0x55, 0x4e, 0x20, 0x73,
0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x74,
0x6f, 0x20, 0x62, 0x65, 0x20, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x20,
0x77, 0x69, 0x74, 0x68, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x70,
0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, 0x2e, 0x20, 0x54, 0x68,
0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x75, 0x73, 0x65, 0x66, 0x75, 0x6c,
0x20, 0x66, 0x6f, 0x72, 0x20, 0x73, 0x63, 0x65, 0x6e, 0x61, 0x72, 0x69,
0x6f, 0x73, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x6e, 0x6f,
0x74, 0x68, 0x65, 0x72, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73,
0x20, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x65,
0x6e, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20,
0x53, 0x54, 0x55, 0x4e, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20,
0x70, 0x6f, 0x72, 0x74, 0x2e, 0x0a, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x0a, 0x2d, 0x2d, 0x68,
0x65, 0x6c, 0x70, 0x0a, 0x0a, 0x50, 0x72, 0x69, 0x6e, 0x74, 0x73, 0x20,
0x74, 0x68, 0x69, 0x73, 0x20, 0x68, 0x65, 0x6c, 0x70, 0x20, 0x70, 0x61,
0x67, 0x65, 0x0a, 0x0a, 0x0a, 0x0a, 0x45, 0x58, 0x41, 0x4d, 0x50, 0x4c,
0x45, 0x53, 0x0a, 0x0a, 0x0a, 0x73, 0x74, 0x75, 0x6e, 0x73, 0x65, 0x72,
0x76, 0x65, 0x72, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x57, 0x69, 0x74, 0x68,
0x20, 0x6e, 0x6f, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c,
0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x73, 0x20, 0x61, 0x20, 0x62, 0x61,
0x73, 0x69, 0x63, 0x20, 0x53, 0x54, 0x55, 0x4e, 0x20, 0x62, 0x69, 0x6e,
0x64, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
0x20, 0x6f, 0x6e, 0x20, 0x55, 0x44, 0x50, 0x20, 0x70, 0x6f, 0x72, 0x74,
0x20, 0x33, 0x34, 0x37, 0x38, 0x2e, 0x0a, 0x0a, 0x73, 0x74, 0x75, 0x6e,
0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x2d, 0x2d, 0x6d, 0x6f, 0x64,
0x65, 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x20, 0x2d, 0x2d, 0x70, 0x72, 0x69,
0x6d, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63,
0x65, 0x20, 0x31, 0x32, 0x38, 0x2e, 0x33, 0x34, 0x2e, 0x35, 0x36, 0x2e, 0x65, 0x20, 0x31, 0x32, 0x38, 0x2e, 0x33, 0x34, 0x2e, 0x35, 0x36, 0x2e,
0x37, 0x39, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x41, 0x62, 0x6f, 0x76, 0x37, 0x38, 0x20, 0x2d, 0x2d, 0x61, 0x6c, 0x74, 0x69, 0x6e, 0x74, 0x65,
0x65, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x73, 0x74, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x31, 0x32, 0x38, 0x2e, 0x33, 0x34,
0x61, 0x72, 0x74, 0x73, 0x20, 0x61, 0x20, 0x64, 0x75, 0x61, 0x6c, 0x2d, 0x2e, 0x35, 0x36, 0x2e, 0x37, 0x39, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x68, 0x6f, 0x73, 0x74, 0x20, 0x53, 0x54, 0x55, 0x4e, 0x20, 0x73, 0x65, 0x41, 0x62, 0x6f, 0x76, 0x65, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c,
0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x65, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x73, 0x20, 0x61, 0x20, 0x64,
0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x75, 0x61, 0x6c, 0x2d, 0x68, 0x6f, 0x73, 0x74, 0x20, 0x53, 0x54, 0x55,
0x63, 0x65, 0x73, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x4e, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0x6f, 0x6e,
0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x50, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x74,
0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x22, 0x31, 0x32, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x20, 0x69, 0x64, 0x65, 0x6e,
0x38, 0x2e, 0x33, 0x34, 0x2e, 0x35, 0x36, 0x2e, 0x37, 0x38, 0x22, 0x20, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68,
0x61, 0x6e, 0x64, 0x20, 0x22, 0x31, 0x32, 0x38, 0x2e, 0x33, 0x34, 0x2e, 0x65, 0x20, 0x49, 0x50, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
0x35, 0x36, 0x2e, 0x37, 0x39, 0x22, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x72, 0x20, 0x22, 0x31, 0x32, 0x38, 0x2e, 0x33, 0x34, 0x2e, 0x35, 0x36, 0x2e,
0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x66, 0x6f, 0x75, 0x72, 0x20, 0x55, 0x37, 0x38, 0x22, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x22, 0x31, 0x32, 0x38,
0x44, 0x50, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x6c, 0x69, 0x2e, 0x33, 0x34, 0x2e, 0x35, 0x36, 0x2e, 0x37, 0x39, 0x22, 0x2e, 0x20,
0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x73, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x66, 0x6f,
0x75, 0x72, 0x20, 0x55, 0x44, 0x50, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65,
0x74, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x73, 0x0a,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x31, 0x32, 0x38, 0x2e, 0x33, 0x34, 0x2e,
0x35, 0x36, 0x2e, 0x37, 0x38, 0x3a, 0x33, 0x34, 0x37, 0x38, 0x20, 0x28,
0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x20, 0x49, 0x50, 0x2c, 0x20,
0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x20, 0x50, 0x6f, 0x72, 0x74,
0x29, 0x20, 0x31, 0x32, 0x38, 0x2e, 0x33, 0x34, 0x2e, 0x35, 0x36, 0x2e,
0x37, 0x38, 0x3a, 0x33, 0x34, 0x37, 0x39, 0x20, 0x28, 0x50, 0x72, 0x69,
0x6d, 0x61, 0x72, 0x79, 0x20, 0x49, 0x50, 0x2c, 0x20, 0x41, 0x6c, 0x74,
0x65, 0x72, 0x6e, 0x61, 0x74, 0x65, 0x20, 0x50, 0x6f, 0x72, 0x74, 0x29,
0x20, 0x31, 0x32, 0x38, 0x2e, 0x33, 0x34, 0x2e, 0x35, 0x36, 0x2e, 0x37, 0x20, 0x31, 0x32, 0x38, 0x2e, 0x33, 0x34, 0x2e, 0x35, 0x36, 0x2e, 0x37,
0x38, 0x3a, 0x33, 0x34, 0x37, 0x38, 0x20, 0x28, 0x50, 0x72, 0x69, 0x6d, 0x39, 0x3a, 0x33, 0x34, 0x37, 0x38, 0x20, 0x28, 0x50, 0x72, 0x69, 0x6d,
0x61, 0x72, 0x79, 0x20, 0x49, 0x50, 0x2c, 0x20, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x20, 0x49, 0x50, 0x2c, 0x20, 0x50, 0x72, 0x69, 0x6d,
0x61, 0x72, 0x79, 0x20, 0x50, 0x6f, 0x72, 0x74, 0x29, 0x20, 0x31, 0x32, 0x61, 0x72, 0x79, 0x20, 0x50, 0x6f, 0x72, 0x74, 0x29, 0x20, 0x31, 0x32,
0x38, 0x2e, 0x33, 0x34, 0x2e, 0x35, 0x36, 0x2e, 0x37, 0x38, 0x3a, 0x33, 0x38, 0x2e, 0x33, 0x34, 0x2e, 0x35, 0x36, 0x2e, 0x37, 0x39, 0x3a, 0x33,
0x34, 0x37, 0x39, 0x20, 0x28, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x34, 0x37, 0x39, 0x20, 0x28, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61,
0x20, 0x49, 0x50, 0x2c, 0x20, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x65, 0x20, 0x49, 0x50, 0x2c, 0x20, 0x41, 0x6c, 0x74, 0x65, 0x72,
0x74, 0x65, 0x20, 0x50, 0x6f, 0x72, 0x74, 0x29, 0x20, 0x31, 0x32, 0x38, 0x6e, 0x61, 0x74, 0x65, 0x20, 0x50, 0x6f, 0x72, 0x74, 0x29, 0x0a, 0x0a,
0x2e, 0x33, 0x34, 0x2e, 0x35, 0x36, 0x2e, 0x37, 0x39, 0x3a, 0x33, 0x34, 0x41, 0x6e, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x6f, 0x63, 0x63,
0x37, 0x38, 0x20, 0x28, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x20, 0x75, 0x72, 0x73, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61,
0x49, 0x50, 0x2c, 0x20, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x20, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x20, 0x73, 0x70, 0x65,
0x50, 0x6f, 0x72, 0x74, 0x29, 0x20, 0x31, 0x32, 0x38, 0x2e, 0x33, 0x34, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x64, 0x6f, 0x20, 0x6e, 0x6f,
0x2e, 0x35, 0x36, 0x2e, 0x37, 0x39, 0x3a, 0x33, 0x34, 0x37, 0x39, 0x20, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x6e, 0x20, 0x74,
0x28, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x65, 0x20, 0x49, 0x68, 0x65, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x68, 0x6f, 0x73,
0x50, 0x2c, 0x20, 0x41, 0x6c, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x65, 0x74, 0x20, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68,
0x20, 0x50, 0x6f, 0x72, 0x74, 0x29, 0x0a, 0x0a, 0x41, 0x6e, 0x20, 0x65, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x0a, 0x0a,
0x72, 0x72, 0x6f, 0x72, 0x20, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x73, 0x20, 0x73, 0x74, 0x75, 0x6e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x2d,
0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x2d, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x20, 0x2d,
0x73, 0x73, 0x65, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x2d, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x74, 0x65,
0x65, 0x64, 0x20, 0x64, 0x6f, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x65, 0x74, 0x68, 0x30, 0x20, 0x2d,
0x69, 0x73, 0x74, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x2d, 0x61, 0x6c, 0x74, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63,
0x6f, 0x63, 0x61, 0x6c, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x20, 0x72, 0x75, 0x65, 0x20, 0x65, 0x74, 0x68, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53,
0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x61, 0x6d, 0x65, 0x20, 0x61, 0x73, 0x20, 0x61, 0x62, 0x6f, 0x76, 0x65,
0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x0a, 0x0a, 0x73, 0x74, 0x75, 0x6e, 0x2c, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x20, 0x74, 0x68, 0x65,
0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x2d, 0x2d, 0x6d, 0x6f, 0x64, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x20,
0x65, 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x20, 0x2d, 0x2d, 0x70, 0x72, 0x69, 0x61, 0x72, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65,
0x6d, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x69, 0x72, 0x20, 0x6e,
0x65, 0x20, 0x65, 0x74, 0x68, 0x30, 0x20, 0x2d, 0x2d, 0x61, 0x6c, 0x74, 0x61, 0x6d, 0x65, 0x73, 0x20, 0x61, 0x73, 0x20, 0x65, 0x6e, 0x75, 0x6d,
0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x65, 0x74, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68,
0x68, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x53, 0x61, 0x6d, 0x65, 0x20, 0x65, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x20, 0x54, 0x68,
0x61, 0x73, 0x20, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x2c, 0x20, 0x65, 0x78, 0x65, 0x20, 0x22, 0x69, 0x66, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22,
0x63, 0x65, 0x70, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x22, 0x69, 0x70, 0x63, 0x6f, 0x6e, 0x66, 0x69,
0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x67, 0x22, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x20, 0x77,
0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x62, 0x79, 0x69, 0x6c, 0x6c, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74,
0x20, 0x74, 0x68, 0x65, 0x69, 0x72, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x65, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x20,
0x20, 0x61, 0x73, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x6e, 0x61,
0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x79, 0x6d, 0x65, 0x73, 0x2e, 0x0a, 0x0a, 0x0a, 0x0a, 0x41, 0x55, 0x54, 0x48,
0x73, 0x74, 0x65, 0x6d, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x22, 0x69, 0x4f, 0x52, 0x0a, 0x0a, 0x0a, 0x6a, 0x6f, 0x68, 0x6e, 0x20, 0x73, 0x65,
0x66, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x62, 0x69, 0x65, 0x20, 0x28, 0x6a, 0x6f, 0x68, 0x6e, 0x40, 0x73,
0x22, 0x69, 0x70, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x20, 0x63, 0x65, 0x6c, 0x62, 0x69, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x29, 0x0a,0x00};
0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20,
0x65, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x20, 0x61, 0x76,
0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65,
0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x2e,
0x0a, 0x0a, 0x0a, 0x0a, 0x41, 0x55, 0x54, 0x48, 0x4f, 0x52, 0x0a, 0x0a,
0x0a, 0x6a, 0x6f, 0x68, 0x6e, 0x20, 0x73, 0x65, 0x6c, 0x62, 0x69, 0x65,
0x20, 0x28, 0x6a, 0x6f, 0x68, 0x6e, 0x40, 0x73, 0x65, 0x6c, 0x62, 0x69,
0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x29, 0x0a,0x00};
...@@ -129,6 +129,7 @@ struct StartupArgs ...@@ -129,6 +129,7 @@ struct StartupArgs
std::string strDosProtect; std::string strDosProtect;
std::string strConfigFile; std::string strConfigFile;
std::string strReuseAddr; std::string strReuseAddr;
std::string strThreading;
}; };
...@@ -151,6 +152,7 @@ void DumpStartupArgs(StartupArgs& args) ...@@ -151,6 +152,7 @@ void DumpStartupArgs(StartupArgs& args)
PRINTARG(strMaxConnections); PRINTARG(strMaxConnections);
PRINTARG(strDosProtect); PRINTARG(strDosProtect);
PRINTARG(strReuseAddr); PRINTARG(strReuseAddr);
PRINTARG(strThreading);
Logging::LogMsg(LL_DEBUG, "--------------------------\n"); Logging::LogMsg(LL_DEBUG, "--------------------------\n");
} }
...@@ -243,6 +245,8 @@ HRESULT BuildServerConfigurationFromArgs(StartupArgs& argsIn, CStunServerConfig* ...@@ -243,6 +245,8 @@ HRESULT BuildServerConfigurationFromArgs(StartupArgs& argsIn, CStunServerConfig*
bool fHasAtLeastTwoAdapters = false; bool fHasAtLeastTwoAdapters = false;
CStunServerConfig config; CStunServerConfig config;
int nMaxConnections = 0; int nMaxConnections = 0;
int threadcount = 0;
const char* pszPrimaryAdvertised = argsIn.strPrimaryAdvertised.c_str(); const char* pszPrimaryAdvertised = argsIn.strPrimaryAdvertised.c_str();
const char* pszAltAdvertised = argsIn.strAlternateAdvertised.c_str(); const char* pszAltAdvertised = argsIn.strAlternateAdvertised.c_str();
...@@ -279,6 +283,7 @@ HRESULT BuildServerConfigurationFromArgs(StartupArgs& argsIn, CStunServerConfig* ...@@ -279,6 +283,7 @@ HRESULT BuildServerConfigurationFromArgs(StartupArgs& argsIn, CStunServerConfig*
StringHelper::Trim(args.strPrimaryAdvertised); StringHelper::Trim(args.strPrimaryAdvertised);
StringHelper::Trim(args.strAlternateAdvertised); StringHelper::Trim(args.strAlternateAdvertised);
StringHelper::Trim(args.strThreading);
...@@ -513,6 +518,19 @@ HRESULT BuildServerConfigurationFromArgs(StartupArgs& argsIn, CStunServerConfig* ...@@ -513,6 +518,19 @@ HRESULT BuildServerConfigurationFromArgs(StartupArgs& argsIn, CStunServerConfig*
// ---- REUSE ADDRESS SWITCH ------------------------------------------- // ---- REUSE ADDRESS SWITCH -------------------------------------------
config.fReuseAddr = (argsIn.strReuseAddr.length() > 0); config.fReuseAddr = (argsIn.strReuseAddr.length() > 0);
// ---- THREADING ------------------------------------------------------
if (argsIn.strThreading.size() > 0)
{
hr = StringHelper::ValidateNumberString(argsIn.strThreading.c_str(), 0, 64, &threadcount);
if (FAILED(hr))
{
Logging::LogMsg(LL_ALWAYS, "Error with --threading. required argument must be between 0 - 64");
Chk(hr);
}
}
config.nThreadsPerSocket = threadcount;
*pConfigOut = config; *pConfigOut = config;
hr = S_OK; hr = S_OK;
...@@ -542,6 +560,7 @@ HRESULT ParseCommandLineArgs(int argc, char** argv, int startindex, StartupArgs* ...@@ -542,6 +560,7 @@ HRESULT ParseCommandLineArgs(int argc, char** argv, int startindex, StartupArgs*
cmdline.AddOption("ddp", no_argument, &pStartupArgs->strDosProtect); cmdline.AddOption("ddp", no_argument, &pStartupArgs->strDosProtect);
cmdline.AddOption("configfile", required_argument, &pStartupArgs->strConfigFile); cmdline.AddOption("configfile", required_argument, &pStartupArgs->strConfigFile);
cmdline.AddOption("reuseaddr", no_argument, &pStartupArgs->strReuseAddr); cmdline.AddOption("reuseaddr", no_argument, &pStartupArgs->strReuseAddr);
cmdline.AddOption("threading", required_argument, &pStartupArgs->strThreading);
cmdline.ParseCommandLine(argc, argv, startindex, &fError); cmdline.ParseCommandLine(argc, argv, startindex, &fError);
...@@ -598,6 +617,7 @@ HRESULT LoadConfigsFromFile(const std::string& filename, std::vector<StartupArgs ...@@ -598,6 +617,7 @@ HRESULT LoadConfigsFromFile(const std::string& filename, std::vector<StartupArgs
args.strMaxConnections = child.get("maxconn", ""); args.strMaxConnections = child.get("maxconn", "");
args.strDosProtect = child.get("ddp", ""); args.strDosProtect = child.get("ddp", "");
args.strReuseAddr = child.get("reuseaddr", ""); args.strReuseAddr = child.get("reuseaddr", "");
args.strThreading = child.get("threading", "");
configurations.push_back(args); configurations.push_back(args);
} }
...@@ -739,8 +759,6 @@ int main(int argc, char** argv) ...@@ -739,8 +759,6 @@ int main(int argc, char** argv)
BlockSignal(SIGTERM); BlockSignal(SIGTERM);
BlockSignal(SIGINT); BlockSignal(SIGINT);
ASSERT(false);
#ifdef DEBUG #ifdef DEBUG
Logging::SetLogLevel(LL_DEBUG); Logging::SetLogLevel(LL_DEBUG);
......
...@@ -29,7 +29,7 @@ fHasPP(false), ...@@ -29,7 +29,7 @@ fHasPP(false),
fHasPA(false), fHasPA(false),
fHasAP(false), fHasAP(false),
fHasAA(false), fHasAA(false),
fMultiThreadedMode(false), nThreadsPerSocket(0),
fTCP(false), fTCP(false),
nMaxConnections(0), // zero means default nMaxConnections(0), // zero means default
fEnableDosProtection(false), fEnableDosProtection(false),
...@@ -139,10 +139,11 @@ HRESULT CStunServer::Initialize(const CStunServerConfig& config) ...@@ -139,10 +139,11 @@ HRESULT CStunServer::Initialize(const CStunServerConfig& config)
{ {
Logging::LogMsg(LL_DEBUG, "Creating rate limiter for ddos protection\n"); Logging::LogMsg(LL_DEBUG, "Creating rate limiter for ddos protection\n");
// hard coding to 25000 ip addresses // hard coding to 25000 ip addresses
spLimiter = std::shared_ptr<RateLimiter>(new RateLimiter(25000, config.fMultiThreadedMode)); bool fMultiThreaded = (config.nThreadsPerSocket > 0);
spLimiter = std::shared_ptr<RateLimiter>(new RateLimiter(25000, fMultiThreaded));
} }
if (config.fMultiThreadedMode == false) if (config.nThreadsPerSocket <= 0)
{ {
Logging::LogMsg(LL_DEBUG, "Configuring single threaded mode\n"); Logging::LogMsg(LL_DEBUG, "Configuring single threaded mode\n");
...@@ -156,9 +157,9 @@ HRESULT CStunServer::Initialize(const CStunServerConfig& config) ...@@ -156,9 +157,9 @@ HRESULT CStunServer::Initialize(const CStunServerConfig& config)
} }
else else
{ {
Logging::LogMsg(LL_DEBUG, "Configuring multi-threaded mode\n"); Logging::LogMsg(LL_DEBUG, "Configuring multi-threaded mode with %d threads per socket\n", config.nThreadsPerSocket);
// one thread for every socket // N threads for every socket
CStunSocketThread* pThread = NULL; CStunSocketThread* pThread = NULL;
for (size_t index = 0; index < ARRAYSIZE(_arrSockets); index++) for (size_t index = 0; index < ARRAYSIZE(_arrSockets); index++)
{ {
...@@ -166,6 +167,8 @@ HRESULT CStunServer::Initialize(const CStunServerConfig& config) ...@@ -166,6 +167,8 @@ HRESULT CStunServer::Initialize(const CStunServerConfig& config)
{ {
SocketRole rolePrimaryRecv = _arrSockets[index].GetRole(); SocketRole rolePrimaryRecv = _arrSockets[index].GetRole();
ASSERT(rolePrimaryRecv == (SocketRole)index); ASSERT(rolePrimaryRecv == (SocketRole)index);
for (int t = 0; t < config.nThreadsPerSocket; t++)
{
pThread = new CStunSocketThread(); pThread = new CStunSocketThread();
ChkIf(pThread==NULL, E_OUTOFMEMORY); ChkIf(pThread==NULL, E_OUTOFMEMORY);
_threads.push_back(pThread); _threads.push_back(pThread);
...@@ -173,6 +176,7 @@ HRESULT CStunServer::Initialize(const CStunServerConfig& config) ...@@ -173,6 +176,7 @@ HRESULT CStunServer::Initialize(const CStunServerConfig& config)
} }
} }
} }
}
Cleanup: Cleanup:
......
...@@ -35,7 +35,7 @@ public: ...@@ -35,7 +35,7 @@ public:
bool fHasAP; // AP: Alternate ip, Primary port bool fHasAP; // AP: Alternate ip, Primary port
bool fHasAA; // AA: Alternate ip, Alternate port bool fHasAA; // AA: Alternate ip, Alternate port
bool fMultiThreadedMode; // if true, one thread for each socket int nThreadsPerSocket; // when set to > 0, each socket gets N threads assigned to it, otherwise, all sockets on 1 thread
bool fTCP; // if true, then use TCP instead of UDP bool fTCP; // if true, then use TCP instead of UDP
uint32_t nMaxConnections; // only valid for TCP (on a per-thread basis) uint32_t nMaxConnections; // only valid for TCP (on a per-thread basis)
......
...@@ -282,6 +282,7 @@ void CStunSocketThread::Run() ...@@ -282,6 +282,7 @@ void CStunSocketThread::Run()
char szIPRemote[100] = {}; char szIPRemote[100] = {};
char szIPLocal[100] = {}; char szIPLocal[100] = {};
bool allowed_to_pass = true; bool allowed_to_pass = true;
pthread_t threadid = pthread_self();
int sendsocketcount = 0; int sendsocketcount = 0;
...@@ -339,7 +340,7 @@ void CStunSocketThread::Run() ...@@ -339,7 +340,7 @@ void CStunSocketThread::Run()
szIPLocal[0] = '\0'; szIPLocal[0] = '\0';
} }
Logging::LogMsg(LL_VERBOSE, "recvfrom returns %d from %s on local interface %s", ret, szIPRemote, szIPLocal); Logging::LogMsg(LL_VERBOSE, "recvfrom returns %d from %s on local interface %s on thread %lu", ret, szIPRemote, szIPLocal, (unsigned long)threadid);
allowed_to_pass = (_spLimiter.get() != NULL) ? _spLimiter->RateCheck(_msgIn.addrRemote) : true; allowed_to_pass = (_spLimiter.get() != NULL) ? _spLimiter->RateCheck(_msgIn.addrRemote) : true;
......
...@@ -833,6 +833,7 @@ HRESULT CTCPServer::Initialize(const CStunServerConfig& config) ...@@ -833,6 +833,7 @@ HRESULT CTCPServer::Initialize(const CStunServerConfig& config)
TransportAddressSet tsaListenAll; TransportAddressSet tsaListenAll;
TransportAddressSet tsaHandler; TransportAddressSet tsaHandler;
std::shared_ptr<RateLimiter> spLimiter; std::shared_ptr<RateLimiter> spLimiter;
bool fMultithreaded = false; // hardwire TCP to be non-threaded until we can figure this all out
ChkIfA(_threads[0] != NULL, E_UNEXPECTED); // we can't already be initialized, right? ChkIfA(_threads[0] != NULL, E_UNEXPECTED); // we can't already be initialized, right?
...@@ -855,10 +856,10 @@ HRESULT CTCPServer::Initialize(const CStunServerConfig& config) ...@@ -855,10 +856,10 @@ HRESULT CTCPServer::Initialize(const CStunServerConfig& config)
if (config.fEnableDosProtection) if (config.fEnableDosProtection)
{ {
spLimiter = std::make_shared<RateLimiter>(20000, config.fMultiThreadedMode); spLimiter = std::make_shared<RateLimiter>(20000, fMultithreaded);
} }
if (config.fMultiThreadedMode == false) if (fMultithreaded == false)
{ {
_threads[0] = new CTCPStunThread(); _threads[0] = new CTCPStunThread();
......
...@@ -31,7 +31,7 @@ _allocatedSize(0) ...@@ -31,7 +31,7 @@ _allocatedSize(0)
void CBuffer::Reset() void CBuffer::Reset()
{ {
_spAllocation.clear(); _vec.clear();
_data = nullptr; _data = nullptr;
_size = 0; _size = 0;
_allocatedSize = 0; _allocatedSize = 0;
...@@ -47,25 +47,16 @@ CBuffer::CBuffer(size_t nSize) ...@@ -47,25 +47,16 @@ CBuffer::CBuffer(size_t nSize)
HRESULT CBuffer::InitWithAllocation(size_t size) HRESULT CBuffer::InitWithAllocation(size_t size)
{ {
Reset(); Reset();
// deliberately not checking for 0. Ok to allocate a 0 byte array // deliberately not checking for 0. Ok to allocate a 0 byte array.
std::vector<uint8_t> spAlloc(size+2); // add two bytes for null termination (makes debugging ascii and unicode strings easier), but these two bytes are invisible to the caller (not included in _allocatedSize) // Plus two bytes for null termination (useful for debugging strings)
_vec.resize(size+2);
_spAllocation.swap(spAlloc); _vec[size] = 0;
_vec[size+1] = 0;
spAlloc.clear();
_data = _spAllocation.data();
if (_data) _data = _vec.data();
{ _size = size;
_data[size] = 0;
_data[size+1] = 0;
}
_size = (_data != nullptr) ? size : 0;
_allocatedSize = _size; _allocatedSize = _size;
return (_data != nullptr) ? S_OK : E_FAIL; return (_data != nullptr) ? S_OK : E_FAIL;
......
...@@ -30,7 +30,7 @@ private: ...@@ -30,7 +30,7 @@ private:
uint8_t* _data; uint8_t* _data;
size_t _size; size_t _size;
size_t _allocatedSize; size_t _allocatedSize;
std::vector<uint8_t> _spAllocation; std::vector<uint8_t> _vec;
// disallow copy and assignment. // disallow copy and assignment.
CBuffer(const CBuffer&); CBuffer(const CBuffer&);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment