├── .github
├── FUNDING.yml
├── ISSUE_TEMPLATE
│ ├── config.yml
│ ├── feature_request.md
│ └── bug_report.md
└── dependabot.yml
├── requirements.txt
├── README.md
├── LICENSE
└── guava.py
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | custom: 'https://paypal.me/karimawi'
2 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | blank_issues_enabled: false
2 | contact_links:
3 | - name: Discord Profile
4 | url: https://discord.com/users/609230785769111554
5 | about: If you have any problems, my DM's are open
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea or a feature you think is good to add to Guava
4 | title: ''
5 | labels: enhancement
6 | assignees: ''
7 |
8 | ---
9 |
10 |
11 |
--------------------------------------------------------------------------------
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | # To get started with Dependabot version updates, you'll need to specify which
2 | # package ecosystems to update and where the package manifests are located.
3 | # Please see the documentation for all configuration options:
4 | # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
5 |
6 | version: 2
7 | updates:
8 | - package-ecosystem: "pip" # See documentation for possible values
9 | directory: "/" # Location of package manifests
10 | schedule:
11 | interval: "weekly"
12 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: Create a report to help improve Guava
4 | title: ''
5 | labels: bug
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Describe the bug**
11 | A clear and concise description of what the bug is.
12 |
13 | **To Reproduce**
14 | Steps to reproduce the behavior:
15 | 1. Go to '...'
16 | 2. Click on '....'
17 | 3. Scroll down to '....'
18 | 4. See error
19 |
20 | **Expected behavior**
21 | A clear and concise description of what you expected to happen.
22 |
23 | **Screenshots**
24 | If applicable, add screenshots to help explain your problem.
25 |
26 | **Guava Version**
27 | - Version [e.g. 1.0.1 - Beta]
28 |
29 | **Additional context**
30 | Add any other context about the problem here.
31 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | ahk==0.14.2
2 | aiohttp==3.8.4
3 | aiohttp-retry==2.8.3
4 | aiosignal==1.3.1
5 | appopener==1.7
6 | async-timeout==4.0.2
7 | attrs==23.1.0
8 | certifi==2022.12.7
9 | charset-normalizer==3.1.0
10 | coverage==7.2.5
11 | easygui==0.98.3
12 | flake8==6.0.0
13 | frozenlist==1.3.3
14 | gmail==0.6.3
15 | idna==3.4
16 | Jinja2==3.1.2
17 | MarkupSafe==2.1.2
18 | mccabe==0.7.0
19 | mock==5.0.2
20 | multidict==6.0.4
21 | nose==1.3.7
22 | notify-py==0.3.42
23 | pip-conflict-checker==0.6.0
24 | psutil==5.9.5
25 | pycodestyle==2.10.0
26 | pyflakes==3.0.1
27 | PyJWT==2.6.0
28 | pyperclip==1.8.2
29 | pytz==2023.3
30 | pywin32==306
31 | requests==2.30.0
32 | tinydb==4.7.1
33 | tkextrafont==0.6.3
34 | twilio==8.1.0
35 | urllib3==2.0.2
36 | wget==3.2
37 | yarl==1.9.2
38 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
Guava
2 |
3 |
4 | > ⚠ **[Repository Archived] UPDATE 27th of August 2023:** A couple of days ago Riot Games added a new captcha verification system to their login auth flow, I went back and forth with some tools and libraries trying to find a solution to the problem that doesn't take a full year to login, but unfortunately the best thing I could find is captcha solving services which as you might be thinking are paid API keys that I can't afford, and still they take up to 20 seconds to solve the captcha, so until Riot removes this captcha thing or goes to a different approach that doesn't completely kill my login algorithm, this repository will be archived, I'm very upset writing this since I wrote a ton of new features and UI changes that were very close to being finished and now they're of no use, farewell, Guava. And thank you for using it.
5 |
6 |
7 |
8 | > ⚠ **Important Notice 30th of April 2023:** I wrote this program as a "fun" project to practice some Tkinter for our Python course at uni, didn't think it would get any attention or be actually used by people, so I didn't take the time to write it in an organized/object-oriented manner, it's mostly jank and spaghetti so, it's getting a rewrite as soon as possible, all the known bugs will be fixed, the code would be more readable and organized in more than one file, a handful of QoL features will be added like summoner details, login shortcuts, list reorder and much more, I started. Still, it's going to take a while, since I'm most of the time either studying for college or in campus, my free time is limited, but I'll try my best. Thanks for using Guava 💛
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | An account manager & switcher for League of Legends
built with Python using Tkinter, features a sleek and modern GUI and a ton of functionality.
29 |
30 |
31 | Features |
32 | FAQ |
33 | Installation |
34 | Libraries
35 |
36 |
37 |
38 |
39 | ---
40 |
41 | ## Features
42 |
43 | **Modern, Easy to Use GUI Where You Can:**
44 | - Add as many accounts as you want
45 | - Edit or delete them whenever
46 | - Import & Export Accounts
47 | - Easily Copy Account Credentials To Send Anywhere
48 |
49 | **Everything is locally stored on your device, you can take a look at the code.**
50 |
51 |
52 |
53 |
54 | ## FAQ
55 |
56 | **Does Guava Support Valorant?**
57 | Unfortunately, my pc (which is a laptop) is really crap, I can't install or run the game, and I can't do it without having the game even if both games have the same client, some elements are different, like the Valorant Riot Client is all red, also I would want to kill existing processes of the game and for that I'd need to actually run it to get all of the processes names, tl;dr I'll add it once I have proper testing setup for it, whether I upgrade my device or use someone else's, but until that, Guava just supports League of Legends.
58 |
59 | **Is Guava secure?**
60 | As far as the code goes, there's nothing malicious, you can check it for yourself or ask someone who knows if you don't know how, as far as getting banned in game or smth like that, don't worry, it's far from possible to get banned from something like an account switcher, it does read your screen and is a script so you'd wonder it would get detected by league and you get banned, but the image recognition part pretty much ends right after the main client opens, and if you want you can also set Guava to exit itself after logging in.
61 |
62 |
63 |
64 | ## Installation
65 |
66 | These will link you to the latest builds found in the [releases](https://github.com/karimawii/Guava/releases/) tab of this repository,
67 | you can then find the .msi installer.
68 |
69 | as for manual installation, just download the source code, install the modules and run the Python file.
70 |
71 |
72 |
73 | > ⚠ This project is made to work for Windows computers, it will not work as intended on any other OS.
74 |
75 |
76 | > ⚠ Guava is still in beta, it's expected to have some bugs, please let me know if you encounter any by opening an [issue](https://github.com/karimawii/Guava/issues/new/choose)
77 |
78 |
79 |
80 |
81 | ## Libraries
82 |
83 | GUI:
84 | - [Tkitner](https://github.com/python/cpython/tree/main/Lib/tkinter)
85 | - [TkExtraFont](https://github.com/TkinterEP/python-tkextrafont)
86 | - [EasyGUI](https://github.com/robertlugg/easygui)
87 | - [notify-py](https://github.com/ms7m/notify-py)
88 |
89 | DB:
90 | - [TinyDB](https://github.com/msiemens/tinydb)
91 | - [wget](https://github.com/steveeJ/python-wget)
92 |
93 | User Input Simulation:
94 | - [AHK Python Wrapper](https://github.com/spyoungtech/ahk)
95 | - [AppOpener](https://github.com/athrvvvv/AppOpener)
96 | - [Pyperclip](https://github.com/asweigart/pyperclip)
97 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Apache License
2 | Version 2.0, January 2004
3 | http://www.apache.org/licenses/
4 |
5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 |
7 | 1. Definitions.
8 |
9 | "License" shall mean the terms and conditions for use, reproduction,
10 | and distribution as defined by Sections 1 through 9 of this document.
11 |
12 | "Licensor" shall mean the copyright owner or entity authorized by
13 | the copyright owner that is granting the License.
14 |
15 | "Legal Entity" shall mean the union of the acting entity and all
16 | other entities that control, are controlled by, or are under common
17 | control with that entity. For the purposes of this definition,
18 | "control" means (i) the power, direct or indirect, to cause the
19 | direction or management of such entity, whether by contract or
20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
21 | outstanding shares, or (iii) beneficial ownership of such entity.
22 |
23 | "You" (or "Your") shall mean an individual or Legal Entity
24 | exercising permissions granted by this License.
25 |
26 | "Source" form shall mean the preferred form for making modifications,
27 | including but not limited to software source code, documentation
28 | source, and configuration files.
29 |
30 | "Object" form shall mean any form resulting from mechanical
31 | transformation or translation of a Source form, including but
32 | not limited to compiled object code, generated documentation,
33 | and conversions to other media types.
34 |
35 | "Work" shall mean the work of authorship, whether in Source or
36 | Object form, made available under the License, as indicated by a
37 | copyright notice that is included in or attached to the work
38 | (an example is provided in the Appendix below).
39 |
40 | "Derivative Works" shall mean any work, whether in Source or Object
41 | form, that is based on (or derived from) the Work and for which the
42 | editorial revisions, annotations, elaborations, or other modifications
43 | represent, as a whole, an original work of authorship. For the purposes
44 | of this License, Derivative Works shall not include works that remain
45 | separable from, or merely link (or bind by name) to the interfaces of,
46 | the Work and Derivative Works thereof.
47 |
48 | "Contribution" shall mean any work of authorship, including
49 | the original version of the Work and any modifications or additions
50 | to that Work or Derivative Works thereof, that is intentionally
51 | submitted to Licensor for inclusion in the Work by the copyright owner
52 | or by an individual or Legal Entity authorized to submit on behalf of
53 | the copyright owner. For the purposes of this definition, "submitted"
54 | means any form of electronic, verbal, or written communication sent
55 | to the Licensor or its representatives, including but not limited to
56 | communication on electronic mailing lists, source code control systems,
57 | and issue tracking systems that are managed by, or on behalf of, the
58 | Licensor for the purpose of discussing and improving the Work, but
59 | excluding communication that is conspicuously marked or otherwise
60 | designated in writing by the copyright owner as "Not a Contribution."
61 |
62 | "Contributor" shall mean Licensor and any individual or Legal Entity
63 | on behalf of whom a Contribution has been received by Licensor and
64 | subsequently incorporated within the Work.
65 |
66 | 2. Grant of Copyright License. Subject to the terms and conditions of
67 | this License, each Contributor hereby grants to You a perpetual,
68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69 | copyright license to reproduce, prepare Derivative Works of,
70 | publicly display, publicly perform, sublicense, and distribute the
71 | Work and such Derivative Works in Source or Object form.
72 |
73 | 3. Grant of Patent License. Subject to the terms and conditions of
74 | this License, each Contributor hereby grants to You a perpetual,
75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76 | (except as stated in this section) patent license to make, have made,
77 | use, offer to sell, sell, import, and otherwise transfer the Work,
78 | where such license applies only to those patent claims licensable
79 | by such Contributor that are necessarily infringed by their
80 | Contribution(s) alone or by combination of their Contribution(s)
81 | with the Work to which such Contribution(s) was submitted. If You
82 | institute patent litigation against any entity (including a
83 | cross-claim or counterclaim in a lawsuit) alleging that the Work
84 | or a Contribution incorporated within the Work constitutes direct
85 | or contributory patent infringement, then any patent licenses
86 | granted to You under this License for that Work shall terminate
87 | as of the date such litigation is filed.
88 |
89 | 4. Redistribution. You may reproduce and distribute copies of the
90 | Work or Derivative Works thereof in any medium, with or without
91 | modifications, and in Source or Object form, provided that You
92 | meet the following conditions:
93 |
94 | (a) You must give any other recipients of the Work or
95 | Derivative Works a copy of this License; and
96 |
97 | (b) You must cause any modified files to carry prominent notices
98 | stating that You changed the files; and
99 |
100 | (c) You must retain, in the Source form of any Derivative Works
101 | that You distribute, all copyright, patent, trademark, and
102 | attribution notices from the Source form of the Work,
103 | excluding those notices that do not pertain to any part of
104 | the Derivative Works; and
105 |
106 | (d) If the Work includes a "NOTICE" text file as part of its
107 | distribution, then any Derivative Works that You distribute must
108 | include a readable copy of the attribution notices contained
109 | within such NOTICE file, excluding those notices that do not
110 | pertain to any part of the Derivative Works, in at least one
111 | of the following places: within a NOTICE text file distributed
112 | as part of the Derivative Works; within the Source form or
113 | documentation, if provided along with the Derivative Works; or,
114 | within a display generated by the Derivative Works, if and
115 | wherever such third-party notices normally appear. The contents
116 | of the NOTICE file are for informational purposes only and
117 | do not modify the License. You may add Your own attribution
118 | notices within Derivative Works that You distribute, alongside
119 | or as an addendum to the NOTICE text from the Work, provided
120 | that such additional attribution notices cannot be construed
121 | as modifying the License.
122 |
123 | You may add Your own copyright statement to Your modifications and
124 | may provide additional or different license terms and conditions
125 | for use, reproduction, or distribution of Your modifications, or
126 | for any such Derivative Works as a whole, provided Your use,
127 | reproduction, and distribution of the Work otherwise complies with
128 | the conditions stated in this License.
129 |
130 | 5. Submission of Contributions. Unless You explicitly state otherwise,
131 | any Contribution intentionally submitted for inclusion in the Work
132 | by You to the Licensor shall be under the terms and conditions of
133 | this License, without any additional terms or conditions.
134 | Notwithstanding the above, nothing herein shall supersede or modify
135 | the terms of any separate license agreement you may have executed
136 | with Licensor regarding such Contributions.
137 |
138 | 6. Trademarks. This License does not grant permission to use the trade
139 | names, trademarks, service marks, or product names of the Licensor,
140 | except as required for reasonable and customary use in describing the
141 | origin of the Work and reproducing the content of the NOTICE file.
142 |
143 | 7. Disclaimer of Warranty. Unless required by applicable law or
144 | agreed to in writing, Licensor provides the Work (and each
145 | Contributor provides its Contributions) on an "AS IS" BASIS,
146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 | implied, including, without limitation, any warranties or conditions
148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 | PARTICULAR PURPOSE. You are solely responsible for determining the
150 | appropriateness of using or redistributing the Work and assume any
151 | risks associated with Your exercise of permissions under this License.
152 |
153 | 8. Limitation of Liability. In no event and under no legal theory,
154 | whether in tort (including negligence), contract, or otherwise,
155 | unless required by applicable law (such as deliberate and grossly
156 | negligent acts) or agreed to in writing, shall any Contributor be
157 | liable to You for damages, including any direct, indirect, special,
158 | incidental, or consequential damages of any character arising as a
159 | result of this License or out of the use or inability to use the
160 | Work (including but not limited to damages for loss of goodwill,
161 | work stoppage, computer failure or malfunction, or any and all
162 | other commercial damages or losses), even if such Contributor
163 | has been advised of the possibility of such damages.
164 |
165 | 9. Accepting Warranty or Additional Liability. While redistributing
166 | the Work or Derivative Works thereof, You may choose to offer,
167 | and charge a fee for, acceptance of support, warranty, indemnity,
168 | or other liability obligations and/or rights consistent with this
169 | License. However, in accepting such obligations, You may act only
170 | on Your own behalf and on Your sole responsibility, not on behalf
171 | of any other Contributor, and only if You agree to indemnify,
172 | defend, and hold each Contributor harmless for any liability
173 | incurred by, or claims asserted against, such Contributor by reason
174 | of your accepting any such warranty or additional liability.
175 |
176 | END OF TERMS AND CONDITIONS
177 |
178 | APPENDIX: How to apply the Apache License to your work.
179 |
180 | To apply the Apache License to your work, attach the following
181 | boilerplate notice, with the fields enclosed by brackets "[]"
182 | replaced with your own identifying information. (Don't include
183 | the brackets!) The text should be enclosed in the appropriate
184 | comment syntax for the file format. We also recommend that a
185 | file or class name and description of purpose be included on the
186 | same "printed page" as the copyright notice for easier
187 | identification within third-party archives.
188 |
189 | Copyright 2023 Karim Walid Mohamed
190 |
191 | Licensed under the Apache License, Version 2.0 (the "License");
192 | you may not use this file except in compliance with the License.
193 | You may obtain a copy of the License at
194 |
195 | http://www.apache.org/licenses/LICENSE-2.0
196 |
197 | Unless required by applicable law or agreed to in writing, software
198 | distributed under the License is distributed on an "AS IS" BASIS,
199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200 | See the License for the specific language governing permissions and
201 | limitations under the License.
202 |
--------------------------------------------------------------------------------
/guava.py:
--------------------------------------------------------------------------------
1 | import AppOpener as app
2 | import ctypes
3 | import os
4 | import shutil
5 | import threading
6 | import time
7 | import webbrowser
8 | from sys import exit
9 | import sys
10 | from tkinter import *
11 | import easygui
12 | import pyperclip as ppc
13 | import wget
14 | import subprocess
15 | import ahk_binary
16 | from ahk import AHK
17 | from ahk.directives import NoTrayIcon
18 | from notifypy import Notify
19 | from tinydb import Query, TinyDB
20 | from tkextrafont import Font
21 |
22 | cwd = os.path.dirname(os.path.realpath(__file__))
23 |
24 | configdb = TinyDB(r'settings.json', sort_keys=True, indent=4, separators=(',', ': '))
25 | db = TinyDB(r'accounts.json', sort_keys=True, indent=4, separators=(',', ': '))
26 | applist = list(app.give_appnames())
27 | accounts = Query()
28 |
29 | if configdb.contains(Query().running == 'true') == False and configdb.contains(Query().running == 'false') == False:
30 | configdb.upsert({'running':'true'}, Query().running.exists())
31 | elif configdb.contains(Query().running == 'true') == True:
32 | exit()
33 | else:
34 | configdb.upsert({'running':'true'}, Query().running.exists())
35 |
36 | url0 = "https://drive.google.com/uc?export=download&id=1CmELERq2Pq4zGi_oPDNwYOzy0R2x5SpB"
37 | url1 = "https://drive.google.com/uc?export=download&id=1YLJMURfcO4yPTxCW2lmhr7Pkxba8jM1D"
38 | url2 = "https://drive.google.com/uc?export=download&id=1SHejgNbp5LsFANrSffr4hCaaBtuPmzvJ"
39 | url3 = "https://drive.google.com/uc?export=download&id=1CZgsRY3BPtGChEWCwINiULvQO2yQKa4A"
40 | url4 = "https://drive.google.com/uc?export=download&id=1d66qqUIYdqWKCICTw8lABV2SoRPVb5sg"
41 | url5 = "https://drive.google.com/uc?export=download&id=1n774SKKjA8VtGZkYflb98UUs21QTwlnx"
42 | url6 = "https://drive.google.com/uc?export=download&id=1ktFA5obTGVxhRJ5vvIHfWUFB0WtmMAbi"
43 | url7 = "https://drive.google.com/uc?export=download&id=1pHi8rjcw9gOVLZX_RGwqmbrpOa3BzmCV"
44 | url8 = "https://drive.google.com/uc?export=download&id=1kC6IDFBEyZQ7URAvqGGEcN4s_gq8TEog"
45 | url9 = "https://drive.google.com/uc?export=download&id=18uT0ygBO46rziwWsBA-3MGnoDjZcMMHj"
46 | url10 = "https://drive.google.com/uc?export=download&id=1ihEH4AyRz-Xj2G1ZwZmEB-5NtKGBNC8W"
47 |
48 | # if os.path.isfile(r'AutoHotkey.exe') == False:
49 | # response = wget.download(url0, r"AutoHotkey.exe")
50 | # else:
51 | # pass
52 |
53 | # AHK(executable_path = cwd+r"\AutoHotkey.exe")
54 |
55 | if os.path.isfile(r'guavaicon.ico') == False:
56 | response = wget.download(url10, r"guavaicon.ico")
57 | notification = Notify()
58 | notification.title = "Installing Assets"
59 | notification.message = "Installing Important Data For The First Time, Please Wait!"
60 | notification.icon = "guavaicon.ico"
61 | notification.application_name = "Guava"
62 | notification.send()
63 |
64 | if os.path.isfile(r'Nexa Bold.ttf') == False:
65 | response = wget.download(url1, r"Nexa Bold.ttf")
66 | else:
67 | pass
68 |
69 | if os.path.isfile(r'Nexa Light.ttf') == False:
70 | response = wget.download(url2, r"Nexa Light.ttf")
71 | else:
72 | pass
73 |
74 | if os.path.isfile(r'Quicksand-Medium.ttf') == False:
75 | response = wget.download(url3, r"Quicksand-Medium.ttf")
76 | else:
77 | pass
78 |
79 | if os.path.isfile(r'Quicksand-SemiBold.ttf') == False:
80 | response = wget.download(url4, r"Quicksand-SemiBold.ttf")
81 | else:
82 | pass
83 |
84 | if os.path.isfile(r'playbtn.png') == False:
85 | response = wget.download(url5, r"playbtn.png")
86 | else:
87 | pass
88 |
89 | if os.path.isfile(r'riotlogo.png') == False:
90 | response = wget.download(url6, r"riotlogo.png")
91 | else:
92 | pass
93 |
94 | if os.path.isfile(r'error.mp3') == False:
95 | response = wget.download(url7, r"error.mp3")
96 | else:
97 | pass
98 |
99 | if os.path.isfile(r'notif.mp3') == False:
100 | response = wget.download(url8, r"notif.mp3")
101 | else:
102 | pass
103 |
104 | if os.path.isfile(r'success.mp3') == False:
105 | response = wget.download(url9, r"success.mp3")
106 | else:
107 | pass
108 |
109 |
110 | if configdb.contains(Query().copy_format_type == 'discord') == False and configdb.contains(Query().copy_format_type == 'plain') == False and configdb.contains(Query().copy_format_type == 'custom') == False:
111 | configdb.insert({'copy_format_type':'discord'})
112 | configdb.insert({'copy_format':'```\nUsername: %u%\nPassword: %p%\n```'})
113 |
114 | def centerwind(win):
115 | """
116 | centers a tkinter window
117 | :param win: the main window or Toplevel window to center
118 | """
119 | win.update_idletasks()
120 | width = win.winfo_width()
121 | frm_width = win.winfo_rootx() - win.winfo_x()
122 | win_width = width + 2 * frm_width
123 | height = win.winfo_height()
124 | titlebar_height = win.winfo_rooty() - win.winfo_y()
125 | win_height = height + titlebar_height + frm_width
126 | x = win.winfo_screenwidth() // 2 - win_width // 2
127 | y = win.winfo_screenheight() // 2 - win_height // 2
128 | win.geometry('{}x{}+{}+{}'.format(width, height, x, y))
129 | win.deiconify()
130 |
131 | def findapp(appname:str):
132 | appname = appname.replace(' ','')
133 | applist = list(app.give_appnames())
134 | strippedlist = str(applist).replace('[','').replace(']','').replace("'",'').replace(',','\n').replace(' ','')
135 |
136 | try:
137 | os.remove(r'apps.txt')
138 | except:
139 | pass
140 |
141 | with open(r'apps.txt','w') as apps:
142 | apps.write(strippedlist)
143 | apps.close()
144 |
145 | with open(r'apps.txt','r') as apps:
146 | finalapplist = apps.readlines()
147 | apps.close()
148 |
149 | for i in range(len(finalapplist)):
150 | if finalapplist[i].replace('\n','') == appname:
151 | os.remove(r'apps.txt')
152 | return True
153 |
154 | os.remove(r'apps.txt')
155 | return False
156 |
157 | root = Tk()
158 | ahk = AHK()
159 | ahk = AHK(directives=[NoTrayIcon])
160 | root.geometry("401x501")
161 | guavaicon = PhotoImage(data='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')
162 | root.configure(bg='#2C2C2C')
163 | root.title("Guava")
164 | root.resizable(0,0)
165 | root.iconphoto(True, guavaicon)
166 | myappid = 'karimawi.guava.version.1.0' # arbitrary string
167 | ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid)
168 | centerwind(root)
169 | root.lift()
170 |
171 | sidebar = Frame(root, width=73,height=501,bg="#1E1E1E")
172 |
173 | #fonts
174 |
175 | font1 = Font(file='Nexa Bold.ttf', family="Nexa")
176 | font2 = Font(file='Nexa Light.ttf', family="Nexa")
177 | font3 = Font(file='Quicksand-Medium.ttf', family="Quicksand")
178 | font4 = Font(file='Quicksand-SemiBold.ttf', family="Quicksand")
179 |
180 | #fonts
181 |
182 | #root assets
183 | accountsicon = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAIsSURBVHgB7VXLbcJAEF0buNNBnApC7nzsCpJUgDsgqQBcQaACoILQgW0Qd0pwOuCOgLxnzaKV5diAcyASI9m7zAzz5m+l7vTfyTpHKQzDZq1W84/HY9OyrKTb7c7ydDzP25bZKgVcrVYDAI0z7GS/38O+l/DHcrn8wvFq27bfbrfnRfbsIuF6vW4ZYAvcAzwJ7g4iDhmVyGK+DofDDDz3akBEMeRJIKTxrdfrjfA8ghUJ6CvlkI2hM+EdvP7VgKCWeL4wmTAey+mcDNm21nFUBcBEzqbJROM8yLk1nHDUGVQvEjISGHWRpikaI2g0GtFutxtA5FOOlKdRoW7MxKf8rbBpSrsUQCEON8eZgDUVnbRLwZuD56sqgGLQx9Fn2hDxBpFNMBKRliNCB0cLvIW6NSqMkHNWr9c5i47ZFIySDdPpdCL1F4DYLi4AOIOuKqYET4QUB3rrkKQEUzg1glPBr4CyM9ltvsGOaBgOfJ/+ZFlPUs+WoffBBSCA70q6VlZglAuoOxLGOF8TDPy4aCGzWTDwIwD3s6BxHJPPLHHvPms7VjYN3JUA8swUlZER0VaMJ5kATiNkbpp0b8Kr4BIwkuxSDnyTXwzNZ23FZk/zUkDZ+g49zPvWnUP8Usj1RfOkdkylq78serU5fLF2zL26jlKDiOa0d6VMysDYaEB2YQJlMoeqGkV8yX6d8k7biHaTOqS1pON8VYG4DFC3me5IRsjxYbov7Ys73S79AJnXPFtRQT9GAAAAAElFTkSuQmCC')
184 | addbtnicon = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAACkAAAApCAYAAACoYAD2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAALTSURBVHgBzZm/btpQFMYPBkFG3qDuxp+BdEDqVmfrVgQPkHTsVPUJIFtH3qDpDog8QZ2tEkOTBcTmRyAjEn/6fdZ1ZIIdfOEC/knI92Jb/nR8zrn3HGdkTxqNRtGyrEYmk/mE6eV6vS5ibAfnMfcw9zD0MH5YrVbucDj0ZA8yOhcrYTd4+BdMHdHHheDfg8HgTuemxCJbrdZ3HDr4FeVwaN3bpGJ3ioT17Gw2+0v2s9wuvOVyebXLDbJvnYT1rvF6hxiW5Dj47lMul+eTyeRv3EWxIpvNZhu+18XwQo7LBZ7zGUIFQh+iLogUqQR25ITgeU6c0C2RDBDc8FPOAIVWKhUPQp82/g9PVJD8EzMRvC8zBNOHcDBZ4bNw4j9yXoGkqLLJCy+vG37IJH0j6cCGfz4HER+2ZFsMsFgsZD6fy6HAYG2ucBz7IpUVbTHAeDyW6XQqBvBzKAe+SAi8FkPQiiYsSdQeQSxGtBxnyTOBozY1liMphttBS+0HUwv10SdtSTeXFvZ1tqSbYk439TBymWJ2RfBoNIr8v1AoSLVaFawqkhDbEk1yuRzrF9kX3suEr/VM0YQWqNVqsecDC9brdTEFfdKTdOMxBc0k3XgW6uEnSTe+JV1JMWws0JJDSTHsfFjYptMnXTFEPp/3f4bwWzN+CoJJ71kEiQFKpZJOon4TtmR49JM5THqHg5Eo54rChG8AL2jD+CL5ymHJW0kR7BUF442SFjU3q0VHzo/X7/ffB5ONtRv17lcx9NoPgHX3VfiPDZGMJJj5h5wRut3rLttWGKLWfcRWim7gyImhwF6vt9XiicwVKEvdUwtVAjtR52ITmhL6jOFHOW77bwYX+4ZA6cZdkKjTyx6RqebBK1wG665Ob+KeObscOLQNiZ2p19tNcrHW1weiWjLseDiiD78+3HOFU3uGRGiLDFBu4Kg1/x2rzojvOBTyqL7jDHWEhfkPKEMpFL4ok8gAAAAASUVORK5CYII=')
185 | addbtniconactive = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAACkAAAApCAYAAACoYAD2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMfSURBVHgBzZm/b9NAFMe/70Ldoa2UicKEGZAYnXaKitR2rApq8xe03UG0G0xJNjaQYCf9CyiCNmxJRX9sxGxILN4QnSoBA65yxzuHgJ0mjp04jT9S5OZyF3377v24eyEMyJualTUyWEdGLALK4qEsv0zfFIcIjlLkAPLQdVEvLNsOBoDiTNbCJiewCUFrSmEJMWHRdaXU7uqCXYm1LurEDyfzj5tSlnhFFsPjsPXLUcX2FVmtWaaapNeDWC4Cjuuq5X5uIMI+rJ7Ob8gJaoxIoMY0DGocnFjbYZN6iqwezxWllJWEtjeMLAfX8+rpXLHXhK7b7QmEKuGKEYJKK/lP5c7xSyK9AFHyBcaEEGpzJW/v+scCInWQaB+8gi0O45yDKecPpoBPSoNqYxaoyU5yNvEP/BO5f2xtIlgxxobOJv6I91mSikiAXz+a+P7NxbBwxBd1hdN/eyKTtOLDrS94+ugrEiA7oUsw/ookRRtIiDO2YhKW1HBKWvOeXtmjkVWUodC+qbdcSCOdAttkDKzzduvzYHrJAIuClDKRasgS7I8m0k2W9o9zKs4KHblPOMWcDRjBszcNvKzcxdR0JvIagZhMz/CXx/q3OuC1PznhxyG2JfuxutDwnvy9SAptSQfpxhGcMM+RYjiwHbak+owUwynSESRRR7o5FG4Te0gxrkBd8DH9nFRy1rx+w8Asv5KA/bFeyNvONf2Gb4ZvCbSEBHj26g6mYyTqMNgfvQuZl8wvLlDhRyJRrivK1EwiIp12G8YTqbecG0llpIr/egJX2oOjXC0lB2C2YuN2+02gdlNGbQFjTu5cXFyhlv1DAZHcOXB41g7GiOJtLuSDXbZLpyDtrFKOxz85y5Tv37MvtXh69ifffbRKfFtL5C4eBS3wwYJd6vZZaBP1/ZG1TeQJHV3rRR9wSO2EdX37d3pPuYkluUc0ghYMn8DqFxysnT7YSeSeeavL4VnVxLCw9VQP/+tGrF8fNFos92k2aIB8qi0nuAT/nkKlkLMjp7rYItu03ABLrX463aLWrdP0TXH0gZp92kaTf8eZwV4cYX7+AANgMwsKI6rmAAAAAElFTkSuQmCC')
186 | removebtnicon = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAACkAAAApCAYAAACoYAD2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANFSURBVHgBzZk9bxpBEIaHA9mWJVtEcmWKQBegcbp0OXfpgoDeuEyV5BcYd+nCP4jTA8K/ILhLF7uBkquoQDoXFCABeee0i47P210+H8m6XW5P93pmdnd2LkSGZDKZqGVZmVAo9BHdq/F4HEU7Lu+j76DvoOmg/TQajeq1Ws0hA0I6g4WwAl7+GV2b9KlD8O9qtfqg85CyyFwu9xWXIv6itD5s3XtVsYEiYb14OBz+RWaWC8IZDofXQWEQXnUT1ruBe2tovqPt4IVPMpnsN5vNv8sGLRWZzWbvEHslNE9ou5zgPZ8glCD0adGAhSKFwCLtELzPXiZ0TiRPEDzwg/YAC02lUg6Evkz97u+ISfKPNjODTXExmd77J5Plv4sg/kP7FchExWoyYeJuxCEv0gU6DOKIz1c54yfuhsiWf1vTodPpUL/fX3jv+PiYLi4uyAB2ewJudyNCYMFUINNqtVbeNxTpraG4ljyREHhDa5BIJFZa0hSRI5RCYka3VB9c5VpVdEIALn8TgUlt0iDItaqoiuR0MCLyQWWka9vttte/vLxUes4/XicEWB/HZJw0kBbodrueWO4HvVT+UzwuFouRJlcW8ro4bQCOVf5b1l+DaGSdpcePjFVp6dn+GsQtMuTo6Mi7DgaDwLFyjHxGF2ORu4Rj0qHDxrEQky4ZIGe0ysIuxxi627FwHn6hw8azZJ0OGC4sRGDJ2mySqYJ0nXQl70R+/H05xiTZ4MqHxfka2nVaE14P/WvibN8QrzTjpWow6SMfgnSePj8/97Y63h6DkGNOT09JBy7J8NXLzLnGI9I1rfMN7yqqWx9bdTYkAnAqlUpiIpLJ5/PfoPwnaeK6LvV6vZVj2OpnZ2ekA7TcylrR1JEWZ24+Ldq0fyZWZKa2RWTBt7gYLe4bhA9g1/4fpkTyTIKZv9MewQS+n62yzZVZcNZ9TqfTHAY27RgWWC6X50o8CwtWjUajvmuhQmBx0b2lpT8h9BXND7Td8p+LEPuCiVJaNkCp0ss1ok1l8DPUebIGVXqVa+Zc5cDlbkNiXeHekspgra8PjCjJcMXDJn3468MjkoYHkTMooS1SIsLAFnv+Wz51LviOw0KexXecmo4wP/8Byn5vdk8tMgEAAAAASUVORK5CYII=')
187 | removebtniconactive = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAACkAAAApCAYAAACoYAD2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAO1SURBVHgBzZnPTxNBFMffbMs28UdSNaH0IkuMR80WTg0mlIQLoIFe9QDoHyA9c6A9cC5/gcDFqxiFesC0hF+eZL2aGFYvAokGLyasYcc3u91mt7TbndlC+STNZnffkm/ej3kzDwKCvCmrcTkCkxCRhgCoio/i+FNcJjohoFNKdABz0zCgkh3WdBCA8BgzYbEumAaJTFAKGeAERVcopSvjg9oy13dBDT/sDrw8M808fhGH8Ojo/UJQsS1FlsqqQmNkScRzAdANgw63SgPJ72Vpb2DK7CL7FySQocgy2V/fVWf9jJqKLO30z5umudym8PoRx+Iqlvb655sZNAy3JRBoHi4ZSSL50fTnQv3zcyKtAqHmInQISaLTo2ltxf3MI5IVCcvBSwixHydYTCl3MXly0pRJucMCGfEYribuBzWRazvqNHg7Rsdgq4m74mvhXttJHYCgyI31X3D002j4LpGUYWTsDgjAwt6HYT+J2gLDebG48MP3vaDIeBdrwQCLlkhCyRTl6uJecnO96MnThu8SyRiIgkvSBF4WiVXRMjkI+qFfaIPCkwIY8ltRU+Zrea1CG5SgIiMyTGK4rf0gBMUJ7etXh9b90+c9gb5z2/OkQARgKEooVXjycWTstnXdKP2GYww78wgLnx8sPZhIZvfsRRL4IKqEAhVoAyxX2a/ZfQjirLoVaANOrjq5Vn8fAkUCQRI9doiPA1T60aFt090jgwjCIi8TJlKHq40uYTM/AQG6qxV9dHja0va42o0SAuHGwtbRk/QLXGFwidQlYkIFrjabUeMMVnESscT7pRM6p4+zTuTGfe/YdCf5w21IUImy/dr6dqqCsc9ACJxO1OxeBNRUyaY13dqq4cnwLQGS4fkDD/tvWq3uI7bHVmxUbe7dvwY8YD5aBzKra1vDJ3u7xnW+KS58x9bXWiSDdZ7c3F3gQB8f3O+riWS831ZnCSFF4OTT1h/49vWvrw3z+oPUDeCDzjizIs/+B3OzHDY320TNiwxPWyQROoMXocW9bWBzMSQ67H7kEYmTAx2tctBBKI4Es2nvlO3cBoPlgWnSAnQAXGUKjx9p50Y8Tffk77bUPJ7Wmk662g0T+GRQyzd653twqFY8E3pxoxe2wSE05zf1bT3p3cMjr4kzogsYweAOrPIPi7U+B+sJfASzpxyWVxUIC3qPNsm/RnDPLZhYnMxOEYH1lHlOwhZ8eh2Wsykt8FInPFyx0wAy9jyd9BL71Km4THS2ocac1uAM/49zE1Z5hLn5D/AEd/CQzLybAAAAAElFTkSuQmCC')
188 | removebtndisabled = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAACkAAAApCAYAAACoYAD2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANuSURBVHgBzVm7UttAFL2WzRtmnBqYiC6lUwDuIjo68geYMlWGLwjuUvoPgD+AL0B0BoqYL0ANDCUZZhgbBpxzFK1HtiV7d/08M8t6tSvpaO9zLxmxRKFQyM/MzHx3HOdbs9ks4FIezY0tCXA9wHzw8fFx+fb25tdqtUAskDFZTGK5XK6UyWT20DwxBEj76E5vbm5ODG7TJ7m5ufkT3RHI5WVwcJfLumT7ksTuuRDrsc3OaSB4fX3d6acG2V6TW1tb+9CpMxD8IqNBPpvNltbW1hr39/fVtEWpJEHwF7oKCM7LaMHn766urgqIXiYtSCQZETyS8cJLI9pFkgaC3fstkwGJBiB6G7/YZjiRkfwZkgXb4gnG9DVuTE58dnZ29mLCBAkGieP4hZa4IWY66ZJMAcDDhcX/VRbfEjeM5U7aw5o2Go2GvL+/J87Bxcjc3JxYgGLfgNifchxxF20JEs/Pzz3nLUnmcV8JfSUkCYe9jzAltlheXhYkEYlzeLbYAs/cE/pqWjQM5k73xl6i1YWJCkDkn3KwJE8M0E+0utAlyXQwF+WDogsl2peXl3C8uLiodV98vYkKkB910hUDzM//D+X1ej0ky3G/l1I9SJLrdD9KAe8oONhFV4YA6ipb2tgWDC7GO5kGpatK1zrHA8C19g+0UELH0pV7UveYwt6JjREkGch0IyDJJ7GAEl1apIlDqYSNuMNjMfpbmWLw3O5EZ+GpBQsLDioLZ2IB5cCVKBmJ2BTiY6USNskGVMR3mK/BYfoyIBh5VDRKGtuAUq5Wq0GYqmE3zvGVnskDEPjDnuGxH9QaC8M55Z8wM4+KT3em5xtGFd3Qx8izsrIiBgiur683+CP8tMfHx/r6+jrftmvyFL4YBaxwh7izaY1JxcLCgsmjKerDh4eHGn+3HWm3t7cvMOnJ5NHaRaLN3CDuA5C0cu7DAt8P+9iJX2sjSUtCdygTBAiWIx4tdJkb9QClDqqBJ+NHGWLuKvEk+gQcyv0JECXBo6SJVMdFoqwiQEeKoyz/RTbwA1XfStqavpXeYrHoIqxdyJAy+DgYUeC+Djp1sBMmNXPWili3dGVARBZcvrq6quisN/rvA0GyUcXDE0Nw59DOkXic+L6v7eqMSSpQDRDzPRb80T5Hp043tiRAY/JSY7q1tLR0ZkIsjn8pJ3nV5Onq/AAAAABJRU5ErkJggg==')
189 | editbtnicon = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAACkAAAApCAYAAACoYAD2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAPTSURBVHgBzVnNTttAEJ444V8I58Sx5oAUQEL01lvNjVsjeADosaeqTxC49Zg3KL0DCk/QcOutwIEfgRSLA1IlfsJ/gyDpfKt1ZCd2vHachE+ydm3vaj7PzszOjhMUEdlsVtc0LZtIJD7y7VytVtO5b9jv+d7ie4u7Fvd3qtVqsVAoWBQBiTCDJbEVFv6Jb00KjyIT/rm1tbUeZpIyyaWlpa/crPKlU/uAdtdUyQaSZO0ZyWTyB0XTXBCs19fX+SAzSLZ6ydpb5uUtcDdDnYEwn6mpqcrh4eFvv0G+JBcXF3Nse3nuDlJnMchyFpgoMdEdrwGeJCXBVeoiWJ7pR7SJJByEJ3ynHgBEp6enLSa653ruvJFO8ofi8eCoKLMzvXc6k+Z8y0b8i3pLENBlNKmjvtxshwjSK/Q2YLB93tge79RkjjqESqVCJycndHR0RI+Pj0pzWGE57HDoC01G0SIEPz090fPzs+sCUqmUa9zx8TE9PDyI91dXVzQ2NkZ9fX1BIhCa/kKbKcl6mRQBTZydndHd3Z3vmNnZWRoYGKgTRDs0NEQjIyN0cXEhNJrJZGh4eLilLJkj5BPSo0ukAKdQnuMpBM8nJyebCIIUNFwqlQRRXdfFuCCwp6dT7NEmKeL8/FwITafTZBiGa1n9PsZJ8OXlpW6TLFxJJtJBTeaDSoBQYHx8PBJBPAfJ/v5+mpiYIBWAH7zboJigShDPYbOKmNM4rzMoBnSIIKBrzpT/DRIEDI1igCpBeL5t12HQNkmQgGCbSCsNnp6e0v7+fmiisEmL2oC9yyBmqi6xPUcRVoptskxt4Pb2VrSIe9if7+/vBdE2bLCZJJ+H9zhgzlFE2MHZuU3GSBAQmixyR3nvbgR2HzgECGHJR0dH4yIngMICNFloTDLDALsPrk4BlQ+N03TYZFFlgr0VRgkjgO0w0LwiRGlGSGWVbuMQFDQDmcv19bVINADVZYUjXV5e1kNVUIpmAyUZtOIghgxYpmuB5xs71YoCaHBmZkb146zNzU2RhQi9cxL6jydjDReCZsJRIAQhB63qhXnIfFS1z1r8xln5LvquIy2fuXFaNKn3qGsRcG2LrJ3P3LQV3GMAzt3zzgcukvAkqJl6CHbgtcYqW1MsgB2wfcIMTOoyQHBjY6OpxOMZsA4ODordJioJrnq9842qkugNdz9QZ8t/ZTaxL+woeb8BSpVe1IjiyOA9UISzBlV6lWvmqHJwk4uJbFkub15lcKi/D4AsySBrMik88Pdhm5OGdZkzKCE0SRvSDEy557/DqdPjPw6I7Mr/OIUwxJz4D8RcNU2wlYoUAAAAAElFTkSuQmCC')
190 | editbtniconactive = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAACkAAAApCAYAAACoYAD2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAQ4SURBVHgBxZlPSBRRHMd/b3YdMY32ktnJ0TKCCNa6tBilx+iPCtVV61yUnawIVyLqZlGnoNJDnYKMyu0guOK/m05JJ8EmCPwDhpESbuy8fr+3usysuztvZnfcD4x/3r7hfX3v9+/9ZOCRdyPhkBqANggopwF4GIdC+GiWKQZjYHDODABzNJGAeHuLboAHmJvJJKy8DDpBYa2cQzO4BEXHOecDZ5v0flfvyU78PHn8RtI0o/hGCArHwN3vlRXrKDI2EtZ4OXvlZeckMBIJ3uJkBkq+D2NTxzvMMjbjk0BCU1U2MzQZvplvUk6RsYljPaZp9hfpePMRQufqi00d68k1IetxC4HAo7DDKAqLnolM92aObxMpHISbj6FEKArvPBPRB6xjNpHkJGSDO3DE+VhFZ2q0OpPNJk2VjZRYIBEqx2hiHUiL/DQR7gR7xigZFE2sHm/ZSdYDPrG0kID73fPQfW0O5uf+Sr2DHt9DGY5+DtIXL7tIC9OTyb79qnis87qvz8Hy5lwS+uhZA9Q3VDgtESqjFAzwWIhknHVwyQRJO/H8yU+YnVnLOefl2yNCqFVg/cEKqD9UAcNDv6SFYkhqFSKFRzO5jCKO7fa8WLSyKpB1ERrPJpBEVe4OiDkk9PWLBbj3qD7vemSbdORBU5VPeW9eLohFT5zaA7fu1KYXzfbHZBO4/ieZtsn1taTUmgEV2tBxqB6UY8sG2y5VexJI4yRyX40KXXdrQQZc5bTCONegSMgKfIjjVufKDwsr6DAaFAF/BApCFCc1KBAfBRKaAkVAVmAVen622OpEwSJJBAkkIU47SOHr6sVvroWSSAMKYHlxQ3yvw5gpe8TL7kQaQQyYq8zVndHO1+lU5qG4R/l5Vl8TQguwQRvo2AamRf6F3Bw8shWcrWmyWAIJDJFGkJkQx4jZAR6JnAqJVFiDguoadsHRxqqiiLMwGkwkYRA7Ea/AI62X94rHLxIKxBUs01cZx92UgEIIsbTpLG5ZWkw5zK6qgNR8tMd4e0Q3RKmGN8P3DFiz00sn8Ginxn5jobEofq+uKQcZyKmGYyvpUHXgkGMtKUB7FBcy4dei+aSy7wDO95u+Bz9EqeUFst2n/YdlbdY42zRTlxZJfBwP32SM9cm8TSKHh1bADQcwjl64XO3CqfiVrV6RLUIOjTeOcOZbS8UN6V0kbGmRBfgV/LYKpQSTS0LhLdYhm0jsHBg4qwtKCMeWYHvE3mXbVmCQHZgm74USgFGm99xJfVuLJ2fW/jAWjuJtzbe7eCYk8HyTHs32Wd7SYtPjSah/rRe0QQyIXfm6vs6d3im88prYI/KhBYMVWPwfOmumDWYiXaSluhxiVzUoFNw9nsP+suG6kiSx2KfpYB7iKe2cgil4oxL62xt16VDnudxNmQE0p/rprJalbp2aZYqRKqiZDkn8P85uGHQjzMp/GIsnGBBGlAsAAAAASUVORK5CYII=')
191 | editbtndisabled = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAACkAAAApCAYAAACoYAD2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAPISURBVHgBzVm7UttAFL2WDZjhpdACE6VL6RSAu4iOjvwBpkyV4QvAXUr+APgD+AJEZ6CI+QLUwNBhw8DEPHPOjtYjv9DKknHOzCJrH9qz97m7ZKRPFAoFe2Rk5IdlWd/f3t4KqLJRnFAXH/U+2v3X19fjp6cnr1qt+tIHMnE6k1gulytlMpk1FFdiAqQ9PPbPzs72YgwzJ7m4uPgLj22QsyU5KOWyKdlIkpCeA7Xu9iM5A/iPj48rUWaQfa9xaWlpHTZ1AIJfZTCws9lsaX5+vnF5eVnp1aknSRDcwmMHBPMyWPD7q3NzcwKix906dCUZENyWj4Xbi2gHSToIpPdbhgMS9UH0PFzZ4jiBk/xJyYP7RQ3O9C3sTFa4dXR09GjIBAkmid1wRVPdUDODdEn+A4CHA4+va4+3Qg1bMiC8vLzI7e2t1Ot1eX5+NhqDYL/FDCeaJKUorXk3EsjHgnzcUUionSDJwc5Uewyi9tjYWIk/coqpZa2DuclANcH9/b2asBdmZ2f5zSZBLghBW5D3pdFoqLqZmRn1/h4wbk0Yq+nRcJgLMUB4UphH10lYPz093UHQtm3Vdnd3p4hiTtUvCtDApxw8yRVDPDw8qEk5wdTUlJo0ajFhgtSWVrWp5oLtoPVdDMFJifHx8b4I1mo11U5TmJycFBOQHx3HkZRgSpD2yHYT4FsFCx9wJAUMgiDB5JKKJAdFMIBjSQowJajDUlwkJklvJUESiJIgs87NzU3TAeOQ9CUB9ISMmaYqjilNn9G4JgmgMw/JUVJ85+8ENtgCdSzG81wSQAdnkmN+TpMgwXN7jmdhqGld+gSzD9VMQix8J8m0wIsFCxI4kARg9mEOnpiYkHw+nypBAgv3LGzTa5CEZzJAp8K43qmhHaZXSm0HtVypVJTjcPAhJOBGDaIqaXfcqhGmUuOiuPPRoSpqixbCPv+oJQWXTxcm5xu91eoHlCBjqaFD+aenp1/4Q/W+vr7+u7CwwJlXo0Zit6ykQS/WzmJSOI47H1OPx/c3r66uqmpx4Ybl5eUjNLoyfDSlSLQYFdSxAZKJgntScH5oaiVc10KSnoTHpgwRIFgOeDTRYSC0A1x10Axc+XiUoeaOK56uVoxDuTcEoiS43a2hp6uRKG8RYCPFQV7/BT7wE7e+O736RIb+YrHoIAgfSYpnIQ1mFISkjXYbbEecO/NScBXjSEIEHlw+OTnZMekf678PBMkGNx6uxAQlh3KIoL7neZ5xqItNUoNmgJzv8sIf5XNw6nRCXXwUbl6q3G5hl3QQh1gY/wC+zk56bxi4QwAAAABJRU5ErkJggg==')
192 | copybtnicon = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAACkAAAApCAYAAACoYAD2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAOlSURBVHgBzZm/TttQFMZPEgsQCGQkBAgEdQakAgvdutVs3RoBO3TsVPUJgK1b8walO6DwBA1bt8ICSAy1QCCYCEIgBfGn3+deW05x4mvHCfykyNfxdfz53HvPPeckIwkpFApmNpstZDKZdzideXx8NNG2vOs4d3DuoOmgvf3w8FAulUqOJCATp7MStoSHf8CpLfEpQ/CPzc3NtTg3aYucn5//jMMKPqY0D627qis2UiSsZ+Vyue+SzHJROPf397NR0yDX6CKst4jhLaH5WlqDO30mJyer+/v7v+p1qitybm5uGXOviGaXtJYuPOc9hAqEbod1CBWpBK5IG8Hz7HpCn4jkAsENX+UZoNCpqSkHQndrvg+eqEXyW9JZwUmpYDG9CS6mbPAqJvFPeV6BxFTexMcfbsxDOukleRlYmJ+X3or3hxsi/wS3tTCq1aqcn5/Lzc2NRGGapgwPD0sTcNjzGPaKoQQu6Qjc29uTu7s70eHq6krwEBkdHZWEuD4Ux6IrEgIXo+6gBSmwv79fBgYGBPOmbl9a+ujoyBXaDCpGKBpc0aKx5XlDPDQ0JL29vdImbBXUZG1JmUZWjgvDQUPFg6nS2dnpTonu7m5pFurjnLQkZWjJfD4vKTFjIK6zoFaahav/5OREbm9vG/ajlUdGRtyjJqYR5Xp0iOOeuOL5mZ6e1p27liEpcHp66rsnrv5G0DXRU5ydnWn70FRE0pJExz1R2OHhodau5WGorM6K7Gj8e5/gjyfxl94QczfSxOGcrOj0pDu5uLhwh8uD+/PExIS0GMdAPrwLhzkT1ZMrkm9/fX3tf9fX1ydtwLVkGY3IvZuMjY1Ju2FhIQtLluQFw8pHlvEa2mV5mbilGTd9gEm3JAV0Y01dWJLh0fUrMOkaXMOyJMxvuPK5i9Cpe64qDL7E8fGxf08EjleGcX+RQ76wsLAK5d8kAXTidE/0oQcHB5H9Ozo6Incm1oq8dk1kgZyb2aItCdDJf+jIe3p6ZHBwsKHFgbOxseGHUTU94Qc/Js27GdWMj49LCjABmw1+UZN3cyXBzF/kGYHfXv2/yvYkVkKuu4MwitPAljZDgevr609KPKEBHWLDcruFKoErYdfqRp1K6CWab6W15b8KptgnLJRivQ5alV7WiNKI4EMoc7FGVXq1kxtWOXBYTklsRQ1vUadz7AxMlWQYNdkSH/77sMUdTsUMWiROE9U0sFn4xOkrlXVa3nUV8VPIjvofpxRHWJC/T4aZo/PlhasAAAAASUVORK5CYII=')
193 | copybtniconactive = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAACkAAAApCAYAAACoYAD2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAQsSURBVHgBzZlLbBNXFIb/O3YmIg9htSoQqRKTVEHdFNlhQ0RbiNQuoK3iLGilZpGkiF15ZIeEEI5YwI7nCgSYBUiwITzDLkYQssNGbBAhMAtQIKsgIIiJPJdzxtiMk3henmA+KYoyviP9Pvee/9xzIhCQy6PxmBpBEhFlIyDj9ChGP5ptiS4EdCmFDpi3DQOZnq6cjgAIP4tZWH0d+qGIbimxCT4h0Rkp5bk/NuTSvt7zuvDWvXW78qaZojdiqB6doj/kVayryJHRuCbrxdkgkfOAbhiyy+0YKE4fjoyv6zPrRHaJBDKaqorszXvx3U6LKoocGevYb5pmOqTtdSJGyXV4ZLxjf6UFi263JRAyhS+MoojU5s77Q/OfLxBpJYg0j6BGKIrs39yZO2d/ViaSk4TP4BfYYidmKJkS9mQqO5OmKkZrLJCJ1ZOb2B+URN4Yi/ejvGLUDHYTe8aXtvvGWOIZXES+mjJw9dI0Jifew431vyxH8p8VqALe9lba9ploQaB7FFngjoFHePcmDy88zL7Fu7d59G5rQUBidVyCgSOWSCFFn3SpPVcogixw/a/L8fuWb9HYFKm4dnJiFqeOvrCEVgNZUrcl0spo4V5Rnn7a4uTWFfipo8lxrUQ48NnkS41iquGXvCaHKPsloiJJ223dBxEmK1tU/LblG7S1N6Ba6OtujAopNenrVukOn9fBvasRDiIeJYEaQoCz/8LpKbx6aTiu4yj/+1+L9dsjMc5uDVXix54eZgv2dDz9o6ND2NCiCIELZ6ZK9pT829nATx59bjnF8MVpzx4aikiOJGPZU8LZnnq3rcKBPc9KluYFFqnDw5YXbWXyyWzJC9a6+OViNDQV4sLVyCN6lAxzRnjI7tY1yzB+57VVSYpwfd53qA1LCSW2Tl9LPuA0d1vcSxk5S99+8vHnbVrb0YylhixSjwoTGXLMPi8vbN/5PWrAbcXIYxhfMYaCjML3NSEpml8hdB4zPZ053bqZU2d4BSHgI2M9QefRasgsP5ibQ1pVwX1voP6mrX2ZVUXOk6k3OFQR/hInjz0vveOCXhzDlMzn+t34biHEYQSAzXzP/xOYdqnbRVauUnHwRLtL/ZYDC0QyN+8mRqUIdr/00v9wrf5hTQO6t36HxmbHuk1RzLYW/ygriyIiB6RJfXeAbeeobN8VgkVRcTEissv+qKzvpsmBTqsGUUMkjQR7OsunbAsGVnwOTFMOoQaQywz9+XNuwYinYtW+dieeom6t4qQrbFjgXxtyqcU+c7xafMr4wNbkCTqDZIiDTlNf90nvOLW8Js2IlmAEQzewzBwl6/wzOB/PLVhhymFFVUO1UPRkhfO3GL77RBZLk9k+EcBPOXIKleAPjUj3JHIzXt8L3MwWjgE2FebpYrUodJ2abYleuFCLHPL0f5xmDPsRZucjAK6koDNsxFoAAAAASUVORK5CYII=')
194 | copybtndisabled = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAACkAAAApCAYAAACoYAD2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAOoSURBVHgBzVi7UttAFL2WBZjHgF0DE9GldArAXURHR/4AU6bK8AWBLqX/APgD+AJEZ6CI8wWogaG0YQCbZ87ZkTwytqyVLGPOzLK2dC0d7uPc3c1IQhSLxfzY2NgPwzC+v729FXEpj2EFTFxcd3HffX19PXl6enJqtZorCZCJY0xipmmWM5nMBoYtMQHSDqaD8/Pz/Rg/0ye5vLz8C9MOyOVlcNDLu7pkI0nCexbCupfEcxpwHx8f16LSINvv5srKyiZy6hAEv8pwkM9ms+WFhYXW5eVlNcwolCQI/sZUAcGcDBd8/vr8/LyA6Ekvg54kPYI78rGww4h2kWSBwHt/ZDQgURdE/wUvdhSOVyR/U6rgpKijmL4Fi8kI3h0fHz8eMUGCTWIveKEdboSZIl2WTwDwsFDxDb/i2+FGsVxIZ1vrwsvLizw8PKg5CoiKTE5OygBg2JcQ9rrJb/SiDsF6vc7WJjpAr1a2U1NTkhD5iYmJMuaKIgnB3ox6ebPZVC+lh3K5HEMSavv8/Cx3d3eK6CDAwmSDJDOsaLz4IuoHjUZDvXRubk6Q2H1taUd72tF+ECDkBQMPsiVl9PNyXHA5aHrrQUkT6McqJTgPCvJjTlqSMujJmZkZSQPIy6IJL1qSAnTlCZ5RFa/rZTaXVDyZRJ4KhYJu7lqmpID7+/u2PEUJOKWJEkWv62poKiSRN2omwSh5IrGbmxtFVBdcYLg6hn5o+HCGK6lQ+8+JoSguPVnXscQukcKqwuWD4Z2dnZVhgttikuQCsxhlzDDxvw+GKSq0aYD7dkqQgxBs6vxgenpaPho8WDCQW4fyiQE9dQyu1+BJRz4hGOVqteqq7QPE+EhSgC9FKeKAfxRJFMM+WGtVeS+w8gmKui9PvUar1ZLb21tlq9EWXf8YRlleX183FxcXW/i4LgnAF1Ke6EkSCRu0oUKwf3MBwjkMsNu+urqq8XNH81xdXT3GTVsSgP2bq/d+nYRCTq+zM0X0bffs7GzJ/2K+e8gWvJFo301vpiFRTDs8ay14rcPfrCRM2zJCIAV2PR5tdGUv8wBHHYyFLR+PXYS564inZ4lhU+6MgCgJ7vS6EaoDJMpTBORIaZjHf570/YTcVMJsIpfGpVLJQjEdyxD2QuwoKJKt9zn4HnHOzHlWxHNLSwYEvccCOT09rejYx94gk6x34mFLTNBzGEcQ8n3HcbQ7XOJdPNMAAm7zwB/ji7frtAImLgYXLzUut6Chh3GIBfEflV3nByNZ5jwAAAAASUVORK5CYII=')
195 | copybtnsuccess = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAACkAAAApCAYAAACoYAD2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAOQSURBVHgBzZk/TBNRGMC/964if5YCskiUitFEJyASMCZSNhNNJAEjnSgGjUzq5mJKnRw0wdWglAlIJMrgxMB1AzHQwcSBwSNBFxRLAKHS3uf37kppS0vvyl3b30Lv7j36y3vvu/e9rwzyxD3qdW6X8y7OpA5g2ASITgDmOmiBCl0r4q+KGJRAlec8AQXygJlpLMS2TnKvxPltcQnmkVVUxxY87wJmOhmWbJu4/wgBh6iDE44No9GN+Y3K5pRsH/e6kDlGIb+Ry/X1CsO9zlzLgB/1sH3yQZ/KHEtgi6AAXcgdS20TA4+PaiVle9A+OeBDxGEa6nKwF/H/b9TfaYEf7xeDmRpklNQFYQgKCA2GO5vooTUpAoSmYRiKBGPcO3f3zVjKveQLESRiDVoTwXnCIMzUaHNyMKUEDrITs0UV1CTAGX+bJEhIto7f84pog9LAnRzxCUna3nxQSjDwiR1OfNQkS2wUdWjadyocXvFRk+SM90FpInIEYPFt7zsUgMjaJmyvrEPNlQbDfSp2otU8BtwNBUAIfnv+CZZfzsC28ttwPy0d5Ix1gM3sC0bWtqCu4yJUuWoN9xX5Kk9NVK0nXbBx8Lqp/pQeNnE7o/q4ggIGzGnbSFohqIMuDjZgnaBOXpIiOoUIFEBQwPVTnXFif//B16cf4iKbWQWrWxssERRHDI7AwmCSyoZaTSRZNFmw0lUDjQ+terOhItV3N19ljDUZ7cJPSHDq2nkIh1Zh9+cG/PmyQlK1sPxqJiF46dktcFSVgTWgLJ3uaXaSZJeZbumiv4LL2jKwXpAmG/E139tVP0IeSJVlcNl3U5t6gR2COqqsHR8owZyFPI+tYgTXF1agmpIG6wVBnu8d6dRfQSpMQ56IEa3ruGCHIE21qh3INMlIJBpAANNRbi+ozMXLMJpkqD8QpqqXH0oICpiET8qR9jhr01pQme99e27/KmVbZBjtL/a0U2oWZhjrTL6XIikO5BzVJ1BEKDXzp1fZDtWCVqeWQme6W6ht4aed6k/+z56RF+n3MxasVqcW5UKLxgWHMj3LWvoTomd7mjZUOlDaWf4Ta5AjH5z3jGQtkhms9EqzNmXwsgjWXJVewzXzdqpyIGM+K2S1CKYAoS3PUInR1K8PAl1Wq3i4wTwyqOp0RUQNyLSBGO1kWnIfsQzoDeamNeumVK9BP3Uy10ELVERCTSMWol8aglWUbZkRS+Y/BdeeFKL/AeIAAAAASUVORK5CYII=')
196 | infobtnicon = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAJ3SURBVHgB5VbbddpAEB0JFUAHUSqIUwFLB4THt0kFuANEB1BBzD8QOkCpIHIFljugAB6+14w4K4TRWtaf7znLLtJq7tzRaGdEvho8142dTsf4vt/yPM8cj8cQc6i3thgJ/ie73W6+Xq8TF3ulxCRsNBpjLI24Id7v9xM4EEsVYhA2oXAMJQ96icrmajiB4VT3hUEQhIjCEKOVRQLr6eFwoANbZ2Iag8q/WN6REMZmCOP0PSM2+v1+BNKx/k3g5K/MyZvEVArSjZKmeLB97cFboOOI1kbVJ2oj57R/+RDD+xlSgs8gzG0oT2lLbebgXXhqVK2A9HsV0gt7fGX/sWxCfXuxWMTZvZxizV7BpkkZabfbHXLc2kMbUD3j2nrveeLBYMDwGowUnkVSAjj3h6NsH0I+ldMXYZB4pkCMrB3qMhYHQMFvjrJ9TCqQz9UJk10Pzh74/g/OUDEXB6xWq0dxBGzHmEaw3Tpfs+7fqVfPUjN44OgyvEbc5A+UvIgDkFjPvV7PyUkrUcPsWiAVYRWJSjgr1o+dSr5JzeD3rMttgRgKUs54xz+lfoQ6JwViKP6nDhipGTiY7jlD1FOBWFOe8z0LhdQIiDI6PxaI9RzlYB1+kJqAnBlrIsZ2d5I7q3lG6zyyEuIqNBnTW3toA7Yi2/aZ63Izvk2erSP5RFnMSK2aPFsul7koFuoxyCI5ZR9L2qZMuQNpojZzcGl9GNYIJ9pEygmZHyPt05rykdbHNgLySE5hJ1I5NXosIqnd7NFBNHwtNnxKSMyo9EPNng3WUC3iRtwQM5HsbqMScQY2CjgAhliyfPIVvCljdvPUw+ABFJcRfl28AkcETJO5oIjcAAAAAElFTkSuQmCC')
197 | infobtniconactive = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAALWSURBVHgB5VZNTttAFH5vbAJqu8gN6p4Ahx1CFckSIRY5AekJwg1IbpCcoOQELCrEElcV6g7cE+DeIItuoPG8vjczUW2cxEPIjk+azGQ8ft+85/cH8NaAvge//YjbYagOiahNBBFvReYBwRQVpCwqJdKT44M09ZFXSyyEQYDnTNYGDyBCkuc0PPmcJivPLXtweRM3t7cVE9KZ2WDNAGmS5yx4C9LufpqZcz/jKJxBxIQ9RDwEZwlejx4f9bDbSafexNc3caQbeMnLWAg10Xj2AUbd1mIhRbCFBkrhufubPj1Rl8mzWmLRtNHAG0MKkD0p6sy188U1W0FrIyNy5J3nmqvnL4l5X0MqOOJ3FL8rMkSWk1lCSWNxJDaT3BSY9NM6pEU4ze952dSaOkWHK2kcoP02GmhYR3p1G/dkrDojmjPh2MgOsKS1KgiKCU3IZCcH6QBqgV/tWI3ZDEY8TSUcxaIVYq2hZ1eUgBfoix2rIU7FWk8cW3u+H84XbOZdsheYgAc4Q12AJ1jbhKd+YOPc3WH+EI0ng3qPD7BhbG1B6i4QVYgZTfk53rv/DR64um09yPA5e/TfUaP5XgjrI4JXoKhxJj9Xd62PsGFIPLvltEKMZInxD7Vgw+CQimRmP0orxDnRdzMHfuXvJVBKnRpiol8VYkZiN/BUCgVsFNR2ZBcVYsmjaOOtGTbgDDaE69s9SZURmzkpdielXM3mHtpN7LPWUY3MzI3lpFLXgQayptzKnqNSjzmfjrhC9UWoq6MZrAHXTJiazORjzv8lK1bqMXvggCcxSSQNgYfmK0lF1uydkVnC4tbH1lHb+sjtFA6O9u+GUANxyp0d1dc592loMmHKdb27qMSubPbCEAbO7AJ+GROt9WQWQlZs9oK/EJvWV1PPEUpNH4umy/o0r/aWO8ZzRL/4lkrE8bp+e/sc0ijw1CPCXZRP4DRjZEzGwySgpI7w7eIfPhlVtfZlHfUAAAAASUVORK5CYII=')
198 | settingsbtnicon = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAKXSURBVHgBrVZJdtpAEG3ArINvIK947PAN4ARRGPb4BMAJDCcAnwCyZohyAnMDs2Np+QRR1kz5X6p2ZEVD94vrPb1u9VC/q+p3dZWUpbiuWyuXy0N037bb7VJZSslmMcBaAFuUSiVHhvzr9Tq1ATYC7Pf7zcvlMkO3JUN7ANViwN75fB57nucX6coFFPc9QvFIhgL0p+v1es6fTqczQPMYA14CeJoHXMma6Ha7Q4B5UNaSoSco+wb37fSaw+Gwr9frP7HuFr9Nfui7jUbjN+eUiYWMU6VSmYkCyg5KxqvVKlVBbJ8j+1wZ8sXNXiqgbFiov3HyYd0D3LdTFlLk5rJeCLAfAhbGCYvubcEoZCy+O+oAsXwMDUR3KDe6I6xTAGrjNJnuI5HQhF/eOhx2AnZ7YPeLrP8IqAXx+pUFxAsvjA0VgFgBDrqEUrosSO45Ho8BrPuoXxkIwbDxGWATgomraB29MuKcWF4oRoC8iypiLYnUZow2m8093H8n4LwOo08DBMiALeMbJxKZB6AHWTM0sbIQkGlNRTHbp2UQHkCsZIy/FOkrBGTgpZt5elgXrgF5btX/AkIC+Zxer9dKTjJhqCi+Qd41MQYk3eGyJ/bRLgRAg/G5epbf78pAbkwWwVVzUP8ruk20r7h/yedpD0JNTHQZsZRWkqHo0lK6tylgOg220y5+mvxjoQT+LQ0UDe/aiMwVMgV5QNVqtQZ96YCaaUy0yPhMwNMsRQZPVZgGAfb+cOu5d5fycVVR4B2mMMTpVZ4aKxEiveg0iG8nuiPDkhsA5IIQM9t6Ja3ugY5x8onLrGlM65WiuicpmTWNSb1iUvckxahMTKtXlFwP+Teqe4wBtaS42brusQKMA8Mi53Q6zU0vvJY/h7SA1Ecy5LoAAAAASUVORK5CYII=')
199 | settingsbtniconactive = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAALmSURBVHgBpVZRbtpAEJ1xkKFRpdAbODcw7RcKrcJnmkQNJ0h6AuAEgRNAThB6gkRtEf0japPmr+wNQk5Q/ppYsNuZtU2Jje11MxLyaneYtzNvZnYQcsrF2C2XSlZTSnm/vyMGkFMwj/KXH+6uZeE5LZ1gawqgunmAjQCHY9fFIvaUgt1gS9CvHAIj4uXjo2w36mKaZSsVkMNXLFqnSqmW3lAwU+TRQU309UVu3BMycQpLj3HgebKbBpwI+O3nm+ZCyg5psCcgQZ3NN6HTqIjZqt7o1nUWC+iQl8fB1jQtzDHAgKceLV3tlIIrRNUmAwJShIGVhJ4CPAqBcaHa79+Jy7WAozH9oYjnKzxNpVQfD9+KK8ghWWFeAn69rkwQySviSSoK30voR8OXRyhSHYrUcQAs9ncmFd4vhAoYcAWo6oe15PBxIkEJyraEclqYKTId8pbCiROAwPYq4FJe4O8kIF3wC8pY6RsYXldmaOGASoJDFouGZVG0ZGQPDITBbBvHxGmYtVPiWvCaS4bPtOcGYgTItQh+1nIi1YmP7YPapGJZaht0GYBbsKFlYssIkLw44a9nEb8rWbtXFTqTfUPYNPEyE5CIZ8/YkGhU4x0kuADvl+0t3MqylwnIxAfLxNsTn77OH/UKngv48KCN8c/hLhQ954ah65d0srqRESCnO/F0ppXpaSKenPCMLyApQ3lNvfYTGEjBRGk+h75twwdaulQCd8ObypPniURwYzexZZSl7KXnqbr21OfL1WDcBqXqepuqbtoG4x76xN+vA6UP11qLM9fjZCrBLA1Iynii/QPkm+tWjhej29eDveqvbpKhrOR40gb952F5qWVIrQ3VoAJn4h1uYcTTnf/U5BNOJOJ5ErZBfk+pYTTC89gD/Pm7e7SxoR9gRysYzivr5h4CbUff08QRw3ReyZp7opI6RGXNK6ZzjzHgKnB0XgFYlofx3GMMGEo8zPnnnlyAq8BUY87/zD1/AaDpo9Q+PaIDAAAAAElFTkSuQmCC')
200 | accountslabelbg = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAAJYAAAAoCAYAAAAcwQPnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAIeSURBVHgB7dy/btpQFMfx42uE2oU/C0KCwW9Qxm6hb9C8AX2SJFPnbhnbsVPnTiVjp7pvcAeQGJGnCAmTcyyMEvKHhNw75fuRnGtfR1nyk8/1FZxEDhgOh2Pn3MlmsxknSZLpVCZ4i5aagVzHvCzLH/P5PH/ql5PHbligNEhneowF2KMhm+pxMZvNpg/dT/cnOqrX633VQF1un1DAPZYNPSatVqujFe3vtbpz//ZFv9/Pms3mLz0dCfB8+Wq1Ol0sFr6ecPWJPakIFY40suxYhuqJXSm08qfDZwGO09dwvSuK4rddVKVw++b3R4BX0jfGT7agr0phmqZnAgRgOwnVOBgMRhqsfwIEYk8tp6GaCBCQLqvGTh9dHwQISDdOT5z+YHsBQdnmqS3eOwKElTkBIiBYiIJgIQqChSgIFqIgWIiCYCEKgoUoCBaiIFiIgmAhCoKFKAgWoiBYiIJgIQoLlhcgrKV9NNkLEJA1D7GPJl8JEJBm6r8ry3IqQECNRuO7s2+tajmcChCAtTfy3ufVW+F6vb4QIADrmWVj1RSkKArfbre7evpRgCPpsuqbVsBLO9/tYznnznXIBThOrmur8/piFyyti0sN16kQLrxcbtmxDNUTd1pFLlW32/2pdfK9UBbxDFb+0jT9oqFa3J5/srmttTeybskC7DnU3DY59AeyLBtpKifWPGTb54Gv5L9NXv//XnNwZXufjwWqdgMqcrgxGMjgfQAAAABJRU5ErkJggg==')
201 | lstbximg = PhotoImage(data='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')
202 | lstbximgshort = PhotoImage(data='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')
203 | mainwindnote = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAAQIAAAAqCAYAAABYx1W/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAABMISURBVHgB7V1dbB3HdT6794dXFCVatFSaKV04gdzadIsW0HvBlyJAHAdoCxlFobRA0Sg1CvQnyHNt97FoU/ilSZz0JbULFG7yZAMFChTKu9kCBay0imI7zg9DS5FCURJ/Lu/dnDOcM/fbszN7KSdByGAOMHd3Z86cv/m5M7M7c4h+QqiqCh8Lc19E7ttwXWCaEkivEFdE+BcgR8BHHh6nMHyRF9JGeg3ZgX7Ij9cEn4a8EbpRWY19CeKt3uHZyNKws8chI3cU0OZgp8LYh6zMxi41eyJ/lCsiJwaUx9K05RLiYvgttmrU54T9iZp1giL1KKYXIa9IvUZZGnUqVl6WRqqttEF5WETDCJNUsBLvX3jhhULCxYsXO3rvcUqIK2kiQ1DaQ6lXwVVQGppX4wSPoKKjPB4nyGLTkLame3oBD/iVXi/3/OKLL7r0Z599tozYogR7IL61FepRqG283iXaTWVUOsy3o/ZR+YBGYfgXPq/IUar+WDYclIcLIK/KSD6fw4VyDHqJTGpznyXYU3VS/qayl1AGoVzEtt7uTgaxvdhC43y8LSsng5YPyqA6oa0Ux8uldiDRBWxTennLSJ0oI/Uo1DusW1jHQMYS7Ehg75pt1KCRTkKh8AWU7ME+KOA/pg1qMAldCRcuXOjxVUPfB3evaSsrKxhfSzPB4UBaP4Kj9HqAq/T7khajLXEWF/mpjIDXi/BA2Wu6Wr2QH8jUsIPVEXWzckbwAt+I3v2EDWt4kq+FZz9RLtHypki5oj3a5NBn1At1itUJW78sDtJvS6NEPcO6EKlzQT4MsTLTvKk6b+U09U1DV4P/g6v9cZGBBx0hpCDW+LteoBkOAw4nOMz6cBKuJxcXF13QZ00zcW1hDvHtNcbHpi0tLc1GZJlro2NpnTt3bi6WjnJC3GxCv9k2Xdt0m0YD5bLyxe5jOjxAmSjubFt+5OXLIIU/a8vqQUNK30PqH3hqOU+zR1sdw3hbb2x5PYjMWAeWl5elzUnb085D2qR2CkViuhmFw/QSDscONWnSIbjnhx56qDSMa3Dnzh06ffq0uwrgvYLGzc/PV5ubm0KjIiOj4lhaMhTyeUjzpXBT8qRkBajJE5FX7ZUclsVkQnmn8G/IKXk5rojhepoV2gbounxAJ8rnkDK0QbCZtxNRxIaWvtoA+Vhca8u28tQykqvEyb3VMUX/QfXH+nDIOmjruatDlj/YT2HsryO5f+yxx8bvvvuuxFU+zaVX0iB5RnFwiU8ZokMIQA6Ve3V1tXz//ffLq1evltw7dTY2NjosWGc8HpdbW1s6jypmZ2eL+/fvFydOnKDt7e2KrwVfA30fTy3QaPyYh+lXQl+vkhaUYbklDvIEWkgD0qI2UD5iiwQNG+f0BP7uWdKt7h7H8VXZlSbYqiGb6mtoa54qRo8OyiPwoykQ0w/5KW2QRXEljqDcG+Ws9gQ6tXIG2Wu8adKxTisnMrxrNsT6YOpGsDvmV11jvCP6Y3prvUKdtOywjWA506T8LK1K4qUu3bt3T/CkIxidOXNmfPv27X3uEEacPua2qp1BZWRrQLJyiHFlEUMXNnheUzBhnZd05ubmenfv3u2wEl1WAkcHxczMDO3u7jpl9J6vlY8jvPc4BT8T4keMR0hXjenzhivwJ6Cvz7XC8/Eoo8OLXGvyKmGQm0A+pe3wUF5JVwCZlb6lWdNNniM4Ac+nBx4RuagFKqCLcgV9kFeEVqoMka7K4ugprtIGGxQRvhaXgF6sjBo6A18sP9I4KzNN6petj61ygC4pvRp0kKepk0EOm+5lk85gvLOzIx3BPh10CEO552nKaH193Y0UJHA7rp5//nmXLzY6aPuXkFVMmRJ0uIfp8JCjy8P/7mg06vIIwM1HWJAeC+XWC/r9vhsR7O3tFXwvV+Jr5eMcQfNc+Tjyz7UGrrJJHk8zCMbPyX8IxbfG9rwJ0hq4Xu5Gj64ygqx6H+T18tV083gF4sVog6yEuiqvSL7Yv2ZNJkvD6OB0hbzBDpCvYWMsCyhfMnatfDrKIGnjhH0roFeozKBLLV7lYCgTw9wgty0fo2Ooi1CuNTyql2tlZC7UjqbMC2+noCPWG6rbmCLyhPJDfb1MtTbj491ogNviiNviHo8ERjyCkM7AdQjcdve57boOgW021pcO1mhF6lle0bz22mv6T9/j+UqP5ys9HgH0eTogHUBYuez1euVwOMRXHwXHBaKcVisgBMZz8R6ngSd0UmmGjuCl0itORx6BN8cVysNeW/iQ1Q/z2PyK26YH2mEaf+Rp6EbtkKJnZUZaahuUz6cVMf1A7phuUdpoQ6tHKi/EqXxRXVUWKfeEjVLyP2hZErXX2ahObW3CyBTsbvjp1f3jc6ewz53CkDuEfW6bkkGGE9oZDKUz4DY95jateWrQrWnjxwt8W964caPQkYDIxSMBscCApwHhVQZD58nfmH3ouc986A8WzvYu9GfKJe4glyhDhgw/UxiPqq3798ffXH9v5+v/+R+3rrzxtZvf5egOdwIyRSgHg0HJUwb358xtuOK2TG+//bZkHcUWDWur/H7Y4BYGr1y54kYC5N+BMuE+E57xz72nf2/xV/7404t/c3Kuc4EyZMjwc4UbG8M3/v3VG198/asb3+HHfR4Z7O4eLDLI/GKXX2EO+c9dRggjnu67NQOCKUL4slA/GuPhQyFvB2jywYLrDHwn4DqCl/75iU/+2V8tvZI7gQwZjgacW+w9ffkvl/5V2qYM1bkPCO1VrtwJaHsu33rrrcZ0pPbuEj4X7SoBmnww5O6/8OrKpx99bOYyZciQ4UjCe+/sfOm5S9/4Ah2MBnY08OvF4cmTJ/f49f/+2trayC8FhE0n7qrfhNNkJNDnFcgBLwwOeDTgOoKXvvzEJ88/eeIzlCFDhiMN3/r/7X/4iz/5v1foYNFQwvb8/PzO5uamdA5DHvmPeOFwrB8bleZ1Qtg8Mjc31+XXED3uBNy3zR///bOPfuRXB5+iDBkyHHn48OODy9Jmyf+xy/c+3Am4b4AkcCeg64LuU2TcfVjCtXv37l35TiB8QPTspUcul53iFGXIkOHIQ1kWp/7o8oeeJ79Byb/tc2sEPDUIO1EDvn+VIFslSb4epMmoQD8b7nDPsvzwL/U+ThkyZDg2IIv5v/5bc7KxwY0CeFTg2vPGxkZx/vx5tx1algZkUCAJblrAQwW6evWq+0SY/ChAw+987OwqZciQ4djBn3/20T8k/6fOjV62BuhWgBq4NQLcVbiwsFDwymKhGSX+kV/ur1KGDBmOHciHfgQHzvCU37Xt69evh2+HwhqBfFywurpKy8vLdOvWrfLevXvaMbgwe7J8nDJkyHDsQL72Jd+OZX8G/8kTQdt2D35q4ODKlSvFaDRyCbKVmPyGDPlWWxYeKEOGDMcO5JN/acOyOUo+NPR/8gK16UEZO73E71/PkCHDLwDIpiXYPRna+oULF8Kbgy5sPqjW19dxI0LYYsk01vNmogwZjh+Mx9UW1Xcrhvu1tTUX5KE0x4pVZ86c0W2Kstd5zMOK8d7OeJ0yZMhw7OD+/fE1OvhTrwaDgZ5W5Br/xYsXKz2R3B3uoMMD2ap4+/Zth8iZRpx5LHu6b/1wuEYZMmQ4dvCD7+59nfy5BTs7O+FPXq5y1EA4rcjj64dE8orBbTY6ceKE7DOY5QWGwVO/OXf27/7p8f+iDBkyHCv4/Oe+84nXv3rz23y7reHcuXO73AnIngM5u8D98ZfeZ0EF+5Olxxhtb2+P/SEHo2tXd390d2v035QhQ4ZjAzff33udO4Hv0UGD35djzObn58fdbnfMC4XS5oO3JTc18B8VybcE4egjySjTAzn6iKcH+195+fsv+oWHDBkyHHGQE4xee2XjZfKdgISyLPc3NzelTY9PnTrlOgLf/uv+0gRWVla6vE7Q5TcIA9mGzK8SZQvygBcNZ/7+8x++dP7Jk3kbcoYMRxyufePe5/76T6/9Cx2cSbDNbXmH2/KOf3YnFdHBgaaTD4r8yqHMECo5C116DDroQfQ01D0eFex99rl3XpFDDyhDhgxHFt59Z/tL3Am8yrdymKlr+HKy8cLCgjvxmPzx5oIbDiaRHzjMUBcNJfR4PjHDQwm3eCjAeDP8SrH30pefuPSRXxt8Kn9xmCHD0QGZDly/dl86ATmQxP2B8/SeXxbs6OEkboEQDiWpdwQG0J0ZHl4qHUGfFxD7PE3of/QT88sXLz1y+Wzenpwhw88deDF/7Ssvb/ztG1/beI9f+w/laHNus7vQCQzPnz8/vH79+n7Mv0HtzEKanLOOJxm7U4t5jjEjJxb5Z+bV7zKz7sd+9+FHP/r0w7/9yPJgdXa2fDwfXpIhw88e5Gvfvd3xOr8ZWPviP67/2//+z+ZtmiwMql8DGQHs8evCPX5dqGlj8IXYOiLQeHc4ifo24GlCz08TZHTQ1SPMaOIZmbyjk0A34Zyi8nEFOKpweaxTDQ8x11ANfHCuoXwLdLYRcxQxxSmK5W35k3eaUnk6DTlisoAjk9oz2iHFy9vNytaQMeJgI4aHtKuIQ44CaBUtjjYajkqoXqZoj4Z3Js8/ZATHH1FeFJEb7G/lrcURRX3/KU6BvK29TV1BG8ecq2C9RAc+FeAVRs8qIkvDoQ7QqTyue9Mnb/Zo0gnsmes+vy4cyYGl3ntZhZ1ATYlgbf/JoT+1CL0dOZdn+/v74vNQjzkPR5lR3Tc7unpqa2gpqOWxLqTI74PQdHQnRZEKE3EhRiBf4EE0cc/WRq+FRpRPDDcB1nVazR2Xfw5uutp4kekoYm7b2mQDe9Tcxll3cgl6jc4JXIPFdC5Ul5g9ybtkO4TOKdoVulQDGjXXbzG3ZFR3oVZLMy7PGi7hTH7rHq2wrteUdqqcjDu6yvNz3/0QvCakg8avQf0f6jXWGbaOCNTxEX512Dl79mzn5s2bPTnpRFyf8XRBTzJqdAQKLQ4io04kMZ+AOuRUSOVRR5eIk6Jn8tccfx6CTxQnxdenB2ebBs/JfAhHpQ0+KD+ZhtfiFLbh5BXjLI+UDNbxaKys0KEq5K12m05uDwNCS+rYmCZl3OikD6GHdfJKEae5tToUcZba4AX8wz/9tPqUqvOpugv0Ki+LXLWRj7hNDvlPesRtdMgjBecElUcCYx4J1LwixzwddSkO4P3s4GtDObiE1wwq7gTU11rn1q1bQ0/DLTDyOkIZc8HNryGDy2lUMnIfChZdVKPLbHTRLXQRhEbEjXRwO20NrM/oWh1x0D22dfedcLMeHfrSQcEVKrO+oUEaVhd0+478UGbrWjymW0wn5YmVX+SLlZHNo/nUxbvVQ3UxNgr/itgJ2LKK2BTFqJhuEXO1bniLPK6Sm/wof8MVuspoXKMHWmgntIOVPWXrmM6mLJM0vV41d+/eDb02cNcZSCewuLg42tjYCF6Qn3nmmfGbb7451sbslIo4j41WInCBhnOYEHj1scNTBDGkOwiR/GiA1xFKXkcoTp8+TXfu3KnRlDgBjm9UXsW3+ZieK2iNS9HFuBgtfx/4QlpNFpvHy0sxENlY13Dmo5pO6FkZIrI4XL4PvFN8YnoBvqOR4gVyFsivxZ4V45PHb/DXvNNse3BCdrzcDmnXwupsy7iNhpUJaZ06darY2toaU6QOttEEqJUxxpn7GF6Ulz5j3BS9lE+1sLAgHaT8QYfGL0F2Fj711FPOFXrKAzLCgw7RXEcgbtH8uejuNFTpFHhBsVhaWirkTAO5CjLfO4PwM/E0ouBOwxHh58qn1UDi5Sq4chUFFY97OtL8AI424xDyANza4qKJd88CHNf4B+e08GxpSpqhr7QdHdCvsehl9KhQLkzzNMjKpc8xG8byg6wNUHsnbBx4qZ0UtFwSZWIh6OjzWZ2cHFg/kKfYdFr9AdrJ+mx1VdlMWR6mPUTLWOuLyGF1gXxkdcF4b5tamYEdUN5qeXm56na7lTg45TZI/FrQjdzVryEsBhZ2YfAnAl1EVM9IBN8b8LTBLR7Kleck7m2Cv/Z9wPv+ysqKuyqOPGs+n+auGmz+WND8Brdn+Shvg5uSNeBoPpC1QdfEN+gD74CP+lm6KAfQDHFIz+a1+MaOUXliNrBlgHYwcSnZa/KinWL4Jt3KH+NfK4NpNga7OZtCeh/jrUzTbIB0U/pTut42yrMln+rc9e3OTc29q0Jdp3MAbfaDrMmkwRDU+wI7BxUIBOvAcWihA0E8wNWDUkJ8hF4jTq88UulYmtP46D2mQb5OQieLVxicTgpfZUSeVraUHG120Ti0X4ROg14kFLF80+5bbJPUqy1PyuYp3Q1uoXY2OiV1w/pgcSL1owA5iin6JdMj9w0+LfGFtiu/g5g86PNPt/GnINYpJJgX5tqgo/lQmRZeNj/ZcxeBXmF4WDopo6Gha7hID9PhPqkvypDSCWzQyKcFHuNr41Pg8WK2qdGL8G/I1pYvpkcqL03+TKiFd2s9Ap5t9czyq5WHqSNFrLym6RWRJ2abWD0osF5hvTblX7TI8IEb/48BdlJHW9De2XoAAAAASUVORK5CYII=')
204 | mainwindnoteclose = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAABmSURBVHgBzZHRCcAwCERvhIzgCI5w+y+RUawFCyVVMP3KgT+a9yQJcErUS4rZ8GIF3gPzmolAom+xIDXPRCBF/5P1ILtgJrAd8AkXmF1Q/m5+g1t3FvRee2SwovfPRBFW5hAojsgFVFcvVB/o3K0AAAAASUVORK5CYII=')
205 | rednoteclose = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAC6SURBVHgBzZLbDcMgDEV5LMAIGYER0lEyWUehEuI7HYEROgCP2hVUruP2t7EUAdec69hCqVNESsmHEBYpB7qLMa5UM3ODiVrrbq0N3ADPoO+9d8z5A1xKuUMyw3ahBgMMqI/8YzKaVzDGBK01ghnWDYDrBFtrF4gswoLBKyTw47dn4AW4uFENzxz8Wnn2SOQMw/xdmQ8HAWmIB5iDo8cbrszASZWdEqY6ZvA2gM8rKcB1pc68JfpA/htPi7Oiuz/kxKYAAAAASUVORK5CYII=')
206 | rednote = PhotoImage(data='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')
207 | counterbg10to99 = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAACUAAAA4CAYAAAB61jFGAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAS9SURBVHgB7VlBbxtFFH67tuU6SiSjNhKXiuUQYeVS91ZBEtsSSNza/oIsv6BwAI6Jj3AhuXFzcuTU0AMSopLXiVJxw0gcbCWHBS4cjGRxaLBc2/2+6ay9cePEs0lstfInjWcyO973+Zs3773diMwww9XCkogol8vpWCzm9nq9tGVZ/tra2s5ZawqFQlMMEYnUwcHBI5DZGpr2O50OOBR8/rG/v/8Y3QPbtt2VlZVdMYAthjg8PMyGCO1hXETzMXagXJnq6GsVfnS73R3M5cUAxqSgxgZ7ksGWPczlcpto72PK08Qe8DqubWHNNseYWxcDGJMCsvyAAnvhSRCo6N7p39y2gzWOGCAKKV/36fAknP093fcdO0zQBHExBBWB4Ty2pARnLiYSCa/dbj/CJZfXsb1KHfgRFf1Of83I0SOdPpApo8vL64SL9DG9Rp0+zO1izhUDRI5TMOqiW+cWQbkqFNpGOPCC61DKQZfF3J68DTBWinEoHo8zVjlhR6ZadPLV1VVPLomxSSGK50GCMSp/wVIfzcN2FoPoTujtLoH4JogX5TKkdI7jKXJD0x6Ng+Sf/RtZ1h3tX9nQui8YRDWpz0WfRp2OPIlKKjhpMMj4s42guXVekqWDI2hugtz6MLFKpcJ5qs08eXfUfawLCLnoSsxtIFMIb8cYPyZQpqkJ+EM/sh8+hnFRRFd5Dr+uaEKI0LmPQTPNSiGYp6/pe+ZGfXckKZ3tHbTmWbXSOGCFoIf3gzntS9y2fKiiOIXz0ozDD/oSfUGiQRmFKn3j2iXCNqpiQIqny8cN+cUNuRw8fuh8WOKY94Zq1bMWn+vo+iS5cgkwoMKPdoKTRqUYOri1pn46wwwzXDcuTMiZTCaPjimBvSOGTybKCMICwkCVDaFg9+joqBqJlCYzTv0UBR5asVareTIOKcdx0qlUagO/ille5ixLPrRtycRichv9Lcu8rG/0evIv2uGLF1LrdtVYGbesrZOTk6Lv+82RpKAOS9zHLNRI5pN4XD4GmbkIRM7DE5D7sd1WY24p7D2Eav5rpKhQMpkskxDV+DKZjKTKuKB637ZaSjUSa7VahUCxfunCLZsUIYL3/wp2bqKnXdoPrinL2qlZEco3N25cO6EwqFgRij1/5WcFOn+glGJ5P5GYKCGC9ui3YR7W0tJSFk8rv/EiVZoGqNLXIbVsPFi6HH1gR3kBczVQYWegVt6G59/h6KO48QuYK0VmIErODh4eb8p0cXtAyqFSqqi/NcXtU/YHB8yZLpMRICmfgwZy0jTRGOTDZp/UX3pyWghIMeWQlHqrW+90ZJp4hiQtr0j9TlKemsT2PZ+iWjXtPnwetHWh5ZHQL5rtpMEyRtdYHqvS4PSpNyFPsYWNCatFe08GYigeKrY3Gg1/cXHxnXavdw+veeXuNRR2owixpjoR5Uvb9Xr9+z4pYn5+/lck5k+x4N1JEDujyPus2Wz+f4oUJ6DWz1iQJ7GnWtLMIFFeCei7P+HeJfjRf5oQy+Hj4+N/gjWnLGIbmwsLCz/gXxsp/HmvjhPxDKr9jT6lVZuL+ODA0+WRDNofGLNC55ZRoTAh4s14xBrG8vJyFu+XXL6SZkURJHBD+LoxUHujyAR4CT10jbdXCFnXAAAAAElFTkSuQmCC')
208 | counterbg1to9 = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAABwAAAA4CAYAAADuMJi0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAASVSURBVHgB7Vg9bxtHEN3jB2gKEsDAFpDGyKUQQqgx3RmJJB6BBEgV279AzC9wUiStxDJpInXpJJWprLgIEMQAjxJkpGSAFCSk4pI0KRjgkMIyQZP0e6fZ45qieBR5/gI0wHKXu3vz9s3OzuydUlfyros1yaRqtZpLJpPlfr+fsyzLW1tb2x01p1Qq+VG6IgEPDw8fAGhrqNvrdrvQX/L45+Dg4CGqe4lEoryysrI3Tl9i3ODR0VHBANtHu4LioW2DcZWsZKzGn16vt4s+Z2pAsNhgTSCY8X6xWNxE+RBdroDe4zjGtjBnm230rU8NCCnIyvfNTiivSW2HihIJPcdWMwB6UufMTjjOB1L7xiJsNYGkxg2SCZQ6MNMOHKOSTqfdTqfzAENljsPkASvsGy3xgzw21mkivRRAVVTOiMVUuKcyJ/BS9O2hr6xmARSFZVTrNBsY18FsG0fC1eNgaKMqoG9fvW0yliHPWSqV4lm0TacgSzrM6uqqq+IARHRxAMAz6Kjx4qG4MHFFRx2KbMEOFrWJRVUuBJSYSW8rG90uFWMBf4UPWdYt2c+CMe9rBgAB/EqJ10oIdEcCao+EMp6vbRz4rXEBmc6CA78J4PVh0Fqtxn5aiXH3ttZjDZuBsRJAJdNEUWIw8kW5N0QgPEJmpAniJlZVuQwYRWIpD3yOGUP3c29FZ1H3BYAS9W2ucFSum0SYKaR5V/fJ3tGUjs4sOrTZ/OHe0fZqOgkUgk0Yd2WblIFR14D0Qg+T2bmhZhOXPxJfd9imbrCtBwvSs8TjymoGYTDAvu1qjyRDHh+a+7J+cSVX8uZkooyfz+cdVAxPrG0pwTGA29dZ4Pp7x8fH9Shd1gRAk+RFLS5KpdFouOoygLZt57LZ7AZWziyg5ixLfZxIqHwyqW6ivmGdPdbq99V/KEfPn6tGrxe0A6WWtXV6elrxPM+PBAQrXiceMrkS6LNUSn0KoDkr2vqPAPxzpxO0aWbouA+23oWAZJbJZKoEI4tvMpmQzaRC1t+32wFbgrbb7ZLJ9KWbN804CxiFz3yLZ6+jpi7qVKMYioMwQ6vvrl2bCswUMq2A6dOzfS1pRzqX8e+m0zODUaiDe2/qDgGXlpaYuxxO+iKVUnEJHU6czRELngHisltm/VEi6mXqchIcpwFLJwSEN91i/UmM7LTkBySKIaC+0F5X8cvNAaAdAvLrBOsbMZs00DlwQDsEfJ2iAT3+tBAP45bWIL765wD/lsFXAcgwZwIGXyWa3a6KW54goAvgHyagGwzCpE9jZtmQbdKvAgGgxDmXYL/JiuIQpirJka6+DZheGrzpPIZZWzGwpI5Hg8WHb8Fh3Gm1Wt7i4uJ7nX7/Dj5TqNsTJt2LwJgTT1Wwd9vNZvPHc4CU+fn53/HK/Tkmvj8t6IgE/KXv+89GAnIALH/FRIegj8Uk+WQyEoj7/wvm72Df/hcwXjFOTk7+Need0wTT+gsLCz/hM1cWf+804WVPwPYf1FlhO2dcouiFLoFQ/kSbNxqakcyGwShvxzVxWJaXlwt47yvzcwkziw726ixCsTBwuOOAtLwAX3+FnF8lKEUAAAAASUVORK5CYII=')
209 | copyhoverlbl = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAADgAAAAaCAYAAADi4p8jAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAQvSURBVHgB3VhbbExRFF1nZlylIyaebSK0pYlEMOOLNOgkfCDSSoSED6/EF8EXIoIP4UNoPRKRaOqDxCNRpEhUqpUqH9qJR4J6jEd0jGBQxKSda+9T55pHZ3rGc8ZK7sy9++x75qyz197nnAH+c4hUjafr3S7DjnLYbdMBsxQmXPSGC/8ePho6XZGGOSW+6lSOPRJkYjk5tjWRLnNthhBKBb/NJqpnTWnZ1lNjAsEL9e6CiCHq6bYA2QV/OGx653l9/mhjDMHaercbfYhc5kctGUKUSl6SrU8ZLIIycn1EaxaTUwhRJD0qkjZllbLMfnIMl0FcuI7wgyR4oWnSFqSZc58+duHRgy+41dIh7zMMBQ4Da/lGSrS2yfMEmgSZzKG9L1B3/m2MvWzBUKxcMwIZBJZqoaO2yb0UmuRetYexYXWbJLl4RT7Ge5zSfv3qewRefkWGwWU3UO4glfIirvXGsap2BIlk1alxGJ5vWHZFVIEnoOZEELdbO+TzjNmD6BpstV9vDCFA/RQV98fl82/wKhDGBOqjbOEw5DrtMT7lZFOoI9/u/gZDB9TTdJtpmm5ogmXJg40mFw+O8qpl93DmxGuMLu4nffdsf4bVS+9ZPtco4seqAthIamAwqRryZ59PHV2Wz9mTr2P6vkUTFp8aqSFKHUJAiyAPnFE4pl9KP46yIEHsqx5rTQTP+IZVbag5HrQiwkQ27yjC5GkD5fPjti+S4KXaNzFR+0W4bPjNaG58j/GTnAkSLqJoKsky+FmRU8/sF+3zGyAJhnQ8ecAsJZ0BDMtLlDC/q+SXDE4Nn3ShTZBRtnCorJi3W5KTjI8Ug+XNEuS2aFs0GbmuPoz1iUfwe5qkAZ990fI8jxBCKw9HU9VrqHuHM5T8wQD/mMD9u59lJaw++BKzy4dQpPvKAsLtuU6HJHZg13NJZt2mUXAOsKOZJonfu3njA0aMzJE+vLY+oe/12wqlD1fWxjo194KKVhCNl0NSSbpVlFaHiw4RwRWqp0t03Flm+4+MxaHKF3IHoyoa23ldZHAeMZGjh9utdrbt3F8ck5d8P4FyVVXS4STraJ+ZROIO/QZPFhCw8jhNNAh5qDUE72TS3oeqypps2UjWvnv7U9whGfN6ytLsoOgm6yO6fdn8u3K95AnUgH9OSWuhg3bdoXNX3ZV0aNyCNJFqPdRpZ+SSHPmKxyOSawVNxOSpA7tlTdWZc3DRvnzoIALzCH87+KOzExWGIWVagL8AzmXRi08eTQ5LkouajGCchHuBf26Jbyvf/DgPNtN5MELnQWT5kcmkTbadzoNT4s6Ds6TB9CKNZSPjQORoG+VV5BiJ/8l0RzI7/5OxxZJjJE0FKjxbqfD8tbz8aVDUIqZZ2elExTyPL0F9veU6+Lxomigl14m6G/M/CilDTiNxBV2RhvAA1PRETOEbpT/TI6BYwcEAAAAASUVORK5CYII=')
210 | edithoverlbl = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAADgAAAAaCAYAAADi4p8jAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAN2SURBVHgB3ZhPSBRRHMd/b3bdTEdaktSFoG3JYzZ6SiR0wYtJoBAEdsiMbpV2s39kROAtlU5KYQcPeUkJ9SKsm4l10cHoZOgGhv8oVlyRFndev9/TWd2/Lbs7tusHxnnz5r3nfPf35/0BOOKweC/fuxSrxQQNYJKqAXgNcLBiDyv8f1T8dLw0d32V2h+vYVSBJCw3V2rVArwtQwTFwyNJrL+ucuZZtJcRAsdcil2zMBcW7ZBdePx+7mx0qp6DlSECR1yKAjkoLvOtFgsvhpIT3VbVK4ICheVy2GwWi9PxoiXLdUtKeq1wy+wXR1gtqIXyCD0IgWNTFU8hyZjb2gzA6rI/4ooHvX/evgBbvkDwmcZJI3azBdqoYKY/GvBmSJL2u/OwML8dUd/UUgLXb9mi9lld8cPnyQ3woah82QQtV79Bbd1JuP/4jHg/N+ODYptFXMkiAWtFK3aZR6aUZkghY/rQCufL5QgxjnPHEx7jSacDikr2xfT1LIn+uuAksZos0IAWFJM4pEIxfhyJjAVZZHhwTbgkWSW87cryH2FJctXx0V9BFx94vQy1lwuTtqQJoFrinCtgIPTBD9CNt/YsTWJ7e36GtBkeXMf6TVH+OusTdxJJ5cUo7p84rMbMGKQscPrTBsxhHOmQRTtflYrywJsVtALG16NddyNXbr8zHxRyELIU9buJY5UpcqouSljNkAZI0MVLJ/afbcfEnZLPGlqi9mFhSPuGa6eiCjQAIdBLBUgBSgixMiZRFBZDeXJafteEoHnQCwahJweKw4N8mTTsX4ajmjHJuBljdkgBmtfGR3+H1FFCIYHkjpREKEs6SvPQNTdh6N163PFkbLvwfRumP25AWYUs+iYHV81MgwnMpzcgSehjKJ7CY6qpxYZuWwK3750Wz317mZPilRJOb/cSyAWm4Bh63BI0NdAU8fLFD5F0HKWJz6lhuJnY1FrYIoCx61Baivn25sFDwlNfNXtWwlW3V9N4NxhMfoHpMMXR8vMt3cVie2cHuvDmgaOD50qV2kEFIZCsKEncCQZm1EOD435wV4sguB+sq6QNYpaLRHHA8Niicv/YIvJMZhp39lqWnslIoeKImMeGHyaVDjytounDDpkMWk3jvHtHhq7GcjXC+9i/+tN+kXOowaYX0rEwTxnhhhRGbAICmttfAEPRhOn8BWsCWb1Wdh8kAAAAAElFTkSuQmCC')
211 | removehoverlbl = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAADgAAAAaCAYAAADi4p8jAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAQTSURBVHgB3VhNaBNdFL0zifns5xSDYrUgtg0qgqiJK0NRWxC0ihhBKuhCreBO/Fn5i4qK7rS6U2h1oWARrEgsglKrFF21ISKItTWKUG2xBIwKsZ3nPTe+mCaTKC60yYFh3rzfe+65982bISpxGIUab3X6vR4XhchlriRSdaTIyyO89O8RYdP5srvW1UauFOroSBDEJk8299hjau8EIVQIMdM0rjQEe044NeYQ7Oj0V9seo5OL1VRciCWTqn5jfSSWWTmOYLjT76dJTG7iq5YPcU6leg7biK5IExTlJhm9RUxOI85KBrSSpq6VsCx+coDXw1ywj+BBCHZ0Lz1GxZdzhVDt9tBeFCREw92B11RaBAGEao073O3fTg7kLjW/o9ttw+PqNjTOoF17ZlORwOvyUIhDFC/xXCQSY7SqYRrUlavl5kK6f3eEr4/pPp8/jdGHwaTcnZDdlq8v6nFlIruf03P2mGy4iFa6lVJ+o+B5JoWZlR7yzStLTzrQ95UO7O6jKZaLhrhuS9Ms2rqzkqK9CbrM6qMefT6zo/YdniPOwTNw9IyPFi21ZK5zp9+k661yF525OE/WalwTpYutC8g3v0zaLl14RxWzPLLGtZZBun1jOGdMLow6k8n585GCitq70Z4EPWPjV62dLm0nDw7Q/kNV1MrKQl2E8zPuo8nDkLZ7iym0eQaTeMskq+Q5uGJqOgqus6FT2EDModtAGFgUsOh+R6of1oeDsDbGPgiPOI5xgNdNBQBCUAmASsuWTxVPQSWESHvbkFwpZxH1931hj/8vfWAgUDO3TMraw1AB8wIw+gKrBJLAlqZKalwdFdXhoJMHBuT+9HGcyU2TOa61JGQtOBhAXx0B+QjGUXBqDTKhfUeq0l7cvf0F9b/8ShaHnzYiEz4m0/8q72I5QBh/SfzMrURGnsEpSIn2G0Os5Aid5TDUqOH6UGPFuHnywfxB8JeA9+Dp4fdJKUOJaM+nlCFMbIDVo9/I5UwgvJBbevNByGI+bTAceL3lPc3ktXQELA6USypgffRVilJrOyNi8ibTVYhQJuA1hCQMOHrWJyG2rrZXNoShwW9SD3UzPWqVu7Pm/S9dxisHKjVtei5zgChyVQMEQETnPYBQDW2ukDFY+xSHqmXlyzQVMcKP+D3oMlrpD6G372xn/I054BDn3VND7TDko9Zj4CRTCufQTMRY4RqTT91x21bNVGKwSV3FXQ7bo6N0nm8xKh3E1tdGjqMgBKGiaap6+s0ddUJD8SE7xUWQ/h5sCOIDschJMjky+LdF8Odvi9x/Mk/4y94u0n8y5nhyQN5X853H/uP8t2obTXSirJqtVPOoRec3BiI50ffLswe+F/m0UMddlxQ6mP81SBgijYyHNGZ3Jcup3YmYxnfReNyjXAnaawAAAABJRU5ErkJggg==')
212 | addhoverlbl = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAADgAAAAaCAYAAADi4p8jAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAODSURBVHgB3ZhfSFNRHMd/924tww2H0WwQtASfwrrzbUjpQB9UQoXqoR6yojdLe1MiMkrwTYXeIrEHBSVICfXFmEtkPbmLEgTCXEH4j2LiJBrunn6/Y3dN98ft3v5sfuDived+Hed7fr/zO+dcgEOOkO7la49kNRmgCQxiFQCrBgZW/A8r/H9k7DpeirehUh5MJ0xqkIwVFIhtSpS154ihdARFURisc80/TvYyweCUR3IoJsGDtw7IL4KRCHM3u+VgfOMegxMeSYIjaC73o5aKEE4lN6atrDbEDPLIHRH8eWxOJYSRdKqRFNVWnpb5b46wmtAL1RF64Aan5ioegc45t70VhbWVSMb6sdF1GBtZ161JgcNogna64QYVYC2gk467S9Db/Slj/fjoBiwvfU+ref9u80BNKkQQ2iiK4sSc1AI6oxfATtC16A/D4nwYcgSrwQRNRvRKizjoYRxTqeSkCcLhKPhmQ1BeYd7zntKX0o0GgKipL074jUw02WIAqDIyxiRBAM3QvJue/Ab3H5yGtdUfMD6yAddv26HQbIhpWm9+5AZqsdM0CL3dn3dfSJBWU2gx8IHTjlBtRHMS6GDRv8U74bpYxJ+HX6zywkAmienJr7COgzDw6iyU2Hc7W1N/HDpal2K/kYlGI1YRdDI0sMpTkiJGV7nTzAuIChUKalM7TtBzadmxrDQaseIcpNVf2/q3gPOFRt4X3oSFyx942zamF11UbNS5mCzN4lM42XOqtmyhCIZAI28xtajzjVdOQE1dMb/onkZ+aGCFa2wYFd/sJjetQvNWLSaqhp73awIal4g4ZCoyXkEQHJAl8cVlf8Wj4vC8/wvvcONVG9c96QjAtVt23jb8y7yKqqE5d+feqZgm3rA2mCwKCsyABtTikqyc12KBsOE7SlOaVw97SvmAdOJm4GlnAM45LXyO2exHuZ40Pc/KIIxVNF7julAU02jEK/BDrUlYBvj7+1AyaaZiZDHo0mRIsKHSf0bEXXdIUVg//AMoUgd1PBNNJuD28yX95cvEzg704Z8gHB6ClyrlLrrhBimKosjcoKOi5gwMz4O7Xjixhb7ORQfEPDeJ5kDAzxau358tEr/J+PBkr+TpNxlxrzki5Tb7zazUhV+rbkCuG8WoKYz175ihr9kpJ2TfgecIOi8yBtUoPa93Y/5H4GlI00iYgajijVhgLJkxlZ9glJYH8OznngAAAABJRU5ErkJggg==')
213 | infohoverlbl = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAADgAAAAaCAYAAADi4p8jAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANQSURBVHgB3ZhdSFNhGMf/52ydLCeNJE0MMkPopppdNaR0kBcqoUIY1EVi1FWm3ikYGRV5l1Z3EthNkDcZYd4Yc4rYlQ4jCM21oDCNZOKmMNw5Pc9rZ003F/sQN39wOOf9Opz/eT7eD2CXI0VrfG23mBUDamCQSwGtDBrMNMKMncdJn06X6qgqcfZG6xhRIAvLyJCb1IDWnCKCouGWZam3wjpxL1JjmMBBu6VAVSQ7PRYgvXD7/Zqt1uZ0h1ZuEDhgt1iwh8SlvtW2wkOhZCO3deoVQYHCcnukyTQWp+MhSxbrlpT1WuGW6S+OMSukhfMIF4TAwbEzdxFnzM3P+RErPKan+ztab81g6N1vbAMFRgXN/CAEqtDqEQdTk140XPqE2enVmMY9aHNhfGQJuYcV+LwqtgMZUhNb0TgwZqlHghlzxRuIqb9rZhU3buej5nIOthGzQUGNkbTyJI5k8JEsOju9Aut5M14+n8P8Tz9y8xTcbDqCTJNBCBsf8QT7+ujHXKjMFn18ywH09y2IeubsuQMor8oW4+KFRpYaNU2zSBKSwtTEMt70/cL7wUWcKjZRjlYoxhbF/2tpPyo+foja8Feg68sqjhftF+XWxhkhsrzyILwkvOfJD/GezmdFCYiUyowkzoIkwlZpf1QorKLD8dZC9+q6Q+KqKpkkq+YL6zGPH34T4p72ngiOq67LQWP9Z/S/WsDV63mIE7OMJMMfGCouRySS6DHKrnuSLB46rrBon6jjtgQQAj3YYdglQ8XpmMg1fTEmsM2khECeLj6MLm2oY5edpRiNJDwGnDIlGQd2GI4xnvzvt7ooUXlFzOpJ50pD3PFHaE5ZUjGMOGEX4gyXmbWe5XLz9oZlPK5jC4XCcWkyGYNljrU7nYUi3tpIGC8EGM6gCVrQIYlNrSJ9pUJKrEP1pV+Cwhg3ZetjMq26PaqqdSNF2JyF44WWny/4LqaJtTV00c2N3YP7Yomzgx+EQLaiLGs2pEBGTRiN9oPrWgTBib7CyhvENBdJ4iDRsYX137FF+JnMOO3s1TQ9k5E3imO2XGa/HbV00GnVNaS6ULKaqmndayZ01RY7w7zvv/sI3i9qGsqo6+lkL8zjQrghh5E0jIDq8GehP5IwnT9rT0x064m7/gAAAABJRU5ErkJggg==')
214 | settingshoverlbl = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAADgAAAAaCAYAAADi4p8jAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAARjSURBVHgB3VhbSFRdFF7njM3fZYaGfjSD4Df/jCC0GZ8cpFLoIYvSoAzqoRv01P3JKKioyLeuLxWZLwYJkRWTRYWpiD7lUASBZRaFaRQnGouGnNP6lu65njMSdJnpgwP77L3P3utb69tr732I/nJo6RqvtXk9TgfVkENfQmRWkEke/sJDfx5BNp2fSPuK8mBjuo6WBEFs8mR9V2TU3J0hhNJhQNe1xir/w8NWjSkEW9u8BRGn1sbFAsouDITDZuXqyuBAfGUCwUCb10uTmFzmR80OBi+lSpZtUFVECUrkJmm9WUxOweBI+lQkdVUrssx+coDHyVyQR/AiBFu7Sg9S9q25dCjIcdJuFESigS7fC7IhOPJplEKhUZo5y0k/CxhzmttBvxiQ6hw90OXdRBbkYETd9j6qXfaItqx5Ik/TxcEJRx0aDFNPx8eEunu33tMIOwno7/siY/4GeBxOqmGJYhNPRXenQcNsbPPtEkSY9uz/T97jATJwRDwe936ilubhhLoTx15RaLxfYdEUOtM4P2U+q7GS6+PbUR5KsicZrJElOaZpejWL7R4f57EslZSKfS55VNuJYy8lGsDS5TNo267ZdJ2JnT/1RupWlPfS8TNFtG9Hn7xDAUurZtD6rbNEGc13SiSy15vfxYhwlOv5m+JSV8oc/sXTuf8HcXZPh0HnTr+hmflOGn4bpm07Z1MZt6dCq8hhcl6LFjb6XxkQhoFY2SKPTAJcbhikEp+b6s8WiSFH9/WLfDew8UA3SxQRx7qFAiBJGI7oYT0ruaroHOdx0BeEQBoEMQecC0cAF06/jtoGu6rX5lLNujwZAyRt4Mmxa8GEl64uoJ7Oj2ywwZF5zWVDDAcBtD9iOQIwWHl6mssR/V7exxWg1BAKJcoQ9aovHAnjlZOgAIVVa/Oo5cpYtItL3aKWF8++JDjejqCBgl2PskXT5QGBHZueihQB/2JPVLJiaP7Py7IKn+OcMRJXrq7NFZvgfDh+aPCrRNMK2AcNqwZ8CNmphYykA80jQvAYogpSIPm873OCASgnJ4zhCRJCMjAHkpWScVNDLIMfqeuPEt2wNV+I2iCoc5Jpt2qprs3jjBiSNYiEcT/wgQ7UF0obooj1pNqwLShpFhZNlYy5mdsU6Zp1uVTHyUbJLybjfxL2V5c7tmIwB3If5sBY+dxX4f95U0VNqG9qeBtVVSrMoBbo4H3QoV2y6ZF2o/8Vh4Dk8RXutr6nG7wGGzgvKCC66ec2N2tyqXVqOMlk1DkUax7biSIAMns5wZXZJ5RkDLC65sgOeLPTe4gvjQcpw4AI9j8by86Fc6f80PEuQubhleXBQ0JwPIq99PccuCV6KMhtgu9Ohq6blWSTUbMKJh+yx7gIovfBKj8uiFlOksmRxr8t/LHfFqn/ZLr5Zh/J0n8yeiI5wPa34Xji2UiZTpSjFjHNU99cdHK1L5iiPm2i73FfNE2q4K4L7Q7mvxUiQywj7QGNRtrDbmqxIqbwHWFdIRTP75uEAAAAAElFTkSuQmCC')
215 | accountsiconbg = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAACnSURBVHgB7dABAcAgEAAhtzTfv6A20AsAEfhmZi+u/sWTpEBSICmQFEgKJAWSAkmBpEBSICmQFEgKJAWSAkmBpEBSICmQFEgKJAWSAkmBpEBSICmQFEgKJAWSAkmBpEBSICmQFEgKJAWSAkmBpEBSICmQFEgKJAWSAkmBpEBSICmQFEgKJAWSAkmBpEBSICmQFEgKJAWSAkmBpEBSICmQFEgKJAWSggON7wIJd2Y2ZQAAAABJRU5ErkJggg==')
216 | mp3path = r'success.mp3'
217 | errormp3path = r'error.mp3'
218 | notifmp3path = r'notif.mp3'
219 |
220 | #toplevel assets
221 | cancelbtnicon = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAC1SURBVHgB7ZTBDcMgDEUNLJKOkg0QeyKxQUYpiwCtD70gHPylKkok3jE4/0WODdFicXeMdBBCeBtjqJSyp5QyKfDeb9bag9+LMb5GNXaSsTnnDg4ivey0VhTWWvfWWtZIO1nmrki1YkuloL69mhq1cBaIylRCKZifozK1cCT9/l9CZZBwICVUxszW4u+ohYOWZgL29Mf9hubStbh08ZEgpFYcGuSr+ay/e8VcOkc9DJ10sXgwH1tO18TpQg4aAAAAAElFTkSuQmCC')
222 | cancelbtnactive = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADQSURBVHgB7ZQxDsMgDEUhQ8/R3iAZq045eaaqY3KDcoyqQ1McMbTIxt/Jkkj8BWSMnwB/nKuq2ru8tHDvuieN73nu+2kKDtDQtueT9wPNb+N44XIapcZSgAo5HFbMFYFNPFkcAgLNYCHtZSVeKekRC31+CnHXy8GuhScoAjWoFQYBJSjFrTAYyEFT2AQzARmos8JImi3+9AJjJcEnzBskhZe55XOAgJLPNMusApZaH/GpCYj4zAr1W2BroGKXWkxNa/nfK+VqtoB9lkGrqg6sL/O9yRZxZdqzAAAAAElFTkSuQmCC')
223 | submitbtnicon = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAAC4AAAAuCAYAAABXuSs3AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAEHSURBVHgB7dZBCoJAFMbxp12gI7jMW9gNRC+Qx2hVx2hXy0Awj1A3cKfLuoEXEHuPDIawxeg4Unw/GBhB4c84jBIBAAAAAPw8h2YURdHOcZywaZp1nue1zrMuzaSL3vPU47EkTbOEK9G167qy2nfSZH2rfEanaVrQAFbDTUULa+Emo4WVcNPRYvLwKaLFpKeKEi0SU9FiQQPEcXzxfX9VluXt2z1qdNu2SZZlZzJIOzwMQ49f+YGjAo6nvvie6BMZph1eVVXNwQ/5VPfF24gWg7YKhxZ98baixahThUM3HHrsLq88AplMHS0GrfibuvL0+lmyEi1GhQsl3uPorY1oAAAAAIA/8QTZkZAvUqSycAAAAABJRU5ErkJggg==')
224 | submitbtnactive = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAAC4AAAAuCAYAAABXuSs3AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAEcSURBVHgB7dWxTcNAFMbx71xRMkJGiNwFGlJGSAg2wBMwQswITAAbQANuaUI6dBvACKkjcQ+/BCLLkSKdc3dWou9XnWRb/uvpfAaIiIiIiA6eQY+qWT51kOvlUsY3Y7vweTZDT/6iSwgGOMEpPPUS3ohewNTTHtlveEq+VdrRl+fWooOk4aGiVbLwkNEqSXjoaBU9PEa0inqqbKJrP5kUoaJVp/C3j/y5mufTXfc0owEprs7sCwLy3irVfDhwznzpOstMORl93m/d04quJ/2EwLwnPln9LKTQtXNStiefIlp1/jhfZ8Pb+vFHXf9PPlW02utUacYbg3cRXKyvxI1evQ97asavxY9WQc5xjRcxd8bIQ4poIiIiIqIj8QuV3KYU0AmZBgAAAABJRU5ErkJggg==')
225 | eyeicon = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAF/SURBVHgB3ZIxcoJQEIZ92FmRLl30BvbqxJxAbxBzgmDBDNAEG6ALN5DcAE8gBUMrdOmiXbqQhoIZIP8yecwbIhlrmXksb9/u9/5dtte72od1HWiaNmeMLSRJkmlfVdWpLMvAcZzgIhABkLwF5FgURQJXTH74hvDdAzjEWtu27XeCDMN4QdAK66nrZl3XlzCvgHqWZW24vy9ACKBgPQASc7+qquPJZHIbRdEn7cMwfJ9Opzt8urPZLMU+aRShnCGk79EDghwF+BZmCXgK66OctXA2htlnWTZyXTeValn9PskNRAj1CoA55N8AMMJFc1LHz+GPcb4bDAZK3UN6wUF/5iT2AomkIuV7isGFcivmC+auKc00TTnP80O7NDTWoz9FQIASKFsJiqkdH8gZUQ4TkhQkPbdhv+OQUincpyiKjJIO+HyD32wUCQ0k5yPWBgFe78zD50yE/AHxQCijgaS++FRSHciYDMAC+zHN2b8DeeZmgtbNxJR/w/hdg3rFzw/RCtKxq30oZwAAAABJRU5ErkJggg==')
226 | crosseyeicon = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAFpSURBVHgBzVPLbYNAEF1AcOASOgipIKQDuwI7FYQOshck4AIc+BxJB04FJBXErsDpIKGDPXGEvHEAbRAoUqxIHmk1muHN2zezA2MXbZxzi/3RFDnwfd9VVTVq23ZdFMUnYlvTtIi+ISfgDnmev/xKRBaGYQXnEFmfWp2AimLhkk3XdTbCJMuy3SIRSCIAXRS9ItwMyiYYB5gKmB3IkiGvSgCXSHDWAHCknqHgjdqTifDtnTCEDYKA/1BEYCqaKgD5Ec6aU9bXHJumuSnLUpwUIUHMexkM4Aq3WkvKeuyTaZpcbo1epJaBKKacQCvxEhnsuj/fRIZhlHAPnuc58iww0APa+4B/xBEyWRzHpHaLtpORCElBCV3XK/nWfuj3NNw0Te9kZVSDeJzd9PljUsZm9kTCjHsmz3RuIYc9YfC0xTW8QHwLNURgz+2ZwhaMXg0FREq/yRV8jUJ62f2gHrGDeMvOtXN+8v+3L8pF34kxOl1kAAAAAElFTkSuQmCC')
227 | entrybgimg = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAAMoAAAAkCAYAAADIK6VaAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAH9SURBVHgB7d0xbuJAFMbxN+Nqu+wN3CHRLOV2cW7AStBnb5AbJLlB0qVMykigcIM4J4jTIErKlBwA23nPshEJ2Eyb8P9JxiMbOj49z9g8nBwwHA4T7/2pcy4pyzLWfSzA97fSLdPvc7Zerx9ms1nW9WbXdsICEkXRpQ4TAX6+NM/zaw1Muu/kTlA0ICdaQS41aRcCHBm9aropisICs9o+/ikoGpJYq8iTDgcCHK9Mq8s/DcuyObAJilUSDcmzEBLAWFjOmsrim6N2uSWEBGgM6kxUqopST9yfBcAnOlc/m0wmaVVR6tUtAF/o5L7KhhuPxwOd5b8KgL2sqni92XIuAFppIbGb7v6PAGilFeXU5iisdAHdYgvKiQDoEnsBcBBBAQIQFCAAQQECEBQgAEEBAhAUIABBAQIQFCAAQQECEBQggC/LcikAuqy8c24pALpkVlFeBECroije7IdbqQBopcXk3luHCR2nAmCf1PoSV6teOk+5FgA7mmxE9jKfz5f9fv+3Dv8KgMbtdDq9s8HmPkqe51e6ywSAyepMVDZBsR6r1phYCAvQNOnedLSPts8uFotVr9d71JWwX8JlGI7TrYbkv4bkfftg6x8JjUajpG4nmQjw86U2ca9XgXe4Q5+uW66e69Aa5VkPMNob4duzR7fsqRTd7IZ72haQxgf9jKfeGD5aYwAAAABJRU5ErkJggg==')
228 | entrylabelbgimg = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAAV0AAAA1CAYAAADiWDg0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAKKSURBVHgB7du/btNcGMDhY7uqvm/pn6Wq1Ay5AzJ+G/nuAO6gXElhYmZjhJGJmYkwMmHuwEMqdawyoUq1eU9EqoIoVBCf6XmkxM5xkvEn681JlX5jMpnM67p+OAzDvKqqaSxNEwAbl9HHNo5t3/evz8/P21+9ubrrQo5tRPYsHvMEwL1EgBfxeLZcLhc/u978uHAQjo6OnkdsX367swXgnnI343G6t7d3EFOCj1/Cd9dvvzg+Pp7u7u6+jdNZAuBvtVdXV48vLi66zUK9Ocl3uIILsFWz3NXc183CzXghjxTi8CgBsE3HEd5/VqvVu/xiPV74tkPhfQJgFH3f/59/XFuPF5qmOUsAjCbvBlsfT05OZhHdTwmAUeW73TqCe5oAGF2Mced13PI+SACMbhiGh3U82SIGUED+40T+Ie0gAVDCtE4AFCO6AAWJLkBBogtQkOgCFCS6AAWJLkBBogtQkOgCFCS6AAWJLkBBogtQkOgCFCS6AAWJLkBBogtQkOgCFCS6AAWJLkBBogtQkOgCFCS6AAWJLkBBogtQkOgCFCS6AAWJLkBBogtQUI5ulwAo4bKuqqpLAIxuGIa2jqcPCYDRRW8/133fLxIAo9vZ2XlVL5fLRYwYFgmA0cRd7qLruna9e+H6+vpZAmA0Ed11Z5v8tFqtuv39/cM4/S8BsFUxxn0RU4WX+fxmn25d10/j0CYAtqmNWe7TzYub6Mas4TLC+zgJL8C2tLmrua+bheb21ctweHj4JmYP/yajBoA/lkcKTdM8ieBe3F6v7vrAZDKZxwfOIsDzBMC95F0K+UezvDPsZ9er333BdDqdRbFPq6p6EF80i6WDBMBGF23sopEf8v8e7ortxleIhLhLYRHN/AAAAABJRU5ErkJggg==')
229 | aboutbgimg = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAAUcAAADoCAYAAAB8dCbkAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAATESURBVHgB7dq9bhxVAEDh2d0ogiaxm8hSXPgNcEkX8wbkDcKTJKmo6VJCSUVNhVNSsbzBFo7k0nKFIsXLHSu2DJyQOtnvk3Z+7uxueTR37iymjzg8PDxZLpdPttvtyWKxOBpDRxPAp+didGw99uurq6uf3rx5s/6/Ly8+dGGO4ojh8/E5mQA+MyOUp+Pz8uzs7LSur/49sDc8evTo+xHFV+/vFAE+O3PfxufZgwcP9sbs+Pe/hn9cv3tycHBwdP/+/V/G4fEEsDvWb9++fXp+fr65GVjeHMx3jMII7KjjuX9zB28GbqfV81R67L6dAHbTwQjkF5eXl7/OJ9fT6vcr0r9NADturGR/My/SXE+rV6vV8wmAeaHmuoeLx48fH484/jEBcG2+e1yOMD6bALg1HjOeLMct5FcTALe22+2T5dh4dQfgjvkF8XlBZm8C4K6j5QTAf4gjQBBHgCCOAEEcAYI4AgRxBAjiCBDEESCII0AQR4AgjgBBHAGCOAIEcQQI4ggQxBEgiCNAEEeAII4AQRwBgjgCBHEECOIIEMQRIIgjQBBHgCCOAEEcAYI4AgRxBAjiCBDEESCII0AQR4AgjgBBHAGCOAIEcQQI4ggQxBEgiCNAEEeAII4AQRwBgjgCBHEECOIIEMQRIIgjQBBHgCCOAEEcAYI4AgRxBAjiCBDEESCII0AQR4AgjgBBHAGCOAIEcQQI4ggQxBEgiCNAEEeAII4AQRwBgjgCBHEECOIIEMQRIIgjQBBHgCCOAEEcAYI4AgRxBAjiCBDEESCII0AQR4AgjgBBHAGCOAIEcQQI4ggQxBEgiCNAEEeAII4AQRwBgjgCBHEECOIIEMQRIIgjQBBHgCCOAEEcAYI4AgRxBAjiCBDEESCII0AQR4AgjgBBHAGCOAIEcQQI4ggQxBEgiCNAEEeAII4AQRwBgjgCBHEECOIIEMQRIIgjQBBHgCCOAEEcAYI4AgRxBAjiCBDEESCII0AQR4AgjgBBHAGCOAIEcQQI4ggQxBEgiCNAEEeAII4AQRwBgjgCBHEECOIIEMQRIIgjQBBHgCCOAEEcAYI4AgRxBAjiCBDEESCII0AQR4AgjgBBHAGCOAIEcQQI4ggQxBEgiCNAEEeAII4AQRwBgjgCBHEECOIIEMQRIIgjQBBHgCCOAEEcAYI4AgRxBAjiCBDEESCII0AQR4AgjgBBHAGCOAIEcQQI4ggQxBEgiCNAEEeAII4AQRwBgjgCBHEECOIIEMQRIIgjQBBHgCCOAEEcAYI4AgRxBAjiCBDEESCII0AQR4AgjgBBHAGCOAIEcQQIcxw3EwB3XSwXi8VmAuDWdrtdL8fm9QTArdHFP5dXV1enEwC37t279+Py7OzsdEytTycA5rvG081ms75erX737t3LCYA5jtc9XM2by8vLzcOHD/fH4dcTwI4ajxl/GLPpV/Px7XuOy+XyxditJ4DdtB7PGl/cnNzGccyxL0Ygn04CCeye9dy/uYM3A6u7Vy+G/f39n8ec+8vJFBvYAfNUerVafTfCeH53fPGhHxweHp6MHzwfoTyZAD4z86r0vPgyv7FT1xcf+4Ojo6PjUdZni8Xiq/FHx2NobwL49GxGwzajZa/n97s/FMUbfwO+Pbmx6CqreAAAAABJRU5ErkJggg==')
230 | scrolltrough = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAAAUAAAAtCAYAAABmkKG+AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAABZSURBVHgB7dOxDYBACIXhd8gIFJYWDGBp6QqO4GSO4o1wA5EoF60u11zPn5DA15MWj5kvALtPMbNjEpHbjw1fMxGtSVUfNBE6BQYGDmNurJD/4lmXH3L9zReJ9xKAB0KqBgAAAABJRU5ErkJggg==')
231 | logosimg = PhotoImage(data='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')
232 | flag = PhotoImage(data='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')
233 | socialsnversionbg = PhotoImage(data='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')
234 | github = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAIGSURBVHgBrVWBdYIwEA3IAHYDnKB1AAUmKCPIBOoE6AR2A3WC6gSgDlBHYIOygNr/ecEXIkHh9b8XSC65f8kld2eJBiRJ0nccZ3q73Xw017IsV07laGe0/eVy2QVBkJk4LAOx2+v11uj64jVsYGhZZ8jWBafTaQrynxbkxIQ6x+Nx1mgA5DFc8YVuX7QHdVbkUIWWQj6V5P+B+Xg8LriKE9DnIF8oCzZYQOMR5BkF/KPxYlNVxjXw/xv6S0U/Jic7Dj/wXyyqbjnwAyMbGuNrwgXm6hYp47+Uw/+ZMt2XjyRwpKWJqKJyBzq5Qabfm89N2LAUikfkoiXgprMus217xjv41OSpdE0r4EQpdVUZAtOjgQ9t7V50x1YbuzSg+661exrg2jXCLkFmBA1kmuxddIenjfM6A2H5xjvA18ZnGxF40IQMkpVoCQQadVxNvLe4WxD+ciRTQZ95H439+Wg0SpuIkcNYK+Ka3TM2Bpa0nsgFOwgjGPxWFPiqlmXyUnbMAGU6MLmT+SyypaVIEoXMSxyXCY0EGKc1u0tN5NDNWYDYLwzISlRmw6JoeJ43wKKAmRLzD2mgLj+VgHvv1e0eB3RBmXJxioTVCfVYGHKVEeRQ3VkJNOx6gd9cyOqExbyb9Qu8hVuoKzlErYHyJHDLEApb8TrS6/U61B/CU7BWoIUN80+D8g9fGgwD3VyUCgAAAABJRU5ErkJggg==')
235 | githubhoverlabel = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAADwAAAARCAYAAACBzs+aAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAJwSURBVHgB5VchbyJBFH4LDTkFRUAQkOxZzJ0EdxiQrYA/QII+EvB3q2pISjUJugLRymJaiQOFI90QBLIFRUig75v0baZ0dyltTbdfMtmZeR/vzffezOxC9M1g7E6k0+k/hmGccDvloUlfE6Ptdjtar9fWfD63dYMj+JgRjUb/cbdOAQILby+XS+uBgbES/Cz2lru/KZgYLRaLAkSHMUomk2f8OKXgIhWJRH6w6BsjlUqZPLinb4DNZlMIx+Pxc76gPLdyLpejcrlM2WyWEokETSYTXGzE2SI+BrRarZR9PB77BqtWqzQcDn1j4IkGX/D72eDz/HjkJ7ZYLCpx7XbbmYNIafV6XdnAERsS4QbYAHBns9kLG+Z6vZ6aRx/iu92uE0fnix89jhTAK7YgFAqdhMjnokJVEVgHnCIRsGUyGRUMi0AFsVA0QJ5SNQAc8DudjrNwL4AHPuIIv9VqvYojHIwrlQrtgXnkZ9UXhWpCYKPRUOPBYOBsPyRBEgOeF/TkYZHwIcDC4Sefz1OtVlNJRTw9Aai07DYRit/0+/29sQUQbJPHB4ZsMQn0FocCtwr6bXkkA3HwRLXAsyzrBV+q+gGMIPia2183K86VZF4WrAPJkPOzC3CxwFKppCqG3QBfEIV+s9l0C+lchoiNBGMHIYa+gyQebKgy/OI3+y5OCDbwKcmH+XYf0686h+BQPzpfLsn3+mSdP8NMtGOxWJzHOT/yZ70mDvWzy9+94d04buB38MV0Or1Un5amaR7zRKA/Lbm6Bdu2H/BaItXhCe5eUMCAyopYjF/9PeRqm0z6z91f9HUrbnO7Zh1XfATudMMTca9EnzNEZgsAAAAASUVORK5CYII=')
236 | discord = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAABgAAAATCAYAAACKsM07AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAGESURBVHgBrVXdcYMwDDbwwmO6Ad2APvLCzwRtJmiZIMcEzQjNBG03oBNgYICyQRmBBYB+cuxeAib0Dn93OmzJ1mfJsmBsBUVR7NgGWDqHjuO8YBhBYtL1fX9PX9d1BVkQBK1c940p6TjkC+t4kiTtIkFd14dxHI9y0xq6hXVZGIZvMwKcyMOJfth2dIjkQUViKy2cvzIzoNS9q4mIAKmJkZqCGQSiQBAJFxHA+TMzDJURy2DuZ0AUdzacxzojomroskgwzTVLcirfG3aK4olSFOmMwzDskcOGBE5Sdi5LBaqUjCplwa4QEYGnMbSXDwbjbkqwYhdAFnwi8NkcHu7mT0/3NDmIJ3VLdgHLsnZWVVUj06OFnOT4oHGwZj+T3CAwAkqRLncdMwQbzk5TJXJHBKkUriOUOg7JIHvsaTT+M9Eq6JJs2z5i0dWLRvlRqeZyDXVO1T07WTmk92XbvgSn0qVKu2rXigjDCGQcbTdl/0BZlh/4PEI+8X5y6kGrm7b+yRR+AfEpxTv+zkq3AAAAAElFTkSuQmCC')
237 | discordhoverlabel = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAADwAAAARCAYAAACBzs+aAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAIgSURBVHgB5Ve9bsJADHbSgDpBuyAGhNIVhnYMW1lYYeAJeIHmDYCpa3gB1LEDQzuWhY6MWWBthBgYEYxIUH+nOjrxE4o6VIRPOsW+85392c5BiC4MxvZELpd7NAyjyqPGqk3nCX+z2fir1ao9m80CfSEkfMNIpVJNFl2KEZi4t1wu23MGdEX4h+yAxQeKJ/zFYlEG6StomUzmmR81ii+yyWTymkl/GNls1mbliy4A6/W6bCYSiWaUkeM4O3Pc/lQoFEIdMl92dAoqlQrV63VqNBrh3lPP2HfmEdQsvo0j31sEBQyHQ0UUh06nUzUnuqwLJAHj8Zi4jZSMARvoYuN5npJButvtqvNghyTDFn7gH3v6/b6ahw1ksRVAxlwUTNOsmhRxUcEBgpIqg5w4lmT0er0dxyAjdpAxQOBQBUBM9mEPzpRE4BwkTjoKMvzKWUiG+CsWi3QEthm1KgEgc5I9ybYECujVlUoCskev7D7ATtZhK22OOQz40asuAHnsFX+j0YiOweIR0J4/GBKEnm29xTCkpTGkPRGE67ohyUNEsVdeF0Bvdak4ABvYIg7EsH2e+MOzVCqF8R6Ab+TzeUT6RL+EXo3/wB/9vxj4K8kv84AuAMzz7oqzFaTT6VvWHYox+De4M5lMXtWlxcxb/PApvvAty2pBUISDIJgz6TKLHYoZUFlwA0foO5+HNoONWize0/l+TAQ83pnHG9/4n/rCN2nXIEDRy3oqAAAAAElFTkSuQmCC')
238 | paypal = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAABYAAAAYCAYAAAD+vg1LAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAHfSURBVHgBnZU/joJAGMU/EOOfGCUxdiZLYWWDa2elHmFPsNkTyCYeQHsLj7CeRC2s1yNIa2EgVhr/7BsC7ACDjrxkgvPNzC9vHl9EoZjG4/FSURSDnuh+v+/YwN7FbDZbxdcVfmJZVkfTtF96XXPAv/mCyk9yuZxB2WThppNUsEwEDzTCjXUhGJn1Kbv0fD5vBBONX4FjPb77crnQ4XCgNKmqSoVCgUqlEgH8X+c3wXEnftBxHDoej6nDdV3a7/dk2zYNh8PPBJjlI3J8Pp9JRo1GgyqVirVerycRMNqsIzpwOp1IRt1u13vC3CgChhLg2+3mjWeqVqvUbDaDqb7ZbN5CMPI1KKPbXq/nwQMhPjcE4wpmFvBgMKB2u02cwR1eoqNxYAPFyCHWaiKx9mIwlivv1Oes2NMDs44QRdFqtaher4fzYrHogVgHpOl6vS5CcFpHmKZJtVqNXtAPYlixH17GcKuLdr0CBWMLt9Ng7oGRS8JxPLsHQAdjiraE2eEuqGv+ogl45EC5XE4DMQgDOBhbHsZL8x0b8QVRDOy6/X5/QhIK+lg2CpskpaLVDNFCShRbkgXP53P2UfxAHF/8EEWBujRYERWXy2UH37/ERxXt9I6XJQVXSVL+f4C04z/HIMXdxAcPNgAAAABJRU5ErkJggg==')
239 | paypalhoverlabel = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAADwAAAARCAYAAACBzs+aAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAIxSURBVHgB5ZexbhpBEIb3LoBSoVSIAiHS0iQlZWhoTcETwAPEPMHhKq39AigPQJGUoXFKymug9UlQUFpQIoHnW3nQ+nwHxrIscf6l1c4ys//eP7O73BnzweDFf6hUKj88z7uQ1pZhzZwnwt1uF242m6vlchm5jr3gL4JisRiIeWkyBBF+vV6vr+4FjK3gR7G3Yn432US4Wq2aiP7EqFQq/ZKubbKLcqFQ+Cyi/3nlcrkmgzvzAbDdbpu5fD4fxB2tVsvIFjeSETMejw+SNBoNLjobPxqN7Jw4l3LU63XbwGQyMYvFwpwK1tH+FfPbvtzGz84tD8XDA8QgSpOg4tRHI3Y4HO5jOp2OnYOtsS4vjRj1Y8OjnO44vnav13si/tDcOHzfv/BNwkUFkVZOH5SKdLvdJ4KJ0Z6FqC49glRwGjQGTmwV1e/39z7dDbPZzARBYCs6n8/34lmL3eMWhTG/p6Dmp3kgp2qQQYIYFk6LJUbjwLGjoEdGtyUJRSCCFJpoYqbTaSIPHMQon8uZBARHSSQ6CZFUQTPOWCvjClahWmWynQR8uuV5UECsinPvAJLGOvjd3eauCxcxacWIIfSq1eq1GD+PRWoGgZ7dQ1U/BS73qf5jc2P47fEqKYf51pwAqvNWYt8TovOrfdN6aZXPGfIffCNH4NJeWqJ8IF1ososwl8sNMKzgKIruRXRTzBuTMVBZtKGR8bPPw5pAggZifjPn+zERSfsrOv7INv7vOh4AHsg3Eg4OVeAAAAAASUVORK5CYII=')
240 |
241 | #settings assets
242 | toggleon = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAACIAAAARCAYAAAC4qX7BAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAALESURBVHgBrZZPSBRRHMe/783O/tN113SjUEhLsChMD1l0yovQUlAQRKCdOvbnJt0KT/0hiOwciEF482B63E5SSn+UPSiZKChS7ubujDv7Z2be6zcbih4Sp53PaWbe+z2+b36/3/c9hl0kk/CZoc5W22aXJcN1IXCGMTTCG3K01hSz5XvB2fhM+eva4x5Y24Ns+2Fioi2AaOQuCbgNiQ5USTjYhPpIJ+pqTkL1RVAqp6Ebi8jkZlA0M7NcwQh+668TicXSjhBHBIvWPRSQA/Qawi6BbuE8gMboeZw+PkAColDonTEfpBSwbYNE/MLCyitsZD8agPlMbmpPHDHMSUfB1/VAcgw6G0EVcO5HW/MdtBy9BZ9S8895pq1jZX0Ui2tvDFsUHtWUYi+58Hc1CY7+akU4xKMXcOzIzX1FOKhKpCI2Hu0OccH6zVC2lZekuEp5OIsq8asNaG+5X6mHg+CIPdU6wIKhpo6SiQSnH5qABzTGziGoHnYV46caOhTpAlPYNU61cREeEAm3QVHcZVfhQdTVtoORTXBq1Sg8IKDGqTu4qxjGlL+pJK9yhKThAaalUYvarmKclnb8hYTkOBVqCh6g5edhi6KrGFsY0PM/nMcpbnM5Bg/Y1L/BMnOuYorln0hr0xBgE5zbcpJJzNF3iSowimtILT+FZecPNN8iU5tfGUK5nJm1mBjnYWt2iax9hMYKqJJMdhrL6+9gWTr2F5GneaNIZz8ZUsq3sWJsVRkehui7UftZ+P2cMdZN81T8J06xbupz0IzvdNi1gzO1cs7QupUxsvNKcaaWBuXqxnjBEsXnirb1orf3i7nn9BWx2ntMsj544LQBctoGMrlI+ASC/jh1lY7c1kKllozC6pykLHBta2jP6btNMnnJl0W2OaDyK7S/BF0JHLPzxGccm6AiTFEqxsgzJsNW/VJPz4ed+8gfvtIkg1ApqJ0AAAAASUVORK5CYII=')
243 | toggleoff = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAACIAAAARCAYAAAC4qX7BAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAKjSURBVHgBrZZPaxNBGMafmZ002WabBLtkG1qQQguCsVUEDz0IuQgG/948WD+B1pt4s3gSRRD1C5T6AXqo8RhPvfXQmkOhUpDaprFpkzTZzWazO+NspKUerAnZHwxZyLy7777zPs+7BKfI5+dZwkiPU8+7yUHvg4g0BNERAEKIGgFZASWfBSXLtdK3nUxm3j3+nxxfbG7mwqZjPhYcj8ID0anooA5VTUChIbRdG7Z9hIb5q3PdN4SsESIWdweKH7OTc62TRHK59+HU+dRzIpRnMS2pjqauEMYG5H5FLuK/Dbhw0XaaKJYKqJt74JyjTyy5Xhe3i6+y2bkW8Y8jrl98SonyciR5YVAfnpRVYP+M9rw2yoffUdrfkMl46BOZDH9RLSff0bhxaVSe3WxMMwb1cxNnJuGjKCHowxPQNAMBoAJ01jAOxqlwvNuMhadTI+nOQ7rB75uxkcuQvYQ+8VtjqtV2s5Qykh3SkgiF1J7uoLAQotFABAVBlXsUAjNqOCZVxXoK9vdHwgkEgdRDmsrfOJPV8NXRWzAB6/Io/4uATgVE2fOcjkR7ixXSU5oIiJqsCClYdlX6RG9S5J4rTa6OQBBYoRxiyTL3pT+0eop1ZTXq0mmDgHORo8zjX2zHWt/ZXROcu10F+qa2u1eQyQRj944ILdNKZWOLcL541Cg19w82Ow85O/s/zurbfABYEN4nu5r4qSwsfOV371xf1WJRalqH12y7FlLVOCj1BUVPZo2QPeQPvO2dVRxWf/Q7a3xlNMHxpqjuvb1x9UH7r+nbsOtPQJSHTAlPD0WTUCMxMBaBJ6vQbFbRsMpwHBP9I9blWtQipQ+Tp6fvMfl8niUS1TFO2reIdFzCMSN3xBEERJTlt01BJrBEZF9WKsZWJpM5acrfYfspQAZFd0gAAAAASUVORK5CYII=')
244 | tabsgeneral = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAAT8AAAEwCAYAAADB8HZ+AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAc0SURBVHgB7d1NblNXGMfhYxshdcBHZkgE5B3gYWc4O4ABc7qD7iBkBW1nHZZhJaSyA8wK6u7AgyBlGIUZykfPCTaYfCc3lUr+zyMBFztEyivfX871DTq9co7V1dVxv99/enBwMO71esP60LBk2K5f87T+Od3f33/94cOHabkGz549O5xnneW4fv7hfKYJtuuvaf16p7u7u6/fvn1rnt38J/NM0jvtiRa9Otj19qIqlHpiTeqvjc3NzUm5gnaSDgaD9Xo4LjSTvb29jXrSTsoVmOcxneaZ6Fj87ld3795tL6qfC8fUAP768ePHje3qIh9fT9L7dWXSvomY5wnaPOvKup205nkNLjvPZN/E78GDB8Pbt2//VQ9HhbNMP3369Hxra2t21gfVE3VYVyfmeb5pXbU8ryfs7KwPMs8Lu9A8032J33zF9654YV3UdGdnZ+20FWBbodQT1Twvrp2wa6etWMzz0s6cJ6X0FwfzS10vrIsb3blzZ/20J9ulWTHPyxjNZ3Yi87y0M+fJfOU3v6P7rnBp9f2VtaM3QeZvxpvnFdT38tbevHkzWX7MPK/upHny2eHKb37XjCtod8SPPmaeV1ffsDfPa3TSPPms9/Dhw1F9cf1duLLl1d+LFy9G9e/m2cHyasU8u7P6O1m/hu9loZP6lsF4cby7u/uy0EmN3XhxbJ7dLc+Tr/r1u8KTQif10uLp4riG0Dw7qq9J87xGy/Pkq349cd1B6+jIf6kyz+6GS8fm2d2wcEy74XG/0NVw6dg8uxsuHZtnd8PCMf0CEEj8gEjiB0QSPyCS+AGRxA+IJH5AJPEDIokfEEn8gEi9x48fHxSA79+ltpsVP+BGOm+7WZe9wI3U9hxv23M8evTol7ZB29HnxQ+40doez21nyrY17/Lj4gckGLU9yZdXgOIHpPhmu1nxA2K0S+C2VW87Fj8gymK7WT/qAsRp281a+QFx2naz4gfEadvNih8Qp203K35AIvEDMokfEEn8gEjiB0QSPyCS+AGRxA+IJH5AJPEDIokfEEn8gEjiB0QSPyCS+AGRxA+IJH5AJPEDIokfEEn8gEjiB0QSPyCS+AGRxA+IJH5AJPEDIokfEEn8gEjiB0QSPyCS+AGRxA+IJH5AJPEDIokfEEn8gEjiB0QSPyCS+AGRxA+IJH5AJPEDIokfEEn8gEjiB0QSPyCS+AGRxA+IJH5AJPEDIokfEEn8gEjiB0QSPyCS+AGRxA+IJH5AJPEDIokfEEn8gEjiB0QSPyCS+AGRxA+IJH5AJPEDIokfEEn8gEjiB0QSPyCS+AGRxA+IJH5AJPEDIokfEEn8gEjiB0QSPyCS+AGRxA+IJH5AJPEDIokfEEn8gEjiB0QSPyCS+AGRxA+IJH5AJPEDIokfEEn8gEjiB0QSPyCS+AGRxA+IJH5AJPEDIokfEEn8gEjiB0QSPyCS+AGRxA+IJH5AJPEDIokfEEn8gEjiB0QSPyCS+AGRxA+IJH5AJPEDIokfEEn8gEjiB0QSPyCS+AGRxA+IJH5AJPEDIokfEEn8gEjiB0QSPyCS+AGRxA+IJH5AJPEDIokfEEn8gEjiB0QSPyCS+AGRxA+IJH5AJPEDIokfEEn8gEjiB0QSPyCS+AGRxA+IJH5AJPEDIokfEEn8gEjiB0QSPyCS+AGRxA+IJH5AJPEDIokfEEn8gEjiB0QSPyCS+AGRxA+IJH5AJPEDIokfEEn8gEjiB0QSPyCS+AGRxA+IJH5AJPEDIokfEEn8gEjiB0QSPyCS+AGRxA+IJH5AJPEDIokfEEn8gEjiB0QSPyCS+AGRxA+IJH5AJPEDIokfEEn8gEjiB0QSPyCS+AGRxA+IJH5AJPEDIokfEEn8gEjiB0QSPyCS+AGRxA+IJH5AJPEDIokfEEn8gEjiB0QSPyCS+AGRxA+IJH5AJPEDIokfEEn8gEjiB0QSPyCS+AGRxA+IJH5AJPEDIokfEEn8gEjiB0QSPyCS+AGRxA+IJH5AJPEDIokfEEn8gEjiB0QSPyCS+AGRxA+IJH5AJPEDIokfEEn8gEjiB0QSPyCS+AGRxA+IJH5AJPEDIokfEEn8gEjiB0QSPyCS+AGRxA+IJH5AJPEDIokfEEn8gEjiB0QSPyCS+AGRxA+IJH5ApBa/WQHIst3v9XqzAhDk4OBg2q+/vS8AQWr3/unv7+9PCkCQW7du/dHf3Nyc1EvfSQEIUFd9k9lsNj2827u3t7dRAALU+B32btB+29nZmd27d2+lHv5YAG6o+jbfb/Vq9/d2/OXn/Pr9/qv6x7QA3EzT+l7fq8VfvsSvXgNv1wA+LwII3DzT1rfWucUDg+Vnt6uVlZU/6zXxD8UlMHADtEvdwWDwUw3f1vLjvdP+werq6rj+g/UawnEB+M60u7rt5kb7iZaTnu+d9wmGw+GolvNlr9d7Uj/RqD50vwD8/8xqo2a1Ve/bzy+fFr2FfwFnnI2zNpor1gAAAABJRU5ErkJggg==')
245 | tabsdata = PhotoImage(data='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')
246 | tabscopy = PhotoImage(data='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')
247 | importlistboxbg = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAAR0AAAC2CAYAAADkxlniAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAQDSURBVHgB7dsxbttWHMfxR2rq5t5AmwEv0dgtyg1swNrTG/QGbm7QbB3bsYCM6gZhT1B1MTx67KgDSFQfBcl1kDgJEuk3fT4ArQdSXr/485FqymdcXl5O27Z92TTNdLvdjuvnuAD8b1WPZW3Dcr1e/75YLJaf+nLz3IUhNqPR6KYupwXgy3WbzeZNjU/3sYsfRKfG5qxONje1Wj8VgK9U74x+6ft+iM/q6fn3olODM67TzZ91OSkA325Zp56rGp6Hw4nH6AwTTg3OuyI4wHEN4Xl1mHjaw9nhlqoIDnB8k31fdnaTzn7T+F0BOJG6T/xqPp93u0ln/5QK4GTqxvKuM81sNpvUHea/C8CJDdNOu16vXxeAgDrgDC8bty8KQECddF4OezqeWAEp4yE6ZwUgY9wWgCDRAaJEB4gSHSBKdIAo0QGiRAeIEh0gSnSAKNEBokQHiBIdIEp0gCjRAaJEB4gSHSBKdIAo0QGiRAeIEh0gSnSAKNEBokQHiBIdIEp0gCjRAaJEB4gSHSBKdIAo0QGiRAeIEh0gSnSAKNEBokQHiBIdIEp0gCjRAaJEB4gSHSBKdIAo0QGiRAeIEh0gSnSAKNEBokQHiBIdIEp0gCjRAaJEB4gSHSBKdIAo0QGiRAeIEh0gSnSAKNEBokQHiBIdIEp0gCjRAaJEB4gSHSBKdIAo0QGiRAeIEh0gSnSAKNEBokQHiBIdIEp0gCjRAaJEB4gSHSBKdIAo0QGiRAeIEh0gSnSAKNEBokQHiBIdIEp0gCjRAaJEB4gSHSBKdIAo0QGiRAeIEh0gSnSAKNEBokQHiBIdIEp0gCjRAaJEB4gSHSBKdIAo0QGiRAeIEh0gSnSAKNEBokQHiBIdIEp0gCjRAaJEB4gSHSBKdIAo0QGiRAeIEh0gSnSAKNEBokQHiBIdIEp0gCjRAaJEB4gSHSBKdIAo0QGiRAeIEh0gSnSAKNEBokQHiBIdIEp0gCjRAaJEB4gSHSBKdIAo0QGiRAeIEh0gSnSAKNEBokQHiBIdIEp0gCjRAaJEB4gSHSBKdIAo0QGiRAeIEh0gSnSAKNEBokQHiBIdIEp0gKh2u90+FICMVds0zUMByFgOk85fBSCg7/t/2qorAAF1yPmtnc/nXV13BeC0usVisdw9var7Om8KwAkdOjMa/tzd3T1cXFx8X5c/FIDje3t7e/vrsHh8T2ez2fxcP5YF4LiW+77sPEan3mut6oWrIjzA8QzBuRr6cjgxenr1/v5+dX5+/kd9ovVdcasFfJu3NTg/1uD8+/Rk89y3r6+vp/Xx1k1dTgvAl+uGTeP9k/EPNJ/779lsNun7/nVdvqjHpB5nBWBv+CnV8MuGegwvGnfPxebgP+5yqQIxUL6KAAAAAElFTkSuQmCC')
248 | importhoverlbl = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAADgAAAAaCAYAAADi4p8jAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMASURBVHgB5VjdahpBFD5uJIFAgiEhCQRCehcSsKngdfUNRPS67RO0b9D0DZInaHqtiG9ge+1FVRC8ECqCgj/ggqAI/vR8p45szLqufzGmHwy7M2dm9nznnJkzs0SvHA4rYSAQcGmaFnA4HO8Hg4GPny5udtH6kUJhnX7FYrEHq46mBIfEPjOhL/QyCFmhwEQfmOg3M+ETgkzugsklmNwFbRYKvV7PH4/HC8bGRwTD4fBNv99P0Mv32iTo7Bx/JBJJqYYRQXhua2vrN20uOQWdPflOeVJTrQhL2nxygIsdlcA+gooQDAaDXzdwzVkB+wg2yH8hygT/vDKCAEL1jcbkPtohVywWpawTrVaLms2m3e6SwzUkcTu92RrU7XYftaHe6XQm1o1A+/h4OzK0K1mj0aBarUZ2AW5Oft7QjMjn88QLWayJjzudTjo+PqZqtSrK7u3t0eXlpRglnU7TwcGBKIf6yckJnZ+fyzzwCOZSJI2ybDYr8+i6Lt/Ce6VSERnaPB6PHVV9cxFUVr26uhKloUy73Sa32y2KZjIZUR6KQb69vS0KQZbL5Wh3d5eOjo6E3OHhIZ2dnYkM9VKpJHWMQ8GcRqCfMoINuDSaE7AoPLezsyMFdUDVoZwCFFay09NT8abyvlEGD8I7CjCCETAYCvrOQlCnBYGPWsFI1moM+k2ba1ZofFBdmOA0IOwAhBfWEdYkvAAy47Jxr43DzFgWSDlx5bCbA1VoqDBUQKgaLT/uBZ6fksmkvCMMFQlsRFiT5XL5iczMk/v7+1Sv12XNX19fkx2CjmEe/E4rgNpwvF7vaKuHMcz6gZCZbBGw8z5pfHuI0xLW4TRA+UkEEA3LJsco4DKs8albZ6b3tAJAcZuhtHRwVP7AU9IEe/GOSRZoBUDOWwMK0Wj0Fi9CEF5kkn56hlB9BuCQ7VeVUaLHBRG3YdpsknKjN/62+L/+yRgRCoVuOWw/bABRnXW85zR0h6U2LnRMGz3Mkz5+fUtzHMxXAOz6IPUThxSkOTNiCn8BS9WGFWpdKj4AAAAASUVORK5CYII=')
249 | importhover = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAACkAAAApCAYAAACoYAD2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAO9SURBVHgBzZlNTBNBFMffTKXEiEkvJpCQuJp4NClwIpgAR4IGuGgCBxCiNwVueGobwxm9alQ46IGLJQr1oGkJX55olZskuBoTPowEA4S4pju+N7XN9mu73W1pf0kzm903yT9v3nsz88rAJq/DXo/bBb3g4u0AwouvPPhTDCYqY6AKwVQAfVHTINLXGVPBBqwYYxJWWwNDwFmPENABRYKiI0KIme622HRR86wavlttGY3ruh9neMA5Kno/YFVsQZGhsFcRteyFHc9ZQNU00VkoDLjZx9Bay6Bew6JlEkgobjeLLqx6x8yM8ooMrTT7dF2fLtHymuHB5JoKrTX78hnkXG4pEIQfThnOmb+rdT2Q+T5LpEwQoT+CCsG5GOpqjc0Y36WJpCShGDyFJTbjAJOpyZhMaTGpu1m4wgIJTy1WE+OLlMj5Fe8QpO8YFYOqiTHjDZ5kPnDI+4Vf0N0WlaNTMON9tMPRsxRZKi/ubmtpo0M8NbQFw3+RTLBBqEKwJPXIUW57rGw7iiMoNmnJue6uToFJXG7oxeWm82D14gJo50wIBaoa5uUYjwrY4PgwDk8f/4CN9SNTu8/4neyOj+JgEw9ltwI22N3RIDj7EybubWJd3M9pQ/XyAX4nu60vJ2AThYNNLl85CwMjDfJ5avJbllASODX5XT4PDDfA1eY6sAubX2kS4IBXz3fg5bNt+UzCtzZPUmNSYP9IPTiBPKmCA/qH61MeTQorpUBE5VgwD6xaB2f35NKaCU2ST+DDia2U562Aia2iJ8UnqxPmMAEo9nLtzST07mgjnKtzyTGXQJr3cek3fAjtg1WwRKpnmA4RrJgl2bt7bl6QvxKzyLU4BKGK0ThEOB7TD5hAb1YhGI+RvtaYKusk3gznipm8Z/O8uBE9lCPFrRUwHuWFTF7EZPPJzb4CmN9vKHGe4BbnlDv3G6H3VsHYVfGUf4kepCdpybGRFCg0i5KCSo1VT2SSzHwLAoF6RcmntCvtwnJTuEoOwCkvEml7N3OJ2zhYLu5lATcXjYtO46s0kdg5UNFqHCqIwGXua03vsmWdgqhnqOuF47McYJUJXL8Wy2rx5O1Pvlny+vG25vgubhUSeKMt5s/1zbSJ+nbZO8aYFFq+1gsdcJgYN+v6Fu70rmETS8ceURlaMHgCi/zFZM2MwUws98wTXQ7pVQWcgt4TeeIvF0X9+0CQWOzTDDIb9ZQ8x3EL/nMOpvuaYpZLXdEikyTCADoS/XR2kSVunYrBRKUDNcZ0DOL4P855CBYjzMg/VkKJHOD9xgQAAAAASUVORK5CYII=')
250 | importbtn = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAACkAAAApCAYAAACoYAD2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANNSURBVHgBzZk9T9tQFIZPHAaEhJQNBIK6W4GFbt1qtm6N4AdAx05Vf0Fg68g/KN0BhV/QsFViKCyAxICFxIBEJKNIkRLlg/e9uo4cYif+SuJHiu699r3ym+Nz7sdxTmJSLBYLhmEUc7ncZzQ3u91uAXXTvY+2jbaNqo36eafTqZTLZVtikIvSWQvbw8O/omlJdCoQ/Of09PQoyqDQInd2dn6g2MevIMmhdQ/Cih0pEtYz8/n8b4lnuVHY7XZ7a5Qb5IfdhPV28XrLqH6Q8aDcZ21trXFzc/MvqFOgyO3t7RJ87xDVWRkvs3jOFwgVCD336+ArUgvclwmC51lBQgdEMkAw4JdMAQpdX1+3IfSq77q3oYPkv6QTwXFxEEwfvcFkeO/Cif/KdAWSgp5NevReN/yQk/SeZAMT/vniRrzXkiVJyPPzs1xcXKgyKTBYiSsc60qktqIpCWk0Gn1lQtQcyooSCYG7kkH0HkEMRrSMZ8lLA0tvagxLMgy3g4beD2YW6qNPmpJtNg3s60yJQavVkoeHB6nVakP78T77YRWRmBSMuFNPs9mUp6cnub29DZwXeZ332a9er0tMTENiMjc3J8vLy6p+f38/IJRtXidLS0syPz8vcZmRBPDh5PHxUQmicOI4Ts9y7OP+mbjQJ21JgFeEKyxNgcCmTzphe9O33FcYJHTYNXJ3d6csH0kkzsNXYXtTJH3Nb22mqNXVVcE2S5V+AjmOrlCtViUC9gwsWUEllbV7YWFB/dKEiQVasiwZhpkPA9t0+mRFsolKzah5EiY9izKSE3kc3NWJfhsGpmRYqoMYt0MYyLAder5h4HCJS8rKyoosLi6O6mafnJy8Z0VZkq8cAXQwahSDglEb1hJvcSM/hEBasaen70iLMzdPi5ZMn54VSd/ajZ3KNxShJ/cxwXP3lvdCn0hGEsz8U6YI3e5tlm3AuXDWvdzY2KAbWDJhKPD4+HggxeMbAdfX15VJC9UC9/3uBYapFvqC6icZb/rPgYt9R6AcBnUIlelljiiN5IEPFQbrqExv6Jw5sxwoSimJdfTrPQzTOdLXB6JTMtw1WRIdfn04w6bhSO8ZQhFZpIt2A4uJTzTf8dTp8x2HQi71d5xyFGFeXgGRXnuZTWIyPQAAAABJRU5ErkJggg==')
251 | formattabplain = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAASAAAAAWCAYAAABg10GEAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAK+SURBVHgB7dzNahphFAbgM2MggQSUZBFIIJEIgoKQZXe1dyDivrmDNlcQvYPkDuxexSy7qr0CAy7cqqCgICgqKPjT80oMaVqhpfU7m/eB+XXcuHg93zdzxpMtUqlUyPf9G8/z3q9Wq2vdhoWcmM/n0uv1ZDAYyGQykel0KvTnDg8P5ejoSE5OTtYLmXjCslgsHstq20Xe2xPPwfNJA+ezHoaEnEHwtNtt6XQ66336dwcHB3JxcSGnp6dCZhpaxORKpVL+7Qc/BZCGT1jD5xurHfdQ5dRqNVY7O3J2diaRSETIjobQvYbQ7etzgc0Ow8cOw2f3RqORzGYzDskMaba8i8fj4Xq9/rg59xJA+kGV4WOjWq0yfBzAfBqGtsfHx0JmrmOxWEhD6CsOfKzS6fQdw8dGs9lk+DiE+bXhcChkB/PLmUwmiX0fQy89kRVyDsHTarWE3ELoky2dD7rDVqd9/KSQCf4T28DvzruM5pLrO+5a/XwUMtHtdoVs9Pt9IVta/KR8LYXCQiZwV4ZsjMdjIVt4wNnn5LMdTj7bWSwWQra0Agr6QkRkBEOwhpAJtAmQjUAgIGRruVwOMQR7EjKBpkmygWZVsoXsQQX0XchEMBgUshEKsc/amlZAFV9Xed0fCDmHDu29vT0ht/C77+/vC5nKl8vlhq+rgVZBD0LOIXzQpU1uXV5eCtnSu5A5bNd3wbQKuudktI3z83NORjuE8GH1Y0vnfnKofrC/DiBUQRpCHxhC7qEKSiQSDCEHMPTCy8nI1JdCoZDdHLw8B4REYgjZQPgwhHYLlWY0GhUy9VAsFm9en/B+d1Umk8luulXJLXTHs1v7/0GoX11d8UVkthq63Gr4/PJuaG/bN57fkJhEsyr6xdiy4Q5aNNCxjWZV9IuxZePvIHTwiAOGXHzUwQZGUpoZFV0w5Kpsu+4HjO8eSG6bfa8AAAAASUVORK5CYII=')
252 | formattabdiscord = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAASEAAAAWCAYAAACPFSq6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAJSSURBVHgB7dy/ihpRFAbwM9e/oKgoqCDoYCFoZZku5g2msN99g2yeYPUNsm9gehW3TBVTpYyd7diIjbCiFsqMk3NkV2QTYSHrTHG/H1zn3nFsP86544xBF2RYOBy+VUp95GWTh0nwZolEgpLJJOVyueMA0NBEhuu6jyN26SLj9QkJn2g0+pmnd7Ik+G/xeJzK5TIVCgUC0JTteV53OBz2Xn8ROl9w/pgcQL94avGIE7wLx3FouVwej9lslgA0lDEMw6rX65npdPr9/ItTCD0H0A9C23U16/Wadrsd2jPQFgfRh0ajYXIQPb6cO4VQKpX6TQigq9tut6iIQHfN84pIyUc+n78nBJBv5vM5rVYrAtAVV0R37Xa7JXMlbRgfOwS+ms1mBKAz3qiW4odUJBJpEfhOKiFpywA01rIsKyPt2A1BIOSOGYDOlFKW4t7MJAjEZrMhAJ1xS9aUSsgkCITrugSgM66E0ooAAAIkIWQTBCIUChGAzg6Hw0pCaEIQCHnAFUBnvCc9UZxEPwkCkcng+WDQG+fPWDmO0+P5E4Gv5In6WCxGABrrjUYjWz0xXjwQ+KpSqRCAzvjucFeOx7tj+/3+K2GD2jcSQKiCQGe8F9SVKkjmxxCSaojv138iBNHVSRsmLzgD0Ni3fr/feVmc/ie0WCxsBNF1lUolqtVqBKCxh8FgcHt+wvjXVfl8vsOHe4J3Ia93rVareJkZ6Mzm8YUD6K93TRuXflEsFk3eOGrx9Ob5+TKT4M0keNLp9LH9kiOAbjzPszk7xjyk/Rpfuu4PASimkfscM+QAAAAASUVORK5CYII=')
253 | formattabcustom = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAASAAAAAWCAYAAABg10GEAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAI0SURBVHgB7dyxasJQFAbgkxsFq4MOioOLq4PQsVvtG1hxr2/Q9glsn6DtG9g3sE9Q+waCi2MUFI0OEVQURHuOVGlLHQqaDOf/QHITkyXC77k3udeiA4rFYsIYU7Es63Kz2ZzzNksASqxWK3JdlzzPo9lsRovFguBfmpwbTc6NN76P9UMnWb8PfAXPLV94x7sJAlBEgqfX61G/39+24SgcDqPH0WhU+/3FjwDi8Mly+Lyj2gGNpMpptVqodk6EQ+iZQ+j++zF710D4gGYIn9PjbLmIRqPZ+Xz+tjtm9g2EDyiG8PEHZ0wllUo97fa3AVQqlaoIH9Cq0+kgfHwk48vJZLIgbSNdLz7wQAAKSfB0u10Cf3HmVGXLPS9TIAClJpMJgf84gAoJZrhxQwBKDYdDgmCEw+Gi4UdjWQJQarlcEgTm3GDwGTTD4HNwOHvihgAAAiJdMIcAlIpEIgTB4OyZSBesSQBKxWIxgsA0pQL6IACl4vE4QTBs226Y9Xpd47ZHAAql02kKhUIEvqsNBgPHbrfbi1wudyYvBhGAMsYY4j9hvJDoM77v19Pp1Ns+BeMf4BmD0aBVJpPBYLS/HqX6kcZ+PSAsxwGaYTkO37y6rlvZ7ezfA6rX6w5XQleohEAjqYDy+TwqoRPibHn5Hj7C+uvEcrn8wCdXCUAhmR0vS3TA0Tj8uf9rbWjr0BVfXbKCTFaV+WLomoEm0hWTgWmZrCrzxdA1+zdZB7rBn9fxeNw4dNInGPP3ET/ageAAAAAASUVORK5CYII=')
254 | exporthoverlbl = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAADgAAAAaCAYAAADi4p8jAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAM3SURBVHgB5VjdahpBFD5uFgKBhA35JSEhgqIo2NQXqL6BiF63fYL2DZq+QfIETa8V8Q1sr72oCILihaIogl6IgqD40/NNnGU1aleqNqYfLDM7Z2bnfOecmTOzRK8clkXCQCCgKYoSsFgs70ajkY9LjZs1+vdI4WGdfsZiscdFHWcSHBP7xIQ+08sgtAhFJvrIRL/OEj4jyORumFyCyd3QdqE4GAz88Xi8aGycIBgOh2+Hw2GCXr7X5qHJzvFHIpGUbNAJwnM7Ozu/aHvJSTTZk2+lJxXZirCk7ScHaOyoBPYRvAiCwWDwyxauuUXAPoIN8ilEmWDhlREEEKpWlcl9MEsuk8lQp9OZaHO73bS3t0frRrfbpXa7TcfHx2aHiByuIombHcEWIavVanqSfr9PqqqKEmN3d3dpluLALJlxXK/Xo2q1ugxBAjeVy1v6S6TTabq4uBCTQ2F42uv1Ui6XE96F5SVZh8MhFEa/QqGgR4RRViqVRBvGod/19bXoCySTSXI6nbS/v29GNd/SBBuNBrVaLVE/ODgQpEAOSkE5KHJ5eSnksD4el8slCJTLZSGHgvAG2jwezzMZxmAOhD9kEhgjjWASmkJLAh8HMTxyIpA8OTmhbDZLR0dHdHZ2pvdHXSp5enqqewyGgmGMMngM5OQ3jeTkXEuQEwTxhSYtkf8QGrPWAeceUU5vQghNCam87G98N9ZXCYUPqs1lBkARrAv5APBGvV4X4QWClUpF74+wQj8QRf3w8FC0Y23WarUJmaZpuqHmwWgwE0ipuHKYTROYHGtNbgIA1gmUw0YA79rtdsrn83R+fi7kCClsOjAM5FdXV6Id/fAdbFAAZNih5TzG8ARgENZV9MecJkM1ZRnnwW+0BkAZKA3l4al5qQCYJrQKsEE+Knx7iNPTOlwr5lkcxNZBjlHEZVjhU3eTmT7QGmCz2czmq5WDo/I7SpEm2Iv3TLJIK8YmjnBzUIxGo3eoCILwIpP00wZCdQPAIdsvX/REjwsibsO03STFjd742+L/+idjRCgUuuOwfb8FRJus4wOnm3sstWmh5U+jx3nSx9U3tIKbxwqAXR+kfuCQgjQ3i5jEbwG9mpu35/AZAAAAAElFTkSuQmCC')
255 | exporthover = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAACkAAAApCAYAAACoYAD2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAPQSURBVHgBzZnfS1NhGMef951OysRR+AsCp+VlsOmNYqVCQVqhXmRQF1rRXaDeBV24/QVZt6LNC4Xqolnpugg2yx9dtWV3hnRuQjGIQVY02Xl7nnPQzja3nR+b2wf03c6eA9+97/PrPGNgkhdBl8Nugz6w8Q4A4cJLDvxzakwkxkASgkkA8mIsBqH+rogEJmBGjElYWSkMAWe9QkAnGARFh4QQ05fbIz5D9+k1fLPSMhyXZQ/e4QDrSLj7Xr1is4oMBF1OUcaemNk5HUixmOjK5gY804eB1ZZBuZSF8ySQcNrtLLyw4hrJZJRWZGC5eUyWZV+OjjcTDgyuh4HV5rF0BgcetyIQhAcOGc6Zp7vtozf5eopIJUCEPA4FgnMx1N0WmdZeSxBJQUI+eAhHnIkoBpNbG0wJPinbWbDAAglHGWYT7YV9kfPLriFIrBgFg7KJNuL3j3t+2f0VdIj0P9uG2akt+PUzDkYpr7BB77UquHmnTo85HXsDHnuUqwL17eIcCpx49M2UQILuoy/of7qtx9xRSiUYKaF/TLBBoaNAvl34oayjD+rhQs9xMMrn8A7cv/cFXj7/Dn3Xq7PaY0rqxWWcK2WP6asoOzvqDp5xHwMzVNfaDdmTb1JTw2V73kpeTrDZoQ99kvrB4sUG0MGZEE7IERT5A5fW9AaGTpirBP3Rqdf8Ys8J2Fj/DTV1qb41M7UJs5NbyuuJx5gB0H+TUw3dRwHX2HQUDOBgmB8FWEQrUMuN27V6c2JGOFhEK7Dx9BF1bVJXyokzk5tgFUsitQIpd7aer1Ret56rVN4TuRBKIiUwwRomZq3A5ORO77VCN9b/gEmkEkyYUWbomVHlFB5p30AV7p4jbXInoRQsH95FobbOWCLfAwNbwrIoPlGYg0HKj9ng7vDJrHb0BcxWKAJTpMSZDCEobhZ5LA5+KGJiHEKc+jUminM30R9D/W0RSUlB+GQ4B0UI+qPyQKaI3N0FHy5RKC6kvTGMIpKOHAdJXrBITV1ZwmqN/3oSMuTCkjuotwHOM7iL4Ya9NwllkdnELSj0sWNxiXHRpb2UIBInBxJajUIBEXjM/W2JU7aUBoOcVZat+6cZMMt4r5yNpIx40lbtV+9dHnxaSzvpyjUk8Gp7xHPQZxlbi9dLrhHGFKH5G72gD2JCHM009c0+6V3FIZaMM6I8jGCwAwvtYrAm+2Ayups0dcqh7KoTrIK7J9L430EY7iRJLE5mB5mJfEo7x7EE/y0HX787ojvVmWh3VVQ3gE51ns7qmfrU6dSYSGpDzSIQx99xKsBvRJiWf1+Xf40B4dLKAAAAAElFTkSuQmCC')
256 | exportbtn = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAACkAAAApCAYAAACoYAD2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANwSURBVHgBzZnNTttAFIVvnIg/CclICBBI1NkV2NBddzW77hrBA0CXXVV9AmDXZd6gdA8oPEHDrrvABtjVAoEAIRGEQKrET8+xxqmT2GTGSYg/CWbGHicnd+bembnOSEIKhYJtWVYhk8l8QHP++fnZRt0J7qPtoe2h6qG++/T0VC6VSp4kIGPSWQlbwZd/QtMVc8oQ/HN7e3vD5CFtkUtLS19RrOHPlvahddd1xbYUCes52Wz2hySzXCu8x8fHhVbTIPvSTVhvGcNbQvWtdAd/+szMzPw9PDz8HdcpVuTi4uIq5l4R1QHpLgP4no8QKhC6G9UhUqQSuCavCL7PjRPaJJIOgge+Sw+g0NnZWQ9C9+uuhxvKSSrSGQ9OShXO9C7sTFb4LibxL+mtQGKraFKjNtyYhwzSK5IOHMzPm8Dja8MNkX/Cy1ocFxcXcnZ2Jg8PD2JKLpeTsbExmZqa0unOYc9j2KuWEriiK/D4+DiRQMLn+APPz891uvsxlJUc/0Hgss5TV1dXfpnP52V0dFRMub29laOjI7m8vJSJiYmW/dUeoWjRo0VzyYP5/XJ4eFiS0NfXJ4a4alNjuZJiuB201H4wtVAfHceRDkHHqlQquo6hy3wO+zoHarV601nu7u6kv7+/6R699vT01K+fnJz487cx1PA5fsbQ0JAYYOd0Qk/A5ORk5PWwwPA10iiUkcEQx5I2CQscHBz0y8BSUeKT0JbIsAhaaGRkxK/btl2zWCeEWjzVSQIYmMMCG4M722Gh9/f3khCPc7IqCeCQjo+P+9aLC+4USme5vr5OEsj/i8R5eB8Bc14MwXZKpqenW/bjD0i6Qik8BvOypBgmFixYsiQphpkPi/s11MuSTvzUjB+CYNIdSSFMybD0RcKkGygSeXkX8YI0jC+SQw4HWpc2Cdb0qLXdFOaKgnrdzgJnbp4WXek93tbWVm2Rr1sWsXP5LL0fdh7AFsIX6kTSk2Dmb9JDOO0as2xNaRacdffm5uY4DVx5ZShwc3OzKcUTmbA6ODgov7ZQJXAt6l5s6k8JvUH1vXQ3/VfFFPsCRynGddDK9DJHZLKDN6BMZ22V6dXOmTPLgWK1Q2KraniLOp2N3j4QlZJhxsMVc/j2YYcrnNozaGEsMkBNA5eJTzTfqFOnE9xX73EoZE+9xymZCAvzD9A0d76ciBYHAAAAAElFTkSuQmCC')
257 | copyformatentrybg = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAAR8AAAAsCAYAAABczrz6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAI/SURBVHgB7d0/jtNAFIDxN3ZFF27gLlKadUm33hskUtwvN+AGYW/AdpRQIjnCN1hzAkwTpUxJ6QP4D28sOwqEsFoRzzTfT/JmZGfbT8/jRDHyjOVymQRBcGuMSbqui/Q1EgA4V+lRaiPKuq4/53le/uvN5tIFG50wDDe6TAQAXq5omuZBI1T87eJZfDQ6M510NlqvdwIA/0nvmD60bWsjVJ2e/y0+Gp5Ip52vuowFAK6n1ClopQE6jCeO8bETj4bnSQgPgGnYAN2NE1AwnrW3WkJ4AEwnHjrT6yefYXP5SQBgYrqffJdlWdFPPsNTLQCYnG5A970xaZrGuhP9XQDAETv9BHVd3wsAOKQDj/3wcnAjAOCQTj63ds+HJ1wAXItsfGYCAG5FgQCAB8QHgBfEB4AXxAeAF8QHgBfEB4AXxAeAF8QHgBfEB4AXxAeAF8QHgBfEB4AXxAeAF8QHgBfEB4AXxAeAF8QHgBfEB4AXxAeAF0HXdQcBALeqwBhzEABwq7STzzcBAIfatv1hfzSwEABwSIeeT0GWZYWuCwEAN4o8z8v+aZfu+zwIADgw9ia0f3a73WGxWLzW5RsBgOk8brfbj3Zx/JxP0zTv9aUUAJhGOXSmd4yP3oNVemElBAjA9dnwrGxnxhPh6dX9fl/N5/Mv+gTslXALBuA6HjU8bzU8P09PmkvvXq/XiT4O2+gyEQB4ucJuLg9P1M+Y5/47TdO4bdt7Xd7oEesxEwD4g/2qlv3GhB72g8vFpeiMfgHJzqfuxjF4XwAAAABJRU5ErkJggg==')
258 | #reused
259 | # submitbtnicon
260 | # submitbtnactive
261 |
262 | #msgb assets
263 | errormsgb = PhotoImage(data='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')
264 | infomsgb = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAAcIAAACxCAYAAABX2b2eAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAgkSURBVHgB7d09aJz3HcDx/53kYgdasB0MFtZiUwdiQVzSDmnUJbK32EOhWgpNt9BOAS8dWujUrWuhm9OtyhZ5s7KZZKlBhTgQgdVBrrwkMniwPVSn6idFsV5Olu7R3XOn+30+EEz8cpYWf/k9z/+lMTExsVYAIKlmAYDEhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDURssxcv5Co1x6o1HOjzfL2Hgpp06Vcvps4/tff/FsrayslPLkm1KWl1plcWFt4z8A2E9jYmJioEsxth6/Kz9plsn3GuXka41Sxf0vWuXL+Vb5al4UAdhpYEN48XKjXL8xsvFjtzz5dq3cvdMq9z9vFQAIAxfCk6+VcvNXI+Xtn/fu9WUE8e9//d/6jwWA5AYqhDH9ffC7kcqPQDs1tz4d3p1dLQDkNTAhvHajWa6/P1Lqtvxorfzjb6ZDgKwGYvvEjemRvkQwxGKcD2+NltNnCwAJ9X0irDIJvnhWyr++aJUH8631iW5z20SIqJ0f31xk02nYvDcEyKmvIawSwcWFVpm53doI16u8O9UsN6c7++x4TBoxjNACkMPIuXPn/lz64M2rzfLLX3cWqrnZ9Qh+vFpePD/49y79Z21j3+DVnzXL6IlyKD/8UaP84ESjfP3AfkOALPryjjAeW96c7uyvjknw7p3OVnjGhPfpTGd/JibJN6/Ws2oVgP7rSwjjcej2o9EOIx6HthP7DmPbxX4b7+NUmYcdHrM2/cHoxucCMPxqP2s0psFON8vHwph27wRjtenk1MvP2m/By9zsarl06/Df6qn1CP7ivZGOJ1AAjp/aJ8Iq2yS+mt87De6OYIgpM7ZC7J7m4uDtThfAxCNSUyHA8Ks1hFWmwbDyzc7/j4ltdwRf/h2N8tN39v7ayredPR7dmgoBGG61hrDqpvknKzsjFtcxvUq794/PD7HSdLd3p1zXCDDsav2X/uIb1VZjju0K30ELbZ4/6872h1PfLcQBYHjVFsI48aXTlaJbpn878v0UuHk906u/7HaX8cYlvlVcuWoqBBhmta0avfTj6pNVBPSjPx3uS40VprtDGO8mx8YrTqPjJkKAYVbbuFP1sWgnYtvE7MzeFaYXL1f/Ng96HwnA8VZbCHt9x2BEcPOc0L3T4EGPUl8l3hNWfaQLwOCrLYRnzpSeiT2Cmxvp974brHKKzW6uaAIYXrWF8PTrvZuqPv1ktW0E43aLKvsWdxNCgOF17JdExuKY+5/vfS8YAezXZb8AHB/HPoTtIjh2IQ7OFkEADlZbCHtx2W0skGm3VeI3v+/urhC31gMMr9pC2K3TXrZbXtr7mbFVoturPJ+7sR5gaNUWwrgkt+ufudT+3WC37T7rFIDhUV8Il7ofk3YrRasepbafx0trPXmsC8BgqC2EiwvdD+HY+N4v/0yXH4v+95FpEGCY1RbCx4+6P1m9/U5zxx6/2DfY7ct0210KDMDwqO3Q7VhwEtPVpS5eaxTHn/3hLyc2ps3YMtGLY9weLpgIAYZZrfsI52ZXSy/E1Uy9iGBs1vd+EGC41RrCmNyO0568e3MeiwIMu9pPlrnb5alwcaG18Zlxwkw3IxvRfmyhDMDQq+0d4Zb7648bJ6eaXbnwdm52PYJ3Xob19NlW+eiPo11ZMDNzuzePcQEYLH05a3R25uiRielvewQ3f26tKxPnvc9abfcoAjB8+hLCeOx477OjBWu/UB31BJvNwHo3CJBF326fmJ1pHWlrwvkL7R+tjl2o/sh164LfF89MgwBZ9PUapk9ur1Ze4BJ7CK/f2HnVUmyun7xW/Vv658erHokCJNOYmJjo67/8cVPEh7dGK98CH2eBfjnfKqdfb5aJt6pvqo/FMbGQB4Bc+h7CcNQYHkU8Do1J0FFqADkNRAhDPOq89n6zTE7Vd7N8PJaNd4IehwLkVfs+wv3EWaSxgGZ5afPdX6+nw9giEatDLYwByG1gJsLt4lHp5FSjJ9Ph5kk0rZ5cCwXA8TOQIdwSQbzy1noQrx1tQoz3gA/XAxhToAACsN1Ah3C7uGHiytVmOT9eyqXLB2+RiPd+sU9x8etWefDv4hEoAG0dmxDuFhvn40zRWGRz8tTmz8Xil5j+VlaED4DDGZjFMp1adjMEAF3Q15NlAKDfhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDURp8+fVoAICsTIQCpCSEAqQkhAKkJIQCpCSEAqQkhAKkJIQCpCSEAqQkhAKkJIQCpCSEAqQkhAKkJIQCpCSEAqQkhAKkJIQCpCSEAqQkhAKkJIQCpCSEAqQkhAKkJIQCpCSEAqQkhAKkJIQCpCSEAqQkhAKkJIQCpCSEAqQkhAKkJIQCpCSEAqQkhAKkJIQCpCSEAqQkhAKkJIQCpCSEAqQkhAKkJIQCpCSEAqQkhAKkJIQCpCSEAqQkhAKkJIQCpCSEAqQkhAKkJIQCpCSEAqQkhAKkJIQCpCSEAqQkhAKkJIQCpCSEAqQkhAKkJIQCpCSEAqQkhAKkJIQCpCSEAqQkhAKkJIQCpCSEAqQkhAKkJIQCpCSEAqQkhAKkJIQCp/R/ALv6txh3C5gAAAABJRU5ErkJggg==')
265 | msgbbtn = PhotoImage(data='iVBORw0KGgoAAAANSUhEUgAAAIAAAAAsCAYAAACt4LBeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAALtSURBVHgB7Zy/ctpAEMZXB4VLypRyF4bCdpcuKl1iiT7OE2RcusLu0vkR4nQpQCFdusidu5AG6KI8QeTSM/zJt/jEiAAy4PEY3e1vRqNFiIb9bu9u7/YcegL1er2Cm1cul99OJhMX16HjOPysQsJzkOCK+Y7/uTscDm9gR51OJ6EtcWgL4HivVCo1YR6SOHsX6IxGo88QQoc2ZCMBBEFQRyu/gvpcEnaRGP65DMPwet0frCUAtHgXLf4TTI+EItBFRDhBQIgfe7H02Ato9R+UUl9gviahKLyCz06r1ep9v9+/zXsxVwC+7zcR7j/C3COhaOzBd8cQAUEEN6teWikA7fwLEgoNfOjliWCpAMT5ZpEnggUBcJ+vw75gEFoEd/+PCeZmAXq0/5Nkbm8qCWYHR9nZgcp+C+d/JXG+yVT0dH7GTADo90/pIbMnmI3HCb30QzYCNEmwhavUmAqAFSHpXatwG42Gx0YaAd6RYBVYM5hGfIeXdDEw+EuCbfCMYF/B+R4JNjLdy6HG47FHgpVwcgiLRuqABCuB710eBErix14OWAAuCbZSkQhgNxVFgtWwALbeUiwUnkQhIyQCsJdYcYEBCbaScCLoDwlWAt//4kRQRIKVoPuPFBYEIpKBoK1EShcWyjjAPr6x76d5AAwEL0mwCkT+a77PdgX7vv9bdgVZQ9xut/fZmGUC4fwzEqyAK4hTe64uIAiCHyQVwKbTRes/Sj/MrQWgX3hPMiMwGd4GdpJ9MFcaNhgMklqtdg/zmATjQDd/Hobh9+yzhdrAXq93CxFw1+CRYAw802u1Wgs1n0urgyGCSERgDtr5F8u+W3k+gIjADPKcz+SeEKJFcAfzDckpIUWDj5I7Xxb2s2xySBRXDkvxaDGIeEa3ziFRGx0TpyuIm5Ix3FliXGeY5699XuBWB0Xq8mKuJ6yT8NJMF/N0Xx/RhmwlgBRdV+jRw0CRC0x4h7FLstP4uUh4C5/excUbeTjUP+mo2H+lrvq95RsvjQAAAABJRU5ErkJggg==')
266 |
267 | ###commands
268 |
269 | def msgb(title:str,type:str,msg:str,optionright:str,optionleft:str = None):
270 |
271 | msgbwind = Toplevel()
272 | msgbwind.grab_set()
273 | msgbwind.geometry("450x175")
274 | msgbwind.configure(bg='#2C2C2C')
275 | msgbwind.title(title)
276 | msgbwind.resizable(0,0)
277 | centerwind(msgbwind)
278 |
279 | msgbimg = Label(msgbwind,bg="#2C2C2C",borderwidth=0)
280 |
281 | if type == 'error':
282 | msgbimg.config(image=errormsgb)
283 | msgbimg.place(x=0,y=0)
284 | msgberrording = threading.Thread(target=ahk.sound_play, args=(errormp3path,))
285 | msgberrording.start()
286 | elif type == 'info':
287 | msgbimg.config(image=infomsgb)
288 | msgbimg.place(x=0,y=0)
289 | msgbding = threading.Thread(target=ahk.sound_play, args=(notifmp3path,))
290 | msgbding.start()
291 |
292 | def btn1click():
293 | msgbwind.destroy()
294 | return optionleft
295 |
296 | def btn2click():
297 | msgbwind.destroy()
298 | return optionright
299 |
300 | if optionleft == None:
301 | pass
302 | else:
303 | btn1 = Button(msgbwind,bg='#1E1E1E',fg='#C2C2C2'
304 | ,image=msgbbtn,borderwidth=0,activebackground='#1E1E1E'
305 | ,text=optionleft,font=('Nexa Bold',12),justify=CENTER
306 | ,activeforeground='#C2C2C2',command=btn1click,compound=CENTER).place(x=175,y=115)
307 |
308 | btn2 = Button(msgbwind,bg='#1E1E1E',fg='#C2C2C2',image=msgbbtn,borderwidth=0,activebackground='#1E1E1E'
309 | ,text=optionright,font=('Nexa Bold',12),justify=CENTER
310 | ,activeforeground='#C2C2C2',command=btn2click,compound=CENTER).place(x=310,y=115)
311 |
312 | msglbl = Label(msgbwind,bg="#2C2C2C",font=('Nexa Light', 10)
313 | ,text=msg,fg="#C2C2C2",wraplength=320,justify=LEFT).place(x=80,y=33)
314 |
315 |
316 |
317 | def note(msg:str,color:str = 'yellow',timer:int = 5000):
318 | try:
319 | root.nametowidget('note1').destroy()
320 | root.nametowidget('noteclosebtn').destroy()
321 | except:
322 | pass
323 |
324 | if color == 'red':
325 | ncolor = rednote
326 | ncloseclr = rednoteclose
327 | bgcolor = '#C53131'
328 | fgcolor = '#C2C2C2'
329 | errording = threading.Thread(target=ahk.sound_play, args=(errormp3path,))
330 | errording.start()
331 | else:
332 | ncolor = mainwindnote
333 | ncloseclr = mainwindnoteclose
334 | bgcolor = '#B5C531'
335 | fgcolor = '#000000'
336 | notifding = threading.Thread(target=ahk.sound_play, args=(notifmp3path,))
337 | notifding.start()
338 |
339 | def endnote():
340 | note1.destroy()
341 | noteclosebtn.destroy()
342 |
343 | def destroy_note():
344 | lstbximglabel.config(image=lstbximg)
345 | lstbx.config(height= 14)
346 |
347 | root.after(500,destroy_note)
348 |
349 |
350 | lstbx.config(height= 12)
351 |
352 | lstbximglabel.config(image=lstbximgshort)
353 | note1 = Label(root,name='note1',bg="#2C2C2C",font=('Quicksand SemiBold', 9)
354 | ,justify=LEFT,image=ncolor,text=msg,fg=fgcolor,compound=CENTER)
355 | root.nametowidget('note1').place(x=105,y=422)
356 | noteclosebtn = Button(root,name='noteclosebtn',bg=bgcolor,image=ncloseclr
357 | ,borderwidth=0,activebackground=bgcolor,command=endnote)
358 | noteclosebtn.place(x=325,y=437)
359 |
360 | root.after(timer,endnote)
361 |
362 | def addwind():
363 | addwindow = Toplevel()
364 | addwindow.grab_set()
365 | addwindow.geometry("394x290")
366 | addwindow.configure(bg='#2C2C2C')
367 | addwindow.title("Guava - Add an account")
368 | addwindow.resizable(0,0)
369 | centerwind(addwindow)
370 |
371 | #render entry boxes
372 |
373 | #name
374 | namelblbg = Label(addwindow,image=entrylabelbgimg,bg="#2C2C2C").place(x=28.5-7,y=20)
375 | nameentrybg = Label(addwindow,image=entrybgimg,bg="#1E1E1E").place(x=168.5-7,y=28.5)
376 | namelbl = Label(addwindow,bg="#1E1E1E",font=('Nexa Light', 11)
377 | ,text='Name',fg="#C2C2C2").place(x=43-7,y=36)
378 |
379 | name_var = StringVar()
380 | name_entry = Entry(addwindow,textvariable = name_var,show=None,font = ('Nexa Light',11)
381 | ,width=17,relief=FLAT,bg='#535353',fg='#C2C2C2',insertbackground='#C2C2C2')
382 | name_entry.place(x=175,y=37)
383 | name_entry.focus_set()
384 |
385 | #username
386 | usrnamelblbg = Label(addwindow,image=entrylabelbgimg,bg="#2C2C2C").place(x=28.5-7,y=20+65)
387 | usrnameentrybg = Label(addwindow,image=entrybgimg,bg="#1E1E1E").place(x=168.5-7,y=28.5+65)
388 | usrnamelbl = Label(addwindow,bg="#1E1E1E",font=('Nexa Light', 11)
389 | ,text='Username',fg="#C2C2C2").place(x=43-7,y=36+65)
390 |
391 | usrname_var = StringVar()
392 | usrname_entry = Entry(addwindow,textvariable = usrname_var,show=None,font = ('Nexa Light',11)
393 | ,width=17,relief=FLAT,bg='#535353',fg='#C2C2C2',insertbackground='#C2C2C2')
394 | usrname_entry.place(x=175,y=102)
395 |
396 | #password
397 | passwlblbg = Label(addwindow,image=entrylabelbgimg,bg="#2C2C2C").place(x=28.5-7,y=20+130)
398 | passwentrybg = Label(addwindow,image=entrybgimg,bg="#1E1E1E").place(x=168.5-7,y=28.5+130)
399 | passwlbl = Label(addwindow,bg="#1E1E1E",font=('Nexa Light', 11)
400 | ,text='Password',fg="#C2C2C2").place(x=43-7,y=36+130)
401 |
402 | passw_var = StringVar()
403 | passw_entry = Entry(addwindow,textvariable = passw_var,font = ('Nexa Light',11)
404 | ,width=15,relief=FLAT,bg='#535353',fg='#C2C2C2',insertbackground='#C2C2C2')
405 | passw_entry.place(x=175,y=167)
406 |
407 | def pass_setting():
408 |
409 | def showpass():
410 | configdb.upsert({'always_showpass':'true'}, Query().always_showpass.exists())
411 | eyebtn.config(image=eyeicon,command=hidepass)
412 | passw_entry.config(show='')
413 | addwindow.update()
414 |
415 | def hidepass():
416 | configdb.upsert({'always_showpass':'false'}, Query().always_showpass.exists())
417 | eyebtn.config(image=crosseyeicon,command=showpass)
418 | passw_entry.config(show='•')
419 | addwindow.update()
420 |
421 | if configdb.contains(Query().always_showpass == 'true') == True:
422 | passw_entry.config(show='')
423 | eyebtn = Button(addwindow,image=eyeicon,bg="#535353",borderwidth=0
424 | ,activebackground="#535353",command=hidepass,relief=FLAT)
425 | addwindow.update()
426 | else:
427 | passw_entry.config(show='•')
428 | eyebtn = Button(addwindow,image=crosseyeicon,bg="#535353",borderwidth=0
429 | ,activebackground="#535353",command=showpass,relief=FLAT)
430 | addwindow.update()
431 |
432 | eyebtn.place(x=334,y=168)
433 |
434 | pass_setting()
435 |
436 | def submit():
437 | name = name_var.get()
438 | username = usrname_var.get()
439 | password = passw_var.get()
440 |
441 | def empty():
442 |
443 | if name == '' and username == '' and password == '':
444 | return '"Name", "Username" and "Password"'
445 | elif name == '' and username == '':
446 | return '"Name" & "Username"'
447 | elif name == '' and password == '':
448 | return '"Name" & "Password"'
449 | elif username == '' and password == '':
450 | return '"Username" & "Password"'
451 | elif name == '':
452 | return '"Name"'
453 | elif username == '':
454 | return '"Username"'
455 | elif password == '':
456 | return '"Password"'
457 |
458 |
459 | if name == '' or username == '' or password == '':
460 | msg1 = "{} Can't be empty".format(empty())
461 | msgb(title="Guava - Invalid Credentials",type='error',msg=msg1,optionright='Ok')
462 | else:
463 | for item in db:
464 | if item['name'] == name:
465 | msg2 = 'There\'s already an account with the name "{}", please choose another name or delete the existing one.'.format(name)
466 | msgb(title="Guava - Invalid Name",msg=msg2,type='error',optionright='Ok')
467 | break
468 | elif item['username'] == username:
469 | msg3 = 'There\'s already an account with the username "{}" added as "{}", please use that to login, or use the edit function if you want to change the stored password.'.format(username,item['name'])
470 | msgb(title="Guava - Account already added",msg=msg3,type='error',optionright='Ok')
471 | addwindow.destroy()
472 | notemsg = 'Operation Canceled!'
473 | note(notemsg)
474 | break
475 | else:
476 | db.insert({'name':name,'username':username,'password':password})
477 | addwindow.destroy()
478 | notemsg = 'Account added successfully!'
479 | note(notemsg)
480 | fetch()
481 |
482 | return
483 |
484 | def enterkey(event):
485 |
486 | if addwindow.focus_get() == name_entry:
487 | usrname_entry.focus_set()
488 | elif addwindow.focus_get() == usrname_entry:
489 | passw_entry.focus_set()
490 | elif addwindow.focus_get() == passw_entry:
491 | submit()
492 |
493 | addwindow.bind('', enterkey)
494 |
495 | submit_btn = Button(addwindow,image=submitbtnicon,bg="#2C2C2C",borderwidth=0
496 | ,activebackground="#2C2C2C",command=submit,relief=FLAT)
497 |
498 | def submit_btn_hover(event):
499 | submit_btn.config(image=submitbtnactive)
500 |
501 | def submit_btn_unhover(event):
502 | submit_btn.config(image=submitbtnicon)
503 |
504 | submit_btn.bind('',submit_btn_hover)
505 | submit_btn.bind('',submit_btn_unhover)
506 |
507 | submit_btn.place(x=334,y=220)
508 |
509 | def cancel():
510 | addwindow.destroy()
511 | notemsg = 'Operation Canceled!'
512 | note(notemsg)
513 |
514 | cancel_btn = Button(addwindow,image=cancelbtnicon,bg="#2C2C2C",borderwidth=0
515 | ,activebackground="#2C2C2C",command=cancel,relief=FLAT)
516 |
517 | def cancel_btn_hover(event):
518 | cancel_btn.config(image=cancelbtnactive)
519 |
520 | def cancel_btn_unhover(event):
521 | cancel_btn.config(image=cancelbtnicon)
522 |
523 | cancel_btn.bind('',cancel_btn_hover)
524 | cancel_btn.bind('',cancel_btn_unhover)
525 |
526 | cancel_btn.place(x=300,y=230)
527 |
528 | def editwind():
529 | if lstbx.size() == 0:
530 | return
531 | else:
532 | if lstbx.curselection() == ():
533 | note('Select an account first!','red')
534 | return
535 | else:
536 | selectindex = lstbx.curselection()[0]
537 | editname = lstbx.get(selectindex,last=None)
538 | account = db.get(accounts.name == editname)
539 | if account['name'] == editname:
540 | oldname = account['name']
541 | oldusername = account['username']
542 | oldpassw = account['password']
543 | acc_doc_id = account.doc_id
544 | else:
545 | print('Account not found in db')
546 | return
547 |
548 | editwindow = Toplevel()
549 | editwindow.grab_set()
550 | editwindow.geometry("394x290")
551 | editwindow.configure(bg='#2C2C2C')
552 | editwindow.title('Guava - Editing "{}"'.format(oldname))
553 | editwindow.resizable(0,0)
554 | centerwind(editwindow)
555 |
556 | #render entry boxes
557 |
558 | #name
559 | namelblbg = Label(editwindow,image=entrylabelbgimg,bg="#2C2C2C").place(x=28.5-7,y=20)
560 | nameentrybg = Label(editwindow,image=entrybgimg,bg="#1E1E1E").place(x=168.5-7,y=28.5)
561 | namelbl = Label(editwindow,bg="#1E1E1E",font=('Nexa Light', 11)
562 | ,text='Name',fg="#C2C2C2").place(x=43-7,y=36)
563 |
564 | name_var = StringVar()
565 | name_entry = Entry(editwindow,textvariable = name_var,show=None,font = ('Nexa Light',11)
566 | ,width=17,relief=FLAT,bg='#535353',fg='#C2C2C2',insertbackground='#C2C2C2')
567 | name_entry.insert(0,oldname)
568 | name_entry.place(x=175,y=37)
569 | name_entry.focus_set()
570 |
571 | #username
572 | usrnamelblbg = Label(editwindow,image=entrylabelbgimg,bg="#2C2C2C").place(x=28.5-7,y=20+65)
573 | usrnameentrybg = Label(editwindow,image=entrybgimg,bg="#1E1E1E").place(x=168.5-7,y=28.5+65)
574 | usrnamelbl = Label(editwindow,bg="#1E1E1E",font=('Nexa Light', 11)
575 | ,text='Username',fg="#C2C2C2").place(x=43-7,y=36+65)
576 |
577 | usrname_var = StringVar()
578 | usrname_entry = Entry(editwindow,textvariable = usrname_var,show=None,font = ('Nexa Light',11)
579 | ,width=17,relief=FLAT,bg='#535353',fg='#C2C2C2',insertbackground='#C2C2C2')
580 | usrname_entry.insert(0,oldusername)
581 | usrname_entry.place(x=175,y=102)
582 |
583 | #password
584 | passwlblbg = Label(editwindow,image=entrylabelbgimg,bg="#2C2C2C").place(x=28.5-7,y=20+130)
585 | passwentrybg = Label(editwindow,image=entrybgimg,bg="#1E1E1E").place(x=168.5-7,y=28.5+130)
586 | passwlbl = Label(editwindow,bg="#1E1E1E",font=('Nexa Light', 11)
587 | ,text='Password',fg="#C2C2C2").place(x=43-7,y=36+130)
588 |
589 | passw_var = StringVar()
590 | passw_entry = Entry(editwindow,textvariable = passw_var,font = ('Nexa Light',11)
591 | ,width=15,relief=FLAT,bg='#535353',fg='#C2C2C2',insertbackground='#C2C2C2')
592 | passw_entry.insert(0,oldpassw)
593 | passw_entry.place(x=175,y=167)
594 |
595 | def pass_setting():
596 |
597 | def showpass():
598 | configdb.upsert({'always_showpass':'true'}, Query().always_showpass.exists())
599 | eyebtn.config(image=eyeicon,command=hidepass)
600 | passw_entry.config(show='')
601 | editwindow.update()
602 |
603 | def hidepass():
604 | configdb.upsert({'always_showpass':'false'}, Query().always_showpass.exists())
605 | eyebtn.config(image=crosseyeicon,command=showpass)
606 | passw_entry.config(show='•')
607 | editwindow.update()
608 |
609 | if configdb.contains(Query().always_showpass == 'true') == True:
610 | passw_entry.config(show='')
611 | eyebtn = Button(editwindow,image=eyeicon,bg="#535353",borderwidth=0
612 | ,activebackground="#535353",command=hidepass,relief=FLAT)
613 | editwindow.update()
614 | else:
615 | passw_entry.config(show='•')
616 | eyebtn = Button(editwindow,image=crosseyeicon,bg="#535353",borderwidth=0
617 | ,activebackground="#535353",command=showpass,relief=FLAT)
618 | editwindow.update()
619 |
620 | eyebtn.place(x=334,y=168)
621 |
622 | pass_setting()
623 |
624 | def submit():
625 | name = name_var.get()
626 | username = usrname_var.get()
627 | password = passw_var.get()
628 |
629 | def empty():
630 |
631 | if name == '' and username == '' and password == '':
632 | return '"Name", "Username" and "Password"'
633 | elif name == '' and username == '':
634 | return '"Name" & "Username"'
635 | elif name == '' and password == '':
636 | return '"Name" & "Password"'
637 | elif username == '' and password == '':
638 | return '"Username" & "Password"'
639 | elif name == '':
640 | return '"Name"'
641 | elif username == '':
642 | return '"Username"'
643 | elif password == '':
644 | return '"Password"'
645 |
646 |
647 | if name == '' or username == '' or password == '':
648 | msg1 = "{} Can't be empty".format(empty())
649 | msgb(title="Guava - Invalid Credentials",msg=msg1,type='error',optionright='Ok')
650 | elif name == oldname and username == oldusername and password == oldpassw:
651 | editwindow.destroy()
652 | notemsg = 'Operation Canceled!'
653 | note(notemsg)
654 | else:
655 | db.update({'name':name,'username':username,'password':password},doc_ids = [acc_doc_id])
656 | editwindow.destroy()
657 | notemsg = 'Account edited successfully!'
658 | note(notemsg)
659 | fetch()
660 |
661 | return
662 |
663 | def enterkey(event):
664 |
665 | if editwindow.focus_get() == name_entry:
666 | usrname_entry.focus_set()
667 | elif editwindow.focus_get() == usrname_entry:
668 | passw_entry.focus_set()
669 | elif editwindow.focus_get() == passw_entry:
670 | submit()
671 |
672 | editwindow.bind('', enterkey)
673 |
674 | submit_btn = Button(editwindow,image=submitbtnicon,bg="#2C2C2C",borderwidth=0
675 | ,activebackground="#2C2C2C",command=submit,relief=FLAT)
676 |
677 | def submit_btn_hover(event):
678 | submit_btn.config(image=submitbtnactive)
679 |
680 | def submit_btn_unhover(event):
681 | submit_btn.config(image=submitbtnicon)
682 |
683 | submit_btn.bind('',submit_btn_hover)
684 | submit_btn.bind('',submit_btn_unhover)
685 |
686 | submit_btn.place(x=334,y=220)
687 |
688 | def cancel():
689 | editwindow.destroy()
690 | notemsg = 'Operation Canceled!'
691 | note(notemsg)
692 |
693 | cancel_btn = Button(editwindow,image=cancelbtnicon,bg="#2C2C2C",borderwidth=0
694 | ,activebackground="#2C2C2C",command=cancel,relief=FLAT)
695 |
696 | def cancel_btn_hover(event):
697 | cancel_btn.config(image=cancelbtnactive)
698 |
699 | def cancel_btn_unhover(event):
700 | cancel_btn.config(image=cancelbtnicon)
701 |
702 | cancel_btn.bind('',cancel_btn_hover)
703 | cancel_btn.bind('',cancel_btn_unhover)
704 |
705 | cancel_btn.place(x=300,y=230)
706 | return
707 |
708 | def remove():
709 | if lstbx.size() == 0:
710 | return
711 | else:
712 | if lstbx.curselection() == ():
713 | note('Select an account first!','red')
714 | return
715 | else:
716 | selectindex = lstbx.curselection()[0]
717 | delname = lstbx.get(selectindex,last=None)
718 | for item in db:
719 | if item['name'] == delname:
720 | msg4 = 'Are you sure you want to delete "{}", this action cannot be reverted.'.format(delname)
721 |
722 | msgbwind = Toplevel()
723 | msgbwind.grab_set()
724 | msgbwind.geometry("450x175")
725 | msgbwind.configure(bg='#2C2C2C')
726 | msgbwind.title('Guava - Delete Confirmation')
727 | msgbwind.resizable(0,0)
728 | centerwind(msgbwind)
729 |
730 | msgbimg = Label(msgbwind,bg="#2C2C2C",borderwidth=0)
731 | msgbimg.config(image=infomsgb)
732 | msgbimg.place(x=0,y=0)
733 | msgbding = threading.Thread(target=ahk.sound_play, args=(notifmp3path,))
734 | msgbding.start()
735 |
736 | def btn1click():
737 | db.remove(accounts.name == delname)
738 | fetch()
739 | notemsg = 'Account removed successfully!'
740 | note(notemsg)
741 | msgbwind.destroy()
742 |
743 | def btn2click():
744 | notemsg = 'Operation Canceled!'
745 | note(notemsg)
746 |
747 | btn1 = Button(msgbwind,bg='#1E1E1E',fg='#C2C2C2'
748 | ,image=msgbbtn,borderwidth=0,activebackground='#1E1E1E'
749 | ,text='Yes',font=('Nexa Bold',12),justify=CENTER
750 | ,activeforeground='#C2C2C2',command=btn1click,compound=CENTER).place(x=175,y=115)
751 |
752 | btn2 = Button(msgbwind,bg='#1E1E1E',fg='#C2C2C2',image=msgbbtn,borderwidth=0,activebackground='#1E1E1E'
753 | ,text='No',font=('Nexa Bold',12),justify=CENTER
754 | ,activeforeground='#C2C2C2',command=btn2click,compound=CENTER).place(x=310,y=115)
755 |
756 | msglbl = Label(msgbwind,bg="#2C2C2C",font=('Nexa Light', 10)
757 | ,text=msg4,fg="#C2C2C2",wraplength=320,justify=LEFT).place(x=80,y=33)
758 |
759 | def openurl(site:str):
760 | if site == 'github':
761 | webbrowser.open('https://github.com/karimawii/Guava', new=0, autoraise=True)
762 | elif site == 'paypal':
763 | webbrowser.open('https://paypal.me/karimawi', new=0, autoraise=True)
764 | elif site == 'discord':
765 | if findapp('discord') == True:
766 | disurl = 'discord://'
767 | else:
768 | disurl = ''
769 | webbrowser.open(disurl+'https://discord.com/users/609230785769111554', new=0, autoraise=True)
770 | return
771 |
772 | def info():
773 |
774 | infowindow = Toplevel()
775 | infowindow.grab_set()
776 | infowindow.geometry("394x411")
777 | infowindow.configure(bg='#2C2C2C')
778 | infowindow.title("Guava - Info")
779 | infowindow.resizable(0,0)
780 | centerwind(infowindow)
781 |
782 | #socials
783 | socialsbglbl = Label(infowindow,image=socialsnversionbg,bg='#2C2C2C',borderwidth=0).place(x=31,y=345)
784 |
785 | #github
786 | def github_hover(event):
787 | githublbl.place(x=27,y=322)
788 |
789 | def github_unhover(event):
790 | githublbl.place_forget()
791 |
792 | githubbtn = Button(infowindow,image=github,bg='#1E1E1E',borderwidth=0,activebackground='#1E1E1E'
793 | ,command=lambda: openurl('github'))
794 | githublbl = Label(infowindow,image=githubhoverlabel,bg='#2C2C2C',borderwidth=0)
795 | githubbtn.bind('',github_hover)
796 | githubbtn.bind('',github_unhover)
797 | githubbtn.place(x=51-7,y=351)
798 | #github
799 |
800 | #paypal
801 | def paypal_hover(event):
802 | paypallbl.place(x=67,y=322)
803 |
804 | def paypal_unhover(event):
805 | paypallbl.place_forget()
806 |
807 | paypalbtn = Button(infowindow,image=paypal,bg='#1E1E1E',borderwidth=0,activebackground='#1E1E1E'
808 | ,command=lambda: openurl('paypal'))
809 | paypallbl = Label(infowindow,image=paypalhoverlabel,bg='#2C2C2C',borderwidth=0)
810 | paypalbtn.bind('',paypal_hover)
811 | paypalbtn.bind('',paypal_unhover)
812 | paypalbtn.place(x=91-7,y=351)
813 | #paypal
814 |
815 | #discord
816 | def discord_hover(event):
817 | discordlbl.place(x=107,y=322)
818 |
819 | def discord_unhover(event):
820 | discordlbl.place_forget()
821 |
822 | discordbtn = Button(infowindow,image=discord,bg='#1E1E1E',borderwidth=0,activebackground='#1E1E1E'
823 | ,command=lambda: openurl('discord'))
824 | discordlbl = Label(infowindow,image=discordhoverlabel,bg='#2C2C2C',borderwidth=0)
825 | discordbtn.bind('',discord_hover)
826 | discordbtn.bind('',discord_unhover)
827 | discordbtn.place(x=131-7,y=353)
828 | #discord
829 |
830 | #version
831 | versionlbl = Label(infowindow,bg="#1E1E1E",font=('Nexa Light',11),text='v1.0.0 - Beta',justify=CENTER,fg="#C2C2C2")
832 | versionlbl.place(x=240,y=351.5)
833 | #socials
834 |
835 | #flag
836 | flaglbl = Label(infowindow,image=flag,bg='#2C2C2C',borderwidth=0).place(x=167,y=311)
837 |
838 | y_offset = 40
839 | aboutframe = Frame(infowindow,width=307,height=205,bg='#1E1E1E',relief=SUNKEN,borderwidth=0)
840 | aboutbg = Label(infowindow,image=aboutbgimg,bg='#2C2C2C',borderwidth=0).place(x=31,y=40+y_offset)
841 | aboutframe.place(x=45,y=55+y_offset)
842 | aboutframe.lift()
843 |
844 | logosframe = Frame(infowindow,width=327,height=57,bg='#1E1E1E',relief=SUNKEN,borderwidth=0)
845 | logosframe.place(x=32,y=15)
846 | logos = Label(logosframe,image=logosimg,bg='#2C2C2C',width=327,height=57).place(x=0,y=0)
847 |
848 | def trough_link(event):
849 | # print(v.get()[0])
850 | y_add = v.get()[0]*275.5555555555555
851 | trough.place_configure(x=349,y=50+y_offset+y_add)
852 | return
853 |
854 | v=Scrollbar(aboutframe, orient='vertical',activebackground='#1E1E1E',bg='#1E1E1E',bd=0
855 | ,highlightbackground='#1E1E1E',highlightcolor='#1E1E1E'
856 | ,troughcolor='#1E1E1E',width=0,relief=FLAT,
857 | highlightthickness=0,elementborderwidth=0,command=trough_link)
858 | v.place(x=1000,y=0)
859 | v.lower()
860 |
861 | trough = Label(infowindow,image=scrolltrough,bg='#1E1E1E',name='trough')
862 | trough.place(x=349,y=50+y_offset)
863 |
864 |
865 | about=Text(aboutframe, font=("Nexa Light",10), yscrollcommand=v.set
866 | ,width=37,height=13,selectbackground='#1E1E1E',selectforeground='#C2C2C2'
867 | ,bg='#1E1E1E',fg='#C2C2C2',wrap=WORD,borderwidth=0,relief=FLAT)
868 |
869 | about.tag_configure("about_tag", justify='center')
870 |
871 |
872 | mytext = "Hey, my name is Karim, the developer of Guava and I'm from Egypt.\n\nI created this project because.. well I play League of Legends but also, I wanted to git gud in coding as well, I may be good at creating modern UI designs and styling stuff, but when it comes to coding my code used to come out not so pretty.\n\nSo I started looking for projects I can do that can heavily challenge my abilities and at the same time be something that I’m passionate about so I don’t quit (lmao).\n\nThat’s why I started developing guava, we were learning Tkinter in the Python course in college, so I wondered what else can I do with it, turns out, not much in today’s standards, since this library is so old, it looks kinda crap, but it has so much funcion in it and I could very well feel the potential, I wanted to push it to the limits, and design a GUI that looks modern and functions well, that’s where Guava came to my mind.\n\nBtw don’t ask me why I named it Guava, idk, I just like the fruit, maybe cause it has a lot of seeds in it just like the switcher can contain a lot of accounts (wow so dumb), I really have no idea, I also love yellow so why not.\n"
873 | about.insert(END, mytext)
874 | about.config(state='disabled',cursor='')
875 |
876 |
877 | v.config(command=about.yview)
878 | about.tag_add("about_tag", "1.0", "end")
879 | about.place(x=0,y=0)
880 | about.lift()
881 | about.bind('',trough_link)
882 |
883 |
884 | return
885 |
886 | def copy():
887 | if lstbx.size() == 0:
888 | return
889 | else:
890 | if lstbx.curselection() == ():
891 | note('Select an account first!','red')
892 | return
893 | else:
894 | selectindex = lstbx.curselection()[0]
895 | copyname = lstbx.get(selectindex,last=None)
896 | copyaccount = db.get(accounts.name == copyname)
897 | copyname = copyaccount['name']
898 | copyusrname = copyaccount['username']
899 | copypassw = copyaccount['password']
900 |
901 | for item in configdb:
902 | try:
903 | Cformat = configdb.get(Query().copy_format == item['copy_format'])
904 | currentCformat = Cformat['copy_format']
905 | except:
906 | pass
907 |
908 | format = currentCformat.replace('%u%',copyusrname).replace('%p%',copypassw).replace('%U%',copyusrname).replace('%P%',copypassw).replace('\\n','\n')
909 | ppc.copy(format)
910 |
911 | copybtn.unbind('')
912 | copybtn.unbind('')
913 | copybtn.config(image=copybtnsuccess)
914 |
915 | ding = threading.Thread(target=ahk.sound_play, args=(mp3path,))
916 | ding.start()
917 | copylbl.place_forget()
918 |
919 | def returncopy():
920 | copybtn.config(image=copybtnicon)
921 | copybtn.bind('',copybtn_onEnter)
922 | copybtn.bind('',copybtn_onLeave)
923 | return
924 |
925 | root.after(2500,returncopy)
926 |
927 |
928 | return
929 |
930 | def settings():
931 |
932 | settwindow = Toplevel()
933 | settwindow.grab_set()
934 | settwindow.geometry("360x336")
935 | settwindow.configure(bg='#2C2C2C')
936 | settwindow.title("Guava - Settings")
937 | settwindow.resizable(0,0)
938 | centerwind(settwindow)
939 |
940 |
941 | #GENERAL
942 | def generaltab():
943 | for i in range(1,15):
944 | try:
945 | settwindow.nametowidget('datatab'+str(i)).destroy()
946 | settwindow.nametowidget('datatab'+str(i)).destroy()
947 | except:
948 | pass
949 |
950 | for i in range(1,15):
951 | try:
952 | settwindow.nametowidget('copytab'+str(i)).destroy()
953 | settwindow.nametowidget('copytab'+str(i)).destroy()
954 | except:
955 | pass
956 |
957 | SettTabs.config(image=tabsgeneral)
958 | Gtab_btn.config(bg='#1E1E1E',activebackground='#1E1E1E')
959 | Dtab_btn.config(bg='#535353',activebackground='#535353')
960 | Ctab_btn.config(bg='#535353',activebackground='#535353')
961 |
962 | #name widgets
963 |
964 | def toggle_check():
965 | if configdb.contains(Query().disable_startup_msg == 'true') == True:
966 | DSMtog.config(image=toggleon)
967 | else:
968 | DSMtog.config(image=toggleoff)
969 |
970 | if configdb.contains(Query().always_showpass == 'true') == True:
971 | ALStog.config(image=toggleon)
972 | else:
973 | ALStog.config(image=toggleoff)
974 |
975 | if configdb.contains(Query().exit_after_login == 'true') == True:
976 | EALtog.config(image=toggleon)
977 | else:
978 | EALtog.config(image=toggleoff)
979 |
980 | def toggle_tog(togname:str):
981 |
982 | if togname == 'DSM':
983 | if configdb.contains(Query().disable_startup_msg == 'true') == True:
984 | configdb.upsert({'disable_startup_msg':'false'}, Query().disable_startup_msg.exists())
985 | else:
986 | configdb.upsert({'disable_startup_msg':'true'}, Query().disable_startup_msg.exists())
987 |
988 | elif togname == 'ALS':
989 | if configdb.contains(Query().always_showpass == 'true') == True:
990 | configdb.upsert({'always_showpass':'false'}, Query().always_showpass.exists())
991 | else:
992 | configdb.upsert({'always_showpass':'true'}, Query().always_showpass.exists())
993 |
994 | elif togname == 'EAL':
995 | if configdb.contains(Query().exit_after_login == 'true') == True:
996 | configdb.upsert({'exit_after_login':'false'}, Query().exit_after_login.exists())
997 | else:
998 | configdb.upsert({'exit_after_login':'true'}, Query().exit_after_login.exists())
999 |
1000 | toggle_check()
1001 |
1002 |
1003 | DSMtog = Button(settwindow,name='generaltab1',bg='#1E1E1E',borderwidth=0,activebackground='#1E1E1E'
1004 | ,activeforeground='#1E1E1E',command=lambda: toggle_tog('DSM'))
1005 | DSMlbl = Label(settwindow,name='generaltab2',text='Disable Startup Message'
1006 | ,font=('Nexa Light',11),justify=LEFT,bg='#1E1E1E',fg='#C2C2C2').place(x=30,y=63)
1007 | DSMdesclbl = Label(settwindow,name='generaltab3',text='disables the “Double click to login” message\nthat appears when Guava starts'
1008 | ,font=('Nexa Bold',7),justify=LEFT,bg='#1E1E1E',fg='#535353').place(x=30,y=85)
1009 |
1010 | ALStog = Button(settwindow,name='generaltab4',bg='#1E1E1E',borderwidth=0,activebackground='#1E1E1E'
1011 | ,activeforeground='#1E1E1E',command=lambda: toggle_tog('ALS'))
1012 | ALSlbl = Label(settwindow,name='generaltab5',text='Always Show Passwords'
1013 | ,font=('Nexa Light',11),justify=LEFT,bg='#1E1E1E',fg='#C2C2C2').place(x=30,y=63+90)
1014 | ALSdesclbl = Label(settwindow,name='generaltab6',text='will always show passwords when editing or\nadding accounts, this is also linked to the “eye”\nicon on both pop-ups'
1015 | ,font=('Nexa Bold',7),justify=LEFT,bg='#1E1E1E',fg='#535353').place(x=30,y=85+90)
1016 |
1017 | EALtog = Button(settwindow,name='generaltab7',bg='#1E1E1E',borderwidth=0,activebackground='#1E1E1E'
1018 | ,activeforeground='#1E1E1E',command=lambda: toggle_tog('EAL'))
1019 | EALlbl = Label(settwindow,name='generaltab8',text='Close After Login'
1020 | ,font=('Nexa Light',11),justify=LEFT,bg='#1E1E1E',fg='#C2C2C2').place(x=30,y=63+90+95)
1021 | EALdesclbl = Label(settwindow,name='generaltab9',text='will close Guava after the login is successful'
1022 | ,font=('Nexa Bold',7),justify=LEFT,bg='#1E1E1E',fg='#535353').place(x=30,y=85+90+95)
1023 |
1024 | toggle_check()
1025 |
1026 | DSMtog.place(x=280,y=0+30+30+20)
1027 | ALStog.place(x=280,y=20+130+20)
1028 | EALtog.place(x=280,y=40+230-30+20)
1029 |
1030 |
1031 | #DATA
1032 | def datatab():
1033 | for i in range(1,15):
1034 | try:
1035 | settwindow.nametowidget('generaltab'+str(i)).destroy()
1036 | settwindow.nametowidget('generaltab'+str(i)).destroy()
1037 | except:
1038 | pass
1039 |
1040 | for i in range(1,15):
1041 | try:
1042 | settwindow.nametowidget('copytab'+str(i)).destroy()
1043 | settwindow.nametowidget('copytab'+str(i)).destroy()
1044 | except:
1045 | pass
1046 |
1047 | SettTabs.config(image=tabsdata)
1048 | Dtab_btn.config(bg='#1E1E1E',activebackground='#1E1E1E')
1049 | Gtab_btn.config(bg='#535353',activebackground='#535353')
1050 | Ctab_btn.config(bg='#535353',activebackground='#535353')
1051 |
1052 | #name widgets
1053 |
1054 | def importfunc():
1055 | settwindow.withdraw()
1056 | root.withdraw()
1057 | restorefilepath = easygui.fileopenbox(title='Guava - Choose Restore File',default='C:\\*.json',filetypes='*.json')
1058 | root.deiconify()
1059 | root.lift()
1060 | settwindow.deiconify()
1061 | settwindow.lift()
1062 |
1063 | if restorefilepath == None:
1064 | return
1065 | else:
1066 | importdb = TinyDB(restorefilepath, sort_keys=True, indent=4, separators=(',', ': '))
1067 |
1068 | importlstbx = Listbox(settwindow,name='datatab10',bg = "#535353", font =('Nexa Light',9),justify=CENTER
1069 | ,fg="black",highlightthickness=0,selectmode=SINGLE,width = 35
1070 | ,height= 10,activestyle=NONE,borderwidth=0,border=0,relief=FLAT
1071 | ,selectborderwidth=0,disabledforeground='#C2C2C2')
1072 |
1073 | importlstbx.delete(0,END)
1074 | impcurrentsize = 0
1075 |
1076 | for item in importdb:
1077 | impcurrentsize += 1
1078 | importlstbx.insert(0,item['name'])
1079 |
1080 | if impcurrentsize == 0:
1081 | settwindow.destroy()
1082 | note('Invalid JSON Format')
1083 | return
1084 |
1085 | else:
1086 | def finalimport():
1087 | msg4 = 'PLEASE EXPORT YOU CURRENT LIST FIRST!\nDo you want to add {} accounts to your existing list, or do you want to completely replace your list with this list'.format(impcurrentsize)
1088 |
1089 | msgbwind = Toplevel()
1090 | msgbwind.grab_set()
1091 | msgbwind.geometry("450x175")
1092 | msgbwind.configure(bg='#2C2C2C')
1093 | msgbwind.title('Guava - Import Confirmation')
1094 | msgbwind.resizable(0,0)
1095 | centerwind(msgbwind)
1096 |
1097 | msgbimg = Label(msgbwind,bg="#2C2C2C",borderwidth=0)
1098 | msgbimg.config(image=infomsgb)
1099 | msgbimg.place(x=0,y=0)
1100 | msgbding = threading.Thread(target=ahk.sound_play, args=(notifmp3path,))
1101 | msgbding.start()
1102 |
1103 | def btn1click():
1104 | failedaccs = 0
1105 | for item in importdb:
1106 | try:
1107 | dupname = db.get(accounts.name == item['name'])
1108 | except:
1109 | dupname = None
1110 | pass
1111 |
1112 | try:
1113 | dupusrname = db.get(accounts.username == item['username'])
1114 | if dupusrname['username'] == item['username']:
1115 | failedaccs += 1
1116 | except:
1117 | dupusrname = None
1118 | pass
1119 |
1120 | if dupname != None and dupusrname == None:
1121 | importname = item['name']+'(1)'
1122 | importusrname = item['username']
1123 | importpassw = item['password']
1124 |
1125 | db.insert({'name':importname,'username':importusrname,'password':importpassw})
1126 |
1127 | elif dupname == None and dupusrname == None:
1128 | importname = item['name']
1129 | importusrname = item['username']
1130 | importpassw = item['password']
1131 |
1132 | db.insert({'name':importname,'username':importusrname,'password':importpassw})
1133 |
1134 | if failedaccs == 0:
1135 | notemsg = '{} accounts added successfully!'.format(impcurrentsize)
1136 | note(notemsg)
1137 | msgbwind.destroy()
1138 | settwindow.destroy()
1139 | elif failedaccs > 0:
1140 | msgbmsg = '{} accounts were imported, {} failed to import due to them having the same username as ones from the existing list'.format(impcurrentsize-failedaccs,failedaccs)
1141 | msgb(type='info',msg=msgbmsg,title='Guava - Import Completed!',optionright='Ok')
1142 | msgbwind.destroy()
1143 | settwindow.destroy()
1144 | msgbwind.destroy()
1145 |
1146 | fetch()
1147 |
1148 | def btn2click():
1149 | shutil.copyfile(restorefilepath,r'accounts.json')
1150 | notemsg = 'Accounts replaced successfully!'
1151 | note(notemsg)
1152 | msgbwind.destroy()
1153 | settwindow.destroy()
1154 | fetch()
1155 |
1156 | btn1 = Button(msgbwind,bg='#1E1E1E',fg='#C2C2C2'
1157 | ,image=msgbbtn,borderwidth=0,activebackground='#1E1E1E'
1158 | ,text='Add',font=('Nexa Bold',12),justify=CENTER
1159 | ,activeforeground='#C2C2C2',command=btn1click,compound=CENTER).place(x=175,y=115)
1160 |
1161 | btn2 = Button(msgbwind,bg='#1E1E1E',fg='#C2C2C2',image=msgbbtn,borderwidth=0,activebackground='#1E1E1E'
1162 | ,text='Replace',font=('Nexa Bold',12),justify=CENTER
1163 | ,activeforeground='#C2C2C2',command=btn2click,compound=CENTER).place(x=310,y=115)
1164 |
1165 | msglbl = Label(msgbwind,bg="#2C2C2C",font=('Nexa Light', 10)
1166 | ,text=msg4,fg="#C2C2C2",wraplength=320,justify=LEFT).place(x=80,y=30)
1167 |
1168 | def cancel():
1169 | settwindow.destroy()
1170 | notemsg = 'Operation Canceled!'
1171 | note(notemsg)
1172 |
1173 | cancel_btn = Button(settwindow,name='datatab9',image=cancelbtnicon,bg="#1E1E1E",borderwidth=0
1174 | ,activebackground="#1E1E1E",command=cancel,relief=FLAT)
1175 |
1176 | def cancel_btn_hover(event):
1177 | cancel_btn.config(image=cancelbtnactive)
1178 |
1179 | def cancel_btn_unhover(event):
1180 | cancel_btn.config(image=cancelbtnicon)
1181 |
1182 | cancel_btn.bind('',cancel_btn_hover)
1183 | cancel_btn.bind('',cancel_btn_unhover)
1184 |
1185 | cancel_btn.place(x=140+100,y=261)
1186 |
1187 | submimport_btn = Button(settwindow,name='datatab8',image=submitbtnicon,bg="#1E1E1E",borderwidth=0
1188 | ,activebackground="#1E1E1E",command=finalimport,relief=FLAT)
1189 |
1190 | def submimport_btn_hover(event):
1191 | submimport_btn.config(image=submitbtnactive)
1192 |
1193 | def submimport_btn_unhover(event):
1194 | submimport_btn.config(image=submitbtnicon)
1195 |
1196 | submimport_btn.bind('',submimport_btn_hover)
1197 | submimport_btn.bind('',submimport_btn_unhover)
1198 |
1199 | submimport_btn.place(x=170+100,y=250.5)
1200 |
1201 |
1202 | importlstbx.config(state=DISABLED)
1203 | importlstbx.place(x=40,y=65)
1204 |
1205 | def exportfunc():
1206 | settwindow.withdraw()
1207 | root.withdraw()
1208 | backupdirpath = easygui.diropenbox(title='Guava - Choose Backup Destination',default=r'C://')
1209 | root.deiconify()
1210 | root.lift()
1211 | settwindow.deiconify()
1212 | settwindow.lift()
1213 | copies = 0
1214 |
1215 | for i in range(1,101):
1216 | if os.path.isfile(backupdirpath+r'\backup ({}).json'.format(str(i))) == True:
1217 | copies += i+1
1218 | else:
1219 | break
1220 |
1221 | if os.path.isfile(backupdirpath+r'\backup.json') == True and os.path.isfile(backupdirpath+r'\backup (1).json') == False:
1222 | bkpname = r'\backup (1).json'
1223 | elif copies != 0:
1224 | bkpname = r'\backup ({}).json'.format(copies)
1225 | elif copies == 0:
1226 | bkpname = r'\backup.json'
1227 |
1228 | shutil.copyfile(r'accounts.json',backupdirpath+bkpname)
1229 | notemsg = 'Accounts backuped successfully!'
1230 | note(notemsg)
1231 | return
1232 |
1233 | importlstbxbglbl = Label(settwindow,name='datatab7',bg="#1E1E1E",image=importlistboxbg).place(x=35,y=52)
1234 | importlstbxlbl = Label(settwindow,name='datatab6',bg="#535353"
1235 | ,fg='#767373',text="Imports List",font=('Nexa Bold', 12)).place(x=135,y=110+10)
1236 | importlstbxlbl2 = Label(settwindow,name='datatab5',bg="#535353"
1237 | ,fg='#767373',text="(There's nothing imported yet!)",font=('Nexa Bold', 8)).place(x=100,y=133+10)
1238 |
1239 | importtkbtn = Button(settwindow,name='datatab3',image=importbtn,bg="#1E1E1E",borderwidth=0
1240 | ,activebackground="#1E1E1E",command=importfunc)
1241 | importtklbl = Label(settwindow,name='datatab4',image=importhoverlbl,bg="#1E1E1E")
1242 |
1243 | def importtkbtn_onEnter(event):
1244 | importtkbtn.config(image=importhover)
1245 | importtklbl.place(x=140,y=261)
1246 | importtklbl.lift()
1247 |
1248 | def importtkbtn_onLeave(event):
1249 | importtkbtn.config(image=importbtn)
1250 | importtklbl.place_forget()
1251 |
1252 | importtkbtn.bind('',importtkbtn_onEnter)
1253 | importtkbtn.bind('',importtkbtn_onLeave)
1254 |
1255 | importtkbtn.place(x=35,y=255)
1256 |
1257 |
1258 | exporttkbtn = Button(settwindow,name='datatab1',image=exportbtn,bg="#1E1E1E",borderwidth=0
1259 | ,activebackground="#1E1E1E",command=exportfunc)
1260 | exporttklbl = Label(settwindow,name='datatab2',image=exporthoverlbl,bg="#1E1E1E")
1261 |
1262 | def exporttkbtn_onEnter(event):
1263 | exporttkbtn.config(image=exporthover)
1264 | exporttklbl.place(x=140,y=261)
1265 | exporttklbl.lift()
1266 |
1267 | def exporttkbtn_onLeave(event):
1268 | exporttkbtn.config(image=exportbtn)
1269 | exporttklbl.place_forget()
1270 |
1271 | exporttkbtn.bind('',exporttkbtn_onEnter)
1272 | exporttkbtn.bind('',exporttkbtn_onLeave)
1273 |
1274 | exporttkbtn.place(x=35+50,y=255)
1275 |
1276 | #COPY
1277 | def copytab():
1278 | for i in range(1,15):
1279 | try:
1280 | settwindow.nametowidget('generaltab'+str(i)).destroy()
1281 | settwindow.nametowidget('generaltab'+str(i)).destroy()
1282 | except:
1283 | pass
1284 |
1285 | for i in range(1,15):
1286 | try:
1287 | settwindow.nametowidget('datatab'+str(i)).destroy()
1288 | settwindow.nametowidget('datatab'+str(i)).destroy()
1289 | except:
1290 | pass
1291 |
1292 | SettTabs.config(image=tabscopy)
1293 | Ctab_btn.config(bg='#1E1E1E',activebackground='#1E1E1E')
1294 | Dtab_btn.config(bg='#535353',activebackground='#535353')
1295 | Gtab_btn.config(bg='#535353',activebackground='#535353')
1296 |
1297 | #name widgets
1298 | copyformattitle = Label(settwindow,name='copytab1',bg='#1E1E1E',borderwidth=0,text='Copy Format',font=('Nexa Light', 12),fg='#C2C2C2').place(x=130,y=60)
1299 | copyformattitle = Label(settwindow,name='copytab2',bg='#1E1E1E',borderwidth=0
1300 | ,text='Edit the format of text that gets copied\n using the copy button',font=('Nexa Bold', 7),fg='#535353').place(x=90,y=85)
1301 |
1302 | formatentrybglbl = Label(settwindow,name='copytab3',bg='#1E1E1E',borderwidth=0,image=copyformatentrybg).place(x=35,y=118)
1303 | formatvar = StringVar()
1304 | formatentry = Entry(settwindow,name='copytab4',textvariable = formatvar,font = ('Nexa Light',13)
1305 | ,width=24,relief=FLAT,bg='#535353',fg='#C2C2C2',insertbackground='#C2C2C2',disabledbackground='#535353',disabledforeground='#C2C2C2')
1306 |
1307 | formatswitchbg = Label(settwindow,name='copytab5',bg='#1E1E1E',borderwidth=0)
1308 |
1309 | for item in configdb:
1310 | try:
1311 | Cformat = configdb.get(Query().copy_format == item['copy_format'])
1312 | currentCformat = Cformat['copy_format']
1313 | except:
1314 | pass
1315 |
1316 | def formatcheck(custom:str = currentCformat):
1317 | if configdb.contains(Query().copy_format_type == 'discord') == False and configdb.contains(Query().copy_format_type == 'plain') == False and configdb.contains(Query().copy_format_type == 'custom') == False:
1318 | configdb.insert({'copy_format_type':'discord'})
1319 | configdb.insert({'copy_format':'```\nUsername: %u%\nPassword: %p%\n```'})
1320 |
1321 | if configdb.contains(Query().copy_format_type == 'discord') == True:
1322 | configdb.upsert({'copy_format':'```\nUsername: %u%\nPassword: %p%\n```'}, Query().copy_format.exists())
1323 | formatswitchbg.config(image=formattabdiscord)
1324 | formatentry.insert(0,'```\nUsername: %u%\nPassword: %p%\n```'.replace('\n','\\n'))
1325 | formatentry.config(state=DISABLED,cursor='no')
1326 | customtabbtn.config(bg='#535353',activebackground='#535353')
1327 | discordtabbtn.config(bg='#161616',activebackground='#161616')
1328 | plaintabbtn.config(bg='#535353',activebackground='#535353')
1329 |
1330 | elif configdb.contains(Query().copy_format_type == 'plain') == True:
1331 | configdb.upsert({'copy_format':'Username: %u%\nPassword: %p%'}, Query().copy_format.exists())
1332 | formatswitchbg.config(image=formattabplain)
1333 | formatentry.insert(0,'Username: %u%\nPassword: %p%'.replace('\n','\\n'))
1334 | formatentry.config(state=DISABLED,cursor='no')
1335 | discordtabbtn.config(bg='#535353',activebackground='#535353')
1336 | plaintabbtn.config(bg='#161616',activebackground='#161616')
1337 | customtabbtn.config(bg='#535353',activebackground='#535353')
1338 |
1339 | elif configdb.contains(Query().copy_format_type == 'custom') == True:
1340 |
1341 | if custom == '' or custom == ' ':
1342 | msgb(title='Guava - No Input Provided',type='error',msg='Copy Format is Empty!',optionright='Ok')
1343 | else:
1344 | configdb.upsert({'copy_format':custom}, Query().copy_format.exists())
1345 | formatswitchbg.config(image=formattabcustom)
1346 | formatentry.delete(0,END)
1347 | formatentry.insert(0,custom.replace('\n','\\n'))
1348 | discordtabbtn.config(bg='#535353',activebackground='#535353')
1349 | customtabbtn.config(bg='#161616',activebackground='#161616')
1350 | plaintabbtn.config(bg='#535353',activebackground='#535353')
1351 | def customcheck():
1352 | def customtabsubmit():
1353 | entrystring = formatvar.get()
1354 | configdb.upsert({'copy_format':entrystring}, Query().copy_format.exists())
1355 | settwindow.destroy()
1356 |
1357 | submit_btn = Button(settwindow,name='copytab6',image=submitbtnicon,bg="#1E1E1E",borderwidth=0
1358 | ,activebackground="#1E1E1E",command=customtabsubmit,relief=FLAT)
1359 |
1360 | copytabinstructions = Label(settwindow,name='copytab11',bg='#1E1E1E',borderwidth=0
1361 | ,text='*Use %u% for username, %p% for password and \n for a new line (aka Enter ⏎)',font=('Nexa Bold', 8),justify=LEFT,fg='#535353').place(x=40,y=205)
1362 |
1363 | def submit_btn_hover(event):
1364 | submit_btn.config(image=submitbtnactive)
1365 |
1366 | def submit_btn_unhover(event):
1367 | submit_btn.config(image=submitbtnicon)
1368 |
1369 | submit_btn.bind('',submit_btn_hover)
1370 | submit_btn.bind('',submit_btn_unhover)
1371 |
1372 | submit_btn.place(x=275,y=260)
1373 |
1374 | return
1375 | customcheck()
1376 | def customtab():
1377 | configdb.upsert({'copy_format_type':'custom'}, Query().copy_format_type.exists())
1378 | formatswitchbg.config(image=formattabcustom)
1379 | formatentry.config(state=NORMAL,cursor='')
1380 | formatentry.delete(0,END)
1381 | configdb.upsert({'copy_format':currentCformat}, Query().copy_format.exists())
1382 | formatentry.insert(0,currentCformat.replace('\n','\\n'))
1383 | formatentry.focus_set()
1384 | discordtabbtn.config(bg='#535353',activebackground='#535353')
1385 | customtabbtn.config(bg='#161616',activebackground='#161616')
1386 | plaintabbtn.config(bg='#535353',activebackground='#535353')
1387 |
1388 | def customtabsubmit():
1389 | entrystring = formatvar.get()
1390 | formatcheck(entrystring)
1391 | settwindow.destroy()
1392 |
1393 | submit_btn = Button(settwindow,name='copytab6',image=submitbtnicon,bg="#1E1E1E",borderwidth=0
1394 | ,activebackground="#1E1E1E",command=customtabsubmit,relief=FLAT)
1395 |
1396 | copytabinstructions = Label(settwindow,name='copytab11',bg='#1E1E1E',borderwidth=0
1397 | ,text='*Use %u% for username, %p% for password and \n for a new line (aka Enter ⏎)',font=('Nexa Bold', 8),justify=LEFT,fg='#535353').place(x=40,y=205)
1398 |
1399 | def submit_btn_hover(event):
1400 | submit_btn.config(image=submitbtnactive)
1401 |
1402 | def submit_btn_unhover(event):
1403 | submit_btn.config(image=submitbtnicon)
1404 |
1405 | submit_btn.bind('',submit_btn_hover)
1406 | submit_btn.bind('',submit_btn_unhover)
1407 |
1408 | submit_btn.place(x=275,y=260)
1409 |
1410 | return
1411 |
1412 | def discordtab():
1413 | configdb.upsert({'copy_format_type':'discord'}, Query().copy_format_type.exists())
1414 | try:
1415 | settwindow.nametowidget('copytab6').destroy()
1416 | settwindow.nametowidget('copytab11').destroy()
1417 | except:
1418 | pass
1419 | formatentry.config(state=NORMAL,cursor='')
1420 | formatentry.delete(0,END)
1421 | formatswitchbg.config(image=formattabdiscord)
1422 | discordtabbtn.config(bg='#161616',activebackground='#161616')
1423 | plaintabbtn.config(bg='#535353',activebackground='#535353')
1424 | customtabbtn.config(bg='#535353',activebackground='#535353')
1425 | formatcheck()
1426 | return
1427 |
1428 | def plaintab():
1429 | configdb.upsert({'copy_format_type':'plain'}, Query().copy_format_type.exists())
1430 | try:
1431 | settwindow.nametowidget('copytab6').destroy()
1432 | settwindow.nametowidget('copytab11').destroy()
1433 | except:
1434 | pass
1435 | formatentry.config(state=NORMAL,cursor='')
1436 | formatentry.delete(0,END)
1437 | formatswitchbg.config(image=formattabplain)
1438 | discordtabbtn.config(bg='#535353',activebackground='#535353')
1439 | plaintabbtn.config(bg='#161616',activebackground='#161616')
1440 | customtabbtn.config(bg='#535353',activebackground='#535353')
1441 | formatcheck()
1442 | return
1443 |
1444 | customtabbtn = Button(settwindow,name='copytab7',bg='#535353',fg='#767373',borderwidth=0,activebackground='#535353'
1445 | ,text='Custom',font=('Nexa Bold',8),justify=CENTER,activeforeground='#767373',command=customtab)
1446 |
1447 | discordtabbtn = Button(settwindow,name='copytab8',bg='#535353',fg='#767373',borderwidth=0,activebackground='#535353'
1448 | ,text='Discord',font=('Nexa Bold',8),justify=CENTER,activeforeground='#767373',command=discordtab)
1449 |
1450 | plaintabbtn = Button(settwindow,name='copytab9',bg='#535353',fg='#767373',borderwidth=0,activebackground='#535353'
1451 | ,text='Plain Text',font=('Nexa Bold',8),justify=CENTER,activeforeground='#767373',command=plaintab)
1452 |
1453 | formatcheck()
1454 | formatentry.place(x=43,y=127)
1455 | formatswitchbg.place(x=35,y=170)
1456 | discordtabbtn.place(x=60,y=171)
1457 | plaintabbtn.place(x=60+90,y=171)
1458 | customtabbtn.place(x=60+192,y=171)
1459 |
1460 |
1461 | #Tab Buttons
1462 | SettTabs = Label(settwindow,bg="#2C2C2C",borderwidth=0)
1463 | Gtab_btn = Button(settwindow,bg='#535353',fg='#767373',borderwidth=0,activebackground='#535353'
1464 | ,text='General',font=('Nexa Bold',9),justify=CENTER,activeforeground='#767373',command=generaltab)
1465 | Dtab_btn = Button(settwindow,bg='#535353',fg='#767373',borderwidth=0,activebackground='#535353'
1466 | ,text='Data',font=('Nexa Bold',9),justify=CENTER,activeforeground='#767373',command=datatab)
1467 | Ctab_btn = Button(settwindow,bg='#535353',fg='#767373',borderwidth=0,activebackground='#535353'
1468 | ,text='Copy',font=('Nexa Bold',9),justify=CENTER,activeforeground='#767373',command=copytab)
1469 |
1470 | generaltab()
1471 | Gtab_btn.place(x=35,y=16)
1472 | Dtab_btn.place(x=128,y=16)
1473 | Ctab_btn.place(x=128+83,y=16)
1474 | SettTabs.pack(anchor=CENTER,pady=16)
1475 |
1476 |
1477 |
1478 | def login(event):
1479 |
1480 | if lstbx.curselection() == ():
1481 | return
1482 | if lstbx.curselection() != ():
1483 |
1484 | riotindex = lstbx.curselection()[0]
1485 | riotname = lstbx.get(riotindex,last=None)
1486 | account = db.get(accounts.name == riotname)
1487 |
1488 | if account['name'] == riotname:
1489 | loginname = account['name']
1490 | loginusername = account['username']
1491 | print(loginusername)
1492 | loginpassw = account['password']
1493 | else:
1494 | print('Account not found in db')
1495 | return
1496 |
1497 | lstbx.config(state=DISABLED,cursor='no')
1498 | note('Logging in...!')
1499 |
1500 | si = subprocess.STARTUPINFO()
1501 | si.dwFlags |= subprocess.STARTF_USESHOWWINDOW
1502 |
1503 | subprocess.call("taskkill /f /im RiotClientCrashHandler.exe", startupinfo=si)
1504 | subprocess.call("taskkill /f /im RiotClientCrashHandler.exe", startupinfo=si)
1505 | subprocess.call("taskkill /f /im RiotClientServices.exe", startupinfo=si)
1506 | subprocess.call("taskkill /f /im RiotClientServices.exe", startupinfo=si)
1507 | subprocess.call("taskkill /f /im RiotClientUx.exe", startupinfo=si)
1508 | subprocess.call("taskkill /f /im RiotClientUx.exe", startupinfo=si)
1509 | subprocess.call("taskkill /f /im RiotClientUxRender.exe", startupinfo=si)
1510 | subprocess.call("taskkill /f /im RiotClientUxRender.exe", startupinfo=si)
1511 | subprocess.call("taskkill /f /im LeagueClient.exe", startupinfo=si)
1512 | subprocess.call("taskkill /f /im LeagueClient.exe", startupinfo=si)
1513 | subprocess.call("taskkill /f /im LeagueClientUx.exe", startupinfo=si)
1514 | subprocess.call("taskkill /f /im LeagueClientUx.exe", startupinfo=si)
1515 |
1516 | if findapp('league of legends') == True:
1517 | app.open('league of legends')
1518 |
1519 | found = 0
1520 | done = 0
1521 | logged_in = 0
1522 |
1523 | for i in range(60):
1524 | root.update()
1525 | riotwin = ahk.win_get(title = "Riot Client")
1526 | time.sleep(0.5)
1527 | try:
1528 | if riotwin.exist:
1529 | riotwin.activate()
1530 | riotwinLoc = riotwin.rect
1531 | riotwinX = riotwinLoc[0]
1532 | riotwinY = riotwinLoc[1]
1533 | riotwinX2 = riotwinX + (riotwinLoc[2] // 2)
1534 | riotwinY2 = riotwinY + riotwinLoc[3]
1535 | found = 1
1536 | break
1537 | except:
1538 | try:
1539 | leaguewin = ahk.win_get(title = "League of Legends")
1540 | if leaguewin.exist:
1541 | note('Please log out first!','red')
1542 | break
1543 | except:
1544 | pass
1545 | pass
1546 |
1547 | for i in range(60):
1548 | if found == 1:
1549 | root.update()
1550 | time.sleep(0.5)
1551 | riotlogo = ahk.image_search(image_path=r'riotlogo.png',
1552 | color_variation=70,upper_bound= [riotwinX,riotwinY],lower_bound = [riotwinX2,riotwinY2])
1553 | if riotlogo != None:
1554 | #username
1555 | ahk.mouse_move(riotlogo[0]+55,riotlogo[1]+175,speed=0)
1556 | ahk.click()
1557 | ahk.type(loginusername)
1558 | #password
1559 | ahk.mouse_move(riotlogo[0]+55,riotlogo[1]+220,speed=0)
1560 | ahk.click()
1561 | ahk.type(loginpassw)
1562 | #loginbtn
1563 | ahk.mouse_move(riotlogo[0]+65,riotlogo[1]+530,speed=0)
1564 | ahk.click()
1565 | logged_in = 1
1566 | break
1567 | else:
1568 | logged_in = 0
1569 | note('Riot Client window not found','red')
1570 | break
1571 |
1572 | for i in range(60):
1573 | if logged_in == 1:
1574 | root.update()
1575 | time.sleep(0.5)
1576 |
1577 | playbtn = ahk.image_search(image_path=r'playbtn.png',
1578 | color_variation=70,upper_bound= [riotwinX,riotwinY],lower_bound = [riotwinX2,riotwinY2])
1579 |
1580 | if playbtn != None:
1581 | ahk.mouse_move(playbtn[0]+120,playbtn[1]+23,speed=0)
1582 | ahk.click()
1583 |
1584 | try:
1585 | leaguewin = ahk.win_get(title = "League of Legends")
1586 | if leaguewin.exist:
1587 | note('Logged in successfully!')
1588 | done = 1
1589 | break
1590 | else:
1591 | break
1592 | except:
1593 | pass
1594 | else:
1595 | break
1596 | if done == 1:
1597 | if configdb.contains(Query().exit_after_login == 'true') == True:
1598 | configdb.upsert({'running':'false'}, Query().running.exists())
1599 | exit()
1600 | else:
1601 | configdb.upsert({'exit_after_login':'false'}, Query().exit_after_login.exists())
1602 | pass
1603 | else:
1604 | pass
1605 | else:
1606 | note('Game Not Found!','red')
1607 |
1608 | lstbx.config(state=NORMAL,cursor='')
1609 | return
1610 |
1611 | ###commands
1612 |
1613 |
1614 | #accicon
1615 | def count(no:int,x_offset:int = 0):
1616 | try:
1617 | root.nametowidget('counter').destroy()
1618 | except:
1619 | pass
1620 |
1621 | if no == 100:
1622 | finalcount = '99+'
1623 |
1624 | else:
1625 | finalcount = str(no)
1626 |
1627 | invisforcount = Label(name='counter',text=finalcount,font=('Quicksand SemiBold',8),bg='#C53131'
1628 | ,fg='#C2C2C2',borderwidth=0,justify=CENTER,anchor=CENTER)
1629 | # default = 0
1630 | # dbl digit = -2
1631 | # 99+ = -4
1632 | invisforcount.place(x=31+x_offset,y=43)
1633 |
1634 | accountsbglbl = Label(image=accountsiconbg,bg="#1E1E1E",borderwidth=0).place(x=0,y=0)
1635 | accountsiconlbl = Label(image=accountsicon,bg="#282828",width=69,height=73)
1636 | accountsiconlbl.place(x=0,y=0)
1637 |
1638 |
1639 | #accicon
1640 |
1641 | ######addbtn
1642 |
1643 | addbtn = Button(image=addbtnicon,bg="#1E1E1E",width=69,height=43,borderwidth=0,activebackground="#1E1E1E",command=addwind)
1644 | addlbl = Label(image=addhoverlbl,bg="#1E1E1E")
1645 |
1646 | def addbtn_onEnter(event):
1647 | addbtn.config(image=addbtniconactive)
1648 | addlbl.place(x=6,y=310)
1649 | addlbl.lift()
1650 |
1651 | def addbtn_onLeave(event):
1652 | addbtn.config(image=addbtnicon)
1653 | addlbl.place_forget()
1654 |
1655 | addbtn.bind('',addbtn_onEnter)
1656 | addbtn.bind('',addbtn_onLeave)
1657 | addbtn.place(x=0,y=83+5)
1658 |
1659 | #####addbtn
1660 |
1661 | #####rmvbtn
1662 |
1663 | removebtn = Button(image=removebtnicon,bg="#1E1E1E",width=69,height=43,borderwidth=0,activebackground="#1E1E1E",command=remove)
1664 | rmvlbl = Label(image=removehoverlbl,bg="#1E1E1E")
1665 | def removebtn_onEnter(event):
1666 | removebtn.config(image=removebtniconactive)
1667 | rmvlbl.place(x=6,y=310)
1668 | rmvlbl.lift()
1669 |
1670 | def removebtn_onLeave(event):
1671 | removebtn.config(image=removebtnicon)
1672 | rmvlbl.place_forget()
1673 |
1674 |
1675 | removebtn.place(x=0,y=136+5)
1676 |
1677 | #####rmvbtn
1678 |
1679 | #####edtbtn
1680 |
1681 | editbtn = Button(image=editbtnicon,bg="#1E1E1E",width=69,height=43,borderwidth=0,activebackground="#1E1E1E",command=editwind)
1682 | editlbl = Label(image=edithoverlbl,bg="#1E1E1E")
1683 | def editbtn_onEnter(event):
1684 | editbtn.config(image=editbtniconactive)
1685 | editlbl.place(x=6,y=310)
1686 | editlbl.lift()
1687 |
1688 | def editbtn_onLeave(event):
1689 | editbtn.config(image=editbtnicon)
1690 | editlbl.place_forget()
1691 |
1692 | editbtn.place(x=0,y=190+5)
1693 |
1694 | #####edtbtn
1695 |
1696 | #####copybtn
1697 |
1698 | copybtn = Button(image=copybtnicon,bg="#1E1E1E",width=69,height=43,borderwidth=0
1699 | ,activebackground="#1E1E1E",command=copy)
1700 | copylbl = Label(image=copyhoverlbl,bg="#1E1E1E")
1701 |
1702 | def copybtn_onEnter(event):
1703 | copybtn.config(image=copybtniconactive)
1704 | copylbl.place(x=6,y=310)
1705 | copylbl.lift()
1706 |
1707 | def copybtn_onLeave(event):
1708 | copybtn.config(image=copybtnicon)
1709 | copylbl.place_forget()
1710 |
1711 | copybtn.place(x=0,y=195+43+11)
1712 |
1713 | #####copybtn
1714 |
1715 | ####infbtn
1716 |
1717 | infobtn = Button(image=infobtnicon,bg="#1E1E1E",width=69,height=43,borderwidth=0,activebackground="#1E1E1E",command=info)
1718 | infolbl = Label(image=infohoverlbl,bg="#1E1E1E")
1719 |
1720 | def infobtn_onEnter(event):
1721 | infobtn.config(image=infobtniconactive)
1722 | infolbl.place(x=6,y=310)
1723 | infolbl.lift()
1724 |
1725 |
1726 | def infobtn_onLeave(event):
1727 | infobtn.config(image=infobtnicon)
1728 | infolbl.place_forget()
1729 |
1730 | infobtn.bind('',infobtn_onEnter)
1731 | infobtn.bind('',infobtn_onLeave)
1732 |
1733 | infobtn.place(x=0,y=380+5)
1734 |
1735 | ####infbtn
1736 |
1737 | ####setbtn
1738 |
1739 | settingsbtn = Button(image=settingsbtnicon,bg="#1E1E1E",width=69,height=43,borderwidth=0,activebackground="#1E1E1E",command=settings)
1740 | settingslbl = Label(image=settingshoverlbl,bg="#1E1E1E")
1741 |
1742 | def settingsbtn_onEnter(event):
1743 | settingsbtn.config(image=settingsbtniconactive)
1744 | settingslbl.place(x=6,y=310)
1745 | settingslbl.lift()
1746 |
1747 | def settingsbtn_onLeave(event):
1748 | settingsbtn.config(image=settingsbtnicon)
1749 | settingslbl.place_forget()
1750 |
1751 | settingsbtn.bind('',settingsbtn_onEnter)
1752 | settingsbtn.bind('',settingsbtn_onLeave)
1753 |
1754 | settingsbtn.place(x=0,y=440)
1755 |
1756 | ####setbtn
1757 |
1758 | sidebar.pack(side=LEFT)
1759 |
1760 | accountslbl = Label(root,bg="#2C2C2C",font=('Nexa Bold',20),image=accountslabelbg,text='Accounts',fg="#C2C2C2",compound=CENTER)
1761 | accountslbl.pack(anchor=N,pady=25)
1762 |
1763 | lstbximglabel = Label(root,bg="#2C2C2C",image=lstbximg)
1764 | lstbximglabel.place(x=108,y=96-11)
1765 |
1766 | lstbx = Listbox(root,bg = "#535353", font =('Nexa Light',14),justify=CENTER,fg="#C2C2C2",highlightthickness=0,selectmode=SINGLE,
1767 | width = 21,height= 12,selectbackground="#B5C531"
1768 | ,activestyle=NONE,borderwidth=0,highlightcolor="black"
1769 | ,selectforeground="black",border=0
1770 | ,relief=FLAT,selectborderwidth=0,exportselection=False)
1771 | lstbx.bind('',login)
1772 | lstbx.pack(anchor=CENTER)
1773 |
1774 | def fetch():
1775 |
1776 | lstbx.delete(0,END)
1777 | currentsize = 0
1778 |
1779 | for item in db:
1780 | currentsize += 1
1781 | try:
1782 | lstbx.insert(0,item['name'])
1783 | except:
1784 | pass
1785 |
1786 | if lstbx.size() == 0:
1787 | removebtn.config(image=removebtndisabled,cursor='no',command=None,relief=SUNKEN)
1788 | removebtn.unbind('')
1789 | removebtn.unbind('')
1790 |
1791 | editbtn.config(image=editbtndisabled,cursor='no',command=None,relief=SUNKEN)
1792 | editbtn.unbind('')
1793 | editbtn.unbind('')
1794 |
1795 | copybtn.config(image=copybtndisabled,cursor='no',command=None,relief=SUNKEN)
1796 | copybtn.unbind('')
1797 | copybtn.unbind('')
1798 | else:
1799 |
1800 | editbtn.config(cursor='')
1801 | editbtn.bind('',editbtn_onEnter)
1802 | editbtn.bind('',editbtn_onLeave)
1803 |
1804 | removebtn.config(cursor='')
1805 | removebtn.bind('',removebtn_onEnter)
1806 | removebtn.bind('',removebtn_onLeave)
1807 |
1808 | copybtn.config(cursor='')
1809 | copybtn.bind('',copybtn_onEnter)
1810 | copybtn.bind('',copybtn_onLeave)
1811 |
1812 |
1813 | if currentsize == 0:
1814 | accountsiconlbl.config(image=accountsicon)
1815 | try:
1816 | root.nametowidget('counter').destroy()
1817 | except:
1818 | pass
1819 | pass
1820 | elif currentsize >= 1 and currentsize <= 9:
1821 | accountsiconlbl.config(image=counterbg1to9)
1822 | count(currentsize)
1823 | elif currentsize >= 10 and currentsize <= 99:
1824 | accountsiconlbl.config(image=counterbg10to99)
1825 | count(currentsize,-2)
1826 | elif currentsize >= 100:
1827 | accountsiconlbl.config(image=counterbg10to99)
1828 | count(100,-4)
1829 |
1830 |
1831 | fetch()
1832 |
1833 | if lstbx.size() != 0:
1834 | def notelmao():
1835 | note('Double Click To Login!')
1836 |
1837 | if configdb.contains(Query().disable_startup_msg == 'true') == True or configdb.contains(Query().disable_startup_msg == 'false') == True:
1838 | if configdb.contains(Query().disable_startup_msg == 'true') == True:
1839 | pass
1840 | else:
1841 | root.after(1000,notelmao)
1842 | else:
1843 | configdb.insert({'disable_startup_msg':'false'})
1844 | else:
1845 | pass
1846 |
1847 | def on_closing():
1848 | configdb.upsert({'running':'false'}, Query().running.exists())
1849 | exit()
1850 |
1851 | root.protocol("WM_DELETE_WINDOW", on_closing)
1852 |
1853 | root.mainloop()
1854 |
--------------------------------------------------------------------------------