Compare commits

..

2 Commits

Author SHA1 Message Date
github-actions[bot]
d203b114a8 Updated modules.json after parse 2026-06-16 03:26:11 2026-06-16 03:26:11 +00:00
github-actions[bot]
0e4c07b5b5 Added and updated repositories 2026-06-16 03:25:34 2026-06-16 03:25:35 +00:00
3 changed files with 600 additions and 2 deletions

View File

@@ -0,0 +1,241 @@
# meta developer: @SunnexGB
# meta pic: https://r2.fakecrime.bio/uploads/f49a9294-36ad-4fc4-801f-48cb049111d6.jpg
# meta banner: https://r2.fakecrime.bio/uploads/f49a9294-36ad-4fc4-801f-48cb049111d6.jpg
# meta fhsdesc: Spotify, music, музыка, спотифай,Lyrics, слова, текст, трек, песня
# все же я не знаю трек или сонг, так что пусть будет трек, а не сонг потому что интуитивнее поняттнее,наверное?
# крутой баннер да?
#current version
__version__ = (1, 1, 3)
from herokutl.types import Message
from .. import loader, utils
from ..types import InlineCall
import asyncio
@loader.tds
class SpotifyLyrics(loader.Module):
strings = {
"name": "migration",
"no_SpotifyLyrics": "u're not use SpotifyLyrics,install my new module.",
"inline_msg": "if u ready to migration pls click on the button.",
"already": "module already install, u're ready for migration ur db?",
"restartf": "u ready restart ur ub?",
"restartf_btn": "Ok",
"done": "migration is done.",
"confirm": "confirm",
"install": "install LiveLyrics",
"close": "close",
"migrate_db": "Yep"
}
strings_ru = {
"no_SpotifyLyrics": "ты не юзал SpotifyLyrics,установи новый модуль.",
"inline_msg": "если вы готовы к миграции нажмите на кнопку ниже.",
"already": "модуль уже стоиит,готовы к переносу данных?",
"restartf": "вы готовы к перезапуску юб?",
"restartf_btn": "Лан",
"done": "миграция завершена.",
"confirm": "подтвердить",
"install": "установить LiveLyrics",
"close": "закрыть",
"migrate_db": "Ага"
}
async def install_livelyrics(self, call: InlineCall):
m = self.lookup("Modules") or self.lookup("loader")
await m.download_and_install("https://raw.githubusercontent.com/SunnexGB/Heroku-Modules/refs/heads/main/LiveLyrics.py")
await call.delete()
async def confirm(self, call: InlineCall):
config = self.db.get("SpotifyLyrics", "__config__") or {}
self.db.set("LiveLyrics", "__config__", config)
await asyncio.sleep(1)
await self.invoke("unloadmod", "-f SpotifyLyrics", "me")
await call.edit(self.strings["done"])
await asyncio.sleep(2)
await call.edit(
self.strings["restartf"],
reply_markup=[
[{"text": self.strings["restartf_btn"], "callback": self.restartf}],
[{"text": self.strings["close"], "callback": self.close}],
],
)
async def migrate_db(self, call: InlineCall):
await call.edit(
self.strings["inline_msg"],
reply_markup=[
[{"text": self.strings["confirm"], "callback": self.confirm}],
[{"text": self.strings["close"], "callback": self.close}],
],
)
async def restartf(self, call: InlineCall):
await call.delete()
await self.invoke("restart", "-f", "me")
async def close(self, call: InlineCall):
await call.delete()
@loader.command()
async def snowl(self, message: Message):
SL_cfg = self.db.get("SpotifyLyrics", "__config__")
if SL_cfg is None:
return await utils.answer(
message,
self.strings["no_SpotifyLyrics"],
reply_markup=[
[{"text": self.strings["install"], "callback": self.install_livelyrics}],
[{"text": self.strings["close"], "callback": self.close}],
],
)
if self.lookup("LiveLyrics"):
return await utils.answer(
message,
"модуль уже стоиит,готовы к переносу данных",
reply_markup=[
[{"text": self.strings["migrate_db"], "callback": self.migrate_db}],
[{"text": self.strings["close"], "callback": self.close}],
],
)
await utils.answer(
message,
self.strings["inline_msg"],
reply_markup=[
[{"text": self.strings["confirm"], "callback": self.confirm}],
[{"text": self.strings["close"], "callback": self.close}],
],
)
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣠⠤⠤⣄⠠⠤⣤⠤⢤⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠤⠒⠉⠁⠀⠀⠀⣠⠖⠉⣀⡀⣀⣤⠍⢩⣵⡢⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠⠖⠋⠁⠀⠀⠀⠀⢀⣴⠊⠀⣠⠞⣠⠞⠉⢳⣦⠀⡈⠻⣦⠑⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡤⠖⠉⠀⠀⠀⠀⠀⠀⣠⣴⡿⠁⠀⡰⢁⡾⠁⠐⠃⢸⡇⠀⠸⡄⠀⠀⠈⠷⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⣆⠀⠀⠀⠀⣀⣠⡴⡿⠁⣼⡅⠀⣰⢣⢿⡇⡴⠀⠀⣾⡅⠀⠀⣧⠀⠀⠀⠀⢈⢂⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠛⠻⠿⠿⠷⠒⠒⠋⠁⡏⠸⠁⣸⣿⠇⢀⣧⠏⢸⡿⠁⠀⡼⠙⣧⠀⢀⣿⡄⢀⠠⠀⠘⡄⢡⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠁⣤⣠⣯⢿⠀⢸⣟⡴⡾⣳⣴⣾⡷⢠⠛⢆⣾⣿⡇⡀⠀⣦⠀⡇⠀⢣⠀⠀⠀⠀⠀⠀
# ⢠⡄⠀⡄⠀⠀⠀⢀⣒⣒⣶⡀⠀⠀⠀⠀⠀⠀⠀⠀⢼⠀⣿⡿⣿⢸⠐⣿⣿⣿⣿⡿⣶⡿⢷⣯⣮⣾⢯⡟⣇⡇⣸⡏⢠⣠⠀⠀⢣⠀⠀⠀⠀⠀
# ⠀⣿⣿⣿⣦⡄⣤⡾⢿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⢸⢠⣿⣿⣿⣼⣇⡿⣟⠛⠛⠃⠀⠀⠁⠉⣠⣶⣷⣄⣿⣼⣿⡆⣸⣧⡀⠀⠀⢆⠀⠀⠀⠀
# ⢸⣿⣿⡿⠛⠋⠉⢩⣍⣉⣻⡇⠀⠀⠀⠀⠀⠀⠀⠀⡇⣼⣿⢹⢿⡝⢿⣇⡈⠃⠀⠀⠀⠀⠀⠀⠛⢿⡏⣿⣿⢿⣿⡱⡸⠁⠈⠢⣀⠘⡆⠀⠀⠀
# ⠈⣿⡏⣤⠄⠘⠃⠸⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⢰⢱⠻⡇⢸⠸⣷⡀⣿⡁⠀⠀⠀⠀⡀⠀⠀⠀⢀⡼⣯⠁⣾⣿⠁⠀⠀⠀⠀⠈⠑⠃⠀⠀⠀
# ⢠⣬⣼⣧⡀⠀⠀⠀⢹⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⣾⣿⡦⠧⠬⣧⡸⣿⣧⠙⢠⡀⠀⠀⠀⠀⣀⡤⠊⠀⣿⣰⢿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⢸⣿⣿⣿⡀⢀⡀⠀⣸⣿⣿⡁⠀⠀⠀⠀⠀⠀⣰⣯⠟⠛⠛⠛⢿⣭⣿⣿⠷⣶⣟⣷⣶⣒⡉⠁⠀⠀⠜⢹⣿⡼⡿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⠈⠛⠛⠛⠛⠛⠛⠓⠛⠛⠛⠃⠀⠀⠀⠀⢀⢼⣿⣏⣰⣿⣷⣴⣦⠙⣿⣿⡛⠛⠿⠥⢯⣀⣈⡇⢀⠀⠚⢙⡞⠑⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⢽⣿⣿⢻⣿⣿⣟⣿⣿⢿⣿⢦⣄⠀⣀⣀⠉⠩⠿⣷⣾⣭⠑⠒⠢⢄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⠏⠈⣿⣿⣿⣿⣿⣿⣿⣿⣾⣿⣧⢽⣯⣁⠀⠀⠀⠀⠒⠗⢺⣿⣭⣤⣄⠙⠢⣀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⠏⠀⠀⣿⡟⠈⠻⣿⣿⣻⣿⣿⣟⣡⣴⣿⣿⣷⡞⠒⠒⠶⠶⠶⠤⣽⡿⠽⠦⣄⣀⠑⡄⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⠋⠀⢀⣴⣿⡇⠀⠀⠉⠻⣥⣽⠿⠋⠙⠻⣽⣿⣤⠃⠀⠀⠀⠀⠀⠀⠀⠁⠀⠀⠀⠈⠑⠳⣄⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠃⠀⣠⠊⣼⣿⡇⠀⠀⠐⢿⡿⠁⠀⠀⠀⢀⣀⣩⣿⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢢⡀⠀⠀
# ⠀⠀⣠⠤⢤⣀⣀⡀⠀⠀⠀⠀⢠⠏⢀⡜⠁⢰⠇⣿⣿⠀⠀⠀⣈⡇⠀⠀⠀⠀⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢳⠀⠀
# ⠀⠀⠳⡀⠀⠀⠀⠉⠉⠙⠓⠒⠳⠤⠯⣄⡀⡞⠀⡿⣡⡴⠞⠋⢙⡇⠀⠀⠀⠀⢟⡛⠀⣿⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀
# ⠀⠀⠀⠹⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠁⠈⣯⣉⠀⠀⠀⢸⡇⠀⠀⠀⢰⡶⠀⢠⠟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡼⠀⠀
# ⠀⠀⠀⠀⢹⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣧⠀⢰⠃⠟⢳⣄⠀⣾⡇⠀⠀⠀⠈⠀⣰⣯⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡜⠁⠀⠀
# ⠀⠀⠀⠀⠈⠓⠛⠙⣹⡟⠉⠉⡇⠀⠀⠀⣿⠀⠞⡸⠀⡜⢿⣷⡈⢿⡀⠀⠀⠀⣼⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣠⠤⢆⣴⠉⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⣴⠏⠀⠀⢠⡇⠀⠀⠀⣿⠀⠀⠁⢰⠁⢸⠻⣟⠾⡇⠀⢀⣾⣿⡇⣠⣴⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣰⣾⣿⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⣼⠋⠀⠀⠀⢸⡇⠀⠀⠀⠈⠙⠒⠒⠢⠭⣍⠀⢸⠓⢤⠴⠚⣿⡉⠀⠛⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣟⡏⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⡜⡽⠀⠀⠀⠀⢸⡇⠀⠀⠀⢀⣀⣀⣀⡀⠀⢸⠀⠺⠤⠼⢠⣾⡉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣿⠟⠻⣷⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⣸⢹⡇⠀⠀⠀⠀⢠⠏⠉⠉⠉⠉⠉⠉⠉⡝⢣⠘⡆⢰⣠⠞⠉⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⠘⡆⠀⢹⡄⠀⠀⠀⠀
# ⠀⠀⠀⢀⡇⣿⡇⠀⠀⠀⡰⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢆⠷⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠃⠀⠸⡄⠸⡇⠀⠀⠀⠀
# ⠀⠀⠀⢸⠀⡿⣇⠀⣠⠎⠀⠀⠀⠀⠀⠀⠀⣠⠎⠀⢀⠔⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡆⠈⣧⠀⠱⣸⣇⠀⠀⠀⠀
# ⠀⠀⠀⢾⠀⡇⢻⣾⠃⠀⠀⠀⠀⠀⠀⢠⢺⠃⠀⡴⢋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠇⠀⠘⡗⢆⠻⡏⠀⠀⠀⠀
# ⠀⠀⠀⢸⠀⡷⢁⠋⠓⠦⡴⠂⠀⠀⠀⣼⠃⢠⠎⠀⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡤⠀⠀⠀⢸⠀⡄⠀⠘⠞⢱⣧⠀⠀⠀⠀
# ⠀⠀⠀⣨⣇⢳⡎⢀⡴⠻⠇⠀⠀⠀⠀⠃⢠⠋⠀⠀⢹⠀⠀⠀⠀⠀⠀⠀⠀⠀⢦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡞⢦⠑⠀⠀⠀⢇⠸⣇⠀⠀⠀
# ⠀⢀⢸⠃⠈⣦⣷⣅⡀⢀⡄⠀⠀⠀⠀⢠⠇⠀⠀⠀⠀⣇⠀⠀⠀⠀⠀⠀⠀⠀⠈⠳⡀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡃⠈⠃⠈⠐⠀⠈⢢⡓⢆⠀⠀
# ⢠⢃⡏⠀⣰⣿⠀⠉⠉⠉⡇⠀⠀⢀⠀⡞⠀⠀⠀⠀⠀⠸⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢦⡀⠀⠀⠀⠀⠀⠀⠀⢣⠀⠀⠀⣄⡀⠀⠀⢻⢸⠀⠀
# ⡇⢸⣾⢠⠇⢿⡀⠀⠀⠀⡧⠀⢰⡇⢸⠁⢰⠀⠀⠀⠀⠀⢳⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠑⢄⠀⠀⠀⠀⠋⠀⠀⢣⠀⠀⢱⠈⠒⢄⢸⠀⡇⠀
# ⠁⢸⢹⡼⠀⠀⠙⠒⢀⢜⡡⢠⠋⡇⡏⠀⢸⠀⠀⠀⠀⠀⠈⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠣⡀⠀⠀⡄⠀⠀⠀⢻⠀⠀⠀⠀⠀⢹⠀⡿⡄
# ⠀⠀⠈⠳⣤⢀⣠⠶⠓⢩⡡⠃⠀⢷⠀⠀⣼⠀⠀⠀⠀⠀⠀⠸⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⢄⠀⡇⠀⠀⠀⠈⢧⠀⠀⠀⠀⡎⡀⡗⢵
# ⠀⠀⠀⠀⠋⠉⠀⢀⡠⠋⠀⠀⠀⡎⠀⠀⠇⠀⠀⠀⠀⠀⠀⠀⢳⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢢⡁⠀⠀⠀⠀⠈⢧⠀⢀⡼⠞⣧⠁⢸
# ⠀⠀⠀⠀⠀⠀⠈⠉⠀⠀⠀⠀⢰⠃⠀⠀⡃⠀⠀⠀⠀⠀⠀⠀⠈⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠱⡀⠀⠀⠀⠀⠈⣖⠉⠀⣰⠃⠀⠈
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡼⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠸⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠱⡀⠀⠀⠀⠀⠘⡄⠖⠁⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⢳⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⣀⠱⡀⠀⠀⠀⠀⠹⡀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠁⠀⠀⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⡀⡈⡇⠀⠀⠀⠀⠀⢀⡠⠔⠒⠋⠉⠀⠀⠀⢹⢳⠀⠀⠀⠀⠀⢳⡀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡾⠀⠀⠀⠀⣇⣠⡤⠒⠒⠛⠉⠉⠉⠹⡤⠋⠀⠀⠀⢀⡴⠋⠀⠀⠀⠀⠀⠀⠀⠀⢸⢸⠀⢀⡠⠖⠋⠉⣧⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠻⠷⢶⣶⠖⠚⠀⡇⠀⠀⠀⠀⠀⠀⠀⠈⠑⠒⠒⠊⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠈⠉⠉⠀⣀⡤⠞⠁⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡤⠖⠚⠛⠲⣾⣷⣦⣤⠤⠤⠶⠦⠤⠤⣤⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠐⢁⡠⠖⠀⠉⠒⣬⣿⣿⣿⣡⠤⠴⠒⠲⠤⢄⠀⠈⠉⠓⠢⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠎⡴⠋⢀⠤⠒⣩⣿⣿⠟⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠓⠒⠽⣶⣾⣶⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠎⠎⠀⠐⠁⢠⣶⡿⠋⠁⠀⠀⠀⠀⠀⠀⣀⡴⠶⠖⠂⠀⠀⠀⣀⠀⠀⠈⠙⣿⣿⣿⠙⡄⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⢠⢞⠿⣯⢳⠀⠀⣼⢆⡀⠀⠀⠀⡸⠋⠀⠀⠀⠀⠀⠀⠀⡠⠞⠁⠀⠀⠀⠀⠀⠀⠀⢉⠻⣄⠀⠀⠈⢻⣿⣷⡸⡀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠈⠛⠳⣵⡋⠀⣸⢯⠎⠀⠀⢀⡜⡡⠀⠀⠀⠀⠀⠀⢠⠞⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢣⠙⡆⠀⠀⠀⠹⣿⣏⡇⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠯⠼⣰⡿⠃⠀⠀⢠⣾⢾⠀⠀⠀⠀⠀⠀⡠⢁⡤⠊⠀⠀⠀⠀⠀⠀⢠⠀⠀⠀⠀⡇⠸⡄⠀⠀⠱⣹⡿⠇⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⠏⠀⠀⠀⣠⡿⡵⠁⠀⠀⠀⡤⠀⡼⣡⠏⠀⠀⠀⢀⠀⠀⠀⠀⢸⠀⠀⠀⠀⢇⢁⢳⠀⠀⠀⢻⡅⡆⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡰⠁⠀⠀⢀⢞⡟⡼⠁⠀⠀⠀⣰⠁⣼⡿⠁⠀⡰⢡⣦⡏⠀⠀⠀⠀⡼⠀⠀⠀⠀⢼⢸⠸⡄⠀⠀⠀⣿⡇⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠞⠀⠀⢀⠔⠁⡞⣼⢃⡆⠀⠀⢠⠇⣰⡟⠤⢤⢾⣴⡵⣵⣧⠀⠀⠀⠀⡇⠀⠀⠀⡆⡬⠀⡇⡇⠀⠀⠀⢹⡇⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⡠⠘⢁⠔⠁⠀⣠⠂⣸⢰⣿⢸⠀⠀⠀⡜⢀⡟⣠⢔⣵⠿⠋⢀⣾⠆⠀⠀⠀⡼⠀⠀⣀⣸⢁⡇⠀⣿⡇⠀⠀⠀⢸⡇⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⢀⣀⡤⠴⠋⠀⡀⠋⢀⣴⠞⠁⡴⣇⣾⡇⢼⠀⠀⢀⣿⣸⣯⣶⣿⣧⣤⣄⣾⠋⠀⠀⢠⣴⡇⠀⠀⣬⡟⣾⣿⡀⢻⡇⠀⠀⠀⠸⡇⠀⠀⠀⠀⠀⠀⠀
# ⣭⢭⡴⢋⡴⠋⢀⠔⢀⣴⡿⠃⢠⢞⡵⣿⣏⣾⢸⣰⡀⠀⢻⢻⡏⣿⣿⣿⣿⠻⣷⠒⠦⠴⠿⣟⣁⣀⣼⣟⡴⠁⠘⡧⣿⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀
# ⡔⣡⣴⠎⠀⣠⢃⣴⡿⠋⢀⣴⠷⡏⢀⠙⣟⢼⡄⣿⣇⠀⢸⣾⡇⣽⣬⡽⠋⠀⠀⠀⠀⠀⠀⠀⢨⣿⣿⣿⣤⡀⠀⢳⡿⠀⠀⠀⢸⢠⡇⠀⠀⠀⠀⠀⠀⠀
# ⣼⣿⠃⠀⣰⢯⣾⠏⣠⡴⠛⠁⣸⢁⠆⠀⠘⣺⠳⣿⠻⣄⠀⣿⣧⠠⠅⠁⠀⠀⠀⠀⠀⠀⠀⠀⢻⠿⢿⡿⠙⢿⣧⣼⠃⡄⠀⢀⣾⢸⡇⠀⠀⠀⠀⠀⠀⠀
# ⣿⡇⠀⢀⣿⣿⣯⠞⠋⠀⠀⢠⢃⠎⠀⢰⢀⡏⢠⣿⣿⣿⡷⢼⣎⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠳⢯⣤⠤⢺⡿⣣⢾⠄⣰⣿⡇⣿⢿⡀⠀⠀⠀⠀⠀⠀
# ⣿⠀⢸⢸⣿⡿⠁⠀⠀⠀⢀⣯⠏⠀⣰⠃⡸⡀⣼⣿⣿⣿⣿⡄⠉⠀⠀⠀⠀⠀⠀⠀⠀⠂⠀⠀⠀⠀⠂⠀⣤⣿⣾⣿⣯⣾⣿⣿⡼⣿⢿⣿⣄⠀⠀⠀⠀⠀
# ⢿⡀⢸⠘⡿⠁⠀⠀⠀⢀⠞⠁⠀⣰⠇⡴⣱⢱⣿⣿⣿⣿⠁⠙⢆⠀⠀⠀⠀⠀⢀⢄⠀⠀⠀⠀⠀⠀⠀⣴⣿⣿⣿⣿⣿⢹⡿⠛⡇⢹⠘⣿⡷⢝⣲⡶⠞⠀
# ⠓⢷⠼⣧⢳⡀⠀⢀⡴⠋⠀⢀⡼⠃⡼⣵⢣⣿⣿⡿⢿⣿⣧⠀⠀⠑⣄⠀⠀⠀⠀⠈⠀⠀⠀⠀⢀⣤⣾⣿⣿⣿⣿⡿⣿⠀⡇⢸⡇⣸⠀⣿⣿⠀⠀⠀⠀⠀
# ⠀⠈⢢⡈⢷⣵⣔⡋⠀⠀⣠⠏⣠⢞⣽⣿⣿⣿⣿⢉⣹⣿⣿⣷⣤⠀⠀⠙⢦⡀⢀⣀⣤⣴⠒⠊⠉⠉⠉⠉⠙⠻⣿⣷⠹⣧⢣⣾⠃⡟⢀⣿⠟⠀⠀⠀⠀⠀
# ⠀⠀⠀⣩⠦⣵⣯⣭⣵⠞⣡⡾⣣⣾⣿⠟⠛⠉⠸⣏⠀⠚⣿⣿⣿⣿⣷⣠⣤⣭⣿⣿⡟⢿⣦⠀⢀⠀⠀⠀⠀⠀⠀⠙⣷⣯⣯⢎⡼⣡⠞⠁⠀⠀⠀⠀⠀⠀
# ⢀⡴⠊⢡⠞⢁⡰⢊⣵⡾⠟⠋⠉⢹⣹⠀⠀⠀⠀⠈⠒⣞⠁⣹⠿⡷⣮⣭⣭⣽⢿⢯⡗⠈⢻⣷⡋⠀⠀⠀⠀⠀⠀⠀⠘⣿⣿⡻⣍⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⠉⠖⢠⠋⣴⡫⡾⠋⠁⠀⠀⠀⠢⣄⣏⡇⠀⠀⠀⠀⠀⠈⠋⠻⣤⢷⣃⣹⣏⣉⡦⠞⠁⢀⠞⠳⡳⡀⠀⠀⠀⠀⠀⠀⠀⢹⠑⠷⣌⠓⢤⡀⠀⠀⠀⠀⠀⠀
# ⡞⢠⣯⡿⠋⡜⠀⠀⠀⠀⠀⠀⠀⠀⢹⠻⡤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠁⠀⠀⠀⢀⡴⠀⠀⠀⠱⡑⡄⢀⡠⠤⠤⠤⠤⠬⠧⠤⠬⠷⣦⣈⡓⠦⣀⠀⠀⠀
# ⠀⣾⠋⢠⣾⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣇⢧⠀⠉⠓⠲⠤⣀⣀⠀⠀⠀⠀⠀⠀⡰⠋⠀⠀⠀⣀⠴⢛⣉⡠⠤⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⣿⣧⡈⠙⠢⣄
# ⢰⠃⡴⡇⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⢸⡀⠀⠀⠀⠀⠀⠈⠉⠙⠂⠀⠀⠀⠀⠀⢀⡠⣊⠥⠚⠁⣀⡤⠴⠒⠋⠁⠀⠀⠀⠀⠀⠀⠀⢠⣾⣿⡇⠀⠘⢦
# ⣿⢞⡾⢠⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣇⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣻⢚⣁⣤⠖⠋⣁⡤⣤⡴⠒⠒⠋⠁⢀⣀⣀⣀⡤⡼⣧⡟⢿⠀⠀⠈
# ⣏⣼⡇⣿⢧⠀⠀⠀⠀⠀⠀⠐⡄⠀⠀⠀⢸⢹⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢩⣿⣶⣶⣾⣇⠔⣉⣤⡖⠿⣍⣹⣿⣿⣯⣿⡿⠋⢹⡜⣾⡇⠀⠀
# ⣿⣿⢹⡇⢸⠀⠀⠀⠀⠀⠀⠀⠸⡄⠀⠀⠈⡏⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠀⣾⣿⣿⣿⣿⣿⡉⠉⣿⣿⢄⡀⠀⠈⠉⣳⠀⠀⠀⣾⣷⢸⡇⠀⠀
# ⢿⣿⣸⡇⣿⡇⠀⠀⠀⠀⠀⠀⠀⡗⠀⠀⢀⡵⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣸⣿⣿⣿⣿⣿⣿⣧⠀⣏⣋⠀⠀⠀⠀⠀⡇⠀⠀⠀⣿⣿⣿⡇⠀⢸
# ⠀⠻⡏⢧⣿⣿⡀⠀⠀⠀⠀⠀⠀⡆⢀⠔⠋⠀⠻⣷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣿⣿⣿⣿⣿⣿⣿⡿⠀⣿⡯⢹⣦⣀⣀⣠⠇⠀⠀⢸⣿⣿⣿⠁⢀⣿
# ⡀⠀⠙⢼⣿⣿⣧⠀⠀⠀⠀⠀⢠⠗⠁⠀⠀⠀⣰⠅⢺⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⣿⣿⣿⣿⣿⣿⠁⢰⣷⢤⡀⠀⠀⠀⠉⡇⠀⠀⢸⣿⡿⠃⢀⣾⠟
# ⢽⣆⠙⢆⡙⢿⣿⡆⠀⠀⠀⠀⠈⡶⣄⠀⢠⠞⠁⠀⠀⠉⣵⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⣿⣿⣿⣿⠃⠀⡾⠿⡀⠁⠀⠀⠀⠸⡇⠀⠀⣾⠟⠁⢠⠟⠁⠀
# ⠀⠙⢧⠀⠙⣦⣝⢷⠀⠀⠀⠀⠀⣧⠟⡟⠁⠀⠀⠀⢀⣀⣼⠻⣥⣄⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⠏⠀⢸⣿⠀⠈⠳⣄⠀⠀⡔⣧⠀⠀⣯⡇⣰⠃⠀⠀⠀
# ⠀⠀⠀⡄⠀⠸⣿⣧⣇⠀⠀⠀⠀⢿⠀⠻⣦⠀⠀⡾⣍⠀⠀⠀⠈⠻⣿⣦⡀⠀⠀⠀⠀⠘⣿⣿⡟⠀⢠⣧⡁⠀⠂⠤⢴⡓⠋⠀⡏⠀⠀⣿⠀⡇⠀⠀⠀⠀
# ⢧⠀⢠⣇⠀⠀⣿⣿⢻⡄⠀⠀⠀⢸⣄⡀⠈⠳⣦⠿⢛⡷⠀⠠⠖⠉⠀⠙⢿⢢⣀⠀⠀⠀⣿⡿⠀⢀⣞⠏⠈⢦⡀⠀⣴⠃⢀⣾⠃⠀⠀⣿⡀⣇⠀⠀⠀⠀
# ⢦⣠⢾⠏⢀⣼⡿⠇⢸⣧⠀⠀⠀⠘⡿⣿⣦⣄⡈⠉⠙⢷⣼⣷⡀⢀⡠⠖⠊⠉⠻⡗⢤⣰⡟⠁⣠⣿⠟⠤⣄⡈⠳⣰⡋⢠⡾⠃⠀⠀⢠⠿⣷⡈⠣⣄⣀⡴
# ⡯⠵⡷⠖⠋⣽⠀⠀⣾⣿⡀⠀⠀⠀⠹⣄⠈⠛⠻⠿⠶⣾⣷⣼⣇⢺⣹⣧⠀⠀⣠⠔⠛⠿⣿⣶⠿⠁⠀⠀⠀⣸⣶⣷⠾⠋⠀⠀⠀⢀⡞⠀⠈⠉⠙⠛⠉⠀
# ⠀⠀⡇⡀⠀⡏⠀⡸⣿⣿⡇⠀⠀⠀⠀⠙⣦⡀⠀⠀⠀⠀⠀⠀⢨⡉⠁⢸⣷⡎⠀⠀⠀⢠⠃⠈⢳⡀⠀⢀⣴⠛⠉⠁⠀⠀⠀⢀⣴⠙⡆⠀⠀⠀⠀⠀⠀⠀
# ⠀⡸⣱⠃⠀⣷⢰⠃⣿⣹⡇⠀⠀⠀⠀⠀⠈⠛⢶⣤⣀⣀⣰⣶⣶⣿⣿⣿⡿⠟⠦⣄⢀⠏⠀⠀⠀⢙⣦⣾⣿⣇⠀⠀⠀⢀⣶⠉⢸⡇⢳⠀⠀⠀⠀⠀⠀⠀
# ⢰⠃⡏⠀⠀⢿⡏⠀⢻⡳⡇⠀⠀⠀⠀⠀⠀⠀⠀⢸⡉⠉⠛⠛⠛⠉⠉⠀⠀⠀⠀⠈⠉⠀⠀⠀⢠⣾⣿⣿⣿⣿⣿⠓⠚⣹⡇⠀⢸⡇⡜⠀⠀⠀⠀⠀⠀⠀
# ⢸⡈⣷⠀⠀⠘⣿⡀⠀⠙⢻⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠃⢻⣿⣿⣿⣿⠃⠀⢠⡟⠀⢠⡿⣱⠃⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣦⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣯⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⠀⠀⠀⠀⢀⣀⣀⣀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣻⣿⣿⣿⣿⠟⠙⣿⣿⣿⣶⣶⣶⡞⠉⠀⡉⠒⢤
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣇⠀⠀⠈⠻⠟⠋⠀⠀⠉⠒⠤⢥⣤⡬
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⣿⣿⣿⣿⠿⢿⣿⣿⠿⢿⣿⡿⢿⣿⣿⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⣿⣿⣿⠋⢻⣧⣾⣏⠙⣷⣿⣉⣷⣴⡿⢿⣿⣿⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣀⣼⣿⣿⣿⣧⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣾⣿⣿⣿⣷⣶⣶⣶⣤⣤⣀⣀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣴⣶⣿⣿⣶⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠿⢿⣿⣶⣶
# ⠀⠀⠀⠀⠀⠀⠀⠀⡀⣠⠴⠒⠒⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠿⠿⣛⣛⣯⣭⣭⣿⣿⣿⠿⠿⢿⣿⣿⣿⣿⣿⡿⠿⢻⣿⣿⣷⣶⣿⣿⣿⠿⠛⠋
# ⠀⠀⠀⠀⠀⠀⠀⠈⠓⠮⣙⠢⠶⣿⣿⡿⢿⣻⣿⣿⣿⣶⣶⣶⣾⣿⣿⣿⣿⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣿⣿⣿⣿⣶⣿⣿⣿⣿⣿⡿⠟⠋⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠉⠛⠛⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⣿⣿⠛⠉⠉⠉⠿⠟⢹⣿⣿⣿⣿⣿⣿⣿⣟⠉⠉⠁⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠉⠙⡟⣿⣿⣿⣿⣇⠙⠋⠀⠀⠀⠀⠀⢠⠿⣿⣿⣿⣿⣿⣿⣿⣿⡟⠂⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠻⢸⣿⣿⣿⣿⣧⡀⠀⠀⠀⠀⠀⠀⢰⣿⣿⣿⣿⣿⣿⢿⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⢿⣿⣿⣿⣿⣿⣷⣦⣤⡴⠚⢑⣿⣿⣿⣿⡿⠙⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⡸⠟⠛⢿⣿⣿⣿⣿⣷⣾⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠎⠀⠀⢀⣿⣿⡿⠁⠀⠈⠁⠉⠩⢐⣿⣿⣿⣧⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⢤⣤⡂⠀⢴⠞⣿⣿⠏⠀⠀⠀⠀⠀⠀⢀⣾⣿⣿⡿⠁⠀⠀⠉⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⣋⠀⠀⠉⢳⣾⣾⣿⣿⣦⣀⡀⠀⠀⠀⠀⢸⡛⣿⣿⡇⠀⠀⠀⠀⢸⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⡤⠤⣤⣄⣀⠀⣠⣤⣴⣷⣾⣿⣿⣷⣦⣄⣚⣉⣙⣛⣛⣛⠛⢳⡀⢀⠴⢦⠤⢭⣙⣿⡛⠒⣠⠆⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⢠⡤⠄⠖⠒⠒⠚⠋⠛⢆⠘⠻⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡀⠑⢋⣬⣥⣄⣀⠀⠰⠾⢿⣿⠟⠓⠒⣓⡄⠀⠀⠀⠀⠀⠀⠀⠀
# ⠘⢣⡀⢱⠖⢝⠻⡷⠾⠶⠾⡄⢀⡀⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣻⣿⣿⣿⣿⣿⣿⣿⣿⣷⣶⣦⣤⣭⣧⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠹⣶⠂⠂⠁⠛⠂⠒⠤⢽⣿⠿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠛⠁⠀⢸⣿⣿⣿⣿⣿⣿⡻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⣟⠀⠀⠀⠀⠀⠀⠀⠀⠈⠑⠚⠛⠿⢿⣛⡻⢯⣁⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣤⡀⠀⣀⡠⠴
# ⠀⠀⠀⢹⡀⢐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠓⠀⠠⢼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⢿⣿⣿⣿⣿⣿⣿⣿⡿⣻⢟⡡⢎⡿
# ⠀⠀⠀⠘⡇⠘⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠀⠀⢿⣿⣿⣿⣿⣿⣿⠶⠋⣭⠞⢴⣟
# ⠀⠀⠀⠀⠃⠀⠑⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡷⠶⠶⠶⠿⢻⡿⠟⠋⡁⠀⠃⠀⠀⢠⣿
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠣⠑⠂⠀⠀⠀⠀⡀⠋⡠⠅⠈⠀⠠⢨⣿
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣇⡴⠀⠀⠀⠀⠋⠀⠀⠀⠀⠀⠀⠁⣾⠋
# ⠀⠀⠀⠀⠀⠆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣯⠄⡀⠀⠄⠀⠔⠁⠀⠀⠀⠀⠀⢰⠃⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢄⠀⠀⠀⠀⠀⠀⠀⠀⢨⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡎⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠱⡀⠀⠀⠀⠀⠀⢀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡘⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠢⡀⠀⠀⠀⡾⠛⠛⠛⠻⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠁⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⣸⣷⠿⣿⣿⣶⣤⣍⡻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⡎⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⡇⠀⠀⠈⠉⠛⠿⣿⣿⣦⣽⣛⣿⣿⣿⣯⣭⣥⣤⣶⣾⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⡰⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠁⠀⠀⠀⠀⠀⠀⠀⠉⠙⣿⣿⣿⠟⠋⠉⠉⠉⠉⠉⠙⠛⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠃⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⢿⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠋⠁⠀⠀⠀⠀⠀⠀⠂⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⢰⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢣⠀⠀⠀⠀⠀⠀⠀⠀⢠⡏⢸⠁⠀⠀⠀⠀⠀⠀⠀⠀⢠⠇⠀⠀⠀⠀⠀⠀⠀⠀⢰⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⡄⠀⠀⠀⠀⠀⠀⠀⠸⡇⡾⠀⠀⠀⠀⠀⠀⠀⠀⢀⡞⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢷⣄⣀⣀⣀⣀⣀⠤⢴⣧⣷⣦⣀⠀⠀⠀⠀⠀⢀⡞⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⠁⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⡈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀⡀⠀⠀⢀⣀⣀⠘⣿⣿⣿⣿⣿⣷⣶⣶⣴⡞⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢣⢀⣐⡒⠒⣉⣥⠤⣿⣿⣿⣿⣿⣿⣿⣿⣿⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⡼⠀⠀⠀⠀⠀⠀⠀⠀⠀

View File

@@ -0,0 +1,241 @@
# meta developer: @SunnexGB
# meta pic: https://r2.fakecrime.bio/uploads/ab42b5e2-91f1-4ed1-8002-51b3184e3839.jpg
# meta banner: https://r2.fakecrime.bio/uploads/ab42b5e2-91f1-4ed1-8002-51b3184e3839.jpg
# meta fhsdesc: YaMusic, music, музыка, яндекс музыка,Lyrics, слова, текст, трек, песня
# все же я не знаю трек или сонг, так что пусть будет трек, а не сонг потому что интуитивнее поняттнее,наверное?
# крутой баннер да?
#current version
__version__ = (1, 1, 3)
from herokutl.types import Message
from .. import loader, utils
from ..types import InlineCall
import asyncio
@loader.tds
class YandexLyrics(loader.Module):
strings = {
"name": "migration",
"no_YaMusicMod": "u're not use YaMusicMod,install my new module.",
"inline_msg": "if u ready to migration pls click on the button.",
"already": "module already install, u're ready for migration ur db?",
"restartf": "u ready restart ur ub?",
"restartf_btn": "Ok",
"done": "migration is done.",
"confirm": "confirm",
"install": "install LiveLyrics",
"close": "close",
"migrate_db": "Yep"
}
strings_ru = {
"no_YaMusicMod": "ты не юзал YaMusicMod,установи новый модуль.",
"inline_msg": "если вы готовы к миграции нажмите на кнопку ниже.",
"already": "модуль уже стоиит,готовы к переносу данных?",
"restartf": "вы готовы к перезапуску юб?",
"restartf_btn": "Лан",
"done": "миграция завершена.",
"confirm": "подтвердить",
"install": "установить LiveLyrics",
"close": "закрыть",
"migrate_db": "Ага"
}
async def install_livelyrics(self, call: InlineCall):
m = self.lookup("Modules") or self.lookup("loader")
await m.download_and_install("https://raw.githubusercontent.com/SunnexGB/Heroku-Modules/refs/heads/main/LiveLyrics.py")
await call.delete()
async def confirm(self, call: InlineCall):
config = self.db.get("YaMusicMod", "__config__") or {}
self.db.set("LiveLyrics", "__config__", config)
await asyncio.sleep(1)
await self.invoke("unloadmod", "-f YaMusicMod", "me")
await call.edit(self.strings["done"])
await asyncio.sleep(2)
await call.edit(
self.strings["restartf"],
reply_markup=[
[{"text": self.strings["restartf_btn"], "callback": self.restartf}],
[{"text": self.strings["close"], "callback": self.close}],
],
)
async def migrate_db(self, call: InlineCall):
await call.edit(
self.strings["inline_msg"],
reply_markup=[
[{"text": self.strings["confirm"], "callback": self.confirm}],
[{"text": self.strings["close"], "callback": self.close}],
],
)
async def restartf(self, call: InlineCall):
await call.delete()
await self.invoke("restart", "-f", "me")
async def close(self, call: InlineCall):
await call.delete()
@loader.command()
async def ynowl(self, message: Message):
SL_cfg = self.db.get("YaMusicMod", "__config__")
if SL_cfg is None:
return await utils.answer(
message,
self.strings["no_YaMusicMod"],
reply_markup=[
[{"text": self.strings["install"], "callback": self.install_livelyrics}],
[{"text": self.strings["close"], "callback": self.close}],
],
)
if self.lookup("LiveLyrics"):
return await utils.answer(
message,
"модуль уже стоиит,готовы к переносу данных",
reply_markup=[
[{"text": self.strings["migrate_db"], "callback": self.migrate_db}],
[{"text": self.strings["close"], "callback": self.close}],
],
)
await utils.answer(
message,
self.strings["inline_msg"],
reply_markup=[
[{"text": self.strings["confirm"], "callback": self.confirm}],
[{"text": self.strings["close"], "callback": self.close}],
],
)
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣠⠤⠤⣄⠠⠤⣤⠤⢤⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠤⠒⠉⠁⠀⠀⠀⣠⠖⠉⣀⡀⣀⣤⠍⢩⣵⡢⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡠⠖⠋⠁⠀⠀⠀⠀⢀⣴⠊⠀⣠⠞⣠⠞⠉⢳⣦⠀⡈⠻⣦⠑⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡤⠖⠉⠀⠀⠀⠀⠀⠀⣠⣴⡿⠁⠀⡰⢁⡾⠁⠐⠃⢸⡇⠀⠸⡄⠀⠀⠈⠷⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⣆⠀⠀⠀⠀⣀⣠⡴⡿⠁⣼⡅⠀⣰⢣⢿⡇⡴⠀⠀⣾⡅⠀⠀⣧⠀⠀⠀⠀⢈⢂⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠛⠻⠿⠿⠷⠒⠒⠋⠁⡏⠸⠁⣸⣿⠇⢀⣧⠏⢸⡿⠁⠀⡼⠙⣧⠀⢀⣿⡄⢀⠠⠀⠘⡄⢡⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠁⣤⣠⣯⢿⠀⢸⣟⡴⡾⣳⣴⣾⡷⢠⠛⢆⣾⣿⡇⡀⠀⣦⠀⡇⠀⢣⠀⠀⠀⠀⠀⠀
# ⢠⡄⠀⡄⠀⠀⠀⢀⣒⣒⣶⡀⠀⠀⠀⠀⠀⠀⠀⠀⢼⠀⣿⡿⣿⢸⠐⣿⣿⣿⣿⡿⣶⡿⢷⣯⣮⣾⢯⡟⣇⡇⣸⡏⢠⣠⠀⠀⢣⠀⠀⠀⠀⠀
# ⠀⣿⣿⣿⣦⡄⣤⡾⢿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⢸⢠⣿⣿⣿⣼⣇⡿⣟⠛⠛⠃⠀⠀⠁⠉⣠⣶⣷⣄⣿⣼⣿⡆⣸⣧⡀⠀⠀⢆⠀⠀⠀⠀
# ⢸⣿⣿⡿⠛⠋⠉⢩⣍⣉⣻⡇⠀⠀⠀⠀⠀⠀⠀⠀⡇⣼⣿⢹⢿⡝⢿⣇⡈⠃⠀⠀⠀⠀⠀⠀⠛⢿⡏⣿⣿⢿⣿⡱⡸⠁⠈⠢⣀⠘⡆⠀⠀⠀
# ⠈⣿⡏⣤⠄⠘⠃⠸⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⢰⢱⠻⡇⢸⠸⣷⡀⣿⡁⠀⠀⠀⠀⡀⠀⠀⠀⢀⡼⣯⠁⣾⣿⠁⠀⠀⠀⠀⠈⠑⠃⠀⠀⠀
# ⢠⣬⣼⣧⡀⠀⠀⠀⢹⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⣾⣿⡦⠧⠬⣧⡸⣿⣧⠙⢠⡀⠀⠀⠀⠀⣀⡤⠊⠀⣿⣰⢿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⢸⣿⣿⣿⡀⢀⡀⠀⣸⣿⣿⡁⠀⠀⠀⠀⠀⠀⣰⣯⠟⠛⠛⠛⢿⣭⣿⣿⠷⣶⣟⣷⣶⣒⡉⠁⠀⠀⠜⢹⣿⡼⡿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⠈⠛⠛⠛⠛⠛⠛⠓⠛⠛⠛⠃⠀⠀⠀⠀⢀⢼⣿⣏⣰⣿⣷⣴⣦⠙⣿⣿⡛⠛⠿⠥⢯⣀⣈⡇⢀⠀⠚⢙⡞⠑⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⢽⣿⣿⢻⣿⣿⣟⣿⣿⢿⣿⢦⣄⠀⣀⣀⠉⠩⠿⣷⣾⣭⠑⠒⠢⢄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⠏⠈⣿⣿⣿⣿⣿⣿⣿⣿⣾⣿⣧⢽⣯⣁⠀⠀⠀⠀⠒⠗⢺⣿⣭⣤⣄⠙⠢⣀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⠏⠀⠀⣿⡟⠈⠻⣿⣿⣻⣿⣿⣟⣡⣴⣿⣿⣷⡞⠒⠒⠶⠶⠶⠤⣽⡿⠽⠦⣄⣀⠑⡄⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⠋⠀⢀⣴⣿⡇⠀⠀⠉⠻⣥⣽⠿⠋⠙⠻⣽⣿⣤⠃⠀⠀⠀⠀⠀⠀⠀⠁⠀⠀⠀⠈⠑⠳⣄⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠃⠀⣠⠊⣼⣿⡇⠀⠀⠐⢿⡿⠁⠀⠀⠀⢀⣀⣩⣿⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢢⡀⠀⠀
# ⠀⠀⣠⠤⢤⣀⣀⡀⠀⠀⠀⠀⢠⠏⢀⡜⠁⢰⠇⣿⣿⠀⠀⠀⣈⡇⠀⠀⠀⠀⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢳⠀⠀
# ⠀⠀⠳⡀⠀⠀⠀⠉⠉⠙⠓⠒⠳⠤⠯⣄⡀⡞⠀⡿⣡⡴⠞⠋⢙⡇⠀⠀⠀⠀⢟⡛⠀⣿⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀
# ⠀⠀⠀⠹⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠁⠈⣯⣉⠀⠀⠀⢸⡇⠀⠀⠀⢰⡶⠀⢠⠟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡼⠀⠀
# ⠀⠀⠀⠀⢹⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣧⠀⢰⠃⠟⢳⣄⠀⣾⡇⠀⠀⠀⠈⠀⣰⣯⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡜⠁⠀⠀
# ⠀⠀⠀⠀⠈⠓⠛⠙⣹⡟⠉⠉⡇⠀⠀⠀⣿⠀⠞⡸⠀⡜⢿⣷⡈⢿⡀⠀⠀⠀⣼⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣠⠤⢆⣴⠉⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⣴⠏⠀⠀⢠⡇⠀⠀⠀⣿⠀⠀⠁⢰⠁⢸⠻⣟⠾⡇⠀⢀⣾⣿⡇⣠⣴⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣰⣾⣿⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⣼⠋⠀⠀⠀⢸⡇⠀⠀⠀⠈⠙⠒⠒⠢⠭⣍⠀⢸⠓⢤⠴⠚⣿⡉⠀⠛⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣟⡏⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⡜⡽⠀⠀⠀⠀⢸⡇⠀⠀⠀⢀⣀⣀⣀⡀⠀⢸⠀⠺⠤⠼⢠⣾⡉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣿⠟⠻⣷⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⣸⢹⡇⠀⠀⠀⠀⢠⠏⠉⠉⠉⠉⠉⠉⠉⡝⢣⠘⡆⢰⣠⠞⠉⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⠘⡆⠀⢹⡄⠀⠀⠀⠀
# ⠀⠀⠀⢀⡇⣿⡇⠀⠀⠀⡰⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢆⠷⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠃⠀⠸⡄⠸⡇⠀⠀⠀⠀
# ⠀⠀⠀⢸⠀⡿⣇⠀⣠⠎⠀⠀⠀⠀⠀⠀⠀⣠⠎⠀⢀⠔⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡆⠈⣧⠀⠱⣸⣇⠀⠀⠀⠀
# ⠀⠀⠀⢾⠀⡇⢻⣾⠃⠀⠀⠀⠀⠀⠀⢠⢺⠃⠀⡴⢋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠇⠀⠘⡗⢆⠻⡏⠀⠀⠀⠀
# ⠀⠀⠀⢸⠀⡷⢁⠋⠓⠦⡴⠂⠀⠀⠀⣼⠃⢠⠎⠀⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡤⠀⠀⠀⢸⠀⡄⠀⠘⠞⢱⣧⠀⠀⠀⠀
# ⠀⠀⠀⣨⣇⢳⡎⢀⡴⠻⠇⠀⠀⠀⠀⠃⢠⠋⠀⠀⢹⠀⠀⠀⠀⠀⠀⠀⠀⠀⢦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡞⢦⠑⠀⠀⠀⢇⠸⣇⠀⠀⠀
# ⠀⢀⢸⠃⠈⣦⣷⣅⡀⢀⡄⠀⠀⠀⠀⢠⠇⠀⠀⠀⠀⣇⠀⠀⠀⠀⠀⠀⠀⠀⠈⠳⡀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡃⠈⠃⠈⠐⠀⠈⢢⡓⢆⠀⠀
# ⢠⢃⡏⠀⣰⣿⠀⠉⠉⠉⡇⠀⠀⢀⠀⡞⠀⠀⠀⠀⠀⠸⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢦⡀⠀⠀⠀⠀⠀⠀⠀⢣⠀⠀⠀⣄⡀⠀⠀⢻⢸⠀⠀
# ⡇⢸⣾⢠⠇⢿⡀⠀⠀⠀⡧⠀⢰⡇⢸⠁⢰⠀⠀⠀⠀⠀⢳⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠑⢄⠀⠀⠀⠀⠋⠀⠀⢣⠀⠀⢱⠈⠒⢄⢸⠀⡇⠀
# ⠁⢸⢹⡼⠀⠀⠙⠒⢀⢜⡡⢠⠋⡇⡏⠀⢸⠀⠀⠀⠀⠀⠈⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠣⡀⠀⠀⡄⠀⠀⠀⢻⠀⠀⠀⠀⠀⢹⠀⡿⡄
# ⠀⠀⠈⠳⣤⢀⣠⠶⠓⢩⡡⠃⠀⢷⠀⠀⣼⠀⠀⠀⠀⠀⠀⠸⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⢄⠀⡇⠀⠀⠀⠈⢧⠀⠀⠀⠀⡎⡀⡗⢵
# ⠀⠀⠀⠀⠋⠉⠀⢀⡠⠋⠀⠀⠀⡎⠀⠀⠇⠀⠀⠀⠀⠀⠀⠀⢳⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢢⡁⠀⠀⠀⠀⠈⢧⠀⢀⡼⠞⣧⠁⢸
# ⠀⠀⠀⠀⠀⠀⠈⠉⠀⠀⠀⠀⢰⠃⠀⠀⡃⠀⠀⠀⠀⠀⠀⠀⠈⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠱⡀⠀⠀⠀⠀⠈⣖⠉⠀⣰⠃⠀⠈
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡼⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠸⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠱⡀⠀⠀⠀⠀⠘⡄⠖⠁⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⢳⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⣀⠱⡀⠀⠀⠀⠀⠹⡀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠁⠀⠀⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⡀⡈⡇⠀⠀⠀⠀⠀⢀⡠⠔⠒⠋⠉⠀⠀⠀⢹⢳⠀⠀⠀⠀⠀⢳⡀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡾⠀⠀⠀⠀⣇⣠⡤⠒⠒⠛⠉⠉⠉⠹⡤⠋⠀⠀⠀⢀⡴⠋⠀⠀⠀⠀⠀⠀⠀⠀⢸⢸⠀⢀⡠⠖⠋⠉⣧⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠻⠷⢶⣶⠖⠚⠀⡇⠀⠀⠀⠀⠀⠀⠀⠈⠑⠒⠒⠊⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠈⠉⠉⠀⣀⡤⠞⠁⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡤⠖⠚⠛⠲⣾⣷⣦⣤⠤⠤⠶⠦⠤⠤⣤⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠐⢁⡠⠖⠀⠉⠒⣬⣿⣿⣿⣡⠤⠴⠒⠲⠤⢄⠀⠈⠉⠓⠢⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠎⡴⠋⢀⠤⠒⣩⣿⣿⠟⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠓⠒⠽⣶⣾⣶⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠎⠎⠀⠐⠁⢠⣶⡿⠋⠁⠀⠀⠀⠀⠀⠀⣀⡴⠶⠖⠂⠀⠀⠀⣀⠀⠀⠈⠙⣿⣿⣿⠙⡄⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⢠⢞⠿⣯⢳⠀⠀⣼⢆⡀⠀⠀⠀⡸⠋⠀⠀⠀⠀⠀⠀⠀⡠⠞⠁⠀⠀⠀⠀⠀⠀⠀⢉⠻⣄⠀⠀⠈⢻⣿⣷⡸⡀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠈⠛⠳⣵⡋⠀⣸⢯⠎⠀⠀⢀⡜⡡⠀⠀⠀⠀⠀⠀⢠⠞⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢣⠙⡆⠀⠀⠀⠹⣿⣏⡇⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠯⠼⣰⡿⠃⠀⠀⢠⣾⢾⠀⠀⠀⠀⠀⠀⡠⢁⡤⠊⠀⠀⠀⠀⠀⠀⢠⠀⠀⠀⠀⡇⠸⡄⠀⠀⠱⣹⡿⠇⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⠏⠀⠀⠀⣠⡿⡵⠁⠀⠀⠀⡤⠀⡼⣡⠏⠀⠀⠀⢀⠀⠀⠀⠀⢸⠀⠀⠀⠀⢇⢁⢳⠀⠀⠀⢻⡅⡆⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡰⠁⠀⠀⢀⢞⡟⡼⠁⠀⠀⠀⣰⠁⣼⡿⠁⠀⡰⢡⣦⡏⠀⠀⠀⠀⡼⠀⠀⠀⠀⢼⢸⠸⡄⠀⠀⠀⣿⡇⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠞⠀⠀⢀⠔⠁⡞⣼⢃⡆⠀⠀⢠⠇⣰⡟⠤⢤⢾⣴⡵⣵⣧⠀⠀⠀⠀⡇⠀⠀⠀⡆⡬⠀⡇⡇⠀⠀⠀⢹⡇⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⡠⠘⢁⠔⠁⠀⣠⠂⣸⢰⣿⢸⠀⠀⠀⡜⢀⡟⣠⢔⣵⠿⠋⢀⣾⠆⠀⠀⠀⡼⠀⠀⣀⣸⢁⡇⠀⣿⡇⠀⠀⠀⢸⡇⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⢀⣀⡤⠴⠋⠀⡀⠋⢀⣴⠞⠁⡴⣇⣾⡇⢼⠀⠀⢀⣿⣸⣯⣶⣿⣧⣤⣄⣾⠋⠀⠀⢠⣴⡇⠀⠀⣬⡟⣾⣿⡀⢻⡇⠀⠀⠀⠸⡇⠀⠀⠀⠀⠀⠀⠀
# ⣭⢭⡴⢋⡴⠋⢀⠔⢀⣴⡿⠃⢠⢞⡵⣿⣏⣾⢸⣰⡀⠀⢻⢻⡏⣿⣿⣿⣿⠻⣷⠒⠦⠴⠿⣟⣁⣀⣼⣟⡴⠁⠘⡧⣿⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀
# ⡔⣡⣴⠎⠀⣠⢃⣴⡿⠋⢀⣴⠷⡏⢀⠙⣟⢼⡄⣿⣇⠀⢸⣾⡇⣽⣬⡽⠋⠀⠀⠀⠀⠀⠀⠀⢨⣿⣿⣿⣤⡀⠀⢳⡿⠀⠀⠀⢸⢠⡇⠀⠀⠀⠀⠀⠀⠀
# ⣼⣿⠃⠀⣰⢯⣾⠏⣠⡴⠛⠁⣸⢁⠆⠀⠘⣺⠳⣿⠻⣄⠀⣿⣧⠠⠅⠁⠀⠀⠀⠀⠀⠀⠀⠀⢻⠿⢿⡿⠙⢿⣧⣼⠃⡄⠀⢀⣾⢸⡇⠀⠀⠀⠀⠀⠀⠀
# ⣿⡇⠀⢀⣿⣿⣯⠞⠋⠀⠀⢠⢃⠎⠀⢰⢀⡏⢠⣿⣿⣿⡷⢼⣎⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠳⢯⣤⠤⢺⡿⣣⢾⠄⣰⣿⡇⣿⢿⡀⠀⠀⠀⠀⠀⠀
# ⣿⠀⢸⢸⣿⡿⠁⠀⠀⠀⢀⣯⠏⠀⣰⠃⡸⡀⣼⣿⣿⣿⣿⡄⠉⠀⠀⠀⠀⠀⠀⠀⠀⠂⠀⠀⠀⠀⠂⠀⣤⣿⣾⣿⣯⣾⣿⣿⡼⣿⢿⣿⣄⠀⠀⠀⠀⠀
# ⢿⡀⢸⠘⡿⠁⠀⠀⠀⢀⠞⠁⠀⣰⠇⡴⣱⢱⣿⣿⣿⣿⠁⠙⢆⠀⠀⠀⠀⠀⢀⢄⠀⠀⠀⠀⠀⠀⠀⣴⣿⣿⣿⣿⣿⢹⡿⠛⡇⢹⠘⣿⡷⢝⣲⡶⠞⠀
# ⠓⢷⠼⣧⢳⡀⠀⢀⡴⠋⠀⢀⡼⠃⡼⣵⢣⣿⣿⡿⢿⣿⣧⠀⠀⠑⣄⠀⠀⠀⠀⠈⠀⠀⠀⠀⢀⣤⣾⣿⣿⣿⣿⡿⣿⠀⡇⢸⡇⣸⠀⣿⣿⠀⠀⠀⠀⠀
# ⠀⠈⢢⡈⢷⣵⣔⡋⠀⠀⣠⠏⣠⢞⣽⣿⣿⣿⣿⢉⣹⣿⣿⣷⣤⠀⠀⠙⢦⡀⢀⣀⣤⣴⠒⠊⠉⠉⠉⠉⠙⠻⣿⣷⠹⣧⢣⣾⠃⡟⢀⣿⠟⠀⠀⠀⠀⠀
# ⠀⠀⠀⣩⠦⣵⣯⣭⣵⠞⣡⡾⣣⣾⣿⠟⠛⠉⠸⣏⠀⠚⣿⣿⣿⣿⣷⣠⣤⣭⣿⣿⡟⢿⣦⠀⢀⠀⠀⠀⠀⠀⠀⠙⣷⣯⣯⢎⡼⣡⠞⠁⠀⠀⠀⠀⠀⠀
# ⢀⡴⠊⢡⠞⢁⡰⢊⣵⡾⠟⠋⠉⢹⣹⠀⠀⠀⠀⠈⠒⣞⠁⣹⠿⡷⣮⣭⣭⣽⢿⢯⡗⠈⢻⣷⡋⠀⠀⠀⠀⠀⠀⠀⠘⣿⣿⡻⣍⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⠉⠖⢠⠋⣴⡫⡾⠋⠁⠀⠀⠀⠢⣄⣏⡇⠀⠀⠀⠀⠀⠈⠋⠻⣤⢷⣃⣹⣏⣉⡦⠞⠁⢀⠞⠳⡳⡀⠀⠀⠀⠀⠀⠀⠀⢹⠑⠷⣌⠓⢤⡀⠀⠀⠀⠀⠀⠀
# ⡞⢠⣯⡿⠋⡜⠀⠀⠀⠀⠀⠀⠀⠀⢹⠻⡤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠁⠀⠀⠀⢀⡴⠀⠀⠀⠱⡑⡄⢀⡠⠤⠤⠤⠤⠬⠧⠤⠬⠷⣦⣈⡓⠦⣀⠀⠀⠀
# ⠀⣾⠋⢠⣾⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣇⢧⠀⠉⠓⠲⠤⣀⣀⠀⠀⠀⠀⠀⠀⡰⠋⠀⠀⠀⣀⠴⢛⣉⡠⠤⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⣿⣧⡈⠙⠢⣄
# ⢰⠃⡴⡇⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⢸⡀⠀⠀⠀⠀⠀⠈⠉⠙⠂⠀⠀⠀⠀⠀⢀⡠⣊⠥⠚⠁⣀⡤⠴⠒⠋⠁⠀⠀⠀⠀⠀⠀⠀⢠⣾⣿⡇⠀⠘⢦
# ⣿⢞⡾⢠⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣇⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣻⢚⣁⣤⠖⠋⣁⡤⣤⡴⠒⠒⠋⠁⢀⣀⣀⣀⡤⡼⣧⡟⢿⠀⠀⠈
# ⣏⣼⡇⣿⢧⠀⠀⠀⠀⠀⠀⠐⡄⠀⠀⠀⢸⢹⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢩⣿⣶⣶⣾⣇⠔⣉⣤⡖⠿⣍⣹⣿⣿⣯⣿⡿⠋⢹⡜⣾⡇⠀⠀
# ⣿⣿⢹⡇⢸⠀⠀⠀⠀⠀⠀⠀⠸⡄⠀⠀⠈⡏⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠀⣾⣿⣿⣿⣿⣿⡉⠉⣿⣿⢄⡀⠀⠈⠉⣳⠀⠀⠀⣾⣷⢸⡇⠀⠀
# ⢿⣿⣸⡇⣿⡇⠀⠀⠀⠀⠀⠀⠀⡗⠀⠀⢀⡵⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣸⣿⣿⣿⣿⣿⣿⣧⠀⣏⣋⠀⠀⠀⠀⠀⡇⠀⠀⠀⣿⣿⣿⡇⠀⢸
# ⠀⠻⡏⢧⣿⣿⡀⠀⠀⠀⠀⠀⠀⡆⢀⠔⠋⠀⠻⣷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣿⣿⣿⣿⣿⣿⣿⡿⠀⣿⡯⢹⣦⣀⣀⣠⠇⠀⠀⢸⣿⣿⣿⠁⢀⣿
# ⡀⠀⠙⢼⣿⣿⣧⠀⠀⠀⠀⠀⢠⠗⠁⠀⠀⠀⣰⠅⢺⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⣿⣿⣿⣿⣿⣿⠁⢰⣷⢤⡀⠀⠀⠀⠉⡇⠀⠀⢸⣿⡿⠃⢀⣾⠟
# ⢽⣆⠙⢆⡙⢿⣿⡆⠀⠀⠀⠀⠈⡶⣄⠀⢠⠞⠁⠀⠀⠉⣵⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⣿⣿⣿⣿⠃⠀⡾⠿⡀⠁⠀⠀⠀⠸⡇⠀⠀⣾⠟⠁⢠⠟⠁⠀
# ⠀⠙⢧⠀⠙⣦⣝⢷⠀⠀⠀⠀⠀⣧⠟⡟⠁⠀⠀⠀⢀⣀⣼⠻⣥⣄⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⠏⠀⢸⣿⠀⠈⠳⣄⠀⠀⡔⣧⠀⠀⣯⡇⣰⠃⠀⠀⠀
# ⠀⠀⠀⡄⠀⠸⣿⣧⣇⠀⠀⠀⠀⢿⠀⠻⣦⠀⠀⡾⣍⠀⠀⠀⠈⠻⣿⣦⡀⠀⠀⠀⠀⠘⣿⣿⡟⠀⢠⣧⡁⠀⠂⠤⢴⡓⠋⠀⡏⠀⠀⣿⠀⡇⠀⠀⠀⠀
# ⢧⠀⢠⣇⠀⠀⣿⣿⢻⡄⠀⠀⠀⢸⣄⡀⠈⠳⣦⠿⢛⡷⠀⠠⠖⠉⠀⠙⢿⢢⣀⠀⠀⠀⣿⡿⠀⢀⣞⠏⠈⢦⡀⠀⣴⠃⢀⣾⠃⠀⠀⣿⡀⣇⠀⠀⠀⠀
# ⢦⣠⢾⠏⢀⣼⡿⠇⢸⣧⠀⠀⠀⠘⡿⣿⣦⣄⡈⠉⠙⢷⣼⣷⡀⢀⡠⠖⠊⠉⠻⡗⢤⣰⡟⠁⣠⣿⠟⠤⣄⡈⠳⣰⡋⢠⡾⠃⠀⠀⢠⠿⣷⡈⠣⣄⣀⡴
# ⡯⠵⡷⠖⠋⣽⠀⠀⣾⣿⡀⠀⠀⠀⠹⣄⠈⠛⠻⠿⠶⣾⣷⣼⣇⢺⣹⣧⠀⠀⣠⠔⠛⠿⣿⣶⠿⠁⠀⠀⠀⣸⣶⣷⠾⠋⠀⠀⠀⢀⡞⠀⠈⠉⠙⠛⠉⠀
# ⠀⠀⡇⡀⠀⡏⠀⡸⣿⣿⡇⠀⠀⠀⠀⠙⣦⡀⠀⠀⠀⠀⠀⠀⢨⡉⠁⢸⣷⡎⠀⠀⠀⢠⠃⠈⢳⡀⠀⢀⣴⠛⠉⠁⠀⠀⠀⢀⣴⠙⡆⠀⠀⠀⠀⠀⠀⠀
# ⠀⡸⣱⠃⠀⣷⢰⠃⣿⣹⡇⠀⠀⠀⠀⠀⠈⠛⢶⣤⣀⣀⣰⣶⣶⣿⣿⣿⡿⠟⠦⣄⢀⠏⠀⠀⠀⢙⣦⣾⣿⣇⠀⠀⠀⢀⣶⠉⢸⡇⢳⠀⠀⠀⠀⠀⠀⠀
# ⢰⠃⡏⠀⠀⢿⡏⠀⢻⡳⡇⠀⠀⠀⠀⠀⠀⠀⠀⢸⡉⠉⠛⠛⠛⠉⠉⠀⠀⠀⠀⠈⠉⠀⠀⠀⢠⣾⣿⣿⣿⣿⣿⠓⠚⣹⡇⠀⢸⡇⡜⠀⠀⠀⠀⠀⠀⠀
# ⢸⡈⣷⠀⠀⠘⣿⡀⠀⠙⢻⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠃⢻⣿⣿⣿⣿⠃⠀⢠⡟⠀⢠⡿⣱⠃⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣦⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣯⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⠀⠀⠀⠀⢀⣀⣀⣀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣻⣿⣿⣿⣿⠟⠙⣿⣿⣿⣶⣶⣶⡞⠉⠀⡉⠒⢤
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣇⠀⠀⠈⠻⠟⠋⠀⠀⠉⠒⠤⢥⣤⡬
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⣿⣿⣿⣿⠿⢿⣿⣿⠿⢿⣿⡿⢿⣿⣿⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⣿⣿⣿⠋⢻⣧⣾⣏⠙⣷⣿⣉⣷⣴⡿⢿⣿⣿⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣀⣼⣿⣿⣿⣧⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣾⣿⣿⣿⣷⣶⣶⣶⣤⣤⣀⣀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣴⣶⣿⣿⣶⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠿⢿⣿⣶⣶
# ⠀⠀⠀⠀⠀⠀⠀⠀⡀⣠⠴⠒⠒⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠿⠿⣛⣛⣯⣭⣭⣿⣿⣿⠿⠿⢿⣿⣿⣿⣿⣿⡿⠿⢻⣿⣿⣷⣶⣿⣿⣿⠿⠛⠋
# ⠀⠀⠀⠀⠀⠀⠀⠈⠓⠮⣙⠢⠶⣿⣿⡿⢿⣻⣿⣿⣿⣶⣶⣶⣾⣿⣿⣿⣿⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣿⣿⣿⣿⣶⣿⣿⣿⣿⣿⡿⠟⠋⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠉⠛⠛⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⣿⣿⠛⠉⠉⠉⠿⠟⢹⣿⣿⣿⣿⣿⣿⣿⣟⠉⠉⠁⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠉⠙⡟⣿⣿⣿⣿⣇⠙⠋⠀⠀⠀⠀⠀⢠⠿⣿⣿⣿⣿⣿⣿⣿⣿⡟⠂⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠻⢸⣿⣿⣿⣿⣧⡀⠀⠀⠀⠀⠀⠀⢰⣿⣿⣿⣿⣿⣿⢿⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⢿⣿⣿⣿⣿⣿⣷⣦⣤⡴⠚⢑⣿⣿⣿⣿⡿⠙⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⡸⠟⠛⢿⣿⣿⣿⣿⣷⣾⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠎⠀⠀⢀⣿⣿⡿⠁⠀⠈⠁⠉⠩⢐⣿⣿⣿⣧⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⢤⣤⡂⠀⢴⠞⣿⣿⠏⠀⠀⠀⠀⠀⠀⢀⣾⣿⣿⡿⠁⠀⠀⠉⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⣋⠀⠀⠉⢳⣾⣾⣿⣿⣦⣀⡀⠀⠀⠀⠀⢸⡛⣿⣿⡇⠀⠀⠀⠀⢸⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⡤⠤⣤⣄⣀⠀⣠⣤⣴⣷⣾⣿⣿⣷⣦⣄⣚⣉⣙⣛⣛⣛⠛⢳⡀⢀⠴⢦⠤⢭⣙⣿⡛⠒⣠⠆⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⢠⡤⠄⠖⠒⠒⠚⠋⠛⢆⠘⠻⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡀⠑⢋⣬⣥⣄⣀⠀⠰⠾⢿⣿⠟⠓⠒⣓⡄⠀⠀⠀⠀⠀⠀⠀⠀
# ⠘⢣⡀⢱⠖⢝⠻⡷⠾⠶⠾⡄⢀⡀⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣻⣿⣿⣿⣿⣿⣿⣿⣿⣷⣶⣦⣤⣭⣧⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠹⣶⠂⠂⠁⠛⠂⠒⠤⢽⣿⠿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠛⠁⠀⢸⣿⣿⣿⣿⣿⣿⡻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⣟⠀⠀⠀⠀⠀⠀⠀⠀⠈⠑⠚⠛⠿⢿⣛⡻⢯⣁⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣤⡀⠀⣀⡠⠴
# ⠀⠀⠀⢹⡀⢐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠓⠀⠠⢼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⢿⣿⣿⣿⣿⣿⣿⣿⡿⣻⢟⡡⢎⡿
# ⠀⠀⠀⠘⡇⠘⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠀⠀⢿⣿⣿⣿⣿⣿⣿⠶⠋⣭⠞⢴⣟
# ⠀⠀⠀⠀⠃⠀⠑⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡷⠶⠶⠶⠿⢻⡿⠟⠋⡁⠀⠃⠀⠀⢠⣿
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠣⠑⠂⠀⠀⠀⠀⡀⠋⡠⠅⠈⠀⠠⢨⣿
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣇⡴⠀⠀⠀⠀⠋⠀⠀⠀⠀⠀⠀⠁⣾⠋
# ⠀⠀⠀⠀⠀⠆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣯⠄⡀⠀⠄⠀⠔⠁⠀⠀⠀⠀⠀⢰⠃⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢄⠀⠀⠀⠀⠀⠀⠀⠀⢨⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡎⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠱⡀⠀⠀⠀⠀⠀⢀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡘⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠢⡀⠀⠀⠀⡾⠛⠛⠛⠻⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠁⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⣸⣷⠿⣿⣿⣶⣤⣍⡻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⡎⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⡇⠀⠀⠈⠉⠛⠿⣿⣿⣦⣽⣛⣿⣿⣿⣯⣭⣥⣤⣶⣾⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⡰⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠁⠀⠀⠀⠀⠀⠀⠀⠉⠙⣿⣿⣿⠟⠋⠉⠉⠉⠉⠉⠙⠛⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠃⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⢿⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠋⠁⠀⠀⠀⠀⠀⠀⠂⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⢰⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢣⠀⠀⠀⠀⠀⠀⠀⠀⢠⡏⢸⠁⠀⠀⠀⠀⠀⠀⠀⠀⢠⠇⠀⠀⠀⠀⠀⠀⠀⠀⢰⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⠸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⡄⠀⠀⠀⠀⠀⠀⠀⠸⡇⡾⠀⠀⠀⠀⠀⠀⠀⠀⢀⡞⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢷⣄⣀⣀⣀⣀⣀⠤⢴⣧⣷⣦⣀⠀⠀⠀⠀⠀⢀⡞⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⠁⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⡈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀⡀⠀⠀⢀⣀⣀⠘⣿⣿⣿⣿⣿⣷⣶⣶⣴⡞⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀
# ⠀⠀⠀⠀⠀⠀⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢣⢀⣐⡒⠒⣉⣥⠤⣿⣿⣿⣿⣿⣿⣿⣿⣿⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⡼⠀⠀⠀⠀⠀⠀⠀⠀⠀

View File

@@ -469,6 +469,64 @@
"has_on_unload": false,
"class_cmd_names": {}
},
"SunnexGB/Heroku-Modules/SpotifyLyrics.py": {
"name": "SpotifyLyrics",
"description": "",
"cls_doc": {},
"meta": {
"pic": "https://r2.fakecrime.bio/uploads/f49a9294-36ad-4fc4-801f-48cb049111d6.jpg",
"banner": "https://r2.fakecrime.bio/uploads/f49a9294-36ad-4fc4-801f-48cb049111d6.jpg",
"developer": "@SunnexGB",
"fhsdesc": "Spotify, music, музыка, спотифай,Lyrics, слова, текст, трек, песня"
},
"commands": [
{
"snowl": ""
}
],
"new_commands": [
{
"name": "snowl",
"original_name": "snowl",
"description": {
"default": ""
},
"cmd_names": {},
"aliases": [],
"usage": null,
"inline": false,
"is_inline_handler": false,
"decorators": []
}
],
"inline_handlers": [],
"strings": {
"name": "migration",
"no_SpotifyLyrics": "u're not use SpotifyLyrics,install my new module.",
"inline_msg": "if u ready to migration pls click on the button.",
"already": "module already install, u're ready for migration ur db?",
"restartf": "u ready restart ur ub?",
"restartf_btn": "Ok",
"done": "migration is done.",
"confirm": "confirm",
"install": "install LiveLyrics",
"close": "close",
"migrate_db": "Yep",
"no_SpotifyLyrics_ru": "ты не юзал SpotifyLyrics,установи новый модуль.",
"inline_msg_ru": "если вы готовы к миграции нажмите на кнопку ниже.",
"already_ru": "модуль уже стоиит,готовы к переносу данных?",
"restartf_ru": "вы готовы к перезапуску юб?",
"restartf_btn_ru": "Лан",
"done_ru": "миграция завершена.",
"confirm_ru": "подтвердить",
"install_ru": "установить LiveLyrics",
"close_ru": "закрыть",
"migrate_db_ru": "Ага"
},
"has_on_load": false,
"has_on_unload": false,
"class_cmd_names": {}
},
"SunnexGB/Heroku-Modules/Mikuru.py": {
"name": "Mikuru",
"description": "Censors words with phrase Mikuru Asahina",
@@ -891,6 +949,64 @@
"has_on_unload": true,
"class_cmd_names": {}
},
"SunnexGB/Heroku-Modules/YandexLyrics.py": {
"name": "YandexLyrics",
"description": "",
"cls_doc": {},
"meta": {
"pic": "https://r2.fakecrime.bio/uploads/ab42b5e2-91f1-4ed1-8002-51b3184e3839.jpg",
"banner": "https://r2.fakecrime.bio/uploads/ab42b5e2-91f1-4ed1-8002-51b3184e3839.jpg",
"developer": "@SunnexGB",
"fhsdesc": "YaMusic, music, музыка, яндекс музыка,Lyrics, слова, текст, трек, песня"
},
"commands": [
{
"ynowl": ""
}
],
"new_commands": [
{
"name": "ynowl",
"original_name": "ynowl",
"description": {
"default": ""
},
"cmd_names": {},
"aliases": [],
"usage": null,
"inline": false,
"is_inline_handler": false,
"decorators": []
}
],
"inline_handlers": [],
"strings": {
"name": "migration",
"no_YaMusicMod": "u're not use YaMusicMod,install my new module.",
"inline_msg": "if u ready to migration pls click on the button.",
"already": "module already install, u're ready for migration ur db?",
"restartf": "u ready restart ur ub?",
"restartf_btn": "Ok",
"done": "migration is done.",
"confirm": "confirm",
"install": "install LiveLyrics",
"close": "close",
"migrate_db": "Yep",
"no_YaMusicMod_ru": "ты не юзал YaMusicMod,установи новый модуль.",
"inline_msg_ru": "если вы готовы к миграции нажмите на кнопку ниже.",
"already_ru": "модуль уже стоиит,готовы к переносу данных?",
"restartf_ru": "вы готовы к перезапуску юб?",
"restartf_btn_ru": "Лан",
"done_ru": "миграция завершена.",
"confirm_ru": "подтвердить",
"install_ru": "установить LiveLyrics",
"close_ru": "закрыть",
"migrate_db_ru": "Ага"
},
"has_on_load": false,
"has_on_unload": false,
"class_cmd_names": {}
},
"SunnexGB/Heroku-Modules/Hangman.py": {
"name": "Hangman",
"description": "Висилица",
@@ -79994,7 +80110,7 @@
}
},
"meta": {
"total_modules": 1010,
"generated_at": "2026-06-17T02:58:22.712075"
"total_modules": 1012,
"generated_at": "2026-06-16T03:26:11.134799"
}
}