denonavr 1.1.2__py3-none-any.whl → 1.3.0__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.
denonavr/volume.py CHANGED
@@ -16,14 +16,14 @@ import attr
16
16
  from .appcommand import AppCommands
17
17
  from .const import (
18
18
  CHANNEL_MAP,
19
- CHANNEL_MAP_LABELS,
19
+ CHANNEL_MAP_REVERSE,
20
20
  CHANNEL_VOLUME_MAP,
21
- CHANNEL_VOLUME_MAP_LABELS,
21
+ CHANNEL_VOLUME_MAP_REVERSE,
22
22
  DENON_ATTR_SETATTR,
23
23
  MAIN_ZONE,
24
24
  STATE_ON,
25
25
  SUBWOOFERS_MAP,
26
- SUBWOOFERS_MAP_LABELS,
26
+ SUBWOOFERS_MAP_REVERSE,
27
27
  Channels,
28
28
  Subwoofers,
29
29
  )
@@ -82,25 +82,17 @@ class DenonAVRVolume(DenonAVRFoundation):
82
82
  for tag in self.appcommand_attrs:
83
83
  self._device.api.add_appcommand_update_tag(tag)
84
84
 
85
- self._device.telnet_api.register_callback("MV", self._async_volume_callback)
86
- self._device.telnet_api.register_callback("MU", self._async_mute_callback)
87
- self._device.telnet_api.register_callback(
88
- "CV", self._async_channel_volume_callback
89
- )
90
- self._device.telnet_api.register_callback(
91
- "PS", self._async_subwoofer_state_callback
92
- )
93
- self._device.telnet_api.register_callback(
94
- "PS", self._async_subwoofer_levels_callback
95
- )
96
- self._device.telnet_api.register_callback("PS", self._async_lfe_callback)
97
- self._device.telnet_api.register_callback("PS", self._async_bass_sync_callback)
85
+ self._device.telnet_api.register_callback("MV", self._volume_callback)
86
+ self._device.telnet_api.register_callback("MU", self._mute_callback)
87
+ self._device.telnet_api.register_callback("CV", self._channel_volume_callback)
88
+ self._device.telnet_api.register_callback("PS", self._subwoofer_state_callback)
89
+ self._device.telnet_api.register_callback("PS", self._subwoofer_levels_callback)
90
+ self._device.telnet_api.register_callback("PS", self._lfe_callback)
91
+ self._device.telnet_api.register_callback("PS", self._bass_sync_callback)
98
92
 
99
93
  self._is_setup = True
100
94
 
101
- async def _async_volume_callback(
102
- self, zone: str, event: str, parameter: str
103
- ) -> None:
95
+ def _volume_callback(self, zone: str, event: str, parameter: str) -> None:
104
96
  """Handle a volume change event."""
105
97
  if self._device.zone != zone:
106
98
  return
@@ -112,16 +104,14 @@ class DenonAVRVolume(DenonAVRFoundation):
112
104
  fraction = 0.1 * float(parameter[2])
113
105
  self._volume = -80.0 + whole_number + fraction
114
106
 
115
- async def _async_mute_callback(self, zone: str, event: str, parameter: str) -> None:
107
+ def _mute_callback(self, zone: str, event: str, parameter: str) -> None:
116
108
  """Handle a muting change event."""
117
109
  if self._device.zone != zone:
118
110
  return
119
111
 
120
112
  self._muted = parameter
121
113
 
122
- async def _async_channel_volume_callback(
123
- self, zone: str, event: str, parameter: str
124
- ) -> None:
114
+ def _channel_volume_callback(self, zone: str, event: str, parameter: str) -> None:
125
115
  """Handle a channel volume change event."""
126
116
  if event != "CV":
127
117
  return
@@ -129,7 +119,7 @@ class DenonAVRVolume(DenonAVRFoundation):
129
119
  channel_volume = parameter.split()
130
120
  if (
131
121
  len(channel_volume) != 2
132
- or channel_volume[0] not in CHANNEL_MAP_LABELS
122
+ or channel_volume[0] not in CHANNEL_MAP
133
123
  or channel_volume[1] not in CHANNEL_VOLUME_MAP
134
124
  ):
135
125
  return
@@ -137,35 +127,28 @@ class DenonAVRVolume(DenonAVRFoundation):
137
127
  if self._channel_volumes is None:
138
128
  self._channel_volumes = {}
139
129
 
140
- channel = CHANNEL_MAP_LABELS[channel_volume[0]]
130
+ channel = CHANNEL_MAP[channel_volume[0]]
141
131
  volume = channel_volume[1]
142
132
  self._channel_volumes[channel] = CHANNEL_VOLUME_MAP[volume]
143
133
 
144
- async def _async_subwoofer_state_callback(
145
- self, zone: str, event: str, parameter: str
146
- ) -> None:
134
+ def _subwoofer_state_callback(self, zone: str, event: str, parameter: str) -> None:
147
135
  """Handle a subwoofer state change event."""
148
136
  if parameter[:3] == "SWR":
149
137
  self._subwoofer = parameter[4:]
150
138
 
151
- async def _async_subwoofer_levels_callback(
152
- self, zone: str, event: str, parameter: str
153
- ) -> None:
139
+ def _subwoofer_levels_callback(self, zone: str, event: str, parameter: str) -> None:
154
140
  """Handle a subwoofer levels change event."""
155
141
  if parameter[:3] != "SWL":
156
142
  return
157
143
 
158
144
  subwoofer_volume = parameter.split()
159
- if (
160
- len(subwoofer_volume) != 2
161
- or subwoofer_volume[0] not in SUBWOOFERS_MAP_LABELS
162
- ):
145
+ if len(subwoofer_volume) != 2 or subwoofer_volume[0] not in SUBWOOFERS_MAP:
163
146
  return
164
147
 
165
148
  if self._subwoofer_levels is None:
166
149
  self._subwoofer_levels = {}
167
150
 
168
- subwoofer = SUBWOOFERS_MAP_LABELS[subwoofer_volume[0]]
151
+ subwoofer = SUBWOOFERS_MAP[subwoofer_volume[0]]
169
152
  level = subwoofer_volume[1]
170
153
  val = convert_on_off_bool(level)
171
154
  if val is not None:
@@ -173,16 +156,14 @@ class DenonAVRVolume(DenonAVRFoundation):
173
156
  elif level in CHANNEL_VOLUME_MAP:
174
157
  self._subwoofer_levels[subwoofer] = CHANNEL_VOLUME_MAP[level]
175
158
 
176
- async def _async_lfe_callback(self, zone: str, event: str, parameter: str) -> None:
159
+ def _lfe_callback(self, zone: str, event: str, parameter: str) -> None:
177
160
  """Handle a LFE change event."""
178
161
  if parameter[:3] != "LFE":
179
162
  return
180
163
 
181
164
  self._lfe = int(parameter[4:]) * -1
182
165
 
183
- async def _async_bass_sync_callback(
184
- self, zone: str, event: str, parameter: str
185
- ) -> None:
166
+ def _bass_sync_callback(self, zone: str, event: str, parameter: str) -> None:
186
167
  """Handle a LFE change event."""
187
168
  if parameter[:3] != "BSC":
188
169
  return
@@ -322,7 +303,7 @@ class DenonAVRVolume(DenonAVRFoundation):
322
303
  # Setter #
323
304
  ##########
324
305
  async def async_volume_up(self) -> None:
325
- """Volume up receiver via HTTP get command."""
306
+ """Volume up receiver."""
326
307
  if self._device.telnet_available:
327
308
  await self._device.telnet_api.async_send_commands(
328
309
  self._device.telnet_commands.command_volume_up, skip_confirmation=True
@@ -333,7 +314,7 @@ class DenonAVRVolume(DenonAVRFoundation):
333
314
  )
334
315
 
335
316
  async def async_volume_down(self) -> None:
336
- """Volume down receiver via HTTP get command."""
317
+ """Volume down receiver."""
337
318
  if self._device.telnet_available:
338
319
  await self._device.telnet_api.async_send_commands(
339
320
  self._device.telnet_commands.command_volume_down, skip_confirmation=True
@@ -345,7 +326,7 @@ class DenonAVRVolume(DenonAVRFoundation):
345
326
 
346
327
  async def async_set_volume(self, volume: float) -> None:
347
328
  """
348
- Set receiver volume via HTTP get command.
329
+ Set receiver volume.
349
330
 
350
331
  Volume is send in a format like -50.0.
351
332
  Minimum is -80.0, maximum at 18.0
@@ -367,7 +348,7 @@ class DenonAVRVolume(DenonAVRFoundation):
367
348
  )
368
349
 
369
350
  async def async_mute(self, mute: bool) -> None:
370
- """Mute receiver via HTTP get command."""
351
+ """Mute receiver."""
371
352
  if mute:
372
353
  if self._device.telnet_available:
373
354
  await self._device.telnet_api.async_send_commands(
@@ -388,10 +369,10 @@ class DenonAVRVolume(DenonAVRFoundation):
388
369
  )
389
370
 
390
371
  async def async_channel_volume_up(self, channel: Channels) -> None:
391
- """Increase Channel volume on receiver via HTTP get command."""
372
+ """Increase Channel volume on receiver."""
392
373
  self._is_valid_channel(channel)
393
374
 
394
- mapped_channel = CHANNEL_MAP[channel]
375
+ mapped_channel = CHANNEL_MAP_REVERSE[channel]
395
376
  if self._device.telnet_available:
396
377
  await self._device.telnet_api.async_send_commands(
397
378
  self._device.telnet_commands.command_channel_volume.format(
@@ -406,10 +387,10 @@ class DenonAVRVolume(DenonAVRFoundation):
406
387
  )
407
388
 
408
389
  async def async_channel_volume_down(self, channel: Channels) -> None:
409
- """Decrease Channel volume on receiver via HTTP get command."""
390
+ """Decrease Channel volume on receiver."""
410
391
  self._is_valid_channel(channel)
411
392
 
412
- mapped_channel = CHANNEL_MAP[channel]
393
+ mapped_channel = CHANNEL_MAP_REVERSE[channel]
413
394
  if self._device.telnet_available:
414
395
  await self._device.telnet_api.async_send_commands(
415
396
  self._device.telnet_commands.command_channel_volume.format(
@@ -425,17 +406,17 @@ class DenonAVRVolume(DenonAVRFoundation):
425
406
 
426
407
  async def async_channel_volume(self, channel: Channels, volume: float) -> None:
427
408
  """
428
- Set Channel volume on receiver via HTTP get command.
409
+ Set Channel volume on receiver.
429
410
 
430
411
  :param channel: Channel to set.
431
412
  :param volume: Volume to set. Valid values are -12 to 12 with 0.5 steps.
432
413
  """
433
414
  self._is_valid_channel(channel)
434
- if volume not in CHANNEL_VOLUME_MAP_LABELS:
415
+ if volume not in CHANNEL_VOLUME_MAP_REVERSE:
435
416
  raise AvrCommandError(f"Invalid channel volume: {volume}")
436
417
 
437
- mapped_channel = CHANNEL_MAP[channel]
438
- mapped_volume = CHANNEL_VOLUME_MAP_LABELS[volume]
418
+ mapped_channel = CHANNEL_MAP_REVERSE[channel]
419
+ mapped_volume = CHANNEL_VOLUME_MAP_REVERSE[volume]
439
420
  if self._device.telnet_available:
440
421
  await self._device.telnet_api.async_send_commands(
441
422
  self._device.telnet_commands.command_channel_volume.format(
@@ -450,7 +431,7 @@ class DenonAVRVolume(DenonAVRFoundation):
450
431
  )
451
432
 
452
433
  async def async_channel_volumes_reset(self) -> None:
453
- """Reset all channel volumes on receiver via HTTP get command."""
434
+ """Reset all channel volumes on receiver."""
454
435
  if self._device.telnet_available:
455
436
  await self._device.telnet_api.async_send_commands(
456
437
  self._device.telnet_commands.command_channel_volumes_reset
@@ -461,7 +442,7 @@ class DenonAVRVolume(DenonAVRFoundation):
461
442
  )
462
443
 
463
444
  async def async_subwoofer_on(self) -> None:
464
- """Turn on Subwoofer on receiver via HTTP get command."""
445
+ """Turn on Subwoofer on receiver."""
465
446
  if self._device.telnet_available:
466
447
  await self._device.telnet_api.async_send_commands(
467
448
  self._device.telnet_commands.command_subwoofer_on_off.format(mode="ON")
@@ -472,7 +453,7 @@ class DenonAVRVolume(DenonAVRFoundation):
472
453
  )
473
454
 
474
455
  async def async_subwoofer_off(self) -> None:
475
- """Turn off Subwoofer on receiver via HTTP get command."""
456
+ """Turn off Subwoofer on receiver."""
476
457
  if self._device.telnet_available:
477
458
  await self._device.telnet_api.async_send_commands(
478
459
  self._device.telnet_commands.command_subwoofer_on_off.format(mode="OFF")
@@ -484,7 +465,7 @@ class DenonAVRVolume(DenonAVRFoundation):
484
465
 
485
466
  async def async_subwoofer_toggle(self) -> None:
486
467
  """
487
- Toggle Subwoofer on receiver via HTTP get command.
468
+ Toggle Subwoofer on receiver.
488
469
 
489
470
  Only available if using Telnet.
490
471
  """
@@ -494,9 +475,9 @@ class DenonAVRVolume(DenonAVRFoundation):
494
475
  await self.async_subwoofer_on()
495
476
 
496
477
  async def async_subwoofer_level_up(self, subwoofer: Subwoofers) -> None:
497
- """Increase Subwoofer level on receiver via HTTP get command."""
478
+ """Increase Subwoofer level on receiver."""
498
479
  self._is_valid_subwoofer(subwoofer)
499
- mapped_subwoofer = SUBWOOFERS_MAP[subwoofer]
480
+ mapped_subwoofer = SUBWOOFERS_MAP_REVERSE[subwoofer]
500
481
  if self._device.telnet_available:
501
482
  await self._device.telnet_api.async_send_commands(
502
483
  self._device.telnet_commands.command_subwoofer_level.format(
@@ -511,9 +492,9 @@ class DenonAVRVolume(DenonAVRFoundation):
511
492
  )
512
493
 
513
494
  async def async_subwoofer_level_down(self, subwoofer: Subwoofers) -> None:
514
- """Decrease Subwoofer level on receiver via HTTP get command."""
495
+ """Decrease Subwoofer level on receiver."""
515
496
  self._is_valid_subwoofer(subwoofer)
516
- mapped_subwoofer = SUBWOOFERS_MAP[subwoofer]
497
+ mapped_subwoofer = SUBWOOFERS_MAP_REVERSE[subwoofer]
517
498
  if self._device.telnet_available:
518
499
  await self._device.telnet_api.async_send_commands(
519
500
  self._device.telnet_commands.command_subwoofer_level.format(
@@ -528,7 +509,7 @@ class DenonAVRVolume(DenonAVRFoundation):
528
509
  )
529
510
 
530
511
  async def async_lfe_up(self) -> None:
531
- """Increase LFE on receiver via HTTP get command."""
512
+ """Increase LFE on receiver."""
532
513
  if self._device.telnet_available:
533
514
  await self._device.telnet_api.async_send_commands(
534
515
  self._device.telnet_commands.command_lfe.format(mode="UP")
@@ -539,7 +520,7 @@ class DenonAVRVolume(DenonAVRFoundation):
539
520
  )
540
521
 
541
522
  async def async_lfe_down(self) -> None:
542
- """Decrease LFE on receiver via HTTP get command."""
523
+ """Decrease LFE on receiver."""
543
524
  if self._device.telnet_available:
544
525
  await self._device.telnet_api.async_send_commands(
545
526
  self._device.telnet_commands.command_lfe.format(mode="DOWN")
@@ -551,7 +532,7 @@ class DenonAVRVolume(DenonAVRFoundation):
551
532
 
552
533
  async def async_lfe(self, lfe: int) -> None:
553
534
  """
554
- Set LFE level on receiver via HTTP get command.
535
+ Set LFE level on receiver.
555
536
 
556
537
  :param lfe: LFE level to set. Valid values are -10 to 0.
557
538
  """
@@ -569,7 +550,7 @@ class DenonAVRVolume(DenonAVRFoundation):
569
550
  )
570
551
 
571
552
  async def async_bass_sync_up(self) -> None:
572
- """Increase Bass Sync on receiver via HTTP get command."""
553
+ """Increase Bass Sync on receiver."""
573
554
  if self._device.telnet_available:
574
555
  await self._device.telnet_api.async_send_commands(
575
556
  self._device.telnet_commands.command_bass_sync.format(mode="UP")
@@ -580,7 +561,7 @@ class DenonAVRVolume(DenonAVRFoundation):
580
561
  )
581
562
 
582
563
  async def async_bass_sync_down(self) -> None:
583
- """Decrease Bass Sync on receiver via HTTP get command."""
564
+ """Decrease Bass Sync on receiver."""
584
565
  if self._device.telnet_available:
585
566
  await self._device.telnet_api.async_send_commands(
586
567
  self._device.telnet_commands.command_bass_sync.format(mode="DOWN")
@@ -592,7 +573,7 @@ class DenonAVRVolume(DenonAVRFoundation):
592
573
 
593
574
  async def async_bass_sync(self, lfe: int) -> None:
594
575
  """
595
- Set Bass Sync level on receiver via HTTP get command.
576
+ Set Bass Sync level on receiver.
596
577
 
597
578
  :param lfe: Bass Sync level to set. Valid values are -10 to 0.
598
579
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: denonavr
3
- Version: 1.1.2
3
+ Version: 1.3.0
4
4
  Summary: Automation Library for Denon AVR receivers
5
5
  Author-email: Oliver Goetz <scarface@mywoh.de>
6
6
  License: MIT
@@ -20,6 +20,7 @@ Classifier: Programming Language :: Python :: 3.10
20
20
  Classifier: Programming Language :: Python :: 3.11
21
21
  Classifier: Programming Language :: Python :: 3.12
22
22
  Classifier: Programming Language :: Python :: 3.13
23
+ Classifier: Programming Language :: Python :: 3.14
23
24
  Requires-Python: >=3.8
24
25
  Description-Content-Type: text/markdown; charset=UTF-8
25
26
  License-File: LICENSE
@@ -0,0 +1,20 @@
1
+ denonavr/__init__.py,sha256=cJ7BWxEiq3Kk3ckcl9dRjtiECxCraJxo0BOnJeinEfE,1325
2
+ denonavr/api.py,sha256=FzLJzKTrRF8XcNBiXYqwt9AbRyMlwimn-oSaVA2SPR4,35109
3
+ denonavr/appcommand.py,sha256=SAyerOSrPKCcV9ZwIVm-hwYzBsZGY7G4o6m3F7mc9Yc,8823
4
+ denonavr/audyssey.py,sha256=lD_TUJmVvPCrljWCiyfxtMPgPlAfJAgrjlLhDt8_wxE,14740
5
+ denonavr/const.py,sha256=zaIwg7AjgXtFXxiAtQihkohlxtFc_K2-FEIHrn29Dfk,72360
6
+ denonavr/decorators.py,sha256=uXRZ2lEBVwg-8ZdY71miKyaDdDn3C_o8KCYOvar6AUw,2711
7
+ denonavr/denonavr.py,sha256=fGOl5yw36SDCsOVbZSSGMoT31C59EYqEbxEdTKKkuOI,42115
8
+ denonavr/dirac.py,sha256=oFT4NZyOfMbAQG4zRKJb3scGhQYlKzodnGRQKUZWH7Q,2554
9
+ denonavr/exceptions.py,sha256=naP7MCuNH98rv7y_lDdO7ayyvQGywnsfpHhW-o9tKeo,1725
10
+ denonavr/foundation.py,sha256=fsmCAV2bU8i1FNXXPBI_tvqXeNl-OorcXrW25VHQKkk,81112
11
+ denonavr/input.py,sha256=dEQyyX_doIE_dx_VjAjEJBXdDx6JGZu9iYIT7Q2k7RI,44786
12
+ denonavr/soundmode.py,sha256=MHKcSoDv5ZUFzRbpF9Z8H3xLxZCAVaQWu1F8_qzP8MA,48051
13
+ denonavr/ssdp.py,sha256=8G2hUj8s9coxNGlwXiIu8qP6WQaRNlRxGo0dcsSUVHU,7922
14
+ denonavr/tonecontrol.py,sha256=cR4MkaLbDazDgt3WwS7I8KdapQ5p-FC1oUxdobuo1rU,12412
15
+ denonavr/volume.py,sha256=7urW0aOfOtcTEgN-WedbwmFkViCnMvEmW9XiHENIVH8,21580
16
+ denonavr-1.3.0.dist-info/licenses/LICENSE,sha256=hcKXAoZnRee1NRWnxTpKyjKCz4aHhw76sZUZoB3qPTw,1068
17
+ denonavr-1.3.0.dist-info/METADATA,sha256=45KkULF3mTZfItwq5KxQRXffNZ1Iy7CrqTAoOHki0S8,4758
18
+ denonavr-1.3.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
19
+ denonavr-1.3.0.dist-info/top_level.txt,sha256=GKwe6bOaw_R68BR7x-C7VD3bDFKKNBf0pRkWywUZWIs,9
20
+ denonavr-1.3.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.9.0)
2
+ Generator: setuptools (80.10.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,20 +0,0 @@
1
- denonavr/__init__.py,sha256=XIZmlMTDfp6bJzeFlhfUaTmfz0pNiyaNyjW9yzTfEbE,1325
2
- denonavr/api.py,sha256=5LknKLIXZVPuQ8EYqcf6vAxo4M8ll8wGkoDM40b0sZ4,32555
3
- denonavr/appcommand.py,sha256=H37VK4n-yW0ISvR1hfX8G4udQtGASoY44QNaXtLSidE,7784
4
- denonavr/audyssey.py,sha256=d7mSkRiMvrZMtCzQdixfJuLmkuZeSi1w1GgQ_1fm-j8,14655
5
- denonavr/const.py,sha256=l2WXqSIPxGAJwlP4tJ8ay3dZyPWXiT3_nhlApQY2hRE,55456
6
- denonavr/decorators.py,sha256=tLoVjGtDmN75fhwCgNREMGjbB6varDERnYlrhC6yIZ8,2733
7
- denonavr/denonavr.py,sha256=lN_xwG9sa1TYCZQi24FRq4p4jV6GaOuDefYGuLvvXGI,39823
8
- denonavr/dirac.py,sha256=bRAxdfHRCfYT7nw68ggegXbMsMpmaoqh2foz5qh_Ikw,2595
9
- denonavr/exceptions.py,sha256=naP7MCuNH98rv7y_lDdO7ayyvQGywnsfpHhW-o9tKeo,1725
10
- denonavr/foundation.py,sha256=rFYntu5VBJqJEv5da9bgC9W8pG_xyBBiO6IyVUlUmLc,73593
11
- denonavr/input.py,sha256=kbKPePkdFHQSHKzOvAYudeSyJiRrUh0PxIOkG38kDUo,43050
12
- denonavr/soundmode.py,sha256=ONMVzD4FPM8PvNrLIG_HjJeAaM5DNp4jvC2mGqXzEI8,44392
13
- denonavr/ssdp.py,sha256=4gyvN0yo9qSnJ7l6iJmSC_5qW45Fq2Tt2RACpxFMSqg,7839
14
- denonavr/tonecontrol.py,sha256=DfHzziEeLdYiyTbJKcGk5cCPTvKBgjMqQReYp0qoF0U,12474
15
- denonavr/volume.py,sha256=qnsYr4AWfCu8MQH9mdw1qsaLo3-Sq1mdzreYQDhaTXQ,22260
16
- denonavr-1.1.2.dist-info/licenses/LICENSE,sha256=hcKXAoZnRee1NRWnxTpKyjKCz4aHhw76sZUZoB3qPTw,1068
17
- denonavr-1.1.2.dist-info/METADATA,sha256=Y73wPSRIMHvVbx89acau-UY_hWDbgJiuTOH1Hl3hJE4,4707
18
- denonavr-1.1.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
19
- denonavr-1.1.2.dist-info/top_level.txt,sha256=GKwe6bOaw_R68BR7x-C7VD3bDFKKNBf0pRkWywUZWIs,9
20
- denonavr-1.1.2.dist-info/RECORD,,