diff --git a/.gitignore b/.gitignore
index c6bba59..3eba158 100644
--- a/.gitignore
+++ b/.gitignore
@@ -128,3 +128,4 @@ dist
.yarn/build-state.yml
.yarn/install-state.gz
.pnp.*
+/dashboard/apps/drplayer/
diff --git a/dashboard/.env.production b/dashboard/.env.production
new file mode 100644
index 0000000..5d31245
--- /dev/null
+++ b/dashboard/.env.production
@@ -0,0 +1,7 @@
+# .env.production
+# 生产环境配置
+# 子目录部署配置 - 例如部署到 /apps/ 目录
+# VITE_BASE_PATH=/apps/drplayer/
+
+# 如果部署到根目录,使用以下配置:
+VITE_BASE_PATH=./
\ No newline at end of file
diff --git a/dashboard/.env.production.apps b/dashboard/.env.production.apps
new file mode 100644
index 0000000..b251bf3
--- /dev/null
+++ b/dashboard/.env.production.apps
@@ -0,0 +1,3 @@
+# .env.production.apps
+# 子目录部署配置 - 部署到 /apps/drplayer/ 目录
+VITE_BASE_PATH=/apps/drplayer/
\ No newline at end of file
diff --git a/dashboard/.env.production.root b/dashboard/.env.production.root
new file mode 100644
index 0000000..c54e8d9
--- /dev/null
+++ b/dashboard/.env.production.root
@@ -0,0 +1,3 @@
+# .env.production.root
+# 根目录部署配置
+VITE_BASE_PATH=./
\ No newline at end of file
diff --git a/dashboard/.gitignore b/dashboard/.gitignore
index a547bf3..16de27c 100644
--- a/dashboard/.gitignore
+++ b/dashboard/.gitignore
@@ -22,3 +22,4 @@ dist-ssr
*.njsproj
*.sln
*.sw?
+/dist-binary/
diff --git a/dashboard/.nvmrc b/dashboard/.nvmrc
new file mode 100644
index 0000000..8fdd954
--- /dev/null
+++ b/dashboard/.nvmrc
@@ -0,0 +1 @@
+22
\ No newline at end of file
diff --git a/dashboard/build-binary-optimized.js b/dashboard/build-binary-optimized.js
new file mode 100644
index 0000000..641e296
--- /dev/null
+++ b/dashboard/build-binary-optimized.js
@@ -0,0 +1,314 @@
+#!/usr/bin/env node
+
+import { execSync } from 'child_process';
+import { existsSync, rmSync, cpSync, mkdirSync, readdirSync, statSync } from 'fs';
+import { join, dirname } from 'path';
+import { fileURLToPath } from 'url';
+
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = dirname(__filename);
+
+// 定义路径
+const rootDir = __dirname;
+const tempServerDir = join(rootDir, 'temp-server');
+const distBinaryDir = join(rootDir, 'dist-binary');
+const distDir = join(rootDir, 'dist');
+
+// 配置选项
+const config = {
+ // pkg优化选项
+ pkg: {
+ compress: 'Brotli', // 使用Brotli压缩 (GZip也可选)
+ publicPackages: '*', // 将所有包标记为public以减少体积
+ noBytecode: false, // 保持字节码生成以避免兼容性问题
+ public: true, // 使用public选项加速打包
+ options: 'max-old-space-size=512' // 限制内存使用
+ },
+ // UPX压缩选项
+ upx: {
+ enabled: true, // 是否启用UPX压缩
+ level: 6, // 压缩级别 (1-9, 降低到6以提高兼容性)
+ keepBackup: true, // 保留备份文件以便回滚
+ ultraBrute: false, // 是否使用ultra-brute模式
+ testAfterCompress: true, // 压缩后测试二进制文件
+ fallbackOnError: true // 如果压缩后无法运行,则回滚到原文件
+ }
+};
+
+console.log('🚀 开始优化打包流程...\n');
+
+// 检查UPX是否可用
+function checkUpxAvailable() {
+ try {
+ execSync('upx --version', { stdio: 'pipe' });
+ return true;
+ } catch (error) {
+ console.log('⚠️ UPX未安装或不可用,将跳过UPX压缩步骤');
+ console.log(' 可以从 https://upx.github.io/ 下载UPX');
+ return false;
+ }
+}
+
+// 格式化文件大小
+function formatFileSize(bytes) {
+ return (bytes / 1024 / 1024).toFixed(2) + ' MB';
+}
+
+// 获取文件大小
+function getFileSize(filePath) {
+ if (!existsSync(filePath)) return 0;
+ return statSync(filePath).size;
+}
+
+try {
+ // 步骤 1: 前端构建
+ console.log('📦 步骤 1: 构建前端项目...');
+ execSync('pnpm build:apps', {
+ stdio: 'inherit',
+ cwd: rootDir
+ });
+ console.log('✅ 前端构建完成\n');
+
+ // 步骤 2: 清理 temp-server 中的旧文件
+ console.log('🧹 步骤 2: 清理 temp-server 中的旧文件...');
+
+ const tempServerAppsDir = join(tempServerDir, 'apps');
+ if (existsSync(tempServerAppsDir)) {
+ rmSync(tempServerAppsDir, { recursive: true, force: true });
+ console.log('✅ 已删除旧的 apps 目录');
+ }
+ console.log('');
+
+ // 步骤 3: 复制构建文件到 temp-server/apps/drplayer
+ console.log('📁 步骤 3: 复制构建文件到 temp-server...');
+ if (!existsSync(distDir)) {
+ throw new Error('dist 目录不存在,请确保前端构建成功');
+ }
+
+ if (!existsSync(tempServerDir)) {
+ mkdirSync(tempServerDir, { recursive: true });
+ }
+
+ const tempServerDrplayerDir = join(tempServerAppsDir, 'drplayer');
+ if (!existsSync(tempServerAppsDir)) {
+ mkdirSync(tempServerAppsDir, { recursive: true });
+ }
+
+ cpSync(distDir, tempServerDrplayerDir, { recursive: true });
+ console.log('✅ 已将 dist 内容复制到 apps/drplayer');
+ console.log('');
+
+ // 步骤 4: 在 temp-server 目录中打包二进制文件(使用优化选项)
+ console.log('⚙️ 步骤 4: 使用优化选项打包二进制文件...');
+
+ const tempServerNodeModules = join(tempServerDir, 'node_modules');
+ if (!existsSync(tempServerNodeModules)) {
+ console.log('📦 安装 temp-server 依赖...');
+ execSync('pnpm install', {
+ stdio: 'inherit',
+ cwd: tempServerDir
+ });
+ }
+
+ // 构建优化的pkg命令
+ let pkgCommand = 'pkg . --target node18-win-x64 --output dist-binary/drplayer-server-win.exe';
+
+ // 添加压缩选项
+ if (config.pkg.compress) {
+ pkgCommand += ` --compress ${config.pkg.compress}`;
+ }
+
+ // 添加public packages选项
+ if (config.pkg.publicPackages) {
+ pkgCommand += ` --public-packages "${config.pkg.publicPackages}"`;
+ }
+
+ // 添加public选项
+ if (config.pkg.public) {
+ pkgCommand += ' --public';
+ }
+
+ // 添加no-bytecode选项(仅在明确启用时)
+ if (config.pkg.noBytecode) {
+ pkgCommand += ' --no-bytecode';
+ }
+
+ // 添加Node.js选项
+ if (config.pkg.options) {
+ pkgCommand += ` --options "${config.pkg.options}"`;
+ }
+
+ console.log(`🔧 执行命令: ${pkgCommand}`);
+ execSync(pkgCommand, {
+ stdio: 'inherit',
+ cwd: tempServerDir
+ });
+ console.log('✅ 优化二进制文件打包完成\n');
+
+ // 步骤 5: 移动二进制文件到 dist-binary 目录
+ console.log('📦 步骤 5: 移动二进制文件到 dist-binary...');
+
+ if (!existsSync(distBinaryDir)) {
+ mkdirSync(distBinaryDir, { recursive: true });
+ }
+
+ const tempDistBinaryDir = join(tempServerDir, 'dist-binary');
+ if (existsSync(tempDistBinaryDir)) {
+ const files = readdirSync(tempDistBinaryDir);
+ for (const file of files) {
+ const srcPath = join(tempDistBinaryDir, file);
+ const destPath = join(distBinaryDir, file);
+
+ if (existsSync(destPath)) {
+ rmSync(destPath, { force: true });
+ }
+
+ cpSync(srcPath, destPath, { recursive: true });
+ console.log(`✅ 已移动: ${file}`);
+ }
+
+ try {
+ rmSync(tempDistBinaryDir, { recursive: true, force: true });
+ } catch (error) {
+ console.log(`⚠️ 无法删除临时目录: ${error.message}`);
+ }
+ }
+
+ // 步骤 6: UPX压缩(如果启用且可用)
+ if (config.upx.enabled && checkUpxAvailable()) {
+ console.log('\n🗜️ 步骤 6: 使用UPX进行额外压缩...');
+
+ const files = readdirSync(distBinaryDir).filter(file => file.endsWith('.exe'));
+
+ for (const file of files) {
+ const filePath = join(distBinaryDir, file);
+ const originalSize = getFileSize(filePath);
+
+ // 创建备份(如果启用)
+ if (config.upx.keepBackup) {
+ const backupPath = join(distBinaryDir, file + '.backup');
+ cpSync(filePath, backupPath);
+ console.log(`📋 已创建备份: ${file}.backup`);
+ }
+
+ try {
+ let upxCommand = `upx -${config.upx.level}`;
+
+ // 添加额外的UPX选项以获得更好的压缩率
+ if (config.upx.ultraBrute) {
+ upxCommand += ' --ultra-brute'; // 尝试所有压缩方法(很慢但压缩率最高)
+ }
+
+ // 添加兼容性选项
+ upxCommand += ' --force'; // 强制压缩
+ upxCommand += ` "${filePath}"`;
+
+ console.log(`🔧 压缩 ${file}...`);
+ execSync(upxCommand, { stdio: 'pipe' });
+
+ const compressedSize = getFileSize(filePath);
+ const compressionRatio = ((originalSize - compressedSize) / originalSize * 100).toFixed(1);
+
+ console.log(`✅ ${file} 压缩完成:`);
+ console.log(` 原始大小: ${formatFileSize(originalSize)}`);
+ console.log(` 压缩后: ${formatFileSize(compressedSize)}`);
+ console.log(` 压缩率: ${compressionRatio}%`);
+
+ // 测试压缩后的二进制文件
+ if (config.upx.testAfterCompress) {
+ console.log(`🧪 测试压缩后的二进制文件...`);
+ try {
+ // 简单的启动测试 - 运行 --help 命令
+ execSync(`"${filePath}" --help`, { timeout: 10000, stdio: 'pipe' });
+ console.log(`✅ 压缩后的二进制文件测试通过`);
+ } catch (testError) {
+ console.log(`⚠️ 压缩后的二进制文件测试失败: ${testError.message}`);
+
+ if (config.upx.fallbackOnError) {
+ console.log(`🔄 回滚到原始文件...`);
+ const backupPath = join(distBinaryDir, file + '.backup');
+ if (existsSync(backupPath)) {
+ cpSync(backupPath, filePath);
+ console.log(`✅ 已回滚到原始未压缩文件`);
+ console.log(`📝 建议: pkg生成的二进制文件可能与UPX不兼容,使用原始文件`);
+ }
+ } else {
+ throw testError;
+ }
+ }
+ }
+
+ } catch (error) {
+ console.log(`❌ UPX压缩 ${file} 失败: ${error.message}`);
+
+ // 如果压缩失败且有备份,恢复原文件
+ if (config.upx.keepBackup) {
+ const backupPath = join(distBinaryDir, file + '.backup');
+ if (existsSync(backupPath)) {
+ cpSync(backupPath, filePath);
+ console.log(`🔄 已从备份恢复 ${file}`);
+ }
+ }
+ }
+ }
+ } else if (config.upx.enabled) {
+ console.log('\n⚠️ 跳过UPX压缩步骤(UPX不可用)');
+ }
+
+ // 步骤 7: 清理临时文件
+ console.log('\n🧹 步骤 7: 清理临时文件...');
+
+ const dirsToClean = [
+ join(tempServerDir, 'apps'),
+ join(tempServerDir, 'dist-binary')
+ ];
+
+ for (const dirPath of dirsToClean) {
+ if (existsSync(dirPath)) {
+ try {
+ rmSync(dirPath, { recursive: true, force: true });
+ console.log(`✅ 已清理: ${dirPath.replace(tempServerDir, 'temp-server')}`);
+ } catch (error) {
+ console.log(`⚠️ 无法清理目录: ${error.message}`);
+ }
+ }
+ }
+
+ // 清理UPX备份文件(可选)
+ if (!config.upx.keepBackup) {
+ const backupFiles = readdirSync(distBinaryDir).filter(file => file.endsWith('.backup'));
+ if (backupFiles.length > 0) {
+ console.log('\n🗑️ 清理备份文件...');
+ for (const backupFile of backupFiles) {
+ const backupPath = join(distBinaryDir, backupFile);
+ rmSync(backupPath, { force: true });
+ console.log(`✅ 已删除备份: ${backupFile}`);
+ }
+ }
+ }
+
+ console.log('\n🎉 优化打包流程完成!');
+ console.log(`📁 二进制文件位置: ${distBinaryDir}`);
+
+ // 显示最终结果
+ if (existsSync(distBinaryDir)) {
+ const files = readdirSync(distBinaryDir);
+ if (files.length > 0) {
+ console.log('\n📋 最终生成的文件:');
+ let totalSize = 0;
+ files.forEach(file => {
+ const filePath = join(distBinaryDir, file);
+ const stats = statSync(filePath);
+ const size = stats.size;
+ totalSize += size;
+ console.log(` - ${file} (${formatFileSize(size)})`);
+ });
+ console.log(`\n📊 总大小: ${formatFileSize(totalSize)}`);
+ }
+ }
+
+} catch (error) {
+ console.error('\n❌ 优化打包过程中出现错误:');
+ console.error(error.message);
+ process.exit(1);
+}
\ No newline at end of file
diff --git a/dashboard/build-binary.js b/dashboard/build-binary.js
new file mode 100644
index 0000000..c815858
--- /dev/null
+++ b/dashboard/build-binary.js
@@ -0,0 +1,157 @@
+#!/usr/bin/env node
+
+import { execSync } from 'child_process';
+import { existsSync, rmSync, cpSync, mkdirSync, readdirSync, statSync } from 'fs';
+import { join, dirname } from 'path';
+import { fileURLToPath } from 'url';
+
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = dirname(__filename);
+
+// 定义路径
+const rootDir = __dirname;
+const tempServerDir = join(rootDir, 'temp-server');
+const distBinaryDir = join(rootDir, 'dist-binary');
+const distDir = join(rootDir, 'dist');
+const tempServerDistDir = join(tempServerDir, 'dist');
+
+console.log('🚀 开始自动化打包流程...\n');
+
+try {
+ // 步骤 1: 前端构建
+ console.log('📦 步骤 1: 构建前端项目...');
+ execSync('pnpm build:apps', {
+ stdio: 'inherit',
+ cwd: rootDir
+ });
+ console.log('✅ 前端构建完成\n');
+
+ // 步骤 2: 清理 temp-server 中的旧文件
+ console.log('🧹 步骤 2: 清理 temp-server 中的旧文件...');
+
+ // 清理 temp-server 中的旧 apps 目录
+ const tempServerAppsDir = join(tempServerDir, 'apps');
+ if (existsSync(tempServerAppsDir)) {
+ rmSync(tempServerAppsDir, { recursive: true, force: true });
+ console.log('✅ 已删除旧的 apps 目录');
+ }
+ console.log('');
+
+ // 步骤 3: 复制构建文件到 temp-server/apps/drplayer
+ console.log('📁 步骤 3: 复制构建文件到 temp-server...');
+ if (!existsSync(distDir)) {
+ throw new Error('dist 目录不存在,请确保前端构建成功');
+ }
+
+ // 确保 temp-server 目录存在
+ if (!existsSync(tempServerDir)) {
+ mkdirSync(tempServerDir, { recursive: true });
+ }
+
+ // 创建 apps/drplayer 目录并复制 dist 内容
+ const tempServerDrplayerDir = join(tempServerAppsDir, 'drplayer');
+ if (!existsSync(tempServerAppsDir)) {
+ mkdirSync(tempServerAppsDir, { recursive: true });
+ }
+
+ // 将 dist 目录的内容复制到 apps/drplayer
+ cpSync(distDir, tempServerDrplayerDir, { recursive: true });
+ console.log('✅ 已将 dist 内容复制到 apps/drplayer');
+ console.log('');
+
+ // 步骤 4: 在 temp-server 目录中打包二进制文件
+ console.log('⚙️ 步骤 4: 打包二进制文件...');
+
+ // 确保 temp-server 有 node_modules
+ const tempServerNodeModules = join(tempServerDir, 'node_modules');
+ if (!existsSync(tempServerNodeModules)) {
+ console.log('📦 安装 temp-server 依赖...');
+ execSync('pnpm install', {
+ stdio: 'inherit',
+ cwd: tempServerDir
+ });
+ }
+
+ // 执行 pkg 打包
+ execSync('pnpm pkg:win', {
+ stdio: 'inherit',
+ cwd: tempServerDir
+ });
+ console.log('✅ 二进制文件打包完成\n');
+
+ // 步骤 5: 移动二进制文件到 dist-binary 目录
+ console.log('📦 步骤 5: 移动二进制文件到 dist-binary...');
+
+ // 确保 dist-binary 目录存在
+ if (!existsSync(distBinaryDir)) {
+ mkdirSync(distBinaryDir, { recursive: true });
+ }
+
+ // 查找并移动二进制文件
+ const tempDistBinaryDir = join(tempServerDir, 'dist-binary');
+ if (existsSync(tempDistBinaryDir)) {
+ const files = readdirSync(tempDistBinaryDir);
+ for (const file of files) {
+ const srcPath = join(tempDistBinaryDir, file);
+ const destPath = join(distBinaryDir, file);
+
+ // 如果目标文件已存在,先删除
+ if (existsSync(destPath)) {
+ rmSync(destPath, { force: true });
+ }
+
+ // 移动文件
+ cpSync(srcPath, destPath, { recursive: true });
+ console.log(`✅ 已移动: ${file}`);
+ }
+
+ // 清理 temp-server 中的 dist-binary 目录
+ try {
+ rmSync(tempDistBinaryDir, { recursive: true, force: true });
+ } catch (error) {
+ console.log(`⚠️ 无法删除临时目录 (可能有进程正在使用): ${error.message}`);
+ }
+ }
+
+ // 步骤 6: 清理 temp-server 目录
+ console.log('\n🧹 步骤 6: 清理 temp-server 临时文件...');
+
+ // 需要清理的目录列表
+ const dirsToClean = [
+ join(tempServerDir, 'apps'),
+ join(tempServerDir, 'dist-binary')
+ ];
+
+ for (const dirPath of dirsToClean) {
+ if (existsSync(dirPath)) {
+ try {
+ rmSync(dirPath, { recursive: true, force: true });
+ console.log(`✅ 已清理: ${dirPath.replace(tempServerDir, 'temp-server')}`);
+ } catch (error) {
+ console.log(`⚠️ 无法清理目录 ${dirPath.replace(tempServerDir, 'temp-server')}: ${error.message}`);
+ }
+ }
+ }
+
+ console.log('\n🎉 自动化打包流程完成!');
+ console.log(`📁 二进制文件位置: ${distBinaryDir}`);
+
+ // 显示生成的文件
+ if (existsSync(distBinaryDir)) {
+ const files = readdirSync(distBinaryDir);
+ if (files.length > 0) {
+ console.log('\n📋 生成的文件:');
+ files.forEach(file => {
+ const filePath = join(distBinaryDir, file);
+ const stats = statSync(filePath);
+ const size = (stats.size / 1024 / 1024).toFixed(2);
+ console.log(` - ${file} (${size} MB)`);
+ });
+ }
+ }
+
+} catch (error) {
+ console.error('\n❌ 打包过程中出现错误:');
+ console.error(error.message);
+ process.exit(1);
+}
\ No newline at end of file
diff --git a/dashboard/docs/API_DOCS.md b/dashboard/docs/API_DOCS.md
new file mode 100644
index 0000000..4644237
--- /dev/null
+++ b/dashboard/docs/API_DOCS.md
@@ -0,0 +1,556 @@
+# Pup Sniffer API 完整文档
+
+## 📖 概述
+
+Pup Sniffer 是一个基于 Puppeteer 和 Fastify 的视频资源嗅探服务,提供了强大的网页内容抓取和视频链接嗅探功能。本文档将详细介绍所有 API 接口的使用方法,包含完整的代码示例。
+
+**服务地址**: `http://localhost:57573`
+
+## 🚀 快速开始
+
+### 启动服务
+
+```bash
+# 方式一:使用 npm
+npm start
+
+# 方式二:直接运行二进制文件
+./pup-sniffer-win.exe # Windows
+./pup-sniffer-linux # Linux
+./pup-sniffer-macos # macOS
+```
+
+### 验证服务状态
+
+```bash
+curl http://localhost:57573/health
+```
+
+## 📋 API 接口列表
+
+| 接口 | 方法 | 路径 | 功能 |
+|------|------|------|------|
+| 首页 | GET | `/` | 演示页面 |
+| 视频嗅探 | GET | `/sniffer` | 嗅探视频资源链接 |
+| 页面源码 | GET | `/fetCodeByWebView` | 获取页面源码 |
+| 健康检查 | GET | `/health` | 服务状态检查 |
+| 活跃状态 | GET | `/active` | 浏览器状态检查 |
+
+---
+
+## 🎯 1. 视频嗅探接口
+
+### 基本信息
+
+- **接口路径**: `/sniffer`
+- **请求方法**: `GET`
+- **功能**: 嗅探指定页面中的视频资源链接(m3u8、mp4等)
+
+### 请求参数
+
+| 参数名 | 类型 | 必需 | 默认值 | 说明 |
+|--------|------|------|--------|------|
+| `url` | string | ✅ | - | 要嗅探的页面URL |
+| `mode` | string | ❌ | "0" | 嗅探模式:0=单个链接,1=多个链接 |
+| `is_pc` | string | ❌ | "0" | 设备模拟:0=移动设备,1=PC |
+| `timeout` | string | ❌ | "10000" | 超时时间(毫秒) |
+| `css` | string | ❌ | - | 等待的CSS选择器 |
+| `script` | string | ❌ | - | 页面执行脚本(Base64编码) |
+| `init_script` | string | ❌ | - | 页面初始化脚本(Base64编码) |
+| `headers` | string | ❌ | - | 自定义请求头(换行分隔) |
+| `custom_regex` | string | ❌ | - | 自定义匹配正则表达式 |
+| `sniffer_exclude` | string | ❌ | - | 排除匹配的正则表达式 |
+
+### 响应格式
+
+#### 成功响应
+
+```json
+{
+ "code": 200,
+ "msg": "success",
+ "data": {
+ "url": "https://example.com/video.m3u8",
+ "headers": {
+ "referer": "https://example.com",
+ "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
+ },
+ "from": "https://example.com/play",
+ "cost": "2345 ms",
+ "code": 200,
+ "msg": "超级嗅探解析成功"
+ },
+ "timestamp": 1703123456789
+}
+```
+
+#### 错误响应
+
+```json
+{
+ "code": 400,
+ "msg": "URL参数不能为空",
+ "data": null,
+ "timestamp": 1703123456789
+}
+```
+
+### 使用示例
+
+#### 1. 基础嗅探
+
+```bash
+curl "http://localhost:57573/sniffer?url=https://example.com/play"
+```
+
+```javascript
+// JavaScript 示例
+async function basicSniffer() {
+ const response = await fetch('http://localhost:57573/sniffer?url=https://example.com/play');
+ const result = await response.json();
+
+ if (result.code === 200) {
+ console.log('视频链接:', result.data.url);
+ console.log('请求头:', result.data.headers);
+ } else {
+ console.error('嗅探失败:', result.msg);
+ }
+}
+```
+
+```python
+# Python 示例
+import requests
+
+def basic_sniffer():
+ url = "http://localhost:57573/sniffer"
+ params = {
+ "url": "https://example.com/play"
+ }
+
+ response = requests.get(url, params=params)
+ result = response.json()
+
+ if result["code"] == 200:
+ print(f"视频链接: {result['data']['url']}")
+ print(f"请求头: {result['data']['headers']}")
+ else:
+ print(f"嗅探失败: {result['msg']}")
+```
+
+#### 2. 多链接嗅探
+
+```bash
+curl "http://localhost:57573/sniffer?url=https://example.com/play&mode=1&timeout=15000"
+```
+
+```javascript
+// JavaScript 多链接嗅探
+async function multiSniffer() {
+ const params = new URLSearchParams({
+ url: 'https://example.com/play',
+ mode: '1',
+ timeout: '15000'
+ });
+
+ const response = await fetch(`http://localhost:57573/sniffer?${params}`);
+ const result = await response.json();
+
+ if (result.code === 200 && Array.isArray(result.data)) {
+ result.data.forEach((video, index) => {
+ console.log(`视频 ${index + 1}:`, video.url);
+ });
+ }
+}
+```
+
+#### 3. PC模式嗅探
+
+```bash
+curl "http://localhost:57573/sniffer?url=https://example.com/play&is_pc=1"
+```
+
+#### 4. 自定义脚本嗅探
+
+```bash
+# 先将脚本进行Base64编码
+script_b64=$(echo "document.querySelector('video').play()" | base64)
+curl "http://localhost:57573/sniffer?url=https://example.com/play&script=$script_b64"
+```
+
+```javascript
+// JavaScript 自定义脚本示例
+async function customScriptSniffer() {
+ const script = "document.querySelector('video').play()";
+ const scriptB64 = btoa(script); // Base64编码
+
+ const params = new URLSearchParams({
+ url: 'https://example.com/play',
+ script: scriptB64
+ });
+
+ const response = await fetch(`http://localhost:57573/sniffer?${params}`);
+ const result = await response.json();
+ return result;
+}
+```
+
+#### 5. 自定义请求头
+
+```javascript
+// 自定义请求头示例
+async function customHeadersSniffer() {
+ const headers = [
+ 'User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X)',
+ 'Referer: https://example.com',
+ 'Authorization: Bearer your-token'
+ ].join('\n');
+
+ const params = new URLSearchParams({
+ url: 'https://example.com/play',
+ headers: headers
+ });
+
+ const response = await fetch(`http://localhost:57573/sniffer?${params}`);
+ return await response.json();
+}
+```
+
+---
+
+## 📄 2. 页面源码获取接口
+
+### 基本信息
+
+- **接口路径**: `/fetCodeByWebView`
+- **请求方法**: `GET`
+- **功能**: 获取指定页面的完整HTML源码
+
+### 请求参数
+
+| 参数名 | 类型 | 必需 | 默认值 | 说明 |
+|--------|------|------|--------|------|
+| `url` | string | ✅ | - | 要获取源码的页面URL |
+| `is_pc` | string | ❌ | "0" | 设备模拟:0=移动设备,1=PC |
+| `timeout` | string | ❌ | "10000" | 超时时间(毫秒) |
+| `css` | string | ❌ | - | 等待的CSS选择器 |
+| `script` | string | ❌ | - | 页面执行脚本(Base64编码) |
+| `init_script` | string | ❌ | - | 页面初始化脚本(Base64编码) |
+| `headers` | string | ❌ | - | 自定义请求头(换行分隔) |
+
+### 响应格式
+
+#### 成功响应
+
+```json
+{
+ "code": 200,
+ "msg": "success",
+ "data": {
+ "content": "
......",
+ "headers": {
+ "location": "https://example.com",
+ "content-type": "text/html"
+ },
+ "cost": "1234 ms"
+ },
+ "timestamp": 1703123456789
+}
+```
+
+### 使用示例
+
+#### 1. 基础源码获取
+
+```bash
+curl "http://localhost:57573/fetCodeByWebView?url=https://example.com"
+```
+
+```javascript
+// JavaScript 示例
+async function getPageSource() {
+ const response = await fetch('http://localhost:57573/fetCodeByWebView?url=https://example.com');
+ const result = await response.json();
+
+ if (result.code === 200) {
+ console.log('页面源码:', result.data.content);
+ console.log('响应头:', result.data.headers);
+ console.log('耗时:', result.data.cost);
+ }
+}
+```
+
+```python
+# Python 示例
+import requests
+
+def get_page_source():
+ url = "http://localhost:57573/fetCodeByWebView"
+ params = {"url": "https://example.com"}
+
+ response = requests.get(url, params=params)
+ result = response.json()
+
+ if result["code"] == 200:
+ print(f"页面源码长度: {len(result['data']['content'])}")
+ print(f"耗时: {result['data']['cost']}")
+
+ # 保存到文件
+ with open('page_source.html', 'w', encoding='utf-8') as f:
+ f.write(result['data']['content'])
+```
+
+#### 2. 等待特定元素加载
+
+```javascript
+// 等待特定CSS选择器出现
+async function waitForElement() {
+ const params = new URLSearchParams({
+ url: 'https://example.com',
+ css: '.video-container', // 等待视频容器加载
+ timeout: '20000'
+ });
+
+ const response = await fetch(`http://localhost:57573/fetCodeByWebView?${params}`);
+ return await response.json();
+}
+```
+
+---
+
+## ❤️ 3. 健康检查接口
+
+### 基本信息
+
+- **接口路径**: `/health`
+- **请求方法**: `GET`
+- **功能**: 检查服务运行状态
+
+### 响应格式
+
+```json
+{
+ "code": 200,
+ "msg": "success",
+ "data": {
+ "status": "ok",
+ "service": "pup-sniffer"
+ },
+ "timestamp": 1703123456789
+}
+```
+
+### 使用示例
+
+```bash
+curl http://localhost:57573/health
+```
+
+```javascript
+// 服务状态监控
+async function checkServiceHealth() {
+ try {
+ const response = await fetch('http://localhost:57573/health');
+ const result = await response.json();
+
+ if (result.code === 200 && result.data.status === 'ok') {
+ console.log('✅ 服务运行正常');
+ return true;
+ } else {
+ console.log('❌ 服务状态异常');
+ return false;
+ }
+ } catch (error) {
+ console.log('❌ 服务连接失败:', error.message);
+ return false;
+ }
+}
+```
+
+---
+
+## 🔄 4. 活跃状态接口
+
+### 基本信息
+
+- **接口路径**: `/active`
+- **请求方法**: `GET`
+- **功能**: 检查浏览器实例状态
+
+### 响应格式
+
+```json
+{
+ "code": 200,
+ "msg": "success",
+ "data": {
+ "active": true,
+ "browser": "initialized",
+ "timestamp": "2023-12-21T10:30:56.789Z"
+ },
+ "timestamp": 1703123456789
+}
+```
+
+### 使用示例
+
+```bash
+curl http://localhost:57573/active
+```
+
+---
+
+## 🛠️ 高级用法
+
+### 1. 批量嗅探
+
+```javascript
+// 批量嗅探多个URL
+async function batchSniffer(urls) {
+ const results = [];
+
+ for (const url of urls) {
+ try {
+ const response = await fetch(`http://localhost:57573/sniffer?url=${encodeURIComponent(url)}`);
+ const result = await response.json();
+ results.push({
+ url: url,
+ success: result.code === 200,
+ data: result.data
+ });
+ } catch (error) {
+ results.push({
+ url: url,
+ success: false,
+ error: error.message
+ });
+ }
+
+ // 避免请求过于频繁
+ await new Promise(resolve => setTimeout(resolve, 1000));
+ }
+
+ return results;
+}
+
+// 使用示例
+const urls = [
+ 'https://example1.com/play',
+ 'https://example2.com/video',
+ 'https://example3.com/watch'
+];
+
+batchSniffer(urls).then(results => {
+ console.log('批量嗅探结果:', results);
+});
+```
+
+### 2. 错误处理和重试
+
+```javascript
+// 带重试机制的嗅探函数
+async function snifferWithRetry(url, maxRetries = 3) {
+ for (let i = 0; i < maxRetries; i++) {
+ try {
+ const response = await fetch(`http://localhost:57573/sniffer?url=${encodeURIComponent(url)}&timeout=15000`);
+ const result = await response.json();
+
+ if (result.code === 200) {
+ return result;
+ } else if (i === maxRetries - 1) {
+ throw new Error(`嗅探失败: ${result.msg}`);
+ }
+ } catch (error) {
+ if (i === maxRetries - 1) {
+ throw error;
+ }
+ console.log(`第 ${i + 1} 次尝试失败,${2 ** i} 秒后重试...`);
+ await new Promise(resolve => setTimeout(resolve, 2 ** i * 1000));
+ }
+ }
+}
+```
+
+### 3. 结果缓存
+
+```javascript
+// 简单的内存缓存实现
+class SnifferCache {
+ constructor(ttl = 300000) { // 5分钟缓存
+ this.cache = new Map();
+ this.ttl = ttl;
+ }
+
+ get(url) {
+ const item = this.cache.get(url);
+ if (item && Date.now() - item.timestamp < this.ttl) {
+ return item.data;
+ }
+ this.cache.delete(url);
+ return null;
+ }
+
+ set(url, data) {
+ this.cache.set(url, {
+ data: data,
+ timestamp: Date.now()
+ });
+ }
+
+ async sniffer(url) {
+ // 先检查缓存
+ const cached = this.get(url);
+ if (cached) {
+ console.log('使用缓存结果');
+ return cached;
+ }
+
+ // 发起新请求
+ const response = await fetch(`http://localhost:57573/sniffer?url=${encodeURIComponent(url)}`);
+ const result = await response.json();
+
+ // 缓存成功结果
+ if (result.code === 200) {
+ this.set(url, result);
+ }
+
+ return result;
+ }
+}
+
+// 使用示例
+const cache = new SnifferCache();
+cache.sniffer('https://example.com/play').then(result => {
+ console.log('嗅探结果:', result);
+});
+```
+
+## 🚨 错误码说明
+
+| 错误码 | 说明 | 解决方案 |
+|--------|------|----------|
+| 400 | 请求参数错误 | 检查必需参数是否提供 |
+| 500 | 服务器内部错误 | 检查服务器日志,重启服务 |
+| 504 | 请求超时 | 增加timeout参数值 |
+
+## 💡 最佳实践
+
+1. **合理设置超时时间**: 根据目标网站的加载速度设置合适的timeout值
+2. **使用适当的设备模拟**: 某些网站对PC和移动端返回不同内容
+3. **处理异步加载**: 使用css参数等待关键元素加载完成
+4. **错误处理**: 始终检查返回的code字段,妥善处理错误情况
+5. **避免频繁请求**: 在批量操作时添加适当的延迟
+6. **缓存结果**: 对于相同URL的重复请求,考虑使用缓存
+
+## 📞 技术支持
+
+如果在使用过程中遇到问题,请:
+
+1. 检查服务是否正常运行(访问 `/health` 接口)
+2. 查看服务器控制台日志
+3. 确认目标URL是否可正常访问
+4. 检查网络连接和防火墙设置
+
+---
+
+*本文档持续更新中,如有疑问请参考项目README或提交Issue。*
\ No newline at end of file
diff --git a/dashboard/docs/API_REFACTOR_SUMMARY.md b/dashboard/docs/API_REFACTOR_SUMMARY.md
new file mode 100644
index 0000000..0e827b5
--- /dev/null
+++ b/dashboard/docs/API_REFACTOR_SUMMARY.md
@@ -0,0 +1,173 @@
+# API 重构总结
+
+## 重构概述
+
+本次重构将原本分散在Vue组件中的API调用统一封装为专门的API服务模块,提高了代码的可维护性、可复用性和可测试性。
+
+## 完成的工作
+
+### 1. 分析后端API文档 ✅
+- 详细分析了 `docs/apidoc.md` 和 `docs/t4api.md`
+- 理解了三个主要接口:模块数据接口(T4)、模块代理接口、解析接口
+- 掌握了各接口的参数、功能和响应格式
+
+### 2. 设计API封装架构 ✅
+创建了分层的API架构:
+```
+src/api/
+├── index.js # 统一入口
+├── config.js # 配置和常量
+├── request.js # Axios封装
+├── modules/ # 基础API模块
+├── services/ # 业务服务层
+├── utils/ # 工具函数
+└── types/ # 类型定义
+```
+
+### 3. 实现基础API工具类 ✅
+
+#### 核心文件:
+- **config.js**: API配置、路径、常量定义
+- **request.js**: Axios封装,包含拦截器和错误处理
+- **utils/index.js**: 数据处理和验证工具函数
+- **types/index.js**: 数据类型定义和工厂函数
+
+#### 基础API模块:
+- **modules/module.js**: T4模块数据接口封装
+- **modules/proxy.js**: 模块代理接口封装
+- **modules/parse.js**: 视频解析接口封装
+
+### 4. 实现具体业务API模块 ✅
+
+#### 业务服务层:
+- **services/video.js**: 视频相关业务逻辑
+ - 推荐视频获取
+ - 分类视频获取
+ - 视频搜索
+ - 视频详情
+ - 播放地址获取
+ - 视频解析
+ - 5分钟缓存机制
+
+- **services/site.js**: 站点管理业务逻辑
+ - 站点配置管理
+ - 当前站点切换
+ - 站点CRUD操作
+ - 本地存储持久化
+
+### 5. 重构现有Vue组件 ✅
+
+#### 重构的组件:
+1. **Video2.vue**
+ - 替换 `req.get` 为 `siteService` 和 `videoService`
+ - 优化站点配置获取逻辑
+ - 改进分类列表获取方式
+
+2. **VideoList.vue**
+ - 使用 `videoService` 获取视频列表
+ - 支持推荐和分类视频加载
+ - 统一错误处理
+
+3. **Video.vue**
+ - 集成 `siteService` 进行站点管理
+ - 使用 `videoService` 进行视频搜索
+ - 同步多个状态管理store
+
+## 技术改进
+
+### 1. 统一的错误处理
+- 所有API调用都有统一的错误格式
+- 自动处理HTTP状态码和业务错误码
+- 友好的错误信息提示
+
+### 2. 缓存机制
+- 视频服务实现5分钟缓存
+- 减少重复请求,提高性能
+- 自动缓存清理机制
+
+### 3. 数据格式化
+- 统一的数据结构定义
+- 自动数据格式化和验证
+- 类型安全的数据处理
+
+### 4. 配置管理
+- 集中的API配置管理
+- 环境变量支持
+- 灵活的参数配置
+
+### 5. 拦截器机制
+- 自动添加认证token
+- 统一的请求头设置
+- 响应数据预处理
+
+## 代码质量提升
+
+### 1. 可维护性
+- 分层架构,职责清晰
+- 统一的代码风格
+- 完善的错误处理
+
+### 2. 可复用性
+- 模块化设计
+- 通用的工具函数
+- 标准化的接口定义
+
+### 3. 可测试性
+- 独立的服务模块
+- 纯函数设计
+- 依赖注入支持
+
+### 4. 可扩展性
+- 插件化架构
+- 配置驱动
+- 标准化的扩展点
+
+## 使用方式对比
+
+### 重构前:
+```javascript
+import req from '@/utils/req'
+
+// 分散的API调用
+const response = await req.get('/home')
+const data = response.data
+```
+
+### 重构后:
+```javascript
+import { videoService, siteService } from '@/api/services'
+
+// 语义化的业务方法
+const currentSite = siteService.getCurrentSite()
+const data = await videoService.getRecommendVideos(currentSite.key, {
+ extend: currentSite.ext
+})
+```
+
+## 项目状态
+
+✅ **开发服务器运行正常** - http://localhost:5174/
+✅ **无编译错误**
+✅ **所有组件重构完成**
+✅ **API封装架构完整**
+
+## 后续建议
+
+1. **添加单元测试**: 为API服务模块编写测试用例
+2. **性能监控**: 添加API调用性能监控
+3. **文档完善**: 补充更多使用示例和最佳实践
+4. **类型定义**: 考虑使用TypeScript增强类型安全
+5. **错误上报**: 集成错误监控和上报机制
+
+## 文档
+
+- **API使用说明**: `src/api/README.md`
+- **重构总结**: `API_REFACTOR_SUMMARY.md` (本文档)
+
+---
+
+**重构完成时间**: 2024年1月
+**重构范围**: 前端API调用层完整重构
+**影响组件**: Video2.vue, VideoList.vue, Video.vue
+**新增文件**: 15个API相关文件
+**代码质量**: 显著提升
\ No newline at end of file
diff --git a/dashboard/docs/BUILD_BINARY_GUIDE.md b/dashboard/docs/BUILD_BINARY_GUIDE.md
new file mode 100644
index 0000000..52e0323
--- /dev/null
+++ b/dashboard/docs/BUILD_BINARY_GUIDE.md
@@ -0,0 +1,231 @@
+# DrPlayer 二进制打包指南
+
+## 概述
+
+本指南介绍如何将 DrPlayer Dashboard 打包为跨平台的独立可执行文件。
+
+## 主要改进
+
+### 1. 端口配置优化
+- **默认端口**: 从 8008 改为 9978
+- **智能端口检测**: 如果端口被占用,自动尝试下一个端口 (9979, 9980, ...)
+- **最大尝试次数**: 100个端口,确保能找到可用端口
+
+### 2. PKG 兼容性优化
+- **环境检测**: 自动检测是否在 PKG 环境中运行
+- **路径处理**: PKG 环境中使用 `process.cwd()` 而非 `__dirname`
+- **构建跳过**: PKG 环境中跳过前端构建步骤
+- **错误处理**: PKG 环境中更宽松的错误处理
+
+## 打包方法
+
+### 方法一:使用自动化脚本 (推荐)
+
+#### Windows PowerShell
+```powershell
+# 运行 PowerShell 脚本
+pnpm run build:binary:win
+
+# 或直接运行
+powershell -ExecutionPolicy Bypass -File build-binary.ps1
+```
+
+#### Node.js 脚本 (跨平台)
+```bash
+# 运行 Node.js 脚本
+pnpm run build:binary
+
+# 或直接运行
+node build-binary.js
+```
+
+### 方法二:手动打包
+
+#### 1. 安装 PKG
+```bash
+npm install -g pkg
+```
+
+#### 2. 构建前端资源
+```bash
+pnpm build:fastify
+```
+
+#### 3. 打包指定平台
+```bash
+# Windows x64
+pnpm run pkg:win
+
+# Linux x64
+pnpm run pkg:linux
+
+# macOS x64
+pnpm run pkg:macos
+
+# 所有平台
+pnpm run pkg:all
+```
+
+### 方法三:自定义打包
+```bash
+# 基本命令
+pkg production-server.js --target node18-win-x64 --output drplayer-server.exe
+
+# 带压缩
+pkg production-server.js --target node18-win-x64 --output drplayer-server.exe --compress Brotli
+
+# 多平台
+pkg production-server.js --targets node18-win-x64,node18-linux-x64,node18-macos-x64
+```
+
+## 支持的平台
+
+| 平台 | 架构 | 输出文件名 |
+|------|------|------------|
+| Windows | x64 | drplayer-server-win-x64.exe |
+| Linux | x64 | drplayer-server-linux-x64 |
+| macOS | x64 | drplayer-server-macos-x64 |
+| macOS | ARM64 | drplayer-server-macos-arm64 |
+
+## 输出文件结构
+
+```
+dist-binary/
+├── drplayer-server-win-x64.exe # Windows 可执行文件
+├── drplayer-server-linux-x64 # Linux 可执行文件
+├── drplayer-server-macos-x64 # macOS Intel 可执行文件
+├── drplayer-server-macos-arm64 # macOS Apple Silicon 可执行文件
+├── start-windows.bat # Windows 启动脚本
+├── start-linux.sh # Linux 启动脚本
+├── start-macos.sh # macOS 启动脚本
+└── README.md # 使用说明
+```
+
+## 使用方法
+
+### Windows
+```cmd
+# 方法1: 双击运行
+start-windows.bat
+
+# 方法2: 直接运行
+drplayer-server-win-x64.exe
+```
+
+### Linux
+```bash
+# 添加执行权限
+chmod +x drplayer-server-linux-x64
+chmod +x start-linux.sh
+
+# 运行
+./start-linux.sh
+# 或
+./drplayer-server-linux-x64
+```
+
+### macOS
+```bash
+# 添加执行权限
+chmod +x drplayer-server-macos-x64
+chmod +x start-macos.sh
+
+# 运行
+./start-macos.sh
+# 或
+./drplayer-server-macos-x64
+```
+
+## 访问地址
+
+服务器启动后,访问地址为:
+- **主页**: http://localhost:9978/
+- **应用**: http://localhost:9978/apps/drplayer/
+- **健康检查**: http://localhost:9978/health
+
+如果端口 9978 被占用,服务器会自动尝试下一个可用端口。
+
+## 注意事项
+
+### 1. 文件依赖
+- 二进制文件包含了所有 Node.js 依赖
+- 静态文件(HTML、CSS、JS)需要在运行时存在
+- 首次运行会在当前目录创建 `apps` 文件夹
+
+### 2. 权限要求
+- Linux/macOS 需要执行权限
+- Windows 可能需要管理员权限(取决于安装位置)
+
+### 3. 防火墙设置
+- 确保防火墙允许对应端口的访问
+- 默认绑定到 `0.0.0.0`,支持外部访问
+
+### 4. 性能优化
+- 使用 Brotli 压缩减小文件大小
+- 二进制文件启动速度比 Node.js 脚本稍慢
+
+## 故障排除
+
+### 1. 端口占用
+```
+🔍 正在查找可用端口,起始端口: 9978
+端口 9978 已被占用,尝试下一个端口...
+端口 9979 已被占用,尝试下一个端口...
+✅ 找到可用端口: 9980
+```
+
+### 2. 文件缺失
+```
+⚠️ dist目录不存在,跳过文件复制
+📦 pkg环境中,请确保静态文件已正确打包
+```
+
+### 3. 构建失败
+```
+⚠️ 构建命令执行失败,可能是在打包环境中运行
+📦 跳过构建步骤,使用预构建的文件
+```
+
+## 开发建议
+
+### 1. 预构建资源
+在打包前确保运行:
+```bash
+pnpm build:fastify
+```
+
+### 2. 测试环境
+在不同平台测试二进制文件:
+```bash
+# 测试启动
+./drplayer-server-linux-x64
+
+# 测试健康检查
+curl http://localhost:9978/health
+```
+
+### 3. 自动化部署
+可以将打包脚本集成到 CI/CD 流程中:
+```yaml
+# GitHub Actions 示例
+- name: Build Binary
+ run: |
+ npm install -g pkg
+ pnpm build:fastify
+ pnpm run pkg:all
+```
+
+## 版本信息
+
+- **Node.js 版本**: 18
+- **PKG 目标**: node18-*
+- **压缩算法**: Brotli
+- **默认端口**: 9978
+
+## 更新日志
+
+### v1.0.0
+- 初始版本
+- 支持跨平台打包
+- 智能端口检测
+- PKG 环境优化
\ No newline at end of file
diff --git a/dashboard/docs/DEPLOYMENT.md b/dashboard/docs/DEPLOYMENT.md
new file mode 100644
index 0000000..f51d060
--- /dev/null
+++ b/dashboard/docs/DEPLOYMENT.md
@@ -0,0 +1,231 @@
+# DrPlayer Dashboard 部署指南
+
+本文档提供了 DrPlayer Dashboard 的完整部署指南,解决了子目录部署和SPA路由刷新的问题。
+
+## 构建配置
+
+### 1. 环境变量配置
+
+在项目根目录创建 `.env.production` 文件:
+
+```bash
+# 生产环境配置
+NODE_ENV=production
+
+# 如果部署到子目录,设置基础路径
+# 例如:部署到 /apps/ 目录下
+VITE_BASE_PATH=/apps/
+
+# 如果部署到根目录,使用相对路径
+# VITE_BASE_PATH=./
+```
+
+### 2. 构建命令
+
+```bash
+# 安装依赖
+npm install
+
+# 构建生产版本
+npm run build
+
+# 构建后的文件在 dist 目录中
+```
+
+## 部署配置
+
+### Nginx 配置
+
+#### 1. 根目录部署
+
+如果部署到网站根目录(如 `https://example.com/`):
+
+```nginx
+server {
+ listen 80;
+ server_name example.com;
+ root /var/www/drplayer/dist;
+ index index.html;
+
+ # 处理静态资源
+ location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
+ expires 1y;
+ add_header Cache-Control "public, immutable";
+ try_files $uri =404;
+ }
+
+ # 处理 SPA 路由
+ location / {
+ try_files $uri $uri/ /index.html;
+ }
+
+ # 安全配置
+ location ~ /\. {
+ deny all;
+ }
+}
+```
+
+#### 2. 子目录部署
+
+如果部署到子目录(如 `https://example.com/apps/`):
+
+```nginx
+server {
+ listen 80;
+ server_name example.com;
+
+ # 子目录配置
+ location /apps/ {
+ alias /var/www/drplayer/dist/;
+ index index.html;
+
+ # 处理静态资源
+ location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
+ expires 1y;
+ add_header Cache-Control "public, immutable";
+ try_files $uri =404;
+ }
+
+ # 处理 SPA 路由 - 关键配置
+ try_files $uri $uri/ /apps/index.html;
+ }
+
+ # 安全配置
+ location ~ /\. {
+ deny all;
+ }
+}
+```
+
+#### 3. 使用 location 块的高级配置
+
+```nginx
+server {
+ listen 80;
+ server_name example.com;
+
+ location /apps {
+ alias /var/www/drplayer/dist;
+
+ # 重写规则处理子目录
+ location ~ ^/apps/(.*)$ {
+ try_files /$1 /$1/ /index.html;
+ }
+
+ # 静态资源缓存
+ location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
+ expires 1y;
+ add_header Cache-Control "public, immutable";
+ }
+ }
+}
+```
+
+### Apache 配置
+
+如果使用 Apache 服务器,在 `dist` 目录创建 `.htaccess` 文件:
+
+```apache
+# 根目录部署
+RewriteEngine On
+RewriteBase /
+
+# 处理静态资源
+RewriteCond %{REQUEST_FILENAME} !-f
+RewriteCond %{REQUEST_FILENAME} !-d
+RewriteRule . /index.html [L]
+
+# 子目录部署(例如 /apps/)
+# RewriteEngine On
+# RewriteBase /apps/
+# RewriteCond %{REQUEST_FILENAME} !-f
+# RewriteCond %{REQUEST_FILENAME} !-d
+# RewriteRule . /apps/index.html [L]
+```
+
+## 部署步骤
+
+### 1. 准备构建
+
+```bash
+# 1. 设置环境变量(根据部署目录)
+echo "VITE_BASE_PATH=/apps/" > .env.production
+
+# 2. 构建项目
+npm run build
+```
+
+### 2. 上传文件
+
+```bash
+# 将 dist 目录内容上传到服务器
+scp -r dist/* user@server:/var/www/drplayer/dist/
+```
+
+### 3. 配置服务器
+
+```bash
+# 1. 配置 nginx
+sudo nano /etc/nginx/sites-available/drplayer
+sudo ln -s /etc/nginx/sites-available/drplayer /etc/nginx/sites-enabled/
+sudo nginx -t
+sudo systemctl reload nginx
+
+# 2. 设置文件权限
+sudo chown -R www-data:www-data /var/www/drplayer/
+sudo chmod -R 755 /var/www/drplayer/
+```
+
+## 常见问题解决
+
+### 1. 资源加载 404
+
+**问题**:部署到子目录后,CSS/JS 文件加载失败
+
+**解决**:
+- 确保 `.env.production` 中设置了正确的 `VITE_BASE_PATH`
+- 检查 nginx 配置中的 `alias` 路径是否正确
+
+### 2. 路由刷新 404
+
+**问题**:直接访问路由地址或刷新页面时出现 404
+
+**解决**:
+- 确保 nginx 配置了正确的 `try_files` 规则
+- 检查 `try_files` 中的 fallback 路径是否正确
+
+### 3. 子目录路由问题
+
+**问题**:子目录部署时路由跳转不正确
+
+**解决**:
+- 确保 Vue Router 的 base 路径配置正确
+- 检查环境变量 `VITE_BASE_PATH` 是否正确设置
+
+## 验证部署
+
+部署完成后,验证以下功能:
+
+1. **静态资源加载**:检查浏览器开发者工具,确保所有 CSS/JS 文件正常加载
+2. **路由导航**:点击菜单项,确保路由跳转正常
+3. **页面刷新**:在任意页面刷新,确保不出现 404 错误
+4. **直接访问**:直接在地址栏输入路由地址,确保能正常访问
+
+## 性能优化建议
+
+1. **启用 Gzip 压缩**
+2. **设置静态资源缓存**
+3. **使用 CDN 加速**
+4. **启用 HTTP/2**
+
+```nginx
+# Gzip 压缩
+gzip on;
+gzip_vary on;
+gzip_min_length 1024;
+gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml+rss application/json;
+
+# HTTP/2
+listen 443 ssl http2;
+```
\ No newline at end of file
diff --git a/dashboard/docs/FASTIFY_DEPLOYMENT.md b/dashboard/docs/FASTIFY_DEPLOYMENT.md
new file mode 100644
index 0000000..efc7a71
--- /dev/null
+++ b/dashboard/docs/FASTIFY_DEPLOYMENT.md
@@ -0,0 +1,175 @@
+# Vue SPA + Fastify 部署指南
+
+## 问题说明
+
+Vue单页应用使用`createWebHistory`路由模式时,刷新页面会出现404错误。这是因为:
+
+1. 用户访问 `/apps/drplayer/settings`
+2. 浏览器向服务器请求 `/apps/drplayer/settings` 文件
+3. 服务器找不到该文件,返回404
+4. 需要让服务器将所有SPA路由请求都返回到 `index.html`
+
+## 解决方案
+
+通过Fastify提供静态文件服务 + SPA路由回退机制,完全可以解决刷新404问题。
+
+## 配置步骤
+
+### 1. 构建Vue应用
+
+```bash
+# 方法1:使用构建脚本(推荐)
+node build-for-fastify.js
+
+# 方法2:手动设置环境变量
+set VITE_BASE_PATH=/apps/drplayer/
+pnpm build
+```
+
+### 2. 复制构建文件
+
+将 `dist/` 目录的所有内容复制到您的后端 `apps/drplayer/` 目录:
+
+```
+your-backend/
+├── apps/
+│ └── drplayer/
+│ ├── index.html
+│ ├── assets/
+│ │ ├── index-xxx.js
+│ │ └── index-xxx.css
+│ └── ...
+└── server.js
+```
+
+### 3. 配置Fastify服务器
+
+#### 方法1:使用提供的路由模块(推荐)
+
+```javascript
+import { addSPARoutes } from './fastify-spa-routes.js';
+import fastifyStatic from '@fastify/static';
+
+// 您现有的静态文件配置
+await fastify.register(fastifyStatic, {
+ root: options.appsDir,
+ prefix: '/apps/',
+ decorateReply: false,
+});
+
+// 添加SPA路由支持
+await fastify.register(addSPARoutes, {
+ appsDir: options.appsDir
+});
+```
+
+#### 方法2:直接在现有代码中添加
+
+```javascript
+import path from 'path';
+import fs from 'fs';
+
+// 在您现有的Fastify应用中添加这些路由
+fastify.get('/apps/drplayer/*', async (request, reply) => {
+ const requestedPath = request.params['*'];
+ const fullPath = path.join(options.appsDir, 'drplayer', requestedPath);
+
+ try {
+ await fs.promises.access(fullPath);
+ return reply.callNotFound(); // 让静态文件服务处理
+ } catch (error) {
+ // 返回index.html让Vue Router处理
+ const indexPath = path.join(options.appsDir, 'drplayer', 'index.html');
+ const indexContent = await fs.promises.readFile(indexPath, 'utf8');
+ return reply
+ .type('text/html')
+ .header('Cache-Control', 'no-cache, no-store, must-revalidate')
+ .send(indexContent);
+ }
+});
+
+// 处理根路径
+fastify.get('/apps/drplayer', async (request, reply) => {
+ return reply.redirect(301, '/apps/drplayer/');
+});
+
+fastify.get('/apps/drplayer/', async (request, reply) => {
+ const indexPath = path.join(options.appsDir, 'drplayer', 'index.html');
+ const indexContent = await fs.promises.readFile(indexPath, 'utf8');
+ return reply
+ .type('text/html')
+ .header('Cache-Control', 'no-cache, no-store, must-revalidate')
+ .send(indexContent);
+});
+```
+
+## 工作原理
+
+1. **静态文件服务**:`@fastify/static` 处理所有存在的静态文件(JS、CSS、图片等)
+2. **路由回退**:当请求的文件不存在时,返回 `index.html`
+3. **Vue Router接管**:`index.html` 加载后,Vue Router根据URL显示对应组件
+
+## 路由优先级
+
+```
+请求: /apps/drplayer/assets/index-xxx.js
+↓
+静态文件存在 → 直接返回文件
+
+请求: /apps/drplayer/settings
+↓
+静态文件不存在 → 返回 index.html → Vue Router处理
+```
+
+## 缓存策略
+
+- **HTML文件**:不缓存(`no-cache`),确保路由更新
+- **静态资源**:长期缓存(1年),提高性能
+
+## 测试验证
+
+1. 启动Fastify服务器
+2. 访问 `http://localhost:5757/apps/drplayer/`
+3. 导航到不同页面(如设置页面)
+4. 刷新页面,确认不出现404错误
+5. 检查浏览器开发者工具,确认静态资源正常加载
+
+## 常见问题
+
+### Q: 刷新后页面空白?
+A: 检查 `VITE_BASE_PATH` 是否正确设置为 `/apps/drplayer/`
+
+### Q: 静态资源404?
+A: 确认构建时的base路径与Fastify的prefix匹配
+
+### Q: API请求失败?
+A: 确保API路由在SPA路由之前注册,避免被SPA回退拦截
+
+## 性能优化
+
+1. **启用Gzip压缩**:
+```javascript
+import fastifyCompress from '@fastify/compress';
+await fastify.register(fastifyCompress);
+```
+
+2. **设置静态资源缓存**:
+```javascript
+await fastify.register(fastifyStatic, {
+ // ... 其他配置
+ setHeaders: (res, path) => {
+ if (path.endsWith('.html')) {
+ res.setHeader('Cache-Control', 'no-cache, no-store, must-revalidate');
+ } else if (path.match(/\.(js|css|png|jpg|jpeg|gif|ico|svg)$/)) {
+ res.setHeader('Cache-Control', 'public, max-age=31536000');
+ }
+ }
+});
+```
+
+## 总结
+
+✅ **可以解决404问题**:通过Fastify的路由回退机制
+✅ **性能良好**:静态文件直接服务,只有路由请求才回退
+✅ **配置简单**:只需添加几个路由处理器
+✅ **开发友好**:支持热重载和开发服务器
\ No newline at end of file
diff --git a/dashboard/docs/NGINX_DEPLOYMENT.md b/dashboard/docs/NGINX_DEPLOYMENT.md
new file mode 100644
index 0000000..b0907d7
--- /dev/null
+++ b/dashboard/docs/NGINX_DEPLOYMENT.md
@@ -0,0 +1,194 @@
+# Vue SPA Nginx部署指南
+
+本文档说明如何解决Vue单页应用(SPA)在静态部署时的404问题,并提供完整的Nginx配置方案。
+
+## 问题原因
+
+Vue Router使用`createWebHistory`模式时,路由是通过浏览器的History API实现的。当用户直接访问或刷新非根路径页面时(如`/settings`),服务器会尝试查找对应的物理文件,但这些文件并不存在,因此返回404错误。
+
+## 解决方案
+
+通过Nginx配置`try_files`指令,将所有不匹配静态文件的请求重定向到`index.html`,让Vue Router接管路由处理。
+
+## 部署方式
+
+### 方式一:根目录部署
+
+适用于将DrPlayer部署在域名根目录的情况,如:`https://example.com/`
+
+#### 1. 构建应用
+```bash
+# 使用根目录打包脚本
+pnpm build:root
+```
+
+#### 2. 部署文件
+将`dist`目录中的所有文件复制到服务器的网站根目录:
+```bash
+# 示例路径
+/var/www/html/drplayer/
+```
+
+#### 3. Nginx配置
+使用提供的`nginx-root.conf`配置文件:
+```bash
+# 复制配置文件
+sudo cp nginx-root.conf /etc/nginx/sites-available/drplayer
+sudo ln -s /etc/nginx/sites-available/drplayer /etc/nginx/sites-enabled/
+
+# 或者直接编辑默认配置
+sudo nano /etc/nginx/sites-available/default
+```
+
+### 方式二:子目录部署
+
+适用于将DrPlayer部署在域名子目录的情况,如:`https://example.com/apps/drplayer/`
+
+#### 1. 构建应用
+```bash
+# 使用子目录打包脚本
+pnpm build:apps
+```
+
+#### 2. 部署文件
+将`dist`目录中的所有文件复制到服务器的指定子目录:
+```bash
+# 示例路径
+/var/www/html/drplayer/
+```
+
+#### 3. Nginx配置
+使用提供的`nginx-subdir.conf`配置文件:
+```bash
+# 复制配置文件
+sudo cp nginx-subdir.conf /etc/nginx/sites-available/drplayer-subdir
+sudo ln -s /etc/nginx/sites-available/drplayer-subdir /etc/nginx/sites-enabled/
+```
+
+## 配置文件说明
+
+### 核心配置项
+
+1. **try_files指令**
+ ```nginx
+ try_files $uri $uri/ /index.html;
+ ```
+ 这是解决SPA路由404问题的关键配置。
+
+2. **静态资源缓存**
+ ```nginx
+ location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
+ expires 1y;
+ add_header Cache-Control "public, immutable";
+ }
+ ```
+
+3. **Gzip压缩**
+ ```nginx
+ gzip on;
+ gzip_types text/plain text/css application/json application/javascript;
+ ```
+
+4. **安全头设置**
+ ```nginx
+ add_header X-Frame-Options "SAMEORIGIN" always;
+ add_header X-Content-Type-Options "nosniff" always;
+ ```
+
+### 路径配置
+
+- **根目录部署**:修改`root`指令指向您的实际部署路径
+- **子目录部署**:修改`alias`指令指向您的实际部署路径
+
+## 部署步骤
+
+### 1. 准备服务器环境
+```bash
+# 安装Nginx(Ubuntu/Debian)
+sudo apt update
+sudo apt install nginx
+
+# 安装Nginx(CentOS/RHEL)
+sudo yum install nginx
+# 或者
+sudo dnf install nginx
+```
+
+### 2. 配置Nginx
+```bash
+# 备份原配置
+sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.backup
+
+# 应用新配置
+sudo cp nginx-root.conf /etc/nginx/sites-available/drplayer
+sudo ln -s /etc/nginx/sites-available/drplayer /etc/nginx/sites-enabled/
+
+# 测试配置
+sudo nginx -t
+
+# 重启Nginx
+sudo systemctl restart nginx
+```
+
+### 3. 部署应用文件
+```bash
+# 创建部署目录
+sudo mkdir -p /var/www/html/drplayer
+
+# 复制构建文件
+sudo cp -r dist/* /var/www/html/drplayer/
+
+# 设置权限
+sudo chown -R www-data:www-data /var/www/html/drplayer
+sudo chmod -R 755 /var/www/html/drplayer
+```
+
+### 4. 验证部署
+1. 访问首页:`http://your-domain/`
+2. 直接访问子页面:`http://your-domain/settings`
+3. 刷新页面确认不会出现404错误
+
+## 常见问题
+
+### 1. 刷新页面仍然404
+- 检查Nginx配置中的`try_files`指令是否正确
+- 确认`root`或`alias`路径是否正确
+- 检查文件权限是否正确
+
+### 2. 静态资源加载失败
+- 检查`base`路径配置是否与部署路径匹配
+- 确认静态资源文件是否存在
+- 检查Nginx静态文件配置
+
+### 3. API请求失败
+- 配置API代理(如果后端API在不同端口)
+- 检查CORS设置
+- 确认API路径配置
+
+## 性能优化建议
+
+1. **启用Gzip压缩**:减少传输文件大小
+2. **设置静态资源缓存**:提高加载速度
+3. **使用CDN**:加速静态资源访问
+4. **启用HTTP/2**:提高传输效率
+5. **配置SSL证书**:启用HTTPS
+
+## 安全建议
+
+1. **隐藏Nginx版本信息**
+2. **设置安全响应头**
+3. **禁止访问敏感文件**
+4. **配置防火墙规则**
+5. **定期更新系统和软件**
+
+## 监控和日志
+
+```nginx
+# 访问日志
+access_log /var/log/nginx/drplayer_access.log;
+
+# 错误日志
+error_log /var/log/nginx/drplayer_error.log;
+```
+
+通过以上配置,您的Vue SPA应用将能够正确处理所有路由,解决刷新页面404的问题。
\ No newline at end of file
diff --git a/dashboard/docs/OPTIMIZATION_REPORT.md b/dashboard/docs/OPTIMIZATION_REPORT.md
new file mode 100644
index 0000000..453e9ce
--- /dev/null
+++ b/dashboard/docs/OPTIMIZATION_REPORT.md
@@ -0,0 +1,96 @@
+# DrPlayer PKG 打包优化报告
+
+## 📊 优化结果总览
+
+| 指标 | 原始版本 | 优化版本 | 改善幅度 |
+|------|----------|----------|----------|
+| 文件大小 | 45.70 MB | 38.85 MB | **-15.0%** |
+| 构建脚本 | `build:binary` | `build:binary:optimized` | 新增优化版本 |
+| 压缩技术 | 无 | Brotli + UPX检测 | 智能压缩 |
+
+## 🔧 实施的优化措施
+
+### 1. PKG 内置优化选项
+- **Brotli 压缩**: 启用 `--compress Brotli` 选项
+- **公共包优化**: 使用 `--public-packages "*"` 减少重复打包
+- **公共模式**: 启用 `--public` 加速打包过程
+- **内存限制**: 设置 `--options "max-old-space-size=512"` 优化内存使用
+
+### 2. UPX 压缩集成
+- **智能检测**: 自动检测 UPX 压缩后的兼容性
+- **自动回滚**: 如果压缩后无法运行,自动恢复原文件
+- **备份机制**: 保留原始文件备份以确保安全
+- **兼容性优先**: 发现 pkg 生成的二进制文件与 UPX 存在兼容性问题
+
+## 📁 新增文件
+
+### 构建脚本
+- - 优化版构建脚本
+- 新增 npm 脚本: `npm run build:binary:optimized`
+
+### 文档
+- - UPX 压缩使用指南
+- - 本优化报告
+
+## 🚀 使用方法
+
+### 优化构建
+```bash
+# 使用优化版本构建
+npm run build:binary:optimized
+
+# 或直接运行脚本
+node build-binary-optimized.js
+```
+
+### 标准构建(对比用)
+```bash
+# 原始版本构建
+npm run build:binary
+```
+
+## ⚠️ 重要发现
+
+### UPX 兼容性问题
+经过测试发现,**pkg 生成的二进制文件与 UPX 压缩存在兼容性问题**:
+
+1. **问题现象**: UPX 压缩后的二进制文件无法正常启动
+2. **错误信息**: `Pkg: Error reading from file.`
+3. **根本原因**: pkg 使用特殊的文件格式和内部偏移量,UPX 压缩会破坏这些结构
+4. **解决方案**: 实现了智能检测和自动回滚机制
+
+### 最佳实践建议
+1. **优先使用 pkg 内置优化**: Brotli 压缩等选项安全可靠
+2. **谨慎使用 UPX**: 仅在确认兼容性后使用
+3. **保留备份**: 始终保留原始文件备份
+4. **测试验证**: 压缩后必须进行功能测试
+
+## 📈 性能影响
+
+### 文件大小
+- **原始**: 45.70 MB
+- **优化**: 38.85 MB
+- **减少**: 6.85 MB (15.0%)
+
+### 启动性能
+- **功能完整性**: ✅ 完全保持
+- **启动时间**: 📈 略有改善(文件更小)
+- **运行稳定性**: ✅ 无影响
+
+## 🔮 未来优化方向
+
+1. **前端代码分割**: 减少 JavaScript bundle 大小
+2. **依赖优化**: 移除不必要的依赖包
+3. **资源压缩**: 优化图片和静态资源
+4. **Tree Shaking**: 更精确的无用代码消除
+
+## 📞 技术支持
+
+如遇到问题,请参考:
+1. - 详细的 UPX 使用指南
+2. 构建脚本中的错误处理和日志输出
+3. 备份文件恢复机制
+
+---
+*报告生成时间: $(date)*
+*优化版本: v1.0*
\ No newline at end of file
diff --git a/dashboard/README.md b/dashboard/docs/README.md
similarity index 100%
rename from dashboard/README.md
rename to dashboard/docs/README.md
diff --git "a/dashboard/docs/T4-Action\344\272\244\344\272\222\345\212\237\350\203\275\345\274\200\345\217\221\346\214\207\345\215\227.md" "b/dashboard/docs/T4-Action\344\272\244\344\272\222\345\212\237\350\203\275\345\274\200\345\217\221\346\214\207\345\215\227.md"
new file mode 100644
index 0000000..b27a2e3
--- /dev/null
+++ "b/dashboard/docs/T4-Action\344\272\244\344\272\222\345\212\237\350\203\275\345\274\200\345\217\221\346\214\207\345\215\227.md"
@@ -0,0 +1,482 @@
+# T4 Action交互功能开发指南
+
+## 概述
+
+T4 Action交互功能是DrPlayer中用于实现用户与站源接口间动态交互的核心机制。通过返回特定格式的JSON配置,可以动态生成各种类型的输入界面、弹窗和交互组件,实现复杂的用户交互流程。
+
+## 核心概念
+
+### 1. 交互动作(Action)
+影图APP与站源接口间交互的动作指令,用户在APP主动发出动作请求,接口根据指令返回数据或返回构建信息输入窗口的配置JSON,具有连续交互的机制。
+
+### 2. 动作类型分类
+
+#### 静态动作
+- 用户通过视频分类列表主动发起交互的起点动作
+- 动作指令以分类列表的视频JSON数据为基础,属于静态数据
+- 所有交互动作的起始都是静态动作
+
+#### 动态动作
+- 静态动作构建的信息输入窗口提交action数据后,接口如果再次需要用户输入数据,可以返回新的动作配置JSON数据
+- 此数据是交互过程中动态生成的,属于动态动作
+
+### 3. 数据结构
+
+#### 视频VOD结构(静态动作入口)
+```json
+{
+ "vod_id": "动作指令结构...",
+ "vod_name": "显示名称",
+ "vod_tag": "action",
+ "vod_pic": "图片URL(可选)",
+ "vod_remarks": "备注信息(可选)"
+}
+```
+
+#### 动态动作返回结构
+```json
+{
+ "action": {
+ // 动作指令结构...
+ },
+ "toast": "Toast显示消息"
+}
+```
+
+## 动作类型详解
+
+### 1. 基础动作
+简单的动作指令字符串(非JSON结构),用户点击时无信息输入窗口,直接发送指令。
+
+**示例:**
+```json
+{
+ "vod_id": "hello world",
+ "vod_name": "基础动作",
+ "vod_tag": "action"
+}
+```
+
+### 2. 单项输入(input)
+要求用户输入一个字段的动作。
+
+**核心字段:**
+- `actionId`: 识别动作的路由ID(必须)
+- `type`: "input"
+- `id`: 输入项目id
+- `title`: 输入窗口标题
+- `tip`: 输入提示(必须)
+- `value`: 输入初始值
+- `msg`: 窗口文本说明
+- `width`: 宽度
+- `button`: 按键数量(0-无按键,1-取消,2-确定/取消,3-确定/取消/重置)
+- `selectData`: 预定义选项,格式:"1:=选项一,2:=选项二"
+- `imageUrl`: 窗口显示图片的URL
+- `imageHeight`: 图片高度
+- `imageClickCoord`: 是否检测图片的点击坐标输入
+- `qrcode`: 生成二维码的URL
+- `qrcodeSize`: 二维码的大小
+- `timeout`: 超时时间(秒)
+- `keep`: 输入确认后,窗口是否保持
+- `initAction`: 窗口弹出时自动发送的初始化动作指令
+- `initValue`: 窗口弹出时自动发送的初始化指令值
+- `cancelAction`: 按窗口的取消键时发送的取消动作指令
+- `cancelValue`: 按窗口的取消键时发送的取消动作指令值
+
+**示例:**
+```json
+{
+ "actionId": "玩偶域名",
+ "id": "domain",
+ "type": "input",
+ "width": 450,
+ "title": "玩偶域名",
+ "tip": "请输入玩偶域名",
+ "value": "",
+ "msg": "选择或输入使用的域名",
+ "selectData": "1:=https://www.wogg.net/,2:=https://wogg.xxooo.cf/"
+}
+```
+
+### 3. 多行编辑(edit)
+要求用户在一个多行编辑区输入单个字段内容的动作。
+
+**示例:**
+```json
+{
+ "actionId": "多行编辑",
+ "type": "edit",
+ "id": "alitoken",
+ "title": "阿里云盘Token",
+ "msg": "阿里云盘32位的Token",
+ "tip": "请输入阿里云盘32位的Token",
+ "value": "",
+ "width": 640,
+ "height": 400
+}
+```
+
+### 4. 多项输入(multiInput)
+要求用户输入多个字段(5个以内)的动作。建议使用"增强多项输入"。
+
+### 5. 增强多项输入(multiInputX)
+要求用户输入多个字段(不限制个数)的动作,功能最强大的输入类型。
+
+**核心字段:**
+- `type`: "multiInputX"
+- `canceledOnTouchOutside`: 弹出窗口是否允许触摸窗口外时取消窗口
+- `height`: 高度(负数表示从底部计算)
+- `bottom`: 底部对齐和底边距
+- `dimAmount`: 设置窗口背景暗化效果(0.0-1.0)
+- `input`: 输入项目定义JSON数组
+
+**输入项目字段:**
+- `id`: 项目id
+- `name`: 项目名称
+- `tip`: 项目输入提示
+- `value`: 项目初始值
+- `selectData`: 项目输入预定义选项
+ - `[folder]`: 选择文件夹
+ - `[file]`: 选择文件
+ - `[calendar]`: 选择日期
+ - `[image]`: 选择图像文件转为BASE64
+- `quickSelect`: 是否能快速选择
+- `onlyQuickSelect`: 是否只快速选择,隐藏输入框等
+- `selectWidth`: 选择窗的宽度
+- `multiSelect`: 是否多选
+- `selectColumn`: 选择窗的列数
+- `inputType`: 项目输入类型(0-只读但可通过选项输入,129-密码输入)
+- `multiLine`: 项目输入框的行数(多行编辑)
+- `validation`: 提交时项目输入值校验正则表达式
+- `help`: 项目输入的帮助说明,支持简易HTML
+
+**示例:**
+```json
+{
+ "actionId": "多项输入",
+ "type": "multiInputX",
+ "canceledOnTouchOutside": true,
+ "title": "Action多项输入(multiInputX)",
+ "width": 716,
+ "height": -300,
+ "bottom": 1,
+ "dimAmount": 0.3,
+ "button": 3,
+ "input": [
+ {
+ "id": "item1",
+ "name": "文件夹路径(文件夹选择)",
+ "tip": "请输入文件夹路径",
+ "value": "",
+ "selectData": "[folder]",
+ "inputType": 0
+ },
+ {
+ "id": "item2",
+ "name": "多项选择",
+ "tip": "请输入多项内容,以","分隔",
+ "value": "",
+ "selectData": "[请选择字母]a,b,c,d,e,f,g",
+ "selectWidth": 640,
+ "multiSelect": true,
+ "selectColumn": 4,
+ "inputType": 0
+ }
+ ]
+}
+```
+
+### 6. 单项选择(menu)
+要求用户在列表中选择一个项目的动作。
+
+**核心字段:**
+- `type`: "menu"
+- `column`: 单项选择窗口的列数
+- `option`: 选项定义JSON数组
+- `selectedIndex`: 默认选中的索引
+
+**选项格式:**
+- 对象格式:`{"name": "菜单1", "action": "menu1"}`
+- 字符串格式:`"菜单3$menu3"`
+
+**示例:**
+```json
+{
+ "actionId": "单选菜单",
+ "type": "menu",
+ "title": "Action菜单",
+ "width": 300,
+ "column": 2,
+ "option": [
+ {"name": "菜单1", "action": "menu1"},
+ {"name": "菜单2", "action": "menu2"},
+ "菜单3$menu3",
+ "菜单4$menu4"
+ ],
+ "selectedIndex": 3
+}
+```
+
+### 7. 多项选择(select)
+要求用户在列表中选择多个项目的动作。
+
+**示例:**
+```json
+{
+ "actionId": "多选菜单",
+ "type": "select",
+ "title": "Action多选菜单",
+ "width": 480,
+ "column": 2,
+ "option": [
+ {"name": "选项1", "action": "menu1", "selected": true},
+ {"name": "选项2", "action": "menu2"},
+ {"name": "选项3", "action": "menu3", "selected": true}
+ ]
+}
+```
+
+### 8. 消息弹窗(msgbox)
+弹出窗口显示消息。
+
+**核心字段:**
+- `type`: "msgbox"
+- `msg`: 文本消息内容
+- `htmlMsg`: 简单html消息内容
+- `imageUrl`: 图片URL
+
+**示例:**
+```json
+{
+ "actionId": "消息弹窗",
+ "type": "msgbox",
+ "title": "消息弹窗",
+ "htmlMsg": "这是一个支持 简单HTML语法 内容的弹窗",
+ "imageUrl": "https://pic.imgdb.cn/item/667ce9f4d9c307b7e9f9d052.webp"
+}
+```
+
+### 9. WebView(webview)
+嵌入网页视图。
+
+**示例:**
+```json
+{
+ "actionId": "WEBVIEW",
+ "type": "webview",
+ "height": -260,
+ "textZoom": 70,
+ "url": "http://127.0.0.1:9978/"
+}
+```
+
+### 10. 帮助页面(help)
+显示帮助信息。
+
+**示例:**
+```json
+{
+ "actionId": "help",
+ "type": "help",
+ "title": "使用帮助",
+ "data": {
+ "使用帮助": "暂未收录内容"
+ }
+}
+```
+
+## 专项动作
+
+专项动作为动态动作,接口让APP执行一些特定的行为动作。actionId值为行为特定的标识。
+
+### 1. 源内搜索(__self_search__)
+```json
+{
+ "actionId": "__self_search__",
+ "skey": "目标源key(可选)",
+ "name": "搜索分类名称",
+ "tid": "使用分类ID传递的搜索值",
+ "flag": "列表视图参数",
+ "folder": "查询1$搜索词$0-0-S#查询2$搜索词$3#查询3$搜索词$5"
+}
+```
+
+### 2. 详情页跳转(__detail__)
+```json
+{
+ "actionId": "__detail__",
+ "skey": "目标源key",
+ "ids": "传递给详情页的视频ids"
+}
+```
+
+### 3. KTV播放(__ktvplayer__)
+```json
+{
+ "actionId": "__ktvplayer__",
+ "name": "歌名",
+ "id": "歌曲的直链"
+}
+```
+
+### 4. 刷新列表(__refresh_list__)
+```json
+{
+ "actionId": "__refresh_list__"
+}
+```
+
+### 5. 复制到剪贴板(__copy__)
+```json
+{
+ "actionId": "__copy__",
+ "content": "复制的内容"
+}
+```
+
+### 6. 保持窗口(__keep__)
+```json
+{
+ "actionId": "__keep__",
+ "msg": "更新窗口里的文本消息内容",
+ "reset": true
+}
+```
+
+## 接口实现
+
+### action函数签名
+```javascript
+async function action(action, value) {
+ // action: 动作指令
+ // value: 动作指令值
+ // 返回: 结果消息或新的动作指令数据(动态动作)
+}
+```
+
+### 实现示例
+
+#### 1. 基础动作处理
+```javascript
+if (action == 'set-cookie') {
+ return JSON.stringify({
+ action: {
+ actionId: 'quarkCookieConfig',
+ id: 'cookie',
+ type: 'input',
+ title: '夸克Cookie',
+ tip: '请输入夸克的Cookie',
+ value: '原值',
+ msg: '此弹窗是动态设置的参数,可用于动态返回原设置值等场景'
+ }
+ });
+}
+```
+
+#### 2. 输入数据处理
+```javascript
+if (action == 'quarkCookieConfig' && value) {
+ try {
+ const obj = JSON.parse(value);
+ const val = obj.cookie;
+ return "我收到了:" + value;
+ } catch (e) {
+ return '发生错误:' + e;
+ }
+}
+```
+
+#### 3. 连续对话处理
+```javascript
+if (action == '连续对话') {
+ let content = JSON.parse(value);
+ if (content.talk.indexOf('http') == 0) {
+ return JSON.stringify({
+ action: {
+ actionId: '__detail__',
+ skey: 'push_agent',
+ ids: content.talk,
+ },
+ toast: '你要去看视频了'
+ });
+ }
+ return JSON.stringify({
+ action: {
+ actionId: '__keep__',
+ msg: '回音:' + content.talk,
+ reset: true
+ },
+ toast: '你有新的消息'
+ });
+}
+```
+
+#### 4. 扫码功能实现
+```javascript
+if (action == '夸克扫码') {
+ if (rule.quarkScanCheck) {
+ return '请等待上个扫码任务完成';
+ }
+
+ let requestId = generateUUID();
+ // 获取扫码token的API调用...
+
+ return JSON.stringify({
+ action: {
+ actionId: 'quarkScanCookie',
+ id: 'quarkScanCookie',
+ canceledOnTouchOutside: false,
+ type: 'input',
+ title: '夸克扫码Cookie',
+ msg: '请使用夸克APP扫码登录获取',
+ width: 500,
+ button: 1,
+ timeout: 20,
+ qrcode: qrcodeUrl,
+ qrcodeSize: '400',
+ initAction: 'quarkScanCheck',
+ initValue: requestId,
+ cancelAction: 'quarkScanCancel',
+ cancelValue: requestId,
+ }
+ });
+}
+```
+
+## 开发注意事项
+
+### 1. 数据格式
+- 所有JSON动作都需要使用`JSON.stringify()`转换为字符串
+- 动态动作返回时需要包装在`action`字段中
+- 可选择性添加`toast`字段显示提示消息
+
+### 2. 错误处理
+- 使用try-catch处理JSON解析错误
+- 提供友好的错误提示信息
+- 考虑超时和取消操作的处理
+
+### 3. 状态管理
+- 对于需要状态的操作(如扫码),使用全局变量管理状态
+- 及时清理状态,避免内存泄漏
+- 处理并发操作的冲突
+
+### 4. 用户体验
+- 合理设置窗口大小和位置
+- 提供清晰的提示信息和帮助文档
+- 支持取消操作和超时处理
+- 使用适当的图标和图片增强视觉效果
+
+### 5. 安全考虑
+- 验证用户输入数据
+- 使用正则表达式验证格式
+- 避免执行不安全的操作
+
+## 最佳实践
+
+1. **模块化设计**:将不同类型的动作处理分离到不同的函数中
+2. **配置驱动**:使用配置文件管理常用的选项和参数
+3. **错误恢复**:提供重试机制和错误恢复选项
+4. **性能优化**:避免在动作处理中执行耗时操作
+5. **文档完善**:为每个动作提供清晰的使用说明
+
+通过以上指南,开发者可以充分利用T4 Action交互功能,创建丰富的用户交互体验。
\ No newline at end of file
diff --git a/dashboard/docs/UPX_COMPRESSION_GUIDE.md b/dashboard/docs/UPX_COMPRESSION_GUIDE.md
new file mode 100644
index 0000000..a7a5854
--- /dev/null
+++ b/dashboard/docs/UPX_COMPRESSION_GUIDE.md
@@ -0,0 +1,188 @@
+# UPX压缩优化指南
+
+## 概述
+
+UPX (Ultimate Packer for eXecutables) 是一个高性能的可执行文件压缩工具,可以将pkg生成的二进制文件体积减少50%-70%。
+
+## 当前优化效果
+
+- **原始pkg打包**: ~45.70 MB
+- **pkg优化选项**: 预计减少10-20%
+- **UPX压缩**: 预计额外减少50-70%
+- **最终预期大小**: ~10-20 MB
+
+## UPX安装
+
+### Windows
+
+1. **下载UPX**
+ - 访问 https://upx.github.io/
+ - 下载最新版本的Windows版本
+ - 解压到任意目录(如 `C:\tools\upx`)
+
+2. **添加到PATH环境变量**
+ ```cmd
+ # 方法1: 通过系统设置
+ # 控制面板 > 系统 > 高级系统设置 > 环境变量
+ # 在PATH中添加UPX解压目录
+
+ # 方法2: 通过PowerShell临时添加
+ $env:PATH += ";C:\tools\upx"
+ ```
+
+3. **验证安装**
+ ```cmd
+ upx --version
+ ```
+
+### 使用Chocolatey安装(推荐)
+
+```powershell
+# 安装Chocolatey(如果未安装)
+Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
+
+# 安装UPX
+choco install upx
+```
+
+### 使用Scoop安装
+
+```powershell
+# 安装Scoop(如果未安装)
+iwr -useb get.scoop.sh | iex
+
+# 安装UPX
+scoop install upx
+```
+
+## 使用方法
+
+### 1. 基础优化构建
+
+```bash
+# 使用pkg内置优化选项
+pnpm build:binary:optimized
+```
+
+### 2. 手动UPX压缩
+
+```bash
+# 先进行常规构建
+pnpm build:binary
+
+# 然后手动压缩
+upx --best dist-binary/drplayer-server-win.exe
+```
+
+### 3. 不同压缩级别
+
+```bash
+# 快速压缩(压缩率较低,速度快)
+upx --fast dist-binary/drplayer-server-win.exe
+
+# 更好的压缩(平衡压缩率和速度)
+upx --better dist-binary/drplayer-server-win.exe
+
+# 最佳压缩(压缩率最高,速度慢)
+upx --best dist-binary/drplayer-server-win.exe
+
+# 极限压缩(尝试所有方法,非常慢)
+upx --best --ultra-brute dist-binary/drplayer-server-win.exe
+```
+
+## PKG优化选项说明
+
+### 1. 压缩选项
+- `--compress Brotli`: 使用Brotli算法压缩文件存储
+- `--compress GZip`: 使用GZip算法压缩(兼容性更好)
+
+### 2. 公共包选项
+- `--public-packages "*"`: 将所有包标记为公共,减少重复代码
+- `--public`: 加速打包并公开顶级项目源码
+
+### 3. 字节码选项
+- `--no-bytecode`: 跳过字节码生成,包含源文件作为纯JS
+- 优点:减少体积,加快打包速度
+- 缺点:源码可见(如果这是问题的话)
+
+### 4. Node.js选项
+- `--options "max-old-space-size=512"`: 限制内存使用
+- `--options "expose-gc"`: 暴露垃圾回收接口
+
+## 性能影响
+
+### UPX压缩的影响
+- **启动时间**: 增加200-400ms(解压缩时间)
+- **运行时性能**: 无影响(解压后在内存中运行)
+- **内存使用**: 无额外开销
+
+### 优化建议
+1. **开发环境**: 使用常规构建(快速)
+2. **测试环境**: 使用pkg优化选项
+3. **生产环境**: 使用完整优化(pkg + UPX)
+
+## 故障排除
+
+### UPX压缩失败
+```bash
+# 如果UPX压缩失败,可能的原因:
+# 1. 文件被杀毒软件锁定
+# 2. 文件正在使用中
+# 3. 文件格式不支持
+
+# 解决方案:
+# 1. 临时关闭杀毒软件
+# 2. 确保没有运行该程序
+# 3. 使用 --force 选项强制压缩
+upx --best --force dist-binary/drplayer-server-win.exe
+```
+
+### 压缩后程序无法运行
+```bash
+# 如果压缩后程序无法运行:
+# 1. 尝试解压缩
+upx -d dist-binary/drplayer-server-win.exe
+
+# 2. 使用较低的压缩级别
+upx --fast dist-binary/drplayer-server-win.exe
+
+# 3. 检查是否与杀毒软件冲突
+```
+
+## 自动化脚本配置
+
+在 `build-binary-optimized.js` 中可以调整以下配置:
+
+```javascript
+const config = {
+ pkg: {
+ compress: 'Brotli', // 'Brotli' | 'GZip' | null
+ publicPackages: '*', // '*' | 'package1,package2' | null
+ noBytecode: true, // true | false
+ options: 'max-old-space-size=512' // Node.js选项
+ },
+ upx: {
+ enabled: true, // 是否启用UPX压缩
+ level: 'best', // 'fast' | 'better' | 'best'
+ backup: true // 是否保留原始文件备份
+ }
+};
+```
+
+## 最佳实践
+
+1. **渐进式优化**: 先应用pkg优化,再考虑UPX
+2. **测试兼容性**: 在目标环境中测试压缩后的程序
+3. **备份原文件**: 始终保留未压缩的版本作为备份
+4. **监控性能**: 测量启动时间影响是否可接受
+5. **CI/CD集成**: 在构建流水线中自动化压缩过程
+
+## 预期效果
+
+| 优化方案 | 文件大小 | 压缩率 | 启动时间影响 |
+|---------|---------|--------|-------------|
+| 原始pkg | 45.70 MB | - | 基准 |
+| pkg优化 | ~36-40 MB | 10-20% | 无 |
+| pkg+UPX | ~10-20 MB | 50-70% | +200-400ms |
+
+通过这些优化,你的二进制文件大小可以从45MB+减少到10-20MB,大幅降低分发成本和下载时间。
\ No newline at end of file
diff --git a/dashboard/docs/apidoc.md b/dashboard/docs/apidoc.md
new file mode 100644
index 0000000..809fef7
--- /dev/null
+++ b/dashboard/docs/apidoc.md
@@ -0,0 +1,194 @@
+# drpyS接口文档
+
+本文档基于 Fastify 实现整理,适合国内开发人员快速对接。
+
+## 1. 接口概览
+
+| 接口名称 | 请求方式 | 地址示例 |
+|------------|------------|--------------------|
+| 模块数据接口(T4) | GET / POST | `/api/:module` |
+| 模块代理接口 | GET | `/proxy/:module/*` |
+| 解析接口 | GET | `/parse/:jx` |
+
+---
+
+## 2. 接口详情
+
+### 2.1 模块数据接口(T4)
+
+- **URL**:`/api/:module`
+- **请求方式**:`GET` / `POST`
+- **鉴权**:需要 `validatePwd` 验证(通过请求参数如?pwd=dzyyds)
+- **Content-Type**:
+ - `application/json`
+ - `application/x-www-form-urlencoded`
+
+#### 路径参数
+
+| 参数名 | 类型 | 必填 | 说明 |
+|--------|--------|----|-----------------------|
+| module | string | 是 | 自定义源文件名称,例如 `腾云驾雾[官]` |
+
+#### 请求参数(query 或 body)
+
+以下参数根据业务逻辑不同,**只需传递需要的字段**:
+
+| 参数名 | 类型 | 说明 |
+|---------|--------|----------------------------------------|
+| play | string | 播放链接标识 |
+| flag | string | 播放标志(配合 `play` 使用) |
+| ac | string | 动作类型,可配合 `t`、`ids`、`action` 等字段 |
+| t | string | 分类 ID(配合 `ac` 使用) |
+| ids | string | 详情 ID(逗号分隔) |
+| action | string | 执行动作名称 |
+| value | string | 执行动作值 |
+| wd | string | 搜索关键字 |
+| quick | number | 搜索模式(0 普通,1 快速) |
+| refresh | any | 强制刷新初始化 |
+| filter | number | 是否开启筛选(默认 1) |
+| pg | number | 页码,默认 1 |
+| ext | string | Base64 编码的 JSON 筛选参数 |
+| extend | string | 扩展参数(直接字符串,根据/config路由对应sites的ext属性传递) |
+| do | string | 自定义源适配器,默认ds,可不传 |
+
+#### 功能分支
+
+接口会根据传参进入不同逻辑:
+
+1. **播放**:`play` 存在 → 调用 `play` 方法
+2. **分类**:`ac`、`t` 存在 → 调用 `cate` (ac=list)
+3. **详情**:`ac`、`ids` 存在 → 调用 `detail` (ac=detail)
+4. **动作**:`ac`、`action` 存在 → 调用 `action` (ac=action)
+5. **搜索**:`wd` 存在 → 调用 `search`
+6. **刷新**:`refresh` 存在 → 调用 `init`
+7. **默认**:返回 `home` + `homeVod` 数据
+
+#### 返回示例
+
+```json
+{
+ "type": "影视",
+ "class": [
+ {
+ "type_id": "1",
+ "type_name": "电影"
+ },
+ {
+ "type_id": "2",
+ "type_name": "电视剧"
+ }
+ ],
+ "filters": {},
+ "list": [
+ {
+ "vod_id": "123",
+ "vod_name": "示例视频",
+ "vod_pic": "http://example.com/img.jpg",
+ "vod_remarks": "更新至第1集"
+ }
+ ]
+}
+```
+
+[更多T4接口说明参考](./t4api.md)
+
+---
+
+### 2.2 模块代理接口
+
+- **URL**:`/proxy/:module/*`
+- **请求方式**:`GET`
+- **功能**:转发/代理模块相关资源(可处理 Range 请求,支持流媒体)
+- **路径参数**:
+ | 参数名 | 类型 | 必填 | 说明 |
+ | ------- | ------ | ---- | ---- |
+ | module | string | 是 | 模块名称 |
+ | * | string | 是 | 代理的目标路径 |
+
+- **查询参数**:与 `/api/:module` 相似,额外支持 `extend`
+- **返回值**:
+ - 可能是二进制文件(图片、视频等)
+ - 可能是 JSON / 文本
+ - 可能 302 重定向到 `/mediaProxy` 流代理地址
+
+#### 返回示例(JSON)
+
+```json
+{
+ "code": 200,
+ "msg": "成功",
+ "data": "内容"
+}
+```
+
+---
+
+### 2.3 解析接口
+
+- **URL**:`/parse/:jx`
+- **请求方式**:`GET`
+- **功能**:调用解析脚本解析传入链接(支持跳转、JSON 输出)
+- **路径参数**:
+ | 参数名 | 类型 | 必填 | 说明 |
+ | ------ | ------ | ---- | ---- |
+ | jx | string | 是 | 解析脚本名称(对应 `.js` 文件) |
+
+- **查询参数**:
+ | 参数名 | 类型 | 必填 | 说明 |
+ | ------ | ------ | ---- | ---- |
+ | url | string | 是 | 待解析的链接 |
+ | extend | string | 否 | 扩展参数 |
+
+- **返回值**:
+ - `code`:200 成功,404 失败
+ - `msg`:提示信息
+ - `url`:解析后的地址
+ - `cost`:解析耗时(毫秒)
+
+#### 返回示例(成功)
+
+```json
+{
+ "code": 200,
+ "url": "http://example.com/play.m3u8",
+ "msg": "jx1解析成功",
+ "cost": 123
+}
+```
+
+#### 返回示例(失败)
+
+```json
+{
+ "code": 404,
+ "url": "http://example.com",
+ "msg": "jx1解析失败",
+ "cost": 120
+}
+```
+
+---
+
+## 3. 错误返回格式
+
+```json
+{
+ "error": "错误描述信息"
+}
+```
+
+- 常见错误:
+ - `Module xxx not found`:模块不存在
+ - `解析 xxx not found`:解析脚本不存在
+ - `Failed to process module`:模块执行出错
+ - `Failed to proxy module`:代理执行出错
+
+---
+
+## 4. 开发注意事项
+
+1. 所有模块和解析脚本必须存在于 `jsDir` / `jxDir` 对应目录下。
+2. 访问 `/api/:module` 接口时需通过 `validatePwd` 验证。
+3. `ext` 参数必须是 **Base64 编码的 JSON 字符串**,否则会报“筛选参数错误”。
+4. 流媒体内容可能会通过 `/mediaProxy` 重定向处理。
+5. 建议在请求时加上 `pg` 参数避免默认第一页。
diff --git a/dashboard/docs/mpv-protocol.reg b/dashboard/docs/mpv-protocol.reg
new file mode 100644
index 0000000..9f50a4d
--- /dev/null
+++ b/dashboard/docs/mpv-protocol.reg
@@ -0,0 +1,12 @@
+Windows Registry Editor Version 5.00
+
+[HKEY_CLASSES_ROOT\mpv]
+@="URL:MPV Protocol"
+"URL Protocol"=""
+
+[HKEY_CLASSES_ROOT\mpv\shell]
+
+[HKEY_CLASSES_ROOT\mpv\shell\open]
+
+[HKEY_CLASSES_ROOT\mpv\shell\open\command]
+@="\"C:\\Program Files\\mpv\\mpv.exe\" \"%1\""
\ No newline at end of file
diff --git a/dashboard/docs/nginx-root.conf b/dashboard/docs/nginx-root.conf
new file mode 100644
index 0000000..38c6beb
--- /dev/null
+++ b/dashboard/docs/nginx-root.conf
@@ -0,0 +1,97 @@
+# Nginx配置文件 - 根目录部署
+# 适用于将DrPlayer部署在域名根目录的情况
+# 例如: https://example.com/
+
+server {
+ listen 80;
+ server_name localhost; # 请替换为您的域名
+
+ # 网站根目录,指向Vue构建后的dist目录
+ root /var/www/html/drplayer; # 请替换为您的实际路径
+ index index.html;
+
+ # 启用gzip压缩
+ gzip on;
+ gzip_vary on;
+ gzip_min_length 1024;
+ gzip_proxied any;
+ gzip_comp_level 6;
+ gzip_types
+ text/plain
+ text/css
+ text/xml
+ text/javascript
+ application/json
+ application/javascript
+ application/xml+rss
+ application/atom+xml
+ image/svg+xml;
+
+ # 静态资源缓存配置
+ location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
+ expires 1y;
+ add_header Cache-Control "public, immutable";
+ access_log off;
+ }
+
+ # API代理配置(如果需要)
+ # location /api/ {
+ # proxy_pass http://backend-server;
+ # proxy_set_header Host $host;
+ # proxy_set_header X-Real-IP $remote_addr;
+ # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ # proxy_set_header X-Forwarded-Proto $scheme;
+ # }
+
+ # Vue Router History模式支持
+ # 所有不匹配静态文件的请求都返回index.html
+ location / {
+ try_files $uri $uri/ /index.html;
+
+ # 安全头设置
+ add_header X-Frame-Options "SAMEORIGIN" always;
+ add_header X-Content-Type-Options "nosniff" always;
+ add_header X-XSS-Protection "1; mode=block" always;
+ add_header Referrer-Policy "strict-origin-when-cross-origin" always;
+ }
+
+ # 禁止访问隐藏文件
+ location ~ /\. {
+ deny all;
+ access_log off;
+ log_not_found off;
+ }
+
+ # 禁止访问备份文件
+ location ~ ~$ {
+ deny all;
+ access_log off;
+ log_not_found off;
+ }
+
+ # 错误页面
+ error_page 404 /index.html;
+ error_page 500 502 503 504 /index.html;
+}
+
+# HTTPS配置示例(可选)
+# server {
+# listen 443 ssl http2;
+# server_name localhost; # 请替换为您的域名
+#
+# ssl_certificate /path/to/your/certificate.crt;
+# ssl_certificate_key /path/to/your/private.key;
+#
+# # SSL配置
+# ssl_protocols TLSv1.2 TLSv1.3;
+# ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384;
+# ssl_prefer_server_ciphers off;
+#
+# # 其他配置与HTTP相同
+# root /var/www/html/drplayer;
+# index index.html;
+#
+# location / {
+# try_files $uri $uri/ /index.html;
+# }
+# }
\ No newline at end of file
diff --git a/dashboard/docs/nginx-subdir.conf b/dashboard/docs/nginx-subdir.conf
new file mode 100644
index 0000000..ed85d8c
--- /dev/null
+++ b/dashboard/docs/nginx-subdir.conf
@@ -0,0 +1,115 @@
+# Nginx配置文件 - 子目录部署
+# 适用于将DrPlayer部署在域名子目录的情况
+# 例如: https://example.com/apps/drplayer/
+
+server {
+ listen 80;
+ server_name localhost; # 请替换为您的域名
+
+ # 网站根目录
+ root /var/www/html;
+ index index.html;
+
+ # 启用gzip压缩
+ gzip on;
+ gzip_vary on;
+ gzip_min_length 1024;
+ gzip_proxied any;
+ gzip_comp_level 6;
+ gzip_types
+ text/plain
+ text/css
+ text/xml
+ text/javascript
+ application/json
+ application/javascript
+ application/xml+rss
+ application/atom+xml
+ image/svg+xml;
+
+ # DrPlayer应用配置 - 子目录部署
+ location /apps/drplayer/ {
+ alias /var/www/html/drplayer/; # 请替换为您的实际路径
+
+ # 静态资源缓存配置
+ location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
+ expires 1y;
+ add_header Cache-Control "public, immutable";
+ access_log off;
+ }
+
+ # Vue Router History模式支持
+ # 所有不匹配静态文件的请求都返回index.html
+ try_files $uri $uri/ /apps/drplayer/index.html;
+
+ # 安全头设置
+ add_header X-Frame-Options "SAMEORIGIN" always;
+ add_header X-Content-Type-Options "nosniff" always;
+ add_header X-XSS-Protection "1; mode=block" always;
+ add_header Referrer-Policy "strict-origin-when-cross-origin" always;
+ }
+
+ # 处理DrPlayer的根路径访问
+ location = /apps/drplayer {
+ return 301 /apps/drplayer/;
+ }
+
+ # API代理配置(如果需要)
+ # location /apps/drplayer/api/ {
+ # proxy_pass http://backend-server/api/;
+ # proxy_set_header Host $host;
+ # proxy_set_header X-Real-IP $remote_addr;
+ # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ # proxy_set_header X-Forwarded-Proto $scheme;
+ # }
+
+ # 其他应用或默认站点配置
+ location / {
+ try_files $uri $uri/ =404;
+ }
+
+ # 禁止访问隐藏文件
+ location ~ /\. {
+ deny all;
+ access_log off;
+ log_not_found off;
+ }
+
+ # 禁止访问备份文件
+ location ~ ~$ {
+ deny all;
+ access_log off;
+ log_not_found off;
+ }
+
+ # 错误页面
+ error_page 404 /404.html;
+ error_page 500 502 503 504 /50x.html;
+}
+
+# HTTPS配置示例(可选)
+# server {
+# listen 443 ssl http2;
+# server_name localhost; # 请替换为您的域名
+#
+# ssl_certificate /path/to/your/certificate.crt;
+# ssl_certificate_key /path/to/your/private.key;
+#
+# # SSL配置
+# ssl_protocols TLSv1.2 TLSv1.3;
+# ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384;
+# ssl_prefer_server_ciphers off;
+#
+# # 其他配置与HTTP相同
+# root /var/www/html;
+# index index.html;
+#
+# location /apps/drplayer/ {
+# alias /var/www/html/drplayer/;
+# try_files $uri $uri/ /apps/drplayer/index.html;
+# }
+#
+# location = /apps/drplayer {
+# return 301 /apps/drplayer/;
+# }
+# }
\ No newline at end of file
diff --git "a/dashboard/docs/pvideo\346\216\245\345\217\243\350\257\264\346\230\216.md" "b/dashboard/docs/pvideo\346\216\245\345\217\243\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..ee716d4
--- /dev/null
+++ "b/dashboard/docs/pvideo\346\216\245\345\217\243\350\257\264\346\230\216.md"
@@ -0,0 +1,187 @@
+# MediaTool 参数说明和示例
+
+## 1. 命令行支持的参数
+
+### 可通过命令行传递的参数
+
+| 参数 | 命令行标志 | 默认值 | 说明 | 示例 |
+|------|------------|--------|------|------|
+| config | `-config` | `"config.json"` | 配置文件路径 | `./pvideo -config myconfig.json` |
+| port | `-port` | `"2525"` | 服务器端口 | `./pvideo -port 8080` |
+| site | `-site` | `""` | 反代域名 | `./pvideo -site https://mydomain.com` |
+| proxy | `-proxy` | `""` | 代理地址 | `./pvideo -proxy socks5://127.0.0.1:1080` |
+| debug | `-debug` | `false` | 调试模式 | `./pvideo -debug` |
+| dns | `-dns` | `""` | DNS服务器 | `./pvideo -dns 8.8.8.8` |
+
+### 只能通过配置文件设置的参数
+
+| 参数 | 类型 | 默认值 | 说明 |
+|------|------|--------|------|
+| localUrl | string | `""` | 本地服务URL,用于生成代理链接 |
+| connect | int64 | `32` | 最大并发连接数 |
+| ssl | object | `null` | SSL证书配置(cert, key) |
+
+### 命令行使用示例
+
+```bash
+# 基本启动
+./pvideo
+
+# 指定端口和调试模式
+./pvideo -port 8080 -debug
+
+# 使用SOCKS5代理
+./pvideo -proxy socks5://127.0.0.1:1080 -dns 8.8.8.8
+
+# 完整参数示例
+./pvideo -config config.json -port 7777 -site https://mydomain.com -proxy http://proxy.example.com:8080 -debug -dns 8.8.8.8
+```
+
+## 2. 多线程代理参数和示例
+
+### 多线程代理支持的URL参数
+
+| 参数 | 必需 | 说明 | 示例值 |
+|------|------|------|--------|
+| url | ✅ | 目标文件URL | `https://example.com/video.mp4` |
+| form | ❌ | 编码格式 | `base64`(URL和header使用base64编码) |
+| header | ❌ | 自定义请求头 | JSON格式的请求头 |
+| thread | ❌ | 线程数 | `4`(默认根据文件大小自动计算) |
+| size | ❌ | 分块大小 | `128K`(默认), `256K`, `1M`, `2M`, `512B`, `1024` |
+| limit | ❌ | 限制条件 | `30S`(时间限制), `100C`(次数限制) |
+| single | ❌ | 单线程模式 | `true`, `false` |
+| mark | ❌ | 缓存标记 | 自定义缓存标识 |
+
+### 多线程代理使用示例(也可以不需要带proxy路径:http://localhost:7777?url=https://example.com/video.mp4)
+
+#### 基本用法
+```
+http://localhost:7777/proxy?url=https://example.com/video.mp4
+```
+
+#### 自定义线程数和分块大小
+```
+http://localhost:7777/proxy?url=https://example.com/video.mp4&thread=8&size=256K
+```
+
+#### 使用自定义请求头
+```
+http://localhost:7777/proxy?url=https://example.com/video.mp4&header={"User-Agent":"Custom-Agent","Referer":"https://example.com"}
+```
+
+#### 使用base64编码(避免URL编码问题)
+```
+http://localhost:7777/proxy?url=aHR0cHM6Ly9leGFtcGxlLmNvbS92aWRlby5tcDQ=&form=base64&header=eyJVc2VyLUFnZW50IjoiQ3VzdG9tLUFnZW50In0=
+```
+
+#### 设置时间限制(30秒后重新获取真实URL)
+```
+http://localhost:7777/proxy?url=https://example.com/video.mp4&limit=30S
+```
+
+#### 设置次数限制(100次请求后重新获取真实URL)
+```
+http://localhost:7777/proxy?url=https://example.com/video.mp4&limit=100C
+```
+
+#### 单线程模式(适用于例如网页请求)
+```
+http://localhost:7777/proxy?single=true&url=https://example.com/small-file.jpg
+```
+
+#### 使用缓存标记(mark参数)
+```
+# 任务1:普通下载
+http://localhost:7777/proxy?url=https://example.com/video.mp4&mark=normal_download
+
+# 任务2:带认证的下载(相同URL,不同处理方式)
+http://localhost:7777/proxy?url=https://example.com/video.mp4&mark=auth_download&header={"Authorization":"Bearer token123"}
+
+# 任务3:移动端下载(相同URL,不同User-Agent)
+http://localhost:7777/proxy?url=https://example.com/video.mp4&mark=mobile_download&header={"User-Agent":"Mobile-App/1.0"}
+```
+
+### 缓存标记(mark)说明
+
+`mark` 参数是一个**缓存标识符**,用于区分和管理不同的下载任务:
+
+**主要作用**:
+1. **缓存隔离**: 相同URL的不同任务使用独立缓存
+2. **连接复用**: 相同mark的请求复用HTTP连接
+3. **任务标识**: 便于调试和日志追踪
+
+**使用场景**:
+
+#### 场景1: 相同文件的不同下载方式
+```
+# 高清版本
+http://localhost:7777/proxy?url=https://cdn.example.com/video.mp4&mark=hd_version&size=1M
+
+# 标清版本(相同URL,不同处理参数)
+http://localhost:7777/proxy?url=https://cdn.example.com/video.mp4&mark=sd_version&size=256K
+```
+
+#### 场景2: 不同用户的相同资源
+```
+# 用户A下载
+http://localhost:7777/proxy?url=https://example.com/file.zip&mark=user_a&header={"Cookie":"session=abc123"}
+
+# 用户B下载
+http://localhost:7777/proxy?url=https://example.com/file.zip&mark=user_b&header={"Cookie":"session=def456"}
+```
+
+#### 场景3: 不同平台的相同内容
+```
+# PC端下载
+http://localhost:7777/proxy?url=https://example.com/app.apk&mark=pc_client
+
+# 移动端下载
+http://localhost:7777/proxy?url=https://example.com/app.apk&mark=mobile_client
+```
+
+**默认行为**:
+- 如果不指定 `mark` 参数,系统会使用完整的 `url` 作为缓存标记
+- 建议在有多种下载需求时主动设置 `mark` 参数
+
+
+
+## 3. M3U8参数和示例
+
+### M3U8支持的URL参数
+
+| 参数 | 必需 | 说明 | 示例值 |
+|------|------|------|--------|
+| url | ✅ | M3U8播放列表URL | `https://example.com/playlist.m3u8` |
+| form | ❌ | 编码格式 | `base64`(URL和header使用base64编码) |
+| header | ❌ | 自定义请求头 | JSON格式的请求头 |
+| type | ❌ | 文件类型标识 | `m3u8` |
+
+### M3U8使用示例
+
+#### 基本用法
+```
+http://localhost:7777/m3u8?url=https://example.com/playlist.m3u8
+```
+
+#### 使用自定义请求头
+```
+http://localhost:7777/m3u8?url=https://example.com/playlist.m3u8&header={"User-Agent":"Mozilla/5.0","Referer":"https://example.com"}
+```
+
+#### 使用base64编码
+```
+http://localhost:7777/m3u8?url=aHR0cHM6Ly9leGFtcGxlLmNvbS9wbGF5bGlzdC5tM3U4&form=base64&header=eyJVc2VyLUFnZW50IjoiTW96aWxsYS81LjAifQ==
+```
+
+#### 指定类型标识
+```
+http://localhost:7777/m3u8?url=https://example.com/playlist.m3u8&type=m3u8
+```
+
+### M3U8处理说明
+
+1. **自动转换**: M3U8文件中的相对路径会自动转换为完整URL
+2. **代理重写**: 所有媒体文件URL会被重写为通过本地代理访问
+3. **嵌套支持**: 支持嵌套的M3U8文件(主播放列表包含子播放列表)
+4. **加密支持**: 支持AES加密的M3U8流,密钥URL也会被代理
+5. **Base64编码**: 当使用`form=base64`时,输出的代理URL也会使用base64编码
diff --git a/dashboard/docs/t4api.md b/dashboard/docs/t4api.md
new file mode 100644
index 0000000..b0684ab
--- /dev/null
+++ b/dashboard/docs/t4api.md
@@ -0,0 +1,310 @@
+# T4服务接口对接文档
+
+## 概述
+
+本文档描述了基于 `/api/:module` 路径的接口服务。该服务根据不同的参数组合调用不同的功能模块,包括播放、分类、详情、动作、搜索、刷新和默认首页数据。所有接口均支持GET和POST请求方式。
+
+## 通用说明
+
+- **请求方式**:GET 或 POST
+- **基础路径**:`/api/:module`,其中 `:module` 为模块名称(如 `vod1`)
+- **参数传递**:
+ - GET请求:参数通过URL的query string传递
+ - POST请求:参数可通过`application/x-www-form-urlencoded`或`application/json`格式传递
+- **安全验证**:所有接口请求都会经过`validatePwd`中间件验证(具体验证逻辑由实现方决定)
+- **错误响应**:
+ ```json
+ {
+ "error": "错误信息"
+ }
+ ```
+- **通用传参**: 若这个接口需要extend传参,确保每个地方调用都在各自的请求参数基础上加上原本的extend传参
+
+## 接口列表
+
+### 1. 播放接口
+
+**功能说明**:根据播放ID和源标识获取视频播放地址及信息。
+
+#### 请求参数
+
+| 参数名 | 必填 | 类型 | 说明 |
+|------|----|--------|--------------------------|
+| play | 是 | string | 播放ID |
+| flag | 否 | string | 源标识,详情接口返回播放信息里有,播放时建议加上 |
+
+#### 请求示例
+
+```http
+GET /api/vod1?play=123&flag=youku
+```
+
+或
+
+```http
+POST /api/vod1
+Content-Type: application/x-www-form-urlencoded
+play=123&flag=youku
+```
+
+#### 响应示例
+
+```json
+{
+ "url": "https://example.com/video.mp4",
+ "type": "hls",
+ "headers": {
+ "Referer": "https://example.com"
+ }
+}
+```
+
+### 2. 分类接口
+
+**功能说明**:获取指定分类下的视频列表,支持分页和筛选条件。
+
+#### 请求参数
+
+| 参数名 | 必填 | 类型 | 说明 |
+|-----|----|---------|-------------------------------|
+| ac | 是 | string | 固定值为 `list`(实际参数中需存在`ac`和`t`) |
+| t | 是 | string | 分类ID |
+| pg | 否 | integer | 页码,默认1 |
+| ext | 否 | string | 筛选条件(base64编码的JSON字符串) |
+
+#### 请求示例
+
+```http
+GET /api/vod1?ac=cate&t=1&pg=2&ext=eyJuYW1lIjoi5paw5qW8In0=
+```
+
+#### 响应示例
+
+```json
+{
+ "page": 2,
+ "pagecount": 10,
+ "list": [
+ {
+ "vod_id": "101",
+ "vod_name": "电影名称",
+ "vod_pic": "https://example.com/pic.jpg"
+ }
+ ]
+}
+```
+
+### 3. 详情接口
+
+**功能说明**:获取一个或多个视频的详细信息。
+
+#### 请求参数
+
+| 参数名 | 必填 | 类型 | 说明 |
+|-----|----|--------|-----------------------------------|
+| ac | 是 | string | 固定值为 `detail`(实际参数中需存在`ac`和`ids`) |
+| ids | 是 | string | 视频ID,多个用逗号分隔 |
+
+#### 请求示例
+
+```http
+GET /api/vod1?ac=detail&ids=101,102
+```
+
+或
+
+```http
+POST /api/vod1
+Content-Type: application/json
+{
+ "ac": "detail",
+ "ids": "101,102"
+}
+```
+
+#### 响应示例
+
+```json
+[
+ {
+ "vod_id": "101",
+ "vod_name": "电影名称",
+ "vod_actor": "主演",
+ "vod_content": "剧情简介",
+ "vod_play_url": "播放地址"
+ }
+]
+```
+
+### 4. 动作接口
+
+**功能说明**:执行特定动作(如收藏、点赞等)。
+
+#### 请求参数
+
+| 参数名 | 必填 | 类型 | 说明 |
+|--------|----|--------|--------------------------------------|
+| ac | 是 | string | 固定值为 `action`(实际参数中需存在`ac`和`action`) |
+| action | 是 | string | 动作类型(如 `like`, `collect`) |
+| value | 是 | string | 动作值(如 `1` 表示执行) |
+
+#### 请求示例
+
+```http
+GET /api/vod1?ac=action&action=like&value=1
+```
+
+#### 响应示例
+
+```json
+{
+ "code": 200,
+ "msg": "操作成功"
+}
+```
+
+[交互UI说明参考此处](./ruleAttr.md)
+
+### 5. 搜索接口
+
+**功能说明**:根据关键词搜索视频,支持快速搜索和分页。
+
+#### 请求参数
+
+| 参数名 | 必填 | 类型 | 说明 |
+|-------|----|---------|-----------------|
+| wd | 是 | string | 搜索关键词 |
+| quick | 否 | integer | 快速搜索模式(0或1,默认0) |
+| pg | 否 | integer | 页码,默认1 |
+
+#### 请求示例
+
+```http
+GET /api/vod1?wd=电影&quick=1&pg=1
+```
+
+#### 响应示例
+
+```json
+{
+ "list": [
+ {
+ "vod_id": "201",
+ "vod_name": "搜索到的电影",
+ "vod_remarks": "6.5分"
+ }
+ ],
+ "total": 50
+}
+```
+
+### 6. 刷新接口
+
+**功能说明**:强制刷新模块的初始化数据。
+
+#### 请求参数
+
+| 参数名 | 必填 | 类型 | 说明 |
+|---------|----|--------|-----------|
+| refresh | 是 | string | 任意值(存在即可) |
+
+#### 请求示例
+
+```http
+GET /api/vod1?refresh=1
+```
+
+#### 响应示例
+
+```json
+{
+ "code": 200,
+ "msg": "刷新成功",
+ "data": {
+ "lastUpdate": "2023-08-01 12:00:00"
+ }
+}
+```
+
+### 7. 默认首页接口
+
+**功能说明**:获取模块的首页数据(包括home和homeVod数据)。当没有匹配到上述任何功能时,调用此接口。
+
+#### 请求参数
+
+| 参数名 | 必填 | 类型 | 说明 |
+|--------|----|---------|------------------|
+| filter | 否 | integer | 过滤条件(1表示启用,默认启用) |
+
+#### 请求示例
+
+```http
+GET /api/vod1
+```
+
+或
+
+```http
+GET /api/vod1?filter=1
+```
+
+#### 响应示例
+
+```json
+{
+ "class": [
+ {
+ "type_id": "choice",
+ "type_name": "精选"
+ },
+ {
+ "type_id": "movie",
+ "type_name": "电影"
+ },
+ {
+ "type_id": "tv",
+ "type_name": "电视剧"
+ },
+ {
+ "type_id": "variety",
+ "type_name": "综艺"
+ },
+ {
+ "type_id": "cartoon",
+ "type_name": "动漫"
+ },
+ {
+ "type_id": "child",
+ "type_name": "少儿"
+ },
+ {
+ "type_id": "doco",
+ "type_name": "纪录片"
+ }
+ ],
+ "filters": {
+ },
+ "list": [
+ {
+ "vod_id": "301",
+ "vod_name": "首页推荐电影",
+ "vod_pic": "https://example.com/recommend.jpg"
+ }
+ ]
+}
+```
+
+## 错误状态码
+
+| 状态码 | 含义 | 说明 |
+|-----|----------------|-----------|
+| 404 | Not Found | 模块不存在 |
+| 500 | Internal Error | 服务器内部处理错误 |
+
+## 注意事项
+
+1. 参数`ext`(在分类接口中)是base64编码的JSON字符串,用于传递筛选条件。
+2. 分页参数`pg`从1开始。
+3. 参数`extend`(接口数据扩展)从sites的ext直接取字符串,若有就每个接口都加上。
+ 开发人员可参考此文档进行对接。
+4. 除`action`外的接口,尽量都用`get`协议,action由于传值可能较大推荐使用`post`
\ No newline at end of file
diff --git a/dashboard/docs/vlc-protocol.reg b/dashboard/docs/vlc-protocol.reg
new file mode 100644
index 0000000..588b016
--- /dev/null
+++ b/dashboard/docs/vlc-protocol.reg
@@ -0,0 +1,12 @@
+Windows Registry Editor Version 5.00
+
+[HKEY_CLASSES_ROOT\vlc]
+@="URL:VLC Protocol"
+"URL Protocol"=""
+
+[HKEY_CLASSES_ROOT\vlc\shell]
+
+[HKEY_CLASSES_ROOT\vlc\shell\open]
+
+[HKEY_CLASSES_ROOT\vlc\shell\open\command]
+@="\"C:\\Program Files\\VideoLAN\\VLC\\vlc.exe\" \"%1\""
\ No newline at end of file
diff --git "a/dashboard/docs/\345\244\226\351\203\250\346\222\255\346\224\276\345\231\250\351\205\215\347\275\256\350\257\264\346\230\216.md" "b/dashboard/docs/\345\244\226\351\203\250\346\222\255\346\224\276\345\231\250\351\205\215\347\275\256\350\257\264\346\230\216.md"
new file mode 100644
index 0000000..d1f04d3
--- /dev/null
+++ "b/dashboard/docs/\345\244\226\351\203\250\346\222\255\346\224\276\345\231\250\351\205\215\347\275\256\350\257\264\346\230\216.md"
@@ -0,0 +1,96 @@
+# 外部播放器配置说明
+
+本文档说明如何配置VLC和MPV播放器以支持自定义协议唤起。
+
+## 配置步骤
+
+### 1. 修改注册表文件中的播放器路径
+
+根据您的实际安装路径修改注册表文件:
+
+#### vlc-protocol.reg
+```reg
+Windows Registry Editor Version 5.00
+
+[HKEY_CLASSES_ROOT\vlc]
+@="URL:VLC Protocol"
+"URL Protocol"=""
+
+[HKEY_CLASSES_ROOT\vlc\shell]
+
+[HKEY_CLASSES_ROOT\vlc\shell\open]
+
+[HKEY_CLASSES_ROOT\vlc\shell\open\command]
+@="\"C:\\Program Files\\VideoLAN\\VLC\\vlc.exe\" \"%1\""
+```
+
+#### mpv-protocol.reg
+```reg
+Windows Registry Editor Version 5.00
+
+[HKEY_CLASSES_ROOT\mpv]
+@="URL:MPV Protocol"
+"URL Protocol"=""
+
+[HKEY_CLASSES_ROOT\mpv\shell]
+
+[HKEY_CLASSES_ROOT\mpv\shell\open]
+
+[HKEY_CLASSES_ROOT\mpv\shell\open\command]
+@="\"C:\\Program Files\\mpv\\mpv.exe\" \"%1\""
+```
+
+**注意**: 请根据您的实际安装路径修改播放器的路径。常见路径:
+- VLC: `C:\Program Files\VideoLAN\VLC\vlc.exe`
+- MPV: `C:\Program Files\mpv\mpv.exe` 或 `C:\mpv\mpv.exe`
+
+### 2. 注册协议
+
+以管理员身份运行以下注册表文件:
+
+1. 右键点击 `vlc-protocol.reg` → 选择"合并"
+2. 右键点击 `mpv-protocol.reg` → 选择"合并"
+
+### 3. 测试配置
+
+配置完成后,您可以在浏览器地址栏中测试:
+
+- VLC: `vlc://https://example.com/video.mp4`
+- MPV: `mpv://https://example.com/video.mp4`
+
+## 工作原理
+
+当您点击"用VLC播放"或"用MPV播放"按钮时:
+
+1. JavaScript代码构造 `vlc://` 或 `mpv://` 协议URL
+2. 浏览器识别自定义协议并查找注册表中的处理程序
+3. 系统调用对应的播放器,并将完整URL作为参数传递
+4. 播放器接收到URL参数(如 `vlc://https://example.com/video.mp4`)
+5. 播放器会自动处理协议前缀,提取真实的视频URL进行播放
+
+## 常见问题
+
+### Q: 如何确认配置是否成功?
+A: 在浏览器地址栏输入测试URL,如果能够成功调起对应的播放器,说明配置成功。
+
+### Q: 播放器路径不正确怎么办?
+A: 请根据您的实际安装路径修改注册表文件中的播放器路径。
+
+### Q: 为什么有时候播放器无法打开视频?
+A: 可能是因为:
+1. 视频URL需要特殊的请求头(如Referer)
+2. 视频格式不被播放器支持
+3. 网络连接问题
+
+## 卸载协议
+
+如果需要卸载协议,可以创建卸载的注册表文件:
+
+```reg
+Windows Registry Editor Version 5.00
+
+[-HKEY_CLASSES_ROOT\vlc]
+[-HKEY_CLASSES_ROOT\mpv]
+```
+
+保存为 `.reg` 文件并以管理员身份运行即可删除协议注册。
\ No newline at end of file
diff --git "a/dashboard/docs/\350\207\252\345\256\232\344\271\211\351\241\265\351\235\242\347\273\204\344\273\266\346\212\200\346\234\257\350\247\204\350\214\203.md" "b/dashboard/docs/\350\207\252\345\256\232\344\271\211\351\241\265\351\235\242\347\273\204\344\273\266\346\212\200\346\234\257\350\247\204\350\214\203.md"
new file mode 100644
index 0000000..2338f75
--- /dev/null
+++ "b/dashboard/docs/\350\207\252\345\256\232\344\271\211\351\241\265\351\235\242\347\273\204\344\273\266\346\212\200\346\234\257\350\247\204\350\214\203.md"
@@ -0,0 +1,691 @@
+# 自定义页面组件技术规范
+
+## 概述
+
+本文档定义了DrPlayer中用于渲染T4 Action交互功能的自定义页面组件技术规范。这些组件将根据后端返回的Action JSON配置动态生成相应的UI界面,实现灵活的用户交互体验。
+
+## 架构设计
+
+### 1. 组件层次结构
+
+```
+ActionRenderer (主渲染器)
+├── ActionDialog (弹窗容器)
+│ ├── InputAction (单项输入组件)
+│ ├── EditAction (多行编辑组件)
+│ ├── MultiInputAction (多项输入组件)
+│ ├── MenuAction (单选菜单组件)
+│ ├── SelectAction (多选菜单组件)
+│ ├── MsgBoxAction (消息弹窗组件)
+│ ├── WebViewAction (网页视图组件)
+│ └── HelpAction (帮助页面组件)
+├── ActionButton (动作按钮组件)
+└── ActionToast (提示消息组件)
+```
+
+### 2. 数据流
+
+```
+Action JSON → ActionRenderer → 具体Action组件 → 用户交互 → 回调处理 → API调用
+```
+
+## 核心组件规范
+
+### 1. ActionRenderer (主渲染器)
+
+**职责:**
+- 解析Action JSON配置
+- 根据type字段路由到对应的组件
+- 管理组件的生命周期
+- 处理专项动作
+
+**Props接口:**
+```typescript
+interface ActionRendererProps {
+ actionData: string | ActionConfig; // Action JSON字符串或对象
+ onAction: (action: string, value: any) => Promise; // 动作回调
+ onClose?: () => void; // 关闭回调
+}
+
+interface ActionConfig {
+ actionId: string;
+ type: ActionType;
+ [key: string]: any;
+}
+
+type ActionType = 'input' | 'edit' | 'multiInput' | 'multiInputX' | 'menu' | 'select' | 'msgbox' | 'webview' | 'help';
+```
+
+**核心方法:**
+```typescript
+class ActionRenderer {
+ // 解析Action配置
+ parseActionConfig(data: string | ActionConfig): ActionConfig;
+
+ // 渲染对应组件
+ renderActionComponent(config: ActionConfig): React.ReactNode;
+
+ // 处理专项动作
+ handleSpecialAction(actionId: string, config: ActionConfig): void;
+
+ // 执行动作回调
+ executeAction(action: string, value: any): Promise;
+}
+```
+
+### 2. ActionDialog (弹窗容器)
+
+**职责:**
+- 提供统一的弹窗容器
+- 处理弹窗的显示/隐藏逻辑
+- 管理弹窗的尺寸和位置
+- 处理背景遮罩和点击外部关闭
+
+**Props接口:**
+```typescript
+interface ActionDialogProps {
+ visible: boolean;
+ title?: string;
+ width?: number;
+ height?: number;
+ bottom?: number;
+ canceledOnTouchOutside?: boolean;
+ dimAmount?: number;
+ onClose: () => void;
+ children: React.ReactNode;
+}
+```
+
+**样式规范:**
+```css
+.action-dialog {
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ background: white;
+ border-radius: 8px;
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
+ z-index: 1000;
+}
+
+.action-dialog-mask {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background: rgba(0, 0, 0, 0.5);
+ z-index: 999;
+}
+```
+
+### 3. InputAction (单项输入组件)
+
+**职责:**
+- 渲染单项输入界面
+- 处理输入验证
+- 支持快速选择选项
+- 显示图片和二维码
+- 处理图片点击坐标
+
+**Props接口:**
+```typescript
+interface InputActionProps {
+ config: InputActionConfig;
+ onSubmit: (value: any) => void;
+ onCancel?: () => void;
+}
+
+interface InputActionConfig {
+ actionId: string;
+ id: string;
+ title: string;
+ tip: string;
+ value?: string;
+ msg?: string;
+ width?: number;
+ button?: number;
+ selectData?: string;
+ imageUrl?: string;
+ imageHeight?: number;
+ imageClickCoord?: boolean;
+ qrcode?: string;
+ qrcodeSize?: string;
+ timeout?: number;
+ keep?: boolean;
+ help?: string;
+}
+```
+
+**核心功能:**
+```typescript
+class InputAction {
+ // 解析快速选择数据
+ parseSelectData(selectData: string): SelectOption[];
+
+ // 处理图片点击坐标
+ handleImageClick(event: MouseEvent): void;
+
+ // 生成二维码
+ generateQRCode(url: string, size: string): string;
+
+ // 验证输入值
+ validateInput(value: string): boolean;
+
+ // 处理超时
+ handleTimeout(timeout: number): void;
+}
+```
+
+### 4. MultiInputAction (多项输入组件)
+
+**职责:**
+- 渲染多项输入界面
+- 支持不同类型的输入控件
+- 处理文件选择、日期选择等特殊输入
+- 验证所有输入项
+
+**Props接口:**
+```typescript
+interface MultiInputActionProps {
+ config: MultiInputActionConfig;
+ onSubmit: (values: Record) => void;
+ onCancel?: () => void;
+}
+
+interface MultiInputActionConfig {
+ actionId: string;
+ type: 'multiInput' | 'multiInputX';
+ title: string;
+ width?: number;
+ height?: number;
+ msg?: string;
+ button?: number;
+ input: InputItem[];
+}
+
+interface InputItem {
+ id: string;
+ name: string;
+ tip: string;
+ value?: string;
+ selectData?: string;
+ inputType?: number;
+ multiLine?: number;
+ validation?: string;
+ help?: string;
+ quickSelect?: boolean;
+ onlyQuickSelect?: boolean;
+ multiSelect?: boolean;
+ selectWidth?: number;
+ selectColumn?: number;
+}
+```
+
+**特殊输入类型处理:**
+```typescript
+class MultiInputAction {
+ // 文件夹选择
+ handleFolderSelect(itemId: string): void;
+
+ // 文件选择
+ handleFileSelect(itemId: string): void;
+
+ // 日期选择
+ handleDateSelect(itemId: string): void;
+
+ // 图像选择并转换为Base64
+ handleImageSelect(itemId: string): void;
+
+ // 多选处理
+ handleMultiSelect(itemId: string, options: string[]): void;
+
+ // 输入验证
+ validateItem(item: InputItem, value: string): boolean;
+}
+```
+
+### 5. MenuAction (单选菜单组件)
+
+**职责:**
+- 渲染单选菜单界面
+- 支持多列布局
+- 处理选项选择
+
+**Props接口:**
+```typescript
+interface MenuActionProps {
+ config: MenuActionConfig;
+ onSelect: (action: string) => void;
+ onCancel?: () => void;
+}
+
+interface MenuActionConfig {
+ actionId: string;
+ title: string;
+ width?: number;
+ column?: number;
+ option: MenuOption[];
+ selectedIndex?: number;
+}
+
+interface MenuOption {
+ name: string;
+ action: string;
+}
+```
+
+### 6. SelectAction (多选菜单组件)
+
+**职责:**
+- 渲染多选菜单界面
+- 管理选中状态
+- 支持全选/反选功能
+
+**Props接口:**
+```typescript
+interface SelectActionProps {
+ config: SelectActionConfig;
+ onSubmit: (selectedActions: string[]) => void;
+ onCancel?: () => void;
+}
+
+interface SelectActionConfig {
+ actionId: string;
+ title: string;
+ width?: number;
+ column?: number;
+ option: SelectOption[];
+}
+
+interface SelectOption {
+ name: string;
+ action: string;
+ selected?: boolean;
+}
+```
+
+### 7. MsgBoxAction (消息弹窗组件)
+
+**职责:**
+- 显示消息内容
+- 支持HTML格式消息
+- 显示图片
+
+**Props接口:**
+```typescript
+interface MsgBoxActionProps {
+ config: MsgBoxActionConfig;
+ onClose: () => void;
+}
+
+interface MsgBoxActionConfig {
+ actionId: string;
+ title: string;
+ msg?: string;
+ htmlMsg?: string;
+ imageUrl?: string;
+}
+```
+
+### 8. WebViewAction (网页视图组件)
+
+**职责:**
+- 嵌入网页内容
+- 处理网页交互
+- 管理缩放和滚动
+
+**Props接口:**
+```typescript
+interface WebViewActionProps {
+ config: WebViewActionConfig;
+ onClose: () => void;
+}
+
+interface WebViewActionConfig {
+ actionId: string;
+ url: string;
+ height?: number;
+ textZoom?: number;
+}
+```
+
+## 状态管理
+
+### 1. Action状态
+
+```typescript
+interface ActionState {
+ currentAction: ActionConfig | null;
+ isVisible: boolean;
+ isLoading: boolean;
+ error: string | null;
+ history: ActionConfig[]; // 动作历史,支持返回
+}
+```
+
+### 2. 状态管理器
+
+```typescript
+class ActionStateManager {
+ private state: ActionState;
+ private listeners: ((state: ActionState) => void)[];
+
+ // 显示动作
+ showAction(config: ActionConfig): void;
+
+ // 隐藏动作
+ hideAction(): void;
+
+ // 执行动作
+ executeAction(action: string, value: any): Promise;
+
+ // 返回上一个动作
+ goBack(): void;
+
+ // 清空历史
+ clearHistory(): void;
+
+ // 订阅状态变化
+ subscribe(listener: (state: ActionState) => void): () => void;
+}
+```
+
+## 样式规范
+
+### 1. 设计系统
+
+```css
+:root {
+ /* 颜色 */
+ --action-primary: #1890ff;
+ --action-success: #52c41a;
+ --action-warning: #faad14;
+ --action-error: #f5222d;
+ --action-text: #262626;
+ --action-text-secondary: #8c8c8c;
+ --action-border: #d9d9d9;
+ --action-background: #ffffff;
+ --action-background-light: #fafafa;
+
+ /* 尺寸 */
+ --action-border-radius: 6px;
+ --action-padding: 16px;
+ --action-margin: 8px;
+
+ /* 阴影 */
+ --action-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
+ --action-shadow-hover: 0 4px 12px rgba(0, 0, 0, 0.15);
+}
+```
+
+### 2. 组件样式
+
+```css
+/* 输入框 */
+.action-input {
+ width: 100%;
+ padding: 8px 12px;
+ border: 1px solid var(--action-border);
+ border-radius: var(--action-border-radius);
+ font-size: 14px;
+ transition: border-color 0.3s;
+}
+
+.action-input:focus {
+ border-color: var(--action-primary);
+ outline: none;
+ box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);
+}
+
+/* 按钮 */
+.action-button {
+ padding: 8px 16px;
+ border: 1px solid var(--action-border);
+ border-radius: var(--action-border-radius);
+ background: var(--action-background);
+ cursor: pointer;
+ transition: all 0.3s;
+}
+
+.action-button-primary {
+ background: var(--action-primary);
+ border-color: var(--action-primary);
+ color: white;
+}
+
+.action-button:hover {
+ box-shadow: var(--action-shadow-hover);
+}
+
+/* 选项 */
+.action-option {
+ padding: 12px;
+ border: 1px solid var(--action-border);
+ border-radius: var(--action-border-radius);
+ cursor: pointer;
+ transition: all 0.3s;
+}
+
+.action-option:hover {
+ background: var(--action-background-light);
+ border-color: var(--action-primary);
+}
+
+.action-option-selected {
+ background: var(--action-primary);
+ border-color: var(--action-primary);
+ color: white;
+}
+```
+
+## API接口规范
+
+### 1. Action执行接口
+
+```typescript
+interface ActionAPI {
+ // 执行动作
+ executeAction(action: string, value: any): Promise;
+}
+
+interface ActionResponse {
+ success: boolean;
+ data?: any;
+ action?: ActionConfig; // 新的动作配置
+ toast?: string; // 提示消息
+ error?: string;
+}
+```
+
+### 2. 文件操作接口
+
+```typescript
+interface FileAPI {
+ // 选择文件夹
+ selectFolder(): Promise;
+
+ // 选择文件
+ selectFile(accept?: string): Promise;
+
+ // 选择图片并转换为Base64
+ selectImageAsBase64(): Promise;
+}
+```
+
+## 错误处理
+
+### 1. 错误类型
+
+```typescript
+enum ActionErrorType {
+ PARSE_ERROR = 'PARSE_ERROR',
+ VALIDATION_ERROR = 'VALIDATION_ERROR',
+ NETWORK_ERROR = 'NETWORK_ERROR',
+ TIMEOUT_ERROR = 'TIMEOUT_ERROR',
+ USER_CANCEL = 'USER_CANCEL'
+}
+
+interface ActionError {
+ type: ActionErrorType;
+ message: string;
+ details?: any;
+}
+```
+
+### 2. 错误处理策略
+
+```typescript
+class ActionErrorHandler {
+ // 处理解析错误
+ handleParseError(error: Error): void;
+
+ // 处理验证错误
+ handleValidationError(field: string, message: string): void;
+
+ // 处理网络错误
+ handleNetworkError(error: Error): void;
+
+ // 处理超时错误
+ handleTimeoutError(): void;
+
+ // 显示错误提示
+ showError(error: ActionError): void;
+}
+```
+
+## 性能优化
+
+### 1. 组件懒加载
+
+```typescript
+// 动态导入组件
+const InputAction = lazy(() => import('./InputAction'));
+const MultiInputAction = lazy(() => import('./MultiInputAction'));
+// ...
+
+// 使用Suspense包装
+}>
+
+
+```
+
+### 2. 虚拟滚动
+
+对于大量选项的菜单组件,使用虚拟滚动优化性能:
+
+```typescript
+import { FixedSizeList as List } from 'react-window';
+
+const VirtualMenuAction = ({ options, onSelect }) => {
+ const Row = ({ index, style }) => (
+ onSelect(options[index])}>
+ {options[index].name}
+
+ );
+
+ return (
+
+ {Row}
+
+ );
+};
+```
+
+### 3. 防抖处理
+
+对于输入组件,使用防抖优化性能:
+
+```typescript
+import { debounce } from 'lodash';
+
+const debouncedValidation = debounce((value: string) => {
+ validateInput(value);
+}, 300);
+```
+
+## 测试规范
+
+### 1. 单元测试
+
+```typescript
+describe('ActionRenderer', () => {
+ test('should parse action config correctly', () => {
+ const config = '{"actionId":"test","type":"input"}';
+ const result = ActionRenderer.parseActionConfig(config);
+ expect(result.actionId).toBe('test');
+ expect(result.type).toBe('input');
+ });
+
+ test('should handle invalid JSON gracefully', () => {
+ const config = 'invalid json';
+ expect(() => ActionRenderer.parseActionConfig(config)).toThrow();
+ });
+});
+```
+
+### 2. 集成测试
+
+```typescript
+describe('Action Integration', () => {
+ test('should complete input action flow', async () => {
+ const mockOnAction = jest.fn().mockResolvedValue('success');
+ const { getByTestId } = render(
+
+ );
+
+ const input = getByTestId('action-input');
+ fireEvent.change(input, { target: { value: 'test value' } });
+
+ const submitButton = getByTestId('action-submit');
+ fireEvent.click(submitButton);
+
+ await waitFor(() => {
+ expect(mockOnAction).toHaveBeenCalledWith('test', { test: 'test value' });
+ });
+ });
+});
+```
+
+## 部署和构建
+
+### 1. 构建配置
+
+```javascript
+// vite.config.js
+export default {
+ build: {
+ rollupOptions: {
+ output: {
+ manualChunks: {
+ 'action-components': [
+ './src/components/actions/InputAction',
+ './src/components/actions/MultiInputAction',
+ // ...
+ ]
+ }
+ }
+ }
+ }
+};
+```
+
+### 2. 代码分割
+
+```typescript
+// 路由级别的代码分割
+const ActionPage = lazy(() => import('./pages/ActionPage'));
+
+// 组件级别的代码分割
+const ActionRenderer = lazy(() => import('./components/ActionRenderer'));
+```
+
+通过以上技术规范,开发团队可以构建出功能完整、性能优良、用户体验良好的Action交互组件系统。
\ No newline at end of file
diff --git a/dashboard/index.html b/dashboard/index.html
index eeedbd5..83911db 100644
--- a/dashboard/index.html
+++ b/dashboard/index.html
@@ -4,6 +4,7 @@
+
DrPlayer
diff --git a/dashboard/json/live_cntv.txt b/dashboard/json/live_cntv.txt
new file mode 100644
index 0000000..aad576f
--- /dev/null
+++ b/dashboard/json/live_cntv.txt
@@ -0,0 +1,62 @@
+央视频道,#genre#
+CCTV4K,https://www.yangshipin.cn/tv/home?pid=600002264
+CCTV1,https://www.yangshipin.cn/tv/home?pid=600001859
+CCTV2,https://www.yangshipin.cn/tv/home?pid=600001800
+CCTV3(VIP),https://www.yangshipin.cn/tv/home?pid=600001801
+CCTV4,https://www.yangshipin.cn/tv/home?pid=600001814
+CCTV5(限免),https://www.yangshipin.cn/tv/home?pid=600001818
+CCTV5+(限免),https://www.yangshipin.cn/tv/home?pid=600001817
+CCTV6(VIP),https://www.yangshipin.cn/tv/home?pid=600001802
+CCTV7,https://www.yangshipin.cn/tv/home?pid=600004092
+CCTV8(VIP),https://www.yangshipin.cn/tv/home?pid=600001803
+CCTV9,https://www.yangshipin.cn/tv/home?pid=600004078
+CCTV10,https://www.yangshipin.cn/tv/home?pid=600001805
+CCTV11,https://www.yangshipin.cn/tv/home?pid=600001806
+CCTV12,https://www.yangshipin.cn/tv/home?pid=600001807
+CCTV13,https://www.yangshipin.cn/tv/home?pid=600001811
+CCTV14,https://www.yangshipin.cn/tv/home?pid=600001809
+CCTV15,https://www.yangshipin.cn/tv/home?pid=600001815
+CCTV16-HD,https://www.yangshipin.cn/tv/home?pid=600098637
+CCTV16(4K)(VIP),https://www.yangshipin.cn/tv/home?pid=600099502
+CCTV17,https://www.yangshipin.cn/tv/home?pid=600001810
+CGTN,https://www.yangshipin.cn/tv/home?pid=600014550
+CGTN法语频道,https://www.yangshipin.cn/tv/home?pid=600084704
+CGTN俄语频道,https://www.yangshipin.cn/tv/home?pid=600084758
+CGTN阿拉伯语频道,https://www.yangshipin.cn/tv/home?pid=600084782
+CGTN西班牙语频道,https://www.yangshipin.cn/tv/home?pid=600084744
+CGTN外语纪录频道,https://www.yangshipin.cn/tv/home?pid=600084781
+CCTV风云剧场频道(VIP),https://www.yangshipin.cn/tv/home?pid=600099658
+CCTV第一剧场频道(VIP),https://www.yangshipin.cn/tv/home?pid=600099655
+CCTV怀旧剧场频道(VIP),https://www.yangshipin.cn/tv/home?pid=600099620
+CCTV世界地理频道(VIP),https://www.yangshipin.cn/tv/home?pid=600099637
+CCTV风云音乐频道(VIP),https://www.yangshipin.cn/tv/home?pid=600099660
+CCTV兵器科技频道(VIP),https://www.yangshipin.cn/tv/home?pid=600099649
+CCTV风云足球频道(VIP),https://www.yangshipin.cn/tv/home?pid=600099636
+CCTV高尔夫·网球频道(VIP),https://www.yangshipin.cn/tv/home?pid=600099659
+CCTV女性时尚频道(VIP),https://www.yangshipin.cn/tv/home?pid=600099650
+CCTV央视文化精品频道(VIP),https://www.yangshipin.cn/tv/home?pid=600099653
+CCTV央视台球频道(VIP),https://www.yangshipin.cn/tv/home?pid=600099652
+CCTV电视指南频道(VIP),https://www.yangshipin.cn/tv/home?pid=600099656
+CCTV卫生健康频道(VIP),https://www.yangshipin.cn/tv/home?pid=600099651
+卫视频道,#genre#
+北京卫视,https://www.yangshipin.cn/tv/home?pid=600002309
+江苏卫视,https://www.yangshipin.cn/tv/home?pid=600002521
+东方卫视,https://www.yangshipin.cn/tv/home?pid=600002483
+浙江卫视,https://www.yangshipin.cn/tv/home?pid=600002520
+湖南卫视,https://www.yangshipin.cn/tv/home?pid=600002475
+湖北卫视,https://www.yangshipin.cn/tv/home?pid=600002508
+广东卫视,https://www.yangshipin.cn/tv/home?pid=600002485
+广西卫视,https://www.yangshipin.cn/tv/home?pid=600002509
+黑龙江卫视,https://www.yangshipin.cn/tv/home?pid=600002498
+海南卫视,https://www.yangshipin.cn/tv/home?pid=600002506
+重庆卫视,https://www.yangshipin.cn/tv/home?pid=600002531
+深圳卫视,https://www.yangshipin.cn/tv/home?pid=600002481
+四川卫视,https://www.yangshipin.cn/tv/home?pid=600002516
+河南卫视,https://www.yangshipin.cn/tv/home?pid=600002525
+福建东南卫视,https://www.yangshipin.cn/tv/home?pid=600002484
+贵州卫视,https://www.yangshipin.cn/tv/home?pid=600002490
+江西卫视,https://www.yangshipin.cn/tv/home?pid=600002503
+辽宁卫视,https://www.yangshipin.cn/tv/home?pid=600002505
+安徽卫视,https://www.yangshipin.cn/tv/home?pid=600002532
+河北卫视,https://www.yangshipin.cn/tv/home?pid=600002493
+山东卫视,https://www.yangshipin.cn/tv/home?pid=600002513
\ No newline at end of file
diff --git a/dashboard/json/tv.m3u b/dashboard/json/tv.m3u
new file mode 100644
index 0000000..a5d1400
--- /dev/null
+++ b/dashboard/json/tv.m3u
@@ -0,0 +1,565 @@
+#EXTM3U x-tvg-url="https://epg.v1.mk/fy.xml"
+#EXTINF:-1 tvg-name="4K60PSDR-H264-AAC测试" tvg-logo="https://cdn.jsdelivr.net/gh/feiyangdigital/testvideo/tg.jpg" group-title="4K频道",4K60PSDR-H264-AAC测试
+https://cdn.jsdelivr.net/gh/feiyangdigital/testvideo/sdr4kvideo/index.m3u8
+#EXTINF:-1 tvg-name="4K60PHLG-HEVC-EAC3测试" tvg-logo="https://cdn.jsdelivr.net/gh/feiyangdigital/testvideo/tg.jpg" group-title="4K频道",4K60PHLG-HEVC-EAC3测试
+https://cdn.jsdelivr.net/gh/feiyangdigital/testvideo/hlg4kvideo/index.m3u8
+#EXTINF:-1,tvg-id="CCTV1" tvg-name="CCTV1" tvg-logo="https://epg.v1.mk/logo/CCTV1.png" group-title="央视",cctv1-高码
+http://livetv.wqwqwq.sbs/gaoma/cctv1.m3u8
+#EXTINF:-1,tvg-id="CCTV1" tvg-name="CCTV1" tvg-logo="https://epg.v1.mk/logo/CCTV1.png" group-title="央视",CCTV-1
+http://livetv.wqwqwq.sbs/itv/6000000001000029752.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="cctv1" tvg-name="cctv1" tvg-logo="https://epg.v1.mk/logo/cctv1.png" group-title="央视",CCTV-1-50-FPS
+http://livetv.wqwqwq.sbs/itv/5000000004000002226.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="CCTV1" tvg-name="CCTV1" tvg-logo="https://epg.v1.mk/logo/CCTV1.png" group-title="央视",CCTV-1-HEVC
+http://livetv.wqwqwq.sbs/itv/1000000005000265001.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="cctv2" tvg-name="cctv2" tvg-logo="https://epg.v1.mk/logo/cctv2.png" group-title="央视",cctv2-高码
+http://livetv.wqwqwq.sbs/gaoma/cctv2.m3u8
+#EXTINF:-1,tvg-id="cctv2" tvg-name="cctv2" tvg-logo="https://epg.v1.mk/logo/cctv2.png" group-title="央视",CCTV-2
+http://livetv.wqwqwq.sbs/itv/1000000001000023315.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="CCTV2" tvg-name="CCTV2" tvg-logo="https://epg.v1.mk/logo/CCTV2.png" group-title="央视",CCTV-2-50-FPS
+http://livetv.wqwqwq.sbs/itv/6000000001000014161.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="cctv2" tvg-name="cctv2" tvg-logo="https://epg.v1.mk/logo/cctv2.png" group-title="央视",CCTV-2-HEVC
+http://livetv.wqwqwq.sbs/itv/1000000001000023315.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="cctv3" tvg-name="cctv3" tvg-logo="https://epg.v1.mk/logo/cctv3.png" group-title="央视",cctv3-高码
+http://livetv.wqwqwq.sbs/gaoma/cctv3.m3u8
+#EXTINF:-1,tvg-id="cctv3" tvg-name="cctv3" tvg-logo="https://epg.v1.mk/logo/cctv3.png" group-title="央视",CCTV-3
+http://livetv.wqwqwq.sbs/itv/6000000001000022313.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="cctv3" tvg-name="cctv3" tvg-logo="https://epg.v1.mk/logo/cctv3.png" group-title="央视",CCTV-3-HEVC
+http://livetv.wqwqwq.sbs/itv/1000000005000265003.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="cctv4" tvg-name="cctv4" tvg-logo="https://epg.v1.mk/logo/cctv4.png" group-title="央视",cctv4-高码
+http://livetv.wqwqwq.sbs/gaoma/cctv4.m3u8
+#EXTINF:-1,tvg-id="CCTV4" tvg-name="CCTV4" tvg-logo="https://epg.v1.mk/logo/CCTV4.png" group-title="央视",CCTV-4-50-FPS
+http://livetv.wqwqwq.sbs/itv/5000000011000031102.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="cctv4" tvg-name="cctv4" tvg-logo="https://epg.v1.mk/logo/cctv4.png" group-title="央视",CCTV-4-HEVC
+http://livetv.wqwqwq.sbs/itv/1000000005000265004.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="cctv5" tvg-name="cctv5" tvg-logo="https://epg.v1.mk/logo/cctv5.png" group-title="央视",cctv5-高码
+http://livetv.wqwqwq.sbs/gaoma/cctv5.m3u8
+#EXTINF:-1,tvg-id="cctv5" tvg-name="cctv5" tvg-logo="https://epg.v1.mk/logo/cctv5.png" group-title="央视",CCTV-5
+http://livetv.wqwqwq.sbs/itv/1000000005000025222.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="cctv5" tvg-name="cctv5" tvg-logo="https://epg.v1.mk/logo/cctv5.png" group-title="央视",CCTV-5-HEVC
+http://livetv.wqwqwq.sbs/itv/1000000005000265005.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="cctv5+" tvg-name="cctv5+" tvg-logo="https://epg.v1.mk/logo/cctv5+.png" group-title="央视",cctv5p-高码
+http://livetv.wqwqwq.sbs/gaoma/cctv5p.m3u8
+#EXTINF:-1,tvg-id="cctv5+" tvg-name="cctv5+" tvg-logo="https://epg.v1.mk/logo/cctv5+.png" group-title="央视",CCTV-5+
+http://livetv.wqwqwq.sbs/itv/6000000001000015875.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="cctv5+" tvg-name="cctv5+" tvg-logo="https://epg.v1.mk/logo/cctv5+.png" group-title="央视",CCTV-5+-HEVC
+http://livetv.wqwqwq.sbs/itv/1000000005000265016.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="cctv6" tvg-name="cctv6" tvg-logo="https://epg.v1.mk/logo/cctv6.png" group-title="央视",CCTV-6
+http://livetv.wqwqwq.sbs/itv/1000000001000001737.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="CCTV6" tvg-name="CCTV6" tvg-logo="https://epg.v1.mk/logo/CCTV6.png" group-title="央视",CCTV-6-50-FPS
+http://livetv.wqwqwq.sbs/itv/6000000001000004574.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="cctv6" tvg-name="cctv6" tvg-logo="https://epg.v1.mk/logo/cctv6.png" group-title="央视",CCTV-6-HEVC
+http://livetv.wqwqwq.sbs/itv/1000000005000265006.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="CCTV7" tvg-name="CCTV7" tvg-logo="https://epg.v1.mk/logo/CCTV7.png" group-title="央视",cctv7-高码
+http://livetv.wqwqwq.sbs/gaoma/cctv7.m3u8
+#EXTINF:-1,tvg-id="CCTV7" tvg-name="CCTV7" tvg-logo="https://epg.v1.mk/logo/CCTV7.png" group-title="央视",CCTV-7
+http://livetv.wqwqwq.sbs/itv/1000000001000024341.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="CCTV7" tvg-name="CCTV7" tvg-logo="https://epg.v1.mk/logo/CCTV7.png" group-title="央视",CCTV-7-50-FPS
+http://livetv.wqwqwq.sbs/itv/6000000001000009055.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="CCTV7" tvg-name="CCTV7" tvg-logo="https://epg.v1.mk/logo/CCTV7.png" group-title="央视",CCTV-7-HEVC
+http://livetv.wqwqwq.sbs/itv/1000000005000265007.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="cctv8" tvg-name="cctv8" tvg-logo="https://epg.v1.mk/logo/cctv8.png" group-title="央视",cctv8-高码
+http://livetv.wqwqwq.sbs/gaoma/cctv8.m3u8
+#EXTINF:-1,tvg-id="cctv8" tvg-name="cctv8" tvg-logo="https://epg.v1.mk/logo/cctv8.png" group-title="央视",CCTV-8
+http://livetv.wqwqwq.sbs/itv/6000000001000001070.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="cctv8" tvg-name="cctv8" tvg-logo="https://epg.v1.mk/logo/cctv8.png" group-title="央视",CCTV-8-HEVC
+http://livetv.wqwqwq.sbs/itv/1000000005000265008.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="cctv9" tvg-name="cctv9" tvg-logo="https://epg.v1.mk/logo/cctv9.png" group-title="央视",cctv9-高码
+http://livetv.wqwqwq.sbs/gaoma/cctv9.m3u8
+#EXTINF:-1,tvg-id="cctv9" tvg-name="cctv9" tvg-logo="https://epg.v1.mk/logo/cctv9.png" group-title="央视",CCTV-9
+http://livetv.wqwqwq.sbs/itv/1000000001000014583.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="CCTV9" tvg-name="CCTV9" tvg-logo="https://epg.v1.mk/logo/CCTV9.png" group-title="央视",CCTV-9-50-FPS
+http://livetv.wqwqwq.sbs/itv/6000000001000032162.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="cctv9" tvg-name="cctv9" tvg-logo="https://epg.v1.mk/logo/cctv9.png" group-title="央视",CCTV-9-HEVC
+http://livetv.wqwqwq.sbs/itv/1000000005000265009.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="cctv10" tvg-name="cctv10" tvg-logo="https://epg.v1.mk/logo/cctv10.png" group-title="央视",cctv10-高码
+http://livetv.wqwqwq.sbs/gaoma/cctv10.m3u8
+#EXTINF:-1,tvg-id="cctv10" tvg-name="cctv10" tvg-logo="https://epg.v1.mk/logo/cctv10.png" group-title="央视",CCTV-10
+http://livetv.wqwqwq.sbs/itv/1000000001000023734.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="cctv10" tvg-name="cctv10" tvg-logo="https://epg.v1.mk/logo/cctv10.png" group-title="央视",CCTV-10-50-FPS
+http://livetv.wqwqwq.sbs/itv/5000000004000012827.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="cctv10" tvg-name="cctv10" tvg-logo="https://epg.v1.mk/logo/cctv10.png" group-title="央视",CCTV-10-HEVC
+http://livetv.wqwqwq.sbs/itv/1000000005000265010.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="cctv11" tvg-name="cctv11" tvg-logo="https://epg.v1.mk/logo/cctv11.png" group-title="央视",cctv11-高码
+http://livetv.wqwqwq.sbs/gaoma/cctv11.m3u8
+#EXTINF:-1,tvg-id="cctv11" tvg-name="cctv11" tvg-logo="https://epg.v1.mk/logo/cctv11.png" group-title="央视",CCTV-11-50-FPS
+http://livetv.wqwqwq.sbs/itv/5000000011000031106.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="cctv11" tvg-name="cctv11" tvg-logo="https://epg.v1.mk/logo/cctv11.png" group-title="央视",CCTV-11-HEVC
+http://livetv.wqwqwq.sbs/itv/1000000005000265011.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="cctv12" tvg-name="cctv12" tvg-logo="https://epg.v1.mk/logo/cctv12.png" group-title="央视",cctv12-高码
+http://livetv.wqwqwq.sbs/gaoma/cctv12.m3u8
+#EXTINF:-1,tvg-id="cctv12" tvg-name="cctv12" tvg-logo="https://epg.v1.mk/logo/cctv12.png" group-title="央视",CCTV-12
+http://livetv.wqwqwq.sbs/itv/1000000001000032494.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="cctv12" tvg-name="cctv12" tvg-logo="https://epg.v1.mk/logo/cctv12.png" group-title="央视",CCTV-12-50-FPS
+http://livetv.wqwqwq.sbs/itv/6000000001000022586.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="cctv12" tvg-name="cctv12" tvg-logo="https://epg.v1.mk/logo/cctv12.png" group-title="央视",CCTV-12-HEVC
+http://livetv.wqwqwq.sbs/itv/1000000005000265012.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="cctv13" tvg-name="cctv13" tvg-logo="https://epg.v1.mk/logo/cctv13.png" group-title="央视",cctv13-高码
+http://livetv.wqwqwq.sbs/gaoma/cctv13.m3u8
+#EXTINF:-1,tvg-id="cctv13" tvg-name="cctv13" tvg-logo="https://epg.v1.mk/logo/cctv13.png" group-title="央视",CCTV-13-50-FPS
+http://livetv.wqwqwq.sbs/itv/5000000011000031108.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="cctv14" tvg-name="cctv14" tvg-logo="https://epg.v1.mk/logo/cctv14.png" group-title="央视",cctv14-高码
+http://livetv.wqwqwq.sbs/gaoma/cctv14.m3u8
+#EXTINF:-1,tvg-id="cctv14" tvg-name="cctv14" tvg-logo="https://epg.v1.mk/logo/cctv14.png" group-title="央视",CCTV-14
+http://livetv.wqwqwq.sbs/itv/1000000001000008170.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="cctv14" tvg-name="cctv14" tvg-logo="https://epg.v1.mk/logo/cctv14.png" group-title="央视",CCTV-14-50-FPS
+http://livetv.wqwqwq.sbs/itv/5000000004000006673.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="cctv14" tvg-name="cctv14" tvg-logo="https://epg.v1.mk/logo/cctv14.png" group-title="央视",CCTV-14-HEVC
+http://livetv.wqwqwq.sbs/itv/1000000005000265013.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="cctv15" tvg-name="cctv15" tvg-logo="https://epg.v1.mk/logo/cctv15.png" group-title="央视",cctv15-高码
+http://livetv.wqwqwq.sbs/gaoma/cctv15.m3u8
+#EXTINF:-1,tvg-id="cctv15" tvg-name="cctv15" tvg-logo="https://epg.v1.mk/logo/cctv15.png" group-title="央视",CCTV-15-50-FPS
+http://livetv.wqwqwq.sbs/itv/5000000011000031109.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="cctv15" tvg-name="cctv15" tvg-logo="https://epg.v1.mk/logo/cctv15.png" group-title="央视",CCTV-15-HEVC
+http://livetv.wqwqwq.sbs/itv/1000000005000265014.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="cctv16" tvg-name="cctv16" tvg-logo="https://epg.v1.mk/logo/cctv16.png" group-title="央视",cctv16-高码
+http://livetv.wqwqwq.sbs/gaoma/cctv16.m3u8
+#EXTINF:-1,tvg-id="cctv16" tvg-name="cctv16" tvg-logo="https://epg.v1.mk/logo/cctv16.png" group-title="央视",CCTV-16
+http://livetv.wqwqwq.sbs/itv/1000000006000233002.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="cctv16" tvg-name="cctv16" tvg-logo="https://epg.v1.mk/logo/cctv16.png" group-title="4K频道",CCTV-16-4K-HEVC
+http://livetv.wqwqwq.sbs/itv/5000000008000023254.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="cctv16" tvg-name="cctv16" tvg-logo="https://epg.v1.mk/logo/cctv16.png" group-title="4K频道",cctv164k_10m
+http://livetv.wqwqwq.sbs/gaoma/cctv4k16_10m.m3u8
+#EXTINF:-1,tvg-id="cctv16" tvg-name="cctv16" tvg-logo="https://epg.v1.mk/logo/cctv16.png" group-title="4K频道",cctv164k
+http://livetv.wqwqwq.sbs/gaoma/cctv4k16.m3u8
+#EXTINF:-1,tvg-id="cctv17" tvg-name="cctv17" tvg-logo="https://epg.v1.mk/logo/cctv17.png" group-title="央视",cctv17-高码
+http://livetv.wqwqwq.sbs/gaoma/cctv17.m3u8
+#EXTINF:-1,tvg-id="cctv17" tvg-name="cctv17" tvg-logo="https://epg.v1.mk/logo/cctv17.png" group-title="央视",CCTV-17
+http://livetv.wqwqwq.sbs/itv/1000000006000268004.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="cctv17" tvg-name="cctv17" tvg-logo="https://epg.v1.mk/logo/cctv17.png" group-title="央视",CCTV-17-HEVC
+http://livetv.wqwqwq.sbs/itv/1000000005000265015.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="cgtn" tvg-name="cgtn" tvg-logo="https://epg.v1.mk/logo/cgtn.png" group-title="央视",CGTN
+http://livetv.wqwqwq.sbs/itv/7745129417417101820.m3u8?cdn=hnbblive
+#EXTINF:-1,tvg-id="CGTN记录" tvg-name="CGTN记录" tvg-logo="https://epg.v1.mk/logo/CGTN记录.png" group-title="央视",CGTN-记录
+http://livetv.wqwqwq.sbs/itv/7114647837765104058.m3u8?cdn=hnbblive
+#EXTINF:-1,tvg-id="CGTNALBY" tvg-name="CGTNALBY" tvg-logo="https://epg.v1.mk/logo/CGTNALBY.png" group-title="央视",cgtnar-高码
+http://livetv.wqwqwq.sbs/gaoma/cgtnar.m3u8
+#EXTINF:-1,tvg-id="cgtndocumentary" tvg-name="cgtndocumentary" tvg-logo="https://epg.v1.mk/logo/cgtndocumentary.png" group-title="央视",cgtndoc-高码
+http://livetv.wqwqwq.sbs/gaoma/cgtndoc.m3u8
+#EXTINF:-1,tvg-id="CGTNEN" tvg-name="CGTNEN" tvg-logo="https://epg.v1.mk/logo/CGTN.png" group-title="央视",cgtnen-高码
+http://livetv.wqwqwq.sbs/gaoma/cgtnen.m3u8
+#EXTINF:-1,tvg-id="cgtnfrench" tvg-name="cgtnfrench" tvg-logo="https://epg.v1.mk/logo/cgtnfrench.png" group-title="央视",cgtnfr-高码
+http://livetv.wqwqwq.sbs/gaoma/cgtnfr.m3u8
+#EXTINF:-1,tvg-id="cgtnru" tvg-name="cgtnru" tvg-logo="https://epg.v1.mk/logo/CGTN1.png" group-title="央视",cgtnru-高码
+http://livetv.wqwqwq.sbs/gaoma/cgtnru.m3u8
+#EXTINF:-1,tvg-id="cgtnsp" tvg-name="cgtnsp" tvg-logo="https://epg.v1.mk/logo/CGTN1.png" group-title="央视",cgtnsp-高码
+http://livetv.wqwqwq.sbs/gaoma/cgtnsp.m3u8
+#EXTINF:-1,tvg-id="重温经典" tvg-name="重温经典" tvg-logo="https://epg.v1.mk/logo/重温经典.png" group-title="其他",重温经典
+https://gdcucc.v1.mk/gdcucc/cwjd.m3u8
+#EXTINF:-1,tvg-id="cctv4k" tvg-name="cctv4k" tvg-logo="https://epg.v1.mk/logo/cctv4k.png" group-title="4K频道",cctv4k_10m
+http://livetv.wqwqwq.sbs/gaoma/cctv4k_10m.m3u8
+#EXTINF:-1,tvg-id="cctv4k" tvg-name="cctv4k" tvg-logo="https://epg.v1.mk/logo/cctv4k.png" group-title="4K频道",cctv4k
+http://livetv.wqwqwq.sbs/gaoma/cctv4k.m3u8
+#EXTINF:-1,tvg-id="北京纪实科教8K" tvg-name="北京纪实科教8K" tvg-logo="https://epg.v1.mk/logo/北京纪实科教8K.png" group-title="8K频道",北京纪实科教8K
+https://gdcucc.v1.mk/gdcucc/brtv8k.m3u8
+#EXTINF:-1,tvg-id="cctv8k" tvg-name="cctv8k" tvg-logo="https://epg.v1.mk/logo/cctv8k.png" group-title="8K频道",cctv8k_36m
+http://livetv.wqwqwq.sbs/gaoma/cctv8k_36m.m3u8
+#EXTINF:-1,tvg-id="cctv8k" tvg-name="cctv8k" tvg-logo="https://epg.v1.mk/logo/cctv8k.png" group-title="8K频道",cctv8k_120m
+http://livetv.wqwqwq.sbs/gaoma/cctv8k_120m.m3u8
+#EXTINF:-1,tvg-id="中国教育1台" tvg-name="中国教育1台" tvg-logo="https://epg.v1.mk/logo/中国教育1台.png" group-title="其他",中国教育电视台-1
+http://livetv.wqwqwq.sbs/itv/5000000002000002652.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="中国教育4台" tvg-name="中国教育4台" tvg-logo="https://epg.v1.mk/logo/中国教育4台.png" group-title="其他",中国教育电视台-4
+http://livetv.wqwqwq.sbs/itv/5000000011000031126.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="北京卫视" tvg-name="北京卫视" tvg-logo="https://epg.v1.mk/logo/北京卫视.png" group-title="北京",北京卫视
+http://livetv.wqwqwq.sbs/itv/6000000001000020451.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="北京卫视" tvg-name="北京卫视" tvg-logo="https://epg.v1.mk/logo/北京卫视.png" group-title="北京",北京卫视-HEVC
+http://livetv.wqwqwq.sbs/itv/1000000005000265027.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="北京纪实科教" tvg-name="北京纪实科教" tvg-logo="https://epg.v1.mk/logo/北京纪实科教.png" group-title="北京",北京纪实科教
+http://livetv.wqwqwq.sbs/itv/1000000001000001910.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="北京纪实科教" tvg-name="北京纪实科教" tvg-logo="https://epg.v1.mk/logo/北京纪实科教.png" group-title="北京",北京纪实科教-HEVC
+http://livetv.wqwqwq.sbs/itv/1000000005000265020.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="北京卡酷少儿" tvg-name="北京卡酷少儿" tvg-logo="https://epg.v1.mk/logo/北京卡酷少儿.png" group-title="北京",北京卡酷少儿
+http://livetv.wqwqwq.sbs/itv/7851974109718180595.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="安徽卫视" tvg-name="安徽卫视" tvg-logo="https://epg.v1.mk/logo/安徽卫视.png" group-title="安徽",安徽卫视
+http://livetv.wqwqwq.sbs/itv/1000000001000030159.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="安徽卫视" tvg-name="安徽卫视" tvg-logo="https://epg.v1.mk/logo/安徽卫视.png" group-title="安徽",安徽卫视-50-FPS
+http://livetv.wqwqwq.sbs/itv/6000000001000009954.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="安徽卫视" tvg-name="安徽卫视" tvg-logo="https://epg.v1.mk/logo/安徽卫视.png" group-title="安徽",安徽卫视-HEVC
+http://livetv.wqwqwq.sbs/itv/1000000005000265025.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="东南卫视" tvg-name="东南卫视" tvg-logo="https://epg.v1.mk/logo/东南卫视.png" group-title="卫视",东南卫视
+http://livetv.wqwqwq.sbs/itv/5000000004000010584.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="东南卫视" tvg-name="东南卫视" tvg-logo="https://epg.v1.mk/logo/东南卫视.png" group-title="卫视",东南卫视-HEVC
+http://livetv.wqwqwq.sbs/itv/1000000005000265033.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="甘肃卫视" tvg-name="甘肃卫视" tvg-logo="https://epg.v1.mk/logo/甘肃卫视.png" group-title="甘肃",甘肃卫视
+http://livetv.wqwqwq.sbs/itv/5000000011000031121.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="广东卫视" tvg-name="广东卫视" tvg-logo="https://epg.v1.mk/logo/广东卫视.png" group-title="广东",广东卫视
+http://livetv.wqwqwq.sbs/itv/1000000001000014176.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="广东卫视" tvg-name="广东卫视" tvg-logo="https://epg.v1.mk/logo/广东卫视.png" group-title="广东",广东卫视-50-FPS
+http://livetv.wqwqwq.sbs/itv/6000000001000031076.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="广东卫视" tvg-name="广东卫视" tvg-logo="https://epg.v1.mk/logo/广东卫视.png" group-title="广东",广东卫视-HEVC
+http://livetv.wqwqwq.sbs/itv/1000000005000265034.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="广西卫视" tvg-name="广西卫视" tvg-logo="https://epg.v1.mk/logo/广西卫视.png" group-title="卫视",广西卫视
+http://livetv.wqwqwq.sbs/itv/5000000011000031118.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="贵州卫视" tvg-name="贵州卫视" tvg-logo="https://epg.v1.mk/logo/贵州卫视.png" group-title="贵州",贵州卫视
+http://livetv.wqwqwq.sbs/itv/5000000004000025843.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="海南卫视" tvg-name="海南卫视" tvg-logo="https://epg.v1.mk/logo/海南卫视.png" group-title="海南",海南卫视
+http://livetv.wqwqwq.sbs/itv/5000000004000006211.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="河北卫视" tvg-name="河北卫视" tvg-logo="https://epg.v1.mk/logo/河北卫视.png" group-title="河北",河北卫视
+http://livetv.wqwqwq.sbs/itv/5000000006000040016.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="河南卫视" tvg-name="河南卫视" tvg-logo="https://epg.v1.mk/logo/河南卫视.png" group-title="河南",河南卫视
+http://livetv.wqwqwq.sbs/itv/5000000011000031119.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="黑龙江卫视" tvg-name="黑龙江卫视" tvg-logo="https://epg.v1.mk/logo/黑龙江卫视.png" group-title="黑龙江",黑龙江卫视
+http://livetv.wqwqwq.sbs/itv/1000000001000001925.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="黑龙江卫视" tvg-name="黑龙江卫视" tvg-logo="https://epg.v1.mk/logo/黑龙江卫视.png" group-title="黑龙江",黑龙江卫视-50-FPS
+http://livetv.wqwqwq.sbs/itv/6000000001000016510.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="黑龙江卫视" tvg-name="黑龙江卫视" tvg-logo="https://epg.v1.mk/logo/黑龙江卫视.png" group-title="黑龙江",黑龙江卫视-HEVC
+http://livetv.wqwqwq.sbs/itv/1000000005000265029.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="湖北卫视" tvg-name="湖北卫视" tvg-logo="https://epg.v1.mk/logo/湖北卫视.png" group-title="湖北",湖北卫视
+http://livetv.wqwqwq.sbs/itv/1000000001000024621.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="湖北卫视" tvg-name="湖北卫视" tvg-logo="https://epg.v1.mk/logo/湖北卫视.png" group-title="湖北",湖北卫视-50-FPS
+http://livetv.wqwqwq.sbs/itv/6000000001000015436.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="湖北卫视" tvg-name="湖北卫视" tvg-logo="https://epg.v1.mk/logo/湖北卫视.png" group-title="湖北",湖北卫视-HEVC
+http://livetv.wqwqwq.sbs/itv/1000000005000265023.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="湖南卫视" tvg-name="湖南卫视" tvg-logo="https://epg.v1.mk/logo/湖南卫视.png" group-title="湖南",湖南卫视
+http://livetv.wqwqwq.sbs/itv/5000000004000006692.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="湖南卫视" tvg-name="湖南卫视" tvg-logo="https://epg.v1.mk/logo/湖南卫视.png" group-title="湖南",湖南卫视-50-FPS
+http://livetv.wqwqwq.sbs/itv/6000000001000018044.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="湖南卫视" tvg-name="湖南卫视" tvg-logo="https://epg.v1.mk/logo/湖南卫视.png" group-title="湖南",湖南卫视-HEVC
+http://livetv.wqwqwq.sbs/itv/1000000005000265024.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="湖南金鹰纪实" tvg-name="湖南金鹰纪实" tvg-logo="https://epg.v1.mk/logo/湖南金鹰纪实.png" group-title="湖南",湖南金鹰纪实
+http://livetv.wqwqwq.sbs/itv/5000000011000031203.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="湖南" tvg-name="湖南" tvg-logo="https://epg.v1.mk/logo/湖南.png" group-title="湖南",湖南快乐垂钓
+http://livetv.wqwqwq.sbs/itv/5000000011000031206.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="湖南茶频道" tvg-name="湖南茶频道" tvg-logo="https://epg.v1.mk/logo/湖南茶频道.png" group-title="湖南",湖南茶频道
+http://livetv.wqwqwq.sbs/itv/5000000011000031209.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="吉林卫视" tvg-name="吉林卫视" tvg-logo="https://epg.v1.mk/logo/吉林卫视.png" group-title="吉林",吉林卫视
+http://livetv.wqwqwq.sbs/itv/5000000011000031117.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="江苏卫视" tvg-name="江苏卫视" tvg-logo="https://epg.v1.mk/logo/江苏卫视.png" group-title="江苏",江苏卫视-50-FPS
+http://livetv.wqwqwq.sbs/itv/6000000001000014861.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="江苏卫视" tvg-name="江苏卫视" tvg-logo="https://epg.v1.mk/logo/江苏卫视.png" group-title="江苏",江苏卫视
+http://livetv.wqwqwq.sbs/itv/1000000001000001828.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="江苏卫视" tvg-name="江苏卫视" tvg-logo="https://epg.v1.mk/logo/江苏卫视.png" group-title="江苏",江苏卫视-HEVC
+http://livetv.wqwqwq.sbs/itv/1000000005000265030.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="江西卫视" tvg-name="江西卫视" tvg-logo="https://epg.v1.mk/logo/江西卫视.png" group-title="江西",江西卫视
+http://livetv.wqwqwq.sbs/itv/1000000006000268001.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="江西卫视" tvg-name="江西卫视" tvg-logo="https://epg.v1.mk/logo/江西卫视.png" group-title="江西",江西卫视-HEVC
+http://livetv.wqwqwq.sbs/itv/1000000005000265032.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="辽宁卫视" tvg-name="辽宁卫视" tvg-logo="https://epg.v1.mk/logo/辽宁卫视.png" group-title="辽宁",辽宁卫视
+http://livetv.wqwqwq.sbs/itv/5000000004000011671.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="辽宁卫视" tvg-name="辽宁卫视" tvg-logo="https://epg.v1.mk/logo/辽宁卫视.png" group-title="辽宁",辽宁卫视-HEVC
+http://livetv.wqwqwq.sbs/itv/1000000005000265022.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="青海卫视" tvg-name="青海卫视" tvg-logo="https://epg.v1.mk/logo/青海卫视.png" group-title="青海",青海卫视
+http://livetv.wqwqwq.sbs/itv/1000000002000013359.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="山东卫视" tvg-name="山东卫视" tvg-logo="https://epg.v1.mk/logo/山东卫视.png" group-title="山东",山东卫视
+http://livetv.wqwqwq.sbs/itv/1000000001000016568.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="山东卫视" tvg-name="山东卫视" tvg-logo="https://epg.v1.mk/logo/山东卫视.png" group-title="山东",山东卫视-50-FPS
+http://livetv.wqwqwq.sbs/itv/6000000001000004134.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="山东卫视" tvg-name="山东卫视" tvg-logo="https://epg.v1.mk/logo/山东卫视.png" group-title="山东",山东卫视-HEVC
+http://livetv.wqwqwq.sbs/itv/1000000005000265019.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="东方卫视" tvg-name="东方卫视" tvg-logo="https://epg.v1.mk/logo/东方卫视.png" group-title="上海",上海东方卫视
+http://livetv.wqwqwq.sbs/itv/6000000001000003639.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="东方卫视" tvg-name="东方卫视" tvg-logo="https://epg.v1.mk/logo/东方卫视.png" group-title="上海",上海东方卫视-50-FPS
+http://livetv.wqwqwq.sbs/itv/5000000004000014098.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="东方卫视" tvg-name="东方卫视" tvg-logo="https://epg.v1.mk/logo/东方卫视.png" group-title="上海",上海东方卫视-HEVC
+http://livetv.wqwqwq.sbs/itv/1000000005000265018.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="上海ICS" tvg-name="上海ICS" tvg-logo="https://epg.v1.mk/logo/上海ICS.png" group-title="上海",上海-ICS-外语
+http://livetv.wqwqwq.sbs/itv/5000000010000030951.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="上海第一财经" tvg-name="上海第一财经" tvg-logo="https://epg.v1.mk/logo/上海第一财经.png" group-title="上海",上海第一财经
+http://livetv.wqwqwq.sbs/itv/5000000010000027146.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="东方财经" tvg-name="东方财经" tvg-logo="https://epg.v1.mk/logo/东方财经.png" group-title="上海",上海东方财经
+http://livetv.wqwqwq.sbs/itv/5000000007000010003.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="上海东方影视" tvg-name="上海东方影视" tvg-logo="https://epg.v1.mk/logo/上海东方影视.png" group-title="上海",上海东方影视
+http://livetv.wqwqwq.sbs/itv/5000000010000032212.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="上海都市" tvg-name="上海都市" tvg-logo="https://epg.v1.mk/logo/上海都市.png" group-title="上海",上海都市
+http://livetv.wqwqwq.sbs/itv/5000000010000018926.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="法治天地" tvg-name="法治天地" tvg-logo="https://epg.v1.mk/logo/法治天地.png" group-title="上海",上海法治天地
+http://livetv.wqwqwq.sbs/itv/2000000002000000014.m3u8?cdn=hnbblive
+#EXTINF:-1,tvg-id="哈哈炫动" tvg-name="哈哈炫动" tvg-logo="https://epg.v1.mk/logo/哈哈炫动.png" group-title="上海",上海哈哈炫动
+http://livetv.wqwqwq.sbs/itv/5000000011000031123.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="纪实人文" tvg-name="纪实人文" tvg-logo="https://epg.v1.mk/logo/纪实人文.png" group-title="上海",上海纪实人文-50-FPS
+http://livetv.wqwqwq.sbs/itv/5000000004000010282.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="纪实人文" tvg-name="纪实人文" tvg-logo="https://epg.v1.mk/logo/纪实人文.png" group-title="上海",上海纪实人文-HEVC
+http://livetv.wqwqwq.sbs/itv/1000000005000265021.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="五星体育" tvg-name="五星体育" tvg-logo="https://epg.v1.mk/logo/五星体育.png" group-title="上海",上海五星体育
+http://livetv.wqwqwq.sbs/itv/5000000010000017540.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="上海新闻综合" tvg-name="上海新闻综合" tvg-logo="https://epg.v1.mk/logo/上海新闻综合.png" group-title="上海",上海新闻综合
+http://livetv.wqwqwq.sbs/itv/5000000011000031110.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="深圳卫视" tvg-name="深圳卫视" tvg-logo="https://epg.v1.mk/logo/深圳卫视.png" group-title="卫视",深圳卫视
+http://livetv.wqwqwq.sbs/itv/5000000004000007410.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="深圳卫视" tvg-name="深圳卫视" tvg-logo="https://epg.v1.mk/logo/深圳卫视.png" group-title="卫视",深圳卫视-50-FPS
+http://livetv.wqwqwq.sbs/itv/6000000001000002116.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="深圳卫视" tvg-name="深圳卫视" tvg-logo="https://epg.v1.mk/logo/深圳卫视.png" group-title="卫视",深圳卫视-HEVC
+http://livetv.wqwqwq.sbs/itv/1000000005000265028.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="四川卫视" tvg-name="四川卫视" tvg-logo="https://epg.v1.mk/logo/四川卫视.png" group-title="四川",四川卫视
+http://livetv.wqwqwq.sbs/itv/5000000004000006119.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="天津卫视" tvg-name="天津卫视" tvg-logo="https://epg.v1.mk/logo/天津卫视.png" group-title="卫视",天津卫视
+http://livetv.wqwqwq.sbs/itv/5000000004000006827.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="天津卫视" tvg-name="天津卫视" tvg-logo="https://epg.v1.mk/logo/天津卫视.png" group-title="卫视",天津卫视-50-FPS
+http://livetv.wqwqwq.sbs/itv/6000000001000009186.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="天津卫视" tvg-name="天津卫视" tvg-logo="https://epg.v1.mk/logo/天津卫视.png" group-title="卫视",天津卫视-HEVC
+http://livetv.wqwqwq.sbs/itv/1000000005000265026.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="云南卫视" tvg-name="云南卫视" tvg-logo="https://epg.v1.mk/logo/云南卫视.png" group-title="云南",云南卫视
+http://livetv.wqwqwq.sbs/itv/5000000011000031120.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="浙江卫视" tvg-name="浙江卫视" tvg-logo="https://epg.v1.mk/logo/浙江卫视.png" group-title="浙江",浙江卫视-50-FPS
+http://livetv.wqwqwq.sbs/itv/5000000004000007275.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="浙江卫视" tvg-name="浙江卫视" tvg-logo="https://epg.v1.mk/logo/浙江卫视.png" group-title="浙江",浙江卫视
+http://livetv.wqwqwq.sbs/itv/1000000001000014260.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="浙江卫视" tvg-name="浙江卫视" tvg-logo="https://epg.v1.mk/logo/浙江卫视.png" group-title="浙江",浙江卫视-HEVC
+http://livetv.wqwqwq.sbs/itv/1000000005000265031.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="重庆卫视" tvg-name="重庆卫视" tvg-logo="https://epg.v1.mk/logo/重庆卫视.png" group-title="重庆",重庆卫视
+http://livetv.wqwqwq.sbs/itv/1000000001000001096.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="重庆卫视" tvg-name="重庆卫视" tvg-logo="https://epg.v1.mk/logo/重庆卫视.png" group-title="重庆",重庆卫视-HEVC
+http://livetv.wqwqwq.sbs/itv/1000000005000265017.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="华数4K" tvg-name="华数4K" tvg-logo="https://epg.v1.mk/logo/华数4K.png" group-title="4K频道",华数-4K
+http://livetv.wqwqwq.sbs/itv/6000000003000004748.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="纯享4K" tvg-name="纯享4K" tvg-logo="https://epg.v1.mk/logo/纯享4K.png" group-title="4K频道",纯享-4K
+http://livetv.wqwqwq.sbs/itv/1000000004000011651.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="咪咕4K" tvg-name="咪咕4K" tvg-logo="https://epg.v1.mk/logo/咪咕4K.png" group-title="4K频道",咪咕4K-1
+http://livetv.wqwqwq.sbs/itv/3000000010000005180.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4K" tvg-name="咪咕4K" tvg-logo="https://epg.v1.mk/logo/咪咕4K.png" group-title="4K频道",咪咕4K-2
+http://livetv.wqwqwq.sbs/itv/3000000010000015686.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="LOVENATURE" tvg-name="LOVENATURE" tvg-logo="https://epg.v1.mk/logo/LOVENATURE.png" group-title="4K频道",Love Nature 4K
+https://d18dyiwu97wm6q.cloudfront.net/playlist2160p.m3u8
+#EXTINF:-1,tvg-id="LOUPE4K" tvg-name="LOUPE4K" tvg-logo="https://epg.v1.mk/logo/LOUPE4K.png" group-title="4K频道",Loupe 4K
+https://d2dw21aq0j0l5c.cloudfront.net/playlist_3840x2160.m3u8
+#EXTINF:-1,tvg-id="FASHIONONE" tvg-name="FASHIONONE" tvg-logo="https://epg.v1.mk/logo/FASHIONONE.png" group-title="4K频道",Fashion 4K
+https://fash2043.cloudycdn.services/slive/ftv_ftv_4k_hevc_73d_42080_default_466_hls.smil/playlist.m3u8
+#EXTINF:-1,tvg-id="咪咕全民热练" tvg-name="咪咕全民热练" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="其他",咪咕全民热练
+http://livetv.wqwqwq.sbs/itv/3000000020000031315.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="求索动物" tvg-name="求索动物" tvg-logo="https://epg.v1.mk/logo/求索动物.png" group-title="其他",求索动物
+http://livetv.wqwqwq.sbs/itv/6000000002000010046.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="求索纪录" tvg-name="求索纪录" tvg-logo="https://epg.v1.mk/logo/求索纪录.png" group-title="其他",求索纪录
+http://livetv.wqwqwq.sbs/itv/6000000002000032052.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="求索科学" tvg-name="求索科学" tvg-logo="https://epg.v1.mk/logo/求索科学.png" group-title="其他",求索科学
+http://livetv.wqwqwq.sbs/itv/6000000002000032344.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="求索生活" tvg-name="求索生活" tvg-logo="https://epg.v1.mk/logo/求索生活.png" group-title="其他",求索生活
+http://livetv.wqwqwq.sbs/itv/6000000002000003382.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="NewTV精品综合" tvg-name="NewTV精品综合" tvg-logo="https://epg.v1.mk/logo/NewTV精品综合.png" group-title="NEWTV",NewTV-精品综合
+http://livetv.wqwqwq.sbs/itv/1000000004000019008.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="newtv精品大剧" tvg-name="newtv精品大剧" tvg-logo="https://epg.v1.mk/logo/newtv精品大剧.png" group-title="NEWTV",NewTV-精品大剧
+http://livetv.wqwqwq.sbs/itv/1000000004000013968.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="newtv精品纪录" tvg-name="newtv精品纪录" tvg-logo="https://epg.v1.mk/logo/newtv精品纪录.png" group-title="NEWTV",NewTV-精品纪录
+http://livetv.wqwqwq.sbs/itv/1000000004000013730.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="newtv精品体育" tvg-name="newtv精品体育" tvg-logo="https://epg.v1.mk/logo/newtv精品体育.png" group-title="NEWTV",NewTV-精品体育
+http://livetv.wqwqwq.sbs/itv/1000000004000014634.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="NEWTV精品萌宠" tvg-name="NEWTV精品萌宠" tvg-logo="https://epg.v1.mk/logo/NEWTV精品萌宠.png" group-title="NEWTV",NewTV-精品萌宠
+http://livetv.wqwqwq.sbs/itv/1000000006000032328.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="newtv爱情喜剧" tvg-name="newtv爱情喜剧" tvg-logo="https://epg.v1.mk/logo/newtv爱情喜剧.png" group-title="NEWTV",NewTV-爱情喜剧
+http://livetv.wqwqwq.sbs/itv/2000000003000000010.m3u8?cdn=hnbblive
+#EXTINF:-1,tvg-id="newtv超级电视剧" tvg-name="newtv超级电视剧" tvg-logo="https://epg.v1.mk/logo/newtv超级电视剧.png" group-title="NEWTV",NewTV-超级电视剧
+http://livetv.wqwqwq.sbs/itv/1000000006000268003.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="newtv超级电影" tvg-name="newtv超级电影" tvg-logo="https://epg.v1.mk/logo/newtv超级电影.png" group-title="NEWTV",NewTV-超级电影
+http://livetv.wqwqwq.sbs/itv/1000000003000012426.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="newtv超级体育" tvg-name="newtv超级体育" tvg-logo="https://epg.v1.mk/logo/newtv超级体育.png" group-title="NEWTV",NewTV-超级体育
+http://livetv.wqwqwq.sbs/itv/1000000001000009601.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="newtv超级综艺" tvg-name="newtv超级综艺" tvg-logo="https://epg.v1.mk/logo/newtv超级综艺.png" group-title="NEWTV",NewTV-超级综艺
+http://livetv.wqwqwq.sbs/itv/1000000006000268002.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="newtv潮妈辣婆" tvg-name="newtv潮妈辣婆" tvg-logo="https://epg.v1.mk/logo/newtv潮妈辣婆.png" group-title="NEWTV",NewTV-潮妈辣婆
+http://livetv.wqwqwq.sbs/itv/2000000003000000018.m3u8?cdn=hnbblive
+#EXTINF:-1,tvg-id="NewTV东北热剧" tvg-name="NewTV东北热剧" tvg-logo="https://epg.v1.mk/logo/NewTV东北热剧.png" group-title="NEWTV",NewTV-东北热剧
+http://livetv.wqwqwq.sbs/itv/1000000005000266013.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="newtv动作电影" tvg-name="newtv动作电影" tvg-logo="https://epg.v1.mk/logo/newtv动作电影.png" group-title="NEWTV",NewTV-动作电影
+http://livetv.wqwqwq.sbs/itv/1000000004000018653.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="NewTV古装剧场" tvg-name="NewTV古装剧场" tvg-logo="https://epg.v1.mk/logo/NewTV古装剧场.png" group-title="NEWTV",NewTV-古装剧场
+http://livetv.wqwqwq.sbs/itv/2000000003000000024.m3u8?cdn=hnbblive
+#EXTINF:-1,tvg-id="NewTV欢乐剧场" tvg-name="NewTV欢乐剧场" tvg-logo="https://epg.v1.mk/logo/NewTV欢乐剧场.png" group-title="NEWTV",NewTV-欢乐剧场
+http://livetv.wqwqwq.sbs/itv/1000000005000266012.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="newtv家庭剧场" tvg-name="newtv家庭剧场" tvg-logo="https://epg.v1.mk/logo/newtv家庭剧场.png" group-title="NEWTV",NewTV-家庭剧场
+http://livetv.wqwqwq.sbs/itv/1000000004000008284.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="NewTV金牌综艺" tvg-name="NewTV金牌综艺" tvg-logo="https://epg.v1.mk/logo/NewTV金牌综艺.png" group-title="NEWTV",NewTV-金牌综艺
+http://livetv.wqwqwq.sbs/itv/1000000004000026167.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="newtv惊悚悬疑" tvg-name="newtv惊悚悬疑" tvg-logo="https://epg.v1.mk/logo/newtv惊悚悬疑.png" group-title="NEWTV",NewTV-惊悚悬疑
+http://livetv.wqwqwq.sbs/itv/1000000004000024282.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="newtv军旅剧场" tvg-name="newtv军旅剧场" tvg-logo="https://epg.v1.mk/logo/newtv军旅剧场.png" group-title="NEWTV",NewTV-军旅剧场
+http://livetv.wqwqwq.sbs/itv/2000000003000000014.m3u8?cdn=hnbblive
+#EXTINF:-1,tvg-id="newtv军事评论" tvg-name="newtv军事评论" tvg-logo="https://epg.v1.mk/logo/newtv军事评论.png" group-title="NEWTV",NewTV-军事评论
+http://livetv.wqwqwq.sbs/itv/2000000003000000022.m3u8?cdn=hnbblive
+#EXTINF:-1,tvg-id="NewTV魅力潇湘" tvg-name="NewTV魅力潇湘" tvg-logo="https://epg.v1.mk/logo/NewTV魅力潇湘.png" group-title="NEWTV",NewTV-魅力潇湘
+http://livetv.wqwqwq.sbs/itv/1000000001000006197.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="NewTV明星大片" tvg-name="NewTV明星大片" tvg-logo="https://epg.v1.mk/logo/NewTV明星大片.png" group-title="NEWTV",NewTV-明星大片
+http://livetv.wqwqwq.sbs/itv/2000000003000000016.m3u8?cdn=hnbblive
+#EXTINF:-1,tvg-id="newtv农业致富" tvg-name="newtv农业致富" tvg-logo="https://epg.v1.mk/logo/newtv农业致富.png" group-title="NEWTV",NewTV-农业致富
+http://livetv.wqwqwq.sbs/itv/2000000003000000003.m3u8?cdn=hnbblive
+#EXTINF:-1,tvg-id="NEWTV武博世界" tvg-name="NEWTV武博世界" tvg-logo="https://epg.v1.mk/logo/NEWTV武博世界.png" group-title="NEWTV",NewTV-武博世界
+http://livetv.wqwqwq.sbs/itv/2000000003000000007.m3u8?cdn=hnbblive
+#EXTINF:-1,tvg-id="newtv炫舞未来" tvg-name="newtv炫舞未来" tvg-logo="https://epg.v1.mk/logo/newtv炫舞未来.png" group-title="NEWTV",NewTV-炫舞未来
+http://livetv.wqwqwq.sbs/itv/1000000001000000515.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="newtv怡伴健康" tvg-name="newtv怡伴健康" tvg-logo="https://epg.v1.mk/logo/newtv怡伴健康.png" group-title="NEWTV",NewTV-怡伴健康
+http://livetv.wqwqwq.sbs/itv/1000000005000266011.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="newtv中国功夫" tvg-name="newtv中国功夫" tvg-logo="https://epg.v1.mk/logo/newtv中国功夫.png" group-title="NEWTV",NewTV-中国功夫
+http://livetv.wqwqwq.sbs/itv/2000000003000000009.m3u8?cdn=hnbblive
+#EXTINF:-1,tvg-id="NEWTV黑莓电影" tvg-name="NEWTV黑莓电影" tvg-logo="https://epg.v1.mk/logo/NEWTV黑莓电影.png" group-title="NEWTV",NewTV-黑莓电影
+http://livetv.wqwqwq.sbs/itv/1000000004000019624.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="NEWTV黑莓动画" tvg-name="NEWTV黑莓动画" tvg-logo="https://epg.v1.mk/logo/NEWTV黑莓动画.png" group-title="NEWTV",NewTV-黑莓动画
+http://livetv.wqwqwq.sbs/itv/1000000004000021734.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="NEWTV哒啵电竞" tvg-name="NEWTV哒啵电竞" tvg-logo="https://epg.v1.mk/logo/哒啵电竞.png" group-title="NEWTV",NewTV-哒啵电竞
+http://livetv.wqwqwq.sbs/itv/1000000006000032327.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="NEWTV哒啵赛事" tvg-name="NEWTV哒啵赛事" tvg-logo="https://epg.v1.mk/logo/哒啵赛事.png" group-title="NEWTV",NewTV-哒啵赛事
+http://livetv.wqwqwq.sbs/itv/1000000001000003775.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="SITV动漫秀场" tvg-name="SITV动漫秀场" tvg-logo="https://epg.v1.mk/logo/SITV.png" group-title="其他",SiTV-动漫秀场
+http://livetv.wqwqwq.sbs/itv/5000000011000031113.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="SITV都市剧场" tvg-name="SITV都市剧场" tvg-logo="https://epg.v1.mk/logo/SITV都市剧场.png" group-title="其他",SiTV-都市剧场
+http://livetv.wqwqwq.sbs/itv/5000000011000031111.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="SITV法治天地" tvg-name="SITV法治天地" tvg-logo="https://epg.v1.mk/logo/SITV法治天地.png" group-title="其他",SiTV-法治天地
+http://livetv.wqwqwq.sbs/itv/9001547084732463424.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="SITV欢笑剧场" tvg-name="SITV欢笑剧场" tvg-logo="https://epg.v1.mk/logo/SITV欢笑剧场.png" group-title="其他",SiTV-欢笑剧场
+http://livetv.wqwqwq.sbs/itv/5000000002000009455.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="SITV欢笑剧场" tvg-name="SITV欢笑剧场" tvg-logo="https://epg.v1.mk/logo/SITV欢笑剧场.png" group-title="4K频道",SiTV-欢笑剧场-4K
+http://livetv.wqwqwq.sbs/itv/5000000007000010001.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="SITV金色学堂" tvg-name="SITV金色学堂" tvg-logo="https://epg.v1.mk/logo/SITV金色学堂.png" group-title="其他",SiTV-金色学堂
+http://livetv.wqwqwq.sbs/itv/5000000010000026105.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="SITV劲爆体育" tvg-name="SITV劲爆体育" tvg-logo="https://epg.v1.mk/logo/SITV劲爆体育.png" group-title="其他",SiTV-劲爆体育
+http://livetv.wqwqwq.sbs/itv/5000000002000029972.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="SITV乐游" tvg-name="SITV乐游" tvg-logo="https://epg.v1.mk/logo/SITV乐游.png" group-title="其他",SiTV-乐游
+http://livetv.wqwqwq.sbs/itv/5000000011000031112.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="SITV魅力足球" tvg-name="SITV魅力足球" tvg-logo="https://epg.v1.mk/logo/SITV.png" group-title="其他",SiTV-魅力足球
+http://livetv.wqwqwq.sbs/itv/5000000011000031207.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="SITV七彩戏剧" tvg-name="SITV七彩戏剧" tvg-logo="https://epg.v1.mk/logo/SITV七彩戏剧.png" group-title="其他",SiTV-七彩戏剧
+http://livetv.wqwqwq.sbs/itv/5000000011000031116.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="SITV生活时尚" tvg-name="SITV生活时尚" tvg-logo="https://epg.v1.mk/logo/SITV.png" group-title="其他",SiTV-生活时尚
+http://livetv.wqwqwq.sbs/itv/5000000002000019634.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="SITV游戏风云" tvg-name="SITV游戏风云" tvg-logo="https://epg.v1.mk/logo/SITV.png" group-title="其他",SiTV-游戏风云
+http://livetv.wqwqwq.sbs/itv/5000000011000031114.m3u8?cdn=bestzb
+#EXTINF:-1,tvg-id="IHOT爱电竞" tvg-name="IHOT爱电竞" tvg-logo="https://epg.v1.mk/logo/IHOT爱电竞.png" group-title="IHOT",iHOT-爱电竞
+http://livetv.wqwqwq.sbs/itv/6000000006000230630.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="IHOT爱谍战" tvg-name="IHOT爱谍战" tvg-logo="https://epg.v1.mk/logo/IHOT爱谍战.png" group-title="IHOT",iHOT-爱谍战
+http://livetv.wqwqwq.sbs/itv/6000000006000070630.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="IHOT爱动漫" tvg-name="IHOT爱动漫" tvg-logo="https://epg.v1.mk/logo/IHOT爱动漫.png" group-title="IHOT",iHOT-爱动漫
+http://livetv.wqwqwq.sbs/itv/6000000006000280630.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="IHOT爱都市" tvg-name="IHOT爱都市" tvg-logo="https://epg.v1.mk/logo/IHOT爱都市.png" group-title="IHOT",iHOT-爱都市
+http://livetv.wqwqwq.sbs/itv/6000000006000080630.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="IHOT爱怀旧" tvg-name="IHOT爱怀旧" tvg-logo="https://epg.v1.mk/logo/IHOT爱怀旧.png" group-title="IHOT",iHOT-爱怀旧
+http://livetv.wqwqwq.sbs/itv/6000000006000260630.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="IHOT爱经典" tvg-name="IHOT爱经典" tvg-logo="https://epg.v1.mk/logo/IHOT爱经典.png" group-title="IHOT",iHOT-爱经典
+http://livetv.wqwqwq.sbs/itv/6000000006000060630.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="IHOT爱科幻" tvg-name="IHOT爱科幻" tvg-logo="https://epg.v1.mk/logo/IHOT爱科幻.png" group-title="IHOT",iHOT-爱科幻
+http://livetv.wqwqwq.sbs/itv/6000000006000020630.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="IHOT爱科学" tvg-name="IHOT爱科学" tvg-logo="https://epg.v1.mk/logo/IHOT爱科学.png" group-title="IHOT",iHOT-爱科学
+http://livetv.wqwqwq.sbs/itv/6000000006000160630.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="IHOT爱浪漫" tvg-name="IHOT爱浪漫" tvg-logo="https://epg.v1.mk/logo/IHOT爱浪漫.png" group-title="IHOT",iHOT-爱浪漫
+http://livetv.wqwqwq.sbs/itv/6000000006000040630.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="IHOT爱历史" tvg-name="IHOT爱历史" tvg-logo="https://epg.v1.mk/logo/IHOT爱历史.png" group-title="IHOT",iHOT-爱历史
+http://livetv.wqwqwq.sbs/itv/6000000006000150630.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="IHOT爱旅行" tvg-name="IHOT爱旅行" tvg-logo="https://epg.v1.mk/logo/IHOT爱旅行.png" group-title="IHOT",iHOT-爱旅行
+http://livetv.wqwqwq.sbs/itv/6000000006000250630.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="IHOT爱奇谈" tvg-name="IHOT爱奇谈" tvg-logo="https://epg.v1.mk/logo/IHOT爱奇谈.png" group-title="IHOT",iHOT-爱奇谈
+http://livetv.wqwqwq.sbs/itv/6000000006000270630.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="IHOT爱青春" tvg-name="IHOT爱青春" tvg-logo="https://epg.v1.mk/logo/IHOT爱青春.png" group-title="IHOT",iHOT-爱青春
+http://livetv.wqwqwq.sbs/itv/6000000006000100630.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="IHOT爱赛车" tvg-name="IHOT爱赛车" tvg-logo="https://epg.v1.mk/logo/IHOT爱赛车.png" group-title="IHOT",iHOT-爱赛车
+http://livetv.wqwqwq.sbs/itv/6000000006000240630.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="IHOT爱体育" tvg-name="IHOT爱体育" tvg-logo="https://epg.v1.mk/logo/IHOT爱体育.png" group-title="IHOT",iHOT-爱体育
+http://livetv.wqwqwq.sbs/itv/6000000006000290630.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="IHOT爱玩具" tvg-name="IHOT爱玩具" tvg-logo="https://epg.v1.mk/logo/IHOT爱玩具.png" group-title="IHOT",iHOT-爱玩具
+http://livetv.wqwqwq.sbs/itv/6000000006000220630.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="IHOT爱喜剧" tvg-name="IHOT爱喜剧" tvg-logo="https://epg.v1.mk/logo/IHOT爱喜剧.png" group-title="IHOT",iHOT-爱喜剧
+http://livetv.wqwqwq.sbs/itv/6000000006000010630.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="IHOT爱悬疑" tvg-name="IHOT爱悬疑" tvg-logo="https://epg.v1.mk/logo/IHOT爱悬疑.png" group-title="IHOT",iHOT-爱悬疑
+http://livetv.wqwqwq.sbs/itv/6000000006000050630.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="IHOT爱幼教" tvg-name="IHOT爱幼教" tvg-logo="https://epg.v1.mk/logo/IHOT爱幼教.png" group-title="IHOT",iHOT-爱幼教
+http://livetv.wqwqwq.sbs/itv/6000000006000180630.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="IHOT爱院线" tvg-name="IHOT爱院线" tvg-logo="https://epg.v1.mk/logo/IHOT爱院线.png" group-title="IHOT",iHOT-爱院线
+http://livetv.wqwqwq.sbs/itv/6000000006000030630.m3u8?cdn=wasusyt
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-1
+http://livetv.wqwqwq.sbs/itv/3000000001000005308.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-2
+http://livetv.wqwqwq.sbs/itv/3000000001000005969.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-3
+http://livetv.wqwqwq.sbs/itv/3000000001000007218.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-4
+http://livetv.wqwqwq.sbs/itv/3000000001000008001.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-5
+http://livetv.wqwqwq.sbs/itv/3000000001000008176.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-6
+http://livetv.wqwqwq.sbs/itv/3000000001000008379.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-7
+http://livetv.wqwqwq.sbs/itv/3000000001000010129.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-8
+http://livetv.wqwqwq.sbs/itv/3000000001000010948.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-9
+http://livetv.wqwqwq.sbs/itv/3000000001000028638.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-10
+http://livetv.wqwqwq.sbs/itv/3000000001000031494.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-11
+http://livetv.wqwqwq.sbs/itv/3000000010000005837.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-12
+http://livetv.wqwqwq.sbs/itv/3000000020000011518.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-13
+http://livetv.wqwqwq.sbs/itv/3000000020000011519.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-14
+http://livetv.wqwqwq.sbs/itv/3000000020000011520.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-15
+http://livetv.wqwqwq.sbs/itv/3000000020000011521.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-16
+http://livetv.wqwqwq.sbs/itv/3000000020000011522.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-17
+http://livetv.wqwqwq.sbs/itv/3000000020000011523.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-18
+http://livetv.wqwqwq.sbs/itv/3000000020000011524.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-19
+http://livetv.wqwqwq.sbs/itv/3000000020000011525.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-20
+http://livetv.wqwqwq.sbs/itv/3000000020000011528.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-21
+http://livetv.wqwqwq.sbs/itv/3000000020000011529.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-22
+http://livetv.wqwqwq.sbs/itv/3000000020000011530.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-23
+http://livetv.wqwqwq.sbs/itv/3000000020000011531.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-24
+http://livetv.wqwqwq.sbs/itv/3000000010000000097.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-25
+http://livetv.wqwqwq.sbs/itv/3000000010000002019.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-26
+http://livetv.wqwqwq.sbs/itv/3000000010000002809.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-27
+http://livetv.wqwqwq.sbs/itv/3000000010000003915.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-28
+http://livetv.wqwqwq.sbs/itv/3000000010000004193.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-29
+http://livetv.wqwqwq.sbs/itv/3000000010000006077.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-30
+http://livetv.wqwqwq.sbs/itv/3000000010000006658.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-31
+http://livetv.wqwqwq.sbs/itv/3000000010000009788.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-32
+http://livetv.wqwqwq.sbs/itv/3000000010000010833.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-33
+http://livetv.wqwqwq.sbs/itv/3000000010000011297.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-34
+http://livetv.wqwqwq.sbs/itv/3000000010000011518.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-35
+http://livetv.wqwqwq.sbs/itv/3000000010000012558.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-36
+http://livetv.wqwqwq.sbs/itv/3000000010000012616.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-37
+http://livetv.wqwqwq.sbs/itv/3000000010000015470.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-38
+http://livetv.wqwqwq.sbs/itv/3000000010000015560.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-39
+http://livetv.wqwqwq.sbs/itv/3000000010000017678.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-40
+http://livetv.wqwqwq.sbs/itv/3000000010000019839.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-41
+http://livetv.wqwqwq.sbs/itv/3000000010000021904.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-42
+http://livetv.wqwqwq.sbs/itv/3000000010000023434.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-43
+http://livetv.wqwqwq.sbs/itv/3000000010000025380.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-44
+http://livetv.wqwqwq.sbs/itv/3000000010000027691.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_咪视通-45
+http://livetv.wqwqwq.sbs/itv/3000000010000031669.m3u8?cdn=FifastbLive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_湖南bblive-1
+http://livetv.wqwqwq.sbs/itv/2000000003000000060.m3u8?cdn=hnbblive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_湖南bblive-2
+http://livetv.wqwqwq.sbs/itv/2000000003000000061.m3u8?cdn=hnbblive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_湖南bblive-3
+http://livetv.wqwqwq.sbs/itv/2000000003000000062.m3u8?cdn=hnbblive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_湖南bblive-4
+http://livetv.wqwqwq.sbs/itv/2000000003000000063.m3u8?cdn=hnbblive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_湖南bblive-5
+http://livetv.wqwqwq.sbs/itv/2000000003000000064.m3u8?cdn=hnbblive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_湖南bblive-6
+http://livetv.wqwqwq.sbs/itv/2000000003000000065.m3u8?cdn=hnbblive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_易视腾-1
+http://livetv.wqwqwq.sbs/itv/1000000006000270001.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_易视腾-2
+http://livetv.wqwqwq.sbs/itv/1000000006000270002.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_易视腾-3
+http://livetv.wqwqwq.sbs/itv/1000000006000270003.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_易视腾-4
+http://livetv.wqwqwq.sbs/itv/1000000006000270004.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_易视腾-5
+http://livetv.wqwqwq.sbs/itv/1000000006000270005.m3u8?cdn=ystenlive
+#EXTINF:-1,tvg-id="咪咕4k" tvg-name="咪咕4k" tvg-logo="https://epg.v1.mk/logo/咪咕4k.png" group-title="咪咕体育",咪咕视频_8M1080_易视腾-6
+http://livetv.wqwqwq.sbs/itv/1000000006000270006.m3u8?cdn=ystenlive
diff --git a/dashboard/package-lock.json b/dashboard/package-lock.json
index b43e5fb..74a3235 100644
--- a/dashboard/package-lock.json
+++ b/dashboard/package-lock.json
@@ -1,22 +1,52 @@
{
"name": "dashboard",
- "version": "0.0.0",
+ "version": "0.0.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "dashboard",
- "version": "0.0.0",
+ "version": "0.0.1",
"dependencies": {
- "@primevue/themes": "^4.2.1",
- "primevue": "^4.2.1",
- "vue": "^3.5.12"
+ "@fastify/static": "^8.2.0",
+ "artplayer": "^5.3.0",
+ "axios": "1.12.0",
+ "echarts": "^5.6.0",
+ "fastify": "^5.6.1",
+ "flv.js": "^1.6.2",
+ "hls.js": "^1.6.13",
+ "json-server": "^0.17.4",
+ "pinia": "^2.2.6",
+ "shaka-player": "^4.16.3",
+ "v-viewer": "^3.0.22",
+ "viewerjs": "^1.11.0",
+ "vue": "^3.5.12",
+ "vue-echarts": "^7.0.3",
+ "vue-router": "^4.4.5"
},
"devDependencies": {
- "@primevue/auto-import-resolver": "^4.2.1",
- "@vitejs/plugin-vue": "^5.1.4",
+ "@arco-design/web-vue": "^2.56.3",
+ "@playwright/test": "^1.55.1",
+ "@tailwindcss/postcss": "^4.1.13",
+ "@vitejs/plugin-vue": "^6.0.1",
+ "autoprefixer": "^10.4.21",
+ "postcss": "^8.5.6",
+ "tailwindcss": "^4.1.13",
"unplugin-vue-components": "^0.27.4",
- "vite": "^5.4.10"
+ "vite": "^7.1.7"
+ }
+ },
+ "node_modules/@alloc/quick-lru": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmmirror.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
+ "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/@antfu/utils": {
@@ -29,31 +59,62 @@
"url": "https://github.com/sponsors/antfu"
}
},
+ "node_modules/@arco-design/color": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmmirror.com/@arco-design/color/-/color-0.4.0.tgz",
+ "integrity": "sha512-s7p9MSwJgHeL8DwcATaXvWT3m2SigKpxx4JA1BGPHL4gfvaQsmQfrLBDpjOJFJuJ2jG2dMt3R3P8Pm9E65q18g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color": "^3.1.3"
+ }
+ },
+ "node_modules/@arco-design/web-vue": {
+ "version": "2.57.0",
+ "resolved": "https://registry.npmmirror.com/@arco-design/web-vue/-/web-vue-2.57.0.tgz",
+ "integrity": "sha512-R5YReC3C2sG3Jv0+YuR3B7kzkq2KdhhQNCGXD8T11xAoa0zMt6SWTP1xJQOdZcM9du+q3z6tk5mRvh4qkieRJw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@arco-design/color": "^0.4.0",
+ "b-tween": "^0.3.3",
+ "b-validate": "^1.5.3",
+ "compute-scroll-into-view": "^1.0.20",
+ "dayjs": "^1.11.13",
+ "number-precision": "^1.6.0",
+ "resize-observer-polyfill": "^1.5.1",
+ "scroll-into-view-if-needed": "^2.2.31",
+ "vue": "^3.1.0"
+ },
+ "peerDependencies": {
+ "vue": "^3.1.0"
+ }
+ },
"node_modules/@babel/helper-string-parser": {
- "version": "7.25.9",
- "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
- "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
+ "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-identifier": {
- "version": "7.25.9",
- "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
- "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
+ "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==",
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/parser": {
- "version": "7.26.2",
- "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.26.2.tgz",
- "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==",
+ "version": "7.28.4",
+ "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.28.4.tgz",
+ "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==",
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.26.0"
+ "@babel/types": "^7.28.4"
},
"bin": {
"parser": "bin/babel-parser.js"
@@ -63,22 +124,22 @@
}
},
"node_modules/@babel/types": {
- "version": "7.26.0",
- "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.26.0.tgz",
- "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==",
+ "version": "7.28.4",
+ "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.28.4.tgz",
+ "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==",
"license": "MIT",
"dependencies": {
- "@babel/helper-string-parser": "^7.25.9",
- "@babel/helper-validator-identifier": "^7.25.9"
+ "@babel/helper-string-parser": "^7.27.1",
+ "@babel/helper-validator-identifier": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@esbuild/win32-x64": {
- "version": "0.21.5",
- "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
- "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
+ "version": "0.25.10",
+ "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.25.10.tgz",
+ "integrity": "sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==",
"cpu": [
"x64"
],
@@ -89,941 +150,3961 @@
"win32"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
- "node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.5.0",
- "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
- "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
+ "node_modules/@fastify/accept-negotiator": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmmirror.com/@fastify/accept-negotiator/-/accept-negotiator-2.0.1.tgz",
+ "integrity": "sha512-/c/TW2bO/v9JeEgoD/g1G5GxGeCF1Hafdf79WPmUlgYiBXummY0oX3VVq4yFkKKVBKDNlaDUYoab7g38RpPqCQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
"license": "MIT"
},
- "node_modules/@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "dev": true,
+ "node_modules/@fastify/ajv-compiler": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmmirror.com/@fastify/ajv-compiler/-/ajv-compiler-4.0.2.tgz",
+ "integrity": "sha512-Rkiu/8wIjpsf46Rr+Fitd3HRP+VsxUFDDeag0hs9L0ksfnwx2g7SPQQTFL0E8Qv+rfXzQOxBJnjUB9ITUDjfWQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
"license": "MIT",
"dependencies": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- },
- "engines": {
- "node": ">= 8"
+ "ajv": "^8.12.0",
+ "ajv-formats": "^3.0.1",
+ "fast-uri": "^3.0.0"
}
},
- "node_modules/@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "dev": true,
+ "node_modules/@fastify/error": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmmirror.com/@fastify/error/-/error-4.2.0.tgz",
+ "integrity": "sha512-RSo3sVDXfHskiBZKBPRgnQTtIqpi/7zhJOEmAxCiBcM7d0uwdGdxLlsCaLzGs8v8NnxIRlfG0N51p5yFaOentQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@fastify/fast-json-stringify-compiler": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmmirror.com/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-5.0.3.tgz",
+ "integrity": "sha512-uik7yYHkLr6fxd8hJSZ8c+xF4WafPK+XzneQDPU+D10r5X19GW8lJcom2YijX2+qtFF1ENJlHXKFM9ouXNJYgQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
"license": "MIT",
- "engines": {
- "node": ">= 8"
+ "dependencies": {
+ "fast-json-stringify": "^6.0.0"
}
},
- "node_modules/@nodelib/fs.walk": {
- "version": "1.2.8",
- "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "dev": true,
+ "node_modules/@fastify/forwarded": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmmirror.com/@fastify/forwarded/-/forwarded-3.0.1.tgz",
+ "integrity": "sha512-JqDochHFqXs3C3Ml3gOY58zM7OqO9ENqPo0UqAjAjH8L01fRZqwX9iLeX34//kiJubF7r2ZQHtBRU36vONbLlw==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@fastify/merge-json-schemas": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmmirror.com/@fastify/merge-json-schemas/-/merge-json-schemas-0.2.1.tgz",
+ "integrity": "sha512-OA3KGBCy6KtIvLf8DINC5880o5iBlDX4SxzLQS8HorJAbqluzLRn80UXU0bxZn7UOFhFgpRJDasfwn9nG4FG4A==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
"license": "MIT",
"dependencies": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- },
- "engines": {
- "node": ">= 8"
+ "dequal": "^2.0.3"
}
},
- "node_modules/@primeuix/styled": {
- "version": "0.3.0",
- "resolved": "https://registry.npmmirror.com/@primeuix/styled/-/styled-0.3.0.tgz",
- "integrity": "sha512-XsLbmyM1u50A0EDATIHyqm5O/zOCSyNKPk4pNN8HFvEPehbsjf4tkXcRZAyaVvntSCLpV4XGAj7v5EDCQkBRlg==",
+ "node_modules/@fastify/proxy-addr": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmmirror.com/@fastify/proxy-addr/-/proxy-addr-5.1.0.tgz",
+ "integrity": "sha512-INS+6gh91cLUjB+PVHfu1UqcB76Sqtpyp7bnL+FYojhjygvOPA9ctiD/JDKsyD9Xgu4hUhCSJBPig/w7duNajw==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
"license": "MIT",
"dependencies": {
- "@primeuix/utils": "^0.3.0"
- },
- "engines": {
- "node": ">=12.11.0"
+ "@fastify/forwarded": "^3.0.0",
+ "ipaddr.js": "^2.1.0"
}
},
- "node_modules/@primeuix/utils": {
- "version": "0.3.0",
- "resolved": "https://registry.npmmirror.com/@primeuix/utils/-/utils-0.3.0.tgz",
- "integrity": "sha512-d6ymWez1n+iqwzAVhyOTmrOHl5qnSX2oGlTy97qGuA15gLai+MQaxONHFNdDia8Q7o396v7KK9IvhAx9VET/+A==",
+ "node_modules/@fastify/send": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmmirror.com/@fastify/send/-/send-4.1.0.tgz",
+ "integrity": "sha512-TMYeQLCBSy2TOFmV95hQWkiTYgC/SEx7vMdV+wnZVX4tt8VBLKzmH8vV9OzJehV0+XBfg+WxPMt5wp+JBUKsVw==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
"license": "MIT",
- "engines": {
- "node": ">=12.11.0"
+ "dependencies": {
+ "@lukeed/ms": "^2.0.2",
+ "escape-html": "~1.0.3",
+ "fast-decode-uri-component": "^1.0.1",
+ "http-errors": "^2.0.0",
+ "mime": "^3"
}
},
- "node_modules/@primevue/auto-import-resolver": {
- "version": "4.2.1",
- "resolved": "https://registry.npmmirror.com/@primevue/auto-import-resolver/-/auto-import-resolver-4.2.1.tgz",
- "integrity": "sha512-NR2jTme+R/p9oapvysh4y8vFR6/w2ymK4lOzx+pZHHb+QGh8lJvkvJ5NWhwOhO9YD4RGOlQGKA4kcY2Z1itafA==",
- "dev": true,
+ "node_modules/@fastify/static": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmmirror.com/@fastify/static/-/static-8.2.0.tgz",
+ "integrity": "sha512-PejC/DtT7p1yo3p+W7LiUtLMsV8fEvxAK15sozHy9t8kwo5r0uLYmhV/inURmGz1SkHZFz/8CNtHLPyhKcx4SQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
"license": "MIT",
"dependencies": {
- "@primevue/metadata": "4.2.1"
- },
+ "@fastify/accept-negotiator": "^2.0.0",
+ "@fastify/send": "^4.0.0",
+ "content-disposition": "^0.5.4",
+ "fastify-plugin": "^5.0.0",
+ "fastq": "^1.17.1",
+ "glob": "^11.0.0"
+ }
+ },
+ "node_modules/@isaacs/balanced-match": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmmirror.com/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz",
+ "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==",
+ "license": "MIT",
"engines": {
- "node": ">=12.11.0"
+ "node": "20 || >=22"
}
},
- "node_modules/@primevue/core": {
- "version": "4.2.1",
- "resolved": "https://registry.npmmirror.com/@primevue/core/-/core-4.2.1.tgz",
- "integrity": "sha512-L81TZSZU8zRznIi2g6IWwlZ5wraaE8DrNUJyxieCRCTpbSF3rSlYmhDEuzal8PfE0RuvXpRsxqedTHxz5cdqPg==",
+ "node_modules/@isaacs/brace-expansion": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmmirror.com/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz",
+ "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==",
"license": "MIT",
"dependencies": {
- "@primeuix/styled": "^0.3.0",
- "@primeuix/utils": "^0.3.0"
+ "@isaacs/balanced-match": "^4.0.1"
},
"engines": {
- "node": ">=12.11.0"
- },
- "peerDependencies": {
- "vue": "^3.3.0"
+ "node": "20 || >=22"
}
},
- "node_modules/@primevue/icons": {
- "version": "4.2.1",
- "resolved": "https://registry.npmmirror.com/@primevue/icons/-/icons-4.2.1.tgz",
- "integrity": "sha512-TOhxgkcmgBqmlHlf2x+gs4874iHopkow0gRAC5FztZTgTZQrqy8hPIA9b4O1lW7P6GOjGuVIwSH8y2lw6Q8koA==",
- "license": "MIT",
+ "node_modules/@isaacs/cliui": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmmirror.com/@isaacs/cliui/-/cliui-8.0.2.tgz",
+ "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+ "license": "ISC",
"dependencies": {
- "@primeuix/utils": "^0.3.0",
- "@primevue/core": "4.2.1"
+ "string-width": "^5.1.2",
+ "string-width-cjs": "npm:string-width@^4.2.0",
+ "strip-ansi": "^7.0.1",
+ "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+ "wrap-ansi": "^8.1.0",
+ "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
},
"engines": {
- "node": ">=12.11.0"
+ "node": ">=12"
}
},
- "node_modules/@primevue/metadata": {
- "version": "4.2.1",
- "resolved": "https://registry.npmmirror.com/@primevue/metadata/-/metadata-4.2.1.tgz",
- "integrity": "sha512-XX29c2FtbXo0EX8GoYYT9os0FMxAZBPqq6VTAhbHrIUWzKnR8SVrxWoyy6G0wbzP3qXD4X3T7wUhjvQYHtTzLg==",
- "dev": true,
+ "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.2.2.tgz",
+ "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
"license": "MIT",
"engines": {
- "node": ">=12.11.0"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
}
},
- "node_modules/@primevue/themes": {
- "version": "4.2.1",
- "resolved": "https://registry.npmmirror.com/@primevue/themes/-/themes-4.2.1.tgz",
- "integrity": "sha512-byp4YejyVdrOpRRbq5vBtaDBFHUq7Wc0aGWwII1fliYbwQ+WXn/hCAYhaXwRrwweHpTiobiWWsS+PRLWJ7fBRw==",
+ "node_modules/@isaacs/cliui/node_modules/ansi-styles": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.3.tgz",
+ "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
"license": "MIT",
- "dependencies": {
- "@primeuix/styled": "^0.3.0"
- },
"engines": {
- "node": ">=12.11.0"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/@rollup/pluginutils": {
- "version": "5.1.3",
- "resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.1.3.tgz",
- "integrity": "sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==",
- "dev": true,
+ "node_modules/@isaacs/cliui/node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "license": "MIT"
+ },
+ "node_modules/@isaacs/cliui/node_modules/string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmmirror.com/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
"license": "MIT",
"dependencies": {
- "@types/estree": "^1.0.0",
- "estree-walker": "^2.0.2",
- "picomatch": "^4.0.2"
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
},
"engines": {
- "node": ">=14.0.0"
- },
- "peerDependencies": {
- "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
+ "node": ">=12"
},
- "peerDependenciesMeta": {
- "rollup": {
- "optional": true
- }
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.24.4",
- "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.4.tgz",
- "integrity": "sha512-LTw1Dfd0mBIEqUVCxbvTE/LLo+9ZxVC9k99v1v4ahg9Aak6FpqOfNu5kRkeTAn0wphoC4JU7No1/rL+bBCEwhg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@types/estree": {
- "version": "1.0.6",
- "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.6.tgz",
- "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@vitejs/plugin-vue": {
- "version": "5.1.4",
- "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-5.1.4.tgz",
- "integrity": "sha512-N2XSI2n3sQqp5w7Y/AN/L2XDjBIRGqXko+eDp42sydYSBeJuSm5a1sLf8zakmo8u7tA8NmBgoDLA1HeOESjp9A==",
- "dev": true,
+ "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.2.tgz",
+ "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==",
"license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
"engines": {
- "node": "^18.0.0 || >=20.0.0"
+ "node": ">=12"
},
- "peerDependencies": {
- "vite": "^5.0.0",
- "vue": "^3.2.25"
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
}
},
- "node_modules/@vue/compiler-core": {
- "version": "3.5.12",
- "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.12.tgz",
- "integrity": "sha512-ISyBTRMmMYagUxhcpyEH0hpXRd/KqDU4ymofPgl2XAkY9ZhQ+h0ovEZJIiPop13UmR/54oA2cgMDjgroRelaEw==",
+ "node_modules/@isaacs/cliui/node_modules/wrap-ansi": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
"license": "MIT",
"dependencies": {
- "@babel/parser": "^7.25.3",
- "@vue/shared": "3.5.12",
- "entities": "^4.5.0",
- "estree-walker": "^2.0.2",
- "source-map-js": "^1.2.0"
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
- "node_modules/@vue/compiler-dom": {
- "version": "3.5.12",
- "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.12.tgz",
- "integrity": "sha512-9G6PbJ03uwxLHKQ3P42cMTi85lDRvGLB2rSGOiQqtXELat6uI4n8cNz9yjfVHRPIu+MsK6TE418Giruvgptckg==",
- "license": "MIT",
+ "node_modules/@isaacs/fs-minipass": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmmirror.com/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz",
+ "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==",
+ "dev": true,
+ "license": "ISC",
"dependencies": {
- "@vue/compiler-core": "3.5.12",
- "@vue/shared": "3.5.12"
+ "minipass": "^7.0.4"
+ },
+ "engines": {
+ "node": ">=18.0.0"
}
},
- "node_modules/@vue/compiler-sfc": {
- "version": "3.5.12",
- "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.12.tgz",
- "integrity": "sha512-2k973OGo2JuAa5+ZlekuQJtitI5CgLMOwgl94BzMCsKZCX/xiqzJYzapl4opFogKHqwJk34vfsaKpfEhd1k5nw==",
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.13",
+ "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@babel/parser": "^7.25.3",
- "@vue/compiler-core": "3.5.12",
- "@vue/compiler-dom": "3.5.12",
- "@vue/compiler-ssr": "3.5.12",
- "@vue/shared": "3.5.12",
- "estree-walker": "^2.0.2",
- "magic-string": "^0.30.11",
- "postcss": "^8.4.47",
- "source-map-js": "^1.2.0"
+ "@jridgewell/sourcemap-codec": "^1.5.0",
+ "@jridgewell/trace-mapping": "^0.3.24"
}
},
- "node_modules/@vue/compiler-ssr": {
- "version": "3.5.12",
- "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.12.tgz",
- "integrity": "sha512-eLwc7v6bfGBSM7wZOGPmRavSWzNFF6+PdRhE+VFJhNCgHiF8AM7ccoqcv5kBXA2eWUfigD7byekvf/JsOfKvPA==",
+ "node_modules/@jridgewell/remapping": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmmirror.com/@jridgewell/remapping/-/remapping-2.3.5.tgz",
+ "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@vue/compiler-dom": "3.5.12",
- "@vue/shared": "3.5.12"
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
}
},
- "node_modules/@vue/reactivity": {
- "version": "3.5.12",
- "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.12.tgz",
- "integrity": "sha512-UzaN3Da7xnJXdz4Okb/BGbAaomRHc3RdoWqTzlvd9+WBR5m3J39J1fGcHes7U3za0ruYn/iYy/a1euhMEHvTAg==",
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "dev": true,
"license": "MIT",
- "dependencies": {
- "@vue/shared": "3.5.12"
+ "engines": {
+ "node": ">=6.0.0"
}
},
- "node_modules/@vue/runtime-core": {
- "version": "3.5.12",
- "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.12.tgz",
- "integrity": "sha512-hrMUYV6tpocr3TL3Ad8DqxOdpDe4zuQY4HPY3X/VRh+L2myQO8MFXPAMarIOSGNu0bFAjh1yBkMPXZBqCk62Uw==",
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
+ "license": "MIT"
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.31",
+ "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@vue/reactivity": "3.5.12",
- "@vue/shared": "3.5.12"
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
}
},
- "node_modules/@vue/runtime-dom": {
- "version": "3.5.12",
- "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.12.tgz",
- "integrity": "sha512-q8VFxR9A2MRfBr6/55Q3umyoN7ya836FzRXajPB6/Vvuv0zOPL+qltd9rIMzG/DbRLAIlREmnLsplEF/kotXKA==",
+ "node_modules/@lukeed/ms": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmmirror.com/@lukeed/ms/-/ms-2.0.2.tgz",
+ "integrity": "sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA==",
"license": "MIT",
- "dependencies": {
- "@vue/reactivity": "3.5.12",
- "@vue/runtime-core": "3.5.12",
- "@vue/shared": "3.5.12",
- "csstype": "^3.1.3"
+ "engines": {
+ "node": ">=8"
}
},
- "node_modules/@vue/server-renderer": {
- "version": "3.5.12",
- "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.12.tgz",
- "integrity": "sha512-I3QoeDDeEPZm8yR28JtY+rk880Oqmj43hreIBVTicisFTx/Dl7JpG72g/X7YF8hnQD3IFhkky5i2bPonwrTVPg==",
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@vue/compiler-ssr": "3.5.12",
- "@vue/shared": "3.5.12"
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
},
- "peerDependencies": {
- "vue": "3.5.12"
+ "engines": {
+ "node": ">= 8"
}
},
- "node_modules/@vue/shared": {
- "version": "3.5.12",
- "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.12.tgz",
- "integrity": "sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg==",
- "license": "MIT"
- },
- "node_modules/acorn": {
- "version": "8.14.0",
- "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.14.0.tgz",
- "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
"dev": true,
"license": "MIT",
- "bin": {
- "acorn": "bin/acorn"
- },
"engines": {
- "node": ">=0.4.0"
+ "node": ">= 8"
}
},
- "node_modules/anymatch": {
- "version": "3.1.3",
- "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz",
- "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
"dev": true,
- "license": "ISC",
+ "license": "MIT",
"dependencies": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
},
"engines": {
"node": ">= 8"
}
},
- "node_modules/anymatch/node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "node_modules/@playwright/test": {
+ "version": "1.55.1",
+ "resolved": "https://registry.npmmirror.com/@playwright/test/-/test-1.55.1.tgz",
+ "integrity": "sha512-IVAh/nOJaw6W9g+RJVlIQJ6gSiER+ae6mKQ5CX1bERzQgbC1VSeBlwdvczT7pxb0GWiyrxH4TGKbMfDb4Sq/ig==",
"dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8.6"
+ "license": "Apache-2.0",
+ "dependencies": {
+ "playwright": "1.55.1"
},
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
+ "bin": {
+ "playwright": "cli.js"
+ },
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "node_modules/@rolldown/pluginutils": {
+ "version": "1.0.0-beta.29",
+ "resolved": "https://registry.npmmirror.com/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.29.tgz",
+ "integrity": "sha512-NIJgOsMjbxAXvoGq/X0gD7VPMQ8j9g0BiDaNjVNVjvl+iKXxL3Jre0v31RmBYeLEmkbj2s02v8vFTbUXi5XS2Q==",
"dev": true,
"license": "MIT"
},
- "node_modules/binary-extensions": {
- "version": "2.3.0",
- "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz",
- "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+ "node_modules/@rollup/pluginutils": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.3.0.tgz",
+ "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==",
"dev": true,
"license": "MIT",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "estree-walker": "^2.0.2",
+ "picomatch": "^4.0.2"
+ },
"engines": {
- "node": ">=8"
+ "node": ">=14.0.0"
},
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "peerDependencies": {
+ "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
}
},
- "node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "node_modules/@rollup/rollup-win32-x64-gnu": {
+ "version": "4.52.3",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.3.tgz",
+ "integrity": "sha512-s0hybmlHb56mWVZQj8ra9048/WZTPLILKxcvcq+8awSZmyiSUZjjem1AhU3Tf4ZKpYhK4mg36HtHDOe8QJS5PQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.52.3",
+ "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.3.tgz",
+ "integrity": "sha512-zGIbEVVXVtauFgl3MRwGWEN36P5ZGenHRMgNw88X5wEhEBpq0XrMEZwOn07+ICrwM17XO5xfMZqh0OldCH5VTA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@tailwindcss/node": {
+ "version": "4.1.13",
+ "resolved": "https://registry.npmmirror.com/@tailwindcss/node/-/node-4.1.13.tgz",
+ "integrity": "sha512-eq3ouolC1oEFOAvOMOBAmfCIqZBJuvWvvYWh5h5iOYfe1HFC6+GZ6EIL0JdM3/niGRJmnrOc+8gl9/HGUaaptw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "balanced-match": "^1.0.0"
+ "@jridgewell/remapping": "^2.3.4",
+ "enhanced-resolve": "^5.18.3",
+ "jiti": "^2.5.1",
+ "lightningcss": "1.30.1",
+ "magic-string": "^0.30.18",
+ "source-map-js": "^1.2.1",
+ "tailwindcss": "4.1.13"
}
},
- "node_modules/braces": {
- "version": "3.0.3",
- "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.3.tgz",
- "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "node_modules/@tailwindcss/oxide": {
+ "version": "4.1.13",
+ "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide/-/oxide-4.1.13.tgz",
+ "integrity": "sha512-CPgsM1IpGRa880sMbYmG1s4xhAy3xEt1QULgTJGQmZUeNgXFR7s1YxYygmJyBGtou4SyEosGAGEeYqY7R53bIA==",
"dev": true,
+ "hasInstallScript": true,
"license": "MIT",
"dependencies": {
- "fill-range": "^7.1.1"
+ "detect-libc": "^2.0.4",
+ "tar": "^7.4.3"
},
"engines": {
- "node": ">=8"
+ "node": ">= 10"
+ },
+ "optionalDependencies": {
+ "@tailwindcss/oxide-android-arm64": "4.1.13",
+ "@tailwindcss/oxide-darwin-arm64": "4.1.13",
+ "@tailwindcss/oxide-darwin-x64": "4.1.13",
+ "@tailwindcss/oxide-freebsd-x64": "4.1.13",
+ "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.13",
+ "@tailwindcss/oxide-linux-arm64-gnu": "4.1.13",
+ "@tailwindcss/oxide-linux-arm64-musl": "4.1.13",
+ "@tailwindcss/oxide-linux-x64-gnu": "4.1.13",
+ "@tailwindcss/oxide-linux-x64-musl": "4.1.13",
+ "@tailwindcss/oxide-wasm32-wasi": "4.1.13",
+ "@tailwindcss/oxide-win32-arm64-msvc": "4.1.13",
+ "@tailwindcss/oxide-win32-x64-msvc": "4.1.13"
}
},
- "node_modules/chokidar": {
- "version": "3.6.0",
- "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz",
- "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+ "node_modules/@tailwindcss/oxide-win32-x64-msvc": {
+ "version": "4.1.13",
+ "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.13.tgz",
+ "integrity": "sha512-3+LKesjXydTkHk5zXX01b5KMzLV1xl2mcktBJkje7rhFUpUlYJy7IMOLqjIRQncLTa1WZZiFY/foAeB5nmaiTw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@tailwindcss/postcss": {
+ "version": "4.1.13",
+ "resolved": "https://registry.npmmirror.com/@tailwindcss/postcss/-/postcss-4.1.13.tgz",
+ "integrity": "sha512-HLgx6YSFKJT7rJqh9oJs/TkBFhxuMOfUKSBEPYwV+t78POOBsdQ7crhZLzwcH3T0UyUuOzU/GK5pk5eKr3wCiQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "glob-parent": "~5.1.2",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.6.0"
+ "@alloc/quick-lru": "^5.2.0",
+ "@tailwindcss/node": "4.1.13",
+ "@tailwindcss/oxide": "4.1.13",
+ "postcss": "^8.4.41",
+ "tailwindcss": "4.1.13"
+ }
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.8.tgz",
+ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@vitejs/plugin-vue": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-6.0.1.tgz",
+ "integrity": "sha512-+MaE752hU0wfPFJEUAIxqw18+20euHHdxVtMvbFcOEpjEyfqXH/5DCoTHiVJ0J29EhTJdoTkjEv5YBKU9dnoTw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@rolldown/pluginutils": "1.0.0-beta.29"
},
"engines": {
- "node": ">= 8.10.0"
+ "node": "^20.19.0 || >=22.12.0"
},
- "funding": {
- "url": "https://paulmillr.com/funding/"
+ "peerDependencies": {
+ "vite": "^5.0.0 || ^6.0.0 || ^7.0.0",
+ "vue": "^3.2.25"
+ }
+ },
+ "node_modules/@vue/compiler-core": {
+ "version": "3.5.22",
+ "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.22.tgz",
+ "integrity": "sha512-jQ0pFPmZwTEiRNSb+i9Ow/I/cHv2tXYqsnHKKyCQ08irI2kdF5qmYedmF8si8mA7zepUFmJ2hqzS8CQmNOWOkQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.28.4",
+ "@vue/shared": "3.5.22",
+ "entities": "^4.5.0",
+ "estree-walker": "^2.0.2",
+ "source-map-js": "^1.2.1"
+ }
+ },
+ "node_modules/@vue/compiler-dom": {
+ "version": "3.5.22",
+ "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.22.tgz",
+ "integrity": "sha512-W8RknzUM1BLkypvdz10OVsGxnMAuSIZs9Wdx1vzA3mL5fNMN15rhrSCLiTm6blWeACwUwizzPVqGJgOGBEN/hA==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/compiler-core": "3.5.22",
+ "@vue/shared": "3.5.22"
+ }
+ },
+ "node_modules/@vue/compiler-sfc": {
+ "version": "3.5.22",
+ "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.22.tgz",
+ "integrity": "sha512-tbTR1zKGce4Lj+JLzFXDq36K4vcSZbJ1RBu8FxcDv1IGRz//Dh2EBqksyGVypz3kXpshIfWKGOCcqpSbyGWRJQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.28.4",
+ "@vue/compiler-core": "3.5.22",
+ "@vue/compiler-dom": "3.5.22",
+ "@vue/compiler-ssr": "3.5.22",
+ "@vue/shared": "3.5.22",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.30.19",
+ "postcss": "^8.5.6",
+ "source-map-js": "^1.2.1"
+ }
+ },
+ "node_modules/@vue/compiler-ssr": {
+ "version": "3.5.22",
+ "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.22.tgz",
+ "integrity": "sha512-GdgyLvg4R+7T8Nk2Mlighx7XGxq/fJf9jaVofc3IL0EPesTE86cP/8DD1lT3h1JeZr2ySBvyqKQJgbS54IX1Ww==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/compiler-dom": "3.5.22",
+ "@vue/shared": "3.5.22"
+ }
+ },
+ "node_modules/@vue/devtools-api": {
+ "version": "6.6.4",
+ "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.6.4.tgz",
+ "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==",
+ "license": "MIT"
+ },
+ "node_modules/@vue/reactivity": {
+ "version": "3.5.22",
+ "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.22.tgz",
+ "integrity": "sha512-f2Wux4v/Z2pqc9+4SmgZC1p73Z53fyD90NFWXiX9AKVnVBEvLFOWCEgJD3GdGnlxPZt01PSlfmLqbLYzY/Fw4A==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/shared": "3.5.22"
+ }
+ },
+ "node_modules/@vue/runtime-core": {
+ "version": "3.5.22",
+ "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.22.tgz",
+ "integrity": "sha512-EHo4W/eiYeAzRTN5PCextDUZ0dMs9I8mQ2Fy+OkzvRPUYQEyK9yAjbasrMCXbLNhF7P0OUyivLjIy0yc6VrLJQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/reactivity": "3.5.22",
+ "@vue/shared": "3.5.22"
+ }
+ },
+ "node_modules/@vue/runtime-dom": {
+ "version": "3.5.22",
+ "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.22.tgz",
+ "integrity": "sha512-Av60jsryAkI023PlN7LsqrfPvwfxOd2yAwtReCjeuugTJTkgrksYJJstg1e12qle0NarkfhfFu1ox2D+cQotww==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/reactivity": "3.5.22",
+ "@vue/runtime-core": "3.5.22",
+ "@vue/shared": "3.5.22",
+ "csstype": "^3.1.3"
+ }
+ },
+ "node_modules/@vue/server-renderer": {
+ "version": "3.5.22",
+ "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.22.tgz",
+ "integrity": "sha512-gXjo+ao0oHYTSswF+a3KRHZ1WszxIqO7u6XwNHqcqb9JfyIL/pbWrrh/xLv7jeDqla9u+LK7yfZKHih1e1RKAQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/compiler-ssr": "3.5.22",
+ "@vue/shared": "3.5.22"
},
- "optionalDependencies": {
- "fsevents": "~2.3.2"
+ "peerDependencies": {
+ "vue": "3.5.22"
}
},
- "node_modules/confbox": {
- "version": "0.1.8",
- "resolved": "https://registry.npmmirror.com/confbox/-/confbox-0.1.8.tgz",
- "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==",
- "dev": true,
+ "node_modules/@vue/shared": {
+ "version": "3.5.22",
+ "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.22.tgz",
+ "integrity": "sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w==",
"license": "MIT"
},
- "node_modules/csstype": {
- "version": "3.1.3",
- "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz",
- "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
+ "node_modules/abstract-logging": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmmirror.com/abstract-logging/-/abstract-logging-2.0.1.tgz",
+ "integrity": "sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==",
"license": "MIT"
},
- "node_modules/debug": {
- "version": "4.3.7",
- "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.7.tgz",
- "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
- "dev": true,
+ "node_modules/accepts": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz",
+ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
"license": "MIT",
"dependencies": {
- "ms": "^2.1.3"
+ "mime-types": "~2.1.34",
+ "negotiator": "0.6.3"
},
"engines": {
- "node": ">=6.0"
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/accepts/node_modules/negotiator": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz",
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/acorn": {
+ "version": "8.15.0",
+ "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.15.0.tgz",
+ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "8.17.1",
+ "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz",
+ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ajv-formats": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmmirror.com/ajv-formats/-/ajv-formats-3.0.1.tgz",
+ "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==",
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "^8.0.0"
+ },
+ "peerDependencies": {
+ "ajv": "^8.0.0"
},
"peerDependenciesMeta": {
- "supports-color": {
+ "ajv": {
"optional": true
}
}
},
- "node_modules/entities": {
- "version": "4.5.0",
- "resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz",
- "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
- "license": "BSD-2-Clause",
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "license": "MIT",
"engines": {
- "node": ">=0.12"
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
},
"funding": {
- "url": "https://github.com/fb55/entities?sponsor=1"
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/anymatch/node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmmirror.com/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
+ "license": "MIT"
+ },
+ "node_modules/artplayer": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmmirror.com/artplayer/-/artplayer-5.3.0.tgz",
+ "integrity": "sha512-yExO39MpEg4P+bxgChxx1eJfiUPE4q1QQRLCmqGhlsj+ANuaoEkR8hF93LdI5ZyrAcIbJkuEndxEiUoKobifDw==",
+ "license": "MIT",
+ "dependencies": {
+ "option-validator": "^2.0.6"
+ }
+ },
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+ "license": "MIT"
+ },
+ "node_modules/atomic-sleep": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz",
+ "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/autoprefixer": {
+ "version": "10.4.21",
+ "resolved": "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.21.tgz",
+ "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/autoprefixer"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "browserslist": "^4.24.4",
+ "caniuse-lite": "^1.0.30001702",
+ "fraction.js": "^4.3.7",
+ "normalize-range": "^0.1.2",
+ "picocolors": "^1.1.1",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "bin": {
+ "autoprefixer": "bin/autoprefixer"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ },
+ "peerDependencies": {
+ "postcss": "^8.1.0"
+ }
+ },
+ "node_modules/avvio": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmmirror.com/avvio/-/avvio-9.1.0.tgz",
+ "integrity": "sha512-fYASnYi600CsH/j9EQov7lECAniYiBFiiAtBNuZYLA2leLe9qOvZzqYHFjtIj6gD2VMoMLP14834LFWvr4IfDw==",
+ "license": "MIT",
+ "dependencies": {
+ "@fastify/error": "^4.0.0",
+ "fastq": "^1.17.1"
+ }
+ },
+ "node_modules/axios": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmmirror.com/axios/-/axios-1.12.0.tgz",
+ "integrity": "sha512-oXTDccv8PcfjZmPGlWsPSwtOJCZ/b6W5jAMCNcfwJbCzDckwG0jrYJFaWH1yvivfCXjVzV/SPDEhMB3Q+DSurg==",
+ "license": "MIT",
+ "dependencies": {
+ "follow-redirects": "^1.15.6",
+ "form-data": "^4.0.4",
+ "proxy-from-env": "^1.1.0"
+ }
+ },
+ "node_modules/b-tween": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmmirror.com/b-tween/-/b-tween-0.3.3.tgz",
+ "integrity": "sha512-oEHegcRpA7fAuc9KC4nktucuZn2aS8htymCPcP3qkEGPqiBH+GfqtqoG2l7LxHngg6O0HFM7hOeOYExl1Oz4ZA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/b-validate": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmmirror.com/b-validate/-/b-validate-1.5.3.tgz",
+ "integrity": "sha512-iCvCkGFskbaYtfQ0a3GmcQCHl/Sv1GufXFGuUQ+FE+WJa7A/espLOuFIn09B944V8/ImPj71T4+rTASxO2PAuA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/baseline-browser-mapping": {
+ "version": "2.8.9",
+ "resolved": "https://registry.npmmirror.com/baseline-browser-mapping/-/baseline-browser-mapping-2.8.9.tgz",
+ "integrity": "sha512-hY/u2lxLrbecMEWSB0IpGzGyDyeoMFQhCvZd2jGFSE5I17Fh01sYUBPCJtkWERw7zrac9+cIghxm/ytJa2X8iA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "baseline-browser-mapping": "dist/cli.js"
+ }
+ },
+ "node_modules/basic-auth": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmmirror.com/basic-auth/-/basic-auth-2.0.1.tgz",
+ "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "5.1.2"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/basic-auth/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "license": "MIT"
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/body-parser": {
+ "version": "1.20.3",
+ "resolved": "https://registry.npmmirror.com/body-parser/-/body-parser-1.20.3.tgz",
+ "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
+ "license": "MIT",
+ "dependencies": {
+ "bytes": "3.1.2",
+ "content-type": "~1.0.5",
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "http-errors": "2.0.0",
+ "iconv-lite": "0.4.24",
+ "on-finished": "2.4.1",
+ "qs": "6.13.0",
+ "raw-body": "2.5.2",
+ "type-is": "~1.6.18",
+ "unpipe": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fill-range": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.26.2",
+ "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.26.2.tgz",
+ "integrity": "sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "baseline-browser-mapping": "^2.8.3",
+ "caniuse-lite": "^1.0.30001741",
+ "electron-to-chromium": "^1.5.218",
+ "node-releases": "^2.0.21",
+ "update-browserslist-db": "^1.1.3"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/bytes": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz",
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/call-bind-apply-helpers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/call-bound": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmmirror.com/call-bound/-/call-bound-1.0.4.tgz",
+ "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "get-intrinsic": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001745",
+ "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001745.tgz",
+ "integrity": "sha512-ywt6i8FzvdgrrrGbr1jZVObnVv6adj+0if2/omv9cmR2oiZs30zL4DIyaptKcbOrBdOIc74QTMoJvSE2QHh5UQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "CC-BY-4.0"
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/chownr": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/chownr/-/chownr-3.0.0.tgz",
+ "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmmirror.com/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/color": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmmirror.com/color/-/color-3.2.1.tgz",
+ "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^1.9.3",
+ "color-string": "^1.6.0"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "license": "MIT"
+ },
+ "node_modules/color-string": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmmirror.com/color-string/-/color-string-1.9.1.tgz",
+ "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "^1.0.0",
+ "simple-swizzle": "^0.2.2"
+ }
+ },
+ "node_modules/color/node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/color/node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "license": "MIT",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/compressible": {
+ "version": "2.0.18",
+ "resolved": "https://registry.npmmirror.com/compressible/-/compressible-2.0.18.tgz",
+ "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": ">= 1.43.0 < 2"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/compressible/node_modules/mime-db": {
+ "version": "1.54.0",
+ "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.54.0.tgz",
+ "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/compression": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmmirror.com/compression/-/compression-1.8.1.tgz",
+ "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==",
+ "license": "MIT",
+ "dependencies": {
+ "bytes": "3.1.2",
+ "compressible": "~2.0.18",
+ "debug": "2.6.9",
+ "negotiator": "~0.6.4",
+ "on-headers": "~1.1.0",
+ "safe-buffer": "5.2.1",
+ "vary": "~1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/compute-scroll-into-view": {
+ "version": "1.0.20",
+ "resolved": "https://registry.npmmirror.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz",
+ "integrity": "sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/confbox": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmmirror.com/confbox/-/confbox-0.1.8.tgz",
+ "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/connect-pause": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmmirror.com/connect-pause/-/connect-pause-0.1.1.tgz",
+ "integrity": "sha512-a1gSWQBQD73krFXdUEYJom2RTFrWUL3YvXDCRkyv//GVXc79cdW9MngtRuN9ih4FDKBtfJAJId+BbDuX+1rh2w==",
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/content-disposition": {
+ "version": "0.5.4",
+ "resolved": "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz",
+ "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "5.2.1"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/content-type": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmmirror.com/content-type/-/content-type-1.0.5.tgz",
+ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/cookie": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmmirror.com/cookie/-/cookie-0.7.1.tgz",
+ "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",
+ "license": "MIT"
+ },
+ "node_modules/cors": {
+ "version": "2.8.5",
+ "resolved": "https://registry.npmmirror.com/cors/-/cors-2.8.5.tgz",
+ "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
+ "license": "MIT",
+ "dependencies": {
+ "object-assign": "^4",
+ "vary": "^1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/csstype": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz",
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
+ "license": "MIT"
+ },
+ "node_modules/dayjs": {
+ "version": "1.11.18",
+ "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.18.tgz",
+ "integrity": "sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/depd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/dequal": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmmirror.com/dequal/-/dequal-2.0.3.tgz",
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/destroy": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz",
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
+ }
+ },
+ "node_modules/detect-libc": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmmirror.com/detect-libc/-/detect-libc-2.1.1.tgz",
+ "integrity": "sha512-ecqj/sy1jcK1uWrwpR67UhYrIFQ+5WlGxth34WquCbamhFA6hkkwiu37o6J5xCHdo1oixJRfVRw+ywV+Hq/0Aw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/dunder-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz",
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.2.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/eastasianwidth": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+ "license": "MIT"
+ },
+ "node_modules/echarts": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.6.0.tgz",
+ "integrity": "sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "2.3.0",
+ "zrender": "5.6.1"
+ }
+ },
+ "node_modules/echarts/node_modules/tslib": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
+ "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==",
+ "license": "0BSD"
+ },
+ "node_modules/ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
+ "license": "MIT"
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.5.227",
+ "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.227.tgz",
+ "integrity": "sha512-ITxuoPfJu3lsNWUi2lBM2PaBPYgH3uqmxut5vmBxgYvyI4AlJ6P3Cai1O76mOrkJCBzq0IxWg/NtqOrpu/0gKA==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "license": "MIT"
+ },
+ "node_modules/encodeurl": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-2.0.0.tgz",
+ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/enhanced-resolve": {
+ "version": "5.18.3",
+ "resolved": "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz",
+ "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/errorhandler": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmmirror.com/errorhandler/-/errorhandler-1.5.1.tgz",
+ "integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==",
+ "license": "MIT",
+ "dependencies": {
+ "accepts": "~1.3.7",
+ "escape-html": "~1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/es-define-property": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz",
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-object-atoms": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
+ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-set-tostringtag": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
+ "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.6",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es6-promise": {
+ "version": "4.2.8",
+ "resolved": "https://registry.npmmirror.com/es6-promise/-/es6-promise-4.2.8.tgz",
+ "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==",
+ "license": "MIT"
+ },
+ "node_modules/esbuild": {
+ "version": "0.25.10",
+ "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.25.10.tgz",
+ "integrity": "sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.25.10",
+ "@esbuild/android-arm": "0.25.10",
+ "@esbuild/android-arm64": "0.25.10",
+ "@esbuild/android-x64": "0.25.10",
+ "@esbuild/darwin-arm64": "0.25.10",
+ "@esbuild/darwin-x64": "0.25.10",
+ "@esbuild/freebsd-arm64": "0.25.10",
+ "@esbuild/freebsd-x64": "0.25.10",
+ "@esbuild/linux-arm": "0.25.10",
+ "@esbuild/linux-arm64": "0.25.10",
+ "@esbuild/linux-ia32": "0.25.10",
+ "@esbuild/linux-loong64": "0.25.10",
+ "@esbuild/linux-mips64el": "0.25.10",
+ "@esbuild/linux-ppc64": "0.25.10",
+ "@esbuild/linux-riscv64": "0.25.10",
+ "@esbuild/linux-s390x": "0.25.10",
+ "@esbuild/linux-x64": "0.25.10",
+ "@esbuild/netbsd-arm64": "0.25.10",
+ "@esbuild/netbsd-x64": "0.25.10",
+ "@esbuild/openbsd-arm64": "0.25.10",
+ "@esbuild/openbsd-x64": "0.25.10",
+ "@esbuild/openharmony-arm64": "0.25.10",
+ "@esbuild/sunos-x64": "0.25.10",
+ "@esbuild/win32-arm64": "0.25.10",
+ "@esbuild/win32-ia32": "0.25.10",
+ "@esbuild/win32-x64": "0.25.10"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
+ "license": "MIT"
+ },
+ "node_modules/estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "license": "MIT"
+ },
+ "node_modules/etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/express": {
+ "version": "4.21.2",
+ "resolved": "https://registry.npmmirror.com/express/-/express-4.21.2.tgz",
+ "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==",
+ "license": "MIT",
+ "dependencies": {
+ "accepts": "~1.3.8",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.20.3",
+ "content-disposition": "0.5.4",
+ "content-type": "~1.0.4",
+ "cookie": "0.7.1",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "encodeurl": "~2.0.0",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "finalhandler": "1.3.1",
+ "fresh": "0.5.2",
+ "http-errors": "2.0.0",
+ "merge-descriptors": "1.0.3",
+ "methods": "~1.1.2",
+ "on-finished": "2.4.1",
+ "parseurl": "~1.3.3",
+ "path-to-regexp": "0.1.12",
+ "proxy-addr": "~2.0.7",
+ "qs": "6.13.0",
+ "range-parser": "~1.2.1",
+ "safe-buffer": "5.2.1",
+ "send": "0.19.0",
+ "serve-static": "1.16.2",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "type-is": "~1.6.18",
+ "utils-merge": "1.0.1",
+ "vary": "~1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.10.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/express-urlrewrite": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmmirror.com/express-urlrewrite/-/express-urlrewrite-1.4.0.tgz",
+ "integrity": "sha512-PI5h8JuzoweS26vFizwQl6UTF25CAHSggNv0J25Dn/IKZscJHWZzPrI5z2Y2jgOzIaw2qh8l6+/jUcig23Z2SA==",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "*",
+ "path-to-regexp": "^1.0.3"
+ }
+ },
+ "node_modules/express-urlrewrite/node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/express-urlrewrite/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "license": "MIT"
+ },
+ "node_modules/express-urlrewrite/node_modules/path-to-regexp": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-1.9.0.tgz",
+ "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==",
+ "license": "MIT",
+ "dependencies": {
+ "isarray": "0.0.1"
+ }
+ },
+ "node_modules/fast-decode-uri-component": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz",
+ "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==",
+ "license": "MIT"
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "license": "MIT"
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.3.tgz",
+ "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.8"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-json-stringify": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmmirror.com/fast-json-stringify/-/fast-json-stringify-6.1.0.tgz",
+ "integrity": "sha512-bRnlgdhNd5sr3041TDg//jagICPZPwVjDK7I58BDnlB49l87wdYpYIO4zOr2lzHTah5tbbiBLyfPPeIUqHS/nQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@fastify/merge-json-schemas": "^0.2.0",
+ "ajv": "^8.12.0",
+ "ajv-formats": "^3.0.1",
+ "fast-uri": "^3.0.0",
+ "json-schema-ref-resolver": "^3.0.0",
+ "rfdc": "^1.2.0"
+ }
+ },
+ "node_modules/fast-querystring": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmmirror.com/fast-querystring/-/fast-querystring-1.1.2.tgz",
+ "integrity": "sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==",
+ "license": "MIT",
+ "dependencies": {
+ "fast-decode-uri-component": "^1.0.1"
+ }
+ },
+ "node_modules/fast-uri": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmmirror.com/fast-uri/-/fast-uri-3.1.0.tgz",
+ "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/fastify": {
+ "version": "5.6.1",
+ "resolved": "https://registry.npmmirror.com/fastify/-/fastify-5.6.1.tgz",
+ "integrity": "sha512-WjjlOciBF0K8pDUPZoGPhqhKrQJ02I8DKaDIfO51EL0kbSMwQFl85cRwhOvmSDWoukNOdTo27gLN549pLCcH7Q==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@fastify/ajv-compiler": "^4.0.0",
+ "@fastify/error": "^4.0.0",
+ "@fastify/fast-json-stringify-compiler": "^5.0.0",
+ "@fastify/proxy-addr": "^5.0.0",
+ "abstract-logging": "^2.0.1",
+ "avvio": "^9.0.0",
+ "fast-json-stringify": "^6.0.0",
+ "find-my-way": "^9.0.0",
+ "light-my-request": "^6.0.0",
+ "pino": "^9.0.0",
+ "process-warning": "^5.0.0",
+ "rfdc": "^1.3.1",
+ "secure-json-parse": "^4.0.0",
+ "semver": "^7.6.0",
+ "toad-cache": "^3.7.0"
+ }
+ },
+ "node_modules/fastify-plugin": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmmirror.com/fastify-plugin/-/fastify-plugin-5.1.0.tgz",
+ "integrity": "sha512-FAIDA8eovSt5qcDgcBvDuX/v0Cjz0ohGhENZ/wpc3y+oZCY2afZ9Baqql3g/lC+OHRnciQol4ww7tuthOb9idw==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/fastq": {
+ "version": "1.19.1",
+ "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.19.1.tgz",
+ "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
+ "license": "ISC",
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmmirror.com/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/finalhandler": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.3.1.tgz",
+ "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "2.6.9",
+ "encodeurl": "~2.0.0",
+ "escape-html": "~1.0.3",
+ "on-finished": "2.4.1",
+ "parseurl": "~1.3.3",
+ "statuses": "2.0.1",
+ "unpipe": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/find-my-way": {
+ "version": "9.3.0",
+ "resolved": "https://registry.npmmirror.com/find-my-way/-/find-my-way-9.3.0.tgz",
+ "integrity": "sha512-eRoFWQw+Yv2tuYlK2pjFS2jGXSxSppAs3hSQjfxVKxM5amECzIgYYc1FEI8ZmhSh/Ig+FrKEz43NLRKJjYCZVg==",
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3",
+ "fast-querystring": "^1.0.0",
+ "safe-regex2": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/flv.js": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmmirror.com/flv.js/-/flv.js-1.6.2.tgz",
+ "integrity": "sha512-xre4gUbX1MPtgQRKj2pxJENp/RnaHaxYvy3YToVVCrSmAWUu85b9mug6pTXF6zakUjNP2lFWZ1rkSX7gxhB/2A==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "es6-promise": "^4.2.8",
+ "webworkify-webpack": "^2.1.5"
+ }
+ },
+ "node_modules/follow-redirects": {
+ "version": "1.15.11",
+ "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.11.tgz",
+ "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/foreground-child": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmmirror.com/foreground-child/-/foreground-child-3.3.1.tgz",
+ "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
+ "license": "ISC",
+ "dependencies": {
+ "cross-spawn": "^7.0.6",
+ "signal-exit": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/form-data": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.4.tgz",
+ "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
+ "license": "MIT",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "es-set-tostringtag": "^2.1.0",
+ "hasown": "^2.0.2",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/forwarded": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz",
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/fraction.js": {
+ "version": "4.3.7",
+ "resolved": "https://registry.npmmirror.com/fraction.js/-/fraction.js-4.3.7.tgz",
+ "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "type": "patreon",
+ "url": "https://github.com/sponsors/rawify"
+ }
+ },
+ "node_modules/fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "license": "ISC",
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "es-define-property": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.1.1",
+ "function-bind": "^1.1.2",
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "hasown": "^2.0.2",
+ "math-intrinsics": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz",
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+ "license": "MIT",
+ "dependencies": {
+ "dunder-proto": "^1.0.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/glob": {
+ "version": "11.0.3",
+ "resolved": "https://registry.npmmirror.com/glob/-/glob-11.0.3.tgz",
+ "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==",
+ "license": "ISC",
+ "dependencies": {
+ "foreground-child": "^3.3.1",
+ "jackspeak": "^4.1.1",
+ "minimatch": "^10.0.3",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^2.0.0"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "engines": {
+ "node": "20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/glob/node_modules/minimatch": {
+ "version": "10.0.3",
+ "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-10.0.3.tgz",
+ "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==",
+ "license": "ISC",
+ "dependencies": {
+ "@isaacs/brace-expansion": "^5.0.0"
+ },
+ "engines": {
+ "node": "20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz",
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "license": "ISC"
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz",
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-tostringtag": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+ "license": "MIT",
+ "dependencies": {
+ "has-symbols": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/hls.js": {
+ "version": "1.6.13",
+ "resolved": "https://registry.npmmirror.com/hls.js/-/hls.js-1.6.13.tgz",
+ "integrity": "sha512-hNEzjZNHf5bFrUNvdS4/1RjIanuJ6szpWNfTaX5I6WfGynWXGT7K/YQLYtemSvFExzeMdgdE4SsyVLJbd5PcZA==",
+ "license": "Apache-2.0"
+ },
+ "node_modules/http-errors": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.0.tgz",
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
+ "license": "MIT",
+ "dependencies": {
+ "depd": "2.0.0",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "toidentifier": "1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "license": "MIT",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "license": "ISC"
+ },
+ "node_modules/ipaddr.js": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-2.2.0.tgz",
+ "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/is-arrayish": {
+ "version": "0.3.4",
+ "resolved": "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.3.4.tgz",
+ "integrity": "sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-promise": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmmirror.com/is-promise/-/is-promise-2.2.2.tgz",
+ "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==",
+ "license": "MIT"
+ },
+ "node_modules/isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmmirror.com/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==",
+ "license": "MIT"
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "license": "ISC"
+ },
+ "node_modules/jackspeak": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmmirror.com/jackspeak/-/jackspeak-4.1.1.tgz",
+ "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==",
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "engines": {
+ "node": "20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/jiti": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmmirror.com/jiti/-/jiti-2.6.0.tgz",
+ "integrity": "sha512-VXe6RjJkBPj0ohtqaO8vSWP3ZhAKo66fKrFNCll4BTcwljPLz03pCbaNKfzGP5MbrCYcbJ7v0nOYYwUzTEIdXQ==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "jiti": "lib/jiti-cli.mjs"
+ }
+ },
+ "node_modules/jju": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmmirror.com/jju/-/jju-1.4.0.tgz",
+ "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==",
+ "license": "MIT"
+ },
+ "node_modules/json-parse-helpfulerror": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmmirror.com/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz",
+ "integrity": "sha512-XgP0FGR77+QhUxjXkwOMkC94k3WtqEBfcnjWqhRd82qTat4SWKRE+9kUnynz/shm3I4ea2+qISvTIeGTNU7kJg==",
+ "license": "MIT",
+ "dependencies": {
+ "jju": "^1.1.0"
+ }
+ },
+ "node_modules/json-schema-ref-resolver": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/json-schema-ref-resolver/-/json-schema-ref-resolver-3.0.0.tgz",
+ "integrity": "sha512-hOrZIVL5jyYFjzk7+y7n5JDzGlU8rfWDuYyHwGa2WA8/pcmMHezp2xsVwxrebD/Q9t8Nc5DboieySDpCp4WG4A==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "dequal": "^2.0.3"
+ }
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "license": "MIT"
+ },
+ "node_modules/json-server": {
+ "version": "0.17.4",
+ "resolved": "https://registry.npmmirror.com/json-server/-/json-server-0.17.4.tgz",
+ "integrity": "sha512-bGBb0WtFuAKbgI7JV3A864irWnMZSvBYRJbohaOuatHwKSRFUfqtQlrYMrB6WbalXy/cJabyjlb7JkHli6dYjQ==",
+ "license": "MIT",
+ "dependencies": {
+ "body-parser": "^1.19.0",
+ "chalk": "^4.1.2",
+ "compression": "^1.7.4",
+ "connect-pause": "^0.1.1",
+ "cors": "^2.8.5",
+ "errorhandler": "^1.5.1",
+ "express": "^4.17.1",
+ "express-urlrewrite": "^1.4.0",
+ "json-parse-helpfulerror": "^1.0.3",
+ "lodash": "^4.17.21",
+ "lodash-id": "^0.14.1",
+ "lowdb": "^1.0.0",
+ "method-override": "^3.0.0",
+ "morgan": "^1.10.0",
+ "nanoid": "^3.1.23",
+ "please-upgrade-node": "^3.2.0",
+ "pluralize": "^8.0.0",
+ "server-destroy": "^1.0.1",
+ "yargs": "^17.0.1"
+ },
+ "bin": {
+ "json-server": "lib/cli/bin.js"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/light-my-request": {
+ "version": "6.6.0",
+ "resolved": "https://registry.npmmirror.com/light-my-request/-/light-my-request-6.6.0.tgz",
+ "integrity": "sha512-CHYbu8RtboSIoVsHZ6Ye4cj4Aw/yg2oAFimlF7mNvfDV192LR7nDiKtSIfCuLT7KokPSTn/9kfVLm5OGN0A28A==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "cookie": "^1.0.1",
+ "process-warning": "^4.0.0",
+ "set-cookie-parser": "^2.6.0"
+ }
+ },
+ "node_modules/light-my-request/node_modules/cookie": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmmirror.com/cookie/-/cookie-1.0.2.tgz",
+ "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/light-my-request/node_modules/process-warning": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmmirror.com/process-warning/-/process-warning-4.0.1.tgz",
+ "integrity": "sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/lightningcss": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmmirror.com/lightningcss/-/lightningcss-1.30.1.tgz",
+ "integrity": "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==",
+ "dev": true,
+ "license": "MPL-2.0",
+ "dependencies": {
+ "detect-libc": "^2.0.3"
+ },
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ },
+ "optionalDependencies": {
+ "lightningcss-darwin-arm64": "1.30.1",
+ "lightningcss-darwin-x64": "1.30.1",
+ "lightningcss-freebsd-x64": "1.30.1",
+ "lightningcss-linux-arm-gnueabihf": "1.30.1",
+ "lightningcss-linux-arm64-gnu": "1.30.1",
+ "lightningcss-linux-arm64-musl": "1.30.1",
+ "lightningcss-linux-x64-gnu": "1.30.1",
+ "lightningcss-linux-x64-musl": "1.30.1",
+ "lightningcss-win32-arm64-msvc": "1.30.1",
+ "lightningcss-win32-x64-msvc": "1.30.1"
+ }
+ },
+ "node_modules/lightningcss-win32-x64-msvc": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmmirror.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz",
+ "integrity": "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/local-pkg": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmmirror.com/local-pkg/-/local-pkg-0.5.1.tgz",
+ "integrity": "sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mlly": "^1.7.3",
+ "pkg-types": "^1.2.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "license": "MIT"
+ },
+ "node_modules/lodash-es": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz",
+ "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==",
+ "license": "MIT"
+ },
+ "node_modules/lodash-id": {
+ "version": "0.14.1",
+ "resolved": "https://registry.npmmirror.com/lodash-id/-/lodash-id-0.14.1.tgz",
+ "integrity": "sha512-ikQPBTiq/d5m6dfKQlFdIXFzvThPi2Be9/AHxktOnDSfSxE1j9ICbBT5Elk1ke7HSTgM38LHTpmJovo9/klnLg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/lowdb": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/lowdb/-/lowdb-1.0.0.tgz",
+ "integrity": "sha512-2+x8esE/Wb9SQ1F9IHaYWfsC9FIecLOPrK4g17FGEayjUWH172H6nwicRovGvSE2CPZouc2MCIqCI7h9d+GftQ==",
+ "license": "MIT",
+ "dependencies": {
+ "graceful-fs": "^4.1.3",
+ "is-promise": "^2.1.0",
+ "lodash": "4",
+ "pify": "^3.0.0",
+ "steno": "^0.4.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "11.2.2",
+ "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-11.2.2.tgz",
+ "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==",
+ "license": "ISC",
+ "engines": {
+ "node": "20 || >=22"
+ }
+ },
+ "node_modules/magic-string": {
+ "version": "0.30.19",
+ "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.19.tgz",
+ "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.5"
+ }
+ },
+ "node_modules/math-intrinsics": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmmirror.com/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/merge-descriptors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
+ "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/method-override": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/method-override/-/method-override-3.0.0.tgz",
+ "integrity": "sha512-IJ2NNN/mSl9w3kzWB92rcdHpz+HjkxhDJWNDBqSlas+zQdP8wBiJzITPg08M/k2uVvMow7Sk41atndNtt/PHSA==",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "3.1.0",
+ "methods": "~1.1.2",
+ "parseurl": "~1.3.2",
+ "vary": "~1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/method-override/node_modules/debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmmirror.com/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/micromatch/node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/mime": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/mime/-/mime-3.0.0.tgz",
+ "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==",
+ "license": "MIT",
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/minipass": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmmirror.com/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/minizlib": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmmirror.com/minizlib/-/minizlib-3.1.0.tgz",
+ "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "minipass": "^7.1.2"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/mlly": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmmirror.com/mlly/-/mlly-1.8.0.tgz",
+ "integrity": "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "acorn": "^8.15.0",
+ "pathe": "^2.0.3",
+ "pkg-types": "^1.3.1",
+ "ufo": "^1.6.1"
+ }
+ },
+ "node_modules/morgan": {
+ "version": "1.10.1",
+ "resolved": "https://registry.npmmirror.com/morgan/-/morgan-1.10.1.tgz",
+ "integrity": "sha512-223dMRJtI/l25dJKWpgij2cMtywuG/WiUKXdvwfbhGKBhy1puASqXwFzmWZ7+K73vUPoR7SS2Qz2cI/g9MKw0A==",
+ "license": "MIT",
+ "dependencies": {
+ "basic-auth": "~2.0.1",
+ "debug": "2.6.9",
+ "depd": "~2.0.0",
+ "on-finished": "~2.3.0",
+ "on-headers": "~1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/morgan/node_modules/on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmmirror.com/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==",
+ "license": "MIT",
+ "dependencies": {
+ "ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "license": "MIT"
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.11",
+ "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz",
+ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/negotiator": {
+ "version": "0.6.4",
+ "resolved": "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.4.tgz",
+ "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.21",
+ "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.21.tgz",
+ "integrity": "sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/normalize-range": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz",
+ "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/number-precision": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmmirror.com/number-precision/-/number-precision-1.6.0.tgz",
+ "integrity": "sha512-05OLPgbgmnixJw+VvEh18yNPUo3iyp4BEWJcrLu4X9W05KmMifN7Mu5exYvQXqxxeNWhvIF+j3Rij+HmddM/hQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-inspect": {
+ "version": "1.13.4",
+ "resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.13.4.tgz",
+ "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/on-exit-leak-free": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmmirror.com/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz",
+ "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/on-finished": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz",
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+ "license": "MIT",
+ "dependencies": {
+ "ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/on-headers": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmmirror.com/on-headers/-/on-headers-1.1.0.tgz",
+ "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/option-validator": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmmirror.com/option-validator/-/option-validator-2.0.6.tgz",
+ "integrity": "sha512-tmZDan2LRIRQyhUGvkff68/O0R8UmF+Btmiiz0SmSw2ng3CfPZB9wJlIjHpe/MKUZqyIZkVIXCrwr1tIN+0Dzg==",
+ "license": "MIT",
+ "dependencies": {
+ "kind-of": "^6.0.3"
+ }
+ },
+ "node_modules/package-json-from-dist": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+ "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
+ "license": "BlueOak-1.0.0"
+ },
+ "node_modules/parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-scurry": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/path-scurry/-/path-scurry-2.0.0.tgz",
+ "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==",
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "lru-cache": "^11.0.0",
+ "minipass": "^7.1.2"
+ },
+ "engines": {
+ "node": "20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/path-to-regexp": {
+ "version": "0.1.12",
+ "resolved": "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
+ "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==",
+ "license": "MIT"
+ },
+ "node_modules/pathe": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmmirror.com/pathe/-/pathe-2.0.3.tgz",
+ "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "license": "ISC"
+ },
+ "node_modules/picomatch": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.3.tgz",
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/pinia": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmmirror.com/pinia/-/pinia-2.3.1.tgz",
+ "integrity": "sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/devtools-api": "^6.6.3",
+ "vue-demi": "^0.14.10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/posva"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.4.4",
+ "vue": "^2.7.0 || ^3.5.11"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/pinia/node_modules/vue-demi": {
+ "version": "0.14.10",
+ "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz",
+ "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "vue-demi-fix": "bin/vue-demi-fix.js",
+ "vue-demi-switch": "bin/vue-demi-switch.js"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ },
+ "peerDependencies": {
+ "@vue/composition-api": "^1.0.0-rc.1",
+ "vue": "^3.0.0-0 || ^2.6.0"
+ },
+ "peerDependenciesMeta": {
+ "@vue/composition-api": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/pino": {
+ "version": "9.12.0",
+ "resolved": "https://registry.npmmirror.com/pino/-/pino-9.12.0.tgz",
+ "integrity": "sha512-0Gd0OezGvqtqMwgYxpL7P0pSHHzTJ0Lx992h+mNlMtRVfNnqweWmf0JmRWk5gJzHalyd2mxTzKjhiNbGS2Ztfw==",
+ "license": "MIT",
+ "dependencies": {
+ "atomic-sleep": "^1.0.0",
+ "on-exit-leak-free": "^2.1.0",
+ "pino-abstract-transport": "^2.0.0",
+ "pino-std-serializers": "^7.0.0",
+ "process-warning": "^5.0.0",
+ "quick-format-unescaped": "^4.0.3",
+ "real-require": "^0.2.0",
+ "safe-stable-stringify": "^2.3.1",
+ "slow-redact": "^0.3.0",
+ "sonic-boom": "^4.0.1",
+ "thread-stream": "^3.0.0"
+ },
+ "bin": {
+ "pino": "bin.js"
+ }
+ },
+ "node_modules/pino-abstract-transport": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz",
+ "integrity": "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==",
+ "license": "MIT",
+ "dependencies": {
+ "split2": "^4.0.0"
+ }
+ },
+ "node_modules/pino-std-serializers": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmmirror.com/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz",
+ "integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==",
+ "license": "MIT"
+ },
+ "node_modules/pkg-types": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmmirror.com/pkg-types/-/pkg-types-1.3.1.tgz",
+ "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "confbox": "^0.1.8",
+ "mlly": "^1.7.4",
+ "pathe": "^2.0.1"
+ }
+ },
+ "node_modules/playwright": {
+ "version": "1.55.1",
+ "resolved": "https://registry.npmmirror.com/playwright/-/playwright-1.55.1.tgz",
+ "integrity": "sha512-cJW4Xd/G3v5ovXtJJ52MAOclqeac9S/aGGgRzLabuF8TnIb6xHvMzKIa6JmrRzUkeXJgfL1MhukP0NK6l39h3A==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "playwright-core": "1.55.1"
+ },
+ "bin": {
+ "playwright": "cli.js"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "fsevents": "2.3.2"
+ }
+ },
+ "node_modules/playwright-core": {
+ "version": "1.55.1",
+ "resolved": "https://registry.npmmirror.com/playwright-core/-/playwright-core-1.55.1.tgz",
+ "integrity": "sha512-Z6Mh9mkwX+zxSlHqdr5AOcJnfp+xUWLCt9uKV18fhzA8eyxUd8NUWzAjxUh55RZKSYwDGX0cfaySdhZJGMoJ+w==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "playwright-core": "cli.js"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/please-upgrade-node": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmmirror.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz",
+ "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==",
+ "license": "MIT",
+ "dependencies": {
+ "semver-compare": "^1.0.0"
+ }
+ },
+ "node_modules/pluralize": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmmirror.com/pluralize/-/pluralize-8.0.0.tgz",
+ "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.5.6",
+ "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.6.tgz",
+ "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.11",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/process-warning": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmmirror.com/process-warning/-/process-warning-5.0.0.tgz",
+ "integrity": "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/proxy-addr": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz",
+ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
+ "license": "MIT",
+ "dependencies": {
+ "forwarded": "0.2.0",
+ "ipaddr.js": "1.9.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/proxy-addr/node_modules/ipaddr.js": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
+ "license": "MIT"
+ },
+ "node_modules/qs": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmmirror.com/qs/-/qs-6.13.0.tgz",
+ "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "side-channel": "^1.0.6"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/quick-format-unescaped": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmmirror.com/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz",
+ "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==",
+ "license": "MIT"
+ },
+ "node_modules/range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmmirror.com/range-parser/-/range-parser-1.2.1.tgz",
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/raw-body": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmmirror.com/raw-body/-/raw-body-2.5.2.tgz",
+ "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
+ "license": "MIT",
+ "dependencies": {
+ "bytes": "3.1.2",
+ "http-errors": "2.0.0",
+ "iconv-lite": "0.4.24",
+ "unpipe": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/readdirp/node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/real-require": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmmirror.com/real-require/-/real-require-0.2.0.tgz",
+ "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 12.13.0"
+ }
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/require-from-string": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz",
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resize-observer-polyfill": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
+ "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/ret": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmmirror.com/ret/-/ret-0.5.0.tgz",
+ "integrity": "sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.1.0.tgz",
+ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
+ "license": "MIT",
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rfdc": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmmirror.com/rfdc/-/rfdc-1.4.1.tgz",
+ "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==",
+ "license": "MIT"
+ },
+ "node_modules/rollup": {
+ "version": "4.52.3",
+ "resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.52.3.tgz",
+ "integrity": "sha512-RIDh866U8agLgiIcdpB+COKnlCreHJLfIhWC3LVflku5YHfpnsIKigRZeFfMfCc4dVcqNVfQQ5gO/afOck064A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "1.0.8"
+ },
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.52.3",
+ "@rollup/rollup-android-arm64": "4.52.3",
+ "@rollup/rollup-darwin-arm64": "4.52.3",
+ "@rollup/rollup-darwin-x64": "4.52.3",
+ "@rollup/rollup-freebsd-arm64": "4.52.3",
+ "@rollup/rollup-freebsd-x64": "4.52.3",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.52.3",
+ "@rollup/rollup-linux-arm-musleabihf": "4.52.3",
+ "@rollup/rollup-linux-arm64-gnu": "4.52.3",
+ "@rollup/rollup-linux-arm64-musl": "4.52.3",
+ "@rollup/rollup-linux-loong64-gnu": "4.52.3",
+ "@rollup/rollup-linux-ppc64-gnu": "4.52.3",
+ "@rollup/rollup-linux-riscv64-gnu": "4.52.3",
+ "@rollup/rollup-linux-riscv64-musl": "4.52.3",
+ "@rollup/rollup-linux-s390x-gnu": "4.52.3",
+ "@rollup/rollup-linux-x64-gnu": "4.52.3",
+ "@rollup/rollup-linux-x64-musl": "4.52.3",
+ "@rollup/rollup-openharmony-arm64": "4.52.3",
+ "@rollup/rollup-win32-arm64-msvc": "4.52.3",
+ "@rollup/rollup-win32-ia32-msvc": "4.52.3",
+ "@rollup/rollup-win32-x64-gnu": "4.52.3",
+ "@rollup/rollup-win32-x64-msvc": "4.52.3",
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/safe-regex2": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmmirror.com/safe-regex2/-/safe-regex2-5.0.0.tgz",
+ "integrity": "sha512-YwJwe5a51WlK7KbOJREPdjNrpViQBI3p4T50lfwPuDhZnE3XGVTlGvi+aolc5+RvxDD6bnUmjVsU9n1eboLUYw==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "ret": "~0.5.0"
}
},
- "node_modules/esbuild": {
- "version": "0.21.5",
- "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.21.5.tgz",
- "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
- "dev": true,
- "hasInstallScript": true,
+ "node_modules/safe-stable-stringify": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmmirror.com/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz",
+ "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==",
"license": "MIT",
- "bin": {
- "esbuild": "bin/esbuild"
- },
"engines": {
- "node": ">=12"
- },
- "optionalDependencies": {
- "@esbuild/aix-ppc64": "0.21.5",
- "@esbuild/android-arm": "0.21.5",
- "@esbuild/android-arm64": "0.21.5",
- "@esbuild/android-x64": "0.21.5",
- "@esbuild/darwin-arm64": "0.21.5",
- "@esbuild/darwin-x64": "0.21.5",
- "@esbuild/freebsd-arm64": "0.21.5",
- "@esbuild/freebsd-x64": "0.21.5",
- "@esbuild/linux-arm": "0.21.5",
- "@esbuild/linux-arm64": "0.21.5",
- "@esbuild/linux-ia32": "0.21.5",
- "@esbuild/linux-loong64": "0.21.5",
- "@esbuild/linux-mips64el": "0.21.5",
- "@esbuild/linux-ppc64": "0.21.5",
- "@esbuild/linux-riscv64": "0.21.5",
- "@esbuild/linux-s390x": "0.21.5",
- "@esbuild/linux-x64": "0.21.5",
- "@esbuild/netbsd-x64": "0.21.5",
- "@esbuild/openbsd-x64": "0.21.5",
- "@esbuild/sunos-x64": "0.21.5",
- "@esbuild/win32-arm64": "0.21.5",
- "@esbuild/win32-ia32": "0.21.5",
- "@esbuild/win32-x64": "0.21.5"
+ "node": ">=10"
}
},
- "node_modules/estree-walker": {
- "version": "2.0.2",
- "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz",
- "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
"license": "MIT"
},
- "node_modules/fast-glob": {
- "version": "3.3.2",
- "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.2.tgz",
- "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+ "node_modules/scroll-into-view-if-needed": {
+ "version": "2.2.31",
+ "resolved": "https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz",
+ "integrity": "sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.4"
- },
- "engines": {
- "node": ">=8.6.0"
+ "compute-scroll-into-view": "^1.0.20"
}
},
- "node_modules/fastq": {
- "version": "1.17.1",
- "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.17.1.tgz",
- "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
- "dev": true,
+ "node_modules/secure-json-parse": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmmirror.com/secure-json-parse/-/secure-json-parse-4.0.0.tgz",
+ "integrity": "sha512-dxtLJO6sc35jWidmLxo7ij+Eg48PM/kleBsxpC8QJE0qJICe+KawkDQmvCMZUr9u7WKVHgMW6vy3fQ7zMiFZMA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/semver": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmmirror.com/semver/-/semver-7.7.2.tgz",
+ "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
"license": "ISC",
- "dependencies": {
- "reusify": "^1.0.4"
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
}
},
- "node_modules/fill-range": {
- "version": "7.1.1",
- "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz",
- "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
- "dev": true,
+ "node_modules/semver-compare": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/semver-compare/-/semver-compare-1.0.0.tgz",
+ "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==",
+ "license": "MIT"
+ },
+ "node_modules/send": {
+ "version": "0.19.0",
+ "resolved": "https://registry.npmmirror.com/send/-/send-0.19.0.tgz",
+ "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
"license": "MIT",
"dependencies": {
- "to-regex-range": "^5.0.1"
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "2.0.0",
+ "mime": "1.6.0",
+ "ms": "2.1.3",
+ "on-finished": "2.4.1",
+ "range-parser": "~1.2.1",
+ "statuses": "2.0.1"
},
"engines": {
- "node": ">=8"
+ "node": ">= 0.8.0"
}
},
- "node_modules/fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "dev": true,
- "hasInstallScript": true,
+ "node_modules/send/node_modules/encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
"license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
"engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ "node": ">= 0.8"
}
},
- "node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "is-glob": "^4.0.1"
+ "node_modules/send/node_modules/mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "license": "MIT",
+ "bin": {
+ "mime": "cli.js"
},
"engines": {
- "node": ">= 6"
+ "node": ">=4"
}
},
- "node_modules/is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "dev": true,
+ "node_modules/send/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "license": "MIT"
+ },
+ "node_modules/serve-static": {
+ "version": "1.16.2",
+ "resolved": "https://registry.npmmirror.com/serve-static/-/serve-static-1.16.2.tgz",
+ "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==",
"license": "MIT",
"dependencies": {
- "binary-extensions": "^2.0.0"
+ "encodeurl": "~2.0.0",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.3",
+ "send": "0.19.0"
},
"engines": {
- "node": ">=8"
+ "node": ">= 0.8.0"
}
},
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "dev": true,
- "license": "MIT",
+ "node_modules/server-destroy": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/server-destroy/-/server-destroy-1.0.1.tgz",
+ "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==",
+ "license": "ISC"
+ },
+ "node_modules/set-cookie-parser": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmmirror.com/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz",
+ "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==",
+ "license": "MIT"
+ },
+ "node_modules/setprototypeof": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz",
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
+ "license": "ISC"
+ },
+ "node_modules/shaka-player": {
+ "version": "4.16.3",
+ "resolved": "https://registry.npmmirror.com/shaka-player/-/shaka-player-4.16.3.tgz",
+ "integrity": "sha512-KFvcg78uwoAyYJAlEa8y673XpPZeQCVG9L1ikoCSUMhCHeNNkNiG1FB4LZwGYN1IrwVEPH3IJVpWoB7RU4d0HA==",
+ "license": "Apache-2.0",
"engines": {
- "node": ">=0.10.0"
+ "node": ">=18"
}
},
- "node_modules/is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
"license": "MIT",
"dependencies": {
- "is-extglob": "^2.1.1"
+ "shebang-regex": "^3.0.0"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">=8"
}
},
- "node_modules/is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true,
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"license": "MIT",
"engines": {
- "node": ">=0.12.0"
+ "node": ">=8"
}
},
- "node_modules/local-pkg": {
- "version": "0.5.0",
- "resolved": "https://registry.npmmirror.com/local-pkg/-/local-pkg-0.5.0.tgz",
- "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==",
- "dev": true,
+ "node_modules/side-channel": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.1.0.tgz",
+ "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
"license": "MIT",
"dependencies": {
- "mlly": "^1.4.2",
- "pkg-types": "^1.0.3"
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.3",
+ "side-channel-list": "^1.0.0",
+ "side-channel-map": "^1.0.1",
+ "side-channel-weakmap": "^1.0.2"
},
"engines": {
- "node": ">=14"
+ "node": ">= 0.4"
},
"funding": {
- "url": "https://github.com/sponsors/antfu"
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/magic-string": {
- "version": "0.30.12",
- "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.12.tgz",
- "integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==",
+ "node_modules/side-channel-list": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/side-channel-list/-/side-channel-list-1.0.0.tgz",
+ "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
"license": "MIT",
"dependencies": {
- "@jridgewell/sourcemap-codec": "^1.5.0"
- }
- },
- "node_modules/merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "dev": true,
- "license": "MIT",
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.3"
+ },
"engines": {
- "node": ">= 8"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/micromatch": {
- "version": "4.0.8",
- "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.8.tgz",
- "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
- "dev": true,
+ "node_modules/side-channel-map": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/side-channel-map/-/side-channel-map-1.0.1.tgz",
+ "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
"license": "MIT",
"dependencies": {
- "braces": "^3.0.3",
- "picomatch": "^2.3.1"
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3"
},
"engines": {
- "node": ">=8.6"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/micromatch/node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true,
+ "node_modules/side-channel-weakmap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmmirror.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
+ "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
"license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3",
+ "side-channel-map": "^1.0.1"
+ },
"engines": {
- "node": ">=8.6"
+ "node": ">= 0.4"
},
"funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
- "dev": true,
+ "node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
"license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
"engines": {
- "node": ">=16 || 14 >=14.17"
+ "node": ">=14"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/mlly": {
- "version": "1.7.2",
- "resolved": "https://registry.npmmirror.com/mlly/-/mlly-1.7.2.tgz",
- "integrity": "sha512-tN3dvVHYVz4DhSXinXIk7u9syPYaJvio118uomkovAtWBT+RdbP6Lfh/5Lvo519YMmwBafwlh20IPTXIStscpA==",
+ "node_modules/simple-swizzle": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmmirror.com/simple-swizzle/-/simple-swizzle-0.2.4.tgz",
+ "integrity": "sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "acorn": "^8.12.1",
- "pathe": "^1.1.2",
- "pkg-types": "^1.2.0",
- "ufo": "^1.5.4"
+ "is-arrayish": "^0.3.1"
}
},
- "node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
+ "node_modules/slow-redact": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmmirror.com/slow-redact/-/slow-redact-0.3.0.tgz",
+ "integrity": "sha512-cf723wn9JeRIYP9tdtd86GuqoR5937u64Io+CYjlm2i7jvu7g0H+Cp0l0ShAf/4ZL+ISUTVT+8Qzz7RZmp9FjA==",
"license": "MIT"
},
- "node_modules/nanoid": {
- "version": "3.3.7",
- "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz",
- "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
+ "node_modules/sonic-boom": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmmirror.com/sonic-boom/-/sonic-boom-4.2.0.tgz",
+ "integrity": "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==",
"license": "MIT",
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ "dependencies": {
+ "atomic-sleep": "^1.0.0"
}
},
- "node_modules/normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true,
- "license": "MIT",
+ "node_modules/source-map-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
},
- "node_modules/pathe": {
- "version": "1.1.2",
- "resolved": "https://registry.npmmirror.com/pathe/-/pathe-1.1.2.tgz",
- "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/picocolors": {
- "version": "1.1.1",
- "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz",
- "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
- "license": "ISC"
+ "node_modules/split2": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmmirror.com/split2/-/split2-4.2.0.tgz",
+ "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==",
+ "license": "ISC",
+ "engines": {
+ "node": ">= 10.x"
+ }
},
- "node_modules/picomatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.2.tgz",
- "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
- "dev": true,
+ "node_modules/statuses": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz",
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
"license": "MIT",
"engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
+ "node": ">= 0.8"
}
},
- "node_modules/pkg-types": {
- "version": "1.2.1",
- "resolved": "https://registry.npmmirror.com/pkg-types/-/pkg-types-1.2.1.tgz",
- "integrity": "sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==",
- "dev": true,
+ "node_modules/steno": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmmirror.com/steno/-/steno-0.4.4.tgz",
+ "integrity": "sha512-EEHMVYHNXFHfGtgjNITnka0aHhiAlo93F7z2/Pwd+g0teG9CnM3JIINM7hVVB5/rhw9voufD7Wukwgtw2uqh6w==",
"license": "MIT",
"dependencies": {
- "confbox": "^0.1.8",
- "mlly": "^1.7.2",
- "pathe": "^1.1.2"
+ "graceful-fs": "^4.1.3"
}
},
- "node_modules/postcss": {
- "version": "8.4.47",
- "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.47.tgz",
- "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
+ "node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"license": "MIT",
"dependencies": {
- "nanoid": "^3.3.7",
- "picocolors": "^1.1.0",
- "source-map-js": "^1.2.1"
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
},
"engines": {
- "node": "^10 || ^12 || >=14"
+ "node": ">=8"
}
},
- "node_modules/primevue": {
- "version": "4.2.1",
- "resolved": "https://registry.npmmirror.com/primevue/-/primevue-4.2.1.tgz",
- "integrity": "sha512-cU9ZQVq9fitsQEIrfGeIl7xELBn61JCMxWkzcS9dkr165g29AvUrUNS9ufs1t2NoMJzE8VllwzweF/tSFAr2cw==",
+ "node_modules/string-width-cjs": {
+ "name": "string-width",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"license": "MIT",
"dependencies": {
- "@primeuix/styled": "^0.3.0",
- "@primeuix/utils": "^0.3.0",
- "@primevue/core": "4.2.1",
- "@primevue/icons": "4.2.1"
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
},
"engines": {
- "node": ">=12.11.0"
- }
- },
- "node_modules/queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT"
- },
- "node_modules/readdirp": {
- "version": "3.6.0",
- "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dev": true,
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"license": "MIT",
"dependencies": {
- "picomatch": "^2.2.1"
+ "ansi-regex": "^5.0.1"
},
"engines": {
- "node": ">=8.10.0"
+ "node": ">=8"
}
},
- "node_modules/readdirp/node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true,
+ "node_modules/strip-ansi-cjs": {
+ "name": "strip-ansi",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
"engines": {
- "node": ">=8.6"
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
},
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
+ "engines": {
+ "node": ">=8"
}
},
- "node_modules/reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "node_modules/tailwindcss": {
+ "version": "4.1.13",
+ "resolved": "https://registry.npmmirror.com/tailwindcss/-/tailwindcss-4.1.13.tgz",
+ "integrity": "sha512-i+zidfmTqtwquj4hMEwdjshYYgMbOrPzb9a0M3ZgNa0JMoZeFC6bxZvO8yr8ozS6ix2SDz0+mvryPeBs2TFE+w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/tapable": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmmirror.com/tapable/-/tapable-2.2.3.tgz",
+ "integrity": "sha512-ZL6DDuAlRlLGghwcfmSn9sK3Hr6ArtyudlSAiCqQ6IfE+b+HHbydbYDIG15IfS5do+7XQQBdBiubF/cV2dnDzg==",
"dev": true,
"license": "MIT",
"engines": {
- "iojs": ">=1.0.0",
- "node": ">=0.10.0"
+ "node": ">=6"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
}
},
- "node_modules/rollup": {
- "version": "4.24.4",
- "resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.24.4.tgz",
- "integrity": "sha512-vGorVWIsWfX3xbcyAS+I047kFKapHYivmkaT63Smj77XwvLSJos6M1xGqZnBPFQFBRZDOcG1QnYEIxAvTr/HjA==",
+ "node_modules/tar": {
+ "version": "7.5.1",
+ "resolved": "https://registry.npmmirror.com/tar/-/tar-7.5.1.tgz",
+ "integrity": "sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==",
"dev": true,
- "license": "MIT",
+ "license": "ISC",
"dependencies": {
- "@types/estree": "1.0.6"
- },
- "bin": {
- "rollup": "dist/bin/rollup"
+ "@isaacs/fs-minipass": "^4.0.0",
+ "chownr": "^3.0.0",
+ "minipass": "^7.1.2",
+ "minizlib": "^3.1.0",
+ "yallist": "^5.0.0"
},
"engines": {
- "node": ">=18.0.0",
- "npm": ">=8.0.0"
- },
- "optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.24.4",
- "@rollup/rollup-android-arm64": "4.24.4",
- "@rollup/rollup-darwin-arm64": "4.24.4",
- "@rollup/rollup-darwin-x64": "4.24.4",
- "@rollup/rollup-freebsd-arm64": "4.24.4",
- "@rollup/rollup-freebsd-x64": "4.24.4",
- "@rollup/rollup-linux-arm-gnueabihf": "4.24.4",
- "@rollup/rollup-linux-arm-musleabihf": "4.24.4",
- "@rollup/rollup-linux-arm64-gnu": "4.24.4",
- "@rollup/rollup-linux-arm64-musl": "4.24.4",
- "@rollup/rollup-linux-powerpc64le-gnu": "4.24.4",
- "@rollup/rollup-linux-riscv64-gnu": "4.24.4",
- "@rollup/rollup-linux-s390x-gnu": "4.24.4",
- "@rollup/rollup-linux-x64-gnu": "4.24.4",
- "@rollup/rollup-linux-x64-musl": "4.24.4",
- "@rollup/rollup-win32-arm64-msvc": "4.24.4",
- "@rollup/rollup-win32-ia32-msvc": "4.24.4",
- "@rollup/rollup-win32-x64-msvc": "4.24.4",
- "fsevents": "~2.3.2"
+ "node": ">=18"
}
},
- "node_modules/run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
+ "node_modules/thread-stream": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmmirror.com/thread-stream/-/thread-stream-3.1.0.tgz",
+ "integrity": "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==",
"license": "MIT",
"dependencies": {
- "queue-microtask": "^1.2.2"
+ "real-require": "^0.2.0"
}
},
- "node_modules/source-map-js": {
- "version": "1.2.1",
- "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz",
- "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
- "license": "BSD-3-Clause",
+ "node_modules/tinyglobby": {
+ "version": "0.2.15",
+ "resolved": "https://registry.npmmirror.com/tinyglobby/-/tinyglobby-0.2.15.tgz",
+ "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.3"
+ },
"engines": {
- "node": ">=0.10.0"
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
}
},
"node_modules/to-regex-range": {
@@ -1039,17 +4120,57 @@
"node": ">=8.0"
}
},
+ "node_modules/toad-cache": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmmirror.com/toad-cache/-/toad-cache-3.7.0.tgz",
+ "integrity": "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/toidentifier": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz",
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/type-is": {
+ "version": "1.6.18",
+ "resolved": "https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz",
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+ "license": "MIT",
+ "dependencies": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/ufo": {
- "version": "1.5.4",
- "resolved": "https://registry.npmmirror.com/ufo/-/ufo-1.5.4.tgz",
- "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==",
+ "version": "1.6.1",
+ "resolved": "https://registry.npmmirror.com/ufo/-/ufo-1.6.1.tgz",
+ "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==",
"dev": true,
"license": "MIT"
},
+ "node_modules/unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/unplugin": {
- "version": "1.15.0",
- "resolved": "https://registry.npmmirror.com/unplugin/-/unplugin-1.15.0.tgz",
- "integrity": "sha512-jTPIs63W+DUEDW207ztbaoO7cQ4p5aVaB823LSlxpsFEU3Mykwxf3ZGC/wzxFJeZlASZYgVrWeo7LgOrqJZ8RA==",
+ "version": "1.16.1",
+ "resolved": "https://registry.npmmirror.com/unplugin/-/unplugin-1.16.1.tgz",
+ "integrity": "sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1058,33 +4179,25 @@
},
"engines": {
"node": ">=14.0.0"
- },
- "peerDependencies": {
- "webpack-sources": "^3"
- },
- "peerDependenciesMeta": {
- "webpack-sources": {
- "optional": true
- }
}
},
"node_modules/unplugin-vue-components": {
- "version": "0.27.4",
- "resolved": "https://registry.npmmirror.com/unplugin-vue-components/-/unplugin-vue-components-0.27.4.tgz",
- "integrity": "sha512-1XVl5iXG7P1UrOMnaj2ogYa5YTq8aoh5jwDPQhemwO/OrXW+lPQKDXd1hMz15qxQPxgb/XXlbgo3HQ2rLEbmXQ==",
+ "version": "0.27.5",
+ "resolved": "https://registry.npmmirror.com/unplugin-vue-components/-/unplugin-vue-components-0.27.5.tgz",
+ "integrity": "sha512-m9j4goBeNwXyNN8oZHHxvIIYiG8FQ9UfmKWeNllpDvhU7btKNNELGPt+o3mckQKuPwrE7e0PvCsx+IWuDSD9Vg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@antfu/utils": "^0.7.10",
- "@rollup/pluginutils": "^5.1.0",
+ "@rollup/pluginutils": "^5.1.3",
"chokidar": "^3.6.0",
- "debug": "^4.3.6",
+ "debug": "^4.3.7",
"fast-glob": "^3.3.2",
- "local-pkg": "^0.5.0",
- "magic-string": "^0.30.11",
+ "local-pkg": "^0.5.1",
+ "magic-string": "^0.30.14",
"minimatch": "^9.0.5",
- "mlly": "^1.7.1",
- "unplugin": "^1.12.1"
+ "mlly": "^1.7.3",
+ "unplugin": "^1.16.0"
},
"engines": {
"node": ">=14"
@@ -1106,22 +4219,119 @@
}
}
},
+ "node_modules/unplugin-vue-components/node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/unplugin-vue-components/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
+ "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "escalade": "^3.2.0",
+ "picocolors": "^1.1.1"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/v-viewer": {
+ "version": "3.0.22",
+ "resolved": "https://registry.npmmirror.com/v-viewer/-/v-viewer-3.0.22.tgz",
+ "integrity": "sha512-uYyP5FPT4K/Sd5D1mhB2HMVV8jnf6zYy2HD1PHCNAO6s2Iway+Wls60pwh7y4F3e2Nlc9549Pvy2HXaq8PKrAg==",
+ "license": "MIT",
+ "dependencies": {
+ "lodash-es": "^4.17.21",
+ "viewerjs": "^1.11.6"
+ },
+ "peerDependencies": {
+ "viewerjs": "^1.11.0",
+ "vue": "^3.0.0"
+ }
+ },
+ "node_modules/vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/viewerjs": {
+ "version": "1.11.7",
+ "resolved": "https://registry.npmmirror.com/viewerjs/-/viewerjs-1.11.7.tgz",
+ "integrity": "sha512-0JuVqOmL5v1jmEAlG5EBDR3XquxY8DWFQbFMprOXgaBB0F7Q/X9xWdEaQc59D8xzwkdUgXEMSSknTpriq95igg==",
+ "license": "MIT"
+ },
"node_modules/vite": {
- "version": "5.4.10",
- "resolved": "https://registry.npmmirror.com/vite/-/vite-5.4.10.tgz",
- "integrity": "sha512-1hvaPshuPUtxeQ0hsVH3Mud0ZanOLwVTneA1EgbAM5LhaZEqyPWGRQ7BtaMvUrTDeEaC8pxtj6a6jku3x4z6SQ==",
+ "version": "7.1.7",
+ "resolved": "https://registry.npmmirror.com/vite/-/vite-7.1.7.tgz",
+ "integrity": "sha512-VbA8ScMvAISJNJVbRDTJdCwqQoAareR/wutevKanhR2/1EkoXVZVkkORaYm/tNVCjP/UDTKtcw3bAkwOUdedmA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "esbuild": "^0.21.3",
- "postcss": "^8.4.43",
- "rollup": "^4.20.0"
+ "esbuild": "^0.25.0",
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.3",
+ "postcss": "^8.5.6",
+ "rollup": "^4.43.0",
+ "tinyglobby": "^0.2.15"
},
"bin": {
"vite": "bin/vite.js"
},
"engines": {
- "node": "^18.0.0 || >=20.0.0"
+ "node": "^20.19.0 || >=22.12.0"
},
"funding": {
"url": "https://github.com/vitejs/vite?sponsor=1"
@@ -1130,19 +4340,25 @@
"fsevents": "~2.3.3"
},
"peerDependencies": {
- "@types/node": "^18.0.0 || >=20.0.0",
- "less": "*",
+ "@types/node": "^20.19.0 || >=22.12.0",
+ "jiti": ">=1.21.0",
+ "less": "^4.0.0",
"lightningcss": "^1.21.0",
- "sass": "*",
- "sass-embedded": "*",
- "stylus": "*",
- "sugarss": "*",
- "terser": "^5.4.0"
+ "sass": "^1.70.0",
+ "sass-embedded": "^1.70.0",
+ "stylus": ">=0.54.8",
+ "sugarss": "^5.0.0",
+ "terser": "^5.16.0",
+ "tsx": "^4.8.1",
+ "yaml": "^2.4.2"
},
"peerDependenciesMeta": {
"@types/node": {
"optional": true
},
+ "jiti": {
+ "optional": true
+ },
"less": {
"optional": true
},
@@ -1163,20 +4379,26 @@
},
"terser": {
"optional": true
+ },
+ "tsx": {
+ "optional": true
+ },
+ "yaml": {
+ "optional": true
}
}
},
"node_modules/vue": {
- "version": "3.5.12",
- "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.12.tgz",
- "integrity": "sha512-CLVZtXtn2ItBIi/zHZ0Sg1Xkb7+PU32bJJ8Bmy7ts3jxXTcbfsEfBivFYYWz1Hur+lalqGAh65Coin0r+HRUfg==",
+ "version": "3.5.22",
+ "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.22.tgz",
+ "integrity": "sha512-toaZjQ3a/G/mYaLSbV+QsQhIdMo9x5rrqIpYRObsJ6T/J+RyCSFwN2LHNVH9v8uIcljDNa3QzPVdv3Y6b9hAJQ==",
"license": "MIT",
"dependencies": {
- "@vue/compiler-dom": "3.5.12",
- "@vue/compiler-sfc": "3.5.12",
- "@vue/runtime-dom": "3.5.12",
- "@vue/server-renderer": "3.5.12",
- "@vue/shared": "3.5.12"
+ "@vue/compiler-dom": "3.5.22",
+ "@vue/compiler-sfc": "3.5.22",
+ "@vue/runtime-dom": "3.5.22",
+ "@vue/server-renderer": "3.5.22",
+ "@vue/shared": "3.5.22"
},
"peerDependencies": {
"typescript": "*"
@@ -1187,12 +4409,189 @@
}
}
},
+ "node_modules/vue-demi": {
+ "version": "0.13.11",
+ "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.11.tgz",
+ "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "vue-demi-fix": "bin/vue-demi-fix.js",
+ "vue-demi-switch": "bin/vue-demi-switch.js"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ },
+ "peerDependencies": {
+ "@vue/composition-api": "^1.0.0-rc.1",
+ "vue": "^3.0.0-0 || ^2.6.0"
+ },
+ "peerDependenciesMeta": {
+ "@vue/composition-api": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vue-echarts": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmmirror.com/vue-echarts/-/vue-echarts-7.0.3.tgz",
+ "integrity": "sha512-/jSxNwOsw5+dYAUcwSfkLwKPuzTQ0Cepz1LxCOpj2QcHrrmUa/Ql0eQqMmc1rTPQVrh2JQ29n2dhq75ZcHvRDw==",
+ "license": "MIT",
+ "dependencies": {
+ "vue-demi": "^0.13.11"
+ },
+ "peerDependencies": {
+ "@vue/runtime-core": "^3.0.0",
+ "echarts": "^5.5.1",
+ "vue": "^2.7.0 || ^3.1.1"
+ },
+ "peerDependenciesMeta": {
+ "@vue/runtime-core": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vue-router": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.5.1.tgz",
+ "integrity": "sha512-ogAF3P97NPm8fJsE4by9dwSYtDwXIY1nFY9T6DyQnGHd1E2Da94w9JIolpe42LJGIl0DwOHBi8TcRPlPGwbTtw==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/devtools-api": "^6.6.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/posva"
+ },
+ "peerDependencies": {
+ "vue": "^3.2.0"
+ }
+ },
"node_modules/webpack-virtual-modules": {
"version": "0.6.2",
"resolved": "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz",
"integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==",
"dev": true,
"license": "MIT"
+ },
+ "node_modules/webworkify-webpack": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmmirror.com/webworkify-webpack/-/webworkify-webpack-2.1.5.tgz",
+ "integrity": "sha512-2akF8FIyUvbiBBdD+RoHpoTbHMQF2HwjcxfDvgztAX5YwbZNyrtfUMgvfgFVsgDhDPVTlkbb5vyasqDHfIDPQw==",
+ "license": "MIT"
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs": {
+ "name": "wrap-ansi",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yallist": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmmirror.com/yallist/-/yallist-5.0.0.tgz",
+ "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/yargs": {
+ "version": "17.7.2",
+ "resolved": "https://registry.npmmirror.com/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+ "license": "MIT",
+ "dependencies": {
+ "cliui": "^8.0.1",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.1.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/zrender": {
+ "version": "5.6.1",
+ "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.6.1.tgz",
+ "integrity": "sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "tslib": "2.3.0"
+ }
+ },
+ "node_modules/zrender/node_modules/tslib": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
+ "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==",
+ "license": "0BSD"
}
}
}
diff --git a/dashboard/package.json b/dashboard/package.json
index 298fb43..64ece72 100644
--- a/dashboard/package.json
+++ b/dashboard/package.json
@@ -1,26 +1,58 @@
{
- "name": "dashboard",
+ "name": "drplayer",
"private": true,
- "version": "0.0.0",
+ "version": "1.0.3 20251017",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
- "preview": "vite preview"
+ "build:root": "vite build --mode production.root",
+ "build:apps": "vite build --mode production.apps",
+ "build:binary": "node build-binary.js",
+ "build:binary:win": "node build-binary.js",
+ "build:binary:optimized": "node build-binary-optimized.js",
+ "preview": "vite preview",
+ "start": "node production-server.cjs",
+ "mock1": "json-server src/mock/data.json --host 127.0.0.1 --port 9978 --middlewares src/mock/middlewares.js",
+ "mock2": "json-server public/mock/data.json --host 127.0.0.1 --port 9978 --middlewares public/mock/middlewares.js"
},
+ "engines": {
+ "node": ">17 <23"
+ },
+ "repository": "https://github.com/hjdhnx/DrPlayer.git",
+ "author": "晚风拂柳颜 <434857005@qq.com>",
+ "description": "道长修仙,法力无边。一统江湖,只需半年。\n君子袒蛋蛋,小人藏鸡鸡。",
+ "license": "MIT",
"dependencies": {
- "@primevue/themes": "^4.2.1",
+ "@fastify/static": "^6.12.0",
+ "artplayer": "^5.3.0",
+ "artplayer-plugin-danmuku": "^5.2.0",
+ "axios": "1.12.0",
+ "crypto-js": "^4.2.0",
+ "echarts": "^5.6.0",
+ "fastify": "^4.29.1",
+ "flv.js": "^1.6.2",
+ "hls.js": "^1.6.13",
+ "json-server": "^0.17.4",
+ "mpegts.js": "^1.8.0",
"pinia": "^2.2.6",
- "primeflex": "^3.3.1",
- "primeicons": "^7.0.0",
- "primevue": "^4.2.1",
+ "shaka-player": "^4.16.3",
+ "v-viewer": "^3.0.22",
+ "viewerjs": "^1.11.0",
"vue": "^3.5.12",
- "vue-router": "^4.4.5"
+ "vue-echarts": "^7.0.3",
+ "vue-router": "^4.4.5",
+ "vuedraggable": "^4.1.0"
},
"devDependencies": {
- "@primevue/auto-import-resolver": "^4.2.1",
- "@vitejs/plugin-vue": "^5.1.4",
+ "@arco-design/web-vue": "^2.56.3",
+ "@playwright/test": "^1.55.1",
+ "@tailwindcss/postcss": "^4.1.13",
+ "@vitejs/plugin-vue": "^6.0.1",
+ "autoprefixer": "^10.4.21",
+ "postcss": "^8.5.6",
+ "tailwindcss": "^4.1.13",
"unplugin-vue-components": "^0.27.4",
- "vite": "^5.4.10"
+ "vite": "^7.1.7"
}
}
diff --git a/dashboard/playwright.config.js b/dashboard/playwright.config.js
new file mode 100644
index 0000000..c833bcc
--- /dev/null
+++ b/dashboard/playwright.config.js
@@ -0,0 +1,28 @@
+// @ts-check
+import { defineConfig, devices } from '@playwright/test';
+
+export default defineConfig({
+ testDir: './tests',
+ fullyParallel: true,
+ forbidOnly: !!process.env.CI,
+ retries: process.env.CI ? 2 : 0,
+ workers: process.env.CI ? 1 : undefined,
+ reporter: 'html',
+ use: {
+ baseURL: 'http://localhost:5173',
+ trace: 'on-first-retry',
+ },
+
+ projects: [
+ {
+ name: 'chromium',
+ use: { ...devices['Desktop Chrome'] },
+ },
+ ],
+
+ webServer: {
+ command: 'npm run dev',
+ url: 'http://localhost:5173',
+ reuseExistingServer: !process.env.CI,
+ },
+});
\ No newline at end of file
diff --git a/dashboard/pnpm-lock.yaml b/dashboard/pnpm-lock.yaml
new file mode 100644
index 0000000..3ddbe9e
--- /dev/null
+++ b/dashboard/pnpm-lock.yaml
@@ -0,0 +1,3512 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@fastify/static':
+ specifier: ^6.12.0
+ version: 6.12.0
+ artplayer:
+ specifier: ^5.3.0
+ version: 5.3.0
+ artplayer-plugin-danmuku:
+ specifier: ^5.2.0
+ version: 5.2.0
+ axios:
+ specifier: 1.12.0
+ version: 1.12.0
+ crypto-js:
+ specifier: ^4.2.0
+ version: 4.2.0
+ echarts:
+ specifier: ^5.6.0
+ version: 5.6.0
+ fastify:
+ specifier: ^4.29.1
+ version: 4.29.1
+ flv.js:
+ specifier: ^1.6.2
+ version: 1.6.2
+ hls.js:
+ specifier: ^1.6.13
+ version: 1.6.13
+ json-server:
+ specifier: ^0.17.4
+ version: 0.17.4
+ mpegts.js:
+ specifier: ^1.8.0
+ version: 1.8.0
+ pinia:
+ specifier: ^2.2.6
+ version: 2.3.1(vue@3.5.22)
+ shaka-player:
+ specifier: ^4.16.3
+ version: 4.16.3
+ v-viewer:
+ specifier: ^3.0.22
+ version: 3.0.22(viewerjs@1.11.7)(vue@3.5.22)
+ viewerjs:
+ specifier: ^1.11.0
+ version: 1.11.7
+ vue:
+ specifier: ^3.5.12
+ version: 3.5.22
+ vue-echarts:
+ specifier: ^7.0.3
+ version: 7.0.3(@vue/runtime-core@3.5.22)(echarts@5.6.0)(vue@3.5.22)
+ vue-router:
+ specifier: ^4.4.5
+ version: 4.5.1(vue@3.5.22)
+ vuedraggable:
+ specifier: ^4.1.0
+ version: 4.1.0(vue@3.5.22)
+ devDependencies:
+ '@arco-design/web-vue':
+ specifier: ^2.56.3
+ version: 2.57.0(vue@3.5.22)
+ '@playwright/test':
+ specifier: ^1.55.1
+ version: 1.55.1
+ '@tailwindcss/postcss':
+ specifier: ^4.1.13
+ version: 4.1.14
+ '@vitejs/plugin-vue':
+ specifier: ^6.0.1
+ version: 6.0.1(vite@7.1.9(jiti@2.6.1)(lightningcss@1.30.1))(vue@3.5.22)
+ autoprefixer:
+ specifier: ^10.4.21
+ version: 10.4.21(postcss@8.5.6)
+ postcss:
+ specifier: ^8.5.6
+ version: 8.5.6
+ tailwindcss:
+ specifier: ^4.1.13
+ version: 4.1.14
+ unplugin-vue-components:
+ specifier: ^0.27.4
+ version: 0.27.5(@babel/parser@7.28.4)(rollup@4.52.3)(vue@3.5.22)
+ vite:
+ specifier: ^7.1.7
+ version: 7.1.9(jiti@2.6.1)(lightningcss@1.30.1)
+
+packages:
+
+ '@alloc/quick-lru@5.2.0':
+ resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
+ engines: {node: '>=10'}
+
+ '@antfu/utils@0.7.10':
+ resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==}
+
+ '@arco-design/color@0.4.0':
+ resolution: {integrity: sha512-s7p9MSwJgHeL8DwcATaXvWT3m2SigKpxx4JA1BGPHL4gfvaQsmQfrLBDpjOJFJuJ2jG2dMt3R3P8Pm9E65q18g==}
+
+ '@arco-design/web-vue@2.57.0':
+ resolution: {integrity: sha512-R5YReC3C2sG3Jv0+YuR3B7kzkq2KdhhQNCGXD8T11xAoa0zMt6SWTP1xJQOdZcM9du+q3z6tk5mRvh4qkieRJw==}
+ peerDependencies:
+ vue: ^3.1.0
+
+ '@babel/helper-string-parser@7.27.1':
+ resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-identifier@7.27.1':
+ resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/parser@7.28.4':
+ resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
+ '@babel/types@7.28.4':
+ resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==}
+ engines: {node: '>=6.9.0'}
+
+ '@esbuild/aix-ppc64@0.25.10':
+ resolution: {integrity: sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/android-arm64@0.25.10':
+ resolution: {integrity: sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm@0.25.10':
+ resolution: {integrity: sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-x64@0.25.10':
+ resolution: {integrity: sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/darwin-arm64@0.25.10':
+ resolution: {integrity: sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.25.10':
+ resolution: {integrity: sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/freebsd-arm64@0.25.10':
+ resolution: {integrity: sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.25.10':
+ resolution: {integrity: sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/linux-arm64@0.25.10':
+ resolution: {integrity: sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.25.10':
+ resolution: {integrity: sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.25.10':
+ resolution: {integrity: sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.25.10':
+ resolution: {integrity: sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.25.10':
+ resolution: {integrity: sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.25.10':
+ resolution: {integrity: sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.25.10':
+ resolution: {integrity: sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.25.10':
+ resolution: {integrity: sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.25.10':
+ resolution: {integrity: sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/netbsd-arm64@0.25.10':
+ resolution: {integrity: sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.25.10':
+ resolution: {integrity: sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/openbsd-arm64@0.25.10':
+ resolution: {integrity: sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.25.10':
+ resolution: {integrity: sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/openharmony-arm64@0.25.10':
+ resolution: {integrity: sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@esbuild/sunos-x64@0.25.10':
+ resolution: {integrity: sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/win32-arm64@0.25.10':
+ resolution: {integrity: sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.25.10':
+ resolution: {integrity: sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.25.10':
+ resolution: {integrity: sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
+ '@fastify/accept-negotiator@1.1.0':
+ resolution: {integrity: sha512-OIHZrb2ImZ7XG85HXOONLcJWGosv7sIvM2ifAPQVhg9Lv7qdmMBNVaai4QTdyuaqbKM5eO6sLSQOYI7wEQeCJQ==}
+ engines: {node: '>=14'}
+
+ '@fastify/ajv-compiler@3.6.0':
+ resolution: {integrity: sha512-LwdXQJjmMD+GwLOkP7TVC68qa+pSSogeWWmznRJ/coyTcfe9qA05AHFSe1eZFwK6q+xVRpChnvFUkf1iYaSZsQ==}
+
+ '@fastify/error@3.4.1':
+ resolution: {integrity: sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ==}
+
+ '@fastify/fast-json-stringify-compiler@4.3.0':
+ resolution: {integrity: sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==}
+
+ '@fastify/merge-json-schemas@0.1.1':
+ resolution: {integrity: sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA==}
+
+ '@fastify/send@2.1.0':
+ resolution: {integrity: sha512-yNYiY6sDkexoJR0D8IDy3aRP3+L4wdqCpvx5WP+VtEU58sn7USmKynBzDQex5X42Zzvw2gNzzYgP90UfWShLFA==}
+
+ '@fastify/static@6.12.0':
+ resolution: {integrity: sha512-KK1B84E6QD/FcQWxDI2aiUCwHxMJBI1KeCUzm1BwYpPY1b742+jeKruGHP2uOluuM6OkBPI8CIANrXcCRtC2oQ==}
+
+ '@isaacs/fs-minipass@4.0.1':
+ resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==}
+ engines: {node: '>=18.0.0'}
+
+ '@jridgewell/gen-mapping@0.3.13':
+ resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
+
+ '@jridgewell/remapping@2.3.5':
+ resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
+
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/sourcemap-codec@1.5.5':
+ resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
+
+ '@lukeed/ms@2.0.2':
+ resolution: {integrity: sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA==}
+ engines: {node: '>=8'}
+
+ '@nodelib/fs.scandir@2.1.5':
+ resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.stat@2.0.5':
+ resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.walk@1.2.8':
+ resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
+ engines: {node: '>= 8'}
+
+ '@playwright/test@1.55.1':
+ resolution: {integrity: sha512-IVAh/nOJaw6W9g+RJVlIQJ6gSiER+ae6mKQ5CX1bERzQgbC1VSeBlwdvczT7pxb0GWiyrxH4TGKbMfDb4Sq/ig==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ '@rolldown/pluginutils@1.0.0-beta.29':
+ resolution: {integrity: sha512-NIJgOsMjbxAXvoGq/X0gD7VPMQ8j9g0BiDaNjVNVjvl+iKXxL3Jre0v31RmBYeLEmkbj2s02v8vFTbUXi5XS2Q==}
+
+ '@rollup/pluginutils@5.3.0':
+ resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/rollup-android-arm-eabi@4.52.3':
+ resolution: {integrity: sha512-h6cqHGZ6VdnwliFG1NXvMPTy/9PS3h8oLh7ImwR+kl+oYnQizgjxsONmmPSb2C66RksfkfIxEVtDSEcJiO0tqw==}
+ cpu: [arm]
+ os: [android]
+
+ '@rollup/rollup-android-arm64@4.52.3':
+ resolution: {integrity: sha512-wd+u7SLT/u6knklV/ifG7gr5Qy4GUbH2hMWcDauPFJzmCZUAJ8L2bTkVXC2niOIxp8lk3iH/QX8kSrUxVZrOVw==}
+ cpu: [arm64]
+ os: [android]
+
+ '@rollup/rollup-darwin-arm64@4.52.3':
+ resolution: {integrity: sha512-lj9ViATR1SsqycwFkJCtYfQTheBdvlWJqzqxwc9f2qrcVrQaF/gCuBRTiTolkRWS6KvNxSk4KHZWG7tDktLgjg==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rollup/rollup-darwin-x64@4.52.3':
+ resolution: {integrity: sha512-+Dyo7O1KUmIsbzx1l+4V4tvEVnVQqMOIYtrxK7ncLSknl1xnMHLgn7gddJVrYPNZfEB8CIi3hK8gq8bDhb3h5A==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rollup/rollup-freebsd-arm64@4.52.3':
+ resolution: {integrity: sha512-u9Xg2FavYbD30g3DSfNhxgNrxhi6xVG4Y6i9Ur1C7xUuGDW3banRbXj+qgnIrwRN4KeJ396jchwy9bCIzbyBEQ==}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@rollup/rollup-freebsd-x64@4.52.3':
+ resolution: {integrity: sha512-5M8kyi/OX96wtD5qJR89a/3x5x8x5inXBZO04JWhkQb2JWavOWfjgkdvUqibGJeNNaz1/Z1PPza5/tAPXICI6A==}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.52.3':
+ resolution: {integrity: sha512-IoerZJ4l1wRMopEHRKOO16e04iXRDyZFZnNZKrWeNquh5d6bucjezgd+OxG03mOMTnS1x7hilzb3uURPkJ0OfA==}
+ cpu: [arm]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-arm-musleabihf@4.52.3':
+ resolution: {integrity: sha512-ZYdtqgHTDfvrJHSh3W22TvjWxwOgc3ThK/XjgcNGP2DIwFIPeAPNsQxrJO5XqleSlgDux2VAoWQ5iJrtaC1TbA==}
+ cpu: [arm]
+ os: [linux]
+ libc: [musl]
+
+ '@rollup/rollup-linux-arm64-gnu@4.52.3':
+ resolution: {integrity: sha512-NcViG7A0YtuFDA6xWSgmFb6iPFzHlf5vcqb2p0lGEbT+gjrEEz8nC/EeDHvx6mnGXnGCC1SeVV+8u+smj0CeGQ==}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-arm64-musl@4.52.3':
+ resolution: {integrity: sha512-d3pY7LWno6SYNXRm6Ebsq0DJGoiLXTb83AIPCXl9fmtIQs/rXoS8SJxxUNtFbJ5MiOvs+7y34np77+9l4nfFMw==}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@rollup/rollup-linux-loong64-gnu@4.52.3':
+ resolution: {integrity: sha512-3y5GA0JkBuirLqmjwAKwB0keDlI6JfGYduMlJD/Rl7fvb4Ni8iKdQs1eiunMZJhwDWdCvrcqXRY++VEBbvk6Eg==}
+ cpu: [loong64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-ppc64-gnu@4.52.3':
+ resolution: {integrity: sha512-AUUH65a0p3Q0Yfm5oD2KVgzTKgwPyp9DSXc3UA7DtxhEb/WSPfbG4wqXeSN62OG5gSo18em4xv6dbfcUGXcagw==}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-riscv64-gnu@4.52.3':
+ resolution: {integrity: sha512-1makPhFFVBqZE+XFg3Dkq+IkQ7JvmUrwwqaYBL2CE+ZpxPaqkGaiWFEWVGyvTwZace6WLJHwjVh/+CXbKDGPmg==}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-riscv64-musl@4.52.3':
+ resolution: {integrity: sha512-OOFJa28dxfl8kLOPMUOQBCO6z3X2SAfzIE276fwT52uXDWUS178KWq0pL7d6p1kz7pkzA0yQwtqL0dEPoVcRWg==}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [musl]
+
+ '@rollup/rollup-linux-s390x-gnu@4.52.3':
+ resolution: {integrity: sha512-jMdsML2VI5l+V7cKfZx3ak+SLlJ8fKvLJ0Eoa4b9/vCUrzXKgoKxvHqvJ/mkWhFiyp88nCkM5S2v6nIwRtPcgg==}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-x64-gnu@4.52.3':
+ resolution: {integrity: sha512-tPgGd6bY2M2LJTA1uGq8fkSPK8ZLYjDjY+ZLK9WHncCnfIz29LIXIqUgzCR0hIefzy6Hpbe8Th5WOSwTM8E7LA==}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-x64-musl@4.52.3':
+ resolution: {integrity: sha512-BCFkJjgk+WFzP+tcSMXq77ymAPIxsX9lFJWs+2JzuZTLtksJ2o5hvgTdIcZ5+oKzUDMwI0PfWzRBYAydAHF2Mw==}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@rollup/rollup-openharmony-arm64@4.52.3':
+ resolution: {integrity: sha512-KTD/EqjZF3yvRaWUJdD1cW+IQBk4fbQaHYJUmP8N4XoKFZilVL8cobFSTDnjTtxWJQ3JYaMgF4nObY/+nYkumA==}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@rollup/rollup-win32-arm64-msvc@4.52.3':
+ resolution: {integrity: sha512-+zteHZdoUYLkyYKObGHieibUFLbttX2r+58l27XZauq0tcWYYuKUwY2wjeCN9oK1Um2YgH2ibd6cnX/wFD7DuA==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rollup/rollup-win32-ia32-msvc@4.52.3':
+ resolution: {integrity: sha512-of1iHkTQSo3kr6dTIRX6t81uj/c/b15HXVsPcEElN5sS859qHrOepM5p9G41Hah+CTqSh2r8Bm56dL2z9UQQ7g==}
+ cpu: [ia32]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-gnu@4.52.3':
+ resolution: {integrity: sha512-s0hybmlHb56mWVZQj8ra9048/WZTPLILKxcvcq+8awSZmyiSUZjjem1AhU3Tf4ZKpYhK4mg36HtHDOe8QJS5PQ==}
+ cpu: [x64]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-msvc@4.52.3':
+ resolution: {integrity: sha512-zGIbEVVXVtauFgl3MRwGWEN36P5ZGenHRMgNw88X5wEhEBpq0XrMEZwOn07+ICrwM17XO5xfMZqh0OldCH5VTA==}
+ cpu: [x64]
+ os: [win32]
+
+ '@tailwindcss/node@4.1.14':
+ resolution: {integrity: sha512-hpz+8vFk3Ic2xssIA3e01R6jkmsAhvkQdXlEbRTk6S10xDAtiQiM3FyvZVGsucefq764euO/b8WUW9ysLdThHw==}
+
+ '@tailwindcss/oxide-android-arm64@4.1.14':
+ resolution: {integrity: sha512-a94ifZrGwMvbdeAxWoSuGcIl6/DOP5cdxagid7xJv6bwFp3oebp7y2ImYsnZBMTwjn5Ev5xESvS3FFYUGgPODQ==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [android]
+
+ '@tailwindcss/oxide-darwin-arm64@4.1.14':
+ resolution: {integrity: sha512-HkFP/CqfSh09xCnrPJA7jud7hij5ahKyWomrC3oiO2U9i0UjP17o9pJbxUN0IJ471GTQQmzwhp0DEcpbp4MZTA==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@tailwindcss/oxide-darwin-x64@4.1.14':
+ resolution: {integrity: sha512-eVNaWmCgdLf5iv6Qd3s7JI5SEFBFRtfm6W0mphJYXgvnDEAZ5sZzqmI06bK6xo0IErDHdTA5/t7d4eTfWbWOFw==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@tailwindcss/oxide-freebsd-x64@4.1.14':
+ resolution: {integrity: sha512-QWLoRXNikEuqtNb0dhQN6wsSVVjX6dmUFzuuiL09ZeXju25dsei2uIPl71y2Ic6QbNBsB4scwBoFnlBfabHkEw==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.14':
+ resolution: {integrity: sha512-VB4gjQni9+F0VCASU+L8zSIyjrLLsy03sjcR3bM0V2g4SNamo0FakZFKyUQ96ZVwGK4CaJsc9zd/obQy74o0Fw==}
+ engines: {node: '>= 10'}
+ cpu: [arm]
+ os: [linux]
+
+ '@tailwindcss/oxide-linux-arm64-gnu@4.1.14':
+ resolution: {integrity: sha512-qaEy0dIZ6d9vyLnmeg24yzA8XuEAD9WjpM5nIM1sUgQ/Zv7cVkharPDQcmm/t/TvXoKo/0knI3me3AGfdx6w1w==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@tailwindcss/oxide-linux-arm64-musl@4.1.14':
+ resolution: {integrity: sha512-ISZjT44s59O8xKsPEIesiIydMG/sCXoMBCqsphDm/WcbnuWLxxb+GcvSIIA5NjUw6F8Tex7s5/LM2yDy8RqYBQ==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@tailwindcss/oxide-linux-x64-gnu@4.1.14':
+ resolution: {integrity: sha512-02c6JhLPJj10L2caH4U0zF8Hji4dOeahmuMl23stk0MU1wfd1OraE7rOloidSF8W5JTHkFdVo/O7uRUJJnUAJg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@tailwindcss/oxide-linux-x64-musl@4.1.14':
+ resolution: {integrity: sha512-TNGeLiN1XS66kQhxHG/7wMeQDOoL0S33x9BgmydbrWAb9Qw0KYdd8o1ifx4HOGDWhVmJ+Ul+JQ7lyknQFilO3Q==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@tailwindcss/oxide-wasm32-wasi@4.1.14':
+ resolution: {integrity: sha512-uZYAsaW/jS/IYkd6EWPJKW/NlPNSkWkBlaeVBi/WsFQNP05/bzkebUL8FH1pdsqx4f2fH/bWFcUABOM9nfiJkQ==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+ bundledDependencies:
+ - '@napi-rs/wasm-runtime'
+ - '@emnapi/core'
+ - '@emnapi/runtime'
+ - '@tybys/wasm-util'
+ - '@emnapi/wasi-threads'
+ - tslib
+
+ '@tailwindcss/oxide-win32-arm64-msvc@4.1.14':
+ resolution: {integrity: sha512-Az0RnnkcvRqsuoLH2Z4n3JfAef0wElgzHD5Aky/e+0tBUxUhIeIqFBTMNQvmMRSP15fWwmvjBxZ3Q8RhsDnxAA==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@tailwindcss/oxide-win32-x64-msvc@4.1.14':
+ resolution: {integrity: sha512-ttblVGHgf68kEE4om1n/n44I0yGPkCPbLsqzjvybhpwa6mKKtgFfAzy6btc3HRmuW7nHe0OOrSeNP9sQmmH9XA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [win32]
+
+ '@tailwindcss/oxide@4.1.14':
+ resolution: {integrity: sha512-23yx+VUbBwCg2x5XWdB8+1lkPajzLmALEfMb51zZUBYaYVPDQvBSD/WYDqiVyBIo2BZFa3yw1Rpy3G2Jp+K0dw==}
+ engines: {node: '>= 10'}
+
+ '@tailwindcss/postcss@4.1.14':
+ resolution: {integrity: sha512-BdMjIxy7HUNThK87C7BC8I1rE8BVUsfNQSI5siQ4JK3iIa3w0XyVvVL9SXLWO//CtYTcp1v7zci0fYwJOjB+Zg==}
+
+ '@types/estree@1.0.8':
+ resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
+
+ '@vitejs/plugin-vue@6.0.1':
+ resolution: {integrity: sha512-+MaE752hU0wfPFJEUAIxqw18+20euHHdxVtMvbFcOEpjEyfqXH/5DCoTHiVJ0J29EhTJdoTkjEv5YBKU9dnoTw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ peerDependencies:
+ vite: ^5.0.0 || ^6.0.0 || ^7.0.0
+ vue: ^3.2.25
+
+ '@vue/compiler-core@3.5.22':
+ resolution: {integrity: sha512-jQ0pFPmZwTEiRNSb+i9Ow/I/cHv2tXYqsnHKKyCQ08irI2kdF5qmYedmF8si8mA7zepUFmJ2hqzS8CQmNOWOkQ==}
+
+ '@vue/compiler-dom@3.5.22':
+ resolution: {integrity: sha512-W8RknzUM1BLkypvdz10OVsGxnMAuSIZs9Wdx1vzA3mL5fNMN15rhrSCLiTm6blWeACwUwizzPVqGJgOGBEN/hA==}
+
+ '@vue/compiler-sfc@3.5.22':
+ resolution: {integrity: sha512-tbTR1zKGce4Lj+JLzFXDq36K4vcSZbJ1RBu8FxcDv1IGRz//Dh2EBqksyGVypz3kXpshIfWKGOCcqpSbyGWRJQ==}
+
+ '@vue/compiler-ssr@3.5.22':
+ resolution: {integrity: sha512-GdgyLvg4R+7T8Nk2Mlighx7XGxq/fJf9jaVofc3IL0EPesTE86cP/8DD1lT3h1JeZr2ySBvyqKQJgbS54IX1Ww==}
+
+ '@vue/devtools-api@6.6.4':
+ resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==}
+
+ '@vue/reactivity@3.5.22':
+ resolution: {integrity: sha512-f2Wux4v/Z2pqc9+4SmgZC1p73Z53fyD90NFWXiX9AKVnVBEvLFOWCEgJD3GdGnlxPZt01PSlfmLqbLYzY/Fw4A==}
+
+ '@vue/runtime-core@3.5.22':
+ resolution: {integrity: sha512-EHo4W/eiYeAzRTN5PCextDUZ0dMs9I8mQ2Fy+OkzvRPUYQEyK9yAjbasrMCXbLNhF7P0OUyivLjIy0yc6VrLJQ==}
+
+ '@vue/runtime-dom@3.5.22':
+ resolution: {integrity: sha512-Av60jsryAkI023PlN7LsqrfPvwfxOd2yAwtReCjeuugTJTkgrksYJJstg1e12qle0NarkfhfFu1ox2D+cQotww==}
+
+ '@vue/server-renderer@3.5.22':
+ resolution: {integrity: sha512-gXjo+ao0oHYTSswF+a3KRHZ1WszxIqO7u6XwNHqcqb9JfyIL/pbWrrh/xLv7jeDqla9u+LK7yfZKHih1e1RKAQ==}
+ peerDependencies:
+ vue: 3.5.22
+
+ '@vue/shared@3.5.22':
+ resolution: {integrity: sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w==}
+
+ abstract-logging@2.0.1:
+ resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==}
+
+ accepts@1.3.8:
+ resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
+ engines: {node: '>= 0.6'}
+
+ acorn@8.15.0:
+ resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
+ ajv-formats@2.1.1:
+ resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==}
+ peerDependencies:
+ ajv: ^8.0.0
+ peerDependenciesMeta:
+ ajv:
+ optional: true
+
+ ajv-formats@3.0.1:
+ resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==}
+ peerDependencies:
+ ajv: ^8.0.0
+ peerDependenciesMeta:
+ ajv:
+ optional: true
+
+ ajv@8.17.1:
+ resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ array-flatten@1.1.1:
+ resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}
+
+ artplayer-plugin-danmuku@5.2.0:
+ resolution: {integrity: sha512-iHHSGEc0J+gl7imX4nmLqqC7LXmv8xeGf2lUevhhyUCoiCRZplecpKQICHjErVb1Yqyp1xCy6Sp8eYN+EpFWFw==}
+
+ artplayer@5.3.0:
+ resolution: {integrity: sha512-yExO39MpEg4P+bxgChxx1eJfiUPE4q1QQRLCmqGhlsj+ANuaoEkR8hF93LdI5ZyrAcIbJkuEndxEiUoKobifDw==}
+
+ asynckit@0.4.0:
+ resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
+
+ atomic-sleep@1.0.0:
+ resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==}
+ engines: {node: '>=8.0.0'}
+
+ autoprefixer@10.4.21:
+ resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==}
+ engines: {node: ^10 || ^12 || >=14}
+ hasBin: true
+ peerDependencies:
+ postcss: ^8.1.0
+
+ avvio@8.4.0:
+ resolution: {integrity: sha512-CDSwaxINFy59iNwhYnkvALBwZiTydGkOecZyPkqBpABYR1KqGEsET0VOOYDwtleZSUIdeY36DC2bSZ24CO1igA==}
+
+ axios@1.12.0:
+ resolution: {integrity: sha512-oXTDccv8PcfjZmPGlWsPSwtOJCZ/b6W5jAMCNcfwJbCzDckwG0jrYJFaWH1yvivfCXjVzV/SPDEhMB3Q+DSurg==}
+
+ b-tween@0.3.3:
+ resolution: {integrity: sha512-oEHegcRpA7fAuc9KC4nktucuZn2aS8htymCPcP3qkEGPqiBH+GfqtqoG2l7LxHngg6O0HFM7hOeOYExl1Oz4ZA==}
+
+ b-validate@1.5.3:
+ resolution: {integrity: sha512-iCvCkGFskbaYtfQ0a3GmcQCHl/Sv1GufXFGuUQ+FE+WJa7A/espLOuFIn09B944V8/ImPj71T4+rTASxO2PAuA==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ baseline-browser-mapping@2.8.10:
+ resolution: {integrity: sha512-uLfgBi+7IBNay8ECBO2mVMGZAc1VgZWEChxm4lv+TobGdG82LnXMjuNGo/BSSZZL4UmkWhxEHP2f5ziLNwGWMA==}
+ hasBin: true
+
+ basic-auth@2.0.1:
+ resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==}
+ engines: {node: '>= 0.8'}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ body-parser@1.20.3:
+ resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==}
+ engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
+
+ brace-expansion@2.0.2:
+ resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browserslist@4.26.3:
+ resolution: {integrity: sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+
+ bytes@3.1.2:
+ resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
+ engines: {node: '>= 0.8'}
+
+ call-bind-apply-helpers@1.0.2:
+ resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
+ engines: {node: '>= 0.4'}
+
+ call-bound@1.0.4:
+ resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==}
+ engines: {node: '>= 0.4'}
+
+ caniuse-lite@1.0.30001746:
+ resolution: {integrity: sha512-eA7Ys/DGw+pnkWWSE/id29f2IcPHVoE8wxtvE5JdvD2V28VTDPy1yEeo11Guz0sJ4ZeGRcm3uaTcAqK1LXaphA==}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ chokidar@3.6.0:
+ resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
+ engines: {node: '>= 8.10.0'}
+
+ chownr@3.0.0:
+ resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==}
+ engines: {node: '>=18'}
+
+ cliui@8.0.1:
+ resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
+ engines: {node: '>=12'}
+
+ color-convert@1.9.3:
+ resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.3:
+ resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ color-string@1.9.1:
+ resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==}
+
+ color@3.2.1:
+ resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==}
+
+ combined-stream@1.0.8:
+ resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
+ engines: {node: '>= 0.8'}
+
+ compressible@2.0.18:
+ resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==}
+ engines: {node: '>= 0.6'}
+
+ compression@1.8.1:
+ resolution: {integrity: sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==}
+ engines: {node: '>= 0.8.0'}
+
+ compute-scroll-into-view@1.0.20:
+ resolution: {integrity: sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==}
+
+ confbox@0.1.8:
+ resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
+
+ connect-pause@0.1.1:
+ resolution: {integrity: sha512-a1gSWQBQD73krFXdUEYJom2RTFrWUL3YvXDCRkyv//GVXc79cdW9MngtRuN9ih4FDKBtfJAJId+BbDuX+1rh2w==}
+
+ content-disposition@0.5.4:
+ resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
+ engines: {node: '>= 0.6'}
+
+ content-type@1.0.5:
+ resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
+ engines: {node: '>= 0.6'}
+
+ cookie-signature@1.0.6:
+ resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==}
+
+ cookie@0.7.1:
+ resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==}
+ engines: {node: '>= 0.6'}
+
+ cors@2.8.5:
+ resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==}
+ engines: {node: '>= 0.10'}
+
+ crypto-js@4.2.0:
+ resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==}
+
+ csstype@3.1.3:
+ resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
+
+ dayjs@1.11.18:
+ resolution: {integrity: sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==}
+
+ debug@2.6.9:
+ resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ debug@3.1.0:
+ resolution: {integrity: sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ debug@4.4.3:
+ resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ delayed-stream@1.0.0:
+ resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
+ engines: {node: '>=0.4.0'}
+
+ depd@2.0.0:
+ resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
+ engines: {node: '>= 0.8'}
+
+ destroy@1.2.0:
+ resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
+ engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
+
+ detect-libc@2.1.1:
+ resolution: {integrity: sha512-ecqj/sy1jcK1uWrwpR67UhYrIFQ+5WlGxth34WquCbamhFA6hkkwiu37o6J5xCHdo1oixJRfVRw+ywV+Hq/0Aw==}
+ engines: {node: '>=8'}
+
+ dunder-proto@1.0.1:
+ resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
+ engines: {node: '>= 0.4'}
+
+ echarts@5.6.0:
+ resolution: {integrity: sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==}
+
+ ee-first@1.1.1:
+ resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
+
+ electron-to-chromium@1.5.229:
+ resolution: {integrity: sha512-cwhDcZKGcT/rEthLRJ9eBlMDkh1sorgsuk+6dpsehV0g9CABsIqBxU4rLRjG+d/U6pYU1s37A4lSKrVc5lSQYg==}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ encodeurl@1.0.2:
+ resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
+ engines: {node: '>= 0.8'}
+
+ encodeurl@2.0.0:
+ resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==}
+ engines: {node: '>= 0.8'}
+
+ enhanced-resolve@5.18.3:
+ resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==}
+ engines: {node: '>=10.13.0'}
+
+ entities@4.5.0:
+ resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
+ engines: {node: '>=0.12'}
+
+ errorhandler@1.5.1:
+ resolution: {integrity: sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==}
+ engines: {node: '>= 0.8'}
+
+ es-define-property@1.0.1:
+ resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
+ engines: {node: '>= 0.4'}
+
+ es-errors@1.3.0:
+ resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
+ engines: {node: '>= 0.4'}
+
+ es-object-atoms@1.1.1:
+ resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
+ engines: {node: '>= 0.4'}
+
+ es-set-tostringtag@2.1.0:
+ resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
+ engines: {node: '>= 0.4'}
+
+ es6-promise@4.2.8:
+ resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
+
+ esbuild@0.25.10:
+ resolution: {integrity: sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-html@1.0.3:
+ resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
+
+ estree-walker@2.0.2:
+ resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
+
+ etag@1.8.1:
+ resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
+ engines: {node: '>= 0.6'}
+
+ express-urlrewrite@1.4.0:
+ resolution: {integrity: sha512-PI5h8JuzoweS26vFizwQl6UTF25CAHSggNv0J25Dn/IKZscJHWZzPrI5z2Y2jgOzIaw2qh8l6+/jUcig23Z2SA==}
+
+ express@4.21.2:
+ resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==}
+ engines: {node: '>= 0.10.0'}
+
+ fast-content-type-parse@1.1.0:
+ resolution: {integrity: sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ==}
+
+ fast-decode-uri-component@1.0.1:
+ resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==}
+
+ fast-deep-equal@3.1.3:
+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+
+ fast-glob@3.3.3:
+ resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
+ engines: {node: '>=8.6.0'}
+
+ fast-json-stringify@5.16.1:
+ resolution: {integrity: sha512-KAdnLvy1yu/XrRtP+LJnxbBGrhN+xXu+gt3EUvZhYGKCr3lFHq/7UFJHHFgmJKoqlh6B40bZLEv7w46B0mqn1g==}
+
+ fast-querystring@1.1.2:
+ resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==}
+
+ fast-uri@2.4.0:
+ resolution: {integrity: sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA==}
+
+ fast-uri@3.1.0:
+ resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==}
+
+ fastify-plugin@4.5.1:
+ resolution: {integrity: sha512-stRHYGeuqpEZTL1Ef0Ovr2ltazUT9g844X5z/zEBFLG8RYlpDiOCIG+ATvYEp+/zmc7sN29mcIMp8gvYplYPIQ==}
+
+ fastify@4.29.1:
+ resolution: {integrity: sha512-m2kMNHIG92tSNWv+Z3UeTR9AWLLuo7KctC7mlFPtMEVrfjIhmQhkQnT9v15qA/BfVq3vvj134Y0jl9SBje3jXQ==}
+
+ fastq@1.19.1:
+ resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
+
+ fdir@6.5.0:
+ resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ picomatch: ^3 || ^4
+ peerDependenciesMeta:
+ picomatch:
+ optional: true
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ finalhandler@1.3.1:
+ resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==}
+ engines: {node: '>= 0.8'}
+
+ find-my-way@8.2.2:
+ resolution: {integrity: sha512-Dobi7gcTEq8yszimcfp/R7+owiT4WncAJ7VTTgFH1jYJ5GaG1FbhjwDG820hptN0QDFvzVY3RfCzdInvGPGzjA==}
+ engines: {node: '>=14'}
+
+ flv.js@1.6.2:
+ resolution: {integrity: sha512-xre4gUbX1MPtgQRKj2pxJENp/RnaHaxYvy3YToVVCrSmAWUu85b9mug6pTXF6zakUjNP2lFWZ1rkSX7gxhB/2A==}
+
+ follow-redirects@1.15.11:
+ resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==}
+ engines: {node: '>=4.0'}
+ peerDependencies:
+ debug: '*'
+ peerDependenciesMeta:
+ debug:
+ optional: true
+
+ form-data@4.0.4:
+ resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==}
+ engines: {node: '>= 6'}
+
+ forwarded@0.2.0:
+ resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
+ engines: {node: '>= 0.6'}
+
+ fraction.js@4.3.7:
+ resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
+
+ fresh@0.5.2:
+ resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
+ engines: {node: '>= 0.6'}
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.2:
+ resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-intrinsic@1.3.0:
+ resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
+ engines: {node: '>= 0.4'}
+
+ get-proto@1.0.1:
+ resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
+ engines: {node: '>= 0.4'}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@8.1.0:
+ resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==}
+ engines: {node: '>=12'}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ gopd@1.2.0:
+ resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
+ engines: {node: '>= 0.4'}
+
+ graceful-fs@4.2.11:
+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ has-symbols@1.1.0:
+ resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
+ engines: {node: '>= 0.4'}
+
+ has-tostringtag@1.0.2:
+ resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
+ engines: {node: '>= 0.4'}
+
+ hasown@2.0.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+ engines: {node: '>= 0.4'}
+
+ hls.js@1.6.13:
+ resolution: {integrity: sha512-hNEzjZNHf5bFrUNvdS4/1RjIanuJ6szpWNfTaX5I6WfGynWXGT7K/YQLYtemSvFExzeMdgdE4SsyVLJbd5PcZA==}
+
+ http-errors@2.0.0:
+ resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
+ engines: {node: '>= 0.8'}
+
+ iconv-lite@0.4.24:
+ resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
+ engines: {node: '>=0.10.0'}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ ipaddr.js@1.9.1:
+ resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
+ engines: {node: '>= 0.10'}
+
+ is-arrayish@0.3.4:
+ resolution: {integrity: sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-promise@2.2.2:
+ resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==}
+
+ isarray@0.0.1:
+ resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==}
+
+ jiti@2.6.1:
+ resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
+ hasBin: true
+
+ jju@1.4.0:
+ resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==}
+
+ json-parse-helpfulerror@1.0.3:
+ resolution: {integrity: sha512-XgP0FGR77+QhUxjXkwOMkC94k3WtqEBfcnjWqhRd82qTat4SWKRE+9kUnynz/shm3I4ea2+qISvTIeGTNU7kJg==}
+
+ json-schema-ref-resolver@1.0.1:
+ resolution: {integrity: sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw==}
+
+ json-schema-traverse@1.0.0:
+ resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
+
+ json-server@0.17.4:
+ resolution: {integrity: sha512-bGBb0WtFuAKbgI7JV3A864irWnMZSvBYRJbohaOuatHwKSRFUfqtQlrYMrB6WbalXy/cJabyjlb7JkHli6dYjQ==}
+ engines: {node: '>=12'}
+ hasBin: true
+
+ kind-of@6.0.3:
+ resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
+ engines: {node: '>=0.10.0'}
+
+ light-my-request@5.14.0:
+ resolution: {integrity: sha512-aORPWntbpH5esaYpGOOmri0OHDOe3wC5M2MQxZ9dvMLZm6DnaAn0kJlcbU9hwsQgLzmZyReKwFwwPkR+nHu5kA==}
+
+ lightningcss-darwin-arm64@1.30.1:
+ resolution: {integrity: sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+
+ lightningcss-darwin-x64@1.30.1:
+ resolution: {integrity: sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [darwin]
+
+ lightningcss-freebsd-x64@1.30.1:
+ resolution: {integrity: sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [freebsd]
+
+ lightningcss-linux-arm-gnueabihf@1.30.1:
+ resolution: {integrity: sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm]
+ os: [linux]
+
+ lightningcss-linux-arm64-gnu@1.30.1:
+ resolution: {integrity: sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ lightningcss-linux-arm64-musl@1.30.1:
+ resolution: {integrity: sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ lightningcss-linux-x64-gnu@1.30.1:
+ resolution: {integrity: sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ lightningcss-linux-x64-musl@1.30.1:
+ resolution: {integrity: sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ lightningcss-win32-arm64-msvc@1.30.1:
+ resolution: {integrity: sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [win32]
+
+ lightningcss-win32-x64-msvc@1.30.1:
+ resolution: {integrity: sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [win32]
+
+ lightningcss@1.30.1:
+ resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==}
+ engines: {node: '>= 12.0.0'}
+
+ local-pkg@0.5.1:
+ resolution: {integrity: sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==}
+ engines: {node: '>=14'}
+
+ lodash-es@4.17.21:
+ resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
+
+ lodash-id@0.14.1:
+ resolution: {integrity: sha512-ikQPBTiq/d5m6dfKQlFdIXFzvThPi2Be9/AHxktOnDSfSxE1j9ICbBT5Elk1ke7HSTgM38LHTpmJovo9/klnLg==}
+ engines: {node: '>= 4'}
+
+ lodash@4.17.21:
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+
+ lowdb@1.0.0:
+ resolution: {integrity: sha512-2+x8esE/Wb9SQ1F9IHaYWfsC9FIecLOPrK4g17FGEayjUWH172H6nwicRovGvSE2CPZouc2MCIqCI7h9d+GftQ==}
+ engines: {node: '>=4'}
+
+ magic-string@0.30.19:
+ resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==}
+
+ math-intrinsics@1.1.0:
+ resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
+ engines: {node: '>= 0.4'}
+
+ media-typer@0.3.0:
+ resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
+ engines: {node: '>= 0.6'}
+
+ merge-descriptors@1.0.3:
+ resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==}
+
+ merge2@1.4.1:
+ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
+ engines: {node: '>= 8'}
+
+ method-override@3.0.0:
+ resolution: {integrity: sha512-IJ2NNN/mSl9w3kzWB92rcdHpz+HjkxhDJWNDBqSlas+zQdP8wBiJzITPg08M/k2uVvMow7Sk41atndNtt/PHSA==}
+ engines: {node: '>= 0.10'}
+
+ methods@1.1.2:
+ resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==}
+ engines: {node: '>= 0.6'}
+
+ micromatch@4.0.8:
+ resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
+ engines: {node: '>=8.6'}
+
+ mime-db@1.52.0:
+ resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
+ engines: {node: '>= 0.6'}
+
+ mime-db@1.54.0:
+ resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==}
+ engines: {node: '>= 0.6'}
+
+ mime-types@2.1.35:
+ resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
+ engines: {node: '>= 0.6'}
+
+ mime@1.6.0:
+ resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
+ engines: {node: '>=4'}
+ hasBin: true
+
+ mime@3.0.0:
+ resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==}
+ engines: {node: '>=10.0.0'}
+ hasBin: true
+
+ minimatch@5.1.6:
+ resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
+ engines: {node: '>=10'}
+
+ minimatch@9.0.5:
+ resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ minipass@7.1.2:
+ resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ minizlib@3.1.0:
+ resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==}
+ engines: {node: '>= 18'}
+
+ mlly@1.8.0:
+ resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==}
+
+ morgan@1.10.1:
+ resolution: {integrity: sha512-223dMRJtI/l25dJKWpgij2cMtywuG/WiUKXdvwfbhGKBhy1puASqXwFzmWZ7+K73vUPoR7SS2Qz2cI/g9MKw0A==}
+ engines: {node: '>= 0.8.0'}
+
+ mpegts.js@1.8.0:
+ resolution: {integrity: sha512-ZtujqtmTjWgcDDkoOnLvrOKUTO/MKgLHM432zGDI8oPaJ0S+ebPxg1nEpDpLw6I7KmV/GZgUIrfbWi3qqEircg==}
+
+ ms@2.0.0:
+ resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.11:
+ resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ negotiator@0.6.3:
+ resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
+ engines: {node: '>= 0.6'}
+
+ negotiator@0.6.4:
+ resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==}
+ engines: {node: '>= 0.6'}
+
+ node-releases@2.0.21:
+ resolution: {integrity: sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==}
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ normalize-range@0.1.2:
+ resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
+ engines: {node: '>=0.10.0'}
+
+ number-precision@1.6.0:
+ resolution: {integrity: sha512-05OLPgbgmnixJw+VvEh18yNPUo3iyp4BEWJcrLu4X9W05KmMifN7Mu5exYvQXqxxeNWhvIF+j3Rij+HmddM/hQ==}
+
+ object-assign@4.1.1:
+ resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
+ engines: {node: '>=0.10.0'}
+
+ object-inspect@1.13.4:
+ resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
+ engines: {node: '>= 0.4'}
+
+ on-exit-leak-free@2.1.2:
+ resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==}
+ engines: {node: '>=14.0.0'}
+
+ on-finished@2.3.0:
+ resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==}
+ engines: {node: '>= 0.8'}
+
+ on-finished@2.4.1:
+ resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
+ engines: {node: '>= 0.8'}
+
+ on-headers@1.1.0:
+ resolution: {integrity: sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==}
+ engines: {node: '>= 0.8'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ option-validator@2.0.6:
+ resolution: {integrity: sha512-tmZDan2LRIRQyhUGvkff68/O0R8UmF+Btmiiz0SmSw2ng3CfPZB9wJlIjHpe/MKUZqyIZkVIXCrwr1tIN+0Dzg==}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ parseurl@1.3.3:
+ resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
+ engines: {node: '>= 0.8'}
+
+ path-to-regexp@0.1.12:
+ resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==}
+
+ path-to-regexp@1.9.0:
+ resolution: {integrity: sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==}
+
+ pathe@2.0.3:
+ resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
+
+ picocolors@1.1.1:
+ resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ picomatch@4.0.3:
+ resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
+ engines: {node: '>=12'}
+
+ pify@3.0.0:
+ resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==}
+ engines: {node: '>=4'}
+
+ pinia@2.3.1:
+ resolution: {integrity: sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug==}
+ peerDependencies:
+ typescript: '>=4.4.4'
+ vue: ^2.7.0 || ^3.5.11
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ pino-abstract-transport@2.0.0:
+ resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==}
+
+ pino-std-serializers@7.0.0:
+ resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==}
+
+ pino@9.13.0:
+ resolution: {integrity: sha512-SpTXQhkQXekIKEe7c887S3lk3v90Q+/HVRZVyNAhe98PQc++6I5ec/R0pciH8/CciXjCoVZIZfRNicbC6KZgnw==}
+ hasBin: true
+
+ pkg-types@1.3.1:
+ resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
+
+ playwright-core@1.55.1:
+ resolution: {integrity: sha512-Z6Mh9mkwX+zxSlHqdr5AOcJnfp+xUWLCt9uKV18fhzA8eyxUd8NUWzAjxUh55RZKSYwDGX0cfaySdhZJGMoJ+w==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ playwright@1.55.1:
+ resolution: {integrity: sha512-cJW4Xd/G3v5ovXtJJ52MAOclqeac9S/aGGgRzLabuF8TnIb6xHvMzKIa6JmrRzUkeXJgfL1MhukP0NK6l39h3A==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ please-upgrade-node@3.2.0:
+ resolution: {integrity: sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==}
+
+ pluralize@8.0.0:
+ resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==}
+ engines: {node: '>=4'}
+
+ postcss-value-parser@4.2.0:
+ resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
+
+ postcss@8.5.6:
+ resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
+ engines: {node: ^10 || ^12 || >=14}
+
+ process-warning@3.0.0:
+ resolution: {integrity: sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==}
+
+ process-warning@5.0.0:
+ resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==}
+
+ proxy-addr@2.0.7:
+ resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
+ engines: {node: '>= 0.10'}
+
+ proxy-from-env@1.1.0:
+ resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
+
+ qs@6.13.0:
+ resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==}
+ engines: {node: '>=0.6'}
+
+ queue-microtask@1.2.3:
+ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+
+ quick-format-unescaped@4.0.4:
+ resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==}
+
+ range-parser@1.2.1:
+ resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
+ engines: {node: '>= 0.6'}
+
+ raw-body@2.5.2:
+ resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==}
+ engines: {node: '>= 0.8'}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ real-require@0.2.0:
+ resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==}
+ engines: {node: '>= 12.13.0'}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ require-from-string@2.0.2:
+ resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
+ engines: {node: '>=0.10.0'}
+
+ resize-observer-polyfill@1.5.1:
+ resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==}
+
+ ret@0.4.3:
+ resolution: {integrity: sha512-0f4Memo5QP7WQyUEAYUO3esD/XjOc3Zjjg5CPsAq1p8sIu0XPeMbHJemKA0BO7tV0X7+A0FoEpbmHXWxPyD3wQ==}
+ engines: {node: '>=10'}
+
+ reusify@1.1.0:
+ resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
+ engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+
+ rfdc@1.4.1:
+ resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
+
+ rollup@4.52.3:
+ resolution: {integrity: sha512-RIDh866U8agLgiIcdpB+COKnlCreHJLfIhWC3LVflku5YHfpnsIKigRZeFfMfCc4dVcqNVfQQ5gO/afOck064A==}
+ engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+ hasBin: true
+
+ run-parallel@1.2.0:
+ resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+
+ safe-buffer@5.1.2:
+ resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ safe-regex2@3.1.0:
+ resolution: {integrity: sha512-RAAZAGbap2kBfbVhvmnTFv73NWLMvDGOITFYTZBAaY8eR+Ir4ef7Up/e7amo+y1+AH+3PtLkrt9mvcTsG9LXug==}
+
+ safe-stable-stringify@2.5.0:
+ resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==}
+ engines: {node: '>=10'}
+
+ safer-buffer@2.1.2:
+ resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+
+ scroll-into-view-if-needed@2.2.31:
+ resolution: {integrity: sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==}
+
+ secure-json-parse@2.7.0:
+ resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==}
+
+ semver-compare@1.0.0:
+ resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==}
+
+ semver@7.7.2:
+ resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ send@0.19.0:
+ resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==}
+ engines: {node: '>= 0.8.0'}
+
+ serve-static@1.16.2:
+ resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==}
+ engines: {node: '>= 0.8.0'}
+
+ server-destroy@1.0.1:
+ resolution: {integrity: sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==}
+
+ set-cookie-parser@2.7.1:
+ resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==}
+
+ setprototypeof@1.2.0:
+ resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
+
+ shaka-player@4.16.3:
+ resolution: {integrity: sha512-KFvcg78uwoAyYJAlEa8y673XpPZeQCVG9L1ikoCSUMhCHeNNkNiG1FB4LZwGYN1IrwVEPH3IJVpWoB7RU4d0HA==}
+
+ side-channel-list@1.0.0:
+ resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
+ engines: {node: '>= 0.4'}
+
+ side-channel-map@1.0.1:
+ resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==}
+ engines: {node: '>= 0.4'}
+
+ side-channel-weakmap@1.0.2:
+ resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==}
+ engines: {node: '>= 0.4'}
+
+ side-channel@1.1.0:
+ resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
+ engines: {node: '>= 0.4'}
+
+ simple-swizzle@0.2.4:
+ resolution: {integrity: sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==}
+
+ slow-redact@0.3.0:
+ resolution: {integrity: sha512-cf723wn9JeRIYP9tdtd86GuqoR5937u64Io+CYjlm2i7jvu7g0H+Cp0l0ShAf/4ZL+ISUTVT+8Qzz7RZmp9FjA==}
+
+ sonic-boom@4.2.0:
+ resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==}
+
+ sortablejs@1.14.0:
+ resolution: {integrity: sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==}
+
+ source-map-js@1.2.1:
+ resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
+ engines: {node: '>=0.10.0'}
+
+ split2@4.2.0:
+ resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
+ engines: {node: '>= 10.x'}
+
+ statuses@2.0.1:
+ resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
+ engines: {node: '>= 0.8'}
+
+ steno@0.4.4:
+ resolution: {integrity: sha512-EEHMVYHNXFHfGtgjNITnka0aHhiAlo93F7z2/Pwd+g0teG9CnM3JIINM7hVVB5/rhw9voufD7Wukwgtw2uqh6w==}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ tailwindcss@4.1.14:
+ resolution: {integrity: sha512-b7pCxjGO98LnxVkKjaZSDeNuljC4ueKUddjENJOADtubtdo8llTaJy7HwBMeLNSSo2N5QIAgklslK1+Ir8r6CA==}
+
+ tapable@2.3.0:
+ resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==}
+ engines: {node: '>=6'}
+
+ tar@7.5.1:
+ resolution: {integrity: sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==}
+ engines: {node: '>=18'}
+
+ thread-stream@3.1.0:
+ resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==}
+
+ tinyglobby@0.2.15:
+ resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
+ engines: {node: '>=12.0.0'}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ toad-cache@3.7.0:
+ resolution: {integrity: sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==}
+ engines: {node: '>=12'}
+
+ toidentifier@1.0.1:
+ resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
+ engines: {node: '>=0.6'}
+
+ tslib@2.3.0:
+ resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==}
+
+ type-is@1.6.18:
+ resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
+ engines: {node: '>= 0.6'}
+
+ ufo@1.6.1:
+ resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==}
+
+ unpipe@1.0.0:
+ resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
+ engines: {node: '>= 0.8'}
+
+ unplugin-vue-components@0.27.5:
+ resolution: {integrity: sha512-m9j4goBeNwXyNN8oZHHxvIIYiG8FQ9UfmKWeNllpDvhU7btKNNELGPt+o3mckQKuPwrE7e0PvCsx+IWuDSD9Vg==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@babel/parser': ^7.15.8
+ '@nuxt/kit': ^3.2.2
+ vue: 2 || 3
+ peerDependenciesMeta:
+ '@babel/parser':
+ optional: true
+ '@nuxt/kit':
+ optional: true
+
+ unplugin@1.16.1:
+ resolution: {integrity: sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==}
+ engines: {node: '>=14.0.0'}
+
+ update-browserslist-db@1.1.3:
+ resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+
+ utils-merge@1.0.1:
+ resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
+ engines: {node: '>= 0.4.0'}
+
+ v-viewer@3.0.22:
+ resolution: {integrity: sha512-uYyP5FPT4K/Sd5D1mhB2HMVV8jnf6zYy2HD1PHCNAO6s2Iway+Wls60pwh7y4F3e2Nlc9549Pvy2HXaq8PKrAg==}
+ peerDependencies:
+ viewerjs: ^1.11.0
+ vue: ^3.0.0
+
+ vary@1.1.2:
+ resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
+ engines: {node: '>= 0.8'}
+
+ viewerjs@1.11.7:
+ resolution: {integrity: sha512-0JuVqOmL5v1jmEAlG5EBDR3XquxY8DWFQbFMprOXgaBB0F7Q/X9xWdEaQc59D8xzwkdUgXEMSSknTpriq95igg==}
+
+ vite@7.1.9:
+ resolution: {integrity: sha512-4nVGliEpxmhCL8DslSAUdxlB6+SMrhB0a1v5ijlh1xB1nEPuy1mxaHxysVucLHuWryAxLWg6a5ei+U4TLn/rFg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^20.19.0 || >=22.12.0
+ jiti: '>=1.21.0'
+ less: ^4.0.0
+ lightningcss: ^1.21.0
+ sass: ^1.70.0
+ sass-embedded: ^1.70.0
+ stylus: '>=0.54.8'
+ sugarss: ^5.0.0
+ terser: ^5.16.0
+ tsx: ^4.8.1
+ yaml: ^2.4.2
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ jiti:
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+ tsx:
+ optional: true
+ yaml:
+ optional: true
+
+ vue-demi@0.13.11:
+ resolution: {integrity: sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==}
+ engines: {node: '>=12'}
+ hasBin: true
+ peerDependencies:
+ '@vue/composition-api': ^1.0.0-rc.1
+ vue: ^3.0.0-0 || ^2.6.0
+ peerDependenciesMeta:
+ '@vue/composition-api':
+ optional: true
+
+ vue-demi@0.14.10:
+ resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==}
+ engines: {node: '>=12'}
+ hasBin: true
+ peerDependencies:
+ '@vue/composition-api': ^1.0.0-rc.1
+ vue: ^3.0.0-0 || ^2.6.0
+ peerDependenciesMeta:
+ '@vue/composition-api':
+ optional: true
+
+ vue-echarts@7.0.3:
+ resolution: {integrity: sha512-/jSxNwOsw5+dYAUcwSfkLwKPuzTQ0Cepz1LxCOpj2QcHrrmUa/Ql0eQqMmc1rTPQVrh2JQ29n2dhq75ZcHvRDw==}
+ peerDependencies:
+ '@vue/runtime-core': ^3.0.0
+ echarts: ^5.5.1
+ vue: ^2.7.0 || ^3.1.1
+ peerDependenciesMeta:
+ '@vue/runtime-core':
+ optional: true
+
+ vue-router@4.5.1:
+ resolution: {integrity: sha512-ogAF3P97NPm8fJsE4by9dwSYtDwXIY1nFY9T6DyQnGHd1E2Da94w9JIolpe42LJGIl0DwOHBi8TcRPlPGwbTtw==}
+ peerDependencies:
+ vue: ^3.2.0
+
+ vue@3.5.22:
+ resolution: {integrity: sha512-toaZjQ3a/G/mYaLSbV+QsQhIdMo9x5rrqIpYRObsJ6T/J+RyCSFwN2LHNVH9v8uIcljDNa3QzPVdv3Y6b9hAJQ==}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ vuedraggable@4.1.0:
+ resolution: {integrity: sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==}
+ peerDependencies:
+ vue: ^3.0.1
+
+ webpack-virtual-modules@0.6.2:
+ resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
+
+ webworkify-webpack@2.1.5:
+ resolution: {integrity: sha512-2akF8FIyUvbiBBdD+RoHpoTbHMQF2HwjcxfDvgztAX5YwbZNyrtfUMgvfgFVsgDhDPVTlkbb5vyasqDHfIDPQw==}
+
+ webworkify-webpack@https://codeload.github.com/xqq/webworkify-webpack/tar.gz/24d1e719b4a6cac37a518b2bb10fe124527ef4ef:
+ resolution: {tarball: https://codeload.github.com/xqq/webworkify-webpack/tar.gz/24d1e719b4a6cac37a518b2bb10fe124527ef4ef}
+ version: 2.1.5
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yallist@5.0.0:
+ resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==}
+ engines: {node: '>=18'}
+
+ yargs-parser@21.1.1:
+ resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
+ engines: {node: '>=12'}
+
+ yargs@17.7.2:
+ resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
+ engines: {node: '>=12'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+ zrender@5.6.1:
+ resolution: {integrity: sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==}
+
+snapshots:
+
+ '@alloc/quick-lru@5.2.0': {}
+
+ '@antfu/utils@0.7.10': {}
+
+ '@arco-design/color@0.4.0':
+ dependencies:
+ color: 3.2.1
+
+ '@arco-design/web-vue@2.57.0(vue@3.5.22)':
+ dependencies:
+ '@arco-design/color': 0.4.0
+ b-tween: 0.3.3
+ b-validate: 1.5.3
+ compute-scroll-into-view: 1.0.20
+ dayjs: 1.11.18
+ number-precision: 1.6.0
+ resize-observer-polyfill: 1.5.1
+ scroll-into-view-if-needed: 2.2.31
+ vue: 3.5.22
+
+ '@babel/helper-string-parser@7.27.1': {}
+
+ '@babel/helper-validator-identifier@7.27.1': {}
+
+ '@babel/parser@7.28.4':
+ dependencies:
+ '@babel/types': 7.28.4
+
+ '@babel/types@7.28.4':
+ dependencies:
+ '@babel/helper-string-parser': 7.27.1
+ '@babel/helper-validator-identifier': 7.27.1
+
+ '@esbuild/aix-ppc64@0.25.10':
+ optional: true
+
+ '@esbuild/android-arm64@0.25.10':
+ optional: true
+
+ '@esbuild/android-arm@0.25.10':
+ optional: true
+
+ '@esbuild/android-x64@0.25.10':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.25.10':
+ optional: true
+
+ '@esbuild/darwin-x64@0.25.10':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.25.10':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.25.10':
+ optional: true
+
+ '@esbuild/linux-arm64@0.25.10':
+ optional: true
+
+ '@esbuild/linux-arm@0.25.10':
+ optional: true
+
+ '@esbuild/linux-ia32@0.25.10':
+ optional: true
+
+ '@esbuild/linux-loong64@0.25.10':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.25.10':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.25.10':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.25.10':
+ optional: true
+
+ '@esbuild/linux-s390x@0.25.10':
+ optional: true
+
+ '@esbuild/linux-x64@0.25.10':
+ optional: true
+
+ '@esbuild/netbsd-arm64@0.25.10':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.25.10':
+ optional: true
+
+ '@esbuild/openbsd-arm64@0.25.10':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.25.10':
+ optional: true
+
+ '@esbuild/openharmony-arm64@0.25.10':
+ optional: true
+
+ '@esbuild/sunos-x64@0.25.10':
+ optional: true
+
+ '@esbuild/win32-arm64@0.25.10':
+ optional: true
+
+ '@esbuild/win32-ia32@0.25.10':
+ optional: true
+
+ '@esbuild/win32-x64@0.25.10':
+ optional: true
+
+ '@fastify/accept-negotiator@1.1.0': {}
+
+ '@fastify/ajv-compiler@3.6.0':
+ dependencies:
+ ajv: 8.17.1
+ ajv-formats: 2.1.1(ajv@8.17.1)
+ fast-uri: 2.4.0
+
+ '@fastify/error@3.4.1': {}
+
+ '@fastify/fast-json-stringify-compiler@4.3.0':
+ dependencies:
+ fast-json-stringify: 5.16.1
+
+ '@fastify/merge-json-schemas@0.1.1':
+ dependencies:
+ fast-deep-equal: 3.1.3
+
+ '@fastify/send@2.1.0':
+ dependencies:
+ '@lukeed/ms': 2.0.2
+ escape-html: 1.0.3
+ fast-decode-uri-component: 1.0.1
+ http-errors: 2.0.0
+ mime: 3.0.0
+
+ '@fastify/static@6.12.0':
+ dependencies:
+ '@fastify/accept-negotiator': 1.1.0
+ '@fastify/send': 2.1.0
+ content-disposition: 0.5.4
+ fastify-plugin: 4.5.1
+ glob: 8.1.0
+ p-limit: 3.1.0
+
+ '@isaacs/fs-minipass@4.0.1':
+ dependencies:
+ minipass: 7.1.2
+
+ '@jridgewell/gen-mapping@0.3.13':
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/remapping@2.3.5':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/sourcemap-codec@1.5.5': {}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.5
+
+ '@lukeed/ms@2.0.2': {}
+
+ '@nodelib/fs.scandir@2.1.5':
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ run-parallel: 1.2.0
+
+ '@nodelib/fs.stat@2.0.5': {}
+
+ '@nodelib/fs.walk@1.2.8':
+ dependencies:
+ '@nodelib/fs.scandir': 2.1.5
+ fastq: 1.19.1
+
+ '@playwright/test@1.55.1':
+ dependencies:
+ playwright: 1.55.1
+
+ '@rolldown/pluginutils@1.0.0-beta.29': {}
+
+ '@rollup/pluginutils@5.3.0(rollup@4.52.3)':
+ dependencies:
+ '@types/estree': 1.0.8
+ estree-walker: 2.0.2
+ picomatch: 4.0.3
+ optionalDependencies:
+ rollup: 4.52.3
+
+ '@rollup/rollup-android-arm-eabi@4.52.3':
+ optional: true
+
+ '@rollup/rollup-android-arm64@4.52.3':
+ optional: true
+
+ '@rollup/rollup-darwin-arm64@4.52.3':
+ optional: true
+
+ '@rollup/rollup-darwin-x64@4.52.3':
+ optional: true
+
+ '@rollup/rollup-freebsd-arm64@4.52.3':
+ optional: true
+
+ '@rollup/rollup-freebsd-x64@4.52.3':
+ optional: true
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.52.3':
+ optional: true
+
+ '@rollup/rollup-linux-arm-musleabihf@4.52.3':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-gnu@4.52.3':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-musl@4.52.3':
+ optional: true
+
+ '@rollup/rollup-linux-loong64-gnu@4.52.3':
+ optional: true
+
+ '@rollup/rollup-linux-ppc64-gnu@4.52.3':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-gnu@4.52.3':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-musl@4.52.3':
+ optional: true
+
+ '@rollup/rollup-linux-s390x-gnu@4.52.3':
+ optional: true
+
+ '@rollup/rollup-linux-x64-gnu@4.52.3':
+ optional: true
+
+ '@rollup/rollup-linux-x64-musl@4.52.3':
+ optional: true
+
+ '@rollup/rollup-openharmony-arm64@4.52.3':
+ optional: true
+
+ '@rollup/rollup-win32-arm64-msvc@4.52.3':
+ optional: true
+
+ '@rollup/rollup-win32-ia32-msvc@4.52.3':
+ optional: true
+
+ '@rollup/rollup-win32-x64-gnu@4.52.3':
+ optional: true
+
+ '@rollup/rollup-win32-x64-msvc@4.52.3':
+ optional: true
+
+ '@tailwindcss/node@4.1.14':
+ dependencies:
+ '@jridgewell/remapping': 2.3.5
+ enhanced-resolve: 5.18.3
+ jiti: 2.6.1
+ lightningcss: 1.30.1
+ magic-string: 0.30.19
+ source-map-js: 1.2.1
+ tailwindcss: 4.1.14
+
+ '@tailwindcss/oxide-android-arm64@4.1.14':
+ optional: true
+
+ '@tailwindcss/oxide-darwin-arm64@4.1.14':
+ optional: true
+
+ '@tailwindcss/oxide-darwin-x64@4.1.14':
+ optional: true
+
+ '@tailwindcss/oxide-freebsd-x64@4.1.14':
+ optional: true
+
+ '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.14':
+ optional: true
+
+ '@tailwindcss/oxide-linux-arm64-gnu@4.1.14':
+ optional: true
+
+ '@tailwindcss/oxide-linux-arm64-musl@4.1.14':
+ optional: true
+
+ '@tailwindcss/oxide-linux-x64-gnu@4.1.14':
+ optional: true
+
+ '@tailwindcss/oxide-linux-x64-musl@4.1.14':
+ optional: true
+
+ '@tailwindcss/oxide-wasm32-wasi@4.1.14':
+ optional: true
+
+ '@tailwindcss/oxide-win32-arm64-msvc@4.1.14':
+ optional: true
+
+ '@tailwindcss/oxide-win32-x64-msvc@4.1.14':
+ optional: true
+
+ '@tailwindcss/oxide@4.1.14':
+ dependencies:
+ detect-libc: 2.1.1
+ tar: 7.5.1
+ optionalDependencies:
+ '@tailwindcss/oxide-android-arm64': 4.1.14
+ '@tailwindcss/oxide-darwin-arm64': 4.1.14
+ '@tailwindcss/oxide-darwin-x64': 4.1.14
+ '@tailwindcss/oxide-freebsd-x64': 4.1.14
+ '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.14
+ '@tailwindcss/oxide-linux-arm64-gnu': 4.1.14
+ '@tailwindcss/oxide-linux-arm64-musl': 4.1.14
+ '@tailwindcss/oxide-linux-x64-gnu': 4.1.14
+ '@tailwindcss/oxide-linux-x64-musl': 4.1.14
+ '@tailwindcss/oxide-wasm32-wasi': 4.1.14
+ '@tailwindcss/oxide-win32-arm64-msvc': 4.1.14
+ '@tailwindcss/oxide-win32-x64-msvc': 4.1.14
+
+ '@tailwindcss/postcss@4.1.14':
+ dependencies:
+ '@alloc/quick-lru': 5.2.0
+ '@tailwindcss/node': 4.1.14
+ '@tailwindcss/oxide': 4.1.14
+ postcss: 8.5.6
+ tailwindcss: 4.1.14
+
+ '@types/estree@1.0.8': {}
+
+ '@vitejs/plugin-vue@6.0.1(vite@7.1.9(jiti@2.6.1)(lightningcss@1.30.1))(vue@3.5.22)':
+ dependencies:
+ '@rolldown/pluginutils': 1.0.0-beta.29
+ vite: 7.1.9(jiti@2.6.1)(lightningcss@1.30.1)
+ vue: 3.5.22
+
+ '@vue/compiler-core@3.5.22':
+ dependencies:
+ '@babel/parser': 7.28.4
+ '@vue/shared': 3.5.22
+ entities: 4.5.0
+ estree-walker: 2.0.2
+ source-map-js: 1.2.1
+
+ '@vue/compiler-dom@3.5.22':
+ dependencies:
+ '@vue/compiler-core': 3.5.22
+ '@vue/shared': 3.5.22
+
+ '@vue/compiler-sfc@3.5.22':
+ dependencies:
+ '@babel/parser': 7.28.4
+ '@vue/compiler-core': 3.5.22
+ '@vue/compiler-dom': 3.5.22
+ '@vue/compiler-ssr': 3.5.22
+ '@vue/shared': 3.5.22
+ estree-walker: 2.0.2
+ magic-string: 0.30.19
+ postcss: 8.5.6
+ source-map-js: 1.2.1
+
+ '@vue/compiler-ssr@3.5.22':
+ dependencies:
+ '@vue/compiler-dom': 3.5.22
+ '@vue/shared': 3.5.22
+
+ '@vue/devtools-api@6.6.4': {}
+
+ '@vue/reactivity@3.5.22':
+ dependencies:
+ '@vue/shared': 3.5.22
+
+ '@vue/runtime-core@3.5.22':
+ dependencies:
+ '@vue/reactivity': 3.5.22
+ '@vue/shared': 3.5.22
+
+ '@vue/runtime-dom@3.5.22':
+ dependencies:
+ '@vue/reactivity': 3.5.22
+ '@vue/runtime-core': 3.5.22
+ '@vue/shared': 3.5.22
+ csstype: 3.1.3
+
+ '@vue/server-renderer@3.5.22(vue@3.5.22)':
+ dependencies:
+ '@vue/compiler-ssr': 3.5.22
+ '@vue/shared': 3.5.22
+ vue: 3.5.22
+
+ '@vue/shared@3.5.22': {}
+
+ abstract-logging@2.0.1: {}
+
+ accepts@1.3.8:
+ dependencies:
+ mime-types: 2.1.35
+ negotiator: 0.6.3
+
+ acorn@8.15.0: {}
+
+ ajv-formats@2.1.1(ajv@8.17.1):
+ optionalDependencies:
+ ajv: 8.17.1
+
+ ajv-formats@3.0.1(ajv@8.17.1):
+ optionalDependencies:
+ ajv: 8.17.1
+
+ ajv@8.17.1:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-uri: 3.1.0
+ json-schema-traverse: 1.0.0
+ require-from-string: 2.0.2
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ array-flatten@1.1.1: {}
+
+ artplayer-plugin-danmuku@5.2.0: {}
+
+ artplayer@5.3.0:
+ dependencies:
+ option-validator: 2.0.6
+
+ asynckit@0.4.0: {}
+
+ atomic-sleep@1.0.0: {}
+
+ autoprefixer@10.4.21(postcss@8.5.6):
+ dependencies:
+ browserslist: 4.26.3
+ caniuse-lite: 1.0.30001746
+ fraction.js: 4.3.7
+ normalize-range: 0.1.2
+ picocolors: 1.1.1
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ avvio@8.4.0:
+ dependencies:
+ '@fastify/error': 3.4.1
+ fastq: 1.19.1
+
+ axios@1.12.0:
+ dependencies:
+ follow-redirects: 1.15.11
+ form-data: 4.0.4
+ proxy-from-env: 1.1.0
+ transitivePeerDependencies:
+ - debug
+
+ b-tween@0.3.3: {}
+
+ b-validate@1.5.3: {}
+
+ balanced-match@1.0.2: {}
+
+ baseline-browser-mapping@2.8.10: {}
+
+ basic-auth@2.0.1:
+ dependencies:
+ safe-buffer: 5.1.2
+
+ binary-extensions@2.3.0: {}
+
+ body-parser@1.20.3:
+ dependencies:
+ bytes: 3.1.2
+ content-type: 1.0.5
+ debug: 2.6.9
+ depd: 2.0.0
+ destroy: 1.2.0
+ http-errors: 2.0.0
+ iconv-lite: 0.4.24
+ on-finished: 2.4.1
+ qs: 6.13.0
+ raw-body: 2.5.2
+ type-is: 1.6.18
+ unpipe: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ brace-expansion@2.0.2:
+ dependencies:
+ balanced-match: 1.0.2
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browserslist@4.26.3:
+ dependencies:
+ baseline-browser-mapping: 2.8.10
+ caniuse-lite: 1.0.30001746
+ electron-to-chromium: 1.5.229
+ node-releases: 2.0.21
+ update-browserslist-db: 1.1.3(browserslist@4.26.3)
+
+ bytes@3.1.2: {}
+
+ call-bind-apply-helpers@1.0.2:
+ dependencies:
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+
+ call-bound@1.0.4:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ get-intrinsic: 1.3.0
+
+ caniuse-lite@1.0.30001746: {}
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chokidar@3.6.0:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ chownr@3.0.0: {}
+
+ cliui@8.0.1:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@1.9.3:
+ dependencies:
+ color-name: 1.1.3
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.3: {}
+
+ color-name@1.1.4: {}
+
+ color-string@1.9.1:
+ dependencies:
+ color-name: 1.1.4
+ simple-swizzle: 0.2.4
+
+ color@3.2.1:
+ dependencies:
+ color-convert: 1.9.3
+ color-string: 1.9.1
+
+ combined-stream@1.0.8:
+ dependencies:
+ delayed-stream: 1.0.0
+
+ compressible@2.0.18:
+ dependencies:
+ mime-db: 1.54.0
+
+ compression@1.8.1:
+ dependencies:
+ bytes: 3.1.2
+ compressible: 2.0.18
+ debug: 2.6.9
+ negotiator: 0.6.4
+ on-headers: 1.1.0
+ safe-buffer: 5.2.1
+ vary: 1.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ compute-scroll-into-view@1.0.20: {}
+
+ confbox@0.1.8: {}
+
+ connect-pause@0.1.1: {}
+
+ content-disposition@0.5.4:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ content-type@1.0.5: {}
+
+ cookie-signature@1.0.6: {}
+
+ cookie@0.7.1: {}
+
+ cors@2.8.5:
+ dependencies:
+ object-assign: 4.1.1
+ vary: 1.1.2
+
+ crypto-js@4.2.0: {}
+
+ csstype@3.1.3: {}
+
+ dayjs@1.11.18: {}
+
+ debug@2.6.9:
+ dependencies:
+ ms: 2.0.0
+
+ debug@3.1.0:
+ dependencies:
+ ms: 2.0.0
+
+ debug@4.4.3:
+ dependencies:
+ ms: 2.1.3
+
+ delayed-stream@1.0.0: {}
+
+ depd@2.0.0: {}
+
+ destroy@1.2.0: {}
+
+ detect-libc@2.1.1: {}
+
+ dunder-proto@1.0.1:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ es-errors: 1.3.0
+ gopd: 1.2.0
+
+ echarts@5.6.0:
+ dependencies:
+ tslib: 2.3.0
+ zrender: 5.6.1
+
+ ee-first@1.1.1: {}
+
+ electron-to-chromium@1.5.229: {}
+
+ emoji-regex@8.0.0: {}
+
+ encodeurl@1.0.2: {}
+
+ encodeurl@2.0.0: {}
+
+ enhanced-resolve@5.18.3:
+ dependencies:
+ graceful-fs: 4.2.11
+ tapable: 2.3.0
+
+ entities@4.5.0: {}
+
+ errorhandler@1.5.1:
+ dependencies:
+ accepts: 1.3.8
+ escape-html: 1.0.3
+
+ es-define-property@1.0.1: {}
+
+ es-errors@1.3.0: {}
+
+ es-object-atoms@1.1.1:
+ dependencies:
+ es-errors: 1.3.0
+
+ es-set-tostringtag@2.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ has-tostringtag: 1.0.2
+ hasown: 2.0.2
+
+ es6-promise@4.2.8: {}
+
+ esbuild@0.25.10:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.25.10
+ '@esbuild/android-arm': 0.25.10
+ '@esbuild/android-arm64': 0.25.10
+ '@esbuild/android-x64': 0.25.10
+ '@esbuild/darwin-arm64': 0.25.10
+ '@esbuild/darwin-x64': 0.25.10
+ '@esbuild/freebsd-arm64': 0.25.10
+ '@esbuild/freebsd-x64': 0.25.10
+ '@esbuild/linux-arm': 0.25.10
+ '@esbuild/linux-arm64': 0.25.10
+ '@esbuild/linux-ia32': 0.25.10
+ '@esbuild/linux-loong64': 0.25.10
+ '@esbuild/linux-mips64el': 0.25.10
+ '@esbuild/linux-ppc64': 0.25.10
+ '@esbuild/linux-riscv64': 0.25.10
+ '@esbuild/linux-s390x': 0.25.10
+ '@esbuild/linux-x64': 0.25.10
+ '@esbuild/netbsd-arm64': 0.25.10
+ '@esbuild/netbsd-x64': 0.25.10
+ '@esbuild/openbsd-arm64': 0.25.10
+ '@esbuild/openbsd-x64': 0.25.10
+ '@esbuild/openharmony-arm64': 0.25.10
+ '@esbuild/sunos-x64': 0.25.10
+ '@esbuild/win32-arm64': 0.25.10
+ '@esbuild/win32-ia32': 0.25.10
+ '@esbuild/win32-x64': 0.25.10
+
+ escalade@3.2.0: {}
+
+ escape-html@1.0.3: {}
+
+ estree-walker@2.0.2: {}
+
+ etag@1.8.1: {}
+
+ express-urlrewrite@1.4.0:
+ dependencies:
+ debug: 4.4.3
+ path-to-regexp: 1.9.0
+ transitivePeerDependencies:
+ - supports-color
+
+ express@4.21.2:
+ dependencies:
+ accepts: 1.3.8
+ array-flatten: 1.1.1
+ body-parser: 1.20.3
+ content-disposition: 0.5.4
+ content-type: 1.0.5
+ cookie: 0.7.1
+ cookie-signature: 1.0.6
+ debug: 2.6.9
+ depd: 2.0.0
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ etag: 1.8.1
+ finalhandler: 1.3.1
+ fresh: 0.5.2
+ http-errors: 2.0.0
+ merge-descriptors: 1.0.3
+ methods: 1.1.2
+ on-finished: 2.4.1
+ parseurl: 1.3.3
+ path-to-regexp: 0.1.12
+ proxy-addr: 2.0.7
+ qs: 6.13.0
+ range-parser: 1.2.1
+ safe-buffer: 5.2.1
+ send: 0.19.0
+ serve-static: 1.16.2
+ setprototypeof: 1.2.0
+ statuses: 2.0.1
+ type-is: 1.6.18
+ utils-merge: 1.0.1
+ vary: 1.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ fast-content-type-parse@1.1.0: {}
+
+ fast-decode-uri-component@1.0.1: {}
+
+ fast-deep-equal@3.1.3: {}
+
+ fast-glob@3.3.3:
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ '@nodelib/fs.walk': 1.2.8
+ glob-parent: 5.1.2
+ merge2: 1.4.1
+ micromatch: 4.0.8
+
+ fast-json-stringify@5.16.1:
+ dependencies:
+ '@fastify/merge-json-schemas': 0.1.1
+ ajv: 8.17.1
+ ajv-formats: 3.0.1(ajv@8.17.1)
+ fast-deep-equal: 3.1.3
+ fast-uri: 2.4.0
+ json-schema-ref-resolver: 1.0.1
+ rfdc: 1.4.1
+
+ fast-querystring@1.1.2:
+ dependencies:
+ fast-decode-uri-component: 1.0.1
+
+ fast-uri@2.4.0: {}
+
+ fast-uri@3.1.0: {}
+
+ fastify-plugin@4.5.1: {}
+
+ fastify@4.29.1:
+ dependencies:
+ '@fastify/ajv-compiler': 3.6.0
+ '@fastify/error': 3.4.1
+ '@fastify/fast-json-stringify-compiler': 4.3.0
+ abstract-logging: 2.0.1
+ avvio: 8.4.0
+ fast-content-type-parse: 1.1.0
+ fast-json-stringify: 5.16.1
+ find-my-way: 8.2.2
+ light-my-request: 5.14.0
+ pino: 9.13.0
+ process-warning: 3.0.0
+ proxy-addr: 2.0.7
+ rfdc: 1.4.1
+ secure-json-parse: 2.7.0
+ semver: 7.7.2
+ toad-cache: 3.7.0
+
+ fastq@1.19.1:
+ dependencies:
+ reusify: 1.1.0
+
+ fdir@6.5.0(picomatch@4.0.3):
+ optionalDependencies:
+ picomatch: 4.0.3
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ finalhandler@1.3.1:
+ dependencies:
+ debug: 2.6.9
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ on-finished: 2.4.1
+ parseurl: 1.3.3
+ statuses: 2.0.1
+ unpipe: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ find-my-way@8.2.2:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-querystring: 1.1.2
+ safe-regex2: 3.1.0
+
+ flv.js@1.6.2:
+ dependencies:
+ es6-promise: 4.2.8
+ webworkify-webpack: 2.1.5
+
+ follow-redirects@1.15.11: {}
+
+ form-data@4.0.4:
+ dependencies:
+ asynckit: 0.4.0
+ combined-stream: 1.0.8
+ es-set-tostringtag: 2.1.0
+ hasown: 2.0.2
+ mime-types: 2.1.35
+
+ forwarded@0.2.0: {}
+
+ fraction.js@4.3.7: {}
+
+ fresh@0.5.2: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.2:
+ optional: true
+
+ fsevents@2.3.3:
+ optional: true
+
+ function-bind@1.1.2: {}
+
+ get-caller-file@2.0.5: {}
+
+ get-intrinsic@1.3.0:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ es-define-property: 1.0.1
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.1
+ function-bind: 1.1.2
+ get-proto: 1.0.1
+ gopd: 1.2.0
+ has-symbols: 1.1.0
+ hasown: 2.0.2
+ math-intrinsics: 1.1.0
+
+ get-proto@1.0.1:
+ dependencies:
+ dunder-proto: 1.0.1
+ es-object-atoms: 1.1.1
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@8.1.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 5.1.6
+ once: 1.4.0
+
+ gopd@1.2.0: {}
+
+ graceful-fs@4.2.11: {}
+
+ has-flag@4.0.0: {}
+
+ has-symbols@1.1.0: {}
+
+ has-tostringtag@1.0.2:
+ dependencies:
+ has-symbols: 1.1.0
+
+ hasown@2.0.2:
+ dependencies:
+ function-bind: 1.1.2
+
+ hls.js@1.6.13: {}
+
+ http-errors@2.0.0:
+ dependencies:
+ depd: 2.0.0
+ inherits: 2.0.4
+ setprototypeof: 1.2.0
+ statuses: 2.0.1
+ toidentifier: 1.0.1
+
+ iconv-lite@0.4.24:
+ dependencies:
+ safer-buffer: 2.1.2
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ ipaddr.js@1.9.1: {}
+
+ is-arrayish@0.3.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-promise@2.2.2: {}
+
+ isarray@0.0.1: {}
+
+ jiti@2.6.1: {}
+
+ jju@1.4.0: {}
+
+ json-parse-helpfulerror@1.0.3:
+ dependencies:
+ jju: 1.4.0
+
+ json-schema-ref-resolver@1.0.1:
+ dependencies:
+ fast-deep-equal: 3.1.3
+
+ json-schema-traverse@1.0.0: {}
+
+ json-server@0.17.4:
+ dependencies:
+ body-parser: 1.20.3
+ chalk: 4.1.2
+ compression: 1.8.1
+ connect-pause: 0.1.1
+ cors: 2.8.5
+ errorhandler: 1.5.1
+ express: 4.21.2
+ express-urlrewrite: 1.4.0
+ json-parse-helpfulerror: 1.0.3
+ lodash: 4.17.21
+ lodash-id: 0.14.1
+ lowdb: 1.0.0
+ method-override: 3.0.0
+ morgan: 1.10.1
+ nanoid: 3.3.11
+ please-upgrade-node: 3.2.0
+ pluralize: 8.0.0
+ server-destroy: 1.0.1
+ yargs: 17.7.2
+ transitivePeerDependencies:
+ - supports-color
+
+ kind-of@6.0.3: {}
+
+ light-my-request@5.14.0:
+ dependencies:
+ cookie: 0.7.1
+ process-warning: 3.0.0
+ set-cookie-parser: 2.7.1
+
+ lightningcss-darwin-arm64@1.30.1:
+ optional: true
+
+ lightningcss-darwin-x64@1.30.1:
+ optional: true
+
+ lightningcss-freebsd-x64@1.30.1:
+ optional: true
+
+ lightningcss-linux-arm-gnueabihf@1.30.1:
+ optional: true
+
+ lightningcss-linux-arm64-gnu@1.30.1:
+ optional: true
+
+ lightningcss-linux-arm64-musl@1.30.1:
+ optional: true
+
+ lightningcss-linux-x64-gnu@1.30.1:
+ optional: true
+
+ lightningcss-linux-x64-musl@1.30.1:
+ optional: true
+
+ lightningcss-win32-arm64-msvc@1.30.1:
+ optional: true
+
+ lightningcss-win32-x64-msvc@1.30.1:
+ optional: true
+
+ lightningcss@1.30.1:
+ dependencies:
+ detect-libc: 2.1.1
+ optionalDependencies:
+ lightningcss-darwin-arm64: 1.30.1
+ lightningcss-darwin-x64: 1.30.1
+ lightningcss-freebsd-x64: 1.30.1
+ lightningcss-linux-arm-gnueabihf: 1.30.1
+ lightningcss-linux-arm64-gnu: 1.30.1
+ lightningcss-linux-arm64-musl: 1.30.1
+ lightningcss-linux-x64-gnu: 1.30.1
+ lightningcss-linux-x64-musl: 1.30.1
+ lightningcss-win32-arm64-msvc: 1.30.1
+ lightningcss-win32-x64-msvc: 1.30.1
+
+ local-pkg@0.5.1:
+ dependencies:
+ mlly: 1.8.0
+ pkg-types: 1.3.1
+
+ lodash-es@4.17.21: {}
+
+ lodash-id@0.14.1: {}
+
+ lodash@4.17.21: {}
+
+ lowdb@1.0.0:
+ dependencies:
+ graceful-fs: 4.2.11
+ is-promise: 2.2.2
+ lodash: 4.17.21
+ pify: 3.0.0
+ steno: 0.4.4
+
+ magic-string@0.30.19:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+
+ math-intrinsics@1.1.0: {}
+
+ media-typer@0.3.0: {}
+
+ merge-descriptors@1.0.3: {}
+
+ merge2@1.4.1: {}
+
+ method-override@3.0.0:
+ dependencies:
+ debug: 3.1.0
+ methods: 1.1.2
+ parseurl: 1.3.3
+ vary: 1.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ methods@1.1.2: {}
+
+ micromatch@4.0.8:
+ dependencies:
+ braces: 3.0.3
+ picomatch: 2.3.1
+
+ mime-db@1.52.0: {}
+
+ mime-db@1.54.0: {}
+
+ mime-types@2.1.35:
+ dependencies:
+ mime-db: 1.52.0
+
+ mime@1.6.0: {}
+
+ mime@3.0.0: {}
+
+ minimatch@5.1.6:
+ dependencies:
+ brace-expansion: 2.0.2
+
+ minimatch@9.0.5:
+ dependencies:
+ brace-expansion: 2.0.2
+
+ minipass@7.1.2: {}
+
+ minizlib@3.1.0:
+ dependencies:
+ minipass: 7.1.2
+
+ mlly@1.8.0:
+ dependencies:
+ acorn: 8.15.0
+ pathe: 2.0.3
+ pkg-types: 1.3.1
+ ufo: 1.6.1
+
+ morgan@1.10.1:
+ dependencies:
+ basic-auth: 2.0.1
+ debug: 2.6.9
+ depd: 2.0.0
+ on-finished: 2.3.0
+ on-headers: 1.1.0
+ transitivePeerDependencies:
+ - supports-color
+
+ mpegts.js@1.8.0:
+ dependencies:
+ es6-promise: 4.2.8
+ webworkify-webpack: https://codeload.github.com/xqq/webworkify-webpack/tar.gz/24d1e719b4a6cac37a518b2bb10fe124527ef4ef
+
+ ms@2.0.0: {}
+
+ ms@2.1.3: {}
+
+ nanoid@3.3.11: {}
+
+ negotiator@0.6.3: {}
+
+ negotiator@0.6.4: {}
+
+ node-releases@2.0.21: {}
+
+ normalize-path@3.0.0: {}
+
+ normalize-range@0.1.2: {}
+
+ number-precision@1.6.0: {}
+
+ object-assign@4.1.1: {}
+
+ object-inspect@1.13.4: {}
+
+ on-exit-leak-free@2.1.2: {}
+
+ on-finished@2.3.0:
+ dependencies:
+ ee-first: 1.1.1
+
+ on-finished@2.4.1:
+ dependencies:
+ ee-first: 1.1.1
+
+ on-headers@1.1.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ option-validator@2.0.6:
+ dependencies:
+ kind-of: 6.0.3
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ parseurl@1.3.3: {}
+
+ path-to-regexp@0.1.12: {}
+
+ path-to-regexp@1.9.0:
+ dependencies:
+ isarray: 0.0.1
+
+ pathe@2.0.3: {}
+
+ picocolors@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ picomatch@4.0.3: {}
+
+ pify@3.0.0: {}
+
+ pinia@2.3.1(vue@3.5.22):
+ dependencies:
+ '@vue/devtools-api': 6.6.4
+ vue: 3.5.22
+ vue-demi: 0.14.10(vue@3.5.22)
+ transitivePeerDependencies:
+ - '@vue/composition-api'
+
+ pino-abstract-transport@2.0.0:
+ dependencies:
+ split2: 4.2.0
+
+ pino-std-serializers@7.0.0: {}
+
+ pino@9.13.0:
+ dependencies:
+ atomic-sleep: 1.0.0
+ on-exit-leak-free: 2.1.2
+ pino-abstract-transport: 2.0.0
+ pino-std-serializers: 7.0.0
+ process-warning: 5.0.0
+ quick-format-unescaped: 4.0.4
+ real-require: 0.2.0
+ safe-stable-stringify: 2.5.0
+ slow-redact: 0.3.0
+ sonic-boom: 4.2.0
+ thread-stream: 3.1.0
+
+ pkg-types@1.3.1:
+ dependencies:
+ confbox: 0.1.8
+ mlly: 1.8.0
+ pathe: 2.0.3
+
+ playwright-core@1.55.1: {}
+
+ playwright@1.55.1:
+ dependencies:
+ playwright-core: 1.55.1
+ optionalDependencies:
+ fsevents: 2.3.2
+
+ please-upgrade-node@3.2.0:
+ dependencies:
+ semver-compare: 1.0.0
+
+ pluralize@8.0.0: {}
+
+ postcss-value-parser@4.2.0: {}
+
+ postcss@8.5.6:
+ dependencies:
+ nanoid: 3.3.11
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+
+ process-warning@3.0.0: {}
+
+ process-warning@5.0.0: {}
+
+ proxy-addr@2.0.7:
+ dependencies:
+ forwarded: 0.2.0
+ ipaddr.js: 1.9.1
+
+ proxy-from-env@1.1.0: {}
+
+ qs@6.13.0:
+ dependencies:
+ side-channel: 1.1.0
+
+ queue-microtask@1.2.3: {}
+
+ quick-format-unescaped@4.0.4: {}
+
+ range-parser@1.2.1: {}
+
+ raw-body@2.5.2:
+ dependencies:
+ bytes: 3.1.2
+ http-errors: 2.0.0
+ iconv-lite: 0.4.24
+ unpipe: 1.0.0
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ real-require@0.2.0: {}
+
+ require-directory@2.1.1: {}
+
+ require-from-string@2.0.2: {}
+
+ resize-observer-polyfill@1.5.1: {}
+
+ ret@0.4.3: {}
+
+ reusify@1.1.0: {}
+
+ rfdc@1.4.1: {}
+
+ rollup@4.52.3:
+ dependencies:
+ '@types/estree': 1.0.8
+ optionalDependencies:
+ '@rollup/rollup-android-arm-eabi': 4.52.3
+ '@rollup/rollup-android-arm64': 4.52.3
+ '@rollup/rollup-darwin-arm64': 4.52.3
+ '@rollup/rollup-darwin-x64': 4.52.3
+ '@rollup/rollup-freebsd-arm64': 4.52.3
+ '@rollup/rollup-freebsd-x64': 4.52.3
+ '@rollup/rollup-linux-arm-gnueabihf': 4.52.3
+ '@rollup/rollup-linux-arm-musleabihf': 4.52.3
+ '@rollup/rollup-linux-arm64-gnu': 4.52.3
+ '@rollup/rollup-linux-arm64-musl': 4.52.3
+ '@rollup/rollup-linux-loong64-gnu': 4.52.3
+ '@rollup/rollup-linux-ppc64-gnu': 4.52.3
+ '@rollup/rollup-linux-riscv64-gnu': 4.52.3
+ '@rollup/rollup-linux-riscv64-musl': 4.52.3
+ '@rollup/rollup-linux-s390x-gnu': 4.52.3
+ '@rollup/rollup-linux-x64-gnu': 4.52.3
+ '@rollup/rollup-linux-x64-musl': 4.52.3
+ '@rollup/rollup-openharmony-arm64': 4.52.3
+ '@rollup/rollup-win32-arm64-msvc': 4.52.3
+ '@rollup/rollup-win32-ia32-msvc': 4.52.3
+ '@rollup/rollup-win32-x64-gnu': 4.52.3
+ '@rollup/rollup-win32-x64-msvc': 4.52.3
+ fsevents: 2.3.3
+
+ run-parallel@1.2.0:
+ dependencies:
+ queue-microtask: 1.2.3
+
+ safe-buffer@5.1.2: {}
+
+ safe-buffer@5.2.1: {}
+
+ safe-regex2@3.1.0:
+ dependencies:
+ ret: 0.4.3
+
+ safe-stable-stringify@2.5.0: {}
+
+ safer-buffer@2.1.2: {}
+
+ scroll-into-view-if-needed@2.2.31:
+ dependencies:
+ compute-scroll-into-view: 1.0.20
+
+ secure-json-parse@2.7.0: {}
+
+ semver-compare@1.0.0: {}
+
+ semver@7.7.2: {}
+
+ send@0.19.0:
+ dependencies:
+ debug: 2.6.9
+ depd: 2.0.0
+ destroy: 1.2.0
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ etag: 1.8.1
+ fresh: 0.5.2
+ http-errors: 2.0.0
+ mime: 1.6.0
+ ms: 2.1.3
+ on-finished: 2.4.1
+ range-parser: 1.2.1
+ statuses: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+
+ serve-static@1.16.2:
+ dependencies:
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ parseurl: 1.3.3
+ send: 0.19.0
+ transitivePeerDependencies:
+ - supports-color
+
+ server-destroy@1.0.1: {}
+
+ set-cookie-parser@2.7.1: {}
+
+ setprototypeof@1.2.0: {}
+
+ shaka-player@4.16.3: {}
+
+ side-channel-list@1.0.0:
+ dependencies:
+ es-errors: 1.3.0
+ object-inspect: 1.13.4
+
+ side-channel-map@1.0.1:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ object-inspect: 1.13.4
+
+ side-channel-weakmap@1.0.2:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ object-inspect: 1.13.4
+ side-channel-map: 1.0.1
+
+ side-channel@1.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ object-inspect: 1.13.4
+ side-channel-list: 1.0.0
+ side-channel-map: 1.0.1
+ side-channel-weakmap: 1.0.2
+
+ simple-swizzle@0.2.4:
+ dependencies:
+ is-arrayish: 0.3.4
+
+ slow-redact@0.3.0: {}
+
+ sonic-boom@4.2.0:
+ dependencies:
+ atomic-sleep: 1.0.0
+
+ sortablejs@1.14.0: {}
+
+ source-map-js@1.2.1: {}
+
+ split2@4.2.0: {}
+
+ statuses@2.0.1: {}
+
+ steno@0.4.4:
+ dependencies:
+ graceful-fs: 4.2.11
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ tailwindcss@4.1.14: {}
+
+ tapable@2.3.0: {}
+
+ tar@7.5.1:
+ dependencies:
+ '@isaacs/fs-minipass': 4.0.1
+ chownr: 3.0.0
+ minipass: 7.1.2
+ minizlib: 3.1.0
+ yallist: 5.0.0
+
+ thread-stream@3.1.0:
+ dependencies:
+ real-require: 0.2.0
+
+ tinyglobby@0.2.15:
+ dependencies:
+ fdir: 6.5.0(picomatch@4.0.3)
+ picomatch: 4.0.3
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ toad-cache@3.7.0: {}
+
+ toidentifier@1.0.1: {}
+
+ tslib@2.3.0: {}
+
+ type-is@1.6.18:
+ dependencies:
+ media-typer: 0.3.0
+ mime-types: 2.1.35
+
+ ufo@1.6.1: {}
+
+ unpipe@1.0.0: {}
+
+ unplugin-vue-components@0.27.5(@babel/parser@7.28.4)(rollup@4.52.3)(vue@3.5.22):
+ dependencies:
+ '@antfu/utils': 0.7.10
+ '@rollup/pluginutils': 5.3.0(rollup@4.52.3)
+ chokidar: 3.6.0
+ debug: 4.4.3
+ fast-glob: 3.3.3
+ local-pkg: 0.5.1
+ magic-string: 0.30.19
+ minimatch: 9.0.5
+ mlly: 1.8.0
+ unplugin: 1.16.1
+ vue: 3.5.22
+ optionalDependencies:
+ '@babel/parser': 7.28.4
+ transitivePeerDependencies:
+ - rollup
+ - supports-color
+
+ unplugin@1.16.1:
+ dependencies:
+ acorn: 8.15.0
+ webpack-virtual-modules: 0.6.2
+
+ update-browserslist-db@1.1.3(browserslist@4.26.3):
+ dependencies:
+ browserslist: 4.26.3
+ escalade: 3.2.0
+ picocolors: 1.1.1
+
+ utils-merge@1.0.1: {}
+
+ v-viewer@3.0.22(viewerjs@1.11.7)(vue@3.5.22):
+ dependencies:
+ lodash-es: 4.17.21
+ viewerjs: 1.11.7
+ vue: 3.5.22
+
+ vary@1.1.2: {}
+
+ viewerjs@1.11.7: {}
+
+ vite@7.1.9(jiti@2.6.1)(lightningcss@1.30.1):
+ dependencies:
+ esbuild: 0.25.10
+ fdir: 6.5.0(picomatch@4.0.3)
+ picomatch: 4.0.3
+ postcss: 8.5.6
+ rollup: 4.52.3
+ tinyglobby: 0.2.15
+ optionalDependencies:
+ fsevents: 2.3.3
+ jiti: 2.6.1
+ lightningcss: 1.30.1
+
+ vue-demi@0.13.11(vue@3.5.22):
+ dependencies:
+ vue: 3.5.22
+
+ vue-demi@0.14.10(vue@3.5.22):
+ dependencies:
+ vue: 3.5.22
+
+ vue-echarts@7.0.3(@vue/runtime-core@3.5.22)(echarts@5.6.0)(vue@3.5.22):
+ dependencies:
+ echarts: 5.6.0
+ vue: 3.5.22
+ vue-demi: 0.13.11(vue@3.5.22)
+ optionalDependencies:
+ '@vue/runtime-core': 3.5.22
+ transitivePeerDependencies:
+ - '@vue/composition-api'
+
+ vue-router@4.5.1(vue@3.5.22):
+ dependencies:
+ '@vue/devtools-api': 6.6.4
+ vue: 3.5.22
+
+ vue@3.5.22:
+ dependencies:
+ '@vue/compiler-dom': 3.5.22
+ '@vue/compiler-sfc': 3.5.22
+ '@vue/runtime-dom': 3.5.22
+ '@vue/server-renderer': 3.5.22(vue@3.5.22)
+ '@vue/shared': 3.5.22
+
+ vuedraggable@4.1.0(vue@3.5.22):
+ dependencies:
+ sortablejs: 1.14.0
+ vue: 3.5.22
+
+ webpack-virtual-modules@0.6.2: {}
+
+ webworkify-webpack@2.1.5: {}
+
+ webworkify-webpack@https://codeload.github.com/xqq/webworkify-webpack/tar.gz/24d1e719b4a6cac37a518b2bb10fe124527ef4ef: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ y18n@5.0.8: {}
+
+ yallist@5.0.0: {}
+
+ yargs-parser@21.1.1: {}
+
+ yargs@17.7.2:
+ dependencies:
+ cliui: 8.0.1
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 21.1.1
+
+ yocto-queue@0.1.0: {}
+
+ zrender@5.6.1:
+ dependencies:
+ tslib: 2.3.0
diff --git a/dashboard/pnpm-workspace.yaml b/dashboard/pnpm-workspace.yaml
new file mode 100644
index 0000000..b6ac3d6
--- /dev/null
+++ b/dashboard/pnpm-workspace.yaml
@@ -0,0 +1,3 @@
+# pnpm workspace configuration
+packages:
+ - '.'
diff --git a/dashboard/postcss.config.js b/dashboard/postcss.config.js
new file mode 100644
index 0000000..af9d8dc
--- /dev/null
+++ b/dashboard/postcss.config.js
@@ -0,0 +1,6 @@
+export default {
+ plugins: {
+ '@tailwindcss/postcss': {},
+ autoprefixer: {},
+ },
+}
\ No newline at end of file
diff --git a/dashboard/production-server.cjs b/dashboard/production-server.cjs
new file mode 100644
index 0000000..8244449
--- /dev/null
+++ b/dashboard/production-server.cjs
@@ -0,0 +1,400 @@
+#!/usr/bin/env node
+/**
+ * 生产服务器 - DrPlayer Dashboard (CommonJS版本,用于PKG打包)
+ */
+
+const Fastify = require('fastify');
+const fastifyStatic = require('@fastify/static');
+const path = require('path');
+const fs = require('fs/promises');
+const { execSync } = require('child_process');
+const net = require('net');
+
+// 内联 SPA 路由功能 (避免ES6模块依赖)
+async function addSPARoutes(fastify, options) {
+ const spaApps = options.spaApps || ['drplayer'];
+
+ for (const appName of spaApps) {
+ fastify.get(`/apps/${appName}`, async (request, reply) => {
+ return reply.redirect(301, `/apps/${appName}/`);
+ });
+
+ fastify.get(`/apps/${appName}/`, async (request, reply) => {
+ const indexPath = path.join(options.appsDir, appName, 'index.html');
+
+ try {
+ const indexContent = await fs.readFile(indexPath, 'utf8');
+ return reply
+ .type('text/html')
+ .header('Cache-Control', 'no-cache, no-store, must-revalidate')
+ .send(indexContent);
+ } catch (error) {
+ return reply.code(404).send({ error: `${appName} application not found` });
+ }
+ });
+ }
+
+ fastify.setNotFoundHandler(async (request, reply) => {
+ const url = request.url;
+
+ for (const appName of spaApps) {
+ const appPrefix = `/apps/${appName}/`;
+
+ if (url.startsWith(appPrefix)) {
+ const urlPath = url.replace(appPrefix, '');
+ const hasExtension = /\.[a-zA-Z0-9]+(\?.*)?$/.test(urlPath);
+
+ if (!hasExtension) {
+ const indexPath = path.join(options.appsDir, appName, 'index.html');
+
+ try {
+ const indexContent = await fs.readFile(indexPath, 'utf8');
+ return reply
+ .type('text/html')
+ .header('Cache-Control', 'no-cache, no-store, must-revalidate')
+ .send(indexContent);
+ } catch (error) {
+ return reply.code(404).send({ error: `${appName} application not found` });
+ }
+ }
+ }
+ }
+
+ return reply.code(404).send({ error: 'Not Found' });
+ });
+}
+
+// PKG 环境下的路径处理
+const isPkg = typeof process.pkg !== 'undefined';
+
+// 在CommonJS中,__filename和__dirname是全局可用的
+// 在PKG环境中需要重新定义
+let currentFilename, currentDirname;
+
+if (isPkg) {
+ currentFilename = process.execPath;
+ currentDirname = path.dirname(process.execPath);
+} else {
+ currentFilename = __filename;
+ currentDirname = __dirname;
+}
+
+// 检查端口是否可用
+function checkPortAvailable(port) {
+ return new Promise((resolve) => {
+ const server = net.createServer();
+ let resolved = false;
+
+ // 设置超时机制
+ const timeout = setTimeout(() => {
+ if (!resolved) {
+ resolved = true;
+ server.close();
+ resolve(false);
+ }
+ }, 1000);
+
+ server.listen(port, '0.0.0.0', () => {
+ if (!resolved) {
+ resolved = true;
+ clearTimeout(timeout);
+ server.close(() => {
+ resolve(true);
+ });
+ }
+ });
+
+ server.on('error', (err) => {
+ if (!resolved) {
+ resolved = true;
+ clearTimeout(timeout);
+ resolve(false);
+ }
+ });
+ });
+}
+
+// 查找可用端口
+async function findAvailablePort(startPort = 9978, maxAttempts = 100) {
+ for (let i = 0; i < maxAttempts; i++) {
+ const port = startPort + i;
+ const isAvailable = await checkPortAvailable(port);
+ if (isAvailable) {
+ return port;
+ }
+ console.log(`端口 ${port} 已被占用,尝试下一个端口...`);
+ }
+ throw new Error(`无法找到可用端口,已尝试 ${startPort} 到 ${startPort + maxAttempts - 1}`);
+}
+
+// PKG 环境下的工作目录处理
+let workDir;
+if (isPkg) {
+ workDir = process.cwd();
+ console.log('PKG 环境检测到,工作目录:', workDir);
+ console.log('可执行文件路径:', process.execPath);
+} else {
+ workDir = currentDirname;
+}
+
+// 构建和部署函数
+async function buildAndDeploy() {
+ console.log('🔨 开始构建应用...');
+
+ try {
+ if (!isPkg) {
+ try {
+ execSync('pnpm build:apps', { stdio: 'inherit', cwd: currentDirname });
+ console.log('✅ 构建完成');
+ } catch (buildError) {
+ console.warn('⚠️ 构建命令执行失败,可能是在打包环境中运行:', buildError.message);
+ console.log('📦 跳过构建步骤,使用预构建的文件');
+ }
+ } else {
+ console.log('📦 检测到pkg环境,跳过构建步骤');
+ }
+
+ const appsDir = path.join(workDir, 'apps');
+ const drplayerDir = path.join(appsDir, 'drplayer');
+
+ await fs.mkdir(drplayerDir, { recursive: true });
+ console.log('📁 创建apps目录');
+
+ const distDir = path.join(workDir, 'dist');
+ try {
+ await fs.access(distDir);
+ await copyDirectory(distDir, drplayerDir);
+ console.log('📋 复制文件到apps/drplayer');
+ } catch (error) {
+ console.warn('⚠️ dist目录不存在,跳过文件复制');
+ if (isPkg) {
+ console.log('📦 pkg环境中,请确保静态文件已正确打包');
+ }
+ }
+
+ } catch (error) {
+ console.error('❌ 构建失败:', error.message);
+ if (typeof process.pkg === 'undefined') {
+ process.exit(1);
+ } else {
+ console.log('📦 pkg环境中继续运行...');
+ }
+ }
+}
+
+// 递归复制目录
+async function copyDirectory(src, dest) {
+ await fs.mkdir(dest, { recursive: true });
+ const entries = await fs.readdir(src, { withFileTypes: true });
+
+ for (const entry of entries) {
+ const srcPath = path.join(src, entry.name);
+ const destPath = path.join(dest, entry.name);
+
+ if (entry.isDirectory()) {
+ await copyDirectory(srcPath, destPath);
+ } else {
+ await fs.copyFile(srcPath, destPath);
+ }
+ }
+}
+
+// 主函数
+async function main() {
+ const fastify = Fastify({
+ logger: false
+ });
+
+ let PORT = 9978;
+
+ // PKG环境中的静态文件路径处理
+ let appsDir;
+ if (isPkg) {
+ // PKG环境中,静态文件在工作目录下的apps目录
+ appsDir = path.join(workDir, 'apps');
+ console.log('📦 PKG环境中使用工作目录的静态文件路径:', appsDir);
+ } else {
+ // 开发环境中使用工作目录
+ appsDir = path.join(workDir, 'apps');
+ console.log('🔧 开发环境中使用工作目录:', appsDir);
+ }
+
+ const options = {
+ appsDir: appsDir,
+ port: PORT
+ };
+
+ // 注册静态文件服务
+ await fastify.register(fastifyStatic, {
+ root: options.appsDir,
+ prefix: '/apps/',
+ decorateReply: false,
+ });
+
+ // 注册SPA路由支持
+ await fastify.register(addSPARoutes, {
+ appsDir: options.appsDir,
+ spaApps: ['drplayer']
+ });
+
+ // 根路径 - 显示应用列表
+ fastify.get('/', async (request, reply) => {
+ let version = '1.0.0';
+ try {
+ const packageJsonPath = path.join(currentDirname, 'package.json');
+ const packageJsonContent = await fs.readFile(packageJsonPath, 'utf8');
+ const packageJson = JSON.parse(packageJsonContent);
+ version = packageJson.version || '1.0.0';
+ } catch (error) {
+ console.warn('无法读取package.json版本信息:', error.message);
+ }
+
+ const html = `
+
+
+
+
+
+ DrPlayer Dashboard
+
+
+
+
+
🎬 DrPlayer Dashboard
+
+
+ ✅ 服务器运行正常 - 端口: ${PORT}
+
+
+
+
+
+
+
+`;
+
+ return reply.type('text/html').send(html);
+ });
+
+ // 健康检查
+ fastify.get('/health', async (request, reply) => {
+ return {status: 'ok', timestamp: new Date().toISOString()};
+ });
+
+ // 启动服务器
+ const start = async () => {
+ try {
+ await buildAndDeploy();
+
+ console.log(`🔍 正在查找可用端口,起始端口: ${PORT}`);
+ const availablePort = await findAvailablePort(PORT);
+ PORT = availablePort;
+ options.port = PORT;
+
+ console.log(`✅ 找到可用端口: ${PORT}`);
+
+ await fastify.listen({ port: PORT, host: '0.0.0.0' });
+ console.log(`🚀 生产服务器启动成功!`);
+ console.log(`📱 访问地址: http://localhost:${PORT}/apps/drplayer/`);
+ console.log(`🔍 健康检查: http://localhost:${PORT}/health`);
+ console.log(`📦 运行环境: ${isPkg ? 'PKG二进制' : '开发环境'}`);
+
+ if (isPkg) {
+ console.log(`📁 工作目录: ${workDir}`);
+ console.log(`📂 应用目录: ${options.appsDir}`);
+ }
+
+ } catch (err) {
+ console.error('❌ 服务器启动失败:', err.message);
+ fastify.log.error(err);
+ process.exit(1);
+ }
+ };
+
+ // 优雅关闭
+ process.on('SIGINT', async () => {
+ console.log('\n🛑 正在关闭服务器...');
+ await fastify.close();
+ process.exit(0);
+ });
+
+ await start();
+}
+
+// 启动应用
+main().catch(console.error);
\ No newline at end of file
diff --git a/dashboard/public/_redirects b/dashboard/public/_redirects
new file mode 100644
index 0000000..f824337
--- /dev/null
+++ b/dashboard/public/_redirects
@@ -0,0 +1 @@
+/* /index.html 200
\ No newline at end of file
diff --git a/dashboard/public/default-poster.svg b/dashboard/public/default-poster.svg
new file mode 100644
index 0000000..8e76012
--- /dev/null
+++ b/dashboard/public/default-poster.svg
@@ -0,0 +1,6 @@
+
\ No newline at end of file
diff --git a/dashboard/public/lives.jpg b/dashboard/public/lives.jpg
new file mode 100644
index 0000000..f28eeaa
Binary files /dev/null and b/dashboard/public/lives.jpg differ
diff --git a/dashboard/public/mock/data.json b/dashboard/public/mock/data.json
new file mode 100644
index 0000000..37551e1
--- /dev/null
+++ b/dashboard/public/mock/data.json
@@ -0,0 +1,6168 @@
+{
+ "config": {
+ "wallpaper":"https://tuapi.eees.cc/api.php?category=fengjing&type=302",
+ "hipy_sites_count":408,
+ "mode":1,
+ "spider":"https://hipy.trylyingto.me/files/jar/pg.jar?md5=7633f8ea346c082b7aa163be58aed023",
+ "homepage":"https://github.com/hjdhnx/hipy-server",
+ "homeLogo":"https://hipy.trylyingto.me/static/img/logo500x200-1.png",
+ "sites":[
+ {
+ "key":"hipy_py_cntv央视",
+ "name":"cntv央视(hipy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/hipy/cntv央视.py",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":0,
+ "ext":"https://hipy.trylyingto.me/files/hipy/cntv央视.json"
+ },
+ {
+ "key":"hipy_py_两个BT",
+ "name":"两个BT(hipy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/hipy/两个BT.py",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":9,
+ "ext":"https://hipy.trylyingto.me/files/hipy/两个BT.json"
+ },
+ {
+ "key":"hipy_py_哔滴影视",
+ "name":"哔滴影视(hipy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/hipy/哔滴影视.py",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":10,
+ "ext":"https://hipy.trylyingto.me/files/hipy/jars/bidi.jar"
+ },
+ {
+ "key":"hipy_py_喵次元",
+ "name":"喵次元(hipy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/hipy/喵次元.py",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":11,
+ "ext":""
+ },
+ {
+ "key":"hipy_py_新浪资源",
+ "name":"新浪资源(hipy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/hipy/新浪资源.py",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":12,
+ "ext":""
+ },
+ {
+ "key":"hipy_py_樱花动漫",
+ "name":"樱花动漫(hipy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/hipy/樱花动漫.py",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":14,
+ "ext":"https://jihulab.com/qiaoji/open/-/raw/main/yinghua"
+ },
+ {
+ "key":"hipy_js_在线之家",
+ "name":"在线之家(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":54,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/在线之家.js"
+ },
+ {
+ "key":"hipy_js_555影视[飞]",
+ "name":"555影视[飞](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":56,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/555影视[飞].js"
+ },
+ {
+ "key":"hipy_js_freeok",
+ "name":"freeok(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":120,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/freeok.js"
+ },
+ {
+ "key":"hipy_js_厂长资源",
+ "name":"厂长资源(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":121,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/厂长资源.js"
+ },
+ {
+ "key":"hipy_js_耐看",
+ "name":"耐看(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":122,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/耐看.js"
+ },
+ {
+ "key":"hipy_py_厂长资源",
+ "name":"厂长资源(hipy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/hipy/厂长资源.py",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":129,
+ "ext":""
+ },
+ {
+ "key":"hipy_py_在线之家",
+ "name":"在线之家(hipy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/hipy/在线之家.py",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":130,
+ "ext":""
+ },
+ {
+ "key":"hipy_js_白嫖者联盟",
+ "name":"白嫖者联盟(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":147,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/白嫖者联盟.js"
+ },
+ {
+ "key":"hipy_js_大米星球",
+ "name":"大米星球(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":149,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/大米星球.js"
+ },
+ {
+ "key":"hipy_js_6V新版[磁]",
+ "name":"6V新版[磁](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":150,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/6V新版[磁].js"
+ },
+ {
+ "key":"hipy_js_777影视",
+ "name":"777影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":152,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/777影视.js"
+ },
+ {
+ "key":"hipy_js_榜一短剧",
+ "name":"榜一短剧(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":154,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/榜一短剧.js"
+ },
+ {
+ "key":"hipy_js_大米星球[V2]",
+ "name":"大米星球[V2](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":155,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/大米星球[V2].js"
+ },
+ {
+ "key":"hipy_js_voflix",
+ "name":"voflix(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":156,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/voflix.js"
+ },
+ {
+ "key":"hipy_js_TVB云播",
+ "name":"TVB云播(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":192,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/TVB云播.js"
+ },
+ {
+ "key":"hipy_js_侠客影视",
+ "name":"侠客影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":194,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/侠客影视.js"
+ },
+ {
+ "key":"hipy_js_七年影视",
+ "name":"七年影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":196,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/七年影视.js"
+ },
+ {
+ "key":"hipy_js_磁力熊[磁]",
+ "name":"磁力熊[磁](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":197,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/磁力熊[磁].js"
+ },
+ {
+ "key":"hipy_js_一起看",
+ "name":"一起看(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":0,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":211,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/一起看.js"
+ },
+ {
+ "key":"hipy_js_可达影视",
+ "name":"可达影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":212,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/可达影视.js"
+ },
+ {
+ "key":"hipy_js_千神影视",
+ "name":"千神影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":213,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/千神影视.js"
+ },
+ {
+ "key":"hipy_js_海外剧汇",
+ "name":"海外剧汇(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":214,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/海外剧汇.js"
+ },
+ {
+ "key":"hipy_js_美剧星球",
+ "name":"美剧星球(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":215,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/美剧星球.js"
+ },
+ {
+ "key":"hipy_js_橙汁影视",
+ "name":"橙汁影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":0,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":216,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/橙汁影视.js"
+ },
+ {
+ "key":"hipy_js_掌心世界",
+ "name":"掌心世界(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":221,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/掌心世界.js"
+ },
+ {
+ "key":"hipy_js_宝片视频",
+ "name":"宝片视频(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":223,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/宝片视频.js"
+ },
+ {
+ "key":"hipy_js_易看影视",
+ "name":"易看影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":224,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/易看影视.js"
+ },
+ {
+ "key":"hipy_js_新茶杯狐",
+ "name":"新茶杯狐(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":225,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/新茶杯狐.js"
+ },
+ {
+ "key":"hipy_js_看57",
+ "name":"看57(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":226,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/看57.js"
+ },
+ {
+ "key":"hipy_js_神马电影[搜]",
+ "name":"神马电影[搜](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":227,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/神马电影[搜].js"
+ },
+ {
+ "key":"hipy_js_极客资源[资]",
+ "name":"极客资源[资](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":1,
+ "filterable":0,
+ "order_num":228,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/极客资源[资].js"
+ },
+ {
+ "key":"hipy_js_ok资源[资]",
+ "name":"ok资源[资](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":1,
+ "filterable":0,
+ "order_num":229,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/ok资源[资].js"
+ },
+ {
+ "key":"hipy_js_索尼资源[资]",
+ "name":"索尼资源[资](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":1,
+ "filterable":0,
+ "order_num":230,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/索尼资源[资].js"
+ },
+ {
+ "key":"hipy_js_卧龙资源[资]",
+ "name":"卧龙资源[资](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":1,
+ "filterable":0,
+ "order_num":231,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/卧龙资源[资].js"
+ },
+ {
+ "key":"hipy_js_非凡资源[资]",
+ "name":"非凡资源[资](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":1,
+ "filterable":0,
+ "order_num":232,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/非凡资源[资].js"
+ },
+ {
+ "key":"hipy_js_素白白[优]",
+ "name":"素白白[优](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":233,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/素白白[优].js"
+ },
+ {
+ "key":"hipy_js_腾云驾雾[官]",
+ "name":"腾云驾雾[官](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":234,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/腾云驾雾[官].js"
+ },
+ {
+ "key":"hipy_js_360影视[官]",
+ "name":"360影视[官](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":235,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/360影视[官].js"
+ },
+ {
+ "key":"hipy_js_奇珍异兽[官]",
+ "name":"奇珍异兽[官](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":236,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/奇珍异兽[官].js"
+ },
+ {
+ "key":"hipy_js_百忙无果[官]",
+ "name":"百忙无果[官](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":237,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/百忙无果[官].js"
+ },
+ {
+ "key":"hipy_js_阿里土豆[盘]",
+ "name":"阿里土豆[盘](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":238,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/阿里土豆[盘].js"
+ },
+ {
+ "key":"hipy_js_网飞猫[优]",
+ "name":"网飞猫[优](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":239,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/网飞猫[优].js"
+ },
+ {
+ "key":"hipy_js_哔哩教育[官]",
+ "name":"哔哩教育[官](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":240,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/我的哔哩[官].js?render=1&type=url¶ms=../json/哔哩教育.json"
+ },
+ {
+ "key":"hipy_js_哔哩大全[官]",
+ "name":"哔哩大全[官](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":240,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/我的哔哩[官].js?render=1&type=url¶ms=../json/哔哩大全.json"
+ },
+ {
+ "key":"hipy_js_金鹰资源[资]",
+ "name":"金鹰资源[资](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":1,
+ "filterable":0,
+ "order_num":241,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/金鹰资源[资].js"
+ },
+ {
+ "key":"hipy_js_南瓜影视[优]",
+ "name":"南瓜影视[优](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":242,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/南瓜影视[优].js"
+ },
+ {
+ "key":"hipy_js_量子资源[资]",
+ "name":"量子资源[资](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":1,
+ "filterable":0,
+ "order_num":243,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/量子资源[资].js"
+ },
+ {
+ "key":"hipy_js_烧火影视[优]",
+ "name":"烧火影视[优](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":0,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":244,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/烧火影视[优].js"
+ },
+ {
+ "key":"hipy_js_可可影视[优]",
+ "name":"可可影视[优](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":245,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/可可影视[优].js"
+ },
+ {
+ "key":"hipy_js_魔都资源[资]",
+ "name":"魔都资源[资](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":1,
+ "filterable":0,
+ "order_num":246,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/魔都资源[资].js"
+ },
+ {
+ "key":"hipy_js_农民影视[优]",
+ "name":"农民影视[优](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":247,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/农民影视[优].js"
+ },
+ {
+ "key":"hipy_js_爱看机器人[虫]",
+ "name":"爱看机器人[虫](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":248,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/爱看机器人[虫].js"
+ },
+ {
+ "key":"hipy_js_量子影视[资]",
+ "name":"量子影视[资](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":249,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/量子影视[资].js"
+ },
+ {
+ "key":"hipy_js_暴风资源[资]",
+ "name":"暴风资源[资](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":1,
+ "filterable":0,
+ "order_num":250,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/暴风资源[资].js"
+ },
+ {
+ "key":"hipy_js_豆瓣[官]",
+ "name":"豆瓣[官](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":1,
+ "filterable":1,
+ "order_num":251,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/豆瓣[官].js?render=1"
+ },
+ {
+ "key":"hipy_js_玩偶哥哥[盘]",
+ "name":"玩偶哥哥[盘](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":252,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/玩偶哥哥[盘].js"
+ },
+ {
+ "key":"hipy_js_LIBVIO[优]",
+ "name":"LIBVIO[优](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":253,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/LIBVIO[优].js"
+ },
+ {
+ "key":"hipy_js_兔小贝[儿]",
+ "name":"兔小贝[儿](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":254,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/兔小贝[儿].js"
+ },
+ {
+ "key":"hipy_js_花子动漫[漫]",
+ "name":"花子动漫[漫](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":255,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/花子动漫[漫].js"
+ },
+ {
+ "key":"hipy_js_优酷[官]",
+ "name":"优酷[官](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":256,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/优酷[官].js"
+ },
+ {
+ "key":"hipy_js_哔哩影视[官]",
+ "name":"哔哩影视[官](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":257,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/哔哩影视[官].js?render=1"
+ },
+ {
+ "key":"hipy_js_菜狗[官]",
+ "name":"菜狗[官](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":258,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/菜狗[官].js"
+ },
+ {
+ "key":"hipy_js_极速资源[资]",
+ "name":"极速资源[资](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":1,
+ "filterable":0,
+ "order_num":259,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/极速资源[资].js"
+ },
+ {
+ "key":"hipy_js_荐片[优]",
+ "name":"荐片[优](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":260,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/荐片[优].js"
+ },
+ {
+ "key":"hipy_js_思古影视[V2]",
+ "name":"思古影视[V2](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":261,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/思古影视[V2].js"
+ },
+ {
+ "key":"hipy_js_蛋蛋剧",
+ "name":"蛋蛋剧(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":264,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/蛋蛋剧.js"
+ },
+ {
+ "key":"hipy_js_蛋蛋赞",
+ "name":"蛋蛋赞(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":265,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/蛋蛋赞.js"
+ },
+ {
+ "key":"hipy_js_时光影院",
+ "name":"时光影院(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":269,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/时光影院.js"
+ },
+ {
+ "key":"hipy_js_皮皮影视",
+ "name":"皮皮影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":271,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/皮皮影视.js"
+ },
+ {
+ "key":"hipy_js_影视看吧",
+ "name":"影视看吧(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":272,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/影视看吧.js"
+ },
+ {
+ "key":"hipy_js_看看影视",
+ "name":"看看影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":273,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/看看影视.js"
+ },
+ {
+ "key":"hipy_js_酷客影视",
+ "name":"酷客影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":274,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/酷客影视.js"
+ },
+ {
+ "key":"hipy_js_热播之家",
+ "name":"热播之家(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":275,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/热播之家.js"
+ },
+ {
+ "key":"hipy_js_蓝光影视",
+ "name":"蓝光影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":276,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/蓝光影视.js"
+ },
+ {
+ "key":"hipy_js_星云影视",
+ "name":"星云影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":277,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/星云影视.js"
+ },
+ {
+ "key":"hipy_js_西屋影视",
+ "name":"西屋影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":278,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/西屋影视.js"
+ },
+ {
+ "key":"hipy_js_孜然影视",
+ "name":"孜然影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":279,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/孜然影视.js"
+ },
+ {
+ "key":"hipy_js_人人影视",
+ "name":"人人影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":280,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/人人影视.js"
+ },
+ {
+ "key":"hipy_js_快看影视",
+ "name":"快看影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":281,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/快看影视.js"
+ },
+ {
+ "key":"hipy_js_星空影院",
+ "name":"星空影院(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":282,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/星空影院.js"
+ },
+ {
+ "key":"hipy_js_HDmoli",
+ "name":"HDmoli(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":283,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/HDmoli.js"
+ },
+ {
+ "key":"hipy_js_4khdr",
+ "name":"4khdr(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":1,
+ "filterable":0,
+ "order_num":284,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/4khdr.js"
+ },
+ {
+ "key":"hipy_js_美益达",
+ "name":"美益达(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":286,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/美益达.js"
+ },
+ {
+ "key":"hipy_js_干饭影视",
+ "name":"干饭影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":287,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/干饭影视.js"
+ },
+ {
+ "key":"hipy_js_即看影视",
+ "name":"即看影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":288,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/即看影视.js"
+ },
+ {
+ "key":"hipy_js_夕云影视",
+ "name":"夕云影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":289,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/夕云影视.js"
+ },
+ {
+ "key":"hipy_js_8号影院",
+ "name":"8号影院(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":293,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/8号影院.js"
+ },
+ {
+ "key":"hipy_js_茶语资源[资]",
+ "name":"茶语资源[资](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":1,
+ "filterable":0,
+ "order_num":294,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/茶语资源[资].js"
+ },
+ {
+ "key":"hipy_js_电影先生",
+ "name":"电影先生(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":295,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/电影先生.js"
+ },
+ {
+ "key":"hipy_js_鸭奈飞影视",
+ "name":"鸭奈飞影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":296,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/鸭奈飞影视.js"
+ },
+ {
+ "key":"hipy_js_新视觉",
+ "name":"新视觉(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":300,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/新视觉.js"
+ },
+ {
+ "key":"hipy_js_4k剧院",
+ "name":"4k剧院(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":301,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/4k剧院.js"
+ },
+ {
+ "key":"hipy_js_魔方影视",
+ "name":"魔方影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":303,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/魔方影视.js"
+ },
+ {
+ "key":"hipy_js_往往影视[慢]",
+ "name":"往往影视[慢](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":304,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/往往影视[慢].js"
+ },
+ {
+ "key":"hipy_js_爱看影院",
+ "name":"爱看影院(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":305,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/爱看影院.js"
+ },
+ {
+ "key":"hipy_js_一号影院[搜]",
+ "name":"一号影院[搜](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":306,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/一号影院[搜].js"
+ },
+ {
+ "key":"hipy_js_首发网",
+ "name":"首发网(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":0,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":307,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/首发网.js"
+ },
+ {
+ "key":"hipy_js_星辰影视",
+ "name":"星辰影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":308,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/星辰影视.js"
+ },
+ {
+ "key":"hipy_js_大中国",
+ "name":"大中国(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":309,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/大中国.js"
+ },
+ {
+ "key":"hipy_js_剧圈圈",
+ "name":"剧圈圈(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":310,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/剧圈圈.js"
+ },
+ {
+ "key":"hipy_js_短剧TV网",
+ "name":"短剧TV网(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":311,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/短剧TV网.js"
+ },
+ {
+ "key":"hipy_js_黑木耳资源[资]",
+ "name":"黑木耳资源[资](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":1,
+ "filterable":0,
+ "order_num":312,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/黑木耳资源[资].js"
+ },
+ {
+ "key":"hipy_js_看客影院",
+ "name":"看客影院(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":313,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/看客影院.js"
+ },
+ {
+ "key":"hipy_js_iFun",
+ "name":"iFun(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":314,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/iFun.js"
+ },
+ {
+ "key":"hipy_js_如意影视",
+ "name":"如意影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":315,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/如意影视.js"
+ },
+ {
+ "key":"hipy_js_电影天堂",
+ "name":"电影天堂(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":316,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/电影天堂.js"
+ },
+ {
+ "key":"hipy_js_短剧天堂",
+ "name":"短剧天堂(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":1,
+ "filterable":1,
+ "order_num":317,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/短剧天堂.js"
+ },
+ {
+ "key":"hipy_js_飘花影院",
+ "name":"飘花影院(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":318,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/飘花影院.js"
+ },
+ {
+ "key":"hipy_js_我播",
+ "name":"我播(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":319,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/我播.js"
+ },
+ {
+ "key":"hipy_js_想看影院",
+ "name":"想看影院(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":320,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/想看影院.js"
+ },
+ {
+ "key":"hipy_js_小鱼影视",
+ "name":"小鱼影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":321,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/小鱼影视.js"
+ },
+ {
+ "key":"hipy_js_爱看农民[优]",
+ "name":"爱看农民[优](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":1,
+ "filterable":1,
+ "order_num":324,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/爱看农民[优].js"
+ },
+ {
+ "key":"hipy_js_爱看农民2[优]",
+ "name":"爱看农民2[优](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":1,
+ "filterable":1,
+ "order_num":325,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/爱看农民2[优].js"
+ },
+ {
+ "key":"hipy_js_爱看hd",
+ "name":"爱看hd(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":326,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/爱看hd.js"
+ },
+ {
+ "key":"hipy_js_胖虎影视",
+ "name":"胖虎影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":1,
+ "filterable":1,
+ "order_num":327,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/胖虎影视.js"
+ },
+ {
+ "key":"hipy_js_小站盘[搜]",
+ "name":"小站盘[搜](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":329,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/小站盘[搜].js"
+ },
+ {
+ "key":"hipy_js_狗狗盘[搜]",
+ "name":"狗狗盘[搜](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":330,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/狗狗盘[搜].js"
+ },
+ {
+ "key":"hipy_js_暖光影视",
+ "name":"暖光影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":333,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/暖光影视.js"
+ },
+ {
+ "key":"hipy_js_被窝电影",
+ "name":"被窝电影(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":334,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/被窝电影.js"
+ },
+ {
+ "key":"hipy_js_蚂蚁影视",
+ "name":"蚂蚁影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":335,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/蚂蚁影视.js"
+ },
+ {
+ "key":"hipy_js_影搜[搜]",
+ "name":"影搜[搜](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":336,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/影搜[搜].js"
+ },
+ {
+ "key":"hipy_js_易搜[搜]",
+ "name":"易搜[搜](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":338,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/易搜[搜].js"
+ },
+ {
+ "key":"hipy_js_短剧在线",
+ "name":"短剧在线(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":345,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/短剧在线.js"
+ },
+ {
+ "key":"hipy_js_哈皮影视[优]",
+ "name":"哈皮影视[优](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":346,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/哈皮影视[优].js"
+ },
+ {
+ "key":"hipy_js_笔趣阁[书]",
+ "name":"笔趣阁[书](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":347,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/笔趣阁[书].js"
+ },
+ {
+ "key":"hipy_js_番茄小说[书]",
+ "name":"番茄小说[书](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":348,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/番茄小说[书].js"
+ },
+ {
+ "key":"hipy_js_7猫小说[书]",
+ "name":"7猫小说[书](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":350,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/7猫小说[书].js"
+ },
+ {
+ "key":"hipy_js_蜡笔[盘]",
+ "name":"蜡笔[盘](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":353,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/蜡笔[盘].js"
+ },
+ {
+ "key":"hipy_js_虾酱追剧",
+ "name":"虾酱追剧(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":354,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/虾酱追剧.js"
+ },
+ {
+ "key":"hipy_js_黑料不打烊-z",
+ "name":"黑料不打烊-z(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":356,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/黑料不打烊-z.js"
+ },
+ {
+ "key":"hipy_js_六月听书[听]",
+ "name":"六月听书[听](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":358,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/六月听书[听].js"
+ },
+ {
+ "key":"hipy_js_i275听书[听]",
+ "name":"i275听书[听](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":360,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/i275听书[听].js"
+ },
+ {
+ "key":"hipy_js_播客[听]",
+ "name":"播客[听](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":0,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":361,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/播客[听].js"
+ },
+ {
+ "key":"hipy_js_爱上你听书网[听]",
+ "name":"爱上你听书网[听](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":362,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/爱上你听书网[听].js"
+ },
+ {
+ "key":"hipy_js_海洋听书[听]",
+ "name":"海洋听书[听](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":363,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/海洋听书[听].js"
+ },
+ {
+ "key":"hipy_js_有声绘本网[听]",
+ "name":"有声绘本网[听](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":364,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/有声绘本网[听].js"
+ },
+ {
+ "key":"hipy_js_博看听书[听]",
+ "name":"博看听书[听](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":365,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/博看听书[听].js"
+ },
+ {
+ "key":"hipy_js_有声小说吧[听]",
+ "name":"有声小说吧[听](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":367,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/有声小说吧[听].js"
+ },
+ {
+ "key":"hipy_js_顶点小说[书]",
+ "name":"顶点小说[书](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":369,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/顶点小说[书].js"
+ },
+ {
+ "key":"hipy_js_丫丫电子书[书]",
+ "name":"丫丫电子书[书](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":372,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/丫丫电子书[书].js"
+ },
+ {
+ "key":"hipy_js_飞翔鸟[书]",
+ "name":"飞翔鸟[书](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":375,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/飞翔鸟[书].js"
+ },
+ {
+ "key":"hipy_js_顶点小说2[书]",
+ "name":"顶点小说2[书](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":376,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/顶点小说2[书].js"
+ },
+ {
+ "key":"hipy_js_橘子柚[盘]",
+ "name":"橘子柚[盘](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":379,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/橘子柚[盘].js"
+ },
+ {
+ "key":"hipy_js_热片网",
+ "name":"热片网(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":382,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/热片网.js"
+ },
+ {
+ "key":"hipy_js_子子影视",
+ "name":"子子影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":383,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/子子影视.js"
+ },
+ {
+ "key":"hipy_js_天启",
+ "name":"天启(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":384,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/天启.js"
+ },
+ {
+ "key":"hipy_js_我看书斋[书]",
+ "name":"我看书斋[书](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":385,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/我看书斋[书].js"
+ },
+ {
+ "key":"hipy_js_一点视频[密]",
+ "name":"一点视频[密](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":386,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/一点视频[密].js"
+ },
+ {
+ "key":"hipy_js_九妖仓库[密]",
+ "name":"九妖仓库[密](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":388,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/九妖仓库[密].js"
+ },
+ {
+ "key":"hipy_js_千百视频[密]",
+ "name":"千百视频[密](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":389,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/千百视频[密].js"
+ },
+ {
+ "key":"hipy_js_老司视频[密]",
+ "name":"老司视频[密](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":390,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/老司视频[密].js"
+ },
+ {
+ "key":"hipy_js_剧圈圈[自动]",
+ "name":"剧圈圈[自动](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":391,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/剧圈圈[自动].js"
+ },
+ {
+ "key":"hipy_js_黑料不打烊[密]",
+ "name":"黑料不打烊[密](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":392,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/黑料不打烊[密].js"
+ },
+ {
+ "key":"hipy_js_爱爱影院[密]",
+ "name":"爱爱影院[密](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":393,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/爱爱影院[密].js"
+ },
+ {
+ "key":"hipy_js_29片库[密]",
+ "name":"29片库[密](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":394,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/29片库[密].js"
+ },
+ {
+ "key":"hipy_js_草莓秒播[密]",
+ "name":"草莓秒播[密](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":395,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/草莓秒播[密].js"
+ },
+ {
+ "key":"hipy_js_绿色仓库[密]",
+ "name":"绿色仓库[密](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":396,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/绿色仓库[密].js"
+ },
+ {
+ "key":"hipy_js_Pornhub[密]",
+ "name":"Pornhub[密](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":397,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/Pornhub[密].js"
+ },
+ {
+ "key":"hipy_js_乐草TV[密]",
+ "name":"乐草TV[密](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":398,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/乐草TV[密].js"
+ },
+ {
+ "key":"hipy_js_酷云影视",
+ "name":"酷云影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":399,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/酷云影视.js"
+ },
+ {
+ "key":"hipy_js_星辰CT",
+ "name":"星辰CT(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":400,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/星辰CT.js"
+ },
+ {
+ "key":"hipy_js_地瓜视频[密]",
+ "name":"地瓜视频[密](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":402,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/地瓜视频[密].js"
+ },
+ {
+ "key":"hipy_js_神仙影视",
+ "name":"神仙影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":403,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/神仙影视.js"
+ },
+ {
+ "key":"hipy_js_bilfun(自动)",
+ "name":"bilfun(自动)(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":404,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/bilfun(自动).js"
+ },
+ {
+ "key":"hipy_js_大师兄影视[优]",
+ "name":"大师兄影视[优](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":407,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/大师兄影视[优].js"
+ },
+ {
+ "key":"hipy_js_看戏网",
+ "name":"看戏网(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":408,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/看戏网.js"
+ },
+ {
+ "key":"hipy_js_黑狐影院",
+ "name":"黑狐影院(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":409,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/黑狐影院.js"
+ },
+ {
+ "key":"hipy_js_剧集TV",
+ "name":"剧集TV(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":410,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/剧集TV.js"
+ },
+ {
+ "key":"hipy_js_一起看[优]",
+ "name":"一起看[优](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":0,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":411,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/一起看[优].js"
+ },
+ {
+ "key":"hipy_js_速播小屋",
+ "name":"速播小屋(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":413,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/速播小屋.js"
+ },
+ {
+ "key":"hipy_js_iku喵[资]",
+ "name":"iku喵[资](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":1,
+ "filterable":0,
+ "order_num":414,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/iku喵[资].js"
+ },
+ {
+ "key":"hipy_js_天天影视",
+ "name":"天天影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":415,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/天天影视.js"
+ },
+ {
+ "key":"hipy_js_九牛电影",
+ "name":"九牛电影(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":416,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/九牛电影.js"
+ },
+ {
+ "key":"hipy_js_最新4K",
+ "name":"最新4K(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":418,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/最新4K.js"
+ },
+ {
+ "key":"hipy_js_JRKAN直播",
+ "name":"JRKAN直播(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":419,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/JRKAN直播.js"
+ },
+ {
+ "key":"hipy_js_追剧兔",
+ "name":"追剧兔(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":420,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/追剧兔.js"
+ },
+ {
+ "key":"hipy_js_无插件直播",
+ "name":"无插件直播(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":421,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/无插件直播.js"
+ },
+ {
+ "key":"hipy_js_猫视界",
+ "name":"猫视界(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":422,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/猫视界.js"
+ },
+ {
+ "key":"hipy_js_好趣网[播]",
+ "name":"好趣网[播](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":423,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/好趣网[播].js"
+ },
+ {
+ "key":"hipy_js_漫小肆[画]",
+ "name":"漫小肆[画](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":424,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/漫小肆[画].js"
+ },
+ {
+ "key":"hipy_js_清风DJ[听]",
+ "name":"清风DJ[听](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":425,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/清风DJ[听].js"
+ },
+ {
+ "key":"hipy_js_麻雀视频[优]",
+ "name":"麻雀视频[优](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":426,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/麻雀视频[优].js"
+ },
+ {
+ "key":"hipy_js_第一韩漫[画]",
+ "name":"第一韩漫[画](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":427,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/第一韩漫[画].js"
+ },
+ {
+ "key":"hipy_js_次元城动漫[漫]",
+ "name":"次元城动漫[漫](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":428,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/次元城动漫[漫].js"
+ },
+ {
+ "key":"hipy_js_OmoFun[漫]",
+ "name":"OmoFun[漫](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":429,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/OmoFun[漫].js"
+ },
+ {
+ "key":"hipy_js_R18撸[密]",
+ "name":"R18撸[密](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":430,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/R18撸[密].js"
+ },
+ {
+ "key":"hipy_js_动漫巴士[漫]",
+ "name":"动漫巴士[漫](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":1,
+ "filterable":1,
+ "order_num":431,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/动漫巴士[漫].js"
+ },
+ {
+ "key":"hipy_js_大米动漫[漫]",
+ "name":"大米动漫[漫](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":432,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/大米动漫[漫].js"
+ },
+ {
+ "key":"hipy_js_樱花动漫[漫]",
+ "name":"樱花动漫[漫](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":433,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/樱花动漫[漫].js"
+ },
+ {
+ "key":"hipy_js_维奇动漫[漫]",
+ "name":"维奇动漫[漫](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":1,
+ "filterable":1,
+ "order_num":434,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/维奇动漫[漫].js"
+ },
+ {
+ "key":"hipy_js_88看球[球]",
+ "name":"88看球[球](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":0,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":435,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/88看球[球].js"
+ },
+ {
+ "key":"hipy_js_云盘资源网[盘]",
+ "name":"云盘资源网[盘](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":1,
+ "filterable":1,
+ "order_num":436,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/云盘资源网[盘].js"
+ },
+ {
+ "key":"hipy_js_哔哩直播[官]",
+ "name":"哔哩直播[官](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":437,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/哔哩直播[官].js"
+ },
+ {
+ "key":"hipy_js_虎牙直播[官]",
+ "name":"虎牙直播[官](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":438,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/虎牙直播[官].js"
+ },
+ {
+ "key":"hipy_js_动漫网[漫]",
+ "name":"动漫网[漫](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":439,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/动漫网[漫].js"
+ },
+ {
+ "key":"hipy_js_斗鱼直播[官]",
+ "name":"斗鱼直播[官](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":440,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/斗鱼直播[官].js"
+ },
+ {
+ "key":"hipy_js_恒大影视[密]",
+ "name":"恒大影视[密](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":441,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/恒大影视[密].js"
+ },
+ {
+ "key":"hipy_js_爱车MV[听]",
+ "name":"爱车MV[听](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":442,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/爱车MV[听].js"
+ },
+ {
+ "key":"hipy_js_驴番[漫]",
+ "name":"驴番[漫](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":443,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/驴番[漫].js"
+ },
+ {
+ "key":"hipy_js_58动漫[漫]",
+ "name":"58动漫[漫](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":444,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/58动漫[漫].js"
+ },
+ {
+ "key":"hipy_js_多多追剧[优]",
+ "name":"多多追剧[优](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":445,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/多多追剧[优].js"
+ },
+ {
+ "key":"hipy_js_相声随身听[听]",
+ "name":"相声随身听[听](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":446,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/相声随身听[听].js"
+ },
+ {
+ "key":"hipy_js_广播迷FM[听]",
+ "name":"广播迷FM[听](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":447,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/广播迷FM[听].js"
+ },
+ {
+ "key":"hipy_js_包子漫画[画]",
+ "name":"包子漫画[画](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":448,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/包子漫画[画].js"
+ },
+ {
+ "key":"hipy_js_古风漫画[画]",
+ "name":"古风漫画[画](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":449,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/古风漫画[画].js"
+ },
+ {
+ "key":"hipy_js_七色番[漫]",
+ "name":"七色番[漫](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":450,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/七色番[漫].js"
+ },
+ {
+ "key":"hipy_js_MuteFun[漫]",
+ "name":"MuteFun[漫](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":451,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/MuteFun[漫].js"
+ },
+ {
+ "key":"hipy_js_有声听书网[听]",
+ "name":"有声听书网[听](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":452,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/有声听书网[听].js"
+ },
+ {
+ "key":"hipy_js_NT动漫[漫]",
+ "name":"NT动漫[漫](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":453,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/NT动漫[漫].js"
+ },
+ {
+ "key":"hipy_js_星辰[优]",
+ "name":"星辰[优](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":454,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/星辰[优].js"
+ },
+ {
+ "key":"hipy_js_飞刀资源[资]",
+ "name":"飞刀资源[资](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":1,
+ "filterable":0,
+ "order_num":455,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/飞刀资源[资].js"
+ },
+ {
+ "key":"hipy_js_七新电影网",
+ "name":"七新电影网(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":457,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/七新电影网.js"
+ },
+ {
+ "key":"hipy_js_路视频[密]",
+ "name":"路视频[密](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":458,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/路视频[密].js"
+ },
+ {
+ "key":"hipy_js_刺猬影视",
+ "name":"刺猬影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":459,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/刺猬影视.js"
+ },
+ {
+ "key":"hipy_js_文才[资]",
+ "name":"文才[资](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":1,
+ "filterable":1,
+ "order_num":460,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/文才[资].js"
+ },
+ {
+ "key":"hipy_js_采王道长[合]",
+ "name":"采王道长[合](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":463,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/采集之王[合].js?type=url¶ms=../json/采集静态.json$1"
+ },
+ {
+ "key":"hipy_js_采王zy[密]",
+ "name":"采王zy[密](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":463,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/采集之王[合].js?type=url¶ms=../json/采集[zy]静态.json$1"
+ },
+ {
+ "key":"hipy_js_采王成人[密]",
+ "name":"采王成人[密](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":463,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/采集之王[合].js?type=url¶ms=../json/采集[密]静态.json$1$"
+ },
+ {
+ "key":"hipy_js_剧哥哥",
+ "name":"剧哥哥(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":467,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/剧哥哥.js"
+ },
+ {
+ "key":"hipy_js_策驰影院(自动)",
+ "name":"策驰影院(自动)(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":468,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/策驰影院(自动).js"
+ },
+ {
+ "key":"hipy_js_豆角网",
+ "name":"豆角网(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":469,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/豆角网.js"
+ },
+ {
+ "key":"hipy_js_西瓜影院",
+ "name":"西瓜影院(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":470,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/西瓜影院.js"
+ },
+ {
+ "key":"hipy_js_script直播[飞]",
+ "name":"script直播[飞](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":0,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":473,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/script直播[飞].js"
+ },
+ {
+ "key":"hipy_js_分享短视频",
+ "name":"分享短视频(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":474,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/分享短视频.js"
+ },
+ {
+ "key":"hipy_js_贝乐虎[儿]",
+ "name":"贝乐虎[儿](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":0,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":475,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/贝乐虎[儿].js"
+ },
+ {
+ "key":"hipy_js_KTV歌厅[听]",
+ "name":"KTV歌厅[听](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":476,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/KTV歌厅[听].js"
+ },
+ {
+ "key":"hipy_js_网飞.TV",
+ "name":"网飞.TV(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":477,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/网飞.TV.js"
+ },
+ {
+ "key":"hipy_js_啊哈DJ[听]",
+ "name":"啊哈DJ[听](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":478,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/啊哈DJ[听].js"
+ },
+ {
+ "key":"hipy_js_ASMR[听]",
+ "name":"ASMR[听](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":479,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/ASMR[听].js"
+ },
+ {
+ "key":"hipy_js_直播转点播[合]",
+ "name":"直播转点播[合](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":480,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/直播转点播[合].js?type=url¶ms=../json/live2cms.json"
+ },
+ {
+ "key":"hipy_js_飞狗影院[密]",
+ "name":"飞狗影院[密](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":485,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/飞狗影院[密].js"
+ },
+ {
+ "key":"hipy_js_奶狗影视[慢]",
+ "name":"奶狗影视[慢](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":486,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/奶狗影视[慢].js"
+ },
+ {
+ "key":"hipy_js_饭团影视",
+ "name":"饭团影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":487,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/饭团影视.js"
+ },
+ {
+ "key":"hipy_js_影剧星球",
+ "name":"影剧星球(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":488,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/影剧星球.js"
+ },
+ {
+ "key":"hipy_js_影视大全",
+ "name":"影视大全(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":489,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/影视大全.js"
+ },
+ {
+ "key":"hipy_js_影视控",
+ "name":"影视控(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":490,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/影视控.js"
+ },
+ {
+ "key":"hipy_js_悠悠影视",
+ "name":"悠悠影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":491,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/悠悠影视.js"
+ },
+ {
+ "key":"hipy_js_爱你短剧",
+ "name":"爱你短剧(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":492,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/爱你短剧.js"
+ },
+ {
+ "key":"hipy_js_三集电影[自动]",
+ "name":"三集电影[自动](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":493,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/三集电影[自动].js"
+ },
+ {
+ "key":"hipy_js_来看点播[自动]",
+ "name":"来看点播[自动](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":494,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/来看点播[自动].js"
+ },
+ {
+ "key":"hipy_js_冠建影视",
+ "name":"冠建影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":495,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/冠建影视.js"
+ },
+ {
+ "key":"hipy_js_影渣渣影视",
+ "name":"影渣渣影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":496,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/影渣渣影视.js"
+ },
+ {
+ "key":"hipy_js_旺旺影视",
+ "name":"旺旺影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":497,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/旺旺影视.js"
+ },
+ {
+ "key":"hipy_js_神马影院[自动]",
+ "name":"神马影院[自动](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":498,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/神马影院[自动].js"
+ },
+ {
+ "key":"hipy_js_网飞啦[自动]",
+ "name":"网飞啦[自动](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":499,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/网飞啦[自动].js"
+ },
+ {
+ "key":"hipy_js_嘀哩嘀哩",
+ "name":"嘀哩嘀哩(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":500,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/嘀哩嘀哩.js"
+ },
+ {
+ "key":"hipy_js_刷剧网",
+ "name":"刷剧网(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":501,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/刷剧网.js"
+ },
+ {
+ "key":"hipy_js_auete",
+ "name":"auete(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":502,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/auete.js"
+ },
+ {
+ "key":"hipy_js_剧迷",
+ "name":"剧迷(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":503,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/剧迷.js"
+ },
+ {
+ "key":"hipy_js_映播TV",
+ "name":"映播TV(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":1,
+ "filterable":0,
+ "order_num":504,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/映播TV.js"
+ },
+ {
+ "key":"hipy_js_毒蛇电影[优]",
+ "name":"毒蛇电影[优](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":505,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/毒蛇电影[优].js"
+ },
+ {
+ "key":"hipy_js_小女18[密]",
+ "name":"小女18[密](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":506,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/小女18[密].js"
+ },
+ {
+ "key":"hipy_js_易点看影院[自动]",
+ "name":"易点看影院[自动](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":507,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/易点看影院[自动].js"
+ },
+ {
+ "key":"hipy_js_你好帅影院",
+ "name":"你好帅影院(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":508,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/你好帅影院.js"
+ },
+ {
+ "key":"hipy_js_大千视界",
+ "name":"大千视界(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":511,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/大千视界.js"
+ },
+ {
+ "key":"hipy_js_游子视频",
+ "name":"游子视频(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":512,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/游子视频.js"
+ },
+ {
+ "key":"hipy_js_看客视频",
+ "name":"看客视频(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":514,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/看客视频.js"
+ },
+ {
+ "key":"hipy_js_奈飞中文[自动]",
+ "name":"奈飞中文[自动](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":515,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/奈飞中文[自动].js"
+ },
+ {
+ "key":"hipy_js_饺子影院",
+ "name":"饺子影院(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":516,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/饺子影院.js"
+ },
+ {
+ "key":"hipy_js_无忧影视",
+ "name":"无忧影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":517,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/无忧影视.js"
+ },
+ {
+ "key":"hipy_js_咖啡影视",
+ "name":"咖啡影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":518,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/咖啡影视.js"
+ },
+ {
+ "key":"hipy_js_笔趣阁13[书]",
+ "name":"笔趣阁13[书](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":0,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":519,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/笔趣阁13[书].js"
+ },
+ {
+ "key":"hipy_js_360吧[球]",
+ "name":"360吧[球](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":520,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/360吧[球].js"
+ },
+ {
+ "key":"hipy_js_看了么",
+ "name":"看了么(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":521,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/看了么.js"
+ },
+ {
+ "key":"hipy_js_童趣[儿]",
+ "name":"童趣[儿](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":522,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/童趣[儿].js"
+ },
+ {
+ "key":"hipy_js_36直播[密]",
+ "name":"36直播[密](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":0,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":523,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/36直播[密].js"
+ },
+ {
+ "key":"hipy_js_路漫漫[漫]",
+ "name":"路漫漫[漫](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":524,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/路漫漫[漫].js"
+ },
+ {
+ "key":"hipy_js_老白故事[听]",
+ "name":"老白故事[听](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":525,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/老白故事[听].js"
+ },
+ {
+ "key":"hipy_js_世纪DJ音乐网[听]",
+ "name":"世纪DJ音乐网[听](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":527,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/世纪DJ音乐网[听].js"
+ },
+ {
+ "key":"hipy_js_闪雷电",
+ "name":"闪雷电(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":528,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/闪雷电.js"
+ },
+ {
+ "key":"hipy_js_飞鱼影视",
+ "name":"飞鱼影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":529,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/飞鱼影视.js"
+ },
+ {
+ "key":"hipy_js_天龙影院",
+ "name":"天龙影院(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":530,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/天龙影院.js"
+ },
+ {
+ "key":"hipy_js_桃子影视[优]",
+ "name":"桃子影视[优](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":534,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/桃子影视[优].js"
+ },
+ {
+ "key":"hipy_js_爱看短剧[盘]",
+ "name":"爱看短剧[盘](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":535,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/爱看短剧[盘].js"
+ },
+ {
+ "key":"hipy_js_爱优影视[自动]",
+ "name":"爱优影视[自动](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":536,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/爱优影视[自动].js"
+ },
+ {
+ "key":"hipy_js_兄弟影视[优]",
+ "name":"兄弟影视[优](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":537,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/兄弟影视[优].js"
+ },
+ {
+ "key":"hipy_js_影视工厂",
+ "name":"影视工厂(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":538,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/影视工厂.js"
+ },
+ {
+ "key":"hipy_js_至臻[盘]",
+ "name":"至臻[盘](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":539,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/至臻[盘].js"
+ },
+ {
+ "key":"hipy_js_B站影视",
+ "name":"B站影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":540,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/B站影视.js"
+ },
+ {
+ "key":"hipy_js_两个BT",
+ "name":"两个BT(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":541,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/两个BT.js"
+ },
+ {
+ "key":"hipy_js_宇航影视",
+ "name":"宇航影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":0,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":542,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/宇航影视.js"
+ },
+ {
+ "key":"hipy_js_小白菜电影",
+ "name":"小白菜电影(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":543,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/小白菜电影.js"
+ },
+ {
+ "key":"hipy_js_影视工场",
+ "name":"影视工场(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":544,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/影视工场.js"
+ },
+ {
+ "key":"hipy_js_低端",
+ "name":"低端(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":545,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/低端.js"
+ },
+ {
+ "key":"hipy_js_爱迪影视",
+ "name":"爱迪影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":547,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/爱迪影视.js"
+ },
+ {
+ "key":"hipy_js_我爱跟剧",
+ "name":"我爱跟剧(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":548,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/我爱跟剧.js"
+ },
+ {
+ "key":"hipy_js_北川影视",
+ "name":"北川影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":549,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/北川影视.js"
+ },
+ {
+ "key":"hipy_js_朴樱影视",
+ "name":"朴樱影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":550,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/朴樱影视.js"
+ },
+ {
+ "key":"hipy_js_哔嘀影视[优]",
+ "name":"哔嘀影视[优](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":551,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/哔嘀影视[优].js"
+ },
+ {
+ "key":"hipy_js_539影视",
+ "name":"539影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":552,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/539影视.js"
+ },
+ {
+ "key":"hipy_js_348电影网",
+ "name":"348电影网(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":553,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/348电影网.js"
+ },
+ {
+ "key":"hipy_js_达达龟",
+ "name":"达达龟(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":554,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/达达龟.js"
+ },
+ {
+ "key":"hipy_js_米爱影视",
+ "name":"米爱影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":555,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/米爱影视.js"
+ },
+ {
+ "key":"hipy_js_FreeOKLOL",
+ "name":"FreeOKLOL(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":557,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/FreeOKLOL.js"
+ },
+ {
+ "key":"hipy_js_火狐影视",
+ "name":"火狐影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":559,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/火狐影视.js"
+ },
+ {
+ "key":"hipy_js_4K-AV",
+ "name":"4K-AV(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":1,
+ "filterable":1,
+ "order_num":560,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/4K-AV.js"
+ },
+ {
+ "key":"hipy_js_星芽短剧[优]",
+ "name":"星芽短剧[优](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":1,
+ "filterable":1,
+ "order_num":561,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/星芽短剧[优].js"
+ },
+ {
+ "key":"hipy_js_PTT追剧大师",
+ "name":"PTT追剧大师(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":562,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/PTT追剧大师.js"
+ },
+ {
+ "key":"hipy_js_PTT[优]",
+ "name":"PTT[优](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":563,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/PTT[优].js"
+ },
+ {
+ "key":"hipy_js_酷我听书[听]",
+ "name":"酷我听书[听](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":564,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/酷我听书[听].js"
+ },
+ {
+ "key":"hipy_js_喜马拉雅[听]",
+ "name":"喜马拉雅[听](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":565,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/喜马拉雅[听].js"
+ },
+ {
+ "key":"hipy_py_emby",
+ "name":"emby(hipy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/hipy/emby.py",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":567,
+ "ext":""
+ },
+ {
+ "key":"hipy_js_一曲肝肠断",
+ "name":"一曲肝肠断(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":0,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":569,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/一曲肝肠断.js"
+ },
+ {
+ "key":"hipy_js_cally66",
+ "name":"cally66(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":570,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/cally66.js"
+ },
+ {
+ "key":"hipy_js_一支穿云箭",
+ "name":"一支穿云箭(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":571,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/一支穿云箭.js"
+ },
+ {
+ "key":"hipy_js_中华听书网[听]",
+ "name":"中华听书网[听](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":572,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/中华听书网[听].js"
+ },
+ {
+ "key":"hipy_js_番号资源[密]",
+ "name":"番号资源[密](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":573,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/番号资源[密].js"
+ },
+ {
+ "key":"hipy_js_310直播[球]",
+ "name":"310直播[球](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":0,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":574,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/310直播[球].js"
+ },
+ {
+ "key":"hipy_js_色库[密]",
+ "name":"色库[密](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":575,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/色库[密].js"
+ },
+ {
+ "key":"hipy_js_01看球[球]",
+ "name":"01看球[球](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":578,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/01看球[球].js"
+ },
+ {
+ "key":"hipy_js_速讯影院",
+ "name":"速讯影院(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":579,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/速讯影院.js"
+ },
+ {
+ "key":"hipy_js_咕咕番[漫]",
+ "name":"咕咕番[漫](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":580,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/咕咕番[漫].js"
+ },
+ {
+ "key":"hipy_js_臭蛋蛋",
+ "name":"臭蛋蛋(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":581,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/臭蛋蛋.js"
+ },
+ {
+ "key":"hipy_js_金牌影院",
+ "name":"金牌影院(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":582,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/金牌影院.js"
+ },
+ {
+ "key":"hipy_js_种子音乐[听]",
+ "name":"种子音乐[听](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":583,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/种子音乐[听].js"
+ },
+ {
+ "key":"hipy_js_萌番[漫]",
+ "name":"萌番[漫](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":584,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/萌番[漫].js"
+ },
+ {
+ "key":"hipy_js_那兔视频",
+ "name":"那兔视频(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":585,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/那兔视频.js"
+ },
+ {
+ "key":"hipy_js_旋风视频",
+ "name":"旋风视频(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":586,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/旋风视频.js"
+ },
+ {
+ "key":"hipy_js_文才2[资]",
+ "name":"文才2[资](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":1,
+ "filterable":0,
+ "order_num":587,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/文才2[资].js"
+ },
+ {
+ "key":"hipy_js_电影狗",
+ "name":"电影狗(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":589,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/电影狗.js"
+ },
+ {
+ "key":"hipy_js_家庭影视",
+ "name":"家庭影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":590,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/家庭影视.js"
+ },
+ {
+ "key":"hipy_js_小宝影院",
+ "name":"小宝影院(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":591,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/小宝影院.js"
+ },
+ {
+ "key":"hipy_js_看呀看",
+ "name":"看呀看(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":592,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/看呀看.js"
+ },
+ {
+ "key":"hipy_js_爱弹幕[漫]",
+ "name":"爱弹幕[漫](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":593,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/爱弹幕[漫].js"
+ },
+ {
+ "key":"hipy_js_怡萱动漫[漫]",
+ "name":"怡萱动漫[漫](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":594,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/怡萱动漫[漫].js"
+ },
+ {
+ "key":"hipy_js_银河影视[V2]",
+ "name":"银河影视[V2](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":595,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/银河影视[V2].js"
+ },
+ {
+ "key":"hipy_js_小马影视[V2]",
+ "name":"小马影视[V2](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":596,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/小马影视[V2].js"
+ },
+ {
+ "key":"hipy_js_0855影视",
+ "name":"0855影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":597,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/0855影视.js"
+ },
+ {
+ "key":"hipy_js_河狸影视[V2]",
+ "name":"河狸影视[V2](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":598,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/河狸影视[V2].js"
+ },
+ {
+ "key":"hipy_js_柠檬影视[V2]",
+ "name":"柠檬影视[V2](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":599,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/柠檬影视[V2].js"
+ },
+ {
+ "key":"hipy_js_奇米动漫[漫]",
+ "name":"奇米动漫[漫](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":600,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/奇米动漫[漫].js"
+ },
+ {
+ "key":"hipy_js_鸭飞影视[V2]",
+ "name":"鸭飞影视[V2](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":601,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/鸭飞影视[V2].js"
+ },
+ {
+ "key":"hipy_js_畅梦影视[优]",
+ "name":"畅梦影视[优](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":602,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/畅梦影视[优].js"
+ },
+ {
+ "key":"hipy_js_剧巴巴",
+ "name":"剧巴巴(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":1,
+ "filterable":1,
+ "order_num":603,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/剧巴巴.js"
+ },
+ {
+ "key":"hipy_js_蜥蜴影视[优]",
+ "name":"蜥蜴影视[优](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":604,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/蜥蜴影视[优].js"
+ },
+ {
+ "key":"hipy_js_达达猪",
+ "name":"达达猪(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":605,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/达达猪.js"
+ },
+ {
+ "key":"hipy_js_UAA[密]",
+ "name":"UAA[密](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":606,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/UAA[密].js"
+ },
+ {
+ "key":"hipy_js_牌牌影院",
+ "name":"牌牌影院(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":607,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/牌牌影院.js"
+ },
+ {
+ "key":"hipy_js_UAA[听]",
+ "name":"UAA[听](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":608,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/UAA[听].js"
+ },
+ {
+ "key":"hipy_js_云电影网",
+ "name":"云电影网(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":609,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/云电影网.js"
+ },
+ {
+ "key":"hipy_js_GO影视",
+ "name":"GO影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":1,
+ "filterable":1,
+ "order_num":610,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/GO影视.js"
+ },
+ {
+ "key":"hipy_js_漫画走廊[画密飞]",
+ "name":"漫画走廊[画密飞](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":611,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/漫画走廊[画密飞].js"
+ },
+ {
+ "key":"hipy_js_eFuns",
+ "name":"eFuns(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":1,
+ "filterable":1,
+ "order_num":612,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/eFuns.js"
+ },
+ {
+ "key":"hipy_js_追影TV",
+ "name":"追影TV(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":0,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":613,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/追影TV.js"
+ },
+ {
+ "key":"hipy_js_金金虫",
+ "name":"金金虫(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":614,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/金金虫.js"
+ },
+ {
+ "key":"hipy_js_极点影视",
+ "name":"极点影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":615,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/极点影视.js"
+ },
+ {
+ "key":"hipy_js_泡泡影院",
+ "name":"泡泡影院(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":616,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/泡泡影院.js"
+ },
+ {
+ "key":"hipy_js_青龙",
+ "name":"青龙(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":619,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/青龙.js"
+ },
+ {
+ "key":"hipy_js_88tvs",
+ "name":"88tvs(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":620,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/88tvs.js"
+ },
+ {
+ "key":"hipy_js_🎒📌央视大全[🎒] ",
+ "name":"🎒📌央视大全[🎒] (drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":0,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":621,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/🎒📌央视大全[🎒] .js"
+ },
+ {
+ "key":"hipy_js_片多多[优]",
+ "name":"片多多[优](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":622,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/片多多[优].js"
+ },
+ {
+ "key":"hipy_js_926tv[球]",
+ "name":"926tv[球](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":623,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/926tv[球].js"
+ },
+ {
+ "key":"hipy_js_盘搜",
+ "name":"盘搜(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":624,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/盘搜.js"
+ },
+ {
+ "key":"hipy_js_大全[央]",
+ "name":"大全[央](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":625,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/大全[央].js"
+ },
+ {
+ "key":"hipy_js_老王电影[自动]",
+ "name":"老王电影[自动](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":626,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/老王电影[自动].js"
+ },
+ {
+ "key":"hipy_js_KimiVod",
+ "name":"KimiVod(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":627,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/KimiVod.js"
+ },
+ {
+ "key":"hipy_js_素白白",
+ "name":"素白白(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":628,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/素白白.js"
+ },
+ {
+ "key":"hipy_js_焱淼4kapp[优]",
+ "name":"焱淼4kapp[优](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":1,
+ "filterable":1,
+ "order_num":629,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/焱淼4kapp[优].js"
+ },
+ {
+ "key":"hipy_js_木瓜影视",
+ "name":"木瓜影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":630,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/木瓜影视.js"
+ },
+ {
+ "key":"hipy_js_熊猫TV",
+ "name":"熊猫TV(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":631,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/熊猫TV.js"
+ },
+ {
+ "key":"hipy_js_全能影视",
+ "name":"全能影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":632,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/全能影视.js"
+ },
+ {
+ "key":"hipy_js_忍者影视",
+ "name":"忍者影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":633,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/忍者影视.js"
+ },
+ {
+ "key":"hipy_js_小猫电影院",
+ "name":"小猫电影院(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":634,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/小猫电影院.js"
+ },
+ {
+ "key":"hipy_js_RJAV[密]",
+ "name":"RJAV[密](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":635,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/RJAV[密].js"
+ },
+ {
+ "key":"hipy_js_HBOTV[优]",
+ "name":"HBOTV[优](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":636,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/HBOTV[优].js"
+ },
+ {
+ "key":"hipy_js_电影兔",
+ "name":"电影兔(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":637,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/电影兔.js"
+ },
+ {
+ "key":"hipy_js_libvio",
+ "name":"libvio(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":638,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/libvio.js"
+ },
+ {
+ "key":"hipy_js_哔嘀影视",
+ "name":"哔嘀影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":639,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/哔嘀影视.js"
+ },
+ {
+ "key":"hipy_js_歪片星球[资]",
+ "name":"歪片星球[资](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":1,
+ "filterable":1,
+ "order_num":640,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/歪片星球[资].js"
+ },
+ {
+ "key":"hipy_js_央视少儿[漫]",
+ "name":"央视少儿[漫](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":0,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":641,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/央视少儿[漫].js"
+ },
+ {
+ "key":"hipy_js_央视大全[优]",
+ "name":"央视大全[优](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":0,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":642,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/央视大全[优].js"
+ },
+ {
+ "key":"hipy_js_墨点影视",
+ "name":"墨点影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":643,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/墨点影视.js"
+ },
+ {
+ "key":"hipy_js_茶杯狐",
+ "name":"茶杯狐(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":644,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/茶杯狐.js"
+ },
+ {
+ "key":"hipy_js_85k影视",
+ "name":"85k影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":645,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/85k影视.js"
+ },
+ {
+ "key":"hipy_js_茄子影视[自动]",
+ "name":"茄子影视[自动](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":646,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/茄子影视[自动].js"
+ },
+ {
+ "key":"hipy_js_影梦影视",
+ "name":"影梦影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":647,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/影梦影视.js"
+ },
+ {
+ "key":"hipy_js_南瓜影视",
+ "name":"南瓜影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":648,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/南瓜影视.js"
+ },
+ {
+ "key":"hipy_js_🤡星芽短剧[🤡]",
+ "name":"🤡星芽短剧[🤡](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":1,
+ "filterable":1,
+ "order_num":649,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/🤡星芽短剧[🤡].js"
+ },
+ {
+ "key":"hipy_js_绿茶",
+ "name":"绿茶(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":650,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/绿茶.js"
+ },
+ {
+ "key":"hipy_js_rarbt(全)[优]",
+ "name":"rarbt(全)[优](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":651,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/rarbt(全)[优].js"
+ },
+ {
+ "key":"hipy_js_妖狐影视[自动]",
+ "name":"妖狐影视[自动](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":652,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/妖狐影视[自动].js"
+ },
+ {
+ "key":"hipy_js_cally66影视",
+ "name":"cally66影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":653,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/cally66影视.js"
+ },
+ {
+ "key":"hipy_js_rarbt[优]",
+ "name":"rarbt[优](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":654,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/rarbt[优].js"
+ },
+ {
+ "key":"hipy_js_泥巴影院",
+ "name":"泥巴影院(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":655,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/泥巴影院.js"
+ },
+ {
+ "key":"hipy_js_电影猎手[自动]",
+ "name":"电影猎手[自动](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":656,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/电影猎手[自动].js"
+ },
+ {
+ "key":"hipy_js_多多影音",
+ "name":"多多影音(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":657,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/多多影音.js"
+ },
+ {
+ "key":"hipy_js_木偶哥哥[盘]",
+ "name":"木偶哥哥[盘](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":1,
+ "filterable":1,
+ "order_num":658,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/木偶哥哥[盘].js"
+ },
+ {
+ "key":"hipy_js_嗷呜动漫",
+ "name":"嗷呜动漫(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":659,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/嗷呜动漫.js"
+ },
+ {
+ "key":"hipy_js_美剧窝",
+ "name":"美剧窝(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":660,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/美剧窝.js"
+ },
+ {
+ "key":"hipy_js_Auete影视",
+ "name":"Auete影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":1,
+ "filterable":1,
+ "order_num":661,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/Auete影视.js"
+ },
+ {
+ "key":"hipy_js_[密]RjAv",
+ "name":"[密]RjAv(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":662,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/[密]RjAv.js"
+ },
+ {
+ "key":"hipy_js_努努影院1",
+ "name":"努努影院1(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":663,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/努努影院1.js"
+ },
+ {
+ "key":"hipy_js_111tv[自动]",
+ "name":"111tv[自动](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":664,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/111tv[自动].js"
+ },
+ {
+ "key":"hipy_js_泥视频[资]",
+ "name":"泥视频[资](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":1,
+ "filterable":1,
+ "order_num":665,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/泥视频[资].js"
+ },
+ {
+ "key":"hipy_js_222听书[听]",
+ "name":"222听书[听](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":666,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/222听书[听].js"
+ },
+ {
+ "key":"hipy_js_一个g影视",
+ "name":"一个g影视(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":667,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/一个g影视.js"
+ },
+ {
+ "key":"hipy_js_泽少1",
+ "name":"泽少1(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":1,
+ "filterable":1,
+ "order_num":668,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/APPV2[模板].js?type=url¶ms=http://122.228.85.203:1000"
+ },
+ {
+ "key":"hipy_js_泽少2",
+ "name":"泽少2(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":1,
+ "filterable":1,
+ "order_num":668,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/APPV2[模板].js?type=url¶ms=http://122.228.85.203:1000"
+ },
+ {
+ "key":"hipy_js_夸克分享[盘]",
+ "name":"夸克分享[盘](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":669,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/夸克分享[合].js?type=url¶ms=../json/夸克分享.json"
+ },
+ {
+ "key":"hipy_js_夸克分享2[合]",
+ "name":"夸克分享2[合](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":672,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/夸克分享2[合].js"
+ },
+ {
+ "key":"hipy_js_xvideos涩涩[密]",
+ "name":"xvideos涩涩[密](drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":0,
+ "order_num":673,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/xvideos涩涩[密].js"
+ },
+ {
+ "key":"hipy_js_农民影视gz",
+ "name":"农民影视gz(drpy_t3)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":1,
+ "quickSearch":0,
+ "filterable":1,
+ "order_num":675,
+ "ext":"https://hipy.trylyingto.me/files/drpy_js/农民影视gz.js"
+ },
+ {
+ "key":"Test_jsapi",
+ "name":"Test_jsapi(drpy)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/drpy2.min.js",
+ "searchable":2,
+ "quickSearch":0,
+ "filterable":0,
+ "ext":"https://hipy.trylyingto.me/files/txt/js/jsapi.js",
+ "jar":"https://hipy.trylyingto.me/files/jar/custom_jsapi.jar",
+ "order_num":9999
+ },
+ {
+ "key":"js_origin",
+ "name":"JS(原始)",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/txt/js/原始JS.js",
+ "searchable":1,
+ "quickSearch":1,
+ "filterable":1,
+ "ext":"",
+ "order_num":9999
+ },
+ {
+ "key":"CMS_非凡资源",
+ "name":"🥗┃非凡┃资源",
+ "type":1,
+ "api":"http://cj.ffzyapi.com/api.php/provide/vod/",
+ "playurl":"json:http://jx.84jia.com/m3u8ts.php?url=",
+ "searchable":1,
+ "quickSearch":1,
+ "filterable":1,
+ "categories":[
+ "动作片",
+ "喜剧片",
+ "科幻片",
+ "恐怖片",
+ "爱情片",
+ "剧情片",
+ "战争片",
+ "记录片",
+ "国产剧",
+ "欧美剧",
+ "香港剧",
+ "韩国剧",
+ "台湾剧",
+ "日本剧",
+ "海外剧",
+ "泰国剧",
+ "国产动漫",
+ "日韩动漫",
+ "欧美动漫",
+ "港台动漫",
+ "海外动漫",
+ "大陆综艺",
+ "港台综艺",
+ "日韩综艺",
+ "欧美综艺"
+ ],
+ "order_num":9999
+ },
+ {
+ "key":"CMS_量子资源",
+ "name":"🥑┃量子┃资源",
+ "type":1,
+ "api":"http://cj.lziapi.com/api.php/provide/vod/",
+ "playurl":"json:http://jx.84jia.com/m3u8ts.php?url=",
+ "searchable":1,
+ "quickSearch":1,
+ "filterable":0,
+ "categories":[
+ "国产剧",
+ "国产动漫",
+ "泰国剧",
+ "台湾剧",
+ "香港剧",
+ "欧美剧",
+ "韩国剧",
+ "日本剧",
+ "动漫",
+ "体育",
+ "剧情片",
+ "动作片",
+ "爱情片",
+ "喜剧片"
+ ],
+ "order_num":9999
+ },
+ {
+ "key":"CMS_索尼资源",
+ "name":"🥑┃索尼┃资源",
+ "type":1,
+ "api":"https://suoniapi.com/api.php/provide/vod/from/snm3u8/",
+ "categories":[
+ "动作片",
+ "喜剧片",
+ "爱情片",
+ "科幻片",
+ "恐怖片",
+ "剧情片",
+ "战争片",
+ "国产剧",
+ "欧美剧",
+ "韩剧",
+ "日剧",
+ "港剧",
+ "台剧",
+ "泰剧",
+ "海外剧",
+ "纪录片",
+ "大陆综艺",
+ "日韩综艺",
+ "港台综艺",
+ "欧美综艺",
+ "国产动漫",
+ "日韩动漫",
+ "欧美动漫",
+ "动画片",
+ "港台动漫",
+ "海外动漫",
+ "演唱会",
+ "体育赛事",
+ "篮球",
+ "足球",
+ "预告片",
+ "斯诺克",
+ "影视解说"
+ ],
+ "searchable":1,
+ "quickSearch":1,
+ "order_num":9999
+ },
+ {
+ "key":"CMS_爱酷秒",
+ "name":"🥑┃酷秒┃资源",
+ "type":0,
+ "api":"http://caiji.ikum.cc:8099/api.php/provide/vod/at/xml",
+ "categories":[
+ "电影",
+ "连续剧",
+ "综艺",
+ "动漫",
+ "国产剧",
+ "港台剧",
+ "日韩剧",
+ "欧美剧",
+ "其他剧",
+ "儿童",
+ "蓝光",
+ "哔哩哔哩"
+ ],
+ "searchable":1,
+ "quickSearch":1,
+ "order_num":9999
+ },
+ {
+ "key":"Live2Cms",
+ "name":"直播转点播V2",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/live2cms.js",
+ "searchable":2,
+ "quickSearch":0,
+ "filterable":0,
+ "ext":"https://hipy.trylyingto.me/files/json/live2mv_data.json",
+ "order_num":9999
+ },
+ {
+ "key":"Alist",
+ "name":"Alist",
+ "type":3,
+ "api":"https://hipy.trylyingto.me/files/drpy_libs/alist.min.js",
+ "searchable":2,
+ "quickSearch":0,
+ "filterable":0,
+ "ext":"https://hipy.trylyingto.me/files/json/alist.json;200;video",
+ "order_num":9999
+ },
+ {
+ "key":"网盘配置",
+ "name":"网盘及彈幕配置",
+ "type":3,
+ "api":"csp_Config",
+ "searchable":0,
+ "changeable":0,
+ "ext":"https://hipy.trylyingto.me/files/json/tokenm.json",
+ "order_num":9999
+ },
+ {
+ "key":"Local",
+ "name":"本地",
+ "type":3,
+ "api":"csp_Local",
+ "order_num":9999
+ },
+ {
+ "key":"PushShare",
+ "name":"我的资源分享",
+ "type":3,
+ "api":"csp_PushShare",
+ "searchable":1,
+ "quickSearch":1,
+ "changeable":1,
+ "filterable":0,
+ "timeout":60,
+ "ext":"https://hipy.trylyingto.me/files/json/tokenm.json$$$https://hipy.trylyingto.me/files/json/pushshare.txt$$$db$$$1",
+ "style":{
+ "type":"list",
+ "ratio":1.1
+ },
+ "order_num":9999
+ },
+ {
+ "key":"AliShare",
+ "name":"阿里云盘影视分享",
+ "type":3,
+ "api":"csp_AliShare",
+ "searchable":1,
+ "quickSearch":1,
+ "changeable":1,
+ "filterable":0,
+ "timeout":60,
+ "ext":"https://hipy.trylyingto.me/files/json/tokenm.json$$$https://hipy.trylyingto.me/files/json/alishare.txt$$$db$$$1",
+ "style":{
+ "type":"list",
+ "ratio":1.1
+ },
+ "order_num":9999
+ },
+ {
+ "key":"AliShareEBook",
+ "name":"阿里云盘书籍分享",
+ "type":3,
+ "api":"csp_AliShare",
+ "searchable":0,
+ "quickSearch":0,
+ "changeable":0,
+ "filterable":0,
+ "timeout":60,
+ "ext":"https://hipy.trylyingto.me/files/json/tokenm.json$$$https://hipy.trylyingto.me/files/json/alishare.ebook.txt$$$db$$$1",
+ "style":{
+ "type":"list",
+ "ratio":1.1
+ },
+ "order_num":9999
+ },
+ {
+ "key":"QuarkShare",
+ "name":"夸克云盘分享",
+ "type":3,
+ "api":"csp_QuarkShare",
+ "searchable":0,
+ "quickSearch":0,
+ "changeable":0,
+ "filterable":0,
+ "timeout":60,
+ "ext":"https://hipy.trylyingto.me/files/json/tokenm.json$$$https://hipy.trylyingto.me/files/json/quarkshare.txt",
+ "style":{
+ "type":"list",
+ "ratio":1.1
+ },
+ "order_num":9999
+ },
+ {
+ "key":"ThunderShare",
+ "name":"迅雷云盘分享",
+ "type":3,
+ "api":"csp_ThunderShare",
+ "searchable":0,
+ "quickSearch":0,
+ "changeable":0,
+ "filterable":0,
+ "timeout":60,
+ "ext":"https://hipy.trylyingto.me/files/json/tokenm.json$$$https://hipy.trylyingto.me/files/json/thundershare.txt",
+ "style":{
+ "type":"list",
+ "ratio":1.1
+ },
+ "order_num":9999
+ },
+ {
+ "key":"PikPakShare",
+ "name":"PikPak分享",
+ "type":3,
+ "api":"csp_PikPakShare",
+ "searchable":1,
+ "quickSearch":1,
+ "changeable":1,
+ "filterable":0,
+ "timeout":60,
+ "ext":"https://hipy.trylyingto.me/files/json/tokenm.json$$$https://hipy.trylyingto.me/files/json/pikpakclass.json$$$https://hipy.trylyingto.me/files/json/pikpakclass.json.txt.gz",
+ "style":{
+ "type":"list",
+ "ratio":1.1
+ },
+ "order_num":9999
+ },
+ {
+ "key":"SambaShare",
+ "name":"Samba分享",
+ "type":3,
+ "api":"csp_SambaShare",
+ "searchable":0,
+ "quickSearch":0,
+ "changeable":0,
+ "filterable":0,
+ "timeout":60,
+ "ext":"https://hipy.trylyingto.me/files/json/tokenm.json$$$https://hipy.trylyingto.me/files/json/sambashare.txt",
+ "order_num":9999
+ },
+ {
+ "key":"Wogg",
+ "name":"玩偶哥哥|网盘",
+ "type":3,
+ "api":"csp_Wogg",
+ "quickSearch":1,
+ "changeable":1,
+ "filterable":1,
+ "timeout":60,
+ "ext":"https://hipy.trylyingto.me/files/json/tokenm.json$$$https://wogg.link/$$$proxy$$$1$$$https://hipy.trylyingto.me/files/json/wogg.json",
+ "order_num":9999
+ },
+ {
+ "key":"Wo4k",
+ "name":"玩偶4K|磁力",
+ "type":3,
+ "api":"csp_Wo4k",
+ "quickSearch":1,
+ "changeable":1,
+ "filterable":1,
+ "timeout":60,
+ "ext":"https://hipy.trylyingto.me/files/json/tokenm.json$$$https://www.wo4k.net/$$$proxy$$$1$$$https://hipy.trylyingto.me/files/json/wogg.json",
+ "order_num":9999
+ },
+ {
+ "key":"Wobg",
+ "name":"玩偶表哥|网盘",
+ "type":3,
+ "api":"csp_Wobg",
+ "quickSearch":1,
+ "changeable":1,
+ "filterable":1,
+ "timeout":60,
+ "ext":"https://hipy.trylyingto.me/files/json/tokenm.json$$$https://wobge.run.goorm.io$$$proxy$$$1$$$https://hipy.trylyingto.me/files/json/wogg.json",
+ "order_num":9999
+ },
+ {
+ "key":"yydsys",
+ "name":"玩你老哥|网盘",
+ "type":3,
+ "api":"csp_Wobg",
+ "quickSearch":1,
+ "changeable":1,
+ "filterable":1,
+ "timeout":60,
+ "ext":"https://hipy.trylyingto.me/files/json/tokenm.json$$$https://tv.yydsys.top/$$$proxy$$$1$$$https://hipy.trylyingto.me/files/json/wogg.json",
+ "order_num":9999
+ },
+ {
+ "key":"Xinshijue",
+ "name":"新视觉|网盘",
+ "type":3,
+ "api":"csp_Xinshijue",
+ "quickSearch":1,
+ "changeable":1,
+ "filterable":1,
+ "timeout":60,
+ "ext":"https://hipy.trylyingto.me/files/json/tokenm.json$$$https://www.80yy3.com/$$$proxy$$$1$$$https://hipy.trylyingto.me/files/json/wogg.json",
+ "order_num":9999
+ },
+ {
+ "key":"Moli",
+ "name":"HDmoli|网盘",
+ "type":3,
+ "api":"csp_Moli",
+ "quickSearch":1,
+ "changeable":1,
+ "filterable":1,
+ "timeout":60,
+ "ext":"https://hipy.trylyingto.me/files/json/tokenm.json$$$https://www.hdmoli.pro/$$$proxy$$$1$$$https://hipy.trylyingto.me/files/json/moli.json",
+ "order_num":9999
+ },
+ {
+ "key":"Hdhive",
+ "name":"影巢|网盘",
+ "type":3,
+ "api":"csp_Hdhive",
+ "quickSearch":1,
+ "changeable":1,
+ "filterable":1,
+ "timeout":60,
+ "ext":"https://hipy.trylyingto.me/files/json/tokenm.json$$$proxy$$$1",
+ "order_num":9999
+ },
+ {
+ "key":"Ppxzy",
+ "name":"皮皮虾|网盘",
+ "type":3,
+ "api":"csp_Ppxzy",
+ "quickSearch":1,
+ "changeable":1,
+ "filterable":1,
+ "timeout":60,
+ "ext":"https://hipy.trylyingto.me/files/json/tokenm.json$$$https://ppxzy.ink$$$proxy$$$1",
+ "order_num":9999
+ },
+ {
+ "key":"校长影视",
+ "name":"校长影视|网盘",
+ "type":3,
+ "api":"csp_XiaoZhang",
+ "quickSearch":1,
+ "changeable":1,
+ "filterable":1,
+ "timeout":60,
+ "ext":"https://hipy.trylyingto.me/files/json/tokenm.json$$$https://xzyshd.com$$$proxy$$$1",
+ "order_num":9999
+ },
+ {
+ "key":"Bdys_spider",
+ "name":"哔滴┃磁力",
+ "api":"csp_Bdys01",
+ "type":3,
+ "filterable":1,
+ "searchable":1,
+ "quickSearch":1,
+ "ext":"https://www.yjys.me/$$$None$$$1",
+ "order_num":9999
+ },
+ {
+ "key":"YunPan",
+ "name":"云盘资源|网盘",
+ "type":3,
+ "api":"csp_YunPan",
+ "timeout":60,
+ "ext":"https://hipy.trylyingto.me/files/json/tokenm.json$$$None$$$proxy$$$1",
+ "order_num":9999
+ },
+ {
+ "key":"YingSo",
+ "name":"影搜|网盘搜索",
+ "type":3,
+ "api":"csp_YingSo",
+ "timeout":60,
+ "ext":"https://hipy.trylyingto.me/files/json/tokenm.json",
+ "order_num":9999
+ },
+ {
+ "key":"混合盘",
+ "name":"混合盘|网盘搜索",
+ "type":3,
+ "api":"csp_HunHePan",
+ "timeout":60,
+ "ext":"https://hipy.trylyingto.me/files/json/tokenm.json",
+ "style":{
+ "type":"list",
+ "ratio":1.1
+ },
+ "order_num":9999
+ },
+ {
+ "key":"88Pan",
+ "name":"88网盘|网盘搜索",
+ "type":3,
+ "api":"csp_EightEight",
+ "timeout":60,
+ "ext":"https://hipy.trylyingto.me/files/json/tokenm.json$$$https://662688.xyz$$$",
+ "style":{
+ "type":"list",
+ "ratio":1.1
+ },
+ "order_num":9999
+ },
+ {
+ "key":"PanSearch",
+ "name":"PanSearch|网盘搜索",
+ "type":3,
+ "api":"csp_PanSearch",
+ "quickSearch":1,
+ "changeable":1,
+ "filterable":1,
+ "timeout":60,
+ "ext":"https://hipy.trylyingto.me/files/json/tokenm.json",
+ "order_num":9999
+ },
+ {
+ "key":"盘友圈",
+ "name":"盘友圈|网盘搜索",
+ "type":3,
+ "api":"csp_Panyq",
+ "timeout":60,
+ "ext":"https://hipy.trylyingto.me/files/json/tokenm.json$$$site$$$proxy",
+ "order_num":9999
+ },
+ {
+ "key":"秒搜",
+ "name":"秒搜|网盘搜索",
+ "type":3,
+ "api":"csp_MiaoSou",
+ "timeout":60,
+ "ext":"https://hipy.trylyingto.me/files/json/tokenm.json",
+ "style":{
+ "type":"list",
+ "ratio":1.1
+ },
+ "order_num":9999
+ },
+ {
+ "key":"Funletu",
+ "name":"趣盘搜|夸克搜索",
+ "type":3,
+ "api":"csp_Funletu",
+ "quickSearch":1,
+ "changeable":1,
+ "filterable":1,
+ "timeout":60,
+ "ext":"https://hipy.trylyingto.me/files/json/tokenm.json",
+ "style":{
+ "type":"list",
+ "ratio":1.1
+ },
+ "order_num":9999
+ },
+ {
+ "key":"QuarkPanso",
+ "name":"夸克盘搜|夸克搜索",
+ "type":3,
+ "api":"csp_QuarkPanso",
+ "quickSearch":1,
+ "changeable":1,
+ "filterable":1,
+ "timeout":60,
+ "ext":"https://hipy.trylyingto.me/files/json/tokenm.json",
+ "style":{
+ "type":"list",
+ "ratio":1.1
+ },
+ "order_num":9999
+ },
+ {
+ "key":"DaPanSo",
+ "name":"大盘搜|网盘搜索",
+ "type":3,
+ "api":"csp_DaPanSo",
+ "quickSearch":1,
+ "changeable":1,
+ "filterable":1,
+ "timeout":60,
+ "ext":"https://hipy.trylyingto.me/files/json/tokenm.json$$$https://dapanso.com$$$proxy$$$1",
+ "order_num":9999
+ },
+ {
+ "key":"PikaSo",
+ "name":"皮卡搜|网盘搜索",
+ "type":3,
+ "api":"csp_PikaSo",
+ "quickSearch":1,
+ "changeable":1,
+ "filterable":1,
+ "timeout":60,
+ "ext":"https://hipy.trylyingto.me/files/json/tokenm.json$$$https://www.pikaso.top/$$$None",
+ "style":{
+ "type":"list",
+ "ratio":1.1
+ },
+ "order_num":9999
+ },
+ {
+ "key":"Qianfan",
+ "name":"千帆|网盘搜索",
+ "type":3,
+ "api":"csp_Qianfan",
+ "quickSearch":1,
+ "changeable":1,
+ "filterable":1,
+ "timeout":60,
+ "ext":"https://hipy.trylyingto.me/files/json/tokenm.json$$$https://pan.qianfan.app$$$None$$$https://hipy.trylyingto.me/files/json/qianfan.txt$$$1",
+ "order_num":9999
+ },
+ {
+ "key":"YunSo",
+ "name":"小云搜索|网盘搜索",
+ "type":3,
+ "api":"csp_YunSo",
+ "quickSearch":1,
+ "changeable":1,
+ "filterable":1,
+ "timeout":60,
+ "ext":"https://hipy.trylyingto.me/files/json/tokenm.json$$$https://www.yunso.net$$$None$$$1",
+ "style":{
+ "type":"list",
+ "ratio":1.1
+ },
+ "order_num":9999
+ },
+ {
+ "key":"YunPanOne",
+ "name":"云盘One|网盘搜索",
+ "type":3,
+ "api":"csp_YunPanOne",
+ "quickSearch":1,
+ "changeable":1,
+ "filterable":1,
+ "timeout":60,
+ "ext":"https://hipy.trylyingto.me/files/json/tokenm.json$$$None$$$proxy$$$1",
+ "order_num":9999
+ },
+ {
+ "key":"MV_vod",
+ "name":"电视┃MTV",
+ "type":1,
+ "api":"https://mv.wogg.link/mv/vod",
+ "searchable":1,
+ "quickSearch":0,
+ "changeable":0,
+ "order_num":9999
+ },
+ {
+ "key":"酷狗",
+ "name":"酷狗",
+ "type":3,
+ "api":"csp_Kugou",
+ "searchable":1,
+ "changeable":0,
+ "order_num":9999
+ },
+ {
+ "key":"Iktv",
+ "name":"KTV",
+ "type":3,
+ "api":"csp_Iktv",
+ "searchable":1,
+ "changeable":0,
+ "order_num":9999
+ },
+ {
+ "key":"Yinyuetai",
+ "name":"音悦台",
+ "type":3,
+ "api":"csp_Yinyuetai",
+ "searchable":1,
+ "changeable":0,
+ "order_num":9999
+ },
+ {
+ "key":"push_agent",
+ "name":"推送",
+ "type":3,
+ "api":"csp_Push",
+ "changeable":0,
+ "timeout":30,
+ "ext":"https://hipy.trylyingto.me/files/json/tokenm.json",
+ "order_num":9999
+ },
+ {
+ "key":"應用商店",
+ "name":"應用商店",
+ "type":3,
+ "api":"csp_Market",
+ "searchable":0,
+ "changeable":0,
+ "ext":"https://fm.t4tv.hz.cz/json/market.json",
+ "order_num":9999
+ }
+ ],
+ "parses":[
+ {
+ "name":"🌐Ⓤ",
+ "type":0,
+ "url":"",
+ "header":{
+ "User-Agent":"Mozilla/5.0"
+ }
+ },
+ {
+ "name":"轮询",
+ "type":2,
+ "url":"Sequence",
+ "header":{
+ "User-Agent":"Mozilla/5.0"
+ }
+ },
+ {
+ "name":"并发",
+ "type":2,
+ "url":"Parallel",
+ "header":{
+ "User-Agent":"Mozilla/5.0"
+ }
+ },
+ {
+ "name":"777",
+ "url":"https://jx.777jiexi.com/player/?url=",
+ "type":0,
+ "ext":{
+ "flag":[
+ "qiyi",
+ "imgo",
+ "爱奇艺",
+ "奇艺",
+ "qq",
+ "qq 预告及花絮",
+ "腾讯",
+ "youku",
+ "优酷",
+ "pptv",
+ "PPTV",
+ "letv",
+ "乐视",
+ "leshi",
+ "mgtv",
+ "芒果",
+ "sohu",
+ "xigua",
+ "fun",
+ "风行"
+ ]
+ },
+ "header":{
+ "User-Agent":"Mozilla/5.0"
+ }
+ },
+ {
+ "name":"哔哩",
+ "url":"https://hipy.trylyingto.me/parse/api/哔哩.js?url=",
+ "type":1,
+ "ext":{
+ "flag":[
+ "qiyi",
+ "imgo",
+ "爱奇艺",
+ "奇艺",
+ "qq",
+ "qq 预告及花絮",
+ "腾讯",
+ "youku",
+ "优酷",
+ "pptv",
+ "PPTV",
+ "letv",
+ "乐视",
+ "leshi",
+ "mgtv",
+ "芒果",
+ "sohu",
+ "xigua",
+ "fun",
+ "风行"
+ ]
+ },
+ "header":{
+ "User-Agent":"Mozilla/5.0"
+ }
+ },
+ {
+ "name":"杰森",
+ "url":"https://hipy.trylyingto.me/parse/api/杰森.js?url=",
+ "type":1,
+ "ext":{
+ "flag":[
+ "qiyi",
+ "imgo",
+ "爱奇艺",
+ "奇艺",
+ "qq",
+ "qq 预告及花絮",
+ "腾讯",
+ "youku",
+ "优酷",
+ "pptv",
+ "PPTV",
+ "letv",
+ "乐视",
+ "leshi",
+ "mgtv",
+ "芒果",
+ "sohu",
+ "xigua",
+ "fun",
+ "风行"
+ ]
+ },
+ "header":{
+ "User-Agent":"Mozilla/5.0"
+ }
+ },
+ {
+ "name":"阳途",
+ "url":"https://hipy.trylyingto.me/parse/api/阳途.js?url=",
+ "type":1,
+ "ext":{
+ "flag":[
+ "qiyi",
+ "imgo",
+ "爱奇艺",
+ "奇艺",
+ "qq",
+ "qq 预告及花絮",
+ "腾讯",
+ "youku",
+ "优酷",
+ "pptv",
+ "PPTV",
+ "letv",
+ "乐视",
+ "leshi",
+ "mgtv",
+ "芒果",
+ "sohu",
+ "xigua",
+ "fun",
+ "风行"
+ ]
+ },
+ "header":{
+ "User-Agent":"Mozilla/5.0"
+ }
+ },
+ {
+ "name":"夜幕",
+ "url":"https://hipy.trylyingto.me/parse/api/夜幕.js?url=",
+ "type":1,
+ "ext":{
+ "flag":[
+ "qiyi",
+ "imgo",
+ "爱奇艺",
+ "奇艺",
+ "qq",
+ "qq 预告及花絮",
+ "腾讯",
+ "youku",
+ "优酷",
+ "pptv",
+ "PPTV",
+ "letv",
+ "乐视",
+ "leshi",
+ "mgtv",
+ "芒果",
+ "sohu",
+ "xigua",
+ "fun",
+ "风行"
+ ]
+ },
+ "header":{
+ "User-Agent":"Mozilla/5.0"
+ }
+ },
+ {
+ "name":"虾米",
+ "url":"https://hipy.trylyingto.me/parse/api/虾米.js?url=",
+ "type":1,
+ "ext":{
+ "flag":[
+ "qiyi",
+ "imgo",
+ "爱奇艺",
+ "奇艺",
+ "qq",
+ "qq 预告及花絮",
+ "腾讯",
+ "youku",
+ "优酷",
+ "pptv",
+ "PPTV",
+ "letv",
+ "乐视",
+ "leshi",
+ "mgtv",
+ "芒果",
+ "sohu",
+ "xigua",
+ "fun",
+ "风行"
+ ]
+ },
+ "header":{
+ "User-Agent":"Mozilla/5.0"
+ }
+ },
+ {
+ "name":"CK",
+ "url":"https://hipy.trylyingto.me/parse/api/CK.js?url=",
+ "type":1,
+ "ext":{
+ "flag":[
+ "qiyi",
+ "imgo",
+ "爱奇艺",
+ "奇艺",
+ "qq",
+ "qq 预告及花絮",
+ "腾讯",
+ "youku",
+ "优酷",
+ "pptv",
+ "PPTV",
+ "letv",
+ "乐视",
+ "leshi",
+ "mgtv",
+ "芒果",
+ "sohu",
+ "xigua",
+ "fun",
+ "风行"
+ ]
+ },
+ "header":{
+ "User-Agent":"Mozilla/5.0"
+ }
+ },
+ {
+ "name":"盘古",
+ "url":"https://hipy.trylyingto.me/parse/api/盘古.js?url=",
+ "type":1,
+ "ext":{
+ "flag":[
+ "qiyi",
+ "imgo",
+ "爱奇艺",
+ "奇艺",
+ "qq",
+ "qq 预告及花絮",
+ "腾讯",
+ "youku",
+ "优酷",
+ "pptv",
+ "PPTV",
+ "letv",
+ "乐视",
+ "leshi",
+ "mgtv",
+ "芒果",
+ "sohu",
+ "xigua",
+ "fun",
+ "风行"
+ ]
+ },
+ "header":{
+ "User-Agent":"Mozilla/5.0"
+ }
+ },
+ {
+ "name":"8090g",
+ "url":"https://www.8090g.cn/jiexi/?url=",
+ "type":0,
+ "ext":{
+ "flag":[
+ "qiyi",
+ "imgo",
+ "爱奇艺",
+ "奇艺",
+ "qq",
+ "qq 预告及花絮",
+ "腾讯",
+ "youku",
+ "优酷",
+ "pptv",
+ "PPTV",
+ "letv",
+ "乐视",
+ "leshi",
+ "mgtv",
+ "芒果",
+ "sohu",
+ "xigua",
+ "fun",
+ "风行"
+ ]
+ },
+ "header":{
+ "User-Agent":"Mozilla/5.0"
+ }
+ },
+ {
+ "name":"小7",
+ "url":"https://2.08bk.com/?url=",
+ "type":0,
+ "ext":{
+ "flag":[
+ "qiyi",
+ "imgo",
+ "爱奇艺",
+ "奇艺",
+ "qq",
+ "qq 预告及花絮",
+ "腾讯",
+ "youku",
+ "优酷",
+ "pptv",
+ "PPTV",
+ "letv",
+ "乐视",
+ "leshi",
+ "mgtv",
+ "芒果",
+ "sohu",
+ "xigua",
+ "fun",
+ "风行"
+ ]
+ },
+ "header":{
+ "User-Agent":"Mozilla/5.0"
+ }
+ },
+ {
+ "name":"BL解析",
+ "url":"https://vip.bljiex.com/?v=",
+ "type":0,
+ "ext":{
+ "flag":[
+ "qiyi",
+ "imgo",
+ "爱奇艺",
+ "奇艺",
+ "qq",
+ "qq 预告及花絮",
+ "腾讯",
+ "youku",
+ "优酷",
+ "pptv",
+ "PPTV",
+ "letv",
+ "乐视",
+ "leshi",
+ "mgtv",
+ "芒果",
+ "sohu",
+ "xigua",
+ "fun",
+ "风行"
+ ]
+ },
+ "header":{
+ "User-Agent":"Mozilla/5.0"
+ }
+ },
+ {
+ "name":"keyu",
+ "type":1,
+ "url":"http://newjiexi.gotka.top/keyu3.php?url=",
+ "ext":{
+ "flag":[
+ "qq",
+ "腾讯",
+ "qiyi",
+ "爱奇艺",
+ "奇艺",
+ "youku",
+ "优酷",
+ "mgtv",
+ "芒果",
+ "letv",
+ "乐视",
+ "pptv",
+ "PPTV",
+ "sohu",
+ "bilibili",
+ "哔哩哔哩",
+ "哔哩"
+ ],
+ "header":{
+ "User-Agent":"okhttp/4.1.0"
+ }
+ },
+ "order_num":9999
+ }
+ ],
+ "flags":[
+ "imgo",
+ "youku",
+ "qq",
+ "qq 预告及花絮",
+ "iqiyi",
+ "qiyi",
+ "fun",
+ "letv",
+ "leshi",
+ "sohu",
+ "tudou",
+ "xigua",
+ "cntv",
+ "1905",
+ "pptv",
+ "mgtv",
+ "wasu",
+ "bilibili",
+ "renrenmi"
+ ],
+ "hotSearch":[
+ {
+ "name":"mobilesearch",
+ "request":{
+ "method":"GET",
+ "header":[
+ {
+ "key":"Referer",
+ "value":"https://hipy.trylyingto.me"
+ }
+ ],
+ "url":{
+ "raw":"https://hipy.trylyingto.me/hotsugg?t={time}"
+ }
+ },
+ "response":{
+ "result":"$.data",
+ "data":[
+ {
+ "key":"keyword",
+ "value":"title"
+ }
+ ]
+ }
+ }
+ ],
+ "lives":[
+ {
+ "name":"直播",
+ "type":0,
+ "url":"https://hipy.trylyingto.me/files/txt/mytv.txt",
+ "playerType":1,
+ "ua":"okhttp/3.12.13",
+ "epg":"https://epg.mxdyeah.top/api/diyp/?ch={name}&date={date}",
+ "logo":"https://live.mxdyeah.top/logo/{name}.png"
+ }
+ ],
+ "sniffer":{
+ "userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.27",
+ "isVideoFormat":"http((?!http).){26,}\\.(m3u8|mp4|flv|avi|mkv|wmv|mpg|mpeg|mov|ts|3gp|rm|rmvb|asf|m4a|mp3|wma)",
+ "custom":[
+ {
+ "url":"/Cloud/Down/AliCloud/",
+ "mimeType":"text/html",
+ "encoding":"utf-8",
+ "header":{
+ "Referer":"https://zxzj.vip/"
+ }
+ },
+ {
+ "url":"ysting.ysxs8.vip",
+ "mimeType":"text/html",
+ "encoding":"utf-8",
+ "header":{
+ "Referer":"http://ysting.ysxs8.vip:81"
+ }
+ }
+ ]
+ },
+ "recommend":[
+ {
+ "name":"豆瓣推荐",
+ "request":{
+ "method":"GET",
+ "header":[
+ {
+ "key":"Referer",
+ "value":"https://movie.douban.com/"
+ }
+ ],
+ "url":{
+ "raw":"https://movie.douban.com/j/new_search_subjects?sort=U&range=0,10&tags=&playable=1&start=0&year_range=2022,2022"
+ }
+ },
+ "response":{
+ "result":"$.data",
+ "data":[
+ {
+ "key":"name",
+ "value":"title"
+ },
+ {
+ "key":"note",
+ "value":"rate"
+ },
+ {
+ "key":"pic",
+ "value":"cover"
+ }
+ ]
+ },
+ "expires":"86400"
+ }
+ ],
+ "rating":[
+ {
+ "name":"rating",
+ "request":{
+ "method":"GET",
+ "url":{
+ "raw":"https://api.wmdb.tv/api/v1/movie/search?q={name}&limit=1"
+ }
+ },
+ "response":{
+ "result":"this",
+ "data":[
+ {
+ "key":"rating",
+ "value":"doubanRating"
+ }
+ ]
+ }
+ }
+ ],
+ "doh":[
+ {
+ "ips":[
+ "8.8.4.4",
+ "8.8.8.8"
+ ],
+ "name":"Google",
+ "url":"https://dns.google/dns-query"
+ },
+ {
+ "ips":[
+ "1.1.1.1",
+ "1.0.0.1",
+ "2606:4700:4700::1111",
+ "2606:4700:4700::1001"
+ ],
+ "name":"Cloudflare",
+ "url":"https://cloudflare-dns.com/dns-query"
+ },
+ {
+ "ips":[
+ "94.140.14.140",
+ "94.140.14.141"
+ ],
+ "name":"AdGuard",
+ "url":"https://dns.adguard.com/dns-query"
+ },
+ {
+ "ips":[
+ "84.200.69.80",
+ "84.200.70.40"
+ ],
+ "name":"DNSWatch",
+ "url":"https://resolver2.dns.watch/dns-query"
+ },
+ {
+ "ips":[
+ "9.9.9.9",
+ "149.112.112.112"
+ ],
+ "name":"Quad9",
+ "url":"https://dns.quad9.net/dns-quer"
+ }
+ ],
+ "ijk":[
+ {
+ "group":"软解码",
+ "options":[
+ {
+ "category":4,
+ "name":"opensles",
+ "value":"0"
+ },
+ {
+ "category":4,
+ "name":"overlay-format",
+ "value":"842225234"
+ },
+ {
+ "category":4,
+ "name":"framedrop",
+ "value":"1"
+ },
+ {
+ "category":4,
+ "name":"soundtouch",
+ "value":"1"
+ },
+ {
+ "category":4,
+ "name":"start-on-prepared",
+ "value":"1"
+ },
+ {
+ "category":1,
+ "name":"http-detect-range-support",
+ "value":"0"
+ },
+ {
+ "category":1,
+ "name":"fflags",
+ "value":"fastseek"
+ },
+ {
+ "category":2,
+ "name":"skip_loop_filter",
+ "value":"48"
+ },
+ {
+ "category":4,
+ "name":"reconnect",
+ "value":"1"
+ },
+ {
+ "category":4,
+ "name":"enable-accurate-seek",
+ "value":"0"
+ },
+ {
+ "category":4,
+ "name":"mediacodec",
+ "value":"0"
+ },
+ {
+ "category":4,
+ "name":"mediacodec-auto-rotate",
+ "value":"0"
+ },
+ {
+ "category":4,
+ "name":"mediacodec-handle-resolution-change",
+ "value":"0"
+ },
+ {
+ "category":4,
+ "name":"mediacodec-hevc",
+ "value":"0"
+ },
+ {
+ "category":1,
+ "name":"dns_cache_timeout",
+ "value":"600000000"
+ },
+ {
+ "category":4,
+ "name":"max-buffer-size",
+ "value":"15728640"
+ }
+ ]
+ },
+ {
+ "group":"硬解码",
+ "options":[
+ {
+ "category":4,
+ "name":"opensles",
+ "value":"0"
+ },
+ {
+ "category":4,
+ "name":"overlay-format",
+ "value":"842225234"
+ },
+ {
+ "category":4,
+ "name":"framedrop",
+ "value":"1"
+ },
+ {
+ "category":4,
+ "name":"soundtouch",
+ "value":"1"
+ },
+ {
+ "category":4,
+ "name":"start-on-prepared",
+ "value":"1"
+ },
+ {
+ "category":1,
+ "name":"http-detect-range-support",
+ "value":"0"
+ },
+ {
+ "category":1,
+ "name":"fflags",
+ "value":"fastseek"
+ },
+ {
+ "category":2,
+ "name":"skip_loop_filter",
+ "value":"48"
+ },
+ {
+ "category":4,
+ "name":"reconnect",
+ "value":"1"
+ },
+ {
+ "category":4,
+ "name":"max-buffer-size",
+ "value":"15728640"
+ },
+ {
+ "category":4,
+ "name":"enable-accurate-seek",
+ "value":"0"
+ },
+ {
+ "category":4,
+ "name":"mediacodec",
+ "value":"1"
+ },
+ {
+ "category":4,
+ "name":"mediacodec-auto-rotate",
+ "value":"1"
+ },
+ {
+ "category":4,
+ "name":"mediacodec-handle-resolution-change",
+ "value":"1"
+ },
+ {
+ "category":4,
+ "name":"mediacodec-hevc",
+ "value":"1"
+ },
+ {
+ "category":1,
+ "name":"dns_cache_timeout",
+ "value":"600000000"
+ }
+ ]
+ }
+ ],
+ "rules":[
+ {
+ "hosts":[
+ "raw.githubusercontent.com",
+ "googlevideo.com",
+ "cdn.v82u1l.com",
+ "cdn.iz8qkg.com",
+ "cdn.kin6c1.com",
+ "c.biggggg.com",
+ "c.olddddd.com",
+ "haiwaikan.com",
+ "www.histar.tv",
+ "youtube.com",
+ "uhibo.com",
+ ".*boku.*",
+ ".*nivod.*",
+ ".*ulivetv.*",
+ "wogg.link",
+ "wogg.xyz"
+ ],
+ "name":"proxy"
+ },
+ {
+ "hosts":[
+ "magnet"
+ ],
+ "name":"cl",
+ "regex":[
+ "最新",
+ "直播",
+ "更新"
+ ]
+ },
+ {
+ "hosts":[
+ "haiwaikan"
+ ],
+ "name":"海外看",
+ "regex":[
+ "10.0099",
+ "10.3333",
+ "16.0599",
+ "8.1748",
+ "12.33",
+ "10.85"
+ ]
+ },
+ {
+ "hosts":[
+ "suonizy"
+ ],
+ "name":"索尼",
+ "regex":[
+ "15.1666",
+ "15.2666"
+ ]
+ },
+ {
+ "hosts":[
+ "bfzy",
+ "bfbfvip"
+ ],
+ "name":"暴風",
+ "regex":[
+ "#EXTINF.*?\\s+.*?adjump.*?\\.ts\\s+"
+ ]
+ },
+ {
+ "hosts":[
+ "aws.ulivetv.net"
+ ],
+ "name":"星星",
+ "regex":[
+ "#EXT-X-DISCONTINUITY\\r*\\n*#EXTINF:8,[\\s\\S]*?#EXT-X-DISCONTINUITY"
+ ]
+ },
+ {
+ "hosts":[
+ "vip.lz",
+ "hd.lz",
+ "v.cdnlz"
+ ],
+ "name":"量子",
+ "regex":[
+ "18.5333"
+ ]
+ },
+ {
+ "hosts":[
+ "vip.ffzy",
+ "hd.ffzy"
+ ],
+ "name":"非凡",
+ "regex":[
+ "25.1999",
+ "25.0666",
+ "25.08",
+ "20.52"
+ ]
+ },
+ {
+ "hosts":[
+ "huoshan.com"
+ ],
+ "name":"火山嗅探",
+ "regex":[
+ "item_id="
+ ]
+ },
+ {
+ "hosts":[
+ "douyin.com"
+ ],
+ "name":"抖音嗅探",
+ "regex":[
+ "is_play_url="
+ ]
+ },
+ {
+ "hosts":[
+ "api.52wyb.com"
+ ],
+ "name":"七新嗅探",
+ "regex":[
+ "m3u8?pt=m3u8"
+ ]
+ },
+ {
+ "hosts":[
+ "10086.cn"
+ ],
+ "name":"czzy",
+ "regex":[
+ "/storageWeb/servlet/downloadServlet"
+ ]
+ },
+ {
+ "exclude":[
+ ".m3u8"
+ ],
+ "hosts":[
+ "bytetos.com",
+ "byteimg.com",
+ "bytednsdoc.com",
+ "pstatp.com"
+ ],
+ "name":"bdys",
+ "regex":[
+ "/tos-cn"
+ ]
+ },
+ {
+ "exclude":[
+ ".m3u8"
+ ],
+ "hosts":[
+ "bdys10.com"
+ ],
+ "name":"bdys10",
+ "regex":[
+ "/obj/"
+ ]
+ }
+ ],
+ "ads":[
+ "mimg.0c1q0l.cn",
+ "www.googletagmanager.com",
+ "www.google-analytics.com",
+ "mc.usihnbcq.cn",
+ "mg.g1mm3d.cn",
+ "mscs.svaeuzh.cn",
+ "cnzz.hhttm.top",
+ "tp.vinuxhome.com",
+ "cnzz.mmstat.com",
+ "www.baihuillq.com",
+ "s23.cnzz.com",
+ "z3.cnzz.com",
+ "c.cnzz.com",
+ "stj.v1vo.top",
+ "z12.cnzz.com",
+ "img.mosflower.cn",
+ "tips.gamevvip.com",
+ "ehwe.yhdtns.com",
+ "xdn.cqqc3.com",
+ "www.jixunkyy.cn",
+ "sp.chemacid.cn",
+ "hm.baidu.com",
+ "s9.cnzz.com",
+ "z6.cnzz.com",
+ "um.cavuc.com",
+ "mav.mavuz.com",
+ "wofwk.aoidf3.com",
+ "z5.cnzz.com",
+ "xc.hubeijieshikj.cn",
+ "tj.tianwenhu.com",
+ "xg.gars57.cn",
+ "k.jinxiuzhilv.com",
+ "cdn.bootcss.com",
+ "ppl.xunzhuo123.com",
+ "xomk.jiangjunmh.top",
+ "img.xunzhuo123.com",
+ "z1.cnzz.com",
+ "s13.cnzz.com",
+ "xg.huataisangao.cn",
+ "z7.cnzz.com",
+ "xg.huataisangao.cn",
+ "z2.cnzz.com",
+ "s96.cnzz.com",
+ "q11.cnzz.com",
+ "thy.dacedsfa.cn",
+ "xg.whsbpw.cn",
+ "s19.cnzz.com",
+ "z8.cnzz.com",
+ "s4.cnzz.com",
+ "f5w.as12df.top",
+ "ae01.alicdn.com",
+ "www.92424.cn",
+ "k.wudejia.com",
+ "vivovip.mmszxc.top",
+ "qiu.xixiqiu.com",
+ "cdnjs.hnfenxun.com",
+ "cms.qdwght.com",
+ "wan.51img1.com",
+ "iqiyi.hbuioo.com",
+ "vip.ffzyad.com",
+ "https://lf1-cdn-tos.bytegoofy.com/obj/tos-cn-i-dy/455ccf9e8ae744378118e4bd289288dd"
+ ],
+ "drives":[
+ {
+ "name":"阿里",
+ "password":"43886374072944a2bcc55a0ed129ab48",
+ "type":"alidrive"
+ }
+ ],
+ "cost_time":477.9
+ },
+ "home": {"class":[{"type_id":"1","type_name":"电影"},{"type_id":"2","type_name":"连续剧"},{"type_id":"3","type_name":"综艺"},{"type_id":"4","type_name":"动漫"},{"type_id":"26","type_name":"短剧"}],"filters":{"1":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"1"},{"n":"动作片","v":"5"},{"n":"喜剧片","v":"6"},{"n":"爱情片","v":"7"},{"n":"科幻片","v":"8"},{"n":"恐怖片","v":"9"},{"n":"剧情片","v":"10"},{"n":"战争片","v":"11"},{"n":"惊悚片","v":"16"},{"n":"奇幻片","v":"17"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"香港","v":"香港"},{"n":"台湾","v":"台湾"},{"n":"美国","v":"美国"},{"n":"韩国","v":"韩国"},{"n":"日本","v":"日本"},{"n":"泰国","v":"泰国"},{"n":"新加坡","v":"新加坡"},{"n":"马来西亚","v":"马来西亚"},{"n":"印度","v":"印度"},{"n":"英国","v":"英国"},{"n":"法国","v":"法国"},{"n":"加拿大","v":"加拿大"},{"n":"西班牙","v":"西班牙"},{"n":"俄罗斯","v":"俄罗斯"},{"n":"其它","v":"其它"}]},{"key":"year","name":"年代","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"},{"n":"1999","v":"1999"},{"n":"1998","v":"1998"},{"n":"1997","v":"1997"},{"n":"1996","v":"1996"},{"n":"1995","v":"1995"},{"n":"1994","v":"1994"},{"n":"1993","v":"1993"},{"n":"1992","v":"1992"},{"n":"1991","v":"1991"},{"n":"1990","v":"1990"},{"n":"1989","v":"1989"},{"n":"1988","v":"1988"},{"n":"1987","v":"1987"},{"n":"1986","v":"1986"},{"n":"1985","v":"1985"},{"n":"1984","v":"1984"},{"n":"1983","v":"1983"},{"n":"1982","v":"1982"},{"n":"1981","v":"1981"},{"n":"1980","v":"1980"},{"n":"1979","v":"1979"},{"n":"1978","v":"1978"},{"n":"1977","v":"1977"},{"n":"1976","v":"1976"},{"n":"1975","v":"1975"},{"n":"1974","v":"1974"},{"n":"1973","v":"1973"},{"n":"1972","v":"1972"},{"n":"1971","v":"1971"},{"n":"1970","v":"1970"},{"n":"1969","v":"1969"},{"n":"1968","v":"1968"},{"n":"1967","v":"1967"},{"n":"1966","v":"1966"},{"n":"1965","v":"1965"},{"n":"1964","v":"1964"},{"n":"1963","v":"1963"},{"n":"1962","v":"1962"},{"n":"1961","v":"1961"},{"n":"1960","v":"1960"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],"2":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"2"},{"n":"国产剧","v":"12"},{"n":"港台泰","v":"13"},{"n":"日韩剧","v":"14"},{"n":"欧美剧","v":"15"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"香港","v":"香港"},{"n":"台湾","v":"台湾"},{"n":"美国","v":"美国"},{"n":"韩国","v":"韩国"},{"n":"日本","v":"日本"},{"n":"泰国","v":"泰国"},{"n":"新加坡","v":"新加坡"},{"n":"马来西亚","v":"马来西亚"},{"n":"印度","v":"印度"},{"n":"英国","v":"英国"},{"n":"法国","v":"法国"},{"n":"加拿大","v":"加拿大"},{"n":"西班牙","v":"西班牙"},{"n":"俄罗斯","v":"俄罗斯"},{"n":"其它","v":"其它"}]},{"key":"year","name":"年代","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"},{"n":"1999","v":"1999"},{"n":"1998","v":"1998"},{"n":"1997","v":"1997"},{"n":"1996","v":"1996"},{"n":"1995","v":"1995"},{"n":"1994","v":"1994"},{"n":"1993","v":"1993"},{"n":"1992","v":"1992"},{"n":"1991","v":"1991"},{"n":"1990","v":"1990"},{"n":"1989","v":"1989"},{"n":"1988","v":"1988"},{"n":"1987","v":"1987"},{"n":"1986","v":"1986"},{"n":"1985","v":"1985"},{"n":"1984","v":"1984"},{"n":"1983","v":"1983"},{"n":"1982","v":"1982"},{"n":"1981","v":"1981"},{"n":"1980","v":"1980"},{"n":"1979","v":"1979"},{"n":"1978","v":"1978"},{"n":"1977","v":"1977"},{"n":"1976","v":"1976"},{"n":"1975","v":"1975"},{"n":"1974","v":"1974"},{"n":"1973","v":"1973"},{"n":"1972","v":"1972"},{"n":"1971","v":"1971"},{"n":"1970","v":"1970"},{"n":"1969","v":"1969"},{"n":"1968","v":"1968"},{"n":"1967","v":"1967"},{"n":"1966","v":"1966"},{"n":"1965","v":"1965"},{"n":"1964","v":"1964"},{"n":"1963","v":"1963"},{"n":"1962","v":"1962"},{"n":"1961","v":"1961"},{"n":"1960","v":"1960"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],"3":[{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"香港","v":"香港"},{"n":"台湾","v":"台湾"},{"n":"美国","v":"美国"},{"n":"韩国","v":"韩国"},{"n":"日本","v":"日本"},{"n":"泰国","v":"泰国"},{"n":"新加坡","v":"新加坡"},{"n":"马来西亚","v":"马来西亚"},{"n":"印度","v":"印度"},{"n":"英国","v":"英国"},{"n":"法国","v":"法国"},{"n":"加拿大","v":"加拿大"},{"n":"西班牙","v":"西班牙"},{"n":"俄罗斯","v":"俄罗斯"},{"n":"其它","v":"其它"}]},{"key":"year","name":"年代","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"},{"n":"1999","v":"1999"},{"n":"1998","v":"1998"},{"n":"1997","v":"1997"},{"n":"1996","v":"1996"},{"n":"1995","v":"1995"},{"n":"1994","v":"1994"},{"n":"1993","v":"1993"},{"n":"1992","v":"1992"},{"n":"1991","v":"1991"},{"n":"1990","v":"1990"},{"n":"1989","v":"1989"},{"n":"1988","v":"1988"},{"n":"1987","v":"1987"},{"n":"1986","v":"1986"},{"n":"1985","v":"1985"},{"n":"1984","v":"1984"},{"n":"1983","v":"1983"},{"n":"1982","v":"1982"},{"n":"1981","v":"1981"},{"n":"1980","v":"1980"},{"n":"1979","v":"1979"},{"n":"1978","v":"1978"},{"n":"1977","v":"1977"},{"n":"1976","v":"1976"},{"n":"1975","v":"1975"},{"n":"1974","v":"1974"},{"n":"1973","v":"1973"},{"n":"1972","v":"1972"},{"n":"1971","v":"1971"},{"n":"1970","v":"1970"},{"n":"1969","v":"1969"},{"n":"1968","v":"1968"},{"n":"1967","v":"1967"},{"n":"1966","v":"1966"},{"n":"1965","v":"1965"},{"n":"1964","v":"1964"},{"n":"1963","v":"1963"},{"n":"1962","v":"1962"},{"n":"1961","v":"1961"},{"n":"1960","v":"1960"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],"4":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"4"},{"n":"动漫剧","v":"18"},{"n":"动漫片","v":"19"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"香港","v":"香港"},{"n":"台湾","v":"台湾"},{"n":"美国","v":"美国"},{"n":"韩国","v":"韩国"},{"n":"日本","v":"日本"},{"n":"泰国","v":"泰国"},{"n":"新加坡","v":"新加坡"},{"n":"马来西亚","v":"马来西亚"},{"n":"印度","v":"印度"},{"n":"英国","v":"英国"},{"n":"法国","v":"法国"},{"n":"加拿大","v":"加拿大"},{"n":"西班牙","v":"西班牙"},{"n":"俄罗斯","v":"俄罗斯"},{"n":"其它","v":"其它"}]},{"key":"year","name":"年代","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"},{"n":"1999","v":"1999"},{"n":"1998","v":"1998"},{"n":"1997","v":"1997"},{"n":"1996","v":"1996"},{"n":"1995","v":"1995"},{"n":"1994","v":"1994"},{"n":"1993","v":"1993"},{"n":"1992","v":"1992"},{"n":"1991","v":"1991"},{"n":"1990","v":"1990"},{"n":"1989","v":"1989"},{"n":"1988","v":"1988"},{"n":"1987","v":"1987"},{"n":"1986","v":"1986"},{"n":"1985","v":"1985"},{"n":"1984","v":"1984"},{"n":"1983","v":"1983"},{"n":"1982","v":"1982"},{"n":"1981","v":"1981"},{"n":"1980","v":"1980"},{"n":"1979","v":"1979"},{"n":"1978","v":"1978"},{"n":"1977","v":"1977"},{"n":"1976","v":"1976"},{"n":"1975","v":"1975"},{"n":"1974","v":"1974"},{"n":"1973","v":"1973"},{"n":"1972","v":"1972"},{"n":"1971","v":"1971"},{"n":"1970","v":"1970"},{"n":"1969","v":"1969"},{"n":"1968","v":"1968"},{"n":"1967","v":"1967"},{"n":"1966","v":"1966"},{"n":"1965","v":"1965"},{"n":"1964","v":"1964"},{"n":"1963","v":"1963"},{"n":"1962","v":"1962"},{"n":"1961","v":"1961"},{"n":"1960","v":"1960"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],"26":[{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"香港","v":"香港"},{"n":"台湾","v":"台湾"},{"n":"美国","v":"美国"},{"n":"韩国","v":"韩国"},{"n":"日本","v":"日本"},{"n":"泰国","v":"泰国"},{"n":"新加坡","v":"新加坡"},{"n":"马来西亚","v":"马来西亚"},{"n":"印度","v":"印度"},{"n":"英国","v":"英国"},{"n":"法国","v":"法国"},{"n":"加拿大","v":"加拿大"},{"n":"西班牙","v":"西班牙"},{"n":"俄罗斯","v":"俄罗斯"},{"n":"其它","v":"其它"}]},{"key":"year","name":"年代","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"},{"n":"1999","v":"1999"},{"n":"1998","v":"1998"},{"n":"1997","v":"1997"},{"n":"1996","v":"1996"},{"n":"1995","v":"1995"},{"n":"1994","v":"1994"},{"n":"1993","v":"1993"},{"n":"1992","v":"1992"},{"n":"1991","v":"1991"},{"n":"1990","v":"1990"},{"n":"1989","v":"1989"},{"n":"1988","v":"1988"},{"n":"1987","v":"1987"},{"n":"1986","v":"1986"},{"n":"1985","v":"1985"},{"n":"1984","v":"1984"},{"n":"1983","v":"1983"},{"n":"1982","v":"1982"},{"n":"1981","v":"1981"},{"n":"1980","v":"1980"},{"n":"1979","v":"1979"},{"n":"1978","v":"1978"},{"n":"1977","v":"1977"},{"n":"1976","v":"1976"},{"n":"1975","v":"1975"},{"n":"1974","v":"1974"},{"n":"1973","v":"1973"},{"n":"1972","v":"1972"},{"n":"1971","v":"1971"},{"n":"1970","v":"1970"},{"n":"1969","v":"1969"},{"n":"1968","v":"1968"},{"n":"1967","v":"1967"},{"n":"1966","v":"1966"},{"n":"1965","v":"1965"},{"n":"1964","v":"1964"},{"n":"1963","v":"1963"},{"n":"1962","v":"1962"},{"n":"1961","v":"1961"},{"n":"1960","v":"1960"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}]}},
+ "homeVod": {"list":[{"vod_name":"黑白诀","vod_pic":"https://pic1.58cdn.com.cn/nowater/im/n_v328855398939b42e690e1a9144d0103e4.jpeg","vod_remarks":"更新至20集","vod_content":"","vod_id":"https://www.wwgz.cn/vod-detail-id-51694.html"},{"vod_name":"珠帘玉幕","vod_pic":"http://m.ykimg.com/058400006723580D13EB661331FD30E6?x-oss-process=image/resize,w_312/interlace,1/quality,Q_80","vod_remarks":"更新至14集","vod_content":"","vod_id":"https://www.wwgz.cn/vod-detail-id-51808.html"},{"vod_name":"探晴安","vod_pic":"https://vcover-vt-pic.puui.qpic.cn/vcover_vt_pic/0/mzc00200nhs9g5o1729298236221/260","vod_remarks":"更新至19集","vod_content":"","vod_id":"https://www.wwgz.cn/vod-detail-id-51700.html"},{"vod_name":"龙骨遗冢","vod_pic":"https://vcover-vt-pic.puui.qpic.cn/vcover_vt_pic/0/mzc002005vz2e4v1727706444682/260","vod_remarks":"","vod_content":"","vod_id":"https://www.wwgz.cn/vod-detail-id-51848.html"},{"vod_name":"好团圆","vod_pic":"https://puui.qpic.cn/vcover_vt_pic/0/mzc00200kot7j0l1695194882212/260","vod_remarks":"更新至23集","vod_content":"","vod_id":"https://www.wwgz.cn/vod-detail-id-51718.html"},{"vod_name":"西北岁月","vod_pic":"https://vcover-vt-pic.puui.qpic.cn/vcover_vt_pic/0/mzc002008c8m73o1730794226058/260","vod_remarks":"更新至02集","vod_content":"","vod_id":"https://www.wwgz.cn/vod-detail-id-51846.html"},{"vod_name":"小巷人家","vod_pic":"https://vcover-vt-pic.puui.qpic.cn/vcover_vt_pic/0/sdp001000atbk1t1730070334/260","vod_remarks":"更新至17集","vod_content":"","vod_id":"https://www.wwgz.cn/vod-detail-id-51739.html"},{"vod_name":"永夜星河","vod_pic":"https://vcover-vt-pic.puui.qpic.cn/vcover_vt_pic/0/mzc002007sqbpce1719196138249/260","vod_remarks":"更新至12集","vod_content":"","vod_id":"https://www.wwgz.cn/vod-detail-id-51809.html"},{"vod_name":"加菲猫家族","vod_pic":"https://pic1.58cdn.com.cn/nowater/im/n_v35d466e73a7214d4ba162a5bfbf8f1fd7.jpeg","vod_remarks":"","vod_content":"","vod_id":"https://www.wwgz.cn/vod-detail-id-51843.html"},{"vod_name":"黑白有界","vod_pic":"https://pic1.58cdn.com.cn/nowater/im/n_v3ae07cf14507e41df8a1efedadfb08dd5.jpeg","vod_remarks":"","vod_content":"","vod_id":"https://www.wwgz.cn/vod-detail-id-51842.html"},{"vod_name":"大梦归离","vod_pic":"https://pic1.58cdn.com.cn/nowater/im/n_v3f47b89fb0a1a4e27bf65a0b9c8d8902a.jpeg","vod_remarks":"更新至17集","vod_content":"","vod_id":"https://www.wwgz.cn/vod-detail-id-51717.html"},{"vod_name":"你的谎言也动听","vod_pic":"https://pic1.58cdn.com.cn/nowater/im/n_v3031f14453a114a55846eaf39ccc5824b.jpeg","vod_remarks":"36集全","vod_content":"","vod_id":"https://www.wwgz.cn/vod-detail-id-51621.html"},{"vod_name":"黑白诀","vod_pic":"","vod_remarks":"更新至20集","vod_content":"","vod_id":"https://www.wwgz.cn/vod-detail-id-51694.html"},{"vod_name":"珠帘玉幕","vod_pic":"","vod_remarks":"更新至14集","vod_content":"","vod_id":"https://www.wwgz.cn/vod-detail-id-51808.html"},{"vod_name":"探晴安","vod_pic":"","vod_remarks":"更新至19集","vod_content":"","vod_id":"https://www.wwgz.cn/vod-detail-id-51700.html"},{"vod_name":"好团圆","vod_pic":"","vod_remarks":"更新至23集","vod_content":"","vod_id":"https://www.wwgz.cn/vod-detail-id-51718.html"},{"vod_name":"西北岁月","vod_pic":"","vod_remarks":"更新至02集","vod_content":"","vod_id":"https://www.wwgz.cn/vod-detail-id-51846.html"},{"vod_name":"小巷人家","vod_pic":"","vod_remarks":"更新至17集","vod_content":"","vod_id":"https://www.wwgz.cn/vod-detail-id-51739.html"},{"vod_name":"永夜星河","vod_pic":"","vod_remarks":"更新至12集","vod_content":"","vod_id":"https://www.wwgz.cn/vod-detail-id-51809.html"},{"vod_name":"大梦归离","vod_pic":"","vod_remarks":"更新至17集","vod_content":"","vod_id":"https://www.wwgz.cn/vod-detail-id-51717.html"},{"vod_name":"你的谎言也动听","vod_pic":"","vod_remarks":"36集全","vod_content":"","vod_id":"https://www.wwgz.cn/vod-detail-id-51621.html"},{"vod_name":"巾帼枭雄之悬崖","vod_pic":"","vod_remarks":"25集全","vod_content":"","vod_id":"https://www.wwgz.cn/vod-detail-id-51671.html"},{"vod_name":"双重任务","vod_pic":"","vod_remarks":"25集全","vod_content":"","vod_id":"https://www.wwgz.cn/vod-detail-id-51696.html"},{"vod_name":"春花焰","vod_pic":"","vod_remarks":"32集全","vod_content":"","vod_id":"https://www.wwgz.cn/vod-detail-id-51552.html"},{"vod_name":"龙骨遗冢","vod_pic":"","vod_remarks":"","vod_content":"","vod_id":"https://www.wwgz.cn/vod-detail-id-51848.html"},{"vod_name":"心动的信号第七季","vod_pic":"","vod_remarks":"更新至20241105","vod_content":"","vod_id":"https://www.wwgz.cn/vod-detail-id-50951.html"},{"vod_name":"丹道至尊","vod_pic":"","vod_remarks":"更新至第92集","vod_content":"","vod_id":"https://www.wwgz.cn/vod-detail-id-46811.html"}]},
+ "category": {"page":1,"pagecount":999,"limit":20,"total":999,"list":[{"vod_id":"https://www.wwgz.cn/vod-detail-id-51598.html","vod_name":"出租大叔","vod_pic":"https://img.lzzyimg.com/upload/vod/20241017-1/36e6ffbcc023a18fa7cbb28700bf3d27.jpg","vod_remarks":"更新至第16集"},{"vod_id":"https://www.wwgz.cn/vod-detail-id-29008.html","vod_name":"爱·回家之开心速递","vod_pic":"https://img.liangzipic.com/upload/vod/20220608-1/3bba6648dbdfe6f442e0492730ec908b.jpg","vod_remarks":"更新至第2415集"},{"vod_id":"https://www.wwgz.cn/vod-detail-id-51841.html","vod_name":"酒醉罗曼史","vod_pic":"https://img.lzzyimg.com/upload/vod/20241104-1/8a931560d638c4d6cd535a132b6804c5.jpg","vod_remarks":"更新至第02集"},{"vod_id":"https://www.wwgz.cn/vod-detail-id-51451.html","vod_name":"结婚吧,笨蛋啊!","vod_pic":"https://img.lzzyimg.com/upload/vod/20241008-1/817bad29b19d2688ad58d225380d82bb.jpg","vod_remarks":"更新至第22集"},{"vod_id":"https://www.wwgz.cn/vod-detail-id-43316.html","vod_name":"丑闻[韩剧]","vod_pic":"https://img.lzzyimg.com/upload/vod/20240618-1/dd1b04ba4162b5c7a373242d57839ed4.jpg","vod_remarks":"更新至第84集"},{"vod_id":"https://www.wwgz.cn/vod-detail-id-39722.html","vod_name":"勇敢无双龙秀晶","vod_pic":"https://img.lzzyimg.com/upload/vod/20240507-1/571404fc7aacea62f65f384576760f4f.jpg","vod_remarks":"更新至第116集"},{"vod_id":"https://www.wwgz.cn/vod-detail-id-51104.html","vod_name":"我的天才女友第四季","vod_pic":"https://img.lzzyimg.com/upload/vod/20240911-1/8ba2ee8e8cc05c702c5e3ae86b068de3.jpg","vod_remarks":"更新至第09集"},{"vod_id":"https://www.wwgz.cn/vod-detail-id-51428.html","vod_name":"叔不知","vod_pic":"https://img.lzzyimg.com/upload/vod/20241005-1/b70a1db8bf35c868ac11ca916da00789.jpg","vod_remarks":"更新至第12集"},{"vod_id":"https://www.wwgz.cn/vod-detail-id-51847.html","vod_name":"极道青年","vod_pic":"https://img.lzzyimg.com/upload/vod/20241105-1/f283c807b2ac3439bb1b570a5370af2d.jpg","vod_remarks":"更新至第01集"},{"vod_id":"https://www.wwgz.cn/vod-detail-id-51682.html","vod_name":"民王R","vod_pic":"https://img.lzzyimg.com/upload/vod/20241023-1/78589c0f17c127b80ba3ad6ac5151e86.jpg","vod_remarks":"更新至第03集"},{"vod_id":"https://www.wwgz.cn/vod-detail-id-51564.html","vod_name":"怪物2024","vod_pic":"https://img.lzzyimg.com/upload/vod/20241015-1/c10886eca3fbc906d482f6d6f2ad5d21.jpg","vod_remarks":"更新至第04集"},{"vod_id":"https://www.wwgz.cn/vod-detail-id-51548.html","vod_name":"OCTO~感情搜查官心野朱梨~第二季","vod_pic":"https://img.lzzyimg.com/upload/vod/20241014-1/c917ecd72ee1f4a6f5df91bbf0e4dc3f.jpg","vod_remarks":"更新至第03集"},{"vod_id":"https://www.wwgz.cn/vod-detail-id-51464.html","vod_name":"被未来的自己愚弄!?","vod_pic":"https://img.lzzyimg.com/upload/vod/20241008-1/1f0f67b527bf436fc5bf6d4e9ebfade8.jpg","vod_remarks":"更新至第17集"},{"vod_id":"https://www.wwgz.cn/vod-detail-id-51463.html","vod_name":"解谎侦探少女","vod_pic":"https://img.lzzyimg.com/upload/vod/20241008-1/fd1d9f24693d61e4e169841e49ee6fe0.jpg","vod_remarks":"更新至第05集"},{"vod_id":"https://www.wwgz.cn/vod-detail-id-51471.html","vod_name":"新版露在火中烧","vod_pic":"https://img.lzzyimg.com/upload/vod/20241009-1/5e878911a9de89db0cfe53b35e6dfd87.jpg","vod_remarks":"更新至第08集"},{"vod_id":"https://www.wwgz.cn/vod-detail-id-51718.html","vod_name":"好团圆","vod_pic":"https://puui.qpic.cn/vcover_vt_pic/0/mzc00200kot7j0l1695194882212/260","vod_remarks":"更新至23集"},{"vod_id":"https://www.wwgz.cn/vod-detail-id-51846.html","vod_name":"西北岁月","vod_pic":"https://vcover-vt-pic.puui.qpic.cn/vcover_vt_pic/0/mzc002008c8m73o1730794226058/260","vod_remarks":"更新至02集"},{"vod_id":"https://www.wwgz.cn/vod-detail-id-51739.html","vod_name":"小巷人家","vod_pic":"https://vcover-vt-pic.puui.qpic.cn/vcover_vt_pic/0/sdp001000atbk1t1730070334/260","vod_remarks":"更新至17集"},{"vod_id":"https://www.wwgz.cn/vod-detail-id-51809.html","vod_name":"永夜星河","vod_pic":"https://vcover-vt-pic.puui.qpic.cn/vcover_vt_pic/0/mzc002007sqbpce1719196138249/260","vod_remarks":"更新至12集"},{"vod_id":"https://www.wwgz.cn/vod-detail-id-51808.html","vod_name":"珠帘玉幕","vod_pic":"http://m.ykimg.com/058400006723580D13EB661331FD30E6?x-oss-process=image/resize,w_312/interlace,1/quality,Q_80","vod_remarks":"更新至12集"},{"vod_id":"https://www.wwgz.cn/vod-detail-id-51694.html","vod_name":"黑白诀","vod_pic":"https://pic1.58cdn.com.cn/nowater/im/n_v328855398939b42e690e1a9144d0103e4.jpeg","vod_remarks":"更新至19集"},{"vod_id":"https://www.wwgz.cn/vod-detail-id-51700.html","vod_name":"探晴安","vod_pic":"https://vcover-vt-pic.puui.qpic.cn/vcover_vt_pic/0/mzc00200nhs9g5o1729298236221/260","vod_remarks":"更新至18集"},{"vod_id":"https://www.wwgz.cn/vod-detail-id-51840.html","vod_name":"烈焰国度第三季","vod_pic":"https://img.lzzyimg.com/upload/vod/20241104-1/930ee5cd19e62a4f8af4eabaa6bdfaa8.jpg","vod_remarks":"更新至第01集"},{"vod_id":"https://www.wwgz.cn/vod-detail-id-51839.html","vod_name":"新殊途同归第二季","vod_pic":"https://img.lzzyimg.com/upload/vod/20241105-1/58cb4e74cf811bb8aff9e8de9d04b244.jpg","vod_remarks":"更新至第01集"},{"vod_id":"https://www.wwgz.cn/vod-detail-id-51812.html","vod_name":"反恐特警组第八季","vod_pic":"https://img.lzzyimg.com/upload/vod/20241101-1/402a230a3e406737e86b8f4be3b14fe7.jpg","vod_remarks":"更新至第02集"},{"vod_id":"https://www.wwgz.cn/vod-detail-id-51773.html","vod_name":"某人某地第三季","vod_pic":"https://img.lzzyimg.com/upload/vod/20241028-1/f701af724a809cc9a36741d2bc65b76e.jpg","vod_remarks":"更新至第02集"},{"vod_id":"https://www.wwgz.cn/vod-detail-id-51713.html","vod_name":"海军罪案调查处第二十二季","vod_pic":"https://img.lzzyimg.com/upload/vod/20241025-1/07e11eb2b3f4c45f8c5bb3bf1f6712c3.jpg","vod_remarks":"已完结"},{"vod_id":"https://www.wwgz.cn/vod-detail-id-51450.html","vod_name":"系列大片","vod_pic":"https://img.lzzyimg.com/upload/vod/20241007-1/b5a33b435b0c282c01e1efae8e2a0438.jpg","vod_remarks":"更新至第05集"},{"vod_id":"https://www.wwgz.cn/vod-detail-id-51299.html","vod_name":"芝加哥急救第十季","vod_pic":"https://img.lzzyimg.com/upload/vod/20240927-1/00556ea2ac6ce26dab4f4c6491228b8e.jpg","vod_remarks":"更新至第05集"},{"vod_id":"https://www.wwgz.cn/vod-detail-id-51298.html","vod_name":"芝加哥警署第十二季","vod_pic":"https://img.lzzyimg.com/upload/vod/20240927-1/75b75ec0987b444f72288118aec14500.jpg","vod_remarks":"更新至第05集"}]},
+ "detail": {"list":[
+ {"vod_id":"https://www.wwgz.cn/vod-detail-id-51598.html","vod_name":"出租大叔","vod_pic":"https://img.lzzyimg.com/upload/vod/20241017-1/36e6ffbcc023a18fa7cbb28700bf3d27.jpg","type_name":"港台泰","vod_year":"2024","vod_area":"","vod_remarks":"更新日期: 2024-11-06 10:52","vod_actor":"许博文 陆骏光 陈子丰 张达伦 沈贞巧 邱颂伟","vod_director":"陈贤俊","vod_content":"简 介: 生活唔如意﹖噢﹗萬事有大叔﹗看似成熟穩重的西裝精英林木森,為人功利現實又口甜舌滑,愛耍小聰明。在車行工作多年,接觸人多,見盡不同客戶,練就一把好口才,更成為行內 Top Sales。早年離婚的森將女兒林瑪莎的撫養權讓給太太,太太跟女兒移居美國。然而好景不常,疫情過後經濟衰退,車行決定在人工高的他身上開刀,人到中年才失業,愛充大頭鬼的他一時跌下谷低,人生一團糟之際女兒從外國回來,並帶來「出租大叔」的想法﹗森從起初的不願,到渴望靠此生意翻身賺大錢,最後卻發現做「出租大叔」其實是幫助自己理清一團糟的人生,做回最真實的自己⋯⋯ 森索性找來幾個多年好友下海,一同出租,包括:有型才子陸奧、住家男平治、開Cafe的Ben,以及大肚腩的士司機阿田。漸漸地,一班大叔在工作上找回自己的價值,找回生活的熱誠。而林木森在解決客人的問題同時,也解決了自己的問題。其實一切,都是一個學習過程。","vod_play_from":"云播①","vod_play_url":"第01集$https://www.wwgz.cn/vod-play-id-51598-src-1-num-1.html#第02集$https://www.wwgz.cn/vod-play-id-51598-src-1-num-2.html#第03集$https://www.wwgz.cn/vod-play-id-51598-src-1-num-3.html#第04集$https://www.wwgz.cn/vod-play-id-51598-src-1-num-4.html#第05集$https://www.wwgz.cn/vod-play-id-51598-src-1-num-5.html#第06集$https://www.wwgz.cn/vod-play-id-51598-src-1-num-6.html#第07集$https://www.wwgz.cn/vod-play-id-51598-src-1-num-7.html#第08集$https://www.wwgz.cn/vod-play-id-51598-src-1-num-8.html#第09集$https://www.wwgz.cn/vod-play-id-51598-src-1-num-9.html#第10集$https://www.wwgz.cn/vod-play-id-51598-src-1-num-10.html#第11集$https://www.wwgz.cn/vod-play-id-51598-src-1-num-11.html#第12集$https://www.wwgz.cn/vod-play-id-51598-src-1-num-12.html#第13集$https://www.wwgz.cn/vod-play-id-51598-src-1-num-13.html#第14集$https://www.wwgz.cn/vod-play-id-51598-src-1-num-14.html#第15集$https://www.wwgz.cn/vod-play-id-51598-src-1-num-15.html#第16集$https://www.wwgz.cn/vod-play-id-51598-src-1-num-16.html"},
+ {"vod_id":"https://www.wwgz.cn/vod-detail-id-51694.html","vod_name":"黑白诀","vod_pic":"https://pic1.58cdn.com.cn/nowater/im/n_v328855398939b42e690e1a9144d0103e4.jpeg","type_name":"国产剧","vod_year":"2024","vod_area":"大陆","vod_remarks":"更新至20集","vod_actor":"范丞丞 邢菲 朱正廷 安悦溪","vod_director":"刘国楠","vod_content":"该剧讲述了在一个黑白颠倒的世界里,正义与邪恶、光明与黑暗之间的较量。主人公在复杂的环境中坚持自己的信念,最终找到真相的故事。","vod_play_from":"云播①","vod_play_url":"第01集$https://www.wwgz.cn/vod-play-id-51694-src-1-num-1.html#第02集$https://www.wwgz.cn/vod-play-id-51694-src-1-num-2.html#第03集$https://www.wwgz.cn/vod-play-id-51694-src-1-num-3.html"},
+ {"vod_id":"https://www.wwgz.cn/vod-detail-id-51808.html","vod_name":"珠帘玉幕","vod_pic":"http://m.ykimg.com/058400006723580D13EB661331FD30E6?x-oss-process=image/resize,w_312/interlace,1/quality,Q_80","type_name":"国产剧","vod_year":"2024","vod_area":"大陆","vod_remarks":"更新至14集","vod_actor":"赵露思 刘宇宁 唐晓天 尚新月","vod_director":"惠楷栋","vod_content":"该剧改编自谈天音的小说《昆山玉》,讲述了端王府小郡主端午因为一桩珠宝盗窃案与神机营指挥使燕子京相识,两人从互相怀疑到并肩作战,在朝堂与江湖的风云变幻中携手成长的故事。","vod_play_from":"云播①","vod_play_url":"第01集$https://www.wwgz.cn/vod-play-id-51808-src-1-num-1.html#第02集$https://www.wwgz.cn/vod-play-id-51808-src-1-num-2.html"},
+ {"vod_id":"https://www.wwgz.cn/vod-detail-id-51700.html","vod_name":"探晴安","vod_pic":"https://vcover-vt-pic.puui.qpic.cn/vcover_vt_pic/0/mzc00200nhs9g5o1729298236221/260","type_name":"国产剧","vod_year":"2024","vod_area":"大陆","vod_remarks":"更新至19集","vod_actor":"王安宇 徐娇 代斯 牛骏峰","vod_director":"刘海波","vod_content":"该剧讲述了在民国时期,一群年轻人为了探寻真相、维护正义而展开的一系列冒险故事。他们在乱世中坚持理想,用智慧和勇气守护着心中的光明。","vod_play_from":"云播①","vod_play_url":"第01集$https://www.wwgz.cn/vod-play-id-51700-src-1-num-1.html#第02集$https://www.wwgz.cn/vod-play-id-51700-src-1-num-2.html"}
+ ]},
+ "play": {"parse":0,"url":"https://v.cdnlz3.com/20241017/28077_d5cc9644/index.m3u8"},
+ "search": {"page":1,"pagecount":10,"limit":20,"total":100,"list":[{"vod_id":"https://www.wwgz.cn/vod-detail-id-46835.html","vod_name":"斗罗大陆2:绝世唐门","vod_pic":"https://pic.lzzypic.com/upload/vod/20230624-1/2734e7689124b78ca9ad7d35132ac6a8.jpg","vod_remarks":"评分:2.0","vod_content":""},{"vod_id":"https://www.wwgz.cn/vod-detail-id-47739.html","vod_name":"斗罗大陆2绝世唐门第1季·动态漫","vod_pic":"https://pic.lzzypic.com/upload/vod/20221106-1/4674d3d918203d5027ff70100c3804bf.jpg","vod_remarks":"评分:9.0","vod_content":""},{"vod_id":"https://www.wwgz.cn/vod-detail-id-47738.html","vod_name":"斗罗大陆2绝世唐门第2季·动态漫","vod_pic":"https://pic.lzzypic.com/upload/vod/20221106-1/5d900fa007f4a56e708f29605843f689.jpg","vod_remarks":"评分:1.0","vod_content":""},{"vod_id":"https://www.wwgz.cn/vod-detail-id-47737.html","vod_name":"斗罗大陆2绝世唐门第3季·动态漫","vod_pic":"https://pic.lzzypic.com/upload/vod/20221106-1/14e8670414aec665ba3af565f44f7491.jpg","vod_remarks":"评分:1.0","vod_content":""},{"vod_id":"https://www.wwgz.cn/vod-detail-id-47728.html","vod_name":"斗罗大陆3龙王传说第1季·动态漫","vod_pic":"https://pic.lzzypic.com/upload/vod/20221120-1/6a55b5ec170b6b45534bf88fd44c0171.jpg","vod_remarks":"评分:2.0","vod_content":""},{"vod_id":"https://www.wwgz.cn/vod-detail-id-47727.html","vod_name":"斗罗大陆3龙王传说第2季·动态漫","vod_pic":"https://pic.lzzypic.com/upload/vod/20221120-1/6ea8f6dd434f45f4e002037c37085fe9.jpg","vod_remarks":"评分:3.0","vod_content":""},{"vod_id":"https://www.wwgz.cn/vod-detail-id-47687.html","vod_name":"斗罗大陆2绝世唐门第4季·动态漫","vod_pic":"https://pic.lzzypic.com/upload/vod/20221106-1/a69da5f627a363f54947d754bfb42bbc.jpg","vod_remarks":"评分:4.0","vod_content":""},{"vod_id":"https://www.wwgz.cn/vod-detail-id-47586.html","vod_name":"斗罗大陆外传神界传说 动态漫画","vod_pic":"https://pic.lzzypic.com/upload/vod/20230320-1/ada8b410331b1f2d53cbc42f4f2695f5.jpg","vod_remarks":"评分:5.0","vod_content":""},{"vod_id":"https://www.wwgz.cn/vod-detail-id-47585.html","vod_name":"斗罗大陆外传唐门英雄传 动态漫画","vod_pic":"https://pic.lzzypic.com/upload/vod/20230320-1/5d90a08ccad498f7db26bd1135a2cd27.jpg","vod_remarks":"评分:4.0","vod_content":""},{"vod_id":"https://www.wwgz.cn/vod-detail-id-47518.html","vod_name":"斗罗大陆","vod_pic":"https://pic.lzzypic.com/upload/vod/20220322-1/5383e6de7ffb6a10458baf67b3f99a10.jpg","vod_remarks":"评分:8.0","vod_content":""},{"vod_id":"https://www.wwgz.cn/vod-detail-id-47487.html","vod_name":"动态漫画·斗罗大陆4终极斗罗","vod_pic":"https://pic.lzzypic.com/upload/vod/20220815-1/d03a2595158619a87031e5934d4c1c77.jpg","vod_remarks":"评分:2.0","vod_content":""},{"vod_id":"https://www.wwgz.cn/vod-detail-id-47319.html","vod_name":"斗罗大陆2绝世唐门第五季","vod_pic":"https://youku.youkuphoto.com/upload/vod/20230521-1/d3c04e7b08ab266d1501df2c4d22d827.jpg","vod_remarks":"评分:3.0","vod_content":""},{"vod_id":"https://www.wwgz.cn/vod-detail-id-46936.html","vod_name":"动态漫画·斗罗大陆3龙王传说第三季","vod_pic":"https://img.lzzyimg.com/upload/vod/20231117-1/81de84a57bb37e72e96dcc51cf2fee95.jpg","vod_remarks":"评分:1.0","vod_content":""},{"vod_id":"https://www.wwgz.cn/vod-detail-id-32170.html","vod_name":"瑜伽妹斗罗","vod_pic":"https://img.liangzipic.com/upload/vod/20220916-1/b58e840113dd1c74ea5ec51fb8e34f4f.jpg","vod_remarks":"评分:9.0","vod_content":""},{"vod_id":"https://www.wwgz.cn/vod-detail-id-26541.html","vod_name":"斗罗大陆肖战版","vod_pic":"https://img.liangzipic.com/upload/vod/20220504-1/9679347b4a5f3d64e24aac210b563931.jpg","vod_remarks":"评分:1.0","vod_content":""}]}
+}
\ No newline at end of file
diff --git a/dashboard/public/mock/middlewares.js b/dashboard/public/mock/middlewares.js
new file mode 100644
index 0000000..bd11bde
--- /dev/null
+++ b/dashboard/public/mock/middlewares.js
@@ -0,0 +1,12 @@
+module.exports = (request, response, next) => {
+ if (request.method === 'POST') {
+ request.method = 'GET'
+ request.query = request.body
+ }
+
+ // 处理IE8下的文件上传
+ if ((request.headers['content-type'] || '').startsWith('multipart/form-data')) {
+ response.header('content-type', 'text/html')
+ }
+ next()
+}
diff --git a/dashboard/src/App.vue b/dashboard/src/App.vue
index a7612e1..a4644aa 100644
--- a/dashboard/src/App.vue
+++ b/dashboard/src/App.vue
@@ -1,92 +1,47 @@
-
+
+
+
+
+
+
+
+
diff --git a/dashboard/src/api/README.md b/dashboard/src/api/README.md
new file mode 100644
index 0000000..77c9ad7
--- /dev/null
+++ b/dashboard/src/api/README.md
@@ -0,0 +1,227 @@
+# API 封装使用说明
+
+本项目已将所有API调用封装为统一的服务模块,便于维护和使用。
+
+## 目录结构
+
+```
+src/api/
+├── index.js # 统一入口文件
+├── config.js # API配置和常量
+├── request.js # Axios封装和拦截器
+├── modules/ # 基础API模块
+│ ├── module.js # T4模块数据接口
+│ ├── proxy.js # 模块代理接口
+│ └── parse.js # 解析接口
+├── services/ # 业务服务层
+│ ├── index.js # 服务统一入口
+│ ├── video.js # 视频相关业务逻辑
+│ └── site.js # 站点管理业务逻辑
+├── utils/ # 工具函数
+│ └── index.js # 数据处理和验证工具
+└── types/ # 数据类型定义
+ └── index.js # 类型定义和工厂函数
+```
+
+## 快速开始
+
+### 1. 导入服务
+
+```javascript
+// 导入所有服务
+import { videoService, siteService } from '@/api/services'
+
+// 或者单独导入
+import { videoService } from '@/api/services/video'
+import { siteService } from '@/api/services/site'
+```
+
+### 2. 站点管理
+
+```javascript
+// 获取所有站点
+const sites = siteService.getAllSites()
+
+// 设置当前站点
+siteService.setCurrentSite('site_key')
+
+// 获取当前站点
+const currentSite = siteService.getCurrentSite()
+
+// 添加新站点
+siteService.addSite({
+ key: 'new_site',
+ name: '新站点',
+ api: 'https://api.example.com',
+ ext: 'some_extension'
+})
+```
+
+### 3. 视频数据获取
+
+```javascript
+// 获取推荐视频
+const homeData = await videoService.getRecommendVideos('site_key', {
+ extend: 'extension_data'
+})
+
+// 获取分类视频
+const categoryData = await videoService.getCategoryVideos('site_key', {
+ t: 'category_id',
+ pg: 1,
+ extend: 'extension_data'
+})
+
+// 搜索视频
+const searchResult = await videoService.searchVideo('site_key', {
+ wd: '搜索关键词',
+ pg: 1,
+ extend: 'extension_data'
+})
+
+// 获取视频详情
+const videoDetail = await videoService.getVideoDetails('site_key', {
+ ids: 'video_id',
+ extend: 'extension_data'
+})
+
+// 获取播放地址
+const playData = await videoService.getPlayUrl('site_key', {
+ play: 'play_data',
+ extend: 'extension_data'
+})
+```
+
+### 4. 视频解析
+
+```javascript
+// 解析视频URL
+const parseResult = await videoService.parseVideoUrl('jx_key', {
+ url: 'video_url'
+})
+```
+
+## 在Vue组件中使用
+
+### 基本用法
+
+```vue
+
+
+
+ {{ video.vod_name }}
+
+
+
+
+
+```
+
+### 错误处理
+
+所有API调用都包含了错误处理,会返回统一的错误格式:
+
+```javascript
+try {
+ const result = await videoService.getRecommendVideos('site_key')
+} catch (error) {
+ // error.code - 错误代码
+ // error.message - 错误信息
+ // error.data - 额外错误数据
+ console.error('API调用失败:', error.message)
+}
+```
+
+### 缓存机制
+
+视频服务包含5分钟的缓存机制,相同的请求在5分钟内会返回缓存结果,提高性能。
+
+## 配置说明
+
+### API配置 (config.js)
+
+```javascript
+// 基础配置
+export const BASE_URL = process.env.VUE_APP_API_BASE_URL || ''
+export const TIMEOUT = 10000
+
+// API路径
+export const API_PATHS = {
+ MODULE: '/api', // T4模块接口
+ PROXY: '/proxy', // 代理接口
+ PARSE: '/parse' // 解析接口
+}
+```
+
+### 请求拦截器
+
+请求会自动添加:
+- Authorization token(如果存在)
+- Cache-Control: no-cache
+- 统一的错误处理
+
+## 迁移指南
+
+### 从旧的req方式迁移
+
+**旧方式:**
+```javascript
+import req from '@/utils/req'
+
+// 获取数据
+const response = await req.get('/home')
+const data = response.data
+```
+
+**新方式:**
+```javascript
+import { videoService, siteService } from '@/api/services'
+
+// 获取数据
+const currentSite = siteService.getCurrentSite()
+const data = await videoService.getRecommendVideos(currentSite.key, {
+ extend: currentSite.ext
+})
+```
+
+### 主要变化
+
+1. **统一的服务接口**:不再直接调用HTTP方法,而是调用语义化的业务方法
+2. **自动错误处理**:统一的错误格式和处理机制
+3. **数据格式化**:返回的数据已经过格式化处理
+4. **缓存支持**:自动缓存机制提高性能
+5. **类型安全**:完整的类型定义和验证
+
+## 注意事项
+
+1. 所有API调用都需要先设置当前站点
+2. 确保传入正确的extend参数
+3. 处理好异步操作的错误情况
+4. 合理使用缓存机制,避免频繁请求
\ No newline at end of file
diff --git a/dashboard/src/api/config.js b/dashboard/src/api/config.js
new file mode 100644
index 0000000..e6e1f37
--- /dev/null
+++ b/dashboard/src/api/config.js
@@ -0,0 +1,97 @@
+/**
+ * API配置文件
+ * 定义接口相关的配置信息和常量
+ */
+
+/**
+ * 获取API超时时间(毫秒)
+ * 从设置中读取,如果没有设置则使用默认值30秒
+ */
+export const getApiTimeout = () => {
+ try {
+ const addressSettings = JSON.parse(localStorage.getItem('addressSettings') || '{}')
+ const timeoutSeconds = addressSettings.apiTimeout || 30
+ return timeoutSeconds * 1000 // 转换为毫秒
+ } catch (error) {
+ console.warn('Failed to get API timeout from settings, using default:', error)
+ return 30000 // 默认30秒
+ }
+}
+
+/**
+ * 获取Action接口超时时间(毫秒)
+ * Action接口通常需要更长的超时时间,默认100秒
+ */
+export const getActionTimeout = () => {
+ try {
+ const addressSettings = JSON.parse(localStorage.getItem('addressSettings') || '{}')
+ const apiTimeoutSeconds = addressSettings.apiTimeout || 30
+ // Action接口超时时间为普通接口的3倍,但最少100秒
+ const actionTimeoutSeconds = Math.max(apiTimeoutSeconds * 3, 100)
+ return actionTimeoutSeconds * 1000 // 转换为毫秒
+ } catch (error) {
+ console.warn('Failed to get Action timeout from settings, using default:', error)
+ return 100000 // 默认100秒
+ }
+}
+
+// 基础配置
+export const API_CONFIG = {
+ // 基础URL配置
+ BASE_URL: import.meta.env.VITE_API_BASE_URL || 'http://localhost:5707',
+
+ // 超时配置(动态获取)
+ get TIMEOUT() {
+ return getApiTimeout()
+ },
+
+ // 请求头配置
+ HEADERS: {
+ 'Content-Type': 'application/json',
+ 'Accept': 'application/json'
+ }
+}
+
+// 接口路径常量
+export const API_PATHS = {
+ // 模块数据接口
+ MODULE: '/api',
+
+ // 代理接口
+ PROXY: '/proxy',
+
+ // 解析接口
+ PARSE: '/parse'
+}
+
+// 模块功能类型
+export const MODULE_ACTIONS = {
+ PLAY: 'play', // 播放接口
+ CATEGORY: 'category', // 分类接口
+ DETAIL: 'detail', // 详情接口
+ ACTION: 'action', // 动作接口
+ SEARCH: 'search', // 搜索接口
+ REFRESH: 'refresh', // 刷新接口
+ HOME: 'home' // 首页接口(默认)
+}
+
+// 响应状态码
+export const RESPONSE_CODES = {
+ SUCCESS: 200,
+ NOT_FOUND: 404,
+ SERVER_ERROR: 500
+}
+
+// 默认分页配置
+export const PAGINATION = {
+ DEFAULT_PAGE: 1,
+ DEFAULT_PAGE_SIZE: 20
+}
+
+export default {
+ API_CONFIG,
+ API_PATHS,
+ MODULE_ACTIONS,
+ RESPONSE_CODES,
+ PAGINATION
+}
\ No newline at end of file
diff --git a/dashboard/src/api/index.js b/dashboard/src/api/index.js
new file mode 100644
index 0000000..9a803de
--- /dev/null
+++ b/dashboard/src/api/index.js
@@ -0,0 +1,35 @@
+/**
+ * API模块统一入口
+ * 提供所有业务接口的统一导出
+ */
+
+// 基础配置和工具
+export { default as request } from './request'
+export { default as config } from './config'
+
+// 业务服务
+export { default as siteService } from './services/site'
+export { default as videoService } from './services/video'
+export { default as configService } from './services/config'
+
+// 业务接口模块
+export { default as moduleApi } from './modules/module'
+export { default as proxyApi } from './modules/proxy'
+export { default as parseApi } from './modules/parse'
+
+// 便捷导出常用接口
+export {
+ getHomeData,
+ getCategoryData,
+ getVideoDetail,
+ searchVideos,
+ refreshModule
+} from './modules/module'
+
+export {
+ proxyRequest
+} from './modules/proxy'
+
+export {
+ parseVideo
+} from './modules/parse'
\ No newline at end of file
diff --git a/dashboard/src/api/modules/module.js b/dashboard/src/api/modules/module.js
new file mode 100644
index 0000000..897a8ef
--- /dev/null
+++ b/dashboard/src/api/modules/module.js
@@ -0,0 +1,528 @@
+/**
+ * 模块数据接口 (T4接口)
+ * 封装 /api/:module 相关的所有接口调用
+ */
+
+import { get, post } from '../request'
+import { API_PATHS, MODULE_ACTIONS, PAGINATION, API_CONFIG } from '../config'
+import { processExtendParam } from '@/utils/apiUtils'
+import axios from 'axios'
+
+/**
+ * 解析headers字段,支持对象和JSON字符串格式
+ * @param {Object|string} headers - headers字段
+ * @returns {Object} 解析后的headers对象
+ */
+const parseHeaders = (headers) => {
+ if (!headers) {
+ console.log('🔍 [Headers解析] 输入为空,返回空对象')
+ return {}
+ }
+
+ console.log('🔍 [Headers解析] 输入数据:', headers, '类型:', typeof headers)
+
+ // 如果已经是对象,直接返回
+ if (typeof headers === 'object' && headers !== null) {
+ console.log('🔍 [Headers解析] 已是对象,直接返回:', headers)
+ return headers
+ }
+
+ // 如果是字符串,尝试解析为JSON
+ if (typeof headers === 'string') {
+ try {
+ const parsed = JSON.parse(headers)
+ // 确保解析结果是对象
+ const result = typeof parsed === 'object' && parsed !== null ? parsed : {}
+ console.log('🔍 [Headers解析] JSON字符串解析成功:', result)
+ return result
+ } catch (error) {
+ console.warn('🔍 [Headers解析] JSON字符串解析失败:', error, '原始数据:', headers)
+ return {}
+ }
+ }
+
+ console.log('🔍 [Headers解析] 未知类型,返回空对象')
+ return {}
+}
+
+
+
+/**
+ * 构建模块接口URL
+ * @param {string} module - 模块名称
+ * @returns {string} 完整的接口URL
+ */
+const buildModuleUrl = (module) => {
+ // 对模块名称进行URL编码以支持中文字符
+ const encodedModule = encodeURIComponent(module)
+ return `${API_PATHS.MODULE}/${encodedModule}`
+}
+
+/**
+ * 直接调用站点API
+ * @param {string} apiUrl - 站点API地址
+ * @param {object} params - 请求参数
+ * @returns {Promise} API响应
+ */
+const directApiCall = async (apiUrl, params = {}) => {
+ try {
+ const response = await axios.get(apiUrl, {
+ params,
+ timeout: API_CONFIG.TIMEOUT,
+ headers: {
+ 'Accept': 'application/json'
+ }
+ })
+
+ return response.data
+ } catch (error) {
+ console.error('直接API调用失败:', error)
+ throw error
+ }
+}
+
+/**
+ * 获取首页数据(默认接口)
+ * @param {string} module - 模块名称
+ * @param {object} options - 选项参数
+ * @param {number} options.filter - 过滤条件(1表示启用,默认启用)
+ * @param {string|object} options.extend - 接口数据扩展参数(对象类型会自动转换为JSON字符串)
+ * @param {string} options.apiUrl - 站点API地址(可选,如果提供则直接使用)
+ * @returns {Promise} 首页数据
+ */
+export const getHomeData = async (module, options = {}) => {
+ const { filter = 1, extend, apiUrl } = options
+ const params = { filter }
+
+ const processedExtend = processExtendParam(extend)
+ if (processedExtend) {
+ params.extend = processedExtend
+ }
+
+ // 如果提供了apiUrl,直接使用站点的API地址
+ if (apiUrl) {
+ return directApiCall(apiUrl, params)
+ }
+
+ // 否则使用原来的代理方式
+ return get(buildModuleUrl(module), params)
+}
+
+/**
+ * 获取分类数据
+ * @param {string} module - 模块名称
+ * @param {object} params - 分类参数
+ * @param {string} params.ac - 固定值 "category"
+ * @param {string} params.t - 分类ID
+ * @param {number} params.pg - 页码(从1开始)
+ * @param {string} params.ext - base64编码的筛选条件JSON字符串
+ * @param {string|object} params.extend - 接口数据扩展参数(对象类型会自动转换为JSON字符串)
+ * @param {string} params.apiUrl - 可选的直接API地址
+ * @returns {Promise} 分类数据
+ */
+export const getCategoryData = async (module, params) => {
+ const {
+ t: typeId,
+ pg = PAGINATION.DEFAULT_PAGE,
+ ext,
+ extend,
+ apiUrl
+ } = params
+
+ const requestParams = {
+ ac: MODULE_ACTIONS.CATEGORY,
+ t: typeId,
+ pg
+ }
+
+ if (ext) {
+ requestParams.ext = ext
+ }
+
+ const processedExtend = processExtendParam(extend)
+ if (processedExtend) {
+ requestParams.extend = processedExtend
+ }
+
+ // 如果提供了apiUrl,直接使用站点的API地址
+ if (apiUrl) {
+ return directApiCall(apiUrl, requestParams)
+ }
+
+ // 否则使用原来的代理方式
+ return get(buildModuleUrl(module), requestParams)
+}
+
+/**
+ * 获取视频详情
+ * @param {string} module - 模块名称
+ * @param {object} params - 详情参数
+ * @param {string} params.ids - 视频ID
+ * @param {string|object} params.extend - 接口数据扩展参数(对象类型会自动转换为JSON字符串)
+ * @param {string} params.apiUrl - 可选的直接API地址
+ * @returns {Promise} 视频详情数据
+ */
+export const getVideoDetail = async (module, params) => {
+ const { ids, extend, apiUrl } = params
+
+ const requestParams = {
+ ac: MODULE_ACTIONS.DETAIL,
+ ids
+ }
+
+ const processedExtend = processExtendParam(extend)
+ if (processedExtend) {
+ requestParams.extend = processedExtend
+ }
+
+ // 如果提供了apiUrl,直接使用站点的API地址
+ if (apiUrl) {
+ return directApiCall(apiUrl, requestParams)
+ }
+
+ // 否则使用原来的代理方式
+ return get(buildModuleUrl(module), requestParams)
+}
+
+/**
+ * 播放接口
+ * @param {string} module - 模块名称
+ * @param {object} params - 播放参数
+ * @param {string} params.play - 播放地址或ID
+ * @param {string} params.flag - 源标识(线路名称)
+ * @param {string|object} params.extend - 接口数据扩展参数(对象类型会自动转换为JSON字符串)
+ * @param {string} params.apiUrl - 可选的直接API地址
+ * @returns {Promise} 播放数据
+ */
+export const getPlayData = async (module, params) => {
+ const { play, flag, extend, apiUrl } = params
+
+ const requestParams = {
+ ac: MODULE_ACTIONS.PLAY,
+ play
+ }
+
+ // 添加flag参数支持
+ if (flag) {
+ requestParams.flag = flag
+ }
+
+ const processedExtend = processExtendParam(extend)
+ if (processedExtend) {
+ requestParams.extend = processedExtend
+ }
+
+ // 如果提供了apiUrl,直接使用站点的API地址
+ if (apiUrl) {
+ return directApiCall(apiUrl, requestParams)
+ }
+
+ // 否则使用原来的代理方式
+ return get(buildModuleUrl(module), requestParams)
+}
+
+/**
+ * 播放解析接口 - 专门用于选集播放解析
+ * @param {string} module - 模块名称
+ * @param {object} params - 播放参数
+ * @param {string} params.play - 播放地址或ID(选集链接)
+ * @param {string} params.flag - 源标识(线路名称)
+ * @param {string|object} params.extend - 接口数据扩展参数
+ * @param {string} params.apiUrl - 可选的直接API地址
+ * @returns {Promise} 播放解析结果
+ */
+export const parsePlayUrl = async (module, params) => {
+ try {
+ console.log('T4播放解析请求:', { module, params })
+
+ const playData = await getPlayData(module, params)
+ console.log('T4播放解析响应:', playData)
+
+ // 调试:显示原始headers数据
+ const rawHeaders = playData?.headers || playData?.header
+ if (rawHeaders) {
+ console.log('T4接口返回的原始headers:', rawHeaders, '类型:', typeof rawHeaders)
+ }
+
+ // 处理解析结果
+ const result = {
+ success: true,
+ data: playData,
+ // 解析播放类型
+ playType: 'direct', // 默认直链
+ url: '',
+ headers: {}, // 添加headers字段
+ danmaku: '', // 添加弹幕字段
+ needParse: false,
+ needSniff: false,
+ message: ''
+ }
+
+ // 检查返回数据格式
+ if (playData && typeof playData === 'object') {
+ // 检查parse和jx字段,jx:1优先级高于parse:1
+ if (playData.jx === 1) {
+ // 需要解析 - 优先级最高
+ result.playType = 'parse'
+ result.url = playData.url || playData.play_url || ''
+ result.headers = parseHeaders(playData.headers || playData.header)
+ result.danmaku = playData.danmaku || '' // 处理弹幕字段
+ result.needParse = true
+ result.qualities = []
+ result.hasMultipleQualities = false
+ result.message = '需要解析才能播放,尽情期待'
+ } else if (playData.parse === 0) {
+ // 直链播放
+ result.playType = 'direct'
+
+ // 处理URL字段 - 支持数组格式的多画质
+ const urlData = playData.url || playData.play_url || ''
+ if (Array.isArray(urlData)) {
+ // URL是数组格式,包含多画质信息
+ console.log('检测到多画质URL数组:', urlData)
+
+ // 解析画质数组:奇数索引是画质名称,偶数索引是对应链接
+ const qualities = []
+ for (let i = 0; i < urlData.length; i += 2) {
+ if (i + 1 < urlData.length) {
+ const qualityName = urlData[i]?.toString().trim()
+ const qualityUrl = urlData[i + 1]?.toString().trim()
+ if (qualityName && qualityUrl) {
+ qualities.push({
+ name: qualityName,
+ url: qualityUrl
+ })
+ }
+ }
+ }
+
+ console.log('解析出的画质列表:', qualities)
+
+ // 设置多画质数据
+ result.qualities = qualities
+ result.hasMultipleQualities = qualities.length > 1
+
+ // 默认使用第一个画质
+ if (qualities.length > 0) {
+ result.url = qualities[0].url
+ result.currentQuality = qualities[0].name
+ result.message = `多画质播放 (当前: ${qualities[0].name})`
+ } else {
+ result.url = ''
+ result.message = '多画质数据解析失败'
+ }
+ } else {
+ // URL是字符串格式,单一画质
+ result.url = urlData
+ result.qualities = []
+ result.hasMultipleQualities = false
+ result.currentQuality = '默认'
+ result.message = '直链播放'
+ }
+
+ result.headers = parseHeaders(playData.headers || playData.header)
+ result.danmaku = playData.danmaku || '' // 处理弹幕字段
+ result.needParse = false
+ result.needSniff = false
+ } else if (playData.parse === 1) {
+ // 需要嗅探
+ result.playType = 'sniff'
+ result.url = playData.url || playData.play_url || ''
+ result.headers = parseHeaders(playData.headers || playData.header)
+ result.danmaku = playData.danmaku || '' // 处理弹幕字段
+ result.needSniff = true
+ result.qualities = []
+ result.hasMultipleQualities = false
+ result.message = '需要嗅探才能播放,尽情期待'
+ } else {
+ // 默认处理为直链
+ result.url = playData.url || playData.play_url || playData
+ result.headers = parseHeaders(playData.headers || playData.header)
+ result.danmaku = playData.danmaku || '' // 处理弹幕字段
+ result.qualities = []
+ result.hasMultipleQualities = false
+ result.message = '直链播放'
+ }
+ } else if (typeof playData === 'string') {
+ // 如果返回的是字符串,直接作为播放地址
+ result.url = playData
+ result.headers = {}
+ result.danmaku = '' // 字符串类型无弹幕数据
+ result.qualities = []
+ result.hasMultipleQualities = false
+ result.message = '直链播放'
+ }
+
+ return result
+ } catch (error) {
+ console.error('T4播放解析失败:', error)
+ return {
+ success: false,
+ error: error.message || '播放解析失败',
+ playType: 'error',
+ url: '',
+ headers: {},
+ needParse: false,
+ needSniff: false,
+ message: '播放解析失败: ' + (error.message || '未知错误')
+ }
+ }
+}
+
+/**
+ * 搜索接口
+ * @param {string} module - 模块名称
+ * @param {object} params - 搜索参数
+ * @param {string} params.wd - 搜索关键词
+ * @param {number} params.pg - 页码(从1开始)
+ * @param {string|object} params.extend - 接口数据扩展参数(对象类型会自动转换为JSON字符串)
+ * @param {string} params.apiUrl - 可选的直接API地址
+ * @returns {Promise} 搜索结果
+ */
+export const searchVideos = async (module, params) => {
+ const {
+ wd: keyword,
+ pg = PAGINATION.DEFAULT_PAGE,
+ extend,
+ apiUrl
+ } = params
+
+ const requestParams = {
+ wd: keyword,
+ pg
+ }
+
+ const processedExtend = processExtendParam(extend)
+ if (processedExtend) {
+ requestParams.extend = processedExtend
+ }
+
+ // 如果提供了apiUrl,直接使用站点的API地址
+ if (apiUrl) {
+ return directApiCall(apiUrl, requestParams)
+ }
+
+ // 否则使用原来的代理方式
+ return get(buildModuleUrl(module), requestParams)
+}
+
+/**
+ * 动作接口(POST请求)
+ * @param {string} module - 模块名称
+ * @param {object} data - 动作数据
+ * @param {string} data.action - 动作类型
+ * @param {string|object} data.extend - 接口数据扩展参数(对象类型会自动转换为JSON字符串)
+ * @param {string} data.apiUrl - 可选的直接API地址
+ * @returns {Promise} 动作执行结果
+ */
+export const executeAction = async (module, data) => {
+ const { action, extend, apiUrl, ...otherData } = data
+
+ const requestData = {
+ ac: MODULE_ACTIONS.ACTION,
+ action,
+ ...otherData
+ }
+
+ const processedExtend = processExtendParam(extend)
+ if (processedExtend) {
+ requestData.extend = processedExtend
+ }
+
+ console.log('executeAction调用参数:', {
+ module,
+ data,
+ requestData,
+ apiUrl
+ })
+
+ // 如果提供了apiUrl,直接使用站点的API地址
+ if (apiUrl) {
+ console.log('直接调用API:', apiUrl, requestData)
+
+ // 如果是测试用的JSON文件,使用GET请求
+ if (apiUrl.endsWith('.json')) {
+ const response = await axios.get(apiUrl, {
+ timeout: API_CONFIG.TIMEOUT,
+ headers: {
+ 'Accept': 'application/json'
+ }
+ })
+ console.log('API响应 (GET):', response.data)
+ return response.data
+ } else {
+ // 否则使用POST请求
+ const response = await axios.post(apiUrl, requestData, {
+ timeout: API_CONFIG.TIMEOUT,
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json;charset=UTF-8',
+ }
+ })
+ console.log('API响应 (POST):', response.data)
+ return response.data
+ }
+ }
+
+ // 否则使用原来的代理方式
+ console.log('使用代理方式调用:', buildModuleUrl(module), requestData)
+ const result = await post(buildModuleUrl(module), requestData)
+ console.log('代理响应:', result)
+ return result
+}
+
+/**
+ * 刷新模块数据
+ * @param {string} module - 模块名称
+ * @param {string|object} extend - 接口数据扩展参数(对象类型会自动转换为JSON字符串)
+ * @param {string} apiUrl - 可选的直接API地址
+ * @returns {Promise} 刷新结果
+ */
+export const refreshModule = async (module, extend, apiUrl) => {
+ const params = {
+ refresh: '1'
+ }
+
+ const processedExtend = processExtendParam(extend)
+ if (processedExtend) {
+ params.extend = processedExtend
+ }
+
+ // 如果提供了apiUrl,直接使用站点的API地址
+ if (apiUrl) {
+ return directApiCall(apiUrl, params)
+ }
+
+ // 否则使用原来的代理方式
+ return get(buildModuleUrl(module), params)
+}
+
+/**
+ * 通用模块接口调用
+ * @param {string} module - 模块名称
+ * @param {object} params - 请求参数
+ * @param {string} method - 请求方法 ('GET' | 'POST')
+ * @returns {Promise} 接口响应
+ */
+export const callModuleApi = async (module, params = {}, method = 'GET') => {
+ const url = buildModuleUrl(module)
+
+ if (method.toUpperCase() === 'POST') {
+ return post(url, params)
+ } else {
+ return get(url, params)
+ }
+}
+
+// 默认导出所有接口
+export default {
+ getHomeData,
+ getCategoryData,
+ getVideoDetail,
+ getPlayData,
+ parsePlayUrl,
+ searchVideos,
+ executeAction,
+ refreshModule,
+ callModuleApi
+}
\ No newline at end of file
diff --git a/dashboard/src/api/modules/parse.js b/dashboard/src/api/modules/parse.js
new file mode 100644
index 0000000..25a4dd9
--- /dev/null
+++ b/dashboard/src/api/modules/parse.js
@@ -0,0 +1,167 @@
+/**
+ * 解析接口
+ * 封装 /parse/:jx 相关的视频解析接口
+ */
+
+import { get, post } from '../request'
+import { API_PATHS } from '../config'
+
+/**
+ * 构建解析接口URL
+ * @param {string} jx - 解析器名称
+ * @returns {string} 完整的解析URL
+ */
+const buildParseUrl = (jx) => {
+ return `${API_PATHS.PARSE}/${jx}`
+}
+
+/**
+ * 解析视频地址
+ * @param {string} jx - 解析器名称
+ * @param {object} params - 解析参数
+ * @param {string} params.url - 需要解析的视频URL
+ * @param {string} params.flag - 解析标识(可选)
+ * @param {object} params.headers - 自定义请求头(可选)
+ * @returns {Promise} 解析结果
+ */
+export const parseVideo = async (jx, params) => {
+ const { url, flag, headers, ...otherParams } = params
+
+ if (!url) {
+ throw new Error('视频URL不能为空')
+ }
+
+ const requestParams = {
+ url,
+ ...otherParams
+ }
+
+ if (flag) {
+ requestParams.flag = flag
+ }
+
+ const requestOptions = {}
+ if (headers) {
+ requestOptions.headers = {
+ ...requestOptions.headers,
+ ...headers
+ }
+ }
+
+ return get(buildParseUrl(jx), requestParams, requestOptions)
+}
+
+/**
+ * POST方式解析视频(用于复杂参数)
+ * @param {string} jx - 解析器名称
+ * @param {object} data - 解析数据
+ * @param {string} data.url - 需要解析的视频URL
+ * @param {string} data.flag - 解析标识(可选)
+ * @param {object} data.headers - 自定义请求头(可选)
+ * @returns {Promise} 解析结果
+ */
+export const parseVideoPost = async (jx, data) => {
+ const { url, headers, ...requestData } = data
+
+ if (!url) {
+ throw new Error('视频URL不能为空')
+ }
+
+ const requestOptions = {}
+ if (headers) {
+ requestOptions.headers = {
+ ...requestOptions.headers,
+ ...headers
+ }
+ }
+
+ return post(buildParseUrl(jx), requestData, requestOptions)
+}
+
+/**
+ * 批量解析视频
+ * @param {string} jx - 解析器名称
+ * @param {Array} urls - 视频URL数组
+ * @param {object} options - 解析选项
+ * @param {string} options.flag - 解析标识(可选)
+ * @param {object} options.headers - 自定义请求头(可选)
+ * @returns {Promise} 批量解析结果
+ */
+export const parseVideoBatch = async (jx, urls, options = {}) => {
+ if (!Array.isArray(urls) || urls.length === 0) {
+ throw new Error('视频URL数组不能为空')
+ }
+
+ const { flag, headers } = options
+
+ const requestData = {
+ urls,
+ batch: true
+ }
+
+ if (flag) {
+ requestData.flag = flag
+ }
+
+ const requestOptions = {}
+ if (headers) {
+ requestOptions.headers = {
+ ...requestOptions.headers,
+ ...headers
+ }
+ }
+
+ return post(buildParseUrl(jx), requestData, requestOptions)
+}
+
+/**
+ * 获取解析器信息
+ * @param {string} jx - 解析器名称
+ * @returns {Promise} 解析器信息
+ */
+export const getParserInfo = async (jx) => {
+ return get(buildParseUrl(jx), { info: true })
+}
+
+/**
+ * 测试解析器可用性
+ * @param {string} jx - 解析器名称
+ * @param {string} testUrl - 测试URL(可选)
+ * @returns {Promise} 测试结果
+ */
+export const testParser = async (jx, testUrl) => {
+ const params = { test: true }
+
+ if (testUrl) {
+ params.url = testUrl
+ }
+
+ return get(buildParseUrl(jx), params)
+}
+
+/**
+ * 通用解析接口调用
+ * @param {string} jx - 解析器名称
+ * @param {object} params - 请求参数
+ * @param {string} method - 请求方法 ('GET' | 'POST')
+ * @returns {Promise} 解析响应
+ */
+export const callParseApi = async (jx, params = {}, method = 'GET') => {
+ const url = buildParseUrl(jx)
+
+ if (method.toUpperCase() === 'POST') {
+ return post(url, params)
+ } else {
+ return get(url, params)
+ }
+}
+
+// 默认导出所有解析接口
+export default {
+ parseVideo,
+ parseVideoPost,
+ parseVideoBatch,
+ getParserInfo,
+ testParser,
+ callParseApi
+}
\ No newline at end of file
diff --git a/dashboard/src/api/modules/proxy.js b/dashboard/src/api/modules/proxy.js
new file mode 100644
index 0000000..f8cd7ee
--- /dev/null
+++ b/dashboard/src/api/modules/proxy.js
@@ -0,0 +1,136 @@
+/**
+ * 模块代理接口
+ * 封装 /proxy/:module/* 相关的代理转发接口
+ */
+
+import { get, post, put, del } from '../request'
+import { API_PATHS } from '../config'
+
+/**
+ * 构建代理接口URL
+ * @param {string} module - 模块名称
+ * @param {string} path - 代理路径
+ * @returns {string} 完整的代理URL
+ */
+const buildProxyUrl = (module, path = '') => {
+ const basePath = `${API_PATHS.PROXY}/${module}`
+ return path ? `${basePath}/${path}` : basePath
+}
+
+/**
+ * 代理GET请求
+ * @param {string} module - 模块名称
+ * @param {string} path - 代理路径
+ * @param {object} params - 查询参数
+ * @returns {Promise} 代理响应
+ */
+export const proxyGet = async (module, path = '', params = {}) => {
+ const url = buildProxyUrl(module, path)
+ return get(url, params)
+}
+
+/**
+ * 代理POST请求
+ * @param {string} module - 模块名称
+ * @param {string} path - 代理路径
+ * @param {object} data - 请求数据
+ * @returns {Promise} 代理响应
+ */
+export const proxyPost = async (module, path = '', data = {}) => {
+ const url = buildProxyUrl(module, path)
+ return post(url, data)
+}
+
+/**
+ * 代理PUT请求
+ * @param {string} module - 模块名称
+ * @param {string} path - 代理路径
+ * @param {object} data - 请求数据
+ * @returns {Promise} 代理响应
+ */
+export const proxyPut = async (module, path = '', data = {}) => {
+ const url = buildProxyUrl(module, path)
+ return put(url, data)
+}
+
+/**
+ * 代理DELETE请求
+ * @param {string} module - 模块名称
+ * @param {string} path - 代理路径
+ * @param {object} params - 查询参数
+ * @returns {Promise} 代理响应
+ */
+export const proxyDelete = async (module, path = '', params = {}) => {
+ const url = buildProxyUrl(module, path)
+ return del(url, params)
+}
+
+/**
+ * 通用代理请求
+ * @param {string} module - 模块名称
+ * @param {string} path - 代理路径
+ * @param {object} options - 请求选项
+ * @param {string} options.method - 请求方法
+ * @param {object} options.params - 查询参数(GET请求)
+ * @param {object} options.data - 请求数据(POST/PUT请求)
+ * @returns {Promise} 代理响应
+ */
+export const proxyRequest = async (module, path = '', options = {}) => {
+ const { method = 'GET', params, data } = options
+
+ switch (method.toUpperCase()) {
+ case 'GET':
+ return proxyGet(module, path, params)
+ case 'POST':
+ return proxyPost(module, path, data)
+ case 'PUT':
+ return proxyPut(module, path, data)
+ case 'DELETE':
+ return proxyDelete(module, path, params)
+ default:
+ throw new Error(`不支持的请求方法: ${method}`)
+ }
+}
+
+/**
+ * 代理文件上传
+ * @param {string} module - 模块名称
+ * @param {string} path - 代理路径
+ * @param {FormData} formData - 文件数据
+ * @returns {Promise} 上传响应
+ */
+export const proxyUpload = async (module, path = '', formData) => {
+ const url = buildProxyUrl(module, path)
+
+ return post(url, formData, {
+ headers: {
+ 'Content-Type': 'multipart/form-data'
+ }
+ })
+}
+
+/**
+ * 代理文件下载
+ * @param {string} module - 模块名称
+ * @param {string} path - 代理路径
+ * @param {object} params - 查询参数
+ * @returns {Promise} 下载响应
+ */
+export const proxyDownload = async (module, path = '', params = {}) => {
+ const url = buildProxyUrl(module, path)
+
+ return get(url, params, {
+ responseType: 'blob'
+ })
+}
+
+// 默认导出所有代理接口
+export default {
+ proxyGet,
+ proxyPost,
+ proxyPut,
+ proxyDelete,
+ proxyRequest,
+ proxyUpload,
+ proxyDownload
+}
\ No newline at end of file
diff --git a/dashboard/src/api/parser.js b/dashboard/src/api/parser.js
new file mode 100644
index 0000000..5ddac8a
--- /dev/null
+++ b/dashboard/src/api/parser.js
@@ -0,0 +1,348 @@
+import { useParserStore } from '@/stores/parser'
+
+/**
+ * 解析服务API
+ * 提供视频解析功能,支持播放器通过 jx:1 格式调用
+ */
+export class ParserService {
+ constructor() {
+ this.parserStore = useParserStore()
+ }
+
+ /**
+ * 解析视频地址
+ * @param {string} videoUrl - 原始视频地址
+ * @param {string} flag - 播放器标识 (可选)
+ * @param {number} parserIndex - 指定解析器索引 (可选)
+ * @returns {Promise