Yao211 commited on
Commit
19aa9ca
Β·
verified Β·
1 Parent(s): 76d0e05

Upload 7 files

Browse files
.gitattributes CHANGED
@@ -39,3 +39,4 @@ static/assets/3.jpg filter=lfs diff=lfs merge=lfs -text
39
  static/assets/4.jpg filter=lfs diff=lfs merge=lfs -text
40
  static/assets/5.jpg filter=lfs diff=lfs merge=lfs -text
41
  static/assets/6.jpg filter=lfs diff=lfs merge=lfs -text
 
 
39
  static/assets/4.jpg filter=lfs diff=lfs merge=lfs -text
40
  static/assets/5.jpg filter=lfs diff=lfs merge=lfs -text
41
  static/assets/6.jpg filter=lfs diff=lfs merge=lfs -text
42
+ dist/pyarmor_runtime_000000/pyarmor_runtime.so filter=lfs diff=lfs merge=lfs -text
app.py ADDED
@@ -0,0 +1,227 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import sys
3
+ import os
4
+
5
+ # Add the dist directory to Python path
6
+ sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'dist'))
7
+
8
+ # Import obfuscated module
9
+ try:
10
+ import core_logic
11
+ from core_logic import *
12
+ data_manager = DataManager()
13
+ except ImportError as e:
14
+ print(f"Error: Obfuscated module not found: {e}")
15
+ print("Current directory:", os.getcwd())
16
+ print("Files in dist:", os.listdir('dist') if os.path.exists('dist') else 'dist not found')
17
+ sys.exit(1)
18
+
19
+ def generate_speedpainting(image, request: gr.Request):
20
+ if not image:
21
+ raise gr.Error("Please upload an image first!")
22
+
23
+ user_context = get_user_context(request)
24
+ print(f"User context: {user_context}")
25
+
26
+ current_attempts = data_manager.get_attempts(user_context)
27
+ print(f"Current attempts for {user_context}: {current_attempts}")
28
+
29
+ if current_attempts >= MAX_FREE_TRIALS:
30
+ raise gr.Error(
31
+ f"You've used {MAX_FREE_TRIALS} free generations today. "
32
+ f"Please visit https://miragic.ai/ to sign up for unlimited access!"
33
+ )
34
+
35
+ try:
36
+ # Process the image
37
+ video_url = process_media_request(image)
38
+
39
+ # Increment attempts after successful generation
40
+ new_count = data_manager.increment_attempts(user_context)
41
+ print(f"New attempt count for {user_context}: {new_count}")
42
+
43
+ return video_url
44
+
45
+ except Exception as e:
46
+ print(f"Error in generate_speedpainting: {str(e)}")
47
+ raise e
48
+
49
+ def get_remaining_attempts(request: gr.Request):
50
+ """Get remaining attempts for current IP"""
51
+ user_context = get_user_context(request)
52
+ current_attempts = data_manager.get_attempts(user_context)
53
+ remaining = MAX_FREE_TRIALS - current_attempts
54
+
55
+ print(f"Getting remaining attempts for {user_context}: {remaining}")
56
+
57
+ if remaining <= 0:
58
+ return f"Daily limit reached ({MAX_FREE_TRIALS}/{MAX_FREE_TRIALS}). Sign up for unlimited access!"
59
+ else:
60
+ return f"Remaining free generations: {remaining}/{MAX_FREE_TRIALS}"
61
+
62
+ # Example images
63
+ EXAMPLE_IMAGES = [
64
+ ["static/assets/1.jpg"],
65
+ ["static/assets/2.jpg"],
66
+ ["static/assets/3.jpg"],
67
+ ["static/assets/4.jpg"],
68
+ ["static/assets/5.jpg"],
69
+ ]
70
+
71
+ # Company information
72
+ COMPANY_INFO = """
73
+ ## About US
74
+ ### Miragic is a cutting-edge platform to serve AI-powered tools like Virtual Try-on, Speed Painting, Background Remover and Sales Pilot.
75
+ ### [Visit our website](https://miragic.ai) to explore more innovative generative AI tools!
76
+ """
77
+
78
+ # Custom CSS
79
+ css = """
80
+ footer {visibility: hidden}
81
+ .banner {
82
+ background-color: #f8f9fa;
83
+ padding: 10px;
84
+ border-radius: 5px;
85
+ margin-bottom: 20px;
86
+ text-align: center;
87
+ }
88
+ .button-gradient {
89
+ background: linear-gradient(45deg, #ff416c, #ff4b2b, #ff9b00, #ff416c);
90
+ background-size: 400% 400%;
91
+ border: none;
92
+ padding: 14px 28px;
93
+ font-size: 16px;
94
+ font-weight: bold;
95
+ color: white;
96
+ border-radius: 10px;
97
+ cursor: pointer;
98
+ transition: 0.3s ease-in-out;
99
+ animation: gradientAnimation 2s infinite linear;
100
+ box-shadow: 0 4px 10px rgba(255, 65, 108, 0.6);
101
+ }
102
+ @keyframes gradientAnimation {
103
+ 0% { background-position: 0% 50%; }
104
+ 100% { background-position: 100% 50%; }
105
+ }
106
+ .button-gradient:hover {
107
+ transform: scale(1.05);
108
+ box-shadow: 0 6px 15px rgba(255, 75, 43, 0.8);
109
+ }
110
+ .signup-container {
111
+ text-align: center;
112
+ padding: 20px;
113
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
114
+ border-radius: 8px;
115
+ margin-top: 20px;
116
+ color: white;
117
+ box-shadow: 0 4px 15px rgba(0,0,0,0.2);
118
+ }
119
+ .signup-container h3 {
120
+ margin-bottom: 10px;
121
+ color: white;
122
+ }
123
+ .signup-container p {
124
+ margin-bottom: 15px;
125
+ color: #f0f0f0;
126
+ }
127
+ .signup-button {
128
+ background: linear-gradient(45deg, #ff416c, #ff4b2b);
129
+ border: none;
130
+ padding: 12px 25px;
131
+ font-size: 16px;
132
+ font-weight: bold;
133
+ color: white;
134
+ border-radius: 8px;
135
+ text-decoration: none;
136
+ display: inline-block;
137
+ transition: all 0.3s ease;
138
+ box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2);
139
+ }
140
+ .signup-button:hover {
141
+ transform: translateY(-2px);
142
+ box-shadow: 0 6px 20px rgba(0, 0, 0, 0.3);
143
+ }
144
+ .attempts-counter {
145
+ background: #e3f2fd;
146
+ padding: 10px;
147
+ border-radius: 5px;
148
+ margin: 10px 0;
149
+ text-align: center;
150
+ font-weight: bold;
151
+ color: #1976d2;
152
+ }
153
+ """
154
+
155
+ # Create Gradio interface
156
+ with gr.Blocks(title="Miragic Speed-Painting", theme=gr.themes.Ocean(), css=css) as demo:
157
+ gr.Markdown("""
158
+ <div style="display: flex; align-items: center;">
159
+ <img src="https://avatars.githubusercontent.com/u/211682198?s=200&v=4" style="width: 80px; margin-right: 20px;"/>
160
+ <div>
161
+ <h1 style="margin-bottom: 0;">Miragic Speed-Painting 🎨</h1>
162
+ <p>Upload an image to see AI create speedpainting animations!</p>
163
+ </div>
164
+ </div>
165
+ """)
166
+
167
+ gr.Markdown(COMPANY_INFO)
168
+
169
+ # Usage counter
170
+ usage_display = gr.HTML(elem_classes="attempts-counter")
171
+
172
+ with gr.Row():
173
+ with gr.Column():
174
+ image_input = gr.Image(
175
+ label="Upload Image",
176
+ type="pil",
177
+ sources=["upload", "clipboard"],
178
+ height=300
179
+ )
180
+
181
+ gr.Examples(
182
+ examples=EXAMPLE_IMAGES,
183
+ inputs=image_input,
184
+ label="Try these examples!",
185
+ examples_per_page=5
186
+ )
187
+
188
+ submit_btn = gr.Button("Generate Speedpainting πŸš€", elem_classes="button-gradient")
189
+
190
+ with gr.Column():
191
+ video_output = gr.Video(
192
+ label="Speedpainting Result",
193
+ autoplay=True,
194
+ height=300
195
+ )
196
+
197
+ signup_prompt = gr.HTML(
198
+ visible=True,
199
+ value="""<div class="signup-container">
200
+ <h3>πŸš€ Want unlimited generations?</h3>
201
+ <p>Please sign up at Miragic.ai for unlimited access to all our AI tools!</p>
202
+ <a href='https://miragic.ai/products/speed-painting' target='_blank' class="signup-button">
203
+ SignUp for Free πŸš€
204
+ </a>
205
+ </div>"""
206
+ )
207
+
208
+ # Update usage display on page load
209
+ demo.load(
210
+ fn=get_remaining_attempts,
211
+ outputs=usage_display
212
+ )
213
+
214
+ # Handle generation
215
+ submit_btn.click(
216
+ fn=generate_speedpainting,
217
+ inputs=[image_input],
218
+ outputs=video_output
219
+ ).then(
220
+ fn=get_remaining_attempts,
221
+ outputs=usage_display
222
+ )
223
+
224
+ gr.HTML('<a href="https://visitorbadge.io/status?path=https%3A%2F%2Fhuggingface.co%2Fspaces%2FMiragic-AI%2FMiragic-Speed-Painting"><img src="https://api.visitorbadge.io/api/combined?path=https%3A%2F%2Fhuggingface.co%2Fspaces%2FMiragic-AI%2FMiragic-Speed-Painting&label=VISITORS&labelColor=%2337d67a&countColor=%23f47373&style=plastic&labelStyle=upper" /></a>')
225
+
226
+ if __name__ == "__main__":
227
+ demo.launch()
dist/__pycache__/core_logic.cpython-310.pyc ADDED
Binary file (7.35 kB). View file
 
dist/core_logic.py ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ # Pyarmor 9.1.7 (trial), 000000, non-profits, 2025-07-10T12:22:33.170717
2
+ from pyarmor_runtime_000000 import __pyarmor__
3
+ __pyarmor__(__name__, __file__, b'PY000000\x00\x03\n\x00o\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00s\x1b\x00\x00\x12\t\x04\x00\x08\\\xf0\x17Z\xfe\xebQ\xb3y\x9e\x949\xd4G\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x158\x1d\x1b\rK u\xbe7\xe7@m\xb4\x8fWxja\xfc\x11\xc8\x8e\x926\x87\xb1\xe2\x05\x00\'\xef\x9ci\x1ch\xff\xfd\xc1K\x8e\x831\xf0\xd7\xba\xe8/\xfaF\xaaqgI\xfd\xa5Tf\xa5H\xea\xc2\xc3\x16-\x1a\xd1nAGV\xdb\xf1)\x06P\xea\x89\xe8\x9dp\xb3A\x92\x03q\xb2\x0c\xcc\x04Yl\xdd\x01\xc3\xb3\xc7)\xdb\xfe\xa1\xa5\xd75\xdb\x15\x84\xaf\xc9X<W\x1dF\xb6\x0b>;\xed\x9a\x830\xec\x04\xa4m\xf0\xb6\x02\x17mI\nO\x0b@G\xbd\xfcbG[\x9b\xad\xf1\xf2\xd3\xbfJ\x1aMoA\x16K\xf8\xd5l\x89\x07W\x8f/\xbdG\xa7\x08\xf2\xcc1p\x00\xc4\xcbL\x80\x83\xd1\xf5\xe6\xe0L\x11\x99m\xe4\xe4\r\x96\xa9\xa2=N\x95&\x90v\xcd\x14\xb4\xb1\x14\xb4D\xd6\x0f\xe4\xa0\x97\xd0\xb7\xac\xb2z\x96vX\xef)\x82p\xbf&8\x8b\xa4\x9c\x05\x94U\xad\x96CGtpO\xdf\x86\xcb\x9f\x1c\x04\x96\xc6\xfd22\x8f\x02\xd5\xe6\x86\xed\xa0\xf3\xfb\xa0\x18c\xf49O\xfb\xbfh\x12\x8eV\xca3a\xee\x17p\xb5\x1dQ[n\xcc\xee\xdf\x1a\xfe\xd3\xf3\x90=\xec\x06D\x0eL\xf5\xc6\x1a\x01e\x83\x0b\xfa\xc58\x12mE\x03l\xb7\xe0\xa1\x0f\x01\xe5\xa4a\x8c\xd6\xb4o\xe2\xff\x1d\xf2\x8dr_\xc9\xcb/N\xd6\xf5\x9c\xc3R\x0c^\x8b\xdd\x17\\}]\x1c\xa1\xf7\x95\xb1\xe3\x8b\xac6\xfa\x10\xee\xa0\xcdl\xb2\x93\xe1y\xd2\x05oR\xa3\xb4\x14\xab\xbb\xc4\x86\x98\x1a\x05\x85\xda\x01\xe2~j\x1d>\x81\xe8\xde\xb0+\xf4A\xb5\xbc\x00\x07\xa3\\\xd0\xe3\xf3\xcd\x8f\x0e\x9c]D\x99k\xb9/}u\x97S;\xc1\x95\xbf\xb7\xbb\xc7\xbfb\xf3\x1a\x12\xe0\xd5|B\x87\x18\xf23lx\xb7\x9e\x1c\x1a\xdb\'+\xd9\xa9N\xf0$\x04\xa3\xff\xba\xae\xb6\x06\xfa\xa8\xbc\x13\xe5\xa4\x9ba\xf5)%\x14\x07O\xb3\xbc\xbd\x19\x03o\xf5\x08\x9f\x9bl:\xcf\xc24\x80\x94>!\xf4\xe3\xbe\xa4\x9a\x1e\r\r\xb6\xee\xfe\x9e\x0fP\x1d\xea\x82\xc9\xe4W\x01b*z\x82\x1b\xaaGQ.\xc4\x8fz\x83\x8a\x923\xffQ\xbc\xb93`|\x1d1\xfe$\xb5p\x00\xcc\xb2\xd4\xfbc\x10\x17U\xc8\x8e\x1a\x96\xd1\xf6gW\x1a\xc2 \xb0\xad\xa40\xa9:\xc8\xcc\xe5\xe7A\xb5\x9e\x94CgD\xa2\xe4\xd6\x89H\xc1\x0b\t[\xd03\xed\xf0\xc0\x83\xcb\xdd1\xd1Q\xc6_\x1c\xa0\xec75\xac\xe4\x00\xeb\xa5j<\xfeyG\xfb\xcag\xe7\x8e\xc9\x8ba\xf9\x94\xc9\xa2\x1f\x10d>y\xb4\x9ey\xdb\xce\xca\x02\xf1\xca\xaf\xd1\xb9p\xb3\x86&\xd13\x85\xb8\xde\x81\x13\xd2\xdb\\\x027\x08.WI\x88X\xee\xf5\xf7\xe5\xcb\xec_\x91B\xdd\x9a/\x0f\xec\xa1>\xbc|G\xa1\xb0\xbc_l\xd1\xba\xf95\x1el\xc6\xe54;\x87\x96\x9d^\xf2T\xa7m\x031\xa9\r\xfdQ\x0c\n\x0f\xcbp}\xfa\x8e\x86Ga\xf5yi\xdc\xacEO\x84z\xcb\n\x84\xaf,\x050\x8d\xe9\x15E\x9b\xca\t\xd6/\xdc\xe6V\xa7"\x04l\xa0\x04R\xf5\xa6<(ut:K\xb3\x96\xccA\x9aR\x1a\x81\x13(VgD:~8\x99\xee\x80*\xc5\xdf\x0c\xec\n\x01\x86\x16r\xa6\xb1\x9d\xa8\x9b\xa6\xddiy\xad\x10\x1d\xe4\xf80\xa4\x13\x97\x817"\xac\'\xa5\x94@\xb2-\xcd\x8c?\xe3\xe1\xdevmt\xa7D\xd4\x8bG{\xde\xb6\xf9\xd4\xef\xfb\xccM\x96s\x86]\xe5\xb6\xe3\xef\x85\x8cX\xefdqQF\x1a\xbex\x93\x12\x99\x8e!\x0b"]\xa6w\xc0\xde\xc9\xb5\x02\xc7\xae:\xfb\x87\xff\xb7\xa1\xc31\xed\xecFT\xed\x98%\xa1i\x1b\xf2\xaa\x0b\x9a\xa1I\xfb\r\x8c\xbd\xdf\x0b\xa2\xb1]\xca\x00\xfc\xf9x\x8e^c\xc9\x98\xbc!\x90\xf2G(\x0b\xb7}\x90\x9c\xfbA\xb0V\xc6\x10F\xb8\xef\x0f\xac\xe4q\xd0\x04\xe5\x039\xa0\x154\x8d\x88\xae\xc1\xa5\xb1\xf5\x94>\xff\xb0\x86\x02\xcb\xd6\x01\xe1\xde\x08<&\xb7\x10\x1b\xeb"\x92\xb0E\xe3\x0fg7\x82\x1b[\xf7_:\x8a\x06\xac\xfe\xbfk\xb2b\xd2\xbb\x13D\x07\xfaR\x00\xc2\x8c\xb9%?\xa7\x88\x17A\x191)b\x96g\x06^\x99V\x9cD\xcd\xb78\xf0\xc2\xaf@\x12U\xc6Z\x841?\xb7\xab\xb5\xbe\x12\xc7\xbf\x1da\xb4\xa2u\x80\x18t\xcb\x89\xaa\x00\xe0\x90FH\xae\xc8g\xba\xc1\xbf\xa8k\x1cu;L)1\xa1\x02\\\xfd.0H\xcd4d\xb0\x83\xcfB\xbe\xc4\x9b\xabN\xd1\xcb\xad\x838x\x0e-\xd0\xd7\x81\xde\x85\xf5\n\x8cv\xfd\xa6\xd8\xb2>\x01\x9b4\x87/\x0e\x9e^o\x87|W\x12k&\xa7\xd0t86\x85=\xa4\xdd\x99{(N\x8d\x1fJU\xea\x89\xe7\x80\x06\xe1\xde\xa0$.3\xa9-\xc1\xe3\xa4\xe1Z\xba\xdd\xe7\xd0\x07V\nn\r\x01\xb8\xb5^\x7f\xddS\t2\xb1Y\xa0\xdcF-\xd8d\xb1h[\x90`B\xa8\\\xb8\x0f\x1d\x976PQK\xd2\xd1\xd5\xef\x0f`\xd3\xe18W\xb9\x89\x8a+\n\xe2k@8\xc65\xc7\n7@\x8f\x0cZ\xd0\xf0U\x0c\xadR\x89Z\x10\n\xe6!\xad\rL\xe8\x1f\'U\xdb\xeb\x8eV\x15~\x0b\x8b\xf7}<\x06\x11\x1e0~\xe8\xb7%\x0b\'M\xb7\x92\xaf\xf6~\x94\xebD9\xca\xb0\x9ad\xd72A\xc1\x98r\xd8\x10\xed\x83\xb2\xc3S9\x81\x80,4\x95\xbb-\xd4\x9fE\xb8I=\xb5\xc2hv\x19kJ\xccCv\x00]\x9d\x95C\x84\xf4\xe1\x0f\x7f\xe6\t\x0fcp\xbax\xda\x0b\xa5\xb0_15"\xf9\xa6\xc7\x8e\xae\x8d]!b\'b1\x88\xaa\xc4YA\x1a7\x19\xfcP\xb3o+\xddM\x88\x11H\xd15\x1e\xfc\x86\xb7a\xfb\xdc\xc9\xa8\xe2\xb5\x91\xbc+/\xcd6\xfci\x0c\x87\x9b\xa3\n\r\xbeg\x0b\x9d^\xc8\xee)\xfc\xbf\xaa9\xb6\xa2\xd4\x87\xdewj\xca\xb7*/`~^\x0bz\xad9\x1at\xde\x88\rK\xec\x0b\xbe\xff@\xea\xaae\x9be\xd8A\xa8\xa0\xd9\x8c\'\xff.\xb1\x8a\x99m\xc6?\xa2\xefpxc\x97#\xd6\x91|]<\xb7\xc0\xe8ER\xc1PU4\xf5f[\x15\xc08\xe3\xd8\x0c\xc2\xf1\x81\x83\xc8\x7f\xbc\x1bl\xc1\xdb~/!"\xb4\xf4I$\x14\xe3{\x184\xc6\xe3F\xcfP\xcb<\x12v\x9f\xed\x81\x85}\xfa]\'D\xc2\x8fI\x94\x03\xaa\xbf\x82[\xa4\xb9\x11LO\xcb\x17\xd1F\xb0\xf4\xfer\x1b^\xff"aT \xc4\x95\xd8\xd3|j^f\x05\x12\x9e\x1d\xd72\xd9\xf0K\xa3\xc3\xb8\'FB\xc9\x08(\x8d(\xbf\x0e\xbcCt|\xd6\xde\t\xaa\xc8m\xae\x1a\xa8}\xb5N\xcaE\xdfI\xfdA\xc2\xc8\xa1\x9dG\xcd\xb9ay\x13\x02\x05\xbfw\xc8\xc2\xeet<\\>o\xa8\xf3\x93\xe4\xc5\xa6OS\xdf\x9a,\x1f\xe0\x84\xc3{AXx3\xc1[\xfa\x94S4\xa4\xc0\x81\x8b9\xae\xe8\xbf1\xa5b\r\xea{]\x9b\xecnLn<\x06\x81B\xa0\xaa\xb7\x93(\x0f&\xd5\x8a\x87\xa4\xd3\x1d\\\xc2\xcf\xea"L\x9d\xe5l\xd3\xe7\xdc$\x03\x11y2S\x19E\xe6!\xae\x925j`\xc6\x9ejc\x04\xbb\n6\x96\x8f&a\xe8\xc6\xd1>\xd3\xc0\xc5\xb7PU\x85\xcd.\xe9\x04\xd6@)\xd7T\xc5\x97im\xdbP\xe8\x07\x02\x8b\x17K\x10V\x88\xc2\xe0K\xc6\xe9\xaa7\xe6\x04X\xb5N\x9b\x1f\xd9|\xde!\xa7\xe0\x97\xfe\xe6\x8e\x90K\x04Kb:bSm\xa64\xb4u4bS\xa1\x00\xfb\x87{%\xd0ilw\xab4\xa02|\x89\x0f\x1bE6\x0b\xe7\xf3\x8e\x87c\x17\xdb\x0c\x832\xf7\xac\x93\x07\xbbZ\xc5+6\x05\x95\x83h\xba\xfc\xa8[\xbe\xf4\x91l\x08X\x13o\xd0\xea\x8fJ8\x8c\xd6ks\xd7\x10\xb4\xdbx|\xfau3\x06\x0eh\xbd\x92S\xe7\x84\x86c1\x9c\xab\xfc\xa5\xa4\x80H\xf3lH\xf2\xdd\x0fa\xb9P\x15\xfe\x92\x83\xef\x88\x9c\x93X\xe8\xdei\xd5E\xe4.t)\xbc{T\xad*c\xf1\xda\x14\\O\x88G$\xcf\x82\xb6\x9dGM\xaa\x14\x12\x19\xae\xee\x83\xe0T\xd4p\x92\x0b\xa8=]\'\xbf\xb72\x10\xe2\xa9\x10!\x91*\x01G)\x17FT\xed%\x05M\x99Rk*)\x0b\xca\xb5\xf6J\xee\xceT\xb7p\x0b\xc1\'\xee\xfd.\x0e{\x10\xeb\xb3\xf6\xfaK\xfd\xa98) -yK\xb33\xcd\xa2B\xc41\x12\xff~\xfd\xfb\xd7F\xc2\x9e\x8cE\xde|2\\\xa3JJ\xe0\xce\xe5\x9a\x7f"E\x7f`!\x10y\x86\xf7\xab\x06r2\x8b\xa8\xfb\x0cI\xd3\x84\xff\x13-\xdce4\\\x1b\xe1\xc1\xa7u#\xd7\xd9\x99\xe6r\xfa\xe1s\x0f9\x8a\xc4\x80\x83\x0e\xe2\x0eJ\x9d\xf0\xf0\xd6\xb0\x1f\x94"\xe4u\xbf\xd45V\xbd\xaf\xf33\xb2x\x17\xd9\x14u>\xd3\xec\xb08\x803\x1b\xdf\x88G,;s,\x8e\x04J\xad\xd9\x81BN\xe9hMH\x90\xe6\xe4\x0c\xfam\xf3\x1b\xa8 \xb9T=(\x03\x0f\x87\x13(\xd3#\xca\xf1\x89v\xa1:\xe3PO\xef8\xfe\xbc\x1e_\xf9\xb2\xbc\xe5\xbd\x9b*\xbbW\x97X\xcf\x81\xe1B\xe2h\x11G.\xe8\x8b\x8c|(>;\x0e\x8e\xab\x99q#\xc1\x05\xedPx\xee\xf8-\x9d\xe6\xd5\xe2,\x97\xd0Zm4\xb3\x18z\xce\xbeB\xce\x974\x17"\xadr\xff\x9d\x0c\xb34\x0b9#!\x18f\xb3\x8a\x05.\x1d\x89\t_\xb5\xcc[\x83\xad\x82\xf2\xb7~D\x08\x91o\x03u8\xf3\x9e\xc8`:\xbf\x8e<B\xeem\x8e=\xdb.\xc7\xf2\x94\x96\xf2\xe7\x0eS\xbb\x1c\xdb^}\xe90\xe2\xf6S1\xdb\xff\xe1\xad\x95\x12\xc7GJ\xa5\xf4\xe2\xf5| TI\xdb\x0c\n\x82ZAq\xbd\xfe\x02\x98\x1d\xc7\x9f\xb2\xa2\xc0CB\x10\xe8\x1e\xd1\xdb/\x0fa\xf6!\x97\xd9\x84\xe8\xb3\xb8\xef\xff&\x89\xe3\x81E\xc4\x18\xd0\xd7&\xfb\xb2\xfaU\xfe\xd5\xbc\xbb;\xeb\xb2=\xae\xe4\x13\xf3\x86U\xdb\x01"V\xa5\x9f0|o9\x8dD\xe3\x04x\xbc^f\xda\x82[VY\xf4\xc3\x03\xaf\xe1\xf2\xd3\xf2\xde\x19\xb3\x1b0\xaf\xde\x137\xed7|\xad\xc8\xb2X,?\x0cQ$\xd4.\xdf\xe7\xaa\xa4t\xc5:;\xc6;\xa8\xc6\xce\xb0T\x87}w\x07\xf3\xd2/\xd7#y\x9f\x9e\xf9\xbeIE\x99]b\x83\xc9\xe2\xf7V\xe0XF\x89\'\x8e1u\x16~M\x95c\x05\x9c\xc6\xad\x84\xcd\x98\x85\xdb\x87sz\xe7\x8ah\x97\x7f\x96\xdd\xa3\xf9Me\xaf\x8c\x1d\xa5|&e*U\x84z\x84\x9ac3\xbeq>\xa4}u_B\x84\xf3\x06\x8dA\x81:\xa4v\xa8\xe3S\xd5\xdd\x8e:\xdce\xa9\xc3\xedG\t\x18#\x80w\xc3\xf2x\x02"\x8bm1a\x04iRp\xc9\xac\x8f\xfa\xbc\x88\xc78.!\xfa\x05\x9f\x9f\xc8\xd8\x9b\xf7c\xe2k\xc9\xea\xa9\xc7\xf2\n(\x99sX\xe7Z>\xd1\x8b)\xc42\x8d\xa5\xf5@=\x14\xf2\x02\xab\xd4\x9e[\xbcF\x95\xb1:\xe1\xfc\x99\xbe]\x1a\xee\x1c\xb4n\xa8\xd4\x11K\x05#\n\x1a)\xe1\xff\x91\x07\xce#\x862\xb1GzD\x10\xfd2\xaf\xb2\xfa\x96\xb6\tK\xc7Nl\x83B3Q\xd1\xf0\x17\xf7+c9\xd8\x87M\x1f<>\x94(\xf1 \x9f\x9f\x15{\x10\x88\xee\x13\x02\xdb\x7fOS\x15\x17\xb9\xea?"%D\x7f\x91\xcfM;\xff\'\x9e\x19{\x896\x89%\xb7\xaf\xa5\xdf_(j\x8a!\xeds\xcc\xab\x9c3r?\xf4X\xfaz\xdbZ\xd9\xf6|o\xa9\xf4\x9c/.9j\x97n\x80bf\xd2sa\x03]J3\xf4\xdd\xaa\xdc\xbfsvx\xea\xe0\xfer\xb2\x02\x82\xf6\xdc0\x88X\xdb :\xa6\x91O\x95J\xef~P1Fo\x08\xa0\x94\x7fc\xbfV\xad\xd7\x1ad\x1d\xea\x8b\xb1C\x7f\x19&\xae\xab\xa4\x9aDC\xff\\\x9fNT\xa3;w\xfe\xe9\x1e\xcd\xeb\x0ek\xac\x03#\xa4\x0e\xdd\xe1j\x8b\xaf\xca7T\x82r\xa4\xd1\x88\xb3\xe9\x93\x10\x9cKJ\x92\xb7\xcb\xe4\x045tI\xe7\x97c\x04\x05\x00\xbf\x8ff\x84?E\xec\x1f\xd8\xcd\x99{?l\x8d\xb3\xb7]T\x1b\x8fwh\xa16h\xfb\xff<\x0fN\x9e\xba4\xc4.\x1f\xf2\xd9/j\xc4m1\xaf\xc3^\x8c}d\x98\x1b\xd4\xd8\xe2\xb7\x1a\xb9I\x9f\xa2u\x0e\x19\x05\xf9\xad=\xfc\xc9\xe6\x8d\xe1\xf6\xc2\xc3\x9d\x04f\xae\x83WT\xb0"\xc1\x8fJ\xbf\x8eB\x84\xb6\x98\xa0\xb8\r\x07\xa2\x1e8\x93hk\x87r\x8dS\x83s\x1ci\xf7\xcb\xbc\xe4\x16L\xf9!t\xc0\xbfo\xa5\xe4\x8e\xa7\xa5Y\x83\tV\x91u\xae.\xd7*\xcf\x81\x06\xc2\x1c\x03-T\xeby\xc5\xa4\x8a\xfd\xe4Q\xc4#d\x91w\xeeD"?\xb1\xe4\t\xa3\xe3m\xcbn`\x9d\x90g\xcc\xabEnO\xc3\xf4\xfb9\xc0\x06\xae~\xcceH;>N\x9f\x8d^c\x8b=\xa0esi\xdd\xcb\xeeh\xc5\x19\xac\xed\xd66\x1b\x00\xdd\xed\xf3\xd5\xe5\xc4)ej\xf5\x0c\x15\xadZ\xfe\xe6\xd1Hg\xe6\xdf\xe7$Z\x81\xaf\xa3\xa54\x8f\r\xa7\xf6\xa0\xdf#\x15hR\xdb\xd7\xa3\xf6\xd9R\xf0\xd8\x89\xea\xed\xaa\xe1\xe0\x05\t\xc3t\x01\xbf\xcdzX\x9eY\x9b\r\x91\xf3\x14#T\xe6\x0b.\xfa\xb6\x91\xc8U\t0\x1dC|?|\xdb\xd3\n)r\xaf\xb4\x05\xa1\xd7\xa7\xc9\xc4\x8c\xeeB\x12V\xeag\xbf\x84\xdbB\xeb$\x16\x8f\xc6j\x12\x89\xeee\x14x/\xe2\xd0\xb4\x91a\xac\x81 \x8d\x87\x0b\xdfh\x8ct\xd2\x1d6\xc9\x9c\xb4\x83\xbe\xab\x96\x9a \xb81\xa6\xbe\xfc\xba\x08\x0e\x88\x94\xb4\x96\x8e\xef\x15\xc4\x07\xe2\xfer\x02\x90\x8c|j\xbf\xa7\xa8\x92\x80\xd8\x16,\xaa\xea\xca\x86\x8b\xdc\xe6H\xe6\x7f\n9\xb7\x1f@Uoo\x84Z\x92\t\x1cH^\x1c\xe3[\xf3\x8c\xb9\x16\xd1_\x1e\x7f#_3\xfco\xc0Q\xab~v\xf5\x86\xa5I*F\x95F\xd6.*\xafoh\x9bg\x9d\xa8\x11\x8ba1\x0bS\xaa!\xbagv\xf19\xa9Y4\x82\x84\x8b\x1a9z\x06\x9a\x9b\x0b\x96\x144\x01%w\x86\x83\x83\xfb\xe6_\x1b\xf1\xaa<\xab\x83r\xc0\xc4\x97\xe0\xc9\x00?z\x81\xdah\xdbRa\xc1\xd5R\xae0f\xf8\xd2\x135\xf3"\xed4DOF\x1f\xde\x85\xcb/:\x9a"\x1b\xf7\x90PG\x04:\x80\xc3\xd6\xa8\xb5\t\x16\x16\x04o\rB\x9dX\x91\xa6\n\x137\x9a,y\x04\x17\x91y\xf0\x19"\xdd\x14\x80\xef6bKWH\xc0R\x19\xc8\x14\xd0N\xd4,\xba\x9f%P\xf8\x85s\x07BI_~\xc7Eaz\xd0l\x17\xdc\r\x1b\x94\xe0c\x1c\xf5\x16\xa6\xcc\xa8R\xa7B\xa2\xa6\x9d:_b\x1f\xb0!y\xd5\x18o\x9f>\x1a\x07Ud\x9b\xe5\xda\x0139\xea\x1fb\xf3\xd1N\x80\xb5.4\xdeTa+\xf5j$l*\x99NN\xcf\x88\x17\xa0j\x01\x12\xbb\xdd\xc6\xfe7e\xd6>\xce\xb55i\x9a\xf6?\xf6|MV\xa0\x05\xc8\xdb\x86X\x88L\x8e\xf2\xff[CN@\xae\xed\xcfZ_\xee\xbe\x0c/xm\xf7\xcbB\xfc%\xe0&\xb8s\x16\xdb\x00V@\x00\x12\xfeD\xdb\x03t\xbe\xb0\xd9\xdb\xf6}F\xff\xe1\x02\x9c?\xcf\xfa\xfe\xda\xc2\x94L\x9a\x9cM\xf9\x8b\xa2sBG\xc0F<\xdbTpl\x07~\x0b\xd36\xd7\xf8\xf3\n.\x8f\xe3Y\x81\x91\xad\xba\xfe\xd9u\xf2\x0bx\xf9_p\xa7\xf1\x98\xf2\x1f\xfeM\xd3\xe1Bx{\x12\x8dC\xd1\x1by\xa6N\xfd\xfax\xcd\xe4\x96\x1a\xf1\xff\\(Q\xfc\x0eTP]Kd\xf7\x94KF\x04\x7f\xfcC\xf6\xae\x92\xd8\xe5\xed^\xea\x1dC\xa2\x8a\xb8\xda\xf3\xe5\x89\xcd\x86\x13\x08*j\x84\xff\x7f\x0eWw5\xa8\x1e\x15 \xf1WG\xb4|\xb4\xc0\xcf@p\x83v;~I\x9dcM\x87\x1c\xa5\xe3>#2\xb9\xb4\x08\x08\\0]/\xaa \x1e\xb2\xc6\x8evW\x83\x12RO\xc6X\x19\xc2\x15:\xaa\x15\xa9[\x8e|L\x17P\x88[\xaf\\X`)\x86RTa\x1f\xe3\xa3\xb2P\x84\xea\xad\xf9\xfd\xfc\xb0\x022\xe0\x95\xa0\xd0\x9d\xea\xef\xb5\x06+_F\x0b\xe7i\xf5\xb5\xa6\xa0M\xac\xd5\xc3\xa4\x8d\xcd7\x7f\xf7\xda\xf6sD\xac\x9b\xe4AQ\xfe\xf04\xdc\x1b\x840d\xe2\xda\xf0\x01\xf0\xd8\x93L\x93\xa2\xff\x03I\x81\xa6\xe3\xa6ws\x04\xd3\x02#\xb8\xdd\x0c\xcar\x7f\x19\n\xd7\xcc\xfb\xf9\x17\xfb\xbf\x94\x88\xa8\x15\x02I\xfa\x01\xf2\xa0\xc3C\x8f\xde"1\xb4C\xc2\x9a\xae4\xdd\x14wxT\x954\x06\x1a\xef?\xdd\xd6\x86\x9d;\xdc\x04b\x9fz#Cb\x82zW\xb8?\xf1\xd4\x0fBPR\x08\xc6\xd8\xeb\xa5\x9b%\xc00\x8e/\xa4\xd0\x7f}\xedL#\xad\xf7)b\xda.\xe4d\xbb[\x19yc N?a|\xc26\xf6\x06\xa9G\xe6y\x06\x8dl\xe0\xef\x99\xcb\xf9\xe9\xcdj\xe6:\xea\xc4_\x14\xa6H\xaaE+\x90\xd0\xb3\xff\x91\xd3\x94\xa2\x88pm"\xac\xcd#p\xf9\xacvm?\xaa\xd4R\t},&\'*\xf2\xb2\x0bB\x89\xffB\xac\xcc\xd9\xee3C[\x85\xe3\xf9\xe72i*\x05\'\x8bV:\xec\x17\xd8\xff\xa2\xb6\xad\xc5\x02\xc5\xfd\x8aW\xa0\xbc\xe9\x1e\xa6Sc\xbbk\x1a\xccZ\xf8\x96\xe3\x8c\xa5\x9c%&vZ\x14R-\x92?\x1eM_\x1a\xa4\xee1\t\xc8\\\x86\xabU\xa9\xef\xfdn\xd3t\x95\xbe\xd6\n\xbe%\xd0\xeaO\xe8/g\xc4\xa2\xc0]\x1e\xee\x9b\xef3g\'5\x82Y\xb2\x9b\xf0\x94$m\xb0\xe8\xaeN\xdd\xe8\xce\xb64z\xf7\xef2\x19\t\t\x96\xda\x98\x95n\xd9o\xa7\xc9\xb6r\x9e\xd2\xc5\xbd\xebw\xd6\x9e\x8d\xd2\x03\\ \xd4\xb2\xc19\xc9\xee6O\xdf\xaf>y\xe4\x03\x17\x86\x17\xec>3\xb3c\xda\xd0\x06\x8e\x9a\xcd\xe6\xa2{\xcd\xcb%:-\x16\xf1\xf2\xe1`\x1d\xa41\x11;S\xea\xcb\x81P"\xf2H\x16\xd1\xea\x99\x1d\xc1\xc5\xc2\x98\xfd*\x9b\xcfo\xec\xc4}q\xd4l)\')\xdeA\x99\xaee\x02\xc3=\xeb\xd7v\xe7\x0f#\xd9\xfd\xf8\xa3\xa0\x1f@\xea\x93\xb1W\x03["\xe1Z\x96\x95R\xca\x80\x06\x8f\x02B\x0e-\xf4(\x804\x9a\xd8\xbe\x81\x89\xf7\x90[\x82O\xdc\xf3MKh\x90\xf6l\xdc\x84\xb5\xe5\x99\xe2*U(\x7f\x7f#\xb5\xfb\xc2\xc0s\t\x93\xd6\xd8\xc7$\xa0\x0b\x9c\x1f\xfa\\\xd9\xc1\x1dn\xaa\xa5N2\xf8nt\xf2 j\x1cS\xa9\xc5\x82J\xc4\xaf\x8d\xe0\xc3\xa8\xf7\x0e\xfc\xef\x9e\x87\xb3\xc3D\x89\xe5\xf9\xeb$\x83\x9e\xa1\xa0<\x03\xf4\xd2\x14\x8a\xd8\x01\xdf\xebi\xf4\xc39\x8d\xf7\xc0\x0f\xb13\x8a\xe4y\xd7\xd3\xe2\xbd\x19D\xef\xcd]\x0f\xc9\x99\xc3fd\xf5\xfd\x97\xd1V}\x9bB\x8c\xe6\xd1\\\xe4\xa9t(\x9b\x8c\x9d\xee0\x85\xe4\xab\xcd\xf5\xbcpBT\xe4V\x13\x91w!\xa2zVD\x9c\xd0\xeb\xfd\xac\xf9\xed\x96\xf3.\xf6\x7f\xe7J-\xe9\xd6\xa2?\xb3\x83\x07\xa3\x8e\xe6L\xbc\xcd\t\xd2=\xe8p\xb31\x830\xe1\xc1\xc4#\xdb\xa5\xb4\xcb=\xf9WC=\xbfU\xb9@\x02y\x0e\x15\x1e>\x87\x16"\n ,]\xc5\xdfS\xcf\xba\x0f\xf0\xed\xa2\'L\x0cy\x95-\x05l\xa0,@\xee\'pE\xdbF\xffG\xb25\xcc\x86\xc3\xe0\xeb\xdb\x98\x7f\xe5s\x07B6\xcc[_\xdf\x14\x10D\xa9ZO\xb2vW`Q\xe9\x8f~\xc5\xfa\x00\xe5j\xde\xf8\xeb\xf3\xba\x02\x08\xa3~\xc2:!7\xb2\xac\xba\x8b\x9b\xf4\xaeiT\xa2^`#\\\x1f/2\xe8\xb3\xc2AFQ\xb4\xff\xd7\xcd\r\x1a~\xb2]1\n\x8e\rk\xfb\xa7\xe6\x04\x15\x0f\xbfkY\x83P\xf6\xe6\xb8\x96\t\x15\x93\r\xbcJ\xe8\x01\xbf\xde\xdf\x9d\xf7\xc2U\xad\xbf[\x8fZ*\x7f\xb0\x18g\xf4\x97\xf7\xce\xeaq\xdc\xb0\xc9\xf9\xfe\x1c\xc7\xeb\xe6\x89\x06]\xca\x84@\x1e\x94\xf4\xeb\xb1\x83\xef\xebM\x99\x84\xf2\xbf\x17]\x8a\xcf\xdaJk\xc7\x01\x87\xa5}j!\xbc\x84PI\xd4\xff;\xf8S\xba\x03Z\xda\x8e{\xca7\xc2QOj\xe1\xadj\x04\x13\xb8 \xa7/\xec\xa1c5\xed\xb7\xfb\xabF\x82p\x0cu\xca\xd1\xe7\r\xe40I\x8a\xc5\x8f`r\xff\xae\xb2\xe0)\xc7\xe3]\xfd\xc8(\xc6@\x1e\xdc\x1cVn\xb4E\x7f\x90\xa2\xe6\xcc\xcf\xef`\x93\x8d\x84\xcal\xb5uAG\x8b\'w\x0cX\xecZ\xb2\x95:\xd3|\xe9x\xb0"=\xd7\\\x9e*\xf2\xd9T\xa8\x95\x8a9\xfa\xde+\x92\xb1\xce\x85\x86AX.`\xabP!(>\xe3\xc4\xe4\x1d\xd0\x82B\x929V\x988\xe0\xb4\x9a\x8bSO1D\x8ce\x86\xb1\x8e\x97[-\xea\x1f\x1a\x00\xa7\xbe\x00\xb3<\xc4lT\xb7\x8f\x98\x1em\xe7\xeb*Y&2\xda\xe8\xd0\xb6\xd7\xcb\xd0XQ\x17\x97|k\x17\xd7\xfe\x12\xd0!\x17\x81\x95\x0ee]\x16\x9cl\xa9\x08\x8e\x1b\x9d\xf4\x1a\xe7\xdfY\\N\x01\x8a\x9a\xae\x9f\xdf\xc9\xefz}H\xbe\x85\xeaTP&y\xd1G\xc6\x9d\xa6\xe0\x1cyb\xf8i%o\x93<\x1f\xc1\x99\xc1\xb1\xc2\x0cG\xcd\xdb\xf0\xc5\xb4\x07|\x9f\xb9[ \x9c\xb5\x83\xfd\xbe\xa2\xda\xda\xb7\xd1\x0eM\x98?\x19[\xd6"\x05\x96\xca+b\x82\x19\xef\xcfkJ\xc9i\xecK,B~y\xaf\x01+\xb3\xb2\xaf\xe9\xa7\x117\xa9\xb3\xa8\xf2\x1e\x94\x90$c\xdbJ\n\xed\x1f\xea\xe3\xf6\x16_\x08pX&\xca\xf5\x92\x8cQ/\xadE\xef\n"\xe5?\x957\xfd^\x0e!\xd2S!\xe2\xb8\xcd\xd1\xb3\xf5B\'\xd1\xb6e\xe1\x9a\xb7|Qlp|\x1fTh!B\xba\x8co\xcd\xb5\'\xa0Z-."\xa6\xa3.td\xbf\x8c7/\\\xe6\x85\x13\x8f\xf8\x0cb\x81&\xfb\xb3=\xc9\xc9\xe7:&\x1c\xdd\x8fx\xec\xc3\xe9\xd5I\'\xec\x1a/\xc7,\x92757\xd0\xc2\x93\xc9\xe2\xe4\xb6\xfck\xea[W\xdc\x88\x17.*j\xa1\xef\xdb\xf4?\x13I_!\xf6\x03<K\x8c\xc8.X\'g-\xe6q\xa7\x0b\xbaMQ\x9e\xf1\r \xb1\xfa\x01\xe6\xd5I\xe5\x16\xa6\xc1Y\xe8g\xf7b\x0f\xacZ\xec\xa8\xd13{4t\x9f\x87\xfcl\x0b\xad$jV\xb3G\x05\xcds\xd9\x9fm?\xf9\x1a\x19\x98\xc3\n\xe9\x80g^\xeb\x86\xed4tO\xdc\xfc\xf7~\xa5}\x12\x01\nC\xe4c\xc7\xe9p\x7f1\xdb\xb9B\xf0;\t\x1d(\\,+a\xc7\xd1\x03\xec\x83\x8fVp\xca~\x00z\xdf\x19\x98\xbc\xc2$\xae\xf5\x8b"\x06!\xde}\xf8\tRv\x88\'\xd0d8\xf7\x10\xd6X\xbc\x1b\x16m=\x1bU\x1b\xcfQL\xf7\n\x0e\x0f]4ZC\xa9\xb0o\xd6\xc7:\xb7&\xc0\x84\xf9S\xf5\xf7\xc5\x95$i\xc2\xa4\x92\xa1\x11\\\xac\x12\x1d\xd1\xfbF\xa1\xbf\xe37\x88\xbb\xd5\x16\x07G\x9e\xa2uj\x9d\xaf<V|\xf6GS\x18\x9a\x96\xa9\xa9\xce\xd4L*8\xef\x03\xe3\x82^\x1f\x1aO\xdc\xdc\x9b\xd4\xa0(\xbd\x9aS\x01\x1b\x1dS\x16\xcd\xdb"f\xf6\x8c\xe0\x9b\x05_\tg\xff\x1fK\xa5\x8d"\x1a\xc7\xd0\xdd\x11Me\x8as\xfa\x8f\x19(|b\x05\ra\xe5(\x8b\xd1F\xc1\xba\x88F\xf4\xdd\xe6\xbbl}[\xcd\xee\x1f\x99J\x12\xde\xe8\x9d\x87\xa8\xbf\xeb<&\xfd,*5\x9ar\x06\xa9Z\xcb\xd5F\x8a6\x1e`\xcdj\xb7\x8b\xd5 p\xbd\xd1\xc6\xd0\x06i80\x03\x10\x1c3 i\xf9\xa4\xa6\xd1\x92=\x1c4\xea8\xef\xf0j\xda\xe0\xa1z;}O\x93\xc2X\xef\x8d\xbc\xa9\x07\x83\xdd\x1b\xf75\x96\xd1\xfd\xfc\x05\xbf\x91\x96\xff\xcd\x16\xc9\xc3\xd7\xf1\xdc!v\x96\xe6\xd8_\x14\xb2\x8c\xf9\x18\xa8Q%\xa2\x03\xa7\xed(+\xb2\x80\xb3\xf0D\xd2\xdc(t\xe9\xd7m\xed\x91X0\x1a\xd3q\xa55\x97\x0c\x87H\x12\x11\xff\x19i\x1d\xb0#\xa0\xc8J8\xfc\xcd\xc8J\x0f\x12\t\x06Ag\x93\x0cF4\xa2\x82HZ\x945\xc5`\xa6\xdc\x8ef\x81\x11\xd7\xedW\xc8\x16\x86\x99\xf7K\xcc\x81j\x18\xc4\r\xe7A\x10\x0cvE\x03\xb6\xf5\x11\xe3\xf3a5\x1e\xdc\xeb\xde\xfa\xcdF\x9al\xb7\xcdV\xc2W\x82\xe6>\xda\xbf*VJ\x83\xb0|\xcf\xa8\xae\x7f\x99\xd0Y\xce\xcf\'$\x87p\x9f\x82/\xcdj\xa4\xd6[kx\xf8\x0f\x81\xaa.*\xb79\x12\x02I\x88\'gx\xe3~\xa3{t~I\xd8ZQ<\xce\x0eK\xda\xe2\xad\xdcb\xec\x02\xa2\x91\xfa\x95\xb1\xed\x0c\xfdf\x7f{\xc4t.-j\xa4\x16z\xdc1\xa6M\xcf\xb2K&\xa6\x16\x02\r\xd9\x1f\xb2\x9ezN,\xb7\xefO%\xfc+\x81\x07\xd4\xfe\xc9VSA\xb1@\xcf\xf8\x14\xb0g\xd9)+0\x9a\x03tD\xe6\xc0\xba\xf4\xa3P\xca!ipmH\xce(\xb2\xac\xbd\xc6\xca\x1a\xe9/\xae\xfc\xdc1\xb9\xb6\x905\x1b\xf1-9{Tawa\x81\x01\xf3\xb5[\xc9\x93\xd3g\x11H\x10\xcbm\xbf\xcf\xee\xaa\x98\xb5u\xfdn\xf0 *\x18\x9f\x86<x\xfc\x1bu\x0c\x12\x93n\x86\xac\x8a^\xeci\xa7+&\xf3\x1dtIE\x0c$\xcd0\xc7\x04v\xab\x87Y2\x1a\x1d\x8f\xb2\x99\xa2\x16\xcb\xe9\x9cg$\x7f6\x06\xd5\xec_\x8e\xd0m\x94I\xbe\xbfH>\x0f\xd7\xd4\xafl_\xcc\xff\xc8.\xd74\xf9<\xc61y-\xcd\xf5\xeco=\xb3*\xfe\xd4\xd7\xd6\xaf\x10\xf1\xa6\xb1\x95J\t\xd7\x93\xf5W#\x8a\xb3\xa6\xc9\x97\xac"3.\t=\x83)\x0f\xca\x08\xc0\x07\x01\xff\x9a\xe62\xc6\xe4\x96\xf2d\x95(\x9a\x1b01\xf5{_eLmWAC\xd61Q\xa5\xd7$\xd4\xbd=e\xc9\xe4\xe3\n\xb9"Qd\x8d\x13H\xde\xa0\xda\xad\x9c\x12\xb47\xb3a\x86\x8d\x81/\x00\xe9\x19:v\x9c\xde\xac\xfdd\x1ck\x8bqj\xdf\xd6_\xfcAQ\x9cc7\xfc\xa2\xa9\x8b\x1b\xe6\x17\xe3\x0bL\xf7_\x92\x8dcw\x91\xff\xfe\xc58\xe0oh\xfaKC\xcd\xaf\x99:lH\xcb\xb5\x1d2\xdcU\xbb\x0eA%9X^53\x8b\x05\xcfJ\xa32\xdbL\xab\x920\xd3\x8au\xbb\x07\xd7\xa5\x08w\xecs\x8a\xa7\xb8\xf6f\x83\xf8\x01\x88\xe6\xea\x13\x92\x89\xa8\xe7\xd6\xf5\x98F\xc5g\xc2\xe3p\xc4!\xd4g\x89\x92\xc4pd7\xe9|\xab\n\x87~\\9\\\x7f\xbb\x8c\x11B\xf1Y\x80\xda\xbd\x16@0\xadw\xb3\xee\x0f*\xc2d\x81\x8d$\x8b\xfeP\xf2p\xac\xf5\x8c\xb0\xf3-n\xa5:\x93\xee\x7fsUN\x05f5\xd4\x8f\xce\x0ech\xbf)\xce\xc1\x82G`\xaf\xfd\'l\x104\x13M\xa0\x85O0\xc5\xe1\xeaO\x9a\xdeJw\xbe\xd8\xa1\xb2\x00\x9f\x882l:\x98\x8e(\xef$*\x05l\xa8A\xe5\r\x8e\xa7\xd5\xca\xe9v\xe1\xd4\xdd\x07\xacfl\x0e\x0f\xcf\xc8-p\x0b\xb0\xd2\xa0Z\x9f\xe2I\x07\x94\xf3@\xa1\xad\xfa2\x8f\x13\xb6H\x8eA!\x90\x95C\xf3\xe1\xed\xb08nyvI\x905\x11@F\x96\xa8~8\xf0\xcf\x9b\xc4+$\xe6Nw\xe6\xc1\x19s\x16<\x85\xbc\x87\x95\xb2\xe2 \xde \xbbz\xef\x81\xee\xfaU\xc2\x155d\x91!\xc3BT\xa7\xc5\xfe\x8f\xfc\xf8\xab\x14Y\x01H\xb0\xaaEo\xcc\\\xc9\x13"\x1aLkvN`\xe9\xcd\xb2Z*\xe70\xb9\x82\xfb\xd6\x15\x199\xe4\xc3\x97\xa7U\xffu\x946\x00\xef\xa6lhJ\x90\x0c<\xd9s\xc5|\xe0=\x05\xf62\x87\xef\x07\x9fu\xf4\x17\x1a)1\x8d\x90\rS\x8f\x96\xb0,-\xb1\x80\x80\xd6\xafZ\x87\xa7(\xe4\xfe\x0b+\x13\x01b |\xc5\xb4\x00.\x81\xc8t\xdf\xb9\xee\x0ez\x00U\xe4\x91~)\xe4\x06\xa8\xc2\x00\x98\xb8\xb8}\xc1\xa8;\x05|\x11\xc0U\xc2\xe9\\fEE\xbdk\x10\xc1!Be(\xf5\xcf\x93Y\x1f\x9fOW\xa3\xa0\'\x1eN\xdc\x00w\xf3-\xc4\xb8.\xd9,\xc66,H\xba\x19Px\x14eW\x98\xe3XJ\xb0\x98\xe1\xfc\x01\x886\xbc\x96\xab\x03\x7f\xdd\xa2\xf1o\x15c\xe4>\x89\x11\xf1\xf9\x88\xd1f\xa9\xd8\xb3\xb8>\xc3\x0e\xd9\xbeOu){\x81B\xa2\x1fE\xe5i^\xac\xdf\x05\x0b\x92\x02[\x11\xee\xbe2\x85\xf0\xb8\xe3/<\xb3d\xac\xa1\xcb!PJ@\xac\xcd\xbfq\xe9ne\xc6\xd09`\xf0\x9a\xf2\x88o\xed\xe6o\xed-\x0e!h\xc2AJ\xb7\xe3\x80\x8f\x85\x14}\xe8E\xaaB\x080\x83&.\x9c4\xabT/\xf0\xa1y\x87\x9fLy"\xda\xd5>\xdb\x15\xc7\x13\xdf\x1b$\x80\xaeHnq\x91\xd9\xd94\x95>\x02\x1er\xc9\xb4\x02\x9crH\x1e5b\xd2,\xda|\x90\xb7\xb8\x04$\xaa\xdbX\xffoh\x8c\xbf\x83)h\xc7\xce\xfdK\x85,Y\xfe\xd0\xf8\xa2\x027\xba\x0b\x0f\xb3;B\xf3\xc8\xa3\x7fD{\xf2\xf6i8\xca\xe1\xfa=(Z\xfbX')
dist/pyarmor_runtime_000000/__init__.py ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ # Pyarmor 9.1.7 (trial), 000000, 2025-07-10T12:22:33.150658
2
+ from .pyarmor_runtime import __pyarmor__
dist/pyarmor_runtime_000000/__pycache__/__init__.cpython-310.pyc ADDED
Binary file (232 Bytes). View file
 
dist/pyarmor_runtime_000000/pyarmor_runtime.so ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d2440d801564ced9cb5c47413b7903ad28d3133d0b3c2796ee6a3027238eed18
3
+ size 792360
requirements.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ gradio==5.35.0
2
+ requests==2.31.0
3
+ python-dotenv==1.0.0
4
+ Pillow==10.0.1
5
+ pyarmor