GameSentenceMiner 2.12.0.dev1__tar.gz → 2.12.0.dev2__tar.gz
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.
- gamesentenceminer-2.12.0.dev2/GameSentenceMiner/wip/get_overlay_coords.py +95 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner.egg-info/PKG-INFO +1 -1
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner.egg-info/SOURCES.txt +2 -1
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/PKG-INFO +1 -1
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/pyproject.toml +2 -2
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/__init__.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/ai/__init__.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/ai/ai_prompting.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/anki.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/assets/__init__.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/assets/icon.png +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/assets/icon128.png +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/assets/icon256.png +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/assets/icon32.png +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/assets/icon512.png +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/assets/icon64.png +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/assets/pickaxe.png +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/config_gui.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/gametext.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/gsm.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/obs.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/ocr/__init__.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/ocr/gsm_ocr_config.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/ocr/ocrconfig.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/ocr/owocr_area_selector.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/ocr/owocr_helper.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/ocr/ss_picker.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/owocr/owocr/__init__.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/owocr/owocr/__main__.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/owocr/owocr/config.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/owocr/owocr/lens_betterproto.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/owocr/owocr/ocr.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/owocr/owocr/run.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/owocr/owocr/screen_coordinate_picker.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/util/__init__.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/util/audio_offset_selector.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/util/communication/__init__.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/util/communication/send.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/util/communication/websocket.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/util/configuration.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/util/downloader/Untitled_json.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/util/downloader/__init__.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/util/downloader/download_tools.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/util/downloader/oneocr_dl.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/util/electron_config.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/util/ffmpeg.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/util/gsm_utils.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/util/model.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/util/notification.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/util/package.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/util/ss_selector.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/util/text_log.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/util/window_transparency.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/vad.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/web/__init__.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/web/service.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/web/static/__init__.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/web/static/apple-touch-icon.png +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/web/static/favicon-96x96.png +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/web/static/favicon.ico +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/web/static/favicon.svg +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/web/static/site.webmanifest +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/web/static/style.css +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/web/static/web-app-manifest-192x192.png +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/web/static/web-app-manifest-512x512.png +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/web/templates/__init__.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/web/templates/index.html +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/web/templates/text_replacements.html +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/web/templates/utility.html +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/web/texthooking_page.py +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner.egg-info/dependency_links.txt +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner.egg-info/entry_points.txt +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner.egg-info/requires.txt +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner.egg-info/top_level.txt +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/LICENSE +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/README.md +0 -0
- {gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/setup.cfg +0 -0
@@ -0,0 +1,95 @@
|
|
1
|
+
import asyncio
|
2
|
+
import io
|
3
|
+
import base64
|
4
|
+
from PIL import Image
|
5
|
+
import obsws_python as obs
|
6
|
+
|
7
|
+
from GameSentenceMiner.owocr.owocr.ocr import GoogleLens, OneOCR
|
8
|
+
from GameSentenceMiner.obs import *
|
9
|
+
|
10
|
+
# OBS WebSocket settings
|
11
|
+
OBS_HOST = 'localhost'
|
12
|
+
OBS_PORT = 7274
|
13
|
+
OBS_PASSWORD = 'your_obs_websocket_password' # Set your OBS WebSocket password here, if any
|
14
|
+
|
15
|
+
WINDOW_NAME = "Nier:Automata"
|
16
|
+
WIDTH = 2560
|
17
|
+
HEIGHT = 1440
|
18
|
+
oneocr = OneOCR()
|
19
|
+
lens = GoogleLens()
|
20
|
+
|
21
|
+
async def get_full_screenshot() -> Image.Image | None:
|
22
|
+
# print(f"Attempting to connect to OBS WebSocket at ws://{OBS_HOST}:{OBS_PORT}")
|
23
|
+
# try:
|
24
|
+
# client = obs.ReqClient(host=OBS_HOST, port=OBS_PORT, password=OBS_PASSWORD, timeout=30)
|
25
|
+
# print("Connected to OBS WebSocket.")
|
26
|
+
# except Exception as e:
|
27
|
+
# print(f"Failed to connect to OBS: {e}")
|
28
|
+
# return None
|
29
|
+
#
|
30
|
+
# try:
|
31
|
+
# response = client.get_source_screenshot(
|
32
|
+
# name=WINDOW_NAME,
|
33
|
+
# img_format='png',
|
34
|
+
# quality=75,
|
35
|
+
# width=WIDTH,
|
36
|
+
# height=HEIGHT,
|
37
|
+
# )
|
38
|
+
#
|
39
|
+
# if not response.image_data:
|
40
|
+
# print("Failed to get screenshot data from OBS.")
|
41
|
+
# return None
|
42
|
+
|
43
|
+
print("Getting Screenshot from OBS")
|
44
|
+
try:
|
45
|
+
update_current_game()
|
46
|
+
start_time = time.time()
|
47
|
+
image_data = get_screenshot_base64(compression=75, width=1280, height=720)
|
48
|
+
image_data = base64.b64decode(image_data)
|
49
|
+
img = Image.open(io.BytesIO(image_data)).convert("RGBA").resize((WIDTH, HEIGHT), Image.Resampling.LANCZOS)
|
50
|
+
# img.show()
|
51
|
+
print(f"Screenshot captured in {time.time() - start_time:.2f} seconds.")
|
52
|
+
|
53
|
+
return img
|
54
|
+
|
55
|
+
except Exception as e:
|
56
|
+
print(f"An unexpected error occurred during screenshot capture: {e}")
|
57
|
+
return None
|
58
|
+
|
59
|
+
async def find_box_for_sentence(sentence_to_check):
|
60
|
+
# connect_to_obs_sync(5)
|
61
|
+
print("in find_box")
|
62
|
+
# await asyncio.sleep(.5)
|
63
|
+
print("after_initial_sleep")
|
64
|
+
full_screenshot_image = await get_full_screenshot()
|
65
|
+
if full_screenshot_image:
|
66
|
+
print("Full screenshot captured successfully. Now performing local OCR...")
|
67
|
+
ocr_results = lens(full_screenshot_image, return_coords=True)
|
68
|
+
# ocr_results = oneocr(full_screenshot_image, sentence_to_check=sentence_to_check)
|
69
|
+
print("\n--- OCR Results ---")
|
70
|
+
print(ocr_results)
|
71
|
+
|
72
|
+
return ocr_results[2], 48
|
73
|
+
# from PIL import ImageDraw
|
74
|
+
# draw = ImageDraw.Draw(full_screenshot_image)
|
75
|
+
# draw.rectangle([x1, y1, x2, y2], outline="red", width=3)
|
76
|
+
# full_screenshot_image.save("full_screenshot_with_ocr.png")
|
77
|
+
# full_screenshot_image.show()
|
78
|
+
#
|
79
|
+
# print(ocr_results)
|
80
|
+
# if ocr_results:
|
81
|
+
# for i, result in enumerate(ocr_results):
|
82
|
+
# print(f"Result {i + 1}:\n{result}\n")
|
83
|
+
# else:
|
84
|
+
# print("No OCR results found.")
|
85
|
+
else:
|
86
|
+
print("Failed to get full screenshot for OCR.")
|
87
|
+
|
88
|
+
async def main():
|
89
|
+
await find_box_for_sentence("はじめから")
|
90
|
+
|
91
|
+
if __name__ == '__main__':
|
92
|
+
try:
|
93
|
+
asyncio.run(main())
|
94
|
+
except KeyboardInterrupt:
|
95
|
+
print("Script terminated by user.")
|
@@ -71,4 +71,5 @@ GameSentenceMiner/web/static/web-app-manifest-512x512.png
|
|
71
71
|
GameSentenceMiner/web/templates/__init__.py
|
72
72
|
GameSentenceMiner/web/templates/index.html
|
73
73
|
GameSentenceMiner/web/templates/text_replacements.html
|
74
|
-
GameSentenceMiner/web/templates/utility.html
|
74
|
+
GameSentenceMiner/web/templates/utility.html
|
75
|
+
GameSentenceMiner/wip/get_overlay_coords.py
|
@@ -7,7 +7,7 @@ build-backend = "setuptools.build_meta"
|
|
7
7
|
|
8
8
|
[project]
|
9
9
|
name = "GameSentenceMiner"
|
10
|
-
version = "2.12.0-
|
10
|
+
version = "2.12.0-dev2"
|
11
11
|
description = "A tool for mining sentences from games. Update: Overlay?"
|
12
12
|
readme = "README.md"
|
13
13
|
requires-python = ">=3.10"
|
@@ -58,7 +58,7 @@ dependencies = [
|
|
58
58
|
gamesentenceminer = "GameSentenceMiner.gsm:main"
|
59
59
|
|
60
60
|
[tool.setuptools]
|
61
|
-
packages = ["GameSentenceMiner", "GameSentenceMiner.util", 'GameSentenceMiner.util.downloader', "GameSentenceMiner.util.communication", "GameSentenceMiner.ai", "GameSentenceMiner.ocr", "GameSentenceMiner.owocr.owocr", "GameSentenceMiner.web", "GameSentenceMiner.web.static", "GameSentenceMiner.web.templates"]
|
61
|
+
packages = ["GameSentenceMiner", "GameSentenceMiner.util", 'GameSentenceMiner.util.downloader', "GameSentenceMiner.util.communication", "GameSentenceMiner.ai", "GameSentenceMiner.ocr", "GameSentenceMiner.owocr.owocr", "GameSentenceMiner.web", "GameSentenceMiner.web.static", "GameSentenceMiner.web.templates", "GameSentenceMiner.wip"]
|
62
62
|
|
63
63
|
[tool.setuptools.package-data]
|
64
64
|
"GameSentenceMiner.web" = ["static/*", "templates/*"]
|
{gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/__init__.py
RENAMED
File without changes
|
{gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/ai/__init__.py
RENAMED
File without changes
|
{gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/ai/ai_prompting.py
RENAMED
File without changes
|
File without changes
|
{gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/assets/__init__.py
RENAMED
File without changes
|
{gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/assets/icon.png
RENAMED
File without changes
|
{gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/assets/icon128.png
RENAMED
File without changes
|
{gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/assets/icon256.png
RENAMED
File without changes
|
{gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/assets/icon32.png
RENAMED
File without changes
|
{gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/assets/icon512.png
RENAMED
File without changes
|
{gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/assets/icon64.png
RENAMED
File without changes
|
{gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/assets/pickaxe.png
RENAMED
File without changes
|
{gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/config_gui.py
RENAMED
File without changes
|
{gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/gametext.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/ocr/__init__.py
RENAMED
File without changes
|
File without changes
|
{gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/ocr/ocrconfig.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/ocr/ss_picker.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/owocr/owocr/ocr.py
RENAMED
File without changes
|
{gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/owocr/owocr/run.py
RENAMED
File without changes
|
File without changes
|
{gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/util/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/util/ffmpeg.py
RENAMED
File without changes
|
{gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/util/gsm_utils.py
RENAMED
File without changes
|
{gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/util/model.py
RENAMED
File without changes
|
File without changes
|
{gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/util/package.py
RENAMED
File without changes
|
File without changes
|
{gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/util/text_log.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/web/__init__.py
RENAMED
File without changes
|
{gamesentenceminer-2.12.0.dev1 → gamesentenceminer-2.12.0.dev2}/GameSentenceMiner/web/service.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|