KekikStream 1.1.7__py3-none-any.whl → 1.1.9__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- KekikStream/Core/Plugin/PluginBase.py +10 -4
- KekikStream/Core/Plugin/PluginModels.py +7 -0
- KekikStream/Core/__init__.py +1 -1
- KekikStream/Plugins/Dizilla.py +1 -1
- KekikStream/Plugins/HdFilmCehennemi.py +160 -0
- KekikStream/Plugins/SineWix.py +41 -2
- {KekikStream-1.1.7.dist-info → kekikstream-1.1.9.dist-info}/METADATA +1 -1
- {KekikStream-1.1.7.dist-info → kekikstream-1.1.9.dist-info}/RECORD +12 -11
- {KekikStream-1.1.7.dist-info → kekikstream-1.1.9.dist-info}/WHEEL +1 -1
- {KekikStream-1.1.7.dist-info → kekikstream-1.1.9.dist-info}/LICENSE +0 -0
- {KekikStream-1.1.7.dist-info → kekikstream-1.1.9.dist-info}/entry_points.txt +0 -0
- {KekikStream-1.1.7.dist-info → kekikstream-1.1.9.dist-info}/top_level.txt +0 -0
@@ -3,15 +3,16 @@
|
|
3
3
|
from abc import ABC, abstractmethod
|
4
4
|
from httpx import AsyncClient, Timeout
|
5
5
|
from cloudscraper import CloudScraper
|
6
|
-
from .PluginModels import SearchResult, MovieInfo
|
6
|
+
from .PluginModels import MainPageResult, SearchResult, MovieInfo
|
7
7
|
from ..Media.MediaHandler import MediaHandler
|
8
8
|
from urllib.parse import urljoin
|
9
9
|
import re
|
10
10
|
|
11
11
|
class PluginBase(ABC):
|
12
|
-
name
|
13
|
-
main_url
|
14
|
-
_data
|
12
|
+
name = "Plugin"
|
13
|
+
main_url = "https://example.com"
|
14
|
+
_data = {}
|
15
|
+
_main_page = {}
|
15
16
|
|
16
17
|
def __init__(self):
|
17
18
|
self.oturum = AsyncClient(
|
@@ -26,6 +27,11 @@ class PluginBase(ABC):
|
|
26
27
|
self.oturum.headers.update(self.cloudscraper.headers)
|
27
28
|
self.oturum.cookies.update(self.cloudscraper.cookies)
|
28
29
|
|
30
|
+
@abstractmethod
|
31
|
+
async def main_page(self, page: int, url: str, category: str) -> list[MainPageResult]:
|
32
|
+
"""Ana sayfadaki popüler içerikleri döndürür."""
|
33
|
+
pass
|
34
|
+
|
29
35
|
@abstractmethod
|
30
36
|
async def search(self, query: str) -> list[SearchResult]:
|
31
37
|
"""Kullanıcı arama sorgusuna göre sonuç döndürür."""
|
@@ -3,6 +3,13 @@
|
|
3
3
|
from pydantic import BaseModel, field_validator, model_validator
|
4
4
|
from typing import List, Optional
|
5
5
|
|
6
|
+
class MainPageResult(BaseModel):
|
7
|
+
"""Ana sayfa sonucunda dönecek veri modeli."""
|
8
|
+
category : str
|
9
|
+
title : str
|
10
|
+
url : str
|
11
|
+
poster : Optional[str] = None
|
12
|
+
|
6
13
|
|
7
14
|
class SearchResult(BaseModel):
|
8
15
|
"""Arama sonucunda dönecek veri modeli."""
|
KekikStream/Core/__init__.py
CHANGED
@@ -5,7 +5,7 @@ from .UI.UIManager import UIManager
|
|
5
5
|
from .Plugin.PluginManager import PluginManager
|
6
6
|
from .Plugin.PluginBase import PluginBase
|
7
7
|
from .Plugin.PluginLoader import PluginLoader
|
8
|
-
from .Plugin.PluginModels import SearchResult, MovieInfo, Episode, SeriesInfo
|
8
|
+
from .Plugin.PluginModels import MainPageResult, SearchResult, MovieInfo, Episode, SeriesInfo
|
9
9
|
|
10
10
|
from .Extractor.ExtractorManager import ExtractorManager
|
11
11
|
from .Extractor.ExtractorBase import ExtractorBase
|
KekikStream/Plugins/Dizilla.py
CHANGED
@@ -7,7 +7,7 @@ from urllib.parse import urlparse, urlunparse
|
|
7
7
|
|
8
8
|
class Dizilla(PluginBase):
|
9
9
|
name = "Dizilla"
|
10
|
-
main_url = "https://
|
10
|
+
main_url = "https://dizilla.club"
|
11
11
|
|
12
12
|
async def search(self, query: str) -> list[SearchResult]:
|
13
13
|
ilk_istek = await self.oturum.get(self.main_url)
|
@@ -0,0 +1,160 @@
|
|
1
|
+
# Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
|
2
|
+
|
3
|
+
from KekikStream.Core import PluginBase, SearchResult, MovieInfo, ExtractResult, Subtitle
|
4
|
+
from Kekik.Sifreleme import Packer, HexCodec
|
5
|
+
from parsel import Selector
|
6
|
+
import re, base64, random, string
|
7
|
+
|
8
|
+
class HdFilmCehennemi(PluginBase):
|
9
|
+
name = "HdFilmCehennemi"
|
10
|
+
main_url = "https://www.hdfilmcehennemi.nl"
|
11
|
+
|
12
|
+
|
13
|
+
async def search(self, query: str) -> list[SearchResult]:
|
14
|
+
istek = await self.oturum.get(
|
15
|
+
url = f"{self.main_url}/search?q={query}",
|
16
|
+
headers = {"Referer": f"{self.main_url}/", "X-Requested-With": "fetch", "authority": f"{self.main_url}"}
|
17
|
+
)
|
18
|
+
|
19
|
+
secici = Selector(istek.text)
|
20
|
+
|
21
|
+
results = []
|
22
|
+
for veri in istek.json().get("results"):
|
23
|
+
secici = Selector(veri)
|
24
|
+
title = secici.css("h4.title::text").get()
|
25
|
+
href = secici.css("a::attr(href)").get()
|
26
|
+
poster = secici.css("img::attr(data-src)").get() or secici.css("img::attr(src)").get()
|
27
|
+
|
28
|
+
if title and href:
|
29
|
+
results.append(
|
30
|
+
SearchResult(
|
31
|
+
title = title.strip(),
|
32
|
+
url = self.fix_url(href.strip()),
|
33
|
+
poster = self.fix_url(poster.strip()) if poster else None,
|
34
|
+
)
|
35
|
+
)
|
36
|
+
|
37
|
+
return results
|
38
|
+
|
39
|
+
async def load_item(self, url: str) -> MovieInfo:
|
40
|
+
istek = await self.oturum.get(url, headers = {"Referer": f"{self.main_url}/"})
|
41
|
+
secici = Selector(istek.text)
|
42
|
+
|
43
|
+
title = secici.css("h1.section-title::text").get().strip()
|
44
|
+
poster = secici.css("aside.post-info-poster img.lazyload::attr(data-src)").get().strip()
|
45
|
+
description = secici.css("article.post-info-content > p::text").get().strip()
|
46
|
+
tags = secici.css("div.post-info-genres a::text").getall()
|
47
|
+
rating = secici.css("div.post-info-imdb-rating span::text").get().strip()
|
48
|
+
year = secici.css("div.post-info-year-country a::text").get().strip()
|
49
|
+
actors = secici.css("div.post-info-cast a > strong::text").getall()
|
50
|
+
duration = secici.css("div.post-info-duration::text").get().replace("dakika", "").strip()
|
51
|
+
|
52
|
+
duration_minutes = 0
|
53
|
+
try:
|
54
|
+
duration_minutes = int(duration[2:-1])
|
55
|
+
except Exception as ex:
|
56
|
+
pass
|
57
|
+
|
58
|
+
return MovieInfo(
|
59
|
+
url = url,
|
60
|
+
poster = self.fix_url(poster),
|
61
|
+
title = title,
|
62
|
+
description = description,
|
63
|
+
tags = tags,
|
64
|
+
rating = rating,
|
65
|
+
year = year,
|
66
|
+
actors = actors,
|
67
|
+
duration = duration_minutes
|
68
|
+
)
|
69
|
+
|
70
|
+
def generate_random_cookie(self):
|
71
|
+
return ''.join(random.choices(string.ascii_letters + string.digits, k=16))
|
72
|
+
|
73
|
+
async def load_links(self, url: str) -> list[str]:
|
74
|
+
self._data.clear()
|
75
|
+
|
76
|
+
istek = await self.oturum.get(url)
|
77
|
+
secici = Selector(istek.text)
|
78
|
+
|
79
|
+
lang_code = secici.css("div.alternative-links::attr(data-lang)").get().upper()
|
80
|
+
buttons = secici.css("div.alternative-links > button")
|
81
|
+
|
82
|
+
link_list = []
|
83
|
+
|
84
|
+
for button in buttons:
|
85
|
+
source = button.css("button.alternative-link::text").get().replace("(HDrip Xbet)", "").strip() + " " + lang_code
|
86
|
+
video_id = button.css("button.alternative-link::attr(data-video)").get()
|
87
|
+
|
88
|
+
istek = await self.oturum.get(
|
89
|
+
url = f"{self.main_url}/video/{video_id}/",
|
90
|
+
headers = {"Referer": f"{self.main_url}/",
|
91
|
+
"X-Requested-With": "fetch",
|
92
|
+
"authority": f"{self.main_url}"}
|
93
|
+
)
|
94
|
+
|
95
|
+
data = istek.json().get("data")
|
96
|
+
secici = Selector(data["html"])
|
97
|
+
iframe_url = secici.css("iframe::attr(src)").get() or secici.css("iframe::attr(data-src)").get()
|
98
|
+
|
99
|
+
if "?rapidrame_id=" in iframe_url:
|
100
|
+
# https://hdfilmcehennemi.mobi/video/embed/uQcCR9nhaNz/?rapidrame_id=j4b4kvc0s24l\
|
101
|
+
video_id = iframe_url.split('=')[1]
|
102
|
+
else:
|
103
|
+
# https://www.hdfilmcehennemi.nl/rplayer/j4b4kvc0s24l/
|
104
|
+
video_id = iframe_url.split('/')[-1]
|
105
|
+
|
106
|
+
print(video_id)
|
107
|
+
if(video_id):
|
108
|
+
break
|
109
|
+
|
110
|
+
# selected_quality: low
|
111
|
+
random_cookie = self.generate_random_cookie()
|
112
|
+
istek = await self.oturum.post(
|
113
|
+
url = f"https://cehennempass.pw/process_quality_selection.php",
|
114
|
+
headers = {"Referer": f"https://cehennempass.pw/download/{video_id}",
|
115
|
+
"X-Requested-With": "fetch",
|
116
|
+
"authority": "cehennempass.pw",
|
117
|
+
'Cookie': f'PHPSESSID={random_cookie}'},
|
118
|
+
data = {"video_id": video_id, "selected_quality": "low"},
|
119
|
+
)
|
120
|
+
|
121
|
+
video_url = istek.json().get("download_link")
|
122
|
+
# print(video_url)
|
123
|
+
|
124
|
+
self._data[self.fix_url(video_url)] = {
|
125
|
+
"ext_name" : self.name,
|
126
|
+
"name" : "Düşük Kalite",
|
127
|
+
"referer" : f"https://cehennempass.pw/download/{video_id}",
|
128
|
+
"subtitles" : []
|
129
|
+
}
|
130
|
+
|
131
|
+
# selected_quality: high
|
132
|
+
random_cookie = self.generate_random_cookie()
|
133
|
+
istek = await self.oturum.post(
|
134
|
+
url = f"https://cehennempass.pw/process_quality_selection.php",
|
135
|
+
headers = {"Referer": f"https://cehennempass.pw/download/{video_id}",
|
136
|
+
"X-Requested-With": "fetch",
|
137
|
+
"authority": "cehennempass.pw",
|
138
|
+
'Cookie': f'PHPSESSID={random_cookie}'},
|
139
|
+
data = {"video_id": video_id, "selected_quality": "high"},
|
140
|
+
)
|
141
|
+
|
142
|
+
video_url = istek.json().get("download_link")
|
143
|
+
# print(video_url)
|
144
|
+
|
145
|
+
self._data[self.fix_url(video_url)] = {
|
146
|
+
"ext_name" : self.name,
|
147
|
+
"name" : "Yüksek Kalite",
|
148
|
+
"referer" : f"https://cehennempass.pw/download/{video_id}",
|
149
|
+
"subtitles" : []
|
150
|
+
}
|
151
|
+
|
152
|
+
return list(self._data.keys())
|
153
|
+
|
154
|
+
async def play(self, name: str, url: str, referer: str, subtitles: list[Subtitle]):
|
155
|
+
extract_result = ExtractResult(name=name, url=url, referer=referer, subtitles=subtitles)
|
156
|
+
self.media_handler.title = name
|
157
|
+
if self.name not in self.media_handler.title:
|
158
|
+
self.media_handler.title = f"{self.name} | {self.media_handler.title}"
|
159
|
+
|
160
|
+
self.media_handler.play_media(extract_result)
|
KekikStream/Plugins/SineWix.py
CHANGED
@@ -1,11 +1,50 @@
|
|
1
1
|
# Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
|
2
2
|
|
3
|
-
from KekikStream.Core import PluginBase, SearchResult, MovieInfo, Episode, SeriesInfo, ExtractResult, Subtitle
|
3
|
+
from KekikStream.Core import PluginBase, MainPageResult, SearchResult, MovieInfo, Episode, SeriesInfo, ExtractResult, Subtitle
|
4
4
|
|
5
5
|
class SineWix(PluginBase):
|
6
6
|
name = "SineWix"
|
7
7
|
main_url = "https://ythls.kekikakademi.org"
|
8
8
|
|
9
|
+
_main_page = {
|
10
|
+
f"{main_url}/sinewix/movies" : "Filmler",
|
11
|
+
f"{main_url}/sinewix/series" : "Diziler",
|
12
|
+
f"{main_url}/sinewix/animes" : "Animeler",
|
13
|
+
f"{main_url}/sinewix/movies/10751" : "Aile",
|
14
|
+
f"{main_url}/sinewix/movies/28" : "Aksiyon",
|
15
|
+
f"{main_url}/sinewix/movies/16" : "Animasyon",
|
16
|
+
f"{main_url}/sinewix/movies/99" : "Belgesel",
|
17
|
+
f"{main_url}/sinewix/movies/10765" : "Bilim Kurgu & Fantazi",
|
18
|
+
f"{main_url}/sinewix/movies/878" : "Bilim-Kurgu",
|
19
|
+
f"{main_url}/sinewix/movies/18" : "Dram",
|
20
|
+
f"{main_url}/sinewix/movies/14" : "Fantastik",
|
21
|
+
f"{main_url}/sinewix/movies/53" : "Gerilim",
|
22
|
+
f"{main_url}/sinewix/movies/9648" : "Gizem",
|
23
|
+
f"{main_url}/sinewix/movies/35" : "Komedi",
|
24
|
+
f"{main_url}/sinewix/movies/27" : "Korku",
|
25
|
+
f"{main_url}/sinewix/movies/12" : "Macera",
|
26
|
+
f"{main_url}/sinewix/movies/10402" : "Müzik",
|
27
|
+
f"{main_url}/sinewix/movies/10749" : "Romantik",
|
28
|
+
f"{main_url}/sinewix/movies/10752" : "Savaş",
|
29
|
+
f"{main_url}/sinewix/movies/80" : "Suç",
|
30
|
+
f"{main_url}/sinewix/movies/10770" : "TV film",
|
31
|
+
f"{main_url}/sinewix/movies/36" : "Tarih",
|
32
|
+
}
|
33
|
+
|
34
|
+
async def main_page(self, page: int, url: str, category: str) -> list[MainPageResult]:
|
35
|
+
istek = await self.oturum.get(f"{url}/{page}")
|
36
|
+
veriler = istek.json()
|
37
|
+
|
38
|
+
return [
|
39
|
+
MainPageResult(
|
40
|
+
category = category,
|
41
|
+
title = veri.get("title"),
|
42
|
+
url = f"?type={veri.get('type')}&id={veri.get('id')}",
|
43
|
+
poster = self.fix_url(veri.get("poster_path")),
|
44
|
+
)
|
45
|
+
for veri in veriler.get("data")
|
46
|
+
]
|
47
|
+
|
9
48
|
async def search(self, query: str) -> list[SearchResult]:
|
10
49
|
istek = await self.oturum.get(f"{self.main_url}/sinewix/search/{query}")
|
11
50
|
|
@@ -18,7 +57,7 @@ class SineWix(PluginBase):
|
|
18
57
|
for veri in istek.json().get("search")
|
19
58
|
]
|
20
59
|
|
21
|
-
async def load_item(self, url: str) -> MovieInfo:
|
60
|
+
async def load_item(self, url: str) -> MovieInfo | SeriesInfo:
|
22
61
|
item_type = url.split("?type=")[-1].split("&id=")[0]
|
23
62
|
item_id = url.split("&id=")[-1]
|
24
63
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: KekikStream
|
3
|
-
Version: 1.1.
|
3
|
+
Version: 1.1.9
|
4
4
|
Summary: terminal üzerinden medya içeriği aramanızı ve VLC/MPV gibi popüler medya oynatıcılar aracılığıyla doğrudan izlemenizi sağlayan modüler ve genişletilebilir bir bıdı bıdı
|
5
5
|
Home-page: https://github.com/keyiflerolsun/KekikStream
|
6
6
|
Author: keyiflerolsun
|
@@ -3,17 +3,17 @@ KekikStream/__main__.py,sha256=B81dQoeGEb-T5Sycs3eNAmW7unvx0Mef0syCjs4nPds,137
|
|
3
3
|
KekikStream/requirements.txt,sha256=QWCXrrmKodIm7mGtIz9cWr9sks-lmL_TilKMrruWJn0,77
|
4
4
|
KekikStream/CLI/__init__.py,sha256=U6oLq_O7u5y2eHhBnmfhZNns_EqHHJXJmzl8jvZFUNY,230
|
5
5
|
KekikStream/CLI/pypi_kontrol.py,sha256=MchatOwCWCpFBtgt09yag9Rjal9XFyh2W_oVs2p7SNg,1518
|
6
|
-
KekikStream/Core/__init__.py,sha256=
|
6
|
+
KekikStream/Core/__init__.py,sha256=4ykq-DBlbbfjGAd5m2AZfuljTLBFYkI8DPLxV03AAcA,673
|
7
7
|
KekikStream/Core/Extractor/ExtractorBase.py,sha256=ZyasO5m7iAsnh-mwhtlp-VXkZ4pIuWuHvCIskBX7FUg,1726
|
8
8
|
KekikStream/Core/Extractor/ExtractorLoader.py,sha256=ecrfz9mYizlENCjbyfjdfnOrQorxQTF4ZFGhPpU6JHk,4193
|
9
9
|
KekikStream/Core/Extractor/ExtractorManager.py,sha256=4L1H3jiTnf0kTq4W6uS7n95bBYHlKJ8_hh0og8z4erQ,1244
|
10
10
|
KekikStream/Core/Extractor/ExtractorModels.py,sha256=huIcPQ5VIRfMx0LcL5SS1u4dldZbHjzHKEdSEtOPlc0,456
|
11
11
|
KekikStream/Core/Media/MediaHandler.py,sha256=AJNPTXgxWykfDMyZIyGSjWl3Vp0salT8lKDrfAwaga4,6936
|
12
12
|
KekikStream/Core/Media/MediaManager.py,sha256=9ItiUguOkk3wg3YY5uf3mrjfwLPCvggnP8QviX0uiuE,526
|
13
|
-
KekikStream/Core/Plugin/PluginBase.py,sha256=
|
13
|
+
KekikStream/Core/Plugin/PluginBase.py,sha256=nRAr85DUMx1068a3CS5dIizIXyGh6VtYl6Lx0-zx7VA,2750
|
14
14
|
KekikStream/Core/Plugin/PluginLoader.py,sha256=2UM3gNcEgd7k-FxG-JB5nTIS0K_clzvFtzGjMA_Sx7Q,3379
|
15
15
|
KekikStream/Core/Plugin/PluginManager.py,sha256=CZVg1eegi8vfMfccx0DRV0Box8kXz-aoULTQLgbPbvM,893
|
16
|
-
KekikStream/Core/Plugin/PluginModels.py,sha256=
|
16
|
+
KekikStream/Core/Plugin/PluginModels.py,sha256=ZZJUXbC0G2k0DU7Wpbf0rwjn7spywpiaLIHE7kLajhk,2533
|
17
17
|
KekikStream/Core/UI/UIManager.py,sha256=T4V_kdTTWa-UDamgLSKa__dWJuzcvRK9NuwBlzU9Bzc,1693
|
18
18
|
KekikStream/Extractors/CloseLoad.py,sha256=YmDB3YvuDaCUbQ0T_tmhnkEsC5mSdEN6GNoAR662fl8,990
|
19
19
|
KekikStream/Extractors/ContentX.py,sha256=XPoAuA95LOTgCUGyioXxOFWR0nNKWWOHLkYMlzguIIE,2980
|
@@ -44,18 +44,19 @@ KekikStream/Extractors/VidMoxy.py,sha256=_K6BA7Uo59DA3ty_tsayCUZjXmRoDBTghekVNXi
|
|
44
44
|
KekikStream/Extractors/VideoSeyred.py,sha256=rgS940vHJjrhF-JH4B_8poL2OwmctVyWTzP9I8gdLGI,1980
|
45
45
|
KekikStream/Plugins/DiziBox.py,sha256=zgC1om649DsDZ7x0gJzckWlBu51qtK8W45TWL9arWBc,6095
|
46
46
|
KekikStream/Plugins/DiziYou.py,sha256=2WaQZKa8NlBiuGWu3jUTPslXD2l5ALCAY5qnXwozpes,5669
|
47
|
-
KekikStream/Plugins/Dizilla.py,sha256=
|
47
|
+
KekikStream/Plugins/Dizilla.py,sha256=XYc5zAjLsiEgCNMi6x1XXy8PpV8BHLgEyLitMoq_5a0,4257
|
48
48
|
KekikStream/Plugins/FilmMakinesi.py,sha256=rz8TQeL41PJbeEmksgPHIhp6J-4vbSCBTeEH0ukExz4,2822
|
49
49
|
KekikStream/Plugins/FullHDFilmizlesene.py,sha256=Fa0gRP_NoMfPC8HIKRxERjQVOv8Fyb-ayMJ2EooZ7BE,3080
|
50
|
+
KekikStream/Plugins/HdFilmCehennemi.py,sha256=GR18SCiieTfepY5HKpJOie1xlGQ9bxId_kjeKvrfo8M,6689
|
50
51
|
KekikStream/Plugins/JetFilmizle.py,sha256=v2R4iDm_9VWNO2HTpawvfNElVdOoOF_4iPIquziLvhc,3916
|
51
52
|
KekikStream/Plugins/RecTV.py,sha256=TYpV6T7U8TkkHYB3XK0xqar0pKlULXdztvK4TDc9734,5106
|
52
53
|
KekikStream/Plugins/SezonlukDizi.py,sha256=VUyKAu2SlUCV4uTQfIr2BLLTus2-LOXPFF4rDHG1rs8,4444
|
53
54
|
KekikStream/Plugins/Shorten.py,sha256=kDQGmj7qvfdDyDkU__QGjx-FoGSgCOPxcA3veM2BGPk,8858
|
54
|
-
KekikStream/Plugins/SineWix.py,sha256=
|
55
|
+
KekikStream/Plugins/SineWix.py,sha256=P-5tOX_ySSSs8JbdUL4acIHZkFJDpyl6eMnYM99Eb00,6835
|
55
56
|
KekikStream/Plugins/UgurFilm.py,sha256=rp6M7yjVljVWbGEAC9BB96W1wBsM-PdFbh5tcZ2ZhzI,2930
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
57
|
+
kekikstream-1.1.9.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
58
|
+
kekikstream-1.1.9.dist-info/METADATA,sha256=GHhymNzmXQsEW63Syrv7CSuMgTIH_bGXfufG-1_x5zg,4508
|
59
|
+
kekikstream-1.1.9.dist-info/WHEEL,sha256=nn6H5-ilmfVryoAQl3ZQ2l8SH5imPWFpm1A5FgEuFV4,91
|
60
|
+
kekikstream-1.1.9.dist-info/entry_points.txt,sha256=dFwdiTx8djyehI0Gsz-rZwjAfZzUzoBSrmzRu9ubjJc,50
|
61
|
+
kekikstream-1.1.9.dist-info/top_level.txt,sha256=DNmGJDXl27Drdfobrak8KYLmocW_uznVYFJOzcjUgmY,12
|
62
|
+
kekikstream-1.1.9.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|