1 /***************************************************************************
2  * Copyright (c) 2024 Microsoft Corporation
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the MIT License which is available at
6  * https://opensource.org/licenses/MIT.
7  *
8  * SPDX-License-Identifier: MIT
9  **************************************************************************/
10 
11 
12 /**************************************************************************/
13 /**************************************************************************/
14 /**                                                                       */
15 /** NetX Utility                                                          */
16 /**                                                                       */
17 /**   NetX Duo IPerf Test Program                                         */
18 /**                                                                       */
19 /**************************************************************************/
20 /**************************************************************************/
21 
22 #include   "tx_api.h"
23 #include   "nx_api.h"
24 #include   "nx_iperf.h"
25 #ifndef NX_WEB_HTTP_NO_FILEX
26 #include   "fx_api.h"
27 #else
28 #include   "filex_stub.h"
29 #endif
30 
31 #include   "nx_web_http_server.h"
32 
33 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
34 #include   "tx_execution_profile.h"
35 #endif /* TX_EXECUTION_PROFILE_ENABLE */
36 
37 /* Define the counters used in the demo application...  */
38 
39 NX_WEB_HTTP_SERVER nx_iperf_web_server;
40 FX_MEDIA           nx_iperf_ram_disk;
41 NX_IP             *nx_iperf_test_ip;
42 NX_PACKET_POOL    *nx_iperf_test_pool;
43 UCHAR             *nx_iperf_stack_area;
44 ULONG              nx_iperf_stack_area_size;
45 ULONG              nx_iperf_test_error_counter;
46 ctrl_info          nx_iperf_ctrl_info;
47 
48 static NXD_ADDRESS udp_tx_ip_address;
49 static NXD_ADDRESS tcp_tx_ip_address;
50 
51 static ULONG       udp_tx_port = NX_IPERF_DESTINATION_PORT;
52 static ULONG       tcp_tx_port = NX_IPERF_DESTINATION_PORT;
53 
54 static UINT        udp_tx_packet_size = 1470;
55 static UINT        udp_tx_test_time = 10;
56 static UINT        udp_rx_test_time = 10;
57 static UINT        tcp_tx_test_time = 10;
58 static UINT        tcp_rx_test_time = 10;
59 
60 static ULONG       error_counter;
61 
62 NX_TCP_SOCKET      tcp_server_socket;
63 NX_TCP_SOCKET      tcp_client_socket;
64 NX_UDP_SOCKET      udp_server_socket;
65 NX_UDP_SOCKET      udp_client_socket;
66 ULONG              thread_tcp_rx_counter;
67 ULONG              thread_tcp_tx_counter;
68 ULONG              thread_udp_rx_counter;
69 ULONG              thread_udp_tx_counter;
70 static TX_THREAD   thread_tcp_rx_iperf;
71 static TX_THREAD   thread_tcp_tx_iperf;
72 static TX_THREAD   thread_udp_rx_iperf;
73 static TX_THREAD   thread_udp_tx_iperf;
74 
75 extern ULONG       _tx_timer_system_clock;
76 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
77 EXECUTION_TIME     thread_time = 0;
78 EXECUTION_TIME     isr_time = 0;
79 EXECUTION_TIME     idle_time = 0;
80 extern TX_THREAD  *_tx_thread_created_ptr;
81 #endif
82 
83 UCHAR              udp_client_socket_vlan_priority = NX_VLAN_PRIORITY_INVALID;
84 UCHAR              tcp_client_socket_vlan_priority = NX_VLAN_PRIORITY_INVALID;
85 
86 /* Define the constants. */
87 const unsigned char mslogo_jpg[] = {
88     0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a,
89     0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
90     0x00, 0x00, 0x01, 0xd7, 0x00, 0x00, 0x00, 0x9c,
91     0x08, 0x06, 0x00, 0x00, 0x00, 0x2d, 0x6c, 0xe1,
92     0xda, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47,
93     0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00,
94     0x00, 0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00,
95     0xb1, 0x8f, 0x0b, 0xfc, 0x61, 0x05, 0x00, 0x00,
96     0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00,
97     0x2e, 0x22, 0x00, 0x00, 0x2e, 0x22, 0x01, 0xaa,
98     0xe2, 0xdd, 0x92, 0x00, 0x00, 0x19, 0xc7, 0x49,
99     0x44, 0x41, 0x54, 0x78, 0x5e, 0xed, 0xdd, 0x07,
100     0xb8, 0x2c, 0x67, 0x5d, 0xc7, 0xf1, 0x7b, 0x91,
101     0x2a, 0x10, 0x08, 0x08, 0xa1, 0xb7, 0x18, 0x20,
102     0x14, 0xe9, 0x01, 0x44, 0x40, 0x5a, 0x00, 0x43,
103     0x53, 0x8c, 0x08, 0x04, 0x43, 0x4d, 0x10, 0x94,
104     0x26, 0x20, 0xc2, 0x23, 0x21, 0x54, 0x45, 0x10,
105     0x69, 0x81, 0x50, 0x05, 0x42, 0x53, 0xe0, 0x41,
106     0x50, 0x90, 0xa0, 0x14, 0x41, 0x41, 0x88, 0x0a,
107     0xc6, 0x12, 0x5a, 0x10, 0x41, 0xa2, 0xb4, 0x20,
108     0xd2, 0x04, 0x21, 0xfe, 0xbe, 0xb3, 0xb3, 0xcb,
109     0xec, 0xbb, 0xef, 0xec, 0xee, 0xec, 0xd9, 0xbd,
110     0xf7, 0x9c, 0x73, 0xbf, 0x9f, 0xe7, 0xf9, 0x9f,
111     0x99, 0xdd, 0x9d, 0x99, 0xdd, 0xb3, 0x3b, 0x33,
112     0xef, 0xbc, 0x75, 0xf6, 0x48, 0x92, 0x24, 0x49,
113     0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24,
114     0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92,
115     0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49,
116     0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24,
117     0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92,
118     0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49,
119     0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24,
120     0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92,
121     0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49,
122     0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24,
123     0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92,
124     0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49,
125     0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24,
126     0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92,
127     0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49,
128     0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24,
129     0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92,
130     0x24, 0x49, 0x3a, 0xa0, 0xec, 0x6d, 0xa7, 0xbb,
131     0xc2, 0x37, 0xee, 0x76, 0x15, 0xfe, 0x9f, 0x7f,
132     0x4d, 0x5c, 0xa2, 0x79, 0x62, 0x33, 0xce, 0x3a,
133     0xe8, 0xad, 0x67, 0x5e, 0x8b, 0x99, 0x13, 0x4e,
134     0xdd, 0x73, 0x52, 0x26, 0xf7, 0x60, 0x7e, 0x83,
135     0x8e, 0x38, 0xf1, 0xc8, 0x3d, 0x9f, 0x69, 0xe7,
136     0x25, 0x49, 0x3b, 0xc0, 0xb9, 0xda, 0xe9, 0x6e,
137     0x72, 0xd1, 0xc4, 0xc5, 0x36, 0x18, 0x07, 0x27,
138     0xc6, 0x2e, 0x94, 0xa8, 0x2d, 0xb3, 0xce, 0xd8,
139     0x8d, 0xbf, 0x91, 0x24, 0xed, 0x6a, 0x9e, 0xb8,
140     0x25, 0x49, 0x5a, 0x33, 0x13, 0x57, 0x49, 0x92,
141     0xd6, 0xcc, 0xc4, 0x55, 0x92, 0xa4, 0x35, 0x33,
142     0x71, 0x95, 0x24, 0x69, 0xcd, 0x4c, 0x5c, 0x25,
143     0x49, 0x5a, 0x33, 0x13, 0x57, 0x49, 0x92, 0xd6,
144     0xcc, 0xc4, 0x55, 0xd2, 0xda, 0x9c, 0x73, 0xce,
145     0x39, 0x17, 0x49, 0x1c, 0x9b, 0x78, 0x45, 0xe2,
146     0xbd, 0x89, 0x0f, 0x27, 0xde, 0x9d, 0x38, 0x39,
147     0x71, 0x58, 0xbb, 0x98, 0xb4, 0xeb, 0x99, 0xb8,
148     0x6a, 0xbf, 0xc9, 0xc9, 0x76, 0x6f, 0xe2, 0xd2,
149     0x89, 0xab, 0x25, 0xce, 0xdb, 0x3e, 0xad, 0x1d,
150     0xa8, 0xfd, 0x2d, 0x7f, 0x35, 0xb3, 0x9f, 0x4e,
151     0xfc, 0x61, 0xe2, 0x7e, 0x89, 0x9f, 0x4d, 0xdc,
152     0x38, 0x71, 0xdb, 0xc4, 0x71, 0x89, 0xeb, 0x24,
153     0xa4, 0x03, 0xc2, 0x6e, 0x1c, 0xa1, 0xe9, 0xac,
154     0xc4, 0x21, 0xcd, 0x13, 0x9b, 0xf1, 0xc5, 0x83,
155     0xde, 0x7a, 0xe6, 0x65, 0x99, 0x39, 0xe1, 0xd4,
156     0x3d, 0xaf, 0xce, 0xe4, 0x3e, 0xcc, 0x6f, 0xd0,
157     0x55, 0x4f, 0x3c, 0x72, 0xcf, 0xa7, 0xda, 0xf9,
158     0x41, 0x72, 0xb2, 0x23, 0xa7, 0x30, 0x6f, 0x04,
159     0xa9, 0xd3, 0xf6, 0xee, 0xdd, 0xfb, 0xe7, 0xed,
160     0xfc, 0xca, 0xf2, 0x3e, 0x0c, 0xa6, 0xf1, 0xf0,
161     0x44, 0xdf, 0xfe, 0xf4, 0xfe, 0xbc, 0xcf, 0x07,
162     0xda, 0xf9, 0x46, 0xd6, 0x61, 0x80, 0x0c, 0x4e,
163     0xc2, 0x47, 0x25, 0xb8, 0xc8, 0xfb, 0x8f, 0xc4,
164     0x71, 0x59, 0xee, 0x1d, 0x99, 0x6a, 0x07, 0xc9,
165     0x6f, 0xc9, 0xef, 0xf7, 0xc2, 0xc4, 0x83, 0x9b,
166     0x27, 0xfa, 0x1d, 0x9d, 0xdf, 0xf7, 0x4d, 0xed,
167     0xfc, 0x7e, 0x91, 0xcf, 0xca, 0xe4, 0x81, 0x89,
168     0x4b, 0x31, 0x53, 0xf8, 0x40, 0x3e, 0xdf, 0xfb,
169     0xdb, 0x79, 0x69, 0x4b, 0x4c, 0x5c, 0x87, 0xdb,
170     0x49, 0x89, 0xeb, 0x9d, 0x33, 0x79, 0xdb, 0xe8,
171     0x51, 0x15, 0xb9, 0x8c, 0xc3, 0x73, 0x42, 0xf9,
172     0xbf, 0xd1, 0xc3, 0xd5, 0xe4, 0x7d, 0x38, 0x59,
173     0xbd, 0x74, 0xf4, 0xa8, 0xea, 0x89, 0x79, 0x8f,
174     0xa7, 0xb4, 0xf3, 0x8d, 0xac, 0xf3, 0xc7, 0x99,
175     0xfc, 0xe2, 0xe8, 0xd1, 0xc4, 0xb7, 0x12, 0xd7,
176     0xcc, 0xb2, 0x9f, 0x1b, 0x3d, 0xd4, 0x4e, 0x90,
177     0xdf, 0xf2, 0x31, 0x99, 0x3c, 0x73, 0xf4, 0x68,
178     0xae, 0xed, 0x90, 0xb8, 0x5e, 0x26, 0x93, 0xcf,
179     0x26, 0x6a, 0x25, 0x25, 0x7f, 0x9b, 0xb8, 0x69,
180     0x3e, 0x63, 0x93, 0x02, 0x4b, 0x5b, 0x61, 0xb1,
181     0xf0, 0x81, 0xed, 0x27, 0x13, 0xb7, 0x18, 0xcd,
182     0xae, 0x26, 0x27, 0x2b, 0x2e, 0x68, 0x8e, 0x1f,
183     0x3d, 0x5a, 0x4e, 0xd6, 0x39, 0x4f, 0x26, 0x77,
184     0x1c, 0x3d, 0x9a, 0x72, 0xc1, 0xc4, 0xed, 0x47,
185     0xb3, 0xda, 0x09, 0xf2, 0x5b, 0x72, 0xa1, 0xf9,
186     0xc4, 0xd1, 0xa3, 0x19, 0x67, 0x26, 0xde, 0x90,
187     0xe0, 0x42, 0x8a, 0xf9, 0xaa, 0x6c, 0xe3, 0x7c,
188     0x89, 0xcb, 0xb7, 0x0f, 0x37, 0xed, 0xde, 0x89,
189     0xbe, 0x2a, 0x88, 0x1b, 0x25, 0xae, 0x31, 0x9a,
190     0x95, 0xb6, 0xc6, 0xc4, 0x55, 0x0f, 0x68, 0xa7,
191     0xab, 0xe2, 0x84, 0x74, 0x83, 0xd1, 0xec, 0xd2,
192     0xc8, 0x19, 0xf4, 0xe5, 0x96, 0xff, 0xb7, 0x9d,
193     0x6a, 0x67, 0x20, 0xb1, 0xa2, 0x5a, 0xa0, 0xf4,
194     0x07, 0x89, 0xab, 0x27, 0x17, 0x78, 0xcf, 0xc4,
195     0x2f, 0x65, 0xfe, 0x6a, 0x89, 0x49, 0x15, 0x44,
196     0x12, 0xd3, 0x8b, 0x26, 0x8e, 0x4e, 0xbc, 0x26,
197     0x0f, 0x3f, 0x9f, 0xf8, 0xed, 0xe6, 0x85, 0x0d,
198     0xca, 0x7b, 0x71, 0xbe, 0x9b, 0x57, 0xd2, 0xc4,
199     0xeb, 0xbf, 0x32, 0x9a, 0x95, 0xb6, 0xc6, 0xc4,
200     0x55, 0x77, 0xcd, 0x49, 0xe7, 0xe2, 0xed, 0xfc,
201     0x2a, 0xc8, 0xb5, 0x0e, 0xaa, 0x5e, 0xc8, 0xc9,
202     0x96, 0x84, 0x95, 0xfa, 0xd6, 0x12, 0x45, 0xfa,
203     0x7f, 0x36, 0x9a, 0xd5, 0x0e, 0x71, 0xab, 0x76,
204     0xda, 0xc5, 0x5d, 0x9c, 0x1e, 0x9b, 0xdf, 0xf9,
205     0xfb, 0xa3, 0x87, 0xa3, 0xdf, 0x3c, 0xf1, 0x4d,
206     0xe6, 0xb3, 0xbf, 0x3d, 0x3b, 0x93, 0x2f, 0x26,
207     0xfe, 0x28, 0x71, 0x4c, 0x82, 0xbb, 0x58, 0xed,
208     0x8b, 0x2a, 0xaa, 0x1b, 0x26, 0x9a, 0x3b, 0x5a,
209     0xcd, 0x71, 0xaf, 0x7c, 0x3e, 0x1b, 0xd7, 0x69,
210     0xcb, 0x4c, 0x5c, 0x45, 0x51, 0xec, 0x2f, 0x8f,
211     0x66, 0x87, 0xc9, 0x49, 0x88, 0x3b, 0x10, 0xad,
212     0xb4, 0x6e, 0x3c, 0x36, 0xf1, 0x8c, 0x04, 0x0d,
213     0x99, 0xfe, 0x3b, 0xf1, 0xae, 0xc4, 0x6d, 0x72,
214     0x02, 0xfe, 0x4a, 0xa6, 0xda, 0x39, 0xae, 0xd2,
215     0x4e, 0xbb, 0xde, 0xdd, 0x4d, 0x58, 0x2b, 0xae,
216     0x99, 0xb8, 0xc0, 0x68, 0x76, 0x9f, 0x3a, 0x36,
217     0xb1, 0x28, 0x11, 0xbf, 0x5c, 0x82, 0xd6, 0xcd,
218     0xd2, 0x96, 0x98, 0xb8, 0x0a, 0xf7, 0x4f, 0x42,
219     0xd9, 0xce, 0x0e, 0xc2, 0xc9, 0xea, 0xc7, 0x47,
220     0xb3, 0xc3, 0xe4, 0xe4, 0xfb, 0xbd, 0xc4, 0xe3,
221     0x33, 0x7b, 0x85, 0xc4, 0x4f, 0x24, 0xee, 0x90,
222     0xc7, 0xdc, 0x8b, 0x57, 0x3b, 0x0b, 0x17, 0x67,
223     0x25, 0x72, 0xa5, 0xdb, 0x4a, 0xf6, 0x6f, 0xf6,
224     0x53, 0x8a, 0xa7, 0xbb, 0x7e, 0x98, 0x38, 0x6d,
225     0x34, 0x3b, 0xe5, 0xbe, 0xed, 0x54, 0x5a, 0x99,
226     0x89, 0xeb, 0x81, 0xe7, 0x0b, 0x09, 0x4e, 0x2a,
227     0x5d, 0xd7, 0x4b, 0x0c, 0xaa, 0x37, 0xcd, 0xc9,
228     0xea, 0xc7, 0x32, 0x79, 0xd0, 0xe8, 0xd1, 0xc4,
229     0x7f, 0x26, 0x06, 0xd5, 0x99, 0x26, 0x41, 0xfd,
230     0x61, 0x82, 0x22, 0xc3, 0xf6, 0x19, 0xed, 0x02,
231     0x3f, 0x68, 0xa7, 0xdb, 0x09, 0x5d, 0xbe, 0xb8,
232     0x88, 0xeb, 0xfa, 0x87, 0xc4, 0x93, 0x47, 0xb3,
233     0x53, 0xee, 0x94, 0xfd, 0x9b, 0xa2, 0x6a, 0x69,
234     0x65, 0x26, 0xae, 0x07, 0x1e, 0x72, 0x87, 0x1f,
235     0x1a, 0xcd, 0x4e, 0x90, 0xb2, 0xd1, 0xe9, 0x7f,
236     0x88, 0x9b, 0x27, 0x28, 0xde, 0xeb, 0xa2, 0x1e,
237     0x75, 0x9f, 0x9e, 0x58, 0x49, 0xe4, 0x13, 0x17,
238     0x4b, 0x1c, 0x9e, 0xb8, 0x41, 0x82, 0x01, 0x29,
239     0x2e, 0x9c, 0xd8, 0x52, 0x6a, 0xcd, 0xfa, 0x89,
240     0xf3, 0xb4, 0xb1, 0x70, 0x5b, 0x59, 0x86, 0x38,
241     0x77, 0xe2, 0x12, 0x89, 0xc3, 0x12, 0x57, 0x4d,
242     0x5c, 0x92, 0xe7, 0xda, 0x45, 0x56, 0x96, 0x6d,
243     0x9c, 0x2b, 0x71, 0xf1, 0xc4, 0xb5, 0x12, 0xd7,
244     0x4f, 0x5c, 0x25, 0x71, 0xfe, 0xc4, 0x4a, 0xff,
245     0x23, 0xeb, 0x25, 0x2e, 0x90, 0xb8, 0x6c, 0xe2,
246     0xea, 0x09, 0xb6, 0x77, 0x50, 0x62, 0x37, 0x9f,
247     0x0f, 0x6a, 0xb9, 0x51, 0x5a, 0x32, 0xbf, 0x3b,
248     0xf1, 0xa5, 0xe6, 0xd1, 0x8f, 0x50, 0x64, 0x5d,
249     0xe6, 0x72, 0x0f, 0x48, 0xd9, 0x27, 0x86, 0x1e,
250     0x07, 0x2c, 0x4f, 0xeb, 0x6f, 0x8e, 0xc9, 0x83,
251     0x13, 0xe7, 0xe5, 0xb9, 0xf6, 0xe5, 0x03, 0xca,
252     0xae, 0xfa, 0xa7, 0xed, 0xe7, 0x3a, 0x2d, 0x3b,
253     0x75, 0xad, 0x9f, 0xeb, 0xa9, 0x89, 0x53, 0x12,
254     0x7c, 0xf6, 0xae, 0xb3, 0x13, 0x97, 0x4d, 0x0e,
255     0xf2, 0x3b, 0xa3, 0x87, 0xf3, 0x65, 0xdb, 0x9c,
256     0x98, 0xba, 0x03, 0x54, 0x90, 0xa8, 0x92, 0xd8,
257     0xfe, 0x7d, 0xa2, 0x2c, 0x2a, 0xae, 0xf5, 0x73,
258     0xbd, 0x6b, 0x26, 0x65, 0x3f, 0xd7, 0x2f, 0x66,
259     0xb9, 0xdf, 0x6c, 0xe7, 0x7b, 0x71, 0xc0, 0x66,
260     0xf2, 0x0b, 0x09, 0xd6, 0xff, 0xe9, 0xc4, 0xa5,
261     0x13, 0x5d, 0x34, 0x98, 0xfa, 0x44, 0xe2, 0x9d,
262     0x89, 0x57, 0x67, 0x9b, 0xa7, 0xf3, 0x24, 0xb2,
263     0x2e, 0x8d, 0xb7, 0x68, 0xc9, 0x5a, 0x7a, 0x52,
264     0x96, 0xfb, 0x4c, 0x5e, 0xbf, 0x64, 0xe6, 0x1f,
265     0x9d, 0xe0, 0xbb, 0xa3, 0x7b, 0x08, 0xe5, 0xe5,
266     0xac, 0x7f, 0xcb, 0xbc, 0x3e, 0x53, 0x8f, 0x98,
267     0xe5, 0xaf, 0x98, 0x09, 0x8d, 0x72, 0xee, 0x90,
268     0xb8, 0x76, 0xe2, 0x22, 0x89, 0xae, 0x6f, 0x24,
269     0xc8, 0x21, 0xfd, 0x69, 0xe2, 0x55, 0xd9, 0xc6,
270     0x97, 0x79, 0x72, 0x19, 0xd9, 0x36, 0xdb, 0x63,
271     0xd4, 0x23, 0xba, 0x2d, 0xf1, 0x3e, 0xdd, 0xe3,
272     0xf5, 0x7b, 0x89, 0x4f, 0x26, 0xde, 0x9b, 0x78,
273     0x7e, 0xb6, 0x3b, 0x77, 0x1f, 0xc9, 0xb6, 0x58,
274     0x97, 0x6e, 0x57, 0xd4, 0x91, 0xdf, 0x32, 0x41,
275     0x37, 0x2c, 0xba, 0x44, 0x8d, 0xf1, 0x7f, 0x52,
276     0xff, 0xfd, 0x37, 0x09, 0x1a, 0x1a, 0xbd, 0xad,
277     0xe7, 0xff, 0xa5, 0xb4, 0xa2, 0xdb, 0x7d, 0x8b,
278     0xdf, 0xa1, 0xfc, 0xbd, 0x3f, 0x96, 0xf8, 0xa7,
279     0xd1, 0x6c, 0xd5, 0xad, 0x13, 0xf4, 0x37, 0xed,
280     0xa2, 0xcf, 0xf5, 0x87, 0x47, 0xb3, 0x13, 0xdf,
281     0xca, 0x67, 0x58, 0x34, 0x30, 0xc5, 0x42, 0xf9,
282     0xcc, 0xbc, 0xd7, 0xbf, 0x27, 0x28, 0x6d, 0x19,
283     0x63, 0x7f, 0xbd, 0x72, 0xb6, 0xff, 0xf9, 0xbc,
284     0xfe, 0xe2, 0xcc, 0x97, 0xdd, 0xc9, 0x3e, 0x9a,
285     0xd7, 0x8e, 0x68, 0xe7, 0xe7, 0xca, 0xfa, 0x74,
286     0xdf, 0xf9, 0xad, 0xd1, 0xa3, 0x2d, 0xe1, 0x3d,
287     0x9f, 0xc7, 0x4c, 0xb6, 0xc9, 0x85, 0x6a, 0xf7,
288     0xf3, 0xe2, 0x65, 0x79, 0x7d, 0xee, 0x20, 0x17,
289     0x59, 0x8f, 0x3a, 0xf0, 0x13, 0x47, 0x8f, 0xa6,
290     0x3c, 0x22, 0xeb, 0x7e, 0xb5, 0x9d, 0x67, 0x39,
291     0x5a, 0x78, 0xbf, 0x68, 0xf4, 0x68, 0xca, 0x09,
292     0x59, 0xee, 0xcc, 0xbc, 0xce, 0x39, 0xf4, 0x37,
293     0x12, 0x77, 0x49, 0x50, 0x0f, 0xcd, 0xfe, 0x71,
294     0x46, 0x5e, 0xa3, 0x77, 0xc0, 0x8c, 0x2c, 0x7f,
295     0xdd, 0x4c, 0xb8, 0x40, 0xa7, 0xbe, 0x9a, 0x7d,
296     0x6b, 0xdc, 0x28, 0xec, 0xbb, 0x09, 0x7e, 0xdb,
297     0xbf, 0x4c, 0xbc, 0x32, 0xeb, 0x7f, 0x9c, 0x27,
298     0x0f, 0x04, 0x26, 0xae, 0xc3, 0xed, 0x86, 0xc4,
299     0xf5, 0xe7, 0x13, 0x0c, 0xd4, 0x50, 0x16, 0x93,
300     0x1d, 0x93, 0x9d, 0xff, 0xb5, 0xed, 0x7c, 0xaf,
301     0x6c, 0x97, 0x93, 0x15, 0x2d, 0x42, 0xcf, 0xdf,
302     0x3c, 0x31, 0x42, 0x0e, 0x80, 0x04, 0xe6, 0x7f,
303     0x12, 0xcb, 0x24, 0xae, 0x4f, 0xc8, 0xe4, 0xa9,
304     0xa3, 0x47, 0x13, 0x9f, 0xc8, 0x72, 0x57, 0x6f,
305     0xe7, 0x67, 0x64, 0x1d, 0x7e, 0x5f, 0x4e, 0xe6,
306     0xbf, 0x97, 0xb8, 0x32, 0xcf, 0x2d, 0x81, 0xc4,
307     0xed, 0x52, 0xd9, 0x6e, 0x73, 0xd1, 0x90, 0x6d,
308     0x90, 0x60, 0x72, 0xa2, 0x2d, 0xdd, 0x24, 0x41,
309     0xa2, 0x4c, 0x6b, 0xe5, 0x72, 0xff, 0xa1, 0xc1,
310     0xd5, 0x21, 0xd9, 0xc6, 0xa4, 0xc8, 0x3b, 0xdb,
311     0x61, 0x84, 0xa9, 0xa7, 0x25, 0xee, 0x9f, 0x58,
312     0xb6, 0x75, 0x29, 0xad, 0x65, 0x7f, 0x27, 0xf1,
313     0xcc, 0x6c, 0xab, 0xb7, 0xc1, 0x4f, 0xb6, 0xcd,
314     0xf6, 0x58, 0xee, 0x61, 0x89, 0xf2, 0x04, 0x5b,
315     0xc3, 0x89, 0xf3, 0xb9, 0xed, 0xfc, 0x8c, 0x6c,
316     0x8f, 0x13, 0xe2, 0xf3, 0x13, 0x0c, 0x45, 0xb8,
317     0x2c, 0x2e, 0x4e, 0x1e, 0x9a, 0xed, 0x72, 0x52,
318     0x9c, 0xc8, 0xb6, 0x5e, 0x91, 0xc9, 0xd0, 0x52,
319     0x8e, 0x55, 0x9d, 0x9d, 0xf7, 0xe7, 0x7b, 0xde,
320     0x92, 0x7c, 0x66, 0x2e, 0xd8, 0xf8, 0x3e, 0xbb,
321     0xde, 0x97, 0xb8, 0x55, 0xb6, 0xcf, 0xeb, 0x5c,
322     0x6c, 0xf0, 0xb8, 0x74, 0xed, 0xbc, 0x3e, 0xef,
323     0x22, 0xa1, 0x91, 0xf5, 0xb9, 0x58, 0x98, 0xfa,
324     0x9e, 0x56, 0xf4, 0xe6, 0xbc, 0x5f, 0x73, 0xc1,
325     0x99, 0x6d, 0xb2, 0x7f, 0x94, 0xa5, 0x1e, 0x0f,
326     0xcc, 0xeb, 0x2f, 0x6f, 0xe7, 0xab, 0xb2, 0x1e,
327     0x17, 0x04, 0x0c, 0x86, 0x51, 0xba, 0x62, 0xd6,
328     0x9d, 0xec, 0xf7, 0x59, 0x8e, 0x8b, 0xcc, 0x5a,
329     0xe3, 0x41, 0xf6, 0x11, 0xaa, 0x8d, 0xde, 0x9e,
330     0x28, 0x47, 0xb1, 0xfa, 0x4e, 0xb6, 0x31, 0x75,
331     0x6c, 0x67, 0x3b, 0x9c, 0x43, 0xd8, 0xf7, 0xee,
332     0x99, 0x58, 0x94, 0x9e, 0xb0, 0x5d, 0xce, 0x99,
333     0x0f, 0xcf, 0x76, 0x38, 0x2e, 0x77, 0x35, 0x8b,
334     0x85, 0x0f, 0x40, 0xd9, 0xb1, 0xbf, 0x9d, 0x49,
335     0x99, 0x73, 0xc5, 0xb2, 0x0d, 0x9b, 0x28, 0x62,
336     0xeb, 0x26, 0xac, 0x78, 0x59, 0x3b, 0xdd, 0x88,
337     0x7c, 0x2e, 0x12, 0x19, 0xba, 0x70, 0x90, 0xab,
338     0x5a, 0x36, 0x61, 0xc5, 0xb2, 0x17, 0x90, 0x24,
339     0xa8, 0x9c, 0x50, 0x16, 0x5e, 0x98, 0xe5, 0xb3,
340     0x90, 0x53, 0xf9, 0x48, 0x82, 0x5c, 0xd5, 0x90,
341     0x6e, 0x1b, 0xe4, 0x16, 0xb8, 0xa0, 0x78, 0x7b,
342     0xb6, 0x71, 0xe1, 0xe6, 0x99, 0x42, 0x9e, 0x27,
343     0x37, 0xf9, 0xc6, 0xc4, 0x23, 0x13, 0xcb, 0x24,
344     0xac, 0xbd, 0xf8, 0x2d, 0x13, 0xe4, 0x34, 0x19,
345     0x7a, 0x72, 0x48, 0xc2, 0x8a, 0xa6, 0x5f, 0x6a,
346     0xd6, 0x7f, 0x18, 0xdb, 0xd9, 0xa9, 0xf2, 0xd9,
347     0x39, 0xc7, 0xd5, 0x2e, 0x80, 0x5f, 0x9f, 0xe3,
348     0xa0, 0x9d, 0xdd, 0xf3, 0xd7, 0x09, 0xfa, 0xda,
349     0x96, 0xf6, 0x75, 0xc3, 0xa6, 0xb2, 0x78, 0x7a,
350     0x7f, 0xa0, 0xe4, 0xa6, 0x96, 0xb0, 0xce, 0xc8,
351     0x77, 0xcb, 0x3e, 0x42, 0x42, 0x7e, 0xaf, 0xc4,
352     0x32, 0xc7, 0x19, 0xbf, 0x05, 0xdf, 0xe9, 0xfb,
353     0xb2, 0xee, 0x56, 0xba, 0xff, 0xed, 0x08, 0x26,
354     0xae, 0x07, 0x2e, 0x86, 0x2b, 0x2c, 0x1b, 0x36,
355     0x8d, 0x8b, 0x0b, 0x7b, 0xe5, 0xa0, 0xe0, 0xe4,
356     0x5f, 0x0e, 0x3c, 0x41, 0x43, 0x26, 0x0e, 0xc8,
357     0x8d, 0x68, 0x4f, 0xee, 0x0c, 0xaf, 0x47, 0x82,
358     0xb3, 0xa9, 0x7d, 0x96, 0x62, 0xbd, 0xb2, 0x78,
359     0x79, 0x46, 0x3e, 0xcb, 0x95, 0x32, 0xf9, 0x8b,
360     0xc4, 0xa1, 0xcd, 0x13, 0xab, 0x61, 0x14, 0xaa,
361     0xd7, 0x65, 0x5b, 0xb5, 0xc4, 0xf3, 0x11, 0x89,
362     0xbb, 0x8d, 0x66, 0x67, 0xf0, 0x45, 0x94, 0xbf,
363     0xd9, 0x3c, 0xe4, 0xaa, 0x29, 0xf2, 0x3c, 0x5f,
364     0xf3, 0x68, 0x38, 0x72, 0x4e, 0xcf, 0x49, 0xec,
365     0xe4, 0xd6, 0xb3, 0xe4, 0xda, 0xcb, 0xb6, 0x01,
366     0x14, 0xa9, 0xbf, 0x65, 0x34, 0xdb, 0x5c, 0x6c,
367     0x52, 0x62, 0xc1, 0x45, 0x5b, 0xe9, 0x9e, 0xf9,
368     0x8d, 0x86, 0x5c, 0x3c, 0x6d, 0x05, 0x25, 0x49,
369     0x7d, 0x23, 0x5d, 0xed, 0x4b, 0xb4, 0xe0, 0x5f,
370     0x26, 0x61, 0xa5, 0xa8, 0x98, 0x52, 0xb0, 0x5a,
371     0x57, 0x2c, 0xf0, 0x1d, 0x13, 0x35, 0x34, 0xa0,
372     0x3c, 0x25, 0xdb, 0xd8, 0xd5, 0xe9, 0x8f, 0x89,
373     0xeb, 0x01, 0x2a, 0x27, 0x94, 0x33, 0x32, 0x29,
374     0xeb, 0x6f, 0x38, 0xd9, 0xd3, 0xbd, 0x66, 0x9e,
375     0x23, 0x13, 0xe5, 0x01, 0xf5, 0xda, 0x6c, 0x6f,
376     0xa9, 0xba, 0xda, 0x15, 0xdd, 0x3d, 0xf1, 0xa8,
377     0xd1, 0xec, 0x0c, 0xea, 0x74, 0xc8, 0xe9, 0x3d,
378     0x24, 0x41, 0x71, 0xf7, 0xd1, 0x89, 0x13, 0x12,
379     0xd4, 0xfd, 0x0e, 0x41, 0xb1, 0xf0, 0x18, 0x27,
380     0x5b, 0x8a, 0xe2, 0x19, 0x83, 0x76, 0xd2, 0x40,
381     0x2b, 0x27, 0x03, 0x12, 0x9b, 0xd7, 0x27, 0x6a,
382     0x89, 0x30, 0x89, 0x1e, 0x27, 0x1b, 0xc6, 0xd9,
383     0xa5, 0x0e, 0x96, 0xa2, 0x53, 0x72, 0xda, 0xb5,
384     0x1c, 0x11, 0xee, 0x94, 0xf8, 0xb5, 0xd1, 0xec,
385     0x48, 0xb6, 0x4f, 0x69, 0x00, 0xf5, 0xbd, 0x25,
386     0xba, 0xb6, 0x90, 0x50, 0x92, 0x53, 0x20, 0x71,
387     0xbf, 0x69, 0x82, 0x7e, 0xc2, 0xbd, 0xf5, 0x57,
388     0xd9, 0x16, 0xf5, 0xb5, 0x2f, 0x48, 0xd4, 0x8e,
389     0x71, 0x8a, 0xe4, 0x28, 0x5e, 0x24, 0xe7, 0xcd,
390     0x08, 0x4b, 0x0f, 0x4d, 0xf0, 0x7f, 0xf1, 0x5d,
391     0x96, 0x58, 0xff, 0x05, 0xd9, 0xde, 0xf8, 0x37,
392     0xa7, 0x41, 0x1c, 0xf5, 0xbc, 0xe3, 0xa8, 0xb5,
393     0x0e, 0x67, 0xa8, 0xc3, 0xee, 0x32, 0x65, 0x7c,
394     0x2d, 0x51, 0xe2, 0x7f, 0x2c, 0x97, 0xfb, 0x60,
395     0x62, 0xab, 0x6a, 0x17, 0x06, 0xa7, 0x66, 0x7f,
396     0x2d, 0x8b, 0x44, 0x69, 0x43, 0x50, 0xa2, 0xfa,
397     0x83, 0xfd, 0x7d, 0x11, 0xaa, 0xa2, 0x28, 0x2e,
398     0x5f, 0x26, 0x6a, 0xfb, 0x03, 0xfb, 0xdb, 0xb1,
399     0x95, 0xcf, 0xb4, 0x3f, 0xb0, 0x6f, 0x8d, 0x75,
400     0x8f, 0x03, 0xe6, 0x1b, 0xd9, 0x17, 0x38, 0x4f,
401     0x30, 0xb2, 0x16, 0xdd, 0xe8, 0xba, 0xb8, 0xf8,
402     0x63, 0x3f, 0xa2, 0x94, 0x84, 0xe2, 0x7c, 0x8a,
403     0x8c, 0x6f, 0x96, 0xa8, 0x8d, 0x6f, 0x4e, 0x15,
404     0x12, 0x45, 0xc9, 0xbb, 0xd6, 0xb2, 0x45, 0x66,
405     0x3b, 0x42, 0x5b, 0xe7, 0xfa, 0x2f, 0x09, 0x8a,
406     0x36, 0x36, 0xe5, 0xac, 0x83, 0xde, 0x7a, 0x66,
407     0x33, 0xca, 0xcb, 0x09, 0xa7, 0xee, 0x39, 0x29,
408     0x93, 0x79, 0x77, 0x9d, 0x59, 0x87, 0x23, 0x4e,
409     0x3c, 0xb2, 0xa9, 0xdf, 0x1c, 0x2c, 0x07, 0x41,
410     0xb5, 0xce, 0x35, 0x07, 0x71, 0x33, 0x7e, 0x6f,
411     0x5e, 0xa7, 0x45, 0x24, 0x09, 0x53, 0x17, 0xf5,
412     0x32, 0x87, 0x65, 0x99, 0xea, 0x55, 0x67, 0xd6,
413     0x21, 0x87, 0x4a, 0xc2, 0x30, 0x46, 0xa2, 0xc2,
414     0x60, 0xfb, 0x67, 0xe4, 0x35, 0x4e, 0xc4, 0x6b,
415     0xad, 0x73, 0xcd, 0x72, 0x14, 0x9f, 0x72, 0x21,
416     0x50, 0x36, 0x80, 0x01, 0xf5, 0xbc, 0xe4, 0xa2,
417     0x3f, 0x9f, 0xf5, 0x9a, 0x27, 0xc6, 0xb2, 0x1e,
418     0x93, 0xdb, 0x24, 0x78, 0x5f, 0x06, 0xa7, 0x58,
419     0x54, 0xe7, 0x0a, 0x56, 0x22, 0xa7, 0x47, 0xe2,
420     0x3c, 0x6e, 0x78, 0xc4, 0x49, 0x82, 0xdf, 0x98,
421     0x62, 0x6f, 0x2e, 0x3c, 0x6a, 0x37, 0x28, 0x20,
422     0xe7, 0x4e, 0xa2, 0xfe, 0xc1, 0xca, 0xe7, 0x20,
423     0xc1, 0xa4, 0xbe, 0x8f, 0xbb, 0x06, 0x95, 0x68,
424     0x44, 0x76, 0x68, 0xd6, 0x61, 0xca, 0xb2, 0x9c,
425     0x94, 0xca, 0x46, 0x3d, 0xb8, 0x59, 0x96, 0xa1,
426     0xa1, 0xd1, 0x94, 0xf6, 0x7f, 0xa4, 0xb1, 0xd3,
427     0xb9, 0xf3, 0xfa, 0xa4, 0xe4, 0x20, 0xcf, 0xf3,
428     0x21, 0xf8, 0x6e, 0xf8, 0xff, 0x4b, 0xd4, 0x29,
429     0xdf, 0x37, 0xcb, 0x4f, 0x9d, 0xc8, 0xdb, 0x6d,
430     0x91, 0x80, 0x92, 0x83, 0xab, 0x75, 0xcb, 0xe2,
431     0xa4, 0x79, 0xaf, 0xca, 0xff, 0x47, 0xd7, 0xae,
432     0xa6, 0x0d, 0x42, 0xc7, 0x13, 0xb2, 0xdc, 0xd3,
433     0xdb, 0xf9, 0x19, 0x59, 0x87, 0x61, 0x10, 0xcb,
434     0x31, 0xa4, 0x69, 0xac, 0x53, 0x76, 0xed, 0xda,
435     0x92, 0xbc, 0x0f, 0x7d, 0x70, 0xc9, 0x11, 0x96,
436     0x45, 0x90, 0xfc, 0x1f, 0xfc, 0x3f, 0x13, 0xed,
437     0x77, 0xc6, 0x7e, 0x76, 0xd5, 0xe6, 0x89, 0x1f,
438     0x79, 0x4b, 0x96, 0xe5, 0xe2, 0x6e, 0xcb, 0xf2,
439     0x1e, 0x24, 0x34, 0x5c, 0x34, 0x74, 0x1b, 0x92,
440     0xe1, 0x49, 0x89, 0x13, 0xbb, 0xdf, 0x6d, 0x96,
441     0xdd, 0x5f, 0x75, 0xae, 0x60, 0x67, 0x38, 0x39,
442     0x41, 0x4e, 0xba, 0x7b, 0x1c, 0xf0, 0xbd, 0x71,
443     0xa1, 0xc5, 0x10, 0x91, 0xaf, 0x6a, 0x9e, 0xfd,
444     0x11, 0xce, 0x03, 0x34, 0xbe, 0x7b, 0x49, 0xf7,
445     0xff, 0x40, 0x96, 0xe7, 0x09, 0x8e, 0x1f, 0x2e,
446     0x10, 0xbb, 0xfe, 0x31, 0x71, 0xbd, 0x2c, 0x3f,
447     0xa4, 0x34, 0x66, 0xc7, 0xd8, 0x6d, 0x39, 0x57,
448     0x76, 0x8a, 0x9f, 0x4a, 0x50, 0xac, 0xb1, 0xa9,
449     0xa0, 0x55, 0xdc, 0xd8, 0xaf, 0x27, 0x6a, 0xcb,
450     0xac, 0x33, 0x7a, 0x07, 0x3c, 0x5f, 0x03, 0x12,
451     0x5e, 0xae, 0xba, 0xbb, 0xb8, 0x1a, 0xad, 0x8e,
452     0x50, 0x93, 0x83, 0x84, 0x5c, 0x13, 0x57, 0x9c,
453     0x5d, 0xd4, 0xe7, 0xd1, 0xf8, 0x65, 0x53, 0xb8,
454     0xe3, 0x4e, 0x2d, 0x61, 0x25, 0x91, 0x38, 0x2a,
455     0x07, 0xe6, 0x4c, 0xc2, 0x0a, 0x9e, 0x4b, 0xd0,
456     0xc8, 0x84, 0x7b, 0x8a, 0xd6, 0x72, 0x64, 0x35,
457     0xe4, 0x34, 0x1f, 0x92, 0xf5, 0xbe, 0xdc, 0xae,
458     0x4f, 0x7c, 0x2d, 0x41, 0xab, 0x4a, 0x4e, 0x00,
459     0xb4, 0x9e, 0x2c, 0x91, 0x68, 0xdf, 0x31, 0xcb,
460     0xcc, 0x24, 0xac, 0xc8, 0x73, 0xbc, 0x37, 0xc5,
461     0xd9, 0xb5, 0x3a, 0xee, 0x83, 0x13, 0xdd, 0xab,
462     0x77, 0x8a, 0xda, 0x4a, 0xe4, 0x9c, 0xab, 0xdf,
463     0x2f, 0xef, 0x97, 0x78, 0x67, 0xa2, 0x2c, 0x92,
464     0x67, 0x98, 0xbf, 0xda, 0xb0, 0x84, 0x24, 0xdc,
465     0x77, 0xcf, 0xf2, 0x33, 0x27, 0xd5, 0x76, 0x5b,
466     0xec, 0x6b, 0x3f, 0x97, 0xa0, 0xd5, 0x70, 0x89,
467     0x04, 0x66, 0x61, 0xb1, 0xf9, 0x36, 0xc3, 0x45,
468     0x60, 0x99, 0xb0, 0x92, 0x6b, 0x9f, 0x19, 0x62,
469     0x33, 0xff, 0x3b, 0xe7, 0x8e, 0xa9, 0x04, 0xb7,
470     0x75, 0xc7, 0xec, 0xf7, 0x5b, 0xbe, 0x58, 0x6f,
471     0x13, 0x33, 0x72, 0x7b, 0x65, 0xc2, 0x4a, 0xe9,
472     0xd1, 0xd3, 0xf8, 0xfe, 0xb7, 0x91, 0xdf, 0x4f,
473     0xd4, 0x8e, 0x03, 0x12, 0x56, 0x3e, 0x68, 0xad,
474     0x65, 0x34, 0x89, 0xf1, 0x4c, 0xc2, 0x8a, 0x3c,
475     0xc7, 0x77, 0x4b, 0x89, 0x4e, 0xd9, 0x88, 0x89,
476     0xd2, 0x95, 0xb2, 0xc8, 0x5e, 0xda, 0xfe, 0x72,
477     0x20, 0xdc, 0x39, 0x51, 0x62, 0x98, 0xc1, 0x89,
478     0x3c, 0x7e, 0xc6, 0xe8, 0xe9, 0x29, 0x6f, 0x6e,
479     0x5f, 0x9e, 0x92, 0xe7, 0x9f, 0x3a, 0x7a, 0x79,
480     0x0a, 0xc5, 0x8a, 0x8d, 0xcc, 0xd3, 0x1f, 0xf3,
481     0x5b, 0xcd, 0xb3, 0xd3, 0x66, 0x06, 0x65, 0xcf,
482     0x73, 0x4f, 0x18, 0xbd, 0x34, 0x85, 0x9c, 0xc3,
483     0x44, 0x1e, 0xd3, 0x67, 0xee, 0x63, 0xcd, 0x2b,
484     0xd3, 0xbe, 0x92, 0x28, 0x5b, 0x3a, 0x2f, 0x25,
485     0xeb, 0x5d, 0xbe, 0xd9, 0xc2, 0xac, 0x2f, 0x24,
486     0x7a, 0x87, 0xe4, 0xcb, 0x6b, 0x37, 0x6c, 0x96,
487     0x9a, 0xf5, 0xac, 0x76, 0x91, 0xb9, 0xb2, 0xdc,
488     0xa5, 0x12, 0xdf, 0x6e, 0xd6, 0x98, 0x46, 0x0e,
489     0xb3, 0x91, 0xf9, 0xa3, 0x46, 0x4f, 0xcd, 0x18,
490     0x34, 0x98, 0x7c, 0x96, 0x7f, 0xf6, 0x68, 0xb5,
491     0x29, 0x3f, 0x48, 0x2c, 0xdb, 0xb5, 0xe4, 0xb8,
492     0x66, 0x8d, 0x59, 0x33, 0x37, 0x79, 0xc8, 0x73,
493     0x7c, 0x6f, 0x25, 0xea, 0xed, 0x7a, 0xe5, 0x75,
494     0x1a, 0x4a, 0x95, 0xe6, 0xdd, 0xb2, 0x70, 0x25,
495     0xd9, 0x66, 0xed, 0x7d, 0x5e, 0xd7, 0xbe, 0x3c,
496     0x23, 0xaf, 0x5d, 0x23, 0xc1, 0xf7, 0x54, 0xe2,
497     0x22, 0x7a, 0x65, 0x59, 0x9f, 0xe3, 0xe2, 0x4d,
498     0xcd, 0x96, 0xa6, 0xb1, 0x1f, 0xd3, 0xc5, 0x6a,
499     0x46, 0x9e, 0xff, 0x7e, 0xb3, 0xc4, 0xb4, 0x85,
500     0x37, 0xd9, 0xc8, 0x32, 0x47, 0x8c, 0x16, 0x9d,
501     0x31, 0x55, 0x84, 0x9b, 0xc7, 0xf4, 0x9b, 0xae,
502     0x59, 0x74, 0x1c, 0xd4, 0xb6, 0xff, 0xdd, 0x44,
503     0xed, 0x02, 0x78, 0x4a, 0x96, 0x79, 0x5b, 0xb3,
504     0xf4, 0xb4, 0xa9, 0xaa, 0x91, 0xdd, 0x64, 0x5b,
505     0x5d, 0x2e, 0x6d, 0xd9, 0x29, 0x67, 0xf3, 0xff,
506     0xd0, 0xf0, 0xe5, 0xa0, 0xe6, 0xf1, 0x66, 0x7c,
507     0x7d, 0xcf, 0x31, 0x07, 0x37, 0x7d, 0x31, 0x93,
508     0x4c, 0x51, 0xaf, 0xd6, 0xad, 0xab, 0xdb, 0x84,
509     0x27, 0xee, 0xbd, 0xfd, 0x9e, 0xff, 0x6a, 0xe7,
510     0x07, 0xc9, 0x8e, 0x3b, 0xb7, 0x58, 0x18, 0x59,
511     0x86, 0x06, 0x4c, 0xd4, 0xa3, 0x75, 0x8b, 0xa0,
512     0xc8, 0x6d, 0xd1, 0x07, 0x90, 0xe2, 0xce, 0x46,
513     0x96, 0xa3, 0x61, 0xc7, 0xbf, 0x25, 0xba, 0xb9,
514     0x17, 0xea, 0xce, 0xe8, 0x1b, 0xdb, 0xe4, 0x0c,
515     0xb3, 0xcc, 0x5a, 0x8b, 0x85, 0xb3, 0x0c, 0x39,
516     0x65, 0x8a, 0xc4, 0xcb, 0x12, 0x96, 0xa7, 0x67,
517     0x39, 0xd6, 0x1f, 0x2c, 0xdb, 0xec, 0x2b, 0x16,
518     0x7e, 0x6e, 0xb6, 0x49, 0x63, 0xa2, 0xaa, 0xac,
519     0x47, 0x1d, 0xe7, 0xef, 0x8e, 0x1e, 0x4d, 0x70,
520     0x45, 0x7e, 0xad, 0xac, 0x47, 0x55, 0xc4, 0x42,
521     0xd9, 0x06, 0xbf, 0x05, 0xbf, 0x49, 0x17, 0x45,
522     0xc2, 0x74, 0x15, 0xfa, 0x5e, 0x5e, 0xe7, 0xe6,
523     0xf6, 0x5c, 0x60, 0x94, 0xff, 0x2f, 0xb9, 0x63,
524     0xbe, 0xbf, 0xe7, 0x65, 0x39, 0xee, 0x79, 0x3b,
525     0x57, 0xb6, 0xf3, 0x77, 0x99, 0x5c, 0x7f, 0xf4,
526     0x68, 0x82, 0xbe, 0xa7, 0xd7, 0xcf, 0xfa, 0x7c,
527     0xe6, 0xb9, 0xb2, 0x3e, 0x63, 0x46, 0xd3, 0x72,
528     0xb5, 0xcc, 0x65, 0xbd, 0x3c, 0xeb, 0x53, 0x92,
529     0x30, 0x91, 0x65, 0xb7, 0x65, 0xb1, 0x70, 0xde,
530     0x83, 0xc4, 0x84, 0xfe, 0x95, 0xe5, 0xff, 0x70,
531     0xe7, 0xbc, 0x0f, 0x7d, 0x8e, 0x67, 0x64, 0x1d,
532     0xce, 0x1f, 0x7c, 0x77, 0x34, 0xb8, 0xe9, 0xe2,
533     0xb9, 0x1b, 0x2d, 0xf3, 0xdd, 0xd5, 0x64, 0xbb,
534     0xb4, 0x07, 0xe0, 0x66, 0xf2, 0x5d, 0x94, 0x84,
535     0x70, 0x7f, 0xdb, 0x49, 0xc3, 0xaa, 0xae, 0xac,
536     0xb3, 0xbf, 0x8a, 0x85, 0xe9, 0x33, 0x4d, 0x17,
537     0xb0, 0xaa, 0xac, 0x57, 0x3b, 0x6e, 0xb9, 0x40,
538     0x3c, 0x32, 0xeb, 0x8d, 0x1e, 0xf5, 0xc8, 0xba,
539     0x5c, 0x88, 0x96, 0xa5, 0x3f, 0x27, 0x65, 0x3d,
540     0xea, 0xfc, 0x77, 0x9d, 0xdd, 0x98, 0xb8, 0x6e,
541     0xbc, 0x9f, 0x6b, 0x12, 0xd7, 0xe6, 0x64, 0x92,
542     0xc4, 0x75, 0x9f, 0xf4, 0x73, 0x4d, 0x52, 0xb8,
543     0xd6, 0x7e, 0xae, 0xd9, 0x99, 0xa7, 0x4e, 0x6c,
544     0x59, 0xee, 0x1d, 0x99, 0x94, 0xf7, 0x57, 0x7d,
545     0x4c, 0x96, 0x9b, 0xe4, 0xca, 0xb2, 0x4c, 0xad,
546     0x7e, 0x96, 0x93, 0xfd, 0xa4, 0x2e, 0x31, 0xcb,
547     0xac, 0x3b, 0x71, 0xa5, 0x4f, 0x6b, 0x2d, 0x17,
548     0x7d, 0xe3, 0x2c, 0x47, 0x57, 0x98, 0xc1, 0xb2,
549     0xcd, 0xbe, 0xc4, 0x75, 0x6e, 0x1f, 0xdf, 0xac,
550     0x47, 0x91, 0x1e, 0x0d, 0x95, 0xba, 0xb8, 0xe8,
551     0xb9, 0x4c, 0xd6, 0x5b, 0xaa, 0xce, 0x28, 0xdb,
552     0x20, 0x47, 0x47, 0xdf, 0xd8, 0x2e, 0x4e, 0xd8,
553     0x57, 0xc8, 0x36, 0xc8, 0x31, 0xb0, 0xff, 0x72,
554     0x62, 0xac, 0x76, 0xd4, 0x0f, 0x4e, 0x86, 0xe4,
555     0xf0, 0x48, 0x88, 0xaa, 0xd5, 0x05, 0xd9, 0x06,
556     0x17, 0x41, 0x5f, 0x4f, 0x94, 0xb9, 0x8f, 0xa9,
557     0xdf, 0x6a, 0x91, 0x6c, 0x87, 0xfa, 0x30, 0x8a,
558     0xed, 0xba, 0x3e, 0x90, 0x6d, 0x4c, 0xdd, 0xff,
559     0x37, 0xcb, 0x6d, 0xd7, 0xc4, 0xf5, 0x71, 0x99,
560     0x70, 0x63, 0x88, 0x2e, 0xea, 0x0f, 0xf9, 0xae,
561     0x7b, 0xab, 0x09, 0xb2, 0x1e, 0x0d, 0xca, 0xe8,
562     0x47, 0xdd, 0xc5, 0xef, 0x7b, 0x83, 0xac, 0xc7,
563     0x05, 0xca, 0x20, 0xd9, 0x1e, 0xd5, 0x48, 0xd4,
564     0x97, 0x97, 0xbf, 0x07, 0x55, 0x0d, 0x14, 0xbd,
565     0x8e, 0x1e, 0x15, 0xb2, 0xde, 0xfe, 0x4a, 0x5c,
566     0x17, 0x1d, 0x07, 0xdc, 0xec, 0xbe, 0xac, 0x83,
567     0xa6, 0xc1, 0xd3, 0x3f, 0x8f, 0x66, 0xe7, 0xe2,
568     0xd8, 0x2e, 0x7b, 0x23, 0xac, 0xad, 0x4e, 0x7b,
569     0xbb, 0xd9, 0x6d, 0x75, 0xae, 0x5a, 0xcd, 0x4b,
570     0xda, 0x69, 0xd7, 0xfd, 0x72, 0x20, 0x35, 0x47,
571     0x7e, 0x3b, 0x2d, 0x47, 0xca, 0xe1, 0x84, 0xb3,
572     0xd1, 0xbe, 0xad, 0x51, 0x6b, 0xe6, 0x4f, 0x43,
573     0xab, 0x95, 0x2e, 0x36, 0x16, 0x20, 0x91, 0x98,
574     0xa7, 0x56, 0x1f, 0xfa, 0xd9, 0x9c, 0x18, 0x96,
575     0x4a, 0x58, 0x5b, 0xb5, 0x44, 0x9d, 0xef, 0xb6,
576     0xa9, 0x17, 0xcc, 0xb6, 0x48, 0x68, 0xb9, 0xb2,
577     0xef, 0x1b, 0x9f, 0x99, 0xa2, 0x70, 0xea, 0xbb,
578     0x68, 0x3c, 0xf6, 0x9a, 0x44, 0xad, 0xbf, 0x2f,
579     0xdb, 0xaa, 0x75, 0xbd, 0x19, 0x5a, 0x77, 0x4f,
580     0x43, 0xa0, 0xd2, 0x8e, 0x18, 0x6f, 0xb7, 0xdd,
581     0x5f, 0x6b, 0xad, 0xde, 0xb9, 0xe8, 0x38, 0x21,
582     0xaf, 0x53, 0x15, 0x52, 0x8d, 0xbc, 0x5e, 0xab,
583     0x03, 0xe4, 0x3c, 0x39, 0xf8, 0x3e, 0xaf, 0xd9,
584     0x1e, 0xfd, 0x9a, 0x29, 0x86, 0x2e, 0x13, 0x56,
585     0x5a, 0x79, 0x3f, 0x3a, 0xbf, 0xf7, 0xe8, 0xd1,
586     0xf6, 0x52, 0xab, 0x6f, 0xef, 0xe2, 0xe2, 0xb4,
587     0xc4, 0x7e, 0x48, 0xfd, 0xf6, 0xa2, 0xa8, 0x75,
588     0xf3, 0x2b, 0x2f, 0xc4, 0x77, 0x0d, 0x13, 0x57,
589     0x81, 0x06, 0x1e, 0x65, 0x17, 0x01, 0x06, 0x4a,
590     0x18, 0x37, 0xcb, 0x3f, 0x3c, 0x31, 0x95, 0x63,
591     0x09, 0xae, 0x8e, 0x27, 0xc3, 0x0a, 0x6e, 0x08,
592     0x0d, 0x7e, 0x4a, 0x24, 0xae, 0xe4, 0x8e, 0xd7,
593     0x6d, 0x51, 0xa3, 0xa7, 0xda, 0xa0, 0x0f, 0x43,
594     0x3f, 0x47, 0x73, 0x3f, 0xd3, 0x8a, 0x49, 0x62,
595     0x98, 0x13, 0x2e, 0x0d, 0xc4, 0x68, 0x9d, 0xcc,
596     0xa8, 0x50, 0x7d, 0x28, 0xea, 0x24, 0x17, 0xfd,
597     0xf1, 0x9c, 0xc0, 0xef, 0x93, 0x68, 0x9e, 0x6c,
598     0xd1, 0x42, 0xb6, 0x76, 0x5c, 0x0f, 0x1d, 0x11,
599     0xa7, 0x56, 0xfc, 0x5c, 0x16, 0xb1, 0x6e, 0x57,
600     0xec, 0xb7, 0xb5, 0x91, 0xbe, 0x28, 0x76, 0x27,
601     0x47, 0x3b, 0x2f, 0xfa, 0xfa, 0xf4, 0x0e, 0xea,
602     0xf3, 0x9a, 0x65, 0x49, 0x39, 0x19, 0xca, 0x90,
603     0x63, 0xa7, 0x8b, 0x01, 0x5c, 0xc8, 0x1d, 0x32,
604     0xdd, 0x8e, 0x16, 0x7d, 0xae, 0xea, 0xe0, 0x27,
605     0x9a, 0x65, 0xe2, 0x2a, 0x4e, 0xe8, 0x14, 0x41,
606     0xd1, 0x07, 0xaf, 0x34, 0x6e, 0x3a, 0x7f, 0x5c,
607     0xa2, 0x1c, 0xf0, 0xe0, 0xa5, 0xfb, 0xe0, 0xca,
608     0xbb, 0x76, 0x32, 0x67, 0x9f, 0xdd, 0x1f, 0x27,
609     0xf9, 0x5a, 0x0e, 0xb5, 0x2c, 0xb6, 0x5b, 0xa4,
610     0xef, 0xe4, 0x3c, 0xd5, 0x47, 0x38, 0xdf, 0xeb,
611     0x9f, 0x64, 0x42, 0xbd, 0x1f, 0x45, 0xe2, 0xf3,
612     0x72, 0xc6, 0x9c, 0xe8, 0x18, 0x83, 0x76, 0xd2,
613     0xa8, 0x2c, 0xfa, 0xea, 0x05, 0x87, 0x0e, 0x24,
614     0x51, 0x8e, 0xc0, 0x85, 0x41, 0x77, 0x3c, 0xda,
615     0x8f, 0x16, 0xf5, 0xd5, 0x5e, 0x05, 0x2d, 0xf7,
616     0xcb, 0xaa, 0x93, 0x79, 0xf8, 0x4d, 0x6a, 0x09,
617     0xf5, 0xa3, 0xf2, 0xfb, 0x2e, 0x1c, 0x52, 0x71,
618     0x1b, 0x1b, 0x52, 0x52, 0x73, 0x40, 0x33, 0x71,
619     0xd5, 0x18, 0x75, 0x39, 0x93, 0x8e, 0xe2, 0xad,
620     0xa3, 0x73, 0x05, 0x4e, 0x2b, 0xc0, 0xb2, 0xae,
621     0x91, 0x46, 0x38, 0xd5, 0x16, 0xc5, 0x6b, 0x56,
622     0xcb, 0x6d, 0x71, 0xd2, 0xdf, 0x1f, 0xc5, 0x93,
623     0x14, 0x29, 0x96, 0x86, 0x76, 0x4d, 0xe9, 0x1b,
624     0x7c, 0xa2, 0xd6, 0x35, 0x86, 0x22, 0x67, 0xc6,
625     0x99, 0xa5, 0xce, 0x8e, 0x6e, 0x0e, 0x7d, 0xb9,
626     0x5e, 0x8e, 0xe1, 0xe7, 0xe5, 0x77, 0x1a, 0x8f,
627     0xc1, 0x4b, 0x6e, 0xba, 0x76, 0x67, 0xa2, 0xa1,
628     0xed, 0x10, 0x48, 0x4c, 0x4a, 0x2b, 0x35, 0xac,
629     0xdb, 0x97, 0xf2, 0x3d, 0x90, 0x73, 0xa7, 0xcf,
630     0xf1, 0x26, 0x1c, 0x9b, 0xed, 0xb7, 0xb3, 0xfd,
631     0xb2, 0x0c, 0x7d, 0x65, 0x19, 0xc0, 0xa3, 0xbc,
632     0xfa, 0xa4, 0xbe, 0xb2, 0x56, 0x05, 0xb3, 0x4e,
633     0x9b, 0x3e, 0xa7, 0xd7, 0x8e, 0x49, 0x72, 0xe8,
634     0xb4, 0x13, 0x58, 0x25, 0x7a, 0x1b, 0x4f, 0xed,
635     0x74, 0x26, 0xae, 0x6a, 0xe4, 0x44, 0x4e, 0xb1,
636     0x70, 0xd9, 0xff, 0x8f, 0x56, 0xd7, 0xd4, 0x19,
637     0x35, 0x75, 0x82, 0x1d, 0x6f, 0xc8, 0xf2, 0x43,
638     0x8b, 0x19, 0x57, 0x41, 0x43, 0x89, 0x12, 0xfb,
639     0x2c, 0x77, 0xc2, 0xd9, 0xd7, 0x6a, 0x75, 0x96,
640     0x57, 0xce, 0x89, 0xb4, 0x56, 0x74, 0xdd, 0xe7,
641     0x3a, 0xed, 0xb4, 0x8b, 0x3b, 0x95, 0xf4, 0xde,
642     0x29, 0x27, 0xdf, 0xf3, 0xe9, 0x09, 0xea, 0xbb,
643     0xa9, 0x7f, 0xa6, 0xff, 0x21, 0xa5, 0x0c, 0x25,
644     0x12, 0x56, 0x46, 0xa7, 0x02, 0x09, 0x75, 0xad,
645     0xb8, 0xba, 0x6c, 0x3d, 0xdc, 0x2b, 0xff, 0x13,
646     0x25, 0x03, 0x54, 0x0b, 0x94, 0xa6, 0xba, 0x4a,
647     0x6d, 0x53, 0xdc, 0x6d, 0x69, 0xc8, 0x6f, 0x32,
648     0x04, 0x7d, 0x80, 0xe7, 0xf6, 0x79, 0xcd, 0x77,
649     0xc7, 0xc5, 0x1f, 0xc7, 0x4c, 0x79, 0x77, 0x24,
650     0xf6, 0xe5, 0xe3, 0xf3, 0x5b, 0x2e, 0x4e, 0x9d,
651     0xfb, 0x2d, 0x53, 0x24, 0xbb, 0xc9, 0x01, 0x74,
652     0x50, 0xab, 0x8b, 0xbf, 0x50, 0xfe, 0xaf, 0xd3,
653     0x56, 0x8c, 0x4d, 0xb4, 0x9f, 0xd8, 0x16, 0x4c,
654     0x5c, 0xd5, 0x45, 0x0e, 0xa9, 0xc4, 0x78, 0xc3,
655     0x5d, 0x9c, 0x1c, 0xe6, 0xb6, 0x58, 0x5c, 0x23,
656     0x5a, 0x04, 0xd7, 0x8a, 0xa1, 0x1e, 0xb0, 0x4c,
657     0x0e, 0x62, 0xcd, 0x3e, 0xda, 0x4e, 0xbb, 0x28,
658     0x6a, 0x2d, 0xbb, 0xd6, 0x54, 0xe5, 0xf3, 0xb2,
659     0x6c, 0x39, 0x00, 0x07, 0x3e, 0x94, 0x13, 0x4c,
660     0x59, 0x62, 0x30, 0x23, 0xcb, 0xd0, 0xa1, 0x9f,
661     0xc6, 0x4e, 0x0c, 0x3a, 0x51, 0xfb, 0x4e, 0x9a,
662     0xee, 0x23, 0x59, 0x86, 0xd7, 0xe8, 0x3a, 0x52,
663     0xba, 0x55, 0x3e, 0x43, 0x79, 0x91, 0xd4, 0x87,
664     0xbb, 0xbc, 0xd4, 0x4e, 0xe4, 0xd4, 0x07, 0x6f,
665     0xca, 0x96, 0x6e, 0x52, 0x80, 0x76, 0x9f, 0xa8,
666     0x15, 0xc5, 0x92, 0xeb, 0xa7, 0x45, 0x33, 0xff,
667     0xff, 0xb2, 0x41, 0xfd, 0x6b, 0x89, 0xdf, 0xb0,
668     0x77, 0xc8, 0xbe, 0xf6, 0xfd, 0x19, 0x8d, 0xab,
669     0x1c, 0xe1, 0x8a, 0x76, 0x02, 0x0c, 0x6f, 0x58,
670     0x1b, 0xf6, 0xb1, 0x4f, 0xed, 0x02, 0xa9, 0x1c,
671     0x3d, 0xaa, 0x66, 0xe8, 0x0d, 0x1a, 0x86, 0xaa,
672     0xb5, 0x98, 0xbe, 0x5d, 0xfe, 0xf7, 0x9d, 0x52,
673     0x1f, 0xbf, 0xcf, 0x98, 0xb8, 0xaa, 0x8b, 0xfe,
674     0x6a, 0x8b, 0x5a, 0x95, 0x9e, 0x96, 0x18, 0x3a,
675     0x6e, 0xef, 0xaa, 0xe8, 0xe3, 0x5a, 0xab, 0x9f,
676     0x62, 0x58, 0xbf, 0x7b, 0xb7, 0x27, 0xb3, 0xb9,
677     0xb2, 0x0c, 0x03, 0x51, 0xb4, 0x8f, 0xb6, 0x84,
678     0x71, 0x83, 0x6b, 0xb9, 0x46, 0x06, 0xc3, 0xa0,
679     0x28, 0xb2, 0x57, 0xfb, 0xfe, 0x74, 0x33, 0xa9,
680     0x15, 0x0b, 0x4f, 0x8a, 0xd7, 0xb3, 0x1c, 0x83,
681     0x0d, 0xb4, 0x8f, 0x7a, 0xb1, 0x7c, 0xad, 0xdb,
682     0x43, 0xb7, 0x6f, 0x77, 0xad, 0x1f, 0x27, 0x89,
683     0xe5, 0xe3, 0x16, 0x6d, 0x3f, 0xaf, 0x93, 0xc8,
684     0xd5, 0x46, 0xe0, 0xa1, 0x81, 0x13, 0x5d, 0x68,
685     0xd6, 0xa1, 0xf6, 0x21, 0x16, 0x0e, 0x42, 0xb0,
686     0x04, 0x06, 0x64, 0x60, 0x44, 0xae, 0xd2, 0x3b,
687     0x92, 0xb0, 0x71, 0xaf, 0x60, 0x46, 0x19, 0x5a,
688     0x2a, 0xb2, 0x0e, 0xdd, 0xec, 0x6a, 0xc5, 0xeb,
689     0x14, 0x0d, 0xf7, 0x35, 0x36, 0xe0, 0xde, 0xa7,
690     0xb5, 0x62, 0xce, 0xa7, 0x66, 0x9b, 0x43, 0x2f,
691     0x4c, 0x6a, 0xad, 0xd7, 0xef, 0x90, 0xf7, 0xee,
692     0x4d, 0xc4, 0xf2, 0x1a, 0xfb, 0xe1, 0xe0, 0x56,
693     0xcd, 0x03, 0x71, 0xd3, 0x8a, 0x12, 0x2d, 0x88,
694     0xb9, 0x33, 0xce, 0xd2, 0xd8, 0x0f, 0x89, 0xdd,
695     0xcc, 0xc4, 0x55, 0x13, 0x39, 0x01, 0x90, 0x83,
696     0x5a, 0x94, 0x2b, 0x7d, 0x45, 0x96, 0xdb, 0x27,
697     0x47, 0x45, 0xde, 0x87, 0x5c, 0x58, 0xd9, 0xf9,
698     0x1e, 0x9c, 0xdc, 0xe8, 0x06, 0x44, 0x4b, 0xd9,
699     0xde, 0x56, 0x55, 0x79, 0x8d, 0xa2, 0x4d, 0x12,
700     0xa3, 0xde, 0x11, 0x67, 0x96, 0x95, 0xcf, 0x42,
701     0xb1, 0x39, 0xfd, 0x81, 0x4b, 0xe4, 0x26, 0xb8,
702     0xc3, 0x0d, 0xdd, 0x2e, 0xfa, 0x70, 0x31, 0x50,
703     0x0e, 0x40, 0x01, 0x4e, 0xa0, 0xd4, 0xc3, 0x8d,
704     0x51, 0xb4, 0xfb, 0xdc, 0x6c, 0x6b, 0x5e, 0xd1,
705     0x1e, 0xff, 0x6f, 0xad, 0x21, 0xd5, 0x64, 0xc0,
706     0x8f, 0xa0, 0x58, 0xb2, 0x96, 0xf3, 0xe1, 0xe6,
707     0x07, 0x0f, 0xee, 0x3b, 0xa9, 0xe5, 0x79, 0x12,
708     0x56, 0xfa, 0x78, 0x96, 0xa5, 0x15, 0xe0, 0x46,
709     0xef, 0xcd, 0x18, 0xc8, 0x6b, 0x50, 0xdb, 0xce,
710     0x4d, 0xf3, 0xfe, 0xe4, 0x18, 0xb7, 0x82, 0xb6,
711     0x01, 0xb5, 0xc4, 0xa7, 0x36, 0xac, 0xe1, 0x22,
712     0xf4, 0x97, 0x7f, 0xcf, 0x68, 0x76, 0x0a, 0x75,
713     0xe0, 0xdd, 0x21, 0x50, 0x1b, 0xf9, 0xec, 0x24,
714     0x30, 0xec, 0x93, 0xe5, 0xfe, 0xc8, 0x58, 0xc2,
715     0xbd, 0x7d, 0x7e, 0xe7, 0xe0, 0x06, 0xfb, 0x25,
716     0xba, 0xbc, 0x54, 0x07, 0x5c, 0xc8, 0xfb, 0x73,
717     0x2e, 0xa7, 0xee, 0xb3, 0xd6, 0x65, 0x6c, 0x9d,
718     0x28, 0x15, 0xa1, 0x0f, 0x74, 0xe9, 0x39, 0xf9,
719     0x0c, 0xdd, 0x41, 0xff, 0x7b, 0x65, 0x39, 0x2e,
720     0xa4, 0xc8, 0xe1, 0xef, 0xea, 0xf4, 0xc7, 0xc4,
721     0x55, 0x25, 0x5a, 0x9f, 0xf6, 0x75, 0x4b, 0xe1,
722     0x84, 0xbd, 0xca, 0x89, 0x6a, 0x2b, 0xf8, 0x3c,
723     0xb5, 0x13, 0x0d, 0x75, 0x5b, 0x0c, 0x1e, 0xfe,
724     0x9e, 0x1c, 0xac, 0xe4, 0x26, 0x0e, 0x4f, 0x1c,
725     0x92, 0xa0, 0x1e, 0xf4, 0x1e, 0x09, 0x46, 0xbe,
726     0xe1, 0x24, 0x50, 0x1d, 0x27, 0x79, 0x45, 0x0c,
727     0x64, 0x5e, 0x6b, 0x31, 0x4b, 0x8e, 0xe5, 0xf4,
728     0xbc, 0xe7, 0x23, 0x13, 0xd7, 0x49, 0xf0, 0x39,
729     0x2e, 0x97, 0xb8, 0x6d, 0x82, 0x8b, 0x15, 0x72,
730     0x7c, 0xb5, 0xfe, 0x7c, 0x8f, 0x4f, 0x82, 0xd5,
731     0xed, 0xfa, 0x40, 0xa2, 0x49, 0xce, 0xe7, 0xd3,
732     0x59, 0xef, 0xe4, 0xc4, 0x6d, 0x12, 0x4d, 0x8e,
733     0x34, 0x53, 0x82, 0x44, 0xf7, 0xc9, 0x89, 0x5a,
734     0x37, 0x93, 0x49, 0xce, 0x28, 0xdb, 0x64, 0x74,
735     0x25, 0xc6, 0x49, 0x2e, 0x71, 0xbc, 0x33, 0x78,
736     0x01, 0xc3, 0x02, 0xd2, 0x58, 0xed, 0x50, 0xb6,
737     0x99, 0x38, 0x2c, 0x41, 0xc2, 0xc4, 0x5d, 0x68,
738     0x18, 0x07, 0xb9, 0x44, 0xbd, 0xf0, 0xd4, 0x20,
739     0x20, 0x5b, 0x54, 0xab, 0x67, 0xe3, 0xff, 0x64,
740     0x78, 0xbc, 0x5b, 0x24, 0x18, 0x2a, 0xf2, 0x46,
741     0x09, 0x46, 0x5b, 0x5b, 0x4a, 0x96, 0xe5, 0xc2,
742     0xa0, 0x36, 0xa0, 0x0b, 0x09, 0x39, 0xa5, 0x0e,
743     0x83, 0xe4, 0x3b, 0x64, 0x72, 0x4a, 0xf3, 0x60,
744     0x1a, 0x2f, 0x4c, 0xe5, 0x0e, 0xf3, 0xde, 0x24,
745     0xe8, 0x0c, 0x32, 0x52, 0x36, 0xb4, 0xe3, 0x2a,
746     0x86, 0x2e, 0x6b, 0xc7, 0x67, 0x99, 0x87, 0x2c,
747     0x11, 0xdd, 0x2a, 0x86, 0xda, 0x85, 0x1c, 0x9e,
748     0x95, 0xe5, 0x9e, 0x99, 0xe0, 0xb7, 0x3b, 0x5f,
749     0xe2, 0x82, 0x09, 0x6e, 0x08, 0x40, 0x7b, 0x89,
750     0x72, 0x60, 0xfc, 0xb5, 0x6b, 0xbf, 0x17, 0x06,
751     0x7f, 0x29, 0xaf, 0xd0, 0xa8, 0xe7, 0x7e, 0x6f,
752     0x3e, 0x0b, 0x8d, 0xeb, 0xae, 0x9d, 0x98, 0x2a,
753     0xe6, 0xcf, 0xe3, 0x0b, 0x25, 0xc6, 0xc7, 0x03,
754     0xbf, 0x7f, 0xb7, 0x85, 0xfb, 0xae, 0x54, 0x5e,
755     0x65, 0xed, 0x6c, 0x8e, 0xd0, 0x34, 0x25, 0x3b,
756     0xf2, 0x52, 0x23, 0x34, 0x95, 0xb2, 0x1e, 0x77,
757     0x46, 0xa9, 0xb5, 0xb8, 0x24, 0xd7, 0xda, 0x3b,
758     0xbe, 0x69, 0xd6, 0xe3, 0xe4, 0x4d, 0x02, 0xbc,
759     0xb6, 0xbb, 0xe2, 0x20, 0xcb, 0x92, 0x03, 0xe5,
760     0x86, 0xd6, 0x0c, 0xcb, 0x37, 0x0f, 0xc5, 0x78,
761     0x7c, 0x86, 0xee, 0x7e, 0xcd, 0xe7, 0x39, 0x24,
762     0xdb, 0x5d, 0x74, 0x57, 0x9c, 0x9b, 0x64, 0x99,
763     0xda, 0xc8, 0x36, 0x13, 0x59, 0x97, 0x09, 0xb9,
764     0xbf, 0x5a, 0xc2, 0xd5, 0xc5, 0xe7, 0xe0, 0x33,
765     0xcc, 0xbb, 0x78, 0x65, 0xdf, 0xe1, 0xee, 0x34,
766     0x93, 0x93, 0x54, 0xb6, 0x4f, 0xff, 0xd6, 0xf2,
767     0xd6, 0x67, 0x5c, 0xe8, 0xd0, 0x52, 0x99, 0x93,
768     0x15, 0xff, 0x7f, 0x2d, 0x67, 0x46, 0x43, 0xa3,
769     0xeb, 0x66, 0x5b, 0x93, 0x84, 0x3f, 0xdb, 0xa2,
770     0x7e, 0x90, 0x62, 0xfe, 0x9b, 0x37, 0x4f, 0xd4,
771     0xf1, 0xde, 0x7c, 0xd6, 0x79, 0x5d, 0x8a, 0x28,
772     0xcd, 0x60, 0xb0, 0xff, 0x72, 0x3f, 0x6a, 0xe4,
773     0x7d, 0x56, 0x19, 0xa1, 0x89, 0x3e, 0xd3, 0xe5,
774     0xed, 0x0e, 0xbb, 0xf8, 0x4c, 0xfc, 0xbf, 0x67,
775     0x67, 0x3b, 0xe3, 0x56, 0xd0, 0x73, 0x65, 0x9b,
776     0x3f, 0x93, 0xc9, 0x5f, 0x25, 0xca, 0x73, 0xda,
777     0x6b, 0xb2, 0x8d, 0x95, 0x8a, 0x4a, 0xb3, 0x4d,
778     0x1a, 0x25, 0xf1, 0xff, 0x95, 0xa5, 0x12, 0xb4,
779     0x9a, 0xbe, 0x52, 0xb6, 0x3b, 0x1e, 0xf6, 0xf3,
780     0xc4, 0x4c, 0xd6, 0x71, 0x2f, 0xd6, 0x77, 0x65,
781     0x9b, 0x4d, 0xbd, 0x7c, 0xb6, 0x49, 0x69, 0x0b,
782     0xc3, 0x92, 0x56, 0xc7, 0x1e, 0x0e, 0x4a, 0x75,
783     0xb8, 0x30, 0xe3, 0x7b, 0xea, 0x96, 0xcc, 0xf0,
784     0x7b, 0xd5, 0x7e, 0xcf, 0x65, 0x47, 0x68, 0x5a,
785     0x38, 0xfa, 0x59, 0xd6, 0xe5, 0x3b, 0xa6, 0xc4,
786     0x85, 0x11, 0xd4, 0x6a, 0xd8, 0xaf, 0xd8, 0x36,
787     0xe7, 0x62, 0xea, 0x9b, 0xd9, 0x6f, 0xd9, 0x47,
788     0xba, 0x9f, 0x93, 0xef, 0x95, 0xcf, 0x54, 0x6b,
789     0x3f, 0xb0, 0x2b, 0x98, 0x73, 0x55, 0x4d, 0xad,
790     0x61, 0x13, 0x07, 0xcc, 0xda, 0x07, 0x57, 0x5f,
791     0x46, 0x0e, 0x40, 0xc6, 0xee, 0xe5, 0x42, 0x61,
792     0x51, 0x83, 0x10, 0x4e, 0x34, 0xe5, 0xc9, 0x75,
793     0x6d, 0xf2, 0x39, 0x98, 0x70, 0xf3, 0x70, 0x46,
794     0xf2, 0x99, 0x24, 0x8a, 0x15, 0x7c, 0x8e, 0x79,
795     0xc7, 0x16, 0xc3, 0x48, 0x3e, 0x28, 0xdb, 0x9b,
796     0xb7, 0x8d, 0x31, 0x72, 0xe8, 0x74, 0x8b, 0x21,
797     0x57, 0x54, 0x4b, 0x58, 0xa9, 0x0b, 0xbd, 0x5f,
798     0xb6, 0x35, 0x95, 0xa3, 0x6e, 0x1f, 0x73, 0xd3,
799     0xf5, 0x79, 0x17, 0x0c, 0xfc, 0x43, 0xf3, 0x12,
800     0x56, 0xb6, 0xc1, 0x90, 0x7b, 0xd5, 0x84, 0x75,
801     0x0b, 0xb8, 0x50, 0xaa, 0x35, 0xba, 0x1a, 0xe3,
802     0xfb, 0x1b, 0x8a, 0xbe, 0xad, 0xb5, 0xdf, 0xbe,
803     0x76, 0x9f, 0xd6, 0xa5, 0xe4, 0xff, 0x66, 0x20,
804     0x8f, 0xb2, 0x05, 0x3d, 0xb8, 0x78, 0x1f, 0x27,
805     0x82, 0x24, 0x52, 0xcd, 0x58, 0xe3, 0xeb, 0x94,
806     0xf7, 0xe6, 0x62, 0x90, 0x41, 0xed, 0xfb, 0x1a,
807     0xbb, 0xb1, 0x7f, 0x91, 0xe8, 0x77, 0x13, 0x2c,
808     0x7e, 0x2f, 0x6e, 0x97, 0xb8, 0x51, 0xf9, 0x6c,
809     0xec, 0xb7, 0x8c, 0xab, 0x3e, 0x73, 0x1b, 0xc4,
810     0x16, 0xbf, 0x03, 0xfb, 0x2b, 0x77, 0x28, 0xe3,
811     0x0e, 0x4d, 0x8c, 0xcc, 0xb4, 0xe5, 0xaa, 0x99,
812     0x9d, 0xc6, 0xc4, 0x55, 0x35, 0xef, 0x4b, 0x94,
813     0xdd, 0x2e, 0x68, 0x58, 0x34, 0x37, 0x67, 0xb7,
814     0x49, 0x39, 0xa0, 0x29, 0xb2, 0xe4, 0x26, 0x09,
815     0x43, 0x6f, 0xa0, 0xbd, 0xd6, 0x2b, 0x63, 0x4e,
816     0x2c, 0x09, 0xc6, 0x08, 0xa6, 0x01, 0x07, 0xc5,
817     0xaf, 0x43, 0x90, 0x8b, 0xa6, 0xc5, 0x2f, 0xf7,
818     0xc5, 0xac, 0xde, 0x2f, 0x77, 0x20, 0xba, 0x45,
819     0xdc, 0x2e, 0xdb, 0xaa, 0xdd, 0x03, 0x96, 0xcf,
820     0xca, 0xc5, 0x08, 0x2d, 0x7f, 0xa9, 0xb7, 0x5e,
821     0xd8, 0x22, 0xb9, 0xc0, 0x05, 0xcd, 0xad, 0xb3,
822     0x8d, 0xf2, 0xbe, 0x9d, 0x5b, 0x96, 0x6d, 0x92,
823     0x33, 0xe5, 0xe4, 0x3c, 0xa4, 0xf5, 0x6c, 0xaf,
824     0x24, 0x70, 0x24, 0x32, 0xb5, 0x92, 0x16, 0xba,
825     0x38, 0xd5, 0xea, 0x4d, 0x87, 0xe8, 0x1b, 0x67,
826     0x77, 0xdc, 0x2a, 0x99, 0x0b, 0x9e, 0x79, 0x17,
827     0x28, 0x2b, 0xcb, 0xf7, 0x44, 0xc3, 0x34, 0x4a,
828     0xc6, 0x6a, 0xf5, 0xe7, 0x25, 0x86, 0x2d, 0x64,
829     0x90, 0x8b, 0x5a, 0x83, 0xa3, 0xb5, 0xcb, 0x67,
830     0xa3, 0x2b, 0x1e, 0x37, 0x92, 0xa7, 0xdf, 0xee,
831     0x2a, 0xc7, 0x18, 0xad, 0xef, 0x97, 0xb9, 0xb8,
832     0xdc, 0xb1, 0x36, 0x76, 0x95, 0xbf, 0x5f, 0x58,
833     0x2c, 0x3c, 0x25, 0x27, 0x1d, 0x8a, 0x04, 0xcb,
834     0x22, 0xcc, 0x0f, 0xe7, 0xc0, 0x58, 0xd8, 0x71,
835     0x3b, 0xeb, 0x72, 0xf7, 0x13, 0x46, 0x66, 0x1a,
836     0x7b, 0xe1, 0xa2, 0x13, 0x6d, 0xd6, 0xe1, 0x62,
837     0x8d, 0x84, 0xb9, 0x1c, 0xdd, 0xe7, 0xe4, 0xac,
838     0x3b, 0xd5, 0x50, 0x2a, 0xcb, 0x52, 0x3f, 0x54,
839     0x8e, 0x57, 0xfc, 0xb9, 0x2c, 0x37, 0x77, 0x00,
840     0x80, 0xf6, 0x3d, 0x18, 0xa7, 0xf4, 0xf8, 0x04,
841     0x2d, 0x43, 0x6b, 0x75, 0x99, 0x1c, 0xb4, 0x24,
842     0x3c, 0x9c, 0x9c, 0x48, 0x58, 0xce, 0xc8, 0x76,
843     0x33, 0x69, 0xd6, 0x67, 0xdf, 0x28, 0xef, 0x7f,
844     0x0a, 0x72, 0x7f, 0xcb, 0x0c, 0x3e, 0x3e, 0x91,
845     0x6d, 0x51, 0x4f, 0xc8, 0xf7, 0x44, 0x42, 0x4b,
846     0x1f, 0xd6, 0xda, 0x49, 0x96, 0x84, 0x84, 0x0b,
847     0x15, 0x8a, 0xda, 0x5f, 0x9c, 0xf7, 0xe8, 0x4d,
848     0x90, 0xb3, 0x3d, 0xc6, 0x0e, 0xa6, 0x55, 0x31,
849     0xff, 0x1f, 0x5d, 0x6b, 0x6a, 0x57, 0xfb, 0x6c,
850     0x8f, 0xcf, 0xc9, 0xbe, 0xc7, 0xf7, 0xda, 0x37,
851     0xb8, 0xc4, 0x44, 0xb6, 0xcb, 0x84, 0x61, 0xf8,
852     0x68, 0x0c, 0x43, 0xfd, 0x70, 0x6d, 0x7c, 0x58,
853     0x50, 0xcc, 0x48, 0xae, 0x92, 0xdf, 0xf9, 0x8d,
854     0xd9, 0xf6, 0xc2, 0x04, 0x39, 0xdb, 0xe6, 0x3b,
855     0x2e, 0x1b, 0x60, 0xbd, 0x28, 0xeb, 0xbe, 0xb2,
856     0x9d, 0xef, 0x95, 0x75, 0xe9, 0xbb, 0xcb, 0xcd,
857     0x21, 0x8e, 0x4a, 0x94, 0xa3, 0x57, 0xf1, 0xde,
858     0xef, 0xcf, 0x76, 0x16, 0xd6, 0x99, 0x67, 0x3b,
859     0xdc, 0xbb, 0xb6, 0xd6, 0x60, 0x8c, 0x7b, 0xdd,
860     0x6e, 0x29, 0x27, 0x97, 0x6d, 0xb3, 0x2f, 0x53,
861     0xff, 0x59, 0x16, 0x0d, 0x93, 0x4b, 0x24, 0x31,
862     0xa3, 0xf8, 0x9d, 0xef, 0x60, 0x95, 0xdc, 0x76,
863     0x89, 0x6e, 0x59, 0x33, 0x37, 0x57, 0xc8, 0x67,
864     0xa0, 0x91, 0x12, 0xb7, 0xbd, 0xa3, 0xf4, 0xe6,
865     0xd0, 0xc4, 0xf8, 0xbb, 0x22, 0x77, 0xcb, 0x45,
866     0x2f, 0xed, 0x20, 0x18, 0x31, 0xed, 0x9b, 0x59,
867     0x96, 0xb1, 0x91, 0x6b, 0xdf, 0xfd, 0x5d, 0xf2,
868     0x7a, 0xf7, 0x2e, 0x57, 0x14, 0x79, 0x4f, 0x6e,
869     0x77, 0xd8, 0x31, 0xe8, 0x38, 0xc8, 0x76, 0x98,
870     0xd0, 0xf5, 0x88, 0xcf, 0x47, 0x3f, 0xe0, 0xbe,
871     0x01, 0x5e, 0xf8, 0x3d, 0xb9, 0x2f, 0x31, 0x89,
872     0x3f, 0x17, 0x2c, 0x1f, 0xcd, 0xfb, 0x64, 0xb2,
873     0x7b, 0x99, 0xb8, 0x0e, 0xb7, 0x63, 0x12, 0xd7,
874     0xdd, 0x2e, 0x07, 0x36, 0x5d, 0x0f, 0xa8, 0xa3,
875     0xe5, 0xe4, 0xc3, 0xc9, 0x8f, 0xdc, 0x20, 0xb9,
876     0x15, 0x6e, 0x35, 0x76, 0x56, 0x0e, 0x5e, 0x12,
877     0xa2, 0x8d, 0xcb, 0xe7, 0x60, 0xbf, 0xa3, 0x6e,
878     0x90, 0x96, 0xc3, 0x74, 0xb7, 0x21, 0x51, 0xa4,
879     0x3e, 0x8e, 0xba, 0xb9, 0x4f, 0x26, 0xe8, 0xa3,
880     0xba, 0xf4, 0x55, 0x7a, 0x7b, 0xc2, 0xe2, 0x7f,
881     0xe3, 0x44, 0xca, 0xad, 0xd3, 0x48, 0xc4, 0xe9,
882     0x06, 0xc4, 0xf6, 0x38, 0x41, 0x7d, 0x69, 0xc8,
883     0xf6, 0xba, 0xb2, 0x6d, 0x12, 0x01, 0x12, 0x57,
884     0x8a, 0xea, 0x28, 0xd2, 0xe4, 0x82, 0x80, 0xe2,
885     0x4f, 0xea, 0xc0, 0x3e, 0x95, 0xed, 0x2e, 0xbc,
886     0xa5, 0xdd, 0x3a, 0xb5, 0xff, 0x2b, 0x9f, 0x83,
887     0x22, 0x44, 0x8e, 0x5b, 0x9e, 0xe0, 0x18, 0x26,
888     0xe7, 0xfc, 0xd5, 0x55, 0xff, 0xcf, 0xdd, 0xa8,
889     0xdd, 0xcf, 0xb8, 0x98, 0xa4, 0x5b, 0x15, 0xdf,
890     0x0b, 0xb9, 0xc7, 0xef, 0xe4, 0x3b, 0xca, 0x64,
891     0xff, 0xcb, 0xe7, 0x23, 0xd1, 0xa7, 0x45, 0x33,
892     0x31, 0x1e, 0xc8, 0x83, 0xcf, 0x48, 0xa2, 0x4e,
893     0x17, 0xbf, 0xaf, 0x1f, 0x48, 0xbf, 0xa7, 0x89,
894     0xeb, 0x70, 0x26, 0xae, 0x92, 0xa4, 0xb9, 0xac,
895     0x73, 0x95, 0x24, 0x69, 0xcd, 0x4c, 0x5c, 0x25,
896     0x49, 0x5a, 0x33, 0x13, 0x57, 0x49, 0x92, 0xd6,
897     0xcc, 0xc4, 0x55, 0x92, 0xa4, 0x35, 0x33, 0x71,
898     0x95, 0x24, 0x69, 0xcd, 0x4c, 0x5c, 0x25, 0x49,
899     0x5a, 0x33, 0x13, 0x57, 0x49, 0x92, 0xd6, 0xcc,
900     0xc4, 0x55, 0x92, 0xa4, 0x35, 0xdb, 0x6d, 0x83,
901     0x48, 0xf0, 0x97, 0x7b, 0x0a, 0x96, 0x43, 0xa9,
902     0xad, 0xd3, 0x77, 0xf7, 0x1c, 0x73, 0x70, 0x33,
903     0xc6, 0xee, 0x39, 0xef, 0x6a, 0x46, 0x07, 0xda,
904     0xe4, 0x80, 0x15, 0xf8, 0xc8, 0xde, 0xdb, 0x37,
905     0xc3, 0x9c, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24,
906     0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92,
907     0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49,
908     0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24,
909     0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92,
910     0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49,
911     0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24,
912     0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92,
913     0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49,
914     0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24,
915     0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92,
916     0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49,
917     0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24,
918     0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92,
919     0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49,
920     0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24,
921     0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92,
922     0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24, 0x49,
923     0x5b, 0xb7, 0x67, 0xcf, 0xff, 0x03, 0x27, 0xa6,
924     0xaa, 0x9c, 0x80, 0xec, 0x5b, 0x07, 0x00, 0x00,
925     0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
926     0x60, 0x82,
927 };
928 
929 unsigned int mslogo_jpg_size = sizeof(mslogo_jpg);
930 
931 const unsigned char nxlogo_png[] = {
932     0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00,
933     0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x01, 0x34, 0x00, 0x00,
934     0x00, 0x55, 0x08, 0x06, 0x00, 0x00, 0x00, 0xc7, 0x5e, 0x18, 0xd4,
935     0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x2e,
936     0x23, 0x00, 0x00, 0x2e, 0x23, 0x01, 0x78, 0xa5, 0x3f, 0x76, 0x00,
937     0x00, 0x0a, 0x4f, 0x69, 0x43, 0x43, 0x50, 0x50, 0x68, 0x6f, 0x74,
938     0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20, 0x49, 0x43, 0x43, 0x20, 0x70,
939     0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x00, 0x78, 0xda, 0x9d,
940     0x53, 0x67, 0x54, 0x53, 0xe9, 0x16, 0x3d, 0xf7, 0xde, 0xf4, 0x42,
941     0x4b, 0x88, 0x80, 0x94, 0x4b, 0x6f, 0x52, 0x15, 0x08, 0x20, 0x52,
942     0x42, 0x8b, 0x80, 0x14, 0x91, 0x26, 0x2a, 0x21, 0x09, 0x10, 0x4a,
943     0x88, 0x21, 0xa1, 0xd9, 0x15, 0x51, 0xc1, 0x11, 0x45, 0x45, 0x04,
944     0x1b, 0xc8, 0xa0, 0x88, 0x03, 0x8e, 0x8e, 0x80, 0x8c, 0x15, 0x51,
945     0x2c, 0x0c, 0x8a, 0x0a, 0xd8, 0x07, 0xe4, 0x21, 0xa2, 0x8e, 0x83,
946     0xa3, 0x88, 0x8a, 0xca, 0xfb, 0xe1, 0x7b, 0xa3, 0x6b, 0xd6, 0xbc,
947     0xf7, 0xe6, 0xcd, 0xfe, 0xb5, 0xd7, 0x3e, 0xe7, 0xac, 0xf3, 0x9d,
948     0xb3, 0xcf, 0x07, 0xc0, 0x08, 0x0c, 0x96, 0x48, 0x33, 0x51, 0x35,
949     0x80, 0x0c, 0xa9, 0x42, 0x1e, 0x11, 0xe0, 0x83, 0xc7, 0xc4, 0xc6,
950     0xe1, 0xe4, 0x2e, 0x40, 0x81, 0x0a, 0x24, 0x70, 0x00, 0x10, 0x08,
951     0xb3, 0x64, 0x21, 0x73, 0xfd, 0x23, 0x01, 0x00, 0xf8, 0x7e, 0x3c,
952     0x3c, 0x2b, 0x22, 0xc0, 0x07, 0xbe, 0x00, 0x01, 0x78, 0xd3, 0x0b,
953     0x08, 0x00, 0xc0, 0x4d, 0x9b, 0xc0, 0x30, 0x1c, 0x87, 0xff, 0x0f,
954     0xea, 0x42, 0x99, 0x5c, 0x01, 0x80, 0x84, 0x01, 0xc0, 0x74, 0x91,
955     0x38, 0x4b, 0x08, 0x80, 0x14, 0x00, 0x40, 0x7a, 0x8e, 0x42, 0xa6,
956     0x00, 0x40, 0x46, 0x01, 0x80, 0x9d, 0x98, 0x26, 0x53, 0x00, 0xa0,
957     0x04, 0x00, 0x60, 0xcb, 0x63, 0x62, 0xe3, 0x00, 0x50, 0x2d, 0x00,
958     0x60, 0x27, 0x7f, 0xe6, 0xd3, 0x00, 0x80, 0x9d, 0xf8, 0x99, 0x7b,
959     0x01, 0x00, 0x5b, 0x94, 0x21, 0x15, 0x01, 0xa0, 0x91, 0x00, 0x20,
960     0x13, 0x65, 0x88, 0x44, 0x00, 0x68, 0x3b, 0x00, 0xac, 0xcf, 0x56,
961     0x8a, 0x45, 0x00, 0x58, 0x30, 0x00, 0x14, 0x66, 0x4b, 0xc4, 0x39,
962     0x00, 0xd8, 0x2d, 0x00, 0x30, 0x49, 0x57, 0x66, 0x48, 0x00, 0xb0,
963     0xb7, 0x00, 0xc0, 0xce, 0x10, 0x0b, 0xb2, 0x00, 0x08, 0x0c, 0x00,
964     0x30, 0x51, 0x88, 0x85, 0x29, 0x00, 0x04, 0x7b, 0x00, 0x60, 0xc8,
965     0x23, 0x23, 0x78, 0x00, 0x84, 0x99, 0x00, 0x14, 0x46, 0xf2, 0x57,
966     0x3c, 0xf1, 0x2b, 0xae, 0x10, 0xe7, 0x2a, 0x00, 0x00, 0x78, 0x99,
967     0xb2, 0x3c, 0xb9, 0x24, 0x39, 0x45, 0x81, 0x5b, 0x08, 0x2d, 0x71,
968     0x07, 0x57, 0x57, 0x2e, 0x1e, 0x28, 0xce, 0x49, 0x17, 0x2b, 0x14,
969     0x36, 0x61, 0x02, 0x61, 0x9a, 0x40, 0x2e, 0xc2, 0x79, 0x99, 0x19,
970     0x32, 0x81, 0x34, 0x0f, 0xe0, 0xf3, 0xcc, 0x00, 0x00, 0xa0, 0x91,
971     0x15, 0x11, 0xe0, 0x83, 0xf3, 0xfd, 0x78, 0xce, 0x0e, 0xae, 0xce,
972     0xce, 0x36, 0x8e, 0xb6, 0x0e, 0x5f, 0x2d, 0xea, 0xbf, 0x06, 0xff,
973     0x22, 0x62, 0x62, 0xe3, 0xfe, 0xe5, 0xcf, 0xab, 0x70, 0x40, 0x00,
974     0x00, 0xe1, 0x74, 0x7e, 0xd1, 0xfe, 0x2c, 0x2f, 0xb3, 0x1a, 0x80,
975     0x3b, 0x06, 0x80, 0x6d, 0xfe, 0xa2, 0x25, 0xee, 0x04, 0x68, 0x5e,
976     0x0b, 0xa0, 0x75, 0xf7, 0x8b, 0x66, 0xb2, 0x0f, 0x40, 0xb5, 0x00,
977     0xa0, 0xe9, 0xda, 0x57, 0xf3, 0x70, 0xf8, 0x7e, 0x3c, 0x3c, 0x45,
978     0xa1, 0x90, 0xb9, 0xd9, 0xd9, 0xe5, 0xe4, 0xe4, 0xd8, 0x4a, 0xc4,
979     0x42, 0x5b, 0x61, 0xca, 0x57, 0x7d, 0xfe, 0x67, 0xc2, 0x5f, 0xc0,
980     0x57, 0xfd, 0x6c, 0xf9, 0x7e, 0x3c, 0xfc, 0xf7, 0xf5, 0xe0, 0xbe,
981     0xe2, 0x24, 0x81, 0x32, 0x5d, 0x81, 0x47, 0x04, 0xf8, 0xe0, 0xc2,
982     0xcc, 0xf4, 0x4c, 0xa5, 0x1c, 0xcf, 0x92, 0x09, 0x84, 0x62, 0xdc,
983     0xe6, 0x8f, 0x47, 0xfc, 0xb7, 0x0b, 0xff, 0xfc, 0x1d, 0xd3, 0x22,
984     0xc4, 0x49, 0x62, 0xb9, 0x58, 0x2a, 0x14, 0xe3, 0x51, 0x12, 0x71,
985     0x8e, 0x44, 0x9a, 0x8c, 0xf3, 0x32, 0xa5, 0x22, 0x89, 0x42, 0x92,
986     0x29, 0xc5, 0x25, 0xd2, 0xff, 0x64, 0xe2, 0xdf, 0x2c, 0xfb, 0x03,
987     0x3e, 0xdf, 0x35, 0x00, 0xb0, 0x6a, 0x3e, 0x01, 0x7b, 0x91, 0x2d,
988     0xa8, 0x5d, 0x63, 0x03, 0xf6, 0x4b, 0x27, 0x10, 0x58, 0x74, 0xc0,
989     0xe2, 0xf7, 0x00, 0x00, 0xf2, 0xbb, 0x6f, 0xc1, 0xd4, 0x28, 0x08,
990     0x03, 0x80, 0x68, 0x83, 0xe1, 0xcf, 0x77, 0xff, 0xef, 0x3f, 0xfd,
991     0x47, 0xa0, 0x25, 0x00, 0x80, 0x66, 0x49, 0x92, 0x71, 0x00, 0x00,
992     0x5e, 0x44, 0x24, 0x2e, 0x54, 0xca, 0xb3, 0x3f, 0xc7, 0x08, 0x00,
993     0x00, 0x44, 0xa0, 0x81, 0x2a, 0xb0, 0x41, 0x1b, 0xf4, 0xc1, 0x18,
994     0x2c, 0xc0, 0x06, 0x1c, 0xc1, 0x05, 0xdc, 0xc1, 0x0b, 0xfc, 0x60,
995     0x36, 0x84, 0x42, 0x24, 0xc4, 0xc2, 0x42, 0x10, 0x42, 0x0a, 0x64,
996     0x80, 0x1c, 0x72, 0x60, 0x29, 0xac, 0x82, 0x42, 0x28, 0x86, 0xcd,
997     0xb0, 0x1d, 0x2a, 0x60, 0x2f, 0xd4, 0x40, 0x1d, 0x34, 0xc0, 0x51,
998     0x68, 0x86, 0x93, 0x70, 0x0e, 0x2e, 0xc2, 0x55, 0xb8, 0x0e, 0x3d,
999     0x70, 0x0f, 0xfa, 0x61, 0x08, 0x9e, 0xc1, 0x28, 0xbc, 0x81, 0x09,
1000     0x04, 0x41, 0xc8, 0x08, 0x13, 0x61, 0x21, 0xda, 0x88, 0x01, 0x62,
1001     0x8a, 0x58, 0x23, 0x8e, 0x08, 0x17, 0x99, 0x85, 0xf8, 0x21, 0xc1,
1002     0x48, 0x04, 0x12, 0x8b, 0x24, 0x20, 0xc9, 0x88, 0x14, 0x51, 0x22,
1003     0x4b, 0x91, 0x35, 0x48, 0x31, 0x52, 0x8a, 0x54, 0x20, 0x55, 0x48,
1004     0x1d, 0xf2, 0x3d, 0x72, 0x02, 0x39, 0x87, 0x5c, 0x46, 0xba, 0x91,
1005     0x3b, 0xc8, 0x00, 0x32, 0x82, 0xfc, 0x86, 0xbc, 0x47, 0x31, 0x94,
1006     0x81, 0xb2, 0x51, 0x3d, 0xd4, 0x0c, 0xb5, 0x43, 0xb9, 0xa8, 0x37,
1007     0x1a, 0x84, 0x46, 0xa2, 0x0b, 0xd0, 0x64, 0x74, 0x31, 0x9a, 0x8f,
1008     0x16, 0xa0, 0x9b, 0xd0, 0x72, 0xb4, 0x1a, 0x3d, 0x8c, 0x36, 0xa1,
1009     0xe7, 0xd0, 0xab, 0x68, 0x0f, 0xda, 0x8f, 0x3e, 0x43, 0xc7, 0x30,
1010     0xc0, 0xe8, 0x18, 0x07, 0x33, 0xc4, 0x6c, 0x30, 0x2e, 0xc6, 0xc3,
1011     0x42, 0xb1, 0x38, 0x2c, 0x09, 0x93, 0x63, 0xcb, 0xb1, 0x22, 0xac,
1012     0x0c, 0xab, 0xc6, 0x1a, 0xb0, 0x56, 0xac, 0x03, 0xbb, 0x89, 0xf5,
1013     0x63, 0xcf, 0xb1, 0x77, 0x04, 0x12, 0x81, 0x45, 0xc0, 0x09, 0x36,
1014     0x04, 0x77, 0x42, 0x20, 0x61, 0x1e, 0x41, 0x48, 0x58, 0x4c, 0x58,
1015     0x4e, 0xd8, 0x48, 0xa8, 0x20, 0x1c, 0x24, 0x34, 0x11, 0xda, 0x09,
1016     0x37, 0x09, 0x03, 0x84, 0x51, 0xc2, 0x27, 0x22, 0x93, 0xa8, 0x4b,
1017     0xb4, 0x26, 0xba, 0x11, 0xf9, 0xc4, 0x18, 0x62, 0x32, 0x31, 0x87,
1018     0x58, 0x48, 0x2c, 0x23, 0xd6, 0x12, 0x8f, 0x13, 0x2f, 0x10, 0x7b,
1019     0x88, 0x43, 0xc4, 0x37, 0x24, 0x12, 0x89, 0x43, 0x32, 0x27, 0xb9,
1020     0x90, 0x02, 0x49, 0xb1, 0xa4, 0x54, 0xd2, 0x12, 0xd2, 0x46, 0xd2,
1021     0x6e, 0x52, 0x23, 0xe9, 0x2c, 0xa9, 0x9b, 0x34, 0x48, 0x1a, 0x23,
1022     0x93, 0xc9, 0xda, 0x64, 0x6b, 0xb2, 0x07, 0x39, 0x94, 0x2c, 0x20,
1023     0x2b, 0xc8, 0x85, 0xe4, 0x9d, 0xe4, 0xc3, 0xe4, 0x33, 0xe4, 0x1b,
1024     0xe4, 0x21, 0xf2, 0x5b, 0x0a, 0x9d, 0x62, 0x40, 0x71, 0xa4, 0xf8,
1025     0x53, 0xe2, 0x28, 0x52, 0xca, 0x6a, 0x4a, 0x19, 0xe5, 0x10, 0xe5,
1026     0x34, 0xe5, 0x06, 0x65, 0x98, 0x32, 0x41, 0x55, 0xa3, 0x9a, 0x52,
1027     0xdd, 0xa8, 0xa1, 0x54, 0x11, 0x35, 0x8f, 0x5a, 0x42, 0xad, 0xa1,
1028     0xb6, 0x52, 0xaf, 0x51, 0x87, 0xa8, 0x13, 0x34, 0x75, 0x9a, 0x39,
1029     0xcd, 0x83, 0x16, 0x49, 0x4b, 0xa5, 0xad, 0xa2, 0x95, 0xd3, 0x1a,
1030     0x68, 0x17, 0x68, 0xf7, 0x69, 0xaf, 0xe8, 0x74, 0xba, 0x11, 0xdd,
1031     0x95, 0x1e, 0x4e, 0x97, 0xd0, 0x57, 0xd2, 0xcb, 0xe9, 0x47, 0xe8,
1032     0x97, 0xe8, 0x03, 0xf4, 0x77, 0x0c, 0x0d, 0x86, 0x15, 0x83, 0xc7,
1033     0x88, 0x67, 0x28, 0x19, 0x9b, 0x18, 0x07, 0x18, 0x67, 0x19, 0x77,
1034     0x18, 0xaf, 0x98, 0x4c, 0xa6, 0x19, 0xd3, 0x8b, 0x19, 0xc7, 0x54,
1035     0x30, 0x37, 0x31, 0xeb, 0x98, 0xe7, 0x99, 0x0f, 0x99, 0x6f, 0x55,
1036     0x58, 0x2a, 0xb6, 0x2a, 0x7c, 0x15, 0x91, 0xca, 0x0a, 0x95, 0x4a,
1037     0x95, 0x26, 0x95, 0x1b, 0x2a, 0x2f, 0x54, 0xa9, 0xaa, 0xa6, 0xaa,
1038     0xde, 0xaa, 0x0b, 0x55, 0xf3, 0x55, 0xcb, 0x54, 0x8f, 0xa9, 0x5e,
1039     0x53, 0x7d, 0xae, 0x46, 0x55, 0x33, 0x53, 0xe3, 0xa9, 0x09, 0xd4,
1040     0x96, 0xab, 0x55, 0xaa, 0x9d, 0x50, 0xeb, 0x53, 0x1b, 0x53, 0x67,
1041     0xa9, 0x3b, 0xa8, 0x87, 0xaa, 0x67, 0xa8, 0x6f, 0x54, 0x3f, 0xa4,
1042     0x7e, 0x59, 0xfd, 0x89, 0x06, 0x59, 0xc3, 0x4c, 0xc3, 0x4f, 0x43,
1043     0xa4, 0x51, 0xa0, 0xb1, 0x5f, 0xe3, 0xbc, 0xc6, 0x20, 0x0b, 0x63,
1044     0x19, 0xb3, 0x78, 0x2c, 0x21, 0x6b, 0x0d, 0xab, 0x86, 0x75, 0x81,
1045     0x35, 0xc4, 0x26, 0xb1, 0xcd, 0xd9, 0x7c, 0x76, 0x2a, 0xbb, 0x98,
1046     0xfd, 0x1d, 0xbb, 0x8b, 0x3d, 0xaa, 0xa9, 0xa1, 0x39, 0x43, 0x33,
1047     0x4a, 0x33, 0x57, 0xb3, 0x52, 0xf3, 0x94, 0x66, 0x3f, 0x07, 0xe3,
1048     0x98, 0x71, 0xf8, 0x9c, 0x74, 0x4e, 0x09, 0xe7, 0x28, 0xa7, 0x97,
1049     0xf3, 0x7e, 0x8a, 0xde, 0x14, 0xef, 0x29, 0xe2, 0x29, 0x1b, 0xa6,
1050     0x34, 0x4c, 0xb9, 0x31, 0x65, 0x5c, 0x6b, 0xaa, 0x96, 0x97, 0x96,
1051     0x58, 0xab, 0x48, 0xab, 0x51, 0xab, 0x47, 0xeb, 0xbd, 0x36, 0xae,
1052     0xed, 0xa7, 0x9d, 0xa6, 0xbd, 0x45, 0xbb, 0x59, 0xfb, 0x81, 0x0e,
1053     0x41, 0xc7, 0x4a, 0x27, 0x5c, 0x27, 0x47, 0x67, 0x8f, 0xce, 0x05,
1054     0x9d, 0xe7, 0x53, 0xd9, 0x53, 0xdd, 0xa7, 0x0a, 0xa7, 0x16, 0x4d,
1055     0x3d, 0x3a, 0xf5, 0xae, 0x2e, 0xaa, 0x6b, 0xa5, 0x1b, 0xa1, 0xbb,
1056     0x44, 0x77, 0xbf, 0x6e, 0xa7, 0xee, 0x98, 0x9e, 0xbe, 0x5e, 0x80,
1057     0x9e, 0x4c, 0x6f, 0xa7, 0xde, 0x79, 0xbd, 0xe7, 0xfa, 0x1c, 0x7d,
1058     0x2f, 0xfd, 0x54, 0xfd, 0x6d, 0xfa, 0xa7, 0xf5, 0x47, 0x0c, 0x58,
1059     0x06, 0xb3, 0x0c, 0x24, 0x06, 0xdb, 0x0c, 0xce, 0x18, 0x3c, 0xc5,
1060     0x35, 0x71, 0x6f, 0x3c, 0x1d, 0x2f, 0xc7, 0xdb, 0xf1, 0x51, 0x43,
1061     0x5d, 0xc3, 0x40, 0x43, 0xa5, 0x61, 0x95, 0x61, 0x97, 0xe1, 0x84,
1062     0x91, 0xb9, 0xd1, 0x3c, 0xa3, 0xd5, 0x46, 0x8d, 0x46, 0x0f, 0x8c,
1063     0x69, 0xc6, 0x5c, 0xe3, 0x24, 0xe3, 0x6d, 0xc6, 0x6d, 0xc6, 0xa3,
1064     0x26, 0x06, 0x26, 0x21, 0x26, 0x4b, 0x4d, 0xea, 0x4d, 0xee, 0x9a,
1065     0x52, 0x4d, 0xb9, 0xa6, 0x29, 0xa6, 0x3b, 0x4c, 0x3b, 0x4c, 0xc7,
1066     0xcd, 0xcc, 0xcd, 0xa2, 0xcd, 0xd6, 0x99, 0x35, 0x9b, 0x3d, 0x31,
1067     0xd7, 0x32, 0xe7, 0x9b, 0xe7, 0x9b, 0xd7, 0x9b, 0xdf, 0xb7, 0x60,
1068     0x5a, 0x78, 0x5a, 0x2c, 0xb6, 0xa8, 0xb6, 0xb8, 0x65, 0x49, 0xb2,
1069     0xe4, 0x5a, 0xa6, 0x59, 0xee, 0xb6, 0xbc, 0x6e, 0x85, 0x5a, 0x39,
1070     0x59, 0xa5, 0x58, 0x55, 0x5a, 0x5d, 0xb3, 0x46, 0xad, 0x9d, 0xad,
1071     0x25, 0xd6, 0xbb, 0xad, 0xbb, 0xa7, 0x11, 0xa7, 0xb9, 0x4e, 0x93,
1072     0x4e, 0xab, 0x9e, 0xd6, 0x67, 0xc3, 0xb0, 0xf1, 0xb6, 0xc9, 0xb6,
1073     0xa9, 0xb7, 0x19, 0xb0, 0xe5, 0xd8, 0x06, 0xdb, 0xae, 0xb6, 0x6d,
1074     0xb6, 0x7d, 0x61, 0x67, 0x62, 0x17, 0x67, 0xb7, 0xc5, 0xae, 0xc3,
1075     0xee, 0x93, 0xbd, 0x93, 0x7d, 0xba, 0x7d, 0x8d, 0xfd, 0x3d, 0x07,
1076     0x0d, 0x87, 0xd9, 0x0e, 0xab, 0x1d, 0x5a, 0x1d, 0x7e, 0x73, 0xb4,
1077     0x72, 0x14, 0x3a, 0x56, 0x3a, 0xde, 0x9a, 0xce, 0x9c, 0xee, 0x3f,
1078     0x7d, 0xc5, 0xf4, 0x96, 0xe9, 0x2f, 0x67, 0x58, 0xcf, 0x10, 0xcf,
1079     0xd8, 0x33, 0xe3, 0xb6, 0x13, 0xcb, 0x29, 0xc4, 0x69, 0x9d, 0x53,
1080     0x9b, 0xd3, 0x47, 0x67, 0x17, 0x67, 0xb9, 0x73, 0x83, 0xf3, 0x88,
1081     0x8b, 0x89, 0x4b, 0x82, 0xcb, 0x2e, 0x97, 0x3e, 0x2e, 0x9b, 0x1b,
1082     0xc6, 0xdd, 0xc8, 0xbd, 0xe4, 0x4a, 0x74, 0xf5, 0x71, 0x5d, 0xe1,
1083     0x7a, 0xd2, 0xf5, 0x9d, 0x9b, 0xb3, 0x9b, 0xc2, 0xed, 0xa8, 0xdb,
1084     0xaf, 0xee, 0x36, 0xee, 0x69, 0xee, 0x87, 0xdc, 0x9f, 0xcc, 0x34,
1085     0x9f, 0x29, 0x9e, 0x59, 0x33, 0x73, 0xd0, 0xc3, 0xc8, 0x43, 0xe0,
1086     0x51, 0xe5, 0xd1, 0x3f, 0x0b, 0x9f, 0x95, 0x30, 0x6b, 0xdf, 0xac,
1087     0x7e, 0x4f, 0x43, 0x4f, 0x81, 0x67, 0xb5, 0xe7, 0x23, 0x2f, 0x63,
1088     0x2f, 0x91, 0x57, 0xad, 0xd7, 0xb0, 0xb7, 0xa5, 0x77, 0xaa, 0xf7,
1089     0x61, 0xef, 0x17, 0x3e, 0xf6, 0x3e, 0x72, 0x9f, 0xe3, 0x3e, 0xe3,
1090     0x3c, 0x37, 0xde, 0x32, 0xde, 0x59, 0x5f, 0xcc, 0x37, 0xc0, 0xb7,
1091     0xc8, 0xb7, 0xcb, 0x4f, 0xc3, 0x6f, 0x9e, 0x5f, 0x85, 0xdf, 0x43,
1092     0x7f, 0x23, 0xff, 0x64, 0xff, 0x7a, 0xff, 0xd1, 0x00, 0xa7, 0x80,
1093     0x25, 0x01, 0x67, 0x03, 0x89, 0x81, 0x41, 0x81, 0x5b, 0x02, 0xfb,
1094     0xf8, 0x7a, 0x7c, 0x21, 0xbf, 0x8e, 0x3f, 0x3a, 0xdb, 0x65, 0xf6,
1095     0xb2, 0xd9, 0xed, 0x41, 0x8c, 0xa0, 0xb9, 0x41, 0x15, 0x41, 0x8f,
1096     0x82, 0xad, 0x82, 0xe5, 0xc1, 0xad, 0x21, 0x68, 0xc8, 0xec, 0x90,
1097     0xad, 0x21, 0xf7, 0xe7, 0x98, 0xce, 0x91, 0xce, 0x69, 0x0e, 0x85,
1098     0x50, 0x7e, 0xe8, 0xd6, 0xd0, 0x07, 0x61, 0xe6, 0x61, 0x8b, 0xc3,
1099     0x7e, 0x0c, 0x27, 0x85, 0x87, 0x85, 0x57, 0x86, 0x3f, 0x8e, 0x70,
1100     0x88, 0x58, 0x1a, 0xd1, 0x31, 0x97, 0x35, 0x77, 0xd1, 0xdc, 0x43,
1101     0x73, 0xdf, 0x44, 0xfa, 0x44, 0x96, 0x44, 0xde, 0x9b, 0x67, 0x31,
1102     0x4f, 0x39, 0xaf, 0x2d, 0x4a, 0x35, 0x2a, 0x3e, 0xaa, 0x2e, 0x6a,
1103     0x3c, 0xda, 0x37, 0xba, 0x34, 0xba, 0x3f, 0xc6, 0x2e, 0x66, 0x59,
1104     0xcc, 0xd5, 0x58, 0x9d, 0x58, 0x49, 0x6c, 0x4b, 0x1c, 0x39, 0x2e,
1105     0x2a, 0xae, 0x36, 0x6e, 0x6c, 0xbe, 0xdf, 0xfc, 0xed, 0xf3, 0x87,
1106     0xe2, 0x9d, 0xe2, 0x0b, 0xe3, 0x7b, 0x17, 0x98, 0x2f, 0xc8, 0x5d,
1107     0x70, 0x79, 0xa1, 0xce, 0xc2, 0xf4, 0x85, 0xa7, 0x16, 0xa9, 0x2e,
1108     0x12, 0x2c, 0x3a, 0x96, 0x40, 0x4c, 0x88, 0x4e, 0x38, 0x94, 0xf0,
1109     0x41, 0x10, 0x2a, 0xa8, 0x16, 0x8c, 0x25, 0xf2, 0x13, 0x77, 0x25,
1110     0x8e, 0x0a, 0x79, 0xc2, 0x1d, 0xc2, 0x67, 0x22, 0x2f, 0xd1, 0x36,
1111     0xd1, 0x88, 0xd8, 0x43, 0x5c, 0x2a, 0x1e, 0x4e, 0xf2, 0x48, 0x2a,
1112     0x4d, 0x7a, 0x92, 0xec, 0x91, 0xbc, 0x35, 0x79, 0x24, 0xc5, 0x33,
1113     0xa5, 0x2c, 0xe5, 0xb9, 0x84, 0x27, 0xa9, 0x90, 0xbc, 0x4c, 0x0d,
1114     0x4c, 0xdd, 0x9b, 0x3a, 0x9e, 0x16, 0x9a, 0x76, 0x20, 0x6d, 0x32,
1115     0x3d, 0x3a, 0xbd, 0x31, 0x83, 0x92, 0x91, 0x90, 0x71, 0x42, 0xaa,
1116     0x21, 0x4d, 0x93, 0xb6, 0x67, 0xea, 0x67, 0xe6, 0x66, 0x76, 0xcb,
1117     0xac, 0x65, 0x85, 0xb2, 0xfe, 0xc5, 0x6e, 0x8b, 0xb7, 0x2f, 0x1e,
1118     0x95, 0x07, 0xc9, 0x6b, 0xb3, 0x90, 0xac, 0x05, 0x59, 0x2d, 0x0a,
1119     0xb6, 0x42, 0xa6, 0xe8, 0x54, 0x5a, 0x28, 0xd7, 0x2a, 0x07, 0xb2,
1120     0x67, 0x65, 0x57, 0x66, 0xbf, 0xcd, 0x89, 0xca, 0x39, 0x96, 0xab,
1121     0x9e, 0x2b, 0xcd, 0xed, 0xcc, 0xb3, 0xca, 0xdb, 0x90, 0x37, 0x9c,
1122     0xef, 0x9f, 0xff, 0xed, 0x12, 0xc2, 0x12, 0xe1, 0x92, 0xb6, 0xa5,
1123     0x86, 0x4b, 0x57, 0x2d, 0x1d, 0x58, 0xe6, 0xbd, 0xac, 0x6a, 0x39,
1124     0xb2, 0x3c, 0x71, 0x79, 0xdb, 0x0a, 0xe3, 0x15, 0x05, 0x2b, 0x86,
1125     0x56, 0x06, 0xac, 0x3c, 0xb8, 0x8a, 0xb6, 0x2a, 0x6d, 0xd5, 0x4f,
1126     0xab, 0xed, 0x57, 0x97, 0xae, 0x7e, 0xbd, 0x26, 0x7a, 0x4d, 0x6b,
1127     0x81, 0x5e, 0xc1, 0xca, 0x82, 0xc1, 0xb5, 0x01, 0x6b, 0xeb, 0x0b,
1128     0x55, 0x0a, 0xe5, 0x85, 0x7d, 0xeb, 0xdc, 0xd7, 0xed, 0x5d, 0x4f,
1129     0x58, 0x2f, 0x59, 0xdf, 0xb5, 0x61, 0xfa, 0x86, 0x9d, 0x1b, 0x3e,
1130     0x15, 0x89, 0x8a, 0xae, 0x14, 0xdb, 0x17, 0x97, 0x15, 0x7f, 0xd8,
1131     0x28, 0xdc, 0x78, 0xe5, 0x1b, 0x87, 0x6f, 0xca, 0xbf, 0x99, 0xdc,
1132     0x94, 0xb4, 0xa9, 0xab, 0xc4, 0xb9, 0x64, 0xcf, 0x66, 0xd2, 0x66,
1133     0xe9, 0xe6, 0xde, 0x2d, 0x9e, 0x5b, 0x0e, 0x96, 0xaa, 0x97, 0xe6,
1134     0x97, 0x0e, 0x6e, 0x0d, 0xd9, 0xda, 0xb4, 0x0d, 0xdf, 0x56, 0xb4,
1135     0xed, 0xf5, 0xf6, 0x45, 0xdb, 0x2f, 0x97, 0xcd, 0x28, 0xdb, 0xbb,
1136     0x83, 0xb6, 0x43, 0xb9, 0xa3, 0xbf, 0x3c, 0xb8, 0xbc, 0x65, 0xa7,
1137     0xc9, 0xce, 0xcd, 0x3b, 0x3f, 0x54, 0xa4, 0x54, 0xf4, 0x54, 0xfa,
1138     0x54, 0x36, 0xee, 0xd2, 0xdd, 0xb5, 0x61, 0xd7, 0xf8, 0x6e, 0xd1,
1139     0xee, 0x1b, 0x7b, 0xbc, 0xf6, 0x34, 0xec, 0xd5, 0xdb, 0x5b, 0xbc,
1140     0xf7, 0xfd, 0x3e, 0xc9, 0xbe, 0xdb, 0x55, 0x01, 0x55, 0x4d, 0xd5,
1141     0x66, 0xd5, 0x65, 0xfb, 0x49, 0xfb, 0xb3, 0xf7, 0x3f, 0xae, 0x89,
1142     0xaa, 0xe9, 0xf8, 0x96, 0xfb, 0x6d, 0x5d, 0xad, 0x4e, 0x6d, 0x71,
1143     0xed, 0xc7, 0x03, 0xd2, 0x03, 0xfd, 0x07, 0x23, 0x0e, 0xb6, 0xd7,
1144     0xb9, 0xd4, 0xd5, 0x1d, 0xd2, 0x3d, 0x54, 0x52, 0x8f, 0xd6, 0x2b,
1145     0xeb, 0x47, 0x0e, 0xc7, 0x1f, 0xbe, 0xfe, 0x9d, 0xef, 0x77, 0x2d,
1146     0x0d, 0x36, 0x0d, 0x55, 0x8d, 0x9c, 0xc6, 0xe2, 0x23, 0x70, 0x44,
1147     0x79, 0xe4, 0xe9, 0xf7, 0x09, 0xdf, 0xf7, 0x1e, 0x0d, 0x3a, 0xda,
1148     0x76, 0x8c, 0x7b, 0xac, 0xe1, 0x07, 0xd3, 0x1f, 0x76, 0x1d, 0x67,
1149     0x1d, 0x2f, 0x6a, 0x42, 0x9a, 0xf2, 0x9a, 0x46, 0x9b, 0x53, 0x9a,
1150     0xfb, 0x5b, 0x62, 0x5b, 0xba, 0x4f, 0xcc, 0x3e, 0xd1, 0xd6, 0xea,
1151     0xde, 0x7a, 0xfc, 0x47, 0xdb, 0x1f, 0x0f, 0x9c, 0x34, 0x3c, 0x59,
1152     0x79, 0x4a, 0xf3, 0x54, 0xc9, 0x69, 0xda, 0xe9, 0x82, 0xd3, 0x93,
1153     0x67, 0xf2, 0xcf, 0x8c, 0x9d, 0x95, 0x9d, 0x7d, 0x7e, 0x2e, 0xf9,
1154     0xdc, 0x60, 0xdb, 0xa2, 0xb6, 0x7b, 0xe7, 0x63, 0xce, 0xdf, 0x6a,
1155     0x0f, 0x6f, 0xef, 0xba, 0x10, 0x74, 0xe1, 0xd2, 0x45, 0xff, 0x8b,
1156     0xe7, 0x3b, 0xbc, 0x3b, 0xce, 0x5c, 0xf2, 0xb8, 0x74, 0xf2, 0xb2,
1157     0xdb, 0xe5, 0x13, 0x57, 0xb8, 0x57, 0x9a, 0xaf, 0x3a, 0x5f, 0x6d,
1158     0xea, 0x74, 0xea, 0x3c, 0xfe, 0x93, 0xd3, 0x4f, 0xc7, 0xbb, 0x9c,
1159     0xbb, 0x9a, 0xae, 0xb9, 0x5c, 0x6b, 0xb9, 0xee, 0x7a, 0xbd, 0xb5,
1160     0x7b, 0x66, 0xf7, 0xe9, 0x1b, 0x9e, 0x37, 0xce, 0xdd, 0xf4, 0xbd,
1161     0x79, 0xf1, 0x16, 0xff, 0xd6, 0xd5, 0x9e, 0x39, 0x3d, 0xdd, 0xbd,
1162     0xf3, 0x7a, 0x6f, 0xf7, 0xc5, 0xf7, 0xf5, 0xdf, 0x16, 0xdd, 0x7e,
1163     0x72, 0x27, 0xfd, 0xce, 0xcb, 0xbb, 0xd9, 0x77, 0x27, 0xee, 0xad,
1164     0xbc, 0x4f, 0xbc, 0x5f, 0xf4, 0x40, 0xed, 0x41, 0xd9, 0x43, 0xdd,
1165     0x87, 0xd5, 0x3f, 0x5b, 0xfe, 0xdc, 0xd8, 0xef, 0xdc, 0x7f, 0x6a,
1166     0xc0, 0x77, 0xa0, 0xf3, 0xd1, 0xdc, 0x47, 0xf7, 0x06, 0x85, 0x83,
1167     0xcf, 0xfe, 0x91, 0xf5, 0x8f, 0x0f, 0x43, 0x05, 0x8f, 0x99, 0x8f,
1168     0xcb, 0x86, 0x0d, 0x86, 0xeb, 0x9e, 0x38, 0x3e, 0x39, 0x39, 0xe2,
1169     0x3f, 0x72, 0xfd, 0xe9, 0xfc, 0xa7, 0x43, 0xcf, 0x64, 0xcf, 0x26,
1170     0x9e, 0x17, 0xfe, 0xa2, 0xfe, 0xcb, 0xae, 0x17, 0x16, 0x2f, 0x7e,
1171     0xf8, 0xd5, 0xeb, 0xd7, 0xce, 0xd1, 0x98, 0xd1, 0xa1, 0x97, 0xf2,
1172     0x97, 0x93, 0xbf, 0x6d, 0x7c, 0xa5, 0xfd, 0xea, 0xc0, 0xeb, 0x19,
1173     0xaf, 0xdb, 0xc6, 0xc2, 0xc6, 0x1e, 0xbe, 0xc9, 0x78, 0x33, 0x31,
1174     0x5e, 0xf4, 0x56, 0xfb, 0xed, 0xc1, 0x77, 0xdc, 0x77, 0x1d, 0xef,
1175     0xa3, 0xdf, 0x0f, 0x4f, 0xe4, 0x7c, 0x20, 0x7f, 0x28, 0xff, 0x68,
1176     0xf9, 0xb1, 0xf5, 0x53, 0xd0, 0xa7, 0xfb, 0x93, 0x19, 0x93, 0x93,
1177     0xff, 0x04, 0x03, 0x98, 0xf3, 0xfc, 0x63, 0x33, 0x2d, 0xdb, 0x00,
1178     0x00, 0x00, 0x20, 0x63, 0x48, 0x52, 0x4d, 0x00, 0x00, 0x7a, 0x25,
1179     0x00, 0x00, 0x80, 0x83, 0x00, 0x00, 0xf9, 0xff, 0x00, 0x00, 0x80,
1180     0xe9, 0x00, 0x00, 0x75, 0x30, 0x00, 0x00, 0xea, 0x60, 0x00, 0x00,
1181     0x3a, 0x98, 0x00, 0x00, 0x17, 0x6f, 0x92, 0x5f, 0xc5, 0x46, 0x00,
1182     0x00, 0x25, 0xa0, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xec, 0x9d,
1183     0x79, 0x94, 0x25, 0x55, 0x9d, 0xe7, 0xbf, 0xbf, 0x1b, 0xf1, 0xf6,
1184     0xf7, 0x72, 0xad, 0x5c, 0xaa, 0xa8, 0x3d, 0x6b, 0x2f, 0x76, 0x41,
1185     0x60, 0x4a, 0xb4, 0xb1, 0x65, 0x5c, 0xda, 0xb6, 0x15, 0x6c, 0x04,
1186     0xec, 0xd1, 0x43, 0xab, 0xad, 0x07, 0x41, 0x1a, 0xa4, 0x6d, 0x9d,
1187     0x46, 0xa4, 0x68, 0xa8, 0xee, 0x39, 0x72, 0xa6, 0xad, 0xee, 0x71,
1188     0x10, 0x97, 0x71, 0x03, 0xb4, 0x61, 0x46, 0x4b, 0xc7, 0x6d, 0xc0,
1189     0x06, 0x51, 0xb1, 0x9a, 0x62, 0x69, 0x4a, 0xaa, 0x84, 0xda, 0xf7,
1190     0x25, 0x2b, 0xf7, 0xcc, 0x97, 0x6f, 0x8d, 0xb8, 0x77, 0xfe, 0x78,
1191     0x2f, 0x5f, 0x46, 0xc6, 0x8b, 0xe5, 0xde, 0xb7, 0x64, 0x15, 0x95,
1192     0xf1, 0xcb, 0x13, 0xe7, 0x45, 0xdc, 0xb8, 0xb1, 0x64, 0x44, 0xdc,
1193     0x4f, 0x7c, 0x7f, 0xbf, 0x7b, 0xe3, 0x5e, 0x12, 0x42, 0x20, 0xb0,
1194     0xc0, 0x02, 0x0b, 0xec, 0x6c, 0x30, 0xbd, 0x32, 0xf7, 0x4a, 0x28,
1195     0xb8, 0x1a, 0x73, 0xdb, 0xe8, 0x2c, 0xfb, 0x7f, 0x82, 0x37, 0xf5,
1196     0x9c, 0x06, 0x5a, 0x60, 0x73, 0x11, 0x4a, 0xf4, 0x3a, 0xfa, 0xbf,
1197     0x44, 0x8d, 0xff, 0x5b, 0x3d, 0x60, 0x0b, 0xa0, 0x18, 0x00, 0x2d,
1198     0xb0, 0x26, 0x00, 0x85, 0x9a, 0xb0, 0xcf, 0x66, 0xc0, 0x8d, 0x6c,
1199     0x30, 0x20, 0x17, 0x40, 0xf8, 0x1d, 0x4b, 0x34, 0x00, 0x68, 0x6e,
1200     0xe7, 0xa0, 0x02, 0x32, 0xd5, 0xf3, 0x0c, 0xc0, 0x18, 0x00, 0x6d,
1201     0x4e, 0x82, 0xaa, 0x11, 0x20, 0xa3, 0x1a, 0xd3, 0x65, 0x0b, 0xf9,
1202     0xeb, 0xd1, 0x05, 0x15, 0x75, 0xae, 0xf7, 0xcb, 0x27, 0x6a, 0x54,
1203     0x81, 0xd4, 0xa0, 0xe3, 0x07, 0x16, 0x00, 0xed, 0x8c, 0x51, 0x54,
1204     0xb2, 0x70, 0xaa, 0x15, 0x54, 0x8d, 0x06, 0x2a, 0x35, 0xf1, 0xfa,
1205     0x34, 0xa3, 0x40, 0x37, 0x1a, 0x56, 0x32, 0xfb, 0x15, 0x8a, 0x69,
1206     0xd4, 0x60, 0x70, 0x05, 0xe0, 0x0b, 0x80, 0x36, 0x6b, 0xa0, 0x22,
1207     0xc5, 0xe5, 0x46, 0xe4, 0x21, 0x0f, 0x05, 0x56, 0x0f, 0xe4, 0xfc,
1208     0xd6, 0x89, 0x3a, 0xae, 0x6d, 0xb3, 0x63, 0x5c, 0x42, 0x61, 0x3b,
1209     0xe1, 0xf2, 0xff, 0xd4, 0xbb, 0x2c, 0x9b, 0x26, 0x0b, 0x3e, 0x31,
1210     0x0b, 0xd7, 0x36, 0x00, 0xda, 0xeb, 0x14, 0x5e, 0x24, 0xe1, 0x86,
1211     0x91, 0x02, 0x50, 0x6a, 0x9d, 0xf7, 0x5a, 0xb6, 0x9e, 0x1f, 0x29,
1212     0x9c, 0x5b, 0xbd, 0x10, 0x6e, 0x94, 0x02, 0xa3, 0x1a, 0x0b, 0x9c,
1213     0x4a, 0xec, 0xac, 0x56, 0xa8, 0xd8, 0xd3, 0x6b, 0x81, 0x91, 0xdf,
1214     0xb1, 0xb9, 0x87, 0xdb, 0xe9, 0xb4, 0x1f, 0xbf, 0x3c, 0xf5, 0x54,
1215     0x78, 0x38, 0xc1, 0xf0, 0xac, 0x01, 0xdf, 0xd9, 0x08, 0x34, 0x55,
1216     0xa5, 0x41, 0x92, 0xb0, 0x80, 0x4b, 0x3e, 0xf2, 0x59, 0x2f, 0xb3,
1217     0x9d, 0xca, 0xbe, 0x6b, 0x85, 0x62, 0xbd, 0x8a, 0xd2, 0x0d, 0xb0,
1218     0xb3, 0x61, 0xa2, 0xce, 0x3c, 0x2a, 0x8a, 0xaa, 0x96, 0x75, 0x7e,
1219     0x79, 0x34, 0x8f, 0x3c, 0x2a, 0x40, 0x13, 0x8a, 0xe7, 0xe5, 0xf4,
1220     0x42, 0x70, 0x4b, 0xf3, 0x52, 0xa8, 0x01, 0xd0, 0xce, 0x40, 0x17,
1221     0xb1, 0x1e, 0x65, 0x45, 0x35, 0x02, 0x8d, 0x1a, 0xb8, 0x4f, 0x55,
1222     0x78, 0xd6, 0x0b, 0xbe, 0x7a, 0x94, 0xdc, 0x6c, 0x83, 0x4d, 0x36,
1223     0x5d, 0x45, 0x55, 0x89, 0x1a, 0xe0, 0xd3, 0x88, 0x34, 0xfb, 0x7a,
1224     0xd9, 0xe3, 0xab, 0x9c, 0xa7, 0x9b, 0x5b, 0x4d, 0x75, 0x2a, 0xea,
1225     0x00, 0x68, 0x0a, 0x50, 0x12, 0x35, 0xa8, 0x0b, 0xbf, 0x02, 0xed,
1226     0x07, 0x1c, 0xaa, 0x03, 0x54, 0xcc, 0x03, 0x2c, 0x2a, 0x80, 0x53,
1227     0x01, 0x9a, 0xaa, 0x02, 0x54, 0x51, 0x70, 0xf5, 0xac, 0x6b, 0x86,
1228     0x22, 0x53, 0x8d, 0x4b, 0xc9, 0xaa, 0x23, 0x15, 0xd7, 0x4f, 0x16,
1229     0x32, 0x42, 0x72, 0x1b, 0x51, 0xc3, 0x7e, 0x54, 0x20, 0x57, 0x8b,
1230     0xbb, 0xeb, 0xe4, 0xa6, 0x8a, 0x1a, 0x42, 0x02, 0x73, 0x1a, 0x68,
1231     0x7e, 0x6a, 0xa1, 0x96, 0xc2, 0x2e, 0x03, 0x18, 0xaa, 0x01, 0x68,
1232     0xaa, 0xeb, 0x64, 0xd2, 0x1a, 0x01, 0xba, 0x7a, 0x21, 0x56, 0x4f,
1233     0xcd, 0xab, 0x4a, 0x9e, 0x46, 0x34, 0x65, 0x10, 0x75, 0x02, 0x4d,
1234     0x46, 0x9d, 0x71, 0x87, 0x02, 0x2c, 0x24, 0xe0, 0x21, 0x0b, 0x23,
1235     0x2e, 0x01, 0x39, 0x21, 0x09, 0x41, 0xaf, 0x63, 0x92, 0xe5, 0x58,
1236     0x4e, 0xe7, 0xac, 0x0a, 0xa9, 0x46, 0xd7, 0xdc, 0x9e, 0x15, 0x40,
1237     0x93, 0xa9, 0x9d, 0x53, 0x71, 0xf3, 0xfc, 0xd2, 0x54, 0xd6, 0xcb,
1238     0x6c, 0xe7, 0xb6, 0xec, 0x96, 0xa7, 0x51, 0xc0, 0x54, 0x01, 0x7d,
1239     0xbd, 0x95, 0x09, 0xcd, 0xaa, 0x48, 0x68, 0x26, 0xd0, 0xbc, 0xd4,
1240     0x46, 0xa3, 0xd5, 0x96, 0x97, 0x6a, 0x72, 0xcb, 0xa3, 0x9a, 0xae,
1241     0x9a, 0xc7, 0x29, 0xff, 0xd4, 0xcb, 0x5d, 0xe5, 0x3c, 0x49, 0xe1,
1242     0x85, 0x41, 0xa7, 0x53, 0xc1, 0xe9, 0xa7, 0x11, 0x60, 0x2a, 0xe0,
1243     0x52, 0x2d, 0xf8, 0xa4, 0xb8, 0xae, 0x96, 0x3c, 0xaa, 0xfb, 0xf3,
1244     0xdb, 0x4e, 0x15, 0x7e, 0x32, 0xea, 0x4e, 0x45, 0xd9, 0x9d, 0x89,
1245     0x71, 0x35, 0x51, 0x47, 0x5a, 0x2d, 0x6e, 0x96, 0x1f, 0xe4, 0xb8,
1246     0xc7, 0xbe, 0x65, 0x41, 0x63, 0xcf, 0xeb, 0x97, 0x66, 0xdf, 0x07,
1247     0x57, 0x84, 0x98, 0xa8, 0x21, 0xbf, 0xd7, 0xf9, 0x93, 0xc3, 0xb2,
1248     0xd7, 0x3d, 0x98, 0xd5, 0xda, 0x54, 0xfd, 0x34, 0x43, 0x4c, 0x36,
1249     0xae, 0x54, 0x0b, 0xb4, 0x98, 0x0b, 0x64, 0xbc, 0x00, 0x44, 0x3e,
1250     0xdb, 0xc8, 0x82, 0x4c, 0x45, 0xf1, 0x35, 0x5a, 0xdd, 0xb9, 0xb9,
1251     0xd7, 0x24, 0x79, 0xcd, 0x9d, 0xe2, 0x96, 0xcd, 0x6a, 0xbc, 0xab,
1252     0xaa, 0xd6, 0x54, 0x9a, 0x66, 0xa8, 0xa8, 0xad, 0x46, 0x2a, 0x30,
1253     0x19, 0xd5, 0xa5, 0x02, 0x34, 0xbf, 0x6d, 0x55, 0xd6, 0x73, 0x17,
1254     0x40, 0x3a, 0xad, 0x93, 0x85, 0x20, 0x24, 0x5c, 0xd5, 0x59, 0x6b,
1255     0x2a, 0xa2, 0x9f, 0x06, 0x80, 0xc9, 0x2a, 0x30, 0x2f, 0xf5, 0x62,
1256     0x2f, 0xe8, 0x4e, 0xf0, 0x62, 0x12, 0x70, 0x52, 0x99, 0x9c, 0xf6,
1257     0x55, 0x0b, 0x34, 0x6b, 0x49, 0x53, 0x75, 0x9f, 0xa1, 0xb0, 0x5e,
1258     0xc6, 0x05, 0x55, 0x6d, 0xd2, 0x51, 0x0f, 0xd0, 0xfc, 0xdc, 0x94,
1259     0x7a, 0x63, 0x64, 0x8d, 0x70, 0x25, 0x9d, 0x00, 0x81, 0x1a, 0x81,
1260     0x04, 0x05, 0x28, 0x35, 0x62, 0x72, 0x3b, 0x86, 0x17, 0xd8, 0x84,
1261     0x24, 0x70, 0xdd, 0xd2, 0xc8, 0xe1, 0xda, 0x35, 0x25, 0xf6, 0xa6,
1262     0x9f, 0x81, 0x10, 0xb3, 0x17, 0x42, 0xbb, 0xda, 0x60, 0x92, 0x00,
1263     0x62, 0x0a, 0xdb, 0xb0, 0x06, 0x82, 0x4f, 0x55, 0x11, 0xaa, 0xa8,
1264     0x36, 0x15, 0xc0, 0xc1, 0x27, 0x7d, 0x36, 0x9a, 0x77, 0x34, 0x22,
1265     0x86, 0xa6, 0xda, 0x18, 0xb6, 0xd6, 0x66, 0x16, 0xaa, 0x2a, 0xab,
1266     0x16, 0x80, 0x41, 0x41, 0x3d, 0xc9, 0x4c, 0xbc, 0x46, 0xa8, 0xf1,
1267     0x06, 0xec, 0x4b, 0xe6, 0x9c, 0xfd, 0x62, 0x6c, 0x4e, 0x80, 0x13,
1268     0x67, 0x0a, 0xd0, 0x64, 0xe2, 0x62, 0xb2, 0xae, 0x17, 0x73, 0x98,
1269     0x67, 0x92, 0x10, 0x62, 0x1e, 0xdb, 0x31, 0x8f, 0xed, 0xdd, 0xf2,
1270     0x63, 0x16, 0xa0, 0x67, 0x3d, 0x2e, 0x6a, 0x80, 0x9c, 0x9f, 0xcb,
1271     0x5a, 0x6b, 0xe5, 0x01, 0x29, 0x42, 0xac, 0xd9, 0xdf, 0x72, 0xaa,
1272     0x36, 0xc1, 0x90, 0x49, 0x53, 0x8d, 0x79, 0xf9, 0xc5, 0xc2, 0xb8,
1273     0xa4, 0x22, 0xe3, 0x0a, 0xca, 0x8c, 0x37, 0x00, 0x52, 0xdc, 0x76,
1274     0x7e, 0xc2, 0x63, 0xde, 0x2d, 0xcd, 0xbe, 0xcc, 0x6a, 0x50, 0x85,
1275     0x7e, 0xf7, 0xb5, 0x2e, 0xb7, 0x54, 0x6f, 0x22, 0xc4, 0x64, 0x00,
1276     0xa6, 0xaa, 0x9a, 0x98, 0x07, 0x98, 0xfc, 0xd2, 0x9c, 0xd2, 0xfd,
1277     0x00, 0x47, 0x35, 0xa6, 0x91, 0xe2, 0xff, 0xd9, 0x58, 0xd7, 0x94,
1278     0x2c, 0xf7, 0xa0, 0x1a, 0x69, 0x24, 0xa1, 0xff, 0x08, 0x64, 0x79,
1279     0x73, 0x7a, 0x37, 0xb7, 0x24, 0x4b, 0xa8, 0x9c, 0x2c, 0x8f, 0x20,
1280     0xd9, 0x1e, 0x59, 0x72, 0xd8, 0xb2, 0x1a, 0x38, 0x54, 0x4e, 0x17,
1281     0xe5, 0x73, 0x20, 0x97, 0x87, 0x7a, 0xba, 0x78, 0x88, 0xca, 0x16,
1282     0x53, 0xc7, 0x99, 0x9a, 0xf3, 0xd6, 0x5f, 0xc2, 0x56, 0xc4, 0x84,
1283     0x65, 0x7f, 0xb2, 0xc1, 0x7c, 0xa1, 0x00, 0x37, 0x37, 0xd0, 0x71,
1284     0x1b, 0xe4, 0xa0, 0x00, 0x1c, 0xbf, 0x3c, 0xdc, 0x07, 0x56, 0x7e,
1285     0x70, 0xe3, 0x12, 0xfb, 0xf2, 0x02, 0xa1, 0x4c, 0x8c, 0x4e, 0x06,
1286     0x6e, 0x62, 0x36, 0x80, 0xa6, 0xda, 0x8c, 0x82, 0x24, 0xd4, 0x8e,
1287     0x1b, 0x68, 0x64, 0x97, 0x99, 0x47, 0x9a, 0xdb, 0x7a, 0x37, 0x55,
1288     0xe7, 0x04, 0x38, 0xbb, 0x62, 0xf3, 0x53, 0x8f, 0xf0, 0xf9, 0x5f,
1289     0xdd, 0x01, 0x4f, 0x16, 0x38, 0x4d, 0xef, 0xa9, 0x34, 0xa7, 0x01,
1290     0x60, 0x65, 0x44, 0xd0, 0x0c, 0xec, 0x94, 0x96, 0x8a, 0xd0, 0x60,
1291     0x82, 0x81, 0x43, 0x33, 0x0b, 0xd0, 0x8a, 0x26, 0x34, 0xd3, 0x84,
1292     0x56, 0x28, 0x42, 0x2b, 0x1a, 0x60, 0x86, 0x09, 0x8d, 0x73, 0x68,
1293     0x99, 0x9c, 0xd0, 0xf3, 0x05, 0x68, 0x86, 0x01, 0xdd, 0xe0, 0xd0,
1294     0x0a, 0x05, 0x68, 0xb9, 0x02, 0xb4, 0xa2, 0x01, 0xcd, 0x30, 0xc1,
1295     0x4c, 0x0e, 0x56, 0x28, 0x40, 0x1f, 0x1a, 0x15, 0xe1, 0x4c, 0x0e,
1296     0xa1, 0x6c, 0x0e, 0x7a, 0xae, 0x80, 0x90, 0x61, 0x42, 0x2b, 0x16,
1297     0x11, 0x32, 0x38, 0x34, 0xce, 0x41, 0x99, 0x1c, 0x34, 0x02, 0xc0,
1298     0x05, 0xa8, 0x50, 0x84, 0x66, 0x7f, 0x50, 0x0c, 0x43, 0x30, 0x2e,
1299     0x66, 0x84, 0x0e, 0x00, 0x00, 0x21, 0x9d, 0x4c, 0xb2, 0x00, 0x4b,
1300     0x08, 0x40, 0xd7, 0xc1, 0x43, 0x1a, 0xb8, 0x00, 0x28, 0xa4, 0x83,
1301     0x47, 0xc2, 0x30, 0x09, 0x40, 0x24, 0x8c, 0x3c, 0x63, 0x10, 0xb1,
1302     0x08, 0xf2, 0x21, 0x1d, 0x66, 0x32, 0x8e, 0x42, 0x5b, 0x0a, 0xc5,
1303     0x64, 0x82, 0x8a, 0x1a, 0x81, 0x6b, 0x1a, 0xb8, 0xae, 0xc3, 0x8c,
1304     0x84, 0x60, 0xc6, 0x22, 0x30, 0x35, 0x0d, 0xa6, 0xae, 0xc1, 0x08,
1305     0x87, 0x60, 0xc6, 0xa2, 0x64, 0x84, 0x42, 0x30, 0x35, 0x02, 0x0f,
1306     0xe9, 0x30, 0x23, 0x61, 0x98, 0x1a, 0x2b, 0xe5, 0x09, 0x87, 0x61,
1307     0x42, 0x07, 0x07, 0x83, 0x09, 0x1d, 0x26, 0x58, 0xb9, 0xb0, 0x89,
1308     0x19, 0xa8, 0x2b, 0x15, 0x47, 0xb3, 0x0c, 0x4b, 0x6b, 0x0e, 0x2b,
1309     0x36, 0x85, 0x2f, 0xe4, 0xb8, 0x43, 0x21, 0x97, 0x55, 0x45, 0x70,
1310     0x80, 0x90, 0x90, 0x54, 0x5c, 0x6e, 0x80, 0xe2, 0x0e, 0xeb, 0xb9,
1311     0x07, 0xf0, 0x64, 0xf7, 0xc9, 0x2c, 0xff, 0x23, 0xd9, 0x62, 0xa3,
1312     0xf6, 0x89, 0xe0, 0x5f, 0x1b, 0x2d, 0xad, 0xda, 0xf4, 0x06, 0x83,
1313     0xcc, 0xad, 0x86, 0xce, 0x4b, 0xd5, 0x30, 0x05, 0x30, 0xd9, 0xe7,
1314     0xfd, 0x96, 0xc9, 0x63, 0x9f, 0x4c, 0x42, 0xb9, 0x31, 0x45, 0xc5,
1315     0xe7, 0xfe, 0xbf, 0x52, 0x05, 0x39, 0xd3, 0xbf, 0xd5, 0x67, 0x59,
1316     0xd2, 0x24, 0x26, 0x34, 0x70, 0x30, 0x70, 0x30, 0x18, 0xd0, 0x72,
1317     0x39, 0x84, 0x0a, 0x05, 0xe8, 0xd9, 0x02, 0x42, 0x85, 0x02, 0x42,
1318     0x27, 0x07, 0x45, 0x6c, 0x60, 0x14, 0xc9, 0xf1, 0x34, 0x62, 0x63,
1319     0x69, 0x11, 0xc9, 0xe5, 0x11, 0x1e, 0x4f, 0x23, 0x9c, 0xce, 0x22,
1320     0x92, 0xc9, 0x22, 0x7c, 0xfc, 0x94, 0x88, 0x0f, 0x8e, 0x21, 0x91,
1321     0xc9, 0x22, 0x9a, 0xc9, 0x41, 0x2f, 0x14, 0xa1, 0x1b, 0x86, 0xd0,
1322     0x72, 0x05, 0x68, 0x65, 0x80, 0x69, 0x06, 0x87, 0x66, 0x18, 0x20,
1323     0x93, 0x83, 0x38, 0xaf, 0x86, 0xcd, 0xec, 0x58, 0x73, 0x6b, 0xf1,
1324     0x89, 0x20, 0x34, 0x06, 0xa1, 0x6b, 0x65, 0xe0, 0x95, 0x01, 0x16,
1325     0x0b, 0xc3, 0xd4, 0x75, 0x98, 0x21, 0x9d, 0xcc, 0x58, 0x14, 0x46,
1326     0x3c, 0x86, 0x7c, 0x5b, 0x12, 0x93, 0xf3, 0xe7, 0x51, 0xb6, 0xb5,
1327     0x05, 0xb9, 0x78, 0x04, 0x85, 0xd6, 0x24, 0x0a, 0xb1, 0x18, 0x0a,
1328     0xa9, 0x38, 0xf2, 0x6d, 0x29, 0xca, 0xb5, 0x26, 0x31, 0x79, 0x4e,
1329     0x37, 0x26, 0x13, 0x71, 0xca, 0x47, 0x42, 0x30, 0x23, 0x11, 0x14,
1330     0xa3, 0x61, 0x14, 0xb5, 0x30, 0x8c, 0xd2, 0xab, 0xa3, 0xfc, 0x0a,
1331     0x61, 0xe0, 0x15, 0xb4, 0xcd, 0x2c, 0xf2, 0xc2, 0x52, 0xf4, 0xed,
1332     0xf0, 0x53, 0x71, 0x1b, 0xfd, 0x54, 0x96, 0x53, 0x7e, 0xd3, 0x05,
1333     0x44, 0x32, 0x40, 0xe3, 0x35, 0x6c, 0x23, 0x3c, 0x7e, 0x9d, 0x20,
1334     0x4d, 0x0e, 0x80, 0x23, 0xc8, 0x7f, 0xb6, 0x55, 0x13, 0xd0, 0x64,
1335     0xaa, 0xfd, 0xdd, 0x9a, 0x4f, 0xc8, 0x42, 0x8c, 0xf9, 0xa4, 0xb9,
1336     0x4d, 0x24, 0xb1, 0xad, 0x0c, 0xf8, 0x54, 0x80, 0xc6, 0x2c, 0x6a,
1337     0x8a, 0xcd, 0x98, 0xd3, 0x20, 0xa0, 0xcd, 0xd0, 0x5a, 0x84, 0x02,
1338     0x74, 0xe4, 0x11, 0xce, 0xe4, 0x10, 0xce, 0xe4, 0x10, 0xca, 0x64,
1339     0x11, 0x19, 0x4d, 0x8b, 0x68, 0x09, 0x4a, 0x88, 0xf4, 0x0f, 0x89,
1340     0xc4, 0xde, 0x23, 0x68, 0x1f, 0x1c, 0x46, 0xcb, 0x58, 0x5a, 0x44,
1341     0xc6, 0xd3, 0x88, 0x8e, 0xa6, 0x11, 0xc9, 0x64, 0x11, 0x99, 0xcc,
1342     0x22, 0x94, 0xcb, 0x8b, 0xd0, 0x64, 0x16, 0xa1, 0x7c, 0x11, 0x7a,
1343     0x36, 0x07, 0x1d, 0x67, 0xdf, 0x18, 0x00, 0x8d, 0xc7, 0xa5, 0x00,
1344     0x19, 0x26, 0xc8, 0x30, 0xdd, 0x80, 0x2d, 0x94, 0x00, 0x1b, 0xd2,
1345     0x61, 0x46, 0x23, 0x30, 0xe2, 0x51, 0x14, 0x63, 0x51, 0x14, 0xe3,
1346     0x11, 0x2a, 0x26, 0xe2, 0x28, 0x24, 0x63, 0xc8, 0xb7, 0xb5, 0x20,
1347     0x9f, 0x8a, 0x23, 0xd7, 0xd9, 0x46, 0x99, 0x85, 0x3d, 0x18, 0x59,
1348     0xbe, 0x90, 0xc6, 0x5a, 0x92, 0xc8, 0xb5, 0x24, 0x91, 0x6b, 0x4d,
1349     0x52, 0x2e, 0x19, 0x47, 0x3e, 0x11, 0x43, 0x21, 0x16, 0x41, 0x21,
1350     0x14, 0x45, 0x11, 0x11, 0x14, 0x2a, 0xf0, 0x43, 0x19, 0x39, 0x46,
1351     0xd9, 0x75, 0xe6, 0x16, 0x87, 0x58, 0xf8, 0xaa, 0x2d, 0x2f, 0xc0,
1352     0x08, 0x0f, 0x28, 0xb9, 0x81, 0xc8, 0x94, 0x48, 0xf3, 0x9a, 0xdc,
1353     0x8e, 0x61, 0xdd, 0x0f, 0xb3, 0xe4, 0x23, 0x17, 0x77, 0xdd, 0xab,
1354     0xe6, 0xdb, 0xd5, 0x15, 0xa5, 0xca, 0xa8, 0x4f, 0xde, 0x83, 0xa4,
1355     0xf8, 0xa9, 0x32, 0x7b, 0xf3, 0x09, 0x37, 0x77, 0x4d, 0x15, 0x54,
1356     0xf6, 0x49, 0xab, 0x63, 0x5b, 0x52, 0x4c, 0x9b, 0x5e, 0x37, 0x05,
1357     0x25, 0xcd, 0x72, 0x06, 0x5a, 0x19, 0x56, 0x26, 0x74, 0x18, 0xd0,
1358     0x50, 0x40, 0x28, 0x9d, 0x41, 0x38, 0x9d, 0x43, 0xe4, 0xe4, 0x80,
1359     0x48, 0xee, 0x3b, 0x82, 0xce, 0xfe, 0x21, 0x91, 0x1c, 0x1c, 0x45,
1360     0x62, 0x70, 0x04, 0xc9, 0x5d, 0x87, 0x44, 0xfb, 0x89, 0x53, 0x68,
1361     0x9b, 0xc8, 0x88, 0x48, 0x7a, 0x12, 0xe1, 0xc9, 0x2c, 0x22, 0xb9,
1362     0x02, 0x34, 0x21, 0x02, 0x30, 0x9d, 0xed, 0x16, 0xd2, 0x61, 0xc6,
1363     0xa2, 0x28, 0xb6, 0x24, 0x90, 0x4f, 0xc4, 0xa9, 0xd0, 0xd1, 0x82,
1364     0xc9, 0x95, 0x4b, 0x30, 0x34, 0xbf, 0x9b, 0x26, 0x7a, 0xda, 0x30,
1365     0xd9, 0xd5, 0x89, 0xc9, 0x45, 0xbd, 0x34, 0xbc, 0xfc, 0x1c, 0x1a,
1366     0x4b, 0xc6, 0x91, 0x4f, 0xc6, 0x91, 0x0b, 0x45, 0x51, 0x84, 0x0e,
1367     0x03, 0x7a, 0x19, 0x73, 0x1c, 0x02, 0x66, 0x19, 0x01, 0x46, 0xa5,
1368     0xe8, 0xbb, 0xc1, 0x4c, 0x46, 0x71, 0xc9, 0xac, 0xe3, 0x15, 0x67,
1369     0x7b, 0x26, 0xdc, 0xb8, 0xe4, 0x64, 0x4a, 0x9c, 0x8f, 0x9b, 0xf2,
1370     0x74, 0x8b, 0xb7, 0x79, 0xbe, 0x85, 0x64, 0x80, 0x26, 0xf3, 0x01,
1371     0x37, 0xb9, 0x00, 0xcc, 0x0e, 0x07, 0xcd, 0x07, 0x52, 0x9a, 0x0f,
1372     0xc0, 0x54, 0xf2, 0xaa, 0xc1, 0x6e, 0x4a, 0x65, 0x31, 0x10, 0x74,
1373     0x00, 0x7a, 0x25, 0x2c, 0xcd, 0x60, 0x40, 0x47, 0x01, 0xa1, 0x53,
1374     0x83, 0x48, 0xf5, 0x0f, 0x89, 0xd4, 0xa9, 0x51, 0x24, 0x0f, 0x1f,
1375     0x13, 0xad, 0xaf, 0xec, 0x41, 0xef, 0xf1, 0x01, 0xd1, 0xda, 0x3f,
1376     0x8c, 0xc4, 0xd0, 0x28, 0x12, 0x63, 0x13, 0x22, 0x3a, 0x96, 0x46,
1377     0x64, 0x7c, 0x02, 0x51, 0x11, 0x28, 0xa8, 0xc0, 0x14, 0x2d, 0x16,
1378     0x45, 0xb1, 0xb5, 0xac, 0xe8, 0xda, 0x5b, 0x91, 0xed, 0xe9, 0x40,
1379     0xba, 0xab, 0x83, 0x26, 0x57, 0x2f, 0x45, 0xff, 0x9a, 0xe5, 0x34,
1380     0xd4, 0xdd, 0x8e, 0x74, 0x57, 0x3b, 0xa5, 0x17, 0x74, 0x63, 0x3c,
1381     0x92, 0x44, 0x0e, 0x3a, 0x0c, 0x30, 0x98, 0x65, 0x55, 0x27, 0x60,
1382     0x80, 0xca, 0x08, 0x71, 0x72, 0x7a, 0xeb, 0x81, 0x96, 0xe9, 0x91,
1383     0x5f, 0x65, 0x9d, 0x69, 0x3b, 0x27, 0x53, 0xc2, 0x3d, 0xf5, 0xaa,
1384     0xa4, 0xa9, 0x82, 0x9a, 0x17, 0xd0, 0x54, 0x02, 0xfd, 0x5e, 0x71,
1385     0x2a, 0x3f, 0x20, 0x59, 0x7f, 0x9d, 0xe6, 0xdd, 0x96, 0xfd, 0x00,
1386     0xe7, 0x9c, 0x46, 0x60, 0x65, 0x68, 0x09, 0x68, 0xe5, 0x38, 0x16,
1387     0x81, 0x50, 0x40, 0xb8, 0x50, 0x72, 0xf3, 0xe2, 0x07, 0x8f, 0x89,
1388     0xb6, 0x3f, 0xec, 0x17, 0xbd, 0x47, 0x4e, 0xa2, 0xf5, 0xd8, 0x29,
1389     0xb4, 0x1e, 0xeb, 0x17, 0xa9, 0x13, 0x03, 0x48, 0x1d, 0x38, 0x26,
1390     0xda, 0x47, 0x26, 0x10, 0x17, 0x3c, 0x80, 0x55, 0x60, 0xa7, 0xc7,
1391     0xa2, 0x61, 0x14, 0x17, 0xf6, 0xd2, 0xd8, 0x92, 0x05, 0x18, 0x9b,
1392     0xdf, 0x85, 0xf1, 0x73, 0xba, 0x69, 0x7c, 0x51, 0x0f, 0xc6, 0x96,
1393     0x2d, 0xa4, 0xc1, 0xf5, 0x7d, 0x34, 0xd0, 0xd9, 0x86, 0xc9, 0x64,
1394     0x12, 0x59, 0xc4, 0x90, 0x07, 0x81, 0x97, 0x95, 0x9d, 0x80, 0x09,
1395     0x82, 0x31, 0x03, 0x74, 0x66, 0x1d, 0xf0, 0xaa, 0xe7, 0xd7, 0x4f,
1396     0xe1, 0x09, 0x97, 0xca, 0x0f, 0x3f, 0xb0, 0x89, 0x5a, 0x81, 0xe6,
1397     0x57, 0x3b, 0xe9, 0xa5, 0x9e, 0x34, 0x0f, 0x70, 0xe9, 0x0e, 0xeb,
1398     0x75, 0x1f, 0x80, 0x79, 0x83, 0x8e, 0x55, 0xdc, 0x44, 0x2a, 0xbb,
1399     0x88, 0x0c, 0x45, 0x84, 0x26, 0xc7, 0x10, 0x3f, 0x78, 0x4c, 0x74,
1400     0x1e, 0x3d, 0x85, 0xd6, 0x43, 0xc7, 0x45, 0xdb, 0xc1, 0xe3, 0xe8,
1401     0x78, 0xf9, 0x35, 0xd1, 0xbb, 0xf7, 0x30, 0xe6, 0x0d, 0x8e, 0x8a,
1402     0xf8, 0xc8, 0x18, 0xe2, 0x41, 0xd1, 0x09, 0xec, 0xf5, 0x66, 0xf1,
1403     0x28, 0x0a, 0xf3, 0xda, 0x91, 0x99, 0xdf, 0x45, 0x63, 0x17, 0xaf,
1404     0xc5, 0x89, 0xbe, 0xc5, 0x34, 0xb4, 0x74, 0x3e, 0x8d, 0x2e, 0xea,
1405     0xc5, 0xc8, 0xe2, 0xf9, 0x34, 0xda, 0xdb, 0x83, 0x31, 0x84, 0x51,
1406     0x80, 0x06, 0xa3, 0x1c, 0xb3, 0x03, 0xcc, 0xb2, 0xba, 0x13, 0x8e,
1407     0x10, 0x73, 0x52, 0x5a, 0xa6, 0x0b, 0xa0, 0x0c, 0x5b, 0x9a, 0xe9,
1408     0x92, 0xd7, 0x94, 0x50, 0x70, 0x6e, 0x8a, 0x0d, 0xf0, 0x6e, 0xb8,
1409     0x2b, 0xdc, 0x80, 0x26, 0x0b, 0x33, 0xe6, 0x01, 0x33, 0x27, 0x88,
1410     0x59, 0x27, 0xdd, 0x65, 0x99, 0xd9, 0xd2, 0xbc, 0xf6, 0x31, 0x7d,
1411     0x1c, 0x02, 0x83, 0x06, 0x42, 0xa8, 0xbc, 0x15, 0x87, 0x66, 0x8c,
1412     0x23, 0x3e, 0x38, 0x82, 0xd4, 0x91, 0x53, 0xa2, 0x75, 0xef, 0x61,
1413     0x74, 0xfe, 0xf6, 0x25, 0xb1, 0x64, 0xf7, 0x61, 0xd1, 0xb5, 0xe7,
1414     0xa0, 0xe8, 0x3c, 0x72, 0x12, 0xed, 0x3c, 0x50, 0x5a, 0x81, 0xcd,
1415     0x11, 0x6b, 0x6f, 0x41, 0x66, 0xcd, 0x32, 0x1a, 0x58, 0xb6, 0x10,
1416     0x23, 0x17, 0xaf, 0xa5, 0xa3, 0x17, 0xae, 0xa5, 0x13, 0x4b, 0xe6,
1417     0xd3, 0x68, 0x6f, 0x27, 0xc6, 0x93, 0x6d, 0x48, 0x23, 0x8c, 0x02,
1418     0x38, 0x80, 0x02, 0xc8, 0xe2, 0xc4, 0x72, 0x17, 0x20, 0xf1, 0x4a,
1419     0x35, 0x86, 0x33, 0xac, 0x0c, 0xc9, 0x34, 0xa7, 0x7d, 0x0b, 0x07,
1420     0xf7, 0xd7, 0x2b, 0xbe, 0x66, 0x85, 0x9a, 0x23, 0xd0, 0x54, 0x61,
1421     0xe6, 0xe4, 0xe6, 0xb9, 0xc1, 0x4b, 0xb7, 0xa5, 0x79, 0x2d, 0x3b,
1422     0x41, 0x6f, 0x5a, 0x6f, 0x4d, 0xc5, 0xba, 0x42, 0xe5, 0x38, 0x57,
1423     0x0e, 0xd1, 0xe1, 0x51, 0x24, 0x5f, 0xdd, 0x27, 0xba, 0xb7, 0xed,
1424     0x14, 0x8b, 0x5e, 0x7e, 0x55, 0xf4, 0x6e, 0xdb, 0x81, 0xc5, 0x27,
1425     0x06, 0x44, 0xcb, 0xd8, 0x04, 0xa2, 0xc1, 0x23, 0x1d, 0x58, 0x60,
1426     0x33, 0x2d, 0x1c, 0x86, 0xd1, 0xdb, 0x89, 0xf4, 0x9a, 0xe5, 0xd4,
1427     0x7f, 0xf9, 0x05, 0x74, 0xe4, 0xdc, 0x15, 0x74, 0xf2, 0xb2, 0x73,
1428     0xe9, 0xe8, 0xfc, 0x2e, 0x8c, 0x85, 0x12, 0xc8, 0x42, 0x47, 0x11,
1429     0x26, 0x84, 0x45, 0xc9, 0xb9, 0x29, 0x30, 0x27, 0x68, 0x19, 0x96,
1430     0x65, 0xb7, 0x5f, 0xfb, 0x76, 0x4e, 0x6e, 0xa9, 0xa9, 0xa0, 0xd6,
1431     0xe0, 0x05, 0x34, 0xa7, 0x56, 0xe8, 0x5e, 0x31, 0x32, 0x37, 0x10,
1432     0xe9, 0x36, 0xa0, 0x39, 0x4d, 0x1a, 0x50, 0xd1, 0x56, 0xce, 0x00,
1433     0x64, 0x60, 0x08, 0x97, 0x73, 0x15, 0x11, 0x1a, 0x1b, 0x42, 0xcb,
1434     0xc1, 0xe3, 0xa2, 0x73, 0xfb, 0x2e, 0xcc, 0xff, 0xb7, 0xad, 0x7c,
1435     0xc5, 0xab, 0x07, 0xd1, 0x7d, 0xe8, 0xb8, 0x68, 0x3b, 0x35, 0x84,
1436     0x54, 0xf0, 0xa8, 0x06, 0x16, 0x58, 0x6d, 0x96, 0x8c, 0xa3, 0x70,
1437     0x4e, 0x0f, 0x8d, 0xad, 0x58, 0x8c, 0xc1, 0xcb, 0xcf, 0xa7, 0x43,
1438     0x57, 0x5e, 0x42, 0x07, 0x57, 0x2c, 0xa4, 0xa1, 0x05, 0xdd, 0x18,
1439     0xa5, 0x24, 0x32, 0x30, 0x21, 0x50, 0x28, 0x03, 0x4e, 0x54, 0x41,
1440     0xc9, 0xb0, 0xcd, 0x3b, 0x2d, 0x1b, 0x2e, 0xeb, 0x9d, 0xe0, 0xe8,
1441     0x04, 0x35, 0xaf, 0xd8, 0x9a, 0x2f, 0xd0, 0x54, 0x5d, 0x4c, 0x2f,
1442     0x50, 0x59, 0xa7, 0x90, 0x6d, 0xbe, 0x3a, 0x1f, 0x41, 0x43, 0x08,
1443     0x84, 0x30, 0x04, 0x4c, 0x84, 0xb2, 0xe3, 0x25, 0xf5, 0xf5, 0xd4,
1444     0xf3, 0x62, 0xc5, 0x6f, 0x5e, 0x10, 0xcb, 0x5e, 0xd8, 0x29, 0x16,
1445     0x9e, 0x18, 0x40, 0x4b, 0xd0, 0xec, 0x21, 0xb0, 0xc0, 0x9a, 0x6b,
1446     0x2d, 0x49, 0xe4, 0x56, 0x2e, 0xa1, 0x81, 0xb7, 0x5d, 0x46, 0xfb,
1447     0xae, 0xb8, 0x88, 0x0e, 0x6d, 0xb8, 0x90, 0x0e, 0xce, 0xeb, 0xc4,
1448     0x38, 0xa2, 0xc8, 0x96, 0x01, 0x47, 0x30, 0x7d, 0xc1, 0x55, 0xf4,
1449     0x59, 0x76, 0x02, 0xa0, 0x5b, 0x25, 0x85, 0x6b, 0x4d, 0xa8, 0x0a,
1450     0xd0, 0xbc, 0x5c, 0x4c, 0x27, 0x05, 0x16, 0xb2, 0xfc, 0x7a, 0xcd,
1451     0x4f, 0x2f, 0x97, 0x54, 0x18, 0x21, 0x04, 0x42, 0x1e, 0xd1, 0x3d,
1452     0xfb, 0x45, 0xef, 0xd3, 0xcf, 0xa1, 0xef, 0xa7, 0xbf, 0xe6, 0x6b,
1453     0x77, 0xec, 0x45, 0xef, 0x81, 0xa3, 0xa2, 0x23, 0x00, 0x58, 0x60,
1454     0x5e, 0xa6, 0x31, 0xc0, 0xe4, 0xcd, 0x3d, 0x06, 0x51, 0xe9, 0x33,
1455     0xad, 0xb9, 0x6a, 0x5d, 0xed, 0x48, 0xaf, 0x5a, 0x4a, 0x83, 0x57,
1456     0xbe, 0x81, 0xf6, 0xff, 0xc9, 0x9b, 0xe9, 0xb5, 0x4b, 0xd6, 0xd1,
1457     0x91, 0x68, 0x07, 0xc6, 0x21, 0x60, 0x22, 0x0f, 0xc0, 0xa8, 0x54,
1458     0x12, 0x58, 0xc1, 0x55, 0xb0, 0xcc, 0x5b, 0x7f, 0xed, 0xf3, 0x76,
1459     0xb5, 0x67, 0x3a, 0xb8, 0xa1, 0x6e, 0x1f, 0xde, 0x57, 0x01, 0x4d,
1460     0x36, 0x66, 0xe6, 0x14, 0xbc, 0xd7, 0x5d, 0x60, 0x65, 0x9f, 0xc2,
1461     0x33, 0x96, 0x19, 0x74, 0x44, 0x40, 0xd0, 0x41, 0xc5, 0x71, 0xa4,
1462     0x5e, 0xd8, 0x21, 0x96, 0xfc, 0xe4, 0x19, 0xb1, 0xee, 0x77, 0x2f,
1463     0x8b, 0xa5, 0xcf, 0x6d, 0x17, 0x8b, 0xb3, 0x79, 0x84, 0x82, 0x62,
1464     0x1a, 0x98, 0xac, 0xad, 0x5c, 0x4c, 0xf8, 0xf2, 0xdd, 0x0c, 0xcc,
1465     0xda, 0x73, 0x3e, 0xa6, 0x03, 0x26, 0x79, 0x03, 0xf8, 0xe4, 0x46,
1466     0x8e, 0x83, 0xc7, 0x9d, 0x89, 0xc4, 0x08, 0x78, 0xe8, 0x6e, 0x0d,
1467     0xcb, 0x96, 0x95, 0x8b, 0xd7, 0x0c, 0x92, 0x01, 0xa1, 0x30, 0x70,
1468     0xf3, 0xbd, 0x1c, 0x3b, 0xf7, 0x06, 0x83, 0x96, 0x4f, 0xd9, 0xaa,
1469     0xa5, 0x34, 0xb0, 0xe1, 0x22, 0x3a, 0xf0, 0xd6, 0xcb, 0x68, 0xef,
1470     0x3b, 0xdf, 0x44, 0xaf, 0x75, 0xf6, 0x62, 0x08, 0x0c, 0x05, 0xe4,
1471     0x40, 0x96, 0xfa, 0xd4, 0x82, 0x05, 0x5a, 0xd6, 0xf9, 0xa9, 0x65,
1472     0xc3, 0xf2, 0x6b, 0x38, 0x40, 0xcd, 0x80, 0x7b, 0x33, 0x8f, 0xca,
1473     0x24, 0x0b, 0x34, 0xb7, 0x78, 0x99, 0x55, 0x99, 0xb9, 0x81, 0x2b,
1474     0xec, 0x38, 0x1f, 0x02, 0x43, 0x04, 0x84, 0x0c, 0x92, 0x5b, 0xb7,
1475     0x8b, 0x65, 0x4f, 0x3c, 0x2b, 0xd6, 0x3c, 0xfe, 0xa4, 0xb8, 0x60,
1476     0xe7, 0x1e, 0x31, 0x3f, 0x78, 0x44, 0x02, 0xab, 0x47, 0x3d, 0x3d,
1477     0x74, 0xb7, 0x86, 0x8f, 0x7d, 0x92, 0x80, 0x31, 0x87, 0x0c, 0x09,
1478     0xe0, 0x5f, 0xbf, 0x2b, 0x70, 0xfd, 0xdf, 0x9a, 0x8e, 0xdb, 0xbf,
1479     0xf7, 0x2a, 0xc2, 0x0f, 0xbf, 0xa9, 0x4d, 0xeb, 0x01, 0xab, 0xa5,
1480     0x80, 0x1f, 0x7d, 0x5f, 0xe0, 0xba, 0xbf, 0x31, 0x51, 0x28, 0x06,
1481     0xd7, 0xda, 0xc9, 0xba, 0x3b, 0x90, 0x7e, 0xfb, 0x9b, 0xd8, 0xab,
1482     0x7f, 0x7a, 0x15, 0xed, 0xbc, 0xea, 0x52, 0xda, 0x3d, 0xef, 0x1c,
1483     0x0c, 0xa0, 0x08, 0x8e, 0x3c, 0x04, 0x44, 0x05, 0x5e, 0x05, 0x0b,
1484     0xc8, 0x0a, 0x2e, 0x90, 0x2b, 0xba, 0xc4, 0xd9, 0x3c, 0xdd, 0x4f,
1485     0x19, 0xa0, 0x4d, 0xc5, 0xcc, 0x9c, 0x9a, 0x61, 0xd8, 0x5d, 0xcc,
1486     0xb0, 0xcb, 0x14, 0x01, 0xca, 0x11, 0xb1, 0x08, 0x18, 0x34, 0x68,
1487     0x47, 0x0f, 0x63, 0xfe, 0x4f, 0x9e, 0xe6, 0xe7, 0x7f, 0xe7, 0xc7,
1488     0xe2, 0x8d, 0x5b, 0x5f, 0x16, 0xcb, 0x82, 0x47, 0x21, 0xb0, 0x46,
1489     0x59, 0x6b, 0x12, 0xd8, 0xf6, 0x7d, 0x0d, 0xab, 0x56, 0x11, 0x90,
1490     0xab, 0x56, 0x69, 0x82, 0x01, 0x1b, 0x6e, 0x30, 0xb1, 0x75, 0xfb,
1491     0x4c, 0x95, 0x95, 0x88, 0x03, 0x2f, 0x7e, 0x5f, 0xc3, 0xea, 0x35,
1492     0x0e, 0xdb, 0x45, 0x80, 0x63, 0x47, 0x81, 0xf3, 0xde, 0x67, 0x60,
1493     0x64, 0x3c, 0xb8, 0xc6, 0x32, 0xb6, 0xa0, 0x1b, 0xa3, 0xd7, 0x5c,
1494     0xcd, 0xb6, 0x7f, 0xe8, 0x3d, 0xb4, 0xed, 0xd2, 0x73, 0xe9, 0x00,
1495     0x62, 0x48, 0x23, 0x03, 0x02, 0x9f, 0x01, 0xb3, 0x7c, 0x19, 0x5e,
1496     0x79, 0x17, 0xb8, 0x39, 0xa9, 0x35, 0x57, 0xa8, 0x79, 0x01, 0xcd,
1497     0xad, 0x46, 0x53, 0x77, 0x71, 0x33, 0xad, 0x4a, 0x2c, 0x62, 0x99,
1498     0xc2, 0x20, 0x84, 0x11, 0x05, 0x03, 0x10, 0xfe, 0xfd, 0x0e, 0xb1,
1499     0xfc, 0x5f, 0x1e, 0x11, 0x57, 0x3d, 0xfe, 0xff, 0xf8, 0x1b, 0xc6,
1500     0x26, 0x82, 0x06, 0xac, 0x81, 0x35, 0xc7, 0x36, 0x5c, 0x48, 0xf8,
1501     0xcd, 0xf7, 0x34, 0x90, 0x93, 0xd2, 0x8a, 0x03, 0xcf, 0x6f, 0x13,
1502     0xd8, 0xf0, 0x21, 0x13, 0x45, 0x63, 0x3a, 0xf9, 0xb6, 0x0f, 0x32,
1503     0x7c, 0xe9, 0x7e, 0x06, 0x8c, 0x57, 0x43, 0x10, 0x61, 0xe0, 0xbd,
1504     0x1f, 0x37, 0xf1, 0xa3, 0xa7, 0x03, 0x57, 0xb3, 0x16, 0x7b, 0xf3,
1505     0x1b, 0x68, 0xf7, 0x2d, 0x7f, 0xc1, 0x7e, 0xf5, 0x67, 0x6f, 0xa5,
1506     0x97, 0xc2, 0x29, 0x8c, 0x21, 0x0b, 0xc0, 0x84, 0x61, 0x01, 0x59,
1507     0xde, 0x32, 0x5f, 0x70, 0x50, 0x6a, 0x45, 0x97, 0x78, 0x1a, 0x77,
1508     0x53, 0x68, 0xf6, 0xf6, 0x67, 0x4e, 0xdf, 0x60, 0x3a, 0xc5, 0xcc,
1509     0x42, 0x0e, 0xea, 0x2c, 0x5a, 0x01, 0x5a, 0x04, 0x0c, 0x84, 0xf0,
1510     0x73, 0x2f, 0x8a, 0xb5, 0xff, 0xf8, 0x75, 0xfe, 0x27, 0x3f, 0xff,
1511     0xb5, 0x38, 0x2f, 0x5f, 0x9c, 0x5b, 0x71, 0xb1, 0x68, 0x34, 0x0a,
1512     0xc6, 0x18, 0x4c, 0xd3, 0x44, 0x3e, 0x9f, 0x97, 0xce, 0x2f, 0x84,
1513     0x40, 0x36, 0x9b, 0x6d, 0xca, 0x39, 0xc5, 0xe3, 0x71, 0x44, 0xa3,
1514     0x51, 0x14, 0x8b, 0x45, 0x18, 0x86, 0x01, 0xd3, 0x2c, 0xb9, 0x60,
1515     0x9a, 0x56, 0xea, 0xce, 0x4c, 0xd7, 0x75, 0x70, 0xce, 0x31, 0x39,
1516     0x39, 0xd9, 0x90, 0xe3, 0xa5, 0x52, 0x29, 0x68, 0x9a, 0x36, 0xe3,
1517     0x58, 0xa6, 0x69, 0x82, 0x73, 0x0e, 0x4d, 0xd3, 0xc0, 0x18, 0xab,
1518     0x1c, 0x57, 0xd7, 0x75, 0x64, 0x32, 0x19, 0xa9, 0x6b, 0xe5, 0x65,
1519     0x5f, 0xbc, 0x83, 0xe1, 0xce, 0x5b, 0x19, 0x30, 0xe1, 0xb0, 0x32,
1520     0x09, 0xdc, 0x74, 0x3b, 0xc7, 0xb7, 0x7e, 0x54, 0xa2, 0xdd, 0xc2,
1521     0x1e, 0xe0, 0xc5, 0xc7, 0x75, 0x74, 0x77, 0x39, 0xc4, 0xce, 0x5a,
1522     0x80, 0x6f, 0x7c, 0x8b, 0xe3, 0xa3, 0xf7, 0xf0, 0x80, 0x4c, 0x75,
1523     0xda, 0xb9, 0x2b, 0xe9, 0xd8, 0x2d, 0x37, 0xb2, 0x7f, 0xfb, 0x8b,
1524     0xf7, 0xd0, 0x6f, 0x13, 0xed, 0x18, 0xc6, 0x24, 0x50, 0x6e, 0x08,
1525     0x92, 0x47, 0x49, 0x17, 0xdb, 0x95, 0x9b, 0x75, 0x32, 0x3d, 0x94,
1526     0x9a, 0x2b, 0xd0, 0xbc, 0x2a, 0x02, 0xa6, 0x26, 0x7b, 0xf0, 0x3f,
1527     0x5c, 0x51, 0x63, 0xa5, 0xdf, 0x28, 0x08, 0x11, 0x24, 0xc1, 0xf7,
1528     0xef, 0xc1, 0xd2, 0xbb, 0x37, 0xf3, 0x0f, 0x3c, 0xfa, 0x33, 0xfe,
1529     0x9f, 0xe6, 0x6a, 0x0d, 0xe5, 0x6d, 0xb7, 0xdd, 0x86, 0xdb, 0x6f,
1530     0xbf, 0x1d, 0xe9, 0x74, 0x1a, 0xd7, 0x5f, 0x7f, 0x3d, 0x76, 0xec,
1531     0xd8, 0xe1, 0x99, 0xff, 0xa6, 0x9b, 0x6e, 0xc2, 0x17, 0xbe, 0xf0,
1532     0x05, 0xfc, 0xe0, 0x07, 0x3f, 0xc0, 0x1d, 0x77, 0xdc, 0xd1, 0x94,
1533     0x73, 0xfa, 0xf8, 0xc7, 0x3f, 0x8e, 0x8d, 0x1b, 0x37, 0xa2, 0x50,
1534     0x28, 0xc0, 0x34, 0x4d, 0x68, 0x9a, 0x56, 0x01, 0x8b, 0x69, 0x9a,
1535     0x60, 0x8c, 0x61, 0xcb, 0x96, 0x2d, 0xb8, 0xf9, 0xe6, 0x9b, 0x1b,
1536     0x72, 0xbc, 0x07, 0x1f, 0x7c, 0x10, 0xd7, 0x5e, 0x7b, 0x2d, 0x84,
1537     0x10, 0xe0, 0x9c, 0x83, 0x73, 0x8e, 0x6c, 0x36, 0x0b, 0xd3, 0x34,
1538     0xa1, 0xeb, 0x3a, 0xe2, 0xf1, 0x92, 0x58, 0x67, 0x8c, 0x81, 0x88,
1539     0x70, 0xfd, 0xf5, 0xd7, 0xe3, 0xa9, 0xa7, 0x9e, 0xaa, 0xeb, 0x98,
1540     0xe1, 0x10, 0xf0, 0xfc, 0xf7, 0x35, 0x9c, 0x7f, 0x01, 0x01, 0x19,
1541     0xfb, 0x4a, 0xe0, 0xe4, 0x49, 0xe0, 0x82, 0x6b, 0x0c, 0x9c, 0x1a,
1542     0x06, 0x1e, 0xbc, 0x4b, 0xc3, 0x27, 0x3e, 0x4a, 0xd5, 0xea, 0x2c,
1543     0x0a, 0xec, 0xde, 0x0d, 0xbc, 0xf1, 0x06, 0x03, 0x63, 0x13, 0x01,
1544     0x90, 0x1a, 0x65, 0x6b, 0x97, 0xd3, 0xd1, 0xfb, 0xff, 0x9a, 0x3d,
1545     0xf6, 0xbe, 0x77, 0xd0, 0xef, 0xc0, 0x51, 0x44, 0x1e, 0x26, 0x08,
1546     0x39, 0x8b, 0x52, 0xcb, 0x7b, 0xb8, 0x9f, 0xf6, 0x2f, 0x0b, 0x2a,
1547     0x50, 0x93, 0xed, 0xd8, 0x4f, 0xa6, 0x82, 0x60, 0x5a, 0xb9, 0xe9,
1548     0x60, 0x88, 0xc3, 0xfc, 0xf2, 0x37, 0xf8, 0xbb, 0x2f, 0xbb, 0xce,
1549     0xfc, 0xfb, 0x47, 0x7e, 0xca, 0x37, 0xcc, 0xe5, 0xe6, 0x16, 0xd1,
1550     0x68, 0x14, 0x4b, 0x96, 0x2c, 0xc1, 0xfa, 0xf5, 0xeb, 0xf1, 0xc3,
1551     0x1f, 0xfe, 0x10, 0x8b, 0x16, 0x2d, 0xf2, 0xcc, 0x6f, 0x9a, 0x26,
1552     0x96, 0x2c, 0x59, 0x82, 0x48, 0x24, 0xd2, 0xb4, 0x73, 0xca, 0xe5,
1553     0x72, 0xe8, 0xe9, 0xe9, 0xc1, 0xa2, 0x45, 0x8b, 0xb0, 0x74, 0xe9,
1554     0x52, 0x68, 0x9a, 0x86, 0xf1, 0xf1, 0x71, 0xe4, 0xf3, 0x79, 0xc4,
1555     0xe3, 0x71, 0xf4, 0xf6, 0xf6, 0xa2, 0xb3, 0xb3, 0xb3, 0x61, 0xc7,
1556     0x6b, 0x6b, 0x6b, 0x43, 0x2a, 0x95, 0x42, 0x3e, 0x9f, 0xc7, 0xc8,
1557     0xc8, 0x08, 0x88, 0x08, 0x7d, 0x7d, 0x7d, 0x58, 0xb5, 0x6a, 0x15,
1558     0x96, 0x2f, 0x5f, 0x8e, 0x89, 0x89, 0x09, 0x8c, 0x8f, 0x8f, 0xc3,
1559     0x34, 0x4d, 0xcc, 0x9b, 0x37, 0x0f, 0xd1, 0x68, 0xfd, 0x1f, 0x77,
1560     0x14, 0x8a, 0xc0, 0x27, 0x36, 0x72, 0x14, 0x26, 0xcb, 0x4f, 0xe7,
1561     0x8c, 0x95, 0x40, 0xef, 0x32, 0xe0, 0x96, 0x1b, 0x18, 0x56, 0x2d,
1562     0x25, 0xdc, 0xf4, 0x7e, 0x02, 0x26, 0x1d, 0x5c, 0x4d, 0x0e, 0xdc,
1563     0x72, 0xbf, 0x19, 0xc0, 0xac, 0xc1, 0xf6, 0xea, 0x7e, 0xb1, 0xf0,
1564     0x9a, 0x4f, 0x99, 0x77, 0x7c, 0xe0, 0x53, 0xe6, 0xed, 0x03, 0xc3,
1565     0x68, 0x47, 0x12, 0x26, 0xaa, 0x1b, 0xd7, 0xdb, 0xbf, 0xdf, 0x76,
1566     0xea, 0x93, 0xd0, 0xca, 0x28, 0xcf, 0x9e, 0x4a, 0x65, 0xfa, 0xc2,
1567     0xaf, 0xfe, 0xd4, 0x29, 0x04, 0xe4, 0x0b, 0x08, 0xff, 0xe5, 0xa7,
1568     0xf9, 0xa7, 0x6e, 0xb9, 0x8f, 0xff, 0xd5, 0xe0, 0xa8, 0x68, 0x9d,
1569     0xeb, 0x37, 0xcf, 0xea, 0x36, 0xae, 0x58, 0xb1, 0x02, 0x5b, 0xb6,
1570     0x6c, 0x41, 0x5b, 0x5b, 0x9b, 0x6b, 0xfe, 0xb1, 0xb1, 0xb1, 0x19,
1571     0xbf, 0xcd, 0xb0, 0xe1, 0xe1, 0xe1, 0x2a, 0xc5, 0xb6, 0x76, 0xed,
1572     0x5a, 0xf4, 0xf5, 0xf5, 0x61, 0xf9, 0xf2, 0xe5, 0x58, 0xb1, 0x62,
1573     0x05, 0xee, 0xbc, 0xf3, 0xce, 0x86, 0x1d, 0xef, 0xb3, 0x9f, 0xfd,
1574     0x2c, 0x56, 0xac, 0x58, 0x81, 0xbe, 0xbe, 0x3e, 0xac, 0x5b, 0xb7,
1575     0x0e, 0x9f, 0xf9, 0xcc, 0x67, 0x66, 0xc0, 0xf5, 0x1d, 0xef, 0x78,
1576     0x07, 0x56, 0xaf, 0x5e, 0x8d, 0xbe, 0xbe, 0x3e, 0xac, 0x5c, 0xb9,
1577     0x12, 0x5b, 0xb7, 0x6e, 0x6d, 0xc8, 0x71, 0xb7, 0xfe, 0x5e, 0xe0,
1578     0x8b, 0x5f, 0xe3, 0x40, 0xd2, 0x61, 0x65, 0x1a, 0xb8, 0xf5, 0x46,
1579     0x86, 0x1f, 0xfc, 0x93, 0x86, 0x48, 0xb4, 0xfc, 0xbe, 0xb7, 0xb9,
1580     0xa5, 0xff, 0xfd, 0xeb, 0x1c, 0x4f, 0x6e, 0x0d, 0xe2, 0x66, 0xcd,
1581     0xb2, 0xc7, 0x7e, 0x21, 0x36, 0xbc, 0xe5, 0x83, 0xc6, 0xbd, 0xcf,
1582     0x3d, 0x2f, 0xd6, 0x21, 0x85, 0x02, 0xaa, 0x3f, 0x81, 0x74, 0xeb,
1583     0x65, 0xda, 0xb1, 0x8f, 0x46, 0xd5, 0xae, 0x97, 0xbd, 0x7b, 0xd9,
1584     0xd0, 0x40, 0x06, 0x87, 0xf6, 0xc1, 0x3b, 0xcd, 0x3b, 0xbe, 0xb9,
1585     0x85, 0x5f, 0x1d, 0xdc, 0xae, 0x92, 0xd9, 0x63, 0x41, 0x17, 0x5f,
1586     0x7c, 0x31, 0x1e, 0x7b, 0xec, 0x31, 0xc4, 0x62, 0x31, 0x69, 0x10,
1587     0x36, 0xda, 0xd2, 0xe9, 0xf4, 0x8c, 0xe5, 0x4c, 0x26, 0x53, 0x51,
1588     0x87, 0xa3, 0xa3, 0xa3, 0xd8, 0xbf, 0x7f, 0x3f, 0x8e, 0x1c, 0x39,
1589     0xd2, 0xb0, 0xe3, 0x1d, 0x3a, 0x74, 0x08, 0xc7, 0x8e, 0x1d, 0x43,
1590     0xb1, 0x58, 0x0a, 0x50, 0x15, 0x0a, 0x85, 0xca, 0x3a, 0xce, 0x79,
1591     0x25, 0xae, 0x96, 0xcd, 0x66, 0xb1, 0x6f, 0xdf, 0x3e, 0x8c, 0x8c,
1592     0x8c, 0x34, 0xec, 0xd8, 0xf7, 0x7f, 0x9d, 0x63, 0xdb, 0xb3, 0x40,
1593     0x55, 0x15, 0x94, 0x09, 0xb4, 0xb5, 0x01, 0xeb, 0xd7, 0x96, 0x1d,
1594     0x1c, 0x9b, 0xab, 0xb9, 0x6b, 0x07, 0xb0, 0xf1, 0x2b, 0x41, 0xdc,
1595     0xac, 0xe9, 0x6a, 0xed, 0x00, 0x16, 0xbf, 0xfb, 0x13, 0xe6, 0x5d,
1596     0x5b, 0xb7, 0x8a, 0xf3, 0x10, 0x47, 0x11, 0xee, 0x1d, 0xb4, 0x7a,
1597     0x8d, 0x9a, 0xe6, 0x09, 0x34, 0x99, 0xb1, 0x01, 0xaa, 0xfb, 0x19,
1598     0x8b, 0xc0, 0xf8, 0xbb, 0x2f, 0xf2, 0x0f, 0xff, 0x9f, 0x5f, 0x8a,
1599     0x2b, 0x83, 0xdb, 0xe4, 0x6d, 0x57, 0x5f, 0x7d, 0x35, 0xbe, 0xf1,
1600     0x8d, 0x6f, 0x40, 0xd7, 0xab, 0x7b, 0x41, 0x9f, 0x82, 0x4b, 0x2e,
1601     0x97, 0x6b, 0xaa, 0xcb, 0x69, 0x77, 0x73, 0x67, 0xd3, 0x84, 0xad,
1602     0xa9, 0xfd, 0x54, 0xa5, 0x40, 0x53, 0x14, 0x72, 0x0e, 0xb8, 0x75,
1603     0x93, 0x89, 0x42, 0xd6, 0xc1, 0xf5, 0x34, 0xcb, 0x51, 0x1a, 0xdb,
1604     0xb8, 0xf3, 0x42, 0x00, 0x7f, 0xfd, 0x0f, 0x26, 0xc6, 0xd3, 0xc1,
1605     0xb3, 0x3a, 0x1b, 0x36, 0x38, 0x8a, 0xf6, 0x1b, 0xef, 0xe4, 0x7f,
1606     0x3b, 0xd4, 0x8f, 0x0e, 0x84, 0x2a, 0xdd, 0x74, 0xfb, 0x8d, 0xcc,
1607     0x56, 0xc5, 0x2a, 0xbf, 0xa7, 0xc8, 0x0b, 0x6c, 0x33, 0xd3, 0xc3,
1608     0x30, 0x5e, 0xdb, 0x29, 0xfa, 0x1e, 0xf8, 0x0e, 0xbf, 0x2e, 0xb8,
1609     0x3d, 0xb6, 0x8b, 0x48, 0xa5, 0xcb, 0xb5, 0x69, 0xd3, 0x26, 0xf4,
1610     0xf7, 0xf7, 0x57, 0xd2, 0x6f, 0xb8, 0xe1, 0x06, 0x6c, 0xde, 0xbc,
1611     0xb9, 0x3a, 0xf6, 0x53, 0x56, 0x2f, 0xcd, 0x04, 0xda, 0xd4, 0x39,
1612     0xcd, 0x86, 0x1a, 0x3c, 0x13, 0x6c, 0xdb, 0x0e, 0x81, 0x7f, 0xfa,
1613     0xba, 0x8b, 0xeb, 0x89, 0x6a, 0x57, 0x73, 0xf3, 0xd7, 0x39, 0x7e,
1614     0xf1, 0x6c, 0xe0, 0x6a, 0xce, 0xa6, 0x1d, 0x3c, 0x2e, 0xe6, 0xdf,
1615     0xf3, 0x3f, 0xf8, 0x07, 0x11, 0x82, 0x01, 0xe7, 0x91, 0xd1, 0x7c,
1616     0xcd, 0x2f, 0x86, 0x26, 0xef, 0x7e, 0x86, 0x60, 0x3c, 0xfc, 0x53,
1617     0xf1, 0x16, 0xce, 0xab, 0x87, 0x31, 0x0b, 0x80, 0x56, 0xba, 0x94,
1618     0x5b, 0xb6, 0x6c, 0xc1, 0xb5, 0xd7, 0x5e, 0x3b, 0xc3, 0xdd, 0xbb,
1619     0xf9, 0xe6, 0x9b, 0xb1, 0x69, 0xd3, 0x26, 0xc7, 0xfc, 0xf5, 0x36,
1620     0x5b, 0x50, 0xb1, 0xbe, 0xbe, 0x3e, 0xac, 0x59, 0xb3, 0x06, 0xe7,
1621     0x9f, 0x7f, 0x3e, 0x2e, 0xbd, 0xf4, 0x52, 0xbc, 0xf9, 0xcd, 0x6f,
1622     0xc6, 0xea, 0xd5, 0xab, 0xcf, 0xaa, 0xfb, 0x70, 0xef, 0x43, 0x1c,
1623     0xcf, 0x3d, 0x2b, 0xe0, 0xd9, 0x99, 0x54, 0x04, 0x78, 0xed, 0xf7,
1624     0x02, 0xf7, 0x3c, 0x18, 0xb8, 0x9a, 0xa7, 0xc3, 0x1e, 0x7f, 0x82,
1625     0xbf, 0x65, 0x62, 0x10, 0x1d, 0xd0, 0x2b, 0x83, 0xa3, 0x78, 0x29,
1626     0xb2, 0x2a, 0x5e, 0x79, 0x01, 0xcd, 0x3a, 0xac, 0x94, 0xd7, 0x70,
1627     0x75, 0xe5, 0x40, 0x08, 0x68, 0xcf, 0x21, 0xb1, 0x38, 0xb8, 0x25,
1628     0xd5, 0x16, 0x0e, 0x87, 0x01, 0x00, 0x2d, 0x2d, 0x2d, 0x78, 0xf6,
1629     0xd9, 0x67, 0x71, 0xdd, 0x75, 0xd7, 0xc1, 0x30, 0xa6, 0x5b, 0x74,
1630     0x7e, 0xee, 0x73, 0x9f, 0xc3, 0x2d, 0xb7, 0xdc, 0x52, 0xb5, 0x9d,
1631     0x35, 0x4f, 0xb3, 0xed, 0xd1, 0x47, 0x1f, 0xc5, 0xab, 0xaf, 0xbe,
1632     0x8a, 0xed, 0xdb, 0xb7, 0x63, 0xdb, 0xb6, 0x6d, 0x78, 0xe6, 0x99,
1633     0x67, 0xf0, 0x91, 0x8f, 0x7c, 0xe4, 0xac, 0xba, 0x0f, 0x99, 0x1c,
1634     0xf0, 0xa9, 0x4d, 0x1c, 0xbc, 0xe8, 0x52, 0x2c, 0x18, 0x50, 0x2c,
1635     0x02, 0x7f, 0xf9, 0x79, 0x8e, 0xb1, 0xc0, 0xd5, 0x3c, 0x2d, 0x96,
1636     0xce, 0x22, 0x39, 0x99, 0x45, 0x0c, 0xb0, 0x0c, 0x74, 0x5d, 0xcd,
1637     0x25, 0x57, 0xb1, 0xe5, 0x37, 0x8c, 0x9d, 0xd3, 0x20, 0xa0, 0xce,
1638     0xa3, 0x1e, 0x33, 0x88, 0x05, 0xdd, 0x34, 0xd0, 0xec, 0xb1, 0x16,
1639     0x5f, 0x8f, 0x66, 0x8f, 0x93, 0xfd, 0xfc, 0xe7, 0x3f, 0xc7, 0x87,
1640     0x3f, 0xfc, 0x61, 0x3c, 0xf2, 0xc8, 0x23, 0x95, 0xb4, 0xcd, 0x9b,
1641     0x37, 0x63, 0x62, 0x62, 0x02, 0xdf, 0xfe, 0xf6, 0xb7, 0xab, 0x5c,
1642     0xcf, 0x59, 0x79, 0x33, 0x3e, 0xfe, 0x38, 0x8e, 0x1e, 0x3d, 0x8a,
1643     0x44, 0x22, 0x81, 0x78, 0x3c, 0x8e, 0x54, 0x2a, 0x85, 0xdd, 0xbb,
1644     0x77, 0x9f, 0x75, 0xf7, 0x62, 0xc3, 0x45, 0x04, 0x0a, 0xa1, 0xfa,
1645     0xd3, 0xa6, 0xf2, 0x93, 0xad, 0x85, 0x81, 0xab, 0xaf, 0xa0, 0xaa,
1646     0xcf, 0xa2, 0x02, 0x9b, 0x1d, 0x8b, 0x86, 0x91, 0x8b, 0x85, 0x91,
1647     0xaf, 0xd5, 0x73, 0x54, 0x1d, 0x68, 0xd8, 0x09, 0x6c, 0xa5, 0xc9,
1648     0x84, 0x76, 0xfd, 0xdb, 0xe9, 0xd7, 0x5f, 0xfa, 0x2e, 0x3e, 0x10,
1649     0xdc, 0x16, 0x9b, 0x17, 0xe3, 0xd0, 0x9e, 0xec, 0xd1, 0x47, 0x1f,
1650     0x45, 0x57, 0x57, 0x17, 0xbe, 0xf4, 0xa5, 0x2f, 0x95, 0xde, 0x07,
1651     0x8c, 0xe1, 0xc1, 0x07, 0x1f, 0xc4, 0x89, 0x13, 0x27, 0x66, 0xc4,
1652     0xd9, 0x66, 0xcb, 0x36, 0x6d, 0xda, 0x84, 0x97, 0x5f, 0x7e, 0xf9,
1653     0xac, 0xbe, 0x0f, 0x97, 0xac, 0x27, 0xdc, 0xf7, 0x69, 0x06, 0x2a,
1654     0xba, 0x3f, 0xdd, 0xcc, 0x00, 0xee, 0xbe, 0x95, 0xe1, 0x89, 0x67,
1655     0x05, 0xfe, 0xfd, 0x95, 0x00, 0x6a, 0xb3, 0x6d, 0x57, 0x5f, 0x41,
1656     0xcf, 0xb7, 0x76, 0x61, 0x18, 0xf9, 0xca, 0xd8, 0x9d, 0x5e, 0x83,
1657     0xa4, 0xc0, 0x96, 0xee, 0xdb, 0x6c, 0xc3, 0x6d, 0xc3, 0x6a, 0xb0,
1658     0xe5, 0x10, 0x7a, 0xe3, 0x25, 0xf4, 0x87, 0xeb, 0xfe, 0x33, 0x3d,
1659     0x1d, 0xdc, 0x16, 0xdb, 0x5b, 0xc7, 0xa5, 0x91, 0xe8, 0xe6, 0xcd,
1660     0x9b, 0x71, 0xff, 0xfd, 0xf7, 0x57, 0x96, 0x63, 0xb1, 0x18, 0x1e,
1661     0x7e, 0xf8, 0x61, 0xbc, 0xfb, 0xdd, 0xef, 0x06, 0x30, 0xbb, 0x31,
1662     0xb4, 0x64, 0x32, 0x39, 0xab, 0xd7, 0x24, 0x14, 0x9a, 0xdd, 0xaf,
1663     0xdf, 0x22, 0x61, 0xe0, 0x5f, 0x3e, 0xc7, 0x10, 0x4f, 0xa1, 0xba,
1664     0xbd, 0x99, 0xd5, 0xcc, 0x92, 0x4a, 0x7b, 0xe8, 0x1e, 0x86, 0x54,
1665     0x22, 0x78, 0x76, 0x67, 0xd3, 0xda, 0x52, 0x98, 0xb8, 0xf7, 0x16,
1666     0xed, 0xe1, 0xca, 0x10, 0xcb, 0x70, 0x9c, 0x9c, 0xd8, 0x64, 0x8d,
1667     0x1a, 0xf8, 0x82, 0xac, 0x8a, 0x82, 0x96, 0xf9, 0xe9, 0x6f, 0xa9,
1668     0x04, 0x04, 0x09, 0xe0, 0xab, 0xf7, 0x69, 0xff, 0x7c, 0xe9, 0x7a,
1669     0xda, 0x15, 0xdc, 0x1e, 0x7f, 0xa0, 0x01, 0xc0, 0x5d, 0x77, 0xdd,
1670     0x85, 0xaf, 0x7e, 0xf5, 0xab, 0x95, 0xe5, 0xae, 0xae, 0x2e, 0xdc,
1671     0x77, 0xdf, 0x7d, 0x00, 0x4a, 0xed, 0xb3, 0x9a, 0x65, 0xe2, 0x34,
1672     0xf7, 0x50, 0x68, 0x6d, 0xa6, 0xa1, 0x69, 0x9a, 0x63, 0xf3, 0x95,
1673     0x46, 0xda, 0xad, 0x37, 0x30, 0x5c, 0xbe, 0xc1, 0xe1, 0x6b, 0x00,
1674     0xa7, 0x88, 0x70, 0x16, 0x38, 0xff, 0x12, 0xc2, 0xe7, 0x3e, 0xc2,
1675     0x82, 0x87, 0x77, 0xb6, 0x5e, 0x70, 0x3a, 0x8a, 0x0f, 0xdd, 0xa3,
1676     0x6d, 0x5e, 0xb9, 0x16, 0x07, 0x90, 0x2f, 0x0f, 0x73, 0xe4, 0xdc,
1677     0xdd, 0xb6, 0x80, 0x7b, 0x5c, 0x4b, 0xea, 0xd3, 0x27, 0xe1, 0xf0,
1678     0xeb, 0xd4, 0x75, 0x87, 0x89, 0x22, 0xa8, 0xb5, 0x0d, 0x13, 0x3f,
1679     0x79, 0x48, 0xbb, 0x77, 0xc3, 0x85, 0xb4, 0x33, 0xb8, 0x4d, 0xd3,
1680     0xca, 0xcb, 0xcb, 0x3e, 0xf9, 0xc9, 0x4f, 0xe2, 0x89, 0x27, 0x9e,
1681     0x98, 0xd5, 0x73, 0x9a, 0xfa, 0x08, 0xfd, 0x4c, 0x30, 0x22, 0xaa,
1682     0x6a, 0x46, 0xd2, 0x48, 0xbb, 0x68, 0x2d, 0xe1, 0xde, 0xdb, 0x59,
1683     0xf5, 0xf7, 0x9c, 0x5e, 0xf5, 0x66, 0x69, 0xe0, 0x6f, 0x3e, 0xc6,
1684     0x70, 0xe9, 0xfa, 0xa0, 0x83, 0xe4, 0x66, 0x5b, 0x4b, 0x02, 0x93,
1685     0xdf, 0x7f, 0x40, 0xfb, 0xe2, 0x75, 0xd7, 0xd0, 0xd3, 0x48, 0x23,
1686     0x0a, 0xff, 0x8e, 0x1c, 0xe1, 0xe2, 0x2d, 0x92, 0x4c, 0x2d, 0xa7,
1687     0x7d, 0x08, 0x29, 0xfb, 0x60, 0xa0, 0x33, 0x07, 0x36, 0xc8, 0x82,
1688     0x75, 0x77, 0x61, 0xf8, 0x97, 0xdf, 0xd2, 0x36, 0x7e, 0xfa, 0x26,
1689     0xf6, 0xa3, 0x90, 0x0e, 0x63, 0xae, 0xdf, 0xb0, 0x44, 0x22, 0xe1,
1690     0xe9, 0x66, 0x19, 0x86, 0x81, 0x1b, 0x6f, 0xbc, 0x11, 0x2f, 0xbc,
1691     0xf0, 0xc2, 0xec, 0x3d, 0x44, 0x2d, 0x2d, 0x33, 0x96, 0xed, 0x6d,
1692     0xde, 0x18, 0x63, 0x0d, 0xf9, 0x9e, 0xd2, 0xd5, 0x05, 0xb4, 0xc4,
1693     0x15, 0x19, 0x63, 0x4d, 0x53, 0x68, 0x91, 0x30, 0xf0, 0x3f, 0xff,
1694     0x8e, 0x21, 0xe6, 0xe4, 0x6a, 0x26, 0x80, 0x7f, 0xf8, 0x1a, 0xc7,
1695     0x33, 0xdb, 0x04, 0x10, 0xab, 0x76, 0x3d, 0xf5, 0x68, 0xc9, 0xf5,
1696     0x4c, 0x04, 0x9d, 0x5c, 0x35, 0xcd, 0xae, 0xb8, 0x80, 0x76, 0x3d,
1697     0xf3, 0x5d, 0xed, 0xf3, 0xd7, 0xbc, 0x87, 0x7e, 0x8d, 0x09, 0x84,
1698     0xe1, 0xdd, 0xf7, 0x99, 0x5d, 0x4c, 0x55, 0xb1, 0x8a, 0xf9, 0xb8,
1699     0x9b, 0xc2, 0x05, 0x6e, 0xf6, 0xfe, 0xbc, 0xa7, 0xa1, 0x46, 0x30,
1700     0x90, 0x07, 0x45, 0xc3, 0xc8, 0x3f, 0xf0, 0x79, 0xf6, 0xbf, 0x9e,
1701     0xfe, 0xb6, 0xf6, 0xf7, 0x6f, 0xba, 0x98, 0x5e, 0x9b, 0xd3, 0x6f,
1702     0xa0, 0x32, 0x3c, 0xbc, 0xe2, 0x46, 0x43, 0x43, 0x43, 0x78, 0xff,
1703     0xfb, 0xdf, 0x8f, 0xc3, 0x87, 0x0f, 0xcf, 0x50, 0x2e, 0xcd, 0xb2,
1704     0xd6, 0xd6, 0x99, 0x9f, 0xd8, 0x6e, 0xdc, 0xb8, 0x11, 0xdf, 0xfc,
1705     0xe6, 0x37, 0xf1, 0xe8, 0xa3, 0x8f, 0xe2, 0x67, 0x3f, 0xfb, 0x19,
1706     0x76, 0xee, 0xdc, 0x89, 0x07, 0x1e, 0x78, 0x60, 0x56, 0x54, 0xab,
1707     0xae, 0xeb, 0x95, 0xa6, 0x2d, 0x8d, 0xb6, 0xbb, 0x3f, 0xce, 0x70,
1708     0xf9, 0x9b, 0x1c, 0x5c, 0xcd, 0x30, 0x70, 0x64, 0x5f, 0xa9, 0x6d,
1709     0xda, 0xe7, 0xbf, 0xcc, 0x21, 0x0c, 0x67, 0xd7, 0xf3, 0xa2, 0x37,
1710     0x12, 0xee, 0xfa, 0x58, 0xe0, 0x7a, 0x36, 0xda, 0x3a, 0x5a, 0x90,
1711     0xfe, 0xe2, 0x9d, 0xec, 0x91, 0x5f, 0x3f, 0xac, 0x6d, 0xbc, 0xf0,
1712     0x3c, 0xda, 0x8b, 0x34, 0x42, 0x1e, 0x30, 0x73, 0x1a, 0xf1, 0x09,
1713     0x4e, 0xae, 0xa7, 0xee, 0xa1, 0xce, 0xc8, 0x47, 0xa9, 0x99, 0x98,
1714     0xf9, 0xf9, 0x93, 0x01, 0xeb, 0x97, 0xf1, 0x06, 0x18, 0xd2, 0x88,
1715     0x6c, 0xb8, 0x8c, 0x76, 0xfc, 0xea, 0x3b, 0xda, 0x3f, 0xfe, 0xf0,
1716     0x97, 0xe2, 0x92, 0xfb, 0x1e, 0xe4, 0xef, 0xd9, 0xbe, 0x6b, 0xee,
1717     0xb5, 0x55, 0x8b, 0xc7, 0xe3, 0xe0, 0x9c, 0xfb, 0x2a, 0x9e, 0x43,
1718     0x87, 0x0e, 0xe1, 0x9a, 0x6b, 0xae, 0xc1, 0x93, 0x4f, 0x3e, 0x89,
1719     0xb6, 0xb6, 0xb6, 0xa6, 0xc6, 0xb9, 0xba, 0xba, 0xba, 0x00, 0x94,
1720     0xe2, 0x74, 0x42, 0x08, 0xbc, 0xeb, 0x5d, 0xef, 0xaa, 0xca, 0xf3,
1721     0xca, 0x2b, 0xaf, 0x34, 0xf5, 0x9a, 0x4c, 0x75, 0x25, 0xa4, 0x69,
1722     0x5a, 0xa5, 0xfb, 0xa0, 0x46, 0xda, 0x65, 0xe7, 0x11, 0xee, 0xfc,
1723     0x18, 0xab, 0x86, 0x59, 0x19, 0x68, 0x7f, 0xb7, 0x99, 0x23, 0x97,
1724     0x07, 0x7e, 0xf3, 0xa2, 0xc0, 0x63, 0x3f, 0x16, 0xf8, 0xc0, 0x75,
1725     0x54, 0xdd, 0x77, 0x5a, 0x1a, 0xb8, 0xf3, 0xaf, 0x18, 0x9e, 0xdc,
1726     0x2a, 0xf0, 0xd4, 0xb6, 0xa0, 0xd6, 0xb3, 0xee, 0x17, 0x69, 0x12,
1727     0x99, 0x8f, 0xfe, 0x39, 0x7b, 0xe6, 0xb6, 0x0f, 0xb1, 0x27, 0x16,
1728     0x2d, 0xc1, 0x51, 0x64, 0x21, 0x90, 0x05, 0xa1, 0xba, 0x9b, 0x20,
1729     0xa7, 0x01, 0x52, 0x5c, 0x87, 0xaf, 0xab, 0x88, 0x00, 0x89, 0x0e,
1730     0x1e, 0xed, 0x9d, 0x3c, 0x3a, 0xf5, 0x58, 0xeb, 0xd4, 0xfd, 0xf6,
1731     0x74, 0x8f, 0xb5, 0x0c, 0x61, 0xc4, 0x21, 0xb2, 0xa3, 0x68, 0xff,
1732     0xbf, 0xbf, 0x12, 0x17, 0x7d, 0xed, 0x71, 0x7e, 0xe5, 0x2f, 0xb7,
1733     0x8a, 0xb5, 0x73, 0xe5, 0x26, 0xf6, 0xf5, 0xf5, 0x21, 0x1a, 0x8d,
1734     0xe2, 0xe4, 0xc9, 0x93, 0x18, 0x1a, 0x1a, 0xf2, 0xcd, 0xbf, 0x6c,
1735     0xd9, 0x32, 0x24, 0x12, 0x09, 0x1c, 0x3b, 0x76, 0xac, 0xa1, 0x1f,
1736     0x69, 0x5b, 0x6d, 0xc1, 0x82, 0x05, 0xe8, 0xe9, 0xe9, 0x41, 0x2e,
1737     0x97, 0x83, 0x10, 0xa2, 0xa2, 0x06, 0x85, 0x10, 0xd0, 0x34, 0x0d,
1738     0xd1, 0x68, 0x14, 0x63, 0x63, 0x63, 0xd8, 0xbb, 0x77, 0x6f, 0xd3,
1739     0x8e, 0xdf, 0xd9, 0xd9, 0x89, 0x42, 0xa1, 0x80, 0x68, 0x34, 0x8a,
1740     0x03, 0x07, 0x0e, 0x60, 0x7c, 0xbc, 0x71, 0x7d, 0x5b, 0xc7, 0x22,
1741     0xc0, 0xb6, 0xef, 0x69, 0x38, 0xf7, 0x3c, 0x02, 0xec, 0x5f, 0x75,
1742     0xc5, 0x81, 0x17, 0x9f, 0x17, 0xd8, 0xf0, 0x61, 0x13, 0xf9, 0x72,
1743     0x53, 0xbf, 0xd5, 0x4b, 0x09, 0xcf, 0x3f, 0xae, 0x95, 0x6a, 0x36,
1744     0x8d, 0xea, 0xfc, 0x3b, 0x77, 0x00, 0x97, 0xdd, 0x60, 0x60, 0x32,
1745     0x1b, 0x40, 0xa9, 0x16, 0x5b, 0x7a, 0x0e, 0x06, 0x3f, 0xfa, 0x7e,
1746     0xf6, 0xec, 0x07, 0xde, 0x49, 0xdb, 0x56, 0xac, 0xa6, 0x03, 0xc8,
1747     0x43, 0x94, 0xc7, 0x6a, 0x9f, 0xea, 0xd4, 0x31, 0x6f, 0xfb, 0xad,
1748     0xa5, 0x1b, 0x6e, 0xe9, 0x31, 0x05, 0xdc, 0x46, 0x45, 0x77, 0xea,
1749     0xb9, 0x36, 0x84, 0xe9, 0xce, 0x1e, 0x67, 0x02, 0x4e, 0x43, 0x08,
1750     0x31, 0x08, 0x14, 0x10, 0x7f, 0xe6, 0x39, 0xb1, 0xe6, 0x5f, 0x7f,
1751     0x21, 0x2e, 0xf9, 0xe9, 0xaf, 0xf8, 0xfa, 0xc3, 0x27, 0xd0, 0x11,
1752     0xdc, 0xf2, 0xc0, 0x1a, 0x69, 0xf7, 0xdf, 0xca, 0xf0, 0x5f, 0xef,
1753     0x70, 0xe8, 0xad, 0x96, 0x01, 0x5c, 0x03, 0xde, 0xf6, 0x21, 0x13,
1754     0x4f, 0x3f, 0x3f, 0x53, 0x71, 0x7d, 0xe1, 0x13, 0x0c, 0xf7, 0x7c,
1755     0xd6, 0xa1, 0x0b, 0x6e, 0x00, 0x48, 0x01, 0xff, 0xfc, 0x15, 0x8e,
1756     0xdb, 0xfe, 0x5b, 0xf0, 0x49, 0x94, 0xac, 0x85, 0x74, 0x18, 0x7f,
1757     0x7c, 0x39, 0xed, 0x7e, 0xdf, 0xdb, 0x68, 0xfb, 0xf5, 0xef, 0x64,
1758     0xcf, 0xb7, 0x74, 0x63, 0xa8, 0x0c, 0x32, 0xd3, 0x02, 0xad, 0x82,
1759     0x03, 0xc8, 0xec, 0xa3, 0x40, 0x39, 0x0d, 0x46, 0xec, 0x54, 0x61,
1760     0xc0, 0x55, 0x06, 0x49, 0x71, 0x1a, 0x57, 0xc0, 0x3e, 0x50, 0x4a,
1761     0x18, 0xd5, 0xe3, 0x0b, 0x84, 0xab, 0x96, 0x09, 0x21, 0x44, 0x41,
1762     0xd0, 0xc1, 0x46, 0x4e, 0x62, 0xde, 0x2f, 0x7e, 0x2b, 0xd6, 0x7d,
1763     0xf7, 0xc7, 0xfc, 0xd2, 0xe7, 0x77, 0x88, 0x45, 0x83, 0x23, 0x48,
1764     0x06, 0x8f, 0x42, 0x60, 0xf5, 0xd8, 0x95, 0x6f, 0x20, 0x3c, 0xf3,
1765     0xb0, 0x06, 0x9a, 0x0a, 0x8c, 0x58, 0x2d, 0x09, 0xfc, 0xe4, 0x27,
1766     0x02, 0x7f, 0xfa, 0xa9, 0xea, 0xc6, 0x68, 0x1d, 0xad, 0xc0, 0xcb,
1767     0xff, 0x5b, 0xc7, 0xa2, 0xc5, 0xa8, 0xee, 0x4e, 0x48, 0x03, 0x04,
1768     0x01, 0x6f, 0xf9, 0x2f, 0x26, 0x7e, 0xf3, 0x62, 0xe0, 0x7a, 0x7a,
1769     0x40, 0xcc, 0x3c, 0x6f, 0x15, 0x9d, 0x78, 0xd7, 0x95, 0xf4, 0x87,
1770     0xeb, 0xde, 0x45, 0x2f, 0x9d, 0xb7, 0x86, 0x0e, 0x23, 0x84, 0x5c,
1771     0x79, 0x0c, 0x01, 0x13, 0x33, 0x7b, 0xa2, 0x75, 0x1a, 0xfd, 0xc9,
1772     0x3a, 0xac, 0x9d, 0xdd, 0xfd, 0xf4, 0x1d, 0xca, 0xae, 0x11, 0xe3,
1773     0x72, 0x3a, 0x8d, 0x8a, 0xee, 0x34, 0xa4, 0x9d, 0x8e, 0x99, 0x63,
1774     0x72, 0x96, 0xe6, 0x75, 0x68, 0x88, 0x00, 0x30, 0x11, 0x3e, 0x75,
1775     0x12, 0x9d, 0xbf, 0x78, 0x96, 0xaf, 0xf9, 0xd1, 0x53, 0x62, 0xfd,
1776     0x6f, 0x5e, 0x14, 0xcb, 0x07, 0x86, 0x03, 0xb8, 0x05, 0xa6, 0x66,
1777     0xdd, 0x1d, 0xc0, 0xbf, 0x7f, 0x4f, 0xc7, 0xb2, 0xf5, 0xa8, 0x76,
1778     0x35, 0x75, 0x20, 0x3b, 0x0a, 0x5c, 0xf4, 0x3e, 0x13, 0xbb, 0x0e,
1779     0x3a, 0x43, 0xe9, 0xfa, 0x77, 0x30, 0x7c, 0xef, 0x2b, 0xac, 0x54,
1780     0x74, 0xec, 0x59, 0xa2, 0xc0, 0xc9, 0xbd, 0xc0, 0x45, 0x7f, 0x6e,
1781     0xe0, 0xe4, 0x60, 0x70, 0xad, 0x2b, 0x97, 0x25, 0x8c, 0xe2, 0xfa,
1782     0x95, 0x74, 0xf2, 0xcf, 0xae, 0xa2, 0x9d, 0xef, 0xb9, 0x8a, 0x76,
1783     0x5e, 0xb0, 0x86, 0x8e, 0x21, 0x86, 0x49, 0x14, 0xcb, 0x6e, 0xa5,
1784     0xa8, 0xc0, 0xc9, 0x6b, 0x6c, 0x4e, 0xaf, 0x21, 0xec, 0x7c, 0x07,
1785     0x47, 0x91, 0x01, 0x9a, 0x97, 0xeb, 0xe9, 0x35, 0x3e, 0xa7, 0xcc,
1786     0xc8, 0xe9, 0xd5, 0x69, 0x04, 0x1d, 0x1a, 0x18, 0xa2, 0x00, 0x0c,
1787     0x84, 0x07, 0xfb, 0xd1, 0xbe, 0x73, 0x9f, 0x98, 0xbf, 0xe5, 0x29,
1788     0xb1, 0xee, 0x77, 0xff, 0x21, 0x96, 0xed, 0x3e, 0x28, 0xe6, 0x8d,
1789     0x4e, 0x20, 0x16, 0x3c, 0x3e, 0x81, 0x79, 0xd9, 0xc2, 0x1e, 0xe0,
1790     0x8a, 0x0b, 0x09, 0xf9, 0x3c, 0xaa, 0x6a, 0x2d, 0x49, 0x03, 0x4e,
1791     0x9d, 0x2a, 0xf5, 0x62, 0xeb, 0x66, 0x8c, 0x01, 0x6f, 0xbf, 0x82,
1792     0x10, 0x8e, 0x38, 0x8c, 0x8e, 0x2e, 0x80, 0x48, 0x04, 0xf8, 0xed,
1793     0x4b, 0x02, 0x27, 0x06, 0xe6, 0xee, 0x35, 0x66, 0x0c, 0x7c, 0xc5,
1794     0x62, 0x1a, 0x3a, 0x6f, 0x25, 0x4e, 0xbc, 0xf7, 0x8f, 0xd9, 0xce,
1795     0xcb, 0xcf, 0xa7, 0xc3, 0x7d, 0x0b, 0x31, 0x40, 0x29, 0xa4, 0xcb,
1796     0x5a, 0x4b, 0x40, 0xc0, 0x84, 0xf3, 0xc8, 0xe8, 0x5e, 0xcb, 0x06,
1797     0xdc, 0x07, 0x1a, 0xe6, 0xa8, 0xae, 0xf9, 0x94, 0x1e, 0x39, 0xdd,
1798     0x4b, 0xa5, 0x11, 0xdc, 0x47, 0x50, 0x77, 0x52, 0x6c, 0x4e, 0x80,
1799     0xd3, 0x1d, 0xe6, 0xa7, 0xa7, 0x29, 0xb8, 0x85, 0x40, 0xd0, 0x40,
1800     0xc8, 0x22, 0x76, 0xbc, 0x1f, 0x6d, 0xcf, 0xbc, 0x28, 0x96, 0xff,
1801     0xee, 0x3f, 0xc4, 0xd2, 0xa7, 0x9e, 0x13, 0xcb, 0x0f, 0x1e, 0x17,
1802     0x1d, 0x99, 0x2c, 0xc2, 0x41, 0x11, 0x0e, 0x2c, 0xb0, 0xe6, 0x1a,
1803     0x11, 0xc4, 0xfc, 0x2e, 0x8c, 0xbf, 0x61, 0x1d, 0x1d, 0xfb, 0xa3,
1804     0xcb, 0x68, 0xdf, 0x5b, 0x2f, 0xa5, 0x7d, 0x6b, 0xfb, 0xa8, 0x3f,
1805     0x92, 0x42, 0x1a, 0x04, 0xa3, 0x8c, 0x22, 0x01, 0x5e, 0x71, 0x0b,
1806     0xad, 0xae, 0xa2, 0x15, 0x54, 0x5e, 0xf3, 0x26, 0x66, 0x0e, 0x55,
1807     0x67, 0xb8, 0x80, 0xcc, 0xeb, 0x0b, 0x02, 0xd8, 0x81, 0x26, 0x03,
1808     0x35, 0xaf, 0x81, 0x52, 0x18, 0xaa, 0xfb, 0x04, 0x77, 0x82, 0x9b,
1809     0x66, 0x03, 0x9a, 0xe6, 0xb2, 0xbe, 0x34, 0x4f, 0x60, 0xd0, 0x41,
1810     0x08, 0x43, 0x80, 0xa0, 0x19, 0x63, 0x48, 0x1e, 0x3d, 0x85, 0xb6,
1811     0x5d, 0x07, 0x44, 0xf7, 0x2f, 0x9f, 0x13, 0xcb, 0x5f, 0xfa, 0x83,
1812     0x58, 0xb8, 0x7d, 0x97, 0x98, 0x3f, 0x34, 0x8a, 0xe0, 0xeb, 0xbb,
1813     0xc0, 0x02, 0x6b, 0x40, 0x1c, 0x6c, 0x5d, 0x1f, 0xf5, 0x9f, 0xbb,
1814     0x0a, 0x27, 0xdf, 0x76, 0x19, 0xed, 0xbd, 0x68, 0x1d, 0x1d, 0x5f,
1815     0x3a, 0x9f, 0x86, 0x5b, 0x3b, 0x31, 0x8e, 0x10, 0x0a, 0x15, 0x67,
1816     0x91, 0x57, 0x60, 0x63, 0x8f, 0x73, 0x59, 0x87, 0x9c, 0xf3, 0x9a,
1817     0x4c, 0x38, 0x8f, 0x8e, 0xee, 0x15, 0xfc, 0xb7, 0x36, 0xaa, 0x95,
1818     0x02, 0x9a, 0x9f, 0xeb, 0xe9, 0x56, 0x51, 0xe0, 0xa4, 0xd6, 0x9c,
1819     0x5c, 0x52, 0xcd, 0x03, 0x60, 0x4e, 0x79, 0xaa, 0xf7, 0xc7, 0xca,
1820     0x80, 0xd3, 0x21, 0xc0, 0xa0, 0xa1, 0x80, 0x50, 0xff, 0x49, 0xb4,
1821     0xed, 0x3e, 0x24, 0xba, 0x77, 0x1f, 0x12, 0x5d, 0x3b, 0xf6, 0xa0,
1822     0xe7, 0xb7, 0x2f, 0x89, 0x25, 0x87, 0x4e, 0x88, 0xf6, 0x20, 0x0e,
1823     0x17, 0x58, 0x60, 0xee, 0x96, 0x88, 0xa1, 0xb0, 0xa0, 0x9b, 0xc6,
1824     0x2f, 0x5a, 0x8b, 0xa3, 0x97, 0x9c, 0x4b, 0xc7, 0xd6, 0x2d, 0xa3,
1825     0xc1, 0xe5, 0x8b, 0x30, 0xb0, 0x7a, 0x29, 0x0d, 0xb0, 0x04, 0xb2,
1826     0x20, 0x98, 0x16, 0x05, 0xc6, 0x21, 0xaa, 0xbe, 0x0e, 0x72, 0x02,
1827     0x9a, 0xe9, 0x02, 0x2b, 0x37, 0x70, 0x39, 0xd5, 0x60, 0xba, 0xc1,
1828     0x4c, 0xb8, 0x00, 0x0d, 0x32, 0x40, 0xb3, 0xc2, 0x0c, 0x2e, 0x50,
1829     0xb3, 0xb6, 0x53, 0x23, 0x1b, 0x7c, 0xdc, 0x00, 0xe7, 0x04, 0x2b,
1830     0xdd, 0x25, 0x8f, 0x93, 0x02, 0x9c, 0xd9, 0x2e, 0x8e, 0xc0, 0x2a,
1831     0xa3, 0x85, 0x6a, 0x20, 0x10, 0x18, 0xd2, 0x88, 0x0e, 0x8d, 0x21,
1832     0xf9, 0xda, 0x7e, 0xd1, 0xbd, 0x7d, 0x97, 0x58, 0xb0, 0xe7, 0x30,
1833     0x3a, 0xf7, 0x1d, 0x15, 0x1d, 0xbb, 0x0e, 0x60, 0xde, 0xfe, 0xa3,
1834     0xa2, 0xd3, 0x30, 0x82, 0x9e, 0x75, 0x03, 0x9b, 0x5b, 0xd6, 0xd3,
1835     0x89, 0xf1, 0xb5, 0xcb, 0x69, 0x70, 0xe9, 0x39, 0x18, 0xe9, 0x5b,
1836     0x4c, 0x83, 0x6b, 0x97, 0xd1, 0xa9, 0x4b, 0xd6, 0xe3, 0xd8, 0xfc,
1837     0x79, 0x34, 0x1e, 0x6e, 0xc1, 0x24, 0x34, 0x98, 0x30, 0xcb, 0x8e,
1838     0x63, 0x11, 0x54, 0x9e, 0xe3, 0x36, 0xc8, 0x58, 0xa1, 0xe3, 0xa4,
1839     0xa8, 0x64, 0x61, 0xe7, 0x04, 0x30, 0x2b, 0xc4, 0x4c, 0x9b, 0x1a,
1840     0xf3, 0x85, 0x99, 0x17, 0xd0, 0xbc, 0x54, 0x1a, 0x3c, 0xa0, 0xe6,
1841     0x56, 0x71, 0xc0, 0x24, 0x21, 0xa7, 0x79, 0xc0, 0x4b, 0x43, 0x75,
1842     0x03, 0x5f, 0xa7, 0x63, 0x4c, 0x0f, 0xda, 0xa2, 0x81, 0xca, 0x90,
1843     0x03, 0x08, 0x0c, 0x06, 0xf4, 0xfc, 0x04, 0x62, 0x07, 0x8f, 0x89,
1844     0x8e, 0x63, 0xa7, 0xd0, 0xb6, 0x7d, 0x97, 0xe8, 0x79, 0x79, 0x97,
1845     0x38, 0xe7, 0xf0, 0x71, 0xb4, 0x9d, 0x18, 0x40, 0x6a, 0x60, 0x44,
1846     0x24, 0x86, 0xc7, 0x10, 0x7c, 0xb9, 0x17, 0xd8, 0xeb, 0x5a, 0x71,
1847     0xcd, 0x6b, 0xc7, 0x64, 0x77, 0x07, 0xa5, 0x17, 0xf5, 0x62, 0x6c,
1848     0xe5, 0x62, 0x1a, 0xbc, 0xec, 0x7c, 0x3a, 0xb2, 0x64, 0x01, 0x46,
1849     0x97, 0x2e, 0xa0, 0xa1, 0x8e, 0x79, 0x98, 0x40, 0x08, 0x45, 0x30,
1850     0x98, 0xe0, 0x10, 0x28, 0x80, 0xca, 0xe8, 0x10, 0x1e, 0x50, 0xb1,
1851     0xa7, 0x99, 0x2e, 0x90, 0xf3, 0x83, 0x95, 0x9b, 0x3b, 0xe9, 0x14,
1852     0x23, 0x93, 0xf9, 0xe4, 0xa9, 0xea, 0x63, 0x75, 0x19, 0xa0, 0xc9,
1853     0xb8, 0xa0, 0x32, 0xae, 0xa8, 0x17, 0xe0, 0x9c, 0x94, 0x97, 0xe6,
1854     0x01, 0x33, 0xcd, 0x65, 0xff, 0x4e, 0xc7, 0xa2, 0x19, 0xe9, 0x0c,
1855     0x34, 0x43, 0x0b, 0x0a, 0x68, 0x28, 0x22, 0x54, 0xcc, 0x20, 0x32,
1856     0x9a, 0x46, 0x7c, 0xff, 0x51, 0xd1, 0xf6, 0xda, 0x01, 0xd1, 0x73,
1857     0xa4, 0x1f, 0xad, 0x7b, 0x0e, 0xa2, 0x73, 0xc7, 0x1e, 0xd1, 0x3b,
1858     0x30, 0x22, 0x12, 0x23, 0xe3, 0x88, 0x4d, 0x66, 0x11, 0x9e, 0xcb,
1859     0x03, 0x26, 0x07, 0x76, 0x66, 0x58, 0x38, 0x04, 0xb3, 0xad, 0x05,
1860     0xd9, 0x8e, 0x56, 0xca, 0x2c, 0x3f, 0x07, 0x43, 0xe7, 0xad, 0xa2,
1861     0x53, 0x8b, 0x7a, 0x30, 0xd6, 0xb7, 0x90, 0x86, 0xd6, 0xad, 0xa0,
1862     0xfe, 0xce, 0x36, 0x4c, 0x26, 0x12, 0xc8, 0x21, 0x8c, 0x22, 0x74,
1863     0x18, 0xe0, 0xe5, 0x3a, 0xc7, 0x29, 0x7d, 0x24, 0x66, 0x40, 0xc3,
1864     0x0d, 0x26, 0x5e, 0x30, 0x73, 0x5b, 0x36, 0x5c, 0xb6, 0x35, 0x5d,
1865     0xd2, 0x38, 0xbc, 0xdb, 0x95, 0xf9, 0x7d, 0xee, 0x54, 0xf5, 0xdd,
1866     0xb9, 0x17, 0xd0, 0x64, 0xa0, 0x26, 0x1b, 0x5f, 0x73, 0xab, 0x1d,
1867     0x65, 0x92, 0x80, 0x92, 0xcd, 0xef, 0xb4, 0x6c, 0x3f, 0x7e, 0xf5,
1868     0xe0, 0xa5, 0x54, 0x76, 0x53, 0xa7, 0xab, 0x34, 0x04, 0x08, 0x0c,
1869     0x1c, 0x0c, 0x59, 0x44, 0x26, 0xd2, 0x88, 0x8d, 0xa7, 0x11, 0x1d,
1870     0x1c, 0x11, 0xc9, 0x53, 0xa3, 0x48, 0xec, 0x3d, 0x2c, 0xda, 0x77,
1871     0xec, 0xc1, 0xfc, 0xfe, 0x21, 0x91, 0xea, 0x1f, 0x42, 0x72, 0x78,
1872     0x0c, 0xf1, 0xd1, 0x09, 0x11, 0x1d, 0x9b, 0x40, 0x74, 0x32, 0xa8,
1873     0x79, 0x0d, 0xac, 0x0e, 0x0b, 0xe9, 0x30, 0x5b, 0x52, 0xc8, 0xb5,
1874     0xa7, 0x90, 0x6b, 0x6b, 0xa1, 0x6c, 0x77, 0x3b, 0x26, 0xbb, 0x3b,
1875     0x29, 0xbd, 0x7c, 0x21, 0x06, 0xcf, 0x5f, 0x49, 0xa7, 0xba, 0x3b,
1876     0x91, 0xee, 0x6a, 0xa7, 0x74, 0x47, 0x2b, 0x32, 0x2d, 0x09, 0xe4,
1877     0xf4, 0x04, 0xb2, 0x08, 0xc1, 0x80, 0x28, 0x63, 0xaa, 0x08, 0x4b,
1878     0x0f, 0x85, 0x55, 0xbd, 0x53, 0xcc, 0xec, 0xee, 0x0b, 0x15, 0x55,
1879     0xc6, 0x7d, 0xa0, 0xe6, 0x94, 0xdf, 0xf4, 0xc9, 0xcb, 0x15, 0x00,
1880     0xe6, 0x07, 0x31, 0xaf, 0x1e, 0x6b, 0x21, 0x13, 0x43, 0x73, 0x83,
1881     0x9a, 0x9f, 0x2b, 0xca, 0x7c, 0xe2, 0x6c, 0xcc, 0xa2, 0x98, 0xec,
1882     0xdf, 0x88, 0x92, 0x0f, 0xa0, 0xc8, 0x03, 0x56, 0x32, 0x13, 0xc1,
1883     0x79, 0x24, 0x66, 0xe6, 0x70, 0x7e, 0x33, 0x61, 0x37, 0xed, 0xc4,
1884     0x4e, 0x9f, 0x01, 0xc0, 0x60, 0x42, 0x83, 0x01, 0xcd, 0xcc, 0x23,
1885     0x9c, 0xce, 0x20, 0x92, 0xce, 0x20, 0xb2, 0xff, 0xa8, 0x68, 0x3b,
1886     0x72, 0x12, 0x1d, 0x03, 0xc3, 0x22, 0xd1, 0x3f, 0x82, 0xc4, 0xe1,
1887     0xe3, 0x68, 0xdd, 0x7f, 0x54, 0x74, 0x0e, 0x8f, 0x23, 0x3e, 0x31,
1888     0x29, 0x22, 0x13, 0x93, 0x88, 0xe4, 0xf2, 0xd0, 0x8b, 0x41, 0x0c,
1889     0x6f, 0x4e, 0x19, 0x63, 0x10, 0x91, 0x30, 0x8c, 0x44, 0x0c, 0xf9,
1890     0x96, 0x04, 0x0a, 0x2d, 0x09, 0xca, 0xcf, 0xef, 0xc6, 0xe8, 0xea,
1891     0xa5, 0x34, 0xdc, 0x53, 0x86, 0x54, 0x6f, 0x27, 0x26, 0x56, 0x2e,
1892     0xc6, 0x50, 0x47, 0x3b, 0x65, 0x92, 0x31, 0xe4, 0xa3, 0x31, 0xe4,
1893     0x11, 0x82, 0x01, 0x0d, 0x26, 0x58, 0x39, 0x24, 0x6f, 0x5a, 0x80,
1894     0x55, 0x2a, 0xfa, 0x4e, 0xe0, 0x72, 0xeb, 0xea, 0xcb, 0x9a, 0x66,
1895     0xba, 0xac, 0x93, 0x99, 0x64, 0x20, 0xe8, 0x04, 0x4e, 0xe1, 0x11,
1896     0xe8, 0xf7, 0x82, 0x99, 0x9b, 0x2a, 0x83, 0x4a, 0x0c, 0x4d, 0x05,
1897     0x6c, 0x4e, 0x90, 0x73, 0x82, 0x9b, 0x5b, 0xcc, 0x8d, 0x5c, 0xe0,
1898     0xc3, 0x7c, 0xe2, 0x73, 0xcc, 0x67, 0x3f, 0x4c, 0x11, 0x60, 0x4e,
1899     0xf3, 0x4e, 0xbf, 0xd3, 0xf3, 0xd3, 0x7f, 0x28, 0xbb, 0xb3, 0x62,
1900     0xc6, 0x1a, 0x13, 0x0c, 0x05, 0x84, 0x8a, 0x39, 0x84, 0x33, 0xe5,
1901     0x69, 0x3c, 0x2d, 0x22, 0xe3, 0x69, 0xc4, 0x46, 0xd3, 0x88, 0x0e,
1902     0x8e, 0x20, 0xbe, 0xe7, 0xb0, 0x68, 0xeb, 0x1f, 0x44, 0xdb, 0xc8,
1903     0x04, 0x62, 0xe3, 0x69, 0x11, 0x19, 0x4d, 0x23, 0x3a, 0x32, 0x8a,
1904     0x58, 0xff, 0xb0, 0x48, 0x4c, 0x66, 0x11, 0x2d, 0x14, 0xa1, 0x71,
1905     0x1e, 0xb8, 0xba, 0x67, 0xa2, 0x9a, 0x8a, 0x46, 0x50, 0xec, 0x68,
1906     0xc5, 0x64, 0x6f, 0x27, 0x65, 0x92, 0x09, 0xe4, 0x3a, 0x52, 0xc8,
1907     0xa7, 0x92, 0x94, 0xed, 0x6a, 0xc7, 0xe4, 0xd2, 0x73, 0x30, 0xbc,
1908     0xa8, 0x97, 0x26, 0x5a, 0x93, 0xc8, 0xb7, 0x24, 0x91, 0x6d, 0x4f,
1909     0x51, 0x36, 0x1e, 0x45, 0x21, 0x1e, 0x43, 0x31, 0x16, 0x45, 0x1e,
1910     0x11, 0x14, 0xcb, 0x63, 0x50, 0x8a, 0x8a, 0xc2, 0x32, 0x40, 0x15,
1911     0x50, 0xf1, 0x72, 0x30, 0x5c, 0xb8, 0x16, 0x78, 0x2f, 0x80, 0xc9,
1912     0x40, 0xce, 0x4d, 0xa1, 0x09, 0x9f, 0x65, 0x3f, 0xa5, 0xc5, 0xe1,
1913     0x5d, 0x43, 0x29, 0x5c, 0x80, 0x56, 0x33, 0xc8, 0x6a, 0x01, 0x9a,
1914     0x8c, 0x1b, 0x6a, 0x77, 0x41, 0x9d, 0x54, 0x9b, 0xdb, 0x68, 0xc8,
1915     0xf6, 0x5f, 0xcd, 0x53, 0x39, 0x79, 0x2f, 0x93, 0x4f, 0x1e, 0x92,
1916     0x04, 0x98, 0x1f, 0xd4, 0xbc, 0x46, 0x76, 0x9e, 0x9e, 0xb7, 0x02,
1917     0x6f, 0x7a, 0x2d, 0xcd, 0xd8, 0xa3, 0x00, 0x81, 0x43, 0x03, 0x2f,
1918     0xb9, 0xba, 0x66, 0x16, 0xa1, 0x91, 0x09, 0xc4, 0x26, 0x33, 0x88,
1919     0x8c, 0x4d, 0x8a, 0x48, 0x36, 0x87, 0xf0, 0x78, 0x49, 0xdd, 0x85,
1920     0xc7, 0x26, 0x10, 0x99, 0xc8, 0x88, 0xc8, 0x64, 0x16, 0x91, 0xb1,
1921     0x09, 0x84, 0x73, 0x05, 0x44, 0x4e, 0x0e, 0x88, 0xd8, 0x89, 0x21,
1922     0x24, 0x26, 0x26, 0x91, 0xc8, 0x64, 0xa1, 0xe7, 0x8b, 0xd0, 0x0d,
1923     0x03, 0x7a, 0x26, 0x27, 0xb4, 0x7c, 0x11, 0x9a, 0x61, 0x40, 0xcf,
1924     0x17, 0xa0, 0xcd, 0x75, 0x65, 0x48, 0x04, 0x1e, 0x8b, 0xc0, 0xd4,
1925     0x75, 0x98, 0x61, 0x1d, 0x66, 0x2c, 0x4a, 0x46, 0x38, 0x04, 0x33,
1926     0x1c, 0x82, 0x11, 0x8b, 0xc0, 0x48, 0xc4, 0x91, 0xeb, 0x6c, 0x45,
1927     0x7a, 0x61, 0x0f, 0x65, 0x92, 0x09, 0xe4, 0x53, 0x31, 0xe4, 0x5b,
1928     0x52, 0x28, 0xc4, 0x23, 0x94, 0x6f, 0x4b, 0x21, 0x1f, 0x8b, 0x21,
1929     0x9f, 0x8a, 0xa1, 0x90, 0x88, 0xa3, 0x90, 0x8c, 0x21, 0x9f, 0x4a,
1930     0x50, 0x3e, 0x95, 0x40, 0x36, 0x91, 0x42, 0xbe, 0x7c, 0xf7, 0xcc,
1931     0x72, 0xb0, 0x82, 0x5b, 0x8a, 0xab, 0x70, 0x68, 0x0e, 0x2a, 0x2c,
1932     0xea, 0x4a, 0x78, 0xa8, 0x14, 0xee, 0x31, 0xef, 0xb4, 0xce, 0x0d,
1933     0x6a, 0x7e, 0xeb, 0x4c, 0x87, 0x7d, 0xfb, 0xa9, 0x3d, 0xbf, 0xbc,
1934     0x6e, 0xc7, 0x84, 0xa2, 0x1a, 0x93, 0x82, 0x59, 0xad, 0x40, 0x73,
1935     0x52, 0x6b, 0x7e, 0xb1, 0x35, 0xaf, 0x8a, 0x04, 0x15, 0x90, 0xf8,
1936     0x29, 0x27, 0x59, 0x70, 0x11, 0x54, 0x54, 0x98, 0xf7, 0x70, 0xf4,
1937     0x5e, 0x69, 0xb0, 0x1c, 0xd7, 0xef, 0x1a, 0x4c, 0xc3, 0x0f, 0x15,
1938     0x00, 0xda, 0x8f, 0x3c, 0x55, 0x25, 0x31, 0x95, 0x0f, 0x95, 0x5f,
1939     0xb3, 0xec, 0x02, 0x9b, 0xd0, 0x78, 0x09, 0x5c, 0xba, 0x69, 0x82,
1940     0xe5, 0x8b, 0xe5, 0x79, 0x0e, 0x36, 0x9e, 0x16, 0xe1, 0xe1, 0x31,
1941     0x44, 0xd2, 0x19, 0x44, 0xf3, 0x05, 0x84, 0x27, 0xb3, 0x08, 0x65,
1942     0x72, 0x08, 0x15, 0x0d, 0xa1, 0x15, 0xcb, 0xc0, 0xcb, 0xe4, 0xa0,
1943     0x17, 0x8a, 0xd3, 0xdb, 0x9b, 0x1c, 0x5a, 0x26, 0x07, 0xcd, 0x30,
1944     0xc1, 0x8a, 0x45, 0x30, 0xd3, 0x84, 0x66, 0x72, 0x41, 0x9c, 0x43,
1945     0xe3, 0x02, 0xc4, 0x39, 0x28, 0x93, 0xab, 0x40, 0x92, 0x0a, 0x45,
1946     0x30, 0x93, 0x83, 0x91, 0xf5, 0xa1, 0x23, 0xc0, 0x30, 0xca, 0x2a,
1947     0x93, 0xa6, 0xd5, 0x0d, 0xd9, 0x1e, 0x4c, 0x51, 0x0a, 0x78, 0x73,
1948     0x8d, 0x81, 0x0b, 0x01, 0x8a, 0x84, 0x61, 0x86, 0x43, 0xa5, 0x07,
1949     0x5f, 0xd7, 0xc0, 0x89, 0x20, 0x74, 0x8d, 0x4c, 0x4d, 0x83, 0x28,
1950     0xab, 0x23, 0x33, 0xa4, 0x83, 0xeb, 0x1a, 0x4c, 0x5d, 0x83, 0x19,
1951     0xd2, 0x61, 0xc4, 0xa2, 0x30, 0xe3, 0x51, 0x18, 0xa5, 0x65, 0x32,
1952     0xca, 0x6e, 0x9e, 0x11, 0x8b, 0xa2, 0x10, 0x8b, 0x20, 0xd7, 0x96,
1953     0x42, 0x7e, 0x5e, 0x1b, 0xe5, 0x74, 0x1d, 0xa6, 0xa6, 0x81, 0x47,
1954     0x42, 0x30, 0x43, 0x3a, 0x4c, 0x5d, 0x87, 0xa1, 0x87, 0x60, 0x42,
1955     0x2f, 0x5f, 0xc9, 0x50, 0xe5, 0xb3, 0x76, 0x61, 0x29, 0x56, 0xc2,
1956     0x02, 0x23, 0xaa, 0x68, 0x27, 0x5e, 0x56, 0x55, 0x70, 0x04, 0x94,
1957     0xb5, 0xf0, 0xc2, 0x47, 0x91, 0x78, 0xb9, 0x5e, 0x6e, 0xa0, 0x93,
1958     0x81, 0x9c, 0x4c, 0x7e, 0xd3, 0x07, 0x42, 0xdc, 0x63, 0x5b, 0x2e,
1959     0x09, 0x60, 0xeb, 0x35, 0x00, 0xe4, 0x47, 0x74, 0x92, 0x82, 0x59,
1960     0x3d, 0x40, 0xf3, 0x73, 0x43, 0xfd, 0x62, 0x6d, 0x7e, 0x60, 0x93,
1961     0x55, 0x3f, 0xf5, 0xa4, 0xc9, 0xaa, 0x2e, 0xb7, 0xed, 0xa0, 0x00,
1962     0xb7, 0x5a, 0x26, 0x48, 0xa4, 0xc1, 0x06, 0x43, 0xd8, 0x70, 0x87,
1963     0xaa, 0x34, 0x0d, 0x02, 0x04, 0x61, 0x5b, 0x4f, 0x96, 0xbb, 0x46,
1964     0x0e, 0x8f, 0x10, 0xb3, 0x3c, 0x72, 0xa5, 0x63, 0x09, 0xcb, 0x76,
1965     0xbc, 0x72, 0x0e, 0x02, 0xc2, 0xf1, 0x99, 0x10, 0x96, 0x6d, 0xac,
1966     0xc7, 0x15, 0x2e, 0x4f, 0xd4, 0xd4, 0xde, 0xad, 0xe7, 0x69, 0x3d,
1967     0x03, 0xeb, 0x59, 0x54, 0xbf, 0xbd, 0x85, 0xc3, 0xbc, 0xa8, 0xa8,
1968     0xe0, 0xea, 0xe2, 0x64, 0x45, 0xd1, 0xcc, 0x2d, 0xdd, 0x7a, 0x6c,
1969     0x86, 0xcf, 0xb2, 0x9b, 0xf2, 0xe0, 0x1e, 0xcb, 0x32, 0x70, 0xf3,
1970     0x52, 0x37, 0xdc, 0x07, 0x86, 0xb2, 0x40, 0x14, 0x35, 0x82, 0x4a,
1971     0x48, 0xfe, 0x3f, 0x6e, 0x00, 0x13, 0xb5, 0x42, 0xcc, 0x6a, 0xf5,
1972     0x76, 0xe4, 0x2e, 0x1c, 0x1e, 0x5c, 0xaf, 0xbc, 0x34, 0xe3, 0x01,
1973     0xaf, 0x2e, 0x98, 0x5c, 0x01, 0x76, 0x5e, 0x40, 0xf2, 0x03, 0x24,
1974     0x53, 0x38, 0x06, 0x49, 0x6e, 0x03, 0x49, 0x98, 0xc1, 0x01, 0x8a,
1975     0xa8, 0x01, 0x68, 0xd5, 0xf3, 0xa2, 0x82, 0x03, 0xaf, 0xd1, 0xee,
1976     0xdd, 0xd2, 0xdd, 0x42, 0x08, 0xfe, 0x2f, 0x2f, 0x92, 0x56, 0xf1,
1977     0x2a, 0xcf, 0x93, 0x3d, 0x45, 0xf8, 0x6c, 0xe3, 0xf6, 0x66, 0xf7,
1978     0x6a, 0xbb, 0xe4, 0x35, 0xe0, 0x86, 0x2c, 0xd0, 0x20, 0x51, 0x60,
1979     0x1b, 0x35, 0xf9, 0xb9, 0x6b, 0x2a, 0xca, 0xce, 0x6f, 0x9d, 0x90,
1980     0x3c, 0x0e, 0x57, 0x84, 0x3a, 0xe0, 0xd3, 0xeb, 0x6c, 0x2d, 0x20,
1981     0x6b, 0x14, 0xd0, 0x9c, 0x0e, 0x4e, 0x0e, 0x0f, 0x10, 0x39, 0xcc,
1982     0xab, 0x28, 0x37, 0x2a, 0x4b, 0x62, 0x27, 0x80, 0xa0, 0x06, 0x40,
1983     0xd9, 0x21, 0xa2, 0xba, 0x3d, 0x24, 0xd7, 0xc9, 0xb9, 0x99, 0xb5,
1984     0xc0, 0xcb, 0xbf, 0x52, 0xc6, 0xed, 0x1a, 0x7b, 0x81, 0x8b, 0x3c,
1985     0x94, 0xb6, 0x3b, 0xa8, 0x9a, 0xd7, 0x36, 0x4f, 0xd4, 0x90, 0x26,
1986     0x24, 0xa1, 0x06, 0x05, 0xc0, 0xf9, 0x15, 0x4a, 0x59, 0xd5, 0xd6,
1987     0x0c, 0xc8, 0x09, 0x49, 0x08, 0xd5, 0x02, 0x3f, 0x95, 0xc9, 0xcf,
1988     0x95, 0x94, 0x89, 0x8d, 0xd5, 0x04, 0xb1, 0x66, 0x01, 0x0d, 0x0e,
1989     0xd0, 0xf2, 0x7b, 0x08, 0xad, 0xaa, 0x8e, 0xd9, 0xa0, 0xe8, 0x54,
1990     0x50, 0x99, 0xe5, 0xa2, 0xa9, 0xaa, 0x20, 0xbf, 0xfc, 0x4c, 0x01,
1991     0x40, 0xf5, 0xb8, 0x8d, 0xb2, 0x31, 0xc6, 0x7a, 0x20, 0x26, 0xdb,
1992     0x7e, 0x50, 0x16, 0x70, 0xb2, 0xaa, 0x0d, 0x67, 0x08, 0xd8, 0xbc,
1993     0xd4, 0x9a, 0x0c, 0xe8, 0xbc, 0x54, 0x18, 0x5c, 0x0a, 0xb0, 0x5f,
1994     0x41, 0x56, 0x85, 0x9b, 0x1b, 0x20, 0x4e, 0xd7, 0x04, 0x0f, 0x35,
1995     0x26, 0xe3, 0x3e, 0x0a, 0x09, 0x60, 0xd5, 0xdd, 0x73, 0xa6, 0x3e,
1996     0x4b, 0x0f, 0x20, 0x49, 0x9c, 0x34, 0x97, 0x28, 0x84, 0x5c, 0x52,
1997     0xd1, 0x01, 0xf5, 0xa9, 0x22, 0x26, 0xb1, 0x7f, 0x26, 0x09, 0x2c,
1998     0x28, 0xc2, 0x0c, 0xa8, 0x4f, 0x89, 0xd5, 0x03, 0x31, 0x3f, 0x35,
1999     0x46, 0x0a, 0x95, 0x44, 0xcd, 0x02, 0x99, 0x4c, 0xad, 0x97, 0xac,
2000     0xfb, 0xa9, 0x0a, 0x39, 0x15, 0xe0, 0xd5, 0xa2, 0xda, 0x20, 0x09,
2001     0x34, 0x48, 0xba, 0x7a, 0xb0, 0xb9, 0xa9, 0xa8, 0x11, 0xac, 0x7e,
2002     0x0a, 0x0c, 0xf0, 0x6e, 0xf8, 0xda, 0x14, 0x35, 0x36, 0x9b, 0x40,
2003     0x93, 0x05, 0x9c, 0x70, 0x51, 0x76, 0x76, 0xf5, 0xe6, 0x57, 0xa8,
2004     0x65, 0xd6, 0xcb, 0x42, 0x05, 0x0a, 0x10, 0x83, 0xc7, 0x7a, 0x2f,
2005     0x60, 0xfa, 0x41, 0xcc, 0x69, 0xbd, 0xdf, 0x75, 0x68, 0x96, 0x1a,
2006     0x23, 0xc7, 0x00, 0x7f, 0x73, 0xa0, 0x26, 0x7c, 0x62, 0xb1, 0x4e,
2007     0xeb, 0x55, 0x6a, 0xc5, 0x64, 0x5c, 0x1f, 0x59, 0xf7, 0xb3, 0x56,
2008     0xe8, 0x01, 0xf2, 0xf1, 0x38, 0x59, 0x00, 0xd5, 0x53, 0x71, 0xa1,
2009     0x72, 0x8e, 0xb5, 0x5c, 0xbb, 0xa6, 0x43, 0xec, 0x74, 0x00, 0xcd,
2010     0xaf, 0x32, 0x01, 0x0a, 0x80, 0x53, 0xa9, 0x49, 0xad, 0x25, 0x4d,
2011     0x56, 0x61, 0xa9, 0xc6, 0xb8, 0x64, 0xcf, 0xa1, 0x96, 0x3c, 0x50,
2012     0x58, 0x27, 0x0b, 0xb5, 0x5a, 0xdc, 0x4c, 0x6a, 0xf0, 0xb3, 0x51,
2013     0xab, 0x6a, 0x93, 0x55, 0x70, 0x2a, 0x40, 0x83, 0x42, 0x01, 0xf7,
2014     0xfd, 0x88, 0x5a, 0x41, 0xdd, 0xa9, 0xe6, 0x57, 0x55, 0x92, 0x2a,
2015     0xe7, 0xec, 0x05, 0x2d, 0x71, 0x3a, 0x00, 0x76, 0xa6, 0x00, 0xcd,
2016     0xef, 0x1f, 0x26, 0x8f, 0x87, 0x4a, 0xb6, 0x90, 0xd6, 0xd2, 0x84,
2017     0x64, 0xb6, 0x40, 0xe9, 0x74, 0x7e, 0x8d, 0x70, 0x23, 0x6b, 0x55,
2018     0x65, 0x2a, 0xae, 0xe4, 0x99, 0x08, 0x34, 0x51, 0x07, 0xe0, 0xbc,
2019     0x0a, 0x68, 0x3d, 0xea, 0x4e, 0xa5, 0x22, 0xa2, 0x56, 0xb7, 0xb6,
2020     0x5e, 0xc8, 0xca, 0xfe, 0x3f, 0x2a, 0x0a, 0x6c, 0xd6, 0x21, 0x76,
2021     0xa6, 0x01, 0xad, 0x51, 0x90, 0x73, 0x72, 0x47, 0x48, 0xa1, 0xa0,
2022     0xab, 0xb8, 0x6e, 0x8d, 0xac, 0x61, 0xac, 0x57, 0x71, 0xa9, 0xb4,
2023     0x05, 0x54, 0x75, 0x31, 0x67, 0x13, 0x64, 0x8d, 0x80, 0x9b, 0x0a,
2024     0xd8, 0x54, 0x0b, 0xae, 0x6a, 0x4d, 0xaa, 0xac, 0xda, 0x51, 0x01,
2025     0x4d, 0x23, 0x9a, 0xa3, 0xf8, 0x01, 0x5b, 0x15, 0x5e, 0xa7, 0x15,
2026     0x60, 0xaf, 0x17, 0xa0, 0xa9, 0xb8, 0xa9, 0x4e, 0x17, 0x9f, 0x5c,
2027     0x80, 0xa7, 0x12, 0x2b, 0x52, 0x85, 0x4c, 0xad, 0x79, 0x20, 0x19,
2028     0x17, 0x53, 0xd9, 0x0f, 0x14, 0xf3, 0x9d, 0x2e, 0x35, 0xd6, 0x48,
2029     0xc0, 0xc9, 0x28, 0x37, 0x55, 0xa0, 0xa9, 0xce, 0xd7, 0x0a, 0x42,
2030     0x15, 0x08, 0xaa, 0xba, 0xcc, 0xb2, 0xff, 0xdb, 0x19, 0xad, 0xbc,
2031     0xce, 0x46, 0xa0, 0xd5, 0x73, 0x61, 0x9d, 0xc0, 0xa6, 0x52, 0xc8,
2032     0xeb, 0x89, 0x45, 0xd5, 0x52, 0xc3, 0x28, 0x0b, 0x3e, 0x48, 0xba,
2033     0x90, 0xe4, 0xa2, 0x74, 0xfd, 0x3e, 0x61, 0xf3, 0x7b, 0x21, 0x34,
2034     0x0b, 0x72, 0xc2, 0x63, 0xff, 0x4e, 0x71, 0x56, 0x21, 0xb1, 0xad,
2035     0xf0, 0x51, 0xf9, 0xb5, 0xc6, 0xe1, 0xea, 0x55, 0x74, 0xaa, 0xdb,
2036     0xa9, 0xee, 0xaf, 0x16, 0x25, 0xfb, 0xba, 0x35, 0x1d, 0x67, 0xa7,
2037     0x09, 0xc5, 0x7c, 0xe4, 0xa2, 0x02, 0x65, 0xe1, 0xa7, 0x0a, 0x34,
2038     0x81, 0xe9, 0x1a, 0xd1, 0x7a, 0xd5, 0x94, 0x5a, 0xab, 0xfe, 0xfa,
2039     0xd2, 0x55, 0xd4, 0x9b, 0x6a, 0x01, 0x91, 0xdd, 0x46, 0xf8, 0xe4,
2040     0x57, 0x09, 0x4e, 0xab, 0xaa, 0x3a, 0x55, 0xd7, 0xcc, 0x2f, 0x2e,
2041     0xd7, 0x08, 0xb7, 0xb8, 0x51, 0x69, 0x67, 0x85, 0x9d, 0xad, 0x40,
2042     0x6b, 0x84, 0xb2, 0x13, 0x0d, 0x72, 0xd1, 0xdc, 0xd2, 0xb8, 0x02,
2043     0x50, 0x54, 0xa0, 0xe5, 0xd5, 0xb4, 0xc2, 0x0d, 0x88, 0x02, 0xcd,
2044     0x6b, 0x63, 0x46, 0x0d, 0xbc, 0x27, 0x2a, 0xdb, 0x0b, 0x45, 0xe8,
2045     0xd9, 0x41, 0x59, 0x0b, 0xec, 0x6a, 0x05, 0x22, 0x35, 0x70, 0xbb,
2046     0xd7, 0xa5, 0xab, 0x18, 0x00, 0xed, 0xf4, 0xba, 0xb0, 0x6e, 0x0f,
2047     0x94, 0x4a, 0x1c, 0xaa, 0x19, 0x79, 0x9b, 0x11, 0xd0, 0xa7, 0xd7,
2048     0xf9, 0x7d, 0x13, 0x0d, 0x5c, 0x57, 0x6b, 0x43, 0x5f, 0x55, 0xe5,
2049     0xa8, 0x0a, 0x65, 0x3f, 0xd5, 0x3a, 0x67, 0x2c, 0x00, 0x5a, 0x7d,
2050     0x85, 0x47, 0xc0, 0xff, 0x2b, 0x08, 0x99, 0x36, 0x77, 0x2a, 0x0f,
2051     0x63, 0x33, 0x82, 0xf7, 0xaa, 0xd0, 0xa2, 0x33, 0xec, 0x3e, 0x9c,
2052     0x0e, 0xe0, 0xd5, 0x0a, 0x29, 0xd5, 0xff, 0x81, 0x2b, 0xec, 0x47,
2053     0xcc, 0xf5, 0x42, 0x1a, 0x00, 0xed, 0xf4, 0x14, 0x30, 0x92, 0xdc,
2054     0x0f, 0x29, 0x1e, 0x4f, 0x05, 0x34, 0xcd, 0x00, 0xdd, 0x99, 0x7e,
2055     0x0f, 0x1a, 0x99, 0xcf, 0xad, 0x92, 0x21, 0x70, 0xfd, 0x02, 0xa0,
2056     0x05, 0x10, 0x54, 0xc8, 0x47, 0x0d, 0x2a, 0x30, 0x14, 0x5c, 0xf7,
2057     0xba, 0xf7, 0x11, 0x00, 0xea, 0x0c, 0xb3, 0xff, 0x3f, 0x00, 0x33,
2058     0x7e, 0xb5, 0x01, 0x3c, 0x57, 0x93, 0xe4, 0x00, 0x00, 0x00, 0x00,
2059     0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
2060 };
2061 
2062 unsigned int nxlogo_png_size = sizeof(nxlogo_png);
2063 
2064 static void nx_iperf_send_image(NX_WEB_HTTP_SERVER *server_ptr, UCHAR *img, UINT imgsize);
2065 static void nx_iperf_print_tcp_rx_results(NX_WEB_HTTP_SERVER *server_ptr, NXD_ADDRESS *peer_ip_address);
2066 static void nx_iperf_print_tcp_tx_results(NX_WEB_HTTP_SERVER *server_ptr, NXD_ADDRESS *peer_ip_address);
2067 static void nx_iperf_print_udp_rx_results(NX_WEB_HTTP_SERVER *server_ptr, NXD_ADDRESS *peer_ip_address);
2068 static void nx_iperf_print_udp_tx_results(NX_WEB_HTTP_SERVER *server_ptr, NXD_ADDRESS *peer_ip_address);
2069 
2070 void        nx_iperf_tcp_rx_test(UCHAR *, ULONG);
2071 void        nx_iperf_tcp_tx_test(UCHAR *, ULONG);
2072 void        nx_iperf_udp_rx_test(UCHAR *, ULONG);
2073 void        nx_iperf_udp_tx_test(UCHAR *, ULONG);
2074 
2075 void        nx_iperf_tcp_rx_cleanup(void);
2076 void        nx_iperf_tcp_tx_cleanup(void);
2077 void        nx_iperf_udp_rx_cleanup(void);
2078 void        nx_iperf_udp_tx_cleanup(void);
2079 
2080 char       *nx_iperf_get_ip_addr_string(NXD_ADDRESS *ip_address, UINT *string_length);
2081 void        nx_iperf_test_info_parse(ctrl_info *iperf_ctrlInfo_ptr);
2082 void        nx_iperf_tcp_rx_connect_received(NX_TCP_SOCKET *socket_ptr, UINT port);
2083 void        nx_iperf_tcp_rx_disconnect_received(NX_TCP_SOCKET *socket_ptr);
2084 UINT        nx_iperf_authentication_check(struct NX_WEB_HTTP_SERVER_STRUCT *server_ptr, UINT request_type, CHAR *resource, CHAR **name, CHAR **password, CHAR **realm);
2085 UINT        nx_iperf_get_notify(NX_WEB_HTTP_SERVER *server_ptr, UINT request_type, CHAR *resource, NX_PACKET *packet_ptr);
2086 void        nx_iperf_entry(NX_PACKET_POOL *pool_ptr, NX_IP *ip_ptr, UCHAR *http_stack, ULONG http_stack_size, UCHAR *iperf_stack, ULONG iperf_stack_size);
2087 
2088 void        nx_iperf_thread_tcp_rx_entry(ULONG thread_input);
2089 void        nx_iperf_thread_tcp_tx_entry(ULONG thread_input);
2090 void        nx_iperf_thread_udp_tx_entry(ULONG thread_input);
2091 void        nx_iperf_thread_udp_rx_entry(ULONG thread_input);
2092 
2093 void        nx_iperf_udp_client_socket_vlan_priority_set(UCHAR vlan_priority);
2094 void        nx_iperf_tcp_client_socket_vlan_priority_set(UCHAR vlan_priority);
2095 
nx_iperf_entry(NX_PACKET_POOL * pool_ptr,NX_IP * ip_ptr,UCHAR * http_stack,ULONG http_stack_size,UCHAR * iperf_stack,ULONG iperf_stack_size)2096 void    nx_iperf_entry(NX_PACKET_POOL *pool_ptr, NX_IP *ip_ptr, UCHAR *http_stack, ULONG http_stack_size, UCHAR *iperf_stack, ULONG iperf_stack_size)
2097 {
2098 UINT status;
2099 
2100     /* Set the iPerf Stack and Size.  */
2101     nx_iperf_stack_area = iperf_stack;
2102     nx_iperf_stack_area_size = iperf_stack_size;
2103 
2104     /* Set the IP instance and Packet Pool.  */
2105     nx_iperf_test_ip = ip_ptr;
2106     nx_iperf_test_pool = pool_ptr;
2107 
2108     /* Create a TCP server socket.  */
2109     status =  nx_tcp_socket_create(nx_iperf_test_ip, &tcp_server_socket, "TCP Server Socket",
2110                                    NX_IP_NORMAL, NX_FRAGMENT_OKAY, NX_IP_TIME_TO_LIVE, 32 * 1024,
2111                                    NX_NULL, nx_iperf_tcp_rx_disconnect_received);
2112 
2113     /* Check for error.  */
2114     if (status)
2115     {
2116         nx_iperf_test_error_counter++;
2117         return;
2118     }
2119 
2120     /* Create a TCP client socket.  */
2121     status =  nx_tcp_socket_create(nx_iperf_test_ip, &tcp_client_socket, "TCP Client Socket",
2122                                    NX_IP_NORMAL, NX_FRAGMENT_OKAY, NX_IP_TIME_TO_LIVE, 32 * 1024,
2123                                    NX_NULL, NX_NULL);
2124 
2125     /* Check for error.  */
2126     if (status)
2127     {
2128         nx_iperf_test_error_counter++;
2129         return;
2130     }
2131 
2132     if (tcp_client_socket_vlan_priority != NX_VLAN_PRIORITY_INVALID)
2133     {
2134         nx_tcp_socket_vlan_priority_set(&tcp_client_socket, (UINT)tcp_client_socket_vlan_priority);
2135     }
2136 
2137     /* Create a UDP server socket.  */
2138     status = nx_udp_socket_create(nx_iperf_test_ip, &udp_server_socket, "UDP Server Socket", NX_IP_NORMAL, NX_FRAGMENT_OKAY, 0x80, 5);
2139 
2140     /* Check status.  */
2141     if (status)
2142     {
2143         nx_iperf_test_error_counter++;
2144         return;
2145     }
2146 
2147     /* Create a UDP client socket.  */
2148     status = nx_udp_socket_create(nx_iperf_test_ip, &udp_client_socket, "UDP Client Socket", NX_IP_NORMAL, NX_FRAGMENT_OKAY, 0x80, 5);
2149 
2150     /* Check status.  */
2151     if (status)
2152     {
2153         nx_iperf_test_error_counter++;
2154         return;
2155     }
2156 
2157     if (udp_client_socket_vlan_priority != NX_VLAN_PRIORITY_INVALID)
2158     {
2159         nx_udp_socket_vlan_priority_set(&udp_client_socket, (UINT)udp_client_socket_vlan_priority);
2160     }
2161 
2162     /* Create the HTTP Server.  */
2163     status =  nx_web_http_server_create(&nx_iperf_web_server, "My HTTP Server", ip_ptr, NX_WEB_HTTP_SERVER_PORT, &nx_iperf_ram_disk, http_stack, http_stack_size, pool_ptr, nx_iperf_authentication_check, nx_iperf_get_notify);
2164 
2165     /* Check the status.  */
2166     if (status)
2167     {
2168 
2169         /* Update the error counter and return.  */
2170         nx_iperf_test_error_counter++;
2171         return;
2172     }
2173 
2174     /* Start the HTTP Server.  */
2175     status =  nx_web_http_server_start(&nx_iperf_web_server);
2176 
2177     /* Check the status.  */
2178     if (status)
2179     {
2180 
2181         /* Update the error counter and return.  */
2182         nx_iperf_test_error_counter++;
2183         return;
2184     }
2185 }
2186 
nx_iperf_authentication_check(struct NX_WEB_HTTP_SERVER_STRUCT * server_ptr,UINT request_type,CHAR * resource,CHAR ** name,CHAR ** password,CHAR ** realm)2187 UINT    nx_iperf_authentication_check(struct NX_WEB_HTTP_SERVER_STRUCT *server_ptr, UINT request_type, CHAR *resource, CHAR **name, CHAR **password, CHAR **realm)
2188 {
2189 
2190 
2191 #ifdef NX_IPERF_AUTH_ENABLE
2192 
2193     NX_PARAMETER_NOT_USED(server_ptr);
2194     NX_PARAMETER_NOT_USED(request_type);
2195     NX_PARAMETER_NOT_USED(resource);
2196     *name =  "PlaceholderName";
2197     *password = "PlaceholderPassword";
2198     *realm =  "test.htm";
2199 
2200     return(NX_WEB_HTTP_BASIC_AUTHENTICATE);
2201 #else
2202     NX_PARAMETER_NOT_USED(server_ptr);
2203     NX_PARAMETER_NOT_USED(request_type);
2204     NX_PARAMETER_NOT_USED(resource);
2205     NX_PARAMETER_NOT_USED(name);
2206     NX_PARAMETER_NOT_USED(password);
2207     NX_PARAMETER_NOT_USED(realm);
2208 
2209     return(NX_SUCCESS);
2210 #endif
2211 }
2212 
2213 static CHAR device_ip_addr_string[40];
nx_iperf_get_ip_addr_string(NXD_ADDRESS * ip_address,UINT * string_length)2214 char *nx_iperf_get_ip_addr_string(NXD_ADDRESS *ip_address, UINT *string_length)
2215 {
2216 UINT length = 0;
2217 #ifdef FEATURE_NX_IPV6
2218 UINT i;
2219 #endif
2220 
2221     memset(device_ip_addr_string, 0, sizeof(device_ip_addr_string));
2222 
2223 #ifdef FEATURE_NX_IPV6
2224     if (ip_address -> nxd_ip_version == NX_IP_VERSION_V6)
2225     {
2226         for (i = 0; i < 4; i ++)
2227         {
2228             length += _nx_utility_uint_to_string((UINT)ip_address -> nxd_ip_address.v6[i] >> 16, 16, &device_ip_addr_string[length], sizeof(device_ip_addr_string) - length);
2229             device_ip_addr_string[length++] = ':';
2230             length += _nx_utility_uint_to_string((UINT)ip_address -> nxd_ip_address.v6[i] & 0xFFFF, 16, &device_ip_addr_string[length], sizeof(device_ip_addr_string) - length);
2231             if (i != 3)
2232             {
2233                 device_ip_addr_string[length++] = ':';
2234             }
2235         }
2236     }
2237     else
2238 #endif
2239     {
2240 #ifndef NX_DISABLE_IPV4
2241         length = _nx_utility_uint_to_string(ip_address -> nxd_ip_address.v4 >> 24, 10, device_ip_addr_string, sizeof(device_ip_addr_string) - length);
2242         device_ip_addr_string[length++] = '.';
2243         length += _nx_utility_uint_to_string(((ip_address -> nxd_ip_address.v4 >> 16) & 0xFF), 10, &device_ip_addr_string[length], sizeof(device_ip_addr_string) - length);
2244         device_ip_addr_string[length++] = '.';
2245         length += _nx_utility_uint_to_string(((ip_address -> nxd_ip_address.v4 >> 8) & 0xFF), 10, &device_ip_addr_string[length], sizeof(device_ip_addr_string) - length);
2246         device_ip_addr_string[length++] = '.';
2247         length += _nx_utility_uint_to_string((ip_address -> nxd_ip_address.v4 & 0xFF), 10, &device_ip_addr_string[length], sizeof(device_ip_addr_string) - length);
2248 #endif
2249     }
2250 
2251     *string_length = length;
2252     return device_ip_addr_string;
2253 }
2254 
2255 /* This function takes the token/value pair, and stores the information in the ctrl_info_ptr. */
2256 /* For example, a token/value pair can be: "TestType"="TC_Rx", and the ctrl_info_ptr stores the information. */
nx_iperf_check_token_value(char * token,char * value_ptr,ctrl_info * ctrl_info_ptr)2257 static void nx_iperf_check_token_value(char *token, char *value_ptr, ctrl_info *ctrl_info_ptr)
2258 {
2259 UINT val;
2260 UINT i;
2261 UINT token_length = 0;
2262 UINT value_length = 0;
2263 UINT status;
2264 
2265     /* Check string length of token.  */
2266     status = _nx_utility_string_length_check(token, &token_length, NX_MAX_STRING_LENGTH);
2267     if (status)
2268     {
2269         return;
2270     }
2271 
2272     /* Check string length of value.  */
2273     if (value_ptr)
2274     {
2275         status = _nx_utility_string_length_check(value_ptr, &value_length, NX_MAX_STRING_LENGTH);
2276         if (status)
2277         {
2278             return;
2279         }
2280     }
2281 
2282     /* Check for name. */
2283     if ((token_length == sizeof("TestType") - 1 ) &&
2284         (memcmp(token, "TestType", token_length) == 0))
2285     {
2286         /* Check for value. */
2287         ctrl_info_ptr -> ctrl_sign = UNKNOWN_TEST;
2288         if (value_ptr)
2289         {
2290             if ((value_length == sizeof(TCP_Rx) - 1 ) &&
2291                 (memcmp(value_ptr, TCP_Rx, value_length) == 0))
2292             {
2293                 ctrl_info_ptr -> ctrl_sign = TCP_RX_START;
2294             }
2295             else if ((value_length == sizeof(TCP_Tx) - 1 ) &&
2296                      (memcmp(value_ptr, TCP_Tx, value_length) == 0))
2297             {
2298                 ctrl_info_ptr -> ctrl_sign = TCP_TX_START;
2299             }
2300             else if ((value_length == sizeof(UDP_Rx) - 1 ) &&
2301                      (memcmp(value_ptr, UDP_Rx, value_length) == 0))
2302             {
2303                 ctrl_info_ptr -> ctrl_sign = UDP_RX_START;
2304             }
2305             else if ((value_length == sizeof(UDP_Tx) - 1 ) &&
2306                      (memcmp(value_ptr, UDP_Tx, value_length) == 0))
2307             {
2308                 ctrl_info_ptr -> ctrl_sign = UDP_TX_START;
2309             }
2310         }
2311     }
2312     else if ((token_length == (sizeof("ip") - 1)) &&
2313              (memcmp(token, "ip", token_length) == 0))
2314     {
2315     char *ptr = value_ptr;
2316     int   colon_sum, colon_count;
2317         ctrl_info_ptr -> ip = 0;
2318         val = 0;
2319         colon_sum = 0;
2320         colon_count = 0;
2321         if (value_ptr == 0)
2322         {
2323             ctrl_info_ptr -> version = NX_IP_VERSION_V4;
2324         }
2325         while (ptr && (*ptr != 0))
2326         {
2327             if (*ptr == '.')
2328             {
2329                 ctrl_info_ptr -> version = NX_IP_VERSION_V4;
2330                 while (value_ptr && (*value_ptr != 0))
2331                 {
2332                     if (*value_ptr == '.')
2333                     {
2334                         ctrl_info_ptr -> ip = (ctrl_info_ptr -> ip << 8) + val;
2335                         val = 0;
2336                     }
2337                     else
2338                     {
2339                         val = val * 10 + ((UINT)(*value_ptr - '0'));
2340                     }
2341                     value_ptr++;
2342                 }
2343                 ctrl_info_ptr -> ip = (ctrl_info_ptr -> ip << 8) + val;
2344                 break;
2345             }
2346             else if (*ptr == '%')
2347             {
2348                 if ((*(++ptr) == '3') && (*(++ptr) == 'A'))
2349                 {
2350                     ctrl_info_ptr -> version = NX_IP_VERSION_V6;
2351                     colon_sum++;
2352                 }
2353             }
2354             ptr++;
2355         }
2356         while (value_ptr && (*value_ptr != 0) && (colon_sum != 0))
2357         {
2358             if (*value_ptr == '%')
2359             {
2360                 if ((*(++value_ptr) == '3') && (*(++value_ptr) == 'A'))
2361                 {
2362                     ctrl_info_ptr -> ipv6[colon_count / 2] = (ctrl_info_ptr -> ipv6[colon_count / 2] << 16) + val;
2363                     colon_count++;
2364 
2365                     if (*(value_ptr + 1) == '%')
2366                     {
2367                         value_ptr++;
2368                         if ((*(++value_ptr) == '3') && (*(++value_ptr) == 'A'))
2369                         {
2370                             for (i = 0; i <= (UINT)(7 - colon_sum); i++)
2371                             {
2372                                 ctrl_info_ptr -> ipv6[colon_count / 2] = ctrl_info_ptr -> ipv6[colon_count / 2] << 16;
2373                                 colon_count++;
2374                             }
2375                         }
2376                     }
2377                     val = 0;
2378                 }
2379             }
2380             else
2381             {
2382                 if (*value_ptr >= '0' && *value_ptr <= '9')
2383                 {
2384                     val = val * 16 + ((UINT)(*value_ptr - '0'));
2385                 }
2386                 else if (*value_ptr >= 'a' && *value_ptr <= 'f')
2387                 {
2388                     val = val * 16 + ((UINT)(*value_ptr - 'a')) + 10;
2389                 }
2390                 else if (*value_ptr >= 'A' && *value_ptr <= 'F')
2391                 {
2392                     val = val * 16 + ((UINT)(*value_ptr - 'A')) + 10;
2393                 }
2394             }
2395             value_ptr++;
2396         }
2397         if (ctrl_info_ptr -> version == NX_IP_VERSION_V6)
2398         {
2399             ctrl_info_ptr -> ipv6[3] = (ctrl_info_ptr -> ipv6[3] << 16) + val;
2400         }
2401     }
2402     else if ((token_length == (sizeof("test_time") - 1)) &&
2403              (memcmp(token, "test_time", token_length) == 0))
2404     {
2405         ctrl_info_ptr -> TestTime = 0;
2406         while (value_ptr && (*value_ptr != 0))
2407         {
2408             ctrl_info_ptr -> TestTime = ctrl_info_ptr -> TestTime * 10 + ((UINT)(*value_ptr - '0'));
2409             value_ptr++;
2410         }
2411         ctrl_info_ptr -> TestTime = ctrl_info_ptr -> TestTime * NX_IP_PERIODIC_RATE;
2412     }
2413     else if ((token_length == (sizeof("rate") - 1)) &&
2414              (memcmp(token, "rate", token_length) == 0))
2415     {
2416         ctrl_info_ptr -> Rate = 0;
2417         while (value_ptr && (*value_ptr != 0))
2418         {
2419             ctrl_info_ptr -> Rate = ctrl_info_ptr -> Rate * 10 + ((UINT)(*value_ptr - '0'));
2420             value_ptr++;
2421         }
2422     }
2423     else if ((token_length == (sizeof("size") - 1)) &&
2424              (memcmp(token, "size", token_length) == 0))
2425     {
2426         ctrl_info_ptr -> PacketSize = 0;
2427         while (value_ptr && (*value_ptr != 0))
2428         {
2429             ctrl_info_ptr -> PacketSize = ctrl_info_ptr -> PacketSize * 10 + ((UINT)(*value_ptr - '0'));
2430             value_ptr++;
2431         }
2432     }
2433     else if ((token_length == (sizeof("port") - 1)) &&
2434              (memcmp(token, "port", token_length) == 0))
2435     {
2436         ctrl_info_ptr -> port = 0;
2437         while (value_ptr && (*value_ptr != 0))
2438         {
2439             ctrl_info_ptr -> port = ctrl_info_ptr -> port * 10 + ((UINT)(*value_ptr - '0'));
2440             value_ptr++;
2441         }
2442     }
2443 }
2444 
2445 /* This function parses the incoming HTTP command line.  For each token/value pair, it
2446    invokes the nx_iperf_check_token_value routine to parse the values. */
nx_iperf_parse_command(NX_PACKET * packet_ptr,ctrl_info * ctrl_info_ptr)2447 static void nx_iperf_parse_command(NX_PACKET *packet_ptr, ctrl_info *ctrl_info_ptr)
2448 {
2449 UCHAR *cmd_string = packet_ptr -> nx_packet_prepend_ptr;
2450 UCHAR *token = NX_NULL;
2451 UCHAR *end_cmd;
2452 UCHAR *next_token;
2453 UCHAR *value_ptr;
2454 
2455     /* At this point, cmd_string points to the beginning of the HTTP request,
2456        which takes the form of:
2457        "GET /test.htm?TestType=xxxxx&ip=....&rxed_pkts=xxxx&test_time=xxxx&tputs=xxxx" */
2458 
2459     /* First skip the "Get /test.html?" string. */
2460     cmd_string += (sizeof("GET /test.htm?") - 1);
2461 
2462     /* Find the end of the cmd string, */
2463     end_cmd = cmd_string;
2464     while (end_cmd < packet_ptr -> nx_packet_append_ptr)
2465     {
2466         if (*end_cmd == ' ')
2467         {
2468             break;
2469         }
2470         end_cmd++;
2471     }
2472     *end_cmd = 0;
2473 
2474     /* The first token starts from cmd_string. */
2475     token = cmd_string;
2476     next_token = cmd_string;
2477     while (next_token < end_cmd)
2478     {
2479         /* Find the next token .*/
2480         while (next_token < end_cmd)
2481         {
2482             if (*next_token == '=')
2483             {
2484                 break;
2485             }
2486             next_token++;
2487         }
2488 
2489         if (*next_token == '=')
2490         {
2491             /* Find a name=value pair. Now we need to find the "=" sign. */
2492             *next_token = 0;
2493             value_ptr = next_token + 1;
2494             next_token++;
2495 
2496             while (next_token < end_cmd)
2497             {
2498                 if (*next_token == '&')
2499                 {
2500                     *next_token = 0;
2501 
2502                     break;
2503                 }
2504                 next_token++;
2505             }
2506 
2507             if (value_ptr == next_token)
2508             {
2509                 /* There is no value string.  */
2510                 value_ptr = NX_NULL;
2511             }
2512 
2513             /* Move next_token beyond the NULL terminator. */
2514             next_token++;
2515 
2516 
2517             nx_iperf_check_token_value((char *)token, (char *)value_ptr, ctrl_info_ptr);
2518         }
2519         token = next_token;
2520     }
2521 
2522     /* Finished parsing the whole command. */
2523 }
2524 
2525 static CHAR mytempstring[30];
nx_iperf_print_main_test_window(NX_WEB_HTTP_SERVER * server_ptr)2526 static VOID nx_iperf_print_main_test_window(NX_WEB_HTTP_SERVER *server_ptr)
2527 {
2528 NX_PACKET  *resp_packet_ptr;
2529 UINT        status;
2530 NXD_ADDRESS server_ip;
2531 UINT        length = 0;
2532 CHAR       *ip_addr_string;
2533 
2534 #ifdef FEATURE_NX_IPV6
2535 UINT  address_index;
2536 ULONG prefix_length;
2537 UINT  interface_index;
2538 #endif
2539 
2540     status = nx_packet_allocate(server_ptr -> nx_web_http_server_packet_pool_ptr, &resp_packet_ptr, NX_TCP_PACKET, NX_WAIT_FOREVER);
2541 
2542     /* write HTML code into the packet */
2543     /* htmlwrite(p,s,l)  (nx_packet_data_append(p,s,l, server_ptr-> nx_web_http_server_packet_pool_ptr,NX_WAIT_FOREVER)) */
2544 
2545     status += htmlwrite(resp_packet_ptr, outtermosttable, sizeof(outtermosttable) - 1);
2546     status += htmlwrite(resp_packet_ptr, maintabletag, sizeof(maintabletag) - 1);
2547 
2548     /* print the IP address line. */
2549     status += htmlwrite(resp_packet_ptr, h1line1, sizeof(h1line1) - 1);
2550 
2551 #ifndef NX_DISABLE_IPV4
2552     server_ip.nxd_ip_version = NX_IP_VERSION_V4;
2553     server_ip.nxd_ip_address.v4 = nx_iperf_test_ip -> nx_ip_interface[0].nx_interface_ip_address;
2554     ip_addr_string = nx_iperf_get_ip_addr_string(&server_ip, &length);
2555     status += htmlwrite(resp_packet_ptr, ip_addr_string, length);
2556     status += htmlwrite(resp_packet_ptr, "\n", sizeof("\n") - 1);
2557 #endif
2558 
2559 #ifdef FEATURE_NX_IPV6
2560     address_index = 0;
2561 
2562     /* Loop to output the IPv6 address.  */
2563     while (1)
2564     {
2565 
2566         /* Get the IPv6 address.  */
2567         if (nxd_ipv6_address_get(nx_iperf_test_ip, address_index, &server_ip, &prefix_length, &interface_index) == NX_SUCCESS)
2568         {
2569             ip_addr_string = nx_iperf_get_ip_addr_string(&server_ip, &length);
2570             status += htmlwrite(resp_packet_ptr, ip_addr_string, length);
2571             status += htmlwrite(resp_packet_ptr, "\n", sizeof("\n") - 1);
2572             address_index++;
2573         }
2574         else
2575         {
2576             break;
2577         }
2578     }
2579 #endif
2580 
2581     status += htmlwrite(resp_packet_ptr, h1line2, sizeof(h1line2) - 1);
2582     status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
2583     status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
2584     status += nx_web_http_server_callback_packet_send(server_ptr, resp_packet_ptr);
2585 
2586     if (status)
2587     {
2588         nx_packet_release(resp_packet_ptr);
2589         nx_iperf_test_error_counter++;
2590     }
2591 
2592     status = nx_packet_allocate(server_ptr -> nx_web_http_server_packet_pool_ptr, &resp_packet_ptr, NX_TCP_PACKET, NX_WAIT_FOREVER);
2593     status += htmlwrite(resp_packet_ptr, udptxsubmittag1, sizeof(udptxsubmittag1) - 1);
2594     ip_addr_string = nx_iperf_get_ip_addr_string(&udp_tx_ip_address, &length);
2595     status += htmlwrite(resp_packet_ptr, ip_addr_string, length);
2596     status += htmlwrite(resp_packet_ptr, udptxsubmittag2, sizeof(udptxsubmittag2) - 1);
2597     length = _nx_utility_uint_to_string(udp_tx_port, 10, mytempstring, sizeof(mytempstring));
2598     status += htmlwrite(resp_packet_ptr, mytempstring, length);
2599     status += htmlwrite(resp_packet_ptr, udptxsubmittag3, sizeof(udptxsubmittag3) - 1);
2600     length = _nx_utility_uint_to_string(udp_tx_test_time, 10, mytempstring, sizeof(mytempstring));
2601     status += htmlwrite(resp_packet_ptr, mytempstring, length);
2602     status += htmlwrite(resp_packet_ptr, udptxsubmittag4, sizeof(udptxsubmittag4) - 1);
2603     length = _nx_utility_uint_to_string(udp_tx_packet_size, 10, mytempstring, sizeof(mytempstring));
2604     status += htmlwrite(resp_packet_ptr, mytempstring, length);
2605     status += htmlwrite(resp_packet_ptr, udptxsubmittag5, sizeof(udptxsubmittag5) - 1);
2606     status += nx_web_http_server_callback_packet_send(server_ptr, resp_packet_ptr);
2607 
2608     if (status)
2609     {
2610         nx_packet_release(resp_packet_ptr);
2611         nx_iperf_test_error_counter++;
2612     }
2613 
2614     status = nx_packet_allocate(server_ptr -> nx_web_http_server_packet_pool_ptr, &resp_packet_ptr, NX_TCP_PACKET, NX_WAIT_FOREVER);
2615     status += htmlwrite(resp_packet_ptr, udprxsubmittag1, sizeof(udprxsubmittag1) - 1);
2616     length = _nx_utility_uint_to_string(udp_rx_test_time, 10, mytempstring, sizeof(mytempstring));
2617     status += htmlwrite(resp_packet_ptr, mytempstring, length);
2618     status += htmlwrite(resp_packet_ptr, udprxsubmittag2, sizeof(udprxsubmittag2) - 1);
2619     status += nx_web_http_server_callback_packet_send(server_ptr, resp_packet_ptr);
2620 
2621     if (status)
2622     {
2623         nx_packet_release(resp_packet_ptr);
2624         nx_iperf_test_error_counter++;
2625     }
2626 
2627     status = nx_packet_allocate(server_ptr -> nx_web_http_server_packet_pool_ptr, &resp_packet_ptr, NX_TCP_PACKET, NX_WAIT_FOREVER);
2628     status += htmlwrite(resp_packet_ptr, tcptxsubmittag1, sizeof(tcptxsubmittag1) - 1);
2629     ip_addr_string = nx_iperf_get_ip_addr_string(&tcp_tx_ip_address, &length);
2630     status += htmlwrite(resp_packet_ptr, ip_addr_string, length);
2631     status += htmlwrite(resp_packet_ptr, tcptxsubmittag2, sizeof(tcptxsubmittag2) - 1);
2632     length = _nx_utility_uint_to_string(tcp_tx_port, 10, mytempstring, sizeof(mytempstring));
2633     status += htmlwrite(resp_packet_ptr, mytempstring, length);
2634     status += htmlwrite(resp_packet_ptr, tcptxsubmittag3, sizeof(tcptxsubmittag3) - 1);
2635     length = _nx_utility_uint_to_string(tcp_tx_test_time, 10, mytempstring, sizeof(mytempstring));
2636     status += htmlwrite(resp_packet_ptr, mytempstring, length);
2637     status += htmlwrite(resp_packet_ptr, tcptxsubmittag4, sizeof(tcptxsubmittag4) - 1);
2638     status += nx_web_http_server_callback_packet_send(server_ptr, resp_packet_ptr);
2639 
2640     if (status)
2641     {
2642         nx_packet_release(resp_packet_ptr);
2643         nx_iperf_test_error_counter++;
2644     }
2645 
2646     status = nx_packet_allocate(server_ptr -> nx_web_http_server_packet_pool_ptr, &resp_packet_ptr, NX_TCP_PACKET, NX_WAIT_FOREVER);
2647     status += htmlwrite(resp_packet_ptr, tcprxsubmittag1, sizeof(tcprxsubmittag1) - 1);
2648     length = _nx_utility_uint_to_string(tcp_rx_test_time, 10, mytempstring, sizeof(mytempstring));
2649     status += htmlwrite(resp_packet_ptr, mytempstring, length);
2650     status += htmlwrite(resp_packet_ptr, tcprxsubmittag2, sizeof(tcprxsubmittag2) - 1);
2651     status += nx_web_http_server_callback_packet_send(server_ptr, resp_packet_ptr);
2652 
2653     if (status)
2654     {
2655         nx_packet_release(resp_packet_ptr);
2656         nx_iperf_test_error_counter++;
2657     }
2658 
2659     status = nx_packet_allocate(server_ptr -> nx_web_http_server_packet_pool_ptr, &resp_packet_ptr, NX_TCP_PACKET, NX_WAIT_FOREVER);
2660     status += htmlwrite(resp_packet_ptr, tableendtag, sizeof(tableendtag) - 1);
2661     status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
2662 
2663     status += nx_web_http_server_callback_packet_send(server_ptr, resp_packet_ptr);
2664 
2665     if (status)
2666     {
2667         nx_packet_release(resp_packet_ptr);
2668         nx_iperf_test_error_counter++;
2669     }
2670 }
2671 
nx_iperf_print_end_of_page(NX_WEB_HTTP_SERVER * server_ptr)2672 static void nx_iperf_print_end_of_page(NX_WEB_HTTP_SERVER *server_ptr)
2673 {
2674 UINT       status;
2675 NX_PACKET *resp_packet_ptr;
2676 
2677     status = nx_packet_allocate(server_ptr -> nx_web_http_server_packet_pool_ptr, &resp_packet_ptr, NX_TCP_PACKET, NX_WAIT_FOREVER);
2678 
2679     /* End of the page. */
2680     status += htmlwrite(resp_packet_ptr, tableendtag, sizeof(tableendtag) - 1); /* outtermost table. */
2681     status += htmlwrite(resp_packet_ptr, doublebr, sizeof(doublebr) - 1);
2682     status += htmlwrite(resp_packet_ptr, centerendtag, sizeof(centerendtag) - 1);
2683     status += htmlwrite(resp_packet_ptr, bodyendtag, sizeof(bodyendtag) - 1);
2684     status += htmlwrite(resp_packet_ptr, htmlendtag, sizeof(htmlendtag) - 1);
2685 
2686     status += nx_web_http_server_callback_packet_send(server_ptr, resp_packet_ptr);
2687 
2688     if (status)
2689     {
2690         nx_packet_release(resp_packet_ptr);
2691         nx_iperf_test_error_counter++;
2692     }
2693 }
2694 
nx_iperf_print_header(NX_WEB_HTTP_SERVER * server_ptr)2695 static void nx_iperf_print_header(NX_WEB_HTTP_SERVER *server_ptr)
2696 {
2697 NX_PACKET *resp_packet_ptr;
2698 UINT       status;
2699 
2700     status = nx_packet_allocate(server_ptr -> nx_web_http_server_packet_pool_ptr,
2701                                 &resp_packet_ptr,
2702                                 NX_TCP_PACKET,
2703                                 NX_WAIT_FOREVER);
2704 
2705 
2706     /* write HTML code into the packet */
2707     /* htmlwrite(p,s,l)  (nx_packet_data_append(p,s,l, server_ptr-> nx_web_http_server_packet_pool_ptr,NX_WAIT_FOREVER)) */
2708 
2709     status += htmlwrite(resp_packet_ptr, htmlresponse, sizeof(htmlresponse) - 1);
2710     status += htmlwrite(resp_packet_ptr, htmltag, sizeof(htmltag) - 1);
2711     status += htmlwrite(resp_packet_ptr, titleline, sizeof(titleline) - 1);
2712     status += htmlwrite(resp_packet_ptr, bodytag, sizeof(bodytag) - 1);
2713     status += htmlwrite(resp_packet_ptr, logo_area, sizeof(logo_area) - 1);
2714     status += htmlwrite(resp_packet_ptr, hrline, sizeof(hrline) - 1);
2715     status += htmlwrite(resp_packet_ptr, centertag, sizeof(centertag) - 1);
2716 
2717     status += nx_web_http_server_callback_packet_send(server_ptr, resp_packet_ptr);
2718 
2719     if (status)
2720     {
2721         nx_packet_release(resp_packet_ptr);
2722         nx_iperf_test_error_counter++;
2723     }
2724 }
2725 
2726 
nx_iperf_print_test_inprogress(NX_WEB_HTTP_SERVER * server_ptr,char * msg)2727 static void nx_iperf_print_test_inprogress(NX_WEB_HTTP_SERVER *server_ptr, char *msg)
2728 {
2729 NX_PACKET *resp_packet_ptr;
2730 UINT       status;
2731 UINT       length = 0;
2732 
2733     status = nx_packet_allocate(server_ptr -> nx_web_http_server_packet_pool_ptr,
2734                                 &resp_packet_ptr,
2735                                 NX_TCP_PACKET,
2736                                 NX_WAIT_FOREVER);
2737     status += htmlwrite(resp_packet_ptr, tdcentertag, sizeof(tdcentertag) - 1);
2738     status += htmlwrite(resp_packet_ptr, fontcolortag, sizeof(fontcolortag) - 1);
2739     _nx_utility_string_length_check(msg, &length, NX_MAX_STRING_LENGTH);
2740     status += htmlwrite(resp_packet_ptr, msg, length);
2741     status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
2742     status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
2743 
2744     status += nx_web_http_server_callback_packet_send(server_ptr, resp_packet_ptr);
2745 
2746     if (status)
2747     {
2748         nx_packet_release(resp_packet_ptr);
2749         nx_iperf_test_error_counter++;
2750     }
2751 }
2752 
nx_iperf_print_empty_line(NX_WEB_HTTP_SERVER * server_ptr)2753 static void nx_iperf_print_empty_line(NX_WEB_HTTP_SERVER *server_ptr)
2754 {
2755 NX_PACKET *resp_packet_ptr;
2756 UINT       status = 0;
2757 
2758     status += nx_packet_allocate(server_ptr -> nx_web_http_server_packet_pool_ptr, &resp_packet_ptr, NX_TCP_PACKET, NX_WAIT_FOREVER);
2759     status += htmlwrite(resp_packet_ptr, choosetesttag, sizeof(choosetesttag) - 1);
2760     status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
2761     status += nx_web_http_server_callback_packet_send(server_ptr, resp_packet_ptr);
2762 
2763     if (status)
2764     {
2765         nx_packet_release(resp_packet_ptr);
2766         nx_iperf_test_error_counter++;
2767     }
2768 }
2769 
nx_iperf_send_test_result_info(NX_WEB_HTTP_SERVER * server_ptr)2770 static void nx_iperf_send_test_result_info(NX_WEB_HTTP_SERVER *server_ptr)
2771 {
2772 char       *response_string = NX_NULL;
2773 NXD_ADDRESS peer_ip_address;
2774 
2775     if (nx_iperf_ctrl_info.TestStatus == 0)
2776     {
2777         nx_iperf_print_empty_line(server_ptr);
2778 
2779         /* No test is running.  Do nothing. */
2780         return;
2781     }
2782     else if (nx_iperf_ctrl_info.TestStatus == 1)
2783     {
2784         switch (nx_iperf_ctrl_info.ctrl_sign)
2785         {
2786         case UDP_RX_START:
2787             response_string = "UDP Receive Test started.  After the iperf test finishes, click <a href=\"/\">here</a> to get results.";
2788             break;
2789         case TCP_RX_START:
2790             response_string = "TCP Receive Test started.  After the iperf test finishes, click <a href=\"/\">here</a> to get results.";
2791             break;
2792         case UDP_TX_START:
2793             response_string = "UDP Transmit Test starts in 2 seconds.  After iperf test is done, click <a href=\"/\">here</a> to get results.";
2794             break;
2795         case TCP_TX_START:
2796             response_string = "TCP Transmit test starts in 2 seconds.  After iperf test is done, click <a href=\"/\">here</a> to get results.";
2797             break;
2798         }
2799         nx_iperf_print_test_inprogress(server_ptr, response_string);
2800     }
2801     else if (nx_iperf_ctrl_info.TestStatus == 2)
2802     {
2803 
2804         /* Check the ThroughPut value and StartTime,
2805            if the StartTime is zero means no connection.
2806            if throughput value is zero means maybe user interrupt the test.
2807            recalculate the ThroughPut before Interrupt.  */
2808         if ((!nx_iperf_ctrl_info.ThroughPut) && (nx_iperf_ctrl_info.StartTime))
2809         {
2810 
2811             /* Calculate the run time and Throughput(Mbps).  */
2812             nx_iperf_ctrl_info.RunTime = tx_time_get() - nx_iperf_ctrl_info.StartTime;
2813 
2814             /* Check the run time.  */
2815             if (nx_iperf_ctrl_info.RunTime > nx_iperf_ctrl_info.TestTime)
2816             {
2817                 nx_iperf_ctrl_info.RunTime = nx_iperf_ctrl_info.TestTime;
2818             }
2819 
2820             /* Calculate Throughput(Mbps).  */
2821             nx_iperf_ctrl_info.ThroughPut = (nx_iperf_ctrl_info.BytesTxed + nx_iperf_ctrl_info.BytesRxed) / nx_iperf_ctrl_info.RunTime * NX_IP_PERIODIC_RATE / 125000;
2822         }
2823 
2824         peer_ip_address.nxd_ip_version = nx_iperf_ctrl_info.version;
2825 
2826 #ifdef FEATURE_NX_IPV6
2827         if (peer_ip_address.nxd_ip_version == NX_IP_VERSION_V6)
2828         {
2829             peer_ip_address.nxd_ip_address.v6[0] = nx_iperf_ctrl_info.ipv6[0];
2830             peer_ip_address.nxd_ip_address.v6[1] = nx_iperf_ctrl_info.ipv6[1];
2831             peer_ip_address.nxd_ip_address.v6[2] = nx_iperf_ctrl_info.ipv6[2];
2832             peer_ip_address.nxd_ip_address.v6[3] = nx_iperf_ctrl_info.ipv6[3];
2833         }
2834         else
2835 #endif
2836         {
2837 #ifndef NX_DISABLE_IPV4
2838             peer_ip_address.nxd_ip_address.v4 = nx_iperf_ctrl_info.ip;
2839 #endif
2840         }
2841 
2842         switch (nx_iperf_ctrl_info.ctrl_sign)
2843         {
2844         case UDP_RX_START:
2845             nx_iperf_print_udp_rx_results(server_ptr, &peer_ip_address);
2846             break;
2847         case TCP_RX_START:
2848             nx_iperf_print_tcp_rx_results(server_ptr, &peer_ip_address);
2849             break;
2850         case UDP_TX_START:
2851             nx_iperf_print_udp_tx_results(server_ptr, &peer_ip_address);
2852             break;
2853         case TCP_TX_START:
2854             nx_iperf_print_tcp_tx_results(server_ptr, &peer_ip_address);
2855             break;
2856         }
2857         memset(&nx_iperf_ctrl_info, 0, sizeof(nx_iperf_ctrl_info));
2858     }
2859 }
2860 
nx_iperf_get_notify(NX_WEB_HTTP_SERVER * server_ptr,UINT request_type,CHAR * resource,NX_PACKET * packet_ptr)2861 UINT    nx_iperf_get_notify(NX_WEB_HTTP_SERVER *server_ptr, UINT request_type, CHAR *resource, NX_PACKET *packet_ptr)
2862 {
2863 ctrl_info new_cmd;
2864 UINT      status;
2865 ULONG     port;
2866 UINT      length;
2867 
2868     NX_PARAMETER_NOT_USED(request_type);
2869 
2870     memset(&new_cmd, 0, sizeof(ctrl_info));
2871 
2872     /* Get peer IP address.  */
2873     status = nxd_tcp_socket_peer_info_get(&server_ptr -> nx_web_http_server_current_session_ptr -> nx_tcp_session_socket, &udp_tx_ip_address, &port);
2874     if (status)
2875     {
2876         return(status);
2877     }
2878     tcp_tx_ip_address = udp_tx_ip_address;
2879 
2880     /* Disconnect to mark the end of respond. */
2881 #ifndef NX_WEB_HTTP_KEEPALIVE_DISABLE
2882     server_ptr -> nx_web_http_server_keepalive = NX_FALSE;
2883 #endif
2884 
2885     _nx_utility_string_length_check(resource, &length, NX_WEB_HTTP_MAX_RESOURCE);
2886     if (((length == sizeof("/test.htm") - 1) && (memcmp(resource, "/test.htm", length) == 0)) ||
2887         ((length == 1) && *resource == '/'))
2888     {
2889 
2890         /* Printer the header.  */
2891         nx_iperf_print_header(server_ptr);
2892 
2893         /* Parse the command.  */
2894         nx_iperf_parse_command(packet_ptr, &new_cmd);
2895 
2896         /* If the current test is still running, and we have a new command,
2897            we need to clean up the current one. */
2898         if (new_cmd.ctrl_sign)
2899         {
2900             if ((nx_iperf_ctrl_info.TestStatus != 0) || ((nx_iperf_ctrl_info.ctrl_sign & NX_IPERF_CLEAN_UP_MASK) == 1))
2901             {
2902 
2903                 switch (nx_iperf_ctrl_info.ctrl_sign)
2904                 {
2905                 case TCP_RX_START:
2906                     nx_iperf_tcp_rx_cleanup();
2907                     break;
2908                 case TCP_TX_START:
2909                     nx_iperf_tcp_tx_cleanup();
2910                     break;
2911                 case UDP_RX_START:
2912                     nx_iperf_udp_rx_cleanup();
2913                     break;
2914                 case UDP_TX_START:
2915                     nx_iperf_udp_tx_cleanup();
2916                     break;
2917                 default:
2918                     break;
2919                 }
2920                 memset(&nx_iperf_ctrl_info, 0, sizeof(nx_iperf_ctrl_info));
2921             }
2922 
2923             memcpy(&nx_iperf_ctrl_info, &new_cmd, sizeof(ctrl_info)); /* Use case of memcpy is verified. */
2924 
2925             /* Create the test thread and run the test.  */
2926             nx_iperf_test_info_parse(&nx_iperf_ctrl_info);
2927 
2928             /* Update the TestStatus.  */
2929             nx_iperf_ctrl_info.TestStatus = 1;
2930         }
2931 
2932         /* Check the status, set the default value.  */
2933         if (nx_iperf_ctrl_info.TestStatus == 0)
2934         {
2935 
2936             /* Check the IP version.  */
2937             if (udp_tx_ip_address.nxd_ip_version == NX_IP_VERSION_V4)
2938             {
2939                 udp_tx_packet_size = 1470;
2940             }
2941             else
2942             {
2943                 udp_tx_packet_size = 1450;
2944             }
2945         }
2946 
2947         /* Print the main window.  */
2948         nx_iperf_print_main_test_window(server_ptr);
2949 
2950         /* If there is a new command, show the result of launching the command. */
2951         nx_iperf_send_test_result_info(server_ptr);
2952 
2953         nx_iperf_print_end_of_page(server_ptr);
2954 
2955         /* Update the TestStatus.  */
2956         if (nx_iperf_ctrl_info.TestStatus == 1)
2957         {
2958             nx_iperf_ctrl_info.TestStatus = 2;
2959         }
2960 
2961         return(NX_WEB_HTTP_CALLBACK_COMPLETED);
2962     }
2963     /* send the logo files */
2964     if ((length == sizeof("/nxlogo.png") - 1) && (memcmp(resource, "/nxlogo.png", length) == 0))
2965     {
2966         nx_iperf_send_image(server_ptr, (UCHAR *)nxlogo_png, nxlogo_png_size);
2967         return(NX_WEB_HTTP_CALLBACK_COMPLETED);
2968     }
2969 
2970     if ((length == sizeof("/mslogo.jpg") - 1) && (memcmp(resource, "/mslogo.jpg", length) == 0))
2971     {
2972         nx_iperf_send_image(server_ptr, (UCHAR *)mslogo_jpg, mslogo_jpg_size);
2973         return(NX_WEB_HTTP_CALLBACK_COMPLETED);
2974     }
2975 
2976     return(NX_SUCCESS);
2977 }
2978 
nx_iperf_send_image(NX_WEB_HTTP_SERVER * server_ptr,UCHAR * img,UINT imgsize)2979 static void nx_iperf_send_image(NX_WEB_HTTP_SERVER *server_ptr, UCHAR *img, UINT imgsize)
2980 {
2981 
2982 UINT       remaining;
2983 UCHAR     *position;
2984 UINT       max_size;
2985 UINT       status;
2986 NX_PACKET *resp_packet_ptr;
2987 
2988     /* Generate HTTP header.  */
2989     status = nx_web_http_server_callback_generate_response_header(server_ptr,
2990                                                                   &resp_packet_ptr, NX_WEB_HTTP_STATUS_OK, imgsize, "image/jpeg", NX_NULL);
2991     if (status)
2992     {
2993         return;
2994     }
2995 
2996     status = nx_web_http_server_callback_packet_send(server_ptr, resp_packet_ptr);
2997     if (status)
2998     {
2999         nx_packet_release(resp_packet_ptr);
3000         return;
3001     }
3002 
3003     status = nx_tcp_socket_mss_get(&(server_ptr -> nx_web_http_server_current_session_ptr -> nx_tcp_session_socket), (ULONG *)&max_size);
3004     if (status)
3005     {
3006         return;
3007     }
3008 
3009     remaining = imgsize;
3010     position = img;
3011     while (remaining)
3012     {
3013         if (remaining > max_size)
3014         {
3015             nx_web_http_server_callback_data_send(server_ptr, (void *)position, max_size);
3016             position += max_size;
3017             remaining -= max_size;
3018         }
3019         else
3020         {
3021             nx_web_http_server_callback_data_send(server_ptr, (void *)position, remaining);
3022             remaining = 0;
3023         }
3024     }
3025 }
3026 
3027 
nx_iperf_test_info_parse(ctrl_info * iperf_ctrlInfo_ptr)3028 void  nx_iperf_test_info_parse(ctrl_info *iperf_ctrlInfo_ptr)
3029 {
3030 
3031     /* Check the sign and set the related parameters.  */
3032     switch ((iperf_ctrlInfo_ptr -> ctrl_sign) & NX_IPERF_CTRL_SIGN_MASK)
3033     {
3034 
3035     case TCP_RX_START:
3036     {
3037         if (iperf_ctrlInfo_ptr -> TestTime == 0)
3038         {
3039             iperf_ctrlInfo_ptr -> TestTime = 10 * NX_IP_PERIODIC_RATE;
3040         }
3041         tcp_rx_test_time = (UINT)((iperf_ctrlInfo_ptr -> TestTime) / NX_IP_PERIODIC_RATE);
3042 
3043         nx_iperf_tcp_rx_test(nx_iperf_stack_area, nx_iperf_stack_area_size);
3044         break;
3045     }
3046 
3047     case TCP_TX_START:
3048     {
3049 
3050         if (iperf_ctrlInfo_ptr -> TestTime == 0)
3051         {
3052             iperf_ctrlInfo_ptr -> TestTime = 10 * NX_IP_PERIODIC_RATE;
3053         }
3054         tcp_tx_test_time = (UINT)((iperf_ctrlInfo_ptr -> TestTime) / NX_IP_PERIODIC_RATE);
3055 
3056         /* Set the transmit ip address.  */
3057         if (iperf_ctrlInfo_ptr -> version == NX_IP_VERSION_V4)
3058         {
3059 #ifndef NX_DISABLE_IPV4
3060             tcp_tx_ip_address.nxd_ip_version = NX_IP_VERSION_V4;
3061             tcp_tx_ip_address.nxd_ip_address.v4 = iperf_ctrlInfo_ptr -> ip;
3062 #else
3063             break;
3064 #endif
3065         }
3066 
3067 #ifdef FEATURE_NX_IPV6
3068         else
3069         {
3070             tcp_tx_ip_address.nxd_ip_version = NX_IP_VERSION_V6;
3071             tcp_tx_ip_address.nxd_ip_address.v6[0] = iperf_ctrlInfo_ptr -> ipv6[0];
3072             tcp_tx_ip_address.nxd_ip_address.v6[1] = iperf_ctrlInfo_ptr -> ipv6[1];
3073             tcp_tx_ip_address.nxd_ip_address.v6[2] = iperf_ctrlInfo_ptr -> ipv6[2];
3074             tcp_tx_ip_address.nxd_ip_address.v6[3] = iperf_ctrlInfo_ptr -> ipv6[3];
3075         }
3076 #endif
3077         tcp_tx_port = iperf_ctrlInfo_ptr -> port;
3078 
3079         nx_iperf_tcp_tx_test(nx_iperf_stack_area, nx_iperf_stack_area_size);
3080         break;
3081     }
3082 
3083     case UDP_RX_START:
3084     {
3085         if (iperf_ctrlInfo_ptr -> TestTime == 0)
3086         {
3087             iperf_ctrlInfo_ptr -> TestTime = 10 * NX_IP_PERIODIC_RATE;
3088         }
3089         udp_rx_test_time = (UINT)((iperf_ctrlInfo_ptr -> TestTime) / NX_IP_PERIODIC_RATE);
3090 
3091         nx_iperf_udp_rx_test(nx_iperf_stack_area, nx_iperf_stack_area_size);
3092         break;
3093     }
3094 
3095     case UDP_TX_START:
3096     {
3097         if (iperf_ctrlInfo_ptr -> TestTime == 0)
3098         {
3099             iperf_ctrlInfo_ptr -> TestTime =  10 * NX_IP_PERIODIC_RATE;
3100         }
3101         udp_tx_test_time = (UINT)((iperf_ctrlInfo_ptr -> TestTime) / NX_IP_PERIODIC_RATE);
3102 
3103         if ((iperf_ctrlInfo_ptr -> PacketSize == 0) || (iperf_ctrlInfo_ptr -> PacketSize > 1470))
3104         {
3105             iperf_ctrlInfo_ptr -> PacketSize = 1470;
3106         }
3107         udp_tx_packet_size = (UINT)(iperf_ctrlInfo_ptr -> PacketSize);
3108         udp_tx_port = iperf_ctrlInfo_ptr -> port;
3109 
3110         /* Set the transmit ip address.  */
3111         if (iperf_ctrlInfo_ptr -> version == NX_IP_VERSION_V4)
3112         {
3113 #ifndef NX_DISABLE_IPV4
3114             udp_tx_ip_address.nxd_ip_version = NX_IP_VERSION_V4;
3115             udp_tx_ip_address.nxd_ip_address.v4 = iperf_ctrlInfo_ptr -> ip;
3116 #else
3117             break;
3118 #endif
3119         }
3120 
3121 #ifdef FEATURE_NX_IPV6
3122         else
3123         {
3124             udp_tx_ip_address.nxd_ip_version = NX_IP_VERSION_V6;
3125             udp_tx_ip_address.nxd_ip_address.v6[0] = iperf_ctrlInfo_ptr -> ipv6[0];
3126             udp_tx_ip_address.nxd_ip_address.v6[1] = iperf_ctrlInfo_ptr -> ipv6[1];
3127             udp_tx_ip_address.nxd_ip_address.v6[2] = iperf_ctrlInfo_ptr -> ipv6[2];
3128             udp_tx_ip_address.nxd_ip_address.v6[3] = iperf_ctrlInfo_ptr -> ipv6[3];
3129             if (udp_tx_packet_size > 1450)
3130             {
3131                 udp_tx_packet_size = 1450;
3132             }
3133         }
3134 #endif
3135 
3136         if (iperf_ctrlInfo_ptr -> Rate == 0)
3137         {
3138             iperf_ctrlInfo_ptr -> Rate = 10;
3139         }
3140 
3141         nx_iperf_udp_tx_test(nx_iperf_stack_area, nx_iperf_stack_area_size);
3142         break;
3143     }
3144 
3145     default:
3146     {
3147         break;
3148     }
3149     }
3150 }
3151 
nx_iperf_print_tcp_rx_results(NX_WEB_HTTP_SERVER * server_ptr,NXD_ADDRESS * peer_ip_address)3152 static void nx_iperf_print_tcp_rx_results(NX_WEB_HTTP_SERVER *server_ptr, NXD_ADDRESS *peer_ip_address)
3153 {
3154 
3155 UINT       status;
3156 NX_PACKET *resp_packet_ptr;
3157 UINT       length = 0;
3158 CHAR      *ip_addr_string;
3159 
3160     status = nx_packet_allocate(server_ptr -> nx_web_http_server_packet_pool_ptr,
3161                                 &resp_packet_ptr,
3162                                 NX_TCP_PACKET,
3163                                 NX_WAIT_FOREVER);
3164 
3165     htmlwrite(resp_packet_ptr, toptdtag, sizeof(toptdtag) - 1);
3166     htmlwrite(resp_packet_ptr, tabletag, sizeof(tabletag) - 1);
3167     status +=  htmlwrite(resp_packet_ptr, rightspanline, sizeof(rightspanline) - 1);
3168     htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3169     htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3170     htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3171     htmlwrite(resp_packet_ptr, "TCP Receive Test Done:", sizeof("TCP Receive Test Done:") - 1);
3172     status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3173     status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3174     status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3175 
3176     status +=  htmlwrite(resp_packet_ptr, rightspanline, sizeof(rightspanline) - 1);
3177     status +=  htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3178     status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3179     status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3180     status += htmlwrite(resp_packet_ptr, "Source IP Address: ", sizeof("Source IP Address: ") - 1);
3181     ip_addr_string = nx_iperf_get_ip_addr_string(peer_ip_address, &length);
3182     status += htmlwrite(resp_packet_ptr, ip_addr_string, length);
3183     status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3184     status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3185     status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3186 
3187     htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3188     htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3189     status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3190     status += htmlwrite(resp_packet_ptr, "Test Time(milliseconds): ", sizeof("Test Time(milliseconds): ") - 1);
3191     length = _nx_utility_uint_to_string((UINT)(nx_iperf_ctrl_info.RunTime * 1000 / NX_IP_PERIODIC_RATE), 10, mytempstring, sizeof(mytempstring));
3192     status += htmlwrite(resp_packet_ptr, mytempstring, length);
3193     status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3194     status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3195     status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3196 
3197     status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3198     status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3199     status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3200     status += htmlwrite(resp_packet_ptr, "Number of Packets Received: ", sizeof("Number of Packets Received: ") - 1);
3201     length = _nx_utility_uint_to_string((UINT)(nx_iperf_ctrl_info.PacketsRxed), 10, mytempstring, sizeof(mytempstring));
3202     status += htmlwrite(resp_packet_ptr, mytempstring, length);
3203     status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3204     status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3205     status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3206 
3207     status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3208     status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3209     status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3210     status += htmlwrite(resp_packet_ptr, "Number of Bytes Received: ", sizeof("Number of Bytes Received: ") - 1);
3211     length = _nx_utility_uint_to_string((UINT)(nx_iperf_ctrl_info.BytesRxed), 10, mytempstring, sizeof(mytempstring));
3212     status += htmlwrite(resp_packet_ptr, mytempstring, length);
3213     status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3214     status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3215     status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3216 
3217     status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3218     status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3219     status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3220     status += htmlwrite(resp_packet_ptr, "Throughput(Mbps): ", sizeof("Throughput(Mbps): ") - 1);
3221     length = _nx_utility_uint_to_string((UINT)(nx_iperf_ctrl_info.ThroughPut), 10, mytempstring, sizeof(mytempstring));
3222     status += htmlwrite(resp_packet_ptr, mytempstring, length);
3223     status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3224     status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3225     status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3226 
3227 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
3228     status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3229     status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3230     status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3231     length = _nx_utility_uint_to_string(nx_iperf_ctrl_info.idleTime, 10, mytempstring, sizeof(mytempstring));
3232     status += htmlwrite(resp_packet_ptr, "Idle Time: ", sizeof("Idle Time: ") - 1);
3233     status += htmlwrite(resp_packet_ptr, mytempstring, length);
3234     status += htmlwrite(resp_packet_ptr, "%", sizeof("%") - 1);
3235     status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3236     status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3237     status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3238 #endif
3239 
3240     htmlwrite(resp_packet_ptr, tableendtag, sizeof(tableendtag) - 1);
3241     htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3242 
3243     status += nx_web_http_server_callback_packet_send(server_ptr, resp_packet_ptr);
3244 
3245     if (status)
3246     {
3247         nx_packet_release(resp_packet_ptr);
3248         nx_iperf_test_error_counter++;
3249     }
3250 
3251     /* Delete the receive thread. */
3252     nx_iperf_tcp_rx_cleanup();
3253 }
3254 
nx_iperf_print_tcp_tx_results(NX_WEB_HTTP_SERVER * server_ptr,NXD_ADDRESS * peer_ip_address)3255 static void nx_iperf_print_tcp_tx_results(NX_WEB_HTTP_SERVER *server_ptr, NXD_ADDRESS *peer_ip_address)
3256 {
3257 UINT       status;
3258 NX_PACKET *resp_packet_ptr;
3259 UINT       length = 0;
3260 CHAR      *ip_addr_string;
3261 
3262     status = nx_packet_allocate(server_ptr -> nx_web_http_server_packet_pool_ptr,
3263                                 &resp_packet_ptr,
3264                                 NX_TCP_PACKET,
3265                                 NX_WAIT_FOREVER);
3266 
3267     htmlwrite(resp_packet_ptr, toptdtag, sizeof(toptdtag) - 1);
3268     htmlwrite(resp_packet_ptr, tabletag, sizeof(tabletag) - 1);
3269     status +=  htmlwrite(resp_packet_ptr, rightspanline, sizeof(rightspanline) - 1);
3270     htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3271     htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3272     htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3273     htmlwrite(resp_packet_ptr, "TCP Transmit Test Done:", sizeof("TCP Transmit Test Done:") - 1);
3274     status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3275     status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3276     status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3277 
3278     status += htmlwrite(resp_packet_ptr, rightspanline, sizeof(rightspanline) - 1);
3279     status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3280     status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3281     status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3282     status += htmlwrite(resp_packet_ptr, "Destination IP Address: ", sizeof("Destination IP Address: ") - 1);
3283     ip_addr_string = nx_iperf_get_ip_addr_string(peer_ip_address, &length);
3284     status += htmlwrite(resp_packet_ptr, ip_addr_string, length);
3285     status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3286     status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3287     status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3288 
3289     status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3290     status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3291     status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3292     status += htmlwrite(resp_packet_ptr, "Destination Port: ", sizeof("Destination Port: ") - 1);
3293     length = _nx_utility_uint_to_string(nx_iperf_ctrl_info.port, 10, mytempstring, sizeof(mytempstring));
3294     status += htmlwrite(resp_packet_ptr, mytempstring, length);
3295     status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3296     status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3297     status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3298 
3299     status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3300     status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3301     status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3302     status += htmlwrite(resp_packet_ptr, "Test Time(milliseconds): ", sizeof("Test Time(milliseconds): ") - 1);
3303     length = _nx_utility_uint_to_string((UINT)(nx_iperf_ctrl_info.RunTime * 1000 / NX_IP_PERIODIC_RATE), 10, mytempstring, sizeof(mytempstring));
3304     status += htmlwrite(resp_packet_ptr, mytempstring, length);
3305     status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3306     status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3307     status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3308 
3309     status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3310     status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3311     status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3312     status += htmlwrite(resp_packet_ptr, "Number of Packets Transmitted: ", sizeof("Number of Packets Transmitted: ") - 1);
3313     length = _nx_utility_uint_to_string((UINT)(nx_iperf_ctrl_info.PacketsTxed), 10, mytempstring, sizeof(mytempstring));
3314     status += htmlwrite(resp_packet_ptr, mytempstring, length);
3315     status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3316     status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3317     status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3318 
3319     status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3320     status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3321     status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3322     status += htmlwrite(resp_packet_ptr, "Number of Bytes Transmitted: ", sizeof("Number of Bytes Transmitted: ") - 1);
3323     length = _nx_utility_uint_to_string((UINT)(nx_iperf_ctrl_info.BytesTxed), 10, mytempstring, sizeof(mytempstring));
3324     status += htmlwrite(resp_packet_ptr, mytempstring, length);
3325     status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3326     status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3327     status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3328 
3329     status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3330     status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3331     status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3332     status += htmlwrite(resp_packet_ptr, "Throughput(Mbps): ", sizeof("Throughput(Mbps): ") - 1);
3333     length = _nx_utility_uint_to_string((UINT)(nx_iperf_ctrl_info.ThroughPut), 10, mytempstring, sizeof(mytempstring));
3334     status += htmlwrite(resp_packet_ptr, mytempstring, length);
3335     status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3336     status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3337     status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3338 
3339 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
3340     status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3341     status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3342     status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3343     length = _nx_utility_uint_to_string(nx_iperf_ctrl_info.idleTime, 10, mytempstring, sizeof(mytempstring));
3344     status += htmlwrite(resp_packet_ptr, "Idle Time: ", sizeof("Idle Time: ") - 1);
3345     status += htmlwrite(resp_packet_ptr, mytempstring, length);
3346     status += htmlwrite(resp_packet_ptr, "%", sizeof("%") - 1);
3347     status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3348     status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3349     status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3350 #endif
3351 
3352     status += htmlwrite(resp_packet_ptr, tableendtag, sizeof(tableendtag) - 1);
3353     status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3354 
3355     status += nx_web_http_server_callback_packet_send(server_ptr, resp_packet_ptr);
3356 
3357     if (status)
3358     {
3359         nx_packet_release(resp_packet_ptr);
3360         nx_iperf_test_error_counter++;
3361     }
3362 
3363     /* Delete the receive thread. */
3364     nx_iperf_tcp_tx_cleanup();
3365 }
3366 
nx_iperf_print_udp_rx_results(NX_WEB_HTTP_SERVER * server_ptr,NXD_ADDRESS * peer_ip_address)3367 static void nx_iperf_print_udp_rx_results(NX_WEB_HTTP_SERVER *server_ptr, NXD_ADDRESS *peer_ip_address)
3368 {
3369 UINT       status;
3370 NX_PACKET *resp_packet_ptr;
3371 UINT       length = 0;
3372 CHAR      *ip_addr_string;
3373 
3374     status = nx_packet_allocate(server_ptr -> nx_web_http_server_packet_pool_ptr,
3375                                 &resp_packet_ptr,
3376                                 NX_TCP_PACKET,
3377                                 NX_WAIT_FOREVER);
3378 
3379     /* now send the data back to the client.  */
3380     htmlwrite(resp_packet_ptr, toptdtag, sizeof(toptdtag) - 1);
3381     htmlwrite(resp_packet_ptr, tabletag, sizeof(tabletag) - 1);
3382     status +=  htmlwrite(resp_packet_ptr, rightspanline, sizeof(rightspanline) - 1);
3383     htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3384     htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3385     htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3386     htmlwrite(resp_packet_ptr, "UDP Receive Test Done:", sizeof("UDP Receive Test Done:") - 1);
3387     status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3388     status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3389     status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3390 
3391     status += htmlwrite(resp_packet_ptr, rightspanline, sizeof(rightspanline) - 1);
3392     status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3393     status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3394     status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3395     status += htmlwrite(resp_packet_ptr, "Source IP Address: ", sizeof("Source IP Address: ") - 1);
3396     ip_addr_string = nx_iperf_get_ip_addr_string(peer_ip_address, &length);
3397     status += htmlwrite(resp_packet_ptr, ip_addr_string, length);
3398     status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3399     status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3400     status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3401 
3402     htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3403     htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3404     status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3405     status += htmlwrite(resp_packet_ptr, "Test Time(milliseconds): ", sizeof("Test Time(milliseconds): ") - 1);
3406     length = _nx_utility_uint_to_string((UINT)(nx_iperf_ctrl_info.RunTime * 1000 / NX_IP_PERIODIC_RATE), 10, mytempstring, sizeof(mytempstring));
3407     status += htmlwrite(resp_packet_ptr, mytempstring, length);
3408     status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3409     status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3410     status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3411 
3412     status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3413     status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3414     status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3415     status += htmlwrite(resp_packet_ptr, "Number of Packets Received: ", sizeof("Number of Packets Received: ") - 1);
3416     length = _nx_utility_uint_to_string((UINT)(nx_iperf_ctrl_info.PacketsRxed), 10, mytempstring, sizeof(mytempstring));
3417     status += htmlwrite(resp_packet_ptr, mytempstring, length);
3418     status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3419     status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3420     status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3421 
3422     status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3423     status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3424     status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3425     status += htmlwrite(resp_packet_ptr, "Number of Bytes Received: ", sizeof("Number of Bytes Received: ") - 1);
3426     length = _nx_utility_uint_to_string((UINT)(nx_iperf_ctrl_info.BytesRxed), 10, mytempstring, sizeof(mytempstring));
3427     status += htmlwrite(resp_packet_ptr, mytempstring, length);
3428     status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3429     status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3430     status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3431 
3432     status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3433     status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3434     status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3435     status += htmlwrite(resp_packet_ptr, "Throughput(Mbps): ", sizeof("Throughput(Mbps): ") - 1);
3436     length = _nx_utility_uint_to_string((UINT)(nx_iperf_ctrl_info.ThroughPut), 10, mytempstring, sizeof(mytempstring));
3437     status += htmlwrite(resp_packet_ptr, mytempstring, length);
3438     status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3439     status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3440     status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3441 
3442 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
3443     status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3444     status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3445     status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3446     length = _nx_utility_uint_to_string((UINT)(nx_iperf_ctrl_info.idleTime), 10, mytempstring, sizeof(mytempstring));
3447     status += htmlwrite(resp_packet_ptr, "Idle Time: ", sizeof("Idle Time: ") - 1);
3448     status += htmlwrite(resp_packet_ptr, mytempstring, length);
3449     status += htmlwrite(resp_packet_ptr, "%", sizeof("%") - 1);
3450     status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3451     status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3452     status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3453 #endif
3454 
3455     status += htmlwrite(resp_packet_ptr, tableendtag, sizeof(tableendtag) - 1);
3456     status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3457 
3458     status += nx_web_http_server_callback_packet_send(server_ptr, resp_packet_ptr);
3459 
3460     if (status)
3461     {
3462         nx_packet_release(resp_packet_ptr);
3463         nx_iperf_test_error_counter++;
3464     }
3465 
3466     nx_iperf_udp_rx_cleanup();
3467 }
3468 
nx_iperf_print_udp_tx_results(NX_WEB_HTTP_SERVER * server_ptr,NXD_ADDRESS * peer_ip_address)3469 static void nx_iperf_print_udp_tx_results(NX_WEB_HTTP_SERVER *server_ptr, NXD_ADDRESS *peer_ip_address)
3470 {
3471 UINT       status;
3472 NX_PACKET *resp_packet_ptr;
3473 UINT       length = 0;
3474 CHAR      *ip_addr_string;
3475 
3476     status = nx_packet_allocate(server_ptr -> nx_web_http_server_packet_pool_ptr,
3477                                 &resp_packet_ptr,
3478                                 NX_TCP_PACKET,
3479                                 NX_WAIT_FOREVER);
3480 
3481     /* now send the data back to the client.  */
3482     htmlwrite(resp_packet_ptr, toptdtag, sizeof(toptdtag) - 1);
3483     htmlwrite(resp_packet_ptr, tabletag, sizeof(tabletag) - 1);
3484     status +=  htmlwrite(resp_packet_ptr, rightspanline, sizeof(rightspanline) - 1);
3485     htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3486     htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3487     htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3488     htmlwrite(resp_packet_ptr, "UDP Transmit Test Done:", sizeof("UDP Transmit Test Done:") - 1);
3489     status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3490     status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3491     status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3492 
3493     status += htmlwrite(resp_packet_ptr, rightspanline, sizeof(rightspanline) - 1);
3494     status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3495     status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3496     status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3497     status += htmlwrite(resp_packet_ptr, "Destination IP Address: ", sizeof("Destination IP Address: ") - 1);
3498     ip_addr_string = nx_iperf_get_ip_addr_string(peer_ip_address, &length);
3499     status += htmlwrite(resp_packet_ptr, ip_addr_string, length);
3500     status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3501     status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3502     status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3503 
3504     status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3505     status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3506     status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3507     status += htmlwrite(resp_packet_ptr, "Destination Port: ", sizeof("Destination Port: ") - 1);
3508     length = _nx_utility_uint_to_string(nx_iperf_ctrl_info.port, 10, mytempstring, sizeof(mytempstring));
3509     status += htmlwrite(resp_packet_ptr, mytempstring, length);
3510     status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3511     status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3512     status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3513 
3514     status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3515     status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3516     status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3517     status += htmlwrite(resp_packet_ptr, "Test Time(milliseconds): ", sizeof("Test Time(milliseconds): ") - 1);
3518     length = _nx_utility_uint_to_string((UINT)(nx_iperf_ctrl_info.RunTime * 1000 / NX_IP_PERIODIC_RATE), 10, mytempstring, sizeof(mytempstring));
3519     status += htmlwrite(resp_packet_ptr, mytempstring, length);
3520     status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3521     status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3522     status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3523 
3524     status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3525     status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3526     status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3527     status += htmlwrite(resp_packet_ptr, "Number of Packets Transmitted: ", sizeof("Number of Packets Transmitted: ") - 1);
3528     length = _nx_utility_uint_to_string((UINT)(nx_iperf_ctrl_info.PacketsTxed), 10, mytempstring, sizeof(mytempstring));
3529     status += htmlwrite(resp_packet_ptr, mytempstring, length);
3530     status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3531     status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3532     status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3533 
3534     status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3535     status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3536     status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3537     status += htmlwrite(resp_packet_ptr, "Number of Bytes Transmitted: ", sizeof("Number of Bytes Transmitted: ") - 1);
3538     length = _nx_utility_uint_to_string((UINT)(nx_iperf_ctrl_info.BytesTxed), 10, mytempstring, sizeof(mytempstring));
3539     status += htmlwrite(resp_packet_ptr, mytempstring, length);
3540     status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3541     status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3542     status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3543 
3544     status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3545     status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3546     status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3547     status += htmlwrite(resp_packet_ptr, "Throughput(Mbps): ", sizeof("Throughput(Mbps): ") - 1);
3548     length = _nx_utility_uint_to_string((UINT)(nx_iperf_ctrl_info.ThroughPut), 10, mytempstring, sizeof(mytempstring));
3549     status += htmlwrite(resp_packet_ptr, mytempstring, length);
3550     status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3551     status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3552     status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3553 
3554 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
3555     status += htmlwrite(resp_packet_ptr, trtag, sizeof(trtag) - 1);
3556     status += htmlwrite(resp_packet_ptr, tdtag, sizeof(tdtag) - 1);
3557     status += htmlwrite(resp_packet_ptr, fonttag, sizeof(fonttag) - 1);
3558     length = _nx_utility_uint_to_string((UINT)(nx_iperf_ctrl_info.idleTime), 10, mytempstring, sizeof(mytempstring));
3559     status += htmlwrite(resp_packet_ptr, "Idle Time: ", sizeof("Idle Time: ") - 1);
3560     status += htmlwrite(resp_packet_ptr, mytempstring, length);
3561     status += htmlwrite(resp_packet_ptr, "%", sizeof("%") - 1);
3562     status += htmlwrite(resp_packet_ptr, fontendtag, sizeof(fontendtag) - 1);
3563     status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3564     status += htmlwrite(resp_packet_ptr, trendtag, sizeof(trendtag) - 1);
3565 #endif
3566 
3567     status += htmlwrite(resp_packet_ptr, tableendtag, sizeof(tableendtag) - 1);
3568     status += htmlwrite(resp_packet_ptr, tdendtag, sizeof(tdendtag) - 1);
3569 
3570     status += nx_web_http_server_callback_packet_send(server_ptr, resp_packet_ptr);
3571 
3572     if (status)
3573     {
3574         nx_packet_release(resp_packet_ptr);
3575         nx_iperf_test_error_counter++;
3576     }
3577 
3578     nx_iperf_udp_tx_cleanup();
3579 }
3580 
nx_iperf_thread_tcp_rx_entry(ULONG thread_input)3581 void    nx_iperf_thread_tcp_rx_entry(ULONG thread_input)
3582 {
3583 UINT        status;
3584 NX_PACKET  *packet_ptr;
3585 ULONG       actual_status;
3586 ULONG       expire_time;
3587 ctrl_info  *ctrlInfo_ptr;
3588 NXD_ADDRESS ip_address;
3589 ULONG       port;
3590 
3591     /* Set the pointer.  */
3592     ctrlInfo_ptr = (ctrl_info *)thread_input;
3593 
3594 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
3595     /* Update the time.  */
3596     thread_time = 0;
3597     isr_time = 0;
3598     idle_time = 0;
3599 #endif
3600 
3601     /* Update the test result.  */
3602     ctrlInfo_ptr -> PacketsRxed = 0;
3603     ctrlInfo_ptr -> BytesRxed = 0;
3604     ctrlInfo_ptr -> ThroughPut = 0;
3605     ctrlInfo_ptr -> StartTime = 0;
3606     ctrlInfo_ptr -> RunTime = 0;
3607     ctrlInfo_ptr -> ErrorCode = 0;
3608 
3609     /* Ensure the IP instance has been initialized.  */
3610     status =  nx_ip_status_check(nx_iperf_test_ip, NX_IP_INITIALIZE_DONE, &actual_status, NX_IP_PERIODIC_RATE);
3611 
3612     /* Check status...  */
3613     if (status != NX_SUCCESS)
3614     {
3615         error_counter++;
3616         return;
3617     }
3618 
3619     /* Setup this thread to listen.  */
3620     status =  nx_tcp_server_socket_listen(nx_iperf_test_ip, NX_IPERF_TCP_RX_PORT, &tcp_server_socket, 5, nx_iperf_tcp_rx_connect_received);
3621 
3622     /* Check for error.  */
3623     if (status)
3624     {
3625         error_counter++;
3626         return;
3627     }
3628 
3629     /* Increment thread tcp rx's counter.  */
3630     thread_tcp_rx_counter++;
3631 
3632     /* Accept a client socket connection.  */
3633     status =  nx_tcp_server_socket_accept(&tcp_server_socket, NX_WAIT_FOREVER);
3634 
3635     /* Check for error.  */
3636     if (status)
3637     {
3638         nx_tcp_server_socket_unlisten(nx_iperf_test_ip, NX_IPERF_TCP_RX_PORT);
3639         error_counter++;
3640         return;
3641     }
3642 
3643     /*Get source ip address*/
3644     status = nxd_tcp_socket_peer_info_get(&tcp_server_socket, &ip_address, &port);
3645     if (status)
3646     {
3647         nx_tcp_server_socket_unaccept(&tcp_server_socket);
3648         nx_tcp_server_socket_unlisten(nx_iperf_test_ip, NX_IPERF_TCP_RX_PORT);
3649         error_counter++;
3650         return;
3651     }
3652 
3653     ctrlInfo_ptr -> version = ip_address.nxd_ip_version;
3654     if (ctrlInfo_ptr -> version == NX_IP_VERSION_V4)
3655     {
3656 #ifndef NX_DISABLE_IPV4
3657         ctrlInfo_ptr -> ip = ip_address.nxd_ip_address.v4;
3658 #endif
3659     }
3660 #ifdef FEATURE_NX_IPV6
3661     else if (ctrlInfo_ptr -> version == NX_IP_VERSION_V6)
3662     {
3663         memcpy(ctrlInfo_ptr -> ipv6, ip_address.nxd_ip_address.v6, sizeof(ULONG) * 4); /* Use case of memcpy is verified. */
3664     }
3665 #endif
3666 
3667     /* Set the test start time.  */
3668     ctrlInfo_ptr -> StartTime = tx_time_get();
3669     expire_time = (ULONG)(ctrlInfo_ptr -> StartTime + (ctrlInfo_ptr -> TestTime) + 20);
3670 
3671 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
3672     _tx_execution_thread_total_time_reset();
3673     _tx_execution_isr_time_reset();
3674     _tx_execution_idle_time_reset();
3675 #endif
3676 
3677     while (tx_time_get() < expire_time)
3678     {
3679         /* Receive a TCP message from the socket.  */
3680         status =  nx_tcp_socket_receive(&tcp_server_socket, &packet_ptr, NX_WAIT_FOREVER);
3681 
3682         /* Check for error.  */
3683         if (status)
3684         {
3685             error_counter++;
3686             break;
3687         }
3688 
3689         /* Update the counter.  */
3690         ctrlInfo_ptr -> PacketsRxed++;
3691         ctrlInfo_ptr -> BytesRxed += packet_ptr -> nx_packet_length;
3692 
3693         /* Release the packet.  */
3694         nx_packet_release(packet_ptr);
3695     }
3696 
3697 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
3698     _tx_execution_thread_total_time_get(&thread_time);
3699     _tx_execution_isr_time_get(&isr_time);
3700     _tx_execution_idle_time_get(&idle_time);
3701 #endif
3702 
3703     /* Calculate the test time and Throughput(Mbps).  */
3704     ctrlInfo_ptr -> RunTime = tx_time_get() - ctrlInfo_ptr -> StartTime;
3705     ctrlInfo_ptr -> ThroughPut = ctrlInfo_ptr -> BytesRxed / ctrlInfo_ptr -> RunTime * NX_IP_PERIODIC_RATE / 125000;
3706 
3707 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
3708     ctrlInfo_ptr -> idleTime = (ULONG)((unsigned long long)idle_time * 100 / ((unsigned long long)thread_time + (unsigned long long)isr_time + (unsigned long long)idle_time));
3709 #endif
3710 
3711     /* Disconnect the server socket.  */
3712     status =  nx_tcp_socket_disconnect(&tcp_server_socket, 10);
3713 
3714     /* Check for error.  */
3715     if (status)
3716     {
3717         error_counter++;
3718     }
3719 
3720     /* Unaccept the server socket.  */
3721     status =  nx_tcp_server_socket_unaccept(&tcp_server_socket);
3722     status += nx_tcp_server_socket_unlisten(nx_iperf_test_ip, NX_IPERF_TCP_RX_PORT);
3723 
3724     /* Check for error.  */
3725     if (status)
3726     {
3727         error_counter++;
3728     }
3729 
3730     if (error_counter)
3731     {
3732         ctrlInfo_ptr -> ErrorCode = error_counter;
3733     }
3734 }
3735 
nx_iperf_tcp_rx_connect_received(NX_TCP_SOCKET * socket_ptr,UINT port)3736 void  nx_iperf_tcp_rx_connect_received(NX_TCP_SOCKET *socket_ptr, UINT port)
3737 {
3738     /* Check for the proper socket and port.  */
3739     if ((socket_ptr != &tcp_server_socket) || (port != NX_IPERF_TCP_RX_PORT))
3740     {
3741         error_counter++;
3742     }
3743 }
3744 
nx_iperf_tcp_rx_disconnect_received(NX_TCP_SOCKET * socket)3745 void  nx_iperf_tcp_rx_disconnect_received(NX_TCP_SOCKET *socket)
3746 {
3747     /* Check for proper disconnected socket.  */
3748     if (socket != &tcp_server_socket)
3749     {
3750         error_counter++;
3751     }
3752 }
3753 
nx_iperf_tcp_rx_cleanup(void)3754 void nx_iperf_tcp_rx_cleanup(void)
3755 {
3756     nx_tcp_socket_disconnect(&tcp_server_socket, NX_NO_WAIT);
3757     nx_tcp_server_socket_unaccept(&tcp_server_socket);
3758     nx_tcp_server_socket_unlisten(nx_iperf_test_ip, NX_IPERF_TCP_RX_PORT);
3759 
3760     tx_thread_terminate(&thread_tcp_rx_iperf);
3761     tx_thread_delete(&thread_tcp_rx_iperf);
3762 }
3763 
nx_iperf_tcp_rx_test(UCHAR * stack_space,ULONG stack_size)3764 void nx_iperf_tcp_rx_test(UCHAR *stack_space, ULONG stack_size)
3765 {
3766 
3767 UINT status;
3768 
3769     status = tx_thread_create(&thread_tcp_rx_iperf, "thread tcp rx",
3770                               nx_iperf_thread_tcp_rx_entry,
3771                               (ULONG)&nx_iperf_ctrl_info,
3772                               stack_space, stack_size, NX_IPERF_THREAD_PRIORITY, NX_IPERF_THREAD_PRIORITY,
3773                               TX_NO_TIME_SLICE, TX_AUTO_START);
3774 
3775     if (status)
3776     {
3777         nx_iperf_ctrl_info.ErrorCode = 1;
3778     }
3779     return;
3780 }
3781 
nx_iperf_thread_tcp_tx_entry(ULONG thread_input)3782 void    nx_iperf_thread_tcp_tx_entry(ULONG thread_input)
3783 {
3784 UINT       status;
3785 UINT       is_first = NX_TRUE;
3786 NX_PACKET *my_packet = NX_NULL;
3787 #ifndef NX_DISABLE_PACKET_CHAIN
3788 NX_PACKET  *packet_ptr;
3789 NX_PACKET  *last_packet;
3790 ULONG       remaining_size;
3791 #endif /* NX_DISABLE_PACKET_CHAIN */
3792 ULONG       expire_time;
3793 ctrl_info  *ctrlInfo_ptr;
3794 ULONG       packet_size;
3795 NXD_ADDRESS server_ip;
3796 
3797     /* Set the pointer.  */
3798     ctrlInfo_ptr = (ctrl_info *)thread_input;
3799 
3800 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
3801     thread_time = 0;
3802     isr_time = 0;
3803     idle_time = 0;
3804 #endif
3805 
3806     ctrlInfo_ptr -> PacketsTxed = 0;
3807     ctrlInfo_ptr -> BytesTxed = 0;
3808     ctrlInfo_ptr -> ThroughPut = 0;
3809     ctrlInfo_ptr -> StartTime = 0;
3810     ctrlInfo_ptr -> RunTime = 0;
3811     ctrlInfo_ptr -> ErrorCode = 0;
3812 
3813     server_ip.nxd_ip_version = ctrlInfo_ptr -> version;
3814 
3815 #ifdef FEATURE_NX_IPV6
3816     if (ctrlInfo_ptr -> version == NX_IP_VERSION_V6)
3817     {
3818         server_ip.nxd_ip_address.v6[0] = ctrlInfo_ptr -> ipv6[0];
3819         server_ip.nxd_ip_address.v6[1] = ctrlInfo_ptr -> ipv6[1];
3820         server_ip.nxd_ip_address.v6[2] = ctrlInfo_ptr -> ipv6[2];
3821         server_ip.nxd_ip_address.v6[3] = ctrlInfo_ptr -> ipv6[3];
3822     }
3823     else if (ctrlInfo_ptr -> version == NX_IP_VERSION_V4)
3824 #endif
3825     {
3826 #ifndef NX_DISABLE_IPV4
3827         server_ip.nxd_ip_address.v4 = ctrlInfo_ptr -> ip;
3828 #endif
3829     }
3830 
3831     /* TCP Transmit Test Starts in 2 seconds.  */
3832     tx_thread_sleep(200);
3833 
3834     /* Bind the socket.  */
3835     status =  nx_tcp_client_socket_bind(&tcp_client_socket, NX_ANY_PORT, NX_WAIT_FOREVER);
3836 
3837     /* Check for error.  */
3838     if (status)
3839     {
3840         error_counter++;
3841         return;
3842     }
3843 
3844     /* Attempt to connect the socket.  */
3845     status =  nxd_tcp_client_socket_connect(&tcp_client_socket, &server_ip, ctrlInfo_ptr -> port, NX_WAIT_FOREVER);
3846 
3847     /* Check for error.  */
3848     if (status)
3849     {
3850         nx_tcp_client_socket_unbind(&tcp_client_socket);
3851         error_counter++;
3852         return;
3853     }
3854 
3855     /* Set the test start time.  */
3856     ctrlInfo_ptr -> StartTime = tx_time_get();
3857     expire_time = (ULONG)(ctrlInfo_ptr -> StartTime + (ctrlInfo_ptr -> TestTime));
3858 
3859 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
3860     _tx_execution_thread_total_time_reset();
3861     _tx_execution_isr_time_reset();
3862     _tx_execution_idle_time_reset();
3863 #endif
3864 
3865     /* Set the packet size.  */
3866     status = nx_tcp_socket_mss_get(&tcp_client_socket, &packet_size);
3867 
3868     /* Check for error.  */
3869     if (status)
3870     {
3871         nx_tcp_socket_disconnect(&tcp_client_socket, NX_NO_WAIT);
3872         nx_tcp_client_socket_unbind(&tcp_client_socket);
3873         error_counter++;
3874         return;
3875     }
3876 
3877     /* Loop to transmit the packet.  */
3878     while (tx_time_get() < expire_time)
3879     {
3880 
3881         /* Allocate a packet.  */
3882         status =  nx_packet_allocate(nx_iperf_test_pool, &my_packet, NX_TCP_PACKET, NX_WAIT_FOREVER);
3883 
3884         /* Check status.  */
3885         if (status != NX_SUCCESS)
3886         {
3887             break;
3888         }
3889 
3890         /* Write ABCs into the packet payload!  */
3891         /* Adjust the write pointer.  */
3892         if (my_packet -> nx_packet_prepend_ptr + packet_size <= my_packet -> nx_packet_data_end)
3893         {
3894             my_packet -> nx_packet_append_ptr =  my_packet -> nx_packet_prepend_ptr + packet_size;
3895 #ifndef NX_DISABLE_PACKET_CHAIN
3896             remaining_size = 0;
3897 #endif /* NX_DISABLE_PACKET_CHAIN */
3898         }
3899         else
3900         {
3901 #ifdef NX_DISABLE_PACKET_CHAIN
3902             packet_size = (ULONG)(my_packet -> nx_packet_data_end - my_packet -> nx_packet_prepend_ptr);
3903             my_packet -> nx_packet_append_ptr =  my_packet -> nx_packet_prepend_ptr + packet_size;
3904 #else
3905             my_packet -> nx_packet_append_ptr = my_packet -> nx_packet_data_end;
3906             remaining_size = packet_size - (ULONG)(my_packet -> nx_packet_append_ptr - my_packet -> nx_packet_prepend_ptr);
3907             last_packet = my_packet;
3908 #endif /* NX_DISABLE_PACKET_CHAIN */
3909         }
3910         my_packet -> nx_packet_length =  packet_size;
3911 
3912 #ifndef NX_DISABLE_PACKET_CHAIN
3913         while (remaining_size)
3914         {
3915 
3916             /* Allocate a packet.  */
3917             status =  nx_packet_allocate(nx_iperf_test_pool, &packet_ptr, NX_TCP_PACKET, NX_WAIT_FOREVER);
3918 
3919             /* Check status.  */
3920             if (status != NX_SUCCESS)
3921             {
3922                 break;
3923             }
3924 
3925             last_packet -> nx_packet_next = packet_ptr;
3926             last_packet = packet_ptr;
3927             if (remaining_size < (ULONG)(packet_ptr -> nx_packet_data_end - packet_ptr -> nx_packet_prepend_ptr))
3928             {
3929                 packet_ptr -> nx_packet_append_ptr =  packet_ptr -> nx_packet_prepend_ptr + remaining_size;
3930             }
3931             else
3932             {
3933                 packet_ptr -> nx_packet_append_ptr =  packet_ptr -> nx_packet_data_end;
3934             }
3935             remaining_size = remaining_size - (ULONG)(packet_ptr -> nx_packet_append_ptr - packet_ptr -> nx_packet_prepend_ptr);
3936         }
3937 #endif /* NX_DISABLE_PACKET_CHAIN */
3938 
3939         if (is_first)
3940         {
3941             memset(my_packet -> nx_packet_prepend_ptr, 0, (UINT)(my_packet -> nx_packet_data_end - my_packet -> nx_packet_prepend_ptr));
3942             is_first = NX_FALSE;
3943         }
3944 
3945         /* Send the packet out!  */
3946         status =  nx_tcp_socket_send(&tcp_client_socket, my_packet, NX_WAIT_FOREVER);
3947 
3948         /* Determine if the status is valid.  */
3949         if (status)
3950         {
3951             error_counter++;
3952             nx_packet_release(my_packet);
3953             break;
3954         }
3955         else
3956         {
3957 
3958             /* Update the counter.  */
3959             ctrlInfo_ptr -> PacketsTxed++;
3960             ctrlInfo_ptr -> BytesTxed += packet_size;
3961         }
3962     }
3963 
3964     /* Calculate the test time and Throughput(Mbps).  */
3965     ctrlInfo_ptr -> RunTime = tx_time_get() - ctrlInfo_ptr -> StartTime;
3966     ctrlInfo_ptr -> ThroughPut = ctrlInfo_ptr -> BytesTxed / ctrlInfo_ptr -> RunTime * NX_IP_PERIODIC_RATE / 125000;
3967 
3968 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
3969     _tx_execution_thread_total_time_get(&thread_time);
3970     _tx_execution_isr_time_get(&isr_time);
3971     _tx_execution_idle_time_get(&idle_time);
3972 #endif
3973 
3974 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
3975     ctrlInfo_ptr -> idleTime = (ULONG)((unsigned long long)idle_time * 100 / ((unsigned long long)thread_time + (unsigned long long)isr_time + (unsigned long long)idle_time));
3976 #endif
3977 
3978     /* Disconnect this socket.  */
3979     status =  nx_tcp_socket_disconnect(&tcp_client_socket, NX_NO_WAIT);
3980 
3981     /* Determine if the status is valid.  */
3982     if (status)
3983     {
3984         error_counter++;
3985     }
3986 
3987     /* Unbind the socket.  */
3988     status =  nx_tcp_client_socket_unbind(&tcp_client_socket);
3989 
3990     /* Check for error.  */
3991     if (status)
3992     {
3993         error_counter++;
3994     }
3995 
3996     if (error_counter)
3997     {
3998         ctrlInfo_ptr -> ErrorCode = error_counter;
3999     }
4000 }
4001 
nx_iperf_tcp_tx_cleanup(void)4002 void nx_iperf_tcp_tx_cleanup(void)
4003 {
4004     nx_tcp_socket_disconnect(&tcp_client_socket, NX_NO_WAIT);
4005     nx_tcp_client_socket_unbind(&tcp_client_socket);
4006 
4007     tx_thread_terminate(&thread_tcp_tx_iperf);
4008     tx_thread_delete(&thread_tcp_tx_iperf);
4009 }
4010 
nx_iperf_tcp_tx_test(UCHAR * stack_space,ULONG stack_size)4011 void  nx_iperf_tcp_tx_test(UCHAR *stack_space, ULONG stack_size)
4012 {
4013 UINT status;
4014 
4015     status = tx_thread_create(&thread_tcp_tx_iperf, "thread tcp tx",
4016                               nx_iperf_thread_tcp_tx_entry,
4017                               (ULONG)&nx_iperf_ctrl_info,
4018                               stack_space, stack_size, NX_WEB_HTTP_SERVER_PRIORITY + 1, NX_WEB_HTTP_SERVER_PRIORITY + 1,
4019                               TX_NO_TIME_SLICE, TX_AUTO_START);
4020 
4021     if (status)
4022     {
4023         nx_iperf_ctrl_info.ErrorCode = 1;
4024     }
4025     return;
4026 }
4027 
4028 
nx_iperf_thread_udp_rx_entry(ULONG thread_input)4029 void   nx_iperf_thread_udp_rx_entry(ULONG thread_input)
4030 {
4031 UINT        status;
4032 ULONG       expire_time;
4033 NX_PACKET  *my_packet;
4034 ctrl_info  *ctrlInfo_ptr;
4035 int         packetID = 0;
4036 UINT        sender_port;
4037 ULONG       tmp;
4038 NXD_ADDRESS source_ip_address;
4039 
4040     /* Set the pointer.  */
4041     ctrlInfo_ptr = (ctrl_info *)thread_input;
4042 
4043 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
4044     thread_time = 0;
4045     isr_time = 0;
4046     idle_time = 0;
4047 #endif
4048 
4049     /* Update the test result.  */
4050     ctrlInfo_ptr -> PacketsRxed = 0;
4051     ctrlInfo_ptr -> BytesRxed = 0;
4052     ctrlInfo_ptr -> ThroughPut = 0;
4053     ctrlInfo_ptr -> StartTime = 0;
4054     ctrlInfo_ptr -> RunTime = 0;
4055     ctrlInfo_ptr -> ErrorCode = 0;
4056 
4057     /* Bind the UDP socket to the IP port.  */
4058     status = nx_udp_socket_bind(&udp_server_socket, NX_IPERF_UDP_RX_PORT, TX_WAIT_FOREVER);
4059 
4060     /* Check status.  */
4061     if (status)
4062     {
4063         error_counter++;
4064         return;
4065     }
4066 
4067     /* Disable checksum for UDP. */
4068     nx_udp_socket_checksum_disable(&udp_server_socket);
4069 
4070     /* Receive a UDP packet.  */
4071     status = nx_udp_socket_receive(&udp_server_socket, &my_packet, TX_WAIT_FOREVER);
4072 
4073     /* Check status.  */
4074     if (status)
4075     {
4076         nx_udp_socket_unbind(&udp_server_socket);
4077         error_counter++;
4078         return;
4079     }
4080 
4081     /* Get source ip address*/
4082     nxd_udp_source_extract(my_packet, &source_ip_address, &sender_port);
4083 
4084     /* Set the IP address Version.  */
4085     ctrlInfo_ptr -> version = source_ip_address.nxd_ip_version;
4086 
4087 #ifndef NX_DISABLE_IPV4
4088     if (ctrlInfo_ptr -> version == NX_IP_VERSION_V4)
4089     {
4090         ctrlInfo_ptr -> ip = source_ip_address.nxd_ip_address.v4;
4091     }
4092 #endif
4093 #ifdef FEATURE_NX_IPV6
4094     if (ctrlInfo_ptr -> version == NX_IP_VERSION_V6)
4095     {
4096         ctrlInfo_ptr -> ipv6[0] = source_ip_address.nxd_ip_address.v6[0];
4097         ctrlInfo_ptr -> ipv6[1] = source_ip_address.nxd_ip_address.v6[1];
4098         ctrlInfo_ptr -> ipv6[2] = source_ip_address.nxd_ip_address.v6[2];
4099         ctrlInfo_ptr -> ipv6[3] = source_ip_address.nxd_ip_address.v6[3];
4100     }
4101 #endif
4102 
4103     /* Release the packet.  */
4104     nx_packet_release(my_packet);
4105 
4106     /* Set the test start time.  */
4107     ctrlInfo_ptr -> StartTime = tx_time_get();
4108     expire_time = (ULONG)(ctrlInfo_ptr -> StartTime + (ctrlInfo_ptr -> TestTime) + 5);   /* Wait 5 more ticks to synchronize. */
4109 
4110 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
4111     _tx_execution_thread_total_time_reset();
4112     _tx_execution_isr_time_reset();
4113     _tx_execution_idle_time_reset();
4114 #endif
4115 
4116     while (tx_time_get() < expire_time)
4117     {
4118 
4119         /* Receive a UDP packet.  */
4120         status =  nx_udp_socket_receive(&udp_server_socket, &my_packet, TX_WAIT_FOREVER);
4121 
4122         /* Check status.  */
4123         if (status != NX_SUCCESS)
4124         {
4125             error_counter++;
4126             break;
4127         }
4128 
4129         /* Update the counter.  */
4130         ctrlInfo_ptr -> PacketsRxed++;
4131         ctrlInfo_ptr -> BytesRxed += my_packet -> nx_packet_length;
4132 
4133         /* Detect the end of the test signal. */
4134         packetID = *(int *)(my_packet -> nx_packet_prepend_ptr);
4135 
4136         tmp = (ULONG)packetID;
4137         NX_CHANGE_ULONG_ENDIAN(tmp);
4138         packetID = (int)tmp;
4139 
4140 
4141         /* Check the packet ID.  */
4142         if (packetID < 0)
4143         {
4144 
4145             /* Test has finished. */
4146 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
4147             _tx_execution_thread_total_time_get(&thread_time);
4148             _tx_execution_isr_time_get(&isr_time);
4149             _tx_execution_idle_time_get(&idle_time);
4150 #endif
4151 
4152             /* Calculate the test time and Throughput.  */
4153             ctrlInfo_ptr -> RunTime = tx_time_get() - ctrlInfo_ptr -> StartTime;
4154             ctrlInfo_ptr -> ThroughPut = ctrlInfo_ptr -> BytesRxed / ctrlInfo_ptr -> RunTime * NX_IP_PERIODIC_RATE / 125000;
4155 
4156             /* received end of the test signal */
4157 
4158             /* Send the UDP packet.  */
4159             status = nxd_udp_socket_send(&udp_server_socket, my_packet, &source_ip_address, sender_port);
4160 
4161             /* Check the status.  */
4162             if (status)
4163             {
4164 
4165                 /* Release the packet.  */
4166                 nx_packet_release(my_packet);
4167             }
4168             else
4169             {
4170 
4171                 /* Loop to receive the end of the test signal.  */
4172                 while (1)
4173                 {
4174 
4175                     /* Receive a UDP packet.  */
4176                     status =  nx_udp_socket_receive(&udp_server_socket, &my_packet, 20);
4177 
4178                     /* Check the status.  */
4179                     if (status)
4180                     {
4181                         break;
4182                     }
4183 
4184                     /* Send the UDP packet.  */
4185                     status = nxd_udp_socket_send(&udp_server_socket, my_packet, &source_ip_address, sender_port);
4186 
4187                     /* Check the status.  */
4188                     if (status)
4189                     {
4190 
4191                         /* Release the packet.  */
4192                         nx_packet_release(my_packet);
4193                     }
4194                 }
4195             }
4196             break;
4197         }
4198         else
4199         {
4200 
4201             /* Release the packet.  */
4202             nx_packet_release(my_packet);
4203         }
4204     }
4205 
4206     if (packetID >= 0)
4207     {
4208 
4209         /* Test is not synchronized. */
4210 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
4211         _tx_execution_thread_total_time_get(&thread_time);
4212         _tx_execution_isr_time_get(&isr_time);
4213         _tx_execution_idle_time_get(&idle_time);
4214 #endif
4215 
4216         /* Calculate the test time and Throughput.  */
4217         ctrlInfo_ptr -> RunTime = tx_time_get() - ctrlInfo_ptr -> StartTime;
4218         ctrlInfo_ptr -> ThroughPut = ctrlInfo_ptr -> BytesRxed / ctrlInfo_ptr -> RunTime * NX_IP_PERIODIC_RATE / 125000;
4219     }
4220 
4221 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
4222     ctrlInfo_ptr -> idleTime = (ULONG)((unsigned long long)idle_time * 100 / ((unsigned long long)thread_time + (unsigned long long)isr_time + (unsigned long long)idle_time));
4223 #endif
4224 
4225     /* Unbind the socket.  */
4226     nx_udp_socket_unbind(&udp_server_socket);
4227 
4228     /* Check error counter.  */
4229     if (error_counter)
4230     {
4231         ctrlInfo_ptr -> ErrorCode = error_counter;
4232     }
4233 }
4234 
nx_iperf_udp_rx_cleanup(void)4235 void nx_iperf_udp_rx_cleanup(void)
4236 {
4237     nx_udp_socket_unbind(&udp_server_socket);
4238 
4239     tx_thread_terminate(&thread_udp_rx_iperf);
4240     tx_thread_delete(&thread_udp_rx_iperf);
4241 }
4242 
nx_iperf_udp_rx_test(UCHAR * stack_space,ULONG stack_size)4243 void  nx_iperf_udp_rx_test(UCHAR *stack_space, ULONG stack_size)
4244 {
4245 UINT status;
4246 
4247     status = tx_thread_create(&thread_udp_rx_iperf, "thread udp rx",
4248                               nx_iperf_thread_udp_rx_entry,
4249                               (ULONG)&nx_iperf_ctrl_info,
4250                               stack_space, stack_size, NX_WEB_HTTP_SERVER_PRIORITY + 1, NX_WEB_HTTP_SERVER_PRIORITY + 1,
4251                               TX_NO_TIME_SLICE, TX_AUTO_START);
4252 
4253     if (status)
4254     {
4255         nx_iperf_ctrl_info.ErrorCode = 1;
4256     }
4257     return;
4258 }
4259 
nx_iperf_send_udp_packet(int udp_id,ctrl_info * ctrlInfo_ptr)4260 static void nx_iperf_send_udp_packet(int udp_id, ctrl_info *ctrlInfo_ptr)
4261 {
4262 
4263 UINT         status;
4264 NX_PACKET   *my_packet = NX_NULL;
4265 udp_payload *payload_ptr;
4266 ULONG        tmp;
4267 
4268 NXD_ADDRESS  server_ip;
4269 
4270     server_ip.nxd_ip_version = ctrlInfo_ptr -> version;
4271 
4272 #ifdef FEATURE_NX_IPV6
4273     if (ctrlInfo_ptr -> version == NX_IP_VERSION_V6)
4274     {
4275         server_ip.nxd_ip_address.v6[0] = ctrlInfo_ptr -> ipv6[0];
4276         server_ip.nxd_ip_address.v6[1] = ctrlInfo_ptr -> ipv6[1];
4277         server_ip.nxd_ip_address.v6[2] = ctrlInfo_ptr -> ipv6[2];
4278         server_ip.nxd_ip_address.v6[3] = ctrlInfo_ptr -> ipv6[3];
4279     }
4280     else if (ctrlInfo_ptr -> version == NX_IP_VERSION_V4)
4281 #endif
4282     {
4283 #ifndef NX_DISABLE_IPV4
4284         server_ip.nxd_ip_address.v4 = ctrlInfo_ptr -> ip;
4285 #endif
4286     }
4287 
4288     /* Send the end of test indicator. */
4289     nx_packet_allocate(nx_iperf_test_pool, &my_packet, NX_UDP_PACKET, TX_WAIT_FOREVER);
4290     my_packet -> nx_packet_append_ptr =  my_packet -> nx_packet_prepend_ptr + ctrlInfo_ptr -> PacketSize;
4291 
4292     payload_ptr = (udp_payload *)my_packet -> nx_packet_prepend_ptr;
4293     payload_ptr -> udp_id = udp_id;
4294     payload_ptr -> tv_sec = _tx_timer_system_clock / NX_IP_PERIODIC_RATE;
4295     payload_ptr -> tv_usec = _tx_timer_system_clock / NX_IP_PERIODIC_RATE * 1000000;
4296 
4297     tmp = (ULONG)payload_ptr -> udp_id;
4298     NX_CHANGE_ULONG_ENDIAN(tmp);
4299     payload_ptr -> udp_id = (int)tmp;
4300 
4301     NX_CHANGE_ULONG_ENDIAN(payload_ptr -> tv_sec);
4302     NX_CHANGE_ULONG_ENDIAN(payload_ptr -> tv_usec);
4303 
4304     /* Adjust the write pointer.  */
4305     my_packet -> nx_packet_length = (UINT)(ctrlInfo_ptr -> PacketSize);
4306 
4307     /* Send the UDP packet.  */
4308     status = nxd_udp_socket_send(&udp_client_socket, my_packet, &server_ip, ctrlInfo_ptr -> port);
4309 
4310     /* Check the status.  */
4311     if (status)
4312     {
4313 
4314         /* Release the packet.  */
4315         nx_packet_release(my_packet);
4316         return;
4317     }
4318 }
4319 
nx_iperf_thread_udp_tx_entry(ULONG thread_input)4320 void  nx_iperf_thread_udp_tx_entry(ULONG thread_input)
4321 {
4322 UINT       status;
4323 ULONG      expire_time;
4324 ctrl_info *ctrlInfo_ptr;
4325 NX_PACKET *my_packet;
4326 int        i;
4327 long       udp_id;
4328 
4329     /* Initialize the value.  */
4330     udp_id = 0;
4331     ctrlInfo_ptr = (ctrl_info *)thread_input;
4332 
4333 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
4334     thread_time = 0;
4335     isr_time = 0;
4336     idle_time = 0;
4337 #endif
4338 
4339     ctrlInfo_ptr -> PacketsTxed = 0;
4340     ctrlInfo_ptr -> BytesTxed = 0;
4341     ctrlInfo_ptr -> ThroughPut = 0;
4342     ctrlInfo_ptr -> StartTime = 0;
4343     ctrlInfo_ptr -> RunTime = 0;
4344     ctrlInfo_ptr -> ErrorCode = 0;
4345 
4346     /* UDP Transmit Test Starts in 2 seconds.  */
4347     tx_thread_sleep(200);
4348 
4349     /* Bind the UDP socket to the IP port.  */
4350     status =  nx_udp_socket_bind(&udp_client_socket, NX_ANY_PORT, TX_WAIT_FOREVER);
4351 
4352     /* Check status.  */
4353     if (status)
4354     {
4355         error_counter++;
4356         return;
4357     }
4358 
4359     /* Do not calculate checksum for UDP. */
4360     nx_udp_socket_checksum_disable(&udp_client_socket);
4361 
4362     /* Set the test start time.  */
4363     ctrlInfo_ptr -> StartTime = tx_time_get();
4364     expire_time = (ULONG)(ctrlInfo_ptr -> StartTime + (ctrlInfo_ptr -> TestTime));
4365 
4366 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
4367     _tx_execution_thread_total_time_reset();
4368     _tx_execution_isr_time_reset();
4369     _tx_execution_idle_time_reset();
4370 #endif
4371 
4372     while (tx_time_get() < expire_time)
4373     {
4374 
4375         /* Write ABCs into the packet payload!  */
4376         nx_iperf_send_udp_packet(udp_id, ctrlInfo_ptr);
4377 
4378         /* Update the ID.  */
4379         udp_id = (udp_id + 1) & 0x7FFFFFFF;
4380 
4381         /* Update the counter.  */
4382         ctrlInfo_ptr -> PacketsTxed++;
4383         ctrlInfo_ptr -> BytesTxed += ctrlInfo_ptr -> PacketSize;
4384     }
4385 
4386 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
4387     _tx_execution_thread_total_time_get(&thread_time);
4388     _tx_execution_isr_time_get(&isr_time);
4389     _tx_execution_idle_time_get(&idle_time);
4390 #endif
4391 
4392     /* Calculate the test time and Throughput.  */
4393     ctrlInfo_ptr -> RunTime = tx_time_get() - ctrlInfo_ptr -> StartTime;
4394     ctrlInfo_ptr -> ThroughPut = ctrlInfo_ptr -> BytesTxed / ctrlInfo_ptr -> RunTime * NX_IP_PERIODIC_RATE / 125000;
4395 
4396 #if defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE)
4397     ctrlInfo_ptr -> idleTime = (ULONG)((unsigned long long)idle_time * 100 / ((unsigned long long)thread_time + (unsigned long long)isr_time + (unsigned long long)idle_time));
4398 #endif
4399 
4400     if (error_counter)
4401     {
4402         ctrlInfo_ptr -> ErrorCode = error_counter;
4403     }
4404 
4405     ctrlInfo_ptr -> PacketSize = 100;
4406     for (i = 0; i < 10; i++)
4407     {
4408         /* Send the end of the test signal*/
4409         nx_iperf_send_udp_packet((0 - udp_id), ctrlInfo_ptr);
4410 
4411         /* Receive the packet.  s*/
4412         if (nx_udp_socket_receive(&udp_client_socket, &my_packet, 10) == NX_SUCCESS)
4413         {
4414             nx_packet_release(my_packet);
4415             break;
4416         }
4417     }
4418 
4419     /* Unbind the socket.  */
4420     nx_udp_socket_unbind(&udp_client_socket);
4421 }
4422 
nx_iperf_udp_tx_cleanup(void)4423 void nx_iperf_udp_tx_cleanup(void)
4424 {
4425     nx_udp_socket_unbind(&udp_client_socket);
4426     tx_thread_terminate(&thread_udp_tx_iperf);
4427     tx_thread_delete(&thread_udp_tx_iperf);
4428 }
4429 
nx_iperf_udp_tx_test(UCHAR * stack_space,ULONG stack_size)4430 void  nx_iperf_udp_tx_test(UCHAR *stack_space, ULONG stack_size)
4431 {
4432 UINT status;
4433 
4434     status = tx_thread_create(&thread_udp_tx_iperf, "thread udp tx",
4435                               nx_iperf_thread_udp_tx_entry,
4436                               (ULONG)&nx_iperf_ctrl_info,
4437                               stack_space, stack_size, NX_WEB_HTTP_SERVER_PRIORITY + 1, NX_WEB_HTTP_SERVER_PRIORITY + 1,
4438                               TX_NO_TIME_SLICE, TX_AUTO_START);
4439 
4440     if (status)
4441     {
4442         nx_iperf_ctrl_info.ErrorCode = 1;
4443     }
4444     return;
4445 }
4446 
nx_iperf_udp_client_socket_vlan_priority_set(UCHAR vlan_priority)4447 void   nx_iperf_udp_client_socket_vlan_priority_set(UCHAR vlan_priority)
4448 {
4449     if (vlan_priority <= NX_VLAN_PRIORITY_MAX)
4450     {
4451         udp_client_socket_vlan_priority = vlan_priority;
4452     }
4453 }
4454 
nx_iperf_tcp_client_socket_vlan_priority_set(UCHAR vlan_priority)4455 void   nx_iperf_tcp_client_socket_vlan_priority_set(UCHAR vlan_priority)
4456 {
4457     if (vlan_priority <= NX_VLAN_PRIORITY_MAX)
4458     {
4459         tcp_client_socket_vlan_priority = vlan_priority;
4460     }
4461 }
4462