streamrip
streamrip copied to clipboard
[BUG] Deezer Ripping issue
Describe the bug
I cannot rip audio from deezer with a premium account
Command Used
rip lastfm https://www.last.fm/user/ylmzart/playlists/13135508
Debug Traceback
[14:27:21] DEBUG Showing all debug logs cli.py:102
โ น Logging into soundcloud[14:27:25] DEBUG Current valid client_id='Bzi0o0nRG6RkdZROE3o4Rsq32X0n7J9E' app_version='1732092953' soundcloud.py:52
DEBUG Fetching lastfm playlist playlist.py:333
๐ Searching for last.fm tracks (0 found, 0 failed, 62 total)[14:27:33] DEBUG Found result for Since I've Been Loving You - Remaster Led Zeppelin on deezer playlist.py:288
๐ Searching for last.fm tracks (1 found, 0 failed, 62 total)[14:27:34] DEBUG Found result for Lonely Is the Word - 2009 Remaster Black Sabbath on deezer playlist.py:288
๐ Searching for last.fm tracks (2 found, 0 failed, 62 total) DEBUG Found result for Heaven and Hell - 2009 Remaster Black Sabbath on deezer playlist.py:288
๐ Searching for last.fm tracks (3 found, 0 failed, 62 total) DEBUG Found result for Lady Evil - 2009 Remaster Black Sabbath on deezer playlist.py:288
๐ Searching for last.fm tracks (4 found, 0 failed, 62 total)[14:27:35] DEBUG Found result for Hot for Teacher Van Halen on deezer playlist.py:288
๐ Searching for last.fm tracks (5 found, 0 failed, 62 total) DEBUG Found result for Howlin' At The Moon Josh Steinhart on deezer playlist.py:288
๐ Searching for last.fm tracks (6 found, 0 failed, 62 total)[14:27:36] DEBUG Found result for Stargazer Rainbow on deezer playlist.py:288
๐ Searching for last.fm tracks (7 found, 0 failed, 62 total) DEBUG Found result for Man on the Silver Mountain Rainbow on deezer playlist.py:288
๐ Searching for last.fm tracks (8 found, 0 failed, 62 total) DEBUG Found result for Epitaph - Including "March For No Reason" And "Tomorrow And playlist.py:288
Tomorrow" King Crimson on deezer
๐ Searching for last.fm tracks (9 found, 0 failed, 62 total) DEBUG Found result for Don't Try So Hard - 2011 Remaster Queen on deezer playlist.py:288
๐ Searching for last.fm tracks (10 found, 0 failed, 62 total)[14:27:37] DEBUG Found result for Shine On You Crazy Diamond, Pts. 1-5 - 2011 Remaster Pink Floyd on playlist.py:288
deezer
๐ Searching for last.fm tracks (11 found, 0 failed, 62 total) DEBUG Found result for To Live Is to Fight Almora on deezer playlist.py:288
๐ Searching for last.fm tracks (12 found, 0 failed, 62 total) DEBUG Found result for Rocket Queen Guns N' Roses on deezer playlist.py:288
๐ Searching for last.fm tracks (13 found, 0 failed, 62 total) DEBUG Found result for Kill the Pain Accept on deezer playlist.py:288
๐ Searching for last.fm tracks (14 found, 0 failed, 62 total)[14:27:38] DEBUG Found result for Stone Cold Crazy - Remastered 2011 Queen on deezer playlist.py:288
๐ Searching for last.fm tracks (15 found, 0 failed, 62 total) DEBUG Found result for Tarot Woman Rainbow on deezer playlist.py:288
๐ Searching for last.fm tracks (16 found, 0 failed, 62 total) DEBUG Found result for Strife Trivium on deezer playlist.py:288
๐ Searching for last.fm tracks (17 found, 0 failed, 62 total) DEBUG Found result for War Eternal Arch Enemy on deezer playlist.py:288
๐ Searching for last.fm tracks (18 found, 0 failed, 62 total) DEBUG Found result for Forsaken Dream Theater on deezer playlist.py:288
๐ Searching for last.fm tracks (19 found, 0 failed, 62 total)[14:27:39] DEBUG Found result for It's So Easy Guns N' Roses on deezer playlist.py:288
๐ Searching for last.fm tracks (20 found, 0 failed, 62 total) DEBUG Found result for Cemetery Gates Pantera on deezer playlist.py:288
๐ Searching for last.fm tracks (21 found, 0 failed, 62 total) DEBUG Found result for Children of the Sea - 2009 Remaster Black Sabbath on deezer playlist.py:288
๐ Searching for last.fm tracks (22 found, 0 failed, 62 total) DEBUG Found result for Hard Skool Guns N' Roses on deezer playlist.py:288
๐ Searching for last.fm tracks (23 found, 0 failed, 62 total) DEBUG Found result for She's Gone Steelheart on deezer playlist.py:288
๐ Searching for last.fm tracks (24 found, 0 failed, 62 total) DEBUG Found result for Love Me Forever Motรถrhead on deezer playlist.py:288
๐ Searching for last.fm tracks (25 found, 0 failed, 62 total)[14:27:40] DEBUG Found result for Oceans of Time Axel Rudi Pell on deezer playlist.py:288
๐ Searching for last.fm tracks (26 found, 0 failed, 62 total) DEBUG Found result for Wither Dream Theater on deezer playlist.py:288
๐ Searching for last.fm tracks (27 found, 0 failed, 62 total) DEBUG Found result for Burden Opeth on deezer playlist.py:288
๐ Searching for last.fm tracks (28 found, 0 failed, 62 total) DEBUG Found result for Forever and One (Neverland) Helloween on deezer playlist.py:288
๐ Searching for last.fm tracks (29 found, 0 failed, 62 total)[14:27:41] DEBUG Found result for Face Of Melinda (Remastered) Opeth on deezer playlist.py:288
๐ Searching for last.fm tracks (30 found, 0 failed, 62 total) DEBUG Found result for Catch the Rainbow Rainbow on deezer playlist.py:288
๐ Searching for last.fm tracks (31 found, 0 failed, 62 total) DEBUG Found result for Forever Angel Axel Rudi Pell on deezer playlist.py:288
๐ Searching for last.fm tracks (32 found, 0 failed, 62 total) DEBUG Found result for Hey Hey My My Axel Rudi Pell on deezer playlist.py:288
๐ Searching for last.fm tracks (33 found, 0 failed, 62 total) DEBUG Found result for Neon Knights - 2009 Remaster Black Sabbath on deezer playlist.py:288
๐ Searching for last.fm tracks (34 found, 0 failed, 62 total)[14:27:42] DEBUG Found result for Why Don't You Stay Glenn Hughes on deezer playlist.py:288
๐ Searching for last.fm tracks (35 found, 0 failed, 62 total) DEBUG Found result for All The Fools Sailed Away Dio on deezer playlist.py:288
๐ Searching for last.fm tracks (36 found, 0 failed, 62 total) DEBUG Found result for Mississippi Queen Mountain on deezer playlist.py:288
๐ Searching for last.fm tracks (37 found, 0 failed, 62 total) DEBUG Found result for Mind Your Manners (feat. Myles Kennedy and The Conspirators) Slash playlist.py:288
on deezer
๐ Searching for last.fm tracks (38 found, 0 failed, 62 total) DEBUG Found result for Do Your Worst Rival Sons on deezer playlist.py:288
๐ Searching for last.fm tracks (39 found, 0 failed, 62 total) DEBUG Found result for Long Live Rock N Roll Rainbow on deezer playlist.py:288
๐ Searching for last.fm tracks (40 found, 0 failed, 62 total)[14:27:43] DEBUG Found result for School's Out Alice Cooper on deezer playlist.py:288
๐ Searching for last.fm tracks (41 found, 0 failed, 62 total) DEBUG Found result for Bible Black Heaven & Hell on deezer playlist.py:288
๐ Searching for last.fm tracks (42 found, 0 failed, 62 total) DEBUG Found result for Don't Talk to Strangers Dio on deezer playlist.py:288
๐ Searching for last.fm tracks (43 found, 0 failed, 62 total) DEBUG Found result for Atom And Evil Heaven & Hell on deezer playlist.py:288
๐ Searching for last.fm tracks (44 found, 0 failed, 62 total) DEBUG Found result for Beyond the Realms of Death Judas Priest on deezer playlist.py:288
๐ Searching for last.fm tracks (45 found, 0 failed, 62 total)[14:27:44] DEBUG Found result for Bay of Pigs Civil War on deezer playlist.py:288
๐ Searching for last.fm tracks (46 found, 0 failed, 62 total) DEBUG Found result for Dream On Gregg Bissonette on deezer playlist.py:288
๐ Searching for last.fm tracks (47 found, 0 failed, 62 total) DEBUG Found result for The Last In Line Dio on deezer playlist.py:288
๐ Searching for last.fm tracks (48 found, 0 failed, 62 total) DEBUG Found result for Never In My Life Mountain on deezer playlist.py:288
๐ Searching for last.fm tracks (49 found, 0 failed, 62 total)[14:27:45] DEBUG Found result for Gimme Back My Bullets Lynyrd Skynyrd on deezer playlist.py:288
๐ Searching for last.fm tracks (50 found, 0 failed, 62 total) DEBUG Found result for Till the End Motรถrhead on deezer playlist.py:288
๐ Searching for last.fm tracks (51 found, 0 failed, 62 total) DEBUG Found result for Lady Writer Dire Straits on deezer playlist.py:288
๐ Searching for last.fm tracks (52 found, 0 failed, 62 total)[14:27:46] DEBUG Found result for Estranged Guns N' Roses on deezer playlist.py:288
๐ Searching for last.fm tracks (53 found, 0 failed, 62 total) DEBUG Found result for You've Got Another Thing Coming Judas Priest on deezer playlist.py:288
๐ Searching for last.fm tracks (54 found, 0 failed, 62 total) DEBUG Found result for Thank God I'm Not You Himalayas on deezer playlist.py:288
๐ Searching for last.fm tracks (55 found, 0 failed, 62 total) DEBUG Found result for Coming Back To Life - 2011 Remaster Pink Floyd on deezer playlist.py:288
๐ Searching for last.fm tracks (56 found, 0 failed, 62 total) DEBUG Found result for American Life Primus on deezer playlist.py:288
๐ Searching for last.fm tracks (57 found, 0 failed, 62 total) DEBUG Found result for Die Young - 2009 Remaster Black Sabbath on deezer playlist.py:288
๐ Searching for last.fm tracks (58 found, 0 failed, 62 total) DEBUG Found result for Wishing Well - 2009 Remaster Black Sabbath on deezer playlist.py:288
๐ Searching for last.fm tracks (59 found, 0 failed, 62 total)[14:27:47] DEBUG Found result for Starless King Crimson on deezer playlist.py:288
๐ Searching for last.fm tracks (60 found, 0 failed, 62 total) DEBUG Found result for As Long As It's Not About Love Dio on deezer playlist.py:288
DEBUG Removing dirs set() artwork.py:19
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Traceback (most recent call last) โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ C:\Program Files\Python310\lib\site-packages\requests\models.py:974 in json โ
โ โ
โ 971 โ โ โ โ โ raise RequestsJSONDecodeError(e.msg, e.doc, e.pos) โ
โ 972 โ โ โ
โ 973 โ โ try: โ
โ โฑ 974 โ โ โ return complexjson.loads(self.text, **kwargs) โ
โ 975 โ โ except JSONDecodeError as e: โ
โ 976 โ โ โ # Catch JSON-related errors and raise as requests.JSONDecodeError โ
โ 977 โ โ โ # This aliases json.JSONDecodeError and simplejson.JSONDecodeError โ
โ โ
โ โญโโโโโโโโโ locals โโโโโโโโโโโฎ โ
โ โ kwargs = {} โ โ
โ โ self = <Response [403]> โ โ
โ โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ โ
โ โ
โ C:\Program Files\Python310\lib\json\__init__.py:346 in loads โ
โ โ
โ 343 โ if (cls is None and object_hook is None and โ
โ 344 โ โ โ parse_int is None and parse_float is None and โ
โ 345 โ โ โ parse_constant is None and object_pairs_hook is None and not kw): โ
โ โฑ 346 โ โ return _default_decoder.decode(s) โ
โ 347 โ if cls is None: โ
โ 348 โ โ cls = JSONDecoder โ
โ 349 โ if object_hook is not None: โ
โ โ
โ โญโโโโโโโโโโโโโโโ locals โโโโโโโโโโโโโโโโฎ โ
โ โ cls = None โ โ
โ โ kw = {} โ โ
โ โ object_hook = None โ โ
โ โ object_pairs_hook = None โ โ
โ โ parse_constant = None โ โ
โ โ parse_float = None โ โ
โ โ parse_int = None โ โ
โ โ s = 'HTTP_FORBIDDEN' โ โ
โ โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ โ
โ โ
โ C:\Program Files\Python310\lib\json\decoder.py:337 in decode โ
โ โ
โ 334 โ โ containing a JSON document). โ
โ 335 โ โ โ
โ 336 โ โ """ โ
โ โฑ 337 โ โ obj, end = self.raw_decode(s, idx=_w(s, 0).end()) โ
โ 338 โ โ end = _w(s, end).end() โ
โ 339 โ โ if end != len(s): โ
โ 340 โ โ โ raise JSONDecodeError("Extra data", s, end) โ
โ โ
โ โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ locals โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ โ
โ โ _w = <built-in method match of re.Pattern object at 0x000001FBECC8C6C0> โ โ
โ โ s = 'HTTP_FORBIDDEN' โ โ
โ โ self = <json.decoder.JSONDecoder object at 0x000001FBECCB8B50> โ โ
โ โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ โ
โ โ
โ C:\Program Files\Python310\lib\json\decoder.py:355 in raw_decode โ
โ โ
โ 352 โ โ try: โ
โ 353 โ โ โ obj, end = self.scan_once(s, idx) โ
โ 354 โ โ except StopIteration as err: โ
โ โฑ 355 โ โ โ raise JSONDecodeError("Expecting value", s, err.value) from None โ
โ 356 โ โ return obj, end โ
โ 357 โ
โ โ
โ โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโ locals โโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ โ
โ โ idx = 0 โ โ
โ โ s = 'HTTP_FORBIDDEN' โ โ
โ โ self = <json.decoder.JSONDecoder object at 0x000001FBECCB8B50> โ โ
โ โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
JSONDecodeError: Expecting value: line 1 column 1 (char 0)
During handling of the above exception, another exception occurred:
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Traceback (most recent call last) โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ C:\Program Files\Python310\lib\runpy.py:196 in _run_module_as_main โ
โ โ
โ 193 โ main_globals = sys.modules["__main__"].__dict__ โ
โ 194 โ if alter_argv: โ
โ 195 โ โ sys.argv[0] = mod_spec.origin โ
โ โฑ 196 โ return _run_code(code, main_globals, None, โ
โ 197 โ โ โ โ โ "__main__", mod_spec) โ
โ 198 โ
โ 199 def run_module(mod_name, init_globals=None, โ
โ โ
โ โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ locals โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ โ
โ โ alter_argv = False โ โ
โ โ code = <code object <module> at 0x000001FBEA6E8870, file "C:\Program โ โ
โ โ Files\Python310\Scripts\rip.exe\__main__.py", line 1> โ โ
โ โ main_globals = { โ โ
โ โ โ '__name__': '__main__', โ โ
โ โ โ '__doc__': None, โ โ
โ โ โ '__package__': '', โ โ
โ โ โ '__loader__': <zipimporter object "C:\Program โ โ
โ โ Files\Python310\Scripts\rip.exe\">, โ โ
โ โ โ '__spec__': ModuleSpec(name='__main__', loader=<zipimporter object โ โ
โ โ "C:\Program Files\Python310\Scripts\rip.exe\">, origin='C:\\Program โ โ
โ โ Files\\Python310\\Scripts\\rip.exe\\__main__.py'), โ โ
โ โ โ '__annotations__': {}, โ โ
โ โ โ '__builtins__': <module 'builtins' (built-in)>, โ โ
โ โ โ '__file__': 'C:\\Program โ โ
โ โ Files\\Python310\\Scripts\\rip.exe\\__main__.py', โ โ
โ โ โ '__cached__': 'C:\\Program โ โ
โ โ Files\\Python310\\Scripts\\rip.exe\\__pycache__\\__main__.cpython-310.pyc', โ โ
โ โ โ 're': <module 're' from 'C:\\Program Files\\Python310\\lib\\re.py'>, โ โ
โ โ โ ... +2 โ โ
โ โ } โ โ
โ โ mod_name = '__main__' โ โ
โ โ mod_spec = ModuleSpec(name='__main__', loader=<zipimporter object "C:\Program โ โ
โ โ Files\Python310\Scripts\rip.exe\">, origin='C:\\Program โ โ
โ โ Files\\Python310\\Scripts\\rip.exe\\__main__.py') โ โ
โ โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ โ
โ โ
โ C:\Program Files\Python310\lib\runpy.py:86 in _run_code โ
โ โ
โ 83 โ โ โ โ โ __loader__ = loader, โ
โ 84 โ โ โ โ โ __package__ = pkg_name, โ
โ 85 โ โ โ โ โ __spec__ = mod_spec) โ
โ โฑ 86 โ exec(code, run_globals) โ
โ 87 โ return run_globals โ
โ 88 โ
โ 89 def _run_module_code(code, init_globals=None, โ
โ โ
โ โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ locals โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ โ
โ โ cached = 'C:\\Program โ โ
โ โ Files\\Python310\\Scripts\\rip.exe\\__pycache__\\__main__.cpython-310.pyc' โ โ
โ โ code = <code object <module> at 0x000001FBEA6E8870, file "C:\Program โ โ
โ โ Files\Python310\Scripts\rip.exe\__main__.py", line 1> โ โ
โ โ fname = 'C:\\Program Files\\Python310\\Scripts\\rip.exe\\__main__.py' โ โ
โ โ init_globals = None โ โ
โ โ loader = <zipimporter object "C:\Program Files\Python310\Scripts\rip.exe\"> โ โ
โ โ mod_name = '__main__' โ โ
โ โ mod_spec = ModuleSpec(name='__main__', loader=<zipimporter object "C:\Program โ โ
โ โ Files\Python310\Scripts\rip.exe\">, origin='C:\\Program โ โ
โ โ Files\\Python310\\Scripts\\rip.exe\\__main__.py') โ โ
โ โ pkg_name = '' โ โ
โ โ run_globals = { โ โ
โ โ โ '__name__': '__main__', โ โ
โ โ โ '__doc__': None, โ โ
โ โ โ '__package__': '', โ โ
โ โ โ '__loader__': <zipimporter object "C:\Program โ โ
โ โ Files\Python310\Scripts\rip.exe\">, โ โ
โ โ โ '__spec__': ModuleSpec(name='__main__', loader=<zipimporter object โ โ
โ โ "C:\Program Files\Python310\Scripts\rip.exe\">, origin='C:\\Program โ โ
โ โ Files\\Python310\\Scripts\\rip.exe\\__main__.py'), โ โ
โ โ โ '__annotations__': {}, โ โ
โ โ โ '__builtins__': <module 'builtins' (built-in)>, โ โ
โ โ โ '__file__': 'C:\\Program โ โ
โ โ Files\\Python310\\Scripts\\rip.exe\\__main__.py', โ โ
โ โ โ '__cached__': 'C:\\Program โ โ
โ โ Files\\Python310\\Scripts\\rip.exe\\__pycache__\\__main__.cpython-310.pyc', โ โ
โ โ โ 're': <module 're' from 'C:\\Program Files\\Python310\\lib\\re.py'>, โ โ
โ โ โ ... +2 โ โ
โ โ } โ โ
โ โ script_name = None โ โ
โ โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ โ
โ โ
โ in <module>:7 โ
โ โ
โ C:\Users\ylmz\AppData\Roaming\Python\Python310\site-packages\click\core.py:1157 in __call__ โ
โ โ
โ C:\Users\ylmz\AppData\Roaming\Python\Python310\site-packages\click\core.py:1078 in main โ
โ โ
โ C:\Users\ylmz\AppData\Roaming\Python\Python310\site-packages\click\core.py:1688 in invoke โ
โ โ
โ C:\Users\ylmz\AppData\Roaming\Python\Python310\site-packages\click\core.py:1434 in invoke โ
โ โ
โ C:\Users\ylmz\AppData\Roaming\Python\Python310\site-packages\click\core.py:783 in invoke โ
โ โ
โ C:\Users\ylmz\AppData\Roaming\Python\Python310\site-packages\click\decorators.py:33 in new_func โ
โ โ
โ C:\Program Files\Python310\lib\site-packages\streamrip\rip\cli.py:28 in wrapper โ
โ โ
โ 25 def coro(f): โ
โ 26 โ @wraps(f) โ
โ 27 โ def wrapper(*args, **kwargs): โ
โ โฑ 28 โ โ return asyncio.run(f(*args, **kwargs)) โ
โ 29 โ โ
โ 30 โ return wrapper โ
โ 31 โ
โ โ
โ โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ locals โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ โ
โ โ args = (<click.core.Context object at 0x000001FBFE521840>,) โ โ
โ โ kwargs = { โ โ
โ โ โ 'url': 'https://www.last.fm/user/ylmzart/playlists/13135508', โ โ
โ โ โ 'source': None, โ โ
โ โ โ 'fallback_source': None โ โ
โ โ } โ โ
โ โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ โ
โ โ
โ C:\Program Files\Python310\lib\asyncio\runners.py:44 in run โ
โ โ
โ 41 โ โ events.set_event_loop(loop) โ
โ 42 โ โ if debug is not None: โ
โ 43 โ โ โ loop.set_debug(debug) โ
โ โฑ 44 โ โ return loop.run_until_complete(main) โ
โ 45 โ finally: โ
โ 46 โ โ try: โ
โ 47 โ โ โ _cancel_all_tasks(loop) โ
โ โ
โ โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ locals โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ โ
โ โ debug = None โ โ
โ โ loop = <ProactorEventLoop running=False closed=True debug=False> โ โ
โ โ main = <coroutine object lastfm at 0x000001FBFE762A40> โ โ
โ โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ โ
โ โ
โ C:\Program Files\Python310\lib\asyncio\base_events.py:646 in run_until_complete โ
โ โ
โ 643 โ โ if not future.done(): โ
โ 644 โ โ โ raise RuntimeError('Event loop stopped before Future completed.') โ
โ 645 โ โ โ
โ โฑ 646 โ โ return future.result() โ
โ 647 โ โ
โ 648 โ def stop(self): โ
โ 649 โ โ """Stop running the event loop. โ
โ โ
โ โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ locals โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ โ
โ โ future = <Task finished name='Task-1' coro=<lastfm() done, defined at C:\Program โ โ
โ โ Files\Python310\lib\site-packages\streamrip\rip\cli.py:383> โ โ
โ โ exception=JSONDecodeError('Expecting value: line 1 column 1 (char 0)')> โ โ
โ โ new_task = True โ โ
โ โ self = <ProactorEventLoop running=False closed=True debug=False> โ โ
โ โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ โ
โ โ
โ C:\Program Files\Python310\lib\site-packages\streamrip\rip\cli.py:402 in lastfm โ
โ โ
โ 399 โ โ config.session.lastfm.fallback_source = fallback_source โ
โ 400 โ with config as cfg: โ
โ 401 โ โ async with Main(cfg) as main: โ
โ โฑ 402 โ โ โ await main.resolve_lastfm(url) โ
โ 403 โ โ โ await main.rip() โ
โ 404 โ
โ 405 โ
โ โ
โ โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ locals โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ โ
โ โ cfg = <streamrip.config.Config object at 0x000001FBFE79B190> โ โ
โ โ config = <streamrip.config.Config object at 0x000001FBFE79B190> โ โ
โ โ ctx = <click.core.Context object at 0x000001FBFE521840> โ โ
โ โ fallback_source = None โ โ
โ โ main = <streamrip.rip.main.Main object at 0x000001FBFE843010> โ โ
โ โ source = None โ โ
โ โ url = 'https://www.last.fm/user/ylmzart/playlists/13135508' โ โ
โ โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ โ
โ โ
โ C:\Program Files\Python310\lib\site-packages\streamrip\rip\main.py:270 in resolve_lastfm โ
โ โ
โ 267 โ โ โ self.config, โ
โ 268 โ โ โ self.database, โ
โ 269 โ โ ) โ
โ โฑ 270 โ โ playlist = await pending_playlist.resolve() โ
โ 271 โ โ โ
โ 272 โ โ if playlist is not None: โ
โ 273 โ โ โ self.media.append(playlist) โ
โ โ
โ โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ locals โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ โ
โ โ c = LastFmConfig(source='deezer', fallback_source='soundcloud') โ โ
โ โ client = <streamrip.client.deezer.DeezerClient object at 0x000001FBFE843130> โ โ
โ โ fallback_client = <streamrip.client.soundcloud.SoundcloudClient object at โ โ
โ โ 0x000001FBFE8435E0> โ โ
โ โ pending_playlist = PendingLastfmPlaylist( โ โ
โ โ โ lastfm_url='https://www.last.fm/user/ylmzart/playlists/13135508', โ โ
โ โ โ client=<streamrip.client.deezer.DeezerClient object at โ โ
โ โ 0x000001FBFE843130>, โ โ
โ โ โ fallback_client=<streamrip.client.soundcloud.SoundcloudClient object โ โ
โ โ at 0x000001FBFE8435E0>, โ โ
โ โ โ config=<streamrip.config.Config object at 0x000001FBFE79B190>, โ โ
โ โ โ db=Database( โ โ
โ โ โ โ downloads=<streamrip.db.Downloads object at 0x000001FBFE843640>, โ โ
โ โ โ โ failed=<streamrip.db.Failed object at 0x000001FBFE843730> โ โ
โ โ โ ) โ โ
โ โ ) โ โ
โ โ playlist_url = 'https://www.last.fm/user/ylmzart/playlists/13135508' โ โ
โ โ self = <streamrip.rip.main.Main object at 0x000001FBFE843010> โ โ
โ โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ โ
โ โ
โ C:\Program Files\Python310\lib\site-packages\streamrip\media\playlist.py:226 in resolve โ
โ โ
โ 223 โ โ โ โ โ
โ 224 โ โ โ โ for title, artist in titles_artists: โ
โ 225 โ โ โ โ โ requests.append(self._make_query(f"{title} {artist}", s, callback)) โ
โ โฑ 226 โ โ โ โ results: list[tuple[str | None, bool]] = await asyncio.gather(*requests) โ
โ 227 โ โ else: โ
โ 228 โ โ โ โ
โ 229 โ โ โ def callback(): โ
โ โ
โ โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ locals โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ โ
โ โ artist = 'Dio' โ โ
โ โ playlist_title = 'ortak' โ โ
โ โ requests = [ โ โ
โ โ โ <coroutine object PendingLastfmPlaylist._make_query at โ โ
โ โ 0x000001FBFE7EC4A0>, โ โ
โ โ โ <coroutine object PendingLastfmPlaylist._make_query at โ โ
โ โ 0x000001FBFE7ECA50>, โ โ
โ โ โ <coroutine object PendingLastfmPlaylist._make_query at โ โ
โ โ 0x000001FBFE7ECAC0>, โ โ
โ โ โ <coroutine object PendingLastfmPlaylist._make_query at โ โ
โ โ 0x000001FBFE7ECF90>, โ โ
โ โ โ <coroutine object PendingLastfmPlaylist._make_query at โ โ
โ โ 0x000001FBFE7ECF20>, โ โ
โ โ โ <coroutine object PendingLastfmPlaylist._make_query at โ โ
โ โ 0x000001FBFE7ECD60>, โ โ
โ โ โ <coroutine object PendingLastfmPlaylist._make_query at โ โ
โ โ 0x000001FBFE7ED000>, โ โ
โ โ โ <coroutine object PendingLastfmPlaylist._make_query at โ โ
โ โ 0x000001FBFE7ECC80>, โ โ
โ โ โ <coroutine object PendingLastfmPlaylist._make_query at โ โ
โ โ 0x000001FBFE7ED070>, โ โ
โ โ โ <coroutine object PendingLastfmPlaylist._make_query at โ โ
โ โ 0x000001FBFE7ED0E0>, โ โ
โ โ โ ... +52 โ โ
โ โ ] โ โ
โ โ s = Status(found=61, failed=0, total=62) โ โ
โ โ self = PendingLastfmPlaylist( โ โ
โ โ โ lastfm_url='https://www.last.fm/user/ylmzart/playlists/13135508', โ โ
โ โ โ client=<streamrip.client.deezer.DeezerClient object at โ โ
โ โ 0x000001FBFE843130>, โ โ
โ โ โ fallback_client=<streamrip.client.soundcloud.SoundcloudClient object at โ โ
โ โ 0x000001FBFE8435E0>, โ โ
โ โ โ config=<streamrip.config.Config object at 0x000001FBFE79B190>, โ โ
โ โ โ db=Database( โ โ
โ โ โ โ downloads=<streamrip.db.Downloads object at 0x000001FBFE843640>, โ โ
โ โ โ โ failed=<streamrip.db.Failed object at 0x000001FBFE843730> โ โ
โ โ โ ) โ โ
โ โ ) โ โ
โ โ status = <rich.status.Status object at 0x000001FBFE5219F0> โ โ
โ โ title = "As Long As It's Not About Love" โ โ
โ โ titles_artists = [ โ โ
โ โ โ ("Since I've Been Loving You - Remaster", 'Led Zeppelin'), โ โ
โ โ โ ('Lonely Is the Word - 2009 Remaster', 'Black Sabbath'), โ โ
โ โ โ ('Heaven and Hell - 2009 Remaster', 'Black Sabbath'), โ โ
โ โ โ ('Lady Evil - 2009 Remaster', 'Black Sabbath'), โ โ
โ โ โ ('God Is Dead?', 'Black Sabbath'), โ โ
โ โ โ ('Hot for Teacher', 'Van Halen'), โ โ
โ โ โ ("Howlin' At The Moon", 'Josh Steinhart'), โ โ
โ โ โ ('Stargazer', 'Rainbow'), โ โ
โ โ โ ('Man on the Silver Mountain', 'Rainbow'), โ โ
โ โ โ ( โ โ
โ โ โ โ 'Epitaph - Including "March For No Reason" And "Tomorrow And โ โ
โ โ Tomorrow"', โ โ
โ โ โ โ 'King Crimson' โ โ
โ โ โ ), โ โ
โ โ โ ... +52 โ โ
โ โ ] โ โ
โ โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ โ
โ โ
โ C:\Program Files\Python310\lib\site-packages\streamrip\media\playlist.py:286 in _make_query โ
โ โ
โ 283 โ โ with ExitStack() as stack: โ
โ 284 โ โ โ # ensure `callback` is always called โ
โ 285 โ โ โ stack.callback(callback) โ
โ โฑ 286 โ โ โ pages = await self.client.search("track", query, limit=1) โ
โ 287 โ โ โ if len(pages) > 0: โ
โ 288 โ โ โ โ logger.debug(f"Found result for {query} on {self.client.source}") โ
โ 289 โ โ โ โ search_status.found += 1 โ
โ โ
โ โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ locals โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ โ
โ โ query = 'God Is Dead? Black Sabbath' โ โ
โ โ search_status = Status(found=61, failed=0, total=62) โ โ
โ โ self = PendingLastfmPlaylist( โ โ
โ โ โ lastfm_url='https://www.last.fm/user/ylmzart/playlists/13135508', โ โ
โ โ โ client=<streamrip.client.deezer.DeezerClient object at โ โ
โ โ 0x000001FBFE843130>, โ โ
โ โ โ fallback_client=<streamrip.client.soundcloud.SoundcloudClient object at โ โ
โ โ 0x000001FBFE8435E0>, โ โ
โ โ โ config=<streamrip.config.Config object at 0x000001FBFE79B190>, โ โ
โ โ โ db=Database( โ โ
โ โ โ โ downloads=<streamrip.db.Downloads object at 0x000001FBFE843640>, โ โ
โ โ โ โ failed=<streamrip.db.Failed object at 0x000001FBFE843730> โ โ
โ โ โ ) โ โ
โ โ ) โ โ
โ โ stack = <contextlib.ExitStack object at 0x000001FBFE8437F0> โ โ
โ โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ โ
โ โ
โ C:\Program Files\Python310\lib\site-packages\streamrip\client\deezer.py:131 in search โ
โ โ
โ 128 โ โ โ except AttributeError: โ
โ 129 โ โ โ โ raise Exception(f"Invalid media type {media_type}") โ
โ 130 โ โ โ
โ โฑ 131 โ โ response = search_function(query, limit=limit) # type: ignore โ
โ 132 โ โ if response["total"] > 0: โ
โ 133 โ โ โ return [response] โ
โ 134 โ โ return [] โ
โ โ
โ โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ locals โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ โ
โ โ limit = 1 โ โ
โ โ media_type = 'track' โ โ
โ โ query = 'God Is Dead? Black Sabbath' โ โ
โ โ search_function = <bound method API.search_track of <deezer.api.API object at โ โ
โ โ 0x000001FBFE8431C0>> โ โ
โ โ self = <streamrip.client.deezer.DeezerClient object at 0x000001FBFE843130> โ โ
โ โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ โ
โ โ
โ C:\Users\ylmz\AppData\Roaming\Python\Python310\site-packages\deezer\api.py:229 in search_track โ
โ โ
โ 226 โ โ
โ 227 โ def search_track(self, query, strict=False, order=None, index=0, limit=25): โ
โ 228 โ โ args = self._generate_search_args(query, strict, order, index, limit) โ
โ โฑ 229 โ โ return self.api_call('search/track', args) โ
โ 230 โ โ
โ 231 โ def search_user(self, query, strict=False, order=None, index=0, limit=25): โ
โ 232 โ โ args = self._generate_search_args(query, strict, order, index, limit) โ
โ โ
โ โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ locals โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ โ
โ โ args = {'q': 'God Is Dead? Black Sabbath', 'index': 0, 'limit': 1} โ โ
โ โ index = 0 โ โ
โ โ limit = 1 โ โ
โ โ order = None โ โ
โ โ query = 'God Is Dead? Black Sabbath' โ โ
โ โ self = <deezer.api.API object at 0x000001FBFE8431C0> โ โ
โ โ strict = False โ โ
โ โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ โ
โ โ
โ C:\Users\ylmz\AppData\Roaming\Python\Python310\site-packages\deezer\api.py:39 in api_call โ
โ โ
โ 36 โ โ โ โ params=args, โ
โ 37 โ โ โ โ headers=self.http_headers, โ
โ 38 โ โ โ โ timeout=30 โ
โ โฑ 39 โ โ โ ).json() โ
โ 40 โ โ except (requests.ConnectionError, requests.Timeout): โ
โ 41 โ โ โ sleep(2) โ
โ 42 โ โ โ return self.api_call(method, args) โ
โ โ
โ โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ locals โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ โ
โ โ args = {'q': 'God Is Dead? Black Sabbath', 'index': 0, 'limit': 1} โ โ
โ โ method = 'search/track' โ โ
โ โ self = <deezer.api.API object at 0x000001FBFE8431C0> โ โ
โ โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ โ
โ โ
โ C:\Program Files\Python310\lib\site-packages\requests\models.py:978 in json โ
โ โ
โ 975 โ โ except JSONDecodeError as e: โ
โ 976 โ โ โ # Catch JSON-related errors and raise as requests.JSONDecodeError โ
โ 977 โ โ โ # This aliases json.JSONDecodeError and simplejson.JSONDecodeError โ
โ โฑ 978 โ โ โ raise RequestsJSONDecodeError(e.msg, e.doc, e.pos) โ
โ 979 โ โ
โ 980 โ @property โ
โ 981 โ def links(self): โ
โ โ
โ โญโโโโโโโโโ locals โโโโโโโโโโโฎ โ
โ โ kwargs = {} โ โ
โ โ self = <Response [403]> โ โ
โ โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
JSONDecodeError: Expecting value: line 1 column 1 (char 0)
Config File
[downloads]
# Folder where tracks are downloaded to
folder = "C:\\Users\\ylmz\\StreamripDownloads"
# Put Qobuz albums in a 'Qobuz' folder, Tidal albums in 'Tidal' etc.
source_subdirectories = false
# Put tracks in an album with 2 or more discs into a subfolder named `Disc N`
disc_subdirectories = true
# Download (and convert) tracks all at once, instead of sequentially.
# If you are converting the tracks, or have fast internet, this will
# substantially improve processing speed.
concurrency = false
# The maximum number of tracks to download at once
# If you have very fast internet, you will benefit from a higher value,
# A value that is too high for your bandwidth may cause slowdowns
# Set to -1 for no limit
max_connections = 6
# Max number of API requests per source to handle per minute
# Set to -1 for no limit
requests_per_minute = 60
[qobuz]
# 1: 320kbps MP3, 2: 16/44.1, 3: 24/<=96, 4: 24/>=96
quality = 3
# This will download booklet pdfs that are included with some albums
download_booklets = true
# Authenticate to Qobuz using auth token? Value can be true/false only
use_auth_token = false
# Enter your userid if the above use_auth_token is set to true, else enter your email
email_or_userid = ""
# Enter your auth token if the above use_auth_token is set to true, else enter the md5 hash of your plaintext password
password_or_token = ""
# Do not change
app_id = ""
# Do not change
secrets = []
[tidal]
# 0: 256kbps AAC, 1: 320kbps AAC, 2: 16/44.1 "HiFi" FLAC, 3: 24/44.1 "MQA" FLAC
quality = 3
# This will download videos included in Video Albums.
download_videos = true
# Do not change any of the fields below
user_id = ""
country_code = ""
access_token = ""
refresh_token = ""
# Tokens last 1 week after refresh. This is the Unix timestamp of the expiration
# time. If you haven't used streamrip in more than a week, you may have to log
# in again using `rip config --tidal`
token_expiry = ""
[deezer]
# 0, 1, or 2
# This only applies to paid Deezer subscriptions. Those using deezloader
# are automatically limited to quality = 1
quality = 2
# An authentication cookie that allows streamrip to use your Deezer account
# See https://github.com/nathom/streamrip/wiki/Finding-Your-Deezer-ARL-Cookie
# for instructions on how to find this
arl = ""
# This allows for free 320kbps MP3 downloads from Deezer
# If an arl is provided, deezloader is never used
use_deezloader = true
# This warns you when the paid deezer account is not logged in and rip falls
# back to deezloader, which is unreliable
deezloader_warnings = true
[soundcloud]
# Only 0 is available for now
quality = 0
# This changes periodically, so it needs to be updated
client_id = ""
app_version = "1732092953"
[youtube]
# Only 0 is available for now
quality = 0
# Download the video along with the audio
download_videos = false
# The path to download the videos to
video_downloads_folder = "C:\\Users\\ylmz\\StreamripDownloads\\YouTubeVideos"
[database]
# Create a database that contains all the track IDs downloaded so far
# Any time a track logged in the database is requested, it is skipped
# This can be disabled temporarily with the --no-db flag
downloads_enabled = true
# Path to the downloads database
downloads_path = "C:\\Users\\ylmz\\AppData\\Roaming\\streamrip\\downloads.db"
# If a download fails, the item ID is stored here. Then, `rip repair` can be
# called to retry the downloads
failed_downloads_enabled = true
failed_downloads_path = "C:\\Users\\ylmz\\AppData\\Roaming\\streamrip\\failed_downloads.db"
# Convert tracks to a codec after downloading them.
[conversion]
enabled = false
# FLAC, ALAC, OPUS, MP3, VORBIS, or AAC
codec = "ALAC"
# In Hz. Tracks are downsampled if their sampling rate is greater than this.
# Value of 48000 is recommended to maximize quality and minimize space
sampling_rate = 48000
# Only 16 and 24 are available. It is only applied when the bit depth is higher
# than this value.
bit_depth = 24
# Only applicable for lossy codecs
lossy_bitrate = 320
# Filter a Qobuz artist's discography. Set to 'true' to turn on a filter.
# This will also be applied to other sources, but is not guaranteed to work correctly
[qobuz_filters]
# Remove Collectors Editions, live recordings, etc.
extras = false
# Picks the highest quality out of albums with identical titles.
repeats = false
# Remove EPs and Singles
non_albums = false
# Remove albums whose artist is not the one requested
features = false
# Skip non studio albums
non_studio_albums = false
# Only download remastered albums
non_remaster = false
[artwork]
# Write the image to the audio file
embed = true
# The size of the artwork to embed. Options: thumbnail, small, large, original.
# "original" images can be up to 30MB, and may fail embedding.
# Using "large" is recommended.
embed_size = "large"
# If this is set to a value > 0, max(width, height) of the embedded art will be set to this value in pixels
# Proportions of the image will remain the same
embed_max_width = -1
# Save the cover image at the highest quality as a seperate jpg file
save_artwork = true
# If this is set to a value > 0, max(width, height) of the saved art will be set to this value in pixels
# Proportions of the image will remain the same
saved_max_width = -1
[metadata]
# Sets the value of the 'ALBUM' field in the metadata to the playlist's name.
# This is useful if your music library software organizes tracks based on album name.
set_playlist_to_album = true
# If part of a playlist, sets the `tracknumber` field in the metadata to the track's
# position in the playlist instead of its position in its album
renumber_playlist_tracks = true
# The following metadata tags won't be applied
# See https://github.com/nathom/streamrip/wiki/Metadata-Tag-Names for more info
exclude = []
# Changes the folder and file names generated by streamrip.
[filepaths]
# Create folders for single tracks within the downloads directory using the folder_format
# template
add_singles_to_folder = false
# Available keys: "albumartist", "title", "year", "bit_depth", "sampling_rate",
# "id", and "albumcomposer"
folder_format = "{albumartist} - {title} ({year}) [{container}] [{bit_depth}B-{sampling_rate}kHz]"
# Available keys: "tracknumber", "artist", "albumartist", "composer", "title",
# and "albumcomposer", "explicit"
track_format = "{tracknumber:02}. {artist} - {title}{explicit}"
# Only allow printable ASCII characters in filenames.
restrict_characters = false
# Truncate the filename if it is greater than this number of characters
# Setting this to false may cause downloads to fail on some systems
truncate_to = 120
# Last.fm playlists are downloaded by searching for the titles of the tracks
[lastfm]
# The source on which to search for the tracks.
source = "deezer"
# If no results were found with the primary source, the item is searched for
# on this one.
fallback_source = "soundcloud"
[cli]
# Print "Downloading {Album name}" etc. to screen
text_output = true
# Show resolve, download progress bars
progress_bars = true
# The maximum number of search results to show in the interactive menu
max_search_results = 100
[misc]
# Metadata to identify this config file. Do not change.
version = "2.0.6"
# Print a message if a new version of streamrip is available
check_for_updates = true
Operating System
Windows 10 19044
streamrip version
2.0.5
Screenshots and recordings
No response
Additional context
Before you mention, I tried different ARL's 5 times and I have my own Deezer premium sub, I looked at similiar issues but none solved my issue including uninstalling and reinstalling.
Is this project abandoned?
@Appmeurtre kind of, at least the issues are, as far as I can see, mostly ignored. Atleast by the original maintainer. Some users still commit PR's and sometimes they get merged.