-
-
Notifications
You must be signed in to change notification settings - Fork 20
/
pdfviewer.py
1198 lines (1091 loc) · 152 KB
/
pdfviewer.py
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
"""
This software is available for your use under a MODIFIED LGPL3+ license
This notice, these first 37 lines of code shall remain unchanged
# #
## ## #### ##### # ###### # ###### #####
# # # # # # # # # # # # # #
# # # # # # # # ##### # ##### # #
# # # # # # # # # # # #
# # # # # # # # # # # #
# # #### ##### # # # ###### #####
888 .d8888b. 8888888b. 888 .d8888b.
888 d88P Y88b 888 Y88b 888 d88P Y88b
888 888 888 888 888 888 .d88P
888 888 888 d88P 888 8888" 888
888 888 88888 8888888P" 888 "Y8b. 8888888
888 888 888 888 888 888 888 888
888 Y88b d88P 888 888 Y88b d88P
88888888 "Y8888P88 888 88888888 "Y8888P"
And just what is that? Well, it's LPGL3+ and these FOUR simple stipulations.
1. These and all comments are to remain in this document
2. You will not post this software in a repository or a location for others to download from:
A. Unless you have made 10 lines of changes
B. A notice is posted with the code that it is not the original code but instead derived from an original
3. Forking is OK and does NOT require any changes as long as it is obvious forked and stated on the page
where your software is being hosted. For example, GitHub does a fantastic job of indicating if a repository
is the result of a fork.
4. This software code is only avaiable on github(https://github.com/Zain-Bin-Arshad/pdf-viewer).
If you've obtained this software in any other way, then those listed here, then SUPPORT WILL NOT BE PROVIDED.
-----------------------------------------------------------------------------------------------------------------
"""
import os
import fitz
import PySimpleGUI as sg
import webbrowser as wb
from threading import Thread
DEF_PAD = sg.DEFAULT_ELEMENT_PADDING
LOGO = b'iVBORw0KGgoAAAANSUhEUgAAACcAAAAnCAMAAAC7faEHAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAKjUExURQAAAAAAAP///wAAAICAgAAAAAAAAEBAQBwcHAAAABcXFwAAABUVFQAAAAAAAAAAABEREQAAAAAAAA8PDwAAAA4ODgAAAAAAAAwMDAAAAAwMDAsLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAAAAAgICAAAAAAAAAAAAAAAAAcHBwAAAAAAAAAAAAcHBwAAAAAAAAYGBgAAAAYGBgAAAAYGBgAAAAYGBgYGBgAAAAUFBQAAAAAAAAAAAAAAAAAAAAUFBQAAAAUFBQAAAAAAAAAAAAAAAAQEBAAAAAQEBAAAAAAAAAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwAAAAAAAAAAAAAAAAAAAAMDAwAAAAAAAAMDAwAAAAMDAwAAAAAAAAMDAwAAAAAAAAAAAAICAgAAAAICAgAAAAAAAAICAgAAAAAAAAICAgICAgAAAAICAgAAAAICAgAAAAAAAAICAgAAAAAAAAICAgAAAAAAAAICAgAAAAICAgAAAAAAAAAAAAICAgICAgICAgAAAAICAgAAAAAAAAEBAQAAAAAAAAAAAAEBAQAAAAAAAAEBAQAAAAEBAQAAAAAAAAAAAAAAAAAAAAAAAAEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQAAAAAAAAAAAAAAAAEBAQAAAAAAAAAAAAEBAQAAAAEBAQAAAAAAAAAAAAEBAQAAAAAAAAEBAQAAAAAAAAEBAQAAAAEBAQAAAAEBAQAAAAAAAAEBAQAAAAEBAQEBAQAAAAAAAAEBAQAAAAEBAQAAAAEBAQAAAAEBAQAAAAEBAQAAAAAAAAEBAQAAAAEBAQAAAAEBAQAAAAEBAQAAAAEBAQAAAAEBAQAAAAEBAQAAAAEBAdBRIDEAAADfdFJOUwABAQICAwQECQsLDAwNDg8PEBEREhIUFRUWFhcYGRobHB4fHyAgISIjJCQlJicnKSoqKyssLC0tLjAwMTM0NTY2Nzc4OTo7Ozw8Pj8/QEFCQ0VHSElKTk9PUFFWWVxcXV5eYGBiZWVmZ2lpbG1ucHN0dnZ3eHyAgIKEhIWGh4mOjo+PkJWbm5yfoKGmp6usra6ur7a2t7e4ub2/wMHCw8bJysvMzc/Q0dLV1dfY2dna2tzd3t7f4ODh4uLj4+Tk5ebm5+fr7e7u7+/w8PHx8vL09fX29vn5+vr7+/z8/v4gD9LOAAAACXBIWXMAAA7DAAAOwwHHb6hkAAADtklEQVQ4T3WUjV9TVRjHn7u7SyA1E6m75UwdCzbtZSL5kjZEBAkDFNSJWhJJgpaBYdqLA/EVBTUo3yJAVLJG9orOZtmLromGrlU6aJz7p/Q8515uCJ9+n+8+95x9fuf5nZ278wCAIIxltNBmFEXEoCMQwmionIHQDGP5zyaS8z5pZUTCyMFcQRyLZuTwdcO5uFFdtGtdqlfLNcL8Uo+q0hIrWEv02Tz8nZiLCzAFqx1j138LBpEbodObukKhYJC4zj6iSlouTKh+L7ARaBFKblKaZHVogI1X3q9+GGhbtLccxd+fBxnLi4qKlhUKs9lsoRCHRcvTIa/fr+RgNC4yCvB6R+nPVjjAwn+EIzcftSk2uS8SDodZI1ivlna8AZRLn8bGyi8lEOOkOEmSwKE44YE4CTGC9FVl40HA34k+A3Ru87aAaXEmKsstOphDdNM4c7EJWrzbOgFPBHNh6udrW9+FpUo0OhAd/FO2Y25kMIpi+fBO69rPpuIhYj3I/XZB70sgJXIlYK4DxiUmPohI8HLvgu9ysRb51vc+G8iHJ9PTXS5EwFygAc5mQH5gVu96qoeH5P2w2DcdfAqLDTH2N+Va/mKxGGPMBzN6ilu99CbxsE+8vflMAiRbZBmRea7ZIj+GJMO4M5u3n1Bff/xPaxqOQ1KqzW4jgHJpgEpLguMNa67G87+G65cXPqiDt5iiEPfMdiXFcldhjKiF+qN5v7rQJcC68/O6N4ApVS2H9TA3xW57AkkdDxu6nzu/jvt2nnTedoNVtqgb5Ll8pygruG87T+7kuUf2ukOWyQOMDcXYELtrtjPKxXGMKdHJ5pB732F0QVJXVcVZk8TPjk5NwFxhZrprFvGM0XT2taquiehzXnt+T7OYoL4NFM/VxokPJYjNe9zXnOgruJP0sRda+NuNDgxGzDaWIkf+UaesBbynJt4pQF915+PdFfBUTlZWNpKdKaQpacLC7OxFRM7TUHFuyuk30de0P8O3BJ+6PMyjjbiW+DL2H8Jn95aCvpqy8lfLVcq2XvRfqikbnpa/UhN6ccunANO+WFF80R/Q9UNP7aTanh8Dl68ELn9P+C+VrLgwDQq/noP3ie7y8I3m4m2AyyDA3G8KoZLdCpK029tXxW1VN0PaN8QtVgnOVdrV51q5q7+97ZO29t93r1zt8QyzarWDrx6hR3bsqq+ra9iRrM114aZGtC+8zKqo6YyA91h83Ce9Reptjt8j3ihHQWYNVVo9zaD1aLVlj2zc/CJx4fP/EeBffENaOX3d1D8AAAAASUVORK5CYII='
CLOSE = b'iVBORw0KGgoAAAANSUhEUgAAACEAAAAhCAMAAABgOjJdAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAFHUExURQAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAABQUFAAAAAAAAA8PDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUFBQAAAAUFBQAAAAAAAAAAAAAAAAAAAAAAAAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgAAAAAAAAAAAAAAAAAAAAICAgAAAAICAgAAAAAAAAICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQAAAAAAAAEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQAAAAAAAAAAAAEBARsYxhIAAABrdFJOUwABAQIDBAkLDA0NDhERFxgZHCEjJScoKSstLjAwMTI5Ojs8QkNDREpLTFhpbG5ydXd4e3x9fn6AgYKDhIWGhoeIiImkqLS2t72+v8DBw8TFxsfI09jZ2dze4OHi5ufo6evx9Pf4+fr7+/z9HaXqzQAAAAlwSFlzAAALEgAACxIB0t1+/AAAAa1JREFUOE91U+dfwjAQvVgUt7hAxQpCcePCXQduBbeiAiLuovX//+zlki6tL3CXXN7v3V2SAjAOsmIqYS1AMvjkFxRrQzg2MDbqwXiPI8KNor9+Gh6Y+444t6OvUz2RSBiHNN0Hl8Aoj8gCa/dtIrmN3StvluXvyf6oOqiqURzc9B1edwUkgRhLJtZRkyUQvs1Sr9AXjLW7WDI1ojlIJaY/VDdDLzTy5G4kjUHJIKsXmnEiz4gAWk1oyEr12yb0go6e/1NGlJYox61eaAIIrgzTQklPgAKazSBLjIajahwwMm+m0WmGN0uhBYMdZ5U4Jyxg0E8DXej8ITZLBB8NZCgM2nMv73Mi5GjYDOwVYMN8xlqw8X+yQOZrK1eJkZxvpZAxM9BxUUWKb6UAi0gApDzxpn0qhdbTRf46IZRfhTq/ShlrrafnC8EgnanPzdGcg8+1mtCwstDN1VFE4PfNrd80gofwp5eZSjtyPUiKXrBy0gg/5jez2ewODjLbO/re25BLg0HiuFwqulAqlk865R45BQ8ioATw5zK0Lyv9B65vjsP9jMXCEvEaC3aEwQ8SIlBGc1pXAwAAAABJRU5ErkJggg=='
FIRST_PAGE = b'iVBORw0KGgoAAAANSUhEUgAAACYAAAAmCAMAAACf4xmcAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADzUExURQAAAAAAAAAAAFVVVQAAAEBAQDMzMwAAACsrKwAAAAAAACAgIAAAAAAAAAAAAAsLCwAAAAAAAAAAAAoKCgkJCQkJCQUFBQUFBQUFBQQEBAQEBAMDAwAAAAAAAAICAgcHBwQEBAICAgYGBgYGBggICAQEBAgICAICAgQEBAYGBgQEBAcHBwcHBwcHBwQEBAcHBwQEBAICAgAAAAICAgAAAAEBAQEBAQEBAQMDAwMDAwEBAQAAAAEBAQMDAwMDAwMDAwQEBAUFBQQEBAICAgEBAQQEBAEBAQICAgEBAQICAgEBAQICAgMDAwAAAAEBAQICAgMDA9UvN4kAAABNdFJOUwABAgMEBAUGBgcICAoVFhcYGRoaGxwwNjc6O1RaZmhydHV2hoeIiImJiouLjI2Ojo+lp6eos7S1tba6u7u7vL29x8jk7Ozt7v39/v7+Ym5s7wAAAAlwSFlzAAAOnAAADpwBB5RT3QAAASpJREFUOE/VkmdfwjAQh+MWnEHEjQNwD1zFOnDgQnoXvv+nMU2utcEkfavPq3/u9/yul/TY/6CyPErJx2rnfZ2ij6qAS4o+NhAuKMYUZ4comZgav3nbGqZsYGjlEPF5mg4GWY23Eb+2rV/NaOVQQP+sSCeTH423BUa7Y/owSKrJuYQ4mVT5N4nGHwVEdUevVJO9oH88oWsWtMafEKLaCNUsKG0xFCiOXHPFKO1QwGfd+voJSttD6B5490lppQBBNAtUsqGvMH+L0Nsfp5oFrbGFAACbeQ8in+QeoNdwzpdorNRCwFNXv1Rj/E7O18j79XK+Fsj7TtHJJKMx/iC9nby1lF6A+JK75IzNXX9surpdUYwpzFAYoIpwTtHHSud1jaKXypJ3g/4ojH0D+V82Si9hgoIAAAAASUVORK5CYII='
PRE_PAGE = b'iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAQAAABKfvVzAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQfkBQkKKCyW+3RRAAACG0lEQVQ4y23Uy2tUZxgG8N85ZyZQ3GRlWrUGL6mmUnBRcOGi6NqVaGImamhd2GKhBReFUql/hKuKV3CpK0EEQdJ6qysXtWhVuixITaKmXjJzztvFfHOcCb6rw/c8z3v5vuc99KKQYdxxd70Wwmu/+9kmZArLosB6F3SEN/5wzTX3vRHazhtNjAH6AS+EGyaslIHMiEm3hAVT/ZICR4Wn9pDITc063T7/Ct/1JAUOCg+NodCQp1yFXEOBzR4LrZ5kzCvPbCJlbeCQmfTVPf3UgpfWdUueE/YN0KdVSpMDkgPCSRgXfkVe01tKHR0dE7Ukx22lMY6l7hqpw5ZSpVSqkqRI6IzwAze1rUYuR0uYMyuEWQvCRI2tFa6z6M/6cj/XFnY5LISv7Bbe2prQwl/mcyv8U0+wSsOXLhsGwy45bMhImqL01HCjfiqoHHEWHVDiFx8kPKRb+c+HMpUMV5WGLPWZZsgJOSqhMGI+d88nVqc6bVQDpqyEdkLX2Ohe7orCF/UUg/R3Jzl24EruIr5ZRo3+rmvZ1zou5R44Y7tpVZ8/82TvXjRVZmxz2hPYYNG88eSZbrc77UyTZZr4zAvPjfYebFp4ZHNt73eVuvbe4m9hsn8jvheemUrETFOzbmm/OeHb5Ts3ZUG4o+WjRM2tst9dYc5e79nqUWctCUsemDXroSXhrVM+Xk7vSjKM+clNi0J46Tc/2mDgN/M/ctKsO+x+mYQAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjAtMDUtMDlUMTA6NDA6NDQtMDc6MDD5MIYvAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIwLTA1LTA5VDEwOjQwOjQ0LTA3OjAwiG0+kwAAAABJRU5ErkJggg=='
NEXT_PAGE = b'iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAQAAABKfvVzAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQfkBQkKJCVDkoP5AAACC0lEQVQ4y23US2vUZxQG8N//MitX3Vhi1NCGYKIIfgZdFKGrXhIzSYwgiAsxYgsFsdSP0E2pofQK/RaCTJu0qesWGg240dJIjGPirZOZOV3MO38y0bN7z/M877m857z0rZBh1DW/2hbCM8uuG0OmsMcKHPKt/4SWVQ0Nf2sJLT8YSYwB+sc2hTtmHZCDzJC6FaFperekwCVh02zyZGpqsnSa9li40pcUmBLuO4ZCme6HXKnAuHvCTF8y4qktx1GTyTDspJMOIkMNE554ZrR3z6IwnwBKLAjh03TqITPCdzBqxwpVIiUuC+FqJeihS8J47gOlm7sEUiKqovuCr/Fh7jRuo1sBg9bzdNHQcTp3wpoHiFR0/hq9ltCH7jqRe8u6TiKecklrQNBy0XvI5cK/9vXv6+UbvnShetMS53y1K2ZQatqv0FFgXcuiDU3Q9L7vtf1TVTHkObeFwykok0JTQwgNm0K9wobtWOaz9GxlSmVSW1dHR1dHPXlL1IXPGdPxe9W+Mkna2oleVt36RZiAb4S5gdGY0tE1MzAaZ4Qfe7W/Y1vT0QHJvPMD9CMee2GsP951Yc14Nd5F2pP+eI9ZFc7u3ogFYcOZquO1FC3DRx4Jn+zduWlN4TdT3q6Gb79JS8KWOW/Y6hE/2RFe+cstt/zpldD2s3f30nuSDEd84Q8vhfDSHTdMGPhm/gcpEqbqeJ/q0QAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMC0wNS0wOVQxMDozNjozNy0wNzowMOY48G8AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjAtMDUtMDlUMTA6MzY6MzctMDc6MDCXZUjTAAAAAElFTkSuQmCC'
LAST_PAGE = b'iVBORw0KGgoAAAANSUhEUgAAACYAAAAmCAMAAACf4xmcAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADzUExURQAAAAAAAAAAAFVVVQAAAEBAQDMzMwAAACsrKwAAAAAAACAgIAAAAAAAAAAAAAsLCwAAAAAAAAAAAAoKCgkJCQkJCQUFBQUFBQUFBQQEBAQEBAMDAwAAAAAAAAICAgcHBwQEBAICAgYGBgYGBggICAQEBAgICAICAgQEBAYGBgQEBAcHBwcHBwcHBwQEBAcHBwQEBAICAgAAAAICAgAAAAEBAQEBAQEBAQMDAwMDAwEBAQAAAAEBAQMDAwMDAwMDAwQEBAUFBQQEBAICAgEBAQQEBAEBAQICAgEBAQICAgEBAQICAgMDAwAAAAEBAQICAgMDA9UvN4kAAABNdFJOUwABAgMEBAUGBgcICAoVFhcYGRoaGxwwNjc6O1RaZmhydHV2hoeIiImJiouLjI2Ojo+lp6eos7S1tba6u7u7vL29x8jk7Ozt7v39/v7+Ym5s7wAAAAlwSFlzAAAOnAAADpwBB5RT3QAAARJJREFUOE/VlNdOA0EMRb3LLpuE0ELvLfQWWkJoAUJnbef/v4bZ4ERaJHt4Q5ynO9LRlWdGM/AvCWemJZksPLXnJFqcIC1L/MFwUULGOdKSxBzByuvFqGTHqaKVH4nq47LQtWCdEW/7nqbBUM15jQlZqRrEm59I19Kna5AcEVKj0s2GBpHrw5tun6VBUiPEejafqcHgjpvvasynQdHtl+oVnwbR7jvStlcLq2/Iez6tsM/EzSmPNrCRIt27IzG15KCD1Jx0ydLiaorc8h1v4ZD5u8vS4q2U+M539aXjDrJ06Vqw9kHU69K18gP15srQtHD1+bLfZcwWjJQkZahanjNk5TnnWHxpz0u0iGZ/9dX8NQBfZyY2SvOVIRAAAAAASUVORK5CYII='
SEARCH = b'iVBORw0KGgoAAAANSUhEUgAAABwAAAAdCAMAAACOj/wDAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAGPUExURQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+Yg6AAAACEdFJOUwABAgMEBQYHCAkKCw0PERUWFxgZGh8gISIlJykqKy0uLzAxNDU3ODs9P0VISktNUlVXWFlaXV5fYGFkZmdoaWprbG1vcHFydYKFh4iQlpianJ2en6CipKapr7O1vL7AxMXHyszP0dPU1tna3N7f4eLj5OXm6Onq6+3u7/Dx8vX29/j8/jlSQ8oAAAAJcEhZcwAADpwAAA6cAQeUU90AAAFTSURBVDhPjdLlW8JQGMbhYwcigo2JCnZ3i2K3InZhizkTTPT5wz1uz6Xg+OD9Zb/3Pfuwa5v4h/SGCbd7sjGDYyjT2CVU1+NpXP2w7cn9u6K8yct+KZeUdwqcjJaYzbbhY+CsmGtV8gawYtHa5AG2UrRWtQNrBrZIXAV62FLcJh5tbCn/ATvxbCGsAawwVR48FTKFqPrACFM1CNQyhaj7RCdT1Qw0MYWo/sAQU9UH1DGFKHjBElM1h5ff50vYxq2VLeUo8CaxJSewHMcWMYuAi/3NuAtMG7U2TAE7qVpr7Argbcs2GjNb5H1wxnKvqfTJ3f3R4d0n4LvyH7Ryr8ma8ctjKTBr6QZeO7gn68D8+vqCMy9KFN0Ab2GvJVSlfIT3Lg46FddAMOS7hSv/Pu3loFMu/7dgPwcdx4U8dUVz+st+DlzlctApu3iuZ0bgqGFEJsQX/wFag00Z1L4AAAAASUVORK5CYII='
STOP = b'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'
SEARCH_DOWN = b'iVBORw0KGgoAAAANSUhEUgAAABgAAAAOCAMAAAACJixMAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAACoUExURQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACzfSIYAAAA4dFJOUwACEhMVFhcYGRobHB0eHyAhIiQsLS4vMTQ2Nzqmqbu8wMHCw8XIyc3O0tPX2dzf4OHj5OXm5+rrVsYFQgAAAAlwSFlzAAAOwwAADsMBx2+oZAAAAJZJREFUKFN9ilkSgkAMBeMyCoiKgsKAC8rmjoDg/W/mMIkU8mFXJen3KgDQE9NBVrPtWoYW5mYu9uRyX2H+Yt6u0/oap9SSBWE9zks0I0lttBr7mSxIQYszhxScLNZIBXqUczSeRzoaooSFW1+3CBVZNKhB6Yn/V6BS0cAOlcfLI6PYgu3flT+m8MNw549IO/QHJH8A+ADnTgkm2RHu0QAAAABJRU5ErkJggg=='
SEARCH_UP = b'iVBORw0KGgoAAAANSUhEUgAAABgAAAAOCAMAAAACJixMAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAACoUExURQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACzfSIYAAAA4dFJOUwACEhMVFhcYGRobHB0eHyAhIiQsLS4vMTQ2Nzqmqbu8wMHCw8XIyc3O0tPX2dzf4OHj5OXm5+rrVsYFQgAAAAlwSFlzAAAOwwAADsMBx2+oZAAAAJFJREFUKFONitsWQlAURbdKIUVRHLq401WI/v/POpc9GtFL82XNtfaGfxiPUAZMg8MEtccs6F5HGcsXctQSvwt/Lmr8JAB+G6s4IErSeCy9JlH4gOhpTf8ZpE51YQwtq1xUcKtMQ4VV/nBQKU6Zm8LWp7stTGCXBb8sLleLDx82t/OchrEb7ADb/ZKFxEsPCeANnKkJJnnspSYAAAAASUVORK5CYII='
DOTS = b'iVBORw0KGgoAAAANSUhEUgAAABwAAAAJCAMAAAAWyLyOAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADeUExURQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKk1tBUAAABJdFJOUwACAwQGBwgJCgwODxESExYaHB0eHyEiJCcwMjQ2ZGZnaXBzfoKGjZKTlJWXmZyhoqWtsby9wcPKztLU1dbk5enq6+zv8/T1+vuv/8AWAAAACXBIWXMAAA6cAAAOnAEHlFPdAAAAnUlEQVQoU4XNxxKCAAwE0EURG6CiKPaGDXsBFRs2lP//IRM5O+7pzW5mgj9JtJ1NUySkGrbdShOi9bXTSfIm9oMg8HuA1CUEZhwwn4Qh3+dv3Lk6ylvGrgJtz7jrNJYezKOB6rc71FB0Gb5BY2xJes8A2eJuogLTF2El8dPs3DtbGYI2unjjAkEdnK6LHG+AoCghIrIcCaWoQohfAT7YFxkhHQD05AAAAABJRU5ErkJggg=='
QUESTION = b'iVBORw0KGgoAAAANSUhEUgAAAB4AAAAdCAMAAACKeiw+AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAFfUExURQAAAAAAAP///4CAgFVVVUBAQDMzMysrKyQkJCAgIBwcHBcXFxQUFBERERAQEA4ODg0NDQ0NDQsLCwoKCgkJCQkJCQkJCQgICAgICAgICAcHBwcHBwYGBgYGBgYGBgYGBgUFBQUFBQUFBQUFBQUFBQQEBAQEBAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAfm1ovwAAAB0dFJOUwABAQIDBAUGBwgJCw0PEBITFBcaHB0eHyEiIyUqKywtMDEyMzQ5QElMTk9RUlNWV2VoaW1uc3R1dnd4eXp7goOEi46TmJmam52eoKKjqKuys7S+xMbKy83R1dbX2Nna3+Dh4ubn6Orr7PHy8/T19/j5+vz+5IosfAAAAAlwSFlzAAAOwwAADsMBx2+oZAAAAh9JREFUOE9tUwtXUkEQ/tzdC6EYCEbQwx5oZWL5gDQ134RPSBF8lpoIBj4S5/+fvr1cOqeTc869Z+b7dmZnZ7+FNlobo+GPpJbLF83mRTk7HPF7cAeMQ1P+vvlz+WuV+ed+ZXEDzT9C4yce49nJeAgebZBYd7GzncLmZmHnzA3W4yxs+KnENxvvL7yPKkBFBxf2bbwVh6NhVDjPoJ7t9+FFenEx3Qdff7ZBKB9WBirwhW71UxAqs3cjcrOXUQhOVAnOBDTU60uRX58NMG1TaI1pwEzVRS5fanSuEFnzAQNHLVbkaADwrdFZDSDGgodJOJi9FfkYCn0QuZ1lmDwQuY5hVOQuxzNi8me1GFYqyqwNG+fuRMbAts9TdgQ8lLXHtqilUxxjHj9Y+5Gl7ZCevn03x94ylo4dinzHlchua/CECiwoUnpC2mBX5AoESl6yg4pljwfdGCV29W826d8bb1zWy7Z7x7x0S1cfthZ7e7PzylCbLooU2/4Q1+Yx5p3bmunp7e1pb5RjG6OIXYsccGqudXV3d7W89tQCq1zFmbvYtsh2y3PszFc6oV7xxupTxqK2tYrrONO8sQZvTLfueyLIhnEqcgqeKThZIzgTUG21NKxaMLK0NMLLTH711MJsB/EtBlZrCQ3oeFtrCcU6Vqnx+5Sa4G5WqezkP50fp12dU6n885U8u/eVaHQYvjD3jQ1ny7Vms1ZeTkUeQFlY6z/BLbYzfB6o5wAAAABJRU5ErkJggg=='
BLANK = b'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+KiNFaExJJYwqIoRqsTYwqAAoBs2RmBQ8BBClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAODgg5ClRhbGBQAdAOD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'
ERROR = b'iVBORw0KGgoAAAANSUhEUgAAABwAAAAdCAMAAACOj/wDAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAIfUExURQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJjF7PQAAAC0dFJOUwABAgMEBQYJCgsMDQ4PEBETFBUWFxgZGhsdHh8gISIjJCUnKCkqKywtLjEyMzQ1Njc4OTo7PD0+P0BCQ0hJSktMTlRfYGFiY2VmaGlqa2xub3FydHd5ent9fn+AgYKGh4iNjo+QlJWXmJudnp+goaKjpaanqaqrrK2ur7CxsrS1vb7AwcLDxMbIycvNzs/R0tPU1dbX2Nrb3N3g5OXm5+jp6uvs7e7v8vP09fb3+Pn6+/z9/gNN9oAAAAAJcEhZcwAAC4gAAAuIAeWOKUkAAAIdSURBVDhPVZP5VxJRGIa/CENI1KJs0SSXoCjKBLOsaLXMVrPIFs0WKzdEzRbbzWyREgUpVExaBDJZ4v0Du3fmwsHnh/ne571n5pyZe4dSaHa2vPsB/BxprdCIKoX28DAQnpue/h4CRo7kilqitAdJd9dJa1mZpbZjLIG+LWKBUfUFE00bhdB6uxvj+4RQ5SQGzSJLmB7ha7Uciz+iWyfHFPntGC3hQX0XL9ZIVQarnuD+Sjarwr5KucnE7InUEGV34bqCWc5pJpzyxgJ2VVxBv5qK4h4TE2Vj3MUnbXiVeKBi0+hObKZa9PKObPP4UE5UMICFU/xJ5MAZcsQapEU6+hvD+tVOhC8sl/zs4gB9Dh6UMtGxXxhyInJZKWvNrJeCU9tlIToRAObtK4QZ/GEKfUt/x7xRYMoohPS+OM2l78xt+wPEnxYJNfhD5AraZNHciaL1fDL5eJ3s+2c91B2/KGVVy1/c0igbkOjPl4pziw/pOPp4VF6K4Z6WKMuOf+3ZvOlBPRXGvDt4toWdeXxm3VyoW8bmNndCT6oONPO3VhrEbmtNanZVNKGXTWvIb5HrTHZNRvhhUN/GS74PS9A9Q5t0CDe9h3OtVKXRdeKTXo4VXjzfLUcZ8yB8VpHJ4oL3RrEQKrw6gbE9QhglncC4s37vVmN1ncOdhKNULEjkHHgNRIIzM3MR4O0h9jWWoDFdexOIRgNDzWbxrxD9BzeioYdNQbSNAAAAAElFTkSuQmCC'
SPLASH_SCREEN = b'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'
FULL_SCREEN = b'iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABmJLR0QA/wD/AP+gvaeTAAAAjklEQVRIieWTOxKAMAgFn3poS2PntSw8k6U24lCEBAgpHN8MZXb5TIC/JQHYesKvp8IlHB4uycG7TUJgdcboDrSC5GCp15Ugr6G0ItVNCO4VFCUc3lqvhN/gFOeyR2TNaF/RUrOTxCOowinJIZDemPKdn8yTO7z6oNpwSTg8J1HDJ4PgADAA2AGsptY+nRsEZ1PQdIl0CAAAAABJRU5ErkJggg=='
ORG_WIDTH = b'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAAyklEQVRYhe2X0QrCMAxFj36EFn9xfq6gfk19ySAPbZPUzvrQC2NQktyzsTYZLP2hNiAdUDdJ7abuQAaegyGS1MziUdUFeEjgG7gVYrJc3vWrqvmq1AxBRADC5h4IL0C3uQXhAfjavAVhAQwz36W/4P3eAtCxw3aSfhMWQOjJT5X1koGV25PD2ZG0tHSo1i7wSh+vnoOo1sq7NPUoLjUWC8Az1HSba6MaACMgWi3VO5B0Q1j9PDKShSE8w0R0KA1BTB/LYfKPydLP9QHFcZM9Koek4QAAAABJRU5ErkJggg=='
ZOOM = b'iVBORw0KGgoAAAANSUhEUgAAAB8AAAAfCAMAAAAocOYLAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAGSUExURQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMhDVHMAAACFdFJOUwABAgYICwwODxASExQVFhcZHR4hIyQlJicoKSorLS4vMDEyNDU4PD0/QkdISUpMTU5QUlVYWVpcYWZnaWprbHN0dXh6e32AgYaIjpCVlpmam5+io6Smp6ipqq2vsLO1t7q9w87P0NLT1dbY2drd3+Dl5+jr7e7v8PHy8/T19vj5+vv8/f53HW3GAAAACXBIWXMAAA6cAAAOnAEHlFPdAAABiklEQVQ4T63RVVcCURQF4GNgDSgWYostit2JgdijCCq2YIuNnSj7fzvMHMCY5Yt+T/vEWvfeGfoviZUdvZ3m1Bguv9H2ey6DwO32WA53vjCuB6AI7tVy75NcL3AyUW+qGd55w1kjdyN0Gwi40uWosd/hsECOUX0BzBe2tGeR0NiUZ33H1NdLJnhwmln77MmjFBFDtAJ/Nk8UVZeYoBZpLD3Sbae2J3QpA9YRRD0ZiuWsL6J8HyblHNYDlHIMyfDCyVHRCdSQkCLnBD0Z9iHKOcx8ixFqEJNC2TZAlisMyv2wNC92NM0vbj3F22AnEQ/lPGFjwGjusL2I9NbxCssN1uJ4wHJ2cTcQq+S6U1xUKzHKfIbX1db8dINl5hrYNGq4H9FwBDz6vPt+4Hzr/EBM5X5EwbRf+v3A/Vq1cRdYkh/zWWx296RTHCyLI82stLcocF+FziUtOLRcqUhekBYWlA+qSpgLHfHjklFah7Tg+uWIJKe0sPzLgm4e8Jm4UCO4j80c1WlLOPwB0QdC1l9iI1nFIQAAAABJRU5ErkJggg=='
NIGHT = b'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAABu0lEQVRYhe3WTY8MYRQF4AeJSFjORPRoaSRILMXGUtgwdCLxEb/BBPEr+Ae+9jLGdCSs/AwrCx8xEsEKC9NmRlu8t1MWXVXd1VUrfZLKTaVOvefUfSvvPczwv2PbFO+20cV5dOL+D9bwAS+wii9TORyBBTzEJgYl1yZWcKou8Yv4EYv38QTXcBS7MYe7/xjo4zGO1yG+hK1YeBkHR3CuhOhA+vJOHcKkL9+SWno7h3MGv6X/4GZdwqQ9H7Y9T3weX4OzVKc4PJK1PQ8PgvO0bvG21Pa+0XtO6lAfv3BgUoHtJc+72IEe3udwrmJncD7WbeBc1OcFnLNRe5OKj4M30t4eKeB8Ck6nCQM/Y/E9BZz14OyqIlC2BYMJ1qo0V8oMfI7aKuB8i7q3CQNvo54o4LyOerIJAy+jdgs4r6JeqmKgDPuxIR00h3I4rXi+rsJBNA6Gx+xKAef+GJzKaMmG0Z0czpyUfAZqnoRDXJCN4zwTp2Xj+FYTJm7IAskzHB7BuSwLJKvyB1hlLOK7LG4t4zqOSaflPO5pKJINsU/66TbUEEqnieULUlRblFrdDtE1vJNieU9KSjPMkIu/Z1h8nCMSyXMAAAAASUVORK5CYII='
DAY = b'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAABd0lEQVRYhe2WwUrDQBRFT9xaVzap+B0uhao/IBU/RBci7tT+THdK/YugVVCpC/2GanRb42JuSAhJM0kHtNILjwR6331vppP7BpZYcMSKxlhx1Mj/bMAHBkAwh34gDb9J8gDz/z4BnRLOrDPQUW4srdrwgUcJvACbNXKDTO4Y2GjSAJhVPEsoBDyJ94F74EsxAi7VtCdurNyy3avVRAhsA4dARLr1+fgADsQNXRRP4Kn4twpdAV1gVbEDXOu3KdBTjjMEpCs/mcE7FecdaLtsoE+68ioMxb1w2cCDRLsW3F1xR00KFR0sgE+9tyw01sSNKjQBeyuuM3CSw2eVk2/AKwiANz23LDQTzmuFZmEDZbjR88iCe5zLcQIfYzIx5lMrw5k4E2DdZQMexuGmKjDEnPaWYg+z4sSI9nFoRFkr7mFMpsyKJyruzIqLhlEbYzJ3mM8zAm6Bc8y2OxtG2XE85hfG8Z+4kFRdyapuxXNdyWywvJYvsfj4AUHvgJracDYiAAAAAElFTkSuQmCC'
WAIT = b'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAABV0lEQVRYhe2VO07DQBBAn00UFAk3VKGIuxwhRwCKVJSICokDUMIJMD2hJDkEJ6ChgpoCKpRQIKiQQBEQCi/yspn12rFJBPKTRrJ3dn47+4GKP0odOAZGwBCI1NjciICJIdE8ExgJCTzM4qjm0IfADjAG+sCzGp8Icz9nScAV/ImkwlsgUDqpBUeGvY+7wFQOhSDbSldXSQyxb8IL4A5YSguSluFYGHvTdAdKbNwDHxRozSrxsn9Xf8kvHDXPoQ+ALnHF58ir8j9pK1kIpyR975XkM1TipM300Su6EiHwqqRlKv2CzvMg3Z4iPZLqT0oK3kKoPo2FbsIKnS5wA1wDnZy268AW7tvWis/P5/gqh+2GZrfnCmLDA5a1/0aOBFa078A6KwO7wAvwCGwaujVgoKRp6Dziyvcp4QWtIfdxQLLM/SLOXbxnmJP5liuTJnHlZ0y3oKIiM18SzVYmCM6giAAAAABJRU5ErkJggg=='
NEXT_PAGE_N = b'iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAFiUExURQAAAP///////6qqqr+/v8zMzNXV1dHR0dPT08zMzM7OztDQ0NHR0crKyszMzM7OztHR0cvLy8zMzM/Pz8vLy8zMzM3Nzc7OztDQ0MzMzM/Pz87Ozs3Nzc3Nzc3Nzc3Nzc7Ozs3Nzc7OzszMzM3Nzc3Nzc7Ozs7OzszMzM3Nzc3Nzc7Ozs7OzszMzM3Nzc7Ozs7Ozs3Nzc3NzczMzM3Nzc7OzszMzM3Nzc7Ozs7OzszMzM3Nzc7Ozs3Nzc3Nzc7Ozs7Ozs3Nzc3Nzc3Nzc7Ozs3Nzc3Nzc7Ozs7Ozs3Nzc7Ozs3Nzc3Nzc3Nzc7Ozs3Nzc3Nzc3Nzc7Ozs7Ozs3Nzc3Nzc3Nzc7Ozs7Ozs7Ozs3Nzc3Nzc3Nzc7Ozs3Nzc3Nzc3Nzc7Ozs3Nzc3Nzc7Ozs7Ozs3Nzc3Nzc3Nzc3Nzc7Ozs3Nzc3Nzc3Nzc7Ozs3Nzc3Nzc3Nzc3Nzc7Ozs3Nzc3NzZ4df2oAAAB1dFJOUwABAgMEBQYWFxkaGxwdHh8hIiMlJygpKistMDRCR0hMTlJUVVZXWFlaW1xdXl9gYmNmZ2psbm9wcnN0dXd6e3x9f4CZm52eoKGipby9vr/BwsPExcbHyMnK1NXW2Nna29zf6uzt7u/w8fLz9Pb3+Pn6+/z9/n7aq48AAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGcSURBVChTNZLpQxMxEMVfkl1uLbS0oqAgtHQLggcIqCiKyg2FooAHgkopUIF2t+//d6YL+ZKZ98vM5k0WupxB8u3OBVndXUjBuKYoy+HO52vWDovFnzXWlhMi3OgjZR6MdVjAtAd7rORj4jDN8pgExveNbPkTzipxyPF3H5wnBYD1HNJHLChJnJ3fh28MOgcGumDgI3NaTcqhj5yQBB5myNeySVLgEpCs70G7eHhJzimQtMQ03nCymTUrXt2EBb7DJhNaYW+BxugKSygfOf2ia4lBi/UlNT+qYEln8GgGMcDUIJyVPgqsw0M+xxw5j0kOKdggTn85cfPgmo+fki8GWe9Xc9Jqi3dhLbKsFMlimYFmnfVdzIs/Tw5lw0YUNaJAQg8B3yMVfdXrekLCUHQxYrHNDPCJ4/FIclGjoLqPUa6Iz+6Lyr2YTDyL9d6Tfykde8DjtI5d30DHnjrkE72ZE2d/R6UUvtQZDP8Rn6IryVf4Jdcmz2dasyWej8e6ksRqnVff19e/XTFc67nVhRj0fti/JC8PFjPN3wf4D5n4UV8VfxHCAAAAAElFTkSuQmCC'
NIGHT_N = b'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAD8UExURQAAAL+/v8bGxtHR0dXV1czMzM7OztHR0dPT08zMzM7OztDQ0NHR0crKyszMzM/Pz9HR0cvLy8zMzNDQ0MvLy8zMzNDQ0M/Pz83Nzc7Ozs3Nzc3Nzc7OzszMzM3Nzc7Ozs7OzszMzM3Nzc7Ozs3Nzc3Nzc7OzszMzM3Nzc3Nzc7Ozs7Ozs3Nzc3Nzc3Nzc3Nzc7Ozs7Ozs3Nzc7Ozs3Nzc3Nzc7Ozs7Ozs3Nzc3Nzc3Nzc3Nzc7Ozs7Ozs3Nzc3Nzc3Nzc3Nzc7Ozs7Ozs7Ozs7Ozs3Nzc3Nzc3Nzc7Ozs3Nzc3Nzc7Ozs3Nzc3Nzc3Nzc3Nzc7Ozs3Nzc3NzUtmv5AAAABTdFJOUwAICQsMFBUWFxkaGxwdHiAhIiMmJygrOkJETE1OVVZYWVpnaWtsbW9wcXJziYqZmpucnaanqKqrrK2us7W2t9XW19nj5Onq8fLz9Pf4+fr7/P3+4dqHvwAAAAlwSFlzAAAOwwAADsMBx2+oZAAAARBJREFUOE/NktlSAjEQRaMCKiPivoIbDooLroyjsikuQQnMcP//XxzSAZyu8M55OnXTVZ2kW0wfGbf+9iMb1cKCCeI4twEMgb9twn/kJFTlcGMueQWo+y2TjimG8FYGcqDgZ3UUIxcGJS273f6ZljiOBJ2nvlDUwriDR3KDJ5I4mUDp/sJRv8taGC4qJBd4IGHUcERSR56E8Y51kg9YXhjRRoKkgxkShhwXzJIwRi1aE1qMLlmbcMnT4TNLeCRhLPXUqpa06lg/Kvphn6Q8FEZa4lJL8hO2YQqxHwZUsdPtn2vhuCGe1waSV3ihyTH2vqG8481E6tq+ckIslntmZ+1LG+EUqs22bLyezJtgChDiDzgbLDDSRSCqAAAAAElFTkSuQmCC'
ORG_WIDTH_N = b'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAkUExURQAAANHR0dPT08rKys7Ozs3Nzc3Nzc7Ozs3Nzc3Nzc7Ozs3Nzd/BqxEAAAALdFJOUwAWFxgaa2zU19jZthbcPwAAAAlwSFlzAAAOwwAADsMBx2+oZAAAAJRJREFUOE/Nk1EOgCAMQ1FU0N3/viKsgwGGD6OxH6auDwNsmo+0WjZKdmVjNvIdwnra2E6OjuUyRPk5O9pj8RKIAlC5EBmochACNDkTADp53LQHEGznWOEbANr1oZbUvLC4cg/8Qbyrh6cI9ytA6r7W6KpjfwBgPgql/gGQCRJxfwWoCfQ/A5pAXgKKGI798Md5VcacgoIJdXsu00AAAAAASUVORK5CYII='
QUESTION_N = b'iVBORw0KGgoAAAANSUhEUgAAAB0AAAAdCAMAAABhTZc9AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAHLUExURQAAAP///4CAgP///6qqqv///////9vb28bGxuPj48zMzNHR0dXV1cTExNjY2N3d3b+/v8PDw9LS0sbGxtXV1czMzMbGxtPT08zMzM7OztLS0tPT08bGxs3Nzc/Pz9HR0czMzNDQ0MvLy8/Pz9XV1dDQ0NHR0dHR0c3NzdLS0s/Pz9PT08/Pz9TU1NHR0dLS0s7Ozs/Pz8zMzMzMzM7Ozs/Pz8/Pz87Ozs/Pz83Nzc3Nzc/Pz83Nzc3NzczMzNDQ0M/Pz83Nzc/Pz83NzczMzM7Ozs7OzszMzM/Pz87Ozs3Nzc3NzdDQ0M7OzszMzM7Ozs/Pz87Ozs7Ozs7Ozs/Pz87Ozs3Nzc7Ozs/Pz83Nzc7Ozs/Pz87Ozs7Ozs3Nzc/Pz83Nzc7Ozs7Ozs7Ozs3Nzc/Pz87Ozs/Pz87Ozs3Nzc7Ozs7Ozs7Ozs3Nzc/Pz87Ozs3NzczMzM7Ozs3Nzc7Ozs7Ozs3Nzc7Ozs3Nzc7Ozs3Nzc3Nzc7Ozs7Ozs7Ozs/Pz87Ozs/Pz83Nzc3Nzc7Ozs3Nzc7Ozs3Nzc7Ozs7Ozs7Ozs7Ozs7Ozs/Pz87Ozs7Ozs/Pz9DQ0NHR0dLS0tPT09TU1NXV1dbW1tjY2NLptt0AAACPdFJOUwABAgIDAwQHCQkKCwwNDQ8QERESEhkbHR4fIiMkJCUnKCssMDAxMjc4OTo6Ozs9Pj9AQUZJSktOVVZXWltcX2Fla2tsbW1zdHR4enuBgoODhoeIkpmdnqGjpKeqrK2vtLe3uLy9vr/AwcPExsrOztXW2dna2tvg4OHh4ubo6e3t7u7x9fX29vf3+Pn6/f3+1nG5cwAAAAlwSFlzAAAOnAAADpwBB5RT3QAAAl1JREFUOE9tU+lf00AQnWWbUGiNCtZaQIsiiHiCCCIW5RLFSq2KFIFyVEXrgYBVUA6BFqTSzCYR4c91Nokf9Md82Ozu28m8ffMWuMK5ojDmDXclMzk9l0n2hL2MObugqBTMdzWRE+iEyCau+JjcVoDLIRRfM1xMhrEWD8k0ifKiukmLUrbnUqPPR1Nz2/QTa7KWcUIVlde8MVFsvbxX7wcA/7m+V1sCzXQNUzkoLDhlIn7pD4F2Pfok2nwIQv2LiOZUkCnAtLiF+kybByoHl3ShLw1WAm+b0dF6pHHgl/KIn9sBQiNCshZiJATQvoCYb/CAljBEbgDA27nu0DbWO70AAzlhDPvh5E8svK4ACCatvRdnSk6n9qxkEKBiuoD5KugWYjMGKhx/9v3bfeI8tP/rXZjWsU0hemFM4HwTyJvbwRL7u29PEdo0j2IMMqinywil4Ifrm29/2BVDAULL0zp+giwWJhyxVbi2SJqZSze4lGmigFnQcWfcSVWhwxBoZGNH5RrGd1D/J7fDMIz3d2zQzZV1y51kiZpdYDfPrUucZxtdtHVld6XVnTfOSs69zn1lKKWBYKDUrRL7IUQ3VOWxMF3hwMXaEa3Ynv3Vyj9s6yyLQcvy7+UWeZDBQ9I5oQG/QD1auCVhYmUaHYQyiFCPts97gLv95aRPRDf1CH35zY92f8mTjjcWyRtQHX0arQY48eCr4w3qvspq0rav+i4eozaUNdx1fHVWykmeZLUHeLKuyPEkDf/7efWx7WfypLwe810+6C1wYIqicPsd9SQzG/pGJtkVLiGytMv5Hyw12VtjAX40AAAAAElFTkSuQmCC'
SEARCH_UP_N = b'iVBORw0KGgoAAAANSUhEUgAAABgAAAAOCAMAAAACJixMAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAACoUExURQAAAP///8bGxsnJyc7OztHR0dPT08rKyszMzM7OztDQ0NHR0crKyszMzM7Ozs/Pz9HR0cvLy83NzcvLy8zMzM3Nzc7OzsvLy87OzsvLy8zMzM/Pz87Ozs3Nzc7Ozs3Nzc7Ozs3Nzc3Nzc3Nzc7Ozs3Nzc7Ozs3Nzc3Nzc3Nzc3Nzc3Nzc7Ozs3Nzc7Ozs3Nzc3Nzc7Ozs7Ozs3Nzc3Nzc3Nzc3Nzc3NzamMdWsAAAA4dFJOUwACEhMVFhcYGRobHB0eHyAhIiQsLS4vMTQ2Nzqmqbu8wMHCw8XIyc3O0tPX2dzf4OHj5OXm5+rrVsYFQgAAAAlwSFlzAAAOnAAADpwBB5RT3QAAAJFJREFUKFONitsWQlAURbdKIUVRHLq401WI/v/POpc9GtFL82XNtfaGfxiPUAZMg8MEtccs6F5HGcsXctQSvwt/Lmr8JAB+G6s4IErSeCy9JlH4gOhpTf8ZpE51YQwtq1xUcKtMQ4VV/nBQKU6Zm8LWp7stTGCXBb8sLleLDx82t/OchrEb7ADb/ZKFxEsPCeANnKkJJnnspSYAAAAASUVORK5CYII='
PRE_PAGE_N = b'iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAFiUExURQAAAP///////6qqqr+/v8zMzNXV1dHR0dPT08zMzM7OztDQ0NHR0crKyszMzM7OztHR0cvLy8zMzM/Pz8vLy8zMzM3Nzc7OztDQ0MzMzM/Pz87Ozs3Nzc3Nzc3Nzc3Nzc7Ozs3Nzc7OzszMzM3Nzc3Nzc7Ozs7OzszMzM3Nzc3Nzc7Ozs7OzszMzM3Nzc7Ozs7Ozs3Nzc3NzczMzM3Nzc7OzszMzM3Nzc7Ozs7OzszMzM3Nzc7Ozs3Nzc3Nzc7Ozs7Ozs3Nzc3Nzc3Nzc7Ozs3Nzc3Nzc7Ozs7Ozs3Nzc7Ozs3Nzc3Nzc3Nzc7Ozs3Nzc3Nzc3Nzc7Ozs7Ozs3Nzc3Nzc3Nzc7Ozs7Ozs7Ozs3Nzc3Nzc3Nzc7Ozs3Nzc3Nzc3Nzc7Ozs3Nzc3Nzc7Ozs7Ozs3Nzc3Nzc3Nzc3Nzc7Ozs3Nzc3Nzc3Nzc7Ozs3Nzc3Nzc3Nzc3Nzc7Ozs3Nzc3NzZ4df2oAAAB1dFJOUwABAgMEBQYWFxkaGxwdHh8hIiMlJygpKistMDRCR0hMTlJUVVZXWFlaW1xdXl9gYmNmZ2psbm9wcnN0dXd6e3x9f4CZm52eoKGipby9vr/BwsPExcbHyMnK1NXW2Nna29zf6uzt7u/w8fLz9Pb3+Pn6+/z9/n7aq48AAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGfSURBVChTNZILV9NAEIXv7iagghZbWlBBQFua8hJREBVFefgCrJaHKCCClArl0Sa9/9+ZBPYkOXPvtzNnZrPQ5QxyC9vn5PmP990wLjZlOdz9EvLi58rKrws2P6fEuPJHT1jJtxvA3ChssFZMiMNLHj6C2L6vevgvZ5Q4jHEvA+dZFdZzyP5hoCRzdtQN2ethclw+EvbUTrsk9ROHE7/UigoJGeUSkOM3WPWDKAzDvBKLzSiDd1LQk5JB1IqilhAncpxzWG92wFoErJbJco15VXf4FfUd7exBkwNT5JMhXt4X6X4fg6uQRgc5gTlyFk/ZL02jQnBNwcAzyJwyGWYe6tEJqO8Ymdq3bQloc75It19FJezUdq2XAE9jpKTOW5a0d3kTEIcTfI0sK5ohapacjoHFVjMNfJCU+EheXWX4Mt+i8HT9OCfCoLOvrwPG+Lh38i+lw5W4n9Vjl03Sg0PvAQtiy/OCR0Uxje/L38JIlc/VV1KscSu4Ka69NbLN6uPEV5L62GBjt1zea/By+fa1L8QgM79eJ0+/v0nH1wf4DyoqUV9FZhjhAAAAAElFTkSuQmCC'
ZOOM_N = b'iVBORw0KGgoAAAANSUhEUgAAAB8AAAAfCAMAAAAocOYLAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAGSUExURQAAAP///////9XV1b+/v9HR0dXV1cjIyMzMzM/Pz8bGxsnJyczMzM7OztHR0dPT08zMzMrKyszMzNHR0czMzM3Nzc/Pz9DQ0MvLy8zMzM3Nzc7OztDQ0MzMzM3Nzc7Ozs/Pz8vLy8zMzM7Ozs/Pz83NzczMzM3Nzc7Ozs3Nzc3Nzc3Nzc7Ozs/Pz83Nzc3Nzc7OzszMzM3NzczMzM7Ozs7OzszMzM3Nzc3Nzc3Nzc3Nzc7OzszMzM3Nzc3Nzc7OzszMzM3Nzc7Ozs3Nzc3Nzc7Ozs3Nzc7Ozs7OzszMzM3Nzc3Nzc3Nzc7Ozs3Nzc3Nzc7Ozs3Nzc3Nzc3Nzc3Nzc7Ozs3Nzc3Nzc3Nzc7Ozs3Nzc3Nzc7Ozs3Nzc7Ozs3Nzc7Ozs3Nzc3Nzc3Nzc7Ozs3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc7Ozs3Nzc3Nzc7Ozs3Nzc3Nzc3Nzc7Ozs3Nzc7Ozs7Ozs3Nzc3Nzc3Nzc3Nzc7Ozs3Nzc3Nzc3Nzc7Ozs3Nzc3Nzc3Nzc3Nzc7Ozs3Nzc3Nzc2j3KcAAACFdFJOUwABAgYICwwODxASExQVFhcZHR4hIyQlJicoKSorLS4vMDEyNDU4PD0/QkdISUpMTU5QUlVYWVpcYWZnaWprbHN0dXh6e32AgYaIjpCVlpmam5+io6Smp6ipqq2vsLO1t7q9w87P0NLT1dbY2drd3+Dl5+jr7e7v8PHy8/T19vj5+vv8/f53HW3GAAAACXBIWXMAAA50AAAOdAFrJLPWAAABiklEQVQ4T63RVVcCURQF4GNgDSgWYostit2JgdijCCq2YIuNnSj7fzvMHMCY5Yt+T/vEWvfeGfoviZUdvZ3m1Bguv9H2ey6DwO32WA53vjCuB6AI7tVy75NcL3AyUW+qGd55w1kjdyN0Gwi40uWosd/hsECOUX0BzBe2tGeR0NiUZ33H1NdLJnhwmln77MmjFBFDtAJ/Nk8UVZeYoBZpLD3Sbae2J3QpA9YRRD0ZiuWsL6J8HyblHNYDlHIMyfDCyVHRCdSQkCLnBD0Z9iHKOcx8ixFqEJNC2TZAlisMyv2wNC92NM0vbj3F22AnEQ/lPGFjwGjusL2I9NbxCssN1uJ4wHJ2cTcQq+S6U1xUKzHKfIbX1db8dINl5hrYNGq4H9FwBDz6vPt+4Hzr/EBM5X5EwbRf+v3A/Vq1cRdYkh/zWWx296RTHCyLI82stLcocF+FziUtOLRcqUhekBYWlA+qSpgLHfHjklFah7Tg+uWIJKe0sPzLgm4e8Jm4UCO4j80c1WlLOPwB0QdC1l9iI1nFIQAAAABJRU5ErkJggg=='
CLOSE_N = b'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAHaUExURQAAAAAAAP///4CAgP///6qqqv///7+/v8zMzP///9XV1dvb27+/v8zMzNHR0dXV1cTExNjY2MjIyMzMzM/Pz9/f39LS0sbGxtXV1czMzNHR0cjIyNPT07+/v8LCws7OztDQ0MrKys/Pz8nJydHR0djY2MvLy8zMzM3NzcjIyM/Pz8nJycvLy9HR0czMzNLS0s7OztDQ0MjIyMzMzM3Nzc7Ozs7Ozs7OztHR0c7OzsvLy8zMzM3Nzc7OztHR0czMzM7OzsvLy87OztHR0c7OzszMzM/Pz8/Pz83NzdDQ0MzMzMvLy83NzcvLy83Nzc7Ozs3Nzc/Pz83Nzc7Ozs7Ozs7Ozs3Nzc/Pz8/Pz8zMzM7OzszMzM7Ozs3Nzc/Pz83Nzc/Pz83Nzc/Pz8zMzM3Nzc7Ozs3Nzc3NzczMzM7Ozs3Nzc3Nzc/Pz87Ozs3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc7Ozs7Ozs3NzdTU1MzMzM3Nzc3Nzc3Nzc7Ozs3Nzc7Ozs3Nzc7OzszMzM7OzszMzM3Nzc7OzszMzM3Nzc3Nzc7Ozs7Ozs/Pz87Ozs3Nzc7Ozs3NzczMzM7Ozs3NzczMzM7Ozs3Nzc3Nzc7Ozs7OztHR0c7OztDQ0M3NzeTk5LfEyO4AAACddFJOUwABAQICAwMEBQUGBwgKCwwNDQ4PEBAREhIUFhcXGBkaGx0gISEhIiMkJSUmJycoKCoxODw9Pj9DQ0RFRkxOTlBTVFRYWVpaW1xmamxscXFydnl7fH1+f3+AgoKDhpWWmZmampydoqOpq6usra6xsrO2ubu8v8XG0NHR09XV1tbX19jZ3N/f4eHi4uPj5OXl5ufn6evt7/D09fX3+/z5sylfAAAACXBIWXMAAArrAAAK6wGCiw1aAAABwklEQVQ4T22ThV/CQBTHnxM7mYqBgYmF3R1gY3d3d2B3oWJ3/a9ebQzc7/a5Pd77vt/dbQyAwyIzDamEGBjAcQpbcQqaFgxUhdWVEulrMj1ZJyEgYvrrVaqX7wMta8UAeDQ95QVrNBFsaDTK/t0UIItQA+X4hhtzpILmnTSWIA4+ox8t5QaDHl94GIqnHmv9WJ0Ag5+n97cS3Z1f/ZQ6EncCKIfWw3W6VJ1VUQXPBicrwI+sosBGWoueAXjiR9ZQgNLoB20C3S11IAQDVHEuBPeP8cKA4CACkDVXjl4B8L0DUSAB8ESBpKWjEgfgO296AjHwbwmA+IX9oqD2625fsof/m+QgccY0sd2B6rKbRK8Y0o9/J71RRiHngOrebTubpiLMyjlw4NVlbs2YPSzBsdwpVH2WTh4SFk8qXOVPkbvVy6Pe+OX5WOlzsAKR+QH4TwLJ2f7yxyQwaxIByRLoTurkbr/E2ArrFmS3hM+ACZE2ir4mp0APBzs4lb0N1xuNxkZhNDb0v1c5iw7Iom7PYr60ynzxcJZD90QJhXtQqDpEjS461CFhwe64QDdJ7/aiXyerI7GPlYjELEHXEScmMcHBH+preAAp1WArAAAAAElFTkSuQmCC'
DAY_N = b'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAACiUExURQAAAP///9HR0dXV1cTExMjIyMnJyczMzM7OztHR0dPT08rKys7OzszMzM7Ozs/Pz8zMzM3Nzc/Pz83Nzc3Nzc7Ozs3Nzc7OzszMzM3Nzc7Ozs7OzszMzM3Nzc3Nzc7Ozs3Nzc3Nzc7Ozs3Nzc3Nzc3Nzc7Ozs3Nzc3Nzc7Ozs3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc7Ozs3Nzc7Ozs3Nzc3NzaP+H90AAAA1dFJOUwABCwwNDhMUFRYXGBo8P0BBQk9RUlR1d3mAgYKDqK+wsrPKzM3Oz9DT1NXX2O/w8fLz9P3+BnzlYgAAAAlwSFlzAAAOwwAADsMBx2+oZAAAAPlJREFUOE+9kmlTwjAQhjdUIalyg8hRjnLIITRQ3///1+xkF02lyow6PJ+ebN7J7OyGbg8g8h2/DujIsJwDJtIsQoRN6EQC4QaRkzN6jddH8Qyzxu5BXAi3iJUZrU6n5VCrGFt+0COMq10LR9Kpxhf3RKr7hnGtVKpPkLaVFH2MxRNbD4cKW44RxmI0xUDM5wU1MWpgKca4zuiIQM50BytFht1+Bu6R5ALMCnUxamIh5jPERIxm6Iv56AQ9tmfsy2w5VCfFtBEEzRnSVsGgslG3D64z7FsFo3bLqgwWRzvvlwuWla179+O6r3+Ya1/ugy/Tu+TvgX+H6B2cmR/FZ8l2QQAAAABJRU5ErkJggg=='
DOTS_N = b'iVBORw0KGgoAAAANSUhEUgAAABsAAAAJCAMAAAD0FKf3AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAEIUExURQAAAAAAAP///7+/v8zMzKqqqtXV1ba2tr+/v9/f3+Pj47Ozs8zMzNXV1djY2MzMzM/Pz9LS0snJydfX18zMzM3NzdDQ0M3NzdHR0czMzM3Nzc7OzsrKys/Pz8zMzNHR0c/Pz8zMzM7Ozs/Pz8vLy8zMzMzMzM/Pz83Nzc7Ozs7Ozs3NzczMzM/Pz8zMzM7Ozs/Pz8zMzM3Nzc7Ozs3NzczMzM7Ozs7Ozs3Nzc3Nzc3Nzc3Nzc3Nzc7Ozs7Ozs3Nzc7OzszMzM7Ozs3Nzc3Nzc3Nzc3Nzc7Ozs3Nzc3Nzc3NzczMzM3Nzc3Nzc7OzszMzM3NzczMzM3Nzc7Ozs/Pz9DQ0NPT09TU1PwcdYgAAABSdFJOUwABAQQFBgYHCAgJCgoMDQ8QERMTFCQmKSwtLi8wMDI9QEtOWl5qbW9wcnN2fX+Wl5mfo6apr7Cxt7u8vsPFx8jKzdna4OHr7e7v8PLy9fn7+/xHmM6wAAAACXBIWXMAAA50AAAOdAFrJLPWAAAArElEQVQYV33NxRbCUAxF0QvFrbi7u7u7a14L//8nvMIYMslZ2YPg/zjKs25SiWB1UYuoeSQ604pLuVjrMrFNGggMX/QahYHUmpHcsHLznRmxR8uky2xlkndZva55Z0QXP7fQlbi1bfr8USLpVDCYWw9utyg3sS8R2xWB2PxJz0UcyG0ZSQO78tDT2a9KRkBIjC+TpAbQFpeHnlelGASn+NmwuCzfEN3CN34M8Aa4ehugbFQnLQAAAABJRU5ErkJggg=='
SEARCH_DOWN_N = b'iVBORw0KGgoAAAANSUhEUgAAABgAAAAOCAMAAAACJixMAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAACoUExURQAAAP///8bGxsnJyc7OztHR0dPT08rKyszMzM7OztDQ0NHR0crKyszMzM7Ozs/Pz9HR0cvLy83NzcvLy8zMzM3Nzc7OzsvLy87OzsvLy8zMzM/Pz87Ozs3Nzc7Ozs3Nzc7Ozs3Nzc3Nzc3Nzc7Ozs3Nzc7Ozs3Nzc3Nzc3Nzc3Nzc3Nzc7Ozs3Nzc7Ozs3Nzc3Nzc7Ozs7Ozs3Nzc3Nzc3Nzc3Nzc3NzamMdWsAAAA4dFJOUwACEhMVFhcYGRobHB0eHyAhIiQsLS4vMTQ2Nzqmqbu8wMHCw8XIyc3O0tPX2dzf4OHj5OXm5+rrVsYFQgAAAAlwSFlzAAAOnAAADpwBB5RT3QAAAJZJREFUKFN9ilkSgkAMBeMyCoiKgsKAC8rmjoDg/W/mMIkU8mFXJen3KgDQE9NBVrPtWoYW5mYu9uRyX2H+Yt6u0/oap9SSBWE9zks0I0lttBr7mSxIQYszhxScLNZIBXqUczSeRzoaooSFW1+3CBVZNKhB6Yn/V6BS0cAOlcfLI6PYgu3flT+m8MNw549IO/QHJH8A+ADnTgkm2RHu0QAAAABJRU5ErkJggg=='
ERROR_N = b'iVBORw0KGgoAAAANSUhEUgAAABwAAAAdCAMAAACOj/wDAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAIfUExURQAAAP///////6qqqr+/v8zMzNXV1cbGxszMzNHR0dXV1cTExMjIyMzMzM/Pz9LS0snJyczMzM7OztHR0dPT08rKyszMzM7OztDQ0MrKyszMzM7Ozs/Pz9HR0cvLy8zMzM3Nzc/Pz8vLy8zMzM3Nzc7OztDQ0MvLy8zMzM3NzcvLy8zMzM3Nzc7Ozs/Pz8vLy8zMzM3Nzc7Ozs/Pz8vLy8zMzM3Nzc7Ozs7Ozs/Pz83Nzc7Ozs3Nzc7Ozs/Pz8zMzM3Nzc7Ozs7OzszMzM3Nzc3Nzc7Ozs7Ozs3Nzc3Nzc7Ozs7OzszMzM3Nzc3Nzc7OzszMzM3Nzc7OzszMzM7OzszMzM3Nzc3Nzc7OzszMzM3Nzc3Nzc7Ozs7Ozs7Ozs7OzszMzM7Ozs3Nzc3Nzc3Nzc3Nzc3Nzc7Ozs3Nzc7Ozs3Nzc3Nzc3Nzc7Ozs7Ozs3Nzc3Nzc7Ozs7Ozs3Nzc3Nzc7Ozs7Ozs3Nzc3Nzc3Nzc3Nzc7Ozs3Nzc3Nzc3Nzc7Ozs3Nzc3Nzc7Ozs3Nzc3Nzc3Nzc7Ozs3Nzc3Nzc7Ozs3Nzc3Nzc3Nzc7Ozs3Nzc3Nzc3Nzc7Ozs3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc7Ozs3Nzc3Nzc3Nzc7Ozs7Ozs3Nzc3Nzc3Nzc7Ozs7Ozs3Nzc3Nzc7Ozs3Nzc3Nzc3Nzc3Nzc7Ozs3Nzc3Nzc3Nzc3Nzc7Ozs3Nzc3NzZ+xBXEAAAC0dFJOUwABAgMEBQYJCgsMDQ4PEBETFBUWFxgZGhsdHh8gISIjJCUnKCkqKywtLjEyMzQ1Njc4OTo7PD0+P0BCQ0hJSktMTlRfYGFiY2VmaGlqa2xub3FydHd5ent9fn+AgYKGh4iNjo+QlJWXmJudnp+goaKjpaanqaqrrK2ur7CxsrS1vb7AwcLDxMbIycvNzs/R0tPU1dbX2Nrb3N3g5OXm5+jp6uvs7e7v8vP09fb3+Pn6+/z9/gNN9oAAAAAJcEhZcwAAC2EAAAthAVt5K6YAAAIdSURBVDhPVZP5VxJRGIa/CENI1KJs0SSXoCjKBLOsaLXMVrPIFs0WKzdEzRbbzWyREgUpVExaBDJZ4v0Du3fmwsHnh/ne571n5pyZe4dSaHa2vPsB/BxprdCIKoX28DAQnpue/h4CRo7kilqitAdJd9dJa1mZpbZjLIG+LWKBUfUFE00bhdB6uxvj+4RQ5SQGzSJLmB7ha7Uciz+iWyfHFPntGC3hQX0XL9ZIVQarnuD+Sjarwr5KucnE7InUEGV34bqCWc5pJpzyxgJ2VVxBv5qK4h4TE2Vj3MUnbXiVeKBi0+hObKZa9PKObPP4UE5UMICFU/xJ5MAZcsQapEU6+hvD+tVOhC8sl/zs4gB9Dh6UMtGxXxhyInJZKWvNrJeCU9tlIToRAObtK4QZ/GEKfUt/x7xRYMoohPS+OM2l78xt+wPEnxYJNfhD5AraZNHciaL1fDL5eJ3s+2c91B2/KGVVy1/c0igbkOjPl4pziw/pOPp4VF6K4Z6WKMuOf+3ZvOlBPRXGvDt4toWdeXxm3VyoW8bmNndCT6oONPO3VhrEbmtNanZVNKGXTWvIb5HrTHZNRvhhUN/GS74PS9A9Q5t0CDe9h3OtVKXRdeKTXo4VXjzfLUcZ8yB8VpHJ4oL3RrEQKrw6gbE9QhglncC4s37vVmN1ncOdhKNULEjkHHgNRIIzM3MR4O0h9jWWoDFdexOIRgNDzWbxrxD9BzeioYdNQbSNAAAAAElFTkSuQmCC'
FIRST_PAGE_N = b'iVBORw0KGgoAAAANSUhEUgAAACUAAAAlCAMAAADyQNAxAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAFQUExURQAAAP///////6qqqv///7+/v9/f38bGxs/Pz8PDw8nJyc7OzsXFxdHR0dPT08rKyszMzNbW1s7OztDQ0MjIyNHR0crKytPT08zMzNXV1c7Ozs/Pz9jY2MzMzNPT08rKys/Pz9HR0c3NzdHR0dLS0s3NzczMzM/Pz83Nzc7OzszMzM3NzczMzM7OzszMzM/Pz83Nzc7Ozs7Ozs/Pz83Nzc3Nzc/Pz83Nzc/Pz87OztDQ0M7Ozs/Pz9DQ0M3Nzc7Ozs3NzczMzM7OztDQ0M7Ozs3Nzc3Nzc7Ozs7OztDQ0M7OztPT083Nzc3Nzc/Pz9DQ0M7OzszMzM7Ozs7OztHR0dDQ0NHR0c/Pz9DQ0NDQ0M7Ozs/Pz9DQ0NDQ0NDQ0NHR0c/Pz9DQ0NHR0c7OztDQ0M/Pz87OztDQ0NLS0tPT09TU1NXV1dbW1tfX19jY2NnZ2VLzso0AAABndFJOUwABAgMDCAgJEBETFRYWFxgZGRobHBwdHR4eHyAhIzQ1NTc4ODk9S0tmaWpsbW1ub3CCg4aJioqLi4yMjY6Oj5KVl5eXmJmam7i4x8nR093e7O3t7vLz8/T09fb29vf4+Pn5+fr6/f5NF25AAAAACXBIWXMAAA50AAAOdAFrJLPWAAABR0lEQVQ4T8WUV1fCQBBGVxRFEFtUFMWCvfcSezTE3rBFEzFWNCzk/7+5sANuNJvwpPfpmzn3zORkN0H/ia8CghvB4YEqiHyqJ9Mng5D51G5ZlzOQ+QQ2rYsJyIS6eKfTfrvVoLwdxCCz2CxB0XOnPVCwsFbT3mPGmA1AxcJYEVk3tY0wLex8W0LiCWtiqJB/UrI6ZA2rq/WF5i+KVov8jNVlx3UEsNoTD/hqhTOpaEV3XrM3S7xJ1BqtEQ3zfJ47iVojsSPr47AbOk7krTH/YuozudAILQfoc0W2jay6xl9JLdQmafh6nTsNLCRIBr4TPd4XOUVJx7e8pSWrvHNEqFXWMvded4LcLyVlvsx53C+EmmU9d9YLBYvNQuHd9/0uyCzESk5BJoT6opUQWfLf4zRkPv7x9HE/ZBeCQ3EfRDfK+uf8DQh9AdYzRBAOmmSFAAAAAElFTkSuQmCC'
FULL_SCREEN_N = b'iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAASUExURQAAAM7Ozs3Nzc3NzczMzM3NzT9AkhIAAAAFdFJOUwB3f4CIs84ioAAAAAlwSFlzAAAOwwAADsMBx2+oZAAAAGlJREFUKFOljlEOwCAIQ9kY97/ysFZGkCVL1g8rfVEqv6QXL0Vq1hLPW4L85Y0ZL1UNUJwE6TedCcGzx/fCw0jYJ2uSg1PSCTAIPIz5ILAFIi9155BFsKsH7Jb+XwJpcpA29zp7n+8SuQGN1gIjnNdI/gAAAABJRU5ErkJggg=='
LAST_PAGE_N = b'iVBORw0KGgoAAAANSUhEUgAAACUAAAAlCAMAAADyQNAxAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAFNUExURQAAAP///////6qqqv///7+/v9/f38bGxs/Pz8PDw8nJyc7OzsXFxdHR0dPT08rKyszMzNbW1s7OztDQ0NHR0crKytPT08zMzNXV1c7Ozs/Pz9jY2MzMzNPT08rKys/Pz9HR0c3NzdHR0dLS0s3NzczMzM/Pz83Nzc7OzszMzM3NzczMzM7OzszMzM/Pz83Nzc7Ozs7Ozs/Pz83Nzc3Nzc/Pz83Nzc/Pz87OztDQ0M7Ozs/Pz9DQ0M3Nzc7Ozs3NzczMzM7OztDQ0M7Ozs3Nzc3Nzc7Ozs7OztDQ0M7OztPT083Nzc3Nzc/Pz9DQ0M7OzszMzM7Ozs7OztHR0dDQ0NHR0c/Pz9DQ0NDQ0M7Ozs/Pz9DQ0NDQ0NDQ0NHR0c/Pz9DQ0NHR0c7OztDQ0M/Pz87OztDQ0NLS0tPT09TU1NXV1dbW1tfX19jY2NnZ2bDy15gAAABmdFJOUwABAgMDCAgJEBETFRYWFxgZGRobHB0dHh4fICEjNDU1Nzg4OT1LS2ZpamxtbW5vcIKDhomKiouLjIyNjo6PkpWXl5eYmZqbuLjHydHT3d7s7e3u8vPz9PT19vb29/j4+fn5+vr9/odbm8YAAAAJcEhZcwAADnQAAA50AWsks9YAAAEySURBVDhPYxhEgJEJysAHmBRVuaBMPEDJO02LDcrGDfSC8uw4oWxkwCypwA1lAoFuYJ4tB5SNDKTdU514oWwGBu0A7Krk/XKjnYWgHJyqOAyTMmNdBaE8XKoYeG0is6KcRSAcnKoYuC2ishNchMFs3KoY+KzCsqMdxEBMPKoYeC0isuMdQKbhU8UgYB2SHeUgSkAV0NLwnHh7MQKqGASMAzNiTVg18atikPVMz/OSUcevis/IPzPegl0Drype09CcZEdJ/O7iMw/OjnERJxBeZuHZieBIwqOKzzI8O8pZAsTErYqoeOS1icqMdgbHIm5VHAbxWXFuhNKXnG9utCvEOiDApUrGI8WVH8rGrYpFSpEHygQCnK5HAfo48iMqUPFJ0yGct1mU1YgoJ4grc2gEGBgAqcNDLYh2O8YAAAAASUVORK5CYII='
WAIT_N = b'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAACoUExURQAAAP///////6qqqr+/v9XV1cTExMbGxsrKyszMzMrKyszMzM/Pz8/Pz8/Pz8zMzM3NzczMzM3Nzc3Nzc7Ozs7Ozs3NzczMzM3Nzc3Nzc7OzszMzM7OzszMzM3Nzc3Nzc3Nzc7Ozs3Nzc3Nzc7Ozs7Ozs7Ozs3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc7Ozs3Nzc3Nzc3Nzc3NzbINTUAAAAA3dFJOUwABAgMEBg0SGBkdHiU1RUZHS1FSWFlhZHBxc3mHiImUlZaen6Clv8LHzc7W2Nzd5ebn6+309vd+ZLyRAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAA4ElEQVQ4T82Rx5LCMBBERTBJsOS8XgyYHEzu//+zHeEGF2DDhaJ4F73WjD1SSX0a62/j2RZDGDYEmyGMjWnYMtyiu520Up5p8Lh1g94Dq5Q/4ldyPOnvX+maSl1ZtucfcrJO+IULHdNQYRBG4xiNpFfA9Nn9VKpWfVp/RT5PiaAPONQArSnyvbnC/T/06ZSjRjUcrw3KAXrUgFxQf33It1BezgtUw0/l7i3i8twzulAEmlSSOAALulAF2tQLjcOuJEvWdTOyxJqth6dLnoe6wPAco5CGATWczHBgRnwVSv0DhkEVqSYbYpgAAAAASUVORK5CYII='
LOGO_N = b'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'
SEARCH_N = b'iVBORw0KGgoAAAANSUhEUgAAABsAAAAdCAMAAABsU+d6AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAIrUExURQAAAAAAAP///4CAgP///6qqqv///7+/v////8zMzLa2ttvb28bGxszMzNHR0b+/v9XV1cTExMjIyMzMzM/Pz9LS0sbGxsnJydnZ2dPT08rKyszMzM7OztHR0crKytPT08zMzM7OzsnJydHR0cvLy8zMzM3NzcjIyMnJydDQ0M3Nzc7OzsvLy8/Pz9DQ0MzMzM3NzcvLy8zMzM7Ozs/Pz8rKys3Nzc7Ozs/Pz8zMzM3NzdHR0cvLy8/Pz8/Pz9DQ0M3Nzc3NzdDQ0M3NzczMzM7OzszMzM3NzcvLy8zMzM3Nzc/Pz83NzczMzM/Pz83Nzc/Pz83NzcvLy87OzszMzM/Pz83Nzc3NzczMzM7Ozs3Nzc3Nzc7OzszMzMzMzM7OzszMzM3Nzc7Ozs3NzczMzM3Nzc7Ozs3Nzc7Ozs7OzszMzM3Nzc3Nzc7Ozs3Nzc3NzczMzM7Ozs7Ozs3Nzc7Ozs7Ozs7Ozs3NzczMzM7Ozs3Nzc7Ozs7Ozs7Ozs3Nzc3Nzc3NzczMzM7Ozs3Nzc7Ozs3Nzc3Nzc7Ozs3Nzc7Ozs3Nzc7Ozs7Ozs3NzczMzM7Ozs3Nzc7Ozs3Nzc3NzczMzM7Ozs3Nzc7Ozs3Nzc7Ozs3Nzc7Ozs3Nzc3NzczMzM7Ozs3Nzc3Nzc3Nzc3Nzc3Nzc7Ozs3Nzc7Ozs3NzczMzM3Nzc3Nzc3Nzc3Nzc7Ozs3Nzc7Ozs/Pz9DQ0NHR0dPT09TU1NXV1dnZ2d3d3ajXrQ4AAACvdFJOUwABAQICAwMEBAUHBwkKCwwMDQ4PEBESExQXGBkaHB0dHh8hISIjJCUmJikqLDAxMjM2Nzk7P0JERUZHSElKS0xNUVFSVVhaW15fYWRnaGpxdHV2d3h5e4CDg4SFhouMjI2OkpSVmJianKCho6eqra+wsrW4uru/w8TExcbHycvMzc/P0NHT1dna2t3e4OLj4+Tk5ufo6Orq6+zu7vDx8vP09fb3+Pj5+fr7+/z9/v6Xluk/AAAACXBIWXMAAA50AAAOdAFrJLPWAAABqElEQVQ4T2MgCFg1vJOy04OMeaB8BGBUTZ29cf369RuWlZizQsWggMWsY+P6tXP7Zqxav3FOIB9UFAyYjCZsXFXpqS4hb5U1d/NSf26oOAiIV21aFM8LZjK5dm+baAlmggGL7+blaVA2A4PHlO2ZklA2AwNv+cZ2ZSgbyMvYMtkEymZg0Jm3MhnKBAG3yVt92KFsBtv1C72gTBAwbNwRxQ9lMzhvWOAIZYKAVvWORBEom8Fh/UIPKBMEDBp2RAtA2Qy6C1ckQJkg4DJhmx8nlM0gULuhVRrKZmDgTNk83RTKBvovYNOSeCibgcGxZ3uODJQNBFLNm+aHQp1t1bZtsi2ECQbMFrM2Liu0lhIU04+ftmlbriJUHAzYnKZu3LCyt6Vz/oaNM7pm9keKQyVAgFk3b/EGUPytqbcxqNuyKVYYKgEGnIZhOcX5cfaiDELZGzZsihGEiqMB2YL1GzZFoMQwAsgVrduwMRwz5YCBQun6DRvCuKA8NKBUtnbDumAOKA8NqFSs3bA6BB6sqECtZu2GSdpQDjrQbFrozgxlYwA9O3jKwAIYGAAo3HLBfL87ZgAAAABJRU5ErkJggg=='
STOP_N = b'iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAMAAABF0y+mAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAKmUExURQAAAP///////6qqqqr//////7+/v///v////8zMzNXV1dvb2+Pj48zMzMzM5tHR0dXV1djY2Nvb293d3c/Pz8/f39/Pz9/f39LS0tXV1dfX19nZ2dvb29zc3NXV1dbW1tjY2NnZ2d3V1dbW1tfX19jY2Nra2tvb29fX19ra2tvV29vV1dbW1tjY2NnZ2dra2tbW1tfX19jY2NfX19nZ2dra2tnZ2drW2trW2tfX19jY2NfX19jY2NnZ2dnZ2dfX2trX19fX19vY2NjY2NjY2NnZ2dnW1tnW2djY2NjY2NnZ2dnZ2dfX19jY2NjY2NnZ2drX19rY2NjY2NnZ2drX19jY2NjY2NnZ2dnX19rX19rY2NnX19nX2dnZ2dnX2dnZ2dnX19nX2drY2NjY2NnX19nX19jY2NjY2NnX2djY2NjY2NjX2NnX19jY2NrY2NnX19nX2dnX19jW2NjY2NjY2NnX2dnX2djY2NnY2NjY2NjY2NnX19nX19jY2NjX2NnX2dnY2NjY2NjY2NjX19jY2NnX19nX19nX2djY2NjY2NjX19nX19nX2dfX19jY2NnY2NjY2NnY2NjY2NnX2dfW19nX19jY2NjX2NjY2NjX19jX2NjX19fX19nX19jY2NjY2NjX2NjX2NnX19nX19nY2NjY2NjY2NjX2NjY2NjY2NnY2NjY2NjY2NjX2NjY2NjX2NjY2NnX2dnX19nY2NjY2NjY2NjX2NjX2NnY2NnY2NjY2NjY2NjX2NjX2NnY2NnY2dnY2NnY2djY2NnY2NjY2NjY2NjY2NnX2dnY2NnX2NnY2NjX19jX2NjX2NjY2NjX2NnY2dnY2NnY2NjX19jX2NjX19jX2NjX19jX19jX19jX19jX2NjX19nY2NjY2NnY2NnY2drZ2X7uN+8AAADedFJOUwABAgMDAwQEBAUGBwkKCgsMDQ4PEBAQEBESExQVFhgZGhseHyAhIiMmKSorLC4vMDIzNDo8PkNERUdITE9QUVJSU1RVVldYWFtcXV5gYmNlZmhpa21vcHJzdHV4eHh5eXp6e32AgYKEhoiJi46Pj5KSlJaWl5manJydnqCho6WmqaqrrKytrq6wsbKzs7S1tbe3uLq7u7y9vb6/wMHBwsTFxsfIycrMzc3Pz9DR0tLT09TV1tfY2drc3d7f4OHi4uPj5OTl5ufo6erq6+zt7e7v8PHy8vPz9PX5+vr7/s7ZNYwAAAAJcEhZcwAACusAAArrAYKLDVoAAAIaSURBVDhPY0AA0ehJqYJQNgZIP9R9MQvKRgYK7r66UrOSGfrmM6h52whARSGAu+rCkTXOM2MZWucpzT56OoULKg4G+gcTTc809scztC4I3mpUvlsGKg4GOnsTRBYunhHD0Lq8oochf6s0VBwMeNa1C1Tv3BzF0LxhajlD52SEmzmMrIWnbOOOvX4lnKFp+6ZE9gWFcDtZI2/end93UcD2/v0whqajJ1xUt4dApRgYZE9N9Ny+7pqBwb0HoQzN9w4Ympy1gkoBJY8UMJRfveOnvvthKEPr/a1SHmcMoFIMDHwtMxh8rtwvlp4MlGy4v4Ihboc6VAoI/A8bym65v5TBb6MZg836UIaSubJQGSAwvBwANO64OKcEBwOTJLNgVxUvAwMjGzczSFJhWRmDx/ndMOUqK5MYGJgcN19sUwXyOHOWqzC4m0GkGBgM9ngwcAbfmhSytJ4fyHW9ZgERBwO97WGyqbdLJRkiDssDufr7oiDiYMCTs2vVzTR+BukJyySAXIHWXkmIBBjI+mXaMjHI1Z2zA3PjTmqBaRhgAqroOOPFCOaYn3cG0wigOO+YE5QpNr+GB8qEAM2NuyyhTAaGjOPKUBYYGO9fawxlAoHGrlyIBSDA4nBqjiaUDQaBN4KgLAaxuEtNClA2BDAnXSvSBjE47addyRYCiyEAp9vGY7PL82pXX1hkzQ0VQwKyzpWzlkzPt0AkLgYGAKpxnJDA/eP3AAAAAElFTkSuQmCC'
annot_indexes = [-1, -1, 0]
G_SIZE = (770, 590)
class PDFViewer:
"""
This class represents an object of PDFViewer class
"""
def __init__(self):
"""
Constructor for PDFViewer class
"""
self.document = None
self.filename = ""
self.mode = 1 # day,
self.total_pages = 0
self.pages = None
self.full_width = False
self.annotated_pages = []
self.max_page_size = (770, 585)
self.drag = [0, 0] # drag enabled, currently dragging
self.perv_zoom_val = 0
self.current_page = 0
self.image_id = self.start_point = self.end_point = None, None, None
self.searching = False
self.image_data = [0, 0, 0]
self.TOC_tree = sg.TreeData()
self.win = self.create_reader_gui() # window
self.text_found_pages = []
self.notes = {}
self.scroll_page = False
self.perv_img_size = [0, 0]
self.custom_search_option = 'simple'
def clear_window(self):
"""
When closes a file everything in application resets
:return: None
"""
self.TOC_tree = sg.TreeData()
self.win['-TOC_TREE-'](self.TOC_tree)
self.win['-BTN_DOTS-'](['', ['Whole word', 'Case sensitive']])
self.current_page = -1
self.image_id = None
self.update_cur_page()
self.annotated_pages = []
self.win['-IMAGE-'](data=BLANK)
self.win['-TOTAL_PAGES-']("/ 0")
self.win.TKroot.title('| PyPDFViewer')
self.win['-MATCH_NUM_STATUS-']('0 / 0')
self.win['-BTN_SEARCH-'](image_data=SEARCH if self.mode else SEARCH_N)
self.win['-MATCH_NUM_STATUS-']('0 / 0')
self.win['-FIND_TEXT-']('')
annot_indexes, self.text_found_pages = 0, [-1, -1, 0]
self.searching = False
self.filename = ''
self.image_data = [0, 0, 0]
def fill_window(self):
"""
Populates all widgets once a file is opened i.e table of contents, notes etc
:return: None
"""
try:
self.document = fitz.open(self.filename)
except Exception as ex:
self.show_popup("Sorry this file can't be opened.")
return
self.total_pages = len(self.document)
self.current_page = 0
self.update_cur_page()
self.load_notes()
self.pages = [None] * self.total_pages
self.annotated_pages = []
self.image_data = self.get_page_data(self.current_page)
self.TOC_tree = sg.TreeData()
toc = self.document.get_toc()
if toc:
self.create_toc(toc, "", toc[0][0])
# updating all elements
self.win['-TOC_TREE-'](values=self.TOC_tree)
self.update_image()
self.update_cur_page()
self.win['-TOTAL_PAGES-'](value="/ {}".format(self.total_pages))
self.win.TKroot.title('{} | PyPDFViewer'.format(self.filename.split('/')[-1]))
self.win['-ZOOM_VAL-']('100')
@classmethod
def get_filename(cls):
"""
Show popup for selecting file
:return: Path of selected file
"""
filename = sg.PopupGetFile(
"Choose file to preview",
title="PDF Browser",
text_color='black',
background_color='lightgrey',
file_types=(("PDF Files", "*.pdf"),),
icon=LOGO,
keep_on_top=True,
button_color=('black', 'darkgrey')
)
return filename
def create_image_btn(self, k, data, tooltip, padding=None, image_size=(None, None)):
"""
Create an image button
:param k: unique key for accessing button
:param data: image data
:param tooltip: Tooltip to show
:param padding: Padding on a button
:param image_size: size of the image
:return: Button elemeny from PSG
"""
return sg.Button("", k="-BTN_" + k,
image_data=data,
button_color=("lightgrey" if self.mode else "black", "lightgrey" if self.mode else "black"),
border_width=0,
tooltip=tooltip,
pad=padding,
image_size=image_size,
)
def fit_toc_label(self, length, data):
"""
Adjust heading in a way that it fits in table of content
:param length: required length of chars to diaply in one line
:param data: heading
:return: Adjusted heading string
"""
counter, text = 0, ""
for txt in data.split():
counter += len(txt) + 1
if counter < length:
text += txt + " "
else:
counter = 0
text += '\n' + txt
return text
def create_toc(self, contents, parent, phead):
"""
Table of contents extracted from PDF file is in form of nested list. This function converts that nested list
in to a parent-child data structure, so that all heading and sub-heading can be associated
:param contents: list of child
:param parent: Parent heading of sub-heading
:param phead: key of the parent heading
:return: None
"""
cons = iter(contents)
for content in cons:
i = contents.index(content)
head, text = content[0], content[1]
text = self.fit_toc_label(25, text)
if head == phead:
i += 1
k = ''.join(text.split())
self.TOC_tree.insert(parent, k, text, content[2])
else:
j = i
while True:
j += 1
if j < len(contents) and contents[j][0] != phead:
next(cons, None)
else:
break
self.create_toc(contents[i:j], k, head)
def create_layout(self):
"""
Create the COMPLETE GUI of the application. Interface is divided into rows, nested list containing elements
is given to the Window() function of PSG. For more information on how its done kindly visit https://pysimplegui.readthedocs.io/en/latest/
:return: Nest list containing elements
"""
menu = [
['&File', ['&Open', '---', 'Properties', '&Close']],
['&Help', '&About Developer...'],
]
self.tree = sg.Tree(data=self.TOC_tree,
headings=['No#', ],
col0_width=27,
col_widths=[0],
select_mode='browse',
k='-TOC_TREE-',
num_rows=30,
enable_events=True,
font='Consolas 12 bold',
row_height=40,
tooltip="Table of contents",
header_font=('Consolas 12 bold'),
pad=(0, 0),
text_color='black' if self.mode else 'white',
background_color='lightgrey' if self.mode else 'black',
selected_row_colors='black on white',
)
frame_contents = [
[self.tree],
]
column_content = [
[
sg.Frame(
"Table of Contents",
title_color="black" if self.mode else 'white',
size=(50, self.max_page_size[1]),
font="Consolas 20 bold",
layout=frame_contents,
relief=sg.RELIEF_RIDGE,
border_width=4,
k="-CONTENTS_FRAME-",
background_color='lightgrey' if self.mode else 'black',
pad=DEF_PAD,
),
]
]
frame_main = [
[
sg.Frame(title="",
relief=sg.RELIEF_RIDGE,
element_justification='center',
layout=[
[
self.create_image_btn("OPEN_FILE-", LOGO if self.mode else LOGO_N, 'Open file',
DEF_PAD),
self.create_image_btn("CLOSE_FILE-", CLOSE if self.mode else CLOSE_N, 'Close file',
DEF_PAD),
self.create_image_btn("MODE-", NIGHT if self.mode else DAY_N, "Day/Night mode"),
sg.VerticalSeparator(pad=DEF_PAD),
self.create_image_btn("WIDTH-", FULL_SCREEN if self.mode else FULL_SCREEN_N,
'Fill to width', DEF_PAD, (32, 32)),
sg.In('', size=(5, 1),
do_not_clear=True,
tooltip="Zoom %",
text_color="black" if self.mode else 'white',
background_color="white" if self.mode else 'black',
font="Consolas 12",
justification='center',
k='-ZOOM_VAL-'
),
self.create_image_btn("ZOOM_ICON-", ZOOM if self.mode else ZOOM_N, "Zoom In", DEF_PAD),
sg.VerticalSeparator(pad=DEF_PAD),
self.create_image_btn("FIRST_PAGE-", FIRST_PAGE if self.mode else FIRST_PAGE_N,
"First Page"),
self.create_image_btn("PREVIOUS-", PRE_PAGE if self.mode else PRE_PAGE_N,
"Previous Page", DEF_PAD),
sg.In(str(self.current_page), size=(5, 1),
do_not_clear=True, k="-PAGE_NUMBER-",
tooltip="Current Page",
background_color="white" if self.mode else 'black',
font="Consolas 12",
text_color="black" if self.mode else 'white',
justification='center'),
sg.T("/ {}".format(self.total_pages),
font="Consolas 11",
background_color="lightgrey" if self.mode else 'black',
text_color="black" if self.mode else 'white',
tooltip="Total Pages",
k="-TOTAL_PAGES-",
pad=DEF_PAD,
size=(6, 0),
),
self.create_image_btn("NEXT-", NEXT_PAGE if self.mode else NEXT_PAGE_N, "Next Page"),
self.create_image_btn("LAST_PAGE-", LAST_PAGE if self.mode else LAST_PAGE_N,
"Last Page"),
sg.VerticalSeparator(pad=DEF_PAD),
sg.Frame("", layout=[[
self.create_image_btn("SEARCH-", SEARCH if self.mode else SEARCH_N, "Search",
DEF_PAD),
sg.In("", size=(15, 1),
do_not_clear=True,
k="-FIND_TEXT-",
tooltip="Search here",
background_color="white" if self.mode else 'black',
justification="center",
text_color="black" if self.mode else 'white',
enable_events=True,
font="Consolas 11",
pad=DEF_PAD,
),
sg.T("0 / 0",
font="Consolas 11",
background_color="lightgrey" if self.mode else 'black',
text_color="black" if self.mode else 'white',
tooltip="Matches",
k='-MATCH_NUM_STATUS-',
auto_size_text=True,
size=(6, 1),
justification='center',
pad=DEF_PAD
)
],
[
sg.T("\t", background_color='lightgrey' if self.mode else 'black'),
self.create_image_btn("DOWN_SEARCH-",
SEARCH_DOWN if self.mode else SEARCH_DOWN_N,
'Next match',
DEF_PAD),
self.create_image_btn("UP_SEARCH-", SEARCH_UP if self.mode else SEARCH_UP_N,
'Previous match', DEF_PAD),
sg.BMenu('', ['', ['Whole word', 'Case sensitive']],
k='-BTN_DOTS-',
tooltip='Advance search',
pad=DEF_PAD,
image_data=DOTS if self.mode else DOTS_N,
border_width=0,
button_color=('lightgrey' if self.mode else "black",
'lightgrey' if self.mode else "black"),
),
]
],
background_color='lightgrey' if self.mode else 'black',
border_width=0,
),
]
],
border_width=0,
background_color='lightgrey' if self.mode else 'black',
k="-TOOLS_FRAME-",
)],
[sg.HorizontalSeparator(pad=((5, 5), (0, 3)))],
[
sg.Col(
layout=[
[
sg.Col(
layout=[[]],
size=(770, 0),
background_color='grey55' if self.mode else 'black',
justification='center'
),
],
[
sg.Image(
data=BLANK,
k="-IMAGE-",
pad=DEF_PAD,
enable_events=False,
background_color='grey55' if self.mode else 'black',
)
],
],
size=(770, 600),
scrollable=True,
element_justification='center',
background_color='grey55' if self.mode else 'black',
justification='center',
key='-PAGE-CLM-'
)
]
]
main_col = [
[sg.Col(frame_main, scrollable=False, justification='center', element_justification='center')]
]
notes_frame = [
[sg.T('Page # 0',
k='-NOTE_PAGENUMBER-',
background_color='lightgrey' if self.mode else 'black',
text_color='black' if self.mode else 'white',
font="Consolas 15 bold",
size=(12, 1))
],
[sg.Multiline("",
size=(40, 30),
text_color='black' if self.mode else 'white',
k='-NOTE_TEXT-',
pad=DEF_PAD,
font="Helvetica 13",
background_color='white' if self.mode else 'black',
autoscroll=True,
tooltip='Write note'
),
],
[sg.CB('Save this note',
font="Helvetica 13 bold",
k="-SAVE_NOTE-",
text_color='black' if self.mode else 'white',
background_color='lightgrey' if self.mode else 'black',
default=True,
enable_events=True
),
]
]
return [
[
sg.Menu(menu, k="-MENU-"),
sg.Col(column_content, scrollable=False, k="check"),
sg.VerticalSeparator(pad=DEF_PAD),
sg.Frame(title="", layout=main_col,
background_color="lightgrey",
relief=sg.RELIEF_RAISED, k='-FRAME_MAIN-'),
sg.VerticalSeparator(pad=DEF_PAD),
sg.Frame(
"Notes",
title_color="black" if self.mode else 'white',
size=(50, self.max_page_size[1]),
font="Helvetica 20 bold",
layout=notes_frame,
relief=sg.RELIEF_RIDGE,
border_width=4,
k="-NOTES_FRAME-",
background_color="lightgrey" if self.mode else 'black',
pad=DEF_PAD,
element_justification='c',
),
],
]
def create_reader_gui(self):
"""
Wrapper function for creating GUI and binding some events
:return: Creted window
"""
window = self.initialize_gui()
window['-FRAME_MAIN-'].bind('<Enter>', 'START-')
window['-FRAME_MAIN-'].bind('<Leave>', 'STOP-')
window['-BTN_DOTS-'](['', ['Whole word ✔', 'Case sensitive']])
window['-BTN_DOTS-'](['', ['Whole word', 'Case sensitive']])
return window
def initialize_gui(self):
"""
Initializes the GUI and set all settings
:return: GUI window
"""
# To add a spsh screen just uncomment this code
# if self.mode:
# sg.Window('', [[sg.Image(data=SPLASH_SCREEN)]], transparent_color=sg.theme_background_color(), no_titlebar=True, keep_on_top=True).read(timeout=1000, close=True)
title = "{} | PyPDFViewer".format(self.filename, self.total_pages)
sg.DEFAULT_TOOLTIP_TIME = 10
if self.mode:
sg.theme('darkgrey4')
sg.theme_background_color('lightgrey')
else:
sg.theme('DarkGrey7')
sg.theme_background_color('black')
window = sg.Window(
title,
return_keyboard_events=True,
location=(0, 0),
use_default_focus=False,
layout=self.create_layout(),
resizable=True,
size=self.max_page_size,
finalize=True,
icon=LOGO,
element_padding=(0, 0),
)
for k in window.AllKeysDict:
if "BTN" in str(k):
window[k].Widget.config(activebackground='darkgrey')
window.Maximize()
return window
def get_page_data(self, required_page, annotation=False):
"""
Get PNG of given page number from PDF
:param required_page: Page number to get image
:param annotation: weather user is searching for some text or not
:return: PNG image
"""
self.perv_img_size = [self.image_data[1], self.image_data[2]]
page = self.annotated_pages[required_page] if annotation else self.pages[required_page]
if not page:
if annotation:
page = self.annotated_pages[required_page] = self.document[required_page].get_displaylist()
else:
page = self.pages[required_page] = self.document[required_page].get_displaylist()
size = page.rect
if self.full_width:
mat = self.max_page_size[0] / size.width
else:
try:
mat = (0.8125 * float(self.win['-ZOOM_VAL-'].get())) / 100
except ValueError as error:
mat = self.max_page_size[1] / size.height
zoom_mat = fitz.Matrix(mat, mat)
pix = page.get_pixmap(matrix=zoom_mat, alpha=False)
if not self.mode:
pix.invert_irect()
return pix.tobytes(), pix.width, pix.height
def show_search_pages(self):
"""
Set current page to the page number where text found
:return: None
"""
self.current_page = self.text_found_pages[0]
def update_image(self):
"""
Update the current page
:return: None
"""
img = self.image_data
self.win["-IMAGE-"](data=img[0], size=(img[1], img[2]))
if img[1] != self.perv_img_size[0] or img[2] != self.perv_img_size[1]:
self.win['-PAGE-CLM-'].set_size((img[1], img[2]))
def show_popup(self, text):
"""
Create a popup
:param text: Content of the popup
:return: Popup
"""
sg.popup(text,
background_color='lightgrey',
font="He 16 bold",
keep_on_top=True,
text_color='black',
grab_anywhere=True,
icon=ERROR
)
def update_cur_page(self, value=0):
"""
Update the current page number
:param value: Integer value to add to current page
:return: None
"""
if self.current_page < self.total_pages:
self.current_page += value
else:
self.current_page = self.total_pages - 1
pno = self.current_page + 1
self.win["-PAGE_NUMBER-"](str(pno))
self.win['-NOTE_PAGENUMBER-']('Page # ' + str(pno))
try:
page_note = self.notes[pno]
except KeyError as error:
page_note = ''
self.win['-NOTE_TEXT-'](value=page_note)
def update_match_status(self, total=None):
"""
Update the matching page number
:param total: Total number of matches
:return: None
"""
if not total:
total = self.win['-MATCH_NUM_STATUS-'].get().split('/')[1]
self.win['-MATCH_NUM_STATUS-'](value="{}/{}".format(annot_indexes[2], total))
def remove_annotations(self):
"""
If user stop searching then this function is called, it remove annotation from the whole document
:return: None
"""
global annot_indexes
self.annotated_pages = []
self.page = [None] * self.total_pages
self.document = fitz.open(self.filename)
self.image_data = self.get_page_data(self.current_page)
self.update_image()
annot_indexes = [-1, -1, 0]
def search_text(self, text, window):
"""
Search given text in the document
:param text: Search text
:param window: Multithreading is used, thus we need to given the reference of the window
:return:
"""
total_matches = 0
for page in self.document:
insert_page = True
words = page.get_text_words()
if words:
for word in words:
if self.custom_search_option == 'simple':
found = text in word[4]
elif self.custom_search_option == 'complete':
found = text.lower() == word[4].lower()
elif self.custom_search_option == 'case':
found = word[4].find(text)
elif self.custom_search_option == 'case_complete':
found = text == word[4]
if found:
if insert_page:
self.annotated_pages.append(page)
insert_page = False
total_matches += 1
area = fitz.Rect(word[:4])
self.annotated_pages[-1].add_highlight_annot(area)
self.update_match_status(total_matches)
window.write_event_value('-THREAD_DONE-', total_matches)
def stop_search(self):
"""
Stop searching mode and resets all components
:return: None
"""
self.win['-MATCH_NUM_STATUS-'](value='0 / 0')
self.win['-FIND_TEXT-'](value='')
annot_indexes, self.text_found_pages = 0, [-1, -1, 0]
self.searching = False
self.remove_annotations()
self.win['-BTN_SEARCH-'](image_data=SEARCH)
def start_search(self):
"""
Start searching for the given text
:return: None
"""
search_key = self.win['-FIND_TEXT-'].get()
if search_key:
self.remove_annotations()
self.win['-BTN_SEARCH-'](image_data=WAIT if self.mode else WAIT_N, image_size=(28, 29))
self.searching = True
Thread(target=self.search_text, args=(search_key, self.win), daemon=True).start()
def search_thread_done(self, match):
"""
Searching is done using multi-threading so that GUI don't become unresponsive.
This function tells the main window that I am done searching
:param match: Wheather match found or not
:return:
"""
if match:
self.update_match_status()
self.search_down()
else:
message = "No match found."
self.show_popup(message)
self.stop_search()
def update_cur_annotation(self, perv_annot, cur_annot):
"""
Current search on the page changes its color to blue, to give better user experience.
Well this function implements this feature
:param perv_annot: Reference to the previous annotation
:param cur_annot:Reference to the previous annotation
:return: None
"""
blue = (0.6784313725490196, 0.8470588235294118, 0.9019607843137255)
cur_annot.set_colors(stroke=blue)
cur_annot.update()
if perv_annot and perv_annot.xref != cur_annot.xref:
yellow = (1, 1, 0)
perv_annot.set_colors(stroke=yellow)
perv_annot.update()
def search_up(self):
"""
Take user to previous search text
:return: None
"""
self.save_note()
if annot_indexes[2] - 1 > 0 and self.annotated_pages and annot_indexes[0] + 1 > 0:
annot_indexes[1] -= 1
page = self.annotated_pages[annot_indexes[0]]
annotations = list(page.annots())
if annot_indexes[1] < 0:
annot_indexes[1] = 0
annot_indexes[0] -= 1
page = self.annotated_pages[annot_indexes[0]]
annotations = list(page.annots())
annot_indexes[2] -= len(annotations) - 1
else:
annot_indexes[2] -= 1
try:
prev_annotation = annotations[annot_indexes[1] + 1]
except IndexError as error:
prev_annotation = None
self.update_cur_annotation(
prev_annotation, annotations[annot_indexes[1]])
annot_indexes[2] -= 1
self.current_page = page.number
self.update_cur_page()
self.update_match_status()
self.image_data = self.get_page_data(annot_indexes[0], annotation=True)
self.update_image()
def search_down(self):
"""
Take user to next search text
:return: None
"""
self.save_note()
if self.annotated_pages and len(self.annotated_pages) > annot_indexes[0] + 1:
if annot_indexes[0] == -1:
annot_indexes[0] += 1
annot_indexes[1] += 1
page = self.annotated_pages[annot_indexes[0]]
annotations = list(page.annots())
if annot_indexes[1] >= len(annotations):
annot_indexes[1] = 0
annot_indexes[0] += 1
page = self.annotated_pages[annot_indexes[0]]
annotations = list(page.annots())
try:
prev_annotation = annotations[annot_indexes[1] - 1]
except IndexError as error:
prev_annotation = None
self.update_cur_annotation(prev_annotation, annotations[annot_indexes[1]])
annot_indexes[2] += 1
self.current_page = page.number
self.update_cur_page()
self.update_match_status()
self.image_data = self.get_page_data(annot_indexes[0], annotation=True)
self.update_image()
elif self.annotated_pages and len(self.annotated_pages) <= annot_indexes[0] + 1:
self.show_popup("Search ended.")
def update_custom_search(self, change_index):
"""
Update the custom search drop down
:param change_index: Index of the content to be changed
:return:
"""
search_options = self.win['-BTN_DOTS-'].MenuDefinition
if '✔' in search_options[1][change_index]:
search_options[1][change_index] = search_options[1][change_index][3:]
else:
search_options[1][change_index] = '✔ ' + search_options[1][change_index]
self.win['-BTN_DOTS-'](search_options)
self.update_custom_search_option()
def update_custom_search_option(self):
"""
Update the custom search drop down custom
:return: None
"""
search_list = self.win['-BTN_DOTS-'].MenuDefinition
if '✔' in search_list[1][0]:
if '✔' in search_list[1][1]:
self.custom_search_option = 'case_complete'
else:
self.custom_search_option = 'complete'
elif '✔' in search_list[1][1]:
self.custom_search_option = 'case'
else:
self.custom_search_option = 'simple'
def reset_controls(self):
self.win['-BTN_PREVIOUS-'](disabled=False)
def act_on_next_page(self):
"""
When user clicks to go to next page
:return: Whether page is updated
"""
if not self.current_page == (self.total_pages - 1):
self.save_note()
self.update_cur_page(1)
return True
def act_on_previous_page(self):
"""
When user clicks to go to previous page
:return: Whether page is updated
"""
if self.current_page > 0:
self.save_note()
self.update_cur_page(-1)
return True
def save_note(self):
"""
Save the note, associating it with current page
:return: None
"""
note = self.win['-NOTE_TEXT-'].get()
if self.win['-SAVE_NOTE-'].get() and note:
self.notes[int(self.win["-PAGE_NUMBER-"].get())] = note
def save_notes_to_file(self):
"""
Save all note to a text file
:return: None
"""
self.save_note()
with open(self.filename.split('/')[-1].split('.')[0] + '_notes.txt', 'w', encoding="utf-8") as note_file:
note_file.write('\t\tاس File میں ترمیم نہ کریں\n\n')
for page, note in self.notes.items():
if note and note.split():
underline = ''.join(['=' for _ in range(len(str(page)) + 1)])
note_file.write("{}\n{}\n{}\n".format(page, underline, note))
def load_notes(self):
"""
Load note form text file
:return: None
"""
try:
with open(self.filename.split('/')[-1].split('.')[0] + '_notes.txt', 'r', encoding="utf-8") as note_file:
count = 21
for line in note_file:
try:
page_number = int(line)
count = 2
except ValueError as ex:
count -= 1
if not count:
self.notes[page_number] = line
except Exception as e:
pass
def close_popup(self, text=None):
"""
Confirms user before closing a file
:text: Test to display
:return: None
"""
if not text:
text = 'Do you really want to close this file?'
return sg.popup_yes_no(text,
text_color='black',
background_color='lightgrey',
line_width=50,
font='Helvetica 15 bold',
icon=QUESTION,
keep_on_top=True,
non_blocking=False
)
def unselect_TOC(self):
"""
Set focus away from table of contents, otherwise clicking down/up key will take you next/previous heading
:return: None
"""
self.win['-FRAME_MAIN-'].set_focus(force=True)
def change_width(self):
"""
Change width of te page
:return: None
"""
self.full_width = not self.full_width
if self.full_width:
image = ORG_WIDTH if self.mode else ORG_WIDTH_N
val = '185'
tooltip = 'Original width'
else:
val = '100'
image = FULL_SCREEN if self.mode else FULL_SCREEN_N
tooltip = 'Fill to width'
self.win['-ZOOM_VAL-'](val)
self.win['-BTN_WIDTH-'](image_data=image, image_size=(32, 32))
self.image_data = self.get_page_data(self.current_page)
self.win['-BTN_WIDTH-'].set_tooltip(tooltip)
self.update_image()
def update_mode(self):
"""
Update current mode of application, day/night mode
:return: None
"""
self.mode = not self.mode
mode = NIGHT if self.mode else DAY
self.win['-BTN_MODE-'](image_data=mode)
self.win.close()
self.win = self.create_reader_gui()
def run(self):
"""
Runs the whole application, inside a infinite loop unless user chooses to exit.
This loop listens for event and act upon them accordingly.
:return: None
"""
while True:
try:
evt, value = self.win.Read()
if not evt:
break
event = self.Event(evt)
if event.quit():
if self.close_popup("Do you want to close the PDF Viewer?") == 'Yes':
self.save_notes_to_file()
self.win.close()
break
change_page = False
if event.scroll_start():
self.scroll_page = True
elif event.scroll_stop():
self.scroll_page = False
elif event.open_file():
new_file = PDFViewer.get_filename()
if new_file:
if os.path.isfile(new_file):
if self.filename:
self.save_notes_to_file()
self.clear_window()
self.filename = new_file
self.fill_window()
else:
self.show_popup('No file found')
elif event.about():
wb.open('https://stackoverflow.com/users/11143190/zain-arshad?tab=profile')
elif event.custom_search():
if 'Case sensitive' in value['-BTN_DOTS-']:
self.update_custom_search(1)
elif 'Whole word' in value['-BTN_DOTS-']:
self.update_custom_search(0)
if self.filename:
if event.enter():
elem = self.win.find_element_with_focus()