4539 lines
150 KiB
HTML
4539 lines
150 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<title>Code coverage report for _30s.js</title>
|
|
<meta charset="utf-8" />
|
|
<link rel="stylesheet" href="prettify.css" />
|
|
<link rel="stylesheet" href="base.css" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<style type='text/css'>
|
|
.coverage-summary .sorter {
|
|
background-image: url(sort-arrow-sprite.png);
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class='wrapper'>
|
|
<div class='pad1'>
|
|
<h1>
|
|
<a href="index.html">All files</a> _30s.js
|
|
</h1>
|
|
<div class='clearfix'>
|
|
<div class='fl pad1y space-right2'>
|
|
<span class="strong">92.97% </span>
|
|
<span class="quiet">Statements</span>
|
|
<span class='fraction'>1310/1409</span>
|
|
</div>
|
|
<div class='fl pad1y space-right2'>
|
|
<span class="strong">88.35% </span>
|
|
<span class="quiet">Branches</span>
|
|
<span class='fraction'>569/644</span>
|
|
</div>
|
|
<div class='fl pad1y space-right2'>
|
|
<span class="strong">92.3% </span>
|
|
<span class="quiet">Functions</span>
|
|
<span class='fraction'>623/675</span>
|
|
</div>
|
|
<div class='fl pad1y space-right2'>
|
|
<span class="strong">92.92% </span>
|
|
<span class="quiet">Lines</span>
|
|
<span class='fraction'>945/1017</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class='status-line high'></div>
|
|
<pre><table class="coverage">
|
|
<tr><td class="line-count quiet">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
|
|
1001
|
|
1002
|
|
1003
|
|
1004
|
|
1005
|
|
1006
|
|
1007
|
|
1008
|
|
1009
|
|
1010
|
|
1011
|
|
1012
|
|
1013
|
|
1014
|
|
1015
|
|
1016
|
|
1017
|
|
1018
|
|
1019
|
|
1020
|
|
1021
|
|
1022
|
|
1023
|
|
1024
|
|
1025
|
|
1026
|
|
1027
|
|
1028
|
|
1029
|
|
1030
|
|
1031
|
|
1032
|
|
1033
|
|
1034
|
|
1035
|
|
1036
|
|
1037
|
|
1038
|
|
1039
|
|
1040
|
|
1041
|
|
1042
|
|
1043
|
|
1044
|
|
1045
|
|
1046
|
|
1047
|
|
1048
|
|
1049
|
|
1050
|
|
1051
|
|
1052
|
|
1053
|
|
1054
|
|
1055
|
|
1056
|
|
1057
|
|
1058
|
|
1059
|
|
1060
|
|
1061
|
|
1062
|
|
1063
|
|
1064
|
|
1065
|
|
1066
|
|
1067
|
|
1068
|
|
1069
|
|
1070
|
|
1071
|
|
1072
|
|
1073
|
|
1074
|
|
1075
|
|
1076
|
|
1077
|
|
1078
|
|
1079
|
|
1080
|
|
1081
|
|
1082
|
|
1083
|
|
1084
|
|
1085
|
|
1086
|
|
1087
|
|
1088
|
|
1089
|
|
1090
|
|
1091
|
|
1092
|
|
1093
|
|
1094
|
|
1095
|
|
1096
|
|
1097
|
|
1098
|
|
1099
|
|
1100
|
|
1101
|
|
1102
|
|
1103
|
|
1104
|
|
1105
|
|
1106
|
|
1107
|
|
1108
|
|
1109
|
|
1110
|
|
1111
|
|
1112
|
|
1113
|
|
1114
|
|
1115
|
|
1116
|
|
1117
|
|
1118
|
|
1119
|
|
1120
|
|
1121
|
|
1122
|
|
1123
|
|
1124
|
|
1125
|
|
1126
|
|
1127
|
|
1128
|
|
1129
|
|
1130
|
|
1131
|
|
1132
|
|
1133
|
|
1134
|
|
1135
|
|
1136
|
|
1137
|
|
1138
|
|
1139
|
|
1140
|
|
1141
|
|
1142
|
|
1143
|
|
1144
|
|
1145
|
|
1146
|
|
1147
|
|
1148
|
|
1149
|
|
1150
|
|
1151
|
|
1152
|
|
1153
|
|
1154
|
|
1155
|
|
1156
|
|
1157
|
|
1158
|
|
1159
|
|
1160
|
|
1161
|
|
1162
|
|
1163
|
|
1164
|
|
1165
|
|
1166
|
|
1167
|
|
1168
|
|
1169
|
|
1170
|
|
1171
|
|
1172
|
|
1173
|
|
1174
|
|
1175
|
|
1176
|
|
1177
|
|
1178
|
|
1179
|
|
1180
|
|
1181
|
|
1182
|
|
1183
|
|
1184
|
|
1185
|
|
1186
|
|
1187
|
|
1188
|
|
1189
|
|
1190
|
|
1191
|
|
1192
|
|
1193
|
|
1194
|
|
1195
|
|
1196
|
|
1197
|
|
1198
|
|
1199
|
|
1200
|
|
1201
|
|
1202
|
|
1203
|
|
1204
|
|
1205
|
|
1206
|
|
1207
|
|
1208
|
|
1209
|
|
1210
|
|
1211
|
|
1212
|
|
1213
|
|
1214
|
|
1215
|
|
1216
|
|
1217
|
|
1218
|
|
1219
|
|
1220
|
|
1221
|
|
1222
|
|
1223
|
|
1224
|
|
1225
|
|
1226
|
|
1227
|
|
1228
|
|
1229
|
|
1230
|
|
1231
|
|
1232
|
|
1233
|
|
1234
|
|
1235
|
|
1236
|
|
1237
|
|
1238
|
|
1239
|
|
1240
|
|
1241
|
|
1242
|
|
1243
|
|
1244
|
|
1245
|
|
1246
|
|
1247
|
|
1248
|
|
1249
|
|
1250
|
|
1251
|
|
1252
|
|
1253
|
|
1254
|
|
1255
|
|
1256
|
|
1257
|
|
1258
|
|
1259
|
|
1260
|
|
1261
|
|
1262
|
|
1263
|
|
1264
|
|
1265
|
|
1266
|
|
1267
|
|
1268
|
|
1269
|
|
1270
|
|
1271
|
|
1272
|
|
1273
|
|
1274
|
|
1275
|
|
1276
|
|
1277
|
|
1278
|
|
1279
|
|
1280
|
|
1281
|
|
1282
|
|
1283
|
|
1284
|
|
1285
|
|
1286
|
|
1287
|
|
1288
|
|
1289
|
|
1290
|
|
1291
|
|
1292
|
|
1293
|
|
1294
|
|
1295
|
|
1296
|
|
1297
|
|
1298
|
|
1299
|
|
1300
|
|
1301
|
|
1302
|
|
1303
|
|
1304
|
|
1305
|
|
1306
|
|
1307
|
|
1308
|
|
1309
|
|
1310
|
|
1311
|
|
1312
|
|
1313
|
|
1314
|
|
1315
|
|
1316
|
|
1317
|
|
1318
|
|
1319
|
|
1320
|
|
1321
|
|
1322
|
|
1323
|
|
1324
|
|
1325
|
|
1326
|
|
1327
|
|
1328
|
|
1329
|
|
1330
|
|
1331
|
|
1332
|
|
1333
|
|
1334
|
|
1335
|
|
1336
|
|
1337
|
|
1338
|
|
1339
|
|
1340
|
|
1341
|
|
1342
|
|
1343
|
|
1344
|
|
1345
|
|
1346
|
|
1347
|
|
1348
|
|
1349
|
|
1350
|
|
1351
|
|
1352
|
|
1353
|
|
1354
|
|
1355
|
|
1356
|
|
1357
|
|
1358
|
|
1359
|
|
1360
|
|
1361
|
|
1362
|
|
1363
|
|
1364
|
|
1365
|
|
1366
|
|
1367
|
|
1368
|
|
1369
|
|
1370
|
|
1371
|
|
1372
|
|
1373
|
|
1374
|
|
1375
|
|
1376
|
|
1377
|
|
1378
|
|
1379
|
|
1380
|
|
1381
|
|
1382
|
|
1383
|
|
1384
|
|
1385
|
|
1386
|
|
1387
|
|
1388
|
|
1389
|
|
1390
|
|
1391
|
|
1392
|
|
1393
|
|
1394
|
|
1395
|
|
1396
|
|
1397
|
|
1398
|
|
1399
|
|
1400
|
|
1401
|
|
1402
|
|
1403
|
|
1404
|
|
1405
|
|
1406
|
|
1407
|
|
1408
|
|
1409
|
|
1410
|
|
1411
|
|
1412
|
|
1413
|
|
1414
|
|
1415
|
|
1416
|
|
1417
|
|
1418
|
|
1419
|
|
1420
|
|
1421
|
|
1422
|
|
1423
|
|
1424
|
|
1425
|
|
1426
|
|
1427
|
|
1428
|
|
1429
|
|
1430
|
|
1431
|
|
1432
|
|
1433
|
|
1434
|
|
1435
|
|
1436
|
|
1437
|
|
1438
|
|
1439
|
|
1440
|
|
1441
|
|
1442
|
|
1443
|
|
1444
|
|
1445
|
|
1446
|
|
1447
|
|
1448
|
|
1449
|
|
1450
|
|
1451
|
|
1452
|
|
1453
|
|
1454
|
|
1455
|
|
1456
|
|
1457
|
|
1458
|
|
1459
|
|
1460
|
|
1461
|
|
1462
|
|
1463
|
|
1464
|
|
1465
|
|
1466
|
|
1467
|
|
1468
|
|
1469
|
|
1470
|
|
1471
|
|
1472
|
|
1473
|
|
1474
|
|
1475
|
|
1476
|
|
1477
|
|
1478
|
|
1479
|
|
1480
|
|
1481
|
|
1482
|
|
1483
|
|
1484
|
|
1485
|
|
1486
|
|
1487
|
|
1488
|
|
1489
|
|
1490
|
|
1491
|
|
1492</td><td class="line-coverage quiet"><span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">8x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-yes">8x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">8x</span>
|
|
<span class="cline-any cline-yes">16x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">31x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">8x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">8x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">7x</span>
|
|
<span class="cline-any cline-yes">5x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">9x</span>
|
|
<span class="cline-any cline-yes">14x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-yes">6x</span>
|
|
<span class="cline-any cline-yes">6x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">7x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-yes">6x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">13x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">15x</span>
|
|
<span class="cline-any cline-yes">15x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">9x</span>
|
|
<span class="cline-any cline-yes">16x</span>
|
|
<span class="cline-any cline-yes">9x</span>
|
|
<span class="cline-any cline-yes">16x</span>
|
|
<span class="cline-any cline-yes">9x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-yes">6x</span>
|
|
<span class="cline-any cline-yes">6x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">30x</span>
|
|
<span class="cline-any cline-yes">16x</span>
|
|
<span class="cline-any cline-yes">15x</span>
|
|
<span class="cline-any cline-yes">11x</span>
|
|
<span class="cline-any cline-yes">11x</span>
|
|
<span class="cline-any cline-yes">11x</span>
|
|
<span class="cline-any cline-yes">11x</span>
|
|
<span class="cline-any cline-yes">21x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">7x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">6x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">23x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">6x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">34x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">10x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">6x</span>
|
|
<span class="cline-any cline-yes">11x</span>
|
|
<span class="cline-any cline-yes">11x</span>
|
|
<span class="cline-any cline-yes">7x</span>
|
|
<span class="cline-any cline-yes">11x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-yes">15x</span>
|
|
<span class="cline-any cline-yes">9x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">5x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">10x</span>
|
|
<span class="cline-any cline-yes">10x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-yes">21x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">5x</span>
|
|
<span class="cline-any cline-yes">5x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">5x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-yes">6x</span>
|
|
<span class="cline-any cline-yes">6x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">110x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">5x</span>
|
|
<span class="cline-any cline-yes">5x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">16x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-yes">16x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">19x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">17x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">6x</span>
|
|
<span class="cline-any cline-yes">6x</span>
|
|
<span class="cline-any cline-yes">6x</span>
|
|
<span class="cline-any cline-yes">6x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-yes">8x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">11x</span>
|
|
<span class="cline-any cline-yes">11x</span>
|
|
<span class="cline-any cline-yes">31x</span>
|
|
<span class="cline-any cline-yes">31x</span>
|
|
<span class="cline-any cline-yes">22x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">12x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">16x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">41x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-yes">38x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-yes">11x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">12x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-yes">14x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">5x</span>
|
|
<span class="cline-any cline-yes">5x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-yes">20020x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">6x</span>
|
|
<span class="cline-any cline-yes">30x</span>
|
|
<span class="cline-any cline-yes">5x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">5x</span>
|
|
<span class="cline-any cline-yes">10x</span>
|
|
<span class="cline-any cline-yes">7x</span>
|
|
<span class="cline-any cline-yes">7x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">10x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">10x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">5x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-yes">6x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">6x</span>
|
|
<span class="cline-any cline-yes">6x</span>
|
|
<span class="cline-any cline-yes">6x</span>
|
|
<span class="cline-any cline-yes">5x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">5x</span>
|
|
<span class="cline-any cline-yes">5x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">9x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">14x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">6x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">10x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">6x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">6x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">5x</span>
|
|
<span class="cline-any cline-yes">5x</span>
|
|
<span class="cline-any cline-yes">16x</span>
|
|
<span class="cline-any cline-yes">16x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">5x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-yes">13x</span>
|
|
<span class="cline-any cline-yes">13x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-yes">6x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-yes">5x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-yes">9x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">6x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">11x</span>
|
|
<span class="cline-any cline-yes">22x</span>
|
|
<span class="cline-any cline-yes">11x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">14x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">14x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">6x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">6x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">8x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">26x</span>
|
|
<span class="cline-any cline-yes">26x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">6x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">14x</span>
|
|
<span class="cline-any cline-yes">17x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">7x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">9x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">30x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">6x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">5x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">9x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">50x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">11x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">9x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">50x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">8x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">31x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">6x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">7x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">5x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">17x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">12x</span>
|
|
<span class="cline-any cline-yes">10x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">12x</span>
|
|
<span class="cline-any cline-yes">10x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">6x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">11x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-yes">6x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">6x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">12x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">15x</span>
|
|
<span class="cline-any cline-yes">6x</span>
|
|
<span class="cline-any cline-yes">24x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">10x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">6x</span>
|
|
<span class="cline-any cline-yes">6x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">9x</span>
|
|
<span class="cline-any cline-yes">7x</span>
|
|
<span class="cline-any cline-yes">7x</span>
|
|
<span class="cline-any cline-yes">5x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">5x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-yes">15x</span>
|
|
<span class="cline-any cline-yes">15x</span>
|
|
<span class="cline-any cline-yes">9x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-yes">44x</span>
|
|
<span class="cline-any cline-yes">44x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">10x</span>
|
|
<span class="cline-any cline-yes">10x</span>
|
|
<span class="cline-any cline-yes">10x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">7x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">6x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">10x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">26x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">19x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">25x</span>
|
|
<span class="cline-any cline-yes">450x</span>
|
|
<span class="cline-any cline-yes">45x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">405x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">51x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">53x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">53x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">3x</span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">18x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-yes">18x</span>
|
|
<span class="cline-any cline-yes">10x</span>
|
|
<span class="cline-any cline-yes">8x</span>
|
|
<span class="cline-any cline-yes">8x</span>
|
|
<span class="cline-any cline-yes">8x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">2x</span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">360x</span></td><td class="text"><pre class="prettyprint lang-js">const fs = typeof require !== "undefined" && require('fs');
|
|
const crypto = typeof require !== "undefined" && require('crypto');
|
|
|
|
const CSVToArray = (data, delimiter = ',', omitFirstRow = false) =>
|
|
data
|
|
.slice(omitFirstRow ? data.indexOf('\n') + 1 : 0)
|
|
.split('\n')
|
|
.map(v => v.split(delimiter));
|
|
const CSVToJSON = (data, delimiter = ',') => {
|
|
const titles = data.slice(0, data.indexOf('\n')).split(delimiter);
|
|
return data
|
|
.slice(data.indexOf('\n') + 1)
|
|
.split('\n')
|
|
.map(v => {
|
|
const values = v.split(delimiter);
|
|
return titles.reduce((obj, title, index) => ((obj[title] = values[index]), obj), {});
|
|
});
|
|
};
|
|
|
|
const JSONToFile = <span class="fstat-no" title="function not covered" >(o</span>bj, filename) =>
|
|
<span class="cstat-no" title="statement not covered" > fs.writeFile(`${filename}.json`, JSON.stringify(obj, null, 2));</span>
|
|
const JSONtoCSV = (arr, columns, delimiter = ',') =>
|
|
[
|
|
columns.join(delimiter),
|
|
...arr.map(obj =>
|
|
columns.reduce(
|
|
(acc, key) => `${acc}${!acc.length ? '' : delimiter}"${!obj[key] ? '' : obj[key]}"`,
|
|
''
|
|
)
|
|
)
|
|
].join('\n');
|
|
const RGBToHex = (r, g, b) => ((r << 16) + (g << 8) + b).toString(16).padStart(6, '0');
|
|
const URLJoin = (...args) =>
|
|
args
|
|
.join('/')
|
|
.replace(/[\/]+/g, '/')
|
|
.replace(/^(.+):\//, '$1://')
|
|
.replace(/^file:/, 'file:/')
|
|
.replace(/\/(\?|&|#[^!])/g, '$1')
|
|
.replace(/\?/g, '&')
|
|
.replace('&', '?');
|
|
const UUIDGeneratorBrowser = <span class="fstat-no" title="function not covered" >()</span> =>
|
|
<span class="cstat-no" title="statement not covered" > ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, <span class="fstat-no" title="function not covered" >c </span>=></span>
|
|
<span class="cstat-no" title="statement not covered" > (c ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))).toString(16)</span>
|
|
);
|
|
|
|
const UUIDGeneratorNode = () =>
|
|
([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, c =>
|
|
(c ^ (crypto.randomBytes(1)[0] & (15 >> (c / 4)))).toString(16)
|
|
);
|
|
const all = (arr, fn = Boolean) => arr.every(fn);
|
|
const allEqual = arr => arr.every(val => val === arr[0]);
|
|
const any = (arr, fn = Boolean) => arr.some(fn);
|
|
const approximatelyEqual = (v1, v2, epsilon = 0.001) => Math.abs(v1 - v2) < epsilon;
|
|
const arrayToCSV = (arr, delimiter = ',') =>
|
|
arr.map(v => v.map(x => `"${x}"`).join(delimiter)).join('\n');
|
|
const arrayToHtmlList = <span class="fstat-no" title="function not covered" >(a</span>rr, listID) =>
|
|
<span class="cstat-no" title="statement not covered" > (<span class="fstat-no" title="function not covered" >el</span> => (</span>
|
|
<span class="cstat-no" title="statement not covered" > (el = document.querySelector('#' + listID)),</span>
|
|
(el.innerHTML += arr.map(<span class="fstat-no" title="function not covered" >it</span>em => <span class="cstat-no" title="statement not covered" >`<li>${item}</li>`)</span>.join(''))
|
|
))();
|
|
const ary = (fn, n) => (...args) => fn(...args.slice(0, n));
|
|
const atob = str => Buffer.from(str, 'base64').toString('binary');
|
|
const attempt = (fn, ...args) => {
|
|
try {
|
|
return fn(...args);
|
|
} catch (e) {
|
|
return e instanceof Error ? e : <span class="branch-1 cbranch-no" title="branch not covered" >new Error(e);</span>
|
|
}
|
|
};
|
|
const average = (...nums) => nums.reduce((acc, val) => acc + val, 0) / nums.length;
|
|
const averageBy = (arr, fn) =>
|
|
arr.map(typeof fn === 'function' ? fn : val => val[fn]).reduce((acc, val) => acc + val, 0) /
|
|
arr.length;
|
|
const bifurcate = (arr, filter) =>
|
|
arr.reduce((acc, val, i) => (acc[filter[i] ? 0 : 1].push(val), acc), [[], []]);
|
|
const bifurcateBy = (arr, fn) =>
|
|
arr.reduce((acc, val, i) => (acc[fn(val, i) ? 0 : 1].push(val), acc), [[], []]);
|
|
const bind = (fn, context, ...boundArgs) => (...args) => fn.apply(context, [...boundArgs, ...args]);
|
|
const bindAll = (obj, ...fns) =>
|
|
fns.forEach(
|
|
fn => (
|
|
(f = obj[fn]),
|
|
(obj[fn] = function() {
|
|
return f.apply(obj);
|
|
})
|
|
)
|
|
);
|
|
const bindKey = (context, fn, ...boundArgs) => (...args) =>
|
|
context[fn].apply(context, [...boundArgs, ...args]);
|
|
const binomialCoefficient = (n, k) => {
|
|
if (Number.isNaN(n) || Number.isNaN(k)) return NaN;
|
|
if (k < 0 || k > n) return 0;
|
|
if (k === 0 || k === n) return 1;
|
|
if (k === 1 || k === n - 1) return n;
|
|
if (n - k < k) k = n - k;
|
|
let res = n;
|
|
for (let j = 2; j <= k; j++) res *= (n - j + 1) / j;
|
|
return Math.round(res);
|
|
};
|
|
const bottomVisible = () =>
|
|
document.documentElement.clientHeight + window.scrollY >=
|
|
(document.documentElement.scrollHeight || document.documentElement.clientHeight);
|
|
const btoa = str => Buffer.from(str, 'binary').toString('base64');
|
|
const byteSize = str => new Blob([str]).size;
|
|
const call = (key, ...args) => context => context[key](...args);
|
|
const capitalize = ([first, ...rest], lowerRest = false) =>
|
|
first.toUpperCase() + (lowerRest ? rest.join('').toLowerCase() : rest.join(''));
|
|
const capitalizeEveryWord = str => str.replace(/\b[a-z]/g, char => char.toUpperCase());
|
|
const castArray = val => (Array.isArray(val) ? val : [val]);
|
|
const chainAsync = fns => {
|
|
let curr = 0;
|
|
const next = () => fns[curr++](next);
|
|
next();
|
|
};
|
|
const chunk = (arr, size) =>
|
|
Array.from({ length: Math.ceil(arr.length / size) }, (v, i) =>
|
|
arr.slice(i * size, i * size + size)
|
|
);
|
|
const clampNumber = (num, a, b) => Math.max(Math.min(num, Math.max(a, b)), Math.min(a, b));
|
|
const cloneRegExp = regExp => new RegExp(regExp.source, regExp.flags);
|
|
const coalesce = (...args) => args.find(_ => ![undefined, null].includes(_));
|
|
const coalesceFactory = valid => (...args) => args.find(valid);
|
|
const collectInto = fn => (...args) => fn(args);
|
|
const colorize = (...args) => ({
|
|
black: `\x1b[30m${args.join(' ')}`,
|
|
red: `\x1b[31m${args.join(' ')}`,
|
|
green: `\x1b[32m${args.join(' ')}`,
|
|
yellow: `\x1b[33m${args.join(' ')}`,
|
|
blue: `\x1b[34m${args.join(' ')}`,
|
|
magenta: `\x1b[35m${args.join(' ')}`,
|
|
cyan: `\x1b[36m${args.join(' ')}`,
|
|
white: `\x1b[37m${args.join(' ')}`,
|
|
bgBlack: `\x1b[40m${args.join(' ')}\x1b[0m`,
|
|
bgRed: `\x1b[41m${args.join(' ')}\x1b[0m`,
|
|
bgGreen: `\x1b[42m${args.join(' ')}\x1b[0m`,
|
|
bgYellow: `\x1b[43m${args.join(' ')}\x1b[0m`,
|
|
bgBlue: `\x1b[44m${args.join(' ')}\x1b[0m`,
|
|
bgMagenta: `\x1b[45m${args.join(' ')}\x1b[0m`,
|
|
bgCyan: `\x1b[46m${args.join(' ')}\x1b[0m`,
|
|
bgWhite: `\x1b[47m${args.join(' ')}\x1b[0m`
|
|
});
|
|
const compact = arr => arr.filter(Boolean);
|
|
const compose = (...fns) => fns.reduce((f, g) => (...args) => f(g(...args)));
|
|
const composeRight = (...fns) => fns.reduce((f, g) => (...args) => g(f(...args)));
|
|
const converge = (converger, fns) => (...args) => converger(...fns.map(fn => fn.apply(null, args)));
|
|
const copyToClipboard = str => {
|
|
const el = document.createElement('textarea');
|
|
el.value = str;
|
|
el.setAttribute('readonly', '');
|
|
el.style.position = 'absolute';
|
|
el.style.left = '-9999px';
|
|
document.body.appendChild(el);
|
|
const selected =
|
|
document.getSelection().rangeCount > 0 ? document.getSelection().getRangeAt(0) : false;
|
|
el.select();
|
|
document.execCommand('copy');
|
|
document.body.removeChild(el);
|
|
if (selected) {
|
|
document.getSelection().removeAllRanges();
|
|
document.getSelection().addRange(selected);
|
|
}
|
|
};
|
|
const countBy = (arr, fn) =>
|
|
arr.map(typeof fn === 'function' ? fn : val => val[fn]).reduce((acc, val) => {
|
|
acc[val] = (acc[val] || 0) + 1;
|
|
return acc;
|
|
}, {});
|
|
const countOccurrences = (arr, val) => arr.reduce((a, v) => (v === val ? a + 1 : a), 0);
|
|
const counter = (selector, start, end, step = 1, duration = 2000) => {
|
|
let current = start,
|
|
_step = (end - start) * step < 0 ? -step : step,
|
|
timer = setInterval(<span class="fstat-no" title="function not covered" >()</span> => {
|
|
<span class="cstat-no" title="statement not covered" > current += _step;</span>
|
|
<span class="cstat-no" title="statement not covered" > document.querySelector(selector).innerHTML = current;</span>
|
|
<span class="cstat-no" title="statement not covered" > if (current >= end) <span class="cstat-no" title="statement not covered" >document.querySelector(selector).innerHTML = end;</span></span>
|
|
<span class="cstat-no" title="statement not covered" > if (current >= end) <span class="cstat-no" title="statement not covered" >clearInterval(timer);</span></span>
|
|
}, Math.abs(Math.floor(duration / (end - start))));
|
|
return timer;
|
|
};
|
|
const createElement = str => {
|
|
const el = document.createElement('div');
|
|
el.innerHTML = str;
|
|
return el.firstElementChild;
|
|
};
|
|
const createEventHub = () => ({
|
|
hub: Object.create(null),
|
|
emit(event, data) {
|
|
(this.hub[event] || []).forEach(<span class="fstat-no" title="function not covered" >ha</span>ndler => <span class="cstat-no" title="statement not covered" >handler(data))</span>;
|
|
},
|
|
on(event, handler) {
|
|
<span class="missing-if-branch" title="else path not taken" >E</span>if (!this.hub[event]) this.hub[event] = [];
|
|
this.hub[event].push(handler);
|
|
},
|
|
off(event, handler) {
|
|
const i = (this.hub[event] || <span class="branch-1 cbranch-no" title="branch not covered" >[])</span>.findIndex(h => h === handler);
|
|
<span class="missing-if-branch" title="else path not taken" >E</span>if (i > -1) this.hub[event].splice(i, 1);
|
|
}
|
|
});
|
|
const currentURL = () => window.location.href;
|
|
const curry = (fn, arity = fn.length, ...args) =>
|
|
arity <= args.length ? fn(...args) : curry.bind(null, fn, arity, ...args);
|
|
const dayOfYear = <span class="fstat-no" title="function not covered" >da</span>te =>
|
|
<span class="cstat-no" title="statement not covered" > Math.floor((date - new Date(date.getFullYear(), 0, 0)) / 1000 / 60 / 60 / 24);</span>
|
|
const debounce = (fn, ms = 0) => {
|
|
let timeoutId;
|
|
return <span class="fstat-no" title="function not covered" >fu</span>nction(...args) {
|
|
<span class="cstat-no" title="statement not covered" > clearTimeout(timeoutId);</span>
|
|
<span class="cstat-no" title="statement not covered" > timeoutId = setTimeout(<span class="fstat-no" title="function not covered" >()</span> => <span class="cstat-no" title="statement not covered" >fn.apply(this, args),</span> ms);</span>
|
|
};
|
|
};
|
|
const decapitalize = ([first, ...rest], upperRest = false) =>
|
|
first.toLowerCase() + (upperRest ? rest.join('').toUpperCase() : rest.join(''));
|
|
const deepClone = obj => {
|
|
let clone = Object.assign({}, obj);
|
|
Object.keys(clone).forEach(
|
|
key => (clone[key] = typeof obj[key] === 'object' ? deepClone(obj[key]) : obj[key])
|
|
);
|
|
return Array.isArray(obj) ? (clone.length = obj.length) && Array.from(clone) : clone;
|
|
};
|
|
const deepFlatten = arr => [].concat(...arr.map(v => (Array.isArray(v) ? deepFlatten(v) : v)));
|
|
const deepFreeze = obj =>
|
|
Object.keys(obj).forEach(
|
|
prop =>
|
|
!(obj[prop] instanceof Object) || Object.isFrozen(obj[prop]) ? null : deepFreeze(obj[prop])
|
|
) || Object.freeze(obj);
|
|
const defaults = (obj, ...defs) => Object.assign({}, obj, ...defs.reverse(), obj);
|
|
const defer = <span class="fstat-no" title="function not covered" >(f</span>n, ...args) => <span class="cstat-no" title="statement not covered" >setTimeout(fn, 1, ...args);</span>
|
|
const degreesToRads = deg => (deg * Math.PI) / 180.0;
|
|
const delay = (fn, wait, ...args) => setTimeout(fn, wait, ...args);
|
|
const detectDeviceType = <span class="fstat-no" title="function not covered" >()</span> =>
|
|
<span class="cstat-no" title="statement not covered" > /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)</span>
|
|
? 'Mobile'
|
|
: 'Desktop';
|
|
const difference = (a, b) => {
|
|
const s = new Set(b);
|
|
return a.filter(x => !s.has(x));
|
|
};
|
|
const differenceBy = (a, b, fn) => {
|
|
const s = new Set(b.map(fn));
|
|
return a.filter(x => !s.has(fn(x)));
|
|
};
|
|
const differenceWith = (arr, val, comp) => arr.filter(a => val.findIndex(b => comp(a, b)) === -1);
|
|
const dig = (obj, target) =>
|
|
target in obj
|
|
? obj[target]
|
|
: Object.values(obj).reduce((acc, val) => {
|
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (acc !== undefined) <span class="cstat-no" title="statement not covered" >return acc;</span>
|
|
if (typeof val === 'object') return dig(val, target);
|
|
}, undefined);
|
|
const digitize = n => [...`${n}`].map(i => parseInt(i));
|
|
const distance = (x0, y0, x1, y1) => Math.hypot(x1 - x0, y1 - y0);
|
|
const drop = (arr, n = 1) => arr.slice(n);
|
|
const dropRight = (arr, n = 1) => arr.slice(0, -n);
|
|
const dropRightWhile = (arr, func) => {
|
|
while (arr.length > 0 && !func(arr[arr.length - 1])) arr = arr.slice(0, -1);
|
|
return arr;
|
|
};
|
|
const dropWhile = (arr, func) => {
|
|
while (arr.length > 0 && !func(arr[0])) arr = arr.slice(1);
|
|
return arr;
|
|
};
|
|
const elementContains = (parent, child) => parent !== child && parent.contains(child);
|
|
const elementIsVisibleInViewport = (el, partiallyVisible = false) => {
|
|
const { top, left, bottom, right } = el.getBoundingClientRect();
|
|
const { innerHeight, innerWidth } = window;
|
|
return partiallyVisible
|
|
? ((top > 0 && <span class="branch-1 cbranch-no" title="branch not covered" >top < innerHeight)</span> || (bottom > 0 && <span class="branch-3 cbranch-no" title="branch not covered" >bottom < innerHeight)</span>) &&
|
|
((<span class="branch-4 cbranch-no" title="branch not covered" >left > 0 </span>&& <span class="branch-5 cbranch-no" title="branch not covered" >left < innerWidth)</span> || (<span class="branch-6 cbranch-no" title="branch not covered" >right > 0 </span>&& <span class="branch-7 cbranch-no" title="branch not covered" >right < innerWidth)</span>)
|
|
: top >= 0 && left >= 0 && bottom <= innerHeight && right <= innerWidth;
|
|
};
|
|
const elo = ([...ratings], kFactor = 32, selfRating) => {
|
|
const [a, b] = ratings;
|
|
const expectedScore = (self, opponent) => 1 / (1 + 10 ** ((opponent - self) / 400));
|
|
const newRating = (rating, i) =>
|
|
(selfRating || rating) + kFactor * (i - expectedScore(i ? a : b, i ? b : a));
|
|
if (ratings.length === 2) return [newRating(a, 1), newRating(b, 0)];
|
|
|
|
for (let i = 0, len = ratings.length; i < len; i++) {
|
|
let j = i;
|
|
while (j < len - 1) {
|
|
j++;
|
|
[ratings[i], ratings[j]] = elo([ratings[i], ratings[j]], kFactor);
|
|
}
|
|
}
|
|
return ratings;
|
|
};
|
|
const equals = (a, b) => {
|
|
if (a === b) return true;
|
|
if (a instanceof Date && b instanceof Date) return a.getTime() === b.getTime();
|
|
if (!a || !b || (typeof a !== 'object' && typeof b !== 'object')) return a === b;
|
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (a === null || a === undefined || b === null || b === undefined) <span class="cstat-no" title="statement not covered" >return false;</span>
|
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (a.prototype !== b.prototype) <span class="cstat-no" title="statement not covered" >return false;</span>
|
|
let keys = Object.keys(a);
|
|
if (keys.length !== Object.keys(b).length) return false;
|
|
return keys.every(k => equals(a[k], b[k]));
|
|
};
|
|
const escapeHTML = str =>
|
|
str.replace(
|
|
/[&<>'"]/g,
|
|
tag =>
|
|
({
|
|
'&': '&amp;',
|
|
'<': '&lt;',
|
|
'>': '&gt;',
|
|
"'": '&#39;',
|
|
'"': '&quot;'
|
|
}[tag] || <span class="branch-1 cbranch-no" title="branch not covered" >tag)</span>
|
|
);
|
|
const escapeRegExp = str => str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
const everyNth = (arr, nth) => arr.filter((e, i) => i % nth === nth - 1);
|
|
const extendHex = shortHex =>
|
|
'#' +
|
|
shortHex
|
|
.slice(shortHex.startsWith('#') ? 1 : 0)
|
|
.split('')
|
|
.map(x => x + x)
|
|
.join('');
|
|
const factorial = n =>
|
|
n < 0
|
|
? (() => {
|
|
throw new TypeError('Negative numbers are not allowed!');
|
|
})()
|
|
: n <= 1
|
|
? 1
|
|
: n * factorial(n - 1);
|
|
const fibonacci = n =>
|
|
Array.from({ length: n }).reduce(
|
|
(acc, val, i) => acc.concat(i > 1 ? acc[i - 1] + acc[i - 2] : i),
|
|
[]
|
|
);
|
|
const filterNonUnique = arr => arr.filter(i => arr.indexOf(i) === arr.lastIndexOf(i));
|
|
const filterNonUniqueBy = (arr, fn) =>
|
|
arr.filter((v, i) => arr.every((x, j) => (i === j) === fn(v, x, i, j)));
|
|
const findKey = (obj, fn) => Object.keys(obj).find(key => fn(obj[key], key, obj));
|
|
const findLast = (arr, fn) => arr.filter(fn).pop();
|
|
const findLastIndex = (arr, fn) =>
|
|
arr
|
|
.map((val, i) => [i, val])
|
|
.filter(([i, val]) => fn(val, i, arr))
|
|
.pop()[0];
|
|
const findLastKey = (obj, fn) =>
|
|
Object.keys(obj)
|
|
.reverse()
|
|
.find(key => fn(obj[key], key, obj));
|
|
const flatten = (arr, depth = 1) =>
|
|
arr.reduce((a, v) => a.concat(depth > 1 && Array.isArray(v) ? flatten(v, depth - 1) : v), []);
|
|
const flattenObject = (obj, prefix = '') =>
|
|
Object.keys(obj).reduce((acc, k) => {
|
|
const pre = prefix.length ? prefix + '.' : '';
|
|
if (typeof obj[k] === 'object') Object.assign(acc, flattenObject(obj[k], pre + k));
|
|
else acc[pre + k] = obj[k];
|
|
return acc;
|
|
}, {});
|
|
const flip = fn => (first, ...rest) => fn(...rest, first);
|
|
const forEachRight = (arr, callback) =>
|
|
arr
|
|
.slice(0)
|
|
.reverse()
|
|
.forEach(callback);
|
|
const forOwn = (obj, fn) => Object.keys(obj).forEach(key => fn(obj[key], key, obj));
|
|
const forOwnRight = (obj, fn) =>
|
|
Object.keys(obj)
|
|
.reverse()
|
|
.forEach(key => fn(obj[key], key, obj));
|
|
const formatDuration = ms => {
|
|
if (ms < 0) ms = -ms;
|
|
const time = {
|
|
day: Math.floor(ms / 86400000),
|
|
hour: Math.floor(ms / 3600000) % 24,
|
|
minute: Math.floor(ms / 60000) % 60,
|
|
second: Math.floor(ms / 1000) % 60,
|
|
millisecond: Math.floor(ms) % 1000
|
|
};
|
|
return Object.entries(time)
|
|
.filter(val => val[1] !== 0)
|
|
.map(([key, val]) => `${val} ${key}${val !== 1 ? 's' : ''}`)
|
|
.join(', ');
|
|
};
|
|
const fromCamelCase = (str, separator = '_') =>
|
|
str
|
|
.replace(/([a-z\d])([A-Z])/g, '$1' + separator + '$2')
|
|
.replace(/([A-Z]+)([A-Z][a-z\d]+)/g, '$1' + separator + '$2')
|
|
.toLowerCase();
|
|
const functionName = fn => (console.debug(fn.name), fn);
|
|
const functions = (obj, inherited = false) =>
|
|
(inherited
|
|
? [...Object.keys(obj), ...Object.keys(Object.getPrototypeOf(obj))]
|
|
: Object.keys(obj)
|
|
).filter(key => typeof obj[key] === 'function');
|
|
const gcd = (...arr) => {
|
|
const _gcd = (x, y) => (!y ? x : gcd(y, x % y));
|
|
return [...arr].reduce((a, b) => _gcd(a, b));
|
|
};
|
|
const geometricProgression = (end, start = 1, step = 2) =>
|
|
Array.from({ length: Math.floor(Math.log(end / start) / Math.log(step)) + 1 }).map(
|
|
(v, i) => start * step ** i
|
|
);
|
|
const get = (from, ...selectors) =>
|
|
[...selectors].map(s =>
|
|
s
|
|
.replace(/\[([^\[\]]*)\]/g, '.$1.')
|
|
.split('.')
|
|
.filter(t => t !== '')
|
|
.reduce((prev, cur) => prev && prev[cur], from)
|
|
);
|
|
const getColonTimeFromDate = date => date.toTimeString().slice(0, 8);
|
|
const getDaysDiffBetweenDates = (dateInitial, dateFinal) =>
|
|
(dateFinal - dateInitial) / (1000 * 3600 * 24);
|
|
const getImages = (el, includeDuplicates = false) => {
|
|
const images = [...el.getElementsByTagName('img')].map(img => img.getAttribute('src'));
|
|
return includeDuplicates ? images : [...new Set(images)];
|
|
};
|
|
const getMeridiemSuffixOfInteger = num =>
|
|
num === 0 || num === 24
|
|
? 12 + 'am'
|
|
: num === 12
|
|
? 12 + 'pm'
|
|
: num < 12
|
|
? (num % 12) + 'am'
|
|
: (num % 12) + 'pm';
|
|
const getScrollPosition = (el = window) => ({
|
|
x: el.pageXOffset !== undefined ? el.pageXOffset : el.scrollLeft,
|
|
y: el.pageYOffset !== undefined ? el.pageYOffset : el.scrollTop
|
|
});
|
|
const getStyle = (el, ruleName) => getComputedStyle(el)[ruleName];
|
|
const getType = v =>
|
|
v === undefined ? 'undefined' : v === null ? 'null' : v.constructor.name.toLowerCase();
|
|
const getURLParameters = url =>
|
|
(url.match(/([^?=&]+)(=([^&]*))/g) || <span class="branch-1 cbranch-no" title="branch not covered" >[])</span>.reduce(
|
|
(a, v) => ((a[v.slice(0, v.indexOf('='))] = v.slice(v.indexOf('=') + 1)), a),
|
|
{}
|
|
);
|
|
const groupBy = (arr, fn) =>
|
|
arr.map(typeof fn === 'function' ? fn : val => val[fn]).reduce((acc, val, i) => {
|
|
acc[val] = (acc[val] || []).concat(arr[i]);
|
|
return acc;
|
|
}, {});
|
|
const hammingDistance = (num1, num2) => ((num1 ^ num2).toString(2).match(/1/g) || <span class="branch-1 cbranch-no" title="branch not covered" >'')</span>.length;
|
|
const hasClass = (el, className) => el.classList.contains(className);
|
|
const hasFlags = <span class="fstat-no" title="function not covered" >(.</span>..flags) =>
|
|
<span class="cstat-no" title="statement not covered" > flags.every(<span class="fstat-no" title="function not covered" >fl</span>ag => <span class="cstat-no" title="statement not covered" >process.argv.includes(/^-{1,2}/.test(flag) ? flag : '--' + flag))</span>;</span>
|
|
const hashBrowser = <span class="fstat-no" title="function not covered" >va</span>l =>
|
|
<span class="cstat-no" title="statement not covered" > crypto.subtle.digest('SHA-256', new TextEncoder('utf-8').encode(val)).then(<span class="fstat-no" title="function not covered" >h </span>=> {</span>
|
|
let hexes = <span class="cstat-no" title="statement not covered" >[],</span>
|
|
view = <span class="cstat-no" title="statement not covered" >new DataView(h);</span>
|
|
<span class="cstat-no" title="statement not covered" > for (let i = 0; i < view.byteLength; i += 4)</span>
|
|
<span class="cstat-no" title="statement not covered" > hexes.push(('00000000' + view.getUint32(i).toString(16)).slice(-8));</span>
|
|
<span class="cstat-no" title="statement not covered" > return hexes.join('');</span>
|
|
});
|
|
|
|
const hashNode = val =>
|
|
new Promise(resolve =>
|
|
setTimeout(
|
|
<span class="fstat-no" title="function not covered" > ()</span> =>
|
|
<span class="cstat-no" title="statement not covered" > resolve(</span>
|
|
crypto
|
|
.createHash('sha256')
|
|
.update(val)
|
|
.digest('hex')
|
|
),
|
|
0
|
|
)
|
|
);
|
|
const head = arr => arr[0];
|
|
const hexToRGB = hex => {
|
|
let alpha = false,
|
|
h = hex.slice(hex.startsWith('#') ? 1 : 0);
|
|
if (h.length === 3) h = [...h].map(x => x + x).join('');
|
|
else if (h.length === 8) alpha = true;
|
|
h = parseInt(h, 16);
|
|
return (
|
|
'rgb' +
|
|
(alpha ? 'a' : '') +
|
|
'(' +
|
|
(h >>> (alpha ? 24 : 16)) +
|
|
', ' +
|
|
((h & (alpha ? 0x00ff0000 : 0x00ff00)) >>> (alpha ? 16 : 8)) +
|
|
', ' +
|
|
((h & (alpha ? 0x0000ff00 : 0x0000ff)) >>> (alpha ? 8 : 0)) +
|
|
(alpha ? `, ${h & 0x000000ff}` : '') +
|
|
')'
|
|
);
|
|
};
|
|
const hide = (...el) => [...el].forEach(e => (e.style.display = 'none'));
|
|
const httpGet = (url, callback, err = console.error) => {
|
|
const request = new XMLHttpRequest();
|
|
request.open('GET', url, true);
|
|
request.onload = <span class="fstat-no" title="function not covered" >()</span> => <span class="cstat-no" title="statement not covered" >callback(request.responseText);</span>
|
|
request.onerror = <span class="fstat-no" title="function not covered" >()</span> => <span class="cstat-no" title="statement not covered" >err(request);</span>
|
|
request.send();
|
|
};
|
|
const httpPost = (url, data, callback, err = console.error) => {
|
|
const request = new XMLHttpRequest();
|
|
request.open('POST', url, true);
|
|
request.setRequestHeader('Content-type', 'application/json; charset=utf-8');
|
|
request.onload = <span class="fstat-no" title="function not covered" >()</span> => <span class="cstat-no" title="statement not covered" >callback(request.responseText);</span>
|
|
request.onerror = <span class="fstat-no" title="function not covered" >()</span> => <span class="cstat-no" title="statement not covered" >err(request);</span>
|
|
request.send(data);
|
|
};
|
|
const httpsRedirect = <span class="fstat-no" title="function not covered" >()</span> => {
|
|
<span class="cstat-no" title="statement not covered" > if (location.protocol !== 'https:') <span class="cstat-no" title="statement not covered" >location.replace('https://' + location.href.split('//')[1]);</span></span>
|
|
};
|
|
const hz = (fn, iterations = 100) => {
|
|
const before = performance.now();
|
|
for (let i = 0; i < iterations; i++) fn();
|
|
return (1000 * iterations) / (performance.now() - before);
|
|
};
|
|
const inRange = (n, start, end = null) => {
|
|
if (end && start > end) [end, start] = [start, end];
|
|
return end == null ? n >= 0 && n < start : n >= start && n < end;
|
|
};
|
|
const indentString = (str, count, indent = ' ') => str.replace(/^/gm, indent.repeat(count));
|
|
const indexOfAll = (arr, val) => arr.reduce((acc, el, i) => (el === val ? [...acc, i] : acc), []);
|
|
const initial = arr => arr.slice(0, -1);
|
|
const initialize2DArray = (w, h, val = null) =>
|
|
Array.from({ length: h }).map(() => Array.from({ length: w }).fill(val));
|
|
const initializeArrayWithRange = (end, start = 0, step = 1) =>
|
|
Array.from({ length: Math.ceil((end - start + 1) / step) }, (v, i) => i * step + start);
|
|
const initializeArrayWithRangeRight = (end, start = 0, step = 1) =>
|
|
Array.from({ length: Math.ceil((end + 1 - start) / step) }).map(
|
|
(v, i, arr) => (arr.length - i - 1) * step + start
|
|
);
|
|
const initializeArrayWithValues = (n, val = 0) => Array(n).fill(val);
|
|
const initializeNDArray = (val, ...args) =>
|
|
args.length === 0
|
|
? val
|
|
: Array.from({ length: args[0] }).map(() => initializeNDArray(val, ...args.slice(1)));
|
|
const insertAfter = (el, htmlString) => el.insertAdjacentHTML('afterend', htmlString);
|
|
const insertBefore = (el, htmlString) => el.insertAdjacentHTML('beforebegin', htmlString);
|
|
const intersection = (a, b) => {
|
|
const s = new Set(b);
|
|
return a.filter(x => s.has(x));
|
|
};
|
|
const intersectionBy = (a, b, fn) => {
|
|
const s = new Set(b.map(fn));
|
|
return a.filter(x => s.has(fn(x)));
|
|
};
|
|
const intersectionWith = (a, b, comp) => a.filter(x => b.findIndex(y => comp(x, y)) !== -1);
|
|
const invertKeyValues = (obj, fn) =>
|
|
Object.keys(obj).reduce((acc, key) => {
|
|
const val = fn ? fn(obj[key]) : obj[key];
|
|
acc[val] = acc[val] || [];
|
|
acc[val].push(key);
|
|
return acc;
|
|
}, {});
|
|
const is = (type, val) => ![, null].includes(val) && val.constructor === type;
|
|
const isAbsoluteURL = str => /^[a-z][a-z0-9+.-]*:/.test(str);
|
|
const isAfterDate = (dateA, dateB) => dateA > dateB;
|
|
const isAnagram = (str1, str2) => {
|
|
const normalize = str =>
|
|
str
|
|
.toLowerCase()
|
|
.replace(/[^a-z0-9]/gi, '')
|
|
.split('')
|
|
.sort()
|
|
.join('');
|
|
return normalize(str1) === normalize(str2);
|
|
};
|
|
const isArrayLike = obj => obj != null && typeof obj[Symbol.iterator] === 'function';
|
|
const isBeforeDate = (dateA, dateB) => dateA < dateB;
|
|
const isBoolean = val => typeof val === 'boolean';
|
|
const isBrowser = () => ![typeof window, typeof document].includes('undefined');
|
|
const isBrowserTabFocused = () => !document.hidden;
|
|
const isDivisible = (dividend, divisor) => dividend % divisor === 0;
|
|
const isDuplexStream = val =>
|
|
val !== null &&
|
|
typeof val === 'object' &&
|
|
typeof val.pipe === 'function' &&
|
|
typeof val._read === 'function' &&
|
|
typeof val._readableState === 'object' &&
|
|
typeof val._write === 'function' &&
|
|
typeof val._writableState === 'object';
|
|
const isEmpty = val => val == null || !(Object.keys(val) || <span class="branch-1 cbranch-no" title="branch not covered" >val)</span>.length;
|
|
const isEven = num => num % 2 === 0;
|
|
const isFunction = val => typeof val === 'function';
|
|
const isLowerCase = str => str === str.toLowerCase();
|
|
const isNil = val => val === undefined || val === null;
|
|
const isNull = val => val === null;
|
|
const isNumber = val => typeof val === 'number';
|
|
const isObject = obj => obj === Object(obj);
|
|
const isObjectLike = val => val !== null && typeof val === 'object';
|
|
const isPlainObject = val => !!val && typeof val === 'object' && val.constructor === Object;
|
|
const isPrime = num => {
|
|
const boundary = Math.floor(Math.sqrt(num));
|
|
for (var i = 2; i <= boundary; i++) if (num % i === 0) return false;
|
|
return num >= 2;
|
|
};
|
|
const isPrimitive = val => Object(val) !== val;
|
|
const isPromiseLike = obj =>
|
|
obj !== null &&
|
|
(typeof obj === 'object' || typeof obj === 'function') &&
|
|
typeof obj.then === 'function';
|
|
const isReadableStream = val =>
|
|
val !== null &&
|
|
typeof val === 'object' &&
|
|
typeof val.pipe === 'function' &&
|
|
typeof val._read === 'function' &&
|
|
typeof val._readableState === 'object';
|
|
const isSameDate = (dateA, dateB) => dateA.toISOString() === dateB.toISOString();
|
|
const isSorted = arr => {
|
|
let direction = -(arr[0] - arr[1]);
|
|
for (let [i, val] of arr.entries()) {
|
|
direction = !direction ? -(arr[i - 1] - arr[i]) : direction;
|
|
if (i === arr.length - 1) return !direction ? 0 : direction;
|
|
else if ((val - arr[i + 1]) * direction > 0) return 0;
|
|
}
|
|
};
|
|
const isStream = val => val !== null && typeof val === 'object' && typeof val.pipe === 'function';
|
|
const isString = val => typeof val === 'string';
|
|
const isSymbol = val => typeof val === 'symbol';
|
|
const isTravisCI = () => 'TRAVIS' in process.env && <span class="branch-1 cbranch-no" title="branch not covered" >'CI' in process.env;</span>
|
|
const isUndefined = val => val === undefined;
|
|
const isUpperCase = str => str === str.toUpperCase();
|
|
const isValidJSON = obj => {
|
|
try {
|
|
JSON.parse(obj);
|
|
return true;
|
|
} catch (e) {
|
|
return false;
|
|
}
|
|
};
|
|
const isWritableStream = val =>
|
|
val !== null &&
|
|
typeof val === 'object' &&
|
|
typeof val.pipe === 'function' &&
|
|
typeof val._write === 'function' &&
|
|
typeof val._writableState === 'object';
|
|
const join = (arr, separator = ',', end = separator) =>
|
|
arr.reduce(
|
|
(acc, val, i) =>
|
|
i === arr.length - 2
|
|
? acc + val + end
|
|
: i === arr.length - 1
|
|
? acc + val
|
|
: acc + val + separator,
|
|
''
|
|
);
|
|
const last = arr => arr[arr.length - 1];
|
|
const lcm = (...arr) => {
|
|
const gcd = (x, y) => (!y ? x : gcd(y, x % y));
|
|
const _lcm = (x, y) => (x * y) / gcd(x, y);
|
|
return [...arr].reduce((a, b) => _lcm(a, b));
|
|
};
|
|
const longestItem = (...vals) => vals.reduce((a, x) => (x.length > a.length ? x : a));
|
|
const lowercaseKeys = obj =>
|
|
Object.keys(obj).reduce((acc, key) => {
|
|
acc[key.toLowerCase()] = obj[key];
|
|
return acc;
|
|
}, {});
|
|
const luhnCheck = num => {
|
|
let arr = (num + '')
|
|
.split('')
|
|
.reverse()
|
|
.map(x => parseInt(x));
|
|
let lastDigit = arr.splice(0, 1)[0];
|
|
let sum = arr.reduce((acc, val, i) => (i % 2 !== 0 ? acc + val : acc + ((val * 2) % 9) || 9), 0);
|
|
sum += lastDigit;
|
|
return sum % 10 === 0;
|
|
};
|
|
const mapKeys = (obj, fn) =>
|
|
Object.keys(obj).reduce((acc, k) => {
|
|
acc[fn(obj[k], k, obj)] = obj[k];
|
|
return acc;
|
|
}, {});
|
|
const mapObject = (arr, fn) =>
|
|
(a => (
|
|
(a = [arr, arr.map(fn)]), a[0].reduce((acc, val, ind) => ((acc[val] = a[1][ind]), acc), {})
|
|
))();
|
|
const mapString = (str, fn) =>
|
|
str
|
|
.split('')
|
|
.map((c, i) => fn(c, i, str))
|
|
.join('');
|
|
const mapValues = (obj, fn) =>
|
|
Object.keys(obj).reduce((acc, k) => {
|
|
acc[k] = fn(obj[k], k, obj);
|
|
return acc;
|
|
}, {});
|
|
const mask = (cc, num = 4, mask = '*') => `${cc}`.slice(-num).padStart(`${cc}`.length, mask);
|
|
const matches = (obj, source) =>
|
|
Object.keys(source).every(key => obj.hasOwnProperty(key) && obj[key] === source[key]);
|
|
const matchesWith = (obj, source, fn) =>
|
|
Object.keys(source).every(
|
|
key =>
|
|
obj.hasOwnProperty(key) && fn
|
|
? fn(obj[key], source[key], key, obj, source)
|
|
: <span class="branch-1 cbranch-no" title="branch not covered" >obj[key] == source[key]</span>
|
|
);
|
|
const maxBy = (arr, fn) => Math.max(...arr.map(typeof fn === 'function' ? fn : val => val[fn]));
|
|
const maxDate = (...dates) => new Date(Math.max.apply(null, ...dates));
|
|
const maxN = (arr, n = 1) => [...arr].sort((a, b) => b - a).slice(0, n);
|
|
const median = arr => {
|
|
const mid = Math.floor(arr.length / 2),
|
|
nums = [...arr].sort((a, b) => a - b);
|
|
return arr.length % 2 !== 0 ? nums[mid] : (nums[mid - 1] + nums[mid]) / 2;
|
|
};
|
|
const memoize = fn => {
|
|
const cache = new Map();
|
|
const cached = function(val) {
|
|
return cache.has(val) ? cache.get(val) : cache.set(val, fn.call(this, val)) && cache.get(val);
|
|
};
|
|
cached.cache = cache;
|
|
return cached;
|
|
};
|
|
const merge = (...objs) =>
|
|
[...objs].reduce(
|
|
(acc, obj) =>
|
|
Object.keys(obj).reduce((a, k) => {
|
|
acc[k] = acc.hasOwnProperty(k) ? [].concat(acc[k]).concat(obj[k]) : obj[k];
|
|
return acc;
|
|
}, {}),
|
|
{}
|
|
);
|
|
const minBy = (arr, fn) => Math.min(...arr.map(typeof fn === 'function' ? fn : val => val[fn]));
|
|
const minDate = (...dates) => new Date(Math.min.apply(null, ...dates));
|
|
const minN = (arr, n = 1) => [...arr].sort((a, b) => a - b).slice(0, n);
|
|
const mostPerformant = (fns, iterations = 10000) => {
|
|
const times = fns.map(fn => {
|
|
const before = performance.now();
|
|
for (let i = 0; i < iterations; i++) fn();
|
|
return performance.now() - before;
|
|
});
|
|
return times.indexOf(Math.min(...times));
|
|
};
|
|
const negate = func => (...args) => !func(...args);
|
|
const nest = (items, id = null, link = 'parent_id') =>
|
|
items
|
|
.filter(item => item[link] === id)
|
|
.map(item => ({ ...item, children: nest(items, item.id) }));
|
|
const nodeListToArray = nodeList => [...nodeList];
|
|
const none = (arr, fn = Boolean) => !arr.some(fn);
|
|
const nthArg = n => (...args) => args.slice(n)[0];
|
|
const nthElement = (arr, n = 0) => (n === -1 ? arr.slice(n) : arr.slice(n, n + 1))[0];
|
|
const objectFromPairs = arr => arr.reduce((a, [key, val]) => ((a[key] = val), a), {});
|
|
const objectToPairs = obj => Object.keys(obj).map(k => [k, obj[k]]);
|
|
const observeMutations = <span class="fstat-no" title="function not covered" >(e</span>lement, callback, options) => {
|
|
const observer = <span class="cstat-no" title="statement not covered" >new MutationObserver(<span class="fstat-no" title="function not covered" >mu</span>tations => <span class="cstat-no" title="statement not covered" >mutations.forEach(<span class="fstat-no" title="function not covered" >m </span>=> <span class="cstat-no" title="statement not covered" >callback(m))</span>)</span>;</span>
|
|
<span class="cstat-no" title="statement not covered" > observer.observe(</span>
|
|
element,
|
|
Object.assign(
|
|
{
|
|
childList: true,
|
|
attributes: true,
|
|
attributeOldValue: true,
|
|
characterData: true,
|
|
characterDataOldValue: true,
|
|
subtree: true
|
|
},
|
|
options
|
|
)
|
|
);
|
|
<span class="cstat-no" title="statement not covered" > return observer;</span>
|
|
};
|
|
const off = (el, evt, fn, opts = false) => el.removeEventListener(evt, fn, opts);
|
|
const offset = (arr, offset) => [...arr.slice(offset), ...arr.slice(0, offset)];
|
|
const omit = (obj, arr) =>
|
|
Object.keys(obj)
|
|
.filter(k => !arr.includes(k))
|
|
.reduce((acc, key) => ((acc[key] = obj[key]), acc), {});
|
|
const omitBy = (obj, fn) =>
|
|
Object.keys(obj)
|
|
.filter(k => !fn(obj[k], k))
|
|
.reduce((acc, key) => ((acc[key] = obj[key]), acc), {});
|
|
const on = (el, evt, fn, opts = {}) => {
|
|
const delegatorFn = e => e.target.matches(opts.target) && fn.call(e.target, e);
|
|
el.addEventListener(evt, opts.target ? delegatorFn : fn, opts.options || false);
|
|
if (opts.target) return delegatorFn;
|
|
};
|
|
const onUserInputChange = <span class="fstat-no" title="function not covered" >ca</span>llback => {
|
|
let type = <span class="cstat-no" title="statement not covered" >'mouse',</span>
|
|
lastTime = <span class="cstat-no" title="statement not covered" >0;</span>
|
|
const mousemoveHandler = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >()</span> => {</span>
|
|
const now = <span class="cstat-no" title="statement not covered" >performance.now();</span>
|
|
<span class="cstat-no" title="statement not covered" > if (now - lastTime < 20)</span>
|
|
<span class="cstat-no" title="statement not covered" > (type = 'mouse'), callback(type), document.removeEventListener('mousemove', mousemoveHandler);</span>
|
|
<span class="cstat-no" title="statement not covered" > lastTime = now;</span>
|
|
};
|
|
<span class="cstat-no" title="statement not covered" > document.addEventListener('touchstart', <span class="fstat-no" title="function not covered" >()</span> => {</span>
|
|
<span class="cstat-no" title="statement not covered" > if (type === 'touch') <span class="cstat-no" title="statement not covered" >return;</span></span>
|
|
<span class="cstat-no" title="statement not covered" > (type = 'touch'), callback(type), document.addEventListener('mousemove', mousemoveHandler);</span>
|
|
});
|
|
};
|
|
const once = fn => {
|
|
let called = false;
|
|
return function(...args) {
|
|
if (called) return;
|
|
called = true;
|
|
return fn.apply(this, args);
|
|
};
|
|
};
|
|
const orderBy = (arr, props, orders) =>
|
|
[...arr].sort((a, b) =>
|
|
props.reduce((acc, prop, i) => {
|
|
if (acc === 0) {
|
|
const [p1, p2] = orders && orders[i] === 'desc' ? [b[prop], a[prop]] : [a[prop], b[prop]];
|
|
acc = p1 > p2 ? 1 : p1 < p2 ? -1 : 0;
|
|
}
|
|
return acc;
|
|
}, 0)
|
|
);
|
|
const over = (...fns) => (...args) => fns.map(fn => fn.apply(null, args));
|
|
const overArgs = (fn, transforms) => (...args) => fn(...args.map((val, i) => transforms[i](val)));
|
|
const pad = (str, length, char = ' ') =>
|
|
str.padStart((str.length + length) / 2, char).padEnd(length, char);
|
|
const palindrome = str => {
|
|
const s = str.toLowerCase().replace(/[\W_]/g, '');
|
|
return s === [...s].reverse().join('');
|
|
};
|
|
const parseCookie = str =>
|
|
str
|
|
.split(';')
|
|
.map(v => v.split('='))
|
|
.reduce((acc, v) => {
|
|
acc[decodeURIComponent(v[0].trim())] = decodeURIComponent(v[1].trim());
|
|
return acc;
|
|
}, {});
|
|
const partial = (fn, ...partials) => (...args) => fn(...partials, ...args);
|
|
const partialRight = (fn, ...partials) => (...args) => fn(...args, ...partials);
|
|
const partition = (arr, fn) =>
|
|
arr.reduce(
|
|
(acc, val, i, arr) => {
|
|
acc[fn(val, i, arr) ? 0 : 1].push(val);
|
|
return acc;
|
|
},
|
|
[[], []]
|
|
);
|
|
const percentile = (arr, val) =>
|
|
(100 * arr.reduce((acc, v) => acc + (v < val ? 1 : 0) + (v === val ? 0.5 : 0), 0)) / arr.length;
|
|
const permutations = arr => {
|
|
if (arr.length <= 2) return arr.length === 2 ? [arr, [arr[1], arr[0]]] : arr;
|
|
return arr.reduce(
|
|
(acc, item, i) =>
|
|
acc.concat(
|
|
permutations([...arr.slice(0, i), ...arr.slice(i + 1)]).map(val => [item, ...val])
|
|
),
|
|
[]
|
|
);
|
|
};
|
|
const pick = (obj, arr) =>
|
|
arr.reduce((acc, curr) => (curr in obj && (acc[curr] = obj[curr]), acc), {});
|
|
const pickBy = (obj, fn) =>
|
|
Object.keys(obj)
|
|
.filter(k => fn(obj[k], k))
|
|
.reduce((acc, key) => ((acc[key] = obj[key]), acc), {});
|
|
const pipeAsyncFunctions = (...fns) => arg => fns.reduce((p, f) => p.then(f), Promise.resolve(arg));
|
|
const pipeFunctions = (...fns) => fns.reduce((f, g) => (...args) => g(f(...args)));
|
|
const pluralize = (val, word, plural = word + 's') => {
|
|
const _pluralize = (num, word, plural = <span class="branch-0 cbranch-no" title="branch not covered" >word + 's')</span> =>
|
|
[1, -1].includes(Number(num)) ? word : plural;
|
|
if (typeof val === 'object') return (num, word) => _pluralize(num, word, val[word]);
|
|
return _pluralize(val, word, plural);
|
|
};
|
|
const powerset = arr => arr.reduce((a, v) => a.concat(a.map(r => [v].concat(r))), [[]]);
|
|
const prefix = prop => {
|
|
const capitalizedProp = prop.charAt(0).toUpperCase() + prop.slice(1);
|
|
const prefixes = ['', 'webkit', 'moz', 'ms', 'o'];
|
|
const i = prefixes.findIndex(
|
|
prefix => typeof document.body.style[prefix ? prefix + capitalizedProp : prop] !== 'undefined'
|
|
);
|
|
return i !== -1 ? (i === 0 ? <span class="branch-0 cbranch-no" title="branch not covered" >prop </span>: prefixes[i] + capitalizedProp) : <span class="branch-1 cbranch-no" title="branch not covered" >null;</span>
|
|
};
|
|
const prettyBytes = (num, precision = 3, addSpace = true) => {
|
|
const UNITS = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
|
|
if (Math.abs(num) < 1) return num + (addSpace ? ' ' : '') + UNITS[0];
|
|
const exponent = Math.min(Math.floor(Math.log10(num < 0 ? -num : num) / 3), UNITS.length - 1);
|
|
const n = Number(((num < 0 ? -num : num) / 1000 ** exponent).toPrecision(precision));
|
|
return (num < 0 ? '-' : '') + n + (addSpace ? ' ' : '') + UNITS[exponent];
|
|
};
|
|
const primes = num => {
|
|
let arr = Array.from({ length: num - 1 }).map((x, i) => i + 2),
|
|
sqroot = Math.floor(Math.sqrt(num)),
|
|
numsTillSqroot = Array.from({ length: sqroot - 1 }).map((x, i) => i + 2);
|
|
numsTillSqroot.forEach(x => (arr = arr.filter(y => y % x !== 0 || y === x)));
|
|
return arr;
|
|
};
|
|
const promisify = func => (...args) =>
|
|
new Promise((resolve, reject) =>
|
|
func(...args, <span class="fstat-no" title="function not covered" >(e</span>rr, result) => (<span class="cstat-no" title="statement not covered" >err ? reject(err) : resolve(result))</span>)
|
|
);
|
|
const pull = (arr, ...args) => {
|
|
let argState = Array.isArray(args[0]) ? <span class="branch-0 cbranch-no" title="branch not covered" >args[0] </span>: args;
|
|
let pulled = arr.filter((v, i) => !argState.includes(v));
|
|
arr.length = 0;
|
|
pulled.forEach(v => arr.push(v));
|
|
};
|
|
const pullAtIndex = (arr, pullArr) => {
|
|
let removed = [];
|
|
let pulled = arr
|
|
.map((v, i) => (pullArr.includes(i) ? removed.push(v) : v))
|
|
.filter((v, i) => !pullArr.includes(i));
|
|
arr.length = 0;
|
|
pulled.forEach(v => arr.push(v));
|
|
return removed;
|
|
};
|
|
const pullAtValue = (arr, pullArr) => {
|
|
let removed = [],
|
|
pushToRemove = arr.forEach((v, i) => (pullArr.includes(v) ? removed.push(v) : v)),
|
|
mutateTo = arr.filter((v, i) => !pullArr.includes(v));
|
|
arr.length = 0;
|
|
mutateTo.forEach(v => arr.push(v));
|
|
return removed;
|
|
};
|
|
const pullBy = (arr, ...args) => {
|
|
const length = args.length;
|
|
let fn = length > 1 ? args[length - 1] : <span class="branch-1 cbranch-no" title="branch not covered" >undefined;</span>
|
|
fn = typeof fn == 'function' ? (args.pop(), fn) : <span class="branch-1 cbranch-no" title="branch not covered" >undefined;</span>
|
|
let argState = (Array.isArray(args[0]) ? args[0] : <span class="branch-1 cbranch-no" title="branch not covered" >args)</span>.map(val => fn(val));
|
|
let pulled = arr.filter((v, i) => !argState.includes(fn(v)));
|
|
arr.length = 0;
|
|
pulled.forEach(v => arr.push(v));
|
|
};
|
|
const radsToDegrees = rad => (rad * 180.0) / Math.PI;
|
|
const randomHexColorCode = () => {
|
|
let n = (Math.random() * 0xfffff * 1000000).toString(16);
|
|
return '#' + n.slice(0, 6);
|
|
};
|
|
const randomIntArrayInRange = (min, max, n = <span class="branch-0 cbranch-no" title="branch not covered" >1)</span> =>
|
|
Array.from({ length: n }, () => Math.floor(Math.random() * (max - min + 1)) + min);
|
|
const randomIntegerInRange = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min;
|
|
const randomNumberInRange = (min, max) => Math.random() * (max - min) + min;
|
|
|
|
const readFileLines = <span class="fstat-no" title="function not covered" >fi</span>lename =>
|
|
<span class="cstat-no" title="statement not covered" > fs</span>
|
|
.readFileSync(filename)
|
|
.toString('UTF8')
|
|
.split('\n');
|
|
const rearg = (fn, indexes) => (...args) => fn(...indexes.map(i => args[i]));
|
|
const recordAnimationFrames = <span class="fstat-no" title="function not covered" >(c</span>allback, autoStart = <span class="branch-0 cbranch-no" title="branch not covered" >true)</span> => {
|
|
let running = <span class="cstat-no" title="statement not covered" >true,</span>
|
|
raf;
|
|
const stop = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >()</span> => {</span>
|
|
<span class="cstat-no" title="statement not covered" > running = false;</span>
|
|
<span class="cstat-no" title="statement not covered" > cancelAnimationFrame(raf);</span>
|
|
};
|
|
const start = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >()</span> => {</span>
|
|
<span class="cstat-no" title="statement not covered" > running = true;</span>
|
|
<span class="cstat-no" title="statement not covered" > run();</span>
|
|
};
|
|
const run = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >()</span> => {</span>
|
|
<span class="cstat-no" title="statement not covered" > raf = requestAnimationFrame(<span class="fstat-no" title="function not covered" >()</span> => {</span>
|
|
<span class="cstat-no" title="statement not covered" > callback();</span>
|
|
<span class="cstat-no" title="statement not covered" > if (running) <span class="cstat-no" title="statement not covered" >run();</span></span>
|
|
});
|
|
};
|
|
<span class="cstat-no" title="statement not covered" > if (autoStart) <span class="cstat-no" title="statement not covered" >start();</span></span>
|
|
<span class="cstat-no" title="statement not covered" > return { start, stop };</span>
|
|
};
|
|
const redirect = <span class="fstat-no" title="function not covered" >(u</span>rl, asLink = <span class="branch-0 cbranch-no" title="branch not covered" >true)</span> =>
|
|
<span class="cstat-no" title="statement not covered" > asLink ? (window.location.href = url) : window.location.replace(url);</span>
|
|
const reduceSuccessive = (arr, fn, acc) =>
|
|
arr.reduce((res, val, i, arr) => (res.push(fn(res.slice(-1)[0], val, i, arr)), res), [acc]);
|
|
const reduceWhich = (arr, comparator = (a, b) => a - b) =>
|
|
arr.reduce((a, b) => (comparator(a, b) >= 0 ? b : a));
|
|
const reducedFilter = (data, keys, fn) =>
|
|
data.filter(fn).map(el =>
|
|
keys.reduce((acc, key) => {
|
|
acc[key] = el[key];
|
|
return acc;
|
|
}, {})
|
|
);
|
|
const reject = (pred, array) => array.filter((...args) => !pred(...args));
|
|
const remove = (arr, func) =>
|
|
Array.isArray(arr)
|
|
? arr.filter(func).reduce((acc, val) => {
|
|
arr.splice(arr.indexOf(val), 1);
|
|
return acc.concat(val);
|
|
}, [])
|
|
: <span class="branch-1 cbranch-no" title="branch not covered" >[];</span>
|
|
const removeNonASCII = str => str.replace(/[^\x20-\x7E]/g, '');
|
|
const renameKeys = (keysMap, obj) =>
|
|
Object.keys(obj).reduce(
|
|
(acc, key) => ({
|
|
...acc,
|
|
...{ [keysMap[key] || key]: obj[key] }
|
|
}),
|
|
{}
|
|
);
|
|
const reverseString = str => [...str].reverse().join('');
|
|
const round = (n, decimals = 0) => Number(`${Math.round(`${n}e${decimals}`)}e-${decimals}`);
|
|
const runAsync = <span class="fstat-no" title="function not covered" >fn</span> => {
|
|
const worker = <span class="cstat-no" title="statement not covered" >new Worker(</span>
|
|
URL.createObjectURL(new Blob([`postMessage((${fn})());`]), {
|
|
type: 'application/javascript; charset=utf-8'
|
|
})
|
|
);
|
|
<span class="cstat-no" title="statement not covered" > return new Promise(<span class="fstat-no" title="function not covered" >(r</span>es, rej) => {</span>
|
|
<span class="cstat-no" title="statement not covered" > worker.onmessage = <span class="fstat-no" title="function not covered" >({</span> data }) => {</span>
|
|
<span class="cstat-no" title="statement not covered" > res(data), worker.terminate();</span>
|
|
};
|
|
<span class="cstat-no" title="statement not covered" > worker.onerror = <span class="fstat-no" title="function not covered" >er</span>r => {</span>
|
|
<span class="cstat-no" title="statement not covered" > rej(err), worker.terminate();</span>
|
|
};
|
|
});
|
|
};
|
|
const runPromisesInSeries = ps => ps.reduce((p, next) => p.then(next), Promise.resolve());
|
|
const sample = arr => arr[Math.floor(Math.random() * arr.length)];
|
|
const sampleSize = ([...arr], n = 1) => {
|
|
let m = arr.length;
|
|
while (m) {
|
|
const i = Math.floor(Math.random() * m--);
|
|
[arr[m], arr[i]] = [arr[i], arr[m]];
|
|
}
|
|
return arr.slice(0, n);
|
|
};
|
|
const scrollToTop = <span class="fstat-no" title="function not covered" >()</span> => {
|
|
const c = <span class="cstat-no" title="statement not covered" >document.documentElement.scrollTop || document.body.scrollTop;</span>
|
|
<span class="cstat-no" title="statement not covered" > if (c > 0) {</span>
|
|
<span class="cstat-no" title="statement not covered" > window.requestAnimationFrame(scrollToTop);</span>
|
|
<span class="cstat-no" title="statement not covered" > window.scrollTo(0, c - c / 8);</span>
|
|
}
|
|
};
|
|
const sdbm = str => {
|
|
let arr = str.split('');
|
|
return arr.reduce(
|
|
(hashCode, currentVal) =>
|
|
(hashCode = currentVal.charCodeAt(0) + (hashCode << 6) + (hashCode << 16) - hashCode),
|
|
0
|
|
);
|
|
};
|
|
const serializeCookie = (name, val) => `${encodeURIComponent(name)}=${encodeURIComponent(val)}`;
|
|
const setStyle = <span class="fstat-no" title="function not covered" >(e</span>l, ruleName, val) => (<span class="cstat-no" title="statement not covered" >el.style[ruleName] = val)</span>;
|
|
const shallowClone = obj => Object.assign({}, obj);
|
|
const shank = (arr, index = <span class="branch-0 cbranch-no" title="branch not covered" >0,</span> delCount = <span class="branch-0 cbranch-no" title="branch not covered" >0,</span> ...elements) =>
|
|
arr
|
|
.slice(0, index)
|
|
.concat(elements)
|
|
.concat(arr.slice(index + delCount));
|
|
const show = (...el) => [...el].forEach(e => (e.style.display = ''));
|
|
const shuffle = ([...arr]) => {
|
|
let m = arr.length;
|
|
while (m) {
|
|
const i = Math.floor(Math.random() * m--);
|
|
[arr[m], arr[i]] = [arr[i], arr[m]];
|
|
}
|
|
return arr;
|
|
};
|
|
const similarity = (arr, values) => arr.filter(v => values.includes(v));
|
|
const size = val =>
|
|
Array.isArray(val)
|
|
? val.length
|
|
: val && typeof val === 'object'
|
|
? val.size || val.length || Object.keys(val).length
|
|
: <span class="branch-1 cbranch-no" title="branch not covered" >typeof val === 'string'</span>
|
|
? new Blob([val]).size
|
|
: 0;
|
|
const sleep = <span class="fstat-no" title="function not covered" >ms</span> => <span class="cstat-no" title="statement not covered" >new Promise(<span class="fstat-no" title="function not covered" >re</span>solve => <span class="cstat-no" title="statement not covered" >setTimeout(resolve, ms))</span>;</span>
|
|
const smoothScroll = <span class="fstat-no" title="function not covered" >el</span>ement =>
|
|
<span class="cstat-no" title="statement not covered" > document.querySelector(element).scrollIntoView({</span>
|
|
behavior: 'smooth'
|
|
});
|
|
const sortCharactersInString = str => [...str].sort((a, b) => a.localeCompare(b)).join('');
|
|
const sortedIndex = (arr, n) => {
|
|
const isDescending = arr[0] > arr[arr.length - 1];
|
|
const index = arr.findIndex(el => (isDescending ? n >= el : n <= el));
|
|
return index === -1 ? arr.length : index;
|
|
};
|
|
const sortedIndexBy = (arr, n, fn) => {
|
|
const isDescending = fn(arr[0]) > fn(arr[arr.length - 1]);
|
|
const val = fn(n);
|
|
const index = arr.findIndex(el => (isDescending ? val >= fn(el) : val <= fn(el)));
|
|
return index === -1 ? arr.length : index;
|
|
};
|
|
const sortedLastIndex = (arr, n) => {
|
|
const isDescending = arr[0] > arr[arr.length - 1];
|
|
const index = arr.reverse().findIndex(el => (isDescending ? n <= el : n >= el));
|
|
return index === -1 ? 0 : arr.length - index;
|
|
};
|
|
const sortedLastIndexBy = (arr, n, fn) => {
|
|
const isDescending = fn(arr[0]) > fn(arr[arr.length - 1]);
|
|
const val = fn(n);
|
|
const index = arr
|
|
.map(fn)
|
|
.reverse()
|
|
.findIndex(el => (isDescending ? val <= el : val >= el));
|
|
return index === -1 ? 0 : arr.length - index;
|
|
};
|
|
const splitLines = str => str.split(/\r?\n/);
|
|
const spreadOver = fn => argsArr => fn(...argsArr);
|
|
const stableSort = (arr, compare) =>
|
|
arr
|
|
.map((item, index) => ({ item, index }))
|
|
.sort((a, b) => compare(a.item, b.item) || a.index - b.index)
|
|
.map(({ item }) => item);
|
|
const standardDeviation = (arr, usePopulation = false) => {
|
|
const mean = arr.reduce((acc, val) => acc + val, 0) / arr.length;
|
|
return Math.sqrt(
|
|
arr.reduce((acc, val) => acc.concat((val - mean) ** 2), []).reduce((acc, val) => acc + val, 0) /
|
|
(arr.length - (usePopulation ? 0 : 1))
|
|
);
|
|
};
|
|
const stringPermutations = str => {
|
|
if (str.length <= 2) return str.length === 2 ? [str, str[1] + str[0]] : [str];
|
|
return str
|
|
.split('')
|
|
.reduce(
|
|
(acc, letter, i) =>
|
|
acc.concat(stringPermutations(str.slice(0, i) + str.slice(i + 1)).map(val => letter + val)),
|
|
[]
|
|
);
|
|
};
|
|
const stripHTMLTags = str => str.replace(/<[^>]*>/g, '');
|
|
const sum = (...arr) => [...arr].reduce((acc, val) => acc + val, 0);
|
|
const sumBy = (arr, fn) =>
|
|
arr.map(typeof fn === 'function' ? fn : val => val[fn]).reduce((acc, val) => acc + val, 0);
|
|
const sumPower = (end, power = 2, start = 1) =>
|
|
Array(end + 1 - start)
|
|
.fill(0)
|
|
.map((x, i) => (i + start) ** power)
|
|
.reduce((a, b) => a + b, 0);
|
|
const symmetricDifference = (a, b) => {
|
|
const sA = new Set(a),
|
|
sB = new Set(b);
|
|
return [...a.filter(x => !sB.has(x)), ...b.filter(x => !sA.has(x))];
|
|
};
|
|
const symmetricDifferenceBy = (a, b, fn) => {
|
|
const sA = new Set(a.map(v => fn(v))),
|
|
sB = new Set(b.map(v => fn(v)));
|
|
return [...a.filter(x => !sB.has(fn(x))), ...b.filter(x => !sA.has(fn(x)))];
|
|
};
|
|
const symmetricDifferenceWith = (arr, val, comp) => [
|
|
...arr.filter(a => val.findIndex(b => comp(a, b)) === -1),
|
|
...val.filter(a => arr.findIndex(b => comp(a, b)) === -1)
|
|
];
|
|
const tail = arr => (arr.length > 1 ? arr.slice(1) : arr);
|
|
const take = (arr, n = 1) => arr.slice(0, n);
|
|
const takeRight = (arr, n = 1) => arr.slice(arr.length - n, arr.length);
|
|
const takeRightWhile = (arr, func) =>
|
|
arr.reduceRight((acc, el) => (func(el) ? acc : [el, ...acc]), []);
|
|
const takeWhile = (arr, func) => {
|
|
for (const [i, val] of arr.entries()) if (func(val)) return arr.slice(0, i);
|
|
return arr;
|
|
};
|
|
const throttle = (fn, wait) => {
|
|
let inThrottle, lastFn, lastTime;
|
|
return function() {
|
|
const context = this,
|
|
args = arguments;
|
|
<span class="missing-if-branch" title="else path not taken" >E</span>if (!inThrottle) {
|
|
fn.apply(context, args);
|
|
lastTime = Date.now();
|
|
inThrottle = true;
|
|
} else {
|
|
<span class="cstat-no" title="statement not covered" > clearTimeout(lastFn);</span>
|
|
<span class="cstat-no" title="statement not covered" > lastFn = setTimeout(<span class="fstat-no" title="function not covered" >fu</span>nction() {</span>
|
|
<span class="cstat-no" title="statement not covered" > if (Date.now() - lastTime >= wait) {</span>
|
|
<span class="cstat-no" title="statement not covered" > fn.apply(context, args);</span>
|
|
<span class="cstat-no" title="statement not covered" > lastTime = Date.now();</span>
|
|
}
|
|
}, Math.max(wait - (Date.now() - lastTime), 0));
|
|
}
|
|
};
|
|
};
|
|
const timeTaken = callback => {
|
|
console.time('timeTaken');
|
|
const r = callback();
|
|
console.timeEnd('timeTaken');
|
|
return r;
|
|
};
|
|
const times = (n, fn, context = undefined) => {
|
|
let i = 0;
|
|
while (fn.call(context, i) !== false && ++i < n) {}
|
|
};
|
|
const toCamelCase = str => {
|
|
let s =
|
|
str &&
|
|
str
|
|
.match(/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g)
|
|
.map(x => x.slice(0, 1).toUpperCase() + x.slice(1).toLowerCase())
|
|
.join('');
|
|
return s.slice(0, 1).toLowerCase() + s.slice(1);
|
|
};
|
|
const toCurrency = (n, curr, LanguageFormat = undefined) =>
|
|
Intl.NumberFormat(LanguageFormat, { style: 'currency', currency: curr }).format(n);
|
|
const toDecimalMark = num => num.toLocaleString('en-US');
|
|
const toHash = (object, key) =>
|
|
Array.prototype.reduce.call(
|
|
object,
|
|
(acc, data, index) => ((acc[!key ? index : data[key]] = data), acc),
|
|
{}
|
|
);
|
|
const toKebabCase = str =>
|
|
str &&
|
|
str
|
|
.match(/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g)
|
|
.map(x => x.toLowerCase())
|
|
.join('-');
|
|
const toOrdinalSuffix = num => {
|
|
const int = parseInt(num),
|
|
digits = [int % 10, int % 100],
|
|
ordinals = ['st', 'nd', 'rd', 'th'],
|
|
oPattern = [1, 2, 3, 4],
|
|
tPattern = [11, 12, 13, 14, 15, 16, 17, 18, 19];
|
|
return oPattern.includes(digits[0]) && !tPattern.includes(digits[1])
|
|
? int + ordinals[digits[0] - 1]
|
|
: int + ordinals[3];
|
|
};
|
|
const toSafeInteger = num =>
|
|
Math.round(Math.max(Math.min(num, Number.MAX_SAFE_INTEGER), Number.MIN_SAFE_INTEGER));
|
|
const toSnakeCase = str =>
|
|
str &&
|
|
str
|
|
.match(/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g)
|
|
.map(x => x.toLowerCase())
|
|
.join('_');
|
|
const toTitleCase = str =>
|
|
str
|
|
.match(/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g)
|
|
.map(x => x.charAt(0).toUpperCase() + x.slice(1))
|
|
.join(' ');
|
|
const toggleClass = (el, className) => el.classList.toggle(className);
|
|
const tomorrow = (long = false) => {
|
|
let t = new Date();
|
|
t.setDate(t.getDate() + 1);
|
|
const ret = `${t.getFullYear()}-${String(t.getMonth() + 1).padStart(2, '0')}-${String(
|
|
t.getDate()
|
|
).padStart(2, '0')}`;
|
|
return !long ? ret : <span class="branch-1 cbranch-no" title="branch not covered" >`${ret}T00:00:00`;</span>
|
|
};
|
|
const transform = (obj, fn, acc) => Object.keys(obj).reduce((a, k) => fn(a, obj[k], k, obj), acc);
|
|
const triggerEvent = (el, eventType, detail) =>
|
|
el.dispatchEvent(new CustomEvent(eventType, { detail }));
|
|
const truncateString = (str, num) =>
|
|
str.length > num ? str.slice(0, num > 3 ? num - 3 : <span class="branch-1 cbranch-no" title="branch not covered" >num)</span> + '...' : <span class="branch-1 cbranch-no" title="branch not covered" >str;</span>
|
|
const truthCheckCollection = (collection, pre) => collection.every(obj => obj[pre]);
|
|
const unary = fn => val => fn(val);
|
|
const uncurry = (fn, n = 1) => (...args) => {
|
|
const next = acc => args => args.reduce((x, y) => x(y), acc);
|
|
if (n > args.length) throw new RangeError('Arguments too few!');
|
|
return next(fn)(args.slice(0, n));
|
|
};
|
|
const unescapeHTML = str =>
|
|
str.replace(
|
|
/&amp;|&lt;|&gt;|&#39;|&quot;/g,
|
|
tag =>
|
|
({
|
|
'&amp;': '&',
|
|
'&lt;': '<',
|
|
'&gt;': '>',
|
|
'&#39;': "'",
|
|
'&quot;': '"'
|
|
}[tag] || <span class="branch-1 cbranch-no" title="branch not covered" >tag)</span>
|
|
);
|
|
const unflattenObject = obj =>
|
|
Object.keys(obj).reduce((acc, k) => {
|
|
if (k.indexOf('.') !== -1) {
|
|
const keys = k.split('.');
|
|
Object.assign(
|
|
acc,
|
|
JSON.parse(
|
|
'{' +
|
|
keys.map((v, i) => (i !== keys.length - 1 ? `"${v}":{` : `"${v}":`)).join('') +
|
|
obj[k] +
|
|
'}'.repeat(keys.length)
|
|
)
|
|
);
|
|
} else acc[k] = obj[k];
|
|
return acc;
|
|
}, {});
|
|
const unfold = (fn, seed) => {
|
|
let result = [],
|
|
val = [null, seed];
|
|
while ((val = fn(val[1]))) result.push(val[0]);
|
|
return result;
|
|
};
|
|
const union = (a, b) => Array.from(new Set([...a, ...b]));
|
|
const unionBy = (a, b, fn) => {
|
|
const s = new Set(a.map(fn));
|
|
return Array.from(new Set([...a, ...b.filter(x => !s.has(fn(x)))]));
|
|
};
|
|
const unionWith = (a, b, comp) =>
|
|
Array.from(new Set([...a, ...b.filter(x => a.findIndex(y => comp(x, y)) === -1)]));
|
|
const uniqueElements = arr => [...new Set(arr)];
|
|
const uniqueElementsBy = (arr, fn) =>
|
|
arr.reduce((acc, v) => {
|
|
if (!acc.some(x => fn(v, x))) acc.push(v);
|
|
return acc;
|
|
}, []);
|
|
const uniqueElementsByRight = (arr, fn) =>
|
|
arr.reduceRight((acc, v) => {
|
|
if (!acc.some(x => fn(v, x))) acc.push(v);
|
|
return acc;
|
|
}, []);
|
|
const uniqueSymmetricDifference = (a, b) => [
|
|
...new Set([...a.filter(v => !b.includes(v)), ...b.filter(v => !a.includes(v))])
|
|
];
|
|
const untildify = str => str.replace(/^~($|\/|\\)/, `${require('os').homedir()}$1`);
|
|
const unzip = arr =>
|
|
arr.reduce(
|
|
(acc, val) => (val.forEach((v, i) => acc[i].push(v)), acc),
|
|
Array.from({
|
|
length: Math.max(...arr.map(x => x.length))
|
|
}).map(x => [])
|
|
);
|
|
const unzipWith = (arr, fn) =>
|
|
arr
|
|
.reduce(
|
|
(acc, val) => (val.forEach((v, i) => acc[i].push(v)), acc),
|
|
Array.from({
|
|
length: Math.max(...arr.map(x => x.length))
|
|
}).map(x => [])
|
|
)
|
|
.map(val => fn(...val));
|
|
const validateNumber = n => !isNaN(parseFloat(n)) && isFinite(n) && Number(n) == n;
|
|
const when = (pred, whenTrue) => x => (pred(x) ? whenTrue(x) : x);
|
|
const without = (arr, ...args) => arr.filter(v => !args.includes(v));
|
|
const words = (str, pattern = /[^a-zA-Z-]+/) => str.split(pattern).filter(Boolean);
|
|
const xProd = (a, b) => a.reduce((acc, x) => acc.concat(b.map(y => [x, y])), []);
|
|
const yesNo = (val, def = false) =>
|
|
/^(y|yes)$/i.test(val) ? true : /^(n|no)$/i.test(val) ? false : def;
|
|
const zip = (...arrays) => {
|
|
const maxLength = Math.max(...arrays.map(x => x.length));
|
|
return Array.from({ length: maxLength }).map((_, i) => {
|
|
return Array.from({ length: arrays.length }, (_, k) => arrays[k][i]);
|
|
});
|
|
};
|
|
const zipObject = (props, values) =>
|
|
props.reduce((obj, prop, index) => ((obj[prop] = values[index]), obj), {});
|
|
const zipWith = (...array) => {
|
|
const fn = typeof array[array.length - 1] === 'function' ? array.pop() : undefined;
|
|
return Array.from(
|
|
{ length: Math.max(...array.map(a => a.length)) },
|
|
(_, i) => (fn ? fn(...array.map(a => a[i])) : array.map(a => a[i]))
|
|
);
|
|
};
|
|
const JSONToDate = arr => {
|
|
const dt = new Date(parseInt(arr.toString().substr(6)));
|
|
return `${dt.getDate()}/${dt.getMonth() + 1}/${dt.getFullYear()}`;
|
|
};
|
|
const binarySearch = (arr, val, start = 0, end = arr.length - 1) => {
|
|
if (start > end) return -1;
|
|
const mid = Math.floor((start + end) / 2);
|
|
if (arr[mid] > val) return binarySearch(arr, val, start, mid - 1);
|
|
if (arr[mid] < val) return binarySearch(arr, val, mid + 1, end);
|
|
return mid;
|
|
};
|
|
const celsiusToFahrenheit = degrees => 1.8 * degrees + 32;
|
|
const cleanObj = (obj, keysToKeep = <span class="branch-0 cbranch-no" title="branch not covered" >[],</span> childIndicator) => {
|
|
Object.keys(obj).forEach(key => {
|
|
if (key === childIndicator) {
|
|
cleanObj(obj[key], keysToKeep, childIndicator);
|
|
} else if (!keysToKeep.includes(key)) {
|
|
delete obj[key];
|
|
}
|
|
});
|
|
return obj;
|
|
};
|
|
const collatz = n => (n % 2 === 0 ? n / 2 : 3 * n + 1);
|
|
const countVowels = str => (str.match(/[aeiou]/gi) || []).length;
|
|
const factors = (num, primes = false) => {
|
|
const isPrime = num => {
|
|
const boundary = Math.floor(Math.sqrt(num));
|
|
for (var i = 2; i <= boundary; i++) <span class="missing-if-branch" title="else path not taken" >E</span>if (num % i === 0) return false;
|
|
return num >= 2;
|
|
};
|
|
const isNeg = num < 0;
|
|
num = isNeg ? -num : num;
|
|
let array = Array.from({ length: num - 1 })
|
|
.map((val, i) => (num % (i + 2) === 0 ? i + 2 : false))
|
|
.filter(val => val);
|
|
if (isNeg)
|
|
array = array.reduce((acc, val) => {
|
|
acc.push(val);
|
|
acc.push(-val);
|
|
return acc;
|
|
}, []);
|
|
return primes ? array.filter(isPrime) : array;
|
|
};
|
|
const fahrenheitToCelsius = degrees => (degrees - 32) * 5/9;
|
|
const fibonacciCountUntilNum = num =>
|
|
Math.ceil(Math.log(num * Math.sqrt(5) + 1 / 2) / Math.log((Math.sqrt(5) + 1) / 2));
|
|
const fibonacciUntilNum = num => {
|
|
let n = Math.ceil(Math.log(num * Math.sqrt(5) + 1 / 2) / Math.log((Math.sqrt(5) + 1) / 2));
|
|
return Array.from({ length: n }).reduce(
|
|
(acc, val, i) => acc.concat(i > 1 ? acc[i - 1] + acc[i - 2] : i),
|
|
[]
|
|
);
|
|
};
|
|
const heronArea = (side_a, side_b, side_c) => {
|
|
const p = (side_a + side_b + side_c) / 2
|
|
return Math.sqrt(p * (p-side_a) * (p-side_b) * (p-side_c))
|
|
};
|
|
const howManyTimes = (num, divisor) => {
|
|
if (divisor === 1 || divisor === -1) return Infinity;
|
|
if (divisor === 0) return 0;
|
|
let i = 0;
|
|
while (Number.isInteger(num / divisor)) {
|
|
i++;
|
|
num = num / divisor;
|
|
}
|
|
return i;
|
|
};
|
|
const httpDelete = (url, callback, err = console.error) => {
|
|
const request = new XMLHttpRequest();
|
|
request.open('DELETE', url, true);
|
|
request.onload = <span class="fstat-no" title="function not covered" >()</span> => <span class="cstat-no" title="statement not covered" >callback(request);</span>
|
|
request.onerror = <span class="fstat-no" title="function not covered" >()</span> => <span class="cstat-no" title="statement not covered" >err(request);</span>
|
|
request.send();
|
|
};
|
|
const httpPut = (url, data, callback, err = console.error) => {
|
|
const request = new XMLHttpRequest();
|
|
request.open("PUT", url, true);
|
|
request.setRequestHeader('Content-type','application/json; charset=utf-8');
|
|
request.onload = <span class="fstat-no" title="function not covered" >()</span> => <span class="cstat-no" title="statement not covered" >callback(request);</span>
|
|
request.onerror = <span class="fstat-no" title="function not covered" >()</span> => <span class="cstat-no" title="statement not covered" >err(request);</span>
|
|
request.send(data);
|
|
};
|
|
const isArmstrongNumber = digits =>
|
|
(arr => arr.reduce((a, d) => a + parseInt(d) ** arr.length, 0) == digits)(
|
|
(digits + '').split('')
|
|
);
|
|
const isSimilar = (pattern, str) =>
|
|
[...str].reduce(
|
|
(matchIndex, char) =>
|
|
char.toLowerCase() === (pattern[matchIndex] || <span class="branch-1 cbranch-no" title="branch not covered" >'')</span>.toLowerCase()
|
|
? matchIndex + 1
|
|
: matchIndex,
|
|
0
|
|
) === pattern.length;
|
|
const kmphToMph = (kmph) => 0.621371192 * kmph;
|
|
const levenshteinDistance = (string1, string2) => {
|
|
if (string1.length === 0) return string2.length;
|
|
if (string2.length === 0) return string1.length;
|
|
let matrix = Array(string2.length + 1)
|
|
.fill(0)
|
|
.map((x, i) => [i]);
|
|
matrix[0] = Array(string1.length + 1)
|
|
.fill(0)
|
|
.map((x, i) => i);
|
|
for (let i = 1; i <= string2.length; i++) {
|
|
for (let j = 1; j <= string1.length; j++) {
|
|
if (string2[i - 1] === string1[j - 1]) {
|
|
matrix[i][j] = matrix[i - 1][j - 1];
|
|
} else {
|
|
matrix[i][j] = Math.min(
|
|
matrix[i - 1][j - 1] + 1,
|
|
matrix[i][j - 1] + 1,
|
|
matrix[i - 1][j] + 1
|
|
);
|
|
}
|
|
}
|
|
}
|
|
return matrix[string2.length][string1.length];
|
|
};
|
|
const mphToKmph = (mph) => 1.6093440006146922 * mph;
|
|
const pipeLog = data => console.log(data) || data;
|
|
const quickSort = ([n, ...nums], desc) =>
|
|
isNaN(n)
|
|
? []
|
|
: [
|
|
...quickSort(nums.filter(v => (desc ? <span class="branch-0 cbranch-no" title="branch not covered" >v > n </span>: v <= n)), desc),
|
|
n,
|
|
...quickSort(nums.filter(v => (!desc ? v > n : <span class="branch-1 cbranch-no" title="branch not covered" >v <= n)</span>), desc)
|
|
];
|
|
const removeVowels = (str, repl = '') => str.replace(/[aeiou]/gi, repl);
|
|
const solveRPN = rpn => {
|
|
const OPERATORS = {
|
|
'*': (a, b) => a * b,
|
|
'+': (a, b) => a + b,
|
|
'-': (a, b) => a - b,
|
|
'/': (a, b) => a / b,
|
|
'**': (a, b) => a ** b
|
|
};
|
|
const [stack, solve] = [
|
|
[],
|
|
rpn
|
|
.replace(/\^/g, '**')
|
|
.split(/\s+/g)
|
|
.filter(el => !/\s+/.test(el) && el !== '')
|
|
];
|
|
solve.forEach(symbol => {
|
|
if (!isNaN(parseFloat(symbol)) && isFinite(symbol)) {
|
|
stack.push(symbol);
|
|
} else <span class="missing-if-branch" title="else path not taken" >E</span>if (Object.keys(OPERATORS).includes(symbol)) {
|
|
const [a, b] = [stack.pop(), stack.pop()];
|
|
stack.push(OPERATORS[symbol](parseFloat(b), parseFloat(a)));
|
|
} else {
|
|
<span class="cstat-no" title="statement not covered" > throw `${symbol} is not a recognized symbol`;</span>
|
|
}
|
|
});
|
|
<span class="missing-if-branch" title="else path not taken" >E</span>if (stack.length === 1) return stack.pop();
|
|
else <span class="cstat-no" title="statement not covered" >throw `${rpn} is not a proper RPN. Please check it and try again`;</span>
|
|
};
|
|
const speechSynthesis = <span class="fstat-no" title="function not covered" >me</span>ssage => {
|
|
const msg = <span class="cstat-no" title="statement not covered" >new SpeechSynthesisUtterance(message);</span>
|
|
<span class="cstat-no" title="statement not covered" > msg.voice = window.speechSynthesis.getVoices()[0];</span>
|
|
<span class="cstat-no" title="statement not covered" > window.speechSynthesis.speak(msg);</span>
|
|
};
|
|
const squareSum = (...args) => args.reduce((squareSum, number) => squareSum + Math.pow(number, 2), 0);
|
|
|
|
|
|
module.exports = {CSVToArray,CSVToJSON,JSONToFile,JSONtoCSV,RGBToHex,URLJoin,UUIDGeneratorBrowser,UUIDGeneratorNode,all,allEqual,any,approximatelyEqual,arrayToCSV,arrayToHtmlList,ary,atob,attempt,average,averageBy,bifurcate,bifurcateBy,bind,bindAll,bindKey,binomialCoefficient,bottomVisible,btoa,byteSize,call,capitalize,capitalizeEveryWord,castArray,chainAsync,chunk,clampNumber,cloneRegExp,coalesce,coalesceFactory,collectInto,colorize,compact,compose,composeRight,converge,copyToClipboard,countBy,countOccurrences,counter,createElement,createEventHub,currentURL,curry,dayOfYear,debounce,decapitalize,deepClone,deepFlatten,deepFreeze,defaults,defer,degreesToRads,delay,detectDeviceType,difference,differenceBy,differenceWith,dig,digitize,distance,drop,dropRight,dropRightWhile,dropWhile,elementContains,elementIsVisibleInViewport,elo,equals,escapeHTML,escapeRegExp,everyNth,extendHex,factorial,fibonacci,filterNonUnique,filterNonUniqueBy,findKey,findLast,findLastIndex,findLastKey,flatten,flattenObject,flip,forEachRight,forOwn,forOwnRight,formatDuration,fromCamelCase,functionName,functions,gcd,geometricProgression,get,getColonTimeFromDate,getDaysDiffBetweenDates,getImages,getMeridiemSuffixOfInteger,getScrollPosition,getStyle,getType,getURLParameters,groupBy,hammingDistance,hasClass,hasFlags,hashBrowser,hashNode,head,hexToRGB,hide,httpGet,httpPost,httpsRedirect,hz,inRange,indentString,indexOfAll,initial,initialize2DArray,initializeArrayWithRange,initializeArrayWithRangeRight,initializeArrayWithValues,initializeNDArray,insertAfter,insertBefore,intersection,intersectionBy,intersectionWith,invertKeyValues,is,isAbsoluteURL,isAfterDate,isAnagram,isArrayLike,isBeforeDate,isBoolean,isBrowser,isBrowserTabFocused,isDivisible,isDuplexStream,isEmpty,isEven,isFunction,isLowerCase,isNil,isNull,isNumber,isObject,isObjectLike,isPlainObject,isPrime,isPrimitive,isPromiseLike,isReadableStream,isSameDate,isSorted,isStream,isString,isSymbol,isTravisCI,isUndefined,isUpperCase,isValidJSON,isWritableStream,join,last,lcm,longestItem,lowercaseKeys,luhnCheck,mapKeys,mapObject,mapString,mapValues,mask,matches,matchesWith,maxBy,maxDate,maxN,median,memoize,merge,minBy,minDate,minN,mostPerformant,negate,nest,nodeListToArray,none,nthArg,nthElement,objectFromPairs,objectToPairs,observeMutations,off,offset,omit,omitBy,on,onUserInputChange,once,orderBy,over,overArgs,pad,palindrome,parseCookie,partial,partialRight,partition,percentile,permutations,pick,pickBy,pipeAsyncFunctions,pipeFunctions,pluralize,powerset,prefix,prettyBytes,primes,promisify,pull,pullAtIndex,pullAtValue,pullBy,radsToDegrees,randomHexColorCode,randomIntArrayInRange,randomIntegerInRange,randomNumberInRange,readFileLines,rearg,recordAnimationFrames,redirect,reduceSuccessive,reduceWhich,reducedFilter,reject,remove,removeNonASCII,renameKeys,reverseString,round,runAsync,runPromisesInSeries,sample,sampleSize,scrollToTop,sdbm,serializeCookie,setStyle,shallowClone,shank,show,shuffle,similarity,size,sleep,smoothScroll,sortCharactersInString,sortedIndex,sortedIndexBy,sortedLastIndex,sortedLastIndexBy,splitLines,spreadOver,stableSort,standardDeviation,stringPermutations,stripHTMLTags,sum,sumBy,sumPower,symmetricDifference,symmetricDifferenceBy,symmetricDifferenceWith,tail,take,takeRight,takeRightWhile,takeWhile,throttle,timeTaken,times,toCamelCase,toCurrency,toDecimalMark,toHash,toKebabCase,toOrdinalSuffix,toSafeInteger,toSnakeCase,toTitleCase,toggleClass,tomorrow,transform,triggerEvent,truncateString,truthCheckCollection,unary,uncurry,unescapeHTML,unflattenObject,unfold,union,unionBy,unionWith,uniqueElements,uniqueElementsBy,uniqueElementsByRight,uniqueSymmetricDifference,untildify,unzip,unzipWith,validateNumber,when,without,words,xProd,yesNo,zip,zipObject,zipWith,JSONToDate,binarySearch,celsiusToFahrenheit,cleanObj,collatz,countVowels,factors,fahrenheitToCelsius,fibonacciCountUntilNum,fibonacciUntilNum,heronArea,howManyTimes,httpDelete,httpPut,isArmstrongNumber,isSimilar,kmphToMph,levenshteinDistance,mphToKmph,pipeLog,quickSort,removeVowels,solveRPN,speechSynthesis,squareSum}</pre></td></tr>
|
|
</table></pre>
|
|
<div class='push'></div><!-- for sticky footer -->
|
|
</div><!-- /wrapper -->
|
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
Code coverage
|
|
generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Sat Nov 10 2018 16:21:33 GMT+0200 (GTB Standard Time)
|
|
</div>
|
|
</div>
|
|
<script src="prettify.js"></script>
|
|
<script>
|
|
window.onload = function () {
|
|
if (typeof prettyPrint === 'function') {
|
|
prettyPrint();
|
|
}
|
|
};
|
|
</script>
|
|
<script src="sorter.js"></script>
|
|
</body>
|
|
</html>
|