@kkcompany/ott-player 0.5.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs ADDED
@@ -0,0 +1,1324 @@
1
+ import { castMedia, createApi, dispatchChapterEvents, ensureTabLock, getContentInfo, handleIOSHeadphonesDisconnection, initSender, linkCast, selectHlsQualities, selectHlsQualities as selectHlsQualities$1, stopCast, subscribeCastState, subscribeCastState as subscribeCastState$1, validateEnvironment } from "@kkcompany/player/modules";
2
+ import { AutoplayPrompt, Button, CastSender, ClassicSettingsContainer, CoverImage, DEBUG_OPTIONS, InfoBarExtension, LiveEnd, MenuItem, PremiumPlayer, SkipButton, setupLicenseServerOverride } from "@kkcompany/player/react";
3
+ import { ImaDaiPlugin } from "@kkcompany/player/plugins";
4
+ import { getMediaTime, isLiveDuration } from "@kkcompany/player/core";
5
+ import { useCallback, useEffect, useImperativeHandle, useMemo, useReducer, useRef, useState } from "react";
6
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
7
+ import axios from "axios";
8
+
9
+ //#region src/ui/icon.js
10
+ var icon_default = {
11
+ pause: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMSA2QzkuODk1NDMgNiA5IDYuODk1NDMgOSA4VjQwQzkgNDEuMTA0NiA5Ljg5NTQzIDQyIDExIDQySDE3QzE4LjEwNDYgNDIgMTkgNDEuMTA0NiAxOSA0MFY4QzE5IDYuODk1NDMgMTguMTA0NiA2IDE3IDZIMTFaTTMxIDZDMjkuODk1NCA2IDI5IDYuODk1NDMgMjkgOFY0MEMyOSA0MS4xMDQ2IDI5Ljg5NTQgNDIgMzEgNDJIMzdDMzguMTA0NiA0MiAzOSA0MS4xMDQ2IDM5IDQwVjhDMzkgNi44OTU0MyAzOC4xMDQ2IDYgMzcgNkgzMVoiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo=",
12
+ firstplay: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTI0IDQuNzk5OTlDMTMuMzk2OCA0Ljc5OTk5IDQuNzk5OTkgMTMuMzk2OCA0Ljc5OTk5IDI0QzQuNzk5OTkgMzQuNjAzMiAxMy4zOTY4IDQzLjIgMjQgNDMuMkMzNC42MDMyIDQzLjIgNDMuMiAzNC42MDMyIDQzLjIgMjRDNDMuMiAxMy4zOTY4IDM0LjYwMzIgNC43OTk5OSAyNCA0Ljc5OTk5Wk0zMi40ODY0IDI0LjY0MzJMMjAuMzEzNiAzMS42NzA0QzE5LjcwMDggMzIuMDI0IDE5LjIgMzEuNzM0NCAxOS4yIDMxLjAyNzJWMTYuOTcxMkMxOS4yIDE2LjI2NCAxOS43MDA4IDE1Ljk3NDQgMjAuMzEzNiAxNi4zMjhMMzIuNDg2NCAyMy4zNTUyQzMzLjA5OTIgMjMuNzEwNCAzMy4wOTkyIDI0LjI4OTYgMzIuNDg2NCAyNC42NDMyWiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==",
13
+ play: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMCA4LjUxMzQ3QzEwIDYuOTYzIDExLjY4NzkgNi4wMDIxOSAxMy4wMjExIDYuNzkzNzZMMzkuMTAzNiAyMi4yODAzQzQwLjQwODkgMjMuMDU1MyA0MC40MDg5IDI0Ljk0NDcgMzkuMTAzNiAyNS43MTk3TDEzLjAyMTEgNDEuMjA2MkMxMS42ODc5IDQxLjk5NzggMTAgNDEuMDM3IDEwIDM5LjQ4NjVWOC41MTM0N1oiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo=",
14
+ replay: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MCIgaGVpZ2h0PSI4MCI+PGRlZnM+PGZpbHRlciBpZD0iYSIgaGVpZ2h0PSIxNTAlIj48ZmVHYXVzc2lhbkJsdXIgaW49IlNvdXJjZUFscGhhIiBzdGREZXZpYXRpb249IjMiLz48ZmVPZmZzZXQgZHg9IjIiIGR5PSIyIiByZXN1bHQ9Im9mZnNldGJsdXIiLz48ZmVDb21wb25lbnRUcmFuc2Zlcj48ZmVGdW5jQSB0eXBlPSJsaW5lYXIiIHNsb3BlPSIuNyIvPjwvZmVDb21wb25lbnRUcmFuc2Zlcj48ZmVNZXJnZT48ZmVNZXJnZU5vZGUvPjxmZU1lcmdlTm9kZSBpbj0iU291cmNlR3JhcGhpYyIvPjwvZmVNZXJnZT48L2ZpbHRlcj48L2RlZnM+PGcgZmlsbD0iI0ZGRiIgZmlsbC1ydWxlPSJub256ZXJvIiBmaWx0ZXI9InVybCgjYSkiPjxwYXRoIGQ9Ik00MC41IDl2OC45YTI1LjYgMjUuNiAwIDEgMS0yNS42IDI0LjVINnYxLjFBMzQuNSAzNC41IDAgMSAwIDQwLjUgOXoiLz48cGF0aCBkPSJNNDAgMHYyN0wyMCAxMy41eiIvPjwvZz48L3N2Zz4=",
15
+ back: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yMC43Mjc5IDguNDQzMTJMNi41ODU3NiAyMi41ODUzQzUuODA0NzEgMjMuMzY2MyA1LjgwNDcxIDI0LjYzMjYgNi41ODU3NiAyNS40MTM3TDIwLjcyNzkgMzkuNTU1OEMyMS41MDg5IDQwLjMzNjkgMjIuNzc1MyA0MC4zMzY5IDIzLjU1NjMgMzkuNTU1OEMyNC4zMzc0IDM4Ljc3NDggMjQuMzM3NCAzNy41MDg0IDIzLjU1NjMgMzYuNzI3NEwxMi44Mjg0IDI1Ljk5OTVIMzkuOTk5QzQxLjEwMzUgMjUuOTk5NSA0MS45OTkgMjUuMTA0IDQxLjk5OSAyMy45OTk1QzQxLjk5OSAyMi44OTQ5IDQxLjEwMzUgMjEuOTk5NSAzOS45OTkgMjEuOTk5NUgxMi44Mjg0TDIzLjU1NjMgMTEuMjcxNUMyNC4zMzc0IDEwLjQ5MDUgMjQuMzM3NCA5LjIyNDE2IDIzLjU1NjMgOC40NDMxMkMyMi43NzUzIDcuNjYyMDcgMjEuNTA4OSA3LjY2MjA3IDIwLjcyNzkgOC40NDMxMloiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo=",
16
+ forward10: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTQyLjExODYgMjQuMzU1MkM0MC44MDgyIDI0LjM1NTIgMzkuNzM2MiAyNS40MjczIDM5LjczNjIgMjYuNzM3NkMzOS43MzYyIDM1LjI3ODUgMzIuNzkxNCA0Mi4yMjMzIDI0LjI1MDUgNDIuMjIzM0MxNS43MDk1IDQyLjIyMzMgOC43NjQ4MiAzNS4yNzg1IDguNzY0ODIgMjYuNzM3NkM4Ljc2NDgyIDE4LjE5NjcgMTUuMDc4MiAxMS45MTkgMjMuMDU5MyAxMS4zMTE1VjE0LjM2MUMyMy4wNTkzIDE1LjgxNDMgMjQuNjkxMiAxNi42NiAyNS44NzA1IDE1LjgyNjJMMzQuMDg5OCAxMC4wMzY5QzM1LjEwMjQgOS4zMjIxOSAzNS4xMDI0IDcuODMzMTggMzQuMDg5OCA3LjExODQ2TDI1Ljg3MDUgMS4zMjkyQzI0LjY5MTIgMC40OTUzNTcgMjMuMDU5MyAxLjM0MTExIDIzLjA1OTMgMi43OTQzOFY2LjU1ODU5QzEyLjQ0NTYgNy4xNzgwMiA0IDE1Ljk4MSA0IDI2Ljc0OTVDNCAzNy41MTggMTMuMDg4OSA0NyAyNC4yNTA1IDQ3QzM1LjQxMjEgNDcgNDQuNTAxIDM3LjkxMTEgNDQuNTAxIDI2Ljc0OTVDNDQuNTAxIDI1LjQzOTIgNDMuNDI4OSAyNC4zNjcxIDQyLjExODYgMjQuMzY3MVYyNC4zNTUyWiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTE4LjQ5NjkgMzQuMTk0NUgxOC45NDk2QzE5LjYwNDcgMzQuMTk0NSAyMC4xNDA4IDMzLjY1ODUgMjAuMTQwOCAzMy4wMDMzVjIwLjk2MDJDMjAuMTQwOCAyMC4zMDUxIDE5LjYwNDcgMTkuNzY5IDE4Ljk0OTYgMTkuNzY5SDE4LjU1NjVDMTguMzA2MyAxOS43NjkgMTguMDU2MiAxOS44NTI0IDE3Ljg1MzcgMTkuOTk1NEwxNC40ODI1IDIyLjQ0OTNDMTQuMjIwNSAyMi42Mzk4IDE0LjA1MzcgMjIuOTI1NyAxNC4wMDYxIDIzLjIzNTRDMTMuOTU4NCAyMy41NTcxIDE0LjA0MTggMjMuODc4NyAxNC4yMzI0IDI0LjEyODlMMTQuNTA2NCAyNC40ODYyQzE0Ljg5OTUgMjUuMDEwMyAxNS42MzggMjUuMTE3NiAxNi4xNjIxIDI0LjcyNDVMMTcuMzA1NyAyMy44Nzg3VjMyLjk5MTRDMTcuMzA1NyAzMy42NDY2IDE3Ljg0MTcgMzQuMTgyNiAxOC40OTY5IDM0LjE4MjZWMzQuMTk0NVoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0yOC40NDM1IDE5LjY4NTdDMjcuMTY5IDE5LjY4NTcgMjYuMTIwNyAyMC4wNjY5IDI1LjMzNDUgMjAuODA1NEMyNC42MDc5IDIxLjQ4NDQgMjQuMDgzNyAyMi40MTM1IDIzLjc4NTkgMjMuNTQ1MkMyMy41MjM5IDI0LjU1NzcgMjMuMzgwOSAyNS43MjUxIDIzLjM4MDkgMjcuMDExNkMyMy4zODA5IDI5LjM5NCAyMy43NzQgMzEuMTMzMSAyNC41NzIxIDMyLjM2MDFDMjUuNDUzNiAzMy42OTQyIDI2Ljc4NzggMzQuNDA5IDI4LjQzMTYgMzQuNDA5QzMwLjA3NTUgMzQuNDA5IDMxLjQ5MyAzMy42ODIzIDMyLjMzODggMzIuMjg4NkMzMy4wODkyIDMxLjA2MTcgMzMuNDU4NSAyOS4zMzQ0IDMzLjQ1ODUgMjcuMDExNkMzMy40NTg1IDI1LjcwMTMgMzMuMzM5NCAyNC41MzM5IDMzLjEwMTIgMjMuNTMzM0MzMi44MjcyIDIyLjM4OTcgMzIuMzI2OSAyMS40NzI1IDMxLjYwMDIgMjAuNzkzNUMzMC44MjYgMjAuMDY2OSAyOS43NjU4IDE5LjY5NzYgMjguNDU1NSAxOS42OTc2TDI4LjQ0MzUgMTkuNjg1N1pNMjkuOTU2NCAzMC43NjM5QzI5LjczIDMxLjE1NyAyOS4zNzI3IDMxLjU3MzkgMjguNDE5NyAzMS41NzM5QzI3LjcxNjkgMzEuNTczOSAyNy4yNjQyIDMxLjMyMzcgMjYuOTA2OSAzMC43NDAxQzI2LjU5NzIgMzAuMjI3OCAyNi4yMjc5IDI5LjE2NzcgMjYuMjI3OSAyNy4wMTE2QzI2LjIyNzkgMjYuMDExIDI2LjMyMzIgMjUuMTE3NiAyNi41MDE5IDI0LjM1NTJDMjYuNjU2NyAyMy43MjM5IDI2LjkwNjkgMjMuMjM1NSAyNy4yNDA0IDIyLjkxMzhDMjcuNTAyNSAyMi42NTE4IDI3Ljg5NTYgMjIuNTIwNyAyOC40NDM1IDIyLjUyMDdDMjguOTkxNSAyMi41MjA3IDI5LjQwODQgMjIuNjM5OSAyOS42NzA1IDIyLjg5QzI5Ljk4MDIgMjMuMTk5NyAzMC4yMTg0IDIzLjY2NDMgMzAuMzQ5NSAyNC4yODM3QzMwLjUxNjIgMjUuMDQ2MSAzMC42MTE1IDI1Ljk2MzMgMzAuNjExNSAyNy4wMTE2QzMwLjYxMTUgMjkuMTY3NyAzMC4yNjYxIDMwLjIzOTcgMjkuOTY4MyAzMC43NjM5SDI5Ljk1NjRaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K",
17
+ rewind10: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTI1LjQ0NzIgNi41NjAwM1YyLjc5NDg1QzI1LjQ0NzIgMS4zNDEyIDIzLjgxNDkgMC40OTUyMjYgMjIuNjM1MyAxLjMyOTI5TDE0LjQxMzggNy4xMjAwNEMxMy40MDEgNy44MzQ5NSAxMy40MDEgOS4zMjQzNCAxNC40MTM4IDEwLjAzOTNMMjIuNjM1MyAxNS44M0MyMy44MTQ5IDE2LjY2NDEgMjUuNDQ3MiAxNS44MTgxIDI1LjQ0NzIgMTQuMzY0NFYxMS4zMTQyQzMzLjQzMDQgMTEuOTIxOCAzOS43NDU0IDE4LjYwNjIgMzkuNzQ1NCAyNi43NDQzQzM5Ljc0NTQgMzUuMjg3NCAzMi43OTg5IDQyLjIzMzkgMjQuMjU1NyA0Mi4yMzM5QzE1LjcxMjYgNDIuMjMzOSA4Ljc2NjA1IDM1LjI4NzQgOC43NjYwNSAyNi43NDQzQzguNzY2MDUgMjUuNDMzNiA3LjY5MzY5IDI0LjM2MTIgNi4zODMwMyAyNC4zNjEyQzUuMDcyMzYgMjQuMzYxMiA0IDI1LjQzMzYgNCAyNi43NDQzQzQgMzcuOTA4OCAxMy4wOTEyIDQ3IDI0LjI1NTcgNDdDMzUuNDIwMiA0NyA0NC41MTE1IDM3LjkwODggNDQuNTExNSAyNi43NDQzQzQ0LjUxMTUgMTUuNTc5OCAzNi4wNjM2IDcuMTY3NyAyNS40NDcyIDYuNTQ4MTJWNi41NjAwM1oiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0xOC41MDA3IDM0LjIxNUgxOC45NTM1QzE5LjYwODggMzQuMjE1IDIwLjE0NSAzMy42Nzg4IDIwLjE0NSAzMy4wMjM1VjIwLjk3NzNDMjAuMTQ1IDIwLjMyMTkgMTkuNjA4OCAxOS43ODU4IDE4Ljk1MzUgMTkuNzg1OEgxOC41NjAzQzE4LjMxMDEgMTkuNzg1OCAxOC4wNTk4IDE5Ljg2OTIgMTcuODU3MyAyMC4wMTIyTDE0LjQ4NTMgMjIuNDY2N0MxNC4yMjMyIDIyLjY1NzMgMTQuMDU2NCAyMi45NDMzIDE0LjAwODcgMjMuMjUzMUMxMy45NjEgMjMuNTc0OCAxNC4wNDQ0IDIzLjg5NjUgMTQuMjM1MSAyNC4xNDY3TDE0LjUwOTEgMjQuNTA0MkMxNC45MDIzIDI1LjAyODQgMTUuNjQxMSAyNS4xMzU3IDE2LjE2NTMgMjQuNzQyNUwxNy4zMDkyIDIzLjg5NjVWMzMuMDExNkMxNy4zMDkyIDMzLjY2NjkgMTcuODQ1NCAzNC4yMDMxIDE4LjUwMDcgMzQuMjAzMVYzNC4yMTVaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMjguNDM4IDM0LjQyOTVDMzAuMTUzOCAzNC40Mjk1IDMxLjUwMDIgMzMuNzAyNyAzMi4zNDYyIDMyLjMwODdDMzMuMDk2OCAzMS4wODE0IDMzLjQ2NjIgMjkuMzUzNyAzMy40NjYyIDI3LjAzMDJDMzMuNDY2MiAyNS43MTk2IDMzLjM0NyAyNC41NTE5IDMzLjEwODcgMjMuNTUxQzMyLjgzNDcgMjIuNDA3MiAzMi4zMzQyIDIxLjQ4OTcgMzEuNjA3NCAyMC44MTA1QzMwLjgzMjkgMjAuMDgzNyAyOS43NzI1IDE5LjcxNDQgMjguNDYxOCAxOS43MTQ0QzI3LjE1MTIgMTkuNzE0NCAyNi4xMzg0IDIwLjA5NTYgMjUuMzUyIDIwLjgzNDRDMjQuNjI1MSAyMS41MTM1IDI0LjEwMDkgMjIuNDQyOSAyMy44MDMgMjMuNTc0OUMyMy41NDA5IDI0LjU4NzYgMjMuMzk3OSAyNS43NTUzIDIzLjM5NzkgMjcuMDQyMkMyMy4zOTc5IDI5LjQyNTIgMjMuNzkxMSAzMS4xNjQ4IDI0LjU4OTQgMzIuMzkyMUMyNS40NzExIDMzLjcyNjYgMjYuODA1NiAzNC40NDE1IDI4LjQ0OTkgMzQuNDQxNUwyOC40MzggMzQuNDI5NVpNMjYuNTE5NyAyNC4zODUxQzI2LjY3NDUgMjMuNzUzNiAyNi45MjQ4IDIzLjI2NTEgMjcuMjU4NCAyMi45NDM0QzI3LjUyMDUgMjIuNjgxMiAyNy45MTM3IDIyLjU1MDIgMjguNDYxOCAyMi41NTAyQzI5LjAwOTkgMjIuNTUwMiAyOS40MjY5IDIyLjY2OTMgMjkuNjg5MSAyMi45MTk1QzI5Ljk5ODkgMjMuMjI5MyAzMC4yMzcyIDIzLjY5NCAzMC4zNjgyIDI0LjMxMzZDMzAuNTM1MSAyNS4wNzYyIDMwLjYzMDQgMjUuOTkzNiAzMC42MzA0IDI3LjA0MjJDMzAuNjMwNCAyOS4xOTg4IDMwLjI4NDggMzAuMjcxMiAyOS45ODcgMzAuNzk1NEMyOS43NjA2IDMxLjE4ODYgMjkuNDAzMSAzMS42MDU3IDI4LjQ0OTkgMzEuNjA1N0MyNy43NDY5IDMxLjYwNTcgMjcuMjk0MSAzMS4zNTU0IDI2LjkzNjcgMzAuNzcxNkMyNi42MjY5IDMwLjI1OTIgMjYuMjU3NSAyOS4xOTg4IDI2LjI1NzUgMjcuMDQyMkMyNi4yNTc1IDI2LjA0MTMgMjYuMzUyOCAyNS4xNDc3IDI2LjUzMTYgMjQuMzg1MUgyNi41MTk3WiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==",
18
+ volumeHigh: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSczNicgaGVpZ2h0PSczNicgdmlld0JveD0nMCAwIDM2IDM2Jz4gPGcgZmlsbD0nbm9uZScgZmlsbC1ydWxlPSdldmVub2RkJz4gPHBhdGggZD0nTTAgMGgzNnYzNkgweicgb3BhY2l0eT0nLjUnLz4gPHBhdGggZmlsbD0nI0ZGRicgZD0nTTIxLjgwOCAxYTE2LjI2NSAxNi4yNjUgMCAwIDEgNi43NzcgMy4yMTkgMTYuOTEgMTYuOTEgMCAwIDEgNC42OTIgNS44MDJBMTYuOTYgMTYuOTYgMCAwIDEgMzUgMTcuNTQ3YzAgMi42Ni0uNTc0IDUuMTY4LTEuNzIzIDcuNTI1YTE2LjkxIDE2LjkxIDAgMCAxLTQuNjkyIDUuODAzIDE2LjI2NSAxNi4yNjUgMCAwIDEtNi43NzcgMy4yMTh2LTMuODk4YTEyLjQ1NiAxMi40NTYgMCAwIDAgNC44NS0yLjYzIDEzLjE2OCAxMy4xNjggMCAwIDAgMy4zMzMtNC40NjUgMTMuMTA5IDEzLjEwOSAwIDAgMCAxLjIwMS01LjU1M2MwLTEuOTY1LS40LTMuODE2LTEuMjAxLTUuNTU0YTEzLjE2OCAxMy4xNjggMCAwIDAtMy4zMzItNC40NjUgMTIuNDU2IDEyLjQ1NiAwIDAgMC00Ljg1MS0yLjYzVjF6Jy8+IDxwYXRoIGZpbGw9JyNGRkYnIGQ9J00yNi41MjMgMTcuNTQ3YzAgMS42NjItLjQyMyAzLjE2NS0xLjI3IDQuNTFhOC40NTMgOC40NTMgMCAwIDEtMy40NDUgMy4xMDZWOS45M2MxLjQ1LjcyNSAyLjYgMS43NiAzLjQ0NSAzLjEwNS44NDcgMS4zNDUgMS4yNyAyLjg0OCAxLjI3IDQuNTF6TTEgMTEuODhoNy41MjVMMTggMi40MDV2MzAuMjgzbC05LjQ3NS05LjQ3NUgxeicvPiA8L2c+IDwvc3ZnPg==",
19
+ volumeLow: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSczNicgaGVpZ2h0PSczNicgdmlld0JveD0nMCAwIDM2IDM2Jz4gPGcgZmlsbD0nbm9uZScgZmlsbC1ydWxlPSdldmVub2RkJz4gPHBhdGggZD0nTTAgMGgzNnYzNkgweicgb3BhY2l0eT0nLjUnLz4gPHBhdGggZmlsbD0nI0ZGRicgZD0nTTI2LjUyMyAxNy41NDdjMCAxLjY2Mi0uNDIzIDMuMTY1LTEuMjcgNC41MWE4LjQ1MyA4LjQ1MyAwIDAgMS0zLjQ0NSAzLjEwNlY5LjkzYzEuNDUuNzI1IDIuNiAxLjc2IDMuNDQ1IDMuMTA1Ljg0NyAxLjM0NSAxLjI3IDIuODQ4IDEuMjcgNC41MXpNMSAxMS44OGg3LjUyNUwxOCAyLjQwNXYzMC4yODNsLTkuNDc1LTkuNDc1SDF6Jy8+IDwvZz4gPC9zdmc+",
20
+ mute: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSczNicgaGVpZ2h0PSczNicgdmlld0JveD0nMCAwIDM2IDM2Jz4gPGcgZmlsbD0nbm9uZScgZmlsbC1ydWxlPSdldmVub2RkJz4gPHBhdGggZD0nTTAgMGgzNnYzNkgweicgb3BhY2l0eT0nLjUnLz4gPHBhdGggZmlsbD0nI0ZGRicgZD0nTTEgMTEuODhoNy41MjVMMTggMi40MDV2MzAuMjgzbC05LjQ3NS05LjQ3NUgxeicvPiA8ZyBmaWxsLXJ1bGU9J25vbnplcm8nPiA8cGF0aCBkPSdNMjAgMTFoMTR2MTRIMjB6Jy8+IDxwYXRoIGZpbGw9JyNGRkYnIGQ9J00zMS45NCAxMC45NGwyLjEyIDIuMTItMTIgMTItMi4xMi0yLjEyeicvPiA8cGF0aCBmaWxsPScjRkZGJyBkPSdNMTkuOTQgMTMuMDZsMi4xMi0yLjEyIDEyIDEyLTIuMTIgMi4xMnonLz4gPC9nPiA8L2c+IDwvc3ZnPg==",
21
+ setting: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTI0LjM5MjQgNDYuMDJDMjIuNzU5NSA0Ni4wMiAyMS4xMTY5IDQ1LjkzMiAxOS40OTM3IDQ1Ljc1NkMxOC45MDcxIDQ1LjY5NzMgMTguNDI3OSA0NS4yODY3IDE4LjI1MTkgNDQuNzI5M0wxNi42Nzc3IDM5LjY1NDZDMTYuMzM1NSAzOS40ODg0IDE2LjAwMyAzOS4zMTI0IDE1LjY4MDQgMzkuMTE2OEMxNS42NjA4IDM5LjEwNyAxNS42NDEyIDM5LjA5NzMgMTUuNjIxNyAzOS4wNzc3QzE1LjMxODYgMzguOTAxNyAxNS4wMTU1IDM4LjcxNTkgMTQuNzIyMSAzOC41MTA2TDkuNTMwMDcgMzkuNjgzOUM4Ljk2Mjk1IDM5LjgxMTEgOC4zNjY1IDM5LjU4NjIgOC4wMjQyNyAzOS4xMTY4QzYuMDk4MDMgMzYuNDc2OCA0LjQ0NTU3IDMzLjYyMTcgMy4xMjU1NiAzMC42Mjk2QzIuODkwODkgMzAuMDkxOCAyLjk4ODY3IDI5LjQ2NjEgMy4zODk1NiAyOS4wNDU2TDcuMDE3MTUgMjUuMTI0N0M2Ljk2ODI2IDI0LjM4MTYgNi45NjgyNiAyMy42Mzg0IDcuMDE3MTUgMjIuODk1M0wzLjM5OTM0IDE4Ljk3NDRDMi45OTg0NCAxOC41NDQyIDIuOTAwNjcgMTcuOTE4NCAzLjEzNTM0IDE3LjM4MDZDNC40NjUxMyAxNC4zODg2IDYuMTA3ODEgMTEuNTMzNCA4LjAzNDA1IDguOTAzMThDOC4zNzYyOCA4LjQzMzg0IDguOTcyNzMgOC4yMDg5NSA5LjUzOTg0IDguMzM2MDZMMTQuNzUxNSA5LjUwOTQxQzE1LjM2NzUgOS4wOTg3NCAxNi4wMTI4IDguNzI3MTggMTYuNjg3NSA4LjM5NDczTDE4LjI3MTUgMy4yOTA2OEMxOC40NDc1IDIuNzMzMzQgMTguOTM2NCAyLjMzMjQ1IDE5LjUxMzMgMi4yNjRDMjIuNzY5MyAxLjkxMiAyNi4wNjQ1IDEuOTEyIDI5LjMxMDcgMi4yNjRDMjkuODk3NCAyLjMyMjY3IDMwLjM3NjUgMi43MzMzNCAzMC41NTI1IDMuMjkwNjhMMzIuMTI2NyA4LjM2NTRDMzIuODAxNCA4LjY5Nzg1IDMzLjQ2NjMgOS4wNzkxOCAzNC4wOTIxIDkuNDk5NjNMMzkuMjc0NCA4LjMyNjI5QzM5Ljg1MTMgOC4xOTkxNyA0MC40Mzc5IDguNDI0MDYgNDAuNzgwMiA4Ljg5MzRDNDIuNzA2NCAxMS41MzM0IDQ0LjM1ODkgMTQuMzg4NiA0NS42Nzg5IDE3LjM4MDZDNDUuOTEzNSAxNy45MTg0IDQ1LjgxNTggMTguNTM0NCA0NS40MTQ5IDE4Ljk2NDZMNDEuNzg3MyAyMi44ODU1QzQxLjgzNjIgMjMuNjI4NyA0MS44MzYyIDI0LjM3MTggNDEuNzg3MyAyNS4xMTQ5TDQ1LjQwNTEgMjkuMDM1OEM0NS44MDYgMjkuNDY2MSA0NS45MDM4IDMwLjA5MTggNDUuNjY5MSAzMC42Mjk2QzQ1LjAwNDIgMzIuMTE1OSA0NC4yNjExIDMzLjU5MjMgNDMuNDQ5NSAzNS4wMDAzQzQyLjYzOCAzNi40MDgzIDQxLjczODQgMzcuNzk2OCA0MC43NzA0IDM5LjEwN0M0MC40MjgyIDM5LjU3NjQgMzkuODMxNyAzOS44MDEzIDM5LjI2NDYgMzkuNjc0MkwzNC4wNjI4IDM4LjUwMDhDMzMuNDQ2OCAzOC45MTE1IDMyLjgwMTQgMzkuMjgzIDMyLjEyNjcgMzkuNjE1NUwzMC41NDI3IDQ0LjcwOThDMzAuMzY2NyA0NS4yNjcxIDI5Ljg3NzggNDUuNjY4IDI5LjMwMDkgNDUuNzM2NEMyNy42Nzc4IDQ1LjkxMjQgMjYuMDM1MSA0Ni4wMDA0IDI0LjQwMjIgNDYuMDAwNEwyNC4zOTI0IDQ2LjAyWk0yMC43NjQ4IDQyLjkzMDJDMjMuMTggNDMuMTM1NSAyNS42MTQ3IDQzLjEzNTUgMjguMDI5OCA0Mi45MzAyTDI5LjUxNiAzOC4xNDg4QzI5LjY0MzIgMzcuNzQ3OSAyOS45MzY1IDM3LjQxNTUgMzAuMzE3OCAzNy4yNDkyQzMxLjIxNzQgMzYuODQ4NCAzMi4wODc2IDM2LjM0OTcgMzIuODg5NCAzNS43NjNDMzMuMjMxNiAzNS41MTg2IDMzLjY2MTkgMzUuNDMwNiAzNC4wNzI1IDM1LjUxODZMMzguOTUxNyAzNi42MjM1QzM5LjY0NTkgMzUuNjI2MSA0MC4zMDEgMzQuNTk5NCA0MC44OTc1IDMzLjU1MzJDNDEuNTAzNyAzMi41MDcgNDIuMDYxMSAzMS40MzE0IDQyLjU3OTMgMzAuMzM2M0wzOS4xODY0IDI2LjY1OThDMzguOTAyOCAyNi4zNDY5IDM4Ljc2NTkgMjUuOTM2MiAzOC44MDUgMjUuNTE1OEMzOC45MDI4IDI0LjUyODIgMzguOTAyOCAyMy41MjExIDM4LjgwNSAyMi41NDMzQzM4Ljc2NTkgMjIuMTIyOSAzOC45MDI4IDIxLjcwMjQgMzkuMTg2NCAyMS4zOTkzTDQyLjU4OTEgMTcuNzEzQzQxLjU2MjQgMTUuNTIyOCA0MC4zNDAyIDEzLjQxMDggMzguOTYxNSAxMS40MjU5TDM0LjEwMTkgMTIuNTIxQzMzLjY5MTIgMTIuNjE4OCAzMy4yNjEgMTIuNTIxIDMyLjkxODcgMTIuMjc2NUMzMi4xMDcyIDExLjY4OTkgMzEuMjI3MiAxMS4xODE0IDMwLjMxNzggMTAuNzcwOEMyOS45MzY1IDEwLjU5NDggMjkuNjQzMiAxMC4yNzIxIDI5LjUxNiA5Ljg2MTQxTDI4LjAzOTYgNS4wOTk1OUMyNS42MjQ1IDQuODk0MjUgMjMuMTg5OCA0Ljg5NDI1IDIwLjc3NDYgNS4wOTk1OUwxOS4yODg0IDkuODkwNzVDMTkuMTYxMyAxMC4yOTE2IDE4Ljg2NzkgMTAuNjI0MSAxOC40ODY2IDEwLjc5MDNDMTcuNTc3MyAxMS4xOTEyIDE2LjcxNjggMTEuNjg5OSAxNS45MTUgMTIuMjc2NUMxNS41NzI4IDEyLjUyMSAxNS4xNDI2IDEyLjYwOSAxNC43MzE5IDEyLjUyMUw5Ljg0Mjk2IDExLjQxNjFDOC40NjQyOCAxMy40MDEgNy4yNDIwNCAxNS41MTMgNi4yMTUzNyAxNy43MDMzTDkuNjA4MjkgMjEuMzc5OEM5Ljg5MTg1IDIxLjY5MjYgMTAuMDI4NyAyMi4xMDMzIDkuOTg5NjMgMjIuNTIzOEM5Ljg5MTg1IDIzLjUxMTMgOS44OTE4NSAyNC41MDg3IDkuOTg5NjMgMjUuNDk2MkMxMC4wMjg3IDI1LjkxNjcgOS44OTE4NSAyNi4zMzcxIDkuNjA4MjkgMjYuNjVMNi4yMDU1OSAzMC4zMzYzQzcuMjMyMjcgMzIuNTI2NSA4LjQ1NDUgMzQuNjM4NiA5LjgzMzE4IDM2LjYyMzVMMTQuNzAyNiAzNS41MjgzQzE1LjExMzIgMzUuNDMwNiAxNS41NDM1IDM1LjUyODMgMTUuODg1NyAzNS43NzI4QzE2LjI5NjQgMzYuMDY2MSAxNi43MjY2IDM2LjM0OTcgMTcuMTU2OCAzNi41OTQxQzE3LjE3NjQgMzYuNjAzOSAxNy4xOTU5IDM2LjYxMzcgMTcuMjA1NyAzNi42MjM1QzE3LjYyNjEgMzYuODU4MSAxOC4wNTY0IDM3LjA4MyAxOC40OTY0IDM3LjI3ODZDMTguODc3NyAzNy40NTQ2IDE5LjE3MTEgMzcuNzc3MyAxOS4yOTgyIDM4LjE3ODFMMjAuNzc0NiA0Mi45NEwyMC43NjQ4IDQyLjkzMDJaTTI0LjM4MjcgMzIuMzMxQzIyLjk0NTMgMzIuMzMxIDIxLjUxNzcgMzEuOTQ5NiAyMC4yMzY4IDMxLjIxNjNDMTYuMjg2NiAyOC45MzgxIDE0LjkxNzcgMjMuODkyNyAxNy4xNTY4IDE5LjkzMjZDMTcuMTY2NiAxOS45MTMxIDE3LjE3NjQgMTkuODgzNyAxNy4xOTU5IDE5Ljg2NDJDMTguMzAwOCAxNy45Mzc5IDIwLjEgMTYuNTY5IDIyLjI0MTMgMTUuOTkyMUMyNC4zODI3IDE1LjQxNTIgMjYuNjIxOCAxNS43MDg2IDI4LjU0OCAxNi44MjMzQzMwLjQ3NDMgMTcuOTM3OSAzMS44NDMyIDE5LjcyNzMgMzIuNDIwMSAyMS44Njg2QzMyLjk5NyAyNC4wMSAzMi43MDM2IDI2LjI0OTEgMzEuNTg5IDI4LjE3NTRDMzAuNDg0MSAzMC4xMDE2IDI4LjY4NDkgMzEuNDcwNSAyNi41NDM2IDMyLjA0NzRDMjUuODI5OCAzMi4yNDMgMjUuMTA2MiAzMi4zMzEgMjQuMzgyNyAzMi4zMzFaTTE5Ljc2NzUgMjEuMjcyMkMxOS43Njc1IDIxLjI3MjIgMTkuNzQ3OSAyMS4zMTEzIDE5LjczODIgMjEuMzMwOUMxOC4yNTE5IDIzLjkwMjQgMTkuMTQxNyAyNy4xOTc2IDIxLjcwMzUgMjguNjc0QzIyLjk0NTMgMjkuMzg3OCAyNC4zOTI0IDI5LjU4MzQgMjUuNzgwOSAyOS4yMTE4QzI3LjE2OTQgMjguODQwMyAyOC4zMzI5IDI3Ljk1MDUgMjkuMDQ2NyAyNi43MDg3QzI5Ljc2MDUgMjUuNDY2OSAyOS45NTYxIDI0LjAxOTggMjkuNTg0NSAyMi42MzEzQzI5LjIxMjkgMjEuMjQyOSAyOC4zMjMxIDIwLjA4OTEgMjcuMDgxNCAxOS4zNjU1QzI1LjgzOTYgMTguNjQxOSAyNC4zODI3IDE4LjQ1NjIgMjMuMDA0IDE4LjgyNzdDMjEuNjM1MSAxOS4xODk1IDIwLjQ5MTEgMjAuMDU5NyAxOS43Njc1IDIxLjI4MlYyMS4yNzIyWiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==",
22
+ check: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyMCcgaGVpZ2h0PScyMCcgdmlld0JveD0nMCAwIDIwIDIwJz48cGF0aCBmaWxsPScjRkZGJyBmaWxsLXJ1bGU9J25vbnplcm8nIGQ9J00yLjkwMiA5LjI2MWExLjA4NyAxLjA4NyAwIDAgMC0xLjU3NiAwIDEuMTgzIDEuMTgzIDAgMCAwIDAgMS42MzJsNS41NzEgNS43NjljLjQzNS40NSAxLjE0LjQ1IDEuNTc2IDBsMTEuMi0xMS42OTJhMS4xODMgMS4xODMgMCAwIDAgMC0xLjYzMiAxLjA4NyAxLjA4NyAwIDAgMC0xLjU3NSAwTDcuNjg1IDE0LjIxNCAyLjkwMiA5LjI2MXonLz48L3N2Zz4K",
23
+ fullscreen: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzExNTlfMTE4KSI+CjxwYXRoIGQ9Ik0xMC4wMDAyIDYuMDAwMkM3LjgxNDA3IDYuMDAwMiA2LjAwMDIgNy44MTQwNyA2LjAwMDIgMTAuMDAwMlYxNi4wMDAyQzUuOTk2NDUgMTYuMjY1MiA2LjA0NTQxIDE2LjUyODMgNi4xNDQyNCAxNi43NzQzQzYuMjQzMDcgMTcuMDIwMiA2LjM4OTc5IDE3LjI0NDEgNi41NzU4OCAxNy40MzI4QzYuNzYxOTcgMTcuNjIxNSA2Ljk4MzcxIDE3Ljc3MTQgNy4yMjgyMyAxNy44NzM3QzcuNDcyNzQgMTcuOTc2IDcuNzM1MTUgMTguMDI4NyA4LjAwMDIgMTguMDI4N0M4LjI2NTI1IDE4LjAyODcgOC41Mjc2NiAxNy45NzYgOC43NzIxNyAxNy44NzM3QzkuMDE2NjkgMTcuNzcxNCA5LjIzODQzIDE3LjYyMTUgOS40MjQ1MiAxNy40MzI4QzkuNjEwNjEgMTcuMjQ0MSA5Ljc1NzMzIDE3LjAyMDIgOS44NTYxNiAxNi43NzQzQzkuOTU0OTkgMTYuNTI4MyAxMC4wMDM5IDE2LjI2NTIgMTAuMDAwMiAxNi4wMDAyVjEwLjAwMDJIMTYuMDAwMkMxNi4yNjUyIDEwLjAwMzkgMTYuNTI4MyA5Ljk1NDk5IDE2Ljc3NDMgOS44NTYxNkMxNy4wMjAyIDkuNzU3MzMgMTcuMjQ0MSA5LjYxMDYxIDE3LjQzMjggOS40MjQ1MkMxNy42MjE1IDkuMjM4NDMgMTcuNzcxNCA5LjAxNjY5IDE3Ljg3MzcgOC43NzIxN0MxNy45NzYgOC41Mjc2NiAxOC4wMjg3IDguMjY1MjUgMTguMDI4NyA4LjAwMDJDMTguMDI4NyA3LjczNTE1IDE3Ljk3NiA3LjQ3Mjc0IDE3Ljg3MzcgNy4yMjgyM0MxNy43NzE0IDYuOTgzNzEgMTcuNjIxNSA2Ljc2MTk3IDE3LjQzMjggNi41NzU4OEMxNy4yNDQxIDYuMzg5NzkgMTcuMDIwMiA2LjI0MzA3IDE2Ljc3NDMgNi4xNDQyNEMxNi41MjgzIDYuMDQ1NDEgMTYuMjY1MiA1Ljk5NjQ1IDE2LjAwMDIgNi4wMDAySDEwLjAwMDJaTTMyLjAwMDIgNi4wMDAyQzMxLjczNTIgNS45OTY0NSAzMS40NzIxIDYuMDQ1NDEgMzEuMjI2MSA2LjE0NDI0QzMwLjk4MDIgNi4yNDMwNyAzMC43NTYzIDYuMzg5NzkgMzAuNTY3NiA2LjU3NTg4QzMwLjM3ODkgNi43NjE5NyAzMC4yMjkgNi45ODM3MSAzMC4xMjY3IDcuMjI4MjNDMzAuMDI0NCA3LjQ3Mjc0IDI5Ljk3MTcgNy43MzUxNSAyOS45NzE3IDguMDAwMkMyOS45NzE3IDguMjY1MjUgMzAuMDI0NCA4LjUyNzY2IDMwLjEyNjcgOC43NzIxN0MzMC4yMjkgOS4wMTY2OSAzMC4zNzg5IDkuMjM4NDMgMzAuNTY3NiA5LjQyNDUyQzMwLjc1NjMgOS42MTA2MSAzMC45ODAyIDkuNzU3MzMgMzEuMjI2MSA5Ljg1NjE2QzMxLjQ3MjEgOS45NTQ5OSAzMS43MzUyIDEwLjAwMzkgMzIuMDAwMiAxMC4wMDAySDM4LjAwMDJWMTYuMDAwMkMzNy45OTY1IDE2LjI2NTIgMzguMDQ1NCAxNi41MjgzIDM4LjE0NDIgMTYuNzc0M0MzOC4yNDMxIDE3LjAyMDIgMzguMzg5OCAxNy4yNDQxIDM4LjU3NTkgMTcuNDMyOEMzOC43NjIgMTcuNjIxNSAzOC45ODM3IDE3Ljc3MTQgMzkuMjI4MiAxNy44NzM3QzM5LjQ3MjcgMTcuOTc2IDM5LjczNTEgMTguMDI4NyA0MC4wMDAyIDE4LjAyODdDNDAuMjY1MiAxOC4wMjg3IDQwLjUyNzcgMTcuOTc2IDQwLjc3MjIgMTcuODczN0M0MS4wMTY3IDE3Ljc3MTQgNDEuMjM4NCAxNy42MjE1IDQxLjQyNDUgMTcuNDMyOEM0MS42MTA2IDE3LjI0NDEgNDEuNzU3MyAxNy4wMjAyIDQxLjg1NjIgMTYuNzc0M0M0MS45NTUgMTYuNTI4MyA0Mi4wMDM5IDE2LjI2NTIgNDIuMDAwMiAxNi4wMDAyVjEwLjAwMDJDNDIuMDAwMiA3LjgxNDA3IDQwLjE4NjMgNi4wMDAyIDM4LjAwMDIgNi4wMDAySDMyLjAwMDJaTTcuOTY4OTUgMjkuOTcyOUM3LjQzOTIgMjkuOTgxMSA2LjkzNDM4IDMwLjE5OTMgNi41NjUyNyAzMC41NzkzQzYuMTk2MTcgMzAuOTU5NCA1Ljk5Mjk1IDMxLjQ3MDQgNi4wMDAyIDMyLjAwMDJWMzguMDAwMkM2LjAwMDIgNDAuMTg2MyA3LjgxNDA3IDQyLjAwMDIgMTAuMDAwMiA0Mi4wMDAySDE2LjAwMDJDMTYuMjY1MiA0Mi4wMDM5IDE2LjUyODMgNDEuOTU1IDE2Ljc3NDMgNDEuODU2MkMxNy4wMjAyIDQxLjc1NzMgMTcuMjQ0MSA0MS42MTA2IDE3LjQzMjggNDEuNDI0NUMxNy42MjE1IDQxLjIzODQgMTcuNzcxNCA0MS4wMTY3IDE3Ljg3MzcgNDAuNzcyMkMxNy45NzYgNDAuNTI3NyAxOC4wMjg3IDQwLjI2NTIgMTguMDI4NyA0MC4wMDAyQzE4LjAyODcgMzkuNzM1MSAxNy45NzYgMzkuNDcyNyAxNy44NzM3IDM5LjIyODJDMTcuNzcxNCAzOC45ODM3IDE3LjYyMTUgMzguNzYyIDE3LjQzMjggMzguNTc1OUMxNy4yNDQxIDM4LjM4OTggMTcuMDIwMiAzOC4yNDMxIDE2Ljc3NDMgMzguMTQ0MkMxNi41MjgzIDM4LjA0NTQgMTYuMjY1MiAzNy45OTY1IDE2LjAwMDIgMzguMDAwMkgxMC4wMDAyVjMyLjAwMDJDMTAuMDAzOSAzMS43MzI2IDkuOTUzOCAzMS40NjcgOS44NTI5NyAzMS4yMTkxQzkuNzUyMTMgMzAuOTcxMyA5LjYwMjU5IDMwLjc0NjEgOS40MTMxOCAzMC41NTcxQzkuMjIzNzcgMzAuMzY4MSA4Ljk5ODM2IDMwLjIxODkgOC43NTAyOCAzMC4xMTg2QzguNTAyMjEgMzAuMDE4MiA4LjIzNjUyIDI5Ljk2ODcgNy45Njg5NSAyOS45NzI5Wk0zOS45Njg5IDI5Ljk3MjlDMzkuNDM5MiAyOS45ODExIDM4LjkzNDQgMzAuMTk5MyAzOC41NjUzIDMwLjU3OTNDMzguMTk2MiAzMC45NTk0IDM3Ljk5MjkgMzEuNDcwNCAzOC4wMDAyIDMyLjAwMDJWMzguMDAwMkgzMi4wMDAyQzMxLjczNTIgMzcuOTk2NSAzMS40NzIxIDM4LjA0NTQgMzEuMjI2MSAzOC4xNDQyQzMwLjk4MDIgMzguMjQzMSAzMC43NTYzIDM4LjM4OTggMzAuNTY3NiAzOC41NzU5QzMwLjM3ODkgMzguNzYyIDMwLjIyOSAzOC45ODM3IDMwLjEyNjcgMzkuMjI4MkMzMC4wMjQ0IDM5LjQ3MjcgMjkuOTcxNyAzOS43MzUxIDI5Ljk3MTcgNDAuMDAwMkMyOS45NzE3IDQwLjI2NTIgMzAuMDI0NCA0MC41Mjc3IDMwLjEyNjcgNDAuNzcyMkMzMC4yMjkgNDEuMDE2NyAzMC4zNzg5IDQxLjIzODQgMzAuNTY3NiA0MS40MjQ1QzMwLjc1NjMgNDEuNjEwNiAzMC45ODAyIDQxLjc1NzMgMzEuMjI2MSA0MS44NTYyQzMxLjQ3MjEgNDEuOTU1IDMxLjczNTIgNDIuMDAzOSAzMi4wMDAyIDQyLjAwMDJIMzguMDAwMkM0MC4xODYzIDQyLjAwMDIgNDIuMDAwMiA0MC4xODYzIDQyLjAwMDIgMzguMDAwMlYzMi4wMDAyQzQyLjAwMzkgMzEuNzMyNiA0MS45NTM4IDMxLjQ2NyA0MS44NTMgMzEuMjE5MUM0MS43NTIxIDMwLjk3MTMgNDEuNjAyNiAzMC43NDYxIDQxLjQxMzIgMzAuNTU3MUM0MS4yMjM4IDMwLjM2ODEgNDAuOTk4NCAzMC4yMTg5IDQwLjc1MDMgMzAuMTE4NkM0MC41MDIyIDMwLjAxODIgNDAuMjM2NSAyOS45Njg3IDM5Ljk2ODkgMjkuOTcyOVoiIGZpbGw9IndoaXRlIi8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDBfMTE1OV8xMTgiPgo8cmVjdCB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIGZpbGw9IndoaXRlIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==",
24
+ "exit-fullscreen": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzExNTlfMTMyKSI+CjxwYXRoIGQ9Ik0xNi45NzA3IDUuOTcyNjZDMTYuNDQwNiA1Ljk4MDQyIDE1LjkzNTMgNi4xOTgzMiAxNS41NjU3IDYuNTc4NDZDMTUuMTk2MiA2Ljk1ODYxIDE0Ljk5MjcgNy40Njk5IDE1IDhMMTQuOTk4IDEzLjVDMTQuOTk4IDE0LjM0NTQgMTQuMzQzNCAxNSAxMy40OTggMTVINy45OTgwM0M3LjczMyAxNC45OTYzIDcuNDY5ODggMTUuMDQ1MiA3LjIyMzk0IDE1LjE0NEM2Ljk3ODAxIDE1LjI0MjkgNi43NTQxNiAxNS4zODk2IDYuNTY1NDIgMTUuNTc1N0M2LjM3NjY4IDE1Ljc2MTggNi4yMjY4MSAxNS45ODM1IDYuMTI0NTIgMTYuMjI4QzYuMDIyMjIgMTYuNDcyNSA1Ljk2OTU0IDE2LjczNDkgNS45Njk1NCAxN0M1Ljk2OTU0IDE3LjI2NSA2LjAyMjIyIDE3LjUyNzUgNi4xMjQ1MiAxNy43NzJDNi4yMjY4MSAxOC4wMTY1IDYuMzc2NjggMTguMjM4MiA2LjU2NTQyIDE4LjQyNDNDNi43NTQxNiAxOC42MTA0IDYuOTc4MDEgMTguNzU3MSA3LjIyMzk0IDE4Ljg1NkM3LjQ2OTg4IDE4Ljk1NDggNy43MzMgMTkuMDAzNyA3Ljk5ODAzIDE5SDEzLjQ5OEMxNi41MTI3IDE5IDE4Ljk5OCAxNi41MTQ2IDE4Ljk5OCAxMy41TDE5IDhDMTkuMDAzNiA3LjczMjU5IDE4Ljk1MzYgNy40NjcxNiAxOC44NTI5IDcuMjE5NDFDMTguNzUyMiA2Ljk3MTY2IDE4LjYwMjggNi43NDY2MiAxOC40MTM2IDYuNTU3NjFDMTguMjI0NCA2LjM2ODU5IDE3Ljk5OTMgNi4yMTk0NCAxNy43NTE0IDYuMTE4OTZDMTcuNTAzNiA2LjAxODQ5IDE3LjIzODEgNS45Njg3NCAxNi45NzA3IDUuOTcyNjZaTTMwLjk3MDcgNS45NzI2NkMzMC40NDA5IDUuOTgwOTQgMjkuOTM2MSA2LjE5OTA2IDI5LjU2NyA2LjU3OTE0QzI5LjE5NzkgNi45NTkyMyAyOC45OTQ3IDcuNDcwMjMgMjkuMDAxOSA4TDI5IDEzLjVDMjkgMTYuNTE0NiAzMS40ODU0IDE5IDM0LjUgMTlINDBDNDAuMjY1IDE5LjAwMzcgNDAuNTI4MSAxOC45NTQ4IDQwLjc3NDEgMTguODU2QzQxLjAyIDE4Ljc1NzEgNDEuMjQzOSAxOC42MTA0IDQxLjQzMjYgMTguNDI0M0M0MS42MjEzIDE4LjIzODIgNDEuNzcxMiAxOC4wMTY1IDQxLjg3MzUgMTcuNzcyQzQxLjk3NTggMTcuNTI3NSA0Mi4wMjg1IDE3LjI2NSA0Mi4wMjg1IDE3QzQyLjAyODUgMTYuNzM0OSA0MS45NzU4IDE2LjQ3MjUgNDEuODczNSAxNi4yMjhDNDEuNzcxMiAxNS45ODM1IDQxLjYyMTMgMTUuNzYxOCA0MS40MzI2IDE1LjU3NTdDNDEuMjQzOSAxNS4zODk2IDQxLjAyIDE1LjI0MjkgNDAuNzc0MSAxNS4xNDRDNDAuNTI4MSAxNS4wNDUyIDQwLjI2NSAxNC45OTYzIDQwIDE1SDM0LjVDMzMuNjU0NiAxNSAzMyAxNC4zNDU0IDMzIDEzLjVMMzMuMDAxOSA4QzMzLjAwNTYgNy43MzI0MiAzMi45NTU1IDcuNDY2ODMgMzIuODU0NyA3LjIxODk1QzMyLjc1MzkgNi45NzEwNyAzMi42MDQzIDYuNzQ1OTQgMzIuNDE0OSA2LjU1NjlDMzIuMjI1NSA2LjM2Nzg1IDMyLjAwMDEgNi4yMTg3NCAzMS43NTIgNi4xMTgzOUMzMS41MDM5IDYuMDE4MDMgMzEuMjM4MyA1Ljk2ODQ4IDMwLjk3MDcgNS45NzI2NlpNNy45OTk5OCAyOUM3LjczNDk2IDI4Ljk5NjIgNy40NzE4MyAyOS4wNDUyIDcuMjI1OSAyOS4xNDRDNi45Nzk5NiAyOS4yNDI5IDYuNzU2MTIgMjkuMzg5NiA2LjU2NzM4IDI5LjU3NTdDNi4zNzg2NCAyOS43NjE4IDYuMjI4NzcgMjkuOTgzNSA2LjEyNjQ3IDMwLjIyOEM2LjAyNDE3IDMwLjQ3MjUgNS45NzE1IDMwLjczNDkgNS45NzE1IDMxQzUuOTcxNSAzMS4yNjUgNi4wMjQxNyAzMS41Mjc1IDYuMTI2NDcgMzEuNzcyQzYuMjI4NzcgMzIuMDE2NSA2LjM3ODY0IDMyLjIzODIgNi41NjczOCAzMi40MjQzQzYuNzU2MTIgMzIuNjEwNCA2Ljk3OTk2IDMyLjc1NzEgNy4yMjU5IDMyLjg1NkM3LjQ3MTgzIDMyLjk1NDggNy43MzQ5NiAzMy4wMDM3IDcuOTk5OTggMzNIMTMuNUMxNC4zNDU0IDMzIDE1IDMzLjY1NDYgMTUgMzQuNVY0MEMxNC45OTYyIDQwLjI2NSAxNS4wNDUyIDQwLjUyODEgMTUuMTQ0IDQwLjc3NDFDMTUuMjQyOSA0MS4wMiAxNS4zODk2IDQxLjI0MzkgMTUuNTc1NyA0MS40MzI2QzE1Ljc2MTggNDEuNjIxMyAxNS45ODM1IDQxLjc3MTIgMTYuMjI4IDQxLjg3MzVDMTYuNDcyNSA0MS45NzU4IDE2LjczNDkgNDIuMDI4NSAxNyA0Mi4wMjg1QzE3LjI2NSA0Mi4wMjg1IDE3LjUyNzQgNDEuOTc1OCAxNy43NzIgNDEuODczNUMxOC4wMTY1IDQxLjc3MTIgMTguMjM4MiA0MS42MjEzIDE4LjQyNDMgNDEuNDMyNkMxOC42MTA0IDQxLjI0MzkgMTguNzU3MSA0MS4wMiAxOC44NTU5IDQwLjc3NDFDMTguOTU0OCA0MC41MjgxIDE5LjAwMzcgNDAuMjY1IDE5IDQwVjM0LjVDMTkgMzEuNDg1NCAxNi41MTQ2IDI5IDEzLjUgMjlINy45OTk5OFpNMzQuNSAyOUMzMS40ODU0IDI5IDI5IDMxLjQ4NTQgMjkgMzQuNVY0MEMyOC45OTYyIDQwLjI2NSAyOS4wNDUyIDQwLjUyODEgMjkuMTQ0IDQwLjc3NDFDMjkuMjQyOSA0MS4wMiAyOS4zODk2IDQxLjI0MzkgMjkuNTc1NyA0MS40MzI2QzI5Ljc2MTggNDEuNjIxMyAyOS45ODM1IDQxLjc3MTIgMzAuMjI4IDQxLjg3MzVDMzAuNDcyNSA0MS45NzU4IDMwLjczNDkgNDIuMDI4NSAzMSA0Mi4wMjg1QzMxLjI2NSA0Mi4wMjg1IDMxLjUyNzQgNDEuOTc1OCAzMS43NzIgNDEuODczNUMzMi4wMTY1IDQxLjc3MTIgMzIuMjM4MiA0MS42MjEzIDMyLjQyNDMgNDEuNDMyNkMzMi42MTA0IDQxLjI0MzkgMzIuNzU3MSA0MS4wMiAzMi44NTU5IDQwLjc3NDFDMzIuOTU0OCA0MC41MjgxIDMzLjAwMzcgNDAuMjY1IDMzIDQwVjM0LjVDMzMgMzMuNjU0NiAzMy42NTQ2IDMzIDM0LjUgMzNINDBDNDAuMjY1IDMzLjAwMzcgNDAuNTI4MSAzMi45NTQ4IDQwLjc3NDEgMzIuODU2QzQxLjAyIDMyLjc1NzEgNDEuMjQzOSAzMi42MTA0IDQxLjQzMjYgMzIuNDI0M0M0MS42MjEzIDMyLjIzODIgNDEuNzcxMiAzMi4wMTY1IDQxLjg3MzUgMzEuNzcyQzQxLjk3NTggMzEuNTI3NSA0Mi4wMjg1IDMxLjI2NSA0Mi4wMjg1IDMxQzQyLjAyODUgMzAuNzM0OSA0MS45NzU4IDMwLjQ3MjUgNDEuODczNSAzMC4yMjhDNDEuNzcxMiAyOS45ODM1IDQxLjYyMTMgMjkuNzYxOCA0MS40MzI2IDI5LjU3NTdDNDEuMjQzOSAyOS4zODk2IDQxLjAyIDI5LjI0MjkgNDAuNzc0MSAyOS4xNDRDNDAuNTI4MSAyOS4wNDUyIDQwLjI2NSAyOC45OTYyIDQwIDI5SDM0LjVaIiBmaWxsPSJ3aGl0ZSIvPgo8L2c+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzExNTlfMTMyIj4KPHJlY3Qgd2lkdGg9IjQ4IiBoZWlnaHQ9IjQ4IiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=",
25
+ previous: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzNiIgaGVpZ2h0PSIzNiI+PGRlZnM+PGZpbHRlciBpZD0iYSIgaGVpZ2h0PSIxNTAlIj48ZmVHYXVzc2lhbkJsdXIgaW49IlNvdXJjZUFscGhhIiBzdGREZXZpYXRpb249IjMiLz48ZmVPZmZzZXQgZHg9IjIiIGR5PSIyIiByZXN1bHQ9Im9mZnNldGJsdXIiLz48ZmVDb21wb25lbnRUcmFuc2Zlcj48ZmVGdW5jQSB0eXBlPSJsaW5lYXIiIHNsb3BlPSIuNyIvPjwvZmVDb21wb25lbnRUcmFuc2Zlcj48ZmVNZXJnZT48ZmVNZXJnZU5vZGUvPjxmZU1lcmdlTm9kZSBpbj0iU291cmNlR3JhcGhpYyIvPjwvZmVNZXJnZT48L2ZpbHRlcj48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBmaWx0ZXI9InVybCgjYSkiPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0zMiAzMlY0TDExIDE4em0tMjEgMFY0SDR2Mjh6Ii8+PC9nPjwvc3ZnPg==",
26
+ next: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzNiIgaGVpZ2h0PSIzNiI+PGRlZnM+PGZpbHRlciBpZD0iYSIgaGVpZ2h0PSIxNTAlIj48ZmVHYXVzc2lhbkJsdXIgaW49IlNvdXJjZUFscGhhIiBzdGREZXZpYXRpb249IjMiLz48ZmVPZmZzZXQgZHg9IjIiIGR5PSIyIiByZXN1bHQ9Im9mZnNldGJsdXIiLz48ZmVDb21wb25lbnRUcmFuc2Zlcj48ZmVGdW5jQSB0eXBlPSJsaW5lYXIiIHNsb3BlPSIuNyIvPjwvZmVDb21wb25lbnRUcmFuc2Zlcj48ZmVNZXJnZT48ZmVNZXJnZU5vZGUvPjxmZU1lcmdlTm9kZSBpbj0iU291cmNlR3JhcGhpYyIvPjwvZmVNZXJnZT48L2ZpbHRlcj48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBmaWx0ZXI9InVybCgjYSkiPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik00IDMyVjRsMjEgMTR6bTIxIDBWNGg3djI4eiIvPjwvZz48L3N2Zz4=",
27
+ pauseCircle: "data:image/png;base64,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",
28
+ playCircle: "data:image/png;base64,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",
29
+ playCircleBorder: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MCIgaGVpZ2h0PSI2MCI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48Y2lyY2xlIGN4PSIzMCIgY3k9IjMwIiByPSIyOSIgc3Ryb2tlPSIjRkZGIiBzdHJva2Utd2lkdGg9IjIiLz48cGF0aCBmaWxsPSIjRkZGIiBkPSJNMjIgMTcuMTJ2MjYuM2ExIDEgMCAwMDEuNTQuODRsMjAuNy0xMy4xNWExIDEgMCAwMDAtMS42OWwtMjAuNy0xMy4xNWExIDEgMCAwMC0xLjU0Ljg1eiIvPjwvZz48L3N2Zz4=",
30
+ arrowTop: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJNMCAwdjE2aDE2VjB6IiBvcGFjaXR5PSIuNSIvPjxwYXRoIGZpbGw9IiNDQ0MiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTIuNTcgMTAuMjdhLjgzLjgzIDAgMDEtMS4xNC0xLjJsNi01LjY4Yy4zMi0uMy44Mi0uMyAxLjE0IDBsNiA1LjY3YS44My44MyAwIDExLTEuMTQgMS4yMUw4IDUuMTVsLTUuNDMgNS4xMnoiLz48L2c+PC9zdmc+",
31
+ close: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTI5LjY1IDQuMDVhMS4yIDEuMiAwIDEwLTEuNy0xLjdsLTI1LjYgMjUuNmExLjIgMS4yIDAgMDAxLjcgMS43bDI1LjYtMjUuNnoiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMi4zNSA0LjA1YTEuMiAxLjIgMCAxMTEuNy0xLjdsMjUuNiAyNS42YTEuMiAxLjIgMCAwMS0xLjcgMS43TDIuMzUgNC4wNXoiLz48L3N2Zz4=",
32
+ cast: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0xIDE4djNoM2EzIDMgMCAwMC0zLTN6bTAtNHYyYTUgNSAwIDAxNSA1aDJhNyA3IDAgMDAtNy03em0wLTR2MmE5IDkgMCAwMTkgOWgyQTExIDExIDAgMDAxIDEwem0yMC03SDNhMiAyIDAgMDAtMiAydjNoMlY1aDE4djE0aC03djJoN2EyIDIgMCAwMDItMlY1YTIgMiAwIDAwLTItMnoiIGZpbGw9IiMwMDAiLz48cGF0aCBkPSJNMCAwaDI0djI0SDB6Ii8+PC9nPjwvc3ZnPg==",
33
+ castConnected: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNSIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTE5LjI3MyA0SDQuNzI3QTIuNzMgMi43MyAwIDAgMCAyIDYuNzI3djEuODE4YzAgLjUuNDEuOTEuOTEuOTFzLjkwOC0uNDEuOTA4LS45MVY2LjcyN2MwLS41LjQxLS45MDkuOTEtLjkwOWgxNC41NDVjLjUgMCAuOTA5LjQxLjkwOS45MXYxMC45MDhjMCAuNS0uNDEuOTEtLjkxLjkxaC01LjQ1NGMtLjUgMC0uOTA5LjQwOS0uOTA5LjkwOXMuNDEuOTA5LjkxLjkwOWg1LjQ1NEEyLjczIDIuNzMgMCAwIDAgMjIgMTcuNjM2VjYuNzI3QTIuNzMgMi43MyAwIDAgMCAxOS4yNzMgNFpNMiAxNy42MzZ2MS44MTljMCAuNS40MS45MDkuOTEuOTA5aDEuODE3QTIuNzMgMi43MyAwIDAgMCAyIDE3LjYzNlptMS4wNi0zLjU0MWEuOTA3LjkwNyAwIDEgMC0uMyAxLjc5IDQuNTI5IDQuNTI5IDAgMCAxIDMuNzE3IDMuNzJjLjA3My40NDUuNDYuNzU5Ljg5Ni43NTkuMDUgMCAuMSAwIC4xNS0uMDE0YS45MDcuOTA3IDAgMCAwIC43NDUtMS4wNDYgNi4zNTUgNi4zNTUgMCAwIDAtNS4yMDktNS4yMDlaIi8+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTMgMTAuNDE0YS45MDkuOTA5IDAgMSAwLS4xODIgMS44MDljMy44Ni4zODEgNi45MzcgMy40NjMgNy4zMjMgNy4zMjIuMDQ1LjQ2OS40NC44MTkuOTA1LjgxOWguMDlhLjkxLjkxIDAgMCAwIC44MTQtLjk5NmMtLjQ2OC00LjcxOC00LjIzMi04LjQ4Mi04Ljk1LTguOTV2LS4wMDRaIi8+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTEzLjI0NSAxNi43MjdoNC4yMWMuNSAwIC45MDktLjQwOS45MDktLjkwOVY4LjU0NWMwLS41LS40MS0uOTA5LS45MS0uOTA5SDYuNTQ2Yy0uNSAwLS45MDkuNDEtLjkwOS45MXYuNTcyYTExLjg0OCAxMS44NDggMCAwIDEgNy42MSA3LjYxWiIvPjwvc3ZnPg==",
34
+ castConntecting0: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0xIDE4djNoM2EzIDMgMCAwMC0zLTN6IiBmaWxsPSIjMDAwIi8+PHBhdGggZD0iTTEgMTR2MmE1IDUgMCAwMTUgNWgyYTcgNyAwIDAwLTctN3oiIG9wYWNpdHk9Ii4zIiBmaWxsPSIjMDAwIi8+PHBhdGggZD0iTTEgMTB2MmE5IDkgMCAwMTkgOWgyQTExIDExIDAgMDAxIDEweiIgb3BhY2l0eT0iLjMiIGZpbGw9IiMwMDAiLz48cGF0aCBkPSJNMjEgM0gzYTIgMiAwIDAwLTIgMnYzaDJWNWgxOHYxNGgtN3YyaDdhMiAyIDAgMDAyLTJWNWEyIDIgMCAwMC0yLTJ6IiBmaWxsPSIjMDAwIi8+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIvPjwvZz48L3N2Zz4=",
35
+ castConntecting1: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0xIDE4djNoM2EzIDMgMCAwMC0zLTN6IiBvcGFjaXR5PSIuMyIgZmlsbD0iIzAwMCIvPjxwYXRoIGQ9Ik0xIDE0djJhNSA1IDAgMDE1IDVoMmE3IDcgMCAwMC03LTd6IiBmaWxsPSIjMDAwIi8+PHBhdGggZD0iTTEgMTB2MmE5IDkgMCAwMTkgOWgyQTExIDExIDAgMDAxIDEweiIgb3BhY2l0eT0iLjMiIGZpbGw9IiMwMDAiLz48cGF0aCBkPSJNMjEgM0gzYTIgMiAwIDAwLTIgMnYzaDJWNWgxOHYxNGgtN3YyaDdhMiAyIDAgMDAyLTJWNWEyIDIgMCAwMC0yLTJ6IiBmaWxsPSIjMDAwIi8+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIvPjwvZz48L3N2Zz4=",
36
+ castConntecting2: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0xIDE4djNoM2EzIDMgMCAwMC0zLTN6TTEgMTR2MmE1IDUgMCAwMTUgNWgyYTcgNyAwIDAwLTctN3oiIG9wYWNpdHk9Ii4zIiBmaWxsPSIjMDAwIi8+PHBhdGggZD0iTTEgMTB2MmE5IDkgMCAwMTkgOWgyQTExIDExIDAgMDAxIDEweiIgZmlsbD0iIzAwMCIvPjxwYXRoIGQ9Ik0yMSAzSDNhMiAyIDAgMDAtMiAydjNoMlY1aDE4djE0aC03djJoN2EyIDIgMCAwMDItMlY1YTIgMiAwIDAwLTItMnoiIGZpbGw9IiMwMDAiLz48cGF0aCBkPSJNMCAwaDI0djI0SDB6Ii8+PC9nPjwvc3ZnPg==",
37
+ castCenterIcon: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTQyIDM0SDZWMTBINDJNNDIgNkg2QzQuOTM5MTMgNiAzLjkyMTcyIDYuNDIxNDMgMy4xNzE1NyA3LjE3MTU3QzIuNDIxNDMgNy45MjE3MiAyIDguOTM5MTMgMiAxMFYzNEMyIDM1LjA2MDkgMi40MjE0MyAzNi4wNzgzIDMuMTcxNTcgMzYuODI4NEMzLjkyMTcyIDM3LjU3ODYgNC45MzkxMyAzOCA2IDM4SDE2VjQySDMyVjM4SDQyQzQzLjA2MDkgMzggNDQuMDc4MyAzNy41Nzg2IDQ0LjgyODQgMzYuODI4NEM0NS41Nzg2IDM2LjA3ODMgNDYgMzUuMDYwOSA0NiAzNFYxMEM0NiA4LjkzOTEzIDQ1LjU3ODYgNy45MjE3MiA0NC44Mjg0IDcuMTcxNTdDNDQuMDc4MyA2LjQyMTQzIDQzLjA2MDkgNiA0MiA2WiIgZmlsbD0iYmxhY2siLz4KPC9zdmc+Cg==",
38
+ warning: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTI0IDVDMjIuMzQ1OCA1IDIwLjg2NTMgNS44NTU0OCAyMC4wMzgyIDcuMjg3MzhMMy42MTkxIDM1LjcyNDFDMi43OTI5IDM3LjE1NyAyLjc5Mzc3IDM4Ljg2NyAzLjYyMDg5IDQwLjI5ODlDNC40NDcwOSA0MS43MzA4IDUuOTI4NDcgNDIuNTg2MyA3LjU4MjcgNDIuNTg2M0g0MC40MTczQzQyLjA3MTUgNDIuNTg2MyA0My41NTI5IDQxLjczMDggNDQuMzc5MSA0MC4yOTg5QzQ1LjIwNjIgMzguODY3IDQ1LjIwNzEgMzcuMTU3IDQ0LjM4MDkgMzUuNzI0MUwyNy45NjE4IDcuMjg3MzhDMjcuMTM1NiA1Ljg1NTQ4IDI1LjY1NDIgNSAyNCA1Wk0yNCA4LjY1OTgxQzI0LjE1OTIgOC42NTk4MSAyNC41NTM4IDguNzA0NjQgMjQuNzkxNiA5LjExNzI4TDQxLjIxMDcgMzcuNTU0QzQxLjQ0OTUgMzcuOTY2NyA0MS4yOTAzIDM4LjMzMTggNDEuMjEwNyAzOC40NjlDNDEuMTMxMSAzOC42MDYyIDQwLjg5NDkgMzguOTI2NSA0MC40MTczIDM4LjkyNjVINy41ODA5MUM3LjEwNDIyIDM4LjkyNjUgNi44Njg4NyAzOC42MDYyIDYuNzg5MjYgMzguNDY5QzYuNzA5NjYgMzguMzMxOCA2LjU1MDQ2IDM3Ljk2NjcgNi43ODkyNiAzNy41NTRMMjMuMjA4NCA5LjExNzI4QzIzLjQ0NjIgOC43MDQ2NCAyMy44NDA4IDguNjU5ODEgMjQgOC42NTk4MVpNMjMuOTg1NyAxNS4xMzI0QzIzLjM1MjYgMTUuMTMyNCAyMi44Mzg4IDE1LjMyNjEgMjIuNDQzNSAxNS43MTMyQzIyLjA0NzMgMTYuMDk5MyAyMS44NTk2IDE2LjU4MjMgMjEuODc3IDE3LjE2MjRMMjIuMTY2NSAyOC4wMDI1QzIyLjIwMjIgMjkuMjE1NyAyMi44MTY3IDI5LjgyMzQgMjQuMDEyNSAyOS44MjM0QzI1LjE3MzYgMjkuODIzNCAyNS43NjM0IDI5LjIxNjUgMjUuNzc5OSAyOC4wMDQyTDI2LjEyMyAxNy4xODkyQzI2LjE0MDQgMTYuNjA5MSAyNS45NDMyIDE2LjEyMDkgMjUuNTI5NyAxNS43MjU3QzI1LjExNyAxNS4zMjk1IDI0LjYwMTUgMTUuMTMyNCAyMy45ODU3IDE1LjEzMjRaTTI0IDMyLjIzOTVDMjIuNTk1NiAzMi4yMzk1IDIxLjcwNTUgMzMuNDI2NiAyMS43MDU1IDM0LjQzMzlDMjEuNzA1NSAzNS40NDEzIDIyLjU2NTQgMzYuNjI4NCAyNCAzNi42Mjg0QzI1LjQzNDYgMzYuNjI4NCAyNi4yOTQ1IDM1LjUwNTMgMjYuMjk0NSAzNC40MzM5QzI2LjI5NDUgMzMuMzYyNSAyNS40MDQ1IDMyLjIzOTUgMjQgMzIuMjM5NVoiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo=",
39
+ cancel: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSczNicgaGVpZ2h0PSczNic+PGcgZmlsbD0nbm9uZScgZmlsbC1ydWxlPSdldmVub2RkJz48cGF0aCBkPSdNMCAwaDM2djM2SDB6JyBvcGFjaXR5PScuNScvPjxwYXRoIGQ9J00zMS41MzMgNC45MDNMNC40NjcgMzAuNjQ1bTI3LjA2Ni40NTJMNC45MzMgNC45MDMnIGZpbGwtcnVsZT0nbm9uemVybycgc3Ryb2tlPScjRkZGJyBzdHJva2Utd2lkdGg9JzQnLz48L2c+PC9zdmc+",
40
+ info: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTI0LjMxNSAzQzEyLjU2MjMgMyAzIDEyLjU2MjMgMyAyNC4zMTVDMyAzNi4wNjc3IDEyLjU2MjMgNDUuNjMgMjQuMzE1IDQ1LjYzQzM2LjA2NzcgNDUuNjMgNDUuNjMgMzYuMDY3NyA0NS42MyAyNC4zMTVDNDUuNjMgMTIuNTYyMyAzNi4wNjc3IDMgMjQuMzE1IDNaTTI0LjMxNSA2LjI3OTIzQzM0LjI5MzYgNi4yNzkyMyA0Mi4zNTA4IDE0LjMzNjQgNDIuMzUwOCAyNC4zMTVDNDIuMzUwOCAzNC4yOTM2IDM0LjI5MzYgNDIuMzUwOCAyNC4zMTUgNDIuMzUwOEMxNC4zMzY0IDQyLjM1MDggNi4yNzkyMyAzNC4yOTM2IDYuMjc5MjMgMjQuMzE1QzYuMjc5MjMgMTQuMzM2NCAxNC4zMzY0IDYuMjc5MjMgMjQuMzE1IDYuMjc5MjNaTTIyLjY3NTQgMTQuNDc3M1YxNy43NTY1SDI1Ljk1NDZWMTQuNDc3M0gyMi42NzU0Wk0yMi42NzU0IDIxLjAzNThWMzQuMTUyN0gyNS45NTQ2VjIxLjAzNThIMjIuNjc1NFoiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo=",
41
+ share: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTI3LjQxNTEgNi4wMDAxNUMyNy4wMDQ2IDYuMDA2MDcgMjYuNjEyOSA2LjE3MzMgMjYuMzI0OCA2LjQ2NTY4QzI2LjAzNjYgNi43NTgwNiAyNS44NzUgNy4xNTIxMSAyNS44NzUgNy41NjI2NVYxNS42NzIyQzIzLjEwNjUgMTUuOTgxIDE4LjU1NTEgMTYuNzc0NCAxMy45NzMxIDE5Ljc0MTJDOC43NzA4MiAyMy4xMDk3IDQuMTQ2MDIgMjkuMzAyNSA0LjAzODY2IDM5LjUyNjhDNC4wMzcwOSAzOS41MzQ2IDQuMDMyMDcgMzkuNTM5MyA0LjAzMDUyIDM5LjU0NzFINC4wMzQ1OUM0LjAzMzQ3IDM5LjY1OTUgNCAzOS43NDA5IDQgMzkuODU0M0M0LjAwMDQxIDQwLjI0MTcgNC4xNDQ3MyA0MC42MTUyIDQuNDA0OTUgNDAuOTAyMkM0LjY2NTE3IDQxLjE4OTMgNS4wMjI3NCA0MS4zNjk0IDUuNDA4MjggNDEuNDA3N0M1Ljc5MzgxIDQxLjQ0NTkgNi4xNzk4MiA0MS4zMzk2IDYuNDkxNCA0MS4xMDk0QzYuODAyOTcgNDAuODc5MSA3LjAxNzkgNDAuNTQxMyA3LjA5NDQ4IDQwLjE2MTVDOC4zMzEyOSAzMy45Nzc5IDEyLjE4NjYgMzEuMjM3NyAxNi40NTkzIDI5LjgzMjNDMjAuMDY1NSAyOC42NDYyIDIzLjU5NjMgMjguNjQ1OCAyNS44NzUgMjguNzY2M1YzNi43MjkzQzI1Ljg3NTEgMzcuMDM4MyAyNS45NjY4IDM3LjM0MDMgMjYuMTM4NSAzNy41OTcxQzI2LjMxMDIgMzcuODU0IDI2LjU1NDIgMzguMDU0MiAyNi44Mzk3IDM4LjE3MjRDMjcuMTI1MSAzOC4yOTA3IDI3LjQzOTIgMzguMzIxNiAyNy43NDIzIDM4LjI2MTRDMjguMDQ1MyAzOC4yMDEyIDI4LjMyMzcgMzguMDUyNSAyOC41NDIyIDM3LjgzNDFMNDMuMTI1NiAyMy4yNTA3QzQzLjQxODUgMjIuOTU3NyA0My41ODMgMjIuNTYwMyA0My41ODMgMjIuMTQ2QzQzLjU4MyAyMS43MzE3IDQzLjQxODUgMjEuMzM0MyA0My4xMjU2IDIxLjA0MTNMMjguNTQyMiA2LjQ1NzkyQzI4LjM5NDUgNi4zMTAxMyAyOC4yMTg2IDYuMTkzNDggMjguMDI1MSA2LjExNDg1QzI3LjgzMTUgNi4wMzYyMiAyNy42MjQxIDUuOTk3MjIgMjcuNDE1MSA2LjAwMDE1Wk0yOSAxMS4zMzQ2TDM5LjgxMTQgMjIuMTQ2TDI5IDMyLjk1NzNWMjcuMjM0M0MyOS4wMDAyIDI2Ljg0NTEgMjguODU1MSAyNi40Njk5IDI4LjU5MzIgMjYuMTgyQzI4LjMzMTMgMjUuODk0MiAyNy45NzE0IDI1LjcxNDQgMjcuNTg0IDI1LjY3NzlDMjUuNDEzMiAyNS40NzQ2IDIwLjQ0NzYgMjUuMjMxIDE1LjQ4MjcgMjYuODY0QzEzLjE2MzIgMjcuNjI2OSAxMC44NTk4IDI4LjkxMDkgOC44ODI4MSAzMC43NDU4QzEwLjQ2NTIgMjYuODc2OSAxMi45MDE4IDI0LjE1OTQgMTUuNjcyIDIyLjM2NTdDMjAuMjI4MiAxOS40MTU2IDI1LjQ2MzggMTguNjk4NiAyNy41NTE0IDE4LjU0NDlDMjcuOTQ1MSAxOC41MTYxIDI4LjMxMzIgMTguMzM5NCAyOC41ODE5IDE4LjA1MDNDMjguODUwNiAxNy43NjEyIDI5IDE3LjM4MTIgMjkgMTYuOTg2NVYxMS4zMzQ2WiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==",
42
+ chromecast: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTQwLjc3MzIgNkg4LjEyMjE5QzQuNzQ0ODUgNiAyLjAwMDEyIDguNzQ0NTUgMi4wMDAxMiAxMi4xMjE3VjE2LjIwMjhDMi4wMDAxMiAxNy4zMjUxIDIuOTE4NDMgMTguMjQzMyA0LjA0MDgxIDE4LjI0MzNDNS4xNjMxOSAxOC4yNDMzIDYuMDgxNSAxNy4zMjUxIDYuMDgxNSAxNi4yMDI4VjEyLjEyMTdDNi4wODE1IDEwLjk5OTQgNi45OTk4MSAxMC4wODExIDguMTIyMTkgMTAuMDgxMUg0MC43NzMyQzQxLjg5NTYgMTAuMDgxMSA0Mi44MTM5IDEwLjk5OTQgNDIuODEzOSAxMi4xMjE3VjM2LjYwODNDNDIuODEzOSAzNy43MzA2IDQxLjg5NTYgMzguNjQ4OSA0MC43NzMyIDM4LjY0ODlIMjguNTI5MUMyNy40MDY3IDM4LjY0ODkgMjYuNDg4NCAzOS41NjcxIDI2LjQ4ODQgNDAuNjg5NEMyNi40ODg0IDQxLjgxMTcgMjcuNDA2NyA0Mi43MyAyOC41MjkxIDQyLjczSDQwLjc3MzJDNDQuMTUwNiA0Mi43MyA0Ni44OTUzIDM5Ljk4NTUgNDYuODk1MyAzNi42MDgzVjEyLjEyMTdDNDYuODk1MyA4Ljc0NDU1IDQ0LjE1MDYgNiA0MC43NzMyIDZaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMi4wMDAxMiAzNi42MDg0VjQwLjY4OTVDMi4wMDAxMiA0MS44MTE4IDIuOTE4NDMgNDIuNzMwMSA0LjA0MDgxIDQyLjczMDFIOC4xMjIxOUM4LjEyMjE5IDM5LjM1MjkgNS4zNzc0NiAzNi42MDg0IDIuMDAwMTIgMzYuNjA4NFoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik00LjM3NzQ4IDI4LjY2MDRDMy4yNzU1IDI4LjQ3NjcgMi4yMTQzNSAyOS4yMjE1IDIuMDMwNjggMzAuMzMzNkMxLjg0NzAyIDMxLjQ0NTcgMi41OTE4NyAzMi40OTY2IDMuNzA0MDUgMzIuNjgwM0M3Ljk3OTI5IDMzLjM5NDUgMTEuMzM2MiAzNi43NTEyIDEyLjA1MDUgNDEuMDI2MkMxMi4yMTM3IDQyLjAyNiAxMy4wODEgNDIuNzMgMTQuMDYwNSA0Mi43M0MxNC4xNzI4IDQyLjczIDE0LjI4NSA0Mi43MyAxNC4zOTczIDQyLjY5OTRDMTUuNTA5NCA0Mi41MTU4IDE2LjI1NDMgNDEuNDY0OSAxNi4wNzA2IDQwLjM1MjhDMTUuMDYwNSAzNC4zNjM3IDEwLjM2NjkgMjkuNjcwNSA0LjM3NzQ4IDI4LjY2MDRaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNNC4yNDQ4NyAyMC4zOTYyQzMuMTIyNDkgMjAuMjg0IDIuMTIyNTYgMjEuMTAwMiAyLjAxMDMyIDIyLjIyMjVDMS44OTgwOCAyMy4zNDQ4IDIuNzE0MzUgMjQuMzQ0NyAzLjgzNjczIDI0LjQ1NjlDMTIuNDk5NSAyNS4zMTM5IDE5LjQwNzIgMzIuMjMxNCAyMC4yNzQ1IDQwLjg5MzZDMjAuMzc2NSA0MS45NDQ0IDIxLjI2NDIgNDIuNzMwMSAyMi4zMDUgNDIuNzMwMUMyMi4zNzY0IDQyLjczMDEgMjIuNDM3NiA0Mi43MzAxIDIyLjUwOSA0Mi43MzAxQzIzLjYzMTQgNDIuNjE3OCAyNC40NDc3IDQxLjYxOCAyNC4zMzU1IDQwLjQ5NTdDMjMuMjg0NSAyOS45MDUyIDE0LjgzNiAyMS40NTczIDQuMjQ0ODcgMjAuNDA2NFYyMC4zOTYyWiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==",
43
+ airplay: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTUuNyA2QzMuNjU5NDUgNiAyIDcuNjU5NDUgMiA5LjdWMzAuMDVDMiAzMi4wOTA1IDMuNjU5NDUgMzMuNzUgNS43IDMzLjc1SDEzLjM2MDJMMTYuNTI5IDMwLjA1SDUuN1Y5LjdINDIuN0w0Mi43MDM2IDMwLjA1SDMxLjg3MUwzNS4wMzYyIDMzLjc1SDQyLjdDNDQuNzQwNiAzMy43NSA0Ni40IDMyLjA5MDUgNDYuNCAzMC4wNVY5LjdDNDYuNCA3LjY1OTQ1IDQ0Ljc0MDYgNiA0Mi43IDZINS43Wk0yNC4yIDI2LjM1QzIzLjkyMjUgMjYuMzQ5OCAyMy42NDg1IDI2LjQxMjEgMjMuMzk4MyAyNi41MzIyQzIzLjE0ODEgMjYuNjUyMyAyMi45MjgxIDI2LjgyNzEgMjIuNzU0NyAyNy4wNDM4TDExLjgyNDUgMzkuODEzMUMxMS42NDM0IDM5Ljk4NTUgMTEuNDk5IDQwLjE5MjkgMTEuNDAwMyA0MC40MjI3QzExLjMwMTUgNDAuNjUyNSAxMS4yNTA0IDQwLjg5OTkgMTEuMjUgNDEuMTVDMTEuMjUwMyA0MS42MDc5IDExLjQyMDQgNDIuMDQ5NCAxMS43Mjc1IDQyLjM4OTFDMTIuMDM0NSA0Mi43Mjg5IDEyLjQ1NjYgNDIuOTQyNyAxMi45MTIxIDQyLjk4OTJMMTIuOTE1NyA0M0gzNS40ODQzTDM1LjQ4NzkgNDIuOTg5MkMzNS45NDM0IDQyLjk0MjcgMzYuMzY1NSA0Mi43Mjg5IDM2LjY3MjUgNDIuMzg5MUMzNi45Nzk2IDQyLjA0OTQgMzcuMTQ5NyA0MS42MDc5IDM3LjE1IDQxLjE1QzM3LjE0OTYgNDAuODk5OSAzNy4wOTg1IDQwLjY1MjUgMzYuOTk5NyA0MC40MjI3QzM2LjkwMSA0MC4xOTI5IDM2Ljc1NjYgMzkuOTg1NSAzNi41NzU1IDM5LjgxMzFMMzYuNTcxOSAzOS44MDk1TDI1LjY0ODkgMjcuMDUxQzI1LjQ3NTggMjYuODMyNSAyNS4yNTU2IDI2LjY1NiAyNS4wMDQ3IDI2LjUzNDdDMjQuNzUzOCAyNi40MTMzIDI0LjQ3ODcgMjYuMzUwMSAyNC4yIDI2LjM1WiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==",
44
+ list: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNyA3YTMgMyAwIDEgMCAwIDYgMyAzIDAgMCAwIDAtNlptOSAxYTIgMiAwIDEgMCAwIDRoMjRhMiAyIDAgMSAwIDAtNEgxNlptMCAxNGEyIDIgMCAxIDAgMCA0aDI0YTIgMiAwIDEgMCAwLTRIMTZabS0yIDE2YzAtMS4xLjktMiAyLTJoMjRhMiAyIDAgMSAxIDAgNEgxNmEyIDIgMCAwIDEtMi0yWk00IDI0YTMgMyAwIDEgMSA2IDAgMyAzIDAgMCAxLTYgMFptMyAxMWEzIDMgMCAxIDAgMCA2IDMgMyAwIDAgMCAwLTZaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=",
45
+ facebook: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIHZpZXdCb3g9IjAgMCA1MCA1MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTI1IDVDMTMuOTU1IDUgNSAxMy45NTUgNSAyNUM1IDM1LjAyNjcgMTIuMzg2NyA0My4zMDY3IDIyLjAxIDQ0Ljc1MzNWMzAuM0gxNy4wNjE3VjI1LjA0MzNIMjIuMDFWMjEuNTQ1QzIyLjAxIDE1Ljc1MzMgMjQuODMxNyAxMy4yMTE3IDI5LjY0NSAxMy4yMTE3QzMxLjk1IDEzLjIxMTcgMzMuMTcgMTMuMzgzMyAzMy43NDY3IDEzLjQ2VjE4LjA0ODNIMzAuNDYzM0MyOC40MiAxOC4wNDgzIDI3LjcwNjcgMTkuOTg2NyAyNy43MDY3IDIyLjE3VjI1LjA0MzNIMzMuNjk1TDMyLjg4MzMgMzAuM0gyNy43MDY3VjQ0Ljc5NUMzNy40NjgzIDQzLjQ3MTcgNDUgMzUuMTI1IDQ1IDI1QzQ1IDEzLjk1NSAzNi4wNDUgNSAyNSA1WiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==",
46
+ twitter: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTQ0LjggMTEuMDk5M0M0My4yNjg4IDExLjc3OTMgNDEuNjI0IDEyLjIzNjkgMzkuODk3NiAxMi40NDMzQzQxLjY2MDggMTEuMzg3MyA0My4wMTI4IDkuNzE1MjYgNDMuNjQ5NiA3LjcyMTY2QzQyLjAwMTYgOC42OTkyNiA0MC4xNzQ0IDkuNDA5NjYgMzguMjI4OCA5Ljc5MzY2QzM2LjY3MiA4LjEzNDQ2IDM0LjQ1NDQgNy4wOTc2NiAzMiA3LjA5NzY2QzI3LjI4NjQgNy4wOTc2NiAyMy40NjU2IDEwLjkyMDEgMjMuNDY1NiAxNS42MzIxQzIzLjQ2NTYgMTYuMzAwOSAyMy41NDI0IDE2Ljk1MzcgMjMuNjg2NCAxNy41NzYxQzE2LjU5MzYgMTcuMjIwOSAxMC4zMDU2IDEzLjgyMjUgNi4wOTQ0MyA4LjY1NzY2QzUuMzYxNjMgOS45MTg0NiA0Ljk0MDgzIDExLjM4NDEgNC45NDA4MyAxMi45NTA1QzQuOTQwODMgMTUuOTEwNSA2LjQ0NjQzIDE4LjUyMzMgOC43MzYwMyAyMC4wNTI5QzcuMzM3NjMgMjAuMDA4MSA2LjAyMDgzIDE5LjYyNDEgNC44NzA0MyAxOC45ODU3QzQuODcwNDMgMTkuMDIyNSA0Ljg3MDQzIDE5LjA1NjEgNC44NzA0MyAxOS4wOTI5QzQuODcwNDMgMjMuMjI4OSA3LjgxMTIzIDI2LjY3ODUgMTEuNzE2OCAyNy40NjA5QzExLjAwMTYgMjcuNjU2MSAxMC4yNDY0IDI3Ljc2MDEgOS40NjcyMyAyNy43NjAxQzguOTE4NDMgMjcuNzYwMSA4LjM4MjQzIDI3LjcwNTcgNy44NjI0MyAyNy42MDgxQzguOTQ4ODMgMzAuOTk4NSAxMi4xMDA4IDMzLjQ2NzMgMTUuODM1MiAzMy41MzYxQzEyLjkxNTIgMzUuODI1NyA5LjIzNTIzIDM3LjE5MDUgNS4yMzUyMyAzNy4xOTA1QzQuNTQ3MjMgMzcuMTkwNSAzLjg2NzIzIDM3LjE1MDUgMy4xOTg0MyAzNy4wNzA1QzYuOTc2MDMgMzkuNDkxMyAxMS40NjA4IDQwLjkwNDEgMTYuMjgxNiA0MC45MDQxQzMxLjk4MDggNDAuOTA0MSA0MC41NjMyIDI3Ljg5OTMgNDAuNTYzMiAxNi42MjA5QzQwLjU2MzIgMTYuMjUxMyA0MC41NTUyIDE1Ljg4MzMgNDAuNTM5MiAxNS41MTY5QzQyLjIwOCAxNC4zMTIxIDQzLjY1NiAxMi44MDk3IDQ0LjggMTEuMDk5M1oiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo=",
47
+ line: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIHZpZXdCb3g9IjAgMCA1MCA1MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEwIDYuNjY2NjNDOC4xNTgzNSA2LjY2NjYzIDYuNjY2NjkgOC4xNTgyOSA2LjY2NjY5IDkuOTk5OTZWNDBDNi42NjY2OSA0MS44NDE2IDguMTU4MzUgNDMuMzMzMyAxMCA0My4zMzMzSDQwQzQxLjg0MTcgNDMuMzMzMyA0My4zMzM0IDQxLjg0MTYgNDMuMzMzNCA0MFY5Ljk5OTk2QzQzLjMzMzQgOC4xNTgyOSA0MS44NDE3IDYuNjY2NjMgNDAgNi42NjY2M0gxMFpNMjUuMDA2NSAxMi43NzY3QzMyLjg2ODIgMTIuNzc2NyAzOS4yNjQzIDE3Ljk2NzIgMzkuMjY0MyAyNC4zNDg5QzM5LjI2NDMgMjYuOTAzOSAzOC4yNzQ0IDI5LjIwNjMgMzYuMjA3NyAzMS40NzEzQzMzLjIxNiAzNC45MTQ2IDI2LjUyODIgMzkuMTA3NiAyNS4wMDY1IDM5Ljc0OTNDMjMuNDg2NSA0MC4zODkzIDIzLjcwOTYgMzkuMzQxMSAyMy43Njk2IDM4Ljk4MTFDMjMuODA2MiAzOC43Njc3IDIzLjk3NDYgMzcuNzYwNCAyMy45NzQ2IDM3Ljc2MDRDMjQuMDIzIDM3LjM5NTQgMjQuMDcwOCAzNi44MzMgMjMuOTI1OCAzNi40NzEzQzIzLjc2NDEgMzYuMDc2MyAyMy4xMzQzIDM1Ljg2ODIgMjIuNjY5MyAzNS43NjgyQzE1LjgxNiAzNC44NjE1IDEwLjc0NTUgMzAuMDY4OSAxMC43NDU1IDI0LjM0ODlDMTAuNzQ1NSAxNy45Njg5IDE3LjE0NDkgMTIuNzc2NyAyNS4wMDY1IDEyLjc3NjdaTTIxLjA0NDkgMjEuNTE2OUMyMC42MjY2IDIxLjUxNjkgMjAuMjg2NSAyMS44NDYxIDIwLjI4NjUgMjIuMjQ2MVYyNy43NTM5QzIwLjI4NjUgMjguMTU3MiAyMC42MjY2IDI4LjQ4MyAyMS4wNDQ5IDI4LjQ4M0MyMS40NjMzIDI4LjQ4MyAyMS44MDM0IDI4LjE1NTUgMjEuODAzNCAyNy43NTM5VjIyLjI0NjFDMjEuODAzNCAyMS44NDYxIDIxLjQ2MzMgMjEuNTE2OSAyMS4wNDQ5IDIxLjUxNjlaTTI0LjI3MDkgMjEuNTE2OUMyNC4xOTU5IDIxLjUxNjkgMjQuMTE4IDIxLjUyNiAyNC4wNDMgMjEuNTUyN0MyMy43NDggMjEuNjUyNyAyMy41NDgyIDIxLjkyOTUgMjMuNTQ4MiAyMi4yNDI4VjI3Ljc1MDZDMjMuNTQ4MiAyOC4xNTM5IDIzLjg3MDkgMjguNDgzIDI0LjI3MDkgMjguNDgzQzI0LjY3MDkgMjguNDgzIDI0Ljk5MzUgMjguMTUwNiAyNC45OTM1IDI3Ljc1MDZWMjQuMzQyNEwyNy43OTk1IDI4LjE5MDFDMjcuOTM0NSAyOC4zNzM0IDI4LjE0OSAyOC40ODMgMjguMzc1NyAyOC40ODNDMjguNDU0IDI4LjQ4MyAyOC41MzAyIDI4LjQ3MDYgMjguNjAzNSAyOC40NDRDMjguOTAwMiAyOC4zNDQgMjkuMTAxNiAyOC4wNjcyIDI5LjEwMTYgMjcuNzUzOUgyOS4wOTUxVjIyLjI0NjFDMjkuMDk1MSAyMS44NDYxIDI4Ljc3MjMgMjEuNTE2OSAyOC4zNzU3IDIxLjUxNjlDMjcuOTc5IDIxLjUxNjkgMjcuNjUzIDIxLjg0NjEgMjcuNjUzIDIyLjI0NjFWMjUuNjU0M0wyNC44NDcgMjEuODA5OUMyNC43MTIgMjEuNjI2NSAyNC40OTc1IDIxLjUxNjkgMjQuMjcwOSAyMS41MTY5Wk0zMS41NDk1IDIxLjUxNjlDMzEuMTMxMiAyMS41MTY5IDMwLjc5MSAyMS44NDYxIDMwLjc5MSAyMi4yNDYxVjI0Ljk5NjdWMjVWMjcuNzUwNkMzMC43OTEgMjguMTUzOSAzMS4xMzEyIDI4LjQ4MyAzMS41NDk1IDI4LjQ4M0gzNC40MjM4QzM0Ljg0MzggMjguNDgzIDM1LjE4NTYgMjguMTUzOSAzNS4xODU2IDI3Ljc1MzlDMzUuMTg1NiAyNy4zNTM5IDM0Ljg0MjIgMjcuMDI4IDM0LjQyMzggMjcuMDI4SDMyLjMwOFYyNS43MjU5SDM0LjQyMzhDMzQuODQzOCAyNS43MjU5IDM1LjE4NTYgMjUuNCAzNS4xODU2IDI1QzM1LjE4NTYgMjQuNTk2NiAzNC44NDIyIDI0LjI3MDggMzQuNDIzOCAyNC4yNzA4TDMyLjMwOCAyNC4yNzRWMjIuOTcySDM0LjQyMzhDMzQuODQzOCAyMi45NzIgMzUuMTg1NiAyMi42NDc3IDM1LjE4NTYgMjIuMjQ2MUMzNS4xODU2IDIxLjg0NjEgMzQuODQyMiAyMS41MTY5IDM0LjQyMzggMjEuNTE2OUgzMS41NDk1Wk0xNS41NzI5IDIxLjUyMDFDMTUuMTU0NiAyMS41MjAxIDE0LjgxNDUgMjEuODQ0NCAxNC44MTQ1IDIyLjI0NjFWMjcuNzUzOUMxNC44MTQ1IDI4LjE1NzIgMTUuMTU0NiAyOC40ODMgMTUuNTcyOSAyOC40ODNIMTguNDQ3M0MxOC44NjczIDI4LjQ4MyAxOS4yMDQxIDI4LjE1NTUgMTkuMjA1NyAyNy43NTcxQzE5LjIwNTcgMjcuMzU3MSAxOC44NjU2IDI3LjAzMTIgMTguNDQ3MyAyNy4wMzEySDE2LjMzMTRWMjIuMjQ2MUMxNi4zMzE0IDIxLjg0NjEgMTUuOTkxMyAyMS41MjAxIDE1LjU3MjkgMjEuNTIwMVoiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo=",
48
+ embed: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iNTAiIHZpZXdCb3g9IjAgMCA1MCA1MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTguODU0MTkgNS4yMDgzN0M2LjI2OTgxIDUuMjA4MzcgNC4xNjY2OSA3LjMxMTUgNC4xNjY2OSA5Ljg5NTg3VjMxLjc3MDlDNC4xNjY2OSAzNC4zNTUyIDYuMjY5ODEgMzYuNDU4NCA4Ljg1NDE5IDM2LjQ1ODRIMTcuNzA4NFY0MS42NjY3SDE0LjA2MjVDMTMuODU1NSA0MS42NjM4IDEzLjY0OTkgNDEuNzAyIDEzLjQ1NzggNDEuNzc5MkMxMy4yNjU2IDQxLjg1NjQgMTMuMDkwOCA0MS45NzExIDEyLjk0MzMgNDIuMTE2NUMxMi43OTU4IDQyLjI2MTggMTIuNjc4OCA0Mi40MzUxIDEyLjU5ODggNDIuNjI2MUMxMi41MTg5IDQyLjgxNzEgMTIuNDc3OCA0My4wMjIxIDEyLjQ3NzggNDMuMjI5MkMxMi40Nzc4IDQzLjQzNjMgMTIuNTE4OSA0My42NDEzIDEyLjU5ODggNDMuODMyM0MxMi42Nzg4IDQ0LjAyMzMgMTIuNzk1OCA0NC4xOTY2IDEyLjk0MzMgNDQuMzQyQzEzLjA5MDggNDQuNDg3MyAxMy4yNjU2IDQ0LjYwMiAxMy40NTc4IDQ0LjY3OTJDMTMuNjQ5OSA0NC43NTY0IDEzLjg1NTUgNDQuNzk0NiAxNC4wNjI1IDQ0Ljc5MTdIMTkuMDE0NUMxOS4xODIyIDQ0LjgxOTMgMTkuMzUzNCA0NC44MTkzIDE5LjUyMTEgNDQuNzkxN0gzMC40NzI4QzMwLjY0MDYgNDQuODE5MyAzMC44MTE3IDQ0LjgxOTMgMzAuOTc5NCA0NC43OTE3SDM1LjkzNzVDMzYuMTQ0NiA0NC43OTQ2IDM2LjM1MDEgNDQuNzU2NCAzNi41NDIzIDQ0LjY3OTJDMzYuNzM0NCA0NC42MDIgMzYuOTA5MyA0NC40ODczIDM3LjA1NjcgNDQuMzQyQzM3LjIwNDIgNDQuMTk2NiAzNy4zMjEzIDQ0LjAyMzMgMzcuNDAxMiA0My44MzIzQzM3LjQ4MTEgNDMuNjQxMyAzNy41MjIzIDQzLjQzNjMgMzcuNTIyMyA0My4yMjkyQzM3LjUyMjMgNDMuMDIyMSAzNy40ODExIDQyLjgxNzEgMzcuNDAxMiA0Mi42MjYxQzM3LjMyMTMgNDIuNDM1MSAzNy4yMDQyIDQyLjI2MTggMzcuMDU2NyA0Mi4xMTY1QzM2LjkwOTMgNDEuOTcxMSAzNi43MzQ0IDQxLjg1NjQgMzYuNTQyMyA0MS43NzkyQzM2LjM1MDEgNDEuNzAyIDM2LjE0NDYgNDEuNjYzOCAzNS45Mzc1IDQxLjY2NjdIMzIuMjkxN1YzNi40NTg0SDQxLjE0NTlDNDMuNzMwMiAzNi40NTg0IDQ1LjgzMzQgMzQuMzU1MiA0NS44MzM0IDMxLjc3MDlWOS44OTU4N0M0NS44MzM0IDcuMzExNSA0My43MzAyIDUuMjA4MzcgNDEuMTQ1OSA1LjIwODM3SDguODU0MTlaTTI2LjU5OTEgMTIuNTAyMUMyNi43MDI4IDEyLjUwNDIgMjYuODA5NSAxMi41MTUzIDI2LjkxNDUgMTIuNTM4N0MyNy43NTYyIDEyLjczMzUgMjguMjc5MSAxMy41NzM5IDI4LjA4NDMgMTQuNDE0NUwyNC45NTkzIDI3Ljk1NjJDMjQuNzkyNyAyOC42NzkxIDI0LjE1MSAyOS4xNjY3IDIzLjQzOTYgMjkuMTY2N0MyMy4zMjI5IDI5LjE2NjcgMjMuMjA0MyAyOS4xNTQxIDIzLjA4NTYgMjkuMTI4MUMyMi4yNDQ5IDI4LjkzMzMgMjEuNzE4OSAyOC4wOTI5IDIxLjkxMzcgMjcuMjUyMkwyNS4wMzg3IDEzLjcxMDZDMjUuMjA5MSAxMi45NzQxIDI1Ljg3MzMgMTIuNDg3MSAyNi41OTkxIDEyLjUwMjFaTTE4LjEwOTIgMTUuNjI5MUMxOC41MDggMTUuNTk4MyAxOC45MTk0IDE1LjcxOTcgMTkuMjQ2NCAxNi4wMDE0QzE5LjkwMTYgMTYuNTYyOSAxOS45NzY4IDE3LjU0OTYgMTkuNDE1MyAxOC4yMDQ4TDE3LjE2MzEgMjAuODMzNEwxOS40MTUzIDIzLjQ2MkMxOS45Nzc4IDI0LjExNzIgMTkuOTAxNiAyNS4xMDM5IDE5LjI0NjQgMjUuNjY1M0MxOC45NTE2IDI1LjkxODQgMTguNTg5NiAyNi4wNDE3IDE4LjIyOTIgMjYuMDQxN0MxNy43ODk2IDI2LjA0MTcgMTcuMzUxNCAyNS44NTU4IDE3LjA0MzEgMjUuNDk2NUwxMy45MTgxIDIxLjg1MDZDMTMuNDE2IDIxLjI2NDIgMTMuNDE2IDIwLjQwMTUgMTMuOTE4MSAxOS44MTYxTDE3LjA0MzEgMTYuMTcwM0MxNy4zMjM4IDE1Ljg0MzIgMTcuNzEwMyAxNS42NiAxOC4xMDkyIDE1LjYyOTFaTTMxLjg5MDkgMTUuNjMxMUMzMi4yODk3IDE1LjY2MTYgMzIuNjc2MiAxNS44NDMyIDMyLjk1NyAxNi4xNzAzTDM2LjA4MiAxOS44MTYxQzM2LjU4NDEgMjAuNDAxNSAzNi41ODQxIDIxLjI2NDIgMzYuMDgyIDIxLjg1MDZMMzIuOTU3IDI1LjQ5NjVDMzIuNjQ3NiAyNS44NTU4IDMyLjIxMDQgMjYuMDQxNyAzMS43NzA5IDI2LjA0MTdDMzEuNDEwNCAyNi4wNDE3IDMxLjA0ODQgMjUuOTE4NCAzMC43NTM2IDI1LjY2NTNDMzAuMDk4NCAyNS4xMDM5IDMwLjAyMzMgMjQuMTE3MiAzMC41ODQ3IDIzLjQ2MkwzMi44MzY5IDIwLjgzMzRMMzAuNTg0NyAxOC4yMDQ4QzMwLjAyMjIgMTcuNTQ5NiAzMC4wOTg0IDE2LjU2MjkgMzAuNzUzNiAxNi4wMDE0QzMxLjA4MDcgMTUuNzIxMiAzMS40OTIxIDE1LjYwMDcgMzEuODkwOSAxNS42MzExWk0yMC44MzM0IDM2LjQ1ODRIMjkuMTY2N1Y0MS42NjY3SDIwLjgzMzRWMzYuNDU4NFoiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo=",
49
+ live: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTIzLjk5NTQgMzAuNjQxNEMyNy4wNDYzIDMwLjY0MTQgMjkuNTE5NSAyOC4yMDYxIDI5LjUxOTUgMjUuMjAxOUMyOS41MTk1IDIyLjE5NzcgMjcuMDQ2MyAxOS43NjIzIDIzLjk5NTQgMTkuNzYyM0MyMC45NDQ0IDE5Ljc2MjMgMTguNDcxMiAyMi4xOTc3IDE4LjQ3MTIgMjUuMjAxOUMxOC40NzEyIDI4LjIwNjEgMjAuOTQ0NCAzMC42NDE0IDIzLjk5NTQgMzAuNjQxNFoiIGZpbGw9IiNFOTM4MTciLz4KPHBhdGggZD0iTTE0LjIwODMgMzMuNzY5MkMxMy42MjgzIDMzLjc2OTIgMTMuMDU3NSAzMy40OTcyIDEyLjY5ODQgMzIuOTk4NkM5LjM3NDcgMjguMzM4NyA5LjM3NDcgMjIuMDc0MSAxMi42OTg0IDE3LjQwNTJDMTMuMjg3NyAxNi41ODkyIDE0LjQyOTMgMTYuMzg5OCAxNS4yNjcxIDE2Ljk2MDlDMTYuMDk1OCAxNy41MzIxIDE2LjI5ODMgMTguNjY1MyAxNS43MTgzIDE5LjQ5MDNDMTMuMjg3NyAyMi45MDgyIDEzLjI4NzcgMjcuNDk1NiAxNS43MTgzIDMwLjkxMzRDMTYuMjk4MyAzMS43Mjk0IDE2LjEwNSAzMi44NjI2IDE1LjI2NzEgMzMuNDQyOEMxNC45MzU3IDMzLjY2MDQgMTQuNTY3NCAzMy43NjkyIDE0LjIwODMgMzMuNzY5MloiIGZpbGw9IiNFOTM4MTciLz4KPHBhdGggZD0iTTcuNDc4MTIgMzguNDAxOUM2Ljg5ODA4IDM4LjQwMTkgNi4zMjcyNSAzOC4xMjk5IDUuOTY4MTggMzcuNjMxM0MwLjY3NDE4MiAzMC4xOTcyIDAuNjc0MTgyIDIwLjIwNjUgNS45NjgxOCAxMi43NzI1QzYuNTU3NDIgMTEuOTU2NSA3LjcwODI5IDExLjc1NzEgOC41MzY5MSAxMi4zMjgzQzkuMzY1NTQgMTIuOTA4NSA5LjU2ODA5IDE0LjAzMjYgOC45ODgwNSAxNC44NTc2QzQuNTc3OTMgMjEuMDQ5NyA0LjU3NzkzIDI5LjM2MzEgOC45ODgwNSAzNS41NDYxQzkuNTY4MDkgMzYuMzYyIDkuMzc0NzUgMzcuNDk1MyA4LjUzNjkxIDM4LjA3NTVDOC4yMTQ2NyAzOC4yOTMxIDcuODQ2MzkgMzguNDAxOSA3LjQ3ODEyIDM4LjQwMTlaIiBmaWxsPSIjRTkzODE3Ii8+CjxwYXRoIGQ9Ik0zMy43OTE1IDMzLjc2OTNDMzMuNDIzMyAzMy43NjkzIDMzLjA1NSAzMy42NjA1IDMyLjczMjcgMzMuNDQyOUMzMS45MDQxIDMyLjg3MTggMzEuNzAxNiAzMS43Mzg1IDMyLjI4MTYgMzAuOTEzNUMzNC43MTIyIDI3LjQ5NTcgMzQuNzEyMiAyMi45MDgzIDMyLjI4MTYgMTkuNDkwNEMzMS43MDE2IDE4LjY3NDUgMzEuODk0OSAxNy41NDEzIDMyLjczMjcgMTYuOTYxQzMzLjU3MDYgMTYuMzgwOCAzNC43MTIyIDE2LjU4MDMgMzUuMzAxNSAxNy40MDUzQzM4LjYyNTIgMjIuMDY1MiAzOC42MjUyIDI4LjMyOTcgMzUuMzAxNSAzMi45OTg3QzM0Ljk0MjQgMzMuNDk3MyAzNC4zNzE2IDMzLjc2OTMgMzMuNzkxNSAzMy43NjkzWiIgZmlsbD0iI0U5MzgxNyIvPgo8cGF0aCBkPSJNNDAuNTEyNiAzOC40MDE5QzQwLjE0NDMgMzguNDAxOSAzOS43NzYgMzguMjkzMSAzOS40NTM4IDM4LjA3NTZDMzguNjI1MiAzNy41MDQ0IDM4LjQyMjYgMzYuMzcxMiAzOS4wMDI3IDM1LjU0NjJDNDMuNDEyOCAyOS4zNTQxIDQzLjQxMjggMjEuMDQwNyAzOS4wMDI3IDE0Ljg1NzdDMzguNDIyNiAxNC4wNDE4IDM4LjYxNiAxMi45MDg1IDM5LjQ1MzggMTIuMzI4M0M0MC4yOTE2IDExLjc1NzEgNDEuNDMzMyAxMS45NDc1IDQyLjAyMjUgMTIuNzcyNUM0Ny4zMTY1IDIwLjIwNjYgNDcuMzE2NSAzMC4xOTczIDQyLjAyMjUgMzcuNjMxM0M0MS42NjM1IDM4LjEzIDQxLjA5MjYgMzguNDAxOSA0MC41MTI2IDM4LjQwMTlaIiBmaWxsPSIjRTkzODE3Ii8+Cjwvc3ZnPgo=",
50
+ nonlive: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTIzLjk5NTQgMzAuNjQxNEMyNy4wNDYzIDMwLjY0MTQgMjkuNTE5NSAyOC4yMDYxIDI5LjUxOTUgMjUuMjAxOUMyOS41MTk1IDIyLjE5NzcgMjcuMDQ2MyAxOS43NjIzIDIzLjk5NTQgMTkuNzYyM0MyMC45NDQ0IDE5Ljc2MjMgMTguNDcxMiAyMi4xOTc3IDE4LjQ3MTIgMjUuMjAxOUMxOC40NzEyIDI4LjIwNjEgMjAuOTQ0NCAzMC42NDE0IDIzLjk5NTQgMzAuNjQxNFoiIGZpbGw9IiNDNENERDUiLz4KPHBhdGggZD0iTTE0LjIwODMgMzMuNzY5MkMxMy42MjgzIDMzLjc2OTIgMTMuMDU3NSAzMy40OTcyIDEyLjY5ODQgMzIuOTk4NkM5LjM3NDcgMjguMzM4NyA5LjM3NDcgMjIuMDc0MSAxMi42OTg0IDE3LjQwNTJDMTMuMjg3NyAxNi41ODkyIDE0LjQyOTMgMTYuMzg5OCAxNS4yNjcxIDE2Ljk2MDlDMTYuMDk1OCAxNy41MzIxIDE2LjI5ODMgMTguNjY1MyAxNS43MTgzIDE5LjQ5MDNDMTMuMjg3NyAyMi45MDgyIDEzLjI4NzcgMjcuNDk1NiAxNS43MTgzIDMwLjkxMzRDMTYuMjk4MyAzMS43Mjk0IDE2LjEwNSAzMi44NjI2IDE1LjI2NzEgMzMuNDQyOEMxNC45MzU3IDMzLjY2MDQgMTQuNTY3NCAzMy43NjkyIDE0LjIwODMgMzMuNzY5MloiIGZpbGw9IiNDNENERDUiLz4KPHBhdGggZD0iTTcuNDc4MTIgMzguNDAxOUM2Ljg5ODA4IDM4LjQwMTkgNi4zMjcyNSAzOC4xMjk5IDUuOTY4MTggMzcuNjMxM0MwLjY3NDE4MiAzMC4xOTcyIDAuNjc0MTgyIDIwLjIwNjUgNS45NjgxOCAxMi43NzI1QzYuNTU3NDIgMTEuOTU2NSA3LjcwODI5IDExLjc1NzEgOC41MzY5MSAxMi4zMjgzQzkuMzY1NTQgMTIuOTA4NSA5LjU2ODA5IDE0LjAzMjYgOC45ODgwNSAxNC44NTc2QzQuNTc3OTMgMjEuMDQ5NyA0LjU3NzkzIDI5LjM2MzEgOC45ODgwNSAzNS41NDYxQzkuNTY4MDkgMzYuMzYyIDkuMzc0NzUgMzcuNDk1MyA4LjUzNjkxIDM4LjA3NTVDOC4yMTQ2NyAzOC4yOTMxIDcuODQ2MzkgMzguNDAxOSA3LjQ3ODEyIDM4LjQwMTlaIiBmaWxsPSIjQzRDREQ1Ii8+CjxwYXRoIGQ9Ik0zMy43OTE1IDMzLjc2OTNDMzMuNDIzMyAzMy43NjkzIDMzLjA1NSAzMy42NjA1IDMyLjczMjcgMzMuNDQyOUMzMS45MDQxIDMyLjg3MTggMzEuNzAxNiAzMS43Mzg1IDMyLjI4MTYgMzAuOTEzNUMzNC43MTIyIDI3LjQ5NTcgMzQuNzEyMiAyMi45MDgzIDMyLjI4MTYgMTkuNDkwNEMzMS43MDE2IDE4LjY3NDUgMzEuODk0OSAxNy41NDEzIDMyLjczMjcgMTYuOTYxQzMzLjU3MDYgMTYuMzgwOCAzNC43MTIyIDE2LjU4MDMgMzUuMzAxNSAxNy40MDUzQzM4LjYyNTIgMjIuMDY1MiAzOC42MjUyIDI4LjMyOTcgMzUuMzAxNSAzMi45OTg3QzM0Ljk0MjQgMzMuNDk3MyAzNC4zNzE2IDMzLjc2OTMgMzMuNzkxNSAzMy43NjkzWiIgZmlsbD0iI0M0Q0RENSIvPgo8cGF0aCBkPSJNNDAuNTEyNiAzOC40MDE5QzQwLjE0NDMgMzguNDAxOSAzOS43NzYgMzguMjkzMSAzOS40NTM4IDM4LjA3NTZDMzguNjI1MiAzNy41MDQ0IDM4LjQyMjYgMzYuMzcxMiAzOS4wMDI3IDM1LjU0NjJDNDMuNDEyOCAyOS4zNTQxIDQzLjQxMjggMjEuMDQwNyAzOS4wMDI3IDE0Ljg1NzdDMzguNDIyNiAxNC4wNDE4IDM4LjYxNiAxMi45MDg1IDM5LjQ1MzggMTIuMzI4M0M0MC4yOTE2IDExLjc1NzEgNDEuNDMzMyAxMS45NDc1IDQyLjAyMjUgMTIuNzcyNUM0Ny4zMTY1IDIwLjIwNjYgNDcuMzE2NSAzMC4xOTczIDQyLjAyMjUgMzcuNjMxM0M0MS42NjM1IDM4LjEzIDQxLjA5MjYgMzguNDAxOSA0MC41MTI2IDM4LjQwMTlaIiBmaWxsPSIjQzRDREQ1Ii8+Cjwvc3ZnPgo="
51
+ };
52
+
53
+ //#endregion
54
+ //#region src/ui/RecommendationPanel.jsx
55
+ const openIcon = {
56
+ width: "1rem",
57
+ height: "1rem",
58
+ margin: "0 0.5rem",
59
+ fontWeight: "bold",
60
+ backgroundImage: `url(${icon_default.arrowTop})`,
61
+ transition: "transform 1s ease"
62
+ };
63
+ const closeIcon = {
64
+ ...openIcon,
65
+ transform: "rotateX(180deg)"
66
+ };
67
+ const titleStyle = {
68
+ position: "relative",
69
+ padding: "0.5rem 2.5rem",
70
+ display: "flex",
71
+ alignItems: "center",
72
+ color: "#ccc",
73
+ fontSize: "20px",
74
+ cursor: "pointer"
75
+ };
76
+ const maskStyle = {
77
+ position: "absolute",
78
+ left: 0,
79
+ bottom: 0,
80
+ width: "100%",
81
+ height: "100vh"
82
+ };
83
+ const contentStyle = { overflow: "auto" };
84
+ const contentHiddenStyle = {
85
+ overflow: "hidden",
86
+ pointerEvents: "none",
87
+ touchAction: "none"
88
+ };
89
+ const foldedHeight = "var(--bottom-spacing, 5rem)";
90
+ const style = {
91
+ container: {
92
+ position: "absolute",
93
+ zIndex: 1,
94
+ width: "100%",
95
+ transition: "transform 0.5s ease, opacity 0.8s ease",
96
+ transform: "translateY(0)"
97
+ },
98
+ open: { transform: `translateY(-100%) translateY(${foldedHeight})` }
99
+ };
100
+ const RecommendationPanel = ({ open, onToggle, title, children = null }) => children && /* @__PURE__ */ jsx("div", {
101
+ className: `${open ? "pinned" : ""}`,
102
+ style: {
103
+ height: foldedHeight,
104
+ marginTop: "-1rem"
105
+ },
106
+ children: /* @__PURE__ */ jsxs("div", {
107
+ style: {
108
+ ...style.container,
109
+ ...open && style.open
110
+ },
111
+ onClick: () => {
112
+ if (!open) onToggle();
113
+ },
114
+ children: [/* @__PURE__ */ jsxs("div", {
115
+ style: titleStyle,
116
+ onClick: open && onToggle ? onToggle : void 0,
117
+ children: [
118
+ open && /* @__PURE__ */ jsx("div", { style: maskStyle }),
119
+ title,
120
+ /* @__PURE__ */ jsx("div", { style: { ...open ? closeIcon : openIcon } })
121
+ ]
122
+ }), /* @__PURE__ */ jsx("div", {
123
+ style: {
124
+ ...contentStyle,
125
+ ...!open && contentHiddenStyle
126
+ },
127
+ children
128
+ })]
129
+ })
130
+ });
131
+ var RecommendationPanel_default = RecommendationPanel;
132
+
133
+ //#endregion
134
+ //#region src/classic.js
135
+ const getInitUiState = ({ recommendation } = {}) => ({
136
+ mediaSources: [],
137
+ selectedMediaSource: null,
138
+ mediaSourcePrecedence: "application",
139
+ recommendationPanel: {
140
+ enabled: Boolean(recommendation),
141
+ opening: false
142
+ },
143
+ ad: {},
144
+ error: null
145
+ });
146
+ const getAdStatus = (action) => {
147
+ const { adPosition, totalAds, duration, clickThroughUrl } = action.adProgressData;
148
+ return {
149
+ position: adPosition,
150
+ total: totalAds,
151
+ adBreakDuration: duration,
152
+ skipTimeOffset: action.skipTimeOffset,
153
+ clickThroughUrl
154
+ };
155
+ };
156
+ const type = {
157
+ SELECT_MEDIA_SOURCE: "UI_SELECT_MEDIA_SOURCE",
158
+ SET_MEDIA_SOURCES: "UI_SET_MEDIA_SOURCES",
159
+ CHANGE_RECOMMENDATION_PANEL: "CHANGE_RECOMMENDATION_PANEL",
160
+ TOGGLE_RECOMMENDATION_PANEL: "TOGGLE_RECOMMENDATION_PANEL",
161
+ OPEN_PANEL: "OPEN_PANEL",
162
+ HIDE_PANEL: "HIDE_PANEL",
163
+ OFFER_AUTOPLAY: "OFFER_AUTOPLAY",
164
+ DISMISS_AUTOPLAY: "DISMISS_AUTOPLAY",
165
+ ERROR: "UI_ERROR",
166
+ RESET_END_ROLL: "RESET_END_ROLL",
167
+ STREAM_EVENTS_CHANGED: "STREAM_EVENTS_CHANGED",
168
+ AD_BREAK_STARTED: "AD_BREAK_STARTED",
169
+ AD_BREAK_ENDED: "AD_BREAK_ENDED",
170
+ VISIBILITY_CHANGE: "VISIBILITY_CHANGE",
171
+ PLAYBACK_END: "PLAYBACK_END"
172
+ };
173
+ const uiActions = {
174
+ selectMediaSource: (mediaSource) => ({
175
+ type: type.SELECT_MEDIA_SOURCE,
176
+ mediaSource
177
+ }),
178
+ setMediaSources: (items = []) => ({
179
+ type: type.SET_MEDIA_SOURCES,
180
+ items
181
+ }),
182
+ enableRecommendationPanel: () => ({
183
+ type: type.CHANGE_RECOMMENDATION_PANEL,
184
+ enabled: true
185
+ }),
186
+ disableRecommendationPanel: () => ({
187
+ type: type.CHANGE_RECOMMENDATION_PANEL,
188
+ enabled: false
189
+ }),
190
+ toggleRecommendationPanel: () => ({ type: type.TOGGLE_RECOMMENDATION_PANEL }),
191
+ openPanel: (panel) => ({
192
+ type: type.OPEN_PANEL,
193
+ panel
194
+ }),
195
+ hidePanel: () => ({ type: type.HIDE_PANEL }),
196
+ offerAutoplay: (state) => ({
197
+ type: type.OFFER_AUTOPLAY,
198
+ endState: state
199
+ }),
200
+ dismissAutoplay: ({ openOther, hasRecommendation }) => ({
201
+ type: type.DISMISS_AUTOPLAY,
202
+ openOther,
203
+ hasRecommendation
204
+ }),
205
+ streamEventsChanged: (streamEvents, playbackStatus) => ({
206
+ type: type.STREAM_EVENTS_CHANGED,
207
+ streamEvents,
208
+ playbackStatus
209
+ }),
210
+ adBreakStarted: (adProgressData, skipTimeOffset) => ({
211
+ type: type.AD_BREAK_STARTED,
212
+ adProgressData,
213
+ skipTimeOffset
214
+ }),
215
+ adBreakEnded: () => ({ type: type.AD_BREAK_ENDED }),
216
+ playbackEnd: ({ hasRecommendation }) => ({
217
+ type: type.PLAYBACK_END,
218
+ hasRecommendation
219
+ })
220
+ };
221
+ const reduceUi = (state = getInitUiState(), action) => {
222
+ switch (action.type) {
223
+ case type.SELECT_MEDIA_SOURCE: return {
224
+ ...state,
225
+ mediaSourcePrecedence: "user",
226
+ selectedMediaSource: action.mediaSource
227
+ };
228
+ case type.CHANGE_RECOMMENDATION_PANEL: return {
229
+ ...state,
230
+ recommendationPanel: {
231
+ enabled: action.enabled,
232
+ opening: action.enabled && state.recommendationPanel.opening
233
+ },
234
+ activePanel: action.enabled && state.recommendationPanel.opening ? "recommendation" : void 0
235
+ };
236
+ case type.TOGGLE_RECOMMENDATION_PANEL: return {
237
+ ...state,
238
+ openedBy: "user-action",
239
+ activePanel: state.activePanel === "recommendation" ? void 0 : "recommendation"
240
+ };
241
+ case type.OPEN_PANEL: return {
242
+ ...state,
243
+ activePanel: action.panel
244
+ };
245
+ case type.HIDE_PANEL: return {
246
+ ...state,
247
+ activePanel: void 0
248
+ };
249
+ case type.PLAYBACK_END: return state.activePanel || !action.hasRecommendation ? state : {
250
+ ...state,
251
+ activePanel: "recommendation",
252
+ openedBy: "auto-open"
253
+ };
254
+ case type.OFFER_AUTOPLAY: return {
255
+ ...state,
256
+ activePanel: "autoplay-next",
257
+ ...action.endState === "ended" && { openNext: state.activePanel },
258
+ recommendationPanel: {
259
+ ...state.recommendationPanel,
260
+ opening: false
261
+ }
262
+ };
263
+ case "close-panels": return state.activePanel === "autoplay-next" || action.name !== "autoplay-next" && state.openedBy === "auto-open" ? {
264
+ ...state,
265
+ activePanel: void 0
266
+ } : state;
267
+ case type.DISMISS_AUTOPLAY: return {
268
+ ...state,
269
+ activePanel: void 0,
270
+ ...action.openOther && action.hasRecommendation ? {
271
+ activePanel: "recommendation",
272
+ openedBy: "auto-open",
273
+ recommendationPanel: {
274
+ enabled: true,
275
+ opening: true
276
+ }
277
+ } : {
278
+ activePanel: "",
279
+ recommendationPanel: {
280
+ enabled: true,
281
+ opening: false
282
+ }
283
+ },
284
+ openNext: ""
285
+ };
286
+ case "content-change": return {
287
+ ...state,
288
+ ad: {},
289
+ streamEvents: [],
290
+ activePanel: void 0,
291
+ openNext: void 0,
292
+ recommendationPanel: {
293
+ ...state.recommendationPanel,
294
+ opening: false
295
+ }
296
+ };
297
+ case type.STREAM_EVENTS_CHANGED: return {
298
+ ...state,
299
+ streamEvents: action.streamEvents
300
+ };
301
+ case type.AD_BREAK_STARTED: return {
302
+ ...state,
303
+ ad: getAdStatus(action),
304
+ activePanel: ""
305
+ };
306
+ case type.AD_BREAK_ENDED: return {
307
+ ...state,
308
+ ad: { total: 0 }
309
+ };
310
+ default: return state;
311
+ }
312
+ };
313
+
314
+ //#endregion
315
+ //#region src/ad/playerIntegration.jsx
316
+ const padTime$1 = (value) => Math.floor(value).toString().padStart(2, "0");
317
+ const formatTime = (sourceTime) => {
318
+ const sign = sourceTime < 0 ? "-" : "";
319
+ const time = Math.abs(sourceTime || 0, 0);
320
+ const seconds = padTime$1(time % 60);
321
+ const minutes = padTime$1(time / 60 % 60);
322
+ return sign + [
323
+ Math.floor(time / 60 / 60),
324
+ minutes,
325
+ seconds
326
+ ].filter(Boolean).join(":");
327
+ };
328
+ const linkPluginEvents = (plugins, handlers) => {
329
+ const registered = plugins.map((plugin) => Object.entries(handlers).map(([eventName, handler]) => plugin.on?.(eventName, (event) => handler(event, plugin))));
330
+ return () => [].concat(...registered).forEach((removeListener) => removeListener?.());
331
+ };
332
+ const linkAdState = ({ contentType, dispatch, plugins, onAdSkip }) => {
333
+ const handleStart = (event) => {
334
+ dispatch(uiActions.adBreakStarted(event.getStreamData().adProgressData, contentType !== "lives" && event.getAd()?.getSkipTimeOffset()));
335
+ };
336
+ return linkPluginEvents?.(plugins, {
337
+ cuepointsChanged: (event, plugin) => dispatch(uiActions.streamEventsChanged(event.cuepoints, plugin.getPlaybackStatus())),
338
+ adBreakStarted: handleStart,
339
+ adBreakEnded: () => {
340
+ dispatch(uiActions.adBreakEnded());
341
+ },
342
+ skip: onAdSkip
343
+ });
344
+ };
345
+ const useIntervalUpdate = (get) => {
346
+ const [value, setValue] = useState(get());
347
+ useEffect(() => {
348
+ const intervalId = setInterval(() => setValue(get()), 500);
349
+ return () => clearInterval(intervalId);
350
+ }, []);
351
+ return value;
352
+ };
353
+ const SkipAdButton = ({ skipAd, getWaitTime }) => {
354
+ const waitTime = useIntervalUpdate(getWaitTime);
355
+ return !isLiveDuration(waitTime) && /* @__PURE__ */ jsx(SkipButton, {
356
+ waitTime,
357
+ onClick: skipAd
358
+ });
359
+ };
360
+ const Status = ({ total, position, getRemainingTime }) => {
361
+ const remainingTime = useIntervalUpdate(getRemainingTime);
362
+ return total > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
363
+ "Ad $",
364
+ position,
365
+ " of $",
366
+ total,
367
+ "・$",
368
+ formatTime(remainingTime)
369
+ ] });
370
+ };
371
+ const getAdUi = ({ position, total, adBreakDuration, skipTimeOffset, clickThroughUrl }, plugins, media) => {
372
+ const getRemainingTime = () => getMediaTime(media, { plugins }).adRemainingTime;
373
+ const getSkipWaitTime = () => skipTimeOffset >= 0 ? getRemainingTime() - (adBreakDuration - skipTimeOffset) : Infinity;
374
+ return {
375
+ title: false,
376
+ channelTitle: false,
377
+ controlButtons: {
378
+ rewindButton: false,
379
+ forwardButton: false,
380
+ nextEpisodeButton: false,
381
+ previousEpisodeButton: false
382
+ },
383
+ seekbar: false,
384
+ volumeControl: false,
385
+ fullscreenButton: false,
386
+ adLink: clickThroughUrl && /* @__PURE__ */ jsx("a", {
387
+ href: clickThroughUrl,
388
+ rel: "noreferrer",
389
+ target: "_blank",
390
+ children: "Learn More"
391
+ }),
392
+ adStatus: /* @__PURE__ */ jsx(Status, {
393
+ position,
394
+ total,
395
+ getRemainingTime
396
+ }),
397
+ adSkipButton: /* @__PURE__ */ jsx(SkipAdButton, {
398
+ getWaitTime: getSkipWaitTime,
399
+ skipAd: () => plugins.forEach((plugin) => plugin.skipAd?.())
400
+ })
401
+ };
402
+ };
403
+
404
+ //#endregion
405
+ //#region ../../node_modules/mitt/dist/mitt.mjs
406
+ function mitt_default(n) {
407
+ return {
408
+ all: n = n || /* @__PURE__ */ new Map(),
409
+ on: function(t, e) {
410
+ var i = n.get(t);
411
+ i ? i.push(e) : n.set(t, [e]);
412
+ },
413
+ off: function(t, e) {
414
+ var i = n.get(t);
415
+ i && (e ? i.splice(i.indexOf(e) >>> 0, 1) : n.set(t, []));
416
+ },
417
+ emit: function(t, e) {
418
+ var i = n.get(t);
419
+ i && i.slice().map(function(n$1) {
420
+ n$1(e);
421
+ }), (i = n.get("*")) && i.slice().map(function(n$1) {
422
+ n$1(t, e);
423
+ });
424
+ }
425
+ };
426
+ }
427
+
428
+ //#endregion
429
+ //#region src/events.js
430
+ const on = (target, name, handler) => {
431
+ target.addEventListener(name, handler);
432
+ return () => target.removeEventListener(name, handler);
433
+ };
434
+ const once = (target, name, handler) => {
435
+ const oneTime = (...args) => {
436
+ handler(...args);
437
+ target.removeEventListener(name, oneTime);
438
+ };
439
+ target.addEventListener(name, oneTime);
440
+ return () => target.removeEventListener(name, oneTime);
441
+ };
442
+
443
+ //#endregion
444
+ //#region src/playlog.js
445
+ const uuidv4 = () => {
446
+ if (typeof window === "undefined") return "";
447
+ const crypto = window.crypto || window.msCrypto;
448
+ return "10000000-1000-4000-8000-100000000000".replace(/[018]/g, (c) => (c ^ crypto?.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16));
449
+ };
450
+ const modes = {
451
+ videos: "video",
452
+ lives: "live"
453
+ };
454
+ const LIVES = "lives";
455
+ const logEventNames = {
456
+ playbackBegan: "video_playback_began",
457
+ playbackStarted: "video_playback_started",
458
+ playbackStopped: "video_playback_stopped",
459
+ playbackEnded: "video_playback_ended",
460
+ bufferingStarted: "video_buffering_started",
461
+ bufferingEnded: "video_buffering_ended",
462
+ playbackSpeedChange: "playback_speed_change",
463
+ seeked: "video_seeking_ended",
464
+ playbackError: "video_playback_error_occurred",
465
+ playing: "play",
466
+ paused: "pause",
467
+ rewind: "rewind",
468
+ forward: "forward",
469
+ speedSettingChange: "speed_setting_change",
470
+ previousEpisode: "previous_episode",
471
+ nextEpisode: "next_episode",
472
+ openSettings: "setting_page_entered",
473
+ closeSettings: "setting_page_exited",
474
+ adPlaybackStarted: "ad_playback_started",
475
+ adPlaybackStopped: "ad_playback_stopped",
476
+ skip: "op_skip"
477
+ };
478
+ const formatFloatToZero = (float) => {
479
+ if (float < 1 && float >= 0) return 0;
480
+ else return float;
481
+ };
482
+ const mapLogEvents = ({ video, session = video, version: version$1, playerName, getPlaybackStatus = () => video, playerToModuleErrorCodeMap = {} }) => {
483
+ const emitter = mitt_default();
484
+ const state = {
485
+ status: "init",
486
+ seeking: false,
487
+ playerStartTime: Date.now(),
488
+ moduleStartTime: Date.now(),
489
+ content: session.getContent?.() || {},
490
+ temporaryEvent: null,
491
+ hasFirstSeeked: false,
492
+ userHasClickedBackButton: false
493
+ };
494
+ const commonProperties = {
495
+ player_name: playerName,
496
+ playback_module_version: version$1,
497
+ playback_mode: modes[state.content.type],
498
+ playback_session_id: uuidv4(),
499
+ id: state.content.id,
500
+ name: state.content.title,
501
+ SSAI: state.ssaiProvider || "None",
502
+ current_position: 0,
503
+ ...state.content.type === "videos" && { video_total_duration: getPlaybackStatus().duration || 0 },
504
+ ...state.content.type === "lives" && {
505
+ live_offset: state.liveOffset || 0,
506
+ video_total_duration: getPlaybackStatus().duration || 0
507
+ }
508
+ };
509
+ const updateTimeInfo = () => {
510
+ if (!(getPlaybackStatus().currentTime > 0 && getPlaybackStatus().duration > 0)) return;
511
+ const sectionStart = state.content.section?.start || 0;
512
+ state.duration = (state.content.section?.end || getPlaybackStatus().duration) - sectionStart;
513
+ state.currentTime = sectionStart > 0 ? Date.now() / 1e3 - sectionStart : getPlaybackStatus().currentTime;
514
+ if (state.currentTime + .3 > state.duration) state.currentTime = state.duration;
515
+ commonProperties.video_total_duration = state.duration;
516
+ commonProperties.current_position = formatFloatToZero(state.currentTime);
517
+ };
518
+ const dispatchStart = () => {
519
+ if (state.status === "started") return;
520
+ updateTimeInfo();
521
+ state.temporaryEvent = state.isPlayingAd ? "adPlaybackStarted" : "playbackStarted";
522
+ };
523
+ const dispatchStop = () => {
524
+ if (state.status !== "started" || state.userHasClickedBackButton) return;
525
+ state.status = "stopped";
526
+ const currentTime = getPlaybackStatus().currentTime || state.currentTime;
527
+ const played = Math.max(0, currentTime - state.lastStartTime);
528
+ if (getPlaybackStatus().currentTime - state.lastStartTime < 0) console.warn("Playlog: negative played time", {
529
+ lastStartTime: state.lastStartTime,
530
+ currentTime: getPlaybackStatus().currentTime
531
+ });
532
+ if (state.isPlayingAd) state.adPlayedDuration += played;
533
+ else state.playedDuration += played;
534
+ const eventName = state.isPlayingAd ? "adPlaybackStopped" : "playbackStopped";
535
+ const durationPropertyName = state.isPlayingAd ? "ad_played_duration" : "video_played_duration";
536
+ updateTimeInfo();
537
+ emitter.emit(eventName, {
538
+ ...commonProperties,
539
+ [durationPropertyName]: played
540
+ });
541
+ };
542
+ const handleEnd = () => {
543
+ if (state.status === "started") dispatchStop();
544
+ if (state.status === "init" || state.userHasClickedBackButton) return;
545
+ state.status = "init";
546
+ emitter.emit("playbackEnded", {
547
+ video_playback_ended_at_percentage: (state.currentTime / state.duration).toFixed(2),
548
+ video_total_played_duration: state.playedDuration,
549
+ ...state.ssaiProvider && { ad_total_played_duration: state.adPlayedDuration },
550
+ ...commonProperties
551
+ });
552
+ };
553
+ const registered = [
554
+ on(video, "error", (event) => {
555
+ const originErrorCode = (/MediaFoundationRenderer/i.test(video.error?.message) ? 4012 : void 0) || event.error?.code || event.error?.data?.code;
556
+ if (state.lastErrorCode === originErrorCode) return;
557
+ state.lastErrorCode = originErrorCode;
558
+ emitter.emit("playbackError", {
559
+ module_error_code: playerToModuleErrorCodeMap[originErrorCode] ?? originErrorCode,
560
+ player_error_code: playerToModuleErrorCodeMap[originErrorCode] ?? originErrorCode,
561
+ ...commonProperties
562
+ });
563
+ }),
564
+ once(video, "playerStarted", () => {
565
+ state.playerStartTime = Date.now();
566
+ }),
567
+ on(video, "durationchange", () => {
568
+ if (!state.duration) {
569
+ state.duration = getPlaybackStatus().duration;
570
+ commonProperties.video_total_duration = state.duration;
571
+ }
572
+ }),
573
+ once(video, "loadeddata", () => {
574
+ state.status = "began";
575
+ state.playedDuration = 0;
576
+ updateTimeInfo();
577
+ if (state.content?.startTime > 0) {
578
+ state.currentTime = state.content.startTime;
579
+ commonProperties.current_position = formatFloatToZero(state.content.startTime);
580
+ }
581
+ emitter.emit("playbackBegan", {
582
+ player_startup_time: (state.playerStartTime - state.moduleStartTime) / 1e3,
583
+ video_startup_time: (Date.now() - state.moduleStartTime) / 1e3,
584
+ ...commonProperties
585
+ });
586
+ }),
587
+ on(video, "playing", dispatchStart),
588
+ on(video, "waiting", () => {
589
+ if (!state.bufferingStartTime) {
590
+ emitter.emit("bufferingStarted", commonProperties);
591
+ state.bufferingStartTime = Date.now();
592
+ }
593
+ }),
594
+ on(video, "timeupdate", () => {
595
+ const status = getPlaybackStatus();
596
+ updateTimeInfo();
597
+ if (state.content.type === "lives") state.liveOffset = status.liveOffset < 10 ? 0 : status.liveOffset;
598
+ if (state.bufferingStartTime) {
599
+ emitter.emit("bufferingEnded", {
600
+ buffering_second: (Date.now() - state.bufferingStartTime) / 1e3,
601
+ ...commonProperties
602
+ });
603
+ state.bufferingStartTime = void 0;
604
+ }
605
+ if (state.temporaryEvent && !state.seeking) {
606
+ state.status = "started";
607
+ state.lastStartTime = getPlaybackStatus().currentTime;
608
+ emitter.emit(state.temporaryEvent, commonProperties);
609
+ state.temporaryEvent = null;
610
+ }
611
+ }),
612
+ on(video, "pause", dispatchStop),
613
+ on(video, "seeking", () => {
614
+ state.seeking = true;
615
+ state.seekingFrom = state.currentTime;
616
+ }),
617
+ on(video, "seeked", () => {
618
+ state.seeking = false;
619
+ if (state.content.type !== "videos" || !state.hasFirstSeeked && (!/started|stopped/.test(state.status) || !state.playedDuration > .25) || Math.abs(state.seekingFrom - getPlaybackStatus().currentTime) < .01) {
620
+ if (state.hasFirstSeeked !== void 0) state.hasFirstSeeked = true;
621
+ return;
622
+ }
623
+ emitter.emit("seeked", {
624
+ seeking_from: state.seekingFrom,
625
+ seeking_to: formatFloatToZero(getPlaybackStatus().currentTime),
626
+ ...commonProperties
627
+ });
628
+ }),
629
+ on(video, "skip", (data) => {
630
+ emitter.emit("skip", {
631
+ skip_from: data.skipFrom,
632
+ skip_to: data.skipTo,
633
+ trigger_method: data.triggerMethod,
634
+ ...commonProperties
635
+ });
636
+ }),
637
+ on(video, "ratechange", () => {
638
+ if (video.playbackRate === 0) return;
639
+ emitter.emit("playbackSpeedChange", {
640
+ playbackSpeed: video.playbackRate,
641
+ ...commonProperties
642
+ });
643
+ }),
644
+ once(video, "ended", handleEnd),
645
+ once(video, "loadedAdMetadata", (event) => {
646
+ state.ssaiProvider = event.data.provider;
647
+ state.adPlayedDuration = 0;
648
+ }),
649
+ on(session, "adBreakStarted", () => {
650
+ dispatchStop();
651
+ state.isPlayingAd = true;
652
+ if (!state.seeking) dispatchStart();
653
+ }),
654
+ on(session, "adBreakEnded", () => {
655
+ dispatchStop();
656
+ state.isPlayingAd = false;
657
+ if (!state.seeking) dispatchStart();
658
+ })
659
+ ];
660
+ return {
661
+ addEventListener: (name, handler) => emitter.on(name, handler),
662
+ all: (handler) => emitter.on("*", handler),
663
+ emit: (name, { currentTime }, properties) => {
664
+ if (/seek/.test(name) && state.content.type !== "videos") return;
665
+ if (name in logEventNames) emitter.emit(name, {
666
+ ...properties,
667
+ ...commonProperties
668
+ });
669
+ },
670
+ setUserHasClickedBackButton: () => {
671
+ handleEnd();
672
+ dispatchStop();
673
+ state.userHasClickedBackButton = !state.userHasClickedBackButton;
674
+ },
675
+ updateContent: (content) => {
676
+ const sectionChanged = state.content.section && state.content.section.startTime !== content.section?.startTime;
677
+ if (sectionChanged) dispatchStop();
678
+ state.content = content;
679
+ updateTimeInfo();
680
+ if (state.content.type === LIVES) commonProperties.live_offset = state.liveOffset || 0;
681
+ if (sectionChanged) dispatchStart();
682
+ },
683
+ reset: () => {
684
+ handleEnd();
685
+ registered.forEach((off) => off());
686
+ }
687
+ };
688
+ };
689
+
690
+ //#endregion
691
+ //#region src/playbackSession/getCache.js
692
+ const getCache$1 = async (cache, key, { load, isValid }) => {
693
+ if (!cache) return load();
694
+ if (cache[key] && (!isValid || isValid(cache[key]))) return cache[key];
695
+ if (!cache[key]) cache[key] = {};
696
+ cache[key] = {
697
+ ...cache[key],
698
+ ...await load()
699
+ };
700
+ return cache[key];
701
+ };
702
+ var getCache_default = getCache$1;
703
+
704
+ //#endregion
705
+ //#region src/playbackSession/startSession.js
706
+ const deepEqual = (current, updated) => JSON.stringify(current) === JSON.stringify(updated);
707
+ const HEARTBEAT_INTERVAL_MS = 1e4;
708
+ const UPDATE_INTERVAL_MS = 1e4;
709
+ const isFreshCache = (content) => Date.now() <= content.end_time * 1e3;
710
+ let lastSession = Promise.resolve();
711
+ const programRemainTime = (content, { media = {} }) => {
712
+ const programCurrentTime = isLiveDuration(media.duration) ? Date.now() / 1e3 : content.start_time + media.currentTime;
713
+ return content.end_time - programCurrentTime;
714
+ };
715
+ const startPlaybackSession = async (playbackApi, options = {}) => {
716
+ await Promise.race([lastSession, new Promise((resolve) => {
717
+ setTimeout(resolve, UPDATE_INTERVAL_MS / 2);
718
+ })]);
719
+ let unlockSession;
720
+ lastSession = new Promise((resolve) => {
721
+ unlockSession = resolve;
722
+ });
723
+ const emitter = mitt_default();
724
+ const { type: type$1, id, getCurrentTime, cache } = options;
725
+ const cacheKey = options.key || `${type$1}/${id}`;
726
+ const { onChangeContent, onSessionStart, heartbeatTime = HEARTBEAT_INTERVAL_MS, updateTime = UPDATE_INTERVAL_MS } = options;
727
+ const handlers = { onReset: options.onReset };
728
+ const onReset = (params) => handlers.onReset?.(params);
729
+ const state = {
730
+ content: { end_time: Date.now() / 1e3 },
731
+ currentContent: { end_time: Date.now() / 1e3 }
732
+ };
733
+ const updateContent = async ({ useCache } = {}) => {
734
+ const content = await getCache_default(cache, cacheKey, {
735
+ load: () => playbackApi.getContent({
736
+ type: type$1,
737
+ id
738
+ }),
739
+ isValid: (data) => useCache && isFreshCache(data)
740
+ });
741
+ if (content.end) emitter.emit("liveEnd", content);
742
+ if (!state.content?.end_time && content?.end_time) return onReset({
743
+ reason: "program start",
744
+ sourceChange: true
745
+ });
746
+ const timeBeforeEnd = programRemainTime(state.currentContent, options) * 1e3;
747
+ if (timeBeforeEnd > 0 && timeBeforeEnd <= UPDATE_INTERVAL_MS) setTimeout(() => {
748
+ if (programRemainTime(state.currentContent, options) > .5) return;
749
+ if (isLiveDuration(options.media.duration)) updateContent({ useCache: true });
750
+ else onReset({
751
+ reason: "program end",
752
+ sourceChange: true
753
+ });
754
+ }, timeBeforeEnd);
755
+ if (!deepEqual(content, state.content)) {
756
+ state.content = content;
757
+ const skipUiUpdate = !useCache;
758
+ if (!skipUiUpdate) state.currentContent = content;
759
+ onChangeContent?.({
760
+ type: type$1,
761
+ ...content,
762
+ skipUiUpdate
763
+ });
764
+ }
765
+ };
766
+ const waitForContent = Promise.race([updateContent({ useCache: true }), new Promise((resolve) => {
767
+ setTimeout(resolve, UPDATE_INTERVAL_MS);
768
+ })]);
769
+ const sessionInfo = await playbackApi.startPlayback({
770
+ type: type$1,
771
+ id
772
+ }).catch((error) => {
773
+ unlockSession();
774
+ return Promise.reject(error);
775
+ });
776
+ onSessionStart?.(sessionInfo);
777
+ const requestParams = {
778
+ type: type$1,
779
+ id,
780
+ token: sessionInfo.token
781
+ };
782
+ state.token = sessionInfo.token;
783
+ state.sources = (await getCache_default(cache, cacheKey, {
784
+ load: () => playbackApi.getPlaybackInfo({
785
+ type: type$1,
786
+ id,
787
+ token: state.token
788
+ }),
789
+ isValid: (data) => data.sources && isFreshCache(data)
790
+ })).sources;
791
+ let updateIntervalId;
792
+ if (type$1 === "lives") updateIntervalId = setInterval(updateContent, updateTime);
793
+ let lastPlayedTime;
794
+ const updateLastPlayed = () => {
795
+ const currentTime = getCurrentTime?.();
796
+ if (!lastPlayedTime) {
797
+ lastPlayedTime = currentTime;
798
+ return;
799
+ }
800
+ if (currentTime >= 0 && lastPlayedTime !== currentTime) {
801
+ lastPlayedTime = currentTime;
802
+ playbackApi.updateLastPlayed({
803
+ ...requestParams,
804
+ time: currentTime
805
+ });
806
+ }
807
+ };
808
+ if (type$1 === "videos") updateIntervalId = setInterval(updateLastPlayed, updateTime);
809
+ const heartbeatIntervalId = setInterval(() => playbackApi.heartbeat(requestParams).catch((error) => {
810
+ if (/4\d\d/.test(error.response?.status)) {
811
+ clearInterval(heartbeatIntervalId);
812
+ onReset?.({
813
+ sourceChange: false,
814
+ reason: "Invalid token"
815
+ });
816
+ }
817
+ }), heartbeatTime);
818
+ const end = ({ preserveSource } = {}) => {
819
+ handlers.onReset = () => {};
820
+ if (!preserveSource && cache?.[cacheKey]) cache[cacheKey].sources = void 0;
821
+ if (getCurrentTime?.() > .5) updateLastPlayed();
822
+ clearInterval(updateIntervalId);
823
+ clearInterval(heartbeatIntervalId);
824
+ clearTimeout(state.endTimeoutId);
825
+ emitter.emit("playbackEnded");
826
+ return playbackApi.endPlayback(requestParams).finally(unlockSession);
827
+ };
828
+ emitter.on("liveEnd", end);
829
+ await waitForContent;
830
+ return {
831
+ ...state,
832
+ token: sessionInfo.token,
833
+ drmPortalUrl: DEBUG_OPTIONS.DRM_PROTAL_URL || sessionInfo.drm_portal_url,
834
+ updateLastPlayed,
835
+ end,
836
+ replaceApi: (replacement) => {
837
+ playbackApi = replacement;
838
+ }
839
+ };
840
+ };
841
+ var startSession_default = startPlaybackSession;
842
+
843
+ //#endregion
844
+ //#region src/browserCompatibility.js
845
+ const isWindowsEdge = () => typeof navigator !== "undefined" && /Windows/.test(navigator.userAgent) && /Edg/.test(navigator.userAgent);
846
+ const getPreferredKeySystems = () => isWindowsEdge() ? ["com.microsoft.playready"] : ["com.apple.fps.1_0", "com.widevine.alpha"];
847
+ const getDefaultDrmOptions = ({ manifestType, licenseUri, certificateUri = `${licenseUri}/fairplay_cert`, headers }) => {
848
+ const keySystemForDash = isWindowsEdge() ? "playready" : "widevine";
849
+ return /hls/i.test(manifestType) ? { fairplay: {
850
+ licenseUri,
851
+ certificateUri,
852
+ headers
853
+ } } : { [keySystemForDash]: {
854
+ licenseUri,
855
+ headers
856
+ } };
857
+ };
858
+
859
+ //#endregion
860
+ //#region src/playbackSession/api.js
861
+ const getStreamInfo = (sources = [], { type: type$1 = "", licenseUri, certificateUri = licenseUri && new URL(`fairplay_cert`, licenseUri).toString(), licenseHeaders: headers, thumbnailEnabled, getDrmOptions = getDefaultDrmOptions, getTextTrackInfo } = {}) => {
862
+ const activeSource = sources.find((source) => (source.subdub || source.type || "").toLowerCase() === type$1) || sources[0];
863
+ return (activeSource?.manifests || []).map((manifest) => ({
864
+ ...manifest,
865
+ type: manifest.protocol,
866
+ src: manifest.url,
867
+ drm: getDrmOptions({
868
+ manifestType: manifest.protocol,
869
+ licenseUri,
870
+ certificateUri,
871
+ headers
872
+ }),
873
+ qualityOptions: manifest.resolutions.map(({ height }) => ({
874
+ label: height,
875
+ value: height,
876
+ options: { maxHeight: height }
877
+ }))
878
+ })).concat(thumbnailEnabled && activeSource?.thumbnail_seeking_url && {
879
+ type: "thumbnail",
880
+ src: activeSource.thumbnail_seeking_url
881
+ }).concat(Object.entries(activeSource?.subtitle?.webvtt || {}).map(([language, url]) => ({
882
+ type: "text/vtt",
883
+ src: url,
884
+ language,
885
+ label: language,
886
+ ...getTextTrackInfo?.({
887
+ language,
888
+ url
889
+ }, activeSource)
890
+ }))).filter(Boolean);
891
+ };
892
+
893
+ //#endregion
894
+ //#region src/playbackSession/preload.js
895
+ const getCache = async (cache, key, { load, isValid }) => {
896
+ if (!cache) return load();
897
+ if (cache[key] && (!isValid || isValid(cache[key]))) return cache[key];
898
+ if (!cache[key]) cache[key] = {};
899
+ cache[key] = {
900
+ ...cache[key],
901
+ ...await load()
902
+ };
903
+ return cache[key];
904
+ };
905
+ const preload = (cache, playbackApi, preloadList) => preloadList.reduce(async (last, { contentType: type$1, contentId: id, contentKey: key = `${type$1}/${id}` }) => {
906
+ await last;
907
+ return getCache(cache, key, { load: () => playbackApi.getContent({
908
+ type: type$1,
909
+ id
910
+ }) });
911
+ }, Promise.resolve());
912
+ var preload_default = preload;
913
+
914
+ //#endregion
915
+ //#region package.json
916
+ var version = "0.5.0-beta.0";
917
+
918
+ //#endregion
919
+ //#region src/constants.js
920
+ const PLAYER_VERSION = version;
921
+
922
+ //#endregion
923
+ //#region src/PremiumPlusPlayer.jsx
924
+ const padTime = (value) => Math.floor(value).toString().padStart(2, "0");
925
+ const getChannelTime = (time) => {
926
+ const eventTime = /* @__PURE__ */ new Date(time * 1e3);
927
+ eventTime.setUTCHours(eventTime.getUTCHours() + 9);
928
+ const hourMinuteSecondArr = eventTime.toUTCString().split(" ")[4].split(":");
929
+ const hour = padTime(hourMinuteSecondArr[0]);
930
+ const minute = padTime(hourMinuteSecondArr[1]);
931
+ return hour + ":" + minute;
932
+ };
933
+ const CastState = {
934
+ NO_DEVICES_AVAILABLE: "NO_DEVICES_AVAILABLE",
935
+ CONNECTED: "CONNECTED",
936
+ CONNECTING: "CONNECTING",
937
+ NOT_CONNECTED: "NOT_CONNECTED"
938
+ };
939
+ const getEnterpriseDrmHeaders = ({ token, tokenType = "playback" }) => {
940
+ if (DEBUG_OPTIONS.DRM_PROTAL_URL) return void 0;
941
+ return { "X-Custom-Data": `token_type=${tokenType}&token_value=${token}&widevine_security_level=L3` };
942
+ };
943
+ const sessionCache = {};
944
+ const getCastState = () => window.cast?.framework?.CastContext.getInstance()?.getCastState() || CastState.NO_DEVICES_AVAILABLE;
945
+ const PremiumPlusPlayer = ({ controls, preload: preload$1 = "auto", preloadList = [], currentTime, quality, sourceType, host, accessToken, deviceId, headers, params, contentType, contentId, contentKey = `${contentType}/${contentId}`, autoplayNext, thumbnailSeeking, plugins = [], settings: appSettings = {}, coverImageUrl, coverImageDisplay = "auto", recommendation, uiElements: { castButton, ...uiElements } = {}, playerRef, children, onError, onApiError, onBack, onPlaybackStateChange, onPlayerLoaded, onChange, onPlaybackApiResponse, sendLog, playbackState: appPlaybackState, turnOnSkipOpening, shouldHideSkipButton = false, playerToModuleErrorCodeMap, drmTokenType, ...rest }) => {
946
+ const videoRef = useRef();
947
+ const corePlayerRef = useRef();
948
+ const lastSession$1 = useRef({});
949
+ const logTarget = useRef();
950
+ const preferAppTime = useRef(currentTime >= 0);
951
+ const [playbackState, setPlaybackState] = useState(() => getCastState() === CastState.CONNECTED ? "casting" : "initial");
952
+ const [playbackInfo, setPlaybackInfo] = useState({ sources: [] });
953
+ const [contentData, setContentData] = useState({});
954
+ const [targetPlaybackState, setTargetPlaybackState] = useState(appPlaybackState);
955
+ const [uiState, dispatch] = useReducer(reduceUi, getInitUiState({ recommendation: true }));
956
+ useEffect(() => {
957
+ const revokeLock = ensureTabLock();
958
+ if (!revokeLock) videoRef.current.dispatchEvent(Object.assign(new CustomEvent("error"), { error: {
959
+ name: "PlaycraftApiError",
960
+ code: 10021
961
+ } }));
962
+ return revokeLock;
963
+ }, []);
964
+ const api = useMemo(() => createApi({
965
+ host,
966
+ accessToken,
967
+ deviceId,
968
+ headers,
969
+ params
970
+ }, { onError: onApiError }), [
971
+ host,
972
+ accessToken,
973
+ deviceId,
974
+ headers,
975
+ params
976
+ ]);
977
+ useEffect(() => lastSession$1.current?.replaceApi?.(api), [api]);
978
+ useEffect(() => setupLicenseServerOverride(), []);
979
+ const endSession = ({ preserveSource, end } = {}) => {
980
+ preferAppTime.current = false;
981
+ if (end) end();
982
+ if (lastSession$1.current?.end) lastSession$1.current = {
983
+ request: lastSession$1.current.end().catch((error) => {
984
+ console.warn("Ignore end session error", error);
985
+ }),
986
+ ...preserveSource && { sources: lastSession$1.current.sources }
987
+ };
988
+ if (!preserveSource) {
989
+ setPlaybackInfo({ sources: [] });
990
+ setContentData({ chapters: [] });
991
+ }
992
+ };
993
+ const getPlaybackStatus = useCallback(() => ({
994
+ ...getMediaTime(videoRef.current, {
995
+ player: corePlayerRef.current,
996
+ plugins: allPlugins
997
+ }),
998
+ ...contentType?.startsWith("live") && { currentTime: Math.floor(Date.now() / 1e3) }
999
+ }), []);
1000
+ let handleReset;
1001
+ let allPlugins;
1002
+ const load = async () => {
1003
+ if (await lastSession$1.current.request === "cancel") return;
1004
+ const restPlayerName = ["shaka", "bitmovin"].find((name) => name in rest);
1005
+ if (logTarget.current?.reset) {
1006
+ const previousLogTarget = logTarget.current;
1007
+ setTimeout(() => previousLogTarget.reset(), 1);
1008
+ }
1009
+ const logInstance = mapLogEvents({
1010
+ playerName: restPlayerName || "shaka",
1011
+ version: PLAYER_VERSION,
1012
+ video: videoRef.current,
1013
+ contentData,
1014
+ getPlaybackStatus,
1015
+ playerToModuleErrorCodeMap
1016
+ });
1017
+ logTarget.current = logInstance;
1018
+ if (typeof sendLog === "function") logInstance.all((type$1, data) => sendLog(logEventNames[type$1], data));
1019
+ const request = startSession_default(api, {
1020
+ type: contentType,
1021
+ id: contentId,
1022
+ key: contentKey,
1023
+ media: videoRef.current,
1024
+ getCurrentTime: () => getMediaTime(videoRef.current, {
1025
+ player: corePlayerRef.current,
1026
+ plugins
1027
+ }).currentTime,
1028
+ onChangeContent: (data) => {
1029
+ onPlaybackApiResponse?.("content", data);
1030
+ const currentContent = getContentInfo(data);
1031
+ if (currentContent.end || !currentContent.skipUiUpdate) setContentData((prev) => prev.chapters?.length > 0 ? {
1032
+ ...currentContent,
1033
+ chapters: prev.chapters
1034
+ } : currentContent);
1035
+ logInstance.updateContent({
1036
+ ...currentContent,
1037
+ type: contentType,
1038
+ id: contentId
1039
+ });
1040
+ },
1041
+ onReset: handleReset,
1042
+ onSessionStart: (resData) => {
1043
+ onPlaybackApiResponse?.("start", resData);
1044
+ },
1045
+ cache: sessionCache
1046
+ }).then((currentSession) => {
1047
+ lastSession$1.current = currentSession;
1048
+ if (!currentSession.content?.end) {
1049
+ onPlaybackApiResponse?.("info", currentSession);
1050
+ setPlaybackInfo({
1051
+ sources: currentSession.sources,
1052
+ token: currentSession.token,
1053
+ drmPortalUrl: currentSession.drmPortalUrl
1054
+ });
1055
+ }
1056
+ preload_default(sessionCache, api, preloadList);
1057
+ return currentSession;
1058
+ }).catch((result) => {
1059
+ const errorData = (result.data || result.response?.data)?.error;
1060
+ const error = errorData ? {
1061
+ name: "PlaycraftApiError",
1062
+ ...errorData
1063
+ } : result;
1064
+ console.warn(error);
1065
+ videoRef.current.dispatchEvent(Object.assign(new CustomEvent("error"), { error }));
1066
+ });
1067
+ return () => {
1068
+ setTimeout(() => logInstance.reset(), 1);
1069
+ return request.then((session) => session?.end?.());
1070
+ };
1071
+ };
1072
+ handleReset = ({ reason = "", sourceChange } = {}) => {
1073
+ console.log("session reset:", reason);
1074
+ endSession({ preserveSource: !sourceChange });
1075
+ load();
1076
+ };
1077
+ const activeDevice = !/casting|error/.test(playbackState);
1078
+ useEffect(() => {
1079
+ if (appPlaybackState) setTargetPlaybackState(appPlaybackState);
1080
+ }, [appPlaybackState]);
1081
+ useEffect(() => {
1082
+ setTargetPlaybackState(void 0);
1083
+ }, [playbackState]);
1084
+ useEffect(() => {
1085
+ if (preload$1 !== "auto" || !activeDevice || !contentType || !contentId) return;
1086
+ const request = load();
1087
+ dispatch({ type: "content-change" });
1088
+ return () => request.then((end) => endSession({ end }));
1089
+ }, [activeDevice, contentType && contentId && contentKey]);
1090
+ useImperativeHandle(playerRef, () => ({
1091
+ load,
1092
+ getVideo: () => videoRef.current
1093
+ }));
1094
+ useEffect(() => linkAdState({
1095
+ contentType,
1096
+ plugins,
1097
+ dispatch,
1098
+ onAdSkip: () => setTargetPlaybackState("playing")
1099
+ }), [contentType]);
1100
+ const source = useMemo(() => !contentData.end && getStreamInfo(playbackInfo.sources, {
1101
+ type: sourceType,
1102
+ getTextTrackInfo: appSettings.getTextTrackInfo,
1103
+ licenseUri: playbackInfo.drmPortalUrl,
1104
+ licenseHeaders: getEnterpriseDrmHeaders({
1105
+ token: playbackInfo.token,
1106
+ tokenType: drmTokenType
1107
+ }),
1108
+ thumbnailEnabled: thumbnailSeeking
1109
+ }), [
1110
+ playbackInfo,
1111
+ contentData.end,
1112
+ sourceType,
1113
+ thumbnailSeeking
1114
+ ]);
1115
+ const handleCastStateChange = (next) => {
1116
+ if (next === CastState.CONNECTED) setPlaybackState("casting");
1117
+ if (next === CastState.NO_DEVICES_AVAILABLE || next === CastState.NOT_CONNECTED) setPlaybackState("loading");
1118
+ };
1119
+ useEffect(() => subscribeCastState$1(handleCastStateChange), []);
1120
+ const settings = useMemo(() => ({
1121
+ ...contentType === "lives" && { speedItems: [] },
1122
+ ...appSettings
1123
+ }), [contentType, appSettings]);
1124
+ useEffect(() => {
1125
+ if (contentData.chapters?.length > 0) return dispatchChapterEvents({
1126
+ media: videoRef.current,
1127
+ chapters: contentData.chapters,
1128
+ getTime: () => videoRef.current?.currentTime
1129
+ });
1130
+ }, [contentData.chapters]);
1131
+ useEffect(() => {
1132
+ videoRef.current?.addEventListener("timeupdate", () => {
1133
+ if (videoRef.current.currentTime < 3) dispatch({ type: "close-panels" });
1134
+ });
1135
+ }, []);
1136
+ return /* @__PURE__ */ jsxs(PremiumPlayer, {
1137
+ shaka: { drm: { preferredKeySystems: getPreferredKeySystems() } },
1138
+ source: playbackState !== "error" && source,
1139
+ currentTime: preferAppTime.current ? currentTime : contentData.startTime + 1 / 30,
1140
+ controls: uiState.activePanel === "autoplay-next" || uiState.activePanel === "recommendation" && recommendation ? "title-only" : controls,
1141
+ title: contentData.title,
1142
+ channelTitle: /* @__PURE__ */ jsxs(Fragment, { children: [contentData.section?.start && /* @__PURE__ */ jsxs("span", { children: [
1143
+ getChannelTime(contentData.section.start),
1144
+ " -",
1145
+ " ",
1146
+ getChannelTime(contentData.section.end)
1147
+ ] }), contentData.channelTitle] }),
1148
+ quality: {
1149
+ ...quality,
1150
+ rewriteManifest: selectHlsQualities$1
1151
+ },
1152
+ settings,
1153
+ plugins,
1154
+ videoRef,
1155
+ marks: uiState.streamEvents?.map((event) => event.start),
1156
+ onError,
1157
+ sendLog: (name, data) => logTarget.current?.emit(name, data),
1158
+ onBack: onBack && (() => {
1159
+ logTarget.current?.setUserHasClickedBackButton();
1160
+ return onBack();
1161
+ }),
1162
+ onPlayerLoaded: (player) => {
1163
+ onPlayerLoaded?.(player);
1164
+ corePlayerRef.current = player;
1165
+ const handledErrors = {};
1166
+ player.addEventListener("error", (event) => {
1167
+ const errorMessage = [videoRef.current.error?.message].concat(event?.detail?.data).join(" ");
1168
+ if (!handledErrors[4012] && /MediaFoundationRenderer/i.test(errorMessage)) {
1169
+ handledErrors[4012] = true;
1170
+ videoRef.current.dispatchEvent(Object.assign(new CustomEvent("error"), { error: {
1171
+ code: 4012,
1172
+ name: "HDCP, Windows Edge, Analog"
1173
+ } }));
1174
+ }
1175
+ });
1176
+ },
1177
+ onPlaybackStateChange: (event, state) => {
1178
+ onPlaybackStateChange?.(event, state);
1179
+ setPlaybackState((current) => current !== "casting" ? state : current);
1180
+ if (state === "error") {
1181
+ lastSession$1.current.end?.();
1182
+ lastSession$1.current = {};
1183
+ }
1184
+ if (state === "paused") setTimeout(() => dispatch({ type: "close-panels" }), 66);
1185
+ if (videoRef.current.currentTime > .001 && (state === "paused" && playbackState !== "loading" || /seeking|waiting/.test(event.type))) lastSession$1.current.updateLastPlayed?.();
1186
+ if (state === "ended") dispatch(uiActions.playbackEnd({ hasRecommendation: Boolean(recommendation) }));
1187
+ },
1188
+ onChangeNext: contentData.next && (() => onChange?.(contentData.next)),
1189
+ onChangePrevious: contentData.previous && (() => onChange?.(contentData.previous)),
1190
+ onCast: async (request) => Object.assign(request.media, {
1191
+ contentId,
1192
+ contentID: contentId,
1193
+ customData: {
1194
+ itemType: contentType,
1195
+ ...api.config,
1196
+ customHeaders: api.config?.headers,
1197
+ customQuery: api.config?.params,
1198
+ mediaSource: sourceType
1199
+ }
1200
+ }),
1201
+ uiElements: {
1202
+ ...uiElements,
1203
+ ...uiState.ad.total > 0 && getAdUi(uiState.ad, plugins, videoRef.current)
1204
+ },
1205
+ playbackState: targetPlaybackState,
1206
+ ...rest,
1207
+ style: {
1208
+ "--seekbar-flex-basis": "calc(100% - 6em)",
1209
+ ...recommendation && { "--bottom-spacing": "var(--bottom-line-height, 5rem)" }
1210
+ },
1211
+ children: [
1212
+ children,
1213
+ contentData && videoRef.current && /* @__PURE__ */ jsx(AutoplayPrompt, {
1214
+ next: contentData.next,
1215
+ chapters: contentData.chapters,
1216
+ videoRef,
1217
+ playbackState,
1218
+ autoplayNext: !videoRef.current?.loop && autoplayNext,
1219
+ turnOnSkipOpening,
1220
+ uiType: rest.uiType,
1221
+ hasRecommendation: !!recommendation,
1222
+ shouldHideSkipButton: shouldHideSkipButton || uiState.activePanel === "recommendation",
1223
+ getMedia: () => getMediaTime(videoRef.current, { plugins }),
1224
+ onChangeNext: () => onChange?.(contentData.next),
1225
+ onOpen: (state) => dispatch(uiActions.offerAutoplay(state)),
1226
+ onClose: () => {
1227
+ setTimeout(() => dispatch({
1228
+ type: "close-panels",
1229
+ name: "autoplay-next"
1230
+ }), 66);
1231
+ },
1232
+ onDismiss: (openOther) => dispatch(uiActions.dismissAutoplay({
1233
+ openOther,
1234
+ hasRecommendation: Boolean(recommendation)
1235
+ }))
1236
+ }),
1237
+ recommendation && uiState.activePanel !== "autoplay-next" && /* @__PURE__ */ jsx(RecommendationPanel_default, {
1238
+ title: recommendation.title || "",
1239
+ open: uiState.activePanel === "recommendation",
1240
+ onToggle: () => dispatch(uiActions.toggleRecommendationPanel()),
1241
+ children: recommendation.content || null
1242
+ }),
1243
+ contentData.end && /* @__PURE__ */ jsx("div", {
1244
+ className: "pinned",
1245
+ children: /* @__PURE__ */ jsx(LiveEnd, {
1246
+ onBack,
1247
+ onRetry: () => {
1248
+ handleReset({
1249
+ reason: "retry",
1250
+ sourceChange: true
1251
+ });
1252
+ }
1253
+ })
1254
+ }),
1255
+ (coverImageDisplay === "always" || preload$1 === "none" && coverImageUrl && source.length <= 0 && playbackState !== "error") && /* @__PURE__ */ jsx(CoverImage, { src: coverImageUrl })
1256
+ ]
1257
+ });
1258
+ };
1259
+ var PremiumPlusPlayer_default = PremiumPlusPlayer;
1260
+
1261
+ //#endregion
1262
+ //#region src/playerUtils.js
1263
+ const validateBrowser = (browserWhiteList) => {
1264
+ const envError = validateEnvironment(browserWhiteList);
1265
+ if (envError) {
1266
+ if (typeof localStorage !== "undefined" && localStorage?.ENV_CHECK === "none") {
1267
+ console.warn("Skip validateBrowser(localStorage?.ENV_CHECK is none)", envError);
1268
+ return;
1269
+ }
1270
+ return {
1271
+ name: envError.name,
1272
+ data: envError
1273
+ };
1274
+ }
1275
+ };
1276
+ const dispatchPlaybackError = (error) => {
1277
+ document.getElementsByTagName("video")[0]?.dispatchEvent(Object.assign(new CustomEvent("error"), { error }));
1278
+ };
1279
+
1280
+ //#endregion
1281
+ //#region src/logger/useAmplitudeLogger.js
1282
+ const useAmplitudeLogger = ({ logger: setPlaybackRelatedEvt, remoteInfo: { endpoint, headers }, whiteList: { allowedPropertyList = [], allowedEventList = [] } = {} }) => {
1283
+ const amplitudeInfo = useRef(null);
1284
+ let playbackEventQueue = [];
1285
+ const propertyWhtieListSet = new Set(allowedPropertyList);
1286
+ const eventNamesWhiteListSet = new Set(allowedEventList);
1287
+ const fetchAmplitudeInfo = (playbackToken) => {
1288
+ if (playbackToken) axios.get(`${endpoint}?playback_token=${playbackToken}`, { headers: {
1289
+ "Content-Type": "application/json",
1290
+ ...headers
1291
+ } }).then(({ data }) => {
1292
+ amplitudeInfo.current = data;
1293
+ });
1294
+ };
1295
+ const handleSendLog = (eventName, eventProps) => {
1296
+ if (eventNamesWhiteListSet.size > 0 && !eventNamesWhiteListSet.has(eventName)) return;
1297
+ if (propertyWhtieListSet.size > 0) {
1298
+ for (const eventProp of Object.keys(eventProps)) if (!propertyWhtieListSet.has(eventProp)) eventProps[eventProp] = null;
1299
+ }
1300
+ if (eventName === "ad_playback_started") eventProps.ad_type = "per-roll";
1301
+ if (eventName === "speed_setting_change") {
1302
+ eventProps.to_speed = eventProps.playback_speed;
1303
+ delete eventProps.playback_speed;
1304
+ }
1305
+ playbackEventQueue.push(eventProps);
1306
+ if (amplitudeInfo.current && playbackEventQueue.length > 0) {
1307
+ for (const playbackEventProps of playbackEventQueue) setPlaybackRelatedEvt({
1308
+ eventName,
1309
+ amplitudeInfo: amplitudeInfo.current,
1310
+ playbackEventProps
1311
+ });
1312
+ playbackEventQueue = [];
1313
+ }
1314
+ if (!amplitudeInfo.current) playbackEventQueue = [];
1315
+ };
1316
+ return {
1317
+ fetchAmplitudeInfo,
1318
+ handleSendLog
1319
+ };
1320
+ };
1321
+ var useAmplitudeLogger_default = useAmplitudeLogger;
1322
+
1323
+ //#endregion
1324
+ export { Button, CastSender, ClassicSettingsContainer, ImaDaiPlugin, InfoBarExtension, MenuItem, PremiumPlusPlayer_default as Player, castMedia, dispatchPlaybackError, handleIOSHeadphonesDisconnection, initSender, linkCast, selectHlsQualities, stopCast, subscribeCastState, useAmplitudeLogger_default as useAmplitudeLogger, validateBrowser };