diff --git a/server/web/pages/template/html.go b/server/web/pages/template/html.go index 4cdcbce..a504e21 100644 --- a/server/web/pages/template/html.go +++ b/server/web/pages/template/html.go @@ -61,12 +61,12 @@ var Staticjs216253270chunkjsLICENSEtxt []byte var Staticjs216253270chunkjsmap []byte -//go:embed pages/static/js/main.156908fe.chunk.js -var Staticjsmain156908fechunkjs []byte +//go:embed pages/static/js/main.0ae58375.chunk.js +var Staticjsmain0ae58375chunkjs []byte -//go:embed pages/static/js/main.156908fe.chunk.js.map -var Staticjsmain156908fechunkjsmap []byte +//go:embed pages/static/js/main.0ae58375.chunk.js.map +var Staticjsmain0ae58375chunkjsmap []byte //go:embed pages/static/js/runtime-main.8bda5920.js diff --git a/server/web/pages/template/pages/asset-manifest.json b/server/web/pages/template/pages/asset-manifest.json index 961c3e0..911634e 100644 --- a/server/web/pages/template/pages/asset-manifest.json +++ b/server/web/pages/template/pages/asset-manifest.json @@ -1,7 +1,7 @@ { "files": { - "main.js": "/static/js/main.156908fe.chunk.js", - "main.js.map": "/static/js/main.156908fe.chunk.js.map", + "main.js": "/static/js/main.0ae58375.chunk.js", + "main.js.map": "/static/js/main.0ae58375.chunk.js.map", "runtime-main.js": "/static/js/runtime-main.8bda5920.js", "runtime-main.js.map": "/static/js/runtime-main.8bda5920.js.map", "static/js/2.16253270.chunk.js": "/static/js/2.16253270.chunk.js", @@ -12,6 +12,6 @@ "entrypoints": [ "static/js/runtime-main.8bda5920.js", "static/js/2.16253270.chunk.js", - "static/js/main.156908fe.chunk.js" + "static/js/main.0ae58375.chunk.js" ] } \ No newline at end of file diff --git a/server/web/pages/template/pages/index.html b/server/web/pages/template/pages/index.html index 8288424..47a81a0 100644 --- a/server/web/pages/template/pages/index.html +++ b/server/web/pages/template/pages/index.html @@ -1 +1 @@ -TorrServer
\ No newline at end of file +TorrServer
\ No newline at end of file diff --git a/server/web/pages/template/pages/static/js/main.0ae58375.chunk.js b/server/web/pages/template/pages/static/js/main.0ae58375.chunk.js new file mode 100644 index 0000000..07858d5 --- /dev/null +++ b/server/web/pages/template/pages/static/js/main.0ae58375.chunk.js @@ -0,0 +1,2 @@ +(this.webpackJsonptorrserver_web=this.webpackJsonptorrserver_web||[]).push([[0],{173:function(e){e.exports=JSON.parse('{"About":"About","Actions":"Actions","Add":"Add","AddDialog":{"AddPosterLinkInput":"Poster link","AddTorrentSourceNotification":"First add your torrent source","AppendFile":{"Or":"OR","ClickOrDrag":"CLICK / DRAG & DROP (.torrent)"},"CustomTorrentTitle":"Custom title (optional)","CustomTorrentTitleHelperText":"Write custom title to find poster","HashExists":"This torrent is already in database","OriginalTorrentTitle":"Original torrent title","TitleBlank":"Title (blank for orig. torrent title)","TorrentSourceLink":"Torrent source link","TorrentSourceOptions":"magnet / hash / .torrent file link","WrongTorrentSource":"Wrong torrent source"},"AddFromLink":"Add from Link","AddNewTorrent":"Add new torrent","B":"B","bps":"bps","Buffer":"Preload Buffer / Cache","BufferNote":"Set Preload Cache Before Play > 32 MB in settings to change preload size","Cache":"Cache","Cancel":"Cancel","Clear":"Clear","Close":"Close","CloseServer?":"Do you want to turn off server?","CloseServer":"Turn Off","CopyHash":"Copy Hash","CopyLink":"Copy link","Data":"Data","Delete":"Delete","DeleteTorrent?":"Delete Torrent?","DeleteTorrents?":"Delete All Torrents?","DetailedCacheView":{"button":"Detailed Cache View","header":"$t(DetailedCacheView.button)"},"Details":"Details","Donate?":"Want to donate?","Donate":"Donate","DownloadPlaylist":"Download Playlist","DownloadSpeed":"Download speed","Drop":"Drop","DropTorrent":"Reset Torrent","Edit":"Edit","EditTorrent":"Edit torrent","Episode":"Episode","FromLatestFile":"From Latest File","Full":"Full","GB":"GB","Gbps":"Gbps","Host":"Host","Info":"Info","KB":"KB","kbps":"kbps","Kilobytes":"Kilobytes","LatestFilePlayed":"Latest file played:","Links":"Links","MB":"MB","Mbps":"Mbps","Name":"Name","NoTorrentsAdded":"No torrents added","Offline":"Offline","OK":"OK","OpenLink":"Open link","Peers":"Peers","PiecesCount":"Pieces count","PiecesLength":"Pieces length","Preload":"Preload","ProjectSource":"Project page","Releases":"TorrServer Releases","RemoveAll":"Remove All","RemoveViews":"Remove View States","Resolution":"Resolution","Save":"Save","ScrollDown":"scroll down","Season":"Season","Sec":"s","Seconds":"Seconds","SelectSeason":"Select Season","SettingsDialog":{"AcceptPeerCon":"Accept Peer Connections","AnnTorrentsToDht":"Periodically Announce Torrents to DHT","AddRetrackers":"Add retrackers","AdditionalSettings":"Additional Settings","CacheBeforeReaderDesc":"from cache will be saved before currently played frame","CacheAfterReaderDesc":"from cache will be loaded after currently played frame","CacheSize":"Cache Size","CacheSettings":"Cache Settings","CacheStorageLocation":"Cache Storage Location","ConnectionsLimit":"Connections Limit","ConnectionsLimitHint":"20-25 recommended","DHT":"DHT (Distributed Hash Table)","DhtConnectionLimit":"DHT Connection Limit","Disk":"Disk","DontAddRetrackers":"Don`t add retrackers","DownloadRateLimit":"Download Rate Limit","ForceEncrypt":"Force Encrypt Headers","PeersListenPort":"Peers Listen Port","PreloadCache":"Preload Cache Before Play","ProMode":"PRO mode","RAM":"RAM","ReaderReadAHead":"Readahead Cache (5-100%, rec. 95%)","RemoveCacheOnDrop":"Remove Cache from Disk on Drop Torrent","RemoveCacheOnDropDesc":"If disabled, cache removed on delete torrent.","RemoveRetrackers":"Remove retrackers","ReplaceRetrackers":"Replace retrackers","RetrackersMode":"Retrackers Mode","ResetToDefault":"Reset to default","Settings":"Settings","TorrentDisconnectTimeout":"Torrent Disconnect Timeout","TorrentsSavePath":"Torrents Save Path","Upload":"Upload (not recommended to disable)","UploadRateLimit":"Upload Rate Limit","UseDiskDesc":"Better use RAM or external storage on flash-based devices","Tabs":{"Main":"Main","Additional":"Additional","AdditionalDisabled":"(enable PRO mode)"}},"Size":"Size","SpecialThanks":"Special Thanks","Speed":"Speed","Support":"Support","TB":"TB","Tbps":"Tbps","ThanksToEveryone":"Thanks to everyone who tested and helped.","TorrentAdded":"Added","TorrentClosed":"\u0421losed","TorrentContent":"Torrent Content","TorrentDetails":"Torrent Details","TorrentGettingInfo":"Getting Info","TorrentInDb":"In DB","TorrentPreload":"Preload","TorrentSize":"Torrent size","TorrentState":"Torrent State","TorrentStatus":"Torrent Status","TorrentWorking":"Active","TurnOff":"Turn Off","UploadFile":"Upload File","UploadSpeed":"Upload speed","Viewed":"Viewed"}')},174:function(e){e.exports=JSON.parse('{"About":"\u041e \u0441\u0435\u0440\u0432\u0435\u0440\u0435","Actions":"\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f","Add":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c","AddDialog":{"AddPosterLinkInput":"\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043f\u043e\u0441\u0442\u0435\u0440","AddTorrentSourceNotification":"\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 torrent-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a","AppendFile":{"Or":"\u0418\u041b\u0418","ClickOrDrag":"\u041d\u0410\u0416\u041c\u0418\u0422\u0415 / \u041f\u0415\u0420\u0415\u0422\u0410\u0429\u0418\u0422\u0415 \u0424\u0410\u0419\u041b (.torrent)"},"CustomTorrentTitle":"C\u0432\u043e\u0435 \u0438\u043c\u044f (\u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e)","CustomTorrentTitleHelperText":"\u041d\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u0441\u0432\u043e\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u043f\u043e\u0441\u0442\u0435\u0440","HashExists":"\u042d\u0442\u043e\u0442 \u0442\u043e\u0440\u0440\u0435\u043d\u0442 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445","OriginalTorrentTitle":"\u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u0438\u043c\u044f \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430","TitleBlank":"\u0418\u043c\u044f (\u043f\u0443\u0441\u0442\u043e\u0435 - \u043e\u0440\u0438\u0433. \u0438\u043c\u044f \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430)","TorrentSourceLink":"\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430","TorrentSourceOptions":"magnet-\u0441\u0441\u044b\u043b\u043a\u0430 / \u0445\u0435\u0448 / \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 .torrent \u0444\u0430\u0439\u043b","WrongTorrentSource":"\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 torrent-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a"},"AddFromLink":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c","AddNewTorrent":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0442\u043e\u0440\u0440\u0435\u043d\u0442","B":"\u0411","bps":"\u0431\u0438\u0442/c","Buffer":"\u041f\u0440\u0435\u0434\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 / \u041a\u0435\u0448","BufferNote":"\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u0411\u0443\u0444\u0435\u0440 \u043f\u0440\u0435\u0434\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 > 32 \u041c\u0411 \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u0434\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043f\u0440\u0435\u0434\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438","Cache":"\u041a\u0435\u0448","Cancel":"\u041e\u0442\u043c\u0435\u043d\u0430","Clear":"\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c","Close":"\u0417\u0430\u043a\u0440\u044b\u0442\u044c","CloseServer?":"\u0425\u043e\u0442\u0438\u0442\u0435 \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440?","CloseServer":"\u0412\u044b\u043a\u043b. \u0441\u0435\u0440\u0432\u0435\u0440","CopyHash":"\u0421\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0445\u0435\u0448","CopyLink":"\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c","Data":"\u0414\u0430\u043d\u043d\u044b\u0435","Delete":"\u0423\u0434\u0430\u043b\u0438\u0442\u044c","DeleteTorrent?":"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0442\u043e\u0440\u0440\u0435\u043d\u0442?","DeleteTorrents?":"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0441\u0435 \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u044b?","DetailedCacheView":{"button":"\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043a\u0435\u0448\u0430","header":"\u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u0435\u0448\u0430"},"Details":"\u0418\u043d\u0444\u043e","Donate?":"\u0425\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442?","Donate":"\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430","DownloadPlaylist":"\u0421\u043a\u0430\u0447\u0430\u0442\u044c \u043f\u043b\u0435\u0439\u043b\u0438\u0441\u0442","DownloadSpeed":"\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438","Drop":"\u0421\u0431\u0440\u043e\u0441","DropTorrent":"\u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0442\u043e\u0440\u0440\u0435\u043d\u0442","Edit":"\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c","EditTorrent":"\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0442\u043e\u0440\u0440\u0435\u043d\u0442","Episode":"\u0421\u0435\u0440\u0438\u044f","FromLatestFile":"C \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0444\u0430\u0439\u043b\u0430","Full":"\u041f\u043e\u043b\u043d\u044b\u0439","GB":"\u0413\u0411","Gbps":"\u0413\u0431\u0438\u0442/c","Host":"\u0425\u043e\u0441\u0442","Info":"\u0418\u043d\u0444\u043e","KB":"\u041a\u0411","kbps":"\u043a\u0431\u0438\u0442/\u0441","Kilobytes":"\u041a\u0438\u043b\u043e\u0431\u0430\u0439\u0442\u044b","LatestFilePlayed":"\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b:","Links":"\u0421\u0441\u044b\u043b\u043a\u0438","MB":"\u041c\u0411","Mbps":"\u041c\u0431\u0438\u0442/c","Name":"\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435","NoTorrentsAdded":"\u041d\u0435\u0442 \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u043e\u0432","Offline":"\u0421\u0435\u0440\u0432\u0435\u0440 \u043d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d","OK":"OK","OpenLink":"\u041e\u0442\u043a\u0440\u044b\u0442\u044c","Peers":"\u041f\u0438\u0440\u044b","PiecesCount":"\u041a\u043e\u043b-\u0432\u043e \u0431\u043b\u043e\u043a\u043e\u0432","PiecesLength":"\u0420\u0430\u0437\u043c\u0435\u0440 \u0431\u043b\u043e\u043a\u0430","Preload":"\u041f\u0440\u0435\u0434\u0437\u0430\u0433\u0440.","ProjectSource":"\u0421\u0430\u0439\u0442 \u043f\u0440\u043e\u0435\u043a\u0442\u0430","Releases":"\u0420\u0435\u043b\u0438\u0437\u044b TorrServer","RemoveAll":"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0441\u0435","RemoveViews":"\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u044b","Resolution":"\u0420\u0430\u0437\u0440\u0435\u0448.","Save":"\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c","ScrollDown":"\u043f\u0440\u043e\u043a\u0440\u0443\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u0437","Season":"\u0421\u0435\u0437\u043e\u043d","Sec":"c","Seconds":"\u0421\u0435\u043a\u0443\u043d\u0434\u044b","SelectSeason":"\u0412\u044b\u0431\u043e\u0440 \u0441\u0435\u0437\u043e\u043d\u0430","SettingsDialog":{"AcceptPeerCon":"\u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f","AnnTorrentsToDht":"\u0410\u043d\u043e\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u044b \u043f\u043e DHT","AddRetrackers":"\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c","AdditionalSettings":"\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438","CacheBeforeReaderDesc":"\u043e\u0442 \u043a\u0435\u0448\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0437\u0430\u0434\u0438 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u043e\u0433\u043e \u043a\u0430\u0434\u0440\u0430","CacheAfterReaderDesc":"\u043a\u0435\u0448\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u043f\u0435\u0440\u0435\u0434\u0438 \u043e\u0442 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u043e\u0433\u043e \u043a\u0430\u0434\u0440\u0430","CacheSize":"\u0420\u0430\u0437\u043c\u0435\u0440 \u043a\u0435\u0448\u0430","CacheSettings":"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u0435\u0448\u0430","CacheStorageLocation":"\u041c\u0435\u0441\u0442\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043a\u0435\u0448\u0430","ConnectionsLimit":"\u0422\u043e\u0440\u0440\u0435\u043d\u0442-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f","ConnectionsLimitHint":"\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f 20-25","DHT":"DHT (Distributed Hash Table)","DhtConnectionLimit":"\u041b\u0438\u043c\u0438\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 DHT","Disk":"\u041f\u0417\u0423 / \u041d\u0430\u043a\u043e\u043f\u0438\u0442\u0435\u043b\u044c","DontAddRetrackers":"\u041d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0442\u044c","DownloadRateLimit":"\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438","ForceEncrypt":"\u041f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432","PeersListenPort":"\u041f\u043e\u0440\u0442 \u0434\u043b\u044f \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439","PreloadCache":"\u0411\u0443\u0444\u0435\u0440 \u043f\u0440\u0435\u0434\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438","ProMode":"\u041f\u0420\u041e-\u0440\u0435\u0436\u0438\u043c","RAM":"\u041e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c","ReaderReadAHead":"\u041e\u043f\u0435\u0440\u0435\u0436\u0430\u044e\u0449\u0438\u0439 \u043a\u0435\u0448 (5-100%, \u0440\u0435\u043a. 95%)","RemoveCacheOnDrop":"\u041e\u0447\u0438\u0449\u0430\u0442\u044c \u043a\u0435\u0448 \u043f\u0440\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430","RemoveCacheOnDropDesc":"\u0415\u0441\u043b\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043e, \u043a\u0435\u0448 \u043e\u0447\u0438\u0449\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430.","RemoveRetrackers":"\u0423\u0434\u0430\u043b\u044f\u0442\u044c","ReplaceRetrackers":"\u0417\u0430\u043c\u0435\u043d\u044f\u0442\u044c","RetrackersMode":"\u0420\u0435\u0442\u0440\u0435\u043a\u0435\u0440\u044b","ResetToDefault":"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e","Settings":"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438","TorrentDisconnectTimeout":"\u0422\u0430\u0439\u043c-\u0430\u0443\u0442 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430","TorrentsSavePath":"\u041f\u0443\u0442\u044c \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043a\u0435\u0448\u0430","Upload":"\u041e\u0442\u0434\u0430\u0447\u0430 (\u043d\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0442\u044c)","UploadRateLimit":"\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043e\u0442\u0434\u0430\u0447\u0438","UseDiskDesc":"\u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c \u0438\u043b\u0438 \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u043d\u043e\u0441\u0438\u0442\u0435\u043b\u0438 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445 \u0441 flash-\u043f\u0430\u043c\u044f\u0442\u044c\u044e","Tabs":{"Main":"\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435","Additional":"\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435","AdditionalDisabled":"(\u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u041f\u0420\u041e-\u0440\u0435\u0436\u0438\u043c)"}},"Size":"\u0420\u0430\u0437\u043c\u0435\u0440","SpecialThanks":"\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u043f\u0430\u0441\u0438\u0431\u043e","Speed":"\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c","Support":"\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0430\u0442\u044c","TB":"\u0422\u0411","Tbps":"\u0422\u0431\u0438\u0442/\u0441","ThanksToEveryone":"\u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0432\u0441\u0435\u043c, \u043a\u0442\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0438 \u043f\u043e\u043c\u043e\u0433\u0430\u043b!","TorrentAdded":"\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d","TorrentClosed":"\u0417\u0430\u043a\u0440\u044b\u0442","TorrentContent":"\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430","TorrentDetails":"\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0435","TorrentGettingInfo":"\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0438\u043d\u0444\u043e","TorrentInDb":"\u0422\u043e\u0440\u0440\u0435\u043d\u0442 \u0432 \u0411\u0414","TorrentPreload":"\u041f\u0440\u0435\u0434\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430","TorrentSize":"\u0420\u0430\u0437\u043c\u0435\u0440 \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430","TorrentState":"\u0414\u0430\u043d\u043d\u044b\u0435 \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430","TorrentStatus":"\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430","TorrentWorking":"\u0410\u043a\u0442\u0438\u0432\u0435\u043d","TurnOff":"\u0412\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c","UploadFile":"\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0444\u0430\u0439\u043b","UploadSpeed":"\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043e\u0442\u0434\u0430\u0447\u0438","Viewed":"\u041f\u0440\u043e\u0441\u043c."}')},330:function(e,t){},333:function(e,t){},335:function(e,t){},337:function(e,t){},382:function(e,t,n){"use strict";n.r(t);var a=n(0),r=n(18),i=n.n(r),o=n(475),c=n(188),l=n(10),s=n(470),d=n(64),p=n(386),j=n(453),b=n(471),u=n(472),h=n(473),x=n(474),g=window.location,m=g.protocol,O=g.hostname,f=g.port,C="".concat(m,"//").concat(O).concat(f?":".concat(f):""),v=function(){return"".concat(C,"/torrents")},y=function(){return"".concat(C,"/viewed")},w=function(){return"".concat(C,"/settings")},S=function(){return"".concat(C,"/stream")},k=function(){return"".concat(C,"/echo")},D=n(171),T=n(21),P=n.n(T),M=n(23),B=n(451),R=n(452),L=n(454),A=n(73),z=n.n(A),F=n(100),E=n(75),G=n(126),N=n(86),I=n(172),U=n(173),H=n(174);G.a.use(I.a).use(N.e).init({fallbackLng:"en",interpolation:{escapeValue:!1},resources:{en:{translation:U},ru:{translation:H}}});var W=G.a;function V(e){if(!e)return"";var t=Math.floor(Math.log(e)/Math.log(1024));return"".concat(1*(e/Math.pow(1024,t)).toFixed(2)," ").concat([W.t("B"),W.t("KB"),W.t("MB"),W.t("GB"),W.t("TB")][t])}function Z(e){if(!e)return"";var t=Math.floor(Math.log(8*e)/Math.log(1e3));return"".concat(1*(8*e/Math.pow(1e3,t)).toFixed(0)," ").concat([W.t("bps"),W.t("kbps"),W.t("Mbps"),W.t("Gbps"),W.t("Tbps")][t])}function _(e){return e&&e.connected_seeders?"".concat(e.connected_seeders," \xb7 ").concat(e.active_peers," / ").concat(e.total_peers):null}var K=function(e){var t=e;[["(",")"],["[","]"],["{","}"]].forEach((function(e){var n="\\".concat(e[0]),a=new RegExp(n,"g"),r=Object(E.a)(t.matchAll(a)).length,i="\\".concat(e[1]),o=new RegExp(i,"g");if(r!==Object(E.a)(t.matchAll(o)).length){var c="(\\".concat(e[0],")(?!.*\\1).*"),l=new RegExp(c,"g");t=t.replace(l,"")}}));var n=!!t.match(/\.{3}$/g),a=t.replace(/[\\.| ]+$/g,"").trim();return n?"".concat(a,".."):a},J=function(){var e=Object(F.a)(z.a.mark((function e(){var t,n;return z.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,P.a.post(v(),{action:"list"});case 3:return t=e.sent,n=t.data,e.abrupt("return",n);case 8:throw e.prev=8,e.t0=e.catch(0),new Error(null);case 11:case"end":return e.stop()}}),e,null,[[0,8]])})));return function(){return e.apply(this,arguments)}}(),Y=n(32),$=n(1),X=function(e){var t=e.color,n=Object(Y.a)().palette.primary.main;return Object($.jsx)("svg",{height:"80px",width:"80px",fill:t||n,xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",version:"1.1",x:"0px",y:"0px",viewBox:"0 0 100 100",enableBackground:"new 0 0 100 100",xmlSpace:"preserve",children:Object($.jsxs)("g",{children:[Object($.jsx)("path",{d:"M18.293,93.801c0.066,0.376,0.284,0.718,0.597,0.937c0.313,0.219,0.708,0.307,1.085,0.241l70.058-12.353 c0.376-0.066,0.718-0.284,0.937-0.597c0.219-0.313,0.307-0.708,0.24-1.085l-9.502-53.891c-0.139-0.79-0.892-1.317-1.682-1.178 l-19.402,3.421L47.997,14.16c0.241-0.706,0.375-1.456,0.375-2.229c0-0.399-0.035-0.804-0.106-1.209C47.671,7.363,44.757,5,41.455,5 c-0.4,0-0.804,0.035-1.209,0.106h0c-3.359,0.595-5.723,3.509-5.723,6.812c0,0.4,0.035,0.804,0.106,1.209 c0.178,1.005,0.567,1.918,1.109,2.709l-6.875,19.061L9.968,38.228c-0.79,0.139-1.317,0.892-1.177,1.682L18.293,93.801z M40.75,7.966L40.75,7.966c0.239-0.042,0.474-0.062,0.705-0.062c1.909,0,3.612,1.373,3.953,3.324v0 c0.042,0.238,0.062,0.473,0.062,0.704c0,1.908-1.373,3.612-3.323,3.953h0.001c-0.238,0.042-0.473,0.062-0.705,0.062 c-1.908,0-3.612-1.373-3.953-3.323c-0.042-0.238-0.062-0.473-0.062-0.705C37.427,10.01,38.799,8.306,40.75,7.966z M38.059,17.96 c1.012,0.569,2.17,0.89,3.383,0.89c0.399,0,0.804-0.034,1.208-0.106h0.001c1.48-0.263,2.766-0.976,3.743-1.974l10.935,13.108 L32.16,34.315L38.059,17.96z M29.978,37.648c0.136-0.004,0.268-0.029,0.396-0.07l29.75-5.246c0.134-0.006,0.266-0.027,0.395-0.07 l18.582-3.277l8.998,51.031L20.9,91.867l-8.998-51.032L29.978,37.648z"}),Object($.jsx)("path",{d:"M49.984,75.561c0.809,0,1.627-0.065,2.449-0.199l0.001,0c7.425-1.213,12.701-7.627,12.701-14.919 c0-0.809-0.065-1.627-0.199-2.449c-1.213-7.425-7.626-12.701-14.919-12.701c-0.808,0-1.627,0.065-2.45,0.199 c-7.425,1.213-12.701,7.626-12.701,14.918c0,0.808,0.065,1.627,0.199,2.449C36.278,70.284,42.692,75.561,49.984,75.561z M51.967,72.496c-0.668,0.109-1.33,0.161-1.983,0.161c-5.883,0-11.079-4.265-12.053-10.265c-0.109-0.668-0.161-1.33-0.161-1.983 c0-2.108,0.555-4.123,1.534-5.892l19.693,14.176C57.206,70.645,54.782,72.039,51.967,72.496z M48.034,48.357L48.034,48.357 c0.668-0.109,1.329-0.161,1.983-0.161c5.882,0,11.079,4.265,12.053,10.265c0.109,0.667,0.161,1.329,0.161,1.983 c0,2.109-0.556,4.127-1.536,5.897L41.001,52.163C42.791,50.21,45.217,48.814,48.034,48.357z"}),Object($.jsx)("polygon",{points:"47.567,45.492 47.567,45.492 47.568,45.491 "})]})})},q=function(){var e=Object(Y.a)().palette.primary.main;return Object($.jsx)("svg",{height:"100px",width:"100px",fill:e,viewBox:"0 0 452 452",version:"1.1",xmlns:"http://www.w3.org/2000/svg",children:Object($.jsxs)("g",{id:"#000000",children:[Object($.jsx)("path",{opacity:"1.00",d:" M 210.49 18.69 C 244.92 16.12 280.02 22.13 311.46 36.47 C 344.90 51.54 374.16 75.69 395.41 105.58 C 415.62 133.87 428.55 167.34 432.48 201.89 C 438.07 248.86 427.02 297.61 401.45 337.43 C 382.92 366.59 357.02 391.04 326.80 407.80 C 300.81 422.31 271.64 431.08 241.96 433.26 C 207.37 435.97 172.14 429.83 140.54 415.51 C 109.95 401.69 82.82 380.33 62.16 353.86 C 39.25 324.67 24.38 289.21 19.78 252.38 C 14.94 214.51 20.65 175.31 36.47 140.54 C 54.11 101.38 84.24 67.99 121.37 46.39 C 148.44 30.52 179.19 20.98 210.49 18.69 M 213.46 36.60 C 178.91 38.80 145.03 50.71 116.76 70.72 C 84.67 93.21 59.84 125.88 46.91 162.88 C 34.87 196.99 32.96 234.54 41.25 269.73 C 48.89 302.45 65.53 332.98 88.79 357.21 C 113.91 383.56 146.78 402.45 182.25 410.72 C 216.67 418.86 253.37 417.21 286.87 405.85 C 329.85 391.49 367.13 361.01 389.89 321.85 C 406.02 294.41 414.96 262.84 415.73 231.03 C 416.71 196.59 408.11 161.91 390.97 132.00 C 372.31 99.13 343.57 72.09 309.61 55.49 C 279.95 40.89 246.43 34.40 213.46 36.60 Z"}),Object($.jsx)("path",{opacity:"1.00",d:" M 217.02 117.63 C 223.01 117.45 228.99 117.45 234.98 117.63 C 235.16 150.72 234.93 183.81 235.09 216.89 C 268.18 217.03 301.28 216.82 334.38 216.99 C 334.57 222.99 334.57 229.00 334.38 235.01 C 301.28 235.18 268.18 234.97 235.09 235.11 C 234.93 268.19 235.16 301.28 234.98 334.37 C 228.99 334.55 223.00 334.55 217.02 334.37 C 216.84 301.28 217.07 268.19 216.92 235.11 C 183.82 234.97 150.72 235.17 117.62 235.01 C 117.43 229.00 117.43 222.99 117.62 216.99 C 150.72 216.82 183.82 217.03 216.91 216.89 C 217.07 183.81 216.84 150.72 217.02 117.63 Z"})]})})},Q=function(e){var t=e.color,n=e.width,a=Object(Y.a)().palette.primary.main;return Object($.jsxs)("svg",{width:n||"100%",height:"100%",viewBox:"96.96632385253906 377.9800109863281 873.03369140625 310.9999694824219",version:"1.1",xmlns:"http://www.w3.org/2000/svg",children:[Object($.jsx)("path",{fill:t||a,opacity:"1.00",d:" M 603.05 378.50 C 648.01 378.10 692.99 378.30 737.96 378.24 C 746.80 377.82 755.66 378.04 764.51 378.02 C 764.49 396.01 764.50 414.00 764.50 432.00 C 833.00 432.01 901.50 431.99 970.00 432.00 C 970.00 499.67 970.00 567.33 970.00 635.00 C 941.01 635.01 912.02 634.98 883.04 635.01 C 868.37 635.70 853.70 634.86 839.03 635.00 C 814.19 635.00 789.35 634.99 764.50 635.00 C 764.50 652.99 764.49 670.99 764.51 688.98 C 722.02 688.64 679.51 688.76 637.01 688.76 C 610.36 688.24 583.70 688.61 557.04 688.50 C 535.36 688.64 513.69 688.06 492.00 688.25 C 467.01 688.45 442.03 687.89 417.04 688.00 C 393.35 688.06 369.67 687.54 345.97 687.76 C 331.65 687.28 317.32 687.58 303.00 687.51 C 287.69 686.89 272.35 687.61 257.03 686.99 C 244.25 687.26 231.37 686.92 218.84 684.09 C 183.39 676.56 151.36 655.48 129.16 627.00 C 110.45 603.11 98.57 573.55 97.40 543.09 C 95.46 518.81 100.09 494.17 110.06 471.99 C 126.89 434.21 159.00 403.08 198.12 389.13 C 227.91 377.22 260.63 379.63 292.01 379.76 C 308.00 379.13 324.02 379.87 340.01 379.25 C 355.65 379.17 371.30 379.41 386.95 379.13 C 409.62 378.70 432.32 379.37 455.00 378.74 C 504.35 378.92 553.69 378.31 603.05 378.50 M 348.01 411.51 C 320.98 411.52 293.95 411.45 266.93 411.54 C 256.91 412.17 246.82 411.10 236.84 412.46 C 208.12 415.88 181.14 430.38 161.51 451.48 C 144.71 469.43 133.29 492.57 130.42 517.07 C 124.64 554.31 138.80 593.31 165.32 619.73 C 177.83 632.43 193.39 641.88 210.05 648.05 C 228.40 654.56 248.11 655.87 267.42 655.59 C 319.94 655.19 372.45 655.94 424.97 655.75 C 450.32 655.57 475.67 656.17 501.02 656.00 C 525.32 656.12 549.63 655.73 573.92 656.26 C 626.62 656.05 679.30 656.63 732.00 656.50 C 732.00 574.50 732.00 492.50 732.00 410.51 C 689.66 410.38 647.34 410.94 605.01 410.75 C 587.68 410.55 570.37 411.13 553.05 411.00 C 526.36 411.00 499.67 411.01 472.98 411.00 C 431.33 411.69 389.65 410.81 348.01 411.51 M 764.49 464.27 C 764.51 510.42 764.51 556.58 764.49 602.73 C 822.24 602.77 879.99 602.74 937.74 602.75 C 938.25 556.59 937.90 510.41 937.99 464.25 C 880.16 464.27 822.32 464.23 764.49 464.27 Z"}),Object($.jsx)("path",{fill:t||a,opacity:"1.00",d:" M 842.49 484.02 C 853.57 483.79 864.63 484.32 875.71 484.25 C 876.25 495.35 875.68 506.46 875.04 517.54 C 864.40 517.59 853.77 516.92 843.13 517.38 C 842.74 516.32 842.40 515.20 842.48 514.06 C 842.50 504.04 842.50 494.03 842.49 484.02 Z"}),Object($.jsx)("path",{fill:t||a,opacity:"1.00",d:" M 287.02 517.49 C 345.02 517.51 403.02 517.49 461.02 517.50 C 499.18 517.57 537.34 517.29 575.49 517.75 C 575.51 528.25 575.51 538.75 575.49 549.25 C 531.01 549.74 486.52 549.41 442.04 549.50 C 390.37 549.51 338.69 549.49 287.02 549.51 C 286.99 538.84 286.99 528.16 287.02 517.49 Z"}),Object($.jsx)("path",{fill:t||a,opacity:"1.00",d:" M 842.78 549.74 C 853.53 549.91 864.26 549.51 875.01 549.44 C 875.73 560.52 876.27 571.65 875.71 582.75 C 864.63 582.80 853.57 583.17 842.49 582.99 C 842.69 571.91 842.12 560.80 842.78 549.74 Z"})]})},ee=function(e){var t=e.color,n=e.width,a=Object(Y.a)().palette.primary.main;return Object($.jsxs)("svg",{width:n||"100%",height:"100%",viewBox:"13.928732872009277 69.97769927978516 172.15252685546875 60.067893981933594",version:"1.1",xmlns:"http://www.w3.org/2000/svg",children:[Object($.jsx)("path",{fill:t||a,opacity:"1.00",d:" M 18.20 70.32 C 19.46 70.07 20.73 69.96 22.01 69.98 C 74.36 70.03 126.72 69.97 179.08 70.01 C 182.16 69.72 185.50 71.74 185.82 74.99 C 186.15 79.61 186.20 84.29 185.78 88.91 C 183.66 90.31 179.87 90.73 180.00 93.99 C 179.86 97.27 183.68 97.69 185.79 99.12 C 186.27 107.07 185.91 115.06 185.99 123.03 C 186.29 126.14 184.25 129.52 180.97 129.83 C 175.33 130.27 169.65 129.88 164.00 130.00 C 147.71 129.85 131.39 130.31 115.12 129.78 C 112.92 127.53 114.51 123.74 113.95 120.86 C 114.67 118.55 111.27 116.64 110.24 119.19 C 109.73 122.42 110.24 125.71 109.79 128.95 C 108.65 130.43 106.57 129.83 104.96 130.03 C 76.94 129.95 48.93 130.04 20.91 129.99 C 17.47 130.37 13.95 127.70 14.07 124.10 C 14.02 115.76 13.75 107.39 14.22 99.07 C 16.33 97.68 20.10 97.27 20.00 94.03 C 20.17 90.71 16.28 90.35 14.20 88.85 C 13.80 84.56 13.92 80.24 14.07 75.94 C 14.03 73.43 15.75 70.97 18.20 70.32 M 18.23 75.15 C 17.73 78.78 18.05 82.46 18.02 86.11 C 21.05 87.67 24.20 90.21 23.99 94.00 C 24.20 97.79 21.03 100.31 18.01 101.89 C 18.15 109.55 17.67 117.24 18.22 124.87 C 18.45 125.10 18.90 125.56 19.13 125.78 C 26.06 126.33 33.03 125.84 39.98 126.00 C 39.99 123.36 40.01 120.72 40.09 118.08 C 62.07 117.87 84.05 118.10 106.03 117.96 C 107.62 116.17 109.32 113.83 112.02 114.00 C 114.70 113.85 116.37 116.19 117.96 117.96 C 131.94 118.09 145.93 117.88 159.91 118.08 C 159.98 120.72 160.01 123.36 160.02 126.00 C 166.94 125.83 173.90 126.34 180.80 125.78 C 181.05 125.57 181.54 125.14 181.78 124.93 C 182.32 117.28 181.85 109.57 181.99 101.90 C 178.96 100.31 175.78 97.79 176.01 93.99 C 175.79 90.20 178.94 87.66 181.98 86.11 C 181.94 82.47 182.27 78.80 181.77 75.19 C 181.16 73.66 179.34 74.17 178.06 73.99 C 126.04 74.00 74.01 74.01 21.99 73.99 C 20.69 74.16 18.91 73.67 18.23 75.15 M 42.00 120.00 C 42.00 122.00 42.00 124.00 42.00 126.00 C 43.33 126.00 44.67 126.00 46.00 126.00 C 46.00 124.00 46.00 122.00 46.00 120.00 C 44.67 120.00 43.33 120.00 42.00 120.00 M 48.00 120.00 C 48.00 122.00 48.00 124.00 48.00 126.00 C 49.33 126.00 50.67 126.00 52.00 126.00 C 52.00 124.00 52.00 122.00 52.00 120.00 C 50.67 120.00 49.33 120.00 48.00 120.00 M 54.00 120.00 C 54.00 122.00 54.00 124.00 54.00 126.00 C 55.33 126.00 56.67 126.00 58.00 126.00 C 58.00 124.00 58.00 122.00 58.00 120.00 C 56.67 120.00 55.33 120.00 54.00 120.00 M 60.00 120.00 C 60.00 122.00 60.00 124.00 60.00 126.00 C 61.33 126.00 62.67 126.00 64.00 126.00 C 64.00 124.00 64.00 122.00 64.00 120.00 C 62.67 120.00 61.33 120.00 60.00 120.00 M 66.00 120.00 C 66.00 122.00 66.00 124.00 66.00 126.00 C 67.33 126.00 68.67 126.00 70.00 126.00 C 70.00 124.00 70.00 122.00 70.00 120.00 C 68.67 120.00 67.33 120.00 66.00 120.00 M 72.00 120.00 C 72.00 122.00 72.00 124.00 72.00 126.00 C 73.33 126.00 74.67 126.00 76.00 126.00 C 76.00 124.00 76.00 122.00 76.00 120.00 C 74.67 120.00 73.33 120.00 72.00 120.00 M 78.00 120.00 C 78.00 122.00 78.00 124.00 78.00 126.00 C 79.33 126.00 80.67 126.00 82.00 126.00 C 82.00 124.00 82.00 122.00 82.00 120.00 C 80.67 120.00 79.33 120.00 78.00 120.00 M 84.00 120.00 C 84.00 122.00 84.00 124.00 84.00 126.00 C 85.33 126.00 86.67 126.00 88.00 126.00 C 88.00 124.00 88.00 122.00 88.00 120.00 C 86.67 120.00 85.33 120.00 84.00 120.00 M 90.00 120.00 C 90.00 122.00 90.00 124.00 90.00 126.00 C 91.33 126.00 92.67 126.00 94.00 126.00 C 94.00 124.00 94.00 122.00 94.00 120.00 C 92.67 120.00 91.33 120.00 90.00 120.00 M 96.00 120.00 C 96.00 122.00 96.00 124.00 96.00 126.00 C 97.33 126.00 98.67 126.00 100.00 126.00 C 100.00 124.00 100.00 122.00 100.00 120.00 C 98.67 120.00 97.33 120.00 96.00 120.00 M 102.00 120.00 C 102.00 122.00 102.00 124.00 102.00 126.00 C 103.33 126.00 104.67 126.00 106.00 126.00 C 106.00 124.00 106.00 122.00 106.00 120.00 C 104.67 120.00 103.33 120.00 102.00 120.00 M 118.00 120.00 C 118.00 122.00 118.00 124.00 118.00 126.00 C 119.33 126.00 120.67 126.00 122.00 126.00 C 122.00 124.00 122.00 122.00 122.00 120.00 C 120.67 120.00 119.33 120.00 118.00 120.00 M 124.00 120.00 C 124.00 122.00 124.00 124.00 124.00 126.00 C 125.33 126.00 126.67 126.00 128.00 126.00 C 128.00 124.00 128.00 122.00 128.00 120.00 C 126.67 120.00 125.33 120.00 124.00 120.00 M 130.00 120.00 C 130.00 122.00 130.00 124.00 130.00 126.00 C 131.33 126.00 132.67 126.00 134.00 126.00 C 134.00 124.00 134.00 122.00 134.00 120.00 C 132.67 120.00 131.33 120.00 130.00 120.00 M 136.00 120.00 C 136.00 122.00 136.00 124.00 136.00 126.00 C 137.33 126.00 138.67 126.00 140.00 126.00 C 140.00 124.00 140.00 122.00 140.00 120.00 C 138.67 120.00 137.33 120.00 136.00 120.00 M 142.00 120.00 C 142.00 122.00 142.00 124.00 142.00 126.00 C 143.33 126.00 144.66 126.00 146.00 126.00 C 146.00 124.00 146.00 122.00 146.00 120.00 C 144.67 120.00 143.33 120.00 142.00 120.00 M 148.00 120.00 C 148.00 122.00 148.00 124.00 148.00 126.00 C 149.33 126.00 150.66 126.00 152.00 126.00 C 152.00 124.00 152.00 122.00 152.00 120.00 C 150.67 120.00 149.33 120.00 148.00 120.00 M 154.00 120.00 C 154.00 122.00 154.00 124.00 154.00 126.00 C 155.33 126.00 156.66 126.00 158.00 126.00 C 158.00 124.00 158.00 122.00 158.00 120.00 C 156.67 120.00 155.33 120.00 154.00 120.00 Z"}),Object($.jsx)("path",{fill:t||a,opacity:"1.00",d:" M 30.03 81.93 C 29.85 80.12 30.82 77.95 32.93 78.11 C 37.91 77.93 42.93 77.74 47.89 78.25 C 50.98 79.21 49.68 83.33 50.10 85.77 C 49.59 85.78 48.57 85.80 48.06 85.80 C 48.01 83.89 47.96 81.98 47.90 80.08 C 42.62 79.96 37.35 79.96 32.08 80.08 C 31.95 89.36 31.95 98.64 32.08 107.91 C 37.36 108.05 42.64 108.05 47.92 107.91 C 48.02 104.01 48.01 100.11 48.02 96.21 C 48.51 96.21 49.48 96.21 49.97 96.20 C 49.93 100.09 50.29 104.01 49.76 107.87 C 49.40 110.05 46.77 109.95 45.09 110.01 C 40.74 109.96 36.36 110.29 32.04 109.74 C 29.91 109.31 30.07 106.74 29.99 105.08 C 30.02 97.37 29.93 89.65 30.03 81.93 Z"}),Object($.jsx)("path",{fill:t||a,opacity:"1.00",d:" M 56.08 78.25 C 61.33 77.80 66.67 77.79 71.92 78.25 C 74.45 78.84 73.88 82.03 74.03 83.96 C 73.88 91.66 74.20 99.37 73.89 107.07 C 73.99 110.35 68.80 111.17 67.40 108.44 C 68.91 108.19 70.43 107.96 71.95 107.75 C 72.01 98.53 72.08 89.30 71.91 80.08 C 66.64 79.96 61.36 79.96 56.08 80.08 C 55.95 89.35 55.95 98.63 56.08 107.90 C 58.65 107.98 61.23 108.01 63.80 108.04 C 63.80 108.54 63.78 109.52 63.78 110.02 C 60.75 109.51 55.74 111.45 54.25 107.89 C 53.63 99.96 54.19 91.96 53.97 84.00 C 54.13 82.06 53.53 78.84 56.08 78.25 Z"}),Object($.jsx)("path",{fill:t||a,opacity:"1.00",d:" M 79.38 78.49 C 84.51 77.49 89.88 78.03 95.10 78.12 C 97.17 77.98 98.14 80.11 97.97 81.89 C 98.04 89.96 98.04 98.04 97.97 106.11 C 98.13 107.87 97.20 109.99 95.14 109.88 C 90.11 110.08 85.02 110.27 80.01 109.73 C 77.91 109.26 78.05 106.71 77.99 105.04 C 77.99 97.70 77.99 90.35 77.99 83.01 C 78.12 81.47 77.82 79.41 79.38 78.49 M 80.08 80.08 C 79.95 89.36 79.95 98.64 80.08 107.92 C 85.36 108.04 90.64 108.04 95.92 107.92 C 96.05 98.64 96.05 89.36 95.92 80.08 C 90.64 79.96 85.36 79.96 80.08 80.08 Z"}),Object($.jsx)("path",{fill:t||a,opacity:"1.00",d:" M 103.34 78.52 C 108.47 77.46 113.88 78.05 119.12 78.12 C 121.20 77.99 122.14 80.13 121.97 81.91 C 122.04 89.97 122.04 98.04 121.97 106.10 C 122.14 107.87 121.19 110.00 119.12 109.88 C 114.37 110.13 109.59 110.13 104.85 109.88 C 102.80 109.99 101.86 107.88 102.03 106.13 C 101.92 98.40 102.03 90.66 101.99 82.93 C 102.13 81.44 101.84 79.43 103.34 78.52 M 104.08 80.08 C 103.95 89.36 103.95 98.64 104.08 107.92 C 109.36 108.05 114.64 108.04 119.92 107.92 C 120.06 98.64 120.05 89.36 119.92 80.08 C 114.64 79.96 109.36 79.95 104.08 80.08 Z"}),Object($.jsx)("path",{fill:t||a,opacity:"1.00",d:" M 127.43 78.45 C 131.88 77.51 136.52 78.12 141.04 77.99 C 143.01 77.87 145.98 78.22 145.88 80.86 C 146.19 88.89 145.92 96.94 146.01 104.98 C 145.93 106.67 146.12 109.28 143.96 109.74 C 141.40 110.19 138.79 109.99 136.21 110.02 C 136.21 109.52 136.21 108.53 136.21 108.04 C 138.78 108.01 141.35 107.98 143.92 107.91 C 144.05 98.63 144.06 89.35 143.92 80.08 C 138.64 79.96 133.36 79.96 128.09 80.08 C 128.02 82.64 127.99 85.21 127.96 87.78 C 127.47 87.79 126.48 87.79 125.99 87.79 C 126.38 84.77 124.90 80.72 127.43 78.45 Z"}),Object($.jsx)("path",{fill:t||a,opacity:"1.00",d:" M 151.38 78.48 C 155.82 77.48 160.48 78.14 165.01 77.99 C 167.01 77.85 170.02 78.25 169.89 80.92 C 170.18 88.94 169.92 96.98 170.01 105.01 C 170.13 107.00 169.77 109.99 167.12 109.88 C 162.10 110.07 157.02 110.27 152.02 109.74 C 149.89 109.27 150.05 106.67 149.99 104.99 C 149.99 97.64 149.99 90.30 149.99 82.95 C 150.12 81.43 149.84 79.39 151.38 78.48 M 152.08 80.08 C 151.95 89.36 151.95 98.64 152.08 107.92 C 157.36 108.04 162.64 108.04 167.92 107.92 C 168.05 98.64 168.05 89.36 167.92 80.08 C 162.64 79.96 157.36 79.96 152.08 80.08 Z"}),Object($.jsx)("path",{fill:t||a,opacity:"1.00",d:" M 48.01 88.19 C 48.50 88.19 49.49 88.19 49.99 88.19 C 49.98 90.06 49.98 91.92 49.99 93.78 C 49.49 93.79 48.51 93.79 48.01 93.79 C 48.01 91.92 48.01 90.06 48.01 88.19 Z"}),Object($.jsx)("path",{fill:t||a,opacity:"1.00",d:" M 126.01 92.19 C 126.51 92.19 127.49 92.19 127.99 92.19 C 127.98 94.06 127.98 95.93 127.98 97.80 C 127.49 97.79 126.50 97.78 126.01 97.78 C 126.01 95.91 126.01 94.05 126.01 92.19 Z"}),Object($.jsx)("path",{fill:t||a,opacity:"1.00",d:" M 125.98 100.19 C 126.48 100.19 127.47 100.19 127.96 100.19 C 127.99 102.75 128.02 105.32 128.08 107.88 C 129.98 107.95 131.89 108.01 133.81 108.07 C 133.80 108.57 133.78 109.59 133.77 110.10 C 131.39 109.71 128.07 110.79 126.45 108.53 C 125.66 105.83 126.07 102.96 125.98 100.19 Z"}),Object($.jsx)("path",{fill:t||a,opacity:"1.00",d:" M 24.41 112.66 C 27.59 110.67 32.28 113.20 32.00 117.04 C 32.18 120.52 28.24 123.02 25.11 121.66 C 21.33 120.42 20.93 114.50 24.41 112.66 M 26.15 114.12 C 24.25 114.47 23.50 116.93 24.38 118.50 C 25.45 120.81 29.45 120.37 29.89 117.81 C 30.58 115.59 28.37 113.39 26.15 114.12 Z"}),Object($.jsx)("path",{fill:t||a,opacity:"1.00",d:" M 170.48 112.62 C 173.67 110.70 178.29 113.25 178.00 117.06 C 178.16 120.55 174.19 123.04 171.06 121.64 C 167.28 120.35 166.95 114.41 170.48 112.62 M 172.11 114.13 C 169.72 114.60 169.28 118.30 171.30 119.51 C 173.13 120.90 176.17 119.39 175.97 117.02 C 176.16 114.97 173.98 113.54 172.11 114.13 Z"})]})},te=function(){var e=Object(Y.a)().palette.primary.main,t="#00a572"===e?"#74c39c":"#4a5255";return Object($.jsxs)("svg",{width:"150px",height:"150px",viewBox:"0 0 512 512",version:"1.1",xmlns:"http://www.w3.org/2000/svg",children:[Object($.jsxs)("g",{id:e,children:[Object($.jsx)("path",{fill:e,opacity:"1.00",d:" M 102.41 0.00 L 319.87 0.00 C 320.21 29.68 319.87 59.37 320.04 89.05 C 320.29 97.32 323.88 105.47 329.94 111.12 C 336.01 117.07 344.56 120.18 353.01 120.01 C 382.02 119.87 411.04 120.22 440.05 119.83 C 439.94 236.88 440.04 353.93 440.00 470.98 C 440.01 478.16 440.50 485.68 437.47 492.41 C 432.79 503.85 421.05 511.80 408.71 512.00 L 103.28 512.00 C 90.95 511.79 79.20 503.84 74.53 492.42 C 72.06 486.96 71.87 480.87 71.99 474.97 C 72.01 327.63 71.99 180.30 72.00 32.96 C 71.95 27.61 73.03 22.22 75.52 17.46 C 80.55 7.39 91.19 0.57 102.41 0.00 M 360.00 382.07 C 358.69 383.73 359.01 385.99 358.90 387.97 C 358.95 396.36 358.91 404.75 358.93 413.14 C 352.50 403.51 346.13 393.83 339.77 384.16 C 338.65 382.47 337.13 380.65 334.92 380.63 C 331.97 380.41 329.13 382.87 329.22 385.89 C 328.94 396.58 329.24 407.28 329.08 417.98 C 329.14 420.43 328.85 422.98 329.54 425.38 C 330.75 429.14 337.11 428.63 337.54 424.63 C 338.19 415.09 337.55 405.51 337.83 395.95 C 343.71 404.78 349.41 413.73 355.26 422.58 C 356.92 424.93 358.74 427.96 362.00 428.00 C 365.02 428.51 367.54 425.83 367.40 422.90 C 367.55 411.27 367.39 399.62 367.48 387.99 C 367.40 386.11 367.63 384.06 366.61 382.38 C 365.24 380.16 361.58 380.00 360.00 382.07 M 100.79 382.81 C 98.94 384.82 100.19 388.63 103.01 388.89 C 106.91 389.29 110.85 388.97 114.77 389.07 C 114.77 399.73 114.78 410.39 114.75 421.05 C 114.76 423.37 114.89 426.34 117.28 427.52 C 119.95 429.02 123.67 427.14 123.86 424.04 C 124.22 412.40 123.84 400.72 124.04 389.07 C 128.25 388.87 132.57 389.54 136.71 388.62 C 140.15 387.40 139.25 381.72 135.61 381.56 C 126.10 381.14 116.55 381.57 107.03 381.37 C 104.95 381.53 102.34 381.06 100.79 382.81 M 156.46 381.58 C 150.26 383.15 145.11 388.05 143.12 394.11 C 140.49 401.86 140.79 410.83 144.81 418.06 C 151.07 429.05 167.20 430.79 177.27 424.26 C 183.48 420.06 186.24 412.28 186.28 405.03 C 186.43 398.11 184.59 390.56 179.19 385.85 C 173.03 380.52 164.12 379.62 156.46 381.58 M 197.74 381.67 C 195.24 381.99 194.12 384.61 194.23 386.87 C 194.06 397.92 194.27 408.97 194.15 420.02 C 194.24 422.43 193.92 425.36 195.97 427.11 C 198.62 429.25 203.28 427.47 203.31 423.89 C 203.66 418.45 203.32 412.99 203.49 407.54 C 206.76 407.72 210.68 407.24 213.15 409.89 C 217.60 414.61 220.01 420.80 223.85 425.97 C 225.63 428.66 230.20 428.72 231.83 425.86 C 232.87 424.27 231.80 422.43 231.24 420.89 C 228.63 415.38 225.17 409.99 220.02 406.56 C 223.42 405.53 227.11 404.31 229.29 401.31 C 233.14 395.94 231.83 387.34 226.14 383.76 C 221.99 381.01 216.77 381.52 212.04 381.39 C 207.28 381.52 202.48 381.08 197.74 381.67 M 240.23 386.91 C 240.19 398.28 240.20 409.66 240.22 421.03 C 240.25 423.12 240.14 425.65 241.97 427.09 C 244.58 429.23 249.25 427.52 249.33 423.98 C 249.76 418.50 249.34 413.00 249.49 407.51 C 252.77 407.64 256.62 407.29 259.13 409.85 C 263.88 414.69 266.10 421.38 270.41 426.55 C 272.74 429.20 278.48 428.00 278.28 424.04 C 276.28 417.09 271.87 410.81 266.09 406.46 C 269.75 405.55 273.64 404.05 275.74 400.71 C 278.91 395.49 277.81 387.82 272.73 384.18 C 268.85 381.14 263.64 381.44 259.00 381.41 C 254.02 381.52 249.02 381.13 244.05 381.58 C 241.41 381.77 240.05 384.51 240.23 386.91 M 286.38 386.01 C 286.17 397.35 286.39 408.70 286.27 420.04 C 286.31 422.30 286.17 425.31 288.52 426.53 C 291.20 427.60 294.20 427.07 297.03 427.21 C 304.36 427.04 311.73 427.52 319.04 426.95 C 322.44 426.37 322.43 420.75 319.05 420.15 C 311.25 419.44 303.38 420.13 295.56 419.82 C 295.59 415.47 295.58 411.12 295.58 406.78 C 302.60 406.71 309.65 407.09 316.66 406.54 C 320.07 405.84 319.57 399.91 315.98 399.96 C 309.20 399.54 302.39 399.95 295.59 399.80 C 295.57 396.05 295.57 392.30 295.58 388.55 C 303.03 388.43 310.50 388.74 317.94 388.37 C 321.67 388.25 321.80 381.95 318.11 381.66 C 309.41 381.03 300.65 381.57 291.93 381.42 C 289.16 381.15 286.27 383.00 286.38 386.01 M 375.06 381.95 C 372.19 383.34 372.77 388.27 375.95 388.84 C 379.96 389.33 384.02 388.96 388.05 389.08 C 387.92 400.08 388.05 411.07 387.99 422.07 C 387.75 424.61 389.07 427.71 391.95 427.92 C 394.85 428.51 397.33 425.86 397.14 423.05 C 397.37 411.73 397.16 400.40 397.23 389.08 C 401.42 388.89 405.69 389.52 409.82 388.64 C 413.41 387.46 412.48 381.48 408.64 381.52 C 400.79 381.23 392.93 381.50 385.08 381.39 C 381.74 381.50 378.31 381.05 375.06 381.95 Z"}),Object($.jsx)("path",{fill:e,opacity:"1.00",d:" M 160.39 388.45 C 164.79 387.33 170.01 388.38 173.03 391.97 C 176.12 395.52 177.00 400.46 176.87 405.04 C 176.76 409.47 175.56 414.16 172.29 417.34 C 167.50 421.98 158.82 421.68 154.58 416.43 C 150.59 411.44 150.26 404.45 151.51 398.43 C 152.46 393.85 155.68 389.57 160.39 388.45 Z"}),Object($.jsx)("path",{fill:e,opacity:"1.00",d:" M 203.47 388.42 C 208.28 388.55 213.18 387.93 217.93 388.93 C 222.82 390.10 223.71 398.14 218.81 399.89 C 213.88 401.57 208.52 400.89 203.40 400.90 C 203.44 396.73 203.45 392.57 203.47 388.42 Z"}),Object($.jsx)("path",{fill:e,opacity:"1.00",d:" M 249.45 388.38 C 254.29 388.56 259.22 387.96 264.00 388.94 C 268.52 390.07 269.67 397.04 265.66 399.44 C 260.63 401.83 254.85 400.80 249.47 400.94 C 249.51 396.75 249.48 392.57 249.45 388.38 Z"})]}),Object($.jsx)("g",{id:t,children:Object($.jsx)("path",{fill:t,opacity:"1.00",d:" M 319.87 0.00 L 320.20 0.00 C 360.20 39.89 400.19 79.79 440.05 119.83 C 411.04 120.22 382.02 119.87 353.01 120.01 C 344.56 120.18 336.01 117.07 329.94 111.12 C 323.88 105.47 320.29 97.32 320.04 89.05 C 319.87 59.37 320.21 29.68 319.87 0.00 Z"})}),Object($.jsxs)("g",{id:"#fdfdfd",children:[Object($.jsx)("path",{fill:"#fdfdfd",opacity:"1.00",d:" M 360.00 382.07 C 361.58 380.00 365.24 380.16 366.61 382.38 C 367.63 384.06 367.40 386.11 367.48 387.99 C 367.39 399.62 367.55 411.27 367.40 422.90 C 367.54 425.83 365.02 428.51 362.00 428.00 C 358.74 427.96 356.92 424.93 355.26 422.58 C 349.41 413.73 343.71 404.78 337.83 395.95 C 337.55 405.51 338.19 415.09 337.54 424.63 C 337.11 428.63 330.75 429.14 329.54 425.38 C 328.85 422.98 329.14 420.43 329.08 417.98 C 329.24 407.28 328.94 396.58 329.22 385.89 C 329.13 382.87 331.97 380.41 334.92 380.63 C 337.13 380.65 338.65 382.47 339.77 384.16 C 346.13 393.83 352.50 403.51 358.93 413.14 C 358.91 404.75 358.95 396.36 358.90 387.97 C 359.01 385.99 358.69 383.73 360.00 382.07 Z"}),Object($.jsx)("path",{fill:"#fdfdfd",opacity:"1.00",d:" M 100.79 382.81 C 102.34 381.06 104.95 381.53 107.03 381.37 C 116.55 381.57 126.10 381.14 135.61 381.56 C 139.25 381.72 140.15 387.40 136.71 388.62 C 132.57 389.54 128.25 388.87 124.04 389.07 C 123.84 400.72 124.22 412.40 123.86 424.04 C 123.67 427.14 119.95 429.02 117.28 427.52 C 114.89 426.34 114.76 423.37 114.75 421.05 C 114.78 410.39 114.77 399.73 114.77 389.07 C 110.85 388.97 106.91 389.29 103.01 388.89 C 100.19 388.63 98.94 384.82 100.79 382.81 Z"}),Object($.jsx)("path",{fill:"#fdfdfd",opacity:"1.00",d:" M 156.46 381.58 C 164.12 379.62 173.03 380.52 179.19 385.85 C 184.59 390.56 186.43 398.11 186.28 405.03 C 186.24 412.28 183.48 420.06 177.27 424.26 C 167.20 430.79 151.07 429.05 144.81 418.06 C 140.79 410.83 140.49 401.86 143.12 394.11 C 145.11 388.05 150.26 383.15 156.46 381.58 M 160.39 388.45 C 155.68 389.57 152.46 393.85 151.51 398.43 C 150.26 404.45 150.59 411.44 154.58 416.43 C 158.82 421.68 167.50 421.98 172.29 417.34 C 175.56 414.16 176.76 409.47 176.87 405.04 C 177.00 400.46 176.12 395.52 173.03 391.97 C 170.01 388.38 164.79 387.33 160.39 388.45 Z"}),Object($.jsx)("path",{fill:"#fdfdfd",opacity:"1.00",d:" M 197.74 381.67 C 202.48 381.08 207.28 381.52 212.04 381.39 C 216.77 381.52 221.99 381.01 226.14 383.76 C 231.83 387.34 233.14 395.94 229.29 401.31 C 227.11 404.31 223.42 405.53 220.02 406.56 C 225.17 409.99 228.63 415.38 231.24 420.89 C 231.80 422.43 232.87 424.27 231.83 425.86 C 230.20 428.72 225.63 428.66 223.85 425.97 C 220.01 420.80 217.60 414.61 213.15 409.89 C 210.68 407.24 206.76 407.72 203.49 407.54 C 203.32 412.99 203.66 418.45 203.31 423.89 C 203.28 427.47 198.62 429.25 195.97 427.11 C 193.92 425.36 194.24 422.43 194.15 420.02 C 194.27 408.97 194.06 397.92 194.23 386.87 C 194.12 384.61 195.24 381.99 197.74 381.67 M 203.47 388.42 C 203.45 392.57 203.44 396.73 203.40 400.90 C 208.52 400.89 213.88 401.57 218.81 399.89 C 223.71 398.14 222.82 390.10 217.93 388.93 C 213.18 387.93 208.28 388.55 203.47 388.42 Z"}),Object($.jsx)("path",{fill:"#fdfdfd",opacity:"1.00",d:" M 240.23 386.91 C 240.05 384.51 241.41 381.77 244.05 381.58 C 249.02 381.13 254.02 381.52 259.00 381.41 C 263.64 381.44 268.85 381.14 272.73 384.18 C 277.81 387.82 278.91 395.49 275.74 400.71 C 273.64 404.05 269.75 405.55 266.09 406.46 C 271.87 410.81 276.28 417.09 278.28 424.04 C 278.48 428.00 272.74 429.20 270.41 426.55 C 266.10 421.38 263.88 414.69 259.13 409.85 C 256.62 407.29 252.77 407.64 249.49 407.51 C 249.34 413.00 249.76 418.50 249.33 423.98 C 249.25 427.52 244.58 429.23 241.97 427.09 C 240.14 425.65 240.25 423.12 240.22 421.03 C 240.20 409.66 240.19 398.28 240.23 386.91 M 249.45 388.38 C 249.48 392.57 249.51 396.75 249.47 400.94 C 254.85 400.80 260.63 401.83 265.66 399.44 C 269.67 397.04 268.52 390.07 264.00 388.94 C 259.22 387.96 254.29 388.56 249.45 388.38 Z"}),Object($.jsx)("path",{fill:"#fdfdfd",opacity:"1.00",d:" M 286.38 386.01 C 286.27 383.00 289.16 381.15 291.93 381.42 C 300.65 381.57 309.41 381.03 318.11 381.66 C 321.80 381.95 321.67 388.25 317.94 388.37 C 310.50 388.74 303.03 388.43 295.58 388.55 C 295.57 392.30 295.57 396.05 295.59 399.80 C 302.39 399.95 309.20 399.54 315.98 399.96 C 319.57 399.91 320.07 405.84 316.66 406.54 C 309.65 407.09 302.60 406.71 295.58 406.78 C 295.58 411.12 295.59 415.47 295.56 419.82 C 303.38 420.13 311.25 419.44 319.05 420.15 C 322.43 420.75 322.44 426.37 319.04 426.95 C 311.73 427.52 304.36 427.04 297.03 427.21 C 294.20 427.07 291.20 427.60 288.52 426.53 C 286.17 425.31 286.31 422.30 286.27 420.04 C 286.39 408.70 286.17 397.35 286.38 386.01 Z"}),Object($.jsx)("path",{fill:"#fdfdfd",opacity:"1.00",d:" M 375.06 381.95 C 378.31 381.05 381.74 381.50 385.08 381.39 C 392.93 381.50 400.79 381.23 408.64 381.52 C 412.48 381.48 413.41 387.46 409.82 388.64 C 405.69 389.52 401.42 388.89 397.23 389.08 C 397.16 400.40 397.37 411.73 397.14 423.05 C 397.33 425.86 394.85 428.51 391.95 427.92 C 389.07 427.71 387.75 424.61 387.99 422.07 C 388.05 411.07 387.92 400.08 388.05 389.08 C 384.02 388.96 379.96 389.33 375.95 388.84 C 372.77 388.27 372.19 383.34 375.06 381.95 Z"})]})]})},ne=n(387),ae=n(442),re=n(24),ie=n.n(re),oe=n(441),ce=n(484),le=function(e){var t=Object(a.useState)({}),n=Object(l.a)(t,2),r=n[0],i=n[1],o=Object(a.useRef)(!0),c=Object(a.useRef)(null);return Object(a.useEffect)((function(){return function(){o.current=!1}}),[]),Object(a.useEffect)((function(){return e?c.current=setInterval((function(){var t=function(e){return o.current&&i(e)};P.a.post("".concat(C,"/cache"),{action:"get",hash:e}).then((function(e){var n=e.data;return t(n)})).catch((function(){return t({})}))}),100):clearInterval(c.current),function(){return clearInterval(c.current)}}),[e]),r},se=n(428),de=n(430),pe=n(431),je=n(106),be=n.n(je),ue=n(432),he=Object(se.a)({appBar:{position:"relative"},title:{marginLeft:"6px",flex:1}});function xe(e){var t=e.title,n=e.onClose,a=e.onBack,r=Object(ce.a)().t,i=he();return Object($.jsx)(de.a,{className:i.appBar,children:Object($.jsxs)(pe.a,{children:[Object($.jsx)(p.a,{edge:"start",color:"inherit",onClick:a||n,"aria-label":"close",children:a?Object($.jsx)(ue.a,{}):Object($.jsx)(be.a,{})}),Object($.jsx)(d.a,{variant:"h6",className:i.title,children:t}),a&&Object($.jsx)(ne.a,{autoFocus:!0,color:"inherit",onClick:n,children:r("Close")})]})})}var ge,me,Oe,fe,Ce,ve,ye,we,Se,ke,De,Te=n(181),Pe=n(84),Me=n.n(Pe),Be=n(195),Re=n(433),Le=n(29),Ae={light:{app:{headerToggleColor:"#4db380",appSecondaryColor:"#cbe8d9",sidebarBGColor:"#575757",sidebarFillColor:"#dee3e5"},torrentCard:{accentCardColor:"#337a57",buttonBGColor:Object(Le.a)("#337a57",.5),cardPrimaryColor:"#00a572",cardSecondaryColor:"#74c39c"},dialogTorrentDetailsContent:{posterBGColor:"#74c39c",gradientStartColor:"#e4f6ed",gradientEndColor:"#b5dec9",chacheSectionBGColor:"#88cdaa",widgetFontColor:"#fff",titleFontColor:"#000",subNameFontColor:"#7c7b7c",torrentFilesSectionBGColor:"#f1eff3"},detailedView:{gradientStartColor:"#e4f6ed",gradientEndColor:"#b5dec9",cacheSectionBGColor:"#fff"},addDialog:{gradientStartColor:"#e4f6ed",gradientEndColor:"#b5dec9",fontColor:"#000",notificationErrorBGColor:"#cda184",notificationSuccessBGColor:"#88cdaa",languageSwitchBGColor:"#74c39c",languageSwitchFontColor:"#e4f6ed",posterBGColor:"#74c39c"},torrentFunctions:{fontColor:"#000"},table:{defaultPrimaryColor:"#009879",defaultSecondaryColor:"#00a383",defaultTertiaryColor:"#03aa89"},settingsDialog:{contentBG:"#f1eff3",footerBG:"#fff"}},dark:{app:{headerToggleColor:"#545a5e",appSecondaryColor:"#545a5e",sidebarBGColor:"#323637",sidebarFillColor:"#dee3e5"},torrentCard:{accentCardColor:"#323637",buttonBGColor:Object(Le.a)("#323637",.5),cardPrimaryColor:"#545a5e",cardSecondaryColor:Object(Le.a)("#dee3e5",.4)},dialogTorrentDetailsContent:{posterBGColor:Object(Le.a)("#dee3e5",.4),gradientStartColor:"#656f76",gradientEndColor:"#545a5e",chacheSectionBGColor:"#3c4244",widgetFontColor:Object(Le.a)("#fff",.8),titleFontColor:"#f1eff3",subNameFontColor:"#dee3e5",torrentFilesSectionBGColor:Object(Le.a)("#545a5e",.9)},detailedView:{gradientStartColor:"#656f76",gradientEndColor:"#545a5e",cacheSectionBGColor:"#dee3e5"},addDialog:{gradientStartColor:"#656f76",gradientEndColor:"#545a5e",fontColor:"#fff",notificationErrorBGColor:"#c82e3f",notificationSuccessBGColor:"#323637",languageSwitchBGColor:"#545a5e",languageSwitchFontColor:"#dee3e5",posterBGColor:"#dee3e5"},torrentFunctions:{fontColor:"#f1eff3"},table:{defaultPrimaryColor:"#323637",defaultSecondaryColor:Object(Le.a)("#545a5e",.9),defaultTertiaryColor:"#545a5e"},settingsDialog:{contentBG:"#5a6166",footerBG:"#323637"}}},ze={light:{primary:"#00a572",secondary:"#00a572",labels:Object(Le.a)("#000",.9)},dark:{primary:"#323637",secondary:"#dee3e5",labels:Object(Le.a)("#fff",.9)}},Fe="light",Ee="dark",Ge="auto",Ne={fontFamily:"Open Sans, sans-serif"},Ie=(Object(Be.a)({typography:Ne,palette:{type:Ee,primary:{main:ze.dark.primary},secondary:{main:ze.dark.secondary}}}),Object(Be.a)({typography:Ne,palette:{type:Fe,primary:{main:ze.light.primary},secondary:{main:ze.light.secondary}}})),Ue=n(4),He=n(3),We={dark:{default:{borderWidth:2,pieceSize:14,gapBetweenPieces:3,borderColor:ze.dark.secondary,completeColor:Object(Le.a)(ze.dark.primary,.65),backgroundColor:"#f1eff3",progressColor:ze.dark.secondary,readerColor:"#000",rangeColor:"#cda184"},mini:{cacheMaxHeight:340,borderWidth:2,pieceSize:23,gapBetweenPieces:6,borderColor:"#545a5e",completeColor:"#545a5e",backgroundColor:"#dee3e5",progressColor:"#dee3e5",readerColor:"#000",rangeColor:"#cda184"}},light:{default:{borderWidth:1,pieceSize:14,gapBetweenPieces:3,borderColor:"#dbf2e8",completeColor:ze.light.primary,backgroundColor:"#fff",progressColor:"#b3dfc9",readerColor:"#000",rangeColor:"#afa6e3"},mini:{cacheMaxHeight:340,borderWidth:2,pieceSize:23,gapBetweenPieces:6,borderColor:"#4db380",completeColor:"#4db380",backgroundColor:"#dbf2e8",progressColor:"#dbf2e8",readerColor:"#2d714f",rangeColor:"#afa6e3"}}},Ve=He.d.div(ge||(ge=Object(Ue.a)(["\n margin-top: 10px;\n text-transform: uppercase;\n color: rgba(0, 0, 0, 0.5);\n align-self: center;\n"]))),Ze=He.d.div(me||(me=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.isMini,n=e.themeType;return Object(He.c)(Oe||(Oe=Object(Ue.a)(["\n ","\n\n canvas {\n display: block;\n }\n "])),t&&Object(He.c)(fe||(fe=Object(Ue.a)(["\n display: grid;\n justify-content: center;\n max-height: ","px;\n overflow: auto;\n "])),We[n].mini.cacheMaxHeight))})),_e=function(e){var t,n=e.cache,r=e.isMini,i=Object(ce.a)().t,o=Object(a.useState)({width:0,height:0}),c=Object(l.a)(o,2),s=c[0],d=c[1],p=s.width,j=Object(a.useRef)(null),b=Object(a.useRef)(null),u=function(e){var t=Object(a.useState)([]),n=Object(l.a)(t,2),r=n[0],i=n[1];return Object(a.useEffect)((function(){for(var t=e.PiecesCount,n=e.Pieces,a=e.Readers,r=[],o=function(e){var t=n[e]||{},i=t.Size,o=t.Length,c={id:e,percentage:i/o*100||0};a.forEach((function(t){e===t.Reader&&(c.isReader=!0),e>=t.Start&&e<=t.End&&(c.isReaderRange=!0)})),r.push(c)},c=0;c0})),i=function(e){return e%a===0?e-1:e+a-e%a-1||0},o=i(n),c=i(r.length),l=Math.max(c,o)-r.length+1,s=l?new Array(l).fill({}):[];return[].concat(Object(E.a)(r),Object(E.a)(s))}({cacheMap:u,preloadPiecesAmount:Math.round(n.Capacity/n.PiecesLength-1),piecesInOneRow:P}));var M=r?t:u,B=Math.ceil((D-T*P)/2),R=Math.ceil(M.length/P)*T;return Object(a.useEffect)((function(){if(D&&R){var e=j.current;e.width=D,e.height=R,b.current=e.getContext("2d")}}),[j,R,D]),Object(a.useEffect)((function(){var e=b.current;e&&(e.clearRect(0,0,D,R),M.forEach((function(t,n){var a=t.percentage,r=t.isReader,i=t.isReaderRange,o=a>0&&a<100,c=100===a,l=n%P,s=Math.floor(n/P),d=f%2===0?0:.5,p=Math.ceil(f/2)+1+d,j=l*C+l*v+B+p,b=s*C+s*v+p;e.lineWidth=f,e.fillStyle=o?function(e,t,n,a){var r=We[n][a],i=r.pieceSize,o=r.completeColor,c=r.progressColor,l=e.createLinearGradient(0,i,0,0);return l.addColorStop(0,o),l.addColorStop(t/100,o),l.addColorStop(t/100,c),l.addColorStop(1,c),l}(e,a,x,h):c?k:y,e.strokeStyle=r?m:o||c?k:i?O:w,e.translate(j,b),e.fillRect(0,0,C,C),e.strokeRect(0,0,C,C),e.setTransform(1,0,0,1,0,0)})))}),[u,R,D,P,B,C,v,M,y,w,f,h,k,m,O,x]),Object($.jsx)(Te.a,{bounds:!0,onResize:function(e){var t=e.bounds;return d(t)},children:function(e){var t=e.measureRef;return Object($.jsxs)("div",{style:{display:"flex",flexDirection:"column"},ref:t,children:[Object($.jsx)(Ze,{themeType:x,isMini:r,children:Object($.jsx)("canvas",{ref:j})}),r&&R>=S&&Object($.jsx)(Ve,{children:i("ScrollDown")})]})}})},Ke=Object(a.memo)(_e,(function(e,t){return Me()(e.cache.Pieces,t.cache.Pieces)&&Me()(e.cache.Readers,t.cache.Readers)})),Je=n(85),Ye=n.n(Je),$e="#bdbdbd",Xe=Object(He.c)(Ce||(Ce=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.theme.table.defaultPrimaryColor;return Object(He.c)(ve||(ve=Object(Ue.a)(["\n :before {\n content: '';\n width: 10px;\n height: 10px;\n background: ",";\n border-radius: 50%;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n "])),t)})),qe=He.d.table(ye||(ye=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.theme.table.defaultPrimaryColor;return Object(He.c)(we||(we=Object(Ue.a)(["\n border-collapse: collapse;\n margin: 25px 0;\n font-size: 0.9em;\n width: 100%;\n border-radius: 5px 5px 0 0;\n overflow: hidden;\n box-shadow: 0 0 20px rgba(0, 0, 0, 0.15);\n color: #000;\n\n thead tr {\n background: ",";\n color: #fff;\n text-align: left;\n text-transform: uppercase;\n }\n\n th,\n td {\n padding: 12px 15px;\n }\n\n tbody tr {\n border-bottom: 1px solid ",";\n background: ",";\n\n :last-of-type {\n border-bottom: 2px solid ",";\n }\n\n &.viewed-file-row {\n background: ",";\n }\n }\n\n td {\n &.viewed-file-indicator {\n position: relative;\n\n ","\n }\n }\n\n .button-cell {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 10px;\n }\n\n @media (max-width: 970px) {\n display: none;\n }\n "])),t,"#ddd","#fff",t,"#f3f3f3",Xe)})),Qe=He.d.div(Se||(Se=Object(Ue.a)(["\n display: grid;\n gap: 20px;\n grid-template-columns: repeat(2, 1fr);\n display: none;\n\n @media (max-width: 970px) {\n display: grid;\n }\n\n @media (max-width: 820px) {\n gap: 15px;\n grid-template-columns: 1fr;\n }\n"]))),et=He.d.div(ke||(ke=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.isViewed,n=e.theme.table,a=n.defaultPrimaryColor,r=n.defaultSecondaryColor,i=n.defaultTertiaryColor;return Object(He.c)(De||(De=Object(Ue.a)(["\n width: 100%;\n grid-template-rows: repeat(3, max-content);\n border-radius: 5px;\n overflow: hidden;\n box-shadow: 0 0 20px rgba(0, 0, 0, 0.15);\n\n .short-table {\n &-name {\n background: ",";\n display: grid;\n place-items: center;\n padding: 15px;\n color: #fff;\n text-transform: uppercase;\n font-size: 15px;\n font-weight: bold;\n\n @media (max-width: 880px) {\n font-size: 13px;\n padding: 10px;\n }\n }\n &-data {\n display: grid;\n grid-auto-flow: column;\n grid-template-columns: ",";\n grid-auto-columns: 1fr;\n }\n &-field {\n display: grid;\n grid-template-rows: 30px 1fr;\n background: black;\n :not(:last-child) {\n border-right: 1px solid ",";\n }\n\n &-name {\n background: ",";\n color: #fff;\n text-transform: uppercase;\n font-size: 12px;\n font-weight: 500;\n display: grid;\n place-items: center;\n padding: 0 10px;\n\n @media (max-width: 880px) {\n font-size: 11px;\n }\n }\n\n &-value {\n background: ",";\n display: grid;\n place-items: center;\n color: #fff;\n font-size: 15px;\n padding: 15px 10px;\n position: relative;\n\n @media (max-width: 880px) {\n font-size: 13px;\n padding: 12px 8px;\n }\n }\n }\n\n &-viewed-indicator {\n ","\n }\n\n &-buttons {\n padding: 20px;\n border-bottom: 2px solid ",";\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n align-items: center;\n gap: 20px;\n background: #fff;\n\n @media (max-width: 410px) {\n gap: 10px;\n grid-template-columns: 1fr;\n }\n }\n }\n "])),t?$e:a,t?"max-content":"1fr",t?$e:a,t?"#c4c4c4":r,t?"#c9c9c9":i,t&&Xe,t?$e:a)})),tt=n(0).memo;ie.a.addHandler("episode",/(\d{1,4})[- |. ]\u0441\u0435\u0440\u0438\u044f|\u0441\u0435\u0440\u0438\u044f[- |. ](\d{1,4})/i,{type:"integer"}),ie.a.addHandler("season",/sezon[- |. ](\d{1,3})|(\d{1,3})[- |. ]sezon/i,{type:"integer"}),ie.a.addHandler("season",/\u0441\u0435\u0437\u043e\u043d[- |. ](\d{1,3})|(\d{1,3})[- |. ]\u0441\u0435\u0437\u043e\u043d/i,{type:"integer"});var nt,at,rt,it,ot,ct,lt,st,dt,pt,jt,bt,ut,ht,xt,gt,mt,Ot,ft,Ct,vt,yt,wt,St,kt,Dt,Tt,Pt,Mt,Bt,Rt,Lt,At,zt,Ft,Et,Gt,Nt=tt((function(e){var t=e.playableFileList,n=e.viewedFileList,a=e.selectedSeason,r=e.seasonAmount,i=e.hash,o=Object(ce.a)().t,c=function(e){return fetch("".concat(S(),"?link=").concat(i,"&index=").concat(e,"&preload"))},l=function(e,t){return"".concat(S(),"/").concat(encodeURIComponent(e.split("\\").pop().split("/").pop()),"?link=").concat(i,"&index=").concat(t,"&play")},s=!!(null===t||void 0===t?void 0:t.find((function(e){var t=e.path;return ie.a.parse(t).episode}))),d=!!(null===t||void 0===t?void 0:t.find((function(e){var t=e.path;return ie.a.parse(t).season}))),p=!!(null===t||void 0===t?void 0:t.find((function(e){var t=e.path;return ie.a.parse(t).resolution}))),j=t.length>1&&!s;return(null===t||void 0===t?void 0:t.length)?Object($.jsxs)($.Fragment,{children:[Object($.jsxs)(qe,{children:[Object($.jsx)("thead",{children:Object($.jsxs)("tr",{children:[Object($.jsx)("th",{style:{width:"0"},children:o("Viewed")}),Object($.jsx)("th",{children:o("Name")}),d&&1===(null===r||void 0===r?void 0:r.length)&&Object($.jsx)("th",{style:{width:"0"},children:o("Season")}),s&&Object($.jsx)("th",{style:{width:"0"},children:o("Episode")}),p&&Object($.jsx)("th",{style:{width:"0"},children:o("Resolution")}),Object($.jsx)("th",{style:{width:"100px"},children:o("Size")}),Object($.jsx)("th",{style:{width:"400px"},children:o("Actions")})]})}),Object($.jsx)("tbody",{children:t.map((function(e){var t=e.id,i=e.path,b=e.length,u=ie.a.parse(i),h=u.title,x=u.resolution,g=u.episode,m=u.season,O=null===n||void 0===n?void 0:n.includes(t),f=l(i,t);return(m===a||!(null===r||void 0===r?void 0:r.length))&&Object($.jsxs)("tr",{className:O?"viewed-file-row":null,children:[Object($.jsx)("td",{"data-label":"viewed",className:O?"viewed-file-indicator":null}),Object($.jsx)("td",{"data-label":"name",children:j?i:h}),d&&1===(null===r||void 0===r?void 0:r.length)&&Object($.jsx)("td",{"data-label":"season",children:m}),s&&Object($.jsx)("td",{"data-label":"episode",children:g}),p&&Object($.jsx)("td",{"data-label":"resolution",children:x}),Object($.jsx)("td",{"data-label":"size",children:V(b)}),Object($.jsx)("td",{children:Object($.jsxs)("div",{className:"button-cell",children:[Object($.jsx)(ne.a,{onClick:function(){return c(t)},variant:"outlined",color:"primary",size:"small",children:o("Preload")}),Object($.jsx)("a",{style:{textDecoration:"none"},href:f,target:"_blank",rel:"noreferrer",children:Object($.jsx)(ne.a,{style:{width:"100%"},variant:"outlined",color:"primary",size:"small",children:o("OpenLink")})}),Object($.jsx)(Ye.a,{text:f,children:Object($.jsx)(ne.a,{variant:"outlined",color:"primary",size:"small",children:o("CopyLink")})})]})})]},t)}))})]}),Object($.jsx)(Qe,{children:t.map((function(e){var t=e.id,i=e.path,b=e.length,u=ie.a.parse(i),h=u.title,x=u.resolution,g=u.episode,m=u.season,O=null===n||void 0===n?void 0:n.includes(t),f=l(i,t);return(m===a||!(null===r||void 0===r?void 0:r.length))&&Object($.jsxs)(et,{isViewed:O,children:[Object($.jsx)("div",{className:"short-table-name",children:j?i:h}),Object($.jsxs)("div",{className:"short-table-data",children:[O&&Object($.jsxs)("div",{className:"short-table-field",children:[Object($.jsx)("div",{className:"short-table-field-name",children:o("Viewed")}),Object($.jsx)("div",{className:"short-table-field-value",children:Object($.jsx)("div",{className:"short-table-viewed-indicator"})})]}),d&&1===(null===r||void 0===r?void 0:r.length)&&Object($.jsxs)("div",{className:"short-table-field",children:[Object($.jsx)("div",{className:"short-table-field-name",children:o("Season")}),Object($.jsx)("div",{className:"short-table-field-value",children:m})]}),s&&Object($.jsxs)("div",{className:"short-table-field",children:[Object($.jsx)("div",{className:"short-table-field-name",children:o("Episode")}),Object($.jsx)("div",{className:"short-table-field-value",children:g})]}),p&&Object($.jsxs)("div",{className:"short-table-field",children:[Object($.jsx)("div",{className:"short-table-field-name",children:o("Resolution")}),Object($.jsx)("div",{className:"short-table-field-value",children:x})]}),Object($.jsxs)("div",{className:"short-table-field",children:[Object($.jsx)("div",{className:"short-table-field-name",children:o("Size")}),Object($.jsx)("div",{className:"short-table-field-value",children:V(b)})]})]}),Object($.jsxs)("div",{className:"short-table-buttons",children:[Object($.jsx)(ne.a,{onClick:function(){return c(t)},variant:"outlined",color:"primary",size:"small",children:o("Preload")}),Object($.jsx)("a",{style:{textDecoration:"none"},href:f,target:"_blank",rel:"noreferrer",children:Object($.jsx)(ne.a,{style:{width:"100%"},variant:"outlined",color:"primary",size:"small",children:o("OpenLink")})}),Object($.jsx)(Ye.a,{text:f,children:Object($.jsx)(ne.a,{variant:"outlined",color:"primary",size:"small",children:o("CopyLink")})})]})]},t)}))})]}):"No playable files in this torrent"}),(function(e,t){return Me()(e,t)})),It=He.d.div(nt||(nt=Object(Ue.a)(["\n display: grid;\n grid-template-columns: 70% 1fr;\n grid-template-rows: repeat(2, min-content);\n grid-template-areas:\n 'main cache'\n 'file-list file-list';\n\n @media (max-width: 1450px) {\n grid-template-columns: 1fr;\n grid-template-rows: repeat(3, min-content);\n grid-template-areas:\n 'main'\n 'cache'\n 'file-list';\n }\n"]))),Ut=He.d.div(at||(at=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.poster,n=e.theme.dialogTorrentDetailsContent.posterBGColor;return Object(He.c)(rt||(rt=Object(Ue.a)(["\n height: 400px;\n border-radius: 5px;\n overflow: hidden;\n align-self: center;\n\n ","\n\n @media (max-width: 1280px) {\n align-self: start;\n }\n\n @media (max-width: 840px) {\n ","\n }\n "])),t?Object(He.c)(it||(it=Object(Ue.a)(["\n img {\n border-radius: 5px;\n height: 100%;\n }\n "]))):Object(He.c)(ot||(ot=Object(Ue.a)(["\n width: 300px;\n display: grid;\n place-items: center;\n background: ",";\n\n svg {\n transform: scale(2.5) translateY(-3px);\n }\n "])),n),t?Object(He.c)(ct||(ct=Object(Ue.a)(["\n height: 200px;\n "]))):Object(He.c)(lt||(lt=Object(Ue.a)(["\n display: none;\n "]))))})),Ht=He.d.section(st||(st=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.theme.dialogTorrentDetailsContent,n=t.gradientStartColor,a=t.gradientEndColor;return Object(He.c)(dt||(dt=Object(Ue.a)(["\n grid-area: main;\n padding: 40px;\n display: grid;\n grid-template-columns: min-content 1fr;\n gap: 30px;\n background: linear-gradient(145deg, ",", ",");\n\n @media (max-width: 840px) {\n grid-template-columns: 1fr;\n }\n\n @media (max-width: 800px) {\n padding: 20px;\n }\n "])),n,a)})),Wt=He.d.section(pt||(pt=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.theme.dialogTorrentDetailsContent.chacheSectionBGColor;return Object(He.c)(jt||(jt=Object(Ue.a)(["\n grid-area: cache;\n padding: 40px;\n display: grid;\n align-content: start;\n grid-template-rows: min-content 1fr min-content;\n background: ",";\n\n @media (max-width: 800px) {\n padding: 20px;\n }\n "])),t)})),Vt=He.d.section(bt||(bt=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.theme.dialogTorrentDetailsContent.torrentFilesSectionBGColor;return Object(He.c)(ut||(ut=Object(Ue.a)(["\n grid-area: file-list;\n padding: 40px;\n box-shadow: inset 3px 25px 8px -25px rgba(0, 0, 0, 0.5);\n background: ",";\n\n @media (max-width: 800px) {\n padding: 20px;\n }\n "])),t)})),Zt=He.d.div(ht||(ht=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.theme.dialogTorrentDetailsContent.subNameFontColor;return Object(He.c)(xt||(xt=Object(Ue.a)(["\n ","\n "])),(function(e){var n=e.mb;return Object(He.c)(gt||(gt=Object(Ue.a)(["\n ",";\n ",";\n line-height: 1.2;\n color: ",";\n\n @media (max-width: 800px) {\n ",";\n ",";\n font-size: 14px;\n }\n "])),n&&"margin-top: ".concat(n/3,"px"),n&&"margin-bottom: ".concat(n,"px"),t,n&&"margin-top: ".concat(n/4,"px"),n&&"margin-bottom: ".concat(n/2,"px"))}))})),_t=He.d.div(mt||(mt=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.color,n=e.theme.dialogTorrentDetailsContent.titleFontColor;return Object(He.c)(Ot||(Ot=Object(Ue.a)(["\n ","\n "])),(function(e){var a=e.mb;return Object(He.c)(ft||(ft=Object(Ue.a)(["\n ",";\n font-size: 34px;\n font-weight: 300;\n line-height: 1;\n word-break: break-word;\n color: ",";\n\n @media (max-width: 800px) {\n font-size: 24px;\n line-height: 1.1;\n ",";\n }\n "])),a&&"margin-bottom: ".concat(a,"px"),t||n,a&&"margin-bottom: ".concat(a/2,"px"))}))})),Kt=He.d.div(Ct||(Ct=Object(Ue.a)(["\n margin-bottom: 20px;\n"]))),Jt=He.d.div(vt||(vt=Object(Ue.a)(["\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(max-content, 220px));\n gap: 20px;\n\n @media (max-width: 800px) {\n gap: 15px;\n }\n @media (max-width: 410px) {\n gap: 10px;\n }\n\n ","\n"])),(function(e){return e.detailedView?Object(He.c)(yt||(yt=Object(Ue.a)(["\n @media (max-width: 800px) {\n grid-template-columns: repeat(2, 1fr);\n }\n @media (max-width: 410px) {\n grid-template-columns: 1fr;\n }\n "]))):Object(He.c)(wt||(wt=Object(Ue.a)(["\n @media (max-width: 800px) {\n grid-template-columns: repeat(auto-fit, minmax(max-content, 185px));\n }\n @media (max-width: 480px) {\n grid-template-columns: 1fr 1fr;\n }\n @media (max-width: 390px) {\n grid-template-columns: 1fr;\n }\n "])))})),Yt=He.d.div(St||(St=Object(Ue.a)(["\n display: grid;\n grid-template-columns: 40px 1fr;\n grid-template-rows: min-content 50px;\n grid-template-areas:\n 'title title'\n 'icon value';\n\n > * {\n display: grid;\n place-items: center;\n }\n\n @media (max-width: 800px) {\n grid-template-columns: 30px 1fr;\n grid-template-rows: min-content 40px;\n }\n"]))),$t=He.d.div(kt||(kt=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.theme.dialogTorrentDetailsContent.titleFontColor;return Object(He.c)(Dt||(Dt=Object(Ue.a)(["\n grid-area: title;\n justify-self: start;\n text-transform: uppercase;\n font-size: 11px;\n margin-bottom: 2px;\n font-weight: 600;\n color: ",";\n "])),t)})),Xt=He.d.div(Tt||(Tt=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.bgColor;return Object(He.c)(Pt||(Pt=Object(Ue.a)(["\n grid-area: icon;\n color: ",";\n background: ",";\n border-radius: 5px 0 0 5px;\n\n @media (max-width: 800px) {\n > svg {\n width: 50%;\n }\n }\n "])),Object(Le.a)("#fff",.8),t)})),qt=He.d.div(Mt||(Mt=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.bgColor,n=e.theme.dialogTorrentDetailsContent.widgetFontColor;return Object(He.c)(Bt||(Bt=Object(Ue.a)(["\n grid-area: value;\n font-size: 24px;\n padding: 0 20px 0 0;\n color: ",";\n background: ",";\n border-radius: 0 5px 5px 0;\n white-space: nowrap;\n\n @media (max-width: 800px) {\n font-size: 18px;\n padding: 0 16px 0 0;\n }\n "])),n,t)})),Qt=He.d.div.attrs((function(e){var t=e.value,n=e.fullAmount,a=e.theme.dialogTorrentDetailsContent.gradientEndColor,r=Math.min(100,100*t/n);return{style:{background:"linear-gradient(to right, ".concat(a," 0%, ").concat(a," ").concat(r,"%, #fff ").concat(r,"%, #fff 100%)")}}}))(Rt||(Rt=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.label;return Object(He.c)(Lt||(Lt=Object(Ue.a)(["\n border: 1px solid;\n padding: 10px 20px;\n border-radius: 5px;\n color: #000;\n\n :before {\n content: '","';\n display: grid;\n place-items: center;\n font-size: 20px;\n }\n "])),t)})),en=He.d.div(At||(At=Object(Ue.a)(["\n height: 1px;\n background-color: rgba(0, 0, 0, 0.12);\n margin: 30px 0;\n"]))),tn=He.d.section(zt||(zt=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.theme.detailedView,n=t.gradientStartColor,a=t.gradientEndColor;return Object(He.c)(Ft||(Ft=Object(Ue.a)(["\n padding: 40px;\n background: linear-gradient(145deg, ",", ",");\n\n @media (max-width: 800px) {\n padding: 20px;\n }\n "])),n,a)})),nn=He.d.section(Et||(Et=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.theme.detailedView.cacheSectionBGColor;return Object(He.c)(Gt||(Gt=Object(Ue.a)(["\n padding: 40px;\n box-shadow: inset 3px 25px 8px -25px rgba(0, 0, 0, 0.5);\n background: ",";\n flex: 1;\n\n @media (max-width: 800px) {\n padding: 20px;\n }\n "])),t)})),an=n(59),rn=n(434),on=n(435),cn=n(436),ln=n(437),sn=n(438),dn=n(439),pn=n(440);function jn(e){var t=e.icon,n=e.title,a=e.value,r=e.iconBg,i=e.valueBg;return Object($.jsxs)(Yt,{children:[Object($.jsx)($t,{children:n}),Object($.jsx)(Xt,{bgColor:r,children:Object($.jsx)(t,{})}),Object($.jsx)(qt,{bgColor:i,children:a})]})}var bn=Fe,un=Ee,hn={light:{downloadSpeed:{iconBGColor:"#118f00",valueBGColor:"#13a300"},uploadSpeed:{iconBGColor:"#0146ad",valueBGColor:"#0058db"},peers:{iconBGColor:"#cdc118",valueBGColor:"#d8cb18"},piecesCount:{iconBGColor:"#b6c95e",valueBGColor:"#c0d076"},piecesLength:{iconBGColor:"#0982c8",valueBGColor:"#098cd7"},status:{iconBGColor:"#aea25b",valueBGColor:"#b4aa6e"},size:{iconBGColor:"#9b01ad",valueBGColor:"#ac03bf"}},dark:{downloadSpeed:{iconBGColor:"#0c6600",valueBGColor:"#0d7000"},uploadSpeed:{iconBGColor:"#003f9e",valueBGColor:"#0047b3"},peers:{iconBGColor:"#a69c11",valueBGColor:"#b4a913"},piecesCount:{iconBGColor:"#8da136",valueBGColor:"#99ae3d"},piecesLength:{iconBGColor:"#07659c",valueBGColor:"#0872af"},status:{iconBGColor:"#938948",valueBGColor:"#9f9450"},size:{iconBGColor:"#81008f",valueBGColor:"#9102a1"}}};function xn(e){var t=Object(a.useContext)(No).isDarkMode;return hn[t?un:bn][e]}var gn,mn,On,fn=function(e){var t=e.data,n=Object(ce.a)().t,a=xn("downloadSpeed"),r=a.iconBGColor,i=a.valueBGColor;return Object($.jsx)(jn,{title:n("DownloadSpeed"),value:Z(t)||"0 ".concat(n("bps")),iconBg:r,valueBg:i,icon:rn.a})},Cn=function(e){var t=e.data,n=Object(ce.a)().t,a=xn("uploadSpeed"),r=a.iconBGColor,i=a.valueBGColor;return Object($.jsx)(jn,{title:n("UploadSpeed"),value:Z(t)||"0 ".concat(n("bps")),iconBg:r,valueBg:i,icon:on.a})},vn=function(e){var t=e.data,n=Object(ce.a)().t,a=xn("peers"),r=a.iconBGColor,i=a.valueBGColor;return Object($.jsx)(jn,{title:n("Peers"),value:_(t)||"0 \xb7 0 / 0",iconBg:r,valueBg:i,icon:cn.a})},yn=function(e){var t=e.data,n=Object(ce.a)().t,a=xn("piecesCount"),r=a.iconBGColor,i=a.valueBGColor;return Object($.jsx)(jn,{title:n("PiecesCount"),value:t,iconBg:r,valueBg:i,icon:ln.a})},wn=function(e){var t=e.data,n=Object(ce.a)().t,a=xn("piecesLength"),r=a.iconBGColor,i=a.valueBGColor;return Object($.jsx)(jn,{title:n("PiecesLength"),value:V(t),iconBg:r,valueBg:i,icon:sn.a})},Sn=function(e){var t,n=e.stat,a=Object(ce.a)().t,r=(t={},Object(an.a)(t,1,a("TorrentGettingInfo")),Object(an.a)(t,2,a("TorrentPreload")),Object(an.a)(t,3,a("TorrentWorking")),Object(an.a)(t,4,a("TorrentClosed")),Object(an.a)(t,5,a("TorrentInDb")),t),i=xn("status"),o=i.iconBGColor,c=i.valueBGColor;return Object($.jsx)(jn,{title:a("TorrentStatus"),value:r[n],iconBg:o,valueBg:c,icon:dn.a})},kn=function(e){var t=e.data,n=Object(ce.a)().t,a=xn("size"),r=a.iconBGColor,i=a.valueBGColor;return Object($.jsx)(jn,{title:n("TorrentSize"),value:V(t),iconBg:r,valueBg:i,icon:pn.a})};function Dn(e){var t=e.downloadSpeed,n=e.uploadSpeed,a=e.torrent,r=e.torrentSize,i=e.PiecesCount,o=e.PiecesLength,c=e.stat,l=e.cache,s=Object(ce.a)().t;return Object($.jsxs)($.Fragment,{children:[Object($.jsxs)(tn,{children:[Object($.jsx)(_t,{mb:20,children:s("Data")}),Object($.jsxs)(Jt,{detailedView:!0,children:[Object($.jsx)(fn,{data:t}),Object($.jsx)(Cn,{data:n}),Object($.jsx)(vn,{data:a}),Object($.jsx)(kn,{data:r}),Object($.jsx)(yn,{data:i}),Object($.jsx)(wn,{data:o}),Object($.jsx)(Sn,{stat:c})]})]}),Object($.jsxs)(nn,{children:[Object($.jsx)(_t,{color:"#000",mb:20,children:s("Cache")}),Object($.jsx)(Ke,{cache:l})]})]})}var Tn=He.d.div(gn||(gn=Object(Ue.a)(["\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 20px;\n\n :not(:last-child) {\n margin-bottom: 30px;\n }\n\n @media (max-width: 1580px) {\n grid-template-columns: repeat(2, 1fr);\n }\n\n @media (max-width: 880px) {\n grid-template-columns: 1fr;\n }\n"]))),Pn=He.d.div(mn||(mn=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.mb,n=e.theme.torrentFunctions.fontColor;return Object(He.c)(On||(On=Object(Ue.a)(["\n ",";\n font-size: 20px;\n font-weight: 300;\n line-height: 1;\n color: ",";\n\n @media (max-width: 800px) {\n font-size: 18px;\n ",";\n }\n "])),t&&"margin-bottom: ".concat(t,"px"),n,t&&"margin-bottom: ".concat(t/1.5,"px"))})),Mn=Object(a.memo)((function(e){var t,n=e.hash,a=e.viewedFileList,r=e.playableFileList,i=e.name,o=e.title,c=e.setViewedFileList,l=Object(ce.a)().t,s=null===a||void 0===a?void 0:a[(null===a||void 0===a?void 0:a.length)-1],d=null===r||void 0===r||null===(t=r.find((function(e){return e.id===s})))||void 0===t?void 0:t.path,p=1===(null===r||void 0===r?void 0:r.length),j=d&&ie.a.parse(d),b="".concat("".concat(C,"/stream"),"/").concat(encodeURIComponent(i||o||"file"),".m3u?link=").concat(n,"&m3u"),u="".concat(b,"&fromlast");return Object($.jsxs)($.Fragment,{children:[!p&&!!(null===a||void 0===a?void 0:a.length)&&Object($.jsxs)($.Fragment,{children:[Object($.jsx)(Pn,{children:l("DownloadPlaylist")}),Object($.jsxs)(Zt,{mb:10,children:[Object($.jsx)("strong",{children:l("LatestFilePlayed")})," ",null===j||void 0===j?void 0:j.title,".",(null===j||void 0===j?void 0:j.season)&&Object($.jsxs)($.Fragment,{children:[" ",l("Season"),": ",null===j||void 0===j?void 0:j.season,". ",l("Episode"),": ",null===j||void 0===j?void 0:j.episode,"."]})]}),Object($.jsxs)(Tn,{children:[Object($.jsx)("a",{style:{textDecoration:"none"},href:b,children:Object($.jsx)(ne.a,{style:{width:"100%"},variant:"contained",color:"primary",size:"large",children:l("Full")})}),Object($.jsx)("a",{style:{textDecoration:"none"},href:u,children:Object($.jsx)(ne.a,{style:{width:"100%"},variant:"contained",color:"primary",size:"large",children:l("FromLatestFile")})})]})]}),Object($.jsx)(Pn,{mb:10,children:l("TorrentState")}),Object($.jsxs)(Tn,{children:[Object($.jsx)(ne.a,{onClick:function(){return P.a.post(y(),{action:"rem",hash:n,file_index:-1}).then((function(){return c()}))},variant:"contained",color:"primary",size:"large",children:l("RemoveViews")}),Object($.jsx)(ne.a,{onClick:function(){return P.a.post(v(),{action:"drop",hash:n})},variant:"contained",color:"primary",size:"large",children:l("DropTorrent")})]}),Object($.jsx)(Pn,{mb:10,children:l("Info")}),Object($.jsxs)(Tn,{children:[(p||!(null===a||void 0===a?void 0:a.length))&&Object($.jsx)("a",{style:{textDecoration:"none"},href:b,children:Object($.jsx)(ne.a,{style:{width:"100%"},variant:"contained",color:"primary",size:"large",children:l("DownloadPlaylist")})}),Object($.jsx)(Je.CopyToClipboard,{text:n,children:Object($.jsx)(ne.a,{variant:"contained",color:"primary",size:"large",children:l("CopyHash")})})]})]})}),(function(){return!0})),Bn=["3g2","3gp","aaf","asf","avchd","avi","drc","flv","iso","m2v","m2ts","m4p","m4v","mkv","mng","mov","mp2","mp4","mpe","mpeg","mpg","mpv","mxf","nsv","ogg","ogv","ts","qt","rm","rmvb","roq","svi","vob","webm","wmv","yuv","aac","aiff","ape","au","flac","gsm","it","m3u","m4a","mid","mod","mp3","mpa","pls","ra","s3m","sid","wav","wma","xm"],Rn=function(){return Object($.jsx)("div",{style:{minHeight:"80vh",display:"grid",placeItems:"center"},children:Object($.jsx)(oe.a,{color:"secondary"})})};function Ln(e){var t,n=e.closeDialog,r=e.torrent,i=Object(ce.a)().t,o=Object(a.useState)(!0),c=Object(l.a)(o,2),s=c[0],d=c[1],p=Object(a.useState)(!1),j=Object(l.a)(p,2),b=j[0],u=j[1],h=Object(a.useState)(),x=Object(l.a)(h,2),g=x[0],m=x[1],O=Object(a.useState)(),f=Object(l.a)(O,2),C=f[0],v=f[1],S=Object(a.useState)(null),k=Object(l.a)(S,2),D=k[0],T=k[1],B=Object(a.useState)(),R=Object(l.a)(B,2),L=R[0],A=R[1],z=r.poster,F=r.hash,E=r.title,G=r.name,N=r.stat,I=r.download_speed,U=r.upload_speed,H=r.torrent_size,W=r.file_stats,Z=le(F),_=function(e){var t=Object(a.useState)(),n=Object(l.a)(t,2),r=n[0],i=n[1];return Object(a.useEffect)((function(){P.a.post(w(),{action:"get"}).then((function(e){var t=e.data;return i(t)}))}),[e]),r}(Z),J=Z.Capacity,Y=Z.PiecesCount,q=Z.PiecesLength,Q=Z.Filled;Object(a.useEffect)((function(){if(C&&null===D){var e=[];C.forEach((function(t){var n=t.path,a=ie.a.parse(n).season;a&&!e.includes(a)&&e.push(a)})),e.length&&A(e[0]),T(e.sort((function(e,t){return e-t})))}}),[C,D]),Object(a.useEffect)((function(){v(null===W||void 0===W?void 0:W.filter((function(e){var t,n=e.path;return t=n,Bn.includes(function(e){var t=e.split(".").pop();return t===e?"":t.toLowerCase()}(t))})))}),[W]),Object(a.useEffect)((function(){var e=!!Object.entries(Z).length,t=1!==N&&5!==N;e||s||d(!0),e&&s&&t&&d(!1)}),[N,Z,s]),Object(a.useEffect)((function(){P.a.post(y(),{action:"list",hash:F}).then((function(e){var t=e.data;if(t){var n=t.map((function(e){return e.file_index})).sort((function(e,t){return e-t}));m(n)}else m()}))}),[F]);var ee=J/100*(null===_||void 0===_?void 0:_.PreloadCache),te=ee>33554432?ee:33554432,re=function(){var e=[],t=G&&ie.a.parse(G);E!==G?e.push(K(E)):(null===t||void 0===t?void 0:t.title)&&e.push(K(null===t||void 0===t?void 0:t.title)),(null===t||void 0===t?void 0:t.year)&&!e[0].includes(null===t||void 0===t?void 0:t.year)&&e.push(null===t||void 0===t?void 0:t.year),(null===t||void 0===t?void 0:t.resolution)&&!e[0].includes(null===t||void 0===t?void 0:t.resolution)&&e.push(null===t||void 0===t?void 0:t.resolution);var n=e.join(". ");return"."===n[n.length-1]&&"."===n[n.length-2]?"".concat(n,"."):n};return Object($.jsxs)($.Fragment,{children:[Object($.jsx)(xe,Object(M.a)({onClose:n,title:i(b?"DetailedCacheView.header":"TorrentDetails")},b&&{onBack:function(){return u(!1)}})),Object($.jsx)("div",{style:Object(M.a)({minHeight:"80vh",overflow:"auto"},b&&{display:"flex",flexDirection:"column"}),children:s?Object($.jsx)(Rn,{}):b?Object($.jsx)(Dn,{downloadSpeed:I,uploadSpeed:U,torrent:r,torrentSize:H,PiecesCount:Y,PiecesLength:q,stat:N,cache:Z}):Object($.jsxs)(It,{children:[Object($.jsxs)(Ht,{children:[Object($.jsx)(Ut,{poster:z,children:z?Object($.jsx)("img",{alt:"poster",src:z}):Object($.jsx)(X,{})}),Object($.jsxs)("div",{children:[E&&G!==E?re().length>90?Object($.jsxs)($.Fragment,{children:[Object($.jsx)(_t,{children:ie.a.parse(G).title}),Object($.jsx)(Zt,{mb:20,children:re()})]}):Object($.jsxs)($.Fragment,{children:[Object($.jsx)(_t,{children:re()}),Object($.jsx)(Zt,{mb:20,children:null===(t=ie.a.parse(G||""))||void 0===t?void 0:t.title})]}):Object($.jsx)(_t,{mb:20,children:re()}),Object($.jsxs)(Jt,{children:[Object($.jsx)(fn,{data:I}),Object($.jsx)(Cn,{data:U}),Object($.jsx)(vn,{data:r}),Object($.jsx)(kn,{data:H}),Object($.jsx)(Sn,{stat:N})]}),Object($.jsx)(en,{}),Object($.jsx)(Mn,{hash:F,viewedFileList:g,playableFileList:C,name:G,title:E,setViewedFileList:m})]})]}),Object($.jsxs)(Wt,{children:[Object($.jsxs)(Kt,{children:[Object($.jsx)(_t,{mb:20,children:i("Buffer")}),te<=33554432&&Object($.jsx)(Zt,{children:i("BufferNote")}),Object($.jsx)(Qt,{value:Q,fullAmount:te,label:"".concat(V(te)," / ").concat(V(Q)||"0 ".concat(i("B")))})]}),Object($.jsx)(Ke,{isMini:!0,cache:Z}),Object($.jsx)(ne.a,{style:{marginTop:"30px"},variant:"contained",color:"primary",size:"large",onClick:function(){return u(!0)},children:i("DetailedCacheView.button")})]}),Object($.jsxs)(Vt,{children:[Object($.jsx)(_t,{mb:20,children:i("TorrentContent")}),(null===D||void 0===D?void 0:D.length)>1&&Object($.jsxs)($.Fragment,{children:[Object($.jsx)(Zt,{mb:7,children:i("SelectSeason")}),Object($.jsx)(ae.a,{style:{marginBottom:"30px"},color:"secondary",children:D.map((function(e){return Object($.jsx)(ne.a,{variant:L===e?"contained":"outlined",onClick:function(){return A(e)},children:e},e)}))}),Object($.jsxs)(_t,{mb:20,children:[i("Season")," ",L]})]}),Object($.jsx)(Nt,{hash:F,playableFileList:C,viewedFileList:g,selectedSeason:L,seasonAmount:D})]})]})})]})}var An=n(481),zn=n(450),Fn=n(455),En=n(456),Gn=n(186),Nn=n.n(Gn),In=function(){var e=Object(ce.a)().i18n;return["en-US"===e.language||"en"===e.language?"en":e.language,function(t){return e.changeLanguage(t)}]};function Un(e){var t=Object(a.useRef)(e);return Object(a.useEffect)((function(){t.current=e}),[e]),t.current}var Hn,Wn,Vn,Zn,_n,Kn,Jn,Yn,$n,Xn,qn,Qn,ea,ta,na,aa,ra,ia,oa,ca,la,sa,da,pa,ja,ba,ua,ha,xa,ga=n(479),ma=n(107),Oa=n.n(ma),fa=He.d.div(Hn||(Hn=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.theme.primary;return Object(He.c)(Wn||(Wn=Object(Ue.a)(["\n background: ",";\n color: rgba(0, 0, 0, 0.87);\n font-size: 20px;\n color: #fff;\n font-weight: 600;\n box-shadow: 0px 2px 4px -1px rgb(0 0 0 / 20%), 0px 4px 5px 0px rgb(0 0 0 / 14%), 0px 1px 10px 0px rgb(0 0 0 / 12%);\n padding: 15px 24px;\n position: relative;\n "])),t)})),Ca=He.d.div(Vn||(Vn=Object(Ue.a)(["\n padding: 20px;\n display: flex;\n justify-content: flex-end;\n\n > :not(:last-child) {\n margin-right: 10px;\n }\n"]))),va=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"en",n="http://api.themoviedb.org/3/search/multi";return P.a.get(n,{params:{api_key:"45ddf563ac3fb845f2d5c363190d1a33",language:t,include_image_language:"".concat(t,",null,en"),query:e}}).then((function(e){return e.data.results.filter((function(e){return e.poster_path})).map((function(e){return"https://image.tmdb.org/t/p/w300".concat(e.poster_path)}))})).catch((function(){return null}))},ya=function(){var e=Object(F.a)(z.a.mark((function e(t){return z.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t&&t.match(/.(jpg|jpeg|png|gif)$/i)){e.next=2;break}return e.abrupt("return",!1);case 2:return e.prev=2,e.next=5,fetch(t,{mode:"no-cors"});case 5:return e.abrupt("return",!0);case 8:return e.prev=8,e.t0=e.catch(2),e.abrupt("return",!1);case 11:case"end":return e.stop()}}),e,null,[[2,8]])})));return function(t){return e.apply(this,arguments)}}(),wa=/^magnet:\?xt=urn:[a-z0-9].*/i,Sa=/^\b[0-9a-f]{32}\b$|^\b[0-9a-f]{40}\b$|^\b[0-9a-f]{64}\b$/i,ka=/^.*\.(torrent)$/i,Da=/^(http(s?)):\/\/.*/i,Ta=He.d.div(Zn||(Zn=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.isEditMode,n=e.theme.addDialog,a=n.gradientStartColor,r=n.gradientEndColor,i=n.fontColor;return Object(He.c)(_n||(_n=Object(Ue.a)(["\n height: 550px;\n background: linear-gradient(145deg, ",", ",");\n flex: 1;\n display: grid;\n grid-template-columns: repeat(",", 1fr);\n border-bottom: 1px solid rgba(0, 0, 0, 0.12);\n overflow: auto;\n color: ",";\n\n @media (max-width: 540px) {\n ","\n overflow: scroll;\n }\n\n @media (max-width: 930px) {\n grid-template-columns: 1fr;\n }\n\n @media (max-width: 500px) {\n align-content: start;\n }\n "])),a,r,t?"1":"2",i,"")})),Pa=He.d.div(Kn||(Kn=Object(Ue.a)(["\n padding: 0 20px 20px 20px;\n"]))),Ma=He.d.div(Jn||(Jn=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.isHidden,n=e.notificationMessage,a=e.isError,r=e.theme.addDialog,i=r.notificationErrorBGColor,o=r.notificationSuccessBGColor;return Object(He.c)(Yn||(Yn=Object(Ue.a)(["\n height: 530px;\n\n ",";\n\n ",";\n\n @media (max-width: 500px) {\n height: 170px;\n }\n "])),n&&Object(He.c)($n||($n=Object(Ue.a)(["\n position: relative;\n white-space: nowrap;\n\n :before {\n font-size: 20px;\n font-weight: 300;\n content: '","';\n display: grid;\n place-items: center;\n background: ",";\n padding: 10px 15px;\n position: absolute;\n top: 52%;\n left: 50%;\n transform: translate(-50%, -50%);\n border-radius: 5px;\n }\n "])),n,a?i:o),t&&Object(He.c)(Xn||(Xn=Object(Ue.a)(["\n display: none;\n "]))))})),Ba=He.d.div(qn||(qn=Object(Ue.a)(["\n display: flex;\n flex-direction: column;\n border-right: 1px solid rgba(0, 0, 0, 0.12);\n"]))),Ra=Object(He.c)(Qn||(Qn=Object(Ue.a)(["\n transition: transform 0.3s;\n padding: 20px;\n height: 100%;\n display: grid;\n"]))),La=He.d.div(ea||(ea=Object(Ue.a)(["\n ","\n border: 4px dashed rgba(0,0,0,0.1);\n text-align: center;\n\n ",";\n\n justify-items: center;\n grid-template-rows: 130px 1fr;\n cursor: pointer;\n\n :hover {\n background-color: rgba(0, 0, 0, 0.04);\n svg {\n transform: translateY(-4%);\n }\n }\n\n @media (max-width: 930px) {\n border: 4px dashed transparent;\n height: 400px;\n place-items: center;\n grid-template-rows: 40% 1fr;\n }\n\n @media (max-width: 500px) {\n height: 170px;\n grid-template-rows: 1fr;\n\n > div:first-of-type {\n display: none;\n }\n }\n"])),Ra,(function(e){return e.isDragActive&&"border: 4px dashed green"})),Aa=He.d.div(ta||(ta=Object(Ue.a)(["\n ","\n place-items: center;\n\n @media (max-width: 930px) {\n height: 400px;\n }\n\n @media (max-width: 500px) {\n height: 170px;\n }\n"])),Ra),za=He.d.div(na||(na=Object(Ue.a)(["\n position: relative;\n"]))),Fa=He.d.div(aa||(aa=Object(Ue.a)(["\n position: absolute;\n top: -9px;\n left: 10px;\n cursor: pointer;\n\n > svg {\n transition: all 0.3s;\n fill: rgba(0, 0, 0, 0.7);\n\n :hover {\n fill: rgba(0, 0, 0, 0.6);\n }\n }\n"]))),Ea=He.d.div(ra||(ra=Object(Ue.a)(["\n display: grid;\n justify-items: center;\n align-content: start;\n gap: 10px;\n align-self: start;\n\n svg {\n transition: all 0.3s;\n }\n"]))),Ga=He.d.div(ia||(ia=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.active,n=e.theme.addDialog.gradientStartColor;return Object(He.c)(oa||(oa=Object(Ue.a)(["\n background: ",";\n padding: 0 20px 20px 20px;\n transition: all 0.3s;\n\n ",";\n "])),n,t&&"box-shadow: 0 8px 10px -9px rgba(0, 0, 0, 0.5)")})),Na=He.d.div(ca||(ca=Object(Ue.a)(["\n margin-top: 20px;\n display: grid;\n grid-template-columns: max-content 1fr;\n grid-template-rows: 300px max-content;\n column-gap: 5px;\n position: relative;\n margin-bottom: 20px;\n\n grid-template-areas:\n 'poster suggestions'\n 'clear empty';\n\n @media (max-width: 540px) {\n grid-template-columns: 1fr;\n gap: 5px 0;\n justify-items: center;\n grid-template-areas:\n 'poster'\n 'clear'\n 'suggestions';\n }\n"]))),Ia=He.d.div(la||(la=Object(Ue.a)(["\n display: grid;\n grid-area: suggestions;\n grid-auto-flow: column;\n grid-template-columns: repeat(3, max-content);\n grid-template-rows: repeat(4, max-content);\n gap: 5px;\n\n @media (max-width: 540px) {\n grid-auto-flow: row;\n grid-template-columns: repeat(5, max-content);\n }\n @media (max-width: 375px) {\n grid-template-columns: repeat(4, max-content);\n }\n"]))),Ua=He.d.div(sa||(sa=Object(Ue.a)(["\n cursor: pointer;\n width: 71px;\n height: 71px;\n\n @media (max-width: 430px) {\n width: 60px;\n height: 60px;\n }\n\n @media (max-width: 375px) {\n width: 71px;\n height: 71px;\n }\n\n @media (max-width: 355px) {\n width: 60px;\n height: 60px;\n }\n\n img {\n transition: all 0.3s;\n border-radius: 5px;\n width: 100%;\n height: 100%;\n object-fit: cover;\n\n :hover {\n filter: brightness(130%);\n }\n }\n"]))),Ha=He.d.div(da||(da=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.poster,n=e.theme.addDialog.posterBGColor;return Object(He.c)(pa||(pa=Object(Ue.a)(["\n border-radius: 5px;\n overflow: hidden;\n width: 200px;\n grid-area: poster;\n\n ","\n "])),t?Object(He.c)(ja||(ja=Object(Ue.a)(["\n img {\n width: 200px;\n object-fit: cover;\n border-radius: 5px;\n height: 100%;\n }\n "]))):Object(He.c)(ba||(ba=Object(Ue.a)(["\n display: grid;\n place-items: center;\n background: ",";\n\n svg {\n transform: scale(1.5) translateY(-3px);\n }\n "])),n))})),Wa=Object(He.d)(ne.a)(ua||(ua=Object(Ue.a)(["\n grid-area: clear;\n justify-self: center;\n transform: translateY(-50%);\n position: absolute;\n ",";\n\n @media (max-width: 540px) {\n transform: translateY(-140%);\n }\n"])),(function(e){return!e.showbutton&&"display: none"})),Va=He.d.div(ha||(ha=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.showbutton,n=e.theme.addDialog,a=n.languageSwitchBGColor,r=n.languageSwitchFontColor;return Object(He.c)(xa||(xa=Object(Ue.a)(["\n grid-area: poster;\n z-index: 5;\n position: absolute;\n top: 0;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 30px;\n height: 30px;\n background: ",";\n border-radius: 50%;\n display: grid;\n place-items: center;\n color: ",";\n font-weight: 600;\n cursor: pointer;\n transition: all 0.3s;\n\n ",";\n\n :hover {\n filter: brightness(1.1);\n }\n "])),a,r,!t&&"display: none")})),Za=n(483),_a=n(447),Ka=n(448);function Ja(e){var t=e.setTitle,n=e.setPosterUrl,a=e.setIsPosterUrlCorrect,r=e.setIsUserInteractedWithPoster,i=e.setPosterList,o=e.isTorrentSourceCorrect,c=e.isHashAlreadyExists,l=e.title,s=e.parsedTitle,d=e.posterUrl,j=e.isPosterUrlCorrect,b=e.posterList,u=e.currentLang,h=e.posterSearchLanguage,x=e.setPosterSearchLanguage,g=e.posterSearch,m=e.removePoster,O=e.torrentSource,f=e.originalTorrentTitle,C=e.updateTitleFromSource,v=e.isCustomTitleEnabled,y=e.setIsCustomTitleEnabled,w=e.isEditMode,S=Object(ce.a)().t,k=Object(Y.a)().palette.primary.main,D=function(e){var n=e.target.value;return t(n)};return Object($.jsxs)(Pa,{children:[Object($.jsxs)(Ma,{isHidden:!o||c&&!w,children:[f?Object($.jsxs)($.Fragment,{children:[Object($.jsx)(Za.a,{value:f,margin:"dense",label:S("AddDialog.OriginalTorrentTitle"),type:"text",fullWidth:!0,disabled:v,InputProps:{readOnly:!0}}),Object($.jsx)(Za.a,{onChange:D,onFocus:function(){return y(!0)},onBlur:function(e){return!e.target.value&&y(!1)},value:l,margin:"dense",label:S("AddDialog.CustomTorrentTitle"),type:"text",fullWidth:!0,helperText:S("AddDialog.CustomTorrentTitleHelperText"),InputProps:{endAdornment:Object($.jsx)(_a.a,{position:"end",children:Object($.jsx)(p.a,{style:{padding:"0 0 0 7px"},onClick:function(){t(""),y(!v),C(),r(!1)},children:Object($.jsx)(Ka.a,{style:{color:v?k:"gray"}})})})}})]}):Object($.jsx)(Za.a,{onChange:D,value:l,margin:"dense",label:S("AddDialog.TitleBlank"),type:"text",fullWidth:!0}),Object($.jsx)(Za.a,{onChange:function(e){var t=e.target.value;n(t),ya(t).then(a),r(!!t),i()},value:d,margin:"dense",label:S("AddDialog.AddPosterLinkInput"),type:"url",fullWidth:!0}),Object($.jsxs)(Na,{children:[Object($.jsx)(Ha,{poster:+j,children:j?Object($.jsx)("img",{src:d,alt:"poster"}):Object($.jsx)(X,{})}),Object($.jsx)(Ia,{children:null===b||void 0===b?void 0:b.filter((function(e){return e!==d})).slice(0,12).map((function(e){return Object($.jsx)(Ua,{onClick:function(){return function(e){n(e),ya(e).then(a),r(!0)}(e)},children:Object($.jsx)("img",{src:e,alt:"poster"})},e)}))}),"en"!==u&&Object($.jsx)(Va,{onClick:function(){var e="en"===h?"ru":"en";x(e),g(v?l:f?s:l,e,{shouldRefreshMainPoster:!0})},showbutton:+j,color:"primary",variant:"contained",size:"small",children:"en"===h?"EN":"RU"}),Object($.jsx)(Wa,{showbutton:+j,onClick:function(){m(),r(!0)},color:"primary",variant:"contained",size:"small",children:S("Clear")})]})]}),Object($.jsx)(Ma,{isError:O&&(!o||c),notificationMessage:O?o?c&&S("AddDialog.HashExists"):S("AddDialog.WrongTorrentSource"):S("AddDialog.AddTorrentSourceNotification"),isHidden:w||o&&!c})]})}var Ya,$a,Xa,qa,Qa,er,tr,nr,ar,rr,ir=n(196),or=n(449);function cr(e){var t=e.setIsUserInteractedWithPoster,n=e.setSelectedFile,r=e.torrentSource,i=e.setTorrentSource,o=e.selectedFile,c=Object(ce.a)().t,s=Object(a.useState)(!1),d=Object(l.a)(s,2),p=d[0],j=d[1],b=Object(ir.a)({onDrop:function(e){var a=Object(l.a)(e,1)[0];a&&(t(!1),n(a),i(a.name))},accept:".torrent"}),u=b.getRootProps,h=b.getInputProps,x=b.isDragActive;return Object($.jsxs)(Ba,{children:[Object($.jsx)(Ga,{active:p,children:Object($.jsx)(Za.a,{onChange:function(e){var t=e.target.value;return i(t)},value:r,margin:"dense",label:c("AddDialog.TorrentSourceLink"),helperText:c("AddDialog.TorrentSourceOptions"),type:"text",fullWidth:!0,onFocus:function(){return j(!0)},onBlur:function(){return j(!1)},inputProps:{autoComplete:"off"},disabled:!!o})}),o?Object($.jsx)(Aa,{children:Object($.jsxs)(za,{children:[Object($.jsx)(te,{}),Object($.jsx)(Fa,{onClick:function(){n(),i("")},children:Object($.jsx)(or.a,{})})]})}):Object($.jsxs)(La,Object(M.a)(Object(M.a)({isDragActive:x},u()),{},{children:[Object($.jsx)("input",Object(M.a)({},h())),Object($.jsx)("div",{children:c("AddDialog.AppendFile.Or")}),Object($.jsxs)(Ea,{children:[Object($.jsx)(q,{color:"primary"}),Object($.jsx)("div",{children:c("AddDialog.AppendFile.ClickOrDrag")})]})]}))]})}function lr(e){var t=e.handleClose,n=e.hash,r=e.title,i=e.name,o=e.poster,c=Object(ce.a)().t,s=!!n,d=Object(a.useState)(n||""),p=Object(l.a)(d,2),j=p[0],b=p[1],u=Object(a.useState)(r||""),h=Object(l.a)(u,2),x=h[0],g=h[1],m=Object(a.useState)(""),O=Object(l.a)(m,2),f=O[0],y=O[1],w=Object(a.useState)(""),S=Object(l.a)(w,2),k=S[0],D=S[1],T=Object(a.useState)(o||""),M=Object(l.a)(T,2),B=M[0],R=M[1],L=Object(a.useState)(!1),A=Object(l.a)(L,2),z=A[0],F=A[1],E=Object(a.useState)(!1),G=Object(l.a)(E,2),N=G[0],I=G[1],U=Object(a.useState)(!1),H=Object(l.a)(U,2),W=H[0],V=H[1],Z=Object(a.useState)(),_=Object(l.a)(Z,2),K=_[0],Y=_[1],X=Object(a.useState)(s),q=Object(l.a)(X,2),Q=q[0],ee=q[1],te=In(),ae=Object(l.a)(te,1)[0],re=Object(a.useState)(),le=Object(l.a)(re,2),se=le[0],de=le[1],pe=Object(a.useState)("ru"===ae?"ru":"en"),je=Object(l.a)(pe,2),be=je[0],ue=je[1],he=Object(a.useState)(!1),xe=Object(l.a)(he,2),ge=xe[0],me=xe[1],Oe=Object(a.useState)(!1),fe=Object(l.a)(Oe,2),Ce=fe[0],ve=fe[1],ye=Object(a.useState)(!1),we=Object(l.a)(ye,2),Se=we[0],ke=we[1],De=Object(a.useState)(),Te=Object(l.a)(De,2),Pe=Te[0],Me=Te[1],Be=Object(ga.a)("torrents",J,{retry:1,refetchInterval:1e3}).data;Object(a.useEffect)((function(){Oa.a.remote(se||j,(function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.infoHash;return Me(n)}))}),[se,j]),Object(a.useEffect)((function(){if(Me){var e=Be.map((function(e){return e.hash}));V(e.includes(Pe))}}),[Pe,Be]),Object(a.useEffect)((function(){ge&&(Be.map((function(e){return e.hash})).includes(Pe)&&t())}),[ge,Be,Pe,t]);var Le=Object(Re.a)("@media (max-width:930px)"),Ae=Object(a.useCallback)((function(){var e,t;e=se||j,t=function(e){var t=e.parsedTitle,n=e.originalName;n&&(ve(!0),g(""),ke(!1),y(n),D(t))},Oa.a.remote(e,(function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=n.name,r=n.files;if(!a||e)return t({parsedTitle:null,originalName:null});var i=ie.a.parse(a).title,o=r?ie.a.parse(r[0].name).title:null,c=i;o&&(c=i.length2&&void 0!==arguments[2]?arguments[2]:{},a=n.shouldRefreshMainPoster,r=void 0!==a&&a;if(!e)return Y(),void ze();va(e,t).then((function(e){if(e){if(Y(e),!r&&Q)return;var t=Object(l.a)(e,1)[0];ya(t).then((function(e){e?(F(!0),R(t)):ze()}))}else{if(Y(),Q)return;ze()}}))}}),[Q]),Ee=Object(a.useMemo)((function(){return Nn()(Fe,700)}),[Fe]),Ge=Un(j);Object(a.useEffect)((function(){var e;if(!(null!==(e=j).match(Sa)||null!==e.match(wa)||null!==e.match(ka)||null!==e.match(Da)))return I(!1);I(!0),j!==Ge&&Ae()}),[Ge,se,j,Ae]);var Ne=Un(x);Object(a.useEffect)((function(){(x!==Ne||k)&&(Ce?(Fe(x||k,be),ve(!1)):x?Ee(x,be):(Ee.cancel(),k?Fe(k,be):!Q&&ze()))}),[x,k,Ne,Ee,Fe,be,Ce,Q]);return Object($.jsxs)(An.a,{open:!0,onClose:t,fullScreen:Le,fullWidth:!0,maxWidth:"md",children:[Object($.jsx)(fa,{children:c(s?"EditTorrent":"AddNewTorrent")}),Object($.jsxs)(Ta,{isEditMode:s,children:[!s&&Object($.jsx)(cr,{setIsUserInteractedWithPoster:ee,selectedFile:se,setSelectedFile:de,torrentSource:j,setTorrentSource:b}),Object($.jsx)(Ja,{originalTorrentTitle:f,setTitle:g,setPosterUrl:R,setIsPosterUrlCorrect:F,setIsUserInteractedWithPoster:ee,setPosterList:Y,isTorrentSourceCorrect:N,isHashAlreadyExists:W,title:x,parsedTitle:k,posterUrl:B,isPosterUrlCorrect:z,posterList:K,currentLang:ae,posterSearchLanguage:be,setPosterSearchLanguage:ue,posterSearch:Fe,removePoster:ze,updateTitleFromSource:Ae,torrentSource:j,isCustomTitleEnabled:Se,setIsCustomTitleEnabled:ke,isEditMode:s})]}),Object($.jsxs)(Ca,{children:[Object($.jsx)(ne.a,{onClick:t,color:"secondary",variant:"outlined",children:c("Cancel")}),Object($.jsx)(ne.a,{variant:"contained",style:{minWidth:"110px"},disabled:!j||W&&!s||!N,onClick:function(){if(me(!0),s)P.a.post(v(),{action:"set",hash:n,title:x||i,poster:B}).finally(t);else if(se){var e=new FormData;e.append("save","true"),e.append("file",se),x&&e.append("title",x),B&&e.append("poster",B),P.a.post("".concat(C,"/torrent/upload"),e).catch(t)}else P.a.post(v(),{action:"add",link:j,title:x,poster:B,save_to_db:!0}).catch(t)},color:"primary",children:ge?Object($.jsx)(oe.a,{style:{color:"white"},size:20}):c(s?"Save":"Add")})]})]})}var sr,dr,pr,jr,br,ur,hr,xr,gr,mr,Or,fr,Cr,vr=He.d.div(Ya||(Ya=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.theme.torrentCard.cardPrimaryColor;return Object(He.c)($a||($a=Object(Ue.a)(["\n border-radius: 5px;\n display: grid;\n grid-template-columns: 120px 260px 1fr;\n grid-template-rows: 180px;\n grid-template-areas: 'poster description buttons';\n gap: 10px;\n padding: 10px;\n background: ",";\n box-shadow: 0px 2px 4px -1px rgb(0 0 0 / 20%), 0px 4px 5px 0px rgb(0 0 0 / 14%), 0px 1px 10px 0px rgb(0 0 0 / 12%);\n\n @media (max-width: 1260px), (max-height: 500px) {\n grid-template-areas:\n 'poster description'\n 'buttons buttons';\n\n grid-template-columns: 70px 1fr;\n grid-template-rows: 110px max-content;\n }\n\n @media (max-width: 770px) {\n grid-template-columns: 60px 1fr;\n grid-template-rows: 90px max-content;\n }\n "])),t)})),yr=He.d.div(Xa||(Xa=Object(Ue.a)(["\n grid-area: poster;\n border-radius: 5px;\n overflow: hidden;\n text-align: center;\n\n ",";\n\n @media (max-width: 1260px), (max-height: 500px) {\n svg {\n width: 50%;\n }\n }\n"])),(function(e){var t=e.isPoster,n=e.theme.torrentCard,a=n.cardSecondaryColor,r=n.accentCardColor;return t?Object(He.c)(qa||(qa=Object(Ue.a)(["\n img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 5px;\n }\n "]))):Object(He.c)(Qa||(Qa=Object(Ue.a)(["\n display: grid;\n place-items: center;\n background: ",";\n border: 1px solid ",";\n\n svg {\n transform: translateY(-3px);\n }\n "])),a,r)})),wr=He.d.div(er||(er=Object(Ue.a)(["\n grid-area: buttons;\n display: grid;\n gap: 10px;\n\n @media (max-width: 1260px), (max-height: 500px) {\n grid-template-columns: repeat(4, 1fr);\n }\n\n @media (max-width: 340px) {\n gap: 5px;\n }\n"]))),Sr=He.d.div(tr||(tr=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.theme.torrentCard,n=t.cardSecondaryColor,a=t.accentCardColor;return Object(He.c)(nr||(nr=Object(Ue.a)(["\n grid-area: description;\n background: ",";\n border-radius: 5px;\n padding: 5px;\n display: grid;\n grid-template-rows: 55% 1fr;\n gap: 10px;\n\n @media (max-width: 770px) {\n grid-template-rows: 60% 1fr;\n gap: 3px;\n }\n\n .description-title-wrapper {\n display: flex;\n flex-direction: column;\n }\n\n .description-section-name {\n text-transform: uppercase;\n font-size: 10px;\n font-weight: 600;\n letter-spacing: 0.4px;\n color: ",";\n\n @media (max-width: 770px) {\n font-size: 0.4rem;\n }\n }\n\n .description-torrent-title {\n overflow: auto;\n word-break: break-all;\n }\n\n .description-statistics-wrapper {\n display: grid;\n grid-template-columns: 80px 80px 1fr;\n align-self: end;\n\n @media (max-width: 1260px), (max-height: 500px) {\n grid-template-columns: 70px 70px 1fr;\n }\n\n @media (max-width: 770px) {\n grid-template-columns: 65px 65px 1fr;\n }\n\n @media (max-width: 700px) {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n }\n }\n\n .description-statistics-element-wrapper {\n }\n\n .description-statistics-element-value {\n margin-left: 5px;\n margin-bottom: 10px;\n word-break: break-all;\n\n @media (max-width: 1260px), (max-height: 500px) {\n font-size: 0.7rem;\n margin-bottom: 0;\n margin-left: 0;\n }\n }\n\n .description-torrent-title,\n .description-statistics-element-value {\n @media (max-width: 770px) {\n font-size: 0.6rem;\n }\n\n @media (max-width: 410px) {\n font-size: 10px;\n }\n }\n "])),n,a)})),kr=He.d.button(ar||(ar=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.theme.torrentCard,n=t.buttonBGColor,a=t.accentCardColor;return Object(He.c)(rr||(rr=Object(Ue.a)(["\n border-radius: 5px;\n border: none;\n cursor: pointer;\n transition: 0.2s;\n display: flex;\n align-items: center;\n text-transform: uppercase;\n background: ",";\n color: #fff;\n font-size: 0.9rem;\n letter-spacing: 0.009em;\n padding: 0 12px;\n svg {\n width: 20px;\n }\n\n :hover {\n background: ",";\n }\n\n > :first-child {\n margin-right: 10px;\n }\n\n @media (max-width: 1260px), (max-height: 500px) {\n padding: 7px 10px;\n justify-content: center;\n font-size: 0.8rem;\n\n svg {\n display: none;\n }\n }\n\n @media (max-width: 770px) {\n font-size: 0.7rem;\n }\n\n @media (max-width: 420px) {\n font-size: 0.6rem;\n padding: 7px 5px;\n }\n "])),n,a)})),Dr=Object(a.forwardRef)((function(e,t){return Object($.jsx)(zn.a,Object(M.a)({direction:"up",ref:t},e))})),Tr=function(e){var t=e.torrent,n=Object(ce.a)().t,r=Object(a.useState)(!1),i=Object(l.a)(r,2),o=i[0],c=i[1],s=Object(a.useState)(!1),d=Object(l.a)(s,2),p=d[0],b=d[1],u=Object(Y.a)(),h=Object(Re.a)(u.breakpoints.down("md")),x=function(){return c(!1)},g=function(){return b(!1)},m=t.title,O=t.name,f=t.poster,C=t.torrent_size,y=t.download_speed,w=t.hash,S=function(){var e=function(e){var t,n;return(null===(t=ie.a.parse(m||""))||void 0===t?void 0:t[e])||(null===(n=ie.a.parse(O||""))||void 0===n?void 0:n[e])},t=[],n=K(e("title")),a=e("year"),r=e("resolution");return n&&t.push(n),a&&t.push("(".concat(a,")")),r&&t.push("[".concat(r,"]")),{parsedTitle:n=t.join(" ")}}().parsedTitle,k=Object(a.useState)(!1),D=Object(l.a)(k,2),T=D[0],M=D[1];return Object($.jsxs)($.Fragment,{children:[Object($.jsxs)(vr,{children:[Object($.jsx)(yr,{isPoster:f,children:f?Object($.jsx)("img",{src:f,alt:"poster"}):Object($.jsx)(X,{})}),Object($.jsxs)(wr,{children:[Object($.jsxs)(kr,{onClick:function(){return c(!0)},children:[Object($.jsx)(B.a,{}),Object($.jsx)("span",{children:n("Details")})]}),Object($.jsxs)(kr,{onClick:function(){return M(!0)},children:[Object($.jsx)(R.a,{}),Object($.jsx)("span",{children:n("Edit")})]}),Object($.jsxs)(kr,{onClick:function(){return P.a.post(v(),{action:"drop",hash:w})},children:[Object($.jsx)(j.a,{}),Object($.jsx)("span",{children:n("Drop")})]}),Object($.jsxs)(kr,{onClick:function(){return b(!0)},children:[Object($.jsx)(L.a,{}),Object($.jsx)("span",{children:n("Delete")})]})]}),Object($.jsxs)(Sr,{children:[Object($.jsxs)("div",{className:"description-title-wrapper",children:[Object($.jsx)("div",{className:"description-section-name",children:n("Name")}),Object($.jsx)("div",{className:"description-torrent-title",children:S})]}),Object($.jsxs)("div",{className:"description-statistics-wrapper",children:[Object($.jsxs)("div",{className:"description-statistics-element-wrapper",children:[Object($.jsx)("div",{className:"description-section-name",children:n("Size")}),Object($.jsx)("div",{className:"description-statistics-element-value",children:C>0&&V(C)})]}),Object($.jsxs)("div",{className:"description-statistics-element-wrapper",children:[Object($.jsx)("div",{className:"description-section-name",children:n("Speed")}),Object($.jsx)("div",{className:"description-statistics-element-value",children:y>0?Z(y):"---"})]}),Object($.jsxs)("div",{className:"description-statistics-element-wrapper",children:[Object($.jsx)("div",{className:"description-section-name",children:n("Peers")}),Object($.jsx)("div",{className:"description-statistics-element-value",children:_(t)||"---"})]})]})]})]}),Object($.jsx)(An.a,{open:o,onClose:x,fullScreen:h,fullWidth:!0,maxWidth:"xl",TransitionComponent:Dr,children:Object($.jsx)(Ln,{closeDialog:x,torrent:t})}),Object($.jsxs)(An.a,{open:p,onClose:g,children:[Object($.jsx)(Fn.a,{children:n("DeleteTorrent?")}),Object($.jsxs)(En.a,{children:[Object($.jsx)(ne.a,{variant:"outlined",onClick:g,color:"primary",children:n("Cancel")}),Object($.jsx)(ne.a,{variant:"contained",onClick:function(){P.a.post(v(),{action:"rem",hash:w}),g()},color:"primary",autoFocus:!0,children:n("OK")})]})]}),T&&Object($.jsx)(lr,{hash:w,title:m,name:O,poster:f,handleClose:function(){return M(!1)}})]})},Pr=Object(a.memo)(Tr),Mr=He.d.div(sr||(sr=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.theme.app.appSecondaryColor;return Object(He.c)(dr||(dr=Object(Ue.a)(["\n height: 100%;\n background: ",";\n display: grid;\n grid-template-columns: 60px 1fr;\n grid-template-rows: 60px 1fr;\n grid-template-areas:\n 'head head'\n 'side content';\n "])),Object(Le.a)(t,.8))})),Br=He.d.div(pr||(pr=Object(Ue.a)(["\n height: 100%;\n display: grid;\n place-items: center;\n"]))),Rr=He.d.div(jr||(jr=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.theme.primary;return Object(He.c)(br||(br=Object(Ue.a)(["\n background: ",";\n color: #fff;\n grid-area: head;\n display: grid;\n grid-auto-flow: column;\n align-items: center;\n grid-template-columns: repeat(2, max-content) 1fr;\n box-shadow: 0px 2px 4px -1px rgb(0 0 0 / 20%), 0px 4px 5px 0px rgb(0 0 0 / 14%), 0px 1px 10px 0px rgb(0 0 0 / 12%);\n padding: 0 16px;\n z-index: 3;\n "])),t)})),Lr=He.d.div(ur||(ur=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.isDrawerOpen,n=e.theme.app,a=n.appSecondaryColor,r=n.sidebarBGColor,i=n.sidebarFillColor;return Object(He.c)(hr||(hr=Object(Ue.a)(["\n grid-area: side;\n width: ",";\n z-index: 2;\n overflow-x: hidden;\n transition: width 195ms cubic-bezier(0.4, 0, 0.6, 1) 0ms;\n border-right: 1px solid ",";\n background: ",";\n color: ",";\n white-space: nowrap;\n\n svg {\n fill: ",";\n }\n "])),t?"400%":"100%",Object(Le.a)(a,.12),r,i,i)})),Ar=He.d.div(xr||(xr=Object(Ue.a)(["\n grid-area: content;\n padding: 20px;\n overflow: auto;\n\n display: grid;\n place-content: start;\n grid-template-columns: repeat(auto-fit, minmax(max-content, 570px));\n gap: 20px;\n\n @media (max-width: 1260px), (max-height: 500px) {\n padding: 10px;\n gap: 15px;\n grid-template-columns: repeat(3, 1fr);\n }\n\n @media (max-width: 1100px) {\n grid-template-columns: repeat(2, 1fr);\n }\n\n @media (max-width: 700px) {\n grid-template-columns: 1fr;\n }\n"]))),zr=He.d.div(gr||(gr=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.theme.app.headerToggleColor;return Object(He.c)(mr||(mr=Object(Ue.a)(["\n cursor: pointer;\n border-radius: 50%;\n background: ",";\n height: 35px;\n width: 35px;\n transition: all 0.2s;\n font-weight: 600;\n display: grid;\n place-items: center;\n color: #fff;\n\n :hover {\n background: ",";\n }\n\n @media (max-width: 700px) {\n height: 28px;\n width: 28px;\n font-size: 12px;\n\n svg {\n width: 17px;\n }\n }\n "])),t,Object(Le.a)(t,.7))})),Fr=He.d.div(Or||(Or=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.isButton;return Object(He.c)(fr||(fr=Object(Ue.a)(["\n display: grid;\n place-items: center;\n padding: 20px 40px;\n border-radius: 5px;\n\n ","\n\n lord-icon {\n width: 200px;\n height: 200px;\n }\n\n .icon-label {\n font-size: 20px;\n }\n "])),t&&Object(He.c)(Cr||(Cr=Object(Ue.a)(["\n background: #88cdaa;\n transition: 0.2s;\n cursor: pointer;\n\n :hover {\n background: #74c39c;\n }\n "]))))}));function Er(){var e=Object(ce.a)().t,t=Object(Y.a)().palette.primary.main;return Object($.jsxs)(Fr,{children:[Object($.jsx)("lord-icon",{src:"https://cdn.lordicon.com/wrprwmwt.json",trigger:"loop",colors:"primary:#121331,secondary:".concat(t),stroke:"26",scale:"60"}),Object($.jsx)("div",{className:"icon-label",children:e("Offline")})]})}function Gr(){var e=Object(ce.a)().t,t=Object(a.useState)(!1),n=Object(l.a)(t,2),r=n[0],i=n[1],o=Object(Y.a)().palette.primary.main;return Object($.jsxs)($.Fragment,{children:[Object($.jsxs)(Fr,{onClick:function(){return i(!0)},isButton:!0,children:[Object($.jsx)("lord-icon",{src:"https://cdn.lordicon.com/bbnkwdur.json",trigger:"loop",colors:"primary:#121331,secondary:".concat(o),stroke:"26",scale:"60"}),Object($.jsx)("div",{className:"icon-label",children:e("NoTorrentsAdded")})]}),r&&Object($.jsx)(lr,{handleClose:function(){return i(!1)}})]})}function Nr(e){var t=e.isOffline,n=e.isLoading,a=e.torrents;return n||t||!a.length?Object($.jsx)(Br,{children:t?Object($.jsx)(Er,{}):n?Object($.jsx)(oe.a,{color:"secondary"}):!a.length&&Object($.jsx)(Gr,{})}):Object($.jsx)(Ar,{children:a.map((function(e){return Object($.jsx)(Pr,{torrent:e},e.hash)}))})}var Ir=n(482),Ur=n(189),Hr=n.n(Ur),Wr=n(458),Vr=n(457),Zr=n(446);function _r(e){var t=e.onClose,n=Object(ce.a)().t;return Object($.jsxs)(An.a,{open:!0,onClose:t,"aria-labelledby":"form-dialog-title",fullWidth:!0,maxWidth:"xs",children:[Object($.jsx)(Fn.a,{id:"form-dialog-title",children:n("Donate")}),Object($.jsx)(Vr.a,{children:Object($.jsxs)(Zr.a,{children:[Object($.jsx)(Wr.a,{children:Object($.jsxs)(ae.a,{variant:"outlined",color:"primary","aria-label":"contained primary button group",children:[Object($.jsx)(ne.a,{onClick:function(){return window.open("https://www.paypal.com/paypalme/yourok","_blank")},children:"PayPal"}),Object($.jsx)(ne.a,{onClick:function(){return window.open("https://yoomoney.ru/to/410013733697114","_blank")},children:"IO.Money"})]})},"DonateLinks"),Object($.jsx)(Wr.a,{children:Object($.jsx)("div",{dangerouslySetInnerHTML:{__html:''}})},"DonateForm")]})}),Object($.jsx)(En.a,{children:Object($.jsx)(ne.a,{onClick:t,color:"secondary",variant:"contained",children:"Ok"})})]})}function Kr(){var e=Object(ce.a)().t,t=Object(a.useState)(!1),n=Object(l.a)(t,2),r=n[0],i=n[1],o=Object(a.useState)(!0),c=Object(l.a)(o,2),s=c[0],d=c[1],j=function(){d(!1),localStorage.setItem("snackbarIsClosed",!0)};return Object($.jsxs)($.Fragment,{children:[r&&Object($.jsx)(_r,{onClose:function(){return i(!1)}}),Object($.jsx)(Ir.a,{anchorOrigin:{vertical:"bottom",horizontal:"center"},open:s,onClose:j,message:e("Donate?"),action:Object($.jsxs)($.Fragment,{children:[Object($.jsxs)(ne.a,{style:{marginRight:"10px"},color:"secondary",size:"small",onClick:function(){i(!0),j()},children:[Object($.jsx)(Hr.a,{style:{marginRight:"10px"},fontSize:"small"}),e("Support")]}),Object($.jsx)(p.a,{size:"small","aria-label":"close",color:"inherit",onClick:j,children:Object($.jsx)(be.a,{fontSize:"small"})})]})})]})}var Jr,Yr=n(469),$r=Object(He.b)(Jr||(Jr=Object(Ue.a)(['\n *,\n *::before,\n *::after { \n margin: 0;\n padding: 0;\n box-sizing: inherit;\n }\n\n body { \n font-family: "Open Sans", sans-serif;\n box-sizing: border-box;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n letter-spacing: -0.1px;\n }\n\n button {\n font-family: "Open Sans", sans-serif;\n letter-spacing: -0.1px;\n }\n']))),Xr=n(467),qr=n(459),Qr=n(460),ei=n(468),ti=n(190),ni=n.n(ti);function ai(e){var t=e.isOffline,n=e.isLoading,r=Object(ce.a)().t,i=Object(a.useState)(!1),o=Object(l.a)(i,2),c=o[0],s=o[1];return Object($.jsxs)("div",{children:[Object($.jsxs)(Wr.a,{disabled:t||n,button:!0,onClick:function(){return s(!0)},children:[Object($.jsx)(qr.a,{children:Object($.jsx)(ni.a,{})}),Object($.jsx)(Qr.a,{primary:r("AddFromLink")})]}),c&&Object($.jsx)(lr,{handleClose:function(){return s(!1)}})]})}var ri,ii,oi,ci,li,si,di,pi,ji,bi,ui,hi,xi,gi,mi,Oi,fi,Ci,vi,yi,wi,Si,ki=n(192),Di=n.n(ki),Ti=n(480),Pi=n(462),Mi=n(477),Bi=n(464),Ri=n(191),Li=n.n(Ri),Ai="#b3dfc9",zi=ze.light.primary,Fi=Object(He.d)(fa)(ri||(ri=Object(Ue.a)(["\n display: grid;\n grid-auto-flow: column;\n align-items: center;\n justify-content: space-between;\n\n @media (max-width: 340px) {\n grid-auto-flow: row;\n }\n"]))),Ei=He.d.div(ii||(ii=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.theme.settingsDialog.footerBG;return Object(He.c)(oi||(oi=Object(Ue.a)(["\n padding: 20px;\n display: grid;\n grid-auto-flow: column;\n justify-content: end;\n gap: 10px;\n align-items: center;\n background: ",";\n\n @media (max-width: 500px) {\n grid-auto-flow: row;\n justify-content: stretch;\n }\n "])),t)})),Gi=(He.d.div(ci||(ci=Object(Ue.a)(["\n height: 1px;\n background-color: rgba(0, 0, 0, 0.12);\n margin: 30px 0;\n"]))),He.d.div(li||(li=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.isLoading,n=e.theme.settingsDialog.contentBG;return Object(He.c)(si||(si=Object(Ue.a)(["\n background: ",";\n overflow: auto;\n flex: 1;\n\n ","\n "])),n,t&&Object(He.c)(di||(di=Object(Ue.a)(["\n min-height: 500px;\n display: grid;\n place-items: center;\n "]))))}))),Ni=He.d.div(pi||(pi=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.color;return Object(He.c)(ji||(ji=Object(Ue.a)(["\n display: grid;\n grid-template-columns: max-content 100px 1fr;\n gap: 10px;\n align-items: flex-start;\n\n :not(:last-child) {\n margin-bottom: 5px;\n }\n\n :before {\n content: '';\n background: ",";\n width: 16px;\n height: 16px;\n border-radius: 50%;\n margin-top: 2px;\n }\n "])),t)})),Ii=He.d.div(bi||(bi=Object(Ue.a)(["\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 40px;\n padding: 20px;\n\n @media (max-width: 930px) {\n grid-template-columns: 1fr;\n }\n"]))),Ui=He.d.div(ui||(ui=Object(Ue.a)(["\n padding: 20px;\n"]))),Hi=He.d.div(hi||(hi=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.small,n=e.selected;return Object(He.c)(xi||(xi=Object(Ue.a)(["\n transition: 0.2s;\n cursor: default;\n text-align: center;\n\n ","\n\n ","\n "])),!n&&Object(He.c)(gi||(gi=Object(Ue.a)(["\n cursor: pointer;\n\n :hover {\n filter: brightness(0.8);\n }\n "]))),t?Object(He.c)(mi||(mi=Object(Ue.a)(["\n display: grid;\n grid-template-columns: max-content 1fr;\n gap: 20px;\n align-items: center;\n justify-items: start;\n margin-bottom: 20px;\n "]))):Object(He.c)(Oi||(Oi=Object(Ue.a)(["\n display: grid;\n place-items: center;\n gap: 10px;\n "]))))})),Wi=He.d.div(fi||(fi=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.selected,n=e.small;return Object(He.c)(Ci||(Ci=Object(Ue.a)(["\n width: ",";\n height: ",";\n border-radius: 50%;\n background: ",";\n\n svg {\n transform: rotate(-45deg) scale(0.75);\n }\n\n @media (max-width: 930px) {\n width: ",";\n height: ",";\n }\n "])),n?"60px":"150px",n?"60px":"150px",t?"#323637":"#dee3e5",n?"50px":"90px",n?"50px":"90px")})),Vi=He.d.div(vi||(vi=Object(Ue.a)(["\n display: grid;\n grid-template-rows: max-content 1fr;\n grid-template-areas: 'label label';\n place-items: center;\n\n @media (max-width: 930px) {\n justify-content: start;\n column-gap: 30px;\n }\n"]))),Zi=He.d.div(yi||(yi=Object(Ue.a)(["\n font-size: 25px;\n padding-bottom: 20px;\n\n small {\n display: block;\n font-size: 11px;\n }\n"]))),_i=He.d.div.attrs((function(e){var t=e.value;return{style:{background:"linear-gradient(to right, ".concat(Ai," 0%, ").concat(Ai," ").concat(t,"%, ").concat(zi," ").concat(t,"%, ").concat(zi," 100%)")}}}))(wi||(wi=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.label,n=e.preloadCachePercentage;return Object(He.c)(Si||(Si=Object(Ue.a)(["\n border: 1px solid #323637;\n padding: 10px 20px;\n border-radius: 5px;\n color: #000;\n margin-bottom: 10px;\n position: relative;\n\n :before {\n content: '","';\n display: grid;\n place-items: center;\n font-size: 20px;\n }\n\n :after {\n content: '';\n width: ","%;\n height: 100%;\n background: #323637;\n position: absolute;\n bottom: 0;\n left: 0;\n border-radius: 4px;\n filter: opacity(0.15);\n }\n "])),t,n)})),Ki={AcceptPeerCon:!0,CacheSize:96,ReaderReadAHead:95,UseDisk:!1,UploadRateLimit:0,TorrentsSavePath:"",ConnectionsLimit:23,DisableDHT:!1,DisablePEX:!1,DisableTCP:!1,DisableUPNP:!1,DisableUTP:!0,DisableUpload:!1,DownloadRateLimit:0,EnableDebug:!1,EnableIPv6:!1,ForceEncrypt:!1,PeersListenPort:0,PreloadCache:0,RemoveCacheOnDrop:!1,RetrackersMode:1,TorrentDisconnectTimeout:30},Ji=n(197),Yi=function(e){return{id:"full-width-tab-".concat(e),"aria-controls":"full-width-tabpanel-".concat(e)}},$i=function(e){var t=e.children,n=e.value,a=e.index,r=Object(Ji.a)(e,["children","value","index"]);return Object($.jsx)("div",Object(M.a)(Object(M.a)({role:"tabpanel",hidden:n!==a,id:"full-width-tabpanel-".concat(a)},r),{},{children:n===a&&Object($.jsx)($.Fragment,{children:t})}))},Xi=n(463),qi=n(461),Qi=n(487),eo=n(485);function to(e){var t=e.isProMode,n=e.title,a=e.value,r=e.setValue,i=e.sliderMin,o=e.sliderMax,c=e.inputMin,l=e.inputMax,s=e.step,d=void 0===s?1:s,p=e.onBlurCallback;return Object($.jsxs)($.Fragment,{children:[Object($.jsx)("div",{children:n}),Object($.jsxs)(qi.a,{container:!0,spacing:2,alignItems:"center",children:[Object($.jsx)(qi.a,{item:!0,xs:!0,children:Object($.jsx)(Qi.a,{min:i,max:o,value:a,onChange:function(e,t){return r(t)},step:d,color:"secondary"})}),t&&Object($.jsx)(qi.a,{item:!0,children:Object($.jsx)(eo.a,{value:a,margin:"dense",onChange:function(e){var t=e.target.value;return r(""===t?"":Number(t))},onBlur:function(e){var t=e.target.value;return tl?r(l):void(p&&p(t))},style:{width:"91px",marginTop:"-6px"},inputProps:{step:d,min:c,max:l,type:"number"}})})]})]})}var no=function(e){var t=e.style,n=Object(ce.a)().t;return Object($.jsxs)(Zi,{style:t,children:[n("SettingsDialog.CacheStorageLocation"),Object($.jsx)("small",{children:n("SettingsDialog.UseDiskDesc")})]})};function ao(e){var t=e.settings,n=e.inputForm,a=e.cachePercentage,r=e.preloadCachePercentage,i=e.cacheSize,o=e.isProMode,c=e.setCacheSize,l=e.setCachePercentage,s=e.setPreloadCachePercentage,d=e.updateSettings,p=Object(ce.a)().t,j=t||{},b=j.UseDisk,u=j.TorrentsSavePath,h=j.RemoveCacheOnDrop,x=Math.round(i/100*r);return Object($.jsxs)(Ii,{children:[Object($.jsxs)("div",{children:[Object($.jsx)(Zi,{children:p("SettingsDialog.CacheSettings")}),Object($.jsx)(_i,{value:100-a,label:"".concat(p("Cache")," ").concat(i," MB"),preloadCachePercentage:r}),Object($.jsxs)(Ni,{color:Ai,children:[Object($.jsxs)("div",{children:[100-a,"% (",Math.round(i/100*(100-a))," MB)"]}),Object($.jsx)("div",{children:p("SettingsDialog.CacheBeforeReaderDesc")})]}),Object($.jsxs)(Ni,{color:zi,children:[Object($.jsxs)("div",{children:[a,"% (",Math.round(i/100*a)," MB)"]}),Object($.jsx)("div",{children:p("SettingsDialog.CacheAfterReaderDesc")})]}),Object($.jsx)("br",{}),Object($.jsx)(to,{isProMode:o,title:p("SettingsDialog.CacheSize"),value:i,setValue:c,sliderMin:32,sliderMax:1024,inputMin:32,inputMax:999999,step:4,onBlurCallback:function(e){return c(4*Math.round(e/4))}}),Object($.jsx)(to,{isProMode:o,title:p("SettingsDialog.ReaderReadAHead"),value:a,setValue:l,sliderMin:40,sliderMax:95,inputMin:0,inputMax:100}),Object($.jsx)(to,{isProMode:o,title:"".concat(p("SettingsDialog.PreloadCache")," - ").concat(r,"% (").concat(x," MB)"),value:r,setValue:s,sliderMin:0,sliderMax:100,inputMin:0,inputMax:100})]}),b?Object($.jsxs)("div",{children:[Object($.jsx)(no,{}),Object($.jsxs)("div",{style:{display:"grid",gridAutoFlow:"column"},children:[Object($.jsxs)(Hi,{small:!0,onClick:function(){return d({UseDisk:!1})},children:[Object($.jsx)(Wi,{small:!0,children:Object($.jsx)(ee,{color:"#323637"})}),Object($.jsx)("div",{children:p("SettingsDialog.RAM")})]}),Object($.jsxs)(Hi,{small:!0,selected:!0,children:[Object($.jsx)(Wi,{small:!0,selected:!0,children:Object($.jsx)(Q,{color:"#dee3e5"})}),Object($.jsx)("div",{children:p("SettingsDialog.Disk")})]})]}),Object($.jsx)(Pi.a,{control:Object($.jsx)(Xi.a,{checked:h,onChange:n,id:"RemoveCacheOnDrop",color:"secondary"}),label:p("SettingsDialog.RemoveCacheOnDrop"),labelPlacement:"start"}),Object($.jsx)("div",{children:Object($.jsx)("small",{children:p("SettingsDialog.RemoveCacheOnDropDesc")})}),Object($.jsx)("br",{}),Object($.jsx)(Za.a,{onChange:n,margin:"normal",id:"TorrentsSavePath",label:p("SettingsDialog.TorrentsSavePath"),value:u,type:"url",variant:"outlined",fullWidth:!0})]}):Object($.jsxs)(Vi,{children:[Object($.jsx)(no,{style:{placeSelf:"start",gridArea:"label"}}),Object($.jsxs)(Hi,{selected:!0,children:[Object($.jsx)(Wi,{selected:!0,children:Object($.jsx)(ee,{color:"#dee3e5"})}),Object($.jsx)("div",{children:p("SettingsDialog.RAM")})]}),Object($.jsxs)(Hi,{onClick:function(){return d({UseDisk:!0})},children:[Object($.jsx)(Wi,{children:Object($.jsx)(Q,{color:"#323637"})}),Object($.jsx)("div",{children:p("SettingsDialog.Disk")})]})]})]})}var ro=n(486),io=n(476);function oo(e){var t=e.settings,n=e.inputForm,a=Object(ce.a)().t,r=t||{},i=r.AcceptPeerCon,o=r.RetrackersMode,c=r.TorrentDisconnectTimeout,l=r.EnableIPv6,s=r.ForceEncrypt,d=r.DisableTCP,p=r.DisableUTP,j=r.DisableUPNP,b=r.DisableDHT,u=r.DisablePEX,h=r.DisableUpload,x=r.DownloadRateLimit,g=r.UploadRateLimit,m=r.ConnectionsLimit,O=r.PeersListenPort;return Object($.jsxs)(Ui,{children:[Object($.jsx)(Zi,{children:a("SettingsDialog.AdditionalSettings")}),Object($.jsx)(Pi.a,{control:Object($.jsx)(Xi.a,{checked:l,onChange:n,id:"EnableIPv6",color:"secondary"}),label:"IPv6",labelPlacement:"start"}),Object($.jsx)(Pi.a,{control:Object($.jsx)(Xi.a,{checked:!d,onChange:n,id:"DisableTCP",color:"secondary"}),label:"TCP (Transmission Control Protocol)",labelPlacement:"start"}),Object($.jsx)(Pi.a,{control:Object($.jsx)(Xi.a,{checked:!p,onChange:n,id:"DisableUTP",color:"secondary"}),label:"\u03bcTP (Micro Transport Protocol)",labelPlacement:"start"}),Object($.jsx)(Pi.a,{control:Object($.jsx)(Xi.a,{checked:!u,onChange:n,id:"DisablePEX",color:"secondary"}),label:"PEX (Peer Exchange)",labelPlacement:"start"}),Object($.jsx)(Pi.a,{control:Object($.jsx)(Xi.a,{checked:s,onChange:n,id:"ForceEncrypt",color:"secondary"}),label:a("SettingsDialog.ForceEncrypt"),labelPlacement:"start"}),Object($.jsx)(Za.a,{onChange:n,margin:"normal",id:"TorrentDisconnectTimeout",label:a("SettingsDialog.TorrentDisconnectTimeout"),InputProps:{endAdornment:Object($.jsx)(_a.a,{position:"end",children:a("Seconds")})},value:c,type:"number",variant:"outlined",fullWidth:!0}),Object($.jsx)("br",{}),Object($.jsx)(Za.a,{onChange:n,margin:"normal",id:"ConnectionsLimit",label:a("SettingsDialog.ConnectionsLimit"),helperText:a("SettingsDialog.ConnectionsLimitHint"),value:m,type:"number",variant:"outlined",fullWidth:!0}),Object($.jsx)("br",{}),Object($.jsx)(Pi.a,{control:Object($.jsx)(Xi.a,{checked:!b,onChange:n,id:"DisableDHT",color:"secondary"}),label:a("SettingsDialog.DHT"),labelPlacement:"start"}),Object($.jsx)(Pi.a,{control:Object($.jsx)(Xi.a,{checked:i,onChange:n,id:"AcceptPeerCon",color:"secondary"}),label:a("SettingsDialog.AcceptPeerCon"),labelPlacement:"start"}),Object($.jsx)("br",{}),Object($.jsx)(Za.a,{onChange:n,margin:"normal",id:"DownloadRateLimit",label:a("SettingsDialog.DownloadRateLimit"),InputProps:{endAdornment:Object($.jsx)(_a.a,{position:"end",children:a("Kilobytes")})},value:x,type:"number",variant:"outlined",fullWidth:!0}),Object($.jsx)("br",{}),Object($.jsx)(Pi.a,{control:Object($.jsx)(Xi.a,{checked:!h,onChange:n,id:"DisableUpload",color:"secondary"}),label:a("SettingsDialog.Upload"),labelPlacement:"start"}),Object($.jsx)(Za.a,{onChange:n,margin:"normal",id:"UploadRateLimit",label:a("SettingsDialog.UploadRateLimit"),InputProps:{endAdornment:Object($.jsx)(_a.a,{position:"end",children:a("Kilobytes")})},value:g,type:"number",variant:"outlined",fullWidth:!0}),Object($.jsx)("br",{}),Object($.jsx)(Za.a,{onChange:n,margin:"normal",id:"PeersListenPort",label:a("SettingsDialog.PeersListenPort"),value:O,type:"number",variant:"outlined",fullWidth:!0}),Object($.jsx)(Pi.a,{control:Object($.jsx)(Xi.a,{checked:!j,onChange:n,id:"DisableUPNP",color:"secondary"}),label:"UPnP (Universal Plug and Play)",labelPlacement:"start"}),Object($.jsx)("br",{}),Object($.jsx)(ro.a,{htmlFor:"RetrackersMode",children:a("SettingsDialog.RetrackersMode")}),Object($.jsxs)(io.a,{onChange:n,margin:"normal",type:"number",native:!0,id:"RetrackersMode",value:o,variant:"outlined",children:[Object($.jsx)("option",{value:0,children:a("SettingsDialog.DontAddRetrackers")}),Object($.jsx)("option",{value:1,children:a("SettingsDialog.AddRetrackers")}),Object($.jsx)("option",{value:2,children:a("SettingsDialog.RemoveRetrackers")}),Object($.jsx)("option",{value:3,children:a("SettingsDialog.ReplaceRetrackers")})]}),Object($.jsx)("br",{})]})}function co(e){var t=e.handleClose,n=Object(ce.a)().t,r=Object(Re.a)("@media (max-width:930px)"),i=Object(Y.a)().direction,o=Object(a.useState)(),c=Object(l.a)(o,2),s=c[0],d=c[1],p=Object(a.useState)(0),j=Object(l.a)(p,2),b=j[0],u=j[1],h=Object(a.useState)(32),x=Object(l.a)(h,2),g=x[0],m=x[1],O=Object(a.useState)(40),f=Object(l.a)(O,2),C=f[0],v=f[1],y=Object(a.useState)(0),S=Object(l.a)(y,2),k=S[0],D=S[1],T=Object(a.useState)(JSON.parse(localStorage.getItem("isProMode"))||!1),B=Object(l.a)(T,2),R=B[0],L=B[1];Object(a.useEffect)((function(){P.a.post(w(),{action:"get"}).then((function(e){var t=e.data;d(Object(M.a)(Object(M.a)({},t),{},{CacheSize:t.CacheSize/1048576}))}))}),[]);var A=function(e){var t=e.target,n=t.type,a=t.value,r=t.checked,i=t.id,o=JSON.parse(JSON.stringify(s));"number"===n||"select-one"===n?o[i]=Number(a):"checkbox"===n?o[i]="DisableTCP"===i||"DisableUTP"===i||"DisableUPNP"===i||"DisableDHT"===i||"DisablePEX"===i||"DisableUpload"===i?Boolean(!r):Boolean(r):"url"===n&&(o[i]=a),d(o)},z=s||{},F=z.CacheSize,E=z.ReaderReadAHead,G=z.PreloadCache;Object(a.useEffect)((function(){isNaN(F)||isNaN(E)||isNaN(G)||(m(F),v(E),D(G))}),[F,E,G]);var N=function(e){return d(Object(M.a)(Object(M.a)({},s),e))};return Object($.jsxs)(An.a,{open:!0,onClose:t,fullScreen:r,fullWidth:!0,maxWidth:"md",children:[Object($.jsxs)(Fi,{children:[Object($.jsx)("div",{children:n("SettingsDialog.Settings")}),Object($.jsx)(Pi.a,{control:Object($.jsx)(Ti.a,{checked:R,onChange:function(e){var t=e.target.checked;L(t),localStorage.setItem("isProMode",t),t||u(0)},style:{color:"white"}}),label:n("SettingsDialog.ProMode")})]}),Object($.jsx)(de.a,{position:"static",color:"default",children:Object($.jsxs)(Mi.a,{value:b,onChange:function(e,t){return u(t)},indicatorColor:"secondary",textColor:"secondary",variant:"fullWidth",children:[Object($.jsx)(Bi.a,Object(M.a)({label:n("SettingsDialog.Tabs.Main")},Yi(0))),Object($.jsx)(Bi.a,Object(M.a)({disabled:!R,label:Object($.jsxs)($.Fragment,{children:[Object($.jsx)("div",{children:n("SettingsDialog.Tabs.Additional")}),!R&&Object($.jsx)("div",{style:{fontSize:"9px"},children:n("SettingsDialog.Tabs.AdditionalDisabled")})]})},Yi(1)))]})}),Object($.jsx)(Gi,{isLoading:!s,children:s?Object($.jsx)($.Fragment,{children:Object($.jsxs)(Li.a,{axis:"rtl"===i?"x-reverse":"x",index:b,onChangeIndex:function(e){return u(e)},children:[Object($.jsx)($i,{value:b,index:0,dir:i,children:Object($.jsx)(ao,{settings:s,inputForm:A,cachePercentage:C,preloadCachePercentage:k,cacheSize:g,isProMode:R,setCacheSize:m,setCachePercentage:v,setPreloadCachePercentage:D,updateSettings:N})}),Object($.jsx)($i,{value:b,index:1,dir:i,children:Object($.jsx)(oo,{settings:s,inputForm:A})})]})}):Object($.jsx)(oe.a,{color:"secondary"})}),Object($.jsxs)(Ei,{children:[Object($.jsx)(ne.a,{onClick:t,color:"secondary",variant:"outlined",children:n("Cancel")}),Object($.jsx)(ne.a,{onClick:function(){m(Ki.CacheSize),v(Ki.ReaderReadAHead),D(Ki.PreloadCache),N(Ki)},color:"secondary",variant:"outlined",children:n("SettingsDialog.ResetToDefault")}),Object($.jsx)(ne.a,{variant:"contained",onClick:function(){t();var e=JSON.parse(JSON.stringify(s));e.CacheSize=1024*g*1024,e.ReaderReadAHead=C,e.PreloadCache=k,P.a.post(w(),{action:"set",sets:e})},color:"secondary",children:n("Save")})]})]})}function lo(e){var t=e.isOffline,n=e.isLoading,r=Object(ce.a)().t,i=Object(a.useState)(!1),o=Object(l.a)(i,2),c=o[0],s=o[1];return Object($.jsxs)("div",{children:[Object($.jsxs)(Wr.a,{disabled:t||n,button:!0,onClick:function(){return s(!0)},children:[Object($.jsx)(qr.a,{children:Object($.jsx)(Di.a,{})}),Object($.jsx)(Qr.a,{primary:r("SettingsDialog.Settings")})]}),c&&Object($.jsx)(co,{handleClose:function(){return s(!1)}})]})}var so=n(193),po=n.n(so);function jo(e){var t=e.isOffline,n=e.isLoading,r=Object(ce.a)().t,i=Object(a.useState)(!1),o=Object(l.a)(i,2),c=o[0],s=o[1],d=function(){return s(!1)};return Object($.jsxs)($.Fragment,{children:[Object($.jsxs)(Wr.a,{disabled:t||n,button:!0,onClick:function(){return s(!0)},children:[Object($.jsx)(qr.a,{children:Object($.jsx)(po.a,{})}),Object($.jsx)(Qr.a,{primary:r("RemoveAll")})]},r("RemoveAll")),Object($.jsxs)(An.a,{open:c,onClose:d,children:[Object($.jsx)(Fn.a,{children:r("DeleteTorrents?")}),Object($.jsxs)(En.a,{children:[Object($.jsx)(ne.a,{variant:"outlined",onClick:d,color:"secondary",children:r("Cancel")}),Object($.jsx)(ne.a,{variant:"contained",onClick:function(){fetch(v(),{method:"post",body:JSON.stringify({action:"list"}),headers:{Accept:"application/json, text/plain, */*","Content-Type":"application/json"}}).then((function(e){return e.json()})).then((function(e){e.forEach((function(e){fetch(v(),{method:"post",body:JSON.stringify({action:"rem",hash:e.hash}),headers:{Accept:"application/json, text/plain, */*","Content-Type":"application/json"}})}))})),d()},color:"secondary",autoFocus:!0,children:r("OK")})]})]})]})}var bo,uo,ho,xo,go,mo,Oo,fo,Co,vo,yo=n(194),wo=n.n(yo),So=n(465),ko=He.d.div(bo||(bo=Object(Ue.a)(["\n height: 100%;\n display: grid;\n grid-template-rows: max-content 1fr max-content;\n"]))),Do=He.d.section(uo||(uo=Object(Ue.a)(["\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 36px;\n font-weight: 300;\n padding: 20px;\n\n img {\n width: 64px;\n }\n\n @media (max-width: 930px) {\n font-size: 24px;\n padding: 10px 20px;\n\n img {\n width: 60px;\n }\n }\n"]))),To=He.d.section(ho||(ho=Object(Ue.a)(["\n padding: 20px;\n text-align: center;\n font-size: 24px;\n font-weight: 300;\n background: #e8e5eb;\n color: #323637;\n\n @media (max-width: 930px) {\n font-size: 20px;\n padding: 30px 20px;\n }\n"]))),Po=He.d.section(xo||(xo=Object(Ue.a)(["\n padding: 20px;\n\n > span {\n font-size: 20px;\n display: block;\n margin-bottom: 15px;\n }\n\n a {\n text-decoration: none;\n }\n\n > div {\n display: grid;\n gap: 10px;\n grid-template-columns: repeat(4, max-content);\n\n @media (max-width: 930px) {\n grid-template-columns: repeat(3, 1fr);\n }\n\n @media (max-width: 780px) {\n grid-template-columns: repeat(2, 1fr);\n }\n\n @media (max-width: 550px) {\n grid-template-columns: 1fr;\n }\n }\n"]))),Mo=He.d.div(go||(go=Object(Ue.a)(["\n padding: 20px;\n display: flex;\n justify-content: flex-end;\n background: #e8e5eb;\n"]))),Bo=He.d.a(mo||(mo=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.isLink;return Object(He.c)(Oo||(Oo=Object(Ue.a)(["\n display: inline-flex;\n align-items: center;\n justify-content: start;\n border: 1px solid;\n padding: 10px;\n border-radius: 5px;\n text-transform: uppercase;\n text-decoration: none;\n background: #545a5e;\n color: #f1eff3;\n transition: 0.2s;\n\n > * {\n transition: 0.2s;\n }\n\n ","\n "])),t?Object(He.c)(fo||(fo=Object(Ue.a)(["\n :hover {\n filter: brightness(1.1);\n\n > * {\n transform: translateY(-1px);\n }\n }\n "]))):Object(He.c)(Co||(Co=Object(Ue.a)(["\n cursor: default;\n "]))))})),Ro=He.d.div(vo||(vo=Object(Ue.a)(["\n display: grid;\n margin-right: 10px;\n"])));function Lo(e){var t=e.name,n=e.link;return Object($.jsxs)(Bo,{isLink:!!n,href:n,target:"_blank",rel:"noreferrer",children:[n&&Object($.jsx)(Ro,{children:Object($.jsx)(So.a,{})}),Object($.jsx)("div",{children:t})]})}function Ao(){var e=Object(ce.a)().t,t=Object(a.useState)(!1),n=Object(l.a)(t,2),r=n[0],i=n[1],o=Object(a.useState)(""),c=Object(l.a)(o,2),s=c[0],d=c[1],p=Object(Re.a)("@media (max-width:930px)");return Object(a.useEffect)((function(){P.a.get(k()).then((function(e){var t=e.data;return d(t)}))}),[]),Object($.jsxs)($.Fragment,{children:[Object($.jsxs)(Wr.a,{button:!0,onClick:function(){return i(!0)},children:[Object($.jsx)(qr.a,{children:Object($.jsx)(wo.a,{})}),Object($.jsx)(Qr.a,{primary:e("About")})]},"Settings"),Object($.jsx)(An.a,{open:r,onClose:function(){return i(!1)},"aria-labelledby":"form-dialog-title",fullScreen:p,maxWidth:"xl",children:Object($.jsxs)(ko,{children:[Object($.jsxs)(Do,{children:[Object($.jsx)("div",{children:e("About")}),s,Object($.jsx)("img",{src:"/apple-touch-icon.png",alt:"ts-icon"})]}),Object($.jsxs)("div",{style:{overflow:"auto"},children:[Object($.jsx)(To,{children:e("ThanksToEveryone")}),Object($.jsxs)(Po,{children:[Object($.jsx)("span",{children:e("Links")}),Object($.jsxs)("div",{children:[Object($.jsx)(Lo,{name:e("ProjectSource"),link:"https://github.com/YouROK/TorrServer"}),Object($.jsx)(Lo,{name:e("Releases"),link:"https://github.com/YouROK/TorrServer/releases"})]})]}),Object($.jsxs)(Po,{children:[Object($.jsx)("span",{children:e("SpecialThanks")}),Object($.jsxs)("div",{children:[Object($.jsx)(Lo,{name:"Daniel Shleifman",link:"https://github.com/dancheskus"}),Object($.jsx)(Lo,{name:"Matt Joiner",link:"https://github.com/anacrolix"}),Object($.jsx)(Lo,{name:"nikk",link:"https://github.com/tsynik"}),Object($.jsx)(Lo,{name:"tw1cker \u0420\u0443\u0441\u043b\u0430\u043d \u041f\u0430\u0445\u043d\u0435\u0432",link:"https://github.com/Nemiroff"}),Object($.jsx)(Lo,{name:"SpAwN_LMG",link:"https://github.com/spawnlmg"})]})]})]}),Object($.jsx)(Mo,{children:Object($.jsx)(ne.a,{onClick:function(){return i(!1)},color:"primary",variant:"contained",children:e("Close")})})]})})]})}var zo=n(466);function Fo(e){var t=e.isOffline,n=e.isLoading,r=Object(ce.a)().t,i=Object(a.useState)(!1),o=Object(l.a)(i,2),c=o[0],s=o[1],d=function(){return s(!1)};return Object($.jsxs)($.Fragment,{children:[Object($.jsxs)(Wr.a,{disabled:t||n,button:!0,onClick:function(){return s(!0)},children:[Object($.jsx)(qr.a,{children:Object($.jsx)(zo.a,{})}),Object($.jsx)(Qr.a,{primary:r("CloseServer")})]},r("CloseServer")),Object($.jsxs)(An.a,{open:c,onClose:d,children:[Object($.jsx)(Fn.a,{children:r("CloseServer?")}),Object($.jsxs)(En.a,{children:[Object($.jsx)(ne.a,{variant:"outlined",onClick:d,color:"secondary",children:r("Cancel")}),Object($.jsx)(ne.a,{variant:"contained",onClick:function(){fetch("".concat(C,"/shutdown")),d()},color:"secondary",autoFocus:!0,children:r("TurnOff")})]})]})]})}var Eo=function(e){var t=e.isDrawerOpen,n=e.setIsDonationDialogOpen,a=e.isOffline,r=e.isLoading,i=Object(ce.a)().t;return Object($.jsxs)(Lr,{isDrawerOpen:t,children:[Object($.jsxs)(Zr.a,{children:[Object($.jsx)(ai,{isOffline:a,isLoading:r}),Object($.jsx)(jo,{isOffline:a,isLoading:r})]}),Object($.jsx)(Xr.a,{}),Object($.jsxs)(Zr.a,{children:[Object($.jsx)(lo,{isOffline:a,isLoading:r}),Object($.jsx)(Ao,{}),Object($.jsxs)(Wr.a,{button:!0,onClick:function(){return n(!0)},children:[Object($.jsx)(qr.a,{children:Object($.jsx)(ei.a,{})}),Object($.jsx)(Qr.a,{primary:i("Donate")})]}),Object($.jsx)(Fo,{isOffline:a,isLoading:r})]})]})},Go=Object(a.memo)(Eo),No=Object(a.createContext)();function Io(){var e,t=Object(a.useState)(!1),n=Object(l.a)(t,2),r=n[0],i=n[1],o=Object(a.useState)(!1),c=Object(l.a)(o,2),g=c[0],m=c[1],O=Object(a.useState)(""),f=Object(l.a)(O,2),C=f[0],v=f[1],y=function(){var e=localStorage.getItem("themeMode"),t=Object(Re.a)("(prefers-color-scheme: dark)"),n=Object(a.useState)("dark"===e||t),r=Object(l.a)(n,2),i=r[0],o=r[1],c=Object(a.useState)(e||Fe),s=Object(l.a)(c,2),d=s[0],p=s[1];Object(a.useEffect)((function(){d===Fe&&o(!1),d===Ee&&o(!0),d===Ge&&o(t)}),[t,d]);var j=i?Ee:Fe,b=Object(a.useMemo)((function(){return Object(Be.a)({typography:Ne,palette:{type:j,primary:{main:ze[j].primary},secondary:{main:ze[j].secondary}},overrides:{MuiInputBase:{input:{color:ze[j].labels}},MuiFormControlLabel:{labelPlacementStart:{display:"flex",justifyContent:"space-between",marginStart:0,marginTop:6,marginBottom:2}},MuiInputLabel:{root:{color:ze[j].labels,marginBottom:8,"&$focused":{color:ze[j].labels}}}}})}),[j]);return[i,d,function(e){p(e),localStorage.setItem("themeMode",e)},b]}(),w=Object(l.a)(y,4),S=w[0],T=w[1],B=w[2],R=w[3],L=In(),A=Object(l.a)(L,2),z=A[0],F=A[1],E=Object(a.useState)(!1),G=Object(l.a)(E,2),N=G[0],I=G[1],U=Object(ga.a)("torrents",J,{retry:1,refetchInterval:1e3,onError:function(){return I(!0)},onSuccess:function(){return I(!1)}}),H=U.data,W=U.isLoading;return Object(a.useEffect)((function(){P.a.get(k()).then((function(e){var t=e.data;return v(t)}))}),[]),Object($.jsxs)($.Fragment,{children:[Object($.jsx)($r,{}),Object($.jsx)(No.Provider,{value:{isDarkMode:S},children:Object($.jsx)(Yr.a,{theme:R,children:Object($.jsxs)(He.a,{theme:(e=S?Ee:Fe,Object(M.a)(Object(M.a)({},Ae[e]),ze[e])),children:[Object($.jsx)(s.a,{}),Object($.jsx)(D.a,{children:Object($.jsxs)(Mr,{children:[Object($.jsxs)(Rr,{children:[Object($.jsx)(p.a,{edge:"start",color:"inherit",onClick:function(){return i(!r)},style:{marginRight:"6px"},children:r?Object($.jsx)(j.a,{}):Object($.jsx)(b.a,{})}),Object($.jsxs)(d.a,{variant:"h6",noWrap:!0,children:["TorrServer ",C]}),Object($.jsxs)("div",{style:{justifySelf:"end",display:"grid",gridTemplateColumns:"repeat(2, 1fr)",gap:"10px"},children:[Object($.jsx)(zr,{onClick:function(){T===Fe&&B(Ee),T===Ee&&B(Ge),T===Ge&&B(Fe)},children:T===Fe?Object($.jsx)(u.a,{}):T===Ee?Object($.jsx)(h.a,{}):Object($.jsx)(x.a,{})}),Object($.jsx)(zr,{onClick:function(){return F("en"===z?"ru":"en")},children:"en"===z?"EN":"RU"})]})]}),Object($.jsx)(Go,{isOffline:N,isLoading:W,isDrawerOpen:r,setIsDonationDialogOpen:m}),Object($.jsx)(Nr,{isOffline:N,torrents:H,isLoading:W}),Object($.jsx)(Yr.a,{theme:Ie,children:g&&Object($.jsx)(_r,{onClose:function(){return m(!1)}})}),!JSON.parse(localStorage.getItem("snackbarIsClosed"))&&Object($.jsx)(Kr,{})]})})]})})})]})}var Uo=new o.a;i.a.render(Object($.jsx)(a.StrictMode,{children:Object($.jsx)(c.a,{client:Uo,children:Object($.jsx)(Io,{})})}),document.getElementById("root"))}},[[382,1,2]]]); +//# sourceMappingURL=main.0ae58375.chunk.js.map \ No newline at end of file diff --git a/server/web/pages/template/pages/static/js/main.0ae58375.chunk.js.map b/server/web/pages/template/pages/static/js/main.0ae58375.chunk.js.map new file mode 100644 index 0000000..01d5436 --- /dev/null +++ b/server/web/pages/template/pages/static/js/main.0ae58375.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["utils/Hosts.js","i18n.js","utils/Utils.js","icons/index.jsx","components/DialogTorrentDetailsContent/customHooks.jsx","components/DialogTorrentDetailsContent/DialogHeader.jsx","style/colors.js","style/materialUISetup.js","components/DialogTorrentDetailsContent/TorrentCache/snakeSettings.js","components/DialogTorrentDetailsContent/TorrentCache/style.js","components/DialogTorrentDetailsContent/TorrentCache/index.jsx","components/DialogTorrentDetailsContent/TorrentCache/getShortCacheMap.js","components/DialogTorrentDetailsContent/Table/style.js","components/DialogTorrentDetailsContent/Table/index.jsx","components/DialogTorrentDetailsContent/style.js","components/DialogTorrentDetailsContent/DetailedView/style.js","components/DialogTorrentDetailsContent/StatisticsField.jsx","components/DialogTorrentDetailsContent/widgets/useGetWidgetColors.jsx","components/DialogTorrentDetailsContent/widgets/index.jsx","torrentStates.js","components/DialogTorrentDetailsContent/DetailedView/index.jsx","components/DialogTorrentDetailsContent/TorrentFunctions/style.js","components/DialogTorrentDetailsContent/TorrentFunctions/index.jsx","components/DialogTorrentDetailsContent/helpers.js","components/DialogTorrentDetailsContent/index.jsx","utils/useChangeLanguage.js","utils/usePreviousState.js","style/DialogStyles.js","components/Add/helpers.js","components/Add/style.js","components/Add/RightSideComponent.jsx","components/Add/LeftSideComponent.jsx","components/Add/AddDialog.jsx","components/TorrentCard/style.js","components/TorrentCard/index.jsx","components/App/style.js","components/TorrentList/style.js","components/TorrentList/NoServerConnection.jsx","components/TorrentList/AddFirstTorrent.jsx","components/TorrentList/index.jsx","components/Donate/DonateDialog.jsx","components/Donate/index.jsx","style/GlobalStyle.js","components/Add/index.jsx","components/Settings/style.js","components/Settings/defaultSettings.js","components/Settings/tabComponents.jsx","components/Settings/SliderInput.jsx","components/Settings/PrimarySettingsComponent.jsx","components/Settings/SecondarySettingsComponent.jsx","components/Settings/SettingsDialog.jsx","components/Settings/index.jsx","components/RemoveAll.jsx","components/About/style.js","components/About/LinkComponent.jsx","components/About/index.jsx","components/CloseServer.jsx","components/App/Sidebar.jsx","components/App/index.jsx","style/getStyledComponentsTheme.js","index.jsx"],"names":["window","location","protocol","hostname","port","torrserverHost","torrentsHost","viewedHost","settingsHost","streamHost","echoHost","i18n","use","LanguageDetector","initReactI18next","init","fallbackLng","interpolation","escapeValue","resources","en","translation","translationEN","ru","translationRU","humanizeSize","size","i","Math","floor","log","pow","toFixed","t","humanizeSpeed","speed","getPeerString","torrent","connected_seeders","active_peers","total_peers","removeRedundantCharacters","string","newString","forEach","el","leftBracketRegexFormula","leftBracketRegex","RegExp","leftBracketAmount","matchAll","length","rightBracketRegexFormula","rightBracketRegex","removeFormula","removeRegex","replace","hasThreeDotsAtTheEnd","match","trimmedString","trim","getTorrents","a","axios","post","action","data","Error","NoImageIcon","color","primary","useTheme","palette","main","height","width","fill","xmlns","xmlnsXlink","version","x","y","viewBox","enableBackground","xmlSpace","d","points","AddItemIcon","id","opacity","USBIcon","RAMIcon","TorrentIcon","secondaryColor","useUpdateCache","hash","useState","cache","setCache","componentIsMounted","useRef","timerID","useEffect","current","setInterval","updateCache","newCache","then","catch","clearInterval","useStyles","makeStyles","appBar","position","title","marginLeft","flex","DialogHeader","onClose","onBack","useTranslation","classes","AppBar","className","Toolbar","IconButton","edge","onClick","aria-label","ArrowBack","Typography","variant","Button","autoFocus","themeColors","light","app","headerToggleColor","appSecondaryColor","sidebarBGColor","sidebarFillColor","torrentCard","accentCardColor","buttonBGColor","rgba","cardPrimaryColor","cardSecondaryColor","dialogTorrentDetailsContent","posterBGColor","gradientStartColor","gradientEndColor","chacheSectionBGColor","widgetFontColor","titleFontColor","subNameFontColor","torrentFilesSectionBGColor","detailedView","cacheSectionBGColor","addDialog","fontColor","notificationErrorBGColor","notificationSuccessBGColor","languageSwitchBGColor","languageSwitchFontColor","torrentFunctions","table","defaultPrimaryColor","defaultSecondaryColor","defaultTertiaryColor","settingsDialog","contentBG","footerBG","dark","mainColors","secondary","labels","THEME_MODES","typography","fontFamily","lightTheme","createMuiTheme","type","snakeSettings","default","borderWidth","pieceSize","gapBetweenPieces","borderColor","completeColor","backgroundColor","progressColor","readerColor","rangeColor","mini","cacheMaxHeight","ScrollNotification","styled","div","SnakeWrapper","isMini","themeType","css","TorrentCache","shotCacheMap","dimensions","setDimensions","canvasRef","ctxRef","cacheMap","setCacheMap","PiecesCount","Pieces","Readers","map","Size","Length","newPiece","percentage","r","Reader","isReader","Start","End","isReaderRange","push","useCreateCacheMap","settingsTarget","theme","useContext","DarkModeContext","isDarkMode","canvasWidth","pieceSizeWithGap","piecesInOneRow","preloadPiecesAmount","cacheMapWithoutEmptyBlocks","filter","getFullAmountOfBlocks","amountOfBlocks","amountOfBlocksToRenderInShortView","scalableAmountOfBlocksToRenderInShortView","extraBlocksAmount","max","extraEmptyBlocksForFillingLine","Array","getShortCacheMap","round","Capacity","PiecesLength","source","startingXPoint","ceil","canvas","getContext","ctx","clearRect","inProgress","isCompleted","currentRow","currentColumn","fixBlurStroke","requiredFix","lineWidth","fillStyle","snakeType","gradient","createLinearGradient","addColorStop","createGradient","strokeStyle","translate","fillRect","strokeRect","setTransform","bounds","onResize","measureRef","style","display","flexDirection","ref","memo","prev","next","isEqual","viewedPrimaryColor","viewedIndicator","TableStyle","ShortTableWrapper","ShortTable","isViewed","require","ptt","addHandler","Table","playableFileList","viewedFileList","selectedSeason","seasonAmount","preloadBuffer","fileId","fetch","getFileLink","path","encodeURIComponent","split","pop","fileHasEpisodeText","find","parse","episode","fileHasSeasonText","season","fileHasResolutionText","resolution","shouldDisplayFullFileName","includes","link","data-label","textDecoration","href","target","rel","text","DialogContentGrid","Poster","poster","MainSection","section","CacheSection","TorrentFilesSection","SectionSubName","mb","SectionTitle","SectionHeader","WidgetWrapper","WidgetFieldWrapper","WidgetFieldTitle","WidgetFieldIcon","bgColor","WidgetFieldValue","LoadingProgress","attrs","value","fullAmount","min","background","label","Divider","DetailedViewWidgetSection","DetailedViewCacheSection","StatisticsField","Icon","icon","iconBg","valueBg","LIGHT","DARK","colors","downloadSpeed","iconBGColor","valueBGColor","uploadSpeed","peers","piecesCount","piecesLength","status","useGetWidgetColors","widgetName","DownlodSpeedWidget","ArrowDownwardIcon","UploadSpeedWidget","ArrowUpwardIcon","PeersWidget","SwapVerticalCircleIcon","PiecesCountWidget","WidgetsIcon","PiecesLengthWidget","PhotoSizeSelectSmallIcon","StatusWidget","stat","values","BuildIcon","SizeWidget","ViewAgendaIcon","DetailedView","torrentSize","MainSectionButtonGroup","SmallLabel","TorrentFunctions","name","setViewedFileList","latestViewedFileId","latestViewedFile","isOnlyOnePlayableFile","latestViewedFileData","fullPlaylistLink","partialPlaylistLink","file_index","playableExtList","Loader","minHeight","placeItems","CircularProgress","DialogTorrentDetailsContent","closeDialog","isLoading","setIsLoading","isDetailedCacheView","setIsDetailedCacheView","setPlayableFileList","setSeasonAmount","setSelectedSeason","download_speed","upload_speed","torrent_size","torrentFileList","file_stats","settings","setSettings","useGetSettings","Filled","seasons","currentSeason","sort","b","fileName","filename","ext","toLowerCase","getExt","cacheLoaded","Object","entries","torrentLoaded","lst","itm","preloadSize","PreloadCache","bufferSize","getParsedTitle","newNameStringArr","torrentParsedName","year","newNameString","join","overflow","alt","src","marginTop","ButtonGroup","marginBottom","language","lang","changeLanguage","usePreviousState","Header","ButtonWrapper","getMoviePosters","movieName","url","get","params","api_key","process","include_image_language","query","results","poster_path","checkImageURL","mode","magnetRegex","hashRegex","torrentRegex","linkRegex","Content","isEditMode","RightSide","RightSideContainer","isHidden","notificationMessage","isError","LeftSide","LeftSideBottomSectionBasicStyles","LeftSideBottomSectionNoFile","isDragActive","LeftSideBottomSectionFileSelected","TorrentIconWrapper","CancelIconWrapper","IconWrapper","LeftSideTopSection","active","PosterWrapper","PosterSuggestions","PosterSuggestionsItem","ClearPosterButton","showbutton","PosterLanguageSwitch","RightSideComponent","setTitle","setPosterUrl","setIsPosterUrlCorrect","setIsUserInteractedWithPoster","setPosterList","isTorrentSourceCorrect","isHashAlreadyExists","parsedTitle","posterUrl","isPosterUrlCorrect","posterList","currentLang","posterSearchLanguage","setPosterSearchLanguage","posterSearch","removePoster","torrentSource","originalTorrentTitle","updateTitleFromSource","isCustomTitleEnabled","setIsCustomTitleEnabled","handleTitleChange","TextField","margin","fullWidth","disabled","InputProps","readOnly","onChange","onFocus","onBlur","helperText","endAdornment","InputAdornment","padding","CheckBox","slice","userChangesPosterUrl","newLanguage","shouldRefreshMainPoster","LeftSideComponent","setSelectedFile","setTorrentSource","selectedFile","isTorrentSourceActive","setIsTorrentSourceActive","useDropzone","onDrop","files","file","accept","getRootProps","getInputProps","inputProps","autoComplete","Cancel","AddDialog","handleClose","originalHash","originalTitle","originalName","originalPoster","setOriginalTorrentTitle","setParsedTitle","setIsTorrentSourceCorrect","setIsHashAlreadyExists","isUserInteractedWithPoster","useChangeLanguage","isSaving","setIsSaving","skipDebounce","setSkipDebounce","currentSourceHash","setCurrentSourceHash","torrents","useQuery","retry","refetchInterval","parseTorrent","remote","_","infoHash","allHashes","fullScreen","useMediaQuery","useCallback","parsingSource","callback","err","torrentName","nameOfFileInsideTorrent","newTitle","correctImage","useMemo","urlList","firstPoster","delayedPosterSearch","debounce","prevTorrentSourceState","prevTitleState","cancel","Dialog","open","maxWidth","minWidth","finally","FormData","append","save_to_db","TorrentCard","TorrentCardPoster","isPoster","TorrentCardButtons","TorrentCardDescription","StyledButton","button","Transition","forwardRef","props","Slide","direction","Torrent","isDetailedInfoOpened","setIsDetailedInfoOpened","isDeleteTorrentOpened","setIsDeleteTorrentOpened","breakpoints","down","closeDetailedInfo","closeDeleteTorrentAlert","key","titleStrings","parsedYear","parsedResolution","isEditDialogOpen","setIsEditDialogOpen","UnfoldMore","Edit","Close","Delete","TransitionComponent","DialogTitle","DialogActions","AppWrapper","CenteredGrid","AppHeader","AppSidebarStyle","isDrawerOpen","TorrentListWrapper","HeaderToggle","isButton","NoServerConnection","trigger","stroke","scale","AddFirstTorrent","isDialogOpen","setIsDialogOpen","TorrentList","isOffline","DonateDialog","aria-labelledby","DialogContent","List","ListItem","dangerouslySetInnerHTML","__html","DonateSnackbar","setOpen","snackbarOpen","setSnackbarOpen","disableSnackbar","localStorage","setItem","Snackbar","anchorOrigin","vertical","horizontal","message","marginRight","fontSize","createGlobalStyle","AddDialogButton","ListItemIcon","ListItemText","cacheBeforeReaderColor","cacheAfterReaderColor","SettingsHeader","FooterSection","PreloadCacheValue","MainSettingsContent","SecondarySettingsContent","StorageButton","small","selected","StorageIconWrapper","CacheStorageSelector","SettingSectionLabel","PreloadCachePercentage","preloadCachePercentage","AcceptPeerCon","CacheSize","ReaderReadAHead","UseDisk","UploadRateLimit","TorrentsSavePath","ConnectionsLimit","DisableDHT","DisablePEX","DisableTCP","DisableUPNP","DisableUTP","DisableUpload","DownloadRateLimit","EnableDebug","EnableIPv6","ForceEncrypt","PeersListenPort","RemoveCacheOnDrop","RetrackersMode","TorrentDisconnectTimeout","a11yProps","index","TabPanel","children","other","role","hidden","SliderInput","isProMode","setValue","sliderMin","sliderMax","inputMin","inputMax","step","onBlurCallback","Grid","container","spacing","alignItems","item","xs","Slider","newValue","OutlinedInput","Number","CacheStorageLocationLabel","PrimarySettingsComponent","inputForm","cachePercentage","cacheSize","setCacheSize","setCachePercentage","setPreloadCachePercentage","updateSettings","preloadCacheSize","gridAutoFlow","FormControlLabel","control","Switch","checked","labelPlacement","placeSelf","gridArea","SecondarySettingsComponent","InputLabel","htmlFor","Select","native","SettingsDialog","selectedTab","setSelectedTab","JSON","getItem","setIsProMode","sets","stringify","Boolean","isNaN","newProps","Checkbox","Tabs","indicatorColor","textColor","Tab","axis","onChangeIndex","dir","defaultSettings","SettingsDialogButton","RemoveAll","method","body","headers","Accept","res","json","torr","DialogWrapper","HeaderSection","ThanksSection","Section","LinkWrapper","isLink","LinkIcon","LinkComponent","GitHub","AboutDialog","torrServerVersion","setTorrServerVersion","CloseServer","PowerSettingsNew","Sidebar","setIsDonationDialogOpen","createContext","App","setIsDrawerOpen","isDonationDialogOpen","savedThemeMode","isSystemModeDark","setIsDarkMode","currentThemeMode","setCurrentThemeMode","muiTheme","overrides","MuiInputBase","input","MuiFormControlLabel","labelPlacementStart","justifyContent","marginStart","MuiInputLabel","root","useMaterialUITheme","updateThemeMode","changeLang","setIsOffline","onError","onSuccess","GlobalStyle","Provider","CssBaseline","Menu","noWrap","justifySelf","gridTemplateColumns","gap","Brightness5","Brightness4","BrightnessAuto","queryClient","QueryClient","ReactDOM","render","QueryClientProvider","client","document","getElementById"],"mappings":"00lBAAA,EAAqCA,OAAOC,SAApCC,EAAR,EAAQA,SAAUC,EAAlB,EAAkBA,SAAUC,EAA5B,EAA4BA,KAExBC,EAAiB,UAAwCH,EAAxC,aAAqDC,GAArD,OAAgEC,EAAI,WAAOA,GAAS,IAE5FE,EAAe,2BAASD,EAAT,cACfE,EAAa,2BAASF,EAAT,YAGbG,EAAe,2BAASH,EAAT,cACfI,EAAa,2BAASJ,EAAT,YAEbK,EAAW,2BAASL,EAAT,U,2ICLxBM,IACGC,IAAIC,KACJD,IAAIE,KACJC,KAAK,CACJC,YAAa,KACbC,cAAe,CAAEC,aAAa,GAC9BC,UAAW,CAAEC,GAAI,CAAEC,YAAaC,GAAiBC,GAAI,CAAEF,YAAaG,MAGzDb,QAAf,ECVO,SAASc,EAAaC,GAC3B,IAAKA,EAAM,MAAO,GAClB,IAAMC,EAAIC,KAAKC,MAAMD,KAAKE,IAAIJ,GAAQE,KAAKE,IAAI,OAC/C,MAAM,GAAN,OAAkD,GAAvCJ,EAAOE,KAAKG,IAAI,KAAMJ,IAAIK,QAAQ,GAA7C,YACE,CAACrB,EAAKsB,EAAE,KAAMtB,EAAKsB,EAAE,MAAOtB,EAAKsB,EAAE,MAAOtB,EAAKsB,EAAE,MAAOtB,EAAKsB,EAAE,OAAON,IAInE,SAASO,EAAcC,GAC5B,IAAKA,EAAO,MAAO,GACnB,IAAMR,EAAIC,KAAKC,MAAMD,KAAKE,IAAY,EAARK,GAAaP,KAAKE,IAAI,MACpD,MAAM,GAAN,OAAyD,GAArC,EAARK,EAAaP,KAAKG,IAAI,IAAMJ,IAAIK,QAAQ,GAApD,YACE,CAACrB,EAAKsB,EAAE,OAAQtB,EAAKsB,EAAE,QAAStB,EAAKsB,EAAE,QAAStB,EAAKsB,EAAE,QAAStB,EAAKsB,EAAE,SAASN,IAI7E,SAASS,EAAcC,GAC5B,OAAKA,GAAYA,EAAQC,kBACnB,GAAN,OAAUD,EAAQC,kBAAlB,iBAAyCD,EAAQE,aAAjD,cAAmEF,EAAQG,aADxB,KAI9C,IAGMC,EAA4B,SAAAC,GACvC,IAAIC,EAAYD,EACC,CACf,CAAC,IAAK,KACN,CAAC,IAAK,KACN,CAAC,IAAK,MAGCE,SAAQ,SAAAC,GACf,IAAMC,EAAuB,YAAQD,EAAG,IAClCE,EAAmB,IAAIC,OAAOF,EAAyB,KACvDG,EAAoB,YAAIN,EAAUO,SAASH,IAAmBI,OAC9DC,EAAwB,YAAQP,EAAG,IACnCQ,EAAoB,IAAIL,OAAOI,EAA0B,KAG/D,GAAIH,IAFuB,YAAIN,EAAUO,SAASG,IAAoBF,OAExB,CAC5C,IAAMG,EAAa,aAAST,EAAG,GAAZ,gBACbU,EAAc,IAAIP,OAAOM,EAAe,KAC9CX,EAAYA,EAAUa,QAAQD,EAAa,QAI/C,IAAME,IAAyBd,EAAUe,MAAM,WAEzCC,EAAgBhB,EAAUa,QAAQ,aAAc,IAAII,OAE1D,OAAOH,EAAoB,UAAME,EAAN,MAA0BA,GAG1CE,EAAW,uCAAG,8BAAAC,EAAA,+EAEAC,IAAMC,KAAK1D,IAAgB,CAAE2D,OAAQ,SAFrC,uBAEfC,EAFe,EAEfA,KAFe,kBAGhBA,GAHgB,sCAKjB,IAAIC,MAAM,MALO,yDAAH,qD,eCzDXC,EAAc,SAAC,GAAe,IAAbC,EAAY,EAAZA,MACtBC,EAAUC,cAAWC,QAAQF,QAAQG,KAE3C,OACE,qBACEC,OAAO,OACPC,MAAM,OACNC,KAAMP,GAASC,EACfO,MAAM,6BACNC,WAAW,+BACXC,QAAQ,MACRC,EAAE,MACFC,EAAE,MACFC,QAAQ,cACRC,iBAAiB,kBACjBC,SAAS,WAXX,SAaE,8BACE,sBAAMC,EAAE,otCACR,sBAAMA,EAAE,mwBACR,yBAASC,OAAO,sDAMXC,EAAc,WACzB,IAAMjB,EAAUC,cAAWC,QAAQF,QAAQG,KAE3C,OACE,qBACEC,OAAO,QACPC,MAAM,QACNC,KAAMN,EACNY,QAAQ,cACRH,QAAQ,MACRF,MAAM,6BANR,SAQE,oBAAGW,GAAG,UAAN,UACE,sBACEC,QAAQ,OACRJ,EAAE,k/BAEJ,sBACEI,QAAQ,OACRJ,EAAE,6iBAOCK,EAAU,SAAC,GAAsB,IAApBrB,EAAmB,EAAnBA,MAAOM,EAAY,EAAZA,MACzBL,EAAUC,cAAWC,QAAQF,QAAQG,KAE3C,OACE,sBACEE,MAAOA,GAAS,OAChBD,OAAO,OACPQ,QAAQ,wEACRH,QAAQ,MACRF,MAAM,6BALR,UAOE,sBACED,KAAMP,GAASC,EACfmB,QAAQ,OACRJ,EAAE,4hEAEJ,sBACET,KAAMP,GAASC,EACfmB,QAAQ,OACRJ,EAAE,mPAEJ,sBACET,KAAMP,GAASC,EACfmB,QAAQ,OACRJ,EAAE,+RAEJ,sBACET,KAAMP,GAASC,EACfmB,QAAQ,OACRJ,EAAE,2MAMGM,GAAU,SAAC,GAAsB,IAApBtB,EAAmB,EAAnBA,MAAOM,EAAY,EAAZA,MACzBL,EAAUC,cAAWC,QAAQF,QAAQG,KAE3C,OACE,sBACEE,MAAOA,GAAS,OAChBD,OAAO,OACPQ,QAAQ,6EACRH,QAAQ,MACRF,MAAM,6BALR,UAOE,sBACED,KAAMP,GAASC,EACfmB,QAAQ,OACRJ,EAAE,i/JAEJ,sBACET,KAAMP,GAASC,EACfmB,QAAQ,OACRJ,EAAE,imBAEJ,sBACET,KAAMP,GAASC,EACfmB,QAAQ,OACRJ,EAAE,ohBAEJ,sBACET,KAAMP,GAASC,EACfmB,QAAQ,OACRJ,EAAE,yfAEJ,sBACET,KAAMP,GAASC,EACfmB,QAAQ,OACRJ,EAAE,+hBAEJ,sBACET,KAAMP,GAASC,EACfmB,QAAQ,OACRJ,EAAE,+gBAEJ,sBACET,KAAMP,GAASC,EACfmB,QAAQ,OACRJ,EAAE,+hBAEJ,sBACET,KAAMP,GAASC,EACfmB,QAAQ,OACRJ,EAAE,6KAEJ,sBACET,KAAMP,GAASC,EACfmB,QAAQ,OACRJ,EAAE,0LAEJ,sBACET,KAAMP,GAASC,EACfmB,QAAQ,OACRJ,EAAE,+RAEJ,sBACET,KAAMP,GAASC,EACfmB,QAAQ,OACRJ,EAAE,2RAEJ,sBACET,KAAMP,GAASC,EACfmB,QAAQ,OACRJ,EAAE,mTAMGO,GAAc,WACzB,IAAMtB,EAAUC,cAAWC,QAAQF,QAAQG,KACrCoB,EAA6B,YAAZvB,EAAwB,UAAY,UAE3D,OACE,sBAAKK,MAAM,QAAQD,OAAO,QAAQQ,QAAQ,cAAcH,QAAQ,MAAMF,MAAM,6BAA5E,UACE,oBAAGW,GAAIlB,EAAP,UACE,sBACEM,KAAMN,EACNmB,QAAQ,OACRJ,EAAE,0tIAEJ,sBACET,KAAMN,EACNmB,QAAQ,OACRJ,EAAE,+RAEJ,sBACET,KAAMN,EACNmB,QAAQ,OACRJ,EAAE,uMAEJ,sBACET,KAAMN,EACNmB,QAAQ,OACRJ,EAAE,0MAGN,mBAAGG,GAAIK,EAAP,SACE,sBACEjB,KAAMiB,EACNJ,QAAQ,OACRJ,EAAE,yPAGN,oBAAGG,GAAG,UAAN,UACE,sBACEZ,KAAK,UACLa,QAAQ,OACRJ,EAAE,2qBAEJ,sBACET,KAAK,UACLa,QAAQ,OACRJ,EAAE,8cAEJ,sBACET,KAAK,UACLa,QAAQ,OACRJ,EAAE,ujBAEJ,sBACET,KAAK,UACLa,QAAQ,OACRJ,EAAE,+zBAEJ,sBACET,KAAK,UACLa,QAAQ,OACRJ,EAAE,mxBAEJ,sBACET,KAAK,UACLa,QAAQ,OACRJ,EAAE,2qBAEJ,sBACET,KAAK,UACLa,QAAQ,OACRJ,EAAE,sd,4DCrOCS,GAAiB,SAAAC,GAC5B,MAA0BC,mBAAS,IAAnC,mBAAOC,EAAP,KAAcC,EAAd,KACMC,EAAqBC,kBAAO,GAC5BC,EAAUD,iBAAO,MA0BvB,OAxBAE,qBACE,kBAAM,WAEJH,EAAmBI,SAAU,KAE/B,IAGFD,qBAAU,WAaR,OAZIP,EACFM,EAAQE,QAAUC,aAAY,WAC5B,IAAMC,EAAc,SAAAC,GAAQ,OAAIP,EAAmBI,SAAWL,EAASQ,IAEvE3C,IACGC,KJjBc,UAAS3D,EAAT,UIiBI,CAAE4D,OAAQ,MAAO8B,SACnCY,MAAK,gBAAGzC,EAAH,EAAGA,KAAH,OAAcuC,EAAYvC,MAE/B0C,OAAM,kBAAMH,EAAY,SAC1B,KACEI,cAAcR,EAAQE,SAEtB,kBAAMM,cAAcR,EAAQE,YAClC,CAACR,IAEGE,G,6DC3BHa,GAAYC,aAAW,CAC3BC,OAAQ,CAAEC,SAAU,YACpBC,MAAO,CAAEC,WAAY,MAAOC,KAAM,KAGrB,SAASC,GAAT,GAAmD,IAA3BH,EAA0B,EAA1BA,MAAOI,EAAmB,EAAnBA,QAASC,EAAU,EAAVA,OAC7CtF,EAAMuF,eAANvF,EACFwF,EAAUX,KAEhB,OACE,cAACY,GAAA,EAAD,CAAQC,UAAWF,EAAQT,OAA3B,SACE,eAACY,GAAA,EAAD,WACE,cAACC,EAAA,EAAD,CAAYC,KAAK,QAAQzD,MAAM,UAAU0D,QAASR,GAAUD,EAASU,aAAW,QAAhF,SACGT,EAAS,cAACU,GAAA,EAAD,IAAgB,cAAC,KAAD,MAG5B,cAACC,EAAA,EAAD,CAAYC,QAAQ,KAAKR,UAAWF,EAAQP,MAA5C,SACGA,IAGFK,GACC,cAACa,GAAA,EAAD,CAAQC,WAAS,EAAChE,MAAM,UAAU0D,QAAST,EAA3C,SACGrF,EAAE,gB,gGC1BFqG,GAAc,CACzBC,MAAO,CACLC,IAAK,CACHC,kBAAmB,UACnBC,kBAAmB,UACnBC,eAAgB,UAChBC,iBAAkB,WAEpBC,YAAa,CACXC,gBAAiB,UACjBC,cAAeC,aAAK,UAAW,IAC/BC,iBAAkB,UAClBC,mBAAoB,WAEtBC,4BAA6B,CAC3BC,cAAe,UACfC,mBAAoB,UACpBC,iBAAkB,UAClBC,qBAAsB,UACtBC,gBAAiB,OACjBC,eAAgB,OAChBC,iBAAkB,UAClBC,2BAA4B,WAE9BC,aAAc,CACZP,mBAAoB,UACpBC,iBAAkB,UAClBO,oBAAqB,QAEvBC,UAAW,CACTT,mBAAoB,UACpBC,iBAAkB,UAClBS,UAAW,OACXC,yBAA0B,UAC1BC,2BAA4B,UAC5BC,sBAAuB,UACvBC,wBAAyB,UACzBf,cAAe,WAEjBgB,iBAAkB,CAChBL,UAAW,QAEbM,MAAO,CACLC,oBAAqB,UACrBC,sBAAuB,UACvBC,qBAAsB,WAExBC,eAAgB,CACdC,UAAW,UACXC,SAAU,SAGdC,KAAM,CACJpC,IAAK,CACHC,kBAAmB,UACnBC,kBAAmB,UACnBC,eAAgB,UAChBC,iBAAkB,WAEpBC,YAAa,CACXC,gBAAiB,UACjBC,cAAeC,aAAK,UAAW,IAC/BC,iBAAkB,UAClBC,mBAAoBF,aAAK,UAAW,KAEtCG,4BAA6B,CAC3BC,cAAeJ,aAAK,UAAW,IAC/BK,mBAAoB,UACpBC,iBAAkB,UAClBC,qBAAsB,UACtBC,gBAAiBR,aAAK,OAAQ,IAC9BS,eAAgB,UAChBC,iBAAkB,UAClBC,2BAA4BX,aAAK,UAAW,KAE9CY,aAAc,CACZP,mBAAoB,UACpBC,iBAAkB,UAClBO,oBAAqB,WAEvBC,UAAW,CACTT,mBAAoB,UACpBC,iBAAkB,UAClBS,UAAW,OACXC,yBAA0B,UAC1BC,2BAA4B,UAC5BC,sBAAuB,UACvBC,wBAAyB,UACzBf,cAAe,WAEjBgB,iBAAkB,CAChBL,UAAW,WAEbM,MAAO,CACLC,oBAAqB,UACrBC,sBAAuBvB,aAAK,UAAW,IACvCwB,qBAAsB,WAExBC,eAAgB,CACdC,UAAW,UACXC,SAAU,aAKHE,GAAa,CACxBtC,MAAO,CACLjE,QAAS,UACTwG,UAAW,UACXC,OAAQ/B,aAAK,OAAQ,KAEvB4B,KAAM,CACJtG,QAAS,UACTwG,UAAW,UACXC,OAAQ/B,aAAK,OAAQ,MC/GZgC,GAAuB,QAAvBA,GAAsC,OAAtCA,GAAoD,OAE3DC,GAAa,CAAEC,WAAY,yBAUpBC,IARYC,aAAe,CACtCH,cACAzG,QAAS,CACP6G,KAAML,GACN1G,QAAS,CAAEG,KAAMoG,GAAWD,KAAKtG,SACjCwG,UAAW,CAAErG,KAAMoG,GAAWD,KAAKE,cAGbM,aAAe,CACvCH,cACAzG,QAAS,CACP6G,KAAML,GACN1G,QAAS,CAAEG,KAAMoG,GAAWtC,MAAMjE,SAClCwG,UAAW,CAAErG,KAAMoG,GAAWtC,MAAMuC,e,gBCnB3BQ,GAAgB,CAC3BV,KAAM,CACJW,QAAS,CACPC,YAAa,EACbC,UAAW,GACXC,iBAAkB,EAClBC,YAAad,GAAWD,KAAKE,UAC7Bc,cAAe5C,aAAK6B,GAAWD,KAAKtG,QAAS,KAC7CuH,gBAAiB,UACjBC,cAAejB,GAAWD,KAAKE,UAC/BiB,YAAa,OACbC,WAAY,WAEdC,KAAM,CACJC,eAAgB,IAChBV,YAAa,EACbC,UAAW,GACXC,iBAAkB,EAClBC,YAAa,UACbC,cAAe,UACfC,gBAAiB,UACjBC,cAAe,UACfC,YAAa,OACbC,WAAY,YAGhBzD,MAAO,CACLgD,QAAS,CACPC,YAAa,EACbC,UAAW,GACXC,iBAAkB,EAClBC,YAAa,UACbC,cAAef,GAAWtC,MAAMjE,QAChCuH,gBAAiB,OACjBC,cAAe,UACfC,YAAa,OACbC,WAAY,WAEdC,KAAM,CACJC,eAAgB,IAChBV,YAAa,EACbC,UAAW,GACXC,iBAAkB,EAClBC,YAAa,UACbC,cAAe,UACfC,gBAAiB,UACjBC,cAAe,UACfC,YAAa,UACbC,WAAY,aC/CLG,GAAqBC,KAAOC,IAAV,uIAOlBC,GAAeF,KAAOC,IAAV,sCACrB,gBAAGE,EAAH,EAAGA,OAAQC,EAAX,EAAWA,UAAX,OAA2BC,aAA1B,KAAD,kFACEF,GACFE,aADQ,yIAIQnB,GAAckB,GAAWP,KAAKC,oBCL5CQ,GAAe,SAAC,GAAuB,IA4BvCC,EA5BkB1G,EAAoB,EAApBA,MAAOsG,EAAa,EAAbA,OACrBtK,EAAMuF,eAANvF,EACR,EAAoC+D,mBAAS,CAAErB,MAAO,EAAGD,OAAQ,IAAjE,mBAAOkI,EAAP,KAAmBC,EAAnB,KACQlI,EAAUiI,EAAVjI,MACFmI,EAAY1G,iBAAO,MACnB2G,EAAS3G,iBAAO,MAChB4G,ENkByB,SAAA/G,GAC/B,MAAgCD,mBAAS,IAAzC,mBAAOgH,EAAP,KAAiBC,EAAjB,KAsBA,OApBA3G,qBAAU,WAKR,IAJA,IAAQ4G,EAAiCjH,EAAjCiH,YAAaC,EAAoBlH,EAApBkH,OAAQC,EAAYnH,EAAZmH,QAEvBC,EAAM,GAHE,WAKL1L,GACP,MAAyBwL,EAAOxL,IAAM,GAA9B2L,EAAR,EAAQA,KAAMC,EAAd,EAAcA,OAERC,EAAW,CAAEhI,GAAI7D,EAAG8L,WAAaH,EAAOC,EAAU,KAAO,GAE/DH,EAAQxK,SAAQ,SAAA8K,GACV/L,IAAM+L,EAAEC,SAAQH,EAASI,UAAW,GACpCjM,GAAK+L,EAAEG,OAASlM,GAAK+L,EAAEI,MAAKN,EAASO,eAAgB,MAG3DV,EAAIW,KAAKR,IAVF7L,EAAI,EAAGA,EAAIuL,EAAavL,IAAM,EAA9BA,GAYTsL,EAAYI,KACX,CAACpH,IAEG+G,EMzCUiB,CAAkBhI,GAC7BiI,EAAiB3B,EAAS,OAAS,UAEnC4B,EADiBC,qBAAWC,IAA1BC,WACmBtD,GAAmBA,GAE9C,EAUIM,GAAc6C,GAAOD,GATvBnC,EADF,EACEA,YACAC,EAFF,EAEEA,WACAR,EAHF,EAGEA,YACAC,EAJF,EAIEA,UACAC,EALF,EAKEA,iBACAG,EANF,EAMEA,gBACAF,EAPF,EAOEA,YACAO,EARF,EAQEA,eACAN,EATF,EASEA,cAGI2C,EAAchC,EAAiB,IAAR5H,EAAeA,EAEtC6J,EAAmB/C,EAAYC,EAC/B+C,EAAiB7M,KAAKC,MAAM0M,EAAcC,GAG5CjC,IAEFI,EC3CW,YAAwD,IAArDK,EAAoD,EAApDA,SAAU0B,EAA0C,EAA1CA,oBAAqBD,EAAqB,EAArBA,eACzCE,EAA6B3B,EAAS4B,QAAO,qBAAGnB,WAA8B,KAE9EoB,EAAwB,SAAAC,GAAc,OAE1CA,EAAiBL,IAAmB,EAChCK,EAAiB,EACjBA,EAAiBL,EAAkBK,EAAiBL,EAAkB,GAAK,GAE3EM,EAAoCF,EAAsBH,GAE1DM,EAA4CH,EAAsBF,EAA2BxL,QAS7F8L,EANyCrN,KAAKsN,IAElDF,EACAD,GAGiEJ,EAA2BxL,OAAS,EAGjGgM,EAAiCF,EAAoB,IAAIG,MAAMH,GAAmBrK,KAAK,IAAM,GAEnG,MAAM,GAAN,mBAAW+J,GAAX,YAA0CQ,IDkBzBE,CAAiB,CAAErC,WAAU0B,oBADhB9M,KAAK0N,MAAMrJ,EAAMsJ,SAAWtJ,EAAMuJ,aAAe,GACZf,oBAEnE,IAAMgB,EAASlD,EAASI,EAAeK,EACjC0C,EAAiB9N,KAAK+N,MAAMpB,EAAcC,EAAmBC,GAAkB,GAC/E/J,EAAS9C,KAAK+N,KAAKF,EAAOtM,OAASsL,GAAkBD,EAiE3D,OA/DAlI,qBAAU,WACR,GAAKiI,GAAgB7J,EAArB,CAEA,IAAMkL,EAAS9C,EAAUvG,QACzBqJ,EAAOjL,MAAQ4J,EACfqB,EAAOlL,OAASA,EAChBqI,EAAOxG,QAAUqJ,EAAOC,WAAW,SAClC,CAAC/C,EAAWpI,EAAQ6J,IAEvBjI,qBAAU,WACR,IAAMwJ,EAAM/C,EAAOxG,QACduJ,IAELA,EAAIC,UAAU,EAAG,EAAGxB,EAAa7J,GAEjC+K,EAAO7M,SAAQ,WAA0CjB,GAAO,IAA9C8L,EAA6C,EAA7CA,WAAYG,EAAiC,EAAjCA,SAAUG,EAAuB,EAAvBA,cAChCiC,EAAavC,EAAa,GAAKA,EAAa,IAC5CwC,EAA6B,MAAfxC,EACdyC,EAAavO,EAAI8M,EACjB0B,EAAgBvO,KAAKC,MAAMF,EAAI8M,GAC/B2B,EAAgB5E,EAAc,IAAM,EAAI,EAAI,GAC5C6E,EAAczO,KAAK+N,KAAKnE,EAAc,GAAK,EAAI4E,EAC/CpL,EAAIkL,EAAazE,EAAYyE,EAAaxE,EAAmBgE,EAAiBW,EAC9EpL,EAAIkL,EAAgB1E,EAAY0E,EAAgBzE,EAAmB2E,EAEzEP,EAAIQ,UAAY9E,EAChBsE,EAAIS,UAAYP,EFnBQ,SAACF,EAAKrC,EAAYU,EAAOqC,GACrD,MAAoDlF,GAAc6C,GAAOqC,GAAjE/E,EAAR,EAAQA,UAAWG,EAAnB,EAAmBA,cAAeE,EAAlC,EAAkCA,cAE5B2E,EAAWX,EAAIY,qBAAqB,EAAGjF,EAAW,EAAG,GAM3D,OALAgF,EAASE,aAAa,EAAG/E,GACzB6E,EAASE,aAAalD,EAAa,IAAK7B,GACxC6E,EAASE,aAAalD,EAAa,IAAK3B,GACxC2E,EAASE,aAAa,EAAG7E,GAElB2E,EEWCG,CAAed,EAAKrC,EAAYU,EAAOD,GACvC+B,EACArE,EACAC,EACJiE,EAAIe,YAAcjD,EACd7B,EACAiE,GAAcC,EACdrE,EACAmC,EACA/B,EACAL,EAEJmE,EAAIgB,UAAU9L,EAAGC,GACjB6K,EAAIiB,SAAS,EAAG,EAAGtF,EAAWA,GAC9BqE,EAAIkB,WAAW,EAAG,EAAGvF,EAAWA,GAChCqE,EAAImB,aAAa,EAAG,EAAG,EAAG,EAAG,EAAG,SAEjC,CACDjE,EACAtI,EACA6J,EACAE,EACAiB,EACAjE,EACAC,EACA+D,EACA5D,EACAF,EACAH,EACA0C,EACAtC,EACAG,EACAC,EACAmC,IAIA,cAAC,KAAD,CAAS+C,QAAM,EAACC,SAAU,gBAAGD,EAAH,EAAGA,OAAH,OAAgBrE,EAAcqE,IAAxD,SACG,gBAAGE,EAAH,EAAGA,WAAH,OACC,sBAAKC,MAAO,CAAEC,QAAS,OAAQC,cAAe,UAAYC,IAAKJ,EAA/D,UACE,cAAC9E,GAAD,CAAcE,UAAW2B,EAAO5B,OAAQA,EAAxC,SACE,wBAAQiF,IAAK1E,MAGdP,GAAU7H,GAAUwH,GAAkB,cAACC,GAAD,UAAqBlK,EAAE,uBAOzDwP,kBACb/E,IACA,SAACgF,EAAMC,GAAP,OAAgBC,KAAQF,EAAKzL,MAAMkH,OAAQwE,EAAK1L,MAAMkH,SAAWyE,KAAQF,EAAKzL,MAAMmH,QAASuE,EAAK1L,MAAMmH,Y,oBE/HpGyE,GAAqB,UAOrBC,GAAkBrF,aAAH,sCACjB,gBAEWnC,EAFX,EACA6D,MACE9D,MAASC,oBAFX,OAIImC,aAJH,QAAD,qQASgBnC,MASPyH,GAAa3F,KAAO/B,MAAV,sCACnB,gBAEWC,EAFX,EACA6D,MACE9D,MAASC,oBAFX,OAIImC,aAJH,QAAD,i6BAegBnC,EAvCS,OACG,OAsDGA,EArDJ,UAiErBwH,OAgBGE,GAAoB5F,KAAOC,IAAV,4QAgBjB4F,GAAa7F,KAAOC,IAAV,sCACnB,gBACA6F,EADA,EACAA,SADA,IAEA/D,MACE9D,MAASC,EAHX,EAGWA,oBAAqBC,EAHhC,EAGgCA,sBAAuBC,EAHvD,EAGuDA,qBAHvD,OAKIiC,aALH,KAAD,69DAckByF,EAAWL,GAAqBvH,EAiBrB4H,EAAW,cAAgB,MAQxBA,EAAWL,GAAqBvH,EAI5C4H,EAjJK,UAiJ6B3H,EAelC2H,EA/JI,UA+J6B1H,EAgB/C0H,GAAYJ,GAKaI,EAAWL,GAAqBvH,MC9K3DmH,GAASU,EAAQ,GAAjBV,KAGRW,KAAIC,WAAW,UAAW,iGAAgD,CAAEhH,KAAM,YAClF+G,KAAIC,WAAW,SAAU,+CAAgD,CAAEhH,KAAM,YACjF+G,KAAIC,WAAW,SAAU,iGAAgD,CAAEhH,KAAM,YAEjF,I,+GA6IeiH,GA7IDb,IACZ,YAA+E,IAA5Ec,EAA2E,EAA3EA,iBAAkBC,EAAyD,EAAzDA,eAAgBC,EAAyC,EAAzCA,eAAgBC,EAAyB,EAAzBA,aAAc3M,EAAW,EAAXA,KACzD9D,EAAMuF,eAANvF,EACF0Q,EAAgB,SAAAC,GAAM,OAAIC,MAAM,GAAD,OAAIpS,IAAJ,iBAAyBsF,EAAzB,kBAAuC6M,EAAvC,cAC/BE,EAAc,SAACC,EAAMvN,GAAP,gBACf/E,IADe,YACCuS,mBAAmBD,EAAKE,MAAM,MAAMC,MAAMD,MAAM,KAAKC,OADtD,iBACqEnN,EADrE,kBACmFP,EADnF,UAEd2N,KAAsB,OAACZ,QAAD,IAACA,OAAD,EAACA,EAAkBa,MAAK,gBAAGL,EAAH,EAAGA,KAAH,OAAcX,KAAIiB,MAAMN,GAAMO,YAC5EC,KAAqB,OAAChB,QAAD,IAACA,OAAD,EAACA,EAAkBa,MAAK,gBAAGL,EAAH,EAAGA,KAAH,OAAcX,KAAIiB,MAAMN,GAAMS,WAC3EC,KAAyB,OAAClB,QAAD,IAACA,OAAD,EAACA,EAAkBa,MAAK,gBAAGL,EAAH,EAAGA,KAAH,OAAcX,KAAIiB,MAAMN,GAAMW,eAG/EC,EAA4BpB,EAAiBpP,OAAS,IAAMgQ,EAElE,OAAO,OAACZ,QAAD,IAACA,OAAD,EAACA,EAAkBpP,QAGxB,qCACE,eAAC4O,GAAD,WACE,gCACE,+BACE,oBAAIV,MAAO,CAAE1M,MAAO,KAApB,SAA4B1C,EAAE,YAC9B,6BAAKA,EAAE,UACNsR,GAA8C,KAAb,OAAZb,QAAY,IAAZA,OAAA,EAAAA,EAAcvP,SAAgB,oBAAIkO,MAAO,CAAE1M,MAAO,KAApB,SAA4B1C,EAAE,YACjFkR,GAAsB,oBAAI9B,MAAO,CAAE1M,MAAO,KAApB,SAA4B1C,EAAE,aACpDwR,GAAyB,oBAAIpC,MAAO,CAAE1M,MAAO,KAApB,SAA4B1C,EAAE,gBACxD,oBAAIoP,MAAO,CAAE1M,MAAO,SAApB,SAAgC1C,EAAE,UAClC,oBAAIoP,MAAO,CAAE1M,MAAO,SAApB,SAAgC1C,EAAE,kBAItC,gCACGsQ,EAAiBlF,KAAI,YAA2B,IAAxB7H,EAAuB,EAAvBA,GAAIuN,EAAmB,EAAnBA,KAAM5P,EAAa,EAAbA,OACjC,EAA+CiP,KAAIiB,MAAMN,GAAjD7L,EAAR,EAAQA,MAAOwM,EAAf,EAAeA,WAAYJ,EAA3B,EAA2BA,QAASE,EAApC,EAAoCA,OAC9BtB,EAAQ,OAAGM,QAAH,IAAGA,OAAH,EAAGA,EAAgBoB,SAASpO,GACpCqO,EAAOf,EAAYC,EAAMvN,GAE/B,OACGgO,IAAWf,KAAkB,OAACC,QAAD,IAACA,OAAD,EAACA,EAAcvP,UAC3C,qBAAawE,UAAWuK,EAAW,kBAAoB,KAAvD,UACE,oBAAI4B,aAAW,SAASnM,UAAWuK,EAAW,wBAA0B,OACxE,oBAAI4B,aAAW,OAAf,SAAuBH,EAA4BZ,EAAO7L,IACzDqM,GAA8C,KAAb,OAAZb,QAAY,IAAZA,OAAA,EAAAA,EAAcvP,SAAgB,oBAAI2Q,aAAW,SAAf,SAAyBN,IAC5EL,GAAsB,oBAAIW,aAAW,UAAf,SAA0BR,IAChDG,GAAyB,oBAAIK,aAAW,aAAf,SAA6BJ,IACvD,oBAAII,aAAW,OAAf,SAAuBrS,EAAa0B,KACpC,6BACE,sBAAKwE,UAAU,cAAf,UACE,cAACS,GAAA,EAAD,CAAQL,QAAS,kBAAM4K,EAAcnN,IAAK2C,QAAQ,WAAW9D,MAAM,UAAU3C,KAAK,QAAlF,SACGO,EAAE,aAGL,mBAAGoP,MAAO,CAAE0C,eAAgB,QAAUC,KAAMH,EAAMI,OAAO,SAASC,IAAI,aAAtE,SACE,cAAC9L,GAAA,EAAD,CAAQiJ,MAAO,CAAE1M,MAAO,QAAUwD,QAAQ,WAAW9D,MAAM,UAAU3C,KAAK,QAA1E,SACGO,EAAE,gBAIP,cAAC,KAAD,CAAiBkS,KAAMN,EAAvB,SACE,cAACzL,GAAA,EAAD,CAAQD,QAAQ,WAAW9D,MAAM,UAAU3C,KAAK,QAAhD,SACGO,EAAE,uBArBJuD,WAiCnB,cAACwM,GAAD,UACGO,EAAiBlF,KAAI,YAA2B,IAAxB7H,EAAuB,EAAvBA,GAAIuN,EAAmB,EAAnBA,KAAM5P,EAAa,EAAbA,OACjC,EAA+CiP,KAAIiB,MAAMN,GAAjD7L,EAAR,EAAQA,MAAOwM,EAAf,EAAeA,WAAYJ,EAA3B,EAA2BA,QAASE,EAApC,EAAoCA,OAC9BtB,EAAQ,OAAGM,QAAH,IAAGA,OAAH,EAAGA,EAAgBoB,SAASpO,GACpCqO,EAAOf,EAAYC,EAAMvN,GAE/B,OACGgO,IAAWf,KAAkB,OAACC,QAAD,IAACA,OAAD,EAACA,EAAcvP,UAC3C,eAAC8O,GAAD,CAAqBC,SAAUA,EAA/B,UACE,qBAAKvK,UAAU,mBAAf,SAAmCgM,EAA4BZ,EAAO7L,IACtE,sBAAKS,UAAU,mBAAf,UACGuK,GACC,sBAAKvK,UAAU,oBAAf,UACE,qBAAKA,UAAU,yBAAf,SAAyC1F,EAAE,YAC3C,qBAAK0F,UAAU,0BAAf,SACE,qBAAKA,UAAU,sCAIpB4L,GAA8C,KAAb,OAAZb,QAAY,IAAZA,OAAA,EAAAA,EAAcvP,SAClC,sBAAKwE,UAAU,oBAAf,UACE,qBAAKA,UAAU,yBAAf,SAAyC1F,EAAE,YAC3C,qBAAK0F,UAAU,0BAAf,SAA0C6L,OAG7CL,GACC,sBAAKxL,UAAU,oBAAf,UACE,qBAAKA,UAAU,yBAAf,SAAyC1F,EAAE,aAC3C,qBAAK0F,UAAU,0BAAf,SAA0C2L,OAG7CG,GACC,sBAAK9L,UAAU,oBAAf,UACE,qBAAKA,UAAU,yBAAf,SAAyC1F,EAAE,gBAC3C,qBAAK0F,UAAU,0BAAf,SAA0C+L,OAG9C,sBAAK/L,UAAU,oBAAf,UACE,qBAAKA,UAAU,yBAAf,SAAyC1F,EAAE,UAC3C,qBAAK0F,UAAU,0BAAf,SAA0ClG,EAAa0B,WAG3D,sBAAKwE,UAAU,sBAAf,UACE,cAACS,GAAA,EAAD,CAAQL,QAAS,kBAAM4K,EAAcnN,IAAK2C,QAAQ,WAAW9D,MAAM,UAAU3C,KAAK,QAAlF,SACGO,EAAE,aAGL,mBAAGoP,MAAO,CAAE0C,eAAgB,QAAUC,KAAMH,EAAMI,OAAO,SAASC,IAAI,aAAtE,SACE,cAAC9L,GAAA,EAAD,CAAQiJ,MAAO,CAAE1M,MAAO,QAAUwD,QAAQ,WAAW9D,MAAM,UAAU3C,KAAK,QAA1E,SACGO,EAAE,gBAIP,cAAC,KAAD,CAAiBkS,KAAMN,EAAvB,SACE,cAACzL,GAAA,EAAD,CAAQD,QAAQ,WAAW9D,MAAM,UAAU3C,KAAK,QAAhD,SACGO,EAAE,qBA/CMuD,WAjE3B,uCA4HJ,SAACkM,EAAMC,GAAP,OAAgBC,KAAQF,EAAMC,MCxJnByC,GAAoBhI,KAAOC,IAAV,6YAiBjBgI,GAASjI,KAAOC,IAAV,sCACf,gBACAiI,EADA,EACAA,OAEiClL,EAHjC,EAEA+E,MACEhF,4BAA+BC,cAHjC,OAKIqD,aALH,QAAD,0PAWE6H,EACE7H,aADI,iIAOJA,aAPI,0OAWYrD,GAYhBkL,EACE7H,aADI,qEAIJA,aAJI,yEAUD8H,GAAcnI,KAAOoI,QAAV,sCACpB,oBACArG,MACEhF,4BAA+BE,EAFjC,EAEiCA,mBAAoBC,EAFrD,EAEqDA,iBAFrD,OAIImD,aAJH,KAAD,uVAUsCpD,EAAuBC,MAYpDmL,GAAerI,KAAOoI,QAAV,sCACrB,gBAEiCjL,EAFjC,EACA4E,MACEhF,4BAA+BI,qBAFjC,OAIIkD,aAJH,KAAD,iQAUclD,MAQLmL,GAAsBtI,KAAOoI,QAAV,sCAC5B,gBAEiC7K,EAFjC,EACAwE,MACEhF,4BAA+BQ,2BAFjC,OAII8C,aAJH,KAAD,8NAQc9C,MAQLgL,GAAiBvI,KAAOC,IAAV,sCACvB,gBAEiC3C,EAFjC,EACAyE,MACEhF,4BAA+BO,iBAFjC,OAII+C,aAJH,KAAD,qCAKE,gBAAGmI,EAAH,EAAGA,GAAH,OAAYnI,aAAX,KAAD,qMACEmI,GAAE,sBAAmBA,EAAK,EAAxB,MACFA,GAAE,yBAAsBA,EAAtB,MAEKlL,EAGLkL,GAAE,sBAAmBA,EAAK,EAAxB,MACFA,GAAE,yBAAsBA,EAAK,EAA3B,aAOCC,GAAezI,KAAOC,IAAV,sCACrB,gBACAhI,EADA,EACAA,MAEiCoF,EAHjC,EAEA0E,MACEhF,4BAA+BM,eAHjC,OAKIgD,aALH,KAAD,qCAME,gBAAGmI,EAAH,EAAGA,GAAH,OAAYnI,aAAX,KAAD,oRACEmI,GAAE,yBAAsBA,EAAtB,MAKKvQ,GAASoF,EAKdmL,GAAE,yBAAsBA,EAAK,EAA3B,aAMCE,GAAgB1I,KAAOC,IAAV,uDAIb0I,GAAgB3I,KAAOC,IAAV,0PAYtB,qBAAGzC,aAEC6C,aADQ,4OASRA,aATQ,8WAsBHuI,GAAqB5I,KAAOC,IAAV,iXAkBlB4I,GAAmB7I,KAAOC,IAAV,sCACzB,gBAEiC5C,EAFjC,EACA0E,MACEhF,4BAA+BM,eAFjC,OAIIgD,aAJH,KAAD,mMAWShD,MAIAyL,GAAkB9I,KAAOC,IAAV,sCACxB,gBAAG8I,EAAH,EAAGA,QAAH,OAAiB1I,aAAhB,KAAD,gNAESzD,aAAK,OAAQ,IACRmM,MAULC,GAAmBhJ,KAAOC,IAAV,sCACzB,gBACA8I,EADA,EACAA,QAEiC3L,EAHjC,EAEA2E,MACEhF,4BAA+BK,gBAHjC,OAKIiD,aALH,KAAD,kSASSjD,EACK2L,MAWLE,GAAkBjJ,KAAOC,IAAIiJ,OACxC,YAMO,IALLC,EAKI,EALJA,MACAC,EAII,EAJJA,WAEiClM,EAE7B,EAHJ6E,MACEhF,4BAA+BG,iBAG3BmE,EAAa7L,KAAK6T,IAAI,IAAc,IAARF,EAAeC,GAEjD,MAAO,CAELnE,MAAO,CACLqE,WAAW,6BAAD,OAA+BpM,EAA/B,gBAAuDA,EAAvD,YAA2EmE,EAA3E,mBAAgGA,EAAhG,qBAbarB,CAAH,sCAkBxB,gBAAGuJ,EAAH,EAAGA,MAAH,OAAelJ,aAAd,KAAD,gPAOckJ,MAQLC,GAAUxJ,KAAOC,IAAV,4GCrTPwJ,GAA4BzJ,KAAOoI,QAAV,sCAClC,oBACArG,MACEvE,aAAgBP,EAFlB,EAEkBA,mBAAoBC,EAFtC,EAEsCA,iBAFtC,OAIImD,aAJH,QAAD,gKAMsCpD,EAAuBC,MAQpDwM,GAA2B1J,KAAOoI,QAAV,sCACjC,gBAEkB3K,EAFlB,EACAsE,MACEvE,aAAgBC,oBAFlB,OAII4C,aAJH,QAAD,8MAOc5C,M,+ECvBH,SAASkM,GAAT,GAAyE,IAAxCC,EAAuC,EAA7CC,KAAY/O,EAAiC,EAAjCA,MAAOqO,EAA0B,EAA1BA,MAAOW,EAAmB,EAAnBA,OAAQC,EAAW,EAAXA,QAC1E,OACE,eAACnB,GAAD,WACE,cAACC,GAAD,UAAmB/N,IACnB,cAACgO,GAAD,CAAiBC,QAASe,EAA1B,SACE,cAACF,EAAD,MAGF,cAACZ,GAAD,CAAkBD,QAASgB,EAA3B,SAAqCZ,OCN3C,IAAQa,GAAgBpL,GAATqL,GAASrL,GAElBsL,GAAS,CACb/N,MAAO,CACLgO,cAAe,CAAEC,YAAa,UAAWC,aAAc,WACvDC,YAAa,CAAEF,YAAa,UAAWC,aAAc,WACrDE,MAAO,CAAEH,YAAa,UAAWC,aAAc,WAC/CG,YAAa,CAAEJ,YAAa,UAAWC,aAAc,WACrDI,aAAc,CAAEL,YAAa,UAAWC,aAAc,WACtDK,OAAQ,CAAEN,YAAa,UAAWC,aAAc,WAChD/U,KAAM,CAAE8U,YAAa,UAAWC,aAAc,YAEhD7L,KAAM,CACJ2L,cAAe,CAAEC,YAAa,UAAWC,aAAc,WACvDC,YAAa,CAAEF,YAAa,UAAWC,aAAc,WACrDE,MAAO,CAAEH,YAAa,UAAWC,aAAc,WAC/CG,YAAa,CAAEJ,YAAa,UAAWC,aAAc,WACrDI,aAAc,CAAEL,YAAa,UAAWC,aAAc,WACtDK,OAAQ,CAAEN,YAAa,UAAWC,aAAc,WAChD/U,KAAM,CAAE8U,YAAa,UAAWC,aAAc,aAInC,SAASM,GAAmBC,GACzC,IAAQ1I,EAAeF,qBAAWC,IAA1BC,WAGR,OAFqBgI,GAAOhI,EAAa+H,GAAOD,IAAOY,GCblD,I,SAAMC,GAAqB,SAAC,GAAc,IAAZ/S,EAAW,EAAXA,KAC3BjC,EAAMuF,eAANvF,EACR,EAAsC8U,GAAmB,iBAAjDP,EAAR,EAAQA,YAAaC,EAArB,EAAqBA,aAErB,OACE,cAACV,GAAD,CACE7O,MAAOjF,EAAE,iBACTsT,MAAOrT,EAAcgC,IAAd,YAA4BjC,EAAE,QACrCiU,OAAQM,EACRL,QAASM,EACTR,KAAMiB,QAKCC,GAAoB,SAAC,GAAc,IAAZjT,EAAW,EAAXA,KAC1BjC,EAAMuF,eAANvF,EACR,EAAsC8U,GAAmB,eAAjDP,EAAR,EAAQA,YAAaC,EAArB,EAAqBA,aAErB,OACE,cAACV,GAAD,CACE7O,MAAOjF,EAAE,eACTsT,MAAOrT,EAAcgC,IAAd,YAA4BjC,EAAE,QACrCiU,OAAQM,EACRL,QAASM,EACTR,KAAMmB,QAKCC,GAAc,SAAC,GAAc,IAAZnT,EAAW,EAAXA,KACpBjC,EAAMuF,eAANvF,EACR,EAAsC8U,GAAmB,SAAjDP,EAAR,EAAQA,YAAaC,EAArB,EAAqBA,aAErB,OACE,cAACV,GAAD,CACE7O,MAAOjF,EAAE,SACTsT,MAAOnT,EAAc8B,IAAS,eAC9BgS,OAAQM,EACRL,QAASM,EACTR,KAAMqB,QAKCC,GAAoB,SAAC,GAAc,IAAZrT,EAAW,EAAXA,KAC1BjC,EAAMuF,eAANvF,EACR,EAAsC8U,GAAmB,eAAjDP,EAAR,EAAQA,YAAaC,EAArB,EAAqBA,aAErB,OACE,cAACV,GAAD,CACE7O,MAAOjF,EAAE,eACTsT,MAAOrR,EACPgS,OAAQM,EACRL,QAASM,EACTR,KAAMuB,QAKCC,GAAqB,SAAC,GAAc,IAAZvT,EAAW,EAAXA,KAC3BjC,EAAMuF,eAANvF,EACR,EAAsC8U,GAAmB,gBAAjDP,EAAR,EAAQA,YAAaC,EAArB,EAAqBA,aAErB,OACE,cAACV,GAAD,CACE7O,MAAOjF,EAAE,gBACTsT,MAAO9T,EAAayC,GACpBgS,OAAQM,EACRL,QAASM,EACTR,KAAMyB,QAKCC,GAAe,SAAC,GAAc,IAAD,EAAXC,EAAW,EAAXA,KACrB3V,EAAMuF,eAANvF,EAEF4V,GAAM,oBC9FkD,ED+F5C5V,EAAE,uBADR,eC9FqD,EDgGpDA,EAAE,mBAFH,eC9FwD,EDiGvDA,EAAE,mBAHH,eC9F2D,EDkG3DA,EAAE,kBAJF,eC9F8D,EDmG/DA,EAAE,gBALD,GAOZ,EAAsC8U,GAAmB,UAAjDP,EAAR,EAAQA,YAAaC,EAArB,EAAqBA,aAErB,OACE,cAACV,GAAD,CACE7O,MAAOjF,EAAE,iBACTsT,MAAOsC,EAAOD,GACd1B,OAAQM,EACRL,QAASM,EACTR,KAAM6B,QAKCC,GAAa,SAAC,GAAc,IAAZ7T,EAAW,EAAXA,KACnBjC,EAAMuF,eAANvF,EACR,EAAsC8U,GAAmB,QAAjDP,EAAR,EAAQA,YAAaC,EAArB,EAAqBA,aAErB,OACE,cAACV,GAAD,CACE7O,MAAOjF,EAAE,eACTsT,MAAO9T,EAAayC,GACpBgS,OAAQM,EACRL,QAASM,EACTR,KAAM+B,QE7GG,SAASC,GAAT,GASX,IARF1B,EAQC,EARDA,cACAG,EAOC,EAPDA,YACArU,EAMC,EANDA,QACA6V,EAKC,EALDA,YACAhL,EAIC,EAJDA,YACAsC,EAGC,EAHDA,aACAoI,EAEC,EAFDA,KACA3R,EACC,EADDA,MAEQhE,EAAMuF,eAANvF,EAER,OACE,qCACE,eAAC4T,GAAD,WACE,cAAChB,GAAD,CAAcD,GAAI,GAAlB,SAAuB3S,EAAE,UAEzB,eAAC8S,GAAD,CAAenL,cAAY,EAA3B,UACE,cAAC,GAAD,CAAoB1F,KAAMqS,IAC1B,cAAC,GAAD,CAAmBrS,KAAMwS,IACzB,cAAC,GAAD,CAAaxS,KAAM7B,IACnB,cAAC,GAAD,CAAY6B,KAAMgU,IAClB,cAAC,GAAD,CAAmBhU,KAAMgJ,IACzB,cAAC,GAAD,CAAoBhJ,KAAMsL,IAC1B,cAAC,GAAD,CAAcoI,KAAMA,UAIxB,eAAC9B,GAAD,WACE,cAACjB,GAAD,CAAcxQ,MAAM,OAAOuQ,GAAI,GAA/B,SACG3S,EAAE,WAEL,cAAC,GAAD,CAAcgE,MAAOA,UC7CtB,IAAMkS,GAAyB/L,KAAOC,IAAV,2TAkBtB+L,GAAahM,KAAOC,IAAV,sCACnB,gBACAuI,EADA,EACAA,GAEsB7K,EAHtB,EAEAoE,MACE/D,iBAAoBL,UAHtB,OAKI0C,aALH,QAAD,mMAMEmI,GAAE,yBAAsBA,EAAtB,MAIK7K,EAIL6K,GAAE,yBAAsBA,EAAK,IAA3B,UCiDKyD,GAzEU5G,gBACvB,YAAiF,IAAD,EAA7E1L,EAA6E,EAA7EA,KAAMyM,EAAuE,EAAvEA,eAAgBD,EAAuD,EAAvDA,iBAAkB+F,EAAqC,EAArCA,KAAMpR,EAA+B,EAA/BA,MAAOqR,EAAwB,EAAxBA,kBAC9CtW,EAAMuF,eAANvF,EACFuW,EAAkB,OAAGhG,QAAH,IAAGA,OAAH,EAAGA,GAA+B,OAAdA,QAAc,IAAdA,OAAA,EAAAA,EAAgBrP,QAAS,GAC/DsV,EAAgB,OAAGlG,QAAH,IAAGA,GAAH,UAAGA,EAAkBa,MAAK,qBAAG5N,KAAgBgT,YAA7C,aAAG,EAA+DzF,KAClF2F,EAAqD,KAAb,OAAhBnG,QAAgB,IAAhBA,OAAA,EAAAA,EAAkBpP,QAC1CwV,EAAuBF,GAAoBrG,KAAIiB,MAAMoF,GAIrDG,EAAgB,UtBTM,UAASvY,EAAT,WsBSN,YAA4B2S,mBAAmBsF,GAAQpR,GAAS,QAAhE,qBAAoFnB,EAApF,QAChB8S,EAAmB,UAAMD,EAAN,aAEzB,OACE,sCACIF,MAA0B,OAAClG,QAAD,IAACA,OAAD,EAACA,EAAgBrP,SAC3C,qCACE,cAACiV,GAAD,UAAanW,EAAE,sBACf,eAAC0S,GAAD,CAAgBC,GAAI,GAApB,UACE,iCAAS3S,EAAE,sBADb,WAC4C0W,QAD5C,IAC4CA,OAD5C,EAC4CA,EAAsBzR,MADlE,KAEuB,OAApByR,QAAoB,IAApBA,OAAA,EAAAA,EAAsBnF,SACrB,qCACG,IACAvR,EAAE,UAFL,YAEkB0W,QAFlB,IAEkBA,OAFlB,EAEkBA,EAAsBnF,OAFxC,KAEkDvR,EAAE,WAFpD,YAEkE0W,QAFlE,IAEkEA,OAFlE,EAEkEA,EAAsBrF,QAFxF,UAOJ,eAAC6E,GAAD,WACE,mBAAG9G,MAAO,CAAE0C,eAAgB,QAAUC,KAAM4E,EAA5C,SACE,cAACxQ,GAAA,EAAD,CAAQiJ,MAAO,CAAE1M,MAAO,QAAUwD,QAAQ,YAAY9D,MAAM,UAAU3C,KAAK,QAA3E,SACGO,EAAE,YAIP,mBAAGoP,MAAO,CAAE0C,eAAgB,QAAUC,KAAM6E,EAA5C,SACE,cAACzQ,GAAA,EAAD,CAAQiJ,MAAO,CAAE1M,MAAO,QAAUwD,QAAQ,YAAY9D,MAAM,UAAU3C,KAAK,QAA3E,SACGO,EAAE,4BAMb,cAACmW,GAAD,CAAYxD,GAAI,GAAhB,SAAqB3S,EAAE,kBACvB,eAACkW,GAAD,WACE,cAAC/P,GAAA,EAAD,CAAQL,QAAS,kBApCrBhE,IAAMC,KAAKzD,IAAc,CAAE0D,OAAQ,MAAO8B,OAAM+S,YAAa,IAAKnS,MAAK,kBAAM4R,QAoC5BpQ,QAAQ,YAAY9D,MAAM,UAAU3C,KAAK,QAAtF,SACGO,EAAE,iBAEL,cAACmG,GAAA,EAAD,CAAQL,QAAS,kBAzCGhE,IAAMC,KAAK1D,IAAgB,CAAE2D,OAAQ,OAAQ8B,UAyC3BoC,QAAQ,YAAY9D,MAAM,UAAU3C,KAAK,QAA/E,SACGO,EAAE,oBAGP,cAACmW,GAAD,CAAYxD,GAAI,GAAhB,SAAqB3S,EAAE,UACvB,eAACkW,GAAD,YACIO,KAAyB,OAAClG,QAAD,IAACA,OAAD,EAACA,EAAgBrP,UAC1C,mBAAGkO,MAAO,CAAE0C,eAAgB,QAAUC,KAAM4E,EAA5C,SACE,cAACxQ,GAAA,EAAD,CAAQiJ,MAAO,CAAE1M,MAAO,QAAUwD,QAAQ,YAAY9D,MAAM,UAAU3C,KAAK,QAA3E,SACGO,EAAE,wBAIT,cAAC,mBAAD,CAAiBkS,KAAMpO,EAAvB,SACE,cAACqC,GAAA,EAAD,CAAQD,QAAQ,YAAY9D,MAAM,UAAU3C,KAAK,QAAjD,SACGO,EAAE,yBAOf,kBAAM,KC5EF8W,GAAkB,CAEtB,MACA,MACA,MACA,MACA,QACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,KACA,KACA,OACA,MACA,MACA,MACA,OACA,MACA,MAEA,MACA,OACA,MACA,KACA,OACA,MACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,MACA,MACA,MACA,MC9BIC,GAAS,kBACb,qBAAK3H,MAAO,CAAE4H,UAAW,OAAQ3H,QAAS,OAAQ4H,WAAY,UAA9D,SACE,cAACC,GAAA,EAAD,CAAkB9U,MAAM,iBAIb,SAAS+U,GAAT,GAAgE,IAAD,EAAxBC,EAAwB,EAAxBA,YAAahX,EAAW,EAAXA,QACzDJ,EAAMuF,eAANvF,EACR,EAAkC+D,oBAAS,GAA3C,mBAAOsT,EAAP,KAAkBC,EAAlB,KACA,EAAsDvT,oBAAS,GAA/D,mBAAOwT,EAAP,KAA4BC,EAA5B,KACA,EAA4CzT,qBAA5C,mBAAOwM,EAAP,KAAuB+F,EAAvB,KACA,EAAgDvS,qBAAhD,mBAAOuM,EAAP,KAAyBmH,EAAzB,KACA,EAAwC1T,mBAAS,MAAjD,mBAAO0M,EAAP,KAAqBiH,EAArB,KACA,EAA4C3T,qBAA5C,mBAAOyM,EAAP,KAAuBmH,EAAvB,KAGEtF,EASEjS,EATFiS,OACAvO,EAQE1D,EARF0D,KACAmB,EAOE7E,EAPF6E,MACAoR,EAMEjW,EANFiW,KACAV,EAKEvV,EALFuV,KACgBrB,EAIdlU,EAJFwX,eACcnD,EAGZrU,EAHFyX,aACc5B,EAEZ7V,EAFF0X,aACYC,EACV3X,EADF4X,WAGIhU,EAAQH,GAAeC,GACvBmU,EpBCsB,SAAAjU,GAC5B,MAAgCD,qBAAhC,mBAAOkU,EAAP,KAAiBC,EAAjB,KAKA,OAJA7T,qBAAU,WACRvC,IAAMC,KAAKxD,IAAgB,CAAEyD,OAAQ,QAAS0C,MAAK,gBAAGzC,EAAH,EAAGA,KAAH,OAAciW,EAAYjW,QAC5E,CAAC+B,IAEGiU,EoBPUE,CAAenU,GAExBsJ,EAAgDtJ,EAAhDsJ,SAAUrC,EAAsCjH,EAAtCiH,YAAasC,EAAyBvJ,EAAzBuJ,aAAc6K,EAAWpU,EAAXoU,OAE7C/T,qBAAU,WACR,GAAIiM,GAAqC,OAAjBG,EAAuB,CAC7C,IAAM4H,EAAU,GAChB/H,EAAiB3P,SAAQ,YAAe,IAAZmQ,EAAW,EAAXA,KACpBwH,EAAgBnI,KAAIiB,MAAMN,GAAMS,OAClC+G,IACDD,EAAQ1G,SAAS2G,IAAkBD,EAAQtM,KAAKuM,MAGrDD,EAAQnX,QAAUyW,EAAkBU,EAAQ,IAC5CX,EAAgBW,EAAQE,MAAK,SAAC1W,EAAG2W,GAAJ,OAAU3W,EAAI2W,SAE5C,CAAClI,EAAkBG,IAEtBpM,qBAAU,WACRoT,EAAmB,OAACM,QAAD,IAACA,OAAD,EAACA,EAAiBpL,QAAO,gBDblB8L,ECaqB3H,EAAH,EAAGA,KAAH,ODblB2H,ECa+C3H,EDbnCgG,GAAgBnF,SAnE3C,SAAA+G,GACb,IAAMC,EAAMD,EAAS1H,MAAM,KAAKC,MAChC,OAAI0H,IAAQD,EAAiB,GACtBC,EAAIC,cAgEsDC,CAAOJ,UCcrE,CAACV,IAEJ1T,qBAAU,WACR,IAAMyU,IAAgBC,OAAOC,QAAQhV,GAAO9C,OACtC+X,ELrFsD,IKqFtCtD,GLrFkD,IKqFzBA,EAE1CmD,GAAgBzB,GAAWC,GAAa,GACzCwB,GAAezB,GAAa4B,GAAe3B,GAAa,KAC3D,CAAC3B,EAAM3R,EAAOqT,IAEjBhT,qBAAU,WAERvC,IAAMC,KAAKzD,IAAc,CAAE0D,OAAQ,OAAQ8B,SAAQY,MAAK,YAAe,IAAZzC,EAAW,EAAXA,KACzD,GAAIA,EAAM,CACR,IAAMiX,EAAMjX,EAAKmJ,KAAI,SAAA+N,GAAG,OAAIA,EAAItC,cAAY0B,MAAK,SAAC1W,EAAG2W,GAAJ,OAAU3W,EAAI2W,KAC/DlC,EAAkB4C,QACb5C,SAER,CAACxS,IAEJ,IACMsV,GAAe9L,EAAW,KADf,OAAG2K,QAAH,IAAGA,OAAH,EAAGA,EAAUoB,cAExBC,GAAaF,GAAc,SAAWA,GAAc,SAEpDG,GAAiB,WACrB,IAAMC,EAAmB,GAEnBC,EAAoBpD,GAAQlG,KAAIiB,MAAMiF,GAExCpR,IAAUoR,EACZmD,EAAiBzN,KAAKvL,EAA0ByE,KAC3C,OAAIwU,QAAJ,IAAIA,OAAJ,EAAIA,EAAmBxU,QAAOuU,EAAiBzN,KAAKvL,EAAyB,OAACiZ,QAAD,IAACA,OAAD,EAACA,EAAmBxU,SAGnF,OAAjBwU,QAAiB,IAAjBA,OAAA,EAAAA,EAAmBC,QAASF,EAAiB,GAAG7H,SAApB,OAA6B8H,QAA7B,IAA6BA,OAA7B,EAA6BA,EAAmBC,OAC9EF,EAAiBzN,KAAjB,OAAsB0N,QAAtB,IAAsBA,OAAtB,EAAsBA,EAAmBC,OACtB,OAAjBD,QAAiB,IAAjBA,OAAA,EAAAA,EAAmBhI,cAAe+H,EAAiB,GAAG7H,SAApB,OAA6B8H,QAA7B,IAA6BA,OAA7B,EAA6BA,EAAmBhI,aACpF+H,EAAiBzN,KAAjB,OAAsB0N,QAAtB,IAAsBA,OAAtB,EAAsBA,EAAmBhI,YAE3C,IAAMkI,EAAgBH,EAAiBI,KAAK,MAM5C,MAF8C,MAA5CD,EAAcA,EAAczY,OAAS,IAA0D,MAA5CyY,EAAcA,EAAczY,OAAS,GAE/D,UAAMyY,EAAN,KAAyBA,GAGtD,OACE,qCACE,cAACvU,GAAD,aACEC,QAAS+R,EACTnS,MAA6BjF,EAAtBuX,EAAwB,2BAAgC,mBAC1DA,GAAuB,CAAEjS,OAAQ,kBAAMkS,GAAuB,OAGrE,qBACEpI,MAAK,aACH4H,UAAW,OACX6C,SAAU,QACNtC,GAAuB,CAAElI,QAAS,OAAQC,cAAe,WAJjE,SAOG+H,EACC,cAAC,GAAD,IACEE,EACF,cAACvB,GAAD,CACE1B,cAAeA,EACfG,YAAaA,EACbrU,QAASA,EACT6V,YAAaA,EACbhL,YAAaA,EACbsC,aAAcA,EACdoI,KAAMA,EACN3R,MAAOA,IAGT,eAACmO,GAAD,WACE,eAACG,GAAD,WACE,cAACF,GAAD,CAAQC,OAAQA,EAAhB,SAAyBA,EAAS,qBAAKyH,IAAI,SAASC,IAAK1H,IAAa,cAAC,EAAD,MAEtE,gCACGpN,GAASoR,IAASpR,EACjBsU,KAAiBrY,OAAS,GACxB,qCACE,cAAC0R,GAAD,UAAezC,KAAIiB,MAAMiF,GAAMpR,QAC/B,cAACyN,GAAD,CAAgBC,GAAI,GAApB,SAAyB4G,UAG3B,qCACE,cAAC3G,GAAD,UAAe2G,OACf,cAAC7G,GAAD,CAAgBC,GAAI,GAApB,mBAAyBxC,KAAIiB,MAAMiF,GAAQ,WAA3C,aAAyB,EAAuBpR,WAIpD,cAAC2N,GAAD,CAAcD,GAAI,GAAlB,SAAuB4G,OAGzB,eAACzG,GAAD,WACE,cAAC,GAAD,CAAoB7Q,KAAMqS,IAC1B,cAAC,GAAD,CAAmBrS,KAAMwS,IACzB,cAAC,GAAD,CAAaxS,KAAM7B,IACnB,cAAC,GAAD,CAAY6B,KAAMgU,IAClB,cAAC,GAAD,CAAcN,KAAMA,OAGtB,cAAChC,GAAD,IAEA,cAAC,GAAD,CACE7P,KAAMA,EACNyM,eAAgBA,EAChBD,iBAAkBA,EAClB+F,KAAMA,EACNpR,MAAOA,EACPqR,kBAAmBA,UAKzB,eAAC9D,GAAD,WACE,eAACK,GAAD,WACE,cAACD,GAAD,CAAcD,GAAI,GAAlB,SAAuB3S,EAAE,YACxBsZ,IAAc,UAAY,cAAC5G,GAAD,UAAiB1S,EAAE,gBAC9C,cAACoT,GAAD,CACEE,MAAO8E,EACP7E,WAAY+F,GACZ5F,MAAK,UAAKlU,EAAa8Z,IAAlB,cAAmC9Z,EAAa4Y,IAAb,YAA6BpY,EAAE,YAI3E,cAAC,GAAD,CAAcsK,QAAM,EAACtG,MAAOA,IAC5B,cAACmC,GAAA,EAAD,CACEiJ,MAAO,CAAE4K,UAAW,QACpB9T,QAAQ,YACR9D,MAAM,UACN3C,KAAK,QACLqG,QAAS,kBAAM0R,GAAuB,IALxC,SAOGxX,EAAE,iCAIP,eAACyS,GAAD,WACE,cAACG,GAAD,CAAcD,GAAI,GAAlB,SAAuB3S,EAAE,qBAEZ,OAAZyQ,QAAY,IAAZA,OAAA,EAAAA,EAAcvP,QAAS,GACtB,qCACE,cAACwR,GAAD,CAAgBC,GAAI,EAApB,SAAwB3S,EAAE,kBAC1B,cAACia,GAAA,EAAD,CAAa7K,MAAO,CAAE8K,aAAc,QAAU9X,MAAM,YAApD,SACGqO,EAAarF,KAAI,SAAAmG,GAAM,OACtB,cAACpL,GAAA,EAAD,CAEED,QAASsK,IAAmBe,EAAS,YAAc,WACnDzL,QAAS,kBAAM6R,EAAkBpG,IAHnC,SAKGA,GAJIA,QASX,eAACqB,GAAD,CAAcD,GAAI,GAAlB,UACG3S,EAAE,UADL,IACiBwQ,QAKrB,cAAC,GAAD,CACE1M,KAAMA,EACNwM,iBAAkBA,EAClBC,eAAgBA,EAChBC,eAAgBA,EAChBC,aAAcA,e,iEC1Pf,cACb,IAAQ/R,EAAS6G,eAAT7G,KAGR,MAAO,CAFmC,UAAlBA,EAAKyb,UAA0C,OAAlBzb,EAAKyb,SAAoB,KAAOzb,EAAKyb,SAEjE,SAAAC,GAAI,OAAI1b,EAAK2b,eAAeD,MCJxC,SAASE,GAAiBhH,GACvC,IAAM/D,EAAMpL,iBAAOmP,GAMnB,OAJAjP,qBAAU,WACRkL,EAAIjL,QAAUgP,IACb,CAACA,IAEG/D,EAAIjL,Q,0HCPAiW,GAASpQ,KAAOC,IAAV,sCACf,gBAAY/H,EAAZ,EAAG6J,MAAS7J,QAAZ,OAA4BmI,aAA3B,QAAD,yTACcnI,MAWLmY,GAAgBrQ,KAAOC,IAAV,0JCXbqQ,GAAkB,SAACC,GAAgC,IAArBP,EAAoB,uDAAT,KAC9CQ,EAAM,2CAEZ,OAAO7Y,IACJ8Y,IAAID,EAAK,CACRE,OAAQ,CACNC,QAASC,mCACTZ,WACAa,uBAAuB,GAAD,OAAKb,EAAL,YACtBc,MAAOP,KAGVhW,MAAK,qBAAGzC,KAAQiZ,QACPvO,QAAO,SAAA/L,GAAE,OAAIA,EAAGua,eAAa/P,KAAI,SAAAxK,GAAE,+CAAsCA,EAAGua,mBAErFxW,OAAM,kBAAM,SAGJyW,GAAa,uCAAG,WAAMT,GAAN,SAAA9Y,EAAA,yDACtB8Y,GAAQA,EAAIlZ,MAAM,yBADI,0CAC6B,GAD7B,gCAInBmP,MAAM+J,EAAK,CAAEU,KAAM,YAJA,iCAKlB,GALkB,0DAOlB,GAPkB,yDAAH,sDAWpBC,GAAc,+BACPC,GAAY,4DACnBC,GAAe,mBACfC,GAAY,sBCjCLC,GAAUvR,KAAOC,IAAV,sCAChB,gBACAuR,EADA,EACAA,WADA,IAEAzP,MACErE,UAAaT,EAHf,EAGeA,mBAAoBC,EAHnC,EAGmCA,iBAAkBS,EAHrD,EAGqDA,UAHrD,OAKI0C,aALH,QAAD,2eAOsCpD,EAAuBC,EAG7BsU,EAAa,IAAM,IAG1C7T,EAGL,OAcK8T,GAAYzR,KAAOC,IAAV,6DAITyR,GAAqB1R,KAAOC,IAAV,sCAC3B,gBACA0R,EADA,EACAA,SACAC,EAFA,EAEAA,oBACAC,EAHA,EAGAA,QAHA,IAIA9P,MACErE,UAAaE,EALf,EAKeA,yBAA0BC,EALzC,EAKyCA,2BALzC,OAOIwC,aAPH,QAAD,oIAUEuR,GACFvR,aADqB,4bAQLuR,EAGEC,EAAUjU,EAA2BC,GAUrD8T,GACFtR,aADU,6DAUDyR,GAAW9R,KAAOC,IAAV,4HAMR8R,GAAmC1R,aAAH,mHAOhC2R,GAA8BhS,KAAOC,IAAV,gmBACpC8R,IAIA,qBAAGE,cAA+B,8BA8BzBC,GAAoClS,KAAOC,IAAV,iLAC1C8R,IAYSI,GAAqBnS,KAAOC,IAAV,sDAIlBmS,GAAoBpS,KAAOC,IAAV,2OAgBjBoS,GAAcrS,KAAOC,IAAV,mLAYXqS,GAAqBtS,KAAOC,IAAV,sCAC3B,gBACAsS,EADA,EACAA,OAEetV,EAHf,EAEA8E,MACErE,UAAaT,mBAHf,OAKIoD,aALH,QAAD,qHAMcpD,EAIZsV,GAAU,qDAIHC,GAAgBxS,KAAOC,IAAV,yeAwBbwS,GAAoBzS,KAAOC,IAAV,iaAiBjByS,GAAwB1S,KAAOC,IAAV,8eAiCrBgI,GAASjI,KAAOC,IAAV,sCACf,gBACAiI,EADA,EACAA,OAEelL,EAHf,EAEA+E,MACErE,UAAaV,cAHf,OAKIqD,aALH,QAAD,8HAWE6H,EACE7H,aADI,4LASJA,aATI,iNAYYrD,OASX2V,GAAoB3S,aAAOhE,KAAPgE,CAAH,qNAK1B,qBAAG4S,YAAgC,mBAO1BC,GAAuB7S,KAAOC,IAAV,sCAC7B,gBACA2S,EADA,EACAA,WADA,IAEA7Q,MACErE,UAAaI,EAHf,EAGeA,sBAAuBC,EAHtC,EAGsCA,wBAHtC,OAKIsC,aALH,QAAD,4bAccvC,EAILC,GAKN6U,GAAc,oB,8BC1TN,SAASE,GAAT,GAwBX,IAvBFC,EAuBC,EAvBDA,SACAC,EAsBC,EAtBDA,aACAC,EAqBC,EArBDA,sBACAC,EAoBC,EApBDA,8BACAC,EAmBC,EAnBDA,cACAC,EAkBC,EAlBDA,uBACAC,EAiBC,EAjBDA,oBACAvY,EAgBC,EAhBDA,MACAwY,EAeC,EAfDA,YACAC,EAcC,EAdDA,UACAC,EAaC,EAbDA,mBACAC,EAYC,EAZDA,WACAC,EAWC,EAXDA,YACAC,EAUC,EAVDA,qBACAC,EASC,EATDA,wBACAC,EAQC,EARDA,aACAC,EAOC,EAPDA,aACAC,EAMC,EANDA,cACAC,EAKC,EALDA,qBACAC,EAIC,EAJDA,sBACAC,EAGC,EAHDA,qBACAC,EAEC,EAFDA,wBACA3C,EACC,EADDA,WAEQ3b,EAAMuF,eAANvF,EACFqC,EAAUC,cAAWC,QAAQF,QAAQG,KAErC+b,EAAoB,SAAC,GAAD,IAAajL,EAAb,EAAGtB,OAAUsB,MAAb,OAA2B4J,EAAS5J,IAa9D,OACE,eAACsI,GAAD,WACE,eAACC,GAAD,CAAoBC,UAAWyB,GAA2BC,IAAwB7B,EAAlF,UACGwC,EACC,qCACE,cAACK,GAAA,EAAD,CACElL,MAAO6K,EACPM,OAAO,QACP/K,MAAO1T,EAAE,kCACToJ,KAAK,OACLsV,WAAS,EACTC,SAAUN,EACVO,WAAY,CAAEC,UAAU,KAE1B,cAACL,GAAA,EAAD,CACEM,SAAUP,EACVQ,QAAS,kBAAMT,GAAwB,IACvCU,OAAQ,qBAAGhN,OAAUsB,OAAwBgL,GAAwB,IACrEhL,MAAOrO,EACPwZ,OAAO,QACP/K,MAAO1T,EAAE,gCACToJ,KAAK,OACLsV,WAAS,EACTO,WAAYjf,EAAE,0CACd4e,WAAY,CACVM,aACE,cAACC,GAAA,EAAD,CAAgBna,SAAS,MAAzB,SACE,cAACY,EAAA,EAAD,CACEwJ,MAAO,CAAEgQ,QAAS,aAClBtZ,QAAS,WACPoX,EAAS,IACToB,GAAyBD,GACzBD,IACAf,GAA8B,IANlC,SASE,cAACgC,GAAA,EAAD,CAAcjQ,MAAO,CAAEhN,MAAOic,EAAuBhc,EAAU,oBAQ3E,cAACmc,GAAA,EAAD,CACEM,SAAUP,EACVjL,MAAOrO,EACPwZ,OAAO,QACP/K,MAAO1T,EAAE,wBACToJ,KAAK,OACLsV,WAAS,IAGb,cAACF,GAAA,EAAD,CACEM,SAlEsB,SAAC,GAA2B,IAAfxL,EAAc,EAAxBtB,OAAUsB,MACzC6J,EAAa7J,GACb8H,GAAc9H,GAAO5O,KAAK0Y,GAC1BC,IAAgC/J,GAChCgK,KA+DMhK,MAAOoK,EACPe,OAAO,QACP/K,MAAO1T,EAAE,gCACToJ,KAAK,MACLsV,WAAS,IAGX,eAAC/B,GAAD,WACE,cAAC,GAAD,CAAQtK,QAASsL,EAAjB,SACGA,EAAqB,qBAAK5D,IAAK2D,EAAW5D,IAAI,WAAc,cAAC,EAAD,MAG/D,cAAC8C,GAAD,iBACGgB,QADH,IACGA,OADH,EACGA,EACGjR,QAAO,SAAAgO,GAAG,OAAIA,IAAQ+C,KACvB4B,MAAM,EAAG,IACTlU,KAAI,SAAAuP,GAAG,OACN,cAACkC,GAAD,CAAuB/W,QAAS,kBA9EjB,SAAA6U,GAC3BwC,EAAaxC,GACbS,GAAcT,GAAKjW,KAAK0Y,GACxBC,GAA8B,GA2EoBkC,CAAqB5E,IAA3D,SACE,qBAAKZ,IAAKY,EAAKb,IAAI,YADiDa,QAM3D,OAAhBkD,GACC,cAACb,GAAD,CACElX,QAAS,WACP,IAAM0Z,EAAuC,OAAzB1B,EAAgC,KAAO,KAC3DC,EAAwByB,GACxBxB,EAAaK,EAAuBpZ,EAAQkZ,EAAuBV,EAAcxY,EAAOua,EAAa,CACnGC,yBAAyB,KAG7B1C,YAAaY,EACbvb,MAAM,UACN8D,QAAQ,YACRzG,KAAK,QAXP,SAa4B,OAAzBqe,EAAgC,KAAO,OAI5C,cAAChB,GAAD,CACEC,YAAaY,EACb7X,QAAS,WACPmY,IACAZ,GAA8B,IAEhCjb,MAAM,UACN8D,QAAQ,YACRzG,KAAK,QARP,SAUGO,EAAE,iBAKT,cAAC6b,GAAD,CACEG,QAASkC,KAAmBX,GAA0BC,GACtDzB,oBACGmC,EAEIX,EAEDC,GAAuBxd,EAAE,wBADzBA,EAAE,gCAFFA,EAAE,0CAKR8b,SAAUH,GAAe4B,IAA2BC,O,sDCjK7C,SAASkC,GAAT,GAMX,IALFrC,EAKC,EALDA,8BACAsC,EAIC,EAJDA,gBACAzB,EAGC,EAHDA,cACA0B,EAEC,EAFDA,iBACAC,EACC,EADDA,aAEQ7f,EAAMuF,eAANvF,EAgBR,EAA0D+D,oBAAS,GAAnE,mBAAO+b,EAAP,KAA8BC,EAA9B,KACA,EAAsDC,aAAY,CAAEC,OAf9C,SAAAC,GACpB,IAAOC,EAAP,YAAeD,EAAf,MACKC,IAEL9C,GAA8B,GAC9BsC,EAAgBQ,GAChBP,EAAiBO,EAAK9J,QASmE+J,OAAQ,aAA3FC,EAAR,EAAQA,aAAcC,EAAtB,EAAsBA,cAAelE,EAArC,EAAqCA,aAIrC,OACE,eAACH,GAAD,WACE,cAACQ,GAAD,CAAoBC,OAAQoD,EAA5B,SACE,cAACtB,GAAA,EAAD,CACEM,SAN0B,SAAC,GAAD,IAAaxL,EAAb,EAAGtB,OAAUsB,MAAb,OAA2BsM,EAAiBtM,IAOtEA,MAAO4K,EACPO,OAAO,QACP/K,MAAO1T,EAAE,+BACTif,WAAYjf,EAAE,kCACdoJ,KAAK,OACLsV,WAAS,EACTK,QAAS,kBAAMgB,GAAyB,IACxCf,OAAQ,kBAAMe,GAAyB,IACvCQ,WAAY,CAAEC,aAAc,OAC5B7B,WAAYkB,MAIfA,EACC,cAACxD,GAAD,UACE,eAACC,GAAD,WACE,cAAC,GAAD,IAEA,cAACC,GAAD,CAAmBzW,QAjCH,WACxB6Z,IACAC,EAAiB,KA+BT,SACE,cAACa,GAAA,EAAD,WAKN,eAACtE,GAAD,yBAA6BC,aAAcA,GAAkBiE,KAA7D,cACE,qCAAWC,MACX,8BAAMtgB,EAAE,6BAER,eAACwc,GAAD,WACE,cAAC,EAAD,CAAapa,MAAM,YACnB,8BAAMpC,EAAE,gDC3DL,SAAS0gB,GAAT,GAMX,IALFC,EAKC,EALDA,YACMC,EAIL,EAJD9c,KACO+c,EAGN,EAHD5b,MACM6b,EAEL,EAFDzK,KACQ0K,EACP,EADD1O,OAEQrS,EAAMuF,eAANvF,EACF2b,IAAeiF,EACrB,EAA0C7c,mBAAS6c,GAAgB,IAAnE,mBAAO1C,EAAP,KAAsB0B,EAAtB,KACA,EAA0B7b,mBAAS8c,GAAiB,IAApD,mBAAO5b,EAAP,KAAciY,EAAd,KACA,EAAwDnZ,mBAAS,IAAjE,mBAAOoa,EAAP,KAA6B6C,EAA7B,KACA,EAAsCjd,mBAAS,IAA/C,mBAAO0Z,EAAP,KAAoBwD,EAApB,KACA,EAAkCld,mBAASgd,GAAkB,IAA7D,mBAAOrD,EAAP,KAAkBP,EAAlB,KACA,EAAoDpZ,oBAAS,GAA7D,mBAAO4Z,EAAP,KAA2BP,EAA3B,KACA,EAA4DrZ,oBAAS,GAArE,mBAAOwZ,EAAP,KAA+B2D,EAA/B,KACA,EAAsDnd,oBAAS,GAA/D,mBAAOyZ,EAAP,KAA4B2D,EAA5B,KACA,EAAoCpd,qBAApC,mBAAO6Z,EAAP,KAAmBN,EAAnB,KACA,EAAoEvZ,mBAAS4X,GAA7E,mBAAOyF,EAAP,KAAmC/D,GAAnC,KACA,GAAsBgE,KAAfxD,GAAP,qBACA,GAAwC9Z,qBAAxC,qBAAO8b,GAAP,MAAqBF,GAArB,MACA,GAAwD5b,mBAAyB,OAAhB8Z,GAAuB,KAAO,MAA/F,qBAAOC,GAAP,MAA6BC,GAA7B,MACA,GAAgCha,oBAAS,GAAzC,qBAAOud,GAAP,MAAiBC,GAAjB,MACA,GAAwCxd,oBAAS,GAAjD,qBAAOyd,GAAP,MAAqBC,GAArB,MACA,GAAwD1d,oBAAS,GAAjE,qBAAOsa,GAAP,MAA6BC,GAA7B,MACA,GAAkDva,qBAAlD,qBAAO2d,GAAP,MAA0BC,GAA1B,MAEcC,GAAaC,aAAS,WAAYjgB,EAAa,CAAEkgB,MAAO,EAAGC,gBAAiB,MAAlF9f,KAERoC,qBAAU,WAER2d,KAAaC,OAAOpC,IAAgB3B,GAAe,SAACgE,GAAD,6DAAmB,GAAbC,EAAN,EAAMA,SAAN,OAA0BR,GAAqBQ,QACjG,CAACtC,GAAc3B,IAElB7Z,qBAAU,WAER,GAAKsd,GAAL,CAEA,IAAMS,EAAYR,GAASxW,KAAI,qBAAGtH,QAClCqd,EAAuBiB,EAAUzQ,SAAS+P,QACzC,CAACA,GAAmBE,KAEvBvd,qBAAU,WAEHid,KAEaM,GAASxW,KAAI,qBAAGtH,QACxB6N,SAAS+P,KAAsBf,OACxC,CAACW,GAAUM,GAAUF,GAAmBf,IAE3C,IAAM0B,GAAaC,aAAc,4BAE3BlE,GAAwBmE,uBAAY,WJ7BX,IAACC,EAAeC,EAAfD,EI8BZ3C,IAAgB3B,EJ9BWuE,EI8BI,YAAoC,IAAjChF,EAAgC,EAAhCA,YAAaqD,EAAmB,EAAnBA,aAC1DA,IAELW,IAAgB,GAChBvE,EAAS,IACToB,IAAwB,GACxB0C,EAAwBF,GACxBG,EAAexD,KJpCnBuE,KAAaC,OAAOO,GAAe,SAACE,GAA+B,IAAD,yDAAP,GAAhBrM,EAAuB,EAAvBA,KAAM6J,EAAiB,EAAjBA,MAC/C,IAAK7J,GAAQqM,EAAK,OAAOD,EAAS,CAAEhF,YAAa,KAAMqD,aAAc,OAErE,IAAM6B,EAAcxS,KAAIiB,MAAMiF,GAAMpR,MAC9B2d,EAA0B1C,EAAQ/P,KAAIiB,MAAM8O,EAAM,GAAG7J,MAAMpR,MAAQ,KAErE4d,EAAWF,EACXC,IAEFC,EAAWF,EAAYzhB,OAAS0hB,EAAwB1hB,OAASyhB,EAAcC,GAGjFH,EAAS,CAAEhF,YAAaoF,EAAU/B,aAAczK,SI0B/C,CAACwJ,GAAc3B,IAElB7Z,qBAAU,WACHwb,IAAiB3B,IACpBhB,EAAS,IACT8D,EAAwB,IACxBC,EAAe,IACf3C,IAAwB,GACxBhB,IACAW,KACAZ,IAA8B,MAE/B,CAACwC,GAAc3B,IAElB,IAAMD,GAAe,WACnBb,GAAsB,GACtBD,EAAa,KAGf9Y,qBAAU,WACJuc,GACFxF,GAAcsC,GAAWhZ,MAAK,SAAAoe,GAC5BA,EAAe1F,GAAsB,GAAQa,UAKhD,IAEH,IAAMD,GAAe+E,mBACnB,kBACE,SAACrI,EAAWP,GAAwD,IAAD,yDAAP,GAAO,IAA3CsF,+BAA2C,SACjE,IAAK/E,EAGH,OAFA4C,SACAW,KAIFxD,GAAgBC,EAAWP,GAAUzV,MAAK,SAAAse,GACxC,GAAIA,EAAS,CAEX,GADA1F,EAAc0F,IACTvD,GAA2B2B,EAA4B,OAE5D,IAAO6B,EAAP,YAAsBD,EAAtB,MACA5H,GAAc6H,GAAave,MAAK,SAAAoe,GAC1BA,GACF1F,GAAsB,GACtBD,EAAa8F,IACRhF,YAEJ,CAEL,GADAX,IACI8D,EAA4B,OAEhCnD,YAIR,CAACmD,IAGG8B,GAAsBH,mBAAQ,kBAAMI,KAASnF,GAAc,OAAM,CAACA,KAElEoF,GAAyB9I,GAAiB4D,GAEhD7Z,qBAAU,WACR,IJ/G8BmJ,EIgH9B,KJ/G0B,QADIA,EI+Ga0Q,GJ9GtCzc,MAAM8Z,KACiB,OAA9B/N,EAAO/L,MAAM6Z,KACkB,OAA/B9N,EAAO/L,MAAM+Z,KACe,OAA5BhO,EAAO/L,MAAMga,KI4GW,OAAOyF,GAA0B,GAEvDA,GAA0B,GAGGhD,IAAkBkF,IAG/ChF,OACC,CAACgF,GAAwBvD,GAAc3B,EAAeE,KAEzD,IAAMiF,GAAiB/I,GAAiBrV,GAExCZ,qBAAU,YAEaY,IAAUoe,IACT5F,KAElB+D,IACFxD,GAAa/Y,GAASwY,EAAaK,IACnC2D,IAAgB,IACNxc,EASVie,GAAoBje,EAAO6Y,KAR3BoF,GAAoBI,SAEhB7F,EACFO,GAAaP,EAAaK,KAEzBsD,GAA8BnD,SAKlC,CACDhZ,EACAwY,EACA4F,GACAH,GACAlF,GACAF,GACA0D,GACAJ,IA+BF,OACE,eAACmC,GAAA,EAAD,CAAQC,MAAI,EAACne,QAASsb,EAAa0B,WAAYA,GAAY3D,WAAS,EAAC+E,SAAS,KAA9E,UACE,cAAClJ,GAAD,UAASva,EAAE2b,EAAa,cAAgB,mBAExC,eAACD,GAAD,CAASC,WAAYA,EAArB,WACIA,GACA,cAAC+D,GAAD,CACErC,8BAA+BA,GAC/BwC,aAAcA,GACdF,gBAAiBA,GACjBzB,cAAeA,EACf0B,iBAAkBA,IAItB,cAAC3C,GAAD,CACEkB,qBAAsBA,EACtBjB,SAAUA,EACVC,aAAcA,EACdC,sBAAuBA,EACvBC,8BAA+BA,GAC/BC,cAAeA,EACfC,uBAAwBA,EACxBC,oBAAqBA,EACrBvY,MAAOA,EACPwY,YAAaA,EACbC,UAAWA,EACXC,mBAAoBA,EACpBC,WAAYA,EACZC,YAAaA,GACbC,qBAAsBA,GACtBC,wBAAyBA,GACzBC,aAAcA,GACdC,aAAcA,GACdG,sBAAuBA,GACvBF,cAAeA,EACfG,qBAAsBA,GACtBC,wBAAyBA,GACzB3C,WAAYA,OAIhB,eAACnB,GAAD,WACE,cAACrU,GAAA,EAAD,CAAQL,QAAS6a,EAAave,MAAM,YAAY8D,QAAQ,WAAxD,SACGlG,EAAE,YAGL,cAACmG,GAAA,EAAD,CACED,QAAQ,YACRkJ,MAAO,CAAEsU,SAAU,SACnB/E,UAAWT,GAAkBV,IAAwB7B,IAAgB4B,EACrEzX,QA/EW,WAGjB,GAFAyb,IAAY,GAER5F,EACF7Z,IACGC,KAAK1D,IAAgB,CACpB2D,OAAQ,MACR8B,KAAM8c,EACN3b,MAAOA,GAAS6b,EAChBzO,OAAQqL,IAETiG,QAAQhD,QACN,GAAId,GAAc,CAEvB,IAAM5d,EAAO,IAAI2hB,SACjB3hB,EAAK4hB,OAAO,OAAQ,QACpB5hB,EAAK4hB,OAAO,OAAQhE,IACpB5a,GAAShD,EAAK4hB,OAAO,QAAS5e,GAC9ByY,GAAazb,EAAK4hB,OAAO,SAAUnG,GACnC5b,IAAMC,KhC7MqB,UAAS3D,EAAT,mBgC6MK6D,GAAM0C,MAAMgc,QAG5C7e,IACGC,KAAK1D,IAAgB,CAAE2D,OAAQ,MAAO4P,KAAMsM,EAAejZ,QAAOoN,OAAQqL,EAAWoG,YAAY,IACjGnf,MAAMgc,IAwDLve,MAAM,UALR,SAOGkf,GAAW,cAACpK,GAAA,EAAD,CAAkB9H,MAAO,CAAEhN,MAAO,SAAW3C,KAAM,KAASO,EAAE2b,EAAa,OAAS,eCjRnG,I,uCAAMoI,GAAc5Z,KAAOC,IAAV,sCACpB,gBAEiBpD,EAFjB,EACAkF,MACEtF,YAAeI,iBAFjB,OAIIwD,aAJH,QAAD,0uBAYcxD,MAmBLgd,GAAoB7Z,KAAOC,IAAV,mOAM1B,gBACA6Z,EADA,EACAA,SADA,IAEA/X,MACEtF,YAAeK,EAHjB,EAGiBA,mBAAoBJ,EAHrC,EAGqCA,gBAHrC,OAMAod,EACIzZ,aADI,2LASJA,aATI,wOAYYvD,EACMJ,MAcjBqd,GAAqB/Z,KAAOC,IAAV,mPAalB+Z,GAAyBha,KAAOC,IAAV,sCAC/B,oBACA8B,MACEtF,YAAeK,EAFjB,EAEiBA,mBAAoBJ,EAFrC,EAEqCA,gBAFrC,OAII2D,aAJH,QAAD,iuDAMcvD,EAsBHJ,MA2DFud,GAAeja,KAAOka,OAAV,sCACrB,oBACAnY,MACEtF,YAAeE,EAFjB,EAEiBA,cAAeD,EAFhC,EAEgCA,gBAFhC,OAII2D,aAJH,QAAD,uyBAYc1D,EAUED,MChLdyd,GAAaC,sBAAW,SAACC,EAAOjV,GAAR,OAAgB,cAACkV,GAAA,EAAD,aAAOC,UAAU,KAAKnV,IAAKA,GAASiV,OAE5EG,GAAU,SAAC,GAAiB,IAAfvkB,EAAc,EAAdA,QACTJ,EAAMuF,eAANvF,EACR,EAAwD+D,oBAAS,GAAjE,mBAAO6gB,EAAP,KAA6BC,EAA7B,KACA,EAA0D9gB,oBAAS,GAAnE,mBAAO+gB,EAAP,KAA8BC,EAA9B,KAEM7Y,EAAQ5J,cACR+f,EAAaC,aAAcpW,EAAM8Y,YAAYC,KAAK,OAGlDC,EAAoB,kBAAML,GAAwB,IAElDM,EAA0B,kBAAMJ,GAAyB,IAEvD9f,EAAwF7E,EAAxF6E,MAAOoR,EAAiFjW,EAAjFiW,KAAMhE,EAA2EjS,EAA3EiS,OAAsB4D,EAAqD7V,EAAnE0X,aAA2CxD,EAAwBlU,EAAxCwX,eAA+B9T,EAAS1D,EAAT0D,KAmB/E2Z,EAde,WACrB,IAAMrM,EAAQ,SAAAgU,GAAG,eAAI,UAAAjV,KAAIiB,MAAMnM,GAAS,WAAnB,eAAyBmgB,MAAzB,UAAiCjV,KAAIiB,MAAMiF,GAAQ,WAAnD,aAAiC,EAAwB+O,KAExEC,EAAe,GAEjB5H,EAAcjd,EAA0B4Q,EAAM,UAC5CkU,EAAalU,EAAM,QACnBmU,EAAmBnU,EAAM,cAK/B,OAJIqM,GAAa4H,EAAatZ,KAAK0R,GAC/B6H,GAAYD,EAAatZ,KAAb,WAAsBuZ,EAAtB,MACZC,GAAkBF,EAAatZ,KAAb,WAAsBwZ,EAAtB,MAEf,CAAE9H,YADTA,EAAc4H,EAAazL,KAAK,MAGVL,GAAhBkE,YAER,EAAgD1Z,oBAAS,GAAzD,mBAAOyhB,EAAP,KAAyBC,EAAzB,KAIA,OACE,qCACE,eAAC1B,GAAD,WACE,cAACC,GAAD,CAAmBC,SAAU5R,EAA7B,SACGA,EAAS,qBAAK0H,IAAK1H,EAAQyH,IAAI,WAAc,cAAC,EAAD,MAGhD,eAACoK,GAAD,WACE,eAACE,GAAD,CAActe,QAtCG,kBAAM+e,GAAwB,IAsC/C,UACE,cAACa,EAAA,EAAD,IACA,+BAAO1lB,EAAE,gBAGX,eAACokB,GAAD,CAActe,QAhBY,kBAAM2f,GAAoB,IAgBpD,UACE,cAACE,EAAA,EAAD,IACA,+BAAO3lB,EAAE,aAGX,eAACokB,GAAD,CAActe,QAAS,kBAzCLhE,IAAMC,KAAK1D,IAAgB,CAAE2D,OAAQ,OAAQ8B,UAyC/D,UACE,cAAC8hB,EAAA,EAAD,IACA,+BAAO5lB,EAAE,aAGX,eAACokB,GAAD,CAActe,QAnDS,kBAAMif,GAAyB,IAmDtD,UACE,cAACc,EAAA,EAAD,IACA,+BAAO7lB,EAAE,kBAIb,eAACmkB,GAAD,WACE,sBAAKze,UAAU,4BAAf,UACE,qBAAKA,UAAU,2BAAf,SAA2C1F,EAAE,UAC7C,qBAAK0F,UAAU,4BAAf,SAA4C+X,OAG9C,sBAAK/X,UAAU,iCAAf,UACE,sBAAKA,UAAU,yCAAf,UACE,qBAAKA,UAAU,2BAAf,SAA2C1F,EAAE,UAC7C,qBAAK0F,UAAU,uCAAf,SAAuDuQ,EAAc,GAAKzW,EAAayW,QAGzF,sBAAKvQ,UAAU,yCAAf,UACE,qBAAKA,UAAU,2BAAf,SAA2C1F,EAAE,WAC7C,qBAAK0F,UAAU,uCAAf,SACG4O,EAAgB,EAAIrU,EAAcqU,GAAiB,WAIxD,sBAAK5O,UAAU,yCAAf,UACE,qBAAKA,UAAU,2BAAf,SAA2C1F,EAAE,WAC7C,qBAAK0F,UAAU,uCAAf,SAAuDvF,EAAcC,IAAY,oBAMzF,cAACmjB,GAAA,EAAD,CACEC,KAAMoB,EACNvf,QAAS6f,EACT7C,WAAYA,EACZ3D,WAAS,EACT+E,SAAS,KACTqC,oBAAqBxB,GANvB,SAQE,cAACnN,GAAD,CAA6BC,YAAa8N,EAAmB9kB,QAASA,MAGxE,eAACmjB,GAAA,EAAD,CAAQC,KAAMsB,EAAuBzf,QAAS8f,EAA9C,UACE,cAACY,GAAA,EAAD,UAAc/lB,EAAE,oBAChB,eAACgmB,GAAA,EAAD,WACE,cAAC7f,GAAA,EAAD,CAAQD,QAAQ,WAAWJ,QAASqf,EAAyB/iB,MAAM,UAAnE,SACGpC,EAAE,YAGL,cAACmG,GAAA,EAAD,CACED,QAAQ,YACRJ,QAAS,WAlGShE,IAAMC,KAAK1D,IAAgB,CAAE2D,OAAQ,MAAO8B,SAoG5DqhB,KAEF/iB,MAAM,UACNgE,WAAS,EAPX,SASGpG,EAAE,cAKRwlB,GACC,cAAC9E,GAAD,CAAW5c,KAAMA,EAAMmB,MAAOA,EAAOoR,KAAMA,EAAMhE,OAAQA,EAAQsO,YA3FzC,kBAAM8E,GAAoB,UAiG3CjW,kBAAKmV,ICzJPsB,GAAa9b,KAAOC,IAAV,sCACnB,gBAES3D,EAFT,EACAyF,MACE3F,IAAOE,kBAFT,OAII+D,aAJH,QAAD,kOAMczD,aAAKN,EAAmB,QAU7Byf,GAAe/b,KAAOC,IAAV,0FAMZ+b,GAAYhc,KAAOC,IAAV,sCAClB,gBAAY/H,EAAZ,EAAG6J,MAAS7J,QAAZ,OAA4BmI,aAA3B,QAAD,yXACcnI,MAYL+jB,GAAkBjc,KAAOC,IAAV,sCACxB,gBACAic,EADA,EACAA,aADA,IAEAna,MACE3F,IAAOE,EAHT,EAGSA,kBAAmBC,EAH5B,EAG4BA,eAAgBC,EAH5C,EAG4CA,iBAH5C,OAKI6D,aALH,QAAD,iTAOS6b,EAAe,OAAS,OAIPtf,aAAKN,EAAmB,KACpCC,EACLC,EAICA,MAID2f,GAAqBnc,KAAOC,IAAV,ogBAyBlBmc,GAAepc,KAAOC,IAAV,sCACrB,gBAES5D,EAFT,EACA0F,MACE3F,IAAOC,kBAFT,OAIIgE,aAJH,QAAD,4bAOchE,EAUEO,aAAKP,EAAmB,QCvG7B2D,QAAOC,IAAtB,sCACI,gBAAGoc,EAAH,EAAGA,SAAH,OAAkBhc,aAAjB,QAAD,4PAMEgc,GACFhc,aADU,6KCJC,SAASic,KACtB,IAAQzmB,EAAMuF,eAANvF,EACFqC,EAAUC,cAAWC,QAAQF,QAAQG,KAE3C,OACE,eAAC,GAAD,WACE,2BACEuX,IAAI,yCACJ2M,QAAQ,OACRrS,OAAM,oCAA+BhS,GACrCskB,OAAO,KACPC,MAAM,OAER,qBAAKlhB,UAAU,aAAf,SAA6B1F,EAAE,gBCXtB,SAAS6mB,KACtB,IAAQ7mB,EAAMuF,eAANvF,EACR,EAAwC+D,oBAAS,GAAjD,mBAAO+iB,EAAP,KAAqBC,EAArB,KAGM1kB,EAAUC,cAAWC,QAAQF,QAAQG,KAE3C,OACE,qCACE,eAAC,GAAD,CAAasD,QAAS,kBANIihB,GAAgB,IAMSP,UAAQ,EAA3D,UACE,2BACEzM,IAAI,yCACJ2M,QAAQ,OACRrS,OAAM,oCAA+BhS,GACrCskB,OAAO,KACPC,MAAM,OAER,qBAAKlhB,UAAU,aAAf,SAA6B1F,EAAE,wBAGhC8mB,GAAgB,cAACpG,GAAD,CAAWC,YAhBZ,kBAAMoG,GAAgB,SCJ7B,SAASC,GAAT,GAA0D,IAAnCC,EAAkC,EAAlCA,UAAW5P,EAAuB,EAAvBA,UAAWuK,EAAY,EAAZA,SAC1D,OAAIvK,GAAa4P,IAAcrF,EAAS1gB,OAEpC,cAACglB,GAAD,UACGe,EACC,cAACR,GAAD,IACEpP,EACF,cAACH,GAAA,EAAD,CAAkB9U,MAAM,eAEvBwf,EAAS1gB,QAAU,cAAC2lB,GAAD,MAO1B,cAACP,GAAD,UACG1E,EAASxW,KAAI,SAAAhL,GAAO,OACnB,cAAC,GAAD,CAAgCA,QAASA,GAAvBA,EAAQ0D,W,iECZnB,SAASojB,GAAT,GAAoC,IAAZ7hB,EAAW,EAAXA,QAC7BrF,EAAMuF,eAANvF,EAER,OACE,eAACujB,GAAA,EAAD,CAAQC,MAAI,EAACne,QAASA,EAAS8hB,kBAAgB,oBAAoBzI,WAAS,EAAC+E,SAAS,KAAtF,UACE,cAACsC,GAAA,EAAD,CAAaxiB,GAAG,oBAAhB,SAAqCvD,EAAE,YACvC,cAAConB,GAAA,EAAD,UACE,eAACC,GAAA,EAAD,WACE,cAACC,GAAA,EAAD,UACE,eAACrN,GAAA,EAAD,CAAa/T,QAAQ,WAAW9D,MAAM,UAAU2D,aAAW,iCAA3D,UACE,cAACI,GAAA,EAAD,CAAQL,QAAS,kBAAM/H,OAAOylB,KAAK,yCAA0C,WAA7E,oBACA,cAACrd,GAAA,EAAD,CAAQL,QAAS,kBAAM/H,OAAOylB,KAAK,yCAA0C,WAA7E,0BAHU,eAMd,cAAC8D,GAAA,EAAD,UAEE,qBAAKC,wBAAyB,CAAEC,OAlB1C,qWAgBsB,mBAOlB,cAACxB,GAAA,EAAD,UACE,cAAC7f,GAAA,EAAD,CAAQL,QAAST,EAASjD,MAAM,YAAY8D,QAAQ,YAApD,qBCzBO,SAASuhB,KACtB,IAAQznB,EAAMuF,eAANvF,EACR,EAAwB+D,oBAAS,GAAjC,mBAAOyf,EAAP,KAAakE,EAAb,KACA,EAAwC3jB,oBAAS,GAAjD,mBAAO4jB,EAAP,KAAqBC,EAArB,KAEMC,EAAkB,WACtBD,GAAgB,GAChBE,aAAaC,QAAQ,oBAAoB,IAG3C,OACE,qCACGvE,GAAQ,cAAC0D,GAAD,CAAc7hB,QAAS,kBAAMqiB,GAAQ,MAE9C,cAACM,GAAA,EAAD,CACEC,aAAc,CACZC,SAAU,SACVC,WAAY,UAEd3E,KAAMmE,EACNtiB,QAASwiB,EACTO,QAASpoB,EAAE,WACXgC,OACE,qCACE,eAACmE,GAAA,EAAD,CACEiJ,MAAO,CAAEiZ,YAAa,QACtBjmB,MAAM,YACN3C,KAAK,QACLqG,QAAS,WACP4hB,GAAQ,GACRG,KANJ,UASE,cAAC,KAAD,CAAgBzY,MAAO,CAAEiZ,YAAa,QAAUC,SAAS,UACxDtoB,EAAE,cAGL,cAAC4F,EAAA,EAAD,CAAYnG,KAAK,QAAQsG,aAAW,QAAQ3D,MAAM,UAAU0D,QAAS+hB,EAArE,SACE,cAAC,KAAD,CAAWS,SAAS,oB,iBC9CnBC,gBAAf,ya,6DCOe,SAASC,GAAT,GAAoD,IAAzBvB,EAAwB,EAAxBA,UAAW5P,EAAa,EAAbA,UAC3CrX,EAAMuF,eAANvF,EACR,EAAwC+D,oBAAS,GAAjD,mBAAO+iB,EAAP,KAAqBC,EAArB,KAIA,OACE,gCACE,eAACO,GAAA,EAAD,CAAU3I,SAAUsI,GAAa5P,EAAWgN,QAAM,EAACve,QAL/B,kBAAMihB,GAAgB,IAK1C,UACE,cAAC0B,GAAA,EAAD,UACE,cAAC,KAAD,MAEF,cAACC,GAAA,EAAD,CAAcrmB,QAASrC,EAAE,oBAG1B8mB,GAAgB,cAACpG,GAAD,CAAWC,YAXZ,kBAAMoG,GAAgB,S,wJCT/B4B,GAAyB,UACzBC,GAAwBhgB,GAAWtC,MAAMjE,QAEzCwmB,GAAiB1e,aAAOoQ,GAAPpQ,CAAH,uMAWd2e,GAAgB3e,KAAOC,IAAV,sCACtB,gBAEoB1B,EAFpB,EACAwD,MACE1D,eAAkBE,SAFpB,OAII8B,aAJH,QAAD,+RAWc9B,MAcLgT,IANUvR,KAAOC,IAAV,4GAMGD,KAAOC,IAAV,sCAChB,gBACAiN,EADA,EACAA,UAEoB5O,EAHpB,EAEAyD,MACE1D,eAAkBC,UAHpB,OAKI+B,aALH,QAAD,4FAMc/B,EAIZ4O,GACF7M,aADW,oHASFue,GAAoB5e,KAAOC,IAAV,sCAC1B,gBAAGhI,EAAH,EAAGA,MAAH,OAAeoI,aAAd,QAAD,0WAYgBpI,MASP4mB,GAAsB7e,KAAOC,IAAV,kMAUnB6e,GAA2B9e,KAAOC,IAAV,iDAIxB8e,GAAgB/e,KAAOC,IAAV,sCACtB,gBAAG+e,EAAH,EAAGA,MAAOC,EAAV,EAAUA,SAAV,OAAyB5e,aAAxB,QAAD,qHAKG4e,GACH5e,aADE,wHASA2e,EACE3e,aADG,2OASHA,aATG,2HAiBE6e,GAAqBlf,KAAOC,IAAV,sCAC3B,gBAAGgf,EAAH,EAAGA,SAAUD,EAAb,EAAaA,MAAb,OAAyB3e,aAAxB,QAAD,6PACS2e,EAAQ,OAAS,QAChBA,EAAQ,OAAS,QAEbC,EAAW,UAAY,UAO1BD,EAAQ,OAAS,OAChBA,EAAQ,OAAS,WAKpBG,GAAuBnf,KAAOC,IAAV,kPAYpBmf,GAAsBpf,KAAOC,IAAV,yIAUnBof,GAAyBrf,KAAOC,IAAIiJ,OAAM,gBAAGC,EAAH,EAAGA,MAAH,MAAgB,CAErElE,MAAO,CACLqE,WAAW,6BAAD,OAA+BkV,GAA/B,gBAA6DA,GAA7D,YAAuFrV,EAAvF,cAAkGsV,GAAlG,YAA2HtV,EAA3H,cAAsIsV,GAAtI,cAHwBze,CAAH,sCAM/B,gBAAGuJ,EAAH,EAAGA,MAAO+V,EAAV,EAAUA,uBAAV,OAAuCjf,aAAtC,QAAD,8gBASckJ,EAQH+V,MCnMA,IACbC,eAAe,EACfC,UAAW,GACXC,gBAAiB,GACjBC,SAAS,EACTC,gBAAiB,EACjBC,iBAAkB,GAClBC,iBAAkB,GAClBC,YAAY,EACZC,YAAY,EACZC,YAAY,EACZC,aAAa,EACbC,YAAY,EACZC,eAAe,EACfC,kBAAmB,EACnBC,aAAa,EACbC,YAAY,EACZC,cAAc,EACdC,gBAAiB,EACjBtR,aAAc,EACduR,mBAAmB,EACnBC,eAAgB,EAChBC,yBAA0B,I,UCtBfC,GAAY,SAAAC,GAAK,MAAK,CACjCznB,GAAG,kBAAD,OAAoBynB,GACtB,gBAAgB,uBAAhB,OAAwCA,KAG7BC,GAAW,SAAC,GAAD,IAAGC,EAAH,EAAGA,SAAU5X,EAAb,EAAaA,MAAO0X,EAApB,EAAoBA,MAAUG,EAA9B,oDACtB,6CAAKC,KAAK,WAAWC,OAAQ/X,IAAU0X,EAAOznB,GAAE,8BAAyBynB,IAAaG,GAAtF,aACG7X,IAAU0X,GAAS,mCAAGE,Q,wCCLZ,SAASI,GAAT,GAWX,IAVFC,EAUC,EAVDA,UACAtmB,EASC,EATDA,MACAqO,EAQC,EARDA,MACAkY,EAOC,EAPDA,SACAC,EAMC,EANDA,UACAC,EAKC,EALDA,UACAC,EAIC,EAJDA,SACAC,EAGC,EAHDA,SAGC,IAFDC,YAEC,MAFM,EAEN,EADDC,EACC,EADDA,eAYA,OACE,qCACE,8BAAM7mB,IAEN,eAAC8mB,GAAA,EAAD,CAAMC,WAAS,EAACC,QAAS,EAAGC,WAAW,SAAvC,UACE,cAACH,GAAA,EAAD,CAAMI,MAAI,EAACC,IAAE,EAAb,SACE,cAACC,GAAA,EAAD,CACE7Y,IAAKiY,EACLxe,IAAKye,EACLpY,MAAOA,EACPwL,SAZa,SAACoD,EAAGoK,GAAJ,OAAiBd,EAASc,IAavCT,KAAMA,EACNzpB,MAAM,gBAITmpB,GACC,cAACQ,GAAA,EAAD,CAAMI,MAAI,EAAV,SACE,cAACI,GAAA,EAAD,CACEjZ,MAAOA,EACPmL,OAAO,QACPK,SAxBU,SAAC,GAAD,IAAaxL,EAAb,EAAGtB,OAAUsB,MAAb,OAA2BkY,EAAmB,KAAVlY,EAAe,GAAKkZ,OAAOlZ,KAyBzE0L,OAhCG,SAAC,GAA2B,IAAf1L,EAAc,EAAxBtB,OAAUsB,MAC1B,OAAIA,EAAQqY,EAAiBH,EAASG,GAClCrY,EAAQsY,EAAiBJ,EAASI,QAEtCE,GAAkBA,EAAexY,KA6BvBlE,MAAO,CAAE1M,MAAO,OAAQsX,UAAW,QACnCuG,WAAY,CAAEsL,OAAMrY,IAAKmY,EAAU1e,IAAK2e,EAAUxiB,KAAM,oBC9BtE,IAAMqjB,GAA4B,SAAC,GAAe,IAAbrd,EAAY,EAAZA,MAC3BpP,EAAMuF,eAANvF,EAER,OACE,eAACupB,GAAD,CAAqBna,MAAOA,EAA5B,UACGpP,EAAE,uCACH,gCAAQA,EAAE,oCAKD,SAAS0sB,GAAT,GAWX,IAVFzU,EAUC,EAVDA,SACA0U,EASC,EATDA,UACAC,EAQC,EARDA,gBACAnD,EAOC,EAPDA,uBACAoD,EAMC,EANDA,UACAtB,EAKC,EALDA,UACAuB,EAIC,EAJDA,aACAC,EAGC,EAHDA,mBACAC,EAEC,EAFDA,0BACAC,EACC,EADDA,eAEQjtB,EAAMuF,eAANvF,EACR,EAAyDiY,GAAY,GAA7D4R,EAAR,EAAQA,QAASE,EAAjB,EAAiBA,iBAAkBa,EAAnC,EAAmCA,kBAC7BsC,EAAmBvtB,KAAK0N,MAAOwf,EAAY,IAAOpD,GAExD,OACE,eAACT,GAAD,WACE,gCACE,cAACO,GAAD,UAAsBvpB,EAAE,kCAExB,cAACwpB,GAAD,CACElW,MAAO,IAAMsZ,EACblZ,MAAK,UAAK1T,EAAE,SAAP,YAAmB6sB,EAAnB,OACLpD,uBAAwBA,IAG1B,eAACV,GAAD,CAAmB3mB,MAAOumB,GAA1B,UACE,gCACG,IAAMiE,EADT,MAC6BjtB,KAAK0N,MAAOwf,EAAY,KAAQ,IAAMD,IADnE,UAIA,8BAAM5sB,EAAE,6CAGV,eAAC+oB,GAAD,CAAmB3mB,MAAOwmB,GAA1B,UACE,gCACGgE,EADH,MACuBjtB,KAAK0N,MAAOwf,EAAY,IAAOD,GADtD,UAIA,8BAAM5sB,EAAE,4CAGV,uBAEA,cAACsrB,GAAD,CACEC,UAAWA,EACXtmB,MAAOjF,EAAE,4BACTsT,MAAOuZ,EACPrB,SAAUsB,EACVrB,UAAW,GACXC,UAAW,KACXC,SAAU,GACVC,SAAU,OACVC,KAAM,EACNC,eAAgB,SAAAxY,GAAK,OAAIwZ,EAAqC,EAAxBntB,KAAK0N,MAAMiG,EAAQ,OAG3D,cAACgY,GAAD,CACEC,UAAWA,EACXtmB,MAAOjF,EAAE,kCACTsT,MAAOsZ,EACPpB,SAAUuB,EACVtB,UAAW,GACXC,UAAW,GACXC,SAAU,EACVC,SAAU,MAGZ,cAACN,GAAD,CACEC,UAAWA,EACXtmB,MAAK,UAAKjF,EAAE,+BAAP,cAA2CypB,EAA3C,cAAuEyD,EAAvE,QACL5Z,MAAOmW,EACP+B,SAAUwB,EACVvB,UAAW,EACXC,UAAW,IACXC,SAAU,EACVC,SAAU,SAIb/B,EACC,gCACE,cAAC,GAAD,IAEA,sBAAKza,MAAO,CAAEC,QAAS,OAAQ8d,aAAc,UAA7C,UACE,eAACjE,GAAD,CAAeC,OAAK,EAACrjB,QAAS,kBAAMmnB,EAAe,CAAEpD,SAAS,KAA9D,UACE,cAACR,GAAD,CAAoBF,OAAK,EAAzB,SACE,cAAC,GAAD,CAAS/mB,MAAM,cAGjB,8BAAMpC,EAAE,2BAGV,eAACkpB,GAAD,CAAeC,OAAK,EAACC,UAAQ,EAA7B,UACE,cAACC,GAAD,CAAoBF,OAAK,EAACC,UAAQ,EAAlC,SACE,cAAC,EAAD,CAAShnB,MAAM,cAGjB,8BAAMpC,EAAE,+BAIZ,cAACotB,GAAA,EAAD,CACEC,QACE,cAACC,GAAA,EAAD,CAAQC,QAAS3C,EAAmB9L,SAAU6N,EAAWppB,GAAG,oBAAoBnB,MAAM,cAExFsR,MAAO1T,EAAE,oCACTwtB,eAAe,UAEjB,8BACE,gCAAQxtB,EAAE,4CAEZ,uBACA,cAACwe,GAAA,EAAD,CACEM,SAAU6N,EACVlO,OAAO,SACPlb,GAAG,mBACHmQ,MAAO1T,EAAE,mCACTsT,MAAOyW,EACP3gB,KAAK,MACLlD,QAAQ,WACRwY,WAAS,OAIb,eAAC4K,GAAD,WACE,cAAC,GAAD,CAA2Bla,MAAO,CAAEqe,UAAW,QAASC,SAAU,WAElE,eAACxE,GAAD,CAAeE,UAAQ,EAAvB,UACE,cAACC,GAAD,CAAoBD,UAAQ,EAA5B,SACE,cAAC,GAAD,CAAShnB,MAAM,cAGjB,8BAAMpC,EAAE,2BAGV,eAACkpB,GAAD,CAAepjB,QAAS,kBAAMmnB,EAAe,CAAEpD,SAAS,KAAxD,UACE,cAACR,GAAD,UACE,cAAC,EAAD,CAASjnB,MAAM,cAGjB,8BAAMpC,EAAE,kC,wBCrKL,SAAS2tB,GAAT,GAA8D,IAAxB1V,EAAuB,EAAvBA,SAAU0U,EAAa,EAAbA,UACrD3sB,EAAMuF,eAANvF,EAER,EAgBIiY,GAAY,GAfdyR,EADF,EACEA,cACAmB,EAFF,EAEEA,eACAC,EAHF,EAGEA,yBACAL,EAJF,EAIEA,WACAC,EALF,EAKEA,aACAP,EANF,EAMEA,WACAE,EAPF,EAOEA,WACAD,EARF,EAQEA,YACAH,EATF,EASEA,WACAC,EAVF,EAUEA,WACAI,EAXF,EAWEA,cACAC,EAZF,EAYEA,kBACAT,EAbF,EAaEA,gBACAE,EAdF,EAcEA,iBACAW,EAfF,EAeEA,gBAGF,OACE,eAAC1B,GAAD,WACE,cAACM,GAAD,UAAsBvpB,EAAE,uCAExB,cAACotB,GAAA,EAAD,CACEC,QAAS,cAACC,GAAA,EAAD,CAAQC,QAAS9C,EAAY3L,SAAU6N,EAAWppB,GAAG,aAAanB,MAAM,cACjFsR,MAAM,OACN8Z,eAAe,UAEjB,cAACJ,GAAA,EAAD,CACEC,QAAS,cAACC,GAAA,EAAD,CAAQC,SAAUpD,EAAYrL,SAAU6N,EAAWppB,GAAG,aAAanB,MAAM,cAClFsR,MAAM,sCACN8Z,eAAe,UAEjB,cAACJ,GAAA,EAAD,CACEC,QAAS,cAACC,GAAA,EAAD,CAAQC,SAAUlD,EAAYvL,SAAU6N,EAAWppB,GAAG,aAAanB,MAAM,cAClFsR,MAAM,sCACN8Z,eAAe,UAEjB,cAACJ,GAAA,EAAD,CACEC,QAAS,cAACC,GAAA,EAAD,CAAQC,SAAUrD,EAAYpL,SAAU6N,EAAWppB,GAAG,aAAanB,MAAM,cAClFsR,MAAM,sBACN8Z,eAAe,UAEjB,cAACJ,GAAA,EAAD,CACEC,QAAS,cAACC,GAAA,EAAD,CAAQC,QAAS7C,EAAc5L,SAAU6N,EAAWppB,GAAG,eAAenB,MAAM,cACrFsR,MAAO1T,EAAE,+BACTwtB,eAAe,UAEjB,cAAChP,GAAA,EAAD,CACEM,SAAU6N,EACVlO,OAAO,SACPlb,GAAG,2BACHmQ,MAAO1T,EAAE,2CACT4e,WAAY,CACVM,aAAc,cAACC,GAAA,EAAD,CAAgBna,SAAS,MAAzB,SAAgChF,EAAE,cAElDsT,MAAOwX,EACP1hB,KAAK,SACLlD,QAAQ,WACRwY,WAAS,IAEX,uBACA,cAACF,GAAA,EAAD,CACEM,SAAU6N,EACVlO,OAAO,SACPlb,GAAG,mBACHmQ,MAAO1T,EAAE,mCACTif,WAAYjf,EAAE,uCACdsT,MAAO0W,EACP5gB,KAAK,SACLlD,QAAQ,WACRwY,WAAS,IAEX,uBACA,cAAC0O,GAAA,EAAD,CACEC,QAAS,cAACC,GAAA,EAAD,CAAQC,SAAUtD,EAAYnL,SAAU6N,EAAWppB,GAAG,aAAanB,MAAM,cAClFsR,MAAO1T,EAAE,sBACTwtB,eAAe,UAEjB,cAACJ,GAAA,EAAD,CACEC,QAAS,cAACC,GAAA,EAAD,CAAQC,QAAS7D,EAAe5K,SAAU6N,EAAWppB,GAAG,gBAAgBnB,MAAM,cACvFsR,MAAO1T,EAAE,gCACTwtB,eAAe,UAEjB,uBACA,cAAChP,GAAA,EAAD,CACEM,SAAU6N,EACVlO,OAAO,SACPlb,GAAG,oBACHmQ,MAAO1T,EAAE,oCACT4e,WAAY,CACVM,aAAc,cAACC,GAAA,EAAD,CAAgBna,SAAS,MAAzB,SAAgChF,EAAE,gBAElDsT,MAAOiX,EACPnhB,KAAK,SACLlD,QAAQ,WACRwY,WAAS,IAEX,uBACA,cAAC0O,GAAA,EAAD,CACEC,QAAS,cAACC,GAAA,EAAD,CAAQC,SAAUjD,EAAexL,SAAU6N,EAAWppB,GAAG,gBAAgBnB,MAAM,cACxFsR,MAAO1T,EAAE,yBACTwtB,eAAe,UAEjB,cAAChP,GAAA,EAAD,CACEM,SAAU6N,EACVlO,OAAO,SACPlb,GAAG,kBACHmQ,MAAO1T,EAAE,kCACT4e,WAAY,CACVM,aAAc,cAACC,GAAA,EAAD,CAAgBna,SAAS,MAAzB,SAAgChF,EAAE,gBAElDsT,MAAOwW,EACP1gB,KAAK,SACLlD,QAAQ,WACRwY,WAAS,IAEX,uBACA,cAACF,GAAA,EAAD,CACEM,SAAU6N,EACVlO,OAAO,SACPlb,GAAG,kBACHmQ,MAAO1T,EAAE,kCACTsT,MAAOqX,EACPvhB,KAAK,SACLlD,QAAQ,WACRwY,WAAS,IAEX,cAAC0O,GAAA,EAAD,CACEC,QAAS,cAACC,GAAA,EAAD,CAAQC,SAAUnD,EAAatL,SAAU6N,EAAWppB,GAAG,cAAcnB,MAAM,cACpFsR,MAAM,iCACN8Z,eAAe,UAEjB,uBACA,cAACI,GAAA,EAAD,CAAYC,QAAQ,iBAApB,SAAsC7tB,EAAE,mCACxC,eAAC8tB,GAAA,EAAD,CACEhP,SAAU6N,EACVlO,OAAO,SACPrV,KAAK,SACL2kB,QAAM,EACNxqB,GAAG,iBACH+P,MAAOuX,EACP3kB,QAAQ,WAPV,UASE,wBAAQoN,MAAO,EAAf,SAAmBtT,EAAE,sCACrB,wBAAQsT,MAAO,EAAf,SAAmBtT,EAAE,kCACrB,wBAAQsT,MAAO,EAAf,SAAmBtT,EAAE,qCACrB,wBAAQsT,MAAO,EAAf,SAAmBtT,EAAE,yCAEvB,0BCzIS,SAASguB,GAAT,GAA0C,IAAhBrN,EAAe,EAAfA,YAC/B3gB,EAAMuF,eAANvF,EACFqiB,EAAaC,aAAc,4BACzBoC,EAAcpiB,cAAdoiB,UAER,EAAgC3gB,qBAAhC,mBAAOkU,EAAP,KAAiBC,EAAjB,KACA,EAAsCnU,mBAAS,GAA/C,mBAAOkqB,EAAP,KAAoBC,EAApB,KACA,EAAkCnqB,mBAAS,IAA3C,mBAAO8oB,EAAP,KAAkBC,EAAlB,KACA,EAA8C/oB,mBAAS,IAAvD,mBAAO6oB,EAAP,KAAwBG,EAAxB,KACA,EAA4DhpB,mBAAS,GAArE,mBAAO0lB,EAAP,KAA+BuD,EAA/B,KACA,EAAkCjpB,mBAASoqB,KAAK/c,MAAM0W,aAAasG,QAAQ,gBAAiB,GAA5F,mBAAO7C,EAAP,KAAkB8C,EAAlB,KAEAhqB,qBAAU,WACRvC,IAAMC,KAAKxD,IAAgB,CAAEyD,OAAQ,QAAS0C,MAAK,YAAe,IAAZzC,EAAW,EAAXA,KACpDiW,EAAY,2BAAKjW,GAAN,IAAY0nB,UAAW1nB,EAAK0nB,UAAL,gBAEnC,IAEH,IASMgD,EAAY,SAAC,GAA8C,IAAD,IAA3C3a,OAAU5I,EAAiC,EAAjCA,KAAMkK,EAA2B,EAA3BA,MAAOia,EAAoB,EAApBA,QAAShqB,EAAW,EAAXA,GAC7C+qB,EAAOH,KAAK/c,MAAM+c,KAAKI,UAAUtW,IAE1B,WAAT7O,GAA8B,eAATA,EACvBklB,EAAK/qB,GAAMipB,OAAOlZ,GACA,aAATlK,EASPklB,EAAK/qB,GAPE,eAAPA,GACO,eAAPA,GACO,gBAAPA,GACO,eAAPA,GACO,eAAPA,GACO,kBAAPA,EAEWirB,SAASjB,GACNiB,QAAQjB,GACN,QAATnkB,IACTklB,EAAK/qB,GAAM+P,GAEb4E,EAAYoW,IAGd,EAAqDrW,GAAY,GAAzD0R,EAAR,EAAQA,UAAWC,EAAnB,EAAmBA,gBAAiBvQ,EAApC,EAAoCA,aAEpChV,qBAAU,WACJoqB,MAAM9E,IAAc8E,MAAM7E,IAAoB6E,MAAMpV,KAExDyT,EAAanD,GACboD,EAAmBnD,GACnBoD,EAA0B3T,MACzB,CAACsQ,EAAWC,EAAiBvQ,IAEhC,IAAM4T,EAAiB,SAAAyB,GAAQ,OAAIxW,EAAY,2BAAKD,GAAayW,KAIjE,OACE,eAACnL,GAAA,EAAD,CAAQC,MAAI,EAACne,QAASsb,EAAa0B,WAAYA,EAAY3D,WAAS,EAAC+E,SAAS,KAA9E,UACE,eAACoF,GAAD,WACE,8BAAM7oB,EAAE,6BACR,cAACotB,GAAA,EAAD,CACEC,QACE,cAACsB,GAAA,EAAD,CACEpB,QAAShC,EACTzM,SAAU,YAA8B,IAAjByO,EAAgB,EAA1Bvb,OAAUub,QACrBc,EAAad,GACbzF,aAAaC,QAAQ,YAAawF,GAC7BA,GAASW,EAAe,IAE/B9e,MAAO,CAAEhN,MAAO,WAGpBsR,MAAO1T,EAAE,+BAIb,cAACyF,GAAA,EAAD,CAAQT,SAAS,SAAS5C,MAAM,UAAhC,SACE,eAACwsB,GAAA,EAAD,CACEtb,MAAO2a,EACPnP,SA1Ba,SAACoD,EAAGoK,GAAJ,OAAiB4B,EAAe5B,IA2B7CuC,eAAe,YACfC,UAAU,YACV5oB,QAAQ,YALV,UAOE,cAAC6oB,GAAA,EAAD,aAAKrb,MAAO1T,EAAE,6BAAiC+qB,GAAU,KAEzD,cAACgE,GAAA,EAAD,aACEpQ,UAAW4M,EACX7X,MACE,qCACE,8BAAM1T,EAAE,qCACNurB,GAAa,qBAAKnc,MAAO,CAAEkZ,SAAU,OAAxB,SAAkCtoB,EAAE,gDAGnD+qB,GAAU,UAKpB,cAAC,GAAD,CAAS1T,WAAYY,EAArB,SACGA,EACC,mCACE,eAAC,KAAD,CACE+W,KAAoB,QAAdtK,EAAsB,YAAc,IAC1CsG,MAAOiD,EACPgB,cAnDc,SAAAjE,GAAK,OAAIkD,EAAelD,IAgDxC,UAKE,cAAC,GAAD,CAAU1X,MAAO2a,EAAajD,MAAO,EAAGkE,IAAKxK,EAA7C,SACE,cAACgI,GAAD,CACEzU,SAAUA,EACV0U,UAAWA,EACXC,gBAAiBA,EACjBnD,uBAAwBA,EACxBoD,UAAWA,EACXtB,UAAWA,EACXuB,aAAcA,EACdC,mBAAoBA,EACpBC,0BAA2BA,EAC3BC,eAAgBA,MAIpB,cAAC,GAAD,CAAU3Z,MAAO2a,EAAajD,MAAO,EAAGkE,IAAKxK,EAA7C,SACE,cAACiJ,GAAD,CAA4B1V,SAAUA,EAAU0U,UAAWA,WAKjE,cAACzV,GAAA,EAAD,CAAkB9U,MAAM,gBAI5B,eAAC0mB,GAAD,WACE,cAAC3iB,GAAA,EAAD,CAAQL,QAAS6a,EAAave,MAAM,YAAY8D,QAAQ,WAAxD,SACGlG,EAAE,YAGL,cAACmG,GAAA,EAAD,CACEL,QAAS,WACPgnB,EAAaqC,GAAgBxF,WAC7BoD,EAAmBoC,GAAgBvF,iBACnCoD,EAA0BmC,GAAgB9V,cAC1C4T,EAAekC,KAEjB/sB,MAAM,YACN8D,QAAQ,WARV,SAUGlG,EAAE,mCAGL,cAACmG,GAAA,EAAD,CAAQD,QAAQ,YAAYJ,QA3If,WACjB6a,IACA,IAAM2N,EAAOH,KAAK/c,MAAM+c,KAAKI,UAAUtW,IACvCqW,EAAK3E,UAAwB,KAAZkD,EAAmB,KACpCyB,EAAK1E,gBAAkBgD,EACvB0B,EAAKjV,aAAeoQ,EACpB3nB,IAAMC,KAAKxD,IAAgB,CAAEyD,OAAQ,MAAOssB,UAqISlsB,MAAM,YAAvD,SACGpC,EAAE,gBCzKE,SAASovB,GAAT,GAAyD,IAAzBnI,EAAwB,EAAxBA,UAAW5P,EAAa,EAAbA,UAChDrX,EAAMuF,eAANvF,EACR,EAAwC+D,oBAAS,GAAjD,mBAAO+iB,EAAP,KAAqBC,EAArB,KAKA,OACE,gCACE,eAACO,GAAA,EAAD,CAAU3I,SAAUsI,GAAa5P,EAAWgN,QAAM,EAACve,QAL/B,kBAAMihB,GAAgB,IAK1C,UACE,cAAC0B,GAAA,EAAD,UACE,cAAC,KAAD,MAEF,cAACC,GAAA,EAAD,CAAcrmB,QAASrC,EAAE,gCAG1B8mB,GAAgB,cAACkH,GAAD,CAAgBrN,YAXjB,kBAAMoG,GAAgB,S,yBCmB7B,SAASsI,GAAT,GAA8C,IAAzBpI,EAAwB,EAAxBA,UAAW5P,EAAa,EAAbA,UACrCrX,EAAMuF,eAANvF,EACR,EAAwB+D,oBAAS,GAAjC,mBAAOyf,EAAP,KAAakE,EAAb,KACMtQ,EAAc,kBAAMsQ,GAAQ,IAGlC,OACE,qCACE,eAACJ,GAAA,EAAD,CAAU3I,SAAUsI,GAAa5P,EAAWgN,QAAM,EAAsBve,QAJzD,kBAAM4hB,GAAQ,IAI7B,UACE,cAACe,GAAA,EAAD,UACE,cAAC,KAAD,MAGF,cAACC,GAAA,EAAD,CAAcrmB,QAASrC,EAAE,iBAL6BA,EAAE,cAQ1D,eAACujB,GAAA,EAAD,CAAQC,KAAMA,EAAMne,QAAS+R,EAA7B,UACE,cAAC2O,GAAA,EAAD,UAAc/lB,EAAE,qBAChB,eAACgmB,GAAA,EAAD,WACE,cAAC7f,GAAA,EAAD,CAAQD,QAAQ,WAAWJ,QAASsR,EAAahV,MAAM,YAAvD,SACGpC,EAAE,YAGL,cAACmG,GAAA,EAAD,CACED,QAAQ,YACRJ,QAAS,WAhDnB8K,MAAMvS,IAAgB,CACpBixB,OAAQ,OACRC,KAAMpB,KAAKI,UAAU,CAAEvsB,OAAQ,SAC/BwtB,QAAS,CACPC,OAAQ,oCACR,eAAgB,sBAGjB/qB,MAAK,SAAAgrB,GAAG,OAAIA,EAAIC,UAChBjrB,MAAK,SAAAirB,GACJA,EAAKhvB,SAAQ,SAAAivB,GACXhf,MAAMvS,IAAgB,CACpBixB,OAAQ,OACRC,KAAMpB,KAAKI,UAAU,CAAEvsB,OAAQ,MAAO8B,KAAM8rB,EAAK9rB,OACjD0rB,QAAS,CACPC,OAAQ,oCACR,eAAgB,4BAkCdrY,KAEFhV,MAAM,YACNgE,WAAS,EAPX,SASGpG,EAAE,iB,iEC/DF6vB,GAAgB1lB,KAAOC,IAAV,sHAMb0lB,GAAgB3lB,KAAOoI,QAAV,sUAsBbwd,GAAgB5lB,KAAOoI,QAAV,iPAcbyd,GAAU7lB,KAAOoI,QAAV,0hBAgCPuW,GAAgB3e,KAAOC,IAAV,yHAOb6lB,GAAc9lB,KAAOtI,EAAV,sCACpB,gBAAGquB,EAAH,EAAGA,OAAH,OAAgB1lB,aAAf,QAAD,yWAiBE0lB,EACE1lB,aADI,8LAUJA,aAVI,uEAgBC2lB,GAAWhmB,KAAOC,IAAV,wECjHN,SAASgmB,GAAT,GAAwC,IAAf/Z,EAAc,EAAdA,KAAMzE,EAAQ,EAARA,KAC5C,OACE,eAACqe,GAAD,CAAaC,SAAUte,EAAMG,KAAMH,EAAMI,OAAO,SAASC,IAAI,aAA7D,UACGL,GACC,cAACue,GAAD,UACE,cAACE,GAAA,EAAD,MAIJ,8BAAMha,OCEG,SAASia,KACtB,IAAQtwB,EAAMuF,eAANvF,EACR,EAAwB+D,oBAAS,GAAjC,mBAAOyf,EAAP,KAAakE,EAAb,KACA,EAAkD3jB,mBAAS,IAA3D,mBAAOwsB,EAAP,KAA0BC,EAA1B,KACMnO,EAAaC,aAAc,4BAKjC,OAJAje,qBAAU,WACRvC,IAAM8Y,IAAInc,KAAYiG,MAAK,gBAAGzC,EAAH,EAAGA,KAAH,OAAcuuB,EAAqBvuB,QAC7D,IAGD,qCACE,eAACqlB,GAAA,EAAD,CAAUjD,QAAM,EAAgBve,QAAS,kBAAM4hB,GAAQ,IAAvD,UACE,cAACe,GAAA,EAAD,UACE,cAAC,KAAD,MAEF,cAACC,GAAA,EAAD,CAAcrmB,QAASrC,EAAE,aAJN,YAOrB,cAACujB,GAAA,EAAD,CACEC,KAAMA,EACNne,QAAS,kBAAMqiB,GAAQ,IACvBP,kBAAgB,oBAChB9E,WAAYA,EACZoB,SAAS,KALX,SAOE,eAACoM,GAAD,WACE,eAACC,GAAD,WACE,8BAAM9vB,EAAE,WACPuwB,EACD,qBAAKxW,IAAI,wBAAwBD,IAAI,eAGvC,sBAAK1K,MAAO,CAAEyK,SAAU,QAAxB,UACE,cAACkW,GAAD,UAAgB/vB,EAAE,sBAElB,eAACgwB,GAAD,WACE,+BAAOhwB,EAAE,WAET,gCACE,cAACowB,GAAD,CAAe/Z,KAAMrW,EAAE,iBAAkB4R,KAAK,yCAC9C,cAACwe,GAAD,CAAe/Z,KAAMrW,EAAE,YAAa4R,KAAK,wDAI7C,eAACoe,GAAD,WACE,+BAAOhwB,EAAE,mBAET,gCACE,cAACowB,GAAD,CAAe/Z,KAAK,mBAAmBzE,KAAK,kCAC5C,cAACwe,GAAD,CAAe/Z,KAAK,cAAczE,KAAK,iCACvC,cAACwe,GAAD,CAAe/Z,KAAK,OAAOzE,KAAK,8BAChC,cAACwe,GAAD,CAAe/Z,KAAK,oFAAwBzE,KAAK,gCACjD,cAACwe,GAAD,CAAe/Z,KAAK,YAAYzE,KAAK,yCAK3C,cAAC,GAAD,UACE,cAACzL,GAAA,EAAD,CAAQL,QAAS,kBAAM4hB,GAAQ,IAAQtlB,MAAM,UAAU8D,QAAQ,YAA/D,SACGlG,EAAE,qB,cCpEF,SAASywB,GAAT,GAAgD,IAAzBxJ,EAAwB,EAAxBA,UAAW5P,EAAa,EAAbA,UACvCrX,EAAMuF,eAANvF,EACR,EAAwB+D,oBAAS,GAAjC,mBAAOyf,EAAP,KAAakE,EAAb,KACMtQ,EAAc,kBAAMsQ,GAAQ,IAGlC,OACE,qCACE,eAACJ,GAAA,EAAD,CAAU3I,SAAUsI,GAAa5P,EAAWgN,QAAM,EAAwBve,QAJ3D,kBAAM4hB,GAAQ,IAI7B,UACE,cAACe,GAAA,EAAD,UACE,cAACiI,GAAA,EAAD,MAGF,cAAChI,GAAA,EAAD,CAAcrmB,QAASrC,EAAE,mBAL6BA,EAAE,gBAQ1D,eAACujB,GAAA,EAAD,CAAQC,KAAMA,EAAMne,QAAS+R,EAA7B,UACE,cAAC2O,GAAA,EAAD,UAAc/lB,EAAE,kBAChB,eAACgmB,GAAA,EAAD,WACE,cAAC7f,GAAA,EAAD,CAAQD,QAAQ,WAAWJ,QAASsR,EAAahV,MAAM,YAAvD,SACGpC,EAAE,YAGL,cAACmG,GAAA,EAAD,CACED,QAAQ,YACRJ,QAAS,WACP8K,MxDtBc,UAASxS,EAAT,cwDuBdgZ,KAEFhV,MAAM,YACNgE,WAAS,EAPX,SASGpG,EAAE,sBCtBf,IAAM2wB,GAAU,SAAC,GAAqE,IAAnEtK,EAAkE,EAAlEA,aAAcuK,EAAoD,EAApDA,wBAAyB3J,EAA2B,EAA3BA,UAAW5P,EAAgB,EAAhBA,UAC3DrX,EAAMuF,eAANvF,EAER,OACE,eAAComB,GAAD,CAAiBC,aAAcA,EAA/B,UACE,eAACgB,GAAA,EAAD,WACE,cAACmB,GAAD,CAAiBvB,UAAWA,EAAW5P,UAAWA,IAElD,cAACgY,GAAD,CAAWpI,UAAWA,EAAW5P,UAAWA,OAG9C,cAAC,KAAD,IAEA,eAACgQ,GAAA,EAAD,WACE,cAAC,GAAD,CAAgBJ,UAAWA,EAAW5P,UAAWA,IAEjD,cAACiZ,GAAD,IAEA,eAAChJ,GAAA,EAAD,CAAUjD,QAAM,EAACve,QAAS,kBAAM8qB,GAAwB,IAAxD,UACE,cAACnI,GAAA,EAAD,UACE,cAAC,KAAD,MAGF,cAACC,GAAA,EAAD,CAAcrmB,QAASrC,EAAE,eAG3B,cAACywB,GAAD,CAAaxJ,UAAWA,EAAW5P,UAAWA,WAMvC7H,kBAAKmhB,ICnBPvkB,GAAkBykB,0BAEhB,SAASC,KACtB,IC9Ba1nB,ED8Bb,EAAwCrF,oBAAS,GAAjD,mBAAOsiB,EAAP,KAAqB0K,EAArB,KACA,EAAwDhtB,oBAAS,GAAjE,mBAAOitB,EAAP,KAA6BJ,EAA7B,KACA,EAAkD7sB,mBAAS,IAA3D,mBAAOwsB,EAAP,KAA0BC,EAA1B,KAEA,EnDVgC,WAChC,IAAMS,EAAiBnJ,aAAasG,QAAQ,aACtC8C,EAAmB5O,aAAc,gCACvC,EAAoCve,mBAA4B,SAAnBktB,GAA6BC,GAA1E,mBAAO7kB,EAAP,KAAmB8kB,EAAnB,KACA,EAAgDptB,mBAASktB,GAAkBloB,IAA3E,mBAAOqoB,EAAP,KAAyBC,EAAzB,KAOAhtB,qBAAU,WACR+sB,IAAqBroB,IAAqBooB,GAAc,GACxDC,IAAqBroB,IAAoBooB,GAAc,GACvDC,IAAqBroB,IAAoBooB,EAAcD,KACtD,CAACA,EAAkBE,IAEtB,IAAMllB,EAAQG,EAAatD,GAAmBA,GAExCuoB,EAAWvO,mBACf,kBACE5Z,aAAe,CACbH,cACAzG,QAAS,CACP6G,KAAM8C,EACN7J,QAAS,CAAEG,KAAMoG,GAAWsD,GAAO7J,SACnCwG,UAAW,CAAErG,KAAMoG,GAAWsD,GAAOrD,YAEvC0oB,UAAW,CACTC,aAAc,CACZC,MAAO,CACLrvB,MAAOwG,GAAWsD,GAAOpD,SAI7B4oB,oBAAqB,CACnBC,oBAAqB,CACnBtiB,QAAS,OACTuiB,eAAgB,gBAChBC,YAAa,EACb7X,UAAW,EACXE,aAAc,IAGlB4X,cAAe,CACbC,KAAM,CACJ3vB,MAAOwG,GAAWsD,GAAOpD,OACzBoR,aAAc,EACd,YAAa,CACX9X,MAAOwG,GAAWsD,GAAOpD,eAMrC,CAACoD,IAGH,MAAO,CAACG,EAAY+kB,EApDI,SAAA/V,GACtBgW,EAAoBhW,GACpByM,aAAaC,QAAQ,YAAa1M,IAkDmBiW,GmDhDWU,GAAlE,mBAAO3lB,EAAP,KAAmB+kB,EAAnB,KAAqCa,EAArC,KAAsDX,EAAtD,KACA,EAAkCjQ,KAAlC,mBAAOxD,EAAP,KAAoBqU,EAApB,KACA,EAAkCnuB,oBAAS,GAA3C,mBAAOkjB,EAAP,KAAkBkL,EAAlB,KACA,EAAsCtQ,aAAS,WAAYjgB,EAAa,CACtEkgB,MAAO,EACPC,gBAAiB,IACjBqQ,QAAS,kBAAMD,GAAa,IAC5BE,UAAW,kBAAMF,GAAa,MAJlBvQ,EAAd,EAAQ3f,KAAgBoV,EAAxB,EAAwBA,UAWxB,OAJAhT,qBAAU,WACRvC,IAAM8Y,IAAInc,KAAYiG,MAAK,gBAAGzC,EAAH,EAAGA,KAAH,OAAcuuB,EAAqBvuB,QAC7D,IAGD,qCACE,cAACqwB,GAAD,IAEA,cAAClmB,GAAgBmmB,SAAjB,CAA0Bjf,MAAO,CAAEjH,cAAnC,SACE,cAAC,KAAD,CAAkBH,MAAOolB,EAAzB,SACE,eAAC,KAAD,CACEplB,OCvDG9C,EDuD6BiD,EAAatD,GAAmBA,GCvDzD,2BAAU1C,GAAY+C,IAAUR,GAAWQ,KDsDpD,UAGE,cAACopB,EAAA,EAAD,IAGA,cAAC,IAAD,UACE,eAACvM,GAAD,WACE,eAACE,GAAD,WACE,cAACvgB,EAAA,EAAD,CACEC,KAAK,QACLzD,MAAM,UACN0D,QAAS,kBAAMirB,GAAiB1K,IAChCjX,MAAO,CAAEiZ,YAAa,OAJxB,SAMGhC,EAAe,cAACT,EAAA,EAAD,IAAgB,cAAC6M,EAAA,EAAD,MAGlC,eAACxsB,EAAA,EAAD,CAAYC,QAAQ,KAAKwsB,QAAM,EAA/B,wBACcnC,KAGd,sBACEnhB,MAAO,CAAEujB,YAAa,MAAOtjB,QAAS,OAAQujB,oBAAqB,iBAAkBC,IAAK,QAD5F,UAGE,cAACtM,GAAD,CACEzgB,QAAS,WACHsrB,IAAqBroB,IAAmBkpB,EAAgBlpB,IACxDqoB,IAAqBroB,IAAkBkpB,EAAgBlpB,IACvDqoB,IAAqBroB,IAAkBkpB,EAAgBlpB,KAJ/D,SAOGqoB,IAAqBroB,GACpB,cAAC+pB,EAAA,EAAD,IACE1B,IAAqBroB,GACvB,cAACgqB,EAAA,EAAD,IAEA,cAACC,EAAA,EAAD,MAIJ,cAACzM,GAAD,CAAczgB,QAAS,kBAA8BosB,EAAP,OAAhBrU,EAAkC,KAAmB,OAAnF,SACmB,OAAhBA,EAAuB,KAAO,aAKrC,cAAC,GAAD,CACEoJ,UAAWA,EACX5P,UAAWA,EACXgP,aAAcA,EACduK,wBAAyBA,IAG3B,cAAC5J,GAAD,CAAaC,UAAWA,EAAWrF,SAAUA,EAAUvK,UAAWA,IAElE,cAAC,KAAD,CAAkBnL,MAAOhD,GAAzB,SACG8nB,GAAwB,cAAC9J,GAAD,CAAc7hB,QAAS,kBAAMurB,GAAwB,SAG9EzC,KAAK/c,MAAM0W,aAAasG,QAAQ,sBAAwB,cAAC3G,GAAD,mBE7G1E,IAAMwL,GAAc,IAAIC,IAExBC,IAASC,OACP,cAAC,aAAD,UACE,cAACC,EAAA,EAAD,CAAqBC,OAAQL,GAA7B,SACE,cAACnC,GAAD,QAGJyC,SAASC,eAAe,W","file":"static/js/main.0ae58375.chunk.js","sourcesContent":["const { protocol, hostname, port } = window.location\n\nlet torrserverHost = process.env.REACT_APP_SERVER_HOST || `${protocol}//${hostname}${port ? `:${port}` : ''}`\n\nexport const torrentsHost = () => `${torrserverHost}/torrents`\nexport const viewedHost = () => `${torrserverHost}/viewed`\nexport const cacheHost = () => `${torrserverHost}/cache`\nexport const torrentUploadHost = () => `${torrserverHost}/torrent/upload`\nexport const settingsHost = () => `${torrserverHost}/settings`\nexport const streamHost = () => `${torrserverHost}/stream`\nexport const shutdownHost = () => `${torrserverHost}/shutdown`\nexport const echoHost = () => `${torrserverHost}/echo`\nexport const playlistTorrHost = () => `${torrserverHost}/stream`\n\nexport const getTorrServerHost = () => torrserverHost\nexport const setTorrServerHost = host => {\n torrserverHost = host\n}\n","import i18n from 'i18next'\nimport { initReactI18next } from 'react-i18next'\nimport LanguageDetector from 'i18next-browser-languagedetector'\nimport translationEN from 'locales/en/translation.json'\nimport translationRU from 'locales/ru/translation.json'\n\ni18n\n .use(LanguageDetector)\n .use(initReactI18next)\n .init({\n fallbackLng: 'en', // default language will be used if none of declared lanuages detected (en, ru)\n interpolation: { escapeValue: false }, // react already safes from xss\n resources: { en: { translation: translationEN }, ru: { translation: translationRU } },\n })\n\nexport default i18n\n","import axios from 'axios'\n\nimport i18n from '../i18n'\nimport { torrentsHost } from './Hosts'\n\nexport function humanizeSize(size) {\n if (!size) return ''\n const i = Math.floor(Math.log(size) / Math.log(1024))\n return `${(size / Math.pow(1024, i)).toFixed(2) * 1} ${\n [i18n.t('B'), i18n.t('KB'), i18n.t('MB'), i18n.t('GB'), i18n.t('TB')][i]\n }`\n}\n\nexport function humanizeSpeed(speed) {\n if (!speed) return ''\n const i = Math.floor(Math.log(speed * 8) / Math.log(1000))\n return `${((speed * 8) / Math.pow(1000, i)).toFixed(0) * 1} ${\n [i18n.t('bps'), i18n.t('kbps'), i18n.t('Mbps'), i18n.t('Gbps'), i18n.t('Tbps')][i]\n }`\n}\n\nexport function getPeerString(torrent) {\n if (!torrent || !torrent.connected_seeders) return null\n return `${torrent.connected_seeders} · ${torrent.active_peers} / ${torrent.total_peers}`\n}\n\nexport const shortenText = (text, sympolAmount) =>\n text ? text.slice(0, sympolAmount) + (text.length > sympolAmount ? '…' : '') : ''\n\nexport const removeRedundantCharacters = string => {\n let newString = string\n const brackets = [\n ['(', ')'],\n ['[', ']'],\n ['{', '}'],\n ]\n\n brackets.forEach(el => {\n const leftBracketRegexFormula = `\\\\${el[0]}`\n const leftBracketRegex = new RegExp(leftBracketRegexFormula, 'g')\n const leftBracketAmount = [...newString.matchAll(leftBracketRegex)].length\n const rightBracketRegexFormula = `\\\\${el[1]}`\n const rightBracketRegex = new RegExp(rightBracketRegexFormula, 'g')\n const rightBracketAmount = [...newString.matchAll(rightBracketRegex)].length\n\n if (leftBracketAmount !== rightBracketAmount) {\n const removeFormula = `(\\\\${el[0]})(?!.*\\\\1).*`\n const removeRegex = new RegExp(removeFormula, 'g')\n newString = newString.replace(removeRegex, '')\n }\n })\n\n const hasThreeDotsAtTheEnd = !!newString.match(/\\.{3}$/g)\n\n const trimmedString = newString.replace(/[\\\\.| ]+$/g, '').trim()\n\n return hasThreeDotsAtTheEnd ? `${trimmedString}..` : trimmedString\n}\n\nexport const getTorrents = async () => {\n try {\n const { data } = await axios.post(torrentsHost(), { action: 'list' })\n return data\n } catch (error) {\n throw new Error(null)\n }\n}\n","import { useTheme } from '@material-ui/core'\n\nexport const NoImageIcon = ({ color }) => {\n const primary = useTheme().palette.primary.main\n\n return (\n \n \n \n \n \n \n \n )\n}\n\nexport const AddItemIcon = () => {\n const primary = useTheme().palette.primary.main\n\n return (\n \n \n \n \n \n \n )\n}\n\nexport const USBIcon = ({ color, width }) => {\n const primary = useTheme().palette.primary.main\n\n return (\n \n \n \n \n \n \n )\n}\n\nexport const RAMIcon = ({ color, width }) => {\n const primary = useTheme().palette.primary.main\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport const TorrentIcon = () => {\n const primary = useTheme().palette.primary.main\n const secondaryColor = primary === '#00a572' ? '#74c39c' : '#4a5255'\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import { useEffect, useRef, useState } from 'react'\nimport { cacheHost, settingsHost } from 'utils/Hosts'\nimport axios from 'axios'\n\nexport const useUpdateCache = hash => {\n const [cache, setCache] = useState({})\n const componentIsMounted = useRef(true)\n const timerID = useRef(null)\n\n useEffect(\n () => () => {\n // this function is required to notify \"updateCache\" when NOT to make state update\n componentIsMounted.current = false\n },\n [],\n )\n\n useEffect(() => {\n if (hash) {\n timerID.current = setInterval(() => {\n const updateCache = newCache => componentIsMounted.current && setCache(newCache)\n\n axios\n .post(cacheHost(), { action: 'get', hash })\n .then(({ data }) => updateCache(data))\n // empty cache if error\n .catch(() => updateCache({}))\n }, 100)\n } else clearInterval(timerID.current)\n\n return () => clearInterval(timerID.current)\n }, [hash])\n\n return cache\n}\n\nexport const useCreateCacheMap = cache => {\n const [cacheMap, setCacheMap] = useState([])\n\n useEffect(() => {\n const { PiecesCount, Pieces, Readers } = cache\n\n const map = []\n\n for (let i = 0; i < PiecesCount; i++) {\n const { Size, Length } = Pieces[i] || {}\n\n const newPiece = { id: i, percentage: (Size / Length) * 100 || 0 }\n\n Readers.forEach(r => {\n if (i === r.Reader) newPiece.isReader = true\n if (i >= r.Start && i <= r.End) newPiece.isReaderRange = true\n })\n\n map.push(newPiece)\n }\n setCacheMap(map)\n }, [cache])\n\n return cacheMap\n}\n\nexport const useGetSettings = cache => {\n const [settings, setSettings] = useState()\n useEffect(() => {\n axios.post(settingsHost(), { action: 'get' }).then(({ data }) => setSettings(data))\n }, [cache])\n\n return settings\n}\n","import Button from '@material-ui/core/Button'\nimport { AppBar, IconButton, makeStyles, Toolbar, Typography } from '@material-ui/core'\nimport CloseIcon from '@material-ui/icons/Close'\nimport { ArrowBack } from '@material-ui/icons'\nimport { useTranslation } from 'react-i18next'\n\nconst useStyles = makeStyles({\n appBar: { position: 'relative' },\n title: { marginLeft: '6px', flex: 1 },\n})\n\nexport default function DialogHeader({ title, onClose, onBack }) {\n const { t } = useTranslation()\n const classes = useStyles()\n\n return (\n \n \n \n {onBack ? : }\n \n\n \n {title}\n \n\n {onBack && (\n \n )}\n \n \n )\n}\n","import { rgba } from 'polished'\n\nexport const themeColors = {\n light: {\n app: {\n headerToggleColor: '#4db380',\n appSecondaryColor: '#cbe8d9',\n sidebarBGColor: '#575757',\n sidebarFillColor: '#dee3e5',\n },\n torrentCard: {\n accentCardColor: '#337a57',\n buttonBGColor: rgba('#337a57', 0.5),\n cardPrimaryColor: '#00a572',\n cardSecondaryColor: '#74c39c',\n },\n dialogTorrentDetailsContent: {\n posterBGColor: '#74c39c',\n gradientStartColor: '#e4f6ed',\n gradientEndColor: '#b5dec9',\n chacheSectionBGColor: '#88cdaa',\n widgetFontColor: '#fff',\n titleFontColor: '#000',\n subNameFontColor: '#7c7b7c',\n torrentFilesSectionBGColor: '#f1eff3',\n },\n detailedView: {\n gradientStartColor: '#e4f6ed',\n gradientEndColor: '#b5dec9',\n cacheSectionBGColor: '#fff',\n },\n addDialog: {\n gradientStartColor: '#e4f6ed',\n gradientEndColor: '#b5dec9',\n fontColor: '#000',\n notificationErrorBGColor: '#cda184',\n notificationSuccessBGColor: '#88cdaa',\n languageSwitchBGColor: '#74c39c',\n languageSwitchFontColor: '#e4f6ed',\n posterBGColor: '#74c39c',\n },\n torrentFunctions: {\n fontColor: '#000',\n },\n table: {\n defaultPrimaryColor: '#009879',\n defaultSecondaryColor: '#00a383',\n defaultTertiaryColor: '#03aa89',\n },\n settingsDialog: {\n contentBG: '#f1eff3',\n footerBG: '#fff',\n },\n },\n dark: {\n app: {\n headerToggleColor: '#545a5e',\n appSecondaryColor: '#545a5e',\n sidebarBGColor: '#323637',\n sidebarFillColor: '#dee3e5',\n },\n torrentCard: {\n accentCardColor: '#323637',\n buttonBGColor: rgba('#323637', 0.5),\n cardPrimaryColor: '#545a5e',\n cardSecondaryColor: rgba('#dee3e5', 0.4),\n },\n dialogTorrentDetailsContent: {\n posterBGColor: rgba('#dee3e5', 0.4),\n gradientStartColor: '#656f76',\n gradientEndColor: '#545a5e',\n chacheSectionBGColor: '#3c4244',\n widgetFontColor: rgba('#fff', 0.8),\n titleFontColor: '#f1eff3',\n subNameFontColor: '#dee3e5',\n torrentFilesSectionBGColor: rgba('#545a5e', 0.9),\n },\n detailedView: {\n gradientStartColor: '#656f76',\n gradientEndColor: '#545a5e',\n cacheSectionBGColor: '#dee3e5',\n },\n addDialog: {\n gradientStartColor: '#656f76',\n gradientEndColor: '#545a5e',\n fontColor: '#fff',\n notificationErrorBGColor: '#c82e3f',\n notificationSuccessBGColor: '#323637',\n languageSwitchBGColor: '#545a5e',\n languageSwitchFontColor: '#dee3e5',\n posterBGColor: '#dee3e5',\n },\n torrentFunctions: {\n fontColor: '#f1eff3',\n },\n table: {\n defaultPrimaryColor: '#323637',\n defaultSecondaryColor: rgba('#545a5e', 0.9),\n defaultTertiaryColor: '#545a5e',\n },\n settingsDialog: {\n contentBG: '#5a6166',\n footerBG: '#323637',\n },\n },\n}\n\nexport const mainColors = {\n light: {\n primary: '#00a572',\n secondary: '#00a572',\n labels: rgba('#000', 0.9),\n },\n dark: {\n primary: '#323637',\n secondary: '#dee3e5',\n labels: rgba('#fff', 0.9),\n },\n}\n","import { createMuiTheme, useMediaQuery } from '@material-ui/core'\nimport { useEffect, useMemo, useState } from 'react'\n\nimport { mainColors } from './colors'\n\nexport const THEME_MODES = { LIGHT: 'light', DARK: 'dark', AUTO: 'auto' }\n\nconst typography = { fontFamily: 'Open Sans, sans-serif' }\n\nexport const darkTheme = createMuiTheme({\n typography,\n palette: {\n type: THEME_MODES.DARK,\n primary: { main: mainColors.dark.primary },\n secondary: { main: mainColors.dark.secondary },\n },\n})\nexport const lightTheme = createMuiTheme({\n typography,\n palette: {\n type: THEME_MODES.LIGHT,\n primary: { main: mainColors.light.primary },\n secondary: { main: mainColors.light.secondary },\n },\n})\n\nexport const useMaterialUITheme = () => {\n const savedThemeMode = localStorage.getItem('themeMode')\n const isSystemModeDark = useMediaQuery('(prefers-color-scheme: dark)')\n const [isDarkMode, setIsDarkMode] = useState(savedThemeMode === 'dark' || isSystemModeDark)\n const [currentThemeMode, setCurrentThemeMode] = useState(savedThemeMode || THEME_MODES.LIGHT)\n\n const updateThemeMode = mode => {\n setCurrentThemeMode(mode)\n localStorage.setItem('themeMode', mode)\n }\n\n useEffect(() => {\n currentThemeMode === THEME_MODES.LIGHT && setIsDarkMode(false)\n currentThemeMode === THEME_MODES.DARK && setIsDarkMode(true)\n currentThemeMode === THEME_MODES.AUTO && setIsDarkMode(isSystemModeDark)\n }, [isSystemModeDark, currentThemeMode])\n\n const theme = isDarkMode ? THEME_MODES.DARK : THEME_MODES.LIGHT\n\n const muiTheme = useMemo(\n () =>\n createMuiTheme({\n typography,\n palette: {\n type: theme,\n primary: { main: mainColors[theme].primary },\n secondary: { main: mainColors[theme].secondary },\n },\n overrides: {\n MuiInputBase: {\n input: {\n color: mainColors[theme].labels,\n },\n },\n // https://material-ui.com/ru/api/form-control-label/\n MuiFormControlLabel: {\n labelPlacementStart: {\n display: 'flex',\n justifyContent: 'space-between',\n marginStart: 0,\n marginTop: 6,\n marginBottom: 2,\n },\n },\n MuiInputLabel: {\n root: {\n color: mainColors[theme].labels,\n marginBottom: 8,\n '&$focused': {\n color: mainColors[theme].labels,\n },\n },\n },\n },\n }),\n [theme],\n )\n\n return [isDarkMode, currentThemeMode, updateThemeMode, muiTheme]\n}\n","import { rgba } from 'polished'\nimport { mainColors } from 'style/colors'\n\nexport const snakeSettings = {\n dark: {\n default: {\n borderWidth: 2,\n pieceSize: 14,\n gapBetweenPieces: 3,\n borderColor: mainColors.dark.secondary,\n completeColor: rgba(mainColors.dark.primary, 0.65),\n backgroundColor: '#f1eff3',\n progressColor: mainColors.dark.secondary,\n readerColor: '#000',\n rangeColor: '#cda184',\n },\n mini: {\n cacheMaxHeight: 340,\n borderWidth: 2,\n pieceSize: 23,\n gapBetweenPieces: 6,\n borderColor: '#545a5e',\n completeColor: '#545a5e',\n backgroundColor: '#dee3e5',\n progressColor: '#dee3e5',\n readerColor: '#000',\n rangeColor: '#cda184',\n },\n },\n light: {\n default: {\n borderWidth: 1,\n pieceSize: 14,\n gapBetweenPieces: 3,\n borderColor: '#dbf2e8',\n completeColor: mainColors.light.primary,\n backgroundColor: '#fff',\n progressColor: '#b3dfc9',\n readerColor: '#000',\n rangeColor: '#afa6e3',\n },\n mini: {\n cacheMaxHeight: 340,\n borderWidth: 2,\n pieceSize: 23,\n gapBetweenPieces: 6,\n borderColor: '#4db380',\n completeColor: '#4db380',\n backgroundColor: '#dbf2e8',\n progressColor: '#dbf2e8',\n readerColor: '#2d714f',\n rangeColor: '#afa6e3',\n },\n },\n}\n\nexport const createGradient = (ctx, percentage, theme, snakeType) => {\n const { pieceSize, completeColor, progressColor } = snakeSettings[theme][snakeType]\n\n const gradient = ctx.createLinearGradient(0, pieceSize, 0, 0)\n gradient.addColorStop(0, completeColor)\n gradient.addColorStop(percentage / 100, completeColor)\n gradient.addColorStop(percentage / 100, progressColor)\n gradient.addColorStop(1, progressColor)\n\n return gradient\n}\n","import styled, { css } from 'styled-components'\n\nimport { snakeSettings } from './snakeSettings'\n\nexport const ScrollNotification = styled.div`\n margin-top: 10px;\n text-transform: uppercase;\n color: rgba(0, 0, 0, 0.5);\n align-self: center;\n`\n\nexport const SnakeWrapper = styled.div`\n ${({ isMini, themeType }) => css`\n ${isMini &&\n css`\n display: grid;\n justify-content: center;\n max-height: ${snakeSettings[themeType].mini.cacheMaxHeight}px;\n overflow: auto;\n `}\n\n canvas {\n display: block;\n }\n `}\n`\n","import Measure from 'react-measure'\nimport { useState, memo, useRef, useEffect, useContext } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport isEqual from 'lodash/isEqual'\nimport { DarkModeContext } from 'components/App'\nimport { THEME_MODES } from 'style/materialUISetup'\n\nimport { useCreateCacheMap } from '../customHooks'\nimport getShortCacheMap from './getShortCacheMap'\nimport { SnakeWrapper, ScrollNotification } from './style'\nimport { createGradient, snakeSettings } from './snakeSettings'\n\nconst TorrentCache = ({ cache, isMini }) => {\n const { t } = useTranslation()\n const [dimensions, setDimensions] = useState({ width: 0, height: 0 })\n const { width } = dimensions\n const canvasRef = useRef(null)\n const ctxRef = useRef(null)\n const cacheMap = useCreateCacheMap(cache)\n const settingsTarget = isMini ? 'mini' : 'default'\n const { isDarkMode } = useContext(DarkModeContext)\n const theme = isDarkMode ? THEME_MODES.DARK : THEME_MODES.LIGHT\n\n const {\n readerColor,\n rangeColor,\n borderWidth,\n pieceSize,\n gapBetweenPieces,\n backgroundColor,\n borderColor,\n cacheMaxHeight,\n completeColor,\n } = snakeSettings[theme][settingsTarget]\n\n const canvasWidth = isMini ? width * 0.93 : width\n\n const pieceSizeWithGap = pieceSize + gapBetweenPieces\n const piecesInOneRow = Math.floor(canvasWidth / pieceSizeWithGap)\n\n let shotCacheMap\n if (isMini) {\n const preloadPiecesAmount = Math.round(cache.Capacity / cache.PiecesLength - 1)\n shotCacheMap = getShortCacheMap({ cacheMap, preloadPiecesAmount, piecesInOneRow })\n }\n const source = isMini ? shotCacheMap : cacheMap\n const startingXPoint = Math.ceil((canvasWidth - pieceSizeWithGap * piecesInOneRow) / 2) // needed to center grid\n const height = Math.ceil(source.length / piecesInOneRow) * pieceSizeWithGap\n\n useEffect(() => {\n if (!canvasWidth || !height) return\n\n const canvas = canvasRef.current\n canvas.width = canvasWidth\n canvas.height = height\n ctxRef.current = canvas.getContext('2d')\n }, [canvasRef, height, canvasWidth])\n\n useEffect(() => {\n const ctx = ctxRef.current\n if (!ctx) return\n\n ctx.clearRect(0, 0, canvasWidth, height)\n\n source.forEach(({ percentage, isReader, isReaderRange }, i) => {\n const inProgress = percentage > 0 && percentage < 100\n const isCompleted = percentage === 100\n const currentRow = i % piecesInOneRow\n const currentColumn = Math.floor(i / piecesInOneRow)\n const fixBlurStroke = borderWidth % 2 === 0 ? 0 : 0.5\n const requiredFix = Math.ceil(borderWidth / 2) + 1 + fixBlurStroke\n const x = currentRow * pieceSize + currentRow * gapBetweenPieces + startingXPoint + requiredFix\n const y = currentColumn * pieceSize + currentColumn * gapBetweenPieces + requiredFix\n\n ctx.lineWidth = borderWidth\n ctx.fillStyle = inProgress\n ? createGradient(ctx, percentage, theme, settingsTarget)\n : isCompleted\n ? completeColor\n : backgroundColor\n ctx.strokeStyle = isReader\n ? readerColor\n : inProgress || isCompleted\n ? completeColor\n : isReaderRange\n ? rangeColor\n : borderColor\n\n ctx.translate(x, y)\n ctx.fillRect(0, 0, pieceSize, pieceSize)\n ctx.strokeRect(0, 0, pieceSize, pieceSize)\n ctx.setTransform(1, 0, 0, 1, 0, 0)\n })\n }, [\n cacheMap,\n height,\n canvasWidth,\n piecesInOneRow,\n startingXPoint,\n pieceSize,\n gapBetweenPieces,\n source,\n backgroundColor,\n borderColor,\n borderWidth,\n settingsTarget,\n completeColor,\n readerColor,\n rangeColor,\n theme,\n ])\n\n return (\n setDimensions(bounds)}>\n {({ measureRef }) => (\n
\n \n \n \n\n {isMini && height >= cacheMaxHeight && {t('ScrollDown')}}\n
\n )}\n
\n )\n}\n\nexport default memo(\n TorrentCache,\n (prev, next) => isEqual(prev.cache.Pieces, next.cache.Pieces) && isEqual(prev.cache.Readers, next.cache.Readers),\n)\n","export default ({ cacheMap, preloadPiecesAmount, piecesInOneRow }) => {\n const cacheMapWithoutEmptyBlocks = cacheMap.filter(({ percentage }) => percentage > 0)\n\n const getFullAmountOfBlocks = amountOfBlocks =>\n // this function counts existed amount of blocks with extra \"empty blocks\" to fill the row till the end\n amountOfBlocks % piecesInOneRow === 0\n ? amountOfBlocks - 1\n : amountOfBlocks + piecesInOneRow - (amountOfBlocks % piecesInOneRow) - 1 || 0\n\n const amountOfBlocksToRenderInShortView = getFullAmountOfBlocks(preloadPiecesAmount)\n // preloadPiecesAmount is counted from \"cache.Capacity / cache.PiecesLength\". We always show at least this amount of blocks\n const scalableAmountOfBlocksToRenderInShortView = getFullAmountOfBlocks(cacheMapWithoutEmptyBlocks.length)\n // cacheMap can become bigger than preloadPiecesAmount counted before. In that case we count blocks dynamically\n\n const finalAmountOfBlocksToRenderInShortView = Math.max(\n // this check is needed to decide which is the biggest amount of blocks and take it to render\n scalableAmountOfBlocksToRenderInShortView,\n amountOfBlocksToRenderInShortView,\n )\n\n const extraBlocksAmount = finalAmountOfBlocksToRenderInShortView - cacheMapWithoutEmptyBlocks.length + 1\n // amount of blocks needed to fill the line till the end\n\n const extraEmptyBlocksForFillingLine = extraBlocksAmount ? new Array(extraBlocksAmount).fill({}) : []\n\n return [...cacheMapWithoutEmptyBlocks, ...extraEmptyBlocksForFillingLine]\n}\n","import styled, { css } from 'styled-components'\n\nconst viewedPrimaryColor = '#bdbdbd'\nconst viewedSecondaryColor = '#c4c4c4'\nconst viewedTertiaryColor = '#c9c9c9'\nconst bigTableDividerColor = '#ddd'\nconst bigTableDefaultRowColor = '#fff'\nconst bigTableViewedRowColor = '#f3f3f3'\n\nconst viewedIndicator = css`\n ${({\n theme: {\n table: { defaultPrimaryColor },\n },\n }) => css`\n :before {\n content: '';\n width: 10px;\n height: 10px;\n background: ${defaultPrimaryColor};\n border-radius: 50%;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n `}\n`\nexport const TableStyle = styled.table`\n ${({\n theme: {\n table: { defaultPrimaryColor },\n },\n }) => css`\n border-collapse: collapse;\n margin: 25px 0;\n font-size: 0.9em;\n width: 100%;\n border-radius: 5px 5px 0 0;\n overflow: hidden;\n box-shadow: 0 0 20px rgba(0, 0, 0, 0.15);\n color: #000;\n\n thead tr {\n background: ${defaultPrimaryColor};\n color: #fff;\n text-align: left;\n text-transform: uppercase;\n }\n\n th,\n td {\n padding: 12px 15px;\n }\n\n tbody tr {\n border-bottom: 1px solid ${bigTableDividerColor};\n background: ${bigTableDefaultRowColor};\n\n :last-of-type {\n border-bottom: 2px solid ${defaultPrimaryColor};\n }\n\n &.viewed-file-row {\n background: ${bigTableViewedRowColor};\n }\n }\n\n td {\n &.viewed-file-indicator {\n position: relative;\n\n ${viewedIndicator}\n }\n }\n\n .button-cell {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 10px;\n }\n\n @media (max-width: 970px) {\n display: none;\n }\n `}\n`\n\nexport const ShortTableWrapper = styled.div`\n display: grid;\n gap: 20px;\n grid-template-columns: repeat(2, 1fr);\n display: none;\n\n @media (max-width: 970px) {\n display: grid;\n }\n\n @media (max-width: 820px) {\n gap: 15px;\n grid-template-columns: 1fr;\n }\n`\n\nexport const ShortTable = styled.div`\n ${({\n isViewed,\n theme: {\n table: { defaultPrimaryColor, defaultSecondaryColor, defaultTertiaryColor },\n },\n }) => css`\n width: 100%;\n grid-template-rows: repeat(3, max-content);\n border-radius: 5px;\n overflow: hidden;\n box-shadow: 0 0 20px rgba(0, 0, 0, 0.15);\n\n .short-table {\n &-name {\n background: ${isViewed ? viewedPrimaryColor : defaultPrimaryColor};\n display: grid;\n place-items: center;\n padding: 15px;\n color: #fff;\n text-transform: uppercase;\n font-size: 15px;\n font-weight: bold;\n\n @media (max-width: 880px) {\n font-size: 13px;\n padding: 10px;\n }\n }\n &-data {\n display: grid;\n grid-auto-flow: column;\n grid-template-columns: ${isViewed ? 'max-content' : '1fr'};\n grid-auto-columns: 1fr;\n }\n &-field {\n display: grid;\n grid-template-rows: 30px 1fr;\n background: black;\n :not(:last-child) {\n border-right: 1px solid ${isViewed ? viewedPrimaryColor : defaultPrimaryColor};\n }\n\n &-name {\n background: ${isViewed ? viewedSecondaryColor : defaultSecondaryColor};\n color: #fff;\n text-transform: uppercase;\n font-size: 12px;\n font-weight: 500;\n display: grid;\n place-items: center;\n padding: 0 10px;\n\n @media (max-width: 880px) {\n font-size: 11px;\n }\n }\n\n &-value {\n background: ${isViewed ? viewedTertiaryColor : defaultTertiaryColor};\n display: grid;\n place-items: center;\n color: #fff;\n font-size: 15px;\n padding: 15px 10px;\n position: relative;\n\n @media (max-width: 880px) {\n font-size: 13px;\n padding: 12px 8px;\n }\n }\n }\n\n &-viewed-indicator {\n ${isViewed && viewedIndicator}\n }\n\n &-buttons {\n padding: 20px;\n border-bottom: 2px solid ${isViewed ? viewedPrimaryColor : defaultPrimaryColor};\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n align-items: center;\n gap: 20px;\n background: #fff;\n\n @media (max-width: 410px) {\n gap: 10px;\n grid-template-columns: 1fr;\n }\n }\n }\n `}\n`\n","import { streamHost } from 'utils/Hosts'\nimport isEqual from 'lodash/isEqual'\nimport { humanizeSize } from 'utils/Utils'\nimport ptt from 'parse-torrent-title'\nimport { Button } from '@material-ui/core'\nimport CopyToClipboard from 'react-copy-to-clipboard'\nimport { useTranslation } from 'react-i18next'\n\nimport { TableStyle, ShortTableWrapper, ShortTable } from './style'\n\nconst { memo } = require('react')\n\n// russian episode detection support\nptt.addHandler('episode', /(\\d{1,4})[- |. ]серия|серия[- |. ](\\d{1,4})/i, { type: 'integer' })\nptt.addHandler('season', /sezon[- |. ](\\d{1,3})|(\\d{1,3})[- |. ]sezon/i, { type: 'integer' })\nptt.addHandler('season', /сезон[- |. ](\\d{1,3})|(\\d{1,3})[- |. ]сезон/i, { type: 'integer' })\n\nconst Table = memo(\n ({ playableFileList, viewedFileList, selectedSeason, seasonAmount, hash }) => {\n const { t } = useTranslation()\n const preloadBuffer = fileId => fetch(`${streamHost()}?link=${hash}&index=${fileId}&preload`)\n const getFileLink = (path, id) =>\n `${streamHost()}/${encodeURIComponent(path.split('\\\\').pop().split('/').pop())}?link=${hash}&index=${id}&play`\n const fileHasEpisodeText = !!playableFileList?.find(({ path }) => ptt.parse(path).episode)\n const fileHasSeasonText = !!playableFileList?.find(({ path }) => ptt.parse(path).season)\n const fileHasResolutionText = !!playableFileList?.find(({ path }) => ptt.parse(path).resolution)\n\n // if files in list is more then 1 and no season text detected by ptt.parse, show full name\n const shouldDisplayFullFileName = playableFileList.length > 1 && !fileHasEpisodeText\n\n return !playableFileList?.length ? (\n 'No playable files in this torrent'\n ) : (\n <>\n \n \n \n {t('Viewed')}\n {t('Name')}\n {fileHasSeasonText && seasonAmount?.length === 1 && {t('Season')}}\n {fileHasEpisodeText && {t('Episode')}}\n {fileHasResolutionText && {t('Resolution')}}\n {t('Size')}\n {t('Actions')}\n \n \n\n \n {playableFileList.map(({ id, path, length }) => {\n const { title, resolution, episode, season } = ptt.parse(path)\n const isViewed = viewedFileList?.includes(id)\n const link = getFileLink(path, id)\n\n return (\n (season === selectedSeason || !seasonAmount?.length) && (\n \n \n {shouldDisplayFullFileName ? path : title}\n {fileHasSeasonText && seasonAmount?.length === 1 && {season}}\n {fileHasEpisodeText && {episode}}\n {fileHasResolutionText && {resolution}}\n {humanizeSize(length)}\n \n
\n \n\n \n \n \n\n \n \n \n
\n \n \n )\n )\n })}\n \n
\n\n \n {playableFileList.map(({ id, path, length }) => {\n const { title, resolution, episode, season } = ptt.parse(path)\n const isViewed = viewedFileList?.includes(id)\n const link = getFileLink(path, id)\n\n return (\n (season === selectedSeason || !seasonAmount?.length) && (\n \n
{shouldDisplayFullFileName ? path : title}
\n
\n {isViewed && (\n
\n
{t('Viewed')}
\n
\n
\n
\n
\n )}\n {fileHasSeasonText && seasonAmount?.length === 1 && (\n
\n
{t('Season')}
\n
{season}
\n
\n )}\n {fileHasEpisodeText && (\n
\n
{t('Episode')}
\n
{episode}
\n
\n )}\n {fileHasResolutionText && (\n
\n
{t('Resolution')}
\n
{resolution}
\n
\n )}\n
\n
{t('Size')}
\n
{humanizeSize(length)}
\n
\n
\n
\n \n\n \n \n \n\n \n \n \n
\n \n )\n )\n })}\n \n \n )\n },\n (prev, next) => isEqual(prev, next),\n)\n\nexport default Table\n","import { rgba } from 'polished'\nimport styled, { css } from 'styled-components'\n\nexport const DialogContentGrid = styled.div`\n display: grid;\n grid-template-columns: 70% 1fr;\n grid-template-rows: repeat(2, min-content);\n grid-template-areas:\n 'main cache'\n 'file-list file-list';\n\n @media (max-width: 1450px) {\n grid-template-columns: 1fr;\n grid-template-rows: repeat(3, min-content);\n grid-template-areas:\n 'main'\n 'cache'\n 'file-list';\n }\n`\nexport const Poster = styled.div`\n ${({\n poster,\n theme: {\n dialogTorrentDetailsContent: { posterBGColor },\n },\n }) => css`\n height: 400px;\n border-radius: 5px;\n overflow: hidden;\n align-self: center;\n\n ${poster\n ? css`\n img {\n border-radius: 5px;\n height: 100%;\n }\n `\n : css`\n width: 300px;\n display: grid;\n place-items: center;\n background: ${posterBGColor};\n\n svg {\n transform: scale(2.5) translateY(-3px);\n }\n `}\n\n @media (max-width: 1280px) {\n align-self: start;\n }\n\n @media (max-width: 840px) {\n ${poster\n ? css`\n height: 200px;\n `\n : css`\n display: none;\n `}\n }\n `}\n`\nexport const MainSection = styled.section`\n ${({\n theme: {\n dialogTorrentDetailsContent: { gradientStartColor, gradientEndColor },\n },\n }) => css`\n grid-area: main;\n padding: 40px;\n display: grid;\n grid-template-columns: min-content 1fr;\n gap: 30px;\n background: linear-gradient(145deg, ${gradientStartColor}, ${gradientEndColor});\n\n @media (max-width: 840px) {\n grid-template-columns: 1fr;\n }\n\n @media (max-width: 800px) {\n padding: 20px;\n }\n `}\n`\n\nexport const CacheSection = styled.section`\n ${({\n theme: {\n dialogTorrentDetailsContent: { chacheSectionBGColor },\n },\n }) => css`\n grid-area: cache;\n padding: 40px;\n display: grid;\n align-content: start;\n grid-template-rows: min-content 1fr min-content;\n background: ${chacheSectionBGColor};\n\n @media (max-width: 800px) {\n padding: 20px;\n }\n `}\n`\n\nexport const TorrentFilesSection = styled.section`\n ${({\n theme: {\n dialogTorrentDetailsContent: { torrentFilesSectionBGColor },\n },\n }) => css`\n grid-area: file-list;\n padding: 40px;\n box-shadow: inset 3px 25px 8px -25px rgba(0, 0, 0, 0.5);\n background: ${torrentFilesSectionBGColor};\n\n @media (max-width: 800px) {\n padding: 20px;\n }\n `}\n`\n\nexport const SectionSubName = styled.div`\n ${({\n theme: {\n dialogTorrentDetailsContent: { subNameFontColor },\n },\n }) => css`\n ${({ mb }) => css`\n ${mb && `margin-top: ${mb / 3}px`};\n ${mb && `margin-bottom: ${mb}px`};\n line-height: 1.2;\n color: ${subNameFontColor};\n\n @media (max-width: 800px) {\n ${mb && `margin-top: ${mb / 4}px`};\n ${mb && `margin-bottom: ${mb / 2}px`};\n font-size: 14px;\n }\n `}\n `}\n`\n\nexport const SectionTitle = styled.div`\n ${({\n color,\n theme: {\n dialogTorrentDetailsContent: { titleFontColor },\n },\n }) => css`\n ${({ mb }) => css`\n ${mb && `margin-bottom: ${mb}px`};\n font-size: 34px;\n font-weight: 300;\n line-height: 1;\n word-break: break-word;\n color: ${color || titleFontColor};\n\n @media (max-width: 800px) {\n font-size: 24px;\n line-height: 1.1;\n ${mb && `margin-bottom: ${mb / 2}px`};\n }\n `}\n `}\n`\n\nexport const SectionHeader = styled.div`\n margin-bottom: 20px;\n`\n\nexport const WidgetWrapper = styled.div`\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(max-content, 220px));\n gap: 20px;\n\n @media (max-width: 800px) {\n gap: 15px;\n }\n @media (max-width: 410px) {\n gap: 10px;\n }\n\n ${({ detailedView }) =>\n detailedView\n ? css`\n @media (max-width: 800px) {\n grid-template-columns: repeat(2, 1fr);\n }\n @media (max-width: 410px) {\n grid-template-columns: 1fr;\n }\n `\n : css`\n @media (max-width: 800px) {\n grid-template-columns: repeat(auto-fit, minmax(max-content, 185px));\n }\n @media (max-width: 480px) {\n grid-template-columns: 1fr 1fr;\n }\n @media (max-width: 390px) {\n grid-template-columns: 1fr;\n }\n `}\n`\n\nexport const WidgetFieldWrapper = styled.div`\n display: grid;\n grid-template-columns: 40px 1fr;\n grid-template-rows: min-content 50px;\n grid-template-areas:\n 'title title'\n 'icon value';\n\n > * {\n display: grid;\n place-items: center;\n }\n\n @media (max-width: 800px) {\n grid-template-columns: 30px 1fr;\n grid-template-rows: min-content 40px;\n }\n`\nexport const WidgetFieldTitle = styled.div`\n ${({\n theme: {\n dialogTorrentDetailsContent: { titleFontColor },\n },\n }) => css`\n grid-area: title;\n justify-self: start;\n text-transform: uppercase;\n font-size: 11px;\n margin-bottom: 2px;\n font-weight: 600;\n color: ${titleFontColor};\n `}\n`\n\nexport const WidgetFieldIcon = styled.div`\n ${({ bgColor }) => css`\n grid-area: icon;\n color: ${rgba('#fff', 0.8)};\n background: ${bgColor};\n border-radius: 5px 0 0 5px;\n\n @media (max-width: 800px) {\n > svg {\n width: 50%;\n }\n }\n `}\n`\nexport const WidgetFieldValue = styled.div`\n ${({\n bgColor,\n theme: {\n dialogTorrentDetailsContent: { widgetFontColor },\n },\n }) => css`\n grid-area: value;\n font-size: 24px;\n padding: 0 20px 0 0;\n color: ${widgetFontColor};\n background: ${bgColor};\n border-radius: 0 5px 5px 0;\n white-space: nowrap;\n\n @media (max-width: 800px) {\n font-size: 18px;\n padding: 0 16px 0 0;\n }\n `}\n`\n\nexport const LoadingProgress = styled.div.attrs(\n ({\n value,\n fullAmount,\n theme: {\n dialogTorrentDetailsContent: { gradientEndColor },\n },\n }) => {\n const percentage = Math.min(100, (value * 100) / fullAmount)\n\n return {\n // this block is here according to styled-components recomendation about fast changable components\n style: {\n background: `linear-gradient(to right, ${gradientEndColor} 0%, ${gradientEndColor} ${percentage}%, #fff ${percentage}%, #fff 100%)`,\n },\n }\n },\n)`\n ${({ label }) => css`\n border: 1px solid;\n padding: 10px 20px;\n border-radius: 5px;\n color: #000;\n\n :before {\n content: '${label}';\n display: grid;\n place-items: center;\n font-size: 20px;\n }\n `}\n`\n\nexport const Divider = styled.div`\n height: 1px;\n background-color: rgba(0, 0, 0, 0.12);\n margin: 30px 0;\n`\n","import styled, { css } from 'styled-components'\n\nexport const DetailedViewWidgetSection = styled.section`\n ${({\n theme: {\n detailedView: { gradientStartColor, gradientEndColor },\n },\n }) => css`\n padding: 40px;\n background: linear-gradient(145deg, ${gradientStartColor}, ${gradientEndColor});\n\n @media (max-width: 800px) {\n padding: 20px;\n }\n `}\n`\n\nexport const DetailedViewCacheSection = styled.section`\n ${({\n theme: {\n detailedView: { cacheSectionBGColor },\n },\n }) => css`\n padding: 40px;\n box-shadow: inset 3px 25px 8px -25px rgba(0, 0, 0, 0.5);\n background: ${cacheSectionBGColor};\n flex: 1;\n\n @media (max-width: 800px) {\n padding: 20px;\n }\n `}\n`\n","import { WidgetFieldWrapper, WidgetFieldIcon, WidgetFieldValue, WidgetFieldTitle } from './style'\n\nexport default function StatisticsField({ icon: Icon, title, value, iconBg, valueBg }) {\n return (\n \n {title}\n \n \n \n\n {value}\n \n )\n}\n","import { DarkModeContext } from 'components/App'\nimport { useContext } from 'react'\nimport { THEME_MODES } from 'style/materialUISetup'\n\nconst { LIGHT, DARK } = THEME_MODES\n\nconst colors = {\n light: {\n downloadSpeed: { iconBGColor: '#118f00', valueBGColor: '#13a300' },\n uploadSpeed: { iconBGColor: '#0146ad', valueBGColor: '#0058db' },\n peers: { iconBGColor: '#cdc118', valueBGColor: '#d8cb18' },\n piecesCount: { iconBGColor: '#b6c95e', valueBGColor: '#c0d076' },\n piecesLength: { iconBGColor: '#0982c8', valueBGColor: '#098cd7' },\n status: { iconBGColor: '#aea25b', valueBGColor: '#b4aa6e' },\n size: { iconBGColor: '#9b01ad', valueBGColor: '#ac03bf' },\n },\n dark: {\n downloadSpeed: { iconBGColor: '#0c6600', valueBGColor: '#0d7000' },\n uploadSpeed: { iconBGColor: '#003f9e', valueBGColor: '#0047b3' },\n peers: { iconBGColor: '#a69c11', valueBGColor: '#b4a913' },\n piecesCount: { iconBGColor: '#8da136', valueBGColor: '#99ae3d' },\n piecesLength: { iconBGColor: '#07659c', valueBGColor: '#0872af' },\n status: { iconBGColor: '#938948', valueBGColor: '#9f9450' },\n size: { iconBGColor: '#81008f', valueBGColor: '#9102a1' },\n },\n}\n\nexport default function useGetWidgetColors(widgetName) {\n const { isDarkMode } = useContext(DarkModeContext)\n const widgetColors = colors[isDarkMode ? DARK : LIGHT][widgetName]\n\n return widgetColors\n}\n","import {\n ArrowDownward as ArrowDownwardIcon,\n ArrowUpward as ArrowUpwardIcon,\n SwapVerticalCircle as SwapVerticalCircleIcon,\n ViewAgenda as ViewAgendaIcon,\n Widgets as WidgetsIcon,\n PhotoSizeSelectSmall as PhotoSizeSelectSmallIcon,\n Build as BuildIcon,\n} from '@material-ui/icons'\nimport { getPeerString, humanizeSize, humanizeSpeed } from 'utils/Utils'\nimport { useTranslation } from 'react-i18next'\nimport { GETTING_INFO, IN_DB, CLOSED, PRELOAD, WORKING } from 'torrentStates'\n\nimport StatisticsField from '../StatisticsField'\nimport useGetWidgetColors from './useGetWidgetColors'\n\nexport const DownlodSpeedWidget = ({ data }) => {\n const { t } = useTranslation()\n const { iconBGColor, valueBGColor } = useGetWidgetColors('downloadSpeed')\n\n return (\n \n )\n}\n\nexport const UploadSpeedWidget = ({ data }) => {\n const { t } = useTranslation()\n const { iconBGColor, valueBGColor } = useGetWidgetColors('uploadSpeed')\n\n return (\n \n )\n}\n\nexport const PeersWidget = ({ data }) => {\n const { t } = useTranslation()\n const { iconBGColor, valueBGColor } = useGetWidgetColors('peers')\n\n return (\n \n )\n}\n\nexport const PiecesCountWidget = ({ data }) => {\n const { t } = useTranslation()\n const { iconBGColor, valueBGColor } = useGetWidgetColors('piecesCount')\n\n return (\n \n )\n}\n\nexport const PiecesLengthWidget = ({ data }) => {\n const { t } = useTranslation()\n const { iconBGColor, valueBGColor } = useGetWidgetColors('piecesLength')\n\n return (\n \n )\n}\n\nexport const StatusWidget = ({ stat }) => {\n const { t } = useTranslation()\n\n const values = {\n [GETTING_INFO]: t('TorrentGettingInfo'),\n [PRELOAD]: t('TorrentPreload'),\n [WORKING]: t('TorrentWorking'),\n [CLOSED]: t('TorrentClosed'),\n [IN_DB]: t('TorrentInDb'),\n }\n const { iconBGColor, valueBGColor } = useGetWidgetColors('status')\n\n return (\n \n )\n}\n\nexport const SizeWidget = ({ data }) => {\n const { t } = useTranslation()\n const { iconBGColor, valueBGColor } = useGetWidgetColors('size')\n\n return (\n \n )\n}\n","export const [GETTING_INFO, PRELOAD, WORKING, CLOSED, IN_DB] = [1, 2, 3, 4, 5]\n","import { useTranslation } from 'react-i18next'\n\nimport { SectionTitle, WidgetWrapper } from '../style'\nimport { DetailedViewCacheSection, DetailedViewWidgetSection } from './style'\nimport TorrentCache from '../TorrentCache'\nimport {\n SizeWidget,\n PiecesLengthWidget,\n StatusWidget,\n PiecesCountWidget,\n PeersWidget,\n UploadSpeedWidget,\n DownlodSpeedWidget,\n} from '../widgets'\n\nexport default function DetailedView({\n downloadSpeed,\n uploadSpeed,\n torrent,\n torrentSize,\n PiecesCount,\n PiecesLength,\n stat,\n cache,\n}) {\n const { t } = useTranslation()\n\n return (\n <>\n \n {t('Data')}\n\n \n \n \n \n \n \n \n \n \n \n\n \n \n {t('Cache')}\n \n \n \n \n )\n}\n","import styled, { css } from 'styled-components'\n\nexport const MainSectionButtonGroup = styled.div`\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 20px;\n\n :not(:last-child) {\n margin-bottom: 30px;\n }\n\n @media (max-width: 1580px) {\n grid-template-columns: repeat(2, 1fr);\n }\n\n @media (max-width: 880px) {\n grid-template-columns: 1fr;\n }\n`\n\nexport const SmallLabel = styled.div`\n ${({\n mb,\n theme: {\n torrentFunctions: { fontColor },\n },\n }) => css`\n ${mb && `margin-bottom: ${mb}px`};\n font-size: 20px;\n font-weight: 300;\n line-height: 1;\n color: ${fontColor};\n\n @media (max-width: 800px) {\n font-size: 18px;\n ${mb && `margin-bottom: ${mb / 1.5}px`};\n }\n `}\n`\n","import axios from 'axios'\nimport { memo } from 'react'\nimport { playlistTorrHost, torrentsHost, viewedHost } from 'utils/Hosts'\nimport { CopyToClipboard } from 'react-copy-to-clipboard'\nimport { Button } from '@material-ui/core'\nimport ptt from 'parse-torrent-title'\nimport { useTranslation } from 'react-i18next'\n\nimport { SmallLabel, MainSectionButtonGroup } from './style'\nimport { SectionSubName } from '../style'\n\nconst TorrentFunctions = memo(\n ({ hash, viewedFileList, playableFileList, name, title, setViewedFileList }) => {\n const { t } = useTranslation()\n const latestViewedFileId = viewedFileList?.[viewedFileList?.length - 1]\n const latestViewedFile = playableFileList?.find(({ id }) => id === latestViewedFileId)?.path\n const isOnlyOnePlayableFile = playableFileList?.length === 1\n const latestViewedFileData = latestViewedFile && ptt.parse(latestViewedFile)\n const dropTorrent = () => axios.post(torrentsHost(), { action: 'drop', hash })\n const removeTorrentViews = () =>\n axios.post(viewedHost(), { action: 'rem', hash, file_index: -1 }).then(() => setViewedFileList())\n const fullPlaylistLink = `${playlistTorrHost()}/${encodeURIComponent(name || title || 'file')}.m3u?link=${hash}&m3u`\n const partialPlaylistLink = `${fullPlaylistLink}&fromlast`\n\n return (\n <>\n {!isOnlyOnePlayableFile && !!viewedFileList?.length && (\n <>\n {t('DownloadPlaylist')}\n \n {t('LatestFilePlayed')} {latestViewedFileData?.title}.\n {latestViewedFileData?.season && (\n <>\n {' '}\n {t('Season')}: {latestViewedFileData?.season}. {t('Episode')}: {latestViewedFileData?.episode}.\n \n )}\n \n\n \n \n \n \n\n \n \n \n \n \n )}\n {t('TorrentState')}\n \n \n \n \n {t('Info')}\n \n {(isOnlyOnePlayableFile || !viewedFileList?.length) && (\n \n \n \n )}\n \n \n \n \n \n )\n },\n () => true,\n)\n\nexport default TorrentFunctions\n","const getExt = filename => {\n const ext = filename.split('.').pop()\n if (ext === filename) return ''\n return ext.toLowerCase()\n}\nconst playableExtList = [\n // video\n '3g2',\n '3gp',\n 'aaf',\n 'asf',\n 'avchd',\n 'avi',\n 'drc',\n 'flv',\n 'iso',\n 'm2v',\n 'm2ts',\n 'm4p',\n 'm4v',\n 'mkv',\n 'mng',\n 'mov',\n 'mp2',\n 'mp4',\n 'mpe',\n 'mpeg',\n 'mpg',\n 'mpv',\n 'mxf',\n 'nsv',\n 'ogg',\n 'ogv',\n 'ts',\n 'qt',\n 'rm',\n 'rmvb',\n 'roq',\n 'svi',\n 'vob',\n 'webm',\n 'wmv',\n 'yuv',\n // audio\n 'aac',\n 'aiff',\n 'ape',\n 'au',\n 'flac',\n 'gsm',\n 'it',\n 'm3u',\n 'm4a',\n 'mid',\n 'mod',\n 'mp3',\n 'mpa',\n 'pls',\n 'ra',\n 's3m',\n 'sid',\n 'wav',\n 'wma',\n 'xm',\n]\n\n// eslint-disable-next-line import/prefer-default-export\nexport const isFilePlayable = fileName => playableExtList.includes(getExt(fileName))\n","import { NoImageIcon } from 'icons'\nimport { humanizeSize, removeRedundantCharacters } from 'utils/Utils'\nimport { useEffect, useState } from 'react'\nimport { Button, ButtonGroup } from '@material-ui/core'\nimport ptt from 'parse-torrent-title'\nimport axios from 'axios'\nimport { viewedHost } from 'utils/Hosts'\nimport { GETTING_INFO, IN_DB } from 'torrentStates'\nimport CircularProgress from '@material-ui/core/CircularProgress'\nimport { useTranslation } from 'react-i18next'\n\nimport { useUpdateCache, useGetSettings } from './customHooks'\nimport DialogHeader from './DialogHeader'\nimport TorrentCache from './TorrentCache'\nimport Table from './Table'\nimport DetailedView from './DetailedView'\nimport {\n DialogContentGrid,\n MainSection,\n Poster,\n SectionTitle,\n SectionSubName,\n WidgetWrapper,\n LoadingProgress,\n SectionHeader,\n CacheSection,\n TorrentFilesSection,\n Divider,\n} from './style'\nimport { DownlodSpeedWidget, UploadSpeedWidget, PeersWidget, SizeWidget, StatusWidget } from './widgets'\nimport TorrentFunctions from './TorrentFunctions'\nimport { isFilePlayable } from './helpers'\n\nconst Loader = () => (\n
\n \n
\n)\n\nexport default function DialogTorrentDetailsContent({ closeDialog, torrent }) {\n const { t } = useTranslation()\n const [isLoading, setIsLoading] = useState(true)\n const [isDetailedCacheView, setIsDetailedCacheView] = useState(false)\n const [viewedFileList, setViewedFileList] = useState()\n const [playableFileList, setPlayableFileList] = useState()\n const [seasonAmount, setSeasonAmount] = useState(null)\n const [selectedSeason, setSelectedSeason] = useState()\n\n const {\n poster,\n hash,\n title,\n name,\n stat,\n download_speed: downloadSpeed,\n upload_speed: uploadSpeed,\n torrent_size: torrentSize,\n file_stats: torrentFileList,\n } = torrent\n\n const cache = useUpdateCache(hash)\n const settings = useGetSettings(cache)\n\n const { Capacity, PiecesCount, PiecesLength, Filled } = cache\n\n useEffect(() => {\n if (playableFileList && seasonAmount === null) {\n const seasons = []\n playableFileList.forEach(({ path }) => {\n const currentSeason = ptt.parse(path).season\n if (currentSeason) {\n !seasons.includes(currentSeason) && seasons.push(currentSeason)\n }\n })\n seasons.length && setSelectedSeason(seasons[0])\n setSeasonAmount(seasons.sort((a, b) => a - b))\n }\n }, [playableFileList, seasonAmount])\n\n useEffect(() => {\n setPlayableFileList(torrentFileList?.filter(({ path }) => isFilePlayable(path)))\n }, [torrentFileList])\n\n useEffect(() => {\n const cacheLoaded = !!Object.entries(cache).length\n const torrentLoaded = stat !== GETTING_INFO && stat !== IN_DB\n\n if (!cacheLoaded && !isLoading) setIsLoading(true)\n if (cacheLoaded && isLoading && torrentLoaded) setIsLoading(false)\n }, [stat, cache, isLoading])\n\n useEffect(() => {\n // getting viewed file list\n axios.post(viewedHost(), { action: 'list', hash }).then(({ data }) => {\n if (data) {\n const lst = data.map(itm => itm.file_index).sort((a, b) => a - b)\n setViewedFileList(lst)\n } else setViewedFileList()\n })\n }, [hash])\n\n const preloadPerc = settings?.PreloadCache\n const preloadSize = (Capacity / 100) * preloadPerc\n const bufferSize = preloadSize > 33554432 ? preloadSize : 33554432 // Not less than 32MB\n\n const getParsedTitle = () => {\n const newNameStringArr = []\n\n const torrentParsedName = name && ptt.parse(name)\n\n if (title !== name) {\n newNameStringArr.push(removeRedundantCharacters(title))\n } else if (torrentParsedName?.title) newNameStringArr.push(removeRedundantCharacters(torrentParsedName?.title))\n\n // These 2 checks are needed to get year and resolution from torrent name if title does not have this info\n if (torrentParsedName?.year && !newNameStringArr[0].includes(torrentParsedName?.year))\n newNameStringArr.push(torrentParsedName?.year)\n if (torrentParsedName?.resolution && !newNameStringArr[0].includes(torrentParsedName?.resolution))\n newNameStringArr.push(torrentParsedName?.resolution)\n\n const newNameString = newNameStringArr.join('. ')\n\n // removeRedundantCharacters is returning \"..\" if it was \"...\"\n const lastDotShouldBeAdded =\n newNameString[newNameString.length - 1] === '.' && newNameString[newNameString.length - 2] === '.'\n\n return lastDotShouldBeAdded ? `${newNameString}.` : newNameString\n }\n\n return (\n <>\n setIsDetailedCacheView(false) })}\n />\n\n \n {isLoading ? (\n \n ) : isDetailedCacheView ? (\n \n ) : (\n \n \n {poster ? poster : }\n\n
\n {title && name !== title ? (\n getParsedTitle().length > 90 ? (\n <>\n {ptt.parse(name).title}\n {getParsedTitle()}\n \n ) : (\n <>\n {getParsedTitle()}\n {ptt.parse(name || '')?.title}\n \n )\n ) : (\n {getParsedTitle()}\n )}\n\n \n \n \n \n \n \n \n\n \n\n \n
\n
\n\n \n \n {t('Buffer')}\n {bufferSize <= 33554432 && {t('BufferNote')}}\n \n \n\n \n setIsDetailedCacheView(true)}\n >\n {t('DetailedCacheView.button')}\n \n \n\n \n {t('TorrentContent')}\n\n {seasonAmount?.length > 1 && (\n <>\n {t('SelectSeason')}\n \n {seasonAmount.map(season => (\n setSelectedSeason(season)}\n >\n {season}\n \n ))}\n \n\n \n {t('Season')} {selectedSeason}\n \n \n )}\n\n \n \n
\n )}\n
\n \n )\n}\n","import { useTranslation } from 'react-i18next'\n\nexport default () => {\n const { i18n } = useTranslation()\n const currentLanguage = i18n.language === 'en-US' || i18n.language === 'en' ? 'en' : i18n.language\n\n return [currentLanguage, lang => i18n.changeLanguage(lang)]\n}\n","import { useEffect, useRef } from 'react'\n\nexport default function usePreviousState(value) {\n const ref = useRef(value)\n\n useEffect(() => {\n ref.current = value\n }, [value])\n\n return ref.current\n}\n","import styled, { css } from 'styled-components'\n\nexport const Header = styled.div`\n ${({ theme: { primary } }) => css`\n background: ${primary};\n color: rgba(0, 0, 0, 0.87);\n font-size: 20px;\n color: #fff;\n font-weight: 600;\n box-shadow: 0px 2px 4px -1px rgb(0 0 0 / 20%), 0px 4px 5px 0px rgb(0 0 0 / 14%), 0px 1px 10px 0px rgb(0 0 0 / 12%);\n padding: 15px 24px;\n position: relative;\n `}\n`\n\nexport const ButtonWrapper = styled.div`\n padding: 20px;\n display: flex;\n justify-content: flex-end;\n\n > :not(:last-child) {\n margin-right: 10px;\n }\n`\n","import axios from 'axios'\nimport parseTorrent from 'parse-torrent'\nimport ptt from 'parse-torrent-title'\n\nexport const getMoviePosters = (movieName, language = 'en') => {\n const url = 'http://api.themoviedb.org/3/search/multi'\n\n return axios\n .get(url, {\n params: {\n api_key: process.env.REACT_APP_TMDB_API_KEY,\n language,\n include_image_language: `${language},null,en`,\n query: movieName,\n },\n })\n .then(({ data: { results } }) =>\n results.filter(el => el.poster_path).map(el => `https://image.tmdb.org/t/p/w300${el.poster_path}`),\n )\n .catch(() => null)\n}\n\nexport const checkImageURL = async url => {\n if (!url || !url.match(/.(jpg|jpeg|png|gif)$/i)) return false\n\n try {\n await fetch(url, { mode: 'no-cors' })\n return true\n } catch (e) {\n return false\n }\n}\n\nconst magnetRegex = /^magnet:\\?xt=urn:[a-z0-9].*/i\nexport const hashRegex = /^\\b[0-9a-f]{32}\\b$|^\\b[0-9a-f]{40}\\b$|^\\b[0-9a-f]{64}\\b$/i\nconst torrentRegex = /^.*\\.(torrent)$/i\nconst linkRegex = /^(http(s?)):\\/\\/.*/i\n\nexport const checkTorrentSource = source =>\n source.match(hashRegex) !== null ||\n source.match(magnetRegex) !== null ||\n source.match(torrentRegex) !== null ||\n source.match(linkRegex) !== null\n\nexport const parseTorrentTitle = (parsingSource, callback) => {\n parseTorrent.remote(parsingSource, (err, { name, files } = {}) => {\n if (!name || err) return callback({ parsedTitle: null, originalName: null })\n\n const torrentName = ptt.parse(name).title\n const nameOfFileInsideTorrent = files ? ptt.parse(files[0].name).title : null\n\n let newTitle = torrentName\n if (nameOfFileInsideTorrent) {\n // taking shorter title because in most cases it is more accurate\n newTitle = torrentName.length < nameOfFileInsideTorrent.length ? torrentName : nameOfFileInsideTorrent\n }\n\n callback({ parsedTitle: newTitle, originalName: name })\n })\n}\n","import { Button } from '@material-ui/core'\nimport styled, { css } from 'styled-components'\n\nexport const Content = styled.div`\n ${({\n isEditMode,\n theme: {\n addDialog: { gradientStartColor, gradientEndColor, fontColor },\n },\n }) => css`\n height: 550px;\n background: linear-gradient(145deg, ${gradientStartColor}, ${gradientEndColor});\n flex: 1;\n display: grid;\n grid-template-columns: repeat(${isEditMode ? '1' : '2'}, 1fr);\n border-bottom: 1px solid rgba(0, 0, 0, 0.12);\n overflow: auto;\n color: ${fontColor};\n\n @media (max-width: 540px) {\n ${'' /* Just for bug fixing on small screens */}\n overflow: scroll;\n }\n\n @media (max-width: 930px) {\n grid-template-columns: 1fr;\n }\n\n @media (max-width: 500px) {\n align-content: start;\n }\n `}\n`\n\nexport const RightSide = styled.div`\n padding: 0 20px 20px 20px;\n`\n\nexport const RightSideContainer = styled.div`\n ${({\n isHidden,\n notificationMessage,\n isError,\n theme: {\n addDialog: { notificationErrorBGColor, notificationSuccessBGColor },\n },\n }) => css`\n height: 530px;\n\n ${notificationMessage &&\n css`\n position: relative;\n white-space: nowrap;\n\n :before {\n font-size: 20px;\n font-weight: 300;\n content: '${notificationMessage}';\n display: grid;\n place-items: center;\n background: ${isError ? notificationErrorBGColor : notificationSuccessBGColor};\n padding: 10px 15px;\n position: absolute;\n top: 52%;\n left: 50%;\n transform: translate(-50%, -50%);\n border-radius: 5px;\n }\n `};\n\n ${isHidden &&\n css`\n display: none;\n `};\n\n @media (max-width: 500px) {\n height: 170px;\n }\n `}\n`\nexport const LeftSide = styled.div`\n display: flex;\n flex-direction: column;\n border-right: 1px solid rgba(0, 0, 0, 0.12);\n`\n\nexport const LeftSideBottomSectionBasicStyles = css`\n transition: transform 0.3s;\n padding: 20px;\n height: 100%;\n display: grid;\n`\n\nexport const LeftSideBottomSectionNoFile = styled.div`\n ${LeftSideBottomSectionBasicStyles}\n border: 4px dashed rgba(0,0,0,0.1);\n text-align: center;\n\n ${({ isDragActive }) => isDragActive && `border: 4px dashed green`};\n\n justify-items: center;\n grid-template-rows: 130px 1fr;\n cursor: pointer;\n\n :hover {\n background-color: rgba(0, 0, 0, 0.04);\n svg {\n transform: translateY(-4%);\n }\n }\n\n @media (max-width: 930px) {\n border: 4px dashed transparent;\n height: 400px;\n place-items: center;\n grid-template-rows: 40% 1fr;\n }\n\n @media (max-width: 500px) {\n height: 170px;\n grid-template-rows: 1fr;\n\n > div:first-of-type {\n display: none;\n }\n }\n`\n\nexport const LeftSideBottomSectionFileSelected = styled.div`\n ${LeftSideBottomSectionBasicStyles}\n place-items: center;\n\n @media (max-width: 930px) {\n height: 400px;\n }\n\n @media (max-width: 500px) {\n height: 170px;\n }\n`\n\nexport const TorrentIconWrapper = styled.div`\n position: relative;\n`\n\nexport const CancelIconWrapper = styled.div`\n position: absolute;\n top: -9px;\n left: 10px;\n cursor: pointer;\n\n > svg {\n transition: all 0.3s;\n fill: rgba(0, 0, 0, 0.7);\n\n :hover {\n fill: rgba(0, 0, 0, 0.6);\n }\n }\n`\n\nexport const IconWrapper = styled.div`\n display: grid;\n justify-items: center;\n align-content: start;\n gap: 10px;\n align-self: start;\n\n svg {\n transition: all 0.3s;\n }\n`\n\nexport const LeftSideTopSection = styled.div`\n ${({\n active,\n theme: {\n addDialog: { gradientStartColor },\n },\n }) => css`\n background: ${gradientStartColor};\n padding: 0 20px 20px 20px;\n transition: all 0.3s;\n\n ${active && 'box-shadow: 0 8px 10px -9px rgba(0, 0, 0, 0.5)'};\n `}\n`\n\nexport const PosterWrapper = styled.div`\n margin-top: 20px;\n display: grid;\n grid-template-columns: max-content 1fr;\n grid-template-rows: 300px max-content;\n column-gap: 5px;\n position: relative;\n margin-bottom: 20px;\n\n grid-template-areas:\n 'poster suggestions'\n 'clear empty';\n\n @media (max-width: 540px) {\n grid-template-columns: 1fr;\n gap: 5px 0;\n justify-items: center;\n grid-template-areas:\n 'poster'\n 'clear'\n 'suggestions';\n }\n`\n\nexport const PosterSuggestions = styled.div`\n display: grid;\n grid-area: suggestions;\n grid-auto-flow: column;\n grid-template-columns: repeat(3, max-content);\n grid-template-rows: repeat(4, max-content);\n gap: 5px;\n\n @media (max-width: 540px) {\n grid-auto-flow: row;\n grid-template-columns: repeat(5, max-content);\n }\n @media (max-width: 375px) {\n grid-template-columns: repeat(4, max-content);\n }\n`\n\nexport const PosterSuggestionsItem = styled.div`\n cursor: pointer;\n width: 71px;\n height: 71px;\n\n @media (max-width: 430px) {\n width: 60px;\n height: 60px;\n }\n\n @media (max-width: 375px) {\n width: 71px;\n height: 71px;\n }\n\n @media (max-width: 355px) {\n width: 60px;\n height: 60px;\n }\n\n img {\n transition: all 0.3s;\n border-radius: 5px;\n width: 100%;\n height: 100%;\n object-fit: cover;\n\n :hover {\n filter: brightness(130%);\n }\n }\n`\n\nexport const Poster = styled.div`\n ${({\n poster,\n theme: {\n addDialog: { posterBGColor },\n },\n }) => css`\n border-radius: 5px;\n overflow: hidden;\n width: 200px;\n grid-area: poster;\n\n ${poster\n ? css`\n img {\n width: 200px;\n object-fit: cover;\n border-radius: 5px;\n height: 100%;\n }\n `\n : css`\n display: grid;\n place-items: center;\n background: ${posterBGColor};\n\n svg {\n transform: scale(1.5) translateY(-3px);\n }\n `}\n `}\n`\n\nexport const ClearPosterButton = styled(Button)`\n grid-area: clear;\n justify-self: center;\n transform: translateY(-50%);\n position: absolute;\n ${({ showbutton }) => !showbutton && 'display: none'};\n\n @media (max-width: 540px) {\n transform: translateY(-140%);\n }\n`\n\nexport const PosterLanguageSwitch = styled.div`\n ${({\n showbutton,\n theme: {\n addDialog: { languageSwitchBGColor, languageSwitchFontColor },\n },\n }) => css`\n grid-area: poster;\n z-index: 5;\n position: absolute;\n top: 0;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 30px;\n height: 30px;\n background: ${languageSwitchBGColor};\n border-radius: 50%;\n display: grid;\n place-items: center;\n color: ${languageSwitchFontColor};\n font-weight: 600;\n cursor: pointer;\n transition: all 0.3s;\n\n ${!showbutton && 'display: none'};\n\n :hover {\n filter: brightness(1.1);\n }\n `}\n`\n","import { useTranslation } from 'react-i18next'\nimport { NoImageIcon } from 'icons'\nimport { IconButton, InputAdornment, TextField, useTheme } from '@material-ui/core'\nimport { CheckBox as CheckBoxIcon } from '@material-ui/icons'\n\nimport {\n ClearPosterButton,\n PosterLanguageSwitch,\n RightSide,\n Poster,\n PosterSuggestions,\n PosterSuggestionsItem,\n PosterWrapper,\n RightSideContainer,\n} from './style'\nimport { checkImageURL } from './helpers'\n\nexport default function RightSideComponent({\n setTitle,\n setPosterUrl,\n setIsPosterUrlCorrect,\n setIsUserInteractedWithPoster,\n setPosterList,\n isTorrentSourceCorrect,\n isHashAlreadyExists,\n title,\n parsedTitle,\n posterUrl,\n isPosterUrlCorrect,\n posterList,\n currentLang,\n posterSearchLanguage,\n setPosterSearchLanguage,\n posterSearch,\n removePoster,\n torrentSource,\n originalTorrentTitle,\n updateTitleFromSource,\n isCustomTitleEnabled,\n setIsCustomTitleEnabled,\n isEditMode,\n}) {\n const { t } = useTranslation()\n const primary = useTheme().palette.primary.main\n\n const handleTitleChange = ({ target: { value } }) => setTitle(value)\n const handlePosterUrlChange = ({ target: { value } }) => {\n setPosterUrl(value)\n checkImageURL(value).then(setIsPosterUrlCorrect)\n setIsUserInteractedWithPoster(!!value)\n setPosterList()\n }\n const userChangesPosterUrl = url => {\n setPosterUrl(url)\n checkImageURL(url).then(setIsPosterUrlCorrect)\n setIsUserInteractedWithPoster(true)\n }\n\n return (\n \n \n {originalTorrentTitle ? (\n <>\n \n setIsCustomTitleEnabled(true)}\n onBlur={({ target: { value } }) => !value && setIsCustomTitleEnabled(false)}\n value={title}\n margin='dense'\n label={t('AddDialog.CustomTorrentTitle')}\n type='text'\n fullWidth\n helperText={t('AddDialog.CustomTorrentTitleHelperText')}\n InputProps={{\n endAdornment: (\n \n {\n setTitle('')\n setIsCustomTitleEnabled(!isCustomTitleEnabled)\n updateTitleFromSource()\n setIsUserInteractedWithPoster(false)\n }}\n >\n \n \n \n ),\n }}\n />\n \n ) : (\n \n )}\n \n\n \n \n {isPosterUrlCorrect ? poster : }\n \n\n \n {posterList\n ?.filter(url => url !== posterUrl)\n .slice(0, 12)\n .map(url => (\n userChangesPosterUrl(url)} key={url}>\n poster\n \n ))}\n \n\n {currentLang !== 'en' && (\n {\n const newLanguage = posterSearchLanguage === 'en' ? 'ru' : 'en'\n setPosterSearchLanguage(newLanguage)\n posterSearch(isCustomTitleEnabled ? title : originalTorrentTitle ? parsedTitle : title, newLanguage, {\n shouldRefreshMainPoster: true,\n })\n }}\n showbutton={+isPosterUrlCorrect}\n color='primary'\n variant='contained'\n size='small'\n >\n {posterSearchLanguage === 'en' ? 'EN' : 'RU'}\n \n )}\n\n {\n removePoster()\n setIsUserInteractedWithPoster(true)\n }}\n color='primary'\n variant='contained'\n size='small'\n >\n {t('Clear')}\n \n \n \n\n \n \n )\n}\n","import { useTranslation } from 'react-i18next'\nimport { useDropzone } from 'react-dropzone'\nimport { AddItemIcon, TorrentIcon } from 'icons'\nimport TextField from '@material-ui/core/TextField'\nimport { Cancel as CancelIcon } from '@material-ui/icons'\nimport { useState } from 'react'\n\nimport {\n CancelIconWrapper,\n IconWrapper,\n LeftSide,\n LeftSideBottomSectionFileSelected,\n LeftSideBottomSectionNoFile,\n LeftSideTopSection,\n TorrentIconWrapper,\n} from './style'\n\nexport default function LeftSideComponent({\n setIsUserInteractedWithPoster,\n setSelectedFile,\n torrentSource,\n setTorrentSource,\n selectedFile,\n}) {\n const { t } = useTranslation()\n\n const handleCapture = files => {\n const [file] = files\n if (!file) return\n\n setIsUserInteractedWithPoster(false)\n setSelectedFile(file)\n setTorrentSource(file.name)\n }\n\n const clearSelectedFile = () => {\n setSelectedFile()\n setTorrentSource('')\n }\n\n const [isTorrentSourceActive, setIsTorrentSourceActive] = useState(false)\n const { getRootProps, getInputProps, isDragActive } = useDropzone({ onDrop: handleCapture, accept: '.torrent' })\n\n const handleTorrentSourceChange = ({ target: { value } }) => setTorrentSource(value)\n\n return (\n \n \n setIsTorrentSourceActive(true)}\n onBlur={() => setIsTorrentSourceActive(false)}\n inputProps={{ autoComplete: 'off' }}\n disabled={!!selectedFile}\n />\n \n\n {selectedFile ? (\n \n \n \n\n \n \n \n \n \n ) : (\n \n \n
{t('AddDialog.AppendFile.Or')}
\n\n \n \n
{t('AddDialog.AppendFile.ClickOrDrag')}
\n
\n
\n )}\n
\n )\n}\n","import { useCallback, useEffect, useMemo, useState } from 'react'\nimport Button from '@material-ui/core/Button'\nimport Dialog from '@material-ui/core/Dialog'\nimport { torrentsHost, torrentUploadHost } from 'utils/Hosts'\nimport axios from 'axios'\nimport { useTranslation } from 'react-i18next'\nimport debounce from 'lodash/debounce'\nimport useChangeLanguage from 'utils/useChangeLanguage'\nimport { useMediaQuery } from '@material-ui/core'\nimport CircularProgress from '@material-ui/core/CircularProgress'\nimport usePreviousState from 'utils/usePreviousState'\nimport { useQuery } from 'react-query'\nimport { getTorrents } from 'utils/Utils'\nimport parseTorrent from 'parse-torrent'\nimport { ButtonWrapper, Header } from 'style/DialogStyles'\n\nimport { checkImageURL, getMoviePosters, checkTorrentSource, parseTorrentTitle } from './helpers'\nimport { Content } from './style'\nimport RightSideComponent from './RightSideComponent'\nimport LeftSideComponent from './LeftSideComponent'\n\nexport default function AddDialog({\n handleClose,\n hash: originalHash,\n title: originalTitle,\n name: originalName,\n poster: originalPoster,\n}) {\n const { t } = useTranslation()\n const isEditMode = !!originalHash\n const [torrentSource, setTorrentSource] = useState(originalHash || '')\n const [title, setTitle] = useState(originalTitle || '')\n const [originalTorrentTitle, setOriginalTorrentTitle] = useState('')\n const [parsedTitle, setParsedTitle] = useState('')\n const [posterUrl, setPosterUrl] = useState(originalPoster || '')\n const [isPosterUrlCorrect, setIsPosterUrlCorrect] = useState(false)\n const [isTorrentSourceCorrect, setIsTorrentSourceCorrect] = useState(false)\n const [isHashAlreadyExists, setIsHashAlreadyExists] = useState(false)\n const [posterList, setPosterList] = useState()\n const [isUserInteractedWithPoster, setIsUserInteractedWithPoster] = useState(isEditMode)\n const [currentLang] = useChangeLanguage()\n const [selectedFile, setSelectedFile] = useState()\n const [posterSearchLanguage, setPosterSearchLanguage] = useState(currentLang === 'ru' ? 'ru' : 'en')\n const [isSaving, setIsSaving] = useState(false)\n const [skipDebounce, setSkipDebounce] = useState(false)\n const [isCustomTitleEnabled, setIsCustomTitleEnabled] = useState(false)\n const [currentSourceHash, setCurrentSourceHash] = useState()\n\n const { data: torrents } = useQuery('torrents', getTorrents, { retry: 1, refetchInterval: 1000 })\n\n useEffect(() => {\n // getting hash from added torrent source\n parseTorrent.remote(selectedFile || torrentSource, (_, { infoHash } = {}) => setCurrentSourceHash(infoHash))\n }, [selectedFile, torrentSource])\n\n useEffect(() => {\n // checking if torrent already exists in DB\n if (!setCurrentSourceHash) return\n\n const allHashes = torrents.map(({ hash }) => hash)\n setIsHashAlreadyExists(allHashes.includes(currentSourceHash))\n }, [currentSourceHash, torrents])\n\n useEffect(() => {\n // closing dialog when torrent successfully added in DB\n if (!isSaving) return\n\n const allHashes = torrents.map(({ hash }) => hash)\n allHashes.includes(currentSourceHash) && handleClose()\n }, [isSaving, torrents, currentSourceHash, handleClose])\n\n const fullScreen = useMediaQuery('@media (max-width:930px)')\n\n const updateTitleFromSource = useCallback(() => {\n parseTorrentTitle(selectedFile || torrentSource, ({ parsedTitle, originalName }) => {\n if (!originalName) return\n\n setSkipDebounce(true)\n setTitle('')\n setIsCustomTitleEnabled(false)\n setOriginalTorrentTitle(originalName)\n setParsedTitle(parsedTitle)\n })\n }, [selectedFile, torrentSource])\n\n useEffect(() => {\n if (!selectedFile && !torrentSource) {\n setTitle('')\n setOriginalTorrentTitle('')\n setParsedTitle('')\n setIsCustomTitleEnabled(false)\n setPosterList()\n removePoster()\n setIsUserInteractedWithPoster(false)\n }\n }, [selectedFile, torrentSource])\n\n const removePoster = () => {\n setIsPosterUrlCorrect(false)\n setPosterUrl('')\n }\n\n useEffect(() => {\n if (originalHash) {\n checkImageURL(posterUrl).then(correctImage => {\n correctImage ? setIsPosterUrlCorrect(true) : removePoster()\n })\n }\n // This is needed only on mount. Do not remove line below\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const posterSearch = useMemo(\n () =>\n (movieName, language, { shouldRefreshMainPoster = false } = {}) => {\n if (!movieName) {\n setPosterList()\n removePoster()\n return\n }\n\n getMoviePosters(movieName, language).then(urlList => {\n if (urlList) {\n setPosterList(urlList)\n if (!shouldRefreshMainPoster && isUserInteractedWithPoster) return\n\n const [firstPoster] = urlList\n checkImageURL(firstPoster).then(correctImage => {\n if (correctImage) {\n setIsPosterUrlCorrect(true)\n setPosterUrl(firstPoster)\n } else removePoster()\n })\n } else {\n setPosterList()\n if (isUserInteractedWithPoster) return\n\n removePoster()\n }\n })\n },\n [isUserInteractedWithPoster],\n )\n\n const delayedPosterSearch = useMemo(() => debounce(posterSearch, 700), [posterSearch])\n\n const prevTorrentSourceState = usePreviousState(torrentSource)\n\n useEffect(() => {\n const isCorrectSource = checkTorrentSource(torrentSource)\n if (!isCorrectSource) return setIsTorrentSourceCorrect(false)\n\n setIsTorrentSourceCorrect(true)\n\n // if torrentSource is updated then we are getting title from the source\n const torrentSourceChanged = torrentSource !== prevTorrentSourceState\n if (!torrentSourceChanged) return\n\n updateTitleFromSource()\n }, [prevTorrentSourceState, selectedFile, torrentSource, updateTitleFromSource])\n\n const prevTitleState = usePreviousState(title)\n\n useEffect(() => {\n // if title exists and title was changed then search poster.\n const titleChanged = title !== prevTitleState\n if (!titleChanged && !parsedTitle) return\n\n if (skipDebounce) {\n posterSearch(title || parsedTitle, posterSearchLanguage)\n setSkipDebounce(false)\n } else if (!title) {\n delayedPosterSearch.cancel()\n\n if (parsedTitle) {\n posterSearch(parsedTitle, posterSearchLanguage)\n } else {\n !isUserInteractedWithPoster && removePoster()\n }\n } else {\n delayedPosterSearch(title, posterSearchLanguage)\n }\n }, [\n title,\n parsedTitle,\n prevTitleState,\n delayedPosterSearch,\n posterSearch,\n posterSearchLanguage,\n skipDebounce,\n isUserInteractedWithPoster,\n ])\n\n const handleSave = () => {\n setIsSaving(true)\n\n if (isEditMode) {\n axios\n .post(torrentsHost(), {\n action: 'set',\n hash: originalHash,\n title: title || originalName,\n poster: posterUrl,\n })\n .finally(handleClose)\n } else if (selectedFile) {\n // file save\n const data = new FormData()\n data.append('save', 'true')\n data.append('file', selectedFile)\n title && data.append('title', title)\n posterUrl && data.append('poster', posterUrl)\n axios.post(torrentUploadHost(), data).catch(handleClose)\n } else {\n // link save\n axios\n .post(torrentsHost(), { action: 'add', link: torrentSource, title, poster: posterUrl, save_to_db: true })\n .catch(handleClose)\n }\n }\n\n return (\n \n
{t(isEditMode ? 'EditTorrent' : 'AddNewTorrent')}
\n\n \n {!isEditMode && (\n \n )}\n\n \n \n\n \n \n\n \n {isSaving ? : t(isEditMode ? 'Save' : 'Add')}\n \n \n
\n )\n}\n","import styled, { css } from 'styled-components'\n\nexport const TorrentCard = styled.div`\n ${({\n theme: {\n torrentCard: { cardPrimaryColor },\n },\n }) => css`\n border-radius: 5px;\n display: grid;\n grid-template-columns: 120px 260px 1fr;\n grid-template-rows: 180px;\n grid-template-areas: 'poster description buttons';\n gap: 10px;\n padding: 10px;\n background: ${cardPrimaryColor};\n box-shadow: 0px 2px 4px -1px rgb(0 0 0 / 20%), 0px 4px 5px 0px rgb(0 0 0 / 14%), 0px 1px 10px 0px rgb(0 0 0 / 12%);\n\n @media (max-width: 1260px), (max-height: 500px) {\n grid-template-areas:\n 'poster description'\n 'buttons buttons';\n\n grid-template-columns: 70px 1fr;\n grid-template-rows: 110px max-content;\n }\n\n @media (max-width: 770px) {\n grid-template-columns: 60px 1fr;\n grid-template-rows: 90px max-content;\n }\n `}\n`\n\nexport const TorrentCardPoster = styled.div`\n grid-area: poster;\n border-radius: 5px;\n overflow: hidden;\n text-align: center;\n\n ${({\n isPoster,\n theme: {\n torrentCard: { cardSecondaryColor, accentCardColor },\n },\n }) =>\n isPoster\n ? css`\n img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 5px;\n }\n `\n : css`\n display: grid;\n place-items: center;\n background: ${cardSecondaryColor};\n border: 1px solid ${accentCardColor};\n\n svg {\n transform: translateY(-3px);\n }\n `};\n\n @media (max-width: 1260px), (max-height: 500px) {\n svg {\n width: 50%;\n }\n }\n`\n\nexport const TorrentCardButtons = styled.div`\n grid-area: buttons;\n display: grid;\n gap: 10px;\n\n @media (max-width: 1260px), (max-height: 500px) {\n grid-template-columns: repeat(4, 1fr);\n }\n\n @media (max-width: 340px) {\n gap: 5px;\n }\n`\nexport const TorrentCardDescription = styled.div`\n ${({\n theme: {\n torrentCard: { cardSecondaryColor, accentCardColor },\n },\n }) => css`\n grid-area: description;\n background: ${cardSecondaryColor};\n border-radius: 5px;\n padding: 5px;\n display: grid;\n grid-template-rows: 55% 1fr;\n gap: 10px;\n\n @media (max-width: 770px) {\n grid-template-rows: 60% 1fr;\n gap: 3px;\n }\n\n .description-title-wrapper {\n display: flex;\n flex-direction: column;\n }\n\n .description-section-name {\n text-transform: uppercase;\n font-size: 10px;\n font-weight: 600;\n letter-spacing: 0.4px;\n color: ${accentCardColor};\n\n @media (max-width: 770px) {\n font-size: 0.4rem;\n }\n }\n\n .description-torrent-title {\n overflow: auto;\n word-break: break-all;\n }\n\n .description-statistics-wrapper {\n display: grid;\n grid-template-columns: 80px 80px 1fr;\n align-self: end;\n\n @media (max-width: 1260px), (max-height: 500px) {\n grid-template-columns: 70px 70px 1fr;\n }\n\n @media (max-width: 770px) {\n grid-template-columns: 65px 65px 1fr;\n }\n\n @media (max-width: 700px) {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n }\n }\n\n .description-statistics-element-wrapper {\n }\n\n .description-statistics-element-value {\n margin-left: 5px;\n margin-bottom: 10px;\n word-break: break-all;\n\n @media (max-width: 1260px), (max-height: 500px) {\n font-size: 0.7rem;\n margin-bottom: 0;\n margin-left: 0;\n }\n }\n\n .description-torrent-title,\n .description-statistics-element-value {\n @media (max-width: 770px) {\n font-size: 0.6rem;\n }\n\n @media (max-width: 410px) {\n font-size: 10px;\n }\n }\n `}\n`\n\nexport const StyledButton = styled.button`\n ${({\n theme: {\n torrentCard: { buttonBGColor, accentCardColor },\n },\n }) => css`\n border-radius: 5px;\n border: none;\n cursor: pointer;\n transition: 0.2s;\n display: flex;\n align-items: center;\n text-transform: uppercase;\n background: ${buttonBGColor};\n color: #fff;\n font-size: 0.9rem;\n letter-spacing: 0.009em;\n padding: 0 12px;\n svg {\n width: 20px;\n }\n\n :hover {\n background: ${accentCardColor};\n }\n\n > :first-child {\n margin-right: 10px;\n }\n\n @media (max-width: 1260px), (max-height: 500px) {\n padding: 7px 10px;\n justify-content: center;\n font-size: 0.8rem;\n\n svg {\n display: none;\n }\n }\n\n @media (max-width: 770px) {\n font-size: 0.7rem;\n }\n\n @media (max-width: 420px) {\n font-size: 0.6rem;\n padding: 7px 5px;\n }\n `}\n`\n","import { forwardRef, memo, useState } from 'react'\nimport {\n UnfoldMore as UnfoldMoreIcon,\n Edit as EditIcon,\n Close as CloseIcon,\n Delete as DeleteIcon,\n} from '@material-ui/icons'\nimport { getPeerString, humanizeSize, humanizeSpeed, removeRedundantCharacters } from 'utils/Utils'\nimport { torrentsHost } from 'utils/Hosts'\nimport { NoImageIcon } from 'icons'\nimport DialogTorrentDetailsContent from 'components/DialogTorrentDetailsContent'\nimport Dialog from '@material-ui/core/Dialog'\nimport Slide from '@material-ui/core/Slide'\nimport { Button, DialogActions, DialogTitle, useMediaQuery, useTheme } from '@material-ui/core'\nimport axios from 'axios'\nimport ptt from 'parse-torrent-title'\nimport { useTranslation } from 'react-i18next'\nimport AddDialog from 'components/Add/AddDialog'\n\nimport { StyledButton, TorrentCard, TorrentCardButtons, TorrentCardDescription, TorrentCardPoster } from './style'\n\nconst Transition = forwardRef((props, ref) => )\n\nconst Torrent = ({ torrent }) => {\n const { t } = useTranslation()\n const [isDetailedInfoOpened, setIsDetailedInfoOpened] = useState(false)\n const [isDeleteTorrentOpened, setIsDeleteTorrentOpened] = useState(false)\n\n const theme = useTheme()\n const fullScreen = useMediaQuery(theme.breakpoints.down('md'))\n\n const openDetailedInfo = () => setIsDetailedInfoOpened(true)\n const closeDetailedInfo = () => setIsDetailedInfoOpened(false)\n const openDeleteTorrentAlert = () => setIsDeleteTorrentOpened(true)\n const closeDeleteTorrentAlert = () => setIsDeleteTorrentOpened(false)\n\n const { title, name, poster, torrent_size: torrentSize, download_speed: downloadSpeed, hash } = torrent\n\n const dropTorrent = () => axios.post(torrentsHost(), { action: 'drop', hash })\n const deleteTorrent = () => axios.post(torrentsHost(), { action: 'rem', hash })\n\n const getParsedTitle = () => {\n const parse = key => ptt.parse(title || '')?.[key] || ptt.parse(name || '')?.[key]\n\n const titleStrings = []\n\n let parsedTitle = removeRedundantCharacters(parse('title'))\n const parsedYear = parse('year')\n const parsedResolution = parse('resolution')\n if (parsedTitle) titleStrings.push(parsedTitle)\n if (parsedYear) titleStrings.push(`(${parsedYear})`)\n if (parsedResolution) titleStrings.push(`[${parsedResolution}]`)\n parsedTitle = titleStrings.join(' ')\n return { parsedTitle }\n }\n const { parsedTitle } = getParsedTitle()\n\n const [isEditDialogOpen, setIsEditDialogOpen] = useState(false)\n const handleClickOpenEditDialog = () => setIsEditDialogOpen(true)\n const handleCloseEditDialog = () => setIsEditDialogOpen(false)\n\n return (\n <>\n \n \n {poster ? poster : }\n \n\n \n \n \n {t('Details')}\n \n\n \n \n {t('Edit')}\n \n\n dropTorrent(torrent)}>\n \n {t('Drop')}\n \n\n \n \n {t('Delete')}\n \n \n\n \n
\n
{t('Name')}
\n
{parsedTitle}
\n
\n\n
\n
\n
{t('Size')}
\n
{torrentSize > 0 && humanizeSize(torrentSize)}
\n
\n\n
\n
{t('Speed')}
\n
\n {downloadSpeed > 0 ? humanizeSpeed(downloadSpeed) : '---'}\n
\n
\n\n
\n
{t('Peers')}
\n
{getPeerString(torrent) || '---'}
\n
\n
\n
\n
\n\n \n \n \n\n \n {t('DeleteTorrent?')}\n \n \n\n {\n deleteTorrent(torrent)\n closeDeleteTorrentAlert()\n }}\n color='primary'\n autoFocus\n >\n {t('OK')}\n \n \n \n\n {isEditDialogOpen && (\n \n )}\n \n )\n}\n\nexport default memo(Torrent)\n","import { rgba } from 'polished'\nimport styled, { css } from 'styled-components'\n\nexport const AppWrapper = styled.div`\n ${({\n theme: {\n app: { appSecondaryColor },\n },\n }) => css`\n height: 100%;\n background: ${rgba(appSecondaryColor, 0.8)};\n display: grid;\n grid-template-columns: 60px 1fr;\n grid-template-rows: 60px 1fr;\n grid-template-areas:\n 'head head'\n 'side content';\n `}\n`\n\nexport const CenteredGrid = styled.div`\n height: 100%;\n display: grid;\n place-items: center;\n`\n\nexport const AppHeader = styled.div`\n ${({ theme: { primary } }) => css`\n background: ${primary};\n color: #fff;\n grid-area: head;\n display: grid;\n grid-auto-flow: column;\n align-items: center;\n grid-template-columns: repeat(2, max-content) 1fr;\n box-shadow: 0px 2px 4px -1px rgb(0 0 0 / 20%), 0px 4px 5px 0px rgb(0 0 0 / 14%), 0px 1px 10px 0px rgb(0 0 0 / 12%);\n padding: 0 16px;\n z-index: 3;\n `}\n`\nexport const AppSidebarStyle = styled.div`\n ${({\n isDrawerOpen,\n theme: {\n app: { appSecondaryColor, sidebarBGColor, sidebarFillColor },\n },\n }) => css`\n grid-area: side;\n width: ${isDrawerOpen ? '400%' : '100%'};\n z-index: 2;\n overflow-x: hidden;\n transition: width 195ms cubic-bezier(0.4, 0, 0.6, 1) 0ms;\n border-right: 1px solid ${rgba(appSecondaryColor, 0.12)};\n background: ${sidebarBGColor};\n color: ${sidebarFillColor};\n white-space: nowrap;\n\n svg {\n fill: ${sidebarFillColor};\n }\n `}\n`\nexport const TorrentListWrapper = styled.div`\n grid-area: content;\n padding: 20px;\n overflow: auto;\n\n display: grid;\n place-content: start;\n grid-template-columns: repeat(auto-fit, minmax(max-content, 570px));\n gap: 20px;\n\n @media (max-width: 1260px), (max-height: 500px) {\n padding: 10px;\n gap: 15px;\n grid-template-columns: repeat(3, 1fr);\n }\n\n @media (max-width: 1100px) {\n grid-template-columns: repeat(2, 1fr);\n }\n\n @media (max-width: 700px) {\n grid-template-columns: 1fr;\n }\n`\n\nexport const HeaderToggle = styled.div`\n ${({\n theme: {\n app: { headerToggleColor },\n },\n }) => css`\n cursor: pointer;\n border-radius: 50%;\n background: ${headerToggleColor};\n height: 35px;\n width: 35px;\n transition: all 0.2s;\n font-weight: 600;\n display: grid;\n place-items: center;\n color: #fff;\n\n :hover {\n background: ${rgba(headerToggleColor, 0.7)};\n }\n\n @media (max-width: 700px) {\n height: 28px;\n width: 28px;\n font-size: 12px;\n\n svg {\n width: 17px;\n }\n }\n `}\n`\n","import styled, { css } from 'styled-components'\n\nexport default styled.div`\n ${({ isButton }) => css`\n display: grid;\n place-items: center;\n padding: 20px 40px;\n border-radius: 5px;\n\n ${isButton &&\n css`\n background: #88cdaa;\n transition: 0.2s;\n cursor: pointer;\n\n :hover {\n background: #74c39c;\n }\n `}\n\n lord-icon {\n width: 200px;\n height: 200px;\n }\n\n .icon-label {\n font-size: 20px;\n }\n `}\n`\n","import { useTheme } from '@material-ui/core'\nimport { useTranslation } from 'react-i18next'\n\nimport IconWrapper from './style'\n\nexport default function NoServerConnection() {\n const { t } = useTranslation()\n const primary = useTheme().palette.primary.main\n\n return (\n \n \n
{t('Offline')}
\n
\n )\n}\n","import { useTheme } from '@material-ui/core'\nimport { useState } from 'react'\nimport { useTranslation } from 'react-i18next'\n\nimport AddDialog from '../Add/AddDialog'\nimport IconWrapper from './style'\n\nexport default function AddFirstTorrent() {\n const { t } = useTranslation()\n const [isDialogOpen, setIsDialogOpen] = useState(false)\n const handleClickOpen = () => setIsDialogOpen(true)\n const handleClose = () => setIsDialogOpen(false)\n const primary = useTheme().palette.primary.main\n\n return (\n <>\n handleClickOpen(true)} isButton>\n \n
{t('NoTorrentsAdded')}
\n
\n\n {isDialogOpen && }\n \n )\n}\n","import TorrentCard from 'components/TorrentCard'\nimport CircularProgress from '@material-ui/core/CircularProgress'\nimport { TorrentListWrapper, CenteredGrid } from 'components/App/style'\n\nimport NoServerConnection from './NoServerConnection'\nimport AddFirstTorrent from './AddFirstTorrent'\n\nexport default function TorrentList({ isOffline, isLoading, torrents }) {\n if (isLoading || isOffline || !torrents.length) {\n return (\n \n {isOffline ? (\n \n ) : isLoading ? (\n \n ) : (\n !torrents.length && \n )}\n \n )\n }\n\n return (\n \n {torrents.map(torrent => (\n \n ))}\n \n )\n}\n","import ListItem from '@material-ui/core/ListItem'\nimport Dialog from '@material-ui/core/Dialog'\nimport DialogTitle from '@material-ui/core/DialogTitle'\nimport DialogContent from '@material-ui/core/DialogContent'\nimport DialogActions from '@material-ui/core/DialogActions'\nimport List from '@material-ui/core/List'\nimport ButtonGroup from '@material-ui/core/ButtonGroup'\nimport Button from '@material-ui/core/Button'\nimport { useTranslation } from 'react-i18next'\n\nconst donateFrame =\n ''\n\nexport default function DonateDialog({ onClose }) {\n const { t } = useTranslation()\n\n return (\n \n {t('Donate')}\n \n \n \n \n \n \n \n \n \n {/* eslint-disable-next-line react/no-danger */}\n
\n \n \n \n\n \n \n \n
\n )\n}\n","import { useState } from 'react'\nimport Button from '@material-ui/core/Button'\nimport Snackbar from '@material-ui/core/Snackbar'\nimport IconButton from '@material-ui/core/IconButton'\nimport CreditCardIcon from '@material-ui/icons/CreditCard'\nimport CloseIcon from '@material-ui/icons/Close'\nimport { useTranslation } from 'react-i18next'\n\nimport DonateDialog from './DonateDialog'\n\nexport default function DonateSnackbar() {\n const { t } = useTranslation()\n const [open, setOpen] = useState(false)\n const [snackbarOpen, setSnackbarOpen] = useState(true)\n\n const disableSnackbar = () => {\n setSnackbarOpen(false)\n localStorage.setItem('snackbarIsClosed', true)\n }\n\n return (\n <>\n {open && setOpen(false)} />}\n\n \n {\n setOpen(true)\n disableSnackbar()\n }}\n >\n \n {t('Support')}\n \n\n \n \n \n \n }\n />\n \n )\n}\n","import { createGlobalStyle } from 'styled-components'\n\nexport default createGlobalStyle`\n *,\n *::before,\n *::after { \n margin: 0;\n padding: 0;\n box-sizing: inherit;\n }\n\n body { \n font-family: \"Open Sans\", sans-serif;\n box-sizing: border-box;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n letter-spacing: -0.1px;\n }\n\n button {\n font-family: \"Open Sans\", sans-serif;\n letter-spacing: -0.1px;\n }\n`\n","import { useState } from 'react'\nimport ListItemIcon from '@material-ui/core/ListItemIcon'\nimport LibraryAddIcon from '@material-ui/icons/LibraryAdd'\nimport ListItemText from '@material-ui/core/ListItemText'\nimport ListItem from '@material-ui/core/ListItem'\nimport { useTranslation } from 'react-i18next'\n\nimport AddDialog from './AddDialog'\n\nexport default function AddDialogButton({ isOffline, isLoading }) {\n const { t } = useTranslation()\n const [isDialogOpen, setIsDialogOpen] = useState(false)\n const handleClickOpen = () => setIsDialogOpen(true)\n const handleClose = () => setIsDialogOpen(false)\n\n return (\n
\n \n \n \n \n \n \n\n {isDialogOpen && }\n
\n )\n}\n","import styled, { css } from 'styled-components'\nimport { mainColors } from 'style/colors'\nimport { Header } from 'style/DialogStyles'\n\nexport const cacheBeforeReaderColor = '#b3dfc9'\nexport const cacheAfterReaderColor = mainColors.light.primary\n\nexport const SettingsHeader = styled(Header)`\n display: grid;\n grid-auto-flow: column;\n align-items: center;\n justify-content: space-between;\n\n @media (max-width: 340px) {\n grid-auto-flow: row;\n }\n`\n\nexport const FooterSection = styled.div`\n ${({\n theme: {\n settingsDialog: { footerBG },\n },\n }) => css`\n padding: 20px;\n display: grid;\n grid-auto-flow: column;\n justify-content: end;\n gap: 10px;\n align-items: center;\n background: ${footerBG};\n\n @media (max-width: 500px) {\n grid-auto-flow: row;\n justify-content: stretch;\n }\n `}\n`\nexport const Divider = styled.div`\n height: 1px;\n background-color: rgba(0, 0, 0, 0.12);\n margin: 30px 0;\n`\n\nexport const Content = styled.div`\n ${({\n isLoading,\n theme: {\n settingsDialog: { contentBG },\n },\n }) => css`\n background: ${contentBG};\n overflow: auto;\n flex: 1;\n\n ${isLoading &&\n css`\n min-height: 500px;\n display: grid;\n place-items: center;\n `}\n `}\n`\n\nexport const PreloadCacheValue = styled.div`\n ${({ color }) => css`\n display: grid;\n grid-template-columns: max-content 100px 1fr;\n gap: 10px;\n align-items: flex-start;\n\n :not(:last-child) {\n margin-bottom: 5px;\n }\n\n :before {\n content: '';\n background: ${color};\n width: 16px;\n height: 16px;\n border-radius: 50%;\n margin-top: 2px;\n }\n `}\n`\n\nexport const MainSettingsContent = styled.div`\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 40px;\n padding: 20px;\n\n @media (max-width: 930px) {\n grid-template-columns: 1fr;\n }\n`\nexport const SecondarySettingsContent = styled.div`\n padding: 20px;\n`\n\nexport const StorageButton = styled.div`\n ${({ small, selected }) => css`\n transition: 0.2s;\n cursor: default;\n text-align: center;\n\n ${!selected &&\n css`\n cursor: pointer;\n\n :hover {\n filter: brightness(0.8);\n }\n `}\n\n ${small\n ? css`\n display: grid;\n grid-template-columns: max-content 1fr;\n gap: 20px;\n align-items: center;\n justify-items: start;\n margin-bottom: 20px;\n `\n : css`\n display: grid;\n place-items: center;\n gap: 10px;\n `}\n `}\n`\n\nexport const StorageIconWrapper = styled.div`\n ${({ selected, small }) => css`\n width: ${small ? '60px' : '150px'};\n height: ${small ? '60px' : '150px'};\n border-radius: 50%;\n background: ${selected ? '#323637' : '#dee3e5'};\n\n svg {\n transform: rotate(-45deg) scale(0.75);\n }\n\n @media (max-width: 930px) {\n width: ${small ? '50px' : '90px'};\n height: ${small ? '50px' : '90px'};\n }\n `}\n`\n\nexport const CacheStorageSelector = styled.div`\n display: grid;\n grid-template-rows: max-content 1fr;\n grid-template-areas: 'label label';\n place-items: center;\n\n @media (max-width: 930px) {\n justify-content: start;\n column-gap: 30px;\n }\n`\n\nexport const SettingSectionLabel = styled.div`\n font-size: 25px;\n padding-bottom: 20px;\n\n small {\n display: block;\n font-size: 11px;\n }\n`\n\nexport const PreloadCachePercentage = styled.div.attrs(({ value }) => ({\n // this block is here according to styled-components recomendation about fast changable components\n style: {\n background: `linear-gradient(to right, ${cacheBeforeReaderColor} 0%, ${cacheBeforeReaderColor} ${value}%, ${cacheAfterReaderColor} ${value}%, ${cacheAfterReaderColor} 100%)`,\n },\n}))`\n ${({ label, preloadCachePercentage }) => css`\n border: 1px solid #323637;\n padding: 10px 20px;\n border-radius: 5px;\n color: #000;\n margin-bottom: 10px;\n position: relative;\n\n :before {\n content: '${label}';\n display: grid;\n place-items: center;\n font-size: 20px;\n }\n\n :after {\n content: '';\n width: ${preloadCachePercentage}%;\n height: 100%;\n background: #323637;\n position: absolute;\n bottom: 0;\n left: 0;\n border-radius: 4px;\n filter: opacity(0.15);\n }\n `}\n`\n","export default {\n AcceptPeerCon: true,\n CacheSize: 96,\n ReaderReadAHead: 95,\n UseDisk: false,\n UploadRateLimit: 0,\n TorrentsSavePath: '',\n ConnectionsLimit: 23,\n DisableDHT: false,\n DisablePEX: false,\n DisableTCP: false,\n DisableUPNP: false,\n DisableUTP: true,\n DisableUpload: false,\n DownloadRateLimit: 0,\n EnableDebug: false,\n EnableIPv6: false,\n ForceEncrypt: false,\n PeersListenPort: 0,\n PreloadCache: 0,\n RemoveCacheOnDrop: false,\n RetrackersMode: 1,\n TorrentDisconnectTimeout: 30,\n}\n","export const a11yProps = index => ({\n id: `full-width-tab-${index}`,\n 'aria-controls': `full-width-tabpanel-${index}`,\n})\n\nexport const TabPanel = ({ children, value, index, ...other }) => (\n \n)\n","import { Grid, OutlinedInput, Slider } from '@material-ui/core'\n\nexport default function SliderInput({\n isProMode,\n title,\n value,\n setValue,\n sliderMin,\n sliderMax,\n inputMin,\n inputMax,\n step = 1,\n onBlurCallback,\n}) {\n const onBlur = ({ target: { value } }) => {\n if (value < inputMin) return setValue(inputMin)\n if (value > inputMax) return setValue(inputMax)\n\n onBlurCallback && onBlurCallback(value)\n }\n\n const onInputChange = ({ target: { value } }) => setValue(value === '' ? '' : Number(value))\n const onSliderChange = (_, newValue) => setValue(newValue)\n\n return (\n <>\n
{title}
\n\n \n \n \n \n\n {isProMode && (\n \n \n \n )}\n \n \n )\n}\n","import { useTranslation } from 'react-i18next'\nimport { USBIcon, RAMIcon } from 'icons'\nimport { FormControlLabel, Switch } from '@material-ui/core'\nimport TextField from '@material-ui/core/TextField'\n\nimport {\n PreloadCacheValue,\n MainSettingsContent,\n StorageButton,\n StorageIconWrapper,\n CacheStorageSelector,\n SettingSectionLabel,\n PreloadCachePercentage,\n cacheBeforeReaderColor,\n cacheAfterReaderColor,\n} from './style'\nimport SliderInput from './SliderInput'\n\nconst CacheStorageLocationLabel = ({ style }) => {\n const { t } = useTranslation()\n\n return (\n \n {t('SettingsDialog.CacheStorageLocation')}\n {t('SettingsDialog.UseDiskDesc')}\n \n )\n}\n\nexport default function PrimarySettingsComponent({\n settings,\n inputForm,\n cachePercentage,\n preloadCachePercentage,\n cacheSize,\n isProMode,\n setCacheSize,\n setCachePercentage,\n setPreloadCachePercentage,\n updateSettings,\n}) {\n const { t } = useTranslation()\n const { UseDisk, TorrentsSavePath, RemoveCacheOnDrop } = settings || {}\n const preloadCacheSize = Math.round((cacheSize / 100) * preloadCachePercentage)\n\n return (\n \n
\n {t('SettingsDialog.CacheSettings')}\n\n \n\n \n
\n {100 - cachePercentage}% ({Math.round((cacheSize / 100) * (100 - cachePercentage))} MB)\n
\n\n
{t('SettingsDialog.CacheBeforeReaderDesc')}
\n
\n\n \n
\n {cachePercentage}% ({Math.round((cacheSize / 100) * cachePercentage)} MB)\n
\n\n
{t('SettingsDialog.CacheAfterReaderDesc')}
\n
\n\n
\n\n setCacheSize(Math.round(value / 4) * 4)}\n />\n\n \n\n \n
\n\n {UseDisk ? (\n
\n \n\n
\n updateSettings({ UseDisk: false })}>\n \n \n \n\n
{t('SettingsDialog.RAM')}
\n
\n\n \n \n \n \n\n
{t('SettingsDialog.Disk')}
\n
\n
\n\n \n }\n label={t('SettingsDialog.RemoveCacheOnDrop')}\n labelPlacement='start'\n />\n
\n {t('SettingsDialog.RemoveCacheOnDropDesc')}\n
\n
\n \n
\n ) : (\n \n \n\n \n \n \n \n\n
{t('SettingsDialog.RAM')}
\n
\n\n updateSettings({ UseDisk: true })}>\n \n \n \n\n
{t('SettingsDialog.Disk')}
\n
\n
\n )}\n
\n )\n}\n","import { useTranslation } from 'react-i18next'\nimport TextField from '@material-ui/core/TextField'\nimport { FormControlLabel, InputAdornment, InputLabel, Select, Switch } from '@material-ui/core'\n\nimport { SecondarySettingsContent, SettingSectionLabel } from './style'\n\nexport default function SecondarySettingsComponent({ settings, inputForm }) {\n const { t } = useTranslation()\n\n const {\n AcceptPeerCon,\n RetrackersMode,\n TorrentDisconnectTimeout,\n EnableIPv6,\n ForceEncrypt,\n DisableTCP,\n DisableUTP,\n DisableUPNP,\n DisableDHT,\n DisablePEX,\n DisableUpload,\n DownloadRateLimit,\n UploadRateLimit,\n ConnectionsLimit,\n PeersListenPort,\n } = settings || {}\n\n return (\n \n {t('SettingsDialog.AdditionalSettings')}\n\n }\n label='IPv6'\n labelPlacement='start'\n />\n }\n label='TCP (Transmission Control Protocol)'\n labelPlacement='start'\n />\n }\n label='μTP (Micro Transport Protocol)'\n labelPlacement='start'\n />\n }\n label='PEX (Peer Exchange)'\n labelPlacement='start'\n />\n }\n label={t('SettingsDialog.ForceEncrypt')}\n labelPlacement='start'\n />\n {t('Seconds')},\n }}\n value={TorrentDisconnectTimeout}\n type='number'\n variant='outlined'\n fullWidth\n />\n
\n \n
\n }\n label={t('SettingsDialog.DHT')}\n labelPlacement='start'\n />\n }\n label={t('SettingsDialog.AcceptPeerCon')}\n labelPlacement='start'\n />\n
\n {t('Kilobytes')},\n }}\n value={DownloadRateLimit}\n type='number'\n variant='outlined'\n fullWidth\n />\n
\n }\n label={t('SettingsDialog.Upload')}\n labelPlacement='start'\n />\n {t('Kilobytes')},\n }}\n value={UploadRateLimit}\n type='number'\n variant='outlined'\n fullWidth\n />\n
\n \n }\n label='UPnP (Universal Plug and Play)'\n labelPlacement='start'\n />\n
\n {t('SettingsDialog.RetrackersMode')}\n \n \n \n \n \n \n
\n
\n )\n}\n","import axios from 'axios'\nimport Dialog from '@material-ui/core/Dialog'\nimport Button from '@material-ui/core/Button'\nimport Checkbox from '@material-ui/core/Checkbox'\nimport { FormControlLabel, useMediaQuery, useTheme } from '@material-ui/core'\nimport { settingsHost } from 'utils/Hosts'\nimport { useEffect, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport AppBar from '@material-ui/core/AppBar'\nimport Tabs from '@material-ui/core/Tabs'\nimport Tab from '@material-ui/core/Tab'\nimport SwipeableViews from 'react-swipeable-views'\nimport CircularProgress from '@material-ui/core/CircularProgress'\n\nimport { SettingsHeader, FooterSection, Content } from './style'\nimport defaultSettings from './defaultSettings'\nimport { a11yProps, TabPanel } from './tabComponents'\nimport PrimarySettingsComponent from './PrimarySettingsComponent'\nimport SecondarySettingsComponent from './SecondarySettingsComponent'\n\nexport default function SettingsDialog({ handleClose }) {\n const { t } = useTranslation()\n const fullScreen = useMediaQuery('@media (max-width:930px)')\n const { direction } = useTheme()\n\n const [settings, setSettings] = useState()\n const [selectedTab, setSelectedTab] = useState(0)\n const [cacheSize, setCacheSize] = useState(32)\n const [cachePercentage, setCachePercentage] = useState(40)\n const [preloadCachePercentage, setPreloadCachePercentage] = useState(0)\n const [isProMode, setIsProMode] = useState(JSON.parse(localStorage.getItem('isProMode')) || false)\n\n useEffect(() => {\n axios.post(settingsHost(), { action: 'get' }).then(({ data }) => {\n setSettings({ ...data, CacheSize: data.CacheSize / (1024 * 1024) })\n })\n }, [])\n\n const handleSave = () => {\n handleClose()\n const sets = JSON.parse(JSON.stringify(settings))\n sets.CacheSize = cacheSize * 1024 * 1024\n sets.ReaderReadAHead = cachePercentage\n sets.PreloadCache = preloadCachePercentage\n axios.post(settingsHost(), { action: 'set', sets })\n }\n\n const inputForm = ({ target: { type, value, checked, id } }) => {\n const sets = JSON.parse(JSON.stringify(settings))\n\n if (type === 'number' || type === 'select-one') {\n sets[id] = Number(value)\n } else if (type === 'checkbox') {\n if (\n id === 'DisableTCP' ||\n id === 'DisableUTP' ||\n id === 'DisableUPNP' ||\n id === 'DisableDHT' ||\n id === 'DisablePEX' ||\n id === 'DisableUpload'\n )\n sets[id] = Boolean(!checked)\n else sets[id] = Boolean(checked)\n } else if (type === 'url') {\n sets[id] = value\n }\n setSettings(sets)\n }\n\n const { CacheSize, ReaderReadAHead, PreloadCache } = settings || {}\n\n useEffect(() => {\n if (isNaN(CacheSize) || isNaN(ReaderReadAHead) || isNaN(PreloadCache)) return\n\n setCacheSize(CacheSize)\n setCachePercentage(ReaderReadAHead)\n setPreloadCachePercentage(PreloadCache)\n }, [CacheSize, ReaderReadAHead, PreloadCache])\n\n const updateSettings = newProps => setSettings({ ...settings, ...newProps })\n const handleChange = (_, newValue) => setSelectedTab(newValue)\n const handleChangeIndex = index => setSelectedTab(index)\n\n return (\n \n \n
{t('SettingsDialog.Settings')}
\n {\n setIsProMode(checked)\n localStorage.setItem('isProMode', checked)\n if (!checked) setSelectedTab(0)\n }}\n style={{ color: 'white' }}\n />\n }\n label={t('SettingsDialog.ProMode')}\n />\n
\n\n \n \n \n\n \n
{t('SettingsDialog.Tabs.Additional')}
\n {!isProMode &&
{t('SettingsDialog.Tabs.AdditionalDisabled')}
}\n \n }\n {...a11yProps(1)}\n />\n \n
\n\n \n {settings ? (\n <>\n \n \n \n \n\n \n \n \n \n \n ) : (\n \n )}\n \n\n \n \n\n {\n setCacheSize(defaultSettings.CacheSize)\n setCachePercentage(defaultSettings.ReaderReadAHead)\n setPreloadCachePercentage(defaultSettings.PreloadCache)\n updateSettings(defaultSettings)\n }}\n color='secondary'\n variant='outlined'\n >\n {t('SettingsDialog.ResetToDefault')}\n \n\n \n \n
\n )\n}\n","import ListItem from '@material-ui/core/ListItem'\nimport ListItemIcon from '@material-ui/core/ListItemIcon'\nimport ListItemText from '@material-ui/core/ListItemText'\nimport { useState } from 'react'\nimport SettingsIcon from '@material-ui/icons/Settings'\nimport { useTranslation } from 'react-i18next'\n\nimport SettingsDialog from './SettingsDialog'\n\nexport default function SettingsDialogButton({ isOffline, isLoading }) {\n const { t } = useTranslation()\n const [isDialogOpen, setIsDialogOpen] = useState(false)\n\n const handleClickOpen = () => setIsDialogOpen(true)\n const handleClose = () => setIsDialogOpen(false)\n\n return (\n
\n \n \n \n \n \n \n\n {isDialogOpen && }\n
\n )\n}\n","import { Button, Dialog, DialogActions, DialogTitle } from '@material-ui/core'\nimport ListItem from '@material-ui/core/ListItem'\nimport ListItemIcon from '@material-ui/core/ListItemIcon'\nimport ListItemText from '@material-ui/core/ListItemText'\nimport DeleteIcon from '@material-ui/icons/Delete'\nimport { useState } from 'react'\nimport { torrentsHost } from 'utils/Hosts'\nimport { useTranslation } from 'react-i18next'\n\nconst fnRemoveAll = () => {\n fetch(torrentsHost(), {\n method: 'post',\n body: JSON.stringify({ action: 'list' }),\n headers: {\n Accept: 'application/json, text/plain, */*',\n 'Content-Type': 'application/json',\n },\n })\n .then(res => res.json())\n .then(json => {\n json.forEach(torr => {\n fetch(torrentsHost(), {\n method: 'post',\n body: JSON.stringify({ action: 'rem', hash: torr.hash }),\n headers: {\n Accept: 'application/json, text/plain, */*',\n 'Content-Type': 'application/json',\n },\n })\n })\n })\n}\n\nexport default function RemoveAll({ isOffline, isLoading }) {\n const { t } = useTranslation()\n const [open, setOpen] = useState(false)\n const closeDialog = () => setOpen(false)\n const openDialog = () => setOpen(true)\n\n return (\n <>\n \n \n \n \n\n \n \n\n \n {t('DeleteTorrents?')}\n \n \n\n {\n fnRemoveAll()\n closeDialog()\n }}\n color='secondary'\n autoFocus\n >\n {t('OK')}\n \n \n \n \n )\n}\n","import styled, { css } from 'styled-components'\n\nexport const DialogWrapper = styled.div`\n height: 100%;\n display: grid;\n grid-template-rows: max-content 1fr max-content;\n`\n\nexport const HeaderSection = styled.section`\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 36px;\n font-weight: 300;\n padding: 20px;\n\n img {\n width: 64px;\n }\n\n @media (max-width: 930px) {\n font-size: 24px;\n padding: 10px 20px;\n\n img {\n width: 60px;\n }\n }\n`\n\nexport const ThanksSection = styled.section`\n padding: 20px;\n text-align: center;\n font-size: 24px;\n font-weight: 300;\n background: #e8e5eb;\n color: #323637;\n\n @media (max-width: 930px) {\n font-size: 20px;\n padding: 30px 20px;\n }\n`\n\nexport const Section = styled.section`\n padding: 20px;\n\n > span {\n font-size: 20px;\n display: block;\n margin-bottom: 15px;\n }\n\n a {\n text-decoration: none;\n }\n\n > div {\n display: grid;\n gap: 10px;\n grid-template-columns: repeat(4, max-content);\n\n @media (max-width: 930px) {\n grid-template-columns: repeat(3, 1fr);\n }\n\n @media (max-width: 780px) {\n grid-template-columns: repeat(2, 1fr);\n }\n\n @media (max-width: 550px) {\n grid-template-columns: 1fr;\n }\n }\n`\n\nexport const FooterSection = styled.div`\n padding: 20px;\n display: flex;\n justify-content: flex-end;\n background: #e8e5eb;\n`\n\nexport const LinkWrapper = styled.a`\n ${({ isLink }) => css`\n display: inline-flex;\n align-items: center;\n justify-content: start;\n border: 1px solid;\n padding: 10px;\n border-radius: 5px;\n text-transform: uppercase;\n text-decoration: none;\n background: #545a5e;\n color: #f1eff3;\n transition: 0.2s;\n\n > * {\n transition: 0.2s;\n }\n\n ${isLink\n ? css`\n :hover {\n filter: brightness(1.1);\n\n > * {\n transform: translateY(-1px);\n }\n }\n `\n : css`\n cursor: default;\n `}\n `}\n`\n\nexport const LinkIcon = styled.div`\n display: grid;\n margin-right: 10px;\n`\n","import { GitHub as GitHubIcon } from '@material-ui/icons'\n\nimport { LinkWrapper, LinkIcon } from './style'\n\nexport default function LinkComponent({ name, link }) {\n return (\n \n {link && (\n \n \n \n )}\n\n
{name}
\n
\n )\n}\n","import axios from 'axios'\nimport { useEffect, useState } from 'react'\nimport Button from '@material-ui/core/Button'\nimport Dialog from '@material-ui/core/Dialog'\nimport InfoIcon from '@material-ui/icons/Info'\nimport ListItem from '@material-ui/core/ListItem'\nimport ListItemIcon from '@material-ui/core/ListItemIcon'\nimport ListItemText from '@material-ui/core/ListItemText'\nimport { useTranslation } from 'react-i18next'\nimport { useMediaQuery } from '@material-ui/core'\nimport { echoHost } from 'utils/Hosts'\n\nimport LinkComponent from './LinkComponent'\nimport { DialogWrapper, HeaderSection, ThanksSection, Section, FooterSection } from './style'\n\nexport default function AboutDialog() {\n const { t } = useTranslation()\n const [open, setOpen] = useState(false)\n const [torrServerVersion, setTorrServerVersion] = useState('')\n const fullScreen = useMediaQuery('@media (max-width:930px)')\n useEffect(() => {\n axios.get(echoHost()).then(({ data }) => setTorrServerVersion(data))\n }, [])\n\n return (\n <>\n setOpen(true)}>\n \n \n \n \n \n\n setOpen(false)}\n aria-labelledby='form-dialog-title'\n fullScreen={fullScreen}\n maxWidth='xl'\n >\n \n \n
{t('About')}
\n {torrServerVersion}\n ts-icon\n
\n\n
\n {t('ThanksToEveryone')}\n\n
\n {t('Links')}\n\n
\n \n \n
\n
\n\n
\n {t('SpecialThanks')}\n\n
\n \n \n \n \n \n
\n
\n
\n\n \n \n \n
\n \n \n )\n}\n","import { useState } from 'react'\nimport { Button, Dialog, DialogActions, DialogTitle, ListItem, ListItemIcon, ListItemText } from '@material-ui/core'\nimport { PowerSettingsNew as PowerSettingsNewIcon } from '@material-ui/icons'\nimport { shutdownHost } from 'utils/Hosts'\nimport { useTranslation } from 'react-i18next'\n\nexport default function CloseServer({ isOffline, isLoading }) {\n const { t } = useTranslation()\n const [open, setOpen] = useState(false)\n const closeDialog = () => setOpen(false)\n const openDialog = () => setOpen(true)\n\n return (\n <>\n \n \n \n \n\n \n \n\n \n {t('CloseServer?')}\n \n \n\n {\n fetch(shutdownHost())\n closeDialog()\n }}\n color='secondary'\n autoFocus\n >\n {t('TurnOff')}\n \n \n \n \n )\n}\n","import Divider from '@material-ui/core/Divider'\nimport ListItem from '@material-ui/core/ListItem'\nimport ListItemIcon from '@material-ui/core/ListItemIcon'\nimport ListItemText from '@material-ui/core/ListItemText'\nimport { CreditCard as CreditCardIcon } from '@material-ui/icons'\nimport List from '@material-ui/core/List'\nimport { useTranslation } from 'react-i18next'\nimport AddDialogButton from 'components/Add'\nimport SettingsDialog from 'components/Settings'\nimport RemoveAll from 'components/RemoveAll'\nimport AboutDialog from 'components/About'\nimport CloseServer from 'components/CloseServer'\nimport { memo } from 'react'\n\nimport { AppSidebarStyle } from './style'\n\nconst Sidebar = ({ isDrawerOpen, setIsDonationDialogOpen, isOffline, isLoading }) => {\n const { t } = useTranslation()\n\n return (\n \n \n \n\n \n \n\n \n\n \n \n\n \n\n setIsDonationDialogOpen(true)}>\n \n \n \n\n \n \n\n \n \n \n )\n}\n\nexport default memo(Sidebar)\n","import CssBaseline from '@material-ui/core/CssBaseline'\nimport { createContext, useEffect, useState } from 'react'\nimport Typography from '@material-ui/core/Typography'\nimport IconButton from '@material-ui/core/IconButton'\nimport {\n Menu as MenuIcon,\n Close as CloseIcon,\n Brightness4 as Brightness4Icon,\n Brightness5 as Brightness5Icon,\n BrightnessAuto as BrightnessAutoIcon,\n} from '@material-ui/icons'\nimport { echoHost } from 'utils/Hosts'\nimport Div100vh from 'react-div-100vh'\nimport axios from 'axios'\nimport TorrentList from 'components/TorrentList'\nimport DonateSnackbar from 'components/Donate'\nimport DonateDialog from 'components/Donate/DonateDialog'\nimport useChangeLanguage from 'utils/useChangeLanguage'\nimport { ThemeProvider as MuiThemeProvider } from '@material-ui/core/styles'\nimport { ThemeProvider as StyledComponentsThemeProvider } from 'styled-components'\nimport { useQuery } from 'react-query'\nimport { getTorrents } from 'utils/Utils'\nimport GlobalStyle from 'style/GlobalStyle'\n\nimport { AppWrapper, AppHeader, HeaderToggle } from './style'\nimport Sidebar from './Sidebar'\nimport { lightTheme, THEME_MODES, useMaterialUITheme } from '../../style/materialUISetup'\nimport getStyledComponentsTheme from '../../style/getStyledComponentsTheme'\n\nexport const DarkModeContext = createContext()\n\nexport default function App() {\n const [isDrawerOpen, setIsDrawerOpen] = useState(false)\n const [isDonationDialogOpen, setIsDonationDialogOpen] = useState(false)\n const [torrServerVersion, setTorrServerVersion] = useState('')\n\n const [isDarkMode, currentThemeMode, updateThemeMode, muiTheme] = useMaterialUITheme()\n const [currentLang, changeLang] = useChangeLanguage()\n const [isOffline, setIsOffline] = useState(false)\n const { data: torrents, isLoading } = useQuery('torrents', getTorrents, {\n retry: 1,\n refetchInterval: 1000,\n onError: () => setIsOffline(true),\n onSuccess: () => setIsOffline(false),\n })\n\n useEffect(() => {\n axios.get(echoHost()).then(({ data }) => setTorrServerVersion(data))\n }, [])\n\n return (\n <>\n \n\n \n \n \n \n\n {/* Div100vh - iOS WebKit fix */}\n \n \n \n setIsDrawerOpen(!isDrawerOpen)}\n style={{ marginRight: '6px' }}\n >\n {isDrawerOpen ? : }\n \n\n \n TorrServer {torrServerVersion}\n \n\n \n {\n if (currentThemeMode === THEME_MODES.LIGHT) updateThemeMode(THEME_MODES.DARK)\n if (currentThemeMode === THEME_MODES.DARK) updateThemeMode(THEME_MODES.AUTO)\n if (currentThemeMode === THEME_MODES.AUTO) updateThemeMode(THEME_MODES.LIGHT)\n }}\n >\n {currentThemeMode === THEME_MODES.LIGHT ? (\n \n ) : currentThemeMode === THEME_MODES.DARK ? (\n \n ) : (\n \n )}\n \n\n (currentLang === 'en' ? changeLang('ru') : changeLang('en'))}>\n {currentLang === 'en' ? 'EN' : 'RU'}\n \n \n \n\n \n\n \n\n \n {isDonationDialogOpen && setIsDonationDialogOpen(false)} />}\n \n\n {!JSON.parse(localStorage.getItem('snackbarIsClosed')) && }\n \n \n \n \n \n \n )\n}\n","import { mainColors, themeColors } from './colors'\n\nexport default type => ({ ...themeColors[type], ...mainColors[type] })\n","import { StrictMode } from 'react'\nimport ReactDOM from 'react-dom'\nimport { QueryClientProvider, QueryClient } from 'react-query'\n\nimport App from './components/App'\nimport 'i18n'\n\nconst queryClient = new QueryClient()\n\nReactDOM.render(\n \n \n \n \n ,\n document.getElementById('root'),\n)\n"],"sourceRoot":""} \ No newline at end of file diff --git a/server/web/pages/template/pages/static/js/main.156908fe.chunk.js b/server/web/pages/template/pages/static/js/main.156908fe.chunk.js deleted file mode 100644 index fdde3c0..0000000 --- a/server/web/pages/template/pages/static/js/main.156908fe.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -(this.webpackJsonptorrserver_web=this.webpackJsonptorrserver_web||[]).push([[0],{173:function(e){e.exports=JSON.parse('{"About":"About","Actions":"Actions","Add":"Add","AddDialog":{"AddPosterLinkInput":"Poster link","AddTorrentSourceNotification":"First add your torrent source","AppendFile":{"Or":"OR","ClickOrDrag":"CLICK / DRAG & DROP (.torrent)"},"CustomTorrentTitle":"Custom title (optional)","CustomTorrentTitleHelperText":"Write custom title to find poster","HashExists":"This torrent is already in database","OriginalTorrentTitle":"Original torrent title","TitleBlank":"Title (blank for orig. torrent title)","TorrentSourceLink":"Torrent source link","TorrentSourceOptions":"magnet / hash / .torrent file link","WrongTorrentSource":"Wrong torrent source"},"AddFromLink":"Add from Link","AddNewTorrent":"Add new torrent","B":"B","bps":"bps","Buffer":"Preload Buffer / Cache","BufferNote":"Set Preload Cache Before Play > 32 MB in settings to change preload size","Cache":"Cache","Cancel":"Cancel","Clear":"Clear","Close":"Close","CloseServer?":"Do you want to turn off server?","CloseServer":"Turn Off","CopyHash":"Copy Hash","CopyLink":"Copy link","Data":"Data","Delete":"Delete","DeleteTorrent?":"Delete Torrent?","DeleteTorrents?":"Delete All Torrents?","DetailedCacheView":{"button":"Detailed Cache View","header":"$t(DetailedCacheView.button)"},"Details":"Details","Donate?":"Want to donate?","Donate":"Donate","DownloadPlaylist":"Download Playlist","DownloadSpeed":"Download speed","Drop":"Drop","DropTorrent":"Reset Torrent","Edit":"Edit","EditTorrent":"Edit torrent","Episode":"Episode","FromLatestFile":"From Latest File","Full":"Full","GB":"GB","Gbps":"Gbps","Host":"Host","Info":"Info","KB":"KB","kbps":"kbps","Kilobytes":"Kilobytes","LatestFilePlayed":"Latest file played:","Links":"Links","MB":"MB","Mbps":"Mbps","Name":"Name","NoTorrentsAdded":"No torrents added","Offline":"Offline","OK":"OK","OpenLink":"Open link","Peers":"Peers","PiecesCount":"Pieces count","PiecesLength":"Pieces length","Preload":"Preload","ProjectSource":"Project page","Releases":"TorrServer Releases","RemoveAll":"Remove All","RemoveViews":"Remove View States","Resolution":"Resolution","Save":"Save","ScrollDown":"scroll down","Season":"Season","Sec":"s","Seconds":"Seconds","SelectSeason":"Select Season","SettingsDialog":{"AcceptPeerCon":"Accept Peer Connections","AnnTorrentsToDht":"Periodically Announce Torrents to DHT","AddRetrackers":"Add retrackers","AdditionalSettings":"Additional Settings","CacheBeforeReaderDesc":"from cache will be saved before currently played frame","CacheAfterReaderDesc":"from cache will be loaded after currently played frame","CacheSize":"Cache Size","CacheSettings":"Cache Settings","CacheStorageLocation":"Cache Storage Location","ConnectionsLimit":"Connections Limit","ConnectionsLimitHint":"20-25 recommended","DHT":"DHT (Distributed Hash Table)","DhtConnectionLimit":"DHT Connection Limit","Disk":"Disk","DontAddRetrackers":"Don`t add retrackers","DownloadRateLimit":"Download Rate Limit","ForceEncrypt":"Force Encrypt Headers","PeersListenPort":"Peers Listen Port","PreloadCache":"Preload Cache Before Play","ProMode":"PRO mode","RAM":"RAM","ReaderReadAHead":"Readahead Cache (5-100%, rec. 95%)","RemoveCacheOnDrop":"Remove Cache from Disk on Drop Torrent","RemoveCacheOnDropDesc":"If disabled, cache removed on delete torrent.","RemoveRetrackers":"Remove retrackers","ReplaceRetrackers":"Replace retrackers","RetrackersMode":"Retrackers Mode","ResetToDefault":"Reset to default","Settings":"Settings","TorrentDisconnectTimeout":"Torrent Disconnect Timeout","TorrentsSavePath":"Torrents Save Path","Upload":"Upload (not recommended to disable)","UploadRateLimit":"Upload Rate Limit","UseDiskDesc":"Better use RAM or external storage on flash-based devices","Tabs":{"Main":"Main","Additional":"Additional","AdditionalDisabled":"(enable PRO mode)"}},"Size":"Size","SpecialThanks":"Special Thanks","Speed":"Speed","Support":"Support","TB":"TB","Tbps":"Tbps","ThanksToEveryone":"Thanks to everyone who tested and helped.","TorrentAdded":"Added","TorrentClosed":"\u0421losed","TorrentContent":"Torrent Content","TorrentDetails":"Torrent Details","TorrentGettingInfo":"Getting Info","TorrentInDb":"In DB","TorrentPreload":"Preload","TorrentSize":"Torrent size","TorrentState":"Torrent State","TorrentStatus":"Torrent Status","TorrentWorking":"Active","TurnOff":"Turn Off","UploadFile":"Upload File","UploadSpeed":"Upload speed","Viewed":"Viewed"}')},174:function(e){e.exports=JSON.parse('{"About":"\u041e \u0441\u0435\u0440\u0432\u0435\u0440\u0435","Actions":"\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f","Add":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c","AddDialog":{"AddPosterLinkInput":"\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043f\u043e\u0441\u0442\u0435\u0440","AddTorrentSourceNotification":"\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 torrent-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a","AppendFile":{"Or":"\u0418\u041b\u0418","ClickOrDrag":"\u041d\u0410\u0416\u041c\u0418\u0422\u0415 / \u041f\u0415\u0420\u0415\u0422\u0410\u0429\u0418\u0422\u0415 \u0424\u0410\u0419\u041b (.torrent)"},"CustomTorrentTitle":"C\u0432\u043e\u0435 \u0438\u043c\u044f (\u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e)","CustomTorrentTitleHelperText":"\u041d\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u0441\u0432\u043e\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u043f\u043e\u0441\u0442\u0435\u0440","HashExists":"\u042d\u0442\u043e\u0442 \u0442\u043e\u0440\u0440\u0435\u043d\u0442 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445","OriginalTorrentTitle":"\u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u0438\u043c\u044f \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430","TitleBlank":"\u0418\u043c\u044f (\u043f\u0443\u0441\u0442\u043e\u0435 - \u043e\u0440\u0438\u0433. \u0438\u043c\u044f \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430)","TorrentSourceLink":"\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430","TorrentSourceOptions":"magnet-\u0441\u0441\u044b\u043b\u043a\u0430 / \u0445\u0435\u0448 / \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 .torrent \u0444\u0430\u0439\u043b","WrongTorrentSource":"\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 torrent-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a"},"AddFromLink":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c","AddNewTorrent":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0442\u043e\u0440\u0440\u0435\u043d\u0442","B":"\u0411","bps":"\u0431\u0438\u0442/c","Buffer":"\u041f\u0440\u0435\u0434\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 / \u041a\u0435\u0448","BufferNote":"\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u0411\u0443\u0444\u0435\u0440 \u043f\u0440\u0435\u0434\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 > 32 \u041c\u0411 \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u0434\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043f\u0440\u0435\u0434\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438","Cache":"\u041a\u0435\u0448","Cancel":"\u041e\u0442\u043c\u0435\u043d\u0430","Clear":"\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c","Close":"\u0417\u0430\u043a\u0440\u044b\u0442\u044c","CloseServer?":"\u0425\u043e\u0442\u0438\u0442\u0435 \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440?","CloseServer":"\u0412\u044b\u043a\u043b. \u0441\u0435\u0440\u0432\u0435\u0440","CopyHash":"\u0421\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0445\u0435\u0448","CopyLink":"\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c","Data":"\u0414\u0430\u043d\u043d\u044b\u0435","Delete":"\u0423\u0434\u0430\u043b\u0438\u0442\u044c","DeleteTorrent?":"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0442\u043e\u0440\u0440\u0435\u043d\u0442?","DeleteTorrents?":"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0441\u0435 \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u044b?","DetailedCacheView":{"button":"\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043a\u0435\u0448\u0430","header":"\u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u0435\u0448\u0430"},"Details":"\u0418\u043d\u0444\u043e","Donate?":"\u0425\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442?","Donate":"\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430","DownloadPlaylist":"\u0421\u043a\u0430\u0447\u0430\u0442\u044c \u043f\u043b\u0435\u0439\u043b\u0438\u0441\u0442","DownloadSpeed":"\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438","Drop":"\u0421\u0431\u0440\u043e\u0441","DropTorrent":"\u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0442\u043e\u0440\u0440\u0435\u043d\u0442","Edit":"\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c","EditTorrent":"\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0442\u043e\u0440\u0440\u0435\u043d\u0442","Episode":"\u0421\u0435\u0440\u0438\u044f","FromLatestFile":"C \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0444\u0430\u0439\u043b\u0430","Full":"\u041f\u043e\u043b\u043d\u044b\u0439","GB":"\u0413\u0411","Gbps":"\u0413\u0431\u0438\u0442/c","Host":"\u0425\u043e\u0441\u0442","Info":"\u0418\u043d\u0444\u043e","KB":"\u041a\u0411","kbps":"\u043a\u0431\u0438\u0442/\u0441","Kilobytes":"\u041a\u0438\u043b\u043e\u0431\u0430\u0439\u0442\u044b","LatestFilePlayed":"\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b:","Links":"\u0421\u0441\u044b\u043b\u043a\u0438","MB":"\u041c\u0411","Mbps":"\u041c\u0431\u0438\u0442/c","Name":"\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435","NoTorrentsAdded":"\u041d\u0435\u0442 \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u043e\u0432","Offline":"\u0421\u0435\u0440\u0432\u0435\u0440 \u043d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d","OK":"OK","OpenLink":"\u041e\u0442\u043a\u0440\u044b\u0442\u044c","Peers":"\u041f\u0438\u0440\u044b","PiecesCount":"\u041a\u043e\u043b-\u0432\u043e \u0431\u043b\u043e\u043a\u043e\u0432","PiecesLength":"\u0420\u0430\u0437\u043c\u0435\u0440 \u0431\u043b\u043e\u043a\u0430","Preload":"\u041f\u0440\u0435\u0434\u0437\u0430\u0433\u0440.","ProjectSource":"\u0421\u0430\u0439\u0442 \u043f\u0440\u043e\u0435\u043a\u0442\u0430","Releases":"\u0420\u0435\u043b\u0438\u0437\u044b TorrServer","RemoveAll":"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0441\u0435","RemoveViews":"\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u044b","Resolution":"\u0420\u0430\u0437\u0440\u0435\u0448.","Save":"\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c","ScrollDown":"\u043f\u0440\u043e\u043a\u0440\u0443\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u0437","Season":"\u0421\u0435\u0437\u043e\u043d","Sec":"c","Seconds":"\u0421\u0435\u043a\u0443\u043d\u0434\u044b","SelectSeason":"\u0412\u044b\u0431\u043e\u0440 \u0441\u0435\u0437\u043e\u043d\u0430","SettingsDialog":{"AcceptPeerCon":"\u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f","AnnTorrentsToDht":"\u0410\u043d\u043e\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u044b \u043f\u043e DHT","AddRetrackers":"\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c","AdditionalSettings":"\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438","CacheBeforeReaderDesc":"\u043e\u0442 \u043a\u0435\u0448\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0437\u0430\u0434\u0438 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u043e\u0433\u043e \u043a\u0430\u0434\u0440\u0430","CacheAfterReaderDesc":"\u043a\u0435\u0448\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u043f\u0435\u0440\u0435\u0434\u0438 \u043e\u0442 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u043e\u0433\u043e \u043a\u0430\u0434\u0440\u0430","CacheSize":"\u0420\u0430\u0437\u043c\u0435\u0440 \u043a\u0435\u0448\u0430","CacheSettings":"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u0435\u0448\u0430","CacheStorageLocation":"\u041c\u0435\u0441\u0442\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043a\u0435\u0448\u0430","ConnectionsLimit":"\u0422\u043e\u0440\u0440\u0435\u043d\u0442-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f","ConnectionsLimitHint":"\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f 20-25","DHT":"DHT (Distributed Hash Table)","DhtConnectionLimit":"\u041b\u0438\u043c\u0438\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 DHT","Disk":"\u041f\u0417\u0423 / \u041d\u0430\u043a\u043e\u043f\u0438\u0442\u0435\u043b\u044c","DontAddRetrackers":"\u041d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0442\u044c","DownloadRateLimit":"\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438","ForceEncrypt":"\u041f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432","PeersListenPort":"\u041f\u043e\u0440\u0442 \u0434\u043b\u044f \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439","PreloadCache":"\u0411\u0443\u0444\u0435\u0440 \u043f\u0440\u0435\u0434\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438","ProMode":"\u041f\u0420\u041e-\u0440\u0435\u0436\u0438\u043c","RAM":"\u041e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c","ReaderReadAHead":"\u041e\u043f\u0435\u0440\u0435\u0436\u0430\u044e\u0449\u0438\u0439 \u043a\u0435\u0448 (5-100%, \u0440\u0435\u043a. 95%)","RemoveCacheOnDrop":"\u041e\u0447\u0438\u0449\u0430\u0442\u044c \u043a\u0435\u0448 \u043f\u0440\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430","RemoveCacheOnDropDesc":"\u0415\u0441\u043b\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043e, \u043a\u0435\u0448 \u043e\u0447\u0438\u0449\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430.","RemoveRetrackers":"\u0423\u0434\u0430\u043b\u044f\u0442\u044c","ReplaceRetrackers":"\u0417\u0430\u043c\u0435\u043d\u044f\u0442\u044c","RetrackersMode":"\u0420\u0435\u0442\u0440\u0435\u043a\u0435\u0440\u044b","ResetToDefault":"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e","Settings":"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438","TorrentDisconnectTimeout":"\u0422\u0430\u0439\u043c-\u0430\u0443\u0442 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430","TorrentsSavePath":"\u041f\u0443\u0442\u044c \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043a\u0435\u0448\u0430","Upload":"\u041e\u0442\u0434\u0430\u0447\u0430 (\u043d\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0442\u044c)","UploadRateLimit":"\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043e\u0442\u0434\u0430\u0447\u0438","UseDiskDesc":"\u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c \u0438\u043b\u0438 \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u043d\u043e\u0441\u0438\u0442\u0435\u043b\u0438 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445 \u0441 flash-\u043f\u0430\u043c\u044f\u0442\u044c\u044e","Tabs":{"Main":"\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435","Additional":"\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435","AdditionalDisabled":"(\u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u041f\u0420\u041e-\u0440\u0435\u0436\u0438\u043c)"}},"Size":"\u0420\u0430\u0437\u043c\u0435\u0440","SpecialThanks":"\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u043f\u0430\u0441\u0438\u0431\u043e","Speed":"\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c","Support":"\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0430\u0442\u044c","TB":"\u0422\u0411","Tbps":"\u0422\u0431\u0438\u0442/\u0441","ThanksToEveryone":"\u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0432\u0441\u0435\u043c, \u043a\u0442\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0438 \u043f\u043e\u043c\u043e\u0433\u0430\u043b!","TorrentAdded":"\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d","TorrentClosed":"\u0417\u0430\u043a\u0440\u044b\u0442","TorrentContent":"\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430","TorrentDetails":"\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0435","TorrentGettingInfo":"\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0438\u043d\u0444\u043e","TorrentInDb":"\u0422\u043e\u0440\u0440\u0435\u043d\u0442 \u0432 \u0411\u0414","TorrentPreload":"\u041f\u0440\u0435\u0434\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430","TorrentSize":"\u0420\u0430\u0437\u043c\u0435\u0440 \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430","TorrentState":"\u0414\u0430\u043d\u043d\u044b\u0435 \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430","TorrentStatus":"\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430","TorrentWorking":"\u0410\u043a\u0442\u0438\u0432\u0435\u043d","TurnOff":"\u0412\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c","UploadFile":"\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0444\u0430\u0439\u043b","UploadSpeed":"\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043e\u0442\u0434\u0430\u0447\u0438","Viewed":"\u041f\u0440\u043e\u0441\u043c."}')},330:function(e,t){},333:function(e,t){},335:function(e,t){},337:function(e,t){},382:function(e,t,n){"use strict";n.r(t);var a=n(0),r=n(18),i=n.n(r),o=n(475),c=n(188),l=n(10),s=n(470),d=n(64),p=n(386),j=n(453),b=n(471),u=n(472),h=n(473),x=n(474),g=window.location,m=g.protocol,O=g.hostname,f=g.port,C="".concat(m,"//").concat(O).concat(f?":".concat(f):""),v=function(){return"".concat(C,"/torrents")},y=function(){return"".concat(C,"/viewed")},w=function(){return"".concat(C,"/settings")},S=function(){return"".concat(C,"/stream")},D=function(){return"".concat(C,"/echo")},k=n(171),T=n(21),P=n.n(T),M=n(23),B=n(451),R=n(452),L=n(454),A=n(73),z=n.n(A),F=n(100),E=n(75),G=n(126),N=n(86),I=n(172),U=n(173),H=n(174);G.a.use(I.a).use(N.e).init({fallbackLng:"en",interpolation:{escapeValue:!1},resources:{en:{translation:U},ru:{translation:H}}});var W=G.a;function V(e){if(!e)return"";var t=Math.floor(Math.log(e)/Math.log(1024));return"".concat(1*(e/Math.pow(1024,t)).toFixed(2)," ").concat([W.t("B"),W.t("KB"),W.t("MB"),W.t("GB"),W.t("TB")][t])}function Z(e){if(!e)return"";var t=Math.floor(Math.log(8*e)/Math.log(1e3));return"".concat(1*(8*e/Math.pow(1e3,t)).toFixed(0)," ").concat([W.t("bps"),W.t("kbps"),W.t("Mbps"),W.t("Gbps"),W.t("Tbps")][t])}function _(e){return e&&e.connected_seeders?"".concat(e.connected_seeders," \xb7 ").concat(e.active_peers," / ").concat(e.total_peers):null}var K=function(e){var t=e;[["(",")"],["[","]"],["{","}"]].forEach((function(e){var n="\\".concat(e[0]),a=new RegExp(n,"g"),r=Object(E.a)(t.matchAll(a)).length,i="\\".concat(e[1]),o=new RegExp(i,"g");if(r!==Object(E.a)(t.matchAll(o)).length){var c="(\\".concat(e[0],")(?!.*\\1).*"),l=new RegExp(c,"g");t=t.replace(l,"")}}));var n=!!t.match(/\.{3}$/g),a=t.replace(/[\\.| ]+$/g,"").trim();return n?"".concat(a,".."):a},J=function(){var e=Object(F.a)(z.a.mark((function e(){var t,n;return z.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,P.a.post(v(),{action:"list"});case 3:return t=e.sent,n=t.data,e.abrupt("return",n);case 8:throw e.prev=8,e.t0=e.catch(0),new Error(null);case 11:case"end":return e.stop()}}),e,null,[[0,8]])})));return function(){return e.apply(this,arguments)}}(),Y=n(32),$=n(1),X=function(e){var t=e.color,n=Object(Y.a)().palette.primary.main;return Object($.jsx)("svg",{height:"80px",width:"80px",fill:t||n,xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",version:"1.1",x:"0px",y:"0px",viewBox:"0 0 100 100",enableBackground:"new 0 0 100 100",xmlSpace:"preserve",children:Object($.jsxs)("g",{children:[Object($.jsx)("path",{d:"M18.293,93.801c0.066,0.376,0.284,0.718,0.597,0.937c0.313,0.219,0.708,0.307,1.085,0.241l70.058-12.353 c0.376-0.066,0.718-0.284,0.937-0.597c0.219-0.313,0.307-0.708,0.24-1.085l-9.502-53.891c-0.139-0.79-0.892-1.317-1.682-1.178 l-19.402,3.421L47.997,14.16c0.241-0.706,0.375-1.456,0.375-2.229c0-0.399-0.035-0.804-0.106-1.209C47.671,7.363,44.757,5,41.455,5 c-0.4,0-0.804,0.035-1.209,0.106h0c-3.359,0.595-5.723,3.509-5.723,6.812c0,0.4,0.035,0.804,0.106,1.209 c0.178,1.005,0.567,1.918,1.109,2.709l-6.875,19.061L9.968,38.228c-0.79,0.139-1.317,0.892-1.177,1.682L18.293,93.801z M40.75,7.966L40.75,7.966c0.239-0.042,0.474-0.062,0.705-0.062c1.909,0,3.612,1.373,3.953,3.324v0 c0.042,0.238,0.062,0.473,0.062,0.704c0,1.908-1.373,3.612-3.323,3.953h0.001c-0.238,0.042-0.473,0.062-0.705,0.062 c-1.908,0-3.612-1.373-3.953-3.323c-0.042-0.238-0.062-0.473-0.062-0.705C37.427,10.01,38.799,8.306,40.75,7.966z M38.059,17.96 c1.012,0.569,2.17,0.89,3.383,0.89c0.399,0,0.804-0.034,1.208-0.106h0.001c1.48-0.263,2.766-0.976,3.743-1.974l10.935,13.108 L32.16,34.315L38.059,17.96z M29.978,37.648c0.136-0.004,0.268-0.029,0.396-0.07l29.75-5.246c0.134-0.006,0.266-0.027,0.395-0.07 l18.582-3.277l8.998,51.031L20.9,91.867l-8.998-51.032L29.978,37.648z"}),Object($.jsx)("path",{d:"M49.984,75.561c0.809,0,1.627-0.065,2.449-0.199l0.001,0c7.425-1.213,12.701-7.627,12.701-14.919 c0-0.809-0.065-1.627-0.199-2.449c-1.213-7.425-7.626-12.701-14.919-12.701c-0.808,0-1.627,0.065-2.45,0.199 c-7.425,1.213-12.701,7.626-12.701,14.918c0,0.808,0.065,1.627,0.199,2.449C36.278,70.284,42.692,75.561,49.984,75.561z M51.967,72.496c-0.668,0.109-1.33,0.161-1.983,0.161c-5.883,0-11.079-4.265-12.053-10.265c-0.109-0.668-0.161-1.33-0.161-1.983 c0-2.108,0.555-4.123,1.534-5.892l19.693,14.176C57.206,70.645,54.782,72.039,51.967,72.496z M48.034,48.357L48.034,48.357 c0.668-0.109,1.329-0.161,1.983-0.161c5.882,0,11.079,4.265,12.053,10.265c0.109,0.667,0.161,1.329,0.161,1.983 c0,2.109-0.556,4.127-1.536,5.897L41.001,52.163C42.791,50.21,45.217,48.814,48.034,48.357z"}),Object($.jsx)("polygon",{points:"47.567,45.492 47.567,45.492 47.568,45.491 "})]})})},q=function(){var e=Object(Y.a)().palette.primary.main;return Object($.jsx)("svg",{height:"100px",width:"100px",fill:e,viewBox:"0 0 452 452",version:"1.1",xmlns:"http://www.w3.org/2000/svg",children:Object($.jsxs)("g",{id:"#000000",children:[Object($.jsx)("path",{opacity:"1.00",d:" M 210.49 18.69 C 244.92 16.12 280.02 22.13 311.46 36.47 C 344.90 51.54 374.16 75.69 395.41 105.58 C 415.62 133.87 428.55 167.34 432.48 201.89 C 438.07 248.86 427.02 297.61 401.45 337.43 C 382.92 366.59 357.02 391.04 326.80 407.80 C 300.81 422.31 271.64 431.08 241.96 433.26 C 207.37 435.97 172.14 429.83 140.54 415.51 C 109.95 401.69 82.82 380.33 62.16 353.86 C 39.25 324.67 24.38 289.21 19.78 252.38 C 14.94 214.51 20.65 175.31 36.47 140.54 C 54.11 101.38 84.24 67.99 121.37 46.39 C 148.44 30.52 179.19 20.98 210.49 18.69 M 213.46 36.60 C 178.91 38.80 145.03 50.71 116.76 70.72 C 84.67 93.21 59.84 125.88 46.91 162.88 C 34.87 196.99 32.96 234.54 41.25 269.73 C 48.89 302.45 65.53 332.98 88.79 357.21 C 113.91 383.56 146.78 402.45 182.25 410.72 C 216.67 418.86 253.37 417.21 286.87 405.85 C 329.85 391.49 367.13 361.01 389.89 321.85 C 406.02 294.41 414.96 262.84 415.73 231.03 C 416.71 196.59 408.11 161.91 390.97 132.00 C 372.31 99.13 343.57 72.09 309.61 55.49 C 279.95 40.89 246.43 34.40 213.46 36.60 Z"}),Object($.jsx)("path",{opacity:"1.00",d:" M 217.02 117.63 C 223.01 117.45 228.99 117.45 234.98 117.63 C 235.16 150.72 234.93 183.81 235.09 216.89 C 268.18 217.03 301.28 216.82 334.38 216.99 C 334.57 222.99 334.57 229.00 334.38 235.01 C 301.28 235.18 268.18 234.97 235.09 235.11 C 234.93 268.19 235.16 301.28 234.98 334.37 C 228.99 334.55 223.00 334.55 217.02 334.37 C 216.84 301.28 217.07 268.19 216.92 235.11 C 183.82 234.97 150.72 235.17 117.62 235.01 C 117.43 229.00 117.43 222.99 117.62 216.99 C 150.72 216.82 183.82 217.03 216.91 216.89 C 217.07 183.81 216.84 150.72 217.02 117.63 Z"})]})})},Q=function(e){var t=e.color,n=e.width,a=Object(Y.a)().palette.primary.main;return Object($.jsxs)("svg",{width:n||"100%",height:"100%",viewBox:"96.96632385253906 377.9800109863281 873.03369140625 310.9999694824219",version:"1.1",xmlns:"http://www.w3.org/2000/svg",children:[Object($.jsx)("path",{fill:t||a,opacity:"1.00",d:" M 603.05 378.50 C 648.01 378.10 692.99 378.30 737.96 378.24 C 746.80 377.82 755.66 378.04 764.51 378.02 C 764.49 396.01 764.50 414.00 764.50 432.00 C 833.00 432.01 901.50 431.99 970.00 432.00 C 970.00 499.67 970.00 567.33 970.00 635.00 C 941.01 635.01 912.02 634.98 883.04 635.01 C 868.37 635.70 853.70 634.86 839.03 635.00 C 814.19 635.00 789.35 634.99 764.50 635.00 C 764.50 652.99 764.49 670.99 764.51 688.98 C 722.02 688.64 679.51 688.76 637.01 688.76 C 610.36 688.24 583.70 688.61 557.04 688.50 C 535.36 688.64 513.69 688.06 492.00 688.25 C 467.01 688.45 442.03 687.89 417.04 688.00 C 393.35 688.06 369.67 687.54 345.97 687.76 C 331.65 687.28 317.32 687.58 303.00 687.51 C 287.69 686.89 272.35 687.61 257.03 686.99 C 244.25 687.26 231.37 686.92 218.84 684.09 C 183.39 676.56 151.36 655.48 129.16 627.00 C 110.45 603.11 98.57 573.55 97.40 543.09 C 95.46 518.81 100.09 494.17 110.06 471.99 C 126.89 434.21 159.00 403.08 198.12 389.13 C 227.91 377.22 260.63 379.63 292.01 379.76 C 308.00 379.13 324.02 379.87 340.01 379.25 C 355.65 379.17 371.30 379.41 386.95 379.13 C 409.62 378.70 432.32 379.37 455.00 378.74 C 504.35 378.92 553.69 378.31 603.05 378.50 M 348.01 411.51 C 320.98 411.52 293.95 411.45 266.93 411.54 C 256.91 412.17 246.82 411.10 236.84 412.46 C 208.12 415.88 181.14 430.38 161.51 451.48 C 144.71 469.43 133.29 492.57 130.42 517.07 C 124.64 554.31 138.80 593.31 165.32 619.73 C 177.83 632.43 193.39 641.88 210.05 648.05 C 228.40 654.56 248.11 655.87 267.42 655.59 C 319.94 655.19 372.45 655.94 424.97 655.75 C 450.32 655.57 475.67 656.17 501.02 656.00 C 525.32 656.12 549.63 655.73 573.92 656.26 C 626.62 656.05 679.30 656.63 732.00 656.50 C 732.00 574.50 732.00 492.50 732.00 410.51 C 689.66 410.38 647.34 410.94 605.01 410.75 C 587.68 410.55 570.37 411.13 553.05 411.00 C 526.36 411.00 499.67 411.01 472.98 411.00 C 431.33 411.69 389.65 410.81 348.01 411.51 M 764.49 464.27 C 764.51 510.42 764.51 556.58 764.49 602.73 C 822.24 602.77 879.99 602.74 937.74 602.75 C 938.25 556.59 937.90 510.41 937.99 464.25 C 880.16 464.27 822.32 464.23 764.49 464.27 Z"}),Object($.jsx)("path",{fill:t||a,opacity:"1.00",d:" M 842.49 484.02 C 853.57 483.79 864.63 484.32 875.71 484.25 C 876.25 495.35 875.68 506.46 875.04 517.54 C 864.40 517.59 853.77 516.92 843.13 517.38 C 842.74 516.32 842.40 515.20 842.48 514.06 C 842.50 504.04 842.50 494.03 842.49 484.02 Z"}),Object($.jsx)("path",{fill:t||a,opacity:"1.00",d:" M 287.02 517.49 C 345.02 517.51 403.02 517.49 461.02 517.50 C 499.18 517.57 537.34 517.29 575.49 517.75 C 575.51 528.25 575.51 538.75 575.49 549.25 C 531.01 549.74 486.52 549.41 442.04 549.50 C 390.37 549.51 338.69 549.49 287.02 549.51 C 286.99 538.84 286.99 528.16 287.02 517.49 Z"}),Object($.jsx)("path",{fill:t||a,opacity:"1.00",d:" M 842.78 549.74 C 853.53 549.91 864.26 549.51 875.01 549.44 C 875.73 560.52 876.27 571.65 875.71 582.75 C 864.63 582.80 853.57 583.17 842.49 582.99 C 842.69 571.91 842.12 560.80 842.78 549.74 Z"})]})},ee=function(e){var t=e.color,n=e.width,a=Object(Y.a)().palette.primary.main;return Object($.jsxs)("svg",{width:n||"100%",height:"100%",viewBox:"13.928732872009277 69.97769927978516 172.15252685546875 60.067893981933594",version:"1.1",xmlns:"http://www.w3.org/2000/svg",children:[Object($.jsx)("path",{fill:t||a,opacity:"1.00",d:" M 18.20 70.32 C 19.46 70.07 20.73 69.96 22.01 69.98 C 74.36 70.03 126.72 69.97 179.08 70.01 C 182.16 69.72 185.50 71.74 185.82 74.99 C 186.15 79.61 186.20 84.29 185.78 88.91 C 183.66 90.31 179.87 90.73 180.00 93.99 C 179.86 97.27 183.68 97.69 185.79 99.12 C 186.27 107.07 185.91 115.06 185.99 123.03 C 186.29 126.14 184.25 129.52 180.97 129.83 C 175.33 130.27 169.65 129.88 164.00 130.00 C 147.71 129.85 131.39 130.31 115.12 129.78 C 112.92 127.53 114.51 123.74 113.95 120.86 C 114.67 118.55 111.27 116.64 110.24 119.19 C 109.73 122.42 110.24 125.71 109.79 128.95 C 108.65 130.43 106.57 129.83 104.96 130.03 C 76.94 129.95 48.93 130.04 20.91 129.99 C 17.47 130.37 13.95 127.70 14.07 124.10 C 14.02 115.76 13.75 107.39 14.22 99.07 C 16.33 97.68 20.10 97.27 20.00 94.03 C 20.17 90.71 16.28 90.35 14.20 88.85 C 13.80 84.56 13.92 80.24 14.07 75.94 C 14.03 73.43 15.75 70.97 18.20 70.32 M 18.23 75.15 C 17.73 78.78 18.05 82.46 18.02 86.11 C 21.05 87.67 24.20 90.21 23.99 94.00 C 24.20 97.79 21.03 100.31 18.01 101.89 C 18.15 109.55 17.67 117.24 18.22 124.87 C 18.45 125.10 18.90 125.56 19.13 125.78 C 26.06 126.33 33.03 125.84 39.98 126.00 C 39.99 123.36 40.01 120.72 40.09 118.08 C 62.07 117.87 84.05 118.10 106.03 117.96 C 107.62 116.17 109.32 113.83 112.02 114.00 C 114.70 113.85 116.37 116.19 117.96 117.96 C 131.94 118.09 145.93 117.88 159.91 118.08 C 159.98 120.72 160.01 123.36 160.02 126.00 C 166.94 125.83 173.90 126.34 180.80 125.78 C 181.05 125.57 181.54 125.14 181.78 124.93 C 182.32 117.28 181.85 109.57 181.99 101.90 C 178.96 100.31 175.78 97.79 176.01 93.99 C 175.79 90.20 178.94 87.66 181.98 86.11 C 181.94 82.47 182.27 78.80 181.77 75.19 C 181.16 73.66 179.34 74.17 178.06 73.99 C 126.04 74.00 74.01 74.01 21.99 73.99 C 20.69 74.16 18.91 73.67 18.23 75.15 M 42.00 120.00 C 42.00 122.00 42.00 124.00 42.00 126.00 C 43.33 126.00 44.67 126.00 46.00 126.00 C 46.00 124.00 46.00 122.00 46.00 120.00 C 44.67 120.00 43.33 120.00 42.00 120.00 M 48.00 120.00 C 48.00 122.00 48.00 124.00 48.00 126.00 C 49.33 126.00 50.67 126.00 52.00 126.00 C 52.00 124.00 52.00 122.00 52.00 120.00 C 50.67 120.00 49.33 120.00 48.00 120.00 M 54.00 120.00 C 54.00 122.00 54.00 124.00 54.00 126.00 C 55.33 126.00 56.67 126.00 58.00 126.00 C 58.00 124.00 58.00 122.00 58.00 120.00 C 56.67 120.00 55.33 120.00 54.00 120.00 M 60.00 120.00 C 60.00 122.00 60.00 124.00 60.00 126.00 C 61.33 126.00 62.67 126.00 64.00 126.00 C 64.00 124.00 64.00 122.00 64.00 120.00 C 62.67 120.00 61.33 120.00 60.00 120.00 M 66.00 120.00 C 66.00 122.00 66.00 124.00 66.00 126.00 C 67.33 126.00 68.67 126.00 70.00 126.00 C 70.00 124.00 70.00 122.00 70.00 120.00 C 68.67 120.00 67.33 120.00 66.00 120.00 M 72.00 120.00 C 72.00 122.00 72.00 124.00 72.00 126.00 C 73.33 126.00 74.67 126.00 76.00 126.00 C 76.00 124.00 76.00 122.00 76.00 120.00 C 74.67 120.00 73.33 120.00 72.00 120.00 M 78.00 120.00 C 78.00 122.00 78.00 124.00 78.00 126.00 C 79.33 126.00 80.67 126.00 82.00 126.00 C 82.00 124.00 82.00 122.00 82.00 120.00 C 80.67 120.00 79.33 120.00 78.00 120.00 M 84.00 120.00 C 84.00 122.00 84.00 124.00 84.00 126.00 C 85.33 126.00 86.67 126.00 88.00 126.00 C 88.00 124.00 88.00 122.00 88.00 120.00 C 86.67 120.00 85.33 120.00 84.00 120.00 M 90.00 120.00 C 90.00 122.00 90.00 124.00 90.00 126.00 C 91.33 126.00 92.67 126.00 94.00 126.00 C 94.00 124.00 94.00 122.00 94.00 120.00 C 92.67 120.00 91.33 120.00 90.00 120.00 M 96.00 120.00 C 96.00 122.00 96.00 124.00 96.00 126.00 C 97.33 126.00 98.67 126.00 100.00 126.00 C 100.00 124.00 100.00 122.00 100.00 120.00 C 98.67 120.00 97.33 120.00 96.00 120.00 M 102.00 120.00 C 102.00 122.00 102.00 124.00 102.00 126.00 C 103.33 126.00 104.67 126.00 106.00 126.00 C 106.00 124.00 106.00 122.00 106.00 120.00 C 104.67 120.00 103.33 120.00 102.00 120.00 M 118.00 120.00 C 118.00 122.00 118.00 124.00 118.00 126.00 C 119.33 126.00 120.67 126.00 122.00 126.00 C 122.00 124.00 122.00 122.00 122.00 120.00 C 120.67 120.00 119.33 120.00 118.00 120.00 M 124.00 120.00 C 124.00 122.00 124.00 124.00 124.00 126.00 C 125.33 126.00 126.67 126.00 128.00 126.00 C 128.00 124.00 128.00 122.00 128.00 120.00 C 126.67 120.00 125.33 120.00 124.00 120.00 M 130.00 120.00 C 130.00 122.00 130.00 124.00 130.00 126.00 C 131.33 126.00 132.67 126.00 134.00 126.00 C 134.00 124.00 134.00 122.00 134.00 120.00 C 132.67 120.00 131.33 120.00 130.00 120.00 M 136.00 120.00 C 136.00 122.00 136.00 124.00 136.00 126.00 C 137.33 126.00 138.67 126.00 140.00 126.00 C 140.00 124.00 140.00 122.00 140.00 120.00 C 138.67 120.00 137.33 120.00 136.00 120.00 M 142.00 120.00 C 142.00 122.00 142.00 124.00 142.00 126.00 C 143.33 126.00 144.66 126.00 146.00 126.00 C 146.00 124.00 146.00 122.00 146.00 120.00 C 144.67 120.00 143.33 120.00 142.00 120.00 M 148.00 120.00 C 148.00 122.00 148.00 124.00 148.00 126.00 C 149.33 126.00 150.66 126.00 152.00 126.00 C 152.00 124.00 152.00 122.00 152.00 120.00 C 150.67 120.00 149.33 120.00 148.00 120.00 M 154.00 120.00 C 154.00 122.00 154.00 124.00 154.00 126.00 C 155.33 126.00 156.66 126.00 158.00 126.00 C 158.00 124.00 158.00 122.00 158.00 120.00 C 156.67 120.00 155.33 120.00 154.00 120.00 Z"}),Object($.jsx)("path",{fill:t||a,opacity:"1.00",d:" M 30.03 81.93 C 29.85 80.12 30.82 77.95 32.93 78.11 C 37.91 77.93 42.93 77.74 47.89 78.25 C 50.98 79.21 49.68 83.33 50.10 85.77 C 49.59 85.78 48.57 85.80 48.06 85.80 C 48.01 83.89 47.96 81.98 47.90 80.08 C 42.62 79.96 37.35 79.96 32.08 80.08 C 31.95 89.36 31.95 98.64 32.08 107.91 C 37.36 108.05 42.64 108.05 47.92 107.91 C 48.02 104.01 48.01 100.11 48.02 96.21 C 48.51 96.21 49.48 96.21 49.97 96.20 C 49.93 100.09 50.29 104.01 49.76 107.87 C 49.40 110.05 46.77 109.95 45.09 110.01 C 40.74 109.96 36.36 110.29 32.04 109.74 C 29.91 109.31 30.07 106.74 29.99 105.08 C 30.02 97.37 29.93 89.65 30.03 81.93 Z"}),Object($.jsx)("path",{fill:t||a,opacity:"1.00",d:" M 56.08 78.25 C 61.33 77.80 66.67 77.79 71.92 78.25 C 74.45 78.84 73.88 82.03 74.03 83.96 C 73.88 91.66 74.20 99.37 73.89 107.07 C 73.99 110.35 68.80 111.17 67.40 108.44 C 68.91 108.19 70.43 107.96 71.95 107.75 C 72.01 98.53 72.08 89.30 71.91 80.08 C 66.64 79.96 61.36 79.96 56.08 80.08 C 55.95 89.35 55.95 98.63 56.08 107.90 C 58.65 107.98 61.23 108.01 63.80 108.04 C 63.80 108.54 63.78 109.52 63.78 110.02 C 60.75 109.51 55.74 111.45 54.25 107.89 C 53.63 99.96 54.19 91.96 53.97 84.00 C 54.13 82.06 53.53 78.84 56.08 78.25 Z"}),Object($.jsx)("path",{fill:t||a,opacity:"1.00",d:" M 79.38 78.49 C 84.51 77.49 89.88 78.03 95.10 78.12 C 97.17 77.98 98.14 80.11 97.97 81.89 C 98.04 89.96 98.04 98.04 97.97 106.11 C 98.13 107.87 97.20 109.99 95.14 109.88 C 90.11 110.08 85.02 110.27 80.01 109.73 C 77.91 109.26 78.05 106.71 77.99 105.04 C 77.99 97.70 77.99 90.35 77.99 83.01 C 78.12 81.47 77.82 79.41 79.38 78.49 M 80.08 80.08 C 79.95 89.36 79.95 98.64 80.08 107.92 C 85.36 108.04 90.64 108.04 95.92 107.92 C 96.05 98.64 96.05 89.36 95.92 80.08 C 90.64 79.96 85.36 79.96 80.08 80.08 Z"}),Object($.jsx)("path",{fill:t||a,opacity:"1.00",d:" M 103.34 78.52 C 108.47 77.46 113.88 78.05 119.12 78.12 C 121.20 77.99 122.14 80.13 121.97 81.91 C 122.04 89.97 122.04 98.04 121.97 106.10 C 122.14 107.87 121.19 110.00 119.12 109.88 C 114.37 110.13 109.59 110.13 104.85 109.88 C 102.80 109.99 101.86 107.88 102.03 106.13 C 101.92 98.40 102.03 90.66 101.99 82.93 C 102.13 81.44 101.84 79.43 103.34 78.52 M 104.08 80.08 C 103.95 89.36 103.95 98.64 104.08 107.92 C 109.36 108.05 114.64 108.04 119.92 107.92 C 120.06 98.64 120.05 89.36 119.92 80.08 C 114.64 79.96 109.36 79.95 104.08 80.08 Z"}),Object($.jsx)("path",{fill:t||a,opacity:"1.00",d:" M 127.43 78.45 C 131.88 77.51 136.52 78.12 141.04 77.99 C 143.01 77.87 145.98 78.22 145.88 80.86 C 146.19 88.89 145.92 96.94 146.01 104.98 C 145.93 106.67 146.12 109.28 143.96 109.74 C 141.40 110.19 138.79 109.99 136.21 110.02 C 136.21 109.52 136.21 108.53 136.21 108.04 C 138.78 108.01 141.35 107.98 143.92 107.91 C 144.05 98.63 144.06 89.35 143.92 80.08 C 138.64 79.96 133.36 79.96 128.09 80.08 C 128.02 82.64 127.99 85.21 127.96 87.78 C 127.47 87.79 126.48 87.79 125.99 87.79 C 126.38 84.77 124.90 80.72 127.43 78.45 Z"}),Object($.jsx)("path",{fill:t||a,opacity:"1.00",d:" M 151.38 78.48 C 155.82 77.48 160.48 78.14 165.01 77.99 C 167.01 77.85 170.02 78.25 169.89 80.92 C 170.18 88.94 169.92 96.98 170.01 105.01 C 170.13 107.00 169.77 109.99 167.12 109.88 C 162.10 110.07 157.02 110.27 152.02 109.74 C 149.89 109.27 150.05 106.67 149.99 104.99 C 149.99 97.64 149.99 90.30 149.99 82.95 C 150.12 81.43 149.84 79.39 151.38 78.48 M 152.08 80.08 C 151.95 89.36 151.95 98.64 152.08 107.92 C 157.36 108.04 162.64 108.04 167.92 107.92 C 168.05 98.64 168.05 89.36 167.92 80.08 C 162.64 79.96 157.36 79.96 152.08 80.08 Z"}),Object($.jsx)("path",{fill:t||a,opacity:"1.00",d:" M 48.01 88.19 C 48.50 88.19 49.49 88.19 49.99 88.19 C 49.98 90.06 49.98 91.92 49.99 93.78 C 49.49 93.79 48.51 93.79 48.01 93.79 C 48.01 91.92 48.01 90.06 48.01 88.19 Z"}),Object($.jsx)("path",{fill:t||a,opacity:"1.00",d:" M 126.01 92.19 C 126.51 92.19 127.49 92.19 127.99 92.19 C 127.98 94.06 127.98 95.93 127.98 97.80 C 127.49 97.79 126.50 97.78 126.01 97.78 C 126.01 95.91 126.01 94.05 126.01 92.19 Z"}),Object($.jsx)("path",{fill:t||a,opacity:"1.00",d:" M 125.98 100.19 C 126.48 100.19 127.47 100.19 127.96 100.19 C 127.99 102.75 128.02 105.32 128.08 107.88 C 129.98 107.95 131.89 108.01 133.81 108.07 C 133.80 108.57 133.78 109.59 133.77 110.10 C 131.39 109.71 128.07 110.79 126.45 108.53 C 125.66 105.83 126.07 102.96 125.98 100.19 Z"}),Object($.jsx)("path",{fill:t||a,opacity:"1.00",d:" M 24.41 112.66 C 27.59 110.67 32.28 113.20 32.00 117.04 C 32.18 120.52 28.24 123.02 25.11 121.66 C 21.33 120.42 20.93 114.50 24.41 112.66 M 26.15 114.12 C 24.25 114.47 23.50 116.93 24.38 118.50 C 25.45 120.81 29.45 120.37 29.89 117.81 C 30.58 115.59 28.37 113.39 26.15 114.12 Z"}),Object($.jsx)("path",{fill:t||a,opacity:"1.00",d:" M 170.48 112.62 C 173.67 110.70 178.29 113.25 178.00 117.06 C 178.16 120.55 174.19 123.04 171.06 121.64 C 167.28 120.35 166.95 114.41 170.48 112.62 M 172.11 114.13 C 169.72 114.60 169.28 118.30 171.30 119.51 C 173.13 120.90 176.17 119.39 175.97 117.02 C 176.16 114.97 173.98 113.54 172.11 114.13 Z"})]})},te=function(){var e=Object(Y.a)().palette.primary.main,t="#00a572"===e?"#74c39c":"#4a5255";return Object($.jsxs)("svg",{width:"150px",height:"150px",viewBox:"0 0 512 512",version:"1.1",xmlns:"http://www.w3.org/2000/svg",children:[Object($.jsxs)("g",{id:e,children:[Object($.jsx)("path",{fill:e,opacity:"1.00",d:" M 102.41 0.00 L 319.87 0.00 C 320.21 29.68 319.87 59.37 320.04 89.05 C 320.29 97.32 323.88 105.47 329.94 111.12 C 336.01 117.07 344.56 120.18 353.01 120.01 C 382.02 119.87 411.04 120.22 440.05 119.83 C 439.94 236.88 440.04 353.93 440.00 470.98 C 440.01 478.16 440.50 485.68 437.47 492.41 C 432.79 503.85 421.05 511.80 408.71 512.00 L 103.28 512.00 C 90.95 511.79 79.20 503.84 74.53 492.42 C 72.06 486.96 71.87 480.87 71.99 474.97 C 72.01 327.63 71.99 180.30 72.00 32.96 C 71.95 27.61 73.03 22.22 75.52 17.46 C 80.55 7.39 91.19 0.57 102.41 0.00 M 360.00 382.07 C 358.69 383.73 359.01 385.99 358.90 387.97 C 358.95 396.36 358.91 404.75 358.93 413.14 C 352.50 403.51 346.13 393.83 339.77 384.16 C 338.65 382.47 337.13 380.65 334.92 380.63 C 331.97 380.41 329.13 382.87 329.22 385.89 C 328.94 396.58 329.24 407.28 329.08 417.98 C 329.14 420.43 328.85 422.98 329.54 425.38 C 330.75 429.14 337.11 428.63 337.54 424.63 C 338.19 415.09 337.55 405.51 337.83 395.95 C 343.71 404.78 349.41 413.73 355.26 422.58 C 356.92 424.93 358.74 427.96 362.00 428.00 C 365.02 428.51 367.54 425.83 367.40 422.90 C 367.55 411.27 367.39 399.62 367.48 387.99 C 367.40 386.11 367.63 384.06 366.61 382.38 C 365.24 380.16 361.58 380.00 360.00 382.07 M 100.79 382.81 C 98.94 384.82 100.19 388.63 103.01 388.89 C 106.91 389.29 110.85 388.97 114.77 389.07 C 114.77 399.73 114.78 410.39 114.75 421.05 C 114.76 423.37 114.89 426.34 117.28 427.52 C 119.95 429.02 123.67 427.14 123.86 424.04 C 124.22 412.40 123.84 400.72 124.04 389.07 C 128.25 388.87 132.57 389.54 136.71 388.62 C 140.15 387.40 139.25 381.72 135.61 381.56 C 126.10 381.14 116.55 381.57 107.03 381.37 C 104.95 381.53 102.34 381.06 100.79 382.81 M 156.46 381.58 C 150.26 383.15 145.11 388.05 143.12 394.11 C 140.49 401.86 140.79 410.83 144.81 418.06 C 151.07 429.05 167.20 430.79 177.27 424.26 C 183.48 420.06 186.24 412.28 186.28 405.03 C 186.43 398.11 184.59 390.56 179.19 385.85 C 173.03 380.52 164.12 379.62 156.46 381.58 M 197.74 381.67 C 195.24 381.99 194.12 384.61 194.23 386.87 C 194.06 397.92 194.27 408.97 194.15 420.02 C 194.24 422.43 193.92 425.36 195.97 427.11 C 198.62 429.25 203.28 427.47 203.31 423.89 C 203.66 418.45 203.32 412.99 203.49 407.54 C 206.76 407.72 210.68 407.24 213.15 409.89 C 217.60 414.61 220.01 420.80 223.85 425.97 C 225.63 428.66 230.20 428.72 231.83 425.86 C 232.87 424.27 231.80 422.43 231.24 420.89 C 228.63 415.38 225.17 409.99 220.02 406.56 C 223.42 405.53 227.11 404.31 229.29 401.31 C 233.14 395.94 231.83 387.34 226.14 383.76 C 221.99 381.01 216.77 381.52 212.04 381.39 C 207.28 381.52 202.48 381.08 197.74 381.67 M 240.23 386.91 C 240.19 398.28 240.20 409.66 240.22 421.03 C 240.25 423.12 240.14 425.65 241.97 427.09 C 244.58 429.23 249.25 427.52 249.33 423.98 C 249.76 418.50 249.34 413.00 249.49 407.51 C 252.77 407.64 256.62 407.29 259.13 409.85 C 263.88 414.69 266.10 421.38 270.41 426.55 C 272.74 429.20 278.48 428.00 278.28 424.04 C 276.28 417.09 271.87 410.81 266.09 406.46 C 269.75 405.55 273.64 404.05 275.74 400.71 C 278.91 395.49 277.81 387.82 272.73 384.18 C 268.85 381.14 263.64 381.44 259.00 381.41 C 254.02 381.52 249.02 381.13 244.05 381.58 C 241.41 381.77 240.05 384.51 240.23 386.91 M 286.38 386.01 C 286.17 397.35 286.39 408.70 286.27 420.04 C 286.31 422.30 286.17 425.31 288.52 426.53 C 291.20 427.60 294.20 427.07 297.03 427.21 C 304.36 427.04 311.73 427.52 319.04 426.95 C 322.44 426.37 322.43 420.75 319.05 420.15 C 311.25 419.44 303.38 420.13 295.56 419.82 C 295.59 415.47 295.58 411.12 295.58 406.78 C 302.60 406.71 309.65 407.09 316.66 406.54 C 320.07 405.84 319.57 399.91 315.98 399.96 C 309.20 399.54 302.39 399.95 295.59 399.80 C 295.57 396.05 295.57 392.30 295.58 388.55 C 303.03 388.43 310.50 388.74 317.94 388.37 C 321.67 388.25 321.80 381.95 318.11 381.66 C 309.41 381.03 300.65 381.57 291.93 381.42 C 289.16 381.15 286.27 383.00 286.38 386.01 M 375.06 381.95 C 372.19 383.34 372.77 388.27 375.95 388.84 C 379.96 389.33 384.02 388.96 388.05 389.08 C 387.92 400.08 388.05 411.07 387.99 422.07 C 387.75 424.61 389.07 427.71 391.95 427.92 C 394.85 428.51 397.33 425.86 397.14 423.05 C 397.37 411.73 397.16 400.40 397.23 389.08 C 401.42 388.89 405.69 389.52 409.82 388.64 C 413.41 387.46 412.48 381.48 408.64 381.52 C 400.79 381.23 392.93 381.50 385.08 381.39 C 381.74 381.50 378.31 381.05 375.06 381.95 Z"}),Object($.jsx)("path",{fill:e,opacity:"1.00",d:" M 160.39 388.45 C 164.79 387.33 170.01 388.38 173.03 391.97 C 176.12 395.52 177.00 400.46 176.87 405.04 C 176.76 409.47 175.56 414.16 172.29 417.34 C 167.50 421.98 158.82 421.68 154.58 416.43 C 150.59 411.44 150.26 404.45 151.51 398.43 C 152.46 393.85 155.68 389.57 160.39 388.45 Z"}),Object($.jsx)("path",{fill:e,opacity:"1.00",d:" M 203.47 388.42 C 208.28 388.55 213.18 387.93 217.93 388.93 C 222.82 390.10 223.71 398.14 218.81 399.89 C 213.88 401.57 208.52 400.89 203.40 400.90 C 203.44 396.73 203.45 392.57 203.47 388.42 Z"}),Object($.jsx)("path",{fill:e,opacity:"1.00",d:" M 249.45 388.38 C 254.29 388.56 259.22 387.96 264.00 388.94 C 268.52 390.07 269.67 397.04 265.66 399.44 C 260.63 401.83 254.85 400.80 249.47 400.94 C 249.51 396.75 249.48 392.57 249.45 388.38 Z"})]}),Object($.jsx)("g",{id:t,children:Object($.jsx)("path",{fill:t,opacity:"1.00",d:" M 319.87 0.00 L 320.20 0.00 C 360.20 39.89 400.19 79.79 440.05 119.83 C 411.04 120.22 382.02 119.87 353.01 120.01 C 344.56 120.18 336.01 117.07 329.94 111.12 C 323.88 105.47 320.29 97.32 320.04 89.05 C 319.87 59.37 320.21 29.68 319.87 0.00 Z"})}),Object($.jsxs)("g",{id:"#fdfdfd",children:[Object($.jsx)("path",{fill:"#fdfdfd",opacity:"1.00",d:" M 360.00 382.07 C 361.58 380.00 365.24 380.16 366.61 382.38 C 367.63 384.06 367.40 386.11 367.48 387.99 C 367.39 399.62 367.55 411.27 367.40 422.90 C 367.54 425.83 365.02 428.51 362.00 428.00 C 358.74 427.96 356.92 424.93 355.26 422.58 C 349.41 413.73 343.71 404.78 337.83 395.95 C 337.55 405.51 338.19 415.09 337.54 424.63 C 337.11 428.63 330.75 429.14 329.54 425.38 C 328.85 422.98 329.14 420.43 329.08 417.98 C 329.24 407.28 328.94 396.58 329.22 385.89 C 329.13 382.87 331.97 380.41 334.92 380.63 C 337.13 380.65 338.65 382.47 339.77 384.16 C 346.13 393.83 352.50 403.51 358.93 413.14 C 358.91 404.75 358.95 396.36 358.90 387.97 C 359.01 385.99 358.69 383.73 360.00 382.07 Z"}),Object($.jsx)("path",{fill:"#fdfdfd",opacity:"1.00",d:" M 100.79 382.81 C 102.34 381.06 104.95 381.53 107.03 381.37 C 116.55 381.57 126.10 381.14 135.61 381.56 C 139.25 381.72 140.15 387.40 136.71 388.62 C 132.57 389.54 128.25 388.87 124.04 389.07 C 123.84 400.72 124.22 412.40 123.86 424.04 C 123.67 427.14 119.95 429.02 117.28 427.52 C 114.89 426.34 114.76 423.37 114.75 421.05 C 114.78 410.39 114.77 399.73 114.77 389.07 C 110.85 388.97 106.91 389.29 103.01 388.89 C 100.19 388.63 98.94 384.82 100.79 382.81 Z"}),Object($.jsx)("path",{fill:"#fdfdfd",opacity:"1.00",d:" M 156.46 381.58 C 164.12 379.62 173.03 380.52 179.19 385.85 C 184.59 390.56 186.43 398.11 186.28 405.03 C 186.24 412.28 183.48 420.06 177.27 424.26 C 167.20 430.79 151.07 429.05 144.81 418.06 C 140.79 410.83 140.49 401.86 143.12 394.11 C 145.11 388.05 150.26 383.15 156.46 381.58 M 160.39 388.45 C 155.68 389.57 152.46 393.85 151.51 398.43 C 150.26 404.45 150.59 411.44 154.58 416.43 C 158.82 421.68 167.50 421.98 172.29 417.34 C 175.56 414.16 176.76 409.47 176.87 405.04 C 177.00 400.46 176.12 395.52 173.03 391.97 C 170.01 388.38 164.79 387.33 160.39 388.45 Z"}),Object($.jsx)("path",{fill:"#fdfdfd",opacity:"1.00",d:" M 197.74 381.67 C 202.48 381.08 207.28 381.52 212.04 381.39 C 216.77 381.52 221.99 381.01 226.14 383.76 C 231.83 387.34 233.14 395.94 229.29 401.31 C 227.11 404.31 223.42 405.53 220.02 406.56 C 225.17 409.99 228.63 415.38 231.24 420.89 C 231.80 422.43 232.87 424.27 231.83 425.86 C 230.20 428.72 225.63 428.66 223.85 425.97 C 220.01 420.80 217.60 414.61 213.15 409.89 C 210.68 407.24 206.76 407.72 203.49 407.54 C 203.32 412.99 203.66 418.45 203.31 423.89 C 203.28 427.47 198.62 429.25 195.97 427.11 C 193.92 425.36 194.24 422.43 194.15 420.02 C 194.27 408.97 194.06 397.92 194.23 386.87 C 194.12 384.61 195.24 381.99 197.74 381.67 M 203.47 388.42 C 203.45 392.57 203.44 396.73 203.40 400.90 C 208.52 400.89 213.88 401.57 218.81 399.89 C 223.71 398.14 222.82 390.10 217.93 388.93 C 213.18 387.93 208.28 388.55 203.47 388.42 Z"}),Object($.jsx)("path",{fill:"#fdfdfd",opacity:"1.00",d:" M 240.23 386.91 C 240.05 384.51 241.41 381.77 244.05 381.58 C 249.02 381.13 254.02 381.52 259.00 381.41 C 263.64 381.44 268.85 381.14 272.73 384.18 C 277.81 387.82 278.91 395.49 275.74 400.71 C 273.64 404.05 269.75 405.55 266.09 406.46 C 271.87 410.81 276.28 417.09 278.28 424.04 C 278.48 428.00 272.74 429.20 270.41 426.55 C 266.10 421.38 263.88 414.69 259.13 409.85 C 256.62 407.29 252.77 407.64 249.49 407.51 C 249.34 413.00 249.76 418.50 249.33 423.98 C 249.25 427.52 244.58 429.23 241.97 427.09 C 240.14 425.65 240.25 423.12 240.22 421.03 C 240.20 409.66 240.19 398.28 240.23 386.91 M 249.45 388.38 C 249.48 392.57 249.51 396.75 249.47 400.94 C 254.85 400.80 260.63 401.83 265.66 399.44 C 269.67 397.04 268.52 390.07 264.00 388.94 C 259.22 387.96 254.29 388.56 249.45 388.38 Z"}),Object($.jsx)("path",{fill:"#fdfdfd",opacity:"1.00",d:" M 286.38 386.01 C 286.27 383.00 289.16 381.15 291.93 381.42 C 300.65 381.57 309.41 381.03 318.11 381.66 C 321.80 381.95 321.67 388.25 317.94 388.37 C 310.50 388.74 303.03 388.43 295.58 388.55 C 295.57 392.30 295.57 396.05 295.59 399.80 C 302.39 399.95 309.20 399.54 315.98 399.96 C 319.57 399.91 320.07 405.84 316.66 406.54 C 309.65 407.09 302.60 406.71 295.58 406.78 C 295.58 411.12 295.59 415.47 295.56 419.82 C 303.38 420.13 311.25 419.44 319.05 420.15 C 322.43 420.75 322.44 426.37 319.04 426.95 C 311.73 427.52 304.36 427.04 297.03 427.21 C 294.20 427.07 291.20 427.60 288.52 426.53 C 286.17 425.31 286.31 422.30 286.27 420.04 C 286.39 408.70 286.17 397.35 286.38 386.01 Z"}),Object($.jsx)("path",{fill:"#fdfdfd",opacity:"1.00",d:" M 375.06 381.95 C 378.31 381.05 381.74 381.50 385.08 381.39 C 392.93 381.50 400.79 381.23 408.64 381.52 C 412.48 381.48 413.41 387.46 409.82 388.64 C 405.69 389.52 401.42 388.89 397.23 389.08 C 397.16 400.40 397.37 411.73 397.14 423.05 C 397.33 425.86 394.85 428.51 391.95 427.92 C 389.07 427.71 387.75 424.61 387.99 422.07 C 388.05 411.07 387.92 400.08 388.05 389.08 C 384.02 388.96 379.96 389.33 375.95 388.84 C 372.77 388.27 372.19 383.34 375.06 381.95 Z"})]})]})},ne=n(387),ae=n(442),re=n(24),ie=n.n(re),oe=n(441),ce=n(484),le=function(e){var t=Object(a.useState)({}),n=Object(l.a)(t,2),r=n[0],i=n[1],o=Object(a.useRef)(!0),c=Object(a.useRef)(null);return Object(a.useEffect)((function(){return function(){o.current=!1}}),[]),Object(a.useEffect)((function(){return e?c.current=setInterval((function(){var t=function(e){return o.current&&i(e)};P.a.post("".concat(C,"/cache"),{action:"get",hash:e}).then((function(e){var n=e.data;return t(n)})).catch((function(){return t({})}))}),100):clearInterval(c.current),function(){return clearInterval(c.current)}}),[e]),r},se=n(428),de=n(430),pe=n(431),je=n(106),be=n.n(je),ue=n(432),he=Object(se.a)((function(e){return{appBar:{position:"relative"},title:{marginLeft:"6px",flex:1}}}));function xe(e){var t=e.title,n=e.onClose,a=e.onBack,r=Object(ce.a)().t,i=he();return Object($.jsx)(de.a,{className:i.appBar,children:Object($.jsxs)(pe.a,{children:[Object($.jsx)(p.a,{edge:"start",color:"inherit",onClick:a||n,"aria-label":"close",children:a?Object($.jsx)(ue.a,{}):Object($.jsx)(be.a,{})}),Object($.jsx)(d.a,{variant:"h6",className:i.title,children:t}),a&&Object($.jsx)(ne.a,{autoFocus:!0,color:"inherit",onClick:n,children:r("Close")})]})})}var ge,me,Oe,fe,Ce,ve,ye,we,Se,De,ke,Te=n(181),Pe=n(84),Me=n.n(Pe),Be=n(195),Re=n(433),Le=n(29),Ae={light:{app:{headerToggleColor:"#4db380",appSecondaryColor:"#cbe8d9",sidebarBGColor:"#575757",sidebarFillColor:"#dee3e5"},torrentCard:{accentCardColor:"#337a57",buttonBGColor:Object(Le.a)("#337a57",.5),cardPrimaryColor:"#00a572",cardSecondaryColor:"#74c39c"},dialogTorrentDetailsContent:{posterBGColor:"#74c39c",gradientStartColor:"#e4f6ed",gradientEndColor:"#b5dec9",chacheSectionBGColor:"#88cdaa",widgetFontColor:"#fff",titleFontColor:"#000",subNameFontColor:"#7c7b7c",torrentFilesSectionBGColor:"#f1eff3"},detailedView:{gradientStartColor:"#e4f6ed",gradientEndColor:"#b5dec9",cacheSectionBGColor:"#fff"},addDialog:{gradientStartColor:"#e4f6ed",gradientEndColor:"#b5dec9",fontColor:"#000",notificationErrorBGColor:"#cda184",notificationSuccessBGColor:"#88cdaa",languageSwitchBGColor:"#74c39c",languageSwitchFontColor:"#e4f6ed",posterBGColor:"#74c39c"},torrentFunctions:{fontColor:"#000"},table:{defaultPrimaryColor:"#009879",defaultSecondaryColor:"#00a383",defaultTertiaryColor:"#03aa89"},settingsDialog:{contentBG:"#f1eff3",footerBG:"#fff"}},dark:{app:{headerToggleColor:"#545a5e",appSecondaryColor:"#545a5e",sidebarBGColor:"#323637",sidebarFillColor:"#dee3e5"},torrentCard:{accentCardColor:"#323637",buttonBGColor:Object(Le.a)("#323637",.5),cardPrimaryColor:"#545a5e",cardSecondaryColor:Object(Le.a)("#dee3e5",.4)},dialogTorrentDetailsContent:{posterBGColor:Object(Le.a)("#dee3e5",.4),gradientStartColor:"#656f76",gradientEndColor:"#545a5e",chacheSectionBGColor:"#3c4244",widgetFontColor:Object(Le.a)("#fff",.8),titleFontColor:"#f1eff3",subNameFontColor:"#dee3e5",torrentFilesSectionBGColor:Object(Le.a)("#545a5e",.9)},detailedView:{gradientStartColor:"#656f76",gradientEndColor:"#545a5e",cacheSectionBGColor:"#dee3e5"},addDialog:{gradientStartColor:"#656f76",gradientEndColor:"#545a5e",fontColor:"#fff",notificationErrorBGColor:"#c82e3f",notificationSuccessBGColor:"#323637",languageSwitchBGColor:"#545a5e",languageSwitchFontColor:"#dee3e5",posterBGColor:"#dee3e5"},torrentFunctions:{fontColor:"#f1eff3"},table:{defaultPrimaryColor:"#323637",defaultSecondaryColor:Object(Le.a)("#545a5e",.9),defaultTertiaryColor:"#545a5e"},settingsDialog:{contentBG:"#5a6166",footerBG:"#323637"}}},ze={light:{primary:"#00a572",secondary:"#00a572",labels:Object(Le.a)("#000",.9)},dark:{primary:"#323637",secondary:"#dee3e5",labels:Object(Le.a)("#fff",.9)}},Fe="light",Ee="dark",Ge="auto",Ne={fontFamily:"Open Sans, sans-serif"},Ie=(Object(Be.a)({typography:Ne,palette:{type:Ee,primary:{main:ze.dark.primary},secondary:{main:ze.dark.secondary}}}),Object(Be.a)({typography:Ne,palette:{type:Fe,primary:{main:ze.light.primary},secondary:{main:ze.light.secondary}}})),Ue=n(4),He=n(3),We={dark:{default:{borderWidth:2,pieceSize:14,gapBetweenPieces:3,borderColor:ze.dark.secondary,completeColor:Object(Le.a)(ze.dark.primary,.65),backgroundColor:"#f1eff3",progressColor:ze.dark.secondary,readerColor:"#000",rangeColor:"#cda184"},mini:{cacheMaxHeight:340,borderWidth:2,pieceSize:23,gapBetweenPieces:6,borderColor:"#545a5e",completeColor:"#545a5e",backgroundColor:"#dee3e5",progressColor:"#dee3e5",readerColor:"#000",rangeColor:"#cda184"}},light:{default:{borderWidth:1,pieceSize:14,gapBetweenPieces:3,borderColor:"#dbf2e8",completeColor:ze.light.primary,backgroundColor:"#fff",progressColor:"#b3dfc9",readerColor:"#000",rangeColor:"#afa6e3"},mini:{cacheMaxHeight:340,borderWidth:2,pieceSize:23,gapBetweenPieces:6,borderColor:"#4db380",completeColor:"#4db380",backgroundColor:"#dbf2e8",progressColor:"#dbf2e8",readerColor:"#2d714f",rangeColor:"#afa6e3"}}},Ve=He.d.div(ge||(ge=Object(Ue.a)(["\n margin-top: 10px;\n text-transform: uppercase;\n color: rgba(0, 0, 0, 0.5);\n align-self: center;\n"]))),Ze=He.d.div(me||(me=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.isMini,n=e.themeType;return Object(He.c)(Oe||(Oe=Object(Ue.a)(["\n ","\n\n canvas {\n display: block;\n }\n "])),t&&Object(He.c)(fe||(fe=Object(Ue.a)(["\n display: grid;\n justify-content: center;\n max-height: ","px;\n overflow: auto;\n "])),We[n].mini.cacheMaxHeight))})),_e=function(e){var t,n=e.cache,r=e.isMini,i=Object(ce.a)().t,o=Object(a.useState)({width:0,height:0}),c=Object(l.a)(o,2),s=c[0],d=c[1],p=s.width,j=Object(a.useRef)(null),b=Object(a.useRef)(null),u=function(e){var t=Object(a.useState)([]),n=Object(l.a)(t,2),r=n[0],i=n[1];return Object(a.useEffect)((function(){for(var t=e.PiecesCount,n=e.Pieces,a=e.Readers,r=[],o=function(e){var t=n[e]||{},i=t.Size,o=t.Length,c={id:e,percentage:i/o*100||0};a.forEach((function(t){e===t.Reader&&(c.isReader=!0),e>=t.Start&&e<=t.End&&(c.isReaderRange=!0)})),r.push(c)},c=0;c0})),i=function(e){return e%a===0?e-1:e+a-e%a-1||0},o=i(n),c=i(r.length),l=Math.max(c,o)-r.length+1,s=l?new Array(l).fill({}):[];return[].concat(Object(E.a)(r),Object(E.a)(s))}({cacheMap:u,preloadPiecesAmount:Math.round(n.Capacity/n.PiecesLength-1),piecesInOneRow:P}));var M=r?t:u,B=Math.ceil((k-T*P)/2),R=Math.ceil(M.length/P)*T;return Object(a.useEffect)((function(){if(k&&R){var e=j.current;e.width=k,e.height=R,b.current=e.getContext("2d")}}),[j,R,k]),Object(a.useEffect)((function(){var e=b.current;e&&(e.clearRect(0,0,k,R),M.forEach((function(t,n){var a=t.percentage,r=t.isReader,i=t.isReaderRange,o=a>0&&a<100,c=100===a,l=n%P,s=Math.floor(n/P),d=f%2===0?0:.5,p=Math.ceil(f/2)+1+d,j=l*C+l*v+B+p,b=s*C+s*v+p;e.lineWidth=f,e.fillStyle=o?function(e,t,n,a){var r=We[n][a],i=r.pieceSize,o=r.completeColor,c=r.progressColor,l=e.createLinearGradient(0,i,0,0);return l.addColorStop(0,o),l.addColorStop(t/100,o),l.addColorStop(t/100,c),l.addColorStop(1,c),l}(e,a,x,h):c?D:y,e.strokeStyle=r?m:o||c?D:i?O:w,e.translate(j,b),e.fillRect(0,0,C,C),e.strokeRect(0,0,C,C),e.setTransform(1,0,0,1,0,0)})))}),[u,R,k,P,B,C,v,M,y,w,f,h,D,m,O,x]),Object($.jsx)(Te.a,{bounds:!0,onResize:function(e){var t=e.bounds;return d(t)},children:function(e){var t=e.measureRef;return Object($.jsxs)("div",{style:{display:"flex",flexDirection:"column"},ref:t,children:[Object($.jsx)(Ze,{themeType:x,isMini:r,children:Object($.jsx)("canvas",{ref:j})}),r&&R>=S&&Object($.jsx)(Ve,{children:i("ScrollDown")})]})}})},Ke=Object(a.memo)(_e,(function(e,t){return Me()(e.cache.Pieces,t.cache.Pieces)&&Me()(e.cache.Readers,t.cache.Readers)})),Je=n(85),Ye=n.n(Je),$e="#bdbdbd",Xe=Object(He.c)(Ce||(Ce=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.theme.table.defaultPrimaryColor;return Object(He.c)(ve||(ve=Object(Ue.a)(["\n :before {\n content: '';\n width: 10px;\n height: 10px;\n background: ",";\n border-radius: 50%;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n "])),t)})),qe=He.d.table(ye||(ye=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.theme.table.defaultPrimaryColor;return Object(He.c)(we||(we=Object(Ue.a)(["\n border-collapse: collapse;\n margin: 25px 0;\n font-size: 0.9em;\n width: 100%;\n border-radius: 5px 5px 0 0;\n overflow: hidden;\n box-shadow: 0 0 20px rgba(0, 0, 0, 0.15);\n color: #000;\n\n thead tr {\n background: ",";\n color: #fff;\n text-align: left;\n text-transform: uppercase;\n }\n\n th,\n td {\n padding: 12px 15px;\n }\n\n tbody tr {\n border-bottom: 1px solid ",";\n background: ",";\n\n :last-of-type {\n border-bottom: 2px solid ",";\n }\n\n &.viewed-file-row {\n background: ",";\n }\n }\n\n td {\n &.viewed-file-indicator {\n position: relative;\n\n ","\n }\n }\n\n .button-cell {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 10px;\n }\n\n @media (max-width: 970px) {\n display: none;\n }\n "])),t,"#ddd","#fff",t,"#f3f3f3",Xe)})),Qe=He.d.div(Se||(Se=Object(Ue.a)(["\n display: grid;\n gap: 20px;\n grid-template-columns: repeat(2, 1fr);\n display: none;\n\n @media (max-width: 970px) {\n display: grid;\n }\n\n @media (max-width: 820px) {\n gap: 15px;\n grid-template-columns: 1fr;\n }\n"]))),et=He.d.div(De||(De=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.isViewed,n=e.theme.table,a=n.defaultPrimaryColor,r=n.defaultSecondaryColor,i=n.defaultTertiaryColor;return Object(He.c)(ke||(ke=Object(Ue.a)(["\n width: 100%;\n grid-template-rows: repeat(3, max-content);\n border-radius: 5px;\n overflow: hidden;\n box-shadow: 0 0 20px rgba(0, 0, 0, 0.15);\n\n .short-table {\n &-name {\n background: ",";\n display: grid;\n place-items: center;\n padding: 15px;\n color: #fff;\n text-transform: uppercase;\n font-size: 15px;\n font-weight: bold;\n\n @media (max-width: 880px) {\n font-size: 13px;\n padding: 10px;\n }\n }\n &-data {\n display: grid;\n grid-auto-flow: column;\n grid-template-columns: ",";\n grid-auto-columns: 1fr;\n }\n &-field {\n display: grid;\n grid-template-rows: 30px 1fr;\n background: black;\n :not(:last-child) {\n border-right: 1px solid ",";\n }\n\n &-name {\n background: ",";\n color: #fff;\n text-transform: uppercase;\n font-size: 12px;\n font-weight: 500;\n display: grid;\n place-items: center;\n padding: 0 10px;\n\n @media (max-width: 880px) {\n font-size: 11px;\n }\n }\n\n &-value {\n background: ",";\n display: grid;\n place-items: center;\n color: #fff;\n font-size: 15px;\n padding: 15px 10px;\n position: relative;\n\n @media (max-width: 880px) {\n font-size: 13px;\n padding: 12px 8px;\n }\n }\n }\n\n &-viewed-indicator {\n ","\n }\n\n &-buttons {\n padding: 20px;\n border-bottom: 2px solid ",";\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n align-items: center;\n gap: 20px;\n background: #fff;\n\n @media (max-width: 410px) {\n gap: 10px;\n grid-template-columns: 1fr;\n }\n }\n }\n "])),t?$e:a,t?"max-content":"1fr",t?$e:a,t?"#c4c4c4":r,t?"#c9c9c9":i,t&&Xe,t?$e:a)})),tt=n(0).memo;ie.a.addHandler("episode",/(\d{1,4})[- |. ]\u0441\u0435\u0440\u0438\u044f|\u0441\u0435\u0440\u0438\u044f[- |. ](\d{1,4})/i,{type:"integer"}),ie.a.addHandler("season",/sezon[- |. ](\d{1,3})|(\d{1,3})[- |. ]sezon/i,{type:"integer"}),ie.a.addHandler("season",/\u0441\u0435\u0437\u043e\u043d[- |. ](\d{1,3})|(\d{1,3})[- |. ]\u0441\u0435\u0437\u043e\u043d/i,{type:"integer"});var nt,at,rt,it,ot,ct,lt,st,dt,pt,jt,bt,ut,ht,xt,gt,mt,Ot,ft,Ct,vt,yt,wt,St,Dt,kt,Tt,Pt,Mt,Bt,Rt,Lt,At,zt,Ft,Et,Gt,Nt=tt((function(e){var t=e.playableFileList,n=e.viewedFileList,a=e.selectedSeason,r=e.seasonAmount,i=e.hash,o=Object(ce.a)().t,c=function(e){return fetch("".concat(S(),"?link=").concat(i,"&index=").concat(e,"&preload"))},l=function(e,t){return"".concat(S(),"/").concat(encodeURIComponent(e.split("\\").pop().split("/").pop()),"?link=").concat(i,"&index=").concat(t,"&play")},s=!!(null===t||void 0===t?void 0:t.find((function(e){var t=e.path;return ie.a.parse(t).episode}))),d=!!(null===t||void 0===t?void 0:t.find((function(e){var t=e.path;return ie.a.parse(t).season}))),p=!!(null===t||void 0===t?void 0:t.find((function(e){var t=e.path;return ie.a.parse(t).resolution}))),j=t.length>1&&!s;return(null===t||void 0===t?void 0:t.length)?Object($.jsxs)($.Fragment,{children:[Object($.jsxs)(qe,{children:[Object($.jsx)("thead",{children:Object($.jsxs)("tr",{children:[Object($.jsx)("th",{style:{width:"0"},children:o("Viewed")}),Object($.jsx)("th",{children:o("Name")}),d&&1===(null===r||void 0===r?void 0:r.length)&&Object($.jsx)("th",{style:{width:"0"},children:o("Season")}),s&&Object($.jsx)("th",{style:{width:"0"},children:o("Episode")}),p&&Object($.jsx)("th",{style:{width:"0"},children:o("Resolution")}),Object($.jsx)("th",{style:{width:"100px"},children:o("Size")}),Object($.jsx)("th",{style:{width:"400px"},children:o("Actions")})]})}),Object($.jsx)("tbody",{children:t.map((function(e){var t=e.id,i=e.path,b=e.length,u=ie.a.parse(i),h=u.title,x=u.resolution,g=u.episode,m=u.season,O=null===n||void 0===n?void 0:n.includes(t),f=l(i,t);return(m===a||!(null===r||void 0===r?void 0:r.length))&&Object($.jsxs)("tr",{className:O?"viewed-file-row":null,children:[Object($.jsx)("td",{"data-label":"viewed",className:O?"viewed-file-indicator":null}),Object($.jsx)("td",{"data-label":"name",children:j?i:h}),d&&1===(null===r||void 0===r?void 0:r.length)&&Object($.jsx)("td",{"data-label":"season",children:m}),s&&Object($.jsx)("td",{"data-label":"episode",children:g}),p&&Object($.jsx)("td",{"data-label":"resolution",children:x}),Object($.jsx)("td",{"data-label":"size",children:V(b)}),Object($.jsx)("td",{children:Object($.jsxs)("div",{className:"button-cell",children:[Object($.jsx)(ne.a,{onClick:function(){return c(t)},variant:"outlined",color:"primary",size:"small",children:o("Preload")}),Object($.jsx)("a",{style:{textDecoration:"none"},href:f,target:"_blank",rel:"noreferrer",children:Object($.jsx)(ne.a,{style:{width:"100%"},variant:"outlined",color:"primary",size:"small",children:o("OpenLink")})}),Object($.jsx)(Ye.a,{text:f,children:Object($.jsx)(ne.a,{variant:"outlined",color:"primary",size:"small",children:o("CopyLink")})})]})})]},t)}))})]}),Object($.jsx)(Qe,{children:t.map((function(e){var t=e.id,i=e.path,b=e.length,u=ie.a.parse(i),h=u.title,x=u.resolution,g=u.episode,m=u.season,O=null===n||void 0===n?void 0:n.includes(t),f=l(i,t);return(m===a||!(null===r||void 0===r?void 0:r.length))&&Object($.jsxs)(et,{isViewed:O,children:[Object($.jsx)("div",{className:"short-table-name",children:j?i:h}),Object($.jsxs)("div",{className:"short-table-data",children:[O&&Object($.jsxs)("div",{className:"short-table-field",children:[Object($.jsx)("div",{className:"short-table-field-name",children:o("Viewed")}),Object($.jsx)("div",{className:"short-table-field-value",children:Object($.jsx)("div",{className:"short-table-viewed-indicator"})})]}),d&&1===(null===r||void 0===r?void 0:r.length)&&Object($.jsxs)("div",{className:"short-table-field",children:[Object($.jsx)("div",{className:"short-table-field-name",children:o("Season")}),Object($.jsx)("div",{className:"short-table-field-value",children:m})]}),s&&Object($.jsxs)("div",{className:"short-table-field",children:[Object($.jsx)("div",{className:"short-table-field-name",children:o("Episode")}),Object($.jsx)("div",{className:"short-table-field-value",children:g})]}),p&&Object($.jsxs)("div",{className:"short-table-field",children:[Object($.jsx)("div",{className:"short-table-field-name",children:o("Resolution")}),Object($.jsx)("div",{className:"short-table-field-value",children:x})]}),Object($.jsxs)("div",{className:"short-table-field",children:[Object($.jsx)("div",{className:"short-table-field-name",children:o("Size")}),Object($.jsx)("div",{className:"short-table-field-value",children:V(b)})]})]}),Object($.jsxs)("div",{className:"short-table-buttons",children:[Object($.jsx)(ne.a,{onClick:function(){return c(t)},variant:"outlined",color:"primary",size:"small",children:o("Preload")}),Object($.jsx)("a",{style:{textDecoration:"none"},href:f,target:"_blank",rel:"noreferrer",children:Object($.jsx)(ne.a,{style:{width:"100%"},variant:"outlined",color:"primary",size:"small",children:o("OpenLink")})}),Object($.jsx)(Ye.a,{text:f,children:Object($.jsx)(ne.a,{variant:"outlined",color:"primary",size:"small",children:o("CopyLink")})})]})]},t)}))})]}):"No playable files in this torrent"}),(function(e,t){return Me()(e,t)})),It=He.d.div(nt||(nt=Object(Ue.a)(["\n display: grid;\n grid-template-columns: 70% 1fr;\n grid-template-rows: repeat(2, min-content);\n grid-template-areas:\n 'main cache'\n 'file-list file-list';\n\n @media (max-width: 1450px) {\n grid-template-columns: 1fr;\n grid-template-rows: repeat(3, min-content);\n grid-template-areas:\n 'main'\n 'cache'\n 'file-list';\n }\n"]))),Ut=He.d.div(at||(at=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.poster,n=e.theme.dialogTorrentDetailsContent.posterBGColor;return Object(He.c)(rt||(rt=Object(Ue.a)(["\n height: 400px;\n border-radius: 5px;\n overflow: hidden;\n align-self: center;\n\n ","\n\n @media (max-width: 1280px) {\n align-self: start;\n }\n\n @media (max-width: 840px) {\n ","\n }\n "])),t?Object(He.c)(it||(it=Object(Ue.a)(["\n img {\n border-radius: 5px;\n height: 100%;\n }\n "]))):Object(He.c)(ot||(ot=Object(Ue.a)(["\n width: 300px;\n display: grid;\n place-items: center;\n background: ",";\n\n svg {\n transform: scale(2.5) translateY(-3px);\n }\n "])),n),t?Object(He.c)(ct||(ct=Object(Ue.a)(["\n height: 200px;\n "]))):Object(He.c)(lt||(lt=Object(Ue.a)(["\n display: none;\n "]))))})),Ht=He.d.section(st||(st=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.theme.dialogTorrentDetailsContent,n=t.gradientStartColor,a=t.gradientEndColor;return Object(He.c)(dt||(dt=Object(Ue.a)(["\n grid-area: main;\n padding: 40px;\n display: grid;\n grid-template-columns: min-content 1fr;\n gap: 30px;\n background: linear-gradient(145deg, ",", ",");\n\n @media (max-width: 840px) {\n grid-template-columns: 1fr;\n }\n\n @media (max-width: 800px) {\n padding: 20px;\n }\n "])),n,a)})),Wt=He.d.section(pt||(pt=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.theme.dialogTorrentDetailsContent.chacheSectionBGColor;return Object(He.c)(jt||(jt=Object(Ue.a)(["\n grid-area: cache;\n padding: 40px;\n display: grid;\n align-content: start;\n grid-template-rows: min-content 1fr min-content;\n background: ",";\n\n @media (max-width: 800px) {\n padding: 20px;\n }\n "])),t)})),Vt=He.d.section(bt||(bt=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.theme.dialogTorrentDetailsContent.torrentFilesSectionBGColor;return Object(He.c)(ut||(ut=Object(Ue.a)(["\n grid-area: file-list;\n padding: 40px;\n box-shadow: inset 3px 25px 8px -25px rgba(0, 0, 0, 0.5);\n background: ",";\n\n @media (max-width: 800px) {\n padding: 20px;\n }\n "])),t)})),Zt=He.d.div(ht||(ht=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.theme.dialogTorrentDetailsContent.subNameFontColor;return Object(He.c)(xt||(xt=Object(Ue.a)(["\n ","\n "])),(function(e){var n=e.mb;return Object(He.c)(gt||(gt=Object(Ue.a)(["\n ",";\n color: ",";\n\n @media (max-width: 800px) {\n ",";\n font-size: 11px;\n }\n "])),n&&"margin-bottom: ".concat(n,"px"),t,n&&"margin-bottom: ".concat(n/2,"px"))}))})),_t=He.d.div(mt||(mt=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.color,n=e.theme.dialogTorrentDetailsContent.titleFontColor;return Object(He.c)(Ot||(Ot=Object(Ue.a)(["\n ","\n "])),(function(e){var a=e.mb;return Object(He.c)(ft||(ft=Object(Ue.a)(["\n ",";\n font-size: 35px;\n font-weight: 300;\n line-height: 1;\n word-break: break-word;\n color: ",";\n\n @media (max-width: 800px) {\n font-size: 25px;\n ",";\n }\n "])),a&&"margin-bottom: ".concat(a,"px"),t||n,a&&"margin-bottom: ".concat(a/2,"px"))}))})),Kt=He.d.div(Ct||(Ct=Object(Ue.a)(["\n margin-bottom: 20px;\n"]))),Jt=He.d.div(vt||(vt=Object(Ue.a)(["\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(max-content, 220px));\n gap: 20px;\n\n @media (max-width: 800px) {\n gap: 15px;\n }\n @media (max-width: 410px) {\n gap: 10px;\n }\n\n ","\n"])),(function(e){return e.detailedView?Object(He.c)(yt||(yt=Object(Ue.a)(["\n @media (max-width: 800px) {\n grid-template-columns: repeat(2, 1fr);\n }\n @media (max-width: 410px) {\n grid-template-columns: 1fr;\n }\n "]))):Object(He.c)(wt||(wt=Object(Ue.a)(["\n @media (max-width: 800px) {\n grid-template-columns: repeat(auto-fit, minmax(max-content, 185px));\n }\n @media (max-width: 480px) {\n grid-template-columns: 1fr 1fr;\n }\n @media (max-width: 390px) {\n grid-template-columns: 1fr;\n }\n "])))})),Yt=He.d.div(St||(St=Object(Ue.a)(["\n display: grid;\n grid-template-columns: 40px 1fr;\n grid-template-rows: min-content 50px;\n grid-template-areas:\n 'title title'\n 'icon value';\n\n > * {\n display: grid;\n place-items: center;\n }\n\n @media (max-width: 800px) {\n grid-template-columns: 30px 1fr;\n grid-template-rows: min-content 40px;\n }\n"]))),$t=He.d.div(Dt||(Dt=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.theme.dialogTorrentDetailsContent.titleFontColor;return Object(He.c)(kt||(kt=Object(Ue.a)(["\n grid-area: title;\n justify-self: start;\n text-transform: uppercase;\n font-size: 11px;\n margin-bottom: 2px;\n font-weight: 600;\n color: ",";\n "])),t)})),Xt=He.d.div(Tt||(Tt=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.bgColor;return Object(He.c)(Pt||(Pt=Object(Ue.a)(["\n grid-area: icon;\n color: ",";\n background: ",";\n border-radius: 5px 0 0 5px;\n\n @media (max-width: 800px) {\n > svg {\n width: 50%;\n }\n }\n "])),Object(Le.a)("#fff",.8),t)})),qt=He.d.div(Mt||(Mt=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.bgColor,n=e.theme.dialogTorrentDetailsContent.widgetFontColor;return Object(He.c)(Bt||(Bt=Object(Ue.a)(["\n grid-area: value;\n padding: 0 20px;\n color: ",";\n font-size: 25px;\n background: ",";\n border-radius: 0 5px 5px 0;\n\n @media (max-width: 800px) {\n font-size: 18px;\n padding: 0 4px;\n }\n "])),n,t)})),Qt=He.d.div.attrs((function(e){var t=e.value,n=e.fullAmount,a=e.theme.dialogTorrentDetailsContent.gradientEndColor,r=Math.min(100,100*t/n);return{style:{background:"linear-gradient(to right, ".concat(a," 0%, ").concat(a," ").concat(r,"%, #fff ").concat(r,"%, #fff 100%)")}}}))(Rt||(Rt=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.label;return Object(He.c)(Lt||(Lt=Object(Ue.a)(["\n border: 1px solid;\n padding: 10px 20px;\n border-radius: 5px;\n color: #000;\n\n :before {\n content: '","';\n display: grid;\n place-items: center;\n font-size: 20px;\n }\n "])),t)})),en=He.d.div(At||(At=Object(Ue.a)(["\n height: 1px;\n background-color: rgba(0, 0, 0, 0.12);\n margin: 30px 0;\n"]))),tn=He.d.section(zt||(zt=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.theme.detailedView,n=t.gradientStartColor,a=t.gradientEndColor;return Object(He.c)(Ft||(Ft=Object(Ue.a)(["\n padding: 40px;\n background: linear-gradient(145deg, ",", ",");\n\n @media (max-width: 800px) {\n padding: 20px;\n }\n "])),n,a)})),nn=He.d.section(Et||(Et=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.theme.detailedView.cacheSectionBGColor;return Object(He.c)(Gt||(Gt=Object(Ue.a)(["\n padding: 40px;\n box-shadow: inset 3px 25px 8px -25px rgba(0, 0, 0, 0.5);\n background: ",";\n flex: 1;\n\n @media (max-width: 800px) {\n padding: 20px;\n }\n "])),t)})),an=n(59),rn=n(434),on=n(435),cn=n(436),ln=n(437),sn=n(438),dn=n(439),pn=n(440);function jn(e){var t=e.icon,n=e.title,a=e.value,r=e.iconBg,i=e.valueBg;return Object($.jsxs)(Yt,{children:[Object($.jsx)($t,{children:n}),Object($.jsx)(Xt,{bgColor:r,children:Object($.jsx)(t,{})}),Object($.jsx)(qt,{bgColor:i,children:a})]})}var bn=Fe,un=Ee,hn={light:{downloadSpeed:{iconBGColor:"#118f00",valueBGColor:"#13a300"},uploadSpeed:{iconBGColor:"#0146ad",valueBGColor:"#0058db"},peers:{iconBGColor:"#cdc118",valueBGColor:"#d8cb18"},piecesCount:{iconBGColor:"#b6c95e",valueBGColor:"#c0d076"},piecesLength:{iconBGColor:"#0982c8",valueBGColor:"#098cd7"},status:{iconBGColor:"#aea25b",valueBGColor:"#b4aa6e"},size:{iconBGColor:"#9b01ad",valueBGColor:"#ac03bf"}},dark:{downloadSpeed:{iconBGColor:"#0c6600",valueBGColor:"#0d7000"},uploadSpeed:{iconBGColor:"#003f9e",valueBGColor:"#0047b3"},peers:{iconBGColor:"#a69c11",valueBGColor:"#b4a913"},piecesCount:{iconBGColor:"#8da136",valueBGColor:"#99ae3d"},piecesLength:{iconBGColor:"#07659c",valueBGColor:"#0872af"},status:{iconBGColor:"#938948",valueBGColor:"#9f9450"},size:{iconBGColor:"#81008f",valueBGColor:"#9102a1"}}};function xn(e){var t=Object(a.useContext)(Go).isDarkMode;return hn[t?un:bn][e]}var gn,mn,On,fn=function(e){var t=e.data,n=Object(ce.a)().t,a=xn("downloadSpeed"),r=a.iconBGColor,i=a.valueBGColor;return Object($.jsx)(jn,{title:n("DownloadSpeed"),value:Z(t)||"0 ".concat(n("bps")),iconBg:r,valueBg:i,icon:rn.a})},Cn=function(e){var t=e.data,n=Object(ce.a)().t,a=xn("uploadSpeed"),r=a.iconBGColor,i=a.valueBGColor;return Object($.jsx)(jn,{title:n("UploadSpeed"),value:Z(t)||"0 ".concat(n("bps")),iconBg:r,valueBg:i,icon:on.a})},vn=function(e){var t=e.data,n=Object(ce.a)().t,a=xn("peers"),r=a.iconBGColor,i=a.valueBGColor;return Object($.jsx)(jn,{title:n("Peers"),value:_(t)||"0 \xb7 0 / 0",iconBg:r,valueBg:i,icon:cn.a})},yn=function(e){var t=e.data,n=Object(ce.a)().t,a=xn("piecesCount"),r=a.iconBGColor,i=a.valueBGColor;return Object($.jsx)(jn,{title:n("PiecesCount"),value:t,iconBg:r,valueBg:i,icon:ln.a})},wn=function(e){var t=e.data,n=Object(ce.a)().t,a=xn("piecesLength"),r=a.iconBGColor,i=a.valueBGColor;return Object($.jsx)(jn,{title:n("PiecesLength"),value:V(t),iconBg:r,valueBg:i,icon:sn.a})},Sn=function(e){var t,n=e.stat,a=Object(ce.a)().t,r=(t={},Object(an.a)(t,1,a("TorrentGettingInfo")),Object(an.a)(t,2,a("TorrentPreload")),Object(an.a)(t,3,a("TorrentWorking")),Object(an.a)(t,4,a("TorrentClosed")),Object(an.a)(t,5,a("TorrentInDb")),t),i=xn("status"),o=i.iconBGColor,c=i.valueBGColor;return Object($.jsx)(jn,{title:a("TorrentStatus"),value:r[n],iconBg:o,valueBg:c,icon:dn.a})},Dn=function(e){var t=e.data,n=Object(ce.a)().t,a=xn("size"),r=a.iconBGColor,i=a.valueBGColor;return Object($.jsx)(jn,{title:n("TorrentSize"),value:V(t),iconBg:r,valueBg:i,icon:pn.a})};function kn(e){var t=e.downloadSpeed,n=e.uploadSpeed,a=e.torrent,r=e.torrentSize,i=e.PiecesCount,o=e.PiecesLength,c=e.stat,l=e.cache,s=Object(ce.a)().t;return Object($.jsxs)($.Fragment,{children:[Object($.jsxs)(tn,{children:[Object($.jsx)(_t,{mb:20,children:s("Data")}),Object($.jsxs)(Jt,{detailedView:!0,children:[Object($.jsx)(fn,{data:t}),Object($.jsx)(Cn,{data:n}),Object($.jsx)(vn,{data:a}),Object($.jsx)(Dn,{data:r}),Object($.jsx)(yn,{data:i}),Object($.jsx)(wn,{data:o}),Object($.jsx)(Sn,{stat:c})]})]}),Object($.jsxs)(nn,{children:[Object($.jsx)(_t,{color:"#000",mb:20,children:s("Cache")}),Object($.jsx)(Ke,{cache:l})]})]})}var Tn=He.d.div(gn||(gn=Object(Ue.a)(["\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 20px;\n\n :not(:last-child) {\n margin-bottom: 30px;\n }\n\n @media (max-width: 1580px) {\n grid-template-columns: repeat(2, 1fr);\n }\n\n @media (max-width: 880px) {\n grid-template-columns: 1fr;\n }\n"]))),Pn=He.d.div(mn||(mn=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.mb,n=e.theme.torrentFunctions.fontColor;return Object(He.c)(On||(On=Object(Ue.a)(["\n ",";\n font-size: 20px;\n font-weight: 300;\n line-height: 1;\n color: ",";\n\n @media (max-width: 800px) {\n font-size: 18px;\n ",";\n }\n "])),t&&"margin-bottom: ".concat(t,"px"),n,t&&"margin-bottom: ".concat(t/1.5,"px"))})),Mn=Object(a.memo)((function(e){var t,n=e.hash,a=e.viewedFileList,r=e.playableFileList,i=e.name,o=e.title,c=e.setViewedFileList,l=Object(ce.a)().t,s=null===a||void 0===a?void 0:a[(null===a||void 0===a?void 0:a.length)-1],d=null===r||void 0===r||null===(t=r.find((function(e){return e.id===s})))||void 0===t?void 0:t.path,p=1===(null===r||void 0===r?void 0:r.length),j=d&&ie.a.parse(d),b="".concat("".concat(C,"/stream"),"/").concat(encodeURIComponent(i||o||"file"),".m3u?link=").concat(n,"&m3u"),u="".concat(b,"&fromlast");return Object($.jsxs)($.Fragment,{children:[!p&&!!(null===a||void 0===a?void 0:a.length)&&Object($.jsxs)($.Fragment,{children:[Object($.jsx)(Pn,{children:l("DownloadPlaylist")}),Object($.jsxs)(Zt,{mb:10,children:[Object($.jsx)("strong",{children:l("LatestFilePlayed")})," ",null===j||void 0===j?void 0:j.title,".",(null===j||void 0===j?void 0:j.season)&&Object($.jsxs)($.Fragment,{children:[" ",l("Season"),": ",null===j||void 0===j?void 0:j.season,". ",l("Episode"),": ",null===j||void 0===j?void 0:j.episode,"."]})]}),Object($.jsxs)(Tn,{children:[Object($.jsx)("a",{style:{textDecoration:"none"},href:b,children:Object($.jsx)(ne.a,{style:{width:"100%"},variant:"contained",color:"primary",size:"large",children:l("Full")})}),Object($.jsx)("a",{style:{textDecoration:"none"},href:u,children:Object($.jsx)(ne.a,{style:{width:"100%"},variant:"contained",color:"primary",size:"large",children:l("FromLatestFile")})})]})]}),Object($.jsx)(Pn,{mb:10,children:l("TorrentState")}),Object($.jsxs)(Tn,{children:[Object($.jsx)(ne.a,{onClick:function(){return P.a.post(y(),{action:"rem",hash:n,file_index:-1}).then((function(){return c()}))},variant:"contained",color:"primary",size:"large",children:l("RemoveViews")}),Object($.jsx)(ne.a,{onClick:function(){return P.a.post(v(),{action:"drop",hash:n})},variant:"contained",color:"primary",size:"large",children:l("DropTorrent")})]}),Object($.jsx)(Pn,{mb:10,children:l("Info")}),Object($.jsxs)(Tn,{children:[(p||!(null===a||void 0===a?void 0:a.length))&&Object($.jsx)("a",{style:{textDecoration:"none"},href:b,children:Object($.jsx)(ne.a,{style:{width:"100%"},variant:"contained",color:"primary",size:"large",children:l("DownloadPlaylist")})}),Object($.jsx)(Je.CopyToClipboard,{text:n,children:Object($.jsx)(ne.a,{variant:"contained",color:"primary",size:"large",children:l("CopyHash")})})]})]})}),(function(){return!0})),Bn=["3g2","3gp","aaf","asf","avchd","avi","drc","flv","iso","m2v","m2ts","m4p","m4v","mkv","mng","mov","mp2","mp4","mpe","mpeg","mpg","mpv","mxf","nsv","ogg","ogv","ts","qt","rm","rmvb","roq","svi","vob","webm","wmv","yuv","aac","aiff","ape","au","flac","gsm","it","m3u","m4a","mid","mod","mp3","mpa","pls","ra","s3m","sid","wav","wma","xm"],Rn=function(){return Object($.jsx)("div",{style:{minHeight:"80vh",display:"grid",placeItems:"center"},children:Object($.jsx)(oe.a,{color:"secondary"})})};function Ln(e){var t,n=e.closeDialog,r=e.torrent,i=Object(ce.a)().t,o=Object(a.useState)(!0),c=Object(l.a)(o,2),s=c[0],d=c[1],p=Object(a.useState)(!1),j=Object(l.a)(p,2),b=j[0],u=j[1],h=Object(a.useState)(),x=Object(l.a)(h,2),g=x[0],m=x[1],O=Object(a.useState)(),f=Object(l.a)(O,2),C=f[0],v=f[1],S=Object(a.useState)(null),D=Object(l.a)(S,2),k=D[0],T=D[1],B=Object(a.useState)(),R=Object(l.a)(B,2),L=R[0],A=R[1],z=r.poster,F=r.hash,E=r.title,G=r.name,N=r.stat,I=r.download_speed,U=r.upload_speed,H=r.torrent_size,W=r.file_stats,Z=le(F),_=function(e){var t=Object(a.useState)(),n=Object(l.a)(t,2),r=n[0],i=n[1];return Object(a.useEffect)((function(){P.a.post(w(),{action:"get"}).then((function(e){var t=e.data;return i(t)}))}),[e]),r}(Z),J=Z.Capacity,Y=Z.PiecesCount,q=Z.PiecesLength,Q=Z.Filled;Object(a.useEffect)((function(){if(C&&null===k){var e=[];C.forEach((function(t){var n=t.path,a=ie.a.parse(n).season;a&&!e.includes(a)&&e.push(a)})),e.length&&A(e[0]),T(e.sort((function(e,t){return e-t})))}}),[C,k]),Object(a.useEffect)((function(){v(null===W||void 0===W?void 0:W.filter((function(e){var t,n=e.path;return t=n,Bn.includes(function(e){var t=e.split(".").pop();return t===e?"":t.toLowerCase()}(t))})))}),[W]),Object(a.useEffect)((function(){var e=!!Object.entries(Z).length,t=1!==N&&5!==N;e||s||d(!0),e&&s&&t&&d(!1)}),[N,Z,s]),Object(a.useEffect)((function(){P.a.post(y(),{action:"list",hash:F}).then((function(e){var t=e.data;if(t){var n=t.map((function(e){return e.file_index})).sort((function(e,t){return e-t}));m(n)}else m()}))}),[F]);var ee=J/100*(null===_||void 0===_?void 0:_.PreloadCache),te=ee>33554432?ee:33554432,re=function(){var e=[],t=G&&ie.a.parse(G);E!==G?e.push(K(E)):(null===t||void 0===t?void 0:t.title)&&e.push(K(null===t||void 0===t?void 0:t.title)),(null===t||void 0===t?void 0:t.year)&&!e[0].includes(null===t||void 0===t?void 0:t.year)&&e.push(null===t||void 0===t?void 0:t.year),(null===t||void 0===t?void 0:t.resolution)&&!e[0].includes(null===t||void 0===t?void 0:t.resolution)&&e.push(null===t||void 0===t?void 0:t.resolution);var n=e.join(". ");return"."===n[n.length-1]&&"."===n[n.length-2]?"".concat(n,"."):n};return Object($.jsxs)($.Fragment,{children:[Object($.jsx)(xe,Object(M.a)({onClose:n,title:i(b?"DetailedCacheView.header":"TorrentDetails")},b&&{onBack:function(){return u(!1)}})),Object($.jsx)("div",{style:Object(M.a)({minHeight:"80vh",overflow:"auto"},b&&{display:"flex",flexDirection:"column"}),children:s?Object($.jsx)(Rn,{}):b?Object($.jsx)(kn,{downloadSpeed:I,uploadSpeed:U,torrent:r,torrentSize:H,PiecesCount:Y,PiecesLength:q,stat:N,cache:Z}):Object($.jsxs)(It,{children:[Object($.jsxs)(Ht,{children:[Object($.jsx)(Ut,{poster:z,children:z?Object($.jsx)("img",{alt:"poster",src:z}):Object($.jsx)(X,{})}),Object($.jsxs)("div",{children:[E&&G!==E?re().length>90?Object($.jsxs)($.Fragment,{children:[Object($.jsx)(_t,{children:ie.a.parse(G).title}),Object($.jsx)(Zt,{mb:20,children:re()})]}):Object($.jsxs)($.Fragment,{children:[Object($.jsx)(_t,{children:re()}),Object($.jsx)(Zt,{mb:20,children:null===(t=ie.a.parse(G||""))||void 0===t?void 0:t.title})]}):Object($.jsx)(_t,{mb:20,children:re()}),Object($.jsxs)(Jt,{children:[Object($.jsx)(fn,{data:I}),Object($.jsx)(Cn,{data:U}),Object($.jsx)(vn,{data:r}),Object($.jsx)(Dn,{data:H}),Object($.jsx)(Sn,{stat:N})]}),Object($.jsx)(en,{}),Object($.jsx)(Mn,{hash:F,viewedFileList:g,playableFileList:C,name:G,title:E,setViewedFileList:m})]})]}),Object($.jsxs)(Wt,{children:[Object($.jsxs)(Kt,{children:[Object($.jsx)(_t,{mb:20,children:i("Buffer")}),te<=33554432&&Object($.jsx)(Zt,{children:i("BufferNote")}),Object($.jsx)(Qt,{value:Q,fullAmount:te,label:"".concat(V(te)," / ").concat(V(Q)||"0 ".concat(i("B")))})]}),Object($.jsx)(Ke,{isMini:!0,cache:Z}),Object($.jsx)(ne.a,{style:{marginTop:"30px"},variant:"contained",color:"primary",size:"large",onClick:function(){return u(!0)},children:i("DetailedCacheView.button")})]}),Object($.jsxs)(Vt,{children:[Object($.jsx)(_t,{mb:20,children:i("TorrentContent")}),(null===k||void 0===k?void 0:k.length)>1&&Object($.jsxs)($.Fragment,{children:[Object($.jsx)(Zt,{mb:7,children:i("SelectSeason")}),Object($.jsx)(ae.a,{style:{marginBottom:"30px"},color:"secondary",children:k.map((function(e){return Object($.jsx)(ne.a,{variant:L===e?"contained":"outlined",onClick:function(){return A(e)},children:e},e)}))}),Object($.jsxs)(_t,{mb:20,children:[i("Season")," ",L]})]}),Object($.jsx)(Nt,{hash:F,playableFileList:C,viewedFileList:g,selectedSeason:L,seasonAmount:k})]})]})})]})}var An=n(481),zn=n(450),Fn=n(455),En=n(456),Gn=n(186),Nn=n.n(Gn),In=function(){var e=Object(ce.a)().i18n;return["en-US"===e.language||"en"===e.language?"en":e.language,function(t){return e.changeLanguage(t)}]};function Un(e){var t=Object(a.useRef)(e);return Object(a.useEffect)((function(){t.current=e}),[e]),t.current}var Hn,Wn,Vn,Zn,_n,Kn,Jn,Yn,$n,Xn,qn,Qn,ea,ta,na,aa,ra,ia,oa,ca,la,sa,da,pa,ja,ba,ua,ha,xa,ga=n(479),ma=n(107),Oa=n.n(ma),fa=He.d.div(Hn||(Hn=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.theme.primary;return Object(He.c)(Wn||(Wn=Object(Ue.a)(["\n background: ",";\n color: rgba(0, 0, 0, 0.87);\n font-size: 20px;\n color: #fff;\n font-weight: 600;\n box-shadow: 0px 2px 4px -1px rgb(0 0 0 / 20%), 0px 4px 5px 0px rgb(0 0 0 / 14%), 0px 1px 10px 0px rgb(0 0 0 / 12%);\n padding: 15px 24px;\n position: relative;\n "])),t)})),Ca=He.d.div(Vn||(Vn=Object(Ue.a)(["\n padding: 20px;\n display: flex;\n justify-content: flex-end;\n\n > :not(:last-child) {\n margin-right: 10px;\n }\n"]))),va=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"en",n="http://api.themoviedb.org/3/search/multi";return P.a.get(n,{params:{api_key:"45ddf563ac3fb845f2d5c363190d1a33",language:t,include_image_language:"".concat(t,",null,en"),query:e}}).then((function(e){return e.data.results.filter((function(e){return e.poster_path})).map((function(e){return"https://image.tmdb.org/t/p/w300".concat(e.poster_path)}))})).catch((function(){return null}))},ya=function(){var e=Object(F.a)(z.a.mark((function e(t){return z.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t&&t.match(/.(jpg|jpeg|png|gif)$/i)){e.next=2;break}return e.abrupt("return",!1);case 2:return e.prev=2,e.next=5,fetch(t,{mode:"no-cors"});case 5:return e.abrupt("return",!0);case 8:return e.prev=8,e.t0=e.catch(2),e.abrupt("return",!1);case 11:case"end":return e.stop()}}),e,null,[[2,8]])})));return function(t){return e.apply(this,arguments)}}(),wa=/^magnet:\?xt=urn:[a-z0-9].*/i,Sa=/^\b[0-9a-f]{32}\b$|^\b[0-9a-f]{40}\b$|^\b[0-9a-f]{64}\b$/i,Da=/^.*\.(torrent)$/i,ka=He.d.div(Zn||(Zn=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.isEditMode,n=e.theme.addDialog,a=n.gradientStartColor,r=n.gradientEndColor,i=n.fontColor;return Object(He.c)(_n||(_n=Object(Ue.a)(["\n height: 550px;\n background: linear-gradient(145deg, ",", ",");\n flex: 1;\n display: grid;\n grid-template-columns: repeat(",", 1fr);\n border-bottom: 1px solid rgba(0, 0, 0, 0.12);\n overflow: auto;\n color: ",";\n\n @media (max-width: 540px) {\n ","\n overflow: scroll;\n }\n\n @media (max-width: 930px) {\n grid-template-columns: 1fr;\n }\n\n @media (max-width: 500px) {\n align-content: start;\n }\n "])),a,r,t?"1":"2",i,"")})),Ta=He.d.div(Kn||(Kn=Object(Ue.a)(["\n padding: 0 20px 20px 20px;\n"]))),Pa=He.d.div(Jn||(Jn=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.isHidden,n=e.notificationMessage,a=e.isError,r=e.theme.addDialog,i=r.notificationErrorBGColor,o=r.notificationSuccessBGColor;return Object(He.c)(Yn||(Yn=Object(Ue.a)(["\n height: 530px;\n\n ",";\n\n ",";\n\n @media (max-width: 500px) {\n height: 170px;\n }\n "])),n&&Object(He.c)($n||($n=Object(Ue.a)(["\n position: relative;\n white-space: nowrap;\n\n :before {\n font-size: 20px;\n font-weight: 300;\n content: '","';\n display: grid;\n place-items: center;\n background: ",";\n padding: 10px 15px;\n position: absolute;\n top: 52%;\n left: 50%;\n transform: translate(-50%, -50%);\n border-radius: 5px;\n }\n "])),n,a?i:o),t&&Object(He.c)(Xn||(Xn=Object(Ue.a)(["\n display: none;\n "]))))})),Ma=He.d.div(qn||(qn=Object(Ue.a)(["\n display: flex;\n flex-direction: column;\n border-right: 1px solid rgba(0, 0, 0, 0.12);\n"]))),Ba=Object(He.c)(Qn||(Qn=Object(Ue.a)(["\n transition: transform 0.3s;\n padding: 20px;\n height: 100%;\n display: grid;\n"]))),Ra=He.d.div(ea||(ea=Object(Ue.a)(["\n ","\n border: 4px dashed rgba(0,0,0,0.1);\n text-align: center;\n\n ",";\n\n justify-items: center;\n grid-template-rows: 130px 1fr;\n cursor: pointer;\n\n :hover {\n background-color: rgba(0, 0, 0, 0.04);\n svg {\n transform: translateY(-4%);\n }\n }\n\n @media (max-width: 930px) {\n border: 4px dashed transparent;\n height: 400px;\n place-items: center;\n grid-template-rows: 40% 1fr;\n }\n\n @media (max-width: 500px) {\n height: 170px;\n grid-template-rows: 1fr;\n\n > div:first-of-type {\n display: none;\n }\n }\n"])),Ba,(function(e){return e.isDragActive&&"border: 4px dashed green"})),La=He.d.div(ta||(ta=Object(Ue.a)(["\n ","\n place-items: center;\n\n @media (max-width: 930px) {\n height: 400px;\n }\n\n @media (max-width: 500px) {\n height: 170px;\n }\n"])),Ba),Aa=He.d.div(na||(na=Object(Ue.a)(["\n position: relative;\n"]))),za=He.d.div(aa||(aa=Object(Ue.a)(["\n position: absolute;\n top: -9px;\n left: 10px;\n cursor: pointer;\n\n > svg {\n transition: all 0.3s;\n fill: rgba(0, 0, 0, 0.7);\n\n :hover {\n fill: rgba(0, 0, 0, 0.6);\n }\n }\n"]))),Fa=He.d.div(ra||(ra=Object(Ue.a)(["\n display: grid;\n justify-items: center;\n align-content: start;\n gap: 10px;\n align-self: start;\n\n svg {\n transition: all 0.3s;\n }\n"]))),Ea=He.d.div(ia||(ia=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.active,n=e.theme.addDialog.gradientStartColor;return Object(He.c)(oa||(oa=Object(Ue.a)(["\n background: ",";\n padding: 0 20px 20px 20px;\n transition: all 0.3s;\n\n ",";\n "])),n,t&&"box-shadow: 0 8px 10px -9px rgba(0, 0, 0, 0.5)")})),Ga=He.d.div(ca||(ca=Object(Ue.a)(["\n margin-top: 20px;\n display: grid;\n grid-template-columns: max-content 1fr;\n grid-template-rows: 300px max-content;\n column-gap: 5px;\n position: relative;\n margin-bottom: 20px;\n\n grid-template-areas:\n 'poster suggestions'\n 'clear empty';\n\n @media (max-width: 540px) {\n grid-template-columns: 1fr;\n gap: 5px 0;\n justify-items: center;\n grid-template-areas:\n 'poster'\n 'clear'\n 'suggestions';\n }\n"]))),Na=He.d.div(la||(la=Object(Ue.a)(["\n display: grid;\n grid-area: suggestions;\n grid-auto-flow: column;\n grid-template-columns: repeat(3, max-content);\n grid-template-rows: repeat(4, max-content);\n gap: 5px;\n\n @media (max-width: 540px) {\n grid-auto-flow: row;\n grid-template-columns: repeat(5, max-content);\n }\n @media (max-width: 375px) {\n grid-template-columns: repeat(4, max-content);\n }\n"]))),Ia=He.d.div(sa||(sa=Object(Ue.a)(["\n cursor: pointer;\n width: 71px;\n height: 71px;\n\n @media (max-width: 430px) {\n width: 60px;\n height: 60px;\n }\n\n @media (max-width: 375px) {\n width: 71px;\n height: 71px;\n }\n\n @media (max-width: 355px) {\n width: 60px;\n height: 60px;\n }\n\n img {\n transition: all 0.3s;\n border-radius: 5px;\n width: 100%;\n height: 100%;\n object-fit: cover;\n\n :hover {\n filter: brightness(130%);\n }\n }\n"]))),Ua=He.d.div(da||(da=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.poster,n=e.theme.addDialog.posterBGColor;return Object(He.c)(pa||(pa=Object(Ue.a)(["\n border-radius: 5px;\n overflow: hidden;\n width: 200px;\n grid-area: poster;\n\n ","\n "])),t?Object(He.c)(ja||(ja=Object(Ue.a)(["\n img {\n width: 200px;\n object-fit: cover;\n border-radius: 5px;\n height: 100%;\n }\n "]))):Object(He.c)(ba||(ba=Object(Ue.a)(["\n display: grid;\n place-items: center;\n background: ",";\n\n svg {\n transform: scale(1.5) translateY(-3px);\n }\n "])),n))})),Ha=Object(He.d)(ne.a)(ua||(ua=Object(Ue.a)(["\n grid-area: clear;\n justify-self: center;\n transform: translateY(-50%);\n position: absolute;\n ",";\n\n @media (max-width: 540px) {\n transform: translateY(-140%);\n }\n"])),(function(e){return!e.showbutton&&"display: none"})),Wa=He.d.div(ha||(ha=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.showbutton,n=e.theme.addDialog,a=n.languageSwitchBGColor,r=n.languageSwitchFontColor;return Object(He.c)(xa||(xa=Object(Ue.a)(["\n grid-area: poster;\n z-index: 5;\n position: absolute;\n top: 0;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 30px;\n height: 30px;\n background: ",";\n border-radius: 50%;\n display: grid;\n place-items: center;\n color: ",";\n font-weight: 600;\n cursor: pointer;\n transition: all 0.3s;\n\n ",";\n\n :hover {\n filter: brightness(1.1);\n }\n "])),a,r,!t&&"display: none")})),Va=n(483),Za=n(447),_a=n(448);function Ka(e){var t=e.setTitle,n=e.setPosterUrl,a=e.setIsPosterUrlCorrect,r=e.setIsUserInteractedWithPoster,i=e.setPosterList,o=e.isTorrentSourceCorrect,c=e.isHashAlreadyExists,l=e.title,s=e.parsedTitle,d=e.posterUrl,j=e.isPosterUrlCorrect,b=e.posterList,u=e.currentLang,h=e.posterSearchLanguage,x=e.setPosterSearchLanguage,g=e.posterSearch,m=e.removePoster,O=e.torrentSource,f=e.originalTorrentTitle,C=e.updateTitleFromSource,v=e.isCustomTitleEnabled,y=e.setIsCustomTitleEnabled,w=e.isEditMode,S=Object(ce.a)().t,D=Object(Y.a)().palette.primary.main,k=function(e){var n=e.target.value;return t(n)};return Object($.jsxs)(Ta,{children:[Object($.jsxs)(Pa,{isHidden:!o||c&&!w,children:[f?Object($.jsxs)($.Fragment,{children:[Object($.jsx)(Va.a,{value:f,margin:"dense",label:S("AddDialog.OriginalTorrentTitle"),type:"text",fullWidth:!0,disabled:v,InputProps:{readOnly:!0}}),Object($.jsx)(Va.a,{onChange:k,onFocus:function(){return y(!0)},onBlur:function(e){return!e.target.value&&y(!1)},value:l,margin:"dense",label:S("AddDialog.CustomTorrentTitle"),type:"text",fullWidth:!0,helperText:S("AddDialog.CustomTorrentTitleHelperText"),InputProps:{endAdornment:Object($.jsx)(Za.a,{position:"end",children:Object($.jsx)(p.a,{style:{padding:"0 0 0 7px"},onClick:function(){t(""),y(!v),C(),r(!1)},children:Object($.jsx)(_a.a,{style:{color:v?D:"gray"}})})})}})]}):Object($.jsx)(Va.a,{onChange:k,value:l,margin:"dense",label:S("AddDialog.TitleBlank"),type:"text",fullWidth:!0}),Object($.jsx)(Va.a,{onChange:function(e){var t=e.target.value;n(t),ya(t).then(a),r(!!t),i()},value:d,margin:"dense",label:S("AddDialog.AddPosterLinkInput"),type:"url",fullWidth:!0}),Object($.jsxs)(Ga,{children:[Object($.jsx)(Ua,{poster:+j,children:j?Object($.jsx)("img",{src:d,alt:"poster"}):Object($.jsx)(X,{})}),Object($.jsx)(Na,{children:null===b||void 0===b?void 0:b.filter((function(e){return e!==d})).slice(0,12).map((function(e){return Object($.jsx)(Ia,{onClick:function(){return function(e){n(e),ya(e).then(a),r(!0)}(e)},children:Object($.jsx)("img",{src:e,alt:"poster"})},e)}))}),"en"!==u&&Object($.jsx)(Wa,{onClick:function(){var e="en"===h?"ru":"en";x(e),g(v?l:f?s:l,e,{shouldRefreshMainPoster:!0})},showbutton:+j,color:"primary",variant:"contained",size:"small",children:"en"===h?"EN":"RU"}),Object($.jsx)(Ha,{showbutton:+j,onClick:function(){m(),r(!0)},color:"primary",variant:"contained",size:"small",children:S("Clear")})]})]}),Object($.jsx)(Pa,{isError:O&&(!o||c),notificationMessage:O?o?c&&S("AddDialog.HashExists"):S("AddDialog.WrongTorrentSource"):S("AddDialog.AddTorrentSourceNotification"),isHidden:w||o&&!c})]})}var Ja,Ya,$a,Xa,qa,Qa,er,tr,nr,ar,rr=n(196),ir=n(449);function or(e){var t=e.setIsUserInteractedWithPoster,n=e.setSelectedFile,r=e.torrentSource,i=e.setTorrentSource,o=e.selectedFile,c=Object(ce.a)().t,s=Object(a.useState)(!1),d=Object(l.a)(s,2),p=d[0],j=d[1],b=Object(rr.a)({onDrop:function(e){var a=Object(l.a)(e,1)[0];a&&(t(!1),n(a),i(a.name))},accept:".torrent"}),u=b.getRootProps,h=b.getInputProps,x=b.isDragActive;return Object($.jsxs)(Ma,{children:[Object($.jsx)(Ea,{active:p,children:Object($.jsx)(Va.a,{onChange:function(e){var t=e.target.value;return i(t)},value:r,margin:"dense",label:c("AddDialog.TorrentSourceLink"),helperText:c("AddDialog.TorrentSourceOptions"),type:"text",fullWidth:!0,onFocus:function(){return j(!0)},onBlur:function(){return j(!1)},inputProps:{autoComplete:"off"},disabled:!!o})}),o?Object($.jsx)(La,{children:Object($.jsxs)(Aa,{children:[Object($.jsx)(te,{}),Object($.jsx)(za,{onClick:function(){n(),i("")},children:Object($.jsx)(ir.a,{})})]})}):Object($.jsxs)(Ra,Object(M.a)(Object(M.a)({isDragActive:x},u()),{},{children:[Object($.jsx)("input",Object(M.a)({},h())),Object($.jsx)("div",{children:c("AddDialog.AppendFile.Or")}),Object($.jsxs)(Fa,{children:[Object($.jsx)(q,{color:"primary"}),Object($.jsx)("div",{children:c("AddDialog.AppendFile.ClickOrDrag")})]})]}))]})}function cr(e){var t=e.handleClose,n=e.hash,r=e.title,i=e.name,o=e.poster,c=Object(ce.a)().t,s=!!n,d=Object(a.useState)(n||""),p=Object(l.a)(d,2),j=p[0],b=p[1],u=Object(a.useState)(r||""),h=Object(l.a)(u,2),x=h[0],g=h[1],m=Object(a.useState)(""),O=Object(l.a)(m,2),f=O[0],y=O[1],w=Object(a.useState)(""),S=Object(l.a)(w,2),D=S[0],k=S[1],T=Object(a.useState)(o||""),M=Object(l.a)(T,2),B=M[0],R=M[1],L=Object(a.useState)(!1),A=Object(l.a)(L,2),z=A[0],F=A[1],E=Object(a.useState)(!1),G=Object(l.a)(E,2),N=G[0],I=G[1],U=Object(a.useState)(!1),H=Object(l.a)(U,2),W=H[0],V=H[1],Z=Object(a.useState)(),_=Object(l.a)(Z,2),K=_[0],Y=_[1],X=Object(a.useState)(s),q=Object(l.a)(X,2),Q=q[0],ee=q[1],te=In(),ae=Object(l.a)(te,1)[0],re=Object(a.useState)(),le=Object(l.a)(re,2),se=le[0],de=le[1],pe=Object(a.useState)("ru"===ae?"ru":"en"),je=Object(l.a)(pe,2),be=je[0],ue=je[1],he=Object(a.useState)(!1),xe=Object(l.a)(he,2),ge=xe[0],me=xe[1],Oe=Object(a.useState)(!1),fe=Object(l.a)(Oe,2),Ce=fe[0],ve=fe[1],ye=Object(a.useState)(!1),we=Object(l.a)(ye,2),Se=we[0],De=we[1],ke=Object(a.useState)(),Te=Object(l.a)(ke,2),Pe=Te[0],Me=Te[1],Be=Object(ga.a)("torrents",J,{retry:1,refetchInterval:1e3}).data;Object(a.useEffect)((function(){Oa.a.remote(se||j,(function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.infoHash;return Me(n)}))}),[se,j]),Object(a.useEffect)((function(){if(Me){var e=Be.map((function(e){return e.hash}));V(e.includes(Pe))}}),[Pe,Be]),Object(a.useEffect)((function(){ge&&(Be.map((function(e){return e.hash})).includes(Pe)&&t())}),[ge,Be,Pe,t]);var Le=Object(Re.a)("@media (max-width:930px)"),Ae=Object(a.useCallback)((function(){var e,t;e=se||j,t=function(e){var t=e.parsedTitle,n=e.originalName;n&&(ve(!0),g(""),De(!1),y(n),k(t))},Oa.a.remote(e,(function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=n.name,r=n.files;if(!a||e)return t({parsedTitle:null,originalName:null});var i=ie.a.parse(a).title,o=r?ie.a.parse(r[0].name).title:null,c=i;o&&(c=i.length2&&void 0!==arguments[2]?arguments[2]:{},a=n.shouldRefreshMainPoster,r=void 0!==a&&a;if(!e)return Y(),void ze();va(e,t).then((function(e){if(e){if(Y(e),!r&&Q)return;var t=Object(l.a)(e,1)[0];ya(t).then((function(e){e?(F(!0),R(t)):ze()}))}else{if(Y(),Q)return;ze()}}))}}),[Q]),Ee=Object(a.useMemo)((function(){return Nn()(Fe,700)}),[Fe]),Ge=Un(j);Object(a.useEffect)((function(){var e;if(!(null!==(e=j).match(Sa)||null!==e.match(wa)||null!==e.match(Da)))return I(!1);I(!0),j!==Ge&&Ae()}),[Ge,se,j,Ae]);var Ne=Un(x);Object(a.useEffect)((function(){(x!==Ne||D)&&(Ce?(Fe(x||D,be),ve(!1)):x?Ee(x,be):(Ee.cancel(),D?Fe(D,be):!Q&&ze()))}),[x,D,Ne,Ee,Fe,be,Ce,Q]);return Object($.jsxs)(An.a,{open:!0,onClose:t,fullScreen:Le,fullWidth:!0,maxWidth:"md",children:[Object($.jsx)(fa,{children:c(s?"EditTorrent":"AddNewTorrent")}),Object($.jsxs)(ka,{isEditMode:s,children:[!s&&Object($.jsx)(or,{setIsUserInteractedWithPoster:ee,setSelectedFile:de,torrentSource:j,setTorrentSource:b,selectedFile:se}),Object($.jsx)(Ka,{originalTorrentTitle:f,setTitle:g,setPosterUrl:R,setIsPosterUrlCorrect:F,setIsUserInteractedWithPoster:ee,setPosterList:Y,isTorrentSourceCorrect:N,isHashAlreadyExists:W,title:x,parsedTitle:D,posterUrl:B,isPosterUrlCorrect:z,posterList:K,currentLang:ae,posterSearchLanguage:be,setPosterSearchLanguage:ue,posterSearch:Fe,removePoster:ze,updateTitleFromSource:Ae,torrentSource:j,isCustomTitleEnabled:Se,setIsCustomTitleEnabled:De,isEditMode:s})]}),Object($.jsxs)(Ca,{children:[Object($.jsx)(ne.a,{onClick:t,color:"secondary",variant:"outlined",children:c("Cancel")}),Object($.jsx)(ne.a,{variant:"contained",style:{minWidth:"110px"},disabled:!j||W&&!s||!N,onClick:function(){if(me(!0),s)P.a.post(v(),{action:"set",hash:n,title:x||i,poster:B}).finally(t);else if(se){var e=new FormData;e.append("save","true"),e.append("file",se),x&&e.append("title",x),B&&e.append("poster",B),P.a.post("".concat(C,"/torrent/upload"),e).catch(t)}else P.a.post(v(),{action:"add",link:j,title:x,poster:B,save_to_db:!0}).catch(t)},color:"primary",children:ge?Object($.jsx)(oe.a,{style:{color:"white"},size:20}):c(s?"Save":"Add")})]})]})}var lr,sr,dr,pr,jr,br,ur,hr,xr,gr,mr,Or,fr,Cr=He.d.div(Ja||(Ja=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.theme.torrentCard.cardPrimaryColor;return Object(He.c)(Ya||(Ya=Object(Ue.a)(["\n border-radius: 5px;\n display: grid;\n grid-template-columns: 120px 260px 1fr;\n grid-template-rows: 180px;\n grid-template-areas: 'poster description buttons';\n gap: 10px;\n padding: 10px;\n background: ",";\n box-shadow: 0px 2px 4px -1px rgb(0 0 0 / 20%), 0px 4px 5px 0px rgb(0 0 0 / 14%), 0px 1px 10px 0px rgb(0 0 0 / 12%);\n\n @media (max-width: 1260px), (max-height: 500px) {\n grid-template-areas:\n 'poster description'\n 'buttons buttons';\n\n grid-template-columns: 70px 1fr;\n grid-template-rows: 110px max-content;\n }\n\n @media (max-width: 770px) {\n grid-template-columns: 60px 1fr;\n grid-template-rows: 90px max-content;\n }\n "])),t)})),vr=He.d.div($a||($a=Object(Ue.a)(["\n grid-area: poster;\n border-radius: 5px;\n overflow: hidden;\n text-align: center;\n\n ",";\n\n @media (max-width: 1260px), (max-height: 500px) {\n svg {\n width: 50%;\n }\n }\n"])),(function(e){var t=e.isPoster,n=e.theme.torrentCard,a=n.cardSecondaryColor,r=n.accentCardColor;return t?Object(He.c)(Xa||(Xa=Object(Ue.a)(["\n img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 5px;\n }\n "]))):Object(He.c)(qa||(qa=Object(Ue.a)(["\n display: grid;\n place-items: center;\n background: ",";\n border: 1px solid ",";\n\n svg {\n transform: translateY(-3px);\n }\n "])),a,r)})),yr=He.d.div(Qa||(Qa=Object(Ue.a)(["\n grid-area: buttons;\n display: grid;\n gap: 10px;\n\n @media (max-width: 1260px), (max-height: 500px) {\n grid-template-columns: repeat(4, 1fr);\n }\n\n @media (max-width: 340px) {\n gap: 5px;\n }\n"]))),wr=He.d.div(er||(er=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.theme.torrentCard,n=t.cardSecondaryColor,a=t.accentCardColor;return Object(He.c)(tr||(tr=Object(Ue.a)(["\n grid-area: description;\n background: ",";\n border-radius: 5px;\n padding: 5px;\n display: grid;\n grid-template-rows: 55% 1fr;\n gap: 10px;\n\n @media (max-width: 770px) {\n grid-template-rows: 60% 1fr;\n gap: 3px;\n }\n\n .description-title-wrapper {\n display: flex;\n flex-direction: column;\n }\n\n .description-section-name {\n text-transform: uppercase;\n font-size: 10px;\n font-weight: 600;\n letter-spacing: 0.4px;\n color: ",";\n\n @media (max-width: 770px) {\n font-size: 0.4rem;\n }\n }\n\n .description-torrent-title {\n overflow: auto;\n word-break: break-all;\n }\n\n .description-statistics-wrapper {\n display: grid;\n grid-template-columns: 80px 80px 1fr;\n align-self: end;\n\n @media (max-width: 1260px), (max-height: 500px) {\n grid-template-columns: 70px 70px 1fr;\n }\n\n @media (max-width: 770px) {\n grid-template-columns: 65px 65px 1fr;\n }\n\n @media (max-width: 700px) {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n }\n }\n\n .description-statistics-element-wrapper {\n }\n\n .description-statistics-element-value {\n margin-left: 5px;\n margin-bottom: 10px;\n word-break: break-all;\n\n @media (max-width: 1260px), (max-height: 500px) {\n font-size: 0.7rem;\n margin-bottom: 0;\n margin-left: 0;\n }\n }\n\n .description-torrent-title,\n .description-statistics-element-value {\n @media (max-width: 770px) {\n font-size: 0.6rem;\n }\n\n @media (max-width: 410px) {\n font-size: 10px;\n }\n }\n "])),n,a)})),Sr=He.d.button(nr||(nr=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.theme.torrentCard,n=t.buttonBGColor,a=t.accentCardColor;return Object(He.c)(ar||(ar=Object(Ue.a)(["\n border-radius: 5px;\n border: none;\n cursor: pointer;\n transition: 0.2s;\n display: flex;\n align-items: center;\n text-transform: uppercase;\n background: ",";\n color: #fff;\n font-size: 0.9rem;\n letter-spacing: 0.009em;\n padding: 0 12px;\n svg {\n width: 20px;\n }\n\n :hover {\n background: ",";\n }\n\n > :first-child {\n margin-right: 10px;\n }\n\n @media (max-width: 1260px), (max-height: 500px) {\n padding: 7px 10px;\n justify-content: center;\n font-size: 0.8rem;\n\n svg {\n display: none;\n }\n }\n\n @media (max-width: 770px) {\n font-size: 0.7rem;\n }\n\n @media (max-width: 420px) {\n font-size: 0.6rem;\n padding: 7px 5px;\n }\n "])),n,a)})),Dr=Object(a.forwardRef)((function(e,t){return Object($.jsx)(zn.a,Object(M.a)({direction:"up",ref:t},e))})),kr=function(e){var t=e.torrent,n=Object(ce.a)().t,r=Object(a.useState)(!1),i=Object(l.a)(r,2),o=i[0],c=i[1],s=Object(a.useState)(!1),d=Object(l.a)(s,2),p=d[0],b=d[1],u=Object(Y.a)(),h=Object(Re.a)(u.breakpoints.down("md")),x=function(){return c(!1)},g=function(){return b(!1)},m=t.title,O=t.name,f=t.poster,C=t.torrent_size,y=t.download_speed,w=t.hash,S=function(){var e=function(e){var t,n;return(null===(t=ie.a.parse(m||""))||void 0===t?void 0:t[e])||(null===(n=ie.a.parse(O||""))||void 0===n?void 0:n[e])},t=[],n=K(e("title")),a=e("year"),r=e("resolution");return n&&t.push(n),a&&t.push("(".concat(a,")")),r&&t.push("[".concat(r,"]")),{parsedTitle:n=t.join(" ")}}().parsedTitle,D=Object(a.useState)(!1),k=Object(l.a)(D,2),T=k[0],M=k[1];return Object($.jsxs)($.Fragment,{children:[Object($.jsxs)(Cr,{children:[Object($.jsx)(vr,{isPoster:f,children:f?Object($.jsx)("img",{src:f,alt:"poster"}):Object($.jsx)(X,{})}),Object($.jsxs)(yr,{children:[Object($.jsxs)(Sr,{onClick:function(){return c(!0)},children:[Object($.jsx)(B.a,{}),Object($.jsx)("span",{children:n("Details")})]}),Object($.jsxs)(Sr,{onClick:function(){return M(!0)},children:[Object($.jsx)(R.a,{}),Object($.jsx)("span",{children:n("Edit")})]}),Object($.jsxs)(Sr,{onClick:function(){return P.a.post(v(),{action:"drop",hash:w})},children:[Object($.jsx)(j.a,{}),Object($.jsx)("span",{children:n("Drop")})]}),Object($.jsxs)(Sr,{onClick:function(){return b(!0)},children:[Object($.jsx)(L.a,{}),Object($.jsx)("span",{children:n("Delete")})]})]}),Object($.jsxs)(wr,{children:[Object($.jsxs)("div",{className:"description-title-wrapper",children:[Object($.jsx)("div",{className:"description-section-name",children:n("Name")}),Object($.jsx)("div",{className:"description-torrent-title",children:S})]}),Object($.jsxs)("div",{className:"description-statistics-wrapper",children:[Object($.jsxs)("div",{className:"description-statistics-element-wrapper",children:[Object($.jsx)("div",{className:"description-section-name",children:n("Size")}),Object($.jsx)("div",{className:"description-statistics-element-value",children:C>0&&V(C)})]}),Object($.jsxs)("div",{className:"description-statistics-element-wrapper",children:[Object($.jsx)("div",{className:"description-section-name",children:n("Speed")}),Object($.jsx)("div",{className:"description-statistics-element-value",children:y>0?Z(y):"---"})]}),Object($.jsxs)("div",{className:"description-statistics-element-wrapper",children:[Object($.jsx)("div",{className:"description-section-name",children:n("Peers")}),Object($.jsx)("div",{className:"description-statistics-element-value",children:_(t)||"---"})]})]})]})]}),Object($.jsx)(An.a,{open:o,onClose:x,fullScreen:h,fullWidth:!0,maxWidth:"xl",TransitionComponent:Dr,children:Object($.jsx)(Ln,{closeDialog:x,torrent:t})}),Object($.jsxs)(An.a,{open:p,onClose:g,children:[Object($.jsx)(Fn.a,{children:n("DeleteTorrent?")}),Object($.jsxs)(En.a,{children:[Object($.jsx)(ne.a,{variant:"outlined",onClick:g,color:"primary",children:n("Cancel")}),Object($.jsx)(ne.a,{variant:"contained",onClick:function(){P.a.post(v(),{action:"rem",hash:w}),g()},color:"primary",autoFocus:!0,children:n("OK")})]})]}),T&&Object($.jsx)(cr,{hash:w,title:m,name:O,poster:f,handleClose:function(){return M(!1)}})]})},Tr=Object(a.memo)(kr),Pr=He.d.div(lr||(lr=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.theme.app.appSecondaryColor;return Object(He.c)(sr||(sr=Object(Ue.a)(["\n height: 100%;\n background: ",";\n display: grid;\n grid-template-columns: 60px 1fr;\n grid-template-rows: 60px 1fr;\n grid-template-areas:\n 'head head'\n 'side content';\n "])),Object(Le.a)(t,.8))})),Mr=He.d.div(dr||(dr=Object(Ue.a)(["\n height: 100%;\n display: grid;\n place-items: center;\n"]))),Br=He.d.div(pr||(pr=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.theme.primary;return Object(He.c)(jr||(jr=Object(Ue.a)(["\n background: ",";\n color: #fff;\n grid-area: head;\n display: grid;\n grid-auto-flow: column;\n align-items: center;\n grid-template-columns: repeat(2, max-content) 1fr;\n box-shadow: 0px 2px 4px -1px rgb(0 0 0 / 20%), 0px 4px 5px 0px rgb(0 0 0 / 14%), 0px 1px 10px 0px rgb(0 0 0 / 12%);\n padding: 0 16px;\n z-index: 3;\n "])),t)})),Rr=He.d.div(br||(br=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.isDrawerOpen,n=e.theme.app,a=n.appSecondaryColor,r=n.sidebarBGColor,i=n.sidebarFillColor;return Object(He.c)(ur||(ur=Object(Ue.a)(["\n grid-area: side;\n width: ",";\n z-index: 2;\n overflow-x: hidden;\n transition: width 195ms cubic-bezier(0.4, 0, 0.6, 1) 0ms;\n border-right: 1px solid ",";\n background: ",";\n color: ",";\n white-space: nowrap;\n\n svg {\n fill: ",";\n }\n "])),t?"400%":"100%",Object(Le.a)(a,.12),r,i,i)})),Lr=He.d.div(hr||(hr=Object(Ue.a)(["\n grid-area: content;\n padding: 20px;\n overflow: auto;\n\n display: grid;\n place-content: start;\n grid-template-columns: repeat(auto-fit, minmax(max-content, 570px));\n gap: 20px;\n\n @media (max-width: 1260px), (max-height: 500px) {\n padding: 10px;\n gap: 15px;\n grid-template-columns: repeat(3, 1fr);\n }\n\n @media (max-width: 1100px) {\n grid-template-columns: repeat(2, 1fr);\n }\n\n @media (max-width: 700px) {\n grid-template-columns: 1fr;\n }\n"]))),Ar=He.d.div(xr||(xr=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.theme.app.headerToggleColor;return Object(He.c)(gr||(gr=Object(Ue.a)(["\n cursor: pointer;\n border-radius: 50%;\n background: ",";\n height: 35px;\n width: 35px;\n transition: all 0.2s;\n font-weight: 600;\n display: grid;\n place-items: center;\n color: #fff;\n\n :hover {\n background: ",";\n }\n\n @media (max-width: 700px) {\n height: 28px;\n width: 28px;\n font-size: 12px;\n\n svg {\n width: 17px;\n }\n }\n "])),t,Object(Le.a)(t,.7))})),zr=He.d.div(mr||(mr=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.isButton;return Object(He.c)(Or||(Or=Object(Ue.a)(["\n display: grid;\n place-items: center;\n padding: 20px 40px;\n border-radius: 5px;\n\n ","\n\n lord-icon {\n width: 200px;\n height: 200px;\n }\n\n .icon-label {\n font-size: 20px;\n }\n "])),t&&Object(He.c)(fr||(fr=Object(Ue.a)(["\n background: #88cdaa;\n transition: 0.2s;\n cursor: pointer;\n\n :hover {\n background: #74c39c;\n }\n "]))))}));function Fr(){var e=Object(ce.a)().t,t=Object(Y.a)().palette.primary.main;return Object($.jsxs)(zr,{children:[Object($.jsx)("lord-icon",{src:"https://cdn.lordicon.com/wrprwmwt.json",trigger:"loop",colors:"primary:#121331,secondary:".concat(t),stroke:"26",scale:"60"}),Object($.jsx)("div",{className:"icon-label",children:e("Offline")})]})}function Er(){var e=Object(ce.a)().t,t=Object(a.useState)(!1),n=Object(l.a)(t,2),r=n[0],i=n[1],o=Object(Y.a)().palette.primary.main;return Object($.jsxs)($.Fragment,{children:[Object($.jsxs)(zr,{onClick:function(){return i(!0)},isButton:!0,children:[Object($.jsx)("lord-icon",{src:"https://cdn.lordicon.com/bbnkwdur.json",trigger:"loop",colors:"primary:#121331,secondary:".concat(o),stroke:"26",scale:"60"}),Object($.jsx)("div",{className:"icon-label",children:e("NoTorrentsAdded")})]}),r&&Object($.jsx)(cr,{handleClose:function(){return i(!1)}})]})}function Gr(e){var t=e.isOffline,n=e.isLoading,a=e.torrents;return n||t||!a.length?Object($.jsx)(Mr,{children:t?Object($.jsx)(Fr,{}):n?Object($.jsx)(oe.a,{color:"secondary"}):!a.length&&Object($.jsx)(Er,{})}):Object($.jsx)(Lr,{children:a.map((function(e){return Object($.jsx)(Tr,{torrent:e},e.hash)}))})}var Nr=n(482),Ir=n(189),Ur=n.n(Ir),Hr=n(458),Wr=n(457),Vr=n(446);function Zr(e){var t=e.onClose,n=Object(ce.a)().t;return Object($.jsxs)(An.a,{open:!0,onClose:t,"aria-labelledby":"form-dialog-title",fullWidth:!0,maxWidth:"xs",children:[Object($.jsx)(Fn.a,{id:"form-dialog-title",children:n("Donate")}),Object($.jsx)(Wr.a,{children:Object($.jsxs)(Vr.a,{children:[Object($.jsx)(Hr.a,{children:Object($.jsxs)(ae.a,{variant:"outlined",color:"primary","aria-label":"contained primary button group",children:[Object($.jsx)(ne.a,{onClick:function(){return window.open("https://www.paypal.com/paypalme/yourok","_blank")},children:"PayPal"}),Object($.jsx)(ne.a,{onClick:function(){return window.open("https://yoomoney.ru/to/410013733697114","_blank")},children:"IO.Money"})]})},"DonateLinks"),Object($.jsx)(Hr.a,{children:Object($.jsx)("div",{dangerouslySetInnerHTML:{__html:''}})},"DonateForm")]})}),Object($.jsx)(En.a,{children:Object($.jsx)(ne.a,{onClick:t,color:"secondary",variant:"contained",children:"Ok"})})]})}function _r(){var e=Object(ce.a)().t,t=Object(a.useState)(!1),n=Object(l.a)(t,2),r=n[0],i=n[1],o=Object(a.useState)(!0),c=Object(l.a)(o,2),s=c[0],d=c[1],j=function(){d(!1),localStorage.setItem("snackbarIsClosed",!0)};return Object($.jsxs)($.Fragment,{children:[r&&Object($.jsx)(Zr,{onClose:function(){return i(!1)}}),Object($.jsx)(Nr.a,{anchorOrigin:{vertical:"bottom",horizontal:"center"},open:s,onClose:j,message:e("Donate?"),action:Object($.jsxs)($.Fragment,{children:[Object($.jsxs)(ne.a,{style:{marginRight:"10px"},color:"secondary",size:"small",onClick:function(){i(!0),j()},children:[Object($.jsx)(Ur.a,{style:{marginRight:"10px"},fontSize:"small"}),e("Support")]}),Object($.jsx)(p.a,{size:"small","aria-label":"close",color:"inherit",onClick:j,children:Object($.jsx)(be.a,{fontSize:"small"})})]})})]})}var Kr,Jr=n(469),Yr=Object(He.b)(Kr||(Kr=Object(Ue.a)(['\n *,\n *::before,\n *::after { \n margin: 0;\n padding: 0;\n box-sizing: inherit;\n }\n\n body { \n font-family: "Open Sans", sans-serif;\n box-sizing: border-box;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n letter-spacing: -0.1px;\n }\n\n button {\n font-family: "Open Sans", sans-serif;\n letter-spacing: -0.1px;\n }\n']))),$r=n(467),Xr=n(459),qr=n(460),Qr=n(468),ei=n(190),ti=n.n(ei);function ni(e){var t=e.isOffline,n=e.isLoading,r=Object(ce.a)().t,i=Object(a.useState)(!1),o=Object(l.a)(i,2),c=o[0],s=o[1];return Object($.jsxs)("div",{children:[Object($.jsxs)(Hr.a,{disabled:t||n,button:!0,onClick:function(){return s(!0)},children:[Object($.jsx)(Xr.a,{children:Object($.jsx)(ti.a,{})}),Object($.jsx)(qr.a,{primary:r("AddFromLink")})]}),c&&Object($.jsx)(cr,{handleClose:function(){return s(!1)}})]})}var ai,ri,ii,oi,ci,li,si,di,pi,ji,bi,ui,hi,xi,gi,mi,Oi,fi,Ci,vi,yi,wi,Si=n(192),Di=n.n(Si),ki=n(480),Ti=n(462),Pi=n(477),Mi=n(464),Bi=n(191),Ri=n.n(Bi),Li="#b3dfc9",Ai=ze.light.primary,zi=Object(He.d)(fa)(ai||(ai=Object(Ue.a)(["\n display: grid;\n grid-auto-flow: column;\n align-items: center;\n justify-content: space-between;\n\n @media (max-width: 340px) {\n grid-auto-flow: row;\n }\n"]))),Fi=He.d.div(ri||(ri=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.theme.settingsDialog.footerBG;return Object(He.c)(ii||(ii=Object(Ue.a)(["\n padding: 20px;\n display: grid;\n grid-auto-flow: column;\n justify-content: end;\n gap: 10px;\n align-items: center;\n background: ",";\n\n @media (max-width: 500px) {\n grid-auto-flow: row;\n justify-content: stretch;\n }\n "])),t)})),Ei=(He.d.div(oi||(oi=Object(Ue.a)(["\n height: 1px;\n background-color: rgba(0, 0, 0, 0.12);\n margin: 30px 0;\n"]))),He.d.div(ci||(ci=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.isLoading,n=e.theme.settingsDialog.contentBG;return Object(He.c)(li||(li=Object(Ue.a)(["\n background: ",";\n overflow: auto;\n flex: 1;\n\n ","\n "])),n,t&&Object(He.c)(si||(si=Object(Ue.a)(["\n min-height: 500px;\n display: grid;\n place-items: center;\n "]))))}))),Gi=He.d.div(di||(di=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.color;return Object(He.c)(pi||(pi=Object(Ue.a)(["\n display: grid;\n grid-template-columns: max-content 100px 1fr;\n gap: 10px;\n align-items: flex-start;\n\n :not(:last-child) {\n margin-bottom: 5px;\n }\n\n :before {\n content: '';\n background: ",";\n width: 16px;\n height: 16px;\n border-radius: 50%;\n margin-top: 2px;\n }\n "])),t)})),Ni=He.d.div(ji||(ji=Object(Ue.a)(["\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 40px;\n padding: 20px;\n\n @media (max-width: 930px) {\n grid-template-columns: 1fr;\n }\n"]))),Ii=He.d.div(bi||(bi=Object(Ue.a)(["\n padding: 20px;\n"]))),Ui=He.d.div(ui||(ui=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.small,n=e.selected;return Object(He.c)(hi||(hi=Object(Ue.a)(["\n transition: 0.2s;\n cursor: default;\n text-align: center;\n\n ","\n\n ","\n "])),!n&&Object(He.c)(xi||(xi=Object(Ue.a)(["\n cursor: pointer;\n\n :hover {\n filter: brightness(0.8);\n }\n "]))),t?Object(He.c)(gi||(gi=Object(Ue.a)(["\n display: grid;\n grid-template-columns: max-content 1fr;\n gap: 20px;\n align-items: center;\n justify-items: start;\n margin-bottom: 20px;\n "]))):Object(He.c)(mi||(mi=Object(Ue.a)(["\n display: grid;\n place-items: center;\n gap: 10px;\n "]))))})),Hi=He.d.div(Oi||(Oi=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.selected,n=e.small;return Object(He.c)(fi||(fi=Object(Ue.a)(["\n width: ",";\n height: ",";\n border-radius: 50%;\n background: ",";\n\n svg {\n transform: rotate(-45deg) scale(0.75);\n }\n\n @media (max-width: 930px) {\n width: ",";\n height: ",";\n }\n "])),n?"60px":"150px",n?"60px":"150px",t?"#323637":"#dee3e5",n?"50px":"90px",n?"50px":"90px")})),Wi=He.d.div(Ci||(Ci=Object(Ue.a)(["\n display: grid;\n grid-template-rows: max-content 1fr;\n grid-template-areas: 'label label';\n place-items: center;\n\n @media (max-width: 930px) {\n justify-content: start;\n column-gap: 30px;\n }\n"]))),Vi=He.d.div(vi||(vi=Object(Ue.a)(["\n font-size: 25px;\n padding-bottom: 20px;\n\n small {\n display: block;\n font-size: 11px;\n }\n"]))),Zi=He.d.div.attrs((function(e){var t=e.value;return{style:{background:"linear-gradient(to right, ".concat(Li," 0%, ").concat(Li," ").concat(t,"%, ").concat(Ai," ").concat(t,"%, ").concat(Ai," 100%)")}}}))(yi||(yi=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.label,n=e.preloadCachePercentage;return Object(He.c)(wi||(wi=Object(Ue.a)(["\n border: 1px solid #323637;\n padding: 10px 20px;\n border-radius: 5px;\n color: #000;\n margin-bottom: 10px;\n position: relative;\n\n :before {\n content: '","';\n display: grid;\n place-items: center;\n font-size: 20px;\n }\n\n :after {\n content: '';\n width: ","%;\n height: 100%;\n background: #323637;\n position: absolute;\n bottom: 0;\n left: 0;\n border-radius: 4px;\n filter: opacity(0.15);\n }\n "])),t,n)})),_i={AcceptPeerCon:!0,AnnTorrentsToDht:!0,CacheSize:96,ReaderReadAHead:95,UseDisk:!1,UploadRateLimit:0,TorrentsSavePath:"",ConnectionsLimit:23,DisableDHT:!1,DisablePEX:!1,DisableTCP:!1,DisableUPNP:!1,DisableUTP:!0,DisableUpload:!1,DownloadRateLimit:0,EnableDebug:!1,EnableIPv6:!1,ForceEncrypt:!1,PeersListenPort:0,PreloadCache:0,RemoveCacheOnDrop:!1,RetrackersMode:1,TorrentDisconnectTimeout:30},Ki=n(197),Ji=function(e){return{id:"full-width-tab-".concat(e),"aria-controls":"full-width-tabpanel-".concat(e)}},Yi=function(e){var t=e.children,n=e.value,a=e.index,r=Object(Ki.a)(e,["children","value","index"]);return Object($.jsx)("div",Object(M.a)(Object(M.a)({role:"tabpanel",hidden:n!==a,id:"full-width-tabpanel-".concat(a)},r),{},{children:n===a&&Object($.jsx)($.Fragment,{children:t})}))},$i=n(463),Xi=n(461),qi=n(487),Qi=n(485);function eo(e){var t=e.isProMode,n=e.title,a=e.value,r=e.setValue,i=e.sliderMin,o=e.sliderMax,c=e.inputMin,l=e.inputMax,s=e.step,d=void 0===s?1:s,p=e.onBlurCallback;return Object($.jsxs)($.Fragment,{children:[Object($.jsx)("div",{children:n}),Object($.jsxs)(Xi.a,{container:!0,spacing:2,alignItems:"center",children:[Object($.jsx)(Xi.a,{item:!0,xs:!0,children:Object($.jsx)(qi.a,{min:i,max:o,value:a,onChange:function(e,t){return r(t)},step:d,color:"secondary"})}),t&&Object($.jsx)(Xi.a,{item:!0,children:Object($.jsx)(Qi.a,{value:a,margin:"dense",onChange:function(e){var t=e.target.value;return r(""===t?"":Number(t))},onBlur:function(e){var t=e.target.value;return tl?r(l):void(p&&p(t))},style:{width:"91px",marginTop:"-6px"},inputProps:{step:d,min:c,max:l,type:"number"}})})]})]})}var to=function(e){var t=e.style,n=Object(ce.a)().t;return Object($.jsxs)(Vi,{style:t,children:[n("SettingsDialog.CacheStorageLocation"),Object($.jsx)("small",{children:n("SettingsDialog.UseDiskDesc")})]})};function no(e){var t=e.settings,n=e.inputForm,a=e.cachePercentage,r=e.preloadCachePercentage,i=e.cacheSize,o=e.isProMode,c=e.setCacheSize,l=e.setCachePercentage,s=e.setPreloadCachePercentage,d=e.updateSettings,p=Object(ce.a)().t,j=t||{},b=j.UseDisk,u=j.TorrentsSavePath,h=j.RemoveCacheOnDrop,x=Math.round(i/100*r);return Object($.jsxs)(Ni,{children:[Object($.jsxs)("div",{children:[Object($.jsx)(Vi,{children:p("SettingsDialog.CacheSettings")}),Object($.jsx)(Zi,{value:100-a,label:"".concat(p("Cache")," ").concat(i," MB"),preloadCachePercentage:r}),Object($.jsxs)(Gi,{color:Li,children:[Object($.jsxs)("div",{children:[100-a,"% (",Math.round(i/100*(100-a))," MB)"]}),Object($.jsx)("div",{children:p("SettingsDialog.CacheBeforeReaderDesc")})]}),Object($.jsxs)(Gi,{color:Ai,children:[Object($.jsxs)("div",{children:[a,"% (",Math.round(i/100*a)," MB)"]}),Object($.jsx)("div",{children:p("SettingsDialog.CacheAfterReaderDesc")})]}),Object($.jsx)("br",{}),Object($.jsx)(eo,{isProMode:o,title:p("SettingsDialog.CacheSize"),value:i,setValue:c,sliderMin:32,sliderMax:1024,inputMin:32,inputMax:999999,step:4,onBlurCallback:function(e){return c(4*Math.round(e/4))}}),Object($.jsx)(eo,{isProMode:o,title:p("SettingsDialog.ReaderReadAHead"),value:a,setValue:l,sliderMin:40,sliderMax:95,inputMin:0,inputMax:100}),Object($.jsx)(eo,{isProMode:o,title:"".concat(p("SettingsDialog.PreloadCache")," - ").concat(r,"% (").concat(x," MB)"),value:r,setValue:s,sliderMin:0,sliderMax:100,inputMin:0,inputMax:100})]}),b?Object($.jsxs)("div",{children:[Object($.jsx)(to,{}),Object($.jsxs)("div",{style:{display:"grid",gridAutoFlow:"column"},children:[Object($.jsxs)(Ui,{small:!0,onClick:function(){return d({UseDisk:!1})},children:[Object($.jsx)(Hi,{small:!0,children:Object($.jsx)(ee,{color:"#323637"})}),Object($.jsx)("div",{children:p("SettingsDialog.RAM")})]}),Object($.jsxs)(Ui,{small:!0,selected:!0,children:[Object($.jsx)(Hi,{small:!0,selected:!0,children:Object($.jsx)(Q,{color:"#dee3e5"})}),Object($.jsx)("div",{children:p("SettingsDialog.Disk")})]})]}),Object($.jsx)(Ti.a,{control:Object($.jsx)($i.a,{checked:h,onChange:n,id:"RemoveCacheOnDrop",color:"secondary"}),label:p("SettingsDialog.RemoveCacheOnDrop"),labelPlacement:"start"}),Object($.jsx)("div",{children:Object($.jsx)("small",{children:p("SettingsDialog.RemoveCacheOnDropDesc")})}),Object($.jsx)("br",{}),Object($.jsx)(Va.a,{onChange:n,margin:"normal",id:"TorrentsSavePath",label:p("SettingsDialog.TorrentsSavePath"),value:u,type:"url",variant:"outlined",fullWidth:!0})]}):Object($.jsxs)(Wi,{children:[Object($.jsx)(to,{style:{placeSelf:"start",gridArea:"label"}}),Object($.jsxs)(Ui,{selected:!0,children:[Object($.jsx)(Hi,{selected:!0,children:Object($.jsx)(ee,{color:"#dee3e5"})}),Object($.jsx)("div",{children:p("SettingsDialog.RAM")})]}),Object($.jsxs)(Ui,{onClick:function(){return d({UseDisk:!0})},children:[Object($.jsx)(Hi,{children:Object($.jsx)(Q,{color:"#323637"})}),Object($.jsx)("div",{children:p("SettingsDialog.Disk")})]})]})]})}var ao=n(486),ro=n(476);function io(e){var t=e.settings,n=e.inputForm,a=Object(ce.a)().t,r=t||{},i=r.AcceptPeerCon,o=r.AnnTorrentsToDht,c=r.RetrackersMode,l=r.TorrentDisconnectTimeout,s=r.EnableIPv6,d=r.ForceEncrypt,p=r.DisableTCP,j=r.DisableUTP,b=r.DisableUPNP,u=r.DisableDHT,h=r.DisablePEX,x=r.DisableUpload,g=r.DownloadRateLimit,m=r.UploadRateLimit,O=r.ConnectionsLimit,f=r.PeersListenPort;return Object($.jsxs)(Ii,{children:[Object($.jsx)(Vi,{children:a("SettingsDialog.AdditionalSettings")}),Object($.jsx)(Ti.a,{control:Object($.jsx)($i.a,{checked:s,onChange:n,id:"EnableIPv6",color:"secondary"}),label:"IPv6",labelPlacement:"start"}),Object($.jsx)(Ti.a,{control:Object($.jsx)($i.a,{checked:!p,onChange:n,id:"DisableTCP",color:"secondary"}),label:"TCP (Transmission Control Protocol)",labelPlacement:"start"}),Object($.jsx)(Ti.a,{control:Object($.jsx)($i.a,{checked:!j,onChange:n,id:"DisableUTP",color:"secondary"}),label:"\u03bcTP (Micro Transport Protocol)",labelPlacement:"start"}),Object($.jsx)(Ti.a,{control:Object($.jsx)($i.a,{checked:!h,onChange:n,id:"DisablePEX",color:"secondary"}),label:"PEX (Peer Exchange)",labelPlacement:"start"}),Object($.jsx)(Ti.a,{control:Object($.jsx)($i.a,{checked:d,onChange:n,id:"ForceEncrypt",color:"secondary"}),label:a("SettingsDialog.ForceEncrypt"),labelPlacement:"start"}),Object($.jsx)(Va.a,{onChange:n,margin:"normal",id:"TorrentDisconnectTimeout",label:a("SettingsDialog.TorrentDisconnectTimeout"),InputProps:{endAdornment:Object($.jsx)(Za.a,{position:"end",children:a("Seconds")})},value:l,type:"number",variant:"outlined",fullWidth:!0}),Object($.jsx)("br",{}),Object($.jsx)(Va.a,{onChange:n,margin:"normal",id:"ConnectionsLimit",label:a("SettingsDialog.ConnectionsLimit"),helperText:a("SettingsDialog.ConnectionsLimitHint"),value:O,type:"number",variant:"outlined",fullWidth:!0}),Object($.jsx)("br",{}),Object($.jsx)(Ti.a,{control:Object($.jsx)($i.a,{checked:!u,onChange:n,id:"DisableDHT",color:"secondary"}),label:a("SettingsDialog.DHT"),labelPlacement:"start"}),Object($.jsx)(Ti.a,{control:Object($.jsx)($i.a,{checked:o,onChange:n,id:"AnnTorrentsToDht",color:"secondary"}),label:a("SettingsDialog.AnnTorrentsToDht"),labelPlacement:"start"}),Object($.jsx)(Ti.a,{control:Object($.jsx)($i.a,{checked:i,onChange:n,id:"AcceptPeerCon",color:"secondary"}),label:a("SettingsDialog.AcceptPeerCon"),labelPlacement:"start"}),Object($.jsx)("br",{}),Object($.jsx)(Va.a,{onChange:n,margin:"normal",id:"DownloadRateLimit",label:a("SettingsDialog.DownloadRateLimit"),InputProps:{endAdornment:Object($.jsx)(Za.a,{position:"end",children:a("Kilobytes")})},value:g,type:"number",variant:"outlined",fullWidth:!0}),Object($.jsx)("br",{}),Object($.jsx)(Ti.a,{control:Object($.jsx)($i.a,{checked:!x,onChange:n,id:"DisableUpload",color:"secondary"}),label:a("SettingsDialog.Upload"),labelPlacement:"start"}),Object($.jsx)(Va.a,{onChange:n,margin:"normal",id:"UploadRateLimit",label:a("SettingsDialog.UploadRateLimit"),InputProps:{endAdornment:Object($.jsx)(Za.a,{position:"end",children:a("Kilobytes")})},value:m,type:"number",variant:"outlined",fullWidth:!0}),Object($.jsx)("br",{}),Object($.jsx)(Va.a,{onChange:n,margin:"normal",id:"PeersListenPort",label:a("SettingsDialog.PeersListenPort"),value:f,type:"number",variant:"outlined",fullWidth:!0}),Object($.jsx)(Ti.a,{control:Object($.jsx)($i.a,{checked:!b,onChange:n,id:"DisableUPNP",color:"secondary"}),label:"UPnP (Universal Plug and Play)",labelPlacement:"start"}),Object($.jsx)("br",{}),Object($.jsx)(ao.a,{htmlFor:"RetrackersMode",children:a("SettingsDialog.RetrackersMode")}),Object($.jsxs)(ro.a,{onChange:n,margin:"normal",type:"number",native:!0,id:"RetrackersMode",value:c,variant:"outlined",children:[Object($.jsx)("option",{value:0,children:a("SettingsDialog.DontAddRetrackers")}),Object($.jsx)("option",{value:1,children:a("SettingsDialog.AddRetrackers")}),Object($.jsx)("option",{value:2,children:a("SettingsDialog.RemoveRetrackers")}),Object($.jsx)("option",{value:3,children:a("SettingsDialog.ReplaceRetrackers")})]}),Object($.jsx)("br",{})]})}function oo(e){var t=e.handleClose,n=Object(ce.a)().t,r=Object(Re.a)("@media (max-width:930px)"),i=Object(Y.a)().direction,o=Object(a.useState)(),c=Object(l.a)(o,2),s=c[0],d=c[1],p=Object(a.useState)(0),j=Object(l.a)(p,2),b=j[0],u=j[1],h=Object(a.useState)(32),x=Object(l.a)(h,2),g=x[0],m=x[1],O=Object(a.useState)(40),f=Object(l.a)(O,2),C=f[0],v=f[1],y=Object(a.useState)(0),S=Object(l.a)(y,2),D=S[0],k=S[1],T=Object(a.useState)(JSON.parse(localStorage.getItem("isProMode"))||!1),B=Object(l.a)(T,2),R=B[0],L=B[1];Object(a.useEffect)((function(){P.a.post(w(),{action:"get"}).then((function(e){var t=e.data;d(Object(M.a)(Object(M.a)({},t),{},{CacheSize:t.CacheSize/1048576}))}))}),[]);var A=function(e){var t=e.target,n=t.type,a=t.value,r=t.checked,i=t.id,o=JSON.parse(JSON.stringify(s));"number"===n||"select-one"===n?o[i]=Number(a):"checkbox"===n?o[i]="DisableTCP"===i||"DisableUTP"===i||"DisableUPNP"===i||"DisableDHT"===i||"DisablePEX"===i||"DisableUpload"===i?Boolean(!r):Boolean(r):"url"===n&&(o[i]=a),d(o)},z=s||{},F=z.CacheSize,E=z.ReaderReadAHead,G=z.PreloadCache;Object(a.useEffect)((function(){isNaN(F)||isNaN(E)||isNaN(G)||(m(F),v(E),k(G))}),[F,E,G]);var N=function(e){return d(Object(M.a)(Object(M.a)({},s),e))};return Object($.jsxs)(An.a,{open:!0,onClose:t,fullScreen:r,fullWidth:!0,maxWidth:"md",children:[Object($.jsxs)(zi,{children:[Object($.jsx)("div",{children:n("SettingsDialog.Settings")}),Object($.jsx)(Ti.a,{control:Object($.jsx)(ki.a,{checked:R,onChange:function(e){var t=e.target.checked;L(t),localStorage.setItem("isProMode",t),t||u(0)},style:{color:"white"}}),label:n("SettingsDialog.ProMode")})]}),Object($.jsx)(de.a,{position:"static",color:"default",children:Object($.jsxs)(Pi.a,{value:b,onChange:function(e,t){return u(t)},indicatorColor:"secondary",textColor:"secondary",variant:"fullWidth",children:[Object($.jsx)(Mi.a,Object(M.a)({label:n("SettingsDialog.Tabs.Main")},Ji(0))),Object($.jsx)(Mi.a,Object(M.a)({disabled:!R,label:Object($.jsxs)($.Fragment,{children:[Object($.jsx)("div",{children:n("SettingsDialog.Tabs.Additional")}),!R&&Object($.jsx)("div",{style:{fontSize:"9px"},children:n("SettingsDialog.Tabs.AdditionalDisabled")})]})},Ji(1)))]})}),Object($.jsx)(Ei,{isLoading:!s,children:s?Object($.jsx)($.Fragment,{children:Object($.jsxs)(Ri.a,{axis:"rtl"===i?"x-reverse":"x",index:b,onChangeIndex:function(e){return u(e)},children:[Object($.jsx)(Yi,{value:b,index:0,dir:i,children:Object($.jsx)(no,{settings:s,inputForm:A,cachePercentage:C,preloadCachePercentage:D,cacheSize:g,isProMode:R,setCacheSize:m,setCachePercentage:v,setPreloadCachePercentage:k,updateSettings:N})}),Object($.jsx)(Yi,{value:b,index:1,dir:i,children:Object($.jsx)(io,{settings:s,inputForm:A})})]})}):Object($.jsx)(oe.a,{color:"secondary"})}),Object($.jsxs)(Fi,{children:[Object($.jsx)(ne.a,{onClick:t,color:"secondary",variant:"outlined",children:n("Cancel")}),Object($.jsx)(ne.a,{onClick:function(){m(_i.CacheSize),v(_i.ReaderReadAHead),k(_i.PreloadCache),N(_i)},color:"secondary",variant:"outlined",children:n("SettingsDialog.ResetToDefault")}),Object($.jsx)(ne.a,{variant:"contained",onClick:function(){t();var e=JSON.parse(JSON.stringify(s));e.CacheSize=1024*g*1024,e.ReaderReadAHead=C,e.PreloadCache=D,P.a.post(w(),{action:"set",sets:e})},color:"secondary",children:n("Save")})]})]})}function co(e){var t=e.isOffline,n=e.isLoading,r=Object(ce.a)().t,i=Object(a.useState)(!1),o=Object(l.a)(i,2),c=o[0],s=o[1];return Object($.jsxs)("div",{children:[Object($.jsxs)(Hr.a,{disabled:t||n,button:!0,onClick:function(){return s(!0)},children:[Object($.jsx)(Xr.a,{children:Object($.jsx)(Di.a,{})}),Object($.jsx)(qr.a,{primary:r("SettingsDialog.Settings")})]}),c&&Object($.jsx)(oo,{handleClose:function(){return s(!1)}})]})}var lo=n(193),so=n.n(lo);function po(e){var t=e.isOffline,n=e.isLoading,r=Object(ce.a)().t,i=Object(a.useState)(!1),o=Object(l.a)(i,2),c=o[0],s=o[1],d=function(){return s(!1)};return Object($.jsxs)($.Fragment,{children:[Object($.jsxs)(Hr.a,{disabled:t||n,button:!0,onClick:function(){return s(!0)},children:[Object($.jsx)(Xr.a,{children:Object($.jsx)(so.a,{})}),Object($.jsx)(qr.a,{primary:r("RemoveAll")})]},r("RemoveAll")),Object($.jsxs)(An.a,{open:c,onClose:d,children:[Object($.jsx)(Fn.a,{children:r("DeleteTorrents?")}),Object($.jsxs)(En.a,{children:[Object($.jsx)(ne.a,{variant:"outlined",onClick:d,color:"secondary",children:r("Cancel")}),Object($.jsx)(ne.a,{variant:"contained",onClick:function(){fetch(v(),{method:"post",body:JSON.stringify({action:"list"}),headers:{Accept:"application/json, text/plain, */*","Content-Type":"application/json"}}).then((function(e){return e.json()})).then((function(e){e.forEach((function(e){fetch(v(),{method:"post",body:JSON.stringify({action:"rem",hash:e.hash}),headers:{Accept:"application/json, text/plain, */*","Content-Type":"application/json"}})}))})),d()},color:"secondary",autoFocus:!0,children:r("OK")})]})]})]})}var jo,bo,uo,ho,xo,go,mo,Oo,fo,Co,vo=n(194),yo=n.n(vo),wo=n(465),So=He.d.div(jo||(jo=Object(Ue.a)(["\n height: 100%;\n display: grid;\n grid-template-rows: max-content 1fr max-content;\n"]))),Do=He.d.section(bo||(bo=Object(Ue.a)(["\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 36px;\n font-weight: 300;\n padding: 20px;\n\n img {\n width: 64px;\n }\n\n @media (max-width: 930px) {\n font-size: 24px;\n padding: 10px 20px;\n\n img {\n width: 60px;\n }\n }\n"]))),ko=He.d.section(uo||(uo=Object(Ue.a)(["\n padding: 20px;\n text-align: center;\n font-size: 24px;\n font-weight: 300;\n background: #e8e5eb;\n color: #323637;\n\n @media (max-width: 930px) {\n font-size: 20px;\n padding: 30px 20px;\n }\n"]))),To=He.d.section(ho||(ho=Object(Ue.a)(["\n padding: 20px;\n\n > span {\n font-size: 20px;\n display: block;\n margin-bottom: 15px;\n }\n\n a {\n text-decoration: none;\n }\n\n > div {\n display: grid;\n gap: 10px;\n grid-template-columns: repeat(4, max-content);\n\n @media (max-width: 930px) {\n grid-template-columns: repeat(3, 1fr);\n }\n\n @media (max-width: 780px) {\n grid-template-columns: repeat(2, 1fr);\n }\n\n @media (max-width: 550px) {\n grid-template-columns: 1fr;\n }\n }\n"]))),Po=He.d.div(xo||(xo=Object(Ue.a)(["\n padding: 20px;\n display: flex;\n justify-content: flex-end;\n background: #e8e5eb;\n"]))),Mo=He.d.a(go||(go=Object(Ue.a)(["\n ","\n"])),(function(e){var t=e.isLink;return Object(He.c)(mo||(mo=Object(Ue.a)(["\n display: inline-flex;\n align-items: center;\n justify-content: start;\n border: 1px solid;\n padding: 10px;\n border-radius: 5px;\n text-transform: uppercase;\n text-decoration: none;\n background: #545a5e;\n color: #f1eff3;\n transition: 0.2s;\n\n > * {\n transition: 0.2s;\n }\n\n ","\n "])),t?Object(He.c)(Oo||(Oo=Object(Ue.a)(["\n :hover {\n filter: brightness(1.1);\n\n > * {\n transform: translateY(-1px);\n }\n }\n "]))):Object(He.c)(fo||(fo=Object(Ue.a)(["\n cursor: default;\n "]))))})),Bo=He.d.div(Co||(Co=Object(Ue.a)(["\n display: grid;\n margin-right: 10px;\n"])));function Ro(e){var t=e.name,n=e.link;return Object($.jsxs)(Mo,{isLink:!!n,href:n,target:"_blank",rel:"noreferrer",children:[n&&Object($.jsx)(Bo,{children:Object($.jsx)(wo.a,{})}),Object($.jsx)("div",{children:t})]})}function Lo(){var e=Object(ce.a)().t,t=Object(a.useState)(!1),n=Object(l.a)(t,2),r=n[0],i=n[1],o=Object(a.useState)(""),c=Object(l.a)(o,2),s=c[0],d=c[1],p=Object(Re.a)("@media (max-width:930px)");return Object(a.useEffect)((function(){P.a.get(D()).then((function(e){var t=e.data;return d(t)}))}),[]),Object($.jsxs)($.Fragment,{children:[Object($.jsxs)(Hr.a,{button:!0,onClick:function(){return i(!0)},children:[Object($.jsx)(Xr.a,{children:Object($.jsx)(yo.a,{})}),Object($.jsx)(qr.a,{primary:e("About")})]},"Settings"),Object($.jsx)(An.a,{open:r,onClose:function(){return i(!1)},"aria-labelledby":"form-dialog-title",fullScreen:p,maxWidth:"xl",children:Object($.jsxs)(So,{children:[Object($.jsxs)(Do,{children:[Object($.jsx)("div",{children:e("About")}),s,Object($.jsx)("img",{src:"/apple-touch-icon.png",alt:"ts-icon"})]}),Object($.jsxs)("div",{style:{overflow:"auto"},children:[Object($.jsx)(ko,{children:e("ThanksToEveryone")}),Object($.jsxs)(To,{children:[Object($.jsx)("span",{children:e("Links")}),Object($.jsxs)("div",{children:[Object($.jsx)(Ro,{name:e("ProjectSource"),link:"https://github.com/YouROK/TorrServer"}),Object($.jsx)(Ro,{name:e("Releases"),link:"https://github.com/YouROK/TorrServer/releases"})]})]}),Object($.jsxs)(To,{children:[Object($.jsx)("span",{children:e("SpecialThanks")}),Object($.jsxs)("div",{children:[Object($.jsx)(Ro,{name:"Daniel Shleifman",link:"https://github.com/dancheskus"}),Object($.jsx)(Ro,{name:"Matt Joiner",link:"https://github.com/anacrolix"}),Object($.jsx)(Ro,{name:"nikk",link:"https://github.com/tsynik"}),Object($.jsx)(Ro,{name:"tw1cker \u0420\u0443\u0441\u043b\u0430\u043d \u041f\u0430\u0445\u043d\u0435\u0432",link:"https://github.com/Nemiroff"}),Object($.jsx)(Ro,{name:"SpAwN_LMG",link:"https://github.com/spawnlmg"})]})]})]}),Object($.jsx)(Po,{children:Object($.jsx)(ne.a,{onClick:function(){return i(!1)},color:"primary",variant:"contained",children:e("Close")})})]})})]})}var Ao=n(466);function zo(e){var t=e.isOffline,n=e.isLoading,r=Object(ce.a)().t,i=Object(a.useState)(!1),o=Object(l.a)(i,2),c=o[0],s=o[1],d=function(){return s(!1)};return Object($.jsxs)($.Fragment,{children:[Object($.jsxs)(Hr.a,{disabled:t||n,button:!0,onClick:function(){return s(!0)},children:[Object($.jsx)(Xr.a,{children:Object($.jsx)(Ao.a,{})}),Object($.jsx)(qr.a,{primary:r("CloseServer")})]},r("CloseServer")),Object($.jsxs)(An.a,{open:c,onClose:d,children:[Object($.jsx)(Fn.a,{children:r("CloseServer?")}),Object($.jsxs)(En.a,{children:[Object($.jsx)(ne.a,{variant:"outlined",onClick:d,color:"secondary",children:r("Cancel")}),Object($.jsx)(ne.a,{variant:"contained",onClick:function(){fetch("".concat(C,"/shutdown")),d()},color:"secondary",autoFocus:!0,children:r("TurnOff")})]})]})]})}var Fo=function(e){var t=e.isDrawerOpen,n=e.setIsDonationDialogOpen,a=e.isOffline,r=e.isLoading,i=Object(ce.a)().t;return Object($.jsxs)(Rr,{isDrawerOpen:t,children:[Object($.jsxs)(Vr.a,{children:[Object($.jsx)(ni,{isOffline:a,isLoading:r}),Object($.jsx)(po,{isOffline:a,isLoading:r})]}),Object($.jsx)($r.a,{}),Object($.jsxs)(Vr.a,{children:[Object($.jsx)(co,{isOffline:a,isLoading:r}),Object($.jsx)(Lo,{}),Object($.jsxs)(Hr.a,{button:!0,onClick:function(){return n(!0)},children:[Object($.jsx)(Xr.a,{children:Object($.jsx)(Qr.a,{})}),Object($.jsx)(qr.a,{primary:i("Donate")})]}),Object($.jsx)(zo,{isOffline:a,isLoading:r})]})]})},Eo=Object(a.memo)(Fo),Go=Object(a.createContext)();function No(){var e,t=Object(a.useState)(!1),n=Object(l.a)(t,2),r=n[0],i=n[1],o=Object(a.useState)(!1),c=Object(l.a)(o,2),g=c[0],m=c[1],O=Object(a.useState)(""),f=Object(l.a)(O,2),C=f[0],v=f[1],y=function(){var e=localStorage.getItem("themeMode"),t=Object(Re.a)("(prefers-color-scheme: dark)"),n=Object(a.useState)("dark"===e||t),r=Object(l.a)(n,2),i=r[0],o=r[1],c=Object(a.useState)(e||Fe),s=Object(l.a)(c,2),d=s[0],p=s[1];Object(a.useEffect)((function(){d===Fe&&o(!1),d===Ee&&o(!0),d===Ge&&o(t)}),[t,d]);var j=i?Ee:Fe,b=Object(a.useMemo)((function(){return Object(Be.a)({typography:Ne,palette:{type:j,primary:{main:ze[j].primary},secondary:{main:ze[j].secondary}},overrides:{MuiInputBase:{input:{color:ze[j].labels}},MuiFormControlLabel:{labelPlacementStart:{display:"flex",justifyContent:"space-between",marginStart:0,marginTop:6,marginBottom:2}},MuiInputLabel:{root:{color:ze[j].labels,marginBottom:8,"&$focused":{color:ze[j].labels}}}}})}),[j]);return[i,d,function(e){p(e),localStorage.setItem("themeMode",e)},b]}(),w=Object(l.a)(y,4),S=w[0],T=w[1],B=w[2],R=w[3],L=In(),A=Object(l.a)(L,2),z=A[0],F=A[1],E=Object(a.useState)(!1),G=Object(l.a)(E,2),N=G[0],I=G[1],U=Object(ga.a)("torrents",J,{retry:1,refetchInterval:1e3,onError:function(){return I(!0)},onSuccess:function(){return I(!1)}}),H=U.data,W=U.isLoading;return Object(a.useEffect)((function(){P.a.get(D()).then((function(e){var t=e.data;return v(t)}))}),[]),Object($.jsxs)($.Fragment,{children:[Object($.jsx)(Yr,{}),Object($.jsx)(Go.Provider,{value:{isDarkMode:S},children:Object($.jsx)(Jr.a,{theme:R,children:Object($.jsxs)(He.a,{theme:(e=S?Ee:Fe,Object(M.a)(Object(M.a)({},Ae[e]),ze[e])),children:[Object($.jsx)(s.a,{}),Object($.jsx)(k.a,{children:Object($.jsxs)(Pr,{children:[Object($.jsxs)(Br,{children:[Object($.jsx)(p.a,{edge:"start",color:"inherit",onClick:function(){return i(!r)},style:{marginRight:"6px"},children:r?Object($.jsx)(j.a,{}):Object($.jsx)(b.a,{})}),Object($.jsxs)(d.a,{variant:"h6",noWrap:!0,children:["TorrServer ",C]}),Object($.jsxs)("div",{style:{justifySelf:"end",display:"grid",gridTemplateColumns:"repeat(2, 1fr)",gap:"10px"},children:[Object($.jsx)(Ar,{onClick:function(){T===Fe&&B(Ee),T===Ee&&B(Ge),T===Ge&&B(Fe)},children:T===Fe?Object($.jsx)(u.a,{}):T===Ee?Object($.jsx)(h.a,{}):Object($.jsx)(x.a,{})}),Object($.jsx)(Ar,{onClick:function(){return F("en"===z?"ru":"en")},children:"en"===z?"EN":"RU"})]})]}),Object($.jsx)(Eo,{isOffline:N,isLoading:W,isDrawerOpen:r,setIsDonationDialogOpen:m}),Object($.jsx)(Gr,{isOffline:N,torrents:H,isLoading:W}),Object($.jsx)(Jr.a,{theme:Ie,children:g&&Object($.jsx)(Zr,{onClose:function(){return m(!1)}})}),!JSON.parse(localStorage.getItem("snackbarIsClosed"))&&Object($.jsx)(_r,{})]})})]})})})]})}var Io=new o.a;i.a.render(Object($.jsx)(a.StrictMode,{children:Object($.jsx)(c.a,{client:Io,children:Object($.jsx)(No,{})})}),document.getElementById("root"))}},[[382,1,2]]]); -//# sourceMappingURL=main.156908fe.chunk.js.map \ No newline at end of file diff --git a/server/web/pages/template/pages/static/js/main.156908fe.chunk.js.map b/server/web/pages/template/pages/static/js/main.156908fe.chunk.js.map deleted file mode 100644 index f0c4606..0000000 --- a/server/web/pages/template/pages/static/js/main.156908fe.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["utils/Hosts.js","i18n.js","utils/Utils.js","icons/index.jsx","components/DialogTorrentDetailsContent/customHooks.jsx","components/DialogTorrentDetailsContent/DialogHeader.jsx","style/colors.js","style/materialUISetup.js","components/DialogTorrentDetailsContent/TorrentCache/snakeSettings.js","components/DialogTorrentDetailsContent/TorrentCache/style.js","components/DialogTorrentDetailsContent/TorrentCache/index.jsx","components/DialogTorrentDetailsContent/TorrentCache/getShortCacheMap.js","components/DialogTorrentDetailsContent/Table/style.js","components/DialogTorrentDetailsContent/Table/index.jsx","components/DialogTorrentDetailsContent/style.js","components/DialogTorrentDetailsContent/DetailedView/style.js","components/DialogTorrentDetailsContent/StatisticsField.jsx","components/DialogTorrentDetailsContent/widgets/useGetWidgetColors.jsx","components/DialogTorrentDetailsContent/widgets/index.jsx","torrentStates.js","components/DialogTorrentDetailsContent/DetailedView/index.jsx","components/DialogTorrentDetailsContent/TorrentFunctions/style.js","components/DialogTorrentDetailsContent/TorrentFunctions/index.jsx","components/DialogTorrentDetailsContent/helpers.js","components/DialogTorrentDetailsContent/index.jsx","utils/useChangeLanguage.js","utils/usePreviousState.js","style/DialogStyles.js","components/Add/helpers.js","components/Add/style.js","components/Add/RightSideComponent.jsx","components/Add/LeftSideComponent.jsx","components/Add/AddDialog.jsx","components/TorrentCard/style.js","components/TorrentCard/index.jsx","components/App/style.js","components/TorrentList/style.js","components/TorrentList/NoServerConnection.jsx","components/TorrentList/AddFirstTorrent.jsx","components/TorrentList/index.jsx","components/Donate/DonateDialog.jsx","components/Donate/index.jsx","style/GlobalStyle.js","components/Add/index.jsx","components/Settings/style.js","components/Settings/defaultSettings.js","components/Settings/tabComponents.jsx","components/Settings/SliderInput.jsx","components/Settings/PrimarySettingsComponent.jsx","components/Settings/SecondarySettingsComponent.jsx","components/Settings/SettingsDialog.jsx","components/Settings/index.jsx","components/RemoveAll.jsx","components/About/style.js","components/About/LinkComponent.jsx","components/About/index.jsx","components/CloseServer.jsx","components/App/Sidebar.jsx","components/App/index.jsx","style/getStyledComponentsTheme.js","index.jsx"],"names":["window","location","protocol","hostname","port","torrserverHost","torrentsHost","viewedHost","settingsHost","streamHost","echoHost","i18n","use","LanguageDetector","initReactI18next","init","fallbackLng","interpolation","escapeValue","resources","en","translation","translationEN","ru","translationRU","humanizeSize","size","i","Math","floor","log","pow","toFixed","t","humanizeSpeed","speed","getPeerString","torrent","connected_seeders","active_peers","total_peers","removeRedundantCharacters","string","newString","forEach","el","leftBracketRegexFormula","leftBracketRegex","RegExp","leftBracketAmount","matchAll","length","rightBracketRegexFormula","rightBracketRegex","removeFormula","removeRegex","replace","hasThreeDotsAtTheEnd","match","trimmedString","trim","getTorrents","a","axios","post","action","data","Error","NoImageIcon","color","primary","useTheme","palette","main","height","width","fill","xmlns","xmlnsXlink","version","x","y","viewBox","enableBackground","xmlSpace","d","points","AddItemIcon","id","opacity","USBIcon","RAMIcon","TorrentIcon","secondaryColor","useUpdateCache","hash","useState","cache","setCache","componentIsMounted","useRef","timerID","useEffect","current","setInterval","updateCache","newCache","then","catch","clearInterval","useStyles","makeStyles","theme","appBar","position","title","marginLeft","flex","DialogHeader","onClose","onBack","useTranslation","classes","AppBar","className","Toolbar","IconButton","edge","onClick","aria-label","ArrowBack","Typography","variant","Button","autoFocus","themeColors","light","app","headerToggleColor","appSecondaryColor","sidebarBGColor","sidebarFillColor","torrentCard","accentCardColor","buttonBGColor","rgba","cardPrimaryColor","cardSecondaryColor","dialogTorrentDetailsContent","posterBGColor","gradientStartColor","gradientEndColor","chacheSectionBGColor","widgetFontColor","titleFontColor","subNameFontColor","torrentFilesSectionBGColor","detailedView","cacheSectionBGColor","addDialog","fontColor","notificationErrorBGColor","notificationSuccessBGColor","languageSwitchBGColor","languageSwitchFontColor","torrentFunctions","table","defaultPrimaryColor","defaultSecondaryColor","defaultTertiaryColor","settingsDialog","contentBG","footerBG","dark","mainColors","secondary","labels","THEME_MODES","typography","fontFamily","lightTheme","createMuiTheme","type","snakeSettings","default","borderWidth","pieceSize","gapBetweenPieces","borderColor","completeColor","backgroundColor","progressColor","readerColor","rangeColor","mini","cacheMaxHeight","ScrollNotification","styled","div","SnakeWrapper","isMini","themeType","css","TorrentCache","shotCacheMap","dimensions","setDimensions","canvasRef","ctxRef","cacheMap","setCacheMap","PiecesCount","Pieces","Readers","map","Size","Length","newPiece","percentage","r","Reader","isReader","Start","End","isReaderRange","push","useCreateCacheMap","settingsTarget","useContext","DarkModeContext","isDarkMode","canvasWidth","pieceSizeWithGap","piecesInOneRow","preloadPiecesAmount","cacheMapWithoutEmptyBlocks","filter","getFullAmountOfBlocks","amountOfBlocks","amountOfBlocksToRenderInShortView","scalableAmountOfBlocksToRenderInShortView","extraBlocksAmount","max","extraEmptyBlocksForFillingLine","Array","getShortCacheMap","round","Capacity","PiecesLength","source","startingXPoint","ceil","canvas","getContext","ctx","clearRect","inProgress","isCompleted","currentRow","currentColumn","fixBlurStroke","requiredFix","lineWidth","fillStyle","snakeType","gradient","createLinearGradient","addColorStop","createGradient","strokeStyle","translate","fillRect","strokeRect","setTransform","bounds","onResize","measureRef","style","display","flexDirection","ref","memo","prev","next","isEqual","viewedPrimaryColor","viewedIndicator","TableStyle","ShortTableWrapper","ShortTable","isViewed","require","ptt","addHandler","Table","playableFileList","viewedFileList","selectedSeason","seasonAmount","preloadBuffer","fileId","fetch","getFileLink","path","encodeURIComponent","split","pop","fileHasEpisodeText","find","parse","episode","fileHasSeasonText","season","fileHasResolutionText","resolution","shouldDisplayFullFileName","includes","link","data-label","textDecoration","href","target","rel","text","DialogContentGrid","Poster","poster","MainSection","section","CacheSection","TorrentFilesSection","SectionSubName","mb","SectionTitle","SectionHeader","WidgetWrapper","WidgetFieldWrapper","WidgetFieldTitle","WidgetFieldIcon","bgColor","WidgetFieldValue","LoadingProgress","attrs","value","fullAmount","min","background","label","Divider","DetailedViewWidgetSection","DetailedViewCacheSection","StatisticsField","Icon","icon","iconBg","valueBg","LIGHT","DARK","colors","downloadSpeed","iconBGColor","valueBGColor","uploadSpeed","peers","piecesCount","piecesLength","status","useGetWidgetColors","widgetName","DownlodSpeedWidget","ArrowDownwardIcon","UploadSpeedWidget","ArrowUpwardIcon","PeersWidget","SwapVerticalCircleIcon","PiecesCountWidget","WidgetsIcon","PiecesLengthWidget","PhotoSizeSelectSmallIcon","StatusWidget","stat","values","BuildIcon","SizeWidget","ViewAgendaIcon","DetailedView","torrentSize","MainSectionButtonGroup","SmallLabel","TorrentFunctions","name","setViewedFileList","latestViewedFileId","latestViewedFile","isOnlyOnePlayableFile","latestViewedFileData","fullPlaylistLink","partialPlaylistLink","file_index","playableExtList","Loader","minHeight","placeItems","CircularProgress","DialogTorrentDetailsContent","closeDialog","isLoading","setIsLoading","isDetailedCacheView","setIsDetailedCacheView","setPlayableFileList","setSeasonAmount","setSelectedSeason","download_speed","upload_speed","torrent_size","torrentFileList","file_stats","settings","setSettings","useGetSettings","Filled","seasons","currentSeason","sort","b","fileName","filename","ext","toLowerCase","getExt","cacheLoaded","Object","entries","torrentLoaded","lst","itm","preloadSize","PreloadCache","bufferSize","getParsedTitle","newNameStringArr","torrentParsedName","year","newNameString","join","overflow","alt","src","marginTop","ButtonGroup","marginBottom","language","lang","changeLanguage","usePreviousState","Header","ButtonWrapper","getMoviePosters","movieName","url","get","params","api_key","process","include_image_language","query","results","poster_path","checkImageURL","mode","magnetRegex","hashRegex","torrentRegex","Content","isEditMode","RightSide","RightSideContainer","isHidden","notificationMessage","isError","LeftSide","LeftSideBottomSectionBasicStyles","LeftSideBottomSectionNoFile","isDragActive","LeftSideBottomSectionFileSelected","TorrentIconWrapper","CancelIconWrapper","IconWrapper","LeftSideTopSection","active","PosterWrapper","PosterSuggestions","PosterSuggestionsItem","ClearPosterButton","showbutton","PosterLanguageSwitch","RightSideComponent","setTitle","setPosterUrl","setIsPosterUrlCorrect","setIsUserInteractedWithPoster","setPosterList","isTorrentSourceCorrect","isHashAlreadyExists","parsedTitle","posterUrl","isPosterUrlCorrect","posterList","currentLang","posterSearchLanguage","setPosterSearchLanguage","posterSearch","removePoster","torrentSource","originalTorrentTitle","updateTitleFromSource","isCustomTitleEnabled","setIsCustomTitleEnabled","handleTitleChange","TextField","margin","fullWidth","disabled","InputProps","readOnly","onChange","onFocus","onBlur","helperText","endAdornment","InputAdornment","padding","CheckBox","slice","userChangesPosterUrl","newLanguage","shouldRefreshMainPoster","LeftSideComponent","setSelectedFile","setTorrentSource","selectedFile","isTorrentSourceActive","setIsTorrentSourceActive","useDropzone","onDrop","files","file","accept","getRootProps","getInputProps","inputProps","autoComplete","Cancel","AddDialog","handleClose","originalHash","originalTitle","originalName","originalPoster","setOriginalTorrentTitle","setParsedTitle","setIsTorrentSourceCorrect","setIsHashAlreadyExists","isUserInteractedWithPoster","useChangeLanguage","isSaving","setIsSaving","skipDebounce","setSkipDebounce","currentSourceHash","setCurrentSourceHash","torrents","useQuery","retry","refetchInterval","parseTorrent","remote","_","infoHash","allHashes","fullScreen","useMediaQuery","useCallback","parsingSource","callback","err","torrentName","nameOfFileInsideTorrent","newTitle","correctImage","useMemo","urlList","firstPoster","delayedPosterSearch","debounce","prevTorrentSourceState","prevTitleState","cancel","Dialog","open","maxWidth","minWidth","finally","FormData","append","save_to_db","TorrentCard","TorrentCardPoster","isPoster","TorrentCardButtons","TorrentCardDescription","StyledButton","button","Transition","forwardRef","props","Slide","direction","Torrent","isDetailedInfoOpened","setIsDetailedInfoOpened","isDeleteTorrentOpened","setIsDeleteTorrentOpened","breakpoints","down","closeDetailedInfo","closeDeleteTorrentAlert","key","titleStrings","parsedYear","parsedResolution","isEditDialogOpen","setIsEditDialogOpen","UnfoldMore","Edit","Close","Delete","TransitionComponent","DialogTitle","DialogActions","AppWrapper","CenteredGrid","AppHeader","AppSidebarStyle","isDrawerOpen","TorrentListWrapper","HeaderToggle","isButton","NoServerConnection","trigger","stroke","scale","AddFirstTorrent","isDialogOpen","setIsDialogOpen","TorrentList","isOffline","DonateDialog","aria-labelledby","DialogContent","List","ListItem","dangerouslySetInnerHTML","__html","DonateSnackbar","setOpen","snackbarOpen","setSnackbarOpen","disableSnackbar","localStorage","setItem","Snackbar","anchorOrigin","vertical","horizontal","message","marginRight","fontSize","createGlobalStyle","AddDialogButton","ListItemIcon","ListItemText","cacheBeforeReaderColor","cacheAfterReaderColor","SettingsHeader","FooterSection","PreloadCacheValue","MainSettingsContent","SecondarySettingsContent","StorageButton","small","selected","StorageIconWrapper","CacheStorageSelector","SettingSectionLabel","PreloadCachePercentage","preloadCachePercentage","AcceptPeerCon","AnnTorrentsToDht","CacheSize","ReaderReadAHead","UseDisk","UploadRateLimit","TorrentsSavePath","ConnectionsLimit","DisableDHT","DisablePEX","DisableTCP","DisableUPNP","DisableUTP","DisableUpload","DownloadRateLimit","EnableDebug","EnableIPv6","ForceEncrypt","PeersListenPort","RemoveCacheOnDrop","RetrackersMode","TorrentDisconnectTimeout","a11yProps","index","TabPanel","children","other","role","hidden","SliderInput","isProMode","setValue","sliderMin","sliderMax","inputMin","inputMax","step","onBlurCallback","Grid","container","spacing","alignItems","item","xs","Slider","newValue","OutlinedInput","Number","CacheStorageLocationLabel","PrimarySettingsComponent","inputForm","cachePercentage","cacheSize","setCacheSize","setCachePercentage","setPreloadCachePercentage","updateSettings","preloadCacheSize","gridAutoFlow","FormControlLabel","control","Switch","checked","labelPlacement","placeSelf","gridArea","SecondarySettingsComponent","InputLabel","htmlFor","Select","native","SettingsDialog","selectedTab","setSelectedTab","JSON","getItem","setIsProMode","sets","stringify","Boolean","isNaN","newProps","Checkbox","Tabs","indicatorColor","textColor","Tab","axis","onChangeIndex","dir","defaultSettings","SettingsDialogButton","RemoveAll","method","body","headers","Accept","res","json","torr","DialogWrapper","HeaderSection","ThanksSection","Section","LinkWrapper","isLink","LinkIcon","LinkComponent","GitHub","AboutDialog","torrServerVersion","setTorrServerVersion","CloseServer","PowerSettingsNew","Sidebar","setIsDonationDialogOpen","createContext","App","setIsDrawerOpen","isDonationDialogOpen","savedThemeMode","isSystemModeDark","setIsDarkMode","currentThemeMode","setCurrentThemeMode","muiTheme","overrides","MuiInputBase","input","MuiFormControlLabel","labelPlacementStart","justifyContent","marginStart","MuiInputLabel","root","useMaterialUITheme","updateThemeMode","changeLang","setIsOffline","onError","onSuccess","GlobalStyle","Provider","CssBaseline","Menu","noWrap","justifySelf","gridTemplateColumns","gap","Brightness5","Brightness4","BrightnessAuto","queryClient","QueryClient","ReactDOM","render","QueryClientProvider","client","document","getElementById"],"mappings":"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","file":"static/js/main.156908fe.chunk.js","sourcesContent":["const { protocol, hostname, port } = window.location\n\nlet torrserverHost = process.env.REACT_APP_SERVER_HOST || `${protocol}//${hostname}${port ? `:${port}` : ''}`\n\nexport const torrentsHost = () => `${torrserverHost}/torrents`\nexport const viewedHost = () => `${torrserverHost}/viewed`\nexport const cacheHost = () => `${torrserverHost}/cache`\nexport const torrentUploadHost = () => `${torrserverHost}/torrent/upload`\nexport const settingsHost = () => `${torrserverHost}/settings`\nexport const streamHost = () => `${torrserverHost}/stream`\nexport const shutdownHost = () => `${torrserverHost}/shutdown`\nexport const echoHost = () => `${torrserverHost}/echo`\nexport const playlistTorrHost = () => `${torrserverHost}/stream`\n\nexport const getTorrServerHost = () => torrserverHost\nexport const setTorrServerHost = host => {\n torrserverHost = host\n}\n","import i18n from 'i18next'\nimport { initReactI18next } from 'react-i18next'\nimport LanguageDetector from 'i18next-browser-languagedetector'\nimport translationEN from 'locales/en/translation.json'\nimport translationRU from 'locales/ru/translation.json'\n\ni18n\n .use(LanguageDetector)\n .use(initReactI18next)\n .init({\n fallbackLng: 'en', // default language will be used if none of declared lanuages detected (en, ru)\n interpolation: { escapeValue: false }, // react already safes from xss\n resources: { en: { translation: translationEN }, ru: { translation: translationRU } },\n })\n\nexport default i18n\n","import axios from 'axios'\n\nimport i18n from '../i18n'\nimport { torrentsHost } from './Hosts'\n\nexport function humanizeSize(size) {\n if (!size) return ''\n const i = Math.floor(Math.log(size) / Math.log(1024))\n return `${(size / Math.pow(1024, i)).toFixed(2) * 1} ${\n [i18n.t('B'), i18n.t('KB'), i18n.t('MB'), i18n.t('GB'), i18n.t('TB')][i]\n }`\n}\n\nexport function humanizeSpeed(speed) {\n if (!speed) return ''\n const i = Math.floor(Math.log(speed * 8) / Math.log(1000))\n return `${((speed * 8) / Math.pow(1000, i)).toFixed(0) * 1} ${\n [i18n.t('bps'), i18n.t('kbps'), i18n.t('Mbps'), i18n.t('Gbps'), i18n.t('Tbps')][i]\n }`\n}\n\nexport function getPeerString(torrent) {\n if (!torrent || !torrent.connected_seeders) return null\n return `${torrent.connected_seeders} · ${torrent.active_peers} / ${torrent.total_peers}`\n}\n\nexport const shortenText = (text, sympolAmount) =>\n text ? text.slice(0, sympolAmount) + (text.length > sympolAmount ? '…' : '') : ''\n\nexport const removeRedundantCharacters = string => {\n let newString = string\n const brackets = [\n ['(', ')'],\n ['[', ']'],\n ['{', '}'],\n ]\n\n brackets.forEach(el => {\n const leftBracketRegexFormula = `\\\\${el[0]}`\n const leftBracketRegex = new RegExp(leftBracketRegexFormula, 'g')\n const leftBracketAmount = [...newString.matchAll(leftBracketRegex)].length\n const rightBracketRegexFormula = `\\\\${el[1]}`\n const rightBracketRegex = new RegExp(rightBracketRegexFormula, 'g')\n const rightBracketAmount = [...newString.matchAll(rightBracketRegex)].length\n\n if (leftBracketAmount !== rightBracketAmount) {\n const removeFormula = `(\\\\${el[0]})(?!.*\\\\1).*`\n const removeRegex = new RegExp(removeFormula, 'g')\n newString = newString.replace(removeRegex, '')\n }\n })\n\n const hasThreeDotsAtTheEnd = !!newString.match(/\\.{3}$/g)\n\n const trimmedString = newString.replace(/[\\\\.| ]+$/g, '').trim()\n\n return hasThreeDotsAtTheEnd ? `${trimmedString}..` : trimmedString\n}\n\nexport const getTorrents = async () => {\n try {\n const { data } = await axios.post(torrentsHost(), { action: 'list' })\n return data\n } catch (error) {\n throw new Error(null)\n }\n}\n","import { useTheme } from '@material-ui/core'\n\nexport const NoImageIcon = ({ color }) => {\n const primary = useTheme().palette.primary.main\n\n return (\n \n \n \n \n \n \n \n )\n}\n\nexport const AddItemIcon = () => {\n const primary = useTheme().palette.primary.main\n\n return (\n \n \n \n \n \n \n )\n}\n\nexport const USBIcon = ({ color, width }) => {\n const primary = useTheme().palette.primary.main\n\n return (\n \n \n \n \n \n \n )\n}\n\nexport const RAMIcon = ({ color, width }) => {\n const primary = useTheme().palette.primary.main\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport const TorrentIcon = () => {\n const primary = useTheme().palette.primary.main\n const secondaryColor = primary === '#00a572' ? '#74c39c' : '#4a5255'\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import { useEffect, useRef, useState } from 'react'\nimport { cacheHost, settingsHost } from 'utils/Hosts'\nimport axios from 'axios'\n\nexport const useUpdateCache = hash => {\n const [cache, setCache] = useState({})\n const componentIsMounted = useRef(true)\n const timerID = useRef(null)\n\n useEffect(\n () => () => {\n // this function is required to notify \"updateCache\" when NOT to make state update\n componentIsMounted.current = false\n },\n [],\n )\n\n useEffect(() => {\n if (hash) {\n timerID.current = setInterval(() => {\n const updateCache = newCache => componentIsMounted.current && setCache(newCache)\n\n axios\n .post(cacheHost(), { action: 'get', hash })\n .then(({ data }) => updateCache(data))\n // empty cache if error\n .catch(() => updateCache({}))\n }, 100)\n } else clearInterval(timerID.current)\n\n return () => clearInterval(timerID.current)\n }, [hash])\n\n return cache\n}\n\nexport const useCreateCacheMap = cache => {\n const [cacheMap, setCacheMap] = useState([])\n\n useEffect(() => {\n const { PiecesCount, Pieces, Readers } = cache\n\n const map = []\n\n for (let i = 0; i < PiecesCount; i++) {\n const { Size, Length } = Pieces[i] || {}\n\n const newPiece = { id: i, percentage: (Size / Length) * 100 || 0 }\n\n Readers.forEach(r => {\n if (i === r.Reader) newPiece.isReader = true\n if (i >= r.Start && i <= r.End) newPiece.isReaderRange = true\n })\n\n map.push(newPiece)\n }\n setCacheMap(map)\n }, [cache])\n\n return cacheMap\n}\n\nexport const useGetSettings = cache => {\n const [settings, setSettings] = useState()\n useEffect(() => {\n axios.post(settingsHost(), { action: 'get' }).then(({ data }) => setSettings(data))\n }, [cache])\n\n return settings\n}\n","import Button from '@material-ui/core/Button'\nimport { AppBar, IconButton, makeStyles, Toolbar, Typography } from '@material-ui/core'\nimport CloseIcon from '@material-ui/icons/Close'\nimport { ArrowBack } from '@material-ui/icons'\nimport { useTranslation } from 'react-i18next'\n\nconst useStyles = makeStyles(theme => ({\n appBar: { position: 'relative' },\n title: { marginLeft: '6px', flex: 1 },\n}))\n\nexport default function DialogHeader({ title, onClose, onBack }) {\n const { t } = useTranslation()\n const classes = useStyles()\n\n return (\n \n \n \n {onBack ? : }\n \n\n \n {title}\n \n\n {onBack && (\n \n )}\n \n \n )\n}\n","import { rgba } from 'polished'\n\nexport const themeColors = {\n light: {\n app: {\n headerToggleColor: '#4db380',\n appSecondaryColor: '#cbe8d9',\n sidebarBGColor: '#575757',\n sidebarFillColor: '#dee3e5',\n },\n torrentCard: {\n accentCardColor: '#337a57',\n buttonBGColor: rgba('#337a57', 0.5),\n cardPrimaryColor: '#00a572',\n cardSecondaryColor: '#74c39c',\n },\n dialogTorrentDetailsContent: {\n posterBGColor: '#74c39c',\n gradientStartColor: '#e4f6ed',\n gradientEndColor: '#b5dec9',\n chacheSectionBGColor: '#88cdaa',\n widgetFontColor: '#fff',\n titleFontColor: '#000',\n subNameFontColor: '#7c7b7c',\n torrentFilesSectionBGColor: '#f1eff3',\n },\n detailedView: {\n gradientStartColor: '#e4f6ed',\n gradientEndColor: '#b5dec9',\n cacheSectionBGColor: '#fff',\n },\n addDialog: {\n gradientStartColor: '#e4f6ed',\n gradientEndColor: '#b5dec9',\n fontColor: '#000',\n notificationErrorBGColor: '#cda184',\n notificationSuccessBGColor: '#88cdaa',\n languageSwitchBGColor: '#74c39c',\n languageSwitchFontColor: '#e4f6ed',\n posterBGColor: '#74c39c',\n },\n torrentFunctions: {\n fontColor: '#000',\n },\n table: {\n defaultPrimaryColor: '#009879',\n defaultSecondaryColor: '#00a383',\n defaultTertiaryColor: '#03aa89',\n },\n settingsDialog: {\n contentBG: '#f1eff3',\n footerBG: '#fff',\n },\n },\n dark: {\n app: {\n headerToggleColor: '#545a5e',\n appSecondaryColor: '#545a5e',\n sidebarBGColor: '#323637',\n sidebarFillColor: '#dee3e5',\n },\n torrentCard: {\n accentCardColor: '#323637',\n buttonBGColor: rgba('#323637', 0.5),\n cardPrimaryColor: '#545a5e',\n cardSecondaryColor: rgba('#dee3e5', 0.4),\n },\n dialogTorrentDetailsContent: {\n posterBGColor: rgba('#dee3e5', 0.4),\n gradientStartColor: '#656f76',\n gradientEndColor: '#545a5e',\n chacheSectionBGColor: '#3c4244',\n widgetFontColor: rgba('#fff', 0.8),\n titleFontColor: '#f1eff3',\n subNameFontColor: '#dee3e5',\n torrentFilesSectionBGColor: rgba('#545a5e', 0.9),\n },\n detailedView: {\n gradientStartColor: '#656f76',\n gradientEndColor: '#545a5e',\n cacheSectionBGColor: '#dee3e5',\n },\n addDialog: {\n gradientStartColor: '#656f76',\n gradientEndColor: '#545a5e',\n fontColor: '#fff',\n notificationErrorBGColor: '#c82e3f',\n notificationSuccessBGColor: '#323637',\n languageSwitchBGColor: '#545a5e',\n languageSwitchFontColor: '#dee3e5',\n posterBGColor: '#dee3e5',\n },\n torrentFunctions: {\n fontColor: '#f1eff3',\n },\n table: {\n defaultPrimaryColor: '#323637',\n defaultSecondaryColor: rgba('#545a5e', 0.9),\n defaultTertiaryColor: '#545a5e',\n },\n settingsDialog: {\n contentBG: '#5a6166',\n footerBG: '#323637',\n },\n },\n}\n\nexport const mainColors = {\n light: {\n primary: '#00a572',\n secondary: '#00a572',\n labels: rgba('#000', 0.9),\n },\n dark: {\n primary: '#323637',\n secondary: '#dee3e5',\n labels: rgba('#fff', 0.9),\n },\n}\n","import { createMuiTheme, useMediaQuery } from '@material-ui/core'\nimport { useEffect, useMemo, useState } from 'react'\n\nimport { mainColors } from './colors'\n\nexport const THEME_MODES = { LIGHT: 'light', DARK: 'dark', AUTO: 'auto' }\n\nconst typography = { fontFamily: 'Open Sans, sans-serif' }\n\nexport const darkTheme = createMuiTheme({\n typography,\n palette: {\n type: THEME_MODES.DARK,\n primary: { main: mainColors.dark.primary },\n secondary: { main: mainColors.dark.secondary },\n },\n})\nexport const lightTheme = createMuiTheme({\n typography,\n palette: {\n type: THEME_MODES.LIGHT,\n primary: { main: mainColors.light.primary },\n secondary: { main: mainColors.light.secondary },\n },\n})\n\nexport const useMaterialUITheme = () => {\n const savedThemeMode = localStorage.getItem('themeMode')\n const isSystemModeDark = useMediaQuery('(prefers-color-scheme: dark)')\n const [isDarkMode, setIsDarkMode] = useState(savedThemeMode === 'dark' || isSystemModeDark)\n const [currentThemeMode, setCurrentThemeMode] = useState(savedThemeMode || THEME_MODES.LIGHT)\n\n const updateThemeMode = mode => {\n setCurrentThemeMode(mode)\n localStorage.setItem('themeMode', mode)\n }\n\n useEffect(() => {\n currentThemeMode === THEME_MODES.LIGHT && setIsDarkMode(false)\n currentThemeMode === THEME_MODES.DARK && setIsDarkMode(true)\n currentThemeMode === THEME_MODES.AUTO && setIsDarkMode(isSystemModeDark)\n }, [isSystemModeDark, currentThemeMode])\n\n const theme = isDarkMode ? THEME_MODES.DARK : THEME_MODES.LIGHT\n\n const muiTheme = useMemo(\n () =>\n createMuiTheme({\n typography,\n palette: {\n type: theme,\n primary: { main: mainColors[theme].primary },\n secondary: { main: mainColors[theme].secondary },\n },\n overrides: {\n MuiInputBase: {\n input: {\n color: mainColors[theme].labels,\n },\n },\n // https://material-ui.com/ru/api/form-control-label/\n MuiFormControlLabel: {\n labelPlacementStart: {\n display: 'flex',\n justifyContent: 'space-between',\n marginStart: 0,\n marginTop: 6,\n marginBottom: 2,\n },\n },\n MuiInputLabel: {\n root: {\n color: mainColors[theme].labels,\n marginBottom: 8,\n '&$focused': {\n color: mainColors[theme].labels,\n },\n },\n },\n },\n }),\n [theme],\n )\n\n return [isDarkMode, currentThemeMode, updateThemeMode, muiTheme]\n}\n","import { rgba } from 'polished'\nimport { mainColors } from 'style/colors'\n\nexport const snakeSettings = {\n dark: {\n default: {\n borderWidth: 2,\n pieceSize: 14,\n gapBetweenPieces: 3,\n borderColor: mainColors.dark.secondary,\n completeColor: rgba(mainColors.dark.primary, 0.65),\n backgroundColor: '#f1eff3',\n progressColor: mainColors.dark.secondary,\n readerColor: '#000',\n rangeColor: '#cda184',\n },\n mini: {\n cacheMaxHeight: 340,\n borderWidth: 2,\n pieceSize: 23,\n gapBetweenPieces: 6,\n borderColor: '#545a5e',\n completeColor: '#545a5e',\n backgroundColor: '#dee3e5',\n progressColor: '#dee3e5',\n readerColor: '#000',\n rangeColor: '#cda184',\n },\n },\n light: {\n default: {\n borderWidth: 1,\n pieceSize: 14,\n gapBetweenPieces: 3,\n borderColor: '#dbf2e8',\n completeColor: mainColors.light.primary,\n backgroundColor: '#fff',\n progressColor: '#b3dfc9',\n readerColor: '#000',\n rangeColor: '#afa6e3',\n },\n mini: {\n cacheMaxHeight: 340,\n borderWidth: 2,\n pieceSize: 23,\n gapBetweenPieces: 6,\n borderColor: '#4db380',\n completeColor: '#4db380',\n backgroundColor: '#dbf2e8',\n progressColor: '#dbf2e8',\n readerColor: '#2d714f',\n rangeColor: '#afa6e3',\n },\n },\n}\n\nexport const createGradient = (ctx, percentage, theme, snakeType) => {\n const { pieceSize, completeColor, progressColor } = snakeSettings[theme][snakeType]\n\n const gradient = ctx.createLinearGradient(0, pieceSize, 0, 0)\n gradient.addColorStop(0, completeColor)\n gradient.addColorStop(percentage / 100, completeColor)\n gradient.addColorStop(percentage / 100, progressColor)\n gradient.addColorStop(1, progressColor)\n\n return gradient\n}\n","import styled, { css } from 'styled-components'\n\nimport { snakeSettings } from './snakeSettings'\n\nexport const ScrollNotification = styled.div`\n margin-top: 10px;\n text-transform: uppercase;\n color: rgba(0, 0, 0, 0.5);\n align-self: center;\n`\n\nexport const SnakeWrapper = styled.div`\n ${({ isMini, themeType }) => css`\n ${isMini &&\n css`\n display: grid;\n justify-content: center;\n max-height: ${snakeSettings[themeType].mini.cacheMaxHeight}px;\n overflow: auto;\n `}\n\n canvas {\n display: block;\n }\n `}\n`\n","import Measure from 'react-measure'\nimport { useState, memo, useRef, useEffect, useContext } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport isEqual from 'lodash/isEqual'\nimport { DarkModeContext } from 'components/App'\nimport { THEME_MODES } from 'style/materialUISetup'\n\nimport { useCreateCacheMap } from '../customHooks'\nimport getShortCacheMap from './getShortCacheMap'\nimport { SnakeWrapper, ScrollNotification } from './style'\nimport { createGradient, snakeSettings } from './snakeSettings'\n\nconst TorrentCache = ({ cache, isMini }) => {\n const { t } = useTranslation()\n const [dimensions, setDimensions] = useState({ width: 0, height: 0 })\n const { width } = dimensions\n const canvasRef = useRef(null)\n const ctxRef = useRef(null)\n const cacheMap = useCreateCacheMap(cache)\n const settingsTarget = isMini ? 'mini' : 'default'\n const { isDarkMode } = useContext(DarkModeContext)\n const theme = isDarkMode ? THEME_MODES.DARK : THEME_MODES.LIGHT\n\n const {\n readerColor,\n rangeColor,\n borderWidth,\n pieceSize,\n gapBetweenPieces,\n backgroundColor,\n borderColor,\n cacheMaxHeight,\n completeColor,\n } = snakeSettings[theme][settingsTarget]\n\n const canvasWidth = isMini ? width * 0.93 : width\n\n const pieceSizeWithGap = pieceSize + gapBetweenPieces\n const piecesInOneRow = Math.floor(canvasWidth / pieceSizeWithGap)\n\n let shotCacheMap\n if (isMini) {\n const preloadPiecesAmount = Math.round(cache.Capacity / cache.PiecesLength - 1)\n shotCacheMap = getShortCacheMap({ cacheMap, preloadPiecesAmount, piecesInOneRow })\n }\n const source = isMini ? shotCacheMap : cacheMap\n const startingXPoint = Math.ceil((canvasWidth - pieceSizeWithGap * piecesInOneRow) / 2) // needed to center grid\n const height = Math.ceil(source.length / piecesInOneRow) * pieceSizeWithGap\n\n useEffect(() => {\n if (!canvasWidth || !height) return\n\n const canvas = canvasRef.current\n canvas.width = canvasWidth\n canvas.height = height\n ctxRef.current = canvas.getContext('2d')\n }, [canvasRef, height, canvasWidth])\n\n useEffect(() => {\n const ctx = ctxRef.current\n if (!ctx) return\n\n ctx.clearRect(0, 0, canvasWidth, height)\n\n source.forEach(({ percentage, isReader, isReaderRange }, i) => {\n const inProgress = percentage > 0 && percentage < 100\n const isCompleted = percentage === 100\n const currentRow = i % piecesInOneRow\n const currentColumn = Math.floor(i / piecesInOneRow)\n const fixBlurStroke = borderWidth % 2 === 0 ? 0 : 0.5\n const requiredFix = Math.ceil(borderWidth / 2) + 1 + fixBlurStroke\n const x = currentRow * pieceSize + currentRow * gapBetweenPieces + startingXPoint + requiredFix\n const y = currentColumn * pieceSize + currentColumn * gapBetweenPieces + requiredFix\n\n ctx.lineWidth = borderWidth\n ctx.fillStyle = inProgress\n ? createGradient(ctx, percentage, theme, settingsTarget)\n : isCompleted\n ? completeColor\n : backgroundColor\n ctx.strokeStyle = isReader\n ? readerColor\n : inProgress || isCompleted\n ? completeColor\n : isReaderRange\n ? rangeColor\n : borderColor\n\n ctx.translate(x, y)\n ctx.fillRect(0, 0, pieceSize, pieceSize)\n ctx.strokeRect(0, 0, pieceSize, pieceSize)\n ctx.setTransform(1, 0, 0, 1, 0, 0)\n })\n }, [\n cacheMap,\n height,\n canvasWidth,\n piecesInOneRow,\n startingXPoint,\n pieceSize,\n gapBetweenPieces,\n source,\n backgroundColor,\n borderColor,\n borderWidth,\n settingsTarget,\n completeColor,\n readerColor,\n rangeColor,\n theme,\n ])\n\n return (\n setDimensions(bounds)}>\n {({ measureRef }) => (\n
\n \n \n \n\n {isMini && height >= cacheMaxHeight && {t('ScrollDown')}}\n
\n )}\n
\n )\n}\n\nexport default memo(\n TorrentCache,\n (prev, next) => isEqual(prev.cache.Pieces, next.cache.Pieces) && isEqual(prev.cache.Readers, next.cache.Readers),\n)\n","export default ({ cacheMap, preloadPiecesAmount, piecesInOneRow }) => {\n const cacheMapWithoutEmptyBlocks = cacheMap.filter(({ percentage }) => percentage > 0)\n\n const getFullAmountOfBlocks = amountOfBlocks =>\n // this function counts existed amount of blocks with extra \"empty blocks\" to fill the row till the end\n amountOfBlocks % piecesInOneRow === 0\n ? amountOfBlocks - 1\n : amountOfBlocks + piecesInOneRow - (amountOfBlocks % piecesInOneRow) - 1 || 0\n\n const amountOfBlocksToRenderInShortView = getFullAmountOfBlocks(preloadPiecesAmount)\n // preloadPiecesAmount is counted from \"cache.Capacity / cache.PiecesLength\". We always show at least this amount of blocks\n const scalableAmountOfBlocksToRenderInShortView = getFullAmountOfBlocks(cacheMapWithoutEmptyBlocks.length)\n // cacheMap can become bigger than preloadPiecesAmount counted before. In that case we count blocks dynamically\n\n const finalAmountOfBlocksToRenderInShortView = Math.max(\n // this check is needed to decide which is the biggest amount of blocks and take it to render\n scalableAmountOfBlocksToRenderInShortView,\n amountOfBlocksToRenderInShortView,\n )\n\n const extraBlocksAmount = finalAmountOfBlocksToRenderInShortView - cacheMapWithoutEmptyBlocks.length + 1\n // amount of blocks needed to fill the line till the end\n\n const extraEmptyBlocksForFillingLine = extraBlocksAmount ? new Array(extraBlocksAmount).fill({}) : []\n\n return [...cacheMapWithoutEmptyBlocks, ...extraEmptyBlocksForFillingLine]\n}\n","import styled, { css } from 'styled-components'\n\nconst viewedPrimaryColor = '#bdbdbd'\nconst viewedSecondaryColor = '#c4c4c4'\nconst viewedTertiaryColor = '#c9c9c9'\nconst bigTableDividerColor = '#ddd'\nconst bigTableDefaultRowColor = '#fff'\nconst bigTableViewedRowColor = '#f3f3f3'\n\nconst viewedIndicator = css`\n ${({\n theme: {\n table: { defaultPrimaryColor },\n },\n }) => css`\n :before {\n content: '';\n width: 10px;\n height: 10px;\n background: ${defaultPrimaryColor};\n border-radius: 50%;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n `}\n`\nexport const TableStyle = styled.table`\n ${({\n theme: {\n table: { defaultPrimaryColor },\n },\n }) => css`\n border-collapse: collapse;\n margin: 25px 0;\n font-size: 0.9em;\n width: 100%;\n border-radius: 5px 5px 0 0;\n overflow: hidden;\n box-shadow: 0 0 20px rgba(0, 0, 0, 0.15);\n color: #000;\n\n thead tr {\n background: ${defaultPrimaryColor};\n color: #fff;\n text-align: left;\n text-transform: uppercase;\n }\n\n th,\n td {\n padding: 12px 15px;\n }\n\n tbody tr {\n border-bottom: 1px solid ${bigTableDividerColor};\n background: ${bigTableDefaultRowColor};\n\n :last-of-type {\n border-bottom: 2px solid ${defaultPrimaryColor};\n }\n\n &.viewed-file-row {\n background: ${bigTableViewedRowColor};\n }\n }\n\n td {\n &.viewed-file-indicator {\n position: relative;\n\n ${viewedIndicator}\n }\n }\n\n .button-cell {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 10px;\n }\n\n @media (max-width: 970px) {\n display: none;\n }\n `}\n`\n\nexport const ShortTableWrapper = styled.div`\n display: grid;\n gap: 20px;\n grid-template-columns: repeat(2, 1fr);\n display: none;\n\n @media (max-width: 970px) {\n display: grid;\n }\n\n @media (max-width: 820px) {\n gap: 15px;\n grid-template-columns: 1fr;\n }\n`\n\nexport const ShortTable = styled.div`\n ${({\n isViewed,\n theme: {\n table: { defaultPrimaryColor, defaultSecondaryColor, defaultTertiaryColor },\n },\n }) => css`\n width: 100%;\n grid-template-rows: repeat(3, max-content);\n border-radius: 5px;\n overflow: hidden;\n box-shadow: 0 0 20px rgba(0, 0, 0, 0.15);\n\n .short-table {\n &-name {\n background: ${isViewed ? viewedPrimaryColor : defaultPrimaryColor};\n display: grid;\n place-items: center;\n padding: 15px;\n color: #fff;\n text-transform: uppercase;\n font-size: 15px;\n font-weight: bold;\n\n @media (max-width: 880px) {\n font-size: 13px;\n padding: 10px;\n }\n }\n &-data {\n display: grid;\n grid-auto-flow: column;\n grid-template-columns: ${isViewed ? 'max-content' : '1fr'};\n grid-auto-columns: 1fr;\n }\n &-field {\n display: grid;\n grid-template-rows: 30px 1fr;\n background: black;\n :not(:last-child) {\n border-right: 1px solid ${isViewed ? viewedPrimaryColor : defaultPrimaryColor};\n }\n\n &-name {\n background: ${isViewed ? viewedSecondaryColor : defaultSecondaryColor};\n color: #fff;\n text-transform: uppercase;\n font-size: 12px;\n font-weight: 500;\n display: grid;\n place-items: center;\n padding: 0 10px;\n\n @media (max-width: 880px) {\n font-size: 11px;\n }\n }\n\n &-value {\n background: ${isViewed ? viewedTertiaryColor : defaultTertiaryColor};\n display: grid;\n place-items: center;\n color: #fff;\n font-size: 15px;\n padding: 15px 10px;\n position: relative;\n\n @media (max-width: 880px) {\n font-size: 13px;\n padding: 12px 8px;\n }\n }\n }\n\n &-viewed-indicator {\n ${isViewed && viewedIndicator}\n }\n\n &-buttons {\n padding: 20px;\n border-bottom: 2px solid ${isViewed ? viewedPrimaryColor : defaultPrimaryColor};\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n align-items: center;\n gap: 20px;\n background: #fff;\n\n @media (max-width: 410px) {\n gap: 10px;\n grid-template-columns: 1fr;\n }\n }\n }\n `}\n`\n","import { streamHost } from 'utils/Hosts'\nimport isEqual from 'lodash/isEqual'\nimport { humanizeSize } from 'utils/Utils'\nimport ptt from 'parse-torrent-title'\nimport { Button } from '@material-ui/core'\nimport CopyToClipboard from 'react-copy-to-clipboard'\nimport { useTranslation } from 'react-i18next'\n\nimport { TableStyle, ShortTableWrapper, ShortTable } from './style'\n\nconst { memo } = require('react')\n\n// russian episode detection support\nptt.addHandler('episode', /(\\d{1,4})[- |. ]серия|серия[- |. ](\\d{1,4})/i, { type: 'integer' })\nptt.addHandler('season', /sezon[- |. ](\\d{1,3})|(\\d{1,3})[- |. ]sezon/i, { type: 'integer' })\nptt.addHandler('season', /сезон[- |. ](\\d{1,3})|(\\d{1,3})[- |. ]сезон/i, { type: 'integer' })\n\nconst Table = memo(\n ({ playableFileList, viewedFileList, selectedSeason, seasonAmount, hash }) => {\n const { t } = useTranslation()\n const preloadBuffer = fileId => fetch(`${streamHost()}?link=${hash}&index=${fileId}&preload`)\n const getFileLink = (path, id) =>\n `${streamHost()}/${encodeURIComponent(path.split('\\\\').pop().split('/').pop())}?link=${hash}&index=${id}&play`\n const fileHasEpisodeText = !!playableFileList?.find(({ path }) => ptt.parse(path).episode)\n const fileHasSeasonText = !!playableFileList?.find(({ path }) => ptt.parse(path).season)\n const fileHasResolutionText = !!playableFileList?.find(({ path }) => ptt.parse(path).resolution)\n\n // if files in list is more then 1 and no season text detected by ptt.parse, show full name\n const shouldDisplayFullFileName = playableFileList.length > 1 && !fileHasEpisodeText\n\n return !playableFileList?.length ? (\n 'No playable files in this torrent'\n ) : (\n <>\n \n \n \n {t('Viewed')}\n {t('Name')}\n {fileHasSeasonText && seasonAmount?.length === 1 && {t('Season')}}\n {fileHasEpisodeText && {t('Episode')}}\n {fileHasResolutionText && {t('Resolution')}}\n {t('Size')}\n {t('Actions')}\n \n \n\n \n {playableFileList.map(({ id, path, length }) => {\n const { title, resolution, episode, season } = ptt.parse(path)\n const isViewed = viewedFileList?.includes(id)\n const link = getFileLink(path, id)\n\n return (\n (season === selectedSeason || !seasonAmount?.length) && (\n \n \n {shouldDisplayFullFileName ? path : title}\n {fileHasSeasonText && seasonAmount?.length === 1 && {season}}\n {fileHasEpisodeText && {episode}}\n {fileHasResolutionText && {resolution}}\n {humanizeSize(length)}\n \n
\n \n\n \n \n \n\n \n \n \n
\n \n \n )\n )\n })}\n \n
\n\n \n {playableFileList.map(({ id, path, length }) => {\n const { title, resolution, episode, season } = ptt.parse(path)\n const isViewed = viewedFileList?.includes(id)\n const link = getFileLink(path, id)\n\n return (\n (season === selectedSeason || !seasonAmount?.length) && (\n \n
{shouldDisplayFullFileName ? path : title}
\n
\n {isViewed && (\n
\n
{t('Viewed')}
\n
\n
\n
\n
\n )}\n {fileHasSeasonText && seasonAmount?.length === 1 && (\n
\n
{t('Season')}
\n
{season}
\n
\n )}\n {fileHasEpisodeText && (\n
\n
{t('Episode')}
\n
{episode}
\n
\n )}\n {fileHasResolutionText && (\n
\n
{t('Resolution')}
\n
{resolution}
\n
\n )}\n
\n
{t('Size')}
\n
{humanizeSize(length)}
\n
\n
\n
\n \n\n \n \n \n\n \n \n \n
\n \n )\n )\n })}\n \n \n )\n },\n (prev, next) => isEqual(prev, next),\n)\n\nexport default Table\n","import { rgba } from 'polished'\nimport styled, { css } from 'styled-components'\n\nexport const DialogContentGrid = styled.div`\n display: grid;\n grid-template-columns: 70% 1fr;\n grid-template-rows: repeat(2, min-content);\n grid-template-areas:\n 'main cache'\n 'file-list file-list';\n\n @media (max-width: 1450px) {\n grid-template-columns: 1fr;\n grid-template-rows: repeat(3, min-content);\n grid-template-areas:\n 'main'\n 'cache'\n 'file-list';\n }\n`\nexport const Poster = styled.div`\n ${({\n poster,\n theme: {\n dialogTorrentDetailsContent: { posterBGColor },\n },\n }) => css`\n height: 400px;\n border-radius: 5px;\n overflow: hidden;\n align-self: center;\n\n ${poster\n ? css`\n img {\n border-radius: 5px;\n height: 100%;\n }\n `\n : css`\n width: 300px;\n display: grid;\n place-items: center;\n background: ${posterBGColor};\n\n svg {\n transform: scale(2.5) translateY(-3px);\n }\n `}\n\n @media (max-width: 1280px) {\n align-self: start;\n }\n\n @media (max-width: 840px) {\n ${poster\n ? css`\n height: 200px;\n `\n : css`\n display: none;\n `}\n }\n `}\n`\nexport const MainSection = styled.section`\n ${({\n theme: {\n dialogTorrentDetailsContent: { gradientStartColor, gradientEndColor },\n },\n }) => css`\n grid-area: main;\n padding: 40px;\n display: grid;\n grid-template-columns: min-content 1fr;\n gap: 30px;\n background: linear-gradient(145deg, ${gradientStartColor}, ${gradientEndColor});\n\n @media (max-width: 840px) {\n grid-template-columns: 1fr;\n }\n\n @media (max-width: 800px) {\n padding: 20px;\n }\n `}\n`\n\nexport const CacheSection = styled.section`\n ${({\n theme: {\n dialogTorrentDetailsContent: { chacheSectionBGColor },\n },\n }) => css`\n grid-area: cache;\n padding: 40px;\n display: grid;\n align-content: start;\n grid-template-rows: min-content 1fr min-content;\n background: ${chacheSectionBGColor};\n\n @media (max-width: 800px) {\n padding: 20px;\n }\n `}\n`\n\nexport const TorrentFilesSection = styled.section`\n ${({\n theme: {\n dialogTorrentDetailsContent: { torrentFilesSectionBGColor },\n },\n }) => css`\n grid-area: file-list;\n padding: 40px;\n box-shadow: inset 3px 25px 8px -25px rgba(0, 0, 0, 0.5);\n background: ${torrentFilesSectionBGColor};\n\n @media (max-width: 800px) {\n padding: 20px;\n }\n `}\n`\n\nexport const SectionSubName = styled.div`\n ${({\n theme: {\n dialogTorrentDetailsContent: { subNameFontColor },\n },\n }) => css`\n ${({ mb }) => css`\n ${mb && `margin-bottom: ${mb}px`};\n color: ${subNameFontColor};\n\n @media (max-width: 800px) {\n ${mb && `margin-bottom: ${mb / 2}px`};\n font-size: 11px;\n }\n `}\n `}\n`\n\nexport const SectionTitle = styled.div`\n ${({\n color,\n theme: {\n dialogTorrentDetailsContent: { titleFontColor },\n },\n }) => css`\n ${({ mb }) => css`\n ${mb && `margin-bottom: ${mb}px`};\n font-size: 35px;\n font-weight: 300;\n line-height: 1;\n word-break: break-word;\n color: ${color || titleFontColor};\n\n @media (max-width: 800px) {\n font-size: 25px;\n ${mb && `margin-bottom: ${mb / 2}px`};\n }\n `}\n `}\n`\n\nexport const SectionHeader = styled.div`\n margin-bottom: 20px;\n`\n\nexport const WidgetWrapper = styled.div`\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(max-content, 220px));\n gap: 20px;\n\n @media (max-width: 800px) {\n gap: 15px;\n }\n @media (max-width: 410px) {\n gap: 10px;\n }\n\n ${({ detailedView }) =>\n detailedView\n ? css`\n @media (max-width: 800px) {\n grid-template-columns: repeat(2, 1fr);\n }\n @media (max-width: 410px) {\n grid-template-columns: 1fr;\n }\n `\n : css`\n @media (max-width: 800px) {\n grid-template-columns: repeat(auto-fit, minmax(max-content, 185px));\n }\n @media (max-width: 480px) {\n grid-template-columns: 1fr 1fr;\n }\n @media (max-width: 390px) {\n grid-template-columns: 1fr;\n }\n `}\n`\n\nexport const WidgetFieldWrapper = styled.div`\n display: grid;\n grid-template-columns: 40px 1fr;\n grid-template-rows: min-content 50px;\n grid-template-areas:\n 'title title'\n 'icon value';\n\n > * {\n display: grid;\n place-items: center;\n }\n\n @media (max-width: 800px) {\n grid-template-columns: 30px 1fr;\n grid-template-rows: min-content 40px;\n }\n`\nexport const WidgetFieldTitle = styled.div`\n ${({\n theme: {\n dialogTorrentDetailsContent: { titleFontColor },\n },\n }) => css`\n grid-area: title;\n justify-self: start;\n text-transform: uppercase;\n font-size: 11px;\n margin-bottom: 2px;\n font-weight: 600;\n color: ${titleFontColor};\n `}\n`\n\nexport const WidgetFieldIcon = styled.div`\n ${({ bgColor }) => css`\n grid-area: icon;\n color: ${rgba('#fff', 0.8)};\n background: ${bgColor};\n border-radius: 5px 0 0 5px;\n\n @media (max-width: 800px) {\n > svg {\n width: 50%;\n }\n }\n `}\n`\nexport const WidgetFieldValue = styled.div`\n ${({\n bgColor,\n theme: {\n dialogTorrentDetailsContent: { widgetFontColor },\n },\n }) => css`\n grid-area: value;\n padding: 0 20px;\n color: ${widgetFontColor};\n font-size: 25px;\n background: ${bgColor};\n border-radius: 0 5px 5px 0;\n\n @media (max-width: 800px) {\n font-size: 18px;\n padding: 0 4px;\n }\n `}\n`\n\nexport const LoadingProgress = styled.div.attrs(\n ({\n value,\n fullAmount,\n theme: {\n dialogTorrentDetailsContent: { gradientEndColor },\n },\n }) => {\n const percentage = Math.min(100, (value * 100) / fullAmount)\n\n return {\n // this block is here according to styled-components recomendation about fast changable components\n style: {\n background: `linear-gradient(to right, ${gradientEndColor} 0%, ${gradientEndColor} ${percentage}%, #fff ${percentage}%, #fff 100%)`,\n },\n }\n },\n)`\n ${({ label }) => css`\n border: 1px solid;\n padding: 10px 20px;\n border-radius: 5px;\n color: #000;\n\n :before {\n content: '${label}';\n display: grid;\n place-items: center;\n font-size: 20px;\n }\n `}\n`\n\nexport const Divider = styled.div`\n height: 1px;\n background-color: rgba(0, 0, 0, 0.12);\n margin: 30px 0;\n`\n","import styled, { css } from 'styled-components'\n\nexport const DetailedViewWidgetSection = styled.section`\n ${({\n theme: {\n detailedView: { gradientStartColor, gradientEndColor },\n },\n }) => css`\n padding: 40px;\n background: linear-gradient(145deg, ${gradientStartColor}, ${gradientEndColor});\n\n @media (max-width: 800px) {\n padding: 20px;\n }\n `}\n`\n\nexport const DetailedViewCacheSection = styled.section`\n ${({\n theme: {\n detailedView: { cacheSectionBGColor },\n },\n }) => css`\n padding: 40px;\n box-shadow: inset 3px 25px 8px -25px rgba(0, 0, 0, 0.5);\n background: ${cacheSectionBGColor};\n flex: 1;\n\n @media (max-width: 800px) {\n padding: 20px;\n }\n `}\n`\n","import { WidgetFieldWrapper, WidgetFieldIcon, WidgetFieldValue, WidgetFieldTitle } from './style'\n\nexport default function StatisticsField({ icon: Icon, title, value, iconBg, valueBg }) {\n return (\n \n {title}\n \n \n \n\n {value}\n \n )\n}\n","import { DarkModeContext } from 'components/App'\nimport { useContext } from 'react'\nimport { THEME_MODES } from 'style/materialUISetup'\n\nconst { LIGHT, DARK } = THEME_MODES\n\nconst colors = {\n light: {\n downloadSpeed: { iconBGColor: '#118f00', valueBGColor: '#13a300' },\n uploadSpeed: { iconBGColor: '#0146ad', valueBGColor: '#0058db' },\n peers: { iconBGColor: '#cdc118', valueBGColor: '#d8cb18' },\n piecesCount: { iconBGColor: '#b6c95e', valueBGColor: '#c0d076' },\n piecesLength: { iconBGColor: '#0982c8', valueBGColor: '#098cd7' },\n status: { iconBGColor: '#aea25b', valueBGColor: '#b4aa6e' },\n size: { iconBGColor: '#9b01ad', valueBGColor: '#ac03bf' },\n },\n dark: {\n downloadSpeed: { iconBGColor: '#0c6600', valueBGColor: '#0d7000' },\n uploadSpeed: { iconBGColor: '#003f9e', valueBGColor: '#0047b3' },\n peers: { iconBGColor: '#a69c11', valueBGColor: '#b4a913' },\n piecesCount: { iconBGColor: '#8da136', valueBGColor: '#99ae3d' },\n piecesLength: { iconBGColor: '#07659c', valueBGColor: '#0872af' },\n status: { iconBGColor: '#938948', valueBGColor: '#9f9450' },\n size: { iconBGColor: '#81008f', valueBGColor: '#9102a1' },\n },\n}\n\nexport default function useGetWidgetColors(widgetName) {\n const { isDarkMode } = useContext(DarkModeContext)\n const widgetColors = colors[isDarkMode ? DARK : LIGHT][widgetName]\n\n return widgetColors\n}\n","import {\n ArrowDownward as ArrowDownwardIcon,\n ArrowUpward as ArrowUpwardIcon,\n SwapVerticalCircle as SwapVerticalCircleIcon,\n ViewAgenda as ViewAgendaIcon,\n Widgets as WidgetsIcon,\n PhotoSizeSelectSmall as PhotoSizeSelectSmallIcon,\n Build as BuildIcon,\n} from '@material-ui/icons'\nimport { getPeerString, humanizeSize, humanizeSpeed } from 'utils/Utils'\nimport { useTranslation } from 'react-i18next'\nimport { GETTING_INFO, IN_DB, CLOSED, PRELOAD, WORKING } from 'torrentStates'\n\nimport StatisticsField from '../StatisticsField'\nimport useGetWidgetColors from './useGetWidgetColors'\n\nexport const DownlodSpeedWidget = ({ data }) => {\n const { t } = useTranslation()\n const { iconBGColor, valueBGColor } = useGetWidgetColors('downloadSpeed')\n\n return (\n \n )\n}\n\nexport const UploadSpeedWidget = ({ data }) => {\n const { t } = useTranslation()\n const { iconBGColor, valueBGColor } = useGetWidgetColors('uploadSpeed')\n\n return (\n \n )\n}\n\nexport const PeersWidget = ({ data }) => {\n const { t } = useTranslation()\n const { iconBGColor, valueBGColor } = useGetWidgetColors('peers')\n\n return (\n \n )\n}\n\nexport const PiecesCountWidget = ({ data }) => {\n const { t } = useTranslation()\n const { iconBGColor, valueBGColor } = useGetWidgetColors('piecesCount')\n\n return (\n \n )\n}\n\nexport const PiecesLengthWidget = ({ data }) => {\n const { t } = useTranslation()\n const { iconBGColor, valueBGColor } = useGetWidgetColors('piecesLength')\n\n return (\n \n )\n}\n\nexport const StatusWidget = ({ stat }) => {\n const { t } = useTranslation()\n\n const values = {\n [GETTING_INFO]: t('TorrentGettingInfo'),\n [PRELOAD]: t('TorrentPreload'),\n [WORKING]: t('TorrentWorking'),\n [CLOSED]: t('TorrentClosed'),\n [IN_DB]: t('TorrentInDb'),\n }\n const { iconBGColor, valueBGColor } = useGetWidgetColors('status')\n\n return (\n \n )\n}\n\nexport const SizeWidget = ({ data }) => {\n const { t } = useTranslation()\n const { iconBGColor, valueBGColor } = useGetWidgetColors('size')\n\n return (\n \n )\n}\n","export const [GETTING_INFO, PRELOAD, WORKING, CLOSED, IN_DB] = [1, 2, 3, 4, 5]\n","import { useTranslation } from 'react-i18next'\n\nimport { SectionTitle, WidgetWrapper } from '../style'\nimport { DetailedViewCacheSection, DetailedViewWidgetSection } from './style'\nimport TorrentCache from '../TorrentCache'\nimport {\n SizeWidget,\n PiecesLengthWidget,\n StatusWidget,\n PiecesCountWidget,\n PeersWidget,\n UploadSpeedWidget,\n DownlodSpeedWidget,\n} from '../widgets'\n\nexport default function DetailedView({\n downloadSpeed,\n uploadSpeed,\n torrent,\n torrentSize,\n PiecesCount,\n PiecesLength,\n stat,\n cache,\n}) {\n const { t } = useTranslation()\n\n return (\n <>\n \n {t('Data')}\n\n \n \n \n \n \n \n \n \n \n \n\n \n \n {t('Cache')}\n \n \n \n \n )\n}\n","import styled, { css } from 'styled-components'\n\nexport const MainSectionButtonGroup = styled.div`\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 20px;\n\n :not(:last-child) {\n margin-bottom: 30px;\n }\n\n @media (max-width: 1580px) {\n grid-template-columns: repeat(2, 1fr);\n }\n\n @media (max-width: 880px) {\n grid-template-columns: 1fr;\n }\n`\n\nexport const SmallLabel = styled.div`\n ${({\n mb,\n theme: {\n torrentFunctions: { fontColor },\n },\n }) => css`\n ${mb && `margin-bottom: ${mb}px`};\n font-size: 20px;\n font-weight: 300;\n line-height: 1;\n color: ${fontColor};\n\n @media (max-width: 800px) {\n font-size: 18px;\n ${mb && `margin-bottom: ${mb / 1.5}px`};\n }\n `}\n`\n","import axios from 'axios'\nimport { memo } from 'react'\nimport { playlistTorrHost, torrentsHost, viewedHost } from 'utils/Hosts'\nimport { CopyToClipboard } from 'react-copy-to-clipboard'\nimport { Button } from '@material-ui/core'\nimport ptt from 'parse-torrent-title'\nimport { useTranslation } from 'react-i18next'\n\nimport { SmallLabel, MainSectionButtonGroup } from './style'\nimport { SectionSubName } from '../style'\n\nconst TorrentFunctions = memo(\n ({ hash, viewedFileList, playableFileList, name, title, setViewedFileList }) => {\n const { t } = useTranslation()\n const latestViewedFileId = viewedFileList?.[viewedFileList?.length - 1]\n const latestViewedFile = playableFileList?.find(({ id }) => id === latestViewedFileId)?.path\n const isOnlyOnePlayableFile = playableFileList?.length === 1\n const latestViewedFileData = latestViewedFile && ptt.parse(latestViewedFile)\n const dropTorrent = () => axios.post(torrentsHost(), { action: 'drop', hash })\n const removeTorrentViews = () =>\n axios.post(viewedHost(), { action: 'rem', hash, file_index: -1 }).then(() => setViewedFileList())\n const fullPlaylistLink = `${playlistTorrHost()}/${encodeURIComponent(name || title || 'file')}.m3u?link=${hash}&m3u`\n const partialPlaylistLink = `${fullPlaylistLink}&fromlast`\n\n return (\n <>\n {!isOnlyOnePlayableFile && !!viewedFileList?.length && (\n <>\n {t('DownloadPlaylist')}\n \n {t('LatestFilePlayed')} {latestViewedFileData?.title}.\n {latestViewedFileData?.season && (\n <>\n {' '}\n {t('Season')}: {latestViewedFileData?.season}. {t('Episode')}: {latestViewedFileData?.episode}.\n \n )}\n \n\n \n \n \n \n\n \n \n \n \n \n )}\n {t('TorrentState')}\n \n \n \n \n {t('Info')}\n \n {(isOnlyOnePlayableFile || !viewedFileList?.length) && (\n \n \n \n )}\n \n \n \n \n \n )\n },\n () => true,\n)\n\nexport default TorrentFunctions\n","const getExt = filename => {\n const ext = filename.split('.').pop()\n if (ext === filename) return ''\n return ext.toLowerCase()\n}\nconst playableExtList = [\n // video\n '3g2',\n '3gp',\n 'aaf',\n 'asf',\n 'avchd',\n 'avi',\n 'drc',\n 'flv',\n 'iso',\n 'm2v',\n 'm2ts',\n 'm4p',\n 'm4v',\n 'mkv',\n 'mng',\n 'mov',\n 'mp2',\n 'mp4',\n 'mpe',\n 'mpeg',\n 'mpg',\n 'mpv',\n 'mxf',\n 'nsv',\n 'ogg',\n 'ogv',\n 'ts',\n 'qt',\n 'rm',\n 'rmvb',\n 'roq',\n 'svi',\n 'vob',\n 'webm',\n 'wmv',\n 'yuv',\n // audio\n 'aac',\n 'aiff',\n 'ape',\n 'au',\n 'flac',\n 'gsm',\n 'it',\n 'm3u',\n 'm4a',\n 'mid',\n 'mod',\n 'mp3',\n 'mpa',\n 'pls',\n 'ra',\n 's3m',\n 'sid',\n 'wav',\n 'wma',\n 'xm',\n]\n\n// eslint-disable-next-line import/prefer-default-export\nexport const isFilePlayable = fileName => playableExtList.includes(getExt(fileName))\n","import { NoImageIcon } from 'icons'\nimport { humanizeSize, removeRedundantCharacters } from 'utils/Utils'\nimport { useEffect, useState } from 'react'\nimport { Button, ButtonGroup } from '@material-ui/core'\nimport ptt from 'parse-torrent-title'\nimport axios from 'axios'\nimport { viewedHost } from 'utils/Hosts'\nimport { GETTING_INFO, IN_DB } from 'torrentStates'\nimport CircularProgress from '@material-ui/core/CircularProgress'\nimport { useTranslation } from 'react-i18next'\n\nimport { useUpdateCache, useGetSettings } from './customHooks'\nimport DialogHeader from './DialogHeader'\nimport TorrentCache from './TorrentCache'\nimport Table from './Table'\nimport DetailedView from './DetailedView'\nimport {\n DialogContentGrid,\n MainSection,\n Poster,\n SectionTitle,\n SectionSubName,\n WidgetWrapper,\n LoadingProgress,\n SectionHeader,\n CacheSection,\n TorrentFilesSection,\n Divider,\n} from './style'\nimport { DownlodSpeedWidget, UploadSpeedWidget, PeersWidget, SizeWidget, StatusWidget } from './widgets'\nimport TorrentFunctions from './TorrentFunctions'\nimport { isFilePlayable } from './helpers'\n\nconst Loader = () => (\n
\n \n
\n)\n\nexport default function DialogTorrentDetailsContent({ closeDialog, torrent }) {\n const { t } = useTranslation()\n const [isLoading, setIsLoading] = useState(true)\n const [isDetailedCacheView, setIsDetailedCacheView] = useState(false)\n const [viewedFileList, setViewedFileList] = useState()\n const [playableFileList, setPlayableFileList] = useState()\n const [seasonAmount, setSeasonAmount] = useState(null)\n const [selectedSeason, setSelectedSeason] = useState()\n\n const {\n poster,\n hash,\n title,\n name,\n stat,\n download_speed: downloadSpeed,\n upload_speed: uploadSpeed,\n torrent_size: torrentSize,\n file_stats: torrentFileList,\n } = torrent\n\n const cache = useUpdateCache(hash)\n const settings = useGetSettings(cache)\n\n const { Capacity, PiecesCount, PiecesLength, Filled } = cache\n\n useEffect(() => {\n if (playableFileList && seasonAmount === null) {\n const seasons = []\n playableFileList.forEach(({ path }) => {\n const currentSeason = ptt.parse(path).season\n if (currentSeason) {\n !seasons.includes(currentSeason) && seasons.push(currentSeason)\n }\n })\n seasons.length && setSelectedSeason(seasons[0])\n setSeasonAmount(seasons.sort((a, b) => a - b))\n }\n }, [playableFileList, seasonAmount])\n\n useEffect(() => {\n setPlayableFileList(torrentFileList?.filter(({ path }) => isFilePlayable(path)))\n }, [torrentFileList])\n\n useEffect(() => {\n const cacheLoaded = !!Object.entries(cache).length\n const torrentLoaded = stat !== GETTING_INFO && stat !== IN_DB\n\n if (!cacheLoaded && !isLoading) setIsLoading(true)\n if (cacheLoaded && isLoading && torrentLoaded) setIsLoading(false)\n }, [stat, cache, isLoading])\n\n useEffect(() => {\n // getting viewed file list\n axios.post(viewedHost(), { action: 'list', hash }).then(({ data }) => {\n if (data) {\n const lst = data.map(itm => itm.file_index).sort((a, b) => a - b)\n setViewedFileList(lst)\n } else setViewedFileList()\n })\n }, [hash])\n\n const preloadPerc = settings?.PreloadCache\n const preloadSize = (Capacity / 100) * preloadPerc\n const bufferSize = preloadSize > 33554432 ? preloadSize : 33554432 // Not less than 32MB\n\n const getParsedTitle = () => {\n const newNameStringArr = []\n\n const torrentParsedName = name && ptt.parse(name)\n\n if (title !== name) {\n newNameStringArr.push(removeRedundantCharacters(title))\n } else if (torrentParsedName?.title) newNameStringArr.push(removeRedundantCharacters(torrentParsedName?.title))\n\n // These 2 checks are needed to get year and resolution from torrent name if title does not have this info\n if (torrentParsedName?.year && !newNameStringArr[0].includes(torrentParsedName?.year))\n newNameStringArr.push(torrentParsedName?.year)\n if (torrentParsedName?.resolution && !newNameStringArr[0].includes(torrentParsedName?.resolution))\n newNameStringArr.push(torrentParsedName?.resolution)\n\n const newNameString = newNameStringArr.join('. ')\n\n // removeRedundantCharacters is returning \"..\" if it was \"...\"\n const lastDotShouldBeAdded =\n newNameString[newNameString.length - 1] === '.' && newNameString[newNameString.length - 2] === '.'\n\n return lastDotShouldBeAdded ? `${newNameString}.` : newNameString\n }\n\n return (\n <>\n setIsDetailedCacheView(false) })}\n />\n\n \n {isLoading ? (\n \n ) : isDetailedCacheView ? (\n \n ) : (\n \n \n {poster ? poster : }\n\n
\n {title && name !== title ? (\n getParsedTitle().length > 90 ? (\n <>\n {ptt.parse(name).title}\n {getParsedTitle()}\n \n ) : (\n <>\n {getParsedTitle()}\n {ptt.parse(name || '')?.title}\n \n )\n ) : (\n {getParsedTitle()}\n )}\n\n \n \n \n \n \n \n \n\n \n\n \n
\n
\n\n \n \n {t('Buffer')}\n {bufferSize <= 33554432 && {t('BufferNote')}}\n \n \n\n \n setIsDetailedCacheView(true)}\n >\n {t('DetailedCacheView.button')}\n \n \n\n \n {t('TorrentContent')}\n\n {seasonAmount?.length > 1 && (\n <>\n {t('SelectSeason')}\n \n {seasonAmount.map(season => (\n setSelectedSeason(season)}\n >\n {season}\n \n ))}\n \n\n \n {t('Season')} {selectedSeason}\n \n \n )}\n\n \n \n
\n )}\n
\n \n )\n}\n","import { useTranslation } from 'react-i18next'\n\nexport default () => {\n const { i18n } = useTranslation()\n const currentLanguage = i18n.language === 'en-US' || i18n.language === 'en' ? 'en' : i18n.language\n\n return [currentLanguage, lang => i18n.changeLanguage(lang)]\n}\n","import { useEffect, useRef } from 'react'\n\nexport default function usePreviousState(value) {\n const ref = useRef(value)\n\n useEffect(() => {\n ref.current = value\n }, [value])\n\n return ref.current\n}\n","import styled, { css } from 'styled-components'\n\nexport const Header = styled.div`\n ${({ theme: { primary } }) => css`\n background: ${primary};\n color: rgba(0, 0, 0, 0.87);\n font-size: 20px;\n color: #fff;\n font-weight: 600;\n box-shadow: 0px 2px 4px -1px rgb(0 0 0 / 20%), 0px 4px 5px 0px rgb(0 0 0 / 14%), 0px 1px 10px 0px rgb(0 0 0 / 12%);\n padding: 15px 24px;\n position: relative;\n `}\n`\n\nexport const ButtonWrapper = styled.div`\n padding: 20px;\n display: flex;\n justify-content: flex-end;\n\n > :not(:last-child) {\n margin-right: 10px;\n }\n`\n","import axios from 'axios'\nimport parseTorrent from 'parse-torrent'\nimport ptt from 'parse-torrent-title'\n\nexport const getMoviePosters = (movieName, language = 'en') => {\n const url = 'http://api.themoviedb.org/3/search/multi'\n\n return axios\n .get(url, {\n params: {\n api_key: process.env.REACT_APP_TMDB_API_KEY,\n language,\n include_image_language: `${language},null,en`,\n query: movieName,\n },\n })\n .then(({ data: { results } }) =>\n results.filter(el => el.poster_path).map(el => `https://image.tmdb.org/t/p/w300${el.poster_path}`),\n )\n .catch(() => null)\n}\n\nexport const checkImageURL = async url => {\n if (!url || !url.match(/.(jpg|jpeg|png|gif)$/i)) return false\n\n try {\n await fetch(url, { mode: 'no-cors' })\n return true\n } catch (e) {\n return false\n }\n}\n\nconst magnetRegex = /^magnet:\\?xt=urn:[a-z0-9].*/i\nexport const hashRegex = /^\\b[0-9a-f]{32}\\b$|^\\b[0-9a-f]{40}\\b$|^\\b[0-9a-f]{64}\\b$/i\nconst torrentRegex = /^.*\\.(torrent)$/i\nexport const chechTorrentSource = source =>\n source.match(hashRegex) !== null || source.match(magnetRegex) !== null || source.match(torrentRegex) !== null\n\nexport const parseTorrentTitle = (parsingSource, callback) => {\n parseTorrent.remote(parsingSource, (err, { name, files } = {}) => {\n if (!name || err) return callback({ parsedTitle: null, originalName: null })\n\n const torrentName = ptt.parse(name).title\n const nameOfFileInsideTorrent = files ? ptt.parse(files[0].name).title : null\n\n let newTitle = torrentName\n if (nameOfFileInsideTorrent) {\n // taking shorter title because in most cases it is more accurate\n newTitle = torrentName.length < nameOfFileInsideTorrent.length ? torrentName : nameOfFileInsideTorrent\n }\n\n callback({ parsedTitle: newTitle, originalName: name })\n })\n}\n","import { Button } from '@material-ui/core'\nimport styled, { css } from 'styled-components'\n\nexport const Content = styled.div`\n ${({\n isEditMode,\n theme: {\n addDialog: { gradientStartColor, gradientEndColor, fontColor },\n },\n }) => css`\n height: 550px;\n background: linear-gradient(145deg, ${gradientStartColor}, ${gradientEndColor});\n flex: 1;\n display: grid;\n grid-template-columns: repeat(${isEditMode ? '1' : '2'}, 1fr);\n border-bottom: 1px solid rgba(0, 0, 0, 0.12);\n overflow: auto;\n color: ${fontColor};\n\n @media (max-width: 540px) {\n ${'' /* Just for bug fixing on small screens */}\n overflow: scroll;\n }\n\n @media (max-width: 930px) {\n grid-template-columns: 1fr;\n }\n\n @media (max-width: 500px) {\n align-content: start;\n }\n `}\n`\n\nexport const RightSide = styled.div`\n padding: 0 20px 20px 20px;\n`\n\nexport const RightSideContainer = styled.div`\n ${({\n isHidden,\n notificationMessage,\n isError,\n theme: {\n addDialog: { notificationErrorBGColor, notificationSuccessBGColor },\n },\n }) => css`\n height: 530px;\n\n ${notificationMessage &&\n css`\n position: relative;\n white-space: nowrap;\n\n :before {\n font-size: 20px;\n font-weight: 300;\n content: '${notificationMessage}';\n display: grid;\n place-items: center;\n background: ${isError ? notificationErrorBGColor : notificationSuccessBGColor};\n padding: 10px 15px;\n position: absolute;\n top: 52%;\n left: 50%;\n transform: translate(-50%, -50%);\n border-radius: 5px;\n }\n `};\n\n ${isHidden &&\n css`\n display: none;\n `};\n\n @media (max-width: 500px) {\n height: 170px;\n }\n `}\n`\nexport const LeftSide = styled.div`\n display: flex;\n flex-direction: column;\n border-right: 1px solid rgba(0, 0, 0, 0.12);\n`\n\nexport const LeftSideBottomSectionBasicStyles = css`\n transition: transform 0.3s;\n padding: 20px;\n height: 100%;\n display: grid;\n`\n\nexport const LeftSideBottomSectionNoFile = styled.div`\n ${LeftSideBottomSectionBasicStyles}\n border: 4px dashed rgba(0,0,0,0.1);\n text-align: center;\n\n ${({ isDragActive }) => isDragActive && `border: 4px dashed green`};\n\n justify-items: center;\n grid-template-rows: 130px 1fr;\n cursor: pointer;\n\n :hover {\n background-color: rgba(0, 0, 0, 0.04);\n svg {\n transform: translateY(-4%);\n }\n }\n\n @media (max-width: 930px) {\n border: 4px dashed transparent;\n height: 400px;\n place-items: center;\n grid-template-rows: 40% 1fr;\n }\n\n @media (max-width: 500px) {\n height: 170px;\n grid-template-rows: 1fr;\n\n > div:first-of-type {\n display: none;\n }\n }\n`\n\nexport const LeftSideBottomSectionFileSelected = styled.div`\n ${LeftSideBottomSectionBasicStyles}\n place-items: center;\n\n @media (max-width: 930px) {\n height: 400px;\n }\n\n @media (max-width: 500px) {\n height: 170px;\n }\n`\n\nexport const TorrentIconWrapper = styled.div`\n position: relative;\n`\n\nexport const CancelIconWrapper = styled.div`\n position: absolute;\n top: -9px;\n left: 10px;\n cursor: pointer;\n\n > svg {\n transition: all 0.3s;\n fill: rgba(0, 0, 0, 0.7);\n\n :hover {\n fill: rgba(0, 0, 0, 0.6);\n }\n }\n`\n\nexport const IconWrapper = styled.div`\n display: grid;\n justify-items: center;\n align-content: start;\n gap: 10px;\n align-self: start;\n\n svg {\n transition: all 0.3s;\n }\n`\n\nexport const LeftSideTopSection = styled.div`\n ${({\n active,\n theme: {\n addDialog: { gradientStartColor },\n },\n }) => css`\n background: ${gradientStartColor};\n padding: 0 20px 20px 20px;\n transition: all 0.3s;\n\n ${active && 'box-shadow: 0 8px 10px -9px rgba(0, 0, 0, 0.5)'};\n `}\n`\n\nexport const PosterWrapper = styled.div`\n margin-top: 20px;\n display: grid;\n grid-template-columns: max-content 1fr;\n grid-template-rows: 300px max-content;\n column-gap: 5px;\n position: relative;\n margin-bottom: 20px;\n\n grid-template-areas:\n 'poster suggestions'\n 'clear empty';\n\n @media (max-width: 540px) {\n grid-template-columns: 1fr;\n gap: 5px 0;\n justify-items: center;\n grid-template-areas:\n 'poster'\n 'clear'\n 'suggestions';\n }\n`\n\nexport const PosterSuggestions = styled.div`\n display: grid;\n grid-area: suggestions;\n grid-auto-flow: column;\n grid-template-columns: repeat(3, max-content);\n grid-template-rows: repeat(4, max-content);\n gap: 5px;\n\n @media (max-width: 540px) {\n grid-auto-flow: row;\n grid-template-columns: repeat(5, max-content);\n }\n @media (max-width: 375px) {\n grid-template-columns: repeat(4, max-content);\n }\n`\n\nexport const PosterSuggestionsItem = styled.div`\n cursor: pointer;\n width: 71px;\n height: 71px;\n\n @media (max-width: 430px) {\n width: 60px;\n height: 60px;\n }\n\n @media (max-width: 375px) {\n width: 71px;\n height: 71px;\n }\n\n @media (max-width: 355px) {\n width: 60px;\n height: 60px;\n }\n\n img {\n transition: all 0.3s;\n border-radius: 5px;\n width: 100%;\n height: 100%;\n object-fit: cover;\n\n :hover {\n filter: brightness(130%);\n }\n }\n`\n\nexport const Poster = styled.div`\n ${({\n poster,\n theme: {\n addDialog: { posterBGColor },\n },\n }) => css`\n border-radius: 5px;\n overflow: hidden;\n width: 200px;\n grid-area: poster;\n\n ${poster\n ? css`\n img {\n width: 200px;\n object-fit: cover;\n border-radius: 5px;\n height: 100%;\n }\n `\n : css`\n display: grid;\n place-items: center;\n background: ${posterBGColor};\n\n svg {\n transform: scale(1.5) translateY(-3px);\n }\n `}\n `}\n`\n\nexport const ClearPosterButton = styled(Button)`\n grid-area: clear;\n justify-self: center;\n transform: translateY(-50%);\n position: absolute;\n ${({ showbutton }) => !showbutton && 'display: none'};\n\n @media (max-width: 540px) {\n transform: translateY(-140%);\n }\n`\n\nexport const PosterLanguageSwitch = styled.div`\n ${({\n showbutton,\n theme: {\n addDialog: { languageSwitchBGColor, languageSwitchFontColor },\n },\n }) => css`\n grid-area: poster;\n z-index: 5;\n position: absolute;\n top: 0;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 30px;\n height: 30px;\n background: ${languageSwitchBGColor};\n border-radius: 50%;\n display: grid;\n place-items: center;\n color: ${languageSwitchFontColor};\n font-weight: 600;\n cursor: pointer;\n transition: all 0.3s;\n\n ${!showbutton && 'display: none'};\n\n :hover {\n filter: brightness(1.1);\n }\n `}\n`\n","import { useTranslation } from 'react-i18next'\nimport { NoImageIcon } from 'icons'\nimport { IconButton, InputAdornment, TextField, useTheme } from '@material-ui/core'\nimport { CheckBox as CheckBoxIcon } from '@material-ui/icons'\n\nimport {\n ClearPosterButton,\n PosterLanguageSwitch,\n RightSide,\n Poster,\n PosterSuggestions,\n PosterSuggestionsItem,\n PosterWrapper,\n RightSideContainer,\n} from './style'\nimport { checkImageURL } from './helpers'\n\nexport default function RightSideComponent({\n setTitle,\n setPosterUrl,\n setIsPosterUrlCorrect,\n setIsUserInteractedWithPoster,\n setPosterList,\n isTorrentSourceCorrect,\n isHashAlreadyExists,\n title,\n parsedTitle,\n posterUrl,\n isPosterUrlCorrect,\n posterList,\n currentLang,\n posterSearchLanguage,\n setPosterSearchLanguage,\n posterSearch,\n removePoster,\n torrentSource,\n originalTorrentTitle,\n updateTitleFromSource,\n isCustomTitleEnabled,\n setIsCustomTitleEnabled,\n isEditMode,\n}) {\n const { t } = useTranslation()\n const primary = useTheme().palette.primary.main\n\n const handleTitleChange = ({ target: { value } }) => setTitle(value)\n const handlePosterUrlChange = ({ target: { value } }) => {\n setPosterUrl(value)\n checkImageURL(value).then(setIsPosterUrlCorrect)\n setIsUserInteractedWithPoster(!!value)\n setPosterList()\n }\n const userChangesPosterUrl = url => {\n setPosterUrl(url)\n checkImageURL(url).then(setIsPosterUrlCorrect)\n setIsUserInteractedWithPoster(true)\n }\n\n return (\n \n \n {originalTorrentTitle ? (\n <>\n \n setIsCustomTitleEnabled(true)}\n onBlur={({ target: { value } }) => !value && setIsCustomTitleEnabled(false)}\n value={title}\n margin='dense'\n label={t('AddDialog.CustomTorrentTitle')}\n type='text'\n fullWidth\n helperText={t('AddDialog.CustomTorrentTitleHelperText')}\n InputProps={{\n endAdornment: (\n \n {\n setTitle('')\n setIsCustomTitleEnabled(!isCustomTitleEnabled)\n updateTitleFromSource()\n setIsUserInteractedWithPoster(false)\n }}\n >\n \n \n \n ),\n }}\n />\n \n ) : (\n \n )}\n \n\n \n \n {isPosterUrlCorrect ? poster : }\n \n\n \n {posterList\n ?.filter(url => url !== posterUrl)\n .slice(0, 12)\n .map(url => (\n userChangesPosterUrl(url)} key={url}>\n poster\n \n ))}\n \n\n {currentLang !== 'en' && (\n {\n const newLanguage = posterSearchLanguage === 'en' ? 'ru' : 'en'\n setPosterSearchLanguage(newLanguage)\n posterSearch(isCustomTitleEnabled ? title : originalTorrentTitle ? parsedTitle : title, newLanguage, {\n shouldRefreshMainPoster: true,\n })\n }}\n showbutton={+isPosterUrlCorrect}\n color='primary'\n variant='contained'\n size='small'\n >\n {posterSearchLanguage === 'en' ? 'EN' : 'RU'}\n \n )}\n\n {\n removePoster()\n setIsUserInteractedWithPoster(true)\n }}\n color='primary'\n variant='contained'\n size='small'\n >\n {t('Clear')}\n \n \n \n\n \n \n )\n}\n","import { useTranslation } from 'react-i18next'\nimport { useDropzone } from 'react-dropzone'\nimport { AddItemIcon, TorrentIcon } from 'icons'\nimport TextField from '@material-ui/core/TextField'\nimport { Cancel as CancelIcon } from '@material-ui/icons'\nimport { useState } from 'react'\n\nimport {\n CancelIconWrapper,\n IconWrapper,\n LeftSide,\n LeftSideBottomSectionFileSelected,\n LeftSideBottomSectionNoFile,\n LeftSideTopSection,\n TorrentIconWrapper,\n} from './style'\n\nexport default function LeftSideComponent({\n setIsUserInteractedWithPoster,\n setSelectedFile,\n torrentSource,\n setTorrentSource,\n selectedFile,\n}) {\n const { t } = useTranslation()\n\n const handleCapture = files => {\n const [file] = files\n if (!file) return\n\n setIsUserInteractedWithPoster(false)\n setSelectedFile(file)\n setTorrentSource(file.name)\n }\n\n const clearSelectedFile = () => {\n setSelectedFile()\n setTorrentSource('')\n }\n\n const [isTorrentSourceActive, setIsTorrentSourceActive] = useState(false)\n const { getRootProps, getInputProps, isDragActive } = useDropzone({ onDrop: handleCapture, accept: '.torrent' })\n\n const handleTorrentSourceChange = ({ target: { value } }) => setTorrentSource(value)\n\n return (\n \n \n setIsTorrentSourceActive(true)}\n onBlur={() => setIsTorrentSourceActive(false)}\n inputProps={{ autoComplete: 'off' }}\n disabled={!!selectedFile}\n />\n \n\n {selectedFile ? (\n \n \n \n\n \n \n \n \n \n ) : (\n \n \n
{t('AddDialog.AppendFile.Or')}
\n\n \n \n
{t('AddDialog.AppendFile.ClickOrDrag')}
\n
\n
\n )}\n
\n )\n}\n","import { useCallback, useEffect, useMemo, useState } from 'react'\nimport Button from '@material-ui/core/Button'\nimport Dialog from '@material-ui/core/Dialog'\nimport { torrentsHost, torrentUploadHost } from 'utils/Hosts'\nimport axios from 'axios'\nimport { useTranslation } from 'react-i18next'\nimport debounce from 'lodash/debounce'\nimport useChangeLanguage from 'utils/useChangeLanguage'\nimport { useMediaQuery } from '@material-ui/core'\nimport CircularProgress from '@material-ui/core/CircularProgress'\nimport usePreviousState from 'utils/usePreviousState'\nimport { useQuery } from 'react-query'\nimport { getTorrents } from 'utils/Utils'\nimport parseTorrent from 'parse-torrent'\nimport { ButtonWrapper, Header } from 'style/DialogStyles'\n\nimport { checkImageURL, getMoviePosters, chechTorrentSource, parseTorrentTitle } from './helpers'\nimport { Content } from './style'\nimport RightSideComponent from './RightSideComponent'\nimport LeftSideComponent from './LeftSideComponent'\n\nexport default function AddDialog({\n handleClose,\n hash: originalHash,\n title: originalTitle,\n name: originalName,\n poster: originalPoster,\n}) {\n const { t } = useTranslation()\n const isEditMode = !!originalHash\n const [torrentSource, setTorrentSource] = useState(originalHash || '')\n const [title, setTitle] = useState(originalTitle || '')\n const [originalTorrentTitle, setOriginalTorrentTitle] = useState('')\n const [parsedTitle, setParsedTitle] = useState('')\n const [posterUrl, setPosterUrl] = useState(originalPoster || '')\n const [isPosterUrlCorrect, setIsPosterUrlCorrect] = useState(false)\n const [isTorrentSourceCorrect, setIsTorrentSourceCorrect] = useState(false)\n const [isHashAlreadyExists, setIsHashAlreadyExists] = useState(false)\n const [posterList, setPosterList] = useState()\n const [isUserInteractedWithPoster, setIsUserInteractedWithPoster] = useState(isEditMode)\n const [currentLang] = useChangeLanguage()\n const [selectedFile, setSelectedFile] = useState()\n const [posterSearchLanguage, setPosterSearchLanguage] = useState(currentLang === 'ru' ? 'ru' : 'en')\n const [isSaving, setIsSaving] = useState(false)\n const [skipDebounce, setSkipDebounce] = useState(false)\n const [isCustomTitleEnabled, setIsCustomTitleEnabled] = useState(false)\n const [currentSourceHash, setCurrentSourceHash] = useState()\n\n const { data: torrents } = useQuery('torrents', getTorrents, { retry: 1, refetchInterval: 1000 })\n\n useEffect(() => {\n // getting hash from added torrent source\n parseTorrent.remote(selectedFile || torrentSource, (_, { infoHash } = {}) => setCurrentSourceHash(infoHash))\n }, [selectedFile, torrentSource])\n\n useEffect(() => {\n // checking if torrent already exists in DB\n if (!setCurrentSourceHash) return\n\n const allHashes = torrents.map(({ hash }) => hash)\n setIsHashAlreadyExists(allHashes.includes(currentSourceHash))\n }, [currentSourceHash, torrents])\n\n useEffect(() => {\n // closing dialog when torrent successfully added in DB\n if (!isSaving) return\n\n const allHashes = torrents.map(({ hash }) => hash)\n allHashes.includes(currentSourceHash) && handleClose()\n }, [isSaving, torrents, currentSourceHash, handleClose])\n\n const fullScreen = useMediaQuery('@media (max-width:930px)')\n\n const updateTitleFromSource = useCallback(() => {\n parseTorrentTitle(selectedFile || torrentSource, ({ parsedTitle, originalName }) => {\n if (!originalName) return\n\n setSkipDebounce(true)\n setTitle('')\n setIsCustomTitleEnabled(false)\n setOriginalTorrentTitle(originalName)\n setParsedTitle(parsedTitle)\n })\n }, [selectedFile, torrentSource])\n\n useEffect(() => {\n if (!selectedFile && !torrentSource) {\n setTitle('')\n setOriginalTorrentTitle('')\n setParsedTitle('')\n setIsCustomTitleEnabled(false)\n setPosterList()\n removePoster()\n setIsUserInteractedWithPoster(false)\n }\n }, [selectedFile, torrentSource])\n\n const removePoster = () => {\n setIsPosterUrlCorrect(false)\n setPosterUrl('')\n }\n\n useEffect(() => {\n if (originalHash) {\n checkImageURL(posterUrl).then(correctImage => {\n correctImage ? setIsPosterUrlCorrect(true) : removePoster()\n })\n }\n // This is needed only on mount. Do not remove line below\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const posterSearch = useMemo(\n () =>\n (movieName, language, { shouldRefreshMainPoster = false } = {}) => {\n if (!movieName) {\n setPosterList()\n removePoster()\n return\n }\n\n getMoviePosters(movieName, language).then(urlList => {\n if (urlList) {\n setPosterList(urlList)\n if (!shouldRefreshMainPoster && isUserInteractedWithPoster) return\n\n const [firstPoster] = urlList\n checkImageURL(firstPoster).then(correctImage => {\n if (correctImage) {\n setIsPosterUrlCorrect(true)\n setPosterUrl(firstPoster)\n } else removePoster()\n })\n } else {\n setPosterList()\n if (isUserInteractedWithPoster) return\n\n removePoster()\n }\n })\n },\n [isUserInteractedWithPoster],\n )\n\n const delayedPosterSearch = useMemo(() => debounce(posterSearch, 700), [posterSearch])\n\n const prevTorrentSourceState = usePreviousState(torrentSource)\n\n useEffect(() => {\n const isCorrectSource = chechTorrentSource(torrentSource)\n if (!isCorrectSource) return setIsTorrentSourceCorrect(false)\n\n setIsTorrentSourceCorrect(true)\n\n // if torrentSource is updated then we are getting title from the source\n const torrentSourceChanged = torrentSource !== prevTorrentSourceState\n if (!torrentSourceChanged) return\n\n updateTitleFromSource()\n }, [prevTorrentSourceState, selectedFile, torrentSource, updateTitleFromSource])\n\n const prevTitleState = usePreviousState(title)\n\n useEffect(() => {\n // if title exists and title was changed then search poster.\n const titleChanged = title !== prevTitleState\n if (!titleChanged && !parsedTitle) return\n\n if (skipDebounce) {\n posterSearch(title || parsedTitle, posterSearchLanguage)\n setSkipDebounce(false)\n } else if (!title) {\n delayedPosterSearch.cancel()\n\n if (parsedTitle) {\n posterSearch(parsedTitle, posterSearchLanguage)\n } else {\n !isUserInteractedWithPoster && removePoster()\n }\n } else {\n delayedPosterSearch(title, posterSearchLanguage)\n }\n }, [\n title,\n parsedTitle,\n prevTitleState,\n delayedPosterSearch,\n posterSearch,\n posterSearchLanguage,\n skipDebounce,\n isUserInteractedWithPoster,\n ])\n\n const handleSave = () => {\n setIsSaving(true)\n\n if (isEditMode) {\n axios\n .post(torrentsHost(), {\n action: 'set',\n hash: originalHash,\n title: title || originalName,\n poster: posterUrl,\n })\n .finally(handleClose)\n } else if (selectedFile) {\n // file save\n const data = new FormData()\n data.append('save', 'true')\n data.append('file', selectedFile)\n title && data.append('title', title)\n posterUrl && data.append('poster', posterUrl)\n axios.post(torrentUploadHost(), data).catch(handleClose)\n } else {\n // link save\n axios\n .post(torrentsHost(), { action: 'add', link: torrentSource, title, poster: posterUrl, save_to_db: true })\n .catch(handleClose)\n }\n }\n\n return (\n \n
{t(isEditMode ? 'EditTorrent' : 'AddNewTorrent')}
\n\n \n {!isEditMode && (\n \n )}\n\n \n \n\n \n \n\n \n {isSaving ? : t(isEditMode ? 'Save' : 'Add')}\n \n \n
\n )\n}\n","import styled, { css } from 'styled-components'\n\nexport const TorrentCard = styled.div`\n ${({\n theme: {\n torrentCard: { cardPrimaryColor },\n },\n }) => css`\n border-radius: 5px;\n display: grid;\n grid-template-columns: 120px 260px 1fr;\n grid-template-rows: 180px;\n grid-template-areas: 'poster description buttons';\n gap: 10px;\n padding: 10px;\n background: ${cardPrimaryColor};\n box-shadow: 0px 2px 4px -1px rgb(0 0 0 / 20%), 0px 4px 5px 0px rgb(0 0 0 / 14%), 0px 1px 10px 0px rgb(0 0 0 / 12%);\n\n @media (max-width: 1260px), (max-height: 500px) {\n grid-template-areas:\n 'poster description'\n 'buttons buttons';\n\n grid-template-columns: 70px 1fr;\n grid-template-rows: 110px max-content;\n }\n\n @media (max-width: 770px) {\n grid-template-columns: 60px 1fr;\n grid-template-rows: 90px max-content;\n }\n `}\n`\n\nexport const TorrentCardPoster = styled.div`\n grid-area: poster;\n border-radius: 5px;\n overflow: hidden;\n text-align: center;\n\n ${({\n isPoster,\n theme: {\n torrentCard: { cardSecondaryColor, accentCardColor },\n },\n }) =>\n isPoster\n ? css`\n img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 5px;\n }\n `\n : css`\n display: grid;\n place-items: center;\n background: ${cardSecondaryColor};\n border: 1px solid ${accentCardColor};\n\n svg {\n transform: translateY(-3px);\n }\n `};\n\n @media (max-width: 1260px), (max-height: 500px) {\n svg {\n width: 50%;\n }\n }\n`\n\nexport const TorrentCardButtons = styled.div`\n grid-area: buttons;\n display: grid;\n gap: 10px;\n\n @media (max-width: 1260px), (max-height: 500px) {\n grid-template-columns: repeat(4, 1fr);\n }\n\n @media (max-width: 340px) {\n gap: 5px;\n }\n`\nexport const TorrentCardDescription = styled.div`\n ${({\n theme: {\n torrentCard: { cardSecondaryColor, accentCardColor },\n },\n }) => css`\n grid-area: description;\n background: ${cardSecondaryColor};\n border-radius: 5px;\n padding: 5px;\n display: grid;\n grid-template-rows: 55% 1fr;\n gap: 10px;\n\n @media (max-width: 770px) {\n grid-template-rows: 60% 1fr;\n gap: 3px;\n }\n\n .description-title-wrapper {\n display: flex;\n flex-direction: column;\n }\n\n .description-section-name {\n text-transform: uppercase;\n font-size: 10px;\n font-weight: 600;\n letter-spacing: 0.4px;\n color: ${accentCardColor};\n\n @media (max-width: 770px) {\n font-size: 0.4rem;\n }\n }\n\n .description-torrent-title {\n overflow: auto;\n word-break: break-all;\n }\n\n .description-statistics-wrapper {\n display: grid;\n grid-template-columns: 80px 80px 1fr;\n align-self: end;\n\n @media (max-width: 1260px), (max-height: 500px) {\n grid-template-columns: 70px 70px 1fr;\n }\n\n @media (max-width: 770px) {\n grid-template-columns: 65px 65px 1fr;\n }\n\n @media (max-width: 700px) {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n }\n }\n\n .description-statistics-element-wrapper {\n }\n\n .description-statistics-element-value {\n margin-left: 5px;\n margin-bottom: 10px;\n word-break: break-all;\n\n @media (max-width: 1260px), (max-height: 500px) {\n font-size: 0.7rem;\n margin-bottom: 0;\n margin-left: 0;\n }\n }\n\n .description-torrent-title,\n .description-statistics-element-value {\n @media (max-width: 770px) {\n font-size: 0.6rem;\n }\n\n @media (max-width: 410px) {\n font-size: 10px;\n }\n }\n `}\n`\n\nexport const StyledButton = styled.button`\n ${({\n theme: {\n torrentCard: { buttonBGColor, accentCardColor },\n },\n }) => css`\n border-radius: 5px;\n border: none;\n cursor: pointer;\n transition: 0.2s;\n display: flex;\n align-items: center;\n text-transform: uppercase;\n background: ${buttonBGColor};\n color: #fff;\n font-size: 0.9rem;\n letter-spacing: 0.009em;\n padding: 0 12px;\n svg {\n width: 20px;\n }\n\n :hover {\n background: ${accentCardColor};\n }\n\n > :first-child {\n margin-right: 10px;\n }\n\n @media (max-width: 1260px), (max-height: 500px) {\n padding: 7px 10px;\n justify-content: center;\n font-size: 0.8rem;\n\n svg {\n display: none;\n }\n }\n\n @media (max-width: 770px) {\n font-size: 0.7rem;\n }\n\n @media (max-width: 420px) {\n font-size: 0.6rem;\n padding: 7px 5px;\n }\n `}\n`\n","import { forwardRef, memo, useState } from 'react'\nimport {\n UnfoldMore as UnfoldMoreIcon,\n Edit as EditIcon,\n Close as CloseIcon,\n Delete as DeleteIcon,\n} from '@material-ui/icons'\nimport { getPeerString, humanizeSize, humanizeSpeed, removeRedundantCharacters } from 'utils/Utils'\nimport { torrentsHost } from 'utils/Hosts'\nimport { NoImageIcon } from 'icons'\nimport DialogTorrentDetailsContent from 'components/DialogTorrentDetailsContent'\nimport Dialog from '@material-ui/core/Dialog'\nimport Slide from '@material-ui/core/Slide'\nimport { Button, DialogActions, DialogTitle, useMediaQuery, useTheme } from '@material-ui/core'\nimport axios from 'axios'\nimport ptt from 'parse-torrent-title'\nimport { useTranslation } from 'react-i18next'\nimport AddDialog from 'components/Add/AddDialog'\n\nimport { StyledButton, TorrentCard, TorrentCardButtons, TorrentCardDescription, TorrentCardPoster } from './style'\n\nconst Transition = forwardRef((props, ref) => )\n\nconst Torrent = ({ torrent }) => {\n const { t } = useTranslation()\n const [isDetailedInfoOpened, setIsDetailedInfoOpened] = useState(false)\n const [isDeleteTorrentOpened, setIsDeleteTorrentOpened] = useState(false)\n\n const theme = useTheme()\n const fullScreen = useMediaQuery(theme.breakpoints.down('md'))\n\n const openDetailedInfo = () => setIsDetailedInfoOpened(true)\n const closeDetailedInfo = () => setIsDetailedInfoOpened(false)\n const openDeleteTorrentAlert = () => setIsDeleteTorrentOpened(true)\n const closeDeleteTorrentAlert = () => setIsDeleteTorrentOpened(false)\n\n const { title, name, poster, torrent_size: torrentSize, download_speed: downloadSpeed, hash } = torrent\n\n const dropTorrent = () => axios.post(torrentsHost(), { action: 'drop', hash })\n const deleteTorrent = () => axios.post(torrentsHost(), { action: 'rem', hash })\n\n const getParsedTitle = () => {\n const parse = key => ptt.parse(title || '')?.[key] || ptt.parse(name || '')?.[key]\n\n const titleStrings = []\n\n let parsedTitle = removeRedundantCharacters(parse('title'))\n const parsedYear = parse('year')\n const parsedResolution = parse('resolution')\n if (parsedTitle) titleStrings.push(parsedTitle)\n if (parsedYear) titleStrings.push(`(${parsedYear})`)\n if (parsedResolution) titleStrings.push(`[${parsedResolution}]`)\n parsedTitle = titleStrings.join(' ')\n return { parsedTitle }\n }\n const { parsedTitle } = getParsedTitle()\n\n const [isEditDialogOpen, setIsEditDialogOpen] = useState(false)\n const handleClickOpenEditDialog = () => setIsEditDialogOpen(true)\n const handleCloseEditDialog = () => setIsEditDialogOpen(false)\n\n return (\n <>\n \n \n {poster ? poster : }\n \n\n \n \n \n {t('Details')}\n \n\n \n \n {t('Edit')}\n \n\n dropTorrent(torrent)}>\n \n {t('Drop')}\n \n\n \n \n {t('Delete')}\n \n \n\n \n
\n
{t('Name')}
\n
{parsedTitle}
\n
\n\n
\n
\n
{t('Size')}
\n
{torrentSize > 0 && humanizeSize(torrentSize)}
\n
\n\n
\n
{t('Speed')}
\n
\n {downloadSpeed > 0 ? humanizeSpeed(downloadSpeed) : '---'}\n
\n
\n\n
\n
{t('Peers')}
\n
{getPeerString(torrent) || '---'}
\n
\n
\n
\n
\n\n \n \n \n\n \n {t('DeleteTorrent?')}\n \n \n\n {\n deleteTorrent(torrent)\n closeDeleteTorrentAlert()\n }}\n color='primary'\n autoFocus\n >\n {t('OK')}\n \n \n \n\n {isEditDialogOpen && (\n \n )}\n \n )\n}\n\nexport default memo(Torrent)\n","import { rgba } from 'polished'\nimport styled, { css } from 'styled-components'\n\nexport const AppWrapper = styled.div`\n ${({\n theme: {\n app: { appSecondaryColor },\n },\n }) => css`\n height: 100%;\n background: ${rgba(appSecondaryColor, 0.8)};\n display: grid;\n grid-template-columns: 60px 1fr;\n grid-template-rows: 60px 1fr;\n grid-template-areas:\n 'head head'\n 'side content';\n `}\n`\n\nexport const CenteredGrid = styled.div`\n height: 100%;\n display: grid;\n place-items: center;\n`\n\nexport const AppHeader = styled.div`\n ${({ theme: { primary } }) => css`\n background: ${primary};\n color: #fff;\n grid-area: head;\n display: grid;\n grid-auto-flow: column;\n align-items: center;\n grid-template-columns: repeat(2, max-content) 1fr;\n box-shadow: 0px 2px 4px -1px rgb(0 0 0 / 20%), 0px 4px 5px 0px rgb(0 0 0 / 14%), 0px 1px 10px 0px rgb(0 0 0 / 12%);\n padding: 0 16px;\n z-index: 3;\n `}\n`\nexport const AppSidebarStyle = styled.div`\n ${({\n isDrawerOpen,\n theme: {\n app: { appSecondaryColor, sidebarBGColor, sidebarFillColor },\n },\n }) => css`\n grid-area: side;\n width: ${isDrawerOpen ? '400%' : '100%'};\n z-index: 2;\n overflow-x: hidden;\n transition: width 195ms cubic-bezier(0.4, 0, 0.6, 1) 0ms;\n border-right: 1px solid ${rgba(appSecondaryColor, 0.12)};\n background: ${sidebarBGColor};\n color: ${sidebarFillColor};\n white-space: nowrap;\n\n svg {\n fill: ${sidebarFillColor};\n }\n `}\n`\nexport const TorrentListWrapper = styled.div`\n grid-area: content;\n padding: 20px;\n overflow: auto;\n\n display: grid;\n place-content: start;\n grid-template-columns: repeat(auto-fit, minmax(max-content, 570px));\n gap: 20px;\n\n @media (max-width: 1260px), (max-height: 500px) {\n padding: 10px;\n gap: 15px;\n grid-template-columns: repeat(3, 1fr);\n }\n\n @media (max-width: 1100px) {\n grid-template-columns: repeat(2, 1fr);\n }\n\n @media (max-width: 700px) {\n grid-template-columns: 1fr;\n }\n`\n\nexport const HeaderToggle = styled.div`\n ${({\n theme: {\n app: { headerToggleColor },\n },\n }) => css`\n cursor: pointer;\n border-radius: 50%;\n background: ${headerToggleColor};\n height: 35px;\n width: 35px;\n transition: all 0.2s;\n font-weight: 600;\n display: grid;\n place-items: center;\n color: #fff;\n\n :hover {\n background: ${rgba(headerToggleColor, 0.7)};\n }\n\n @media (max-width: 700px) {\n height: 28px;\n width: 28px;\n font-size: 12px;\n\n svg {\n width: 17px;\n }\n }\n `}\n`\n","import styled, { css } from 'styled-components'\n\nexport default styled.div`\n ${({ isButton }) => css`\n display: grid;\n place-items: center;\n padding: 20px 40px;\n border-radius: 5px;\n\n ${isButton &&\n css`\n background: #88cdaa;\n transition: 0.2s;\n cursor: pointer;\n\n :hover {\n background: #74c39c;\n }\n `}\n\n lord-icon {\n width: 200px;\n height: 200px;\n }\n\n .icon-label {\n font-size: 20px;\n }\n `}\n`\n","import { useTheme } from '@material-ui/core'\nimport { useTranslation } from 'react-i18next'\n\nimport IconWrapper from './style'\n\nexport default function NoServerConnection() {\n const { t } = useTranslation()\n const primary = useTheme().palette.primary.main\n\n return (\n \n \n
{t('Offline')}
\n
\n )\n}\n","import { useTheme } from '@material-ui/core'\nimport { useState } from 'react'\nimport { useTranslation } from 'react-i18next'\n\nimport AddDialog from '../Add/AddDialog'\nimport IconWrapper from './style'\n\nexport default function AddFirstTorrent() {\n const { t } = useTranslation()\n const [isDialogOpen, setIsDialogOpen] = useState(false)\n const handleClickOpen = () => setIsDialogOpen(true)\n const handleClose = () => setIsDialogOpen(false)\n const primary = useTheme().palette.primary.main\n\n return (\n <>\n handleClickOpen(true)} isButton>\n \n
{t('NoTorrentsAdded')}
\n
\n\n {isDialogOpen && }\n \n )\n}\n","import TorrentCard from 'components/TorrentCard'\nimport CircularProgress from '@material-ui/core/CircularProgress'\nimport { TorrentListWrapper, CenteredGrid } from 'components/App/style'\n\nimport NoServerConnection from './NoServerConnection'\nimport AddFirstTorrent from './AddFirstTorrent'\n\nexport default function TorrentList({ isOffline, isLoading, torrents }) {\n if (isLoading || isOffline || !torrents.length) {\n return (\n \n {isOffline ? (\n \n ) : isLoading ? (\n \n ) : (\n !torrents.length && \n )}\n \n )\n }\n\n return (\n \n {torrents.map(torrent => (\n \n ))}\n \n )\n}\n","import ListItem from '@material-ui/core/ListItem'\nimport Dialog from '@material-ui/core/Dialog'\nimport DialogTitle from '@material-ui/core/DialogTitle'\nimport DialogContent from '@material-ui/core/DialogContent'\nimport DialogActions from '@material-ui/core/DialogActions'\nimport List from '@material-ui/core/List'\nimport ButtonGroup from '@material-ui/core/ButtonGroup'\nimport Button from '@material-ui/core/Button'\nimport { useTranslation } from 'react-i18next'\n\nconst donateFrame =\n ''\n\nexport default function DonateDialog({ onClose }) {\n const { t } = useTranslation()\n\n return (\n \n {t('Donate')}\n \n \n \n \n \n \n \n \n \n {/* eslint-disable-next-line react/no-danger */}\n
\n \n \n \n\n \n \n \n
\n )\n}\n","import { useState } from 'react'\nimport Button from '@material-ui/core/Button'\nimport Snackbar from '@material-ui/core/Snackbar'\nimport IconButton from '@material-ui/core/IconButton'\nimport CreditCardIcon from '@material-ui/icons/CreditCard'\nimport CloseIcon from '@material-ui/icons/Close'\nimport { useTranslation } from 'react-i18next'\n\nimport DonateDialog from './DonateDialog'\n\nexport default function DonateSnackbar() {\n const { t } = useTranslation()\n const [open, setOpen] = useState(false)\n const [snackbarOpen, setSnackbarOpen] = useState(true)\n\n const disableSnackbar = () => {\n setSnackbarOpen(false)\n localStorage.setItem('snackbarIsClosed', true)\n }\n\n return (\n <>\n {open && setOpen(false)} />}\n\n \n {\n setOpen(true)\n disableSnackbar()\n }}\n >\n \n {t('Support')}\n \n\n \n \n \n \n }\n />\n \n )\n}\n","import { createGlobalStyle } from 'styled-components'\n\nexport default createGlobalStyle`\n *,\n *::before,\n *::after { \n margin: 0;\n padding: 0;\n box-sizing: inherit;\n }\n\n body { \n font-family: \"Open Sans\", sans-serif;\n box-sizing: border-box;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n letter-spacing: -0.1px;\n }\n\n button {\n font-family: \"Open Sans\", sans-serif;\n letter-spacing: -0.1px;\n }\n`\n","import { useState } from 'react'\nimport ListItemIcon from '@material-ui/core/ListItemIcon'\nimport LibraryAddIcon from '@material-ui/icons/LibraryAdd'\nimport ListItemText from '@material-ui/core/ListItemText'\nimport ListItem from '@material-ui/core/ListItem'\nimport { useTranslation } from 'react-i18next'\n\nimport AddDialog from './AddDialog'\n\nexport default function AddDialogButton({ isOffline, isLoading }) {\n const { t } = useTranslation()\n const [isDialogOpen, setIsDialogOpen] = useState(false)\n const handleClickOpen = () => setIsDialogOpen(true)\n const handleClose = () => setIsDialogOpen(false)\n\n return (\n
\n \n \n \n \n \n \n\n {isDialogOpen && }\n
\n )\n}\n","import styled, { css } from 'styled-components'\nimport { mainColors } from 'style/colors'\nimport { Header } from 'style/DialogStyles'\n\nexport const cacheBeforeReaderColor = '#b3dfc9'\nexport const cacheAfterReaderColor = mainColors.light.primary\n\nexport const SettingsHeader = styled(Header)`\n display: grid;\n grid-auto-flow: column;\n align-items: center;\n justify-content: space-between;\n\n @media (max-width: 340px) {\n grid-auto-flow: row;\n }\n`\n\nexport const FooterSection = styled.div`\n ${({\n theme: {\n settingsDialog: { footerBG },\n },\n }) => css`\n padding: 20px;\n display: grid;\n grid-auto-flow: column;\n justify-content: end;\n gap: 10px;\n align-items: center;\n background: ${footerBG};\n\n @media (max-width: 500px) {\n grid-auto-flow: row;\n justify-content: stretch;\n }\n `}\n`\nexport const Divider = styled.div`\n height: 1px;\n background-color: rgba(0, 0, 0, 0.12);\n margin: 30px 0;\n`\n\nexport const Content = styled.div`\n ${({\n isLoading,\n theme: {\n settingsDialog: { contentBG },\n },\n }) => css`\n background: ${contentBG};\n overflow: auto;\n flex: 1;\n\n ${isLoading &&\n css`\n min-height: 500px;\n display: grid;\n place-items: center;\n `}\n `}\n`\n\nexport const PreloadCacheValue = styled.div`\n ${({ color }) => css`\n display: grid;\n grid-template-columns: max-content 100px 1fr;\n gap: 10px;\n align-items: flex-start;\n\n :not(:last-child) {\n margin-bottom: 5px;\n }\n\n :before {\n content: '';\n background: ${color};\n width: 16px;\n height: 16px;\n border-radius: 50%;\n margin-top: 2px;\n }\n `}\n`\n\nexport const MainSettingsContent = styled.div`\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 40px;\n padding: 20px;\n\n @media (max-width: 930px) {\n grid-template-columns: 1fr;\n }\n`\nexport const SecondarySettingsContent = styled.div`\n padding: 20px;\n`\n\nexport const StorageButton = styled.div`\n ${({ small, selected }) => css`\n transition: 0.2s;\n cursor: default;\n text-align: center;\n\n ${!selected &&\n css`\n cursor: pointer;\n\n :hover {\n filter: brightness(0.8);\n }\n `}\n\n ${small\n ? css`\n display: grid;\n grid-template-columns: max-content 1fr;\n gap: 20px;\n align-items: center;\n justify-items: start;\n margin-bottom: 20px;\n `\n : css`\n display: grid;\n place-items: center;\n gap: 10px;\n `}\n `}\n`\n\nexport const StorageIconWrapper = styled.div`\n ${({ selected, small }) => css`\n width: ${small ? '60px' : '150px'};\n height: ${small ? '60px' : '150px'};\n border-radius: 50%;\n background: ${selected ? '#323637' : '#dee3e5'};\n\n svg {\n transform: rotate(-45deg) scale(0.75);\n }\n\n @media (max-width: 930px) {\n width: ${small ? '50px' : '90px'};\n height: ${small ? '50px' : '90px'};\n }\n `}\n`\n\nexport const CacheStorageSelector = styled.div`\n display: grid;\n grid-template-rows: max-content 1fr;\n grid-template-areas: 'label label';\n place-items: center;\n\n @media (max-width: 930px) {\n justify-content: start;\n column-gap: 30px;\n }\n`\n\nexport const SettingSectionLabel = styled.div`\n font-size: 25px;\n padding-bottom: 20px;\n\n small {\n display: block;\n font-size: 11px;\n }\n`\n\nexport const PreloadCachePercentage = styled.div.attrs(({ value }) => ({\n // this block is here according to styled-components recomendation about fast changable components\n style: {\n background: `linear-gradient(to right, ${cacheBeforeReaderColor} 0%, ${cacheBeforeReaderColor} ${value}%, ${cacheAfterReaderColor} ${value}%, ${cacheAfterReaderColor} 100%)`,\n },\n}))`\n ${({ label, preloadCachePercentage }) => css`\n border: 1px solid #323637;\n padding: 10px 20px;\n border-radius: 5px;\n color: #000;\n margin-bottom: 10px;\n position: relative;\n\n :before {\n content: '${label}';\n display: grid;\n place-items: center;\n font-size: 20px;\n }\n\n :after {\n content: '';\n width: ${preloadCachePercentage}%;\n height: 100%;\n background: #323637;\n position: absolute;\n bottom: 0;\n left: 0;\n border-radius: 4px;\n filter: opacity(0.15);\n }\n `}\n`\n","export default {\n AcceptPeerCon: true,\n AnnTorrentsToDht: true,\n CacheSize: 96,\n ReaderReadAHead: 95,\n UseDisk: false,\n UploadRateLimit: 0,\n TorrentsSavePath: '',\n ConnectionsLimit: 23,\n DisableDHT: false,\n DisablePEX: false,\n DisableTCP: false,\n DisableUPNP: false,\n DisableUTP: true,\n DisableUpload: false,\n DownloadRateLimit: 0,\n EnableDebug: false,\n EnableIPv6: false,\n ForceEncrypt: false,\n PeersListenPort: 0,\n PreloadCache: 0,\n RemoveCacheOnDrop: false,\n RetrackersMode: 1,\n TorrentDisconnectTimeout: 30,\n}\n","export const a11yProps = index => ({\n id: `full-width-tab-${index}`,\n 'aria-controls': `full-width-tabpanel-${index}`,\n})\n\nexport const TabPanel = ({ children, value, index, ...other }) => (\n \n)\n","import { Grid, OutlinedInput, Slider } from '@material-ui/core'\n\nexport default function SliderInput({\n isProMode,\n title,\n value,\n setValue,\n sliderMin,\n sliderMax,\n inputMin,\n inputMax,\n step = 1,\n onBlurCallback,\n}) {\n const onBlur = ({ target: { value } }) => {\n if (value < inputMin) return setValue(inputMin)\n if (value > inputMax) return setValue(inputMax)\n\n onBlurCallback && onBlurCallback(value)\n }\n\n const onInputChange = ({ target: { value } }) => setValue(value === '' ? '' : Number(value))\n const onSliderChange = (_, newValue) => setValue(newValue)\n\n return (\n <>\n
{title}
\n\n \n \n \n \n\n {isProMode && (\n \n \n \n )}\n \n \n )\n}\n","import { useTranslation } from 'react-i18next'\nimport { USBIcon, RAMIcon } from 'icons'\nimport { FormControlLabel, Switch } from '@material-ui/core'\nimport TextField from '@material-ui/core/TextField'\n\nimport {\n PreloadCacheValue,\n MainSettingsContent,\n StorageButton,\n StorageIconWrapper,\n CacheStorageSelector,\n SettingSectionLabel,\n PreloadCachePercentage,\n cacheBeforeReaderColor,\n cacheAfterReaderColor,\n} from './style'\nimport SliderInput from './SliderInput'\n\nconst CacheStorageLocationLabel = ({ style }) => {\n const { t } = useTranslation()\n\n return (\n \n {t('SettingsDialog.CacheStorageLocation')}\n {t('SettingsDialog.UseDiskDesc')}\n \n )\n}\n\nexport default function PrimarySettingsComponent({\n settings,\n inputForm,\n cachePercentage,\n preloadCachePercentage,\n cacheSize,\n isProMode,\n setCacheSize,\n setCachePercentage,\n setPreloadCachePercentage,\n updateSettings,\n}) {\n const { t } = useTranslation()\n const { UseDisk, TorrentsSavePath, RemoveCacheOnDrop } = settings || {}\n const preloadCacheSize = Math.round((cacheSize / 100) * preloadCachePercentage)\n\n return (\n \n
\n {t('SettingsDialog.CacheSettings')}\n\n \n\n \n
\n {100 - cachePercentage}% ({Math.round((cacheSize / 100) * (100 - cachePercentage))} MB)\n
\n\n
{t('SettingsDialog.CacheBeforeReaderDesc')}
\n
\n\n \n
\n {cachePercentage}% ({Math.round((cacheSize / 100) * cachePercentage)} MB)\n
\n\n
{t('SettingsDialog.CacheAfterReaderDesc')}
\n
\n\n
\n\n setCacheSize(Math.round(value / 4) * 4)}\n />\n\n \n\n \n
\n\n {UseDisk ? (\n
\n \n\n
\n updateSettings({ UseDisk: false })}>\n \n \n \n\n
{t('SettingsDialog.RAM')}
\n
\n\n \n \n \n \n\n
{t('SettingsDialog.Disk')}
\n
\n
\n\n \n }\n label={t('SettingsDialog.RemoveCacheOnDrop')}\n labelPlacement='start'\n />\n
\n {t('SettingsDialog.RemoveCacheOnDropDesc')}\n
\n
\n \n
\n ) : (\n \n \n\n \n \n \n \n\n
{t('SettingsDialog.RAM')}
\n
\n\n updateSettings({ UseDisk: true })}>\n \n \n \n\n
{t('SettingsDialog.Disk')}
\n
\n
\n )}\n
\n )\n}\n","import { useTranslation } from 'react-i18next'\nimport TextField from '@material-ui/core/TextField'\nimport { FormControlLabel, InputAdornment, InputLabel, Select, Switch } from '@material-ui/core'\n\nimport { SecondarySettingsContent, SettingSectionLabel } from './style'\n\nexport default function SecondarySettingsComponent({ settings, inputForm }) {\n const { t } = useTranslation()\n\n const {\n AcceptPeerCon,\n AnnTorrentsToDht,\n RetrackersMode,\n TorrentDisconnectTimeout,\n EnableIPv6,\n ForceEncrypt,\n DisableTCP,\n DisableUTP,\n DisableUPNP,\n DisableDHT,\n DisablePEX,\n DisableUpload,\n DownloadRateLimit,\n UploadRateLimit,\n ConnectionsLimit,\n PeersListenPort,\n } = settings || {}\n\n return (\n \n {t('SettingsDialog.AdditionalSettings')}\n\n }\n label='IPv6'\n labelPlacement='start'\n />\n }\n label='TCP (Transmission Control Protocol)'\n labelPlacement='start'\n />\n }\n label='μTP (Micro Transport Protocol)'\n labelPlacement='start'\n />\n }\n label='PEX (Peer Exchange)'\n labelPlacement='start'\n />\n }\n label={t('SettingsDialog.ForceEncrypt')}\n labelPlacement='start'\n />\n {t('Seconds')},\n }}\n value={TorrentDisconnectTimeout}\n type='number'\n variant='outlined'\n fullWidth\n />\n
\n \n
\n }\n label={t('SettingsDialog.DHT')}\n labelPlacement='start'\n />\n }\n label={t('SettingsDialog.AnnTorrentsToDht')}\n labelPlacement='start'\n />\n }\n label={t('SettingsDialog.AcceptPeerCon')}\n labelPlacement='start'\n />\n
\n {t('Kilobytes')},\n }}\n value={DownloadRateLimit}\n type='number'\n variant='outlined'\n fullWidth\n />\n
\n }\n label={t('SettingsDialog.Upload')}\n labelPlacement='start'\n />\n {t('Kilobytes')},\n }}\n value={UploadRateLimit}\n type='number'\n variant='outlined'\n fullWidth\n />\n
\n \n }\n label='UPnP (Universal Plug and Play)'\n labelPlacement='start'\n />\n
\n {t('SettingsDialog.RetrackersMode')}\n \n \n \n \n \n \n
\n
\n )\n}\n","import axios from 'axios'\nimport Dialog from '@material-ui/core/Dialog'\nimport Button from '@material-ui/core/Button'\nimport Checkbox from '@material-ui/core/Checkbox'\nimport { FormControlLabel, useMediaQuery, useTheme } from '@material-ui/core'\nimport { settingsHost } from 'utils/Hosts'\nimport { useEffect, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport AppBar from '@material-ui/core/AppBar'\nimport Tabs from '@material-ui/core/Tabs'\nimport Tab from '@material-ui/core/Tab'\nimport SwipeableViews from 'react-swipeable-views'\nimport CircularProgress from '@material-ui/core/CircularProgress'\n\nimport { SettingsHeader, FooterSection, Content } from './style'\nimport defaultSettings from './defaultSettings'\nimport { a11yProps, TabPanel } from './tabComponents'\nimport PrimarySettingsComponent from './PrimarySettingsComponent'\nimport SecondarySettingsComponent from './SecondarySettingsComponent'\n\nexport default function SettingsDialog({ handleClose }) {\n const { t } = useTranslation()\n const fullScreen = useMediaQuery('@media (max-width:930px)')\n const { direction } = useTheme()\n\n const [settings, setSettings] = useState()\n const [selectedTab, setSelectedTab] = useState(0)\n const [cacheSize, setCacheSize] = useState(32)\n const [cachePercentage, setCachePercentage] = useState(40)\n const [preloadCachePercentage, setPreloadCachePercentage] = useState(0)\n const [isProMode, setIsProMode] = useState(JSON.parse(localStorage.getItem('isProMode')) || false)\n\n useEffect(() => {\n axios.post(settingsHost(), { action: 'get' }).then(({ data }) => {\n setSettings({ ...data, CacheSize: data.CacheSize / (1024 * 1024) })\n })\n }, [])\n\n const handleSave = () => {\n handleClose()\n const sets = JSON.parse(JSON.stringify(settings))\n sets.CacheSize = cacheSize * 1024 * 1024\n sets.ReaderReadAHead = cachePercentage\n sets.PreloadCache = preloadCachePercentage\n axios.post(settingsHost(), { action: 'set', sets })\n }\n\n const inputForm = ({ target: { type, value, checked, id } }) => {\n const sets = JSON.parse(JSON.stringify(settings))\n\n if (type === 'number' || type === 'select-one') {\n sets[id] = Number(value)\n } else if (type === 'checkbox') {\n if (\n id === 'DisableTCP' ||\n id === 'DisableUTP' ||\n id === 'DisableUPNP' ||\n id === 'DisableDHT' ||\n id === 'DisablePEX' ||\n id === 'DisableUpload'\n )\n sets[id] = Boolean(!checked)\n else sets[id] = Boolean(checked)\n } else if (type === 'url') {\n sets[id] = value\n }\n setSettings(sets)\n }\n\n const { CacheSize, ReaderReadAHead, PreloadCache } = settings || {}\n\n useEffect(() => {\n if (isNaN(CacheSize) || isNaN(ReaderReadAHead) || isNaN(PreloadCache)) return\n\n setCacheSize(CacheSize)\n setCachePercentage(ReaderReadAHead)\n setPreloadCachePercentage(PreloadCache)\n }, [CacheSize, ReaderReadAHead, PreloadCache])\n\n const updateSettings = newProps => setSettings({ ...settings, ...newProps })\n const handleChange = (_, newValue) => setSelectedTab(newValue)\n const handleChangeIndex = index => setSelectedTab(index)\n\n return (\n \n \n
{t('SettingsDialog.Settings')}
\n {\n setIsProMode(checked)\n localStorage.setItem('isProMode', checked)\n if (!checked) setSelectedTab(0)\n }}\n style={{ color: 'white' }}\n />\n }\n label={t('SettingsDialog.ProMode')}\n />\n
\n\n \n \n \n\n \n
{t('SettingsDialog.Tabs.Additional')}
\n {!isProMode &&
{t('SettingsDialog.Tabs.AdditionalDisabled')}
}\n \n }\n {...a11yProps(1)}\n />\n \n
\n\n \n {settings ? (\n <>\n \n \n \n \n\n \n \n \n \n \n ) : (\n \n )}\n \n\n \n \n\n {\n setCacheSize(defaultSettings.CacheSize)\n setCachePercentage(defaultSettings.ReaderReadAHead)\n setPreloadCachePercentage(defaultSettings.PreloadCache)\n updateSettings(defaultSettings)\n }}\n color='secondary'\n variant='outlined'\n >\n {t('SettingsDialog.ResetToDefault')}\n \n\n \n \n
\n )\n}\n","import ListItem from '@material-ui/core/ListItem'\nimport ListItemIcon from '@material-ui/core/ListItemIcon'\nimport ListItemText from '@material-ui/core/ListItemText'\nimport { useState } from 'react'\nimport SettingsIcon from '@material-ui/icons/Settings'\nimport { useTranslation } from 'react-i18next'\n\nimport SettingsDialog from './SettingsDialog'\n\nexport default function SettingsDialogButton({ isOffline, isLoading }) {\n const { t } = useTranslation()\n const [isDialogOpen, setIsDialogOpen] = useState(false)\n\n const handleClickOpen = () => setIsDialogOpen(true)\n const handleClose = () => setIsDialogOpen(false)\n\n return (\n
\n \n \n \n \n \n \n\n {isDialogOpen && }\n
\n )\n}\n","import { Button, Dialog, DialogActions, DialogTitle } from '@material-ui/core'\nimport ListItem from '@material-ui/core/ListItem'\nimport ListItemIcon from '@material-ui/core/ListItemIcon'\nimport ListItemText from '@material-ui/core/ListItemText'\nimport DeleteIcon from '@material-ui/icons/Delete'\nimport { useState } from 'react'\nimport { torrentsHost } from 'utils/Hosts'\nimport { useTranslation } from 'react-i18next'\n\nconst fnRemoveAll = () => {\n fetch(torrentsHost(), {\n method: 'post',\n body: JSON.stringify({ action: 'list' }),\n headers: {\n Accept: 'application/json, text/plain, */*',\n 'Content-Type': 'application/json',\n },\n })\n .then(res => res.json())\n .then(json => {\n json.forEach(torr => {\n fetch(torrentsHost(), {\n method: 'post',\n body: JSON.stringify({ action: 'rem', hash: torr.hash }),\n headers: {\n Accept: 'application/json, text/plain, */*',\n 'Content-Type': 'application/json',\n },\n })\n })\n })\n}\n\nexport default function RemoveAll({ isOffline, isLoading }) {\n const { t } = useTranslation()\n const [open, setOpen] = useState(false)\n const closeDialog = () => setOpen(false)\n const openDialog = () => setOpen(true)\n\n return (\n <>\n \n \n \n \n\n \n \n\n \n {t('DeleteTorrents?')}\n \n \n\n {\n fnRemoveAll()\n closeDialog()\n }}\n color='secondary'\n autoFocus\n >\n {t('OK')}\n \n \n \n \n )\n}\n","import styled, { css } from 'styled-components'\n\nexport const DialogWrapper = styled.div`\n height: 100%;\n display: grid;\n grid-template-rows: max-content 1fr max-content;\n`\n\nexport const HeaderSection = styled.section`\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 36px;\n font-weight: 300;\n padding: 20px;\n\n img {\n width: 64px;\n }\n\n @media (max-width: 930px) {\n font-size: 24px;\n padding: 10px 20px;\n\n img {\n width: 60px;\n }\n }\n`\n\nexport const ThanksSection = styled.section`\n padding: 20px;\n text-align: center;\n font-size: 24px;\n font-weight: 300;\n background: #e8e5eb;\n color: #323637;\n\n @media (max-width: 930px) {\n font-size: 20px;\n padding: 30px 20px;\n }\n`\n\nexport const Section = styled.section`\n padding: 20px;\n\n > span {\n font-size: 20px;\n display: block;\n margin-bottom: 15px;\n }\n\n a {\n text-decoration: none;\n }\n\n > div {\n display: grid;\n gap: 10px;\n grid-template-columns: repeat(4, max-content);\n\n @media (max-width: 930px) {\n grid-template-columns: repeat(3, 1fr);\n }\n\n @media (max-width: 780px) {\n grid-template-columns: repeat(2, 1fr);\n }\n\n @media (max-width: 550px) {\n grid-template-columns: 1fr;\n }\n }\n`\n\nexport const FooterSection = styled.div`\n padding: 20px;\n display: flex;\n justify-content: flex-end;\n background: #e8e5eb;\n`\n\nexport const LinkWrapper = styled.a`\n ${({ isLink }) => css`\n display: inline-flex;\n align-items: center;\n justify-content: start;\n border: 1px solid;\n padding: 10px;\n border-radius: 5px;\n text-transform: uppercase;\n text-decoration: none;\n background: #545a5e;\n color: #f1eff3;\n transition: 0.2s;\n\n > * {\n transition: 0.2s;\n }\n\n ${isLink\n ? css`\n :hover {\n filter: brightness(1.1);\n\n > * {\n transform: translateY(-1px);\n }\n }\n `\n : css`\n cursor: default;\n `}\n `}\n`\n\nexport const LinkIcon = styled.div`\n display: grid;\n margin-right: 10px;\n`\n","import { GitHub as GitHubIcon } from '@material-ui/icons'\n\nimport { LinkWrapper, LinkIcon } from './style'\n\nexport default function LinkComponent({ name, link }) {\n return (\n \n {link && (\n \n \n \n )}\n\n
{name}
\n
\n )\n}\n","import axios from 'axios'\nimport { useEffect, useState } from 'react'\nimport Button from '@material-ui/core/Button'\nimport Dialog from '@material-ui/core/Dialog'\nimport InfoIcon from '@material-ui/icons/Info'\nimport ListItem from '@material-ui/core/ListItem'\nimport ListItemIcon from '@material-ui/core/ListItemIcon'\nimport ListItemText from '@material-ui/core/ListItemText'\nimport { useTranslation } from 'react-i18next'\nimport { useMediaQuery } from '@material-ui/core'\nimport { echoHost } from 'utils/Hosts'\n\nimport LinkComponent from './LinkComponent'\nimport { DialogWrapper, HeaderSection, ThanksSection, Section, FooterSection } from './style'\n\nexport default function AboutDialog() {\n const { t } = useTranslation()\n const [open, setOpen] = useState(false)\n const [torrServerVersion, setTorrServerVersion] = useState('')\n const fullScreen = useMediaQuery('@media (max-width:930px)')\n useEffect(() => {\n axios.get(echoHost()).then(({ data }) => setTorrServerVersion(data))\n }, [])\n\n return (\n <>\n setOpen(true)}>\n \n \n \n \n \n\n setOpen(false)}\n aria-labelledby='form-dialog-title'\n fullScreen={fullScreen}\n maxWidth='xl'\n >\n \n \n
{t('About')}
\n {torrServerVersion}\n ts-icon\n
\n\n
\n {t('ThanksToEveryone')}\n\n
\n {t('Links')}\n\n
\n \n \n
\n
\n\n
\n {t('SpecialThanks')}\n\n
\n \n \n \n \n \n
\n
\n
\n\n \n \n \n
\n \n \n )\n}\n","import { useState } from 'react'\nimport { Button, Dialog, DialogActions, DialogTitle, ListItem, ListItemIcon, ListItemText } from '@material-ui/core'\nimport { PowerSettingsNew as PowerSettingsNewIcon } from '@material-ui/icons'\nimport { shutdownHost } from 'utils/Hosts'\nimport { useTranslation } from 'react-i18next'\n\nexport default function CloseServer({ isOffline, isLoading }) {\n const { t } = useTranslation()\n const [open, setOpen] = useState(false)\n const closeDialog = () => setOpen(false)\n const openDialog = () => setOpen(true)\n\n return (\n <>\n \n \n \n \n\n \n \n\n \n {t('CloseServer?')}\n \n \n\n {\n fetch(shutdownHost())\n closeDialog()\n }}\n color='secondary'\n autoFocus\n >\n {t('TurnOff')}\n \n \n \n \n )\n}\n","import Divider from '@material-ui/core/Divider'\nimport ListItem from '@material-ui/core/ListItem'\nimport ListItemIcon from '@material-ui/core/ListItemIcon'\nimport ListItemText from '@material-ui/core/ListItemText'\nimport { CreditCard as CreditCardIcon } from '@material-ui/icons'\nimport List from '@material-ui/core/List'\nimport { useTranslation } from 'react-i18next'\nimport AddDialogButton from 'components/Add'\nimport SettingsDialog from 'components/Settings'\nimport RemoveAll from 'components/RemoveAll'\nimport AboutDialog from 'components/About'\nimport CloseServer from 'components/CloseServer'\nimport { memo } from 'react'\n\nimport { AppSidebarStyle } from './style'\n\nconst Sidebar = ({ isDrawerOpen, setIsDonationDialogOpen, isOffline, isLoading }) => {\n const { t } = useTranslation()\n\n return (\n \n \n \n\n \n \n\n \n\n \n \n\n \n\n setIsDonationDialogOpen(true)}>\n \n \n \n\n \n \n\n \n \n \n )\n}\n\nexport default memo(Sidebar)\n","import CssBaseline from '@material-ui/core/CssBaseline'\nimport { createContext, useEffect, useState } from 'react'\nimport Typography from '@material-ui/core/Typography'\nimport IconButton from '@material-ui/core/IconButton'\nimport {\n Menu as MenuIcon,\n Close as CloseIcon,\n Brightness4 as Brightness4Icon,\n Brightness5 as Brightness5Icon,\n BrightnessAuto as BrightnessAutoIcon,\n} from '@material-ui/icons'\nimport { echoHost } from 'utils/Hosts'\nimport Div100vh from 'react-div-100vh'\nimport axios from 'axios'\nimport TorrentList from 'components/TorrentList'\nimport DonateSnackbar from 'components/Donate'\nimport DonateDialog from 'components/Donate/DonateDialog'\nimport useChangeLanguage from 'utils/useChangeLanguage'\nimport { ThemeProvider as MuiThemeProvider } from '@material-ui/core/styles'\nimport { ThemeProvider as StyledComponentsThemeProvider } from 'styled-components'\nimport { useQuery } from 'react-query'\nimport { getTorrents } from 'utils/Utils'\nimport GlobalStyle from 'style/GlobalStyle'\n\nimport { AppWrapper, AppHeader, HeaderToggle } from './style'\nimport Sidebar from './Sidebar'\nimport { lightTheme, THEME_MODES, useMaterialUITheme } from '../../style/materialUISetup'\nimport getStyledComponentsTheme from '../../style/getStyledComponentsTheme'\n\nexport const DarkModeContext = createContext()\n\nexport default function App() {\n const [isDrawerOpen, setIsDrawerOpen] = useState(false)\n const [isDonationDialogOpen, setIsDonationDialogOpen] = useState(false)\n const [torrServerVersion, setTorrServerVersion] = useState('')\n\n const [isDarkMode, currentThemeMode, updateThemeMode, muiTheme] = useMaterialUITheme()\n const [currentLang, changeLang] = useChangeLanguage()\n const [isOffline, setIsOffline] = useState(false)\n const { data: torrents, isLoading } = useQuery('torrents', getTorrents, {\n retry: 1,\n refetchInterval: 1000,\n onError: () => setIsOffline(true),\n onSuccess: () => setIsOffline(false),\n })\n\n useEffect(() => {\n axios.get(echoHost()).then(({ data }) => setTorrServerVersion(data))\n }, [])\n\n return (\n <>\n \n\n \n \n \n \n\n {/* Div100vh - iOS WebKit fix */}\n \n \n \n setIsDrawerOpen(!isDrawerOpen)}\n style={{ marginRight: '6px' }}\n >\n {isDrawerOpen ? : }\n \n\n \n TorrServer {torrServerVersion}\n \n\n \n {\n if (currentThemeMode === THEME_MODES.LIGHT) updateThemeMode(THEME_MODES.DARK)\n if (currentThemeMode === THEME_MODES.DARK) updateThemeMode(THEME_MODES.AUTO)\n if (currentThemeMode === THEME_MODES.AUTO) updateThemeMode(THEME_MODES.LIGHT)\n }}\n >\n {currentThemeMode === THEME_MODES.LIGHT ? (\n \n ) : currentThemeMode === THEME_MODES.DARK ? (\n \n ) : (\n \n )}\n \n\n (currentLang === 'en' ? changeLang('ru') : changeLang('en'))}>\n {currentLang === 'en' ? 'EN' : 'RU'}\n \n \n \n\n \n\n \n\n \n {isDonationDialogOpen && setIsDonationDialogOpen(false)} />}\n \n\n {!JSON.parse(localStorage.getItem('snackbarIsClosed')) && }\n \n \n \n \n \n \n )\n}\n","import { mainColors, themeColors } from './colors'\n\nexport default type => ({ ...themeColors[type], ...mainColors[type] })\n","import { StrictMode } from 'react'\nimport ReactDOM from 'react-dom'\nimport { QueryClientProvider, QueryClient } from 'react-query'\n\nimport App from './components/App'\nimport 'i18n'\n\nconst queryClient = new QueryClient()\n\nReactDOM.render(\n \n \n \n \n ,\n document.getElementById('root'),\n)\n"],"sourceRoot":""} \ No newline at end of file diff --git a/server/web/pages/template/route.go b/server/web/pages/template/route.go index 8415118..94ada7e 100644 --- a/server/web/pages/template/route.go +++ b/server/web/pages/template/route.go @@ -9,8 +9,28 @@ func RouteWebPages(route *gin.RouterGroup) { c.Data(200, "text/html; charset=utf-8", Indexhtml) }) - route.GET("/favicon.ico", func(c *gin.Context) { - c.Data(200, "image/x-icon", Faviconico) + route.GET("/android-chrome-192x192.png", func(c *gin.Context) { + c.Data(200, "image/png", Androidchrome192x192png) + }) + + + route.GET("/browserconfig.xml", func(c *gin.Context) { + c.Data(200, "application/xml", Browserconfigxml) + }) + + + route.GET("/mstile-150x150.png", func(c *gin.Context) { + c.Data(200, "image/png", Mstile150x150png) + }) + + + route.GET("/site.webmanifest", func(c *gin.Context) { + c.Data(200, "application/manifest+json", Sitewebmanifest) + }) + + + route.GET("/static/js/2.16253270.chunk.js", func(c *gin.Context) { + c.Data(200, "application/javascript", Staticjs216253270chunkjs) }) @@ -19,6 +39,46 @@ func RouteWebPages(route *gin.RouterGroup) { }) + route.GET("/static/js/main.0ae58375.chunk.js.map", func(c *gin.Context) { + c.Data(200, "application/json", Staticjsmain0ae58375chunkjsmap) + }) + + + route.GET("/static/js/runtime-main.8bda5920.js.map", func(c *gin.Context) { + c.Data(200, "application/json", Staticjsruntimemain8bda5920jsmap) + }) + + + route.GET("/android-chrome-512x512.png", func(c *gin.Context) { + c.Data(200, "image/png", Androidchrome512x512png) + }) + + + route.GET("/apple-touch-icon.png", func(c *gin.Context) { + c.Data(200, "image/png", Appletouchiconpng) + }) + + + route.GET("/index.html", func(c *gin.Context) { + c.Data(200, "text/html; charset=utf-8", Indexhtml) + }) + + + route.GET("/favicon-16x16.png", func(c *gin.Context) { + c.Data(200, "image/png", Favicon16x16png) + }) + + + route.GET("/static/js/2.16253270.chunk.js.map", func(c *gin.Context) { + c.Data(200, "application/json", Staticjs216253270chunkjsmap) + }) + + + route.GET("/static/js/runtime-main.8bda5920.js", func(c *gin.Context) { + c.Data(200, "application/javascript", Staticjsruntimemain8bda5920js) + }) + + route.GET("/asset-manifest.json", func(c *gin.Context) { c.Data(200, "application/json", Assetmanifestjson) }) @@ -29,73 +89,13 @@ func RouteWebPages(route *gin.RouterGroup) { }) - route.GET("/android-chrome-512x512.png", func(c *gin.Context) { - c.Data(200, "image/png", Androidchrome512x512png) + route.GET("/favicon.ico", func(c *gin.Context) { + c.Data(200, "image/x-icon", Faviconico) }) - route.GET("/static/js/2.16253270.chunk.js", func(c *gin.Context) { - c.Data(200, "application/javascript", Staticjs216253270chunkjs) - }) - - - route.GET("/static/js/2.16253270.chunk.js.map", func(c *gin.Context) { - c.Data(200, "application/json", Staticjs216253270chunkjsmap) - }) - - - route.GET("/static/js/main.156908fe.chunk.js.map", func(c *gin.Context) { - c.Data(200, "application/json", Staticjsmain156908fechunkjsmap) - }) - - - route.GET("/static/js/runtime-main.8bda5920.js", func(c *gin.Context) { - c.Data(200, "application/javascript", Staticjsruntimemain8bda5920js) - }) - - - route.GET("/static/js/runtime-main.8bda5920.js.map", func(c *gin.Context) { - c.Data(200, "application/json", Staticjsruntimemain8bda5920jsmap) - }) - - - route.GET("/mstile-150x150.png", func(c *gin.Context) { - c.Data(200, "image/png", Mstile150x150png) - }) - - - route.GET("/apple-touch-icon.png", func(c *gin.Context) { - c.Data(200, "image/png", Appletouchiconpng) - }) - - - route.GET("/browserconfig.xml", func(c *gin.Context) { - c.Data(200, "application/xml", Browserconfigxml) - }) - - - route.GET("/favicon-16x16.png", func(c *gin.Context) { - c.Data(200, "image/png", Favicon16x16png) - }) - - - route.GET("/index.html", func(c *gin.Context) { - c.Data(200, "text/html; charset=utf-8", Indexhtml) - }) - - - route.GET("/site.webmanifest", func(c *gin.Context) { - c.Data(200, "application/manifest+json", Sitewebmanifest) - }) - - - route.GET("/static/js/main.156908fe.chunk.js", func(c *gin.Context) { - c.Data(200, "application/javascript", Staticjsmain156908fechunkjs) - }) - - - route.GET("/android-chrome-192x192.png", func(c *gin.Context) { - c.Data(200, "image/png", Androidchrome192x192png) + route.GET("/static/js/main.0ae58375.chunk.js", func(c *gin.Context) { + c.Data(200, "application/javascript", Staticjsmain0ae58375chunkjs) }) } \ No newline at end of file