ps5dbg-scanner 0.2.0__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.
- ps5dbg_scanner-0.2.0/LICENSE +22 -0
- ps5dbg_scanner-0.2.0/PKG-INFO +153 -0
- ps5dbg_scanner-0.2.0/README.md +119 -0
- ps5dbg_scanner-0.2.0/pyproject.toml +51 -0
- ps5dbg_scanner-0.2.0/setup.cfg +4 -0
- ps5dbg_scanner-0.2.0/src/ps5dbg_scanner/__init__.py +11 -0
- ps5dbg_scanner-0.2.0/src/ps5dbg_scanner/__main__.py +9 -0
- ps5dbg_scanner-0.2.0/src/ps5dbg_scanner/app.py +362 -0
- ps5dbg_scanner-0.2.0/src/ps5dbg_scanner/connection_panel.py +96 -0
- ps5dbg_scanner-0.2.0/src/ps5dbg_scanner/freeze_manager.py +125 -0
- ps5dbg_scanner-0.2.0/src/ps5dbg_scanner/results_table.py +260 -0
- ps5dbg_scanner-0.2.0/src/ps5dbg_scanner/scan_panel.py +92 -0
- ps5dbg_scanner-0.2.0/src/ps5dbg_scanner.egg-info/PKG-INFO +153 -0
- ps5dbg_scanner-0.2.0/src/ps5dbg_scanner.egg-info/SOURCES.txt +18 -0
- ps5dbg_scanner-0.2.0/src/ps5dbg_scanner.egg-info/dependency_links.txt +1 -0
- ps5dbg_scanner-0.2.0/src/ps5dbg_scanner.egg-info/entry_points.txt +2 -0
- ps5dbg_scanner-0.2.0/src/ps5dbg_scanner.egg-info/requires.txt +9 -0
- ps5dbg_scanner-0.2.0/src/ps5dbg_scanner.egg-info/top_level.txt +1 -0
- ps5dbg_scanner-0.2.0/tests/test_freeze_manager.py +89 -0
- ps5dbg_scanner-0.2.0/tests/test_imports.py +39 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
GNU GENERAL PUBLIC LICENSE
|
|
2
|
+
Version 3, 29 June 2007
|
|
3
|
+
|
|
4
|
+
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
|
5
|
+
Everyone is permitted to copy and distribute verbatim copies
|
|
6
|
+
of this license document, but changing it is not allowed.
|
|
7
|
+
|
|
8
|
+
ps5dbg-scanner is licensed under GPL-3.0-only, matching the ps5dbg library
|
|
9
|
+
and ps5debug-NG it builds upon.
|
|
10
|
+
|
|
11
|
+
The full text of the GPL-3.0 is available at:
|
|
12
|
+
https://www.gnu.org/licenses/gpl-3.0.txt
|
|
13
|
+
|
|
14
|
+
This program is free software: you can redistribute it and/or modify
|
|
15
|
+
it under the terms of the GNU General Public License as published by
|
|
16
|
+
the Free Software Foundation, either version 3 of the License, or
|
|
17
|
+
(at your option) any later version.
|
|
18
|
+
|
|
19
|
+
This program is distributed in the hope that it will be useful,
|
|
20
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
21
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
22
|
+
GNU General Public License for more details.
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: ps5dbg-scanner
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: Cross-platform 'Cheat Engine for PS5' GUI built on the ps5dbg library.
|
|
5
|
+
Author: Darkatek7
|
|
6
|
+
License: GPL-3.0-only
|
|
7
|
+
Project-URL: Homepage, https://github.com/Darkatek7/ps5dbg-scanner
|
|
8
|
+
Project-URL: Repository, https://github.com/Darkatek7/ps5dbg-scanner
|
|
9
|
+
Project-URL: Issues, https://github.com/Darkatek7/ps5dbg-scanner/issues
|
|
10
|
+
Keywords: ps5,playstation5,ps5debug,memory scanner,cheat engine,homebrew,jailbreak
|
|
11
|
+
Classifier: Development Status :: 3 - Alpha
|
|
12
|
+
Classifier: Intended Audience :: End Users/Desktop
|
|
13
|
+
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
|
|
14
|
+
Classifier: Operating System :: OS Independent
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Topic :: Games/Entertainment
|
|
22
|
+
Classifier: Topic :: Utilities
|
|
23
|
+
Requires-Python: >=3.10
|
|
24
|
+
Description-Content-Type: text/markdown
|
|
25
|
+
License-File: LICENSE
|
|
26
|
+
Requires-Dist: ps5dbg>=0.1.1
|
|
27
|
+
Provides-Extra: dev
|
|
28
|
+
Requires-Dist: pytest>=8; extra == "dev"
|
|
29
|
+
Requires-Dist: ps5dbg[dev]>=0.1.1; extra == "dev"
|
|
30
|
+
Provides-Extra: build
|
|
31
|
+
Requires-Dist: build; extra == "build"
|
|
32
|
+
Requires-Dist: twine; extra == "build"
|
|
33
|
+
Dynamic: license-file
|
|
34
|
+
|
|
35
|
+
# ps5dbg-scanner
|
|
36
|
+
|
|
37
|
+
> A cross-platform **"Cheat Engine for PS5"** built on the [`ps5dbg`](https://github.com/Darkatek7/ps5dbg) library. Scan a game's memory, narrow down to the values you care about, then freeze or edit them — from any OS, no Windows required.
|
|
38
|
+
|
|
39
|
+
[](https://www.python.org/)
|
|
40
|
+
[](./LICENSE)
|
|
41
|
+
[](#roadmap)
|
|
42
|
+
|
|
43
|
+
`ps5dbg-scanner` is a desktop GUI for the classic memory-editor loop:
|
|
44
|
+
|
|
45
|
+
1. **Pick the foreground app** (or any process) on your jailbroken PS5.
|
|
46
|
+
2. **First scan** — find all addresses holding a value (e.g. your current gold = 1000).
|
|
47
|
+
3. **Next scan** — change the value in-game, then narrow the survivor list (now it's 1050 → only addresses that went from 1000 → 1050).
|
|
48
|
+
4. Repeat until you have a handful of candidates, then **freeze** or **edit** the value.
|
|
49
|
+
|
|
50
|
+
It uses ps5debug-NG's **server-resident turbo scan**, so survivors live on the PS5 and narrow scans are fast even when the first scan returns hundreds of thousands of hits.
|
|
51
|
+
|
|
52
|
+
Runs anywhere Python 3.10+ runs (Linux, macOS, Windows) with **no extra runtime dependencies** beyond `ps5dbg` (tkinter ships with Python).
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## Why it exists
|
|
57
|
+
|
|
58
|
+
Every existing PS5 memory scanner is **Windows-only** (`PS_Trainer_Viewer`, the PS4-era `PS4CheaterNeo`). Mac and Linux users have nothing. `ps5dbg-scanner` is the cross-platform answer — built on the [`ps5dbg`](https://pypi.org/project/ps5dbg/) library, which implements the full ps5debug-NG wire protocol.
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Install
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
pip install ps5dbg-scanner
|
|
66
|
+
# or
|
|
67
|
+
pipx install ps5dbg-scanner
|
|
68
|
+
|
|
69
|
+
# then run
|
|
70
|
+
export PS5_HOST=192.168.1.10 # your PS5's LAN IP
|
|
71
|
+
ps5dbg-scanner
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Requires a PS5 running [ps5debug-NG](https://github.com/OpenSourcereR-dev/ps5debug-NG) reachable on your LAN.
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Quick start
|
|
79
|
+
|
|
80
|
+
1. Launch the app: `ps5dbg-scanner`
|
|
81
|
+
2. Enter your PS5's IP, click **Connect**.
|
|
82
|
+
3. Pick the target from the dropdown (the foreground app is marked `▶`).
|
|
83
|
+
4. Choose a **value type** (u32 is the common case for game state) and **scan type**.
|
|
84
|
+
5. Enter the current value, click **First Scan**.
|
|
85
|
+
6. Change the value in-game, enter the new value, click **Next Scan**.
|
|
86
|
+
7. Repeat until the survivor count is small.
|
|
87
|
+
8. Right-click a row → **Freeze** (lock it) or **Edit value**.
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## Features
|
|
92
|
+
|
|
93
|
+
- **Value scan** across u8/u16/u32/u64, i8/i16/i32/i64, float, double.
|
|
94
|
+
- **Scan types**: exact, bigger/smaller, increased/decreased, changed/unchanged, unknown-initial-value.
|
|
95
|
+
- **Server-resident narrow loop** — survivors stay on the PS5; no re-upload per scan.
|
|
96
|
+
- **Virtualized results table** — scrolls smoothly through millions of hits.
|
|
97
|
+
- **Freeze** values at a fixed number (the classic "infinite health" — re-written 10×/sec).
|
|
98
|
+
- **Edit** any survivor's value directly.
|
|
99
|
+
- **Foreground-app detection** — pick the running game with one click.
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## How it works
|
|
104
|
+
|
|
105
|
+
```
|
|
106
|
+
┌─────────────────────────────────────────────┐
|
|
107
|
+
│ tkinter GUI (UI thread only) │
|
|
108
|
+
│ Connection panel Scan panel Results │
|
|
109
|
+
└──────────────────┬──────────────────────────┘
|
|
110
|
+
│ worker threads (blocking I/O off the UI thread)
|
|
111
|
+
▼
|
|
112
|
+
┌─────────────────┐
|
|
113
|
+
│ ps5dbg library │ ← PyPI: pip install ps5dbg
|
|
114
|
+
└────────┬────────┘
|
|
115
|
+
│ TCP wire protocol (port 744)
|
|
116
|
+
▼
|
|
117
|
+
┌─────────────────┐
|
|
118
|
+
│ PS5 (jailed) │
|
|
119
|
+
│ ps5debug-NG │
|
|
120
|
+
└─────────────────┘
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
All blocking network calls run off the UI thread; results are marshaled back via `root.after`. The scan engine uses the turbo-resident path so narrow scans stay fast at scale.
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## Requirements
|
|
128
|
+
|
|
129
|
+
- **Python** 3.10+ (tkinter ships with standard CPython).
|
|
130
|
+
- **ps5dbg** ≥ 0.1.0 (auto-installed as a dependency).
|
|
131
|
+
- **Console** any PS5 running ps5debug-NG with the turbo-scan family advertised.
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## Roadmap
|
|
136
|
+
|
|
137
|
+
- **v0.2** — core scanner: value scan → narrow → freeze/edit (this release, alpha)
|
|
138
|
+
- **v0.3** — hex viewer pane, AOB pattern scanner, bookmark/address-list manager
|
|
139
|
+
- **v0.4** — debugger UI (breakpoints/registers) on top of ps5dbg's `DebugSession`
|
|
140
|
+
|
|
141
|
+
Contributions welcome — see [`AGENTS.md`](./AGENTS.md) for architecture and conventions.
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## Acknowledgments
|
|
146
|
+
|
|
147
|
+
- **[ps5dbg](https://github.com/Darkatek7/ps5dbg)** — the library this is built on.
|
|
148
|
+
- **[OpenSourcereR-dev/ps5debug-NG](https://github.com/OpenSourcereR-dev/ps5debug-NG)** — the debugger payload and wire protocol.
|
|
149
|
+
- **[etaHEN](https://github.com/etaHEN/etaHEN)** — the HEN chain that loads it.
|
|
150
|
+
|
|
151
|
+
## License
|
|
152
|
+
|
|
153
|
+
[GPL-3.0-only](./LICENSE) — matching ps5dbg and ps5debug-NG.
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# ps5dbg-scanner
|
|
2
|
+
|
|
3
|
+
> A cross-platform **"Cheat Engine for PS5"** built on the [`ps5dbg`](https://github.com/Darkatek7/ps5dbg) library. Scan a game's memory, narrow down to the values you care about, then freeze or edit them — from any OS, no Windows required.
|
|
4
|
+
|
|
5
|
+
[](https://www.python.org/)
|
|
6
|
+
[](./LICENSE)
|
|
7
|
+
[](#roadmap)
|
|
8
|
+
|
|
9
|
+
`ps5dbg-scanner` is a desktop GUI for the classic memory-editor loop:
|
|
10
|
+
|
|
11
|
+
1. **Pick the foreground app** (or any process) on your jailbroken PS5.
|
|
12
|
+
2. **First scan** — find all addresses holding a value (e.g. your current gold = 1000).
|
|
13
|
+
3. **Next scan** — change the value in-game, then narrow the survivor list (now it's 1050 → only addresses that went from 1000 → 1050).
|
|
14
|
+
4. Repeat until you have a handful of candidates, then **freeze** or **edit** the value.
|
|
15
|
+
|
|
16
|
+
It uses ps5debug-NG's **server-resident turbo scan**, so survivors live on the PS5 and narrow scans are fast even when the first scan returns hundreds of thousands of hits.
|
|
17
|
+
|
|
18
|
+
Runs anywhere Python 3.10+ runs (Linux, macOS, Windows) with **no extra runtime dependencies** beyond `ps5dbg` (tkinter ships with Python).
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Why it exists
|
|
23
|
+
|
|
24
|
+
Every existing PS5 memory scanner is **Windows-only** (`PS_Trainer_Viewer`, the PS4-era `PS4CheaterNeo`). Mac and Linux users have nothing. `ps5dbg-scanner` is the cross-platform answer — built on the [`ps5dbg`](https://pypi.org/project/ps5dbg/) library, which implements the full ps5debug-NG wire protocol.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Install
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
pip install ps5dbg-scanner
|
|
32
|
+
# or
|
|
33
|
+
pipx install ps5dbg-scanner
|
|
34
|
+
|
|
35
|
+
# then run
|
|
36
|
+
export PS5_HOST=192.168.1.10 # your PS5's LAN IP
|
|
37
|
+
ps5dbg-scanner
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Requires a PS5 running [ps5debug-NG](https://github.com/OpenSourcereR-dev/ps5debug-NG) reachable on your LAN.
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Quick start
|
|
45
|
+
|
|
46
|
+
1. Launch the app: `ps5dbg-scanner`
|
|
47
|
+
2. Enter your PS5's IP, click **Connect**.
|
|
48
|
+
3. Pick the target from the dropdown (the foreground app is marked `▶`).
|
|
49
|
+
4. Choose a **value type** (u32 is the common case for game state) and **scan type**.
|
|
50
|
+
5. Enter the current value, click **First Scan**.
|
|
51
|
+
6. Change the value in-game, enter the new value, click **Next Scan**.
|
|
52
|
+
7. Repeat until the survivor count is small.
|
|
53
|
+
8. Right-click a row → **Freeze** (lock it) or **Edit value**.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Features
|
|
58
|
+
|
|
59
|
+
- **Value scan** across u8/u16/u32/u64, i8/i16/i32/i64, float, double.
|
|
60
|
+
- **Scan types**: exact, bigger/smaller, increased/decreased, changed/unchanged, unknown-initial-value.
|
|
61
|
+
- **Server-resident narrow loop** — survivors stay on the PS5; no re-upload per scan.
|
|
62
|
+
- **Virtualized results table** — scrolls smoothly through millions of hits.
|
|
63
|
+
- **Freeze** values at a fixed number (the classic "infinite health" — re-written 10×/sec).
|
|
64
|
+
- **Edit** any survivor's value directly.
|
|
65
|
+
- **Foreground-app detection** — pick the running game with one click.
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## How it works
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
┌─────────────────────────────────────────────┐
|
|
73
|
+
│ tkinter GUI (UI thread only) │
|
|
74
|
+
│ Connection panel Scan panel Results │
|
|
75
|
+
└──────────────────┬──────────────────────────┘
|
|
76
|
+
│ worker threads (blocking I/O off the UI thread)
|
|
77
|
+
▼
|
|
78
|
+
┌─────────────────┐
|
|
79
|
+
│ ps5dbg library │ ← PyPI: pip install ps5dbg
|
|
80
|
+
└────────┬────────┘
|
|
81
|
+
│ TCP wire protocol (port 744)
|
|
82
|
+
▼
|
|
83
|
+
┌─────────────────┐
|
|
84
|
+
│ PS5 (jailed) │
|
|
85
|
+
│ ps5debug-NG │
|
|
86
|
+
└─────────────────┘
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
All blocking network calls run off the UI thread; results are marshaled back via `root.after`. The scan engine uses the turbo-resident path so narrow scans stay fast at scale.
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## Requirements
|
|
94
|
+
|
|
95
|
+
- **Python** 3.10+ (tkinter ships with standard CPython).
|
|
96
|
+
- **ps5dbg** ≥ 0.1.0 (auto-installed as a dependency).
|
|
97
|
+
- **Console** any PS5 running ps5debug-NG with the turbo-scan family advertised.
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## Roadmap
|
|
102
|
+
|
|
103
|
+
- **v0.2** — core scanner: value scan → narrow → freeze/edit (this release, alpha)
|
|
104
|
+
- **v0.3** — hex viewer pane, AOB pattern scanner, bookmark/address-list manager
|
|
105
|
+
- **v0.4** — debugger UI (breakpoints/registers) on top of ps5dbg's `DebugSession`
|
|
106
|
+
|
|
107
|
+
Contributions welcome — see [`AGENTS.md`](./AGENTS.md) for architecture and conventions.
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## Acknowledgments
|
|
112
|
+
|
|
113
|
+
- **[ps5dbg](https://github.com/Darkatek7/ps5dbg)** — the library this is built on.
|
|
114
|
+
- **[OpenSourcereR-dev/ps5debug-NG](https://github.com/OpenSourcereR-dev/ps5debug-NG)** — the debugger payload and wire protocol.
|
|
115
|
+
- **[etaHEN](https://github.com/etaHEN/etaHEN)** — the HEN chain that loads it.
|
|
116
|
+
|
|
117
|
+
## License
|
|
118
|
+
|
|
119
|
+
[GPL-3.0-only](./LICENSE) — matching ps5dbg and ps5debug-NG.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=68", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "ps5dbg-scanner"
|
|
7
|
+
version = "0.2.0"
|
|
8
|
+
description = "Cross-platform 'Cheat Engine for PS5' GUI built on the ps5dbg library."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.10"
|
|
11
|
+
license = { text = "GPL-3.0-only" }
|
|
12
|
+
authors = [{ name = "Darkatek7" }]
|
|
13
|
+
keywords = ["ps5", "playstation5", "ps5debug", "memory scanner", "cheat engine", "homebrew", "jailbreak"]
|
|
14
|
+
classifiers = [
|
|
15
|
+
"Development Status :: 3 - Alpha",
|
|
16
|
+
"Intended Audience :: End Users/Desktop",
|
|
17
|
+
"License :: OSI Approved :: GNU General Public License v3 (GPLv3)",
|
|
18
|
+
"Operating System :: OS Independent",
|
|
19
|
+
"Programming Language :: Python :: 3",
|
|
20
|
+
"Programming Language :: Python :: 3 :: Only",
|
|
21
|
+
"Programming Language :: Python :: 3.10",
|
|
22
|
+
"Programming Language :: Python :: 3.11",
|
|
23
|
+
"Programming Language :: Python :: 3.12",
|
|
24
|
+
"Programming Language :: Python :: 3.13",
|
|
25
|
+
"Topic :: Games/Entertainment",
|
|
26
|
+
"Topic :: Utilities",
|
|
27
|
+
]
|
|
28
|
+
dependencies = [
|
|
29
|
+
"ps5dbg>=0.1.1",
|
|
30
|
+
]
|
|
31
|
+
|
|
32
|
+
[project.optional-dependencies]
|
|
33
|
+
dev = [
|
|
34
|
+
"pytest>=8",
|
|
35
|
+
"ps5dbg[dev]>=0.1.1",
|
|
36
|
+
]
|
|
37
|
+
build = ["build", "twine"]
|
|
38
|
+
|
|
39
|
+
[project.scripts]
|
|
40
|
+
ps5dbg-scanner = "ps5dbg_scanner.app:main"
|
|
41
|
+
|
|
42
|
+
[project.urls]
|
|
43
|
+
Homepage = "https://github.com/Darkatek7/ps5dbg-scanner"
|
|
44
|
+
Repository = "https://github.com/Darkatek7/ps5dbg-scanner"
|
|
45
|
+
Issues = "https://github.com/Darkatek7/ps5dbg-scanner/issues"
|
|
46
|
+
|
|
47
|
+
[tool.setuptools.packages.find]
|
|
48
|
+
where = ["src"]
|
|
49
|
+
|
|
50
|
+
[tool.pytest.ini_options]
|
|
51
|
+
testpaths = ["tests"]
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"""ps5dbg-scanner — cross-platform 'Cheat Engine for PS5' GUI built on ps5dbg.
|
|
2
|
+
|
|
3
|
+
Run with ``ps5dbg-scanner`` (entry point) or ``python -m ps5dbg_scanner``.
|
|
4
|
+
|
|
5
|
+
from ps5dbg_scanner.app import main
|
|
6
|
+
main()
|
|
7
|
+
"""
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
__version__ = "0.2.0"
|
|
11
|
+
__all__ = ["__version__"]
|