"type": "python",
"request": "launch",
"module": "music_assistant",
- //"args": ["--debug"]
+ "args": ["--debug"]
},
{
"name": "Python: Huidige bestand",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
- //"args": ["--debug"]
+ "args": ["--debug"]
},
{
"name": "Python: Attach using Process Id",
<v-list-item
dark
dense
- style="height:44px;margin-bottom:5px;margin-top:-4px;background-color:black;"
+ style="height:62px;margin-bottom:5px;margin-top:-4px;background-color:black;"
>
<v-list-item-action v-if="$server.activePlayer" style="margin-top:15px">
<v-btn small icon @click="playerCommand('previous')">
<!-- active player queue button -->
<v-list-item-action style="padding:28px;" v-if="$server.activePlayer">
<v-btn
- small
text
icon
@click="$router.push('/playerqueue/')"
>
<v-flex xs12 class="vertical-btn">
<v-icon>queue_music</v-icon>
- <span class="caption">{{ $t("queue") }}</span>
+ <span class="caption" style="padding-top: 5px">{{ $t("queue") }}</span>
</v-flex>
</v-btn>
</v-list-item-action>
@click.native.prevent
>
<template v-slot:activator="{ on }">
- <v-btn small icon v-on="on">
+ <v-btn icon v-on="on">
<v-flex xs12 class="vertical-btn">
<v-icon>volume_up</v-icon>
- <span class="caption">{{
+ <span class="caption" style="padding-top: 5px">{{
Math.round($server.activePlayer.volume_level)
}}</span>
</v-flex>
</v-list-item-action>
<!-- active player btn -->
- <v-list-item-action style="padding:20px;margin-right:15px">
- <v-btn small text icon @click="$server.$emit('showPlayersMenu')">
+ <v-list-item-action style="padding:30px;margin-right:15px">
+ <v-btn text icon @click="$server.$emit('showPlayersMenu')">
<v-flex xs12 class="vertical-btn">
<v-icon>speaker</v-icon>
- <span class="caption" v-if="$server.activePlayer">{{
- $server.activePlayer.name
+ <span class="caption" v-if="$server.activePlayer" style="padding-top: 5px">{{
+ truncateString($server.activePlayer.name, 18)
}}</span>
<span class="caption" v-else> </span>
</v-flex>
this.$router.push({ path: url, query: { provider: item.provider } })
},
queueUpdatedMsg (data) {
- if (data.player_id === this.$server.activePlayerId) {
+ const queueId = this.$server.players[this.$server.activePlayerId].active_queue
+ if (data.player_id === queueId) {
for (const [key, value] of Object.entries(data)) {
Vue.set(this.playerQueueDetails, key, value)
}
},
async getQueueDetails () {
if (this.$server.activePlayer) {
- const endpoint = 'players/' + this.$server.activePlayerId + '/queue'
+ const queueId = this.$server.players[this.$server.activePlayerId].active_queue
+ const endpoint = 'players/' + queueId + '/queue'
this.playerQueueDetails = await this.$server.getData(endpoint)
}
+ },
+ truncateString (str, num) {
+ // If the length of str is less than or equal to num
+ // just return str--don't truncate it.
+ if (str.length <= num) {
+ return str
+ }
+ // Return str truncated with '...' concatenated to the end of str.
+ return str.slice(0, num) + '...'
}
}
})
style="margin-left: -5px; margin-right: -15px"
@click="$server.switchPlayer($server.players[playerId].player_id)"
>
- <v-list-item-avatar>
- <v-icon size="45">{{ $server.players[playerId].is_group ? 'speaker_group' : 'speaker' }}</v-icon>
+ <v-list-item-avatar tile>
+ <v-icon size="45">{{ $server.players[playerId].is_group_player ? 'speaker_group' : 'speaker' }}</v-icon>
</v-list-item-avatar>
<v-list-item-content style="margin-left:-15px;">
<v-list-item-title class="subtitle-1">{{ $server.players[playerId].name }}</v-list-item-title>
mounted () { },
methods: {
setPlayerVolume: function (playerId, newVolume) {
- this.players[playerId].volume_level = newVolume
+ // if (newVolume === 'up') {
+ // this.$server.playerCommand('volume_up', null, playerId)
+ // } else if (newVolume === 'down') {
+ // this.$server.playerCommand('volume_down', null, playerId)
+ // } else {
+ // this.$server.playerCommand('volume_set', newVolume, playerId)
+ // this.players[playerId].volume_level = newVolume
+ // }
if (newVolume === 'up') {
- this.$server.playerCommand('volume_up', null, playerId)
+ newVolume = this.$server.players[playerId].volume_level + 1
} else if (newVolume === 'down') {
- this.$server.playerCommand('volume_down', null, playerId)
- } else {
- this.$server.playerCommand('volume_set', newVolume, playerId)
+ newVolume = this.$server.players[playerId].volume_level - 1
}
+ this.$server.playerCommand('volume_set', newVolume, playerId)
+ this.players[playerId].volume_level = newVolume
},
togglePlayerPower: function (playerId) {
this.$server.playerCommand('power_toggle', null, playerId)
"port" : "Port",
"hass_url" : "URL to homeassistant (e.g. https://homeassistant:8123)",
"hass_token" : "Long Lived Access Token",
- "hass_publish" : "Publish players to Home Assistant",
- "hass_player_power" : "Attach player power to homeassistant entity",
- "hass_player_source" : "Source on the homeassistant entity (optional)",
- "hass_player_volume" : "Attach player volume to homeassistant entity",
+ "hass_publish_players" : "Publish players to Home Assistant",
+ "hass_power_entities" : "Enable entities to be used as Power Control for players.",
+ "hass_volume_entities" : "Enable entities to be used as Volume Control for players.",
"web_ssl_cert" : "Path to ssl certificate file",
"web_ssl_key" : "Path to ssl keyfile",
"player_enabled" : "Enable player",
"player_name" : "Custom name for this player",
- "player_group_with" : "Group this player to another (parent)player",
- "player_mute_power" : "Use muting as power control",
- "player_disable_vol" : "Disable volume controls",
- "player_group_vol" : "Apply group volume to childs (for group players only)",
- "player_group_pow" : "Apply group power based on childs (for group players only)",
- "player_power_play" : "Issue play command on power on",
- "file_prov_music_path" : "Path to music files",
"file_prov_playlists_path" : "Path to playlists (.m3u)",
"web_http_port" : "HTTP port",
"web_https_port" : "HTTPS port",
"audio_cache_folder" : "Directory to use for cache files",
"audio_cache_max_size_gb" : "Maximum size of the cache folder (GB)",
"gapless_enabled" : "Enable gapless support",
- "crossfade_duration" : "Crossfade duration (in seconds, 0 to disable)"
+ "crossfade_duration" : "Crossfade duration (in seconds, 0 to disable)",
+ "power_control" : "Attach Power Control to player.",
+ "volume_control" : "Attach Volume Control to player."
},
"players" : "Players",
"play" : "Play",
"port" : "Poort",
"hass_url" : "URL naar homeassistant (b.v. https://homeassistant:8123)",
"hass_token" : "Token met lange levensduur",
- "hass_publish" : "Publiceer spelers naar Home Assistant",
- "hass_player_power" : "Verbind speler aan/uit met homeassistant entity",
- "hass_player_source" : "Benodigde bron op de verbonden homeassistant entity (optioneel)",
- "hass_player_volume" : "Verbind volume van speler aan een homeassistant entity",
+ "hass_publish_players" : "Publiceer spelers naar Home Assistant",
+ "hass_power_entities" : "Entities die gebruikt mogen worden als aan/uit Control voor spelers.",
+ "hass_volume_entities" : "Entities die gebruikt mogen worden als volume Control voor spelers.",
"web_ssl_cert" : "Pad naar ssl certificaat bestand",
"web_ssl_key" : "Pad naar ssl certificaat key bestand",
"player_enabled" : "Speler inschakelen",
"player_name" : "Aangepaste naam voor deze speler",
- "player_group_with" : "Groupeer deze speler met een andere (hoofd)speler",
- "player_mute_power" : "Gebruik mute als aan/uit",
- "player_disable_vol" : "Schakel volume bediening helemaal uit",
- "player_group_vol" : "Pas groep volume toe op onderliggende spelers (alleen groep spelers)",
- "player_group_pow" : "Pas groep aan/uit toe op onderliggende spelers (alleen groep spelers)",
- "player_power_play" : "Automatisch afspelen bij inschakelen",
"file_prov_music_path" : "Pad naar muziek bestanden",
"file_prov_playlists_path" : "Pad naar playlist bestanden (.m3u)",
"web_http_port" : "HTTP poort",
"audio_cache_folder" : "Map om te gebruiken voor cache bestanden",
"audio_cache_max_size_gb" : "Maximale grootte van de cache map in GB.",
"gapless_enabled" : "Schakel ondersteuning voor gapless in.",
- "crossfade_duration" : "Crossfade (in seconden, 0 om uit te schakelen)."
+ "crossfade_duration" : "Crossfade (in seconden, 0 om uit te schakelen).",
+ "power_control" : "Verbind Power Control met speler.",
+ "volume_control" : "Verbind Volume Control met speler."
},
"players" : "Spelers",
"play" : "Afspelen",
<v-list-item-title>{{ $t("conf." + conf_key) }}</v-list-item-title>
</v-list-item-content>
</v-list-item>
- <v-list-item v-if="configKey == 'player_settings'">>
+ <v-list-item v-if="configKey == 'player_settings'">
<v-list-item-avatar
tile
style="margin-left:-15px"
(conf_item_value['entry_type'] == 'string' ||
conf_item_value['entry_type'] == 'integer' ||
conf_item_value['entry_type'] == 'float') &&
- !conf_item_value['values'].length
+ !conf_item_value['values'].length && !conf_item_value['range'].length
"
v-model="conf_item_value['value']"
:placeholder="conf_item_value['default_value'] ? conf_item_value['default_value'].toString() : ''"
filled
></v-text-field>
<!-- value with dropdown -->
- <v-select chips clearable
+ <v-select
+ :chips="conf_item_value['multi_value']"
+ clearable
:multiple="conf_item_value['multi_value']"
v-if="
conf_item_value['values'].length &&
filled
@change="saveConfig(configKey, conf_key, conf_item_key, conf_item_value['value'])"
></v-select>
+ <!-- value with range -->
+ <v-slider
+ style="margin-top:28px;"
+ v-if="conf_item_value['range'].length"
+ :placeholder="conf_item_value['default_value'].toString()"
+ v-model="conf_item_value['value']"
+ :label="$t('conf.' + conf_item_value['description_key'])"
+ @change="saveConfig(configKey, conf_key, conf_item_key, conf_item_value['value'])"
+ :min="conf_item_value['range'][0]"
+ :max="conf_item_value['range'][1]"
+ :thumb-size="25"
+ thumb-label="always"
+ ></v-slider>
</v-list-item>
</v-list>
<v-divider></v-divider>
entry_type=ConfigEntryType.INT,
range=(0, 10),
default_value=0,
- description_key="fallback_gain_correct",
+ description_key="crossfade_duration",
),
]
self.mass.signal_event(
EVENT_CONFIG_CHANGED, (self._base_type, self._parent_item_key)
)
+ self.mass.add_job(self.mass.config.save)
# reload provider if value changed
if self._base_type == ConfigBaseType.PROVIDER:
self.mass.add_job(
"""Start running the music assistant server."""
self.loop = asyncio.get_event_loop()
self.loop.set_exception_handler(self.__handle_exception)
- self.loop.set_debug(True)
+ if LOGGER.level == logging.DEBUG:
+ self.loop.set_debug(True)
await self.database.async_setup()
await self.cache.async_setup()
await self.metadata.async_setup()
if self._exit:
return
for cb_func, event_filter in self._event_listeners:
- if not event_filter or event_filter in event_msg:
+ if not event_filter or event_msg in event_filter:
self.add_job(cb_func, event_msg, event_details)
@callback
should_poll: bool = False
features: List[PlayerFeature] = field(default_factory=list)
config_entries: List[ConfigEntry] = field(default_factory=list)
- updated_at: datetime = datetime.utcnow()
+ updated_at: datetime = datetime.utcnow() # managed by playermanager!
+ active_queue: str = "" # managed by playermanager!
+ group_parents: List[str] = field(default_factory=list) # managed by playermanager!
+ cur_queue_item_id: str = None # managed by playermanager!
def __setattr__(self, name, value):
"""Event when control is updated. Do not override"""
+ if name == "updated_at":
+ # updated at is set by the on_update callback
+ # make sure we do not hit an endless loop
+ super().__setattr__(name, value)
+ return
value_changed = hasattr(self, name) and getattr(self, name) != value
super().__setattr__(name, value)
- super().__setattr__('updated_at', datetime.utcnow())
- if value_changed and hasattr(self, '_on_update'):
+ if value_changed and hasattr(self, "_on_update"):
# pylint: disable=no-member
self._on_update(self.player_id, name)
+
class PlayerControlType(int, Enum):
"""Enum with different player control types."""
name: str = ""
state: Optional[Any] = None
set_state: Callable[..., Union[None, Awaitable]] = None
-
- def __setattr__(self, name, value):
- """Event when control is updated. Do not override"""
- if hasattr(self, '_on_update') and getattr(self, name, None) != value:
- super().__setattr__(name, value)
- # pylint: disable=no-member
- self._on_update(self)
- else:
- super().__setattr__(name, value)
-
"""
bool to indicate that we need to use the queue stream
for example if crossfading is requested but a player doesn't natively support it
- it will send a constant stream of audio to the player and all tracks
+ it will send a constant stream of audio to the player with all tracks
"""
supports_crossfade = PlayerFeature.CROSSFADE in self.player.features
return self.crossfade_enabled and not supports_crossfade
else:
# at this point we don't know if the queue is synced with the player
# so just to be safe we send the queue_items to the player
- await self.mass.player_manager.async_cmd_queue_load(self.player_id, self.items)
+ player_provider = self.mass.player_manager.get_player_provider(self.player_id)
+ await player_provider.async_cmd_queue_load(self.player_id, self.items)
await self.async_play_index(prev_index)
else:
LOGGER.warning(
if sync_prov_id == prov_id and sync_desc == desc:
LOGGER.debug("Syncjob %s for provider %s is already running!", desc, prov_id)
return
- LOGGER.info("Start syncjob %s for provider %s.", desc, prov_id)
+ LOGGER.debug("Start syncjob %s for provider %s.", desc, prov_id)
sync_job = (prov_id, desc)
method_class.running_sync_jobs.append(sync_job)
method_class.mass.signal_event(EVENT_MUSIC_SYNC_STATUS, method_class.running_sync_jobs)
Orchestrates all players from player providers and forwarding of commands and states.
"""
-import logging
from datetime import datetime
-from typing import List, Optional
-from types import MethodType
+import logging
+from typing import List, Optional, Any
from music_assistant.constants import (
CONF_ENABLED,
EVENT_PLAYER_ADDED,
EVENT_PLAYER_CHANGED,
EVENT_PLAYER_CONTROL_REGISTERED,
- EVENT_PLAYER_REMOVED,
EVENT_PLAYER_CONTROL_UPDATED,
+ EVENT_PLAYER_REMOVED,
)
from music_assistant.models.config_entry import ConfigEntry, ConfigEntryType
from music_assistant.models.media_types import MediaItem, MediaType
Player,
PlayerControl,
PlayerControlType,
- PlayerFeature,
PlayerState,
)
from music_assistant.models.player_queue import PlayerQueue, QueueItem, QueueOption
async def poll_task(self):
"""Check for updates on players that need to be polled."""
for player in self._org_players.values():
- if player.should_poll and (
- self._poll_ticks >= POLL_INTERVAL or player.state == PlayerState.Playing
+ if (player.should_poll
+ and (self._poll_ticks >= POLL_INTERVAL or player.state == PlayerState.Playing)
):
- # TODO: compare values ?
+ # Just request update, value checking for changes is handled
await self.async_update_player(player)
if self._poll_ticks >= POLL_INTERVAL:
self._poll_ticks = 0
@callback
def get_player_queue(self, player_id: str) -> PlayerQueue:
"""Return player's queue by player_id or None if player does not exist."""
- return self._player_queues.get(player_id)
+ if not player_id in self._players:
+ return None
+ player = self._players[player_id]
+ return self._player_queues.get(player.active_queue)
@callback
def get_player_control(self, control_id: str) -> PlayerControl:
async def async_register_player_control(self, control: PlayerControl):
"""Register a playercontrol with the player manager."""
self._controls[control.id] = control
- setattr(control, "_on_update", self.__player_control_updated)
LOGGER.info("New %s PlayerControl registered: %s", control.type, control.name)
self.mass.signal_event(EVENT_PLAYER_CONTROL_REGISTERED, control.id)
await self.__async_create_playercontrol_config_entries()
+ # update all players as they may want to use this control
+ for player in self._players.values():
+ self.mass.add_job(self.async_update_player(player))
+
+ async def async_update_player_control(self, control_id: str, new_state: Any):
+ """Update a playercontrol's state on the player manager."""
+ control = self._controls.get(control_id)
+ if not control or control.state == new_state:
+ return
+ LOGGER.info("PlayerControl %s updated - new state: %s", control.name, new_state)
+ control.state = new_state
+ self.mass.signal_event(EVENT_PLAYER_CONTROL_UPDATED, control.id)
# update all players using this playercontrol
for player_id, player in self._players.items():
conf = self.mass.config.player_settings[player_id]
Send NEXT TRACK command to given player.
:param player_id: player_id of the player to handle the command.
"""
- return await self._player_queues[player_id].async_next()
- # TODO: handle queue support and parent player command redirects
- # return await self.queue.play_index(self.queue.cur_index + 1)
- # return await player.async_play()
- # for group_id in self.group_parents:
- # group_player = self.mass.player_manager.get_player_sync(group_id)
- # if group_player.state != PlayerState.Off:
- # return await group_player.next()
- # return await self.queue.next()
+ return await self.get_player_queue(player_id).async_next()
async def async_cmd_previous(self, player_id: str):
"""
Send PREVIOUS TRACK command to given player.
:param player_id: player_id of the player to handle the command.
"""
- return await self._player_queues[player_id].async_previous()
- # TODO: handle queue support and parent player command redirects
- # return await self.queue.play_index(self.queue.cur_index - 1)
- # for group_id in self.group_parents:
- # group_player = self.mass.player_manager.get_player_sync(group_id)
- # if group_player.state != PlayerState.Off:
- # return await group_player.previous()
- # return await self.queue.previous()
+ return await self.get_player_queue(player_id).async_previous()
async def async_cmd_power_on(self, player_id: str):
"""
if player_config.get(CONF_POWER_CONTROL):
control = self.get_player_control(player_config[CONF_POWER_CONTROL])
if control:
- self.mass.add_job(control.set_state, True)
+ self.mass.add_job(control.set_state, control.id, True)
async def async_cmd_power_off(self, player_id: str):
"""
if player_config.get(CONF_POWER_CONTROL):
control = self.get_player_control(player_config[CONF_POWER_CONTROL])
if control:
- self.mass.add_job(control.set_state, False)
+ self.mass.add_job(control.set_state, control.id, False)
# handle group power
if player.is_group_player:
# player is group, turn off all childs
if player_config.get(CONF_VOLUME_CONTROL):
control = self.get_player_control(player_config[CONF_VOLUME_CONTROL])
if control:
- self.mass.add_job(control.set_state, volume_level)
+ self.mass.add_job(control.set_state, control.id, volume_level)
# just force full volume on actual player if volume is outsourced to volumecontrol
await player_prov.async_cmd_volume_set(player_id, 100)
# handle group volume
async def async_get_gain_correct(self, player_id: str, item_id: str, provider_id: str):
"""Get gain correction for given player / track combination."""
- player = self._players[player_id]
player_conf = self.mass.config.get_player_config(player_id)
if not player_conf["volume_normalisation"]:
return 0
player_state = Player(player.player_id, player.provider_id)
self._players[player.player_id] = player_state
setattr(player_state, "_on_update", self.__player_updated)
+ group_parents = self.__get_player_group_parents(player)
+ active_queue = self.__get_player_active_queue(player, group_parents)
player_state.name = self.__get_player_name(player)
player_state.powered = self.__get_player_power_state(player)
- player_state.elapsed_time = int(player.elapsed_time)
- player_state.state = self.__get_player_state(player)
+ if active_queue != player.player_id:
+ player_state.elapsed_time = self._players[active_queue].elapsed_time
+ player_state.current_uri = self._players[active_queue].current_uri
+ else:
+ player_state.elapsed_time = int(player.elapsed_time)
+ player_state.current_uri = player.current_uri
+ player_state.state = self.__get_player_state(player, active_queue)
player_state.available = False if not player_enabled else player.available
- player_state.current_uri = player.current_uri
player_state.volume_level = self.__get_player_volume_level(player)
player_state.muted = self.__get_player_mute_state(player)
player_state.is_group_player = player.is_group_player
player_state.should_poll = player.should_poll
player_state.features = player.features
player_state.config_entries = self.__get_player_config_entries(player)
+ player_state.active_queue = active_queue
+ if active_queue in self._player_queues:
+ player_state.cur_queue_item_id = self._player_queues[active_queue].cur_item_id
@callback
def __get_player_name(self, player: Player):
return player.volume_level
@callback
- def __get_player_state(self, player: Player):
+ def __get_player_state(self, player: Player, active_parent: str):
"""Get final/calculated player's state."""
if not player.available or not player.powered:
return PlayerState.Off
- # TODO: prefer group player state
- # for group_parent_id in self.group_parents:
- # group_player = self.mass.player_manager.get_player_sync(group_parent_id)
- # if group_player and group_player.state != PlayerState.Off:
- # return group_player.state
+ if active_parent != player.player_id:
+ # use group state
+ return self._players[active_parent].state
return player.state
@callback
# TODO: Handle VolumeControl plugin for mute state?
return player.muted
+ @callback
+ def __get_player_group_parents(self, player: Player):
+ """Return all group players this player belongs to."""
+ if player.is_group_player:
+ return []
+ result = []
+ for group_player in self._players.values():
+ if not group_player.is_group_player:
+ continue
+ if not player.player_id in group_player.group_childs:
+ continue
+ result.append(group_player.player_id)
+ return result
+
+ @callback
+ def __get_player_active_queue(self, player: Player, group_parents: List[str]):
+ """Return the active parent player/queue for a player."""
+ # if a group is playing, all of it's childs will have/use
+ # the parent's player's queue.
+ for group_player_id in group_parents:
+ group_player = self.get_player(group_player_id)
+ if group_player and group_player.powered:
+ return group_player_id
+ return player.player_id
+
@callback
def __get_player_config_entries(self, player: Player):
"""Get final/calculated config entries for this player."""
)
)
# append volume control config entries
- power_controls = self.get_player_controls(PlayerControlType.VOLUME)
- if power_controls:
- controls = [item.name for item in power_controls]
+ volume_controls = self.get_player_controls(PlayerControlType.VOLUME)
+ if volume_controls:
+ controls = [{"text": item.name, "value": item.id} for item in volume_controls]
entries.append(
ConfigEntry(
entry_key=CONF_VOLUME_CONTROL,
if not player.available and changed_value != "available":
# ignore updates from unavailable players
return
- LOGGER.info("Player %s updated value %s", player_id, changed_value)
- # TODO: throttle elapsed time ?
- if not changed_value in ["elapsed_time", "current_uri", "config_entries"]:
+ if changed_value == "config_entries":
+ return # we can ignore this too
+ # store datetime the player was last updated
+ player.updated_at = datetime.utcnow()
+ # signal player_updated on all state changes except elapsed time
+ if not changed_value == "elapsed_time":
self.mass.signal_event(EVENT_PLAYER_CHANGED, self._players[player_id])
- if player_id in self._player_queues:
+ # signal child players
+ if player.is_group_player:
+ for child_player_id in player.group_childs:
+ child_player = self.get_player(child_player_id)
+ self.mass.add_job(self.async_update_player(child_player))
+ if player_id in self._player_queues and player.active_queue == player_id:
self.mass.add_job(self._player_queues[player_id].async_update_state())
+
- @callback
- def __player_control_updated(self, control: PlayerControl):
- """Call when player control is updated."""
- LOGGER.info("PlayerControl %s updated!", control.name)
- self.mass.signal_event(EVENT_PLAYER_CONTROL_UPDATED, control.id)
- # update all players using this playercontrol
- for player_id, player in self._players.items():
- conf = self.mass.config.player_settings[player_id]
- if control.id in [conf.get(CONF_POWER_CONTROL), conf.get(CONF_VOLUME_CONTROL)]:
- self.mass.add_job(self.async_update_player(player))
-
-
-# @property
-# def group_parents(self):
-# """[PROTECTED] player ids of all groups this player belongs to"""
-# player_ids = []
-# for item in self.mass.player_manager.players:
-# if self.player_id in item.group_childs:
-# player_ids.append(item.player_id)
-# return player_ids
-
-# @property
-# def group_childs(self) -> list:
-# """
-# [PROTECTED]
-# return all child player ids for this group player as list
-# empty list if this player is not a group player
-# """
-# return self._group_childs
-
-# @group_childs.setter
-# def group_childs(self, group_childs: list):
-# """[PROTECTED] set group_childs property of this player."""
-# if group_childs != self._group_childs:
-# self._group_childs = group_childs
-# self.mass.add_job(self.update())
-# for child_player_id in group_childs:
-# self.mass.add_job(
-# self.mass.player_manager.trigger_update(child_player_id)
-# )
-
-# def add_group_child(self, child_player_id):
-# """add player as child to this group player."""
-# if not child_player_id in self._group_childs:
-# self._group_childs.append(child_player_id)
-# self.mass.add_job(self.update())
-# self.mass.add_job(
-# self.mass.player_manager.trigger_update(child_player_id)
-# )
-
-# def remove_group_child(self, child_player_id):
-# """remove player as child from this group player."""
-# if child_player_id in self._group_childs:
-# self._group_childs.remove(child_player_id)
-# self.mass.add_job(self.update())
-# self.mass.add_job(
-# self.mass.player_manager.trigger_update(child_player_id)
-# )
-
-# @property
-# def elapsed_time(self):
-# """[PROTECTED] elapsed_time (player's elapsed time) property of this player."""
-# # prefer group player state
-# for group_id in self.group_parents:
-# group_player = self.mass.player_manager.get_player_sync(group_id)
-# if group_player.state != PlayerState.Off:
-# return group_player.elapsed_time
-# return self._elapsed_time
-
-# @elapsed_time.setter
-# def elapsed_time(self, elapsed_time: int):
-# """[PROTECTED] set elapsed_time (player's elapsed time) property of this player."""
-# if elapsed_time is None:
-# elapsed_time = 0
-# if elapsed_time != self._elapsed_time:
-# self._elapsed_time = elapsed_time
-# self._media_position_updated_at = time.time()
-# self.mass.add_job(self.update())
-
-# @property
-# def media_position_updated_at(self):
-# """[PROTECTED] When was the position of the current playing media valid."""
-# return self._media_position_updated_at
-
-# def to_dict(self):
-# """instance attributes as dict so it can be serialized to json"""
-# return {
-# "player_id": self.player_id,
-# "player_provider": self.player_provider,
-# "name": self.name,
-# "is_group_player": self.is_group_player,
-# "state": self.state,
-# "powered": self.powered,
-# "elapsed_time": self.elapsed_time,
-# "media_position_updated_at": self.media_position_updated_at,
-# "current_uri": self.current_uri,
-# "volume_level": self.volume_level,
-# "muted": self.muted,
-# "group_parents": self.group_parents,
-# "group_childs": self.group_childs,
-# "enabled": self.enabled,
-# "supports_queue": self.supports_queue,
-# "supports_gapless": self.supports_gapless,
-# }
class ChromecastProvider(PlayerProvider):
"""Support for ChromeCast Audio PlayerProvider."""
+ def __init__(self, *args, **kwargs):
+ """Initialize."""
+ self.mz_mgr = MultizoneManager()
+ self._players = {}
+ self._listener = None
+ self._browser = None
+ super().__init__(*args, **kwargs)
+
@property
def id(self) -> str:
"""Return provider ID for this provider."""
async def async_on_start(self) -> bool:
"""Called on startup. Handle initialization of the provider based on config."""
- # pylint: disable=attribute-defined-outside-init
- self.mz_mgr = MultizoneManager()
- self._players = {}
self._listener = pychromecast.CastListener(
self.__chromecast_add_update_callback,
self.__chromecast_remove_callback,
self.__chromecast_add_update_callback,
)
self._browser = pychromecast.discovery.start_discovery(self._listener, self.mass.zeroconf)
- self.available = True
return True
async def async_on_stop(self):
"""Called on shutdown. Handle correct close/cleanup of the provider on exit."""
- if not self.available:
+ if not self._browser:
return
# stop discovery
pychromecast.stop_discovery(self._browser)
player = ChromecastPlayer(self.mass, cast_info)
self._players[player_id] = player
self.mass.add_job(self.mass.player_manager.async_add_player(player))
- self.mass.add_job(self._players[player_id].async_set_cast_info, cast_info)
+ self.mass.add_job(self._players[player_id].set_cast_info, cast_info)
def __chromecast_remove_callback(self, cast_uuid, cast_service_name, cast_service):
# pylint: disable=unused-argument
from typing import List, Optional
from datetime import datetime
import pychromecast
+import uuid
from music_assistant.models.player import DeviceInfo, Player, PlayerFeature, PlayerState
from music_assistant.models.player_queue import QueueItem
from music_assistant.utils import compare_strings
def group_childs(self):
"""Return group_childs."""
if self._cast_info.is_audio_group and self._chromecast and not self._is_speaker_group:
- return self._chromecast.mz_controller.members
+ return [str(uuid.UUID(item)) for item in self._chromecast.mz_controller.members]
return []
@property
manufacturer=self._cast_info.manufacturer,
)
- async def async_set_cast_info(self, cast_info: ChromecastInfo):
+ async def set_cast_info(self, cast_info: ChromecastInfo):
"""Set the cast information and set up the chromecast object."""
self._cast_info = cast_info
if self._chromecast is not None:
Demo PlayerProvider which provides fake players.
"""
+ def __init__(self, *args, **kwargs):
+ """Initialize."""
+ self._players = {}
+ super().__init__(*args, **kwargs)
+
@property
def id(self) -> str:
"""Return provider ID for this provider."""
async def async_on_start(self) -> bool:
"""Called on startup. Handle initialization of the provider based on config."""
- self._players = {}
# create some fake players
for count in range(11)[1:]:
player_id = f"demo_{count}"
import slugify as slug
from hass_client import HomeAssistant, EVENT_CONNECTED, EVENT_STATE_CHANGED
from music_assistant.constants import (
- CONF_TOKEN,
CONF_URL,
EVENT_HASS_ENTITY_CHANGED,
EVENT_PLAYER_ADDED,
from music_assistant.models.config_entry import ConfigEntry, ConfigEntryType
from music_assistant.models.player import Player, PlayerControl, PlayerControlType
from music_assistant.models.provider import Provider
-from music_assistant.utils import run_periodic, callback
+from music_assistant.utils import run_periodic, callback, try_parse_float
PROV_ID = "homeassistant"
PROV_NAME = "Home Assistant integration"
CONF_PUBLISH_PLAYERS = "hass_publish_players"
CONF_POWER_ENTITIES = "hass_power_entities"
CONF_VOLUME_ENTITIES = "hass_volume_entities"
+CONF_TOKEN = "hass_token"
LOGGER = logging.getLogger(PROV_ID)
ConfigEntry(
entry_key=CONF_PUBLISH_PLAYERS,
entry_type=ConfigEntryType.BOOL,
- description_key=CONF_TOKEN,
+ description_key=CONF_PUBLISH_PLAYERS,
default_value=True,
),
]
allows using hass entities (like switches, media_players or gui inputs) to be triggered
"""
- _hass = None
- _tasks = []
- _tracked_entities = {}
- _sources = []
- _published_players = {}
- _power_entities = []
- _volume_entities = []
+ def __init__(self, *args, **kwargs):
+ """Initialize."""
+ self._hass: HomeAssistant = None
+ self._tasks = []
+ self._tracked_entities = []
+ self._sources = []
+ self._published_players = {}
+ self._power_entities = []
+ self._volume_entities = []
+ super().__init__(*args, **kwargs)
@property
def id(self) -> str:
values=self.__get_power_control_entities(),
multi_value=True,
),
+ ConfigEntry(
+ entry_key=CONF_VOLUME_ENTITIES,
+ entry_type=ConfigEntryType.STRING,
+ description_key=CONF_VOLUME_ENTITIES,
+ default_value=[],
+ values=self.__get_volume_control_entities(),
+ multi_value=True,
+ ),
]
async def async_on_start(self) -> bool:
if IS_HASSIO:
config[CONF_TOKEN] = os.environ["HASSIO_TOKEN"]
config[CONF_URL] = "hassio/homeassistant"
- # pylint: disable=attribute-defined-outside-init
if not (config[CONF_URL] and config[CONF_TOKEN]):
LOGGER.warning("Invalid configuration for Home Assistant")
return False
self._hass = HomeAssistant(config[CONF_URL], config[CONF_TOKEN])
# register callbacks
self._hass.register_event_callback(self.__async_hass_event)
- self.mass.add_event_listener(self.__async_mass_event, EVENT_PLAYER_CHANGED)
- self.mass.add_event_listener(self.__async_mass_event, EVENT_PLAYER_ADDED)
- self.mass.add_event_listener(self.__async_mass_event, EVENT_PLAYER_REMOVED)
+ self.mass.add_event_listener(
+ self.__async_mass_event,
+ [EVENT_PLAYER_CHANGED, EVENT_PLAYER_ADDED, EVENT_PLAYER_REMOVED],
+ )
await self._hass.async_connect()
self._tasks.append(self.mass.add_job(self.__async_get_sources()))
return True
if event_type == EVENT_STATE_CHANGED:
if event_data["entity_id"] in self._tracked_entities:
new_state = event_data["new_state"]
- LOGGER.info(
- "Received new state for %s: %s", event_data["entity_id"], new_state["state"]
- )
- control = self.mass.player_manager.get_player_control(
- self._tracked_entities[event_data["entity_id"]])
- control.state = new_state["state"] != "off"
+ await self.__async_update_player_controls(new_state)
elif event_type == "call_service" and event_data["domain"] == "media_player":
await self.__async_handle_player_command(
event_data["service"], event_data["service_data"]
)
elif event_type == EVENT_CONNECTED:
# register player controls on connect
- self.mass.add_job(self.__async_register_power_controls())
+ # await self.__async_register_power_controls()
+ await self.__async_register_volume_controls()
async def __async_handle_player_command(self, service, service_data):
"""Handle forwarded service call for one of our players."""
"""Publish player details to Home Assistant."""
if not self.mass.config.providers[PROV_ID][CONF_PUBLISH_PLAYERS]:
return False
- # TODO: throttle updates to home assistant ?
player_id = player.player_id
entity_id = "media_player.mass_" + slug.slugify(player.name, separator="_").lower()
- state = player.state
+ player_queue = self.mass.player_manager.get_player_queue(player_id)
+ cur_item = player_queue.cur_item if player_queue else None
state_attributes = {
"supported_features": 65471,
"friendly_name": player.name,
"source": "unknown",
"volume_level": player.volume_level / 100,
"is_volume_muted": player.muted,
- # "media_position_updated_at": player.media_position_updated_at,
- "media_duration": None,
- "media_position": player.elapsed_time,
- "media_title": None,
- "media_artist": None,
- "media_album_name": None,
- "entity_picture": None,
+ "media_position_updated_at": player.updated_at.isoformat(),
+ "media_duration": cur_item.duration if cur_item else None,
+ "media_position": player_queue.cur_item_time if player_queue else None,
+ "media_title": cur_item.name if cur_item else None,
+ "media_artist": cur_item.artists[0].name if cur_item else None,
+ "media_album_name": cur_item.album.name if cur_item else None,
+ "entity_picture": cur_item.album.metadata.get("image") if cur_item else None,
"mass_player_id": player_id,
}
- # if state != "off":
- # player = await self.mass.player_manager.get_player(player_id)
- # if player.queue.cur_item:
- # state_attributes["media_duration"] = player.queue.cur_item.duration
- # state_attributes["media_title"] = player.queue.cur_item.name
- # if player.queue.cur_item.artists:
- # state_attributes["media_artist"] = player.queue.cur_item.artists[
- # 0
- # ].name
- # if player.queue.cur_item.album:
- # state_attributes[
- # "media_album_name"
- # ] = player.queue.cur_item.album.name
- # state_attributes[
- # "entity_picture"
- # ] = player.queue.cur_item.album.metadata.get("image")
self._published_players[entity_id] = player.player_id
- await self._hass.async_set_state(entity_id, state, state_attributes)
+ await self._hass.async_set_state(entity_id, player.state, state_attributes)
@run_periodic(600)
async def __async_get_sources(self):
"""We build a list of all playlists to use as player sources."""
+ # pylint: disable=attribute-defined-outside-init
self._sources = [
playlist.name
async for playlist in self.mass.music_manager.async_get_library_playlists()
entity_name = entity["attributes"].get("friendly_name", entity_id)
if entity_id.startswith("media_player.mass_"):
continue
- source_list = entity["attributes"].get("source_list")
- if source_list:
- # media_player with source support
- for source in source_list:
- result.append(
- {
- "value": f"{entity_id}|{source}",
- "text": f"{entity_name}: {source}",
- "entity_id": entity_id,
- "source": source,
- }
- )
- else:
- # media_player/switch without source support
+ source_list = entity["attributes"].get("source_list", [""])
+ for source in source_list:
result.append(
{
- "value": f"{entity_id}",
- "text": f"{entity_name}",
+ "value": f"power_{entity_id}_{source}",
+ "text": f"{entity_name}: {source}" if source else entity_name,
"entity_id": entity_id,
- "source": None
- })
+ "source": source,
+ }
+ )
+ return result
+ @callback
+ def __get_volume_control_entities(self):
+ """Return list of entities that can be used as volume control."""
+ if not self._hass or not self._hass.states:
+ return []
+ result = []
+ for entity in self._hass.media_players:
+ entity_id = entity["entity_id"]
+ entity_name = entity["attributes"].get("friendly_name", entity_id)
+ if entity_id.startswith("media_player.mass_"):
+ continue
+ result.append(
+ {"value": f"volume_{entity_id}", "text": entity_name, "entity_id": entity_id}
+ )
return result
+ async def __async_update_player_controls(self, entity_obj):
+ """Update player control(s) when a new entity state comes in."""
+ for control_entity in self.__get_power_control_entities():
+ if control_entity["entity_id"] != entity_obj["entity_id"]:
+ continue
+ cur_state = entity_obj["state"] != "off"
+ if control_entity.get("source"):
+ cur_state = entity_obj["attributes"].get("source") == control_entity["source"]
+ await self.mass.player_manager.async_update_player_control(
+ control_entity["value"], cur_state
+ )
+ for control_entity in self.__get_volume_control_entities():
+ if control_entity["entity_id"] != entity_obj["entity_id"]:
+ continue
+ cur_state = int(try_parse_float(entity_obj["attributes"].get("volume_level")) * 100)
+ await self.mass.player_manager.async_update_player_control(
+ control_entity["value"], cur_state
+ )
+
async def __async_register_power_controls(self):
"""Register all (enabled) power controls."""
conf = self.mass.config.providers[PROV_ID]
id=control_entity["value"],
name=control_entity["text"],
state=cur_state,
- set_state=functools.partial(self.async_power_control_set_state, control_entity["value"]),
+ set_state=self.async_power_control_set_state,
)
# store some vars on the control object for convenience
control.entity_id = entity_id
control.source = source
await self.mass.player_manager.async_register_player_control(control)
- self._tracked_entities[entity_id] = control_entity["value"]
+ if not entity_id in self._tracked_entities:
+ self._tracked_entities.append(entity_id)
+
+ async def __async_register_volume_controls(self):
+ """Register all (enabled) power controls."""
+ conf = self.mass.config.providers[PROV_ID]
+ for control_entity in self.__get_volume_control_entities():
+ enabled_controls = conf[CONF_VOLUME_ENTITIES]
+ if not control_entity["value"] in enabled_controls:
+ continue
+ entity_id = control_entity["entity_id"]
+ # cur_volume = try_parse_float(self._hass.get_state(entity_id, "volume_level")) * 100
+ cur_volume = 10
+ control = PlayerControl(
+ type=PlayerControlType.VOLUME,
+ id=control_entity["value"],
+ name=control_entity["text"],
+ state=cur_volume,
+ set_state=self.async_volume_control_set_state,
+ )
+ # store some vars on the control object for convenience
+ control.entity_id = entity_id
+ await self.mass.player_manager.async_register_player_control(control)
+ if not entity_id in self._tracked_entities:
+ self._tracked_entities.append(entity_id)
- async def async_power_control_set_state(self, control_id:str, new_state: bool):
+ async def async_power_control_set_state(self, control_id: str, new_state: bool):
"""Set state callback for power control."""
control = self.mass.player_manager.get_player_control(control_id)
+ if control.source:
+ cur_source = self._hass.get_state(control.entity_id, "source")
+ if cur_source is not None and cur_source != control.source:
+ return
if new_state and control.source:
+ # select source
await self._hass.async_call_service(
"media_player",
"select_source",
{"source": control.source, "entity_id": control.entity_id},
)
- elif new_state and not control.source:
+ elif new_state:
+ # simple turn off
await self._hass.async_call_service(
"homeassistant", "turn_on", {"entity_id": control.entity_id}
)
else:
+ # simple turn off
await self._hass.async_call_service(
"homeassistant", "turn_off", {"entity_id": control.entity_id}
)
+
+ async def async_volume_control_set_state(self, control_id: str, new_state: int):
+ """Set state callback for volume control."""
+ control = self.mass.player_manager.get_player_control(control_id)
+ await self._hass.async_call_service(
+ "media_player",
+ "volume_set",
+ {"volume_level": new_state / 100, "entity_id": control.entity_id},
+ )
--- /dev/null
+.vertical-btn[data-v-21e0f2f0]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.divider[data-v-21e0f2f0]{height:1px;width:100%;background-color:#ccc}.right[data-v-21e0f2f0]{float:right}.left[data-v-21e0f2f0]{float:left}.vertical-btn[data-v-7c65a917]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.body{background-color:#000;overscroll-behavior-x:none}.scroller[data-v-764b0c8e]{height:100%}
\ No newline at end of file
+++ /dev/null
-.vertical-btn[data-v-60780b7f]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.divider[data-v-60780b7f]{height:1px;width:100%;background-color:#ccc}.right[data-v-60780b7f]{float:right}.left[data-v-60780b7f]{float:left}.vertical-btn[data-v-3db1a01d]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.body{background-color:#000;overscroll-behavior-x:none}.scroller[data-v-764b0c8e]{height:100%}
\ No newline at end of file
-<!DOCTYPE html><html lang=en><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><!--[if IE]><link rel="icon" href="favicon.ico"><![endif]--><title>Music Assistant</title><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900"><link rel=stylesheet href=https://cdn.jsdelivr.net/npm/@mdi/font@latest/css/materialdesignicons.min.css><link href=css/config.2956469c.css rel=prefetch><link href=css/itemdetails.28909c9e.css rel=prefetch><link href=css/itemdetails~playerqueue~search.133d2876.css rel=prefetch><link href=js/config.6e3bd196.js rel=prefetch><link href=js/itemdetails.79b5fa05.js rel=prefetch><link href=js/itemdetails~playerqueue~search.3c623cdf.js rel=prefetch><link href=js/playerqueue.84a8618a.js rel=prefetch><link href=js/search.31a9bea8.js rel=prefetch><link href=css/app.efe7d7a1.css rel=preload as=style><link href=css/chunk-vendors.f9907851.css rel=preload as=style><link href=js/app.5176fd2b.js rel=preload as=script><link href=js/chunk-vendors.31828971.js rel=preload as=script><link href=css/chunk-vendors.f9907851.css rel=stylesheet><link href=css/app.efe7d7a1.css rel=stylesheet><link rel=icon type=image/png sizes=32x32 href=img/icons/favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=img/icons/favicon-16x16.png><link rel=manifest href=manifest.json><meta name=theme-color content=#424242><meta name=apple-mobile-web-app-capable content=yes><meta name=apple-mobile-web-app-status-bar-style content=black><meta name=apple-mobile-web-app-title content="Music Assistant"><link rel=apple-touch-icon href=img/icons/apple-touch-icon-152x152.png><link rel=mask-icon href=img/icons/safari-pinned-tab.svg color=#424242><meta name=msapplication-TileImage content=img/icons/msapplication-icon-144x144.png><meta name=msapplication-TileColor content=#424242></head><body><noscript><strong>We're sorry but musicassistant-frontend doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id=app></div><script src=js/chunk-vendors.31828971.js></script><script src=js/app.5176fd2b.js></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html lang=en><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><!--[if IE]><link rel="icon" href="favicon.ico"><![endif]--><title>Music Assistant</title><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900"><link rel=stylesheet href=https://cdn.jsdelivr.net/npm/@mdi/font@latest/css/materialdesignicons.min.css><link href=css/config.2956469c.css rel=prefetch><link href=css/itemdetails.28909c9e.css rel=prefetch><link href=css/itemdetails~playerqueue~search.133d2876.css rel=prefetch><link href=js/config.165ed655.js rel=prefetch><link href=js/itemdetails.79b5fa05.js rel=prefetch><link href=js/itemdetails~playerqueue~search.3c623cdf.js rel=prefetch><link href=js/playerqueue.84a8618a.js rel=prefetch><link href=js/search.31a9bea8.js rel=prefetch><link href=css/app.051f35c4.css rel=preload as=style><link href=css/chunk-vendors.f9907851.css rel=preload as=style><link href=js/app.d45df414.js rel=preload as=script><link href=js/chunk-vendors.31828971.js rel=preload as=script><link href=css/chunk-vendors.f9907851.css rel=stylesheet><link href=css/app.051f35c4.css rel=stylesheet><link rel=icon type=image/png sizes=32x32 href=img/icons/favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=img/icons/favicon-16x16.png><link rel=manifest href=manifest.json><meta name=theme-color content=#424242><meta name=apple-mobile-web-app-capable content=yes><meta name=apple-mobile-web-app-status-bar-style content=black><meta name=apple-mobile-web-app-title content="Music Assistant"><link rel=apple-touch-icon href=img/icons/apple-touch-icon-152x152.png><link rel=mask-icon href=img/icons/safari-pinned-tab.svg color=#424242><meta name=msapplication-TileImage content=img/icons/msapplication-icon-144x144.png><meta name=msapplication-TileColor content=#424242></head><body><noscript><strong>We're sorry but musicassistant-frontend doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id=app></div><script src=js/chunk-vendors.31828971.js></script><script src=js/app.d45df414.js></script></body></html>
\ No newline at end of file
+++ /dev/null
-(function(e){function t(t){for(var i,r,o=t[0],l=t[1],c=t[2],u=0,p=[];u<o.length;u++)r=o[u],Object.prototype.hasOwnProperty.call(n,r)&&n[r]&&p.push(n[r][0]),n[r]=0;for(i in l)Object.prototype.hasOwnProperty.call(l,i)&&(e[i]=l[i]);d&&d(t);while(p.length)p.shift()();return s.push.apply(s,c||[]),a()}function a(){for(var e,t=0;t<s.length;t++){for(var a=s[t],i=!0,r=1;r<a.length;r++){var o=a[r];0!==n[o]&&(i=!1)}i&&(s.splice(t--,1),e=l(l.s=a[0]))}return e}var i={},r={app:0},n={app:0},s=[];function o(e){return l.p+"js/"+({config:"config","itemdetails~playerqueue~search":"itemdetails~playerqueue~search",itemdetails:"itemdetails",playerqueue:"playerqueue",search:"search"}[e]||e)+"."+{config:"6e3bd196","itemdetails~playerqueue~search":"3c623cdf",itemdetails:"79b5fa05",playerqueue:"84a8618a",search:"31a9bea8"}[e]+".js"}function l(t){if(i[t])return i[t].exports;var a=i[t]={i:t,l:!1,exports:{}};return e[t].call(a.exports,a,a.exports,l),a.l=!0,a.exports}l.e=function(e){var t=[],a={config:1,"itemdetails~playerqueue~search":1,itemdetails:1};r[e]?t.push(r[e]):0!==r[e]&&a[e]&&t.push(r[e]=new Promise((function(t,a){for(var i="css/"+({config:"config","itemdetails~playerqueue~search":"itemdetails~playerqueue~search",itemdetails:"itemdetails",playerqueue:"playerqueue",search:"search"}[e]||e)+"."+{config:"2956469c","itemdetails~playerqueue~search":"133d2876",itemdetails:"28909c9e",playerqueue:"31d6cfe0",search:"31d6cfe0"}[e]+".css",n=l.p+i,s=document.getElementsByTagName("link"),o=0;o<s.length;o++){var c=s[o],u=c.getAttribute("data-href")||c.getAttribute("href");if("stylesheet"===c.rel&&(u===i||u===n))return t()}var p=document.getElementsByTagName("style");for(o=0;o<p.length;o++){c=p[o],u=c.getAttribute("data-href");if(u===i||u===n)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var i=t&&t.target&&t.target.src||n,s=new Error("Loading CSS chunk "+e+" failed.\n("+i+")");s.code="CSS_CHUNK_LOAD_FAILED",s.request=i,delete r[e],d.parentNode.removeChild(d),a(s)},d.href=n;var m=document.getElementsByTagName("head")[0];m.appendChild(d)})).then((function(){r[e]=0})));var i=n[e];if(0!==i)if(i)t.push(i[2]);else{var s=new Promise((function(t,a){i=n[e]=[t,a]}));t.push(i[2]=s);var c,u=document.createElement("script");u.charset="utf-8",u.timeout=120,l.nc&&u.setAttribute("nonce",l.nc),u.src=o(e);var p=new Error;c=function(t){u.onerror=u.onload=null,clearTimeout(d);var a=n[e];if(0!==a){if(a){var i=t&&("load"===t.type?"missing":t.type),r=t&&t.target&&t.target.src;p.message="Loading chunk "+e+" failed.\n("+i+": "+r+")",p.name="ChunkLoadError",p.type=i,p.request=r,a[1](p)}n[e]=void 0}};var d=setTimeout((function(){c({type:"timeout",target:u})}),12e4);u.onerror=u.onload=c,document.head.appendChild(u)}return Promise.all(t)},l.m=e,l.c=i,l.d=function(e,t,a){l.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:a})},l.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.t=function(e,t){if(1&t&&(e=l(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var a=Object.create(null);if(l.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)l.d(a,i,function(t){return e[t]}.bind(null,i));return a},l.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return l.d(t,"a",t),t},l.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},l.p="",l.oe=function(e){throw e};var c=window["webpackJsonp"]=window["webpackJsonp"]||[],u=c.push.bind(c);c.push=t,c=c.slice();for(var p=0;p<c.length;p++)t(c[p]);var d=u;s.push([0,"chunk-vendors"]),a()})({0:function(e,t,a){e.exports=a("56d7")},"034f":function(e,t,a){"use strict";var i=a("85ec"),r=a.n(i);r.a},"0863":function(e,t,a){e.exports=a.p+"img/qobuz.c7eb9a76.png"},"0c3b":function(e,t,a){e.exports=a.p+"img/spotify.1f3fb1af.png"},"0dac":function(e,t,a){"use strict";var i=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("section",[a("v-app-bar",{staticStyle:{"margin-bottom":"-8px"},attrs:{flat:"",light:"",dense:"",color:"transparent"}},[a("v-label",{attrs:{light:""}},[e._v(e._s(e.items.length+" "+e.$t("items")))]),a("v-spacer"),a("v-menu",{attrs:{left:"","close-on-content-click":!1},scopedSlots:e._u([{key:"activator",fn:function(t){var i=t.on;return[a("v-btn",e._g({attrs:{icon:""}},i),[a("v-icon",[e._v("sort")])],1)]}}])},[a("v-list",e._l(e.sortKeys,(function(t){return a("v-list-item",{key:t.value,domProps:{textContent:e._s(t.text)},on:{click:function(a){e.sortBy=t.value}}})})),1)],1),a("v-btn",{attrs:{icon:""},on:{click:function(t){e.sortDesc=!e.sortDesc}}},[e.sortDesc?e._e():a("v-icon",[e._v("arrow_upward")]),e.sortDesc?a("v-icon",[e._v("arrow_downward")]):e._e()],1),a("v-menu",{attrs:{left:"","close-on-content-click":!1},scopedSlots:e._u([{key:"activator",fn:function(t){var i=t.on;return[a("v-btn",e._g({attrs:{icon:""}},i),[a("v-icon",[e._v("search")])],1)]}}])},[a("v-card",[a("v-text-field",{attrs:{clearable:"","prepend-inner-icon":"search",label:"Search","hide-details":"",solo:"",dense:""},model:{value:e.search,callback:function(t){e.search=t},expression:"search"}})],1)],1),a("v-btn",{staticStyle:{"margin-right":"-15px"},attrs:{icon:""},on:{click:function(t){return e.toggleViewMode()}}},["panel"==e.viewMode?a("v-icon",[e._v("view_list")]):e._e(),"list"==e.viewMode?a("v-icon",[e._v("grid_on")]):e._e()],1)],1),a("v-data-iterator",{attrs:{items:e.items,search:e.search,"sort-by":e.sortBy,"sort-desc":e.sortDesc,"custom-filter":e.filteredItems,"hide-default-footer":"","disable-pagination":"",loading:""},scopedSlots:e._u([{key:"default",fn:function(t){return["panel"==e.viewMode?a("v-container",{attrs:{fluid:""}},[a("v-row",{attrs:{dense:"","align-content":"stretch",align:"stretch"}},e._l(t.items,(function(t){return a("v-col",{key:t.item_id,attrs:{"align-self":"stretch"}},[a("PanelviewItem",{attrs:{item:t,thumbWidth:e.thumbWidth,thumbHeight:e.thumbHeight}})],1)})),1)],1):e._e(),"list"==e.viewMode?a("v-list",{attrs:{"two-line":""}},[a("RecycleScroller",{staticClass:"scroller",attrs:{items:t.items,"item-size":72,"key-field":"item_id","page-mode":""},scopedSlots:e._u([{key:"default",fn:function(t){var i=t.item;return[a("ListviewItem",{attrs:{item:i,hideavatar:3==i.media_type&&e.$store.isMobile,hidetracknum:!0,hideproviders:i.media_type<4&&e.$store.isMobile,hidelibrary:!0,hidemenu:3==i.media_type&&e.$store.isMobile,hideduration:5==i.media_type}})]}}],null,!0)})],1):e._e()]}}])})],1)},r=[],n=(a("caad"),a("b0c0"),a("2532"),a("54f8")),s=(a("96cf"),a("c964")),o=a("d3cc"),l=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("v-card",{directives:[{name:"longpress",rawName:"v-longpress",value:e.menuClick,expression:"menuClick"}],attrs:{light:"","min-height":e.thumbHeight,"min-width":e.thumbWidth,"max-width":1.6*e.thumbWidth,hover:"",outlined:""},on:{click:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"left",37,t.key,["Left","ArrowLeft"])||"button"in t&&0!==t.button?null:void(e.onclickHandler?e.onclickHandler(e.item):e.itemClicked(e.item))},contextmenu:[e.menuClick,function(e){e.preventDefault()}]}},[i("v-img",{attrs:{src:e.$server.getImageUrl(e.item,"image",e.thumbWidth),width:"100%","aspect-ratio":"1"}}),e.isHiRes?i("div",{staticStyle:{position:"absolute","margin-left":"5px","margin-top":"-13px",height:"30px","background-color":"white","border-radius":"3px"}},[i("v-tooltip",{attrs:{bottom:""},scopedSlots:e._u([{key:"activator",fn:function(t){var r=t.on;return[i("img",e._g({attrs:{src:a("f5e3"),height:"25"}},r))]}}],null,!1,1400808392)},[i("span",[e._v(e._s(e.isHiRes))])])],1):e._e(),i("v-divider"),i("v-card-title",{class:e.$store.isMobile?"body-2":"title",staticStyle:{padding:"8px",color:"primary","margin-top":"8px"},domProps:{textContent:e._s(e.item.name)}}),e.item.artist?i("v-card-subtitle",{class:e.$store.isMobile?"caption":"body-1",staticStyle:{padding:"8px"},domProps:{textContent:e._s(e.item.artist.name)}}):e._e(),e.item.artists?i("v-card-subtitle",{class:e.$store.isMobile?"caption":"body-1",staticStyle:{padding:"8px"},domProps:{textContent:e._s(e.item.artists[0].name)}}):e._e()],1)},c=[],u=(a("4160"),a("a9e3"),a("2b0e")),p=600;u["a"].directive("longpress",{bind:function(e,t,a){var i=t.value;if("function"===typeof i){var r=null,n=function(e){"click"===e.type&&0!==e.button||null===r&&(r=setTimeout((function(){return i(e)}),p))},s=function(){null!==r&&(clearTimeout(r),r=null)};["mousedown","touchstart"].forEach((function(t){return e.addEventListener(t,n)})),["click","mouseout","touchend","touchcancel"].forEach((function(t){return e.addEventListener(t,s)}))}else u["a"].$log.warn("Expect a function, got ".concat(i))}});var d=u["a"].extend({components:{},props:{item:Object,thumbHeight:Number,thumbWidth:Number,hideproviders:Boolean,hidelibrary:Boolean,onclickHandler:null},data:function(){return{touchMoving:!1,cancelled:!1}},computed:{isHiRes:function(){var e,t=Object(n["a"])(this.item.provider_ids);try{for(t.s();!(e=t.n()).done;){var a=e.value;if(a.quality>6)return a.details?a.details:7===a.quality?"44.1/48khz 24 bits":8===a.quality?"88.2/96khz 24 bits":9===a.quality?"176/192khz 24 bits":"+192kHz 24 bits"}}catch(i){t.e(i)}finally{t.f()}return""}},created:function(){},beforeDestroy:function(){this.cancelled=!0},mounted:function(){},methods:{itemClicked:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t="";if(1===e.media_type)t="/artists/"+e.item_id;else if(2===e.media_type)t="/albums/"+e.item_id;else{if(4!==e.media_type)return void this.$server.$emit("showPlayMenu",e);t="/playlists/"+e.item_id}this.$router.push({path:t,query:{provider:e.provider}})},menuClick:function(){this.cancelled||this.$server.$emit("showContextMenu",this.item)},toggleLibrary:function(e){var t=this;return Object(s["a"])(regeneratorRuntime.mark((function a(){return regeneratorRuntime.wrap((function(a){while(1)switch(a.prev=a.next){case 0:return t.cancelled=!0,a.next=3,t.$server.toggleLibrary(e);case 3:t.cancelled=!1;case 4:case"end":return a.stop()}}),a)})))()}}}),m=d,h=a("2877"),v=a("6544"),f=a.n(v),g=a("b0af"),y=a("99d9"),b=a("ce7e"),A=a("adda"),k=a("3a2f"),w=Object(h["a"])(m,l,c,!1,null,null,null),I=w.exports;f()(w,{VCard:g["a"],VCardSubtitle:y["a"],VCardTitle:y["c"],VDivider:b["a"],VImg:A["a"],VTooltip:k["a"]});var _={components:{ListviewItem:o["a"],PanelviewItem:I},props:["mediatype","endpoint"],data:function(){return{items:[],viewMode:"list",search:"",sortDesc:!1,sortBy:"name",sortKeys:[{text:this.$t("sort_name"),value:"name"}]}},created:function(){this.endpoint.includes("playlists/")?(this.sortKeys.push({text:this.$t("sort_position"),value:"position"}),this.sortKeys.push({text:this.$t("sort_artist"),value:"artists[0].name"}),this.sortKeys.push({text:this.$t("sort_album"),value:"album.name"}),this.sortBy="position",this.viewMode="list"):this.endpoint.includes("tracks")?(this.sortKeys.push({text:this.$t("sort_artist"),value:"artists[0].name"}),this.sortKeys.push({text:this.$t("sort_album"),value:"album.name"}),this.viewMode="list"):this.endpoint.includes("albums")?(this.sortKeys.push({text:this.$t("sort_artist"),value:"artist.name"}),this.sortKeys.push({text:this.$t("sort_date"),value:"year"}),this.viewMode="panel"):this.viewMode="list";var e=localStorage.getItem("viewMode"+this.mediatype+this.endpoint);null!==e&&(this.viewMode=e),this.getItems(),this.$server.$on("refresh_listing",this.getItems)},computed:{thumbWidth:function(){return this.$store.isMobile?120:175},thumbHeight:function(){return 1.5*this.thumbWidth}},methods:{getItems:function(){var e=this;return Object(s["a"])(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return t.next=2,e.$server.getAllItems(e.endpoint,e.items);case 2:case"end":return t.stop()}}),t)})))()},toggleViewMode:function(){"panel"===this.viewMode?this.viewMode="list":this.viewMode="panel",localStorage.setItem("viewMode"+this.mediatype+this.endpoint,this.viewMode)},filteredItems:function(e,t){if(!t)return e;t=t.toLowerCase();var a,i=[],r=Object(n["a"])(e);try{for(r.s();!(a=r.n()).done;){var s=a.value;(s.name.toLowerCase().includes(t)||s.artist&&s.artist.name.toLowerCase().includes(t)||s.album&&s.album.name.toLowerCase().includes(t)||s.artists&&s.artists[0].name.toLowerCase().includes(t))&&i.push(s)}}catch(o){r.e(o)}finally{r.f()}return i}}},x=_,S=(a("a548"),a("40dc")),D=a("8336"),C=a("62ad"),P=a("a523"),R=a("c3774"),B=a("132d"),O=a("24c9"),M=a("8860"),E=a("da13"),H=a("e449"),F=a("0fd9b"),L=a("2fa4"),J=a("8654"),V=Object(h["a"])(x,i,r,!1,null,"764b0c8e",null);t["a"]=V.exports;f()(V,{VAppBar:S["a"],VBtn:D["a"],VCard:g["a"],VCol:C["a"],VContainer:P["a"],VDataIterator:R["a"],VIcon:B["a"],VLabel:O["a"],VList:M["a"],VListItem:E["a"],VMenu:H["a"],VRow:F["a"],VSpacer:L["a"],VTextField:J["a"]})},"26ea":function(e,t,a){e.exports=a.p+"img/demo_player.c079bd97.png"},2755:function(e,t,a){e.exports=a.p+"img/http_streamer.4c4e4880.png"},3232:function(e,t,a){e.exports=a.p+"img/homeassistant.29fe3282.png"},"3d05":function(e,t,a){e.exports=a.p+"img/webplayer.8e1a0da9.png"},"49f8":function(e,t,a){var i={"./en.json":"edd4","./nl.json":"a625"};function r(e){var t=n(e);return a(t)}function n(e){if(!a.o(i,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return i[e]}r.keys=function(){return Object.keys(i)},r.resolve=n,e.exports=r,r.id="49f8"},"4bfb":function(e,t,a){e.exports=a.p+"img/default_artist.7305b29c.png"},"56d7":function(e,t,a){"use strict";a.r(t);a("e623"),a("e379"),a("5dc8"),a("37e1");var i=a("2b0e"),r=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("v-app",[a("TopBar"),a("NavigationMenu"),a("v-main",[a("router-view",{key:e.$route.path,attrs:{app:""}})],1),a("PlayerOSD",{attrs:{showPlayerSelect:e.showPlayerSelect}}),a("ContextMenu"),a("PlayerSelect"),a("v-overlay",{attrs:{value:e.$store.loading}},[a("v-progress-circular",{attrs:{indeterminate:"",size:"64"}})],1)],1)},n=[],s=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("v-navigation-drawer",{attrs:{dark:"",app:"",clipped:"",temporary:""},model:{value:e.$store.showNavigationMenu,callback:function(t){e.$set(e.$store,"showNavigationMenu",t)},expression:"$store.showNavigationMenu"}},[a("v-list",[e._l(e.items,(function(t){return a("v-list-item",{key:t.title,on:{click:function(a){return e.$router.push(t.path)}}},[a("v-list-item-action",[a("v-icon",[e._v(e._s(t.icon))])],1),a("v-list-item-content",[a("v-list-item-title",[e._v(e._s(t.title))])],1)],1)})),a("v-btn",{attrs:{icon:""},on:{click:function(t){e.$store.showNavigationMenu=!e.$store.showNavigationMenu}}})],2)],1)},o=[],l=i["a"].extend({props:{},data:function(){return{items:[{title:this.$t("home"),icon:"home",path:"/"},{title:this.$t("artists"),icon:"person",path:"/artists"},{title:this.$t("albums"),icon:"album",path:"/albums"},{title:this.$t("tracks"),icon:"audiotrack",path:"/tracks"},{title:this.$t("playlists"),icon:"playlist_play",path:"/playlists"},{title:this.$t("radios"),icon:"radio",path:"/radios"},{title:this.$t("search"),icon:"search",path:"/search"},{title:this.$t("settings"),icon:"settings",path:"/config"}]}},mounted:function(){},methods:{}}),c=l,u=a("2877"),p=a("6544"),d=a.n(p),m=a("8336"),h=a("132d"),v=a("8860"),f=a("da13"),g=a("1800"),y=a("5d23"),b=a("f774"),A=Object(u["a"])(c,s,o,!1,null,null,null),k=A.exports;d()(A,{VBtn:m["a"],VIcon:h["a"],VList:v["a"],VListItem:f["a"],VListItemAction:g["a"],VListItemContent:y["a"],VListItemTitle:y["c"],VNavigationDrawer:b["a"]});var w=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("v-app-bar",{attrs:{app:"",flat:"",dense:"",dark:"",color:e.color}},[a("v-layout",[e.$store.topBarTransparent?e._e():a("div",{staticClass:"body-1",staticStyle:{position:"fixed",width:"100%","text-align":"center","vertical-align":"center","margin-top":"11px"}},[e._v(e._s(e.$store.windowtitle))]),a("v-btn",{staticStyle:{"margin-left":"-13px"},attrs:{icon:""},on:{click:function(t){e.$store.showNavigationMenu=!e.$store.showNavigationMenu}}},[a("v-icon",[e._v("menu")])],1),a("v-btn",{attrs:{icon:""},on:{click:function(t){return e.$router.go(-1)}}},[a("v-icon",[e._v("arrow_back")])],1),a("v-spacer"),e.$store.topBarContextItem?a("v-btn",{staticStyle:{"margin-right":"-23px"},attrs:{icon:""},on:{click:function(t){return e.$server.$emit("showContextMenu",e.$store.topBarContextItem)}}},[a("v-icon",[e._v("more_vert")])],1):e._e()],1)],1)},I=[],_=i["a"].extend({props:{},data:function(){return{}},computed:{color:function(){return this.$store.topBarTransparent?"transparent":"black"}},mounted:function(){},methods:{}}),x=_,S=a("40dc"),D=a("a722"),C=a("2fa4"),P=Object(u["a"])(x,w,I,!1,null,null,null),R=P.exports;d()(P,{VAppBar:S["a"],VBtn:m["a"],VIcon:h["a"],VLayout:D["a"],VSpacer:C["a"]});var B=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("v-dialog",{attrs:{"max-width":"500px"},on:{input:function(t){return e.$emit("input",t)}},model:{value:e.visible,callback:function(t){e.visible=t},expression:"visible"}},[a("v-card",[0===e.playlists.length?a("v-list",[a("v-subheader",{staticClass:"title"},[e._v(e._s(e.header))]),e.subheader?a("v-subheader",[e._v(e._s(e.subheader))]):e._e(),e._l(e.menuItems,(function(t){return a("div",{key:t.label},[a("v-list-item",{on:{click:function(a){return e.itemCommand(t.action)}}},[a("v-list-item-avatar",[a("v-icon",[e._v(e._s(t.icon))])],1),a("v-list-item-content",[a("v-list-item-title",[e._v(e._s(e.$t(t.label)))])],1)],1),a("v-divider")],1)}))],2):e._e(),e.playlists.length>0?a("v-list",[a("v-subheader",{staticClass:"title"},[e._v(e._s(e.header))]),e._l(e.playlists,(function(t,i){return a("listviewItem",{key:t.item_id,attrs:{item:t,totalitems:e.playlists.length,index:i,hideavatar:!1,hidetracknum:!0,hideproviders:!1,hidelibrary:!0,hidemenu:!0,onclickHandler:e.addToPlaylist}})}))],2):e._e()],1)],1)},O=[],M=(a("caad"),a("b0c0"),a("2532"),a("54f8")),E=(a("96cf"),a("c964")),H=a("d3cc"),F=i["a"].extend({components:{ListviewItem:H["a"]},props:{},watch:{},data:function(){return{visible:!1,menuItems:[],header:"",subheader:"",curItem:null,curPlaylist:null,playerQueueItems:[],playlists:[]}},mounted:function(){},created:function(){this.$server.$on("showContextMenu",this.showContextMenu),this.$server.$on("showPlayMenu",this.showPlayMenu)},computed:{},methods:{showContextMenu:function(e){if(this.playlists=[],e){this.curItem=e;var t=this.$store.topBarContextItem,a=[];e!==t&&a.push({label:"show_info",action:"info",icon:"info"}),0===e.in_library.length&&a.push({label:"add_library",action:"toggle_library",icon:"favorite_border"}),e.in_library.length>0&&a.push({label:"remove_library",action:"toggle_library",icon:"favorite"}),t&&4===t.media_type&&(this.curPlaylist=t,3===e.media_type&&t.is_editable&&a.push({label:"remove_playlist",action:"remove_playlist",icon:"remove_circle_outline"})),3===e.media_type&&a.push({label:"add_playlist",action:"add_playlist",icon:"add_circle_outline"}),this.menuItems=a,this.header=e.name,this.subheader="",this.visible=!0}},showPlayMenu:function(e){if(this.playlists=[],this.curItem=e,e){var t=[{label:"play_now",action:"play",icon:"play_circle_outline"},{label:"play_next",action:"next",icon:"queue_play_next"},{label:"add_queue",action:"add",icon:"playlist_add"}];this.menuItems=t,this.header=e.name,this.subheader="",this.visible=!0}},showPlaylistsMenu:function(){var e=this;return Object(E["a"])(regeneratorRuntime.mark((function t(){var a,i,r,n,s,o,l,c,u,p,d,m;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:a=[],i=Object(M["a"])(e.curItem.provider_ids);try{for(i.s();!(r=i.n()).done;)n=r.value,a.push(n.provider)}catch(h){i.e(h)}finally{i.f()}return t.next=5,e.$server.getData("library/playlists");case 5:s=t.sent,o=[],l=Object(M["a"])(s.items),t.prev=8,l.s();case 10:if((c=l.n()).done){t.next=33;break}if(u=c.value,!u.is_editable||e.curPlaylist&&u.item_id===e.curPlaylist.item_id){t.next=31;break}p=Object(M["a"])(u.provider_ids),t.prev=14,p.s();case 16:if((d=p.n()).done){t.next=23;break}if(m=d.value,!a.includes(m.provider)){t.next=21;break}return o.push(u),t.abrupt("break",23);case 21:t.next=16;break;case 23:t.next=28;break;case 25:t.prev=25,t.t0=t["catch"](14),p.e(t.t0);case 28:return t.prev=28,p.f(),t.finish(28);case 31:t.next=10;break;case 33:t.next=38;break;case 35:t.prev=35,t.t1=t["catch"](8),l.e(t.t1);case 38:return t.prev=38,l.f(),t.finish(38);case 41:e.playlists=o;case 42:case"end":return t.stop()}}),t,null,[[8,35,38,41],[14,25,28,31]])})))()},itemCommand:function(e){if("info"===e){var t="";1===this.curItem.media_type&&(t="artists"),2===this.curItem.media_type&&(t="albums"),3===this.curItem.media_type&&(t="tracks"),4===this.curItem.media_type&&(t="playlists"),5===this.curItem.media_type&&(t="radios"),this.$router.push({path:"/"+t+"/"+this.curItem.item_id,query:{provider:this.curItem.provider}}),this.visible=!1}else{if("playmenu"===e)return this.showPlayMenu(this.curItem);if("add_playlist"===e)return this.showPlaylistsMenu();"remove_playlist"===e?(this.removeFromPlaylist(this.curItem,this.curPlaylist.item_id,"playlist_remove"),this.visible=!1):"toggle_library"===e?(this.$server.toggleLibrary(this.curItem),this.visible=!1):(this.$server.playItem(this.curItem,e),this.visible=!1)}},addToPlaylist:function(e){var t=this,a="playlists/"+e.item_id+"/tracks";this.$server.putData(a,this.curItem).then((function(e){t.visible=!1}))},removeFromPlaylist:function(e,t){var a=this,i="playlists/"+t+"/tracks";this.$server.deleteData(i,e).then((function(e){a.$server.$emit("refresh_listing")}))}}}),L=F,J=a("b0af"),V=a("169a"),z=a("ce7e"),N=a("8270"),j=a("e0c7"),Y=Object(u["a"])(L,B,O,!1,null,null,null),T=Y.exports;d()(Y,{VCard:J["a"],VDialog:V["a"],VDivider:z["a"],VIcon:h["a"],VList:v["a"],VListItem:f["a"],VListItemAvatar:N["a"],VListItemContent:y["a"],VListItemTitle:y["c"],VSubheader:j["a"]});var U=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("v-footer",{staticStyle:{"background-color":"black"},attrs:{app:"",fixed:"",padless:"",light:"",elevation:"10"}},[e.$store.isMobile?e._e():i("v-card",{staticStyle:{"margin-top":"1px"},attrs:{dense:"",flat:"",light:"",subheader:"",tile:"",width:"100%",color:"#E0E0E0"}},[i("v-list-item",{attrs:{"two-line":""}},[e.curQueueItem?i("v-list-item-avatar",{attrs:{tile:""}},[i("img",{staticStyle:{border:"1px solid rgba(0,0,0,.54)"},attrs:{src:e.$server.getImageUrl(e.curQueueItem),"lazy-src":a("71db")}})]):i("v-list-item-avatar",[i("v-icon",[e._v("speaker")])],1),i("v-list-item-content",[e.curQueueItem?i("v-list-item-title",[e._v(" "+e._s(e.curQueueItem.name))]):e.$server.activePlayer?i("v-list-item-title",[e._v(" "+e._s(e.$server.activePlayer.name))]):e._e(),e.curQueueItem?i("v-list-item-subtitle",{staticStyle:{color:"primary"}},e._l(e.curQueueItem.artists,(function(t,a){return i("span",{key:a},[i("a",{on:{click:[function(a){return e.artistClick(t)},function(e){e.stopPropagation()}]}},[e._v(e._s(t.name))]),a+1<e.curQueueItem.artists.length?i("label",{key:a},[e._v(" / ")]):e._e()])})),0):e._e()],1),e.streamDetails?i("v-list-item-action",[i("v-menu",{attrs:{"close-on-content-click":!1,"nudge-width":250,"offset-x":"",top:""},nativeOn:{click:function(e){e.preventDefault()}},scopedSlots:e._u([{key:"activator",fn:function(t){var r=t.on;return[i("v-btn",e._g({attrs:{icon:""}},r),[e.streamDetails.quality>6?i("v-img",{attrs:{contain:"",src:a("f5e3"),height:"30"}}):e._e(),e.streamDetails.quality<=6?i("v-img",{staticStyle:{filter:"invert(100%)"},attrs:{contain:"",src:e.streamDetails.content_type?a("9e01")("./"+e.streamDetails.content_type+".png"):"",height:"30"}}):e._e()],1)]}}],null,!1,872579316)},[e.streamDetails?i("v-list",[i("v-subheader",{staticClass:"title"},[e._v(e._s(e.$t("stream_details")))]),i("v-list-item",{attrs:{tile:"",dense:""}},[i("v-list-item-icon",[i("v-img",{attrs:{"max-width":"50",contain:"",src:e.streamDetails.provider?a("9e01")("./"+e.streamDetails.provider+".png"):""}})],1),i("v-list-item-content",[i("v-list-item-title",[e._v(e._s(e.streamDetails.provider))])],1)],1),i("v-divider"),i("v-list-item",{attrs:{tile:"",dense:""}},[i("v-list-item-icon",[i("v-img",{staticStyle:{filter:"invert(100%)"},attrs:{"max-width":"50",contain:"",src:e.streamDetails.content_type?a("9e01")("./"+e.streamDetails.content_type+".png"):""}})],1),i("v-list-item-content",[i("v-list-item-title",[e._v(e._s(e.streamDetails.sample_rate/1e3)+" kHz / "+e._s(e.streamDetails.bit_depth)+" bits ")])],1)],1),i("v-divider"),e.playerQueueDetails.crossfade_enabled?i("div",[i("v-list-item",{attrs:{tile:"",dense:""}},[i("v-list-item-icon",[i("v-img",{attrs:{"max-width":"50",contain:"",src:a("e7af")}})],1),i("v-list-item-content",[i("v-list-item-title",[e._v(e._s(e.$t("crossfade_enabled")))])],1)],1),i("v-divider")],1):e._e(),e.streamVolumeLevelAdjustment?i("div",[i("v-list-item",{attrs:{tile:"",dense:""}},[i("v-list-item-icon",[i("v-icon",{staticStyle:{"margin-left":"13px"},attrs:{color:"black"}},[e._v("volume_up")])],1),i("v-list-item-content",[i("v-list-item-title",{staticStyle:{"margin-left":"12px"}},[e._v(e._s(e.streamVolumeLevelAdjustment))])],1)],1),i("v-divider")],1):e._e()],1):e._e()],1)],1):e._e()],1),i("div",{staticClass:"body-2",staticStyle:{height:"30px",width:"100%",color:"rgba(0,0,0,.65)","margin-top":"-12px","background-color":"#E0E0E0"},attrs:{align:"center"}},[e.curQueueItem?i("div",{staticStyle:{height:"12px","margin-left":"22px","margin-right":"20px","margin-top":"2px"}},[i("span",{staticClass:"left"},[e._v(" "+e._s(e.playerCurTimeStr)+" ")]),i("span",{staticClass:"right"},[e._v(" "+e._s(e.playerTotalTimeStr)+" ")])]):e._e()]),e.curQueueItem?i("v-progress-linear",{style:"margin-top:-22px;margin-left:80px;width:"+e.progressBarWidth+"px;",attrs:{fixed:"",light:"",value:e.progress}}):e._e()],1),i("v-list-item",{staticStyle:{height:"44px","margin-bottom":"5px","margin-top":"-4px","background-color":"black"},attrs:{dark:"",dense:""}},[e.$server.activePlayer?i("v-list-item-action",{staticStyle:{"margin-top":"15px"}},[i("v-btn",{attrs:{small:"",icon:""},on:{click:function(t){return e.playerCommand("previous")}}},[i("v-icon",[e._v("skip_previous")])],1)],1):e._e(),e.$server.activePlayer?i("v-list-item-action",{staticStyle:{"margin-left":"-32px","margin-top":"15px"}},[i("v-btn",{attrs:{icon:"","x-large":""},on:{click:function(t){return e.playerCommand("play_pause")}}},[i("v-icon",{attrs:{size:"50"}},[e._v(e._s("playing"==e.$server.activePlayer.state?"pause":"play_arrow"))])],1)],1):e._e(),e.$server.activePlayer?i("v-list-item-action",{staticStyle:{"margin-top":"15px"}},[i("v-btn",{attrs:{icon:"",small:""},on:{click:function(t){return e.playerCommand("next")}}},[i("v-icon",[e._v("skip_next")])],1)],1):e._e(),i("v-list-item-content"),e.$server.activePlayer?i("v-list-item-action",{staticStyle:{padding:"28px"}},[i("v-btn",{attrs:{small:"",text:"",icon:""},on:{click:function(t){return e.$router.push("/playerqueue/")}}},[i("v-flex",{staticClass:"vertical-btn",attrs:{xs12:""}},[i("v-icon",[e._v("queue_music")]),i("span",{staticClass:"caption"},[e._v(e._s(e.$t("queue")))])],1)],1)],1):e._e(),e.$server.activePlayer&&!e.$store.isMobile?i("v-list-item-action",{staticStyle:{padding:"20px"}},[i("v-menu",{attrs:{"close-on-content-click":!1,"nudge-width":250,"offset-x":"",top:""},nativeOn:{click:function(e){e.preventDefault()}},scopedSlots:e._u([{key:"activator",fn:function(t){var a=t.on;return[i("v-btn",e._g({attrs:{small:"",icon:""}},a),[i("v-flex",{staticClass:"vertical-btn",attrs:{xs12:""}},[i("v-icon",[e._v("volume_up")]),i("span",{staticClass:"caption"},[e._v(e._s(Math.round(e.$server.activePlayer.volume_level)))])],1)],1)]}}],null,!1,1360689196)},[i("VolumeControl",{attrs:{players:e.$server.players,player_id:e.$server.activePlayer.player_id}})],1)],1):e._e(),i("v-list-item-action",{staticStyle:{padding:"20px","margin-right":"15px"}},[i("v-btn",{attrs:{small:"",text:"",icon:""},on:{click:function(t){return e.$server.$emit("showPlayersMenu")}}},[i("v-flex",{staticClass:"vertical-btn",attrs:{xs12:""}},[i("v-icon",[e._v("speaker")]),e.$server.activePlayer?i("span",{staticClass:"caption"},[e._v(e._s(e.$server.activePlayer.name))]):i("span",{staticClass:"caption"})],1)],1)],1)],1),e.$store.isInStandaloneMode?i("v-card",{staticStyle:{height:"20px"},attrs:{dense:"",flat:"",light:"",subheader:"",tile:"",width:"100%",color:"black"}}):e._e()],1)},X=[],Q=(a("4fad"),a("d3b7"),a("ac1f"),a("25f0"),a("5319"),a("d0af")),K=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("v-card",[a("v-list",[a("v-list-item",{staticStyle:{height:"50px","padding-bottom":"5"}},[a("v-list-item-avatar",{staticStyle:{"margin-left":"-10px"},attrs:{tile:""}},[a("v-icon",{attrs:{large:""}},[e._v(e._s(e.players[e.player_id].is_group?"speaker_group":"speaker"))])],1),a("v-list-item-content",{staticStyle:{"margin-left":"-15px"}},[a("v-list-item-title",[e._v(e._s(e.players[e.player_id].name))]),a("v-list-item-subtitle",[e._v(e._s(e.$t("state."+e.players[e.player_id].state)))])],1)],1),a("v-divider"),e._l(e.volumePlayerIds,(function(t){return a("div",{key:t},[a("div",{staticClass:"body-2",style:e.players[t].powered?"color:rgba(0,0,0,.54);":"color:rgba(0,0,0,.38);"},[a("v-btn",{staticStyle:{"margin-left":"8px"},style:e.players[t].powered?"color:rgba(0,0,0,.54);":"color:rgba(0,0,0,.38);",attrs:{icon:""},on:{click:function(a){return e.togglePlayerPower(t)}}},[a("v-icon",[e._v("power_settings_new")])],1),a("span",{staticStyle:{"margin-left":"10px"}},[e._v(e._s(e.players[t].name))]),a("div",{staticStyle:{"margin-top":"-8px","margin-left":"15px","margin-right":"15px",height:"35px"}},[a("v-slider",{attrs:{lazy:"",disabled:!e.players[t].powered,value:Math.round(e.players[t].volume_level),"prepend-icon":"volume_down","append-icon":"volume_up"},on:{end:function(a){return e.setPlayerVolume(t,a)},"click:append":function(a){return e.setPlayerVolume(t,"up")},"click:prepend":function(a){return e.setPlayerVolume(t,"down")}}})],1)],1),a("v-divider")],1)}))],2)],1)},G=[],W=a("d0ff"),q=i["a"].extend({props:["value","players","player_id"],data:function(){return{}},computed:{volumePlayerIds:function(){var e=[this.player_id];return e.push.apply(e,Object(W["a"])(this.players[this.player_id].group_childs)),e}},mounted:function(){},methods:{setPlayerVolume:function(e,t){this.players[e].volume_level=t,"up"===t?this.$server.playerCommand("volume_up",null,e):"down"===t?this.$server.playerCommand("volume_down",null,e):this.$server.playerCommand("volume_set",t,e)},togglePlayerPower:function(e){this.$server.playerCommand("power_toggle",null,e)}}}),Z=q,$=a("ba0d"),ee=Object(u["a"])(Z,K,G,!1,null,null,null),te=ee.exports;d()(ee,{VBtn:m["a"],VCard:J["a"],VDivider:z["a"],VIcon:h["a"],VList:v["a"],VListItem:f["a"],VListItemAvatar:N["a"],VListItemContent:y["a"],VListItemSubtitle:y["b"],VListItemTitle:y["c"],VSlider:$["a"]});var ae=i["a"].extend({components:{VolumeControl:te},props:[],data:function(){return{playerQueueDetails:{}}},watch:{},computed:{curQueueItem:function(){return this.playerQueueDetails?this.playerQueueDetails.cur_item:null},progress:function(){if(!this.curQueueItem)return 0;var e=this.curQueueItem.duration,t=this.playerQueueDetails.cur_item_time,a=t/e*100;return a},playerCurTimeStr:function(){if(!this.curQueueItem)return"0:00";var e=this.playerQueueDetails.cur_item_time;return e.toString().formatDuration()},playerTotalTimeStr:function(){if(!this.curQueueItem)return"0:00";var e=this.curQueueItem.duration;return e.toString().formatDuration()},progressBarWidth:function(){return window.innerWidth-160},streamDetails:function(){return this.playerQueueDetails.cur_item&&this.playerQueueDetails.cur_item&&this.playerQueueDetails.cur_item.streamdetails.provider&&this.playerQueueDetails.cur_item.streamdetails.content_type?this.playerQueueDetails.cur_item.streamdetails:{}},streamVolumeLevelAdjustment:function(){if(!this.streamDetails||!this.streamDetails.sox_options)return"";if(this.streamDetails.sox_options.includes("vol ")){var e=/(.*vol\s+)(.*)(\s+dB.*)/,t=this.streamDetails.sox_options.replace(e,"$2");return t+" dB"}return""}},created:function(){this.$server.$on("queue updated",this.queueUpdatedMsg),this.$server.$on("new player selected",this.getQueueDetails)},methods:{playerCommand:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;this.$server.playerCommand(e,t,this.$server.activePlayerId)},artistClick:function(e){var t="/artists/"+e.item_id;this.$router.push({path:t,query:{provider:e.provider}})},queueUpdatedMsg:function(e){if(e.player_id===this.$server.activePlayerId)for(var t=0,a=Object.entries(e);t<a.length;t++){var r=Object(Q["a"])(a[t],2),n=r[0],s=r[1];i["a"].set(this.playerQueueDetails,n,s)}},getQueueDetails:function(){var e=this;return Object(E["a"])(regeneratorRuntime.mark((function t(){var a;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:if(!e.$server.activePlayer){t.next=5;break}return a="players/"+e.$server.activePlayerId+"/queue",t.next=4,e.$server.getData(a);case 4:e.playerQueueDetails=t.sent;case 5:case"end":return t.stop()}}),t)})))()}}}),ie=ae,re=(a("7e6e"),a("0e8f")),ne=a("553a"),se=a("adda"),oe=a("34c3"),le=a("e449"),ce=a("8e36"),ue=Object(u["a"])(ie,U,X,!1,null,"60780b7f",null),pe=ue.exports;d()(ue,{VBtn:m["a"],VCard:J["a"],VDivider:z["a"],VFlex:re["a"],VFooter:ne["a"],VIcon:h["a"],VImg:se["a"],VList:v["a"],VListItem:f["a"],VListItemAction:g["a"],VListItemAvatar:N["a"],VListItemContent:y["a"],VListItemIcon:oe["a"],VListItemSubtitle:y["b"],VListItemTitle:y["c"],VMenu:le["a"],VProgressLinear:ce["a"],VSubheader:j["a"]});var de=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("v-navigation-drawer",{attrs:{right:"",app:"",clipped:"",temporary:"",width:"300"},model:{value:e.visible,callback:function(t){e.visible=t},expression:"visible"}},[a("v-card-title",{staticClass:"headline"},[a("b",[e._v(e._s(e.$t("players")))])]),a("v-list",{attrs:{dense:""}},[a("v-divider"),e._l(e.filteredPlayerIds,(function(t){return a("div",{key:t,style:e.$server.activePlayerId==t?"background-color:rgba(50, 115, 220, 0.3);":""},[a("v-list-item",{staticStyle:{"margin-left":"-5px","margin-right":"-15px"},attrs:{ripple:"",dense:""},on:{click:function(a){return e.$server.switchPlayer(e.$server.players[t].player_id)}}},[a("v-list-item-avatar",[a("v-icon",{attrs:{size:"45"}},[e._v(e._s(e.$server.players[t].is_group?"speaker_group":"speaker"))])],1),a("v-list-item-content",{staticStyle:{"margin-left":"-15px"}},[a("v-list-item-title",{staticClass:"subtitle-1"},[e._v(e._s(e.$server.players[t].name))]),a("v-list-item-subtitle",{key:e.$server.players[t].state,staticClass:"body-2",staticStyle:{"font-weight":"normal"}},[e._v(" "+e._s(e.$t("state."+e.$server.players[t].state))+" ")])],1),e.$server.activePlayerId?a("v-list-item-action",{staticStyle:{"padding-right":"10px"}},[a("v-menu",{attrs:{"close-on-content-click":!1,"close-on-click":!0,"nudge-width":250,"offset-x":"",right:""},nativeOn:{click:[function(e){e.stopPropagation()},function(e){e.stopPropagation(),e.preventDefault()}]},scopedSlots:e._u([{key:"activator",fn:function(i){var r=i.on;return[a("v-btn",e._g({staticStyle:{color:"rgba(0,0,0,.54)"},attrs:{icon:""}},r),[a("v-flex",{staticClass:"vertical-btn",attrs:{xs12:""}},[a("v-icon",[e._v("volume_up")]),a("span",{staticClass:"overline"},[e._v(e._s(Math.round(e.$server.players[t].volume_level)))])],1)],1)]}}],null,!0)},[a("VolumeControl",{attrs:{players:e.$server.players,player_id:t}})],1)],1):e._e()],1),a("v-divider")],1)}))],2)],1)},me=[],he=i["a"].extend({components:{VolumeControl:te},watch:{},data:function(){return{filteredPlayerIds:[],visible:!1}},computed:{},created:function(){this.$server.$on("showPlayersMenu",this.show),this.$server.$on("players changed",this.getAvailablePlayers),this.getAvailablePlayers()},methods:{show:function(){this.visible=!0},getAvailablePlayers:function(){for(var e in this.filteredPlayerIds=[],this.$server.players)this.$server.players[e].available&&this.filteredPlayerIds.push(e)}}}),ve=he,fe=(a("a800"),a("99d9")),ge=Object(u["a"])(ve,de,me,!1,null,"3db1a01d",null),ye=ge.exports;d()(ge,{VBtn:m["a"],VCardTitle:fe["c"],VDivider:z["a"],VFlex:re["a"],VIcon:h["a"],VList:v["a"],VListItem:f["a"],VListItemAction:g["a"],VListItemAvatar:N["a"],VListItemContent:y["a"],VListItemSubtitle:y["b"],VListItemTitle:y["c"],VMenu:le["a"],VNavigationDrawer:b["a"]});var be=i["a"].extend({name:"App",components:{NavigationMenu:k,TopBar:R,ContextMenu:T,PlayerOSD:pe,PlayerSelect:ye},data:function(){return{showPlayerSelect:!1}},created:function(){var e="",t=window.location;e=t.origin+t.pathname,this.$server.connect(e)}}),Ae=be,ke=(a("034f"),a("7496")),we=a("f6c4"),Ie=a("a797"),_e=a("490a"),xe=Object(u["a"])(Ae,r,n,!1,null,null,null),Se=xe.exports;d()(xe,{VApp:ke["a"],VMain:we["a"],VOverlay:Ie["a"],VProgressCircular:_e["a"]});var De=a("9483");Object(De["a"])("".concat("","service-worker.js"),{ready:function(){},registered:function(){},cached:function(){},updatefound:function(){},updated:function(){alert("New content is available; please refresh."),window.location.reload(!0)},offline:function(){alert("No internet connection found. App is running in offline mode.")},error:function(e){}});var Ce=a("f3f3"),Pe=a("8c4f"),Re=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("section",[a("v-list",{attrs:{tile:""}},e._l(e.items,(function(t){return a("v-list-item",{key:t.title,attrs:{tile:""},on:{click:function(a){return e.$router.push(t.path)}}},[a("v-list-item-icon",{staticStyle:{"margin-left":"15px"}},[a("v-icon",[e._v(e._s(t.icon))])],1),a("v-list-item-content",[a("v-list-item-title",{domProps:{textContent:e._s(t.title)}})],1)],1)})),1)],1)},Be=[],Oe={name:"home",data:function(){return{items:[{title:this.$t("artists"),icon:"person",path:"/artists"},{title:this.$t("albums"),icon:"album",path:"/albums"},{title:this.$t("tracks"),icon:"audiotrack",path:"/tracks"},{title:this.$t("playlists"),icon:"playlist_play",path:"/playlists"},{title:this.$t("search"),icon:"search",path:"/search"}]}},created:function(){this.$store.windowtitle=this.$t("musicassistant")}},Me=Oe,Ee=Object(u["a"])(Me,Re,Be,!1,null,null,null),He=Ee.exports;d()(Ee,{VIcon:h["a"],VList:v["a"],VListItem:f["a"],VListItemContent:y["a"],VListItemIcon:oe["a"],VListItemTitle:y["c"]});var Fe=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("section",[a("ItemsListing",{attrs:{mediatype:e.mediatype,provider:e.provider,endpoint:"library/"+e.mediatype}})],1)},Le=[],Je=a("0dac"),Ve={name:"browse",components:{ItemsListing:Je["a"]},props:{mediatype:String,provider:String},data:function(){return{}},created:function(){this.$store.windowtitle=this.$t(this.mediatype)},computed:{},methods:{}},ze=Ve,Ne=Object(u["a"])(ze,Fe,Le,!1,null,null,null),je=Ne.exports;i["a"].use(Pe["a"]);var Ye=[{path:"/",name:"home",component:He},{path:"/config",name:"config",component:function(){return a.e("config").then(a.bind(null,"1071"))},props:function(e){return Object(Ce["a"])(Object(Ce["a"])({},e.params),e.query)}},{path:"/config/:configKey",name:"configKey",component:function(){return a.e("config").then(a.bind(null,"1071"))},props:function(e){return Object(Ce["a"])(Object(Ce["a"])({},e.params),e.query)}},{path:"/search",name:"search",component:function(){return Promise.all([a.e("itemdetails~playerqueue~search"),a.e("search")]).then(a.bind(null,"2d3b"))},props:function(e){return Object(Ce["a"])(Object(Ce["a"])({},e.params),e.query)}},{path:"/:media_type/:media_id",name:"itemdetails",component:function(){return Promise.all([a.e("itemdetails~playerqueue~search"),a.e("itemdetails")]).then(a.bind(null,"32a2"))},props:function(e){return Object(Ce["a"])(Object(Ce["a"])({},e.params),e.query)}},{path:"/playerqueue",name:"playerqueue",component:function(){return Promise.all([a.e("itemdetails~playerqueue~search"),a.e("playerqueue")]).then(a.bind(null,"b097"))},props:function(e){return Object(Ce["a"])(Object(Ce["a"])({},e.params),e.query)}},{path:"/:mediatype",name:"browse",component:je,props:function(e){return Object(Ce["a"])(Object(Ce["a"])({},e.params),e.query)}}],Te=new Pe["a"]({mode:"hash",routes:Ye}),Ue=Te,Xe=(a("4160"),a("466d"),a("1276"),a("159b"),a("ddb0"),a("a925"));function Qe(){var e=a("49f8"),t={};return e.keys().forEach((function(a){var i=a.match(/([A-Za-z0-9-_]+)\./i);if(i&&i.length>1){var r=i[1];t[r]=e(a)}})),t}i["a"].use(Xe["a"]);var Ke=new Xe["a"]({locale:navigator.language.split("-")[0],fallbackLocale:"en",messages:Qe()}),Ge=(a("d5e8"),a("d1e78"),a("e508")),We=(a("a899"),a("f309"));i["a"].use(We["a"]);var qe=new We["a"]({}),Ze=new i["a"]({data:function(){return{windowtitle:"Home",loading:!1,showNavigationMenu:!1,topBarTransparent:!1,topBarContextItem:null,isMobile:!1,isInStandaloneMode:!1}},created:function(){this.handleWindowOptions(),window.addEventListener("resize",this.handleWindowOptions)},destroyed:function(){window.removeEventListener("resize",this.handleWindowOptions)},methods:{handleWindowOptions:function(){this.isMobile=document.body.clientWidth<700,this.isInStandaloneMode=!0===window.navigator.standalone||window.matchMedia("(display-mode: standalone)").matches}}}),$e={globalStore:Ze,install:function(e,t){e.prototype.$store=Ze}},et=(a("99af"),a("a434"),a("8a79"),a("3ca3"),a("2b3d"),a("bc3a")),tt=a.n(et),at=a("3667"),it=a.n(at),rt={timeout:6e4},nt=tt.a.create(rt),st=new i["a"]({_address:"",_ws:null,data:function(){return{connected:!1,players:{},activePlayerId:null,syncStatus:[]}},methods:{connect:function(e){var t=this;return Object(E["a"])(regeneratorRuntime.mark((function a(){var i;return regeneratorRuntime.wrap((function(a){while(1)switch(a.prev=a.next){case 0:e.endsWith("/")||(e+="/"),t._address=e,i=e.replace("http","ws")+"ws",t._ws=new WebSocket(i),t._ws.onopen=t._onWsConnect,t._ws.onmessage=t._onWsMessage,t._ws.onclose=t._onWsClose,t._ws.onerror=t._onWsError;case 8:case"end":return a.stop()}}),a)})))()},toggleLibrary:function(e){var t=this;return Object(E["a"])(regeneratorRuntime.mark((function a(){return regeneratorRuntime.wrap((function(a){while(1)switch(a.prev=a.next){case 0:if(0!==e.in_library.length){a.next=6;break}return a.next=3,t.putData("library",e);case 3:e.in_library=[e.provider],a.next=9;break;case 6:return a.next=8,t.deleteData("library",e);case 8:e.in_library=[];case 9:case"end":return a.stop()}}),a)})))()},getImageUrl:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"image",a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;return e&&e.media_type?"database"===e.provider&&"image"===t?"".concat(this._address,"api/").concat(e.media_type,"/").concat(e.item_id,"/thumb?provider=").concat(e.provider,"&size=").concat(a):e.metadata&&e.metadata[t]?e.metadata[t]:e.album&&e.album.metadata&&e.album.metadata[t]?e.album.metadata[t]:e.artist&&e.artist.metadata&&e.artist.metadata[t]?e.artist.metadata[t]:e.album&&e.album.artist&&e.album.artist.metadata&&e.album.artist.metadata[t]?e.album.artist.metadata[t]:e.artists&&e.artists[0].metadata&&e.artists[0].metadata[t]?e.artists[0].metadata[t]:"fanart"===t?this.getImageUrl(e,"image",a):"":""},getData:function(e){var t=arguments,a=this;return Object(E["a"])(regeneratorRuntime.mark((function r(){var n,s,o;return regeneratorRuntime.wrap((function(r){while(1)switch(r.prev=r.next){case 0:return n=t.length>1&&void 0!==t[1]?t[1]:{},s=a._address+"api/"+e,r.next=4,nt.get(s,{params:n});case 4:return o=r.sent,i["a"].$log.debug("getData",e,o),r.abrupt("return",o.data);case 7:case"end":return r.stop()}}),r)})))()},postData:function(e,t){var a=this;return Object(E["a"])(regeneratorRuntime.mark((function r(){var n,s;return regeneratorRuntime.wrap((function(r){while(1)switch(r.prev=r.next){case 0:return n=a._address+"api/"+e,t=JSON.stringify(t),r.next=4,nt.post(n,t);case 4:return s=r.sent,i["a"].$log.debug("postData",e,s),r.abrupt("return",s.data);case 7:case"end":return r.stop()}}),r)})))()},putData:function(e,t){var a=this;return Object(E["a"])(regeneratorRuntime.mark((function r(){var n,s;return regeneratorRuntime.wrap((function(r){while(1)switch(r.prev=r.next){case 0:return n=a._address+"api/"+e,t=JSON.stringify(t),r.next=4,nt.put(n,t);case 4:return s=r.sent,i["a"].$log.debug("putData",e,s),r.abrupt("return",s.data);case 7:case"end":return r.stop()}}),r)})))()},deleteData:function(e,t){var a=this;return Object(E["a"])(regeneratorRuntime.mark((function r(){var n,s;return regeneratorRuntime.wrap((function(r){while(1)switch(r.prev=r.next){case 0:return n=a._address+"api/"+e,t=JSON.stringify(t),r.next=4,nt.delete(n,{data:t});case 4:return s=r.sent,i["a"].$log.debug("deleteData",e,s),r.abrupt("return",s.data);case 7:case"end":return r.stop()}}),r)})))()},getAllItems:function(e,t){var a=arguments,r=this;return Object(E["a"])(regeneratorRuntime.mark((function n(){var s,o,l,c;return regeneratorRuntime.wrap((function(n){while(1)switch(n.prev=n.next){case 0:s=a.length>2&&void 0!==a[2]?a[2]:null,o=r._address+"api/"+e,s&&(l=new URLSearchParams(s),o+="?"+l.toString()),c=0,i["a"].$log.debug("getAllItems",o),it()(o).node("items.*",(function(e){i["a"].set(t,c,e),c+=1})).done((function(e){t.length>e.items.length&&t.splice(e.items.length)}));case 6:case"end":return n.stop()}}),n)})))()},playerCommand:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.activePlayerId,i="players/"+a+"/cmd/"+e;this.postData(i,t)},playItem:function(e,t){var a=this;return Object(E["a"])(regeneratorRuntime.mark((function i(){var r;return regeneratorRuntime.wrap((function(i){while(1)switch(i.prev=i.next){case 0:return a.$store.loading=!0,r="players/"+a.activePlayerId+"/play_media/"+t,i.next=4,a.postData(r,e);case 4:a.$store.loading=!1;case 5:case"end":return i.stop()}}),i)})))()},switchPlayer:function(e){e!==this.activePlayerId&&(this.activePlayerId=e,localStorage.setItem("activePlayerId",e),this.$emit("new player selected",e))},_onWsConnect:function(){var e=this;return Object(E["a"])(regeneratorRuntime.mark((function t(){var a,r,n,s;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return i["a"].$log.info("Connected to server "+e._address),e.connected=!0,t.next=4,e.getData("players");case 4:a=t.sent,r=Object(M["a"])(a);try{for(r.s();!(n=r.n()).done;)s=n.value,i["a"].set(e.players,s.player_id,s)}catch(o){r.e(o)}finally{r.f()}e._selectActivePlayer(),e.$emit("players changed");case 9:case"end":return t.stop()}}),t)})))()},_onWsMessage:function(e){var t=this;return Object(E["a"])(regeneratorRuntime.mark((function a(){var r;return regeneratorRuntime.wrap((function(a){while(1)switch(a.prev=a.next){case 0:r=JSON.parse(e.data),"player changed"===r.message?i["a"].set(t.players,r.message_details.player_id,r.message_details):"player added"===r.message?(i["a"].set(t.players,r.message_details.player_id,r.message_details),t._selectActivePlayer(),t.$emit("players changed")):"player removed"===r.message?(i["a"].delete(t.players,r.message_details.player_id),t._selectActivePlayer(),t.$emit("players changed")):"music sync status"===r.message?t.syncStatus=r.message_details:t.$emit(r.message,r.message_details);case 2:case"end":return a.stop()}}),a)})))()},_onWsClose:function(e){this.connected=!1,i["a"].$log.error("Socket is closed. Reconnect will be attempted in 5 seconds.",e.reason),setTimeout(function(){this.connect(this._address)}.bind(this),5e3)},_onWsError:function(){this._ws.close()},_selectActivePlayer:function(){if(!this.activePlayer||!this.activePlayer.enabled||this.activePlayer.group_parents.length>0){var e=localStorage.getItem("activePlayerId");if(e&&this.players[e]&&this.players[e].enabled)this.switchPlayer(e);else{for(var t in this.players)if("playing"===this.players[t].state&&this.players[t].enabled&&0===this.players[t].group_parents.length){this.switchPlayer(t);break}if(!this.activePlayer||!this.activePlayer.enabled)for(var a in this.players)if(this.players[a].enabled&&0===this.players[a].group_parents.length){this.switchPlayer(a);break}}}}},computed:{activePlayer:function(){return this.activePlayerId?this.players[this.activePlayerId]:null}}}),ot={server:st,install:function(e,t){e.prototype.$server=st}},lt=a("85ff"),ct=a.n(lt),ut=!0,pt={isEnabled:!0,logLevel:ut?"error":"debug",stringifyArguments:!1,showLogLevel:!0,showMethodName:!1,separator:"|",showConsoleColors:!0};i["a"].config.productionTip=!1,i["a"].use(ct.a,pt),i["a"].use(Ge["a"]),i["a"].use($e),i["a"].use(ot),String.prototype.formatDuration=function(){var e=parseInt(this,10),t=Math.floor(e/3600),a=Math.floor((e-3600*t)/60),i=e-3600*t-60*a;return t<10&&(t="0"+t),a<10&&(a="0"+a),i<10&&(i="0"+i),"00"===t?a+":"+i:t+":"+a+":"+i},new i["a"]({router:Ue,i18n:Ke,vuetify:qe,render:function(e){return e(Se)}}).$mount("#app")},"57d1":function(e,t){e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAQAAAD41aSMAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAACYktHRAD/h4/MvwAAAAlwSFlzAAALEwAACxMBAJqcGAAACPhJREFUeNrtnX1wVNUZxn8JIYD5GAIIWKtAOhAtgzFCSz5GC1HHSKAFHMaUdrBMpgWp2lbECbW26EwLFKSDDBVmmNaCtqBTgg4fQk1KbJNKKpLEhkmokAwWSysh2Ag0KyH9AzJUNsk5d+9dNnv3efgv++ze3ffH+Xjfc869cUuQIql4hUAABEASAAGQBEAAJAEQAEkABEASAAGQBEAAJAEQAEkABEASAAGQBEAAJO+VYOVKYTr5ZJJOKv0VtF71KR/TRC1l7KLNbI8zbswaRwlFDFJkHescv2MF77vpggaxmnrmK/wh6TqKOczPGRgqgLH8lcWWnZTUvfqzhAN8IRQAWVQyXhH0QLdRRaZTAGPZy/WKnUcazr6eWkF8D71XqcLvMYLt3Y8F3QN4Vp1PGDqiZ2ynoeOo19AblgzhVo7atIAShT9MM6ISmy4olSLFKkz6OslmAIVKu8KmJKaZAeQrTmFUvhlApqIURmWaAaQrSmFUus0gLIVPg6/+Q0I3k6XeFaco9qrOXl9NtMuEpWsmARAAAZAEQAAkARAASQAEQBIAAZAEQAAkARAASQAEQBIAAZAEQAAkAfCngvcFad+PWoAASAIgAJIACIAkAAIgCYAASAIgAJIACIAkAH5T8HpABwHaCXCeVlpo4RT/pIlmmvjQcAZW8gRAPAMv31zr5qteOc9h6qijlndsbkkqhQagZw1iIhMvt5L3qKSScv6lELpT8C3LnHQzndTwBnv4CxcUSsv4xXkJoEun2M42KuhQ/J0C8GYWNIzvUMYJ1jJBBCI3DR3BY9TxNsUkKbCRywMms4kP+Bk3KLiRS8TSWEozL3KLAhy5TDiRh6hnS293DpfCXYqI55s0sIkbFejIALiU6hXTyNO6G2mkAAAk8SwNzFG4IwUA4GZeYSc3KeSRAgBQSD2PaP915ABACuso5/MK/JUhMvgviSQygMEMZRjDGcUYRnMLwzy75hTqWMCrCj7YPEesSzcwgdvJIc+jh5v8mu9y3ocRdV0NNWssd1PA3cH3wneoGmbTJAChZ7p3MYcHGOriy7YylzdiG0Dog3CAN1nASArYRiDEz0hjF4s1C3KjC+yliBtZbHpmYo/XX816+gmAO51iDRnMpiqkdy/itdhdQfAuD7hIKXl8hYqQErQ/BN9ZXwBC0VtM4R6qHb8vh3IPM40Yz4TLyGYeHzp8VxZvxeIqWnhKEZ1sYRwrHG5WuZWy2GsF4asFnWUpkzjoEMG+WBsLwluMq2UyS/nUUUe0x3WGLQD/pw5WkMMRB+/IZmss5QXXohx9kCy2OJqUPi8A3uoc83jEQVe0KHYKFMHFuABttNHGJ/yHZhpopJFmT3Z95jl4TvdFprMnKiMals25AerZTzkVLs8FpLObDEtvK5M4JgCf1QUO8iZb+VvIX28IO7jT0ltDbhQu2YS1HJ3AZJ7iPQ7xA4aH9PVOcx97Lb23s16DcE+hWcMJdob07OHzfJUdlt75/t9LFPosKIFCyqii0PE7A8yh1NK70e87idxOQ3PYybvMdviuCxRZdkRpbPb3PiIv8oAsfk+Zw63oAWbxJyvnFBYJgFn51LKc6xyNBTNptHIu93M35F0mnEgJhylwNCOaxkcWvhReEAA7jWI3Kx2cPT7GLKsCRaF/Z0Ne14LieJIKB11GpWXVZ9Xl0/sCYKFcahxMTtfxklXbekIAnBQcXmeBtXshf7dwlfjzoFN82D53Az+x9J5lrsVIkMQyAXCmZay3/Px3rIL7LT+euAyuhiaSTAopjCCDDDKY6Gqnwla+wUULXz+qucPo2sxDfT6inu+OjmMCU8nn3hDPOb5gmclmUW2cwHYw3jJ5ixoA8RYfWMdavsZIiqkI4V4qD/NjK98h1li0kyf93wX1rnSWMJ8BDq+ykI0WrmSOGPfGtTOak7HVAq7OXR8mnV84XKn6JdMsXJ/wQ6NnAI/Gdgvo0hieZ7oDfwtZfGCRR1czyeA5zU2ci90W0KUmZjCT49b+oWy1qBF18pRFkveg8oBLeo1M68VFyOWnFq59/Nno+bYAdOkMs/i+9QmxJVbF6qeNjhzGC8AVrSWfVrvxhg0WSzb7ORBLbcCLUkQld3LCyjmKH1m4VhsdD/rnlsve/JB6ci13QC+2WDvezlGDYyR3CcBndZx7+YeFL9Fis9VFNli0AQEIQlBgNRbkM8vo+Y1xYH/AL2cIvOxL65lhNSMyjwMf8brBcT3ZAtDdcGxTLLuD+42eXxkdBf4A0P35gFbep4G3Keffjj+xlJlGTxV5Bkd/TjKkV8dBY9EiKkoRpu3p1Wzht5x28AUGUxv05IFgTWW/wbGJYsMPHRnCf48+B8DUBX2ZdRznOQdHqM/wPQvX40bHK8YfMiVWxoAkHucIT1hvuNrBLqPnfuNhpQrOGhx5sQIAIJlVHLBeFH/UuF6QwFyDo50/CsDVs5d3mWHlbLJYAZtndJgO6WX64SY3zqahqZQahsYurabdiPOLBke5sRVNijUA0M84O7mkE7xo9BQZXm+kxeC4LTYTsY1WHdEq44TsHuOErsoDAJ3X+F/vCngBoB8vWQzHR41rW18y3pajynct4Iw3pYhUtllMSjcb+3BTUbnW8Pr4qDs/dswbADCRx4yeV/mvwWE65lpnzFBGRBmAWq8AwDLjj/+YMoPDlMueMBZBxkQZgDLvAKRYHJkoN3Yhpus3GF4fHVXhP8tu7wDAQtJcAhjIKIOj2Vct4OXg8oobAMnGmXytcSaf4RLA56Io/AFWepMH2JcTOjkUZgBDowjAc93dfscdgMnGmmajSwCmin/03Oayhme8yoSvKI6pLgGYBtEWn7SAk8zuvjrmdk042yWAVJcAhkRJ+O/r6VEVbgFkGC9tmsz2LtNGl2g4vl1Dbs8ppVsAYw2vt7kEYCpqD+jjwQ+wnOzeHtSS4PICaREGkNin066XWWm68aBbAKkuAaT6rgUEOMMxailjt3FVu1sA3tYX211+Xofr79PH66W+2eYdrRIAARAASQAEQBIAAZAEQAAkARAASQAEQBIAAZAEQAAkARAASQAEQBIAf+p/HywBqGkNkGEAAAAASUVORK5CYII="},"71db":function(e,t,a){e.exports=a.p+"img/file.813f9dad.png"},"7e6e":function(e,t,a){"use strict";var i=a("b0ff"),r=a.n(i);r.a},"82f5":function(e,t,a){e.exports=a.p+"img/sonos.72e2fecb.png"},"85ec":function(e,t,a){},"94cc":function(e,t){e.exports="data:image/png;base64,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"},"9a36":function(e,t){e.exports="data:image/png;base64,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"},"9ad3":function(e,t){e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJEAAABfCAYAAADoOiXnAAAMUElEQVR4nO2de5RVVR3HP4MSAwgIakqWiqIIkoHVivKxUksx6SE+kwg105VY+ShJzUdWmpWhaWpaLjNExSYN8YEPTNOFL0QFRRHTJYgi4AMUH8z47Y/fOeveObPP495z595zV/uz1ln3ztl7n9+eM985+7dfv9MiCY8nDz0aXQFP8+NF5MmNF5EnN15Entx4EXly40XkyY0XkSc3XkSe3HgReXLjReTJjReRJzdeRJ7ceBF5cuNF5MmNF5EnNxs2ugIVMgDYGxgDDAzOfQgsAe4BFgC1WiA1FNgX2AnoGVx3eWBnLtBeIzvDgH2AHYFewEfAMuBu4FFgfY3sdBstTbIorRX4KvCd4HNgJL0dWAzcANwILMphazBwIDARGAV8LJL+cmDnWuDJHHa2BA7GfqedMaGGKLAzA/gb8HQOO92PpKIfIyXdpeyslXSWpAEV2ukp6RhJyzLaeS+w07tCO70CO69ktPOOpFMltVZop25HwyuQchwo6c2MNzvKg5K2zWhnU0kzqrQzKyifxc4Wkm6u0k6bpIEZ7XgRBcehktqrudtlPCNpaIqdwZLm5rRzr6RNUuxsJWleTjt3KLtg/+9FtJekd1Nu6CpJV6fkkUwgg2Ls9JU0O8M1QmZJWhSTdqPim7b+ku6rwM7Nkp6PSWuTNb2N/hsVWkS9JD2Qfp81X9IQScsz5D0vxtaUDGVDFstENy0hz9kxds6qwM5Cmf/TlpBnSoydhhxFHCc6HNg1Q77HgReBSzLkPQH4YuTccOAUR97ngJWO81OAd0keFjkJ2CVybhhwoiPvImB15JyAnwLvp9g5BRt6KARFFNG4yM8COiLn3gGuCr7/EVgYfF+He/ymFTgscu4gYJAj753YH2gKpTGho4CbgvSke9YvyFvOOGx8K8pMYARwOjAHeAiYBNwepLck2BkEHJGQXl8a/SiMHIMlLY08utslnStpnKTDJR0saftIuWGS9pM50TtLusLRBDyizt3kWY48kvSBpC8n1PGGmHIhT0vauCz/bTH51kkak2BnZoqdeZL6JJSv29HwCkSOXSStd9yw/0raM+M1DpH0muMab6skvk0kPefIE/K0zBl2XX93WW/s9Ziya8vsDJb0YoKd+Yp3xvcK7KyKKbtK0jYxZet6FK056w1s4Dg/BHvk/xWbGnDRAkzFRpM3j7l23+B7X2DjhHqMACbHpP0H2BPYAWsS5zvqETZFaXZGAd+PSZsT2Nkea4oXJNhpKEUT0ft09X/KOQo4PyZtGuZAx1HuWwmbo0oiqR7hNVZi82nR8+Xf0+ykpQO8DrzqsFOIOauiTcCuAFYBWyTk2Sbm/IcZrw2wJsXOXcAFMWkTgaOxXtfHSX4ahHZcDjzALcT3Lo/EnOcdAzuFpWhPomVY1z2JO4PPjYH9saYH4BfAGwnlnqD03/w28HxMvhWYSOKeROOBPbAmM605WUn85OlS4JiEsocGdgotICieiMCeAnG8hXW1twHuB2YBj2FN3EuUBObinsjPc2Py3YR1yc8Nrn8d8C1KgvkgwYaLu2POt2FCPB+4NbDz9bL0Su00jkZ79o5jM9nosIvZsq68a6a9TdIZMeWeDa5bbmeo3D2stZI+dJy/Jig3PcZGefkdyuxsJ2m1I9+aGDtXBuVuSrHje2cJrAR+H5P2aeB6bC1OlAOA43E7qufQdRR6CXChI+9GdF7bEzIxON6LqVscLwB/cpzvF2PnaGydUaV2GkYRRQRwBfAHx/nBQP+YMi2Y/xD9nS4BpseUuRi4r4J6HYaNflfKVODhCvIfSvE6PbEUVUQAPwP+nPMa07G5qDjWAt/DVkVmYRDV/XHfxHpbL2XMPxD3eFkhKbKI1mPN06mkd99dXIg1De+n5HsBc2ifyHDNudj8XDUsCuw8kyHvwzSRY11kEYFNpv4Gm9WfQfqNFdYb2hs4mex+xWJssfy0hDyrMd8mzz1bCHwF+HtCnteAy3H7S4WkWdrdxzB/5LPAXtgyjs2xKZD12B/4eeABzMepZofESqzJuQUb5NuD0jTJPGxW/wW6LtyvlFcDO3cEdnYF+gRpj2Lifxkvom5BmJge60Yb7dgTrw2bs/oktoboqeATqnOso3Rg/tqMwM6WDjtxc4SFo5lEVE86gGeDo5z+wMga2mnHfKXoFqdBlEbiC0/RfaJ6kzaNcSK2qTGJHhmuk5Z+CrBVDezUBS+izoyn6wrIkCOxnmIaK0iewwMbBzooJu1YbJltGq9msFMXfHPWmRHY6PY44GbMYe8PfAP4Ltnu1wO412iXMxw4E9vdOhMTwwBs1H0i2f65H8QmkhuOF1Fnwpn7CcFRDTdmyBP2HicFR6Uoo5264Juz2vIvbIigu5lB8mqHuuJFVDveBs6rg53VdbKTGS+i2nESlU2yVsvp5ItGUnO8iDpTbZf5Akr74LJQ7eTqr8g/KV1zvIg6s6bC/ML+sD+psFylXfMO4IzgKB6NXhVXsKOnpGMlLYlfUChJ6pBtHty3SjsbSJqs5D1poZ1HlH3PXUOOZomUVm/6AmOxjQDDsbGiDmzrzgJsHfZc8ofC6wd8LbA1DNt80I4NWC7AensPUrvQft2CF1E6LZgP44oJ0B12PiLbXrTC4EXkyY13rD258SLy5KYoc2efA/bDfAHfvmanFduUWcmOlZpTFBHtis2ee6qjoSIqSnNW+KjxBabh3f+iiMjTxHgR1ZdXsG1J0YCfTU2ziOh32JLSydhuUhergOOAQ4C/1KFOi7HNla7t3nGcjK1cjIvC1pQ0i4g6sIVYlxIfqmUmcBm24s8VrbXW/BLbzLikgjJhIIrBta9O42gWEY2ltJnvmpg81wafW2O7TGuJ6Or8h1MTlSzrOA8LbhUX9URYDKal2CK3ppj+aBYRjcJ2voIt/IrGL1xKaS/9PnR9lRXYrtKzsddQ7Y+9IupyLCZ2lMexQA9XYZHOJgC7YUE/Q8K1Rz2DOk3GgmFNxMLfuARwG/YEiy6hFba1+ptYMPXhwOexDQMzHdcpFo1eRhAcx6UsiZAsNnWY/+JI2kVlaXMcZe9VKSBUi6QNy/Lvq65hfqcFaZ+StHXwvVX2wpmQCcH5zSX1c/xOpznq8cMg7fjI+Z+XldtR0mdUCoE81XGdcs502K7r0SxPIrAgDWEAzRsiaeHOh6HY6Hc5q4AfYGFdvoSFtnsSuBLbIDgbc3jLCQdhl2L+y2VY5P7tHfVagcUIuB74J/ZE6oGF67sj5rrlTeAyzNcDi2KyCAtr/ARwEZ1D8BWSooxYZ2FbrLm4CrvJz2D7xJ7CAi6AbTzsFyl3DbYduj/mCI8Kzo/A1u8cjK0POhmLxFbOEKw52SyhXiMxUYcBOg/AmqdLsb1rY1N+rw5KS0yWYkEjtgts/yilbCFopicRlHanvgv8I/h+NRZCZgPM34nyUPC5OyUBhYzGFqCtoWtQc7CA50kCAntCRiO8jg8+55G+BmlrSrthZwd13AeLQjInpWwhaDYR7UKpm3wb1lSFTupo3EEQwhhFGznS+lAaDqgmkFYcYbP7BtliJF0M/Br7/dqxPWW/xQRayThUQ2g2EW2CNWlgg31XY70usEFGV+ygMMaja5T4rbLzfR3pWXBtmX4t+OxHthAxvYHTsPhEc7EYj6ODtDPIFl2tYTSbiMDehwY2ch2G4mvFuu0udgs+76Nr83ArFn1tC8zprobpdHb012BOOMAXyBasaj3W7PXAmrMTKG1QXIet7S4szeRYh4zGnNmFlGawx2CvL3AxAeuJzcfeDfJjzGm9n1Jo4ImYb1IJ4bqnPtiY0v2Yb9SGLbIfQPZ3kp2D+U/jgU0xIU4N0jarom51pRlF1Bv4NrYTNGQS8U/V/thA3vHAv+kctqUXJqpzI2VCZzjJTwoHEydhzehFZWk7YL5M9G2PHZFPsMCk87GX5d0eyf+J4LpDEurRcJpRRGD/+cMoCWfvlPw7YWM2d2Fzb8uxZmMsXV+3CdaTuw530PWQE7ExnJHAzthTZAXmB43B/YqqI+j61GzFOgfzsLA0y4NrbItN37heu1UoirLb4zjcUec96ZxFg1eFNqNj7SkYRRFRUerRjDT83hXFJ1qHddnb8bs9KqEfpZDFDaMoPpGniWn4o9DT/HgReXLjReTJjReRJzdeRJ7ceBF5cuNF5MmNF5EnN15Entx4EXly40XkyY0XkSc3XkSe3HgReXLjReTJzf8A7VafuKusJ8IAAAAASUVORK5CYII="},"9e01":function(e,t,a){var i={"./aac.png":"9a36","./chromecast.png":"57d1","./crossfade.png":"e7af","./default_artist.png":"4bfb","./demo_player.png":"26ea","./file.png":"71db","./flac.png":"fb30","./hires.png":"f5e3","./homeassistant.png":"3232","./http_streamer.png":"2755","./logo.png":"cf05","./mp3.png":"f1d4","./ogg.png":"9ad3","./qobuz.png":"0863","./sonos.png":"82f5","./spotify.png":"0c3b","./squeezebox.png":"bd18","./tunein.png":"e428","./vorbis.png":"94cc","./web.png":"edbf","./webplayer.png":"3d05"};function r(e){var t=n(e);return a(t)}function n(e){if(!a.o(i,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return i[e]}r.keys=function(){return Object.keys(i)},r.resolve=n,e.exports=r,r.id="9e01"},a471:function(e,t,a){},a548:function(e,t,a){"use strict";var i=a("a471"),r=a.n(i);r.a},a625:function(e){e.exports=JSON.parse('{"musicassistant":"Music Assistant","home":"Home","artists":"Artiesten","albums":"Albums","tracks":"Nummers","playlists":"Afspeellijsten","playlist_tracks":"Nummers in afspeellijst","radios":"Radio","search":"Zoeken","settings":"Instellingen","queue":"Wachtrij","artist_toptracks":"Top nummers","artist_albums":"Albums","album_tracks":"Album liedjes","album_versions":"Versies","track_versions":"Versies","type_to_search":"Type hier om te zoeken...","add_library":"Voeg toe aan bibliotheek","remove_library":"Verwijder uit bibliotheek","add_playlist":"Aan playlist toevoegen...","remove_playlist":"Verwijder uit playlist","no_player":"Geen speler geselecteerd","reboot_required":"Je moet de server opnieuw starten om de nieuwe instellingen actief te maken!","sort_name":"Sorteer op naam","sort_artist":"Sorteer op artiest","sort_album":"Sorteer op album","sort_date":"Sorteer op datum","sort_default":"Standaard sortering","items":"item(s)","conf":{"enabled":"Ingeschakeld","base":"Algemene instellingen","providers":"Providers / Plugins","player_settings":"Speler instellingen","homeassistant":"Home Assistant integratie","web":"Webserver","http_streamer":"Ingebouwde (sox gebaseerde) streamer","qobuz":"Qobuz","spotify":"Spotify","tunein":"TuneIn","file":"Bestandssysteem","chromecast":"Chromecast","squeezebox":"Squeezebox ondersteuning","sonos":"Sonos","webplayer":"Web Player (alleen Chrome browser)","username":"Gebruikersnaam","password":"Wachtwoord","hostname":"Hostnaam (of IP)","port":"Poort","hass_url":"URL naar homeassistant (b.v. https://homeassistant:8123)","hass_token":"Token met lange levensduur","hass_publish":"Publiceer spelers naar Home Assistant","hass_player_power":"Verbind speler aan/uit met homeassistant entity","hass_player_source":"Benodigde bron op de verbonden homeassistant entity (optioneel)","hass_player_volume":"Verbind volume van speler aan een homeassistant entity","web_ssl_cert":"Pad naar ssl certificaat bestand","web_ssl_key":"Pad naar ssl certificaat key bestand","player_enabled":"Speler inschakelen","player_name":"Aangepaste naam voor deze speler","player_group_with":"Groupeer deze speler met een andere (hoofd)speler","player_mute_power":"Gebruik mute als aan/uit","player_disable_vol":"Schakel volume bediening helemaal uit","player_group_vol":"Pas groep volume toe op onderliggende spelers (alleen groep spelers)","player_group_pow":"Pas groep aan/uit toe op onderliggende spelers (alleen groep spelers)","player_power_play":"Automatisch afspelen bij inschakelen","file_prov_music_path":"Pad naar muziek bestanden","file_prov_playlists_path":"Pad naar playlist bestanden (.m3u)","web_http_port":"HTTP poort","web_https_port":"HTTPS poort","cert_fqdn_host":"Hostname (FQDN van certificaat)","enable_r128_volume_normalisation":"Schakel R128 volume normalisatie in","target_volume_lufs":"Doelvolume (R128 standaard is -23 LUFS)","fallback_gain_correct":"Fallback gain correctie indien R128 meting (nog) niet beschikbaar is","enable_audio_cache":"Sta het cachen van audio toe naar temp map","trim_silence":"Strip stilte van begin en eind van audio (in temp bestanden)","http_streamer_sox_effects":"Eigen sox effects toepassen op audio (alleen voor ingebouwde streamer). Zie http://sox.sourceforge.net/sox.html#EFFECTS","max_sample_rate":"Maximale sample rate welke deze speler ondersteund, hoger wordt gedownsampled.","force_http_streamer":"Forceer het gebruik van de ingebouwde streamer, ook al heeft de speler directe ondersteuning voor de muziek provider","not_grouped":"Niet gegroepeerd","conf_saved":"Configuratie is opgeslagen, herstart om actief te maken","audio_cache_folder":"Map om te gebruiken voor cache bestanden","audio_cache_max_size_gb":"Maximale grootte van de cache map in GB.","gapless_enabled":"Schakel ondersteuning voor gapless in.","crossfade_duration":"Crossfade (in seconden, 0 om uit te schakelen)."},"players":"Spelers","play":"Afspelen","play_on":"Afspelen op:","play_now":"Nu afspelen","play_next":"Speel als volgende af","add_queue":"Voeg toe aan wachtrij","queue_clear":"Wachtrij leegmaken","show_info":"Bekijk informatie","queue_next_tracks":"Aankomend","queue_previous_tracks":"Afgespeeld","queue_move_up":"Verplaats omhoog","queue_move_down":"Verplaats omlaag","queue_options":"Wachtrij opties","enable_repeat":"Repeat inschakelen","disable_repeat":"Repeat uitschakelen","enable_shuffle":"Shuffle inschakelen","disable_shuffle":"Shuffle uitschakelen","read_more":"meer lezen","stream_details":"Streamdetails","crossfade_enabled":"Crossfade ingeschakeld","state":{"playing":"afspelen","stopped":"gestopt","paused":"gepauzeerd","off":"uitgeschakeld"}}')},a800:function(e,t,a){"use strict";var i=a("d9db"),r=a.n(i);r.a},b0ff:function(e,t,a){},bd18:function(e,t,a){e.exports=a.p+"img/squeezebox.60631223.png"},cf05:function(e,t,a){e.exports=a.p+"img/logo.c079bd97.png"},d3cc:function(e,t,a){"use strict";var i=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",[i("v-list-item",{directives:[{name:"longpress",rawName:"v-longpress",value:e.menuClick,expression:"menuClick"}],attrs:{ripple:""},on:{click:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"left",37,t.key,["Left","ArrowLeft"])||"button"in t&&0!==t.button?null:void(e.onclickHandler?e.onclickHandler(e.item):e.itemClicked(e.item))},contextmenu:[e.menuClick,function(e){e.preventDefault()}]}},[e.hideavatar?e._e():i("v-list-item-avatar",{attrs:{tile:"",color:"grey"}},[i("img",{staticStyle:{border:"1px solid rgba(0,0,0,.22)"},attrs:{src:e.$server.getImageUrl(e.item,"image",80),"lazy-src":a("71db")}})]),i("v-list-item-content",[i("v-list-item-title",[e._v(" "+e._s(e.item.name)+" "),e.item.version?i("span",[e._v("("+e._s(e.item.version)+")")]):e._e()]),e.item.artists?i("v-list-item-subtitle",[e._l(e.item.artists,(function(t,a){return i("span",{key:t.item_id},[i("a",{on:{click:[function(a){return e.itemClicked(t)},function(e){e.stopPropagation()}]}},[e._v(e._s(t.name))]),a+1<e.item.artists.length?i("label",{key:a},[e._v("/")]):e._e()])})),e.item.album&&e.hidetracknum?i("a",{staticStyle:{color:"grey"},on:{click:[function(t){return e.itemClicked(e.item.album)},function(e){e.stopPropagation()}]}},[e._v(" - "+e._s(e.item.album.name))]):e._e(),!e.hidetracknum&&e.item.track_number?i("label",{staticStyle:{color:"grey"}},[e._v("- disc "+e._s(e.item.disc_number)+" track "+e._s(e.item.track_number))]):e._e()],2):e._e(),e.item.artist?i("v-list-item-subtitle",[i("a",{on:{click:[function(t){return e.itemClicked(e.item.artist)},function(e){e.stopPropagation()}]}},[e._v(e._s(e.item.artist.name))])]):e._e(),e.item.owner?i("v-list-item-subtitle",[e._v(e._s(e.item.owner))]):e._e()],1),e.hideproviders?e._e():i("v-list-item-action",[i("ProviderIcons",{attrs:{providerIds:e.item.provider_ids,height:20}})],1),e.isHiRes?i("v-list-item-action",[i("v-tooltip",{attrs:{bottom:""},scopedSlots:e._u([{key:"activator",fn:function(t){var r=t.on;return[i("img",e._g({attrs:{src:a("f5e3"),height:"20"}},r))]}}],null,!1,2747613229)},[i("span",[e._v(e._s(e.isHiRes))])])],1):e._e(),e.hidelibrary?e._e():i("v-list-item-action",[i("v-tooltip",{attrs:{bottom:""},scopedSlots:e._u([{key:"activator",fn:function(t){var a=t.on;return[i("v-btn",e._g({attrs:{icon:"",ripple:""},on:{click:[function(t){return e.toggleLibrary(e.item)},function(e){e.preventDefault()},function(e){e.stopPropagation()}]}},a),[e.item.in_library.length>0?i("v-icon",{attrs:{height:"20"}},[e._v("favorite")]):e._e(),0==e.item.in_library.length?i("v-icon",{attrs:{height:"20"}},[e._v("favorite_border")]):e._e()],1)]}}],null,!1,113966118)},[e.item.in_library.length>0?i("span",[e._v(e._s(e.$t("remove_library")))]):e._e(),0==e.item.in_library.length?i("span",[e._v(e._s(e.$t("add_library")))]):e._e()])],1),!e.hideduration&&e.item.duration?i("v-list-item-action",[e._v(e._s(e.item.duration.toString().formatDuration()))]):e._e(),e.hidemenu?e._e():i("v-icon",{staticStyle:{"margin-right":"-10px","padding-left":"10px"},attrs:{color:"grey lighten-1"},on:{click:[function(t){return e.menuClick(e.item)},function(e){e.stopPropagation()}]}},[e._v("more_vert")])],1),i("v-divider")],1)},r=[],n=(a("4160"),a("a9e3"),a("96cf"),a("c964")),s=a("54f8"),o=a("2b0e"),l=a("e00a"),c=600;o["a"].directive("longpress",{bind:function(e,t,a){var i=t.value;if("function"===typeof i){var r=null,n=function(e){"click"===e.type&&0!==e.button||null===r&&(r=setTimeout((function(){return i(e)}),c))},s=function(){null!==r&&(clearTimeout(r),r=null)};["mousedown","touchstart"].forEach((function(t){return e.addEventListener(t,n)})),["click","mouseout","touchend","touchcancel"].forEach((function(t){return e.addEventListener(t,s)}))}else o["a"].$log.warn("Expect a function, got ".concat(i))}});var u=o["a"].extend({components:{ProviderIcons:l["a"]},props:{item:Object,index:Number,totalitems:Number,hideavatar:Boolean,hidetracknum:Boolean,hideproviders:Boolean,hidemenu:Boolean,hidelibrary:Boolean,hideduration:Boolean,onclickHandler:null},data:function(){return{touchMoving:!1,cancelled:!1}},computed:{isHiRes:function(){var e,t=Object(s["a"])(this.item.provider_ids);try{for(t.s();!(e=t.n()).done;){var a=e.value;if(a.quality>6)return a.details?a.details:7===a.quality?"44.1/48khz 24 bits":8===a.quality?"88.2/96khz 24 bits":9===a.quality?"176/192khz 24 bits":"+192kHz 24 bits"}}catch(i){t.e(i)}finally{t.f()}return""}},created:function(){},beforeDestroy:function(){this.cancelled=!0},mounted:function(){},methods:{itemClicked:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t="";if(1===e.media_type)t="/artists/"+e.item_id;else if(2===e.media_type)t="/albums/"+e.item_id;else{if(4!==e.media_type)return void this.$server.$emit("showPlayMenu",e);t="/playlists/"+e.item_id}this.$router.push({path:t,query:{provider:e.provider}})},menuClick:function(){this.cancelled||this.$server.$emit("showContextMenu",this.item)},toggleLibrary:function(e){var t=this;return Object(n["a"])(regeneratorRuntime.mark((function a(){return regeneratorRuntime.wrap((function(a){while(1)switch(a.prev=a.next){case 0:return t.cancelled=!0,a.next=3,t.$server.toggleLibrary(e);case 3:t.cancelled=!1;case 4:case"end":return a.stop()}}),a)})))()}}}),p=u,d=a("2877"),m=a("6544"),h=a.n(m),v=a("8336"),f=a("ce7e"),g=a("132d"),y=a("da13"),b=a("1800"),A=a("8270"),k=a("5d23"),w=a("3a2f"),I=Object(d["a"])(p,i,r,!1,null,null,null);t["a"]=I.exports;h()(I,{VBtn:v["a"],VDivider:f["a"],VIcon:g["a"],VListItem:y["a"],VListItemAction:b["a"],VListItemAvatar:A["a"],VListItemContent:k["a"],VListItemSubtitle:k["b"],VListItemTitle:k["c"],VTooltip:w["a"]})},d9db:function(e,t,a){},e00a:function(e,t,a){"use strict";var i=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",e._l(e.uniqueProviders,(function(t){return i("img",{key:t.provider,staticStyle:{"margin-right":"6px","margin-top":"6px"},attrs:{height:e.height,src:a("9e01")("./"+t.provider+".png")}})})),0)},r=[],n=(a("4160"),a("c975"),a("a9e3"),a("159b"),a("2b0e")),s=n["a"].extend({props:{providerIds:Array,height:Number},data:function(){return{isHiRes:!1}},computed:{uniqueProviders:function(){var e=[],t=[];return this.providerIds?(this.providerIds.forEach((function(a){var i=a.provider;-1===t.indexOf(i)&&(t.push(i),e.push(a))})),e):[]}},mounted:function(){},methods:{}}),o=s,l=a("2877"),c=Object(l["a"])(o,i,r,!1,null,null,null);t["a"]=c.exports},e428:function(e,t,a){e.exports=a.p+"img/tunein.ca1c1bb0.png"},e7af:function(e,t){e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAACUtJREFUeJzt3VuMXVUdgPGvlVqhLZXSagkGlApUiPUSUcDaoiLVkCgEb/FKJL6YqDEm+m584MFHExMSE28PkohBjRYeKL1ARxMS8EZaraFA0wsINp2hl5nS+rDmmNN69pl9PXutvb9fspJJk57zX6vzZc6lsw9IkiRJkiRJkiRJkiRJkiRJkiRJUkcsqvj33wbcBKwHLgOWA0uqDlWjI8DXgeNtD9JRK4EfApe0PciQOWAaOAjsAXYD/5jkAFcB9wLPA2cTWI8AFzVyEv22Evgj7f/75lnPAN8HrmjkJOZdDvwMOB3BhouubRhJnVKKY3jNAj8G1tZ9IF8l/Nhqe4NG0r5U4xheR4Ev13EYS4CfRLAhI4lDF+IYXvcBryl7GK8Ffh/BJupej2IkZXQtjsH6DSVeWFoE3B/B8EYSh67GMVi/KHog341gaCOJQ9fjGKxv5T2QDYTXktseeBJrO0YyTl/iOEt4heu6PIeyK4JhJx3JsjwH0zN9imOwti10KB+JYEgjaV8f4xisW8YdTBdftcq7dmAk0O84zgK/zTqYtaT5LrmR1KfvcZwlPP9eMziQxUOH81EqvGnSEZuAP9DPSFYCDwPva3uQll1AaAE4N5BNk58lSpuArfQrEuM41+bBF8OBXN/CILH6AP2JxDj+38gWjtD+47/Y1k7C77h0lc85Rq/Dow7rZASDxbi6GolxZK+Rv2DXl3fPy6xddCsS4xi/5gYHNfwcZKbAAffNRsJzki5E4nOOhU0PvhgO5FALg6SkC5EYRz4HB18MB7K3hUFSsxF4iDQjMY789gy+GA5kqoVBUvR+QiQr2h6kAOMoZmQL76T9J0cprcdIIxKfkBdfb886zL9HMFxKK/ZIjKP4+svwAQ4/xAL40fjz1nlifrjlw6pyxjZwIeHVrLYrTm09TlyR+JOj3DoALF3ocL8UwaAprlgiMY7y67N5D7nPvzhVZe2m3UiMo/x6sMhBX0q4nmnbQ6e4dgMXFznsmhhH+bWPEhfgvhr/h2/ZNelIjKP8OgSsK37kwTXA/gg2keKaYjKRGEf59S/grcWP/FxrCC9ltr2ZFFfTkRhH+fU7YFXxIx9tEfAV4IUINpbaaioS4yi3DgFfLHHeuSwDvk14UtP2RlNadUdiHMXXHuAbhPf6cqvyEWw3ArcBNwPXEj5gJ6aPX4vNnwjndazi7fgO+cJmCW/6DT6C7WHgiTI3VPUzCs+3lGYjWUl4j+YdDd5HU84CnwIeqHAbqccxBdxBs58ZOTu/eutS4M+0/yO7yDoD3FNx36k/rGr7TdReSSmSV4G7K+7XOFRYCpGcBr5QcZ/GodJijuQ0Bf7zWwbjUGUxRjIHfLLivoxDtYkpklngzor7MQ7VbjXtR3IK+HjFfRiHGtNmJCeB2yvObxxqXBuRnAC2VJzbODQxk4zkOHBrxXmNQxM3iUhmgA9WnNM41JomI5mm+qdyGYdat5pwMbA6vzGOEa6JVYVxKBp1RnKU8F/9qzAORaeOSF4Gbqg4h3EoWlUieQl4d8X7Nw5Fr0wkL1L9l7SMQ8lYQ/5IXmDM5fBzMg4lJ08kh4HrKt6PcShZ4yI5CKyvePvGoeSNiuQA4dKrVRiHOmM4kueocK3WecahzllDuBzlWyrejnFIGYxDymAcUgbjkDIYh5TBOKQMxiFlMA4pg3FIGYxDymAcUgbjkDIYh5TBOKQMxiFlMA4pg3FIGYxDymAcwSrg4hpuRx1iHMFq4Kn5szASAcYx8Abgr0O3ayQyjnlrgadH3L6R9JhxBJcDe8fcj5H0kHEEVwD7ctzfFEbSG8YRvBl4psD9GkkPGEewDni2xP0bSYcZR3A14drDZecwkg4yjmA94ar1dcxjJB1hHMH1wJGa5zKSxBlHsIHwMXKxzqcWGEfwLuDfCcypCTKO4AbCR1enMq8mwDiCG4GjCc6tBhlHsBE4lvD8aoBxBJuBmRb38XhN+1CNjCP4MPBKBPsxkogYR7AFOBHBfowkIsYR3A6cjGA/RhIR4wg+AZyKYD9Z67Ga9qkCjCO4C5iNYD9GEhHjCD4DzEWwHyOJiHEEnwdOR7CfMpEsr2H/GsE4gsXArgj2YyQRMY5zrZi/zbb3ZSQRMI7RjETGsQAj6THjyCf1SHZhJIUZRzFG0iPGUY6R9IBxVJN6JDsxkkzGUQ8j6SDjqJeRdIhxNMNIOsA4mtWFSJbVfiqJMI7JMJIEGcdkGUlCjKMdRpIA42hX6pHsoMORGEccjCRCxhEXI4mIccTJSCJgHHFLPZLtJByJcaTBSFpgHGkxkgkyjjR1IZKL6j6UuhlH2oykQcbRDUbSAOPoFiOpkXF0U+qRPEoEkRhHtxlJBcbRD0ZSgnH0i5EUYBz9lHok25hAJMbRb0YyhnEIjGQk49AwIxliHBol9UgeoYZIjEPj9DoS41AevYzkQsKn/7Q9vHGkIfVIHgKWFNnw/REMbRxpST2S+/Ju9J4IhjWONKUeyacX2uAq4KUIBjWOdKUcyUEWuKL89yIY0jjSl3Ik38na1BLgxQgGNI5uSDWSA8DiURv6WATDGUe3pBrJLYMNDJdyWx0nMkFTwBZguu1BlGma8G801fYgBW0Z9Ycpve/hT460pPaTZNuoTRyOYDDj6K6UInlu1AZmIxjMOLotlUheGTX8mQgGM47uSyGS2VGDT0cwmHH0Q+yRvDxq6KcjGMw4+iPmSJ4cDDn8Mu/f6tx9TXwpt7tifgn4fy0MB7KjhUHGMY7uizWS7aP+8E3E80Tdh1X9EtPDrTlgTdagWyMY0Dj6KZZIHhg35OaWhzOOfms7kjPAexYa8tctDWccgnYj+WmeAS8Djkx4MOPQsDYieRa4JO+Am4GTExrMODTKJCOZIcdDq/PdAZxqeLAdGIeyrQB20nwct5Yd8EOEt92bGOyXwNKyg6k3Xgf8ima+Bw8B76064JXArhqHmgG+VnUo9c43gePU9324FXhjXcMtAu4G9lcY6DTwc8IbklIZVxIeebxK+e/DvcBdTQ14AfA5wpXo5nIOtB+4F7iqqaHUO9cAPwCeJ9/34EngQeBOMi7IkGVRhSGXAzcDG4B1wOsJV0aZIVxfaC/hVYh/VrgPaSHrgZuAawlvUSwj/D7Hf4B9wFOEa0yfaGtASZIkSZIkSZIkSZIkSZIkSZIkSYrCfwGWtk+6sWAEBAAAAABJRU5ErkJggg=="},edbf:function(e,t,a){e.exports=a.p+"img/web.798ba28f.png"},edd4:function(e){e.exports=JSON.parse('{"musicassistant":"Music Assistant","home":"Home","artists":"Artists","albums":"Albums","tracks":"Tracks","playlists":"Playlists","playlist_tracks":"Playlist tracks","radios":"Radio","search":"Search","settings":"Settings","queue":"Queue","artist_toptracks":"Top tracks","artist_albums":"Albums","album_tracks":"Album tracks","album_versions":"Versions","track_versions":"Versions","type_to_search":"Type here to search...","add_library":"Add to library","remove_library":"Remove from library","add_playlist":"Add to playlist...","remove_playlist":"Remove from playlist","no_player":"No player selected","reboot_required":"A reboot is required to activate the new settings!","sort_name":"Sort by name","sort_artist":"Sort by artist name","sort_album":"Sort by album name","sort_date":"Sort by date","sort_default":"Default sorting","items":"item(s)","conf":{"enabled":"Enabled","base":"Generic settings","providers":"Providers / Plugins","player_settings":"Player settings","homeassistant":"Home Assistant integration","web":"Webserver","http_streamer":"Built-in (sox based) streamer","qobuz":"Qobuz","spotify":"Spotify","tunein":"TuneIn","file":"Filesystem","chromecast":"Chromecast","squeezebox":"Squeezebox support","sonos":"Sonos","webplayer":"Web Player (Chrome browser only)","username":"Username","password":"Password","hostname":"Hostname (or IP)","port":"Port","hass_url":"URL to homeassistant (e.g. https://homeassistant:8123)","hass_token":"Long Lived Access Token","hass_publish":"Publish players to Home Assistant","hass_player_power":"Attach player power to homeassistant entity","hass_player_source":"Source on the homeassistant entity (optional)","hass_player_volume":"Attach player volume to homeassistant entity","web_ssl_cert":"Path to ssl certificate file","web_ssl_key":"Path to ssl keyfile","player_enabled":"Enable player","player_name":"Custom name for this player","player_group_with":"Group this player to another (parent)player","player_mute_power":"Use muting as power control","player_disable_vol":"Disable volume controls","player_group_vol":"Apply group volume to childs (for group players only)","player_group_pow":"Apply group power based on childs (for group players only)","player_power_play":"Issue play command on power on","file_prov_music_path":"Path to music files","file_prov_playlists_path":"Path to playlists (.m3u)","web_http_port":"HTTP port","web_https_port":"HTTPS port","cert_fqdn_host":"FQDN of hostname in certificate","enable_r128_volume_normalisation":"Enable R128 volume normalization","target_volume_lufs":"Target volume (R128 default is -23 LUFS)","fallback_gain_correct":"Fallback gain correction if R128 readings not (yet) available","enable_audio_cache":"Allow caching of audio to temp files","trim_silence":"Strip silence from beginning and end of audio (temp files only!)","http_streamer_sox_effects":"Custom sox effects to apply to audio (built-in streamer only!) See http://sox.sourceforge.net/sox.html#EFFECTS","max_sample_rate":"Maximum sample rate this player supports, higher will be downsampled","force_http_streamer":"Force use of built-in streamer, even if the player can handle the music provider directly","not_grouped":"Not grouped","conf_saved":"Configuration saved, restart app to make effective","audio_cache_folder":"Directory to use for cache files","audio_cache_max_size_gb":"Maximum size of the cache folder (GB)","gapless_enabled":"Enable gapless support","crossfade_duration":"Crossfade duration (in seconds, 0 to disable)"},"players":"Players","play":"Play","play_on":"Play on:","play_now":"Play Now","play_next":"Play Next","add_queue":"Add to Queue","queue_clear":"Clear queue","show_info":"Show info","queue_next_tracks":"Next","queue_previous_tracks":"Played","queue_move_up":"Move up","queue_move_down":"Move down","queue_options":"Queue options","enable_repeat":"Enable repeat","disable_repeat":"Disable repeat","enable_shuffle":"Enable shuffle","disable_shuffle":"Disable shuffle","read_more":"read more","stream_details":"Streamdetails","crossfade_enabled":"Crossfade enabled","state":{"playing":"playing","stopped":"stopped","paused":"paused","off":"off"}}')},f1d4:function(e,t){e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJEAAABfCAYAAADoOiXnAAALyUlEQVR4nO2debAcVRWHv5eQjRhIIIQEDFRIwCAYFmUTQxJ2TalIQGQRlE3WiBSFsQoiSwWECiIlm8oiSwBBFIMga8BYQFhFCQYhIYIBAoQALxsBkuMfvx6nX8/Sd+Z2z8x7735VXW96+m7T7zd3Oef0nTYzIxDwoUezGxDo/AQRBbwJIgp4E0QU8CaIKOBNEFHAmyCigDdBRAFvgogC3gQRBbwJIgp4E0QU8CaIKOBNEFHAmyCigDdBRAFvgogC3gQRBbwJIgp4s06zG1AnQ4HPAtsAnwdGRucDgH7AIOA94FPgHWA+MBf4O/Bv4M3GN7nr0tZJAvXbgB2BfYGvIfEMqrOsT4EngN8CtwPLM2hft6bVRTQE+DZwJPAlJKYkbwDzgGdQL/Nf1At9HF3vAQwGNkPi2w3YBegNvA1cClwJLMvrQ3R1WlVE2wDHA4cAGyeutaOh6a/An6PX7TWWPxTYG/geMAFYCBwHPFJ3i7sxrSaiMcCZwEFAn8S154DrgJmot8mKkcAU4Nio/JOBjzIsv8vTKiLqA5wN/AhYN3HtAeASYBaaz+TFROBa1CtNIAjJmVYQ0Z7ARWjOE+cR4DLgTw1syzDgNjSfOgBY0cC6Oy3NFFEb8HPgtMT7rwE/Bn7X8BaJNuAeYH1gHPn2fl2CZhkbNwDupFRAM4CdaZ6AAAw4EBgITG9iOzoNzeiJRgO3AtvH3luNep/LGt2YKmyB7El7Ay80uS0tTaNFtAXwKDA89t4i4HBgdiMb4siRwFFISE2fPLYqjRzORgD30lFAC4G9aE0BgYbXTYD9m92QVqZRItoYuAv4XOy9t4BJwMsNakM9rAEuB37Y7Ia0Mo0Yznqi5frY2Hvvo6X983lXngF9kVX8YOTAbVXakOF0u+jvpsghXWA1Wvm+gOZ6S7OquBFe/NPpKCBD7obOICCQ0fE0JPxWZAzwXTRvG41En8Yi4Bpkn/M2qubdE+2M5jtxF8Y04Kw8K+0m7Amcgiztvess417gCDy/IHmKqB/wNHKmFngBWaY/Lpsj4MJQ5AY6rMy114G7gSXAKOTAThttpqAeqW7yHM5+QEcBgXxjQUB+nE+pgNYCF0dHvFcZiHqqamzt26C8VmcDkfEwzi3AwznV1524llKf3s+An1A6LL3nUN4q3wblJaLvoG63wHLkpW8WvaKjXFBbOdaJ0ufZU7ehiIU+1PZ/mEPp8HN1mXS9gN0dyptbQ91lyeMm9URDWZzbgVczKHsAcCrVJ5JLgN8D41FIx44Uw0s+BhagCeWNFJ2rg5HRcw/UvRcC4QytZB5BPcCSCnXuhyImq7EC9cbjgX2Q22e9qA2rUIzUHGTgXJhS1hXImt4TOYvLLdcPREv9aixGgX1+mFnWxzgrZbeMyj6oTNnleNshzW1Ru640szcd0r9sZqPKtKmfmS10bNc7DmmWmNnxZepJHkPMrH+FayPM7HWHug5xqCf1yENENyYaOt/M+mRU9mMONyZPbrfSNh2TU10HlKnL5RhrZgtSyv7IzI6ts/ySI+s50QBk9IpzL7KW+jIO+HIG5fiwCx1tXj2ByTXkfxUtz19ySHtqDeUCbAWciyJBt6iSbh5asV1TY/kVyXpOtB2KDozzUEZlJ2OPKnEPmiyeREezfyXmonnBQci2Uo1P6BikNhFZjF14FLlOlqA5zLSU9CPRXG5lmWu9gAuADVFs1mZoLlfJWv0hEu4dwG+o/cGGqmQtor0S5+3AkxmUuwPwdYd0F1M0LRxBuohmReWuRN/eNBG9hpyyoNVV0oxRiX+icNsPo/MNHPK0UXnVNgE4w7FuQwbIo9GXIHOyHs52SpzPR0+g+jIZDR3VmAdMjV4fhhyQ1ViOequVyByxr0M7/hh7PRa34XUtcCJFAQHs6pBvMZUfrDzBIX+BNvSFmoGbX61msu6JtkycL8A/mGsEGmrSmEZx7vV9h/Qz0cOOAN9EBtJqrELzuwInOtQBMg08HjsfBXzRId+cKtduQr0LyNyxA1rSb1Qlz8HoYc1a51rpZDVDj45liVXAtAzK/GnKSsNMS/TCcnd7M/vEIc9eUfpeZvaiQ/pbYm3a1MzaHfK8b2bDrOPnOc8hn5nZV6y2+7SLma1KKXNV1PZM/+9ZD2fJZ8Z8wyf6oNDZNGZQdAVMJr2HfZbi0677o00hqrEW+EXs/DjcJu0zUfBdgb7ISJjGi9Q+l3yWdDdHXzp6EjIhaxEly1vsWd4kSofIJCspmv03R912GpciYbSheKc0ZgFPRa/XR0/LpmFoKItzTNTGNKZT+yR4U9S2anxEZat73eQdHlvvzh2g3uRMh3Qz0NwLNN5/JiX9POSGAbk5xjvUcXHs9TGkT9pBovtb7Lw/CrtI4zHg5uj1emhDi7RVI6jHTvvsT6BwkWzJeHxMcrZHWfunjO9mmvuMidIPNrkM0jg5VscdDumfNrOeUfq+ZvaKQx4zsynW8fOc6Jiv4CLa2szmRO+tMLNvWOV7NczMFjuUPbFKGXUfeYvoKo+yHnC4KXfH0p/hkH6RmQ2M0m9l6RNRM7PDY3Uc6pC+wIRYvtFm9q5DnnOi9EdY6RciXl78WMfM7nMo+zoza6tQRkuJaE2i4bPrLGd3h5tiJj8RJt/cqw7pL4zVcY5D+tdNvU8hz2zHdpmZ7RHl2cbMXnJIf75phTmjzLVPTT1T8j4NNrO7HMq+tUzelhXR0kTjPzB5m2st5zKHG/Mv07cQq33o62Vu/9hzY236grmZDgo8bmZXmJb5aRRMIftVSXOlmW1kZr3NbHPTsJzmaDXTkJ2VA7whInquzIeYVGMZQ8wtlGNyLM/9DulnxtJPdEi/1MyGxvJc55CnVhaZ2UmxOnqY2SVV0r9rEn/SHleON8zsVKvv/9hUEV1V5sM8WGMZFzncoLfMbECUfh+H9GYdY5oedkh/Xiy96/zJlTfM7CzTcFTuHkw0s6fqLPtJMzulStmZH1m7PWZR6tcZj56Hcgl/ABnnrk9J8xDFPRZ7oE08q7lXFqLlLSiicI+U8t9DT74WOAE3v9OdKBTjaORVXxd5/VegCMnngfuBB6lur7kH+Avy501EbpLhyMDZP0qzBvnWFgOvIDfJo8i00NB9A7J+ZGgw8kclvdQ3oo0RWoE/AN9KSXMOis0BbT76Ivps1ViDYpoLluaC8W818AEK//C52QOQKDeMzj9BYm+n2Xso5dC9VZo7HF5DGXkdkyqPAv/nAzPbMJZnqkMes47mhm515GGx/lWF9y8Hts2hPlc2oqPluRK/puiD6o0e+Xbhl3W0qUuQh4iepBimEGcgGkqG5FBnGoPQxlrVwkZBc6cLYud7olCUNJ4iuwjOTkdevrOplB//t0QPMKZ5zbNkGJrsJqMuy3ESmr9AbZGL1yOHbrckLxE9D9xQ4dq2KAzjgJzqjjMauI/SnWnLcXWUtsCuuDlnl6JVWbclTy/+FIre9SRDUKjpdDrunJYV66Fe5THcAulfprTXcQkRAW2g/q5707oeeW8tMwZtLVMtzmUpsvNchWKyfRiMYpBOR4/QuLAMzX2eib23E8X4obS8o+nmv1rUiJ3Svoo2NO+Vkq4dDSd3IcPgfxzLH4ZijA9GjzMnH1mqxlpkM5qZeH8q2sEkbZ5zE+6PMnVZGrV77FFo6ey6GdNyZLSch8T0FsXdKwZFxwjUC4wkPci+HKtRhOLNZa71p/S3RcrxIcVHiLotjdyCeB80bG3SqAqrsAw4FLkXAp40cgviB9Gj0M+kJcyZf6A5UBBQRjT6ZxnmIyFdgNsGTFmyElnNx9J8IXcpmvkDMcPRKupY0gPMfViO7DjTyWBDp0AprfBTVaPQzmqHkcH+gTHmIvfLDRSfdA3kQCuIqEA/ZFkeh0IqhqNVVz+HvO1oeFyANiyfjew84WemGkAriSjQSWnW750FuhBBRAFvgogC3gQRBbwJIgp4E0QU8CaIKOBNEFHAmyCigDdBRAFvgogC3gQRBbwJIgp4E0QU8CaIKOBNEFHAmyCigDdBRAFvgogC3vwPN7k7QTq1nHAAAAAASUVORK5CYII="},f5e3:function(e,t,a){e.exports=a.p+"img/hires.eabcf7ae.png"},fb30:function(e,t){e.exports="data:image/png;base64,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"}});
-//# sourceMappingURL=app.5176fd2b.js.map
\ No newline at end of file
+++ /dev/null
-{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/App.vue?0f16","webpack:///./src/assets/qobuz.png","webpack:///./src/assets/spotify.png","webpack:///./src/components/ItemsListing.vue?8d1e","webpack:///./src/components/PanelviewItem.vue?cf5a","webpack:///src/components/PanelviewItem.vue","webpack:///./src/components/PanelviewItem.vue?2434","webpack:///./src/components/PanelviewItem.vue","webpack:///src/components/ItemsListing.vue","webpack:///./src/components/ItemsListing.vue?0bf5","webpack:///./src/components/ItemsListing.vue?3a42","webpack:///./src/assets/demo_player.png","webpack:///./src/assets/http_streamer.png","webpack:///./src/assets/homeassistant.png","webpack:///./src/assets/webplayer.png","webpack:///./src/locales sync [A-Za-z0-9-_,\\s]+\\.json$/","webpack:///./src/assets/default_artist.png","webpack:///./src/App.vue?5077","webpack:///./src/components/NavigationMenu.vue?9860","webpack:///src/components/NavigationMenu.vue","webpack:///./src/components/NavigationMenu.vue?878f","webpack:///./src/components/NavigationMenu.vue","webpack:///./src/components/TopBar.vue?c899","webpack:///src/components/TopBar.vue","webpack:///./src/components/TopBar.vue?6b44","webpack:///./src/components/TopBar.vue","webpack:///./src/components/ContextMenu.vue?8c48","webpack:///src/components/ContextMenu.vue","webpack:///./src/components/ContextMenu.vue?8e1a","webpack:///./src/components/ContextMenu.vue","webpack:///./src/components/PlayerOSD.vue?3ef5","webpack:///./src/components/VolumeControl.vue?6721","webpack:///src/components/VolumeControl.vue","webpack:///./src/components/VolumeControl.vue?2966","webpack:///./src/components/VolumeControl.vue","webpack:///src/components/PlayerOSD.vue","webpack:///./src/components/PlayerOSD.vue?50d9","webpack:///./src/components/PlayerOSD.vue?dd97","webpack:///./src/components/PlayerSelect.vue?9121","webpack:///src/components/PlayerSelect.vue","webpack:///./src/components/PlayerSelect.vue?63dc","webpack:///./src/components/PlayerSelect.vue?ba31","webpack:///src/App.vue","webpack:///./src/App.vue?3359","webpack:///./src/App.vue?2d25","webpack:///./src/registerServiceWorker.js","webpack:///./src/views/Home.vue?3267","webpack:///src/views/Home.vue","webpack:///./src/views/Home.vue?f458","webpack:///./src/views/Home.vue","webpack:///./src/views/Browse.vue?9280","webpack:///src/views/Browse.vue","webpack:///./src/views/Browse.vue?68e7","webpack:///./src/views/Browse.vue","webpack:///./src/router/index.js","webpack:///./src/i18n.js","webpack:///./src/plugins/vuetify.js","webpack:///./src/plugins/store.js","webpack:///./src/plugins/server.js","webpack:///./src/main.js","webpack:///./src/assets/chromecast.png","webpack:///./src/assets/file.png","webpack:///./src/components/PlayerOSD.vue?240a","webpack:///./src/assets/sonos.png","webpack:///./src/assets/vorbis.png","webpack:///./src/assets/aac.png","webpack:///./src/assets/ogg.png","webpack:///./src/assets sync ^\\.\\/.*\\.png$","webpack:///./src/components/ItemsListing.vue?2279","webpack:///./src/components/PlayerSelect.vue?5f11","webpack:///./src/assets/squeezebox.png","webpack:///./src/assets/logo.png","webpack:///./src/components/ListviewItem.vue?1742","webpack:///src/components/ListviewItem.vue","webpack:///./src/components/ListviewItem.vue?0071","webpack:///./src/components/ListviewItem.vue","webpack:///./src/components/ProviderIcons.vue?3616","webpack:///src/components/ProviderIcons.vue","webpack:///./src/components/ProviderIcons.vue?8a80","webpack:///./src/components/ProviderIcons.vue","webpack:///./src/assets/tunein.png","webpack:///./src/assets/crossfade.png","webpack:///./src/assets/web.png","webpack:///./src/assets/mp3.png","webpack:///./src/assets/hires.png","webpack:///./src/assets/flac.png"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","installedCssChunks","jsonpScriptSrc","p","exports","module","l","e","promises","cssChunks","Promise","resolve","reject","href","fullhref","existingLinkTags","document","getElementsByTagName","tag","dataHref","getAttribute","rel","existingStyleTags","linkTag","createElement","type","onload","onerror","event","request","target","src","err","Error","code","parentNode","removeChild","head","appendChild","then","installedChunkData","promise","onScriptComplete","script","charset","timeout","nc","setAttribute","error","clearTimeout","chunk","errorType","realSrc","message","name","undefined","setTimeout","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","jsonpArray","window","oldJsonpFunction","slice","render","_vm","this","_h","$createElement","_c","_self","staticStyle","attrs","_v","_s","items","$t","scopedSlots","_u","fn","ref","on","_g","_l","item","domProps","text","$event","sortBy","sortDesc","_e","model","callback","$$v","search","expression","toggleViewMode","viewMode","filteredItems","props","item_id","thumbWidth","thumbHeight","staticClass","media_type","$store","isMobile","staticRenderFns","directives","rawName","indexOf","_k","keyCode","button","onclickHandler","itemClicked","menuClick","preventDefault","$server","getImageUrl","isHiRes","class","artist","artists","pressTimer","components","Number","hideproviders","Boolean","hidelibrary","touchMoving","cancelled","computed","created","beforeDestroy","mounted","methods","mediaItem","url","$emit","$router","component","VCard","VCardSubtitle","VCardTitle","VDivider","VImg","VTooltip","ListviewItem","PanelviewItem","sortKeys","endpoint","includes","getItems","$on","localStorage","setItem","mediatype","toLowerCase","newLst","VAppBar","VBtn","VCol","VContainer","VDataIterator","VIcon","VLabel","VList","VListItem","VMenu","VRow","VSpacer","VTextField","map","webpackContext","req","id","webpackContextResolve","keys","$route","path","showPlayerSelect","loading","$set","title","icon","showNavigationMenu","VListItemAction","VListItemContent","VListItemTitle","VNavigationDrawer","color","topBarTransparent","windowtitle","go","topBarContextItem","VLayout","visible","playlists","header","subheader","label","itemCommand","action","index","addToPlaylist","watch","menuItems","curItem","curPlaylist","playerQueueItems","showContextMenu","showPlayMenu","curBrowseContext","in_library","is_editable","cmd","query","showPlaylistsMenu","removeFromPlaylist","toggleLibrary","playItem","putData","deleteData","track","VDialog","VListItemAvatar","VSubheader","curQueueItem","activePlayer","artistindex","artistClick","stopPropagation","nativeOn","streamDetails","quality","content_type","provider","sample_rate","bit_depth","playerQueueDetails","streamVolumeLevelAdjustment","playerCurTimeStr","playerTotalTimeStr","style","progressBarWidth","progress","playerCommand","state","Math","round","volume_level","players","player_id","is_group","child_id","powered","togglePlayerPower","setPlayerVolume","volumePlayerIds","allIds","playerId","newVolume","VListItemSubtitle","VSlider","VolumeControl","cur_item","totalSecs","duration","curSecs","cur_item_time","curPercent","toString","formatDuration","innerWidth","streamdetails","sox_options","re","volLevel","replace","queueUpdatedMsg","getQueueDetails","cmd_opt","activePlayerId","VFlex","VFooter","VListItemIcon","VProgressLinear","switchPlayer","filteredPlayerIds","show","getAvailablePlayers","available","NavigationMenu","TopBar","ContextMenu","PlayerOSD","PlayerSelect","serverAddress","loc","origin","pathname","connect","VApp","VMain","VOverlay","VProgressCircular","register","process","ready","registered","cached","updatefound","updated","alert","location","reload","offline","ItemsListing","String","Vue","use","VueRouter","routes","Home","route","params","Browse","router","loadLocaleMessages","locales","require","messages","forEach","matched","match","locale","VueI18n","navigator","language","split","fallbackLocale","Vuetify","globalStore","isInStandaloneMode","handleWindowOptions","addEventListener","destroyed","removeEventListener","body","clientWidth","standalone","matchMedia","matches","install","options","axiosConfig","_axios","axios","server","_address","_ws","connected","syncStatus","endsWith","wsAddress","WebSocket","onopen","_onWsConnect","onmessage","_onWsMessage","onclose","_onWsClose","_onWsError","imageType","size","metadata","album","getData","$log","debug","postData","JSON","stringify","post","put","dataObj","delete","getAllItems","list","urlParams","URLSearchParams","oboe","node","set","done","fullList","queueOpt","newPlayerId","info","player","_selectActivePlayer","msg","parse","message_details","reason","close","enabled","group_parents","lastPlayerId","getItem","isProduction","loggerOptions","isEnabled","logLevel","stringifyArguments","showLogLevel","showMethodName","separator","showConsoleColors","config","productionTip","VueLogger","VueVirtualScroller","store","secNum","parseInt","hours","floor","minutes","seconds","i18n","vuetify","h","App","$mount","hideavatar","version","hidetracknum","track_number","disc_number","owner","provider_ids","hideduration","hidemenu","ProviderIcons","totalitems","prov","height","providerIds","Array","uniqueProviders","output"],"mappings":"aACE,SAASA,EAAqBC,GAQ7B,IAPA,IAMIC,EAAUC,EANVC,EAAWH,EAAK,GAChBI,EAAcJ,EAAK,GACnBK,EAAiBL,EAAK,GAIHM,EAAI,EAAGC,EAAW,GACpCD,EAAIH,EAASK,OAAQF,IACzBJ,EAAUC,EAASG,GAChBG,OAAOC,UAAUC,eAAeC,KAAKC,EAAiBX,IAAYW,EAAgBX,IACpFK,EAASO,KAAKD,EAAgBX,GAAS,IAExCW,EAAgBX,GAAW,EAE5B,IAAID,KAAYG,EACZK,OAAOC,UAAUC,eAAeC,KAAKR,EAAaH,KACpDc,EAAQd,GAAYG,EAAYH,IAG/Be,GAAqBA,EAAoBhB,GAE5C,MAAMO,EAASC,OACdD,EAASU,OAATV,GAOD,OAHAW,EAAgBJ,KAAKK,MAAMD,EAAiBb,GAAkB,IAGvDe,IAER,SAASA,IAER,IADA,IAAIC,EACIf,EAAI,EAAGA,EAAIY,EAAgBV,OAAQF,IAAK,CAG/C,IAFA,IAAIgB,EAAiBJ,EAAgBZ,GACjCiB,GAAY,EACRC,EAAI,EAAGA,EAAIF,EAAed,OAAQgB,IAAK,CAC9C,IAAIC,EAAQH,EAAeE,GACG,IAA3BX,EAAgBY,KAAcF,GAAY,GAE3CA,IACFL,EAAgBQ,OAAOpB,IAAK,GAC5Be,EAASM,EAAoBA,EAAoBC,EAAIN,EAAe,KAItE,OAAOD,EAIR,IAAIQ,EAAmB,GAGnBC,EAAqB,CACxB,IAAO,GAMJjB,EAAkB,CACrB,IAAO,GAGJK,EAAkB,GAGtB,SAASa,EAAe7B,GACvB,OAAOyB,EAAoBK,EAAI,OAAS,CAAC,OAAS,SAAS,iCAAiC,iCAAiC,YAAc,cAAc,YAAc,cAAc,OAAS,UAAU9B,IAAUA,GAAW,IAAM,CAAC,OAAS,WAAW,iCAAiC,WAAW,YAAc,WAAW,YAAc,WAAW,OAAS,YAAYA,GAAW,MAIvX,SAASyB,EAAoB1B,GAG5B,GAAG4B,EAAiB5B,GACnB,OAAO4B,EAAiB5B,GAAUgC,QAGnC,IAAIC,EAASL,EAAiB5B,GAAY,CACzCK,EAAGL,EACHkC,GAAG,EACHF,QAAS,IAUV,OANAlB,EAAQd,GAAUW,KAAKsB,EAAOD,QAASC,EAAQA,EAAOD,QAASN,GAG/DO,EAAOC,GAAI,EAGJD,EAAOD,QAKfN,EAAoBS,EAAI,SAAuBlC,GAC9C,IAAImC,EAAW,GAIXC,EAAY,CAAC,OAAS,EAAE,iCAAiC,EAAE,YAAc,GAC1ER,EAAmB5B,GAAUmC,EAASvB,KAAKgB,EAAmB5B,IACzB,IAAhC4B,EAAmB5B,IAAkBoC,EAAUpC,IACtDmC,EAASvB,KAAKgB,EAAmB5B,GAAW,IAAIqC,SAAQ,SAASC,EAASC,GAIzE,IAHA,IAAIC,EAAO,QAAU,CAAC,OAAS,SAAS,iCAAiC,iCAAiC,YAAc,cAAc,YAAc,cAAc,OAAS,UAAUxC,IAAUA,GAAW,IAAM,CAAC,OAAS,WAAW,iCAAiC,WAAW,YAAc,WAAW,YAAc,WAAW,OAAS,YAAYA,GAAW,OAC/VyC,EAAWhB,EAAoBK,EAAIU,EACnCE,EAAmBC,SAASC,qBAAqB,QAC7CxC,EAAI,EAAGA,EAAIsC,EAAiBpC,OAAQF,IAAK,CAChD,IAAIyC,EAAMH,EAAiBtC,GACvB0C,EAAWD,EAAIE,aAAa,cAAgBF,EAAIE,aAAa,QACjE,GAAe,eAAZF,EAAIG,MAAyBF,IAAaN,GAAQM,IAAaL,GAAW,OAAOH,IAErF,IAAIW,EAAoBN,SAASC,qBAAqB,SACtD,IAAQxC,EAAI,EAAGA,EAAI6C,EAAkB3C,OAAQF,IAAK,CAC7CyC,EAAMI,EAAkB7C,GACxB0C,EAAWD,EAAIE,aAAa,aAChC,GAAGD,IAAaN,GAAQM,IAAaL,EAAU,OAAOH,IAEvD,IAAIY,EAAUP,SAASQ,cAAc,QACrCD,EAAQF,IAAM,aACdE,EAAQE,KAAO,WACfF,EAAQG,OAASf,EACjBY,EAAQI,QAAU,SAASC,GAC1B,IAAIC,EAAUD,GAASA,EAAME,QAAUF,EAAME,OAAOC,KAAOjB,EACvDkB,EAAM,IAAIC,MAAM,qBAAuB5D,EAAU,cAAgBwD,EAAU,KAC/EG,EAAIE,KAAO,wBACXF,EAAIH,QAAUA,SACP5B,EAAmB5B,GAC1BkD,EAAQY,WAAWC,YAAYb,GAC/BX,EAAOoB,IAERT,EAAQV,KAAOC,EAEf,IAAIuB,EAAOrB,SAASC,qBAAqB,QAAQ,GACjDoB,EAAKC,YAAYf,MACfgB,MAAK,WACPtC,EAAmB5B,GAAW,MAMhC,IAAImE,EAAqBxD,EAAgBX,GACzC,GAA0B,IAAvBmE,EAGF,GAAGA,EACFhC,EAASvB,KAAKuD,EAAmB,QAC3B,CAEN,IAAIC,EAAU,IAAI/B,SAAQ,SAASC,EAASC,GAC3C4B,EAAqBxD,EAAgBX,GAAW,CAACsC,EAASC,MAE3DJ,EAASvB,KAAKuD,EAAmB,GAAKC,GAGtC,IACIC,EADAC,EAAS3B,SAASQ,cAAc,UAGpCmB,EAAOC,QAAU,QACjBD,EAAOE,QAAU,IACb/C,EAAoBgD,IACvBH,EAAOI,aAAa,QAASjD,EAAoBgD,IAElDH,EAAOZ,IAAM7B,EAAe7B,GAG5B,IAAI2E,EAAQ,IAAIf,MAChBS,EAAmB,SAAUd,GAE5Be,EAAOhB,QAAUgB,EAAOjB,OAAS,KACjCuB,aAAaJ,GACb,IAAIK,EAAQlE,EAAgBX,GAC5B,GAAa,IAAV6E,EAAa,CACf,GAAGA,EAAO,CACT,IAAIC,EAAYvB,IAAyB,SAAfA,EAAMH,KAAkB,UAAYG,EAAMH,MAChE2B,EAAUxB,GAASA,EAAME,QAAUF,EAAME,OAAOC,IACpDiB,EAAMK,QAAU,iBAAmBhF,EAAU,cAAgB8E,EAAY,KAAOC,EAAU,IAC1FJ,EAAMM,KAAO,iBACbN,EAAMvB,KAAO0B,EACbH,EAAMnB,QAAUuB,EAChBF,EAAM,GAAGF,GAEVhE,EAAgBX,QAAWkF,IAG7B,IAAIV,EAAUW,YAAW,WACxBd,EAAiB,CAAEjB,KAAM,UAAWK,OAAQa,MAC1C,MACHA,EAAOhB,QAAUgB,EAAOjB,OAASgB,EACjC1B,SAASqB,KAAKC,YAAYK,GAG5B,OAAOjC,QAAQ+C,IAAIjD,IAIpBV,EAAoB4D,EAAIxE,EAGxBY,EAAoB6D,EAAI3D,EAGxBF,EAAoB8D,EAAI,SAASxD,EAASkD,EAAMO,GAC3C/D,EAAoBgE,EAAE1D,EAASkD,IAClC1E,OAAOmF,eAAe3D,EAASkD,EAAM,CAAEU,YAAY,EAAMC,IAAKJ,KAKhE/D,EAAoBoE,EAAI,SAAS9D,GACX,qBAAX+D,QAA0BA,OAAOC,aAC1CxF,OAAOmF,eAAe3D,EAAS+D,OAAOC,YAAa,CAAEC,MAAO,WAE7DzF,OAAOmF,eAAe3D,EAAS,aAAc,CAAEiE,OAAO,KAQvDvE,EAAoBwE,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQvE,EAAoBuE,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,kBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAK7F,OAAO8F,OAAO,MAGvB,GAFA5E,EAAoBoE,EAAEO,GACtB7F,OAAOmF,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOvE,EAAoB8D,EAAEa,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIR3E,EAAoB+E,EAAI,SAASxE,GAChC,IAAIwD,EAASxD,GAAUA,EAAOmE,WAC7B,WAAwB,OAAOnE,EAAO,YACtC,WAA8B,OAAOA,GAEtC,OADAP,EAAoB8D,EAAEC,EAAQ,IAAKA,GAC5BA,GAIR/D,EAAoBgE,EAAI,SAASgB,EAAQC,GAAY,OAAOnG,OAAOC,UAAUC,eAAeC,KAAK+F,EAAQC,IAGzGjF,EAAoBK,EAAI,GAGxBL,EAAoBkF,GAAK,SAAShD,GAA2B,MAAMA,GAEnE,IAAIiD,EAAaC,OAAO,gBAAkBA,OAAO,iBAAmB,GAChEC,EAAmBF,EAAWhG,KAAK2F,KAAKK,GAC5CA,EAAWhG,KAAOf,EAClB+G,EAAaA,EAAWG,QACxB,IAAI,IAAI3G,EAAI,EAAGA,EAAIwG,EAAWtG,OAAQF,IAAKP,EAAqB+G,EAAWxG,IAC3E,IAAIU,EAAsBgG,EAI1B9F,EAAgBJ,KAAK,CAAC,EAAE,kBAEjBM,K,6EC1QT,yBAAwb,EAAG,G,uBCA3bc,EAAOD,QAAU,IAA0B,0B,uBCA3CC,EAAOD,QAAU,IAA0B,4B,oCCA3C,IAAIiF,EAAS,WAAa,IAAIC,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,UAAU,CAACA,EAAG,YAAY,CAACE,YAAY,CAAC,gBAAgB,QAAQC,MAAM,CAAC,KAAO,GAAG,MAAQ,GAAG,MAAQ,GAAG,MAAQ,gBAAgB,CAACH,EAAG,UAAU,CAACG,MAAM,CAAC,MAAQ,KAAK,CAACP,EAAIQ,GAAGR,EAAIS,GAAGT,EAAIU,MAAMrH,OAAS,IAAM2G,EAAIW,GAAG,aAAaP,EAAG,YAAYA,EAAG,SAAS,CAACG,MAAM,CAAC,KAAO,GAAG,0BAAyB,GAAOK,YAAYZ,EAAIa,GAAG,CAAC,CAACxB,IAAI,YAAYyB,GAAG,SAASC,GAC/b,IAAIC,EAAKD,EAAIC,GACb,MAAO,CAACZ,EAAG,QAAQJ,EAAIiB,GAAG,CAACV,MAAM,CAAC,KAAO,KAAKS,GAAI,CAACZ,EAAG,SAAS,CAACJ,EAAIQ,GAAG,WAAW,SAAS,CAACJ,EAAG,SAASJ,EAAIkB,GAAIlB,EAAY,UAAE,SAASmB,GAAM,OAAOf,EAAG,cAAc,CAACf,IAAI8B,EAAKpC,MAAMqC,SAAS,CAAC,YAAcpB,EAAIS,GAAGU,EAAKE,OAAOL,GAAG,CAAC,MAAQ,SAASM,GAAQtB,EAAIuB,OAASJ,EAAKpC,aAAY,IAAI,GAAGqB,EAAG,QAAQ,CAACG,MAAM,CAAC,KAAO,IAAIS,GAAG,CAAC,MAAQ,SAASM,GAAQtB,EAAIwB,UAAYxB,EAAIwB,YAAY,CAAGxB,EAAIwB,SAAgDxB,EAAIyB,KAA1CrB,EAAG,SAAS,CAACJ,EAAIQ,GAAG,kBAA4BR,EAAY,SAAEI,EAAG,SAAS,CAACJ,EAAIQ,GAAG,oBAAoBR,EAAIyB,MAAM,GAAGrB,EAAG,SAAS,CAACG,MAAM,CAAC,KAAO,GAAG,0BAAyB,GAAOK,YAAYZ,EAAIa,GAAG,CAAC,CAACxB,IAAI,YAAYyB,GAAG,SAASC,GAChnB,IAAIC,EAAKD,EAAIC,GACb,MAAO,CAACZ,EAAG,QAAQJ,EAAIiB,GAAG,CAACV,MAAM,CAAC,KAAO,KAAKS,GAAI,CAACZ,EAAG,SAAS,CAACJ,EAAIQ,GAAG,aAAa,SAAS,CAACJ,EAAG,SAAS,CAACA,EAAG,eAAe,CAACG,MAAM,CAAC,UAAY,GAAG,qBAAqB,SAAS,MAAQ,SAAS,eAAe,GAAG,KAAO,GAAG,MAAQ,IAAImB,MAAM,CAAC3C,MAAOiB,EAAU,OAAE2B,SAAS,SAAUC,GAAM5B,EAAI6B,OAAOD,GAAKE,WAAW,aAAa,IAAI,GAAG1B,EAAG,QAAQ,CAACE,YAAY,CAAC,eAAe,SAASC,MAAM,CAAC,KAAO,IAAIS,GAAG,CAAC,MAAQ,SAASM,GAAQ,OAAOtB,EAAI+B,oBAAoB,CAAkB,SAAhB/B,EAAIgC,SAAqB5B,EAAG,SAAS,CAACJ,EAAIQ,GAAG,eAAeR,EAAIyB,KAAsB,QAAhBzB,EAAIgC,SAAoB5B,EAAG,SAAS,CAACJ,EAAIQ,GAAG,aAAaR,EAAIyB,MAAM,IAAI,GAAGrB,EAAG,kBAAkB,CAACG,MAAM,CAAC,MAAQP,EAAIU,MAAM,OAASV,EAAI6B,OAAO,UAAU7B,EAAIuB,OAAO,YAAYvB,EAAIwB,SAAS,gBAAgBxB,EAAIiC,cAAc,sBAAsB,GAAG,qBAAqB,GAAG,QAAU,IAAIrB,YAAYZ,EAAIa,GAAG,CAAC,CAACxB,IAAI,UAAUyB,GAAG,SAASoB,GAAO,MAAO,CAAkB,SAAhBlC,EAAIgC,SAAqB5B,EAAG,cAAc,CAACG,MAAM,CAAC,MAAQ,KAAK,CAACH,EAAG,QAAQ,CAACG,MAAM,CAAC,MAAQ,GAAG,gBAAgB,UAAU,MAAQ,YAAYP,EAAIkB,GAAIgB,EAAW,OAAE,SAASf,GAAM,OAAOf,EAAG,QAAQ,CAACf,IAAI8B,EAAKgB,QAAQ5B,MAAM,CAAC,aAAa,YAAY,CAACH,EAAG,gBAAgB,CAACG,MAAM,CAAC,KAAOY,EAAK,WAAanB,EAAIoC,WAAW,YAAcpC,EAAIqC,gBAAgB,MAAK,IAAI,GAAGrC,EAAIyB,KAAsB,QAAhBzB,EAAIgC,SAAoB5B,EAAG,SAAS,CAACG,MAAM,CAAC,WAAW,KAAK,CAACH,EAAG,kBAAkB,CAACkC,YAAY,WAAW/B,MAAM,CAAC,MAAQ2B,EAAMxB,MAAM,YAAY,GAAG,YAAY,UAAU,YAAY,IAAIE,YAAYZ,EAAIa,GAAG,CAAC,CAACxB,IAAI,UAAUyB,GAAG,SAASC,GACx8C,IAAII,EAAOJ,EAAII,KACf,MAAO,CAACf,EAAG,eAAe,CAACG,MAAM,CAAC,KAAOY,EAAK,WAAgC,GAAnBA,EAAKoB,YAAkBvC,EAAIwC,OAAOC,SAAiB,cAAe,EAAK,cAAgBtB,EAAKoB,WAAa,GAAIvC,EAAIwC,OAAOC,SAAiB,aAAc,EAAK,SAA8B,GAAnBtB,EAAKoB,YAAkBvC,EAAIwC,OAAOC,SAAiB,aAAkC,GAAnBtB,EAAKoB,kBAAuB,MAAK,MAAS,GAAGvC,EAAIyB,aAAa,IAC9ViB,EAAkB,G,gFCPlB,EAAS,WAAa,IAAI1C,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,SAAS,CAACuC,WAAW,CAAC,CAAC3E,KAAK,YAAY4E,QAAQ,cAAc7D,MAAOiB,EAAa,UAAE8B,WAAW,cAAcvB,MAAM,CAAC,MAAQ,GAAG,aAAaP,EAAIqC,YAAY,YAAYrC,EAAIoC,WAAW,YAA2B,IAAfpC,EAAIoC,WAAe,MAAQ,GAAG,SAAW,IAAIpB,GAAG,CAAC,MAAQ,SAASM,GAAQ,OAAIA,EAAOnF,KAAK0G,QAAQ,QAAQ7C,EAAI8C,GAAGxB,EAAOyB,QAAQ,OAAO,GAAGzB,EAAOjC,IAAI,CAAC,OAAO,eAAiC,WAAYiC,GAA4B,IAAlBA,EAAO0B,OAAvC,UAAoEhD,EAAIiD,eAAiBjD,EAAIiD,eAAejD,EAAImB,MAAQnB,EAAIkD,YAAYlD,EAAImB,QAAO,YAAc,CAACnB,EAAImD,UAAU,SAAS7B,GAAQA,EAAO8B,qBAAsB,CAAChD,EAAG,QAAQ,CAACG,MAAM,CAAC,IAAMP,EAAIqD,QAAQC,YAAYtD,EAAImB,KAAM,QAASnB,EAAIoC,YAAY,MAAQ,OAAO,eAAe,OAAQpC,EAAW,QAAEI,EAAG,MAAM,CAACE,YAAY,CAAC,SAAW,WAAW,cAAc,MAAM,aAAa,QAAQ,OAAS,OAAO,mBAAmB,QAAQ,gBAAgB,QAAQ,CAACF,EAAG,YAAY,CAACG,MAAM,CAAC,OAAS,IAAIK,YAAYZ,EAAIa,GAAG,CAAC,CAACxB,IAAI,YAAYyB,GAAG,SAASC,GAC/iC,IAAIC,EAAKD,EAAIC,GACb,MAAO,CAACZ,EAAG,MAAMJ,EAAIiB,GAAG,CAACV,MAAM,CAAC,IAAM,EAAQ,QAAuB,OAAS,OAAOS,QAAS,MAAK,EAAM,aAAa,CAACZ,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIS,GAAGT,EAAIuD,eAAe,GAAGvD,EAAIyB,KAAKrB,EAAG,aAAaA,EAAG,eAAe,CAACoD,MAAMxD,EAAIwC,OAAOC,SAAW,SAAW,QAAQnC,YAAY,CAAC,QAAU,MAAM,MAAQ,UAAU,aAAa,OAAOc,SAAS,CAAC,YAAcpB,EAAIS,GAAGT,EAAImB,KAAKnD,SAAUgC,EAAImB,KAAW,OAAEf,EAAG,kBAAkB,CAACoD,MAAMxD,EAAIwC,OAAOC,SAAW,UAAY,SAASnC,YAAY,CAAC,QAAU,OAAOc,SAAS,CAAC,YAAcpB,EAAIS,GAAGT,EAAImB,KAAKsC,OAAOzF,SAASgC,EAAIyB,KAAMzB,EAAImB,KAAY,QAAEf,EAAG,kBAAkB,CAACoD,MAAMxD,EAAIwC,OAAOC,SAAW,UAAY,SAASnC,YAAY,CAAC,QAAU,OAAOc,SAAS,CAAC,YAAcpB,EAAIS,GAAGT,EAAImB,KAAKuC,QAAQ,GAAG1F,SAASgC,EAAIyB,MAAM,IACvuB,EAAkB,G,kCCgDtB,MAEA,8BACEnC,KAAM,SAAR,qBACI,GAAqB,oBAAVP,EAAX,CAIA,IAAJ,OACA,cACqB,UAAX9D,EAAEkB,MAAiC,IAAblB,EAAE+H,QAGT,OAAfW,IACFA,EAAazF,YAAW,WAAhC,mBAGA,aACyB,OAAfyF,IACFhG,aAAagG,GACbA,EAAa,OAGjB,CAAJ,iFACI,CAAJ,yGAnBM,EAAN,uDAuBA,qBACEC,WAAY,GAEZ1B,MAAO,CACLf,KAAM7H,OACN+I,YAAawB,OACbzB,WAAYyB,OACZC,cAAeC,QACfC,YAAaD,QACbd,eAAgB,MAElBpK,KAXF,WAYI,MAAO,CACLoL,aAAa,EACbC,WAAW,IAGfC,SAAU,CACRZ,QADJ,WACA,uBACA,wBADA,IACA,0CACA,eACA,iBACA,UACA,cACA,qBACA,cACA,qBACA,cACA,qBAEA,mBAZA,8BAgBM,MAAO,KAGXa,QArCF,aAsCEC,cAtCF,WAuCIpE,KAAKiE,WAAY,GAEnBI,QAzCF,aA0CEC,QAAS,CACPrB,YADJ,WACA,kEAEA,KACM,GAA6B,IAAzBsB,EAAUjC,WACZkC,EAAM,YAAcD,EAAUrC,aACtC,oBACQsC,EAAM,WAAaD,EAAUrC,YACrC,qBAKQ,YADAlC,KAAKoD,QAAQqB,MAAM,eAAgBF,GAHnCC,EAAM,cAAgBD,EAAUrC,QAMlClC,KAAK0E,QAAQhL,KAAK,CAAxB,sCAEIwJ,UAjBJ,WAmBUlD,KAAKiE,WACTjE,KAAKoD,QAAQqB,MAAM,kBAAmBzE,KAAKkB,OAE7C,cAtBJ,SAsBA,kKAEA,eAFA,SAGA,2BAHA,OAIA,eAJA,iDC/IuV,I,6FCOnVyD,EAAY,eACd,EACA,EACA,GACA,EACA,KACA,KACA,MAIa,EAAAA,EAAiB,QAUhC,IAAkBA,EAAW,CAACC,QAAA,KAAMC,cAAA,OAAcC,WAAA,OAAWC,WAAA,KAASC,OAAA,KAAKC,WAAA,OCwF3E,OACEtB,WAAY,CACVuB,aAAJ,OACIC,cAAJ,GAEElD,MAAO,CACT,YACA,YAEErJ,KATF,WAUI,MAAO,CACL6H,MAAO,GACPsB,SAAU,OACVH,OAAQ,GACRL,UAAU,EACVD,OAAQ,OACR8D,SAAU,CAAC,CAAjB,2CAGEjB,QAnBF,WAoBQnE,KAAKqF,SAASC,SAAS,eAEzBtF,KAAKoF,SAAS1L,KAAK,CAAzB,iDACMsG,KAAKoF,SAAS1L,KAAK,CAAzB,sDACMsG,KAAKoF,SAAS1L,KAAK,CAAzB,gDACMsG,KAAKsB,OAAS,WACdtB,KAAK+B,SAAW,QACtB,kCAEM/B,KAAKoF,SAAS1L,KAAK,CAAzB,sDACMsG,KAAKoF,SAAS1L,KAAK,CAAzB,gDACMsG,KAAK+B,SAAW,QACtB,kCAEM/B,KAAKoF,SAAS1L,KAAK,CAAzB,kDACMsG,KAAKoF,SAAS1L,KAAK,CAAzB,yCACMsG,KAAK+B,SAAW,SAEhB/B,KAAK+B,SAAW,OAGlB,IAAJ,gEACqB,OAAbA,IACF/B,KAAK+B,SAAWA,GAElB/B,KAAKuF,WACLvF,KAAKoD,QAAQoC,IAAI,kBAAmBxF,KAAKuF,WAE3CrB,SAAU,CACR/B,WADJ,WAEM,OAAOnC,KAAKuC,OAAOC,SAAW,IAAM,KAEtCJ,YAJJ,WAKM,OAAyB,IAAlBpC,KAAKmC,aAGhBmC,QAAS,CACP,SADJ,WACA,wKAEA,0CAFA,8CAIIxC,eALJ,WAM4B,UAAlB9B,KAAK+B,SAAsB/B,KAAK+B,SAAW,OACrD,sBACM0D,aAAaC,QAAQ,WAAa1F,KAAK2F,UAAY3F,KAAKqF,SAAUrF,KAAK+B,WAEzEC,cAVJ,SAUA,KACM,IAAKJ,EAAQ,OAAOnB,EACpBmB,EAASA,EAAOgE,cAChB,IAHN,EAGA,KAHA,iBAIA,GAJA,IAIA,2CACA,kCAEA,mDAEA,iDAEA,yDALA,WANA,8BAeM,OAAOC,KCrMyU,I,0KCQlV,EAAY,eACd,EACA/F,EACA2C,GACA,EACA,KACA,WACA,MAIa,SAAiB,QAkBhC,IAAkB,EAAW,CAACqD,UAAA,KAAQC,OAAA,KAAKnB,QAAA,KAAMoB,OAAA,KAAKC,aAAA,KAAWC,gBAAA,KAAcC,QAAA,KAAMC,SAAA,KAAOC,QAAA,KAAMC,YAAA,KAAUC,QAAA,KAAMC,OAAA,KAAKC,UAAA,KAAQC,aAAA,Q,uBCrC/H5L,EAAOD,QAAU,IAA0B,gC,qBCA3CC,EAAOD,QAAU,IAA0B,kC,qBCA3CC,EAAOD,QAAU,IAA0B,kC,uBCA3CC,EAAOD,QAAU,IAA0B,8B,uBCA3C,IAAI8L,EAAM,CACT,YAAa,OACb,YAAa,QAId,SAASC,EAAeC,GACvB,IAAIC,EAAKC,EAAsBF,GAC/B,OAAOtM,EAAoBuM,GAE5B,SAASC,EAAsBF,GAC9B,IAAItM,EAAoBgE,EAAEoI,EAAKE,GAAM,CACpC,IAAI7L,EAAI,IAAI0B,MAAM,uBAAyBmK,EAAM,KAEjD,MADA7L,EAAE2B,KAAO,mBACH3B,EAEP,OAAO2L,EAAIE,GAEZD,EAAeI,KAAO,WACrB,OAAO3N,OAAO2N,KAAKL,IAEpBC,EAAexL,QAAU2L,EACzBjM,EAAOD,QAAU+L,EACjBA,EAAeE,GAAK,Q,uBCvBpBhM,EAAOD,QAAU,IAA0B,mC,mGCAvC,EAAS,WAAa,IAAIkF,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,QAAQ,CAACA,EAAG,UAAUA,EAAG,kBAAkBA,EAAG,SAAS,CAACA,EAAG,cAAc,CAACf,IAAIW,EAAIkH,OAAOC,KAAK5G,MAAM,CAAC,IAAM,OAAO,GAAGH,EAAG,YAAY,CAACG,MAAM,CAAC,iBAAmBP,EAAIoH,oBAAoBhH,EAAG,eAAeA,EAAG,gBAAgBA,EAAG,YAAY,CAACG,MAAM,CAAC,MAAQP,EAAIwC,OAAO6E,UAAU,CAACjH,EAAG,sBAAsB,CAACG,MAAM,CAAC,cAAgB,GAAG,KAAO,SAAS,IAAI,IACxbmC,EAAkB,GCDlB,EAAS,WAAa,IAAI1C,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,sBAAsB,CAACG,MAAM,CAAC,KAAO,GAAG,IAAM,GAAG,QAAU,GAAG,UAAY,IAAImB,MAAM,CAAC3C,MAAOiB,EAAIwC,OAAyB,mBAAEb,SAAS,SAAUC,GAAM5B,EAAIsH,KAAKtH,EAAIwC,OAAQ,qBAAsBZ,IAAME,WAAW,8BAA8B,CAAC1B,EAAG,SAAS,CAACJ,EAAIkB,GAAIlB,EAAS,OAAE,SAASmB,GAAM,OAAOf,EAAG,cAAc,CAACf,IAAI8B,EAAKoG,MAAMvG,GAAG,CAAC,MAAQ,SAASM,GAAQ,OAAOtB,EAAI2E,QAAQhL,KAAKwH,EAAKgG,SAAS,CAAC/G,EAAG,qBAAqB,CAACA,EAAG,SAAS,CAACJ,EAAIQ,GAAGR,EAAIS,GAAGU,EAAKqG,UAAU,GAAGpH,EAAG,sBAAsB,CAACA,EAAG,oBAAoB,CAACJ,EAAIQ,GAAGR,EAAIS,GAAGU,EAAKoG,WAAW,IAAI,MAAKnH,EAAG,QAAQ,CAACG,MAAM,CAAC,KAAO,IAAIS,GAAG,CAAC,MAAQ,SAASM,GAAQtB,EAAIwC,OAAOiF,oBAAoBzH,EAAIwC,OAAOiF,wBAAwB,IAAI,IACzwB,EAAkB,GCkBtB,iBACEvF,MAAO,GACPrJ,KAFF,WAGI,MAAO,CACL6H,MAAO,CACb,CAAQ,MAAR,gBAAQ,KAAR,OAAQ,KAAR,KACA,CAAQ,MAAR,mBAAQ,KAAR,SAAQ,KAAR,YACA,CAAQ,MAAR,kBAAQ,KAAR,QAAQ,KAAR,WACA,CAAQ,MAAR,kBAAQ,KAAR,aAAQ,KAAR,WACA,CAAQ,MAAR,qBAAQ,KAAR,gBAAQ,KAAR,cACA,CAAQ,MAAR,kBAAQ,KAAR,QAAQ,KAAR,WACA,CAAQ,MAAR,kBAAQ,KAAR,SAAQ,KAAR,WACA,CAAQ,MAAR,oBAAQ,KAAR,WAAQ,KAAR,cAIE4D,QAhBF,aAiBEC,QAAS,KCpC6U,I,qHCOpVK,EAAY,eACd,EACA,EACA,GACA,EACA,KACA,KACA,MAIa,EAAAA,EAAiB,QAYhC,IAAkBA,EAAW,CAACoB,OAAA,KAAKI,QAAA,KAAME,QAAA,KAAMC,YAAA,KAAUmB,kBAAA,KAAgBC,iBAAA,OAAiBC,eAAA,OAAeC,oBAAA,OC9BzG,IAAI,EAAS,WAAa,IAAI7H,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,YAAY,CAACG,MAAM,CAAC,IAAM,GAAG,KAAO,GAAG,MAAQ,GAAG,KAAO,GAAG,MAAQP,EAAI8H,QAAQ,CAAC1H,EAAG,WAAW,CAAGJ,EAAIwC,OAAOuF,kBAAiN/H,EAAIyB,KAAlMrB,EAAG,MAAM,CAACkC,YAAY,SAAShC,YAAY,CAAC,SAAW,QAAQ,MAAQ,OAAO,aAAa,SAAS,iBAAiB,SAAS,aAAa,SAAS,CAACN,EAAIQ,GAAGR,EAAIS,GAAGT,EAAIwC,OAAOwF,gBAAyB5H,EAAG,QAAQ,CAACE,YAAY,CAAC,cAAc,SAASC,MAAM,CAAC,KAAO,IAAIS,GAAG,CAAC,MAAQ,SAASM,GAAQtB,EAAIwC,OAAOiF,oBAAoBzH,EAAIwC,OAAOiF,sBAAsB,CAACrH,EAAG,SAAS,CAACJ,EAAIQ,GAAG,WAAW,GAAGJ,EAAG,QAAQ,CAACG,MAAM,CAAC,KAAO,IAAIS,GAAG,CAAC,MAAQ,SAASM,GAAQ,OAAOtB,EAAI2E,QAAQsD,IAAI,MAAM,CAAC7H,EAAG,SAAS,CAACJ,EAAIQ,GAAG,iBAAiB,GAAGJ,EAAG,YAAaJ,EAAIwC,OAAwB,kBAAEpC,EAAG,QAAQ,CAACE,YAAY,CAAC,eAAe,SAASC,MAAM,CAAC,KAAO,IAAIS,GAAG,CAAC,MAAQ,SAASM,GAAQ,OAAOtB,EAAIqD,QAAQqB,MAAM,kBAAmB1E,EAAIwC,OAAO0F,sBAAsB,CAAC9H,EAAG,SAAS,CAACJ,EAAIQ,GAAG,gBAAgB,GAAGR,EAAIyB,MAAM,IAAI,IAC1/B,EAAkB,GCoBtB,iBACES,MAAO,GACPrJ,KAFF,WAGI,MAAO,IAGTsL,SAAU,CACR2D,MADJ,WAEM,OAAI7H,KAAKuC,OAAOuF,kBACP,cACf,UAGEzD,QAbF,aAcEC,QAAS,KCnCqU,I,oCCO5U,EAAY,eACd,EACA,EACA,GACA,EACA,KACA,KACA,MAIa,IAAiB,QAShC,IAAkB,EAAW,CAACwB,UAAA,KAAQC,OAAA,KAAKI,QAAA,KAAM+B,UAAA,KAAQzB,UAAA,OC3BzD,IAAI,EAAS,WAAa,IAAI1G,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,WAAW,CAACG,MAAM,CAAC,YAAY,SAASS,GAAG,CAAC,MAAQ,SAASM,GAAQ,OAAOtB,EAAI0E,MAAM,QAASpD,KAAUI,MAAM,CAAC3C,MAAOiB,EAAW,QAAE2B,SAAS,SAAUC,GAAM5B,EAAIoI,QAAQxG,GAAKE,WAAW,YAAY,CAAC1B,EAAG,SAAS,CAA2B,IAAzBJ,EAAIqI,UAAUhP,OAAc+G,EAAG,SAAS,CAACA,EAAG,cAAc,CAACkC,YAAY,SAAS,CAACtC,EAAIQ,GAAGR,EAAIS,GAAGT,EAAIsI,WAAYtI,EAAa,UAAEI,EAAG,cAAc,CAACJ,EAAIQ,GAAGR,EAAIS,GAAGT,EAAIuI,cAAcvI,EAAIyB,KAAKzB,EAAIkB,GAAIlB,EAAa,WAAE,SAASmB,GAAM,OAAOf,EAAG,MAAM,CAACf,IAAI8B,EAAKqH,OAAO,CAACpI,EAAG,cAAc,CAACY,GAAG,CAAC,MAAQ,SAASM,GAAQ,OAAOtB,EAAIyI,YAAYtH,EAAKuH,WAAW,CAACtI,EAAG,qBAAqB,CAACA,EAAG,SAAS,CAACJ,EAAIQ,GAAGR,EAAIS,GAAGU,EAAKqG,UAAU,GAAGpH,EAAG,sBAAsB,CAACA,EAAG,oBAAoB,CAACJ,EAAIQ,GAAGR,EAAIS,GAAGT,EAAIW,GAAGQ,EAAKqH,YAAY,IAAI,GAAGpI,EAAG,cAAc,OAAM,GAAGJ,EAAIyB,KAAMzB,EAAIqI,UAAUhP,OAAS,EAAG+G,EAAG,SAAS,CAACA,EAAG,cAAc,CAACkC,YAAY,SAAS,CAACtC,EAAIQ,GAAGR,EAAIS,GAAGT,EAAIsI,WAAWtI,EAAIkB,GAAIlB,EAAa,WAAE,SAASmB,EAAKwH,GAAO,OAAOvI,EAAG,eAAe,CAACf,IAAI8B,EAAKgB,QAAQ5B,MAAM,CAAC,KAAOY,EAAK,WAAanB,EAAIqI,UAAUhP,OAAO,MAAQsP,EAAM,YAAa,EAAM,cAAe,EAAK,eAAgB,EAAM,aAAc,EAAK,UAAW,EAAK,eAAiB3I,EAAI4I,qBAAoB,GAAG5I,EAAIyB,MAAM,IAAI,IACpvC,EAAkB,G,gFC2CtB,iBACEmC,WACF,CACIuB,aAAJ,QAEEjD,MACF,GACE2G,MACF,GACEhQ,KATF,WAUI,MAAO,CACLuP,SAAS,EACTU,UAAW,GACXR,OAAQ,GACRC,UAAW,GACXQ,QAAS,KACTC,YAAa,KACbC,iBAAkB,GAClBZ,UAAW,KAGf/D,QArBF,aAsBEF,QAtBF,WAuBInE,KAAKoD,QAAQoC,IAAI,kBAAmBxF,KAAKiJ,iBACzCjJ,KAAKoD,QAAQoC,IAAI,eAAgBxF,KAAKkJ,eAExChF,SAAU,GAEVI,QAAS,CACP2E,gBADJ,SACA,GAGM,GADAjJ,KAAKoI,UAAY,GACZ7D,EAAL,CACAvE,KAAK8I,QAAUvE,EACf,IAAN,gCACA,KAEUA,IAAc4E,GAChBN,EAAUnP,KAAK,CACb6O,MAAO,YACPE,OAAQ,OACRlB,KAAM,SAI0B,IAAhChD,EAAU6E,WAAWhQ,QACvByP,EAAUnP,KAAK,CACb6O,MAAO,cACPE,OAAQ,iBACRlB,KAAM,oBAINhD,EAAU6E,WAAWhQ,OAAS,GAChCyP,EAAUnP,KAAK,CACb6O,MAAO,iBACPE,OAAQ,iBACRlB,KAAM,aAIN4B,GAAoD,IAAhCA,EAAiB7G,aACvCtC,KAAK+I,YAAcI,EACU,IAAzB5E,EAAUjC,YAAoB6G,EAAiBE,aACjDR,EAAUnP,KAAK,CACb6O,MAAO,kBACPE,OAAQ,kBACRlB,KAAM,2BAKiB,IAAzBhD,EAAUjC,YACZuG,EAAUnP,KAAK,CACb6O,MAAO,eACPE,OAAQ,eACRlB,KAAM,uBAGVvH,KAAK6I,UAAYA,EACjB7I,KAAKqI,OAAS9D,EAAUxG,KACxBiC,KAAKsI,UAAY,GACjBtI,KAAKmI,SAAU,IAEjBe,aAxDJ,SAwDA,GAIM,GAFAlJ,KAAKoI,UAAY,GACjBpI,KAAK8I,QAAUvE,EACVA,EAAL,CACA,IAAN,GACA,CACQ,MAAR,WACQ,OAAR,OACQ,KAAR,uBAEA,CACQ,MAAR,YACQ,OAAR,OACQ,KAAR,mBAEA,CACQ,MAAR,YACQ,OAAR,MACQ,KAAR,iBAGMvE,KAAK6I,UAAYA,EACjB7I,KAAKqI,OAAS9D,EAAUxG,KACxBiC,KAAKsI,UAAY,GACjBtI,KAAKmI,SAAU,IAEjB,kBAnFJ,WAmFA,oLAEA,KAFA,iBAGA,wBAHA,IAGA,qCACA,mBAJA,8CAMA,uCANA,OAMA,EANA,OAOA,KAPA,iBAQA,SARA,6DAQA,EARA,SAUA,eACA,iDAXA,kCAaA,gBAbA,8DAaA,EAbA,SAcA,uBAdA,wBAeA,UAfA,oTAqBA,cArBA,iFAuBIK,YA1GJ,SA0GA,GACM,GAAY,SAARc,EAAgB,CAElB,IAAR,KACwC,IAA5BtJ,KAAK8I,QAAQxG,aAAkB+C,EAAW,WACd,IAA5BrF,KAAK8I,QAAQxG,aAAkB+C,EAAW,UACd,IAA5BrF,KAAK8I,QAAQxG,aAAkB+C,EAAW,UACd,IAA5BrF,KAAK8I,QAAQxG,aAAkB+C,EAAW,aACd,IAA5BrF,KAAK8I,QAAQxG,aAAkB+C,EAAW,UAC9CrF,KAAK0E,QAAQhL,KAAK,CAChBwN,KAAM,IAAM7B,EAAW,IAAMrF,KAAK8I,QAAQ5G,QAC1CqH,MAAO,CAAjB,kCAEQvJ,KAAKmI,SAAU,MACvB,mBAEQ,OAAOnI,KAAKkJ,aAAalJ,KAAK8I,SACtC,sBAEQ,OAAO9I,KAAKwJ,oBACpB,uBAEQxJ,KAAKyJ,mBACb,aACA,yBACA,mBAEQzJ,KAAKmI,SAAU,GACvB,sBAEQnI,KAAKoD,QAAQsG,cAAc1J,KAAK8I,SAChC9I,KAAKmI,SAAU,IAGfnI,KAAKoD,QAAQuG,SAAS3J,KAAK8I,QAASQ,GACpCtJ,KAAKmI,SAAU,KAGnBQ,cAhJJ,SAgJA,cAEA,mCACM3I,KAAKoD,QAAQwG,QAAQvE,EAAUrF,KAAK8I,SAC1C,kBACQ,EAAR,eAGIW,mBAxJJ,SAwJA,gBAEA,2BACMzJ,KAAKoD,QAAQyG,WAAWxE,EAAUyE,GACxC,kBAEQ,EAAR,wCCtOqV,I,4DCOjV,EAAY,eACd,EACA,EACA,GACA,EACA,KACA,KACA,MAIa,IAAiB,QAchC,IAAkB,EAAW,CAAClF,QAAA,KAAMmF,UAAA,KAAQhF,WAAA,KAASoB,QAAA,KAAME,QAAA,KAAMC,YAAA,KAAU0D,kBAAA,KAAgBtC,iBAAA,OAAiBC,eAAA,OAAesC,aAAA,OChC3H,IAAI,EAAS,WAAa,IAAIlK,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,WAAW,CAACE,YAAY,CAAC,mBAAmB,SAASC,MAAM,CAAC,IAAM,GAAG,MAAQ,GAAG,QAAU,GAAG,MAAQ,GAAG,UAAY,OAAO,CAAGP,EAAIwC,OAAOC,SAEghFzC,EAAIyB,KAF1gFrB,EAAG,SAAS,CAACE,YAAY,CAAC,aAAa,OAAOC,MAAM,CAAC,MAAQ,GAAG,KAAO,GAAG,MAAQ,GAAG,UAAY,GAAG,KAAO,GAAG,MAAQ,OAAO,MAAQ,YAAY,CAACH,EAAG,cAAc,CAACG,MAAM,CAAC,WAAW,KAAK,CAAEP,EAAgB,aAAEI,EAAG,qBAAqB,CAACG,MAAM,CAAC,KAAO,KAAK,CAACH,EAAG,MAAM,CAACE,YAAY,CAAC,OAAS,6BAA6BC,MAAM,CAAC,IAAMP,EAAIqD,QAAQC,YAAYtD,EAAImK,cAAc,WAAW,EAAQ,aAA2B/J,EAAG,qBAAqB,CAACA,EAAG,SAAS,CAACJ,EAAIQ,GAAG,cAAc,GAAGJ,EAAG,sBAAsB,CAAEJ,EAAgB,aAAEI,EAAG,oBAAoB,CAACJ,EAAIQ,GAAG,IAAIR,EAAIS,GAAGT,EAAImK,aAAanM,SAAUgC,EAAIqD,QAAoB,aAAEjD,EAAG,oBAAoB,CAACJ,EAAIQ,GAAG,IAAIR,EAAIS,GAAGT,EAAIqD,QAAQ+G,aAAapM,SAASgC,EAAIyB,KAAMzB,EAAgB,aAAEI,EAAG,uBAAuB,CAACE,YAAY,CAAC,MAAQ,YAAYN,EAAIkB,GAAIlB,EAAImK,aAAoB,SAAE,SAAS1G,EAAO4G,GAAa,OAAOjK,EAAG,OAAO,CAACf,IAAIgL,GAAa,CAACjK,EAAG,IAAI,CAACY,GAAG,CAAC,MAAQ,CAAC,SAASM,GAAQ,OAAOtB,EAAIsK,YAAY7G,IAAS,SAASnC,GAAQA,EAAOiJ,sBAAuB,CAACvK,EAAIQ,GAAGR,EAAIS,GAAGgD,EAAOzF,SAAUqM,EAAc,EAAIrK,EAAImK,aAAazG,QAAQrK,OAAQ+G,EAAG,QAAQ,CAACf,IAAIgL,GAAa,CAACrK,EAAIQ,GAAG,SAASR,EAAIyB,UAAS,GAAGzB,EAAIyB,MAAM,GAAIzB,EAAiB,cAAEI,EAAG,qBAAqB,CAACA,EAAG,SAAS,CAACG,MAAM,CAAC,0BAAyB,EAAM,cAAc,IAAI,WAAW,GAAG,IAAM,IAAIiK,SAAS,CAAC,MAAQ,SAASlJ,GAAQA,EAAO8B,mBAAoBxC,YAAYZ,EAAIa,GAAG,CAAC,CAACxB,IAAI,YAAYyB,GAAG,SAASC,GACjnD,IAAIC,EAAKD,EAAIC,GACb,MAAO,CAACZ,EAAG,QAAQJ,EAAIiB,GAAG,CAACV,MAAM,CAAC,KAAO,KAAKS,GAAI,CAAEhB,EAAIyK,cAAcC,QAAU,EAAGtK,EAAG,QAAQ,CAACG,MAAM,CAAC,QAAU,GAAG,IAAM,EAAQ,QAAuB,OAAS,QAAQP,EAAIyB,KAAMzB,EAAIyK,cAAcC,SAAW,EAAGtK,EAAG,QAAQ,CAACE,YAAY,CAAC,OAAS,gBAAgBC,MAAM,CAAC,QAAU,GAAG,IAAMP,EAAIyK,cAAcE,aAAe,UAAQ,KAAe3K,EAAIyK,cAAcE,aAAe,QAAU,GAAG,OAAS,QAAQ3K,EAAIyB,MAAM,OAAO,MAAK,EAAM,YAAY,CAAEzB,EAAiB,cAAEI,EAAG,SAAS,CAACA,EAAG,cAAc,CAACkC,YAAY,SAAS,CAACtC,EAAIQ,GAAGR,EAAIS,GAAGT,EAAIW,GAAG,sBAAsBP,EAAG,cAAc,CAACG,MAAM,CAAC,KAAO,GAAG,MAAQ,KAAK,CAACH,EAAG,mBAAmB,CAACA,EAAG,QAAQ,CAACG,MAAM,CAAC,YAAY,KAAK,QAAU,GAAG,IAAMP,EAAIyK,cAAcG,SAAW,UAAQ,KAAe5K,EAAIyK,cAAcG,SAAW,QAAU,OAAO,GAAGxK,EAAG,sBAAsB,CAACA,EAAG,oBAAoB,CAACJ,EAAIQ,GAAGR,EAAIS,GAAGT,EAAIyK,cAAcG,cAAc,IAAI,GAAGxK,EAAG,aAAaA,EAAG,cAAc,CAACG,MAAM,CAAC,KAAO,GAAG,MAAQ,KAAK,CAACH,EAAG,mBAAmB,CAACA,EAAG,QAAQ,CAACE,YAAY,CAAC,OAAS,gBAAgBC,MAAM,CAAC,YAAY,KAAK,QAAU,GAAG,IAAMP,EAAIyK,cAAcE,aAAe,UAAQ,KAAe3K,EAAIyK,cAAcE,aAAe,QAAU,OAAO,GAAGvK,EAAG,sBAAsB,CAACA,EAAG,oBAAoB,CAACJ,EAAIQ,GAAGR,EAAIS,GAAGT,EAAIyK,cAAcI,YAAY,KAAM,UAAU7K,EAAIS,GAAGT,EAAIyK,cAAcK,WAAW,aAAa,IAAI,GAAG1K,EAAG,aAAcJ,EAAI+K,mBAAoC,kBAAE3K,EAAG,MAAM,CAACA,EAAG,cAAc,CAACG,MAAM,CAAC,KAAO,GAAG,MAAQ,KAAK,CAACH,EAAG,mBAAmB,CAACA,EAAG,QAAQ,CAACG,MAAM,CAAC,YAAY,KAAK,QAAU,GAAG,IAAM,EAAQ,YAA+B,GAAGH,EAAG,sBAAsB,CAACA,EAAG,oBAAoB,CAACJ,EAAIQ,GAAGR,EAAIS,GAAGT,EAAIW,GAAG,0BAA0B,IAAI,GAAGP,EAAG,cAAc,GAAGJ,EAAIyB,KAAMzB,EAA+B,4BAAEI,EAAG,MAAM,CAACA,EAAG,cAAc,CAACG,MAAM,CAAC,KAAO,GAAG,MAAQ,KAAK,CAACH,EAAG,mBAAmB,CAACA,EAAG,SAAS,CAACE,YAAY,CAAC,cAAc,QAAQC,MAAM,CAAC,MAAQ,UAAU,CAACP,EAAIQ,GAAG,gBAAgB,GAAGJ,EAAG,sBAAsB,CAACA,EAAG,oBAAoB,CAACE,YAAY,CAAC,cAAc,SAAS,CAACN,EAAIQ,GAAGR,EAAIS,GAAGT,EAAIgL,iCAAiC,IAAI,GAAG5K,EAAG,cAAc,GAAGJ,EAAIyB,MAAM,GAAGzB,EAAIyB,MAAM,IAAI,GAAGzB,EAAIyB,MAAM,GAAGrB,EAAG,MAAM,CAACkC,YAAY,SAAShC,YAAY,CAAC,OAAS,OAAO,MAAQ,OAAO,MAAQ,kBAAkB,aAAa,QAAQ,mBAAmB,WAAWC,MAAM,CAAC,MAAQ,WAAW,CAAEP,EAAgB,aAAEI,EAAG,MAAM,CAACE,YAAY,CAAC,OAAS,OAAO,cAAc,OAAO,eAAe,OAAO,aAAa,QAAQ,CAACF,EAAG,OAAO,CAACkC,YAAY,QAAQ,CAACtC,EAAIQ,GAAG,IAAIR,EAAIS,GAAGT,EAAIiL,kBAAkB,OAAO7K,EAAG,OAAO,CAACkC,YAAY,SAAS,CAACtC,EAAIQ,GAAG,IAAIR,EAAIS,GAAGT,EAAIkL,oBAAoB,SAASlL,EAAIyB,OAAQzB,EAAgB,aAAEI,EAAG,oBAAoB,CAAC+K,MAAO,2CAA6CnL,EAAIoL,iBAAmB,MAAO7K,MAAM,CAAC,MAAQ,GAAG,MAAQ,GAAG,MAAQP,EAAIqL,YAAYrL,EAAIyB,MAAM,GAAYrB,EAAG,cAAc,CAACE,YAAY,CAAC,OAAS,OAAO,gBAAgB,MAAM,aAAa,OAAO,mBAAmB,SAASC,MAAM,CAAC,KAAO,GAAG,MAAQ,KAAK,CAAEP,EAAIqD,QAAoB,aAAEjD,EAAG,qBAAqB,CAACE,YAAY,CAAC,aAAa,SAAS,CAACF,EAAG,QAAQ,CAACG,MAAM,CAAC,MAAQ,GAAG,KAAO,IAAIS,GAAG,CAAC,MAAQ,SAASM,GAAQ,OAAOtB,EAAIsL,cAAc,eAAe,CAAClL,EAAG,SAAS,CAACJ,EAAIQ,GAAG,oBAAoB,IAAI,GAAGR,EAAIyB,KAAMzB,EAAIqD,QAAoB,aAAEjD,EAAG,qBAAqB,CAACE,YAAY,CAAC,cAAc,QAAQ,aAAa,SAAS,CAACF,EAAG,QAAQ,CAACG,MAAM,CAAC,KAAO,GAAG,UAAU,IAAIS,GAAG,CAAC,MAAQ,SAASM,GAAQ,OAAOtB,EAAIsL,cAAc,iBAAiB,CAAClL,EAAG,SAAS,CAACG,MAAM,CAAC,KAAO,OAAO,CAACP,EAAIQ,GAAGR,EAAIS,GAAqC,WAAlCT,EAAIqD,QAAQ+G,aAAamB,MAAqB,QAAU,kBAAkB,IAAI,GAAGvL,EAAIyB,KAAMzB,EAAIqD,QAAoB,aAAEjD,EAAG,qBAAqB,CAACE,YAAY,CAAC,aAAa,SAAS,CAACF,EAAG,QAAQ,CAACG,MAAM,CAAC,KAAO,GAAG,MAAQ,IAAIS,GAAG,CAAC,MAAQ,SAASM,GAAQ,OAAOtB,EAAIsL,cAAc,WAAW,CAAClL,EAAG,SAAS,CAACJ,EAAIQ,GAAG,gBAAgB,IAAI,GAAGR,EAAIyB,KAAKrB,EAAG,uBAAwBJ,EAAIqD,QAAoB,aAAEjD,EAAG,qBAAqB,CAACE,YAAY,CAAC,QAAU,SAAS,CAACF,EAAG,QAAQ,CAACG,MAAM,CAAC,MAAQ,GAAG,KAAO,GAAG,KAAO,IAAIS,GAAG,CAAC,MAAQ,SAASM,GAAQ,OAAOtB,EAAI2E,QAAQhL,KAAK,oBAAoB,CAACyG,EAAG,SAAS,CAACkC,YAAY,eAAe/B,MAAM,CAAC,KAAO,KAAK,CAACH,EAAG,SAAS,CAACJ,EAAIQ,GAAG,iBAAiBJ,EAAG,OAAO,CAACkC,YAAY,WAAW,CAACtC,EAAIQ,GAAGR,EAAIS,GAAGT,EAAIW,GAAG,cAAc,IAAI,IAAI,GAAGX,EAAIyB,KAAMzB,EAAIqD,QAAQ+G,eAAiBpK,EAAIwC,OAAOC,SAAUrC,EAAG,qBAAqB,CAACE,YAAY,CAAC,QAAU,SAAS,CAACF,EAAG,SAAS,CAACG,MAAM,CAAC,0BAAyB,EAAM,cAAc,IAAI,WAAW,GAAG,IAAM,IAAIiK,SAAS,CAAC,MAAQ,SAASlJ,GAAQA,EAAO8B,mBAAoBxC,YAAYZ,EAAIa,GAAG,CAAC,CAACxB,IAAI,YAAYyB,GAAG,SAASC,GAC39I,IAAIC,EAAKD,EAAIC,GACb,MAAO,CAACZ,EAAG,QAAQJ,EAAIiB,GAAG,CAACV,MAAM,CAAC,MAAQ,GAAG,KAAO,KAAKS,GAAI,CAACZ,EAAG,SAAS,CAACkC,YAAY,eAAe/B,MAAM,CAAC,KAAO,KAAK,CAACH,EAAG,SAAS,CAACJ,EAAIQ,GAAG,eAAeJ,EAAG,OAAO,CAACkC,YAAY,WAAW,CAACtC,EAAIQ,GAAGR,EAAIS,GAAG+K,KAAKC,MAAMzL,EAAIqD,QAAQ+G,aAAasB,mBAAmB,IAAI,OAAO,MAAK,EAAM,aAAa,CAACtL,EAAG,gBAAgB,CAACG,MAAM,CAAC,QAAUP,EAAIqD,QAAQsI,QAAQ,UAAY3L,EAAIqD,QAAQ+G,aAAawB,cAAc,IAAI,GAAG5L,EAAIyB,KAAKrB,EAAG,qBAAqB,CAACE,YAAY,CAAC,QAAU,OAAO,eAAe,SAAS,CAACF,EAAG,QAAQ,CAACG,MAAM,CAAC,MAAQ,GAAG,KAAO,GAAG,KAAO,IAAIS,GAAG,CAAC,MAAQ,SAASM,GAAQ,OAAOtB,EAAIqD,QAAQqB,MAAM,sBAAsB,CAACtE,EAAG,SAAS,CAACkC,YAAY,eAAe/B,MAAM,CAAC,KAAO,KAAK,CAACH,EAAG,SAAS,CAACJ,EAAIQ,GAAG,aAAcR,EAAIqD,QAAoB,aAAEjD,EAAG,OAAO,CAACkC,YAAY,WAAW,CAACtC,EAAIQ,GAAGR,EAAIS,GAAGT,EAAIqD,QAAQ+G,aAAapM,SAASoC,EAAG,OAAO,CAACkC,YAAY,aAAa,IAAI,IAAI,IAAI,GAAItC,EAAIwC,OAAyB,mBAAEpC,EAAG,SAAS,CAACE,YAAY,CAAC,OAAS,QAAQC,MAAM,CAAC,MAAQ,GAAG,KAAO,GAAG,MAAQ,GAAG,UAAY,GAAG,KAAO,GAAG,MAAQ,OAAO,MAAQ,WAAWP,EAAIyB,MAAM,IACtiC,EAAkB,G,gECLlB,EAAS,WAAa,IAAIzB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,SAAS,CAACA,EAAG,SAAS,CAACA,EAAG,cAAc,CAACE,YAAY,CAAC,OAAS,OAAO,iBAAiB,MAAM,CAACF,EAAG,qBAAqB,CAACE,YAAY,CAAC,cAAc,SAASC,MAAM,CAAC,KAAO,KAAK,CAACH,EAAG,SAAS,CAACG,MAAM,CAAC,MAAQ,KAAK,CAACP,EAAIQ,GAAGR,EAAIS,GAAGT,EAAI2L,QAAQ3L,EAAI4L,WAAWC,SAAW,gBAAkB,eAAe,GAAGzL,EAAG,sBAAsB,CAACE,YAAY,CAAC,cAAc,UAAU,CAACF,EAAG,oBAAoB,CAACJ,EAAIQ,GAAGR,EAAIS,GAAGT,EAAI2L,QAAQ3L,EAAI4L,WAAW5N,SAASoC,EAAG,uBAAuB,CAACJ,EAAIQ,GAAGR,EAAIS,GAAGT,EAAIW,GAAG,SAAWX,EAAI2L,QAAQ3L,EAAI4L,WAAWL,YAAY,IAAI,GAAGnL,EAAG,aAAaJ,EAAIkB,GAAIlB,EAAmB,iBAAE,SAAS8L,GAAU,OAAO1L,EAAG,MAAM,CAACf,IAAIyM,GAAU,CAAC1L,EAAG,MAAM,CAACkC,YAAY,SAAS6I,MAAQnL,EAAI2L,QAAQG,GAAUC,QAEhxB,yBADA,0BAC2B,CAAC3L,EAAG,QAAQ,CAACE,YAAY,CAAC,cAAc,OAAO6K,MAAQnL,EAAI2L,QAAQG,GAAUC,QAEtG,yBADA,yBAC0BxL,MAAM,CAAC,KAAO,IAAIS,GAAG,CAAC,MAAQ,SAASM,GAAQ,OAAOtB,EAAIgM,kBAAkBF,MAAa,CAAC1L,EAAG,SAAS,CAACJ,EAAIQ,GAAG,yBAAyB,GAAGJ,EAAG,OAAO,CAACE,YAAY,CAAC,cAAc,SAAS,CAACN,EAAIQ,GAAGR,EAAIS,GAAGT,EAAI2L,QAAQG,GAAU9N,SAASoC,EAAG,MAAM,CAACE,YAAY,CAAC,aAAa,OAAO,cAAc,OAAO,eAAe,OAAO,OAAS,SAAS,CAACF,EAAG,WAAW,CAACG,MAAM,CAAC,KAAO,GAAG,UAAYP,EAAI2L,QAAQG,GAAUC,QAAQ,MAAQP,KAAKC,MAAMzL,EAAI2L,QAAQG,GAAUJ,cAAc,eAAe,cAAc,cAAc,aAAa1K,GAAG,CAAC,IAAM,SAASM,GAAQ,OAAOtB,EAAIiM,gBAAgBH,EAAUxK,IAAS,eAAe,SAASA,GAAQ,OAAOtB,EAAIiM,gBAAgBH,EAAU,OAAO,gBAAgB,SAASxK,GAAQ,OAAOtB,EAAIiM,gBAAgBH,EAAU,aAAa,IAAI,GAAG1L,EAAG,cAAc,OAAM,IAAI,IACvzB,EAAkB,G,YC0DtB,iBACE8B,MAAO,CAAC,QAAS,UAAW,aAC5BrJ,KAFF,WAGI,MAAO,IAETsL,SAAU,CACR+H,gBADJ,WAEM,IAAIC,EAAS,CAAClM,KAAK2L,WAEnB,OADAO,EAAOxS,KAAb,mEACawS,IAGX7H,QAZF,aAaEC,QAAS,CACP0H,gBAAiB,SAArB,KACMhM,KAAK0L,QAAQS,GAAUV,aAAeW,EACpB,OAAdA,EACFpM,KAAKoD,QAAQiI,cAAc,YAAa,KAAMc,GACtD,WACQnM,KAAKoD,QAAQiI,cAAc,cAAe,KAAMc,GAEhDnM,KAAKoD,QAAQiI,cAAc,aAAce,EAAWD,IAGxDJ,kBAAmB,SAAvB,GACM/L,KAAKoD,QAAQiI,cAAc,eAAgB,KAAMc,OCxFgS,I,YCOnV,GAAY,eACd,EACA,EACA,GACA,EACA,KACA,KACA,MAIa,MAAiB,QAehC,IAAkB,GAAW,CAACpG,OAAA,KAAKnB,QAAA,KAAMG,WAAA,KAASoB,QAAA,KAAME,QAAA,KAAMC,YAAA,KAAU0D,kBAAA,KAAgBtC,iBAAA,OAAiB2E,kBAAA,OAAkB1E,eAAA,OAAe2E,UAAA,OC0O1I,sBACE3I,WAAY,CACV4I,cAAJ,IAEEtK,MAAO,GACPrJ,KALF,WAMI,MAAO,CACLkS,mBAAoB,KAGxBlC,MAAO,GACP1E,SAAU,CACRgG,aADJ,WAEM,OAAIlK,KAAK8K,mBACA9K,KAAK8K,mBAAmB0B,SAExB,MAGXpB,SARJ,WASM,IAAKpL,KAAKkK,aAAc,OAAO,EAC/B,IAAIuC,EAAYzM,KAAKkK,aAAawC,SAC9BC,EAAU3M,KAAK8K,mBAAmB8B,cAClCC,EAAaF,EAAUF,EAAY,IACvC,OAAOI,GAET7B,iBAfJ,WAgBM,IAAKhL,KAAKkK,aAAc,MAAO,OAC/B,IAAIyC,EAAU3M,KAAK8K,mBAAmB8B,cACtC,OAAOD,EAAQG,WAAWC,kBAE5B9B,mBApBJ,WAqBM,IAAKjL,KAAKkK,aAAc,MAAO,OAC/B,IAAIuC,EAAYzM,KAAKkK,aAAawC,SAClC,OAAOD,EAAUK,WAAWC,kBAE9B5B,iBAzBJ,WA0BM,OAAOxL,OAAOqN,WAAa,KAE7BxC,cA5BJ,WA6BM,OAAKxK,KAAK8K,mBAAmB0B,UAAaxM,KAAK8K,mBAAmB0B,UAAaxM,KAAK8K,mBAAmB0B,SAASS,cAActC,UAAa3K,KAAK8K,mBAAmB0B,SAASS,cAAcvC,aACnL1K,KAAK8K,mBAAmB0B,SAASS,cADuK,IAGjNlC,4BAhCJ,WAiCM,IAAK/K,KAAKwK,gBAAkBxK,KAAKwK,cAAc0C,YAAa,MAAO,GACnE,GAAIlN,KAAKwK,cAAc0C,YAAY5H,SAAS,QAAS,CACnD,IAAI6H,EAAK,0BACLC,EAAWpN,KAAKwK,cAAc0C,YAAYG,QAAQF,EAAI,MAC1D,OAAOC,EAAW,MAEpB,MAAO,KAGXjJ,QArDF,WAsDInE,KAAKoD,QAAQoC,IAAI,gBAAiBxF,KAAKsN,iBACvCtN,KAAKoD,QAAQoC,IAAI,sBAAuBxF,KAAKuN,kBAE/CjJ,QAAS,CACP+G,cADJ,SACA,qEACMrL,KAAKoD,QAAQiI,cAAc/B,EAAKkE,EAASxN,KAAKoD,QAAQqK,iBAExDpD,YAJJ,SAIA,GAEM,IAAI7F,EAAM,YAActD,EAAKgB,QAC7BlC,KAAK0E,QAAQhL,KAAK,CAAxB,sCAEI4T,gBATJ,SASA,GACM,GAAI1U,EAAK+S,YAAc3L,KAAKoD,QAAQqK,eAClC,IAAK,IAAb,mFACU,EAAV,wCAII,gBAhBJ,WAgBA,kKACA,uBADA,uBAEA,+CAFA,SAGA,qBAHA,OAGA,qBAHA,wDCpVmV,M,0FCQ/U,GAAY,eACd,GACA,EACA,GACA,EACA,KACA,WACA,MAIa,MAAiB,QAsBhC,IAAkB,GAAW,CAAC1H,OAAA,KAAKnB,QAAA,KAAMG,WAAA,KAAS2I,SAAA,KAAMC,WAAA,KAAQxH,QAAA,KAAMnB,QAAA,KAAKqB,QAAA,KAAMC,YAAA,KAAUmB,kBAAA,KAAgBuC,kBAAA,KAAgBtC,iBAAA,OAAiBkG,iBAAA,KAAcvB,kBAAA,OAAkB1E,eAAA,OAAepB,SAAA,KAAMsH,mBAAA,KAAgB5D,aAAA,OCzCjN,IAAI,GAAS,WAAa,IAAIlK,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,sBAAsB,CAACG,MAAM,CAAC,MAAQ,GAAG,IAAM,GAAG,QAAU,GAAG,UAAY,GAAG,MAAQ,OAAOmB,MAAM,CAAC3C,MAAOiB,EAAW,QAAE2B,SAAS,SAAUC,GAAM5B,EAAIoI,QAAQxG,GAAKE,WAAW,YAAY,CAAC1B,EAAG,eAAe,CAACkC,YAAY,YAAY,CAAClC,EAAG,IAAI,CAACJ,EAAIQ,GAAGR,EAAIS,GAAGT,EAAIW,GAAG,iBAAiBP,EAAG,SAAS,CAACG,MAAM,CAAC,MAAQ,KAAK,CAACH,EAAG,aAAaJ,EAAIkB,GAAIlB,EAAqB,mBAAE,SAASoM,GAAU,OAAOhM,EAAG,MAAM,CAACf,IAAI+M,EAASjB,MAAOnL,EAAIqD,QAAQqK,gBAAkBtB,EAAW,4CAA8C,IAAK,CAAChM,EAAG,cAAc,CAACE,YAAY,CAAC,cAAc,OAAO,eAAe,SAASC,MAAM,CAAC,OAAS,GAAG,MAAQ,IAAIS,GAAG,CAAC,MAAQ,SAASM,GAAQ,OAAOtB,EAAIqD,QAAQ0K,aAAa/N,EAAIqD,QAAQsI,QAAQS,GAAUR,cAAc,CAACxL,EAAG,qBAAqB,CAACA,EAAG,SAAS,CAACG,MAAM,CAAC,KAAO,OAAO,CAACP,EAAIQ,GAAGR,EAAIS,GAAGT,EAAIqD,QAAQsI,QAAQS,GAAUP,SAAW,gBAAkB,eAAe,GAAGzL,EAAG,sBAAsB,CAACE,YAAY,CAAC,cAAc,UAAU,CAACF,EAAG,oBAAoB,CAACkC,YAAY,cAAc,CAACtC,EAAIQ,GAAGR,EAAIS,GAAGT,EAAIqD,QAAQsI,QAAQS,GAAUpO,SAASoC,EAAG,uBAAuB,CAACf,IAAIW,EAAIqD,QAAQsI,QAAQS,GAAUb,MAAMjJ,YAAY,SAAShC,YAAY,CAAC,cAAc,WAAW,CAACN,EAAIQ,GAAG,IAAIR,EAAIS,GAAGT,EAAIW,GAAG,SAAWX,EAAIqD,QAAQsI,QAAQS,GAAUb,QAAQ,QAAQ,GAAIvL,EAAIqD,QAAsB,eAAEjD,EAAG,qBAAqB,CAACE,YAAY,CAAC,gBAAgB,SAAS,CAACF,EAAG,SAAS,CAACG,MAAM,CAAC,0BAAyB,EAAM,kBAAiB,EAAK,cAAc,IAAI,WAAW,GAAG,MAAQ,IAAIiK,SAAS,CAAC,MAAQ,CAAC,SAASlJ,GAAQA,EAAOiJ,mBAAoB,SAASjJ,GAAQA,EAAOiJ,kBAAkBjJ,EAAO8B,oBAAqBxC,YAAYZ,EAAIa,GAAG,CAAC,CAACxB,IAAI,YAAYyB,GAAG,SAASC,GAC7sD,IAAIC,EAAKD,EAAIC,GACb,MAAO,CAACZ,EAAG,QAAQJ,EAAIiB,GAAG,CAACX,YAAY,CAAC,MAAQ,mBAAmBC,MAAM,CAAC,KAAO,KAAKS,GAAI,CAACZ,EAAG,SAAS,CAACkC,YAAY,eAAe/B,MAAM,CAAC,KAAO,KAAK,CAACH,EAAG,SAAS,CAACJ,EAAIQ,GAAG,eAAeJ,EAAG,OAAO,CAACkC,YAAY,YAAY,CAACtC,EAAIQ,GAAGR,EAAIS,GAAG+K,KAAKC,MAAMzL,EAAIqD,QAAQsI,QAAQS,GAAUV,mBAAmB,IAAI,OAAO,MAAK,IAAO,CAACtL,EAAG,gBAAgB,CAACG,MAAM,CAAC,QAAUP,EAAIqD,QAAQsI,QAAQ,UAAYS,MAAa,IAAI,GAAGpM,EAAIyB,MAAM,GAAGrB,EAAG,cAAc,OAAM,IAAI,IAC7b,GAAkB,GC4FtB,kBACEwD,WAAY,CACV4I,cAAJ,IAEE3D,MAAO,GAEPhQ,KANF,WAOI,MAAO,CACLmV,kBAAmB,GACnB5F,SAAS,IAGbjE,SAAU,GAEVC,QAdF,WAeInE,KAAKoD,QAAQoC,IAAI,kBAAmBxF,KAAKgO,MACzChO,KAAKoD,QAAQoC,IAAI,kBAAmBxF,KAAKiO,qBACzCjO,KAAKiO,uBAEP3J,QAAS,CACP0J,KADJ,WAEMhO,KAAKmI,SAAU,GAEjB8F,oBAJJ,WAOM,IAAK,IAAI9B,KADTnM,KAAK+N,kBAAoB,GACJ/N,KAAKoD,QAAQsI,QAE5B1L,KAAKoD,QAAQsI,QAAQS,GAAU+B,WACjClO,KAAK+N,kBAAkBrU,KAAKyS,OC5HgT,M,yBCQlV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIa,MAAiB,QAkBhC,IAAkB,GAAW,CAACpG,OAAA,KAAKjB,WAAA,QAAWC,WAAA,KAAS2I,SAAA,KAAMvH,QAAA,KAAME,QAAA,KAAMC,YAAA,KAAUmB,kBAAA,KAAgBuC,kBAAA,KAAgBtC,iBAAA,OAAiB2E,kBAAA,OAAkB1E,eAAA,OAAepB,SAAA,KAAMqB,oBAAA,OCN3K,sBACE7J,KAAM,MACN4F,WAAY,CACVwK,eAAJ,EACIC,OAAJ,EACIC,YAAJ,EACIC,UAAJ,GACIC,aAAJ,IAEE3V,KAAM,WAAR,OACA,sBAEEuL,QAZF,WAcI,IAAJ,KAEA,kBACMqK,EAAgBC,EAAIC,OAASD,EAAIE,SAInC3O,KAAKoD,QAAQwL,QAAQJ,MCpDqS,M,gECQ1T,GAAY,eACd,GACA,EACA/L,GACA,EACA,KACA,KACA,MAIa,MAAiB,QAQhC,IAAkB,GAAW,CAACoM,QAAA,KAAKC,SAAA,KAAMC,YAAA,KAASC,qBAAA,O,iBCtBhDC,gBAAS,GAAD,OAAIC,GAAJ,qBAA6C,CACnDC,MADmD,aAOnDC,WAPmD,aAUnDC,OAVmD,aAanDC,YAbmD,aAgBnDC,QAhBmD,WAiBjDC,MAAM,6CACN7P,OAAO8P,SAASC,QAAO,IAEzBC,QApBmD,WAqBjDH,MAAM,kEAER/R,MAvBmD,SAuB5CA,O,8BC5BP,GAAS,WAAa,IAAIsC,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,UAAU,CAACA,EAAG,SAAS,CAACG,MAAM,CAAC,KAAO,KAAKP,EAAIkB,GAAIlB,EAAS,OAAE,SAASmB,GAAM,OAAOf,EAAG,cAAc,CAACf,IAAI8B,EAAKoG,MAAMhH,MAAM,CAAC,KAAO,IAAIS,GAAG,CAAC,MAAQ,SAASM,GAAQ,OAAOtB,EAAI2E,QAAQhL,KAAKwH,EAAKgG,SAAS,CAAC/G,EAAG,mBAAmB,CAACE,YAAY,CAAC,cAAc,SAAS,CAACF,EAAG,SAAS,CAACJ,EAAIQ,GAAGR,EAAIS,GAAGU,EAAKqG,UAAU,GAAGpH,EAAG,sBAAsB,CAACA,EAAG,oBAAoB,CAACgB,SAAS,CAAC,YAAcpB,EAAIS,GAAGU,EAAKoG,WAAW,IAAI,MAAK,IAAI,IACjgB,GAAkB,GCiBtB,IACEvJ,KAAM,OACNnF,KAFF,WAGI,MAAO,CACL6H,MAAO,CACb,CAAQ,MAAR,mBAAQ,KAAR,SAAQ,KAAR,YACA,CAAQ,MAAR,kBAAQ,KAAR,QAAQ,KAAR,WACA,CAAQ,MAAR,kBAAQ,KAAR,aAAQ,KAAR,WACA,CAAQ,MAAR,qBAAQ,KAAR,gBAAQ,KAAR,cACA,CAAQ,MAAR,kBAAQ,KAAR,SAAQ,KAAR,cAIE0D,QAbF,WAcInE,KAAKuC,OAAOwF,YAAc/H,KAAKU,GAAG,oBChCwS,MCO1U,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,MAAiB,QAUhC,IAAkB,GAAW,CAACyF,QAAA,KAAME,QAAA,KAAMC,YAAA,KAAUoB,iBAAA,OAAiBkG,iBAAA,KAAcjG,eAAA,SC5BnF,IAAI,GAAS,WAAa,IAAI5H,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,UAAU,CAACA,EAAG,eAAe,CAACG,MAAM,CAAC,UAAYP,EAAI4F,UAAU,SAAW5F,EAAI4K,SAAS,SAAW,WAAa5K,EAAI4F,cAAc,IAChO,GAAkB,G,aCStB,IACE5H,KAAM,SACN4F,WAAY,CACViM,aAAJ,SAEE3N,MAAO,CACL0D,UAAWkK,OACXlF,SAAUkF,QAEZjX,KATF,WAUI,MAAO,IAETuL,QAZF,WAaInE,KAAKuC,OAAOwF,YAAc/H,KAAKU,GAAGV,KAAK2F,YAEzCzB,SAAU,GACVI,QAAS,IC1BqU,MCO5U,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QCbfwL,OAAIC,IAAIC,SAER,IAAMC,GAAS,CACb,CACE/I,KAAM,IACNnJ,KAAM,OACN4G,UAAWuL,IAEb,CACEhJ,KAAM,UACNnJ,KAAM,SACN4G,UAAW,kBAAM,yCACjB1C,MAAO,SAAAkO,GAAK,0CAAUA,EAAMC,QAAWD,EAAM5G,SAE/C,CACErC,KAAM,qBACNnJ,KAAM,YACN4G,UAAW,kBAAM,yCACjB1C,MAAO,SAAAkO,GAAK,0CAAUA,EAAMC,QAAWD,EAAM5G,SAE/C,CACErC,KAAM,UACNnJ,KAAM,SACN4G,UAAW,kBAAM,8FACjB1C,MAAO,SAAAkO,GAAK,0CAAUA,EAAMC,QAAWD,EAAM5G,SAE/C,CACErC,KAAM,yBACNnJ,KAAM,cACN4G,UAAW,kBAAM,mGACjB1C,MAAO,SAAAkO,GAAK,0CAAUA,EAAMC,QAAWD,EAAM5G,SAE/C,CACErC,KAAM,eACNnJ,KAAM,cACN4G,UAAW,kBAAM,mGACjB1C,MAAO,SAAAkO,GAAK,0CAAUA,EAAMC,QAAWD,EAAM5G,SAE/C,CACErC,KAAM,cACNnJ,KAAM,SACN4G,UAAW0L,GACXpO,MAAO,SAAAkO,GAAK,0CAAUA,EAAMC,QAAWD,EAAM5G,UAI3C+G,GAAS,IAAIN,QAAU,CAC3BhR,KAAM,OACNiR,YAGaK,M,iECnDf,SAASC,KACP,IAAMC,EAAUC,UACVC,EAAW,GAQjB,OAPAF,EAAQxJ,OAAO2J,SAAQ,SAAAvR,GACrB,IAAMwR,EAAUxR,EAAIyR,MAAM,uBAC1B,GAAID,GAAWA,EAAQxX,OAAS,EAAG,CACjC,IAAM0X,EAASF,EAAQ,GACvBF,EAASI,GAAUN,EAAQpR,OAGxBsR,EAZTZ,OAAIC,IAAIgB,SAeO,WAAIA,QAAQ,CAEzBD,OAAQE,UAAUC,SAASC,MAAM,KAAK,GACtCC,eAAgB,KAChBT,SAAUH,O,6DCnBZT,OAAIC,IAAIqB,SAEO,WAAIA,QAAQ,ICHrBC,GAAc,IAAIvB,OAAI,CAC1BlX,KAD0B,WAExB,MAAO,CACLmP,YAAa,OACbX,SAAS,EACTI,oBAAoB,EACpBM,mBAAmB,EACnBG,kBAAmB,KACnBzF,UAAU,EACV8O,oBAAoB,IAGxBnN,QAZ0B,WAaxBnE,KAAKuR,sBACL5R,OAAO6R,iBAAiB,SAAUxR,KAAKuR,sBAEzCE,UAhB0B,WAiBxB9R,OAAO+R,oBAAoB,SAAU1R,KAAKuR,sBAE5CjN,QAAS,CACPiN,oBADO,WAELvR,KAAKwC,SAAY/G,SAASkW,KAAKC,YAAc,IAC7C5R,KAAKsR,oBAAsD,IAAhC3R,OAAOqR,UAAUa,YAAyBlS,OAAOmS,WAAW,8BAA8BC,YAK5G,IACbV,eAEAW,QAHa,SAGJlC,EAAKmC,GACZnC,EAAIxW,UAAUiJ,OAAS8O,K,oGC3BrBa,GAAc,CAClB5U,QAAS,KAGL6U,GAASC,KAAMjT,OAAO+S,IAItBG,GAAS,IAAIvC,OAAI,CAErBwC,SAAU,GACVC,IAAK,KAEL3Z,KALqB,WAMnB,MAAO,CACL4Z,WAAW,EACX9G,QAAS,GACT+B,eAAgB,KAChBgF,WAAY,KAGhBnO,QAAS,CAEDsK,QAFC,SAEQJ,GAAe,8JAEvBA,EAAckE,SAAS,OAC1BlE,GAAgC,KAElC,EAAK8D,SAAW9D,EACVmE,EAAYnE,EAAcnB,QAAQ,OAAQ,MAAQ,KACxD,EAAKkF,IAAM,IAAIK,UAAUD,GACzB,EAAKJ,IAAIM,OAAS,EAAKC,aACvB,EAAKP,IAAIQ,UAAY,EAAKC,aAC1B,EAAKT,IAAIU,QAAU,EAAKC,WACxB,EAAKX,IAAInW,QAAU,EAAK+W,WAXI,8CAcxBzJ,cAhBC,SAgBcxI,GAAM,2JAEM,IAA3BA,EAAKkI,WAAWhQ,OAFK,gCAIjB,EAAKwQ,QAAQ,UAAW1I,GAJP,OAKvBA,EAAKkI,WAAa,CAAClI,EAAKyJ,UALD,sCAQjB,EAAKd,WAAW,UAAW3I,GARV,OASvBA,EAAKkI,WAAa,GATK,8CAa3B/F,YA7BO,SA6BMkB,GAA0C,IAA/B6O,EAA+B,uDAAnB,QAASC,EAAU,uDAAH,EAElD,OAAK9O,GAAcA,EAAUjC,WACF,aAAvBiC,EAAUoG,UAAyC,UAAdyI,EACvC,UAAUpT,KAAKsS,SAAf,eAA8B/N,EAAUjC,WAAxC,YAAsDiC,EAAUrC,QAAhE,2BAA0FqC,EAAUoG,SAApG,iBAAqH0I,GAC5G9O,EAAU+O,UAAY/O,EAAU+O,SAASF,GAC3C7O,EAAU+O,SAASF,GACjB7O,EAAUgP,OAAShP,EAAUgP,MAAMD,UAAY/O,EAAUgP,MAAMD,SAASF,GAC1E7O,EAAUgP,MAAMD,SAASF,GACvB7O,EAAUf,QAAUe,EAAUf,OAAO8P,UAAY/O,EAAUf,OAAO8P,SAASF,GAC7E7O,EAAUf,OAAO8P,SAASF,GACxB7O,EAAUgP,OAAShP,EAAUgP,MAAM/P,QAAUe,EAAUgP,MAAM/P,OAAO8P,UAAY/O,EAAUgP,MAAM/P,OAAO8P,SAASF,GAClH7O,EAAUgP,MAAM/P,OAAO8P,SAASF,GAC9B7O,EAAUd,SAAWc,EAAUd,QAAQ,GAAG6P,UAAY/O,EAAUd,QAAQ,GAAG6P,SAASF,GACtF7O,EAAUd,QAAQ,GAAG6P,SAASF,GACd,WAAdA,EAEFpT,KAAKqD,YAAYkB,EAAW,QAAS8O,GAChC,GAhBkC,IAmB5CG,QAlDC,SAkDQnO,GAAuB,qLAAb+K,EAAa,+BAAJ,GAE1B5L,EAAM,EAAK8N,SAAW,OAASjN,EAFD,SAGf8M,GAAOzT,IAAI8F,EAAK,CAAE4L,OAAQA,IAHX,cAG9BnW,EAH8B,OAIpC6V,OAAI2D,KAAKC,MAAM,UAAWrO,EAAUpL,GAJA,kBAK7BA,EAAOrB,MALsB,8CAQhC+a,SA1DC,SA0DStO,EAAUzM,GAAM,uKAExB4L,EAAM,EAAK8N,SAAW,OAASjN,EACrCzM,EAAOgb,KAAKC,UAAUjb,GAHQ,SAITuZ,GAAO2B,KAAKtP,EAAK5L,GAJR,cAIxBqB,EAJwB,OAK9B6V,OAAI2D,KAAKC,MAAM,WAAYrO,EAAUpL,GALP,kBAMvBA,EAAOrB,MANgB,8CAS1BgR,QAnEC,SAmEQvE,EAAUzM,GAAM,uKAEvB4L,EAAM,EAAK8N,SAAW,OAASjN,EACrCzM,EAAOgb,KAAKC,UAAUjb,GAHO,SAIRuZ,GAAO4B,IAAIvP,EAAK5L,GAJR,cAIvBqB,EAJuB,OAK7B6V,OAAI2D,KAAKC,MAAM,UAAWrO,EAAUpL,GALP,kBAMtBA,EAAOrB,MANe,8CASzBiR,WA5EC,SA4EWxE,EAAU2O,GAAS,uKAE7BxP,EAAM,EAAK8N,SAAW,OAASjN,EACrC2O,EAAUJ,KAAKC,UAAUG,GAHU,SAId7B,GAAO8B,OAAOzP,EAAK,CAAE5L,KAAMob,IAJb,cAI7B/Z,EAJ6B,OAKnC6V,OAAI2D,KAAKC,MAAM,aAAcrO,EAAUpL,GALJ,kBAM5BA,EAAOrB,MANqB,8CAS/Bsb,YArFC,SAqFY7O,EAAU8O,GAAqB,gLAAf/D,EAAe,+BAAN,KAEtC5L,EAAM,EAAK8N,SAAW,OAASjN,EAC/B+K,IACEgE,EAAY,IAAIC,gBAAgBjE,GACpC5L,GAAO,IAAM4P,EAAUtH,YAErBpE,EAAQ,EACZoH,OAAI2D,KAAKC,MAAM,cAAelP,GAC9B8P,KAAK9P,GACF+P,KAAK,WAAW,SAAUrT,GACzB4O,OAAI0E,IAAIL,EAAMzL,EAAOxH,GACrBwH,GAAS,KAEV+L,MAAK,SAAUC,GAEVP,EAAK/a,OAASsb,EAASjU,MAAMrH,QAC/B+a,EAAK7Z,OAAOoa,EAASjU,MAAMrH,WAjBe,8CAsBlDiS,cA3GO,SA2GQ/B,GAAmD,IAA9CkE,EAA8C,uDAApC,GAAIrB,EAAgC,uDAArBnM,KAAKyN,eAC1CpI,EAAW,WAAa8G,EAAW,QAAU7C,EACnDtJ,KAAK2T,SAAStO,EAAUmI,IAGpB7D,SAhHC,SAgHSzI,EAAMyT,GAAU,qKAC9B,EAAKpS,OAAO6E,SAAU,EAChB/B,EAAW,WAAa,EAAKoI,eAAiB,eAAiBkH,EAFvC,SAGxB,EAAKhB,SAAStO,EAAUnE,GAHA,OAI9B,EAAKqB,OAAO6E,SAAU,EAJQ,8CAOhC0G,aAvHO,SAuHO8G,GACRA,IAAgB5U,KAAKyN,iBACvBzN,KAAKyN,eAAiBmH,EACtBnP,aAAaC,QAAQ,iBAAkBkP,GACvC5U,KAAKyE,MAAM,sBAAuBmQ,KAIhC9B,aA/HC,WA+He,2KAEpBhD,OAAI2D,KAAKoB,KAAK,uBAAyB,EAAKvC,UAC5C,EAAKE,WAAY,EAHG,SAKE,EAAKgB,QAAQ,WALf,OAKd9H,EALc,wBAMCA,GAND,IAMpB,2BAAWoJ,EAAmB,QAC5BhF,OAAI0E,IAAI,EAAK9I,QAASoJ,EAAOnJ,UAAWmJ,GAPtB,8BASpB,EAAKC,sBACL,EAAKtQ,MAAM,mBAVS,8CAahBuO,aA5IC,SA4IahY,GAAG,8JAEjBga,EAAMpB,KAAKqB,MAAMja,EAAEpC,MACH,mBAAhBoc,EAAIlX,QACNgS,OAAI0E,IAAI,EAAK9I,QAASsJ,EAAIE,gBAAgBvJ,UAAWqJ,EAAIE,iBAChC,iBAAhBF,EAAIlX,SACbgS,OAAI0E,IAAI,EAAK9I,QAASsJ,EAAIE,gBAAgBvJ,UAAWqJ,EAAIE,iBACzD,EAAKH,sBACL,EAAKtQ,MAAM,oBACc,mBAAhBuQ,EAAIlX,SACbgS,OAAImE,OAAO,EAAKvI,QAASsJ,EAAIE,gBAAgBvJ,WAC7C,EAAKoJ,sBACL,EAAKtQ,MAAM,oBACc,sBAAhBuQ,EAAIlX,QACb,EAAK2U,WAAauC,EAAIE,gBAEtB,EAAKzQ,MAAMuQ,EAAIlX,QAASkX,EAAIE,iBAhBT,8CAoBvBhC,WAhKO,SAgKKlY,GACVgF,KAAKwS,WAAY,EACjB1C,OAAI2D,KAAKhW,MAAM,8DAA+DzC,EAAEma,QAChFlX,WAAW,WACT+B,KAAK4O,QAAQ5O,KAAKsS,WAClBjT,KAAKW,MAAO,MAGhBmT,WAxKO,WAyKLnT,KAAKuS,IAAI6C,SAGXL,oBA5KO,WA8KL,IAAK/U,KAAKmK,eAAiBnK,KAAKmK,aAAakL,SAAWrV,KAAKmK,aAAamL,cAAclc,OAAS,EAAG,CAElG,IAAMmc,EAAe9P,aAAa+P,QAAQ,kBAC1C,GAAID,GAAgBvV,KAAK0L,QAAQ6J,IAAiBvV,KAAK0L,QAAQ6J,GAAcF,QAC3ErV,KAAK8N,aAAayH,OACb,CAEL,IAAK,IAAMpJ,KAAYnM,KAAK0L,QAC1B,GAAqC,YAAjC1L,KAAK0L,QAAQS,GAAUb,OAAuBtL,KAAK0L,QAAQS,GAAUkJ,SAA2D,IAAhDrV,KAAK0L,QAAQS,GAAUmJ,cAAclc,OAAc,CACrI4G,KAAK8N,aAAa3B,GAClB,MAIJ,IAAKnM,KAAKmK,eAAiBnK,KAAKmK,aAAakL,QAC3C,IAAK,IAAMlJ,KAAYnM,KAAK0L,QAC1B,GAAI1L,KAAK0L,QAAQS,GAAUkJ,SAA2D,IAAhDrV,KAAK0L,QAAQS,GAAUmJ,cAAclc,OAAc,CACvF4G,KAAK8N,aAAa3B,GAClB,WAQdjI,SAAU,CACRiG,aADQ,WAEN,OAAKnK,KAAKyN,eAGDzN,KAAK0L,QAAQ1L,KAAKyN,gBAFlB,SASA,IACb4E,UAEAL,QAHa,SAGJlC,EAAKmC,GACZnC,EAAIxW,UAAU8J,QAAUiP,K,wBCpOtBoD,IAAevG,EACfwG,GAAgB,CACpBC,WAAW,EACXC,SAAUH,GAAe,QAAU,QACnCI,oBAAoB,EACpBC,cAAc,EACdC,gBAAgB,EAChBC,UAAW,IACXC,mBAAmB,GAGrBnG,OAAIoG,OAAOC,eAAgB,EAC3BrG,OAAIC,IAAIqG,KAAWV,IACnB5F,OAAIC,IAAIsG,SACRvG,OAAIC,IAAIuG,IACRxG,OAAIC,IAAIsC,IAGRxC,OAAOvW,UAAUyT,eAAiB,WAChC,IAAIwJ,EAASC,SAASxW,KAAM,IACxByW,EAAQlL,KAAKmL,MAAMH,EAAS,MAC5BI,EAAUpL,KAAKmL,OAAOH,EAAkB,KAARE,GAAiB,IACjDG,EAAUL,EAAkB,KAARE,EAA2B,GAAVE,EAIzC,OAHIF,EAAQ,KAAMA,EAAQ,IAAMA,GAC5BE,EAAU,KAAMA,EAAU,IAAMA,GAChCC,EAAU,KAAMA,EAAU,IAAMA,GACtB,OAAVH,EAAyBE,EAAU,IAAMC,EAAwBH,EAAQ,IAAME,EAAU,IAAMC,GAGrG,IAAI9G,OAAI,CACNQ,UACAuG,QACAC,WACAhX,OAAQ,SAAAiX,GAAC,OAAIA,EAAEC,OACdC,OAAO,S,qBCjDVnc,EAAOD,QAAU,ssG,uBCAjBC,EAAOD,QAAU,IAA0B,yB,oCCA3C,yBAAwe,EAAG,G,uBCA3eC,EAAOD,QAAU,IAA0B,0B,8CCA3CC,EAAOD,QAAU,ktI,qBCAjBC,EAAOD,QAAU,kuH,qBCAjBC,EAAOD,QAAU,ktI,uBCAjB,IAAI8L,EAAM,CACT,YAAa,OACb,mBAAoB,OACpB,kBAAmB,OACnB,uBAAwB,OACxB,oBAAqB,OACrB,aAAc,OACd,aAAc,OACd,cAAe,OACf,sBAAuB,OACvB,sBAAuB,OACvB,aAAc,OACd,YAAa,OACb,YAAa,OACb,cAAe,OACf,cAAe,OACf,gBAAiB,OACjB,mBAAoB,OACpB,eAAgB,OAChB,eAAgB,OAChB,YAAa,OACb,kBAAmB,QAIpB,SAASC,EAAeC,GACvB,IAAIC,EAAKC,EAAsBF,GAC/B,OAAOtM,EAAoBuM,GAE5B,SAASC,EAAsBF,GAC9B,IAAItM,EAAoBgE,EAAEoI,EAAKE,GAAM,CACpC,IAAI7L,EAAI,IAAI0B,MAAM,uBAAyBmK,EAAM,KAEjD,MADA7L,EAAE2B,KAAO,mBACH3B,EAEP,OAAO2L,EAAIE,GAEZD,EAAeI,KAAO,WACrB,OAAO3N,OAAO2N,KAAKL,IAEpBC,EAAexL,QAAU2L,EACzBjM,EAAOD,QAAU+L,EACjBA,EAAeE,GAAK,Q,yDC1CpB,yBAA2e,EAAG,G,mmJCA9e,yBAA2e,EAAG,G,4CCA9ehM,EAAOD,QAAU,IAA0B,+B,qBCA3CC,EAAOD,QAAU,IAA0B,yB,kCCA3C,IAAIiF,EAAS,WAAa,IAAIC,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,cAAc,CAACuC,WAAW,CAAC,CAAC3E,KAAK,YAAY4E,QAAQ,cAAc7D,MAAOiB,EAAa,UAAE8B,WAAW,cAAcvB,MAAM,CAAC,OAAS,IAAIS,GAAG,CAAC,MAAQ,SAASM,GAAQ,OAAIA,EAAOnF,KAAK0G,QAAQ,QAAQ7C,EAAI8C,GAAGxB,EAAOyB,QAAQ,OAAO,GAAGzB,EAAOjC,IAAI,CAAC,OAAO,eAAiC,WAAYiC,GAA4B,IAAlBA,EAAO0B,OAAvC,UAAoEhD,EAAIiD,eAAiBjD,EAAIiD,eAAejD,EAAImB,MAAQnB,EAAIkD,YAAYlD,EAAImB,QAAO,YAAc,CAACnB,EAAImD,UAAU,SAAS7B,GAAQA,EAAO8B,qBAAsB,CAAGpD,EAAImX,WAA+OnX,EAAIyB,KAAvOrB,EAAG,qBAAqB,CAACG,MAAM,CAAC,KAAO,GAAG,MAAQ,SAAS,CAACH,EAAG,MAAM,CAACE,YAAY,CAAC,OAAS,6BAA6BC,MAAM,CAAC,IAAMP,EAAIqD,QAAQC,YAAYtD,EAAImB,KAAM,QAAS,IAAI,WAAW,EAAQ,aAAoCf,EAAG,sBAAsB,CAACA,EAAG,oBAAoB,CAACJ,EAAIQ,GAAG,IAAIR,EAAIS,GAAGT,EAAImB,KAAKnD,MAAM,KAAQgC,EAAImB,KAAKiW,QAAShX,EAAG,OAAO,CAACJ,EAAIQ,GAAG,IAAIR,EAAIS,GAAGT,EAAImB,KAAKiW,SAAS,OAAOpX,EAAIyB,OAAQzB,EAAImB,KAAY,QAAEf,EAAG,uBAAuB,CAACJ,EAAIkB,GAAIlB,EAAImB,KAAY,SAAE,SAASsC,EAAO4G,GAAa,OAAOjK,EAAG,OAAO,CAACf,IAAIoE,EAAOtB,SAAS,CAAC/B,EAAG,IAAI,CAACY,GAAG,CAAC,MAAQ,CAAC,SAASM,GAAQ,OAAOtB,EAAIkD,YAAYO,IAAS,SAASnC,GAAQA,EAAOiJ,sBAAuB,CAACvK,EAAIQ,GAAGR,EAAIS,GAAGgD,EAAOzF,SAAUqM,EAAc,EAAIrK,EAAImB,KAAKuC,QAAQrK,OAAQ+G,EAAG,QAAQ,CAACf,IAAIgL,GAAa,CAACrK,EAAIQ,GAAG,OAAOR,EAAIyB,UAAYzB,EAAImB,KAAKqS,OAAWxT,EAAIqX,aAAcjX,EAAG,IAAI,CAACE,YAAY,CAAC,MAAQ,QAAQU,GAAG,CAAC,MAAQ,CAAC,SAASM,GAAQ,OAAOtB,EAAIkD,YAAYlD,EAAImB,KAAKqS,QAAQ,SAASlS,GAAQA,EAAOiJ,sBAAuB,CAACvK,EAAIQ,GAAG,MAAMR,EAAIS,GAAGT,EAAImB,KAAKqS,MAAMxV,SAASgC,EAAIyB,MAAOzB,EAAIqX,cAAgBrX,EAAImB,KAAKmW,aAAclX,EAAG,QAAQ,CAACE,YAAY,CAAC,MAAQ,SAAS,CAACN,EAAIQ,GAAG,UAAUR,EAAIS,GAAGT,EAAImB,KAAKoW,aAAa,UAAUvX,EAAIS,GAAGT,EAAImB,KAAKmW,iBAAiBtX,EAAIyB,MAAM,GAAGzB,EAAIyB,KAAMzB,EAAImB,KAAW,OAAEf,EAAG,uBAAuB,CAACA,EAAG,IAAI,CAACY,GAAG,CAAC,MAAQ,CAAC,SAASM,GAAQ,OAAOtB,EAAIkD,YAAYlD,EAAImB,KAAKsC,SAAS,SAASnC,GAAQA,EAAOiJ,sBAAuB,CAACvK,EAAIQ,GAAGR,EAAIS,GAAGT,EAAImB,KAAKsC,OAAOzF,WAAWgC,EAAIyB,KAAQzB,EAAImB,KAAKqW,MAAOpX,EAAG,uBAAuB,CAACJ,EAAIQ,GAAGR,EAAIS,GAAGT,EAAImB,KAAKqW,UAAUxX,EAAIyB,MAAM,GAAKzB,EAAI8D,cAA0H9D,EAAIyB,KAA/GrB,EAAG,qBAAqB,CAACA,EAAG,gBAAgB,CAACG,MAAM,CAAC,YAAcP,EAAImB,KAAKsW,aAAa,OAAS,OAAO,GAAazX,EAAW,QAAEI,EAAG,qBAAqB,CAACA,EAAG,YAAY,CAACG,MAAM,CAAC,OAAS,IAAIK,YAAYZ,EAAIa,GAAG,CAAC,CAACxB,IAAI,YAAYyB,GAAG,SAASC,GACz4E,IAAIC,EAAKD,EAAIC,GACb,MAAO,CAACZ,EAAG,MAAMJ,EAAIiB,GAAG,CAACV,MAAM,CAAC,IAAM,EAAQ,QAAuB,OAAS,OAAOS,QAAS,MAAK,EAAM,aAAa,CAACZ,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIS,GAAGT,EAAIuD,eAAe,GAAGvD,EAAIyB,KAAOzB,EAAIgE,YAEydhE,EAAIyB,KAFhdrB,EAAG,qBAAqB,CAACA,EAAG,YAAY,CAACG,MAAM,CAAC,OAAS,IAAIK,YAAYZ,EAAIa,GAAG,CAAC,CAACxB,IAAI,YAAYyB,GAAG,SAASC,GAChT,IAAIC,EAAKD,EAAIC,GACb,MAAO,CAACZ,EAAG,QAAQJ,EAAIiB,GAAG,CAACV,MAAM,CAAC,KAAO,GAAG,OAAS,IAAIS,GAAG,CAAC,MAAQ,CAAC,SAASM,GAAQ,OAAOtB,EAAI2J,cAAc3J,EAAImB,OAAO,SAASG,GAAQA,EAAO8B,kBAAmB,SAAS9B,GAAQA,EAAOiJ,sBAAuBvJ,GAAI,CAAEhB,EAAImB,KAAKkI,WAAWhQ,OAAS,EAAG+G,EAAG,SAAS,CAACG,MAAM,CAAC,OAAS,OAAO,CAACP,EAAIQ,GAAG,cAAcR,EAAIyB,KAAoC,GAA9BzB,EAAImB,KAAKkI,WAAWhQ,OAAa+G,EAAG,SAAS,CAACG,MAAM,CAAC,OAAS,OAAO,CAACP,EAAIQ,GAAG,qBAAqBR,EAAIyB,MAAM,OAAO,MAAK,EAAM,YAAY,CAAEzB,EAAImB,KAAKkI,WAAWhQ,OAAS,EAAG+G,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIS,GAAGT,EAAIW,GAAG,sBAAsBX,EAAIyB,KAAoC,GAA9BzB,EAAImB,KAAKkI,WAAWhQ,OAAa+G,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIS,GAAGT,EAAIW,GAAG,mBAAmBX,EAAIyB,QAAQ,IAAczB,EAAI0X,cAAkB1X,EAAImB,KAAKwL,SAAUvM,EAAG,qBAAqB,CAACJ,EAAIQ,GAAGR,EAAIS,GAAGT,EAAImB,KAAKwL,SAASI,WAAWC,qBAAqBhN,EAAIyB,KAAOzB,EAAI2X,SAAuP3X,EAAIyB,KAAjPrB,EAAG,SAAS,CAACE,YAAY,CAAC,eAAe,QAAQ,eAAe,QAAQC,MAAM,CAAC,MAAQ,kBAAkBS,GAAG,CAAC,MAAQ,CAAC,SAASM,GAAQ,OAAOtB,EAAImD,UAAUnD,EAAImB,OAAO,SAASG,GAAQA,EAAOiJ,sBAAuB,CAACvK,EAAIQ,GAAG,gBAAyB,GAAGJ,EAAG,cAAc,IAC3jCsC,EAAkB,G,gFCsHtB,MAEA,8BACEpD,KAAM,SAAR,qBACI,GAAqB,oBAAVP,EAAX,CAIA,IAAJ,OACA,cACqB,UAAX9D,EAAEkB,MAAiC,IAAblB,EAAE+H,QAGT,OAAfW,IACFA,EAAazF,YAAW,WAAhC,mBAGA,aACyB,OAAfyF,IACFhG,aAAagG,GACbA,EAAa,OAGjB,CAAJ,iFACI,CAAJ,yGAnBM,EAAN,uDAuBA,qBACEC,WAAY,CACVgU,cAAJ,QAEE1V,MAAO,CACLf,KAAM7H,OACNqP,MAAO9E,OACPgU,WAAYhU,OACZsT,WAAYpT,QACZsT,aAActT,QACdD,cAAeC,QACf4T,SAAU5T,QACVC,YAAaD,QACb2T,aAAc3T,QACdd,eAAgB,MAElBpK,KAhBF,WAiBI,MAAO,CACLoL,aAAa,EACbC,WAAW,IAGfC,SAAU,CACRZ,QADJ,WACA,uBACA,wBADA,IACA,0CACA,eACA,iBACA,UACA,cACA,qBACA,cACA,qBACA,cACA,qBAEA,mBAZA,8BAgBM,MAAO,KAGXa,QA1CF,aA2CEC,cA3CF,WA4CIpE,KAAKiE,WAAY,GAEnBI,QA9CF,aA+CEC,QAAS,CACPrB,YADJ,WACA,kEAEA,KACM,GAA6B,IAAzBsB,EAAUjC,WACZkC,EAAM,YAAcD,EAAUrC,aACtC,oBACQsC,EAAM,WAAaD,EAAUrC,YACrC,qBAKQ,YADAlC,KAAKoD,QAAQqB,MAAM,eAAgBF,GAHnCC,EAAM,cAAgBD,EAAUrC,QAMlClC,KAAK0E,QAAQhL,KAAK,CAAxB,sCAEIwJ,UAjBJ,WAmBUlD,KAAKiE,WACTjE,KAAKoD,QAAQqB,MAAM,kBAAmBzE,KAAKkB,OAE7C,cAtBJ,SAsBA,kKAEA,eAFA,SAGA,2BAHA,OAIA,eAJA,iDC5NsV,I,iICOlVyD,EAAY,eACd,EACA7E,EACA2C,GACA,EACA,KACA,KACA,MAIa,OAAAkC,EAAiB,QAchC,IAAkBA,EAAW,CAACoB,OAAA,KAAKhB,WAAA,KAASoB,QAAA,KAAMG,YAAA,KAAUmB,kBAAA,KAAgBuC,kBAAA,KAAgBtC,iBAAArB,EAAA,KAAiBgG,kBAAAhG,EAAA,KAAkBsB,eAAAtB,EAAA,KAAepB,WAAA,Q,yDChC9I,IAAInF,EAAS,WAAa,IAAIC,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAMJ,EAAIkB,GAAIlB,EAAmB,iBAAE,SAAS8X,GAAM,OAAO1X,EAAG,MAAM,CAACf,IAAIyY,EAAKlN,SAAStK,YAAY,CAAC,eAAe,MAAM,aAAa,OAAOC,MAAM,CAAC,OAASP,EAAI+X,OAAO,IAAM,UAAQ,KAAeD,EAAKlN,SAAW,cAAa,IAC/TlI,EAAkB,G,sDCatB,iBACER,MAAO,CACL8V,YAAaC,MACbF,OAAQlU,QAEVhL,KALF,WAMI,MAAO,CACL0K,SAAS,IAGbY,SAAU,CACR+T,gBAAiB,WACf,IAAIC,EAAS,GACTlR,EAAO,GACX,OAAKhH,KAAK+X,aACV/X,KAAK+X,YAAYpH,SAAQ,SAAUkH,GACjC,IAAIzY,EAAMyY,EAAKlN,UACY,IAAvB3D,EAAKpE,QAAQxD,KACf4H,EAAKtN,KAAK0F,GACV8Y,EAAOxe,KAAKme,OAGTK,GARuB,KAWlC7T,QAzBF,aA0BEC,QAAS,KCxC4U,I,YCOnVK,EAAY,eACd,EACA7E,EACA2C,GACA,EACA,KACA,KACA,MAIa,OAAAkC,E,8BClBf7J,EAAOD,QAAU,IAA0B,2B,mBCA3CC,EAAOD,QAAU,8vG,qBCAjBC,EAAOD,QAAU,IAA0B,wB,inICA3CC,EAAOD,QAAU,8hI,qBCAjBC,EAAOD,QAAU,IAA0B,0B,mBCA3CC,EAAOD,QAAU","file":"js/app.5176fd2b.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded CSS chunks\n \tvar installedCssChunks = {\n \t\t\"app\": 0\n \t}\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"js/\" + ({\"config\":\"config\",\"itemdetails~playerqueue~search\":\"itemdetails~playerqueue~search\",\"itemdetails\":\"itemdetails\",\"playerqueue\":\"playerqueue\",\"search\":\"search\"}[chunkId]||chunkId) + \".\" + {\"config\":\"6e3bd196\",\"itemdetails~playerqueue~search\":\"3c623cdf\",\"itemdetails\":\"79b5fa05\",\"playerqueue\":\"84a8618a\",\"search\":\"31a9bea8\"}[chunkId] + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// mini-css-extract-plugin CSS loading\n \t\tvar cssChunks = {\"config\":1,\"itemdetails~playerqueue~search\":1,\"itemdetails\":1};\n \t\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n \t\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n \t\t\tpromises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {\n \t\t\t\tvar href = \"css/\" + ({\"config\":\"config\",\"itemdetails~playerqueue~search\":\"itemdetails~playerqueue~search\",\"itemdetails\":\"itemdetails\",\"playerqueue\":\"playerqueue\",\"search\":\"search\"}[chunkId]||chunkId) + \".\" + {\"config\":\"2956469c\",\"itemdetails~playerqueue~search\":\"133d2876\",\"itemdetails\":\"28909c9e\",\"playerqueue\":\"31d6cfe0\",\"search\":\"31d6cfe0\"}[chunkId] + \".css\";\n \t\t\t\tvar fullhref = __webpack_require__.p + href;\n \t\t\t\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n \t\t\t\tfor(var i = 0; i < existingLinkTags.length; i++) {\n \t\t\t\t\tvar tag = existingLinkTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n \t\t\t\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return resolve();\n \t\t\t\t}\n \t\t\t\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n \t\t\t\tfor(var i = 0; i < existingStyleTags.length; i++) {\n \t\t\t\t\tvar tag = existingStyleTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\");\n \t\t\t\t\tif(dataHref === href || dataHref === fullhref) return resolve();\n \t\t\t\t}\n \t\t\t\tvar linkTag = document.createElement(\"link\");\n \t\t\t\tlinkTag.rel = \"stylesheet\";\n \t\t\t\tlinkTag.type = \"text/css\";\n \t\t\t\tlinkTag.onload = resolve;\n \t\t\t\tlinkTag.onerror = function(event) {\n \t\t\t\t\tvar request = event && event.target && event.target.src || fullhref;\n \t\t\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + request + \")\");\n \t\t\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n \t\t\t\t\terr.request = request;\n \t\t\t\t\tdelete installedCssChunks[chunkId]\n \t\t\t\t\tlinkTag.parentNode.removeChild(linkTag)\n \t\t\t\t\treject(err);\n \t\t\t\t};\n \t\t\t\tlinkTag.href = fullhref;\n\n \t\t\t\tvar head = document.getElementsByTagName(\"head\")[0];\n \t\t\t\thead.appendChild(linkTag);\n \t\t\t}).then(function() {\n \t\t\t\tinstalledCssChunks[chunkId] = 0;\n \t\t\t}));\n \t\t}\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import mod from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"","module.exports = __webpack_public_path__ + \"img/qobuz.c7eb9a76.png\";","module.exports = __webpack_public_path__ + \"img/spotify.1f3fb1af.png\";","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('v-app-bar',{staticStyle:{\"margin-bottom\":\"-8px\"},attrs:{\"flat\":\"\",\"light\":\"\",\"dense\":\"\",\"color\":\"transparent\"}},[_c('v-label',{attrs:{\"light\":\"\"}},[_vm._v(_vm._s(_vm.items.length + \" \" + _vm.$t(\"items\")))]),_c('v-spacer'),_c('v-menu',{attrs:{\"left\":\"\",\"close-on-content-click\":false},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-btn',_vm._g({attrs:{\"icon\":\"\"}},on),[_c('v-icon',[_vm._v(\"sort\")])],1)]}}])},[_c('v-list',_vm._l((_vm.sortKeys),function(item){return _c('v-list-item',{key:item.value,domProps:{\"textContent\":_vm._s(item.text)},on:{\"click\":function($event){_vm.sortBy = item.value}}})}),1)],1),_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":function($event){_vm.sortDesc = !_vm.sortDesc}}},[(!_vm.sortDesc)?_c('v-icon',[_vm._v(\"arrow_upward\")]):_vm._e(),(_vm.sortDesc)?_c('v-icon',[_vm._v(\"arrow_downward\")]):_vm._e()],1),_c('v-menu',{attrs:{\"left\":\"\",\"close-on-content-click\":false},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-btn',_vm._g({attrs:{\"icon\":\"\"}},on),[_c('v-icon',[_vm._v(\"search\")])],1)]}}])},[_c('v-card',[_c('v-text-field',{attrs:{\"clearable\":\"\",\"prepend-inner-icon\":\"search\",\"label\":\"Search\",\"hide-details\":\"\",\"solo\":\"\",\"dense\":\"\"},model:{value:(_vm.search),callback:function ($$v) {_vm.search=$$v},expression:\"search\"}})],1)],1),_c('v-btn',{staticStyle:{\"margin-right\":\"-15px\"},attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.toggleViewMode()}}},[(_vm.viewMode == 'panel')?_c('v-icon',[_vm._v(\"view_list\")]):_vm._e(),(_vm.viewMode == 'list')?_c('v-icon',[_vm._v(\"grid_on\")]):_vm._e()],1)],1),_c('v-data-iterator',{attrs:{\"items\":_vm.items,\"search\":_vm.search,\"sort-by\":_vm.sortBy,\"sort-desc\":_vm.sortDesc,\"custom-filter\":_vm.filteredItems,\"hide-default-footer\":\"\",\"disable-pagination\":\"\",\"loading\":\"\"},scopedSlots:_vm._u([{key:\"default\",fn:function(props){return [(_vm.viewMode == 'panel')?_c('v-container',{attrs:{\"fluid\":\"\"}},[_c('v-row',{attrs:{\"dense\":\"\",\"align-content\":\"stretch\",\"align\":\"stretch\"}},_vm._l((props.items),function(item){return _c('v-col',{key:item.item_id,attrs:{\"align-self\":\"stretch\"}},[_c('PanelviewItem',{attrs:{\"item\":item,\"thumbWidth\":_vm.thumbWidth,\"thumbHeight\":_vm.thumbHeight}})],1)}),1)],1):_vm._e(),(_vm.viewMode == 'list')?_c('v-list',{attrs:{\"two-line\":\"\"}},[_c('RecycleScroller',{staticClass:\"scroller\",attrs:{\"items\":props.items,\"item-size\":72,\"key-field\":\"item_id\",\"page-mode\":\"\"},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('ListviewItem',{attrs:{\"item\":item,\"hideavatar\":item.media_type == 3 ? _vm.$store.isMobile : false,\"hidetracknum\":true,\"hideproviders\":item.media_type < 4 ? _vm.$store.isMobile : false,\"hidelibrary\":true,\"hidemenu\":item.media_type == 3 ? _vm.$store.isMobile : false,\"hideduration\":item.media_type == 5}})]}}],null,true)})],1):_vm._e()]}}])})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',{directives:[{name:\"longpress\",rawName:\"v-longpress\",value:(_vm.menuClick),expression:\"menuClick\"}],attrs:{\"light\":\"\",\"min-height\":_vm.thumbHeight,\"min-width\":_vm.thumbWidth,\"max-width\":_vm.thumbWidth*1.6,\"hover\":\"\",\"outlined\":\"\"},on:{\"click\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"left\",37,$event.key,[\"Left\",\"ArrowLeft\"])){ return null; }if('button' in $event && $event.button !== 0){ return null; }_vm.onclickHandler ? _vm.onclickHandler(_vm.item) : _vm.itemClicked(_vm.item)},\"contextmenu\":[_vm.menuClick,function($event){$event.preventDefault();}]}},[_c('v-img',{attrs:{\"src\":_vm.$server.getImageUrl(_vm.item, 'image', _vm.thumbWidth),\"width\":\"100%\",\"aspect-ratio\":\"1\"}}),(_vm.isHiRes)?_c('div',{staticStyle:{\"position\":\"absolute\",\"margin-left\":\"5px\",\"margin-top\":\"-13px\",\"height\":\"30px\",\"background-color\":\"white\",\"border-radius\":\"3px\"}},[_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('img',_vm._g({attrs:{\"src\":require('../assets/hires.png'),\"height\":\"25\"}},on))]}}],null,false,1400808392)},[_c('span',[_vm._v(_vm._s(_vm.isHiRes))])])],1):_vm._e(),_c('v-divider'),_c('v-card-title',{class:_vm.$store.isMobile ? 'body-2' : 'title',staticStyle:{\"padding\":\"8px\",\"color\":\"primary\",\"margin-top\":\"8px\"},domProps:{\"textContent\":_vm._s(_vm.item.name)}}),(_vm.item.artist)?_c('v-card-subtitle',{class:_vm.$store.isMobile ? 'caption' : 'body-1',staticStyle:{\"padding\":\"8px\"},domProps:{\"textContent\":_vm._s(_vm.item.artist.name)}}):_vm._e(),(_vm.item.artists)?_c('v-card-subtitle',{class:_vm.$store.isMobile ? 'caption' : 'body-1',staticStyle:{\"padding\":\"8px\"},domProps:{\"textContent\":_vm._s(_vm.item.artists[0].name)}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <v-card\n light\n :min-height=\"thumbHeight\"\n :min-width=\"thumbWidth\"\n :max-width=\"thumbWidth*1.6\"\n hover\n outlined\n @click.left=\"onclickHandler ? onclickHandler(item) : itemClicked(item)\"\n @contextmenu=\"menuClick\"\n @contextmenu.prevent\n v-longpress=\"menuClick\"\n >\n <v-img\n :src=\"$server.getImageUrl(item, 'image', thumbWidth)\"\n width=\"100%\"\n aspect-ratio=\"1\"\n >\n </v-img>\n <div v-if=\"isHiRes\" style=\"position:absolute;margin-left:5px;margin-top:-13px;height:30px;background-color: white;border-radius: 3px;\">\n <v-tooltip bottom>\n <template v-slot:activator=\"{ on }\">\n <img :src=\"require('../assets/hires.png')\" height=\"25\" v-on=\"on\" />\n </template>\n <span>{{ isHiRes }}</span>\n </v-tooltip>\n </div>\n <v-divider />\n <v-card-title\n :class=\"$store.isMobile ? 'body-2' : 'title'\"\n v-text=\"item.name\"\n style=\"padding: 8px;color: primary;margin-top:8px\"\n />\n <v-card-subtitle\n :class=\"$store.isMobile ? 'caption' : 'body-1'\"\n v-text=\"item.artist.name\"\n v-if=\"item.artist\"\n style=\"padding: 8px\"\n />\n <v-card-subtitle\n :class=\"$store.isMobile ? 'caption' : 'body-1'\"\n v-text=\"item.artists[0].name\"\n v-if=\"item.artists\"\n style=\"padding: 8px\"\n />\n </v-card>\n</template>\n\n<script>\nimport Vue from 'vue'\n\nconst PRESS_TIMEOUT = 600\n\nVue.directive('longpress', {\n bind: function (el, { value }, vNode) {\n if (typeof value !== 'function') {\n Vue.$log.warn(`Expect a function, got ${value}`)\n return\n }\n let pressTimer = null\n const start = e => {\n if (e.type === 'click' && e.button !== 0) {\n return\n }\n if (pressTimer === null) {\n pressTimer = setTimeout(() => value(e), PRESS_TIMEOUT)\n }\n }\n const cancel = () => {\n if (pressTimer !== null) {\n clearTimeout(pressTimer)\n pressTimer = null\n }\n }\n ;['mousedown', 'touchstart'].forEach(e => el.addEventListener(e, start))\n ;['click', 'mouseout', 'touchend', 'touchcancel'].forEach(e => el.addEventListener(e, cancel))\n }\n})\n\nexport default Vue.extend({\n components: {\n },\n props: {\n item: Object,\n thumbHeight: Number,\n thumbWidth: Number,\n hideproviders: Boolean,\n hidelibrary: Boolean,\n onclickHandler: null\n },\n data () {\n return {\n touchMoving: false,\n cancelled: false\n }\n },\n computed: {\n isHiRes () {\n for (var prov of this.item.provider_ids) {\n if (prov.quality > 6) {\n if (prov.details) {\n return prov.details\n } else if (prov.quality === 7) {\n return '44.1/48khz 24 bits'\n } else if (prov.quality === 8) {\n return '88.2/96khz 24 bits'\n } else if (prov.quality === 9) {\n return '176/192khz 24 bits'\n } else {\n return '+192kHz 24 bits'\n }\n }\n }\n return ''\n }\n },\n created () { },\n beforeDestroy () {\n this.cancelled = true\n },\n mounted () { },\n methods: {\n itemClicked (mediaItem = null) {\n // mediaItem in the list is clicked\n let url = ''\n if (mediaItem.media_type === 1) {\n url = '/artists/' + mediaItem.item_id\n } else if (mediaItem.media_type === 2) {\n url = '/albums/' + mediaItem.item_id\n } else if (mediaItem.media_type === 4) {\n url = '/playlists/' + mediaItem.item_id\n } else {\n // assume track (or radio) item\n this.$server.$emit('showPlayMenu', mediaItem)\n return\n }\n this.$router.push({ path: url, query: { provider: mediaItem.provider } })\n },\n menuClick () {\n // contextmenu button clicked\n if (this.cancelled) return\n this.$server.$emit('showContextMenu', this.item)\n },\n async toggleLibrary (mediaItem) {\n // library button clicked on item\n this.cancelled = true\n await this.$server.toggleLibrary(mediaItem)\n this.cancelled = false\n }\n }\n})\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PanelviewItem.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PanelviewItem.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PanelviewItem.vue?vue&type=template&id=e92cc4a4&\"\nimport script from \"./PanelviewItem.vue?vue&type=script&lang=js&\"\nexport * from \"./PanelviewItem.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardSubtitle } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VCard,VCardSubtitle,VCardTitle,VDivider,VImg,VTooltip})\n","<template>\n <section>\n <v-app-bar\n flat\n light\n dense\n color=\"transparent\"\n style=\"margin-bottom:-8px;\"\n >\n <v-label light>{{ items.length + \" \" + $t(\"items\") }}</v-label>\n <v-spacer></v-spacer>\n <v-menu left :close-on-content-click=\"false\">\n <template v-slot:activator=\"{ on }\">\n <v-btn icon v-on=\"on\">\n <v-icon>sort</v-icon>\n </v-btn>\n </template>\n <v-list>\n <v-list-item\n v-for=\"item of sortKeys\"\n :key=\"item.value\"\n v-text=\"item.text\"\n @click=\"sortBy = item.value\"\n >\n </v-list-item>\n </v-list>\n </v-menu>\n <v-btn icon @click=\"sortDesc = !sortDesc\">\n <v-icon v-if=\"!sortDesc\">arrow_upward</v-icon>\n <v-icon v-if=\"sortDesc\">arrow_downward</v-icon>\n </v-btn>\n <v-menu left :close-on-content-click=\"false\">\n <template v-slot:activator=\"{ on }\">\n <v-btn icon v-on=\"on\">\n <v-icon>search</v-icon>\n </v-btn>\n </template>\n <v-card>\n <v-text-field\n v-model=\"search\"\n clearable\n prepend-inner-icon=\"search\"\n label=\"Search\"\n hide-details\n solo\n dense\n ></v-text-field>\n </v-card>\n </v-menu>\n <v-btn icon @click=\"toggleViewMode()\" style=\"margin-right:-15px;\">\n <v-icon v-if=\"viewMode == 'panel'\">view_list</v-icon>\n <v-icon v-if=\"viewMode == 'list'\">grid_on</v-icon>\n </v-btn>\n </v-app-bar>\n <v-data-iterator\n :items=\"items\"\n :search=\"search\"\n :sort-by=\"sortBy\"\n :sort-desc=\"sortDesc\"\n :custom-filter=\"filteredItems\"\n hide-default-footer\n disable-pagination\n loading\n >\n <template v-slot:default=\"props\">\n <v-container fluid v-if=\"viewMode == 'panel'\">\n <v-row dense align-content=\"stretch\" align=\"stretch\">\n <v-col\n v-for=\"item in props.items\"\n :key=\"item.item_id\"\n align-self=\"stretch\"\n >\n <PanelviewItem\n :item=\"item\"\n :thumbWidth=\"thumbWidth\"\n :thumbHeight=\"thumbHeight\"\n />\n </v-col>\n </v-row>\n </v-container>\n <v-list two-line v-if=\"viewMode == 'list'\">\n <RecycleScroller\n class=\"scroller\"\n :items=\"props.items\"\n :item-size=\"72\"\n key-field=\"item_id\"\n v-slot=\"{ item }\"\n page-mode\n >\n <ListviewItem\n v-bind:item=\"item\"\n :hideavatar=\"item.media_type == 3 ? $store.isMobile : false\"\n :hidetracknum=\"true\"\n :hideproviders=\"item.media_type < 4 ? $store.isMobile : false\"\n :hidelibrary=\"true\"\n :hidemenu=\"item.media_type == 3 ? $store.isMobile : false\"\n :hideduration=\"item.media_type == 5\"\n ></ListviewItem>\n </RecycleScroller>\n </v-list>\n </template>\n </v-data-iterator>\n </section>\n</template>\n\n<style scoped>\n.scroller {\n height: 100%;\n}\n</style>\n\n<script>\n// @ is an alias to /src\nimport ListviewItem from '@/components/ListviewItem.vue'\nimport PanelviewItem from '@/components/PanelviewItem.vue'\n\nexport default {\n components: {\n ListviewItem,\n PanelviewItem\n },\n props: [\n 'mediatype',\n 'endpoint'\n ],\n data () {\n return {\n items: [],\n viewMode: 'list',\n search: '',\n sortDesc: false,\n sortBy: 'name',\n sortKeys: [{ text: this.$t('sort_name'), value: 'name' }]\n }\n },\n created () {\n if (this.endpoint.includes('playlists/')) {\n // playlist tracks\n this.sortKeys.push({ text: this.$t('sort_position'), value: 'position' })\n this.sortKeys.push({ text: this.$t('sort_artist'), value: 'artists[0].name' })\n this.sortKeys.push({ text: this.$t('sort_album'), value: 'album.name' })\n this.sortBy = 'position'\n this.viewMode = 'list'\n } else if (this.endpoint.includes('tracks')) {\n // tracks listing\n this.sortKeys.push({ text: this.$t('sort_artist'), value: 'artists[0].name' })\n this.sortKeys.push({ text: this.$t('sort_album'), value: 'album.name' })\n this.viewMode = 'list'\n } else if (this.endpoint.includes('albums')) {\n // albums listing\n this.sortKeys.push({ text: this.$t('sort_artist'), value: 'artist.name' })\n this.sortKeys.push({ text: this.$t('sort_date'), value: 'year' })\n this.viewMode = 'panel'\n } else {\n this.viewMode = 'list'\n }\n // get stored viewMode for this endpoint\n const viewMode = localStorage.getItem('viewMode' + this.mediatype + this.endpoint)\n if (viewMode !== null) {\n this.viewMode = viewMode\n }\n this.getItems()\n this.$server.$on('refresh_listing', this.getItems)\n },\n computed: {\n thumbWidth () {\n return this.$store.isMobile ? 120 : 175\n },\n thumbHeight () {\n return this.thumbWidth * 1.5\n }\n },\n methods: {\n async getItems () {\n // retrieve the full list of items\n await this.$server.getAllItems(this.endpoint, this.items)\n },\n toggleViewMode () {\n if (this.viewMode === 'panel') this.viewMode = 'list'\n else this.viewMode = 'panel'\n localStorage.setItem('viewMode' + this.mediatype + this.endpoint, this.viewMode)\n },\n filteredItems (items, search) {\n if (!search) return items\n search = search.toLowerCase()\n const newLst = []\n for (const item of items) {\n if (item.name.toLowerCase().includes(search)) {\n newLst.push(item)\n } else if (item.artist && item.artist.name.toLowerCase().includes(search)) {\n newLst.push(item)\n } else if (item.album && item.album.name.toLowerCase().includes(search)) {\n newLst.push(item)\n } else if (item.artists && item.artists[0].name.toLowerCase().includes(search)) {\n newLst.push(item)\n }\n }\n return newLst\n }\n }\n}\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ItemsListing.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ItemsListing.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ItemsListing.vue?vue&type=template&id=764b0c8e&scoped=true&\"\nimport script from \"./ItemsListing.vue?vue&type=script&lang=js&\"\nexport * from \"./ItemsListing.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ItemsListing.vue?vue&type=style&index=0&id=764b0c8e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"764b0c8e\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VAppBar } from 'vuetify/lib/components/VAppBar';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VDataIterator } from 'vuetify/lib/components/VDataIterator';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VLabel } from 'vuetify/lib/components/VLabel';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VMenu } from 'vuetify/lib/components/VMenu';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\ninstallComponents(component, {VAppBar,VBtn,VCard,VCol,VContainer,VDataIterator,VIcon,VLabel,VList,VListItem,VMenu,VRow,VSpacer,VTextField})\n","module.exports = __webpack_public_path__ + \"img/demo_player.c079bd97.png\";","module.exports = __webpack_public_path__ + \"img/http_streamer.4c4e4880.png\";","module.exports = __webpack_public_path__ + \"img/homeassistant.29fe3282.png\";","module.exports = __webpack_public_path__ + \"img/webplayer.8e1a0da9.png\";","var map = {\n\t\"./en.json\": \"edd4\",\n\t\"./nl.json\": \"a625\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"49f8\";","module.exports = __webpack_public_path__ + \"img/default_artist.7305b29c.png\";","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-app',[_c('TopBar'),_c('NavigationMenu'),_c('v-main',[_c('router-view',{key:_vm.$route.path,attrs:{\"app\":\"\"}})],1),_c('PlayerOSD',{attrs:{\"showPlayerSelect\":_vm.showPlayerSelect}}),_c('ContextMenu'),_c('PlayerSelect'),_c('v-overlay',{attrs:{\"value\":_vm.$store.loading}},[_c('v-progress-circular',{attrs:{\"indeterminate\":\"\",\"size\":\"64\"}})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-navigation-drawer',{attrs:{\"dark\":\"\",\"app\":\"\",\"clipped\":\"\",\"temporary\":\"\"},model:{value:(_vm.$store.showNavigationMenu),callback:function ($$v) {_vm.$set(_vm.$store, \"showNavigationMenu\", $$v)},expression:\"$store.showNavigationMenu\"}},[_c('v-list',[_vm._l((_vm.items),function(item){return _c('v-list-item',{key:item.title,on:{\"click\":function($event){return _vm.$router.push(item.path)}}},[_c('v-list-item-action',[_c('v-icon',[_vm._v(_vm._s(item.icon))])],1),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(item.title))])],1)],1)}),_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":function($event){_vm.$store.showNavigationMenu=!_vm.$store.showNavigationMenu}}})],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <v-navigation-drawer dark app clipped temporary v-model=\"$store.showNavigationMenu\">\n <v-list>\n <v-list-item v-for=\"item in items\" :key=\"item.title\" @click=\"$router.push(item.path)\">\n <v-list-item-action>\n <v-icon>{{ item.icon }}</v-icon>\n </v-list-item-action>\n <v-list-item-content>\n <v-list-item-title>{{ item.title }}</v-list-item-title>\n </v-list-item-content>\n </v-list-item>\n <v-btn icon v-on:click=\"$store.showNavigationMenu=!$store.showNavigationMenu\" />\n </v-list>\n </v-navigation-drawer>\n</template>\n\n<script>\nimport Vue from 'vue'\n\nexport default Vue.extend({\n props: {},\n data () {\n return {\n items: [\n { title: this.$t('home'), icon: 'home', path: '/' },\n { title: this.$t('artists'), icon: 'person', path: '/artists' },\n { title: this.$t('albums'), icon: 'album', path: '/albums' },\n { title: this.$t('tracks'), icon: 'audiotrack', path: '/tracks' },\n { title: this.$t('playlists'), icon: 'playlist_play', path: '/playlists' },\n { title: this.$t('radios'), icon: 'radio', path: '/radios' },\n { title: this.$t('search'), icon: 'search', path: '/search' },\n { title: this.$t('settings'), icon: 'settings', path: '/config' }\n ]\n }\n },\n mounted () { },\n methods: {}\n})\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationMenu.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationMenu.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NavigationMenu.vue?vue&type=template&id=5fe9f182&\"\nimport script from \"./NavigationMenu.vue?vue&type=script&lang=js&\"\nexport * from \"./NavigationMenu.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAction } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VNavigationDrawer } from 'vuetify/lib/components/VNavigationDrawer';\ninstallComponents(component, {VBtn,VIcon,VList,VListItem,VListItemAction,VListItemContent,VListItemTitle,VNavigationDrawer})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-app-bar',{attrs:{\"app\":\"\",\"flat\":\"\",\"dense\":\"\",\"dark\":\"\",\"color\":_vm.color}},[_c('v-layout',[(!_vm.$store.topBarTransparent)?_c('div',{staticClass:\"body-1\",staticStyle:{\"position\":\"fixed\",\"width\":\"100%\",\"text-align\":\"center\",\"vertical-align\":\"center\",\"margin-top\":\"11px\"}},[_vm._v(_vm._s(_vm.$store.windowtitle))]):_vm._e(),_c('v-btn',{staticStyle:{\"margin-left\":\"-13px\"},attrs:{\"icon\":\"\"},on:{\"click\":function($event){_vm.$store.showNavigationMenu=!_vm.$store.showNavigationMenu}}},[_c('v-icon',[_vm._v(\"menu\")])],1),_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.$router.go(-1)}}},[_c('v-icon',[_vm._v(\"arrow_back\")])],1),_c('v-spacer'),(_vm.$store.topBarContextItem)?_c('v-btn',{staticStyle:{\"margin-right\":\"-23px\"},attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.$server.$emit('showContextMenu', _vm.$store.topBarContextItem)}}},[_c('v-icon',[_vm._v(\"more_vert\")])],1):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <v-app-bar app flat dense dark :color=\"color\">\n <v-layout>\n <div class=\"body-1\" v-if=\"!$store.topBarTransparent\" style=\"position:fixed;width:100%;text-align:center;vertical-align:center;margin-top:11px;\">{{ $store.windowtitle }}</div>\n <v-btn icon v-on:click=\"$store.showNavigationMenu=!$store.showNavigationMenu\" style=\"margin-left:-13px\">\n <v-icon>menu</v-icon>\n </v-btn>\n <v-btn @click=\"$router.go(-1)\" icon>\n <v-icon>arrow_back</v-icon>\n </v-btn>\n <v-spacer></v-spacer>\n <v-btn v-if=\"$store.topBarContextItem\" icon @click=\"$server.$emit('showContextMenu', $store.topBarContextItem)\" style=\"margin-right:-23px\">\n <v-icon>more_vert</v-icon>\n </v-btn>\n </v-layout>\n </v-app-bar>\n</template>\n\n<script>\nimport Vue from 'vue'\n\nexport default Vue.extend({\n props: { },\n data () {\n return {\n }\n },\n computed: {\n color () {\n if (this.$store.topBarTransparent) {\n return 'transparent'\n } else return 'black'\n }\n },\n mounted () { },\n methods: {}\n})\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TopBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TopBar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TopBar.vue?vue&type=template&id=0b1c8523&\"\nimport script from \"./TopBar.vue?vue&type=script&lang=js&\"\nexport * from \"./TopBar.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VAppBar } from 'vuetify/lib/components/VAppBar';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VLayout } from 'vuetify/lib/components/VGrid';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VAppBar,VBtn,VIcon,VLayout,VSpacer})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-dialog',{attrs:{\"max-width\":\"500px\"},on:{\"input\":function($event){return _vm.$emit('input', $event)}},model:{value:(_vm.visible),callback:function ($$v) {_vm.visible=$$v},expression:\"visible\"}},[_c('v-card',[(_vm.playlists.length === 0)?_c('v-list',[_c('v-subheader',{staticClass:\"title\"},[_vm._v(_vm._s(_vm.header))]),(_vm.subheader)?_c('v-subheader',[_vm._v(_vm._s(_vm.subheader))]):_vm._e(),_vm._l((_vm.menuItems),function(item){return _c('div',{key:item.label},[_c('v-list-item',{on:{\"click\":function($event){return _vm.itemCommand(item.action)}}},[_c('v-list-item-avatar',[_c('v-icon',[_vm._v(_vm._s(item.icon))])],1),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(_vm.$t(item.label)))])],1)],1),_c('v-divider')],1)})],2):_vm._e(),(_vm.playlists.length > 0)?_c('v-list',[_c('v-subheader',{staticClass:\"title\"},[_vm._v(_vm._s(_vm.header))]),_vm._l((_vm.playlists),function(item,index){return _c('listviewItem',{key:item.item_id,attrs:{\"item\":item,\"totalitems\":_vm.playlists.length,\"index\":index,\"hideavatar\":false,\"hidetracknum\":true,\"hideproviders\":false,\"hidelibrary\":true,\"hidemenu\":true,\"onclickHandler\":_vm.addToPlaylist}})})],2):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <v-dialog v-model=\"visible\" @input=\"$emit('input', $event)\" max-width=\"500px\">\r\n <v-card>\r\n <!-- normal contextmenu items -->\r\n <v-list v-if=\"playlists.length === 0\">\r\n <v-subheader class=\"title\">{{ header }}</v-subheader>\r\n <v-subheader v-if=\"subheader\">{{ subheader }}</v-subheader>\r\n <div v-for=\"item of menuItems\" :key=\"item.label\">\r\n <v-list-item @click=\"itemCommand(item.action)\">\r\n <v-list-item-avatar>\r\n <v-icon>{{ item.icon }}</v-icon>\r\n </v-list-item-avatar>\r\n <v-list-item-content>\r\n <v-list-item-title>{{ $t(item.label) }}</v-list-item-title>\r\n </v-list-item-content>\r\n </v-list-item>\r\n <v-divider></v-divider>\r\n </div>\r\n </v-list>\r\n <!-- playlists selection -->\r\n <v-list v-if=\"playlists.length > 0\">\r\n <v-subheader class=\"title\">{{ header }}</v-subheader>\r\n <listviewItem\r\n v-for=\"(item, index) in playlists\"\r\n :key=\"item.item_id\"\r\n v-bind:item=\"item\"\r\n v-bind:totalitems=\"playlists.length\"\r\n v-bind:index=\"index\"\r\n :hideavatar=\"false\"\r\n :hidetracknum=\"true\"\r\n :hideproviders=\"false\"\r\n :hidelibrary=\"true\"\r\n :hidemenu=\"true\"\r\n :onclickHandler=\"addToPlaylist\"\r\n ></listviewItem>\r\n </v-list>\r\n </v-card>\r\n </v-dialog>\r\n</template>\r\n\r\n<script>\r\nimport Vue from 'vue'\r\nimport ListviewItem from '@/components/ListviewItem.vue'\r\n\r\nexport default Vue.extend({\r\n components:\r\n {\r\n ListviewItem\r\n },\r\n props:\r\n {},\r\n watch:\r\n {},\r\n data () {\r\n return {\r\n visible: false,\r\n menuItems: [],\r\n header: '',\r\n subheader: '',\r\n curItem: null,\r\n curPlaylist: null,\r\n playerQueueItems: [],\r\n playlists: []\r\n }\r\n },\r\n mounted () { },\r\n created () {\r\n this.$server.$on('showContextMenu', this.showContextMenu)\r\n this.$server.$on('showPlayMenu', this.showPlayMenu)\r\n },\r\n computed: {\r\n },\r\n methods: {\r\n showContextMenu (mediaItem) {\r\n // show contextmenu items for the given mediaItem\r\n this.playlists = []\r\n if (!mediaItem) return\r\n this.curItem = mediaItem\r\n const curBrowseContext = this.$store.topBarContextItem\r\n const menuItems = []\r\n // show info\r\n if (mediaItem !== curBrowseContext) {\r\n menuItems.push({\r\n label: 'show_info',\r\n action: 'info',\r\n icon: 'info'\r\n })\r\n }\r\n // add to library\r\n if (mediaItem.in_library.length === 0) {\r\n menuItems.push({\r\n label: 'add_library',\r\n action: 'toggle_library',\r\n icon: 'favorite_border'\r\n })\r\n }\r\n // remove from library\r\n if (mediaItem.in_library.length > 0) {\r\n menuItems.push({\r\n label: 'remove_library',\r\n action: 'toggle_library',\r\n icon: 'favorite'\r\n })\r\n }\r\n // remove from playlist (playlist tracks only)\r\n if (curBrowseContext && curBrowseContext.media_type === 4) {\r\n this.curPlaylist = curBrowseContext\r\n if (mediaItem.media_type === 3 && curBrowseContext.is_editable) {\r\n menuItems.push({\r\n label: 'remove_playlist',\r\n action: 'remove_playlist',\r\n icon: 'remove_circle_outline'\r\n })\r\n }\r\n }\r\n // add to playlist action (tracks only)\r\n if (mediaItem.media_type === 3) {\r\n menuItems.push({\r\n label: 'add_playlist',\r\n action: 'add_playlist',\r\n icon: 'add_circle_outline'\r\n })\r\n }\r\n this.menuItems = menuItems\r\n this.header = mediaItem.name\r\n this.subheader = ''\r\n this.visible = true\r\n },\r\n showPlayMenu (mediaItem) {\r\n // show playmenu items for the given mediaItem\r\n this.playlists = []\r\n this.curItem = mediaItem\r\n if (!mediaItem) return\r\n const menuItems = [\r\n {\r\n label: 'play_now',\r\n action: 'play',\r\n icon: 'play_circle_outline'\r\n },\r\n {\r\n label: 'play_next',\r\n action: 'next',\r\n icon: 'queue_play_next'\r\n },\r\n {\r\n label: 'add_queue',\r\n action: 'add',\r\n icon: 'playlist_add'\r\n }\r\n ]\r\n this.menuItems = menuItems\r\n this.header = mediaItem.name\r\n this.subheader = ''\r\n this.visible = true\r\n },\r\n async showPlaylistsMenu () {\r\n // get all editable playlists\r\n const trackProviders = []\r\n for (const item of this.curItem.provider_ids) {\r\n trackProviders.push(item.provider)\r\n }\r\n const playlists = await this.$server.getData('library/playlists')\r\n const items = []\r\n for (var playlist of playlists.items) {\r\n if (\r\n playlist.is_editable &&\r\n (!this.curPlaylist || playlist.item_id !== this.curPlaylist.item_id)\r\n ) {\r\n for (const item of playlist.provider_ids) {\r\n if (trackProviders.includes(item.provider)) {\r\n items.push(playlist)\r\n break\r\n }\r\n }\r\n }\r\n }\r\n this.playlists = items\r\n },\r\n itemCommand (cmd) {\r\n if (cmd === 'info') {\r\n // show media info\r\n let endpoint = ''\r\n if (this.curItem.media_type === 1) endpoint = 'artists'\r\n if (this.curItem.media_type === 2) endpoint = 'albums'\r\n if (this.curItem.media_type === 3) endpoint = 'tracks'\r\n if (this.curItem.media_type === 4) endpoint = 'playlists'\r\n if (this.curItem.media_type === 5) endpoint = 'radios'\r\n this.$router.push({\r\n path: '/' + endpoint + '/' + this.curItem.item_id,\r\n query: { provider: this.curItem.provider }\r\n })\r\n this.visible = false\r\n } else if (cmd === 'playmenu') {\r\n // show play menu\r\n return this.showPlayMenu(this.curItem)\r\n } else if (cmd === 'add_playlist') {\r\n // add to playlist\r\n return this.showPlaylistsMenu()\r\n } else if (cmd === 'remove_playlist') {\r\n // remove track from playlist\r\n this.removeFromPlaylist(\r\n this.curItem,\r\n this.curPlaylist.item_id,\r\n 'playlist_remove'\r\n )\r\n this.visible = false\r\n } else if (cmd === 'toggle_library') {\r\n // add/remove to/from library\r\n this.$server.toggleLibrary(this.curItem)\r\n this.visible = false\r\n } else {\r\n // assume play command\r\n this.$server.playItem(this.curItem, cmd)\r\n this.visible = false\r\n }\r\n },\r\n addToPlaylist (playlistObj) {\r\n /// add track to playlist\r\n const endpoint = 'playlists/' + playlistObj.item_id + '/tracks'\r\n this.$server.putData(endpoint, this.curItem)\r\n .then(result => {\r\n this.visible = false\r\n })\r\n },\r\n removeFromPlaylist (track, playlistId) {\r\n /// remove track from playlist\r\n const endpoint = 'playlists/' + playlistId + '/tracks'\r\n this.$server.deleteData(endpoint, track)\r\n .then(result => {\r\n // reload listing\r\n this.$server.$emit('refresh_listing')\r\n })\r\n }\r\n }\r\n})\r\n</script>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContextMenu.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContextMenu.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ContextMenu.vue?vue&type=template&id=0f9be24a&\"\nimport script from \"./ContextMenu.vue?vue&type=script&lang=js&\"\nexport * from \"./ContextMenu.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAvatar } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VSubheader } from 'vuetify/lib/components/VSubheader';\ninstallComponents(component, {VCard,VDialog,VDivider,VIcon,VList,VListItem,VListItemAvatar,VListItemContent,VListItemTitle,VSubheader})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-footer',{staticStyle:{\"background-color\":\"black\"},attrs:{\"app\":\"\",\"fixed\":\"\",\"padless\":\"\",\"light\":\"\",\"elevation\":\"10\"}},[(!_vm.$store.isMobile)?_c('v-card',{staticStyle:{\"margin-top\":\"1px\"},attrs:{\"dense\":\"\",\"flat\":\"\",\"light\":\"\",\"subheader\":\"\",\"tile\":\"\",\"width\":\"100%\",\"color\":\"#E0E0E0\"}},[_c('v-list-item',{attrs:{\"two-line\":\"\"}},[(_vm.curQueueItem)?_c('v-list-item-avatar',{attrs:{\"tile\":\"\"}},[_c('img',{staticStyle:{\"border\":\"1px solid rgba(0,0,0,.54)\"},attrs:{\"src\":_vm.$server.getImageUrl(_vm.curQueueItem),\"lazy-src\":require('../assets/file.png')}})]):_c('v-list-item-avatar',[_c('v-icon',[_vm._v(\"speaker\")])],1),_c('v-list-item-content',[(_vm.curQueueItem)?_c('v-list-item-title',[_vm._v(\" \"+_vm._s(_vm.curQueueItem.name))]):(_vm.$server.activePlayer)?_c('v-list-item-title',[_vm._v(\" \"+_vm._s(_vm.$server.activePlayer.name))]):_vm._e(),(_vm.curQueueItem)?_c('v-list-item-subtitle',{staticStyle:{\"color\":\"primary\"}},_vm._l((_vm.curQueueItem.artists),function(artist,artistindex){return _c('span',{key:artistindex},[_c('a',{on:{\"click\":[function($event){return _vm.artistClick(artist)},function($event){$event.stopPropagation();}]}},[_vm._v(_vm._s(artist.name))]),(artistindex + 1 < _vm.curQueueItem.artists.length)?_c('label',{key:artistindex},[_vm._v(\" / \")]):_vm._e()])}),0):_vm._e()],1),(_vm.streamDetails)?_c('v-list-item-action',[_c('v-menu',{attrs:{\"close-on-content-click\":false,\"nudge-width\":250,\"offset-x\":\"\",\"top\":\"\"},nativeOn:{\"click\":function($event){$event.preventDefault();}},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-btn',_vm._g({attrs:{\"icon\":\"\"}},on),[(_vm.streamDetails.quality > 6)?_c('v-img',{attrs:{\"contain\":\"\",\"src\":require('../assets/hires.png'),\"height\":\"30\"}}):_vm._e(),(_vm.streamDetails.quality <= 6)?_c('v-img',{staticStyle:{\"filter\":\"invert(100%)\"},attrs:{\"contain\":\"\",\"src\":_vm.streamDetails.content_type ? require('../assets/' + _vm.streamDetails.content_type + '.png') : '',\"height\":\"30\"}}):_vm._e()],1)]}}],null,false,872579316)},[(_vm.streamDetails)?_c('v-list',[_c('v-subheader',{staticClass:\"title\"},[_vm._v(_vm._s(_vm.$t('stream_details')))]),_c('v-list-item',{attrs:{\"tile\":\"\",\"dense\":\"\"}},[_c('v-list-item-icon',[_c('v-img',{attrs:{\"max-width\":\"50\",\"contain\":\"\",\"src\":_vm.streamDetails.provider ? require('../assets/' + _vm.streamDetails.provider + '.png') : ''}})],1),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(_vm.streamDetails.provider))])],1)],1),_c('v-divider'),_c('v-list-item',{attrs:{\"tile\":\"\",\"dense\":\"\"}},[_c('v-list-item-icon',[_c('v-img',{staticStyle:{\"filter\":\"invert(100%)\"},attrs:{\"max-width\":\"50\",\"contain\":\"\",\"src\":_vm.streamDetails.content_type ? require('../assets/' + _vm.streamDetails.content_type + '.png') : ''}})],1),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(_vm.streamDetails.sample_rate/1000)+\" kHz / \"+_vm._s(_vm.streamDetails.bit_depth)+\" bits \")])],1)],1),_c('v-divider'),(_vm.playerQueueDetails.crossfade_enabled)?_c('div',[_c('v-list-item',{attrs:{\"tile\":\"\",\"dense\":\"\"}},[_c('v-list-item-icon',[_c('v-img',{attrs:{\"max-width\":\"50\",\"contain\":\"\",\"src\":require('../assets/crossfade.png')}})],1),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(_vm.$t('crossfade_enabled')))])],1)],1),_c('v-divider')],1):_vm._e(),(_vm.streamVolumeLevelAdjustment)?_c('div',[_c('v-list-item',{attrs:{\"tile\":\"\",\"dense\":\"\"}},[_c('v-list-item-icon',[_c('v-icon',{staticStyle:{\"margin-left\":\"13px\"},attrs:{\"color\":\"black\"}},[_vm._v(\"volume_up\")])],1),_c('v-list-item-content',[_c('v-list-item-title',{staticStyle:{\"margin-left\":\"12px\"}},[_vm._v(_vm._s(_vm.streamVolumeLevelAdjustment))])],1)],1),_c('v-divider')],1):_vm._e()],1):_vm._e()],1)],1):_vm._e()],1),_c('div',{staticClass:\"body-2\",staticStyle:{\"height\":\"30px\",\"width\":\"100%\",\"color\":\"rgba(0,0,0,.65)\",\"margin-top\":\"-12px\",\"background-color\":\"#E0E0E0\"},attrs:{\"align\":\"center\"}},[(_vm.curQueueItem)?_c('div',{staticStyle:{\"height\":\"12px\",\"margin-left\":\"22px\",\"margin-right\":\"20px\",\"margin-top\":\"2px\"}},[_c('span',{staticClass:\"left\"},[_vm._v(\" \"+_vm._s(_vm.playerCurTimeStr)+\" \")]),_c('span',{staticClass:\"right\"},[_vm._v(\" \"+_vm._s(_vm.playerTotalTimeStr)+\" \")])]):_vm._e()]),(_vm.curQueueItem)?_c('v-progress-linear',{style:('margin-top:-22px;margin-left:80px;width:' + _vm.progressBarWidth + 'px;'),attrs:{\"fixed\":\"\",\"light\":\"\",\"value\":_vm.progress}}):_vm._e()],1):_vm._e(),_c('v-list-item',{staticStyle:{\"height\":\"44px\",\"margin-bottom\":\"5px\",\"margin-top\":\"-4px\",\"background-color\":\"black\"},attrs:{\"dark\":\"\",\"dense\":\"\"}},[(_vm.$server.activePlayer)?_c('v-list-item-action',{staticStyle:{\"margin-top\":\"15px\"}},[_c('v-btn',{attrs:{\"small\":\"\",\"icon\":\"\"},on:{\"click\":function($event){return _vm.playerCommand('previous')}}},[_c('v-icon',[_vm._v(\"skip_previous\")])],1)],1):_vm._e(),(_vm.$server.activePlayer)?_c('v-list-item-action',{staticStyle:{\"margin-left\":\"-32px\",\"margin-top\":\"15px\"}},[_c('v-btn',{attrs:{\"icon\":\"\",\"x-large\":\"\"},on:{\"click\":function($event){return _vm.playerCommand('play_pause')}}},[_c('v-icon',{attrs:{\"size\":\"50\"}},[_vm._v(_vm._s(_vm.$server.activePlayer.state == \"playing\" ? \"pause\" : \"play_arrow\"))])],1)],1):_vm._e(),(_vm.$server.activePlayer)?_c('v-list-item-action',{staticStyle:{\"margin-top\":\"15px\"}},[_c('v-btn',{attrs:{\"icon\":\"\",\"small\":\"\"},on:{\"click\":function($event){return _vm.playerCommand('next')}}},[_c('v-icon',[_vm._v(\"skip_next\")])],1)],1):_vm._e(),_c('v-list-item-content'),(_vm.$server.activePlayer)?_c('v-list-item-action',{staticStyle:{\"padding\":\"28px\"}},[_c('v-btn',{attrs:{\"small\":\"\",\"text\":\"\",\"icon\":\"\"},on:{\"click\":function($event){return _vm.$router.push('/playerqueue/')}}},[_c('v-flex',{staticClass:\"vertical-btn\",attrs:{\"xs12\":\"\"}},[_c('v-icon',[_vm._v(\"queue_music\")]),_c('span',{staticClass:\"caption\"},[_vm._v(_vm._s(_vm.$t(\"queue\")))])],1)],1)],1):_vm._e(),(_vm.$server.activePlayer && !_vm.$store.isMobile)?_c('v-list-item-action',{staticStyle:{\"padding\":\"20px\"}},[_c('v-menu',{attrs:{\"close-on-content-click\":false,\"nudge-width\":250,\"offset-x\":\"\",\"top\":\"\"},nativeOn:{\"click\":function($event){$event.preventDefault();}},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-btn',_vm._g({attrs:{\"small\":\"\",\"icon\":\"\"}},on),[_c('v-flex',{staticClass:\"vertical-btn\",attrs:{\"xs12\":\"\"}},[_c('v-icon',[_vm._v(\"volume_up\")]),_c('span',{staticClass:\"caption\"},[_vm._v(_vm._s(Math.round(_vm.$server.activePlayer.volume_level)))])],1)],1)]}}],null,false,1360689196)},[_c('VolumeControl',{attrs:{\"players\":_vm.$server.players,\"player_id\":_vm.$server.activePlayer.player_id}})],1)],1):_vm._e(),_c('v-list-item-action',{staticStyle:{\"padding\":\"20px\",\"margin-right\":\"15px\"}},[_c('v-btn',{attrs:{\"small\":\"\",\"text\":\"\",\"icon\":\"\"},on:{\"click\":function($event){return _vm.$server.$emit('showPlayersMenu')}}},[_c('v-flex',{staticClass:\"vertical-btn\",attrs:{\"xs12\":\"\"}},[_c('v-icon',[_vm._v(\"speaker\")]),(_vm.$server.activePlayer)?_c('span',{staticClass:\"caption\"},[_vm._v(_vm._s(_vm.$server.activePlayer.name))]):_c('span',{staticClass:\"caption\"})],1)],1)],1)],1),(_vm.$store.isInStandaloneMode)?_c('v-card',{staticStyle:{\"height\":\"20px\"},attrs:{\"dense\":\"\",\"flat\":\"\",\"light\":\"\",\"subheader\":\"\",\"tile\":\"\",\"width\":\"100%\",\"color\":\"black\"}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',[_c('v-list',[_c('v-list-item',{staticStyle:{\"height\":\"50px\",\"padding-bottom\":\"5\"}},[_c('v-list-item-avatar',{staticStyle:{\"margin-left\":\"-10px\"},attrs:{\"tile\":\"\"}},[_c('v-icon',{attrs:{\"large\":\"\"}},[_vm._v(_vm._s(_vm.players[_vm.player_id].is_group ? \"speaker_group\" : \"speaker\"))])],1),_c('v-list-item-content',{staticStyle:{\"margin-left\":\"-15px\"}},[_c('v-list-item-title',[_vm._v(_vm._s(_vm.players[_vm.player_id].name))]),_c('v-list-item-subtitle',[_vm._v(_vm._s(_vm.$t(\"state.\" + _vm.players[_vm.player_id].state)))])],1)],1),_c('v-divider'),_vm._l((_vm.volumePlayerIds),function(child_id){return _c('div',{key:child_id},[_c('div',{staticClass:\"body-2\",style:(!_vm.players[child_id].powered\n ? 'color:rgba(0,0,0,.38);'\n : 'color:rgba(0,0,0,.54);')},[_c('v-btn',{staticStyle:{\"margin-left\":\"8px\"},style:(!_vm.players[child_id].powered\n ? 'color:rgba(0,0,0,.38);'\n : 'color:rgba(0,0,0,.54);'),attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.togglePlayerPower(child_id)}}},[_c('v-icon',[_vm._v(\"power_settings_new\")])],1),_c('span',{staticStyle:{\"margin-left\":\"10px\"}},[_vm._v(_vm._s(_vm.players[child_id].name))]),_c('div',{staticStyle:{\"margin-top\":\"-8px\",\"margin-left\":\"15px\",\"margin-right\":\"15px\",\"height\":\"35px\"}},[_c('v-slider',{attrs:{\"lazy\":\"\",\"disabled\":!_vm.players[child_id].powered,\"value\":Math.round(_vm.players[child_id].volume_level),\"prepend-icon\":\"volume_down\",\"append-icon\":\"volume_up\"},on:{\"end\":function($event){return _vm.setPlayerVolume(child_id, $event)},\"click:append\":function($event){return _vm.setPlayerVolume(child_id, 'up')},\"click:prepend\":function($event){return _vm.setPlayerVolume(child_id, 'down')}}})],1)],1),_c('v-divider')],1)})],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <v-card>\n <v-list>\n <v-list-item style=\"height:50px;padding-bottom:5;\">\n <v-list-item-avatar tile style=\"margin-left:-10px;\">\n <v-icon large>{{\n players[player_id].is_group ? \"speaker_group\" : \"speaker\"\n }}</v-icon>\n </v-list-item-avatar>\n <v-list-item-content style=\"margin-left:-15px;\">\n <v-list-item-title>{{ players[player_id].name }}</v-list-item-title>\n <v-list-item-subtitle>{{\n $t(\"state.\" + players[player_id].state)\n }}</v-list-item-subtitle>\n </v-list-item-content>\n </v-list-item>\n <v-divider></v-divider>\n <div v-for=\"child_id in volumePlayerIds\" :key=\"child_id\">\n <div\n class=\"body-2\"\n :style=\"\n !players[child_id].powered\n ? 'color:rgba(0,0,0,.38);'\n : 'color:rgba(0,0,0,.54);'\n \"\n >\n <v-btn\n icon\n @click=\"togglePlayerPower(child_id)\"\n style=\"margin-left:8px\"\n :style=\"\n !players[child_id].powered\n ? 'color:rgba(0,0,0,.38);'\n : 'color:rgba(0,0,0,.54);'\n \"\n >\n <v-icon>power_settings_new</v-icon>\n </v-btn>\n <span style=\"margin-left:10px\">{{ players[child_id].name }}</span>\n <div\n style=\"margin-top:-8px;margin-left:15px;margin-right:15px;height:35px;\"\n >\n <v-slider\n lazy\n :disabled=\"!players[child_id].powered\"\n :value=\"Math.round(players[child_id].volume_level)\"\n prepend-icon=\"volume_down\"\n append-icon=\"volume_up\"\n @end=\"setPlayerVolume(child_id, $event)\"\n @click:append=\"setPlayerVolume(child_id, 'up')\"\n @click:prepend=\"setPlayerVolume(child_id, 'down')\"\n ></v-slider>\n </div>\n </div>\n <v-divider></v-divider>\n </div>\n </v-list>\n </v-card>\n</template>\n\n<script>\nimport Vue from 'vue'\n\nexport default Vue.extend({\n props: ['value', 'players', 'player_id'],\n data () {\n return {}\n },\n computed: {\n volumePlayerIds () {\n var allIds = [this.player_id]\n allIds.push(...this.players[this.player_id].group_childs)\n return allIds\n }\n },\n mounted () { },\n methods: {\n setPlayerVolume: function (playerId, newVolume) {\n this.players[playerId].volume_level = newVolume\n if (newVolume === 'up') {\n this.$server.playerCommand('volume_up', null, playerId)\n } else if (newVolume === 'down') {\n this.$server.playerCommand('volume_down', null, playerId)\n } else {\n this.$server.playerCommand('volume_set', newVolume, playerId)\n }\n },\n togglePlayerPower: function (playerId) {\n this.$server.playerCommand('power_toggle', null, playerId)\n }\n }\n})\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VolumeControl.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VolumeControl.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./VolumeControl.vue?vue&type=template&id=0d55ee4e&\"\nimport script from \"./VolumeControl.vue?vue&type=script&lang=js&\"\nexport * from \"./VolumeControl.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAvatar } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemSubtitle } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VSlider } from 'vuetify/lib/components/VSlider';\ninstallComponents(component, {VBtn,VCard,VDivider,VIcon,VList,VListItem,VListItemAvatar,VListItemContent,VListItemSubtitle,VListItemTitle,VSlider})\n","<template>\n <v-footer\n app\n fixed\n padless\n light\n elevation=\"10\"\n style=\"background-color: black;\"\n >\n <v-card\n dense\n flat\n light\n subheader\n tile\n width=\"100%\"\n color=\"#E0E0E0\"\n style=\"margin-top:1px;\"\n v-if=\"!$store.isMobile\"\n >\n <!-- now playing media -->\n <v-list-item two-line>\n <v-list-item-avatar tile v-if=\"curQueueItem\">\n <img\n :src=\"$server.getImageUrl(curQueueItem)\"\n :lazy-src=\"require('../assets/file.png')\"\n style=\"border: 1px solid rgba(0,0,0,.54);\"\n />\n </v-list-item-avatar>\n <v-list-item-avatar v-else>\n <v-icon>speaker</v-icon>\n </v-list-item-avatar>\n\n <v-list-item-content>\n <v-list-item-title v-if=\"curQueueItem\">\n {{ curQueueItem.name }}</v-list-item-title\n >\n <v-list-item-title v-else-if=\"$server.activePlayer\">\n {{ $server.activePlayer.name }}</v-list-item-title\n >\n <v-list-item-subtitle v-if=\"curQueueItem\" style=\"color: primary\">\n <span\n v-for=\"(artist, artistindex) in curQueueItem.artists\"\n :key=\"artistindex\"\n >\n <a v-on:click=\"artistClick(artist)\" @click.stop=\"\">{{\n artist.name\n }}</a>\n <label\n v-if=\"artistindex + 1 < curQueueItem.artists.length\"\n :key=\"artistindex\"\n >\n /\n </label>\n </span>\n </v-list-item-subtitle>\n </v-list-item-content>\n <!-- streaming quality details -->\n <v-list-item-action v-if=\"streamDetails\">\n <v-menu\n :close-on-content-click=\"false\"\n :nudge-width=\"250\"\n offset-x\n top\n @click.native.prevent\n >\n <template v-slot:activator=\"{ on }\">\n <v-btn icon v-on=\"on\">\n <v-img contain v-if=\"streamDetails.quality > 6\" :src=\"require('../assets/hires.png')\" height=\"30\" />\n <v-img contain v-if=\"streamDetails.quality <= 6\" :src=\"streamDetails.content_type ? require('../assets/' + streamDetails.content_type + '.png') : ''\" height=\"30\" style='filter: invert(100%);' />\n </v-btn>\n </template>\n <v-list v-if=\"streamDetails\">\n <v-subheader class=\"title\">{{ $t('stream_details') }}</v-subheader>\n <v-list-item tile dense>\n <v-list-item-icon>\n <v-img max-width=\"50\" contain :src=\"streamDetails.provider ? require('../assets/' + streamDetails.provider + '.png') : ''\" />\n </v-list-item-icon>\n <v-list-item-content>\n <v-list-item-title>{{ streamDetails.provider }}</v-list-item-title>\n </v-list-item-content>\n </v-list-item>\n <v-divider></v-divider>\n <v-list-item tile dense>\n <v-list-item-icon>\n <v-img max-width=\"50\" contain :src=\"streamDetails.content_type ? require('../assets/' + streamDetails.content_type + '.png') : ''\" style='filter: invert(100%);' />\n </v-list-item-icon>\n <v-list-item-content>\n <v-list-item-title>{{ streamDetails.sample_rate/1000 }} kHz / {{ streamDetails.bit_depth }} bits </v-list-item-title>\n </v-list-item-content>\n </v-list-item>\n <v-divider></v-divider>\n <div v-if=\"playerQueueDetails.crossfade_enabled\">\n <v-list-item tile dense>\n <v-list-item-icon>\n <v-img max-width=\"50\" contain :src=\"require('../assets/crossfade.png')\"/>\n </v-list-item-icon>\n <v-list-item-content>\n <v-list-item-title>{{ $t('crossfade_enabled') }}</v-list-item-title>\n </v-list-item-content>\n </v-list-item>\n <v-divider></v-divider>\n </div>\n <div v-if=\"streamVolumeLevelAdjustment\">\n <v-list-item tile dense>\n <v-list-item-icon>\n <v-icon color=\"black\" style=\"margin-left:13px\">volume_up</v-icon>\n </v-list-item-icon>\n <v-list-item-content>\n <v-list-item-title style=\"margin-left:12px\">{{ streamVolumeLevelAdjustment }}</v-list-item-title>\n </v-list-item-content>\n </v-list-item>\n <v-divider></v-divider>\n </div>\n </v-list>\n </v-menu>\n </v-list-item-action>\n </v-list-item>\n\n <!-- progress bar -->\n <div\n class=\"body-2\"\n style=\"height:30px;width:100%;color:rgba(0,0,0,.65);margin-top:-12px;background-color:#E0E0E0;\"\n align=\"center\"\n >\n <div\n style=\"height:12px;margin-left:22px;margin-right:20px;margin-top:2px;\"\n v-if=\"curQueueItem\"\n >\n <span class=\"left\">\n {{ playerCurTimeStr }}\n </span>\n <span class=\"right\">\n {{ playerTotalTimeStr }}\n </span>\n </div>\n </div>\n <v-progress-linear\n fixed\n light\n :value=\"progress\"\n v-if=\"curQueueItem\"\n :style=\"\n 'margin-top:-22px;margin-left:80px;width:' + progressBarWidth + 'px;'\n \"\n />\n </v-card>\n\n <!-- Control buttons -->\n <v-list-item\n dark\n dense\n style=\"height:44px;margin-bottom:5px;margin-top:-4px;background-color:black;\"\n >\n <v-list-item-action v-if=\"$server.activePlayer\" style=\"margin-top:15px\">\n <v-btn small icon @click=\"playerCommand('previous')\">\n <v-icon>skip_previous</v-icon>\n </v-btn>\n </v-list-item-action>\n <v-list-item-action\n v-if=\"$server.activePlayer\"\n style=\"margin-left:-32px;margin-top:15px\"\n >\n <v-btn icon x-large @click=\"playerCommand('play_pause')\">\n <v-icon size=\"50\">{{\n $server.activePlayer.state == \"playing\" ? \"pause\" : \"play_arrow\"\n }}</v-icon>\n </v-btn>\n </v-list-item-action>\n <v-list-item-action v-if=\"$server.activePlayer\" style=\"margin-top:15px\">\n <v-btn icon small @click=\"playerCommand('next')\">\n <v-icon>skip_next</v-icon>\n </v-btn>\n </v-list-item-action>\n <!-- player controls -->\n <v-list-item-content> </v-list-item-content>\n\n <!-- active player queue button -->\n <v-list-item-action style=\"padding:28px;\" v-if=\"$server.activePlayer\">\n <v-btn\n small\n text\n icon\n @click=\"$router.push('/playerqueue/')\"\n >\n <v-flex xs12 class=\"vertical-btn\">\n <v-icon>queue_music</v-icon>\n <span class=\"caption\">{{ $t(\"queue\") }}</span>\n </v-flex>\n </v-btn>\n </v-list-item-action>\n\n <!-- active player volume -->\n <v-list-item-action style=\"padding:20px;\" v-if=\"$server.activePlayer && !$store.isMobile\">\n <v-menu\n :close-on-content-click=\"false\"\n :nudge-width=\"250\"\n offset-x\n top\n @click.native.prevent\n >\n <template v-slot:activator=\"{ on }\">\n <v-btn small icon v-on=\"on\">\n <v-flex xs12 class=\"vertical-btn\">\n <v-icon>volume_up</v-icon>\n <span class=\"caption\">{{\n Math.round($server.activePlayer.volume_level)\n }}</span>\n </v-flex>\n </v-btn>\n </template>\n <VolumeControl\n v-bind:players=\"$server.players\"\n v-bind:player_id=\"$server.activePlayer.player_id\"\n />\n </v-menu>\n </v-list-item-action>\n\n <!-- active player btn -->\n <v-list-item-action style=\"padding:20px;margin-right:15px\">\n <v-btn small text icon @click=\"$server.$emit('showPlayersMenu')\">\n <v-flex xs12 class=\"vertical-btn\">\n <v-icon>speaker</v-icon>\n <span class=\"caption\" v-if=\"$server.activePlayer\">{{\n $server.activePlayer.name\n }}</span>\n <span class=\"caption\" v-else> </span>\n </v-flex>\n </v-btn>\n </v-list-item-action>\n </v-list-item>\n <!-- add some additional whitespace in standalone mode only -->\n <v-card\n dense\n flat\n light\n subheader\n tile\n width=\"100%\"\n color=\"black\"\n style=\"height:20px\" v-if=\"$store.isInStandaloneMode\"/>\n </v-footer>\n</template>\n\n<style scoped>\n.vertical-btn {\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n.divider {\n height: 1px;\n width: 100%;\n background-color: #cccccc;\n}\n.right {\n float: right;\n}\n.left {\n float: left;\n}\n</style>\n\n<script>\nimport Vue from 'vue'\nimport VolumeControl from '@/components/VolumeControl.vue'\n\nexport default Vue.extend({\n components: {\n VolumeControl\n },\n props: [],\n data () {\n return {\n playerQueueDetails: {}\n }\n },\n watch: { },\n computed: {\n curQueueItem () {\n if (this.playerQueueDetails) {\n return this.playerQueueDetails.cur_item\n } else {\n return null\n }\n },\n progress () {\n if (!this.curQueueItem) return 0\n var totalSecs = this.curQueueItem.duration\n var curSecs = this.playerQueueDetails.cur_item_time\n var curPercent = curSecs / totalSecs * 100\n return curPercent\n },\n playerCurTimeStr () {\n if (!this.curQueueItem) return '0:00'\n var curSecs = this.playerQueueDetails.cur_item_time\n return curSecs.toString().formatDuration()\n },\n playerTotalTimeStr () {\n if (!this.curQueueItem) return '0:00'\n var totalSecs = this.curQueueItem.duration\n return totalSecs.toString().formatDuration()\n },\n progressBarWidth () {\n return window.innerWidth - 160\n },\n streamDetails () {\n if (!this.playerQueueDetails.cur_item || !this.playerQueueDetails.cur_item || !this.playerQueueDetails.cur_item.streamdetails.provider || !this.playerQueueDetails.cur_item.streamdetails.content_type) return {}\n return this.playerQueueDetails.cur_item.streamdetails\n },\n streamVolumeLevelAdjustment () {\n if (!this.streamDetails || !this.streamDetails.sox_options) return ''\n if (this.streamDetails.sox_options.includes('vol ')) {\n var re = /(.*vol\\s+)(.*)(\\s+dB.*)/\n var volLevel = this.streamDetails.sox_options.replace(re, '$2')\n return volLevel + ' dB'\n }\n return ''\n }\n },\n created () {\n this.$server.$on('queue updated', this.queueUpdatedMsg)\n this.$server.$on('new player selected', this.getQueueDetails)\n },\n methods: {\n playerCommand (cmd, cmd_opt = null) {\n this.$server.playerCommand(cmd, cmd_opt, this.$server.activePlayerId)\n },\n artistClick (item) {\n // artist entry clicked within the listviewItem\n var url = '/artists/' + item.item_id\n this.$router.push({ path: url, query: { provider: item.provider } })\n },\n queueUpdatedMsg (data) {\n if (data.player_id === this.$server.activePlayerId) {\n for (const [key, value] of Object.entries(data)) {\n Vue.set(this.playerQueueDetails, key, value)\n }\n }\n },\n async getQueueDetails () {\n if (this.$server.activePlayer) {\n const endpoint = 'players/' + this.$server.activePlayerId + '/queue'\n this.playerQueueDetails = await this.$server.getData(endpoint)\n }\n }\n }\n})\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerOSD.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerOSD.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PlayerOSD.vue?vue&type=template&id=60780b7f&scoped=true&\"\nimport script from \"./PlayerOSD.vue?vue&type=script&lang=js&\"\nexport * from \"./PlayerOSD.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PlayerOSD.vue?vue&type=style&index=0&id=60780b7f&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"60780b7f\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VFlex } from 'vuetify/lib/components/VGrid';\nimport { VFooter } from 'vuetify/lib/components/VFooter';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAction } from 'vuetify/lib/components/VList';\nimport { VListItemAvatar } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemIcon } from 'vuetify/lib/components/VList';\nimport { VListItemSubtitle } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VMenu } from 'vuetify/lib/components/VMenu';\nimport { VProgressLinear } from 'vuetify/lib/components/VProgressLinear';\nimport { VSubheader } from 'vuetify/lib/components/VSubheader';\ninstallComponents(component, {VBtn,VCard,VDivider,VFlex,VFooter,VIcon,VImg,VList,VListItem,VListItemAction,VListItemAvatar,VListItemContent,VListItemIcon,VListItemSubtitle,VListItemTitle,VMenu,VProgressLinear,VSubheader})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-navigation-drawer',{attrs:{\"right\":\"\",\"app\":\"\",\"clipped\":\"\",\"temporary\":\"\",\"width\":\"300\"},model:{value:(_vm.visible),callback:function ($$v) {_vm.visible=$$v},expression:\"visible\"}},[_c('v-card-title',{staticClass:\"headline\"},[_c('b',[_vm._v(_vm._s(_vm.$t('players')))])]),_c('v-list',{attrs:{\"dense\":\"\"}},[_c('v-divider'),_vm._l((_vm.filteredPlayerIds),function(playerId){return _c('div',{key:playerId,style:(_vm.$server.activePlayerId == playerId ? 'background-color:rgba(50, 115, 220, 0.3);' : '')},[_c('v-list-item',{staticStyle:{\"margin-left\":\"-5px\",\"margin-right\":\"-15px\"},attrs:{\"ripple\":\"\",\"dense\":\"\"},on:{\"click\":function($event){return _vm.$server.switchPlayer(_vm.$server.players[playerId].player_id)}}},[_c('v-list-item-avatar',[_c('v-icon',{attrs:{\"size\":\"45\"}},[_vm._v(_vm._s(_vm.$server.players[playerId].is_group ? 'speaker_group' : 'speaker'))])],1),_c('v-list-item-content',{staticStyle:{\"margin-left\":\"-15px\"}},[_c('v-list-item-title',{staticClass:\"subtitle-1\"},[_vm._v(_vm._s(_vm.$server.players[playerId].name))]),_c('v-list-item-subtitle',{key:_vm.$server.players[playerId].state,staticClass:\"body-2\",staticStyle:{\"font-weight\":\"normal\"}},[_vm._v(\" \"+_vm._s(_vm.$t('state.' + _vm.$server.players[playerId].state))+\" \")])],1),(_vm.$server.activePlayerId)?_c('v-list-item-action',{staticStyle:{\"padding-right\":\"10px\"}},[_c('v-menu',{attrs:{\"close-on-content-click\":false,\"close-on-click\":true,\"nudge-width\":250,\"offset-x\":\"\",\"right\":\"\"},nativeOn:{\"click\":[function($event){$event.stopPropagation();},function($event){$event.stopPropagation();$event.preventDefault();}]},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-btn',_vm._g({staticStyle:{\"color\":\"rgba(0,0,0,.54)\"},attrs:{\"icon\":\"\"}},on),[_c('v-flex',{staticClass:\"vertical-btn\",attrs:{\"xs12\":\"\"}},[_c('v-icon',[_vm._v(\"volume_up\")]),_c('span',{staticClass:\"overline\"},[_vm._v(_vm._s(Math.round(_vm.$server.players[playerId].volume_level)))])],1)],1)]}}],null,true)},[_c('VolumeControl',{attrs:{\"players\":_vm.$server.players,\"player_id\":playerId}})],1)],1):_vm._e()],1),_c('v-divider')],1)})],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <!-- players side menu -->\n <v-navigation-drawer\n right\n app\n clipped\n temporary\n v-model=\"visible\"\n width=\"300\"\n >\n <v-card-title class=\"headline\">\n <b>{{ $t('players') }}</b>\n </v-card-title>\n <v-list dense>\n <v-divider></v-divider>\n <div\n v-for=\"playerId of filteredPlayerIds\"\n :key=\"playerId\"\n :style=\"$server.activePlayerId == playerId ? 'background-color:rgba(50, 115, 220, 0.3);' : ''\"\n >\n <v-list-item\n ripple\n dense\n style=\"margin-left: -5px; margin-right: -15px\"\n @click=\"$server.switchPlayer($server.players[playerId].player_id)\"\n >\n <v-list-item-avatar>\n <v-icon size=\"45\">{{ $server.players[playerId].is_group ? 'speaker_group' : 'speaker' }}</v-icon>\n </v-list-item-avatar>\n <v-list-item-content style=\"margin-left:-15px;\">\n <v-list-item-title class=\"subtitle-1\">{{ $server.players[playerId].name }}</v-list-item-title>\n\n <v-list-item-subtitle\n class=\"body-2\"\n style=\"font-weight:normal;\"\n :key=\"$server.players[playerId].state\"\n >\n {{ $t('state.' + $server.players[playerId].state) }}\n </v-list-item-subtitle>\n\n </v-list-item-content>\n\n <v-list-item-action\n style=\"padding-right:10px;\"\n v-if=\"$server.activePlayerId\"\n >\n <v-menu\n :close-on-content-click=\"false\"\n :close-on-click=\"true\"\n :nudge-width=\"250\"\n offset-x\n right\n @click.native.stop\n @click.native.stop.prevent\n >\n <template v-slot:activator=\"{ on }\">\n <v-btn\n icon\n style=\"color:rgba(0,0,0,.54);\"\n v-on=\"on\"\n >\n <v-flex\n xs12\n class=\"vertical-btn\"\n >\n <v-icon>volume_up</v-icon>\n <span class=\"overline\">{{ Math.round($server.players[playerId].volume_level) }}</span>\n </v-flex>\n </v-btn>\n </template>\n <VolumeControl\n v-bind:players=\"$server.players\"\n v-bind:player_id=\"playerId\"\n />\n </v-menu>\n </v-list-item-action>\n </v-list-item>\n <v-divider></v-divider>\n </div>\n </v-list>\n </v-navigation-drawer>\n</template>\n\n<style scoped>\n.vertical-btn {\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n</style>\n\n<script>\nimport Vue from 'vue'\nimport VolumeControl from '@/components/VolumeControl.vue'\n\nexport default Vue.extend({\n components: {\n VolumeControl\n },\n watch: {\n },\n data () {\n return {\n filteredPlayerIds: [],\n visible: false\n }\n },\n computed: {\n },\n created () {\n this.$server.$on('showPlayersMenu', this.show)\n this.$server.$on('players changed', this.getAvailablePlayers)\n this.getAvailablePlayers()\n },\n methods: {\n show () {\n this.visible = true\n },\n getAvailablePlayers () {\n // generate a list of playerIds that we want to show in the list\n this.filteredPlayerIds = []\n for (var playerId in this.$server.players) {\n // we're only interested in enabled players that are not group childs\n if (this.$server.players[playerId].available) {\n this.filteredPlayerIds.push(playerId)\n }\n }\n }\n }\n})\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerSelect.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerSelect.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PlayerSelect.vue?vue&type=template&id=3db1a01d&scoped=true&\"\nimport script from \"./PlayerSelect.vue?vue&type=script&lang=js&\"\nexport * from \"./PlayerSelect.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PlayerSelect.vue?vue&type=style&index=0&id=3db1a01d&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3db1a01d\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VFlex } from 'vuetify/lib/components/VGrid';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAction } from 'vuetify/lib/components/VList';\nimport { VListItemAvatar } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemSubtitle } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VMenu } from 'vuetify/lib/components/VMenu';\nimport { VNavigationDrawer } from 'vuetify/lib/components/VNavigationDrawer';\ninstallComponents(component, {VBtn,VCardTitle,VDivider,VFlex,VIcon,VList,VListItem,VListItemAction,VListItemAvatar,VListItemContent,VListItemSubtitle,VListItemTitle,VMenu,VNavigationDrawer})\n","<template>\n <v-app>\n <TopBar />\n <NavigationMenu></NavigationMenu>\n <v-main>\n <router-view app :key=\"$route.path\"></router-view>\n </v-main>\n <PlayerOSD :showPlayerSelect=\"showPlayerSelect\" />\n <ContextMenu/>\n <PlayerSelect/>\n <v-overlay :value=\"$store.loading\">\n <v-progress-circular indeterminate size=\"64\"></v-progress-circular>\n </v-overlay>\n </v-app>\n</template>\n\n<style>\n .body {\n background-color: black;\n overscroll-behavior-x: none;\n }\n</style>\n\n<script>\nimport Vue from 'vue'\nimport NavigationMenu from './components/NavigationMenu.vue'\nimport TopBar from './components/TopBar.vue'\nimport ContextMenu from './components/ContextMenu.vue'\nimport PlayerOSD from './components/PlayerOSD.vue'\nimport PlayerSelect from './components/PlayerSelect.vue'\n\nexport default Vue.extend({\n name: 'App',\n components: {\n NavigationMenu,\n TopBar,\n ContextMenu,\n PlayerOSD,\n PlayerSelect\n },\n data: () => ({\n showPlayerSelect: false\n }),\n created () {\n // TODO: retrieve serveraddress through discovery and/or user settings\n let serverAddress = ''\n if (process.env.NODE_ENV === 'production') {\n const loc = window.location\n serverAddress = loc.origin + loc.pathname\n } else {\n serverAddress = 'http://localhost:8095/'\n }\n this.$server.connect(serverAddress)\n }\n})\n</script>\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=7f0d4007&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\nimport style0 from \"./App.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VApp } from 'vuetify/lib/components/VApp';\nimport { VMain } from 'vuetify/lib/components/VMain';\nimport { VOverlay } from 'vuetify/lib/components/VOverlay';\nimport { VProgressCircular } from 'vuetify/lib/components/VProgressCircular';\ninstallComponents(component, {VApp,VMain,VOverlay,VProgressCircular})\n","/* eslint-disable no-console */\n\nimport { register } from 'register-service-worker'\n\nif (process.env.NODE_ENV === 'production') {\n register(`${process.env.BASE_URL}service-worker.js`, {\n ready () {\n console.log(\n 'App is being served from cache by a service worker.\\n' +\n 'For more details, visit https://goo.gl/AFskqB'\n )\n },\n registered () {\n console.log('Service worker has been registered.')\n },\n cached () {\n console.log('Content has been cached for offline use.')\n },\n updatefound () {\n console.log('New content is downloading.')\n },\n updated () {\n alert('New content is available; please refresh.')\n window.location.reload(true)\n },\n offline () {\n alert('No internet connection found. App is running in offline mode.')\n },\n error (error) {\n console.error('Error during service worker registration:', error)\n }\n })\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('v-list',{attrs:{\"tile\":\"\"}},_vm._l((_vm.items),function(item){return _c('v-list-item',{key:item.title,attrs:{\"tile\":\"\"},on:{\"click\":function($event){return _vm.$router.push(item.path)}}},[_c('v-list-item-icon',{staticStyle:{\"margin-left\":\"15px\"}},[_c('v-icon',[_vm._v(_vm._s(item.icon))])],1),_c('v-list-item-content',[_c('v-list-item-title',{domProps:{\"textContent\":_vm._s(item.title)}})],1)],1)}),1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <section>\n <v-list tile>\n <v-list-item tile\n v-for=\"item in items\" :key=\"item.title\" @click=\"$router.push(item.path)\">\n <v-list-item-icon style=\"margin-left:15px\">\n <v-icon>{{ item.icon }}</v-icon>\n </v-list-item-icon>\n <v-list-item-content>\n <v-list-item-title v-text=\"item.title\"></v-list-item-title>\n </v-list-item-content>\n </v-list-item>\n </v-list>\n </section>\n</template>\n\n<script>\n\nexport default {\n name: 'home',\n data () {\n return {\n items: [\n { title: this.$t('artists'), icon: 'person', path: '/artists' },\n { title: this.$t('albums'), icon: 'album', path: '/albums' },\n { title: this.$t('tracks'), icon: 'audiotrack', path: '/tracks' },\n { title: this.$t('playlists'), icon: 'playlist_play', path: '/playlists' },\n { title: this.$t('search'), icon: 'search', path: '/search' }\n ]\n }\n },\n created () {\n this.$store.windowtitle = this.$t('musicassistant')\n }\n}\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Home.vue?vue&type=template&id=38d5da10&\"\nimport script from \"./Home.vue?vue&type=script&lang=js&\"\nexport * from \"./Home.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemIcon } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\ninstallComponents(component, {VIcon,VList,VListItem,VListItemContent,VListItemIcon,VListItemTitle})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('ItemsListing',{attrs:{\"mediatype\":_vm.mediatype,\"provider\":_vm.provider,\"endpoint\":'library/' + _vm.mediatype}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <section>\n <ItemsListing :mediatype=\"mediatype\" :provider=\"provider\" :endpoint=\"'library/' + mediatype\" />\n </section>\n</template>\n\n<script>\n// @ is an alias to /src\nimport ItemsListing from '@/components/ItemsListing.vue'\n\nexport default {\n name: 'browse',\n components: {\n ItemsListing\n },\n props: {\n mediatype: String,\n provider: String\n },\n data () {\n return { }\n },\n created () {\n this.$store.windowtitle = this.$t(this.mediatype)\n },\n computed: { },\n methods: { }\n}\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Browse.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Browse.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Browse.vue?vue&type=template&id=0b869ae6&\"\nimport script from \"./Browse.vue?vue&type=script&lang=js&\"\nexport * from \"./Browse.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Vue from 'vue'\nimport VueRouter from 'vue-router'\nimport Home from '../views/Home.vue'\nimport Browse from '../views/Browse.vue'\n\nVue.use(VueRouter)\n\nconst routes = [\n {\n path: '/',\n name: 'home',\n component: Home\n },\n {\n path: '/config',\n name: 'config',\n component: () => import(/* webpackChunkName: \"config\" */ '../views/Config.vue'),\n props: route => ({ ...route.params, ...route.query })\n },\n {\n path: '/config/:configKey',\n name: 'configKey',\n component: () => import(/* webpackChunkName: \"config\" */ '../views/Config.vue'),\n props: route => ({ ...route.params, ...route.query })\n },\n {\n path: '/search',\n name: 'search',\n component: () => import(/* webpackChunkName: \"search\" */ '../views/Search.vue'),\n props: route => ({ ...route.params, ...route.query })\n },\n {\n path: '/:media_type/:media_id',\n name: 'itemdetails',\n component: () => import(/* webpackChunkName: \"itemdetails\" */ '../views/ItemDetails.vue'),\n props: route => ({ ...route.params, ...route.query })\n },\n {\n path: '/playerqueue',\n name: 'playerqueue',\n component: () => import(/* webpackChunkName: \"playerqueue\" */ '../views/PlayerQueue.vue'),\n props: route => ({ ...route.params, ...route.query })\n },\n {\n path: '/:mediatype',\n name: 'browse',\n component: Browse,\n props: route => ({ ...route.params, ...route.query })\n }\n]\n\nconst router = new VueRouter({\n mode: 'hash',\n routes\n})\n\nexport default router\n","import Vue from 'vue'\nimport VueI18n from 'vue-i18n'\n\nVue.use(VueI18n)\n\nfunction loadLocaleMessages () {\n const locales = require.context('./locales', true, /[A-Za-z0-9-_,\\s]+\\.json$/i)\n const messages = {}\n locales.keys().forEach(key => {\n const matched = key.match(/([A-Za-z0-9-_]+)\\./i)\n if (matched && matched.length > 1) {\n const locale = matched[1]\n messages[locale] = locales(key)\n }\n })\n return messages\n}\n\nexport default new VueI18n({\n // locale: process.env.VUE_APP_I18N_LOCALE || 'en',\n locale: navigator.language.split('-')[0],\n fallbackLocale: 'en',\n messages: loadLocaleMessages()\n})\n","import Vue from 'vue'\nimport Vuetify from 'vuetify/lib'\n\nVue.use(Vuetify)\n\nexport default new Vuetify({\n})\n","import Vue from 'vue'\n\nconst globalStore = new Vue({\n data () {\n return {\n windowtitle: 'Home',\n loading: false,\n showNavigationMenu: false,\n topBarTransparent: false,\n topBarContextItem: null,\n isMobile: false,\n isInStandaloneMode: false\n }\n },\n created () {\n this.handleWindowOptions()\n window.addEventListener('resize', this.handleWindowOptions)\n },\n destroyed () {\n window.removeEventListener('resize', this.handleWindowOptions)\n },\n methods: {\n handleWindowOptions () {\n this.isMobile = (document.body.clientWidth < 700)\n this.isInStandaloneMode = (window.navigator.standalone === true) || (window.matchMedia('(display-mode: standalone)').matches)\n }\n }\n})\n\nexport default {\n globalStore,\n // we can add objects to the Vue prototype in the install() hook:\n install (Vue, options) {\n Vue.prototype.$store = globalStore\n }\n}\n","'use strict'\n\nimport Vue from 'vue'\nimport axios from 'axios'\nimport oboe from 'oboe'\n\nconst axiosConfig = {\n timeout: 60 * 1000\n // withCredentials: true, // Check cross-site Access-Control\n}\nconst _axios = axios.create(axiosConfig)\n\n// Holds the connection to the server\n\nconst server = new Vue({\n\n _address: '',\n _ws: null,\n\n data () {\n return {\n connected: false,\n players: {},\n activePlayerId: null,\n syncStatus: []\n }\n },\n methods: {\n\n async connect (serverAddress) {\n // Connect to the server\n if (!serverAddress.endsWith('/')) {\n serverAddress = serverAddress + '/'\n }\n this._address = serverAddress\n const wsAddress = serverAddress.replace('http', 'ws') + 'ws'\n this._ws = new WebSocket(wsAddress)\n this._ws.onopen = this._onWsConnect\n this._ws.onmessage = this._onWsMessage\n this._ws.onclose = this._onWsClose\n this._ws.onerror = this._onWsError\n },\n\n async toggleLibrary (item) {\n /// triggered when user clicks the library (heart) button\n if (item.in_library.length === 0) {\n // add to library\n await this.putData('library', item)\n item.in_library = [item.provider]\n } else {\n // remove from library\n await this.deleteData('library', item)\n item.in_library = []\n }\n },\n\n getImageUrl (mediaItem, imageType = 'image', size = 0) {\n // format the image url\n if (!mediaItem || !mediaItem.media_type) return ''\n if (mediaItem.provider === 'database' && imageType === 'image') {\n return `${this._address}api/${mediaItem.media_type}/${mediaItem.item_id}/thumb?provider=${mediaItem.provider}&size=${size}`\n } else if (mediaItem.metadata && mediaItem.metadata[imageType]) {\n return mediaItem.metadata[imageType]\n } else if (mediaItem.album && mediaItem.album.metadata && mediaItem.album.metadata[imageType]) {\n return mediaItem.album.metadata[imageType]\n } else if (mediaItem.artist && mediaItem.artist.metadata && mediaItem.artist.metadata[imageType]) {\n return mediaItem.artist.metadata[imageType]\n } else if (mediaItem.album && mediaItem.album.artist && mediaItem.album.artist.metadata && mediaItem.album.artist.metadata[imageType]) {\n return mediaItem.album.artist.metadata[imageType]\n } else if (mediaItem.artists && mediaItem.artists[0].metadata && mediaItem.artists[0].metadata[imageType]) {\n return mediaItem.artists[0].metadata[imageType]\n } else if (imageType === 'fanart') {\n // fallback to normal image instead of fanart\n return this.getImageUrl(mediaItem, 'image', size)\n } else return ''\n },\n\n async getData (endpoint, params = {}) {\n // get data from the server\n const url = this._address + 'api/' + endpoint\n const result = await _axios.get(url, { params: params })\n Vue.$log.debug('getData', endpoint, result)\n return result.data\n },\n\n async postData (endpoint, data) {\n // post data to the server\n const url = this._address + 'api/' + endpoint\n data = JSON.stringify(data)\n const result = await _axios.post(url, data)\n Vue.$log.debug('postData', endpoint, result)\n return result.data\n },\n\n async putData (endpoint, data) {\n // put data to the server\n const url = this._address + 'api/' + endpoint\n data = JSON.stringify(data)\n const result = await _axios.put(url, data)\n Vue.$log.debug('putData', endpoint, result)\n return result.data\n },\n\n async deleteData (endpoint, dataObj) {\n // delete data on the server\n const url = this._address + 'api/' + endpoint\n dataObj = JSON.stringify(dataObj)\n const result = await _axios.delete(url, { data: dataObj })\n Vue.$log.debug('deleteData', endpoint, result)\n return result.data\n },\n\n async getAllItems (endpoint, list, params = null) {\n // retrieve all items and fill list\n let url = this._address + 'api/' + endpoint\n if (params) {\n var urlParams = new URLSearchParams(params)\n url += '?' + urlParams.toString()\n }\n let index = 0\n Vue.$log.debug('getAllItems', url)\n oboe(url)\n .node('items.*', function (item) {\n Vue.set(list, index, item)\n index += 1\n })\n .done(function (fullList) {\n // truncate list if needed\n if (list.length > fullList.items.length) {\n list.splice(fullList.items.length)\n }\n })\n },\n\n playerCommand (cmd, cmd_opt = '', playerId = this.activePlayerId) {\n const endpoint = 'players/' + playerId + '/cmd/' + cmd\n this.postData(endpoint, cmd_opt)\n },\n\n async playItem (item, queueOpt) {\n this.$store.loading = true\n const endpoint = 'players/' + this.activePlayerId + '/play_media/' + queueOpt\n await this.postData(endpoint, item)\n this.$store.loading = false\n },\n\n switchPlayer (newPlayerId) {\n if (newPlayerId !== this.activePlayerId) {\n this.activePlayerId = newPlayerId\n localStorage.setItem('activePlayerId', newPlayerId)\n this.$emit('new player selected', newPlayerId)\n }\n },\n\n async _onWsConnect () {\n // Websockets connection established\n Vue.$log.info('Connected to server ' + this._address)\n this.connected = true\n // retrieve all players once through api\n const players = await this.getData('players')\n for (const player of players) {\n Vue.set(this.players, player.player_id, player)\n }\n this._selectActivePlayer()\n this.$emit('players changed')\n },\n\n async _onWsMessage (e) {\n // Message retrieved on the websocket\n var msg = JSON.parse(e.data)\n if (msg.message === 'player changed') {\n Vue.set(this.players, msg.message_details.player_id, msg.message_details)\n } else if (msg.message === 'player added') {\n Vue.set(this.players, msg.message_details.player_id, msg.message_details)\n this._selectActivePlayer()\n this.$emit('players changed')\n } else if (msg.message === 'player removed') {\n Vue.delete(this.players, msg.message_details.player_id)\n this._selectActivePlayer()\n this.$emit('players changed')\n } else if (msg.message === 'music sync status') {\n this.syncStatus = msg.message_details\n } else {\n this.$emit(msg.message, msg.message_details)\n }\n },\n\n _onWsClose (e) {\n this.connected = false\n Vue.$log.error('Socket is closed. Reconnect will be attempted in 5 seconds.', e.reason)\n setTimeout(function () {\n this.connect(this._address)\n }.bind(this), 5000)\n },\n\n _onWsError () {\n this._ws.close()\n },\n\n _selectActivePlayer () {\n // auto select new active player if we have none\n if (!this.activePlayer || !this.activePlayer.enabled || this.activePlayer.group_parents.length > 0) {\n // prefer last selected player\n const lastPlayerId = localStorage.getItem('activePlayerId')\n if (lastPlayerId && this.players[lastPlayerId] && this.players[lastPlayerId].enabled) {\n this.switchPlayer(lastPlayerId)\n } else {\n // prefer the first playing player\n for (const playerId in this.players) {\n if (this.players[playerId].state === 'playing' && this.players[playerId].enabled && this.players[playerId].group_parents.length === 0) {\n this.switchPlayer(playerId)\n break\n }\n }\n // fallback to just the first player\n if (!this.activePlayer || !this.activePlayer.enabled) {\n for (const playerId in this.players) {\n if (this.players[playerId].enabled && this.players[playerId].group_parents.length === 0) {\n this.switchPlayer(playerId)\n break\n }\n }\n }\n }\n }\n }\n },\n computed: {\n activePlayer () {\n if (!this.activePlayerId) {\n return null\n } else {\n return this.players[this.activePlayerId]\n }\n }\n }\n})\n\n// install as plugin\nexport default {\n server,\n // we can add objects to the Vue prototype in the install() hook:\n install (Vue, options) {\n Vue.prototype.$server = server\n }\n}\n","import Vue from 'vue'\nimport App from './App.vue'\nimport './registerServiceWorker'\nimport router from './router'\nimport i18n from './i18n'\nimport 'roboto-fontface/css/roboto/roboto-fontface.css'\nimport 'material-design-icons-iconfont/dist/material-design-icons.css'\nimport VueVirtualScroller from 'vue-virtual-scroller'\nimport 'vue-virtual-scroller/dist/vue-virtual-scroller.css'\nimport vuetify from './plugins/vuetify'\nimport store from './plugins/store'\nimport server from './plugins/server'\nimport '@babel/polyfill'\nimport VueLogger from 'vuejs-logger'\n\nconst isProduction = process.env.NODE_ENV === 'production'\nconst loggerOptions = {\n isEnabled: true,\n logLevel: isProduction ? 'error' : 'debug',\n stringifyArguments: false,\n showLogLevel: true,\n showMethodName: false,\n separator: '|',\n showConsoleColors: true\n}\n\nVue.config.productionTip = false\nVue.use(VueLogger, loggerOptions)\nVue.use(VueVirtualScroller)\nVue.use(store)\nVue.use(server)\n\n// eslint-disable-next-line no-extend-native\nString.prototype.formatDuration = function () {\n var secNum = parseInt(this, 10) // don't forget the second param\n var hours = Math.floor(secNum / 3600)\n var minutes = Math.floor((secNum - (hours * 3600)) / 60)\n var seconds = secNum - (hours * 3600) - (minutes * 60)\n if (hours < 10) { hours = '0' + hours }\n if (minutes < 10) { minutes = '0' + minutes }\n if (seconds < 10) { seconds = '0' + seconds }\n if (hours === '00') { return minutes + ':' + seconds } else { return hours + ':' + minutes + ':' + seconds }\n}\n\nnew Vue({\n router,\n i18n,\n vuetify,\n render: h => h(App)\n}).$mount('#app')\n","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"img/file.813f9dad.png\";","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerOSD.vue?vue&type=style&index=0&id=60780b7f&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerOSD.vue?vue&type=style&index=0&id=60780b7f&scoped=true&lang=css&\"","module.exports = __webpack_public_path__ + \"img/sonos.72e2fecb.png\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJEAAABfCAYAAADoOiXnAAAMUElEQVR4nO2de5RVVR3HP4MSAwgIakqWiqIIkoHVivKxUksx6SE+kwg105VY+ShJzUdWmpWhaWpaLjNExSYN8YEPTNOFL0QFRRHTJYgi4AMUH8z47Y/fOeveObPP495z595zV/uz1ln3ztl7n9+eM985+7dfv9MiCY8nDz0aXQFP8+NF5MmNF5EnN15Entx4EXly40XkyY0XkSc3XkSe3HgReXLjReTJjReRJzdeRJ7ceBF5cuNF5MmNF5EnNxs2ugIVMgDYGxgDDAzOfQgsAe4BFgC1WiA1FNgX2AnoGVx3eWBnLtBeIzvDgH2AHYFewEfAMuBu4FFgfY3sdBstTbIorRX4KvCd4HNgJL0dWAzcANwILMphazBwIDARGAV8LJL+cmDnWuDJHHa2BA7GfqedMaGGKLAzA/gb8HQOO92PpKIfIyXdpeyslXSWpAEV2ukp6RhJyzLaeS+w07tCO70CO69ktPOOpFMltVZop25HwyuQchwo6c2MNzvKg5K2zWhnU0kzqrQzKyifxc4Wkm6u0k6bpIEZ7XgRBcehktqrudtlPCNpaIqdwZLm5rRzr6RNUuxsJWleTjt3KLtg/+9FtJekd1Nu6CpJV6fkkUwgg2Ls9JU0O8M1QmZJWhSTdqPim7b+ku6rwM7Nkp6PSWuTNb2N/hsVWkS9JD2Qfp81X9IQScsz5D0vxtaUDGVDFstENy0hz9kxds6qwM5Cmf/TlpBnSoydhhxFHCc6HNg1Q77HgReBSzLkPQH4YuTccOAUR97ngJWO81OAd0keFjkJ2CVybhhwoiPvImB15JyAnwLvp9g5BRt6KARFFNG4yM8COiLn3gGuCr7/EVgYfF+He/ymFTgscu4gYJAj753YH2gKpTGho4CbgvSke9YvyFvOOGx8K8pMYARwOjAHeAiYBNwepLck2BkEHJGQXl8a/SiMHIMlLY08utslnStpnKTDJR0saftIuWGS9pM50TtLusLRBDyizt3kWY48kvSBpC8n1PGGmHIhT0vauCz/bTH51kkak2BnZoqdeZL6JJSv29HwCkSOXSStd9yw/0raM+M1DpH0muMab6skvk0kPefIE/K0zBl2XX93WW/s9Ziya8vsDJb0YoKd+Yp3xvcK7KyKKbtK0jYxZet6FK056w1s4Dg/BHvk/xWbGnDRAkzFRpM3j7l23+B7X2DjhHqMACbHpP0H2BPYAWsS5zvqETZFaXZGAd+PSZsT2Nkea4oXJNhpKEUT0ft09X/KOQo4PyZtGuZAx1HuWwmbo0oiqR7hNVZi82nR8+Xf0+ykpQO8DrzqsFOIOauiTcCuAFYBWyTk2Sbm/IcZrw2wJsXOXcAFMWkTgaOxXtfHSX4ahHZcDjzALcT3Lo/EnOcdAzuFpWhPomVY1z2JO4PPjYH9saYH4BfAGwnlnqD03/w28HxMvhWYSOKeROOBPbAmM605WUn85OlS4JiEsocGdgotICieiMCeAnG8hXW1twHuB2YBj2FN3EuUBObinsjPc2Py3YR1yc8Nrn8d8C1KgvkgwYaLu2POt2FCPB+4NbDz9bL0Su00jkZ79o5jM9nosIvZsq68a6a9TdIZMeWeDa5bbmeo3D2stZI+dJy/Jig3PcZGefkdyuxsJ2m1I9+aGDtXBuVuSrHje2cJrAR+H5P2aeB6bC1OlAOA43E7qufQdRR6CXChI+9GdF7bEzIxON6LqVscLwB/cpzvF2PnaGydUaV2GkYRRQRwBfAHx/nBQP+YMi2Y/xD9nS4BpseUuRi4r4J6HYaNflfKVODhCvIfSvE6PbEUVUQAPwP+nPMa07G5qDjWAt/DVkVmYRDV/XHfxHpbL2XMPxD3eFkhKbKI1mPN06mkd99dXIg1De+n5HsBc2ifyHDNudj8XDUsCuw8kyHvwzSRY11kEYFNpv4Gm9WfQfqNFdYb2hs4mex+xWJssfy0hDyrMd8mzz1bCHwF+HtCnteAy3H7S4WkWdrdxzB/5LPAXtgyjs2xKZD12B/4eeABzMepZofESqzJuQUb5NuD0jTJPGxW/wW6LtyvlFcDO3cEdnYF+gRpj2Lifxkvom5BmJge60Yb7dgTrw2bs/oktoboqeATqnOso3Rg/tqMwM6WDjtxc4SFo5lEVE86gGeDo5z+wMga2mnHfKXoFqdBlEbiC0/RfaJ6kzaNcSK2qTGJHhmuk5Z+CrBVDezUBS+izoyn6wrIkCOxnmIaK0iewwMbBzooJu1YbJltGq9msFMXfHPWmRHY6PY44GbMYe8PfAP4Ltnu1wO412iXMxw4E9vdOhMTwwBs1H0i2f65H8QmkhuOF1Fnwpn7CcFRDTdmyBP2HicFR6Uoo5264Juz2vIvbIigu5lB8mqHuuJFVDveBs6rg53VdbKTGS+i2nESlU2yVsvp5ItGUnO8iDpTbZf5Akr74LJQ7eTqr8g/KV1zvIg6s6bC/ML+sD+psFylXfMO4IzgKB6NXhVXsKOnpGMlLYlfUChJ6pBtHty3SjsbSJqs5D1poZ1HlH3PXUOOZomUVm/6AmOxjQDDsbGiDmzrzgJsHfZc8ofC6wd8LbA1DNt80I4NWC7AensPUrvQft2CF1E6LZgP44oJ0B12PiLbXrTC4EXkyY13rD258SLy5KYoc2efA/bDfAHfvmanFduUWcmOlZpTFBHtis2ee6qjoSIqSnNW+KjxBabh3f+iiMjTxHgR1ZdXsG1J0YCfTU2ziOh32JLSydhuUhergOOAQ4C/1KFOi7HNla7t3nGcjK1cjIvC1pQ0i4g6sIVYlxIfqmUmcBm24s8VrbXW/BLbzLikgjJhIIrBta9O42gWEY2ltJnvmpg81wafW2O7TGuJ6Or8h1MTlSzrOA8LbhUX9URYDKal2CK3ppj+aBYRjcJ2voIt/IrGL1xKaS/9PnR9lRXYrtKzsddQ7Y+9IupyLCZ2lMexQA9XYZHOJgC7YUE/Q8K1Rz2DOk3GgmFNxMLfuARwG/YEiy6hFba1+ptYMPXhwOexDQMzHdcpFo1eRhAcx6UsiZAsNnWY/+JI2kVlaXMcZe9VKSBUi6QNy/Lvq65hfqcFaZ+StHXwvVX2wpmQCcH5zSX1c/xOpznq8cMg7fjI+Z+XldtR0mdUCoE81XGdcs502K7r0SxPIrAgDWEAzRsiaeHOh6HY6Hc5q4AfYGFdvoSFtnsSuBLbIDgbc3jLCQdhl2L+y2VY5P7tHfVagcUIuB74J/ZE6oGF67sj5rrlTeAyzNcDi2KyCAtr/ARwEZ1D8BWSooxYZ2FbrLm4CrvJz2D7xJ7CAi6AbTzsFyl3DbYduj/mCI8Kzo/A1u8cjK0POhmLxFbOEKw52SyhXiMxUYcBOg/AmqdLsb1rY1N+rw5KS0yWYkEjtgts/yilbCFopicRlHanvgv8I/h+NRZCZgPM34nyUPC5OyUBhYzGFqCtoWtQc7CA50kCAntCRiO8jg8+55G+BmlrSrthZwd13AeLQjInpWwhaDYR7UKpm3wb1lSFTupo3EEQwhhFGznS+lAaDqgmkFYcYbP7BtliJF0M/Br7/dqxPWW/xQRayThUQ2g2EW2CNWlgg31XY70usEFGV+ygMMaja5T4rbLzfR3pWXBtmX4t+OxHthAxvYHTsPhEc7EYj6ODtDPIFl2tYTSbiMDehwY2ch2G4mvFuu0udgs+76Nr83ArFn1tC8zprobpdHb012BOOMAXyBasaj3W7PXAmrMTKG1QXIet7S4szeRYh4zGnNmFlGawx2CvL3AxAeuJzcfeDfJjzGm9n1Jo4ImYb1IJ4bqnPtiY0v2Yb9SGLbIfQPZ3kp2D+U/jgU0xIU4N0jarom51pRlF1Bv4NrYTNGQS8U/V/thA3vHAv+kctqUXJqpzI2VCZzjJTwoHEydhzehFZWk7YL5M9G2PHZFPsMCk87GX5d0eyf+J4LpDEurRcJpRRGD/+cMoCWfvlPw7YWM2d2Fzb8uxZmMsXV+3CdaTuw530PWQE7ExnJHAzthTZAXmB43B/YqqI+j61GzFOgfzsLA0y4NrbItN37heu1UoirLb4zjcUec96ZxFg1eFNqNj7SkYRRFRUerRjDT83hXFJ1qHddnb8bs9KqEfpZDFDaMoPpGniWn4o9DT/HgReXLjReTJjReRJzdeRJ7ceBF5cuNF5MmNF5EnN15Entx4EXly40XkyY0XkSc3XkSe3HgReXLjReTJzf8A7VafuKusJ8IAAAAASUVORK5CYII=\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","var map = {\n\t\"./aac.png\": \"9a36\",\n\t\"./chromecast.png\": \"57d1\",\n\t\"./crossfade.png\": \"e7af\",\n\t\"./default_artist.png\": \"4bfb\",\n\t\"./demo_player.png\": \"26ea\",\n\t\"./file.png\": \"71db\",\n\t\"./flac.png\": \"fb30\",\n\t\"./hires.png\": \"f5e3\",\n\t\"./homeassistant.png\": \"3232\",\n\t\"./http_streamer.png\": \"2755\",\n\t\"./logo.png\": \"cf05\",\n\t\"./mp3.png\": \"f1d4\",\n\t\"./ogg.png\": \"9ad3\",\n\t\"./qobuz.png\": \"0863\",\n\t\"./sonos.png\": \"82f5\",\n\t\"./spotify.png\": \"0c3b\",\n\t\"./squeezebox.png\": \"bd18\",\n\t\"./tunein.png\": \"e428\",\n\t\"./vorbis.png\": \"94cc\",\n\t\"./web.png\": \"edbf\",\n\t\"./webplayer.png\": \"3d05\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"9e01\";","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ItemsListing.vue?vue&type=style&index=0&id=764b0c8e&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ItemsListing.vue?vue&type=style&index=0&id=764b0c8e&scoped=true&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerSelect.vue?vue&type=style&index=0&id=3db1a01d&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerSelect.vue?vue&type=style&index=0&id=3db1a01d&scoped=true&lang=css&\"","module.exports = __webpack_public_path__ + \"img/squeezebox.60631223.png\";","module.exports = __webpack_public_path__ + \"img/logo.c079bd97.png\";","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-list-item',{directives:[{name:\"longpress\",rawName:\"v-longpress\",value:(_vm.menuClick),expression:\"menuClick\"}],attrs:{\"ripple\":\"\"},on:{\"click\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"left\",37,$event.key,[\"Left\",\"ArrowLeft\"])){ return null; }if('button' in $event && $event.button !== 0){ return null; }_vm.onclickHandler ? _vm.onclickHandler(_vm.item) : _vm.itemClicked(_vm.item)},\"contextmenu\":[_vm.menuClick,function($event){$event.preventDefault();}]}},[(!_vm.hideavatar)?_c('v-list-item-avatar',{attrs:{\"tile\":\"\",\"color\":\"grey\"}},[_c('img',{staticStyle:{\"border\":\"1px solid rgba(0,0,0,.22)\"},attrs:{\"src\":_vm.$server.getImageUrl(_vm.item, 'image', 80),\"lazy-src\":require('../assets/file.png')}})]):_vm._e(),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(\" \"+_vm._s(_vm.item.name)+\" \"),(!!_vm.item.version)?_c('span',[_vm._v(\"(\"+_vm._s(_vm.item.version)+\")\")]):_vm._e()]),(_vm.item.artists)?_c('v-list-item-subtitle',[_vm._l((_vm.item.artists),function(artist,artistindex){return _c('span',{key:artist.item_id},[_c('a',{on:{\"click\":[function($event){return _vm.itemClicked(artist)},function($event){$event.stopPropagation();}]}},[_vm._v(_vm._s(artist.name))]),(artistindex + 1 < _vm.item.artists.length)?_c('label',{key:artistindex},[_vm._v(\"/\")]):_vm._e()])}),(!!_vm.item.album && !!_vm.hidetracknum)?_c('a',{staticStyle:{\"color\":\"grey\"},on:{\"click\":[function($event){return _vm.itemClicked(_vm.item.album)},function($event){$event.stopPropagation();}]}},[_vm._v(\" - \"+_vm._s(_vm.item.album.name))]):_vm._e(),(!_vm.hidetracknum && _vm.item.track_number)?_c('label',{staticStyle:{\"color\":\"grey\"}},[_vm._v(\"- disc \"+_vm._s(_vm.item.disc_number)+\" track \"+_vm._s(_vm.item.track_number))]):_vm._e()],2):_vm._e(),(_vm.item.artist)?_c('v-list-item-subtitle',[_c('a',{on:{\"click\":[function($event){return _vm.itemClicked(_vm.item.artist)},function($event){$event.stopPropagation();}]}},[_vm._v(_vm._s(_vm.item.artist.name))])]):_vm._e(),(!!_vm.item.owner)?_c('v-list-item-subtitle',[_vm._v(_vm._s(_vm.item.owner))]):_vm._e()],1),(!_vm.hideproviders)?_c('v-list-item-action',[_c('ProviderIcons',{attrs:{\"providerIds\":_vm.item.provider_ids,\"height\":20}})],1):_vm._e(),(_vm.isHiRes)?_c('v-list-item-action',[_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('img',_vm._g({attrs:{\"src\":require('../assets/hires.png'),\"height\":\"20\"}},on))]}}],null,false,2747613229)},[_c('span',[_vm._v(_vm._s(_vm.isHiRes))])])],1):_vm._e(),(!_vm.hidelibrary)?_c('v-list-item-action',[_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-btn',_vm._g({attrs:{\"icon\":\"\",\"ripple\":\"\"},on:{\"click\":[function($event){return _vm.toggleLibrary(_vm.item)},function($event){$event.preventDefault();},function($event){$event.stopPropagation();}]}},on),[(_vm.item.in_library.length > 0)?_c('v-icon',{attrs:{\"height\":\"20\"}},[_vm._v(\"favorite\")]):_vm._e(),(_vm.item.in_library.length == 0)?_c('v-icon',{attrs:{\"height\":\"20\"}},[_vm._v(\"favorite_border\")]):_vm._e()],1)]}}],null,false,113966118)},[(_vm.item.in_library.length > 0)?_c('span',[_vm._v(_vm._s(_vm.$t(\"remove_library\")))]):_vm._e(),(_vm.item.in_library.length == 0)?_c('span',[_vm._v(_vm._s(_vm.$t(\"add_library\")))]):_vm._e()])],1):_vm._e(),(!_vm.hideduration && !!_vm.item.duration)?_c('v-list-item-action',[_vm._v(_vm._s(_vm.item.duration.toString().formatDuration()))]):_vm._e(),(!_vm.hidemenu)?_c('v-icon',{staticStyle:{\"margin-right\":\"-10px\",\"padding-left\":\"10px\"},attrs:{\"color\":\"grey lighten-1\"},on:{\"click\":[function($event){return _vm.menuClick(_vm.item)},function($event){$event.stopPropagation();}]}},[_vm._v(\"more_vert\")]):_vm._e()],1),_c('v-divider')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <v-list-item\n ripple\n @click.left=\"onclickHandler ? onclickHandler(item) : itemClicked(item)\"\n @contextmenu=\"menuClick\"\n @contextmenu.prevent\n v-longpress=\"menuClick\"\n >\n <v-list-item-avatar tile color=\"grey\" v-if=\"!hideavatar\">\n <img\n :src=\"$server.getImageUrl(item, 'image', 80)\"\n :lazy-src=\"require('../assets/file.png')\"\n style=\"border: 1px solid rgba(0,0,0,.22);\"\n />\n </v-list-item-avatar>\n\n <v-list-item-content>\n <v-list-item-title>\n {{ item.name }}\n <span v-if=\"!!item.version\">({{ item.version }})</span>\n </v-list-item-title>\n\n <v-list-item-subtitle v-if=\"item.artists\">\n <span\n v-for=\"(artist, artistindex) in item.artists\"\n :key=\"artist.item_id\"\n >\n <a v-on:click=\"itemClicked(artist)\" @click.stop>{{\n artist.name\n }}</a>\n <label\n v-if=\"artistindex + 1 < item.artists.length\"\n :key=\"artistindex\"\n >/</label\n >\n </span>\n <a\n v-if=\"!!item.album && !!hidetracknum\"\n v-on:click=\"itemClicked(item.album)\"\n @click.stop\n style=\"color:grey\"\n >\n - {{ item.album.name }}</a\n >\n <label v-if=\"!hidetracknum && item.track_number\" style=\"color:grey\"\n >- disc {{ item.disc_number }} track {{ item.track_number }}</label\n >\n </v-list-item-subtitle>\n <v-list-item-subtitle v-if=\"item.artist\">\n <a v-on:click=\"itemClicked(item.artist)\" @click.stop>{{\n item.artist.name\n }}</a>\n </v-list-item-subtitle>\n\n <v-list-item-subtitle v-if=\"!!item.owner\">{{\n item.owner\n }}</v-list-item-subtitle>\n </v-list-item-content>\n\n <v-list-item-action v-if=\"!hideproviders\">\n <ProviderIcons v-bind:providerIds=\"item.provider_ids\" :height=\"20\" />\n </v-list-item-action>\n\n <v-list-item-action v-if=\"isHiRes\">\n <v-tooltip bottom>\n <template v-slot:activator=\"{ on }\">\n <img :src=\"require('../assets/hires.png')\" height=\"20\" v-on=\"on\" />\n </template>\n <span>{{ isHiRes }}</span>\n </v-tooltip>\n </v-list-item-action>\n\n <v-list-item-action v-if=\"!hidelibrary\">\n <v-tooltip bottom>\n <template v-slot:activator=\"{ on }\">\n <v-btn\n icon\n ripple\n v-on=\"on\"\n v-on:click=\"toggleLibrary(item)\"\n @click.prevent\n @click.stop\n >\n <v-icon height=\"20\" v-if=\"item.in_library.length > 0\"\n >favorite</v-icon\n >\n <v-icon height=\"20\" v-if=\"item.in_library.length == 0\"\n >favorite_border</v-icon\n >\n </v-btn>\n </template>\n <span v-if=\"item.in_library.length > 0\">{{\n $t(\"remove_library\")\n }}</span>\n <span v-if=\"item.in_library.length == 0\">{{\n $t(\"add_library\")\n }}</span>\n </v-tooltip>\n </v-list-item-action>\n\n <v-list-item-action v-if=\"!hideduration && !!item.duration\">{{\n item.duration.toString().formatDuration()\n }}</v-list-item-action>\n\n <!-- menu button/icon -->\n <v-icon\n v-if=\"!hidemenu\"\n @click=\"menuClick(item)\"\n @click.stop\n color=\"grey lighten-1\"\n style=\"margin-right:-10px;padding-left:10px\"\n >more_vert</v-icon\n >\n </v-list-item>\n <v-divider></v-divider>\n </div>\n</template>\n\n<script>\nimport Vue from 'vue'\nimport ProviderIcons from '@/components/ProviderIcons.vue'\n\nconst PRESS_TIMEOUT = 600\n\nVue.directive('longpress', {\n bind: function (el, { value }, vNode) {\n if (typeof value !== 'function') {\n Vue.$log.warn(`Expect a function, got ${value}`)\n return\n }\n let pressTimer = null\n const start = e => {\n if (e.type === 'click' && e.button !== 0) {\n return\n }\n if (pressTimer === null) {\n pressTimer = setTimeout(() => value(e), PRESS_TIMEOUT)\n }\n }\n const cancel = () => {\n if (pressTimer !== null) {\n clearTimeout(pressTimer)\n pressTimer = null\n }\n }\n ;['mousedown', 'touchstart'].forEach(e => el.addEventListener(e, start))\n ;['click', 'mouseout', 'touchend', 'touchcancel'].forEach(e => el.addEventListener(e, cancel))\n }\n})\n\nexport default Vue.extend({\n components: {\n ProviderIcons\n },\n props: {\n item: Object,\n index: Number,\n totalitems: Number,\n hideavatar: Boolean,\n hidetracknum: Boolean,\n hideproviders: Boolean,\n hidemenu: Boolean,\n hidelibrary: Boolean,\n hideduration: Boolean,\n onclickHandler: null\n },\n data () {\n return {\n touchMoving: false,\n cancelled: false\n }\n },\n computed: {\n isHiRes () {\n for (var prov of this.item.provider_ids) {\n if (prov.quality > 6) {\n if (prov.details) {\n return prov.details\n } else if (prov.quality === 7) {\n return '44.1/48khz 24 bits'\n } else if (prov.quality === 8) {\n return '88.2/96khz 24 bits'\n } else if (prov.quality === 9) {\n return '176/192khz 24 bits'\n } else {\n return '+192kHz 24 bits'\n }\n }\n }\n return ''\n }\n },\n created () { },\n beforeDestroy () {\n this.cancelled = true\n },\n mounted () { },\n methods: {\n itemClicked (mediaItem = null) {\n // mediaItem in the list is clicked\n let url = ''\n if (mediaItem.media_type === 1) {\n url = '/artists/' + mediaItem.item_id\n } else if (mediaItem.media_type === 2) {\n url = '/albums/' + mediaItem.item_id\n } else if (mediaItem.media_type === 4) {\n url = '/playlists/' + mediaItem.item_id\n } else {\n // assume track (or radio) item\n this.$server.$emit('showPlayMenu', mediaItem)\n return\n }\n this.$router.push({ path: url, query: { provider: mediaItem.provider } })\n },\n menuClick () {\n // contextmenu button clicked\n if (this.cancelled) return\n this.$server.$emit('showContextMenu', this.item)\n },\n async toggleLibrary (mediaItem) {\n // library button clicked on item\n this.cancelled = true\n await this.$server.toggleLibrary(mediaItem)\n this.cancelled = false\n }\n }\n})\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListviewItem.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListviewItem.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ListviewItem.vue?vue&type=template&id=36620bf4&\"\nimport script from \"./ListviewItem.vue?vue&type=script&lang=js&\"\nexport * from \"./ListviewItem.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAction } from 'vuetify/lib/components/VList';\nimport { VListItemAvatar } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemSubtitle } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VBtn,VDivider,VIcon,VListItem,VListItemAction,VListItemAvatar,VListItemContent,VListItemSubtitle,VListItemTitle,VTooltip})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',_vm._l((_vm.uniqueProviders),function(prov){return _c('img',{key:prov.provider,staticStyle:{\"margin-right\":\"6px\",\"margin-top\":\"6px\"},attrs:{\"height\":_vm.height,\"src\":require('../assets/' + prov.provider + '.png')}})}),0)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div>\r\n <img\r\n v-for=\"prov of uniqueProviders\" :key=\"prov.provider\"\r\n :height=\"height\"\r\n :src=\"require('../assets/' + prov.provider + '.png')\"\r\n style=\"margin-right:6px;margin-top:6px;\"\r\n />\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport Vue from 'vue'\r\n\r\nexport default Vue.extend({\r\n props: {\r\n providerIds: Array,\r\n height: Number\r\n },\r\n data () {\r\n return {\r\n isHiRes: false\r\n }\r\n },\r\n computed: {\r\n uniqueProviders: function () {\r\n var output = []\r\n var keys = []\r\n if (!this.providerIds) return []\r\n this.providerIds.forEach(function (prov) {\r\n var key = prov.provider\r\n if (keys.indexOf(key) === -1) {\r\n keys.push(key)\r\n output.push(prov)\r\n }\r\n })\r\n return output\r\n }\r\n },\r\n mounted () { },\r\n methods: {\r\n }\r\n})\r\n</script>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProviderIcons.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProviderIcons.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ProviderIcons.vue?vue&type=template&id=20bea3a1&\"\nimport script from \"./ProviderIcons.vue?vue&type=script&lang=js&\"\nexport * from \"./ProviderIcons.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","module.exports = __webpack_public_path__ + \"img/tunein.ca1c1bb0.png\";","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"img/web.798ba28f.png\";","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"img/hires.eabcf7ae.png\";","module.exports = \"data:image/png;base64,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\""],"sourceRoot":""}
\ No newline at end of file
--- /dev/null
+(function(e){function t(t){for(var i,r,o=t[0],l=t[1],c=t[2],u=0,d=[];u<o.length;u++)r=o[u],Object.prototype.hasOwnProperty.call(n,r)&&n[r]&&d.push(n[r][0]),n[r]=0;for(i in l)Object.prototype.hasOwnProperty.call(l,i)&&(e[i]=l[i]);p&&p(t);while(d.length)d.shift()();return s.push.apply(s,c||[]),a()}function a(){for(var e,t=0;t<s.length;t++){for(var a=s[t],i=!0,r=1;r<a.length;r++){var o=a[r];0!==n[o]&&(i=!1)}i&&(s.splice(t--,1),e=l(l.s=a[0]))}return e}var i={},r={app:0},n={app:0},s=[];function o(e){return l.p+"js/"+({config:"config","itemdetails~playerqueue~search":"itemdetails~playerqueue~search",itemdetails:"itemdetails",playerqueue:"playerqueue",search:"search"}[e]||e)+"."+{config:"165ed655","itemdetails~playerqueue~search":"3c623cdf",itemdetails:"79b5fa05",playerqueue:"84a8618a",search:"31a9bea8"}[e]+".js"}function l(t){if(i[t])return i[t].exports;var a=i[t]={i:t,l:!1,exports:{}};return e[t].call(a.exports,a,a.exports,l),a.l=!0,a.exports}l.e=function(e){var t=[],a={config:1,"itemdetails~playerqueue~search":1,itemdetails:1};r[e]?t.push(r[e]):0!==r[e]&&a[e]&&t.push(r[e]=new Promise((function(t,a){for(var i="css/"+({config:"config","itemdetails~playerqueue~search":"itemdetails~playerqueue~search",itemdetails:"itemdetails",playerqueue:"playerqueue",search:"search"}[e]||e)+"."+{config:"2956469c","itemdetails~playerqueue~search":"133d2876",itemdetails:"28909c9e",playerqueue:"31d6cfe0",search:"31d6cfe0"}[e]+".css",n=l.p+i,s=document.getElementsByTagName("link"),o=0;o<s.length;o++){var c=s[o],u=c.getAttribute("data-href")||c.getAttribute("href");if("stylesheet"===c.rel&&(u===i||u===n))return t()}var d=document.getElementsByTagName("style");for(o=0;o<d.length;o++){c=d[o],u=c.getAttribute("data-href");if(u===i||u===n)return t()}var p=document.createElement("link");p.rel="stylesheet",p.type="text/css",p.onload=t,p.onerror=function(t){var i=t&&t.target&&t.target.src||n,s=new Error("Loading CSS chunk "+e+" failed.\n("+i+")");s.code="CSS_CHUNK_LOAD_FAILED",s.request=i,delete r[e],p.parentNode.removeChild(p),a(s)},p.href=n;var m=document.getElementsByTagName("head")[0];m.appendChild(p)})).then((function(){r[e]=0})));var i=n[e];if(0!==i)if(i)t.push(i[2]);else{var s=new Promise((function(t,a){i=n[e]=[t,a]}));t.push(i[2]=s);var c,u=document.createElement("script");u.charset="utf-8",u.timeout=120,l.nc&&u.setAttribute("nonce",l.nc),u.src=o(e);var d=new Error;c=function(t){u.onerror=u.onload=null,clearTimeout(p);var a=n[e];if(0!==a){if(a){var i=t&&("load"===t.type?"missing":t.type),r=t&&t.target&&t.target.src;d.message="Loading chunk "+e+" failed.\n("+i+": "+r+")",d.name="ChunkLoadError",d.type=i,d.request=r,a[1](d)}n[e]=void 0}};var p=setTimeout((function(){c({type:"timeout",target:u})}),12e4);u.onerror=u.onload=c,document.head.appendChild(u)}return Promise.all(t)},l.m=e,l.c=i,l.d=function(e,t,a){l.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:a})},l.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.t=function(e,t){if(1&t&&(e=l(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var a=Object.create(null);if(l.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)l.d(a,i,function(t){return e[t]}.bind(null,i));return a},l.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return l.d(t,"a",t),t},l.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},l.p="",l.oe=function(e){throw e};var c=window["webpackJsonp"]=window["webpackJsonp"]||[],u=c.push.bind(c);c.push=t,c=c.slice();for(var d=0;d<c.length;d++)t(c[d]);var p=u;s.push([0,"chunk-vendors"]),a()})({0:function(e,t,a){e.exports=a("56d7")},"034f":function(e,t,a){"use strict";var i=a("85ec"),r=a.n(i);r.a},"0863":function(e,t,a){e.exports=a.p+"img/qobuz.c7eb9a76.png"},"0c3b":function(e,t,a){e.exports=a.p+"img/spotify.1f3fb1af.png"},"0dac":function(e,t,a){"use strict";var i=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("section",[a("v-app-bar",{staticStyle:{"margin-bottom":"-8px"},attrs:{flat:"",light:"",dense:"",color:"transparent"}},[a("v-label",{attrs:{light:""}},[e._v(e._s(e.items.length+" "+e.$t("items")))]),a("v-spacer"),a("v-menu",{attrs:{left:"","close-on-content-click":!1},scopedSlots:e._u([{key:"activator",fn:function(t){var i=t.on;return[a("v-btn",e._g({attrs:{icon:""}},i),[a("v-icon",[e._v("sort")])],1)]}}])},[a("v-list",e._l(e.sortKeys,(function(t){return a("v-list-item",{key:t.value,domProps:{textContent:e._s(t.text)},on:{click:function(a){e.sortBy=t.value}}})})),1)],1),a("v-btn",{attrs:{icon:""},on:{click:function(t){e.sortDesc=!e.sortDesc}}},[e.sortDesc?e._e():a("v-icon",[e._v("arrow_upward")]),e.sortDesc?a("v-icon",[e._v("arrow_downward")]):e._e()],1),a("v-menu",{attrs:{left:"","close-on-content-click":!1},scopedSlots:e._u([{key:"activator",fn:function(t){var i=t.on;return[a("v-btn",e._g({attrs:{icon:""}},i),[a("v-icon",[e._v("search")])],1)]}}])},[a("v-card",[a("v-text-field",{attrs:{clearable:"","prepend-inner-icon":"search",label:"Search","hide-details":"",solo:"",dense:""},model:{value:e.search,callback:function(t){e.search=t},expression:"search"}})],1)],1),a("v-btn",{staticStyle:{"margin-right":"-15px"},attrs:{icon:""},on:{click:function(t){return e.toggleViewMode()}}},["panel"==e.viewMode?a("v-icon",[e._v("view_list")]):e._e(),"list"==e.viewMode?a("v-icon",[e._v("grid_on")]):e._e()],1)],1),a("v-data-iterator",{attrs:{items:e.items,search:e.search,"sort-by":e.sortBy,"sort-desc":e.sortDesc,"custom-filter":e.filteredItems,"hide-default-footer":"","disable-pagination":"",loading:""},scopedSlots:e._u([{key:"default",fn:function(t){return["panel"==e.viewMode?a("v-container",{attrs:{fluid:""}},[a("v-row",{attrs:{dense:"","align-content":"stretch",align:"stretch"}},e._l(t.items,(function(t){return a("v-col",{key:t.item_id,attrs:{"align-self":"stretch"}},[a("PanelviewItem",{attrs:{item:t,thumbWidth:e.thumbWidth,thumbHeight:e.thumbHeight}})],1)})),1)],1):e._e(),"list"==e.viewMode?a("v-list",{attrs:{"two-line":""}},[a("RecycleScroller",{staticClass:"scroller",attrs:{items:t.items,"item-size":72,"key-field":"item_id","page-mode":""},scopedSlots:e._u([{key:"default",fn:function(t){var i=t.item;return[a("ListviewItem",{attrs:{item:i,hideavatar:3==i.media_type&&e.$store.isMobile,hidetracknum:!0,hideproviders:i.media_type<4&&e.$store.isMobile,hidelibrary:!0,hidemenu:3==i.media_type&&e.$store.isMobile,hideduration:5==i.media_type}})]}}],null,!0)})],1):e._e()]}}])})],1)},r=[],n=(a("caad"),a("b0c0"),a("2532"),a("54f8")),s=(a("96cf"),a("c964")),o=a("d3cc"),l=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("v-card",{directives:[{name:"longpress",rawName:"v-longpress",value:e.menuClick,expression:"menuClick"}],attrs:{light:"","min-height":e.thumbHeight,"min-width":e.thumbWidth,"max-width":1.6*e.thumbWidth,hover:"",outlined:""},on:{click:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"left",37,t.key,["Left","ArrowLeft"])||"button"in t&&0!==t.button?null:void(e.onclickHandler?e.onclickHandler(e.item):e.itemClicked(e.item))},contextmenu:[e.menuClick,function(e){e.preventDefault()}]}},[i("v-img",{attrs:{src:e.$server.getImageUrl(e.item,"image",e.thumbWidth),width:"100%","aspect-ratio":"1"}}),e.isHiRes?i("div",{staticStyle:{position:"absolute","margin-left":"5px","margin-top":"-13px",height:"30px","background-color":"white","border-radius":"3px"}},[i("v-tooltip",{attrs:{bottom:""},scopedSlots:e._u([{key:"activator",fn:function(t){var r=t.on;return[i("img",e._g({attrs:{src:a("f5e3"),height:"25"}},r))]}}],null,!1,1400808392)},[i("span",[e._v(e._s(e.isHiRes))])])],1):e._e(),i("v-divider"),i("v-card-title",{class:e.$store.isMobile?"body-2":"title",staticStyle:{padding:"8px",color:"primary","margin-top":"8px"},domProps:{textContent:e._s(e.item.name)}}),e.item.artist?i("v-card-subtitle",{class:e.$store.isMobile?"caption":"body-1",staticStyle:{padding:"8px"},domProps:{textContent:e._s(e.item.artist.name)}}):e._e(),e.item.artists?i("v-card-subtitle",{class:e.$store.isMobile?"caption":"body-1",staticStyle:{padding:"8px"},domProps:{textContent:e._s(e.item.artists[0].name)}}):e._e()],1)},c=[],u=(a("4160"),a("a9e3"),a("2b0e")),d=600;u["a"].directive("longpress",{bind:function(e,t,a){var i=t.value;if("function"===typeof i){var r=null,n=function(e){"click"===e.type&&0!==e.button||null===r&&(r=setTimeout((function(){return i(e)}),d))},s=function(){null!==r&&(clearTimeout(r),r=null)};["mousedown","touchstart"].forEach((function(t){return e.addEventListener(t,n)})),["click","mouseout","touchend","touchcancel"].forEach((function(t){return e.addEventListener(t,s)}))}else u["a"].$log.warn("Expect a function, got ".concat(i))}});var p=u["a"].extend({components:{},props:{item:Object,thumbHeight:Number,thumbWidth:Number,hideproviders:Boolean,hidelibrary:Boolean,onclickHandler:null},data:function(){return{touchMoving:!1,cancelled:!1}},computed:{isHiRes:function(){var e,t=Object(n["a"])(this.item.provider_ids);try{for(t.s();!(e=t.n()).done;){var a=e.value;if(a.quality>6)return a.details?a.details:7===a.quality?"44.1/48khz 24 bits":8===a.quality?"88.2/96khz 24 bits":9===a.quality?"176/192khz 24 bits":"+192kHz 24 bits"}}catch(i){t.e(i)}finally{t.f()}return""}},created:function(){},beforeDestroy:function(){this.cancelled=!0},mounted:function(){},methods:{itemClicked:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t="";if(1===e.media_type)t="/artists/"+e.item_id;else if(2===e.media_type)t="/albums/"+e.item_id;else{if(4!==e.media_type)return void this.$server.$emit("showPlayMenu",e);t="/playlists/"+e.item_id}this.$router.push({path:t,query:{provider:e.provider}})},menuClick:function(){this.cancelled||this.$server.$emit("showContextMenu",this.item)},toggleLibrary:function(e){var t=this;return Object(s["a"])(regeneratorRuntime.mark((function a(){return regeneratorRuntime.wrap((function(a){while(1)switch(a.prev=a.next){case 0:return t.cancelled=!0,a.next=3,t.$server.toggleLibrary(e);case 3:t.cancelled=!1;case 4:case"end":return a.stop()}}),a)})))()}}}),m=p,h=a("2877"),v=a("6544"),f=a.n(v),g=a("b0af"),y=a("99d9"),b=a("ce7e"),A=a("adda"),k=a("3a2f"),w=Object(h["a"])(m,l,c,!1,null,null,null),I=w.exports;f()(w,{VCard:g["a"],VCardSubtitle:y["a"],VCardTitle:y["c"],VDivider:b["a"],VImg:A["a"],VTooltip:k["a"]});var x={components:{ListviewItem:o["a"],PanelviewItem:I},props:["mediatype","endpoint"],data:function(){return{items:[],viewMode:"list",search:"",sortDesc:!1,sortBy:"name",sortKeys:[{text:this.$t("sort_name"),value:"name"}]}},created:function(){this.endpoint.includes("playlists/")?(this.sortKeys.push({text:this.$t("sort_position"),value:"position"}),this.sortKeys.push({text:this.$t("sort_artist"),value:"artists[0].name"}),this.sortKeys.push({text:this.$t("sort_album"),value:"album.name"}),this.sortBy="position",this.viewMode="list"):this.endpoint.includes("tracks")?(this.sortKeys.push({text:this.$t("sort_artist"),value:"artists[0].name"}),this.sortKeys.push({text:this.$t("sort_album"),value:"album.name"}),this.viewMode="list"):this.endpoint.includes("albums")?(this.sortKeys.push({text:this.$t("sort_artist"),value:"artist.name"}),this.sortKeys.push({text:this.$t("sort_date"),value:"year"}),this.viewMode="panel"):this.viewMode="list";var e=localStorage.getItem("viewMode"+this.mediatype+this.endpoint);null!==e&&(this.viewMode=e),this.getItems(),this.$server.$on("refresh_listing",this.getItems)},computed:{thumbWidth:function(){return this.$store.isMobile?120:175},thumbHeight:function(){return 1.5*this.thumbWidth}},methods:{getItems:function(){var e=this;return Object(s["a"])(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return t.next=2,e.$server.getAllItems(e.endpoint,e.items);case 2:case"end":return t.stop()}}),t)})))()},toggleViewMode:function(){"panel"===this.viewMode?this.viewMode="list":this.viewMode="panel",localStorage.setItem("viewMode"+this.mediatype+this.endpoint,this.viewMode)},filteredItems:function(e,t){if(!t)return e;t=t.toLowerCase();var a,i=[],r=Object(n["a"])(e);try{for(r.s();!(a=r.n()).done;){var s=a.value;(s.name.toLowerCase().includes(t)||s.artist&&s.artist.name.toLowerCase().includes(t)||s.album&&s.album.name.toLowerCase().includes(t)||s.artists&&s.artists[0].name.toLowerCase().includes(t))&&i.push(s)}}catch(o){r.e(o)}finally{r.f()}return i}}},_=x,S=(a("a548"),a("40dc")),C=a("8336"),D=a("62ad"),P=a("a523"),R=a("c3774"),B=a("132d"),O=a("24c9"),M=a("8860"),E=a("da13"),H=a("e449"),F=a("0fd9b"),L=a("2fa4"),J=a("8654"),V=Object(h["a"])(_,i,r,!1,null,"764b0c8e",null);t["a"]=V.exports;f()(V,{VAppBar:S["a"],VBtn:C["a"],VCard:g["a"],VCol:D["a"],VContainer:P["a"],VDataIterator:R["a"],VIcon:B["a"],VLabel:O["a"],VList:M["a"],VListItem:E["a"],VMenu:H["a"],VRow:F["a"],VSpacer:L["a"],VTextField:J["a"]})},"26ea":function(e,t,a){e.exports=a.p+"img/demo_player.c079bd97.png"},2755:function(e,t,a){e.exports=a.p+"img/http_streamer.4c4e4880.png"},3232:function(e,t,a){e.exports=a.p+"img/homeassistant.29fe3282.png"},"3d05":function(e,t,a){e.exports=a.p+"img/webplayer.8e1a0da9.png"},"49f8":function(e,t,a){var i={"./en.json":"edd4","./nl.json":"a625"};function r(e){var t=n(e);return a(t)}function n(e){if(!a.o(i,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return i[e]}r.keys=function(){return Object.keys(i)},r.resolve=n,e.exports=r,r.id="49f8"},"4bfb":function(e,t,a){e.exports=a.p+"img/default_artist.7305b29c.png"},"4f9f":function(e,t,a){"use strict";var i=a("691f"),r=a.n(i);r.a},"56d7":function(e,t,a){"use strict";a.r(t);a("e623"),a("e379"),a("5dc8"),a("37e1");var i=a("2b0e"),r=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("v-app",[a("TopBar"),a("NavigationMenu"),a("v-main",[a("router-view",{key:e.$route.path,attrs:{app:""}})],1),a("PlayerOSD",{attrs:{showPlayerSelect:e.showPlayerSelect}}),a("ContextMenu"),a("PlayerSelect"),a("v-overlay",{attrs:{value:e.$store.loading}},[a("v-progress-circular",{attrs:{indeterminate:"",size:"64"}})],1)],1)},n=[],s=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("v-navigation-drawer",{attrs:{dark:"",app:"",clipped:"",temporary:""},model:{value:e.$store.showNavigationMenu,callback:function(t){e.$set(e.$store,"showNavigationMenu",t)},expression:"$store.showNavigationMenu"}},[a("v-list",[e._l(e.items,(function(t){return a("v-list-item",{key:t.title,on:{click:function(a){return e.$router.push(t.path)}}},[a("v-list-item-action",[a("v-icon",[e._v(e._s(t.icon))])],1),a("v-list-item-content",[a("v-list-item-title",[e._v(e._s(t.title))])],1)],1)})),a("v-btn",{attrs:{icon:""},on:{click:function(t){e.$store.showNavigationMenu=!e.$store.showNavigationMenu}}})],2)],1)},o=[],l=i["a"].extend({props:{},data:function(){return{items:[{title:this.$t("home"),icon:"home",path:"/"},{title:this.$t("artists"),icon:"person",path:"/artists"},{title:this.$t("albums"),icon:"album",path:"/albums"},{title:this.$t("tracks"),icon:"audiotrack",path:"/tracks"},{title:this.$t("playlists"),icon:"playlist_play",path:"/playlists"},{title:this.$t("radios"),icon:"radio",path:"/radios"},{title:this.$t("search"),icon:"search",path:"/search"},{title:this.$t("settings"),icon:"settings",path:"/config"}]}},mounted:function(){},methods:{}}),c=l,u=a("2877"),d=a("6544"),p=a.n(d),m=a("8336"),h=a("132d"),v=a("8860"),f=a("da13"),g=a("1800"),y=a("5d23"),b=a("f774"),A=Object(u["a"])(c,s,o,!1,null,null,null),k=A.exports;p()(A,{VBtn:m["a"],VIcon:h["a"],VList:v["a"],VListItem:f["a"],VListItemAction:g["a"],VListItemContent:y["a"],VListItemTitle:y["c"],VNavigationDrawer:b["a"]});var w=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("v-app-bar",{attrs:{app:"",flat:"",dense:"",dark:"",color:e.color}},[a("v-layout",[e.$store.topBarTransparent?e._e():a("div",{staticClass:"body-1",staticStyle:{position:"fixed",width:"100%","text-align":"center","vertical-align":"center","margin-top":"11px"}},[e._v(e._s(e.$store.windowtitle))]),a("v-btn",{staticStyle:{"margin-left":"-13px"},attrs:{icon:""},on:{click:function(t){e.$store.showNavigationMenu=!e.$store.showNavigationMenu}}},[a("v-icon",[e._v("menu")])],1),a("v-btn",{attrs:{icon:""},on:{click:function(t){return e.$router.go(-1)}}},[a("v-icon",[e._v("arrow_back")])],1),a("v-spacer"),e.$store.topBarContextItem?a("v-btn",{staticStyle:{"margin-right":"-23px"},attrs:{icon:""},on:{click:function(t){return e.$server.$emit("showContextMenu",e.$store.topBarContextItem)}}},[a("v-icon",[e._v("more_vert")])],1):e._e()],1)],1)},I=[],x=i["a"].extend({props:{},data:function(){return{}},computed:{color:function(){return this.$store.topBarTransparent?"transparent":"black"}},mounted:function(){},methods:{}}),_=x,S=a("40dc"),C=a("a722"),D=a("2fa4"),P=Object(u["a"])(_,w,I,!1,null,null,null),R=P.exports;p()(P,{VAppBar:S["a"],VBtn:m["a"],VIcon:h["a"],VLayout:C["a"],VSpacer:D["a"]});var B=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("v-dialog",{attrs:{"max-width":"500px"},on:{input:function(t){return e.$emit("input",t)}},model:{value:e.visible,callback:function(t){e.visible=t},expression:"visible"}},[a("v-card",[0===e.playlists.length?a("v-list",[a("v-subheader",{staticClass:"title"},[e._v(e._s(e.header))]),e.subheader?a("v-subheader",[e._v(e._s(e.subheader))]):e._e(),e._l(e.menuItems,(function(t){return a("div",{key:t.label},[a("v-list-item",{on:{click:function(a){return e.itemCommand(t.action)}}},[a("v-list-item-avatar",[a("v-icon",[e._v(e._s(t.icon))])],1),a("v-list-item-content",[a("v-list-item-title",[e._v(e._s(e.$t(t.label)))])],1)],1),a("v-divider")],1)}))],2):e._e(),e.playlists.length>0?a("v-list",[a("v-subheader",{staticClass:"title"},[e._v(e._s(e.header))]),e._l(e.playlists,(function(t,i){return a("listviewItem",{key:t.item_id,attrs:{item:t,totalitems:e.playlists.length,index:i,hideavatar:!1,hidetracknum:!0,hideproviders:!1,hidelibrary:!0,hidemenu:!0,onclickHandler:e.addToPlaylist}})}))],2):e._e()],1)],1)},O=[],M=(a("caad"),a("b0c0"),a("2532"),a("54f8")),E=(a("96cf"),a("c964")),H=a("d3cc"),F=i["a"].extend({components:{ListviewItem:H["a"]},props:{},watch:{},data:function(){return{visible:!1,menuItems:[],header:"",subheader:"",curItem:null,curPlaylist:null,playerQueueItems:[],playlists:[]}},mounted:function(){},created:function(){this.$server.$on("showContextMenu",this.showContextMenu),this.$server.$on("showPlayMenu",this.showPlayMenu)},computed:{},methods:{showContextMenu:function(e){if(this.playlists=[],e){this.curItem=e;var t=this.$store.topBarContextItem,a=[];e!==t&&a.push({label:"show_info",action:"info",icon:"info"}),0===e.in_library.length&&a.push({label:"add_library",action:"toggle_library",icon:"favorite_border"}),e.in_library.length>0&&a.push({label:"remove_library",action:"toggle_library",icon:"favorite"}),t&&4===t.media_type&&(this.curPlaylist=t,3===e.media_type&&t.is_editable&&a.push({label:"remove_playlist",action:"remove_playlist",icon:"remove_circle_outline"})),3===e.media_type&&a.push({label:"add_playlist",action:"add_playlist",icon:"add_circle_outline"}),this.menuItems=a,this.header=e.name,this.subheader="",this.visible=!0}},showPlayMenu:function(e){if(this.playlists=[],this.curItem=e,e){var t=[{label:"play_now",action:"play",icon:"play_circle_outline"},{label:"play_next",action:"next",icon:"queue_play_next"},{label:"add_queue",action:"add",icon:"playlist_add"}];this.menuItems=t,this.header=e.name,this.subheader="",this.visible=!0}},showPlaylistsMenu:function(){var e=this;return Object(E["a"])(regeneratorRuntime.mark((function t(){var a,i,r,n,s,o,l,c,u,d,p,m;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:a=[],i=Object(M["a"])(e.curItem.provider_ids);try{for(i.s();!(r=i.n()).done;)n=r.value,a.push(n.provider)}catch(h){i.e(h)}finally{i.f()}return t.next=5,e.$server.getData("library/playlists");case 5:s=t.sent,o=[],l=Object(M["a"])(s.items),t.prev=8,l.s();case 10:if((c=l.n()).done){t.next=33;break}if(u=c.value,!u.is_editable||e.curPlaylist&&u.item_id===e.curPlaylist.item_id){t.next=31;break}d=Object(M["a"])(u.provider_ids),t.prev=14,d.s();case 16:if((p=d.n()).done){t.next=23;break}if(m=p.value,!a.includes(m.provider)){t.next=21;break}return o.push(u),t.abrupt("break",23);case 21:t.next=16;break;case 23:t.next=28;break;case 25:t.prev=25,t.t0=t["catch"](14),d.e(t.t0);case 28:return t.prev=28,d.f(),t.finish(28);case 31:t.next=10;break;case 33:t.next=38;break;case 35:t.prev=35,t.t1=t["catch"](8),l.e(t.t1);case 38:return t.prev=38,l.f(),t.finish(38);case 41:e.playlists=o;case 42:case"end":return t.stop()}}),t,null,[[8,35,38,41],[14,25,28,31]])})))()},itemCommand:function(e){if("info"===e){var t="";1===this.curItem.media_type&&(t="artists"),2===this.curItem.media_type&&(t="albums"),3===this.curItem.media_type&&(t="tracks"),4===this.curItem.media_type&&(t="playlists"),5===this.curItem.media_type&&(t="radios"),this.$router.push({path:"/"+t+"/"+this.curItem.item_id,query:{provider:this.curItem.provider}}),this.visible=!1}else{if("playmenu"===e)return this.showPlayMenu(this.curItem);if("add_playlist"===e)return this.showPlaylistsMenu();"remove_playlist"===e?(this.removeFromPlaylist(this.curItem,this.curPlaylist.item_id,"playlist_remove"),this.visible=!1):"toggle_library"===e?(this.$server.toggleLibrary(this.curItem),this.visible=!1):(this.$server.playItem(this.curItem,e),this.visible=!1)}},addToPlaylist:function(e){var t=this,a="playlists/"+e.item_id+"/tracks";this.$server.putData(a,this.curItem).then((function(e){t.visible=!1}))},removeFromPlaylist:function(e,t){var a=this,i="playlists/"+t+"/tracks";this.$server.deleteData(i,e).then((function(e){a.$server.$emit("refresh_listing")}))}}}),L=F,J=a("b0af"),V=a("169a"),z=a("ce7e"),N=a("8270"),j=a("e0c7"),Y=Object(u["a"])(L,B,O,!1,null,null,null),T=Y.exports;p()(Y,{VCard:J["a"],VDialog:V["a"],VDivider:z["a"],VIcon:h["a"],VList:v["a"],VListItem:f["a"],VListItemAvatar:N["a"],VListItemContent:y["a"],VListItemTitle:y["c"],VSubheader:j["a"]});var U=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("v-footer",{staticStyle:{"background-color":"black"},attrs:{app:"",fixed:"",padless:"",light:"",elevation:"10"}},[e.$store.isMobile?e._e():i("v-card",{staticStyle:{"margin-top":"1px"},attrs:{dense:"",flat:"",light:"",subheader:"",tile:"",width:"100%",color:"#E0E0E0"}},[i("v-list-item",{attrs:{"two-line":""}},[e.curQueueItem?i("v-list-item-avatar",{attrs:{tile:""}},[i("img",{staticStyle:{border:"1px solid rgba(0,0,0,.54)"},attrs:{src:e.$server.getImageUrl(e.curQueueItem),"lazy-src":a("71db")}})]):i("v-list-item-avatar",[i("v-icon",[e._v("speaker")])],1),i("v-list-item-content",[e.curQueueItem?i("v-list-item-title",[e._v(" "+e._s(e.curQueueItem.name))]):e.$server.activePlayer?i("v-list-item-title",[e._v(" "+e._s(e.$server.activePlayer.name))]):e._e(),e.curQueueItem?i("v-list-item-subtitle",{staticStyle:{color:"primary"}},e._l(e.curQueueItem.artists,(function(t,a){return i("span",{key:a},[i("a",{on:{click:[function(a){return e.artistClick(t)},function(e){e.stopPropagation()}]}},[e._v(e._s(t.name))]),a+1<e.curQueueItem.artists.length?i("label",{key:a},[e._v(" / ")]):e._e()])})),0):e._e()],1),e.streamDetails?i("v-list-item-action",[i("v-menu",{attrs:{"close-on-content-click":!1,"nudge-width":250,"offset-x":"",top:""},nativeOn:{click:function(e){e.preventDefault()}},scopedSlots:e._u([{key:"activator",fn:function(t){var r=t.on;return[i("v-btn",e._g({attrs:{icon:""}},r),[e.streamDetails.quality>6?i("v-img",{attrs:{contain:"",src:a("f5e3"),height:"30"}}):e._e(),e.streamDetails.quality<=6?i("v-img",{staticStyle:{filter:"invert(100%)"},attrs:{contain:"",src:e.streamDetails.content_type?a("9e01")("./"+e.streamDetails.content_type+".png"):"",height:"30"}}):e._e()],1)]}}],null,!1,872579316)},[e.streamDetails?i("v-list",[i("v-subheader",{staticClass:"title"},[e._v(e._s(e.$t("stream_details")))]),i("v-list-item",{attrs:{tile:"",dense:""}},[i("v-list-item-icon",[i("v-img",{attrs:{"max-width":"50",contain:"",src:e.streamDetails.provider?a("9e01")("./"+e.streamDetails.provider+".png"):""}})],1),i("v-list-item-content",[i("v-list-item-title",[e._v(e._s(e.streamDetails.provider))])],1)],1),i("v-divider"),i("v-list-item",{attrs:{tile:"",dense:""}},[i("v-list-item-icon",[i("v-img",{staticStyle:{filter:"invert(100%)"},attrs:{"max-width":"50",contain:"",src:e.streamDetails.content_type?a("9e01")("./"+e.streamDetails.content_type+".png"):""}})],1),i("v-list-item-content",[i("v-list-item-title",[e._v(e._s(e.streamDetails.sample_rate/1e3)+" kHz / "+e._s(e.streamDetails.bit_depth)+" bits ")])],1)],1),i("v-divider"),e.playerQueueDetails.crossfade_enabled?i("div",[i("v-list-item",{attrs:{tile:"",dense:""}},[i("v-list-item-icon",[i("v-img",{attrs:{"max-width":"50",contain:"",src:a("e7af")}})],1),i("v-list-item-content",[i("v-list-item-title",[e._v(e._s(e.$t("crossfade_enabled")))])],1)],1),i("v-divider")],1):e._e(),e.streamVolumeLevelAdjustment?i("div",[i("v-list-item",{attrs:{tile:"",dense:""}},[i("v-list-item-icon",[i("v-icon",{staticStyle:{"margin-left":"13px"},attrs:{color:"black"}},[e._v("volume_up")])],1),i("v-list-item-content",[i("v-list-item-title",{staticStyle:{"margin-left":"12px"}},[e._v(e._s(e.streamVolumeLevelAdjustment))])],1)],1),i("v-divider")],1):e._e()],1):e._e()],1)],1):e._e()],1),i("div",{staticClass:"body-2",staticStyle:{height:"30px",width:"100%",color:"rgba(0,0,0,.65)","margin-top":"-12px","background-color":"#E0E0E0"},attrs:{align:"center"}},[e.curQueueItem?i("div",{staticStyle:{height:"12px","margin-left":"22px","margin-right":"20px","margin-top":"2px"}},[i("span",{staticClass:"left"},[e._v(" "+e._s(e.playerCurTimeStr)+" ")]),i("span",{staticClass:"right"},[e._v(" "+e._s(e.playerTotalTimeStr)+" ")])]):e._e()]),e.curQueueItem?i("v-progress-linear",{style:"margin-top:-22px;margin-left:80px;width:"+e.progressBarWidth+"px;",attrs:{fixed:"",light:"",value:e.progress}}):e._e()],1),i("v-list-item",{staticStyle:{height:"62px","margin-bottom":"5px","margin-top":"-4px","background-color":"black"},attrs:{dark:"",dense:""}},[e.$server.activePlayer?i("v-list-item-action",{staticStyle:{"margin-top":"15px"}},[i("v-btn",{attrs:{small:"",icon:""},on:{click:function(t){return e.playerCommand("previous")}}},[i("v-icon",[e._v("skip_previous")])],1)],1):e._e(),e.$server.activePlayer?i("v-list-item-action",{staticStyle:{"margin-left":"-32px","margin-top":"15px"}},[i("v-btn",{attrs:{icon:"","x-large":""},on:{click:function(t){return e.playerCommand("play_pause")}}},[i("v-icon",{attrs:{size:"50"}},[e._v(e._s("playing"==e.$server.activePlayer.state?"pause":"play_arrow"))])],1)],1):e._e(),e.$server.activePlayer?i("v-list-item-action",{staticStyle:{"margin-top":"15px"}},[i("v-btn",{attrs:{icon:"",small:""},on:{click:function(t){return e.playerCommand("next")}}},[i("v-icon",[e._v("skip_next")])],1)],1):e._e(),i("v-list-item-content"),e.$server.activePlayer?i("v-list-item-action",{staticStyle:{padding:"28px"}},[i("v-btn",{attrs:{text:"",icon:""},on:{click:function(t){return e.$router.push("/playerqueue/")}}},[i("v-flex",{staticClass:"vertical-btn",attrs:{xs12:""}},[i("v-icon",[e._v("queue_music")]),i("span",{staticClass:"caption",staticStyle:{"padding-top":"5px"}},[e._v(e._s(e.$t("queue")))])],1)],1)],1):e._e(),e.$server.activePlayer&&!e.$store.isMobile?i("v-list-item-action",{staticStyle:{padding:"20px"}},[i("v-menu",{attrs:{"close-on-content-click":!1,"nudge-width":250,"offset-x":"",top:""},nativeOn:{click:function(e){e.preventDefault()}},scopedSlots:e._u([{key:"activator",fn:function(t){var a=t.on;return[i("v-btn",e._g({attrs:{icon:""}},a),[i("v-flex",{staticClass:"vertical-btn",attrs:{xs12:""}},[i("v-icon",[e._v("volume_up")]),i("span",{staticClass:"caption",staticStyle:{"padding-top":"5px"}},[e._v(e._s(Math.round(e.$server.activePlayer.volume_level)))])],1)],1)]}}],null,!1,2163274026)},[i("VolumeControl",{attrs:{players:e.$server.players,player_id:e.$server.activePlayer.player_id}})],1)],1):e._e(),i("v-list-item-action",{staticStyle:{padding:"30px","margin-right":"15px"}},[i("v-btn",{attrs:{text:"",icon:""},on:{click:function(t){return e.$server.$emit("showPlayersMenu")}}},[i("v-flex",{staticClass:"vertical-btn",attrs:{xs12:""}},[i("v-icon",[e._v("speaker")]),e.$server.activePlayer?i("span",{staticClass:"caption",staticStyle:{"padding-top":"5px"}},[e._v(e._s(e.truncateString(e.$server.activePlayer.name,18)))]):i("span",{staticClass:"caption"})],1)],1)],1)],1),e.$store.isInStandaloneMode?i("v-card",{staticStyle:{height:"20px"},attrs:{dense:"",flat:"",light:"",subheader:"",tile:"",width:"100%",color:"black"}}):e._e()],1)},X=[],Q=(a("fb6a"),a("4fad"),a("d3b7"),a("ac1f"),a("25f0"),a("5319"),a("d0af")),K=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("v-card",[a("v-list",[a("v-list-item",{staticStyle:{height:"50px","padding-bottom":"5"}},[a("v-list-item-avatar",{staticStyle:{"margin-left":"-10px"},attrs:{tile:""}},[a("v-icon",{attrs:{large:""}},[e._v(e._s(e.players[e.player_id].is_group?"speaker_group":"speaker"))])],1),a("v-list-item-content",{staticStyle:{"margin-left":"-15px"}},[a("v-list-item-title",[e._v(e._s(e.players[e.player_id].name))]),a("v-list-item-subtitle",[e._v(e._s(e.$t("state."+e.players[e.player_id].state)))])],1)],1),a("v-divider"),e._l(e.volumePlayerIds,(function(t){return a("div",{key:t},[a("div",{staticClass:"body-2",style:e.players[t].powered?"color:rgba(0,0,0,.54);":"color:rgba(0,0,0,.38);"},[a("v-btn",{staticStyle:{"margin-left":"8px"},style:e.players[t].powered?"color:rgba(0,0,0,.54);":"color:rgba(0,0,0,.38);",attrs:{icon:""},on:{click:function(a){return e.togglePlayerPower(t)}}},[a("v-icon",[e._v("power_settings_new")])],1),a("span",{staticStyle:{"margin-left":"10px"}},[e._v(e._s(e.players[t].name))]),a("div",{staticStyle:{"margin-top":"-8px","margin-left":"15px","margin-right":"15px",height:"35px"}},[a("v-slider",{attrs:{lazy:"",disabled:!e.players[t].powered,value:Math.round(e.players[t].volume_level),"prepend-icon":"volume_down","append-icon":"volume_up"},on:{end:function(a){return e.setPlayerVolume(t,a)},"click:append":function(a){return e.setPlayerVolume(t,"up")},"click:prepend":function(a){return e.setPlayerVolume(t,"down")}}})],1)],1),a("v-divider")],1)}))],2)],1)},G=[],W=a("d0ff"),q=i["a"].extend({props:["value","players","player_id"],data:function(){return{}},computed:{volumePlayerIds:function(){var e=[this.player_id];return e.push.apply(e,Object(W["a"])(this.players[this.player_id].group_childs)),e}},mounted:function(){},methods:{setPlayerVolume:function(e,t){"up"===t?t=this.$server.players[e].volume_level+1:"down"===t&&(t=this.$server.players[e].volume_level-1),this.$server.playerCommand("volume_set",t,e),this.players[e].volume_level=t},togglePlayerPower:function(e){this.$server.playerCommand("power_toggle",null,e)}}}),Z=q,$=a("ba0d"),ee=Object(u["a"])(Z,K,G,!1,null,null,null),te=ee.exports;p()(ee,{VBtn:m["a"],VCard:J["a"],VDivider:z["a"],VIcon:h["a"],VList:v["a"],VListItem:f["a"],VListItemAvatar:N["a"],VListItemContent:y["a"],VListItemSubtitle:y["b"],VListItemTitle:y["c"],VSlider:$["a"]});var ae=i["a"].extend({components:{VolumeControl:te},props:[],data:function(){return{playerQueueDetails:{}}},watch:{},computed:{curQueueItem:function(){return this.playerQueueDetails?this.playerQueueDetails.cur_item:null},progress:function(){if(!this.curQueueItem)return 0;var e=this.curQueueItem.duration,t=this.playerQueueDetails.cur_item_time,a=t/e*100;return a},playerCurTimeStr:function(){if(!this.curQueueItem)return"0:00";var e=this.playerQueueDetails.cur_item_time;return e.toString().formatDuration()},playerTotalTimeStr:function(){if(!this.curQueueItem)return"0:00";var e=this.curQueueItem.duration;return e.toString().formatDuration()},progressBarWidth:function(){return window.innerWidth-160},streamDetails:function(){return this.playerQueueDetails.cur_item&&this.playerQueueDetails.cur_item&&this.playerQueueDetails.cur_item.streamdetails.provider&&this.playerQueueDetails.cur_item.streamdetails.content_type?this.playerQueueDetails.cur_item.streamdetails:{}},streamVolumeLevelAdjustment:function(){if(!this.streamDetails||!this.streamDetails.sox_options)return"";if(this.streamDetails.sox_options.includes("vol ")){var e=/(.*vol\s+)(.*)(\s+dB.*)/,t=this.streamDetails.sox_options.replace(e,"$2");return t+" dB"}return""}},created:function(){this.$server.$on("queue updated",this.queueUpdatedMsg),this.$server.$on("new player selected",this.getQueueDetails)},methods:{playerCommand:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;this.$server.playerCommand(e,t,this.$server.activePlayerId)},artistClick:function(e){var t="/artists/"+e.item_id;this.$router.push({path:t,query:{provider:e.provider}})},queueUpdatedMsg:function(e){var t=this.$server.players[this.$server.activePlayerId].active_queue;if(e.player_id===t)for(var a=0,r=Object.entries(e);a<r.length;a++){var n=Object(Q["a"])(r[a],2),s=n[0],o=n[1];i["a"].set(this.playerQueueDetails,s,o)}},getQueueDetails:function(){var e=this;return Object(E["a"])(regeneratorRuntime.mark((function t(){var a,i;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:if(!e.$server.activePlayer){t.next=6;break}return a=e.$server.players[e.$server.activePlayerId].active_queue,i="players/"+a+"/queue",t.next=5,e.$server.getData(i);case 5:e.playerQueueDetails=t.sent;case 6:case"end":return t.stop()}}),t)})))()},truncateString:function(e,t){return e.length<=t?e:e.slice(0,t)+"..."}}}),ie=ae,re=(a("6915"),a("0e8f")),ne=a("553a"),se=a("adda"),oe=a("34c3"),le=a("e449"),ce=a("8e36"),ue=Object(u["a"])(ie,U,X,!1,null,"21e0f2f0",null),de=ue.exports;p()(ue,{VBtn:m["a"],VCard:J["a"],VDivider:z["a"],VFlex:re["a"],VFooter:ne["a"],VIcon:h["a"],VImg:se["a"],VList:v["a"],VListItem:f["a"],VListItemAction:g["a"],VListItemAvatar:N["a"],VListItemContent:y["a"],VListItemIcon:oe["a"],VListItemSubtitle:y["b"],VListItemTitle:y["c"],VMenu:le["a"],VProgressLinear:ce["a"],VSubheader:j["a"]});var pe=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("v-navigation-drawer",{attrs:{right:"",app:"",clipped:"",temporary:"",width:"300"},model:{value:e.visible,callback:function(t){e.visible=t},expression:"visible"}},[a("v-card-title",{staticClass:"headline"},[a("b",[e._v(e._s(e.$t("players")))])]),a("v-list",{attrs:{dense:""}},[a("v-divider"),e._l(e.filteredPlayerIds,(function(t){return a("div",{key:t,style:e.$server.activePlayerId==t?"background-color:rgba(50, 115, 220, 0.3);":""},[a("v-list-item",{staticStyle:{"margin-left":"-5px","margin-right":"-15px"},attrs:{ripple:"",dense:""},on:{click:function(a){return e.$server.switchPlayer(e.$server.players[t].player_id)}}},[a("v-list-item-avatar",{attrs:{tile:""}},[a("v-icon",{attrs:{size:"45"}},[e._v(e._s(e.$server.players[t].is_group_player?"speaker_group":"speaker"))])],1),a("v-list-item-content",{staticStyle:{"margin-left":"-15px"}},[a("v-list-item-title",{staticClass:"subtitle-1"},[e._v(e._s(e.$server.players[t].name))]),a("v-list-item-subtitle",{key:e.$server.players[t].state,staticClass:"body-2",staticStyle:{"font-weight":"normal"}},[e._v(" "+e._s(e.$t("state."+e.$server.players[t].state))+" ")])],1),e.$server.activePlayerId?a("v-list-item-action",{staticStyle:{"padding-right":"10px"}},[a("v-menu",{attrs:{"close-on-content-click":!1,"close-on-click":!0,"nudge-width":250,"offset-x":"",right:""},nativeOn:{click:[function(e){e.stopPropagation()},function(e){e.stopPropagation(),e.preventDefault()}]},scopedSlots:e._u([{key:"activator",fn:function(i){var r=i.on;return[a("v-btn",e._g({staticStyle:{color:"rgba(0,0,0,.54)"},attrs:{icon:""}},r),[a("v-flex",{staticClass:"vertical-btn",attrs:{xs12:""}},[a("v-icon",[e._v("volume_up")]),a("span",{staticClass:"overline"},[e._v(e._s(Math.round(e.$server.players[t].volume_level)))])],1)],1)]}}],null,!0)},[a("VolumeControl",{attrs:{players:e.$server.players,player_id:t}})],1)],1):e._e()],1),a("v-divider")],1)}))],2)],1)},me=[],he=i["a"].extend({components:{VolumeControl:te},watch:{},data:function(){return{filteredPlayerIds:[],visible:!1}},computed:{},created:function(){this.$server.$on("showPlayersMenu",this.show),this.$server.$on("players changed",this.getAvailablePlayers),this.getAvailablePlayers()},methods:{show:function(){this.visible=!0},getAvailablePlayers:function(){for(var e in this.filteredPlayerIds=[],this.$server.players)this.$server.players[e].available&&this.filteredPlayerIds.push(e)}}}),ve=he,fe=(a("4f9f"),a("99d9")),ge=Object(u["a"])(ve,pe,me,!1,null,"7c65a917",null),ye=ge.exports;p()(ge,{VBtn:m["a"],VCardTitle:fe["c"],VDivider:z["a"],VFlex:re["a"],VIcon:h["a"],VList:v["a"],VListItem:f["a"],VListItemAction:g["a"],VListItemAvatar:N["a"],VListItemContent:y["a"],VListItemSubtitle:y["b"],VListItemTitle:y["c"],VMenu:le["a"],VNavigationDrawer:b["a"]});var be=i["a"].extend({name:"App",components:{NavigationMenu:k,TopBar:R,ContextMenu:T,PlayerOSD:de,PlayerSelect:ye},data:function(){return{showPlayerSelect:!1}},created:function(){var e="",t=window.location;e=t.origin+t.pathname,this.$server.connect(e)}}),Ae=be,ke=(a("034f"),a("7496")),we=a("f6c4"),Ie=a("a797"),xe=a("490a"),_e=Object(u["a"])(Ae,r,n,!1,null,null,null),Se=_e.exports;p()(_e,{VApp:ke["a"],VMain:we["a"],VOverlay:Ie["a"],VProgressCircular:xe["a"]});var Ce=a("9483");Object(Ce["a"])("".concat("","service-worker.js"),{ready:function(){},registered:function(){},cached:function(){},updatefound:function(){},updated:function(){alert("New content is available; please refresh."),window.location.reload(!0)},offline:function(){alert("No internet connection found. App is running in offline mode.")},error:function(e){}});var De=a("f3f3"),Pe=a("8c4f"),Re=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("section",[a("v-list",{attrs:{tile:""}},e._l(e.items,(function(t){return a("v-list-item",{key:t.title,attrs:{tile:""},on:{click:function(a){return e.$router.push(t.path)}}},[a("v-list-item-icon",{staticStyle:{"margin-left":"15px"}},[a("v-icon",[e._v(e._s(t.icon))])],1),a("v-list-item-content",[a("v-list-item-title",{domProps:{textContent:e._s(t.title)}})],1)],1)})),1)],1)},Be=[],Oe={name:"home",data:function(){return{items:[{title:this.$t("artists"),icon:"person",path:"/artists"},{title:this.$t("albums"),icon:"album",path:"/albums"},{title:this.$t("tracks"),icon:"audiotrack",path:"/tracks"},{title:this.$t("playlists"),icon:"playlist_play",path:"/playlists"},{title:this.$t("search"),icon:"search",path:"/search"}]}},created:function(){this.$store.windowtitle=this.$t("musicassistant")}},Me=Oe,Ee=Object(u["a"])(Me,Re,Be,!1,null,null,null),He=Ee.exports;p()(Ee,{VIcon:h["a"],VList:v["a"],VListItem:f["a"],VListItemContent:y["a"],VListItemIcon:oe["a"],VListItemTitle:y["c"]});var Fe=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("section",[a("ItemsListing",{attrs:{mediatype:e.mediatype,provider:e.provider,endpoint:"library/"+e.mediatype}})],1)},Le=[],Je=a("0dac"),Ve={name:"browse",components:{ItemsListing:Je["a"]},props:{mediatype:String,provider:String},data:function(){return{}},created:function(){this.$store.windowtitle=this.$t(this.mediatype)},computed:{},methods:{}},ze=Ve,Ne=Object(u["a"])(ze,Fe,Le,!1,null,null,null),je=Ne.exports;i["a"].use(Pe["a"]);var Ye=[{path:"/",name:"home",component:He},{path:"/config",name:"config",component:function(){return a.e("config").then(a.bind(null,"1071"))},props:function(e){return Object(De["a"])(Object(De["a"])({},e.params),e.query)}},{path:"/config/:configKey",name:"configKey",component:function(){return a.e("config").then(a.bind(null,"1071"))},props:function(e){return Object(De["a"])(Object(De["a"])({},e.params),e.query)}},{path:"/search",name:"search",component:function(){return Promise.all([a.e("itemdetails~playerqueue~search"),a.e("search")]).then(a.bind(null,"2d3b"))},props:function(e){return Object(De["a"])(Object(De["a"])({},e.params),e.query)}},{path:"/:media_type/:media_id",name:"itemdetails",component:function(){return Promise.all([a.e("itemdetails~playerqueue~search"),a.e("itemdetails")]).then(a.bind(null,"32a2"))},props:function(e){return Object(De["a"])(Object(De["a"])({},e.params),e.query)}},{path:"/playerqueue",name:"playerqueue",component:function(){return Promise.all([a.e("itemdetails~playerqueue~search"),a.e("playerqueue")]).then(a.bind(null,"b097"))},props:function(e){return Object(De["a"])(Object(De["a"])({},e.params),e.query)}},{path:"/:mediatype",name:"browse",component:je,props:function(e){return Object(De["a"])(Object(De["a"])({},e.params),e.query)}}],Te=new Pe["a"]({mode:"hash",routes:Ye}),Ue=Te,Xe=(a("4160"),a("466d"),a("1276"),a("159b"),a("ddb0"),a("a925"));function Qe(){var e=a("49f8"),t={};return e.keys().forEach((function(a){var i=a.match(/([A-Za-z0-9-_]+)\./i);if(i&&i.length>1){var r=i[1];t[r]=e(a)}})),t}i["a"].use(Xe["a"]);var Ke=new Xe["a"]({locale:navigator.language.split("-")[0],fallbackLocale:"en",messages:Qe()}),Ge=(a("d5e8"),a("d1e78"),a("e508")),We=(a("a899"),a("f309"));i["a"].use(We["a"]);var qe=new We["a"]({}),Ze=new i["a"]({data:function(){return{windowtitle:"Home",loading:!1,showNavigationMenu:!1,topBarTransparent:!1,topBarContextItem:null,isMobile:!1,isInStandaloneMode:!1}},created:function(){this.handleWindowOptions(),window.addEventListener("resize",this.handleWindowOptions)},destroyed:function(){window.removeEventListener("resize",this.handleWindowOptions)},methods:{handleWindowOptions:function(){this.isMobile=document.body.clientWidth<700,this.isInStandaloneMode=!0===window.navigator.standalone||window.matchMedia("(display-mode: standalone)").matches}}}),$e={globalStore:Ze,install:function(e,t){e.prototype.$store=Ze}},et=(a("99af"),a("a434"),a("8a79"),a("3ca3"),a("2b3d"),a("bc3a")),tt=a.n(et),at=a("3667"),it=a.n(at),rt={timeout:6e4},nt=tt.a.create(rt),st=new i["a"]({_address:"",_ws:null,data:function(){return{connected:!1,players:{},activePlayerId:null,syncStatus:[]}},methods:{connect:function(e){var t=this;return Object(E["a"])(regeneratorRuntime.mark((function a(){var i;return regeneratorRuntime.wrap((function(a){while(1)switch(a.prev=a.next){case 0:e.endsWith("/")||(e+="/"),t._address=e,i=e.replace("http","ws")+"ws",t._ws=new WebSocket(i),t._ws.onopen=t._onWsConnect,t._ws.onmessage=t._onWsMessage,t._ws.onclose=t._onWsClose,t._ws.onerror=t._onWsError;case 8:case"end":return a.stop()}}),a)})))()},toggleLibrary:function(e){var t=this;return Object(E["a"])(regeneratorRuntime.mark((function a(){return regeneratorRuntime.wrap((function(a){while(1)switch(a.prev=a.next){case 0:if(0!==e.in_library.length){a.next=6;break}return a.next=3,t.putData("library",e);case 3:e.in_library=[e.provider],a.next=9;break;case 6:return a.next=8,t.deleteData("library",e);case 8:e.in_library=[];case 9:case"end":return a.stop()}}),a)})))()},getImageUrl:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"image",a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;return e&&e.media_type?"database"===e.provider&&"image"===t?"".concat(this._address,"api/").concat(e.media_type,"/").concat(e.item_id,"/thumb?provider=").concat(e.provider,"&size=").concat(a):e.metadata&&e.metadata[t]?e.metadata[t]:e.album&&e.album.metadata&&e.album.metadata[t]?e.album.metadata[t]:e.artist&&e.artist.metadata&&e.artist.metadata[t]?e.artist.metadata[t]:e.album&&e.album.artist&&e.album.artist.metadata&&e.album.artist.metadata[t]?e.album.artist.metadata[t]:e.artists&&e.artists[0].metadata&&e.artists[0].metadata[t]?e.artists[0].metadata[t]:"fanart"===t?this.getImageUrl(e,"image",a):"":""},getData:function(e){var t=arguments,a=this;return Object(E["a"])(regeneratorRuntime.mark((function r(){var n,s,o;return regeneratorRuntime.wrap((function(r){while(1)switch(r.prev=r.next){case 0:return n=t.length>1&&void 0!==t[1]?t[1]:{},s=a._address+"api/"+e,r.next=4,nt.get(s,{params:n});case 4:return o=r.sent,i["a"].$log.debug("getData",e,o),r.abrupt("return",o.data);case 7:case"end":return r.stop()}}),r)})))()},postData:function(e,t){var a=this;return Object(E["a"])(regeneratorRuntime.mark((function r(){var n,s;return regeneratorRuntime.wrap((function(r){while(1)switch(r.prev=r.next){case 0:return n=a._address+"api/"+e,t=JSON.stringify(t),r.next=4,nt.post(n,t);case 4:return s=r.sent,i["a"].$log.debug("postData",e,s),r.abrupt("return",s.data);case 7:case"end":return r.stop()}}),r)})))()},putData:function(e,t){var a=this;return Object(E["a"])(regeneratorRuntime.mark((function r(){var n,s;return regeneratorRuntime.wrap((function(r){while(1)switch(r.prev=r.next){case 0:return n=a._address+"api/"+e,t=JSON.stringify(t),r.next=4,nt.put(n,t);case 4:return s=r.sent,i["a"].$log.debug("putData",e,s),r.abrupt("return",s.data);case 7:case"end":return r.stop()}}),r)})))()},deleteData:function(e,t){var a=this;return Object(E["a"])(regeneratorRuntime.mark((function r(){var n,s;return regeneratorRuntime.wrap((function(r){while(1)switch(r.prev=r.next){case 0:return n=a._address+"api/"+e,t=JSON.stringify(t),r.next=4,nt.delete(n,{data:t});case 4:return s=r.sent,i["a"].$log.debug("deleteData",e,s),r.abrupt("return",s.data);case 7:case"end":return r.stop()}}),r)})))()},getAllItems:function(e,t){var a=arguments,r=this;return Object(E["a"])(regeneratorRuntime.mark((function n(){var s,o,l,c;return regeneratorRuntime.wrap((function(n){while(1)switch(n.prev=n.next){case 0:s=a.length>2&&void 0!==a[2]?a[2]:null,o=r._address+"api/"+e,s&&(l=new URLSearchParams(s),o+="?"+l.toString()),c=0,i["a"].$log.debug("getAllItems",o),it()(o).node("items.*",(function(e){i["a"].set(t,c,e),c+=1})).done((function(e){t.length>e.items.length&&t.splice(e.items.length)}));case 6:case"end":return n.stop()}}),n)})))()},playerCommand:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.activePlayerId,i="players/"+a+"/cmd/"+e;this.postData(i,t)},playItem:function(e,t){var a=this;return Object(E["a"])(regeneratorRuntime.mark((function i(){var r;return regeneratorRuntime.wrap((function(i){while(1)switch(i.prev=i.next){case 0:return a.$store.loading=!0,r="players/"+a.activePlayerId+"/play_media/"+t,i.next=4,a.postData(r,e);case 4:a.$store.loading=!1;case 5:case"end":return i.stop()}}),i)})))()},switchPlayer:function(e){e!==this.activePlayerId&&(this.activePlayerId=e,localStorage.setItem("activePlayerId",e),this.$emit("new player selected",e))},_onWsConnect:function(){var e=this;return Object(E["a"])(regeneratorRuntime.mark((function t(){var a,r,n,s;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return i["a"].$log.info("Connected to server "+e._address),e.connected=!0,t.next=4,e.getData("players");case 4:a=t.sent,r=Object(M["a"])(a);try{for(r.s();!(n=r.n()).done;)s=n.value,i["a"].set(e.players,s.player_id,s)}catch(o){r.e(o)}finally{r.f()}e._selectActivePlayer(),e.$emit("players changed");case 9:case"end":return t.stop()}}),t)})))()},_onWsMessage:function(e){var t=this;return Object(E["a"])(regeneratorRuntime.mark((function a(){var r;return regeneratorRuntime.wrap((function(a){while(1)switch(a.prev=a.next){case 0:r=JSON.parse(e.data),"player changed"===r.message?i["a"].set(t.players,r.message_details.player_id,r.message_details):"player added"===r.message?(i["a"].set(t.players,r.message_details.player_id,r.message_details),t._selectActivePlayer(),t.$emit("players changed")):"player removed"===r.message?(i["a"].delete(t.players,r.message_details.player_id),t._selectActivePlayer(),t.$emit("players changed")):"music sync status"===r.message?t.syncStatus=r.message_details:t.$emit(r.message,r.message_details);case 2:case"end":return a.stop()}}),a)})))()},_onWsClose:function(e){this.connected=!1,i["a"].$log.error("Socket is closed. Reconnect will be attempted in 5 seconds.",e.reason),setTimeout(function(){this.connect(this._address)}.bind(this),5e3)},_onWsError:function(){this._ws.close()},_selectActivePlayer:function(){if(!this.activePlayer||!this.activePlayer.enabled||this.activePlayer.group_parents.length>0){var e=localStorage.getItem("activePlayerId");if(e&&this.players[e]&&this.players[e].enabled)this.switchPlayer(e);else{for(var t in this.players)if("playing"===this.players[t].state&&this.players[t].enabled&&0===this.players[t].group_parents.length){this.switchPlayer(t);break}if(!this.activePlayer||!this.activePlayer.enabled)for(var a in this.players)if(this.players[a].enabled&&0===this.players[a].group_parents.length){this.switchPlayer(a);break}}}}},computed:{activePlayer:function(){return this.activePlayerId?this.players[this.activePlayerId]:null}}}),ot={server:st,install:function(e,t){e.prototype.$server=st}},lt=a("85ff"),ct=a.n(lt),ut=!0,dt={isEnabled:!0,logLevel:ut?"error":"debug",stringifyArguments:!1,showLogLevel:!0,showMethodName:!1,separator:"|",showConsoleColors:!0};i["a"].config.productionTip=!1,i["a"].use(ct.a,dt),i["a"].use(Ge["a"]),i["a"].use($e),i["a"].use(ot),String.prototype.formatDuration=function(){var e=parseInt(this,10),t=Math.floor(e/3600),a=Math.floor((e-3600*t)/60),i=e-3600*t-60*a;return t<10&&(t="0"+t),a<10&&(a="0"+a),i<10&&(i="0"+i),"00"===t?a+":"+i:t+":"+a+":"+i},new i["a"]({router:Ue,i18n:Ke,vuetify:qe,render:function(e){return e(Se)}}).$mount("#app")},"57d1":function(e,t){e.exports="data:image/png;base64,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"},6915:function(e,t,a){"use strict";var i=a("b75b"),r=a.n(i);r.a},"691f":function(e,t,a){},"71db":function(e,t,a){e.exports=a.p+"img/file.813f9dad.png"},"82f5":function(e,t,a){e.exports=a.p+"img/sonos.72e2fecb.png"},"85ec":function(e,t,a){},"94cc":function(e,t){e.exports="data:image/png;base64,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"},"9a36":function(e,t){e.exports="data:image/png;base64,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"},"9ad3":function(e,t){e.exports="data:image/png;base64,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"},"9e01":function(e,t,a){var i={"./aac.png":"9a36","./chromecast.png":"57d1","./crossfade.png":"e7af","./default_artist.png":"4bfb","./demo_player.png":"26ea","./file.png":"71db","./flac.png":"fb30","./hires.png":"f5e3","./homeassistant.png":"3232","./http_streamer.png":"2755","./logo.png":"cf05","./mp3.png":"f1d4","./ogg.png":"9ad3","./qobuz.png":"0863","./sonos.png":"82f5","./spotify.png":"0c3b","./squeezebox.png":"bd18","./tunein.png":"e428","./vorbis.png":"94cc","./web.png":"edbf","./webplayer.png":"3d05"};function r(e){var t=n(e);return a(t)}function n(e){if(!a.o(i,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return i[e]}r.keys=function(){return Object.keys(i)},r.resolve=n,e.exports=r,r.id="9e01"},a471:function(e,t,a){},a548:function(e,t,a){"use strict";var i=a("a471"),r=a.n(i);r.a},a625:function(e){e.exports=JSON.parse('{"musicassistant":"Music Assistant","home":"Home","artists":"Artiesten","albums":"Albums","tracks":"Nummers","playlists":"Afspeellijsten","playlist_tracks":"Nummers in afspeellijst","radios":"Radio","search":"Zoeken","settings":"Instellingen","queue":"Wachtrij","artist_toptracks":"Top nummers","artist_albums":"Albums","album_tracks":"Album liedjes","album_versions":"Versies","track_versions":"Versies","type_to_search":"Type hier om te zoeken...","add_library":"Voeg toe aan bibliotheek","remove_library":"Verwijder uit bibliotheek","add_playlist":"Aan playlist toevoegen...","remove_playlist":"Verwijder uit playlist","no_player":"Geen speler geselecteerd","reboot_required":"Je moet de server opnieuw starten om de nieuwe instellingen actief te maken!","sort_name":"Sorteer op naam","sort_artist":"Sorteer op artiest","sort_album":"Sorteer op album","sort_date":"Sorteer op datum","sort_default":"Standaard sortering","items":"item(s)","conf":{"enabled":"Ingeschakeld","base":"Algemene instellingen","providers":"Providers / Plugins","player_settings":"Speler instellingen","homeassistant":"Home Assistant integratie","web":"Webserver","http_streamer":"Ingebouwde (sox gebaseerde) streamer","qobuz":"Qobuz","spotify":"Spotify","tunein":"TuneIn","file":"Bestandssysteem","chromecast":"Chromecast","squeezebox":"Squeezebox ondersteuning","sonos":"Sonos","webplayer":"Web Player (alleen Chrome browser)","username":"Gebruikersnaam","password":"Wachtwoord","hostname":"Hostnaam (of IP)","port":"Poort","hass_url":"URL naar homeassistant (b.v. https://homeassistant:8123)","hass_token":"Token met lange levensduur","hass_publish_players":"Publiceer spelers naar Home Assistant","hass_power_entities":"Entities die gebruikt mogen worden als aan/uit Control voor spelers.","hass_volume_entities":"Entities die gebruikt mogen worden als volume Control voor spelers.","web_ssl_cert":"Pad naar ssl certificaat bestand","web_ssl_key":"Pad naar ssl certificaat key bestand","player_enabled":"Speler inschakelen","player_name":"Aangepaste naam voor deze speler","file_prov_music_path":"Pad naar muziek bestanden","file_prov_playlists_path":"Pad naar playlist bestanden (.m3u)","web_http_port":"HTTP poort","web_https_port":"HTTPS poort","cert_fqdn_host":"Hostname (FQDN van certificaat)","enable_r128_volume_normalisation":"Schakel R128 volume normalisatie in","target_volume_lufs":"Doelvolume (R128 standaard is -23 LUFS)","fallback_gain_correct":"Fallback gain correctie indien R128 meting (nog) niet beschikbaar is","enable_audio_cache":"Sta het cachen van audio toe naar temp map","trim_silence":"Strip stilte van begin en eind van audio (in temp bestanden)","http_streamer_sox_effects":"Eigen sox effects toepassen op audio (alleen voor ingebouwde streamer). Zie http://sox.sourceforge.net/sox.html#EFFECTS","max_sample_rate":"Maximale sample rate welke deze speler ondersteund, hoger wordt gedownsampled.","force_http_streamer":"Forceer het gebruik van de ingebouwde streamer, ook al heeft de speler directe ondersteuning voor de muziek provider","not_grouped":"Niet gegroepeerd","conf_saved":"Configuratie is opgeslagen, herstart om actief te maken","audio_cache_folder":"Map om te gebruiken voor cache bestanden","audio_cache_max_size_gb":"Maximale grootte van de cache map in GB.","gapless_enabled":"Schakel ondersteuning voor gapless in.","crossfade_duration":"Crossfade (in seconden, 0 om uit te schakelen).","power_control":"Verbind Power Control met speler.","volume_control":"Verbind Volume Control met speler."},"players":"Spelers","play":"Afspelen","play_on":"Afspelen op:","play_now":"Nu afspelen","play_next":"Speel als volgende af","add_queue":"Voeg toe aan wachtrij","queue_clear":"Wachtrij leegmaken","show_info":"Bekijk informatie","queue_next_tracks":"Aankomend","queue_previous_tracks":"Afgespeeld","queue_move_up":"Verplaats omhoog","queue_move_down":"Verplaats omlaag","queue_options":"Wachtrij opties","enable_repeat":"Repeat inschakelen","disable_repeat":"Repeat uitschakelen","enable_shuffle":"Shuffle inschakelen","disable_shuffle":"Shuffle uitschakelen","read_more":"meer lezen","stream_details":"Streamdetails","crossfade_enabled":"Crossfade ingeschakeld","state":{"playing":"afspelen","stopped":"gestopt","paused":"gepauzeerd","off":"uitgeschakeld"}}')},b75b:function(e,t,a){},bd18:function(e,t,a){e.exports=a.p+"img/squeezebox.60631223.png"},cf05:function(e,t,a){e.exports=a.p+"img/logo.c079bd97.png"},d3cc:function(e,t,a){"use strict";var i=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",[i("v-list-item",{directives:[{name:"longpress",rawName:"v-longpress",value:e.menuClick,expression:"menuClick"}],attrs:{ripple:""},on:{click:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"left",37,t.key,["Left","ArrowLeft"])||"button"in t&&0!==t.button?null:void(e.onclickHandler?e.onclickHandler(e.item):e.itemClicked(e.item))},contextmenu:[e.menuClick,function(e){e.preventDefault()}]}},[e.hideavatar?e._e():i("v-list-item-avatar",{attrs:{tile:"",color:"grey"}},[i("img",{staticStyle:{border:"1px solid rgba(0,0,0,.22)"},attrs:{src:e.$server.getImageUrl(e.item,"image",80),"lazy-src":a("71db")}})]),i("v-list-item-content",[i("v-list-item-title",[e._v(" "+e._s(e.item.name)+" "),e.item.version?i("span",[e._v("("+e._s(e.item.version)+")")]):e._e()]),e.item.artists?i("v-list-item-subtitle",[e._l(e.item.artists,(function(t,a){return i("span",{key:t.item_id},[i("a",{on:{click:[function(a){return e.itemClicked(t)},function(e){e.stopPropagation()}]}},[e._v(e._s(t.name))]),a+1<e.item.artists.length?i("label",{key:a},[e._v("/")]):e._e()])})),e.item.album&&e.hidetracknum?i("a",{staticStyle:{color:"grey"},on:{click:[function(t){return e.itemClicked(e.item.album)},function(e){e.stopPropagation()}]}},[e._v(" - "+e._s(e.item.album.name))]):e._e(),!e.hidetracknum&&e.item.track_number?i("label",{staticStyle:{color:"grey"}},[e._v("- disc "+e._s(e.item.disc_number)+" track "+e._s(e.item.track_number))]):e._e()],2):e._e(),e.item.artist?i("v-list-item-subtitle",[i("a",{on:{click:[function(t){return e.itemClicked(e.item.artist)},function(e){e.stopPropagation()}]}},[e._v(e._s(e.item.artist.name))])]):e._e(),e.item.owner?i("v-list-item-subtitle",[e._v(e._s(e.item.owner))]):e._e()],1),e.hideproviders?e._e():i("v-list-item-action",[i("ProviderIcons",{attrs:{providerIds:e.item.provider_ids,height:20}})],1),e.isHiRes?i("v-list-item-action",[i("v-tooltip",{attrs:{bottom:""},scopedSlots:e._u([{key:"activator",fn:function(t){var r=t.on;return[i("img",e._g({attrs:{src:a("f5e3"),height:"20"}},r))]}}],null,!1,2747613229)},[i("span",[e._v(e._s(e.isHiRes))])])],1):e._e(),e.hidelibrary?e._e():i("v-list-item-action",[i("v-tooltip",{attrs:{bottom:""},scopedSlots:e._u([{key:"activator",fn:function(t){var a=t.on;return[i("v-btn",e._g({attrs:{icon:"",ripple:""},on:{click:[function(t){return e.toggleLibrary(e.item)},function(e){e.preventDefault()},function(e){e.stopPropagation()}]}},a),[e.item.in_library.length>0?i("v-icon",{attrs:{height:"20"}},[e._v("favorite")]):e._e(),0==e.item.in_library.length?i("v-icon",{attrs:{height:"20"}},[e._v("favorite_border")]):e._e()],1)]}}],null,!1,113966118)},[e.item.in_library.length>0?i("span",[e._v(e._s(e.$t("remove_library")))]):e._e(),0==e.item.in_library.length?i("span",[e._v(e._s(e.$t("add_library")))]):e._e()])],1),!e.hideduration&&e.item.duration?i("v-list-item-action",[e._v(e._s(e.item.duration.toString().formatDuration()))]):e._e(),e.hidemenu?e._e():i("v-icon",{staticStyle:{"margin-right":"-10px","padding-left":"10px"},attrs:{color:"grey lighten-1"},on:{click:[function(t){return e.menuClick(e.item)},function(e){e.stopPropagation()}]}},[e._v("more_vert")])],1),i("v-divider")],1)},r=[],n=(a("4160"),a("a9e3"),a("96cf"),a("c964")),s=a("54f8"),o=a("2b0e"),l=a("e00a"),c=600;o["a"].directive("longpress",{bind:function(e,t,a){var i=t.value;if("function"===typeof i){var r=null,n=function(e){"click"===e.type&&0!==e.button||null===r&&(r=setTimeout((function(){return i(e)}),c))},s=function(){null!==r&&(clearTimeout(r),r=null)};["mousedown","touchstart"].forEach((function(t){return e.addEventListener(t,n)})),["click","mouseout","touchend","touchcancel"].forEach((function(t){return e.addEventListener(t,s)}))}else o["a"].$log.warn("Expect a function, got ".concat(i))}});var u=o["a"].extend({components:{ProviderIcons:l["a"]},props:{item:Object,index:Number,totalitems:Number,hideavatar:Boolean,hidetracknum:Boolean,hideproviders:Boolean,hidemenu:Boolean,hidelibrary:Boolean,hideduration:Boolean,onclickHandler:null},data:function(){return{touchMoving:!1,cancelled:!1}},computed:{isHiRes:function(){var e,t=Object(s["a"])(this.item.provider_ids);try{for(t.s();!(e=t.n()).done;){var a=e.value;if(a.quality>6)return a.details?a.details:7===a.quality?"44.1/48khz 24 bits":8===a.quality?"88.2/96khz 24 bits":9===a.quality?"176/192khz 24 bits":"+192kHz 24 bits"}}catch(i){t.e(i)}finally{t.f()}return""}},created:function(){},beforeDestroy:function(){this.cancelled=!0},mounted:function(){},methods:{itemClicked:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t="";if(1===e.media_type)t="/artists/"+e.item_id;else if(2===e.media_type)t="/albums/"+e.item_id;else{if(4!==e.media_type)return void this.$server.$emit("showPlayMenu",e);t="/playlists/"+e.item_id}this.$router.push({path:t,query:{provider:e.provider}})},menuClick:function(){this.cancelled||this.$server.$emit("showContextMenu",this.item)},toggleLibrary:function(e){var t=this;return Object(n["a"])(regeneratorRuntime.mark((function a(){return regeneratorRuntime.wrap((function(a){while(1)switch(a.prev=a.next){case 0:return t.cancelled=!0,a.next=3,t.$server.toggleLibrary(e);case 3:t.cancelled=!1;case 4:case"end":return a.stop()}}),a)})))()}}}),d=u,p=a("2877"),m=a("6544"),h=a.n(m),v=a("8336"),f=a("ce7e"),g=a("132d"),y=a("da13"),b=a("1800"),A=a("8270"),k=a("5d23"),w=a("3a2f"),I=Object(p["a"])(d,i,r,!1,null,null,null);t["a"]=I.exports;h()(I,{VBtn:v["a"],VDivider:f["a"],VIcon:g["a"],VListItem:y["a"],VListItemAction:b["a"],VListItemAvatar:A["a"],VListItemContent:k["a"],VListItemSubtitle:k["b"],VListItemTitle:k["c"],VTooltip:w["a"]})},e00a:function(e,t,a){"use strict";var i=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",e._l(e.uniqueProviders,(function(t){return i("img",{key:t.provider,staticStyle:{"margin-right":"6px","margin-top":"6px"},attrs:{height:e.height,src:a("9e01")("./"+t.provider+".png")}})})),0)},r=[],n=(a("4160"),a("c975"),a("a9e3"),a("159b"),a("2b0e")),s=n["a"].extend({props:{providerIds:Array,height:Number},data:function(){return{isHiRes:!1}},computed:{uniqueProviders:function(){var e=[],t=[];return this.providerIds?(this.providerIds.forEach((function(a){var i=a.provider;-1===t.indexOf(i)&&(t.push(i),e.push(a))})),e):[]}},mounted:function(){},methods:{}}),o=s,l=a("2877"),c=Object(l["a"])(o,i,r,!1,null,null,null);t["a"]=c.exports},e428:function(e,t,a){e.exports=a.p+"img/tunein.ca1c1bb0.png"},e7af:function(e,t){e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAACUtJREFUeJzt3VuMXVUdgPGvlVqhLZXSagkGlApUiPUSUcDaoiLVkCgEb/FKJL6YqDEm+m584MFHExMSE28PkohBjRYeKL1ARxMS8EZaraFA0wsINp2hl5nS+rDmmNN69pl9PXutvb9fspJJk57zX6vzZc6lsw9IkiRJkiRJkiRJkiRJkiRJkiRJUkcsqvj33wbcBKwHLgOWA0uqDlWjI8DXgeNtD9JRK4EfApe0PciQOWAaOAjsAXYD/5jkAFcB9wLPA2cTWI8AFzVyEv22Evgj7f/75lnPAN8HrmjkJOZdDvwMOB3BhouubRhJnVKKY3jNAj8G1tZ9IF8l/Nhqe4NG0r5U4xheR4Ev13EYS4CfRLAhI4lDF+IYXvcBryl7GK8Ffh/BJupej2IkZXQtjsH6DSVeWFoE3B/B8EYSh67GMVi/KHog341gaCOJQ9fjGKxv5T2QDYTXktseeBJrO0YyTl/iOEt4heu6PIeyK4JhJx3JsjwH0zN9imOwti10KB+JYEgjaV8f4xisW8YdTBdftcq7dmAk0O84zgK/zTqYtaT5LrmR1KfvcZwlPP9eMziQxUOH81EqvGnSEZuAP9DPSFYCDwPva3uQll1AaAE4N5BNk58lSpuArfQrEuM41+bBF8OBXN/CILH6AP2JxDj+38gWjtD+47/Y1k7C77h0lc85Rq/Dow7rZASDxbi6GolxZK+Rv2DXl3fPy6xddCsS4xi/5gYHNfwcZKbAAffNRsJzki5E4nOOhU0PvhgO5FALg6SkC5EYRz4HB18MB7K3hUFSsxF4iDQjMY789gy+GA5kqoVBUvR+QiQr2h6kAOMoZmQL76T9J0cprcdIIxKfkBdfb886zL9HMFxKK/ZIjKP4+svwAQ4/xAL40fjz1nlifrjlw6pyxjZwIeHVrLYrTm09TlyR+JOj3DoALF3ocL8UwaAprlgiMY7y67N5D7nPvzhVZe2m3UiMo/x6sMhBX0q4nmnbQ6e4dgMXFznsmhhH+bWPEhfgvhr/h2/ZNelIjKP8OgSsK37kwTXA/gg2keKaYjKRGEf59S/grcWP/FxrCC9ltr2ZFFfTkRhH+fU7YFXxIx9tEfAV4IUINpbaaioS4yi3DgFfLHHeuSwDvk14UtP2RlNadUdiHMXXHuAbhPf6cqvyEWw3ArcBNwPXEj5gJ6aPX4vNnwjndazi7fgO+cJmCW/6DT6C7WHgiTI3VPUzCs+3lGYjWUl4j+YdDd5HU84CnwIeqHAbqccxBdxBs58ZOTu/eutS4M+0/yO7yDoD3FNx36k/rGr7TdReSSmSV4G7K+7XOFRYCpGcBr5QcZ/GodJijuQ0Bf7zWwbjUGUxRjIHfLLivoxDtYkpklngzor7MQ7VbjXtR3IK+HjFfRiHGtNmJCeB2yvObxxqXBuRnAC2VJzbODQxk4zkOHBrxXmNQxM3iUhmgA9WnNM41JomI5mm+qdyGYdat5pwMbA6vzGOEa6JVYVxKBp1RnKU8F/9qzAORaeOSF4Gbqg4h3EoWlUieQl4d8X7Nw5Fr0wkL1L9l7SMQ8lYQ/5IXmDM5fBzMg4lJ08kh4HrKt6PcShZ4yI5CKyvePvGoeSNiuQA4dKrVRiHOmM4kueocK3WecahzllDuBzlWyrejnFIGYxDymAcUgbjkDIYh5TBOKQMxiFlMA4pg3FIGYxDymAcUgbjkDIYh5TBOKQMxiFlMA4pg3FIGYxDymAcwSrg4hpuRx1iHMFq4Kn5szASAcYx8Abgr0O3ayQyjnlrgadH3L6R9JhxBJcDe8fcj5H0kHEEVwD7ctzfFEbSG8YRvBl4psD9GkkPGEewDni2xP0bSYcZR3A14drDZecwkg4yjmA94ar1dcxjJB1hHMH1wJGa5zKSxBlHsIHwMXKxzqcWGEfwLuDfCcypCTKO4AbCR1enMq8mwDiCG4GjCc6tBhlHsBE4lvD8aoBxBJuBmRb38XhN+1CNjCP4MPBKBPsxkogYR7AFOBHBfowkIsYR3A6cjGA/RhIR4wg+AZyKYD9Z67Ga9qkCjCO4C5iNYD9GEhHjCD4DzEWwHyOJiHEEnwdOR7CfMpEsr2H/GsE4gsXArgj2YyQRMY5zrZi/zbb3ZSQRMI7RjETGsQAj6THjyCf1SHZhJIUZRzFG0iPGUY6R9IBxVJN6JDsxkkzGUQ8j6SDjqJeRdIhxNMNIOsA4mtWFSJbVfiqJMI7JMJIEGcdkGUlCjKMdRpIA42hX6pHsoMORGEccjCRCxhEXI4mIccTJSCJgHHFLPZLtJByJcaTBSFpgHGkxkgkyjjR1IZKL6j6UuhlH2oykQcbRDUbSAOPoFiOpkXF0U+qRPEoEkRhHtxlJBcbRD0ZSgnH0i5EUYBz9lHok25hAJMbRb0YyhnEIjGQk49AwIxliHBol9UgeoYZIjEPj9DoS41AevYzkQsKn/7Q9vHGkIfVIHgKWFNnw/REMbRxpST2S+/Ju9J4IhjWONKUeyacX2uAq4KUIBjWOdKUcyUEWuKL89yIY0jjSl3Ik38na1BLgxQgGNI5uSDWSA8DiURv6WATDGUe3pBrJLYMNDJdyWx0nMkFTwBZguu1BlGma8G801fYgBW0Z9Ycpve/hT460pPaTZNuoTRyOYDDj6K6UInlu1AZmIxjMOLotlUheGTX8mQgGM47uSyGS2VGDT0cwmHH0Q+yRvDxq6KcjGMw4+iPmSJ4cDDn8Mu/f6tx9TXwpt7tifgn4fy0MB7KjhUHGMY7uizWS7aP+8E3E80Tdh1X9EtPDrTlgTdagWyMY0Dj6KZZIHhg35OaWhzOOfms7kjPAexYa8tctDWccgnYj+WmeAS8Djkx4MOPQsDYieRa4JO+Am4GTExrMODTKJCOZIcdDq/PdAZxqeLAdGIeyrQB20nwct5Yd8EOEt92bGOyXwNKyg6k3Xgf8ima+Bw8B76064JXArhqHmgG+VnUo9c43gePU9324FXhjXcMtAu4G9lcY6DTwc8IbklIZVxIeebxK+e/DvcBdTQ14AfA5wpXo5nIOtB+4F7iqqaHUO9cAPwCeJ9/34EngQeBOMi7IkGVRhSGXAzcDG4B1wOsJV0aZIVxfaC/hVYh/VrgPaSHrgZuAawlvUSwj/D7Hf4B9wFOEa0yfaGtASZIkSZIkSZIkSZIkSZIkSZIkSYrCfwGWtk+6sWAEBAAAAABJRU5ErkJggg=="},edbf:function(e,t,a){e.exports=a.p+"img/web.798ba28f.png"},edd4:function(e){e.exports=JSON.parse('{"musicassistant":"Music Assistant","home":"Home","artists":"Artists","albums":"Albums","tracks":"Tracks","playlists":"Playlists","playlist_tracks":"Playlist tracks","radios":"Radio","search":"Search","settings":"Settings","queue":"Queue","artist_toptracks":"Top tracks","artist_albums":"Albums","album_tracks":"Album tracks","album_versions":"Versions","track_versions":"Versions","type_to_search":"Type here to search...","add_library":"Add to library","remove_library":"Remove from library","add_playlist":"Add to playlist...","remove_playlist":"Remove from playlist","no_player":"No player selected","reboot_required":"A reboot is required to activate the new settings!","sort_name":"Sort by name","sort_artist":"Sort by artist name","sort_album":"Sort by album name","sort_date":"Sort by date","sort_default":"Default sorting","items":"item(s)","conf":{"enabled":"Enabled","base":"Generic settings","providers":"Providers / Plugins","player_settings":"Player settings","homeassistant":"Home Assistant integration","web":"Webserver","http_streamer":"Built-in (sox based) streamer","qobuz":"Qobuz","spotify":"Spotify","tunein":"TuneIn","file":"Filesystem","chromecast":"Chromecast","squeezebox":"Squeezebox support","sonos":"Sonos","webplayer":"Web Player (Chrome browser only)","username":"Username","password":"Password","hostname":"Hostname (or IP)","port":"Port","hass_url":"URL to homeassistant (e.g. https://homeassistant:8123)","hass_token":"Long Lived Access Token","hass_publish_players":"Publish players to Home Assistant","hass_power_entities":"Enable entities to be used as Power Control for players.","hass_volume_entities":"Enable entities to be used as Volume Control for players.","web_ssl_cert":"Path to ssl certificate file","web_ssl_key":"Path to ssl keyfile","player_enabled":"Enable player","player_name":"Custom name for this player","file_prov_playlists_path":"Path to playlists (.m3u)","web_http_port":"HTTP port","web_https_port":"HTTPS port","cert_fqdn_host":"FQDN of hostname in certificate","enable_r128_volume_normalisation":"Enable R128 volume normalization","target_volume_lufs":"Target volume (R128 default is -23 LUFS)","fallback_gain_correct":"Fallback gain correction if R128 readings not (yet) available","enable_audio_cache":"Allow caching of audio to temp files","trim_silence":"Strip silence from beginning and end of audio (temp files only!)","http_streamer_sox_effects":"Custom sox effects to apply to audio (built-in streamer only!) See http://sox.sourceforge.net/sox.html#EFFECTS","max_sample_rate":"Maximum sample rate this player supports, higher will be downsampled","force_http_streamer":"Force use of built-in streamer, even if the player can handle the music provider directly","not_grouped":"Not grouped","conf_saved":"Configuration saved, restart app to make effective","audio_cache_folder":"Directory to use for cache files","audio_cache_max_size_gb":"Maximum size of the cache folder (GB)","gapless_enabled":"Enable gapless support","crossfade_duration":"Crossfade duration (in seconds, 0 to disable)","power_control":"Attach Power Control to player.","volume_control":"Attach Volume Control to player."},"players":"Players","play":"Play","play_on":"Play on:","play_now":"Play Now","play_next":"Play Next","add_queue":"Add to Queue","queue_clear":"Clear queue","show_info":"Show info","queue_next_tracks":"Next","queue_previous_tracks":"Played","queue_move_up":"Move up","queue_move_down":"Move down","queue_options":"Queue options","enable_repeat":"Enable repeat","disable_repeat":"Disable repeat","enable_shuffle":"Enable shuffle","disable_shuffle":"Disable shuffle","read_more":"read more","stream_details":"Streamdetails","crossfade_enabled":"Crossfade enabled","state":{"playing":"playing","stopped":"stopped","paused":"paused","off":"off"}}')},f1d4:function(e,t){e.exports="data:image/png;base64,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"},f5e3:function(e,t,a){e.exports=a.p+"img/hires.eabcf7ae.png"},fb30:function(e,t){e.exports="data:image/png;base64,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"}});
+//# sourceMappingURL=app.d45df414.js.map
\ No newline at end of file
--- /dev/null
+{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/App.vue?0f16","webpack:///./src/assets/qobuz.png","webpack:///./src/assets/spotify.png","webpack:///./src/components/ItemsListing.vue?8d1e","webpack:///./src/components/PanelviewItem.vue?cf5a","webpack:///src/components/PanelviewItem.vue","webpack:///./src/components/PanelviewItem.vue?2434","webpack:///./src/components/PanelviewItem.vue","webpack:///src/components/ItemsListing.vue","webpack:///./src/components/ItemsListing.vue?0bf5","webpack:///./src/components/ItemsListing.vue?3a42","webpack:///./src/assets/demo_player.png","webpack:///./src/assets/http_streamer.png","webpack:///./src/assets/homeassistant.png","webpack:///./src/assets/webplayer.png","webpack:///./src/locales sync [A-Za-z0-9-_,\\s]+\\.json$/","webpack:///./src/assets/default_artist.png","webpack:///./src/components/PlayerSelect.vue?82ac","webpack:///./src/App.vue?5077","webpack:///./src/components/NavigationMenu.vue?9860","webpack:///src/components/NavigationMenu.vue","webpack:///./src/components/NavigationMenu.vue?878f","webpack:///./src/components/NavigationMenu.vue","webpack:///./src/components/TopBar.vue?c899","webpack:///src/components/TopBar.vue","webpack:///./src/components/TopBar.vue?6b44","webpack:///./src/components/TopBar.vue","webpack:///./src/components/ContextMenu.vue?8c48","webpack:///src/components/ContextMenu.vue","webpack:///./src/components/ContextMenu.vue?8e1a","webpack:///./src/components/ContextMenu.vue","webpack:///./src/components/PlayerOSD.vue?029d","webpack:///./src/components/VolumeControl.vue?71ad","webpack:///src/components/VolumeControl.vue","webpack:///./src/components/VolumeControl.vue?2966","webpack:///./src/components/VolumeControl.vue","webpack:///src/components/PlayerOSD.vue","webpack:///./src/components/PlayerOSD.vue?50d9","webpack:///./src/components/PlayerOSD.vue?dd97","webpack:///./src/components/PlayerSelect.vue?d1a9","webpack:///src/components/PlayerSelect.vue","webpack:///./src/components/PlayerSelect.vue?63dc","webpack:///./src/components/PlayerSelect.vue?ba31","webpack:///src/App.vue","webpack:///./src/App.vue?3359","webpack:///./src/App.vue?2d25","webpack:///./src/registerServiceWorker.js","webpack:///./src/views/Home.vue?3267","webpack:///src/views/Home.vue","webpack:///./src/views/Home.vue?f458","webpack:///./src/views/Home.vue","webpack:///./src/views/Browse.vue?9280","webpack:///src/views/Browse.vue","webpack:///./src/views/Browse.vue?68e7","webpack:///./src/views/Browse.vue","webpack:///./src/router/index.js","webpack:///./src/i18n.js","webpack:///./src/plugins/vuetify.js","webpack:///./src/plugins/store.js","webpack:///./src/plugins/server.js","webpack:///./src/main.js","webpack:///./src/assets/chromecast.png","webpack:///./src/components/PlayerOSD.vue?977b","webpack:///./src/assets/file.png","webpack:///./src/assets/sonos.png","webpack:///./src/assets/vorbis.png","webpack:///./src/assets/aac.png","webpack:///./src/assets/ogg.png","webpack:///./src/assets sync ^\\.\\/.*\\.png$","webpack:///./src/components/ItemsListing.vue?2279","webpack:///./src/assets/squeezebox.png","webpack:///./src/assets/logo.png","webpack:///./src/components/ListviewItem.vue?1742","webpack:///src/components/ListviewItem.vue","webpack:///./src/components/ListviewItem.vue?0071","webpack:///./src/components/ListviewItem.vue","webpack:///./src/components/ProviderIcons.vue?3616","webpack:///src/components/ProviderIcons.vue","webpack:///./src/components/ProviderIcons.vue?8a80","webpack:///./src/components/ProviderIcons.vue","webpack:///./src/assets/tunein.png","webpack:///./src/assets/crossfade.png","webpack:///./src/assets/web.png","webpack:///./src/assets/mp3.png","webpack:///./src/assets/hires.png","webpack:///./src/assets/flac.png"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","installedCssChunks","jsonpScriptSrc","p","exports","module","l","e","promises","cssChunks","Promise","resolve","reject","href","fullhref","existingLinkTags","document","getElementsByTagName","tag","dataHref","getAttribute","rel","existingStyleTags","linkTag","createElement","type","onload","onerror","event","request","target","src","err","Error","code","parentNode","removeChild","head","appendChild","then","installedChunkData","promise","onScriptComplete","script","charset","timeout","nc","setAttribute","error","clearTimeout","chunk","errorType","realSrc","message","name","undefined","setTimeout","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","jsonpArray","window","oldJsonpFunction","slice","render","_vm","this","_h","$createElement","_c","_self","staticStyle","attrs","_v","_s","items","$t","scopedSlots","_u","fn","ref","on","_g","_l","item","domProps","text","$event","sortBy","sortDesc","_e","model","callback","$$v","search","expression","toggleViewMode","viewMode","filteredItems","props","item_id","thumbWidth","thumbHeight","staticClass","media_type","$store","isMobile","staticRenderFns","directives","rawName","indexOf","_k","keyCode","button","onclickHandler","itemClicked","menuClick","preventDefault","$server","getImageUrl","isHiRes","class","artist","artists","pressTimer","components","Number","hideproviders","Boolean","hidelibrary","touchMoving","cancelled","computed","created","beforeDestroy","mounted","methods","mediaItem","url","$emit","$router","component","VCard","VCardSubtitle","VCardTitle","VDivider","VImg","VTooltip","ListviewItem","PanelviewItem","sortKeys","endpoint","includes","getItems","$on","localStorage","setItem","mediatype","toLowerCase","newLst","VAppBar","VBtn","VCol","VContainer","VDataIterator","VIcon","VLabel","VList","VListItem","VMenu","VRow","VSpacer","VTextField","map","webpackContext","req","id","webpackContextResolve","keys","$route","path","showPlayerSelect","loading","$set","title","icon","showNavigationMenu","VListItemAction","VListItemContent","VListItemTitle","VNavigationDrawer","color","topBarTransparent","windowtitle","go","topBarContextItem","VLayout","visible","playlists","header","subheader","label","itemCommand","action","index","addToPlaylist","watch","menuItems","curItem","curPlaylist","playerQueueItems","showContextMenu","showPlayMenu","curBrowseContext","in_library","is_editable","cmd","query","showPlaylistsMenu","removeFromPlaylist","toggleLibrary","playItem","putData","deleteData","track","VDialog","VListItemAvatar","VSubheader","curQueueItem","activePlayer","artistindex","artistClick","stopPropagation","nativeOn","streamDetails","quality","content_type","provider","sample_rate","bit_depth","playerQueueDetails","streamVolumeLevelAdjustment","playerCurTimeStr","playerTotalTimeStr","style","progressBarWidth","progress","playerCommand","state","Math","round","volume_level","players","player_id","truncateString","is_group","child_id","powered","togglePlayerPower","setPlayerVolume","volumePlayerIds","allIds","newVolume","playerId","VListItemSubtitle","VSlider","VolumeControl","cur_item","totalSecs","duration","curSecs","cur_item_time","curPercent","toString","formatDuration","innerWidth","streamdetails","sox_options","re","volLevel","replace","queueUpdatedMsg","getQueueDetails","cmd_opt","activePlayerId","queueId","str","num","VFlex","VFooter","VListItemIcon","VProgressLinear","switchPlayer","is_group_player","filteredPlayerIds","show","getAvailablePlayers","available","NavigationMenu","TopBar","ContextMenu","PlayerOSD","PlayerSelect","serverAddress","loc","origin","pathname","connect","VApp","VMain","VOverlay","VProgressCircular","register","process","ready","registered","cached","updatefound","updated","alert","location","reload","offline","ItemsListing","String","Vue","use","VueRouter","routes","Home","route","params","Browse","router","loadLocaleMessages","locales","require","messages","forEach","matched","match","locale","VueI18n","navigator","language","split","fallbackLocale","Vuetify","globalStore","isInStandaloneMode","handleWindowOptions","addEventListener","destroyed","removeEventListener","body","clientWidth","standalone","matchMedia","matches","install","options","axiosConfig","_axios","axios","server","_address","_ws","connected","syncStatus","endsWith","wsAddress","WebSocket","onopen","_onWsConnect","onmessage","_onWsMessage","onclose","_onWsClose","_onWsError","imageType","size","metadata","album","getData","$log","debug","postData","JSON","stringify","post","put","dataObj","delete","getAllItems","list","urlParams","URLSearchParams","oboe","node","set","done","fullList","queueOpt","newPlayerId","info","player","_selectActivePlayer","msg","parse","message_details","reason","close","enabled","group_parents","lastPlayerId","getItem","isProduction","loggerOptions","isEnabled","logLevel","stringifyArguments","showLogLevel","showMethodName","separator","showConsoleColors","config","productionTip","VueLogger","VueVirtualScroller","store","secNum","parseInt","hours","floor","minutes","seconds","i18n","vuetify","h","App","$mount","hideavatar","version","hidetracknum","track_number","disc_number","owner","provider_ids","hideduration","hidemenu","ProviderIcons","totalitems","prov","height","providerIds","Array","uniqueProviders","output"],"mappings":"aACE,SAASA,EAAqBC,GAQ7B,IAPA,IAMIC,EAAUC,EANVC,EAAWH,EAAK,GAChBI,EAAcJ,EAAK,GACnBK,EAAiBL,EAAK,GAIHM,EAAI,EAAGC,EAAW,GACpCD,EAAIH,EAASK,OAAQF,IACzBJ,EAAUC,EAASG,GAChBG,OAAOC,UAAUC,eAAeC,KAAKC,EAAiBX,IAAYW,EAAgBX,IACpFK,EAASO,KAAKD,EAAgBX,GAAS,IAExCW,EAAgBX,GAAW,EAE5B,IAAID,KAAYG,EACZK,OAAOC,UAAUC,eAAeC,KAAKR,EAAaH,KACpDc,EAAQd,GAAYG,EAAYH,IAG/Be,GAAqBA,EAAoBhB,GAE5C,MAAMO,EAASC,OACdD,EAASU,OAATV,GAOD,OAHAW,EAAgBJ,KAAKK,MAAMD,EAAiBb,GAAkB,IAGvDe,IAER,SAASA,IAER,IADA,IAAIC,EACIf,EAAI,EAAGA,EAAIY,EAAgBV,OAAQF,IAAK,CAG/C,IAFA,IAAIgB,EAAiBJ,EAAgBZ,GACjCiB,GAAY,EACRC,EAAI,EAAGA,EAAIF,EAAed,OAAQgB,IAAK,CAC9C,IAAIC,EAAQH,EAAeE,GACG,IAA3BX,EAAgBY,KAAcF,GAAY,GAE3CA,IACFL,EAAgBQ,OAAOpB,IAAK,GAC5Be,EAASM,EAAoBA,EAAoBC,EAAIN,EAAe,KAItE,OAAOD,EAIR,IAAIQ,EAAmB,GAGnBC,EAAqB,CACxB,IAAO,GAMJjB,EAAkB,CACrB,IAAO,GAGJK,EAAkB,GAGtB,SAASa,EAAe7B,GACvB,OAAOyB,EAAoBK,EAAI,OAAS,CAAC,OAAS,SAAS,iCAAiC,iCAAiC,YAAc,cAAc,YAAc,cAAc,OAAS,UAAU9B,IAAUA,GAAW,IAAM,CAAC,OAAS,WAAW,iCAAiC,WAAW,YAAc,WAAW,YAAc,WAAW,OAAS,YAAYA,GAAW,MAIvX,SAASyB,EAAoB1B,GAG5B,GAAG4B,EAAiB5B,GACnB,OAAO4B,EAAiB5B,GAAUgC,QAGnC,IAAIC,EAASL,EAAiB5B,GAAY,CACzCK,EAAGL,EACHkC,GAAG,EACHF,QAAS,IAUV,OANAlB,EAAQd,GAAUW,KAAKsB,EAAOD,QAASC,EAAQA,EAAOD,QAASN,GAG/DO,EAAOC,GAAI,EAGJD,EAAOD,QAKfN,EAAoBS,EAAI,SAAuBlC,GAC9C,IAAImC,EAAW,GAIXC,EAAY,CAAC,OAAS,EAAE,iCAAiC,EAAE,YAAc,GAC1ER,EAAmB5B,GAAUmC,EAASvB,KAAKgB,EAAmB5B,IACzB,IAAhC4B,EAAmB5B,IAAkBoC,EAAUpC,IACtDmC,EAASvB,KAAKgB,EAAmB5B,GAAW,IAAIqC,SAAQ,SAASC,EAASC,GAIzE,IAHA,IAAIC,EAAO,QAAU,CAAC,OAAS,SAAS,iCAAiC,iCAAiC,YAAc,cAAc,YAAc,cAAc,OAAS,UAAUxC,IAAUA,GAAW,IAAM,CAAC,OAAS,WAAW,iCAAiC,WAAW,YAAc,WAAW,YAAc,WAAW,OAAS,YAAYA,GAAW,OAC/VyC,EAAWhB,EAAoBK,EAAIU,EACnCE,EAAmBC,SAASC,qBAAqB,QAC7CxC,EAAI,EAAGA,EAAIsC,EAAiBpC,OAAQF,IAAK,CAChD,IAAIyC,EAAMH,EAAiBtC,GACvB0C,EAAWD,EAAIE,aAAa,cAAgBF,EAAIE,aAAa,QACjE,GAAe,eAAZF,EAAIG,MAAyBF,IAAaN,GAAQM,IAAaL,GAAW,OAAOH,IAErF,IAAIW,EAAoBN,SAASC,qBAAqB,SACtD,IAAQxC,EAAI,EAAGA,EAAI6C,EAAkB3C,OAAQF,IAAK,CAC7CyC,EAAMI,EAAkB7C,GACxB0C,EAAWD,EAAIE,aAAa,aAChC,GAAGD,IAAaN,GAAQM,IAAaL,EAAU,OAAOH,IAEvD,IAAIY,EAAUP,SAASQ,cAAc,QACrCD,EAAQF,IAAM,aACdE,EAAQE,KAAO,WACfF,EAAQG,OAASf,EACjBY,EAAQI,QAAU,SAASC,GAC1B,IAAIC,EAAUD,GAASA,EAAME,QAAUF,EAAME,OAAOC,KAAOjB,EACvDkB,EAAM,IAAIC,MAAM,qBAAuB5D,EAAU,cAAgBwD,EAAU,KAC/EG,EAAIE,KAAO,wBACXF,EAAIH,QAAUA,SACP5B,EAAmB5B,GAC1BkD,EAAQY,WAAWC,YAAYb,GAC/BX,EAAOoB,IAERT,EAAQV,KAAOC,EAEf,IAAIuB,EAAOrB,SAASC,qBAAqB,QAAQ,GACjDoB,EAAKC,YAAYf,MACfgB,MAAK,WACPtC,EAAmB5B,GAAW,MAMhC,IAAImE,EAAqBxD,EAAgBX,GACzC,GAA0B,IAAvBmE,EAGF,GAAGA,EACFhC,EAASvB,KAAKuD,EAAmB,QAC3B,CAEN,IAAIC,EAAU,IAAI/B,SAAQ,SAASC,EAASC,GAC3C4B,EAAqBxD,EAAgBX,GAAW,CAACsC,EAASC,MAE3DJ,EAASvB,KAAKuD,EAAmB,GAAKC,GAGtC,IACIC,EADAC,EAAS3B,SAASQ,cAAc,UAGpCmB,EAAOC,QAAU,QACjBD,EAAOE,QAAU,IACb/C,EAAoBgD,IACvBH,EAAOI,aAAa,QAASjD,EAAoBgD,IAElDH,EAAOZ,IAAM7B,EAAe7B,GAG5B,IAAI2E,EAAQ,IAAIf,MAChBS,EAAmB,SAAUd,GAE5Be,EAAOhB,QAAUgB,EAAOjB,OAAS,KACjCuB,aAAaJ,GACb,IAAIK,EAAQlE,EAAgBX,GAC5B,GAAa,IAAV6E,EAAa,CACf,GAAGA,EAAO,CACT,IAAIC,EAAYvB,IAAyB,SAAfA,EAAMH,KAAkB,UAAYG,EAAMH,MAChE2B,EAAUxB,GAASA,EAAME,QAAUF,EAAME,OAAOC,IACpDiB,EAAMK,QAAU,iBAAmBhF,EAAU,cAAgB8E,EAAY,KAAOC,EAAU,IAC1FJ,EAAMM,KAAO,iBACbN,EAAMvB,KAAO0B,EACbH,EAAMnB,QAAUuB,EAChBF,EAAM,GAAGF,GAEVhE,EAAgBX,QAAWkF,IAG7B,IAAIV,EAAUW,YAAW,WACxBd,EAAiB,CAAEjB,KAAM,UAAWK,OAAQa,MAC1C,MACHA,EAAOhB,QAAUgB,EAAOjB,OAASgB,EACjC1B,SAASqB,KAAKC,YAAYK,GAG5B,OAAOjC,QAAQ+C,IAAIjD,IAIpBV,EAAoB4D,EAAIxE,EAGxBY,EAAoB6D,EAAI3D,EAGxBF,EAAoB8D,EAAI,SAASxD,EAASkD,EAAMO,GAC3C/D,EAAoBgE,EAAE1D,EAASkD,IAClC1E,OAAOmF,eAAe3D,EAASkD,EAAM,CAAEU,YAAY,EAAMC,IAAKJ,KAKhE/D,EAAoBoE,EAAI,SAAS9D,GACX,qBAAX+D,QAA0BA,OAAOC,aAC1CxF,OAAOmF,eAAe3D,EAAS+D,OAAOC,YAAa,CAAEC,MAAO,WAE7DzF,OAAOmF,eAAe3D,EAAS,aAAc,CAAEiE,OAAO,KAQvDvE,EAAoBwE,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQvE,EAAoBuE,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,kBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAK7F,OAAO8F,OAAO,MAGvB,GAFA5E,EAAoBoE,EAAEO,GACtB7F,OAAOmF,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOvE,EAAoB8D,EAAEa,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIR3E,EAAoB+E,EAAI,SAASxE,GAChC,IAAIwD,EAASxD,GAAUA,EAAOmE,WAC7B,WAAwB,OAAOnE,EAAO,YACtC,WAA8B,OAAOA,GAEtC,OADAP,EAAoB8D,EAAEC,EAAQ,IAAKA,GAC5BA,GAIR/D,EAAoBgE,EAAI,SAASgB,EAAQC,GAAY,OAAOnG,OAAOC,UAAUC,eAAeC,KAAK+F,EAAQC,IAGzGjF,EAAoBK,EAAI,GAGxBL,EAAoBkF,GAAK,SAAShD,GAA2B,MAAMA,GAEnE,IAAIiD,EAAaC,OAAO,gBAAkBA,OAAO,iBAAmB,GAChEC,EAAmBF,EAAWhG,KAAK2F,KAAKK,GAC5CA,EAAWhG,KAAOf,EAClB+G,EAAaA,EAAWG,QACxB,IAAI,IAAI3G,EAAI,EAAGA,EAAIwG,EAAWtG,OAAQF,IAAKP,EAAqB+G,EAAWxG,IAC3E,IAAIU,EAAsBgG,EAI1B9F,EAAgBJ,KAAK,CAAC,EAAE,kBAEjBM,K,6EC1QT,yBAAwb,EAAG,G,uBCA3bc,EAAOD,QAAU,IAA0B,0B,uBCA3CC,EAAOD,QAAU,IAA0B,4B,oCCA3C,IAAIiF,EAAS,WAAa,IAAIC,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,UAAU,CAACA,EAAG,YAAY,CAACE,YAAY,CAAC,gBAAgB,QAAQC,MAAM,CAAC,KAAO,GAAG,MAAQ,GAAG,MAAQ,GAAG,MAAQ,gBAAgB,CAACH,EAAG,UAAU,CAACG,MAAM,CAAC,MAAQ,KAAK,CAACP,EAAIQ,GAAGR,EAAIS,GAAGT,EAAIU,MAAMrH,OAAS,IAAM2G,EAAIW,GAAG,aAAaP,EAAG,YAAYA,EAAG,SAAS,CAACG,MAAM,CAAC,KAAO,GAAG,0BAAyB,GAAOK,YAAYZ,EAAIa,GAAG,CAAC,CAACxB,IAAI,YAAYyB,GAAG,SAASC,GAC/b,IAAIC,EAAKD,EAAIC,GACb,MAAO,CAACZ,EAAG,QAAQJ,EAAIiB,GAAG,CAACV,MAAM,CAAC,KAAO,KAAKS,GAAI,CAACZ,EAAG,SAAS,CAACJ,EAAIQ,GAAG,WAAW,SAAS,CAACJ,EAAG,SAASJ,EAAIkB,GAAIlB,EAAY,UAAE,SAASmB,GAAM,OAAOf,EAAG,cAAc,CAACf,IAAI8B,EAAKpC,MAAMqC,SAAS,CAAC,YAAcpB,EAAIS,GAAGU,EAAKE,OAAOL,GAAG,CAAC,MAAQ,SAASM,GAAQtB,EAAIuB,OAASJ,EAAKpC,aAAY,IAAI,GAAGqB,EAAG,QAAQ,CAACG,MAAM,CAAC,KAAO,IAAIS,GAAG,CAAC,MAAQ,SAASM,GAAQtB,EAAIwB,UAAYxB,EAAIwB,YAAY,CAAGxB,EAAIwB,SAAgDxB,EAAIyB,KAA1CrB,EAAG,SAAS,CAACJ,EAAIQ,GAAG,kBAA4BR,EAAY,SAAEI,EAAG,SAAS,CAACJ,EAAIQ,GAAG,oBAAoBR,EAAIyB,MAAM,GAAGrB,EAAG,SAAS,CAACG,MAAM,CAAC,KAAO,GAAG,0BAAyB,GAAOK,YAAYZ,EAAIa,GAAG,CAAC,CAACxB,IAAI,YAAYyB,GAAG,SAASC,GAChnB,IAAIC,EAAKD,EAAIC,GACb,MAAO,CAACZ,EAAG,QAAQJ,EAAIiB,GAAG,CAACV,MAAM,CAAC,KAAO,KAAKS,GAAI,CAACZ,EAAG,SAAS,CAACJ,EAAIQ,GAAG,aAAa,SAAS,CAACJ,EAAG,SAAS,CAACA,EAAG,eAAe,CAACG,MAAM,CAAC,UAAY,GAAG,qBAAqB,SAAS,MAAQ,SAAS,eAAe,GAAG,KAAO,GAAG,MAAQ,IAAImB,MAAM,CAAC3C,MAAOiB,EAAU,OAAE2B,SAAS,SAAUC,GAAM5B,EAAI6B,OAAOD,GAAKE,WAAW,aAAa,IAAI,GAAG1B,EAAG,QAAQ,CAACE,YAAY,CAAC,eAAe,SAASC,MAAM,CAAC,KAAO,IAAIS,GAAG,CAAC,MAAQ,SAASM,GAAQ,OAAOtB,EAAI+B,oBAAoB,CAAkB,SAAhB/B,EAAIgC,SAAqB5B,EAAG,SAAS,CAACJ,EAAIQ,GAAG,eAAeR,EAAIyB,KAAsB,QAAhBzB,EAAIgC,SAAoB5B,EAAG,SAAS,CAACJ,EAAIQ,GAAG,aAAaR,EAAIyB,MAAM,IAAI,GAAGrB,EAAG,kBAAkB,CAACG,MAAM,CAAC,MAAQP,EAAIU,MAAM,OAASV,EAAI6B,OAAO,UAAU7B,EAAIuB,OAAO,YAAYvB,EAAIwB,SAAS,gBAAgBxB,EAAIiC,cAAc,sBAAsB,GAAG,qBAAqB,GAAG,QAAU,IAAIrB,YAAYZ,EAAIa,GAAG,CAAC,CAACxB,IAAI,UAAUyB,GAAG,SAASoB,GAAO,MAAO,CAAkB,SAAhBlC,EAAIgC,SAAqB5B,EAAG,cAAc,CAACG,MAAM,CAAC,MAAQ,KAAK,CAACH,EAAG,QAAQ,CAACG,MAAM,CAAC,MAAQ,GAAG,gBAAgB,UAAU,MAAQ,YAAYP,EAAIkB,GAAIgB,EAAW,OAAE,SAASf,GAAM,OAAOf,EAAG,QAAQ,CAACf,IAAI8B,EAAKgB,QAAQ5B,MAAM,CAAC,aAAa,YAAY,CAACH,EAAG,gBAAgB,CAACG,MAAM,CAAC,KAAOY,EAAK,WAAanB,EAAIoC,WAAW,YAAcpC,EAAIqC,gBAAgB,MAAK,IAAI,GAAGrC,EAAIyB,KAAsB,QAAhBzB,EAAIgC,SAAoB5B,EAAG,SAAS,CAACG,MAAM,CAAC,WAAW,KAAK,CAACH,EAAG,kBAAkB,CAACkC,YAAY,WAAW/B,MAAM,CAAC,MAAQ2B,EAAMxB,MAAM,YAAY,GAAG,YAAY,UAAU,YAAY,IAAIE,YAAYZ,EAAIa,GAAG,CAAC,CAACxB,IAAI,UAAUyB,GAAG,SAASC,GACx8C,IAAII,EAAOJ,EAAII,KACf,MAAO,CAACf,EAAG,eAAe,CAACG,MAAM,CAAC,KAAOY,EAAK,WAAgC,GAAnBA,EAAKoB,YAAkBvC,EAAIwC,OAAOC,SAAiB,cAAe,EAAK,cAAgBtB,EAAKoB,WAAa,GAAIvC,EAAIwC,OAAOC,SAAiB,aAAc,EAAK,SAA8B,GAAnBtB,EAAKoB,YAAkBvC,EAAIwC,OAAOC,SAAiB,aAAkC,GAAnBtB,EAAKoB,kBAAuB,MAAK,MAAS,GAAGvC,EAAIyB,aAAa,IAC9ViB,EAAkB,G,gFCPlB,EAAS,WAAa,IAAI1C,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,SAAS,CAACuC,WAAW,CAAC,CAAC3E,KAAK,YAAY4E,QAAQ,cAAc7D,MAAOiB,EAAa,UAAE8B,WAAW,cAAcvB,MAAM,CAAC,MAAQ,GAAG,aAAaP,EAAIqC,YAAY,YAAYrC,EAAIoC,WAAW,YAA2B,IAAfpC,EAAIoC,WAAe,MAAQ,GAAG,SAAW,IAAIpB,GAAG,CAAC,MAAQ,SAASM,GAAQ,OAAIA,EAAOnF,KAAK0G,QAAQ,QAAQ7C,EAAI8C,GAAGxB,EAAOyB,QAAQ,OAAO,GAAGzB,EAAOjC,IAAI,CAAC,OAAO,eAAiC,WAAYiC,GAA4B,IAAlBA,EAAO0B,OAAvC,UAAoEhD,EAAIiD,eAAiBjD,EAAIiD,eAAejD,EAAImB,MAAQnB,EAAIkD,YAAYlD,EAAImB,QAAO,YAAc,CAACnB,EAAImD,UAAU,SAAS7B,GAAQA,EAAO8B,qBAAsB,CAAChD,EAAG,QAAQ,CAACG,MAAM,CAAC,IAAMP,EAAIqD,QAAQC,YAAYtD,EAAImB,KAAM,QAASnB,EAAIoC,YAAY,MAAQ,OAAO,eAAe,OAAQpC,EAAW,QAAEI,EAAG,MAAM,CAACE,YAAY,CAAC,SAAW,WAAW,cAAc,MAAM,aAAa,QAAQ,OAAS,OAAO,mBAAmB,QAAQ,gBAAgB,QAAQ,CAACF,EAAG,YAAY,CAACG,MAAM,CAAC,OAAS,IAAIK,YAAYZ,EAAIa,GAAG,CAAC,CAACxB,IAAI,YAAYyB,GAAG,SAASC,GAC/iC,IAAIC,EAAKD,EAAIC,GACb,MAAO,CAACZ,EAAG,MAAMJ,EAAIiB,GAAG,CAACV,MAAM,CAAC,IAAM,EAAQ,QAAuB,OAAS,OAAOS,QAAS,MAAK,EAAM,aAAa,CAACZ,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIS,GAAGT,EAAIuD,eAAe,GAAGvD,EAAIyB,KAAKrB,EAAG,aAAaA,EAAG,eAAe,CAACoD,MAAMxD,EAAIwC,OAAOC,SAAW,SAAW,QAAQnC,YAAY,CAAC,QAAU,MAAM,MAAQ,UAAU,aAAa,OAAOc,SAAS,CAAC,YAAcpB,EAAIS,GAAGT,EAAImB,KAAKnD,SAAUgC,EAAImB,KAAW,OAAEf,EAAG,kBAAkB,CAACoD,MAAMxD,EAAIwC,OAAOC,SAAW,UAAY,SAASnC,YAAY,CAAC,QAAU,OAAOc,SAAS,CAAC,YAAcpB,EAAIS,GAAGT,EAAImB,KAAKsC,OAAOzF,SAASgC,EAAIyB,KAAMzB,EAAImB,KAAY,QAAEf,EAAG,kBAAkB,CAACoD,MAAMxD,EAAIwC,OAAOC,SAAW,UAAY,SAASnC,YAAY,CAAC,QAAU,OAAOc,SAAS,CAAC,YAAcpB,EAAIS,GAAGT,EAAImB,KAAKuC,QAAQ,GAAG1F,SAASgC,EAAIyB,MAAM,IACvuB,EAAkB,G,kCCgDtB,MAEA,8BACEnC,KAAM,SAAR,qBACI,GAAqB,oBAAVP,EAAX,CAIA,IAAJ,OACA,cACqB,UAAX9D,EAAEkB,MAAiC,IAAblB,EAAE+H,QAGT,OAAfW,IACFA,EAAazF,YAAW,WAAhC,mBAGA,aACyB,OAAfyF,IACFhG,aAAagG,GACbA,EAAa,OAGjB,CAAJ,iFACI,CAAJ,yGAnBM,EAAN,uDAuBA,qBACEC,WAAY,GAEZ1B,MAAO,CACLf,KAAM7H,OACN+I,YAAawB,OACbzB,WAAYyB,OACZC,cAAeC,QACfC,YAAaD,QACbd,eAAgB,MAElBpK,KAXF,WAYI,MAAO,CACLoL,aAAa,EACbC,WAAW,IAGfC,SAAU,CACRZ,QADJ,WACA,uBACA,wBADA,IACA,0CACA,eACA,iBACA,UACA,cACA,qBACA,cACA,qBACA,cACA,qBAEA,mBAZA,8BAgBM,MAAO,KAGXa,QArCF,aAsCEC,cAtCF,WAuCIpE,KAAKiE,WAAY,GAEnBI,QAzCF,aA0CEC,QAAS,CACPrB,YADJ,WACA,kEAEA,KACM,GAA6B,IAAzBsB,EAAUjC,WACZkC,EAAM,YAAcD,EAAUrC,aACtC,oBACQsC,EAAM,WAAaD,EAAUrC,YACrC,qBAKQ,YADAlC,KAAKoD,QAAQqB,MAAM,eAAgBF,GAHnCC,EAAM,cAAgBD,EAAUrC,QAMlClC,KAAK0E,QAAQhL,KAAK,CAAxB,sCAEIwJ,UAjBJ,WAmBUlD,KAAKiE,WACTjE,KAAKoD,QAAQqB,MAAM,kBAAmBzE,KAAKkB,OAE7C,cAtBJ,SAsBA,kKAEA,eAFA,SAGA,2BAHA,OAIA,eAJA,iDC/IuV,I,6FCOnVyD,EAAY,eACd,EACA,EACA,GACA,EACA,KACA,KACA,MAIa,EAAAA,EAAiB,QAUhC,IAAkBA,EAAW,CAACC,QAAA,KAAMC,cAAA,OAAcC,WAAA,OAAWC,WAAA,KAASC,OAAA,KAAKC,WAAA,OCwF3E,OACEtB,WAAY,CACVuB,aAAJ,OACIC,cAAJ,GAEElD,MAAO,CACT,YACA,YAEErJ,KATF,WAUI,MAAO,CACL6H,MAAO,GACPsB,SAAU,OACVH,OAAQ,GACRL,UAAU,EACVD,OAAQ,OACR8D,SAAU,CAAC,CAAjB,2CAGEjB,QAnBF,WAoBQnE,KAAKqF,SAASC,SAAS,eAEzBtF,KAAKoF,SAAS1L,KAAK,CAAzB,iDACMsG,KAAKoF,SAAS1L,KAAK,CAAzB,sDACMsG,KAAKoF,SAAS1L,KAAK,CAAzB,gDACMsG,KAAKsB,OAAS,WACdtB,KAAK+B,SAAW,QACtB,kCAEM/B,KAAKoF,SAAS1L,KAAK,CAAzB,sDACMsG,KAAKoF,SAAS1L,KAAK,CAAzB,gDACMsG,KAAK+B,SAAW,QACtB,kCAEM/B,KAAKoF,SAAS1L,KAAK,CAAzB,kDACMsG,KAAKoF,SAAS1L,KAAK,CAAzB,yCACMsG,KAAK+B,SAAW,SAEhB/B,KAAK+B,SAAW,OAGlB,IAAJ,gEACqB,OAAbA,IACF/B,KAAK+B,SAAWA,GAElB/B,KAAKuF,WACLvF,KAAKoD,QAAQoC,IAAI,kBAAmBxF,KAAKuF,WAE3CrB,SAAU,CACR/B,WADJ,WAEM,OAAOnC,KAAKuC,OAAOC,SAAW,IAAM,KAEtCJ,YAJJ,WAKM,OAAyB,IAAlBpC,KAAKmC,aAGhBmC,QAAS,CACP,SADJ,WACA,wKAEA,0CAFA,8CAIIxC,eALJ,WAM4B,UAAlB9B,KAAK+B,SAAsB/B,KAAK+B,SAAW,OACrD,sBACM0D,aAAaC,QAAQ,WAAa1F,KAAK2F,UAAY3F,KAAKqF,SAAUrF,KAAK+B,WAEzEC,cAVJ,SAUA,KACM,IAAKJ,EAAQ,OAAOnB,EACpBmB,EAASA,EAAOgE,cAChB,IAHN,EAGA,KAHA,iBAIA,GAJA,IAIA,2CACA,kCAEA,mDAEA,iDAEA,yDALA,WANA,8BAeM,OAAOC,KCrMyU,I,0KCQlV,EAAY,eACd,EACA/F,EACA2C,GACA,EACA,KACA,WACA,MAIa,SAAiB,QAkBhC,IAAkB,EAAW,CAACqD,UAAA,KAAQC,OAAA,KAAKnB,QAAA,KAAMoB,OAAA,KAAKC,aAAA,KAAWC,gBAAA,KAAcC,QAAA,KAAMC,SAAA,KAAOC,QAAA,KAAMC,YAAA,KAAUC,QAAA,KAAMC,OAAA,KAAKC,UAAA,KAAQC,aAAA,Q,uBCrC/H5L,EAAOD,QAAU,IAA0B,gC,qBCA3CC,EAAOD,QAAU,IAA0B,kC,qBCA3CC,EAAOD,QAAU,IAA0B,kC,uBCA3CC,EAAOD,QAAU,IAA0B,8B,uBCA3C,IAAI8L,EAAM,CACT,YAAa,OACb,YAAa,QAId,SAASC,EAAeC,GACvB,IAAIC,EAAKC,EAAsBF,GAC/B,OAAOtM,EAAoBuM,GAE5B,SAASC,EAAsBF,GAC9B,IAAItM,EAAoBgE,EAAEoI,EAAKE,GAAM,CACpC,IAAI7L,EAAI,IAAI0B,MAAM,uBAAyBmK,EAAM,KAEjD,MADA7L,EAAE2B,KAAO,mBACH3B,EAEP,OAAO2L,EAAIE,GAEZD,EAAeI,KAAO,WACrB,OAAO3N,OAAO2N,KAAKL,IAEpBC,EAAexL,QAAU2L,EACzBjM,EAAOD,QAAU+L,EACjBA,EAAeE,GAAK,Q,uBCvBpBhM,EAAOD,QAAU,IAA0B,mC,oCCA3C,yBAA2e,EAAG,G,mGCA1e,EAAS,WAAa,IAAIkF,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,QAAQ,CAACA,EAAG,UAAUA,EAAG,kBAAkBA,EAAG,SAAS,CAACA,EAAG,cAAc,CAACf,IAAIW,EAAIkH,OAAOC,KAAK5G,MAAM,CAAC,IAAM,OAAO,GAAGH,EAAG,YAAY,CAACG,MAAM,CAAC,iBAAmBP,EAAIoH,oBAAoBhH,EAAG,eAAeA,EAAG,gBAAgBA,EAAG,YAAY,CAACG,MAAM,CAAC,MAAQP,EAAIwC,OAAO6E,UAAU,CAACjH,EAAG,sBAAsB,CAACG,MAAM,CAAC,cAAgB,GAAG,KAAO,SAAS,IAAI,IACxbmC,EAAkB,GCDlB,EAAS,WAAa,IAAI1C,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,sBAAsB,CAACG,MAAM,CAAC,KAAO,GAAG,IAAM,GAAG,QAAU,GAAG,UAAY,IAAImB,MAAM,CAAC3C,MAAOiB,EAAIwC,OAAyB,mBAAEb,SAAS,SAAUC,GAAM5B,EAAIsH,KAAKtH,EAAIwC,OAAQ,qBAAsBZ,IAAME,WAAW,8BAA8B,CAAC1B,EAAG,SAAS,CAACJ,EAAIkB,GAAIlB,EAAS,OAAE,SAASmB,GAAM,OAAOf,EAAG,cAAc,CAACf,IAAI8B,EAAKoG,MAAMvG,GAAG,CAAC,MAAQ,SAASM,GAAQ,OAAOtB,EAAI2E,QAAQhL,KAAKwH,EAAKgG,SAAS,CAAC/G,EAAG,qBAAqB,CAACA,EAAG,SAAS,CAACJ,EAAIQ,GAAGR,EAAIS,GAAGU,EAAKqG,UAAU,GAAGpH,EAAG,sBAAsB,CAACA,EAAG,oBAAoB,CAACJ,EAAIQ,GAAGR,EAAIS,GAAGU,EAAKoG,WAAW,IAAI,MAAKnH,EAAG,QAAQ,CAACG,MAAM,CAAC,KAAO,IAAIS,GAAG,CAAC,MAAQ,SAASM,GAAQtB,EAAIwC,OAAOiF,oBAAoBzH,EAAIwC,OAAOiF,wBAAwB,IAAI,IACzwB,EAAkB,GCkBtB,iBACEvF,MAAO,GACPrJ,KAFF,WAGI,MAAO,CACL6H,MAAO,CACb,CAAQ,MAAR,gBAAQ,KAAR,OAAQ,KAAR,KACA,CAAQ,MAAR,mBAAQ,KAAR,SAAQ,KAAR,YACA,CAAQ,MAAR,kBAAQ,KAAR,QAAQ,KAAR,WACA,CAAQ,MAAR,kBAAQ,KAAR,aAAQ,KAAR,WACA,CAAQ,MAAR,qBAAQ,KAAR,gBAAQ,KAAR,cACA,CAAQ,MAAR,kBAAQ,KAAR,QAAQ,KAAR,WACA,CAAQ,MAAR,kBAAQ,KAAR,SAAQ,KAAR,WACA,CAAQ,MAAR,oBAAQ,KAAR,WAAQ,KAAR,cAIE4D,QAhBF,aAiBEC,QAAS,KCpC6U,I,qHCOpVK,EAAY,eACd,EACA,EACA,GACA,EACA,KACA,KACA,MAIa,EAAAA,EAAiB,QAYhC,IAAkBA,EAAW,CAACoB,OAAA,KAAKI,QAAA,KAAME,QAAA,KAAMC,YAAA,KAAUmB,kBAAA,KAAgBC,iBAAA,OAAiBC,eAAA,OAAeC,oBAAA,OC9BzG,IAAI,EAAS,WAAa,IAAI7H,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,YAAY,CAACG,MAAM,CAAC,IAAM,GAAG,KAAO,GAAG,MAAQ,GAAG,KAAO,GAAG,MAAQP,EAAI8H,QAAQ,CAAC1H,EAAG,WAAW,CAAGJ,EAAIwC,OAAOuF,kBAAiN/H,EAAIyB,KAAlMrB,EAAG,MAAM,CAACkC,YAAY,SAAShC,YAAY,CAAC,SAAW,QAAQ,MAAQ,OAAO,aAAa,SAAS,iBAAiB,SAAS,aAAa,SAAS,CAACN,EAAIQ,GAAGR,EAAIS,GAAGT,EAAIwC,OAAOwF,gBAAyB5H,EAAG,QAAQ,CAACE,YAAY,CAAC,cAAc,SAASC,MAAM,CAAC,KAAO,IAAIS,GAAG,CAAC,MAAQ,SAASM,GAAQtB,EAAIwC,OAAOiF,oBAAoBzH,EAAIwC,OAAOiF,sBAAsB,CAACrH,EAAG,SAAS,CAACJ,EAAIQ,GAAG,WAAW,GAAGJ,EAAG,QAAQ,CAACG,MAAM,CAAC,KAAO,IAAIS,GAAG,CAAC,MAAQ,SAASM,GAAQ,OAAOtB,EAAI2E,QAAQsD,IAAI,MAAM,CAAC7H,EAAG,SAAS,CAACJ,EAAIQ,GAAG,iBAAiB,GAAGJ,EAAG,YAAaJ,EAAIwC,OAAwB,kBAAEpC,EAAG,QAAQ,CAACE,YAAY,CAAC,eAAe,SAASC,MAAM,CAAC,KAAO,IAAIS,GAAG,CAAC,MAAQ,SAASM,GAAQ,OAAOtB,EAAIqD,QAAQqB,MAAM,kBAAmB1E,EAAIwC,OAAO0F,sBAAsB,CAAC9H,EAAG,SAAS,CAACJ,EAAIQ,GAAG,gBAAgB,GAAGR,EAAIyB,MAAM,IAAI,IAC1/B,EAAkB,GCoBtB,iBACES,MAAO,GACPrJ,KAFF,WAGI,MAAO,IAGTsL,SAAU,CACR2D,MADJ,WAEM,OAAI7H,KAAKuC,OAAOuF,kBACP,cACf,UAGEzD,QAbF,aAcEC,QAAS,KCnCqU,I,oCCO5U,EAAY,eACd,EACA,EACA,GACA,EACA,KACA,KACA,MAIa,IAAiB,QAShC,IAAkB,EAAW,CAACwB,UAAA,KAAQC,OAAA,KAAKI,QAAA,KAAM+B,UAAA,KAAQzB,UAAA,OC3BzD,IAAI,EAAS,WAAa,IAAI1G,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,WAAW,CAACG,MAAM,CAAC,YAAY,SAASS,GAAG,CAAC,MAAQ,SAASM,GAAQ,OAAOtB,EAAI0E,MAAM,QAASpD,KAAUI,MAAM,CAAC3C,MAAOiB,EAAW,QAAE2B,SAAS,SAAUC,GAAM5B,EAAIoI,QAAQxG,GAAKE,WAAW,YAAY,CAAC1B,EAAG,SAAS,CAA2B,IAAzBJ,EAAIqI,UAAUhP,OAAc+G,EAAG,SAAS,CAACA,EAAG,cAAc,CAACkC,YAAY,SAAS,CAACtC,EAAIQ,GAAGR,EAAIS,GAAGT,EAAIsI,WAAYtI,EAAa,UAAEI,EAAG,cAAc,CAACJ,EAAIQ,GAAGR,EAAIS,GAAGT,EAAIuI,cAAcvI,EAAIyB,KAAKzB,EAAIkB,GAAIlB,EAAa,WAAE,SAASmB,GAAM,OAAOf,EAAG,MAAM,CAACf,IAAI8B,EAAKqH,OAAO,CAACpI,EAAG,cAAc,CAACY,GAAG,CAAC,MAAQ,SAASM,GAAQ,OAAOtB,EAAIyI,YAAYtH,EAAKuH,WAAW,CAACtI,EAAG,qBAAqB,CAACA,EAAG,SAAS,CAACJ,EAAIQ,GAAGR,EAAIS,GAAGU,EAAKqG,UAAU,GAAGpH,EAAG,sBAAsB,CAACA,EAAG,oBAAoB,CAACJ,EAAIQ,GAAGR,EAAIS,GAAGT,EAAIW,GAAGQ,EAAKqH,YAAY,IAAI,GAAGpI,EAAG,cAAc,OAAM,GAAGJ,EAAIyB,KAAMzB,EAAIqI,UAAUhP,OAAS,EAAG+G,EAAG,SAAS,CAACA,EAAG,cAAc,CAACkC,YAAY,SAAS,CAACtC,EAAIQ,GAAGR,EAAIS,GAAGT,EAAIsI,WAAWtI,EAAIkB,GAAIlB,EAAa,WAAE,SAASmB,EAAKwH,GAAO,OAAOvI,EAAG,eAAe,CAACf,IAAI8B,EAAKgB,QAAQ5B,MAAM,CAAC,KAAOY,EAAK,WAAanB,EAAIqI,UAAUhP,OAAO,MAAQsP,EAAM,YAAa,EAAM,cAAe,EAAK,eAAgB,EAAM,aAAc,EAAK,UAAW,EAAK,eAAiB3I,EAAI4I,qBAAoB,GAAG5I,EAAIyB,MAAM,IAAI,IACpvC,EAAkB,G,gFC2CtB,iBACEmC,WACF,CACIuB,aAAJ,QAEEjD,MACF,GACE2G,MACF,GACEhQ,KATF,WAUI,MAAO,CACLuP,SAAS,EACTU,UAAW,GACXR,OAAQ,GACRC,UAAW,GACXQ,QAAS,KACTC,YAAa,KACbC,iBAAkB,GAClBZ,UAAW,KAGf/D,QArBF,aAsBEF,QAtBF,WAuBInE,KAAKoD,QAAQoC,IAAI,kBAAmBxF,KAAKiJ,iBACzCjJ,KAAKoD,QAAQoC,IAAI,eAAgBxF,KAAKkJ,eAExChF,SAAU,GAEVI,QAAS,CACP2E,gBADJ,SACA,GAGM,GADAjJ,KAAKoI,UAAY,GACZ7D,EAAL,CACAvE,KAAK8I,QAAUvE,EACf,IAAN,gCACA,KAEUA,IAAc4E,GAChBN,EAAUnP,KAAK,CACb6O,MAAO,YACPE,OAAQ,OACRlB,KAAM,SAI0B,IAAhChD,EAAU6E,WAAWhQ,QACvByP,EAAUnP,KAAK,CACb6O,MAAO,cACPE,OAAQ,iBACRlB,KAAM,oBAINhD,EAAU6E,WAAWhQ,OAAS,GAChCyP,EAAUnP,KAAK,CACb6O,MAAO,iBACPE,OAAQ,iBACRlB,KAAM,aAIN4B,GAAoD,IAAhCA,EAAiB7G,aACvCtC,KAAK+I,YAAcI,EACU,IAAzB5E,EAAUjC,YAAoB6G,EAAiBE,aACjDR,EAAUnP,KAAK,CACb6O,MAAO,kBACPE,OAAQ,kBACRlB,KAAM,2BAKiB,IAAzBhD,EAAUjC,YACZuG,EAAUnP,KAAK,CACb6O,MAAO,eACPE,OAAQ,eACRlB,KAAM,uBAGVvH,KAAK6I,UAAYA,EACjB7I,KAAKqI,OAAS9D,EAAUxG,KACxBiC,KAAKsI,UAAY,GACjBtI,KAAKmI,SAAU,IAEjBe,aAxDJ,SAwDA,GAIM,GAFAlJ,KAAKoI,UAAY,GACjBpI,KAAK8I,QAAUvE,EACVA,EAAL,CACA,IAAN,GACA,CACQ,MAAR,WACQ,OAAR,OACQ,KAAR,uBAEA,CACQ,MAAR,YACQ,OAAR,OACQ,KAAR,mBAEA,CACQ,MAAR,YACQ,OAAR,MACQ,KAAR,iBAGMvE,KAAK6I,UAAYA,EACjB7I,KAAKqI,OAAS9D,EAAUxG,KACxBiC,KAAKsI,UAAY,GACjBtI,KAAKmI,SAAU,IAEjB,kBAnFJ,WAmFA,oLAEA,KAFA,iBAGA,wBAHA,IAGA,qCACA,mBAJA,8CAMA,uCANA,OAMA,EANA,OAOA,KAPA,iBAQA,SARA,6DAQA,EARA,SAUA,eACA,iDAXA,kCAaA,gBAbA,8DAaA,EAbA,SAcA,uBAdA,wBAeA,UAfA,oTAqBA,cArBA,iFAuBIK,YA1GJ,SA0GA,GACM,GAAY,SAARc,EAAgB,CAElB,IAAR,KACwC,IAA5BtJ,KAAK8I,QAAQxG,aAAkB+C,EAAW,WACd,IAA5BrF,KAAK8I,QAAQxG,aAAkB+C,EAAW,UACd,IAA5BrF,KAAK8I,QAAQxG,aAAkB+C,EAAW,UACd,IAA5BrF,KAAK8I,QAAQxG,aAAkB+C,EAAW,aACd,IAA5BrF,KAAK8I,QAAQxG,aAAkB+C,EAAW,UAC9CrF,KAAK0E,QAAQhL,KAAK,CAChBwN,KAAM,IAAM7B,EAAW,IAAMrF,KAAK8I,QAAQ5G,QAC1CqH,MAAO,CAAjB,kCAEQvJ,KAAKmI,SAAU,MACvB,mBAEQ,OAAOnI,KAAKkJ,aAAalJ,KAAK8I,SACtC,sBAEQ,OAAO9I,KAAKwJ,oBACpB,uBAEQxJ,KAAKyJ,mBACb,aACA,yBACA,mBAEQzJ,KAAKmI,SAAU,GACvB,sBAEQnI,KAAKoD,QAAQsG,cAAc1J,KAAK8I,SAChC9I,KAAKmI,SAAU,IAGfnI,KAAKoD,QAAQuG,SAAS3J,KAAK8I,QAASQ,GACpCtJ,KAAKmI,SAAU,KAGnBQ,cAhJJ,SAgJA,cAEA,mCACM3I,KAAKoD,QAAQwG,QAAQvE,EAAUrF,KAAK8I,SAC1C,kBACQ,EAAR,eAGIW,mBAxJJ,SAwJA,gBAEA,2BACMzJ,KAAKoD,QAAQyG,WAAWxE,EAAUyE,GACxC,kBAEQ,EAAR,wCCtOqV,I,4DCOjV,EAAY,eACd,EACA,EACA,GACA,EACA,KACA,KACA,MAIa,IAAiB,QAchC,IAAkB,EAAW,CAAClF,QAAA,KAAMmF,UAAA,KAAQhF,WAAA,KAASoB,QAAA,KAAME,QAAA,KAAMC,YAAA,KAAU0D,kBAAA,KAAgBtC,iBAAA,OAAiBC,eAAA,OAAesC,aAAA,OChC3H,IAAI,EAAS,WAAa,IAAIlK,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,WAAW,CAACE,YAAY,CAAC,mBAAmB,SAASC,MAAM,CAAC,IAAM,GAAG,MAAQ,GAAG,QAAU,GAAG,MAAQ,GAAG,UAAY,OAAO,CAAGP,EAAIwC,OAAOC,SAEghFzC,EAAIyB,KAF1gFrB,EAAG,SAAS,CAACE,YAAY,CAAC,aAAa,OAAOC,MAAM,CAAC,MAAQ,GAAG,KAAO,GAAG,MAAQ,GAAG,UAAY,GAAG,KAAO,GAAG,MAAQ,OAAO,MAAQ,YAAY,CAACH,EAAG,cAAc,CAACG,MAAM,CAAC,WAAW,KAAK,CAAEP,EAAgB,aAAEI,EAAG,qBAAqB,CAACG,MAAM,CAAC,KAAO,KAAK,CAACH,EAAG,MAAM,CAACE,YAAY,CAAC,OAAS,6BAA6BC,MAAM,CAAC,IAAMP,EAAIqD,QAAQC,YAAYtD,EAAImK,cAAc,WAAW,EAAQ,aAA2B/J,EAAG,qBAAqB,CAACA,EAAG,SAAS,CAACJ,EAAIQ,GAAG,cAAc,GAAGJ,EAAG,sBAAsB,CAAEJ,EAAgB,aAAEI,EAAG,oBAAoB,CAACJ,EAAIQ,GAAG,IAAIR,EAAIS,GAAGT,EAAImK,aAAanM,SAAUgC,EAAIqD,QAAoB,aAAEjD,EAAG,oBAAoB,CAACJ,EAAIQ,GAAG,IAAIR,EAAIS,GAAGT,EAAIqD,QAAQ+G,aAAapM,SAASgC,EAAIyB,KAAMzB,EAAgB,aAAEI,EAAG,uBAAuB,CAACE,YAAY,CAAC,MAAQ,YAAYN,EAAIkB,GAAIlB,EAAImK,aAAoB,SAAE,SAAS1G,EAAO4G,GAAa,OAAOjK,EAAG,OAAO,CAACf,IAAIgL,GAAa,CAACjK,EAAG,IAAI,CAACY,GAAG,CAAC,MAAQ,CAAC,SAASM,GAAQ,OAAOtB,EAAIsK,YAAY7G,IAAS,SAASnC,GAAQA,EAAOiJ,sBAAuB,CAACvK,EAAIQ,GAAGR,EAAIS,GAAGgD,EAAOzF,SAAUqM,EAAc,EAAIrK,EAAImK,aAAazG,QAAQrK,OAAQ+G,EAAG,QAAQ,CAACf,IAAIgL,GAAa,CAACrK,EAAIQ,GAAG,SAASR,EAAIyB,UAAS,GAAGzB,EAAIyB,MAAM,GAAIzB,EAAiB,cAAEI,EAAG,qBAAqB,CAACA,EAAG,SAAS,CAACG,MAAM,CAAC,0BAAyB,EAAM,cAAc,IAAI,WAAW,GAAG,IAAM,IAAIiK,SAAS,CAAC,MAAQ,SAASlJ,GAAQA,EAAO8B,mBAAoBxC,YAAYZ,EAAIa,GAAG,CAAC,CAACxB,IAAI,YAAYyB,GAAG,SAASC,GACjnD,IAAIC,EAAKD,EAAIC,GACb,MAAO,CAACZ,EAAG,QAAQJ,EAAIiB,GAAG,CAACV,MAAM,CAAC,KAAO,KAAKS,GAAI,CAAEhB,EAAIyK,cAAcC,QAAU,EAAGtK,EAAG,QAAQ,CAACG,MAAM,CAAC,QAAU,GAAG,IAAM,EAAQ,QAAuB,OAAS,QAAQP,EAAIyB,KAAMzB,EAAIyK,cAAcC,SAAW,EAAGtK,EAAG,QAAQ,CAACE,YAAY,CAAC,OAAS,gBAAgBC,MAAM,CAAC,QAAU,GAAG,IAAMP,EAAIyK,cAAcE,aAAe,UAAQ,KAAe3K,EAAIyK,cAAcE,aAAe,QAAU,GAAG,OAAS,QAAQ3K,EAAIyB,MAAM,OAAO,MAAK,EAAM,YAAY,CAAEzB,EAAiB,cAAEI,EAAG,SAAS,CAACA,EAAG,cAAc,CAACkC,YAAY,SAAS,CAACtC,EAAIQ,GAAGR,EAAIS,GAAGT,EAAIW,GAAG,sBAAsBP,EAAG,cAAc,CAACG,MAAM,CAAC,KAAO,GAAG,MAAQ,KAAK,CAACH,EAAG,mBAAmB,CAACA,EAAG,QAAQ,CAACG,MAAM,CAAC,YAAY,KAAK,QAAU,GAAG,IAAMP,EAAIyK,cAAcG,SAAW,UAAQ,KAAe5K,EAAIyK,cAAcG,SAAW,QAAU,OAAO,GAAGxK,EAAG,sBAAsB,CAACA,EAAG,oBAAoB,CAACJ,EAAIQ,GAAGR,EAAIS,GAAGT,EAAIyK,cAAcG,cAAc,IAAI,GAAGxK,EAAG,aAAaA,EAAG,cAAc,CAACG,MAAM,CAAC,KAAO,GAAG,MAAQ,KAAK,CAACH,EAAG,mBAAmB,CAACA,EAAG,QAAQ,CAACE,YAAY,CAAC,OAAS,gBAAgBC,MAAM,CAAC,YAAY,KAAK,QAAU,GAAG,IAAMP,EAAIyK,cAAcE,aAAe,UAAQ,KAAe3K,EAAIyK,cAAcE,aAAe,QAAU,OAAO,GAAGvK,EAAG,sBAAsB,CAACA,EAAG,oBAAoB,CAACJ,EAAIQ,GAAGR,EAAIS,GAAGT,EAAIyK,cAAcI,YAAY,KAAM,UAAU7K,EAAIS,GAAGT,EAAIyK,cAAcK,WAAW,aAAa,IAAI,GAAG1K,EAAG,aAAcJ,EAAI+K,mBAAoC,kBAAE3K,EAAG,MAAM,CAACA,EAAG,cAAc,CAACG,MAAM,CAAC,KAAO,GAAG,MAAQ,KAAK,CAACH,EAAG,mBAAmB,CAACA,EAAG,QAAQ,CAACG,MAAM,CAAC,YAAY,KAAK,QAAU,GAAG,IAAM,EAAQ,YAA+B,GAAGH,EAAG,sBAAsB,CAACA,EAAG,oBAAoB,CAACJ,EAAIQ,GAAGR,EAAIS,GAAGT,EAAIW,GAAG,0BAA0B,IAAI,GAAGP,EAAG,cAAc,GAAGJ,EAAIyB,KAAMzB,EAA+B,4BAAEI,EAAG,MAAM,CAACA,EAAG,cAAc,CAACG,MAAM,CAAC,KAAO,GAAG,MAAQ,KAAK,CAACH,EAAG,mBAAmB,CAACA,EAAG,SAAS,CAACE,YAAY,CAAC,cAAc,QAAQC,MAAM,CAAC,MAAQ,UAAU,CAACP,EAAIQ,GAAG,gBAAgB,GAAGJ,EAAG,sBAAsB,CAACA,EAAG,oBAAoB,CAACE,YAAY,CAAC,cAAc,SAAS,CAACN,EAAIQ,GAAGR,EAAIS,GAAGT,EAAIgL,iCAAiC,IAAI,GAAG5K,EAAG,cAAc,GAAGJ,EAAIyB,MAAM,GAAGzB,EAAIyB,MAAM,IAAI,GAAGzB,EAAIyB,MAAM,GAAGrB,EAAG,MAAM,CAACkC,YAAY,SAAShC,YAAY,CAAC,OAAS,OAAO,MAAQ,OAAO,MAAQ,kBAAkB,aAAa,QAAQ,mBAAmB,WAAWC,MAAM,CAAC,MAAQ,WAAW,CAAEP,EAAgB,aAAEI,EAAG,MAAM,CAACE,YAAY,CAAC,OAAS,OAAO,cAAc,OAAO,eAAe,OAAO,aAAa,QAAQ,CAACF,EAAG,OAAO,CAACkC,YAAY,QAAQ,CAACtC,EAAIQ,GAAG,IAAIR,EAAIS,GAAGT,EAAIiL,kBAAkB,OAAO7K,EAAG,OAAO,CAACkC,YAAY,SAAS,CAACtC,EAAIQ,GAAG,IAAIR,EAAIS,GAAGT,EAAIkL,oBAAoB,SAASlL,EAAIyB,OAAQzB,EAAgB,aAAEI,EAAG,oBAAoB,CAAC+K,MAAO,2CAA6CnL,EAAIoL,iBAAmB,MAAO7K,MAAM,CAAC,MAAQ,GAAG,MAAQ,GAAG,MAAQP,EAAIqL,YAAYrL,EAAIyB,MAAM,GAAYrB,EAAG,cAAc,CAACE,YAAY,CAAC,OAAS,OAAO,gBAAgB,MAAM,aAAa,OAAO,mBAAmB,SAASC,MAAM,CAAC,KAAO,GAAG,MAAQ,KAAK,CAAEP,EAAIqD,QAAoB,aAAEjD,EAAG,qBAAqB,CAACE,YAAY,CAAC,aAAa,SAAS,CAACF,EAAG,QAAQ,CAACG,MAAM,CAAC,MAAQ,GAAG,KAAO,IAAIS,GAAG,CAAC,MAAQ,SAASM,GAAQ,OAAOtB,EAAIsL,cAAc,eAAe,CAAClL,EAAG,SAAS,CAACJ,EAAIQ,GAAG,oBAAoB,IAAI,GAAGR,EAAIyB,KAAMzB,EAAIqD,QAAoB,aAAEjD,EAAG,qBAAqB,CAACE,YAAY,CAAC,cAAc,QAAQ,aAAa,SAAS,CAACF,EAAG,QAAQ,CAACG,MAAM,CAAC,KAAO,GAAG,UAAU,IAAIS,GAAG,CAAC,MAAQ,SAASM,GAAQ,OAAOtB,EAAIsL,cAAc,iBAAiB,CAAClL,EAAG,SAAS,CAACG,MAAM,CAAC,KAAO,OAAO,CAACP,EAAIQ,GAAGR,EAAIS,GAAqC,WAAlCT,EAAIqD,QAAQ+G,aAAamB,MAAqB,QAAU,kBAAkB,IAAI,GAAGvL,EAAIyB,KAAMzB,EAAIqD,QAAoB,aAAEjD,EAAG,qBAAqB,CAACE,YAAY,CAAC,aAAa,SAAS,CAACF,EAAG,QAAQ,CAACG,MAAM,CAAC,KAAO,GAAG,MAAQ,IAAIS,GAAG,CAAC,MAAQ,SAASM,GAAQ,OAAOtB,EAAIsL,cAAc,WAAW,CAAClL,EAAG,SAAS,CAACJ,EAAIQ,GAAG,gBAAgB,IAAI,GAAGR,EAAIyB,KAAKrB,EAAG,uBAAwBJ,EAAIqD,QAAoB,aAAEjD,EAAG,qBAAqB,CAACE,YAAY,CAAC,QAAU,SAAS,CAACF,EAAG,QAAQ,CAACG,MAAM,CAAC,KAAO,GAAG,KAAO,IAAIS,GAAG,CAAC,MAAQ,SAASM,GAAQ,OAAOtB,EAAI2E,QAAQhL,KAAK,oBAAoB,CAACyG,EAAG,SAAS,CAACkC,YAAY,eAAe/B,MAAM,CAAC,KAAO,KAAK,CAACH,EAAG,SAAS,CAACJ,EAAIQ,GAAG,iBAAiBJ,EAAG,OAAO,CAACkC,YAAY,UAAUhC,YAAY,CAAC,cAAc,QAAQ,CAACN,EAAIQ,GAAGR,EAAIS,GAAGT,EAAIW,GAAG,cAAc,IAAI,IAAI,GAAGX,EAAIyB,KAAMzB,EAAIqD,QAAQ+G,eAAiBpK,EAAIwC,OAAOC,SAAUrC,EAAG,qBAAqB,CAACE,YAAY,CAAC,QAAU,SAAS,CAACF,EAAG,SAAS,CAACG,MAAM,CAAC,0BAAyB,EAAM,cAAc,IAAI,WAAW,GAAG,IAAM,IAAIiK,SAAS,CAAC,MAAQ,SAASlJ,GAAQA,EAAO8B,mBAAoBxC,YAAYZ,EAAIa,GAAG,CAAC,CAACxB,IAAI,YAAYyB,GAAG,SAASC,GACl/I,IAAIC,EAAKD,EAAIC,GACb,MAAO,CAACZ,EAAG,QAAQJ,EAAIiB,GAAG,CAACV,MAAM,CAAC,KAAO,KAAKS,GAAI,CAACZ,EAAG,SAAS,CAACkC,YAAY,eAAe/B,MAAM,CAAC,KAAO,KAAK,CAACH,EAAG,SAAS,CAACJ,EAAIQ,GAAG,eAAeJ,EAAG,OAAO,CAACkC,YAAY,UAAUhC,YAAY,CAAC,cAAc,QAAQ,CAACN,EAAIQ,GAAGR,EAAIS,GAAG+K,KAAKC,MAAMzL,EAAIqD,QAAQ+G,aAAasB,mBAAmB,IAAI,OAAO,MAAK,EAAM,aAAa,CAACtL,EAAG,gBAAgB,CAACG,MAAM,CAAC,QAAUP,EAAIqD,QAAQsI,QAAQ,UAAY3L,EAAIqD,QAAQ+G,aAAawB,cAAc,IAAI,GAAG5L,EAAIyB,KAAKrB,EAAG,qBAAqB,CAACE,YAAY,CAAC,QAAU,OAAO,eAAe,SAAS,CAACF,EAAG,QAAQ,CAACG,MAAM,CAAC,KAAO,GAAG,KAAO,IAAIS,GAAG,CAAC,MAAQ,SAASM,GAAQ,OAAOtB,EAAIqD,QAAQqB,MAAM,sBAAsB,CAACtE,EAAG,SAAS,CAACkC,YAAY,eAAe/B,MAAM,CAAC,KAAO,KAAK,CAACH,EAAG,SAAS,CAACJ,EAAIQ,GAAG,aAAcR,EAAIqD,QAAoB,aAAEjD,EAAG,OAAO,CAACkC,YAAY,UAAUhC,YAAY,CAAC,cAAc,QAAQ,CAACN,EAAIQ,GAAGR,EAAIS,GAAGT,EAAI6L,eAAe7L,EAAIqD,QAAQ+G,aAAapM,KAAM,QAAQoC,EAAG,OAAO,CAACkC,YAAY,aAAa,IAAI,IAAI,IAAI,GAAItC,EAAIwC,OAAyB,mBAAEpC,EAAG,SAAS,CAACE,YAAY,CAAC,OAAS,QAAQC,MAAM,CAAC,MAAQ,GAAG,KAAO,GAAG,MAAQ,GAAG,UAAY,GAAG,KAAO,GAAG,MAAQ,OAAO,MAAQ,WAAWP,EAAIyB,MAAM,IAC5mC,EAAkB,G,0ECLlB,EAAS,WAAa,IAAIzB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,SAAS,CAACA,EAAG,SAAS,CAACA,EAAG,cAAc,CAACE,YAAY,CAAC,OAAS,OAAO,iBAAiB,MAAM,CAACF,EAAG,qBAAqB,CAACE,YAAY,CAAC,cAAc,SAASC,MAAM,CAAC,KAAO,KAAK,CAACH,EAAG,SAAS,CAACG,MAAM,CAAC,MAAQ,KAAK,CAACP,EAAIQ,GAAGR,EAAIS,GAAGT,EAAI2L,QAAQ3L,EAAI4L,WAAWE,SAAW,gBAAkB,eAAe,GAAG1L,EAAG,sBAAsB,CAACE,YAAY,CAAC,cAAc,UAAU,CAACF,EAAG,oBAAoB,CAACJ,EAAIQ,GAAGR,EAAIS,GAAGT,EAAI2L,QAAQ3L,EAAI4L,WAAW5N,SAASoC,EAAG,uBAAuB,CAACJ,EAAIQ,GAAGR,EAAIS,GAAGT,EAAIW,GAAG,SAAWX,EAAI2L,QAAQ3L,EAAI4L,WAAWL,YAAY,IAAI,GAAGnL,EAAG,aAAaJ,EAAIkB,GAAIlB,EAAmB,iBAAE,SAAS+L,GAAU,OAAO3L,EAAG,MAAM,CAACf,IAAI0M,GAAU,CAAC3L,EAAG,MAAM,CAACkC,YAAY,SAAS6I,MAAQnL,EAAI2L,QAAQI,GAAUC,QAEhxB,yBADA,0BAC2B,CAAC5L,EAAG,QAAQ,CAACE,YAAY,CAAC,cAAc,OAAO6K,MAAQnL,EAAI2L,QAAQI,GAAUC,QAEtG,yBADA,yBAC0BzL,MAAM,CAAC,KAAO,IAAIS,GAAG,CAAC,MAAQ,SAASM,GAAQ,OAAOtB,EAAIiM,kBAAkBF,MAAa,CAAC3L,EAAG,SAAS,CAACJ,EAAIQ,GAAG,yBAAyB,GAAGJ,EAAG,OAAO,CAACE,YAAY,CAAC,cAAc,SAAS,CAACN,EAAIQ,GAAGR,EAAIS,GAAGT,EAAI2L,QAAQI,GAAU/N,SAASoC,EAAG,MAAM,CAACE,YAAY,CAAC,aAAa,OAAO,cAAc,OAAO,eAAe,OAAO,OAAS,SAAS,CAACF,EAAG,WAAW,CAACG,MAAM,CAAC,KAAO,GAAG,UAAYP,EAAI2L,QAAQI,GAAUC,QAAQ,MAAQR,KAAKC,MAAMzL,EAAI2L,QAAQI,GAAUL,cAAc,eAAe,cAAc,cAAc,aAAa1K,GAAG,CAAC,IAAM,SAASM,GAAQ,OAAOtB,EAAIkM,gBAAgBH,EAAUzK,IAAS,eAAe,SAASA,GAAQ,OAAOtB,EAAIkM,gBAAgBH,EAAU,OAAO,gBAAgB,SAASzK,GAAQ,OAAOtB,EAAIkM,gBAAgBH,EAAU,aAAa,IAAI,GAAG3L,EAAG,cAAc,OAAM,IAAI,IACvzB,EAAkB,G,YC0DtB,iBACE8B,MAAO,CAAC,QAAS,UAAW,aAC5BrJ,KAFF,WAGI,MAAO,IAETsL,SAAU,CACRgI,gBADJ,WAEM,IAAIC,EAAS,CAACnM,KAAK2L,WAEnB,OADAQ,EAAOzS,KAAb,mEACayS,IAGX9H,QAZF,aAaEC,QAAS,CACP2H,gBAAiB,SAArB,KASwB,OAAdG,EACFA,EAAYpM,KAAKoD,QAAQsI,QAAQW,GAAUZ,aAAe,EAClE,aACQW,EAAYpM,KAAKoD,QAAQsI,QAAQW,GAAUZ,aAAe,GAE5DzL,KAAKoD,QAAQiI,cAAc,aAAce,EAAWC,GACpDrM,KAAK0L,QAAQW,GAAUZ,aAAeW,GAExCJ,kBAAmB,SAAvB,GACMhM,KAAKoD,QAAQiI,cAAc,eAAgB,KAAMgB,OC/FgS,I,YCOnV,GAAY,eACd,EACA,EACA,GACA,EACA,KACA,KACA,MAIa,MAAiB,QAehC,IAAkB,GAAW,CAACtG,OAAA,KAAKnB,QAAA,KAAMG,WAAA,KAASoB,QAAA,KAAME,QAAA,KAAMC,YAAA,KAAU0D,kBAAA,KAAgBtC,iBAAA,OAAiB4E,kBAAA,OAAkB3E,eAAA,OAAe4E,UAAA,OCyO1I,sBACE5I,WAAY,CACV6I,cAAJ,IAEEvK,MAAO,GACPrJ,KALF,WAMI,MAAO,CACLkS,mBAAoB,KAGxBlC,MAAO,GACP1E,SAAU,CACRgG,aADJ,WAEM,OAAIlK,KAAK8K,mBACA9K,KAAK8K,mBAAmB2B,SAExB,MAGXrB,SARJ,WASM,IAAKpL,KAAKkK,aAAc,OAAO,EAC/B,IAAIwC,EAAY1M,KAAKkK,aAAayC,SAC9BC,EAAU5M,KAAK8K,mBAAmB+B,cAClCC,EAAaF,EAAUF,EAAY,IACvC,OAAOI,GAET9B,iBAfJ,WAgBM,IAAKhL,KAAKkK,aAAc,MAAO,OAC/B,IAAI0C,EAAU5M,KAAK8K,mBAAmB+B,cACtC,OAAOD,EAAQG,WAAWC,kBAE5B/B,mBApBJ,WAqBM,IAAKjL,KAAKkK,aAAc,MAAO,OAC/B,IAAIwC,EAAY1M,KAAKkK,aAAayC,SAClC,OAAOD,EAAUK,WAAWC,kBAE9B7B,iBAzBJ,WA0BM,OAAOxL,OAAOsN,WAAa,KAE7BzC,cA5BJ,WA6BM,OAAKxK,KAAK8K,mBAAmB2B,UAAazM,KAAK8K,mBAAmB2B,UAAazM,KAAK8K,mBAAmB2B,SAASS,cAAcvC,UAAa3K,KAAK8K,mBAAmB2B,SAASS,cAAcxC,aACnL1K,KAAK8K,mBAAmB2B,SAASS,cADuK,IAGjNnC,4BAhCJ,WAiCM,IAAK/K,KAAKwK,gBAAkBxK,KAAKwK,cAAc2C,YAAa,MAAO,GACnE,GAAInN,KAAKwK,cAAc2C,YAAY7H,SAAS,QAAS,CACnD,IAAI8H,EAAK,0BACLC,EAAWrN,KAAKwK,cAAc2C,YAAYG,QAAQF,EAAI,MAC1D,OAAOC,EAAW,MAEpB,MAAO,KAGXlJ,QArDF,WAsDInE,KAAKoD,QAAQoC,IAAI,gBAAiBxF,KAAKuN,iBACvCvN,KAAKoD,QAAQoC,IAAI,sBAAuBxF,KAAKwN,kBAE/ClJ,QAAS,CACP+G,cADJ,SACA,qEACMrL,KAAKoD,QAAQiI,cAAc/B,EAAKmE,EAASzN,KAAKoD,QAAQsK,iBAExDrD,YAJJ,SAIA,GAEM,IAAI7F,EAAM,YAActD,EAAKgB,QAC7BlC,KAAK0E,QAAQhL,KAAK,CAAxB,sCAEI6T,gBATJ,SASA,GACM,IAAN,iEACM,GAAI3U,EAAK+S,YAAcgC,EACrB,IAAK,IAAb,mFACU,EAAV,wCAII,gBAjBJ,WAiBA,oKACA,uBADA,uBAEA,2DACA,wBAHA,SAIA,qBAJA,OAIA,qBAJA,qDAOI/B,eAxBJ,SAwBA,KAGM,OAAIgC,EAAIxU,QAAUyU,EACTD,EAGFA,EAAI/N,MAAM,EAAGgO,GAAO,UClWkT,M,0FCQ/U,GAAY,eACd,GACA,EACA,GACA,EACA,KACA,WACA,MAIa,MAAiB,QAsBhC,IAAkB,GAAW,CAAC9H,OAAA,KAAKnB,QAAA,KAAMG,WAAA,KAAS+I,SAAA,KAAMC,WAAA,KAAQ5H,QAAA,KAAMnB,QAAA,KAAKqB,QAAA,KAAMC,YAAA,KAAUmB,kBAAA,KAAgBuC,kBAAA,KAAgBtC,iBAAA,OAAiBsG,iBAAA,KAAc1B,kBAAA,OAAkB3E,eAAA,OAAepB,SAAA,KAAM0H,mBAAA,KAAgBhE,aAAA,OCzCjN,IAAI,GAAS,WAAa,IAAIlK,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,sBAAsB,CAACG,MAAM,CAAC,MAAQ,GAAG,IAAM,GAAG,QAAU,GAAG,UAAY,GAAG,MAAQ,OAAOmB,MAAM,CAAC3C,MAAOiB,EAAW,QAAE2B,SAAS,SAAUC,GAAM5B,EAAIoI,QAAQxG,GAAKE,WAAW,YAAY,CAAC1B,EAAG,eAAe,CAACkC,YAAY,YAAY,CAAClC,EAAG,IAAI,CAACJ,EAAIQ,GAAGR,EAAIS,GAAGT,EAAIW,GAAG,iBAAiBP,EAAG,SAAS,CAACG,MAAM,CAAC,MAAQ,KAAK,CAACH,EAAG,aAAaJ,EAAIkB,GAAIlB,EAAqB,mBAAE,SAASsM,GAAU,OAAOlM,EAAG,MAAM,CAACf,IAAIiN,EAASnB,MAAOnL,EAAIqD,QAAQsK,gBAAkBrB,EAAW,4CAA8C,IAAK,CAAClM,EAAG,cAAc,CAACE,YAAY,CAAC,cAAc,OAAO,eAAe,SAASC,MAAM,CAAC,OAAS,GAAG,MAAQ,IAAIS,GAAG,CAAC,MAAQ,SAASM,GAAQ,OAAOtB,EAAIqD,QAAQ8K,aAAanO,EAAIqD,QAAQsI,QAAQW,GAAUV,cAAc,CAACxL,EAAG,qBAAqB,CAACG,MAAM,CAAC,KAAO,KAAK,CAACH,EAAG,SAAS,CAACG,MAAM,CAAC,KAAO,OAAO,CAACP,EAAIQ,GAAGR,EAAIS,GAAGT,EAAIqD,QAAQsI,QAAQW,GAAU8B,gBAAkB,gBAAkB,eAAe,GAAGhO,EAAG,sBAAsB,CAACE,YAAY,CAAC,cAAc,UAAU,CAACF,EAAG,oBAAoB,CAACkC,YAAY,cAAc,CAACtC,EAAIQ,GAAGR,EAAIS,GAAGT,EAAIqD,QAAQsI,QAAQW,GAAUtO,SAASoC,EAAG,uBAAuB,CAACf,IAAIW,EAAIqD,QAAQsI,QAAQW,GAAUf,MAAMjJ,YAAY,SAAShC,YAAY,CAAC,cAAc,WAAW,CAACN,EAAIQ,GAAG,IAAIR,EAAIS,GAAGT,EAAIW,GAAG,SAAWX,EAAIqD,QAAQsI,QAAQW,GAAUf,QAAQ,QAAQ,GAAIvL,EAAIqD,QAAsB,eAAEjD,EAAG,qBAAqB,CAACE,YAAY,CAAC,gBAAgB,SAAS,CAACF,EAAG,SAAS,CAACG,MAAM,CAAC,0BAAyB,EAAM,kBAAiB,EAAK,cAAc,IAAI,WAAW,GAAG,MAAQ,IAAIiK,SAAS,CAAC,MAAQ,CAAC,SAASlJ,GAAQA,EAAOiJ,mBAAoB,SAASjJ,GAAQA,EAAOiJ,kBAAkBjJ,EAAO8B,oBAAqBxC,YAAYZ,EAAIa,GAAG,CAAC,CAACxB,IAAI,YAAYyB,GAAG,SAASC,GACxuD,IAAIC,EAAKD,EAAIC,GACb,MAAO,CAACZ,EAAG,QAAQJ,EAAIiB,GAAG,CAACX,YAAY,CAAC,MAAQ,mBAAmBC,MAAM,CAAC,KAAO,KAAKS,GAAI,CAACZ,EAAG,SAAS,CAACkC,YAAY,eAAe/B,MAAM,CAAC,KAAO,KAAK,CAACH,EAAG,SAAS,CAACJ,EAAIQ,GAAG,eAAeJ,EAAG,OAAO,CAACkC,YAAY,YAAY,CAACtC,EAAIQ,GAAGR,EAAIS,GAAG+K,KAAKC,MAAMzL,EAAIqD,QAAQsI,QAAQW,GAAUZ,mBAAmB,IAAI,OAAO,MAAK,IAAO,CAACtL,EAAG,gBAAgB,CAACG,MAAM,CAAC,QAAUP,EAAIqD,QAAQsI,QAAQ,UAAYW,MAAa,IAAI,GAAGtM,EAAIyB,MAAM,GAAGrB,EAAG,cAAc,OAAM,IAAI,IAC7b,GAAkB,GC4FtB,kBACEwD,WAAY,CACV6I,cAAJ,IAEE5D,MAAO,GAEPhQ,KANF,WAOI,MAAO,CACLwV,kBAAmB,GACnBjG,SAAS,IAGbjE,SAAU,GAEVC,QAdF,WAeInE,KAAKoD,QAAQoC,IAAI,kBAAmBxF,KAAKqO,MACzCrO,KAAKoD,QAAQoC,IAAI,kBAAmBxF,KAAKsO,qBACzCtO,KAAKsO,uBAEPhK,QAAS,CACP+J,KADJ,WAEMrO,KAAKmI,SAAU,GAEjBmG,oBAJJ,WAOM,IAAK,IAAIjC,KADTrM,KAAKoO,kBAAoB,GACJpO,KAAKoD,QAAQsI,QAE5B1L,KAAKoD,QAAQsI,QAAQW,GAAUkC,WACjCvO,KAAKoO,kBAAkB1U,KAAK2S,OC5HgT,M,yBCQlV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIa,MAAiB,QAkBhC,IAAkB,GAAW,CAACtG,OAAA,KAAKjB,WAAA,QAAWC,WAAA,KAAS+I,SAAA,KAAM3H,QAAA,KAAME,QAAA,KAAMC,YAAA,KAAUmB,kBAAA,KAAgBuC,kBAAA,KAAgBtC,iBAAA,OAAiB4E,kBAAA,OAAkB3E,eAAA,OAAepB,SAAA,KAAMqB,oBAAA,OCN3K,sBACE7J,KAAM,MACN4F,WAAY,CACV6K,eAAJ,EACIC,OAAJ,EACIC,YAAJ,EACIC,UAAJ,GACIC,aAAJ,IAEEhW,KAAM,WAAR,OACA,sBAEEuL,QAZF,WAcI,IAAJ,KAEA,kBACM0K,EAAgBC,EAAIC,OAASD,EAAIE,SAInChP,KAAKoD,QAAQ6L,QAAQJ,MCpDqS,M,gECQ1T,GAAY,eACd,GACA,EACApM,GACA,EACA,KACA,KACA,MAIa,MAAiB,QAQhC,IAAkB,GAAW,CAACyM,QAAA,KAAKC,SAAA,KAAMC,YAAA,KAASC,qBAAA,O,iBCtBhDC,gBAAS,GAAD,OAAIC,GAAJ,qBAA6C,CACnDC,MADmD,aAOnDC,WAPmD,aAUnDC,OAVmD,aAanDC,YAbmD,aAgBnDC,QAhBmD,WAiBjDC,MAAM,6CACNlQ,OAAOmQ,SAASC,QAAO,IAEzBC,QApBmD,WAqBjDH,MAAM,kEAERpS,MAvBmD,SAuB5CA,O,8BC5BP,GAAS,WAAa,IAAIsC,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,UAAU,CAACA,EAAG,SAAS,CAACG,MAAM,CAAC,KAAO,KAAKP,EAAIkB,GAAIlB,EAAS,OAAE,SAASmB,GAAM,OAAOf,EAAG,cAAc,CAACf,IAAI8B,EAAKoG,MAAMhH,MAAM,CAAC,KAAO,IAAIS,GAAG,CAAC,MAAQ,SAASM,GAAQ,OAAOtB,EAAI2E,QAAQhL,KAAKwH,EAAKgG,SAAS,CAAC/G,EAAG,mBAAmB,CAACE,YAAY,CAAC,cAAc,SAAS,CAACF,EAAG,SAAS,CAACJ,EAAIQ,GAAGR,EAAIS,GAAGU,EAAKqG,UAAU,GAAGpH,EAAG,sBAAsB,CAACA,EAAG,oBAAoB,CAACgB,SAAS,CAAC,YAAcpB,EAAIS,GAAGU,EAAKoG,WAAW,IAAI,MAAK,IAAI,IACjgB,GAAkB,GCiBtB,IACEvJ,KAAM,OACNnF,KAFF,WAGI,MAAO,CACL6H,MAAO,CACb,CAAQ,MAAR,mBAAQ,KAAR,SAAQ,KAAR,YACA,CAAQ,MAAR,kBAAQ,KAAR,QAAQ,KAAR,WACA,CAAQ,MAAR,kBAAQ,KAAR,aAAQ,KAAR,WACA,CAAQ,MAAR,qBAAQ,KAAR,gBAAQ,KAAR,cACA,CAAQ,MAAR,kBAAQ,KAAR,SAAQ,KAAR,cAIE0D,QAbF,WAcInE,KAAKuC,OAAOwF,YAAc/H,KAAKU,GAAG,oBChCwS,MCO1U,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,MAAiB,QAUhC,IAAkB,GAAW,CAACyF,QAAA,KAAME,QAAA,KAAMC,YAAA,KAAUoB,iBAAA,OAAiBsG,iBAAA,KAAcrG,eAAA,SC5BnF,IAAI,GAAS,WAAa,IAAI5H,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,UAAU,CAACA,EAAG,eAAe,CAACG,MAAM,CAAC,UAAYP,EAAI4F,UAAU,SAAW5F,EAAI4K,SAAS,SAAW,WAAa5K,EAAI4F,cAAc,IAChO,GAAkB,G,aCStB,IACE5H,KAAM,SACN4F,WAAY,CACVsM,aAAJ,SAEEhO,MAAO,CACL0D,UAAWuK,OACXvF,SAAUuF,QAEZtX,KATF,WAUI,MAAO,IAETuL,QAZF,WAaInE,KAAKuC,OAAOwF,YAAc/H,KAAKU,GAAGV,KAAK2F,YAEzCzB,SAAU,GACVI,QAAS,IC1BqU,MCO5U,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QCbf6L,OAAIC,IAAIC,SAER,IAAMC,GAAS,CACb,CACEpJ,KAAM,IACNnJ,KAAM,OACN4G,UAAW4L,IAEb,CACErJ,KAAM,UACNnJ,KAAM,SACN4G,UAAW,kBAAM,yCACjB1C,MAAO,SAAAuO,GAAK,0CAAUA,EAAMC,QAAWD,EAAMjH,SAE/C,CACErC,KAAM,qBACNnJ,KAAM,YACN4G,UAAW,kBAAM,yCACjB1C,MAAO,SAAAuO,GAAK,0CAAUA,EAAMC,QAAWD,EAAMjH,SAE/C,CACErC,KAAM,UACNnJ,KAAM,SACN4G,UAAW,kBAAM,8FACjB1C,MAAO,SAAAuO,GAAK,0CAAUA,EAAMC,QAAWD,EAAMjH,SAE/C,CACErC,KAAM,yBACNnJ,KAAM,cACN4G,UAAW,kBAAM,mGACjB1C,MAAO,SAAAuO,GAAK,0CAAUA,EAAMC,QAAWD,EAAMjH,SAE/C,CACErC,KAAM,eACNnJ,KAAM,cACN4G,UAAW,kBAAM,mGACjB1C,MAAO,SAAAuO,GAAK,0CAAUA,EAAMC,QAAWD,EAAMjH,SAE/C,CACErC,KAAM,cACNnJ,KAAM,SACN4G,UAAW+L,GACXzO,MAAO,SAAAuO,GAAK,0CAAUA,EAAMC,QAAWD,EAAMjH,UAI3CoH,GAAS,IAAIN,QAAU,CAC3BrR,KAAM,OACNsR,YAGaK,M,iECnDf,SAASC,KACP,IAAMC,EAAUC,UACVC,EAAW,GAQjB,OAPAF,EAAQ7J,OAAOgK,SAAQ,SAAA5R,GACrB,IAAM6R,EAAU7R,EAAI8R,MAAM,uBAC1B,GAAID,GAAWA,EAAQ7X,OAAS,EAAG,CACjC,IAAM+X,EAASF,EAAQ,GACvBF,EAASI,GAAUN,EAAQzR,OAGxB2R,EAZTZ,OAAIC,IAAIgB,SAeO,WAAIA,QAAQ,CAEzBD,OAAQE,UAAUC,SAASC,MAAM,KAAK,GACtCC,eAAgB,KAChBT,SAAUH,O,6DCnBZT,OAAIC,IAAIqB,SAEO,WAAIA,QAAQ,ICHrBC,GAAc,IAAIvB,OAAI,CAC1BvX,KAD0B,WAExB,MAAO,CACLmP,YAAa,OACbX,SAAS,EACTI,oBAAoB,EACpBM,mBAAmB,EACnBG,kBAAmB,KACnBzF,UAAU,EACVmP,oBAAoB,IAGxBxN,QAZ0B,WAaxBnE,KAAK4R,sBACLjS,OAAOkS,iBAAiB,SAAU7R,KAAK4R,sBAEzCE,UAhB0B,WAiBxBnS,OAAOoS,oBAAoB,SAAU/R,KAAK4R,sBAE5CtN,QAAS,CACPsN,oBADO,WAEL5R,KAAKwC,SAAY/G,SAASuW,KAAKC,YAAc,IAC7CjS,KAAK2R,oBAAsD,IAAhChS,OAAO0R,UAAUa,YAAyBvS,OAAOwS,WAAW,8BAA8BC,YAK5G,IACbV,eAEAW,QAHa,SAGJlC,EAAKmC,GACZnC,EAAI7W,UAAUiJ,OAASmP,K,oGC3BrBa,GAAc,CAClBjV,QAAS,KAGLkV,GAASC,KAAMtT,OAAOoT,IAItBG,GAAS,IAAIvC,OAAI,CAErBwC,SAAU,GACVC,IAAK,KAELha,KALqB,WAMnB,MAAO,CACLia,WAAW,EACXnH,QAAS,GACTgC,eAAgB,KAChBoF,WAAY,KAGhBxO,QAAS,CAED2K,QAFC,SAEQJ,GAAe,8JAEvBA,EAAckE,SAAS,OAC1BlE,GAAgC,KAElC,EAAK8D,SAAW9D,EACVmE,EAAYnE,EAAcvB,QAAQ,OAAQ,MAAQ,KACxD,EAAKsF,IAAM,IAAIK,UAAUD,GACzB,EAAKJ,IAAIM,OAAS,EAAKC,aACvB,EAAKP,IAAIQ,UAAY,EAAKC,aAC1B,EAAKT,IAAIU,QAAU,EAAKC,WACxB,EAAKX,IAAIxW,QAAU,EAAKoX,WAXI,8CAcxB9J,cAhBC,SAgBcxI,GAAM,2JAEM,IAA3BA,EAAKkI,WAAWhQ,OAFK,gCAIjB,EAAKwQ,QAAQ,UAAW1I,GAJP,OAKvBA,EAAKkI,WAAa,CAAClI,EAAKyJ,UALD,sCAQjB,EAAKd,WAAW,UAAW3I,GARV,OASvBA,EAAKkI,WAAa,GATK,8CAa3B/F,YA7BO,SA6BMkB,GAA0C,IAA/BkP,EAA+B,uDAAnB,QAASC,EAAU,uDAAH,EAElD,OAAKnP,GAAcA,EAAUjC,WACF,aAAvBiC,EAAUoG,UAAyC,UAAd8I,EACvC,UAAUzT,KAAK2S,SAAf,eAA8BpO,EAAUjC,WAAxC,YAAsDiC,EAAUrC,QAAhE,2BAA0FqC,EAAUoG,SAApG,iBAAqH+I,GAC5GnP,EAAUoP,UAAYpP,EAAUoP,SAASF,GAC3ClP,EAAUoP,SAASF,GACjBlP,EAAUqP,OAASrP,EAAUqP,MAAMD,UAAYpP,EAAUqP,MAAMD,SAASF,GAC1ElP,EAAUqP,MAAMD,SAASF,GACvBlP,EAAUf,QAAUe,EAAUf,OAAOmQ,UAAYpP,EAAUf,OAAOmQ,SAASF,GAC7ElP,EAAUf,OAAOmQ,SAASF,GACxBlP,EAAUqP,OAASrP,EAAUqP,MAAMpQ,QAAUe,EAAUqP,MAAMpQ,OAAOmQ,UAAYpP,EAAUqP,MAAMpQ,OAAOmQ,SAASF,GAClHlP,EAAUqP,MAAMpQ,OAAOmQ,SAASF,GAC9BlP,EAAUd,SAAWc,EAAUd,QAAQ,GAAGkQ,UAAYpP,EAAUd,QAAQ,GAAGkQ,SAASF,GACtFlP,EAAUd,QAAQ,GAAGkQ,SAASF,GACd,WAAdA,EAEFzT,KAAKqD,YAAYkB,EAAW,QAASmP,GAChC,GAhBkC,IAmB5CG,QAlDC,SAkDQxO,GAAuB,qLAAboL,EAAa,+BAAJ,GAE1BjM,EAAM,EAAKmO,SAAW,OAAStN,EAFD,SAGfmN,GAAO9T,IAAI8F,EAAK,CAAEiM,OAAQA,IAHX,cAG9BxW,EAH8B,OAIpCkW,OAAI2D,KAAKC,MAAM,UAAW1O,EAAUpL,GAJA,kBAK7BA,EAAOrB,MALsB,8CAQhCob,SA1DC,SA0DS3O,EAAUzM,GAAM,uKAExB4L,EAAM,EAAKmO,SAAW,OAAStN,EACrCzM,EAAOqb,KAAKC,UAAUtb,GAHQ,SAIT4Z,GAAO2B,KAAK3P,EAAK5L,GAJR,cAIxBqB,EAJwB,OAK9BkW,OAAI2D,KAAKC,MAAM,WAAY1O,EAAUpL,GALP,kBAMvBA,EAAOrB,MANgB,8CAS1BgR,QAnEC,SAmEQvE,EAAUzM,GAAM,uKAEvB4L,EAAM,EAAKmO,SAAW,OAAStN,EACrCzM,EAAOqb,KAAKC,UAAUtb,GAHO,SAIR4Z,GAAO4B,IAAI5P,EAAK5L,GAJR,cAIvBqB,EAJuB,OAK7BkW,OAAI2D,KAAKC,MAAM,UAAW1O,EAAUpL,GALP,kBAMtBA,EAAOrB,MANe,8CASzBiR,WA5EC,SA4EWxE,EAAUgP,GAAS,uKAE7B7P,EAAM,EAAKmO,SAAW,OAAStN,EACrCgP,EAAUJ,KAAKC,UAAUG,GAHU,SAId7B,GAAO8B,OAAO9P,EAAK,CAAE5L,KAAMyb,IAJb,cAI7Bpa,EAJ6B,OAKnCkW,OAAI2D,KAAKC,MAAM,aAAc1O,EAAUpL,GALJ,kBAM5BA,EAAOrB,MANqB,8CAS/B2b,YArFC,SAqFYlP,EAAUmP,GAAqB,gLAAf/D,EAAe,+BAAN,KAEtCjM,EAAM,EAAKmO,SAAW,OAAStN,EAC/BoL,IACEgE,EAAY,IAAIC,gBAAgBjE,GACpCjM,GAAO,IAAMiQ,EAAU1H,YAErBrE,EAAQ,EACZyH,OAAI2D,KAAKC,MAAM,cAAevP,GAC9BmQ,KAAKnQ,GACFoQ,KAAK,WAAW,SAAU1T,GACzBiP,OAAI0E,IAAIL,EAAM9L,EAAOxH,GACrBwH,GAAS,KAEVoM,MAAK,SAAUC,GAEVP,EAAKpb,OAAS2b,EAAStU,MAAMrH,QAC/Bob,EAAKla,OAAOya,EAAStU,MAAMrH,WAjBe,8CAsBlDiS,cA3GO,SA2GQ/B,GAAmD,IAA9CmE,EAA8C,uDAApC,GAAIpB,EAAgC,uDAArBrM,KAAK0N,eAC1CrI,EAAW,WAAagH,EAAW,QAAU/C,EACnDtJ,KAAKgU,SAAS3O,EAAUoI,IAGpB9D,SAhHC,SAgHSzI,EAAM8T,GAAU,qKAC9B,EAAKzS,OAAO6E,SAAU,EAChB/B,EAAW,WAAa,EAAKqI,eAAiB,eAAiBsH,EAFvC,SAGxB,EAAKhB,SAAS3O,EAAUnE,GAHA,OAI9B,EAAKqB,OAAO6E,SAAU,EAJQ,8CAOhC8G,aAvHO,SAuHO+G,GACRA,IAAgBjV,KAAK0N,iBACvB1N,KAAK0N,eAAiBuH,EACtBxP,aAAaC,QAAQ,iBAAkBuP,GACvCjV,KAAKyE,MAAM,sBAAuBwQ,KAIhC9B,aA/HC,WA+He,2KAEpBhD,OAAI2D,KAAKoB,KAAK,uBAAyB,EAAKvC,UAC5C,EAAKE,WAAY,EAHG,SAKE,EAAKgB,QAAQ,WALf,OAKdnI,EALc,wBAMCA,GAND,IAMpB,2BAAWyJ,EAAmB,QAC5BhF,OAAI0E,IAAI,EAAKnJ,QAASyJ,EAAOxJ,UAAWwJ,GAPtB,8BASpB,EAAKC,sBACL,EAAK3Q,MAAM,mBAVS,8CAahB4O,aA5IC,SA4IarY,GAAG,8JAEjBqa,EAAMpB,KAAKqB,MAAMta,EAAEpC,MACH,mBAAhByc,EAAIvX,QACNqS,OAAI0E,IAAI,EAAKnJ,QAAS2J,EAAIE,gBAAgB5J,UAAW0J,EAAIE,iBAChC,iBAAhBF,EAAIvX,SACbqS,OAAI0E,IAAI,EAAKnJ,QAAS2J,EAAIE,gBAAgB5J,UAAW0J,EAAIE,iBACzD,EAAKH,sBACL,EAAK3Q,MAAM,oBACc,mBAAhB4Q,EAAIvX,SACbqS,OAAImE,OAAO,EAAK5I,QAAS2J,EAAIE,gBAAgB5J,WAC7C,EAAKyJ,sBACL,EAAK3Q,MAAM,oBACc,sBAAhB4Q,EAAIvX,QACb,EAAKgV,WAAauC,EAAIE,gBAEtB,EAAK9Q,MAAM4Q,EAAIvX,QAASuX,EAAIE,iBAhBT,8CAoBvBhC,WAhKO,SAgKKvY,GACVgF,KAAK6S,WAAY,EACjB1C,OAAI2D,KAAKrW,MAAM,8DAA+DzC,EAAEwa,QAChFvX,WAAW,WACT+B,KAAKiP,QAAQjP,KAAK2S,WAClBtT,KAAKW,MAAO,MAGhBwT,WAxKO,WAyKLxT,KAAK4S,IAAI6C,SAGXL,oBA5KO,WA8KL,IAAKpV,KAAKmK,eAAiBnK,KAAKmK,aAAauL,SAAW1V,KAAKmK,aAAawL,cAAcvc,OAAS,EAAG,CAElG,IAAMwc,EAAenQ,aAAaoQ,QAAQ,kBAC1C,GAAID,GAAgB5V,KAAK0L,QAAQkK,IAAiB5V,KAAK0L,QAAQkK,GAAcF,QAC3E1V,KAAKkO,aAAa0H,OACb,CAEL,IAAK,IAAMvJ,KAAYrM,KAAK0L,QAC1B,GAAqC,YAAjC1L,KAAK0L,QAAQW,GAAUf,OAAuBtL,KAAK0L,QAAQW,GAAUqJ,SAA2D,IAAhD1V,KAAK0L,QAAQW,GAAUsJ,cAAcvc,OAAc,CACrI4G,KAAKkO,aAAa7B,GAClB,MAIJ,IAAKrM,KAAKmK,eAAiBnK,KAAKmK,aAAauL,QAC3C,IAAK,IAAMrJ,KAAYrM,KAAK0L,QAC1B,GAAI1L,KAAK0L,QAAQW,GAAUqJ,SAA2D,IAAhD1V,KAAK0L,QAAQW,GAAUsJ,cAAcvc,OAAc,CACvF4G,KAAKkO,aAAa7B,GAClB,WAQdnI,SAAU,CACRiG,aADQ,WAEN,OAAKnK,KAAK0N,eAGD1N,KAAK0L,QAAQ1L,KAAK0N,gBAFlB,SASA,IACbgF,UAEAL,QAHa,SAGJlC,EAAKmC,GACZnC,EAAI7W,UAAU8J,QAAUsP,K,wBCpOtBoD,IAAevG,EACfwG,GAAgB,CACpBC,WAAW,EACXC,SAAUH,GAAe,QAAU,QACnCI,oBAAoB,EACpBC,cAAc,EACdC,gBAAgB,EAChBC,UAAW,IACXC,mBAAmB,GAGrBnG,OAAIoG,OAAOC,eAAgB,EAC3BrG,OAAIC,IAAIqG,KAAWV,IACnB5F,OAAIC,IAAIsG,SACRvG,OAAIC,IAAIuG,IACRxG,OAAIC,IAAIsC,IAGRxC,OAAO5W,UAAU0T,eAAiB,WAChC,IAAI4J,EAASC,SAAS7W,KAAM,IACxB8W,EAAQvL,KAAKwL,MAAMH,EAAS,MAC5BI,EAAUzL,KAAKwL,OAAOH,EAAkB,KAARE,GAAiB,IACjDG,EAAUL,EAAkB,KAARE,EAA2B,GAAVE,EAIzC,OAHIF,EAAQ,KAAMA,EAAQ,IAAMA,GAC5BE,EAAU,KAAMA,EAAU,IAAMA,GAChCC,EAAU,KAAMA,EAAU,IAAMA,GACtB,OAAVH,EAAyBE,EAAU,IAAMC,EAAwBH,EAAQ,IAAME,EAAU,IAAMC,GAGrG,IAAI9G,OAAI,CACNQ,UACAuG,QACAC,WACArX,OAAQ,SAAAsX,GAAC,OAAIA,EAAEC,OACdC,OAAO,S,qBCjDVxc,EAAOD,QAAU,ssG,kCCAjB,yBAAwe,EAAG,G,gDCA3eC,EAAOD,QAAU,IAA0B,yB,uBCA3CC,EAAOD,QAAU,IAA0B,0B,8CCA3CC,EAAOD,QAAU,ktI,qBCAjBC,EAAOD,QAAU,kuH,qBCAjBC,EAAOD,QAAU,ktI,uBCAjB,IAAI8L,EAAM,CACT,YAAa,OACb,mBAAoB,OACpB,kBAAmB,OACnB,uBAAwB,OACxB,oBAAqB,OACrB,aAAc,OACd,aAAc,OACd,cAAe,OACf,sBAAuB,OACvB,sBAAuB,OACvB,aAAc,OACd,YAAa,OACb,YAAa,OACb,cAAe,OACf,cAAe,OACf,gBAAiB,OACjB,mBAAoB,OACpB,eAAgB,OAChB,eAAgB,OAChB,YAAa,OACb,kBAAmB,QAIpB,SAASC,EAAeC,GACvB,IAAIC,EAAKC,EAAsBF,GAC/B,OAAOtM,EAAoBuM,GAE5B,SAASC,EAAsBF,GAC9B,IAAItM,EAAoBgE,EAAEoI,EAAKE,GAAM,CACpC,IAAI7L,EAAI,IAAI0B,MAAM,uBAAyBmK,EAAM,KAEjD,MADA7L,EAAE2B,KAAO,mBACH3B,EAEP,OAAO2L,EAAIE,GAEZD,EAAeI,KAAO,WACrB,OAAO3N,OAAO2N,KAAKL,IAEpBC,EAAexL,QAAU2L,EACzBjM,EAAOD,QAAU+L,EACjBA,EAAeE,GAAK,Q,yDC1CpB,yBAA2e,EAAG,G,0wICA9ehM,EAAOD,QAAU,IAA0B,+B,qBCA3CC,EAAOD,QAAU,IAA0B,yB,kCCA3C,IAAIiF,EAAS,WAAa,IAAIC,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,cAAc,CAACuC,WAAW,CAAC,CAAC3E,KAAK,YAAY4E,QAAQ,cAAc7D,MAAOiB,EAAa,UAAE8B,WAAW,cAAcvB,MAAM,CAAC,OAAS,IAAIS,GAAG,CAAC,MAAQ,SAASM,GAAQ,OAAIA,EAAOnF,KAAK0G,QAAQ,QAAQ7C,EAAI8C,GAAGxB,EAAOyB,QAAQ,OAAO,GAAGzB,EAAOjC,IAAI,CAAC,OAAO,eAAiC,WAAYiC,GAA4B,IAAlBA,EAAO0B,OAAvC,UAAoEhD,EAAIiD,eAAiBjD,EAAIiD,eAAejD,EAAImB,MAAQnB,EAAIkD,YAAYlD,EAAImB,QAAO,YAAc,CAACnB,EAAImD,UAAU,SAAS7B,GAAQA,EAAO8B,qBAAsB,CAAGpD,EAAIwX,WAA+OxX,EAAIyB,KAAvOrB,EAAG,qBAAqB,CAACG,MAAM,CAAC,KAAO,GAAG,MAAQ,SAAS,CAACH,EAAG,MAAM,CAACE,YAAY,CAAC,OAAS,6BAA6BC,MAAM,CAAC,IAAMP,EAAIqD,QAAQC,YAAYtD,EAAImB,KAAM,QAAS,IAAI,WAAW,EAAQ,aAAoCf,EAAG,sBAAsB,CAACA,EAAG,oBAAoB,CAACJ,EAAIQ,GAAG,IAAIR,EAAIS,GAAGT,EAAImB,KAAKnD,MAAM,KAAQgC,EAAImB,KAAKsW,QAASrX,EAAG,OAAO,CAACJ,EAAIQ,GAAG,IAAIR,EAAIS,GAAGT,EAAImB,KAAKsW,SAAS,OAAOzX,EAAIyB,OAAQzB,EAAImB,KAAY,QAAEf,EAAG,uBAAuB,CAACJ,EAAIkB,GAAIlB,EAAImB,KAAY,SAAE,SAASsC,EAAO4G,GAAa,OAAOjK,EAAG,OAAO,CAACf,IAAIoE,EAAOtB,SAAS,CAAC/B,EAAG,IAAI,CAACY,GAAG,CAAC,MAAQ,CAAC,SAASM,GAAQ,OAAOtB,EAAIkD,YAAYO,IAAS,SAASnC,GAAQA,EAAOiJ,sBAAuB,CAACvK,EAAIQ,GAAGR,EAAIS,GAAGgD,EAAOzF,SAAUqM,EAAc,EAAIrK,EAAImB,KAAKuC,QAAQrK,OAAQ+G,EAAG,QAAQ,CAACf,IAAIgL,GAAa,CAACrK,EAAIQ,GAAG,OAAOR,EAAIyB,UAAYzB,EAAImB,KAAK0S,OAAW7T,EAAI0X,aAActX,EAAG,IAAI,CAACE,YAAY,CAAC,MAAQ,QAAQU,GAAG,CAAC,MAAQ,CAAC,SAASM,GAAQ,OAAOtB,EAAIkD,YAAYlD,EAAImB,KAAK0S,QAAQ,SAASvS,GAAQA,EAAOiJ,sBAAuB,CAACvK,EAAIQ,GAAG,MAAMR,EAAIS,GAAGT,EAAImB,KAAK0S,MAAM7V,SAASgC,EAAIyB,MAAOzB,EAAI0X,cAAgB1X,EAAImB,KAAKwW,aAAcvX,EAAG,QAAQ,CAACE,YAAY,CAAC,MAAQ,SAAS,CAACN,EAAIQ,GAAG,UAAUR,EAAIS,GAAGT,EAAImB,KAAKyW,aAAa,UAAU5X,EAAIS,GAAGT,EAAImB,KAAKwW,iBAAiB3X,EAAIyB,MAAM,GAAGzB,EAAIyB,KAAMzB,EAAImB,KAAW,OAAEf,EAAG,uBAAuB,CAACA,EAAG,IAAI,CAACY,GAAG,CAAC,MAAQ,CAAC,SAASM,GAAQ,OAAOtB,EAAIkD,YAAYlD,EAAImB,KAAKsC,SAAS,SAASnC,GAAQA,EAAOiJ,sBAAuB,CAACvK,EAAIQ,GAAGR,EAAIS,GAAGT,EAAImB,KAAKsC,OAAOzF,WAAWgC,EAAIyB,KAAQzB,EAAImB,KAAK0W,MAAOzX,EAAG,uBAAuB,CAACJ,EAAIQ,GAAGR,EAAIS,GAAGT,EAAImB,KAAK0W,UAAU7X,EAAIyB,MAAM,GAAKzB,EAAI8D,cAA0H9D,EAAIyB,KAA/GrB,EAAG,qBAAqB,CAACA,EAAG,gBAAgB,CAACG,MAAM,CAAC,YAAcP,EAAImB,KAAK2W,aAAa,OAAS,OAAO,GAAa9X,EAAW,QAAEI,EAAG,qBAAqB,CAACA,EAAG,YAAY,CAACG,MAAM,CAAC,OAAS,IAAIK,YAAYZ,EAAIa,GAAG,CAAC,CAACxB,IAAI,YAAYyB,GAAG,SAASC,GACz4E,IAAIC,EAAKD,EAAIC,GACb,MAAO,CAACZ,EAAG,MAAMJ,EAAIiB,GAAG,CAACV,MAAM,CAAC,IAAM,EAAQ,QAAuB,OAAS,OAAOS,QAAS,MAAK,EAAM,aAAa,CAACZ,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIS,GAAGT,EAAIuD,eAAe,GAAGvD,EAAIyB,KAAOzB,EAAIgE,YAEydhE,EAAIyB,KAFhdrB,EAAG,qBAAqB,CAACA,EAAG,YAAY,CAACG,MAAM,CAAC,OAAS,IAAIK,YAAYZ,EAAIa,GAAG,CAAC,CAACxB,IAAI,YAAYyB,GAAG,SAASC,GAChT,IAAIC,EAAKD,EAAIC,GACb,MAAO,CAACZ,EAAG,QAAQJ,EAAIiB,GAAG,CAACV,MAAM,CAAC,KAAO,GAAG,OAAS,IAAIS,GAAG,CAAC,MAAQ,CAAC,SAASM,GAAQ,OAAOtB,EAAI2J,cAAc3J,EAAImB,OAAO,SAASG,GAAQA,EAAO8B,kBAAmB,SAAS9B,GAAQA,EAAOiJ,sBAAuBvJ,GAAI,CAAEhB,EAAImB,KAAKkI,WAAWhQ,OAAS,EAAG+G,EAAG,SAAS,CAACG,MAAM,CAAC,OAAS,OAAO,CAACP,EAAIQ,GAAG,cAAcR,EAAIyB,KAAoC,GAA9BzB,EAAImB,KAAKkI,WAAWhQ,OAAa+G,EAAG,SAAS,CAACG,MAAM,CAAC,OAAS,OAAO,CAACP,EAAIQ,GAAG,qBAAqBR,EAAIyB,MAAM,OAAO,MAAK,EAAM,YAAY,CAAEzB,EAAImB,KAAKkI,WAAWhQ,OAAS,EAAG+G,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIS,GAAGT,EAAIW,GAAG,sBAAsBX,EAAIyB,KAAoC,GAA9BzB,EAAImB,KAAKkI,WAAWhQ,OAAa+G,EAAG,OAAO,CAACJ,EAAIQ,GAAGR,EAAIS,GAAGT,EAAIW,GAAG,mBAAmBX,EAAIyB,QAAQ,IAAczB,EAAI+X,cAAkB/X,EAAImB,KAAKyL,SAAUxM,EAAG,qBAAqB,CAACJ,EAAIQ,GAAGR,EAAIS,GAAGT,EAAImB,KAAKyL,SAASI,WAAWC,qBAAqBjN,EAAIyB,KAAOzB,EAAIgY,SAAuPhY,EAAIyB,KAAjPrB,EAAG,SAAS,CAACE,YAAY,CAAC,eAAe,QAAQ,eAAe,QAAQC,MAAM,CAAC,MAAQ,kBAAkBS,GAAG,CAAC,MAAQ,CAAC,SAASM,GAAQ,OAAOtB,EAAImD,UAAUnD,EAAImB,OAAO,SAASG,GAAQA,EAAOiJ,sBAAuB,CAACvK,EAAIQ,GAAG,gBAAyB,GAAGJ,EAAG,cAAc,IAC3jCsC,EAAkB,G,gFCsHtB,MAEA,8BACEpD,KAAM,SAAR,qBACI,GAAqB,oBAAVP,EAAX,CAIA,IAAJ,OACA,cACqB,UAAX9D,EAAEkB,MAAiC,IAAblB,EAAE+H,QAGT,OAAfW,IACFA,EAAazF,YAAW,WAAhC,mBAGA,aACyB,OAAfyF,IACFhG,aAAagG,GACbA,EAAa,OAGjB,CAAJ,iFACI,CAAJ,yGAnBM,EAAN,uDAuBA,qBACEC,WAAY,CACVqU,cAAJ,QAEE/V,MAAO,CACLf,KAAM7H,OACNqP,MAAO9E,OACPqU,WAAYrU,OACZ2T,WAAYzT,QACZ2T,aAAc3T,QACdD,cAAeC,QACfiU,SAAUjU,QACVC,YAAaD,QACbgU,aAAchU,QACdd,eAAgB,MAElBpK,KAhBF,WAiBI,MAAO,CACLoL,aAAa,EACbC,WAAW,IAGfC,SAAU,CACRZ,QADJ,WACA,uBACA,wBADA,IACA,0CACA,eACA,iBACA,UACA,cACA,qBACA,cACA,qBACA,cACA,qBAEA,mBAZA,8BAgBM,MAAO,KAGXa,QA1CF,aA2CEC,cA3CF,WA4CIpE,KAAKiE,WAAY,GAEnBI,QA9CF,aA+CEC,QAAS,CACPrB,YADJ,WACA,kEAEA,KACM,GAA6B,IAAzBsB,EAAUjC,WACZkC,EAAM,YAAcD,EAAUrC,aACtC,oBACQsC,EAAM,WAAaD,EAAUrC,YACrC,qBAKQ,YADAlC,KAAKoD,QAAQqB,MAAM,eAAgBF,GAHnCC,EAAM,cAAgBD,EAAUrC,QAMlClC,KAAK0E,QAAQhL,KAAK,CAAxB,sCAEIwJ,UAjBJ,WAmBUlD,KAAKiE,WACTjE,KAAKoD,QAAQqB,MAAM,kBAAmBzE,KAAKkB,OAE7C,cAtBJ,SAsBA,kKAEA,eAFA,SAGA,2BAHA,OAIA,eAJA,iDC5NsV,I,iICOlVyD,EAAY,eACd,EACA7E,EACA2C,GACA,EACA,KACA,KACA,MAIa,OAAAkC,EAAiB,QAchC,IAAkBA,EAAW,CAACoB,OAAA,KAAKhB,WAAA,KAASoB,QAAA,KAAMG,YAAA,KAAUmB,kBAAA,KAAgBuC,kBAAA,KAAgBtC,iBAAArB,EAAA,KAAiBiG,kBAAAjG,EAAA,KAAkBsB,eAAAtB,EAAA,KAAepB,WAAA,Q,kCChC9I,IAAInF,EAAS,WAAa,IAAIC,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAMJ,EAAIkB,GAAIlB,EAAmB,iBAAE,SAASmY,GAAM,OAAO/X,EAAG,MAAM,CAACf,IAAI8Y,EAAKvN,SAAStK,YAAY,CAAC,eAAe,MAAM,aAAa,OAAOC,MAAM,CAAC,OAASP,EAAIoY,OAAO,IAAM,UAAQ,KAAeD,EAAKvN,SAAW,cAAa,IAC/TlI,EAAkB,G,sDCatB,iBACER,MAAO,CACLmW,YAAaC,MACbF,OAAQvU,QAEVhL,KALF,WAMI,MAAO,CACL0K,SAAS,IAGbY,SAAU,CACRoU,gBAAiB,WACf,IAAIC,EAAS,GACTvR,EAAO,GACX,OAAKhH,KAAKoY,aACVpY,KAAKoY,YAAYpH,SAAQ,SAAUkH,GACjC,IAAI9Y,EAAM8Y,EAAKvN,UACY,IAAvB3D,EAAKpE,QAAQxD,KACf4H,EAAKtN,KAAK0F,GACVmZ,EAAO7e,KAAKwe,OAGTK,GARuB,KAWlClU,QAzBF,aA0BEC,QAAS,KCxC4U,I,YCOnVK,EAAY,eACd,EACA7E,EACA2C,GACA,EACA,KACA,KACA,MAIa,OAAAkC,E,8BClBf7J,EAAOD,QAAU,IAA0B,2B,mBCA3CC,EAAOD,QAAU,8vG,qBCAjBC,EAAOD,QAAU,IAA0B,wB,wxHCA3CC,EAAOD,QAAU,8hI,qBCAjBC,EAAOD,QAAU,IAA0B,0B,mBCA3CC,EAAOD,QAAU","file":"js/app.d45df414.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded CSS chunks\n \tvar installedCssChunks = {\n \t\t\"app\": 0\n \t}\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"js/\" + ({\"config\":\"config\",\"itemdetails~playerqueue~search\":\"itemdetails~playerqueue~search\",\"itemdetails\":\"itemdetails\",\"playerqueue\":\"playerqueue\",\"search\":\"search\"}[chunkId]||chunkId) + \".\" + {\"config\":\"165ed655\",\"itemdetails~playerqueue~search\":\"3c623cdf\",\"itemdetails\":\"79b5fa05\",\"playerqueue\":\"84a8618a\",\"search\":\"31a9bea8\"}[chunkId] + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// mini-css-extract-plugin CSS loading\n \t\tvar cssChunks = {\"config\":1,\"itemdetails~playerqueue~search\":1,\"itemdetails\":1};\n \t\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n \t\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n \t\t\tpromises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {\n \t\t\t\tvar href = \"css/\" + ({\"config\":\"config\",\"itemdetails~playerqueue~search\":\"itemdetails~playerqueue~search\",\"itemdetails\":\"itemdetails\",\"playerqueue\":\"playerqueue\",\"search\":\"search\"}[chunkId]||chunkId) + \".\" + {\"config\":\"2956469c\",\"itemdetails~playerqueue~search\":\"133d2876\",\"itemdetails\":\"28909c9e\",\"playerqueue\":\"31d6cfe0\",\"search\":\"31d6cfe0\"}[chunkId] + \".css\";\n \t\t\t\tvar fullhref = __webpack_require__.p + href;\n \t\t\t\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n \t\t\t\tfor(var i = 0; i < existingLinkTags.length; i++) {\n \t\t\t\t\tvar tag = existingLinkTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n \t\t\t\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return resolve();\n \t\t\t\t}\n \t\t\t\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n \t\t\t\tfor(var i = 0; i < existingStyleTags.length; i++) {\n \t\t\t\t\tvar tag = existingStyleTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\");\n \t\t\t\t\tif(dataHref === href || dataHref === fullhref) return resolve();\n \t\t\t\t}\n \t\t\t\tvar linkTag = document.createElement(\"link\");\n \t\t\t\tlinkTag.rel = \"stylesheet\";\n \t\t\t\tlinkTag.type = \"text/css\";\n \t\t\t\tlinkTag.onload = resolve;\n \t\t\t\tlinkTag.onerror = function(event) {\n \t\t\t\t\tvar request = event && event.target && event.target.src || fullhref;\n \t\t\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + request + \")\");\n \t\t\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n \t\t\t\t\terr.request = request;\n \t\t\t\t\tdelete installedCssChunks[chunkId]\n \t\t\t\t\tlinkTag.parentNode.removeChild(linkTag)\n \t\t\t\t\treject(err);\n \t\t\t\t};\n \t\t\t\tlinkTag.href = fullhref;\n\n \t\t\t\tvar head = document.getElementsByTagName(\"head\")[0];\n \t\t\t\thead.appendChild(linkTag);\n \t\t\t}).then(function() {\n \t\t\t\tinstalledCssChunks[chunkId] = 0;\n \t\t\t}));\n \t\t}\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import mod from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"","module.exports = __webpack_public_path__ + \"img/qobuz.c7eb9a76.png\";","module.exports = __webpack_public_path__ + \"img/spotify.1f3fb1af.png\";","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('v-app-bar',{staticStyle:{\"margin-bottom\":\"-8px\"},attrs:{\"flat\":\"\",\"light\":\"\",\"dense\":\"\",\"color\":\"transparent\"}},[_c('v-label',{attrs:{\"light\":\"\"}},[_vm._v(_vm._s(_vm.items.length + \" \" + _vm.$t(\"items\")))]),_c('v-spacer'),_c('v-menu',{attrs:{\"left\":\"\",\"close-on-content-click\":false},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-btn',_vm._g({attrs:{\"icon\":\"\"}},on),[_c('v-icon',[_vm._v(\"sort\")])],1)]}}])},[_c('v-list',_vm._l((_vm.sortKeys),function(item){return _c('v-list-item',{key:item.value,domProps:{\"textContent\":_vm._s(item.text)},on:{\"click\":function($event){_vm.sortBy = item.value}}})}),1)],1),_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":function($event){_vm.sortDesc = !_vm.sortDesc}}},[(!_vm.sortDesc)?_c('v-icon',[_vm._v(\"arrow_upward\")]):_vm._e(),(_vm.sortDesc)?_c('v-icon',[_vm._v(\"arrow_downward\")]):_vm._e()],1),_c('v-menu',{attrs:{\"left\":\"\",\"close-on-content-click\":false},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-btn',_vm._g({attrs:{\"icon\":\"\"}},on),[_c('v-icon',[_vm._v(\"search\")])],1)]}}])},[_c('v-card',[_c('v-text-field',{attrs:{\"clearable\":\"\",\"prepend-inner-icon\":\"search\",\"label\":\"Search\",\"hide-details\":\"\",\"solo\":\"\",\"dense\":\"\"},model:{value:(_vm.search),callback:function ($$v) {_vm.search=$$v},expression:\"search\"}})],1)],1),_c('v-btn',{staticStyle:{\"margin-right\":\"-15px\"},attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.toggleViewMode()}}},[(_vm.viewMode == 'panel')?_c('v-icon',[_vm._v(\"view_list\")]):_vm._e(),(_vm.viewMode == 'list')?_c('v-icon',[_vm._v(\"grid_on\")]):_vm._e()],1)],1),_c('v-data-iterator',{attrs:{\"items\":_vm.items,\"search\":_vm.search,\"sort-by\":_vm.sortBy,\"sort-desc\":_vm.sortDesc,\"custom-filter\":_vm.filteredItems,\"hide-default-footer\":\"\",\"disable-pagination\":\"\",\"loading\":\"\"},scopedSlots:_vm._u([{key:\"default\",fn:function(props){return [(_vm.viewMode == 'panel')?_c('v-container',{attrs:{\"fluid\":\"\"}},[_c('v-row',{attrs:{\"dense\":\"\",\"align-content\":\"stretch\",\"align\":\"stretch\"}},_vm._l((props.items),function(item){return _c('v-col',{key:item.item_id,attrs:{\"align-self\":\"stretch\"}},[_c('PanelviewItem',{attrs:{\"item\":item,\"thumbWidth\":_vm.thumbWidth,\"thumbHeight\":_vm.thumbHeight}})],1)}),1)],1):_vm._e(),(_vm.viewMode == 'list')?_c('v-list',{attrs:{\"two-line\":\"\"}},[_c('RecycleScroller',{staticClass:\"scroller\",attrs:{\"items\":props.items,\"item-size\":72,\"key-field\":\"item_id\",\"page-mode\":\"\"},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('ListviewItem',{attrs:{\"item\":item,\"hideavatar\":item.media_type == 3 ? _vm.$store.isMobile : false,\"hidetracknum\":true,\"hideproviders\":item.media_type < 4 ? _vm.$store.isMobile : false,\"hidelibrary\":true,\"hidemenu\":item.media_type == 3 ? _vm.$store.isMobile : false,\"hideduration\":item.media_type == 5}})]}}],null,true)})],1):_vm._e()]}}])})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',{directives:[{name:\"longpress\",rawName:\"v-longpress\",value:(_vm.menuClick),expression:\"menuClick\"}],attrs:{\"light\":\"\",\"min-height\":_vm.thumbHeight,\"min-width\":_vm.thumbWidth,\"max-width\":_vm.thumbWidth*1.6,\"hover\":\"\",\"outlined\":\"\"},on:{\"click\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"left\",37,$event.key,[\"Left\",\"ArrowLeft\"])){ return null; }if('button' in $event && $event.button !== 0){ return null; }_vm.onclickHandler ? _vm.onclickHandler(_vm.item) : _vm.itemClicked(_vm.item)},\"contextmenu\":[_vm.menuClick,function($event){$event.preventDefault();}]}},[_c('v-img',{attrs:{\"src\":_vm.$server.getImageUrl(_vm.item, 'image', _vm.thumbWidth),\"width\":\"100%\",\"aspect-ratio\":\"1\"}}),(_vm.isHiRes)?_c('div',{staticStyle:{\"position\":\"absolute\",\"margin-left\":\"5px\",\"margin-top\":\"-13px\",\"height\":\"30px\",\"background-color\":\"white\",\"border-radius\":\"3px\"}},[_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('img',_vm._g({attrs:{\"src\":require('../assets/hires.png'),\"height\":\"25\"}},on))]}}],null,false,1400808392)},[_c('span',[_vm._v(_vm._s(_vm.isHiRes))])])],1):_vm._e(),_c('v-divider'),_c('v-card-title',{class:_vm.$store.isMobile ? 'body-2' : 'title',staticStyle:{\"padding\":\"8px\",\"color\":\"primary\",\"margin-top\":\"8px\"},domProps:{\"textContent\":_vm._s(_vm.item.name)}}),(_vm.item.artist)?_c('v-card-subtitle',{class:_vm.$store.isMobile ? 'caption' : 'body-1',staticStyle:{\"padding\":\"8px\"},domProps:{\"textContent\":_vm._s(_vm.item.artist.name)}}):_vm._e(),(_vm.item.artists)?_c('v-card-subtitle',{class:_vm.$store.isMobile ? 'caption' : 'body-1',staticStyle:{\"padding\":\"8px\"},domProps:{\"textContent\":_vm._s(_vm.item.artists[0].name)}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <v-card\n light\n :min-height=\"thumbHeight\"\n :min-width=\"thumbWidth\"\n :max-width=\"thumbWidth*1.6\"\n hover\n outlined\n @click.left=\"onclickHandler ? onclickHandler(item) : itemClicked(item)\"\n @contextmenu=\"menuClick\"\n @contextmenu.prevent\n v-longpress=\"menuClick\"\n >\n <v-img\n :src=\"$server.getImageUrl(item, 'image', thumbWidth)\"\n width=\"100%\"\n aspect-ratio=\"1\"\n >\n </v-img>\n <div v-if=\"isHiRes\" style=\"position:absolute;margin-left:5px;margin-top:-13px;height:30px;background-color: white;border-radius: 3px;\">\n <v-tooltip bottom>\n <template v-slot:activator=\"{ on }\">\n <img :src=\"require('../assets/hires.png')\" height=\"25\" v-on=\"on\" />\n </template>\n <span>{{ isHiRes }}</span>\n </v-tooltip>\n </div>\n <v-divider />\n <v-card-title\n :class=\"$store.isMobile ? 'body-2' : 'title'\"\n v-text=\"item.name\"\n style=\"padding: 8px;color: primary;margin-top:8px\"\n />\n <v-card-subtitle\n :class=\"$store.isMobile ? 'caption' : 'body-1'\"\n v-text=\"item.artist.name\"\n v-if=\"item.artist\"\n style=\"padding: 8px\"\n />\n <v-card-subtitle\n :class=\"$store.isMobile ? 'caption' : 'body-1'\"\n v-text=\"item.artists[0].name\"\n v-if=\"item.artists\"\n style=\"padding: 8px\"\n />\n </v-card>\n</template>\n\n<script>\nimport Vue from 'vue'\n\nconst PRESS_TIMEOUT = 600\n\nVue.directive('longpress', {\n bind: function (el, { value }, vNode) {\n if (typeof value !== 'function') {\n Vue.$log.warn(`Expect a function, got ${value}`)\n return\n }\n let pressTimer = null\n const start = e => {\n if (e.type === 'click' && e.button !== 0) {\n return\n }\n if (pressTimer === null) {\n pressTimer = setTimeout(() => value(e), PRESS_TIMEOUT)\n }\n }\n const cancel = () => {\n if (pressTimer !== null) {\n clearTimeout(pressTimer)\n pressTimer = null\n }\n }\n ;['mousedown', 'touchstart'].forEach(e => el.addEventListener(e, start))\n ;['click', 'mouseout', 'touchend', 'touchcancel'].forEach(e => el.addEventListener(e, cancel))\n }\n})\n\nexport default Vue.extend({\n components: {\n },\n props: {\n item: Object,\n thumbHeight: Number,\n thumbWidth: Number,\n hideproviders: Boolean,\n hidelibrary: Boolean,\n onclickHandler: null\n },\n data () {\n return {\n touchMoving: false,\n cancelled: false\n }\n },\n computed: {\n isHiRes () {\n for (var prov of this.item.provider_ids) {\n if (prov.quality > 6) {\n if (prov.details) {\n return prov.details\n } else if (prov.quality === 7) {\n return '44.1/48khz 24 bits'\n } else if (prov.quality === 8) {\n return '88.2/96khz 24 bits'\n } else if (prov.quality === 9) {\n return '176/192khz 24 bits'\n } else {\n return '+192kHz 24 bits'\n }\n }\n }\n return ''\n }\n },\n created () { },\n beforeDestroy () {\n this.cancelled = true\n },\n mounted () { },\n methods: {\n itemClicked (mediaItem = null) {\n // mediaItem in the list is clicked\n let url = ''\n if (mediaItem.media_type === 1) {\n url = '/artists/' + mediaItem.item_id\n } else if (mediaItem.media_type === 2) {\n url = '/albums/' + mediaItem.item_id\n } else if (mediaItem.media_type === 4) {\n url = '/playlists/' + mediaItem.item_id\n } else {\n // assume track (or radio) item\n this.$server.$emit('showPlayMenu', mediaItem)\n return\n }\n this.$router.push({ path: url, query: { provider: mediaItem.provider } })\n },\n menuClick () {\n // contextmenu button clicked\n if (this.cancelled) return\n this.$server.$emit('showContextMenu', this.item)\n },\n async toggleLibrary (mediaItem) {\n // library button clicked on item\n this.cancelled = true\n await this.$server.toggleLibrary(mediaItem)\n this.cancelled = false\n }\n }\n})\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PanelviewItem.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PanelviewItem.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PanelviewItem.vue?vue&type=template&id=e92cc4a4&\"\nimport script from \"./PanelviewItem.vue?vue&type=script&lang=js&\"\nexport * from \"./PanelviewItem.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardSubtitle } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VCard,VCardSubtitle,VCardTitle,VDivider,VImg,VTooltip})\n","<template>\n <section>\n <v-app-bar\n flat\n light\n dense\n color=\"transparent\"\n style=\"margin-bottom:-8px;\"\n >\n <v-label light>{{ items.length + \" \" + $t(\"items\") }}</v-label>\n <v-spacer></v-spacer>\n <v-menu left :close-on-content-click=\"false\">\n <template v-slot:activator=\"{ on }\">\n <v-btn icon v-on=\"on\">\n <v-icon>sort</v-icon>\n </v-btn>\n </template>\n <v-list>\n <v-list-item\n v-for=\"item of sortKeys\"\n :key=\"item.value\"\n v-text=\"item.text\"\n @click=\"sortBy = item.value\"\n >\n </v-list-item>\n </v-list>\n </v-menu>\n <v-btn icon @click=\"sortDesc = !sortDesc\">\n <v-icon v-if=\"!sortDesc\">arrow_upward</v-icon>\n <v-icon v-if=\"sortDesc\">arrow_downward</v-icon>\n </v-btn>\n <v-menu left :close-on-content-click=\"false\">\n <template v-slot:activator=\"{ on }\">\n <v-btn icon v-on=\"on\">\n <v-icon>search</v-icon>\n </v-btn>\n </template>\n <v-card>\n <v-text-field\n v-model=\"search\"\n clearable\n prepend-inner-icon=\"search\"\n label=\"Search\"\n hide-details\n solo\n dense\n ></v-text-field>\n </v-card>\n </v-menu>\n <v-btn icon @click=\"toggleViewMode()\" style=\"margin-right:-15px;\">\n <v-icon v-if=\"viewMode == 'panel'\">view_list</v-icon>\n <v-icon v-if=\"viewMode == 'list'\">grid_on</v-icon>\n </v-btn>\n </v-app-bar>\n <v-data-iterator\n :items=\"items\"\n :search=\"search\"\n :sort-by=\"sortBy\"\n :sort-desc=\"sortDesc\"\n :custom-filter=\"filteredItems\"\n hide-default-footer\n disable-pagination\n loading\n >\n <template v-slot:default=\"props\">\n <v-container fluid v-if=\"viewMode == 'panel'\">\n <v-row dense align-content=\"stretch\" align=\"stretch\">\n <v-col\n v-for=\"item in props.items\"\n :key=\"item.item_id\"\n align-self=\"stretch\"\n >\n <PanelviewItem\n :item=\"item\"\n :thumbWidth=\"thumbWidth\"\n :thumbHeight=\"thumbHeight\"\n />\n </v-col>\n </v-row>\n </v-container>\n <v-list two-line v-if=\"viewMode == 'list'\">\n <RecycleScroller\n class=\"scroller\"\n :items=\"props.items\"\n :item-size=\"72\"\n key-field=\"item_id\"\n v-slot=\"{ item }\"\n page-mode\n >\n <ListviewItem\n v-bind:item=\"item\"\n :hideavatar=\"item.media_type == 3 ? $store.isMobile : false\"\n :hidetracknum=\"true\"\n :hideproviders=\"item.media_type < 4 ? $store.isMobile : false\"\n :hidelibrary=\"true\"\n :hidemenu=\"item.media_type == 3 ? $store.isMobile : false\"\n :hideduration=\"item.media_type == 5\"\n ></ListviewItem>\n </RecycleScroller>\n </v-list>\n </template>\n </v-data-iterator>\n </section>\n</template>\n\n<style scoped>\n.scroller {\n height: 100%;\n}\n</style>\n\n<script>\n// @ is an alias to /src\nimport ListviewItem from '@/components/ListviewItem.vue'\nimport PanelviewItem from '@/components/PanelviewItem.vue'\n\nexport default {\n components: {\n ListviewItem,\n PanelviewItem\n },\n props: [\n 'mediatype',\n 'endpoint'\n ],\n data () {\n return {\n items: [],\n viewMode: 'list',\n search: '',\n sortDesc: false,\n sortBy: 'name',\n sortKeys: [{ text: this.$t('sort_name'), value: 'name' }]\n }\n },\n created () {\n if (this.endpoint.includes('playlists/')) {\n // playlist tracks\n this.sortKeys.push({ text: this.$t('sort_position'), value: 'position' })\n this.sortKeys.push({ text: this.$t('sort_artist'), value: 'artists[0].name' })\n this.sortKeys.push({ text: this.$t('sort_album'), value: 'album.name' })\n this.sortBy = 'position'\n this.viewMode = 'list'\n } else if (this.endpoint.includes('tracks')) {\n // tracks listing\n this.sortKeys.push({ text: this.$t('sort_artist'), value: 'artists[0].name' })\n this.sortKeys.push({ text: this.$t('sort_album'), value: 'album.name' })\n this.viewMode = 'list'\n } else if (this.endpoint.includes('albums')) {\n // albums listing\n this.sortKeys.push({ text: this.$t('sort_artist'), value: 'artist.name' })\n this.sortKeys.push({ text: this.$t('sort_date'), value: 'year' })\n this.viewMode = 'panel'\n } else {\n this.viewMode = 'list'\n }\n // get stored viewMode for this endpoint\n const viewMode = localStorage.getItem('viewMode' + this.mediatype + this.endpoint)\n if (viewMode !== null) {\n this.viewMode = viewMode\n }\n this.getItems()\n this.$server.$on('refresh_listing', this.getItems)\n },\n computed: {\n thumbWidth () {\n return this.$store.isMobile ? 120 : 175\n },\n thumbHeight () {\n return this.thumbWidth * 1.5\n }\n },\n methods: {\n async getItems () {\n // retrieve the full list of items\n await this.$server.getAllItems(this.endpoint, this.items)\n },\n toggleViewMode () {\n if (this.viewMode === 'panel') this.viewMode = 'list'\n else this.viewMode = 'panel'\n localStorage.setItem('viewMode' + this.mediatype + this.endpoint, this.viewMode)\n },\n filteredItems (items, search) {\n if (!search) return items\n search = search.toLowerCase()\n const newLst = []\n for (const item of items) {\n if (item.name.toLowerCase().includes(search)) {\n newLst.push(item)\n } else if (item.artist && item.artist.name.toLowerCase().includes(search)) {\n newLst.push(item)\n } else if (item.album && item.album.name.toLowerCase().includes(search)) {\n newLst.push(item)\n } else if (item.artists && item.artists[0].name.toLowerCase().includes(search)) {\n newLst.push(item)\n }\n }\n return newLst\n }\n }\n}\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ItemsListing.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ItemsListing.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ItemsListing.vue?vue&type=template&id=764b0c8e&scoped=true&\"\nimport script from \"./ItemsListing.vue?vue&type=script&lang=js&\"\nexport * from \"./ItemsListing.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ItemsListing.vue?vue&type=style&index=0&id=764b0c8e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"764b0c8e\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VAppBar } from 'vuetify/lib/components/VAppBar';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VDataIterator } from 'vuetify/lib/components/VDataIterator';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VLabel } from 'vuetify/lib/components/VLabel';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VMenu } from 'vuetify/lib/components/VMenu';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\ninstallComponents(component, {VAppBar,VBtn,VCard,VCol,VContainer,VDataIterator,VIcon,VLabel,VList,VListItem,VMenu,VRow,VSpacer,VTextField})\n","module.exports = __webpack_public_path__ + \"img/demo_player.c079bd97.png\";","module.exports = __webpack_public_path__ + \"img/http_streamer.4c4e4880.png\";","module.exports = __webpack_public_path__ + \"img/homeassistant.29fe3282.png\";","module.exports = __webpack_public_path__ + \"img/webplayer.8e1a0da9.png\";","var map = {\n\t\"./en.json\": \"edd4\",\n\t\"./nl.json\": \"a625\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"49f8\";","module.exports = __webpack_public_path__ + \"img/default_artist.7305b29c.png\";","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerSelect.vue?vue&type=style&index=0&id=7c65a917&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerSelect.vue?vue&type=style&index=0&id=7c65a917&scoped=true&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-app',[_c('TopBar'),_c('NavigationMenu'),_c('v-main',[_c('router-view',{key:_vm.$route.path,attrs:{\"app\":\"\"}})],1),_c('PlayerOSD',{attrs:{\"showPlayerSelect\":_vm.showPlayerSelect}}),_c('ContextMenu'),_c('PlayerSelect'),_c('v-overlay',{attrs:{\"value\":_vm.$store.loading}},[_c('v-progress-circular',{attrs:{\"indeterminate\":\"\",\"size\":\"64\"}})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-navigation-drawer',{attrs:{\"dark\":\"\",\"app\":\"\",\"clipped\":\"\",\"temporary\":\"\"},model:{value:(_vm.$store.showNavigationMenu),callback:function ($$v) {_vm.$set(_vm.$store, \"showNavigationMenu\", $$v)},expression:\"$store.showNavigationMenu\"}},[_c('v-list',[_vm._l((_vm.items),function(item){return _c('v-list-item',{key:item.title,on:{\"click\":function($event){return _vm.$router.push(item.path)}}},[_c('v-list-item-action',[_c('v-icon',[_vm._v(_vm._s(item.icon))])],1),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(item.title))])],1)],1)}),_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":function($event){_vm.$store.showNavigationMenu=!_vm.$store.showNavigationMenu}}})],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <v-navigation-drawer dark app clipped temporary v-model=\"$store.showNavigationMenu\">\n <v-list>\n <v-list-item v-for=\"item in items\" :key=\"item.title\" @click=\"$router.push(item.path)\">\n <v-list-item-action>\n <v-icon>{{ item.icon }}</v-icon>\n </v-list-item-action>\n <v-list-item-content>\n <v-list-item-title>{{ item.title }}</v-list-item-title>\n </v-list-item-content>\n </v-list-item>\n <v-btn icon v-on:click=\"$store.showNavigationMenu=!$store.showNavigationMenu\" />\n </v-list>\n </v-navigation-drawer>\n</template>\n\n<script>\nimport Vue from 'vue'\n\nexport default Vue.extend({\n props: {},\n data () {\n return {\n items: [\n { title: this.$t('home'), icon: 'home', path: '/' },\n { title: this.$t('artists'), icon: 'person', path: '/artists' },\n { title: this.$t('albums'), icon: 'album', path: '/albums' },\n { title: this.$t('tracks'), icon: 'audiotrack', path: '/tracks' },\n { title: this.$t('playlists'), icon: 'playlist_play', path: '/playlists' },\n { title: this.$t('radios'), icon: 'radio', path: '/radios' },\n { title: this.$t('search'), icon: 'search', path: '/search' },\n { title: this.$t('settings'), icon: 'settings', path: '/config' }\n ]\n }\n },\n mounted () { },\n methods: {}\n})\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationMenu.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationMenu.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NavigationMenu.vue?vue&type=template&id=5fe9f182&\"\nimport script from \"./NavigationMenu.vue?vue&type=script&lang=js&\"\nexport * from \"./NavigationMenu.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAction } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VNavigationDrawer } from 'vuetify/lib/components/VNavigationDrawer';\ninstallComponents(component, {VBtn,VIcon,VList,VListItem,VListItemAction,VListItemContent,VListItemTitle,VNavigationDrawer})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-app-bar',{attrs:{\"app\":\"\",\"flat\":\"\",\"dense\":\"\",\"dark\":\"\",\"color\":_vm.color}},[_c('v-layout',[(!_vm.$store.topBarTransparent)?_c('div',{staticClass:\"body-1\",staticStyle:{\"position\":\"fixed\",\"width\":\"100%\",\"text-align\":\"center\",\"vertical-align\":\"center\",\"margin-top\":\"11px\"}},[_vm._v(_vm._s(_vm.$store.windowtitle))]):_vm._e(),_c('v-btn',{staticStyle:{\"margin-left\":\"-13px\"},attrs:{\"icon\":\"\"},on:{\"click\":function($event){_vm.$store.showNavigationMenu=!_vm.$store.showNavigationMenu}}},[_c('v-icon',[_vm._v(\"menu\")])],1),_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.$router.go(-1)}}},[_c('v-icon',[_vm._v(\"arrow_back\")])],1),_c('v-spacer'),(_vm.$store.topBarContextItem)?_c('v-btn',{staticStyle:{\"margin-right\":\"-23px\"},attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.$server.$emit('showContextMenu', _vm.$store.topBarContextItem)}}},[_c('v-icon',[_vm._v(\"more_vert\")])],1):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <v-app-bar app flat dense dark :color=\"color\">\n <v-layout>\n <div class=\"body-1\" v-if=\"!$store.topBarTransparent\" style=\"position:fixed;width:100%;text-align:center;vertical-align:center;margin-top:11px;\">{{ $store.windowtitle }}</div>\n <v-btn icon v-on:click=\"$store.showNavigationMenu=!$store.showNavigationMenu\" style=\"margin-left:-13px\">\n <v-icon>menu</v-icon>\n </v-btn>\n <v-btn @click=\"$router.go(-1)\" icon>\n <v-icon>arrow_back</v-icon>\n </v-btn>\n <v-spacer></v-spacer>\n <v-btn v-if=\"$store.topBarContextItem\" icon @click=\"$server.$emit('showContextMenu', $store.topBarContextItem)\" style=\"margin-right:-23px\">\n <v-icon>more_vert</v-icon>\n </v-btn>\n </v-layout>\n </v-app-bar>\n</template>\n\n<script>\nimport Vue from 'vue'\n\nexport default Vue.extend({\n props: { },\n data () {\n return {\n }\n },\n computed: {\n color () {\n if (this.$store.topBarTransparent) {\n return 'transparent'\n } else return 'black'\n }\n },\n mounted () { },\n methods: {}\n})\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TopBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TopBar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TopBar.vue?vue&type=template&id=0b1c8523&\"\nimport script from \"./TopBar.vue?vue&type=script&lang=js&\"\nexport * from \"./TopBar.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VAppBar } from 'vuetify/lib/components/VAppBar';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VLayout } from 'vuetify/lib/components/VGrid';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VAppBar,VBtn,VIcon,VLayout,VSpacer})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-dialog',{attrs:{\"max-width\":\"500px\"},on:{\"input\":function($event){return _vm.$emit('input', $event)}},model:{value:(_vm.visible),callback:function ($$v) {_vm.visible=$$v},expression:\"visible\"}},[_c('v-card',[(_vm.playlists.length === 0)?_c('v-list',[_c('v-subheader',{staticClass:\"title\"},[_vm._v(_vm._s(_vm.header))]),(_vm.subheader)?_c('v-subheader',[_vm._v(_vm._s(_vm.subheader))]):_vm._e(),_vm._l((_vm.menuItems),function(item){return _c('div',{key:item.label},[_c('v-list-item',{on:{\"click\":function($event){return _vm.itemCommand(item.action)}}},[_c('v-list-item-avatar',[_c('v-icon',[_vm._v(_vm._s(item.icon))])],1),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(_vm.$t(item.label)))])],1)],1),_c('v-divider')],1)})],2):_vm._e(),(_vm.playlists.length > 0)?_c('v-list',[_c('v-subheader',{staticClass:\"title\"},[_vm._v(_vm._s(_vm.header))]),_vm._l((_vm.playlists),function(item,index){return _c('listviewItem',{key:item.item_id,attrs:{\"item\":item,\"totalitems\":_vm.playlists.length,\"index\":index,\"hideavatar\":false,\"hidetracknum\":true,\"hideproviders\":false,\"hidelibrary\":true,\"hidemenu\":true,\"onclickHandler\":_vm.addToPlaylist}})})],2):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <v-dialog v-model=\"visible\" @input=\"$emit('input', $event)\" max-width=\"500px\">\r\n <v-card>\r\n <!-- normal contextmenu items -->\r\n <v-list v-if=\"playlists.length === 0\">\r\n <v-subheader class=\"title\">{{ header }}</v-subheader>\r\n <v-subheader v-if=\"subheader\">{{ subheader }}</v-subheader>\r\n <div v-for=\"item of menuItems\" :key=\"item.label\">\r\n <v-list-item @click=\"itemCommand(item.action)\">\r\n <v-list-item-avatar>\r\n <v-icon>{{ item.icon }}</v-icon>\r\n </v-list-item-avatar>\r\n <v-list-item-content>\r\n <v-list-item-title>{{ $t(item.label) }}</v-list-item-title>\r\n </v-list-item-content>\r\n </v-list-item>\r\n <v-divider></v-divider>\r\n </div>\r\n </v-list>\r\n <!-- playlists selection -->\r\n <v-list v-if=\"playlists.length > 0\">\r\n <v-subheader class=\"title\">{{ header }}</v-subheader>\r\n <listviewItem\r\n v-for=\"(item, index) in playlists\"\r\n :key=\"item.item_id\"\r\n v-bind:item=\"item\"\r\n v-bind:totalitems=\"playlists.length\"\r\n v-bind:index=\"index\"\r\n :hideavatar=\"false\"\r\n :hidetracknum=\"true\"\r\n :hideproviders=\"false\"\r\n :hidelibrary=\"true\"\r\n :hidemenu=\"true\"\r\n :onclickHandler=\"addToPlaylist\"\r\n ></listviewItem>\r\n </v-list>\r\n </v-card>\r\n </v-dialog>\r\n</template>\r\n\r\n<script>\r\nimport Vue from 'vue'\r\nimport ListviewItem from '@/components/ListviewItem.vue'\r\n\r\nexport default Vue.extend({\r\n components:\r\n {\r\n ListviewItem\r\n },\r\n props:\r\n {},\r\n watch:\r\n {},\r\n data () {\r\n return {\r\n visible: false,\r\n menuItems: [],\r\n header: '',\r\n subheader: '',\r\n curItem: null,\r\n curPlaylist: null,\r\n playerQueueItems: [],\r\n playlists: []\r\n }\r\n },\r\n mounted () { },\r\n created () {\r\n this.$server.$on('showContextMenu', this.showContextMenu)\r\n this.$server.$on('showPlayMenu', this.showPlayMenu)\r\n },\r\n computed: {\r\n },\r\n methods: {\r\n showContextMenu (mediaItem) {\r\n // show contextmenu items for the given mediaItem\r\n this.playlists = []\r\n if (!mediaItem) return\r\n this.curItem = mediaItem\r\n const curBrowseContext = this.$store.topBarContextItem\r\n const menuItems = []\r\n // show info\r\n if (mediaItem !== curBrowseContext) {\r\n menuItems.push({\r\n label: 'show_info',\r\n action: 'info',\r\n icon: 'info'\r\n })\r\n }\r\n // add to library\r\n if (mediaItem.in_library.length === 0) {\r\n menuItems.push({\r\n label: 'add_library',\r\n action: 'toggle_library',\r\n icon: 'favorite_border'\r\n })\r\n }\r\n // remove from library\r\n if (mediaItem.in_library.length > 0) {\r\n menuItems.push({\r\n label: 'remove_library',\r\n action: 'toggle_library',\r\n icon: 'favorite'\r\n })\r\n }\r\n // remove from playlist (playlist tracks only)\r\n if (curBrowseContext && curBrowseContext.media_type === 4) {\r\n this.curPlaylist = curBrowseContext\r\n if (mediaItem.media_type === 3 && curBrowseContext.is_editable) {\r\n menuItems.push({\r\n label: 'remove_playlist',\r\n action: 'remove_playlist',\r\n icon: 'remove_circle_outline'\r\n })\r\n }\r\n }\r\n // add to playlist action (tracks only)\r\n if (mediaItem.media_type === 3) {\r\n menuItems.push({\r\n label: 'add_playlist',\r\n action: 'add_playlist',\r\n icon: 'add_circle_outline'\r\n })\r\n }\r\n this.menuItems = menuItems\r\n this.header = mediaItem.name\r\n this.subheader = ''\r\n this.visible = true\r\n },\r\n showPlayMenu (mediaItem) {\r\n // show playmenu items for the given mediaItem\r\n this.playlists = []\r\n this.curItem = mediaItem\r\n if (!mediaItem) return\r\n const menuItems = [\r\n {\r\n label: 'play_now',\r\n action: 'play',\r\n icon: 'play_circle_outline'\r\n },\r\n {\r\n label: 'play_next',\r\n action: 'next',\r\n icon: 'queue_play_next'\r\n },\r\n {\r\n label: 'add_queue',\r\n action: 'add',\r\n icon: 'playlist_add'\r\n }\r\n ]\r\n this.menuItems = menuItems\r\n this.header = mediaItem.name\r\n this.subheader = ''\r\n this.visible = true\r\n },\r\n async showPlaylistsMenu () {\r\n // get all editable playlists\r\n const trackProviders = []\r\n for (const item of this.curItem.provider_ids) {\r\n trackProviders.push(item.provider)\r\n }\r\n const playlists = await this.$server.getData('library/playlists')\r\n const items = []\r\n for (var playlist of playlists.items) {\r\n if (\r\n playlist.is_editable &&\r\n (!this.curPlaylist || playlist.item_id !== this.curPlaylist.item_id)\r\n ) {\r\n for (const item of playlist.provider_ids) {\r\n if (trackProviders.includes(item.provider)) {\r\n items.push(playlist)\r\n break\r\n }\r\n }\r\n }\r\n }\r\n this.playlists = items\r\n },\r\n itemCommand (cmd) {\r\n if (cmd === 'info') {\r\n // show media info\r\n let endpoint = ''\r\n if (this.curItem.media_type === 1) endpoint = 'artists'\r\n if (this.curItem.media_type === 2) endpoint = 'albums'\r\n if (this.curItem.media_type === 3) endpoint = 'tracks'\r\n if (this.curItem.media_type === 4) endpoint = 'playlists'\r\n if (this.curItem.media_type === 5) endpoint = 'radios'\r\n this.$router.push({\r\n path: '/' + endpoint + '/' + this.curItem.item_id,\r\n query: { provider: this.curItem.provider }\r\n })\r\n this.visible = false\r\n } else if (cmd === 'playmenu') {\r\n // show play menu\r\n return this.showPlayMenu(this.curItem)\r\n } else if (cmd === 'add_playlist') {\r\n // add to playlist\r\n return this.showPlaylistsMenu()\r\n } else if (cmd === 'remove_playlist') {\r\n // remove track from playlist\r\n this.removeFromPlaylist(\r\n this.curItem,\r\n this.curPlaylist.item_id,\r\n 'playlist_remove'\r\n )\r\n this.visible = false\r\n } else if (cmd === 'toggle_library') {\r\n // add/remove to/from library\r\n this.$server.toggleLibrary(this.curItem)\r\n this.visible = false\r\n } else {\r\n // assume play command\r\n this.$server.playItem(this.curItem, cmd)\r\n this.visible = false\r\n }\r\n },\r\n addToPlaylist (playlistObj) {\r\n /// add track to playlist\r\n const endpoint = 'playlists/' + playlistObj.item_id + '/tracks'\r\n this.$server.putData(endpoint, this.curItem)\r\n .then(result => {\r\n this.visible = false\r\n })\r\n },\r\n removeFromPlaylist (track, playlistId) {\r\n /// remove track from playlist\r\n const endpoint = 'playlists/' + playlistId + '/tracks'\r\n this.$server.deleteData(endpoint, track)\r\n .then(result => {\r\n // reload listing\r\n this.$server.$emit('refresh_listing')\r\n })\r\n }\r\n }\r\n})\r\n</script>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContextMenu.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContextMenu.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ContextMenu.vue?vue&type=template&id=0f9be24a&\"\nimport script from \"./ContextMenu.vue?vue&type=script&lang=js&\"\nexport * from \"./ContextMenu.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAvatar } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VSubheader } from 'vuetify/lib/components/VSubheader';\ninstallComponents(component, {VCard,VDialog,VDivider,VIcon,VList,VListItem,VListItemAvatar,VListItemContent,VListItemTitle,VSubheader})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-footer',{staticStyle:{\"background-color\":\"black\"},attrs:{\"app\":\"\",\"fixed\":\"\",\"padless\":\"\",\"light\":\"\",\"elevation\":\"10\"}},[(!_vm.$store.isMobile)?_c('v-card',{staticStyle:{\"margin-top\":\"1px\"},attrs:{\"dense\":\"\",\"flat\":\"\",\"light\":\"\",\"subheader\":\"\",\"tile\":\"\",\"width\":\"100%\",\"color\":\"#E0E0E0\"}},[_c('v-list-item',{attrs:{\"two-line\":\"\"}},[(_vm.curQueueItem)?_c('v-list-item-avatar',{attrs:{\"tile\":\"\"}},[_c('img',{staticStyle:{\"border\":\"1px solid rgba(0,0,0,.54)\"},attrs:{\"src\":_vm.$server.getImageUrl(_vm.curQueueItem),\"lazy-src\":require('../assets/file.png')}})]):_c('v-list-item-avatar',[_c('v-icon',[_vm._v(\"speaker\")])],1),_c('v-list-item-content',[(_vm.curQueueItem)?_c('v-list-item-title',[_vm._v(\" \"+_vm._s(_vm.curQueueItem.name))]):(_vm.$server.activePlayer)?_c('v-list-item-title',[_vm._v(\" \"+_vm._s(_vm.$server.activePlayer.name))]):_vm._e(),(_vm.curQueueItem)?_c('v-list-item-subtitle',{staticStyle:{\"color\":\"primary\"}},_vm._l((_vm.curQueueItem.artists),function(artist,artistindex){return _c('span',{key:artistindex},[_c('a',{on:{\"click\":[function($event){return _vm.artistClick(artist)},function($event){$event.stopPropagation();}]}},[_vm._v(_vm._s(artist.name))]),(artistindex + 1 < _vm.curQueueItem.artists.length)?_c('label',{key:artistindex},[_vm._v(\" / \")]):_vm._e()])}),0):_vm._e()],1),(_vm.streamDetails)?_c('v-list-item-action',[_c('v-menu',{attrs:{\"close-on-content-click\":false,\"nudge-width\":250,\"offset-x\":\"\",\"top\":\"\"},nativeOn:{\"click\":function($event){$event.preventDefault();}},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-btn',_vm._g({attrs:{\"icon\":\"\"}},on),[(_vm.streamDetails.quality > 6)?_c('v-img',{attrs:{\"contain\":\"\",\"src\":require('../assets/hires.png'),\"height\":\"30\"}}):_vm._e(),(_vm.streamDetails.quality <= 6)?_c('v-img',{staticStyle:{\"filter\":\"invert(100%)\"},attrs:{\"contain\":\"\",\"src\":_vm.streamDetails.content_type ? require('../assets/' + _vm.streamDetails.content_type + '.png') : '',\"height\":\"30\"}}):_vm._e()],1)]}}],null,false,872579316)},[(_vm.streamDetails)?_c('v-list',[_c('v-subheader',{staticClass:\"title\"},[_vm._v(_vm._s(_vm.$t('stream_details')))]),_c('v-list-item',{attrs:{\"tile\":\"\",\"dense\":\"\"}},[_c('v-list-item-icon',[_c('v-img',{attrs:{\"max-width\":\"50\",\"contain\":\"\",\"src\":_vm.streamDetails.provider ? require('../assets/' + _vm.streamDetails.provider + '.png') : ''}})],1),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(_vm.streamDetails.provider))])],1)],1),_c('v-divider'),_c('v-list-item',{attrs:{\"tile\":\"\",\"dense\":\"\"}},[_c('v-list-item-icon',[_c('v-img',{staticStyle:{\"filter\":\"invert(100%)\"},attrs:{\"max-width\":\"50\",\"contain\":\"\",\"src\":_vm.streamDetails.content_type ? require('../assets/' + _vm.streamDetails.content_type + '.png') : ''}})],1),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(_vm.streamDetails.sample_rate/1000)+\" kHz / \"+_vm._s(_vm.streamDetails.bit_depth)+\" bits \")])],1)],1),_c('v-divider'),(_vm.playerQueueDetails.crossfade_enabled)?_c('div',[_c('v-list-item',{attrs:{\"tile\":\"\",\"dense\":\"\"}},[_c('v-list-item-icon',[_c('v-img',{attrs:{\"max-width\":\"50\",\"contain\":\"\",\"src\":require('../assets/crossfade.png')}})],1),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(_vm.$t('crossfade_enabled')))])],1)],1),_c('v-divider')],1):_vm._e(),(_vm.streamVolumeLevelAdjustment)?_c('div',[_c('v-list-item',{attrs:{\"tile\":\"\",\"dense\":\"\"}},[_c('v-list-item-icon',[_c('v-icon',{staticStyle:{\"margin-left\":\"13px\"},attrs:{\"color\":\"black\"}},[_vm._v(\"volume_up\")])],1),_c('v-list-item-content',[_c('v-list-item-title',{staticStyle:{\"margin-left\":\"12px\"}},[_vm._v(_vm._s(_vm.streamVolumeLevelAdjustment))])],1)],1),_c('v-divider')],1):_vm._e()],1):_vm._e()],1)],1):_vm._e()],1),_c('div',{staticClass:\"body-2\",staticStyle:{\"height\":\"30px\",\"width\":\"100%\",\"color\":\"rgba(0,0,0,.65)\",\"margin-top\":\"-12px\",\"background-color\":\"#E0E0E0\"},attrs:{\"align\":\"center\"}},[(_vm.curQueueItem)?_c('div',{staticStyle:{\"height\":\"12px\",\"margin-left\":\"22px\",\"margin-right\":\"20px\",\"margin-top\":\"2px\"}},[_c('span',{staticClass:\"left\"},[_vm._v(\" \"+_vm._s(_vm.playerCurTimeStr)+\" \")]),_c('span',{staticClass:\"right\"},[_vm._v(\" \"+_vm._s(_vm.playerTotalTimeStr)+\" \")])]):_vm._e()]),(_vm.curQueueItem)?_c('v-progress-linear',{style:('margin-top:-22px;margin-left:80px;width:' + _vm.progressBarWidth + 'px;'),attrs:{\"fixed\":\"\",\"light\":\"\",\"value\":_vm.progress}}):_vm._e()],1):_vm._e(),_c('v-list-item',{staticStyle:{\"height\":\"62px\",\"margin-bottom\":\"5px\",\"margin-top\":\"-4px\",\"background-color\":\"black\"},attrs:{\"dark\":\"\",\"dense\":\"\"}},[(_vm.$server.activePlayer)?_c('v-list-item-action',{staticStyle:{\"margin-top\":\"15px\"}},[_c('v-btn',{attrs:{\"small\":\"\",\"icon\":\"\"},on:{\"click\":function($event){return _vm.playerCommand('previous')}}},[_c('v-icon',[_vm._v(\"skip_previous\")])],1)],1):_vm._e(),(_vm.$server.activePlayer)?_c('v-list-item-action',{staticStyle:{\"margin-left\":\"-32px\",\"margin-top\":\"15px\"}},[_c('v-btn',{attrs:{\"icon\":\"\",\"x-large\":\"\"},on:{\"click\":function($event){return _vm.playerCommand('play_pause')}}},[_c('v-icon',{attrs:{\"size\":\"50\"}},[_vm._v(_vm._s(_vm.$server.activePlayer.state == \"playing\" ? \"pause\" : \"play_arrow\"))])],1)],1):_vm._e(),(_vm.$server.activePlayer)?_c('v-list-item-action',{staticStyle:{\"margin-top\":\"15px\"}},[_c('v-btn',{attrs:{\"icon\":\"\",\"small\":\"\"},on:{\"click\":function($event){return _vm.playerCommand('next')}}},[_c('v-icon',[_vm._v(\"skip_next\")])],1)],1):_vm._e(),_c('v-list-item-content'),(_vm.$server.activePlayer)?_c('v-list-item-action',{staticStyle:{\"padding\":\"28px\"}},[_c('v-btn',{attrs:{\"text\":\"\",\"icon\":\"\"},on:{\"click\":function($event){return _vm.$router.push('/playerqueue/')}}},[_c('v-flex',{staticClass:\"vertical-btn\",attrs:{\"xs12\":\"\"}},[_c('v-icon',[_vm._v(\"queue_music\")]),_c('span',{staticClass:\"caption\",staticStyle:{\"padding-top\":\"5px\"}},[_vm._v(_vm._s(_vm.$t(\"queue\")))])],1)],1)],1):_vm._e(),(_vm.$server.activePlayer && !_vm.$store.isMobile)?_c('v-list-item-action',{staticStyle:{\"padding\":\"20px\"}},[_c('v-menu',{attrs:{\"close-on-content-click\":false,\"nudge-width\":250,\"offset-x\":\"\",\"top\":\"\"},nativeOn:{\"click\":function($event){$event.preventDefault();}},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-btn',_vm._g({attrs:{\"icon\":\"\"}},on),[_c('v-flex',{staticClass:\"vertical-btn\",attrs:{\"xs12\":\"\"}},[_c('v-icon',[_vm._v(\"volume_up\")]),_c('span',{staticClass:\"caption\",staticStyle:{\"padding-top\":\"5px\"}},[_vm._v(_vm._s(Math.round(_vm.$server.activePlayer.volume_level)))])],1)],1)]}}],null,false,2163274026)},[_c('VolumeControl',{attrs:{\"players\":_vm.$server.players,\"player_id\":_vm.$server.activePlayer.player_id}})],1)],1):_vm._e(),_c('v-list-item-action',{staticStyle:{\"padding\":\"30px\",\"margin-right\":\"15px\"}},[_c('v-btn',{attrs:{\"text\":\"\",\"icon\":\"\"},on:{\"click\":function($event){return _vm.$server.$emit('showPlayersMenu')}}},[_c('v-flex',{staticClass:\"vertical-btn\",attrs:{\"xs12\":\"\"}},[_c('v-icon',[_vm._v(\"speaker\")]),(_vm.$server.activePlayer)?_c('span',{staticClass:\"caption\",staticStyle:{\"padding-top\":\"5px\"}},[_vm._v(_vm._s(_vm.truncateString(_vm.$server.activePlayer.name, 18)))]):_c('span',{staticClass:\"caption\"})],1)],1)],1)],1),(_vm.$store.isInStandaloneMode)?_c('v-card',{staticStyle:{\"height\":\"20px\"},attrs:{\"dense\":\"\",\"flat\":\"\",\"light\":\"\",\"subheader\":\"\",\"tile\":\"\",\"width\":\"100%\",\"color\":\"black\"}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',[_c('v-list',[_c('v-list-item',{staticStyle:{\"height\":\"50px\",\"padding-bottom\":\"5\"}},[_c('v-list-item-avatar',{staticStyle:{\"margin-left\":\"-10px\"},attrs:{\"tile\":\"\"}},[_c('v-icon',{attrs:{\"large\":\"\"}},[_vm._v(_vm._s(_vm.players[_vm.player_id].is_group ? \"speaker_group\" : \"speaker\"))])],1),_c('v-list-item-content',{staticStyle:{\"margin-left\":\"-15px\"}},[_c('v-list-item-title',[_vm._v(_vm._s(_vm.players[_vm.player_id].name))]),_c('v-list-item-subtitle',[_vm._v(_vm._s(_vm.$t(\"state.\" + _vm.players[_vm.player_id].state)))])],1)],1),_c('v-divider'),_vm._l((_vm.volumePlayerIds),function(child_id){return _c('div',{key:child_id},[_c('div',{staticClass:\"body-2\",style:(!_vm.players[child_id].powered\n ? 'color:rgba(0,0,0,.38);'\n : 'color:rgba(0,0,0,.54);')},[_c('v-btn',{staticStyle:{\"margin-left\":\"8px\"},style:(!_vm.players[child_id].powered\n ? 'color:rgba(0,0,0,.38);'\n : 'color:rgba(0,0,0,.54);'),attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.togglePlayerPower(child_id)}}},[_c('v-icon',[_vm._v(\"power_settings_new\")])],1),_c('span',{staticStyle:{\"margin-left\":\"10px\"}},[_vm._v(_vm._s(_vm.players[child_id].name))]),_c('div',{staticStyle:{\"margin-top\":\"-8px\",\"margin-left\":\"15px\",\"margin-right\":\"15px\",\"height\":\"35px\"}},[_c('v-slider',{attrs:{\"lazy\":\"\",\"disabled\":!_vm.players[child_id].powered,\"value\":Math.round(_vm.players[child_id].volume_level),\"prepend-icon\":\"volume_down\",\"append-icon\":\"volume_up\"},on:{\"end\":function($event){return _vm.setPlayerVolume(child_id, $event)},\"click:append\":function($event){return _vm.setPlayerVolume(child_id, 'up')},\"click:prepend\":function($event){return _vm.setPlayerVolume(child_id, 'down')}}})],1)],1),_c('v-divider')],1)})],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <v-card>\n <v-list>\n <v-list-item style=\"height:50px;padding-bottom:5;\">\n <v-list-item-avatar tile style=\"margin-left:-10px;\">\n <v-icon large>{{\n players[player_id].is_group ? \"speaker_group\" : \"speaker\"\n }}</v-icon>\n </v-list-item-avatar>\n <v-list-item-content style=\"margin-left:-15px;\">\n <v-list-item-title>{{ players[player_id].name }}</v-list-item-title>\n <v-list-item-subtitle>{{\n $t(\"state.\" + players[player_id].state)\n }}</v-list-item-subtitle>\n </v-list-item-content>\n </v-list-item>\n <v-divider></v-divider>\n <div v-for=\"child_id in volumePlayerIds\" :key=\"child_id\">\n <div\n class=\"body-2\"\n :style=\"\n !players[child_id].powered\n ? 'color:rgba(0,0,0,.38);'\n : 'color:rgba(0,0,0,.54);'\n \"\n >\n <v-btn\n icon\n @click=\"togglePlayerPower(child_id)\"\n style=\"margin-left:8px\"\n :style=\"\n !players[child_id].powered\n ? 'color:rgba(0,0,0,.38);'\n : 'color:rgba(0,0,0,.54);'\n \"\n >\n <v-icon>power_settings_new</v-icon>\n </v-btn>\n <span style=\"margin-left:10px\">{{ players[child_id].name }}</span>\n <div\n style=\"margin-top:-8px;margin-left:15px;margin-right:15px;height:35px;\"\n >\n <v-slider\n lazy\n :disabled=\"!players[child_id].powered\"\n :value=\"Math.round(players[child_id].volume_level)\"\n prepend-icon=\"volume_down\"\n append-icon=\"volume_up\"\n @end=\"setPlayerVolume(child_id, $event)\"\n @click:append=\"setPlayerVolume(child_id, 'up')\"\n @click:prepend=\"setPlayerVolume(child_id, 'down')\"\n ></v-slider>\n </div>\n </div>\n <v-divider></v-divider>\n </div>\n </v-list>\n </v-card>\n</template>\n\n<script>\nimport Vue from 'vue'\n\nexport default Vue.extend({\n props: ['value', 'players', 'player_id'],\n data () {\n return {}\n },\n computed: {\n volumePlayerIds () {\n var allIds = [this.player_id]\n allIds.push(...this.players[this.player_id].group_childs)\n return allIds\n }\n },\n mounted () { },\n methods: {\n setPlayerVolume: function (playerId, newVolume) {\n // if (newVolume === 'up') {\n // this.$server.playerCommand('volume_up', null, playerId)\n // } else if (newVolume === 'down') {\n // this.$server.playerCommand('volume_down', null, playerId)\n // } else {\n // this.$server.playerCommand('volume_set', newVolume, playerId)\n // this.players[playerId].volume_level = newVolume\n // }\n if (newVolume === 'up') {\n newVolume = this.$server.players[playerId].volume_level + 1\n } else if (newVolume === 'down') {\n newVolume = this.$server.players[playerId].volume_level - 1\n }\n this.$server.playerCommand('volume_set', newVolume, playerId)\n this.players[playerId].volume_level = newVolume\n },\n togglePlayerPower: function (playerId) {\n this.$server.playerCommand('power_toggle', null, playerId)\n }\n }\n})\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VolumeControl.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VolumeControl.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./VolumeControl.vue?vue&type=template&id=8277ef42&\"\nimport script from \"./VolumeControl.vue?vue&type=script&lang=js&\"\nexport * from \"./VolumeControl.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAvatar } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemSubtitle } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VSlider } from 'vuetify/lib/components/VSlider';\ninstallComponents(component, {VBtn,VCard,VDivider,VIcon,VList,VListItem,VListItemAvatar,VListItemContent,VListItemSubtitle,VListItemTitle,VSlider})\n","<template>\n <v-footer\n app\n fixed\n padless\n light\n elevation=\"10\"\n style=\"background-color: black;\"\n >\n <v-card\n dense\n flat\n light\n subheader\n tile\n width=\"100%\"\n color=\"#E0E0E0\"\n style=\"margin-top:1px;\"\n v-if=\"!$store.isMobile\"\n >\n <!-- now playing media -->\n <v-list-item two-line>\n <v-list-item-avatar tile v-if=\"curQueueItem\">\n <img\n :src=\"$server.getImageUrl(curQueueItem)\"\n :lazy-src=\"require('../assets/file.png')\"\n style=\"border: 1px solid rgba(0,0,0,.54);\"\n />\n </v-list-item-avatar>\n <v-list-item-avatar v-else>\n <v-icon>speaker</v-icon>\n </v-list-item-avatar>\n\n <v-list-item-content>\n <v-list-item-title v-if=\"curQueueItem\">\n {{ curQueueItem.name }}</v-list-item-title\n >\n <v-list-item-title v-else-if=\"$server.activePlayer\">\n {{ $server.activePlayer.name }}</v-list-item-title\n >\n <v-list-item-subtitle v-if=\"curQueueItem\" style=\"color: primary\">\n <span\n v-for=\"(artist, artistindex) in curQueueItem.artists\"\n :key=\"artistindex\"\n >\n <a v-on:click=\"artistClick(artist)\" @click.stop=\"\">{{\n artist.name\n }}</a>\n <label\n v-if=\"artistindex + 1 < curQueueItem.artists.length\"\n :key=\"artistindex\"\n >\n /\n </label>\n </span>\n </v-list-item-subtitle>\n </v-list-item-content>\n <!-- streaming quality details -->\n <v-list-item-action v-if=\"streamDetails\">\n <v-menu\n :close-on-content-click=\"false\"\n :nudge-width=\"250\"\n offset-x\n top\n @click.native.prevent\n >\n <template v-slot:activator=\"{ on }\">\n <v-btn icon v-on=\"on\">\n <v-img contain v-if=\"streamDetails.quality > 6\" :src=\"require('../assets/hires.png')\" height=\"30\" />\n <v-img contain v-if=\"streamDetails.quality <= 6\" :src=\"streamDetails.content_type ? require('../assets/' + streamDetails.content_type + '.png') : ''\" height=\"30\" style='filter: invert(100%);' />\n </v-btn>\n </template>\n <v-list v-if=\"streamDetails\">\n <v-subheader class=\"title\">{{ $t('stream_details') }}</v-subheader>\n <v-list-item tile dense>\n <v-list-item-icon>\n <v-img max-width=\"50\" contain :src=\"streamDetails.provider ? require('../assets/' + streamDetails.provider + '.png') : ''\" />\n </v-list-item-icon>\n <v-list-item-content>\n <v-list-item-title>{{ streamDetails.provider }}</v-list-item-title>\n </v-list-item-content>\n </v-list-item>\n <v-divider></v-divider>\n <v-list-item tile dense>\n <v-list-item-icon>\n <v-img max-width=\"50\" contain :src=\"streamDetails.content_type ? require('../assets/' + streamDetails.content_type + '.png') : ''\" style='filter: invert(100%);' />\n </v-list-item-icon>\n <v-list-item-content>\n <v-list-item-title>{{ streamDetails.sample_rate/1000 }} kHz / {{ streamDetails.bit_depth }} bits </v-list-item-title>\n </v-list-item-content>\n </v-list-item>\n <v-divider></v-divider>\n <div v-if=\"playerQueueDetails.crossfade_enabled\">\n <v-list-item tile dense>\n <v-list-item-icon>\n <v-img max-width=\"50\" contain :src=\"require('../assets/crossfade.png')\"/>\n </v-list-item-icon>\n <v-list-item-content>\n <v-list-item-title>{{ $t('crossfade_enabled') }}</v-list-item-title>\n </v-list-item-content>\n </v-list-item>\n <v-divider></v-divider>\n </div>\n <div v-if=\"streamVolumeLevelAdjustment\">\n <v-list-item tile dense>\n <v-list-item-icon>\n <v-icon color=\"black\" style=\"margin-left:13px\">volume_up</v-icon>\n </v-list-item-icon>\n <v-list-item-content>\n <v-list-item-title style=\"margin-left:12px\">{{ streamVolumeLevelAdjustment }}</v-list-item-title>\n </v-list-item-content>\n </v-list-item>\n <v-divider></v-divider>\n </div>\n </v-list>\n </v-menu>\n </v-list-item-action>\n </v-list-item>\n\n <!-- progress bar -->\n <div\n class=\"body-2\"\n style=\"height:30px;width:100%;color:rgba(0,0,0,.65);margin-top:-12px;background-color:#E0E0E0;\"\n align=\"center\"\n >\n <div\n style=\"height:12px;margin-left:22px;margin-right:20px;margin-top:2px;\"\n v-if=\"curQueueItem\"\n >\n <span class=\"left\">\n {{ playerCurTimeStr }}\n </span>\n <span class=\"right\">\n {{ playerTotalTimeStr }}\n </span>\n </div>\n </div>\n <v-progress-linear\n fixed\n light\n :value=\"progress\"\n v-if=\"curQueueItem\"\n :style=\"\n 'margin-top:-22px;margin-left:80px;width:' + progressBarWidth + 'px;'\n \"\n />\n </v-card>\n\n <!-- Control buttons -->\n <v-list-item\n dark\n dense\n style=\"height:62px;margin-bottom:5px;margin-top:-4px;background-color:black;\"\n >\n <v-list-item-action v-if=\"$server.activePlayer\" style=\"margin-top:15px\">\n <v-btn small icon @click=\"playerCommand('previous')\">\n <v-icon>skip_previous</v-icon>\n </v-btn>\n </v-list-item-action>\n <v-list-item-action\n v-if=\"$server.activePlayer\"\n style=\"margin-left:-32px;margin-top:15px\"\n >\n <v-btn icon x-large @click=\"playerCommand('play_pause')\">\n <v-icon size=\"50\">{{\n $server.activePlayer.state == \"playing\" ? \"pause\" : \"play_arrow\"\n }}</v-icon>\n </v-btn>\n </v-list-item-action>\n <v-list-item-action v-if=\"$server.activePlayer\" style=\"margin-top:15px\">\n <v-btn icon small @click=\"playerCommand('next')\">\n <v-icon>skip_next</v-icon>\n </v-btn>\n </v-list-item-action>\n <!-- player controls -->\n <v-list-item-content> </v-list-item-content>\n\n <!-- active player queue button -->\n <v-list-item-action style=\"padding:28px;\" v-if=\"$server.activePlayer\">\n <v-btn\n text\n icon\n @click=\"$router.push('/playerqueue/')\"\n >\n <v-flex xs12 class=\"vertical-btn\">\n <v-icon>queue_music</v-icon>\n <span class=\"caption\" style=\"padding-top: 5px\">{{ $t(\"queue\") }}</span>\n </v-flex>\n </v-btn>\n </v-list-item-action>\n\n <!-- active player volume -->\n <v-list-item-action style=\"padding:20px;\" v-if=\"$server.activePlayer && !$store.isMobile\">\n <v-menu\n :close-on-content-click=\"false\"\n :nudge-width=\"250\"\n offset-x\n top\n @click.native.prevent\n >\n <template v-slot:activator=\"{ on }\">\n <v-btn icon v-on=\"on\">\n <v-flex xs12 class=\"vertical-btn\">\n <v-icon>volume_up</v-icon>\n <span class=\"caption\" style=\"padding-top: 5px\">{{\n Math.round($server.activePlayer.volume_level)\n }}</span>\n </v-flex>\n </v-btn>\n </template>\n <VolumeControl\n v-bind:players=\"$server.players\"\n v-bind:player_id=\"$server.activePlayer.player_id\"\n />\n </v-menu>\n </v-list-item-action>\n\n <!-- active player btn -->\n <v-list-item-action style=\"padding:30px;margin-right:15px\">\n <v-btn text icon @click=\"$server.$emit('showPlayersMenu')\">\n <v-flex xs12 class=\"vertical-btn\">\n <v-icon>speaker</v-icon>\n <span class=\"caption\" v-if=\"$server.activePlayer\" style=\"padding-top: 5px\">{{\n truncateString($server.activePlayer.name, 18)\n }}</span>\n <span class=\"caption\" v-else> </span>\n </v-flex>\n </v-btn>\n </v-list-item-action>\n </v-list-item>\n <!-- add some additional whitespace in standalone mode only -->\n <v-card\n dense\n flat\n light\n subheader\n tile\n width=\"100%\"\n color=\"black\"\n style=\"height:20px\" v-if=\"$store.isInStandaloneMode\"/>\n </v-footer>\n</template>\n\n<style scoped>\n.vertical-btn {\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n.divider {\n height: 1px;\n width: 100%;\n background-color: #cccccc;\n}\n.right {\n float: right;\n}\n.left {\n float: left;\n}\n</style>\n\n<script>\nimport Vue from 'vue'\nimport VolumeControl from '@/components/VolumeControl.vue'\n\nexport default Vue.extend({\n components: {\n VolumeControl\n },\n props: [],\n data () {\n return {\n playerQueueDetails: {}\n }\n },\n watch: { },\n computed: {\n curQueueItem () {\n if (this.playerQueueDetails) {\n return this.playerQueueDetails.cur_item\n } else {\n return null\n }\n },\n progress () {\n if (!this.curQueueItem) return 0\n var totalSecs = this.curQueueItem.duration\n var curSecs = this.playerQueueDetails.cur_item_time\n var curPercent = curSecs / totalSecs * 100\n return curPercent\n },\n playerCurTimeStr () {\n if (!this.curQueueItem) return '0:00'\n var curSecs = this.playerQueueDetails.cur_item_time\n return curSecs.toString().formatDuration()\n },\n playerTotalTimeStr () {\n if (!this.curQueueItem) return '0:00'\n var totalSecs = this.curQueueItem.duration\n return totalSecs.toString().formatDuration()\n },\n progressBarWidth () {\n return window.innerWidth - 160\n },\n streamDetails () {\n if (!this.playerQueueDetails.cur_item || !this.playerQueueDetails.cur_item || !this.playerQueueDetails.cur_item.streamdetails.provider || !this.playerQueueDetails.cur_item.streamdetails.content_type) return {}\n return this.playerQueueDetails.cur_item.streamdetails\n },\n streamVolumeLevelAdjustment () {\n if (!this.streamDetails || !this.streamDetails.sox_options) return ''\n if (this.streamDetails.sox_options.includes('vol ')) {\n var re = /(.*vol\\s+)(.*)(\\s+dB.*)/\n var volLevel = this.streamDetails.sox_options.replace(re, '$2')\n return volLevel + ' dB'\n }\n return ''\n }\n },\n created () {\n this.$server.$on('queue updated', this.queueUpdatedMsg)\n this.$server.$on('new player selected', this.getQueueDetails)\n },\n methods: {\n playerCommand (cmd, cmd_opt = null) {\n this.$server.playerCommand(cmd, cmd_opt, this.$server.activePlayerId)\n },\n artistClick (item) {\n // artist entry clicked within the listviewItem\n var url = '/artists/' + item.item_id\n this.$router.push({ path: url, query: { provider: item.provider } })\n },\n queueUpdatedMsg (data) {\n const queueId = this.$server.players[this.$server.activePlayerId].active_queue\n if (data.player_id === queueId) {\n for (const [key, value] of Object.entries(data)) {\n Vue.set(this.playerQueueDetails, key, value)\n }\n }\n },\n async getQueueDetails () {\n if (this.$server.activePlayer) {\n const queueId = this.$server.players[this.$server.activePlayerId].active_queue\n const endpoint = 'players/' + queueId + '/queue'\n this.playerQueueDetails = await this.$server.getData(endpoint)\n }\n },\n truncateString (str, num) {\n // If the length of str is less than or equal to num\n // just return str--don't truncate it.\n if (str.length <= num) {\n return str\n }\n // Return str truncated with '...' concatenated to the end of str.\n return str.slice(0, num) + '...'\n }\n }\n})\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerOSD.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerOSD.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PlayerOSD.vue?vue&type=template&id=21e0f2f0&scoped=true&\"\nimport script from \"./PlayerOSD.vue?vue&type=script&lang=js&\"\nexport * from \"./PlayerOSD.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PlayerOSD.vue?vue&type=style&index=0&id=21e0f2f0&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"21e0f2f0\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VFlex } from 'vuetify/lib/components/VGrid';\nimport { VFooter } from 'vuetify/lib/components/VFooter';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAction } from 'vuetify/lib/components/VList';\nimport { VListItemAvatar } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemIcon } from 'vuetify/lib/components/VList';\nimport { VListItemSubtitle } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VMenu } from 'vuetify/lib/components/VMenu';\nimport { VProgressLinear } from 'vuetify/lib/components/VProgressLinear';\nimport { VSubheader } from 'vuetify/lib/components/VSubheader';\ninstallComponents(component, {VBtn,VCard,VDivider,VFlex,VFooter,VIcon,VImg,VList,VListItem,VListItemAction,VListItemAvatar,VListItemContent,VListItemIcon,VListItemSubtitle,VListItemTitle,VMenu,VProgressLinear,VSubheader})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-navigation-drawer',{attrs:{\"right\":\"\",\"app\":\"\",\"clipped\":\"\",\"temporary\":\"\",\"width\":\"300\"},model:{value:(_vm.visible),callback:function ($$v) {_vm.visible=$$v},expression:\"visible\"}},[_c('v-card-title',{staticClass:\"headline\"},[_c('b',[_vm._v(_vm._s(_vm.$t('players')))])]),_c('v-list',{attrs:{\"dense\":\"\"}},[_c('v-divider'),_vm._l((_vm.filteredPlayerIds),function(playerId){return _c('div',{key:playerId,style:(_vm.$server.activePlayerId == playerId ? 'background-color:rgba(50, 115, 220, 0.3);' : '')},[_c('v-list-item',{staticStyle:{\"margin-left\":\"-5px\",\"margin-right\":\"-15px\"},attrs:{\"ripple\":\"\",\"dense\":\"\"},on:{\"click\":function($event){return _vm.$server.switchPlayer(_vm.$server.players[playerId].player_id)}}},[_c('v-list-item-avatar',{attrs:{\"tile\":\"\"}},[_c('v-icon',{attrs:{\"size\":\"45\"}},[_vm._v(_vm._s(_vm.$server.players[playerId].is_group_player ? 'speaker_group' : 'speaker'))])],1),_c('v-list-item-content',{staticStyle:{\"margin-left\":\"-15px\"}},[_c('v-list-item-title',{staticClass:\"subtitle-1\"},[_vm._v(_vm._s(_vm.$server.players[playerId].name))]),_c('v-list-item-subtitle',{key:_vm.$server.players[playerId].state,staticClass:\"body-2\",staticStyle:{\"font-weight\":\"normal\"}},[_vm._v(\" \"+_vm._s(_vm.$t('state.' + _vm.$server.players[playerId].state))+\" \")])],1),(_vm.$server.activePlayerId)?_c('v-list-item-action',{staticStyle:{\"padding-right\":\"10px\"}},[_c('v-menu',{attrs:{\"close-on-content-click\":false,\"close-on-click\":true,\"nudge-width\":250,\"offset-x\":\"\",\"right\":\"\"},nativeOn:{\"click\":[function($event){$event.stopPropagation();},function($event){$event.stopPropagation();$event.preventDefault();}]},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-btn',_vm._g({staticStyle:{\"color\":\"rgba(0,0,0,.54)\"},attrs:{\"icon\":\"\"}},on),[_c('v-flex',{staticClass:\"vertical-btn\",attrs:{\"xs12\":\"\"}},[_c('v-icon',[_vm._v(\"volume_up\")]),_c('span',{staticClass:\"overline\"},[_vm._v(_vm._s(Math.round(_vm.$server.players[playerId].volume_level)))])],1)],1)]}}],null,true)},[_c('VolumeControl',{attrs:{\"players\":_vm.$server.players,\"player_id\":playerId}})],1)],1):_vm._e()],1),_c('v-divider')],1)})],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <!-- players side menu -->\n <v-navigation-drawer\n right\n app\n clipped\n temporary\n v-model=\"visible\"\n width=\"300\"\n >\n <v-card-title class=\"headline\">\n <b>{{ $t('players') }}</b>\n </v-card-title>\n <v-list dense>\n <v-divider></v-divider>\n <div\n v-for=\"playerId of filteredPlayerIds\"\n :key=\"playerId\"\n :style=\"$server.activePlayerId == playerId ? 'background-color:rgba(50, 115, 220, 0.3);' : ''\"\n >\n <v-list-item\n ripple\n dense\n style=\"margin-left: -5px; margin-right: -15px\"\n @click=\"$server.switchPlayer($server.players[playerId].player_id)\"\n >\n <v-list-item-avatar tile>\n <v-icon size=\"45\">{{ $server.players[playerId].is_group_player ? 'speaker_group' : 'speaker' }}</v-icon>\n </v-list-item-avatar>\n <v-list-item-content style=\"margin-left:-15px;\">\n <v-list-item-title class=\"subtitle-1\">{{ $server.players[playerId].name }}</v-list-item-title>\n\n <v-list-item-subtitle\n class=\"body-2\"\n style=\"font-weight:normal;\"\n :key=\"$server.players[playerId].state\"\n >\n {{ $t('state.' + $server.players[playerId].state) }}\n </v-list-item-subtitle>\n\n </v-list-item-content>\n\n <v-list-item-action\n style=\"padding-right:10px;\"\n v-if=\"$server.activePlayerId\"\n >\n <v-menu\n :close-on-content-click=\"false\"\n :close-on-click=\"true\"\n :nudge-width=\"250\"\n offset-x\n right\n @click.native.stop\n @click.native.stop.prevent\n >\n <template v-slot:activator=\"{ on }\">\n <v-btn\n icon\n style=\"color:rgba(0,0,0,.54);\"\n v-on=\"on\"\n >\n <v-flex\n xs12\n class=\"vertical-btn\"\n >\n <v-icon>volume_up</v-icon>\n <span class=\"overline\">{{ Math.round($server.players[playerId].volume_level) }}</span>\n </v-flex>\n </v-btn>\n </template>\n <VolumeControl\n v-bind:players=\"$server.players\"\n v-bind:player_id=\"playerId\"\n />\n </v-menu>\n </v-list-item-action>\n </v-list-item>\n <v-divider></v-divider>\n </div>\n </v-list>\n </v-navigation-drawer>\n</template>\n\n<style scoped>\n.vertical-btn {\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n</style>\n\n<script>\nimport Vue from 'vue'\nimport VolumeControl from '@/components/VolumeControl.vue'\n\nexport default Vue.extend({\n components: {\n VolumeControl\n },\n watch: {\n },\n data () {\n return {\n filteredPlayerIds: [],\n visible: false\n }\n },\n computed: {\n },\n created () {\n this.$server.$on('showPlayersMenu', this.show)\n this.$server.$on('players changed', this.getAvailablePlayers)\n this.getAvailablePlayers()\n },\n methods: {\n show () {\n this.visible = true\n },\n getAvailablePlayers () {\n // generate a list of playerIds that we want to show in the list\n this.filteredPlayerIds = []\n for (var playerId in this.$server.players) {\n // we're only interested in enabled players that are not group childs\n if (this.$server.players[playerId].available) {\n this.filteredPlayerIds.push(playerId)\n }\n }\n }\n }\n})\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerSelect.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerSelect.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PlayerSelect.vue?vue&type=template&id=7c65a917&scoped=true&\"\nimport script from \"./PlayerSelect.vue?vue&type=script&lang=js&\"\nexport * from \"./PlayerSelect.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PlayerSelect.vue?vue&type=style&index=0&id=7c65a917&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7c65a917\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VFlex } from 'vuetify/lib/components/VGrid';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAction } from 'vuetify/lib/components/VList';\nimport { VListItemAvatar } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemSubtitle } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VMenu } from 'vuetify/lib/components/VMenu';\nimport { VNavigationDrawer } from 'vuetify/lib/components/VNavigationDrawer';\ninstallComponents(component, {VBtn,VCardTitle,VDivider,VFlex,VIcon,VList,VListItem,VListItemAction,VListItemAvatar,VListItemContent,VListItemSubtitle,VListItemTitle,VMenu,VNavigationDrawer})\n","<template>\n <v-app>\n <TopBar />\n <NavigationMenu></NavigationMenu>\n <v-main>\n <router-view app :key=\"$route.path\"></router-view>\n </v-main>\n <PlayerOSD :showPlayerSelect=\"showPlayerSelect\" />\n <ContextMenu/>\n <PlayerSelect/>\n <v-overlay :value=\"$store.loading\">\n <v-progress-circular indeterminate size=\"64\"></v-progress-circular>\n </v-overlay>\n </v-app>\n</template>\n\n<style>\n .body {\n background-color: black;\n overscroll-behavior-x: none;\n }\n</style>\n\n<script>\nimport Vue from 'vue'\nimport NavigationMenu from './components/NavigationMenu.vue'\nimport TopBar from './components/TopBar.vue'\nimport ContextMenu from './components/ContextMenu.vue'\nimport PlayerOSD from './components/PlayerOSD.vue'\nimport PlayerSelect from './components/PlayerSelect.vue'\n\nexport default Vue.extend({\n name: 'App',\n components: {\n NavigationMenu,\n TopBar,\n ContextMenu,\n PlayerOSD,\n PlayerSelect\n },\n data: () => ({\n showPlayerSelect: false\n }),\n created () {\n // TODO: retrieve serveraddress through discovery and/or user settings\n let serverAddress = ''\n if (process.env.NODE_ENV === 'production') {\n const loc = window.location\n serverAddress = loc.origin + loc.pathname\n } else {\n serverAddress = 'http://localhost:8095/'\n }\n this.$server.connect(serverAddress)\n }\n})\n</script>\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=7f0d4007&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\nimport style0 from \"./App.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VApp } from 'vuetify/lib/components/VApp';\nimport { VMain } from 'vuetify/lib/components/VMain';\nimport { VOverlay } from 'vuetify/lib/components/VOverlay';\nimport { VProgressCircular } from 'vuetify/lib/components/VProgressCircular';\ninstallComponents(component, {VApp,VMain,VOverlay,VProgressCircular})\n","/* eslint-disable no-console */\n\nimport { register } from 'register-service-worker'\n\nif (process.env.NODE_ENV === 'production') {\n register(`${process.env.BASE_URL}service-worker.js`, {\n ready () {\n console.log(\n 'App is being served from cache by a service worker.\\n' +\n 'For more details, visit https://goo.gl/AFskqB'\n )\n },\n registered () {\n console.log('Service worker has been registered.')\n },\n cached () {\n console.log('Content has been cached for offline use.')\n },\n updatefound () {\n console.log('New content is downloading.')\n },\n updated () {\n alert('New content is available; please refresh.')\n window.location.reload(true)\n },\n offline () {\n alert('No internet connection found. App is running in offline mode.')\n },\n error (error) {\n console.error('Error during service worker registration:', error)\n }\n })\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('v-list',{attrs:{\"tile\":\"\"}},_vm._l((_vm.items),function(item){return _c('v-list-item',{key:item.title,attrs:{\"tile\":\"\"},on:{\"click\":function($event){return _vm.$router.push(item.path)}}},[_c('v-list-item-icon',{staticStyle:{\"margin-left\":\"15px\"}},[_c('v-icon',[_vm._v(_vm._s(item.icon))])],1),_c('v-list-item-content',[_c('v-list-item-title',{domProps:{\"textContent\":_vm._s(item.title)}})],1)],1)}),1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <section>\n <v-list tile>\n <v-list-item tile\n v-for=\"item in items\" :key=\"item.title\" @click=\"$router.push(item.path)\">\n <v-list-item-icon style=\"margin-left:15px\">\n <v-icon>{{ item.icon }}</v-icon>\n </v-list-item-icon>\n <v-list-item-content>\n <v-list-item-title v-text=\"item.title\"></v-list-item-title>\n </v-list-item-content>\n </v-list-item>\n </v-list>\n </section>\n</template>\n\n<script>\n\nexport default {\n name: 'home',\n data () {\n return {\n items: [\n { title: this.$t('artists'), icon: 'person', path: '/artists' },\n { title: this.$t('albums'), icon: 'album', path: '/albums' },\n { title: this.$t('tracks'), icon: 'audiotrack', path: '/tracks' },\n { title: this.$t('playlists'), icon: 'playlist_play', path: '/playlists' },\n { title: this.$t('search'), icon: 'search', path: '/search' }\n ]\n }\n },\n created () {\n this.$store.windowtitle = this.$t('musicassistant')\n }\n}\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Home.vue?vue&type=template&id=38d5da10&\"\nimport script from \"./Home.vue?vue&type=script&lang=js&\"\nexport * from \"./Home.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemIcon } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\ninstallComponents(component, {VIcon,VList,VListItem,VListItemContent,VListItemIcon,VListItemTitle})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('ItemsListing',{attrs:{\"mediatype\":_vm.mediatype,\"provider\":_vm.provider,\"endpoint\":'library/' + _vm.mediatype}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <section>\n <ItemsListing :mediatype=\"mediatype\" :provider=\"provider\" :endpoint=\"'library/' + mediatype\" />\n </section>\n</template>\n\n<script>\n// @ is an alias to /src\nimport ItemsListing from '@/components/ItemsListing.vue'\n\nexport default {\n name: 'browse',\n components: {\n ItemsListing\n },\n props: {\n mediatype: String,\n provider: String\n },\n data () {\n return { }\n },\n created () {\n this.$store.windowtitle = this.$t(this.mediatype)\n },\n computed: { },\n methods: { }\n}\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Browse.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Browse.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Browse.vue?vue&type=template&id=0b869ae6&\"\nimport script from \"./Browse.vue?vue&type=script&lang=js&\"\nexport * from \"./Browse.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Vue from 'vue'\nimport VueRouter from 'vue-router'\nimport Home from '../views/Home.vue'\nimport Browse from '../views/Browse.vue'\n\nVue.use(VueRouter)\n\nconst routes = [\n {\n path: '/',\n name: 'home',\n component: Home\n },\n {\n path: '/config',\n name: 'config',\n component: () => import(/* webpackChunkName: \"config\" */ '../views/Config.vue'),\n props: route => ({ ...route.params, ...route.query })\n },\n {\n path: '/config/:configKey',\n name: 'configKey',\n component: () => import(/* webpackChunkName: \"config\" */ '../views/Config.vue'),\n props: route => ({ ...route.params, ...route.query })\n },\n {\n path: '/search',\n name: 'search',\n component: () => import(/* webpackChunkName: \"search\" */ '../views/Search.vue'),\n props: route => ({ ...route.params, ...route.query })\n },\n {\n path: '/:media_type/:media_id',\n name: 'itemdetails',\n component: () => import(/* webpackChunkName: \"itemdetails\" */ '../views/ItemDetails.vue'),\n props: route => ({ ...route.params, ...route.query })\n },\n {\n path: '/playerqueue',\n name: 'playerqueue',\n component: () => import(/* webpackChunkName: \"playerqueue\" */ '../views/PlayerQueue.vue'),\n props: route => ({ ...route.params, ...route.query })\n },\n {\n path: '/:mediatype',\n name: 'browse',\n component: Browse,\n props: route => ({ ...route.params, ...route.query })\n }\n]\n\nconst router = new VueRouter({\n mode: 'hash',\n routes\n})\n\nexport default router\n","import Vue from 'vue'\nimport VueI18n from 'vue-i18n'\n\nVue.use(VueI18n)\n\nfunction loadLocaleMessages () {\n const locales = require.context('./locales', true, /[A-Za-z0-9-_,\\s]+\\.json$/i)\n const messages = {}\n locales.keys().forEach(key => {\n const matched = key.match(/([A-Za-z0-9-_]+)\\./i)\n if (matched && matched.length > 1) {\n const locale = matched[1]\n messages[locale] = locales(key)\n }\n })\n return messages\n}\n\nexport default new VueI18n({\n // locale: process.env.VUE_APP_I18N_LOCALE || 'en',\n locale: navigator.language.split('-')[0],\n fallbackLocale: 'en',\n messages: loadLocaleMessages()\n})\n","import Vue from 'vue'\nimport Vuetify from 'vuetify/lib'\n\nVue.use(Vuetify)\n\nexport default new Vuetify({\n})\n","import Vue from 'vue'\n\nconst globalStore = new Vue({\n data () {\n return {\n windowtitle: 'Home',\n loading: false,\n showNavigationMenu: false,\n topBarTransparent: false,\n topBarContextItem: null,\n isMobile: false,\n isInStandaloneMode: false\n }\n },\n created () {\n this.handleWindowOptions()\n window.addEventListener('resize', this.handleWindowOptions)\n },\n destroyed () {\n window.removeEventListener('resize', this.handleWindowOptions)\n },\n methods: {\n handleWindowOptions () {\n this.isMobile = (document.body.clientWidth < 700)\n this.isInStandaloneMode = (window.navigator.standalone === true) || (window.matchMedia('(display-mode: standalone)').matches)\n }\n }\n})\n\nexport default {\n globalStore,\n // we can add objects to the Vue prototype in the install() hook:\n install (Vue, options) {\n Vue.prototype.$store = globalStore\n }\n}\n","'use strict'\n\nimport Vue from 'vue'\nimport axios from 'axios'\nimport oboe from 'oboe'\n\nconst axiosConfig = {\n timeout: 60 * 1000\n // withCredentials: true, // Check cross-site Access-Control\n}\nconst _axios = axios.create(axiosConfig)\n\n// Holds the connection to the server\n\nconst server = new Vue({\n\n _address: '',\n _ws: null,\n\n data () {\n return {\n connected: false,\n players: {},\n activePlayerId: null,\n syncStatus: []\n }\n },\n methods: {\n\n async connect (serverAddress) {\n // Connect to the server\n if (!serverAddress.endsWith('/')) {\n serverAddress = serverAddress + '/'\n }\n this._address = serverAddress\n const wsAddress = serverAddress.replace('http', 'ws') + 'ws'\n this._ws = new WebSocket(wsAddress)\n this._ws.onopen = this._onWsConnect\n this._ws.onmessage = this._onWsMessage\n this._ws.onclose = this._onWsClose\n this._ws.onerror = this._onWsError\n },\n\n async toggleLibrary (item) {\n /// triggered when user clicks the library (heart) button\n if (item.in_library.length === 0) {\n // add to library\n await this.putData('library', item)\n item.in_library = [item.provider]\n } else {\n // remove from library\n await this.deleteData('library', item)\n item.in_library = []\n }\n },\n\n getImageUrl (mediaItem, imageType = 'image', size = 0) {\n // format the image url\n if (!mediaItem || !mediaItem.media_type) return ''\n if (mediaItem.provider === 'database' && imageType === 'image') {\n return `${this._address}api/${mediaItem.media_type}/${mediaItem.item_id}/thumb?provider=${mediaItem.provider}&size=${size}`\n } else if (mediaItem.metadata && mediaItem.metadata[imageType]) {\n return mediaItem.metadata[imageType]\n } else if (mediaItem.album && mediaItem.album.metadata && mediaItem.album.metadata[imageType]) {\n return mediaItem.album.metadata[imageType]\n } else if (mediaItem.artist && mediaItem.artist.metadata && mediaItem.artist.metadata[imageType]) {\n return mediaItem.artist.metadata[imageType]\n } else if (mediaItem.album && mediaItem.album.artist && mediaItem.album.artist.metadata && mediaItem.album.artist.metadata[imageType]) {\n return mediaItem.album.artist.metadata[imageType]\n } else if (mediaItem.artists && mediaItem.artists[0].metadata && mediaItem.artists[0].metadata[imageType]) {\n return mediaItem.artists[0].metadata[imageType]\n } else if (imageType === 'fanart') {\n // fallback to normal image instead of fanart\n return this.getImageUrl(mediaItem, 'image', size)\n } else return ''\n },\n\n async getData (endpoint, params = {}) {\n // get data from the server\n const url = this._address + 'api/' + endpoint\n const result = await _axios.get(url, { params: params })\n Vue.$log.debug('getData', endpoint, result)\n return result.data\n },\n\n async postData (endpoint, data) {\n // post data to the server\n const url = this._address + 'api/' + endpoint\n data = JSON.stringify(data)\n const result = await _axios.post(url, data)\n Vue.$log.debug('postData', endpoint, result)\n return result.data\n },\n\n async putData (endpoint, data) {\n // put data to the server\n const url = this._address + 'api/' + endpoint\n data = JSON.stringify(data)\n const result = await _axios.put(url, data)\n Vue.$log.debug('putData', endpoint, result)\n return result.data\n },\n\n async deleteData (endpoint, dataObj) {\n // delete data on the server\n const url = this._address + 'api/' + endpoint\n dataObj = JSON.stringify(dataObj)\n const result = await _axios.delete(url, { data: dataObj })\n Vue.$log.debug('deleteData', endpoint, result)\n return result.data\n },\n\n async getAllItems (endpoint, list, params = null) {\n // retrieve all items and fill list\n let url = this._address + 'api/' + endpoint\n if (params) {\n var urlParams = new URLSearchParams(params)\n url += '?' + urlParams.toString()\n }\n let index = 0\n Vue.$log.debug('getAllItems', url)\n oboe(url)\n .node('items.*', function (item) {\n Vue.set(list, index, item)\n index += 1\n })\n .done(function (fullList) {\n // truncate list if needed\n if (list.length > fullList.items.length) {\n list.splice(fullList.items.length)\n }\n })\n },\n\n playerCommand (cmd, cmd_opt = '', playerId = this.activePlayerId) {\n const endpoint = 'players/' + playerId + '/cmd/' + cmd\n this.postData(endpoint, cmd_opt)\n },\n\n async playItem (item, queueOpt) {\n this.$store.loading = true\n const endpoint = 'players/' + this.activePlayerId + '/play_media/' + queueOpt\n await this.postData(endpoint, item)\n this.$store.loading = false\n },\n\n switchPlayer (newPlayerId) {\n if (newPlayerId !== this.activePlayerId) {\n this.activePlayerId = newPlayerId\n localStorage.setItem('activePlayerId', newPlayerId)\n this.$emit('new player selected', newPlayerId)\n }\n },\n\n async _onWsConnect () {\n // Websockets connection established\n Vue.$log.info('Connected to server ' + this._address)\n this.connected = true\n // retrieve all players once through api\n const players = await this.getData('players')\n for (const player of players) {\n Vue.set(this.players, player.player_id, player)\n }\n this._selectActivePlayer()\n this.$emit('players changed')\n },\n\n async _onWsMessage (e) {\n // Message retrieved on the websocket\n var msg = JSON.parse(e.data)\n if (msg.message === 'player changed') {\n Vue.set(this.players, msg.message_details.player_id, msg.message_details)\n } else if (msg.message === 'player added') {\n Vue.set(this.players, msg.message_details.player_id, msg.message_details)\n this._selectActivePlayer()\n this.$emit('players changed')\n } else if (msg.message === 'player removed') {\n Vue.delete(this.players, msg.message_details.player_id)\n this._selectActivePlayer()\n this.$emit('players changed')\n } else if (msg.message === 'music sync status') {\n this.syncStatus = msg.message_details\n } else {\n this.$emit(msg.message, msg.message_details)\n }\n },\n\n _onWsClose (e) {\n this.connected = false\n Vue.$log.error('Socket is closed. Reconnect will be attempted in 5 seconds.', e.reason)\n setTimeout(function () {\n this.connect(this._address)\n }.bind(this), 5000)\n },\n\n _onWsError () {\n this._ws.close()\n },\n\n _selectActivePlayer () {\n // auto select new active player if we have none\n if (!this.activePlayer || !this.activePlayer.enabled || this.activePlayer.group_parents.length > 0) {\n // prefer last selected player\n const lastPlayerId = localStorage.getItem('activePlayerId')\n if (lastPlayerId && this.players[lastPlayerId] && this.players[lastPlayerId].enabled) {\n this.switchPlayer(lastPlayerId)\n } else {\n // prefer the first playing player\n for (const playerId in this.players) {\n if (this.players[playerId].state === 'playing' && this.players[playerId].enabled && this.players[playerId].group_parents.length === 0) {\n this.switchPlayer(playerId)\n break\n }\n }\n // fallback to just the first player\n if (!this.activePlayer || !this.activePlayer.enabled) {\n for (const playerId in this.players) {\n if (this.players[playerId].enabled && this.players[playerId].group_parents.length === 0) {\n this.switchPlayer(playerId)\n break\n }\n }\n }\n }\n }\n }\n },\n computed: {\n activePlayer () {\n if (!this.activePlayerId) {\n return null\n } else {\n return this.players[this.activePlayerId]\n }\n }\n }\n})\n\n// install as plugin\nexport default {\n server,\n // we can add objects to the Vue prototype in the install() hook:\n install (Vue, options) {\n Vue.prototype.$server = server\n }\n}\n","import Vue from 'vue'\nimport App from './App.vue'\nimport './registerServiceWorker'\nimport router from './router'\nimport i18n from './i18n'\nimport 'roboto-fontface/css/roboto/roboto-fontface.css'\nimport 'material-design-icons-iconfont/dist/material-design-icons.css'\nimport VueVirtualScroller from 'vue-virtual-scroller'\nimport 'vue-virtual-scroller/dist/vue-virtual-scroller.css'\nimport vuetify from './plugins/vuetify'\nimport store from './plugins/store'\nimport server from './plugins/server'\nimport '@babel/polyfill'\nimport VueLogger from 'vuejs-logger'\n\nconst isProduction = process.env.NODE_ENV === 'production'\nconst loggerOptions = {\n isEnabled: true,\n logLevel: isProduction ? 'error' : 'debug',\n stringifyArguments: false,\n showLogLevel: true,\n showMethodName: false,\n separator: '|',\n showConsoleColors: true\n}\n\nVue.config.productionTip = false\nVue.use(VueLogger, loggerOptions)\nVue.use(VueVirtualScroller)\nVue.use(store)\nVue.use(server)\n\n// eslint-disable-next-line no-extend-native\nString.prototype.formatDuration = function () {\n var secNum = parseInt(this, 10) // don't forget the second param\n var hours = Math.floor(secNum / 3600)\n var minutes = Math.floor((secNum - (hours * 3600)) / 60)\n var seconds = secNum - (hours * 3600) - (minutes * 60)\n if (hours < 10) { hours = '0' + hours }\n if (minutes < 10) { minutes = '0' + minutes }\n if (seconds < 10) { seconds = '0' + seconds }\n if (hours === '00') { return minutes + ':' + seconds } else { return hours + ':' + minutes + ':' + seconds }\n}\n\nnew Vue({\n router,\n i18n,\n vuetify,\n render: h => h(App)\n}).$mount('#app')\n","module.exports = \"data:image/png;base64,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\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerOSD.vue?vue&type=style&index=0&id=21e0f2f0&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerOSD.vue?vue&type=style&index=0&id=21e0f2f0&scoped=true&lang=css&\"","module.exports = __webpack_public_path__ + \"img/file.813f9dad.png\";","module.exports = __webpack_public_path__ + \"img/sonos.72e2fecb.png\";","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","var map = {\n\t\"./aac.png\": \"9a36\",\n\t\"./chromecast.png\": \"57d1\",\n\t\"./crossfade.png\": \"e7af\",\n\t\"./default_artist.png\": \"4bfb\",\n\t\"./demo_player.png\": \"26ea\",\n\t\"./file.png\": \"71db\",\n\t\"./flac.png\": \"fb30\",\n\t\"./hires.png\": \"f5e3\",\n\t\"./homeassistant.png\": \"3232\",\n\t\"./http_streamer.png\": \"2755\",\n\t\"./logo.png\": \"cf05\",\n\t\"./mp3.png\": \"f1d4\",\n\t\"./ogg.png\": \"9ad3\",\n\t\"./qobuz.png\": \"0863\",\n\t\"./sonos.png\": \"82f5\",\n\t\"./spotify.png\": \"0c3b\",\n\t\"./squeezebox.png\": \"bd18\",\n\t\"./tunein.png\": \"e428\",\n\t\"./vorbis.png\": \"94cc\",\n\t\"./web.png\": \"edbf\",\n\t\"./webplayer.png\": \"3d05\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"9e01\";","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ItemsListing.vue?vue&type=style&index=0&id=764b0c8e&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ItemsListing.vue?vue&type=style&index=0&id=764b0c8e&scoped=true&lang=css&\"","module.exports = __webpack_public_path__ + \"img/squeezebox.60631223.png\";","module.exports = __webpack_public_path__ + \"img/logo.c079bd97.png\";","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-list-item',{directives:[{name:\"longpress\",rawName:\"v-longpress\",value:(_vm.menuClick),expression:\"menuClick\"}],attrs:{\"ripple\":\"\"},on:{\"click\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"left\",37,$event.key,[\"Left\",\"ArrowLeft\"])){ return null; }if('button' in $event && $event.button !== 0){ return null; }_vm.onclickHandler ? _vm.onclickHandler(_vm.item) : _vm.itemClicked(_vm.item)},\"contextmenu\":[_vm.menuClick,function($event){$event.preventDefault();}]}},[(!_vm.hideavatar)?_c('v-list-item-avatar',{attrs:{\"tile\":\"\",\"color\":\"grey\"}},[_c('img',{staticStyle:{\"border\":\"1px solid rgba(0,0,0,.22)\"},attrs:{\"src\":_vm.$server.getImageUrl(_vm.item, 'image', 80),\"lazy-src\":require('../assets/file.png')}})]):_vm._e(),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(\" \"+_vm._s(_vm.item.name)+\" \"),(!!_vm.item.version)?_c('span',[_vm._v(\"(\"+_vm._s(_vm.item.version)+\")\")]):_vm._e()]),(_vm.item.artists)?_c('v-list-item-subtitle',[_vm._l((_vm.item.artists),function(artist,artistindex){return _c('span',{key:artist.item_id},[_c('a',{on:{\"click\":[function($event){return _vm.itemClicked(artist)},function($event){$event.stopPropagation();}]}},[_vm._v(_vm._s(artist.name))]),(artistindex + 1 < _vm.item.artists.length)?_c('label',{key:artistindex},[_vm._v(\"/\")]):_vm._e()])}),(!!_vm.item.album && !!_vm.hidetracknum)?_c('a',{staticStyle:{\"color\":\"grey\"},on:{\"click\":[function($event){return _vm.itemClicked(_vm.item.album)},function($event){$event.stopPropagation();}]}},[_vm._v(\" - \"+_vm._s(_vm.item.album.name))]):_vm._e(),(!_vm.hidetracknum && _vm.item.track_number)?_c('label',{staticStyle:{\"color\":\"grey\"}},[_vm._v(\"- disc \"+_vm._s(_vm.item.disc_number)+\" track \"+_vm._s(_vm.item.track_number))]):_vm._e()],2):_vm._e(),(_vm.item.artist)?_c('v-list-item-subtitle',[_c('a',{on:{\"click\":[function($event){return _vm.itemClicked(_vm.item.artist)},function($event){$event.stopPropagation();}]}},[_vm._v(_vm._s(_vm.item.artist.name))])]):_vm._e(),(!!_vm.item.owner)?_c('v-list-item-subtitle',[_vm._v(_vm._s(_vm.item.owner))]):_vm._e()],1),(!_vm.hideproviders)?_c('v-list-item-action',[_c('ProviderIcons',{attrs:{\"providerIds\":_vm.item.provider_ids,\"height\":20}})],1):_vm._e(),(_vm.isHiRes)?_c('v-list-item-action',[_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('img',_vm._g({attrs:{\"src\":require('../assets/hires.png'),\"height\":\"20\"}},on))]}}],null,false,2747613229)},[_c('span',[_vm._v(_vm._s(_vm.isHiRes))])])],1):_vm._e(),(!_vm.hidelibrary)?_c('v-list-item-action',[_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-btn',_vm._g({attrs:{\"icon\":\"\",\"ripple\":\"\"},on:{\"click\":[function($event){return _vm.toggleLibrary(_vm.item)},function($event){$event.preventDefault();},function($event){$event.stopPropagation();}]}},on),[(_vm.item.in_library.length > 0)?_c('v-icon',{attrs:{\"height\":\"20\"}},[_vm._v(\"favorite\")]):_vm._e(),(_vm.item.in_library.length == 0)?_c('v-icon',{attrs:{\"height\":\"20\"}},[_vm._v(\"favorite_border\")]):_vm._e()],1)]}}],null,false,113966118)},[(_vm.item.in_library.length > 0)?_c('span',[_vm._v(_vm._s(_vm.$t(\"remove_library\")))]):_vm._e(),(_vm.item.in_library.length == 0)?_c('span',[_vm._v(_vm._s(_vm.$t(\"add_library\")))]):_vm._e()])],1):_vm._e(),(!_vm.hideduration && !!_vm.item.duration)?_c('v-list-item-action',[_vm._v(_vm._s(_vm.item.duration.toString().formatDuration()))]):_vm._e(),(!_vm.hidemenu)?_c('v-icon',{staticStyle:{\"margin-right\":\"-10px\",\"padding-left\":\"10px\"},attrs:{\"color\":\"grey lighten-1\"},on:{\"click\":[function($event){return _vm.menuClick(_vm.item)},function($event){$event.stopPropagation();}]}},[_vm._v(\"more_vert\")]):_vm._e()],1),_c('v-divider')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <v-list-item\n ripple\n @click.left=\"onclickHandler ? onclickHandler(item) : itemClicked(item)\"\n @contextmenu=\"menuClick\"\n @contextmenu.prevent\n v-longpress=\"menuClick\"\n >\n <v-list-item-avatar tile color=\"grey\" v-if=\"!hideavatar\">\n <img\n :src=\"$server.getImageUrl(item, 'image', 80)\"\n :lazy-src=\"require('../assets/file.png')\"\n style=\"border: 1px solid rgba(0,0,0,.22);\"\n />\n </v-list-item-avatar>\n\n <v-list-item-content>\n <v-list-item-title>\n {{ item.name }}\n <span v-if=\"!!item.version\">({{ item.version }})</span>\n </v-list-item-title>\n\n <v-list-item-subtitle v-if=\"item.artists\">\n <span\n v-for=\"(artist, artistindex) in item.artists\"\n :key=\"artist.item_id\"\n >\n <a v-on:click=\"itemClicked(artist)\" @click.stop>{{\n artist.name\n }}</a>\n <label\n v-if=\"artistindex + 1 < item.artists.length\"\n :key=\"artistindex\"\n >/</label\n >\n </span>\n <a\n v-if=\"!!item.album && !!hidetracknum\"\n v-on:click=\"itemClicked(item.album)\"\n @click.stop\n style=\"color:grey\"\n >\n - {{ item.album.name }}</a\n >\n <label v-if=\"!hidetracknum && item.track_number\" style=\"color:grey\"\n >- disc {{ item.disc_number }} track {{ item.track_number }}</label\n >\n </v-list-item-subtitle>\n <v-list-item-subtitle v-if=\"item.artist\">\n <a v-on:click=\"itemClicked(item.artist)\" @click.stop>{{\n item.artist.name\n }}</a>\n </v-list-item-subtitle>\n\n <v-list-item-subtitle v-if=\"!!item.owner\">{{\n item.owner\n }}</v-list-item-subtitle>\n </v-list-item-content>\n\n <v-list-item-action v-if=\"!hideproviders\">\n <ProviderIcons v-bind:providerIds=\"item.provider_ids\" :height=\"20\" />\n </v-list-item-action>\n\n <v-list-item-action v-if=\"isHiRes\">\n <v-tooltip bottom>\n <template v-slot:activator=\"{ on }\">\n <img :src=\"require('../assets/hires.png')\" height=\"20\" v-on=\"on\" />\n </template>\n <span>{{ isHiRes }}</span>\n </v-tooltip>\n </v-list-item-action>\n\n <v-list-item-action v-if=\"!hidelibrary\">\n <v-tooltip bottom>\n <template v-slot:activator=\"{ on }\">\n <v-btn\n icon\n ripple\n v-on=\"on\"\n v-on:click=\"toggleLibrary(item)\"\n @click.prevent\n @click.stop\n >\n <v-icon height=\"20\" v-if=\"item.in_library.length > 0\"\n >favorite</v-icon\n >\n <v-icon height=\"20\" v-if=\"item.in_library.length == 0\"\n >favorite_border</v-icon\n >\n </v-btn>\n </template>\n <span v-if=\"item.in_library.length > 0\">{{\n $t(\"remove_library\")\n }}</span>\n <span v-if=\"item.in_library.length == 0\">{{\n $t(\"add_library\")\n }}</span>\n </v-tooltip>\n </v-list-item-action>\n\n <v-list-item-action v-if=\"!hideduration && !!item.duration\">{{\n item.duration.toString().formatDuration()\n }}</v-list-item-action>\n\n <!-- menu button/icon -->\n <v-icon\n v-if=\"!hidemenu\"\n @click=\"menuClick(item)\"\n @click.stop\n color=\"grey lighten-1\"\n style=\"margin-right:-10px;padding-left:10px\"\n >more_vert</v-icon\n >\n </v-list-item>\n <v-divider></v-divider>\n </div>\n</template>\n\n<script>\nimport Vue from 'vue'\nimport ProviderIcons from '@/components/ProviderIcons.vue'\n\nconst PRESS_TIMEOUT = 600\n\nVue.directive('longpress', {\n bind: function (el, { value }, vNode) {\n if (typeof value !== 'function') {\n Vue.$log.warn(`Expect a function, got ${value}`)\n return\n }\n let pressTimer = null\n const start = e => {\n if (e.type === 'click' && e.button !== 0) {\n return\n }\n if (pressTimer === null) {\n pressTimer = setTimeout(() => value(e), PRESS_TIMEOUT)\n }\n }\n const cancel = () => {\n if (pressTimer !== null) {\n clearTimeout(pressTimer)\n pressTimer = null\n }\n }\n ;['mousedown', 'touchstart'].forEach(e => el.addEventListener(e, start))\n ;['click', 'mouseout', 'touchend', 'touchcancel'].forEach(e => el.addEventListener(e, cancel))\n }\n})\n\nexport default Vue.extend({\n components: {\n ProviderIcons\n },\n props: {\n item: Object,\n index: Number,\n totalitems: Number,\n hideavatar: Boolean,\n hidetracknum: Boolean,\n hideproviders: Boolean,\n hidemenu: Boolean,\n hidelibrary: Boolean,\n hideduration: Boolean,\n onclickHandler: null\n },\n data () {\n return {\n touchMoving: false,\n cancelled: false\n }\n },\n computed: {\n isHiRes () {\n for (var prov of this.item.provider_ids) {\n if (prov.quality > 6) {\n if (prov.details) {\n return prov.details\n } else if (prov.quality === 7) {\n return '44.1/48khz 24 bits'\n } else if (prov.quality === 8) {\n return '88.2/96khz 24 bits'\n } else if (prov.quality === 9) {\n return '176/192khz 24 bits'\n } else {\n return '+192kHz 24 bits'\n }\n }\n }\n return ''\n }\n },\n created () { },\n beforeDestroy () {\n this.cancelled = true\n },\n mounted () { },\n methods: {\n itemClicked (mediaItem = null) {\n // mediaItem in the list is clicked\n let url = ''\n if (mediaItem.media_type === 1) {\n url = '/artists/' + mediaItem.item_id\n } else if (mediaItem.media_type === 2) {\n url = '/albums/' + mediaItem.item_id\n } else if (mediaItem.media_type === 4) {\n url = '/playlists/' + mediaItem.item_id\n } else {\n // assume track (or radio) item\n this.$server.$emit('showPlayMenu', mediaItem)\n return\n }\n this.$router.push({ path: url, query: { provider: mediaItem.provider } })\n },\n menuClick () {\n // contextmenu button clicked\n if (this.cancelled) return\n this.$server.$emit('showContextMenu', this.item)\n },\n async toggleLibrary (mediaItem) {\n // library button clicked on item\n this.cancelled = true\n await this.$server.toggleLibrary(mediaItem)\n this.cancelled = false\n }\n }\n})\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListviewItem.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListviewItem.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ListviewItem.vue?vue&type=template&id=36620bf4&\"\nimport script from \"./ListviewItem.vue?vue&type=script&lang=js&\"\nexport * from \"./ListviewItem.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAction } from 'vuetify/lib/components/VList';\nimport { VListItemAvatar } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemSubtitle } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VBtn,VDivider,VIcon,VListItem,VListItemAction,VListItemAvatar,VListItemContent,VListItemSubtitle,VListItemTitle,VTooltip})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',_vm._l((_vm.uniqueProviders),function(prov){return _c('img',{key:prov.provider,staticStyle:{\"margin-right\":\"6px\",\"margin-top\":\"6px\"},attrs:{\"height\":_vm.height,\"src\":require('../assets/' + prov.provider + '.png')}})}),0)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div>\r\n <img\r\n v-for=\"prov of uniqueProviders\" :key=\"prov.provider\"\r\n :height=\"height\"\r\n :src=\"require('../assets/' + prov.provider + '.png')\"\r\n style=\"margin-right:6px;margin-top:6px;\"\r\n />\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport Vue from 'vue'\r\n\r\nexport default Vue.extend({\r\n props: {\r\n providerIds: Array,\r\n height: Number\r\n },\r\n data () {\r\n return {\r\n isHiRes: false\r\n }\r\n },\r\n computed: {\r\n uniqueProviders: function () {\r\n var output = []\r\n var keys = []\r\n if (!this.providerIds) return []\r\n this.providerIds.forEach(function (prov) {\r\n var key = prov.provider\r\n if (keys.indexOf(key) === -1) {\r\n keys.push(key)\r\n output.push(prov)\r\n }\r\n })\r\n return output\r\n }\r\n },\r\n mounted () { },\r\n methods: {\r\n }\r\n})\r\n</script>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProviderIcons.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProviderIcons.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ProviderIcons.vue?vue&type=template&id=20bea3a1&\"\nimport script from \"./ProviderIcons.vue?vue&type=script&lang=js&\"\nexport * from \"./ProviderIcons.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","module.exports = __webpack_public_path__ + \"img/tunein.ca1c1bb0.png\";","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"img/web.798ba28f.png\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJEAAABfCAYAAADoOiXnAAALyUlEQVR4nO2debAcVRWHv5eQjRhIIIQEDFRIwCAYFmUTQxJ2TalIQGQRlE3WiBSFsQoiSwWECiIlm8oiSwBBFIMga8BYQFhFCQYhIYIBAoQALxsBkuMfvx6nX8/Sd+Z2z8x7735VXW96+m7T7zd3Oef0nTYzIxDwoUezGxDo/AQRBbwJIgp4E0QU8CaIKOBNEFHAmyCigDdBRAFvgogC3gQRBbwJIgp4E0QU8CaIKOBNEFHAmyCigDdBRAFvgogC3gQRBbwJIgp4s06zG1AnQ4HPAtsAnwdGRucDgH7AIOA94FPgHWA+MBf4O/Bv4M3GN7nr0tZJAvXbgB2BfYGvIfEMqrOsT4EngN8CtwPLM2hft6bVRTQE+DZwJPAlJKYkbwDzgGdQL/Nf1At9HF3vAQwGNkPi2w3YBegNvA1cClwJLMvrQ3R1WlVE2wDHA4cAGyeutaOh6a/An6PX7TWWPxTYG/geMAFYCBwHPFJ3i7sxrSaiMcCZwEFAn8S154DrgJmot8mKkcAU4Nio/JOBjzIsv8vTKiLqA5wN/AhYN3HtAeASYBaaz+TFROBa1CtNIAjJmVYQ0Z7ARWjOE+cR4DLgTw1syzDgNjSfOgBY0cC6Oy3NFFEb8HPgtMT7rwE/Bn7X8BaJNuAeYH1gHPn2fl2CZhkbNwDupFRAM4CdaZ6AAAw4EBgITG9iOzoNzeiJRgO3AtvH3luNep/LGt2YKmyB7El7Ay80uS0tTaNFtAXwKDA89t4i4HBgdiMb4siRwFFISE2fPLYqjRzORgD30lFAC4G9aE0BgYbXTYD9m92QVqZRItoYuAv4XOy9t4BJwMsNakM9rAEuB37Y7Ia0Mo0Yznqi5frY2Hvvo6X983lXngF9kVX8YOTAbVXakOF0u+jvpsghXWA1Wvm+gOZ6S7OquBFe/NPpKCBD7obOICCQ0fE0JPxWZAzwXTRvG41En8Yi4Bpkn/M2qubdE+2M5jtxF8Y04Kw8K+0m7Amcgiztvess417gCDy/IHmKqB/wNHKmFngBWaY/Lpsj4MJQ5AY6rMy114G7gSXAKOTAThttpqAeqW7yHM5+QEcBgXxjQUB+nE+pgNYCF0dHvFcZiHqqamzt26C8VmcDkfEwzi3AwznV1524llKf3s+An1A6LL3nUN4q3wblJaLvoG63wHLkpW8WvaKjXFBbOdaJ0ufZU7ehiIU+1PZ/mEPp8HN1mXS9gN0dyptbQ91lyeMm9URDWZzbgVczKHsAcCrVJ5JLgN8D41FIx44Uw0s+BhagCeWNFJ2rg5HRcw/UvRcC4QytZB5BPcCSCnXuhyImq7EC9cbjgX2Q22e9qA2rUIzUHGTgXJhS1hXImt4TOYvLLdcPREv9aixGgX1+mFnWxzgrZbeMyj6oTNnleNshzW1Ru640szcd0r9sZqPKtKmfmS10bNc7DmmWmNnxZepJHkPMrH+FayPM7HWHug5xqCf1yENENyYaOt/M+mRU9mMONyZPbrfSNh2TU10HlKnL5RhrZgtSyv7IzI6ts/ySI+s50QBk9IpzL7KW+jIO+HIG5fiwCx1tXj2ByTXkfxUtz19ySHtqDeUCbAWciyJBt6iSbh5asV1TY/kVyXpOtB2KDozzUEZlJ2OPKnEPmiyeREezfyXmonnBQci2Uo1P6BikNhFZjF14FLlOlqA5zLSU9CPRXG5lmWu9gAuADVFs1mZoLlfJWv0hEu4dwG+o/cGGqmQtor0S5+3AkxmUuwPwdYd0F1M0LRxBuohmReWuRN/eNBG9hpyyoNVV0oxRiX+icNsPo/MNHPK0UXnVNgE4w7FuQwbIo9GXIHOyHs52SpzPR0+g+jIZDR3VmAdMjV4fhhyQ1ViOequVyByxr0M7/hh7PRa34XUtcCJFAQHs6pBvMZUfrDzBIX+BNvSFmoGbX61msu6JtkycL8A/mGsEGmrSmEZx7vV9h/Qz0cOOAN9EBtJqrELzuwInOtQBMg08HjsfBXzRId+cKtduQr0LyNyxA1rSb1Qlz8HoYc1a51rpZDVDj45liVXAtAzK/GnKSsNMS/TCcnd7M/vEIc9eUfpeZvaiQ/pbYm3a1MzaHfK8b2bDrOPnOc8hn5nZV6y2+7SLma1KKXNV1PZM/+9ZD2fJZ8Z8wyf6oNDZNGZQdAVMJr2HfZbi0677o00hqrEW+EXs/DjcJu0zUfBdgb7ISJjGi9Q+l3yWdDdHXzp6EjIhaxEly1vsWd4kSofIJCspmv03R912GpciYbSheKc0ZgFPRa/XR0/LpmFoKItzTNTGNKZT+yR4U9S2anxEZat73eQdHlvvzh2g3uRMh3Qz0NwLNN5/JiX9POSGAbk5xjvUcXHs9TGkT9pBovtb7Lw/CrtI4zHg5uj1emhDi7RVI6jHTvvsT6BwkWzJeHxMcrZHWfunjO9mmvuMidIPNrkM0jg5VscdDumfNrOeUfq+ZvaKQx4zsynW8fOc6Jiv4CLa2szmRO+tMLNvWOV7NczMFjuUPbFKGXUfeYvoKo+yHnC4KXfH0p/hkH6RmQ2M0m9l6RNRM7PDY3Uc6pC+wIRYvtFm9q5DnnOi9EdY6RciXl78WMfM7nMo+zoza6tQRkuJaE2i4bPrLGd3h5tiJj8RJt/cqw7pL4zVcY5D+tdNvU8hz2zHdpmZ7RHl2cbMXnJIf75phTmjzLVPTT1T8j4NNrO7HMq+tUzelhXR0kTjPzB5m2st5zKHG/Mv07cQq33o62Vu/9hzY236grmZDgo8bmZXmJb5aRRMIftVSXOlmW1kZr3NbHPTsJzmaDXTkJ2VA7whInquzIeYVGMZQ8wtlGNyLM/9DulnxtJPdEi/1MyGxvJc55CnVhaZ2UmxOnqY2SVV0r9rEn/SHleON8zsVKvv/9hUEV1V5sM8WGMZFzncoLfMbECUfh+H9GYdY5oedkh/Xiy96/zJlTfM7CzTcFTuHkw0s6fqLPtJMzulStmZH1m7PWZR6tcZj56Hcgl/ABnnrk9J8xDFPRZ7oE08q7lXFqLlLSiicI+U8t9DT74WOAE3v9OdKBTjaORVXxd5/VegCMnngfuBB6lur7kH+Avy501EbpLhyMDZP0qzBvnWFgOvIDfJo8i00NB9A7J+ZGgw8kclvdQ3oo0RWoE/AN9KSXMOis0BbT76Ivps1ViDYpoLluaC8W818AEK//C52QOQKDeMzj9BYm+n2Xso5dC9VZo7HF5DGXkdkyqPAv/nAzPbMJZnqkMes47mhm515GGx/lWF9y8Hts2hPlc2oqPluRK/puiD6o0e+Xbhl3W0qUuQh4iepBimEGcgGkqG5FBnGoPQxlrVwkZBc6cLYud7olCUNJ4iuwjOTkdevrOplB//t0QPMKZ5zbNkGJrsJqMuy3ESmr9AbZGL1yOHbrckLxE9D9xQ4dq2KAzjgJzqjjMauI/SnWnLcXWUtsCuuDlnl6JVWbclTy/+FIre9SRDUKjpdDrunJYV66Fe5THcAulfprTXcQkRAW2g/q5707oeeW8tMwZtLVMtzmUpsvNchWKyfRiMYpBOR4/QuLAMzX2eib23E8X4obS8o+nmv1rUiJ3Svoo2NO+Vkq4dDSd3IcPgfxzLH4ZijA9GjzMnH1mqxlpkM5qZeH8q2sEkbZ5zE+6PMnVZGrV77FFo6ey6GdNyZLSch8T0FsXdKwZFxwjUC4wkPci+HKtRhOLNZa71p/S3RcrxIcVHiLotjdyCeB80bG3SqAqrsAw4FLkXAp40cgviB9Gj0M+kJcyZf6A5UBBQRjT6ZxnmIyFdgNsGTFmyElnNx9J8IXcpmvkDMcPRKupY0gPMfViO7DjTyWBDp0AprfBTVaPQzmqHkcH+gTHmIvfLDRSfdA3kQCuIqEA/ZFkeh0IqhqNVVz+HvO1oeFyANiyfjew84WemGkAriSjQSWnW750FuhBBRAFvgogC3gQRBbwJIgp4E0QU8CaIKOBNEFHAmyCigDdBRAFvgogC3gQRBbwJIgp4E0QU8CaIKOBNEFHAmyCigDdBRAFvgogC3vwPN7k7QTq1nHAAAAAASUVORK5CYII=\"","module.exports = __webpack_public_path__ + \"img/hires.eabcf7ae.png\";","module.exports = \"data:image/png;base64,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\""],"sourceRoot":""}
\ No newline at end of file
--- /dev/null
+(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["config"],{1071:function(t,e,i){"use strict";i.r(e);var n=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("section",[t.configKey?t._e():n("v-card",{attrs:{flat:""}},[n("v-list",{attrs:{tile:""}},t._l(t.conf,(function(e,i){return n("v-list-item",{key:i,attrs:{tile:""},on:{click:function(e){return t.$router.push("/config/"+i)}}},[n("v-list-item-content",[n("v-list-item-title",[t._v(t._s(t.$t("conf."+i)))])],1)],1)})),1)],1),t.configKey?n("v-card",{attrs:{flat:""}},[n("v-list",{attrs:{"two-line":"",tile:""}},t._l(t.config_items,(function(e,a){return n("v-list-group",{key:a,attrs:{"no-action":""},scopedSlots:t._u([{key:"activator",fn:function(){return["player_settings"!=t.configKey?n("v-list-item",[n("v-list-item-avatar",{staticStyle:{"margin-left":"-15px"},attrs:{tile:""}},[n("img",{staticStyle:{"border-radius":"5px",border:"1px solid rgba(0,0,0,.85)"},attrs:{src:i("9e01")("./"+a+".png")}})]),n("v-list-item-content",[n("v-list-item-title",[t._v(t._s(t.$t("conf."+a)))])],1)],1):t._e(),"player_settings"==t.configKey?n("v-list-item",[n("v-list-item-avatar",{staticStyle:{"margin-left":"-15px"},attrs:{tile:""}},[n("img",{staticStyle:{"border-radius":"5px",border:"1px solid rgba(0,0,0,.85)"},attrs:{src:i("9e01")("./"+t.$server.players[a].provider_id+".png")}})]),n("v-list-item-content",[n("v-list-item-title",[t._v(t._s(t.$server.players[a].name))])],1)],1):t._e()]},proxy:!0}],null,!0)},[n("v-list",{attrs:{tile:""}},[t._v("> "),t._l(e,(function(e,i){return n("v-list-item",{key:i,attrs:{tile:""}},["boolean"==e["entry_type"]?n("v-switch",{attrs:{placeholder:e["default_value"],label:t.$t("conf."+e["description_key"])},on:{change:function(n){return t.saveConfig(t.configKey,a,i,e["value"])}},model:{value:e["value"],callback:function(i){t.$set(e,"value",i)},expression:"conf_item_value['value']"}}):t._e(),"string"!=e["entry_type"]&&"integer"!=e["entry_type"]&&"float"!=e["entry_type"]||e["values"].length||e["range"].length?t._e():n("v-text-field",{attrs:{placeholder:e["default_value"]?e["default_value"].toString():"",label:t.$t("conf."+e["description_key"]),filled:""},on:{change:function(n){return t.saveConfig(t.configKey,a,i,e["value"])}},model:{value:e["value"],callback:function(i){t.$set(e,"value",i)},expression:"conf_item_value['value']"}}),"password"==e["entry_type"]?n("v-text-field",{attrs:{placeholder:e["default_value"],label:t.$t("conf."+e["description_key"]),type:"password",filled:""},on:{change:function(n){return t.saveConfig(t.configKey,a,i,e["value"])}},model:{value:e["value"],callback:function(i){t.$set(e,"value",i)},expression:"conf_item_value['value']"}}):t._e(),e["values"].length&&!e["range"].length?n("v-select",{attrs:{chips:e["multi_value"],clearable:"",multiple:e["multi_value"],items:e["values"],placeholder:e["default_value"]?e["default_value"].toString():"",label:t.$t("conf."+e["description_key"]),filled:""},on:{change:function(n){return t.saveConfig(t.configKey,a,i,e["value"])}},model:{value:e["value"],callback:function(i){t.$set(e,"value",i)},expression:"conf_item_value['value']"}}):t._e(),e["range"].length?n("v-slider",{staticStyle:{"margin-top":"28px"},attrs:{placeholder:e["default_value"].toString(),label:t.$t("conf."+e["description_key"]),min:e["range"][0],max:e["range"][1],"thumb-size":25,"thumb-label":"always"},on:{change:function(n){return t.saveConfig(t.configKey,a,i,e["value"])}},model:{value:e["value"],callback:function(i){t.$set(e,"value",i)},expression:"conf_item_value['value']"}}):t._e()],1)}))],2),n("v-divider")],1)})),1)],1):t._e()],1)},a=[],s=(i("96cf"),i("c964")),l=i("2b0e"),r={components:{},props:["configKey"],data:function(){return{conf:{base:{},providers:{},player_settings:{}},players:{},active:0}},computed:{config_items:function(){if(!this.conf)return{};if("player_settings"===this.configKey){if(this.$server.players){var t={};for(var e in this.$server.players)t[e]=this.conf.player_settings[e]}return t}return"player_settings"!==this.configKey?this.conf[this.configKey]:this.conf}},created:function(){this.$store.windowtitle=this.$t("settings"),this.configKey&&(this.$store.windowtitle+=" | "+this.$t("conf."+this.configKey)),this.getConfig()},methods:{getConfig:function(){var t=this;return Object(s["a"])(regeneratorRuntime.mark((function e(){var i;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:if(t.configKey){e.next=2;break}return e.abrupt("return");case 2:return e.next=4,t.$server.getData("config/"+t.configKey);case 4:i=e.sent,l["a"].set(t.conf,t.configKey,i);case 6:case"end":return e.stop()}}),e)})))()},saveConfig:function(t,e,i,n){var a=this;return Object(s["a"])(regeneratorRuntime.mark((function s(){var l;return regeneratorRuntime.wrap((function(s){while(1)switch(s.prev=s.next){case 0:return l="config/"+t+"/"+e+"/"+i,s.next=3,a.$server.putData(l,n);case 3:case"end":return s.stop()}}),s)})))()}}},o=r,c=i("2877"),u=i("6544"),h=i.n(u),v=i("b0af"),f=i("ce7e"),p=i("8860"),d=i("56b0"),g=i("da13"),m=i("8270"),y=i("5d23"),_=i("b974"),b=i("ba0d"),w=(i("0481"),i("4069"),i("f3f3")),C=(i("ec29"),i("9d01"),i("4de4"),i("45fc"),i("d3b7"),i("25f0"),i("c37a")),k=i("5607"),V=l["a"].extend({name:"rippleable",directives:{ripple:k["a"]},props:{ripple:{type:[Boolean,Object],default:!0}},methods:{genRipple:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.ripple?(t.staticClass="v-input--selection-controls__ripple",t.directives=t.directives||[],t.directives.push({name:"ripple",value:{center:!0}}),this.$createElement("div",t)):null}}}),$=i("8547"),S=i("58df");function x(t){t.preventDefault()}var K=Object(S["a"])(C["a"],V,$["a"]).extend({name:"selectable",model:{prop:"inputValue",event:"change"},props:{id:String,inputValue:null,falseValue:null,trueValue:null,multiple:{type:Boolean,default:null},label:String},data:function(){return{hasColor:this.inputValue,lazyValue:this.inputValue}},computed:{computedColor:function(){if(this.isActive)return this.color?this.color:this.isDark&&!this.appIsDark?"white":"primary"},isMultiple:function(){return!0===this.multiple||null===this.multiple&&Array.isArray(this.internalValue)},isActive:function(){var t=this,e=this.value,i=this.internalValue;return this.isMultiple?!!Array.isArray(i)&&i.some((function(i){return t.valueComparator(i,e)})):void 0===this.trueValue||void 0===this.falseValue?e?this.valueComparator(e,i):Boolean(i):this.valueComparator(i,this.trueValue)},isDirty:function(){return this.isActive},rippleState:function(){return this.isDisabled||this.validationState?this.validationState:void 0}},watch:{inputValue:function(t){this.lazyValue=t,this.hasColor=t}},methods:{genLabel:function(){var t=C["a"].options.methods.genLabel.call(this);return t?(t.data.on={click:x},t):t},genInput:function(t,e){return this.$createElement("input",{attrs:Object.assign({"aria-checked":this.isActive.toString(),disabled:this.isDisabled,id:this.computedId,role:t,type:t},e),domProps:{value:this.value,checked:this.isActive},on:{blur:this.onBlur,change:this.onChange,focus:this.onFocus,keydown:this.onKeydown,click:x},ref:"input"})},onBlur:function(){this.isFocused=!1},onClick:function(t){this.onChange(),this.$emit("click",t)},onChange:function(){var t=this;if(this.isInteractive){var e=this.value,i=this.internalValue;if(this.isMultiple){Array.isArray(i)||(i=[]);var n=i.length;i=i.filter((function(i){return!t.valueComparator(i,e)})),i.length===n&&i.push(e)}else i=void 0!==this.trueValue&&void 0!==this.falseValue?this.valueComparator(i,this.trueValue)?this.falseValue:this.trueValue:e?this.valueComparator(i,e)?null:e:!i;this.validate(!0,i),this.internalValue=i,this.hasColor=i}},onFocus:function(){this.isFocused=!0},onKeydown:function(t){}}}),A=i("c3f0"),D=i("0789"),j=i("490a"),O=i("80d2"),L=K.extend({name:"v-switch",directives:{Touch:A["a"]},props:{inset:Boolean,loading:{type:[Boolean,String],default:!1},flat:{type:Boolean,default:!1}},computed:{classes:function(){return Object(w["a"])(Object(w["a"])({},C["a"].options.computed.classes.call(this)),{},{"v-input--selection-controls v-input--switch":!0,"v-input--switch--flat":this.flat,"v-input--switch--inset":this.inset})},attrs:function(){return{"aria-checked":String(this.isActive),"aria-disabled":String(this.isDisabled),role:"switch"}},validationState:function(){return this.hasError&&this.shouldValidate?"error":this.hasSuccess?"success":null!==this.hasColor?this.computedColor:void 0},switchData:function(){return this.setTextColor(this.loading?void 0:this.validationState,{class:this.themeClasses})}},methods:{genDefaultSlot:function(){return[this.genSwitch(),this.genLabel()]},genSwitch:function(){return this.$createElement("div",{staticClass:"v-input--selection-controls__input"},[this.genInput("checkbox",Object(w["a"])(Object(w["a"])({},this.attrs),this.attrs$)),this.genRipple(this.setTextColor(this.validationState,{directives:[{name:"touch",value:{left:this.onSwipeLeft,right:this.onSwipeRight}}]})),this.$createElement("div",Object(w["a"])({staticClass:"v-input--switch__track"},this.switchData)),this.$createElement("div",Object(w["a"])({staticClass:"v-input--switch__thumb"},this.switchData),[this.genProgress()])])},genProgress:function(){return this.$createElement(D["c"],{},[!1===this.loading?null:this.$slots.progress||this.$createElement(j["a"],{props:{color:!0===this.loading||""===this.loading?this.color||"primary":this.loading,size:16,width:2,indeterminate:!0}})])},onSwipeLeft:function(){this.isActive&&this.onChange()},onSwipeRight:function(){this.isActive||this.onChange()},onKeydown:function(t){(t.keyCode===O["w"].left&&this.isActive||t.keyCode===O["w"].right&&!this.isActive)&&this.onChange()}}}),E=i("8654"),I=Object(c["a"])(o,n,a,!1,null,null,null);e["default"]=I.exports;h()(I,{VCard:v["a"],VDivider:f["a"],VList:p["a"],VListGroup:d["a"],VListItem:g["a"],VListItemAvatar:m["a"],VListItemContent:y["a"],VListItemTitle:y["c"],VSelect:_["a"],VSlider:b["a"],VSwitch:L,VTextField:E["a"]})},"9d01":function(t,e,i){},ec29:function(t,e,i){}}]);
+//# sourceMappingURL=config.165ed655.js.map
\ No newline at end of file
--- /dev/null
+{"version":3,"sources":["webpack:///./src/views/Config.vue?5e55","webpack:///src/views/Config.vue","webpack:///./src/views/Config.vue?5220","webpack:///../../../src/mixins/rippleable/index.ts","webpack:///../../../src/mixins/selectable/index.ts","webpack:///../../../src/components/VSwitch/VSwitch.ts","webpack:///./src/views/Config.vue"],"names":["render","_vm","this","_h","$createElement","_c","_self","configKey","_e","attrs","_l","conf_value","conf_key","key","on","$event","$router","push","_v","_s","$t","scopedSlots","_u","fn","staticStyle","$server","players","provider_id","name","proxy","conf_item_value","conf_item_key","saveConfig","model","value","callback","$$v","$set","expression","length","toString","staticRenderFns","components","props","data","conf","base","providers","player_settings","active","computed","config_items","result","playerId","created","$store","windowtitle","getConfig","methods","directives","ripple","type","Boolean","default","genRipple","center","e","mixins","prop","event","id","inputValue","falseValue","trueValue","multiple","label","String","hasColor","lazyValue","computedColor","isDark","isMultiple","Array","isActive","input","item","undefined","valueComparator","isDirty","rippleState","watch","genLabel","VInput","click","prevent","genInput","Object","disabled","role","domProps","checked","blur","change","focus","keydown","ref","onBlur","onClick","onChange","onFocus","onKeydown","Touch","inset","loading","flat","classes","validationState","hasError","switchData","setTextColor","class","themeClasses","genDefaultSlot","genSwitch","staticClass","attrs$","left","right","onSwipeRight","genProgress","$slots","progress","VProgressCircular","color","size","width","indeterminate","onSwipeLeft","component","VCard","VDivider","VList","VListGroup","VListItem","VListItemAvatar","VListItemContent","VListItemTitle","VSelect","VSlider","VSwitch","VTextField"],"mappings":"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","file":"js/config.165ed655.js","sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[(!_vm.configKey)?_c('v-card',{attrs:{\"flat\":\"\"}},[_c('v-list',{attrs:{\"tile\":\"\"}},_vm._l((_vm.conf),function(conf_value,conf_key){return _c('v-list-item',{key:conf_key,attrs:{\"tile\":\"\"},on:{\"click\":function($event){return _vm.$router.push('/config/' + conf_key)}}},[_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(_vm.$t(\"conf.\" + conf_key)))])],1)],1)}),1)],1):_vm._e(),(_vm.configKey)?_c('v-card',{attrs:{\"flat\":\"\"}},[_c('v-list',{attrs:{\"two-line\":\"\",\"tile\":\"\"}},_vm._l((_vm.config_items),function(conf_value,conf_key){return _c('v-list-group',{key:conf_key,attrs:{\"no-action\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(){return [(_vm.configKey != 'player_settings')?_c('v-list-item',[_c('v-list-item-avatar',{staticStyle:{\"margin-left\":\"-15px\"},attrs:{\"tile\":\"\"}},[_c('img',{staticStyle:{\"border-radius\":\"5px\",\"border\":\"1px solid rgba(0,0,0,.85)\"},attrs:{\"src\":require('../assets/' + conf_key + '.png')}})]),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(_vm.$t(\"conf.\" + conf_key)))])],1)],1):_vm._e(),(_vm.configKey == 'player_settings')?_c('v-list-item',[_c('v-list-item-avatar',{staticStyle:{\"margin-left\":\"-15px\"},attrs:{\"tile\":\"\"}},[_c('img',{staticStyle:{\"border-radius\":\"5px\",\"border\":\"1px solid rgba(0,0,0,.85)\"},attrs:{\"src\":require('../assets/' + _vm.$server.players[conf_key].provider_id + '.png')}})]),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(_vm.$server.players[conf_key].name))])],1)],1):_vm._e()]},proxy:true}],null,true)},[_c('v-list',{attrs:{\"tile\":\"\"}},[_vm._v(\"> \"),_vm._l((conf_value),function(conf_item_value,conf_item_key){return _c('v-list-item',{key:conf_item_key,attrs:{\"tile\":\"\"}},[(conf_item_value['entry_type'] == 'boolean')?_c('v-switch',{attrs:{\"placeholder\":conf_item_value['default_value'],\"label\":_vm.$t('conf.' + conf_item_value['description_key'])},on:{\"change\":function($event){return _vm.saveConfig(_vm.configKey, conf_key, conf_item_key, conf_item_value['value'])}},model:{value:(conf_item_value['value']),callback:function ($$v) {_vm.$set(conf_item_value, 'value', $$v)},expression:\"conf_item_value['value']\"}}):_vm._e(),(\n (conf_item_value['entry_type'] == 'string' ||\n conf_item_value['entry_type'] == 'integer' ||\n conf_item_value['entry_type'] == 'float') &&\n !conf_item_value['values'].length && !conf_item_value['range'].length\n )?_c('v-text-field',{attrs:{\"placeholder\":conf_item_value['default_value'] ? conf_item_value['default_value'].toString() : '',\"label\":_vm.$t('conf.' + conf_item_value['description_key']),\"filled\":\"\"},on:{\"change\":function($event){return _vm.saveConfig(_vm.configKey, conf_key, conf_item_key, conf_item_value['value'])}},model:{value:(conf_item_value['value']),callback:function ($$v) {_vm.$set(conf_item_value, 'value', $$v)},expression:\"conf_item_value['value']\"}}):_vm._e(),(conf_item_value['entry_type'] == 'password')?_c('v-text-field',{attrs:{\"placeholder\":conf_item_value['default_value'],\"label\":_vm.$t('conf.' + conf_item_value['description_key']),\"type\":\"password\",\"filled\":\"\"},on:{\"change\":function($event){return _vm.saveConfig(_vm.configKey, conf_key, conf_item_key, conf_item_value['value'])}},model:{value:(conf_item_value['value']),callback:function ($$v) {_vm.$set(conf_item_value, 'value', $$v)},expression:\"conf_item_value['value']\"}}):_vm._e(),(\n conf_item_value['values'].length &&\n !conf_item_value['range'].length\n )?_c('v-select',{attrs:{\"chips\":conf_item_value['multi_value'],\"clearable\":\"\",\"multiple\":conf_item_value['multi_value'],\"items\":conf_item_value['values'],\"placeholder\":conf_item_value['default_value'] ? conf_item_value['default_value'].toString() : '',\"label\":_vm.$t('conf.' + conf_item_value['description_key']),\"filled\":\"\"},on:{\"change\":function($event){return _vm.saveConfig(_vm.configKey, conf_key, conf_item_key, conf_item_value['value'])}},model:{value:(conf_item_value['value']),callback:function ($$v) {_vm.$set(conf_item_value, 'value', $$v)},expression:\"conf_item_value['value']\"}}):_vm._e(),(conf_item_value['range'].length)?_c('v-slider',{staticStyle:{\"margin-top\":\"28px\"},attrs:{\"placeholder\":conf_item_value['default_value'].toString(),\"label\":_vm.$t('conf.' + conf_item_value['description_key']),\"min\":conf_item_value['range'][0],\"max\":conf_item_value['range'][1],\"thumb-size\":25,\"thumb-label\":\"always\"},on:{\"change\":function($event){return _vm.saveConfig(_vm.configKey, conf_key, conf_item_key, conf_item_value['value'])}},model:{value:(conf_item_value['value']),callback:function ($$v) {_vm.$set(conf_item_value, 'value', $$v)},expression:\"conf_item_value['value']\"}}):_vm._e()],1)})],2),_c('v-divider')],1)}),1)],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <section>\n <!-- config main menu -->\n <v-card\n flat\n v-if=\"!configKey\"\n >\n <v-list tile>\n <v-list-item\n tile\n v-for=\"(conf_value, conf_key) in conf\"\n :key=\"conf_key\"\n @click=\"$router.push('/config/' + conf_key)\"\n >\n <!-- <v-list-item-icon style=\"margin-left:15px\">\n <v-icon>{{ item.icon }}</v-icon>\n </v-list-item-icon>-->\n <v-list-item-content>\n <v-list-item-title>{{ $t(\"conf.\" + conf_key) }}</v-list-item-title>\n </v-list-item-content>\n </v-list-item>\n </v-list>\n </v-card>\n\n <!-- generic and module settings -->\n <v-card\n flat\n v-if=\"configKey\"\n >\n <v-list\n two-line\n tile\n >\n <v-list-group\n no-action\n v-for=\"(conf_value, conf_key) in config_items\"\n :key=\"conf_key\"\n >\n <template v-slot:activator>\n <v-list-item v-if=\"configKey != 'player_settings'\">\n <v-list-item-avatar\n tile\n style=\"margin-left:-15px\"\n >\n <img\n :src=\"require('../assets/' + conf_key + '.png')\"\n style=\"border-radius:5px;border: 1px solid rgba(0,0,0,.85);\"\n />\n </v-list-item-avatar>\n <v-list-item-content>\n <v-list-item-title>{{ $t(\"conf.\" + conf_key) }}</v-list-item-title>\n </v-list-item-content>\n </v-list-item>\n <v-list-item v-if=\"configKey == 'player_settings'\">\n <v-list-item-avatar\n tile\n style=\"margin-left:-15px\"\n >\n <img\n :src=\"require('../assets/' + $server.players[conf_key].provider_id + '.png')\"\n style=\"border-radius:5px;border: 1px solid rgba(0,0,0,.85);\"\n />\n </v-list-item-avatar>\n <v-list-item-content>\n <v-list-item-title>{{ $server.players[conf_key].name }}</v-list-item-title>\n </v-list-item-content>\n </v-list-item>\n </template>\n <v-list tile>>\n <v-list-item\n tile\n v-for=\"(conf_item_value, conf_item_key) in conf_value\"\n :key=\"conf_item_key\"\n >\n <!-- boolean value: toggle switch -->\n <v-switch\n v-if=\"conf_item_value['entry_type'] == 'boolean'\"\n v-model=\"conf_item_value['value']\"\n :placeholder=\"conf_item_value['default_value']\"\n :label=\"$t('conf.' + conf_item_value['description_key'])\"\n @change=\"saveConfig(configKey, conf_key, conf_item_key, conf_item_value['value'])\"\n ></v-switch>\n <!-- textbox with single value -->\n <v-text-field\n v-if=\"\n (conf_item_value['entry_type'] == 'string' ||\n conf_item_value['entry_type'] == 'integer' ||\n conf_item_value['entry_type'] == 'float') &&\n !conf_item_value['values'].length && !conf_item_value['range'].length\n \"\n v-model=\"conf_item_value['value']\"\n :placeholder=\"conf_item_value['default_value'] ? conf_item_value['default_value'].toString() : ''\"\n :label=\"$t('conf.' + conf_item_value['description_key'])\"\n @change=\"saveConfig(configKey, conf_key, conf_item_key, conf_item_value['value'])\"\n filled\n ></v-text-field>\n <!-- password value -->\n <v-text-field\n v-if=\"conf_item_value['entry_type'] == 'password'\"\n v-model=\"conf_item_value['value']\"\n :placeholder=\"conf_item_value['default_value']\"\n :label=\"$t('conf.' + conf_item_value['description_key'])\"\n type=\"password\"\n @change=\"saveConfig(configKey, conf_key, conf_item_key, conf_item_value['value'])\"\n filled\n ></v-text-field>\n <!-- value with dropdown -->\n <v-select\n :chips=\"conf_item_value['multi_value']\"\n clearable\n :multiple=\"conf_item_value['multi_value']\"\n v-if=\"\n conf_item_value['values'].length &&\n !conf_item_value['range'].length\n \"\n v-model=\"conf_item_value['value']\"\n :items=\"conf_item_value['values']\"\n :placeholder=\"conf_item_value['default_value'] ? conf_item_value['default_value'].toString() : ''\"\n :label=\"$t('conf.' + conf_item_value['description_key'])\"\n filled\n @change=\"saveConfig(configKey, conf_key, conf_item_key, conf_item_value['value'])\"\n ></v-select>\n <!-- value with range -->\n <v-slider\n style=\"margin-top:28px;\"\n v-if=\"conf_item_value['range'].length\"\n :placeholder=\"conf_item_value['default_value'].toString()\"\n v-model=\"conf_item_value['value']\"\n :label=\"$t('conf.' + conf_item_value['description_key'])\"\n @change=\"saveConfig(configKey, conf_key, conf_item_key, conf_item_value['value'])\"\n :min=\"conf_item_value['range'][0]\"\n :max=\"conf_item_value['range'][1]\"\n :thumb-size=\"25\"\n thumb-label=\"always\"\n ></v-slider>\n </v-list-item>\n </v-list>\n <v-divider></v-divider>\n </v-list-group>\n </v-list>\n </v-card>\n </section>\n</template>\n\n<script>\nimport Vue from 'vue'\nexport default {\n components: {},\n props: ['configKey'],\n data () {\n return {\n conf: {\n base: {},\n providers: {},\n player_settings: {}\n },\n players: {},\n active: 0\n }\n },\n computed: {\n config_items () {\n if (!this.conf) return {}\n if (this.configKey === 'player_settings') {\n if (this.$server.players) {\n var result = {}\n for (const playerId in this.$server.players) {\n result[playerId] = this.conf.player_settings[playerId]\n }\n }\n return result\n } else if (this.configKey !== 'player_settings') {\n return this.conf[this.configKey]\n } else return this.conf\n }\n },\n created () {\n this.$store.windowtitle = this.$t('settings')\n if (this.configKey) {\n this.$store.windowtitle += ' | ' + this.$t('conf.' + this.configKey)\n }\n this.getConfig()\n },\n methods: {\n async getConfig () {\n if (!this.configKey) return\n const conf = await this.$server.getData('config/' + this.configKey)\n Vue.set(this.conf, this.configKey, conf)\n },\n async saveConfig (baseKey, key, entryKey, newvalue) {\n const endpoint = 'config/' + baseKey + '/' + key + '/' + entryKey\n await this.$server.putData(endpoint, newvalue)\n }\n }\n}\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Config.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Config.vue?vue&type=script&lang=js&\"","// Directives\nimport ripple from '../../directives/ripple'\n\n// Types\nimport Vue, { VNode, VNodeData, VNodeDirective } from 'vue'\n\nexport default Vue.extend({\n name: 'rippleable',\n\n directives: { ripple },\n\n props: {\n ripple: {\n type: [Boolean, Object],\n default: true,\n },\n },\n\n methods: {\n genRipple (data: VNodeData = {}): VNode | null {\n if (!this.ripple) return null\n\n data.staticClass = 'v-input--selection-controls__ripple'\n\n data.directives = data.directives || []\n data.directives.push({\n name: 'ripple',\n value: { center: true },\n } as VNodeDirective)\n\n return this.$createElement('div', data)\n },\n },\n})\n","// Components\nimport VInput from '../../components/VInput'\n\n// Mixins\nimport Rippleable from '../rippleable'\nimport Comparable from '../comparable'\n\n// Utilities\nimport mixins from '../../util/mixins'\n\nexport function prevent (e: Event) {\n e.preventDefault()\n}\n\n/* @vue/component */\nexport default mixins(\n VInput,\n Rippleable,\n Comparable\n).extend({\n name: 'selectable',\n\n model: {\n prop: 'inputValue',\n event: 'change',\n },\n\n props: {\n id: String,\n inputValue: null as any,\n falseValue: null as any,\n trueValue: null as any,\n multiple: {\n type: Boolean,\n default: null,\n },\n label: String,\n },\n\n data () {\n return {\n hasColor: this.inputValue,\n lazyValue: this.inputValue,\n }\n },\n\n computed: {\n computedColor (): string | undefined {\n if (!this.isActive) return undefined\n if (this.color) return this.color\n if (this.isDark && !this.appIsDark) return 'white'\n return 'primary'\n },\n isMultiple (): boolean {\n return this.multiple === true || (this.multiple === null && Array.isArray(this.internalValue))\n },\n isActive (): boolean {\n const value = this.value\n const input = this.internalValue\n\n if (this.isMultiple) {\n if (!Array.isArray(input)) return false\n\n return input.some(item => this.valueComparator(item, value))\n }\n\n if (this.trueValue === undefined || this.falseValue === undefined) {\n return value\n ? this.valueComparator(value, input)\n : Boolean(input)\n }\n\n return this.valueComparator(input, this.trueValue)\n },\n isDirty (): boolean {\n return this.isActive\n },\n rippleState (): string | undefined {\n return !this.isDisabled && !this.validationState\n ? undefined\n : this.validationState\n },\n },\n\n watch: {\n inputValue (val) {\n this.lazyValue = val\n this.hasColor = val\n },\n },\n\n methods: {\n genLabel () {\n const label = VInput.options.methods.genLabel.call(this)\n\n if (!label) return label\n\n label!.data!.on = {\n // Label shouldn't cause the input to focus\n click: prevent,\n }\n\n return label\n },\n genInput (type: string, attrs: object) {\n return this.$createElement('input', {\n attrs: Object.assign({\n 'aria-checked': this.isActive.toString(),\n disabled: this.isDisabled,\n id: this.computedId,\n role: type,\n type,\n }, attrs),\n domProps: {\n value: this.value,\n checked: this.isActive,\n },\n on: {\n blur: this.onBlur,\n change: this.onChange,\n focus: this.onFocus,\n keydown: this.onKeydown,\n click: prevent,\n },\n ref: 'input',\n })\n },\n onBlur () {\n this.isFocused = false\n },\n onClick (e: Event) {\n this.onChange()\n this.$emit('click', e)\n },\n onChange () {\n if (!this.isInteractive) return\n\n const value = this.value\n let input = this.internalValue\n\n if (this.isMultiple) {\n if (!Array.isArray(input)) {\n input = []\n }\n\n const length = input.length\n\n input = input.filter((item: any) => !this.valueComparator(item, value))\n\n if (input.length === length) {\n input.push(value)\n }\n } else if (this.trueValue !== undefined && this.falseValue !== undefined) {\n input = this.valueComparator(input, this.trueValue) ? this.falseValue : this.trueValue\n } else if (value) {\n input = this.valueComparator(input, value) ? null : value\n } else {\n input = !input\n }\n\n this.validate(true, input)\n this.internalValue = input\n this.hasColor = input\n },\n onFocus () {\n this.isFocused = true\n },\n /** @abstract */\n onKeydown (e: Event) {},\n },\n})\n","// Styles\nimport '../../styles/components/_selection-controls.sass'\nimport './VSwitch.sass'\n\n// Mixins\nimport Selectable from '../../mixins/selectable'\nimport VInput from '../VInput'\n\n// Directives\nimport Touch from '../../directives/touch'\n\n// Components\nimport { VFabTransition } from '../transitions'\nimport VProgressCircular from '../VProgressCircular/VProgressCircular'\n\n// Helpers\nimport { keyCodes } from '../../util/helpers'\n\n// Types\nimport { VNode, VNodeData } from 'vue'\n\n/* @vue/component */\nexport default Selectable.extend({\n name: 'v-switch',\n\n directives: { Touch },\n\n props: {\n inset: Boolean,\n loading: {\n type: [Boolean, String],\n default: false,\n },\n flat: {\n type: Boolean,\n default: false,\n },\n },\n\n computed: {\n classes (): object {\n return {\n ...VInput.options.computed.classes.call(this),\n 'v-input--selection-controls v-input--switch': true,\n 'v-input--switch--flat': this.flat,\n 'v-input--switch--inset': this.inset,\n }\n },\n attrs (): object {\n return {\n 'aria-checked': String(this.isActive),\n 'aria-disabled': String(this.isDisabled),\n role: 'switch',\n }\n },\n // Do not return undefined if disabled,\n // according to spec, should still show\n // a color when disabled and active\n validationState (): string | undefined {\n if (this.hasError && this.shouldValidate) return 'error'\n if (this.hasSuccess) return 'success'\n if (this.hasColor !== null) return this.computedColor\n return undefined\n },\n switchData (): VNodeData {\n return this.setTextColor(this.loading ? undefined : this.validationState, {\n class: this.themeClasses,\n })\n },\n },\n\n methods: {\n genDefaultSlot (): (VNode | null)[] {\n return [\n this.genSwitch(),\n this.genLabel(),\n ]\n },\n genSwitch (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-input--selection-controls__input',\n }, [\n this.genInput('checkbox', {\n ...this.attrs,\n ...this.attrs$,\n }),\n this.genRipple(this.setTextColor(this.validationState, {\n directives: [{\n name: 'touch',\n value: {\n left: this.onSwipeLeft,\n right: this.onSwipeRight,\n },\n }],\n })),\n this.$createElement('div', {\n staticClass: 'v-input--switch__track',\n ...this.switchData,\n }),\n this.$createElement('div', {\n staticClass: 'v-input--switch__thumb',\n ...this.switchData,\n }, [this.genProgress()]),\n ])\n },\n genProgress (): VNode {\n return this.$createElement(VFabTransition, {}, [\n this.loading === false\n ? null\n : this.$slots.progress || this.$createElement(VProgressCircular, {\n props: {\n color: (this.loading === true || this.loading === '')\n ? (this.color || 'primary')\n : this.loading,\n size: 16,\n width: 2,\n indeterminate: true,\n },\n }),\n ])\n },\n onSwipeLeft () {\n if (this.isActive) this.onChange()\n },\n onSwipeRight () {\n if (!this.isActive) this.onChange()\n },\n onKeydown (e: KeyboardEvent) {\n if (\n (e.keyCode === keyCodes.left && this.isActive) ||\n (e.keyCode === keyCodes.right && !this.isActive)\n ) this.onChange()\n },\n },\n})\n","import { render, staticRenderFns } from \"./Config.vue?vue&type=template&id=0e5e0231&\"\nimport script from \"./Config.vue?vue&type=script&lang=js&\"\nexport * from \"./Config.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListGroup } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAvatar } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VSelect } from 'vuetify/lib/components/VSelect';\nimport { VSlider } from 'vuetify/lib/components/VSlider';\nimport { VSwitch } from 'vuetify/lib/components/VSwitch';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\ninstallComponents(component, {VCard,VDivider,VList,VListGroup,VListItem,VListItemAvatar,VListItemContent,VListItemTitle,VSelect,VSlider,VSwitch,VTextField})\n"],"sourceRoot":""}
\ No newline at end of file
+++ /dev/null
-(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["config"],{1071:function(t,e,i){"use strict";i.r(e);var n=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("section",[t.configKey?t._e():n("v-card",{attrs:{flat:""}},[n("v-list",{attrs:{tile:""}},t._l(t.conf,(function(e,i){return n("v-list-item",{key:i,attrs:{tile:""},on:{click:function(e){return t.$router.push("/config/"+i)}}},[n("v-list-item-content",[n("v-list-item-title",[t._v(t._s(t.$t("conf."+i)))])],1)],1)})),1)],1),t.configKey?n("v-card",{attrs:{flat:""}},[n("v-list",{attrs:{"two-line":"",tile:""}},t._l(t.config_items,(function(e,s){return n("v-list-group",{key:s,attrs:{"no-action":""},scopedSlots:t._u([{key:"activator",fn:function(){return["player_settings"!=t.configKey?n("v-list-item",[n("v-list-item-avatar",{staticStyle:{"margin-left":"-15px"},attrs:{tile:""}},[n("img",{staticStyle:{"border-radius":"5px",border:"1px solid rgba(0,0,0,.85)"},attrs:{src:i("9e01")("./"+s+".png")}})]),n("v-list-item-content",[n("v-list-item-title",[t._v(t._s(t.$t("conf."+s)))])],1)],1):t._e(),"player_settings"==t.configKey?n("v-list-item",[t._v("> "),n("v-list-item-avatar",{staticStyle:{"margin-left":"-15px"},attrs:{tile:""}},[n("img",{staticStyle:{"border-radius":"5px",border:"1px solid rgba(0,0,0,.85)"},attrs:{src:i("9e01")("./"+t.$server.players[s].provider_id+".png")}})]),n("v-list-item-content",[n("v-list-item-title",[t._v(t._s(t.$server.players[s].name))])],1)],1):t._e()]},proxy:!0}],null,!0)},[n("v-list",{attrs:{tile:""}},[t._v("> "),t._l(e,(function(e,i){return n("v-list-item",{key:i,attrs:{tile:""}},["boolean"==e["entry_type"]?n("v-switch",{attrs:{placeholder:e["default_value"],label:t.$t("conf."+e["description_key"])},on:{change:function(n){return t.saveConfig(t.configKey,s,i,e["value"])}},model:{value:e["value"],callback:function(i){t.$set(e,"value",i)},expression:"conf_item_value['value']"}}):t._e(),"string"!=e["entry_type"]&&"integer"!=e["entry_type"]&&"float"!=e["entry_type"]||e["values"].length?t._e():n("v-text-field",{attrs:{placeholder:e["default_value"]?e["default_value"].toString():"",label:t.$t("conf."+e["description_key"]),filled:""},on:{change:function(n){return t.saveConfig(t.configKey,s,i,e["value"])}},model:{value:e["value"],callback:function(i){t.$set(e,"value",i)},expression:"conf_item_value['value']"}}),"password"==e["entry_type"]?n("v-text-field",{attrs:{placeholder:e["default_value"],label:t.$t("conf."+e["description_key"]),type:"password",filled:""},on:{change:function(n){return t.saveConfig(t.configKey,s,i,e["value"])}},model:{value:e["value"],callback:function(i){t.$set(e,"value",i)},expression:"conf_item_value['value']"}}):t._e(),e["values"].length&&!e["range"].length?n("v-select",{attrs:{chips:"",clearable:"",multiple:e["multi_value"],items:e["values"],placeholder:e["default_value"]?e["default_value"].toString():"",label:t.$t("conf."+e["description_key"]),filled:""},on:{change:function(n){return t.saveConfig(t.configKey,s,i,e["value"])}},model:{value:e["value"],callback:function(i){t.$set(e,"value",i)},expression:"conf_item_value['value']"}}):t._e()],1)}))],2),n("v-divider")],1)})),1)],1):t._e()],1)},s=[],a=(i("96cf"),i("c964")),r=i("2b0e"),l={components:{},props:["configKey"],data:function(){return{conf:{base:{},providers:{},player_settings:{}},players:{},active:0}},computed:{config_items:function(){if(!this.conf)return{};if("player_settings"===this.configKey){if(this.$server.players){var t={};for(var e in this.$server.players)t[e]=this.conf.player_settings[e]}return t}return"player_settings"!==this.configKey?this.conf[this.configKey]:this.conf}},created:function(){this.$store.windowtitle=this.$t("settings"),this.configKey&&(this.$store.windowtitle+=" | "+this.$t("conf."+this.configKey)),this.getConfig()},methods:{getConfig:function(){var t=this;return Object(a["a"])(regeneratorRuntime.mark((function e(){var i;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:if(t.configKey){e.next=2;break}return e.abrupt("return");case 2:return e.next=4,t.$server.getData("config/"+t.configKey);case 4:i=e.sent,r["a"].set(t.conf,t.configKey,i);case 6:case"end":return e.stop()}}),e)})))()},saveConfig:function(t,e,i,n){var s=this;return Object(a["a"])(regeneratorRuntime.mark((function a(){var r;return regeneratorRuntime.wrap((function(a){while(1)switch(a.prev=a.next){case 0:return r="config/"+t+"/"+e+"/"+i,a.next=3,s.$server.putData(r,n);case 3:case"end":return a.stop()}}),a)})))()}}},o=l,c=i("2877"),u=i("6544"),h=i.n(u),f=i("b0af"),v=i("ce7e"),p=i("8860"),d=i("56b0"),g=i("da13"),m=i("8270"),y=i("5d23"),_=i("b974"),b=(i("0481"),i("4069"),i("f3f3")),w=(i("ec29"),i("9d01"),i("4de4"),i("45fc"),i("d3b7"),i("25f0"),i("c37a")),C=i("5607"),V=r["a"].extend({name:"rippleable",directives:{ripple:C["a"]},props:{ripple:{type:[Boolean,Object],default:!0}},methods:{genRipple:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.ripple?(t.staticClass="v-input--selection-controls__ripple",t.directives=t.directives||[],t.directives.push({name:"ripple",value:{center:!0}}),this.$createElement("div",t)):null}}}),k=i("8547"),$=i("58df");function S(t){t.preventDefault()}var x=Object($["a"])(w["a"],V,k["a"]).extend({name:"selectable",model:{prop:"inputValue",event:"change"},props:{id:String,inputValue:null,falseValue:null,trueValue:null,multiple:{type:Boolean,default:null},label:String},data:function(){return{hasColor:this.inputValue,lazyValue:this.inputValue}},computed:{computedColor:function(){if(this.isActive)return this.color?this.color:this.isDark&&!this.appIsDark?"white":"primary"},isMultiple:function(){return!0===this.multiple||null===this.multiple&&Array.isArray(this.internalValue)},isActive:function(){var t=this,e=this.value,i=this.internalValue;return this.isMultiple?!!Array.isArray(i)&&i.some((function(i){return t.valueComparator(i,e)})):void 0===this.trueValue||void 0===this.falseValue?e?this.valueComparator(e,i):Boolean(i):this.valueComparator(i,this.trueValue)},isDirty:function(){return this.isActive},rippleState:function(){return this.isDisabled||this.validationState?this.validationState:void 0}},watch:{inputValue:function(t){this.lazyValue=t,this.hasColor=t}},methods:{genLabel:function(){var t=w["a"].options.methods.genLabel.call(this);return t?(t.data.on={click:S},t):t},genInput:function(t,e){return this.$createElement("input",{attrs:Object.assign({"aria-checked":this.isActive.toString(),disabled:this.isDisabled,id:this.computedId,role:t,type:t},e),domProps:{value:this.value,checked:this.isActive},on:{blur:this.onBlur,change:this.onChange,focus:this.onFocus,keydown:this.onKeydown,click:S},ref:"input"})},onBlur:function(){this.isFocused=!1},onClick:function(t){this.onChange(),this.$emit("click",t)},onChange:function(){var t=this;if(this.isInteractive){var e=this.value,i=this.internalValue;if(this.isMultiple){Array.isArray(i)||(i=[]);var n=i.length;i=i.filter((function(i){return!t.valueComparator(i,e)})),i.length===n&&i.push(e)}else i=void 0!==this.trueValue&&void 0!==this.falseValue?this.valueComparator(i,this.trueValue)?this.falseValue:this.trueValue:e?this.valueComparator(i,e)?null:e:!i;this.validate(!0,i),this.internalValue=i,this.hasColor=i}},onFocus:function(){this.isFocused=!0},onKeydown:function(t){}}}),K=i("c3f0"),A=i("0789"),D=i("490a"),j=i("80d2"),O=x.extend({name:"v-switch",directives:{Touch:K["a"]},props:{inset:Boolean,loading:{type:[Boolean,String],default:!1},flat:{type:Boolean,default:!1}},computed:{classes:function(){return Object(b["a"])(Object(b["a"])({},w["a"].options.computed.classes.call(this)),{},{"v-input--selection-controls v-input--switch":!0,"v-input--switch--flat":this.flat,"v-input--switch--inset":this.inset})},attrs:function(){return{"aria-checked":String(this.isActive),"aria-disabled":String(this.isDisabled),role:"switch"}},validationState:function(){return this.hasError&&this.shouldValidate?"error":this.hasSuccess?"success":null!==this.hasColor?this.computedColor:void 0},switchData:function(){return this.setTextColor(this.loading?void 0:this.validationState,{class:this.themeClasses})}},methods:{genDefaultSlot:function(){return[this.genSwitch(),this.genLabel()]},genSwitch:function(){return this.$createElement("div",{staticClass:"v-input--selection-controls__input"},[this.genInput("checkbox",Object(b["a"])(Object(b["a"])({},this.attrs),this.attrs$)),this.genRipple(this.setTextColor(this.validationState,{directives:[{name:"touch",value:{left:this.onSwipeLeft,right:this.onSwipeRight}}]})),this.$createElement("div",Object(b["a"])({staticClass:"v-input--switch__track"},this.switchData)),this.$createElement("div",Object(b["a"])({staticClass:"v-input--switch__thumb"},this.switchData),[this.genProgress()])])},genProgress:function(){return this.$createElement(A["c"],{},[!1===this.loading?null:this.$slots.progress||this.$createElement(D["a"],{props:{color:!0===this.loading||""===this.loading?this.color||"primary":this.loading,size:16,width:2,indeterminate:!0}})])},onSwipeLeft:function(){this.isActive&&this.onChange()},onSwipeRight:function(){this.isActive||this.onChange()},onKeydown:function(t){(t.keyCode===j["w"].left&&this.isActive||t.keyCode===j["w"].right&&!this.isActive)&&this.onChange()}}}),L=i("8654"),E=Object(c["a"])(o,n,s,!1,null,null,null);e["default"]=E.exports;h()(E,{VCard:f["a"],VDivider:v["a"],VList:p["a"],VListGroup:d["a"],VListItem:g["a"],VListItemAvatar:m["a"],VListItemContent:y["a"],VListItemTitle:y["c"],VSelect:_["a"],VSwitch:O,VTextField:L["a"]})},"9d01":function(t,e,i){},ec29:function(t,e,i){}}]);
-//# sourceMappingURL=config.6e3bd196.js.map
\ No newline at end of file
+++ /dev/null
-{"version":3,"sources":["webpack:///./src/views/Config.vue?755e","webpack:///src/views/Config.vue","webpack:///./src/views/Config.vue?5220","webpack:///../../../src/mixins/rippleable/index.ts","webpack:///../../../src/mixins/selectable/index.ts","webpack:///../../../src/components/VSwitch/VSwitch.ts","webpack:///./src/views/Config.vue"],"names":["render","_vm","this","_h","$createElement","_c","_self","configKey","_e","attrs","_l","conf_value","conf_key","key","on","$event","$router","push","_v","_s","$t","scopedSlots","_u","fn","staticStyle","$server","players","provider_id","name","proxy","conf_item_value","conf_item_key","saveConfig","model","value","callback","$$v","$set","expression","length","toString","staticRenderFns","components","props","data","conf","base","providers","player_settings","active","computed","config_items","result","playerId","created","$store","windowtitle","getConfig","methods","directives","ripple","type","Boolean","default","genRipple","center","e","mixins","prop","event","id","inputValue","falseValue","trueValue","multiple","label","String","hasColor","lazyValue","computedColor","isDark","isMultiple","Array","isActive","input","item","undefined","valueComparator","isDirty","rippleState","watch","genLabel","VInput","click","prevent","genInput","Object","disabled","role","domProps","checked","blur","change","focus","keydown","ref","onBlur","onClick","onChange","onFocus","onKeydown","Touch","inset","loading","flat","classes","validationState","hasError","switchData","setTextColor","class","themeClasses","genDefaultSlot","genSwitch","staticClass","attrs$","left","right","onSwipeRight","genProgress","$slots","progress","VProgressCircular","color","size","width","indeterminate","onSwipeLeft","component","VCard","VDivider","VList","VListGroup","VListItem","VListItemAvatar","VListItemContent","VListItemTitle","VSelect","VSwitch","VTextField"],"mappings":"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","file":"js/config.6e3bd196.js","sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[(!_vm.configKey)?_c('v-card',{attrs:{\"flat\":\"\"}},[_c('v-list',{attrs:{\"tile\":\"\"}},_vm._l((_vm.conf),function(conf_value,conf_key){return _c('v-list-item',{key:conf_key,attrs:{\"tile\":\"\"},on:{\"click\":function($event){return _vm.$router.push('/config/' + conf_key)}}},[_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(_vm.$t(\"conf.\" + conf_key)))])],1)],1)}),1)],1):_vm._e(),(_vm.configKey)?_c('v-card',{attrs:{\"flat\":\"\"}},[_c('v-list',{attrs:{\"two-line\":\"\",\"tile\":\"\"}},_vm._l((_vm.config_items),function(conf_value,conf_key){return _c('v-list-group',{key:conf_key,attrs:{\"no-action\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(){return [(_vm.configKey != 'player_settings')?_c('v-list-item',[_c('v-list-item-avatar',{staticStyle:{\"margin-left\":\"-15px\"},attrs:{\"tile\":\"\"}},[_c('img',{staticStyle:{\"border-radius\":\"5px\",\"border\":\"1px solid rgba(0,0,0,.85)\"},attrs:{\"src\":require('../assets/' + conf_key + '.png')}})]),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(_vm.$t(\"conf.\" + conf_key)))])],1)],1):_vm._e(),(_vm.configKey == 'player_settings')?_c('v-list-item',[_vm._v(\"> \"),_c('v-list-item-avatar',{staticStyle:{\"margin-left\":\"-15px\"},attrs:{\"tile\":\"\"}},[_c('img',{staticStyle:{\"border-radius\":\"5px\",\"border\":\"1px solid rgba(0,0,0,.85)\"},attrs:{\"src\":require('../assets/' + _vm.$server.players[conf_key].provider_id + '.png')}})]),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(_vm.$server.players[conf_key].name))])],1)],1):_vm._e()]},proxy:true}],null,true)},[_c('v-list',{attrs:{\"tile\":\"\"}},[_vm._v(\"> \"),_vm._l((conf_value),function(conf_item_value,conf_item_key){return _c('v-list-item',{key:conf_item_key,attrs:{\"tile\":\"\"}},[(conf_item_value['entry_type'] == 'boolean')?_c('v-switch',{attrs:{\"placeholder\":conf_item_value['default_value'],\"label\":_vm.$t('conf.' + conf_item_value['description_key'])},on:{\"change\":function($event){return _vm.saveConfig(_vm.configKey, conf_key, conf_item_key, conf_item_value['value'])}},model:{value:(conf_item_value['value']),callback:function ($$v) {_vm.$set(conf_item_value, 'value', $$v)},expression:\"conf_item_value['value']\"}}):_vm._e(),(\n (conf_item_value['entry_type'] == 'string' ||\n conf_item_value['entry_type'] == 'integer' ||\n conf_item_value['entry_type'] == 'float') &&\n !conf_item_value['values'].length\n )?_c('v-text-field',{attrs:{\"placeholder\":conf_item_value['default_value'] ? conf_item_value['default_value'].toString() : '',\"label\":_vm.$t('conf.' + conf_item_value['description_key']),\"filled\":\"\"},on:{\"change\":function($event){return _vm.saveConfig(_vm.configKey, conf_key, conf_item_key, conf_item_value['value'])}},model:{value:(conf_item_value['value']),callback:function ($$v) {_vm.$set(conf_item_value, 'value', $$v)},expression:\"conf_item_value['value']\"}}):_vm._e(),(conf_item_value['entry_type'] == 'password')?_c('v-text-field',{attrs:{\"placeholder\":conf_item_value['default_value'],\"label\":_vm.$t('conf.' + conf_item_value['description_key']),\"type\":\"password\",\"filled\":\"\"},on:{\"change\":function($event){return _vm.saveConfig(_vm.configKey, conf_key, conf_item_key, conf_item_value['value'])}},model:{value:(conf_item_value['value']),callback:function ($$v) {_vm.$set(conf_item_value, 'value', $$v)},expression:\"conf_item_value['value']\"}}):_vm._e(),(\n conf_item_value['values'].length &&\n !conf_item_value['range'].length\n )?_c('v-select',{attrs:{\"chips\":\"\",\"clearable\":\"\",\"multiple\":conf_item_value['multi_value'],\"items\":conf_item_value['values'],\"placeholder\":conf_item_value['default_value'] ? conf_item_value['default_value'].toString() : '',\"label\":_vm.$t('conf.' + conf_item_value['description_key']),\"filled\":\"\"},on:{\"change\":function($event){return _vm.saveConfig(_vm.configKey, conf_key, conf_item_key, conf_item_value['value'])}},model:{value:(conf_item_value['value']),callback:function ($$v) {_vm.$set(conf_item_value, 'value', $$v)},expression:\"conf_item_value['value']\"}}):_vm._e()],1)})],2),_c('v-divider')],1)}),1)],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <section>\n <!-- config main menu -->\n <v-card\n flat\n v-if=\"!configKey\"\n >\n <v-list tile>\n <v-list-item\n tile\n v-for=\"(conf_value, conf_key) in conf\"\n :key=\"conf_key\"\n @click=\"$router.push('/config/' + conf_key)\"\n >\n <!-- <v-list-item-icon style=\"margin-left:15px\">\n <v-icon>{{ item.icon }}</v-icon>\n </v-list-item-icon>-->\n <v-list-item-content>\n <v-list-item-title>{{ $t(\"conf.\" + conf_key) }}</v-list-item-title>\n </v-list-item-content>\n </v-list-item>\n </v-list>\n </v-card>\n\n <!-- generic and module settings -->\n <v-card\n flat\n v-if=\"configKey\"\n >\n <v-list\n two-line\n tile\n >\n <v-list-group\n no-action\n v-for=\"(conf_value, conf_key) in config_items\"\n :key=\"conf_key\"\n >\n <template v-slot:activator>\n <v-list-item v-if=\"configKey != 'player_settings'\">\n <v-list-item-avatar\n tile\n style=\"margin-left:-15px\"\n >\n <img\n :src=\"require('../assets/' + conf_key + '.png')\"\n style=\"border-radius:5px;border: 1px solid rgba(0,0,0,.85);\"\n />\n </v-list-item-avatar>\n <v-list-item-content>\n <v-list-item-title>{{ $t(\"conf.\" + conf_key) }}</v-list-item-title>\n </v-list-item-content>\n </v-list-item>\n <v-list-item v-if=\"configKey == 'player_settings'\">>\n <v-list-item-avatar\n tile\n style=\"margin-left:-15px\"\n >\n <img\n :src=\"require('../assets/' + $server.players[conf_key].provider_id + '.png')\"\n style=\"border-radius:5px;border: 1px solid rgba(0,0,0,.85);\"\n />\n </v-list-item-avatar>\n <v-list-item-content>\n <v-list-item-title>{{ $server.players[conf_key].name }}</v-list-item-title>\n </v-list-item-content>\n </v-list-item>\n </template>\n <v-list tile>>\n <v-list-item\n tile\n v-for=\"(conf_item_value, conf_item_key) in conf_value\"\n :key=\"conf_item_key\"\n >\n <!-- boolean value: toggle switch -->\n <v-switch\n v-if=\"conf_item_value['entry_type'] == 'boolean'\"\n v-model=\"conf_item_value['value']\"\n :placeholder=\"conf_item_value['default_value']\"\n :label=\"$t('conf.' + conf_item_value['description_key'])\"\n @change=\"saveConfig(configKey, conf_key, conf_item_key, conf_item_value['value'])\"\n ></v-switch>\n <!-- textbox with single value -->\n <v-text-field\n v-if=\"\n (conf_item_value['entry_type'] == 'string' ||\n conf_item_value['entry_type'] == 'integer' ||\n conf_item_value['entry_type'] == 'float') &&\n !conf_item_value['values'].length\n \"\n v-model=\"conf_item_value['value']\"\n :placeholder=\"conf_item_value['default_value'] ? conf_item_value['default_value'].toString() : ''\"\n :label=\"$t('conf.' + conf_item_value['description_key'])\"\n @change=\"saveConfig(configKey, conf_key, conf_item_key, conf_item_value['value'])\"\n filled\n ></v-text-field>\n <!-- password value -->\n <v-text-field\n v-if=\"conf_item_value['entry_type'] == 'password'\"\n v-model=\"conf_item_value['value']\"\n :placeholder=\"conf_item_value['default_value']\"\n :label=\"$t('conf.' + conf_item_value['description_key'])\"\n type=\"password\"\n @change=\"saveConfig(configKey, conf_key, conf_item_key, conf_item_value['value'])\"\n filled\n ></v-text-field>\n <!-- value with dropdown -->\n <v-select chips clearable\n :multiple=\"conf_item_value['multi_value']\"\n v-if=\"\n conf_item_value['values'].length &&\n !conf_item_value['range'].length\n \"\n v-model=\"conf_item_value['value']\"\n :items=\"conf_item_value['values']\"\n :placeholder=\"conf_item_value['default_value'] ? conf_item_value['default_value'].toString() : ''\"\n :label=\"$t('conf.' + conf_item_value['description_key'])\"\n filled\n @change=\"saveConfig(configKey, conf_key, conf_item_key, conf_item_value['value'])\"\n ></v-select>\n </v-list-item>\n </v-list>\n <v-divider></v-divider>\n </v-list-group>\n </v-list>\n </v-card>\n </section>\n</template>\n\n<script>\nimport Vue from 'vue'\nexport default {\n components: {},\n props: ['configKey'],\n data () {\n return {\n conf: {\n base: {},\n providers: {},\n player_settings: {}\n },\n players: {},\n active: 0\n }\n },\n computed: {\n config_items () {\n if (!this.conf) return {}\n if (this.configKey === 'player_settings') {\n if (this.$server.players) {\n var result = {}\n for (const playerId in this.$server.players) {\n result[playerId] = this.conf.player_settings[playerId]\n }\n }\n return result\n } else if (this.configKey !== 'player_settings') {\n return this.conf[this.configKey]\n } else return this.conf\n }\n },\n created () {\n this.$store.windowtitle = this.$t('settings')\n if (this.configKey) {\n this.$store.windowtitle += ' | ' + this.$t('conf.' + this.configKey)\n }\n this.getConfig()\n },\n methods: {\n async getConfig () {\n if (!this.configKey) return\n const conf = await this.$server.getData('config/' + this.configKey)\n Vue.set(this.conf, this.configKey, conf)\n },\n async saveConfig (baseKey, key, entryKey, newvalue) {\n const endpoint = 'config/' + baseKey + '/' + key + '/' + entryKey\n await this.$server.putData(endpoint, newvalue)\n }\n }\n}\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Config.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Config.vue?vue&type=script&lang=js&\"","// Directives\nimport ripple from '../../directives/ripple'\n\n// Types\nimport Vue, { VNode, VNodeData, VNodeDirective } from 'vue'\n\nexport default Vue.extend({\n name: 'rippleable',\n\n directives: { ripple },\n\n props: {\n ripple: {\n type: [Boolean, Object],\n default: true,\n },\n },\n\n methods: {\n genRipple (data: VNodeData = {}): VNode | null {\n if (!this.ripple) return null\n\n data.staticClass = 'v-input--selection-controls__ripple'\n\n data.directives = data.directives || []\n data.directives.push({\n name: 'ripple',\n value: { center: true },\n } as VNodeDirective)\n\n return this.$createElement('div', data)\n },\n },\n})\n","// Components\nimport VInput from '../../components/VInput'\n\n// Mixins\nimport Rippleable from '../rippleable'\nimport Comparable from '../comparable'\n\n// Utilities\nimport mixins from '../../util/mixins'\n\nexport function prevent (e: Event) {\n e.preventDefault()\n}\n\n/* @vue/component */\nexport default mixins(\n VInput,\n Rippleable,\n Comparable\n).extend({\n name: 'selectable',\n\n model: {\n prop: 'inputValue',\n event: 'change',\n },\n\n props: {\n id: String,\n inputValue: null as any,\n falseValue: null as any,\n trueValue: null as any,\n multiple: {\n type: Boolean,\n default: null,\n },\n label: String,\n },\n\n data () {\n return {\n hasColor: this.inputValue,\n lazyValue: this.inputValue,\n }\n },\n\n computed: {\n computedColor (): string | undefined {\n if (!this.isActive) return undefined\n if (this.color) return this.color\n if (this.isDark && !this.appIsDark) return 'white'\n return 'primary'\n },\n isMultiple (): boolean {\n return this.multiple === true || (this.multiple === null && Array.isArray(this.internalValue))\n },\n isActive (): boolean {\n const value = this.value\n const input = this.internalValue\n\n if (this.isMultiple) {\n if (!Array.isArray(input)) return false\n\n return input.some(item => this.valueComparator(item, value))\n }\n\n if (this.trueValue === undefined || this.falseValue === undefined) {\n return value\n ? this.valueComparator(value, input)\n : Boolean(input)\n }\n\n return this.valueComparator(input, this.trueValue)\n },\n isDirty (): boolean {\n return this.isActive\n },\n rippleState (): string | undefined {\n return !this.isDisabled && !this.validationState\n ? undefined\n : this.validationState\n },\n },\n\n watch: {\n inputValue (val) {\n this.lazyValue = val\n this.hasColor = val\n },\n },\n\n methods: {\n genLabel () {\n const label = VInput.options.methods.genLabel.call(this)\n\n if (!label) return label\n\n label!.data!.on = {\n // Label shouldn't cause the input to focus\n click: prevent,\n }\n\n return label\n },\n genInput (type: string, attrs: object) {\n return this.$createElement('input', {\n attrs: Object.assign({\n 'aria-checked': this.isActive.toString(),\n disabled: this.isDisabled,\n id: this.computedId,\n role: type,\n type,\n }, attrs),\n domProps: {\n value: this.value,\n checked: this.isActive,\n },\n on: {\n blur: this.onBlur,\n change: this.onChange,\n focus: this.onFocus,\n keydown: this.onKeydown,\n click: prevent,\n },\n ref: 'input',\n })\n },\n onBlur () {\n this.isFocused = false\n },\n onClick (e: Event) {\n this.onChange()\n this.$emit('click', e)\n },\n onChange () {\n if (!this.isInteractive) return\n\n const value = this.value\n let input = this.internalValue\n\n if (this.isMultiple) {\n if (!Array.isArray(input)) {\n input = []\n }\n\n const length = input.length\n\n input = input.filter((item: any) => !this.valueComparator(item, value))\n\n if (input.length === length) {\n input.push(value)\n }\n } else if (this.trueValue !== undefined && this.falseValue !== undefined) {\n input = this.valueComparator(input, this.trueValue) ? this.falseValue : this.trueValue\n } else if (value) {\n input = this.valueComparator(input, value) ? null : value\n } else {\n input = !input\n }\n\n this.validate(true, input)\n this.internalValue = input\n this.hasColor = input\n },\n onFocus () {\n this.isFocused = true\n },\n /** @abstract */\n onKeydown (e: Event) {},\n },\n})\n","// Styles\nimport '../../styles/components/_selection-controls.sass'\nimport './VSwitch.sass'\n\n// Mixins\nimport Selectable from '../../mixins/selectable'\nimport VInput from '../VInput'\n\n// Directives\nimport Touch from '../../directives/touch'\n\n// Components\nimport { VFabTransition } from '../transitions'\nimport VProgressCircular from '../VProgressCircular/VProgressCircular'\n\n// Helpers\nimport { keyCodes } from '../../util/helpers'\n\n// Types\nimport { VNode, VNodeData } from 'vue'\n\n/* @vue/component */\nexport default Selectable.extend({\n name: 'v-switch',\n\n directives: { Touch },\n\n props: {\n inset: Boolean,\n loading: {\n type: [Boolean, String],\n default: false,\n },\n flat: {\n type: Boolean,\n default: false,\n },\n },\n\n computed: {\n classes (): object {\n return {\n ...VInput.options.computed.classes.call(this),\n 'v-input--selection-controls v-input--switch': true,\n 'v-input--switch--flat': this.flat,\n 'v-input--switch--inset': this.inset,\n }\n },\n attrs (): object {\n return {\n 'aria-checked': String(this.isActive),\n 'aria-disabled': String(this.isDisabled),\n role: 'switch',\n }\n },\n // Do not return undefined if disabled,\n // according to spec, should still show\n // a color when disabled and active\n validationState (): string | undefined {\n if (this.hasError && this.shouldValidate) return 'error'\n if (this.hasSuccess) return 'success'\n if (this.hasColor !== null) return this.computedColor\n return undefined\n },\n switchData (): VNodeData {\n return this.setTextColor(this.loading ? undefined : this.validationState, {\n class: this.themeClasses,\n })\n },\n },\n\n methods: {\n genDefaultSlot (): (VNode | null)[] {\n return [\n this.genSwitch(),\n this.genLabel(),\n ]\n },\n genSwitch (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-input--selection-controls__input',\n }, [\n this.genInput('checkbox', {\n ...this.attrs,\n ...this.attrs$,\n }),\n this.genRipple(this.setTextColor(this.validationState, {\n directives: [{\n name: 'touch',\n value: {\n left: this.onSwipeLeft,\n right: this.onSwipeRight,\n },\n }],\n })),\n this.$createElement('div', {\n staticClass: 'v-input--switch__track',\n ...this.switchData,\n }),\n this.$createElement('div', {\n staticClass: 'v-input--switch__thumb',\n ...this.switchData,\n }, [this.genProgress()]),\n ])\n },\n genProgress (): VNode {\n return this.$createElement(VFabTransition, {}, [\n this.loading === false\n ? null\n : this.$slots.progress || this.$createElement(VProgressCircular, {\n props: {\n color: (this.loading === true || this.loading === '')\n ? (this.color || 'primary')\n : this.loading,\n size: 16,\n width: 2,\n indeterminate: true,\n },\n }),\n ])\n },\n onSwipeLeft () {\n if (this.isActive) this.onChange()\n },\n onSwipeRight () {\n if (!this.isActive) this.onChange()\n },\n onKeydown (e: KeyboardEvent) {\n if (\n (e.keyCode === keyCodes.left && this.isActive) ||\n (e.keyCode === keyCodes.right && !this.isActive)\n ) this.onChange()\n },\n },\n})\n","import { render, staticRenderFns } from \"./Config.vue?vue&type=template&id=2c37c030&\"\nimport script from \"./Config.vue?vue&type=script&lang=js&\"\nexport * from \"./Config.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListGroup } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAvatar } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VSelect } from 'vuetify/lib/components/VSelect';\nimport { VSwitch } from 'vuetify/lib/components/VSwitch';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\ninstallComponents(component, {VCard,VDivider,VList,VListGroup,VListItem,VListItemAvatar,VListItemContent,VListItemTitle,VSelect,VSwitch,VTextField})\n"],"sourceRoot":""}
\ No newline at end of file
--- /dev/null
+self.__precacheManifest = (self.__precacheManifest || []).concat([
+ {
+ "revision": "176ad134c275dc32e48c",
+ "url": "css/app.051f35c4.css"
+ },
+ {
+ "revision": "4f3c65b5f0369a230d8b",
+ "url": "css/chunk-vendors.f9907851.css"
+ },
+ {
+ "revision": "b6337190f503e09ea032",
+ "url": "css/config.2956469c.css"
+ },
+ {
+ "revision": "58fabceeefe4389effc5",
+ "url": "css/itemdetails.28909c9e.css"
+ },
+ {
+ "revision": "9bd66517467185f0366d",
+ "url": "css/itemdetails~playerqueue~search.133d2876.css"
+ },
+ {
+ "revision": "0509ab09c1b0d2200a4135803c91d6ce",
+ "url": "fonts/MaterialIcons-Regular.0509ab09.woff2"
+ },
+ {
+ "revision": "29b882f018fa6fe75fd338aaae6235b8",
+ "url": "fonts/MaterialIcons-Regular.29b882f0.woff"
+ },
+ {
+ "revision": "96c476804d7a788cc1c05351b287ee41",
+ "url": "fonts/MaterialIcons-Regular.96c47680.eot"
+ },
+ {
+ "revision": "da4ea5cdfca6b3baab285741f5ccb59f",
+ "url": "fonts/MaterialIcons-Regular.da4ea5cd.ttf"
+ },
+ {
+ "revision": "313a65630d341645c13e4f2a0364381d",
+ "url": "fonts/Roboto-Black.313a6563.woff"
+ },
+ {
+ "revision": "59eb3601394dd87f30f82433fb39dd94",
+ "url": "fonts/Roboto-Black.59eb3601.woff2"
+ },
+ {
+ "revision": "cc2fadc3928f2f223418887111947b40",
+ "url": "fonts/Roboto-BlackItalic.cc2fadc3.woff"
+ },
+ {
+ "revision": "f75569f8a5fab0893fa712d8c0d9c3fe",
+ "url": "fonts/Roboto-BlackItalic.f75569f8.woff2"
+ },
+ {
+ "revision": "50d75e48e0a3ddab1dd15d6bfb9d3700",
+ "url": "fonts/Roboto-Bold.50d75e48.woff"
+ },
+ {
+ "revision": "b52fac2bb93c5858f3f2675e4b52e1de",
+ "url": "fonts/Roboto-Bold.b52fac2b.woff2"
+ },
+ {
+ "revision": "4fe0f73cc919ba2b7a3c36e4540d725c",
+ "url": "fonts/Roboto-BoldItalic.4fe0f73c.woff"
+ },
+ {
+ "revision": "94008e69aaf05da75c0bbf8f8bb0db41",
+ "url": "fonts/Roboto-BoldItalic.94008e69.woff2"
+ },
+ {
+ "revision": "c73eb1ceba3321a80a0aff13ad373cb4",
+ "url": "fonts/Roboto-Light.c73eb1ce.woff"
+ },
+ {
+ "revision": "d26871e8149b5759f814fd3c7a4f784b",
+ "url": "fonts/Roboto-Light.d26871e8.woff2"
+ },
+ {
+ "revision": "13efe6cbc10b97144a28310ebdeda594",
+ "url": "fonts/Roboto-LightItalic.13efe6cb.woff"
+ },
+ {
+ "revision": "e8eaae902c3a4dacb9a5062667e10576",
+ "url": "fonts/Roboto-LightItalic.e8eaae90.woff2"
+ },
+ {
+ "revision": "1d6594826615607f6dc860bb49258acb",
+ "url": "fonts/Roboto-Medium.1d659482.woff"
+ },
+ {
+ "revision": "90d1676003d9c28c04994c18bfd8b558",
+ "url": "fonts/Roboto-Medium.90d16760.woff2"
+ },
+ {
+ "revision": "13ec0eb5bdb821ff4930237d7c9f943f",
+ "url": "fonts/Roboto-MediumItalic.13ec0eb5.woff2"
+ },
+ {
+ "revision": "83e114c316fcc3f23f524ec3e1c65984",
+ "url": "fonts/Roboto-MediumItalic.83e114c3.woff"
+ },
+ {
+ "revision": "35b07eb2f8711ae08d1f58c043880930",
+ "url": "fonts/Roboto-Regular.35b07eb2.woff"
+ },
+ {
+ "revision": "73f0a88bbca1bec19fb1303c689d04c6",
+ "url": "fonts/Roboto-Regular.73f0a88b.woff2"
+ },
+ {
+ "revision": "4357beb823a5f8d65c260f045d9e019a",
+ "url": "fonts/Roboto-RegularItalic.4357beb8.woff2"
+ },
+ {
+ "revision": "f5902d5ef961717ed263902fc429e6ae",
+ "url": "fonts/Roboto-RegularItalic.f5902d5e.woff"
+ },
+ {
+ "revision": "ad538a69b0e8615ed0419c4529344ffc",
+ "url": "fonts/Roboto-Thin.ad538a69.woff2"
+ },
+ {
+ "revision": "d3b47375afd904983d9be8d6e239a949",
+ "url": "fonts/Roboto-Thin.d3b47375.woff"
+ },
+ {
+ "revision": "5b4a33e176ff736a74f0ca2dd9e6b396",
+ "url": "fonts/Roboto-ThinItalic.5b4a33e1.woff2"
+ },
+ {
+ "revision": "8a96edbbcd9a6991d79371aed0b0288e",
+ "url": "fonts/Roboto-ThinItalic.8a96edbb.woff"
+ },
+ {
+ "revision": "7305b29c7526c212938516a0717e5ccd",
+ "url": "img/default_artist.7305b29c.png"
+ },
+ {
+ "revision": "c079bd979828319b9104eae3c39cc373",
+ "url": "img/demo_player.c079bd97.png"
+ },
+ {
+ "revision": "813f9dad5c3f55bddb15abc0b68f847b",
+ "url": "img/file.813f9dad.png"
+ },
+ {
+ "revision": "eabcf7ae3898600793d98017531fb3e2",
+ "url": "img/hires.eabcf7ae.png"
+ },
+ {
+ "revision": "29fe3282407f51338f27ae7bc33d8513",
+ "url": "img/homeassistant.29fe3282.png"
+ },
+ {
+ "revision": "4c4e488018bcf5af49d08a8a1434dd9b",
+ "url": "img/http_streamer.4c4e4880.png"
+ },
+ {
+ "revision": "4db55f47d3079cd17637da3220b953e2",
+ "url": "img/info_gradient.4db55f47.jpg"
+ },
+ {
+ "revision": "c079bd979828319b9104eae3c39cc373",
+ "url": "img/logo.c079bd97.png"
+ },
+ {
+ "revision": "c7eb9a768cf919b7eae7f80ce7100f8f",
+ "url": "img/qobuz.c7eb9a76.png"
+ },
+ {
+ "revision": "72e2fecbb918cb44d850686550c9a335",
+ "url": "img/sonos.72e2fecb.png"
+ },
+ {
+ "revision": "1f3fb1afff253402ff14288344ef1adc",
+ "url": "img/spotify.1f3fb1af.png"
+ },
+ {
+ "revision": "6063122339ae24244df236a92769470d",
+ "url": "img/squeezebox.60631223.png"
+ },
+ {
+ "revision": "ca1c1bb082ed1b32e4a7563a85279149",
+ "url": "img/tunein.ca1c1bb0.png"
+ },
+ {
+ "revision": "798ba28fac7cd93ad48b7bf28cce3f52",
+ "url": "img/web.798ba28f.png"
+ },
+ {
+ "revision": "8e1a0da98ad9d90c423b2b03ccb13033",
+ "url": "img/webplayer.8e1a0da9.png"
+ },
+ {
+ "revision": "121d7f2c4002e10bbc20de6e2229bc38",
+ "url": "index.html"
+ },
+ {
+ "revision": "176ad134c275dc32e48c",
+ "url": "js/app.d45df414.js"
+ },
+ {
+ "revision": "4f3c65b5f0369a230d8b",
+ "url": "js/chunk-vendors.31828971.js"
+ },
+ {
+ "revision": "b6337190f503e09ea032",
+ "url": "js/config.165ed655.js"
+ },
+ {
+ "revision": "58fabceeefe4389effc5",
+ "url": "js/itemdetails.79b5fa05.js"
+ },
+ {
+ "revision": "9bd66517467185f0366d",
+ "url": "js/itemdetails~playerqueue~search.3c623cdf.js"
+ },
+ {
+ "revision": "b9d320b56b5e0a72037f",
+ "url": "js/playerqueue.84a8618a.js"
+ },
+ {
+ "revision": "4ccb2a5caa6ea57ee3b0",
+ "url": "js/search.31a9bea8.js"
+ },
+ {
+ "revision": "c93d318ec22138832730289be28caa77",
+ "url": "manifest.json"
+ },
+ {
+ "revision": "b6216d61c03e6ce0c9aea6ca7808f7ca",
+ "url": "robots.txt"
+ }
+]);
\ No newline at end of file
+++ /dev/null
-self.__precacheManifest = (self.__precacheManifest || []).concat([
- {
- "revision": "05e0f9a9ca8cb900e4da",
- "url": "css/app.efe7d7a1.css"
- },
- {
- "revision": "4f3c65b5f0369a230d8b",
- "url": "css/chunk-vendors.f9907851.css"
- },
- {
- "revision": "745ee80757459504128d",
- "url": "css/config.2956469c.css"
- },
- {
- "revision": "58fabceeefe4389effc5",
- "url": "css/itemdetails.28909c9e.css"
- },
- {
- "revision": "9bd66517467185f0366d",
- "url": "css/itemdetails~playerqueue~search.133d2876.css"
- },
- {
- "revision": "0509ab09c1b0d2200a4135803c91d6ce",
- "url": "fonts/MaterialIcons-Regular.0509ab09.woff2"
- },
- {
- "revision": "29b882f018fa6fe75fd338aaae6235b8",
- "url": "fonts/MaterialIcons-Regular.29b882f0.woff"
- },
- {
- "revision": "96c476804d7a788cc1c05351b287ee41",
- "url": "fonts/MaterialIcons-Regular.96c47680.eot"
- },
- {
- "revision": "da4ea5cdfca6b3baab285741f5ccb59f",
- "url": "fonts/MaterialIcons-Regular.da4ea5cd.ttf"
- },
- {
- "revision": "313a65630d341645c13e4f2a0364381d",
- "url": "fonts/Roboto-Black.313a6563.woff"
- },
- {
- "revision": "59eb3601394dd87f30f82433fb39dd94",
- "url": "fonts/Roboto-Black.59eb3601.woff2"
- },
- {
- "revision": "cc2fadc3928f2f223418887111947b40",
- "url": "fonts/Roboto-BlackItalic.cc2fadc3.woff"
- },
- {
- "revision": "f75569f8a5fab0893fa712d8c0d9c3fe",
- "url": "fonts/Roboto-BlackItalic.f75569f8.woff2"
- },
- {
- "revision": "50d75e48e0a3ddab1dd15d6bfb9d3700",
- "url": "fonts/Roboto-Bold.50d75e48.woff"
- },
- {
- "revision": "b52fac2bb93c5858f3f2675e4b52e1de",
- "url": "fonts/Roboto-Bold.b52fac2b.woff2"
- },
- {
- "revision": "4fe0f73cc919ba2b7a3c36e4540d725c",
- "url": "fonts/Roboto-BoldItalic.4fe0f73c.woff"
- },
- {
- "revision": "94008e69aaf05da75c0bbf8f8bb0db41",
- "url": "fonts/Roboto-BoldItalic.94008e69.woff2"
- },
- {
- "revision": "c73eb1ceba3321a80a0aff13ad373cb4",
- "url": "fonts/Roboto-Light.c73eb1ce.woff"
- },
- {
- "revision": "d26871e8149b5759f814fd3c7a4f784b",
- "url": "fonts/Roboto-Light.d26871e8.woff2"
- },
- {
- "revision": "13efe6cbc10b97144a28310ebdeda594",
- "url": "fonts/Roboto-LightItalic.13efe6cb.woff"
- },
- {
- "revision": "e8eaae902c3a4dacb9a5062667e10576",
- "url": "fonts/Roboto-LightItalic.e8eaae90.woff2"
- },
- {
- "revision": "1d6594826615607f6dc860bb49258acb",
- "url": "fonts/Roboto-Medium.1d659482.woff"
- },
- {
- "revision": "90d1676003d9c28c04994c18bfd8b558",
- "url": "fonts/Roboto-Medium.90d16760.woff2"
- },
- {
- "revision": "13ec0eb5bdb821ff4930237d7c9f943f",
- "url": "fonts/Roboto-MediumItalic.13ec0eb5.woff2"
- },
- {
- "revision": "83e114c316fcc3f23f524ec3e1c65984",
- "url": "fonts/Roboto-MediumItalic.83e114c3.woff"
- },
- {
- "revision": "35b07eb2f8711ae08d1f58c043880930",
- "url": "fonts/Roboto-Regular.35b07eb2.woff"
- },
- {
- "revision": "73f0a88bbca1bec19fb1303c689d04c6",
- "url": "fonts/Roboto-Regular.73f0a88b.woff2"
- },
- {
- "revision": "4357beb823a5f8d65c260f045d9e019a",
- "url": "fonts/Roboto-RegularItalic.4357beb8.woff2"
- },
- {
- "revision": "f5902d5ef961717ed263902fc429e6ae",
- "url": "fonts/Roboto-RegularItalic.f5902d5e.woff"
- },
- {
- "revision": "ad538a69b0e8615ed0419c4529344ffc",
- "url": "fonts/Roboto-Thin.ad538a69.woff2"
- },
- {
- "revision": "d3b47375afd904983d9be8d6e239a949",
- "url": "fonts/Roboto-Thin.d3b47375.woff"
- },
- {
- "revision": "5b4a33e176ff736a74f0ca2dd9e6b396",
- "url": "fonts/Roboto-ThinItalic.5b4a33e1.woff2"
- },
- {
- "revision": "8a96edbbcd9a6991d79371aed0b0288e",
- "url": "fonts/Roboto-ThinItalic.8a96edbb.woff"
- },
- {
- "revision": "7305b29c7526c212938516a0717e5ccd",
- "url": "img/default_artist.7305b29c.png"
- },
- {
- "revision": "c079bd979828319b9104eae3c39cc373",
- "url": "img/demo_player.c079bd97.png"
- },
- {
- "revision": "813f9dad5c3f55bddb15abc0b68f847b",
- "url": "img/file.813f9dad.png"
- },
- {
- "revision": "eabcf7ae3898600793d98017531fb3e2",
- "url": "img/hires.eabcf7ae.png"
- },
- {
- "revision": "29fe3282407f51338f27ae7bc33d8513",
- "url": "img/homeassistant.29fe3282.png"
- },
- {
- "revision": "4c4e488018bcf5af49d08a8a1434dd9b",
- "url": "img/http_streamer.4c4e4880.png"
- },
- {
- "revision": "4db55f47d3079cd17637da3220b953e2",
- "url": "img/info_gradient.4db55f47.jpg"
- },
- {
- "revision": "c079bd979828319b9104eae3c39cc373",
- "url": "img/logo.c079bd97.png"
- },
- {
- "revision": "c7eb9a768cf919b7eae7f80ce7100f8f",
- "url": "img/qobuz.c7eb9a76.png"
- },
- {
- "revision": "72e2fecbb918cb44d850686550c9a335",
- "url": "img/sonos.72e2fecb.png"
- },
- {
- "revision": "1f3fb1afff253402ff14288344ef1adc",
- "url": "img/spotify.1f3fb1af.png"
- },
- {
- "revision": "6063122339ae24244df236a92769470d",
- "url": "img/squeezebox.60631223.png"
- },
- {
- "revision": "ca1c1bb082ed1b32e4a7563a85279149",
- "url": "img/tunein.ca1c1bb0.png"
- },
- {
- "revision": "798ba28fac7cd93ad48b7bf28cce3f52",
- "url": "img/web.798ba28f.png"
- },
- {
- "revision": "8e1a0da98ad9d90c423b2b03ccb13033",
- "url": "img/webplayer.8e1a0da9.png"
- },
- {
- "revision": "3f0c208a5cb155f7985630413fb58bed",
- "url": "index.html"
- },
- {
- "revision": "05e0f9a9ca8cb900e4da",
- "url": "js/app.5176fd2b.js"
- },
- {
- "revision": "4f3c65b5f0369a230d8b",
- "url": "js/chunk-vendors.31828971.js"
- },
- {
- "revision": "745ee80757459504128d",
- "url": "js/config.6e3bd196.js"
- },
- {
- "revision": "58fabceeefe4389effc5",
- "url": "js/itemdetails.79b5fa05.js"
- },
- {
- "revision": "9bd66517467185f0366d",
- "url": "js/itemdetails~playerqueue~search.3c623cdf.js"
- },
- {
- "revision": "b9d320b56b5e0a72037f",
- "url": "js/playerqueue.84a8618a.js"
- },
- {
- "revision": "4ccb2a5caa6ea57ee3b0",
- "url": "js/search.31a9bea8.js"
- },
- {
- "revision": "c93d318ec22138832730289be28caa77",
- "url": "manifest.json"
- },
- {
- "revision": "b6216d61c03e6ce0c9aea6ca7808f7ca",
- "url": "robots.txt"
- }
-]);
\ No newline at end of file
importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js");
importScripts(
- "precache-manifest.be334d0e4fc2262edf24eb422e508efa.js"
+ "precache-manifest.7d1a9077241115c1dc586f5d8e7900b1.js"
);
workbox.core.setCacheNameDetails({prefix: "musicassistant-frontend"});
-r requirements_lint.txt
-r requirements_test.txt
tox==3.14.6
+python-vlc
-e .