| <!DOCTYPE html> |
| <html lang="fa" dir="rtl" data-theme="dark"> |
| <head> |
| <meta charset="UTF-8"> |
| <meta name="viewport" content="width=device-width, initial-scale=1"> |
| <meta name="description" content="TGS Converter kokbtak — تبدیل هوشمند و باکیفیت استیکر تلگرام"> |
| <title>TGS Converter kokbtak ✨ AI</title> |
| <link rel="icon" type="image/png" href="data:image/png;base64,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"> |
| <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource/vazirmatn@5/index.css"> |
| <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource/vazirmatn@5/700.css"> |
| <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource/vazirmatn@5/800.css"> |
| <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource/space-grotesk@5/500.css"> |
| <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource/space-grotesk@5/700.css"> |
| <style> |
| :root{ |
| --bg0:#07070f; --bg1:#0d0d1c; |
| --panel:rgba(255,255,255,.045); --panel2:rgba(255,255,255,.09); |
| --border:rgba(255,255,255,.10); |
| --text:#eceaf6; --muted:#a19dc0; |
| --grad:linear-gradient(135deg,#6d28d9,#6366f1 48%,#a855f7); |
| --gradAI:linear-gradient(135deg,#f59e0b,#ec4899 55%,#8b5cf6); |
| --ok:#34d399; --warn:#fbbf24; --err:#f87171; |
| --stagebg:rgba(16,16,34,.55); |
| --shadow:0 18px 50px rgba(0,0,0,.45); |
| --ring:#a78bfa; |
| } |
| html[data-theme="light"]{ |
| --bg0:#f1f0fb; --bg1:#faf9ff; |
| --panel:rgba(255,255,255,.72); --panel2:rgba(124,58,237,.08); |
| --border:rgba(30,16,80,.12); |
| --text:#221b40; --muted:#67628a; |
| --stagebg:rgba(255,255,255,.6); |
| --shadow:0 18px 45px rgba(80,60,180,.15); |
| } |
| *{box-sizing:border-box; -webkit-tap-highlight-color:transparent} |
| html,body{margin:0; padding:0} |
| body{ font-family:'Vazirmatn','Space Grotesk',system-ui,sans-serif; background:var(--bg0); color:var(--text); min-height:100vh; overflow-x:hidden; transition:background .4s,color .4s; } |
| body::before{content:''; position:fixed; inset:0; z-index:-2; background:radial-gradient(1200px 600px at 85% -10%, rgba(124,58,237,.16), transparent 60%), radial-gradient(900px 500px at 10% 110%, rgba(99,102,241,.14), transparent 60%), linear-gradient(var(--bg0),var(--bg1));} |
| .orb{position:fixed; z-index:-1; border-radius:50%; filter:blur(90px); opacity:.35; pointer-events:none; animation:float 16s ease-in-out infinite} |
| .orb.o1{width:420px;height:420px;background:#7c3aed;top:-140px;inset-inline-start:-120px} |
| .orb.o2{width:360px;height:360px;background:#4f46e5;bottom:-120px;inset-inline-end:-100px;animation-delay:-8s} |
| @keyframes float{0%,100%{transform:translate(0,0) scale(1)}50%{transform:translate(30px,24px) scale(1.08)}} |
| .hidden{display:none!important} |
| button{font-family:inherit; color:inherit; cursor:pointer; background:none; border:none} |
| input,select{font-family:inherit; color:var(--text)} |
| :focus-visible{outline:2px solid var(--ring); outline-offset:2px; border-radius:8px} |
| @media (prefers-reduced-motion: reduce){ *,*::before,*::after{animation-duration:.01ms!important; transition-duration:.01ms!important} } |
| .app{max-width:1180px; margin-inline:auto; padding:18px clamp(14px,4vw,32px) 46px} |
| header{display:flex; align-items:center; justify-content:space-between; gap:12px; padding-top:6px} |
| .brand{display:flex; align-items:center; gap:12px} |
| .brand img{width:46px;height:46px;border-radius:14px;box-shadow:0 8px 24px rgba(124,58,237,.35)} |
| .brand b{font-family:'Space Grotesk','Vazirmatn'; font-size:1.12rem; display:block} |
| .brand span{font-size:.72rem; color:var(--muted); text-transform:uppercase} |
| .head-actions{display:flex; gap:8px} |
| .ibtn{width:42px;height:42px;border-radius:12px;display:inline-flex;align-items:center;justify-content:center; background:var(--panel); border:1px solid var(--border); backdrop-filter:blur(12px); transition:.2s} |
| .ibtn:hover{background:var(--panel2); transform:translateY(-1px)} |
| .ibtn svg{width:20px;height:20px} |
| .langbtn{width:auto; padding:0 14px; font-weight:700; font-size:.85rem} |
| .hero{text-align:center; margin-top:34px} |
| .badge{display:inline-flex; align-items:center; gap:8px; padding:8px 16px; border-radius:99px; background:var(--panel); border:1px solid var(--border); font-size:.78rem; color:var(--muted)} |
| .badge i{width:8px;height:8px;border-radius:50%;background:var(--ok);box-shadow:0 0 10px var(--ok)} |
| h1{font-size:clamp(1.7rem,4.6vw,2.9rem); margin:18px 0 8px; font-weight:800; background:linear-gradient(90deg,#c4b5fd,#818cf8 45%,#e879f9); -webkit-background-clip:text; background-clip:text; color:transparent} |
| .hero .sub{color:var(--muted); font-size:clamp(.9rem,2vw,1.05rem); margin:0 auto; max-width:640px} |
| .chips{display:flex; flex-wrap:wrap; gap:8px; justify-content:center; margin-top:16px} |
| .chip{padding:6px 12px; border-radius:99px; font-size:.72rem; background:var(--panel); border:1px solid var(--border); color:var(--muted)} |
| .chip.aichip{background:linear-gradient(135deg,rgba(245,158,11,.15),rgba(236,72,153,.15)); border-color:rgba(236,72,153,.4); color:var(--text); font-weight:700} |
| .steps{display:flex; gap:10px; justify-content:center; margin-top:22px; flex-wrap:wrap} |
| .step{display:flex; align-items:center; gap:10px; padding:10px 16px; border-radius:16px; background:var(--panel); border:1px solid var(--border)} |
| .step i{width:26px;height:26px;border-radius:9px;background:var(--grad);color:#fff;display:flex;align-items:center;justify-content:center;font-style:normal;font-size:.8rem;font-weight:800} |
| .step b{font-size:.85rem; display:block} .step small{color:var(--muted); font-size:.7rem; display:block} |
| .card{background:var(--panel); border:1px solid var(--border); border-radius:22px; backdrop-filter:blur(18px) saturate(140%); box-shadow:var(--shadow); padding:20px} |
| .card-head{display:flex; align-items:center; justify-content:space-between; gap:10px; margin-bottom:14px; flex-wrap:wrap} |
| .card-head h3{margin:0; font-size:1rem; display:flex; align-items:center; gap:8px} |
| .card-head h3::before{content:''; width:4px; height:18px; border-radius:4px; background:var(--grad)} |
| .dropzone{margin-top:30px; position:relative; border-radius:26px; padding:46px 22px; text-align:center; background:var(--panel); border:1px solid var(--border); cursor:pointer; transition:.25s} |
| .dropzone::before{content:''; position:absolute; inset:10px; border:2px dashed rgba(139,92,246,.45); border-radius:18px; pointer-events:none; transition:.25s} |
| .dropzone:hover::before,.dropzone.drag::before{border-color:#a78bfa; inset:6px} |
| .dropzone.drag{background:rgba(124,58,237,.10)} |
| .dz-icon{animation:bob 3.2s ease-in-out infinite; display:inline-block} |
| @keyframes bob{0%,100%{transform:translateY(0) rotate(-2deg)}50%{transform:translateY(-10px) rotate(2deg)}} |
| .dropzone h2{margin:14px 0 6px; font-size:1.15rem} .dropzone p{margin:0 0 18px; color:var(--muted); font-size:.85rem} |
| .dz-actions{display:flex; gap:10px; justify-content:center; flex-wrap:wrap} |
| .btn{display:inline-flex; align-items:center; justify-content:center; gap:8px; border-radius:14px; padding:12px 20px; font-size:.9rem; font-weight:700; transition:.2s; border:1px solid transparent} |
| .btn.primary{background:var(--grad); color:#fff; box-shadow:0 10px 28px rgba(124,58,237,.35)} |
| .btn.ai{background:var(--gradAI); box-shadow:0 10px 28px rgba(236,72,153,.35)} |
| .btn.ghost{background:var(--panel); border-color:var(--border)} |
| .btn.small{padding:8px 14px; font-size:.78rem; border-radius:11px} .btn.big{width:100%; padding:15px 22px; font-size:1rem} |
| .count{background:rgba(255,255,255,.22); border-radius:99px; padding:2px 10px; font-size:.78rem} |
| .spin{width:16px;height:16px;border-radius:50%;border:2.5px solid rgba(255,255,255,.35);border-top-color:#fff;animation:sp .7s linear infinite} |
| @keyframes sp{to{transform:rotate(360deg)}} |
| .ai-panel{border:1.5px solid transparent; border-radius:18px; padding:14px 16px; margin-bottom:18px; background:linear-gradient(var(--panel),var(--panel)) padding-box, linear-gradient(135deg,rgba(245,158,11,.6),rgba(236,72,153,.6),rgba(139,92,246,.6)) border-box} |
| .ai-head{display:flex; align-items:center; gap:10px; flex-wrap:wrap} |
| .ai-badge{width:30px;height:30px;border-radius:10px;background:var(--gradAI);display:inline-flex;align-items:center;justify-content:center;font-size:.95rem;animation:glowP 2.4s ease-in-out infinite;flex:none} |
| @keyframes glowP{0%,100%{box-shadow:0 0 8px rgba(236,72,153,.4)}50%{box-shadow:0 0 20px rgba(236,72,153,.75)}} |
| .ai-head b{font-size:.9rem} .ai-head small{color:var(--muted); font-size:.68rem; flex:1; min-width:120px} |
| .switch{position:relative;width:42px;height:23px;flex:none} |
| .switch input{opacity:0;width:100%;height:100%;position:absolute;margin:0;cursor:pointer;z-index:2} |
| .switch i{position:absolute;inset:0;background:var(--panel2);border:1px solid var(--border);border-radius:99px;transition:.22s;pointer-events:none} |
| .switch i::after{content:'';position:absolute;top:2px;inset-inline-start:2px;width:17px;height:17px;border-radius:50%;background:#fff;transition:.22s;box-shadow:0 2px 6px rgba(0,0,0,.35)} |
| .switch input:checked + i{background:var(--gradAI);border-color:transparent} |
| .switch input:checked + i::after{transform:translateX(19px)} |
| html[dir="rtl"] .switch input:checked + i::after{transform:translateX(-19px)} |
| .ai-card{margin-top:12px; padding:12px 14px; border-radius:14px; background:var(--panel2); border:1px solid var(--border)} |
| .ai-row{display:flex; align-items:center; gap:8px; font-size:.82rem; flex-wrap:wrap} |
| .ai-row b{background:var(--gradAI); -webkit-background-clip:text; background-clip:text; color:transparent; font-weight:800} |
| .ai-reasons{display:flex; flex-wrap:wrap; gap:6px; margin-top:9px} |
| .ai-reasons .chip{background:rgba(139,92,246,.12); border-color:rgba(139,92,246,.35); color:var(--text)} |
| .ai-meta{margin-top:9px; font-size:.7rem; color:var(--muted)} .ai-actions{margin-top:11px;} |
| .tgl-row{display:flex; align-items:center; justify-content:space-between; gap:10px; padding:9px 2px 0; font-size:.78rem; cursor:pointer} |
| .tgl-row span{color:var(--muted)} .tgl-row em{font-style:normal; font-size:.62rem; color:var(--muted); opacity:.8; display:block} |
| .workspace{margin-top:26px; display:grid; gap:20px} |
| .cols{display:grid; gap:20px; grid-template-columns:minmax(300px,5fr) 7fr} |
| @media (max-width:980px){.cols{grid-template-columns:1fr}} |
| .stage{width:100%; max-width:360px; margin-inline:auto; aspect-ratio:1/1; border-radius:18px; overflow:hidden; position:relative; border:1px solid var(--border); background:var(--stagebg)} |
| #previewHolder{position:absolute; inset:0} #previewHolder canvas{width:100%!important; height:100%!important; display:block} |
| .bg-checker-sm{background:repeating-conic-gradient(rgba(140,140,190,.16) 0% 25%, transparent 0% 50%) 0 0/18px 18px, var(--stagebg)} |
| input[type=range]{width:100%; accent-color:#8b5cf6; margin:12px 0 4px; cursor:pointer} |
| input[type=color]{width:44px;height:34px;border:1px solid var(--border);border-radius:9px;background:var(--panel);padding:3px;cursor:pointer} |
| .player-row{display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin-top:8px} |
| select{background:var(--panel); border:1px solid var(--border); border-radius:11px; padding:9px 10px; font-size:.82rem} |
| .seg{display:inline-flex; background:var(--panel); border:1px solid var(--border); border-radius:12px; padding:4px; gap:4px} |
| .seg button{padding:7px 13px; border-radius:9px; font-size:.76rem; font-weight:700; color:var(--muted); transition:.2s} |
| .seg button.on{background:var(--grad); color:#fff} .seg button.dis{opacity:.4; pointer-events:none} |
| .fmt-grid{display:grid; grid-template-columns:repeat(auto-fit,minmax(140px,1fr)); gap:10px; margin-bottom:18px} |
| .fmt{position:relative; display:flex; flex-direction:column; align-items:flex-start; gap:6px; text-align:start; padding:14px; border-radius:16px; border:1.5px solid var(--border); background:var(--panel); transition:.2s} |
| .fmt .fic{width:34px;height:34px;border-radius:10px;background:var(--grad);color:#fff;display:flex;align-items:center;justify-content:center} |
| .fmt .fic svg{width:19px;height:19px} .fmt b{font-size:.85rem} .fmt small{color:var(--muted); font-size:.68rem} |
| .fmt .tag{position:absolute; top:10px; inset-inline-end:10px; font-size:.6rem; color:var(--muted); border:1px solid var(--border); padding:2px 7px; border-radius:99px} |
| .fmt .aibadge{position:absolute; bottom:10px; inset-inline-end:10px; font-size:.62rem; padding:2px 8px; border-radius:99px; background:var(--gradAI); color:#fff; font-weight:800} |
| .fmt.active{border-color:transparent; background:linear-gradient(var(--panel2),var(--panel2)) padding-box, var(--grad) border-box; box-shadow:0 8px 26px rgba(124,58,237,.30)} |
| .ctl-grid{display:grid; grid-template-columns:1fr 1fr; gap:14px 16px} @media (max-width:640px){.ctl-grid{grid-template-columns:1fr}} |
| .ctl label{display:block; font-size:.78rem; font-weight:700; margin-bottom:7px; color:var(--muted)} |
| .ctl input[type=number]{width:100%; background:var(--panel); border:1px solid var(--border); border-radius:11px; padding:10px 12px; font-size:.88rem} |
| .hwrap{display:flex; gap:8px; align-items:center} .hwrap input{flex:1} |
| .range-row{display:flex; align-items:center; gap:10px} .range-row b{font-size:.8rem; min-width:34px; text-align:center; background:var(--panel2); border-radius:8px; padding:4px 6px} |
| .hint{display:block; color:var(--muted); font-size:.68rem; margin-top:6px} |
| .trim-row{display:flex; align-items:center; gap:8px} .trim-row input{width:90px!important} .trim-row span{font-size:.72rem; color:var(--muted)} .mt{margin-top:10px} |
| .convert-zone{margin-top:20px; display:grid; gap:14px} |
| .prog .bar{position:relative; height:11px; border-radius:99px; background:var(--panel2); overflow:hidden; border:1px solid var(--border)} |
| #progFill{height:100%; width:0%; background:var(--grad); border-radius:99px; transition:width .18s} |
| .prog-meta{display:flex; align-items:center; gap:10px; margin-top:9px; font-size:.76rem; color:var(--muted)} |
| .prog-meta #progText{font-weight:800; color:var(--text); min-width:44px} .prog-meta #progPhase{flex:1; overflow:hidden; text-overflow:ellipsis; white-space:nowrap} |
| .result{display:flex; align-items:center; gap:14px; padding:14px 16px; border-radius:16px; border:1.5px solid transparent; background:linear-gradient(var(--panel),var(--panel)) padding-box, linear-gradient(135deg,#34d399,#6366f1) border-box; animation:pop .35s ease} |
| @keyframes pop{from{transform:scale(.96); opacity:0}to{transform:scale(1); opacity:1}} |
| .rcheck svg{width:46px;height:46px} .rcheck circle{stroke:var(--ok); stroke-width:2.5; stroke-dasharray:151; stroke-dashoffset:151; animation:dash .7s ease forwards} |
| .rcheck path{stroke:var(--ok); stroke-width:3.5; stroke-linecap:round; stroke-dasharray:40; stroke-dashoffset:40; animation:dash .45s .55s ease forwards} |
| @keyframes dash{to{stroke-dashoffset:0}} |
| .rinfo{flex:1; min-width:0} .rinfo b{display:block; font-size:.85rem; overflow:hidden; text-overflow:ellipsis; white-space:nowrap} .rinfo small{color:var(--muted); font-size:.7rem} |
| .queue-card{margin-top:20px} #queueList{list-style:none; margin:0; padding:0; display:grid; gap:8px} |
| .qrow{display:flex; align-items:center; gap:12px; padding:10px 12px; border-radius:15px; border:1px solid transparent; cursor:pointer; transition:.2s} |
| .qrow.sel{border-color:rgba(139,92,246,.5); background:rgba(124,58,237,.10)} |
| .qthumb{width:48px;height:48px;border-radius:11px;overflow:hidden;flex:none;border:1px solid var(--border); background:repeating-conic-gradient(rgba(140,140,190,.15) 0% 25%, transparent 0% 50%) 0 0/12px 12px, var(--stagebg); display:flex;align-items:center;justify-content:center;color:var(--muted)} |
| .qthumb img{width:100%;height:100%;object-fit:cover} |
| .qinfo{flex:1; min-width:0} .qname{font-size:.82rem; font-weight:700; overflow:hidden; text-overflow:ellipsis; white-space:nowrap} |
| .qmeta{font-size:.68rem; color:var(--muted); margin-top:3px; display:flex; gap:8px; align-items:center; flex-wrap:wrap} |
| .qbar{height:5px; border-radius:99px; background:var(--panel2); margin-top:7px; overflow:hidden} .qbar i{display:block; height:100%; width:0%; background:var(--grad); transition:width .18s} |
| .st{font-size:.62rem; padding:3px 9px; border-radius:99px; font-weight:700} |
| .st.ready{background:var(--panel2); color:var(--muted)} .st.processing{background:rgba(251,191,36,.15); color:var(--warn)} .st.done{background:rgba(52,211,153,.15); color:var(--ok)} .st.error{background:rgba(248,113,113,.15); color:var(--err)} |
| .qactions{display:flex; gap:6px} .qempty{color:var(--muted); font-size:.8rem; text-align:center; padding:14px} |
| footer{margin-top:44px; text-align:center; color:var(--muted); font-size:.76rem; display:grid; gap:6px} |
| footer .lock{display:inline-flex; align-items:center; gap:7px; justify-content:center} footer svg{width:14px;height:14px; color:var(--ok); flex:none} |
| #toasts{position:fixed; bottom:22px; inset-inline:0; display:flex; flex-direction:column; align-items:center; gap:8px; z-index:200; pointer-events:none} |
| .toast{display:flex; align-items:center; gap:10px; max-width:min(92vw,480px); padding:12px 18px; border-radius:14px; background:var(--panel); border:1px solid var(--border); backdrop-filter:blur(16px); box-shadow:var(--shadow); font-size:.82rem; transform:translateY(16px); opacity:0; transition:.3s} |
| .toast.in{transform:translateY(0); opacity:1} .toast svg{width:18px;height:18px; flex:none} |
| .toast.success svg{color:var(--ok)} .toast.error svg{color:var(--err)} .toast.info svg{color:var(--ring)} |
| #boot{position:fixed; inset:0; z-index:300; background:var(--bg0); display:flex; align-items:center; justify-content:center; transition:opacity .5s} |
| #boot.off{opacity:0; pointer-events:none} |
| .boot-box{text-align:center; display:grid; gap:14px; justify-items:center} |
| .boot-box img{width:74px;height:74px;border-radius:20px;animation:pulse 1.6s ease-in-out infinite; box-shadow:0 14px 40px rgba(124,58,237,.5)} |
| @keyframes pulse{0%,100%{transform:scale(1)}50%{transform:scale(1.07)}} |
| .boot-box h2{margin:0; font-family:'Space Grotesk','Vazirmatn'; font-size:1.2rem} |
| #bootMsg{color:var(--muted); font-size:.82rem; min-height:1.2em} |
| .boot-bar{width:220px; height:6px; border-radius:99px; background:var(--panel2); overflow:hidden} .boot-bar i{display:block; height:100%; width:0%; background:var(--grad); transition:width .4s} |
| </style> |
| </head> |
| <body> |
|
|
| <div id="boot"> |
| <div class="boot-box"> |
| <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAt90lEQVR42o2debQlV3Xef/tU3emNPb1Wq0cJjQgQk4WNQICwccA2GFgYMMbBGEceiJ2AYyd2YgfbGBsPcZYTGxOCIWHwAEEECRAgIRnQAEICNKvR2JJ6eu/18MZ7b9U5O3/UdE5V3XZ6rbf6vTtWnWHvb3/72/sIXdEo7mCiGADEIEL+TwAFBBFBlcZzqlq9TiR7+Rn+FZ+Y/ZK/WM/8tvB78xeLoGj+eYK0fot4fyoI5Su9Z9Hy26tHQEAVker1eK+T8n2S3bbqhLttuabiskSIRSLAeIOnzQvxxgqkvGApLyT/Aj3TiBPcAqrV1xXDoOQTnd245kOb3SC1DwqHRL3vEeM/IN7FS3CJ6v8i9XupZl3DAQDJrrWYWEVQFW+RlMu2mjIpBiMcWxN3u5jIlAtY6qtYqx1AMP/5B4opP9R/DflnSbA6ix2jtREI76+4E0HKx6V1VbWNZrFJNJjYxiDS/D6dtHi1ZVXVJscfNm++syEXqQZfpPpbBOPPavmkkbbvQorBFgmuTGTygGgxs95daG1La/u6LB9XrbZ7uZKViSOkqrU51nAlFz8TZ1LDK5Daj/dS8WZLvPkUb/AkN30i1UKWfMfFpW33TI0IqDelIqY0DcUCltpWathBfxWK5oOmwXPi7yjJHsuuRWvTRc0kaouf8uyz1CygSHPfBPYin16RM3sv1ZpZF/4Z75V/fG2aPANiCGbGe0bDFVX80LJaVV3DCSk1U1OuOm25aA08sU5037WdpArqaqah+obimqTmw6r31u2WVvde2a3qXdnKbACEYseptviW0vR4e0QL/2myCfD8kDe5nuVWh3Mu2JrlBepktNNqIPILlsYktgy9TDINud1tswk1E1OOo1STotowTNWO1hoi0mKHaDCGxZOFl1NvhcsZHFT9M4xI7gyMybevCXdAeUOuWjXFVpTiIvKL9Fa5BthSPXNEaI4gBAChAzmDRZCmTa7vPG9SxDPaUsCqM7mCljHUMyyzYhypQ1rVxrSU/sAYTLE7Kvus4aqoYyuqgVd1ud3W6sYlNAcSAP86JCOAuer72TNtrzouD2y+96UFEpNJa7M2A9Ji8cSz2bXZkgrm5DvL0TZYIqaaeG+yxHgoSEooeaaLyVdYudqpBl/DcRPff1AFQqqKOvUQsjb9RWONNdGWTISk1bWI1veGBjtCJjperYBGzRdk7/XGwLtpqU2SBqZHWlF07G9n3w5m6EHzmyiCI98quQmoovpagwlNjwfq1YsxKiekYRxY7Ex/N5ef4aESlXY4Gth3D7eJN0m5/avjmcoqaGtkXo1nHjCKNHZJtfu0Batnk2jESBkhqobgT7ztJ4ED04kxino2LkAQFNFm3aQpZ1rMDa9V2No6gplkrjy/5aOi0mTXqQmZHO81x1BriIcS91frSquFVA+sAFOjJ7wbq6GcYIZbQlilNYBqvxlpUi8NmFBcqLQPauv7pcYDVQhFabfjlblp3ppPHzRMVX3kvQ/QGvQKLVW4Q+Imfq/sq9YjwpZ7CJCLShCfFFxOfYDlTOSbEhpwfwE0Bm/C9s53VsYnNX1sRfNIQFf4KzSExdJOttWCuSAQLMx0RkyVw+NbBlUqJxwCHA3C+QCWSo0XCriNtiiwhqo8/jJwTMFItc2QtsYU1apqem+dAF3DoFM9e1Tb5d5j2gY96ztAPOLS/zxhIgqLxUi4nbSy4xNtvTcZ2mJrtM4ENyxFy+iUhJPW/qaGp0NTJ8GXqAcbZUJA14LVGzS5NHxTBhir4E9pgaQ1y1TuQJ3MIRoJIsv26K2dZqDBwYTGrr6w23kT8RzzRMZTPa8pMnlcJ9ykaB0GhvRAGKp4O1qbUa/P9PqUfP2CNLisKjbx4W/uA6iF7dpYxW0rr7jigrdvWedntvMFigwCZKnwt58DqEeYLfmWkFaW0C+Kj8LqMU6Yl2jEQdoSE/l5oRZA56WrqmBNFYwJzHiWkEFx5exqlelpcXpVgqTKRlWJkcpwlX5C6yvfVIynhKxlMYdGTJBpCihoz4NQYm+tvGoVAFehUQNWFp+jYeJEtDV+KGIGkRZKoliwUtup3ngU8ZOICVN7uc+IC1RSLg2tlmex0sUPOjxuQ/Gj/iZt0UZ2GTGoUYyJEDElk6q4dhAeZPKktr695I14AydSZqommYYMnfjBpwuGvrz/wKFrEHy1QMd2uKxS5luCxalaRMIENClBdKgTbbh4dlwbWFNCgJA/FpkY61KG401wabYtTUwUxS2pRwm4p9DuNPZ7vuEczoIRIYoErQyBZxIEpw7nUpxLEQxR1MVIhKolWFm1XEAV8dacv3qmRkKbpSjqwBhpIOZYPOhkvHxsFeW1Q8XqfTX7732e76aMZHnnjeEKvd4szzn3RTx996XsmTuHud4WulEPVcGpZoOjitPselz5A+qyYbTO4lxGBlp1JNbinEWmU06nKxw9NCIZRxhD9r5iEvOVbzXFypCN8XFOrh/kxNpDjManiaNBzgi7MNnjobFmNk7Kx8U33T4JKCFyKwm56R3z6pwXpmu4/coVqT76lDAUF3+3STDwgiEyEaN0hCK84lk/yWsufTPnLVxIv9cjno7obhWkC2Iys+YcOKskicOlirUWmzjSVEmtw1lHmjqSxJKklvHIsbE25NSpNTaHY1bsCmYhQYfzCBEmjkqb7NThgNHYsrqasL6WMhyOGOsiR1Zu5rFjN+LcmNh0S7ZXJkXthIKCQHVRTIbx05AGE5kywyjGEAc0snqQUwR1YaZKJoodfLMV8t6Ridgcb7Bzy17e9cr/zAuf9hJm98b0d8HKsSHbz+szc3aP0VpKsmlJRy4b7ETpptlEWCu41GBTh00F6wzOgbVgrSFNHeOxoXs85YF7ljh5apUoTXn1z5/H6UNCHMXEHZPRv5Eh6hhMR3BOWd8Y8+QTq9x9V5+p3pvYOf887nrsb9nYPEIc9bOdoKHpU60LYSoAoEFSUStGtUR2GrK6g+2zWvIVKiGq0VrOtBHH5E659AEGH4pE0mGcDNm9/Rze94a/5oI957P9+REHLt+OGzkeuXGZ1eMj0rEjHWdZN1fKPMCJlkjG5dfgqr2Z/Z5jWRWQSDj06HG+872HOLG8wSvffhEHLtrBnV9cYmq6j0SVE5RIiLsRUzMdZucHJInl5lsf5cEH1nCywrcP/gXrG08Sx/2MUgjoL1fLGGojtinHwUjpd0QEYyJMFGWAxBiizlTvPZrdbUuUJmHCXWqpeC/crgKTPG4Ug3OWqd4sf/TGv+Fp289j/hnCBS87i1OPDXnitpOcPrxJOrQ4p0gkSCxIbCAWMrmSYKIscYHJkISY7G8tEv1kvsFZh3XK7NyA4XDEk4eXmdsy4KWvO5+UhKOPbxJ1MlNkXWbKhiPLyukxy0sbjEaO88/byXC8wdKiY2HbJRw58S2cHSOYihZXvDGppDYSRO8VHEd8dtjLv+f/R52p3nvQpsyjNCYSGhqpRaNNxVeGfiITMxpv8K9e/ptcedGPMuytsm33DCcf3eDo3SusnRhmJq4kzMTL2YJzSuabshstHHGRBPcfKxx08fr+IOKpI0v0pmJe+PIL6W8xqKQceXQTMQbrHNZlzjl7H2wOU9bWE3YuzHF4cRnnthDFHRZP3kkUdQN0Jz4srQeSQYrSl/Lk6hJjyjE0hS5IAibDTzGGA1OyhI2kupQOXFSIJGY03uTcs57Bq575WlaT0wwGPU4+tsHSwVXGm0mwnVU1Mz/WYfP/ndXsx1XPOZdl09Rlg23zx7IfUAtpYomiiN17tjEeO2anppjuTnPhc7dz3vOnWTm9mTnz1JImafZ/6kp/sLI6Yv/eBUbJKru2vYiZqQNYO/JY3RoKKnk8aSUCg/hBPD+QP2o86jwwJw1+RiSQAwarttAReTlPl4744Wf8BDO9WUxXwUKymWZfrjlPng9cNYiaox7vb+fywc4mxKYOa13ukBWbKi4Fm+SPW2WcKFODHt04ZtDrsn3rHL14wCU/sMAFz5/l1MkNkjRDUEmSMk5SxuMUZx0bm2OmBj16vQi0z1nbX4hzSS3Y4IzZfAmieA2oiVJMkr8/rjh8z1vX1GkSRDvaSmYWO8aIYNXS7c/xnH0vYOxGdPsdrHUYU/FNvkkpHKwCNsf5zmXPFyDCenyVw2ELk0NojqxTrMucZBQZYmOYnRlgrWP5FFx6+QLDUcLdt55iZq6X7ZwQUIhBRegYw/RMj8WlIXNzFxNFg2bCvRRzNUldH/34OQkpIn4VnDFIFgl7+mLRhvDIp1pC3ZJWIhAFMaac69Qm7Nl2Ljtnd2PjlH4UYxNXqu1cMGjFoFLGAEXwlf2dv7ak/BSbv0ZzIi0b9Mx0WgfOZtfrxsra+piFhRmcHYAIyyfhspeezWic8t1blpmZG2SDZEzm5MWAWPqDLmNdp9NboNfbzmh4HDFxIxtXpbK1VA9SU8AVvrMMcj2KKq4yT9Xqd2gz0v/nBDRaRXjOJizMnk0/nibuS5nfKAa3kLIUg2/zleyK3aDZklDyKFYzpsgV7wWS1DHaTHGqGa6PJAvSXGaWwDDaSDl2dIW5bQN63Yg56QOwuOx40Y/sYTy23HHLCea3DkAcmAhQElWiOEbFghnQ7WxnuHEEMR0U641H5ZClRkIruakVCeB6/V/sO4SS3XPhi7Ut9e4hHhFfIyqgjrn+VgRDpye4cTYwhR10PtLxdkJhckxsiHsRzinjYUqSFijHoUYYDS2dgXD+c7chxvDYAydYOzWm0zOkSRY1G4kYD1Me+f4Rdu6bpiMdpqe6zM30UZ1n6aTywz9xDqPU8e1bl9iydTpHfAajUWbiJOOJ484MiqvJzaUm0MgXrYRcecUaN9OYqkosNeZS/UwO1FhR319kZsNPt/nRYTfqZnC0Z0iGGUYX7zts4WSLnZBfY9yNiLsR+583x+ZKylMPrJBaxaYWBMYblrMvmOZHfuZ8tJMFbi/VA1zz0ft5+HuniHtgNc9gieHuOw5xwXO20zV9YJapqR5zswNU4eTpFX78teexObTc/q1ldmyfAXGIKqnNzFHiAOmUkLxuGXwErrmdL7JqBQnazCFn4xuJydhQ9bX7tVSw/2at6TurD5W6sBTNzU3UNwxPKs5mzqfwH66027nt1ywYi3sR87v6HHj2VjZOjVldHnHy2JBxzvl0pw0/+rYL+N79h7jp6w8wHA152Ysv4TXvuIQP/qdvsno6yQI3DINBjwe/c4yHv3+EPft25OZvjulBly1zA4wRlk/B637qfNZHKd/9zkkWts+ChdRCWkgyfcm7hPL3QIauGqLJlkSUBKlzLZLySghHaard0BoALaI648HW0OY5sh1QwMMMNma4O03zx5ySWpsFR6kytTXikit3MD3fY+HADBe9aDu9foRaZWN1zLNftothOuLzX/wuV739Sv7NL72Kz37+dlY2N/ihV+5lY3WMumwHdLtdhhvKV6/5PisbqyyfOsny0inWN0Z0OhFzswO2zs8x6E/xlp+5iAuePs0TR08zTFNG1uJQrISVCVpL3QY1B9LMHTZS+Fops50qplU+N0mDqr7kw5MzahMXF0gn6hqc5hjdZabIWpeZFeuyQKiYHOdYXRxz7w3HGa6NOf7oKvdcf4z11YTR0NKbiXnG5bv4ylfv4YrLL2Rmqsf0VI8rr7iET332Np7z0r1Mb4kZbdrMlkuHmdlpHrxzmS9++j5Ob66wsrnK8vJpVleHGCPMTveYn5lh0Bvw9rddwnkXDjh8fIXUWhJ1pHmqqJ5nkVZmQCaDFWkXdhkfK2mgem4qjQseo3RGWkAb/yd7j3MWVYi7prT51uWr3hJEuuQTJUbYWBtz9NF1Hrx1kYO3LrN8ZMTGWsL6SsKzrtjJWMc8/PBxXviCC8pg7cornsE99z7O6sYGl79yPxvraV6zFTPoDpiaHvDtGw/z6b+9m4MPHmVtuIF1Kd0oZn5mhgN7dnJg79ns2rnAr/7yc3naBQOeOn4aZzJEpBPASLD6CZlOv6iw8JnqFf0Vgx6XSu2AbPJSET6VmscL6ucC1CPmvEIMl5sg6QgunwCQikrItUcOiLrCZa/bw9Hvr/DgbScwnZS7bzqOQkY1jxymLzzvh/dy49fv4uKLdtPrdUhTC0C/1+UFzz+fT332Vt7+xpdz/WcfZjRSoiii1+0zM5jFAU88MOIDd91Mf2GTpz9jNxeet489u7czN9vHxFE2IF3h3e98Hn/xwbu56ZtPMjs/Ww28aigAr2UjpTU9WROueflrEYjRMBWpvpJY25QA2qJSrbQyxbOpVVIHpmOyCNVm8NYPsopgTJxh6dAGJ44NcaoZQ6rgNMP2p5fHXPZju4kHcO89h/mFt1+JqmJMlZV79Ssv4zff83He+saX8ANX7uXqjzzA/I4eEDE/PYeJIkbpEnYkPPbQBrfd+TXGdkwWV6eojIk7wtSgz749O7jsB57FgX19Di2OUHEN4ZW0CSfkTGUqdbpIqjggEIRJKPeUmghVGnauooUrOR6MRwnr6yNMJPkEuPKzHbnpydGPG6fced1hktSRWpflTzsR3amYue19Dly6hVf89Pnc9q2D7Nu7ndnZAam1RLnMwzrH7MyAZz19L1df+03e9JYXc/rEiMNPrLK0uMbi4gZPHjnJ0voaiVFmBgtcOLeN1fEam8kGiRsySjdYH57i1PqYE3cf4nvfe5SLn3Uh07PPYe1wWgVaNaWVNuTchImXXJpYAJaSQcjTrXGrZicoWtOyiE/RcPDr0hUveZ46y8rKOuPNNBtol3lrW9sFTmG0NmZ2Z499+2fYsWeanXtn2Hb2FDNbu0gHUk2578En+epN9/KL73hFtvq95RQZg3OON772ct71u3/Lws45fvKqi+h3e7hEWDq2zmOPLPPgwWPc/+ARHjh4jEcfPcF03CU2U4zsiG6cgPRZT9eQQYzDcPDR45x70UnEmKBmQAPZvK8FDSXvOauFqgmKGH2wE2ut9kZz3Osn3NUX2oYOoqZS8iQeqqRjy8qJIaunh2VSw7ksiV5EwdYqV7z5XC59+dkkdszJ0+scO3aKg/c+xuLxFdZWh1irmNjwhtf9ENu3z+Ccazgz5yw7ts/zG7/6Oj559df4P9fcAji2bJlm394dHNi/wPOvXODHf+pCtszO8flr7+X9f3Q9xnboxFMkLqXbmcZtLjJ0CZ24h4lmGQ9HdGPLyClRVNWKqa8LdtWCLXeELz4TWnSohSrC0xNpDfe3MZ5C6NG1rhQp4gAcKhndsPjUCnEnZnpLH4klA04CG6sJl71mL5e+/Cw++vEbWV5eZXqqz/zcNDsW5rj0meewc2GebVuniTvZZnXWUepZJUwRWmu59OJzuPS3zmFtOObI0RM89sQxHnr0MF/9+r0cWzrByZV1dm7t81fv+1VOntzgv/6Xm5meHzBMErpMEccDNpINHI5NM8K4LoNIWamBk8ova1nzW/E9MkEM2JTbxaGGqGIcaTDTVWpSMPkg1GFVreYqNzM2dayvbrCxMaY36NDpdzCxASM872X7uO767zI11ectb7qCbiduhdHWujyP2qLDzO2tU2EjyeQqURRxzv5dnH/OLl5xxbMBOLUOjzw14sOf/Af+5AN/x1VvejMf/tAdLBHdToxD6XYGdDtTbKYbRCYm1g6xiWqD//9RGuov5JJozgg6n3mI1aMVqihPalWO0qIBltbSHh+LORVs6nJ1ReaYx6MUE42IOhGb44Q0tXR7MeiQbidmnFgiI0GBhAgl4iEgwzQ3R9mYpF61pXPKMElIrcNq9vehw0O2bZ0nNoZut5PTIRDHca6ryq67K4aEjGLH9EhSFyr06xkT9ZNY2mhREVIU4X2YUvPjakV3bUWtng6oMe1ar+8p9DyKzZ1uscdSaxknCSunN7nuU/fw8isu5ZHHjnLtdbfT7US5jtWr69LmLGeZsmrwkxxVFPeRJRgUMRGRGI4uJszMzPPRT13DwYfv4t/94pv5zNXfZm0jIYqzhiUqhhRwIkgU0elMEcVTJKnUhHISQnOvkL3wl9WYSy1xj1f4h8cFCc3Ci6Ds3wNcKg2mNIiaJYOGqU1J0yy/YDWfCBSbxwkzc32+8Il7uekL9/Mffv31fPOOg3z+y98mjk3ORoY51mK3ZlF29rxVIfEHIb+dLBDMPuCJo0P6gxn+8XOf5xu33sD//fAf8tUbDvI/PnQb81tnSGxGO9uc4XViENNh0BtgTIyqqSo+g6pQDfjIRiFGQ0ofqiWqCfCrXgJxldQoiGYBctDzx1WMahbeuNwEZHPmJGMYi8lQEbbOzvGXv3sT//Sl+/iD//gz3Hzb/Vx3/R10YpPFBCX0dajaoMo9ddnnOZ+dLVKVOVf+5JFs8D/z+S9z0y038IX//X6+8Y3v82/f9WkGU7OkNk9FmiyvrSJZMkgMU4N+rtau4puwGr9WhqgTSt48DZWrtUgwNeU2obAwFNc2KtlbhEl+DwZnlHTkMripSqqabfFcwugc9Ltdds5t40///Vf4xg0P8r7ffStfvvE7XHfDnXTiCGutxzFJjqyzle+8rVHuEJsPvgiHj43odme45ks38IXrr+Haj7yPb33zUX7pVz7J1NQ2ztq5jctesJtev5MvCMrPVxH6g25OxEmgiQqqNUtOTFtZ0JI7a+nSIiKZKkJbKiq0XgejGghuQzCgNTVF1kcodY7RMCVVR6oZG1qYCasZOZemykx/wK6tZ/HeX7+Om296iD9778/zxevv4JbbH6DT6ZA4SNWQqpBqNvhKzey4bPCty9Rop1dTHH1uvPk2rv7CZ7n2o3/MnXcc4heu+hizszvoD6bZs3eOn33rpczNd0mdw6HZrsXhBPr9DmmejBd/pweNR9pVEXV0GaSJgzJVkaa6od4uQH2GSANtjPrF16VyQHPVMoxHKbZIauSSw5KWdtmuSBxM9QecNb/AH7zrS9xxyyF+/7fewqeu/gZLp9aQKCodeeFoMxmjy1d9riEtZI1OGY4NyydW+PurP83f/9XvcP/9x3nHVR9jfm4nc7NbiaKI+w8u8nt/+HWOLa1DJJl5pFBgCP1+RCqZWlvaWja0pQAKslKkXjkdyvbzezFnqiLyd0FNod1aL+wDIc2p4mTsstWe8z7FynfOkTib/zgS65ienmK6N8df/+k3mJ+bZmHHDCdPrREZKf1L1Z8C1AouVTRfveoMzgnWgZiIpROn2LVznr27dvL7772WfncbZ+/cycUX7mDnzhkU4cjiCmNnsx2K4iRLJWIgiiT7XAkxaKMeou4PW6szaxWY5QTU+gL5SRcf/GpQ/NzSToCw3VkBN0fDFOsoV3vqsklInGXsLIlLsc7mzzk6cYddu7bh1LK+MWTLltkcpRSrX7IVnydwbL7TnM1JP812V5JY5ufmGY5S1kab7NlzFvNbtrB/7xauuur5vPjF5zA/P0XUjRmry5BZnkhyAmku9i0eKxWDpYzfR93Gq34JC1fK4lypVdYXHbPa6p7Va8SE+p0W1COcJCgJKhP53kSnzjEaJaSamYsiJ+xQUnWIganpLjNbuoyGyur6iHFi2b1vjlEyZJSkTA/62CR/bwFDFcTkFICCdVJCXJdC5AR1lsFgitQK6xvrHDiwwMGD67z6tRdz4cW76E9P8fChEzxxxwpOpERnKNh8dMUYxnmw12ivUG8SJ54cJagR0Fb2uFikMW0KNyVY0UUBm2h7stlHTgX75ACLkoxTkjTN87SCEzIyDmXQ6zCzpctrfu5i7v7WIvfceRwVZfe+eZZPriAG+t2I1bUxRU+LbLKV9U1lbaNIyAj9boSmgkszuOvU0esO6MRdlpZPsnffVk6vP8CnP3Mfptvlm986xMGHl1GTJX0cgs1DHFusRZOLxo0nu6zXMDttiJTLRn6mqkULsldeEXhcp5gb6q5aeWiYnK4XwVWz63AkLmWc2Axh5FSuU4fN92RnEPOKnzqfy156gD3nbeX0yibff2SR3fu2cPjIEt1eByOQOiUyghHYGFqOn0pRnSqd+vrIoekmW2c6dLqSl1tBJxZmp2d56uhx9u7dx/oo4fFjK3z443dwanXI4tqIYZqZH4uSSjYRKUqEMnaOVFxompu9KVvqZbXRQbJZQal+0z5/22jFjNaanU5M//hsdBmTOFK1jBOb3Zy6HGeDuoydGiUp3731CPvP38o9dxzjyBOrqIGzds/xnYcPMjM7VdrLcaIsnRozSnp04h6333UPn7/xq6gqr3zJlfzgcy5ledUiOmRuOmY0VuIObJnbwqEnjvCSH3wmVmBxZcjRlU2ckNWVSRYBJ7isICT/26pjbHPnXsYh7cLcesvVQi0ttWpP8QKy4tm4XtEhSB5FahlAaK08UzSoOcSvRRavkC1VxyhJSVyaEWUlRZOhmrX1MQ/cu8T4I/eydGyTY8c3MB1Y2DnNkzcvsX3HNoapcmR5zCjp0u9P89Djj/LJqz+D2jV+46rX0+vGvP+Dn+aaL3+Bn/7JN3Dpxedz4nTCxtCydYuysLDAU0cfY8f2Ab1BzNDazLm6quImlQoB2TwWEDGkzlbscGELGrmIGmepXubcVFxWIJ/yWiHEeNXcWrf9La1dxK9mn9CSIdtVWeA1TtLc5ufmUiqzuT4cMbIpy9/aBCMMxynd6YiZuZgjx5d55jOfzpOLgmOGo4vH+MfPXc3hpx7mV372x3ndv3gZ9933FJujhE/9t9/huq/dwp9/8G/Ytm0vP/uGN3Hu/rMxBs7Zv59v3HInszNdZua7LJ92dKKoQjvqsKJYycyQlQwyG2CYWLKp0Yb9D6rgW1vYtEkUaw1uhUIZp6WDVVqAf700v9YqIGyMUM2uVcc4tRkNkYt+yUtRi7clicul4dlSGG0mJKnjnL1nce1XbmJ+bo5rr7+Je+77Dm97/cu46v2/xOLiGu989yf4x89+j9TBT7zqmbz3t1/NVz7xZ3z0U9fw/v/+x1x0/rN4/Y+9gi/d+FUuOW8X1ikrm0OQTh6ZazngKUqaAwSHlLzVemIrUsGnmIM8SK1ljT9BhTzRZ00L7VpuXaK4332P1FuW1bB9wYpKTX4Y7AIpasMES8rcYC9nzT+XOBZGSYrN92EhV6l6Plcdu0xkOHlqA9Mdc9XbX8lDjxzkhq/9E8+7ZBcf+MNf4zkXP4P3/sm1vPPd/8Dd957k7J272DK3le/ed4wPffJmnjp+kl/+lz/GL7/1VTz+5CN87rovcu7eed7z7qv4wCdu4XM3PMLc/EwuuHK5481RU45+VPIKYRFmB12WVzdxJ+5CN55CTCfsgih4JGUYdJV1YPV2NXXGuTc/rX7wVPRrds4GKbSy7rUtS+a3k5GIxG6wd9sLefaBn2emHzMcJ9j8opx6jfzyCy4KqcVkeH5pZZF3/trlvOPnXgwCmxuWj3zs63zgf36NY4tjdi0sMD01hXPZqtUI1oabPLm0yOy84Z0/dzn/+m0vZctsDwU+9Hc389t/fiODqW1EcUxCFvhZk7GfxS4oaxRUieOY3bNTHFo+jT70Mezx25F4CnVpANPDVnEaBGTaUpRX0hImK2SU3tyUBrbfl/s4zQMorwYg7y9a5GHDsDz78NRtsmvLZTzrwC/Qi7NllRbVLqXuXwPRb0kDowyTEUeWjrPjrC5btvZ54qkVlpfH7Ni2lbnZWSC34cWA5fZbjePU5jpHlk+wdUvEgT1znDi9yaEjG2zftkC3N8AKpGQ234lk/+f+oKrWUTqdmG39LsdPraMP/S/s0p1gsrphQZrNAxt9jySIXRATtC7OCvYkDMQa7VVKGaKGfIeErQrE+C2+sur4UbpCYsco0Im6GSFX9v2Xqt5X88F3Wj4WxV12n7WLlY0NHj89ptub5Wn7p0DizJkXgo+iQkZdPoCGmcEs5+4dsLK5wQOPDok7HXaetQuViDEZGEjzCXNeP7lK/JzFRZHA2Caos2iyTtlrzYX9M6TR3r1WMUqtJXTtdXGAIVuUb0EnKGlrDCKBRCUr1YkYjk8yTFfpyDQiNldCSFBa5IqKnILFLGFqps2fmZphWqoMIxQDl31GhqxcGXUXSEsRBoMp+oMpHJQi2wJ2WgUrNb13reW9yVGZpOvo6ERWPVPrh9qojvTxZvGhxjsEw4RSmqxh0xn6aakfYXlOuQzcig66rqqRQhVjYkbJSdZHR5mNL2BkE4zE3kBLwLaq5/z8qMPH3y7nppxUVTa2fC7/PU8pppKv7oJeLhwseSOQMvNVVOVrUM0okZDYBDtOYXgMHZ1EJEadC0rotCxanFAjURTm5bUDDXGulmScNgJcvzJe6yU59QmTMC5QhTQdcXL1QWanLsSSpfOyaDjKDIF61e5CrQ1BrmPFr4ZXnBSiX/UyV2DJqA41RcKmSvo4KSZIs7Rj3hQgbGNZ5XazWgWhZxPUxejpB8ElaBQ3ClaCIlRpT834goiANfaaO7R1pG+kJEvPXlem0uRHVB3GdFha+S7D9BRjm9KLoyyPq7nwVvKkDa78cZINss0JO6uOFFtmqVJy/K6UEWuilgRlnBfXJbg8/ZkHWAXFYPAcd1UoWGb6BEZJysKOrfzI884jTRIkXUVP3AWmU7fk1ZgYM3Hw68AmyEjmE2gapTZB2i2M6wqBKY22Nd7452YpMh02h0dZPHU7iRqG6QZbB9O5dN2Vq9KWiglXSk2c2nzwMz4p0WwSrB88qSNRR4KWqCaR6vkM2+e7ptgNNZtfXK8xwii17NuzwF/+4svZNaPYMcji7ejGMTDdWsWoLy9xEzoGhm0YfOGDf2BG3CyBaen+QVOPK96HFwKqsr1N/llR1OPI4g1MTZ1P6hboxevsmJ5haXOdxNksMe8LWqTKF7hCQZx3SnElhNUyWrXla6WCovlYOFzuaDXHPvkTpjqbpvBbibPsP3uB3//pF3H7/Q/x8S/dRS85Snr4RtR0kbydWdiv2veNWtsaeF3rTJM58E13d3ZKq2OqwpMwJh5FUMO9vmTPL94zYrBuRK+7i/173kYUzTDf79DrTbOZOsbO5XgcL0KWfNW66u/ChkuFlKwqSZlGzKFlEWsUB12UOlUtzUVZ1xYZTBShcYQT4eKdc3STFe588Ag9t4J76GO44TJIp9aigPZm3cF5BuGhPUWzpipwk6pxUzYBYSqrIcuttQ8uv9NImKCoTUDRjsK5Ed3ODnad9Vri3n5EUrpR1ivORB0QQxTHEEWMrIXI5N1z8hswmbcSk3UbUZMHM1F2IybK87hRpu8pHDuS9eTx89FD69i0jpFzuDQlGY9hvEmysY6mSj85jH38czn07GVl90jj2KyK99F2xVx5upRUY+VFxEJ2aIY3AYT5X23rWOjzRLUGdPUGRl5/AxGDdWNEIubnn8/0zHOR7naQqEx6Z8ezGJxmYXqx2jV3cmIyMyMIagQxecOjvKdQeZBCboYslRzS5cl8q47E5Tlkl+LyEidRixmfRE/ciV36NnmFCOTRfr0tnjaO3pCggiZse1w7wCFvU1NGx8EENGqAaZyPEhD/2i5YrZdyVsGJw7ohxgzo9ffT6+/DdLbjpIPm2kzEUJV0S9WiILfrvs/Qsleb1KSpXiQqXn9RtFRXGyOgCYyW0fVD6NrjkK5C1M97fLpAUFggpoZCWn0WuElOlqRlQNBJbj0knwCl9ZSmMMEc1gM0CtWC+oKaUk7CTnKqDqdj1GWJD8HbrpPOEVANi0Qa0SctrS7rVXS1LkdauHHJmE6JslVfJtdrB0xorRCjwQFJ7buqpuAioTbUmMwHxL4KWjyRbtH7oOXQqvAsRwkPNGw0MZeweI+ypVkPojCibGQ9tWp+V+jItE19qS3yeOdvTamd4JFzXKaTLwApa5215PIDyFdCVr85svo2WutalRD8FAqJ+gqL/bJTn2DTmtgoYD2lfvNaS8vVt4QXxHl9f4rHtCX/U1ddaIt+pnm4aMvv2qYtyNOFeb+yDB1VAy9eh0N/R1Wp2NrkTgzDcgGW75C98wSyjFhLxj7Q/tQJvJLB9AdSwtIdCeuI/fbG6nUH0Qmnl0i9LL3hpAhC+no2qvG3VpF8ea/Oz+65RpGJ1u1xy5E82rZq/Ak3UrtWT/SQ7x/Tdn/hORrNr9daYwltEXeFgqV6/zT/+MFJNVXapsNuBjy+7a0fkVEPjJSwQ3vryUZVdU7RodFnL8VPQjUy8uGEN3iyltfG4cJStKW8LzBJPsb3T5jwKe2yM5TUTnTJ7WZwetKZzgqrjv5o3+7a0OY3uCm/O7nUKJS2heMjGGVisV2zz3XtsFGPw9e2tvkUgbnfhqVWBRYOfFjAEWpz826G6nVXrNcOqNQovsmD3iiJnVQE14C6dRinVZH0BPmxv4vK16kEVZBBCtanGVoPevBBgIRlc7VgtyzSKxoR+c1Xxa8J8I58KjL7aIud1HoLgyYsVO+oY6VFWaEEigOp9edp69XfXq9W8VVVgbTxunu1JKnqipAJjePV6xgTdmTSUKmV+4FQkhLOv/Edpjaq3ttODm2Tprf96eWbysI1vxCQxmA16tTaYG29KWerD6tR/bXjevWMR47VQHOQZAk9kzYOFA1fG54Q20JwFiZIW8qNtHGkR3ggcavt9WIBfy/V+1D7Gvlitfiv8YvhQhPQ3jxQJuPXCbOjTDqVqjoFXNoRziSyUtsmzAR+rjLplY+IGzqgltIj9Ut0RJvLJkjrBeGHF7FrEz34bYDboJRr7zQotaMNS8duarDTX3nSPgnl1Zq6AKtSMqvTiSEGrd1jwoEMW+BXlIOimKB4TP3KGK3dZFh0gE4qLtPWrR7GZdJqe6uUnce2SuD/w3NlGl/Qbrukfnq2nxr0Y4XWQ5+ZWJw46dRZbXneL+ny6y/MRGSh/oHQEqIFH3UEdLh4tCstSYrm5am2wxspufw2H6/N0p8Wn6FtSg/xrs/LfxerXD1xMXVliYQnYocxiwZoyj+PXssj2JsdiY3fc0m9ndDupOpQxD/2z0+A5LbU+AxrA+p4F6UN0SpnAjg+BvcP6ywhYC3M1skJ8zZnEBYeVinEsl5a8r4PPtqZYJj8NhBh92MNjzJsc1pBYYKP+UVbg796S0e/nqx+Zr20kWnioaW6klhpE/KEEa/qGU404swndOeFhSHXpISmW0OygHDhaj05rtqqePDPIc5QkKtx3TXGo3FSdgtX48NDj35vmo0WpKI1vlS0JiPQCUgn6LtwBkapHit5HZa0FgBSQ4F1X1JMktSOM59wYGoYgdc5cpH2HVCSTOJtVeedyeu1um0Ua9d7XGodOAn1k6D8VW5M1sZG1U/W++hH27BjtUgmrX68WEdbzsWpHQwqZ5CrEexqT6irOa1dXksta9UIUove0SUWn4DYfFmiNpUTIpM5A/FPoquhDGlFGnXkUj+RrnkW/QTOuXG0YDnOrk6xh5XtMuGYat/uNnrnqTRrJiQ8U7OR4NKia6JfXBZ4Hz+xL62HfdbP5Q3wvf5zgVE9o1WdUJQdIThpkusHRkvbUWaNPLXIhKoWmczMhVkxDRcOeA2YapfnAxChgX6Kj4v9dKOU2bBahkeaiyw88MEzL6a2ipUmwypVz30ftmV1xBrkIoK7qyWCmplIaT+SvJ631caWDCSYARsaIB1pJcj9fHl5QGmRNRQNaHnJWzQVEXccYH6tHVKjnv5fPArNb9Hun6ykkyxm82Bj/5zKoDt7kE1rtB/3hiAUCweHqDUWdC2XXO7QsPbXtOSNJ+5CaWvZlj8snji3TELRWtz3/wAQduefZURUYAAAAABJRU5ErkJggg==" alt=""> |
| <h2>TGS Converter <span style="color:var(--acc3)">kokbtak</span> ✨</h2> |
| <div id="bootMsg">…</div> |
| <div class="boot-bar"><i id="bootFill"></i></div> |
| <button id="bootRetry" class="btn primary hidden">تلاش دوباره</button> |
| </div> |
| </div> |
|
|
| <div class="orb o1"></div><div class="orb o2"></div> |
|
|
| <div class="app"> |
| <header> |
| <div class="brand"> |
| <img src="data:image/png;base64,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" alt="" width="46" height="46"> |
| <div><b>TGS Converter</b><span>kokbtak ✨ High Quality</span></div> |
| </div> |
| <div class="head-actions"> |
| <button id="langBtn" class="ibtn langbtn">EN</button> |
| <button id="themeBtn" class="ibtn"> |
| <svg id="icoMoon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M21 12.8A9 9 0 1 1 11.2 3 7 7 0 0 0 21 12.8z"/></svg> |
| <svg id="icoSun" class="hidden" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><circle cx="12" cy="12" r="4"/><path d="M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4"/></svg> |
| </button> |
| </div> |
| </header> |
|
|
| <section class="hero"> |
| <div class="badge"><i></i><span>پردازش ۱۰۰٪ محلی — بدون افت کیفیت</span></div> |
| <h1>مبدل فوقالعاده باکیفیت استیکر تلگرام</h1> |
| <p class="sub">موتور رندرینگ کاملاً بازنویسی شد تا گرادیانتها و لبهها بدون هیچ نویزی، با بالاترین کیفیت ممکن خروجی گرفته شوند.</p> |
| <div class="chips"> |
| <span class="chip aichip">✨ Upscale بدون نویز</span> |
| <span class="chip"><b>.tgs</b></span><span class="chip">→ <b>GIF / MP4 / WebM / PNG</b></span> |
| </div> |
| </section> |
|
|
| <section class="dropzone" id="dropzone" tabindex="0" role="button"> |
| <div class="dz-icon"> |
| <svg width="86" height="86" viewBox="0 0 96 96" fill="none"> |
| <defs><linearGradient id="dzg" x1="12" y1="14" x2="80" y2="82" gradientUnits="userSpaceOnUse"><stop stop-color="#7c3aed"/><stop offset=".55" stop-color="#6366f1"/><stop offset="1" stop-color="#a855f7"/></linearGradient></defs> |
| <path d="M22 12h42a10 10 0 0 1 10 10v32L50 82H22a10 10 0 0 1-10-10V22a10 10 0 0 1 10-10z" fill="url(#dzg)"/> |
| <path d="M74 54L50 82V64a10 10 0 0 1 10-10h14z" fill="#c4b5fd"/> |
| <path d="M43 28l4.2 8.6 9.5 1.4-6.9 6.7 1.7 9.4-8.5-4.5-8.5 4.5 1.7-9.4-6.9-6.7 9.5-1.4z" fill="#fff" opacity=".95"/> |
| </svg> |
| </div> |
| <h2>فایل TGS خود را رها کنید یا دکمه زیر را بزنید</h2> |
| <p>بهترین کار: دکمه «دموی بنفش» را بزنید تا خروجی تمیز و باکیفیت را ببینید!</p> |
| <div class="dz-actions"> |
| <button id="pickBtn" class="btn primary"><span>انتخاب فایل</span></button> |
| <button id="demoBtn" class="btn ai"><span>✨ دموی بنفش (درخواست شما)</span></button> |
| </div> |
| <input type="file" id="fileInput" accept=".tgs,.json,.lottie,.zip,application/gzip,application/json,application/zip" multiple hidden> |
| </section> |
|
|
| <section id="workspace" class="workspace hidden"> |
| <div class="cols"> |
| <div class="card"> |
| <div class="card-head"><h3>پیشنمایش زنده و شفاف</h3></div> |
| <div class="stage bg-checker-sm" id="stage"><div id="previewHolder"></div></div> |
| <input type="range" id="scrubber" min="0" max="0" value="0"> |
| <div class="player-row"> |
| <button id="playBtn" class="ibtn"><svg id="icoPlay" viewBox="0 0 24 24" fill="currentColor"><path d="M8 5.5v13l11-6.5z"/></svg><svg id="icoPause" class="hidden" viewBox="0 0 24 24" fill="currentColor"><path d="M7 5h4v14H7zM13 5h4v14h-4z"/></svg></button> |
| <button id="loopBtn" class="ibtn on"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M17 2l4 4-4 4"/><path d="M3 11v-1a4 4 0 0 1 4-4h14"/><path d="M7 22l-4-4 4-4"/><path d="M21 13v1a4 4 0 0 1-4 4H3"/></svg></button> |
| <select id="speedSel"><option value="0.5">×0.5</option><option value="1" selected>×1</option><option value="2">×2</option></select> |
| </div> |
| </div> |
|
|
| <div class="card"> |
| <div class="card-head"><h3>تنظیمات خروجی</h3></div> |
| |
| <div class="ai-panel"> |
| <div class="ai-head"> |
| <span class="ai-badge">✨</span> |
| <b>موتور بهبود کیفیت (High-Quality Render)</b> |
| <label class="switch"><input type="checkbox" id="enhTgl" checked><i></i></label> |
| </div> |
| <div class="ai-meta" style="margin-top:8px">فعال بودن این گزینه، خروجی را با الگوریتم Bicubic چندمرحلهای بزرگنمایی کرده و لبهها را کاملاً نرم و بدون موج (Banding) نگه میدارد.</div> |
| </div> |
|
|
| <div class="fmt-grid" id="fmtGrid" role="radiogroup"></div> |
|
|
| <div class="ctl-grid"> |
| <div class="ctl"> |
| <label>ابعاد خروجی (Width)</label> |
| <input type="number" id="inWidth" min="16" max="2048" step="8" value="1024"> |
| <small class="hint">پیشفرض روی 1024 تنظیم شده تا بیشترین کیفیت را داشته باشید.</small> |
| </div> |
| <div class="ctl"> |
| <label>کیفیت / بیتریت</label> |
| <div class="range-row"><input type="range" id="qRange" min="10" max="100" value="100"><b id="qVal">100</b></div> |
| <small class="hint" id="qHint">حداکثر کیفیت ممکن</small> |
| </div> |
| </div> |
|
|
| <div class="convert-zone"> |
| <button id="convertBtn" class="btn ai big"> |
| <span class="spin hidden" id="convSpin"></span> |
| <span id="convLabel">✨ شروع تبدیل باکیفیت</span> |
| </button> |
| <div id="progWrap" class="prog hidden"> |
| <div class="bar"><div id="progFill"></div></div> |
| <div class="prog-meta"><span id="progPhase"></span><span id="progText">0%</span><button id="cancelBtn" class="btn ghost small">لغو</button></div> |
| </div> |
| <div id="resultCard" class="result hidden"> |
| <div class="rcheck"><svg viewBox="0 0 52 52"><circle cx="26" cy="26" r="24" fill="none"/><path fill="none" d="M14 27l8 8 16-16"/></svg></div> |
| <div class="rinfo"><b id="resName"></b><small id="resMeta"></small></div> |
| <button id="resDl" class="btn primary"><span>دانلود خروجی</span></button> |
| </div> |
| </div> |
| </div> |
| </div> |
| </section> |
|
|
| <footer> |
| <div class="lock"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><rect x="4" y="11" width="16" height="10" rx="2"/><path d="M8 11V7a4 4 0 0 1 8 0v4"/></svg><span>پردازش ۱۰۰٪ محلی. فایلها هرگز جایی ارسال نمیشوند.</span></div> |
| </footer> |
|
|
| <div id="toasts"></div> |
|
|
| <script> |
| 'use strict'; |
| const $ = (s, r=document) => r.querySelector(s); |
| const sleep = ms => new Promise(r => setTimeout(r, ms)); |
| const clamp = (v,a,b) => Math.min(b, Math.max(a, v)); |
| const even = v => v % 2 ? v + 1 : v; |
| |
| function toast(msg, type='info'){ |
| const el = document.createElement('div'); el.className = 'toast ' + type; |
| el.innerHTML = `<span>${msg}</span>`; $('#toasts').appendChild(el); |
| requestAnimationFrame(()=> el.classList.add('in')); |
| setTimeout(()=>{ el.classList.remove('in'); setTimeout(()=> el.remove(), 350); }, 3000); |
| } |
| |
| |
| const LIBS = { |
| lottie:{ g:'lottie', urls:['https://cdnjs.cloudflare.com/ajax/libs/lottie-web/5.12.2/lottie.min.js'] }, |
| pako:{ g:'pako', urls:['https://cdnjs.cloudflare.com/ajax/libs/pako/2.1.0/pako.min.js'] }, |
| zip:{ g:'JSZip', urls:['https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js'] } |
| }; |
| const ESMS = { gifenc:{ urls:['https://cdn.jsdelivr.net/npm/gifenc@1.0.3/dist/gifenc.esm.js'] }, mp4muxer:{ urls:['https://cdn.jsdelivr.net/npm/mp4-muxer@5.2.2/build/mp4-muxer.mjs'] }, webmmuxer:{ urls:['https://cdn.jsdelivr.net/npm/webm-muxer@4.0.1/build/webm-muxer.mjs'] } }; |
| async function fetchText(urls){ for(const u of urls){ try{ const r = await fetch(u); if(r.ok) return await r.text(); }catch(e){} } throw new Error('fail'); } |
| async function ensureLib(key){ |
| if (window[LIBS[key].g]) return; |
| let src = localStorage.getItem('tgsk_'+key); |
| if (!src){ src = await fetchText(LIBS[key].urls); try{localStorage.setItem('tgsk_'+key, src);}catch(e){} } |
| await new Promise((res, rej)=>{ const s = document.createElement('script'); s.src = URL.createObjectURL(new Blob([src], {type:'text/javascript'})); s.onload = res; s.onerror = rej; document.head.appendChild(s); }); |
| } |
| const esmCache = {}; |
| async function ensureESM(key){ |
| if (esmCache[key]) return esmCache[key]; |
| let src = localStorage.getItem('tgsk_esm_'+key); |
| if (!src){ src = await fetchText(ESMS[key].urls); try{localStorage.setItem('tgsk_esm_'+key, src);}catch(e){} } |
| const u = URL.createObjectURL(new Blob([src], {type:'text/javascript'})); |
| try{ esmCache[key] = await import(u); return esmCache[key]; } finally { setTimeout(()=>URL.revokeObjectURL(u), 3000); } |
| } |
| |
| |
| function buildDemoLottie(){ |
| const OP = 90; |
| const kf = (pts, d=1) => pts.map((p,i)=> i<pts.length-1 ? { i:{x:Array(d).fill(.5),y:Array(d).fill(1)}, o:{x:Array(d).fill(.5),y:Array(d).fill(0)}, t:p[0], s:p[1] } : { t:p[0], s:p[1] }); |
| const tr = (p=[0,0]) => ({ ty:'tr', p:{a:0,k:p}, a:{a:0,k:[0,0]}, s:{a:0,k:[100,100]}, r:{a:0,k:0}, o:{a:0,k:100} }); |
| |
| |
| const headPath = "M 256 80 C 360 80, 420 140, 440 200 C 470 160, 490 120, 480 100 C 460 140, 440 180, 430 220 C 450 320, 400 440, 256 440 C 112 440, 62 320, 82 220 C 72 180, 52 140, 32 100 C 22 120, 42 160, 72 200 C 92 140, 152 80, 256 80 Z"; |
| |
| const eyeL = "M 140 240 Q 180 210 210 250 Q 200 300 160 290 Q 130 270 140 240 Z"; |
| const eyeR = "M 372 240 Q 332 210 302 250 Q 312 300 352 290 Q 382 270 372 240 Z"; |
| |
| const mouth = "M 180 350 Q 256 390 332 350 Q 256 370 180 350 Z"; |
| |
| return { |
| v:'5.7.4', fr:60, ip:0, op:OP, w:512, h:512, nm:'purple-demon', ddd:0, assets:[], layers:[ |
| { ddd:0, ind:1, ty:4, nm:'mouth', sr:1, ks:{ o:{a:0,k:100}, r:{a:0,k:0}, p:{a:0,k:[256,256,0]}, a:{a:0,k:[0,0,0]}, s:{a:1, k:kf([[0,[100,100,100]],[45,[110,90,100]],[90,[100,100,100]]], 3)} }, |
| shapes:[ { ty:'gr', it:[ { ty:'sh', d:1, ks:{a:0, k:{i:[[0,0],[0,0],[0,0]], o:[[0,0],[0,0],[0,0]], v:[[-76,94],[0,134],[76,94]], c:false}} }, { ty:'st', c:{a:0,k:[0.15,0.05,0.25,1]}, o:{a:0,k:100}, w:{a:0,k:16}, lc:2, lj:2 }, tr() ] } ], ip:0, op:OP, st:0 }, |
| { ddd:0, ind:2, ty:4, nm:'eyes', sr:1, ks:{ o:{a:0,k:100}, r:{a:0,k:0}, p:{a:0,k:[256,256,0]}, a:{a:0,k:[0,0,0]}, s:{a:1, k:kf([[0,[100,100,100]],[45,[95,105,100]],[90,[100,100,100]]], 3)} }, |
| shapes:[ { ty:'gr', it:[ { ty:'sh', d:1, ks:{a:0, k:{i:[[0,0],[0,0],[0,0],[0,0]], o:[[0,0],[0,0],[0,0],[0,0]], v:[[-116,-16],[-76,-46],[-46,-6],[-96,34]], c:true}} }, { ty:'fl', c:{a:0,k:[0.15,0.05,0.25,1]}, o:{a:0,k:100} }, tr() ] }, |
| { ty:'gr', it:[ { ty:'sh', d:1, ks:{a:0, k:{i:[[0,0],[0,0],[0,0],[0,0]], o:[[0,0],[0,0],[0,0],[0,0]], v:[[116,-16],[76,-46],[46,-6],[96,34]], c:true}} }, { ty:'fl', c:{a:0,k:[0.15,0.05,0.25,1]}, o:{a:0,k:100} }, tr() ] } ], ip:0, op:OP, st:0 }, |
| { ddd:0, ind:3, ty:4, nm:'head', sr:1, ks:{ o:{a:0,k:100}, r:{a:0,k:0}, p:{a:0,k:[256,256,0]}, a:{a:0,k:[0,0,0]}, s:{a:1, k:kf([[0,[100,100,100]],[45,[103,103,100]],[90,[100,100,100]]], 3)} }, |
| shapes:[ { ty:'gr', it:[ { ty:'sh', d:1, ks:{a:0, k:{i:[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], o:[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], v:[[0,-176],[104,-176],[164,-116],[184,-56],[214,-96],[234,-136],[224,-156],[204,-116],[184,-36],[204,64],[154,184],[0,184],[-154,184],[-204,64],[-184,-36],[-204,-116],[-224,-156],[-234,-136],[-214,-96],[-184,-56],[-164,-116],[-104,-176],[0,-176]], c:true}} }, |
| { ty:'fl', c:{a:0,k:[0.65,0.25,0.85,1]}, o:{a:0,k:100} }, tr() ] } ], ip:0, op:OP, st:0 } |
| ] |
| }; |
| } |
| |
| |
| async function gunzip(buf){ |
| if (typeof DecompressionStream !== 'undefined'){ |
| try{ const ds = new DecompressionStream('gzip'); return new Uint8Array(await new Response(new Blob([buf]).stream().pipeThrough(ds)).arrayBuffer()); }catch(e){} |
| } |
| return window.pako.ungzip(new Uint8Array(buf)); |
| } |
| async function parseStickerFile(file){ |
| const ext = (file.name.split('.').pop() || '').toLowerCase(); |
| const buf = await file.arrayBuffer(); |
| let data; |
| if (ext === 'json') data = JSON.parse(new TextDecoder().decode(buf)); |
| else { |
| let text; try{ text = new TextDecoder().decode(await gunzip(buf)); }catch(e){ text = new TextDecoder().decode(new Uint8Array(buf)); } |
| data = JSON.parse(text); |
| } |
| if (!data || !Array.isArray(data.layers)) throw new Error('Invalid file'); |
| return data; |
| } |
| |
| |
| const state = { format:'gif', width:1024, quality:100, enhance:true, converting:false, token:{cancelled:false} }; |
| const PV = { anim:null, playing:true, tMs:0, lastTs:0, raf:null, fps:60, frames:0, durMs:0 }; |
| |
| function destroyPreview(){ if(PV.anim){PV.anim.destroy();PV.anim=null;} $('#previewHolder').innerHTML=''; cancelAnimationFrame(PV.raf); } |
| async function loadPreview(item){ |
| destroyPreview(); |
| PV.anim = window.lottie.loadAnimation({ container:$('#previewHolder'), renderer:'canvas', loop:false, autoplay:false, animationData:JSON.parse(JSON.stringify(item.data)) }); |
| await new Promise(r=>{ if(PV.anim.isLoaded)return r(); PV.anim.addEventListener('DOMLoaded',r); }); |
| PV.fps = PV.anim.frameRate || 60; PV.frames = Math.floor(PV.anim.totalFrames); PV.durMs = PV.frames / PV.fps * 1000; |
| $('#scrubber').max = PV.frames - 1; |
| pvTick(performance.now()); |
| } |
| function pvTick(ts){ |
| if(!PV.playing && !state.converting){ PV.raf = requestAnimationFrame(pvTick); return; } |
| if(!PV.lastTs) PV.lastTs = ts; |
| PV.tMs += (ts - PV.lastTs); PV.lastTs = ts; |
| if(PV.tMs >= PV.durMs) PV.tMs = 0; |
| const fr = Math.floor(PV.tMs / 1000 * PV.fps); |
| if(PV.anim) PV.anim.goToAndStop(fr, true); |
| if(!state.converting) $('#scrubber').value = fr; |
| PV.raf = requestAnimationFrame(pvTick); |
| } |
| |
| |
| function drawScaledHQ(src, ctx, outW, outH){ |
| |
| let cur = src, cw = src.width, ch = src.height; |
| ctx.imageSmoothingEnabled = true; |
| ctx.imageSmoothingQuality = 'high'; |
| |
| if (cw < outW) { |
| while (cw * 2 <= outW) { |
| const tc = document.createElement('canvas'); tc.width = cw*2; tc.height = ch*2; |
| const tx = tc.getContext('2d'); tx.imageSmoothingQuality = 'high'; |
| tx.drawImage(cur, 0, 0, tc.width, tc.height); |
| cur = tc; cw = tc.width; ch = tc.height; |
| } |
| } else { |
| while (cw * 0.5 >= outW) { |
| const tc = document.createElement('canvas'); tc.width = Math.max(1, Math.floor(cw/2)); tc.height = Math.max(1, Math.floor(ch/2)); |
| const tx = tc.getContext('2d'); tx.imageSmoothingQuality = 'high'; |
| tx.drawImage(cur, 0, 0, tc.width, tc.height); |
| cur = tc; cw = tc.width; ch = tc.height; |
| } |
| } |
| ctx.drawImage(cur, 0, 0, outW, outH); |
| } |
| |
| |
| function calcBitrate(w,h,fps,q){ return clamp(Math.round(w*h*fps*(0.05 + (q/100)*0.35)), 1000000, 50000000); } |
| |
| async function encGif(ctx, oc, frames, fps, paint, onP, tk){ |
| const { GIFEncoder, quantize, applyPalette } = await ensureESM('gifenc'); |
| const gif = GIFEncoder(); const w = oc.width, h = oc.height; |
| const delay = Math.max(20, Math.round(1000/fps)); |
| for(let i=0; i<frames.length; i++){ |
| if(tk.cancelled) throw {cancelled:true}; |
| paint(frames[i]); |
| const d = ctx.getImageData(0,0,w,h).data; |
| let hadAlpha = false; |
| for(let p=3; p<d.length; p+=4) if(d[p]<128){ hadAlpha=true; d[p-3]=0;d[p-2]=0;d[p-1]=0;d[p]=0; } |
| |
| const palette = quantize(d, 256, { format: hadAlpha?'rgba4444':'rgb565', oneBitAlpha: hadAlpha }); |
| let ti = hadAlpha ? palette.findIndex(c=>c[3]<64) : -1; |
| if(ti===-1 && hadAlpha){ palette[255]=[0,0,0,0]; ti=255; } |
| const index = applyPalette(d, palette, hadAlpha?'rgba4444':'rgb565'); |
| gif.writeFrame(index, w, h, { palette, transparent:hadAlpha, transparentIndex:ti, dispose:hadAlpha?2:undefined, delay, repeat: i===0?0:undefined }); |
| onP((i+1)/frames.length); if(i%2===0) await sleep(0); |
| } |
| gif.finish(); return new Blob([gif.bytes()], {type:'image/gif'}); |
| } |
| |
| async function encVideo(fmt, oc, frames, fps, paint, onP, tk){ |
| const w = oc.width, h = oc.height, bitrate = calcBitrate(w,h,fps,state.quality); |
| if(typeof VideoEncoder !== 'undefined'){ |
| try{ |
| const mod = fmt==='mp4' ? await ensureESM('mp4muxer') : await ensureESM('webmmuxer'); |
| const { Muxer, ArrayBufferTarget } = mod; |
| let cfg, muxCodec; |
| if(fmt==='mp4'){ cfg={codec:'avc1.640028',width:w,height:h,bitrate,framerate:fps}; muxCodec='avc'; } |
| else { cfg={codec:'vp09.00.10.08',width:w,height:h,bitrate,framerate:fps}; muxCodec='V_VP9'; } |
| |
| const target = new ArrayBufferTarget(); |
| const muxer = new Muxer({ target, video:{codec:muxCodec,width:w,height:h,frameRate:fps}, firstTimestampBehavior:'offset', ...(fmt==='mp4'?{fastStart:'in-memory'}:{}) }); |
| const enc = new VideoEncoder({ output:(c,m)=>muxer.addVideoChunk(c,m), error:e=>{throw e;} }); |
| enc.configure(cfg); |
| const durUs = Math.round(1e6/fps); let tUs = 0; |
| for(let i=0; i<frames.length; i++){ |
| if(tk.cancelled) throw {cancelled:true}; |
| paint(frames[i]); |
| const vf = new VideoFrame(oc, {timestamp:tUs, duration:durUs}); tUs+=durUs; |
| enc.encode(vf, {keyFrame: i%60===0}); vf.close(); |
| while(enc.encodeQueueSize>4) await sleep(2); |
| onP((i+1)/frames.length); if(i%3===0) await sleep(0); |
| } |
| await enc.flush(); enc.close(); muxer.finalize(); |
| return new Blob([target.buffer], {type: fmt==='mp4'?'video/mp4':'video/webm'}); |
| }catch(e){ if(e.cancelled) throw e; } |
| } |
| |
| const mime = fmt==='mp4'?'video/mp4':'video/webm'; |
| const stream = oc.captureStream(0); const track = stream.getVideoTracks()[0]; |
| const rec = new MediaRecorder(stream, {mimeType:mime, videoBitsPerSecond:bitrate}); |
| const chunks=[]; rec.ondataavailable=e=>chunks.push(e.data); |
| const stopped = new Promise(r=>rec.onstop=r); rec.start(); |
| const t0 = performance.now(); |
| await new Promise(res=>{ |
| (function step(){ |
| if(tk.cancelled) return res(); |
| const i = Math.floor((performance.now()-t0)/(1000/fps)); |
| if(i>=frames.length) return res(); |
| paint(frames[i]); if(track.requestFrame) track.requestFrame(); |
| onP(i/frames.length); requestAnimationFrame(step); |
| })(); |
| }); |
| rec.stop(); await stopped; |
| return new Blob(chunks, {type:mime}); |
| } |
| |
| |
| let currentBlob = null, currentName = ''; |
| async function startConversion(item){ |
| if(state.converting || !item) return; |
| state.converting = true; state.token = {cancelled:false}; |
| $('#progWrap').classList.remove('hidden'); $('#resultCard').classList.add('hidden'); |
| $('#convLabel').textContent = 'در حال رندر گرفتن با کیفیت بالا...'; $('#convSpin').classList.remove('hidden'); |
| |
| const holder = document.createElement('div'); holder.style.display='none'; document.body.appendChild(holder); |
| let anim = window.lottie.loadAnimation({ container:holder, renderer:'canvas', loop:false, autoplay:false, animationData:JSON.parse(JSON.stringify(item.data)) }); |
| await new Promise(r=>{ if(anim.isLoaded)return r(); anim.addEventListener('DOMLoaded',r); }); |
| |
| const src = holder.querySelector('canvas'); |
| const totalFrames = Math.floor(anim.totalFrames); |
| const fps = anim.frameRate || 60; |
| let outW = even(clamp(state.width, 16, 2048)); |
| let outH = even(Math.round(outW * ((item.data.h||512)/(item.data.w||512)))); |
| |
| const oc = document.createElement('canvas'); oc.width=outW; oc.height=outH; |
| const ctx = oc.getContext('2d', {willReadFrequently: state.format==='gif'}); |
| |
| const frames = Array.from({length:totalFrames}, (_,i)=>i); |
| const paint = (i) => { |
| anim.goToAndStop(i, true); |
| ctx.clearRect(0,0,outW,outH); |
| drawScaledHQ(src, ctx, outW, outH); |
| }; |
| |
| try { |
| if(state.format==='gif') currentBlob = await encGif(ctx, oc, frames, fps, paint, p=>{$('#progFill').style.width=(p*100)+'%'; $('#progText').textContent=Math.round(p*100)+'%';}, state.token); |
| else currentBlob = await encVideo(state.format, oc, frames, fps, paint, p=>{$('#progFill').style.width=(p*100)+'%'; $('#progText').textContent=Math.round(p*100)+'%';}, state.token); |
| |
| currentName = item.name.replace(/\.[^.]+$/, '') + '_HQ.' + state.format; |
| $('#resName').textContent = currentName; |
| $('#resMeta').textContent = `${outW}x${outH} • ${fps}fps • ${(currentBlob.size/1048576).toFixed(2)} MB`; |
| $('#resultCard').classList.remove('hidden'); |
| toast('تبدیل با موفقیت و بالاترین کیفیت انجام شد!', 'success'); |
| } catch(e) { |
| if(!e.cancelled) toast('خطا در تبدیل: '+e.message, 'error'); |
| } finally { |
| anim.destroy(); holder.remove(); |
| state.converting = false; $('#convSpin').classList.add('hidden'); $('#convLabel').textContent = '✨ شروع تبدیل باکیفیت'; |
| } |
| } |
| |
| |
| const FMTS = [{id:'gif',n:'GIF متحرک'},{id:'mp4',n:'MP4 (ویدیو)'},{id:'webm',n:'WebM (ویدیو)'}]; |
| function buildFmtCards(){ |
| $('#fmtGrid').innerHTML = FMTS.map(f=> `<button class="fmt ${state.format===f.id?'active':''}" data-fmt="${f.id}"><b>${f.n}</b></button>`).join(''); |
| } |
| buildFmtCards(); |
| |
| $('#fmtGrid').addEventListener('click', e=>{ |
| const b = e.target.closest('.fmt'); if(!b) return; |
| state.format = b.dataset.fmt; buildFmtCards(); |
| }); |
| $('#inWidth').addEventListener('input', e=> state.width = +e.target.value); |
| $('#qRange').addEventListener('input', e=>{ state.quality = +e.target.value; $('#qVal').textContent = state.quality; }); |
| $('#enhTgl').addEventListener('change', e=> state.enhance = e.target.checked); |
| $('#scrubber').addEventListener('input', e=>{ if(PV.anim){ PV.tMs = (+e.target.value / PV.fps) * 1000; PV.anim.goToAndStop(+e.target.value, true); }}); |
| $('#playBtn').addEventListener('click', ()=>{ PV.playing=!PV.playing; $('#icoPlay').classList.toggle('hidden',PV.playing); $('#icoPause').classList.toggle('hidden',!PV.playing); }); |
| $('#loopBtn').addEventListener('click', function(){ this.classList.toggle('on'); }); |
| $('#cancelBtn').addEventListener('click', ()=> state.token.cancelled = true); |
| $('#resDl').addEventListener('click', ()=>{ |
| if(!currentBlob) return; |
| const a = document.createElement('a'); a.href = URL.createObjectURL(currentBlob); a.download = currentName; a.click(); |
| }); |
| |
| |
| let currentItem = null; |
| async function handleFiles(files){ |
| for(const f of files){ |
| try{ |
| const data = await parseStickerFile(f); |
| currentItem = { name:f.name, data, w:data.w||512, h:data.h||512 }; |
| $('#workspace').classList.remove('hidden'); |
| await loadPreview(currentItem); |
| toast('فایل بارگذاری شد. آماده تبدیل باکیفیت!', 'success'); |
| }catch(e){ toast('فایل نامعتبر است', 'error'); } |
| } |
| } |
| |
| $('#pickBtn').addEventListener('click', e=>{ e.stopPropagation(); $('#fileInput').click(); }); |
| $('#fileInput').addEventListener('change', e=> handleFiles(e.target.files)); |
| $('#dropzone').addEventListener('click', ()=> $('#fileInput').click()); |
| $('#dropzone').addEventListener('dragover', e=>{ e.preventDefault(); $('#dropzone').classList.add('drag'); }); |
| $('#dropzone').addEventListener('dragleave', ()=> $('#dropzone').classList.remove('drag')); |
| $('#dropzone').addEventListener('drop', e=>{ e.preventDefault(); $('#dropzone').classList.remove('drag'); handleFiles(e.dataTransfer.files); }); |
| |
| $('#demoBtn').addEventListener('click', async (e)=>{ |
| e.stopPropagation(); |
| toast('در حال ساخت دموی بنفش...', 'info'); |
| const json = buildDemoLottie(); |
| const bytes = window.pako.gzip(JSON.stringify(json)); |
| const file = new File([bytes], 'purple_demon.tgs', {type:'application/gzip'}); |
| await handleFiles([file]); |
| }); |
| |
| $('#convertBtn').addEventListener('click', ()=> startConversion(currentItem)); |
| $('#themeBtn').addEventListener('click', ()=>{ |
| const isDark = document.documentElement.dataset.theme === 'dark'; |
| document.documentElement.dataset.theme = isDark ? 'light' : 'dark'; |
| $('#icoMoon').classList.toggle('hidden', !isDark); $('#icoSun').classList.toggle('hidden', isDark); |
| }); |
| |
| |
| (async ()=>{ |
| try{ |
| $('#bootMsg').textContent = 'بارگذاری موتور Lottie...'; $('#bootFill').style.width = '33%'; await ensureLib('lottie'); |
| $('#bootMsg').textContent = 'بارگذاری موتور فشردهسازی...'; $('#bootFill').style.width = '66%'; await ensureLib('pako'); |
| $('#bootMsg').textContent = 'آماده!'; $('#bootFill').style.width = '100%'; |
| await sleep(400); $('#boot').classList.add('off'); setTimeout(()=>$('#boot').remove(), 500); |
| }catch(e){ $('#bootMsg').textContent = 'خطا در بارگذاری. اینترنت را چک کنید.'; $('#bootRetry').classList.remove('hidden'); } |
| })(); |
| $('#bootRetry').addEventListener('click', ()=> location.reload()); |
| </script> |
| </body> |
| </html> |
|
|