pyboy 2.5.1__tar.gz → 2.5.2__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.
Files changed (116) hide show
  1. {pyboy-2.5.1/pyboy.egg-info → pyboy-2.5.2}/PKG-INFO +3 -2
  2. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/__main__.py +1 -1
  3. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/core/cartridge/rtc.py +4 -4
  4. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/logging/__init__.py +1 -1
  5. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/plugins/debug.py +6 -6
  6. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/plugins/game_wrapper_kirby_dream_land.py +1 -0
  7. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/plugins/game_wrapper_pokemon_pinball.py +1 -1
  8. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/plugins/window_sdl2.py +7 -5
  9. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/pyboy.py +1 -1
  10. {pyboy-2.5.1 → pyboy-2.5.2/pyboy.egg-info}/PKG-INFO +3 -2
  11. {pyboy-2.5.1 → pyboy-2.5.2}/pyproject.toml +1 -1
  12. {pyboy-2.5.1 → pyboy-2.5.2}/LICENSE.md +0 -0
  13. {pyboy-2.5.1 → pyboy-2.5.2}/MANIFEST.in +0 -0
  14. {pyboy-2.5.1 → pyboy-2.5.2}/README.md +0 -0
  15. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/__init__.py +0 -0
  16. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/api/__init__.py +0 -0
  17. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/api/constants.py +0 -0
  18. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/api/gameshark.pxd +0 -0
  19. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/api/gameshark.py +0 -0
  20. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/api/memory_scanner.pxd +0 -0
  21. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/api/memory_scanner.py +0 -0
  22. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/api/screen.pxd +0 -0
  23. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/api/screen.py +0 -0
  24. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/api/sound.pxd +0 -0
  25. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/api/sound.py +0 -0
  26. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/api/sprite.pxd +0 -0
  27. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/api/sprite.py +0 -0
  28. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/api/tile.pxd +0 -0
  29. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/api/tile.py +0 -0
  30. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/api/tilemap.pxd +0 -0
  31. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/api/tilemap.py +0 -0
  32. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/conftest.py +0 -0
  33. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/core/__init__.py +0 -0
  34. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/core/bootrom.pxd +0 -0
  35. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/core/bootrom.py +0 -0
  36. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/core/bootrom_cgb.bin +0 -0
  37. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/core/bootrom_dmg.bin +0 -0
  38. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/core/cartridge/__init__.py +0 -0
  39. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/core/cartridge/base_mbc.pxd +0 -0
  40. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/core/cartridge/base_mbc.py +0 -0
  41. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/core/cartridge/cartridge.pxd +0 -0
  42. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/core/cartridge/cartridge.py +0 -0
  43. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/core/cartridge/mbc1.pxd +0 -0
  44. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/core/cartridge/mbc1.py +0 -0
  45. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/core/cartridge/mbc2.pxd +0 -0
  46. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/core/cartridge/mbc2.py +0 -0
  47. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/core/cartridge/mbc3.pxd +0 -0
  48. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/core/cartridge/mbc3.py +0 -0
  49. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/core/cartridge/mbc5.pxd +0 -0
  50. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/core/cartridge/mbc5.py +0 -0
  51. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/core/cartridge/rtc.pxd +0 -0
  52. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/core/cpu.pxd +0 -0
  53. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/core/cpu.py +0 -0
  54. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/core/interaction.pxd +0 -0
  55. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/core/interaction.py +0 -0
  56. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/core/lcd.pxd +0 -0
  57. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/core/lcd.py +0 -0
  58. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/core/mb.pxd +0 -0
  59. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/core/mb.py +0 -0
  60. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/core/opcodes.pxd +0 -0
  61. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/core/opcodes.py +0 -0
  62. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/core/opcodes_gen.py +0 -0
  63. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/core/ram.pxd +0 -0
  64. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/core/ram.py +0 -0
  65. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/core/sound.pxd +0 -0
  66. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/core/sound.py +0 -0
  67. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/core/timer.pxd +0 -0
  68. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/core/timer.py +0 -0
  69. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/default_rom.gb +0 -0
  70. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/logging/_logging.py +0 -0
  71. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/logging/logging.pxd +0 -0
  72. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/logging/logging.pyx +0 -0
  73. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/plugins/__init__.py +0 -0
  74. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/plugins/auto_pause.pxd +0 -0
  75. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/plugins/auto_pause.py +0 -0
  76. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/plugins/base_plugin.pxd +0 -0
  77. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/plugins/base_plugin.py +0 -0
  78. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/plugins/debug.pxd +0 -0
  79. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/plugins/debug_prompt.pxd +0 -0
  80. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/plugins/debug_prompt.py +0 -0
  81. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/plugins/font.txt +0 -0
  82. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/plugins/game_wrapper_kirby_dream_land.pxd +0 -0
  83. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/plugins/game_wrapper_pokemon_gen1.pxd +0 -0
  84. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/plugins/game_wrapper_pokemon_gen1.py +0 -0
  85. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/plugins/game_wrapper_pokemon_pinball.pxd +0 -0
  86. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/plugins/game_wrapper_super_mario_land.pxd +0 -0
  87. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/plugins/game_wrapper_super_mario_land.py +0 -0
  88. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/plugins/game_wrapper_tetris.pxd +0 -0
  89. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/plugins/game_wrapper_tetris.py +0 -0
  90. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/plugins/manager.pxd +0 -0
  91. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/plugins/manager.py +0 -0
  92. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/plugins/manager_gen.py +0 -0
  93. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/plugins/record_replay.pxd +0 -0
  94. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/plugins/record_replay.py +0 -0
  95. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/plugins/rewind.pxd +0 -0
  96. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/plugins/rewind.py +0 -0
  97. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/plugins/screen_recorder.pxd +0 -0
  98. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/plugins/screen_recorder.py +0 -0
  99. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/plugins/screenshot_recorder.pxd +0 -0
  100. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/plugins/screenshot_recorder.py +0 -0
  101. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/plugins/window_null.pxd +0 -0
  102. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/plugins/window_null.py +0 -0
  103. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/plugins/window_open_gl.pxd +0 -0
  104. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/plugins/window_open_gl.py +0 -0
  105. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/plugins/window_sdl2.pxd +0 -0
  106. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/pyboy.pxd +0 -0
  107. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/utils.pxd +0 -0
  108. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy/utils.py +0 -0
  109. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy.egg-info/SOURCES.txt +0 -0
  110. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy.egg-info/dependency_links.txt +0 -0
  111. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy.egg-info/entry_points.txt +0 -0
  112. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy.egg-info/not-zip-safe +0 -0
  113. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy.egg-info/requires.txt +0 -0
  114. {pyboy-2.5.1 → pyboy-2.5.2}/pyboy.egg-info/top_level.txt +0 -0
  115. {pyboy-2.5.1 → pyboy-2.5.2}/setup.cfg +0 -0
  116. {pyboy-2.5.1 → pyboy-2.5.2}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: pyboy
3
- Version: 2.5.1
3
+ Version: 2.5.2
4
4
  Summary: Game Boy emulator written in Python
5
5
  Author-email: Mads Ynddal <mads@ynddal.dk>
6
6
  License: GNU Lesser General Public License
@@ -188,6 +188,7 @@ Requires-Dist: pyopengl; extra == "all"
188
188
  Requires-Dist: markdown; extra == "all"
189
189
  Requires-Dist: pdoc3; extra == "all"
190
190
  Requires-Dist: gym; extra == "all"
191
+ Dynamic: license-file
191
192
 
192
193
  <p align="center">
193
194
  <img src="extras/README/pyboy.svg" width="480">
@@ -136,7 +136,7 @@ sound_parser.add_argument(
136
136
  action="store_const",
137
137
  const=100,
138
138
  dest="sound_volume",
139
- help="Deprecated setting. Now sets sound volume to 100%. See '--sound-volume'",
139
+ help="Deprecated setting. Now sets sound volume to 100%%. See '--sound-volume'",
140
140
  )
141
141
  sound_parser.add_argument(
142
142
  "--sound-volume",
@@ -78,7 +78,7 @@ class RTC:
78
78
  self.latch_rtc()
79
79
  self.latch_enabled = True
80
80
  else:
81
- logger.warning("Invalid RTC command: %0.2x", value)
81
+ logger.debug("Invalid RTC command: %0.2x", value)
82
82
 
83
83
  def getregister(self, register):
84
84
  if not self.latch_enabled:
@@ -98,7 +98,7 @@ class RTC:
98
98
  day_carry = self.day_carry << 7
99
99
  return day_high + halt + day_carry
100
100
  else:
101
- logger.warning("Invalid RTC register: %0.4x", register)
101
+ logger.debug("Invalid RTC register: %0.4x", register)
102
102
 
103
103
  def setregister(self, register, value):
104
104
  if not self.latch_enabled:
@@ -126,9 +126,9 @@ class RTC:
126
126
  if self.halt == 0:
127
127
  pass # TODO: Start the timer
128
128
  else:
129
- logger.warning("Stopping RTC is not implemented!")
129
+ logger.debug("Stopping RTC is not implemented!")
130
130
 
131
131
  self.timezero = self.timezero - (t // 3600 // 24) - (day_high << 8)
132
132
  self.day_carry = day_carry
133
133
  else:
134
- logger.warning("Invalid RTC register: %0.4x %0.2x", register, value)
134
+ logger.debug("Invalid RTC register: %0.4x %0.2x", register, value)
@@ -6,7 +6,7 @@
6
6
  CRITICAL,
7
7
  ) = range(5)
8
8
 
9
- _log_level = ERROR
9
+ _log_level = WARNING
10
10
 
11
11
 
12
12
  def get_log_level():
@@ -14,7 +14,7 @@ from pyboy.api import Sprite, constants
14
14
  from pyboy.api.tilemap import TileMap
15
15
  from pyboy.plugins.base_plugin import PyBoyWindowPlugin
16
16
  from pyboy.plugins.window_sdl2 import sdl2_event_pump
17
- from pyboy.utils import WindowEvent
17
+ from pyboy.utils import WindowEvent, PyBoyAssertException
18
18
 
19
19
  try:
20
20
  import sdl2
@@ -78,8 +78,8 @@ class Debug(PyBoyWindowPlugin):
78
78
  return
79
79
 
80
80
  self.sdl2_event_pump = self.pyboy_argv.get("window") != "SDL2"
81
- if self.sdl2_event_pump:
82
- sdl2.SDL_Init(sdl2.SDL_INIT_VIDEO)
81
+ if self.sdl2_event_pump and sdl2.SDL_InitSubSystem(sdl2.SDL_INIT_VIDEO) < 0:
82
+ raise PyBoyAssertException(f"SDL_InitSubSystem video failed: {sdl2.SDL_GetError().decode()}")
83
83
 
84
84
  # self.scale = 2
85
85
  window_pos = 0
@@ -210,7 +210,7 @@ class Debug(PyBoyWindowPlugin):
210
210
  for _ in range(3): # At least 2 to close
211
211
  get_events()
212
212
  time.sleep(0.1)
213
- sdl2.SDL_Quit()
213
+ sdl2.SDL_QuitSubSystem(sdl2.SDL_INIT_VIDEO)
214
214
 
215
215
  def enabled(self):
216
216
  if self.pyboy_argv.get("debug"):
@@ -742,11 +742,11 @@ class MemoryWindow(BaseDebugWindow):
742
742
  self.dst.y = y
743
743
  for i, c in enumerate(text):
744
744
  if not 0 <= c < 256:
745
- logger.warning(f"Invalid character {c} in {bytes(text).decode('cp437')}") # This may error too...
745
+ logger.debug(f"Invalid character {c} in {bytes(text).decode('cp437')}") # This may error too...
746
746
  c = 0
747
747
  self.src.y = 16 * c
748
748
  if self.dst.x > self.width - 8:
749
- logger.warning(f"Text overrun while printing {bytes(text).decode('cp437')}")
749
+ logger.debug(f"Text overrun while printing {bytes(text).decode('cp437')}")
750
750
  break
751
751
  sdl2.SDL_RenderCopy(self._sdlrenderer, self.font_texture, self.src, self.dst)
752
752
  self.dst.x += 8
@@ -98,6 +98,7 @@ class GameWrapperKirbyDreamLand(PyBoyGameWrapper):
98
98
  Kwargs:
99
99
  * timer_div (int): Replace timer's DIV register with this value. Use `None` to randomize.
100
100
  """
101
+ self._game_over = False
101
102
  PyBoyGameWrapper.reset_game(self, timer_div=timer_div)
102
103
 
103
104
  def game_area(self):
@@ -228,7 +228,7 @@ class BallType(Enum):
228
228
  POKEBALL = 0
229
229
  GREATBALL = 2
230
230
  ULTRABALL = 3
231
- MASTERBALL = 4
231
+ MASTERBALL = 5
232
232
 
233
233
 
234
234
  class BallSize(Enum):
@@ -8,7 +8,7 @@ import time
8
8
  from ctypes import POINTER, c_ubyte, c_void_p, cast
9
9
 
10
10
  from pyboy.plugins.base_plugin import PyBoyWindowPlugin
11
- from pyboy.utils import WindowEvent, WindowEventMouse, cython_compiled
11
+ from pyboy.utils import WindowEvent, WindowEventMouse, cython_compiled, PyBoyAssertException
12
12
 
13
13
  try:
14
14
  import sdl2
@@ -162,7 +162,9 @@ class WindowSDL2(PyBoyWindowPlugin):
162
162
 
163
163
  if not self.enabled():
164
164
  return
165
- assert sdl2.SDL_Init(sdl2.SDL_INIT_VIDEO | sdl2.SDL_INIT_GAMECONTROLLER) >= 0
165
+
166
+ if sdl2.SDL_InitSubSystem(sdl2.SDL_INIT_VIDEO | sdl2.SDL_INIT_GAMECONTROLLER) < 0:
167
+ raise PyBoyAssertException("SDL_InitSubSystem video failed: %s", sdl2.SDL_GetError().decode())
166
168
 
167
169
  self._window = sdl2.SDL_CreateWindow(
168
170
  b"PyBoy",
@@ -188,7 +190,7 @@ class WindowSDL2(PyBoyWindowPlugin):
188
190
 
189
191
  def init_audio(self, mb):
190
192
  if mb.sound.emulate:
191
- if sdl2.SDL_Init(sdl2.SDL_INIT_AUDIO) >= 0:
193
+ if sdl2.SDL_InitSubSystem(sdl2.SDL_INIT_AUDIO) >= 0:
192
194
  # NOTE: We have to keep spec variables alive to avoid segfault
193
195
  self.spec_want = sdl2.SDL_AudioSpec(self.mb.sound.sample_rate, sdl2.AUDIO_S8, 2, 128)
194
196
  self.spec_have = sdl2.SDL_AudioSpec(0, 0, 0, 0)
@@ -217,7 +219,7 @@ class WindowSDL2(PyBoyWindowPlugin):
217
219
  logger.warning("SDL_OpenAudioDevice failed: %s", sdl2.SDL_GetError().decode())
218
220
  else:
219
221
  self.sound_support = False
220
- logger.warning("SDL_Init audio failed: %s", sdl2.SDL_GetError().decode())
222
+ logger.warning("SDL_InitSubSystem audio failed: %s", sdl2.SDL_GetError().decode())
221
223
  else:
222
224
  self.sound_support = False
223
225
 
@@ -303,4 +305,4 @@ class WindowSDL2(PyBoyWindowPlugin):
303
305
  for _ in range(3): # At least 2 to close
304
306
  get_events()
305
307
  time.sleep(0.1)
306
- sdl2.SDL_Quit()
308
+ sdl2.SDL_QuitSubSystem(sdl2.SDL_INIT_VIDEO | sdl2.SDL_INIT_GAMECONTROLLER)
@@ -67,7 +67,7 @@ defaults = {
67
67
  ),
68
68
  "scale": 3,
69
69
  "window": "SDL2",
70
- "log_level": "ERROR",
70
+ "log_level": "WARNING",
71
71
  }
72
72
 
73
73
 
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: pyboy
3
- Version: 2.5.1
3
+ Version: 2.5.2
4
4
  Summary: Game Boy emulator written in Python
5
5
  Author-email: Mads Ynddal <mads@ynddal.dk>
6
6
  License: GNU Lesser General Public License
@@ -188,6 +188,7 @@ Requires-Dist: pyopengl; extra == "all"
188
188
  Requires-Dist: markdown; extra == "all"
189
189
  Requires-Dist: pdoc3; extra == "all"
190
190
  Requires-Dist: gym; extra == "all"
191
+ Dynamic: license-file
191
192
 
192
193
  <p align="center">
193
194
  <img src="extras/README/pyboy.svg" width="480">
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "pyboy"
3
- version = "2.5.1"
3
+ version = "2.5.2"
4
4
  authors = [
5
5
  {name = "Mads Ynddal", email = "mads@ynddal.dk"}
6
6
  ]
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
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
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