Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -1,4 +1,4 @@
|
|
1 |
-
import time
|
2 |
from datetime import datetime,timedelta
|
3 |
import requests ,re
|
4 |
import gradio as gr
|
@@ -140,64 +140,75 @@ def pay(auth_id):
|
|
140 |
|
141 |
|
142 |
else:
|
143 |
-
return "
|
144 |
except Exception as e:
|
145 |
print("异常>>>>>>>>>>>问题原因:",e )
|
146 |
return "🚫请求异常"
|
147 |
|
148 |
|
149 |
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
authorization_list
|
154 |
-
|
155 |
-
"Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImE5ZWJiNDFlOGQ4YjQ3MTg5YmEwNmVlOGRiNzM1OGRiMDFkYzhmNGJhNDZhYWJlOThiNmExM2I4ZmZiZTljYWRhYzAyYjFiYWY3M2QyZTA3In0.eyJhdWQiOiIyIiwianRpIjoiYTllYmI0MWU4ZDhiNDcxODliYTA2ZWU4ZGI3MzU4ZGIwMWRjOGY0YmE0NmFhYmU5OGI2YTEzYjhmZmJlOWNhZGFjMDJiMWJhZjczZDJlMDciLCJpYXQiOjE3MjY5ODAzNjMsIm5iZiI6MTcyNjk4MDM2MywiZXhwIjoxNzI5NTcyMzYzLCJzdWIiOiI5NTM2MzkiLCJzY29wZXMiOlsiKiJdfQ.GQEdqovMWk0RgsE8M3RyKP-YhGlg8ZubxtEf57azXk786mXGwSx8WIEl_gVOcgy9zzC6YA26i_iUcJpDgtT-yFT2utqUpZS4LCoS0VYCQzXkDmYAPeypjgyK0WYHJ10EBSq6un1dljkIW2kRzKMOsn_Gq3L8jPGgQb4wyErllXpQETdCxoSX90diup7XjGqevhgLQJNmpcK5zv5kp1JCaMXzaqu9c7TnBTefM_pKcKD5P-18ftGIkHpCHcBDUTti3AzCVfrbWqhDRyM1MzQzp7pTL7d0K2YlQ36QgmIaphDrvhLeJCwwpGO1rfyG-ubiEBXisNNMUA9n63VRQZ6vhqYEEqNeY9wW1YRA_PDJY1w76HCKndn6GaV7dwDJXSy3SQEAeL9kl2sh-Abeg6rQEihIwkB03KNAfKdGnAqJXGA2UYORk0Mohh36KAMsUXDmGxdN2aGqTs36Olpqh1L_9aT5HY-Cs0xoOG3ZkZEFRioAPZKnKxCmsWiMXim5Vy-Bi3DQShfyxOhmScGMntEC1PKNOAMG1Ec_JL2NCb_1TkOBxzxlZKKCx6iWQn7mDE3LFkT8Knv3uoROch3roGdaO75oLWlS6BB5rd97yvoZBwAVzKEYJ5fIcCYofoFb7cVKUf3O4XWpK6m6KzsrQrZOfFJRYCil0kq-70aGFzE_2FE",
|
156 |
-
"Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjFkOTBlNmU2YThiZGRhYzEyMGYzOGE1ODBjNjUzZmI2ZWM2MDMxNGUxYmJlYzRjYjMzYjZiMzkyMjc2ZWQ0YTIzNWY3YmYxZjJkYjNkOTMxIn0.eyJhdWQiOiIyIiwianRpIjoiMWQ5MGU2ZTZhOGJkZGFjMTIwZjM4YTU4MGM2NTNmYjZlYzYwMzE0ZTFiYmVjNGNiMzNiNmIzOTIyNzZlZDRhMjM1ZjdiZjFmMmRiM2Q5MzEiLCJpYXQiOjE3MjcwMTcyNDYsIm5iZiI6MTcyNzAxNzI0NiwiZXhwIjoxNzI5NjA5MjQ2LCJzdWIiOiI5NDYxNTQiLCJzY29wZXMiOlsiKiJdfQ.1iFR3Il_nYuZP31eDiKDa2xdJmeYeTaR1hagC9jXFxCID2h4a278Ph3w-8mEF1VrK2uq7Hsa0KEkrqV6FrntMeV24_M7uQPPxnJ9zEZ4ZVozjhUOOAvfMNJfyfey812YZrq_hRx2Aa8I34W37D4ICBPdRLwIyJk_EmfBoGbtSMT4a_nxpDsQ-d162sn-Ji33bstg9X9WYm_eGyJiPu8wXWbVsWuY6TyRm6SjzjJp_dNzmeHf37tExWj2qHvW-rRp4IvieOm2HsXV3_JyUL8cfbyki5-0zWswroZKBMe8yVcPnnZ5lSMermiUpBuvddUpc77uwLF5qFuh1hpXzSpBUUbFhdYt06cDSXIpFeVVzPcFkeJSrSSk4z_FVM1OU8uV6SeJuIMSaqwozJxRpRNF26CEBgTKeseaKzwjuZRCiPp9Atfpz8DPU4ZKBeh-bjfF42LWNf3pf9bdrlueILEyIebbFbI6bFajDbGvFtwI7bt031QQONvFbwk5bxOZBJ8V-PTCgZibj-dyohThputgIdgSD0UOGDdUMAv1stXs1DXAAbOk7niZF4lbCOXU9VO6iZ7gbS46fwr5crGrRqVGXnY67c5dTouAKMsTWEOdFa3tX1H5Y8lBDfaC3BMS5fvot1ZxS19wvHOZNQVdyUZvYCdY4ZwnpFXyhMhzbANgB0A",
|
157 |
-
"Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjQ4NWQ1NzIzMjY4ZmFjNjdjM2ZiNzFjZjBmNDFjYjA2ZjU2ZmQ4OWE0NGEzNmQ0YTMxMmY5YzNjMTNkY2FkZDExMzgwNjUxYWEzZGIyMjljIn0.eyJhdWQiOiIyIiwianRpIjoiNDg1ZDU3MjMyNjhmYWM2N2MzZmI3MWNmMGY0MWNiMDZmNTZmZDg5YTQ0YTM2ZDRhMzEyZjljM2MxM2RjYWRkMTEzODA2NTFhYTNkYjIyOWMiLCJpYXQiOjE3MjcwMTc0NjksIm5iZiI6MTcyNzAxNzQ2OSwiZXhwIjoxNzI5NjA5NDY5LCJzdWIiOiI5NDU5MjgiLCJzY29wZXMiOlsiKiJdfQ.FOQMZoaic6EpLyRyAICyUolKoFoGC4loeT-6gPtdiB6WzTl-n65dsq9CiR9_ozQ8Gj5gcCCYp4hjE3XpIifcZv9wXDoqeevhDYdLfGe62vwGOfkn7mEHeyJ1WykX4xpa8XPKC-44UYTfjF_Lqy_qNA0JnZz9lZFZGYTHQaueQgehREeNdIcWjjJHH8VsgOncv8zXFUlwzBMJIsauKcZR02PUOsnunNNUeom6tWnwP8m-Jxyt5zg-uz2ovki_pn4me0h6GsTCncbSFKRtWVeyvy14OJpmLrhkmrpTcqkLLFR_XGozu8YqSjHzpB_M5iYbvR-EHON9XGR7XLDfUXhg8nIBlpjr-JBdAundOQgbEAM5NkI1I6VLBsg26rGw_M57w2WjRqFaG3Ny-sYhYTvCvIoa9iAQVXsOwhnuNefDRvu1IWN104zWL6_j_XERwrwhye8TgnkJEe_0SCTExpDNxu0vC5G5Ge8O9EOn-WIaFRw_qw4udANyqrnIZjC4WJJQSb1IdEb7uwNj1ikfDh3DRG4fm1NodpkpvGuSKyGS0p2dHdv__2KknmFfoBWUR_VsRex5wYnv2vyf8civL3pgn_2dg_e_HtBUzlbYM2FAN4gbmdCUbSRmOT_B7P8MjVa_ec1TxdQcwuCAFI-4J1XRAzpMa29cX7dUrWWllCIonTA",
|
158 |
-
"Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjNlNTkwM2Q3ZDQ3NTVjZDE4MDdkYTlkNjE1YTIyOTM2NjYxYTdiZTc3ODUyNDdjYmE3MzNmOTRjNTZhN2ExN2YxNTI5OTc4NmNkZmY1Y2EzIn0.eyJhdWQiOiIyIiwianRpIjoiM2U1OTAzZDdkNDc1NWNkMTgwN2RhOWQ2MTVhMjI5MzY2NjFhN2JlNzc4NTI0N2NiYTczM2Y5NGM1NmE3YTE3ZjE1Mjk5Nzg2Y2RmZjVjYTMiLCJpYXQiOjE3MjcwMTc2MDgsIm5iZiI6MTcyNzAxNzYwOCwiZXhwIjoxNzI5NjA5NjA4LCJzdWIiOiIxMDAzNTMwIiwic2NvcGVzIjpbIioiXX0.jaeF2CTfPD17VERFu6mTMBp_MbDafj6nk7KypXf3mIc2JuPn9sglARi5NG2GQQs_E5XikC1jOHvHUUqw3RsHyxJM1OjSU-rSstQSx9yI_xv9XfyDp9g6G2BgbNKfWvp-hHgzQtUf9KlY8lYqJ-tQStfgFs13iokw7Ox1WptGfwb0AnLyeikaY-uneDvPsFmktXxC8HkkgrAconFfwXdmMN0CMCieIRewVPktPbD73lkxzyy6H4NwncPRHY4pcjW6nBsPq6Vm0fdI_Dv3BoyWU6KD8dxwt6VUEvDgrfV_7sD75dKkWI-U_U1YvmX27BAuB6HIp2VBABh2_CSoExXxdVBz1DtVgX9p6PebDfc-dkWAxZ6-2F0PyKIQYU47WWxOGvmhTYtGUUtBay0ffatiTeMrlnzE8GA6Op3QprKrCoOxOlVYmihTVl4HsFqBXmpO9gP7rrUIph_eM68ZEH9NPe6Fy6TZDraKHgLajI07DMYTxrlia0jx0jCfHn3QYkOxDlJVcP0tDDqIm_o77V-LRz6HqP_nPIIeCYf_wxLHaiS27hgDh6ExpAJmsxgj_qK-HDi8112QN4kjqPjF1TeI6hMFMx-Gfns6cXHYI3Zxl9Kd6MmkF1Mi-Nf4LMC5FS-I1fCs0uv9xKzv5KHYZjH2sG9CrRjyuW9FfEzD-tKl7P4",
|
159 |
-
"Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjdkNjllMDYxZTcyN2Q5MzNlNjhiZjBjNTFkZGM0NzY5ZGM5YjBmOTE0NjI2YTI3OTE4OTY4NDRhNmJhMzNjZTcxZTY4MTQ1YzQyNmUxMGNkIn0.eyJhdWQiOiIyIiwianRpIjoiN2Q2OWUwNjFlNzI3ZDkzM2U2OGJmMGM1MWRkYzQ3NjlkYzliMGY5MTQ2MjZhMjc5MTg5Njg0NGE2YmEzM2NlNzFlNjgxNDVjNDI2ZTEwY2QiLCJpYXQiOjE3MjcwMTc3NzksIm5iZiI6MTcyNzAxNzc3OSwiZXhwIjoxNzI5NjA5Nzc5LCJzdWIiOiI5NzgzNzQiLCJzY29wZXMiOlsiKiJdfQ.EtEcTlNaQ7IobSdyUHmJXnDbNpAKp_1jE5NurqOSxj4Fp1w7o56DYhZbVtf3rhs-OyxX4nb651FWp3LxNc8LGcmVemF-2Vfvr0PoxU8E8R4k-tADOCb7VCdxZRTVEd0cxxs4ihejuV3c5cdHg9dHsbZj-hNKxaCDATCQLXLXMsX3zjl8uoRwoSLn34IoEk5sJxTLKf7vtvaTh9SCi2AP9pW301JOTh5pp8gBE0buT_u3hFeLrB2xTUzHkalDA-2N4q6j5-jwO12nbdwGWU_mxf8gy_4gOShhgg4sSlz7GVRAcT8ZjhJLMBMp_BwIG_5T93Db_CzqynIj1ycDgxXqDjGRjKOjNHSqwZnjXiy6BXc68v1KWJPaRV_y2JyJm8x2jXxdM4I5U4HxlLM6q2MMUcOElm_XOY-34NbFbaSamaFXyj7LEi4fs9eIXHrfAfjkmDydMKVz3fsMjMHlcMEn2cz21vzsyfJ4hzpSRkd5xwRlQtadvAqCp9xMRue4FrQEHO7ENHJy-VV7TgXiC6OFMpPGeW1A9ZdkO8bDV0adN_CogE6j0DYJXAtYm6cfBfhJcRoMG_7BfUDmc-3Pw7FavedfkgSqdHF4OC90GdMfpsnAF5P2D3eOE1EabioQILpUtt0unyw-v9YoNufpfVXARFTXgbZt_wOKrqAhz-HQdP4",
|
160 |
-
"Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImJhZjllOWFhODkyYmU0N2UxNTQ3ZjIzNmRmMDcyOTU2ZjFjZDkwMDczN2JhYmQ2NWIyM2QyOTgwZjllOTcyMzAzNzA2OWU3ODRhYzE4NTg3In0.eyJhdWQiOiIyIiwianRpIjoiYmFmOWU5YWE4OTJiZTQ3ZTE1NDdmMjM2ZGYwNzI5NTZmMWNkOTAwNzM3YmFiZDY1YjIzZDI5ODBmOWU5NzIzMDM3MDY5ZTc4NGFjMTg1ODciLCJpYXQiOjE3MjcwMTc5MzcsIm5iZiI6MTcyNzAxNzkzNywiZXhwIjoxNzI5NjA5OTM3LCJzdWIiOiI4NDg5ODQiLCJzY29wZXMiOlsiKiJdfQ.gRzOI10Fn139ZjScaoXZR_kV6HA92iPtgSNX3mAepa57VVesCO6Iy7vJyRK8GpIdkuxcdAwg62yYoWM6O_82-cpTX45ruckkf_VBrUtNCQ8OJzjOOe2xFtavN1wbQr0zv7jpLCQW4AACA-AteOHWaVKu-94HwVxi_hsMxdsKDQ_KFcIpb3CfCMzODbXT6aOdso0A8-pz_8IS_PJlWDAqRJEgNAlFmVJ5kX4fWDN84PGwhcGXo-Z_S_afrnGqNbTRu1BN_Mk675dz7HWyr50dwWq0r9N4lj4Oy2RgA6WxPQpIUAs6sZ2hwM550_jkCddLZNfQLtbSLwnmTAVFaLS0TJbLy11Kpt_LahJ-B9sk8firb-_du7zDpv4BfJsppAE8ExJFgppHQ5jTHtsGEOs3Gr-IjUGORdrJsd6E_0MBkVWOKc9C-XzNo4YG0vsCPraWOZj5PyqibpPJPVMZ_CPUeF0eVUR9OzV90N4Vqdrqgh6x1v4vfV0D6V9oYDzts5Ad6_ujvbCYPGJxrH5TSxLtkh3luX3yL-Wr7d__g78B1F-JowCsZefdHS21LqVXnTSsx4mEn2XKDaD2dNTsReKNDekEwoF8YYAWL_7bFR39LB7YDScOeCfAshL9VdpIFtmHa9EODhksC8WiTyIa0Tnk_a2FLTjKFa6o3-Vv-F-kIgI",
|
161 |
-
"Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjdmNTZiMjVlNTYzOThmYjQzY2IwNmJiNjBhNGNiMGY2YmNlMzJkNzIzZTc1YTg2Y2Q0MjE1N2Y3NzcxYzZkMjFkYmRmYjk0OTVkZjVlODZiIn0.eyJhdWQiOiIyIiwianRpIjoiN2Y1NmIyNWU1NjM5OGZiNDNjYjA2YmI2MGE0Y2IwZjZiY2UzMmQ3MjNlNzVhODZjZDQyMTU3Zjc3NzFjNmQyMWRiZGZiOTQ5NWRmNWU4NmIiLCJpYXQiOjE3MjY5ODA1NDIsIm5iZiI6MTcyNjk4MDU0MiwiZXhwIjoxNzI5NTcyNTQyLCJzdWIiOiI4NDcyNDUiLCJzY29wZXMiOlsiKiJdfQ.vLGyA6oKbyqAuAV2OXgxv2uhzUp8iBMA3kbaqMjnyMibhF_667QcOl-FpZlIDGdMvCF5PjHiN5krYfdkc6ebdHp1fO3S_sUuHmnj1ZnTKU64lT_Y7wRW7A7yGRgVrjF0kntw0kkEulCKkgTNmCcTq-tLNFlNPCIpWldJzptyvxj_737gc6yafm6vohDAkQ-uwkuKqyjEpR2yqlivH0d7Pk4wMwg-fDHEbg_D55fYJJAozv0a9PU_oUb29RX8_1XBpe5iKcR9yqjj1H1txp3e2ilJHw0Ttka-xDrCc2LWScUnE5vaQgILTJz15lEY6OeAGsh6DmAA0tu0_utH9sNgx8QDxNaAXpIW5BLfyo5CzY4ZwWuV-wVweY5s3HKUQx6i56wnSHsNYyARwRHiCIk3rSnOD3vALV77L9uDab49-vV2JWArdESiFxtibQbyGsfwXdGTH8Qwu09En9n0hR2B6lNJD7srEBFcGCLztUagiJplhLPIKd4cRT5zCp9OZGw9TFr7mtKZjNS21SVLg8BO2DwFYTfuBrOLlmvAQetGS1gablT3mo86DGS5Kvl9Cmvcujmjco1Czsa8JjPTMlD_z_OmmAci2XA-5w6BcrxJiOiwNTcELJhRGZARuNf25D52Qrx6poPFSWU5BYUTzjqblUD1cl2bUKivWwR4Hkadofk",
|
162 |
-
|
163 |
-
]
|
164 |
-
|
165 |
-
radio_num = []
|
166 |
-
for k,v in enumerate(authorization_list):
|
167 |
-
if v.startswith("Bearer"):
|
168 |
-
radio_num.append(k)
|
169 |
-
# print(k,v)
|
170 |
-
|
171 |
-
|
172 |
history = []
|
173 |
|
174 |
with gr.Blocks() as demo:
|
|
|
|
|
175 |
|
176 |
-
|
177 |
-
|
178 |
-
def query_click():
|
179 |
-
authorization = authorization_list[0]
|
180 |
-
# print("authorization:",authorization)
|
181 |
-
first_results = request_first(authorization)
|
182 |
-
third_no,fee,begin,duration,user_id = first_results
|
183 |
-
|
184 |
-
return {"费用":fee,"入场时间":begin,"时长":duration}
|
185 |
-
|
186 |
|
|
|
|
|
|
|
187 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
188 |
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
history.append([str((datetime.now()+ timedelta(hours=6)).strftime("%Y-%m-%d %H:%M:%S")) , str(pay_result) ,str(auth_id) ])
|
200 |
-
return history
|
201 |
-
|
202 |
|
203 |
-
demo.launch(auth=("admin", "eyJ0eXAiOiJKV1QiLCJhbGciOiJUzI1NiIsI"))
|
|
|
|
1 |
+
import time ,json
|
2 |
from datetime import datetime,timedelta
|
3 |
import requests ,re
|
4 |
import gradio as gr
|
|
|
140 |
|
141 |
|
142 |
else:
|
143 |
+
return "🚷无法查询到车辆入场信息"
|
144 |
except Exception as e:
|
145 |
print("异常>>>>>>>>>>>问题原因:",e )
|
146 |
return "🚫请求异常"
|
147 |
|
148 |
|
149 |
|
150 |
+
# 读取authorization.json
|
151 |
+
with open("authorization.json") as f:
|
152 |
+
authorization_list = json.load(f)
|
153 |
+
# print("authorization_list:",authorization_list)
|
154 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
155 |
history = []
|
156 |
|
157 |
with gr.Blocks() as demo:
|
158 |
+
# 输入组件:单选按钮
|
159 |
+
auth_id = gr.Radio(authorization_list, label="选择授权ID")
|
160 |
|
161 |
+
with gr.Row():
|
162 |
+
with gr.Column(scale=2):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
163 |
|
164 |
+
query_button = gr.Button("查询")
|
165 |
+
# @query_button.click(inputs=auth_id, outputs= gr.Json(label="查询结果"))
|
166 |
+
@query_button.click(inputs=auth_id, outputs= gr.Dataframe(headers=["费用", "入场时间", "时长"], label="查询结果"))
|
167 |
|
168 |
+
|
169 |
+
def query_click(auth_id):
|
170 |
+
if auth_id == None:
|
171 |
+
auth_id = "0"
|
172 |
+
authorization = authorization_list[auth_id]
|
173 |
+
# print("authorization:",authorization)
|
174 |
+
first_results = request_first(authorization)
|
175 |
+
third_no,fee,begin,duration,user_id = first_results
|
176 |
+
|
177 |
+
# return {"费用":fee,"入场时间":begin,"时长":duration}
|
178 |
+
return [(fee,begin,duration)]
|
179 |
+
|
180 |
+
# -------------------------------------------------------------------------
|
181 |
+
with gr.Column(scale=3):
|
182 |
+
# 支付按钮组件
|
183 |
+
pay_button = gr.Button("支���")
|
184 |
+
@pay_button.click(inputs=auth_id, outputs= gr.Dataframe(headers=["支付时间", "支付结果", "使用ID"], label="支付历史"))
|
185 |
+
def pay_click(auth_id):
|
186 |
+
pay_result = pay(auth_id)
|
187 |
+
if auth_id == 0 and pay_result[0:5] == "✅缴费成功":
|
188 |
+
history.clear()
|
189 |
+
history.append([str((datetime.now()+ timedelta(hours=6)).strftime("%Y-%m-%d %H:%M:%S")) , str(pay_result) ,str(auth_id) ])
|
190 |
+
return history
|
191 |
+
|
192 |
+
|
193 |
+
# -------------------------------------------------------------------------
|
194 |
+
bearer_input = gr.DataFrame(headers=[ "auth_bearer"],
|
195 |
+
datatype=["str"],
|
196 |
+
value=[],
|
197 |
+
row_count=4,
|
198 |
+
col_count=(1, "fixed"))
|
199 |
+
bearerUpdate_button = gr.Button("更新authorization_list")
|
200 |
+
@bearerUpdate_button.click(inputs=bearer_input,outputs= gr.Json(label="授权码列表"))
|
201 |
|
202 |
+
def bearerUpdate_click(new_authorization_list):
|
203 |
+
authorization_list.clear()
|
204 |
+
for k,v in enumerate(new_authorization_list["auth_bearer"]):
|
205 |
+
if v != '':
|
206 |
+
authorization_list[str(k)] = v
|
207 |
+
# print("authorization_list:",authorization_list)
|
208 |
+
with open("authorization.json", "w") as f:
|
209 |
+
json.dump(authorization_list, f)
|
210 |
+
|
211 |
+
return authorization_list
|
|
|
|
|
|
|
212 |
|
213 |
+
demo.launch(auth=("admin", "eyJ0eXAiOiJKV1QiLCJhbGciOiJUzI1NiIsI"))
|
214 |
+
|