Server optimizations.

Ylian Saint-Hilaire committed Mar 7, 2019 at 22:47 UTC eb3977ee72441cd49bdd16803a38eb78433eb262
6 files changed +277 -2139757
heapdump-1982251193.610099.heapsnapshot deleted
-2139467
@@ -1,2139467 +0,0 @@
1 -{"snapshot":{"meta":{"node_fields":["type","name","id","self_size","edge_count","trace_node_id"],"node_types":[["hidden","array","string","object","code","closure","regexp","number","native","synthetic","concatenated string","sliced string","symbol","bigint"],"string","number","number","number","number","number"],"edge_fields":["type","name_or_index","to_node"],"edge_types":[["context","element","property","internal","hidden","shortcut","weak"],"string_or_number","node"],"trace_function_info_fields":["function_id","name","script_name","script_id","line","column"],"trace_node_fields":["id","function_info_index","count","size","children"],"sample_fields":["timestamp_us","last_assigned_id"],"location_fields":["object_index","script_id","line","column"]},"node_count":464771,"edge_count":1615204,"trace_function_count":0},
2 -"nodes":[9,1,1,0,44,0
3 -,9,2,3,0,22,0
4 -,9,3,5,0,1,0
5 -,9,4,7,0,116,0
6 -,9,5,9,0,526,0
7 -,9,6,11,0,0,0
8 -,9,7,13,0,0,0
9 -,9,8,15,0,414,0
10 -,9,9,17,0,5,0
11 -,9,10,19,0,0,0
12 -,9,11,21,0,5,0
13 -,9,12,23,0,235,0
14 -,9,13,25,0,528,0
15 -,9,14,27,0,909,0
16 -,9,15,29,0,121,0
17 -,9,16,31,0,244,0
18 -,9,17,33,0,0,0
19 -,9,5,35,0,3,0
20 -,9,18,37,0,1,0
21 -,9,19,39,0,0,0
22 -,9,20,41,0,4010,0
23 -,9,21,43,0,0,0
24 -,9,22,45,0,0,0
25 -,9,23,47,0,0,0
26 -,0,24,49,80,1,0
27 -,0,24,51,80,1,0
28 -,0,24,53,80,1,0
29 -,0,25,55,48,3,0
30 -,0,25,57,48,20,0
31 -,0,25,59,48,4,0
32 -,0,25,61,48,3,0
33 -,0,25,63,48,3,0
34 -,0,25,65,48,3,0
35 -,2,1,67,24,1,0
36 -,0,24,69,80,1,0
37 -,0,24,71,80,1,0
38 -,0,24,73,80,1,0
39 -,0,24,75,80,1,0
40 -,0,24,77,80,1,0
41 -,0,24,79,80,1,0
42 -,0,26,81,80,1,0
43 -,0,27,83,80,1,0
44 -,0,24,85,80,1,0
45 -,0,24,87,80,1,0
46 -,0,24,89,80,1,0
47 -,0,24,91,80,1,0
48 -,0,24,93,80,1,0
49 -,0,24,95,80,1,0
50 -,0,24,97,80,1,0
51 -,0,24,99,80,1,0
52 -,0,24,101,80,1,0
53 -,0,24,103,80,1,0
54 -,1,1,105,16,1,0
55 -,1,1,107,16,0,0
56 -,0,28,109,32,2,0
57 -,0,25,111,48,3,0
58 -,0,25,113,48,3,0
59 -,0,25,115,48,3,0
60 -,0,25,117,48,3,0
61 -,0,25,119,48,3,0
62 -,0,24,121,80,1,0
63 -,0,24,123,80,1,0
64 -,0,24,125,80,1,0
65 -,0,24,127,80,1,0
66 -,0,24,129,80,1,0
67 -,0,24,131,80,1,0
68 -,0,24,133,80,1,0
69 -,0,24,135,80,1,0
70 -,0,24,137,80,1,0
71 -,0,24,139,80,1,0
72 -,0,24,141,80,1,0
73 -,0,24,143,80,1,0
74 -,0,24,145,80,1,0
75 -,0,24,147,80,1,0
76 -,0,24,149,80,1,0
77 -,0,24,151,80,1,0
78 -,0,24,153,80,1,0
79 -,0,24,155,80,1,0
80 -,0,24,157,80,1,0
81 -,0,24,159,80,1,0
82 -,0,24,161,80,1,0
83 -,0,24,163,80,1,0
84 -,0,24,165,80,1,0
85 -,0,24,167,80,1,0
86 -,0,24,169,80,1,0
87 -,0,24,171,80,1,0
88 -,0,24,173,80,1,0
89 -,0,24,175,80,1,0
90 -,0,24,177,80,1,0
91 -,0,24,179,80,1,0
92 -,0,24,181,80,1,0
93 -,0,24,183,80,1,0
94 -,0,24,185,80,1,0
95 -,0,24,187,80,1,0
96 -,0,24,189,80,1,0
97 -,0,24,191,80,1,0
98 -,0,24,193,80,1,0
99 -,0,24,195,80,1,0
100 -,0,24,197,80,1,0
101 -,0,24,199,80,1,0
102 -,0,24,201,80,1,0
103 -,0,24,203,80,1,0
104 -,0,29,205,80,1,0
105 -,0,30,207,80,1,0
106 -,0,31,209,80,1,0
107 -,0,32,211,80,1,0
108 -,0,33,213,80,1,0
109 -,0,34,215,80,1,0
110 -,0,35,217,80,1,0
111 -,0,36,219,80,1,0
112 -,0,37,221,80,1,0
113 -,0,38,223,80,1,0
114 -,0,39,225,80,1,0
115 -,0,40,227,80,1,0
116 -,0,41,229,80,1,0
117 -,0,42,231,80,1,0
118 -,0,43,233,80,1,0
119 -,0,44,235,80,1,0
120 -,0,45,237,80,1,0
121 -,0,46,239,80,1,0
122 -,0,47,241,80,1,0
123 -,0,48,243,80,1,0
124 -,0,29,245,80,1,0
125 -,0,24,247,80,1,0
126 -,0,24,249,80,1,0
127 -,0,24,251,80,1,0
128 -,0,24,253,80,1,0
129 -,0,24,255,80,1,0
130 -,0,24,257,80,1,0
131 -,0,24,259,80,1,0
132 -,0,24,261,80,1,0
133 -,0,24,263,80,1,0
134 -,0,24,265,80,1,0
135 -,0,24,267,80,1,0
136 -,0,24,269,80,1,0
137 -,0,24,271,80,1,0
138 -,0,24,273,80,1,0
139 -,0,24,275,80,1,0
140 -,0,24,277,80,1,0
141 -,0,24,279,80,1,0
142 -,0,24,281,80,1,0
143 -,0,24,283,80,1,0
144 -,0,24,285,80,1,0
145 -,0,24,287,80,1,0
146 -,0,24,289,80,1,0
147 -,0,49,291,24,1,0
148 -,0,28,293,16,1,0
149 -,1,1,295,16,1,0
150 -,1,1,297,24,1,0
151 -,0,50,299,24,1,0
152 -,0,28,301,32,2,0
153 -,0,28,303,32,2,0
154 -,0,28,305,32,2,0
155 -,0,28,307,32,2,0
156 -,0,28,309,32,2,0
157 -,0,28,311,32,2,0
158 -,0,28,313,32,2,0
159 -,0,28,315,32,2,0
160 -,0,28,317,32,2,0
161 -,0,28,319,32,2,0
162 -,0,28,321,32,2,0
163 -,1,1,323,32,1,0
164 -,1,51,325,72,1,0
165 -,1,1,327,40,1,0
166 -,1,1,329,40,1,0
167 -,0,28,331,16,1,0
168 -,0,52,333,40,1,0
169 -,0,53,335,80,1,0
170 -,0,28,337,16,1,0
171 -,0,28,339,24,1,0
172 -,7,54,341,16,1,0
173 -,7,54,343,16,1,0
174 -,7,54,345,16,1,0
175 -,7,54,347,16,1,0
176 -,7,54,349,16,1,0
177 -,0,25,351,48,3,0
178 -,0,24,353,80,2,0
179 -,0,24,355,80,2,0
180 -,4,1,357,128,2,0
181 -,0,28,359,16,1,0
182 -,0,55,361,16,0,0
183 -,0,55,363,16,0,0
184 -,0,52,365,40,2,0
185 -,0,55,367,16,0,0
186 -,0,52,369,40,1,0
187 -,0,52,371,40,1,0
188 -,0,52,373,40,1,0
189 -,0,55,375,16,0,0
190 -,0,52,377,40,1,0
191 -,0,52,379,40,2,0
192 -,0,52,381,40,1,0
193 -,0,55,383,16,0,0
194 -,0,52,385,40,1,0
195 -,1,1,387,262160,0,0
196 -,1,1,389,2064,256,0
197 -,1,1,391,2064,0,0
198 -,1,1,393,2064,0,0
199 -,1,1,395,80,1,0
200 -,1,1,397,152,3,0
201 -,0,28,399,5448,559,0
202 -,1,1,401,4136,28,0
203 -,0,28,403,752,22,0
204 -,0,28,405,10152,1166,0
205 -,1,1,407,32,1,0
206 -,4,1,409,224,4,0
207 -,4,1,411,224,4,0
208 -,4,1,413,224,4,0
209 -,1,1,415,24,1,0
210 -,4,56,417,480,4,0
211 -,4,56,419,480,4,0
212 -,4,56,421,480,4,0
213 -,2,57,423,32,1,0
214 -,2,58,425,32,1,0
215 -,2,59,427,48,1,0
216 -,2,60,429,40,1,0
217 -,2,61,431,32,1,0
218 -,2,62,433,40,1,0
219 -,2,63,435,40,1,0
220 -,2,64,437,48,1,0
221 -,2,65,439,32,1,0
222 -,2,66,441,40,1,0
223 -,2,67,443,40,1,0
224 -,2,68,445,40,1,0
225 -,2,69,447,32,1,0
226 -,2,70,449,32,1,0
227 -,2,71,451,32,1,0
228 -,2,72,453,32,1,0
229 -,2,73,455,32,1,0
230 -,2,74,457,32,1,0
231 -,2,75,459,40,1,0
232 -,2,76,461,40,1,0
233 -,2,77,463,32,1,0
234 -,2,78,465,32,1,0
235 -,2,79,467,32,1,0
236 -,2,80,469,40,1,0
237 -,2,81,471,32,1,0
238 -,2,82,473,32,1,0
239 -,2,83,475,40,1,0
240 -,2,84,477,40,1,0
241 -,2,85,479,32,1,0
242 -,2,86,481,32,1,0
243 -,2,87,483,32,1,0
244 -,2,88,485,40,1,0
245 -,2,89,487,40,1,0
246 -,2,90,489,32,1,0
247 -,2,91,491,40,1,0
248 -,2,92,493,40,1,0
249 -,2,93,495,32,1,0
250 -,2,94,497,40,1,0
251 -,2,95,499,40,1,0
252 -,2,96,501,40,1,0
253 -,2,97,503,40,1,0
254 -,2,98,505,40,1,0
255 -,2,99,507,32,1,0
256 -,2,100,509,32,1,0
257 -,2,101,511,32,1,0
258 -,2,102,513,40,1,0
259 -,2,103,515,32,1,0
260 -,2,104,517,40,1,0
261 -,2,105,519,32,1,0
262 -,2,106,521,32,1,0
263 -,2,107,523,40,1,0
264 -,2,108,525,40,1,0
265 -,2,109,527,40,1,0
266 -,2,110,529,40,1,0
267 -,2,111,531,40,1,0
268 -,2,112,533,32,1,0
269 -,2,113,535,32,1,0
270 -,2,114,537,32,1,0
271 -,2,115,539,48,1,0
272 -,2,116,541,40,1,0
273 -,2,117,543,32,1,0
274 -,2,118,545,32,1,0
275 -,2,119,547,40,1,0
276 -,2,120,549,32,1,0
277 -,2,121,551,32,1,0
278 -,2,122,553,32,1,0
279 -,2,123,555,40,1,0
280 -,2,124,557,32,1,0
281 -,2,125,559,32,1,0
282 -,2,126,561,32,1,0
283 -,2,127,563,40,1,0
284 -,2,128,565,32,1,0
285 -,2,129,567,40,1,0
286 -,2,130,569,32,1,0
287 -,2,131,571,32,1,0
288 -,2,132,573,32,1,0
289 -,2,133,575,40,1,0
290 -,2,134,577,40,1,0
291 -,2,135,579,32,1,0
292 -,2,136,581,32,1,0
293 -,2,137,583,56,1,0
294 -,2,138,585,32,1,0
295 -,2,139,587,48,1,0
296 -,2,140,589,40,1,0
297 -,2,141,591,32,1,0
298 -,2,142,593,32,1,0
299 -,2,143,595,48,1,0
300 -,2,144,597,56,1,0
301 -,2,145,599,40,1,0
302 -,2,146,601,32,1,0
303 -,2,147,603,40,1,0
304 -,2,148,605,32,1,0
305 -,2,149,607,32,1,0
306 -,2,150,609,32,1,0
307 -,2,151,611,32,1,0
308 -,2,152,613,40,1,0
309 -,2,153,615,48,1,0
310 -,2,154,617,40,1,0
311 -,2,155,619,40,1,0
312 -,2,156,621,32,1,0
313 -,2,157,623,32,1,0
314 -,2,158,625,32,1,0
315 -,2,159,627,32,1,0
316 -,2,160,629,40,1,0
317 -,2,161,631,40,1,0
318 -,2,162,633,40,1,0
319 -,2,163,635,32,1,0
320 -,2,164,637,40,1,0
321 -,2,165,639,32,1,0
322 -,2,166,641,48,1,0
323 -,2,167,643,48,1,0
324 -,2,168,645,32,1,0
325 -,2,169,647,40,1,0
326 -,2,170,649,32,1,0
327 -,2,171,651,32,1,0
328 -,2,172,653,32,1,0
329 -,2,173,655,40,1,0
330 -,2,174,657,32,1,0
331 -,2,175,659,32,1,0
332 -,2,176,661,32,1,0
333 -,2,177,663,32,1,0
334 -,2,178,665,40,1,0
335 -,2,179,667,32,1,0
336 -,2,180,669,40,1,0
337 -,2,181,671,32,1,0
338 -,2,182,673,40,1,0
339 -,2,183,675,32,1,0
340 -,2,184,677,32,1,0
341 -,2,185,679,32,1,0
342 -,2,186,681,40,1,0
343 -,2,187,683,32,1,0
344 -,2,188,685,32,1,0
345 -,2,189,687,32,1,0
346 -,2,190,689,32,1,0
347 -,2,191,691,32,1,0
348 -,2,192,693,40,1,0
349 -,2,193,695,32,1,0
350 -,2,194,697,32,1,0
351 -,2,195,699,32,1,0
352 -,2,196,701,32,1,0
353 -,2,197,703,32,1,0
354 -,2,198,705,40,1,0
355 -,2,199,707,32,1,0
356 -,2,200,709,40,1,0
357 -,2,201,711,32,1,0
358 -,2,54,713,32,1,0
359 -,2,202,715,40,1,0
360 -,2,203,717,32,1,0
361 -,2,204,719,32,1,0
362 -,2,205,721,32,1,0
363 -,2,206,723,40,1,0
364 -,2,207,725,32,1,0
365 -,2,208,727,32,1,0
366 -,2,209,729,32,1,0
367 -,2,210,731,40,1,0
368 -,2,211,733,32,1,0
369 -,2,212,735,32,1,0
370 -,2,213,737,48,1,0
371 -,2,214,739,32,1,0
372 -,2,215,741,32,1,0
373 -,2,216,743,56,1,0
374 -,2,217,745,40,1,0
375 -,2,218,747,40,1,0
376 -,2,219,749,32,1,0
377 -,2,220,751,32,1,0
378 -,2,221,753,32,1,0
379 -,2,222,755,40,1,0
380 -,2,223,757,32,1,0
381 -,2,224,759,56,1,0
382 -,2,225,761,40,1,0
383 -,2,226,763,32,1,0
384 -,2,227,765,40,1,0
385 -,2,228,767,32,1,0
386 -,2,229,769,32,1,0
387 -,2,230,771,32,1,0
388 -,2,231,773,32,1,0
389 -,2,232,775,40,1,0
390 -,2,233,777,32,1,0
391 -,2,234,779,32,1,0
392 -,2,235,781,32,1,0
393 -,2,236,783,32,1,0
394 -,2,237,785,32,1,0
395 -,2,238,787,40,1,0
396 -,2,239,789,32,1,0
397 -,2,240,791,32,1,0
398 -,2,241,793,40,1,0
399 -,2,242,795,40,1,0
400 -,2,243,797,48,1,0
401 -,2,244,799,32,1,0
402 -,2,245,801,40,1,0
403 -,2,246,803,32,1,0
404 -,2,247,805,40,1,0
405 -,2,248,807,40,1,0
406 -,2,249,809,32,1,0
407 -,2,250,811,32,1,0
408 -,2,251,813,32,1,0
409 -,2,252,815,40,1,0
410 -,2,253,817,32,1,0
411 -,2,254,819,40,1,0
412 -,2,255,821,32,1,0
413 -,2,256,823,32,1,0
414 -,2,257,825,40,1,0
415 -,2,258,827,32,1,0
416 -,2,259,829,40,1,0
417 -,2,260,831,32,1,0
418 -,2,261,833,32,1,0
419 -,2,262,835,40,1,0
420 -,2,263,837,40,1,0
421 -,2,264,839,32,1,0
422 -,2,265,841,32,1,0
423 -,2,266,843,32,1,0
424 -,2,267,845,40,1,0
425 -,2,268,847,32,1,0
426 -,2,269,849,40,1,0
427 -,2,270,851,40,1,0
428 -,2,271,853,40,1,0
429 -,2,272,855,48,1,0
430 -,2,273,857,40,1,0
431 -,2,274,859,48,1,0
432 -,2,275,861,32,1,0
433 -,2,276,863,32,1,0
434 -,2,277,865,32,1,0
435 -,2,278,867,32,1,0
436 -,2,279,869,32,1,0
437 -,2,280,871,40,1,0
438 -,2,281,873,32,1,0
439 -,2,282,875,32,1,0
440 -,2,283,877,32,1,0
441 -,2,284,879,32,1,0
442 -,2,285,881,32,1,0
443 -,2,286,883,32,1,0
444 -,2,287,885,40,1,0
445 -,2,288,887,32,1,0
446 -,2,289,889,32,1,0
447 -,2,290,891,32,1,0
448 -,0,291,893,32,1,0
449 -,0,291,895,32,1,0
450 -,0,291,897,32,1,0
451 -,0,291,899,32,1,0
452 -,0,291,901,32,1,0
453 -,0,291,903,32,1,0
454 -,0,291,905,32,1,0
455 -,0,291,907,32,1,0
456 -,0,291,909,32,1,0
457 -,0,291,911,32,1,0
458 -,0,291,913,32,1,0
459 -,0,291,915,32,1,0
460 -,0,291,917,32,1,0
461 -,0,291,919,32,1,0
462 -,0,291,921,32,1,0
463 -,0,291,923,32,1,0
464 -,0,291,925,32,1,0
465 -,0,291,927,32,1,0
466 -,0,291,929,32,1,0
467 -,0,291,931,32,1,0
468 -,0,291,933,32,1,0
469 -,0,291,935,32,1,0
470 -,0,291,937,32,1,0
471 -,0,291,939,32,1,0
472 -,0,291,941,32,1,0
473 -,0,291,943,32,1,0
474 -,0,291,945,32,1,0
475 -,0,291,947,32,1,0
476 -,0,291,949,32,1,0
477 -,0,291,951,32,1,0
478 -,0,291,953,32,1,0
479 -,0,291,955,32,1,0
480 -,12,256,957,32,2,0
481 -,12,256,959,32,2,0
482 -,12,256,961,32,2,0
483 -,12,256,963,32,2,0
484 -,12,256,965,32,2,0
485 -,12,256,967,32,2,0
486 -,12,256,969,32,2,0
487 -,12,256,971,32,2,0
488 -,12,256,973,32,2,0
489 -,12,256,975,32,2,0
490 -,12,256,977,32,2,0
491 -,12,256,979,32,2,0
492 -,12,256,981,32,2,0
493 -,12,256,983,32,2,0
494 -,0,292,985,64,5,0
495 -,0,292,987,64,5,0
496 -,0,292,989,64,5,0
497 -,0,292,991,64,5,0
498 -,0,292,993,64,5,0
499 -,0,292,995,64,5,0
500 -,0,292,997,64,5,0
501 -,0,292,999,64,5,0
502 -,0,292,1001,64,5,0
503 -,0,292,1003,64,5,0
504 -,0,292,1005,64,5,0
505 -,0,24,1007,80,1,0
506 -,0,24,1009,80,1,0
507 -,0,24,1011,80,1,0
508 -,0,24,1013,80,1,0
509 -,0,24,1015,80,1,0
510 -,0,24,1017,80,1,0
511 -,0,24,1019,80,1,0
512 -,0,24,1021,80,1,0
513 -,0,24,1023,80,1,0
514 -,0,24,1025,80,1,0
515 -,0,24,1027,80,1,0
516 -,0,24,1029,80,1,0
517 -,0,24,1031,80,1,0
518 -,0,24,1033,80,1,0
519 -,0,24,1035,80,1,0
520 -,0,24,1037,80,1,0
521 -,0,24,1039,80,1,0
522 -,0,24,1041,80,1,0
523 -,0,24,1043,80,1,0
524 -,0,24,1045,80,1,0
525 -,0,24,1047,80,1,0
526 -,0,24,1049,80,1,0
527 -,0,24,1051,80,1,0
528 -,0,24,1053,80,1,0
529 -,0,24,1055,80,1,0
530 -,0,24,1057,80,1,0
531 -,0,24,1059,80,1,0
532 -,0,24,1061,80,1,0
533 -,0,24,1063,80,1,0
534 -,0,24,1065,80,1,0
535 -,0,24,1067,80,1,0
536 -,0,24,1069,80,1,0
537 -,0,24,1071,80,1,0
538 -,0,24,1073,80,1,0
539 -,0,24,1075,80,1,0
540 -,0,24,1077,80,1,0
541 -,0,24,1079,80,1,0
542 -,4,293,1081,352,4,0
543 -,5,1,1083,64,8,0
544 -,3,204,1085,56,4,0
545 -,0,28,1087,136,4,0
546 -,5,1,1089,64,6,0
547 -,3,294,1091,56,5,0
548 -,4,295,1093,768,9,0
549 -,5,1,1095,64,6,0
550 -,3,204,1097,56,3,0
551 -,4,296,1099,320,4,0
552 -,2,297,1101,32,1,0
553 -,5,298,1103,64,11,0
554 -,2,299,1105,32,1,0
555 -,2,300,1107,40,1,0
556 -,3,294,1109,208,24,0
557 -,3,204,1111,32,3,0
558 -,2,301,1113,48,1,0
559 -,0,28,1115,35112,4,0
560 -,5,302,1117,64,6,0
561 -,3,294,1119,152,15,0
562 -,2,303,1121,72,1,0
563 -,3,304,1123,272,19,0
564 -,3,65,1125,32,4,0
565 -,3,204,1127,56,15,0
566 -,5,61,1129,56,6,0
567 -,3,204,1131,24,6,0
568 -,0,28,1133,488,4,0
569 -,5,305,1135,64,6,0
570 -,3,294,1137,192,21,0
571 -,0,28,1139,88,4,0
572 -,5,306,1141,64,6,0
573 -,3,294,1143,296,34,0
574 -,3,307,1145,344,16,0
575 -,3,65,1147,32,4,0
576 -,3,204,1149,24,9,0
577 -,3,204,1151,56,4,0
578 -,3,65,1153,32,4,0
579 -,3,308,1155,72,4,0
580 -,0,28,1157,304,4,0
581 -,5,309,1159,56,6,0
582 -,3,294,1161,152,11,0
583 -,3,308,1163,72,4,0
584 -,0,28,1165,248,4,0
585 -,5,310,1167,56,6,0
586 -,5,311,1169,48,5,0
587 -,0,28,1171,216,4,0
588 -,5,312,1173,56,6,0
589 -,3,65,1175,32,2,0
590 -,0,28,1177,128,4,0
591 -,5,313,1179,56,6,0
592 -,3,308,1181,72,4,0
593 -,0,28,1183,176,4,0
594 -,5,314,1185,64,6,0
595 -,3,294,1187,320,38,0
596 -,5,315,1189,64,6,0
597 -,3,316,1191,240,23,0
598 -,0,28,1193,280,4,0
599 -,5,317,1195,64,6,0
600 -,0,28,1197,280,4,0
601 -,5,1,1199,64,6,0
602 -,0,28,1201,104,4,0
603 -,5,318,1203,64,6,0
604 -,3,319,1205,208,42,0
605 -,3,65,1207,32,4,0
606 -,2,320,1209,32,1,0
607 -,3,204,1211,24,10,0
608 -,0,28,1213,208,4,0
609 -,5,321,1215,64,6,0
610 -,3,294,1217,368,43,0
611 -,3,322,1219,216,22,0
612 -,0,28,1221,480,4,0
613 -,5,323,1223,64,6,0
614 -,0,28,1225,160,4,0
615 -,5,1,1227,64,6,0
616 -,3,67,1229,64,2,0
617 -,3,324,1231,32,18,0
618 -,0,28,1233,368,4,0
619 -,5,325,1235,64,6,0
620 -,3,294,1237,184,16,0
621 -,4,326,1239,192,5,0
622 -,3,204,1241,40,3,0
623 -,1,1,1243,24616,29,0
624 -,1,1,1245,3112,4,0
625 -,1,1,1247,3112,1,0
626 -,2,327,1249,40,1,0
627 -,0,291,1251,32,2,0
628 -,2,328,1253,48,1,0
629 -,0,291,1255,32,2,0
630 -,2,329,1257,48,1,0
631 -,0,291,1259,32,2,0
632 -,2,330,1261,48,1,0
633 -,0,291,1263,32,2,0
634 -,2,331,1265,40,1,0
635 -,0,291,1267,32,2,0
636 -,2,332,1269,40,1,0
637 -,0,291,1271,32,2,0
638 -,2,333,1273,48,1,0
639 -,0,291,1275,32,2,0
640 -,2,334,1277,64,1,0
641 -,0,291,1279,32,2,0
642 -,2,335,1281,40,1,0
643 -,12,256,1283,32,2,0
644 -,2,336,1285,32,1,0
645 -,12,256,1287,32,2,0
646 -,2,337,1289,32,1,0
647 -,12,256,1291,32,2,0
648 -,2,338,1293,32,1,0
649 -,2,339,1295,32,1,0
650 -,2,340,1297,32,1,0
651 -,2,341,1299,40,1,0
652 -,2,342,1301,40,1,0
653 -,2,343,1303,32,1,0
654 -,2,344,1305,40,1,0
655 -,2,345,1307,40,1,0
656 -,2,346,1309,40,1,0
657 -,2,347,1311,48,1,0
658 -,2,348,1313,48,1,0
659 -,2,349,1315,40,1,0
660 -,2,350,1317,32,1,0
661 -,2,351,1319,32,1,0
662 -,2,352,1321,48,1,0
663 -,2,353,1323,32,1,0
664 -,2,354,1325,32,1,0
665 -,2,355,1327,40,1,0
666 -,2,356,1329,32,1,0
667 -,2,357,1331,32,1,0
668 -,2,358,1333,32,1,0
669 -,2,359,1335,32,1,0
670 -,2,360,1337,32,1,0
671 -,2,361,1339,40,1,0
672 -,2,362,1341,32,1,0
673 -,2,363,1343,32,1,0
674 -,2,364,1345,32,1,0
675 -,2,365,1347,32,1,0
676 -,2,366,1349,32,1,0
677 -,2,367,1351,32,1,0
678 -,2,368,1353,32,1,0
679 -,2,369,1355,32,1,0
680 -,2,370,1357,32,1,0
681 -,2,371,1359,32,1,0
682 -,2,372,1361,32,1,0
683 -,2,373,1363,32,1,0
684 -,2,374,1365,40,1,0
685 -,2,375,1367,32,1,0
686 -,2,376,1369,40,1,0
687 -,2,377,1371,32,1,0
688 -,2,378,1373,40,1,0
689 -,2,379,1375,32,1,0
690 -,2,380,1377,32,1,0
691 -,2,381,1379,32,1,0
692 -,2,382,1381,32,1,0
693 -,2,383,1383,32,1,0
694 -,2,384,1385,32,1,0
695 -,2,385,1387,32,1,0
696 -,2,386,1389,40,1,0
697 -,2,387,1391,40,1,0
698 -,2,388,1393,32,1,0
699 -,2,389,1395,40,1,0
700 -,2,390,1397,32,1,0
701 -,2,391,1399,32,1,0
702 -,2,392,1401,40,1,0
703 -,2,393,1403,40,1,0
704 -,2,394,1405,32,1,0
705 -,2,395,1407,48,1,0
706 -,2,396,1409,48,1,0
707 -,2,397,1411,32,1,0
708 -,2,398,1413,32,1,0
709 -,2,399,1415,32,1,0
710 -,2,400,1417,32,1,0
711 -,2,401,1419,32,1,0
712 -,2,402,1421,40,1,0
713 -,2,403,1423,32,1,0
714 -,2,404,1425,40,1,0
715 -,2,405,1427,32,1,0
716 -,2,406,1429,40,1,0
717 -,2,407,1431,32,1,0
718 -,2,408,1433,32,1,0
719 -,2,409,1435,32,1,0
720 -,2,410,1437,40,1,0
721 -,2,411,1439,32,1,0
722 -,2,412,1441,48,1,0
723 -,2,413,1443,40,1,0
724 -,2,414,1445,32,1,0
725 -,2,415,1447,32,1,0
726 -,2,416,1449,32,1,0
727 -,2,417,1451,40,1,0
728 -,2,418,1453,40,1,0
729 -,2,419,1455,40,1,0
730 -,2,420,1457,32,1,0
731 -,2,421,1459,32,1,0
732 -,2,422,1461,32,1,0
733 -,2,423,1463,32,1,0
734 -,2,424,1465,40,1,0
735 -,2,425,1467,32,1,0
736 -,2,426,1469,40,1,0
737 -,2,427,1471,32,1,0
738 -,2,428,1473,32,1,0
739 -,2,429,1475,40,1,0
740 -,2,430,1477,40,1,0
741 -,2,431,1479,40,1,0
742 -,2,432,1481,32,1,0
743 -,2,433,1483,32,1,0
744 -,2,434,1485,32,1,0
745 -,2,435,1487,40,1,0
746 -,2,436,1489,40,1,0
747 -,2,437,1491,40,1,0
748 -,2,438,1493,40,1,0
749 -,2,439,1495,40,1,0
750 -,2,440,1497,32,1,0
751 -,2,441,1499,40,1,0
752 -,2,442,1501,40,1,0
753 -,2,443,1503,40,1,0
754 -,2,444,1505,32,1,0
755 -,2,445,1507,32,1,0
756 -,2,446,1509,32,1,0
757 -,2,447,1511,48,1,0
758 -,2,448,1513,32,1,0
759 -,2,449,1515,32,1,0
760 -,2,450,1517,32,1,0
761 -,2,451,1519,40,1,0
762 -,2,452,1521,32,1,0
763 -,2,453,1523,32,1,0
764 -,2,454,1525,40,1,0
765 -,2,455,1527,32,1,0
766 -,2,456,1529,40,1,0
767 -,2,457,1531,32,1,0
768 -,2,458,1533,40,1,0
769 -,2,459,1535,32,1,0
770 -,2,460,1537,32,1,0
771 -,2,461,1539,32,1,0
772 -,2,462,1541,40,1,0
773 -,2,463,1543,40,1,0
774 -,2,464,1545,32,1,0
775 -,2,465,1547,32,1,0
776 -,2,466,1549,32,1,0
777 -,2,467,1551,32,1,0
778 -,2,468,1553,40,1,0
779 -,2,469,1555,32,1,0
780 -,2,470,1557,32,1,0
781 -,2,471,1559,32,1,0
782 -,2,472,1561,32,1,0
783 -,2,473,1563,32,1,0
784 -,2,474,1565,40,1,0
785 -,2,298,1567,32,1,0
786 -,2,475,1569,32,1,0
787 -,2,476,1571,32,1,0
788 -,2,477,1573,32,1,0
789 -,2,478,1575,40,1,0
790 -,2,479,1577,32,1,0
791 -,2,480,1579,40,1,0
792 -,2,481,1581,32,1,0
793 -,2,482,1583,40,1,0
794 -,2,483,1585,32,1,0
795 -,2,484,1587,32,1,0
796 -,2,485,1589,32,1,0
797 -,2,486,1591,32,1,0
798 -,2,487,1593,48,1,0
799 -,2,488,1595,40,1,0
800 -,2,489,1597,40,1,0
801 -,2,490,1599,32,1,0
802 -,2,491,1601,32,1,0
803 -,2,492,1603,32,1,0
804 -,2,493,1605,40,1,0
805 -,2,494,1607,32,1,0
806 -,2,495,1609,32,1,0
807 -,2,496,1611,48,1,0
808 -,2,497,1613,32,1,0
809 -,2,498,1615,40,1,0
810 -,2,499,1617,32,1,0
811 -,2,500,1619,32,1,0
812 -,2,501,1621,40,1,0
813 -,2,502,1623,32,1,0
814 -,2,503,1625,32,1,0
815 -,2,504,1627,40,1,0
816 -,2,505,1629,32,1,0
817 -,2,506,1631,40,1,0
818 -,2,507,1633,32,1,0
819 -,2,508,1635,32,1,0
820 -,2,509,1637,40,1,0
821 -,2,510,1639,48,1,0
822 -,2,511,1641,32,1,0
823 -,2,512,1643,40,1,0
824 -,2,513,1645,40,1,0
825 -,2,514,1647,40,1,0
826 -,2,515,1649,40,1,0
827 -,0,516,1651,2040,237,0
828 -,3,146,1653,40,98,0
829 -,3,465,1655,24,60,0
830 -,5,67,1657,64,12,0
831 -,0,24,1659,80,4,0
832 -,0,517,1661,168,3,0
833 -,3,204,1663,32,3,0
834 -,4,518,1665,1472,3,0
835 -,4,519,1667,128,4,0
836 -,4,520,1669,128,4,0
837 -,4,521,1671,256,6,0
838 -,4,522,1673,320,7,0
839 -,4,523,1675,352,7,0
840 -,4,524,1677,224,5,0
841 -,4,525,1679,192,8,0
842 -,4,526,1681,192,8,0
843 -,4,527,1683,192,8,0
844 -,4,528,1685,1056,12,0
845 -,4,529,1687,160,5,0
846 -,4,530,1689,1440,14,0
847 -,4,531,1691,1056,11,0
848 -,4,532,1693,192,5,0
849 -,4,533,1695,192,5,0
850 -,4,534,1697,96,5,0
851 -,4,535,1699,224,5,0
852 -,4,536,1701,96,4,0
853 -,4,537,1703,160,8,0
854 -,4,538,1705,160,5,0
855 -,4,539,1707,1472,14,0
856 -,4,540,1709,1152,12,0
857 -,4,541,1711,224,6,0
858 -,4,542,1713,224,6,0
859 -,4,543,1715,320,7,0
860 -,4,544,1717,256,5,0
861 -,4,545,1719,768,7,0
862 -,4,546,1721,416,5,0
863 -,4,547,1723,320,4,0
864 -,4,548,1725,320,4,0
865 -,4,549,1727,320,5,0
866 -,4,550,1729,832,8,0
867 -,4,551,1731,1536,14,0
868 -,4,552,1733,1440,9,0
869 -,4,553,1735,1088,12,0
870 -,4,554,1737,192,5,0
871 -,4,555,1739,384,7,0
872 -,4,556,1741,96,4,0
873 -,4,557,1743,96,4,0
874 -,4,558,1745,800,7,0
875 -,4,559,1747,928,5,0
876 -,4,560,1749,928,5,0
877 -,4,561,1751,672,4,0
878 -,4,562,1753,352,4,0
879 -,4,563,1755,352,4,0
880 -,4,564,1757,1184,4,0
881 -,4,565,1759,352,4,0
882 -,4,566,1761,352,4,0
883 -,4,567,1763,288,5,0
884 -,4,568,1765,2944,18,0
885 -,4,569,1767,160,3,0
886 -,4,570,1769,160,5,0
887 -,4,571,1771,160,5,0
888 -,4,572,1773,160,5,0
889 -,4,573,1775,160,5,0
890 -,4,574,1777,160,5,0
891 -,4,575,1779,160,5,0
892 -,4,576,1781,288,5,0
893 -,4,577,1783,160,4,0
894 -,4,578,1785,160,4,0
895 -,4,579,1787,992,13,0
896 -,4,580,1789,192,6,0
897 -,4,581,1791,320,6,0
898 -,4,582,1793,224,4,0
899 -,4,583,1795,128,4,0
900 -,4,584,1797,128,3,0
901 -,4,585,1799,128,3,0
902 -,4,586,1801,128,3,0
903 -,4,587,1803,128,3,0
904 -,4,588,1805,128,4,0
905 -,4,589,1807,96,4,0
906 -,4,590,1809,96,4,0
907 -,4,591,1811,96,4,0
908 -,4,592,1813,128,4,0
909 -,4,593,1815,128,4,0
910 -,4,594,1817,864,9,0
911 -,4,595,1819,608,6,0
912 -,4,596,1821,576,6,0
913 -,4,597,1823,416,5,0
914 -,4,598,1825,544,9,0
915 -,4,599,1827,192,4,0
916 -,4,600,1829,128,5,0
917 -,4,601,1831,480,7,0
918 -,4,602,1833,224,4,0
919 -,4,603,1835,352,8,0
920 -,4,604,1837,352,8,0
921 -,4,605,1839,320,7,0
922 -,4,606,1841,320,7,0
923 -,4,607,1843,320,7,0
924 -,4,608,1845,160,4,0
925 -,4,609,1847,192,5,0
926 -,4,610,1849,384,6,0
927 -,4,611,1851,416,6,0
928 -,4,612,1853,352,6,0
929 -,4,613,1855,384,7,0
930 -,4,614,1857,448,6,0
931 -,4,615,1859,352,4,0
932 -,4,616,1861,448,5,0
933 -,4,617,1863,576,5,0
934 -,4,618,1865,576,5,0
935 -,4,619,1867,640,6,0
936 -,4,620,1869,224,3,0
937 -,4,621,1871,160,4,0
938 -,4,622,1873,256,4,0
939 -,4,623,1875,10848,34,0
940 -,4,624,1877,3104,16,0
941 -,4,625,1879,128,4,0
942 -,4,626,1881,15360,65,0
943 -,4,627,1883,128,4,0
944 -,4,628,1885,128,4,0
945 -,4,629,1887,160,4,0
946 -,4,630,1889,128,4,0
947 -,4,631,1891,96,3,0
948 -,4,632,1893,96,3,0
949 -,4,633,1895,3456,10,0
950 -,4,634,1897,128,4,0
951 -,4,635,1899,6848,25,0
952 -,4,636,1901,128,4,0
953 -,4,637,1903,1120,9,0
954 -,4,638,1905,1600,13,0
955 -,4,639,1907,2496,8,0
956 -,4,640,1909,1152,5,0
957 -,4,641,1911,128,4,0
958 -,4,642,1913,128,4,0
959 -,4,643,1915,96,4,0
960 -,4,644,1917,96,4,0
961 -,4,645,1919,96,4,0
962 -,4,646,1921,96,4,0
963 -,4,647,1923,128,4,0
964 -,4,648,1925,544,20,0
965 -,4,649,1927,320,4,0
966 -,4,650,1929,320,4,0
967 -,4,651,1931,288,4,0
968 -,4,652,1933,288,4,0
969 -,4,653,1935,288,4,0
970 -,4,654,1937,288,4,0
971 -,4,655,1939,288,4,0
972 -,4,656,1941,288,4,0
973 -,4,657,1943,640,7,0
974 -,4,658,1945,608,6,0
975 -,4,659,1947,576,7,0
976 -,4,660,1949,544,6,0
977 -,4,661,1951,576,7,0
978 -,4,662,1953,544,6,0
979 -,4,663,1955,576,7,0
980 -,4,664,1957,544,6,0
981 -,4,665,1959,160,4,0
982 -,4,666,1961,96,4,0
983 -,4,667,1963,192,10,0
984 -,4,668,1965,288,4,0
985 -,4,669,1967,288,4,0
986 -,4,670,1969,576,7,0
987 -,4,671,1971,544,6,0
988 -,4,672,1973,96,4,0
989 -,4,673,1975,224,5,0
990 -,4,674,1977,96,4,0
991 -,4,675,1979,1024,5,0
992 -,4,676,1981,192,3,0
993 -,4,677,1983,256,3,0
994 -,4,678,1985,704,8,0
995 -,4,679,1987,960,5,0
996 -,4,680,1989,192,3,0
997 -,4,681,1991,192,3,0
998 -,4,682,1993,736,8,0
999 -,4,683,1995,96,4,0
1000 -,4,684,1997,832,7,0
1001 -,4,685,1999,96,4,0
1002 -,4,686,2001,2656,15,0
1003 -,4,687,2003,96,4,0
1004 -,4,688,2005,1312,9,0
1005 -,4,689,2007,6624,29,0
1006 -,4,690,2009,96,4,0
1007 -,4,691,2011,96,4,0
1008 -,4,692,2013,1440,13,0
1009 -,4,693,2015,1472,13,0
1010 -,4,694,2017,3136,12,0
1011 -,4,695,2019,224,5,0
1012 -,4,696,2021,576,7,0
1013 -,4,697,2023,3136,12,0
1014 -,4,698,2025,224,5,0
1015 -,4,699,2027,576,7,0
1016 -,4,700,2029,5120,21,0
1017 -,4,701,2031,6400,37,0
1018 -,4,702,2033,224,5,0
1019 -,4,703,2035,832,9,0
1020 -,4,704,2037,3008,12,0
1021 -,4,705,2039,224,5,0
1022 -,4,706,2041,448,7,0
1023 -,4,707,2043,4512,32,0
1024 -,4,708,2045,3040,12,0
1025 -,4,709,2047,224,5,0
1026 -,4,710,2049,224,5,0
1027 -,4,711,2051,224,5,0
1028 -,4,712,2053,1792,16,0
1029 -,4,713,2055,2976,12,0
1030 -,4,714,2057,224,5,0
1031 -,4,715,2059,224,5,0
1032 -,4,716,2061,224,5,0
1033 -,4,717,2063,704,7,0
1034 -,4,718,2065,224,5,0
1035 -,4,719,2067,224,5,0
1036 -,4,720,2069,384,6,0
1037 -,4,721,2071,704,7,0
1038 -,4,722,2073,224,5,0
1039 -,4,723,2075,224,5,0
1040 -,4,724,2077,384,6,0
1041 -,4,725,2079,384,6,0
1042 -,4,726,2081,4256,31,0
1043 -,4,727,2083,4064,22,0
1044 -,4,728,2085,4128,23,0
1045 -,4,729,2087,96,4,0
1046 -,4,730,2089,96,4,0
1047 -,4,731,2091,96,4,0
1048 -,4,732,2093,96,4,0
1049 -,4,733,2095,96,4,0
1050 -,4,734,2097,96,4,0
1051 -,4,735,2099,96,4,0
1052 -,4,736,2101,96,4,0
1053 -,4,737,2103,96,4,0
1054 -,4,738,2105,96,4,0
1055 -,4,739,2107,96,4,0
1056 -,4,740,2109,96,4,0
1057 -,4,741,2111,96,4,0
1058 -,4,742,2113,96,4,0
1059 -,4,743,2115,96,4,0
1060 -,4,744,2117,96,4,0
1061 -,4,745,2119,96,4,0
1062 -,4,746,2121,96,4,0
1063 -,4,747,2123,96,4,0
1064 -,4,748,2125,96,4,0
1065 -,4,749,2127,96,4,0
1066 -,4,750,2129,96,4,0
1067 -,4,751,2131,96,4,0
1068 -,4,752,2133,96,4,0
1069 -,4,753,2135,96,4,0
1070 -,4,754,2137,96,4,0
1071 -,4,755,2139,96,4,0
1072 -,4,756,2141,96,4,0
1073 -,4,757,2143,96,4,0
1074 -,4,758,2145,96,4,0
1075 -,4,759,2147,96,4,0
1076 -,4,760,2149,96,4,0
1077 -,4,761,2151,96,4,0
1078 -,4,762,2153,96,4,0
1079 -,4,763,2155,96,4,0
1080 -,4,764,2157,96,4,0
1081 -,4,765,2159,96,4,0
1082 -,4,766,2161,96,4,0
1083 -,4,767,2163,96,4,0
1084 -,4,768,2165,96,4,0
1085 -,4,769,2167,96,4,0
1086 -,4,770,2169,96,4,0
1087 -,4,771,2171,96,4,0
1088 -,4,772,2173,96,4,0
1089 -,4,773,2175,96,4,0
1090 -,4,774,2177,96,4,0
1091 -,4,775,2179,96,4,0
1092 -,4,776,2181,96,4,0
1093 -,4,777,2183,96,4,0
1094 -,4,778,2185,96,4,0
1095 -,4,779,2187,96,4,0
1096 -,4,780,2189,96,4,0
1097 -,4,781,2191,288,5,0
1098 -,4,782,2193,224,5,0
1099 -,4,783,2195,224,5,0
1100 -,4,784,2197,576,12,0
1101 -,4,785,2199,96,4,0
1102 -,4,786,2201,96,4,0
1103 -,4,787,2203,96,4,0
1104 -,4,788,2205,96,4,0
1105 -,4,789,2207,96,4,0
1106 -,4,790,2209,96,4,0
1107 -,4,791,2211,96,4,0
1108 -,4,792,2213,96,4,0
1109 -,4,793,2215,96,4,0
1110 -,4,794,2217,96,4,0
1111 -,4,795,2219,96,4,0
1112 -,4,796,2221,96,4,0
1113 -,4,797,2223,96,4,0
1114 -,4,798,2225,96,4,0
1115 -,4,799,2227,96,4,0
1116 -,4,800,2229,96,4,0
1117 -,4,801,2231,96,4,0
1118 -,4,802,2233,96,4,0
1119 -,4,803,2235,96,4,0
1120 -,4,804,2237,96,4,0
1121 -,4,805,2239,96,4,0
1122 -,4,806,2241,96,4,0
1123 -,4,807,2243,96,4,0
1124 -,4,808,2245,96,4,0
1125 -,4,809,2247,96,4,0
1126 -,4,810,2249,96,4,0
1127 -,4,811,2251,96,4,0
1128 -,4,812,2253,96,4,0
1129 -,4,813,2255,96,4,0
1130 -,4,814,2257,96,4,0
1131 -,4,815,2259,96,4,0
1132 -,4,816,2261,96,4,0
1133 -,4,817,2263,96,4,0
1134 -,4,818,2265,96,4,0
1135 -,4,819,2267,96,4,0
1136 -,4,820,2269,128,5,0
1137 -,4,821,2271,96,4,0
1138 -,4,822,2273,1088,9,0
1139 -,4,823,2275,128,4,0
1140 -,4,824,2277,512,6,0
1141 -,4,825,2279,96,4,0
1142 -,4,826,2281,320,4,0
1143 -,4,827,2283,928,7,0
1144 -,4,828,2285,96,4,0
1145 -,4,829,2287,96,4,0
1146 -,4,830,2289,96,4,0
1147 -,4,831,2291,96,4,0
1148 -,4,832,2293,96,4,0
1149 -,4,833,2295,96,4,0
1150 -,4,834,2297,96,4,0
1151 -,4,835,2299,96,4,0
1152 -,4,836,2301,96,4,0
1153 -,4,837,2303,224,5,0
1154 -,4,838,2305,224,5,0
1155 -,4,839,2307,96,4,0
1156 -,4,840,2309,96,4,0
1157 -,4,841,2311,3360,17,0
1158 -,4,842,2313,3232,17,0
1159 -,4,843,2315,96,4,0
1160 -,4,844,2317,6208,28,0
1161 -,4,845,2319,96,4,0
1162 -,4,846,2321,6144,37,0
1163 -,4,847,2323,96,4,0
1164 -,4,848,2325,7200,37,0
1165 -,4,849,2327,96,4,0
1166 -,4,850,2329,7680,35,0
1167 -,4,851,2331,96,4,0
1168 -,4,852,2333,704,5,0
1169 -,4,853,2335,2304,16,0
1170 -,4,854,2337,2272,15,0
1171 -,4,855,2339,96,4,0
1172 -,4,856,2341,96,4,0
1173 -,4,857,2343,2464,17,0
1174 -,4,858,2345,1152,5,0
1175 -,4,859,2347,5344,44,0
1176 -,4,860,2349,1952,12,0
1177 -,4,861,2351,320,7,0
1178 -,4,862,2353,288,7,0
1179 -,4,863,2355,96,4,0
1180 -,4,864,2357,416,7,0
1181 -,4,865,2359,1216,12,0
1182 -,4,866,2361,384,7,0
1183 -,4,867,2363,608,6,0
1184 -,4,868,2365,96,4,0
1185 -,4,869,2367,384,6,0
1186 -,4,870,2369,576,6,0
1187 -,4,871,2371,576,6,0
1188 -,4,872,2373,480,8,0
1189 -,4,873,2375,480,7,0
1190 -,4,874,2377,608,6,0
1191 -,4,875,2379,192,4,0
1192 -,4,876,2381,704,10,0
1193 -,4,877,2383,448,4,0
1194 -,4,878,2385,192,4,0
1195 -,4,879,2387,512,4,0
1196 -,4,880,2389,320,6,0
1197 -,4,881,2391,192,5,0
1198 -,4,882,2393,384,5,0
1199 -,4,883,2395,96,4,0
1200 -,4,884,2397,96,4,0
1201 -,4,885,2399,96,4,0
1202 -,4,886,2401,96,4,0
1203 -,4,887,2403,96,4,0
1204 -,4,888,2405,1280,18,0
1205 -,4,889,2407,672,8,0
1206 -,4,890,2409,832,9,0
1207 -,4,891,2411,768,8,0
1208 -,4,892,2413,768,8,0
1209 -,4,893,2415,736,11,0
1210 -,4,894,2417,608,9,0
1211 -,4,895,2419,608,9,0
1212 -,4,896,2421,608,9,0
1213 -,4,897,2423,608,9,0
1214 -,4,898,2425,608,9,0
1215 -,4,899,2427,736,10,0
1216 -,4,900,2429,1440,21,0
1217 -,4,901,2431,1440,21,0
1218 -,4,902,2433,1440,21,0
1219 -,4,903,2435,1440,21,0
1220 -,4,904,2437,1024,11,0
1221 -,4,905,2439,448,5,0
1222 -,4,906,2441,416,5,0
1223 -,4,907,2443,256,6,0
1224 -,4,908,2445,256,6,0
1225 -,4,909,2447,256,6,0
1226 -,4,910,2449,544,7,0
1227 -,4,911,2451,512,7,0
1228 -,4,912,2453,8576,31,0
1229 -,4,913,2455,992,7,0
1230 -,4,914,2457,832,6,0
1231 -,4,915,2459,96,4,0
1232 -,4,916,2461,96,4,0
1233 -,4,917,2463,96,4,0
1234 -,4,918,2465,96,4,0
1235 -,4,919,2467,96,4,0
1236 -,4,920,2469,7104,27,0
1237 -,4,921,2471,96,4,0
1238 -,4,922,2473,768,8,0
1239 -,4,923,2475,96,4,0
1240 -,4,924,2477,96,4,0
1241 -,4,925,2479,96,4,0
1242 -,4,926,2481,96,4,0
1243 -,4,927,2483,96,4,0
1244 -,4,928,2485,96,4,0
1245 -,4,929,2487,704,7,0
1246 -,4,930,2489,96,4,0
1247 -,4,931,2491,96,4,0
1248 -,4,932,2493,96,4,0
1249 -,4,933,2495,1440,22,0
1250 -,4,934,2497,224,5,0
1251 -,4,935,2499,2112,5,0
1252 -,4,936,2501,96,4,0
1253 -,4,937,2503,96,4,0
1254 -,4,938,2505,96,4,0
1255 -,4,939,2507,96,4,0
1256 -,4,940,2509,448,5,0
1257 -,4,941,2511,544,10,0
1258 -,4,942,2513,416,4,0
1259 -,4,943,2515,2432,7,0
1260 -,4,944,2517,608,8,0
1261 -,4,945,2519,864,10,0
1262 -,4,946,2521,704,9,0
1263 -,4,947,2523,256,6,0
1264 -,4,948,2525,2272,28,0
1265 -,4,949,2527,224,5,0
1266 -,4,950,2529,2656,30,0
1267 -,4,951,2531,96,4,0
1268 -,4,952,2533,1536,18,0
1269 -,4,953,2535,736,8,0
1270 -,4,954,2537,352,7,0
1271 -,4,955,2539,416,9,0
1272 -,4,956,2541,288,7,0
1273 -,4,957,2543,1216,17,0
1274 -,4,958,2545,256,7,0
1275 -,4,959,2547,640,9,0
1276 -,4,960,2549,3360,41,0
1277 -,4,961,2551,1504,14,0
1278 -,4,962,2553,736,9,0
1279 -,4,963,2555,2720,13,0
1280 -,4,964,2557,2240,14,0
1281 -,4,965,2559,2944,16,0
1282 -,4,966,2561,128,4,0
1283 -,4,967,2563,128,4,0
1284 -,4,968,2565,96,4,0
1285 -,4,969,2567,96,4,0
1286 -,4,970,2569,96,4,0
1287 -,4,971,2571,96,4,0
1288 -,4,972,2573,96,4,0
1289 -,4,973,2575,96,4,0
1290 -,4,974,2577,96,4,0
1291 -,4,975,2579,96,4,0
1292 -,4,976,2581,96,4,0
1293 -,4,977,2583,96,4,0
1294 -,4,978,2585,96,4,0
1295 -,4,979,2587,96,4,0
1296 -,4,980,2589,96,4,0
1297 -,4,981,2591,96,4,0
1298 -,4,982,2593,96,4,0
1299 -,4,983,2595,96,4,0
1300 -,4,984,2597,96,4,0
1301 -,4,985,2599,96,4,0
1302 -,4,986,2601,96,4,0
1303 -,4,987,2603,2368,19,0
1304 -,4,988,2605,96,4,0
1305 -,4,989,2607,96,4,0
1306 -,4,990,2609,96,4,0
1307 -,4,991,2611,96,4,0
1308 -,4,992,2613,96,4,0
1309 -,4,993,2615,3328,24,0
1310 -,4,994,2617,320,8,0
1311 -,4,995,2619,2400,23,0
1312 -,4,996,2621,1664,11,0
1313 -,4,997,2623,96,4,0
1314 -,4,998,2625,96,4,0
1315 -,4,999,2627,416,6,0
1316 -,4,1000,2629,1184,8,0
1317 -,4,1001,2631,8192,47,0
1318 -,4,1002,2633,2976,23,0
1319 -,4,1003,2635,5184,38,0
1320 -,4,1004,2637,2016,14,0
1321 -,4,1005,2639,6272,41,0
1322 -,4,1006,2641,3488,34,0
1323 -,4,1007,2643,1248,8,0
1324 -,4,1008,2645,1664,10,0
1325 -,4,1009,2647,96,4,0
1326 -,4,1010,2649,256,6,0
1327 -,4,1011,2651,640,9,0
1328 -,4,1012,2653,96,4,0
1329 -,4,1013,2655,96,4,0
1330 -,4,1014,2657,96,4,0
1331 -,4,1015,2659,96,4,0
1332 -,4,1016,2661,96,4,0
1333 -,4,1017,2663,512,8,0
1334 -,4,1018,2665,96,4,0
1335 -,4,1019,2667,1952,17,0
1336 -,4,1020,2669,1120,13,0
1337 -,4,1021,2671,704,10,0
1338 -,4,1022,2673,96,4,0
1339 -,4,1023,2675,1696,6,0
1340 -,4,1024,2677,96,4,0
1341 -,4,1025,2679,1120,16,0
1342 -,4,1026,2681,96,4,0
1343 -,4,1027,2683,1600,28,0
1344 -,4,1028,2685,3328,24,0
1345 -,4,1029,2687,3552,27,0
1346 -,4,1030,2689,3456,25,0
1347 -,4,1031,2691,3360,25,0
1348 -,4,1032,2693,96,4,0
1349 -,4,1033,2695,256,6,0
1350 -,4,1034,2697,4032,24,0
1351 -,4,1035,2699,96,4,0
1352 -,4,1036,2701,96,4,0
1353 -,4,1037,2703,96,4,0
1354 -,4,1038,2705,96,4,0
1355 -,4,1039,2707,4032,35,0
1356 -,4,1040,2709,2432,19,0
1357 -,4,1041,2711,1568,12,0
1358 -,4,1042,2713,5504,67,0
1359 -,4,1043,2715,160,4,0
1360 -,4,1044,2717,416,7,0
1361 -,4,1045,2719,96,4,0
1362 -,4,1046,2721,256,6,0
1363 -,4,1047,2723,256,6,0
1364 -,4,1048,2725,256,6,0
1365 -,4,1049,2727,96,4,0
1366 -,4,1050,2729,96,4,0
1367 -,4,1051,2731,96,4,0
1368 -,4,1052,2733,96,4,0
1369 -,4,1053,2735,96,4,0
1370 -,4,1054,2737,96,4,0
1371 -,4,1055,2739,384,4,0
1372 -,4,1056,2741,224,3,0
1373 -,4,1057,2743,128,3,0
1374 -,4,1058,2745,128,3,0
1375 -,4,1059,2747,128,3,0
1376 -,4,1060,2749,192,3,0
1377 -,4,1061,2751,128,3,0
1378 -,4,1062,2753,128,3,0
1379 -,4,1063,2755,128,3,0
1380 -,4,1064,2757,128,3,0
1381 -,4,1065,2759,128,3,0
1382 -,4,1066,2761,128,3,0
1383 -,4,1067,2763,128,3,0
1384 -,4,1068,2765,128,3,0
1385 -,4,1069,2767,128,3,0
1386 -,4,1070,2769,128,3,0
1387 -,4,1071,2771,128,3,0
1388 -,4,1072,2773,5280,43,0
1389 -,4,1073,2775,256,3,0
1390 -,4,1074,2777,320,7,0
1391 -,4,1075,2779,608,6,0
1392 -,4,1076,2781,896,7,0
1393 -,4,1077,2783,480,7,0
1394 -,4,1078,2785,224,5,0
1395 -,4,1079,2787,1280,17,0
1396 -,4,1080,2789,1344,17,0
1397 -,4,1081,2791,480,8,0
1398 -,4,1082,2793,96,4,0
1399 -,4,1083,2795,1312,18,0
1400 -,4,1084,2797,1312,18,0
1401 -,4,1085,2799,352,4,0
1402 -,4,1086,2801,320,4,0
1403 -,4,1087,2803,544,4,0
1404 -,4,1088,2805,544,4,0
1405 -,4,1089,2807,352,4,0
1406 -,4,1090,2809,352,4,0
1407 -,4,1091,2811,352,4,0
1408 -,4,1092,2813,544,4,0
1409 -,4,1093,2815,544,4,0
1410 -,4,1094,2817,1728,10,0
1411 -,4,1095,2819,2176,14,0
1412 -,4,1096,2821,576,7,0
1413 -,4,1097,2823,608,7,0
1414 -,4,1098,2825,2944,18,0
1415 -,4,1099,2827,416,5,0
1416 -,4,1100,2829,416,5,0
1417 -,4,1101,2831,416,5,0
1418 -,4,1102,2833,160,3,0
1419 -,4,1103,2835,2240,7,0
1420 -,4,1104,2837,15232,65,0
1421 -,4,1105,2839,352,3,0
1422 -,4,1106,2841,96,4,0
1423 -,4,1107,2843,96,4,0
1424 -,4,1108,2845,224,5,0
1425 -,4,1109,2847,224,5,0
1426 -,4,1110,2849,576,7,0
1427 -,4,1111,2851,1952,17,0
1428 -,4,1112,2853,3328,28,0
1429 -,4,1113,2855,3680,19,0
1430 -,4,1114,2857,96,3,0
1431 -,4,1115,2859,224,4,0
1432 -,4,1116,2861,352,5,0
1433 -,4,1117,2863,416,4,0
1434 -,4,1118,2865,96,3,0
1435 -,4,1119,2867,96,3,0
1436 -,4,1120,2869,192,4,0
1437 -,4,1121,2871,128,3,0
1438 -,4,1122,2873,768,6,0
1439 -,4,1123,2875,192,4,0
1440 -,4,1124,2877,416,8,0
1441 -,4,1125,2879,224,5,0
1442 -,4,1126,2881,96,3,0
1443 -,4,1127,2883,96,3,0
1444 -,4,1128,2885,384,4,0
1445 -,4,1129,2887,704,4,0
1446 -,4,1130,2889,1120,4,0
1447 -,4,1131,2891,9472,38,0
1448 -,4,1132,2893,1984,4,0
1449 -,4,1133,2895,1952,4,0
1450 -,4,1134,2897,4352,25,0
1451 -,4,1135,2899,4032,56,0
1452 -,4,1136,2901,128,3,0
1453 -,4,1137,2903,288,5,0
1454 -,4,1138,2905,224,4,0
1455 -,4,1139,2907,128,3,0
1456 -,4,1140,2909,224,4,0
1457 -,4,1141,2911,128,3,0
1458 -,4,1142,2913,128,3,0
1459 -,4,1143,2915,128,3,0
1460 -,4,1144,2917,352,5,0
1461 -,4,1145,2919,160,3,0
1462 -,4,1146,2921,384,5,0
1463 -,4,1147,2923,160,3,0
1464 -,4,1148,2925,128,3,0
1465 -,4,1149,2927,128,3,0
1466 -,4,1150,2929,128,3,0
1467 -,4,1151,2931,128,3,0
1468 -,4,1152,2933,128,3,0
1469 -,4,1153,2935,128,3,0
1470 -,4,1154,2937,128,3,0
1471 -,4,1155,2939,128,3,0
1472 -,4,1156,2941,256,4,0
1473 -,4,1157,2943,288,5,0
1474 -,4,1158,2945,128,4,0
1475 -,4,1159,2947,128,4,0
1476 -,4,1160,2949,128,3,0
1477 -,4,1161,2951,128,3,0
1478 -,4,1162,2953,128,3,0
1479 -,4,1163,2955,96,4,0
1480 -,4,1164,2957,928,6,0
1481 -,4,1165,2959,352,9,0
1482 -,4,1166,2961,96,4,0
1483 -,4,1167,2963,96,4,0
1484 -,4,1168,2965,96,4,0
1485 -,4,1169,2967,96,4,0
1486 -,4,1170,2969,96,4,0
1487 -,4,1171,2971,96,4,0
1488 -,4,1172,2973,96,4,0
1489 -,4,1173,2975,96,4,0
1490 -,4,1174,2977,96,4,0
1491 -,4,1175,2979,96,4,0
1492 -,4,1176,2981,96,4,0
1493 -,4,1177,2983,96,4,0
1494 -,4,1178,2985,96,4,0
1495 -,4,1179,2987,96,4,0
1496 -,4,1180,2989,96,4,0
1497 -,4,1181,2991,96,4,0
1498 -,4,1182,2993,96,4,0
1499 -,4,1183,2995,96,4,0
1500 -,4,1184,2997,96,4,0
1501 -,4,1185,2999,96,4,0
1502 -,4,1186,3001,96,4,0
1503 -,4,1187,3003,96,4,0
1504 -,4,1188,3005,96,4,0
1505 -,4,1189,3007,96,4,0
1506 -,4,1190,3009,96,4,0
1507 -,4,1191,3011,96,4,0
1508 -,4,1192,3013,96,4,0
1509 -,4,1193,3015,96,4,0
1510 -,4,1194,3017,96,4,0
1511 -,4,1195,3019,96,4,0
1512 -,4,1196,3021,96,4,0
1513 -,4,1197,3023,96,4,0
1514 -,4,1198,3025,96,4,0
1515 -,4,1199,3027,96,4,0
1516 -,4,1200,3029,96,4,0
1517 -,4,1,3031,96,3,0
1518 -,4,1,3033,96,3,0
1519 -,4,1,3035,128,3,0
1520 -,4,1,3037,160,3,0
1521 -,4,1,3039,160,3,0
1522 -,4,1,3041,160,3,0
1523 -,4,1,3043,160,3,0
1524 -,4,1,3045,96,3,0
1525 -,4,1,3047,96,3,0
1526 -,4,1,3049,160,3,0
1527 -,4,1,3051,4000,16,0
1528 -,4,1,3053,3392,15,0
1529 -,4,1,3055,128,3,0
1530 -,4,1,3057,128,3,0
1531 -,4,1,3059,192,3,0
1532 -,4,1,3061,160,3,0
1533 -,4,1,3063,160,3,0
1534 -,4,1,3065,128,3,0
1535 -,4,1,3067,256,4,0
1536 -,4,1,3069,224,4,0
1537 -,4,1,3071,288,4,0
1538 -,4,1,3073,3360,17,0
1539 -,4,1,3075,128,3,0
1540 -,4,1,3077,128,3,0
1541 -,4,1,3079,128,3,0
1542 -,4,1,3081,3520,17,0
1543 -,4,1,3083,288,4,0
1544 -,4,1,3085,256,4,0
1545 -,4,1,3087,256,4,0
1546 -,4,1,3089,256,4,0
1547 -,4,1,3091,256,4,0
1548 -,4,1,3093,288,4,0
1549 -,4,1,3095,1120,7,0
1550 -,4,1,3097,1184,7,0
1551 -,4,1,3099,1248,7,0
1552 -,4,1,3101,1216,7,0
1553 -,4,1,3103,1216,6,0
1554 -,4,1,3105,1216,9,0
1555 -,4,1,3107,1216,9,0
1556 -,4,1,3109,1216,9,0
1557 -,4,1,3111,1216,9,0
1558 -,4,1,3113,1216,9,0
1559 -,4,1,3115,1408,10,0
1560 -,4,1,3117,928,7,0
1561 -,4,1,3119,992,7,0
1562 -,4,1,3121,1024,7,0
1563 -,4,1,3123,1024,7,0
1564 -,4,1,3125,992,6,0
1565 -,4,1,3127,672,6,0
1566 -,4,1,3129,672,6,0
1567 -,4,1,3131,704,6,0
1568 -,4,1,3133,704,6,0
1569 -,4,1,3135,864,7,0
1570 -,4,1,3137,704,6,0
1571 -,4,1,3139,704,6,0
1572 -,4,1,3141,672,6,0
1573 -,4,1,3143,672,6,0
1574 -,4,1,3145,352,4,0
1575 -,4,1,3147,128,3,0
1576 -,4,1,3149,320,3,0
1577 -,4,1,3151,224,4,0
1578 -,4,1,3153,224,4,0
1579 -,4,1,3155,192,4,0
1580 -,4,1,3157,448,5,0
1581 -,4,1,3159,480,5,0
1582 -,4,1,3161,480,5,0
1583 -,4,1,3163,512,5,0
1584 -,4,1,3165,448,5,0
1585 -,4,1,3167,416,5,0
1586 -,4,1,3169,480,5,0
1587 -,4,1,3171,480,5,0
1588 -,4,1,3173,448,5,0
1589 -,4,1,3175,256,4,0
1590 -,4,1,3177,160,4,0
1591 -,4,1,3179,1568,23,0
1592 -,4,1,3181,1312,10,0
1593 -,4,1,3183,640,5,0
1594 -,4,1,3185,1984,11,0
1595 -,4,1,3187,1088,5,0
1596 -,4,1,3189,2112,21,0
1597 -,4,1,3191,2112,21,0
1598 -,4,1,3193,2112,21,0
1599 -,4,1,3195,2112,21,0
1600 -,4,1,3197,128,3,0
1601 -,4,1,3199,1088,11,0
1602 -,4,1,3201,2656,8,0
1603 -,4,1,3203,128,3,0
1604 -,4,1,3205,128,3,0
1605 -,4,1,3207,128,3,0
1606 -,4,1,3209,416,3,0
1607 -,4,1,3211,320,5,0
1608 -,4,1,3213,288,4,0
1609 -,4,1,3215,320,4,0
1610 -,4,1,3217,224,4,0
1611 -,4,1,3219,224,4,0
1612 -,4,1,3221,416,5,0
1613 -,4,1,3223,1888,14,0
1614 -,4,1,3225,960,8,0
1615 -,4,1,3227,1760,9,0
1616 -,4,1,3229,352,4,0
1617 -,4,1,3231,288,4,0
1618 -,4,1,3233,416,6,0
1619 -,4,1,3235,224,4,0
1620 -,4,1,3237,256,4,0
1621 -,4,1,3239,384,4,0
1622 -,4,1,3241,1600,11,0
1623 -,4,1,3243,928,8,0
1624 -,4,1,3245,960,8,0
1625 -,4,1,3247,448,6,0
1626 -,4,1,3249,128,3,0
1627 -,4,1,3251,128,3,0
1628 -,4,1,3253,160,3,0
1629 -,4,1,3255,160,3,0
1630 -,4,1,3257,160,3,0
1631 -,4,1,3259,160,3,0
1632 -,4,1,3261,160,3,0
1633 -,4,1,3263,416,4,0
1634 -,4,1,3265,448,4,0
1635 -,4,1,3267,416,4,0
1636 -,4,1,3269,416,4,0
1637 -,4,1,3271,128,3,0
1638 -,4,1,3273,128,3,0
1639 -,4,1,3275,128,3,0
1640 -,4,1,3277,128,3,0
1641 -,4,1,3279,128,3,0
1642 -,4,1,3281,128,3,0
1643 -,4,1,3283,192,3,0
1644 -,4,1,3285,192,3,0
1645 -,4,1,3287,576,4,0
1646 -,4,1,3289,320,3,0
1647 -,4,1,3291,128,3,0
1648 -,4,1,3293,352,4,0
1649 -,4,1,3295,128,3,0
1650 -,4,1,3297,224,4,0
1651 -,4,1,3299,128,3,0
1652 -,4,1,3301,224,5,0
1653 -,4,1,3303,224,5,0
1654 -,4,1,3305,224,4,0
1655 -,4,1,3307,256,5,0
1656 -,4,1,3309,224,5,0
1657 -,4,1,3311,224,5,0
1658 -,4,1,3313,128,3,0
1659 -,4,1,3315,128,3,0
1660 -,4,1,3317,3488,16,0
1661 -,4,1,3319,128,3,0
1662 -,4,1,3321,160,3,0
1663 -,4,1,3323,128,3,0
1664 -,4,1,3325,128,3,0
1665 -,4,1,3327,128,3,0
1666 -,4,1,3329,3552,17,0
1667 -,4,1,3331,256,4,0
1668 -,4,1,3333,256,4,0
1669 -,4,1,3335,256,4,0
1670 -,4,1,3337,256,4,0
1671 -,4,1,3339,288,4,0
1672 -,4,1,3341,1088,7,0
1673 -,4,1,3343,1152,7,0
1674 -,4,1,3345,1216,7,0
1675 -,4,1,3347,1216,7,0
1676 -,4,1,3349,1216,9,0
1677 -,4,1,3351,928,7,0
1678 -,4,1,3353,960,7,0
1679 -,4,1,3355,1024,7,0
1680 -,4,1,3357,1056,7,0
1681 -,4,1,3359,1024,6,0
1682 -,4,1,3361,704,6,0
1683 -,4,1,3363,704,6,0
1684 -,4,1,3365,704,6,0
1685 -,4,1,3367,704,6,0
1686 -,4,1,3369,896,7,0
1687 -,4,1,3371,672,6,0
1688 -,4,1,3373,480,5,0
1689 -,4,1,3375,480,5,0
1690 -,4,1,3377,480,5,0
1691 -,4,1,3379,512,5,0
1692 -,4,1,3381,448,5,0
1693 -,4,1,3383,416,5,0
1694 -,4,1,3385,480,5,0
1695 -,4,1,3387,480,5,0
1696 -,4,1,3389,480,5,0
1697 -,4,1,3391,1280,10,0
1698 -,4,1,3393,1984,11,0
1699 -,4,1,3395,1088,5,0
1700 -,4,1,3397,2176,21,0
1701 -,4,1,3399,2176,21,0
1702 -,4,1,3401,2176,21,0
1703 -,4,1,3403,2176,21,0
1704 -,4,1,3405,1120,11,0
1705 -,4,1,3407,320,4,0
1706 -,4,1,3409,448,5,0
1707 -,4,1,3411,1888,14,0
1708 -,4,1,3413,992,8,0
1709 -,4,1,3415,1760,9,0
1710 -,4,1,3417,448,6,0
1711 -,4,1,3419,448,6,0
1712 -,4,1,3421,128,3,0
1713 -,4,1,3423,416,4,0
1714 -,4,1,3425,128,3,0
1715 -,4,1,3427,128,3,0
1716 -,4,1,3429,128,3,0
1717 -,4,1,3431,128,3,0
1718 -,4,1,3433,320,3,0
1719 -,4,1,3435,352,4,0
1720 -,4,1,3437,128,3,0
1721 -,4,1,3439,896,7,0
1722 -,4,1,3441,1024,7,0
1723 -,4,1,3443,992,6,0
1724 -,4,1,3445,704,6,0
1725 -,3,1201,3447,32,18,0
1726 -,5,1202,3449,64,8,0
1727 -,3,134,3451,72,4,0
1728 -,3,270,3453,72,4,0
1729 -,3,134,3455,72,4,0
1730 -,3,270,3457,72,4,0
1731 -,3,271,3459,72,4,0
1732 -,3,270,3461,72,4,0
1733 -,3,271,3463,72,4,0
1734 -,3,161,3465,72,4,0
1735 -,3,134,3467,72,4,0
1736 -,3,76,3469,72,4,0
1737 -,3,204,3471,32,3,0
1738 -,3,271,3473,72,4,0
1739 -,3,134,3475,72,4,0
1740 -,3,270,3477,72,4,0
1741 -,3,204,3479,56,25,0
1742 -,5,406,3481,64,6,0
1743 -,5,1203,3483,64,6,0
1744 -,5,1204,3485,64,6,0
1745 -,3,204,3487,56,17,0
1746 -,0,517,3489,168,4,0
1747 -,0,517,3491,168,6,0
1748 -,5,1205,3493,64,6,0
1749 -,5,1206,3495,64,8,0
1750 -,5,1206,3497,64,8,0
1751 -,5,1206,3499,64,8,0
1752 -,5,1206,3501,64,8,0
1753 -,0,1207,3503,64,3,0
1754 -,3,271,3505,56,73,0
1755 -,5,1208,3507,64,6,0
1756 -,5,1209,3509,64,6,0
1757 -,5,1210,3511,64,6,0
1758 -,5,1211,3513,64,6,0
1759 -,5,1212,3515,64,6,0
1760 -,5,1213,3517,64,6,0
1761 -,5,1214,3519,64,6,0
1762 -,5,1215,3521,64,6,0
1763 -,0,517,3523,168,5,0
1764 -,0,517,3525,168,7,0
1765 -,5,1216,3527,64,9,0
1766 -,5,1,3529,64,8,0
1767 -,0,517,3531,168,6,0
1768 -,0,1207,3533,64,2,0
1769 -,0,1207,3535,64,2,0
1770 -,0,1207,3537,64,2,0
1771 -,0,1207,3539,64,2,0
1772 -,12,256,3541,32,2,0
1773 -,3,1217,3543,32,5,0
1774 -,0,517,3545,168,7,0
1775 -,5,1,3547,64,8,0
1776 -,0,517,3549,168,5,0
1777 -,0,517,3551,168,7,0
1778 -,0,1207,3553,64,3,0
1779 -,0,1207,3555,64,2,0
1780 -,0,517,3557,168,7,0
1781 -,0,517,3559,168,7,0
1782 -,5,324,3561,64,8,0
1783 -,3,1218,3563,32,10,0
1784 -,3,1218,3565,32,10,0
1785 -,3,1201,3567,32,18,0
1786 -,3,1218,3569,32,8,0
1787 -,3,1218,3571,32,10,0
1788 -,3,1219,3573,32,6,0
1789 -,3,1201,3575,32,18,0
1790 -,3,1218,3577,32,10,0
1791 -,3,1218,3579,32,8,0
1792 -,3,1201,3581,32,18,0
1793 -,3,1220,3583,32,6,0
1794 -,3,1218,3585,32,8,0
1795 -,3,1202,3587,32,7,0
1796 -,3,1218,3589,32,8,0
1797 -,3,1219,3591,32,6,0
1798 -,3,1218,3593,32,8,0
1799 -,3,1201,3595,32,18,0
1800 -,3,1201,3597,32,18,0
1801 -,3,1218,3599,32,8,0
1802 -,3,1218,3601,32,10,0
1803 -,3,1201,3603,32,18,0
1804 -,3,1218,3605,32,8,0
1805 -,3,1218,3607,32,8,0
1806 -,3,1218,3609,32,8,0
1807 -,3,1201,3611,32,18,0
1808 -,3,1202,3613,32,7,0
1809 -,3,1202,3615,32,7,0
1810 -,3,1202,3617,32,9,0
1811 -,3,1202,3619,32,7,0
1812 -,3,1202,3621,32,7,0
1813 -,3,1202,3623,32,7,0
1814 -,3,1202,3625,32,7,0
1815 -,3,1201,3627,32,18,0
1816 -,3,1201,3629,32,18,0
1817 -,3,1201,3631,32,18,0
1818 -,3,1201,3633,32,18,0
1819 -,3,1218,3635,32,10,0
1820 -,3,1218,3637,32,10,0
1821 -,3,1218,3639,32,10,0
1822 -,3,1218,3641,32,10,0
1823 -,2,1221,3643,32,1,0
1824 -,2,1222,3645,40,1,0
1825 -,2,1223,3647,40,1,0
1826 -,2,1224,3649,48,1,0
1827 -,2,1225,3651,40,1,0
1828 -,2,1226,3653,40,1,0
1829 -,2,1227,3655,40,1,0
1830 -,2,1228,3657,48,1,0
1831 -,2,1229,3659,48,1,0
1832 -,2,1230,3661,40,1,0
1833 -,2,1231,3663,40,1,0
1834 -,2,1232,3665,40,1,0
1835 -,2,1233,3667,40,1,0
1836 -,2,1234,3669,40,1,0
1837 -,2,1235,3671,32,1,0
1838 -,2,1236,3673,40,1,0
1839 -,2,1237,3675,40,1,0
1840 -,2,1238,3677,40,1,0
1841 -,2,1239,3679,32,1,0
1842 -,2,1240,3681,40,1,0
1843 -,2,1241,3683,32,1,0
1844 -,2,1242,3685,40,1,0
1845 -,2,1243,3687,40,1,0
1846 -,2,1244,3689,40,1,0
1847 -,2,1245,3691,40,1,0
1848 -,2,1246,3693,40,1,0
1849 -,2,1247,3695,40,1,0
1850 -,2,1248,3697,40,1,0
1851 -,2,1249,3699,32,1,0
1852 -,2,1250,3701,32,1,0
1853 -,2,1251,3703,40,1,0
1854 -,2,1252,3705,32,1,0
1855 -,2,1253,3707,32,1,0
1856 -,2,1254,3709,40,1,0
1857 -,2,1255,3711,32,1,0
1858 -,2,1256,3713,40,1,0
1859 -,2,1257,3715,48,1,0
1860 -,2,1258,3717,48,1,0
1861 -,2,1259,3719,40,1,0
1862 -,2,1260,3721,32,1,0
1863 -,2,1261,3723,48,1,0
1864 -,4,1262,3725,83040,3,0
1865 -,4,1262,3727,83040,3,0
1866 -,4,1262,3729,83040,3,0
1867 -,1,1263,3731,80,3,0
1868 -,4,1264,3733,56,2,0
1869 -,4,136,3735,56,2,0
1870 -,4,61,3737,56,2,0
1871 -,4,77,3739,56,2,0
1872 -,4,85,3741,56,2,0
1873 -,4,265,3743,56,2,0
1874 -,4,1265,3745,56,2,0
1875 -,4,1264,3747,56,3,0
1876 -,4,69,3749,56,2,0
1877 -,4,143,3751,56,2,0
1878 -,4,144,3753,56,2,0
1879 -,2,1266,3755,48,1,0
1880 -,4,1266,3757,56,2,0
1881 -,2,1267,3759,48,1,0
1882 -,4,1267,3761,56,2,0
1883 -,2,1268,3763,32,1,0
1884 -,4,1268,3765,56,2,0
1885 -,4,213,3767,56,2,0
1886 -,2,1269,3769,32,1,0
1887 -,4,1269,3771,56,2,0
1888 -,4,99,3773,56,2,0
1889 -,2,1270,3775,40,1,0
1890 -,4,1270,3777,56,2,0
1891 -,4,107,3779,56,2,0
1892 -,2,1271,3781,32,1,0
1893 -,4,1271,3783,56,2,0
1894 -,4,145,3785,56,2,0
1895 -,4,242,3787,56,2,0
1896 -,4,164,3789,56,2,0
1897 -,2,1272,3791,32,1,0
1898 -,4,1272,3793,56,2,0
1899 -,2,1273,3795,32,1,0
1900 -,4,1273,3797,56,2,0
1901 -,4,168,3799,56,2,0
1902 -,4,122,3801,56,2,0
1903 -,4,283,3803,56,2,0
1904 -,4,204,3805,56,2,0
1905 -,4,1274,3807,56,4,0
1906 -,1,1,3809,544,31,0
1907 -,4,1275,3811,56,2,0
1908 -,2,1276,3813,32,1,0
1909 -,4,1276,3815,56,2,0
1910 -,2,1277,3817,32,1,0
1911 -,4,1277,3819,56,4,0
1912 -,2,1278,3821,32,1,0
1913 -,4,1278,3823,56,2,0
1914 -,2,1279,3825,32,1,0
1915 -,4,1279,3827,56,2,0
1916 -,2,1280,3829,32,1,0
1917 -,4,1280,3831,56,2,0
1918 -,2,1281,3833,32,1,0
1919 -,4,1281,3835,56,2,0
1920 -,2,1282,3837,32,1,0
1921 -,4,1282,3839,56,2,0
1922 -,2,1283,3841,32,1,0
1923 -,4,1283,3843,56,2,0
1924 -,4,1284,3845,56,2,0
1925 -,4,265,3847,56,2,0
1926 -,4,1285,3849,56,4,0
1927 -,4,1286,3851,56,4,0
1928 -,4,1287,3853,56,4,0
1929 -,4,1288,3855,56,4,0
1930 -,4,1289,3857,56,4,0
1931 -,4,1290,3859,56,4,0
1932 -,4,1291,3861,56,4,0
1933 -,4,1292,3863,56,4,0
1934 -,4,1293,3865,56,4,0
1935 -,4,1294,3867,56,4,0
1936 -,4,1295,3869,56,4,0
1937 -,4,1296,3871,56,4,0
1938 -,4,1297,3873,56,4,0
1939 -,4,1298,3875,56,4,0
1940 -,4,1299,3877,56,4,0
1941 -,4,1300,3879,56,4,0
1942 -,4,1301,3881,56,4,0
1943 -,4,1302,3883,56,4,0
1944 -,4,1303,3885,56,4,0
1945 -,4,1304,3887,56,4,0
1946 -,4,1305,3889,56,4,0
1947 -,4,265,3891,56,4,0
1948 -,4,283,3893,56,2,0
1949 -,4,1306,3895,56,2,0
1950 -,2,1307,3897,32,1,0
1951 -,4,1307,3899,56,2,0
1952 -,2,1308,3901,32,1,0
1953 -,4,1308,3903,56,2,0
1954 -,2,1309,3905,32,1,0
1955 -,4,1309,3907,56,2,0
1956 -,4,65,3909,56,2,0
1957 -,2,1310,3911,40,1,0
1958 -,2,1311,3913,32,1,0
1959 -,2,1312,3915,32,1,0
1960 -,2,1313,3917,40,1,0
1961 -,2,1314,3919,32,1,0
1962 -,4,1283,3921,56,2,0
1963 -,4,1310,3923,56,2,0
1964 -,4,1311,3925,56,2,0
1965 -,4,1312,3927,56,2,0
1966 -,4,1313,3929,56,2,0
1967 -,2,1315,3931,32,1,0
1968 -,4,1315,3933,56,2,0
1969 -,2,1316,3935,32,1,0
1970 -,4,1316,3937,56,2,0
1971 -,2,1317,3939,32,1,0
1972 -,4,1317,3941,56,2,0
1973 -,4,1314,3943,56,2,0
1974 -,4,168,3945,56,2,0
1975 -,4,122,3947,56,2,0
1976 -,2,1318,3949,32,1,0
1977 -,4,1318,3951,56,2,0
1978 -,2,1319,3953,32,1,0
1979 -,4,1319,3955,56,2,0
1980 -,2,1320,3957,32,1,0
1981 -,4,1320,3959,56,2,0
1982 -,2,1321,3961,32,1,0
1983 -,4,1321,3963,56,2,0
1984 -,2,1322,3965,32,1,0
1985 -,4,1322,3967,56,2,0
1986 -,2,1323,3969,32,1,0
1987 -,4,1323,3971,56,2,0
1988 -,2,1324,3973,40,1,0
1989 -,4,1324,3975,56,2,0
1990 -,2,1325,3977,40,1,0
1991 -,4,1325,3979,56,4,0
1992 -,2,1326,3981,40,1,0
1993 -,4,1326,3983,56,4,0
1994 -,2,1327,3985,40,1,0
1995 -,4,1327,3987,56,2,0
1996 -,2,1328,3989,40,1,0
1997 -,4,1328,3991,56,2,0
1998 -,2,1329,3993,40,1,0
1999 -,4,1329,3995,56,2,0
2000 -,2,1330,3997,40,1,0
2001 -,4,1330,3999,56,2,0
2002 -,2,1331,4001,40,1,0
2003 -,4,1331,4003,56,2,0
2004 -,2,1332,4005,40,1,0
2005 -,4,1332,4007,56,2,0
2006 -,2,1333,4009,48,1,0
2007 -,4,1333,4011,56,2,0
2008 -,4,282,4013,56,2,0
2009 -,4,1334,4015,56,2,0
2010 -,4,1335,4017,56,2,0
2011 -,4,1325,4019,56,2,0
2012 -,4,1,4021,56,2,0
2013 -,2,1336,4023,48,1,0
2014 -,4,1336,4025,56,2,0
2015 -,2,1337,4027,32,1,0
2016 -,4,1337,4029,56,2,0
2017 -,2,1338,4031,32,1,0
2018 -,4,1338,4033,56,2,0
2019 -,4,380,4035,56,2,0
2020 -,2,1339,4037,32,1,0
2021 -,4,1339,4039,56,2,0
2022 -,2,1340,4041,32,1,0
2023 -,4,1340,4043,56,2,0
2024 -,2,1341,4045,32,1,0
2025 -,4,1341,4047,56,2,0
2026 -,2,1342,4049,32,1,0
2027 -,4,1342,4051,56,2,0
2028 -,2,1343,4053,32,1,0
2029 -,4,1343,4055,56,2,0
2030 -,2,1344,4057,32,1,0
2031 -,4,1344,4059,56,2,0
2032 -,2,1345,4061,32,1,0
2033 -,4,1345,4063,56,2,0
2034 -,4,148,4065,56,2,0
2035 -,2,1346,4067,40,1,0
2036 -,4,1346,4069,56,2,0
2037 -,2,1347,4071,32,1,0
2038 -,4,1347,4073,56,2,0
2039 -,2,1348,4075,32,1,0
2040 -,4,1348,4077,56,2,0
2041 -,2,1349,4079,32,1,0
2042 -,4,1349,4081,56,2,0
2043 -,2,1350,4083,40,1,0
2044 -,4,1350,4085,56,2,0
2045 -,2,1351,4087,32,1,0
2046 -,4,1351,4089,56,2,0
2047 -,2,1352,4091,32,1,0
2048 -,4,1352,4093,56,2,0
2049 -,2,1353,4095,40,1,0
2050 -,4,1353,4097,56,2,0
2051 -,2,1354,4099,32,1,0
2052 -,4,1354,4101,56,2,0
2053 -,2,1355,4103,32,1,0
2054 -,4,1355,4105,56,2,0
2055 -,2,1356,4107,40,1,0
2056 -,4,1356,4109,56,2,0
2057 -,2,1357,4111,32,1,0
2058 -,4,1357,4113,56,2,0
2059 -,2,204,4115,32,1,0
2060 -,4,1306,4117,56,2,0
2061 -,4,1358,4119,56,2,0
2062 -,4,1359,4121,56,2,0
2063 -,2,1360,4123,32,1,0
2064 -,4,1361,4125,56,2,0
2065 -,4,1362,4127,56,2,0
2066 -,2,1363,4129,40,1,0
2067 -,4,1364,4131,56,2,0
2068 -,4,1365,4133,56,2,0
2069 -,2,1366,4135,32,1,0
2070 -,4,1367,4137,56,2,0
2071 -,4,1368,4139,56,2,0
2072 -,2,1369,4141,40,1,0
2073 -,4,1370,4143,56,2,0
2074 -,4,1371,4145,56,2,0
2075 -,2,1372,4147,32,1,0
2076 -,4,1373,4149,56,2,0
2077 -,4,1374,4151,56,2,0
2078 -,2,1375,4153,40,1,0
2079 -,4,1376,4155,56,2,0
2080 -,4,1377,4157,56,2,0
2081 -,2,1378,4159,32,1,0
2082 -,4,1379,4161,56,2,0
2083 -,4,1380,4163,56,2,0
2084 -,2,1381,4165,40,1,0
2085 -,4,1382,4167,56,2,0
2086 -,4,1383,4169,56,2,0
2087 -,2,1384,4171,32,1,0
2088 -,4,1385,4173,56,2,0
2089 -,4,1386,4175,56,2,0
2090 -,2,1387,4177,32,1,0
2091 -,4,1388,4179,56,2,0
2092 -,4,1389,4181,56,2,0
2093 -,2,1390,4183,32,1,0
2094 -,4,1391,4185,56,2,0
2095 -,4,1392,4187,56,2,0
2096 -,2,1393,4189,32,1,0
2097 -,4,1394,4191,56,2,0
2098 -,4,1395,4193,56,2,0
2099 -,2,1396,4195,32,1,0
2100 -,4,1397,4197,56,2,0
2101 -,4,1398,4199,56,2,0
2102 -,2,1399,4201,32,1,0
2103 -,4,1400,4203,56,2,0
2104 -,4,1401,4205,56,2,0
2105 -,2,1402,4207,32,1,0
2106 -,4,1403,4209,56,2,0
2107 -,4,1404,4211,56,2,0
2108 -,2,1405,4213,32,1,0
2109 -,4,1406,4215,56,2,0
2110 -,4,1407,4217,56,2,0
2111 -,2,1408,4219,32,1,0
2112 -,4,1409,4221,56,2,0
2113 -,4,1410,4223,56,2,0
2114 -,2,1411,4225,32,1,0
2115 -,4,1412,4227,56,2,0
2116 -,4,1413,4229,56,2,0
2117 -,4,226,4231,56,2,0
2118 -,4,130,4233,56,2,0
2119 -,4,1414,4235,56,2,0
2120 -,4,1415,4237,56,2,0
2121 -,4,1416,4239,56,2,0
2122 -,4,1417,4241,56,2,0
2123 -,4,1418,4243,56,2,0
2124 -,4,1419,4245,56,2,0
2125 -,4,1420,4247,56,2,0
2126 -,4,1421,4249,56,2,0
2127 -,2,1422,4251,32,1,0
2128 -,4,1422,4253,56,2,0
2129 -,4,265,4255,56,2,0
2130 -,2,1423,4257,32,1,0
2131 -,4,1423,4259,56,2,0
2132 -,4,1424,4261,56,2,0
2133 -,4,1425,4263,56,2,0
2134 -,4,1426,4265,56,2,0
2135 -,4,1427,4267,56,2,0
2136 -,2,1428,4269,48,1,0
2137 -,4,1428,4271,56,2,0
2138 -,4,126,4273,56,2,0
2139 -,4,265,4275,56,2,0
2140 -,4,225,4277,56,2,0
2141 -,2,1429,4279,40,1,0
2142 -,4,1429,4281,56,2,0
2143 -,4,1306,4283,56,2,0
2144 -,4,1309,4285,56,2,0
2145 -,4,1308,4287,56,2,0
2146 -,4,1430,4289,56,2,0
2147 -,4,1431,4291,56,2,0
2148 -,4,1432,4293,56,2,0
2149 -,4,1433,4295,56,2,0
2150 -,4,1434,4297,56,2,0
2151 -,4,1435,4299,56,2,0
2152 -,4,122,4301,56,2,0
2153 -,4,168,4303,56,2,0
2154 -,4,283,4305,56,2,0
2155 -,4,1310,4307,56,2,0
2156 -,4,1321,4309,56,2,0
2157 -,4,1311,4311,56,2,0
2158 -,4,1319,4313,56,2,0
2159 -,4,1312,4315,56,2,0
2160 -,4,1313,4317,56,2,0
2161 -,4,1318,4319,56,2,0
2162 -,4,1314,4321,56,2,0
2163 -,4,1276,4323,56,2,0
2164 -,4,1326,4325,56,2,0
2165 -,4,1320,4327,56,2,0
2166 -,4,1315,4329,56,2,0
2167 -,4,1323,4331,56,2,0
2168 -,4,1324,4333,56,2,0
2169 -,4,240,4335,56,2,0
2170 -,4,1317,4337,56,2,0
2171 -,4,1322,4339,56,2,0
2172 -,4,1281,4341,56,2,0
2173 -,2,1436,4343,32,1,0
2174 -,4,1436,4345,56,2,0
2175 -,4,1325,4347,56,4,0
2176 -,1,1,4349,128,5,0
2177 -,4,1437,4351,56,4,0
2178 -,4,1277,4353,56,4,0
2179 -,2,1438,4355,48,1,0
2180 -,4,133,4357,56,2,0
2181 -,2,1439,4359,48,1,0
2182 -,4,1439,4361,56,2,0
2183 -,2,1440,4363,32,1,0
2184 -,4,1440,4365,56,2,0
2185 -,4,257,4367,56,2,0
2186 -,2,1441,4369,32,1,0
2187 -,4,1441,4371,56,2,0
2188 -,4,1431,4373,56,2,0
2189 -,4,1432,4375,56,2,0
2190 -,4,1433,4377,56,2,0
2191 -,2,1442,4379,32,1,0
2192 -,4,1442,4381,56,2,0
2193 -,2,1443,4383,32,1,0
2194 -,4,1443,4385,56,2,0
2195 -,2,1444,4387,32,1,0
2196 -,4,1444,4389,56,2,0
2197 -,2,1445,4391,32,1,0
2198 -,4,1445,4393,56,2,0
2199 -,2,1446,4395,32,1,0
2200 -,4,1446,4397,56,2,0
2201 -,2,1447,4399,32,1,0
2202 -,4,1447,4401,56,2,0
2203 -,2,1448,4403,40,1,0
2204 -,4,1448,4405,56,2,0
2205 -,2,1449,4407,40,1,0
2206 -,4,1449,4409,56,2,0
2207 -,2,1450,4411,32,1,0
2208 -,4,1450,4413,56,2,0
2209 -,2,1451,4415,32,1,0
2210 -,4,1451,4417,56,2,0
2211 -,2,1452,4419,40,1,0
2212 -,4,1452,4421,56,2,0
2213 -,2,1453,4423,40,1,0
2214 -,4,1453,4425,56,2,0
2215 -,2,1454,4427,40,1,0
2216 -,4,1454,4429,56,2,0
2217 -,2,1455,4431,40,1,0
2218 -,4,1455,4433,56,2,0
2219 -,2,1456,4435,40,1,0
2220 -,4,1456,4437,56,2,0
2221 -,2,1457,4439,40,1,0
2222 -,4,1457,4441,56,2,0
2223 -,2,1441,4443,32,1,0
2224 -,2,1458,4445,32,1,0
2225 -,4,1458,4447,56,2,0
2226 -,2,1459,4449,32,1,0
2227 -,4,1459,4451,56,2,0
2228 -,2,1460,4453,32,1,0
2229 -,4,1460,4455,56,2,0
2230 -,4,101,4457,56,2,0
2231 -,4,265,4459,56,2,0
2232 -,2,1461,4461,40,1,0
2233 -,4,1461,4463,56,2,0
2234 -,2,1462,4465,40,1,0
2235 -,4,1462,4467,56,2,0
2236 -,2,1463,4469,40,1,0
2237 -,4,1463,4471,56,2,0
2238 -,2,1464,4473,40,1,0
2239 -,4,1464,4475,56,2,0
2240 -,2,1465,4477,40,1,0
2241 -,2,1466,4479,32,1,0
2242 -,4,1466,4481,56,2,0
2243 -,2,1467,4483,32,1,0
2244 -,4,1467,4485,56,2,0
2245 -,2,1468,4487,32,1,0
2246 -,4,1468,4489,56,2,0
2247 -,2,1469,4491,40,1,0
2248 -,4,1469,4493,56,2,0
2249 -,2,1470,4495,40,1,0
2250 -,4,1470,4497,56,2,0
2251 -,2,1471,4499,32,1,0
2252 -,4,1471,4501,56,2,0
2253 -,2,1472,4503,32,1,0
2254 -,4,1472,4505,56,2,0
2255 -,2,1473,4507,40,1,0
2256 -,4,1473,4509,56,2,0
2257 -,2,1474,4511,40,1,0
2258 -,4,1474,4513,56,2,0
2259 -,2,1475,4515,40,1,0
2260 -,4,1475,4517,56,2,0
2261 -,2,1476,4519,40,1,0
2262 -,4,1476,4521,56,2,0
2263 -,2,1477,4523,32,1,0
2264 -,4,1477,4525,56,2,0
2265 -,2,1478,4527,32,1,0
2266 -,4,1478,4529,56,2,0
2267 -,2,1479,4531,40,1,0
2268 -,4,1479,4533,56,2,0
2269 -,2,1480,4535,40,1,0
2270 -,4,1480,4537,56,2,0
2271 -,2,1481,4539,32,1,0
2272 -,4,1481,4541,56,2,0
2273 -,2,1482,4543,32,1,0
2274 -,4,1482,4545,56,2,0
2275 -,2,1483,4547,48,1,0
2276 -,4,1483,4549,56,2,0
2277 -,2,1484,4551,40,1,0
2278 -,4,1484,4553,56,2,0
2279 -,2,1485,4555,40,1,0
2280 -,4,1485,4557,56,2,0
2281 -,2,1486,4559,40,1,0
2282 -,4,1486,4561,56,2,0
2283 -,2,1487,4563,40,1,0
2284 -,4,1487,4565,56,2,0
2285 -,2,1488,4567,40,1,0
2286 -,4,1488,4569,56,2,0
2287 -,2,1489,4571,40,1,0
2288 -,4,1489,4573,56,2,0
2289 -,2,1490,4575,40,1,0
2290 -,4,1490,4577,56,2,0
2291 -,2,1491,4579,48,1,0
2292 -,4,1491,4581,56,2,0
2293 -,2,1492,4583,48,1,0
2294 -,4,1492,4585,56,2,0
2295 -,2,1493,4587,40,1,0
2296 -,4,1493,4589,56,2,0
2297 -,2,1494,4591,40,1,0
2298 -,4,1494,4593,56,2,0
2299 -,2,1495,4595,40,1,0
2300 -,4,1495,4597,56,2,0
2301 -,2,1496,4599,40,1,0
2302 -,4,1496,4601,56,2,0
2303 -,2,1497,4603,40,1,0
2304 -,4,1497,4605,56,2,0
2305 -,2,1498,4607,40,1,0
2306 -,4,1498,4609,56,2,0
2307 -,4,282,4611,56,2,0
2308 -,2,1499,4613,32,1,0
2309 -,4,1499,4615,56,2,0
2310 -,2,1500,4617,32,1,0
2311 -,4,1500,4619,56,2,0
2312 -,4,264,4621,56,2,0
2313 -,2,1501,4623,48,1,0
2314 -,2,1502,4625,48,1,0
2315 -,4,1503,4627,56,2,0
2316 -,4,1325,4629,56,4,0
2317 -,1,1,4631,1056,63,0
2318 -,2,1504,4633,48,1,0
2319 -,4,1504,4635,56,4,0
2320 -,4,1505,4637,56,4,0
2321 -,2,1506,4639,40,1,0
2322 -,4,1506,4641,56,2,0
2323 -,2,1507,4643,32,1,0
2324 -,4,1508,4645,56,2,0
2325 -,2,1509,4647,40,1,0
2326 -,4,1509,4649,56,4,0
2327 -,4,1504,4651,56,4,0
2328 -,4,1510,4653,56,4,0
2329 -,4,1506,4655,56,2,0
2330 -,4,1508,4657,56,2,0
2331 -,4,1509,4659,56,4,0
2332 -,4,1504,4661,56,4,0
2333 -,4,1511,4663,56,4,0
2334 -,2,1512,4665,40,1,0
2335 -,4,1513,4667,56,2,0
2336 -,4,1509,4669,56,4,0
2337 -,2,1514,4671,32,1,0
2338 -,4,1264,4673,56,3,0
2339 -,1,1,4675,200,10,0
2340 -,4,1514,4677,56,4,0
2341 -,0,291,4679,32,2,0
2342 -,2,1515,4681,40,1,0
2343 -,4,193,4683,56,4,0
2344 -,0,291,4685,32,2,0
2345 -,2,1516,4687,32,1,0
2346 -,2,1517,4689,32,1,0
2347 -,4,1517,4691,56,4,0
2348 -,0,291,4693,32,2,0
2349 -,2,1518,4695,40,1,0
2350 -,2,1519,4697,40,1,0
2351 -,4,1519,4699,56,4,0
2352 -,0,291,4701,32,2,0
2353 -,10,1520,4703,40,3,0
2354 -,4,1521,4705,56,2,0
2355 -,4,1522,4707,56,2,0
2356 -,4,1523,4709,56,2,0
2357 -,4,1524,4711,56,4,0
2358 -,2,1525,4713,32,1,0
2359 -,2,1526,4715,40,1,0
2360 -,2,1527,4717,40,1,0
2361 -,2,1528,4719,48,1,0
2362 -,2,1529,4721,40,1,0
2363 -,2,1530,4723,40,1,0
2364 -,2,1531,4725,40,1,0
2365 -,4,1532,4727,56,4,0
2366 -,4,1533,4729,56,4,0
2367 -,4,1534,4731,56,4,0
2368 -,4,1535,4733,56,4,0
2369 -,4,1536,4735,56,4,0
2370 -,4,1537,4737,56,4,0
2371 -,4,1538,4739,56,4,0
2372 -,4,1539,4741,56,4,0
2373 -,4,1540,4743,56,4,0
2374 -,4,1541,4745,56,4,0
2375 -,4,1542,4747,56,4,0
2376 -,4,1543,4749,56,4,0
2377 -,4,1544,4751,56,4,0
2378 -,4,1545,4753,56,4,0
2379 -,4,1546,4755,56,4,0
2380 -,4,1547,4757,56,4,0
2381 -,4,1548,4759,56,4,0
2382 -,4,1549,4761,56,4,0
2383 -,4,1550,4763,56,4,0
2384 -,4,1551,4765,56,4,0
2385 -,4,1552,4767,56,4,0
2386 -,4,1553,4769,56,4,0
2387 -,4,1554,4771,56,4,0
2388 -,4,1555,4773,56,4,0
2389 -,4,1556,4775,56,4,0
2390 -,4,1557,4777,56,4,0
2391 -,4,1558,4779,56,4,0
2392 -,4,1559,4781,56,4,0
2393 -,4,1560,4783,56,4,0
2394 -,4,1561,4785,56,4,0
2395 -,4,1562,4787,56,4,0
2396 -,4,1563,4789,56,4,0
2397 -,2,1564,4791,40,1,0
2398 -,2,1565,4793,40,1,0
2399 -,2,1566,4795,40,1,0
2400 -,4,1504,4797,56,4,0
2401 -,4,1567,4799,56,2,0
2402 -,2,1568,4801,32,1,0
2403 -,4,1569,4803,56,2,0
2404 -,4,1509,4805,56,4,0
2405 -,4,1570,4807,56,4,0
2406 -,4,1571,4809,56,4,0
2407 -,4,1501,4811,56,4,0
2408 -,4,1502,4813,56,4,0
2409 -,4,129,4815,56,2,0
2410 -,2,1572,4817,40,1,0
2411 -,4,1572,4819,56,2,0
2412 -,2,1573,4821,40,1,0
2413 -,4,1573,4823,56,2,0
2414 -,4,223,4825,56,2,0
2415 -,4,250,4827,56,2,0
2416 -,2,1574,4829,32,1,0
2417 -,4,1574,4831,56,2,0
2418 -,2,1575,4833,32,1,0
2419 -,4,1575,4835,56,2,0
2420 -,2,1576,4837,32,1,0
2421 -,4,1576,4839,56,2,0
2422 -,2,1577,4841,32,1,0
2423 -,4,1577,4843,56,2,0
2424 -,2,1578,4845,32,1,0
2425 -,4,1578,4847,56,2,0
2426 -,2,1579,4849,40,1,0
2427 -,4,1579,4851,56,2,0
2428 -,2,1580,4853,40,1,0
2429 -,4,1580,4855,56,2,0
2430 -,4,1283,4857,56,2,0
2431 -,2,1581,4859,32,1,0
2432 -,4,1581,4861,56,2,0
2433 -,2,1582,4863,40,1,0
2434 -,4,1582,4865,56,2,0
2435 -,2,1583,4867,32,1,0
2436 -,4,1583,4869,56,2,0
2437 -,2,1584,4871,32,1,0
2438 -,4,1584,4873,56,2,0
2439 -,4,1314,4875,56,2,0
2440 -,4,1276,4877,56,2,0
2441 -,2,1585,4879,32,1,0
2442 -,4,1585,4881,56,2,0
2443 -,4,1326,4883,56,2,0
2444 -,2,1586,4885,32,1,0
2445 -,4,1586,4887,56,2,0
2446 -,2,1587,4889,40,1,0
2447 -,4,1587,4891,56,2,0
2448 -,2,1588,4893,32,1,0
2449 -,4,1588,4895,56,2,0
2450 -,2,1589,4897,40,1,0
2451 -,4,1589,4899,56,2,0
2452 -,2,1590,4901,32,1,0
2453 -,4,1590,4903,56,2,0
2454 -,2,1591,4905,32,1,0
2455 -,4,1591,4907,56,2,0
2456 -,2,1592,4909,32,1,0
2457 -,4,1592,4911,56,2,0
2458 -,2,1593,4913,32,1,0
2459 -,4,1593,4915,56,2,0
2460 -,2,1594,4917,32,1,0
2461 -,4,1594,4919,56,2,0
2462 -,4,1317,4921,56,2,0
2463 -,2,1595,4923,32,1,0
2464 -,4,1595,4925,56,2,0
2465 -,2,1596,4927,32,1,0
2466 -,4,1596,4929,56,2,0
2467 -,2,1597,4931,32,1,0
2468 -,4,1597,4933,56,2,0
2469 -,2,1598,4935,32,1,0
2470 -,4,1598,4937,56,2,0
2471 -,2,1522,4939,32,1,0
2472 -,2,1523,4941,40,1,0
2473 -,2,1599,4943,32,1,0
2474 -,4,1599,4945,56,2,0
2475 -,2,1600,4947,40,1,0
2476 -,4,1600,4949,56,2,0
2477 -,4,265,4951,56,2,0
2478 -,2,1601,4953,32,1,0
2479 -,4,1601,4955,56,2,0
2480 -,2,1602,4957,32,1,0
2481 -,4,1603,4959,56,2,0
2482 -,2,1604,4961,40,1,0
2483 -,4,1605,4963,56,2,0
2484 -,2,1606,4965,48,1,0
2485 -,4,1606,4967,56,2,0
2486 -,2,1607,4969,48,1,0
2487 -,4,1607,4971,56,2,0
2488 -,2,1608,4973,40,1,0
2489 -,4,1608,4975,56,2,0
2490 -,2,1609,4977,40,1,0
2491 -,4,1609,4979,56,2,0
2492 -,4,282,4981,56,2,0
2493 -,4,1610,4983,56,2,0
2494 -,4,134,4985,56,2,0
2495 -,4,161,4987,56,2,0
2496 -,4,1306,4989,56,2,0
2497 -,2,1611,4991,32,1,0
2498 -,4,1611,4993,56,2,0
2499 -,2,1612,4995,32,1,0
2500 -,4,1612,4997,56,2,0
2501 -,4,229,4999,56,2,0
2502 -,4,228,5001,56,2,0
2503 -,4,214,5003,56,2,0
2504 -,4,258,5005,56,2,0
2505 -,2,1613,5007,32,1,0
2506 -,4,1613,5009,56,2,0
2507 -,2,1614,5011,32,1,0
2508 -,4,1614,5013,56,2,0
2509 -,4,76,5015,56,2,0
2510 -,4,1306,5017,56,2,0
2511 -,4,237,5019,56,2,0
2512 -,4,150,5021,56,2,0
2513 -,4,57,5023,56,2,0
2514 -,2,1615,5025,32,1,0
2515 -,4,1615,5027,56,2,0
2516 -,4,1348,5029,56,2,0
2517 -,4,122,5031,56,2,0
2518 -,4,1318,5033,56,2,0
2519 -,4,1616,5035,56,2,0
2520 -,4,283,5037,56,2,0
2521 -,2,1617,5039,40,1,0
2522 -,4,1617,5041,56,2,0
2523 -,2,1618,5043,32,1,0
2524 -,4,1459,5045,56,2,0
2525 -,2,1619,5047,40,1,0
2526 -,4,1619,5049,56,2,0
2527 -,2,1618,5051,32,1,0
2528 -,4,1306,5053,56,2,0
2529 -,4,177,5055,56,2,0
2530 -,4,142,5057,56,2,0
2531 -,4,240,5059,56,2,0
2532 -,4,150,5061,56,2,0
2533 -,4,1615,5063,56,2,0
2534 -,4,1348,5065,56,2,0
2535 -,4,122,5067,56,2,0
2536 -,4,1318,5069,56,2,0
2537 -,4,168,5071,56,2,0
2538 -,4,1616,5073,56,2,0
2539 -,4,283,5075,56,2,0
2540 -,2,1620,5077,32,1,0
2541 -,4,1620,5079,56,2,0
2542 -,4,267,5081,56,2,0
2543 -,4,277,5083,56,2,0
2544 -,4,128,5085,56,2,0
2545 -,4,160,5087,56,2,0
2546 -,4,162,5089,56,2,0
2547 -,2,1621,5091,32,1,0
2548 -,4,1621,5093,56,2,0
2549 -,2,1622,5095,32,1,0
2550 -,4,1622,5097,56,2,0
2551 -,2,1623,5099,40,1,0
2552 -,2,1624,5101,40,1,0
2553 -,2,1625,5103,48,1,0
2554 -,2,1626,5105,32,1,0
2555 -,2,1627,5107,32,1,0
2556 -,2,1628,5109,40,1,0
2557 -,2,1629,5111,40,1,0
2558 -,2,1630,5113,40,1,0
2559 -,4,255,5115,56,2,0
2560 -,4,265,5117,56,2,0
2561 -,4,282,5119,56,2,0
2562 -,4,1503,5121,56,2,0
2563 -,2,255,5123,32,1,0
2564 -,4,269,5125,56,2,0
2565 -,2,1631,5127,32,1,0
2566 -,2,1505,5129,40,1,0
2567 -,2,1510,5131,40,1,0
2568 -,2,1567,5133,32,1,0
2569 -,2,1511,5135,40,1,0
2570 -,2,1632,5137,40,1,0
2571 -,4,1504,5139,56,4,0
2572 -,4,1632,5141,56,2,0
2573 -,4,1509,5143,56,4,0
2574 -,2,1633,5145,32,1,0
2575 -,4,1633,5147,56,4,0
2576 -,2,1634,5149,48,1,0
2577 -,4,1634,5151,56,4,0
2578 -,4,284,5153,56,2,0
2579 -,4,1615,5155,56,2,0
2580 -,4,142,5157,56,2,0
2581 -,4,150,5159,56,2,0
2582 -,4,240,5161,56,2,0
2583 -,2,284,5163,32,1,0
2584 -,4,271,5165,56,2,0
2585 -,4,1440,5167,56,2,0
2586 -,2,1635,5169,40,1,0
2587 -,4,1635,5171,56,2,0
2588 -,2,1636,5173,32,1,0
2589 -,4,1636,5175,56,2,0
2590 -,2,1637,5177,40,1,0
2591 -,4,1637,5179,56,2,0
2592 -,2,1638,5181,32,1,0
2593 -,4,1638,5183,56,2,0
2594 -,2,1639,5185,40,1,0
2595 -,2,1640,5187,40,1,0
2596 -,2,1641,5189,48,1,0
2597 -,2,1642,5191,48,1,0
2598 -,2,1643,5193,40,1,0
2599 -,2,1644,5195,40,1,0
2600 -,2,1645,5197,32,1,0
2601 -,4,201,5199,56,2,0
2602 -,2,1646,5201,40,1,0
2603 -,4,1646,5203,56,2,0
2604 -,2,1647,5205,32,1,0
2605 -,4,1647,5207,56,2,0
2606 -,2,1648,5209,40,1,0
2607 -,4,1648,5211,56,2,0
2608 -,4,265,5213,56,2,0
2609 -,4,282,5215,56,2,0
2610 -,4,1325,5217,56,2,0
2611 -,4,222,5219,56,2,0
2612 -,2,1649,5221,32,1,0
2613 -,4,1649,5223,56,2,0
2614 -,4,272,5225,56,2,0
2615 -,4,75,5227,56,2,0
2616 -,2,1650,5229,32,1,0
2617 -,4,107,5231,56,2,0
2618 -,4,108,5233,56,2,0
2619 -,4,61,5235,56,2,0
2620 -,4,96,5237,56,2,0
2621 -,4,142,5239,56,2,0
2622 -,4,143,5241,56,2,0
2623 -,4,145,5243,56,2,0
2624 -,4,150,5245,56,2,0
2625 -,4,164,5247,56,2,0
2626 -,4,209,5249,56,2,0
2627 -,4,213,5251,56,2,0
2628 -,4,240,5253,56,2,0
2629 -,4,242,5255,56,2,0
2630 -,4,270,5257,56,2,0
2631 -,2,1651,5259,40,1,0
2632 -,4,1651,5261,56,2,0
2633 -,4,220,5263,56,2,0
2634 -,2,1652,5265,40,1,0
2635 -,4,1652,5267,56,2,0
2636 -,2,1653,5269,32,1,0
2637 -,2,1654,5271,32,1,0
2638 -,4,1654,5273,56,2,0
2639 -,2,1655,5275,32,1,0
2640 -,4,1655,5277,56,2,0
2641 -,2,1656,5279,32,1,0
2642 -,4,1656,5281,56,2,0
2643 -,2,1657,5283,32,1,0
2644 -,4,1657,5285,56,2,0
2645 -,2,1658,5287,32,1,0
2646 -,4,1658,5289,56,2,0
2647 -,2,1659,5291,32,1,0
2648 -,4,1659,5293,56,2,0
2649 -,2,1660,5295,32,1,0
2650 -,4,1660,5297,56,2,0
2651 -,2,1661,5299,32,1,0
2652 -,4,1661,5301,56,2,0
2653 -,2,1662,5303,32,1,0
2654 -,4,1662,5305,56,2,0
2655 -,2,1663,5307,32,1,0
2656 -,4,1663,5309,56,2,0
2657 -,2,1664,5311,32,1,0
2658 -,4,1664,5313,56,2,0
2659 -,2,1665,5315,32,1,0
2660 -,4,1665,5317,56,2,0
2661 -,2,1666,5319,32,1,0
2662 -,4,1666,5321,56,2,0
2663 -,2,1667,5323,32,1,0
2664 -,4,1667,5325,56,2,0
2665 -,2,1668,5327,32,1,0
2666 -,4,1668,5329,56,2,0
2667 -,2,1669,5331,32,1,0
2668 -,4,1669,5333,56,2,0
2669 -,2,1670,5335,32,1,0
2670 -,4,1670,5337,56,2,0
2671 -,2,1671,5339,32,1,0
2672 -,4,1671,5341,56,2,0
2673 -,2,1672,5343,32,1,0
2674 -,4,1672,5345,56,2,0
2675 -,4,1340,5347,56,2,0
2676 -,2,1673,5349,32,1,0
2677 -,4,1673,5351,56,2,0
2678 -,2,1674,5353,32,1,0
2679 -,4,1674,5355,56,2,0
2680 -,2,1675,5357,32,1,0
2681 -,4,1675,5359,56,2,0
2682 -,2,1521,5361,32,1,0
2683 -,2,1284,5363,32,1,0
2684 -,2,1676,5365,32,1,0
2685 -,4,1676,5367,56,2,0
2686 -,2,1677,5369,32,1,0
2687 -,4,1677,5371,56,2,0
2688 -,2,1678,5373,32,1,0
2689 -,4,1678,5375,56,2,0
2690 -,2,1679,5377,32,1,0
2691 -,4,1679,5379,56,2,0
2692 -,2,1680,5381,32,1,0
2693 -,4,1680,5383,56,2,0
2694 -,2,1681,5385,32,1,0
2695 -,4,1681,5387,56,2,0
2696 -,2,1682,5389,32,1,0
2697 -,4,1682,5391,56,2,0
2698 -,2,1683,5393,32,1,0
2699 -,4,1683,5395,56,2,0
2700 -,2,1684,5397,32,1,0
2701 -,4,1684,5399,56,2,0
2702 -,2,1685,5401,32,1,0
2703 -,4,1685,5403,56,2,0
2704 -,2,1686,5405,32,1,0
2705 -,2,1687,5407,32,1,0
2706 -,2,1688,5409,32,1,0
2707 -,2,1689,5411,32,1,0
2708 -,2,1690,5413,32,1,0
2709 -,2,1691,5415,32,1,0
2710 -,2,1692,5417,32,1,0
2711 -,2,1693,5419,32,1,0
2712 -,2,1653,5421,32,1,0
2713 -,4,1636,5423,56,2,0
2714 -,4,285,5425,56,2,0
2715 -,4,1615,5427,56,2,0
2716 -,4,150,5429,56,2,0
2717 -,4,57,5431,56,2,0
2718 -,2,285,5433,32,1,0
2719 -,4,78,5435,56,2,0
2720 -,4,265,5437,56,2,0
2721 -,4,282,5439,56,2,0
2722 -,4,165,5441,56,2,0
2723 -,4,1306,5443,56,2,0
2724 -,4,67,5445,56,2,0
2725 -,4,1432,5447,56,2,0
2726 -,4,1317,5449,56,2,0
2727 -,4,1694,5451,56,2,0
2728 -,4,1695,5453,56,2,0
2729 -,4,193,5455,56,2,0
2730 -,4,230,5457,56,2,0
2731 -,4,261,5459,56,2,0
2732 -,2,1696,5461,48,1,0
2733 -,4,1,5463,56,2,0
2734 -,4,1,5465,56,2,0
2735 -,4,1697,5467,56,2,0
2736 -,2,1697,5469,40,1,0
2737 -,4,1698,5471,56,2,0
2738 -,4,193,5473,56,2,0
2739 -,4,230,5475,56,2,0
2740 -,4,261,5477,56,2,0
2741 -,2,1699,5479,40,1,0
2742 -,2,1698,5481,48,1,0
2743 -,4,1,5483,56,2,0
2744 -,4,1,5485,56,2,0
2745 -,4,1,5487,56,2,0
2746 -,4,1,5489,56,2,0
2747 -,4,1,5491,56,2,0
2748 -,4,1,5493,56,2,0
2749 -,4,1,5495,56,2,0
2750 -,2,1700,5497,32,1,0
2751 -,4,1700,5499,56,2,0
2752 -,2,1701,5501,32,1,0
2753 -,4,1701,5503,56,2,0
2754 -,4,57,5505,56,2,0
2755 -,4,1598,5507,56,2,0
2756 -,2,1702,5509,32,1,0
2757 -,4,1702,5511,56,2,0
2758 -,2,1703,5513,32,1,0
2759 -,4,1703,5515,56,2,0
2760 -,2,1704,5517,32,1,0
2761 -,4,1704,5519,56,2,0
2762 -,4,381,5521,56,2,0
2763 -,2,1705,5523,40,1,0
2764 -,4,1705,5525,56,2,0
2765 -,2,1706,5527,40,1,0
2766 -,4,1706,5529,56,2,0
2767 -,2,1707,5531,32,1,0
2768 -,4,1707,5533,56,2,0
2769 -,2,1708,5535,32,1,0
2770 -,4,1708,5537,56,2,0
2771 -,2,1709,5539,32,1,0
2772 -,4,1709,5541,56,2,0
2773 -,4,1264,5543,56,2,0
2774 -,4,1264,5545,56,2,0
2775 -,4,1710,5547,56,2,0
2776 -,2,1711,5549,40,1,0
2777 -,4,1711,5551,56,2,0
2778 -,2,1712,5553,40,1,0
2779 -,4,1712,5555,56,2,0
2780 -,2,1713,5557,40,1,0
2781 -,4,1713,5559,56,2,0
2782 -,2,1714,5561,40,1,0
2783 -,4,1714,5563,56,2,0
2784 -,2,1715,5565,40,1,0
2785 -,4,1715,5567,56,2,0
2786 -,2,1716,5569,40,1,0
2787 -,4,1716,5571,56,2,0
2788 -,2,1717,5573,40,1,0
2789 -,4,1717,5575,56,2,0
2790 -,2,1718,5577,40,1,0
2791 -,4,1718,5579,56,2,0
2792 -,2,1719,5581,48,1,0
2793 -,4,1719,5583,56,2,0
2794 -,2,1720,5585,32,1,0
2795 -,4,1720,5587,56,2,0
2796 -,2,1721,5589,40,1,0
2797 -,4,1721,5591,56,2,0
2798 -,2,1722,5593,40,1,0
2799 -,4,1722,5595,56,2,0
2800 -,2,1723,5597,32,1,0
2801 -,4,1723,5599,56,2,0
2802 -,2,1724,5601,32,1,0
2803 -,4,1724,5603,56,2,0
2804 -,2,1725,5605,40,1,0
2805 -,4,1725,5607,56,2,0
2806 -,4,265,5609,56,2,0
2807 -,4,1264,5611,56,2,0
2808 -,2,1726,5613,48,1,0
2809 -,4,1726,5615,56,2,0
2810 -,4,1345,5617,56,2,0
2811 -,2,1727,5619,48,1,0
2812 -,4,1727,5621,56,2,0
2813 -,2,1728,5623,40,1,0
2814 -,4,1,5625,56,2,0
2815 -,2,1729,5627,40,1,0
2816 -,4,1,5629,56,2,0
2817 -,2,1730,5631,40,1,0
2818 -,4,1,5633,56,2,0
2819 -,2,1731,5635,40,1,0
2820 -,4,1264,5637,56,2,0
2821 -,2,1732,5639,40,1,0
2822 -,4,1732,5641,56,4,0
2823 -,1,1,5643,112,4,0
2824 -,4,1340,5645,56,4,0
2825 -,2,1733,5647,48,1,0
2826 -,4,1733,5649,56,4,0
2827 -,2,1734,5651,40,1,0
2828 -,4,1734,5653,56,4,0
2829 -,2,1735,5655,48,1,0
2830 -,4,1735,5657,56,4,0
2831 -,2,1736,5659,40,1,0
2832 -,4,1736,5661,56,4,0
2833 -,2,1737,5663,40,1,0
2834 -,2,1738,5665,48,1,0
2835 -,2,1739,5667,48,1,0
2836 -,4,62,5669,56,2,0
2837 -,4,1740,5671,56,2,0
2838 -,2,1740,5673,48,1,0
2839 -,4,1610,5675,56,2,0
2840 -,4,193,5677,56,2,0
2841 -,4,230,5679,56,2,0
2842 -,4,261,5681,56,2,0
2843 -,2,140,5683,40,1,0
2844 -,4,193,5685,56,2,0
2845 -,4,68,5687,56,2,0
2846 -,4,1,5689,56,2,0
2847 -,4,1,5691,56,2,0
2848 -,4,1,5693,56,2,0
2849 -,4,1,5695,56,2,0
2850 -,4,193,5697,56,2,0
2851 -,4,1741,5699,56,2,0
2852 -,2,1742,5701,32,1,0
2853 -,2,1743,5703,40,1,0
2854 -,2,1744,5705,32,1,0
2855 -,2,1745,5707,40,1,0
2856 -,4,1745,5709,56,4,0
2857 -,2,1746,5711,48,1,0
2858 -,4,1746,5713,56,4,0
2859 -,2,1747,5715,40,1,0
2860 -,2,1275,5717,40,1,0
2861 -,4,1264,5719,56,2,0
2862 -,4,1,5721,56,2,0
2863 -,4,1,5723,56,2,0
2864 -,4,1,5725,56,2,0
2865 -,4,1,5727,56,2,0
2866 -,4,1,5729,56,2,0
2867 -,4,1,5731,56,2,0
2868 -,4,1,5733,56,2,0
2869 -,4,1,5735,56,2,0
2870 -,4,1,5737,56,2,0
2871 -,1,1,5739,80,2,0
2872 -,4,193,5741,56,2,0
2873 -,4,1748,5743,56,2,0
2874 -,4,1306,5745,56,2,0
2875 -,4,243,5747,56,2,0
2876 -,4,1432,5749,56,2,0
2877 -,4,1317,5751,56,2,0
2878 -,4,193,5753,56,2,0
2879 -,2,1749,5755,40,1,0
2880 -,4,1750,5757,56,2,0
2881 -,4,1264,5759,56,2,0
2882 -,4,1264,5761,56,2,0
2883 -,4,1264,5763,56,2,0
2884 -,4,1264,5765,56,2,0
2885 -,4,193,5767,56,2,0
2886 -,4,1264,5769,56,2,0
2887 -,4,1264,5771,56,2,0
2888 -,4,1264,5773,56,2,0
2889 -,4,1264,5775,56,2,0
2890 -,4,1264,5777,56,2,0
2891 -,4,1264,5779,56,2,0
2892 -,4,1264,5781,56,2,0
2893 -,4,1264,5783,56,2,0
2894 -,4,1751,5785,56,4,0
2895 -,4,1752,5787,56,4,0
2896 -,4,1753,5789,56,4,0
2897 -,4,1,5791,56,2,0
2898 -,4,1754,5793,56,4,0
2899 -,4,94,5795,56,2,0
2900 -,4,173,5797,56,2,0
2901 -,4,232,5799,56,2,0
2902 -,1,1755,5801,32,1,0
2903 -,0,28,5803,24,1,0
2904 -,1,1755,5805,24,1,0
2905 -,0,28,5807,24,1,0
2906 -,1,1755,5809,24,1,0
2907 -,0,28,5811,24,1,0
2908 -,1,1755,5813,24,1,0
2909 -,0,28,5815,24,1,0
2910 -,1,1755,5817,32,1,0
2911 -,0,28,5819,24,1,0
2912 -,1,1755,5821,32,1,0
2913 -,0,28,5823,24,1,0
2914 -,1,1755,5825,32,1,0
2915 -,0,28,5827,24,1,0
2916 -,1,1755,5829,24,1,0
2917 -,0,28,5831,24,1,0
2918 -,1,1755,5833,24,1,0
2919 -,0,28,5835,24,1,0
2920 -,1,1755,5837,24,1,0
2921 -,0,28,5839,24,1,0
2922 -,1,1755,5841,24,1,0
2923 -,0,28,5843,24,1,0
2924 -,1,1755,5845,48,1,0
2925 -,0,28,5847,24,1,0
2926 -,1,1755,5849,24,1,0
2927 -,0,28,5851,24,1,0
2928 -,1,1755,5853,56,1,0
2929 -,0,28,5855,24,1,0
2930 -,1,1755,5857,48,1,0
2931 -,0,28,5859,24,1,0
2932 -,1,1755,5861,24,1,0
2933 -,0,28,5863,24,1,0
2934 -,1,1755,5865,24,1,0
2935 -,0,28,5867,24,1,0
2936 -,1,1755,5869,24,1,0
2937 -,0,28,5871,24,1,0
2938 -,1,1755,5873,24,1,0
2939 -,0,28,5875,24,1,0
2940 -,1,1755,5877,24,1,0
2941 -,0,28,5879,24,1,0
2942 -,1,1755,5881,24,1,0
2943 -,0,28,5883,24,1,0
2944 -,1,1755,5885,24,1,0
2945 -,0,28,5887,24,1,0
2946 -,1,1755,5889,56,1,0
2947 -,0,28,5891,24,1,0
2948 -,1,1755,5893,48,1,0
2949 -,0,28,5895,24,1,0
2950 -,1,1755,5897,32,1,0
2951 -,0,28,5899,24,1,0
2952 -,1,1755,5901,32,1,0
2953 -,0,28,5903,24,1,0
2954 -,1,1755,5905,32,1,0
2955 -,0,28,5907,24,1,0
2956 -,1,1755,5909,24,1,0
2957 -,0,28,5911,24,1,0
2958 -,1,1755,5913,40,1,0
2959 -,0,28,5915,24,1,0
2960 -,1,1755,5917,32,1,0
2961 -,0,28,5919,24,1,0
2962 -,1,1755,5921,24,1,0
2963 -,0,28,5923,24,1,0
2964 -,1,1755,5925,24,1,0
2965 -,0,28,5927,24,1,0
2966 -,1,1755,5929,32,1,0
2967 -,0,28,5931,24,1,0
2968 -,1,1755,5933,48,1,0
2969 -,0,28,5935,24,1,0
2970 -,1,1755,5937,56,1,0
2971 -,0,28,5939,24,1,0
2972 -,1,1755,5941,48,1,0
2973 -,0,28,5943,24,1,0
2974 -,1,1755,5945,48,1,0
2975 -,0,28,5947,24,1,0
2976 -,1,1755,5949,24,1,0
2977 -,0,28,5951,24,1,0
2978 -,1,1755,5953,24,1,0
2979 -,0,28,5955,24,1,0
2980 -,1,1755,5957,40,1,0
2981 -,0,28,5959,24,1,0
2982 -,1,1755,5961,24,1,0
2983 -,0,28,5963,24,1,0
2984 -,1,1755,5965,24,1,0
2985 -,0,28,5967,24,1,0
2986 -,1,1755,5969,40,1,0
2987 -,0,28,5971,24,1,0
2988 -,1,1755,5973,24,1,0
2989 -,0,28,5975,24,1,0
2990 -,1,1755,5977,24,1,0
2991 -,0,28,5979,24,1,0
2992 -,1,1755,5981,24,1,0
2993 -,0,28,5983,24,1,0
2994 -,1,1755,5985,24,1,0
2995 -,0,28,5987,24,1,0
2996 -,1,1755,5989,24,1,0
2997 -,0,28,5991,24,1,0
2998 -,1,1755,5993,48,1,0
2999 -,0,28,5995,24,1,0
3000 -,1,1755,5997,24,1,0
3001 -,0,28,5999,24,1,0
3002 -,1,1755,6001,24,1,0
3003 -,0,28,6003,24,1,0
3004 -,1,1755,6005,24,1,0
3005 -,0,28,6007,24,1,0
3006 -,1,1755,6009,72,1,0
3007 -,0,28,6011,24,1,0
3008 -,1,1755,6013,16,1,0
3009 -,0,28,6015,24,1,0
3010 -,1,1755,6017,48,1,0
3011 -,0,28,6019,24,1,0
3012 -,1,1755,6021,24,1,0
3013 -,0,28,6023,24,1,0
3014 -,1,1755,6025,24,1,0
3015 -,0,28,6027,24,1,0
3016 -,1,1755,6029,24,1,0
3017 -,0,28,6031,24,1,0
3018 -,1,1755,6033,24,1,0
3019 -,0,28,6035,24,1,0
3020 -,1,1755,6037,24,1,0
3021 -,0,28,6039,24,1,0
3022 -,1,1755,6041,24,1,0
3023 -,0,28,6043,24,1,0
3024 -,1,1755,6045,24,1,0
3025 -,0,28,6047,24,1,0
3026 -,1,1755,6049,24,1,0
3027 -,0,28,6051,24,1,0
3028 -,1,1755,6053,24,1,0
3029 -,0,28,6055,24,1,0
3030 -,1,1755,6057,56,1,0
3031 -,0,28,6059,24,1,0
3032 -,1,1755,6061,24,1,0
3033 -,0,28,6063,24,1,0
3034 -,1,1755,6065,32,1,0
3035 -,0,28,6067,24,1,0
3036 -,1,1755,6069,24,1,0
3037 -,0,28,6071,24,1,0
3038 -,1,1755,6073,24,1,0
3039 -,0,28,6075,24,1,0
3040 -,1,1755,6077,16,1,0
3041 -,0,28,6079,24,1,0
3042 -,1,1755,6081,16,1,0
3043 -,0,28,6083,24,1,0
3044 -,1,1755,6085,16,1,0
3045 -,0,28,6087,24,1,0
3046 -,1,1755,6089,16,1,0
3047 -,0,28,6091,24,1,0
3048 -,1,1755,6093,24,1,0
3049 -,0,28,6095,24,1,0
3050 -,1,1755,6097,24,1,0
3051 -,0,28,6099,24,1,0
3052 -,1,1755,6101,24,1,0
3053 -,0,28,6103,24,1,0
3054 -,1,1755,6105,24,1,0
3055 -,0,28,6107,24,1,0
3056 -,1,1755,6109,24,1,0
3057 -,0,28,6111,24,1,0
3058 -,1,1755,6113,24,1,0
3059 -,0,28,6115,24,1,0
3060 -,1,1755,6117,48,1,0
3061 -,0,28,6119,24,1,0
3062 -,1,1755,6121,40,1,0
3063 -,0,28,6123,24,1,0
3064 -,1,1755,6125,40,1,0
3065 -,0,28,6127,24,1,0
3066 -,1,1755,6129,32,1,0
3067 -,0,28,6131,24,1,0
3068 -,1,1755,6133,40,1,0
3069 -,0,28,6135,24,1,0
3070 -,1,1755,6137,24,1,0
3071 -,0,28,6139,24,1,0
3072 -,1,1755,6141,24,1,0
3073 -,0,28,6143,24,1,0
3074 -,1,1755,6145,40,1,0
3075 -,0,28,6147,24,1,0
3076 -,2,1756,6149,32,1,0
3077 -,1,1755,6151,24,1,0
3078 -,0,28,6153,24,1,0
3079 -,1,1755,6155,24,1,0
3080 -,0,28,6157,24,1,0
3081 -,1,1755,6159,24,1,0
3082 -,0,28,6161,24,1,0
3083 -,1,1755,6163,24,1,0
3084 -,0,28,6165,24,1,0
3085 -,1,1755,6167,24,1,0
3086 -,0,28,6169,24,1,0
3087 -,1,1755,6171,24,1,0
3088 -,0,28,6173,24,1,0
3089 -,1,1755,6175,24,1,0
3090 -,0,28,6177,24,1,0
3091 -,1,1755,6179,24,1,0
3092 -,0,28,6181,24,1,0
3093 -,1,1755,6183,32,1,0
3094 -,0,28,6185,24,1,0
3095 -,1,1755,6187,32,1,0
3096 -,0,28,6189,24,1,0
3097 -,1,1755,6191,32,1,0
3098 -,0,28,6193,24,1,0
3099 -,1,1755,6195,32,1,0
3100 -,0,28,6197,24,1,0
3101 -,1,1755,6199,32,1,0
3102 -,0,28,6201,24,1,0
3103 -,1,1755,6203,24,1,0
3104 -,0,28,6205,24,1,0
3105 -,1,1755,6207,32,1,0
3106 -,0,28,6209,24,1,0
3107 -,1,1755,6211,24,1,0
3108 -,0,28,6213,24,1,0
3109 -,1,1755,6215,24,1,0
3110 -,0,28,6217,24,1,0
3111 -,1,1755,6219,32,1,0
3112 -,0,28,6221,24,1,0
3113 -,7,54,6223,16,1,0
3114 -,1,1755,6225,16,1,0
3115 -,0,28,6227,24,1,0
3116 -,1,1755,6229,24,1,0
3117 -,0,28,6231,24,1,0
3118 -,1,1755,6233,24,1,0
3119 -,0,28,6235,24,1,0
3120 -,1,1755,6237,128,1,0
3121 -,0,28,6239,24,1,0
3122 -,1,1755,6241,64,1,0
3123 -,0,28,6243,24,1,0
3124 -,1,1755,6245,24,1,0
3125 -,0,28,6247,24,1,0
3126 -,1,1755,6249,224,1,0
3127 -,0,28,6251,24,1,0
3128 -,1,1755,6253,24,1,0
3129 -,0,28,6255,24,1,0
3130 -,1,1755,6257,24,1,0
3131 -,0,28,6259,24,1,0
3132 -,1,1755,6261,24,1,0
3133 -,0,28,6263,24,1,0
3134 -,1,1755,6265,24,1,0
3135 -,0,28,6267,24,1,0
3136 -,1,1755,6269,16,1,0
3137 -,0,28,6271,24,1,0
3138 -,1,1755,6273,16,1,0
3139 -,0,28,6275,24,1,0
3140 -,1,1755,6277,48,1,0
3141 -,0,28,6279,24,1,0
3142 -,1,1755,6281,24,1,0
3143 -,0,28,6283,24,1,0
3144 -,1,1755,6285,96,1,0
3145 -,0,28,6287,24,1,0
3146 -,1,1755,6289,24,1,0
3147 -,0,28,6291,24,1,0
3148 -,1,1755,6293,48,1,0
3149 -,0,28,6295,24,1,0
3150 -,1,1755,6297,64,1,0
3151 -,0,28,6299,24,1,0
3152 -,1,1755,6301,40,1,0
3153 -,0,28,6303,24,1,0
3154 -,1,1755,6305,40,1,0
3155 -,0,28,6307,24,1,0
3156 -,1,1755,6309,24,1,0
3157 -,0,28,6311,24,1,0
3158 -,1,1755,6313,24,1,0
3159 -,0,28,6315,24,1,0
3160 -,1,1755,6317,24,1,0
3161 -,0,28,6319,24,1,0
3162 -,1,1755,6321,24,1,0
3163 -,0,28,6323,24,1,0
3164 -,1,1755,6325,24,1,0
3165 -,0,28,6327,24,1,0
3166 -,1,1755,6329,24,1,0
3167 -,0,28,6331,24,1,0
3168 -,1,1,6333,24,1,0
3169 -,0,28,6335,24,1,0
3170 -,1,1755,6337,24,1,0
3171 -,0,28,6339,24,1,0
3172 -,1,1755,6341,48,1,0
3173 -,0,28,6343,24,1,0
3174 -,1,1755,6345,24,1,0
3175 -,0,28,6347,24,1,0
3176 -,1,1755,6349,24,1,0
3177 -,0,28,6351,24,1,0
3178 -,1,1755,6353,24,1,0
3179 -,0,28,6355,24,1,0
3180 -,1,1755,6357,24,1,0
3181 -,0,28,6359,24,1,0
3182 -,1,1755,6361,24,1,0
3183 -,0,28,6363,24,1,0
3184 -,1,1755,6365,24,1,0
3185 -,0,28,6367,24,1,0
3186 -,1,1755,6369,24,1,0
3187 -,0,28,6371,24,1,0
3188 -,1,1755,6373,24,1,0
3189 -,0,28,6375,24,1,0
3190 -,1,1755,6377,40,1,0
3191 -,0,28,6379,24,1,0
3192 -,1,1755,6381,32,1,0
3193 -,0,28,6383,24,1,0
3194 -,1,1755,6385,40,1,0
3195 -,0,28,6387,24,1,0
3196 -,1,1755,6389,32,1,0
3197 -,0,28,6391,24,1,0
3198 -,1,1755,6393,40,1,0
3199 -,0,28,6395,24,1,0
3200 -,1,1755,6397,32,1,0
3201 -,0,28,6399,24,1,0
3202 -,1,1755,6401,40,1,0
3203 -,0,28,6403,24,1,0
3204 -,1,1755,6405,32,1,0
3205 -,0,28,6407,24,1,0
3206 -,1,1755,6409,24,1,0
3207 -,0,28,6411,24,1,0
3208 -,1,1755,6413,24,1,0
3209 -,0,28,6415,24,1,0
3210 -,1,1755,6417,24,1,0
3211 -,0,28,6419,24,1,0
3212 -,1,1755,6421,24,1,0
3213 -,0,28,6423,24,1,0
3214 -,1,1755,6425,24,1,0
3215 -,0,28,6427,24,1,0
3216 -,1,1755,6429,32,1,0
3217 -,0,28,6431,24,1,0
3218 -,1,1755,6433,32,1,0
3219 -,0,28,6435,24,1,0
3220 -,1,1755,6437,24,1,0
3221 -,0,28,6439,24,1,0
3222 -,1,1755,6441,24,1,0
3223 -,0,28,6443,24,1,0
3224 -,1,1755,6445,24,1,0
3225 -,0,28,6447,24,1,0
3226 -,1,1,6449,96,1,0
3227 -,0,28,6451,24,1,0
3228 -,1,1,6453,48,1,0
3229 -,0,28,6455,24,1,0
3230 -,1,1755,6457,32,1,0
3231 -,0,28,6459,24,1,0
3232 -,1,1755,6461,16,1,0
3233 -,0,28,6463,24,1,0
3234 -,1,1755,6465,16,1,0
3235 -,0,28,6467,24,1,0
3236 -,1,1755,6469,32,1,0
3237 -,0,28,6471,24,1,0
3238 -,1,1755,6473,32,1,0
3239 -,0,28,6475,24,1,0
3240 -,1,1755,6477,16,1,0
3241 -,0,28,6479,24,1,0
3242 -,1,1755,6481,16,1,0
3243 -,0,28,6483,24,1,0
3244 -,1,1755,6485,32,1,0
3245 -,0,28,6487,24,1,0
3246 -,1,1755,6489,24,1,0
3247 -,0,28,6491,24,1,0
3248 -,1,1755,6493,40,1,0
3249 -,0,28,6495,24,1,0
3250 -,1,1755,6497,24,1,0
3251 -,0,28,6499,24,1,0
3252 -,1,1755,6501,64,1,0
3253 -,0,28,6503,24,1,0
3254 -,1,1755,6505,24,1,0
3255 -,0,28,6507,24,1,0
3256 -,1,1755,6509,48,1,0
3257 -,0,28,6511,24,1,0
3258 -,1,1755,6513,104,1,0
3259 -,0,28,6515,24,1,0
3260 -,1,1755,6517,24,1,0
3261 -,0,28,6519,24,1,0
3262 -,1,1755,6521,24,1,0
3263 -,0,28,6523,24,1,0
3264 -,1,1755,6525,56,1,0
3265 -,0,28,6527,24,1,0
3266 -,1,1755,6529,56,1,0
3267 -,0,28,6531,24,1,0
3268 -,1,1755,6533,56,1,0
3269 -,0,28,6535,24,1,0
3270 -,1,1755,6537,24,1,0
3271 -,0,28,6539,24,1,0
3272 -,1,1755,6541,40,1,0
3273 -,0,28,6543,24,1,0
3274 -,1,1,6545,56,1,0
3275 -,0,28,6547,24,1,0
3276 -,2,1757,6549,48,1,0
3277 -,1,1755,6551,56,1,0
3278 -,0,28,6553,24,1,0
3279 -,1,1755,6555,24,1,0
3280 -,0,28,6557,24,1,0
3281 -,1,1755,6559,40,1,0
3282 -,0,28,6561,24,1,0
3283 -,1,1,6563,56,1,0
3284 -,0,28,6565,24,1,0
3285 -,2,1758,6567,48,1,0
3286 -,1,1755,6569,80,1,0
3287 -,0,28,6571,24,1,0
3288 -,1,1755,6573,112,1,0
3289 -,0,28,6575,24,1,0
3290 -,2,1759,6577,48,1,0
3291 -,1,1755,6579,24,1,0
3292 -,0,28,6581,24,1,0
3293 -,1,1755,6583,40,1,0
3294 -,0,28,6585,24,1,0
3295 -,1,1755,6587,56,1,0
3296 -,0,28,6589,24,1,0
3297 -,1,1755,6591,24,1,0
3298 -,0,28,6593,24,1,0
3299 -,1,1755,6595,32,1,0
3300 -,0,28,6597,24,1,0
3301 -,1,1755,6599,104,1,0
3302 -,0,28,6601,24,1,0
3303 -,2,1760,6603,48,1,0
3304 -,1,1755,6605,56,1,0
3305 -,0,28,6607,24,1,0
3306 -,1,1755,6609,24,1,0
3307 -,0,28,6611,24,1,0
3308 -,1,1755,6613,24,1,0
3309 -,0,28,6615,24,1,0
3310 -,1,1755,6617,24,1,0
3311 -,0,28,6619,24,1,0
3312 -,1,1755,6621,56,1,0
3313 -,0,28,6623,24,1,0
3314 -,2,1761,6625,48,1,0
3315 -,1,1755,6627,56,1,0
3316 -,0,28,6629,24,1,0
3317 -,1,1755,6631,24,1,0
3318 -,0,28,6633,24,1,0
3319 -,1,1755,6635,24,1,0
3320 -,0,28,6637,24,1,0
3321 -,1,1755,6639,24,1,0
3322 -,0,28,6641,24,1,0
3323 -,1,1,6643,56,1,0
3324 -,0,28,6645,24,1,0
3325 -,2,1762,6647,56,1,0
3326 -,1,1,6649,32,1,0
3327 -,0,28,6651,24,1,0
3328 -,1,1755,6653,32,1,0
3329 -,0,28,6655,24,1,0
3330 -,1,1755,6657,24,1,0
3331 -,0,28,6659,24,1,0
3332 -,1,1755,6661,24,1,0
3333 -,0,28,6663,24,1,0
3334 -,1,1755,6665,32,1,0
3335 -,0,28,6667,24,1,0
3336 -,1,1,6669,56,1,0
3337 -,0,28,6671,24,1,0
3338 -,2,1763,6673,48,1,0
3339 -,1,1755,6675,32,1,0
3340 -,0,28,6677,24,1,0
3341 -,1,1755,6679,24,1,0
3342 -,0,28,6681,24,1,0
3343 -,1,1755,6683,24,1,0
3344 -,0,28,6685,24,1,0
3345 -,1,1755,6687,32,1,0
3346 -,0,28,6689,24,1,0
3347 -,1,1,6691,56,1,0
3348 -,0,28,6693,24,1,0
3349 -,2,1764,6695,56,1,0
3350 -,1,1,6697,32,1,0
3351 -,0,28,6699,24,1,0
3352 -,1,1755,6701,32,1,0
3353 -,0,28,6703,24,1,0
3354 -,1,1755,6705,96,1,0
3355 -,0,28,6707,24,1,0
3356 -,2,1765,6709,56,1,0
3357 -,7,54,6711,16,1,0
3358 -,7,54,6713,16,1,0
3359 -,1,1755,6715,80,1,0
3360 -,0,28,6717,24,1,0
3361 -,7,54,6719,16,1,0
3362 -,1,1755,6721,80,1,0
3363 -,0,28,6723,24,1,0
3364 -,7,54,6725,16,1,0
3365 -,1,1,6727,32,1,0
3366 -,0,28,6729,24,1,0
3367 -,1,1,6731,40,1,0
3368 -,0,28,6733,24,1,0
3369 -,1,1755,6735,24,1,0
3370 -,0,28,6737,24,1,0
3371 -,1,1755,6739,24,1,0
3372 -,0,28,6741,24,1,0
3373 -,1,1755,6743,24,1,0
3374 -,0,28,6745,24,1,0
3375 -,1,1755,6747,24,1,0
3376 -,0,28,6749,24,1,0
3377 -,1,1755,6751,24,1,0
3378 -,0,28,6753,24,1,0
3379 -,1,1,6755,56,1,0
3380 -,0,28,6757,24,1,0
3381 -,1,1,6759,56,1,0
3382 -,0,28,6761,24,1,0
3383 -,1,1,6763,56,1,0
3384 -,0,28,6765,24,1,0
3385 -,1,1,6767,56,1,0
3386 -,0,28,6769,24,1,0
3387 -,1,1,6771,24,1,0
3388 -,0,28,6773,24,1,0
3389 -,1,1,6775,24,1,0
3390 -,0,28,6777,24,1,0
3391 -,1,1,6779,40,1,0
3392 -,0,28,6781,24,1,0
3393 -,1,1,6783,32,1,0
3394 -,0,28,6785,24,1,0
3395 -,1,1755,6787,24,1,0
3396 -,0,28,6789,24,1,0
3397 -,1,1755,6791,24,1,0
3398 -,0,28,6793,24,1,0
3399 -,1,1755,6795,24,1,0
3400 -,0,28,6797,24,1,0
3401 -,1,1755,6799,24,1,0
3402 -,0,28,6801,24,1,0
3403 -,1,1755,6803,24,1,0
3404 -,0,28,6805,24,1,0
3405 -,1,1755,6807,24,1,0
3406 -,0,28,6809,24,1,0
3407 -,1,1755,6811,24,1,0
3408 -,0,28,6813,24,1,0
3409 -,1,1,6815,32,1,0
3410 -,0,28,6817,24,1,0
3411 -,2,1766,6819,56,1,0
3412 -,1,1,6821,24,1,0
3413 -,0,28,6823,24,1,0
3414 -,2,1767,6825,56,1,0
3415 -,1,1755,6827,24,1,0
3416 -,0,28,6829,24,1,0
3417 -,1,1755,6831,24,1,0
3418 -,0,28,6833,24,1,0
3419 -,1,1755,6835,24,1,0
3420 -,0,28,6837,24,1,0
3421 -,1,1755,6839,24,1,0
3422 -,0,28,6841,24,1,0
3423 -,1,1755,6843,24,1,0
3424 -,0,28,6845,24,1,0
3425 -,1,1755,6847,24,1,0
3426 -,0,28,6849,24,1,0
3427 -,1,1755,6851,24,1,0
3428 -,0,28,6853,24,1,0
3429 -,1,1755,6855,24,1,0
3430 -,0,28,6857,24,1,0
3431 -,1,1755,6859,24,1,0
3432 -,0,28,6861,24,1,0
3433 -,1,1755,6863,24,1,0
3434 -,0,28,6865,24,1,0
3435 -,1,1755,6867,24,1,0
3436 -,0,28,6869,24,1,0
3437 -,1,1755,6871,24,1,0
3438 -,0,28,6873,24,1,0
3439 -,1,1755,6875,24,1,0
3440 -,0,28,6877,24,1,0
3441 -,1,1755,6879,24,1,0
3442 -,0,28,6881,24,1,0
3443 -,1,1755,6883,24,1,0
3444 -,0,28,6885,24,1,0
3445 -,1,1755,6887,24,1,0
3446 -,0,28,6889,24,1,0
3447 -,1,1755,6891,24,1,0
3448 -,0,28,6893,24,1,0
3449 -,1,1755,6895,24,1,0
3450 -,0,28,6897,24,1,0
3451 -,1,1755,6899,24,1,0
3452 -,0,28,6901,24,1,0
3453 -,1,1755,6903,24,1,0
3454 -,0,28,6905,24,1,0
3455 -,1,1755,6907,24,1,0
3456 -,0,28,6909,24,1,0
3457 -,1,1755,6911,24,1,0
3458 -,0,28,6913,24,1,0
3459 -,1,1755,6915,24,1,0
3460 -,0,28,6917,24,1,0
3461 -,1,1755,6919,24,1,0
3462 -,0,28,6921,24,1,0
3463 -,1,1755,6923,24,1,0
3464 -,0,28,6925,24,1,0
3465 -,1,1755,6927,24,1,0
3466 -,0,28,6929,24,1,0
3467 -,1,1755,6931,24,1,0
3468 -,0,28,6933,24,1,0
3469 -,1,1755,6935,24,1,0
3470 -,0,28,6937,24,1,0
3471 -,1,1755,6939,24,1,0
3472 -,0,28,6941,24,1,0
3473 -,1,1755,6943,24,1,0
3474 -,0,28,6945,24,1,0
3475 -,1,1755,6947,24,1,0
3476 -,0,28,6949,24,1,0
3477 -,1,1755,6951,24,1,0
3478 -,0,28,6953,24,1,0
3479 -,1,1,6955,32,1,0
3480 -,0,28,6957,24,1,0
3481 -,1,1755,6959,24,1,0
3482 -,0,28,6961,24,1,0
3483 -,1,1755,6963,24,1,0
3484 -,0,28,6965,24,1,0
3485 -,1,1755,6967,24,1,0
3486 -,0,28,6969,24,1,0
3487 -,1,1755,6971,24,1,0
3488 -,0,28,6973,24,1,0
3489 -,1,1755,6975,24,1,0
3490 -,0,28,6977,24,1,0
3491 -,1,1755,6979,24,1,0
3492 -,0,28,6981,24,1,0
3493 -,1,1755,6983,24,1,0
3494 -,0,28,6985,24,1,0
3495 -,1,1755,6987,24,1,0
3496 -,0,28,6989,24,1,0
3497 -,1,1,6991,32,1,0
3498 -,0,28,6993,24,1,0
3499 -,1,1,6995,32,1,0
3500 -,0,28,6997,24,1,0
3501 -,1,1,6999,32,1,0
3502 -,0,28,7001,24,1,0
3503 -,1,1,7003,32,1,0
3504 -,0,28,7005,24,1,0
3505 -,1,1755,7007,32,1,0
3506 -,0,28,7009,24,1,0
3507 -,1,1,7011,32,1,0
3508 -,0,28,7013,24,1,0
3509 -,1,1,7015,32,1,0
3510 -,0,28,7017,24,1,0
3511 -,1,1,7019,32,1,0
3512 -,0,28,7021,24,1,0
3513 -,1,1755,7023,24,1,0
3514 -,0,28,7025,24,1,0
3515 -,1,1,7027,32,1,0
3516 -,0,28,7029,24,1,0
3517 -,1,1,7031,32,1,0
3518 -,0,28,7033,24,1,0
3519 -,1,1,7035,32,1,0
3520 -,0,28,7037,24,1,0
3521 -,1,1,7039,32,1,0
3522 -,0,28,7041,24,1,0
3523 -,1,1,7043,32,1,0
3524 -,0,28,7045,24,1,0
3525 -,1,1,7047,32,1,0
3526 -,0,28,7049,24,1,0
3527 -,1,1,7051,32,1,0
3528 -,0,28,7053,24,1,0
3529 -,1,1,7055,32,1,0
3530 -,0,28,7057,24,1,0
3531 -,1,1,7059,32,1,0
3532 -,0,28,7061,24,1,0
3533 -,1,1755,7063,24,1,0
3534 -,0,28,7065,24,1,0
3535 -,1,1755,7067,32,1,0
3536 -,0,28,7069,24,1,0
3537 -,2,1768,7071,56,1,0
3538 -,1,1755,7073,24,1,0
3539 -,0,28,7075,24,1,0
3540 -,1,1755,7077,24,1,0
3541 -,0,28,7079,24,1,0
3542 -,1,1755,7081,24,1,0
3543 -,0,28,7083,24,1,0
3544 -,1,1755,7085,24,1,0
3545 -,0,28,7087,24,1,0
3546 -,1,1755,7089,24,1,0
3547 -,0,28,7091,24,1,0
3548 -,1,1755,7093,24,1,0
3549 -,0,28,7095,24,1,0
3550 -,1,1755,7097,24,1,0
3551 -,0,28,7099,24,1,0
3552 -,1,1755,7101,24,1,0
3553 -,0,28,7103,24,1,0
3554 -,1,1755,7105,24,1,0
3555 -,0,28,7107,24,1,0
3556 -,1,1755,7109,24,1,0
3557 -,0,28,7111,24,1,0
3558 -,1,1755,7113,24,1,0
3559 -,0,28,7115,24,1,0
3560 -,1,1755,7117,24,1,0
3561 -,0,28,7119,24,1,0
3562 -,1,1755,7121,24,1,0
3563 -,0,28,7123,24,1,0
3564 -,1,1755,7125,24,1,0
3565 -,0,28,7127,24,1,0
3566 -,1,1755,7129,24,1,0
3567 -,0,28,7131,24,1,0
3568 -,1,1755,7133,24,1,0
3569 -,0,28,7135,24,1,0
3570 -,1,1755,7137,24,1,0
3571 -,0,28,7139,24,1,0
3572 -,1,1755,7141,24,1,0
3573 -,0,28,7143,24,1,0
3574 -,1,1755,7145,24,1,0
3575 -,0,28,7147,24,1,0
3576 -,1,1755,7149,24,1,0
3577 -,0,28,7151,24,1,0
3578 -,1,1755,7153,24,1,0
3579 -,0,28,7155,24,1,0
3580 -,1,1755,7157,24,1,0
3581 -,0,28,7159,24,1,0
3582 -,1,1755,7161,24,1,0
3583 -,0,28,7163,24,1,0
3584 -,1,1755,7165,24,1,0
3585 -,0,28,7167,24,1,0
3586 -,1,1755,7169,24,1,0
3587 -,0,28,7171,24,1,0
3588 -,1,1755,7173,24,1,0
3589 -,0,28,7175,24,1,0
3590 -,1,1755,7177,24,1,0
3591 -,0,28,7179,24,1,0
3592 -,1,1755,7181,24,1,0
3593 -,0,28,7183,24,1,0
3594 -,1,1755,7185,24,1,0
3595 -,0,28,7187,24,1,0
3596 -,1,1755,7189,24,1,0
3597 -,0,28,7191,24,1,0
3598 -,1,1755,7193,24,1,0
3599 -,0,28,7195,24,1,0
3600 -,1,1755,7197,24,1,0
3601 -,0,28,7199,24,1,0
3602 -,1,1755,7201,24,1,0
3603 -,0,28,7203,24,1,0
3604 -,1,1755,7205,24,1,0
3605 -,0,28,7207,24,1,0
3606 -,1,1755,7209,24,1,0
3607 -,0,28,7211,24,1,0
3608 -,1,1755,7213,24,1,0
3609 -,0,28,7215,24,1,0
3610 -,1,1755,7217,24,1,0
3611 -,0,28,7219,24,1,0
3612 -,1,1755,7221,40,1,0
3613 -,0,28,7223,24,1,0
3614 -,1,1755,7225,24,1,0
3615 -,0,28,7227,24,1,0
3616 -,1,1755,7229,32,1,0
3617 -,0,28,7231,24,1,0
3618 -,1,1755,7233,24,1,0
3619 -,0,28,7235,24,1,0
3620 -,1,1755,7237,24,1,0
3621 -,0,28,7239,24,1,0
3622 -,1,1755,7241,40,1,0
3623 -,0,28,7243,24,1,0
3624 -,1,1755,7245,24,1,0
3625 -,0,28,7247,24,1,0
3626 -,1,1,7249,40,1,0
3627 -,0,28,7251,24,1,0
3628 -,2,1769,7253,56,1,0
3629 -,1,1,7255,40,1,0
3630 -,0,28,7257,24,1,0
3631 -,2,1770,7259,56,1,0
3632 -,1,1,7261,40,1,0
3633 -,0,28,7263,24,1,0
3634 -,2,1771,7265,56,1,0
3635 -,1,1755,7267,24,1,0
3636 -,0,28,7269,24,1,0
3637 -,1,1755,7271,24,1,0
3638 -,0,28,7273,24,1,0
3639 -,1,1755,7275,24,1,0
3640 -,0,28,7277,24,1,0
3641 -,1,1755,7279,24,1,0
3642 -,0,28,7281,24,1,0
3643 -,1,1755,7283,24,1,0
3644 -,0,28,7285,24,1,0
3645 -,1,1755,7287,24,1,0
3646 -,0,28,7289,24,1,0
3647 -,1,1755,7291,24,1,0
3648 -,0,28,7293,24,1,0
3649 -,1,1755,7295,24,1,0
3650 -,0,28,7297,24,1,0
3651 -,1,1755,7299,24,1,0
3652 -,0,28,7301,24,1,0
3653 -,1,1755,7303,24,1,0
3654 -,0,28,7305,24,1,0
3655 -,1,1755,7307,24,1,0
3656 -,0,28,7309,24,1,0
3657 -,1,1755,7311,24,1,0
3658 -,0,28,7313,24,1,0
3659 -,1,1755,7315,72,1,0
3660 -,0,28,7317,24,1,0
3661 -,1,1755,7319,72,1,0
3662 -,0,28,7321,24,1,0
3663 -,1,1755,7323,24,1,0
3664 -,0,28,7325,24,1,0
3665 -,1,1755,7327,104,1,0
3666 -,0,28,7329,24,1,0
3667 -,1,1755,7331,24,1,0
3668 -,0,28,7333,24,1,0
3669 -,1,1755,7335,128,1,0
3670 -,0,28,7337,24,1,0
3671 -,1,1755,7339,24,1,0
3672 -,0,28,7341,24,1,0
3673 -,1,1755,7343,136,1,0
3674 -,0,28,7345,24,1,0
3675 -,1,1755,7347,24,1,0
3676 -,0,28,7349,24,1,0
3677 -,1,1755,7351,128,1,0
3678 -,0,28,7353,24,1,0
3679 -,1,1755,7355,24,1,0
3680 -,0,28,7357,24,1,0
3681 -,1,1755,7359,32,1,0
3682 -,0,28,7361,24,1,0
3683 -,1,1755,7363,56,1,0
3684 -,0,28,7365,24,1,0
3685 -,1,1755,7367,56,1,0
3686 -,0,28,7369,24,1,0
3687 -,1,1755,7371,24,1,0
3688 -,0,28,7373,24,1,0
3689 -,1,1755,7375,24,1,0
3690 -,0,28,7377,24,1,0
3691 -,1,1755,7379,72,1,0
3692 -,0,28,7381,24,1,0
3693 -,1,1755,7383,32,1,0
3694 -,0,28,7385,24,1,0
3695 -,1,1755,7387,120,1,0
3696 -,0,28,7389,24,1,0
3697 -,1,1755,7391,64,1,0
3698 -,0,28,7393,24,1,0
3699 -,2,1772,7395,48,1,0
3700 -,1,1,7397,48,1,0
3701 -,0,28,7399,24,1,0
3702 -,2,1773,7401,48,1,0
3703 -,1,1755,7403,24,1,0
3704 -,0,28,7405,24,1,0
3705 -,2,1774,7407,48,1,0
3706 -,1,1755,7409,24,1,0
3707 -,0,28,7411,24,1,0
3708 -,2,1775,7413,48,1,0
3709 -,1,1755,7415,24,1,0
3710 -,0,28,7417,24,1,0
3711 -,1,1755,7419,32,1,0
3712 -,0,28,7421,24,1,0
3713 -,2,1776,7423,48,1,0
3714 -,1,1,7425,24,1,0
3715 -,0,28,7427,24,1,0
3716 -,2,1777,7429,48,1,0
3717 -,1,1,7431,32,1,0
3718 -,0,28,7433,24,1,0
3719 -,2,1778,7435,48,1,0
3720 -,1,1,7437,32,1,0
3721 -,0,28,7439,24,1,0
3722 -,2,1779,7441,48,1,0
3723 -,1,1,7443,32,1,0
3724 -,0,28,7445,24,1,0
3725 -,2,1780,7447,48,1,0
3726 -,1,1755,7449,48,1,0
3727 -,0,28,7451,24,1,0
3728 -,2,1781,7453,56,1,0
3729 -,1,1755,7455,32,1,0
3730 -,0,28,7457,24,1,0
3731 -,7,54,7459,16,1,0
3732 -,1,1,7461,32,1,0
3733 -,0,28,7463,24,1,0
3734 -,1,1,7465,32,1,0
3735 -,0,28,7467,24,1,0
3736 -,1,1,7469,32,1,0
3737 -,0,28,7471,24,1,0
3738 -,1,1,7473,32,1,0
3739 -,0,28,7475,24,1,0
3740 -,1,1,7477,32,1,0
3741 -,0,28,7479,24,1,0
3742 -,1,1,7481,32,1,0
3743 -,0,28,7483,24,1,0
3744 -,1,1,7485,32,1,0
3745 -,0,28,7487,24,1,0
3746 -,1,1,7489,32,1,0
3747 -,0,28,7491,24,1,0
3748 -,1,1,7493,32,1,0
3749 -,0,28,7495,24,1,0
3750 -,1,1,7497,24,1,0
3751 -,0,28,7499,24,1,0
3752 -,1,1,7501,32,1,0
3753 -,0,28,7503,24,1,0
3754 -,1,1,7505,32,1,0
3755 -,0,28,7507,24,1,0
3756 -,1,1,7509,32,1,0
3757 -,0,28,7511,24,1,0
3758 -,1,1,7513,32,1,0
3759 -,0,28,7515,24,1,0
3760 -,1,1755,7517,32,1,0
3761 -,0,28,7519,24,1,0
3762 -,1,1,7521,32,1,0
3763 -,0,28,7523,24,1,0
3764 -,1,1755,7525,24,1,0
3765 -,0,28,7527,24,1,0
3766 -,1,1,7529,32,1,0
3767 -,0,28,7531,24,1,0
3768 -,1,1755,7533,32,1,0
3769 -,0,28,7535,24,1,0
3770 -,1,1,7537,32,1,0
3771 -,0,28,7539,24,1,0
3772 -,1,1,7541,32,1,0
3773 -,0,28,7543,24,1,0
3774 -,1,1,7545,32,1,0
3775 -,0,28,7547,24,1,0
3776 -,1,1755,7549,32,1,0
3777 -,0,28,7551,24,1,0
3778 -,1,1755,7553,32,1,0
3779 -,0,28,7555,24,1,0
3780 -,1,1755,7557,32,1,0
3781 -,0,28,7559,24,1,0
3782 -,1,1755,7561,32,1,0
3783 -,0,28,7563,24,1,0
3784 -,1,1,7565,32,1,0
3785 -,0,28,7567,24,1,0
3786 -,1,1,7569,32,1,0
3787 -,0,28,7571,24,1,0
3788 -,1,1,7573,32,1,0
3789 -,0,28,7575,24,1,0
3790 -,1,1,7577,32,1,0
3791 -,0,28,7579,24,1,0
3792 -,1,1,7581,32,1,0
3793 -,0,28,7583,24,1,0
3794 -,1,1,7585,32,1,0
3795 -,0,28,7587,24,1,0
3796 -,1,1,7589,32,1,0
3797 -,0,28,7591,24,1,0
3798 -,1,1755,7593,32,1,0
3799 -,0,28,7595,24,1,0
3800 -,1,1755,7597,24,1,0
3801 -,0,28,7599,24,1,0
3802 -,1,1755,7601,48,1,0
3803 -,0,28,7603,24,1,0
3804 -,1,1,7605,24,1,0
3805 -,0,28,7607,24,1,0
3806 -,1,1755,7609,24,1,0
3807 -,0,28,7611,24,1,0
3808 -,1,1755,7613,24,1,0
3809 -,0,28,7615,24,1,0
3810 -,1,1755,7617,24,1,0
3811 -,0,28,7619,24,1,0
3812 -,1,1755,7621,32,1,0
3813 -,0,28,7623,24,1,0
3814 -,1,1755,7625,24,1,0
3815 -,0,28,7627,24,1,0
3816 -,1,1755,7629,24,1,0
3817 -,0,28,7631,24,1,0
3818 -,1,1755,7633,24,1,0
3819 -,0,28,7635,24,1,0
3820 -,1,1755,7637,24,1,0
3821 -,0,28,7639,24,1,0
3822 -,1,1755,7641,24,1,0
3823 -,0,28,7643,24,1,0
3824 -,1,1755,7645,24,1,0
3825 -,0,28,7647,24,1,0
3826 -,1,1755,7649,24,1,0
3827 -,0,28,7651,24,1,0
3828 -,1,1,7653,24,1,0
3829 -,0,28,7655,24,1,0
3830 -,2,1782,7657,48,1,0
3831 -,1,1755,7659,48,1,0
3832 -,0,28,7661,24,1,0
3833 -,1,1755,7663,40,1,0
3834 -,0,28,7665,24,1,0
3835 -,1,1755,7667,40,1,0
3836 -,0,28,7669,24,1,0
3837 -,1,1755,7671,40,1,0
3838 -,0,28,7673,24,1,0
3839 -,1,1755,7675,40,1,0
3840 -,0,28,7677,24,1,0
3841 -,1,1755,7679,40,1,0
3842 -,0,28,7681,24,1,0
3843 -,1,1755,7683,32,1,0
3844 -,0,28,7685,24,1,0
3845 -,1,1755,7687,32,1,0
3846 -,0,28,7689,24,1,0
3847 -,1,1755,7691,32,1,0
3848 -,0,28,7693,24,1,0
3849 -,1,1755,7695,32,1,0
3850 -,0,28,7697,24,1,0
3851 -,1,1755,7699,32,1,0
3852 -,0,28,7701,24,1,0
3853 -,1,1755,7703,40,1,0
3854 -,0,28,7705,24,1,0
3855 -,1,1755,7707,48,1,0
3856 -,0,28,7709,24,1,0
3857 -,1,1755,7711,48,1,0
3858 -,0,28,7713,24,1,0
3859 -,1,1755,7715,48,1,0
3860 -,0,28,7717,24,1,0
3861 -,1,1755,7719,48,1,0
3862 -,0,28,7721,24,1,0
3863 -,1,1755,7723,40,1,0
3864 -,0,28,7725,24,1,0
3865 -,1,1755,7727,24,1,0
3866 -,0,28,7729,24,1,0
3867 -,1,1755,7731,24,1,0
3868 -,0,28,7733,24,1,0
3869 -,1,1755,7735,24,1,0
3870 -,0,28,7737,24,1,0
3871 -,1,1755,7739,24,1,0
3872 -,0,28,7741,24,1,0
3873 -,1,1755,7743,24,1,0
3874 -,0,28,7745,24,1,0
3875 -,1,1755,7747,32,1,0
3876 -,0,28,7749,24,1,0
3877 -,1,1755,7751,32,1,0
3878 -,0,28,7753,24,1,0
3879 -,1,1755,7755,112,1,0
3880 -,0,28,7757,24,1,0
3881 -,1,1755,7759,40,1,0
3882 -,0,28,7761,24,1,0
3883 -,1,1755,7763,32,1,0
3884 -,0,28,7765,24,1,0
3885 -,1,1755,7767,24,1,0
3886 -,0,28,7769,24,1,0
3887 -,1,1755,7771,24,1,0
3888 -,0,28,7773,24,1,0
3889 -,1,1755,7775,24,1,0
3890 -,0,28,7777,24,1,0
3891 -,1,1755,7779,24,1,0
3892 -,0,28,7781,24,1,0
3893 -,1,1,7783,56,1,0
3894 -,0,28,7785,24,1,0
3895 -,1,1755,7787,24,1,0
3896 -,0,28,7789,24,1,0
3897 -,1,1755,7791,104,1,0
3898 -,0,28,7793,24,1,0
3899 -,1,1755,7795,24,1,0
3900 -,0,28,7797,24,1,0
3901 -,1,1755,7799,40,1,0
3902 -,0,28,7801,24,1,0
3903 -,1,1755,7803,24,1,0
3904 -,0,28,7805,24,1,0
3905 -,1,1755,7807,24,1,0
3906 -,0,28,7809,24,1,0
3907 -,1,1755,7811,24,1,0
3908 -,0,28,7813,24,1,0
3909 -,1,1,7815,32,1,0
3910 -,0,28,7817,24,1,0
3911 -,1,1755,7819,24,1,0
3912 -,0,28,7821,24,1,0
3913 -,1,1755,7823,24,1,0
3914 -,0,28,7825,24,1,0
3915 -,1,1755,7827,24,1,0
3916 -,0,28,7829,24,1,0
3917 -,1,1755,7831,40,1,0
3918 -,0,28,7833,24,1,0
3919 -,1,1755,7835,24,1,0
3920 -,0,28,7837,24,1,0
3921 -,1,1755,7839,24,1,0
3922 -,0,28,7841,24,1,0
3923 -,1,1755,7843,24,1,0
3924 -,0,28,7845,24,1,0
3925 -,1,1755,7847,48,1,0
3926 -,0,28,7849,24,1,0
3927 -,2,1783,7851,32,1,0
3928 -,2,1784,7853,32,1,0
3929 -,1,1755,7855,24,1,0
3930 -,0,28,7857,24,1,0
3931 -,1,1755,7859,40,1,0
3932 -,0,28,7861,24,1,0
3933 -,1,1,7863,32,1,0
3934 -,0,28,7865,24,1,0
3935 -,1,1755,7867,24,1,0
3936 -,0,28,7869,24,1,0
3937 -,1,1755,7871,24,1,0
3938 -,0,28,7873,24,1,0
3939 -,1,1755,7875,24,1,0
3940 -,0,28,7877,24,1,0
3941 -,1,1,7879,32,1,0
3942 -,0,28,7881,24,1,0
3943 -,2,1785,7883,56,1,0
3944 -,1,1755,7885,24,1,0
3945 -,0,28,7887,24,1,0
3946 -,1,1,7889,56,1,0
3947 -,0,28,7891,24,1,0
3948 -,1,1755,7893,24,1,0
3949 -,0,28,7895,24,1,0
3950 -,1,1755,7897,32,1,0
3951 -,0,28,7899,24,1,0
3952 -,1,1755,7901,24,1,0
3953 -,0,28,7903,24,1,0
3954 -,1,1755,7905,40,1,0
3955 -,0,28,7907,24,1,0
3956 -,1,1755,7909,40,1,0
3957 -,0,28,7911,24,1,0
3958 -,1,1755,7913,48,1,0
3959 -,0,28,7915,24,1,0
3960 -,1,1755,7917,48,1,0
3961 -,0,28,7919,24,1,0
3962 -,1,1,7921,24,1,0
3963 -,0,28,7923,24,1,0
3964 -,1,1755,7925,24,1,0
3965 -,0,28,7927,24,1,0
3966 -,1,1,7929,32,1,0
3967 -,0,28,7931,24,1,0
3968 -,1,1755,7933,88,1,0
3969 -,0,28,7935,24,1,0
3970 -,1,1755,7937,24,1,0
3971 -,0,28,7939,24,1,0
3972 -,1,1755,7941,96,1,0
3973 -,0,28,7943,24,1,0
3974 -,1,1755,7945,24,1,0
3975 -,0,28,7947,24,1,0
3976 -,1,1755,7949,64,1,0
3977 -,0,28,7951,24,1,0
3978 -,2,1786,7953,48,1,0
3979 -,1,1755,7955,40,1,0
3980 -,0,28,7957,24,1,0
3981 -,1,1755,7959,24,1,0
3982 -,0,28,7961,24,1,0
3983 -,1,1755,7963,24,1,0
3984 -,0,28,7965,24,1,0
3985 -,1,1755,7967,24,1,0
3986 -,0,28,7969,24,1,0
3987 -,1,1755,7971,56,1,0
3988 -,0,28,7973,24,1,0
3989 -,1,1755,7975,24,1,0
3990 -,0,28,7977,24,1,0
3991 -,2,1787,7979,40,1,0
3992 -,1,1755,7981,40,1,0
3993 -,0,28,7983,24,1,0
3994 -,1,1,7985,48,1,0
3995 -,0,28,7987,24,1,0
3996 -,2,1788,7989,40,1,0
3997 -,1,1,7991,64,1,0
3998 -,0,28,7993,24,1,0
3999 -,2,1789,7995,56,1,0
4000 -,1,1,7997,48,1,0
4001 -,0,28,7999,24,1,0
4002 -,1,1,8001,48,1,0
4003 -,0,28,8003,24,1,0
4004 -,1,1,8005,24,1,0
4005 -,0,28,8007,24,1,0
4006 -,1,1,8009,24,1,0
4007 -,0,28,8011,24,1,0
4008 -,1,1755,8013,104,1,0
4009 -,0,28,8015,24,1,0
4010 -,2,1790,8017,40,1,0
4011 -,1,1755,8019,56,1,0
4012 -,0,28,8021,24,1,0
4013 -,1,1,8023,64,1,0
4014 -,0,28,8025,24,1,0
4015 -,2,1791,8027,40,1,0
4016 -,1,1,8029,32,1,0
4017 -,0,28,8031,24,1,0
4018 -,1,1,8033,24,1,0
4019 -,0,28,8035,24,1,0
4020 -,1,1,8037,24,1,0
4021 -,0,28,8039,24,1,0
4022 -,1,1755,8041,40,1,0
4023 -,0,28,8043,24,1,0
4024 -,1,1,8045,56,1,0
4025 -,0,28,8047,24,1,0
4026 -,1,1,8049,32,1,0
4027 -,0,28,8051,24,1,0
4028 -,1,1755,8053,56,1,0
4029 -,0,28,8055,24,1,0
4030 -,1,1755,8057,56,1,0
4031 -,0,28,8059,24,1,0
4032 -,1,1755,8061,64,1,0
4033 -,0,28,8063,24,1,0
4034 -,1,1755,8065,24,1,0
4035 -,0,28,8067,24,1,0
4036 -,1,1755,8069,24,1,0
4037 -,0,28,8071,24,1,0
4038 -,1,1755,8073,24,1,0
4039 -,0,28,8075,24,1,0
4040 -,1,1755,8077,24,1,0
4041 -,0,28,8079,24,1,0
4042 -,1,1755,8081,24,1,0
4043 -,0,28,8083,24,1,0
4044 -,1,1755,8085,24,1,0
4045 -,0,28,8087,24,1,0
4046 -,1,1755,8089,24,1,0
4047 -,0,28,8091,24,1,0
4048 -,1,1,8093,24,1,0
4049 -,0,28,8095,24,1,0
4050 -,2,1792,8097,40,1,0
4051 -,1,1755,8099,24,1,0
4052 -,0,28,8101,24,1,0
4053 -,1,1755,8103,24,1,0
4054 -,0,28,8105,24,1,0
4055 -,1,1755,8107,24,1,0
4056 -,0,28,8109,24,1,0
4057 -,1,1755,8111,24,1,0
4058 -,0,28,8113,24,1,0
4059 -,1,1755,8115,24,1,0
4060 -,0,28,8117,24,1,0
4061 -,1,1755,8119,24,1,0
4062 -,0,28,8121,24,1,0
4063 -,1,1755,8123,24,1,0
4064 -,0,28,8125,24,1,0
4065 -,1,1755,8127,24,1,0
4066 -,0,28,8129,24,1,0
4067 -,1,1755,8131,24,1,0
4068 -,0,28,8133,24,1,0
4069 -,1,1755,8135,24,1,0
4070 -,0,28,8137,24,1,0
4071 -,1,1755,8139,24,1,0
4072 -,0,28,8141,24,1,0
4073 -,1,1755,8143,24,1,0
4074 -,0,28,8145,24,1,0
4075 -,1,1755,8147,24,1,0
4076 -,0,28,8149,24,1,0
4077 -,1,1755,8151,24,1,0
4078 -,0,28,8153,24,1,0
4079 -,1,1755,8155,72,1,0
4080 -,0,28,8157,24,1,0
4081 -,1,1,8159,48,1,0
4082 -,0,28,8161,24,1,0
4083 -,1,1755,8163,24,1,0
4084 -,0,28,8165,24,1,0
4085 -,1,1755,8167,24,1,0
4086 -,0,28,8169,24,1,0
4087 -,1,1755,8171,24,1,0
4088 -,0,28,8173,24,1,0
4089 -,1,1755,8175,24,1,0
4090 -,0,28,8177,24,1,0
4091 -,1,1755,8179,24,1,0
4092 -,0,28,8181,24,1,0
4093 -,1,1,8183,48,1,0
4094 -,0,28,8185,24,1,0
4095 -,2,1793,8187,48,1,0
4096 -,1,1755,8189,96,1,0
4097 -,0,28,8191,24,1,0
4098 -,2,1794,8193,48,1,0
4099 -,1,1,8195,32,1,0
4100 -,0,28,8197,24,1,0
4101 -,2,1795,8199,48,1,0
4102 -,1,1,8201,80,1,0
4103 -,0,28,8203,24,1,0
4104 -,2,1796,8205,48,1,0
4105 -,1,1,8207,32,1,0
4106 -,0,28,8209,24,1,0
4107 -,2,1797,8211,48,1,0
4108 -,1,1,8213,32,1,0
4109 -,0,28,8215,24,1,0
4110 -,2,1798,8217,56,1,0
4111 -,1,1,8219,120,1,0
4112 -,0,28,8221,24,1,0
4113 -,2,1799,8223,48,1,0
4114 -,1,1,8225,88,1,0
4115 -,0,28,8227,24,1,0
4116 -,2,1800,8229,32,1,0
4117 -,2,1801,8231,56,1,0
4118 -,1,1,8233,32,1,0
4119 -,0,28,8235,24,1,0
4120 -,2,1802,8237,56,1,0
4121 -,1,1,8239,56,1,0
4122 -,0,28,8241,24,1,0
4123 -,2,1803,8243,56,1,0
4124 -,1,1755,8245,32,1,0
4125 -,0,28,8247,24,1,0
4126 -,2,1804,8249,48,1,0
4127 -,2,221,8251,32,1,0
4128 -,1,1,8253,32,1,0
4129 -,0,28,8255,24,1,0
4130 -,2,1805,8257,48,1,0
4131 -,1,1755,8259,80,1,0
4132 -,0,28,8261,24,1,0
4133 -,2,1806,8263,48,1,0
4134 -,1,1755,8265,56,1,0
4135 -,0,28,8267,24,1,0
4136 -,1,1755,8269,24,1,0
4137 -,0,28,8271,24,1,0
4138 -,1,1,8273,32,1,0
4139 -,0,28,8275,24,1,0
4140 -,2,1807,8277,48,1,0
4141 -,1,1755,8279,24,1,0
4142 -,0,28,8281,24,1,0
4143 -,1,1,8283,32,1,0
4144 -,0,28,8285,24,1,0
4145 -,2,1808,8287,56,1,0
4146 -,1,1,8289,32,1,0
4147 -,0,28,8291,24,1,0
4148 -,2,1809,8293,48,1,0
4149 -,1,1755,8295,32,1,0
4150 -,0,28,8297,24,1,0
4151 -,1,1755,8299,48,1,0
4152 -,0,28,8301,24,1,0
4153 -,1,1755,8303,160,1,0
4154 -,0,28,8305,24,1,0
4155 -,1,1755,8307,88,1,0
4156 -,0,28,8309,24,1,0
4157 -,1,1755,8311,128,1,0
4158 -,0,28,8313,24,1,0
4159 -,2,1810,8315,32,1,0
4160 -,1,1755,8317,64,1,0
4161 -,0,28,8319,24,1,0
4162 -,1,1755,8321,136,1,0
4163 -,0,28,8323,24,1,0
4164 -,1,1,8325,136,1,0
4165 -,0,28,8327,24,1,0
4166 -,2,1811,8329,64,1,0
4167 -,1,1755,8331,96,1,0
4168 -,0,28,8333,24,1,0
4169 -,1,1755,8335,40,1,0
4170 -,0,28,8337,24,1,0
4171 -,2,1812,8339,48,1,0
4172 -,1,1755,8341,56,1,0
4173 -,0,28,8343,24,1,0
4174 -,2,1813,8345,48,1,0
4175 -,1,1,8347,48,1,0
4176 -,0,28,8349,24,1,0
4177 -,2,1814,8351,48,1,0
4178 -,1,1755,8353,24,1,0
4179 -,0,28,8355,24,1,0
4180 -,1,1,8357,32,1,0
4181 -,0,28,8359,24,1,0
4182 -,2,1815,8361,48,1,0
4183 -,1,1755,8363,24,1,0
4184 -,0,28,8365,24,1,0
4185 -,2,1816,8367,48,1,0
4186 -,1,1755,8369,32,1,0
4187 -,0,28,8371,24,1,0
4188 -,2,1817,8373,48,1,0
4189 -,1,1,8375,32,1,0
4190 -,0,28,8377,24,1,0
4191 -,2,1818,8379,48,1,0
4192 -,1,1,8381,48,1,0
4193 -,0,28,8383,24,1,0
4194 -,2,1819,8385,56,1,0
4195 -,1,1755,8387,24,1,0
4196 -,0,28,8389,24,1,0
4197 -,1,1755,8391,24,1,0
4198 -,0,28,8393,24,1,0
4199 -,1,1,8395,48,1,0
4200 -,0,28,8397,24,1,0
4201 -,1,1,8399,48,1,0
4202 -,0,28,8401,24,1,0
4203 -,1,1,8403,56,1,0
4204 -,0,28,8405,24,1,0
4205 -,1,1,8407,56,1,0
4206 -,0,28,8409,24,1,0
4207 -,1,1,8411,56,1,0
4208 -,0,28,8413,24,1,0
4209 -,1,1,8415,56,1,0
4210 -,0,28,8417,24,1,0
4211 -,1,1,8419,56,1,0
4212 -,0,28,8421,24,1,0
4213 -,1,1,8423,56,1,0
4214 -,0,28,8425,24,1,0
4215 -,1,1,8427,56,1,0
4216 -,0,28,8429,24,1,0
4217 -,1,1755,8431,24,1,0
4218 -,0,28,8433,24,1,0
4219 -,1,1755,8435,24,1,0
4220 -,0,28,8437,24,1,0
4221 -,1,1755,8439,24,1,0
4222 -,0,28,8441,24,1,0
4223 -,1,1755,8443,32,1,0
4224 -,0,28,8445,24,1,0
4225 -,1,1755,8447,24,1,0
4226 -,0,28,8449,24,1,0
4227 -,1,1755,8451,64,1,0
4228 -,0,28,8453,24,1,0
4229 -,1,1,8455,56,1,0
4230 -,0,28,8457,24,1,0
4231 -,2,1820,8459,32,1,0
4232 -,2,1821,8461,32,1,0
4233 -,2,1822,8463,40,1,0
4234 -,2,1823,8465,32,1,0
4235 -,2,1824,8467,32,1,0
4236 -,2,1825,8469,48,1,0
4237 -,1,1,8471,32,1,0
4238 -,0,28,8473,24,1,0
4239 -,2,1826,8475,32,1,0
4240 -,2,1827,8477,32,1,0
4241 -,2,1828,8479,48,1,0
4242 -,1,1,8481,32,1,0
4243 -,0,28,8483,24,1,0
4244 -,2,1829,8485,32,1,0
4245 -,2,1830,8487,32,1,0
4246 -,2,1831,8489,48,1,0
4247 -,1,1,8491,32,1,0
4248 -,0,28,8493,24,1,0
4249 -,2,1832,8495,32,1,0
4250 -,2,1833,8497,32,1,0
4251 -,2,1834,8499,48,1,0
4252 -,1,1755,8501,48,1,0
4253 -,0,28,8503,24,1,0
4254 -,2,1835,8505,48,1,0
4255 -,1,1755,8507,40,1,0
4256 -,0,28,8509,24,1,0
4257 -,2,1836,8511,56,1,0
4258 -,1,1,8513,40,1,0
4259 -,0,28,8515,24,1,0
4260 -,2,1837,8517,56,1,0
4261 -,1,1,8519,32,1,0
4262 -,0,28,8521,24,1,0
4263 -,2,1838,8523,48,1,0
4264 -,1,1755,8525,24,1,0
4265 -,0,28,8527,24,1,0
4266 -,1,1,8529,56,1,0
4267 -,0,28,8531,24,1,0
4268 -,2,1839,8533,40,1,0
4269 -,2,1840,8535,32,1,0
4270 -,2,1841,8537,56,1,0
4271 -,1,1,8539,56,1,0
4272 -,0,28,8541,24,1,0
4273 -,2,1842,8543,40,1,0
4274 -,2,1843,8545,56,1,0
4275 -,1,1,8547,32,1,0
4276 -,0,28,8549,24,1,0
4277 -,2,1844,8551,32,1,0
4278 -,2,1845,8553,32,1,0
4279 -,2,1846,8555,48,1,0
4280 -,1,1,8557,56,1,0
4281 -,0,28,8559,24,1,0
4282 -,1,1755,8561,56,1,0
4283 -,0,28,8563,24,1,0
4284 -,1,1,8565,32,1,0
4285 -,0,28,8567,24,1,0
4286 -,2,1847,8569,32,1,0
4287 -,2,1848,8571,32,1,0
4288 -,2,1849,8573,48,1,0
4289 -,1,1755,8575,24,1,0
4290 -,0,28,8577,24,1,0
4291 -,1,1,8579,56,1,0
4292 -,0,28,8581,24,1,0
4293 -,2,1850,8583,40,1,0
4294 -,2,1851,8585,48,1,0
4295 -,1,1755,8587,48,1,0
4296 -,0,28,8589,24,1,0
4297 -,2,1852,8591,48,1,0
4298 -,1,1,8593,96,1,0
4299 -,0,28,8595,24,1,0
4300 -,2,1853,8597,56,1,0
4301 -,1,1755,8599,24,1,0
4302 -,0,28,8601,24,1,0
4303 -,1,1,8603,48,1,0
4304 -,0,28,8605,24,1,0
4305 -,2,1854,8607,32,1,0
4306 -,2,1855,8609,48,1,0
4307 -,1,1,8611,48,1,0
4308 -,0,28,8613,24,1,0
4309 -,2,1856,8615,56,1,0
4310 -,1,1,8617,40,1,0
4311 -,0,28,8619,24,1,0
4312 -,2,1857,8621,48,1,0
4313 -,1,1755,8623,56,1,0
4314 -,0,28,8625,24,1,0
4315 -,2,1858,8627,48,1,0
4316 -,1,1,8629,48,1,0
4317 -,0,28,8631,24,1,0
4318 -,2,1859,8633,48,1,0
4319 -,1,1755,8635,80,1,0
4320 -,0,28,8637,24,1,0
4321 -,2,1860,8639,48,1,0
4322 -,1,1,8641,32,1,0
4323 -,0,28,8643,24,1,0
4324 -,2,1861,8645,32,1,0
4325 -,2,1862,8647,32,1,0
4326 -,2,1863,8649,48,1,0
4327 -,1,1755,8651,88,1,0
4328 -,0,28,8653,24,1,0
4329 -,7,54,8655,16,1,0
4330 -,2,1864,8657,48,1,0
4331 -,1,1,8659,32,1,0
4332 -,0,28,8661,24,1,0
4333 -,2,1865,8663,32,1,0
4334 -,2,1866,8665,40,1,0
4335 -,2,1867,8667,48,1,0
4336 -,1,1,8669,32,1,0
4337 -,0,28,8671,24,1,0
4338 -,2,1868,8673,32,1,0
4339 -,2,1869,8675,32,1,0
4340 -,2,1870,8677,48,1,0
4341 -,1,1755,8679,80,1,0
4342 -,0,28,8681,24,1,0
4343 -,2,1871,8683,48,1,0
4344 -,1,1755,8685,80,1,0
4345 -,0,28,8687,24,1,0
4346 -,2,1872,8689,56,1,0
4347 -,1,1,8691,32,1,0
4348 -,0,28,8693,24,1,0
4349 -,2,1873,8695,32,1,0
4350 -,2,1874,8697,32,1,0
4351 -,2,1875,8699,48,1,0
4352 -,1,1755,8701,24,1,0
4353 -,0,28,8703,24,1,0
4354 -,1,1755,8705,24,1,0
4355 -,0,28,8707,24,1,0
4356 -,2,1876,8709,56,1,0
4357 -,1,1755,8711,80,1,0
4358 -,0,28,8713,24,1,0
4359 -,2,1877,8715,48,1,0
4360 -,1,1,8717,80,1,0
4361 -,0,28,8719,24,1,0
4362 -,2,1878,8721,56,1,0
4363 -,1,1,8723,80,1,0
4364 -,0,28,8725,24,1,0
4365 -,2,1879,8727,56,1,0
4366 -,1,1,8729,24,1,0
4367 -,0,28,8731,24,1,0
4368 -,2,1880,8733,48,1,0
4369 -,1,1755,8735,24,1,0
4370 -,0,28,8737,24,1,0
4371 -,1,1,8739,32,1,0
4372 -,0,28,8741,24,1,0
4373 -,2,1881,8743,64,1,0
4374 -,1,1,8745,56,1,0
4375 -,0,28,8747,24,1,0
4376 -,2,1882,8749,56,1,0
4377 -,1,1755,8751,24,1,0
4378 -,0,28,8753,24,1,0
4379 -,1,1755,8755,24,1,0
4380 -,0,28,8757,24,1,0
4381 -,1,1755,8759,24,1,0
4382 -,0,28,8761,24,1,0
4383 -,1,1,8763,24,1,0
4384 -,0,28,8765,24,1,0
4385 -,2,1883,8767,56,1,0
4386 -,1,1,8769,24,1,0
4387 -,0,28,8771,24,1,0
4388 -,2,1884,8773,64,1,0
4389 -,1,1,8775,32,1,0
4390 -,0,28,8777,24,1,0
4391 -,2,1885,8779,56,1,0
4392 -,1,1,8781,24,1,0
4393 -,0,28,8783,24,1,0
4394 -,2,1886,8785,48,1,0
4395 -,1,1755,8787,104,1,0
4396 -,0,28,8789,24,1,0
4397 -,1,1755,8791,72,1,0
4398 -,0,28,8793,24,1,0
4399 -,1,1755,8795,56,1,0
4400 -,0,28,8797,24,1,0
4401 -,1,1755,8799,136,1,0
4402 -,0,28,8801,24,1,0
4403 -,2,1887,8803,40,1,0
4404 -,2,1888,8805,40,1,0
4405 -,2,1889,8807,40,1,0
4406 -,1,1,8809,24,1,0
4407 -,0,28,8811,24,1,0
4408 -,2,1430,8813,40,1,0
4409 -,1,1755,8815,24,1,0
4410 -,0,28,8817,24,1,0
4411 -,1,1755,8819,32,1,0
4412 -,0,28,8821,24,1,0
4413 -,1,1755,8823,24,1,0
4414 -,0,28,8825,24,1,0
4415 -,1,1755,8827,32,1,0
4416 -,0,28,8829,24,1,0
4417 -,2,1890,8831,64,1,0
4418 -,1,1755,8833,32,1,0
4419 -,0,28,8835,24,1,0
4420 -,2,1891,8837,64,1,0
4421 -,1,1755,8839,32,1,0
4422 -,0,28,8841,24,1,0
4423 -,2,1892,8843,56,1,0
4424 -,1,1,8845,40,1,0
4425 -,0,28,8847,24,1,0
4426 -,2,1893,8849,56,1,0
4427 -,1,1,8851,40,1,0
4428 -,0,28,8853,24,1,0
4429 -,2,1894,8855,56,1,0
4430 -,1,1,8857,40,1,0
4431 -,0,28,8859,24,1,0
4432 -,2,1895,8861,56,1,0
4433 -,1,1755,8863,24,1,0
4434 -,0,28,8865,24,1,0
4435 -,1,1755,8867,24,1,0
4436 -,0,28,8869,24,1,0
4437 -,1,1,8871,120,1,0
4438 -,0,28,8873,24,1,0
4439 -,2,1896,8875,56,1,0
4440 -,1,1,8877,104,1,0
4441 -,0,28,8879,24,1,0
4442 -,2,1897,8881,56,1,0
4443 -,1,1,8883,104,1,0
4444 -,0,28,8885,24,1,0
4445 -,2,1898,8887,56,1,0
4446 -,1,1755,8889,24,1,0
4447 -,0,28,8891,24,1,0
4448 -,1,1755,8893,24,1,0
4449 -,0,28,8895,24,1,0
4450 -,1,1755,8897,24,1,0
4451 -,0,28,8899,24,1,0
4452 -,1,1755,8901,24,1,0
4453 -,0,28,8903,24,1,0
4454 -,1,1,8905,48,1,0
4455 -,0,28,8907,24,1,0
4456 -,2,1899,8909,56,1,0
4457 -,1,1,8911,64,1,0
4458 -,0,28,8913,24,1,0
4459 -,2,1900,8915,56,1,0
4460 -,1,1,8917,64,1,0
4461 -,0,28,8919,24,1,0
4462 -,2,1901,8921,56,1,0
4463 -,1,1755,8923,24,1,0
4464 -,0,28,8925,24,1,0
4465 -,1,1,8927,104,1,0
4466 -,0,28,8929,24,1,0
4467 -,2,1902,8931,56,1,0
4468 -,1,1,8933,104,1,0
4469 -,0,28,8935,24,1,0
4470 -,2,1903,8937,56,1,0
4471 -,1,1,8939,120,1,0
4472 -,0,28,8941,24,1,0
4473 -,2,1904,8943,56,1,0
4474 -,1,1,8945,128,1,0
4475 -,0,28,8947,24,1,0
4476 -,2,1905,8949,64,1,0
4477 -,1,1,8951,192,1,0
4478 -,0,28,8953,24,1,0
4479 -,2,1906,8955,56,1,0
4480 -,1,1,8957,88,1,0
4481 -,0,28,8959,24,1,0
4482 -,2,1907,8961,56,1,0
4483 -,1,1,8963,88,1,0
4484 -,0,28,8965,24,1,0
4485 -,2,1908,8967,40,1,0
4486 -,1,1,8969,104,1,0
4487 -,0,28,8971,24,1,0
4488 -,2,1909,8973,48,1,0
4489 -,1,1755,8975,24,1,0
4490 -,0,28,8977,24,1,0
4491 -,1,1755,8979,16,1,0
4492 -,0,28,8981,24,1,0
4493 -,1,1755,8983,16,1,0
4494 -,0,28,8985,24,1,0
4495 -,1,1755,8987,16,1,0
4496 -,0,28,8989,24,1,0
4497 -,1,1755,8991,24,1,0
4498 -,0,28,8993,24,1,0
4499 -,1,1755,8995,24,1,0
4500 -,0,28,8997,24,1,0
4501 -,1,1755,8999,16,1,0
4502 -,0,28,9001,24,1,0
4503 -,1,1755,9003,24,1,0
4504 -,0,28,9005,24,1,0
4505 -,1,1755,9007,24,1,0
4506 -,0,28,9009,24,1,0
4507 -,1,1755,9011,24,1,0
4508 -,0,28,9013,24,1,0
4509 -,1,1755,9015,24,1,0
4510 -,0,28,9017,24,1,0
4511 -,1,1755,9019,24,1,0
4512 -,0,28,9021,24,1,0
4513 -,1,1755,9023,24,1,0
4514 -,0,28,9025,24,1,0
4515 -,1,1755,9027,24,1,0
4516 -,0,28,9029,24,1,0
4517 -,1,1755,9031,24,1,0
4518 -,0,28,9033,24,1,0
4519 -,1,1755,9035,24,1,0
4520 -,0,28,9037,24,1,0
4521 -,1,1755,9039,112,1,0
4522 -,0,28,9041,24,1,0
4523 -,1,1755,9043,16,1,0
4524 -,0,28,9045,24,1,0
4525 -,1,1755,9047,24,1,0
4526 -,0,28,9049,24,1,0
4527 -,2,1910,9051,48,1,0
4528 -,1,1,9053,24,1,0
4529 -,0,28,9055,24,1,0
4530 -,2,1911,9057,48,1,0
4531 -,1,1,9059,32,1,0
4532 -,0,28,9061,24,1,0
4533 -,2,1912,9063,48,1,0
4534 -,1,1,9065,24,1,0
4535 -,0,28,9067,24,1,0
4536 -,2,1913,9069,48,1,0
4537 -,1,1,9071,88,1,0
4538 -,0,28,9073,24,1,0
4539 -,1,1,9075,24,1,0
4540 -,0,28,9077,24,1,0
4541 -,2,1914,9079,48,1,0
4542 -,1,1,9081,32,1,0
4543 -,0,28,9083,24,1,0
4544 -,2,1915,9085,48,1,0
4545 -,1,1,9087,24,1,0
4546 -,0,28,9089,24,1,0
4547 -,2,1916,9091,48,1,0
4548 -,1,1755,9093,32,1,0
4549 -,0,28,9095,24,1,0
4550 -,1,1755,9097,40,1,0
4551 -,0,28,9099,24,1,0
4552 -,1,1755,9101,32,1,0
4553 -,0,28,9103,24,1,0
4554 -,1,1755,9105,24,1,0
4555 -,0,28,9107,24,1,0
4556 -,1,1755,9109,56,1,0
4557 -,0,28,9111,24,1,0
4558 -,1,1755,9113,56,1,0
4559 -,0,28,9115,24,1,0
4560 -,1,1755,9117,32,1,0
4561 -,0,28,9119,24,1,0
4562 -,1,1755,9121,24,1,0
4563 -,0,28,9123,24,1,0
4564 -,1,1,9125,56,1,0
4565 -,0,28,9127,24,1,0
4566 -,2,1917,9129,56,1,0
4567 -,1,1,9131,56,1,0
4568 -,0,28,9133,24,1,0
4569 -,2,1918,9135,64,1,0
4570 -,1,1,9137,56,1,0
4571 -,0,28,9139,24,1,0
4572 -,2,1919,9141,56,1,0
4573 -,1,1755,9143,56,1,0
4574 -,0,28,9145,24,1,0
4575 -,1,1755,9147,56,1,0
4576 -,0,28,9149,24,1,0
4577 -,1,1,9151,24,1,0
4578 -,0,28,9153,24,1,0
4579 -,1,1,9155,32,1,0
4580 -,0,28,9157,24,1,0
4581 -,1,1,9159,24,1,0
4582 -,0,28,9161,24,1,0
4583 -,1,1,9163,24,1,0
4584 -,0,28,9165,24,1,0
4585 -,1,1,9167,24,1,0
4586 -,0,28,9169,24,1,0
4587 -,1,1,9171,32,1,0
4588 -,0,28,9173,24,1,0
4589 -,1,1,9175,64,1,0
4590 -,0,28,9177,24,1,0
4591 -,2,1920,9179,72,1,0
4592 -,1,1,9181,64,1,0
4593 -,0,28,9183,24,1,0
4594 -,1,1,9185,64,1,0
4595 -,0,28,9187,24,1,0
4596 -,2,1921,9189,72,1,0
4597 -,1,1,9191,64,1,0
4598 -,0,28,9193,24,1,0
4599 -,1,1,9195,64,1,0
4600 -,0,28,9197,24,1,0
4601 -,2,1922,9199,72,1,0
4602 -,1,1,9201,64,1,0
4603 -,0,28,9203,24,1,0
4604 -,1,1,9205,24,1,0
4605 -,0,28,9207,24,1,0
4606 -,1,1755,9209,40,1,0
4607 -,0,28,9211,24,1,0
4608 -,1,1755,9213,40,1,0
4609 -,0,28,9215,24,1,0
4610 -,1,1755,9217,40,1,0
4611 -,0,28,9219,24,1,0
4612 -,1,1755,9221,40,1,0
4613 -,0,28,9223,24,1,0
4614 -,1,1755,9225,40,1,0
4615 -,0,28,9227,24,1,0
4616 -,1,1755,9229,40,1,0
4617 -,0,28,9231,24,1,0
4618 -,1,1755,9233,40,1,0
4619 -,0,28,9235,24,1,0
4620 -,1,1755,9237,40,1,0
4621 -,0,28,9239,24,1,0
4622 -,1,1755,9241,40,1,0
4623 -,0,28,9243,24,1,0
4624 -,1,1755,9245,40,1,0
4625 -,0,28,9247,24,1,0
4626 -,1,1755,9249,56,1,0
4627 -,0,28,9251,24,1,0
4628 -,1,1755,9253,72,1,0
4629 -,0,28,9255,24,1,0
4630 -,1,1755,9257,32,1,0
4631 -,0,28,9259,24,1,0
4632 -,1,1755,9261,32,1,0
4633 -,0,28,9263,24,1,0
4634 -,1,1755,9265,72,1,0
4635 -,0,28,9267,24,1,0
4636 -,1,1755,9269,48,1,0
4637 -,0,28,9271,24,1,0
4638 -,1,1755,9273,48,1,0
4639 -,0,28,9275,24,1,0
4640 -,1,1755,9277,48,1,0
4641 -,0,28,9279,24,1,0
4642 -,1,1755,9281,16,1,0
4643 -,0,28,9283,24,1,0
4644 -,1,1755,9285,40,1,0
4645 -,0,28,9287,24,1,0
4646 -,1,1755,9289,224,1,0
4647 -,0,28,9291,24,1,0
4648 -,1,1755,9293,24,1,0
4649 -,0,28,9295,24,1,0
4650 -,1,1755,9297,24,1,0
4651 -,0,28,9299,24,1,0
4652 -,1,1755,9301,24,1,0
4653 -,0,28,9303,24,1,0
4654 -,1,1,9305,216,1,0
4655 -,0,28,9307,24,1,0
4656 -,7,54,9309,16,1,0
4657 -,1,1,9311,88,1,0
4658 -,0,28,9313,24,1,0
4659 -,1,1755,9315,24,1,0
4660 -,0,28,9317,24,1,0
4661 -,1,1755,9319,24,1,0
4662 -,0,28,9321,24,1,0
4663 -,1,1755,9323,24,1,0
4664 -,0,28,9325,24,1,0
4665 -,1,1755,9327,56,1,0
4666 -,0,28,9329,24,1,0
4667 -,2,1923,9331,48,1,0
4668 -,1,1755,9333,88,1,0
4669 -,0,28,9335,24,1,0
4670 -,1,1755,9337,56,1,0
4671 -,0,28,9339,24,1,0
4672 -,2,1924,9341,56,1,0
4673 -,1,1,9343,56,1,0
4674 -,0,28,9345,24,1,0
4675 -,1,1,9347,32,1,0
4676 -,0,28,9349,24,1,0
4677 -,2,1925,9351,56,1,0
4678 -,1,1,9353,32,1,0
4679 -,0,28,9355,24,1,0
4680 -,2,1926,9357,64,1,0
4681 -,1,1,9359,32,1,0
4682 -,0,28,9361,24,1,0
4683 -,2,1927,9363,64,1,0
4684 -,1,1,9365,56,1,0
4685 -,0,28,9367,24,1,0
4686 -,7,54,9369,16,1,0
4687 -,2,1928,9371,56,1,0
4688 -,1,1,9373,56,1,0
4689 -,0,28,9375,24,1,0
4690 -,7,54,9377,16,1,0
4691 -,2,1929,9379,56,1,0
4692 -,1,1,9381,56,1,0
4693 -,0,28,9383,24,1,0
4694 -,7,54,9385,16,1,0
4695 -,2,1930,9387,56,1,0
4696 -,1,1,9389,56,1,0
4697 -,0,28,9391,24,1,0
4698 -,7,54,9393,16,1,0
4699 -,2,1931,9395,56,1,0
4700 -,1,1,9397,56,1,0
4701 -,0,28,9399,24,1,0
4702 -,7,54,9401,16,1,0
4703 -,2,1932,9403,56,1,0
4704 -,1,1,9405,56,1,0
4705 -,0,28,9407,24,1,0
4706 -,7,54,9409,16,1,0
4707 -,2,1933,9411,56,1,0
4708 -,1,1,9413,56,1,0
4709 -,0,28,9415,24,1,0
4710 -,7,54,9417,16,1,0
4711 -,2,1934,9419,56,1,0
4712 -,1,1,9421,56,1,0
4713 -,0,28,9423,24,1,0
4714 -,7,54,9425,16,1,0
4715 -,2,1935,9427,56,1,0
4716 -,1,1,9429,56,1,0
4717 -,0,28,9431,24,1,0
4718 -,7,54,9433,16,1,0
4719 -,2,1936,9435,56,1,0
4720 -,1,1,9437,56,1,0
4721 -,0,28,9439,24,1,0
4722 -,7,54,9441,16,1,0
4723 -,2,1937,9443,56,1,0
4724 -,1,1,9445,64,1,0
4725 -,0,28,9447,24,1,0
4726 -,7,54,9449,16,1,0
4727 -,2,1938,9451,56,1,0
4728 -,1,1,9453,64,1,0
4729 -,0,28,9455,24,1,0
4730 -,7,54,9457,16,1,0
4731 -,2,1939,9459,56,1,0
4732 -,1,1,9461,64,1,0
4733 -,0,28,9463,24,1,0
4734 -,7,54,9465,16,1,0
4735 -,2,1940,9467,56,1,0
4736 -,1,1,9469,64,1,0
4737 -,0,28,9471,24,1,0
4738 -,7,54,9473,16,1,0
4739 -,2,1941,9475,56,1,0
4740 -,1,1,9477,64,1,0
4741 -,0,28,9479,24,1,0
4742 -,7,54,9481,16,1,0
4743 -,2,1942,9483,56,1,0
4744 -,1,1,9485,64,1,0
4745 -,0,28,9487,24,1,0
4746 -,7,54,9489,16,1,0
4747 -,2,1943,9491,56,1,0
4748 -,1,1,9493,64,1,0
4749 -,0,28,9495,24,1,0
4750 -,7,54,9497,16,1,0
4751 -,2,1944,9499,56,1,0
4752 -,1,1,9501,64,1,0
4753 -,0,28,9503,24,1,0
4754 -,7,54,9505,16,1,0
4755 -,2,1945,9507,56,1,0
4756 -,1,1,9509,56,1,0
4757 -,0,28,9511,24,1,0
4758 -,7,54,9513,16,1,0
4759 -,2,1946,9515,56,1,0
4760 -,1,1,9517,56,1,0
4761 -,0,28,9519,24,1,0
4762 -,7,54,9521,16,1,0
4763 -,2,1947,9523,56,1,0
4764 -,1,1755,9525,16,1,0
4765 -,0,28,9527,24,1,0
4766 -,1,1755,9529,24,1,0
4767 -,0,28,9531,24,1,0
4768 -,1,1755,9533,32,1,0
4769 -,0,28,9535,24,1,0
4770 -,1,1755,9537,32,1,0
4771 -,0,28,9539,24,1,0
4772 -,1,1755,9541,16,1,0
4773 -,0,28,9543,24,1,0
4774 -,1,1755,9545,16,1,0
4775 -,0,28,9547,24,1,0
4776 -,1,1755,9549,24,1,0
4777 -,0,28,9551,24,1,0
4778 -,1,1755,9553,16,1,0
4779 -,0,28,9555,24,1,0
4780 -,1,1755,9557,40,1,0
4781 -,0,28,9559,24,1,0
4782 -,1,1755,9561,24,1,0
4783 -,0,28,9563,24,1,0
4784 -,1,1755,9565,32,1,0
4785 -,0,28,9567,24,1,0
4786 -,1,1755,9569,24,1,0
4787 -,0,28,9571,24,1,0
4788 -,1,1755,9573,16,1,0
4789 -,0,28,9575,24,1,0
4790 -,1,1755,9577,16,1,0
4791 -,0,28,9579,24,1,0
4792 -,1,1755,9581,24,1,0
4793 -,0,28,9583,24,1,0
4794 -,1,1755,9585,24,1,0
4795 -,0,28,9587,24,1,0
4796 -,1,1755,9589,24,1,0
4797 -,0,28,9591,24,1,0
4798 -,1,1755,9593,128,1,0
4799 -,0,28,9595,24,1,0
4800 -,1,1755,9597,24,1,0
4801 -,0,28,9599,24,1,0
4802 -,1,1755,9601,24,1,0
4803 -,0,28,9603,24,1,0
4804 -,1,1755,9605,88,1,0
4805 -,0,28,9607,24,1,0
4806 -,1,1755,9609,160,1,0
4807 -,0,28,9611,24,1,0
4808 -,1,1755,9613,16,1,0
4809 -,0,28,9615,24,1,0
4810 -,1,1755,9617,24,1,0
4811 -,0,28,9619,24,1,0
4812 -,1,1755,9621,24,1,0
4813 -,0,28,9623,24,1,0
4814 -,1,1755,9625,16,1,0
4815 -,0,28,9627,24,1,0
4816 -,1,1755,9629,24,1,0
4817 -,0,28,9631,24,1,0
4818 -,1,1755,9633,16,1,0
4819 -,0,28,9635,24,1,0
4820 -,1,1755,9637,16,1,0
4821 -,0,28,9639,24,1,0
4822 -,1,1755,9641,16,1,0
4823 -,0,28,9643,24,1,0
4824 -,1,1755,9645,24,1,0
4825 -,0,28,9647,24,1,0
4826 -,1,1755,9649,16,1,0
4827 -,0,28,9651,24,1,0
4828 -,1,1755,9653,24,1,0
4829 -,0,28,9655,24,1,0
4830 -,1,1755,9657,16,1,0
4831 -,0,28,9659,24,1,0
4832 -,1,1755,9661,16,1,0
4833 -,0,28,9663,24,1,0
4834 -,1,1755,9665,16,1,0
4835 -,0,28,9667,24,1,0
4836 -,1,1755,9669,16,1,0
4837 -,0,28,9671,24,1,0
4838 -,1,1755,9673,16,1,0
4839 -,0,28,9675,24,1,0
4840 -,1,1755,9677,16,1,0
4841 -,0,28,9679,24,1,0
4842 -,1,1755,9681,16,1,0
4843 -,0,28,9683,24,1,0
4844 -,1,1755,9685,16,1,0
4845 -,0,28,9687,24,1,0
4846 -,1,1755,9689,16,1,0
4847 -,0,28,9691,24,1,0
4848 -,1,1755,9693,24,1,0
4849 -,0,28,9695,24,1,0
4850 -,1,1755,9697,24,1,0
4851 -,0,28,9699,24,1,0
4852 -,1,1755,9701,24,1,0
4853 -,0,28,9703,24,1,0
4854 -,1,1755,9705,24,1,0
4855 -,0,28,9707,24,1,0
4856 -,1,1755,9709,16,1,0
4857 -,0,28,9711,24,1,0
4858 -,1,1755,9713,16,1,0
4859 -,0,28,9715,24,1,0
4860 -,1,1755,9717,16,1,0
4861 -,0,28,9719,24,1,0
4862 -,1,1755,9721,24,1,0
4863 -,0,28,9723,24,1,0
4864 -,1,1755,9725,48,1,0
4865 -,0,28,9727,24,1,0
4866 -,1,1755,9729,32,1,0
4867 -,0,28,9731,24,1,0
4868 -,2,1948,9733,56,1,0
4869 -,1,1755,9735,24,1,0
4870 -,0,28,9737,24,1,0
4871 -,1,1755,9739,24,1,0
4872 -,0,28,9741,24,1,0
4873 -,1,1755,9743,24,1,0
4874 -,0,28,9745,24,1,0
4875 -,1,1755,9747,24,1,0
4876 -,0,28,9749,24,1,0
4877 -,1,1755,9751,24,1,0
4878 -,0,28,9753,24,1,0
4879 -,1,1755,9755,24,1,0
4880 -,0,28,9757,24,1,0
4881 -,1,1,9759,120,1,0
4882 -,0,28,9761,24,1,0
4883 -,2,1949,9763,56,1,0
4884 -,1,1,9765,120,1,0
4885 -,0,28,9767,24,1,0
4886 -,2,1950,9769,64,1,0
4887 -,1,1755,9771,24,1,0
4888 -,0,28,9773,24,1,0
4889 -,1,1755,9775,24,1,0
4890 -,0,28,9777,24,1,0
4891 -,1,1755,9779,24,1,0
4892 -,0,28,9781,24,1,0
4893 -,1,1755,9783,24,1,0
4894 -,0,28,9785,24,1,0
4895 -,1,1755,9787,24,1,0
4896 -,0,28,9789,24,1,0
4897 -,1,1755,9791,24,1,0
4898 -,0,28,9793,24,1,0
4899 -,1,1755,9795,24,1,0
4900 -,0,28,9797,24,1,0
4901 -,1,1755,9799,24,1,0
4902 -,0,28,9801,24,1,0
4903 -,1,1755,9803,24,1,0
4904 -,0,28,9805,24,1,0
4905 -,1,1755,9807,24,1,0
4906 -,0,28,9809,24,1,0
4907 -,1,1755,9811,24,1,0
4908 -,0,28,9813,24,1,0
4909 -,1,1755,9815,24,1,0
4910 -,0,28,9817,24,1,0
4911 -,1,1755,9819,24,1,0
4912 -,0,28,9821,24,1,0
4913 -,1,1755,9823,24,1,0
4914 -,0,28,9825,24,1,0
4915 -,1,1755,9827,24,1,0
4916 -,0,28,9829,24,1,0
4917 -,1,1755,9831,24,1,0
4918 -,0,28,9833,24,1,0
4919 -,1,1755,9835,24,1,0
4920 -,0,28,9837,24,1,0
4921 -,1,1755,9839,24,1,0
4922 -,0,28,9841,24,1,0
4923 -,1,1755,9843,24,1,0
4924 -,0,28,9845,24,1,0
4925 -,1,1755,9847,24,1,0
4926 -,0,28,9849,24,1,0
4927 -,1,1755,9851,24,1,0
4928 -,0,28,9853,24,1,0
4929 -,1,1755,9855,24,1,0
4930 -,0,28,9857,24,1,0
4931 -,1,1755,9859,24,1,0
4932 -,0,28,9861,24,1,0
4933 -,1,1755,9863,24,1,0
4934 -,0,28,9865,24,1,0
4935 -,1,1755,9867,24,1,0
4936 -,0,28,9869,24,1,0
4937 -,1,1755,9871,24,1,0
4938 -,0,28,9873,24,1,0
4939 -,1,1755,9875,24,1,0
4940 -,0,28,9877,24,1,0
4941 -,1,1755,9879,24,1,0
4942 -,0,28,9881,24,1,0
4943 -,1,1755,9883,24,1,0
4944 -,0,28,9885,24,1,0
4945 -,1,1755,9887,16,1,0
4946 -,0,28,9889,24,1,0
4947 -,1,1755,9891,16,1,0
4948 -,0,28,9893,24,1,0
4949 -,1,1,9895,32,1,0
4950 -,0,28,9897,24,1,0
4951 -,1,1,9899,32,1,0
4952 -,0,28,9901,24,1,0
4953 -,1,1,9903,32,1,0
4954 -,0,28,9905,24,1,0
4955 -,1,1,9907,32,1,0
4956 -,0,28,9909,24,1,0
4957 -,1,1,9911,32,1,0
4958 -,0,28,9913,24,1,0
4959 -,1,1,9915,32,1,0
4960 -,0,28,9917,24,1,0
4961 -,1,1,9919,32,1,0
4962 -,0,28,9921,24,1,0
4963 -,1,1,9923,32,1,0
4964 -,0,28,9925,24,1,0
4965 -,1,1,9927,32,1,0
4966 -,0,28,9929,24,1,0
4967 -,1,1755,9931,16,1,0
4968 -,0,28,9933,24,1,0
4969 -,1,1755,9935,16,1,0
4970 -,0,28,9937,24,1,0
4971 -,1,1755,9939,16,1,0
4972 -,0,28,9941,24,1,0
4973 -,1,1755,9943,16,1,0
4974 -,0,28,9945,24,1,0
4975 -,1,1755,9947,16,1,0
4976 -,0,28,9949,24,1,0
4977 -,1,1755,9951,16,1,0
4978 -,0,28,9953,24,1,0
4979 -,1,1755,9955,16,1,0
4980 -,0,28,9957,24,1,0
4981 -,1,1755,9959,16,1,0
4982 -,0,28,9961,24,1,0
4983 -,1,1755,9963,80,1,0
4984 -,0,28,9965,24,1,0
4985 -,1,1755,9967,72,1,0
4986 -,0,28,9969,24,1,0
4987 -,1,1,9971,24,1,0
4988 -,0,28,9973,24,1,0
4989 -,1,1755,9975,16,1,0
4990 -,0,28,9977,24,1,0
4991 -,1,1755,9979,16,1,0
4992 -,0,28,9981,24,1,0
4993 -,1,1755,9983,16,1,0
4994 -,0,28,9985,24,1,0
4995 -,1,1755,9987,16,1,0
4996 -,0,28,9989,24,1,0
4997 -,1,1755,9991,16,1,0
4998 -,0,28,9993,24,1,0
4999 -,1,1755,9995,16,1,0

This file is too large to show in full.

meshagent.js
+270 -280
@@ -14,85 +14,76 @@
14 /*jshint esversion: 6 */
15 "use strict";
16
17 -var AgentConnectCount = 0;
18 -
17 // Construct a MeshAgent object, called upon connection
18 module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
19 + const forge = parent.parent.certificateOperations.forge;
20 + const common = parent.parent.common;
21 + const agentUpdateBlockSize = 65520;
22 +
23 var obj = {};
22 - obj.parent = parent;
23 - obj.db = db;
24 - obj.ws = ws;
25 - obj.fs = parent.fs;
26 - obj.args = args;
27 - obj.nodeid = null;
28 - obj.meshid = null;
29 - obj.dbNodeKey = null;
30 - obj.dbMeshKey = null;
31 - obj.forge = parent.parent.certificateOperations.forge;
32 - obj.common = parent.parent.common;
33 - obj.authenticated = 0;
24 obj.domain = domain;
25 + obj.authenticated = 0;
26 obj.receivedCommands = 0;
36 - obj.connectTime = null;
27 obj.agentCoreCheck = 0;
38 - obj.agentInfo = null;
39 - obj.agentUpdate = null;
40 - obj.agentCoreUpdatePending = false;
41 - const agentUpdateBlockSize = 65520;
42 - obj.remoteaddr = req.ip;
43 - if (obj.remoteaddr.startsWith('::ffff:')) { obj.remoteaddr = obj.remoteaddr.substring(7); }
44 - obj.remoteaddrport = obj.remoteaddr + ':' + obj.ws._socket.remotePort;
45 - obj.agentConnectCount = ++AgentConnectCount;
28 + obj.remoteaddr = (req.ip.startsWith('::ffff:')) ? (req.ip.substring(7)) : req.ip;
29 + obj.remoteaddrport = obj.remoteaddr + ':' + ws._socket.remotePort;
30 + obj.nonce = parent.crypto.randomBytes(48).toString('binary');
31 ws._socket.setKeepAlive(true, 240000); // Set TCP keep alive, 4 minutes
32 + //obj.nodeid = null;
33 + //obj.meshid = null;
34 + //obj.dbNodeKey = null;
35 + //obj.dbMeshKey = null;
36 + //obj.connectTime = null;
37 + //obj.agentInfo = null;
38
39 // Send a message to the mesh agent
49 - obj.send = function (data, func) { try { if (typeof data == 'string') { obj.ws.send(Buffer.from(data, 'binary'), func); } else { obj.ws.send(data, func); } } catch (e) { } };
40 + obj.send = function (data, func) { try { if (typeof data == 'string') { ws.send(Buffer.from(data, 'binary'), func); } else { ws.send(data, func); } } catch (e) { } };
41
42 // Disconnect this agent
43 obj.close = function (arg) {
44 obj.authenticated = -1;
54 - if ((arg == 1) || (arg == null)) { try { obj.ws.close(); if (obj.nodeid != null) { obj.parent.parent.debug(1, 'Soft disconnect ' + obj.nodeid + ' (' + obj.remoteaddrport + ')'); } } catch (e) { console.log(e); } } // Soft close, close the websocket
55 - if (arg == 2) { try { obj.ws._socket._parent.end(); if (obj.nodeid != null) { obj.parent.parent.debug(1, 'Hard disconnect ' + obj.nodeid + ' (' + obj.remoteaddrport + ')'); } } catch (e) { console.log(e); } } // Hard close, close the TCP socket
45 + if ((arg == 1) || (arg == null)) { try { ws.close(); if (obj.nodeid != null) { parent.parent.debug(1, 'Soft disconnect ' + obj.nodeid + ' (' + obj.remoteaddrport + ')'); } } catch (e) { console.log(e); } } // Soft close, close the websocket
46 + if (arg == 2) { try { ws._socket._parent.end(); if (obj.nodeid != null) { parent.parent.debug(1, 'Hard disconnect ' + obj.nodeid + ' (' + obj.remoteaddrport + ')'); } } catch (e) { console.log(e); } } // Hard close, close the TCP socket
47 // If arg == 3, don't communicate with this agent anymore, but don't disconnect (Duplicate agent).
57 - if (obj.parent.wsagents[obj.dbNodeKey] == obj) {
58 - delete obj.parent.wsagents[obj.dbNodeKey];
59 - obj.parent.parent.ClearConnectivityState(obj.dbMeshKey, obj.dbNodeKey, 1);
48 + if (parent.wsagents[obj.dbNodeKey] == obj) {
49 + delete parent.wsagents[obj.dbNodeKey];
50 + parent.parent.ClearConnectivityState(obj.dbMeshKey, obj.dbNodeKey, 1);
51 }
52
53 // Get the current mesh
63 - var mesh = obj.parent.meshes[obj.dbMeshKey];
54 + const mesh = parent.meshes[obj.dbMeshKey];
55
56 // Other clean up may be needed here
57 if (obj.unauth) { delete obj.unauth; }
58 if (obj.agentUpdate != null) {
68 - if (obj.fs) { try { obj.fs.close(obj.agentUpdate.fd); } catch (ex) { } obj.fs = null; }
69 - obj.parent.parent.taskLimiter.completed(obj.agentUpdate.taskid); // Indicate this task complete
70 - obj.agentUpdate = null;
59 + if (obj.agentUpdate.fd) { try { parent.fs.close(obj.agentUpdate.fd); } catch (ex) { } }
60 + parent.parent.taskLimiter.completed(obj.agentUpdate.taskid); // Indicate this task complete
61 + delete obj.agentUpdate;
62 }
63
64 // If this is a temporary or recovery agent, or all devices in this group are temporary, remove the agent (0x20 = Temporary, 0x40 = Recovery)
65 if (((obj.agentInfo) && (obj.agentInfo.capabilities) && ((obj.agentInfo.capabilities & 0x20) || (obj.agentInfo.capabilities & 0x40))) || ((mesh) && (mesh.flags) && (mesh.flags & 1))) {
66 // Delete this node including network interface information and events
76 - obj.db.Remove(obj.dbNodeKey); // Remove node with that id
77 - obj.db.Remove('if' + obj.dbNodeKey); // Remove interface information
78 - obj.db.Remove('nt' + obj.dbNodeKey); // Remove notes
79 - obj.db.Remove('lc' + obj.dbNodeKey); // Remove last connect time
80 - obj.db.RemoveSMBIOS(obj.dbNodeKey); // Remove SMBios data
81 - obj.db.RemoveAllNodeEvents(obj.dbNodeKey); // Remove all events for this node
82 - obj.db.removeAllPowerEventsForNode(obj.dbNodeKey); // Remove all power events for this node
67 + db.Remove(obj.dbNodeKey); // Remove node with that id
68 + db.Remove('if' + obj.dbNodeKey); // Remove interface information
69 + db.Remove('nt' + obj.dbNodeKey); // Remove notes
70 + db.Remove('lc' + obj.dbNodeKey); // Remove last connect time
71 + db.RemoveSMBIOS(obj.dbNodeKey); // Remove SMBios data
72 + db.RemoveAllNodeEvents(obj.dbNodeKey); // Remove all events for this node
73 + db.removeAllPowerEventsForNode(obj.dbNodeKey); // Remove all power events for this node
74
75 // Event node deletion
85 - obj.parent.parent.DispatchEvent(['*', obj.dbMeshKey], obj, { etype: 'node', action: 'removenode', nodeid: obj.dbNodeKey, domain: obj.domain.id, nolog: 1 });
76 + parent.parent.DispatchEvent(['*', obj.dbMeshKey], obj, { etype: 'node', action: 'removenode', nodeid: obj.dbNodeKey, domain: domain.id, nolog: 1 });
77
78 // Disconnect all connections if needed
88 - var state = obj.parent.parent.GetConnectivityState(obj.dbNodeKey);
79 + const state = parent.parent.GetConnectivityState(obj.dbNodeKey);
80 if ((state != null) && (state.connectivity != null)) {
90 - if ((state.connectivity & 1) != 0) { obj.parent.wsagents[obj.dbNodeKey].close(); } // Disconnect mesh agent
91 - if ((state.connectivity & 2) != 0) { obj.parent.parent.mpsserver.close(obj.parent.parent.mpsserver.ciraConnections[obj.dbNodeKey]); } // Disconnect CIRA connection
81 + if ((state.connectivity & 1) != 0) { parent.wsagents[obj.dbNodeKey].close(); } // Disconnect mesh agent
82 + if ((state.connectivity & 2) != 0) { parent.parent.mpsserver.close(parent.parent.mpsserver.ciraConnections[obj.dbNodeKey]); } // Disconnect CIRA connection
83 }
84 } else {
85 // Update the last connect time
95 - if (obj.authenticated == 2) { obj.db.Set({ _id: 'lc' + obj.dbNodeKey, type: 'lastconnect', domain: domain.id, time: obj.connectTime, addr: obj.remoteaddrport }); }
86 + if (obj.authenticated == 2) { db.Set({ _id: 'lc' + obj.dbNodeKey, type: 'lastconnect', domain: domain.id, time: obj.connectTime, addr: obj.remoteaddrport }); }
87 }
88 delete obj.nodeid;
89 };
@@ -105,14 +96,14 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
96 if (obj.authenticated == 2) { // We are authenticated
97 if ((obj.agentUpdate == null) && (msg.charCodeAt(0) == 123)) { processAgentData(msg); } // Only process JSON messages if meshagent update is not in progress
98 if (msg.length < 2) return;
108 - var cmdid = obj.common.ReadShort(msg, 0);
99 + const cmdid = common.ReadShort(msg, 0);
100 if (cmdid == 11) { // MeshCommand_CoreModuleHash
101 if (msg.length == 4) { ChangeAgentCoreInfo({ "caps": 0 }); } // If the agent indicated that no core is running, clear the core information string.
102 // Mesh core hash, sent by agent with the hash of the current mesh core.
103
104 // If we are using a custom core, don't try to update it.
105 if (obj.agentCoreCheck == 1000) {
115 - obj.send(obj.common.ShortToStr(16) + obj.common.ShortToStr(0)); // MeshCommand_CoreOk. Indicates to the agent that the core is ok. Start it if it's not already started.
106 + obj.send(common.ShortToStr(16) + common.ShortToStr(0)); // MeshCommand_CoreOk. Indicates to the agent that the core is ok. Start it if it's not already started.
107 agentCoreIsStable();
108 return;
109 }
@@ -120,57 +111,61 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
111 // Get the current meshcore hash
112 const agentMeshCoreHash = (msg.length == 52) ? msg.substring(4, 52) : null;
113
123 - // If the agent indicates this is a custom core, we are done. TODO: Speed up this compare.
124 - if ((agentMeshCoreHash != null) && (Buffer.from(agentMeshCoreHash, 'binary').toString('hex') == '000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000')) {
114 + // If the agent indicates this is a custom core, we are done.
115 + if ((agentMeshCoreHash != null) && (agentMeshCoreHash == '\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0')) {
116 obj.agentCoreCheck = 0;
126 - obj.send(obj.common.ShortToStr(16) + obj.common.ShortToStr(0)); // MeshCommand_CoreOk. Indicates to the agent that the core is ok. Start it if it's not already started.
117 + obj.send(common.ShortToStr(16) + common.ShortToStr(0)); // MeshCommand_CoreOk. Indicates to the agent that the core is ok. Start it if it's not already started.
118 agentCoreIsStable();
119 return;
120 }
121
131 - // We need to check if the core is current. First, figure out what core we need.
132 - var corename = obj.parent.parent.meshAgentsArchitectureNumbers[obj.agentInfo.agentId].core;
133 -
134 - // If this is a recovery agent, use the agent recovery core
135 - if (obj.agentInfo.capabilities & 0x40) { corename = obj.parent.parent.meshAgentsArchitectureNumbers[obj.agentInfo.agentId].arcore; }
136 -
137 - // If the user asked, use the recovery core.
138 - if (obj.agentCoreCheck == 1001) { corename = obj.parent.parent.meshAgentsArchitectureNumbers[obj.agentInfo.agentId].rcore; }
122 + // We need to check if the core is current. Figure out what core we need.
123 + var corename;
124 + if (obj.agentCoreCheck == 1001) {
125 + // If the user asked, use the recovery core.
126 + corename = parent.parent.meshAgentsArchitectureNumbers[obj.agentInfo.agentId].rcore;
127 + } else if (obj.agentInfo.capabilities & 0x40) {
128 + // If this is a recovery agent, use the agent recovery core.
129 + corename = parent.parent.meshAgentsArchitectureNumbers[obj.agentInfo.agentId].arcore;
130 + } else {
131 + // This is the normal core for this agent type.
132 + corename = parent.parent.meshAgentsArchitectureNumbers[obj.agentInfo.agentId].core;
133 + }
134
135 // If we have a core, use it.
136 if (corename != null) {
142 - const meshcorehash = obj.parent.parent.defaultMeshCoresHash[corename];
137 + const meshcorehash = parent.parent.defaultMeshCoresHash[corename];
138 if (agentMeshCoreHash != meshcorehash) {
139 if ((obj.agentCoreCheck < 5) || (obj.agentCoreCheck == 1001)) {
140 if (meshcorehash == null) {
141 // Clear the core
147 - obj.send(obj.common.ShortToStr(10) + obj.common.ShortToStr(0)); // MeshCommand_CoreModule, ask mesh agent to clear the core
148 - obj.parent.parent.debug(1, 'Clearing core');
142 + obj.send(common.ShortToStr(10) + common.ShortToStr(0)); // MeshCommand_CoreModule, ask mesh agent to clear the core
143 + parent.parent.debug(1, 'Clearing core');
144 } else {
145 // Update new core
151 - //obj.send(obj.common.ShortToStr(10) + obj.common.ShortToStr(0) + meshcorehash + obj.parent.parent.defaultMeshCores[corename]); // MeshCommand_CoreModule, start core update
152 - //obj.parent.parent.debug(1, 'Updating code ' + corename);
146 + //obj.send(common.ShortToStr(10) + common.ShortToStr(0) + meshcorehash + parent.parent.defaultMeshCores[corename]); // MeshCommand_CoreModule, start core update
147 + //parent.parent.debug(1, 'Updating code ' + corename);
148
149 // Update new core with task limiting so not to flood the server. This is a high priority task.
150 obj.agentCoreUpdatePending = true;
156 - obj.parent.parent.taskLimiter.launch(function (argument, taskid, taskLimiterQueue) {
151 + parent.parent.taskLimiter.launch(function (argument, taskid, taskLimiterQueue) {
152 if (obj.authenticated == 2) {
153 // Send the updated code.
159 - obj.agentCoreUpdatePending = false;
160 - obj.send(obj.common.ShortToStr(10) + obj.common.ShortToStr(0) + argument.hash + argument.core, function () { obj.parent.parent.taskLimiter.completed(taskid); }); // MeshCommand_CoreModule, start core update
161 - obj.parent.parent.debug(1, 'Updating code ' + argument.name);
154 + delete obj.agentCoreUpdatePending;
155 + obj.send(common.ShortToStr(10) + common.ShortToStr(0) + argument.hash + argument.core, function () { parent.parent.taskLimiter.completed(taskid); }); // MeshCommand_CoreModule, start core update
156 + parent.parent.debug(1, 'Updating code ' + argument.name);
157 agentCoreIsStable();
158 } else {
159 // This agent is probably disconnected, nothing to do.
165 - obj.parent.parent.taskLimiter.completed(taskid);
160 + parent.parent.taskLimiter.completed(taskid);
161 }
167 - }, { hash: meshcorehash, core: obj.parent.parent.defaultMeshCores[corename], name: corename }, 0);
162 + }, { hash: meshcorehash, core: parent.parent.defaultMeshCores[corename], name: corename }, 0);
163 }
164 obj.agentCoreCheck++;
165 }
166 } else {
167 obj.agentCoreCheck = 0;
173 - obj.send(obj.common.ShortToStr(16) + obj.common.ShortToStr(0)); // MeshCommand_CoreOk. Indicates to the agent that the core is ok. Start it if it's not already started.
168 + obj.send(common.ShortToStr(16) + common.ShortToStr(0)); // MeshCommand_CoreOk. Indicates to the agent that the core is ok. Start it if it's not already started.
169 agentCoreIsStable(); // No updates needed, agent is ready to go.
170 }
171 }
@@ -179,17 +174,17 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
174 // TODO: Check if we have a mesh specific core. If so, use that.
175 var agentMeshCoreHash = null;
176 if (msg.length == 52) { agentMeshCoreHash = msg.substring(4, 52); }
182 - if ((agentMeshCoreHash != obj.parent.parent.defaultMeshCoreHash) && (agentMeshCoreHash != obj.parent.parent.defaultMeshCoreNoMeiHash)) {
177 + if ((agentMeshCoreHash != parent.parent.defaultMeshCoreHash) && (agentMeshCoreHash != parent.parent.defaultMeshCoreNoMeiHash)) {
178 if (obj.agentCoreCheck < 5) { // This check is in place to avoid a looping core update.
184 - if (obj.parent.parent.defaultMeshCoreHash == null) {
179 + if (parent.parent.defaultMeshCoreHash == null) {
180 // Update no core
186 - obj.send(obj.common.ShortToStr(10) + obj.common.ShortToStr(0)); // Command 10, ask mesh agent to clear the core
181 + obj.send(common.ShortToStr(10) + common.ShortToStr(0)); // Command 10, ask mesh agent to clear the core
182 } else {
183 // Update new core
189 - if (obj.parent.parent.meshAgentsArchitectureNumbers[obj.agentInfo.agentId].amt == true) {
190 - obj.send(obj.common.ShortToStr(10) + obj.common.ShortToStr(0) + obj.parent.parent.defaultMeshCoreHash + obj.parent.parent.defaultMeshCore); // Command 10, ask mesh agent to set the core (with MEI support)
184 + if (parent.parent.meshAgentsArchitectureNumbers[obj.agentInfo.agentId].amt == true) {
185 + obj.send(common.ShortToStr(10) + common.ShortToStr(0) + parent.parent.defaultMeshCoreHash + parent.parent.defaultMeshCore); // Command 10, ask mesh agent to set the core (with MEI support)
186 } else {
192 - obj.send(obj.common.ShortToStr(10) + obj.common.ShortToStr(0) + obj.parent.parent.defaultMeshCoreNoMeiHash + obj.parent.parent.defaultMeshCoreNoMei); // Command 10, ask mesh agent to set the core (No MEI)
187 + obj.send(common.ShortToStr(10) + common.ShortToStr(0) + parent.parent.defaultMeshCoreNoMeiHash + parent.parent.defaultMeshCoreNoMei); // Command 10, ask mesh agent to set the core (No MEI)
188 }
189 }
190 obj.agentCoreCheck++;
@@ -201,55 +196,55 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
196 }
197 else if (cmdid == 12) { // MeshCommand_AgentHash
198 if ((msg.length == 52) && (obj.agentExeInfo != null) && (obj.agentExeInfo.update == true)) {
204 - var agenthash = obj.common.rstr2hex(msg.substring(4)).toLowerCase();
205 - if ((agenthash != obj.agentExeInfo.hash) && (agenthash != '000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000')) {
199 + const agenthash = msg.substring(4);
200 + if ((agenthash != obj.agentExeInfo.hash) && (agenthash != '\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0')) {
201 // Mesh agent update required, do it using task limiter so not to flood the network. Medium priority task.
207 - obj.parent.parent.taskLimiter.launch(function (argument, taskid, taskLimiterQueue) {
208 - if (obj.authenticated != 2) { obj.parent.parent.taskLimiter.completed(taskid); return; } // If agent disconnection, complete and exit now.
209 - if (obj.nodeid != null) { obj.parent.parent.debug(1, 'Agent update required, NodeID=0x' + obj.nodeid.substring(0, 16) + ', ' + obj.agentExeInfo.desc); }
202 + parent.parent.taskLimiter.launch(function (argument, taskid, taskLimiterQueue) {
203 + if (obj.authenticated != 2) { parent.parent.taskLimiter.completed(taskid); return; } // If agent disconnection, complete and exit now.
204 + if (obj.nodeid != null) { parent.parent.debug(1, 'Agent update required, NodeID=0x' + obj.nodeid.substring(0, 16) + ', ' + obj.agentExeInfo.desc); }
205 if (obj.agentExeInfo.data == null) {
206 // Read the agent from disk
212 - obj.fs.open(obj.agentExeInfo.path, 'r', function (err, fd) {
207 + parent.fs.open(obj.agentExeInfo.path, 'r', function (err, fd) {
208 if (err) { return console.error(err); }
214 - obj.agentUpdate = { oldHash: agenthash, ptr: 0, buf: Buffer.alloc(agentUpdateBlockSize + 4), fd: fd, taskid: taskid };
209 + obj.agentUpdate = { ptr: 0, buf: Buffer.alloc(agentUpdateBlockSize + 4), fd: fd, taskid: taskid };
210
211 // MeshCommand_CoreModule, ask mesh agent to clear the core.
212 // The new core will only be sent after the agent updates.
218 - obj.send(obj.common.ShortToStr(10) + obj.common.ShortToStr(0));
213 + obj.send(common.ShortToStr(10) + common.ShortToStr(0));
214
215 // We got the agent file open on the server side, tell the agent we are sending an update starting with the SHA384 hash of the result
216 //console.log("Agent update file open.");
222 - obj.send(obj.common.ShortToStr(13) + obj.common.ShortToStr(0)); // Command 13, start mesh agent download
217 + obj.send(common.ShortToStr(13) + common.ShortToStr(0)); // Command 13, start mesh agent download
218
219 // Send the first mesh agent update data block
220 obj.agentUpdate.buf[0] = 0;
221 obj.agentUpdate.buf[1] = 14;
222 obj.agentUpdate.buf[2] = 0;
223 obj.agentUpdate.buf[3] = 1;
229 - var len = -1;
230 - try { len = obj.fs.readSync(obj.agentUpdate.fd, obj.agentUpdate.buf, 4, agentUpdateBlockSize, obj.agentUpdate.ptr); } catch (e) { }
231 - if (len == -1) {
232 - // Error reading the agent file, stop here.
233 - obj.fs.close(obj.agentUpdate.fd);
234 - obj.parent.parent.taskLimiter.completed(obj.agentUpdate.taskid); // Indicate this task complete
235 - obj.agentUpdate = null;
236 - } else {
237 - // Send the first block to the agent
238 - obj.agentUpdate.ptr += len;
239 - //console.log("Agent update send first block: " + len);
240 - obj.send(obj.agentUpdate.buf); // Command 14, mesh agent first data block
241 - }
224 + parent.fs.read(obj.agentUpdate.fd, obj.agentUpdate.buf, 4, agentUpdateBlockSize, obj.agentUpdate.ptr, function (err, bytesRead, buffer) {
225 + if ((err != null) || (bytesRead == 0)) {
226 + // Error reading the agent file, stop here.
227 + try { parent.fs.close(obj.agentUpdate.fd); } catch (ex) { }
228 + parent.parent.taskLimiter.completed(obj.agentUpdate.taskid); // Indicate this task complete
229 + delete obj.agentUpdate;
230 + } else {
231 + // Send the first block to the agent
232 + obj.agentUpdate.ptr += bytesRead;
233 + //console.log("Agent update send first block: " + bytesRead);
234 + obj.send(obj.agentUpdate.buf); // Command 14, mesh agent first data block
235 + }
236 + });
237 });
238 } else {
239 // Send the agent from RAM
245 - obj.agentUpdate = { oldHash: agenthash, ptr: 0, buf: Buffer.alloc(agentUpdateBlockSize + 4), taskid: taskid };
240 + obj.agentUpdate = { ptr: 0, buf: Buffer.alloc(agentUpdateBlockSize + 4), taskid: taskid };
241
242 // MeshCommand_CoreModule, ask mesh agent to clear the core.
243 // The new core will only be sent after the agent updates.
249 - obj.send(obj.common.ShortToStr(10) + obj.common.ShortToStr(0));
244 + obj.send(common.ShortToStr(10) + common.ShortToStr(0));
245
246 // We got the agent file open on the server side, tell the agent we are sending an update starting with the SHA384 hash of the result
252 - obj.send(obj.common.ShortToStr(13) + obj.common.ShortToStr(0)); // Command 13, start mesh agent download
247 + obj.send(common.ShortToStr(13) + common.ShortToStr(0)); // Command 13, start mesh agent download
248
249 // Send the first mesh agent update data block
250 obj.agentUpdate.buf[0] = 0;
@@ -257,7 +252,7 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
252 obj.agentUpdate.buf[2] = 0;
253 obj.agentUpdate.buf[3] = 1;
254
260 - var len = Math.min(agentUpdateBlockSize, obj.agentExeInfo.data.length - obj.agentUpdate.ptr);
255 + const len = Math.min(agentUpdateBlockSize, obj.agentExeInfo.data.length - obj.agentUpdate.ptr);
256 if (len > 0) {
257 // Send the first block
258 obj.agentExeInfo.data.copy(obj.agentUpdate.buf, 4, obj.agentUpdate.ptr, obj.agentUpdate.ptr + len);
@@ -265,50 +260,49 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
260 obj.send(obj.agentUpdate.buf); // Command 14, mesh agent first data block
261 } else {
262 // Error
268 - obj.parent.parent.taskLimiter.completed(obj.agentUpdate.taskid); // Indicate this task complete
269 - obj.agentUpdate = null;
263 + parent.parent.taskLimiter.completed(obj.agentUpdate.taskid); // Indicate this task complete
264 + delete obj.agentUpdate;
265 }
266 }
267 }, null, 1);
268
269 } else {
270 // Check the mesh core, if the agent is capable of running one
276 - if (((obj.agentInfo.capabilities & 16) != 0) && (obj.parent.parent.meshAgentsArchitectureNumbers[obj.agentInfo.agentId].core != null)) {
277 - obj.send(obj.common.ShortToStr(11) + obj.common.ShortToStr(0)); // Command 11, ask for mesh core hash.
271 + if (((obj.agentInfo.capabilities & 16) != 0) && (parent.parent.meshAgentsArchitectureNumbers[obj.agentInfo.agentId].core != null)) {
272 + obj.send(common.ShortToStr(11) + common.ShortToStr(0)); // Command 11, ask for mesh core hash.
273 }
274 }
275 }
276 }
277 else if (cmdid == 14) { // MeshCommand_AgentBinaryBlock
278 if ((msg.length == 4) && (obj.agentUpdate != null)) {
284 - var status = obj.common.ReadShort(msg, 2);
279 + const status = common.ReadShort(msg, 2);
280 if (status == 1) {
281 if (obj.agentExeInfo.data == null) {
282 // Read the agent from disk
288 - var len = -1;
289 - try { len = obj.fs.readSync(obj.agentUpdate.fd, obj.agentUpdate.buf, 4, agentUpdateBlockSize, obj.agentUpdate.ptr); } catch (e) { }
290 - if (len == -1) {
291 - // Error reading the agent file, stop here.
292 - obj.fs.close(obj.agentUpdate.fd);
293 - obj.parent.parent.taskLimiter.completed(obj.agentUpdate.taskid); // Indicate this task complete
294 - obj.agentUpdate = null;
295 - } else {
296 - // Send the next block to the agent
297 - obj.agentUpdate.ptr += len;
298 - //console.log("Agent update send next block", obj.agentUpdate.ptr, len);
299 - if (len == agentUpdateBlockSize) { obj.send(obj.agentUpdate.buf); } else { obj.send(obj.agentUpdate.buf.slice(0, len + 4)); } // Command 14, mesh agent next data block
300 -
301 - if (len < agentUpdateBlockSize) {
302 - //console.log("Agent update sent from disk.");
303 - obj.send(obj.common.ShortToStr(13) + obj.common.ShortToStr(0) + obj.common.hex2rstr(obj.agentExeInfo.hash)); // Command 13, end mesh agent download, send agent SHA384 hash
304 - obj.fs.close(obj.agentUpdate.fd);
305 - obj.parent.parent.taskLimiter.completed(obj.agentUpdate.taskid); // Indicate this task complete
306 - obj.agentUpdate = null;
283 + parent.fs.read(obj.agentUpdate.fd, obj.agentUpdate.buf, 4, agentUpdateBlockSize, obj.agentUpdate.ptr, function (err, bytesRead, buffer) {
284 + if ((err != null) || (bytesRead < 0)) {
285 + // Error reading the agent file, stop here.
286 + try { parent.fs.close(obj.agentUpdate.fd); } catch (ex) { }
287 + parent.parent.taskLimiter.completed(obj.agentUpdate.taskid); // Indicate this task complete
288 + delete obj.agentUpdate;
289 + } else {
290 + // Send the next block to the agent
291 + obj.agentUpdate.ptr += bytesRead;
292 + //console.log("Agent update send next block", obj.agentUpdate.ptr, bytesRead);
293 + if (bytesRead == agentUpdateBlockSize) { obj.send(obj.agentUpdate.buf); } else { obj.send(obj.agentUpdate.buf.slice(0, bytesRead + 4)); } // Command 14, mesh agent next data block
294 + if (bytesRead < agentUpdateBlockSize) {
295 + //console.log("Agent update sent from disk.");
296 + obj.send(common.ShortToStr(13) + common.ShortToStr(0) + obj.agentExeInfo.hash); // Command 13, end mesh agent download, send agent SHA384 hash
297 + try { parent.fs.close(obj.agentUpdate.fd); } catch (ex) { }
298 + parent.parent.taskLimiter.completed(obj.agentUpdate.taskid); // Indicate this task complete
299 + delete obj.agentUpdate;
300 + }
301 }
308 - }
302 + });
303 } else {
304 // Send the agent from RAM
311 - var len = Math.min(agentUpdateBlockSize, obj.agentExeInfo.data.length - obj.agentUpdate.ptr);
305 + const len = Math.min(agentUpdateBlockSize, obj.agentExeInfo.data.length - obj.agentUpdate.ptr);
306 if (len > 0) {
307 obj.agentExeInfo.data.copy(obj.agentUpdate.buf, 4, obj.agentUpdate.ptr, obj.agentUpdate.ptr + len);
308 if (len == agentUpdateBlockSize) { obj.send(obj.agentUpdate.buf); } else { obj.send(obj.agentUpdate.buf.slice(0, len + 4)); } // Command 14, mesh agent next data block
@@ -317,9 +311,9 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
311
312 if (obj.agentUpdate.ptr == obj.agentExeInfo.data.length) {
313 //console.log("Agent update sent from RAM.");
320 - obj.send(obj.common.ShortToStr(13) + obj.common.ShortToStr(0) + obj.common.hex2rstr(obj.agentExeInfo.hash)); // Command 13, end mesh agent download, send agent SHA384 hash
321 - obj.parent.parent.taskLimiter.completed(obj.agentUpdate.taskid); // Indicate this task complete
322 - obj.agentUpdate = null;
314 + obj.send(common.ShortToStr(13) + common.ShortToStr(0) + obj.agentExeInfo.hash); // Command 13, end mesh agent download, send agent SHA384 hash
315 + parent.parent.taskLimiter.completed(obj.agentUpdate.taskid); // Indicate this task complete
316 + delete obj.agentUpdate;
317 }
318 }
319 }
@@ -331,19 +325,19 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
325 ChangeAgentTag(tag);
326 }
327 } else if (obj.authenticated < 2) { // We are not authenticated
334 - var cmd = obj.common.ReadShort(msg, 0);
328 + const cmd = common.ReadShort(msg, 0);
329 if (cmd == 1) {
330 // Agent authentication request
331 if ((msg.length != 98) || ((obj.receivedCommands & 1) != 0)) return;
332 obj.receivedCommands += 1; // Agent can't send the same command twice on the same connection ever. Block DOS attack path.
333
340 - if (obj.args.ignoreagenthashcheck === true) {
334 + if (args.ignoreagenthashcheck === true) {
335 // Send the agent web hash back to the agent
342 - obj.send(obj.common.ShortToStr(1) + msg.substring(2, 50) + obj.nonce); // Command 1, hash + nonce. Use the web hash given by the agent.
336 + obj.send(common.ShortToStr(1) + msg.substring(2, 50) + obj.nonce); // Command 1, hash + nonce. Use the web hash given by the agent.
337 } else {
338 // Check that the server hash matches our own web certificate hash (SHA384)
345 - if ((getWebCertHash(obj.domain) != msg.substring(2, 50)) && (getWebCertFullHash(obj.domain) != msg.substring(2, 50))) {
346 - console.log('Agent bad web cert hash (Agent:' + (Buffer.from(msg.substring(2, 50), 'binary').toString('hex').substring(0, 10)) + ' != Server:' + (Buffer.from(getWebCertHash(obj.domain), 'binary').toString('hex').substring(0, 10)) + ' or ' + (new Buffer(getWebCertFullHash(obj.domain), 'binary').toString('hex').substring(0, 10)) + '), holding connection (' + obj.remoteaddrport + ').');
339 + if ((getWebCertHash(domain) != msg.substring(2, 50)) && (getWebCertFullHash(domain) != msg.substring(2, 50))) {
340 + console.log('Agent bad web cert hash (Agent:' + (Buffer.from(msg.substring(2, 50), 'binary').toString('hex').substring(0, 10)) + ' != Server:' + (Buffer.from(getWebCertHash(domain), 'binary').toString('hex').substring(0, 10)) + ' or ' + (new Buffer(getWebCertFullHash(domain), 'binary').toString('hex').substring(0, 10)) + '), holding connection (' + obj.remoteaddrport + ').');
341 console.log('Agent reported web cert hash:' + (Buffer.from(msg.substring(2, 50), 'binary').toString('hex')) + '.');
342 return;
343 }
@@ -357,15 +351,15 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
351 // If we did not get an indication that the agent already validated this server, send the server signature.
352 if (obj.useSwarmCert == true) {
353 // Perform the hash signature using older swarm server certificate
360 - obj.parent.parent.certificateOperations.acceleratorPerformSignature(1, msg.substring(2) + obj.nonce, obj, function (obj2, signature) {
354 + parent.parent.certificateOperations.acceleratorPerformSignature(1, msg.substring(2) + obj.nonce, obj, function (obj2, signature) {
355 // Send back our certificate + signature
362 - obj2.send(obj2.common.ShortToStr(2) + obj2.common.ShortToStr(obj2.parent.swarmCertificateAsn1.length) + obj2.parent.swarmCertificateAsn1 + signature); // Command 2, certificate + signature
356 + obj2.send(common.ShortToStr(2) + common.ShortToStr(obj2.parent.swarmCertificateAsn1.length) + obj2.parent.swarmCertificateAsn1 + signature); // Command 2, certificate + signature
357 });
358 } else {
359 // Perform the hash signature using the server agent certificate
366 - obj.parent.parent.certificateOperations.acceleratorPerformSignature(0, msg.substring(2) + obj.nonce, obj, function (obj2, signature) {
360 + parent.parent.certificateOperations.acceleratorPerformSignature(0, msg.substring(2) + obj.nonce, obj, function (obj2, signature) {
361 // Send back our certificate + signature
368 - obj2.send(obj2.common.ShortToStr(2) + obj2.common.ShortToStr(obj2.parent.agentCertificateAsn1.length) + obj2.parent.agentCertificateAsn1 + signature); // Command 2, certificate + signature
362 + obj2.send(common.ShortToStr(2) + common.ShortToStr(obj2.parent.agentCertificateAsn1.length) + obj2.parent.agentCertificateAsn1 + signature); // Command 2, certificate + signature
363 });
364 }
365 }
@@ -381,9 +375,9 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
375 obj.receivedCommands += 2; // Agent can't send the same command twice on the same connection ever. Block DOS attack path.
376
377 // Decode the certificate
384 - var certlen = obj.common.ReadShort(msg, 2);
378 + const certlen = common.ReadShort(msg, 2);
379 obj.unauth = {};
386 - try { obj.unauth.nodeid = Buffer.from(obj.forge.pki.getPublicKeyFingerprint(obj.forge.pki.certificateFromAsn1(obj.forge.asn1.fromDer(msg.substring(4, 4 + certlen))).publicKey, { md: obj.forge.md.sha384.create() }).data, 'binary').toString('base64').replace(/\+/g, '@').replace(/\//g, '$'); } catch (ex) { console.log(ex); return; }
380 + try { obj.unauth.nodeid = Buffer.from(forge.pki.getPublicKeyFingerprint(forge.pki.certificateFromAsn1(forge.asn1.fromDer(msg.substring(4, 4 + certlen))).publicKey, { md: forge.md.sha384.create() }).data, 'binary').toString('base64').replace(/\+/g, '@').replace(/\//g, '$'); } catch (ex) { console.log(ex); return; }
381 obj.unauth.nodeCertPem = '-----BEGIN CERTIFICATE-----\r\n' + Buffer.from(msg.substring(4, 4 + certlen), 'binary').toString('base64') + '\r\n-----END CERTIFICATE-----';
382
383 // Check the agent signature if we can
@@ -397,10 +391,10 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
391
392 // Set the meshid
393 obj.agentInfo = {};
400 - obj.agentInfo.infoVersion = obj.common.ReadInt(msg, 2);
401 - obj.agentInfo.agentId = obj.common.ReadInt(msg, 6);
402 - obj.agentInfo.agentVersion = obj.common.ReadInt(msg, 10);
403 - obj.agentInfo.platformType = obj.common.ReadInt(msg, 14);
394 + obj.agentInfo.infoVersion = common.ReadInt(msg, 2);
395 + obj.agentInfo.agentId = common.ReadInt(msg, 6);
396 + obj.agentInfo.agentVersion = common.ReadInt(msg, 10);
397 + obj.agentInfo.platformType = common.ReadInt(msg, 14);
398 if (obj.agentInfo.platformType > 6 || obj.agentInfo.platformType < 1) { obj.agentInfo.platformType = 1; }
399 if (msg.substring(50, 66) == '\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0') {
400 obj.meshid = Buffer.from(msg.substring(18, 50), 'binary').toString('hex'); // Older HEX MeshID
@@ -408,10 +402,10 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
402 obj.meshid = Buffer.from(msg.substring(18, 66), 'binary').toString('base64').replace(/\+/g, '@').replace(/\//g, '$'); // New Base64 MeshID
403 }
404 //console.log('MeshID', obj.meshid);
411 - obj.agentInfo.capabilities = obj.common.ReadInt(msg, 66);
412 - var computerNameLen = obj.common.ReadShort(msg, 70);
405 + obj.agentInfo.capabilities = common.ReadInt(msg, 66);
406 + const computerNameLen = common.ReadShort(msg, 70);
407 obj.agentInfo.computerName = msg.substring(72, 72 + computerNameLen);
414 - obj.dbMeshKey = 'mesh/' + obj.domain.id + '/' + obj.meshid;
408 + obj.dbMeshKey = 'mesh/' + domain.id + '/' + obj.meshid;
409 completeAgentConnection();
410 } else if (cmd == 4) {
411 if ((msg.length < 2) || ((obj.receivedCommands & 8) != 0)) return;
@@ -419,7 +413,7 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
413 // Agent already authenticated the server, wants to skip the server signature - which is great for server performance.
414 } else if (cmd == 5) {
415 // ServerID. Agent is telling us what serverid it expects. Useful if we have many server certificates.
422 - if ((msg.substring(2, 34) == obj.parent.swarmCertificateHash256) || (msg.substring(2, 50) == obj.parent.swarmCertificateHash384)) { obj.useSwarmCert = true; }
416 + if ((msg.substring(2, 34) == parent.swarmCertificateHash256) || (msg.substring(2, 50) == parent.swarmCertificateHash384)) { obj.useSwarmCert = true; }
417 }
418 }
419 });
@@ -430,49 +424,47 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
424 // If the mesh agent web socket is closed, clean up.
425 ws.on('close', function (req) {
426 if (obj.nodeid != null) {
433 - var agentId = 'Unknown';
434 - if (obj.agentInfo && obj.agentInfo.agentId) { agentId = obj.agentInfo.agentId; }
427 + const agentId = (obj.agentInfo && obj.agentInfo.agentId) ? obj.agentInfo.agentId : 'Unknown';
428 //console.log('Agent disconnect ' + obj.nodeid + ' (' + obj.remoteaddrport + ') id=' + agentId);
436 - obj.parent.parent.debug(1, 'Agent disconnect ' + obj.nodeid + ' (' + obj.remoteaddrport + ') id=' + agentId);
429 + parent.parent.debug(1, 'Agent disconnect ' + obj.nodeid + ' (' + obj.remoteaddrport + ') id=' + agentId);
430
431 // Log the agent disconnection
439 - if (obj.parent.wsagentsDisconnections[obj.nodeid] == null) {
440 - obj.parent.wsagentsDisconnections[obj.nodeid] = 1;
432 + if (parent.wsagentsDisconnections[obj.nodeid] == null) {
433 + parent.wsagentsDisconnections[obj.nodeid] = 1;
434 } else {
442 - obj.parent.wsagentsDisconnections[obj.nodeid] = ++obj.parent.wsagentsDisconnections[obj.nodeid];
435 + parent.wsagentsDisconnections[obj.nodeid] = ++parent.wsagentsDisconnections[obj.nodeid];
436 }
437 }
438 obj.close(0);
439 });
447 - // obj.ws._socket._parent.on('close', function (req) { if (obj.nodeid != null) { obj.parent.parent.debug(1, 'Agent TCP disconnect ' + obj.nodeid + ' (' + obj.remoteaddrport + ')'); } });
440 + // ws._socket._parent.on('close', function (req) { if (obj.nodeid != null) { parent.parent.debug(1, 'Agent TCP disconnect ' + obj.nodeid + ' (' + obj.remoteaddrport + ')'); } });
441
442 // Start authenticate the mesh agent by sending a auth nonce & server TLS cert hash.
443 // Send 384 bits SHA384 hash of TLS cert public key + 384 bits nonce
451 - obj.nonce = obj.parent.crypto.randomBytes(48).toString('binary');
452 - if (obj.args.ignoreagenthashcheck !== true) {
453 - obj.send(obj.common.ShortToStr(1) + getWebCertHash(obj.domain) + obj.nonce); // Command 1, hash + nonce
444 + if (args.ignoreagenthashcheck !== true) {
445 + obj.send(common.ShortToStr(1) + getWebCertHash(domain) + obj.nonce); // Command 1, hash + nonce
446 }
447
448 // Return the mesh for this device, in some cases, we may auto-create the mesh.
449 function getMeshAutoCreate() {
458 - var mesh = obj.parent.meshes[obj.dbMeshKey];
459 - if ((mesh == null) && (typeof obj.domain.orphanagentuser == 'string')) {
460 - var adminUser = obj.parent.users['user/' + domain.id + '/' + obj.domain.orphanagentuser.toLowerCase()];
450 + const mesh = parent.meshes[obj.dbMeshKey];
451 + if ((mesh == null) && (typeof domain.orphanagentuser == 'string')) {
452 + const adminUser = parent.users['user/' + domain.id + '/' + domain.orphanagentuser.toLowerCase()];
453 if ((adminUser != null) && (adminUser.siteadmin == 0xFFFFFFFF)) {
454 // Mesh name is hex instead of base64
463 - var meshname = obj.meshid.substring(0, 18);
455 + const meshname = obj.meshid.substring(0, 18);
456
457 // Create a new mesh for this device
466 - var links = {};
458 + const links = {};
459 links[adminUser._id] = { name: adminUser.name, rights: 0xFFFFFFFF };
460 mesh = { type: 'mesh', _id: obj.dbMeshKey, name: meshname, mtype: 2, desc: '', domain: domain.id, links: links };
469 - obj.db.Set(obj.common.escapeLinksFieldName(mesh));
470 - obj.parent.meshes[obj.dbMeshKey] = mesh;
461 + db.Set(common.escapeLinksFieldName(mesh));
462 + parent.meshes[obj.dbMeshKey] = mesh;
463
464 if (adminUser.links == null) adminUser.links = {};
465 adminUser.links[obj.dbMeshKey] = { rights: 0xFFFFFFFF };
474 - obj.db.SetUser(adminUser);
475 - obj.parent.parent.DispatchEvent(['*', obj.dbMeshKey, adminUser._id], obj, { etype: 'mesh', username: adminUser.name, meshid: obj.dbMeshKey, name: meshname, mtype: 2, desc: '', action: 'createmesh', links: links, msg: 'Mesh created: ' + obj.meshid, domain: domain.id });
466 + db.SetUser(adminUser);
467 + parent.parent.DispatchEvent(['*', obj.dbMeshKey, adminUser._id], obj, { etype: 'mesh', username: adminUser.name, meshid: obj.dbMeshKey, name: meshname, mtype: 2, desc: '', action: 'createmesh', links: links, msg: 'Mesh created: ' + obj.meshid, domain: domain.id });
468 }
469 } else {
470 if ((mesh != null) && (mesh.deleted != null) && (mesh.links)) {
@@ -481,23 +473,23 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
473
474 // See if users still exists, if so, add links to the mesh
475 for (var userid in mesh.links) {
484 - var user = obj.parent.users[userid];
476 + const user = parent.users[userid];
477 if (user) {
478 if (user.links == null) { user.links = {}; }
479 if (user.links[mesh._id] == null) {
480 user.links[mesh._id] = { rights: mesh.links[userid].rights };
481 ids.push(user._id);
490 - obj.db.SetUser(user);
482 + db.SetUser(user);
483 }
484 }
485 }
486
487 // Send out an event indicating this mesh was "created"
496 - obj.parent.parent.DispatchEvent(ids, obj, { etype: 'mesh', meshid: mesh._id, name: mesh.name, mtype: mesh.mtype, desc: mesh.desc, action: 'createmesh', links: mesh.links, msg: 'Mesh undeleted: ' + mesh._id, domain: domain.id });
488 + parent.parent.DispatchEvent(ids, obj, { etype: 'mesh', meshid: mesh._id, name: mesh.name, mtype: mesh.mtype, desc: mesh.desc, action: 'createmesh', links: mesh.links, msg: 'Mesh undeleted: ' + mesh._id, domain: domain.id });
489
490 // Mark the mesh as active
491 delete mesh.deleted;
500 - obj.db.Set(obj.common.escapeLinksFieldName(mesh));
492 + db.Set(common.escapeLinksFieldName(mesh));
493 }
494 }
495 return mesh;
@@ -512,7 +504,7 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
504 if (typeof domain.limits.maxagentsessions == 'number') {
505 // Count the number of agent sessions for this domain
506 var domainAgentSessionCount = 0;
515 - for (var i in obj.parent.wsagents) { if (obj.parent.wsagents[i].domain.id == domain.id) { domainAgentSessionCount++; } }
507 + for (var i in parent.wsagents) { if (parent.wsagents[i].domain.id == domain.id) { domainAgentSessionCount++; } }
508
509 // Check if we have too many user sessions
510 if (domainAgentSessionCount >= domain.limits.maxagentsessions) { return; } // Too many, hold the connection.
@@ -520,26 +512,26 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
512
513 /*
514 // Check that the mesh exists
523 - var mesh = obj.parent.meshes[obj.dbMeshKey];
515 + var mesh = parent.meshes[obj.dbMeshKey];
516 if (mesh == null) {
517 var holdConnection = true;
526 - if (typeof obj.domain.orphanagentuser == 'string') {
527 - var adminUser = obj.parent.users['user/' + domain.id + '/' + obj.args.orphanagentuser];
518 + if (typeof domain.orphanagentuser == 'string') {
519 + var adminUser = parent.users['user/' + domain.id + '/' + args.orphanagentuser];
520 if ((adminUser != null) && (adminUser.siteadmin == 0xFFFFFFFF)) {
521 // Create a new mesh for this device
522 holdConnection = false;
523 var links = {};
524 links[user._id] = { name: adminUser.name, rights: 0xFFFFFFFF };
525 mesh = { type: 'mesh', _id: obj.dbMeshKey, name: obj.meshid, mtype: 2, desc: '', domain: domain.id, links: links };
534 - obj.db.Set(obj.common.escapeLinksFieldName(mesh));
535 - obj.parent.meshes[obj.meshid] = mesh;
536 - obj.parent.parent.AddEventDispatch([obj.meshid], ws);
526 + db.Set(common.escapeLinksFieldName(mesh));
527 + parent.meshes[obj.meshid] = mesh;
528 + parent.parent.AddEventDispatch([obj.meshid], ws);
529
530 if (adminUser.links == null) user.links = {};
531 adminUser.links[obj.meshid] = { rights: 0xFFFFFFFF };
540 - //adminUser.subscriptions = obj.parent.subscribe(adminUser._id, ws);
541 - obj.db.SetUser(user);
542 - obj.parent.parent.DispatchEvent(['*', meshid, user._id], obj, { etype: 'mesh', username: user.name, meshid: obj.meshid, name: obj.meshid, mtype: 2, desc: '', action: 'createmesh', links: links, msg: 'Mesh created: ' + obj.meshid, domain: domain.id });
532 + //adminUser.subscriptions = parent.subscribe(adminUser._id, ws);
533 + db.SetUser(user);
534 + parent.parent.DispatchEvent(['*', meshid, user._id], obj, { etype: 'mesh', username: user.name, meshid: obj.meshid, name: obj.meshid, mtype: 2, desc: '', action: 'createmesh', links: links, msg: 'Mesh created: ' + obj.meshid, domain: domain.id });
535 }
536 }
537
@@ -553,7 +545,7 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
545 */
546
547 // Check that the node exists
556 - obj.db.Get(obj.dbNodeKey, function (err, nodes) {
548 + db.Get(obj.dbNodeKey, function (err, nodes) {
549 var device;
550
551 // See if this node exists in the database
@@ -561,7 +553,7 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
553 // This device does not exist, use the meshid given by the device
554
555 // See if this mesh exists, if it does not we may want to create it.
564 - var mesh = getMeshAutoCreate();
556 + const mesh = getMeshAutoCreate();
557
558 // Check if the mesh exists
559 if (mesh == null) {
@@ -579,18 +571,18 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
571
572 // Mark when this device connected
573 obj.connectTime = Date.now();
582 - obj.db.Set({ _id: 'lc' + obj.dbNodeKey, type: 'lastconnect', domain: domain.id, time: obj.connectTime, addr: obj.remoteaddrport });
574 + db.Set({ _id: 'lc' + obj.dbNodeKey, type: 'lastconnect', domain: domain.id, time: obj.connectTime, addr: obj.remoteaddrport });
575
576 // This node does not exist, create it.
577 device = { type: 'node', mtype: mesh.mtype, _id: obj.dbNodeKey, icon: obj.agentInfo.platformType, meshid: obj.dbMeshKey, name: obj.agentInfo.computerName, rname: obj.agentInfo.computerName, domain: domain.id, agent: { ver: obj.agentInfo.agentVersion, id: obj.agentInfo.agentId, caps: obj.agentInfo.capabilities }, host: null };
586 - obj.db.Set(device);
578 + db.Set(device);
579
580 // Event the new node
581 if (obj.agentInfo.capabilities & 0x20) {
582 // This is a temporary agent, don't log.
591 - obj.parent.parent.DispatchEvent(['*', obj.dbMeshKey], obj, { etype: 'node', action: 'addnode', node: device, domain: domain.id, nolog: 1 });
583 + parent.parent.DispatchEvent(['*', obj.dbMeshKey], obj, { etype: 'node', action: 'addnode', node: device, domain: domain.id, nolog: 1 });
584 } else {
593 - obj.parent.parent.DispatchEvent(['*', obj.dbMeshKey], obj, { etype: 'node', action: 'addnode', node: device, msg: ('Added device ' + obj.agentInfo.computerName + ' to mesh ' + mesh.name), domain: domain.id });
585 + parent.parent.DispatchEvent(['*', obj.dbMeshKey], obj, { etype: 'node', action: 'addnode', node: device, msg: ('Added device ' + obj.agentInfo.computerName + ' to mesh ' + mesh.name), domain: domain.id });
586 }
587 } else {
588 device = nodes[0];
@@ -602,7 +594,7 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
594 }
595
596 // See if this mesh exists, if it does not we may want to create it.
605 - var mesh = getMeshAutoCreate();
597 + const mesh = getMeshAutoCreate();
598
599 // Check if the mesh exists
600 if (mesh == null) {
@@ -620,7 +612,7 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
612
613 // Mark when this device connected
614 obj.connectTime = Date.now();
623 - obj.db.Set({ _id: 'lc' + obj.dbNodeKey, type: 'lastconnect', domain: domain.id, time: obj.connectTime, addr: obj.remoteaddrport });
615 + db.Set({ _id: 'lc' + obj.dbNodeKey, type: 'lastconnect', domain: domain.id, time: obj.connectTime, addr: obj.remoteaddrport });
616
617 // Device already exists, look if changes has occured
618 var changes = [], change = 0, log = 0;
@@ -630,7 +622,7 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
622 if (device.agent.id != obj.agentInfo.agentId) { device.agent.id = obj.agentInfo.agentId; change = 1; changes.push('agent type'); }
623 if ((device.agent.caps & 24) != (obj.agentInfo.capabilities & 24)) { device.agent.caps = obj.agentInfo.capabilities; change = 1; changes.push('agent capabilities'); } // If agent console or javascript support changes, update capabilities
624 if (change == 1) {
633 - obj.db.Set(device);
625 + db.Set(device);
626
627 // If this is a temporary device, don't log changes
628 if (obj.agentInfo.capabilities & 0x20) { log = 0; }
@@ -638,23 +630,23 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
630 // Event the node change
631 var event = { etype: 'node', action: 'changenode', nodeid: obj.dbNodeKey, domain: domain.id };
632 if (log == 0) { event.nolog = 1; } else { event.msg = 'Changed device ' + device.name + ' from group ' + mesh.name + ': ' + changes.join(', '); }
641 - var device2 = obj.common.Clone(device);
633 + const device2 = common.Clone(device);
634 if (device2.intelamt && device2.intelamt.pass) delete device2.intelamt.pass; // Remove the Intel AMT password before eventing this.
635 event.node = device;
644 - obj.parent.parent.DispatchEvent(['*', device.meshid], obj, event);
636 + parent.parent.DispatchEvent(['*', device.meshid], obj, event);
637 }
638 }
639
640 // Check if this agent is already connected
649 - var dupAgent = obj.parent.wsagents[obj.dbNodeKey];
650 - obj.parent.wsagents[obj.dbNodeKey] = obj;
641 + const dupAgent = parent.wsagents[obj.dbNodeKey];
642 + parent.wsagents[obj.dbNodeKey] = obj;
643 if (dupAgent) {
644 // Close the duplicate agent
653 - if (obj.nodeid != null) { obj.parent.parent.debug(1, 'Duplicate agent ' + obj.nodeid + ' (' + obj.remoteaddrport + ')'); }
645 + if (obj.nodeid != null) { parent.parent.debug(1, 'Duplicate agent ' + obj.nodeid + ' (' + obj.remoteaddrport + ')'); }
646 dupAgent.close(3);
647 } else {
648 // Indicate the agent is connected
657 - obj.parent.parent.SetConnectivityState(obj.dbMeshKey, obj.dbNodeKey, obj.connectTime, 1, 1);
649 + parent.parent.SetConnectivityState(obj.dbMeshKey, obj.dbNodeKey, obj.connectTime, 1, 1);
650 }
651
652 // We are done, ready to communicate with this agent
@@ -662,7 +654,7 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
654 obj.authenticated = 2;
655
656 // Check how many times this agent disconnected in the last few minutes.
665 - var disconnectCount = obj.parent.wsagentsDisconnections[obj.nodeid];
657 + const disconnectCount = parent.wsagentsDisconnections[obj.nodeid];
658 if (disconnectCount > 6) {
659 console.log('Agent in big trouble: NodeId=' + obj.nodeid + ', IP=' + obj.remoteaddrport + ', Agent=' + obj.agentInfo.agentId + '.');
660 // TODO: Log or do something to recover?
@@ -670,11 +662,11 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
662 }
663
664 // Command 4, inform mesh agent that it's authenticated.
673 - obj.send(obj.common.ShortToStr(4));
665 + obj.send(common.ShortToStr(4));
666
667 if (disconnectCount > 4) {
668 // Too many disconnections, this agent has issues. Just clear the core.
677 - obj.send(obj.common.ShortToStr(10) + obj.common.ShortToStr(0));
669 + obj.send(common.ShortToStr(10) + common.ShortToStr(0));
670 //console.log('Agent in trouble: NodeId=' + obj.nodeid + ', IP=' + obj.remoteaddrport + ', Agent=' + obj.agentInfo.agentId + '.');
671 // TODO: Log or do something to recover?
672 return;
@@ -682,20 +674,20 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
674
675 if ((obj.agentInfo.capabilities & 64) != 0) {
676 // This is a recovery agent
685 - obj.send(obj.common.ShortToStr(11) + obj.common.ShortToStr(0)); // Command 11, ask for mesh core hash.
677 + obj.send(common.ShortToStr(11) + common.ShortToStr(0)); // Command 11, ask for mesh core hash.
678 } else {
679 // Check if we need to make an native update check
688 - obj.agentExeInfo = obj.parent.parent.meshAgentBinaries[obj.agentInfo.agentId];
689 - const corename = obj.parent.parent.meshAgentsArchitectureNumbers[obj.agentInfo.agentId].core;
690 - if (corename == null) { obj.send(obj.common.ShortToStr(10) + obj.common.ShortToStr(0)); } // MeshCommand_CoreModule, ask mesh agent to clear the core
680 + obj.agentExeInfo = parent.parent.meshAgentBinaries[obj.agentInfo.agentId];
681 + const corename = parent.parent.meshAgentsArchitectureNumbers[obj.agentInfo.agentId].core;
682 + if (corename == null) { obj.send(common.ShortToStr(10) + common.ShortToStr(0)); } // MeshCommand_CoreModule, ask mesh agent to clear the core
683
684 if ((obj.agentExeInfo != null) && (obj.agentExeInfo.update == true)) {
685 // Ask the agent for it's executable binary hash
694 - obj.send(obj.common.ShortToStr(12) + obj.common.ShortToStr(0));
686 + obj.send(common.ShortToStr(12) + common.ShortToStr(0));
687 } else {
688 // Check the mesh core, if the agent is capable of running one
689 if (((obj.agentInfo.capabilities & 16) != 0) && (corename != null)) {
698 - obj.send(obj.common.ShortToStr(11) + obj.common.ShortToStr(0)); // Command 11, ask for mesh core hash.
690 + obj.send(common.ShortToStr(11) + common.ShortToStr(0)); // Command 11, ask for mesh core hash.
691 } else {
692 agentCoreIsStable(); // No updates needed, agent is ready to go.
693 }
@@ -715,35 +707,33 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
707 }
708
709 obj.sendUpdatedIntelAmtPolicy = function() {
718 - var mesh = obj.parent.meshes[obj.dbMeshKey];
710 + const mesh = parent.meshes[obj.dbMeshKey];
711 if (mesh != null) {
712 // Send Intel AMT policy
721 - var amtPolicy = null;
722 - if (mesh.amt != null) { amtPolicy = mesh.amt; }
713 + const amtPolicy = (mesh.amt != null) ? mesh.amt : null;
714 obj.send(JSON.stringify({ action: 'amtPolicy', amtPolicy: amtPolicy }));
715 }
716 }
717
718 function agentCoreIsStable() {
719 // Check that the mesh exists
729 - var mesh = obj.parent.meshes[obj.dbMeshKey];
720 + const mesh = parent.meshes[obj.dbMeshKey];
721 if (mesh == null) {
722 // TODO: Mark this agent as part of a mesh that does not exists.
723 return; // Probably not worth doing anything else. Hold this agent.
724 }
725
726 // Send Intel AMT policy
736 - var amtPolicy = null;
737 - if (mesh.amt != null) { amtPolicy = mesh.amt; }
727 + const amtPolicy = (mesh.amt != null) ? mesh.amt : null;
728 obj.send(JSON.stringify({ action: 'amtPolicy', amtPolicy: amtPolicy }));
729
730 // Do this if IP location is enabled on this domain TODO: Set IP location per device group?
731 if (domain.iplocation == true) {
732 // Check if we already have IP location information for this node
743 - obj.db.Get('iploc_' + obj.remoteaddr, function (err, iplocs) {
733 + db.Get('iploc_' + obj.remoteaddr, function (err, iplocs) {
734 if (iplocs.length == 1) {
735 // We have a location in the database for this remote IP
746 - var iploc = nodes[0], x = {};
736 + const iploc = nodes[0], x = {};
737 if ((iploc != null) && (iploc.ip != null) && (iploc.loc != null)) {
738 x.publicip = iploc.ip;
739 x.iploc = iploc.loc + ',' + (Math.floor((new Date(iploc.date)) / 1000));
@@ -755,7 +745,7 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
745 if (device.iploc == null) {
746 doIpLocation = 1;
747 } else {
758 - var loc = device.iploc.split(',');
748 + const loc = device.iploc.split(',');
749 if (loc.length < 3) {
750 doIpLocation = 2;
751 } else {
@@ -767,10 +757,10 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
757
758 // If we need to ask for IP location, see if we have the quota to do it.
759 if (doIpLocation > 0) {
770 - obj.db.getValueOfTheDay('ipLocationRequestLimitor', 10, function (ipLocationLimitor) {
760 + db.getValueOfTheDay('ipLocationRequestLimitor', 10, function (ipLocationLimitor) {
761 if (ipLocationLimitor.value > 0) {
762 ipLocationLimitor.value--;
773 - obj.db.Set(ipLocationLimitor);
763 + db.Set(ipLocationLimitor);
764 obj.send(JSON.stringify({ action: 'iplocation' }));
765 }
766 });
@@ -782,41 +772,41 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
772
773 // Get the web certificate private key hash for the specified domain
774 function getWebCertHash(domain) {
785 - var hash = obj.parent.webCertificateHashs[domain.id];
775 + const hash = parent.webCertificateHashs[domain.id];
776 if (hash != null) return hash;
787 - return obj.parent.webCertificateHash;
777 + return parent.webCertificateHash;
778 }
779
780 // Get the web certificate hash for the specified domain
781 function getWebCertFullHash(domain) {
792 - var hash = obj.parent.webCertificateFullHashs[domain.id];
782 + const hash = parent.webCertificateFullHashs[domain.id];
783 if (hash != null) return hash;
794 - return obj.parent.webCertificateFullHash;
784 + return parent.webCertificateFullHash;
785 }
786
787 // Verify the agent signature
788 function processAgentSignature(msg) {
799 - if (obj.args.ignoreagenthashcheck !== true) {
789 + if (args.ignoreagenthashcheck !== true) {
790 var verified = false;
791
792 if (msg.length != 384) {
793 // Verify a PKCS7 signature.
794 var msgDer = null;
805 - try { msgDer = obj.forge.asn1.fromDer(obj.forge.util.createBuffer(msg, 'binary')); } catch (ex) { }
795 + try { msgDer = forge.asn1.fromDer(forge.util.createBuffer(msg, 'binary')); } catch (ex) { }
796 if (msgDer != null) {
797 try {
808 - var p7 = obj.forge.pkcs7.messageFromAsn1(msgDer);
798 + var p7 = forge.pkcs7.messageFromAsn1(msgDer);
799 var sig = p7.rawCapture.signature;
800
801 // Verify with key hash
812 - var buf = Buffer.from(getWebCertHash(obj.domain) + obj.nonce + obj.agentnonce, 'binary');
813 - var verifier = obj.parent.crypto.createVerify('RSA-SHA384');
802 + var buf = Buffer.from(getWebCertHash(domain) + obj.nonce + obj.agentnonce, 'binary');
803 + var verifier = parent.crypto.createVerify('RSA-SHA384');
804 verifier.update(buf);
805 verified = verifier.verify(obj.unauth.nodeCertPem, sig, 'binary');
806 if (verified == false) {
807 // Verify with full hash
818 - buf = Buffer.from(getWebCertFullHash(obj.domain) + obj.nonce + obj.agentnonce, 'binary');
819 - verifier = obj.parent.crypto.createVerify('RSA-SHA384');
808 + buf = Buffer.from(getWebCertFullHash(domain) + obj.nonce + obj.agentnonce, 'binary');
809 + verifier = parent.crypto.createVerify('RSA-SHA384');
810 verifier.update(buf);
811 verified = verifier.verify(obj.unauth.nodeCertPem, sig, 'binary');
812 }
@@ -827,11 +817,11 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
817
818 if (verified == false) {
819 // Verify the RSA signature. This is the fast way, without using forge.
830 - const verify = obj.parent.crypto.createVerify('SHA384');
831 - verify.end(Buffer.from(getWebCertHash(obj.domain) + obj.nonce + obj.agentnonce, 'binary')); // Test using the private key hash
820 + const verify = parent.crypto.createVerify('SHA384');
821 + verify.end(Buffer.from(getWebCertHash(domain) + obj.nonce + obj.agentnonce, 'binary')); // Test using the private key hash
822 if (verify.verify(obj.unauth.nodeCertPem, Buffer.from(msg, 'binary')) !== true) {
833 - const verify2 = obj.parent.crypto.createVerify('SHA384');
834 - verify2.end(Buffer.from(getWebCertFullHash(obj.domain) + obj.nonce + obj.agentnonce, 'binary')); // Test using the full cert hash
823 + const verify2 = parent.crypto.createVerify('SHA384');
824 + verify2.end(Buffer.from(getWebCertFullHash(domain) + obj.nonce + obj.agentnonce, 'binary')); // Test using the full cert hash
825 if (verify2.verify(obj.unauth.nodeCertPem, Buffer.from(msg, 'binary')) !== true) { return false; }
826 }
827 }
@@ -843,16 +833,16 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
833 delete obj.nonce;
834 delete obj.agentnonce;
835 delete obj.unauth;
836 + delete obj.receivedCommands;
837 if (obj.unauthsign) delete obj.unauthsign;
847 - obj.parent.parent.debug(1, 'Verified agent connection to ' + obj.nodeid + ' (' + obj.remoteaddrport + ').');
838 + parent.parent.debug(1, 'Verified agent connection to ' + obj.nodeid + ' (' + obj.remoteaddrport + ').');
839 obj.authenticated = 1;
840 return true;
841 }
842
843 // Process incoming agent JSON data
844 function processAgentData(msg) {
854 - var i;
855 - var str = msg.toString('utf8'), command = null;
845 + var i, str = msg.toString('utf8'), command = null;
846 if (str[0] == '{') {
847 try { command = JSON.parse(str); } catch (ex) { console.log('Unable to parse agent JSON (' + obj.remoteaddrport + '): ' + str, ex); return; } // If the command can't be parsed, ignore it.
848 if (typeof command != 'object') { return; }
@@ -870,17 +860,17 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
860 //if (mesh.links[user._id] == null || ((mesh.links[user._id].rights & 16) == 0)) return; // TODO!!!!!!!!!!!!!!!!!!!!!
861
862 // See if the session is connected. If so, go ahead and send this message to the target node
873 - var ws = obj.parent.wssessions2[command.sessionid];
863 + var ws = parent.wssessions2[command.sessionid];
864 if (ws != null) {
865 command.nodeid = obj.dbNodeKey; // Set the nodeid, required for responses.
866 delete command.sessionid; // Remove the sessionid, since we are sending to that sessionid, so it's implyed.
867 try { ws.send(JSON.stringify(command)); } catch (ex) { }
878 - } else if (obj.parent.parent.multiServer != null) {
868 + } else if (parent.parent.multiServer != null) {
869 // See if we can send this to a peer server
880 - var serverid = obj.parent.wsPeerSessions2[command.sessionid];
870 + var serverid = parent.wsPeerSessions2[command.sessionid];
871 if (serverid != null) {
872 command.fromNodeid = obj.dbNodeKey;
883 - obj.parent.parent.multiServer.DispatchMessageSingleServer(command, serverid);
873 + parent.parent.multiServer.DispatchMessageSingleServer(command, serverid);
874 }
875 }
876 }
@@ -893,7 +883,7 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
883 //if (mesh.links[user._id] == null || ((mesh.links[user._id].rights & 16) == 0)) return; // TODO!!!!!!!!!!!!!!!!!!!!!
884
885 // See if the session is connected
896 - var sessions = obj.parent.wssessions[command.userid];
886 + var sessions = parent.wssessions[command.userid];
887
888 // Go ahead and send this message to the target node
889 if (sessions != null) {
@@ -902,19 +892,19 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
892 for (i in sessions) { sessions[i].send(JSON.stringify(command)); }
893 }
894
905 - if (obj.parent.parent.multiServer != null) {
895 + if (parent.parent.multiServer != null) {
896 // TODO: Add multi-server support
897 }
898 }
899 } else { // Route this command to the mesh
900 command.nodeid = obj.dbNodeKey;
901 var cmdstr = JSON.stringify(command);
912 - for (var userid in obj.parent.wssessions) { // Find all connected users for this mesh and send the message
913 - var user = obj.parent.users[userid];
902 + for (var userid in parent.wssessions) { // Find all connected users for this mesh and send the message
903 + var user = parent.users[userid];
904 if ((user != null) && (user.links != null)) {
905 var rights = user.links[obj.dbMeshKey];
906 if (rights != null) { // TODO: Look at what rights are needed for message routing
917 - var xsessions = obj.parent.wssessions[userid];
907 + var xsessions = parent.wssessions[userid];
908 // Send the message to all users on this server
909 for (i in xsessions) { try { xsessions[i].send(cmdstr); } catch (e) { } }
910 }
@@ -922,11 +912,11 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
912 }
913
914 // Send the message to all users of other servers
925 - if (obj.parent.parent.multiServer != null) {
915 + if (parent.parent.multiServer != null) {
916 delete command.nodeid;
917 command.fromNodeid = obj.dbNodeKey;
918 command.meshid = obj.dbMeshKey;
929 - obj.parent.parent.multiServer.DispatchMessage(command);
919 + parent.parent.multiServer.DispatchMessage(command);
920 }
921 }
922 break;
@@ -944,11 +934,11 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
934 // If an agent sends an insanely large SMBIOS table, don't store it.
935 try {
936 var smbiosstr = JSON.stringify(command.value);
947 - if (smbiosstr.length < 65535) { obj.db.SetSMBIOS({ _id: obj.dbNodeKey, domain: domain.id, time: new Date(), value: smbiosstr }); }
937 + if (smbiosstr.length < 65535) { db.SetSMBIOS({ _id: obj.dbNodeKey, domain: domain.id, time: new Date(), value: smbiosstr }); }
938 } catch (ex) { }
939
940 // Event the node interface information change (This is a lot of traffic, probably don't need this).
951 - //obj.parent.parent.DispatchEvent(['*', obj.meshid], obj, { action: 'smBiosChange', nodeid: obj.dbNodeKey, domain: domain.id, smbios: command.value, nolog: 1 });
941 + //parent.parent.DispatchEvent(['*', obj.meshid], obj, { action: 'smBiosChange', nodeid: obj.dbNodeKey, domain: domain.id, smbios: command.value, nolog: 1 });
942
943 break;
944 }
@@ -959,10 +949,10 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
949 command.updateTime = Date.now();
950 command._id = 'if' + obj.dbNodeKey;
951 command.type = 'ifinfo';
962 - obj.db.Set(command);
952 + db.Set(command);
953
954 // Event the node interface information change
965 - obj.parent.parent.DispatchEvent(['*', obj.meshid], obj, { action: 'ifchange', nodeid: obj.dbNodeKey, domain: domain.id, nolog: 1 });
955 + parent.parent.DispatchEvent(['*', obj.meshid], obj, { action: 'ifchange', nodeid: obj.dbNodeKey, domain: domain.id, nolog: 1 });
956
957 break;
958 }
@@ -977,7 +967,7 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
967 command.value._id = 'iploc_' + command.value.ip;
968 command.value.type = 'iploc';
969 command.value.date = Date.now();
980 - obj.db.Set(command.value); // Store the IP to location data in the database
970 + db.Set(command.value); // Store the IP to location data in the database
971 // Sample Value: { ip: '192.55.64.246', city: 'Hillsboro', region: 'Oregon', country: 'US', loc: '45.4443,-122.9663', org: 'AS4983 Intel Corporation', postal: '97123' }
972 }
973 break;
@@ -985,23 +975,23 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
975 case 'mc1migration':
976 {
977 if (command.oldnodeid.length != 64) break;
988 - var oldNodeKey = 'node//' + command.oldnodeid.toLowerCase();
989 - obj.db.Get(oldNodeKey, function (err, nodes) {
978 + const oldNodeKey = 'node//' + command.oldnodeid.toLowerCase();
979 + db.Get(oldNodeKey, function (err, nodes) {
980 if (nodes.length != 1) return;
991 - var node = nodes[0];
981 + const node = nodes[0];
982 if (node.meshid == obj.dbMeshKey) {
983 // Update the device name & host
994 - var newNode = { "name": node.name };
984 + const newNode = { "name": node.name };
985 if (node.intelamt != null) { newNode.intelamt = node.intelamt; }
986 ChangeAgentCoreInfo(newNode);
987
988 // Delete this node including network interface information and events
999 - obj.db.Remove(node._id);
1000 - obj.db.Remove('if' + node._id);
989 + db.Remove(node._id);
990 + db.Remove('if' + node._id);
991
992 // Event node deletion
1003 - var change = 'Migrated device ' + node.name;
1004 - obj.parent.parent.DispatchEvent(['*', node.meshid], obj, { etype: 'node', action: 'removenode', nodeid: node._id, msg: change, domain: node.domain });
993 + const change = 'Migrated device ' + node.name;
994 + parent.parent.DispatchEvent(['*', node.meshid], obj, { etype: 'node', action: 'removenode', nodeid: node._id, msg: change, domain: node.domain });
995 }
996 });
997 break;
@@ -1016,11 +1006,11 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
1006 {
1007 // Used by the agent to get configuration scripts.
1008 if (command.type == 1) {
1019 - obj.parent.getCiraConfigurationScript(obj.dbMeshKey, function (script) {
1009 + parent.getCiraConfigurationScript(obj.dbMeshKey, function (script) {
1010 obj.send(JSON.stringify({ action: 'getScript', type: 1, script: script.toString() }));
1011 });
1012 } else if (command.type == 2) {
1023 - obj.parent.getCiraCleanupScript(function (script) {
1013 + parent.getCiraCleanupScript(function (script) {
1014 obj.send(JSON.stringify({ action: 'getScript', type: 2, script: script.toString() }));
1015 });
1016 }
@@ -1039,13 +1029,13 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
1029 if ((command == null) || (command == null)) return; // Safety, should never happen.
1030
1031 // Check that the mesh exists
1042 - var mesh = obj.parent.meshes[obj.dbMeshKey];
1032 + const mesh = parent.meshes[obj.dbMeshKey];
1033 if (mesh == null) return;
1034
1035 // Get the node and change it if needed
1046 - obj.db.Get(obj.dbNodeKey, function (err, nodes) { // TODO: THIS IS A BIG RACE CONDITION HERE, WE NEED TO FIX THAT. If this call is made twice at the same time on the same device, data will be missed.
1036 + db.Get(obj.dbNodeKey, function (err, nodes) { // TODO: THIS IS A BIG RACE CONDITION HERE, WE NEED TO FIX THAT. If this call is made twice at the same time on the same device, data will be missed.
1037 if (nodes.length != 1) return;
1048 - var device = nodes[0];
1038 + const device = nodes[0];
1039 if (device.agent) {
1040 var changes = [], change = 0, log = 0;
1041
@@ -1070,7 +1060,7 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
1060 if ((command.intelamt.pass != null) && (device.intelamt.pass != command.intelamt.pass)) { changes.push('AMT pass'); device.intelamt.pass = command.intelamt.pass; change = 1; log = 1; }
1061 }
1062 if ((command.users != null) && (device.users != command.users)) { device.users = command.users; change = 1; } // Don't save this to the db.
1073 - if ((mesh.mtype == 2) && (!obj.args.wanonly)) {
1063 + if ((mesh.mtype == 2) && (!args.wanonly)) {
1064 // In WAN mode, the hostname of a computer is not important. Don't log hostname changes.
1065 if (device.host != obj.remoteaddr) { device.host = obj.remoteaddr; change = 1; changes.push('host'); }
1066 // TODO: Check that the agent has an interface that is the same as the one we got this websocket connection on. Only set if we have a match.
@@ -1079,16 +1069,16 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
1069 // If there are changes, event the new device
1070 if (change == 1) {
1071 // Save to the database
1082 - obj.db.Set(device);
1072 + db.Set(device);
1073
1074 // Event the node change
1075 var event = { etype: 'node', action: 'changenode', nodeid: obj.dbNodeKey, domain: domain.id };
1076 if (changes.length > 0) { event.msg = 'Changed device ' + device.name + ' from group ' + mesh.name + ': ' + changes.join(', '); }
1077 if ((log == 0) || (obj.agentInfo.capabilities & 0x20) || (changes.length == 0)) { event.nolog = 1; } // If this is a temporary device, don't log changes
1088 - var device2 = obj.common.Clone(device);
1078 + var device2 = common.Clone(device);
1079 if (device2.intelamt && device2.intelamt.pass) { delete device2.intelamt.pass; } // Remove the Intel AMT password before eventing this.
1080 event.node = device;
1091 - obj.parent.parent.DispatchEvent(['*', device.meshid], obj, event);
1081 + parent.parent.DispatchEvent(['*', device.meshid], obj, event);
1082 }
1083 }
1084 });
@@ -1099,13 +1089,13 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
1089 if ((command == null) || (command == null)) { return; } // Safety, should never happen.
1090
1091 // Check that the mesh exists
1102 - var mesh = obj.parent.meshes[obj.dbMeshKey];
1092 + const mesh = parent.meshes[obj.dbMeshKey];
1093 if (mesh == null) return;
1094
1095 // Get the node and change it if needed
1106 - obj.db.Get(obj.dbNodeKey, function (err, nodes) {
1096 + db.Get(obj.dbNodeKey, function (err, nodes) {
1097 if (nodes.length != 1) { return; }
1108 - var device = nodes[0];
1098 + const device = nodes[0];
1099 if (device.agent) {
1100 var changes = [], change = 0;
1101
@@ -1115,15 +1105,15 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
1105
1106 // If there are changes, save and event
1107 if (change == 1) {
1118 - obj.db.Set(device);
1108 + db.Set(device);
1109
1110 // Event the node change
1111 var event = { etype: 'node', action: 'changenode', nodeid: obj.dbNodeKey, domain: domain.id, msg: 'Changed device ' + device.name + ' from group ' + mesh.name + ': ' + changes.join(', ') };
1112 if (obj.agentInfo.capabilities & 0x20) { event.nolog = 1; } // If this is a temporary device, don't log changes
1123 - var device2 = obj.common.Clone(device);
1113 + var device2 = common.Clone(device);
1114 if (device2.intelamt && device2.intelamt.pass) { delete device2.intelamt.pass; } // Remove the Intel AMT password before eventing this.
1115 event.node = device;
1126 - obj.parent.parent.DispatchEvent(['*', device.meshid], obj, event);
1116 + parent.parent.DispatchEvent(['*', device.meshid], obj, event);
1117 }
1118 }
1119 });
@@ -1133,20 +1123,20 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
1123 function ChangeAgentTag(tag) {
1124 if (tag.length == 0) { tag = null; }
1125 // Get the node and change it if needed
1136 - obj.db.Get(obj.dbNodeKey, function (err, nodes) {
1126 + db.Get(obj.dbNodeKey, function (err, nodes) {
1127 if (nodes.length != 1) return;
1138 - var device = nodes[0];
1128 + const device = nodes[0];
1129 if (device.agent) {
1130 if (device.agent.tag != tag) {
1131 device.agent.tag = tag;
1142 - obj.db.Set(device);
1132 + db.Set(device);
1133
1134 // Event the node change
1135 var event = { etype: 'node', action: 'changenode', nodeid: obj.dbNodeKey, domain: domain.id, nolog: 1 };
1146 - var device2 = obj.common.Clone(device);
1136 + var device2 = common.Clone(device);
1137 if (device2.intelamt && device2.intelamt.pass) delete device2.intelamt.pass; // Remove the Intel AMT password before eventing this.
1138 event.node = device;
1149 - obj.parent.parent.DispatchEvent(['*', device.meshid], obj, event);
1139 + parent.parent.DispatchEvent(['*', device.meshid], obj, event);
1140 }
1141 }
1142 });
meshcentral.js
+2 -2
@@ -1377,7 +1377,7 @@ function CreateMeshCentralServer(config, args) {
1377 obj.meshAgentBinaries[archid].path = agentpath;
1378 obj.meshAgentBinaries[archid].url = ((obj.args.notls == true) ? 'http://' : 'https://') + obj.certificates.CommonName + ':' + obj.args.port + '/meshagents?id=' + archid;
1379 obj.meshAgentBinaries[archid].size = stats.size;
1380 - if (!obj.args.agentsondisk) { obj.meshAgentBinaries[archid].data = obj.fs.readFileSync(agentpath); }
1380 + if (obj.args.agentsinram) { obj.meshAgentBinaries[archid].data = obj.fs.readFileSync(agentpath); }
1381 // If this is a windows binary, pull binary information
1382 if (obj.meshAgentsArchitectureNumbers[archid].platform == 'win32') {
1383 try { obj.meshAgentBinaries[archid].pe = obj.exeHandler.parseWindowsExecutable(agentpath); } catch (e) { }
@@ -1387,7 +1387,7 @@ function CreateMeshCentralServer(config, args) {
1387 var hashStream = obj.crypto.createHash('sha384');
1388 hashStream.archid = archid;
1389 hashStream.on('data', function (data) {
1390 - obj.meshAgentBinaries[this.archid].hash = data.toString('hex');
1390 + obj.meshAgentBinaries[this.archid].hash = data.toString('binary');
1391 if ((--archcount == 0) && (func != null)) { func(); }
1392 });
1393 var options = { sourcePath: agentpath, targetStream: hashStream, platform: obj.meshAgentsArchitectureNumbers[archid].platform };
meshuser.js
+2 -2
@@ -471,7 +471,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
471 switch (cmd) {
472 case 'help': {
473 r = 'Available commands: help, info, versions, args, resetserver, showconfig, usersessions, tasklimiter, setmaxtasks, cores,\r\n'
474 - r += 'migrationagents, swarmstats, nodeconfig.';
474 + r += 'migrationagents, swarmstats, nodeconfig, heapdump.';
475 break;
476 }
477 case 'info': {
@@ -562,7 +562,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
562 } else {
563 for (var i in obj.parent.parent.swarmserver.migrationAgents) {
564 var arch = obj.parent.parent.swarmserver.migrationAgents[i];
565 - for (var j in arch) { var agent = arch[j]; r += 'Arch ' + agent.arch + ', Ver ' + agent.ver + ', Size ' + agent.binary.length + '<br />'; }
565 + for (var j in arch) { var agent = arch[j]; r += 'Arch ' + agent.arch + ', Ver ' + agent.ver + ', Size ' + ((agent.binary == null) ? 0 : agent.binary.length) + '<br />'; }
566 }
567 }
568 break;
package.json
+1 -4
@@ -1,6 +1,6 @@
1 {
2 "name": "meshcentral",
3 - "version": "0.2.9-r",
3 + "version": "0.2.9-w",
4 "keywords": [
5 "Remote Management",
6 "Intel AMT",
@@ -35,15 +35,12 @@
35 "express": "^4.16.4",
36 "express-handlebars": "^3.0.0",
37 "express-ws": "^4.0.0",
38 - "heapdump": "^0.3.12",
38 "ipcheck": "^0.1.0",
39 "meshcentral": "*",
40 "minimist": "^1.2.0",
42 - "mongojs": "^2.6.0",
41 "multiparty": "^4.2.1",
42 "nedb": "^1.8.0",
43 "node-forge": "^0.7.6",
46 - "node-windows": "^0.1.14",
44 "otplib": "^10.0.1",
45 "util.promisify": "^1.0.0",
46 "ws": "^6.1.2",
swarmserver.js
+2 -2
@@ -138,9 +138,8 @@ module.exports.CreateSwarmServer = function (parent, db, args, certificates) {
138 var agentInfo = migrationAgentsDir[i].substring(10).split('.');
139 var agentVersion = parseInt(agentInfo[0]);
140 var agentArch = parseInt(agentInfo[1]);
141 - var agentBinary = obj.parent.fs.readFileSync(migrationAgentName);
141 if (obj.migrationAgents[agentArch] == null) { obj.migrationAgents[agentArch] = {}; }
143 - if (obj.migrationAgents[agentArch][agentVersion] == null) { obj.migrationAgents[agentArch][agentVersion] = { arch: agentArch, ver: agentVersion, path: migrationAgentName, binary: agentBinary }; }
142 + if (obj.migrationAgents[agentArch][agentVersion] == null) { obj.migrationAgents[agentArch][agentVersion] = { arch: agentArch, ver: agentVersion, path: migrationAgentName }; }
143 }
144 }
145 }
@@ -270,6 +269,7 @@ module.exports.CreateSwarmServer = function (parent, db, args, certificates) {
269 case 6: { // Ask for agent block
270 if (socket.tag.update != null) {
271 // Send an agent block
272 + if (socket.tag.update.binary == null) { socket.tag.update.binary = obj.parent.fs.readFileSync(socket.tag.update.path); }
273 var l = Math.min(socket.tag.update.binary.length - socket.tag.updatePtr, 16384);
274 obj.SendCommand(socket, LegacyMeshProtocol.GETSTATE, common.IntToStr(6) + common.IntToStr(socket.tag.updatePtr) + socket.tag.update.binary.toString('binary', socket.tag.updatePtr, socket.tag.updatePtr + l)); // agent.SendQuery(6, AgentFileLen + AgentBlock);
275 Debug(3, 'Swarm:Sending agent block, ptr = ' + socket.tag.updatePtr + ', len = ' + l);