-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathsvml_z0_tanh_d_la.s
3048 lines (2993 loc) · 54.9 KB
/
svml_z0_tanh_d_la.s
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
/*******************************************
* Copyright (C) 2023 Intel Corporation
* SPDX-License-Identifier: BSD-3-Clause
*******************************************/
/*
* ALGORITHM DESCRIPTION:
*
* NOTE: Since the hyperbolic tangent function is odd
* (tanh(x) = -tanh(-x)), below algorithm deals with the absolute
* value of the argument |x|: tanh(x) = sign(x) * tanh(|x|)
*
* We use a table lookup method to compute tanh(|x|).
* The basic idea is to split the input range into a number of subintervals
* and to approximate tanh(.) with a polynomial on each of them.
*
* IEEE SPECIAL CONDITIONS:
* x = [+,-]0, r = [+,-]0
* x = +Inf, r = +1
* x = -Inf, r = -1
* x = QNaN, r = QNaN
* x = SNaN, r = QNaN
*
*
* ALGORITHM DETAILS
* We handle special values in a callout function, aside from main path
* computations. "Special" for this algorithm are:
* INF, NAN, |x| > HUGE_THRESHOLD
*
*
* Main path computations are organized as follows:
* Actually we split the interval [0, SATURATION_THRESHOLD)
* into a number of subintervals. On each subinterval we approximate tanh(.)
* with a minimax polynomial of pre-defined degree. Polynomial coefficients
* are computed beforehand and stored in table. We also use
*
* y := |x| + B,
*
* here B depends on subinterval and is used to make argument
* closer to zero.
* We also add large fake interval [SATURATION_THRESHOLD, HUGE_THRESHOLD],
* where 1.0 + 0.0*y + 0.0*y^2 ... coefficients are stored - just to
* preserve main path computation logic but return 1.0 for all arguments.
*
* Hence reconstruction looks as follows:
* we extract proper polynomial and range reduction coefficients
* (Pj and B), corresponding to subinterval, to which |x| belongs,
* and return
*
* r := sign(x) * (P0 + P1 * y + ... + Pn * y^n)
*
* NOTE: we use multiprecision technique to multiply and sum the first
* K terms of the polynomial. So Pj, j = 0..K are stored in
* table each as a pair of target precision numbers (Pj and PLj) to
* achieve wider than target precision.
*
* --
*
*/
.text
.L_2__routine_start___svml_tanh8_z0_0:
.align 16,0x90
.globl __svml_tanh8
__svml_tanh8:
.cfi_startproc
..L2:
pushq %rbp
.cfi_def_cfa_offset 16
movq %rsp, %rbp
.cfi_def_cfa 6, 16
.cfi_offset 6, -16
andq $-64, %rsp
subq $320, %rsp
vpsrlq $32, %zmm0, %zmm4
vmovups %zmm0, (%rsp)
vmovups __svml_dtanh_data_internal(%rip), %zmm14
vmovups 128+__svml_dtanh_data_internal(%rip), %zmm15
vpmovqd %zmm4, %ymm5
/* -------------------- Constant loading ------------------- */
vandpd 10432+__svml_dtanh_data_internal(%rip), %zmm0, %zmm13
vandpd 10368+__svml_dtanh_data_internal(%rip), %zmm0, %zmm3
/* Here huge arguments, INF and NaNs are filtered out to callout. */
vpand 2432+__svml_dtanh_data_internal(%rip), %ymm5, %ymm7
vmovups 384+__svml_dtanh_data_internal(%rip), %zmm0
vmovups 2176+__svml_dtanh_data_internal(%rip), %zmm4
vmovups 2048+__svml_dtanh_data_internal(%rip), %zmm5
vmovups %zmm3, 64(%rsp)
vmovups 512+__svml_dtanh_data_internal(%rip), %zmm3
vpsubd 2496+__svml_dtanh_data_internal(%rip), %ymm7, %ymm8
/* if VMIN, VMAX is defined for I type */
vxorps %ymm9, %ymm9, %ymm9
vpmaxsd %ymm9, %ymm8, %ymm10
vpminsd 2560+__svml_dtanh_data_internal(%rip), %ymm10, %ymm11
vpsrld $19, %ymm11, %ymm12
vmovups 1664+__svml_dtanh_data_internal(%rip), %zmm8
vmovups 1536+__svml_dtanh_data_internal(%rip), %zmm9
vmovups 1408+__svml_dtanh_data_internal(%rip), %zmm10
vmovups 1280+__svml_dtanh_data_internal(%rip), %zmm11
vpmovzxdq %ymm12, %zmm2
vmovups 1152+__svml_dtanh_data_internal(%rip), %zmm12
vpermt2pd 448+__svml_dtanh_data_internal(%rip), %zmm2, %zmm0
vpermt2pd 64+__svml_dtanh_data_internal(%rip), %zmm2, %zmm14
vpermt2pd 2240+__svml_dtanh_data_internal(%rip), %zmm2, %zmm4
vpermt2pd 2112+__svml_dtanh_data_internal(%rip), %zmm2, %zmm5
vsubpd {rn-sae}, %zmm14, %zmm13, %zmm1
vpermt2pd 1728+__svml_dtanh_data_internal(%rip), %zmm2, %zmm8
vpermt2pd 1600+__svml_dtanh_data_internal(%rip), %zmm2, %zmm9
vpermt2pd 1472+__svml_dtanh_data_internal(%rip), %zmm2, %zmm10
vpermt2pd 1344+__svml_dtanh_data_internal(%rip), %zmm2, %zmm11
vpermt2pd 1216+__svml_dtanh_data_internal(%rip), %zmm2, %zmm12
vpermt2pd 576+__svml_dtanh_data_internal(%rip), %zmm2, %zmm3
vpermt2pd 192+__svml_dtanh_data_internal(%rip), %zmm2, %zmm15
vmovups %zmm0, 192(%rsp)
vmovups 2304+__svml_dtanh_data_internal(%rip), %zmm0
vmovups 1024+__svml_dtanh_data_internal(%rip), %zmm13
vmovups 896+__svml_dtanh_data_internal(%rip), %zmm14
vmovups %zmm3, 256(%rsp)
vmovups 768+__svml_dtanh_data_internal(%rip), %zmm3
vmovups %zmm15, 128(%rsp)
vmovups 640+__svml_dtanh_data_internal(%rip), %zmm15
vpermt2pd 2368+__svml_dtanh_data_internal(%rip), %zmm2, %zmm0
vpermt2pd 1088+__svml_dtanh_data_internal(%rip), %zmm2, %zmm13
vpermt2pd 960+__svml_dtanh_data_internal(%rip), %zmm2, %zmm14
vpermt2pd 832+__svml_dtanh_data_internal(%rip), %zmm2, %zmm3
vpermt2pd 704+__svml_dtanh_data_internal(%rip), %zmm2, %zmm15
vfmadd213pd {rn-sae}, %zmm4, %zmm1, %zmm0
vpcmpgtd 10560+__svml_dtanh_data_internal(%rip), %ymm7, %ymm6
vmovmskps %ymm6, %edx
vmovups 1920+__svml_dtanh_data_internal(%rip), %zmm6
vfmadd213pd {rn-sae}, %zmm5, %zmm1, %zmm0
vmovups 1792+__svml_dtanh_data_internal(%rip), %zmm7
vpermt2pd 1984+__svml_dtanh_data_internal(%rip), %zmm2, %zmm6
vpermt2pd 1856+__svml_dtanh_data_internal(%rip), %zmm2, %zmm7
vfmadd213pd {rn-sae}, %zmm6, %zmm1, %zmm0
vmovups 256(%rsp), %zmm2
vfmadd213pd {rn-sae}, %zmm7, %zmm1, %zmm0
vfmadd213pd {rn-sae}, %zmm8, %zmm1, %zmm0
vfmadd213pd {rn-sae}, %zmm9, %zmm1, %zmm0
vfmadd213pd {rn-sae}, %zmm10, %zmm1, %zmm0
vfmadd213pd {rn-sae}, %zmm11, %zmm1, %zmm0
vfmadd213pd {rn-sae}, %zmm12, %zmm1, %zmm0
vfmadd213pd {rn-sae}, %zmm13, %zmm1, %zmm0
vfmadd213pd {rn-sae}, %zmm14, %zmm1, %zmm0
vfmadd213pd {rn-sae}, %zmm3, %zmm1, %zmm0
vmovups 128(%rsp), %zmm3
vfmadd213pd {rn-sae}, %zmm15, %zmm1, %zmm0
vfmadd213pd {rn-sae}, %zmm2, %zmm1, %zmm0
vmovups 192(%rsp), %zmm2
vfmadd213pd {rn-sae}, %zmm2, %zmm1, %zmm0
vfmadd213pd {rn-sae}, %zmm3, %zmm1, %zmm0
vorpd 64(%rsp), %zmm0, %zmm0
testl %edx, %edx
jne .LBL_1_3
.LBL_1_2:
/* no invcbrt in libm, so taking it out here */
movq %rbp, %rsp
popq %rbp
.cfi_def_cfa 7, 8
.cfi_restore 6
ret
.cfi_def_cfa 6, 16
.cfi_offset 6, -16
.LBL_1_3:
vmovups (%rsp), %zmm1
vmovups %zmm0, 128(%rsp)
vmovups %zmm1, 64(%rsp)
je .LBL_1_2
xorl %eax, %eax
vzeroupper
kmovw %k4, 24(%rsp)
kmovw %k5, 16(%rsp)
kmovw %k6, 8(%rsp)
kmovw %k7, (%rsp)
movq %rsi, 40(%rsp)
movq %rdi, 32(%rsp)
movq %r12, 56(%rsp)
.cfi_escape 0x10, 0x04, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xe8, 0xfe, 0xff, 0xff, 0x22
.cfi_escape 0x10, 0x05, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xe0, 0xfe, 0xff, 0xff, 0x22
.cfi_escape 0x10, 0x0c, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xf8, 0xfe, 0xff, 0xff, 0x22
movl %eax, %r12d
movq %r13, 48(%rsp)
.cfi_escape 0x10, 0x0d, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xf0, 0xfe, 0xff, 0xff, 0x22
movl %edx, %r13d
.cfi_escape 0x10, 0xfa, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xd8, 0xfe, 0xff, 0xff, 0x22
.cfi_escape 0x10, 0xfb, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xd0, 0xfe, 0xff, 0xff, 0x22
.cfi_escape 0x10, 0xfc, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xc8, 0xfe, 0xff, 0xff, 0x22
.cfi_escape 0x10, 0xfd, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xc0, 0xfe, 0xff, 0xff, 0x22
.LBL_1_7:
btl %r12d, %r13d
jc .LBL_1_10
.LBL_1_8:
incl %r12d
cmpl $8, %r12d
jl .LBL_1_7
kmovw 24(%rsp), %k4
.cfi_restore 122
kmovw 16(%rsp), %k5
.cfi_restore 123
kmovw 8(%rsp), %k6
.cfi_restore 124
kmovw (%rsp), %k7
.cfi_restore 125
vmovups 128(%rsp), %zmm0
movq 40(%rsp), %rsi
.cfi_restore 4
movq 32(%rsp), %rdi
.cfi_restore 5
movq 56(%rsp), %r12
.cfi_restore 12
movq 48(%rsp), %r13
.cfi_restore 13
jmp .LBL_1_2
.cfi_escape 0x10, 0x04, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xe8, 0xfe, 0xff, 0xff, 0x22
.cfi_escape 0x10, 0x05, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xe0, 0xfe, 0xff, 0xff, 0x22
.cfi_escape 0x10, 0x0c, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xf8, 0xfe, 0xff, 0xff, 0x22
.cfi_escape 0x10, 0x0d, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xf0, 0xfe, 0xff, 0xff, 0x22
.cfi_escape 0x10, 0xfa, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xd8, 0xfe, 0xff, 0xff, 0x22
.cfi_escape 0x10, 0xfb, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xd0, 0xfe, 0xff, 0xff, 0x22
.cfi_escape 0x10, 0xfc, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xc8, 0xfe, 0xff, 0xff, 0x22
.cfi_escape 0x10, 0xfd, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xc0, 0xfe, 0xff, 0xff, 0x22
.LBL_1_10:
lea 64(%rsp,%r12,8), %rdi
lea 128(%rsp,%r12,8), %rsi
call __svml_dtanh_cout_rare_internal
jmp .LBL_1_8
.align 16,0x90
.cfi_endproc
.type __svml_tanh8,@function
.size __svml_tanh8,.-__svml_tanh8
..LN__svml_tanh8.0:
.L_2__routine_start___svml_dtanh_cout_rare_internal_1:
.align 16,0x90
__svml_dtanh_cout_rare_internal:
.cfi_startproc
..L63:
lea __dtanh_la__imldTanhTab(%rip), %rdx
movb 7(%rdi), %al
andb $-128, %al
shrb $7, %al
movzbl %al, %ecx
movzwl 6(%rdi), %eax
andl $32752, %eax
shrl $4, %eax
movq (%rdx,%rcx,8), %rdx
cmpl $2047, %eax
je .LBL_2_6
cmpl $2046, %eax
jne .LBL_2_4
.LBL_2_3:
movq %rdx, (%rsi)
jmp .LBL_2_5
.LBL_2_4:
movsd (%rdi), %xmm1
movsd __dtanh_la__imldTanhTab(%rip), %xmm0
addsd %xmm1, %xmm0
mulsd %xmm0, %xmm1
movsd %xmm1, (%rsi)
.LBL_2_5:
xorl %eax, %eax
ret
.LBL_2_6:
testl $1048575, 4(%rdi)
jne .LBL_2_9
cmpl $0, (%rdi)
je .LBL_2_3
.LBL_2_9:
movsd (%rdi), %xmm0
addsd %xmm0, %xmm0
movsd %xmm0, (%rsi)
jmp .LBL_2_5
.align 16,0x90
.cfi_endproc
.type __svml_dtanh_cout_rare_internal,@function
.size __svml_dtanh_cout_rare_internal,.-__svml_dtanh_cout_rare_internal
..LN__svml_dtanh_cout_rare_internal.1:
.section .rodata, "a"
.align 64
.align 64
__svml_dtanh_data_internal:
.long 0
.long 0
.long 0
.long 1070333952
.long 0
.long 1070858240
.long 0
.long 1071382528
.long 0
.long 1071906816
.long 0
.long 1072431104
.long 0
.long 1072955392
.long 0
.long 1073479680
.long 0
.long 1074003968
.long 0
.long 1074528256
.long 0
.long 1075052544
.long 0
.long 1075576832
.long 0
.long 1076101120
.long 0
.long 1076625408
.long 0
.long 1077149696
.long 0
.long 0
.long 0
.long 0
.long 1097497746
.long 1070305232
.long 2699715854
.long 1070817176
.long 3997728823
.long 1071273769
.long 3938160533
.long 1071759175
.long 193732629
.long 1072072293
.long 3144363502
.long 1072375075
.long 2548249895
.long 1072570303
.long 638218690
.long 1072665176
.long 3325726839
.long 1072689426
.long 2523455249
.long 1072693057
.long 2200391922
.long 1072693244
.long 4257836853
.long 1072693247
.long 4294954840
.long 1072693247
.long 0
.long 1072693248
.long 0
.long 1072693248
.long 0
.long 0
.long 3167993022
.long 1013310014
.long 2889539328
.long 3159121931
.long 394645568
.long 1013728265
.long 2799920971
.long 1015161303
.long 754366556
.long 1013577885
.long 3960180508
.long 1014215657
.long 69774042
.long 3162475851
.long 2161066944
.long 3162264280
.long 923362432
.long 1014879086
.long 2160345802
.long 1014714211
.long 3729195158
.long 3161626453
.long 675671997
.long 1015336837
.long 1141527416
.long 1013957883
.long 2209699952
.long 3160643600
.long 0
.long 0
.long 0
.long 1072693248
.long 2750448946
.long 1072596012
.long 1257606939
.long 1072501079
.long 2619663609
.long 1072338011
.long 863303701
.long 1072048204
.long 2694810990
.long 1071654144
.long 837003456
.long 1070723665
.long 472162617
.long 1069359818
.long 532307062
.long 1067137790
.long 431106849
.long 1064162173
.long 329904022
.long 1059572972
.long 4080160942
.long 1053550275
.long 1402271583
.long 1044493446
.long 467296040
.long 1032344560
.long 26734424
.long 1014207804
.long 0
.long 0
.long 1071622681
.long 3153114090
.long 3948133409
.long 3217705130
.long 4096956694
.long 3218184481
.long 2616164369
.long 3218465008
.long 2620770434
.long 3218641845
.long 3075958072
.long 3218520700
.long 1950184789
.long 3217978001
.long 2686385024
.long 3216731525
.long 1489441818
.long 3214597550
.long 1992796697
.long 3211642259
.long 1952936976
.long 3207056478
.long 3904162951
.long 3201033920
.long 1382745445
.long 3191977094
.long 468673444
.long 3179828208
.long 3843669553
.long 3161691483
.long 0
.long 0
.long 1431655765
.long 3218429269
.long 3264395793
.long 3218178991
.long 60595194
.long 3217824331
.long 1837960166
.long 3217124894
.long 1964918946
.long 3214033516
.long 2998587684
.long 1068822866
.long 3421467326
.long 1069267520
.long 952003133
.long 1068506016
.long 1215426504
.long 1066495476
.long 2650572912
.long 1063503494
.long 4178958376
.long 1059043758
.long 3799805457
.long 1052940753
.long 3704238924
.long 1043831645
.long 2076585114
.long 1031813109
.long 1352847351
.long 1013591371
.long 0
.long 0
.long 3830371894
.long 3169224254
.long 74893150
.long 1069567437
.long 1235750664
.long 1069825332
.long 916043751
.long 1069924975
.long 4138411315
.long 1069655686
.long 829220656
.long 1068441660
.long 663246204
.long 3213477792
.long 652268865
.long 3214415230
.long 3251098232
.long 3212868437
.long 1480792335
.long 3209929101
.long 3365608027
.long 3205478075
.long 3330582883
.long 3199375817
.long 3573234945
.long 3190266717
.long 2061970086
.long 3178248181
.long 3148320390
.long 3160026274
.long 0
.long 0
.long 286337717
.long 1069617425
.long 4261152941
.long 1068876190
.long 3694459820
.long 1067928728
.long 2399079031
.long 3212381546
.long 394897286
.long 3215735810
.long 3073534041
.long 3215860118
.long 301960234
.long 3214124960
.long 3353887502
.long 1064191753
.long 4200665425
.long 1063741482
.long 2003926207
.long 1061090030
.long 2196865207
.long 1056528964
.long 2107880963
.long 1050526402
.long 3656860478
.long 1041425071
.long 881228218
.long 1029305120
.long 2612840768
.long 1011136029
.long 0
.long 0
.long 3722294196
.long 3181505049
.long 2573001951
.long 3216029919
.long 4095639908
.long 3216151900
.long 3272210374
.long 3215957253
.long 3439280785
.long 3214441767
.long 628273304
.long 1066085542
.long 3354767370
.long 1066343670
.long 300170709
.long 1063270296
.long 1870156670
.long 3209139074
.long 1580606479
.long 3206808937
.long 3818710870
.long 3202408589
.long 3126817102
.long 3196311305
.long 3320734688
.long 3187224127
.long 821170446
.long 3175173312
.long 3906480775
.long 3156975650
.long 0
.long 0
.long 428888587
.long 3215696314
.long 3125999356
.long 3214336891
.long 407196569
.long 1053816799
.long 886258254
.long 1066874408
.long 2149075781
.long 1067351939
.long 3888390356
.long 1065784643
.long 1226056234
.long 3211994813
.long 178100474
.long 3210723675
.long 4201249718
.long 1058328572
.long 3854015760
.long 1057324616
.long 3621220964
.long 1052982118
.long 1468766992
.long 1046916174
.long 2369608770
.long 1037879115
.long 327127732
.long 1025754505
.long 747046817
.long 1007714190
.long 0
.long 0
.long 4036362527
.long 3191151783
.long 839661649
.long 1067363059
.long 4269154241
.long 1067251747
.long 391446303
.long 1066410535
.long 2090623151
.long 3211993063
.long 1751510141
.long 3213141508
.long 4072216875
.long 3209470961
.long 3769618983
.long 1061976030
.long 3462945146
.long 1057228123
.long 3030849095
.long 3202531084
.long 4269010901
.long 3198361258
.long 742615277
.long 3192302512
.long 3397417437
.long 3183265609
.long 943110610
.long 3171141000
.long 371608300
.long 3153099348
.long 0
.long 0
.long 1315619150
.long 1066820857
.long 1001273821
.long 3214201652
.long 3859675203
.long 3212560200
.long 725858949
.long 3213658423
.long 2464052346
.long 3212913056
.long 1297319750
.long 1063307355
.long 563735576
.long 1062988089
.long 2756222736
.long 3207203944
.long 31207338
.long 3204466214
.long 434022900
.long 1052227234
.long 2370591882
.long 1048628172
.long 588930601
.long 1042556347
.long 3198977634
.long 1033474724
.long 1590950759
.long 1021415866
.long 195904708
.long 1003000389
.long 0
.long 0
.long 4252521214
.long 3198731457
.long 2969857811
.long 3217870358
.long 575387574
.long 3212943727
.long 67550217
.long 3210922992
.long 2955736731
.long 1064678043
.long 4193848343
.long 1063288304
.long 1845975253
.long 3209397546
.long 1025213509
.long 3204479174
.long 3713384058
.long 1055658730
.long 4120057883
.long 3194988032
.long 1573797757
.long 3193584787
.long 2514726550
.long 3187678317
.long 15343571
.long 3178526042
.long 104576940
.long 3166444652
.long 1147207168
.long 3148070554
.long 0
.long 0
.long 1467656669
.long 3212977156
.long 4154993315
.long 1077775111
.long 2465966858
.long 3214886059
.long 71777642
.long 1068690118
.long 2419763912
.long 1061550205
.long 1896047360
.long 3210612806
.long 3723555648
.long 1058651288
.long 3163703016
.long 1057833732
.long 1601936705
.long 3201383489
.long 2535509424
.long 3195153293
.long 3610885824
.long 1043474022
.long 1031698712
.long 1037527637
.long 1497459257
.long 1028514042
.long 3476455860
.long 1016366870
.long 758110873
.long 998719391
.long 0
.long 0
.long 572446067
.long 3204307354
.long 926268084
.long 1081104698
.long 1313112926
.long 3217861477
.long 3660716
.long 1070677720
.long 124568711
.long 3210757561
.long 2123022704
.long 1059096046
.long 576783408
.long 1059279430
.long 1651052980
.long 3204387494
.long 3164866735
.long 1051430920
.long 409335328
.long 1046695415
.long 3481520755
.long 3188046619
.long 1140549474
.long 3182373569
.long 708689751
.long 3173247717
.long 2627769694
.long 3161153086
.long 3804346926
.long 3143551592
.long 0
.long 0
.long 2302818369
.long 1064188902
.long 526101185
.long 3235013457
.long 2975776348
.long 1075224435
.long 1103981749
.long 3223699933
.long 4261798097
.long 3210280329
.long 30781306
.long 1064564655
.long 3939597931
.long 3206430909
.long 1816466405
.long 1055007949
.long 3868125859
.long 3190076997
.long 4218600579
.long 3192569835
.long 4167655123
.long 1037376568
.long 952533803
.long 1032000428
.long 895641221
.long 1022851193
.long 1237761065
.long 1010835452
.long 2902086315
.long 3133082401
.long 0
.long 0
.long 1899646778
.long 3207205638
.long 2434183270
.long 3238288976
.long 621380814
.long 1078065849
.long 247717525
.long 3225783561
.long 1611742563
.long 3212088477
.long 537725662
.long 1065131990
.long 3769436831
.long 1057148224
.long 3759797009
.long 3196422840
.long 842759416
.long 3195613094
.long 1736926210
.long 1043198029
.long 3915271468
.long 3180709675
.long 807416070
.long 3176507548
.long 3147759461
.long 3167409843
.long 3443382404
.long 3155325020
.long 1202615797
.long 3129870924
.long 0
.long 0
.long 1841653873
.long 3210074087
.long 2157744327
.long 1095928888
.long 3038317314
.long 3229013375
.long 2291108570
.long 1082519711
.long 707775397
.long 1067599411
.long 445214669
.long 3216153989
.long 3815354898
.long 1054410330
.long 1285070896
.long 3199787450
.long 1722630166
.long 1047526663
.long 2672844635
.long 3188483010
.long 1805520457
.long 3179260705
.long 542550567
.long 1026041526
.long 392361251
.long 1017320419
.long 562647833
.long 1005205418
.long 4253488278
.long 988137457
.long 0
.long 0
.long 3077187303
.long 1060497018
.long 1652392454
.long 1099206368
.long 414484972
.long 3231848150
.long 130592591
.long 1084602513
.long 1951534810
.long 1068932483
.long 2677544726
.long 3216895313
.long 2338009969
.long 3203411240
.long 302629286
.long 1051889816
.long 1274412910
.long 3193339538
.long 3731558070
.long 1038350327
.long 3135499196
.long 1030352152
.long 1329461873
.long 3170325324
.long 4058709792
.long 3161656179
.long 2167788642
.long 3149540607
.long 1602064437
.long 3132466971
.long 0
.long 0
.long 2146959360
.long 2146959360
.long 2146959360
.long 2146959360
.long 2146959360
.long 2146959360
.long 2146959360
.long 2146959360
.long 2146959360
.long 2146959360
.long 2146959360
.long 2146959360
.long 2146959360
.long 2146959360
.long 2146959360
.long 2146959360
.long 1069547520
.long 1069547520
.long 1069547520
.long 1069547520
.long 1069547520
.long 1069547520
.long 1069547520
.long 1069547520
.long 1069547520
.long 1069547520
.long 1069547520
.long 1069547520
.long 1069547520
.long 1069547520
.long 1069547520
.long 1069547520
.long 7864320
.long 7864320
.long 7864320
.long 7864320
.long 7864320
.long 7864320
.long 7864320
.long 7864320
.long 7864320
.long 7864320
.long 7864320
.long 7864320
.long 7864320
.long 7864320
.long 7864320
.long 7864320
.long 0
.long 0
.long 0
.long 0
.long 0
.long 1072693248
.long 3616958675
.long 3172564458
.long 1431547708
.long 3218429269
.long 3390261318
.long 3188010876