diff --git a/Ye-11X115490_PsyDuck4k/lib/.keep b/Ye-11X115490_PsyDuck4k/lib/.keep deleted file mode 100644 index e69de29b..00000000 diff --git a/Ye-11X115490_PsyDuck4k/lib/AppFox.js b/Ye-11X115490_PsyDuck4k/lib/AppFox.js deleted file mode 100644 index 28e1d10d..00000000 --- a/Ye-11X115490_PsyDuck4k/lib/AppFox.js +++ /dev/null @@ -1,3 +0,0 @@ -//本资源来源于互联网公开渠道,仅可用于个人学习爬虫技术。 -//严禁将其用于任何商业用途,下载后请于 24 小时内删除,搜索结果均来自源站,本人不承担任何责任。 -let e={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",Connection:"Keep-Alive","Accept-Language":"zh-CN,zh;q=0.8","Cache-Control":"no-cache"},t=5e3,i=2,a=0,s=1,r={},l={},n={},o={},p=[],c="",f="",h="",d="",u="";async function g(l){let p=l.ext||"";if("string"==typeof p&&p.startsWith("http"))c=p;else if("object"==typeof p)try{c=p.host,d=p.key||"",u=p.sign||"",i=p.ver||2,h=(p.cms||"").replace(/\/$/,""),/^https?:\/\/.*\/vod/.test(h)&&(h+=h.includes("?")?"&":"?"),f=p.from||"",o=p.parse||{},a=p.custom_first||0,s=void 0!==p.category?p.category:1;let l=p.ua;l&&("string"==typeof l?e["User-Agent"]=l:"object"==typeof l&&(r={host:l.host,config:l.config,home:l.home,category:l.category,search:l.search,parse:l.parse,player:l.player})),t=1e3*(p.timeout||5)}catch(e){}if(!/^https?:\/\/[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(:\d+)?(\/)?$/.test(c)){let i=Object.assign({},e);r.host&&(i["User-Agent"]=r.host);let a=await req(c,{headers:i,timeout:t});try{let e=JSON.parse(a.content);e.apiDomain&&(c=e.apiDomain)}catch(e){let t=(a.content||"").trim();t.startsWith("http")&&(c=t)}}c=c.replace(/\/$/,"");let g=d&&u;if(3!==i||g)g&&(i=3);else{let e=O();r.config&&(e["User-Agent"]=r.config);let i=(await S(`${c}/api.php/Appfox/config`,{headers:e,timeout:t})).data||{};i.app_key&&i.app_sign&&(d=i.app_key,u=i.app_sign);let a=i.playerList||[],s=i.jiexiDataList||[];a.length>0&&(n={playerList:a,jiexiDataList:s})}}async function y(i){if(!c||0===s)return JSON.stringify({class:[]});let a=Object.assign({},e);r.home&&(a["User-Agent"]=r.home);let l=[],n={},o={class:l,filters:n};if(h&&2!==s){let e=h.replace(/&$/,"");e=e.replace(/&ac=videolist/g,"").replace(/ac=videolist&/g,"").replace(/ac=videolist/g,""),e=e.replace("ac=detail","ac=list");let i=await S(e,{headers:a,timeout:t});i&&i.class&&(l=i.class),o=await S(h.replace(/&$/,""),{headers:a,timeout:t})||{},o.class=l,2===s&&o.list&&o.list.forEach((e=>e.vod_id=`msearch:${e.vod_id}`))}else{let e=await S(`${c}/api.php/Appfox/init`,{headers:a,timeout:t});e&&e.data&&e.data.type_list&&e.data.type_list.forEach((e=>{let t=String(e.type_id);if(l.push({type_id:t,type_name:e.type_name}),i&&e.filter_type_list&&e.filter_type_list.length>0){let i=[];e.filter_type_list.forEach((e=>{let t=e.name;switch(e.name){case"class":t="类型";break;case"area":t="地区";break;case"lang":t="语言";break;case"year":t="年份";break;case"sort":t="排序"}let a=[],s="";e.list.forEach((e=>{e&&a.push({n:e,v:e})})),a.length>0&&(s="sort"===e.name&&e.list.includes("最新")?"最新":e.list.includes("全部")?"全部":a[0].v,i.push({key:e.name,name:t,init:s,value:a}))})),i.length>0&&(n[t]=i)}})),o.class=l,o.filters=n}return JSON.stringify(o)}async function m(){if(!c||0===s)return JSON.stringify({list:[]});if(h&&2!==s)return JSON.stringify({list:[]});let a=Object.assign({},e);(r.homeVideo||r.home)&&(a["User-Agent"]=r.homeVideo||r.home);let l="index";if(2===i||3===i){let e=await S(`${c}/api.php/appfox/nav`,{headers:a,timeout:t}),i="";if(e&&e.data)for(let t of e.data)if("object"==typeof t){i=t.navigationId;break}if(!i)return JSON.stringify({list:[]});l=`nav_video?id=${i}`}let n=await S(`${c}/api.php/Appfox/${l}`,{headers:a,timeout:t}),o=[];return n&&n.data&&n.data.forEach((e=>{e.banner&&o.push(...e.banner),e.categories&&e.categories.forEach((e=>{e.videos&&o.push(...e.videos)}))})),o.length>0&&2===s&&o.forEach((e=>e.vod_id=`msearch:${e.vod_id}`)),JSON.stringify({list:o})}async function $(i,a,l,n){if(!c)return JSON.stringify({list:[]});let o=Object.assign({},e);r.category&&(o["User-Agent"]=r.category);let p={list:[]};if(h&&2!==s)p=await S(`${h}pg=${a}&t=${i}`,{headers:o,timeout:t})||{list:[]};else{let e=n.class||"全部",s=n.area||"全部",r=n.lang||"全部",l=n.year||"全部",f=n.sort||"最新",h=`${c}/api.php/Appfox/vodList?type_id=${i}&class=${encodeURIComponent(e)}&area=${encodeURIComponent(s)}&lang=${encodeURIComponent(r)}&year=${encodeURIComponent(l)}&sort=${encodeURIComponent(f)}&page=${a}`,d=await S(h,{headers:o,timeout:t});d&&d.data&&d.data.recommend_list&&(p.list=d.data.recommend_list)}return 2===s&&p.list&&p.list.forEach((e=>e.vod_id=`msearch:${e.vod_id}`)),JSON.stringify({...p,page:parseInt(a)})}async function _(a,s,l=1){if(!c)return JSON.stringify({list:[]});let n=Object.assign({},e);r.search&&(n["User-Agent"]=r.search);let o={list:[]};if(h){let e=h.includes("?")?h.split("?")[0]+"?":h;o=await S(`${e}ac=detail&wd=${encodeURIComponent(a)}`,{headers:n,timeout:t})||{list:[]},p=o.list||[]}else{if(3===i){let e={ac:"detail",wd:a,pg:String(l)},i=O(JSON.stringify(e));r.search&&(i["User-Agent"]=r.search),o=b((await req(`${c}/api.php/appfoxs/vod`,{method:"post",data:e,headers:i,postType:"",timeout:t})).content)}else{let e=`${c}/api.php/Appfox/vod?ac=detail&wd=${encodeURIComponent(a)}`;f&&(e+=`&from=${f}`),o=await S(e,{headers:n,timeout:t})||{list:[]}}p=o.list||[]}return JSON.stringify(o)}async function v(a){let s=Object.assign({},e),o=r.detail||r.search;o&&(s["User-Agent"]=o);let f=p.find((e=>String(e.vod_id)===String(a)));if(!f)if(h){let e=h.includes("?")?h.split("?")[0]+"?":h,i=await S(`${e}ac=detail&ids=${a}`,{headers:s,timeout:t});i&&i.list&&i.list.length>0&&(f=i.list[0])}else if(3===i){let e={ac:"detail",ids:String(a)},i=O(JSON.stringify(e));o&&(i["User-Agent"]=o);let s=b((await req(`${c}/api.php/appfoxs/vod`,{method:"post",data:e,headers:i,postType:"",timeout:t})).content);s&&s.list&&(f=s.list[0])}else{let e=await S(`${c}/api.php/Appfox/vod?ac=detail&ids=${a}`,{headers:s,timeout:t});e&&e.list&&(f=e.list[0])}if(!f)return JSON.stringify({list:[]});let d=(f.vod_play_from||"").split("$$$"),u=(f.vod_play_url||"").split("$$$");try{let a=3===i?O():Object.assign({},e);if(r.config&&(a["User-Agent"]=r.config),!n||!n.playerList)if(3===i){let e=b((await req(`${c}/api.php/appfoxs/config`,{headers:a,timeout:t})).content);n={playerList:e?.data?.playerList||[],jiexiDataList:e?.data?.jiexiDataList||[]}}else{let e=await S(`${c}/api.php/Appfox/config`,{headers:a,timeout:t});n={playerList:e?.data?.playerList||[],jiexiDataList:e?.data?.jiexiDataList||[]}}let s=n.playerList||[],o=n.jiexiDataList||[],p={};s.forEach((e=>p[e.playerCode]=e));let h=[];for(let e=0;e=2?a.push(i[0]+"$"+t+"@"+i[1]):a.push(e)}h.push(a.join("#"))}}f.vod_play_from=d.join("$$$"),f.vod_play_url=h.join("$$$"),l={},o.forEach((e=>{(e.url||"").startsWith("http")&&(l[e.playerCode]=e.url)}))}catch(e){}return JSON.stringify({list:[f]})}async function A(i,s,n){let p=s.indexOf("@"),c=p>-1?s.substring(0,p):"",f=p>-1?s.substring(p+1):s,h=0,d=0,u=0,g={...e};r.parse&&(g["User-Agent"]=r.parse);let y=r.player||"Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1",m=f,$=1===a?[o,l]:[l,o];for(let e of $){if(!u&&!/^https?:\/\/.*\.(m3u8|mp4|flv|mkv)/.test(m))for(let i in e){if(!i.includes(c))continue;let a=e[i];if(Array.isArray(a))for(let e of a){if(e.startsWith("parse:")){m=e.split("parse:")[1]+f,h=0,d=1,u=1;break}try{let i=await S(`${e}${f}`,{headers:g,timeout:t});if(i&&i.url&&i.url.startsWith("http")){m=i.url,u=1;break}}catch(e){}}else if("string"==typeof a){if(a.startsWith("parse:")){m=a.split("parse:")[1]+f,h=0,d=1,u=1;break}try{let e=await S(`${a}${f}`,{headers:g,timeout:t});if(e&&e.url&&e.url.startsWith("http")){m=e.url,u=1;break}}catch(e){}}if(u||d)break}if(u||d)break}return/^https?:\/\/.*\.(m3u8|mp4|flv|mkv)/.test(m)||1===u||(h=1),JSON.stringify({jx:h,parse:d,url:m,header:{"User-Agent":y}})}function b(e){if(!e)return{};try{return JSON.parse(e)}catch(t){try{return JSON.parse(function(e){try{let t=md5X(d).substring(0,16),i=t.split("").reverse().join("");return aesX("AES/CBC/PKCS7",!1,e,!0,t,i,!1)}catch(t){return e}}(e))}catch(t){return e}}}async function S(e,t={}){try{return b((await req(e,t)).content)}catch(e){return{}}}function O(t=""){let i=(new Date).getTime(),a=Math.floor(9e5*Math.random())+1e5,s=md5X(`${u}${d}${i}${a}${t}`);return{"User-Agent":e["User-Agent"],"x-security-auth":`${i}|${a}|${s}`,"content-type":"application/json; charset=utf-8"}}export function __jsEvalReturn(){return{init:g,home:y,homeVod:m,category:$,search:_,detail:v,play:A}} \ No newline at end of file diff --git a/Ye-11X115490_PsyDuck4k/lib/AppGet.py b/Ye-11X115490_PsyDuck4k/lib/AppGet.py deleted file mode 100644 index 4acf273a..00000000 --- a/Ye-11X115490_PsyDuck4k/lib/AppGet.py +++ /dev/null @@ -1,412 +0,0 @@ -# coding = utf-8 -# !/usr/bin/python -# 新时代青年 2025.06.25 getApp第三版 -# 基于原作者修改版本,仅限个人学习爬虫技术,严禁用于任何盈利用途 -from Crypto.Cipher import AES -from base.spider import Spider -from Crypto.Util.Padding import pad, unpad -from concurrent.futures import ThreadPoolExecutor, as_completed -import re, sys, time, uuid, json, base64, urllib3, random, hashlib, os, urllib.parse -urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) -sys.path.append('..') -TARGET_DOMAIN = 'app.lkdyw.cn' - -class Spider(Spider): - xurl, key, iv, init_data, search_verify = '', '', '', '', '' - username, password, device_id, version, get_type = '', '', '', '', '0' - def_headers, auto_vip, line_block, search_timeout = {'User-Agent': 'okhttp/3.14.9'}, 0, [], 10 - vip_purchased, retry_count, sort_keywords, token_cache_file = False, 0, [], '' - auto_vip_triggered, search_mode, auto_vip_enabled = False, False, False - base_host, cache_dir = '', '' - search_index_suffix = 'searchList' - verify_code = '' - is_api3 = False - - def _set_cache_filename(self, host): - try: - parsed = urllib.parse.urlparse(host) - domain = parsed.netloc or os.path.basename(parsed.path) - safe_domain = re.sub(r'[^a-zA-Z0-9_.-]', '_', domain) - self.cache_dir = '/storage/emulated/0/Download/cache' - os.makedirs(self.cache_dir, exist_ok=True) - current_date = time.strftime("%Y%m%d") - if parsed.netloc == TARGET_DOMAIN: - self.token_cache_file = os.path.join(self.cache_dir, f"{safe_domain}_token{current_date}.json") - else: - self.token_cache_file = os.path.join(self.cache_dir, f"{safe_domain}_token.json") - except: - self.cache_dir = '/storage/emulated/0/Download/cache' - os.makedirs(self.cache_dir, exist_ok=True) - self.token_cache_file = os.path.join(self.cache_dir, "default_token.json") - - def init(self, extend=''): - ext = json.loads(extend.strip()) if extend.strip() else {} - api_map = { - '2': '/api.php/qijiappapi', - 'qiji': '/api.php/qijiappapi', - 'flutter': '/api.php/getappapi', - 'get': '/api.php/getappapi', - '3': '/api/vod/' - } - api = api_map.get(str(ext.get('api')), '/api.php/getappapi') - self.get_type = str(ext.get('api')) if str(ext.get('api')) in api_map else 'default' - self.is_api3 = self.get_type == '3' - host = ext['host'] - - self.search_index_suffix = ext.get('index', 'searchList').strip() - self.verify_code = ext.get('verify_code', '').strip() - - if not re.match(r'^https?://', host): - host = 'http://' + host - parsed_host = urllib.parse.urlparse(host) - self.base_host = f"{parsed_host.scheme}://{parsed_host.netloc}".rstrip('/') - - domain_set = set() - if re.match(r'^https?:\/\/[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(:\d+)?(\/)?$', host): - domain_set.add(host) - else: - host_data = self.fetch(host, headers=self.get_headers(1), timeout=10, verify=False).text - domain_set.update([d.strip() for d in host_data.split('\n') if d.strip()]) - - self.def_headers['User-Agent'] = ext.get('ua', self.def_headers['User-Agent']) - self.key = ext.get('key', ext.get('datakey')) - if not self.key: return - self.iv = ext.get('iv', ext.get('dataiv')) or self.key - self.device_id = ext.get('devideid') or ext.get('deviceid', '') - if not self.device_id: - self.device_id = ''.join(random.choices('0123456789abcdef', k=33)) - self.version, self.username, self.password = str(ext.get('version', '')), ext.get('username'), ext.get('password') - self.auto_vip = int(ext.get('auto_vip', 0)) - self.auto_vip_enabled = self.auto_vip in (1, 2) - self.search_mode = ext.get('search', False) in (1, '1', 'true', 'TRUE') - line_block_conf = ext.get('line_block', '') - self.line_block = [kw.strip() for kw in (line_block_conf.split(',') if isinstance(line_block_conf, str) else line_block_conf) if kw.strip()] - from_config = ext.get('from', '').strip() - if from_config: - self.sort_keywords = [kw.strip() for kw in from_config.split('>') if kw.strip()] - self.search_timeout = int(ext.get('time', 10)) - self.search_timeout = 10 if not (0 < self.search_timeout <= 60) else self.search_timeout - - self._set_cache_filename(self.base_host) - self.load_token_cache() - - if not self.def_headers.get('app-user-token') and ext.get('token'): - self.def_headers['app-user-token'] = ext.get('token') - if self.device_id: - self.def_headers['app-user-device-id'] = self.device_id - - # ==================== 新增:初始化POST请求参数 ==================== - init_post_data = { - "device_id": self.device_id, - "version": self.version, - "timestamp": str(int(time.time())) - } - # =============================================================== - - for domain in domain_set: - try: - self.xurl = f"{domain}{api}" - init_api = 'init' if self.is_api3 else 'initV119' - init_url = f'{self.xurl}{init_api}' if self.is_api3 else f'{self.xurl}.index/{init_api}' - - headers = self.get_headers() - # ==================== 核心:init改用POST请求 ==================== - res = self.post( - url=init_url, - data=init_post_data, - headers=headers, - timeout=(5, 5), - verify=False - ).json() - # =============================================================== - - self.init_data = json.loads(self.decrypt(res['data'])) - self.search_verify = self.init_data['config'].get('system_search_verify_status', False) - break - except Exception as e: - continue - - if self.auto_vip_enabled and not self.def_headers.get('app-user-token') and not self.vip_purchased: - self.silent_register_and_buy_vip() - self.vip_purchased = True - - def fuzzy_sort_lines(self, lines): - if not lines or not self.sort_keywords: return lines - def get_sort_weight(line): - line_name = line['player_show'].lower() - for idx, kw in enumerate(self.sort_keywords): - if kw.lower() in line_name: return idx - return len(self.sort_keywords) - return sorted(lines, key=lambda x: get_sort_weight(x)) - - def load_token_cache(self): - try: - parsed_host = urllib.parse.urlparse(self.base_host) - if parsed_host.netloc == TARGET_DOMAIN: - current_date = time.strftime("%Y%m%d") - for file in os.listdir(self.cache_dir): - if file.startswith(f"{re.sub(r'[^a-zA-Z0-9_.-]', '_', parsed_host.netloc)}_token") and file.endswith('.json'): - if current_date not in file: - os.remove(os.path.join(self.cache_dir, file)) - if os.path.exists(self.token_cache_file): - with open(self.token_cache_file, 'r') as f: - cache = json.load(f) - if cache.get('host') != self.base_host: - return - if cache.get('token'): - self.def_headers['app-user-token'] = cache['token'] - if cache.get('device_id'): - self.device_id = cache['device_id'] - self.def_headers['app-user-device-id'] = cache['device_id'] - except: - pass - - def save_token_cache(self, token, device_id): - try: - os.makedirs(self.cache_dir, exist_ok=True) - cache_data = {'token': token, 'device_id': device_id, 'timestamp': int(time.time()), 'host': self.base_host} - with open(self.token_cache_file, 'w') as f: - json.dump(cache_data, f) - except: - pass - - def get_headers(self, main=0): - base_headers = {'Accept-Encoding': 'gzip'} - if self.get_type == 'qiji': return {**base_headers, 'User-Agent': 'okhttp/3.10.0', 'Connection': 'Keep-Alive', **self.def_headers} - elif self.get_type == 'flutter': - flutter_headers = {'User-Agent': 'Dart/3.5 (dart:io)'} if main == 1 else {'User-Agent': '', 'app-version-code': self.version, 'app-os': 'android', 'app-ui-mode': 'light'} - return {**base_headers, **flutter_headers, **self.def_headers} - elif self.get_type == 'get': - timestamp = str(int(time.time())) - get_headers = {'User-Agent': 'okhttp/3.14.9'} if main == 1 else {'User-Agent': '', 'Connection': 'Keep-Alive', 'app-version-code': self.version, 'app-ui-mode': 'light', 'app-user-device-id': self.device_id, 'app-api-verify-time': timestamp, 'app-api-verify-sign': self.encrypt(timestamp), 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'} - return {**base_headers, **get_headers, **self.def_headers} - elif self.is_api3: - return {**base_headers, **self.def_headers} - return {**base_headers, **self.def_headers} - - def login(self): - if self.username and self.password and self.device_id: - timestamp = str(int(time.time())) - headers = self.get_headers().copy() - headers.update({'app-version-code': "", 'app-ui-mode': 'light', 'app-api-verify-time': timestamp, 'app-api-verify-sign': self.generate_signature(timestamp)}) - login_url = f'{self.xurl}appLogin' if self.is_api3 else f'{self.xurl}.index/appLogin' - res = self.post(login_url, data={'password': self.password, 'code': "", 'device_id': self.device_id, 'user_name': self.username, 'invite_code': "", 'is_emulator': "0"}, headers=headers).json() - auth_token = json.loads(self.decrypt(res['data']))['user']['auth_token'] - self.def_headers['app-user-token'] = auth_token - self.save_token_cache(auth_token, self.device_id) - - def generate_signature(self, timestamp): - key_bytes = self.key.encode('utf-8') - iv_bytes = self.iv.encode('utf-8') - cipher = AES.new(key_bytes, AES.MODE_CBC, iv_bytes) - padded_timestamp = pad(timestamp.encode('utf-8'), AES.block_size) - encrypted_bytes = cipher.encrypt(padded_timestamp) - return base64.b64encode(encrypted_bytes).decode('utf-8') - - def homeContent(self, filter): - result = {"class": [], "filters": {}} - for item in self.init_data.get('type_list', []): - if item['type_name'] not in {'全部', 'QQ', 'juo.one'} and '企鹅群' not in item['type_name']: - result['class'].append({"type_id": item['type_id'], "type_name": item['type_name']}) - filter_items = [{"key": 'by' if ft['name'] == 'sort' else ft['name'], "name": {'class': '类型', 'area': '地区', 'lang': '语言', 'year': '年份', 'sort': '排序'}.get(ft['name'], ft['name']), "value": [{"n": v, "v": v} for v in ft['list']]} for ft in item.get('filter_type_list', []) if ft.get('list')] - if filter_items: result["filters"][str(item['type_id'])] = filter_items - return result - - def homeVideoContent(self): - return {'list': self.arr2vods([vid for item in self.init_data.get('type_list', []) for vid in item.get('recommend_list', [])])} - - def categoryContent(self, cid, pg, filter, ext): - cate_url = f'{self.xurl}typeFilterVodList' if self.is_api3 else f'{self.xurl}.index/typeFilterVodList' - res = self.post(cate_url, headers=self.get_headers(), data={'area': ext.get('area', '全部'), 'year': ext.get('year', '全部'), 'type_id': cid, 'page': str(pg), 'sort': ext.get('sort', '最新'), 'lang': ext.get('lang', '全部'), 'class': ext.get('class', '全部')}, verify=False).json() - return {'list': self.arr2vods(json.loads(self.decrypt(res['data']))['recommend_list']), 'page': pg, 'pagecount': 9999, 'limit': 90, 'total': 999999} - - def _fetch_cate_page(self, page): - try: - cate_url = f'{self.xurl}typeFilterVodList' if self.is_api3 else f'{self.xurl}.index/typeFilterVodList' - res = self.post(cate_url, headers=self.get_headers(), data={'area':'全部','year':'全部','type_id':'0','page':str(page),'sort':'最新','lang':'全部','class':'全部'}, verify=False).json() - return self.arr2vods(json.loads(self.decrypt(res['data']))['recommend_list']) - except: return [] - - def custom_search(self, key): - vods, c_page, stop = [], 1, False - while not stop and c_page <= 100: - batch_end = min(c_page+4, 100) - with ThreadPoolExecutor(max_workers=5) as exe: - tasks = [exe.submit(self._fetch_cate_page, p) for p in range(c_page, batch_end+1)] - for fut in as_completed(tasks): - for v in fut.result(): - if key in v['vod_name'] and v['vod_id'] not in [x['vod_id'] for x in vods]: - vods.append(v) - stop = True - exe.shutdown(wait=False) - break - if stop: break - c_page = batch_end + 1 - return vods - - def searchContent(self, key, quick, pg="1"): - if self.search_mode: - return {'list': self.custom_search(key), 'page': int(pg), 'pagecount': 100, 'limit': 90, 'total': len(self.custom_search(key))} - if 'xiaohys.com' in self.xurl: - data = self.fetch(f'{self.xurl.split("api.php")[0]}index.php/ajax/suggest?mid=1&wd={key}', timeout=self.search_timeout, verify=False).json() - return {'list': [{"vod_id": i['id'], "vod_name": i['name'], "vod_pic": i.get('pic')} for i in data['list']], 'page': pg, 'pagecount': 999, 'limit': 30, 'total': 9999} - payload = {'keywords': key, 'type_id': "0", 'page': str(pg)} - if self.search_verify: - if self.verify_code and len(self.verify_code) == 4 and self.verify_code.isdigit(): - verifi = {'code': self.verify_code, 'uuid': str(uuid.uuid4())} - else: - verifi = self.verification() - if not verifi: return {'list': [], 'page': pg, 'pagecount': 0, 'limit': 30, 'total': 0} - payload.update({'code': verifi['code'], 'key': verifi['uuid']}) - search_url = f'{self.xurl}{self.search_index_suffix}' if self.is_api3 else f'{self.xurl}.index/{self.search_index_suffix}' - res = self.post(search_url, data=payload, headers=self.get_headers(), verify=False, timeout=self.search_timeout).json() - if not res.get('data'): return {'list': [], 'msg': res.get('msg'), 'page': pg, 'pagecount': 0, 'limit': 30, 'total': 0} - return {'list': self.arr2vods(json.loads(self.decrypt(res['data']))['search_list']), 'page': pg, 'pagecount': 999, 'limit': 30, 'total': 9999} - - def detailContent(self, ids): - did = ids[0] - payload = {'vod_id': did} - api_endpoints = ['vodDetail2', 'vodDetail3'] if 'qijiappapi' in self.xurl else ['vodDetail'] - self.login() - for endpoint in api_endpoints: - detail_url = f'{self.xurl}{endpoint}' if self.is_api3 else f'{self.xurl}.index/{endpoint}' - resp = self.post(detail_url, headers=self.get_headers(), data=payload, verify=False) - if resp.status_code == 200: - resp_data = resp.json() - if any(msg in resp_data.get('msg', '') for msg in ['到期', '请先注册登录', '积分', '会员', '登录', '注册']) or resp_data.get('code') == 0: - if self.auto_vip_enabled and not self.vip_purchased and self.retry_count < 1 and not self.auto_vip_triggered: - self.silent_register_and_buy_vip() - self.vip_purchased = True - self.retry_count += 1 - return self.detailContent(ids) - return None - kjson = json.loads(self.decrypt(resp_data['data'])) - filter_keywords = {'防走丢', '群', '防失群', '官网'} | set(self.line_block) - valid_lines = self.fuzzy_sort_lines([{'player_show': line['player_info']['show'], 'parse': line['player_info']['parse'], 'parse_type': line['player_info']['parse_type'], 'player_parse_type': line['player_info']['player_parse_type'], 'urls': line['urls']} for line in kjson['vod_play_list'] if not any(kw in line['player_info']['show'] for kw in filter_keywords)]) - play_form, play_url, name_count = [], [], {} - for line in valid_lines: - show_name = line['player_show'] - name_count[show_name] = name_count.get(show_name, 0) + 1 - if name_count[show_name] > 1: show_name += str(name_count[show_name]) - play_form.append(show_name) - play_url.append('#'.join([f"{vod['name']}${line['parse']},{vod['url']},token+{vod['token']},{line['player_parse_type']},{line['parse_type']}" for vod in line['urls']])) - vod = kjson['vod'] - return {'list': [{"vod_id": did, "vod_name": vod['vod_name'], "vod_actor": vod['vod_actor'].replace('演员', ''), "vod_director": vod.get('vod_director', '').replace('导演', ''), "vod_content": vod['vod_content'], "vod_remarks": vod['vod_remarks'], "vod_year": vod['vod_year'], "vod_area": vod['vod_area'], "vod_play_from": '$$$'.join(play_form), "vod_play_url": '$$$'.join(play_url)}]} - return None - - def playerContent(self, flag, vid, vip_Flags): - uid, raw_url, token, player_parse_type, parse_type = vid.split(',', 4) - token = token.replace('token+', '') - default_header = {'User-Agent': 'Dalvik/2.1.0 (Linux; U; Android 14; 23113RK12C Build/SKQ1.231004.001)'} - if parse_type == '0': return {"parse": 0, "url": raw_url, "header": default_header} - elif parse_type == '2': return {"parse": 1, "url": f'{uid}{raw_url}', "header": default_header} - elif player_parse_type == '2': - try: url = self.fetch(f'{uid}{raw_url}', headers=self.get_headers(1), verify=False).json().get('url', '') - except: url = '' - return {"parse": 0, "url": url, "header": default_header} - try: - parse_url = f'{self.xurl}vodParse' if self.is_api3 else f'{self.xurl}.index/vodParse' - resp = self.post(parse_url, headers=self.get_headers(), data={'parse_api': uid, 'url': self.encrypt(raw_url), 'player_parse_type': player_parse_type, 'token': token}, verify=False).json() - url = json.loads(json.loads(self.decrypt(resp['data']))['json']).get('url', '') - except: url = '' - return {"parse": 0, "playUrl": '', "url": url, "header": default_header} - - def _is_captcha_error(self, response_msg): - return any(kw in response_msg for kw in ["验证码", "captcha", "code", "验证", "校验"]) - - def _silent_register_core(self): - try: - device_id = self.device_id or ''.join(random.choices('0123456789abcdef', k=33)) - username = ''.join(random.choices('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', k=10)) - password = ''.join(random.choices('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', k=10)) - timestamp = str(int(time.time())) - verifi = None - if self.auto_vip == 2: - for _ in range(2): - verifi = self.verification() - if verifi: break - time.sleep(0.5) - if not verifi: return None, None - code = verifi['code'] if (self.auto_vip == 2 and verifi) else "" - key = verifi['uuid'] if (self.auto_vip == 2 and verifi) else str(uuid.uuid4()) - register_data = json.dumps({"password": password, "code": code, "device_id": device_id, "user_name": username, "invite_code": "", "key": key, "is_emulator": 0}, separators=(',', ':')) - headers = self.get_headers().copy() - headers.update({"app-version-code": self.version or "120", "app-ui-mode": "light", "app-user-device-id": device_id, "app-api-verify-time": timestamp, "app-api-verify-sign": self.generate_signature(timestamp), "Content-Type": "application/x-www-form-urlencoded", "Connection": "Keep-Alive", "Accept-Encoding": "gzip"}) - reg_url = f'{self.xurl}appRegisterV133' if self.is_api3 else f'{self.xurl}.index/appRegisterV133' - resp = self.post(reg_url, headers=headers, data={"data": self.encrypt(register_data)}, verify=False, timeout=10) - if resp.status_code == 200: - resp_json = resp.json() - if resp_json.get("code") != 1 and self._is_captcha_error(resp_json.get("msg", "")) and self.auto_vip == 2: - verifi = self.verification() - if verifi: - code = verifi['code'] - key = verifi['uuid'] - register_data = json.dumps({"password": password, "code": code, "device_id": device_id, "user_name": username, "invite_code": "", "key": key, "is_emulator": 0}, separators=(',', ':')) - resp = self.post(reg_url, headers=headers, data={"data": self.encrypt(register_data)}, verify=False, timeout=10) - resp_json = resp.json() - if resp_json.get("code") == 1: - token = json.loads(self.decrypt(resp_json["data"]))['user'].get('auth_token') - if token: return token, device_id - except: pass - return None, None - - def silent_register_and_buy_vip(self): - max_retries = 3 - for _ in range(max_retries): - token, device_id = self._silent_register_core() - if token and device_id: - self.def_headers.update({'app-user-token': token, 'app-user-device-id': device_id}) - self.device_id = device_id - self.save_token_cache(token, device_id) - self.silent_buy_vip(token, device_id) - self.auto_vip_triggered = True - return True - if self.auto_vip == 2: time.sleep(1) - return False - - def silent_buy_vip(self, token, device_id): - try: - timestamp = str(int(time.time())) - headers = self.get_headers().copy() - headers.update({"app-version-code": self.version or "120", "app-ui-mode": "light", "app-user-device-id": device_id, "app-user-token": token, "app-api-verify-time": timestamp, "app-api-verify-sign": self.generate_signature(timestamp), "Content-Type": "application/x-www-form-urlencoded", "Connection": "Keep-Alive", "Accept-Encoding": "gzip"}) - buy_vip_url = f'{self.xurl}userBuyVip' if self.is_api3 else f'{self.xurl}.index/userBuyVip' - resp = self.post(buy_vip_url, headers=headers, data={"index": "0"}, verify=False, timeout=10) - return resp.status_code == 200 and resp.json().get("code") == 1 - except: return True - - def arr2vods(self, arr): - return [{'vod_id': item['vod_id'], 'vod_name': item['vod_name'], 'vod_pic': item.get('vod_pic'), 'vod_remarks': item.get('vod_remarks')} for item in arr if isinstance(arr, list) and item.get('vod_id')] - - def decrypt(self, encrypted_data_b64): - cipher = AES.new(self.key.encode('utf-8'), AES.MODE_CBC, self.iv.encode('utf-8')) - return unpad(cipher.decrypt(base64.b64decode(encrypted_data_b64)), AES.block_size).decode('utf-8') - - def encrypt(self, sencrypted_data): - cipher = AES.new(self.key.encode('utf-8'), AES.MODE_CBC, self.iv.encode('utf-8')) - return base64.b64encode(cipher.encrypt(pad(sencrypted_data.encode('utf-8'), AES.block_size))).decode('utf-8') - - def verification(self): - try: - uuid_str = str(uuid.uuid4()) - verify_url = f'{self.xurl}verify/create?key={uuid_str}' if self.is_api3 else f'{self.xurl}.verify/create?key={uuid_str}' - img_data = self.fetch(verify_url, headers=self.get_headers(), verify=False).content - if not img_data: return None - code = self.ocr(base64.b64encode(img_data).decode('utf-8')) - if not code: return None - replacements = {'y':'9','口':'0','q':'0','u':'0','o':'0','>':'1','d':'0','b':'8','已':'2','D':'0','五':'5'} - if len(code) == 3: code = code.replace('566', '5066').replace('066', '1666') - code = ''.join(replacements.get(c, c) for c in code) - return {'uuid': uuid_str, 'code': code} if len(code) == 4 and code.isdigit() else None - except: return None - - def ocr(self, base64img): - try: return self.post('https://api.nn.ci/ocr/b64/text', data=base64img, headers=self.get_headers(1), verify=False).text.strip() or None - except: return None - - def localProxy(self, params): - proxy_map = {"m3u8": self.proxyM3u8, "media": self.proxyMedia, "ts": self.proxyTs} - return proxy_map.get(params.get('type'))(params) if proxy_map.get(params.get('type')) else None - - def getName(self): pass - def isVideoFormat(self, url): pass - def manualVideoCheck(self): pass diff --git a/Ye-11X115490_PsyDuck4k/lib/AppYsV2.js b/Ye-11X115490_PsyDuck4k/lib/AppYsV2.js deleted file mode 100644 index b6cf7d78..00000000 --- a/Ye-11X115490_PsyDuck4k/lib/AppYsV2.js +++ /dev/null @@ -1,1068 +0,0 @@ -import { Crypto, _ } from 'assets://js/lib/cat.js' - -let host = ''; -let header = { - 'User-Agent': 'okhttp/3.12.11' -}; -let siteKey = ''; -let siteType = ''; -let siteJx = ''; - -const urlPattern1 = /api\.php\/.*?\/vod/; -const urlPattern2 = /api\.php\/.+?\.vod/; -const parsePattern = /\/.+\\?.+=/; -const parsePattern1 = /.*(url|v|vid|php\?id)=/; -const parsePattern2 = /https?:\/\/[^\/]*/; - -const htmlVideoKeyMatch = [ - /player=new/, - /
0) { - let episodeName = segment.substring(0, dollarInSegment); - let urlPart = segment.substring(dollarInSegment); - episodeName = episodeName.replace(/奇迹云/g, ''); - result += episodeName + urlPart; - } else { - result += segment.replace(/奇迹云/g, ''); - } - result += sep; - i = found + sep.length; - } else { - // 最后一段 - let segment = playUrl.substring(i); - let dollarInSegment = segment.indexOf('$'); - if (dollarInSegment > 0) { - let episodeName = segment.substring(0, dollarInSegment); - let urlPart = segment.substring(dollarInSegment); - episodeName = episodeName.replace(/奇迹云/g, ''); - result += episodeName + urlPart; - } else { - result += segment.replace(/奇迹云/g, ''); - } - break; - } - } - return result; -} - -async function detail(ids) { - try { - // 苹果CMS V10模式检测 - if (host.includes('/vod') || host.includes('/provide/vod')) { - const url = `${host}?ac=detail&ids=${ids}`; - const json = await request(url, getHeaders(url)); - const obj = JSON.parse(json); - const result = { list: [] }; - const vod = {}; - - const data = obj.list && obj.list[0] ? obj.list[0] : {}; - vod.vod_id = data.vod_id || ids; - vod.vod_name = (data.vod_name || "").replace(/奇迹云/g, ''); - vod.vod_pic = data.vod_pic || ""; - vod.type_name = (data.type_name || "").replace(/奇迹云/g, ''); - vod.vod_year = (data.vod_year || "").replace(/奇迹云/g, ''); - vod.vod_area = (data.vod_area || "").replace(/奇迹云/g, ''); - vod.vod_remarks = (data.vod_remarks || "").replace(/奇迹云/g, ''); - vod.vod_actor = (data.vod_actor || "").replace(/奇迹云/g, ''); - vod.vod_director = (data.vod_director || "").replace(/奇迹云/g, ''); - vod.vod_content = (data.vod_content || "").replace(/奇迹云/g, ''); - - // 处理线路名称 - let playFrom = data.vod_play_from || ""; - if (playFrom) { - let lines = playFrom.split('$$$'); - let newLines = []; - for (let line of lines) { - if (line && line.toLowerCase().includes('qijiyun4k')) { - newLines.push('狮子心4k专属🦁'); - } else { - newLines.push((line || "").replace(/奇迹云/g, '')); - } - } - vod.vod_play_from = newLines.join('$$$'); - } else { - vod.vod_play_from = ""; - } - - // 处理选集:只替换文字,保留原始分隔符和结构 - vod.vod_play_url = replacePlayUrlText(data.vod_play_url || ""); - - result.list.push(vod); - return JSON.stringify(result); - } else { - // 原有AppYsV2模式 - const apiUrl = host; - const url = getPlayUrlPrefix(apiUrl) + ids; - - const json = await request(url, getHeaders(url)); - const obj = JSON.parse(json); - const result = { - list: [], - }; - const vod = {}; - genPlayList(apiUrl, obj, json, vod, ids); - - // 替换详情中的所有文字 - if (vod.vod_name) vod.vod_name = vod.vod_name.replace(/奇迹云/g, ''); - if (vod.type_name) vod.type_name = vod.type_name.replace(/奇迹云/g, ''); - if (vod.vod_year) vod.vod_year = vod.vod_year.replace(/奇迹云/g, ''); - if (vod.vod_area) vod.vod_area = vod.vod_area.replace(/奇迹云/g, ''); - if (vod.vod_remarks) vod.vod_remarks = vod.vod_remarks.replace(/奇迹云/g, ''); - if (vod.vod_actor) vod.vod_actor = vod.vod_actor.replace(/奇迹云/g, ''); - if (vod.vod_director) vod.vod_director = vod.vod_director.replace(/奇迹云/g, ''); - if (vod.vod_content) vod.vod_content = vod.vod_content.replace(/奇迹云/g, ''); - - // 替换线路名称 - if (vod.vod_play_from) { - let lines = vod.vod_play_from.split('$$$'); - let newLines = []; - for (let line of lines) { - if (line && line.toLowerCase().includes('qijiyun4k')) { - newLines.push('狮子心4k专属🦁'); - } else { - newLines.push((line || "").replace(/奇迹云/g, '')); - } - } - vod.vod_play_from = newLines.join('$$$'); - } - - // 处理选集:只替换文字,保留原始分隔符和结构 - vod.vod_play_url = replacePlayUrlText(vod.vod_play_url || ""); - - result.list.push(vod); - return JSON.stringify(result); - } - } catch (e) { - SpiderDebug.log(e); - } - return ""; -} - -async function play(flag, id, vipFlags) { - try { - let parseUrls = siteJx[flag]; - if (!parseUrls) { - if (siteJx.hasOwnProperty('*')) { - parseUrls = siteJx['*']; - } else { - parseUrls = []; - } - } - - if (parseUrls.length > 0) { - const result = await getFinalVideo(flag, parseUrls, id); - if (result !== null) { - return JSON.stringify(result); - } - } - - if (isVideoFormat(id)) { - const result = { - parse: 0, - playUrl: "", - url: id - }; - return JSON.stringify(result); - } else { - const result = { - parse: 1, - jx: "1", - url: id - }; - return JSON.stringify(result); - } - } catch (e) { - SpiderDebug.log(e); - } - return ""; -} - -async function search(key, quick) { - try { - // 苹果CMS V10模式检测 - if (host.includes('/vod') || host.includes('/provide/vod')) { - const url = `${host}?ac=videolist&wd=${encodeURIComponent(key)}&pg=1`; - const json = await request(url, getHeaders(url)); - const obj = JSON.parse(json); - const videos = []; - - if (obj.list && Array.isArray(obj.list)) { - for (const item of obj.list) { - videos.push({ - vod_id: item.vod_id, - vod_name: (item.vod_name || "").replace(/奇迹云/g, ''), - vod_pic: item.vod_pic || "", - vod_remarks: (item.vod_remarks || "").replace(/奇迹云/g, '') - }); - } - } - return JSON.stringify({ list: videos }); - } else { - // 原有AppYsV2模式 - const apiUrl = host; - const url = getSearchUrl(apiUrl, encodeURIComponent(key)); - const json = await request(url, getHeaders(url)); - const obj = JSON.parse(json); - let jsonArray = null; - const videos = []; - - if (obj.list instanceof Array) { - jsonArray = obj.list; - } else if (obj.data instanceof Object && obj.data.list instanceof Array) { - jsonArray = obj.data.list; - } else if (obj.data instanceof Array) { - jsonArray = obj.data; - } - - if (jsonArray !== null) { - for (const vObj of jsonArray) { - if (vObj.vod_id) { - const v = { - vod_id: vObj.vod_id, - vod_name: (vObj.vod_name || "").replace(/奇迹云/g, ''), - vod_pic: vObj.vod_pic, - vod_remarks: (vObj.vod_remarks || "").replace(/奇迹云/g, '') - }; - videos.push(v); - } else { - const v = { - vod_id: vObj.nextlink, - vod_name: (vObj.title || "").replace(/奇迹云/g, ''), - vod_pic: vObj.pic, - vod_remarks: (vObj.state || "").replace(/奇迹云/g, '') - }; - videos.push(v); - } - } - } - - const result = { list: videos }; - return JSON.stringify(result); - } - } catch (error) { - SpiderDebug.log(error); - } - return ""; -} - -// 辅助函数 -async function getFinalVideo(flag, parseUrls, url) { - let htmlPlayUrl = ""; - for (const parseUrl of parseUrls) { - if (parseUrl === "" || parseUrl === "null") { - continue; - } - const playUrl = parseUrl + url; - const content = await request(playUrl, null, 10000); - let tryJson = null; - try { - tryJson = jsonParse(url, content); - } catch (error) { } - - if (tryJson !== null && tryJson.hasOwnProperty("url") && tryJson.hasOwnProperty("header")) { - tryJson.header = JSON.stringify(tryJson.header); - return tryJson; - } - - if (content.includes(" { - if (purl && !parseUrls.includes(purl)) { - parseUrls.push(purl); - } - }); - } - if (from.player_info?.parse2) { - const parse2 = from.player_info.parse2.split(","); - parse2.forEach(purl => { - if (purl && !parseUrls.includes(purl)) { - parseUrls.push(purl); - } - }); - } - parseUrlMap.set(flag, parseUrls); - } catch (e) { - SpiderDebug.log(e); - } - } - } - } else if (urlPattern1.test(URL)) { - const data = object.list && object.list[0] ? object.list[0] : {}; - vod.vod_id = data.vod_id || vid; - vod.vod_name = data.vod_name || ""; - vod.vod_pic = data.vod_pic || ""; - vod.type_name = data.type_name || ""; - vod.vod_year = data.vod_year || ""; - vod.vod_area = data.vod_area || ""; - vod.vod_remarks = data.vod_remarks || ""; - vod.vod_actor = data.vod_actor || ""; - vod.vod_director = data.vod_director || ""; - vod.vod_content = data.vod_content || ""; - - vod.vod_play_from = data.vod_play_from || ""; - vod.vod_play_url = data.vod_play_url || ""; - } - - // 合并播放源 - if (playFlags.length > 0 && playUrls.length > 0) { - vod.vod_play_from = playFlags.join("$$$"); - vod.vod_play_url = playUrls.join("$$$"); - } -} - -function jsonParse(input, json) { - try { - let jsonPlayData = JSON.parse(json); - if (jsonPlayData.hasOwnProperty("data") && typeof jsonPlayData.data === "object" && !jsonPlayData.hasOwnProperty("url")) { - jsonPlayData = jsonPlayData.data; - } - - let url = jsonPlayData.url; - - if (url.startsWith("//")) { - url = "https:" + url; - } - if (!url.trim().startsWith("http")) { - return null; - } - if (url === input) { - if (isVip(url) || !isVideoFormat(url)) { - return null; - } - } - if (isBlackVodUrl(input, url)) { - return null; - } - - let headers = {}; - if (jsonPlayData.hasOwnProperty("header")) { - headers = jsonPlayData.header; - } else if (jsonPlayData.hasOwnProperty("Header")) { - headers = jsonPlayData.Header; - } else if (jsonPlayData.hasOwnProperty("headers")) { - headers = jsonPlayData.headers; - } else if (jsonPlayData.hasOwnProperty("Headers")) { - headers = jsonPlayData.Headers; - } - - let ua = ""; - if (jsonPlayData.hasOwnProperty("user-agent")) { - ua = jsonPlayData["user-agent"]; - } else if (jsonPlayData.hasOwnProperty("User-Agent")) { - ua = jsonPlayData["User-Agent"]; - } - if (ua.trim().length > 0) { - headers["User-Agent"] = " " + ua; - } - - let referer = ""; - if (jsonPlayData.hasOwnProperty("referer")) { - referer = jsonPlayData.referer; - } else if (jsonPlayData.hasOwnProperty("Referer")) { - referer = jsonPlayData.Referer; - } - if (referer.trim().length > 0) { - headers["Referer"] = " " + referer; - } - - headers = fixJsonVodHeader(headers, input, url); - - const taskResult = { - header: headers, - url: url, - parse: "0" - }; - - return taskResult; - } catch (error) { - SpiderDebug.log(error); - } - return null; -} - -function isVip(url) { - try { - let isVip = false; - const host = new URL(url).hostname; - const vipWebsites = ["iqiyi.com", "v.qq.com", "youku.com", "le.com", "tudou.com", "mgtv.com", "sohu.com", "acfun.cn", "bilibili.com", "baofeng.com", "pptv.com"]; - for (let b = 0; b < vipWebsites.length; b++) { - if (host.includes(vipWebsites[b])) { - if (vipWebsites[b] === "iqiyi.com") { - if (url.includes("iqiyi.com/a_") || url.includes("iqiyi.com/w_") || url.includes("iqiyi.com/v_")) { - isVip = true; - break; - } - } else { - isVip = true; - break; - } - } - } - return isVip; - } catch (e) { - SpiderDebug.log(e); - } - return false; -} - -function isBlackVodUrl(input, url) { - return url.includes("973973.xyz") || url.includes(".fit:"); -} - -function fixJsonVodHeader(headers, input, url) { - if (headers === null) { - headers = {}; - } - - if (input.includes("www.mgtv.com")) { - headers["Referer"] = " "; - headers["User-Agent"] = " Mozilla/5.0"; - } else if (url.includes("titan.mgtv")) { - headers["Referer"] = " "; - headers["User-Agent"] = " Mozilla/5.0"; - } else if (input.includes("bilibili")) { - headers["Referer"] = " https://www.bilibili.com/"; - headers["User-Agent"] = " " + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"; - } - - return headers; -} - -const snifferMatch = /http((?!http).){26,}?\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg)\?.*|http((?!http).){26,}\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg)|http((?!http).){26,}\/m3u8\?pt=m3u8.*|http((?!http).)*?default\.ixigua\.com\/.*|http((?!http).)*?cdn-tos[^\?]*|http((?!http).)*?\/obj\/tos[^\?]*|http.*?\/player\/m3u8play\.php\?url=.*|http.*?\/player\/.*?[pP]lay\.php\?url=.*|http.*?\/playlist\/m3u8\/\?vid=.*|http.*?\.php\?type=m3u8&.*|http.*?\/download.aspx\?.*|http.*?\/api\/up_api.php\?.*|https.*?\.66yk\.cn.*|http((?!http).)*?netease\.com\/file\/.*/; - -function isVideoFormat(url) { - if (snifferMatch.test(url)) { - return !url.includes("cdn-tos") || !url.includes(".js"); - } - return false; -} - -function isVideo(url) { - return !url.includes(".mp4") && !url.includes(".m3u8"); -} - -function UA(url) { - if (url.includes(".vod")) { - return "okhttp/4.1.0"; - } - return "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"; -} - -function getCateUrl(URL) { - if (URL.includes("api.php/app") || URL.includes("xgapp")) { - return URL + "nav?token="; - } else if (URL.includes(".vod")) { - return URL + "/types"; - } else { - return ""; - } -} - -function getPlayUrlPrefix(URL) { - if (URL.includes("api.php/app") || URL.includes("xgapp")) { - return URL + "video_detail?id="; - } else if (URL.includes(".vod")) { - return URL + "/detail?vod_id="; - } else { - return ""; - } -} - -function getRecommendUrl(URL) { - if (URL.includes("api.php/app") || URL.includes("xgapp")) { - return URL + "index_video?token="; - } else if (URL.includes(".vod")) { - return URL + "/vodPhbAll"; - } else { - return ""; - } -} - -function getFilterTypes(URL, typeExtend) { - let str = ""; - - if (typeExtend !== null) { - for (let key in typeExtend) { - if (key === "class" || key === "area" || key === "lang" || key === "year") { - try { - str += "筛选" + key + "+全部=+" + typeExtend[key].replace(/,/g, "+") + "\n"; - } catch (e) { } - } - } - } - - if (URL.includes(".vod")) { - str += "\n" + "排序+全部=+最新=time+最热=hits+评分=score"; - } else if (URL.includes("api.php/app") || URL.includes("xgapp")) { - // Do nothing, leave the string as it is. - } else { - str = "分类+全部=+电影=movie+连续剧=tvplay+综艺=tvshow+动漫=comic+4K=movie_4k+体育=tiyu\n筛选class+全部=+喜剧+爱情+恐怖+动作+科幻+剧情+战争+警匪+犯罪+动画+奇幻+武侠+冒险+枪战+恐怖+悬疑+惊悚+经典+青春+文艺+微电影+古装+历史+运动+农村+惊悚+惊悚+伦理+情色+福利+三级+儿童+网络电影\n筛选area+全部=+大陆+香港+台湾+美国+英国+法国+日本+韩国+德国+泰国+印度+西班牙+加拿大+其他\n筛选year+全部=+2025+2024+2023+2022+2021+2020+2019+2018+2017+2016+2015+2014+2013+2012+2011+2010+2009+2008+2007+2006+2005+2004+2003+2002+2001+2000"; - } - - return str; -} - -function getCateFilterUrlSuffix(URL) { - if (URL.includes("api.php/app") || URL.includes("xgapp")) { - return "&class=筛选class&area=筛选area&lang=筛选lang&year=筛选year&limit=18&pg=#PN#"; - } else if (URL.includes(".vod")) { - return "&class=筛选class&area=筛选area&lang=筛选lang&year=筛选year&by=排序&limit=18&page=#PN#"; - } else { - return "&page=#PN#&area=筛选area&type=筛选class&start=筛选year"; - } -} - -function getCateFilterUrlPrefix(URL) { - if (URL.includes("api.php/app") || URL.includes("xgapp")) { - return URL + "video?tid="; - } else if (URL.includes(".vod")) { - return URL + "?type="; - } else { - return URL + "?ac=list&class="; - } -} - -function isBan(key) { - return key === "伦理" || key === "情色" || key === "福利"; -} - -function getSearchUrl(URL, KEY) { - if (URL.includes(".vod")) { - return URL + "?wd=" + KEY + "&page="; - } else if (URL.includes("api.php/app") || URL.includes("xgapp")) { - return URL + "search?text=" + KEY + "&pg="; - } else if (urlPattern1.test(URL)) { - return URL + "?ac=list&zm=" + KEY + "&page="; - } - return ""; -} - -function findJsonArray(obj, match, result) { - Object.keys(obj).forEach((k) => { - try { - const o = obj[k]; - if (k === match && Array.isArray(o)) { - result.push(o); - } - if (typeof o === "object" && o !== null) { - if (Array.isArray(o)) { - o.forEach((item) => { - if (typeof item === "object" && item !== null) { - findJsonArray(item, match, result); - } - }); - } else { - findJsonArray(o, match, result); - } - } - } catch (e) { - SpiderDebug.log(e); - } - }); -} - -function jsonArr2Str(array) { - const strings = []; - for (let i = 0; i < array.length; i++) { - try { - strings.push(array[i]); - } catch (e) { - SpiderDebug.log(e); - } - } - return strings.join(","); -} - -function getHeaders(URL) { - const headers = {}; - headers["User-Agent"] = UA(URL); - return headers; -} - -function isJsonString(str) { - try { - JSON.parse(str); - } catch (e) { - return false; - } - return true; -} - -export function __jsEvalReturn() { - return { - init: init, - home: home, - homeVod: homeVod, - category: category, - detail: detail, - play: play, - search: search, - }; -} \ No newline at end of file diff --git a/Ye-11X115490_PsyDuck4k/lib/PsyDuck-Qiji.py b/Ye-11X115490_PsyDuck4k/lib/PsyDuck-Qiji.py deleted file mode 100644 index 2c68607c..00000000 --- a/Ye-11X115490_PsyDuck4k/lib/PsyDuck-Qiji.py +++ /dev/null @@ -1,391 +0,0 @@ -# coding = utf-8 -# !/usr/bin/python -#熊修,可py内部填写,也可以和潇洒appget一样ext下面填写,外部填写会覆盖py内部填写 - -from Crypto.Cipher import AES -from base.spider import Spider -from Crypto.Util.Padding import pad,unpad -import re,sys,time,uuid,json,base64,urllib3 -urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) -sys.path.append('..') - -class Spider(Spider): - xurl,key,iv,init_data,search_verify,suggest_search,username,password,device_id,version,get_type,def_headers= '','','','','','','', '', '','', '0',{'User-Agent': 'okhttp/3.14.9'} - - def init(self, extend=''): - ext=json.loads(extend.strip()) - - api = str(ext.get('api', 'getappapi')) - if api == '2' or api == 'qiji': - self.get_type = 'qiji' - api_path = '/api.php/qijiappapi' - elif api == 'flutter': - self.get_type = 'flutter' - api_path = '/api.php/getappapi' - else: - self.get_type = 'get' - api_path = '/api.php/getappapi' - - host_source = '' - if 'host' in ext: - host_source = ext['host'] - elif 'url' in ext: - host_source = ext['url'] - elif 'site' in ext: - host_source = ext['site'] - - if not host_source: - print("错误: 需要提供host、url或site参数") - return - - domain_set = set() - - if not re.match(r'^https?://[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(:\d+)?(/)?$', host_source): - try: - host_data = self.fetch(host_source, headers=self.get_headers(1), timeout=10, verify=False).text - domain_set.update([domain.strip() for domain in host_data.split('\n') if domain.strip()]) - except Exception as e: - print(f"获取站点文件失败: {e}") - return - else: - domain_set.add(host_source.rstrip('/')) - - ua = ext.get('ua') - if ua: - self.def_headers['User-Agent'] = ua - - token = ext.get('token') - if token: - self.def_headers['app-user-token'] = token - else: - self.username = ext.get('username') - self.password = ext.get('password') - - self.device_id = ext.get('deviceId') or ext.get('devideid') or '1234567890ABCDEF' - self.version = str(ext.get('version', '1.0.0')) - - self.key = ext.get('key') or ext.get('datakey') or ext.get('dataKey') - if not self.key: - print("错误: 需要提供加密密钥(key/datakey/dataKey)") - return - - self.iv = ext.get('iv') or ext.get('dataiv') or ext.get('dataIv') or self.key - - if self.device_id: - self.def_headers['app-user-device-id'] = self.device_id - - for i in domain_set: - try: - self.xurl = i + api_path - res = self.fetch(self.xurl + '.index/initV119', headers=self.get_headers(), timeout=(5, 5), verify=False).json() - encrypted_data = res['data'] - response = self.decrypt(encrypted_data) - init_data = json.loads(response) - except Exception as e: - print(f"连接失败: {e}") - continue - if init_data: - self.init_data = init_data - self.search_verify = init_data['config'].get('system_search_verify_status', False) - if 'xiaohys.com' in i: - self.suggest_search = '1' - print(f"初始化成功: {i}") - break - - def homeContent(self, filter): - kjson = self.init_data - result = {"class": [], "filters": {}} - for i in kjson['type_list']: - if not(i['type_name'] in {'全部', 'QQ', 'juo.one'} or '企鹅群' in i['type_name']): - result['class'].append({"type_id": i['type_id'], "type_name": i['type_name']}) - name_mapping = {'class': '类型', 'area': '地区', 'lang': '语言', 'year': '年份', 'sort': '排序'} - filter_items = [] - for filter_type in i.get('filter_type_list', []): - filter_name = filter_type.get('name') - values = filter_type.get('list', []) - if not values: continue - value_list = [{"n": value, "v": value} for value in values] - display_name = name_mapping.get(filter_name, filter_name) - key = 'by' if filter_name == 'sort' else filter_name - filter_items.append({ "key": key, "name": display_name, "value": value_list}) - type_id = i.get('type_id') - if filter_items: - result["filters"][str(type_id)] = filter_items - return result - - def homeVideoContent(self): - videos = [] - kjson = self.init_data - for i in kjson['type_list']: - videos.extend(self.arr2vods(i['recommend_list'])) - return {'list': videos} - - def categoryContent(self, cid, pg, filter, ext): - payload = { - 'area': ext.get('area','全部'), - 'year': ext.get('year','全部'), - 'type_id': cid, - 'page': str(pg), - 'sort': ext.get('sort','最新'), - 'lang': ext.get('lang','全部'), - 'class': ext.get('class','全部') - } - res = self.post(f'{self.xurl}.index/typeFilterVodList', headers=self.get_headers(), data=payload, verify=False).json() - encrypted_data = res['data'] - kjson = self.decrypt(encrypted_data) - kjson1 = json.loads(kjson) - videos = self.arr2vods(kjson1['recommend_list']) - return {'list': videos, 'page': pg, 'pagecount': 9999, 'limit': 90, 'total': 999999} - - def searchContent(self, key, quick, pg="1"): - videos = [] - if self.suggest_search == '1': - host = self.xurl.split('api.php')[0] - data = self.fetch(f'{host}index.php/ajax/suggest?mid=1&wd={key}').json() - for i in data['list']: - videos.append({ - "vod_id": i['id'], - "vod_name": i['name'], - "vod_pic": i.get('pic') - }) - else: - payload = {'keywords': key, 'type_id': "0", 'page': str(pg)} - if self.search_verify: - verifi = self.verification() - if verifi is None: - return {'list':[]} - payload['code'] = verifi['code'] - payload['key'] = verifi['uuid'] - res = self.post(f'{self.xurl}.index/searchList', data=payload, headers=self.get_headers(), verify=False).json() - if not res.get('data'): - return {'list':[] ,'msg': res.get('msg')} - encrypted_data = res['data'] - kjson = self.decrypt(encrypted_data) - kjson1 = json.loads(kjson) - videos.extend(self.arr2vods(kjson1['search_list'])) - return {'list': videos, 'page': pg} - - def detailContent(self, ids): - payload = {'vod_id': ids[0]} - if 'qijiappapi' in self.xurl: - api_endpoints = ['vodDetail2', 'vodDetail3'] - else: - api_endpoints = ['vodDetail'] - self.login() - response = {} - for endpoint in api_endpoints: - try: - response = self.post(f'{self.xurl}.index/{endpoint}', headers=self.get_headers(), data=payload, verify=False).json() - except Exception: - continue - if '到期' in response['msg'] or response['code'] == 0: - return None - break - if not response: return None - encrypted_data = response['data'] - kjson1 = self.decrypt(encrypted_data) - kjson = json.loads(kjson1) - videos, play_form, play_url = [], [], [] - lineid = 1 - name_count = {} - for line in kjson['vod_play_list']: - keywords = {'防走丢', '群', '防失群', '官网'} - player_show = line['player_info']['show'] - if any(keyword in player_show for keyword in keywords): - player_show = f'{lineid}线' - line['player_info']['show'] = player_show - count = name_count.get(player_show, 0) + 1 - name_count[player_show] = count - if count > 1: - line['player_info']['show'] = f"{player_show}{count}" - play_form.append(line['player_info']['show']) - parse = line['player_info']['parse'] - parse_type = line['player_info']['parse_type'] - player_parse_type = line['player_info']['player_parse_type'] - kurls = [] - for vod in line['urls']: - token = vod['token'] - kurls.append(f"{str(vod['name'])}${parse},{vod['url']},{token},{player_parse_type},{parse_type}") - play_url.append('#'.join(kurls)) - lineid += 1 - play_form = '$$$'.join(play_form) - play_url = '$$$'.join(play_url) - videos.append({ - "vod_id": ids[0], - "vod_name": kjson['vod']['vod_name'], - "vod_actor": kjson['vod']['vod_actor'].replace('演员', ''), - "vod_director": kjson['vod'].get('vod_director', '').replace('导演', ''), - "vod_content": kjson['vod']['vod_content'], - "vod_remarks": kjson['vod']['vod_remarks'], - "vod_year": kjson['vod']['vod_year'], - "vod_area": kjson['vod']['vod_area'], - "vod_play_from": play_form, - "vod_play_url": play_url - }) - return {'list': videos} - - def playerContent(self, flag, vid, vip_flags): - url = '' - uid, raw_url, token, player_parse_type, parse_type = vid.split(',', 4) - if parse_type == '0': - res = {"parse": 0, "url": raw_url, "header": {'User-Agent': 'Dalvik/2.1.0 (Linux; U; Android 14; 23113RK12C Build/SKQ1.231004.001)'}} - elif parse_type == '2': - res = {"parse": 1, "url": f'{uid}{raw_url}', "header": {'User-Agent': 'Dalvik/2.1.0 (Linux; U; Android 14; 23113RK12C Build/SKQ1.231004.001)'}} - elif player_parse_type == '2': - try: - response = self.fetch(f'{uid}{raw_url}', headers=self.get_headers(1), verify=False).json() - url = response['url'] - except Exception: - pass - res = {"parse": 0, "url": url, "header": {'User-Agent': 'Dalvik/2.1.0 (Linux; U; Android 14; 23113RK12C Build/SKQ1.231004.001)'}} - else: - id1 = self.encrypt(raw_url) - payload = { - 'parse_api': uid, - 'url': id1, - 'player_parse_type': player_parse_type, - 'token': token - } - try: - response = self.post(f"{self.xurl}.index/vodParse", headers=self.get_headers(), data=payload, verify=False).json() - encrypted_data = response['data'] - kjson = self.decrypt(encrypted_data) - kjson1 = json.loads(kjson)['json'] - kjson2 = json.loads(kjson1) - url = kjson2['url'] - except Exception: - pass - res = {"parse": 0, "playUrl": '', "url": url, "header": {'User-Agent': 'Dalvik/2.1.0 (Linux; U; Android 14; 23113RK12C Build/SKQ1.231004.001)'}} - return res - - def localProxy(self, params): - if params['type'] == "m3u8": - return self.proxyM3u8(params) - elif params['type'] == "media": - return self.proxyMedia(params) - elif params['type'] == "ts": - return self.proxyTs(params) - return None - - def get_headers(self,main=0): - get_type = self.get_type - if get_type == 'qiji': - headers = { - 'User-Agent': 'okhttp/3.10.0', - 'Connection': 'Keep-Alive', - 'Accept-Encoding': 'gzip' - } - elif get_type == 'flutter': - main_headers = { - 'User-Agent': 'Dart/3.5 (dart:io)', - 'Accept-Encoding': 'gzip' - } - if main == 1: return main_headers - headers = { - 'User-Agent': '', - 'Accept-Encoding': '', - 'app-version-code': self.version, - 'app-os': 'android', - 'app-ui-mode': 'light', - **main_headers - } - else: - timestamp = str(int(time.time())) - main_headers ={ - 'User-Agent': 'okhttp/3.14.9', - 'Accept-Encoding': 'gzip' - } - if main == 1: return main_headers - headers = { - 'User-Agent': '', - 'Connection': 'Keep-Alive', - 'Accept-Encoding': '', - 'app-version-code': self.version, - 'app-ui-mode': 'light', - 'app-user-device-id': self.device_id, - 'app-api-verify-time': timestamp, - 'app-api-verify-sign': self.encrypt(timestamp), - 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', - **main_headers - } - return {**headers, **self.def_headers} - - def login(self): - if self.username and self.password and self.device_id: - payload = { - 'password': self.password, - 'code': "", - 'device_id': self.device_id, - 'user_name': self.username, - 'invite_code': "", - 'is_emulator': "0" - } - response = self.post(f'{self.xurl}.index/appLogin', data=payload, headers=self.get_headers()).json() - data = self.decrypt(response['data']) - auth_token = json.loads(data)['user']['auth_token'] - self.def_headers['app-user-token'] = auth_token - - def arr2vods(self, arr): - videos = [] - if arr and isinstance(arr, list): - for i in arr: - videos.append({ - 'vod_id': i['vod_id'], - 'vod_name': i['vod_name'], - 'vod_pic': i.get('vod_pic'), - 'vod_remarks': i.get('vod_remarks') - }) - return videos - - def decrypt(self, encrypted_data_b64): - key_bytes = self.key.encode('utf-8') - iv_bytes = self.iv.encode('utf-8') - encrypted_data = base64.b64decode(encrypted_data_b64) - cipher = AES.new(key_bytes, AES.MODE_CBC, iv_bytes) - decrypted_padded = cipher.decrypt(encrypted_data) - decrypted = unpad(decrypted_padded, AES.block_size) - return decrypted.decode('utf-8') - - def encrypt(self, sencrypted_data): - key_bytes = self.key.encode('utf-8') - iv_bytes = self.iv.encode('utf-8') - data_bytes = sencrypted_data.encode('utf-8') - padded_data = pad(data_bytes, AES.block_size) - cipher = AES.new(key_bytes, AES.MODE_CBC, iv_bytes) - encrypted_bytes = cipher.encrypt(padded_data) - encrypted_data_b64 = base64.b64encode(encrypted_bytes).decode('utf-8') - return encrypted_data_b64 - - def ocr(self, base64img): - dat2 = self.post('https://api.nn.ci/ocr/b64/text', data=base64img, headers=self.get_headers(1), verify=False).text - if dat2: return dat2 - return None - - def verification(self): - random_uuid = str(uuid.uuid4()) - dat = self.fetch(f'{self.xurl}.verify/create?key={random_uuid}', headers=self.get_headers(), verify=False).content - base64_img = base64.b64encode(dat).decode('utf-8') - if not dat: - return None - code = self.ocr(base64_img) - if not code: - return None - code = self.replace_code(code) - if not (len(code) == 4 and code.isdigit()): - return None - return {'uuid': random_uuid, 'code': code} - - def replace_code(self,text): - replacements = {'y':'9','口':'0','q':'0','u':'0','o':'0','>':'1','d':'0','b':'8','已':'2','D':'0','五':'5'} - if len(text) == 3: - text = text.replace('566', '5066').replace('066', '1666') - return ''.join(replacements.get(c, c) for c in text) - - def getName(self): - return "新版APPget" - - def isVideoFormat(self, url): - pass - - def manualVideoCheck(self): - pass \ No newline at end of file diff --git a/Ye-11X115490_PsyDuck4k/lib/PsyDuck-wp.jar b/Ye-11X115490_PsyDuck4k/lib/PsyDuck-wp.jar deleted file mode 100644 index b4a13574..00000000 Binary files a/Ye-11X115490_PsyDuck4k/lib/PsyDuck-wp.jar and /dev/null differ diff --git a/Ye-11X115490_PsyDuck4k/lib/drpy-core-lite.min.js b/Ye-11X115490_PsyDuck4k/lib/drpy-core-lite.min.js deleted file mode 100644 index 2aec8b04..00000000 --- a/Ye-11X115490_PsyDuck4k/lib/drpy-core-lite.min.js +++ /dev/null @@ -1 +0,0 @@ -var e={27:e=>{e.exports='(function(global,factory){typeof exports==="object"&&typeof module!=="undefined"?module.exports=factory():typeof define==="function"&&define.amd?define(factory):(global=typeof globalThis!=="undefined"?globalThis:global||self,global.JSON5=factory())})(this,function(){"use strict";function createCommonjsModule(fn,module){return module={exports:{}},fn(module,module.exports),module.exports}var _global=createCommonjsModule(function(module){var global=module.exports=typeof window!="undefined"&&window.Math==Math?window:typeof self!="undefined"&&self.Math==Math?self:Function("return this")();if(typeof __g=="number"){__g=global}});var _core=createCommonjsModule(function(module){var core=module.exports={version:"2.6.5"};if(typeof __e=="number"){__e=core}});var _core_1=_core.version;var _isObject=function(it){return typeof it==="object"?it!==null:typeof it==="function"};var _anObject=function(it){if(!_isObject(it)){throw TypeError(it+" is not an object!")}return it};var _fails=function(exec){try{return!!exec()}catch(e){return true}};var _descriptors=!_fails(function(){return Object.defineProperty({},"a",{get:function(){return 7}}).a!=7});var document=_global.document;var is=_isObject(document)&&_isObject(document.createElement);var _domCreate=function(it){return is?document.createElement(it):{}};var _ie8DomDefine=!_descriptors&&!_fails(function(){return Object.defineProperty(_domCreate("div"),"a",{get:function(){return 7}}).a!=7});var _toPrimitive=function(it,S){if(!_isObject(it)){return it}var fn,val;if(S&&typeof(fn=it.toString)=="function"&&!_isObject(val=fn.call(it))){return val}if(typeof(fn=it.valueOf)=="function"&&!_isObject(val=fn.call(it))){return val}if(!S&&typeof(fn=it.toString)=="function"&&!_isObject(val=fn.call(it))){return val}throw TypeError("Can\'t convert object to primitive value")};var dP=Object.defineProperty;var f=_descriptors?Object.defineProperty:function defineProperty(O,P,Attributes){_anObject(O);P=_toPrimitive(P,true);_anObject(Attributes);if(_ie8DomDefine){try{return dP(O,P,Attributes)}catch(e){}}if("get"in Attributes||"set"in Attributes){throw TypeError("Accessors not supported!")}if("value"in Attributes){O[P]=Attributes.value}return O};var _objectDp={f:f};var _propertyDesc=function(bitmap,value){return{enumerable:!(bitmap&1),configurable:!(bitmap&2),writable:!(bitmap&4),value:value}};var _hide=_descriptors?function(object,key,value){return _objectDp.f(object,key,_propertyDesc(1,value))}:function(object,key,value){object[key]=value;return object};var hasOwnProperty={}.hasOwnProperty;var _has=function(it,key){return hasOwnProperty.call(it,key)};var id=0;var px=Math.random();var _uid=function(key){return"Symbol(".concat(key===undefined?"":key,")_",(++id+px).toString(36))};var _library=false;var _shared=createCommonjsModule(function(module){var SHARED="__core-js_shared__";var store=_global[SHARED]||(_global[SHARED]={});(module.exports=function(key,value){return store[key]||(store[key]=value!==undefined?value:{})})("versions",[]).push({version:_core.version,mode:_library?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})});var _functionToString=_shared("native-function-to-string",Function.toString);var _redefine=createCommonjsModule(function(module){var SRC=_uid("src");var TO_STRING="toString";var TPL=(""+_functionToString).split(TO_STRING);_core.inspectSource=function(it){return _functionToString.call(it)};(module.exports=function(O,key,val,safe){var isFunction=typeof val=="function";if(isFunction){_has(val,"name")||_hide(val,"name",key)}if(O[key]===val){return}if(isFunction){_has(val,SRC)||_hide(val,SRC,O[key]?""+O[key]:TPL.join(String(key)))}if(O===_global){O[key]=val}else if(!safe){delete O[key];_hide(O,key,val)}else if(O[key]){O[key]=val}else{_hide(O,key,val)}})(Function.prototype,TO_STRING,function toString(){return typeof this=="function"&&this[SRC]||_functionToString.call(this)})});var _aFunction=function(it){if(typeof it!="function"){throw TypeError(it+" is not a function!")}return it};var _ctx=function(fn,that,length){_aFunction(fn);if(that===undefined){return fn}switch(length){case 1:return function(a){return fn.call(that,a)};case 2:return function(a,b){return fn.call(that,a,b)};case 3:return function(a,b,c){return fn.call(that,a,b,c)}}return function(){return fn.apply(that,arguments)}};var PROTOTYPE="prototype";var $export=function(type,name,source){var IS_FORCED=type&$export.F;var IS_GLOBAL=type&$export.G;var IS_STATIC=type&$export.S;var IS_PROTO=type&$export.P;var IS_BIND=type&$export.B;var target=IS_GLOBAL?_global:IS_STATIC?_global[name]||(_global[name]={}):(_global[name]||{})[PROTOTYPE];var exports=IS_GLOBAL?_core:_core[name]||(_core[name]={});var expProto=exports[PROTOTYPE]||(exports[PROTOTYPE]={});var key,own,out,exp;if(IS_GLOBAL){source=name}for(key in source){own=!IS_FORCED&&target&&target[key]!==undefined;out=(own?target:source)[key];exp=IS_BIND&&own?_ctx(out,_global):IS_PROTO&&typeof out=="function"?_ctx(Function.call,out):out;if(target){_redefine(target,key,out,type&$export.U)}if(exports[key]!=out){_hide(exports,key,exp)}if(IS_PROTO&&expProto[key]!=out){expProto[key]=out}}};_global.core=_core;$export.F=1;$export.G=2;$export.S=4;$export.P=8;$export.B=16;$export.W=32;$export.U=64;$export.R=128;var _export=$export;var ceil=Math.ceil;var floor=Math.floor;var _toInteger=function(it){return isNaN(it=+it)?0:(it>0?floor:ceil)(it)};var _defined=function(it){if(it==undefined){throw TypeError("Can\'t call method on "+it)}return it};var _stringAt=function(TO_STRING){return function(that,pos){var s=String(_defined(that));var i=_toInteger(pos);var l=s.length;var a,b;if(i<0||i>=l){return TO_STRING?"":undefined}a=s.charCodeAt(i);return a<55296||a>56319||i+1===l||(b=s.charCodeAt(i+1))<56320||b>57343?TO_STRING?s.charAt(i):a:TO_STRING?s.slice(i,i+2):(a-55296<<10)+(b-56320)+65536}};var $at=_stringAt(false);_export(_export.P,"String",{codePointAt:function codePointAt(pos){return $at(this,pos)}});var codePointAt=_core.String.codePointAt;var max=Math.max;var min=Math.min;var _toAbsoluteIndex=function(index,length){index=_toInteger(index);return index<0?max(index+length,0):min(index,length)};var fromCharCode=String.fromCharCode;var $fromCodePoint=String.fromCodePoint;_export(_export.S+_export.F*(!!$fromCodePoint&&$fromCodePoint.length!=1),"String",{fromCodePoint:function fromCodePoint(x){var arguments$1=arguments;var res=[];var aLen=arguments.length;var i=0;var code;while(aLen>i){code=+arguments$1[i++];if(_toAbsoluteIndex(code,1114111)!==code){throw RangeError(code+" is not a valid code point")}res.push(code<65536?fromCharCode(code):fromCharCode(((code-=65536)>>10)+55296,code%1024+56320))}return res.join("")}});var fromCodePoint=_core.String.fromCodePoint;var Space_Separator=/[\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/;var ID_Start=/[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u08A0-\\u08B4\\u08B6-\\u08BD\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312E\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FEA\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AE\\uA7B0-\\uA7B7\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD804[\\uDC03-\\uDC37\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDF00-\\uDF19]|\\uD806[\\uDCA0-\\uDCDF\\uDCFF\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE83\\uDE86-\\uDE89\\uDEC0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1]|\\uD821[\\uDC00-\\uDFEC]|\\uD822[\\uDC00-\\uDEF2]|\\uD82C[\\uDC00-\\uDD1E\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]/;var ID_Continue=/[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u0860-\\u086A\\u08A0-\\u08B4\\u08B6-\\u08BD\\u08D4-\\u08E1\\u08E3-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u09FC\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0AF9-\\u0AFF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58-\\u0C5A\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C80-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D00-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D54-\\u0D57\\u0D5F-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1C80-\\u1C88\\u1CD0-\\u1CD2\\u1CD4-\\u1CF9\\u1D00-\\u1DF9\\u1DFB-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312E\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FEA\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AE\\uA7B0-\\uA7B7\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C5\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA8FD\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2F\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDDFD\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDEE0\\uDF00-\\uDF1F\\uDF2D-\\uDF4A\\uDF50-\\uDF7A\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE38-\\uDE3A\\uDE3F\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE6\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD804[\\uDC00-\\uDC46\\uDC66-\\uDC6F\\uDC7F-\\uDCBA\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD00-\\uDD34\\uDD36-\\uDD3F\\uDD50-\\uDD73\\uDD76\\uDD80-\\uDDC4\\uDDCA-\\uDDCC\\uDDD0-\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE37\\uDE3E\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEEA\\uDEF0-\\uDEF9\\uDF00-\\uDF03\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3C-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF50\\uDF57\\uDF5D-\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC00-\\uDC4A\\uDC50-\\uDC59\\uDC80-\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDB5\\uDDB8-\\uDDC0\\uDDD8-\\uDDDD\\uDE00-\\uDE40\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEB7\\uDEC0-\\uDEC9\\uDF00-\\uDF19\\uDF1D-\\uDF2B\\uDF30-\\uDF39]|\\uD806[\\uDCA0-\\uDCE9\\uDCFF\\uDE00-\\uDE3E\\uDE47\\uDE50-\\uDE83\\uDE86-\\uDE99\\uDEC0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC36\\uDC38-\\uDC40\\uDC50-\\uDC59\\uDC72-\\uDC8F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD47\\uDD50-\\uDD59]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDED0-\\uDEED\\uDEF0-\\uDEF4\\uDF00-\\uDF36\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50-\\uDF7E\\uDF8F-\\uDF9F\\uDFE0\\uDFE1]|\\uD821[\\uDC00-\\uDFEC]|\\uD822[\\uDC00-\\uDEF2]|\\uD82C[\\uDC00-\\uDD1E\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99\\uDC9D\\uDC9E]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A]|\\uD83A[\\uDC00-\\uDCC4\\uDCD0-\\uDCD6\\uDD00-\\uDD4A\\uDD50-\\uDD59]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uDB40[\\uDD00-\\uDDEF]/;var unicode={Space_Separator:Space_Separator,ID_Start:ID_Start,ID_Continue:ID_Continue};var util={isSpaceSeparator:function isSpaceSeparator(c){return typeof c==="string"&&unicode.Space_Separator.test(c)},isIdStartChar:function isIdStartChar(c){return typeof c==="string"&&(c>="a"&&c<="z"||c>="A"&&c<="Z"||c==="$"||c==="_"||unicode.ID_Start.test(c))},isIdContinueChar:function isIdContinueChar(c){return typeof c==="string"&&(c>="a"&&c<="z"||c>="A"&&c<="Z"||c>="0"&&c<="9"||c==="$"||c==="_"||c==="‌"||c==="‍"||unicode.ID_Continue.test(c))},isDigit:function isDigit(c){return typeof c==="string"&&/[0-9]/.test(c)},isHexDigit:function isHexDigit(c){return typeof c==="string"&&/[0-9A-Fa-f]/.test(c)}};var source;var parseState;var stack;var pos;var line;var column;var token;var key;var root;var parse=function parse(text,reviver){source=String(text);parseState="start";stack=[];pos=0;line=1;column=0;token=undefined;key=undefined;root=undefined;do{token=lex();parseStates[parseState]()}while(token.type!=="eof");if(typeof reviver==="function"){return internalize({"":root},"",reviver)}return root};function internalize(holder,name,reviver){var value=holder[name];if(value!=null&&typeof value==="object"){if(Array.isArray(value)){for(var i=0;i0){var c=peek();if(!util.isHexDigit(c)){throw invalidChar(read())}buffer+=read()}return String.fromCodePoint(parseInt(buffer,16))}var parseStates={start:function start(){if(token.type==="eof"){throw invalidEOF()}push()},beforePropertyName:function beforePropertyName(){switch(token.type){case"identifier":case"string":key=token.value;parseState="afterPropertyName";return;case"punctuator":pop();return;case"eof":throw invalidEOF()}},afterPropertyName:function afterPropertyName(){if(token.type==="eof"){throw invalidEOF()}parseState="beforePropertyValue"},beforePropertyValue:function beforePropertyValue(){if(token.type==="eof"){throw invalidEOF()}push()},beforeArrayValue:function beforeArrayValue(){if(token.type==="eof"){throw invalidEOF()}if(token.type==="punctuator"&&token.value==="]"){pop();return}push()},afterPropertyValue:function afterPropertyValue(){if(token.type==="eof"){throw invalidEOF()}switch(token.value){case",":parseState="beforePropertyName";return;case"}":pop()}},afterArrayValue:function afterArrayValue(){if(token.type==="eof"){throw invalidEOF()}switch(token.value){case",":parseState="beforeArrayValue";return;case"]":pop()}},end:function end(){}};function push(){var value;switch(token.type){case"punctuator":switch(token.value){case"{":value={};break;case"[":value=[];break}break;case"null":case"boolean":case"numeric":case"string":value=token.value;break}if(root===undefined){root=value}else{var parent=stack[stack.length-1];if(Array.isArray(parent)){parent.push(value)}else{Object.defineProperty(parent,key,{value:value,writable:true,enumerable:true,configurable:true})}}if(value!==null&&typeof value==="object"){stack.push(value);if(Array.isArray(value)){parseState="beforeArrayValue"}else{parseState="beforePropertyName"}}else{var current=stack[stack.length-1];if(current==null){parseState="end"}else if(Array.isArray(current)){parseState="afterArrayValue"}else{parseState="afterPropertyValue"}}}function pop(){stack.pop();var current=stack[stack.length-1];if(current==null){parseState="end"}else if(Array.isArray(current)){parseState="afterArrayValue"}else{parseState="afterPropertyValue"}}function invalidChar(c){if(c===undefined){return syntaxError("JSON5: invalid end of input at "+line+":"+column)}return syntaxError("JSON5: invalid character \'"+formatChar(c)+"\' at "+line+":"+column)}function invalidEOF(){return syntaxError("JSON5: invalid end of input at "+line+":"+column)}function invalidIdentifier(){column-=5;return syntaxError("JSON5: invalid identifier character at "+line+":"+column)}function separatorChar(c){console.warn("JSON5: \'"+formatChar(c)+"\' in strings is not valid ECMAScript; consider escaping")}function formatChar(c){var replacements={"\'":"\\\\\'",\'"\':\'\\\\"\',"\\\\":"\\\\\\\\","\\b":"\\\\b","\\f":"\\\\f","\\n":"\\\\n","\\r":"\\\\r","\\t":"\\\\t","\\v":"\\\\v","\\0":"\\\\0","\\u2028":"\\\\u2028","\\u2029":"\\\\u2029"};if(replacements[c]){return replacements[c]}if(c<" "){var hexString=c.charCodeAt(0).toString(16);return"\\\\x"+("00"+hexString).substring(hexString.length)}return c}function syntaxError(message){var err=new SyntaxError(message);err.lineNumber=line;err.columnNumber=column;return err}var stringify=function stringify(value,replacer,space){var stack=[];var indent="";var propertyList;var replacerFunc;var gap="";var quote;if(replacer!=null&&typeof replacer==="object"&&!Array.isArray(replacer)){space=replacer.space;quote=replacer.quote;replacer=replacer.replacer}if(typeof replacer==="function"){replacerFunc=replacer}else if(Array.isArray(replacer)){propertyList=[];for(var i=0,list=replacer;i0){space=Math.min(10,Math.floor(space));gap=" ".substr(0,space)}}else if(typeof space==="string"){gap=space.substr(0,10)}return serializeProperty("",{"":value});function serializeProperty(key,holder){var value=holder[key];if(value!=null){if(typeof value.toJSON5==="function"){value=value.toJSON5(key)}else if(typeof value.toJSON==="function"){value=value.toJSON(key)}}if(replacerFunc){value=replacerFunc.call(holder,key,value)}if(value instanceof Number){value=Number(value)}else if(value instanceof String){value=String(value)}else if(value instanceof Boolean){value=value.valueOf()}switch(value){case null:return"null";case true:return"true";case false:return"false"}if(typeof value==="string"){return quoteString(value,false)}if(typeof value==="number"){return String(value)}if(typeof value==="object"){return Array.isArray(value)?serializeArray(value):serializeObject(value)}return undefined}function quoteString(value){var quotes={"\'":.1,\'"\':.2};var replacements={"\'":"\\\\\'",\'"\':\'\\\\"\',"\\\\":"\\\\\\\\","\\b":"\\\\b","\\f":"\\\\f","\\n":"\\\\n","\\r":"\\\\r","\\t":"\\\\t","\\v":"\\\\v","\\0":"\\\\0","\\u2028":"\\\\u2028","\\u2029":"\\\\u2029"};var product="";for(var i=0;i=0){throw TypeError("Converting circular structure to JSON5")}stack.push(value);var stepback=indent;indent=indent+gap;var keys=propertyList||Object.keys(value);var partial=[];for(var i=0,list=keys;i=0){throw TypeError("Converting circular structure to JSON5")}stack.push(value);var stepback=indent;indent=indent+gap;var partial=[];for(var i=0;i{e.exports='"use strict";(function(q){function y(){}function C(b){var d=b.charCodeAt(0)|0;if(55296<=d)if(56319>=d)if(b=b.charCodeAt(1)|0,56320<=b&&57343>=b){if(d=(d<<10)+b-56613888|0,65535>18,128|d>>12&63,128|d>>6&63,128|d&63)}else d=65533;else 57343>=d&&(d=65533);return 2047>=d?v(192|d>>6,128|d&63):v(224|d>>12,128|d>>6&63,128|d&63)}function z(){}function A(b,d){var g=void 0===b?"":(""+b).replace(D,C),c=g.length|0,a=0,k=0,f=d.length|0,h=b.length|0;f>4){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:k=k+1|0;case 8:case 9:case 10:case 11:break;case 12:case 13:if((a+1|0)>4){case 15:n=b[c=c+1|0]&255;if(2!==n>>6||247>6?r+4|0:24,h=h+256&768;case 13:case 12:n=b[c=c+1|0]&255,l<<=6,l|=(h&31)<<6|n&63,r=r+7|0,c>6&&l>>r&&1114112>l?(h=l,l=l-65536|0,0<=l&&(p=(l>>10)+55296|0,h=(l&1023)+56320|0,31>m?(e[m]=p,m=m+1|0,p=-1):(n=p,p=h,h=n))):(h>>=8,c=c-h-1|0,h=65533),l=r=0,f=c<=k?32:a-c|0;default:e[m]=h;continue;case 11:case 10:case 9:case 8:}e[m]=65533}g+=v(e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7],e[8],e[9],e[10],e[11],e[12],e[13],e[14],e[15],e[16],e[17],e[18],e[19],e[20],e[21],e[22],e[23],e[24],e[25],e[26],e[27],e[28],e[29],e[30],e[31]);32>m&&(g=g.slice(0,m-32|0));if(c>>31,p=-1,g.length=f)g[a]=f;else{if(2047>=f)g[a]=192|f>>6;else{a:{if(55296<=f)if(56319>=f){var h=b.charCodeAt(c=c+1|0)|0;if(56320<=h&&57343>=h){f=(f<<10)+h-56613888|0;if(65535>18;g[a=a+1|0]=128|f>>12&63;g[a=a+1|0]=128|f>>6&63;g[a=a+1|0]=128|f&63;continue}break a}f=65533}else 57343>=f&&(f=65533);!k&&c<<1>12;g[a=a+1|0]=128|f>>6&63}g[a=a+1|0]=128|f&63}}return t?g.subarray(0,a):g.slice(0,a)};B.encodeInto=A;if(!u)q.TextDecoder=y,q.TextEncoder=z;else if(!(q=u.prototype).encodeInto){var I=new u;q.encodeInto=function(b,d){var g=b.length|0,c=d.length|0;if(g>1){var a=I.encode(b);if((a.length|0){e.exports='(function(root,factory){if(typeof exports==="object"){module.exports=exports=factory()}else if(typeof define==="function"&&define.amd){define([],factory)}else{globalThis.CryptoJS=factory()}})(this,function(){var CryptoJS=CryptoJS||function(Math,undefined){var crypto;if(typeof window!=="undefined"&&window.crypto){crypto=window.crypto}if(typeof self!=="undefined"&&self.crypto){crypto=self.crypto}if(typeof globalThis!=="undefined"&&globalThis.crypto){crypto=globalThis.crypto}if(!crypto&&typeof window!=="undefined"&&window.msCrypto){crypto=window.msCrypto}if(!crypto&&typeof global!=="undefined"&&global.crypto){crypto=global.crypto}if(!crypto&&typeof require==="function"){try{crypto=require("crypto")}catch(err){}}var cryptoSecureRandomInt=function(){if(crypto){if(typeof crypto.getRandomValues==="function"){try{return crypto.getRandomValues(new Uint32Array(1))[0]}catch(err){}}if(typeof crypto.randomBytes==="function"){try{return crypto.randomBytes(4).readInt32LE()}catch(err){}}}throw new Error("Native crypto module could not be used to get secure random number.")};var create=Object.create||function(){function F(){}return function(obj){var subtype;F.prototype=obj;subtype=new F;F.prototype=null;return subtype}}();var C={};var C_lib=C.lib={};var Base=C_lib.Base=function(){return{extend:function(overrides){var subtype=create(this);if(overrides){subtype.mixIn(overrides)}if(!subtype.hasOwnProperty("init")||this.init===subtype.init){subtype.init=function(){subtype.$super.init.apply(this,arguments)}}subtype.init.prototype=subtype;subtype.$super=this;return subtype},create:function(){var instance=this.extend();instance.init.apply(instance,arguments);return instance},init:function(){},mixIn:function(properties){for(var propertyName in properties){if(properties.hasOwnProperty(propertyName)){this[propertyName]=properties[propertyName]}}if(properties.hasOwnProperty("toString")){this.toString=properties.toString}},clone:function(){return this.init.prototype.extend(this)}}}();var WordArray=C_lib.WordArray=Base.extend({init:function(words,sigBytes){words=this.words=words||[];if(sigBytes!=undefined){this.sigBytes=sigBytes}else{this.sigBytes=words.length*4}},toString:function(encoder){return(encoder||Hex).stringify(this)},concat:function(wordArray){var thisWords=this.words;var thatWords=wordArray.words;var thisSigBytes=this.sigBytes;var thatSigBytes=wordArray.sigBytes;this.clamp();if(thisSigBytes%4){for(var i=0;i>>2]>>>24-i%4*8&255;thisWords[thisSigBytes+i>>>2]|=thatByte<<24-(thisSigBytes+i)%4*8}}else{for(var j=0;j>>2]=thatWords[j>>>2]}}this.sigBytes+=thatSigBytes;return this},clamp:function(){var words=this.words;var sigBytes=this.sigBytes;words[sigBytes>>>2]&=4294967295<<32-sigBytes%4*8;words.length=Math.ceil(sigBytes/4)},clone:function(){var clone=Base.clone.call(this);clone.words=this.words.slice(0);return clone},random:function(nBytes){var words=[];for(var i=0;i>>2]>>>24-i%4*8&255;hexChars.push((bite>>>4).toString(16));hexChars.push((bite&15).toString(16))}return hexChars.join("")},parse:function(hexStr){var hexStrLength=hexStr.length;var words=[];for(var i=0;i>>3]|=parseInt(hexStr.substr(i,2),16)<<24-i%8*4}return new WordArray.init(words,hexStrLength/2)}};var Latin1=C_enc.Latin1={stringify:function(wordArray){var words=wordArray.words;var sigBytes=wordArray.sigBytes;var latin1Chars=[];for(var i=0;i>>2]>>>24-i%4*8&255;latin1Chars.push(String.fromCharCode(bite))}return latin1Chars.join("")},parse:function(latin1Str){var latin1StrLength=latin1Str.length;var words=[];for(var i=0;i>>2]|=(latin1Str.charCodeAt(i)&255)<<24-i%4*8}return new WordArray.init(words,latin1StrLength)}};var Utf8=C_enc.Utf8={stringify:function(wordArray){try{return decodeURIComponent(escape(Latin1.stringify(wordArray)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(utf8Str){return Latin1.parse(unescape(encodeURIComponent(utf8Str)))}};var BufferedBlockAlgorithm=C_lib.BufferedBlockAlgorithm=Base.extend({reset:function(){this._data=new WordArray.init;this._nDataBytes=0},_append:function(data){if(typeof data=="string"){data=Utf8.parse(data)}this._data.concat(data);this._nDataBytes+=data.sigBytes},_process:function(doFlush){var processedWords;var data=this._data;var dataWords=data.words;var dataSigBytes=data.sigBytes;var blockSize=this.blockSize;var blockSizeBytes=blockSize*4;var nBlocksReady=dataSigBytes/blockSizeBytes;if(doFlush){nBlocksReady=Math.ceil(nBlocksReady)}else{nBlocksReady=Math.max((nBlocksReady|0)-this._minBufferSize,0)}var nWordsReady=nBlocksReady*blockSize;var nBytesReady=Math.min(nWordsReady*4,dataSigBytes);if(nWordsReady){for(var offset=0;offset>>2]|=typedArray[i]<<24-i%4*8}superInit.call(this,words,typedArrayByteLength)}else{superInit.apply(this,arguments)}};subInit.prototype=WordArray})();(function(){var C=CryptoJS;var C_lib=C.lib;var WordArray=C_lib.WordArray;var C_enc=C.enc;var Utf16BE=C_enc.Utf16=C_enc.Utf16BE={stringify:function(wordArray){var words=wordArray.words;var sigBytes=wordArray.sigBytes;var utf16Chars=[];for(var i=0;i>>2]>>>16-i%4*8&65535;utf16Chars.push(String.fromCharCode(codePoint))}return utf16Chars.join("")},parse:function(utf16Str){var utf16StrLength=utf16Str.length;var words=[];for(var i=0;i>>1]|=utf16Str.charCodeAt(i)<<16-i%2*16}return WordArray.create(words,utf16StrLength*2)}};C_enc.Utf16LE={stringify:function(wordArray){var words=wordArray.words;var sigBytes=wordArray.sigBytes;var utf16Chars=[];for(var i=0;i>>2]>>>16-i%4*8&65535);utf16Chars.push(String.fromCharCode(codePoint))}return utf16Chars.join("")},parse:function(utf16Str){var utf16StrLength=utf16Str.length;var words=[];for(var i=0;i>>1]|=swapEndian(utf16Str.charCodeAt(i)<<16-i%2*16)}return WordArray.create(words,utf16StrLength*2)}};function swapEndian(word){return word<<8&4278255360|word>>>8&16711935}})();(function(){var C=CryptoJS;var C_lib=C.lib;var WordArray=C_lib.WordArray;var C_enc=C.enc;var Base64=C_enc.Base64={stringify:function(wordArray){var words=wordArray.words;var sigBytes=wordArray.sigBytes;var map=this._map;wordArray.clamp();var base64Chars=[];for(var i=0;i>>2]>>>24-i%4*8&255;var byte2=words[i+1>>>2]>>>24-(i+1)%4*8&255;var byte3=words[i+2>>>2]>>>24-(i+2)%4*8&255;var triplet=byte1<<16|byte2<<8|byte3;for(var j=0;j<4&&i+j*.75>>6*(3-j)&63))}}var paddingChar=map.charAt(64);if(paddingChar){while(base64Chars.length%4){base64Chars.push(paddingChar)}}return base64Chars.join("")},parse:function(base64Str){var base64StrLength=base64Str.length;var map=this._map;var reverseMap=this._reverseMap;if(!reverseMap){reverseMap=this._reverseMap=[];for(var j=0;j>>6-i%4*2;var bitsCombined=bits1|bits2;words[nBytes>>>2]|=bitsCombined<<24-nBytes%4*8;nBytes++}}return WordArray.create(words,nBytes)}})();(function(){var C=CryptoJS;var C_lib=C.lib;var WordArray=C_lib.WordArray;var C_enc=C.enc;var Base64url=C_enc.Base64url={stringify:function(wordArray,urlSafe=true){var words=wordArray.words;var sigBytes=wordArray.sigBytes;var map=urlSafe?this._safe_map:this._map;wordArray.clamp();var base64Chars=[];for(var i=0;i>>2]>>>24-i%4*8&255;var byte2=words[i+1>>>2]>>>24-(i+1)%4*8&255;var byte3=words[i+2>>>2]>>>24-(i+2)%4*8&255;var triplet=byte1<<16|byte2<<8|byte3;for(var j=0;j<4&&i+j*.75>>6*(3-j)&63))}}var paddingChar=map.charAt(64);if(paddingChar){while(base64Chars.length%4){base64Chars.push(paddingChar)}}return base64Chars.join("")},parse:function(base64Str,urlSafe=true){var base64StrLength=base64Str.length;var map=urlSafe?this._safe_map:this._map;var reverseMap=this._reverseMap;if(!reverseMap){reverseMap=this._reverseMap=[];for(var j=0;j>>6-i%4*2;var bitsCombined=bits1|bits2;words[nBytes>>>2]|=bitsCombined<<24-nBytes%4*8;nBytes++}}return WordArray.create(words,nBytes)}})();(function(Math){var C=CryptoJS;var C_lib=C.lib;var WordArray=C_lib.WordArray;var Hasher=C_lib.Hasher;var C_algo=C.algo;var T=[];(function(){for(var i=0;i<64;i++){T[i]=Math.abs(Math.sin(i+1))*4294967296|0}})();var MD5=C_algo.MD5=Hasher.extend({_doReset:function(){this._hash=new WordArray.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(M,offset){for(var i=0;i<16;i++){var offset_i=offset+i;var M_offset_i=M[offset_i];M[offset_i]=(M_offset_i<<8|M_offset_i>>>24)&16711935|(M_offset_i<<24|M_offset_i>>>8)&4278255360}var H=this._hash.words;var M_offset_0=M[offset+0];var M_offset_1=M[offset+1];var M_offset_2=M[offset+2];var M_offset_3=M[offset+3];var M_offset_4=M[offset+4];var M_offset_5=M[offset+5];var M_offset_6=M[offset+6];var M_offset_7=M[offset+7];var M_offset_8=M[offset+8];var M_offset_9=M[offset+9];var M_offset_10=M[offset+10];var M_offset_11=M[offset+11];var M_offset_12=M[offset+12];var M_offset_13=M[offset+13];var M_offset_14=M[offset+14];var M_offset_15=M[offset+15];var a=H[0];var b=H[1];var c=H[2];var d=H[3];a=FF(a,b,c,d,M_offset_0,7,T[0]);d=FF(d,a,b,c,M_offset_1,12,T[1]);c=FF(c,d,a,b,M_offset_2,17,T[2]);b=FF(b,c,d,a,M_offset_3,22,T[3]);a=FF(a,b,c,d,M_offset_4,7,T[4]);d=FF(d,a,b,c,M_offset_5,12,T[5]);c=FF(c,d,a,b,M_offset_6,17,T[6]);b=FF(b,c,d,a,M_offset_7,22,T[7]);a=FF(a,b,c,d,M_offset_8,7,T[8]);d=FF(d,a,b,c,M_offset_9,12,T[9]);c=FF(c,d,a,b,M_offset_10,17,T[10]);b=FF(b,c,d,a,M_offset_11,22,T[11]);a=FF(a,b,c,d,M_offset_12,7,T[12]);d=FF(d,a,b,c,M_offset_13,12,T[13]);c=FF(c,d,a,b,M_offset_14,17,T[14]);b=FF(b,c,d,a,M_offset_15,22,T[15]);a=GG(a,b,c,d,M_offset_1,5,T[16]);d=GG(d,a,b,c,M_offset_6,9,T[17]);c=GG(c,d,a,b,M_offset_11,14,T[18]);b=GG(b,c,d,a,M_offset_0,20,T[19]);a=GG(a,b,c,d,M_offset_5,5,T[20]);d=GG(d,a,b,c,M_offset_10,9,T[21]);c=GG(c,d,a,b,M_offset_15,14,T[22]);b=GG(b,c,d,a,M_offset_4,20,T[23]);a=GG(a,b,c,d,M_offset_9,5,T[24]);d=GG(d,a,b,c,M_offset_14,9,T[25]);c=GG(c,d,a,b,M_offset_3,14,T[26]);b=GG(b,c,d,a,M_offset_8,20,T[27]);a=GG(a,b,c,d,M_offset_13,5,T[28]);d=GG(d,a,b,c,M_offset_2,9,T[29]);c=GG(c,d,a,b,M_offset_7,14,T[30]);b=GG(b,c,d,a,M_offset_12,20,T[31]);a=HH(a,b,c,d,M_offset_5,4,T[32]);d=HH(d,a,b,c,M_offset_8,11,T[33]);c=HH(c,d,a,b,M_offset_11,16,T[34]);b=HH(b,c,d,a,M_offset_14,23,T[35]);a=HH(a,b,c,d,M_offset_1,4,T[36]);d=HH(d,a,b,c,M_offset_4,11,T[37]);c=HH(c,d,a,b,M_offset_7,16,T[38]);b=HH(b,c,d,a,M_offset_10,23,T[39]);a=HH(a,b,c,d,M_offset_13,4,T[40]);d=HH(d,a,b,c,M_offset_0,11,T[41]);c=HH(c,d,a,b,M_offset_3,16,T[42]);b=HH(b,c,d,a,M_offset_6,23,T[43]);a=HH(a,b,c,d,M_offset_9,4,T[44]);d=HH(d,a,b,c,M_offset_12,11,T[45]);c=HH(c,d,a,b,M_offset_15,16,T[46]);b=HH(b,c,d,a,M_offset_2,23,T[47]);a=II(a,b,c,d,M_offset_0,6,T[48]);d=II(d,a,b,c,M_offset_7,10,T[49]);c=II(c,d,a,b,M_offset_14,15,T[50]);b=II(b,c,d,a,M_offset_5,21,T[51]);a=II(a,b,c,d,M_offset_12,6,T[52]);d=II(d,a,b,c,M_offset_3,10,T[53]);c=II(c,d,a,b,M_offset_10,15,T[54]);b=II(b,c,d,a,M_offset_1,21,T[55]);a=II(a,b,c,d,M_offset_8,6,T[56]);d=II(d,a,b,c,M_offset_15,10,T[57]);c=II(c,d,a,b,M_offset_6,15,T[58]);b=II(b,c,d,a,M_offset_13,21,T[59]);a=II(a,b,c,d,M_offset_4,6,T[60]);d=II(d,a,b,c,M_offset_11,10,T[61]);c=II(c,d,a,b,M_offset_2,15,T[62]);b=II(b,c,d,a,M_offset_9,21,T[63]);H[0]=H[0]+a|0;H[1]=H[1]+b|0;H[2]=H[2]+c|0;H[3]=H[3]+d|0},_doFinalize:function(){var data=this._data;var dataWords=data.words;var nBitsTotal=this._nDataBytes*8;var nBitsLeft=data.sigBytes*8;dataWords[nBitsLeft>>>5]|=128<<24-nBitsLeft%32;var nBitsTotalH=Math.floor(nBitsTotal/4294967296);var nBitsTotalL=nBitsTotal;dataWords[(nBitsLeft+64>>>9<<4)+15]=(nBitsTotalH<<8|nBitsTotalH>>>24)&16711935|(nBitsTotalH<<24|nBitsTotalH>>>8)&4278255360;dataWords[(nBitsLeft+64>>>9<<4)+14]=(nBitsTotalL<<8|nBitsTotalL>>>24)&16711935|(nBitsTotalL<<24|nBitsTotalL>>>8)&4278255360;data.sigBytes=(dataWords.length+1)*4;this._process();var hash=this._hash;var H=hash.words;for(var i=0;i<4;i++){var H_i=H[i];H[i]=(H_i<<8|H_i>>>24)&16711935|(H_i<<24|H_i>>>8)&4278255360}return hash},clone:function(){var clone=Hasher.clone.call(this);clone._hash=this._hash.clone();return clone}});function FF(a,b,c,d,x,s,t){var n=a+(b&c|~b&d)+x+t;return(n<>>32-s)+b}function GG(a,b,c,d,x,s,t){var n=a+(b&d|c&~d)+x+t;return(n<>>32-s)+b}function HH(a,b,c,d,x,s,t){var n=a+(b^c^d)+x+t;return(n<>>32-s)+b}function II(a,b,c,d,x,s,t){var n=a+(c^(b|~d))+x+t;return(n<>>32-s)+b}C.MD5=Hasher._createHelper(MD5);C.HmacMD5=Hasher._createHmacHelper(MD5)})(Math);(function(){var C=CryptoJS;var C_lib=C.lib;var WordArray=C_lib.WordArray;var Hasher=C_lib.Hasher;var C_algo=C.algo;var W=[];var SHA1=C_algo.SHA1=Hasher.extend({_doReset:function(){this._hash=new WordArray.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(M,offset){var H=this._hash.words;var a=H[0];var b=H[1];var c=H[2];var d=H[3];var e=H[4];for(var i=0;i<80;i++){if(i<16){W[i]=M[offset+i]|0}else{var n=W[i-3]^W[i-8]^W[i-14]^W[i-16];W[i]=n<<1|n>>>31}var t=(a<<5|a>>>27)+e+W[i];if(i<20){t+=(b&c|~b&d)+1518500249}else if(i<40){t+=(b^c^d)+1859775393}else if(i<60){t+=(b&c|b&d|c&d)-1894007588}else{t+=(b^c^d)-899497514}e=d;d=c;c=b<<30|b>>>2;b=a;a=t}H[0]=H[0]+a|0;H[1]=H[1]+b|0;H[2]=H[2]+c|0;H[3]=H[3]+d|0;H[4]=H[4]+e|0},_doFinalize:function(){var data=this._data;var dataWords=data.words;var nBitsTotal=this._nDataBytes*8;var nBitsLeft=data.sigBytes*8;dataWords[nBitsLeft>>>5]|=128<<24-nBitsLeft%32;dataWords[(nBitsLeft+64>>>9<<4)+14]=Math.floor(nBitsTotal/4294967296);dataWords[(nBitsLeft+64>>>9<<4)+15]=nBitsTotal;data.sigBytes=dataWords.length*4;this._process();return this._hash},clone:function(){var clone=Hasher.clone.call(this);clone._hash=this._hash.clone();return clone}});C.SHA1=Hasher._createHelper(SHA1);C.HmacSHA1=Hasher._createHmacHelper(SHA1)})();(function(Math){var C=CryptoJS;var C_lib=C.lib;var WordArray=C_lib.WordArray;var Hasher=C_lib.Hasher;var C_algo=C.algo;var H=[];var K=[];(function(){function isPrime(n){var sqrtN=Math.sqrt(n);for(var factor=2;factor<=sqrtN;factor++){if(!(n%factor)){return false}}return true}function getFractionalBits(n){return(n-(n|0))*4294967296|0}var n=2;var nPrime=0;while(nPrime<64){if(isPrime(n)){if(nPrime<8){H[nPrime]=getFractionalBits(Math.pow(n,1/2))}K[nPrime]=getFractionalBits(Math.pow(n,1/3));nPrime++}n++}})();var W=[];var SHA256=C_algo.SHA256=Hasher.extend({_doReset:function(){this._hash=new WordArray.init(H.slice(0))},_doProcessBlock:function(M,offset){var H=this._hash.words;var a=H[0];var b=H[1];var c=H[2];var d=H[3];var e=H[4];var f=H[5];var g=H[6];var h=H[7];for(var i=0;i<64;i++){if(i<16){W[i]=M[offset+i]|0}else{var gamma0x=W[i-15];var gamma0=(gamma0x<<25|gamma0x>>>7)^(gamma0x<<14|gamma0x>>>18)^gamma0x>>>3;var gamma1x=W[i-2];var gamma1=(gamma1x<<15|gamma1x>>>17)^(gamma1x<<13|gamma1x>>>19)^gamma1x>>>10;W[i]=gamma0+W[i-7]+gamma1+W[i-16]}var ch=e&f^~e&g;var maj=a&b^a&c^b&c;var sigma0=(a<<30|a>>>2)^(a<<19|a>>>13)^(a<<10|a>>>22);var sigma1=(e<<26|e>>>6)^(e<<21|e>>>11)^(e<<7|e>>>25);var t1=h+sigma1+ch+K[i]+W[i];var t2=sigma0+maj;h=g;g=f;f=e;e=d+t1|0;d=c;c=b;b=a;a=t1+t2|0}H[0]=H[0]+a|0;H[1]=H[1]+b|0;H[2]=H[2]+c|0;H[3]=H[3]+d|0;H[4]=H[4]+e|0;H[5]=H[5]+f|0;H[6]=H[6]+g|0;H[7]=H[7]+h|0},_doFinalize:function(){var data=this._data;var dataWords=data.words;var nBitsTotal=this._nDataBytes*8;var nBitsLeft=data.sigBytes*8;dataWords[nBitsLeft>>>5]|=128<<24-nBitsLeft%32;dataWords[(nBitsLeft+64>>>9<<4)+14]=Math.floor(nBitsTotal/4294967296);dataWords[(nBitsLeft+64>>>9<<4)+15]=nBitsTotal;data.sigBytes=dataWords.length*4;this._process();return this._hash},clone:function(){var clone=Hasher.clone.call(this);clone._hash=this._hash.clone();return clone}});C.SHA256=Hasher._createHelper(SHA256);C.HmacSHA256=Hasher._createHmacHelper(SHA256)})(Math);(function(){var C=CryptoJS;var C_lib=C.lib;var WordArray=C_lib.WordArray;var C_algo=C.algo;var SHA256=C_algo.SHA256;var SHA224=C_algo.SHA224=SHA256.extend({_doReset:function(){this._hash=new WordArray.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var hash=SHA256._doFinalize.call(this);hash.sigBytes-=4;return hash}});C.SHA224=SHA256._createHelper(SHA224);C.HmacSHA224=SHA256._createHmacHelper(SHA224)})();(function(){var C=CryptoJS;var C_lib=C.lib;var Hasher=C_lib.Hasher;var C_x64=C.x64;var X64Word=C_x64.Word;var X64WordArray=C_x64.WordArray;var C_algo=C.algo;function X64Word_create(){return X64Word.create.apply(X64Word,arguments)}var K=[X64Word_create(1116352408,3609767458),X64Word_create(1899447441,602891725),X64Word_create(3049323471,3964484399),X64Word_create(3921009573,2173295548),X64Word_create(961987163,4081628472),X64Word_create(1508970993,3053834265),X64Word_create(2453635748,2937671579),X64Word_create(2870763221,3664609560),X64Word_create(3624381080,2734883394),X64Word_create(310598401,1164996542),X64Word_create(607225278,1323610764),X64Word_create(1426881987,3590304994),X64Word_create(1925078388,4068182383),X64Word_create(2162078206,991336113),X64Word_create(2614888103,633803317),X64Word_create(3248222580,3479774868),X64Word_create(3835390401,2666613458),X64Word_create(4022224774,944711139),X64Word_create(264347078,2341262773),X64Word_create(604807628,2007800933),X64Word_create(770255983,1495990901),X64Word_create(1249150122,1856431235),X64Word_create(1555081692,3175218132),X64Word_create(1996064986,2198950837),X64Word_create(2554220882,3999719339),X64Word_create(2821834349,766784016),X64Word_create(2952996808,2566594879),X64Word_create(3210313671,3203337956),X64Word_create(3336571891,1034457026),X64Word_create(3584528711,2466948901),X64Word_create(113926993,3758326383),X64Word_create(338241895,168717936),X64Word_create(666307205,1188179964),X64Word_create(773529912,1546045734),X64Word_create(1294757372,1522805485),X64Word_create(1396182291,2643833823),X64Word_create(1695183700,2343527390),X64Word_create(1986661051,1014477480),X64Word_create(2177026350,1206759142),X64Word_create(2456956037,344077627),X64Word_create(2730485921,1290863460),X64Word_create(2820302411,3158454273),X64Word_create(3259730800,3505952657),X64Word_create(3345764771,106217008),X64Word_create(3516065817,3606008344),X64Word_create(3600352804,1432725776),X64Word_create(4094571909,1467031594),X64Word_create(275423344,851169720),X64Word_create(430227734,3100823752),X64Word_create(506948616,1363258195),X64Word_create(659060556,3750685593),X64Word_create(883997877,3785050280),X64Word_create(958139571,3318307427),X64Word_create(1322822218,3812723403),X64Word_create(1537002063,2003034995),X64Word_create(1747873779,3602036899),X64Word_create(1955562222,1575990012),X64Word_create(2024104815,1125592928),X64Word_create(2227730452,2716904306),X64Word_create(2361852424,442776044),X64Word_create(2428436474,593698344),X64Word_create(2756734187,3733110249),X64Word_create(3204031479,2999351573),X64Word_create(3329325298,3815920427),X64Word_create(3391569614,3928383900),X64Word_create(3515267271,566280711),X64Word_create(3940187606,3454069534),X64Word_create(4118630271,4000239992),X64Word_create(116418474,1914138554),X64Word_create(174292421,2731055270),X64Word_create(289380356,3203993006),X64Word_create(460393269,320620315),X64Word_create(685471733,587496836),X64Word_create(852142971,1086792851),X64Word_create(1017036298,365543100),X64Word_create(1126000580,2618297676),X64Word_create(1288033470,3409855158),X64Word_create(1501505948,4234509866),X64Word_create(1607167915,987167468),X64Word_create(1816402316,1246189591)];var W=[];(function(){for(var i=0;i<80;i++){W[i]=X64Word_create()}})();var SHA512=C_algo.SHA512=Hasher.extend({_doReset:function(){this._hash=new X64WordArray.init([new X64Word.init(1779033703,4089235720),new X64Word.init(3144134277,2227873595),new X64Word.init(1013904242,4271175723),new X64Word.init(2773480762,1595750129),new X64Word.init(1359893119,2917565137),new X64Word.init(2600822924,725511199),new X64Word.init(528734635,4215389547),new X64Word.init(1541459225,327033209)])},_doProcessBlock:function(M,offset){var H=this._hash.words;var H0=H[0];var H1=H[1];var H2=H[2];var H3=H[3];var H4=H[4];var H5=H[5];var H6=H[6];var H7=H[7];var H0h=H0.high;var H0l=H0.low;var H1h=H1.high;var H1l=H1.low;var H2h=H2.high;var H2l=H2.low;var H3h=H3.high;var H3l=H3.low;var H4h=H4.high;var H4l=H4.low;var H5h=H5.high;var H5l=H5.low;var H6h=H6.high;var H6l=H6.low;var H7h=H7.high;var H7l=H7.low;var ah=H0h;var al=H0l;var bh=H1h;var bl=H1l;var ch=H2h;var cl=H2l;var dh=H3h;var dl=H3l;var eh=H4h;var el=H4l;var fh=H5h;var fl=H5l;var gh=H6h;var gl=H6l;var hh=H7h;var hl=H7l;for(var i=0;i<80;i++){var Wil;var Wih;var Wi=W[i];if(i<16){Wih=Wi.high=M[offset+i*2]|0;Wil=Wi.low=M[offset+i*2+1]|0}else{var gamma0x=W[i-15];var gamma0xh=gamma0x.high;var gamma0xl=gamma0x.low;var gamma0h=(gamma0xh>>>1|gamma0xl<<31)^(gamma0xh>>>8|gamma0xl<<24)^gamma0xh>>>7;var gamma0l=(gamma0xl>>>1|gamma0xh<<31)^(gamma0xl>>>8|gamma0xh<<24)^(gamma0xl>>>7|gamma0xh<<25);var gamma1x=W[i-2];var gamma1xh=gamma1x.high;var gamma1xl=gamma1x.low;var gamma1h=(gamma1xh>>>19|gamma1xl<<13)^(gamma1xh<<3|gamma1xl>>>29)^gamma1xh>>>6;var gamma1l=(gamma1xl>>>19|gamma1xh<<13)^(gamma1xl<<3|gamma1xh>>>29)^(gamma1xl>>>6|gamma1xh<<26);var Wi7=W[i-7];var Wi7h=Wi7.high;var Wi7l=Wi7.low;var Wi16=W[i-16];var Wi16h=Wi16.high;var Wi16l=Wi16.low;Wil=gamma0l+Wi7l;Wih=gamma0h+Wi7h+(Wil>>>0>>0?1:0);Wil=Wil+gamma1l;Wih=Wih+gamma1h+(Wil>>>0>>0?1:0);Wil=Wil+Wi16l;Wih=Wih+Wi16h+(Wil>>>0>>0?1:0);Wi.high=Wih;Wi.low=Wil}var chh=eh&fh^~eh&gh;var chl=el&fl^~el≷var majh=ah&bh^ah&ch^bh&ch;var majl=al&bl^al&cl^bl&cl;var sigma0h=(ah>>>28|al<<4)^(ah<<30|al>>>2)^(ah<<25|al>>>7);var sigma0l=(al>>>28|ah<<4)^(al<<30|ah>>>2)^(al<<25|ah>>>7);var sigma1h=(eh>>>14|el<<18)^(eh>>>18|el<<14)^(eh<<23|el>>>9);var sigma1l=(el>>>14|eh<<18)^(el>>>18|eh<<14)^(el<<23|eh>>>9);var Ki=K[i];var Kih=Ki.high;var Kil=Ki.low;var t1l=hl+sigma1l;var t1h=hh+sigma1h+(t1l>>>0>>0?1:0);var t1l=t1l+chl;var t1h=t1h+chh+(t1l>>>0>>0?1:0);var t1l=t1l+Kil;var t1h=t1h+Kih+(t1l>>>0>>0?1:0);var t1l=t1l+Wil;var t1h=t1h+Wih+(t1l>>>0>>0?1:0);var t2l=sigma0l+majl;var t2h=sigma0h+majh+(t2l>>>0>>0?1:0);hh=gh;hl=gl;gh=fh;gl=fl;fh=eh;fl=el;el=dl+t1l|0;eh=dh+t1h+(el>>>0
>>0?1:0)|0;dh=ch;dl=cl;ch=bh;cl=bl;bh=ah;bl=al;al=t1l+t2l|0;ah=t1h+t2h+(al>>>0>>0?1:0)|0}H0l=H0.low=H0l+al;H0.high=H0h+ah+(H0l>>>0>>0?1:0);H1l=H1.low=H1l+bl;H1.high=H1h+bh+(H1l>>>0>>0?1:0);H2l=H2.low=H2l+cl;H2.high=H2h+ch+(H2l>>>0>>0?1:0);H3l=H3.low=H3l+dl;H3.high=H3h+dh+(H3l>>>0
>>0?1:0);H4l=H4.low=H4l+el;H4.high=H4h+eh+(H4l>>>0>>0?1:0);H5l=H5.low=H5l+fl;H5.high=H5h+fh+(H5l>>>0>>0?1:0);H6l=H6.low=H6l+gl;H6.high=H6h+gh+(H6l>>>0>>0?1:0);H7l=H7.low=H7l+hl;H7.high=H7h+hh+(H7l>>>0>>0?1:0)},_doFinalize:function(){var data=this._data;var dataWords=data.words;var nBitsTotal=this._nDataBytes*8;var nBitsLeft=data.sigBytes*8;dataWords[nBitsLeft>>>5]|=128<<24-nBitsLeft%32;dataWords[(nBitsLeft+128>>>10<<5)+30]=Math.floor(nBitsTotal/4294967296);dataWords[(nBitsLeft+128>>>10<<5)+31]=nBitsTotal;data.sigBytes=dataWords.length*4;this._process();var hash=this._hash.toX32();return hash},clone:function(){var clone=Hasher.clone.call(this);clone._hash=this._hash.clone();return clone},blockSize:1024/32});C.SHA512=Hasher._createHelper(SHA512);C.HmacSHA512=Hasher._createHmacHelper(SHA512)})();(function(){var C=CryptoJS;var C_x64=C.x64;var X64Word=C_x64.Word;var X64WordArray=C_x64.WordArray;var C_algo=C.algo;var SHA512=C_algo.SHA512;var SHA384=C_algo.SHA384=SHA512.extend({_doReset:function(){this._hash=new X64WordArray.init([new X64Word.init(3418070365,3238371032),new X64Word.init(1654270250,914150663),new X64Word.init(2438529370,812702999),new X64Word.init(355462360,4144912697),new X64Word.init(1731405415,4290775857),new X64Word.init(2394180231,1750603025),new X64Word.init(3675008525,1694076839),new X64Word.init(1203062813,3204075428)])},_doFinalize:function(){var hash=SHA512._doFinalize.call(this);hash.sigBytes-=16;return hash}});C.SHA384=SHA512._createHelper(SHA384);C.HmacSHA384=SHA512._createHmacHelper(SHA384)})();(function(Math){var C=CryptoJS;var C_lib=C.lib;var WordArray=C_lib.WordArray;var Hasher=C_lib.Hasher;var C_x64=C.x64;var X64Word=C_x64.Word;var C_algo=C.algo;var RHO_OFFSETS=[];var PI_INDEXES=[];var ROUND_CONSTANTS=[];(function(){var x=1,y=0;for(var t=0;t<24;t++){RHO_OFFSETS[x+5*y]=(t+1)*(t+2)/2%64;var newX=y%5;var newY=(2*x+3*y)%5;x=newX;y=newY}for(var x=0;x<5;x++){for(var y=0;y<5;y++){PI_INDEXES[x+5*y]=y+(2*x+3*y)%5*5}}var LFSR=1;for(var i=0;i<24;i++){var roundConstantMsw=0;var roundConstantLsw=0;for(var j=0;j<7;j++){if(LFSR&1){var bitPosition=(1<>>24)&16711935|(M2i<<24|M2i>>>8)&4278255360;M2i1=(M2i1<<8|M2i1>>>24)&16711935|(M2i1<<24|M2i1>>>8)&4278255360;var lane=state[i];lane.high^=M2i1;lane.low^=M2i}for(var round=0;round<24;round++){for(var x=0;x<5;x++){var tMsw=0,tLsw=0;for(var y=0;y<5;y++){var lane=state[x+5*y];tMsw^=lane.high;tLsw^=lane.low}var Tx=T[x];Tx.high=tMsw;Tx.low=tLsw}for(var x=0;x<5;x++){var Tx4=T[(x+4)%5];var Tx1=T[(x+1)%5];var Tx1Msw=Tx1.high;var Tx1Lsw=Tx1.low;var tMsw=Tx4.high^(Tx1Msw<<1|Tx1Lsw>>>31);var tLsw=Tx4.low^(Tx1Lsw<<1|Tx1Msw>>>31);for(var y=0;y<5;y++){var lane=state[x+5*y];lane.high^=tMsw;lane.low^=tLsw}}for(var laneIndex=1;laneIndex<25;laneIndex++){var tMsw;var tLsw;var lane=state[laneIndex];var laneMsw=lane.high;var laneLsw=lane.low;var rhoOffset=RHO_OFFSETS[laneIndex];if(rhoOffset<32){tMsw=laneMsw<>>32-rhoOffset;tLsw=laneLsw<>>32-rhoOffset}else{tMsw=laneLsw<>>64-rhoOffset;tLsw=laneMsw<>>64-rhoOffset}var TPiLane=T[PI_INDEXES[laneIndex]];TPiLane.high=tMsw;TPiLane.low=tLsw}var T0=T[0];var state0=state[0];T0.high=state0.high;T0.low=state0.low;for(var x=0;x<5;x++){for(var y=0;y<5;y++){var laneIndex=x+5*y;var lane=state[laneIndex];var TLane=T[laneIndex];var Tx1Lane=T[(x+1)%5+5*y];var Tx2Lane=T[(x+2)%5+5*y];lane.high=TLane.high^~Tx1Lane.high&Tx2Lane.high;lane.low=TLane.low^~Tx1Lane.low&Tx2Lane.low}}var lane=state[0];var roundConstant=ROUND_CONSTANTS[round];lane.high^=roundConstant.high;lane.low^=roundConstant.low}},_doFinalize:function(){var data=this._data;var dataWords=data.words;var nBitsTotal=this._nDataBytes*8;var nBitsLeft=data.sigBytes*8;var blockSizeBits=this.blockSize*32;dataWords[nBitsLeft>>>5]|=1<<24-nBitsLeft%32;dataWords[(Math.ceil((nBitsLeft+1)/blockSizeBits)*blockSizeBits>>>5)-1]|=128;data.sigBytes=dataWords.length*4;this._process();var state=this._state;var outputLengthBytes=this.cfg.outputLength/8;var outputLengthLanes=outputLengthBytes/8;var hashWords=[];for(var i=0;i>>24)&16711935|(laneMsw<<24|laneMsw>>>8)&4278255360;laneLsw=(laneLsw<<8|laneLsw>>>24)&16711935|(laneLsw<<24|laneLsw>>>8)&4278255360;hashWords.push(laneLsw);hashWords.push(laneMsw)}return new WordArray.init(hashWords,outputLengthBytes)},clone:function(){var clone=Hasher.clone.call(this);var state=clone._state=this._state.slice(0);for(var i=0;i<25;i++){state[i]=state[i].clone()}return clone}});C.SHA3=Hasher._createHelper(SHA3);C.HmacSHA3=Hasher._createHmacHelper(SHA3)})(Math);(function(Math){var C=CryptoJS;var C_lib=C.lib;var WordArray=C_lib.WordArray;var Hasher=C_lib.Hasher;var C_algo=C.algo;var _zl=WordArray.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]);var _zr=WordArray.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]);var _sl=WordArray.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]);var _sr=WordArray.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]);var _hl=WordArray.create([0,1518500249,1859775393,2400959708,2840853838]);var _hr=WordArray.create([1352829926,1548603684,1836072691,2053994217,0]);var RIPEMD160=C_algo.RIPEMD160=Hasher.extend({_doReset:function(){this._hash=WordArray.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(M,offset){for(var i=0;i<16;i++){var offset_i=offset+i;var M_offset_i=M[offset_i];M[offset_i]=(M_offset_i<<8|M_offset_i>>>24)&16711935|(M_offset_i<<24|M_offset_i>>>8)&4278255360}var H=this._hash.words;var hl=_hl.words;var hr=_hr.words;var zl=_zl.words;var zr=_zr.words;var sl=_sl.words;var sr=_sr.words;var al,bl,cl,dl,el;var ar,br,cr,dr,er;ar=al=H[0];br=bl=H[1];cr=cl=H[2];dr=dl=H[3];er=el=H[4];var t;for(var i=0;i<80;i+=1){t=al+M[offset+zl[i]]|0;if(i<16){t+=f1(bl,cl,dl)+hl[0]}else if(i<32){t+=f2(bl,cl,dl)+hl[1]}else if(i<48){t+=f3(bl,cl,dl)+hl[2]}else if(i<64){t+=f4(bl,cl,dl)+hl[3]}else{t+=f5(bl,cl,dl)+hl[4]}t=t|0;t=rotl(t,sl[i]);t=t+el|0;al=el;el=dl;dl=rotl(cl,10);cl=bl;bl=t;t=ar+M[offset+zr[i]]|0;if(i<16){t+=f5(br,cr,dr)+hr[0]}else if(i<32){t+=f4(br,cr,dr)+hr[1]}else if(i<48){t+=f3(br,cr,dr)+hr[2]}else if(i<64){t+=f2(br,cr,dr)+hr[3]}else{t+=f1(br,cr,dr)+hr[4]}t=t|0;t=rotl(t,sr[i]);t=t+er|0;ar=er;er=dr;dr=rotl(cr,10);cr=br;br=t}t=H[1]+cl+dr|0;H[1]=H[2]+dl+er|0;H[2]=H[3]+el+ar|0;H[3]=H[4]+al+br|0;H[4]=H[0]+bl+cr|0;H[0]=t},_doFinalize:function(){var data=this._data;var dataWords=data.words;var nBitsTotal=this._nDataBytes*8;var nBitsLeft=data.sigBytes*8;dataWords[nBitsLeft>>>5]|=128<<24-nBitsLeft%32;dataWords[(nBitsLeft+64>>>9<<4)+14]=(nBitsTotal<<8|nBitsTotal>>>24)&16711935|(nBitsTotal<<24|nBitsTotal>>>8)&4278255360;data.sigBytes=(dataWords.length+1)*4;this._process();var hash=this._hash;var H=hash.words;for(var i=0;i<5;i++){var H_i=H[i];H[i]=(H_i<<8|H_i>>>24)&16711935|(H_i<<24|H_i>>>8)&4278255360}return hash},clone:function(){var clone=Hasher.clone.call(this);clone._hash=this._hash.clone();return clone}});function f1(x,y,z){return x^y^z}function f2(x,y,z){return x&y|~x&z}function f3(x,y,z){return(x|~y)^z}function f4(x,y,z){return x&z|y&~z}function f5(x,y,z){return x^(y|~z)}function rotl(x,n){return x<>>32-n}C.RIPEMD160=Hasher._createHelper(RIPEMD160);C.HmacRIPEMD160=Hasher._createHmacHelper(RIPEMD160)})(Math);(function(){var C=CryptoJS;var C_lib=C.lib;var Base=C_lib.Base;var C_enc=C.enc;var Utf8=C_enc.Utf8;var C_algo=C.algo;var HMAC=C_algo.HMAC=Base.extend({init:function(hasher,key){hasher=this._hasher=new hasher.init;if(typeof key=="string"){key=Utf8.parse(key)}var hasherBlockSize=hasher.blockSize;var hasherBlockSizeBytes=hasherBlockSize*4;if(key.sigBytes>hasherBlockSizeBytes){key=hasher.finalize(key)}key.clamp();var oKey=this._oKey=key.clone();var iKey=this._iKey=key.clone();var oKeyWords=oKey.words;var iKeyWords=iKey.words;for(var i=0;i>>2]&255;data.sigBytes-=nPaddingBytes}};var BlockCipher=C_lib.BlockCipher=Cipher.extend({cfg:Cipher.cfg.extend({mode:CBC,padding:Pkcs7}),reset:function(){var modeCreator;Cipher.reset.call(this);var cfg=this.cfg;var iv=cfg.iv;var mode=cfg.mode;if(this._xformMode==this._ENC_XFORM_MODE){modeCreator=mode.createEncryptor}else{modeCreator=mode.createDecryptor;this._minBufferSize=1}if(this._mode&&this._mode.__creator==modeCreator){this._mode.init(this,iv&&iv.words)}else{this._mode=modeCreator.call(mode,this,iv&&iv.words);this._mode.__creator=modeCreator}},_doProcessBlock:function(words,offset){this._mode.processBlock(words,offset)},_doFinalize:function(){var finalProcessedBlocks;var padding=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){padding.pad(this._data,this.blockSize);finalProcessedBlocks=this._process(!!"flush")}else{finalProcessedBlocks=this._process(!!"flush");padding.unpad(finalProcessedBlocks)}return finalProcessedBlocks},blockSize:128/32});var CipherParams=C_lib.CipherParams=Base.extend({init:function(cipherParams){this.mixIn(cipherParams)},toString:function(formatter){return(formatter||this.formatter).stringify(this)}});var C_format=C.format={};var OpenSSLFormatter=C_format.OpenSSL={stringify:function(cipherParams){var wordArray;var ciphertext=cipherParams.ciphertext;var salt=cipherParams.salt;if(salt){wordArray=WordArray.create([1398893684,1701076831]).concat(salt).concat(ciphertext)}else{wordArray=ciphertext}return wordArray.toString(Base64)},parse:function(openSSLStr){var salt;var ciphertext=Base64.parse(openSSLStr);var ciphertextWords=ciphertext.words;if(ciphertextWords[0]==1398893684&&ciphertextWords[1]==1701076831){salt=WordArray.create(ciphertextWords.slice(2,4));ciphertextWords.splice(0,4);ciphertext.sigBytes-=16}return CipherParams.create({ciphertext:ciphertext,salt:salt})}};var SerializableCipher=C_lib.SerializableCipher=Base.extend({cfg:Base.extend({format:OpenSSLFormatter}),encrypt:function(cipher,message,key,cfg){cfg=this.cfg.extend(cfg);var encryptor=cipher.createEncryptor(key,cfg);var ciphertext=encryptor.finalize(message);var cipherCfg=encryptor.cfg;return CipherParams.create({ciphertext:ciphertext,key:key,iv:cipherCfg.iv,algorithm:cipher,mode:cipherCfg.mode,padding:cipherCfg.padding,blockSize:cipher.blockSize,formatter:cfg.format})},decrypt:function(cipher,ciphertext,key,cfg){cfg=this.cfg.extend(cfg);ciphertext=this._parse(ciphertext,cfg.format);var plaintext=cipher.createDecryptor(key,cfg).finalize(ciphertext.ciphertext);return plaintext},_parse:function(ciphertext,format){if(typeof ciphertext=="string"){return format.parse(ciphertext,this)}else{return ciphertext}}});var C_kdf=C.kdf={};var OpenSSLKdf=C_kdf.OpenSSL={execute:function(password,keySize,ivSize,salt){if(!salt){salt=WordArray.random(64/8)}var key=EvpKDF.create({keySize:keySize+ivSize}).compute(password,salt);var iv=WordArray.create(key.words.slice(keySize),ivSize*4);key.sigBytes=keySize*4;return CipherParams.create({key:key,iv:iv,salt:salt})}};var PasswordBasedCipher=C_lib.PasswordBasedCipher=SerializableCipher.extend({cfg:SerializableCipher.cfg.extend({kdf:OpenSSLKdf}),encrypt:function(cipher,message,password,cfg){cfg=this.cfg.extend(cfg);var derivedParams=cfg.kdf.execute(password,cipher.keySize,cipher.ivSize);cfg.iv=derivedParams.iv;var ciphertext=SerializableCipher.encrypt.call(this,cipher,message,derivedParams.key,cfg);ciphertext.mixIn(derivedParams);return ciphertext},decrypt:function(cipher,ciphertext,password,cfg){cfg=this.cfg.extend(cfg);ciphertext=this._parse(ciphertext,cfg.format);var derivedParams=cfg.kdf.execute(password,cipher.keySize,cipher.ivSize,ciphertext.salt);cfg.iv=derivedParams.iv;var plaintext=SerializableCipher.decrypt.call(this,cipher,ciphertext,derivedParams.key,cfg);return plaintext}})}();CryptoJS.mode.CFB=function(){var CFB=CryptoJS.lib.BlockCipherMode.extend();CFB.Encryptor=CFB.extend({processBlock:function(words,offset){var cipher=this._cipher;var blockSize=cipher.blockSize;generateKeystreamAndEncrypt.call(this,words,offset,blockSize,cipher);this._prevBlock=words.slice(offset,offset+blockSize)}});CFB.Decryptor=CFB.extend({processBlock:function(words,offset){var cipher=this._cipher;var blockSize=cipher.blockSize;var thisBlock=words.slice(offset,offset+blockSize);generateKeystreamAndEncrypt.call(this,words,offset,blockSize,cipher);this._prevBlock=thisBlock}});function generateKeystreamAndEncrypt(words,offset,blockSize,cipher){var keystream;var iv=this._iv;if(iv){keystream=iv.slice(0);this._iv=undefined}else{keystream=this._prevBlock}cipher.encryptBlock(keystream,0);for(var i=0;i>24&255)===255){var b1=word>>16&255;var b2=word>>8&255;var b3=word&255;if(b1===255){b1=0;if(b2===255){b2=0;if(b3===255){b3=0}else{++b3}}else{++b2}}else{++b1}word=0;word+=b1<<16;word+=b2<<8;word+=b3}else{word+=1<<24}return word}function incCounter(counter){if((counter[0]=incWord(counter[0]))===0){counter[1]=incWord(counter[1])}return counter}var Encryptor=CTRGladman.Encryptor=CTRGladman.extend({processBlock:function(words,offset){var cipher=this._cipher;var blockSize=cipher.blockSize;var iv=this._iv;var counter=this._counter;if(iv){counter=this._counter=iv.slice(0);this._iv=undefined}incCounter(counter);var keystream=counter.slice(0);cipher.encryptBlock(keystream,0);for(var i=0;i>>2]|=nPaddingBytes<<24-lastBytePos%4*8;data.sigBytes+=nPaddingBytes},unpad:function(data){var nPaddingBytes=data.words[data.sigBytes-1>>>2]&255;data.sigBytes-=nPaddingBytes}};CryptoJS.pad.Iso10126={pad:function(data,blockSize){var blockSizeBytes=blockSize*4;var nPaddingBytes=blockSizeBytes-data.sigBytes%blockSizeBytes;data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes-1)).concat(CryptoJS.lib.WordArray.create([nPaddingBytes<<24],1))},unpad:function(data){var nPaddingBytes=data.words[data.sigBytes-1>>>2]&255;data.sigBytes-=nPaddingBytes}};CryptoJS.pad.Iso97971={pad:function(data,blockSize){data.concat(CryptoJS.lib.WordArray.create([2147483648],1));CryptoJS.pad.ZeroPadding.pad(data,blockSize)},unpad:function(data){CryptoJS.pad.ZeroPadding.unpad(data);data.sigBytes--}};CryptoJS.pad.ZeroPadding={pad:function(data,blockSize){var blockSizeBytes=blockSize*4;data.clamp();data.sigBytes+=blockSizeBytes-(data.sigBytes%blockSizeBytes||blockSizeBytes)},unpad:function(data){var dataWords=data.words;var i=data.sigBytes-1;for(var i=data.sigBytes-1;i>=0;i--){if(dataWords[i>>>2]>>>24-i%4*8&255){data.sigBytes=i+1;break}}}};CryptoJS.pad.NoPadding={pad:function(){},unpad:function(){}};(function(undefined){var C=CryptoJS;var C_lib=C.lib;var CipherParams=C_lib.CipherParams;var C_enc=C.enc;var Hex=C_enc.Hex;var C_format=C.format;var HexFormatter=C_format.Hex={stringify:function(cipherParams){return cipherParams.ciphertext.toString(Hex)},parse:function(input){var ciphertext=Hex.parse(input);return CipherParams.create({ciphertext:ciphertext})}}})();(function(){var C=CryptoJS;var C_lib=C.lib;var BlockCipher=C_lib.BlockCipher;var C_algo=C.algo;var SBOX=[];var INV_SBOX=[];var SUB_MIX_0=[];var SUB_MIX_1=[];var SUB_MIX_2=[];var SUB_MIX_3=[];var INV_SUB_MIX_0=[];var INV_SUB_MIX_1=[];var INV_SUB_MIX_2=[];var INV_SUB_MIX_3=[];(function(){var d=[];for(var i=0;i<256;i++){if(i<128){d[i]=i<<1}else{d[i]=i<<1^283}}var x=0;var xi=0;for(var i=0;i<256;i++){var sx=xi^xi<<1^xi<<2^xi<<3^xi<<4;sx=sx>>>8^sx&255^99;SBOX[x]=sx;INV_SBOX[sx]=x;var x2=d[x];var x4=d[x2];var x8=d[x4];var t=d[sx]*257^sx*16843008;SUB_MIX_0[x]=t<<24|t>>>8;SUB_MIX_1[x]=t<<16|t>>>16;SUB_MIX_2[x]=t<<8|t>>>24;SUB_MIX_3[x]=t;var t=x8*16843009^x4*65537^x2*257^x*16843008;INV_SUB_MIX_0[sx]=t<<24|t>>>8;INV_SUB_MIX_1[sx]=t<<16|t>>>16;INV_SUB_MIX_2[sx]=t<<8|t>>>24;INV_SUB_MIX_3[sx]=t;if(!x){x=xi=1}else{x=x2^d[d[d[x8^x2]]];xi^=d[d[xi]]}}})();var RCON=[0,1,2,4,8,16,32,64,128,27,54];var AES=C_algo.AES=BlockCipher.extend({_doReset:function(){var t;if(this._nRounds&&this._keyPriorReset===this._key){return}var key=this._keyPriorReset=this._key;var keyWords=key.words;var keySize=key.sigBytes/4;var nRounds=this._nRounds=keySize+6;var ksRows=(nRounds+1)*4;var keySchedule=this._keySchedule=[];for(var ksRow=0;ksRow>>24;t=SBOX[t>>>24]<<24|SBOX[t>>>16&255]<<16|SBOX[t>>>8&255]<<8|SBOX[t&255];t^=RCON[ksRow/keySize|0]<<24}else if(keySize>6&&ksRow%keySize==4){t=SBOX[t>>>24]<<24|SBOX[t>>>16&255]<<16|SBOX[t>>>8&255]<<8|SBOX[t&255]}keySchedule[ksRow]=keySchedule[ksRow-keySize]^t}}var invKeySchedule=this._invKeySchedule=[];for(var invKsRow=0;invKsRow>>24]]^INV_SUB_MIX_1[SBOX[t>>>16&255]]^INV_SUB_MIX_2[SBOX[t>>>8&255]]^INV_SUB_MIX_3[SBOX[t&255]]}}},encryptBlock:function(M,offset){this._doCryptBlock(M,offset,this._keySchedule,SUB_MIX_0,SUB_MIX_1,SUB_MIX_2,SUB_MIX_3,SBOX)},decryptBlock:function(M,offset){var t=M[offset+1];M[offset+1]=M[offset+3];M[offset+3]=t;this._doCryptBlock(M,offset,this._invKeySchedule,INV_SUB_MIX_0,INV_SUB_MIX_1,INV_SUB_MIX_2,INV_SUB_MIX_3,INV_SBOX);var t=M[offset+1];M[offset+1]=M[offset+3];M[offset+3]=t},_doCryptBlock:function(M,offset,keySchedule,SUB_MIX_0,SUB_MIX_1,SUB_MIX_2,SUB_MIX_3,SBOX){var nRounds=this._nRounds;var s0=M[offset]^keySchedule[0];var s1=M[offset+1]^keySchedule[1];var s2=M[offset+2]^keySchedule[2];var s3=M[offset+3]^keySchedule[3];var ksRow=4;for(var round=1;round>>24]^SUB_MIX_1[s1>>>16&255]^SUB_MIX_2[s2>>>8&255]^SUB_MIX_3[s3&255]^keySchedule[ksRow++];var t1=SUB_MIX_0[s1>>>24]^SUB_MIX_1[s2>>>16&255]^SUB_MIX_2[s3>>>8&255]^SUB_MIX_3[s0&255]^keySchedule[ksRow++];var t2=SUB_MIX_0[s2>>>24]^SUB_MIX_1[s3>>>16&255]^SUB_MIX_2[s0>>>8&255]^SUB_MIX_3[s1&255]^keySchedule[ksRow++];var t3=SUB_MIX_0[s3>>>24]^SUB_MIX_1[s0>>>16&255]^SUB_MIX_2[s1>>>8&255]^SUB_MIX_3[s2&255]^keySchedule[ksRow++];s0=t0;s1=t1;s2=t2;s3=t3}var t0=(SBOX[s0>>>24]<<24|SBOX[s1>>>16&255]<<16|SBOX[s2>>>8&255]<<8|SBOX[s3&255])^keySchedule[ksRow++];var t1=(SBOX[s1>>>24]<<24|SBOX[s2>>>16&255]<<16|SBOX[s3>>>8&255]<<8|SBOX[s0&255])^keySchedule[ksRow++];var t2=(SBOX[s2>>>24]<<24|SBOX[s3>>>16&255]<<16|SBOX[s0>>>8&255]<<8|SBOX[s1&255])^keySchedule[ksRow++];var t3=(SBOX[s3>>>24]<<24|SBOX[s0>>>16&255]<<16|SBOX[s1>>>8&255]<<8|SBOX[s2&255])^keySchedule[ksRow++];M[offset]=t0;M[offset+1]=t1;M[offset+2]=t2;M[offset+3]=t3},keySize:256/32});C.AES=BlockCipher._createHelper(AES)})();(function(){var C=CryptoJS;var C_lib=C.lib;var WordArray=C_lib.WordArray;var BlockCipher=C_lib.BlockCipher;var C_algo=C.algo;var PC1=[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4];var PC2=[14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32];var BIT_SHIFTS=[1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28];var SBOX_P=[{0:8421888,268435456:32768,536870912:8421378,805306368:2,1073741824:512,1342177280:8421890,1610612736:8389122,1879048192:8388608,2147483648:514,2415919104:8389120,2684354560:33280,2952790016:8421376,3221225472:32770,3489660928:8388610,3758096384:0,4026531840:33282,134217728:0,402653184:8421890,671088640:33282,939524096:32768,1207959552:8421888,1476395008:512,1744830464:8421378,2013265920:2,2281701376:8389120,2550136832:33280,2818572288:8421376,3087007744:8389122,3355443200:8388610,3623878656:32770,3892314112:514,4160749568:8388608,1:32768,268435457:2,536870913:8421888,805306369:8388608,1073741825:8421378,1342177281:33280,1610612737:512,1879048193:8389122,2147483649:8421890,2415919105:8421376,2684354561:8388610,2952790017:33282,3221225473:514,3489660929:8389120,3758096385:32770,4026531841:0,134217729:8421890,402653185:8421376,671088641:8388608,939524097:512,1207959553:32768,1476395009:8388610,1744830465:2,2013265921:33282,2281701377:32770,2550136833:8389122,2818572289:514,3087007745:8421888,3355443201:8389120,3623878657:0,3892314113:33280,4160749569:8421378},{0:1074282512,16777216:16384,33554432:524288,50331648:1074266128,67108864:1073741840,83886080:1074282496,100663296:1073758208,117440512:16,134217728:540672,150994944:1073758224,167772160:1073741824,184549376:540688,201326592:524304,218103808:0,234881024:16400,251658240:1074266112,8388608:1073758208,25165824:540688,41943040:16,58720256:1073758224,75497472:1074282512,92274688:1073741824,109051904:524288,125829120:1074266128,142606336:524304,159383552:0,176160768:16384,192937984:1074266112,209715200:1073741840,226492416:540672,243269632:1074282496,260046848:16400,268435456:0,285212672:1074266128,301989888:1073758224,318767104:1074282496,335544320:1074266112,352321536:16,369098752:540688,385875968:16384,402653184:16400,419430400:524288,436207616:524304,452984832:1073741840,469762048:540672,486539264:1073758208,503316480:1073741824,520093696:1074282512,276824064:540688,293601280:524288,310378496:1074266112,327155712:16384,343932928:1073758208,360710144:1074282512,377487360:16,394264576:1073741824,411041792:1074282496,427819008:1073741840,444596224:1073758224,461373440:524304,478150656:0,494927872:16400,511705088:1074266128,528482304:540672},{0:260,1048576:0,2097152:67109120,3145728:65796,4194304:65540,5242880:67108868,6291456:67174660,7340032:67174400,8388608:67108864,9437184:67174656,10485760:65792,11534336:67174404,12582912:67109124,13631488:65536,14680064:4,15728640:256,524288:67174656,1572864:67174404,2621440:0,3670016:67109120,4718592:67108868,5767168:65536,6815744:65540,7864320:260,8912896:4,9961472:256,11010048:67174400,12058624:65796,13107200:65792,14155776:67109124,15204352:67174660,16252928:67108864,16777216:67174656,17825792:65540,18874368:65536,19922944:67109120,20971520:256,22020096:67174660,23068672:67108868,24117248:0,25165824:67109124,26214400:67108864,27262976:4,28311552:65792,29360128:67174400,30408704:260,31457280:65796,32505856:67174404,17301504:67108864,18350080:260,19398656:67174656,20447232:0,21495808:65540,22544384:67109120,23592960:256,24641536:67174404,25690112:65536,26738688:67174660,27787264:65796,28835840:67108868,29884416:67109124,30932992:67174400,31981568:4,33030144:65792},{0:2151682048,65536:2147487808,131072:4198464,196608:2151677952,262144:0,327680:4198400,393216:2147483712,458752:4194368,524288:2147483648,589824:4194304,655360:64,720896:2147487744,786432:2151678016,851968:4160,917504:4096,983040:2151682112,32768:2147487808,98304:64,163840:2151678016,229376:2147487744,294912:4198400,360448:2151682112,425984:0,491520:2151677952,557056:4096,622592:2151682048,688128:4194304,753664:4160,819200:2147483648,884736:4194368,950272:4198464,1015808:2147483712,1048576:4194368,1114112:4198400,1179648:2147483712,1245184:0,1310720:4160,1376256:2151678016,1441792:2151682048,1507328:2147487808,1572864:2151682112,1638400:2147483648,1703936:2151677952,1769472:4198464,1835008:2147487744,1900544:4194304,1966080:64,2031616:4096,1081344:2151677952,1146880:2151682112,1212416:0,1277952:4198400,1343488:4194368,1409024:2147483648,1474560:2147487808,1540096:64,1605632:2147483712,1671168:4096,1736704:2147487744,1802240:2151678016,1867776:4160,1933312:2151682048,1998848:4194304,2064384:4198464},{0:128,4096:17039360,8192:262144,12288:536870912,16384:537133184,20480:16777344,24576:553648256,28672:262272,32768:16777216,36864:537133056,40960:536871040,45056:553910400,49152:553910272,53248:0,57344:17039488,61440:553648128,2048:17039488,6144:553648256,10240:128,14336:17039360,18432:262144,22528:537133184,26624:553910272,30720:536870912,34816:537133056,38912:0,43008:553910400,47104:16777344,51200:536871040,55296:553648128,59392:16777216,63488:262272,65536:262144,69632:128,73728:536870912,77824:553648256,81920:16777344,86016:553910272,90112:537133184,94208:16777216,98304:553910400,102400:553648128,106496:17039360,110592:537133056,114688:262272,118784:536871040,122880:0,126976:17039488,67584:553648256,71680:16777216,75776:17039360,79872:537133184,83968:536870912,88064:17039488,92160:128,96256:553910272,100352:262272,104448:553910400,108544:0,112640:553648128,116736:16777344,120832:262144,124928:537133056,129024:536871040},{0:268435464,256:8192,512:270532608,768:270540808,1024:268443648,1280:2097152,1536:2097160,1792:268435456,2048:0,2304:268443656,2560:2105344,2816:8,3072:270532616,3328:2105352,3584:8200,3840:270540800,128:270532608,384:270540808,640:8,896:2097152,1152:2105352,1408:268435464,1664:268443648,1920:8200,2176:2097160,2432:8192,2688:268443656,2944:270532616,3200:0,3456:270540800,3712:2105344,3968:268435456,4096:268443648,4352:270532616,4608:270540808,4864:8200,5120:2097152,5376:268435456,5632:268435464,5888:2105344,6144:2105352,6400:0,6656:8,6912:270532608,7168:8192,7424:268443656,7680:270540800,7936:2097160,4224:8,4480:2105344,4736:2097152,4992:268435464,5248:268443648,5504:8200,5760:270540808,6016:270532608,6272:270540800,6528:270532616,6784:8192,7040:2105352,7296:2097160,7552:0,7808:268435456,8064:268443656},{0:1048576,16:33555457,32:1024,48:1049601,64:34604033,80:0,96:1,112:34603009,128:33555456,144:1048577,160:33554433,176:34604032,192:34603008,208:1025,224:1049600,240:33554432,8:34603009,24:0,40:33555457,56:34604032,72:1048576,88:33554433,104:33554432,120:1025,136:1049601,152:33555456,168:34603008,184:1048577,200:1024,216:34604033,232:1,248:1049600,256:33554432,272:1048576,288:33555457,304:34603009,320:1048577,336:33555456,352:34604032,368:1049601,384:1025,400:34604033,416:1049600,432:1,448:0,464:34603008,480:33554433,496:1024,264:1049600,280:33555457,296:34603009,312:1,328:33554432,344:1048576,360:1025,376:34604032,392:33554433,408:34603008,424:0,440:34604033,456:1049601,472:1024,488:33555456,504:1048577},{0:134219808,1:131072,2:134217728,3:32,4:131104,5:134350880,6:134350848,7:2048,8:134348800,9:134219776,10:133120,11:134348832,12:2080,13:0,14:134217760,15:133152,2147483648:2048,2147483649:134350880,2147483650:134219808,2147483651:134217728,2147483652:134348800,2147483653:133120,2147483654:133152,2147483655:32,2147483656:134217760,2147483657:2080,2147483658:131104,2147483659:134350848,2147483660:0,2147483661:134348832,2147483662:134219776,2147483663:131072,16:133152,17:134350848,18:32,19:2048,20:134219776,21:134217760,22:134348832,23:131072,24:0,25:131104,26:134348800,27:134219808,28:134350880,29:133120,30:2080,31:134217728,2147483664:131072,2147483665:2048,2147483666:134348832,2147483667:133152,2147483668:32,2147483669:134348800,2147483670:134217728,2147483671:134219808,2147483672:134350880,2147483673:134217760,2147483674:134219776,2147483675:0,2147483676:133120,2147483677:2080,2147483678:131104,2147483679:134350848}];var SBOX_MASK=[4160749569,528482304,33030144,2064384,129024,8064,504,2147483679];var DES=C_algo.DES=BlockCipher.extend({_doReset:function(){var key=this._key;var keyWords=key.words;var keyBits=[];for(var i=0;i<56;i++){var keyBitPos=PC1[i]-1;keyBits[i]=keyWords[keyBitPos>>>5]>>>31-keyBitPos%32&1}var subKeys=this._subKeys=[];for(var nSubKey=0;nSubKey<16;nSubKey++){var subKey=subKeys[nSubKey]=[];var bitShift=BIT_SHIFTS[nSubKey];for(var i=0;i<24;i++){subKey[i/6|0]|=keyBits[(PC2[i]-1+bitShift)%28]<<31-i%6;subKey[4+(i/6|0)]|=keyBits[28+(PC2[i+24]-1+bitShift)%28]<<31-i%6}subKey[0]=subKey[0]<<1|subKey[0]>>>31;for(var i=1;i<7;i++){subKey[i]=subKey[i]>>>(i-1)*4+3}subKey[7]=subKey[7]<<5|subKey[7]>>>27}var invSubKeys=this._invSubKeys=[];for(var i=0;i<16;i++){invSubKeys[i]=subKeys[15-i]}},encryptBlock:function(M,offset){this._doCryptBlock(M,offset,this._subKeys)},decryptBlock:function(M,offset){this._doCryptBlock(M,offset,this._invSubKeys)},_doCryptBlock:function(M,offset,subKeys){this._lBlock=M[offset];this._rBlock=M[offset+1];exchangeLR.call(this,4,252645135);exchangeLR.call(this,16,65535);exchangeRL.call(this,2,858993459);exchangeRL.call(this,8,16711935);exchangeLR.call(this,1,1431655765);for(var round=0;round<16;round++){var subKey=subKeys[round];var lBlock=this._lBlock;var rBlock=this._rBlock;var f=0;for(var i=0;i<8;i++){f|=SBOX_P[i][((rBlock^subKey[i])&SBOX_MASK[i])>>>0]}this._lBlock=rBlock;this._rBlock=lBlock^f}var t=this._lBlock;this._lBlock=this._rBlock;this._rBlock=t;exchangeLR.call(this,1,1431655765);exchangeRL.call(this,8,16711935);exchangeRL.call(this,2,858993459);exchangeLR.call(this,16,65535);exchangeLR.call(this,4,252645135);M[offset]=this._lBlock;M[offset+1]=this._rBlock},keySize:64/32,ivSize:64/32,blockSize:64/32});function exchangeLR(offset,mask){var t=(this._lBlock>>>offset^this._rBlock)&mask;this._rBlock^=t;this._lBlock^=t<>>offset^this._lBlock)&mask;this._lBlock^=t;this._rBlock^=t<192.")}var key1=keyWords.slice(0,2);var key2=keyWords.length<4?keyWords.slice(0,2):keyWords.slice(2,4);var key3=keyWords.length<6?keyWords.slice(0,2):keyWords.slice(4,6);this._des1=DES.createEncryptor(WordArray.create(key1));this._des2=DES.createEncryptor(WordArray.create(key2));this._des3=DES.createEncryptor(WordArray.create(key3))},encryptBlock:function(M,offset){this._des1.encryptBlock(M,offset);this._des2.decryptBlock(M,offset);this._des3.encryptBlock(M,offset)},decryptBlock:function(M,offset){this._des3.decryptBlock(M,offset);this._des2.encryptBlock(M,offset);this._des1.decryptBlock(M,offset)},keySize:192/32,ivSize:64/32,blockSize:64/32});C.TripleDES=BlockCipher._createHelper(TripleDES)})();(function(){var C=CryptoJS;var C_lib=C.lib;var StreamCipher=C_lib.StreamCipher;var C_algo=C.algo;var RC4=C_algo.RC4=StreamCipher.extend({_doReset:function(){var key=this._key;var keyWords=key.words;var keySigBytes=key.sigBytes;var S=this._S=[];for(var i=0;i<256;i++){S[i]=i}for(var i=0,j=0;i<256;i++){var keyByteIndex=i%keySigBytes;var keyByte=keyWords[keyByteIndex>>>2]>>>24-keyByteIndex%4*8&255;j=(j+S[i]+keyByte)%256;var t=S[i];S[i]=S[j];S[j]=t}this._i=this._j=0},_doProcessBlock:function(M,offset){M[offset]^=generateKeystreamWord.call(this)},keySize:256/32,ivSize:0});function generateKeystreamWord(){var S=this._S;var i=this._i;var j=this._j;var keystreamWord=0;for(var n=0;n<4;n++){i=(i+1)%256;j=(j+S[i])%256;var t=S[i];S[i]=S[j];S[j]=t;keystreamWord|=S[(S[i]+S[j])%256]<<24-n*8}this._i=i;this._j=j;return keystreamWord}C.RC4=StreamCipher._createHelper(RC4);var RC4Drop=C_algo.RC4Drop=RC4.extend({cfg:RC4.cfg.extend({drop:192}),_doReset:function(){RC4._doReset.call(this);for(var i=this.cfg.drop;i>0;i--){generateKeystreamWord.call(this)}}});C.RC4Drop=StreamCipher._createHelper(RC4Drop)})();(function(){var C=CryptoJS;var C_lib=C.lib;var StreamCipher=C_lib.StreamCipher;var C_algo=C.algo;var S=[];var C_=[];var G=[];var Rabbit=C_algo.Rabbit=StreamCipher.extend({_doReset:function(){var K=this._key.words;var iv=this.cfg.iv;for(var i=0;i<4;i++){K[i]=(K[i]<<8|K[i]>>>24)&16711935|(K[i]<<24|K[i]>>>8)&4278255360}var X=this._X=[K[0],K[3]<<16|K[2]>>>16,K[1],K[0]<<16|K[3]>>>16,K[2],K[1]<<16|K[0]>>>16,K[3],K[2]<<16|K[1]>>>16];var C=this._C=[K[2]<<16|K[2]>>>16,K[0]&4294901760|K[1]&65535,K[3]<<16|K[3]>>>16,K[1]&4294901760|K[2]&65535,K[0]<<16|K[0]>>>16,K[2]&4294901760|K[3]&65535,K[1]<<16|K[1]>>>16,K[3]&4294901760|K[0]&65535];this._b=0;for(var i=0;i<4;i++){nextState.call(this)}for(var i=0;i<8;i++){C[i]^=X[i+4&7]}if(iv){var IV=iv.words;var IV_0=IV[0];var IV_1=IV[1];var i0=(IV_0<<8|IV_0>>>24)&16711935|(IV_0<<24|IV_0>>>8)&4278255360;var i2=(IV_1<<8|IV_1>>>24)&16711935|(IV_1<<24|IV_1>>>8)&4278255360;var i1=i0>>>16|i2&4294901760;var i3=i2<<16|i0&65535;C[0]^=i0;C[1]^=i1;C[2]^=i2;C[3]^=i3;C[4]^=i0;C[5]^=i1;C[6]^=i2;C[7]^=i3;for(var i=0;i<4;i++){nextState.call(this)}}},_doProcessBlock:function(M,offset){var X=this._X;nextState.call(this);S[0]=X[0]^X[5]>>>16^X[3]<<16;S[1]=X[2]^X[7]>>>16^X[5]<<16;S[2]=X[4]^X[1]>>>16^X[7]<<16;S[3]=X[6]^X[3]>>>16^X[1]<<16;for(var i=0;i<4;i++){S[i]=(S[i]<<8|S[i]>>>24)&16711935|(S[i]<<24|S[i]>>>8)&4278255360;M[offset+i]^=S[i]}},blockSize:128/32,ivSize:64/32});function nextState(){var X=this._X;var C=this._C;for(var i=0;i<8;i++){C_[i]=C[i]}C[0]=C[0]+1295307597+this._b|0;C[1]=C[1]+3545052371+(C[0]>>>0>>0?1:0)|0;C[2]=C[2]+886263092+(C[1]>>>0>>0?1:0)|0;C[3]=C[3]+1295307597+(C[2]>>>0>>0?1:0)|0;C[4]=C[4]+3545052371+(C[3]>>>0>>0?1:0)|0;C[5]=C[5]+886263092+(C[4]>>>0>>0?1:0)|0;C[6]=C[6]+1295307597+(C[5]>>>0>>0?1:0)|0;C[7]=C[7]+3545052371+(C[6]>>>0>>0?1:0)|0;this._b=C[7]>>>0>>0?1:0;for(var i=0;i<8;i++){var gx=X[i]+C[i];var ga=gx&65535;var gb=gx>>>16;var gh=((ga*ga>>>17)+ga*gb>>>15)+gb*gb;var gl=((gx&4294901760)*gx|0)+((gx&65535)*gx|0);G[i]=gh^gl}X[0]=G[0]+(G[7]<<16|G[7]>>>16)+(G[6]<<16|G[6]>>>16)|0;X[1]=G[1]+(G[0]<<8|G[0]>>>24)+G[7]|0;X[2]=G[2]+(G[1]<<16|G[1]>>>16)+(G[0]<<16|G[0]>>>16)|0;X[3]=G[3]+(G[2]<<8|G[2]>>>24)+G[1]|0;X[4]=G[4]+(G[3]<<16|G[3]>>>16)+(G[2]<<16|G[2]>>>16)|0;X[5]=G[5]+(G[4]<<8|G[4]>>>24)+G[3]|0;X[6]=G[6]+(G[5]<<16|G[5]>>>16)+(G[4]<<16|G[4]>>>16)|0;X[7]=G[7]+(G[6]<<8|G[6]>>>24)+G[5]|0}C.Rabbit=StreamCipher._createHelper(Rabbit)})();(function(){var C=CryptoJS;var C_lib=C.lib;var StreamCipher=C_lib.StreamCipher;var C_algo=C.algo;var S=[];var C_=[];var G=[];var RabbitLegacy=C_algo.RabbitLegacy=StreamCipher.extend({_doReset:function(){var K=this._key.words;var iv=this.cfg.iv;var X=this._X=[K[0],K[3]<<16|K[2]>>>16,K[1],K[0]<<16|K[3]>>>16,K[2],K[1]<<16|K[0]>>>16,K[3],K[2]<<16|K[1]>>>16];var C=this._C=[K[2]<<16|K[2]>>>16,K[0]&4294901760|K[1]&65535,K[3]<<16|K[3]>>>16,K[1]&4294901760|K[2]&65535,K[0]<<16|K[0]>>>16,K[2]&4294901760|K[3]&65535,K[1]<<16|K[1]>>>16,K[3]&4294901760|K[0]&65535];this._b=0;for(var i=0;i<4;i++){nextState.call(this)}for(var i=0;i<8;i++){C[i]^=X[i+4&7]}if(iv){var IV=iv.words;var IV_0=IV[0];var IV_1=IV[1];var i0=(IV_0<<8|IV_0>>>24)&16711935|(IV_0<<24|IV_0>>>8)&4278255360;var i2=(IV_1<<8|IV_1>>>24)&16711935|(IV_1<<24|IV_1>>>8)&4278255360;var i1=i0>>>16|i2&4294901760;var i3=i2<<16|i0&65535;C[0]^=i0;C[1]^=i1;C[2]^=i2;C[3]^=i3;C[4]^=i0;C[5]^=i1;C[6]^=i2;C[7]^=i3;for(var i=0;i<4;i++){nextState.call(this)}}},_doProcessBlock:function(M,offset){var X=this._X;nextState.call(this);S[0]=X[0]^X[5]>>>16^X[3]<<16;S[1]=X[2]^X[7]>>>16^X[5]<<16;S[2]=X[4]^X[1]>>>16^X[7]<<16;S[3]=X[6]^X[3]>>>16^X[1]<<16;for(var i=0;i<4;i++){S[i]=(S[i]<<8|S[i]>>>24)&16711935|(S[i]<<24|S[i]>>>8)&4278255360;M[offset+i]^=S[i]}},blockSize:128/32,ivSize:64/32});function nextState(){var X=this._X;var C=this._C;for(var i=0;i<8;i++){C_[i]=C[i]}C[0]=C[0]+1295307597+this._b|0;C[1]=C[1]+3545052371+(C[0]>>>0>>0?1:0)|0;C[2]=C[2]+886263092+(C[1]>>>0>>0?1:0)|0;C[3]=C[3]+1295307597+(C[2]>>>0>>0?1:0)|0;C[4]=C[4]+3545052371+(C[3]>>>0>>0?1:0)|0;C[5]=C[5]+886263092+(C[4]>>>0>>0?1:0)|0;C[6]=C[6]+1295307597+(C[5]>>>0>>0?1:0)|0;C[7]=C[7]+3545052371+(C[6]>>>0>>0?1:0)|0;this._b=C[7]>>>0>>0?1:0;for(var i=0;i<8;i++){var gx=X[i]+C[i];var ga=gx&65535;var gb=gx>>>16;var gh=((ga*ga>>>17)+ga*gb>>>15)+gb*gb;var gl=((gx&4294901760)*gx|0)+((gx&65535)*gx|0);G[i]=gh^gl}X[0]=G[0]+(G[7]<<16|G[7]>>>16)+(G[6]<<16|G[6]>>>16)|0;X[1]=G[1]+(G[0]<<8|G[0]>>>24)+G[7]|0;X[2]=G[2]+(G[1]<<16|G[1]>>>16)+(G[0]<<16|G[0]>>>16)|0;X[3]=G[3]+(G[2]<<8|G[2]>>>24)+G[1]|0;X[4]=G[4]+(G[3]<<16|G[3]>>>16)+(G[2]<<16|G[2]>>>16)|0;X[5]=G[5]+(G[4]<<8|G[4]>>>24)+G[3]|0;X[6]=G[6]+(G[5]<<16|G[5]>>>16)+(G[4]<<16|G[4]>>>16)|0;X[7]=G[7]+(G[6]<<8|G[6]>>>24)+G[5]|0}C.RabbitLegacy=StreamCipher._createHelper(RabbitLegacy)})();return CryptoJS});'},156:(e,t,n)=>{n(642)(n(761))},277:(e,t,n)=>{n(642)(n(906))},316:(e,t,n)=>{n(642)(n(105))},321:e=>{e.exports='!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).JSONPath={})}(this,function(e){"use strict";function n(e,t,r){return t=l(t),function(e,t){{if(t&&("object"==typeof t||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined")}return function(e){if(void 0!==e)return e;throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called")}(e)}(e,i()?Reflect.construct(t,r||[],l(e).constructor):t.apply(e,r))}function o(e,t,r){if(i())return Reflect.construct.apply(null,arguments);var n=[null];n.push.apply(n,t);n=new(e.bind.apply(e,n));return r&&h(n,r.prototype),n}function i(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(i=function(){return!!e})()}function t(t,e){var r,n=Object.keys(t);return Object.getOwnPropertySymbols&&(r=Object.getOwnPropertySymbols(t),e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)),n}function r(n){for(var e=1;ee.length)&&(t=e.length);for(var r=0,n=new Array(t);ru.prec:r<=u.prec);)o=n.pop(),t=n.pop().value,c=n.pop(),e={type:l.BINARY_EXP,operator:t,left:c,right:o},n.push(e);(e=this.gobbleToken())||this.throwError("Expected expression after "+s),n.push(i,e)}for(e=n[a=n.length-1];1=t.length&&this.throwError("Unexpected token "+String.fromCharCode(e));break}if(i===l.COMMA_CODE){if(this.index++,++n!==t.length)if(e===l.CPAREN_CODE)this.throwError("Unexpected token ,");else if(e===l.CBRACK_CODE)for(var o=t.length;o":7,"<=":7,">=":7,"<<":8,">>":8,">>>":8,"+":9,"-":9,"*":10,"/":10,"%":10},right_associative:new Set,additional_identifier_chars:new Set(["$","_"]),literals:{true:!0,false:!1,null:null},this_str:"this"}),v.max_unop_len=v.getMaxKeyLen(v.unary_ops),v.max_binop_len=v.getMaxKeyLen(v.binary_ops);var E=function(e){return new v(e).parse()};Object.getOwnPropertyNames(v).forEach(function(e){void 0===E[e]&&"prototype"!==e&&(E[e]=v[e])}),E.Jsep=v;b={name:"ternary",init:function(o){o.hooks.add("after-expression",function(e){if(e.node&&this.code===o.QUMARK_CODE){this.index++;var t=e.node,r=this.gobbleExpression();if(r||this.throwError("Expected expression"),this.gobbleSpaces(),this.code===o.COLON_CODE){this.index++;var n=this.gobbleExpression();if(n||this.throwError("Expected expression"),e.node={type:"ConditionalExpression",test:t,consequent:r,alternate:n},t.operator&&o.binary_ops[t.operator]<=.9){for(var i=t;i.right.operator&&o.binary_ops[i.right.operator]<=.9;)i=i.right;e.node.test=i.right,i.right=e.node,e.node=t}}else this.throwError("Expected :")}})}};E.plugins.register(b);var b={name:"regex",init:function(s){s.hooks.add("gobble-token",function(e){if(47===this.code){for(var t=++this.index,r=!1;this.index>=",">>>=","&=","^=","|="]),updateOperators:[43,45],assignmentPrecedence:.9,init:function(t){var n=[t.IDENTIFIER,t.MEMBER_EXP];g.assignmentOperators.forEach(function(e){return t.addBinaryOp(e,g.assignmentPrecedence,!0)}),t.hooks.add("gobble-token",function(e){var t=this,r=this.code;g.updateOperators.some(function(e){return e===r&&e===t.expr.charCodeAt(t.index+1)})&&(this.index+=2,e.node={type:"UpdateExpression",operator:43===r?"++":"--",argument:this.gobbleTokenProperty(this.gobbleIdentifier()),prefix:!0},e.node.argument&&n.includes(e.node.argument.type)||this.throwError("Unexpected ".concat(e.node.operator)))}),t.hooks.add("after-token",function(e){var t,r=this;e.node&&(t=this.code,g.updateOperators.some(function(e){return e===t&&e===r.expr.charCodeAt(r.index+1)})&&(n.includes(e.node.type)||this.throwError("Unexpected ".concat(e.node.operator)),this.index+=2,e.node={type:"UpdateExpression",operator:43===t?"++":"--",argument:e.node,prefix:!1}))}),t.hooks.add("after-expression",function(e){e.node&&!function t(e){g.assignmentOperators.has(e.operator)?(e.type="AssignmentExpression",t(e.left),t(e.right)):e.operator||Object.values(e).forEach(function(e){e&&"object"===C(e)&&t(e)})}(e.node)})}},A=Object.prototype.hasOwnProperty;function w(e,t){return(e=e.slice()).push(t),e}function k(e,t){return(t=t.slice()).unshift(e),t}var x=function(){function r(e){var t;return s(this,r),(t=n(this,r,[\'JSONPath should not be called with "new" (it prevents return of (unwrapped) scalar values)\'])).avoidNew=!0,t.value=e,t.name="NewError",t}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&h(e,t)}(r,p(Error)),c(r)}();function F(e,t,r,n,i){if(!(this instanceof F))try{return new F(e,t,r,n,i)}catch(e){if(!e.avoidNew)throw e;return e.value}"string"==typeof e&&(i=n,n=r,r=t,t=e,e=null);var o=e&&"object"===C(e);if(e=e||{},this.json=e.json||r,this.path=e.path||t,this.resultType=e.resultType||"value",this.flatten=e.flatten||!1,this.wrap=!A.call(e,"wrap")||e.wrap,this.sandbox=e.sandbox||{},this.eval=void 0===e.eval?"safe":e.eval,this.ignoreEvalErrors=void 0!==e.ignoreEvalErrors&&e.ignoreEvalErrors,this.parent=e.parent||null,this.parentProperty=e.parentProperty||null,this.callback=e.callback||n||null,this.otherTypeCallback=e.otherTypeCallback||i||function(){throw new TypeError("You must supply an otherTypeCallback callback option with the @other() operator.")},!1!==e.autostart){var a={path:o?e.path:t};o?"json"in e&&(a.json=e.json):a.json=r;a=this.evaluate(a);if(!a||"object"!==C(a))throw new x(a);return a}}F.prototype.evaluate=function(e,t,r,n){var i=this,o=this.parent,a=this.parentProperty,s=this.flatten,u=this.wrap;if(this.currResultType=this.resultType,this.currEval=this.eval,this.currSandbox=this.sandbox,r=r||this.callback,this.currOtherTypeCallback=n||this.otherTypeCallback,t=t||this.json,(e=e||this.path)&&"object"===C(e)&&!Array.isArray(e)){if(!e.path&&""!==e.path)throw new TypeError(\'You must supply a "path" property when providing an object argument to JSONPath.evaluate().\');if(!A.call(e,"json"))throw new TypeError(\'You must supply a "json" property when providing an object argument to JSONPath.evaluate().\');t=e.json,s=A.call(e,"flatten")?e.flatten:s,this.currResultType=A.call(e,"resultType")?e.resultType:this.currResultType,this.currSandbox=A.call(e,"sandbox")?e.sandbox:this.currSandbox,u=A.call(e,"wrap")?e.wrap:u,this.currEval=A.call(e,"eval")?e.eval:this.currEval,r=A.call(e,"callback")?e.callback:r,this.currOtherTypeCallback=A.call(e,"otherTypeCallback")?e.otherTypeCallback:this.currOtherTypeCallback,o=A.call(e,"parent")?e.parent:o,a=A.call(e,"parentProperty")?e.parentProperty:a,e=e.path}if(o=o||null,a=a||null,Array.isArray(e)&&(e=F.toPathString(e)),(e||""===e)&&t){e=F.toPathArray(e);"$"===e[0]&&1@-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])*)[\'\\[](\\??\\((?:[\\0-\\t\\x0B\\f\\x0E-\\u2027\\u202A-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])*?\\))(?!(?:[\\0-\\t\\x0B\\f\\x0E-\\u2027\\u202A-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])\\)\\])[\'\\]]/g.exec(f);d?this._walk(n,function(e){var t=[d[2]],r=d[1]?n[e][d[1]]:n[e];0=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:t}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,a=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){a=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(a)throw i}}}}(c.split(","));try{for(E.s();!(g=E.n()).done;){var g=g.value;p(this._trace(k(g,l),n,i,o,a,s,!0))}}catch(e){E.e(e)}finally{E.f()}}else!r&&n&&A.call(n,c)&&p(this._trace(l,n[c],w(i,c),n,c,s,e,!0))}if(this._hasParentSelector)for(var x=0;x":function(e,t){return e>t()},"<=":function(e,t){return e<=t()},">=":function(e,t){return e>=t()},"<<":function(e,t){return e<>":function(e,t){return e>>t()},">>>":function(e,t){return e>>>t()},"+":function(e,t){return e+t()},"-":function(e,t){return e-t()},"*":function(e,t){return e*t()},"/":function(e,t){return e/t()},"%":function(e,t){return e%t()}}[e.operator](D.evalAst(e.left,t),function(){return D.evalAst(e.right,t)})},evalCompound:function(e,t){for(var r=0;r{n(642)(n(793))},462:(e,t,n)=>{n(642)(n(321))},481:e=>{e.exports='(function(root,factory){if(typeof exports==="object"){module.exports=exports=factory()}else if(typeof define==="function"&&define.amd){define([],factory)}else{globalThis.gbkTool=factory()}})(this,function(){var data=function(zipData){var re=zipData.replace(/#(\\d+)\\$/g,function(a,b){return Array(+b+3).join("#")}).replace(/#/g,"####").replace(/(\\w\\w):([\\w#]+)(?:,|$)/g,function(a,hd,dt){return dt.replace(/../g,function(a){if(a!="##"){return hd+a}else{return a}})});return re}("4e:020405060f12171f20212326292e2f313335373c40414244464a5155575a5b6263646567686a6b6c6d6e6f727475767778797a7b7c7d7f808182838485878a#909697999c9d9ea3aaafb0b1b4b6b7b8b9bcbdbec8cccfd0d2dadbdce0e2e6e7e9edeeeff1f4f8f9fafcfe,4f:00020304050607080b0c12131415161c1d212328292c2d2e31333537393b3e3f40414244454748494a4b4c525456616266686a6b6d6e7172757778797a7d8081828586878a8c8e909293959698999a9c9e9fa1a2a4abadb0b1b2b3b4b6b7b8b9babbbcbdbec0c1c2c6c7c8c9cbcccdd2d3d4d5d6d9dbe0e2e4e5e7ebecf0f2f4f5f6f7f9fbfcfdff,50:000102030405060708090a#0b0e1011131516171b1d1e20222324272b2f303132333435363738393b3d3f404142444546494a4b4d5051525354565758595b5d5e5f6061626364666768696a6b6d6e6f70717273747578797a7c7d818283848687898a8b8c8e8f909192939495969798999a9b9c9d9e9fa0a1a2a4a6aaabadaeafb0b1b3b4b5b6b7b8b9bcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdced0d1d2d3d4d5d7d8d9dbdcdddedfe0e1e2e3e4e5e8e9eaebeff0f1f2f4f6f7f8f9fafcfdfeff,51:00010203040508#090a0c0d0e0f1011131415161718191a1b1c1d1e1f2022232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e42474a4c4e4f5052535758595b5d5e5f606163646667696a6f727a7e7f838486878a8b8e8f90919394989a9d9e9fa1a3a6a7a8a9aaadaeb4b8b9babebfc1c2c3c5c8cacdced0d2d3d4d5d6d7d8d9dadcdedfe2e3e5e6e7e8e9eaeceef1f2f4f7fe,52:0405090b0c0f101314151c1e1f2122232526272a2c2f313234353c3e4445464748494b4e4f5253555758#595a5b5d5f6062636466686b6c6d6e7071737475767778797a7b7c7e808384858687898a8b8c8d8e8f91929495969798999a9ca4a5a6a7aeafb0b4b5b6b7b8b9babbbcbdc0c1c2c4c5c6c8cacccdcecfd1d3d4d5d7d9dadbdcdddee0e1e2e3e5e6e7e8e9eaebecedeeeff1f2f3f4f5f6f7f8fbfcfd,53:0102030407090a0b0c0e11121314181b1c1e1f2224252728292b2c2d2f3031323334353637383c3d404244464b4c4d505458595b5d65686a6c6d7276797b7c7d7e80818387888a8e8f#90919293949697999b9c9ea0a1a4a7aaabacadafb0b1b2b3b4b5b7b8b9babcbdbec0c3c4c5c6c7cecfd0d2d3d5dadcdddee1e2e7f4fafeff,54:000205070b1418191a1c2224252a303336373a3d3f4142444547494c4d4e4f515a5d5e5f6061636567696a6b6c6d6e6f7074797a7e7f8183858788898a8d919397989c9e9fa0a1a2a5aeb0b2b5b6b7b9babcbec3c5cacbd6d8dbe0e1e2e3e4ebeceff0f1f4f5f6f7f8f9fbfe,55:0002030405080a0b0c0d0e121315161718191a1c1d1e1f212526#28292b2d3234353638393a3b3d40424547484b4c4d4e4f515253545758595a5b5d5e5f60626368696b6f7071727374797a7d7f85868c8d8e9092939596979a9b9ea0a1a2a3a4a5a6a8a9aaabacadaeafb0b2b4b6b8babcbfc0c1c2c3c6c7c8cacbcecfd0d5d7d8d9dadbdee0e2e7e9edeef0f1f4f6f8f9fafbfcff,56:0203040506070a0b0d1011121314151617191a1c1d202122252628292a2b2e2f30333537383a3c3d3e404142434445464748494a4b4f5051525355565a5b5d5e5f6061#636566676d6e6f70727374757778797a7d7e7f80818283848788898a8b8c8d9091929495969798999a9b9c9d9e9fa0a1a2a4a5a6a7a8a9aaabacadaeb0b1b2b3b4b5b6b8b9babbbdbebfc0c1c2c3c4c5c6c7c8c9cbcccdcecfd0d1d2d3d5d6d8d9dce3e5e6e7e8e9eaeceeeff2f3f6f7f8fbfc,57:00010205070b0c0d0e0f101112131415161718191a1b1d1e202122242526272b313234353637383c3d3f414344454648494b52535455565859626365676c6e707172747578797a7d7e7f80#818788898a8d8e8f90919495969798999a9c9d9e9fa5a8aaacafb0b1b3b5b6b7b9babbbcbdbebfc0c1c4c5c6c7c8c9cacccdd0d1d3d6d7dbdcdee1e2e3e5e6e7e8e9eaebeceef0f1f2f3f5f6f7fbfcfeff,58:0103040508090a0c0e0f101213141617181a1b1c1d1f222325262728292b2c2d2e2f31323334363738393a3b3c3d3e3f4041424345464748494a4b4e4f505253555657595a5b5c5d5f6061626364666768696a6d6e6f707172737475767778797a7b7c7d7f82848687888a8b8c#8d8e8f909194959697989b9c9da0a1a2a3a4a5a6a7aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbdbebfc0c2c3c4c6c7c8c9cacbcccdcecfd0d2d3d4d6d7d8d9dadbdcdddedfe0e1e2e3e5e6e7e8e9eaedeff1f2f4f5f7f8fafbfcfdfeff,59:000103050608090a0b0c0e1011121317181b1d1e2021222326282c30323335363b3d3e3f404345464a4c4d505253595b5c5d5e5f616364666768696a6b6c6d6e6f70717275777a7b7c7e7f8085898b8c8e8f90919495989a9b9c9d9fa0a1a2a6#a7acadb0b1b3b4b5b6b7b8babcbdbfc0c1c2c3c4c5c7c8c9cccdcecfd5d6d9dbdedfe0e1e2e4e6e7e9eaebedeeeff0f1f2f3f4f5f6f7f8fafcfdfe,5a:00020a0b0d0e0f101214151617191a1b1d1e2122242627282a2b2c2d2e2f3033353738393a3b3d3e3f414243444547484b4c4d4e4f5051525354565758595b5c5d5e5f60616364656668696b6c6d6e6f7071727378797b7c7d7e808182838485868788898a8b8c8d8e8f9091939495969798999c9d9e9fa0a1a2a3a4a5a6a7a8a9abac#adaeafb0b1b4b6b7b9babbbcbdbfc0c3c4c5c6c7c8cacbcdcecfd0d1d3d5d7d9dadbdddedfe2e4e5e7e8eaecedeeeff0f2f3f4f5f6f7f8f9fafbfcfdfeff,5b:0001020304050607080a0b0c0d0e0f10111213141518191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303133353638393a3b3c3d3e3f4142434445464748494a4b4c4d4e4f52565e606167686b6d6e6f7274767778797b7c7e7f82868a8d8e90919294969fa7a8a9acadaeafb1b2b7babbbcc0c1c3c8c9cacbcdcecf#d1d4d5d6d7d8d9dadbdce0e2e3e6e7e9eaebecedeff1f2f3f4f5f6f7fdfe,5c:0002030507080b0c0d0e10121317191b1e1f2021232628292a2b2d2e2f303233353637434446474c4d5253545657585a5b5c5d5f62646768696a6b6c6d70727374757677787b7c7d7e808384858687898a8b8e8f9293959d9e9fa0a1a4a5a6a7a8aaaeafb0b2b4b6b9babbbcbec0c2c3c5c6c7c8c9cacccdcecfd0d1d3d4d5d6d7d8dadbdcdddedfe0e2e3e7e9ebeceeeff1f2f3f4f5f6f7f8f9fafcfdfeff,5d:00#01040508090a0b0c0d0f10111213151718191a1c1d1f2021222325282a2b2c2f3031323335363738393a3b3c3f4041424344454648494d4e4f5051525354555657595a5c5e5f6061626364656667686a6d6e7071727375767778797a7b7c7d7e7f8081838485868788898a8b8c8d8e8f9091929394959697989a9b9c9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b8b9babbbcbdbebfc0c1c2c3c4c6c7c8c9cacbcccecfd0d1d2d3d4d5d6d7d8d9dadcdfe0e3e4eaeced#f0f5f6f8f9fafbfcff,5e:000407090a0b0d0e1213171e1f20212223242528292a2b2c2f303233343536393a3e3f404143464748494a4b4d4e4f50515253565758595a5c5d5f60636465666768696a6b6c6d6e6f70717577797e8182838588898c8d8e92989b9da1a2a3a4a8a9aaabacaeafb0b1b2b4babbbcbdbfc0c1c2c3c4c5c6c7c8cbcccdcecfd0d4d5d7d8d9dadcdddedfe0e1e2e3e4e5e6e7e9ebecedeeeff0f1f2f3f5f8f9fbfcfd,5f:050607090c0d0e10121416191a1c1d1e21222324#282b2c2e30323334353637383b3d3e3f4142434445464748494a4b4c4d4e4f5154595a5b5c5e5f60636567686b6e6f72747576787a7d7e7f83868d8e8f919394969a9b9d9e9fa0a2a3a4a5a6a7a9abacafb0b1b2b3b4b6b8b9babbbebfc0c1c2c7c8cacbced3d4d5dadbdcdedfe2e3e5e6e8e9eceff0f2f3f4f6f7f9fafc,60:0708090b0c10111317181a1e1f2223242c2d2e3031323334363738393a3d3e404445464748494a4c4e4f5153545657585b5c5e5f606165666e71727475777e80#8182858687888a8b8e8f909193959798999c9ea1a2a4a5a7a9aaaeb0b3b5b6b7b9babdbebfc0c1c2c3c4c7c8c9cccdcecfd0d2d3d4d6d7d9dbdee1e2e3e4e5eaf1f2f5f7f8fbfcfdfeff,61:02030405070a0b0c1011121314161718191b1c1d1e21222528292a2c2d2e2f303132333435363738393a3b3c3d3e4041424344454647494b4d4f50525354565758595a5b5c5e5f606163646566696a6b6c6d6e6f717273747678797a7b7c7d7e7f808182838485868788898a8c8d8f9091929395#969798999a9b9c9e9fa0a1a2a3a4a5a6aaabadaeafb0b1b2b3b4b5b6b8b9babbbcbdbfc0c1c3c4c5c6c7c9cccdcecfd0d3d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e7e8e9eaebecedeeeff0f1f2f3f4f6f7f8f9fafbfcfdfe,62:00010203040507091314191c1d1e2023262728292b2d2f303132353638393a3b3c424445464a4f50555657595a5c5d5e5f6061626465687172747577787a7b7d818283858687888b8c8d8e8f9094999c9d9ea3a6a7a9aaadaeafb0b2b3b4b6b7b8babec0c1#c3cbcfd1d5dddee0e1e4eaebf0f2f5f8f9fafb,63:00030405060a0b0c0d0f10121314151718191c2627292c2d2e30313334353637383b3c3e3f40414447484a51525354565758595a5b5c5d60646566686a6b6c6f707273747578797c7d7e7f81838485868b8d9193949597999a9b9c9d9e9fa1a4a6abafb1b2b5b6b9bbbdbfc0c1c2c3c5c7c8cacbccd1d3d4d5d7d8d9dadbdcdddfe2e4e5e6e7e8ebeceeeff0f1f3f5f7f9fafbfcfe,64:0304060708090a0d0e111215161718191a1d1f222324#252728292b2e2f3031323335363738393b3c3e404243494b4c4d4e4f505153555657595a5b5c5d5f60616263646566686a6b6c6e6f70717273747576777b7c7d7e7f8081838688898a8b8c8d8e8f90939497989a9b9c9d9fa0a1a2a3a5a6a7a8aaabafb1b2b3b4b6b9bbbdbebfc1c3c4c6c7c8c9cacbcccfd1d3d4d5d6d9dadbdcdddfe0e1e3e5e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,65:01020304050607080a0b0c0d0e0f10111314151617191a1b1c1d1e1f2021#222324262728292a2c2d30313233373a3c3d404142434446474a4b4d4e5052535457585a5c5f606164656768696a6d6e6f7173757678797a7b7c7d7e7f8081828384858688898a8d8e8f92949596989a9d9ea0a2a3a6a8aaacaeb1b2b3b4b5b6b7b8babbbebfc0c2c7c8c9cacdd0d1d3d4d5d8d9dadbdcdddedfe1e3e4eaebf2f3f4f5f8f9fbfcfdfeff,66:0104050708090b0d1011121617181a1b1c1e2122232426292a2b2c2e3032333738393a3b3d3f40424445464748494a4d4e505158#595b5c5d5e6062636567696a6b6c6d7172737578797b7c7d7f808183858688898a8b8d8e8f909293949598999a9b9c9e9fa0a1a2a3a4a5a6a9aaabacadafb0b1b2b3b5b6b7b8babbbcbdbfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8dadedfe0e1e2e3e4e5e7e8eaebecedeeeff1f5f6f8fafbfd,67:010203040506070c0e0f1112131618191a1c1e20212223242527292e303233363738393b3c3e3f414445474a4b4d5254555758595a5b5d62636466676b6c6e717476#78797a7b7d8082838586888a8c8d8e8f9192939496999b9fa0a1a4a6a9acaeb1b2b4b9babbbcbdbebfc0c2c5c6c7c8c9cacbcccdced5d6d7dbdfe1e3e4e6e7e8eaebedeef2f5f6f7f8f9fafbfcfe,68:01020304060d1012141518191a1b1c1e1f20222324252627282b2c2d2e2f30313435363a3b3f474b4d4f52565758595a5b5c5d5e5f6a6c6d6e6f707172737578797a7b7c7d7e7f8082848788898a8b8c8d8e90919294959698999a9b9c9d9e9fa0a1a3a4a5a9aaabacaeb1b2b4b6b7b8#b9babbbcbdbebfc1c3c4c5c6c7c8cacccecfd0d1d3d4d6d7d9dbdcdddedfe1e2e4e5e6e7e8e9eaebecedeff2f3f4f6f7f8fbfdfeff,69:00020304060708090a0c0f11131415161718191a1b1c1d1e21222325262728292a2b2c2e2f313233353637383a3b3c3e4041434445464748494a4b4c4d4e4f50515253555658595b5c5f616264656768696a6c6d6f7072737475767a7b7d7e7f8183858a8b8c8e8f909192939697999a9d9e9fa0a1a2a3a4a5a6a9aaacaeafb0b2b3b5b6b8b9babcbd#bebfc0c2c3c4c5c6c7c8c9cbcdcfd1d2d3d5d6d7d8d9dadcdddee1e2e3e4e5e6e7e8e9eaebeceeeff0f1f3f4f5f6f7f8f9fafbfcfe,6a:000102030405060708090b0c0d0e0f10111213141516191a1b1c1d1e20222324252627292b2c2d2e30323334363738393a3b3c3f40414243454648494a4b4c4d4e4f515253545556575a5c5d5e5f60626364666768696a6b6c6d6e6f70727374757677787a7b7d7e7f81828385868788898a8b8c8d8f929394959698999a9b9c9d9e9fa1a2a3a4a5a6#a7a8aaadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,6b:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f252628292a2b2c2d2e2f303133343536383b3c3d3f4041424445484a4b4d4e4f5051525354555657585a5b5c5d5e5f606168696b6c6d6e6f7071727374757677787a7d7e7f808588#8c8e8f909194959798999c9d9e9fa0a2a3a4a5a6a7a8a9abacadaeafb0b1b2b6b8b9babbbcbdbec0c3c4c6c7c8c9caccced0d1d8dadcdddedfe0e2e3e4e5e6e7e8e9ecedeef0f1f2f4f6f7f8fafbfcfeff,6c:000102030408090a0b0c0e12171c1d1e2023252b2c2d31333637393a3b3c3e3f434445484b4c4d4e4f5152535658595a62636566676b6c6d6e6f71737577787a7b7c7f8084878a8b8d8e9192959697989a9c9d9ea0a2a8acafb0b4b5b6b7bac0c1c2c3c6c7c8cbcdcecfd1d2d8#d9dadcdddfe4e6e7e9ecedf2f4f9ff,6d:000203050608090a0d0f101113141516181c1d1f20212223242628292c2d2f30343637383a3f404244494c50555657585b5d5f6162646567686b6c6d707172737576797a7b7d7e7f8081838486878a8b8d8f9092969798999a9ca2a5acadb0b1b3b4b6b7b9babbbcbdbec1c2c3c8c9cacdcecfd0d2d3d4d5d7dadbdcdfe2e3e5e7e8e9eaedeff0f2f4f5f6f8fafdfeff,6e:0001020304060708090b0f12131518191b1c1e1f222627282a2c2e30313335#3637393b3c3d3e3f40414245464748494a4b4c4f5051525557595a5c5d5e606162636465666768696a6c6d6f707172737475767778797a7b7c7d8081828487888a8b8c8d8e91929394959697999a9b9d9ea0a1a3a4a6a8a9abacadaeb0b3b5b8b9bcbebfc0c3c4c5c6c8c9cacccdced0d2d6d8d9dbdcdde3e7eaebecedeeeff0f1f2f3f5f6f7f8fafbfcfdfeff,6f:000103040507080a0b0c0d0e101112161718191a1b1c1d1e1f212223252627282c2e303234353738393a3b3c3d3f404142#43444548494a4c4e4f5051525354555657595a5b5d5f60616364656768696a6b6c6f707173757677797b7d7e7f808182838586878a8b8f909192939495969798999a9b9d9e9fa0a2a3a4a5a6a8a9aaabacadaeafb0b1b2b4b5b7b8babbbcbdbebfc1c3c4c5c6c7c8cacbcccdcecfd0d3d4d5d6d7d8d9dadbdcdddfe2e3e4e5e6e7e8e9eaebecedf0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,70:000102030405060708090a0b0c0d0e0f1012131415161718191c1d1e1f2021222425262728292a#2b2c2d2e2f30313233343637383a3b3c3d3e3f404142434445464748494a4b4d4e505152535455565758595a5b5c5d5f606162636465666768696a6e7172737477797a7b7d818283848687888b8c8d8f90919397989a9b9e9fa0a1a2a3a4a5a6a7a8a9aab0b2b4b5b6babebfc4c5c6c7c9cbcccdcecfd0d1d2d3d4d5d6d7dadcdddee0e1e2e3e5eaeef0f1f2f3f4f5f6f8fafbfcfeff,71:0001020304050607080b0c0d0e0f111214171b1c1d1e1f2021222324252728292a2b2c2d2e323334#353738393a3b3c3d3e3f4041424344464748494b4d4f505152535455565758595a5b5d5f6061626365696a6b6c6d6f707174757677797b7c7e7f8081828385868788898b8c8d8e909192939596979a9b9c9d9ea1a2a3a4a5a6a7a9aaabadaeafb0b1b2b4b6b7b8babbbcbdbebfc0c1c2c4c5c6c7c8c9cacbcccdcfd0d1d2d3d6d7d8d9dadbdcdddedfe1e2e3e4e6e8e9eaebecedeff0f1f2f3f4f5f6f7f8fafbfcfdfeff,72:0001020304050708090a0b0c0d0e0f101112131415161718191a#1b1c1e1f2021222324252627292b2d2e2f3233343a3c3e40414243444546494a4b4e4f505153545557585a5c5e60636465686a6b6c6d707173747677787b7c7d828385868788898c8e9091939495969798999a9b9c9d9ea0a1a2a3a4a5a6a7a8a9aaabaeb1b2b3b5babbbcbdbebfc0c5c6c7c9cacbcccfd1d3d4d5d6d8dadb#95$,30:000102,00b702:c9c7,00a830:0305,2014ff5e20:162618191c1d,30:141508090a0b0c0d0e0f16171011,00:b1d7f7,22:362728110f2a2908371aa52520,231222:992b2e614c483d1d606e6f64651e3534,26:4240,00b020:3233,2103ff0400a4ff:e0e1,203000a7211626:0605,25:cbcfcec7c6a1a0b3b2,203b21:92909193,30:13#95$,21:70717273747576777879#4$,24:88898a8b8c8d8e8f909192939495969798999a9b7475767778797a7b7c7d7e7f808182838485868760616263646566676869##,32:20212223242526272829##,21:606162636465666768696a6b#97$,ff:010203e505060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5de3#95$,30:4142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90919293#106$a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6#103$,03:9192939495969798999a9b9c9d9e9fa0a1a3a4a5a6a7a8a9#6$b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c3c4c5c6c7c8c9#5$,fe:3536393a3f403d3e41424344##3b3c373831#3334#104$,04:10111213141501161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f#13$30313233343551363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f#11$,02:cacbd9,20:13152535,21:050996979899,22:151f23526667bf,25:505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071727381828384858687#88898a8b8c8d8e8f939495bcbde2e3e4e5,2609229530:121d1e#9$,010100e101ce00e0011300e9011b00e8012b00ed01d000ec014d00f301d200f2016b00fa01d400f901:d6d8dadc,00:fcea,0251e7c701:4448,e7c802:61#2$,31:05060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526272829#19$,30:212223242526272829,32a333:8e8f9c9d9ea1c4ced1d2d5,fe30ff:e2e4#,212132:31#,20:10#1$,30:fc9b9cfdfe069d9e,fe:494a4b4c4d4e4f50515254555657595a5b5c5d5e5f6061#626364656668696a6b,e7:e7e8e9eaebecedeeeff0f1f2f3,30:07#11$,25:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b#13$,72:dcdddfe2e3e4e5e6e7eaebf5f6f9fdfeff,73:00020405060708090b0c0d0f1011121418191a1f2023242627282d2f30323335363a3b3c3d404142434445464748#494a4b4c4e4f515354555658595a5b5c5d5e5f6162636465666768696a6b6e7071#92$72737475767778797a7b7c7d7f808182838586888a8c8d8f90929394959798999a9c9d9ea0a1a3a4a5a6a7a8aaacadb1b4b5b6b8b9bcbdbebfc1c3c4c5c6c7#cbccced2d3d4d5d6d7d8dadbdcdddfe1e2e3e4e6e8eaebeceeeff0f1f3f4f5f6f7#92$f8f9fafbfcfdfeff,74:0001020407080b0c0d0e1112131415161718191c1d1e1f2021232427292b2d2f31323738393a3b3d3e3f4042434445464748494a4b4c4d#4e4f505152535456585d606162636465666768696a6b6c6e6f717273747578797a#92$7b7c7d7f8284858688898a8c8d8f9192939495969798999a9b9d9fa0a1a2a3a4a5a6aaabacadaeafb0b1b2b3b4b5b6b7b8b9bbbcbdbebfc0c1c2c3c4c5c6c7#c8c9cacbcccdcecfd0d1d3d4d5d6d7d8d9dadbdddfe1e5e7e8e9eaebecedf0f1f2#92$f3f5f8f9fafbfcfdfe,75:0001020305060708090a0b0c0e1012141516171b1d1e202122232426272a2e3436393c3d3f414243444647494a4d5051525355565758#5d5e5f60616263646768696b6c6d6e6f7071737576777a7b7c7d7e808182848587#92$88898a8c8d8e909395989b9c9ea2a6a7a8a9aaadb6b7babbbfc0c1c6cbcccecfd0d1d3d7d9dadcdddfe0e1e5e9ecedeeeff2f3f5f6f7f8fafbfdfe,76:02040607#08090b0d0e0f11121314161a1c1d1e212327282c2e2f31323637393a3b3d414244#92$45464748494a4b4e4f50515253555758595a5b5d5f6061626465666768696a6c6d6e7071727374757677797a7c7f80818385898a8c8d8f9092949597989a9b#9c9d9e9fa0a1a2a3a5a6a7a8a9aaabacadafb0b3b5b6b7b8b9babbbcbdbec0c1c3,554a963f57c3632854ce550954c076:914c,853c77ee827e788d72319698978d6c285b894ffa630966975cb880fa684880ae660276ce51f9655671ac7ff1888450b2596561ca6fb382ad634c625253ed54277b06516b75a45df462d48dcb9776628a8019575d97387f627238767d67cf767e64464f708d2562dc7a17659173ed642c6273822c9881677f724862:6ecc,4f3474e3534a529e7eca90a65e2e6886699c81807ed168d278c5868c9551508d8c2482de80de53058912526576:c4c7c9cbccd3d5d9dadcdddee0e1e2e3e4e6e7e8e9eaebecedf0f3f5f6f7fafbfdff,77:00020305060a0c0e0f1011121314151617181b1c1d1e21232425272a2b#2c2e3031323334393b3d3e3f4244454648494a4b4c4d4e4f52535455565758595c,858496f94fdd582199715b9d62:b1a5,66b48c799c8d7206676f789160b253:5117,8f8880cc8d1d94a1500d72c8590760eb711988ab595482ef672c7b285d297ef7752d6cf58e668ff8903c9f3b6bd491197b145f7c78a784d6853d6b:d5d9d6,5e:0187,75f995ed655d5f:0ac5,8f9f58c181c2907f965b97ad8fb97f168d2c62414fbf53:d85e,8f:a8a9ab,904d68075f6a819888689cd6618b522b762a5f6c658c6fd26ee85bbe644851:75b0,67c44e1979c9997c70b377:5d5e5f606467696a6d6e6f7071727374757677787a7b7c818283868788898a8b8f90939495969798999a9b9c9d9ea1a3a4a6a8abadaeafb1b2b4b6b7b8b9ba#bcbec0c1c2c3c4c5c6c7c8c9cacbcccecfd0d1d2d3d4d5d6d8d9dadddedfe0e1e4,75c55e7673bb83e064ad62e894b56ce2535a52c3640f94c27b944f2f5e1b823681:168a,6e246cca9a736355535c54fa886557e04e0d5e036b657c3f90e8601664e6731c88c16750624d8d22776c8e2991c75f6983dc8521991053c286956b8b60:ede8,707f82:cd31,4ed36ca785cf64cd7cd969fd66f9834953957b564fa7518c6d4b5c428e6d63d253c983:2c36,67e578b4643d5bdf5c945dee8be762c667f48c7a640063ba8749998b8c177f2094f24ea7961098a4660c731677:e6e8eaeff0f1f2f4f5f7f9fafbfc,78:0304050607080a0b0e0f101315191b1e20212224282a2b2e2f31323335363d3f414243444648494a4b4d4f51535458595a#5b5c5e5f606162636465666768696f7071727374757678797a7b7d7e7f80818283,573a5c1d5e38957f507f80a05382655e7545553150218d856284949e671d56326f6e5de2543570928f66626f64a463a35f7b6f8890f481e38fb05c1866685ff16c8996488d81886c649179f057ce6a59621054484e587a0b60e96f848bda627f901e9a8b79e4540375f4630153196c608fdf5f1b9a70803b9f7f4f885c3a8d647fc565a570bd51:45b2,866b5d075ba062bd916c75748e0c7a2061017b794ec77ef877854e1181ed521d51fa6a7153a88e87950496cf6ec19664695a78:848586888a8b8f9092949596999d9ea0a2a4a6a8a9aaabacadaeafb5b6b7b8babbbcbdbfc0c2c3c4c6c7c8cccdcecfd1d2d3d6d7d8dadbdcdddedfe0e1e2e3#e4e5e6e7e9eaebedeeeff0f1f3f5f6f8f9fbfcfdfeff,79:00020304060708090a0b0c,784050a877d7641089e6590463e35ddd7a7f693d4f20823955984e3275ae7a975e:628a,95ef521b5439708a6376952457826625693f918755076df37eaf882262337ef075b5832878c196cc8f9e614874f78bcd6b64523a8d506b21806a847156f153064e:ce1b,51d17c97918b7c074fc38e7f7be17a9c64675d1450ac810676017cb96dec7fe067515b:58f8,78cb64:ae13,63:aa2b,9519642d8fbe7b5476296253592754466b7950a362345e266b864ee38d37888b5f85902e79:0d0e0f1011121415161718191a1b1c1d1f2021222325262728292a2b2c2d2e2f3031323335363738393d3f42434445474a4b4c4d4e4f505152545558596163#6466696a6b6c6e70717273747576797b7c7d7e7f8283868788898b8c8d8e909192,6020803d62c54e39535590f863b880c665e66c2e4f4660ee6de18bde5f3986cb5f536321515a83616863520063638e4850125c9b79775bfc52307a3b60bc905376d75f:b797,76848e6c706f767b7b4977aa51f3909358244f4e6ef48fea654c7b1b72c46da47fdf5ae162b55e95573084827b2c5e1d5f1f90127f1498a063826ec7789870b95178975b57ab75354f4375385e9760e659606dc06bbf788953fc96d551cb52016389540a94938c038dcc7239789f87768fed8c0d53e079:939495969798999b9c9d9e9fa0a1a2a3a4a5a6a8a9aaabacadaeafb0b1b2b4b5b6b7b8bcbfc2c4c5c7c8cacccecfd0d3d4d6d7d9dadbdcdddee0e1e2e5e8ea#eceef1f2f3f4f5f6f7f9fafcfeff,7a:0104050708090a0c0f10111213151618191b1c,4e0176ef53ee948998769f0e952d5b9a8ba24e:221c,51ac846361c252a8680b4f97606b51bb6d1e515c6296659796618c46901775d890fd77636bd272:8aec,8bfb583577798d4c675c9540809a5ea66e2159927aef77ed953b6bb565ad7f0e58065151961f5bf958a954288e726566987f56e4949d76fe9041638754c659:1a3a,579b8eb267358dfa8235524160f0581586fe5ce89e454fc4989d8bb95a2560765384627c904f9102997f6069800c513f80335c1499756d314e8c7a:1d1f21222425262728292a2b2c2d2e2f303132343536383a3e4041424344454748494a4b4c4d4e4f50525354555658595a5b5c5d5e5f606162636465666768#696a6b6c6d6e6f717273757b7c7d7e828587898a8b8c8e8f909394999a9b9ea1a2,8d3053d17f5a7b4f4f104e4f96006cd573d085e95e06756a7ffb6a0a77fe94927e4151e170e653cd8fd483038d2972af996d6cdb574a82b365b980aa623f963259a84eff8bbf7eba653e83f2975e556198de80a5532a8bfd542080ba5e9f6cb88d3982ac915a54296c1b52067eb7575f711a6c7e7c89594b4efd5fff61247caa4e305c0167ab87025cf0950b98ce75af70fd902251af7f1d8bbd594951e44f5b5426592b657780a45b7562:76c2,8f905e456c1f7b264f:0fd8,670d7a:a3a4a7a9aaabaeafb0b1b2b4b5b6b7b8b9babbbcbdbec0c1c2c3c4c5c6c7c8c9cacccdcecfd0d1d2d3d4d5d7d8dadbdcdde1e2e4e7e8e9eaebeceef0f1f2f3#f4f5f6f7f8fbfcfe,7b:0001020507090c0d0e1012131617181a1c1d1f21222327292d,6d:6eaa,798f88b15f17752b629a8f854fef91dc65a781:2f51,5e9c81508d74526f89868d4b590d50854ed8961c723681798d1f5bcc8ba3964459877f1a549056:760e,8be565396982949976d66e895e72751867:46d1,7aff809d8d76611f79c665628d635188521a94a27f38809b7eb25c976e2f67607bd9768b9ad8818f7f947cd5641e95507a3f54:4ae5,6b4c640162089e3d80f3759952729769845b683c86e496:0194,94ec4e2a54047ed968398ddf801566f45e9a7fb97b:2f303234353637393b3d3f404142434446484a4d4e535557595c5e5f61636465666768696a6b6c6d6f70737476787a7c7d7f81828384868788898a8b8c8e8f#9192939698999a9b9e9fa0a3a4a5aeafb0b2b3b5b6b7b9babbbcbdbebfc0c2c3c4,57c2803f68975de5653b529f606d9f9a4f9b8eac516c5bab5f135de96c5e62f18d21517194a952fe6c9f82df72d757a267848d2d591f8f9c83c754957b8d4f306cbd5b6459d19f1353e486ca9aa88c3780a16545987e56fa96c7522e74dc52505be1630289024e5662d0602a68fa51735b9851a089c27ba199867f5060ef704c8d2f51495e7f901b747089c4572d78455f529f9f95fa8f689b3c8be17678684267dc8d:ea35,523d8f8a6eda68cd950590ed56fd679c88f98fc754c87b:c5c8c9cacbcdcecfd0d2d4d5d6d7d8dbdcdedfe0e2e3e4e7e8e9ebecedeff0f2f3f4f5f6f8f9fafbfdff,7c:0001020304050608090a0d0e101112131415171819#1a1b1c1d1e20212223242528292b2c2d2e2f3031323334353637393a3b3c3d3e42,9ab85b696d776c264ea55bb39a87916361a890af97e9542b6db55bd251fd558a7f:55f0,64bc634d65f161be608d710a6c:5749,592f676d822a58d5568e8c6a6beb90dd597d801753f76d695475559d83:77cf,683879be548c4f55540876d28c8996026cb36db88d6b89109e648d3a563f9ed175d55f8872e0606854fc4ea86a2a886160528f7054c470d886799e3f6d2a5b8f5f187ea255894faf7334543c539a501954:0e7c,4e4e5ffd745a58f6846b80e1877472d07cca6e567c:434445464748494a4b4c4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70717275767778797a7e7f8081828384858687#888a8b8c8d8e8f90939496999a9ba0a1a3a6a7a8a9abacadafb0b4b5b6b7b8babb,5f27864e552c62a44e926caa623782b154d7534e733e6ed1753b521253168bdd69d05f8a60006dee574f6b2273af68538fd87f13636260a3552475ea8c6271156da35ba65e7b8352614c9ec478fa87577c27768751f060f6714c66435e4c604d8c0e707063258f895fbd606286d456de6bc160946167534960e066668d3f79fd4f1a70e96c478b:b3f2,7ed88364660f5a5a9b426d:51f7,8c416d3b4f19706b83b7621660d1970d8d27797851fb57:3efa,673a75787a3d79ef7b957c:bfc0c2c3c4c6c9cbcecfd0d1d2d3d4d8dadbdddee1e2e3e4e5e6e7e9eaebecedeef0f1f2f3f4f5f6f7f9fafcfdfeff,7d:000102030405060708090b0c0d0e0f10#1112131415161718191a1b1c1d1e1f212324252628292a2c2d2e30313233343536,808c99658ff96fc08ba59e2159ec7ee97f095409678168d88f917c4d96c653ca602575be6c7253735ac97ea7632451e0810a5df184df628051805b634f0e796d524260b86d4e5b:c4c2,8b:a1b0,65e25fcc964559937e:e7aa,560967b759394f735bb652a0835a988a8d3e753294be50477a3c4ef767b69a7e5ac16b7c76d1575a5c167b3a95f4714e517c80a9827059787f04832768c067ec78:b177,62e363617b804fed526a51cf835069db92748d:f531,89c1952e7bad4ef67d:3738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6f70717273747576#78797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798,506582305251996f6e:1085,6da75efa50f559dc5c066d466c5f7586848b686859568bb253209171964d854969127901712680f64ea490ca6d479a845a0756bc640594f077eb4fa5811a72e189d2997a7f347ede527f655991758f:7f83,53eb7a9663:eda5,768679f888579636622a52ab8282685467706377776b7aed6d017ed389e359d0621285c982a5754c501f4ecb75a58beb5c4a5dfe7b4b65a491d14eca6d25895f7d2795264ec58c288fdb9773664b79818fd170ec6d787d:999a9b9c9d9e9fa0a1a2a3a4a5a7a8a9aaabacadafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9#dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fa,5c3d52b283465162830e775b66769cb84eac60ca7c:beb3,7ecf4e958b66666f988897595883656c955c5f8475c997567a:dfde,51c070af7a9863ea7a767ea0739697ed4e4570784e5d915253a965:51e7,81fc8205548e5c31759a97a062d872d975bd5c459a7983ca5c40548077e94e3e6cae805a62d2636e5de851778ddd8e1e952f4ff153e560e770ac526763509e435a1f5026773753777ee26485652b628963985014723589c951b38bc07edd574783cc94a7519b541b5cfb7d:fbfcfdfeff,7e:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233343536373839#3a3c3d3e3f40424344454648494a4b4c4d4e4f505152535455565758595a5b5c5d,4fca7ae36d5a90e19a8f55805496536154af5f0063e9697751ef6168520a582a52d8574e780d770b5eb761777ce062:5b97,4ea27095800362f770e49760577782db67ef68f578d5989779d158f354b353ef6e34514b523b5ba28bfe80af554357a660735751542d7a7a60505b5463a762a053e362635bc767af54ed7a9f82e691775e9388e4593857ae630e8de880ef57577b774fa95feb5bbd6b3e53217b5072c2684677:ff36,65f751b54e8f76d45cbf7aa58475594e9b4150807e:5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081838485868788898a8b8c8d8e8f909192939495969798999a9c9d9e#aeb4bbbcd6e4ecf9,7f:0a101e37393b3c3d3e3f404143464748494a4b4c4d4e4f5253,998861276e8357646606634656f062:ec69,5ed39614578362c955878721814a8fa3556683b167658d5684dd5a6a680f62e67bee961151706f9c8c3063fd89c861d27f0670c26ee57405699472fc5eca90ce67176d6a635e52b3726280014f6c59e5916a70d96d9d52d24e5096f7956d857e78ca7d2f5121579264c2808b7c7b6cea68f1695e51b7539868a872819ece7bf172f879bb6f137406674e91cc9ca4793c83:8954,540f68174e3d538952b1783e5386522950884f:8bd0,7f:56595b5c5d5e6063646566676b6c6d6f7073757677787a7b7c7d7f8082838485868788898b8d8f9091929395969798999b9ca0a2a3a5a6a8a9aaabacadaeb1#b3b4b5b6b7babbbec0c2c3c4c6c7c8c9cbcdcfd0d1d2d3d6d7d9dadbdcdddee2e3,75e27acb7c926ca596b6529b748354e94fe9805483b28fde95705ec9601c6d9f5e18655b813894fe604b70bc7ec37cae51c968817cb1826f4e248f8691cf667e4eae8c0564a9804a50da759771ce5be58fbd6f664e86648295635ed66599521788c270c852a3730e7433679778f797164e3490bb9cde6dcb51db8d41541d62ce73b283f196f69f8494c34f367f9a51cc707596755cad988653e64ee46e9c740969b4786b998f7559521876246d4167f3516d9f99804b54997b3c7abf7f:e4e7e8eaebecedeff2f4f5f6f7f8f9fafdfeff,80:020708090a0e0f11131a1b1d1e1f2123242b2c2d2e2f303234393a3c3e404144454748494e4f505153555657#595b5c5d5e5f6061626364656667686b6c6d6e6f7072737475767778797a7b7c7d,9686578462e29647697c5a0464027bd36f0f964b82a6536298855e90708963b35364864f9c819e93788c97328d:ef42,9e7f6f5e79845f559646622e9a74541594dd4fa365c55c:6561,7f1586516c2f5f8b73876ee47eff5ce6631b5b6a6ee653754e7163a0756562a18f6e4f264ed16ca67eb68bba841d87ba7f57903b95237ba99aa188f8843d6d1b9a867edc59889ebb739b780186829a:6c82,561b541757cb4e709ea653568fc881097792999286ee6ee1851366fc61626f2b80:7e818285888a8d8e8f909192949597999ea3a6a7a8acb0b3b5b6b8b9bbc5c7c8c9cacbcfd0d1d2d3d4d5d8dfe0e2e3e6eef5f7f9fbfeff,81:000103040507080b#0c1517191b1c1d1f202122232425262728292a2b2d2e3033343537393a3b3c3d3f,8c298292832b76f26c135fd983bd732b8305951a6bdb77db94c6536f830251925e3d8c8c8d384e4873ab679a68859176970971646ca177095a9295416bcf7f8e66275bd059b95a9a95:e8f7,4eec84:0c99,6aac76df9530731b68a65b5f772f919a97617cdc8ff78c1c5f257c7379d889c56ccc871c5bc65e4268c977207ef551:954d,52c95a297f05976282d763cf778485d079d26e3a5e9959998511706d6c1162bf76bf654f60af95fd660e879f9e2394ed54:0d7d,8c2c647881:40414243444547494d4e4f525657585b5c5d5e5f6162636466686a6b6c6f727375767778818384858687898b8c8d8e90929394959697999a9e9fa0a1a2a4a5#a7a9abacadaeafb0b1b2b4b5b6b7b8b9bcbdbebfc4c5c7c8c9cbcdcecfd0d1d2d3,647986116a21819c78e864699b5462b9672b83ab58a89ed86cab6f205bde964c8c0b725f67d062c772614ea959c66bcd589366ae5e5552df6155672876ee776672677a4662ff54:ea50,94a090a35a1c7eb36c164e435976801059485357753796be56ca63208111607c95f96dd65462998151855ae980fd59ae9713502a6ce55c3c62df4f60533f817b90066eba852b62c85e7478be64b5637b5ff55a18917f9e1f5c3f634f80425b7d556e95:4a4d,6d8560a867e072de51dd5b8181:d4d5d6d7d8d9dadbdcdddedfe0e1e2e4e5e6e8e9ebeeeff0f1f2f5f6f7f8f9fafdff,82:030708090a0b0e0f111315161718191a1d2024252627292e323a3c3d3f#404142434546484a4c4d4e5051525354555657595b5c5d5e606162636465666769,62e76cde725b626d94ae7ebd81136d53519c5f04597452aa6012597366968650759f632a61e67cef8bfa54e66b279e256bb485d5545550766ca4556a8db4722c5e156015743662cd6392724c5f986e436d3e65006f5876d878d076fc7554522453db4e535e9e65c180:2ad6,629b5486522870ae888d8dd16ce1547880da57f988f48d54966a914d4f696c9b55b776c6783062a870f96f8e5f6d84ec68da787c7bf781a8670b9e4f636778b0576f7812973962:79ab,528874356bd782:6a6b6c6d71757677787b7c808183858687898c90939495969a9b9ea0a2a3a7b2b5b6babbbcbfc0c2c3c5c6c9d0d6d9dadde2e7e8e9eaecedeef0f2f3f5f6f8#fafcfdfeff,83:000a0b0d1012131618191d1e1f20212223242526292a2e3032373b3d,5564813e75b276ae533975de50fb5c418b6c7bc7504f72479a9798d86f0274e27968648777a562fc98918d2b54c180584e52576a82f9840d5e7351ed74f68bc45c4f57616cfc98875a4678349b448feb7c955256625194fa4ec68386846183e984b257d467345703666e6d668c3166dd7011671f6b3a6816621a59bb4e0351c46f0667d26c8f517668cb59476b6775665d0e81109f5065d779:4841,9a918d775c824e5e4f01542f5951780c56686c148fc45f036c:7de3,8bab639083:3e3f41424445484a4b4c4d4e5355565758595d6270717273747576797a7e7f808182838487888a8b8c8d8f909194959697999a9d9fa1a2a3a4a5a6a7acadae#afb5bbbebfc2c3c4c6c8c9cbcdced0d1d2d3d5d7d9dadbdee2e3e4e6e7e8ebeced,60706d3d7275626694:8ec5,53438fc17b7e4edf8c264e7e9ed494:b1b3,524d6f5c90636d458c3458115d4c6b:2049,67aa545b81547f8c589985375f3a62a26a47953965726084686577a74e544fa85de7979864ac7fd85ced4fcf7a8d520783044e14602f7a8394a64fb54eb279e6743452e482b964d279bd5bdd6c8197528f7b6c22503e537f6e0564ce66746c3060c598778bf75e86743c7a7779cb4e1890b174036c4256da914b6cc58d8b533a86c666f28eaf5c489a716e2083:eeeff3f4f5f6f7fafbfcfeff,84:0002050708090a10121314151617191a1b1e1f20212223292a2b2c2d2e2f30323334353637393a3b3e3f404142434445474849#4a4b4c4d4e4f505253545556585d5e5f606264656667686a6e6f70727477797b7c,53d65a369f8b8da353bb570898a76743919b6cc9516875ca62f372ac52:389d,7f3a7094763853749e4a69b7786e96c088d97fa471:36c3,518967d374e458e4651856b78ba9997662707ed560f970ed58ec4e:c1ba,5fcd97e74efb8ba45203598a7eab62544ecd65e5620e833884c98363878d71946eb65bb97ed2519763c967d480898339881551125b7a59828fb14e736c5d516589258f6f962e854a745e95:10f0,6da682e55f3164926d128428816e9cc3585e8d5b4e0953c184:7d7e7f8081838485868a8d8f90919293949596989a9b9d9e9fa0a2a3a4a5a6a7a8a9aaabacadaeb0b1b3b5b6b7bbbcbec0c2c3c5c6c7c8cbcccecfd2d4d5d7#d8d9dadbdcdee1e2e4e7e8e9eaebedeeeff1f2f3f4f5f6f7f8f9fafbfdfe,85:000102,4f1e6563685155d34e2764149a9a626b5ac2745f82726da968ee50e7838e7802674052396c997eb150bb5565715e7b5b665273ca82eb67495c715220717d886b95ea965564c58d6181b355846c5562477f2e58924f2455468d4f664c4e0a5c1a88f368a2634e7a0d70e7828d52fa97f65c1154e890b57ecd59628d4a86c782:0c0d,8d6664445c0461516d89793e8bbe78377533547b4f388eab6df15a207ec5795e6c885ba15a76751a80be614e6e1758f075:1f25,727253477ef385:030405060708090a0b0d0e0f101214151618191b1c1d1e2022232425262728292a2d2e2f303132333435363e3f404142444546474b4c4d4e4f505152535455#57585a5b5c5d5f60616263656667696a6b6c6d6e6f707173757677787c7d7f8081,770176db526980dc57235e08593172ee65bd6e7f8bd75c388671534177f362fe65f64ec098df86805b9e8bc653f277e24f7f5c4e9a7659cb5f0f793a58eb4e1667ff4e8b62ed8a93901d52bf662f55dc566c90024ed54f8d91ca99706c0f5e0260435ba489c68bd56536624b99965b:88ff,6388552e53d77626517d852c67a268b36b8a62928f9353d482126dd1758f4e668d4e5b70719f85af66:91d9,7f7287009ecd9f205c5e672f8ff06811675f620d7ad658855eb665706f3185:82838688898a8b8c8d8e909192939495969798999a9d9e9fa0a1a2a3a5a6a7a9abacadb1b2b3b4b5b6b8babbbcbdbebfc0c2c3c4c5c6c7c8cacbcccdced1d2#d4d6d7d8d9dadbdddedfe0e1e2e3e5e6e7e8eaebecedeeeff0f1f2f3f4f5f6f7f8,60555237800d6454887075295e05681362f4971c53cc723d8c016c3477617a0e542e77ac987a821c8bf47855671470c165af64955636601d79c153f84e1d6b7b80865bfa55e356db4f:3a3c,99725df3677e80386002988290015b8b8b:bcf5,641c825864de55fd82cf91654fd77d20901f7c9f50f358516eaf5bbf8bc980839178849c7b97867d96:8b8f,7ee59ad3788e5c817a57904296a7795f5b59635f7b0b84d168ad55067f2974107d2295016240584c4ed65b835979585485:f9fafcfdfe,86:0001020304060708090a0b0c0d0e0f10121314151718191a1b1c1d1e1f20212223242526282a2b2c2d2e2f3031323334353637393a3b3d3e3f40#4142434445464748494a4b4c525355565758595b5c5d5f6061636465666768696a,736d631e8e:4b0f,80ce82d462ac53f06cf0915e592a60016c70574d644a8d2a762b6ee9575b6a8075f06f6d8c:2d08,57666bef889278b363a253f970ad6c645858642a580268e0819b55107cd650188eba6dcc8d9f70eb638f6d9b6ed47ee68404684390036dd896768ba85957727985e4817e75bc8a8a68af52548e22951163d098988e44557c4f5366ff568f60d56d9552435c4959296dfb586b75:301c,606c82148146631167618fe2773a8d:f334,94c15e165385542c70c386:6d6f7072737475767778838485868788898e8f90919294969798999a9b9e9fa0a1a2a5a6abadaeb2b3b7b8b9bbbcbdbebfc1c2c3c5c8cccdd2d3d5d6d7dadc#dde0e1e2e3e5e6e7e8eaebeceff5f6f7fafbfcfdff,87:010405060b0c0e0f10111416,6c405ef7505c4ead5ead633a8247901a6850916e77b3540c94dc5f647ae5687663457b527edf75db507762955934900f51f879c37a8156fe5f9290146d825c60571f541051546e4d56e263a89893817f8715892a9000541e5c6f81c062:d658,81319e3596409a:6e7c,692d59a562d3553e631654c786d96d3c5a0374e6889c6b6a59168c4c5f2f6e7e73a9987d4e3870f75b8c7897633d665a769660cb5b9b5a494e0781556c6a738b4ea167897f515f8065fa671b5fd859845a0187:191b1d1f20242627282a2b2c2d2f303233353638393a3c3d404142434445464a4b4d4f505152545556585a5b5c5d5e5f6162666768696a6b6c6d6f71727375#7778797a7f8081848687898a8c8e8f90919294959698999a9b9c9d9ea0a1a2a3a4,5dcd5fae537197e68fdd684556f4552f60df4e3a6f4d7ef482c7840e59d44f:1f2a,5c3e7eac672a851a5473754f80c355829b4f4f4d6e2d8c135c096170536b761f6e29868a658795fb7eb9543b7a337d0a95ee55e17fc174ee631d87176da17a9d621165a1536763e16c835deb545c94a84e4c6c618bec5c4b65e0829c68a754:3e34,6b:cb66,4e9463425348821e4f:0dae,575e620a96fe6664726952:ffa1,609f8bef661471996790897f785277fd6670563b54389521727a87:a5a6a7a9aaaeb0b1b2b4b6b7b8b9bbbcbebfc1c2c3c4c5c7c8c9cccdcecfd0d4d5d6d7d8d9dadcdddedfe1e2e3e4e6e7e8e9ebecedeff0f1f2f3f4f5f6f7f8#fafbfcfdff,88:0001020405060708090b0c0d0e0f101112141718191a1c1d1e1f2023,7a00606f5e0c6089819d591560dc718470ef6eaa6c5072806a8488ad5e2d4e605ab3559c94e36d177cfb9699620f7ec6778e867e5323971e8f9666875ce14fa072ed4e0b53a6590f54136380952851484ed99c9c7ea454b88d248854823795f26d8e5f265acc663e966973:b02e,53bf817a99857fa15baa96:7750,7ebf76f853a2957699997bb189446e584e617fd479658be660f354cd4eab98795df76a6150cf54118c618427785d9704524a54ee56a395006d885bb56dc6665388:2425262728292a2b2c2d2e2f30313334353637383a3b3d3e3f414243464748494a4b4e4f505152535556585a5b5c5d5e5f6066676a6d6f717374757678797a#7b7c80838687898a8c8e8f90919394959798999a9b9d9e9fa0a1a3a5a6a7a8a9aa,5c0f5b5d6821809655787b11654869544e9b6b47874e978b534f631f643a90aa659c80c18c10519968b0537887f961c86c:c4fb,8c225c5185aa82af950c6b238f9b65b05f:fbc3,4fe18845661f8165732960fa51745211578b5f6290a2884c91925e78674f602759d351:44f6,80f853086c7996c4718a4f:11ee,7f9e673d55c5950879c088967ee3589f620c9700865a5618987b5f908bb884c4915753d965ed5e8f755c60647d6e5a7f7e:eaed,8f6955a75ba360ac65cb738488:acaeafb0b2b3b4b5b6b8b9babbbdbebfc0c3c4c7c8cacbcccdcfd0d1d3d6d7dadbdcdddee0e1e6e7e9eaebecedeeeff2f5f6f7fafbfdff,89:0001030405060708#090b0c0d0e0f1114151617181c1d1e1f20222324262728292c2d2e2f3132333537,9009766377297eda9774859b5b667a7496ea884052cb718f5faa65ec8be25bfb9a6f5de16b896c5b8b:adaf,900a8fc5538b62bc9e:262d,54404e2b82bd7259869c5d1688596daf96c554d14e9a8bb6710954bd960970df6df976d04e25781487125ca95ef68a00989c960e708e6cbf594463a9773c884d6f148273583071d5538c781a96c155015f6671305bb48c1a9a8c6b83592e9e2f79e76768626c4f6f75a17f8a6d0b96336c274ef075d2517b68376f3e908081705996747689:38393a3b3c3d3e3f40424345464748494a4b4c4d4e4f505152535455565758595a5b5c5d6061626364656768696a6b6c6d6e6f707172737475767778797a7c#7d7e808284858788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1,64475c2790657a918c2359da54ac8200836f898180006930564e8036723791ce51b64e5f987563964e1a53f666f3814b591c6db24e0058f9533b63d694f14f:9d0a,886398905937905779fb4eea80f075916c825b9c59e85f5d69058681501a5df24e5977e34ee5827a6291661390915c794ebf5f7981c69038808475ab4ea688d4610f6bc55fc64e4976ca6ea28b:e3ae,8c0a8bd15f027f:fccc,7ece83:356b,56e06bb797f3963459fb541f94f66deb5bc5996e5c395f15969089:a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c3cdd3d4d5d7d8d9dbdddfe0e1e2e4e7e8e9eaecedeef0f1f2f4f5f6f7f8f9fa#fbfcfdfeff,8a:01020304050608090a0b0c0d0e0f101112131415161718191a1b1c1d,537082f16a315a749e705e947f2883b984:2425,836787478fce8d6276c85f719896786c662054df62e54f6381c375c85eb896cd8e0a86f9548f6cf36d8c6c38607f52c775285e7d4f1860a05fe75c24753190ae94c072b96cb96e389149670953:cbf3,4f5191c98bf153c85e7c8fc26de44e8e76c26986865e611a82064f:59de,903e9c7c61096e:1d14,96854e885a3196e84e0e5c7f79b95b878bed7fbd738957df828b90c15401904755bb5cea5fa161086b3272f180b28a:891e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3f4041424344454647494a4b4c4d4e4f505152535455565758595a5b5c5d5e#5f606162636465666768696a6b6c6d6e6f7071727374757677787a7b7c7d7e7f80,6d745bd388d598848c6b9a6d9e336e0a51:a443,57a38881539f63f48f9556ed54585706733f6e907f188fdc82d1613f6028966266f07ea68d:8ac3,94a55cb37ca4670860a6960580184e9190e75300966851418fd08574915d665597f55b55531d78386742683d54c9707e5bb08f7d518d572854b1651266828d:5e43,810f846c906d7cdf51ff85fb67a365e96fa186a48e81566a90207682707671e58d2362e952196cfd8d3c600e589e618e66fe8d60624e55b36e23672d8f678a:81828384858687888b8c8d8e8f9091929495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2#c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3,94e195f87728680569a8548b4e4d70b88bc86458658b5b857a84503a5be877bb6be18a797c986cbe76cf65a98f975d2d5c5586386808536062187ad96e5b7efd6a1f7ae05f706f335f20638c6da867564e085e108d264ed780c07634969c62db662d627e6cbc8d7571677f695146808753ec906e629854f286f08f998005951785178fd96d5973cd659f771f7504782781fb8d1e94884fa6679575b98bca9707632f9547963584b8632377415f8172f04e896014657462ef6b63653f8a:e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,8b:0001020304050608090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223#24252728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445,5e2775c790d18bc1829d679d652f5431871877e580a281026c414e4b7ec7804c76f4690d6b966267503c4f84574063076b628dbe53ea65e87eb85fd763:1ab7,81:f3f4,7f6e5e1c5cd95236667a79e97a1a8d28709975d46ede6cbb7a924e2d76c55fe0949f88777ec879cd80bf91cd4ef24f17821f54685dde6d328bcc7ca58f7480985e1a549276b15b99663c9aa473e0682a86db6731732a8b:f8db,90107af970db716e62c477a956314e3b845767f152a986c08d2e94f87b518b:464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364656768696a6b6d6e6f707172737475767778797a7b7c7d7e7f80818283848586#8788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9facb1bbc7d0ea,8c:091e,4f4f6ce8795d9a7b6293722a62fd4e1378168f6c64b08d5a7bc668695e8488c55986649e58ee72b6690e95258ffd8d5857607f008c0651c6634962d95353684c74228301914c55447740707c6d4a517954a88d4459ff6ecb6dc45b5c7d2b4ed47c7d6ed35b5081ea6e0d5b579b0368d58e2a5b977efc603b7eb590b98d70594f63cd79df8db3535265cf79568bc5963b7ec494bb7e825634918967007f6a5c0a907566285de64f5067de505a4f5c57505e:a7#3$,8c:38393a3b3c3d3e3f4042434445484a4b4d4e4f5051525354565758595b5c5d5e5f60636465666768696c6d6e6f707172747576777b7c7d7e7f808183848687#888b8d8e8f90919293959697999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacad,4e:8d0c,51404e105eff53454e:15981e,9b325b6c56694e2879ba4e3f53154e47592d723b536e6c1056df80e499976bd3777e9f174e:369f,9f104e:5c6993,82885b5b556c560f4ec453:8d9da3a5ae,97658d5d53:1af5262e3e,8d5c53:6663,52:02080e2d333f404c5e615c,84af52:7d82819093,51827f544e:bbc3c9c2e8e1ebde,4f1b4ef34f:2264,4ef54f:2527092b5e67,65384f:5a5d,8c:aeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebec#edeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,8d:000102030405060708090a0b0c0d,4f:5f57323d76749189838f7e7baa7cac94e6e8eac5dae3dcd1dff8,50:294c,4ff350:2c0f2e2d,4ffe50:1c0c25287e4355484e6c7ba5a7a9bad6,510650:edece6ee,51:070b,4edd6c3d4f:5865ce,9fa06c467c74516e5dfd9ec999985181591452f9530d8a07531051eb591951554ea051564eb388:6ea4,4eb5811488d279805b3488037fb851:abb1bdbc,8d:0e0f101112131415161718191a1b1c205152575f6568696a6c6e6f717278797a7b7c7d7e7f808283868788898c8d8e8f90929395969798999a9b9c9d9ea0a1#a2a4a5a6a7a8a9aaabacadaeafb0b2b6b7b9bbbdc0c1c2c5c7c8c9cacdd0d2d3d4,51:c796a2a5,8b:a0a6a7aab4b5b7c2c3cbcfced2d3d4d6d8d9dcdfe0e4e8e9eef0f3f6f9fcff,8c:000204070c0f1112141516191b181d1f202125272a2b2e2f32333536,53:697a,96:1d2221312a3d3c4249545f676c7274888d97b0,90:979b9d99aca1b4b3b6ba,8d:d5d8d9dce0e1e2e5e6e7e9edeef0f1f2f4f6fcfeff,8e:00010203040607080b0d0e1011121315161718191a1b1c202124252627282b2d303233343637383b3c3e#3f4345464c4d4e4f505354555657585a5b5c5d5e5f60616263646567686a6b6e71,90:b8b0cfc5bed0c4c7d3e6e2dcd7dbebeffe,91:04221e23312f394346,520d594252:a2acadbe,54ff52:d0d6f0,53df71ee77cd5ef451:f5fc,9b2f53b65f01755a5def57:4ca9a1,58:7ebcc5d1,57:292c2a33392e2f5c3b4269856b867c7b686d7673ada48cb2cfa7b493a0d5d8dad9d2b8f4eff8e4dd,8e:73757778797a7b7d7e808283848688898a8b8c8d8e91929395969798999a9b9d9fa0a1a2a3a4a5a6a7a8a9aaadaeb0b1b3b4b5b6b7b8b9bbbcbdbebfc0c1c2#c3c4c5c6c7c8c9cacbcccdcfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4,58:0b0d,57:fded,58:001e194420656c81899a80,99a89f1961ff82:797d7f8f8aa8848e919799abb8beb0c8cae398b7aecbccc1a9b4a1aa9fc4cea4e1,830982:f7e4,83:0f07,82:dcf4d2d8,830c82:fbd3,83:111a061415,82:e0d5,83:1c515b5c08923c34319b5e2f4f47435f4017602d3a336665,8e:e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,8f:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223#2425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041424344,83:681b696c6a6d6eb078b3b4a0aa939c857cb6a97db87b989ea8babcc1,840183:e5d8,580784:180b,83:ddfdd6,84:1c381106,83:d4df,84:0f03,83:f8f9eac5c0,842683:f0e1,84:5c515a597387887a89783c4669768c8e316dc1cdd0e6bdd3cabfbae0a1b9b497e5e3,850c750d853884f085:391f3a,8f:45464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364656a808c929da0a1a2a4a5a6a7aaacadaeafb2b3b4b5b7b8babbbcbfc0c3c6#c9cacbcccdcfd2d6d7dae0e1e3e7eceff1f2f4f5f6fafbfcfeff,90:07080c0e131518,85:563b,84:fffc,85:594868645e7a,77a285:43727ba4a8878f79ae9c85b9b7b0d3c1dcff,86:270529163c,5efe5f0859:3c41,803759:555a58,530f5c:22252c34,62:4c6a9fbbcadad7ee,632262f663:394b43adf6717a8eb46dac8a69aebcf2f8e0ffc4dece,645263:c6be,64:45410b1b200c26215e846d96,90:191c2324252728292a2b2c303132333437393a3d3f4043454648494a4b4c4e545556595a5c5d5e5f6061646667696a6b6c6f70717273767778797a7b7c7e81#84858687898a8c8d8e8f90929496989a9c9e9fa0a4a5a7a8a9abadb2b7bcbdbfc0,64:7ab7b899bac0d0d7e4e2,65:09252e,5f:0bd2,75195f1153:5ff1fde9e8fb,54:1216064b5253545643215759233282947771649a9b8476669dd0adc2b4d2a7a6d3d472a3d5bbbfccd9dadca9aaa4ddcfde,551b54e7552054fd551454f355:22230f11272a678fb5496d41553f503c,90:c2c3c6c8c9cbcccdd2d4d5d6d8d9dadedfe0e3e4e5e9eaeceef0f1f2f3f5f6f7f9fafbfcff,91:00010305060708090a0b0c0d0e0f1011121314151617181a1b1c#1d1f20212425262728292a2b2c2d2e30323334353637383a3b3c3d3e3f40414244,55:375675767733305c8bd283b1b988819f7ed6917bdfbdbe9499eaf7c9,561f55:d1ebecd4e6ddc4efe5f2f3cccde8f5e4,8f9456:1e080c012423,55fe56:00272d5839572c4d62595c4c548664716b7b7c8593afd4d7dde1f5ebf9ff,57:040a091c,5e:0f191411313b3c,91:454748515354555658595b5c5f606667686b6d737a7b7c808182838486888a8e8f939495969798999c9d9e9fa0a1a4a5a6a7a8a9abacb0b1b2b3b6b7b8b9bb#bcbdbebfc0c1c2c3c4c5c6c8cbd0d2d3d4d5d6d7d8d9dadbdddedfe0e1e2e3e4e5,5e:3744545b5e61,5c:8c7a8d9096889899919a9cb5a2bdacabb1a3c1b7c4d2e4cbe5,5d:020327262e241e061b583e343d6c5b6f5d6b4b4a697482999d,8c735d:b7c5,5f:73778287898c95999ca8adb5bc,88625f6172:adb0b4b7b8c3c1cecdd2e8efe9f2f4f7,730172f3730372fa91:e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,92:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324#25262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445,72fb73:1713210a1e1d152239252c3831504d57606c6f7e,821b592598e759:2402,99:636768696a6b6c74777d8084878a8d9091939495,5e:80918b96a5a0b9b5beb3,8d535e:d2d1dbe8ea,81ba5f:c4c9d6cf,60035fee60045f:e1e4fe,60:0506,5f:eaedf8,60:1935261b0f0d292b0a3f2178797b7a42,92:464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071727375767778797a7b7c7d7e7f808182838485#868788898a8b8c8d8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7,60:6a7d969aad9d83928c9becbbb1ddd8c6dab4,61:20261523,60f461:000e2b4a75ac94a7b7d4f5,5fdd96b395:e9ebf1f3f5f6fcfe,96:030406080a0b0c0d0f12151617191a,4e2c723f62156c:35545c4aa38590948c6869747686a9d0d4adf7f8f1d7b2e0d6faebeeb1d3effe,92:a8a9aaabacadafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8#e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,93:00010203040506070809,6d:39270c43480704190e2b4d2e351a4f525433916f9ea05e93945c607c63,6e1a6d:c7c5de,6e0e6d:bfe0,6e116d:e6ddd9,6e166dab6e0c6dae6e:2b6e4e6bb25f865354322544dfb198e0,6f2d6e:e2a5a7bdbbb7d7b4cf8fc29f,6f:6246472415,6ef96f:2f364b742a0929898d8c78727c7ad1,93:0a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3f40414243444546474849#4a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696b,6f:c9a7b9b6c2e1eedee0ef,70:1a231b39354f5e,5b:80849593a5b8,752f9a9e64345b:e4ee,89305bf08e478b078f:b6d3d5e5eee4e9e6f3e8,90:05040b26110d162135362d2f445152506858625b,66b990:747d8288838b,5f:50575658,5c3b54ab5c:5059,5b715c:6366,7fbc5f:2a292d,82745f3c9b3b5c6e59:81838da9aaa3,93:6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaab#acadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cbcccd,59:97caab9ea4d2b2afd7be,5a:0506,59dd5a0859:e3d8f9,5a:0c09323411231340674a553c6275,80ec5a:aa9b777abeebb2d2d4b8e0e3f1d6e6d8dc,5b:091716323740,5c:151c,5b:5a6573515362,9a:7577787a7f7d808185888a90929396989b9c9d9fa0a2a3a5a7,7e:9fa1a3a5a8a9,93:cecfd0d1d2d3d4d5d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,94:000102030405060708090a0b0c0d#0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e,7e:adb0bec0c1c2c9cbccd0d4d7dbe0e1e8ebeeeff1f2,7f0d7e:f6fafbfe,7f:01020307080b0c0f111217191c1b1f212223242526272a2b2c2d2f3031323335,5e7a757f5ddb753e909573:8e91aea29fcfc2d1b7b3c0c9c8e5d9,987c740a73:e9e7debaf2,74:0f2a5b262528302e2c,94:2f303132333435363738393a3b3c3d3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6c6d6e6f#707172737475767778797a7b7c7d7e7f8081828384919698c7cfd3d4dae6fb,95:1c20,74:1b1a415c575559776d7e9c8e8081878b9ea8a990a7d2ba,97:eaebec,67:4c535e4869a5876a7398a775a89ead8b777cf0,680967d8680a67:e9b0,680c67:d9b5dab3dd,680067:c3b8e2,680e67:c1fd,68:323360614e624464831d55664167403e4a4929b58f7477936bc2,696e68fc69:1f20,68f995:27333d43484b555a606e74757778797a7b7c7d7e808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aa#abacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacb,692468f069:0b0157,68e369:10713960425d846b80987834cc8788ce896663799ba7bbabadd4b1c1cadf95e08dff,6a2f69ed6a:171865,69f26a:443ea0505b358e793d28587c9190a997ab,73:3752,6b:8182878492938d9a9ba1aa,8f:6b6d71727375767877797a7c7e818284878b,95:cccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7ecff,96:0713181b1e20232425262728292b2c2d2f303738393a3e41434a4e4f5152535657#58595a5c5d5e606365666b6d6e6f70717378797a7b7c7d7e7f808182838487898a,8f:8d8e8f989a,8ece62:0b171b1f222125242c,81e774:eff4ff,75:0f1113,65:34eeeff0,66:0a19,677266:031500,708566:f71d34313635,800666:5f54414f56615777848ca79dbedbdce6e9,8d:3233363b3d4045464849474d5559,89:c7cacbcccecfd0d1,72:6e9f5d666f7e7f848b8d8f92,63:0832b0,96:8c8e91929395969a9b9d9e9fa0a1a2a3a4a5a6a8a9aaabacadaeafb1b2b4b5b7b8babbbfc2c3c8cacbd0d1d3d4d6d7d8d9dadbdcdddedfe1e2e3e4e5e6e7eb#ecedeef0f1f2f4f5f8fafbfcfdff,97:0203050a0b0c10111214151718191a1b1d1f20,64:3fd8,80046b:eaf3fdf5f9,6c:0507060d1518191a2129242a32,65:35556b,72:4d525630,8662521680:9f9c93bc,670a80:bdb1abadb4b7e7e8e9eadbc2c4d9cdd7,671080:ddebf1f4ed,81:0d0e,80:f2fc,671581128c5a81:361e2c1832484c5374595a7160697c7d6d67,584d5ab581:888291,6ed581:a3aacc,672681:cabb,97:2122232425262728292b2c2e2f3133343536373a3b3c3d3f404142434445464748494a4b4c4d4e4f5051545557585a5c5d5f63646667686a6b6c6d6e6f7071#72757778797a7b7d7e7f8081828384868788898a8c8e8f9093959697999a9b9c9d,81:c1a6,6b:243739434659,98:d1d2d3d5d9da,6bb35f406bc289f365909f5165:93bcc6c4c3ccced2d6,70:809c969dbbc0b7abb1e8ca,71:1013162f31735c6845724a787a98b3b5a8a0e0d4e7f9,72:1d28,706c71:1866b9,62:3e3d434849,79:3b4046495b5c535a6257606f677a858a9aa7b3,5f:d1d0,97:9e9fa1a2a4a5a6a7a8a9aaacaeb0b1b3b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3#e4e5e8eeeff0f1f2f4f7f8f9fafbfcfdfeff,98:000102030405060708090a0b0c0d0e,60:3c5d5a67415963ab,61:060d5da99dcbd1,620680:807f,6c:93f6,6dfc77:f6f8,78:0009171811,65ab78:2d1c1d393a3b1f3c252c23294e6d56572650474c6a9b939a879ca1a3b2b9a5d4d9c9ecf2,790578f479:13241e34,9f9b9e:f9fbfc,76f177:040d,76f977:07081a22192d263538505147435a68,98:0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d#4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e,77:62657f8d7d808c919fa0b0b5bd,75:3a404e4b485b727983,7f:58615f,8a487f:68747179817e,76:cde5,883294:8586878b8a8c8d8f909497959a9b9ca3a4abaaadacafb0b2b4b6b7b8b9babcbdbfc4c8c9cacbcccdced0d1d2d5d6d7d9d8dbdedfe0e2e4e5e7e8ea,98:6f70717273748b8e929599a3a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcfd0d4d6d7dbdcdde0e1e2e3e4#e5e6e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,99:0001020304050607,94:e9ebeeeff3f4f5f7f9fcfdff,95:03020607090a0d0e0f1213141516181b1d1e1f222a2b292c3132343637383c3e3f4235444546494c4e4f525354565758595b5e5f5d61626465666768696a6b6c6f7172733a,77:e7ec,96c979:d5ede3eb,7a065d477a:03021e14,99:08090a0b0c0e0f1112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2f303132333435363738393a3b3c3d3e3f40414243444546474849#4a4b4c4d4e4f50515253565758595a5b5c5d5e5f60616264667378797b7e828389,7a:393751,9ecf99a57a7076:888e9399a4,74:dee0,752c9e:202228292a2b2c3231363837393a3e414244464748494b4c4e5155575a5b5c5e63666768696a6b6c716d73,75:929496a09daca3b3b4b8c4b1b0c3c2d6cde3e8e6e4ebe7,760375:f1fcff,76:1000050c170a25181519,99:8c8e9a9b9c9d9e9fa0a1a2a3a4a6a7a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8#d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9,76:1b3c2220402d303f35433e334d5e545c566b6f,7fca7a:e6787980868895a6a0aca8adb3,88:6469727d7f82a2c6b7bcc9e2cee3e5f1,891a88:fce8fef0,89:2119131b0a342b3641667b,758b80e576:b2b4,77dc80:1214161c20222526272928310b3543464d526971,898398:788083,99:fafbfcfdfeff,9a:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738#393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50515253545556575859,98:898c8d8f949a9b9e9fa1a2a5a6,86:4d546c6e7f7a7c7ba88d8bac9da7a3aa93a9b6c4b5ceb0bab1afc9cfb4e9f1f2edf3d0,871386:def4dfd8d1,87:0307,86f887:080a0d09233b1e252e1a3e48343129373f82227d7e7b60704c6e8b53637c64596593afa8d2,9a:5a5b5c5d5e5f606162636465666768696a6b7283898d8e949599a6a9aaabacadaeafb2b3b4b5b9bbbdbebfc3c4c6c7c8c9cacdcecfd0d2d4d5d6d7d9dadbdc#dddee0e2e3e4e5e7e8e9eaeceef0f1f2f3f4f5f6f7f8fafcfdfeff,9b:000102040506,87:c68885ad9783abe5acb5b3cbd3bdd1c0cadbeae0ee,88:1613,87fe88:0a1b21393c,7f:36424445,82107a:fafd,7b:080304150a2b0f47382a192e31202524333e1e585a45754c5d606e7b62727190a6a7b8ac9da885aa9ca2abb4d1c1ccdddae5e6ea,7c0c7b:fefc,7c:0f160b,9b:07090a0b0c0d0e1011121415161718191a1b1c1d1e2021222425262728292a2b2c2d2e3031333435363738393a3d3e3f40464a4b4c4e50525355565758595a#5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b,7c:1f2a26384140,81fe82:010204,81ec884482:2122232d2f282b383b33343e44494b4f5a5f68,88:7e8588d8df,895e7f:9d9fa7afb0b2,7c7c65497c:919d9c9ea2b2bcbdc1c7cccdc8c5d7e8,826e66a87f:bfced5e5e1e6e9eef3,7cf87d:77a6ae,7e:479b,9e:b8b4,8d:73849491b1676d,8c:4749,91:4a504e4f64,9b:7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9ba#bbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadb,91:626170696f7d7e7274798c85908d91a2a3aaadaeafb5b4ba,8c559e7e8d:b8eb,8e:055969,8d:b5bfbcbac4d6d7dadececfdbc6ecf7f8e3f9fbe4,8e098dfd8e:141d1f2c2e232f3a4039353d3149414251524a70767c6f74858f94909c9e,8c:78828a859894,659b89:d6dedadc,9b:dcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,9c:000102030405060708090a0b0c0d0e0f101112131415161718191a#1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b,89:e5ebef,8a3e8b26975396:e9f3ef,97:0601080f0e2a2d303e,9f:808385868788898a8c,9efe9f:0b0d,96:b9bcbdced2,77bf96e092:8eaec8,93:3e6aca8f,94:3e6b,9c:7f8285868788,7a239c:8b8e90919294959a9b9e9fa0a1a2a3a5a6a7a8a9abadaeb0b1b2b3b4b5b6b7babbbcbdc4c5c6c7cacb3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a#7b7d7e808384898a8c8f93969798999daaacafb9bebfc0c1c2c8c9d1d2dadbe0e1cccdcecfd0d3d4d5d7d8d9dcdddfe2,97:7c85919294afaba3b2b4,9a:b1b0b7,9e589a:b6babcc1c0c5c2cbccd1,9b:45434749484d51,98e899:0d2e5554,9a:dfe1e6efebfbedf9,9b:080f131f23,9e:bdbe,7e3b9e:8287888b92,93d69e:9d9fdbdcdde0dfe2e9e7e5eaef,9f:222c2f39373d3e44,9c:e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,9d:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021#22232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142#92$434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081#82838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2#92$a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1#e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,9e:000102#92$030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e24272e30343b3c404d5052535456595d5f606162656e6f727475767778797a7b7c7d80#8183848586898a8c8d8e8f90919495969798999a9b9c9ea0a1a2a3a4a5a7a8a9aa#92$abacadaeafb0b1b2b3b5b6b7b9babcbfc0c1c2c3c5c6c7c8cacbccd0d2d3d5d6d7d9dadee1e3e4e6e8ebecedeef0f1f2f3f4f5f6f7f8fafdff,9f:000102030405#060708090a0c0f1112141516181a1b1c1d1e1f21232425262728292a2b2d2e3031#92$3233343536383a3c3f4041424345464748494a4b4c4d4e4f52535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778#797a7b7c7d7e81828d8e8f9091929394959697989c9d9ea1a2a3a4a5,f9:2c7995e7f1#92$,fa:0c0d0e0f111314181f20212324272829,e8:15161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40414243#4445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364"),U2Ghash={},G2Uhash={};!function(data){var k=0;data=data.match(/..../g);for(var i=129;i<=254;i++){for(var j=64;j<=254;j++){U2Ghash[data[k++]]=("%"+i.toString(16)+"%"+j.toString(16)).toUpperCase()}}for(var key in U2Ghash){G2Uhash[U2Ghash[key]]=key}}(data);function isAscii(unicode){return unicode==8364||unicode<=127&&unicode>=0}return{encode:function(str){return str.replace(/./g,function(a){var code=a.charCodeAt(0);if(isAscii(code)){return encodeURIComponent(a)}else{var key=code.toString(16);if(key.length!=4)key=("000"+key).match(/....$/)[0];return U2Ghash[key]||a}})},decode:function(str){return str.replace(/%[0-9A-F]{2}%[0-9A-F]{2}/g,function(a){if(a in G2Uhash){return String.fromCharCode("0x"+G2Uhash[a])}else{return a}}).replace(/%[\\w]{2}/g,function(a){return decodeURIComponent(a)})}}});'},536:(e,t,n)=>{n(642)(n(145))},603:(e,t,n)=>{n(642)(n(990))},642:e=>{e.exports=function(e){function t(e){"undefined"!=typeof console&&(console.error||console.log)("[Script Loader]",e)}try{"undefined"!=typeof execScript&&function n(){return"undefined"!=typeof attachEvent&&"undefined"==typeof addEventListener}()?execScript(e):"undefined"!=typeof eval?eval.call(null,e):t("EvalError: No eval function available")}catch(e){t(e)}}},740:(e,t,n)=>{n(642)(n(481))},761:e=>{e.exports='(function(root,factory){if(typeof exports==="object"){module.exports=exports=factory()}else if(typeof define==="function"&&define.amd){define([],factory)}else{globalThis.WXXH=factory()}})(this,function(){const t=new Uint8Array([0,97,115,109,1,0,0,0,1,48,8,96,3,127,127,127,1,127,96,3,127,127,127,0,96,2,127,127,0,96,1,127,1,127,96,3,127,127,126,1,126,96,3,126,127,127,1,126,96,2,127,126,0,96,1,127,1,126,3,11,10,0,0,2,1,3,4,5,6,1,7,5,3,1,0,1,7,85,9,3,109,101,109,2,0,5,120,120,104,51,50,0,0,6,105,110,105,116,51,50,0,2,8,117,112,100,97,116,101,51,50,0,3,8,100,105,103,101,115,116,51,50,0,4,5,120,120,104,54,52,0,5,6,105,110,105,116,54,52,0,7,8,117,112,100,97,116,101,54,52,0,8,8,100,105,103,101,115,116,54,52,0,9,10,251,22,10,242,1,1,4,127,32,0,32,1,106,33,3,32,1,65,16,79,4,127,32,3,65,16,107,33,6,32,2,65,168,136,141,161,2,106,33,3,32,2,65,137,235,208,208,7,107,33,4,32,2,65,207,140,162,142,6,106,33,5,3,64,32,3,32,0,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,33,3,32,4,32,0,65,4,106,34,0,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,33,4,32,2,32,0,65,4,106,34,0,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,33,2,32,5,32,0,65,4,106,34,0,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,33,5,32,6,32,0,65,4,106,34,0,79,13,0,11,32,2,65,12,119,32,5,65,18,119,106,32,4,65,7,119,106,32,3,65,1,119,106,5,32,2,65,177,207,217,178,1,106,11,32,1,106,32,0,32,1,65,15,113,16,1,11,146,1,0,32,1,32,2,106,33,2,3,64,32,1,65,4,106,32,2,75,69,4,64,32,0,32,1,40,2,0,65,189,220,202,149,124,108,106,65,17,119,65,175,214,211,190,2,108,33,0,32,1,65,4,106,33,1,12,1,11,11,3,64,32,1,32,2,79,69,4,64,32,0,32,1,45,0,0,65,177,207,217,178,1,108,106,65,11,119,65,177,243,221,241,121,108,33,0,32,1,65,1,106,33,1,12,1,11,11,32,0,32,0,65,15,118,115,65,247,148,175,175,120,108,34,0,65,13,118,32,0,115,65,189,220,202,149,124,108,34,0,65,16,118,32,0,115,11,63,0,32,0,65,8,106,32,1,65,168,136,141,161,2,106,54,2,0,32,0,65,12,106,32,1,65,137,235,208,208,7,107,54,2,0,32,0,65,16,106,32,1,54,2,0,32,0,65,20,106,32,1,65,207,140,162,142,6,106,54,2,0,11,195,4,1,6,127,32,1,32,2,106,33,6,32,0,65,24,106,33,4,32,0,65,40,106,40,2,0,33,3,32,0,32,0,40,2,0,32,2,106,54,2,0,32,0,65,4,106,34,5,32,5,40,2,0,32,2,65,16,79,32,0,40,2,0,65,16,79,114,114,54,2,0,32,2,32,3,106,65,16,73,4,64,32,3,32,4,106,32,1,32,2,252,10,0,0,32,0,65,40,106,32,2,32,3,106,54,2,0,15,11,32,3,4,64,32,3,32,4,106,32,1,65,16,32,3,107,34,2,252,10,0,0,32,0,65,8,106,34,3,32,3,40,2,0,32,4,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,54,2,0,32,0,65,12,106,34,3,32,3,40,2,0,32,4,65,4,106,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,54,2,0,32,0,65,16,106,34,3,32,3,40,2,0,32,4,65,8,106,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,54,2,0,32,0,65,20,106,34,3,32,3,40,2,0,32,4,65,12,106,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,54,2,0,32,0,65,40,106,65,0,54,2,0,32,1,32,2,106,33,1,11,32,1,32,6,65,16,107,77,4,64,32,6,65,16,107,33,8,32,0,65,8,106,40,2,0,33,2,32,0,65,12,106,40,2,0,33,3,32,0,65,16,106,40,2,0,33,5,32,0,65,20,106,40,2,0,33,7,3,64,32,2,32,1,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,33,2,32,3,32,1,65,4,106,34,1,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,33,3,32,5,32,1,65,4,106,34,1,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,33,5,32,7,32,1,65,4,106,34,1,40,2,0,65,247,148,175,175,120,108,106,65,13,119,65,177,243,221,241,121,108,33,7,32,8,32,1,65,4,106,34,1,79,13,0,11,32,0,65,8,106,32,2,54,2,0,32,0,65,12,106,32,3,54,2,0,32,0,65,16,106,32,5,54,2,0,32,0,65,20,106,32,7,54,2,0,11,32,1,32,6,73,4,64,32,4,32,1,32,6,32,1,107,34,1,252,10,0,0,32,0,65,40,106,32,1,54,2,0,11,11,97,1,1,127,32,0,65,16,106,40,2,0,33,1,32,0,65,4,106,40,2,0,4,127,32,1,65,12,119,32,0,65,20,106,40,2,0,65,18,119,106,32,0,65,12,106,40,2,0,65,7,119,106,32,0,65,8,106,40,2,0,65,1,119,106,5,32,1,65,177,207,217,178,1,106,11,32,0,40,2,0,106,32,0,65,24,106,32,0,65,40,106,40,2,0,16,1,11,255,3,2,3,126,1,127,32,0,32,1,106,33,6,32,1,65,32,79,4,126,32,6,65,32,107,33,6,32,2,66,214,235,130,238,234,253,137,245,224,0,124,33,3,32,2,66,177,169,172,193,173,184,212,166,61,125,33,4,32,2,66,249,234,208,208,231,201,161,228,225,0,124,33,5,3,64,32,3,32,0,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,3,32,4,32,0,65,8,106,34,0,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,4,32,2,32,0,65,8,106,34,0,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,2,32,5,32,0,65,8,106,34,0,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,5,32,6,32,0,65,8,106,34,0,79,13,0,11,32,2,66,12,137,32,5,66,18,137,124,32,4,66,7,137,124,32,3,66,1,137,124,32,3,66,207,214,211,190,210,199,171,217,66,126,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,157,163,181,234,131,177,141,138,250,0,125,32,4,66,207,214,211,190,210,199,171,217,66,126,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,157,163,181,234,131,177,141,138,250,0,125,32,2,66,207,214,211,190,210,199,171,217,66,126,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,157,163,181,234,131,177,141,138,250,0,125,32,5,66,207,214,211,190,210,199,171,217,66,126,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,157,163,181,234,131,177,141,138,250,0,125,5,32,2,66,197,207,217,178,241,229,186,234,39,124,11,32,1,173,124,32,0,32,1,65,31,113,16,6,11,134,2,0,32,1,32,2,106,33,2,3,64,32,2,32,1,65,8,106,79,4,64,32,1,41,3,0,66,207,214,211,190,210,199,171,217,66,126,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,32,0,133,66,27,137,66,135,149,175,175,152,182,222,155,158,127,126,66,157,163,181,234,131,177,141,138,250,0,125,33,0,32,1,65,8,106,33,1,12,1,11,11,32,1,65,4,106,32,2,77,4,64,32,0,32,1,53,2,0,66,135,149,175,175,152,182,222,155,158,127,126,133,66,23,137,66,207,214,211,190,210,199,171,217,66,126,66,249,243,221,241,153,246,153,171,22,124,33,0,32,1,65,4,106,33,1,11,3,64,32,1,32,2,73,4,64,32,0,32,1,49,0,0,66,197,207,217,178,241,229,186,234,39,126,133,66,11,137,66,135,149,175,175,152,182,222,155,158,127,126,33,0,32,1,65,1,106,33,1,12,1,11,11,32,0,32,0,66,33,136,133,66,207,214,211,190,210,199,171,217,66,126,34,0,32,0,66,29,136,133,66,249,243,221,241,153,246,153,171,22,126,34,0,32,0,66,32,136,133,11,77,0,32,0,65,8,106,32,1,66,214,235,130,238,234,253,137,245,224,0,124,55,3,0,32,0,65,16,106,32,1,66,177,169,172,193,173,184,212,166,61,125,55,3,0,32,0,65,24,106,32,1,55,3,0,32,0,65,32,106,32,1,66,249,234,208,208,231,201,161,228,225,0,124,55,3,0,11,244,4,2,3,127,4,126,32,1,32,2,106,33,5,32,0,65,40,106,33,4,32,0,65,200,0,106,40,2,0,33,3,32,0,32,0,41,3,0,32,2,173,124,55,3,0,32,2,32,3,106,65,32,73,4,64,32,3,32,4,106,32,1,32,2,252,10,0,0,32,0,65,200,0,106,32,2,32,3,106,54,2,0,15,11,32,3,4,64,32,3,32,4,106,32,1,65,32,32,3,107,34,2,252,10,0,0,32,0,65,8,106,34,3,32,3,41,3,0,32,4,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,55,3,0,32,0,65,16,106,34,3,32,3,41,3,0,32,4,65,8,106,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,55,3,0,32,0,65,24,106,34,3,32,3,41,3,0,32,4,65,16,106,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,55,3,0,32,0,65,32,106,34,3,32,3,41,3,0,32,4,65,24,106,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,55,3,0,32,0,65,200,0,106,65,0,54,2,0,32,1,32,2,106,33,1,11,32,1,65,32,106,32,5,77,4,64,32,5,65,32,107,33,2,32,0,65,8,106,41,3,0,33,6,32,0,65,16,106,41,3,0,33,7,32,0,65,24,106,41,3,0,33,8,32,0,65,32,106,41,3,0,33,9,3,64,32,6,32,1,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,6,32,7,32,1,65,8,106,34,1,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,7,32,8,32,1,65,8,106,34,1,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,8,32,9,32,1,65,8,106,34,1,41,3,0,66,207,214,211,190,210,199,171,217,66,126,124,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,33,9,32,2,32,1,65,8,106,34,1,79,13,0,11,32,0,65,8,106,32,6,55,3,0,32,0,65,16,106,32,7,55,3,0,32,0,65,24,106,32,8,55,3,0,32,0,65,32,106,32,9,55,3,0,11,32,1,32,5,73,4,64,32,4,32,1,32,5,32,1,107,34,1,252,10,0,0,32,0,65,200,0,106,32,1,54,2,0,11,11,188,2,1,5,126,32,0,65,24,106,41,3,0,33,1,32,0,41,3,0,34,2,66,32,90,4,126,32,0,65,8,106,41,3,0,34,3,66,1,137,32,0,65,16,106,41,3,0,34,4,66,7,137,124,32,1,66,12,137,32,0,65,32,106,41,3,0,34,5,66,18,137,124,124,32,3,66,207,214,211,190,210,199,171,217,66,126,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,157,163,181,234,131,177,141,138,250,0,125,32,4,66,207,214,211,190,210,199,171,217,66,126,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,157,163,181,234,131,177,141,138,250,0,125,32,1,66,207,214,211,190,210,199,171,217,66,126,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,157,163,181,234,131,177,141,138,250,0,125,32,5,66,207,214,211,190,210,199,171,217,66,126,66,31,137,66,135,149,175,175,152,182,222,155,158,127,126,133,66,135,149,175,175,152,182,222,155,158,127,126,66,157,163,181,234,131,177,141,138,250,0,125,5,32,1,66,197,207,217,178,241,229,186,234,39,124,11,32,2,124,32,0,65,40,106,32,2,66,31,131,167,16,6,11]);function e(){return function(t){const{exports:{mem:e,xxh32:n,xxh64:r,init32:i,update32:a,digest32:o,init64:s,update64:u,digest64:c}}=t;let h=new Uint8Array(e.buffer);function g(t,n){if(e.buffer.byteLength(h.set(o),a(i(0)))}}function y(t){return t>>>0}const b=2n**64n-1n;function d(t){return t&b}const w=new TextEncoder,l=0,p=0n;function x(t,e=l){return g(3*t.length,0),y(n(0,w.encodeInto(t,h).written,e))}function L(t,e=p){return g(3*t.length,0),d(r(0,w.encodeInto(t,h).written,e))}return{h32:x,h32ToString:(t,e=l)=>x(t,e).toString(16).padStart(8,"0"),h32Raw:(t,e=l)=>(g(t.byteLength,0),h.set(t),y(n(0,t.byteLength,e))),create32:(t=l)=>f(48,t,i,a,o,y),h64:L,h64ToString:(t,e=p)=>L(t,e).toString(16).padStart(16,"0"),h64Raw:(t,e=p)=>(g(t.byteLength,0),h.set(t),d(r(0,t.byteLength,e))),create64:(t=p)=>f(88,t,s,u,c,d)}}(new WebAssembly.Instance(new WebAssembly.Module(t)))}return e()});'},762:(e,t,n)=>{n(642)(n(27))},793:e=>{e.exports='/*! pako 2.1.0 https://github.com/nodeca/pako @license (MIT AND Zlib) */\r\n!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).pako={})}(this,(function(t){"use strict";function e(t){let e=t.length;for(;--e>=0;)t[e]=0}const a=256,i=286,n=30,s=15,r=new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]),o=new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),l=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),h=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),d=new Array(576);e(d);const _=new Array(60);e(_);const f=new Array(512);e(f);const c=new Array(256);e(c);const u=new Array(29);e(u);const w=new Array(n);function m(t,e,a,i,n){this.static_tree=t,this.extra_bits=e,this.extra_base=a,this.elems=i,this.max_length=n,this.has_stree=t&&t.length}let b,g,p;function k(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}e(w);const v=t=>t<256?f[t]:f[256+(t>>>7)],y=(t,e)=>{t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255},x=(t,e,a)=>{t.bi_valid>16-a?(t.bi_buf|=e<>16-t.bi_valid,t.bi_valid+=a-16):(t.bi_buf|=e<{x(t,a[2*e],a[2*e+1])},A=(t,e)=>{let a=0;do{a|=1&t,t>>>=1,a<<=1}while(--e>0);return a>>>1},E=(t,e,a)=>{const i=new Array(16);let n,r,o=0;for(n=1;n<=s;n++)o=o+a[n-1]<<1,i[n]=o;for(r=0;r<=e;r++){let e=t[2*r+1];0!==e&&(t[2*r]=A(i[e]++,e))}},R=t=>{let e;for(e=0;e{t.bi_valid>8?y(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0},U=(t,e,a,i)=>{const n=2*e,s=2*a;return t[n]{const i=t.heap[a];let n=a<<1;for(;n<=t.heap_len&&(n{let n,s,l,h,d=0;if(0!==t.sym_next)do{n=255&t.pending_buf[t.sym_buf+d++],n+=(255&t.pending_buf[t.sym_buf+d++])<<8,s=t.pending_buf[t.sym_buf+d++],0===n?z(t,s,e):(l=c[s],z(t,l+a+1,e),h=r[l],0!==h&&(s-=u[l],x(t,s,h)),n--,l=v(n),z(t,l,i),h=o[l],0!==h&&(n-=w[l],x(t,n,h)))}while(d{const a=e.dyn_tree,i=e.stat_desc.static_tree,n=e.stat_desc.has_stree,r=e.stat_desc.elems;let o,l,h,d=-1;for(t.heap_len=0,t.heap_max=573,o=0;o>1;o>=1;o--)S(t,a,o);h=r;do{o=t.heap[1],t.heap[1]=t.heap[t.heap_len--],S(t,a,1),l=t.heap[1],t.heap[--t.heap_max]=o,t.heap[--t.heap_max]=l,a[2*h]=a[2*o]+a[2*l],t.depth[h]=(t.depth[o]>=t.depth[l]?t.depth[o]:t.depth[l])+1,a[2*o+1]=a[2*l+1]=h,t.heap[1]=h++,S(t,a,1)}while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],((t,e)=>{const a=e.dyn_tree,i=e.max_code,n=e.stat_desc.static_tree,r=e.stat_desc.has_stree,o=e.stat_desc.extra_bits,l=e.stat_desc.extra_base,h=e.stat_desc.max_length;let d,_,f,c,u,w,m=0;for(c=0;c<=s;c++)t.bl_count[c]=0;for(a[2*t.heap[t.heap_max]+1]=0,d=t.heap_max+1;d<573;d++)_=t.heap[d],c=a[2*a[2*_+1]+1]+1,c>h&&(c=h,m++),a[2*_+1]=c,_>i||(t.bl_count[c]++,u=0,_>=l&&(u=o[_-l]),w=a[2*_],t.opt_len+=w*(c+u),r&&(t.static_len+=w*(n[2*_+1]+u)));if(0!==m){do{for(c=h-1;0===t.bl_count[c];)c--;t.bl_count[c]--,t.bl_count[c+1]+=2,t.bl_count[h]--,m-=2}while(m>0);for(c=h;0!==c;c--)for(_=t.bl_count[c];0!==_;)f=t.heap[--d],f>i||(a[2*f+1]!==c&&(t.opt_len+=(c-a[2*f+1])*a[2*f],a[2*f+1]=c),_--)}})(t,e),E(a,d,t.bl_count)},O=(t,e,a)=>{let i,n,s=-1,r=e[1],o=0,l=7,h=4;for(0===r&&(l=138,h=3),e[2*(a+1)+1]=65535,i=0;i<=a;i++)n=r,r=e[2*(i+1)+1],++o{let i,n,s=-1,r=e[1],o=0,l=7,h=4;for(0===r&&(l=138,h=3),i=0;i<=a;i++)if(n=r,r=e[2*(i+1)+1],!(++o{x(t,0+(i?1:0),3),Z(t),y(t,a),y(t,~a),a&&t.pending_buf.set(t.window.subarray(e,e+a),t.pending),t.pending+=a};var N=(t,e,i,n)=>{let s,r,o=0;t.level>0?(2===t.strm.data_type&&(t.strm.data_type=(t=>{let e,i=4093624447;for(e=0;e<=31;e++,i>>>=1)if(1&i&&0!==t.dyn_ltree[2*e])return 0;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return 1;for(e=32;e{let e;for(O(t,t.dyn_ltree,t.l_desc.max_code),O(t,t.dyn_dtree,t.d_desc.max_code),T(t,t.bl_desc),e=18;e>=3&&0===t.bl_tree[2*h[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e})(t),s=t.opt_len+3+7>>>3,r=t.static_len+3+7>>>3,r<=s&&(s=r)):s=r=i+5,i+4<=s&&-1!==e?L(t,e,i,n):4===t.strategy||r===s?(x(t,2+(n?1:0),3),D(t,d,_)):(x(t,4+(n?1:0),3),((t,e,a,i)=>{let n;for(x(t,e-257,5),x(t,a-1,5),x(t,i-4,4),n=0;n{F||((()=>{let t,e,a,h,k;const v=new Array(16);for(a=0,h=0;h<28;h++)for(u[h]=a,t=0;t<1<>=7;h(t.pending_buf[t.sym_buf+t.sym_next++]=e,t.pending_buf[t.sym_buf+t.sym_next++]=e>>8,t.pending_buf[t.sym_buf+t.sym_next++]=i,0===e?t.dyn_ltree[2*i]++:(t.matches++,e--,t.dyn_ltree[2*(c[i]+a+1)]++,t.dyn_dtree[2*v(e)]++),t.sym_next===t.sym_end),_tr_align:t=>{x(t,2,3),z(t,256,d),(t=>{16===t.bi_valid?(y(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)})(t)}};var C=(t,e,a,i)=>{let n=65535&t|0,s=t>>>16&65535|0,r=0;for(;0!==a;){r=a>2e3?2e3:a,a-=r;do{n=n+e[i++]|0,s=s+n|0}while(--r);n%=65521,s%=65521}return n|s<<16|0};const M=new Uint32Array((()=>{let t,e=[];for(var a=0;a<256;a++){t=a;for(var i=0;i<8;i++)t=1&t?3988292384^t>>>1:t>>>1;e[a]=t}return e})());var H=(t,e,a,i)=>{const n=M,s=i+a;t^=-1;for(let a=i;a>>8^n[255&(t^e[a])];return-1^t},j={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},K={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8};const{_tr_init:P,_tr_stored_block:Y,_tr_flush_block:G,_tr_tally:X,_tr_align:W}=B,{Z_NO_FLUSH:q,Z_PARTIAL_FLUSH:J,Z_FULL_FLUSH:Q,Z_FINISH:V,Z_BLOCK:$,Z_OK:tt,Z_STREAM_END:et,Z_STREAM_ERROR:at,Z_DATA_ERROR:it,Z_BUF_ERROR:nt,Z_DEFAULT_COMPRESSION:st,Z_FILTERED:rt,Z_HUFFMAN_ONLY:ot,Z_RLE:lt,Z_FIXED:ht,Z_DEFAULT_STRATEGY:dt,Z_UNKNOWN:_t,Z_DEFLATED:ft}=K,ct=258,ut=262,wt=42,mt=113,bt=666,gt=(t,e)=>(t.msg=j[e],e),pt=t=>2*t-(t>4?9:0),kt=t=>{let e=t.length;for(;--e>=0;)t[e]=0},vt=t=>{let e,a,i,n=t.w_size;e=t.hash_size,i=e;do{a=t.head[--i],t.head[i]=a>=n?a-n:0}while(--e);e=n,i=e;do{a=t.prev[--i],t.prev[i]=a>=n?a-n:0}while(--e)};let yt=(t,e,a)=>(e<{const e=t.state;let a=e.pending;a>t.avail_out&&(a=t.avail_out),0!==a&&(t.output.set(e.pending_buf.subarray(e.pending_out,e.pending_out+a),t.next_out),t.next_out+=a,e.pending_out+=a,t.total_out+=a,t.avail_out-=a,e.pending-=a,0===e.pending&&(e.pending_out=0))},zt=(t,e)=>{G(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,xt(t.strm)},At=(t,e)=>{t.pending_buf[t.pending++]=e},Et=(t,e)=>{t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e},Rt=(t,e,a,i)=>{let n=t.avail_in;return n>i&&(n=i),0===n?0:(t.avail_in-=n,e.set(t.input.subarray(t.next_in,t.next_in+n),a),1===t.state.wrap?t.adler=C(t.adler,e,n,a):2===t.state.wrap&&(t.adler=H(t.adler,e,n,a)),t.next_in+=n,t.total_in+=n,n)},Zt=(t,e)=>{let a,i,n=t.max_chain_length,s=t.strstart,r=t.prev_length,o=t.nice_match;const l=t.strstart>t.w_size-ut?t.strstart-(t.w_size-ut):0,h=t.window,d=t.w_mask,_=t.prev,f=t.strstart+ct;let c=h[s+r-1],u=h[s+r];t.prev_length>=t.good_match&&(n>>=2),o>t.lookahead&&(o=t.lookahead);do{if(a=e,h[a+r]===u&&h[a+r-1]===c&&h[a]===h[s]&&h[++a]===h[s+1]){s+=2,a++;do{}while(h[++s]===h[++a]&&h[++s]===h[++a]&&h[++s]===h[++a]&&h[++s]===h[++a]&&h[++s]===h[++a]&&h[++s]===h[++a]&&h[++s]===h[++a]&&h[++s]===h[++a]&&sr){if(t.match_start=e,r=i,i>=o)break;c=h[s+r-1],u=h[s+r]}}}while((e=_[e&d])>l&&0!=--n);return r<=t.lookahead?r:t.lookahead},Ut=t=>{const e=t.w_size;let a,i,n;do{if(i=t.window_size-t.lookahead-t.strstart,t.strstart>=e+(e-ut)&&(t.window.set(t.window.subarray(e,e+e-i),0),t.match_start-=e,t.strstart-=e,t.block_start-=e,t.insert>t.strstart&&(t.insert=t.strstart),vt(t),i+=e),0===t.strm.avail_in)break;if(a=Rt(t.strm,t.window,t.strstart+t.lookahead,i),t.lookahead+=a,t.lookahead+t.insert>=3)for(n=t.strstart-t.insert,t.ins_h=t.window[n],t.ins_h=yt(t,t.ins_h,t.window[n+1]);t.insert&&(t.ins_h=yt(t,t.ins_h,t.window[n+3-1]),t.prev[n&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=n,n++,t.insert--,!(t.lookahead+t.insert<3)););}while(t.lookahead{let a,i,n,s=t.pending_buf_size-5>t.w_size?t.w_size:t.pending_buf_size-5,r=0,o=t.strm.avail_in;do{if(a=65535,n=t.bi_valid+42>>3,t.strm.avail_outi+t.strm.avail_in&&(a=i+t.strm.avail_in),a>n&&(a=n),a>8,t.pending_buf[t.pending-2]=~a,t.pending_buf[t.pending-1]=~a>>8,xt(t.strm),i&&(i>a&&(i=a),t.strm.output.set(t.window.subarray(t.block_start,t.block_start+i),t.strm.next_out),t.strm.next_out+=i,t.strm.avail_out-=i,t.strm.total_out+=i,t.block_start+=i,a-=i),a&&(Rt(t.strm,t.strm.output,t.strm.next_out,a),t.strm.next_out+=a,t.strm.avail_out-=a,t.strm.total_out+=a)}while(0===r);return o-=t.strm.avail_in,o&&(o>=t.w_size?(t.matches=2,t.window.set(t.strm.input.subarray(t.strm.next_in-t.w_size,t.strm.next_in),0),t.strstart=t.w_size,t.insert=t.strstart):(t.window_size-t.strstart<=o&&(t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,t.insert>t.strstart&&(t.insert=t.strstart)),t.window.set(t.strm.input.subarray(t.strm.next_in-o,t.strm.next_in),t.strstart),t.strstart+=o,t.insert+=o>t.w_size-t.insert?t.w_size-t.insert:o),t.block_start=t.strstart),t.high_watern&&t.block_start>=t.w_size&&(t.block_start-=t.w_size,t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,n+=t.w_size,t.insert>t.strstart&&(t.insert=t.strstart)),n>t.strm.avail_in&&(n=t.strm.avail_in),n&&(Rt(t.strm,t.window,t.strstart,n),t.strstart+=n,t.insert+=n>t.w_size-t.insert?t.w_size-t.insert:n),t.high_water>3,n=t.pending_buf_size-n>65535?65535:t.pending_buf_size-n,s=n>t.w_size?t.w_size:n,i=t.strstart-t.block_start,(i>=s||(i||e===V)&&e!==q&&0===t.strm.avail_in&&i<=n)&&(a=i>n?n:i,r=e===V&&0===t.strm.avail_in&&a===i?1:0,Y(t,t.block_start,a,r),t.block_start+=a,xt(t.strm)),r?3:1)},Dt=(t,e)=>{let a,i;for(;;){if(t.lookahead=3&&(t.ins_h=yt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==a&&t.strstart-a<=t.w_size-ut&&(t.match_length=Zt(t,a)),t.match_length>=3)if(i=X(t,t.strstart-t.match_start,t.match_length-3),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=3){t.match_length--;do{t.strstart++,t.ins_h=yt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart}while(0!=--t.match_length);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=yt(t,t.ins_h,t.window[t.strstart+1]);else i=X(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(i&&(zt(t,!1),0===t.strm.avail_out))return 1}return t.insert=t.strstart<2?t.strstart:2,e===V?(zt(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(zt(t,!1),0===t.strm.avail_out)?1:2},Tt=(t,e)=>{let a,i,n;for(;;){if(t.lookahead=3&&(t.ins_h=yt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=2,0!==a&&t.prev_length4096)&&(t.match_length=2)),t.prev_length>=3&&t.match_length<=t.prev_length){n=t.strstart+t.lookahead-3,i=X(t,t.strstart-1-t.prev_match,t.prev_length-3),t.lookahead-=t.prev_length-1,t.prev_length-=2;do{++t.strstart<=n&&(t.ins_h=yt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart)}while(0!=--t.prev_length);if(t.match_available=0,t.match_length=2,t.strstart++,i&&(zt(t,!1),0===t.strm.avail_out))return 1}else if(t.match_available){if(i=X(t,0,t.window[t.strstart-1]),i&&zt(t,!1),t.strstart++,t.lookahead--,0===t.strm.avail_out)return 1}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(i=X(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<2?t.strstart:2,e===V?(zt(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(zt(t,!1),0===t.strm.avail_out)?1:2};function Ot(t,e,a,i,n){this.good_length=t,this.max_lazy=e,this.nice_length=a,this.max_chain=i,this.func=n}const It=[new Ot(0,0,0,0,St),new Ot(4,4,8,4,Dt),new Ot(4,5,16,8,Dt),new Ot(4,6,32,32,Dt),new Ot(4,4,16,16,Tt),new Ot(8,16,32,32,Tt),new Ot(8,16,128,128,Tt),new Ot(8,32,128,256,Tt),new Ot(32,128,258,1024,Tt),new Ot(32,258,258,4096,Tt)];function Ft(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=ft,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(1146),this.dyn_dtree=new Uint16Array(122),this.bl_tree=new Uint16Array(78),kt(this.dyn_ltree),kt(this.dyn_dtree),kt(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(16),this.heap=new Uint16Array(573),kt(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),kt(this.depth),this.sym_buf=0,this.lit_bufsize=0,this.sym_next=0,this.sym_end=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}const Lt=t=>{if(!t)return 1;const e=t.state;return!e||e.strm!==t||e.status!==wt&&57!==e.status&&69!==e.status&&73!==e.status&&91!==e.status&&103!==e.status&&e.status!==mt&&e.status!==bt?1:0},Nt=t=>{if(Lt(t))return gt(t,at);t.total_in=t.total_out=0,t.data_type=_t;const e=t.state;return e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=2===e.wrap?57:e.wrap?wt:mt,t.adler=2===e.wrap?0:1,e.last_flush=-2,P(e),tt},Bt=t=>{const e=Nt(t);var a;return e===tt&&((a=t.state).window_size=2*a.w_size,kt(a.head),a.max_lazy_match=It[a.level].max_lazy,a.good_match=It[a.level].good_length,a.nice_match=It[a.level].nice_length,a.max_chain_length=It[a.level].max_chain,a.strstart=0,a.block_start=0,a.lookahead=0,a.insert=0,a.match_length=a.prev_length=2,a.match_available=0,a.ins_h=0),e},Ct=(t,e,a,i,n,s)=>{if(!t)return at;let r=1;if(e===st&&(e=6),i<0?(r=0,i=-i):i>15&&(r=2,i-=16),n<1||n>9||a!==ft||i<8||i>15||e<0||e>9||s<0||s>ht||8===i&&1!==r)return gt(t,at);8===i&&(i=9);const o=new Ft;return t.state=o,o.strm=t,o.status=wt,o.wrap=r,o.gzhead=null,o.w_bits=i,o.w_size=1<Ct(t,e,ft,15,8,dt),deflateInit2:Ct,deflateReset:Bt,deflateResetKeep:Nt,deflateSetHeader:(t,e)=>Lt(t)||2!==t.state.wrap?at:(t.state.gzhead=e,tt),deflate:(t,e)=>{if(Lt(t)||e>$||e<0)return t?gt(t,at):at;const a=t.state;if(!t.output||0!==t.avail_in&&!t.input||a.status===bt&&e!==V)return gt(t,0===t.avail_out?nt:at);const i=a.last_flush;if(a.last_flush=e,0!==a.pending){if(xt(t),0===t.avail_out)return a.last_flush=-1,tt}else if(0===t.avail_in&&pt(e)<=pt(i)&&e!==V)return gt(t,nt);if(a.status===bt&&0!==t.avail_in)return gt(t,nt);if(a.status===wt&&0===a.wrap&&(a.status=mt),a.status===wt){let e=ft+(a.w_bits-8<<4)<<8,i=-1;if(i=a.strategy>=ot||a.level<2?0:a.level<6?1:6===a.level?2:3,e|=i<<6,0!==a.strstart&&(e|=32),e+=31-e%31,Et(a,e),0!==a.strstart&&(Et(a,t.adler>>>16),Et(a,65535&t.adler)),t.adler=1,a.status=mt,xt(t),0!==a.pending)return a.last_flush=-1,tt}if(57===a.status)if(t.adler=0,At(a,31),At(a,139),At(a,8),a.gzhead)At(a,(a.gzhead.text?1:0)+(a.gzhead.hcrc?2:0)+(a.gzhead.extra?4:0)+(a.gzhead.name?8:0)+(a.gzhead.comment?16:0)),At(a,255&a.gzhead.time),At(a,a.gzhead.time>>8&255),At(a,a.gzhead.time>>16&255),At(a,a.gzhead.time>>24&255),At(a,9===a.level?2:a.strategy>=ot||a.level<2?4:0),At(a,255&a.gzhead.os),a.gzhead.extra&&a.gzhead.extra.length&&(At(a,255&a.gzhead.extra.length),At(a,a.gzhead.extra.length>>8&255)),a.gzhead.hcrc&&(t.adler=H(t.adler,a.pending_buf,a.pending,0)),a.gzindex=0,a.status=69;else if(At(a,0),At(a,0),At(a,0),At(a,0),At(a,0),At(a,9===a.level?2:a.strategy>=ot||a.level<2?4:0),At(a,3),a.status=mt,xt(t),0!==a.pending)return a.last_flush=-1,tt;if(69===a.status){if(a.gzhead.extra){let e=a.pending,i=(65535&a.gzhead.extra.length)-a.gzindex;for(;a.pending+i>a.pending_buf_size;){let n=a.pending_buf_size-a.pending;if(a.pending_buf.set(a.gzhead.extra.subarray(a.gzindex,a.gzindex+n),a.pending),a.pending=a.pending_buf_size,a.gzhead.hcrc&&a.pending>e&&(t.adler=H(t.adler,a.pending_buf,a.pending-e,e)),a.gzindex+=n,xt(t),0!==a.pending)return a.last_flush=-1,tt;e=0,i-=n}let n=new Uint8Array(a.gzhead.extra);a.pending_buf.set(n.subarray(a.gzindex,a.gzindex+i),a.pending),a.pending+=i,a.gzhead.hcrc&&a.pending>e&&(t.adler=H(t.adler,a.pending_buf,a.pending-e,e)),a.gzindex=0}a.status=73}if(73===a.status){if(a.gzhead.name){let e,i=a.pending;do{if(a.pending===a.pending_buf_size){if(a.gzhead.hcrc&&a.pending>i&&(t.adler=H(t.adler,a.pending_buf,a.pending-i,i)),xt(t),0!==a.pending)return a.last_flush=-1,tt;i=0}e=a.gzindexi&&(t.adler=H(t.adler,a.pending_buf,a.pending-i,i)),a.gzindex=0}a.status=91}if(91===a.status){if(a.gzhead.comment){let e,i=a.pending;do{if(a.pending===a.pending_buf_size){if(a.gzhead.hcrc&&a.pending>i&&(t.adler=H(t.adler,a.pending_buf,a.pending-i,i)),xt(t),0!==a.pending)return a.last_flush=-1,tt;i=0}e=a.gzindexi&&(t.adler=H(t.adler,a.pending_buf,a.pending-i,i))}a.status=103}if(103===a.status){if(a.gzhead.hcrc){if(a.pending+2>a.pending_buf_size&&(xt(t),0!==a.pending))return a.last_flush=-1,tt;At(a,255&t.adler),At(a,t.adler>>8&255),t.adler=0}if(a.status=mt,xt(t),0!==a.pending)return a.last_flush=-1,tt}if(0!==t.avail_in||0!==a.lookahead||e!==q&&a.status!==bt){let i=0===a.level?St(a,e):a.strategy===ot?((t,e)=>{let a;for(;;){if(0===t.lookahead&&(Ut(t),0===t.lookahead)){if(e===q)return 1;break}if(t.match_length=0,a=X(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,a&&(zt(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===V?(zt(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(zt(t,!1),0===t.strm.avail_out)?1:2})(a,e):a.strategy===lt?((t,e)=>{let a,i,n,s;const r=t.window;for(;;){if(t.lookahead<=ct){if(Ut(t),t.lookahead<=ct&&e===q)return 1;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=3&&t.strstart>0&&(n=t.strstart-1,i=r[n],i===r[++n]&&i===r[++n]&&i===r[++n])){s=t.strstart+ct;do{}while(i===r[++n]&&i===r[++n]&&i===r[++n]&&i===r[++n]&&i===r[++n]&&i===r[++n]&&i===r[++n]&&i===r[++n]&&nt.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=3?(a=X(t,1,t.match_length-3),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(a=X(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),a&&(zt(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===V?(zt(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(zt(t,!1),0===t.strm.avail_out)?1:2})(a,e):It[a.level].func(a,e);if(3!==i&&4!==i||(a.status=bt),1===i||3===i)return 0===t.avail_out&&(a.last_flush=-1),tt;if(2===i&&(e===J?W(a):e!==$&&(Y(a,0,0,!1),e===Q&&(kt(a.head),0===a.lookahead&&(a.strstart=0,a.block_start=0,a.insert=0))),xt(t),0===t.avail_out))return a.last_flush=-1,tt}return e!==V?tt:a.wrap<=0?et:(2===a.wrap?(At(a,255&t.adler),At(a,t.adler>>8&255),At(a,t.adler>>16&255),At(a,t.adler>>24&255),At(a,255&t.total_in),At(a,t.total_in>>8&255),At(a,t.total_in>>16&255),At(a,t.total_in>>24&255)):(Et(a,t.adler>>>16),Et(a,65535&t.adler)),xt(t),a.wrap>0&&(a.wrap=-a.wrap),0!==a.pending?tt:et)},deflateEnd:t=>{if(Lt(t))return at;const e=t.state.status;return t.state=null,e===mt?gt(t,it):tt},deflateSetDictionary:(t,e)=>{let a=e.length;if(Lt(t))return at;const i=t.state,n=i.wrap;if(2===n||1===n&&i.status!==wt||i.lookahead)return at;if(1===n&&(t.adler=C(t.adler,e,a,0)),i.wrap=0,a>=i.w_size){0===n&&(kt(i.head),i.strstart=0,i.block_start=0,i.insert=0);let t=new Uint8Array(i.w_size);t.set(e.subarray(a-i.w_size,a),0),e=t,a=i.w_size}const s=t.avail_in,r=t.next_in,o=t.input;for(t.avail_in=a,t.next_in=0,t.input=e,Ut(i);i.lookahead>=3;){let t=i.strstart,e=i.lookahead-2;do{i.ins_h=yt(i,i.ins_h,i.window[t+3-1]),i.prev[t&i.w_mask]=i.head[i.ins_h],i.head[i.ins_h]=t,t++}while(--e);i.strstart=t,i.lookahead=2,Ut(i)}return i.strstart+=i.lookahead,i.block_start=i.strstart,i.insert=i.lookahead,i.lookahead=0,i.match_length=i.prev_length=2,i.match_available=0,t.next_in=r,t.input=o,t.avail_in=s,i.wrap=n,tt},deflateInfo:"pako deflate (from Nodeca project)"};const Ht=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var jt=function(t){const e=Array.prototype.slice.call(arguments,1);for(;e.length;){const a=e.shift();if(a){if("object"!=typeof a)throw new TypeError(a+"must be non-object");for(const e in a)Ht(a,e)&&(t[e]=a[e])}}return t},Kt=t=>{let e=0;for(let a=0,i=t.length;a=252?6:t>=248?5:t>=240?4:t>=224?3:t>=192?2:1;Yt[254]=Yt[254]=1;var Gt=t=>{if("function"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(t);let e,a,i,n,s,r=t.length,o=0;for(n=0;n>>6,e[s++]=128|63&a):a<65536?(e[s++]=224|a>>>12,e[s++]=128|a>>>6&63,e[s++]=128|63&a):(e[s++]=240|a>>>18,e[s++]=128|a>>>12&63,e[s++]=128|a>>>6&63,e[s++]=128|63&a);return e},Xt=(t,e)=>{const a=e||t.length;if("function"==typeof TextDecoder&&TextDecoder.prototype.decode)return(new TextDecoder).decode(t.subarray(0,e));let i,n;const s=new Array(2*a);for(n=0,i=0;i4)s[n++]=65533,i+=r-1;else{for(e&=2===r?31:3===r?15:7;r>1&&i1?s[n++]=65533:e<65536?s[n++]=e:(e-=65536,s[n++]=55296|e>>10&1023,s[n++]=56320|1023&e)}}return((t,e)=>{if(e<65534&&t.subarray&&Pt)return String.fromCharCode.apply(null,t.length===e?t:t.subarray(0,e));let a="";for(let i=0;i{(e=e||t.length)>t.length&&(e=t.length);let a=e-1;for(;a>=0&&128==(192&t[a]);)a--;return a<0||0===a?e:a+Yt[t[a]]>e?a:e};var qt=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0};const Jt=Object.prototype.toString,{Z_NO_FLUSH:Qt,Z_SYNC_FLUSH:Vt,Z_FULL_FLUSH:$t,Z_FINISH:te,Z_OK:ee,Z_STREAM_END:ae,Z_DEFAULT_COMPRESSION:ie,Z_DEFAULT_STRATEGY:ne,Z_DEFLATED:se}=K;function re(t){this.options=jt({level:ie,method:se,chunkSize:16384,windowBits:15,memLevel:8,strategy:ne},t||{});let e=this.options;e.raw&&e.windowBits>0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new qt,this.strm.avail_out=0;let a=Mt.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(a!==ee)throw new Error(j[a]);if(e.header&&Mt.deflateSetHeader(this.strm,e.header),e.dictionary){let t;if(t="string"==typeof e.dictionary?Gt(e.dictionary):"[object ArrayBuffer]"===Jt.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,a=Mt.deflateSetDictionary(this.strm,t),a!==ee)throw new Error(j[a]);this._dict_set=!0}}function oe(t,e){const a=new re(e);if(a.push(t,!0),a.err)throw a.msg||j[a.err];return a.result}re.prototype.push=function(t,e){const a=this.strm,i=this.options.chunkSize;let n,s;if(this.ended)return!1;for(s=e===~~e?e:!0===e?te:Qt,"string"==typeof t?a.input=Gt(t):"[object ArrayBuffer]"===Jt.call(t)?a.input=new Uint8Array(t):a.input=t,a.next_in=0,a.avail_in=a.input.length;;)if(0===a.avail_out&&(a.output=new Uint8Array(i),a.next_out=0,a.avail_out=i),(s===Vt||s===$t)&&a.avail_out<=6)this.onData(a.output.subarray(0,a.next_out)),a.avail_out=0;else{if(n=Mt.deflate(a,s),n===ae)return a.next_out>0&&this.onData(a.output.subarray(0,a.next_out)),n=Mt.deflateEnd(this.strm),this.onEnd(n),this.ended=!0,n===ee;if(0!==a.avail_out){if(s>0&&a.next_out>0)this.onData(a.output.subarray(0,a.next_out)),a.avail_out=0;else if(0===a.avail_in)break}else this.onData(a.output)}return!0},re.prototype.onData=function(t){this.chunks.push(t)},re.prototype.onEnd=function(t){t===ee&&(this.result=Kt(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};var le={Deflate:re,deflate:oe,deflateRaw:function(t,e){return(e=e||{}).raw=!0,oe(t,e)},gzip:function(t,e){return(e=e||{}).gzip=!0,oe(t,e)},constants:K};const he=16209;var de=function(t,e){let a,i,n,s,r,o,l,h,d,_,f,c,u,w,m,b,g,p,k,v,y,x,z,A;const E=t.state;a=t.next_in,z=t.input,i=a+(t.avail_in-5),n=t.next_out,A=t.output,s=n-(e-t.avail_out),r=n+(t.avail_out-257),o=E.dmax,l=E.wsize,h=E.whave,d=E.wnext,_=E.window,f=E.hold,c=E.bits,u=E.lencode,w=E.distcode,m=(1<>>24,f>>>=p,c-=p,p=g>>>16&255,0===p)A[n++]=65535&g;else{if(!(16&p)){if(0==(64&p)){g=u[(65535&g)+(f&(1<>>=p,c-=p),c<15&&(f+=z[a++]<>>24,f>>>=p,c-=p,p=g>>>16&255,!(16&p)){if(0==(64&p)){g=w[(65535&g)+(f&(1<o){t.msg="invalid distance too far back",E.mode=he;break t}if(f>>>=p,c-=p,p=n-s,v>p){if(p=v-p,p>h&&E.sane){t.msg="invalid distance too far back",E.mode=he;break t}if(y=0,x=_,0===d){if(y+=l-p,p2;)A[n++]=x[y++],A[n++]=x[y++],A[n++]=x[y++],k-=3;k&&(A[n++]=x[y++],k>1&&(A[n++]=x[y++]))}else{y=n-v;do{A[n++]=A[y++],A[n++]=A[y++],A[n++]=A[y++],k-=3}while(k>2);k&&(A[n++]=A[y++],k>1&&(A[n++]=A[y++]))}break}}break}}while(a>3,a-=k,c-=k<<3,f&=(1<{const l=o.bits;let h,d,_,f,c,u,w=0,m=0,b=0,g=0,p=0,k=0,v=0,y=0,x=0,z=0,A=null;const E=new Uint16Array(16),R=new Uint16Array(16);let Z,U,S,D=null;for(w=0;w<=_e;w++)E[w]=0;for(m=0;m=1&&0===E[g];g--);if(p>g&&(p=g),0===g)return n[s++]=20971520,n[s++]=20971520,o.bits=1,0;for(b=1;b0&&(0===t||1!==g))return-1;for(R[1]=0,w=1;w<_e;w++)R[w+1]=R[w]+E[w];for(m=0;m852||2===t&&x>592)return 1;for(;;){Z=w-v,r[m]+1=u?(U=D[r[m]-u],S=A[r[m]-u]):(U=96,S=0),h=1<>v)+d]=Z<<24|U<<16|S|0}while(0!==d);for(h=1<>=1;if(0!==h?(z&=h-1,z+=h):z=0,m++,0==--E[w]){if(w===g)break;w=e[a+r[m]]}if(w>p&&(z&f)!==_){for(0===v&&(v=p),c+=b,k=w-v,y=1<852||2===t&&x>592)return 1;_=z&f,n[_]=p<<24|k<<16|c-s|0}}return 0!==z&&(n[c+z]=w-v<<24|64<<16|0),o.bits=p,0};const{Z_FINISH:be,Z_BLOCK:ge,Z_TREES:pe,Z_OK:ke,Z_STREAM_END:ve,Z_NEED_DICT:ye,Z_STREAM_ERROR:xe,Z_DATA_ERROR:ze,Z_MEM_ERROR:Ae,Z_BUF_ERROR:Ee,Z_DEFLATED:Re}=K,Ze=16180,Ue=16190,Se=16191,De=16192,Te=16194,Oe=16199,Ie=16200,Fe=16206,Le=16209,Ne=t=>(t>>>24&255)+(t>>>8&65280)+((65280&t)<<8)+((255&t)<<24);function Be(){this.strm=null,this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}const Ce=t=>{if(!t)return 1;const e=t.state;return!e||e.strm!==t||e.mode16211?1:0},Me=t=>{if(Ce(t))return xe;const e=t.state;return t.total_in=t.total_out=e.total=0,t.msg="",e.wrap&&(t.adler=1&e.wrap),e.mode=Ze,e.last=0,e.havedict=0,e.flags=-1,e.dmax=32768,e.head=null,e.hold=0,e.bits=0,e.lencode=e.lendyn=new Int32Array(852),e.distcode=e.distdyn=new Int32Array(592),e.sane=1,e.back=-1,ke},He=t=>{if(Ce(t))return xe;const e=t.state;return e.wsize=0,e.whave=0,e.wnext=0,Me(t)},je=(t,e)=>{let a;if(Ce(t))return xe;const i=t.state;return e<0?(a=0,e=-e):(a=5+(e>>4),e<48&&(e&=15)),e&&(e<8||e>15)?xe:(null!==i.window&&i.wbits!==e&&(i.window=null),i.wrap=a,i.wbits=e,He(t))},Ke=(t,e)=>{if(!t)return xe;const a=new Be;t.state=a,a.strm=t,a.window=null,a.mode=Ze;const i=je(t,e);return i!==ke&&(t.state=null),i};let Pe,Ye,Ge=!0;const Xe=t=>{if(Ge){Pe=new Int32Array(512),Ye=new Int32Array(32);let e=0;for(;e<144;)t.lens[e++]=8;for(;e<256;)t.lens[e++]=9;for(;e<280;)t.lens[e++]=7;for(;e<288;)t.lens[e++]=8;for(me(1,t.lens,0,288,Pe,0,t.work,{bits:9}),e=0;e<32;)t.lens[e++]=5;me(2,t.lens,0,32,Ye,0,t.work,{bits:5}),Ge=!1}t.lencode=Pe,t.lenbits=9,t.distcode=Ye,t.distbits=5},We=(t,e,a,i)=>{let n;const s=t.state;return null===s.window&&(s.wsize=1<=s.wsize?(s.window.set(e.subarray(a-s.wsize,a),0),s.wnext=0,s.whave=s.wsize):(n=s.wsize-s.wnext,n>i&&(n=i),s.window.set(e.subarray(a-i,a-i+n),s.wnext),(i-=n)?(s.window.set(e.subarray(a-i,a),0),s.wnext=i,s.whave=s.wsize):(s.wnext+=n,s.wnext===s.wsize&&(s.wnext=0),s.whaveKe(t,15),inflateInit2:Ke,inflate:(t,e)=>{let a,i,n,s,r,o,l,h,d,_,f,c,u,w,m,b,g,p,k,v,y,x,z=0;const A=new Uint8Array(4);let E,R;const Z=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(Ce(t)||!t.output||!t.input&&0!==t.avail_in)return xe;a=t.state,a.mode===Se&&(a.mode=De),r=t.next_out,n=t.output,l=t.avail_out,s=t.next_in,i=t.input,o=t.avail_in,h=a.hold,d=a.bits,_=o,f=l,x=ke;t:for(;;)switch(a.mode){case Ze:if(0===a.wrap){a.mode=De;break}for(;d<16;){if(0===o)break t;o--,h+=i[s++]<>>8&255,a.check=H(a.check,A,2,0),h=0,d=0,a.mode=16181;break}if(a.head&&(a.head.done=!1),!(1&a.wrap)||(((255&h)<<8)+(h>>8))%31){t.msg="incorrect header check",a.mode=Le;break}if((15&h)!==Re){t.msg="unknown compression method",a.mode=Le;break}if(h>>>=4,d-=4,y=8+(15&h),0===a.wbits&&(a.wbits=y),y>15||y>a.wbits){t.msg="invalid window size",a.mode=Le;break}a.dmax=1<>8&1),512&a.flags&&4&a.wrap&&(A[0]=255&h,A[1]=h>>>8&255,a.check=H(a.check,A,2,0)),h=0,d=0,a.mode=16182;case 16182:for(;d<32;){if(0===o)break t;o--,h+=i[s++]<>>8&255,A[2]=h>>>16&255,A[3]=h>>>24&255,a.check=H(a.check,A,4,0)),h=0,d=0,a.mode=16183;case 16183:for(;d<16;){if(0===o)break t;o--,h+=i[s++]<>8),512&a.flags&&4&a.wrap&&(A[0]=255&h,A[1]=h>>>8&255,a.check=H(a.check,A,2,0)),h=0,d=0,a.mode=16184;case 16184:if(1024&a.flags){for(;d<16;){if(0===o)break t;o--,h+=i[s++]<>>8&255,a.check=H(a.check,A,2,0)),h=0,d=0}else a.head&&(a.head.extra=null);a.mode=16185;case 16185:if(1024&a.flags&&(c=a.length,c>o&&(c=o),c&&(a.head&&(y=a.head.extra_len-a.length,a.head.extra||(a.head.extra=new Uint8Array(a.head.extra_len)),a.head.extra.set(i.subarray(s,s+c),y)),512&a.flags&&4&a.wrap&&(a.check=H(a.check,i,c,s)),o-=c,s+=c,a.length-=c),a.length))break t;a.length=0,a.mode=16186;case 16186:if(2048&a.flags){if(0===o)break t;c=0;do{y=i[s+c++],a.head&&y&&a.length<65536&&(a.head.name+=String.fromCharCode(y))}while(y&&c>9&1,a.head.done=!0),t.adler=a.check=0,a.mode=Se;break;case 16189:for(;d<32;){if(0===o)break t;o--,h+=i[s++]<>>=7&d,d-=7&d,a.mode=Fe;break}for(;d<3;){if(0===o)break t;o--,h+=i[s++]<>>=1,d-=1,3&h){case 0:a.mode=16193;break;case 1:if(Xe(a),a.mode=Oe,e===pe){h>>>=2,d-=2;break t}break;case 2:a.mode=16196;break;case 3:t.msg="invalid block type",a.mode=Le}h>>>=2,d-=2;break;case 16193:for(h>>>=7&d,d-=7&d;d<32;){if(0===o)break t;o--,h+=i[s++]<>>16^65535)){t.msg="invalid stored block lengths",a.mode=Le;break}if(a.length=65535&h,h=0,d=0,a.mode=Te,e===pe)break t;case Te:a.mode=16195;case 16195:if(c=a.length,c){if(c>o&&(c=o),c>l&&(c=l),0===c)break t;n.set(i.subarray(s,s+c),r),o-=c,s+=c,l-=c,r+=c,a.length-=c;break}a.mode=Se;break;case 16196:for(;d<14;){if(0===o)break t;o--,h+=i[s++]<>>=5,d-=5,a.ndist=1+(31&h),h>>>=5,d-=5,a.ncode=4+(15&h),h>>>=4,d-=4,a.nlen>286||a.ndist>30){t.msg="too many length or distance symbols",a.mode=Le;break}a.have=0,a.mode=16197;case 16197:for(;a.have>>=3,d-=3}for(;a.have<19;)a.lens[Z[a.have++]]=0;if(a.lencode=a.lendyn,a.lenbits=7,E={bits:a.lenbits},x=me(0,a.lens,0,19,a.lencode,0,a.work,E),a.lenbits=E.bits,x){t.msg="invalid code lengths set",a.mode=Le;break}a.have=0,a.mode=16198;case 16198:for(;a.have>>24,b=z>>>16&255,g=65535&z,!(m<=d);){if(0===o)break t;o--,h+=i[s++]<>>=m,d-=m,a.lens[a.have++]=g;else{if(16===g){for(R=m+2;d>>=m,d-=m,0===a.have){t.msg="invalid bit length repeat",a.mode=Le;break}y=a.lens[a.have-1],c=3+(3&h),h>>>=2,d-=2}else if(17===g){for(R=m+3;d>>=m,d-=m,y=0,c=3+(7&h),h>>>=3,d-=3}else{for(R=m+7;d>>=m,d-=m,y=0,c=11+(127&h),h>>>=7,d-=7}if(a.have+c>a.nlen+a.ndist){t.msg="invalid bit length repeat",a.mode=Le;break}for(;c--;)a.lens[a.have++]=y}}if(a.mode===Le)break;if(0===a.lens[256]){t.msg="invalid code -- missing end-of-block",a.mode=Le;break}if(a.lenbits=9,E={bits:a.lenbits},x=me(1,a.lens,0,a.nlen,a.lencode,0,a.work,E),a.lenbits=E.bits,x){t.msg="invalid literal/lengths set",a.mode=Le;break}if(a.distbits=6,a.distcode=a.distdyn,E={bits:a.distbits},x=me(2,a.lens,a.nlen,a.ndist,a.distcode,0,a.work,E),a.distbits=E.bits,x){t.msg="invalid distances set",a.mode=Le;break}if(a.mode=Oe,e===pe)break t;case Oe:a.mode=Ie;case Ie:if(o>=6&&l>=258){t.next_out=r,t.avail_out=l,t.next_in=s,t.avail_in=o,a.hold=h,a.bits=d,de(t,f),r=t.next_out,n=t.output,l=t.avail_out,s=t.next_in,i=t.input,o=t.avail_in,h=a.hold,d=a.bits,a.mode===Se&&(a.back=-1);break}for(a.back=0;z=a.lencode[h&(1<>>24,b=z>>>16&255,g=65535&z,!(m<=d);){if(0===o)break t;o--,h+=i[s++]<>p)],m=z>>>24,b=z>>>16&255,g=65535&z,!(p+m<=d);){if(0===o)break t;o--,h+=i[s++]<>>=p,d-=p,a.back+=p}if(h>>>=m,d-=m,a.back+=m,a.length=g,0===b){a.mode=16205;break}if(32&b){a.back=-1,a.mode=Se;break}if(64&b){t.msg="invalid literal/length code",a.mode=Le;break}a.extra=15&b,a.mode=16201;case 16201:if(a.extra){for(R=a.extra;d>>=a.extra,d-=a.extra,a.back+=a.extra}a.was=a.length,a.mode=16202;case 16202:for(;z=a.distcode[h&(1<>>24,b=z>>>16&255,g=65535&z,!(m<=d);){if(0===o)break t;o--,h+=i[s++]<>p)],m=z>>>24,b=z>>>16&255,g=65535&z,!(p+m<=d);){if(0===o)break t;o--,h+=i[s++]<>>=p,d-=p,a.back+=p}if(h>>>=m,d-=m,a.back+=m,64&b){t.msg="invalid distance code",a.mode=Le;break}a.offset=g,a.extra=15&b,a.mode=16203;case 16203:if(a.extra){for(R=a.extra;d>>=a.extra,d-=a.extra,a.back+=a.extra}if(a.offset>a.dmax){t.msg="invalid distance too far back",a.mode=Le;break}a.mode=16204;case 16204:if(0===l)break t;if(c=f-l,a.offset>c){if(c=a.offset-c,c>a.whave&&a.sane){t.msg="invalid distance too far back",a.mode=Le;break}c>a.wnext?(c-=a.wnext,u=a.wsize-c):u=a.wnext-c,c>a.length&&(c=a.length),w=a.window}else w=n,u=r-a.offset,c=a.length;c>l&&(c=l),l-=c,a.length-=c;do{n[r++]=w[u++]}while(--c);0===a.length&&(a.mode=Ie);break;case 16205:if(0===l)break t;n[r++]=a.length,l--,a.mode=Ie;break;case Fe:if(a.wrap){for(;d<32;){if(0===o)break t;o--,h|=i[s++]<{if(Ce(t))return xe;let e=t.state;return e.window&&(e.window=null),t.state=null,ke},inflateGetHeader:(t,e)=>{if(Ce(t))return xe;const a=t.state;return 0==(2&a.wrap)?xe:(a.head=e,e.done=!1,ke)},inflateSetDictionary:(t,e)=>{const a=e.length;let i,n,s;return Ce(t)?xe:(i=t.state,0!==i.wrap&&i.mode!==Ue?xe:i.mode===Ue&&(n=1,n=C(n,e,a,0),n!==i.check)?ze:(s=We(t,e,a,a),s?(i.mode=16210,Ae):(i.havedict=1,ke)))},inflateInfo:"pako inflate (from Nodeca project)"};var Je=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1};const Qe=Object.prototype.toString,{Z_NO_FLUSH:Ve,Z_FINISH:$e,Z_OK:ta,Z_STREAM_END:ea,Z_NEED_DICT:aa,Z_STREAM_ERROR:ia,Z_DATA_ERROR:na,Z_MEM_ERROR:sa}=K;function ra(t){this.options=jt({chunkSize:65536,windowBits:15,to:""},t||{});const e=this.options;e.raw&&e.windowBits>=0&&e.windowBits<16&&(e.windowBits=-e.windowBits,0===e.windowBits&&(e.windowBits=-15)),!(e.windowBits>=0&&e.windowBits<16)||t&&t.windowBits||(e.windowBits+=32),e.windowBits>15&&e.windowBits<48&&0==(15&e.windowBits)&&(e.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new qt,this.strm.avail_out=0;let a=qe.inflateInit2(this.strm,e.windowBits);if(a!==ta)throw new Error(j[a]);if(this.header=new Je,qe.inflateGetHeader(this.strm,this.header),e.dictionary&&("string"==typeof e.dictionary?e.dictionary=Gt(e.dictionary):"[object ArrayBuffer]"===Qe.call(e.dictionary)&&(e.dictionary=new Uint8Array(e.dictionary)),e.raw&&(a=qe.inflateSetDictionary(this.strm,e.dictionary),a!==ta)))throw new Error(j[a])}function oa(t,e){const a=new ra(e);if(a.push(t),a.err)throw a.msg||j[a.err];return a.result}ra.prototype.push=function(t,e){const a=this.strm,i=this.options.chunkSize,n=this.options.dictionary;let s,r,o;if(this.ended)return!1;for(r=e===~~e?e:!0===e?$e:Ve,"[object ArrayBuffer]"===Qe.call(t)?a.input=new Uint8Array(t):a.input=t,a.next_in=0,a.avail_in=a.input.length;;){for(0===a.avail_out&&(a.output=new Uint8Array(i),a.next_out=0,a.avail_out=i),s=qe.inflate(a,r),s===aa&&n&&(s=qe.inflateSetDictionary(a,n),s===ta?s=qe.inflate(a,r):s===na&&(s=aa));a.avail_in>0&&s===ea&&a.state.wrap>0&&0!==t[a.next_in];)qe.inflateReset(a),s=qe.inflate(a,r);switch(s){case ia:case na:case aa:case sa:return this.onEnd(s),this.ended=!0,!1}if(o=a.avail_out,a.next_out&&(0===a.avail_out||s===ea))if("string"===this.options.to){let t=Wt(a.output,a.next_out),e=a.next_out-t,n=Xt(a.output,t);a.next_out=e,a.avail_out=i-e,e&&a.output.set(a.output.subarray(t,t+e),0),this.onData(n)}else this.onData(a.output.length===a.next_out?a.output:a.output.subarray(0,a.next_out));if(s!==ta||0!==o){if(s===ea)return s=qe.inflateEnd(this.strm),this.onEnd(s),this.ended=!0,!0;if(0===a.avail_in)break}}return!0},ra.prototype.onData=function(t){this.chunks.push(t)},ra.prototype.onEnd=function(t){t===ta&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=Kt(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};var la={Inflate:ra,inflate:oa,inflateRaw:function(t,e){return(e=e||{}).raw=!0,oa(t,e)},ungzip:oa,constants:K};const{Deflate:ha,deflate:da,deflateRaw:_a,gzip:fa}=le,{Inflate:ca,inflate:ua,inflateRaw:wa,ungzip:ma}=la;var ba=ha,ga=da,pa=_a,ka=fa,va=ca,ya=ua,xa=wa,za=ma,Aa=K,Ea={Deflate:ba,deflate:ga,deflateRaw:pa,gzip:ka,Inflate:va,inflate:ya,inflateRaw:xa,ungzip:za,constants:Aa};t.Deflate=ba,t.Inflate=va,t.constants=Aa,t.default=Ea,t.deflate=ga,t.deflateRaw=pa,t.gzip=ka,t.inflate=ya,t.inflateRaw=xa,t.ungzip=za,Object.defineProperty(t,"__esModule",{value:!0})}));'},815:(e,t,n)=>{n(642)(n(842))},842:e=>{e.exports='(function(global,factory){typeof exports==="object"&&typeof module!=="undefined"?factory(exports):typeof define==="function"&&define.amd?define(["exports"],factory):(global=typeof globalThis!=="undefined"?globalThis:global||self,factory(global.jinja={}))})(this,function(jinja){"use strict";var STRINGS=/\'(\\\\.|[^\'])*\'|"(\\\\.|[^"\'"])*"/g;var IDENTS_AND_NUMS=/([$_a-z][$\\w]*)|([+-]?\\d+(\\.\\d+)?)/g;var NUMBER=/^[+-]?\\d+(\\.\\d+)?$/;var NON_PRIMITIVES=/\\[[@#~](,[@#~])*\\]|\\[\\]|\\{([@i]:[@#~])(,[@i]:[@#~])*\\}|\\{\\}/g;var IDENTIFIERS=/[$_a-z][$\\w]*/gi;var VARIABLES=/i(\\.i|\\[[@#i]\\])*/g;var ACCESSOR=/(\\.i|\\[[@#i]\\])/g;var OPERATORS=/(===?|!==?|>=?|<=?|&&|\\|\\||[+\\-\\*\\/%])/g;var EOPS=/(^|[^$\\w])(and|or|not|is|isnot)([^$\\w]|$)/g;var LEADING_SPACE=/^\\s+/;var TRAILING_SPACE=/\\s+$/;var START_TOKEN=/\\{\\{\\{|\\{\\{|\\{%|\\{#/;var TAGS={"{{{":/^(\'(\\\\.|[^\'])*\'|"(\\\\.|[^"\'"])*"|.)+?\\}\\}\\}/,"{{":/^(\'(\\\\.|[^\'])*\'|"(\\\\.|[^"\'"])*"|.)+?\\}\\}/,"{%":/^(\'(\\\\.|[^\'])*\'|"(\\\\.|[^"\'"])*"|.)+?%\\}/,"{#":/^(\'(\\\\.|[^\'])*\'|"(\\\\.|[^"\'"])*"|.)+?#\\}/};var delimeters={"{%":"directive","{{":"output","{#":"comment"};var operators={and:"&&",or:"||",not:"!",is:"==",isnot:"!="};var constants={true:true,false:false,null:null};function Parser(){this.nest=[];this.compiled=[];this.childBlocks=0;this.parentBlocks=0;this.isSilent=false}Parser.prototype.push=function(line){if(!this.isSilent){this.compiled.push(line)}};Parser.prototype.parse=function(src){this.tokenize(src);return this.compiled};Parser.prototype.tokenize=function(src){var lastEnd=0,parser=this,trimLeading=false;matchAll(src,START_TOKEN,function(open,index,src){var match=src.slice(index+open.length).match(TAGS[open]);match=match?match[0]:"";var simplified=match.replace(STRINGS,"@");if(!match||~simplified.indexOf(open)){return index+1}var inner=match.slice(0,0-open.length);if(inner.charAt(0)==="-")var wsCollapseLeft=true;if(inner.slice(-1)==="-")var wsCollapseRight=true;inner=inner.replace(/^-|-$/g,"").trim();if(parser.rawMode&&open+inner!=="{%endraw"){return index+1}var text=src.slice(lastEnd,index);lastEnd=index+open.length+match.length;if(trimLeading)text=trimLeft(text);if(wsCollapseLeft)text=trimRight(text);if(wsCollapseRight)trimLeading=true;if(open==="{{{"){open="{{";inner+="|safe"}parser.textHandler(text);parser.tokenHandler(open,inner)});var text=src.slice(lastEnd);if(trimLeading)text=trimLeft(text);this.textHandler(text)};Parser.prototype.textHandler=function(text){this.push("write("+JSON.stringify(text)+");")};Parser.prototype.tokenHandler=function(open,inner){var type=delimeters[open];if(type==="directive"){this.compileTag(inner)}else if(type==="output"){var extracted=this.extractEnt(inner,STRINGS,"@");extracted.src=extracted.src.replace(/\\|\\|/g,"~").split("|");extracted.src=extracted.src.map(function(part){return part.split("~").join("||")});var parts=this.injectEnt(extracted,"@");if(parts.length>1){var filters=parts.slice(1).map(this.parseFilter.bind(this));this.push("filter("+this.parseExpr(parts[0])+","+filters.join(",")+");")}else{this.push("filter("+this.parseExpr(parts[0])+");")}}};Parser.prototype.compileTag=function(str){var directive=str.split(" ")[0];var handler=tagHandlers[directive];if(!handler){throw new Error("Invalid tag: "+str)}handler.call(this,str.slice(directive.length).trim())};Parser.prototype.parseFilter=function(src){src=src.trim();var match=src.match(/[:(]/);var i=match?match.index:-1;if(i<0)return JSON.stringify([src]);var name=src.slice(0,i);var args=src.charAt(i)===":"?src.slice(i+1):src.slice(i+1,-1);args=this.parseExpr(args,{terms:true});return"["+JSON.stringify(name)+","+args+"]"};Parser.prototype.extractEnt=function(src,regex,placeholder){var subs=[],isFunc=typeof placeholder=="function";src=src.replace(regex,function(str){var replacement=isFunc?placeholder(str):placeholder;if(replacement){subs.push(str);return replacement}return str});return{src:src,subs:subs}};Parser.prototype.injectEnt=function(extracted,placeholder){var src=extracted.src,subs=extracted.subs,isArr=Array.isArray(src);var arr=isArr?src:[src];var re=new RegExp("["+placeholder+"]","g"),i=0;arr.forEach(function(src,index){arr[index]=src.replace(re,function(){return subs[i++]})});return isArr?arr:arr[0]};Parser.prototype.replaceComplex=function(s){var parsed=this.extractEnt(s,/i(\\.i|\\[[@#i]\\])+/g,"v");parsed.src=parsed.src.replace(NON_PRIMITIVES,"~");return this.injectEnt(parsed,"v")};Parser.prototype.parseExpr=function(src,opts){opts=opts||{};var parsed1=this.extractEnt(src,STRINGS,"@");parsed1.src=parsed1.src.replace(EOPS,function(s,before,op,after){return op in operators?before+operators[op]+after:s});var parsed2=this.extractEnt(parsed1.src,IDENTS_AND_NUMS,function(s){return s in constants||NUMBER.test(s)?"#":null});var parsed3=this.extractEnt(parsed2.src,IDENTIFIERS,"i");parsed3.src=parsed3.src.replace(/\\s+/g,"");var simplified=parsed3.src;while(simplified!==(simplified=this.replaceComplex(simplified)));while(simplified!==(simplified=simplified.replace(/i(\\.i|\\[[@#i]\\])+/,"v")));simplified=simplified.replace(/[iv]\\[v?\\]/g,"x");simplified=simplified.replace(/[@#~v]/g,"i");simplified=simplified.replace(OPERATORS,"%");simplified=simplified.replace(/!+[i]/g,"i");var terms=opts.terms?simplified.split(","):[simplified];terms.forEach(function(term){while(term!==(term=term.replace(/\\(i(%i)*\\)/g,"i")));if(!term.match(/^i(%i)*/)){throw new Error("Invalid expression: "+src+" "+term)}});parsed3.src=parsed3.src.replace(VARIABLES,this.parseVar.bind(this));parsed2.src=this.injectEnt(parsed3,"i");parsed1.src=this.injectEnt(parsed2,"#");return this.injectEnt(parsed1,"@")};Parser.prototype.parseVar=function(src){var args=Array.prototype.slice.call(arguments);var str=args.pop(),index=args.pop();if(src==="i"&&str.charAt(index+1)===":"){return\'"i"\'}var parts=[\'"i"\'];src.replace(ACCESSOR,function(part){if(part===".i"){parts.push(\'"i"\')}else if(part==="[i]"){parts.push(\'get("i")\')}else{parts.push(part.slice(1,-1))}});return"get("+parts.join(",")+")"};Parser.prototype.escName=function(str){return str.replace(/\\W/g,function(s){return"$"+s.charCodeAt(0).toString(16)})};Parser.prototype.parseQuoted=function(str){if(str.charAt(0)==="\'"){str=str.slice(1,-1).replace(/\\\\.|"/,function(s){if(s==="\\\\\'")return"\'";return s.charAt(0)==="\\\\"?s:"\\\\"+s});str=\'"\'+str+\'"\'}return JSON.parse(str)};var tagHandlers={if:function(expr){this.push("if ("+this.parseExpr(expr)+") {");this.nest.unshift("if")},else:function(){if(this.nest[0]==="for"){this.push("}, function() {")}else{this.push("} else {")}},elseif:function(expr){this.push("} else if ("+this.parseExpr(expr)+") {")},endif:function(){this.nest.shift();this.push("}")},for:function(str){var i=str.indexOf(" in ");var name=str.slice(0,i).trim();var expr=str.slice(i+4).trim();this.push("each("+this.parseExpr(expr)+","+JSON.stringify(name)+",function() {");this.nest.unshift("for")},endfor:function(){this.nest.shift();this.push("});")},raw:function(){this.rawMode=true},endraw:function(){this.rawMode=false},set:function(stmt){var i=stmt.indexOf("=");var name=stmt.slice(0,i).trim();var expr=stmt.slice(i+1).trim();this.push("set("+JSON.stringify(name)+","+this.parseExpr(expr)+");")},block:function(name){if(this.isParent){++this.parentBlocks;var blockName="block_"+(this.escName(name)||this.parentBlocks);this.push("block(typeof "+blockName+\' == "function" ? \'+blockName+" : function() {")}else if(this.hasParent){this.isSilent=false;++this.childBlocks;blockName="block_"+(this.escName(name)||this.childBlocks);this.push("function "+blockName+"() {")}this.nest.unshift("block")},endblock:function(){this.nest.shift();if(this.isParent){this.push("});")}else if(this.hasParent){this.push("}");this.isSilent=true}},extends:function(name){name=this.parseQuoted(name);var parentSrc=this.readTemplateFile(name);this.isParent=true;this.tokenize(parentSrc);this.isParent=false;this.hasParent=true;this.isSilent=true},include:function(name){name=this.parseQuoted(name);var incSrc=this.readTemplateFile(name);this.isInclude=true;this.tokenize(incSrc);this.isInclude=false}};tagHandlers.assign=tagHandlers.set;tagHandlers.elif=tagHandlers.elseif;var getRuntime=function runtime(data,opts){var defaults={autoEscape:"toJson"};var _toString=Object.prototype.toString;var _hasOwnProperty=Object.prototype.hasOwnProperty;var getKeys=Object.keys||function(obj){var keys=[];for(var n in obj)if(_hasOwnProperty.call(obj,n))keys.push(n);return keys};var isArray=Array.isArray||function(obj){return _toString.call(obj)==="[object Array]"};var create=Object.create||function(obj){function F(){}F.prototype=obj;return new F};var toString=function(val){if(val==null)return"";return typeof val.toString=="function"?val.toString():_toString.call(val)};var extend=function(dest,src){var keys=getKeys(src);for(var i=0,len=keys.length;i").join(">").split(\'"\').join(""")},safe:function(val){return val},toJson:function(val){if(typeof val==="object"){return JSON.stringify(val)}return toString(val)}},opts.filters||{});var stack=[create(data||{})],output=[];return{get:get,set:set,push:push,pop:pop,write:write,filter:filter,each:each,block:block,render:render}};var runtime;jinja.compile=function(markup,opts){opts=opts||{};var parser=new Parser;parser.readTemplateFile=this.readTemplateFile;var code=[];code.push("function render($) {");code.push("var get = $.get, set = $.set, push = $.push, pop = $.pop, write = $.write, filter = $.filter, each = $.each, block = $.block;");code.push.apply(code,parser.parse(markup));code.push("return $.render();");code.push("}");code=code.join("\\n");if(opts.runtime===false){var fn=new Function("data","options","return ("+code+")(runtime(data, options))")}else{runtime=runtime||(runtime=getRuntime.toString());fn=new Function("data","options","return ("+code+")(("+runtime+")(data, options))")}return{render:fn}};jinja.render=function(markup,data,opts){var tmpl=jinja.compile(markup);return tmpl.render(data,opts)};jinja.templateFiles=[];jinja.readTemplateFile=function(name){var templateFiles=this.templateFiles||[];var templateFile=templateFiles[name];if(templateFile==null){throw new Error("Template file not found: "+name)}return templateFile};function trimLeft(str){return str.replace(LEADING_SPACE,"")}function trimRight(str){return str.replace(TRAILING_SPACE,"")}function matchAll(str,reg,fn){reg=new RegExp(reg.source,"g"+(reg.ignoreCase?"i":"")+(reg.multiline?"m":""));var match;while(match=reg.exec(str)){var result=fn(match[0],match.index,str);if(typeof result=="number"){reg.lastIndex=result}}}});'},856:(e,t,n)=>{n(642)(n(955))},906:e=>{e.exports='(function(root,factory){if(typeof exports==="object"){module.exports=exports=factory()}else if(typeof define==="function"&&define.amd){define([],factory)}else{globalThis.WebAssembly=factory()}})(this,function(){var ge=new ArrayBuffer(8),ke=new Float32Array(ge),Ee=new Float64Array(ge),Ae=new Int32Array(ge),Ge=new BigInt64Array(ge),Se=new BigUint64Array(ge),ve=new WeakMap,Je=[],xe=class{},te={U(n,l){return(n<0||n===0&&Object.is(n,-0))!==(l<0||l===0&&Object.is(l,-0))?-n:n},d(n){return Se[0]=n,Ge[0]},H(n){return ke[0]=n,Ae[0]},Q(n){return Ae[0]=n,ke[0]},W(n){return Ee[0]=n,Se[0]},q(n){return Se[0]=n,Ee[0]},N(n,l){return n<>>32-l},D(n,l){return n>>>l|n<<32-l},V(n,l){return(n<>64n-l)&0xffffffffffffffffn},j(n,l){return(n>>l|n<<64n-l)&0xffffffffffffffffn},G(n){return n?Math.clz32(n&-n)^31:32},J(n){let l=0;for(;n;)l++,n&=n-1;return l},K(n){let l=Math.clz32(Number(n>>32n&0xffffffffn));return l===32&&(l+=Math.clz32(Number(n&0xffffffffn))),BigInt(l)},Z(n){let l=Number(n&0xffffffffn);return l?BigInt(Math.clz32(l&-l)^31):(l=Number(n>>32n&0xffffffffn),l?BigInt(32+Math.clz32(l&-l)^31):64n)},X(n){let l=0n;for(;n;)l++,n&=n-1n;return l},P(n){return n=Math.trunc(n),n>=2147483647?2147483647:n<=-2147483648?-2147483648:n|0},O(n){return n=Math.trunc(n),n>=4294967295?-1:n<=0?0:n|0},I(n){return n=Math.trunc(n),n>=0x8000000000000000?0x7fffffffffffffffn:n<=-0x8000000000000000?0x8000000000000000n:n===n?BigInt(n)&0xffffffffffffffffn:0n},T(n){return n=Math.trunc(n),n>=0x10000000000000000?0xffffffffffffffffn:n>0?BigInt(n):0n},Y(n){return n&0x80n?n|0xffffffffffffff00n:n&0xffn},ee(n){return n&0x8000n?n|0xffffffffffff0000n:n&0xffffn},te(n){return n&0x80000000n?n|0xffffffff00000000n:n&0xffffffffn},B(n,l,u,y,O){n===l?l.copyWithin(u,y,y+O):l.set(n.subarray(y,y+O),u)},z(n,l,u,y,O){if(u>>>=0,y>>>=0,O>>>=0,y+O>l.length||u+O>n.length)throw RangeError();if(u<=y)for(let p=0;p=0;p--)n[u+p]=l[y+p]},w(n,l,u){let y=n.length;if(u>>>=0,y+u>n.ae)return-1;for(let O=0;O>>=0,y>>>=0,l+y>n.length)throw RangeError();for(let O=0;O1){p=`let r=${p};`;for(let x=0;x{${p}}`)(n,this),n)}return n.p}};var Le=n=>typeof n=="string"?n>="P"&&n<="S":n?typeof n[0]!="string"&&n[0]<0:!1;var Ue=[{e:[["$",40,41,42,43,44,45,46,47,48,49,50,51,52,53],[106,"x",[65,"Q"]],"P","R"],t:["$","x",[-2,"P","Q"],"R"]},{e:[["$",54,55,56,57,58,59,60,61,62],[106,"x",[65,"Q"]],"y","P","R"],t:["$","x","y",[-2,"P","Q"],"R"]},{e:[60,"x","y","P","R"],i:{y:[{e:[66,"Q"],t:[58,"x",[65,[-1,"Q"]],"P","R"]},{e:[["$",48,49,50,51,52,53,41],"z","Q","S"],t:[58,"x",[45,"z","Q","S"],"P","R"]},{e:[["@",172,173],"z"],t:[58,"x","z","P","R"]}]}},{e:[61,"x","y","P","R"],i:{y:[{e:[66,"Q"],t:[59,"x",[65,[-1,"Q"]],"P","R"]},{e:[48,"z","Q","S"],t:[59,"x",[44,"z","Q","S"],"P","R"]},{e:[49,"z","Q","S"],t:[59,"x",[45,"z","Q","S"],"P","R"]},{e:[["$",50,51,52,53,41],"z","Q","S"],t:[59,"x",[47,"z","Q","S"],"P","R"]},{e:[["@",172,173],"z"],t:[59,"x","z","P","R"]}]}},{e:[62,"x","y","P","R"],i:{y:[{e:[66,"Q"],t:[54,"x",[65,[-1,"Q"]],"P","R"]},{e:[48,"z","Q","S"],t:[54,"x",[44,"z","Q","S"],"P","R"]},{e:[49,"z","Q","S"],t:[54,"x",[45,"z","Q","S"],"P","R"]},{e:[50,"z","Q","S"],t:[54,"x",[46,"z","Q","S"],"P","R"]},{e:[51,"z","Q","S"],t:[54,"x",[47,"z","Q","S"],"P","R"]},{e:[["$",52,53,41],"z","Q","S"],t:[54,"x",[40,"z","Q","S"],"P","R"]},{e:[["@",172,173],"z"],t:[54,"x","z","P","R"]}]}},{e:[80,"x"],i:{x:[{e:[["$",48,49],"y","P","R"],t:[69,[45,"y","P","R"]]},{e:[["$",50,51],"y","P","R"],t:[69,[47,"y","P","R"]]},{e:[["$",52,53],"y","P","R"],t:[69,[40,"y","P","R"]]},{e:[["@",172,173],"y"],t:[69,"y"]}]}},{e:[81,[49,"x","P","R"],[66,"Q"]],t:[70,[45,"x","P","R"],[65,[-1,"Q"]]],n:["Q","<=",0xffn]},{e:[82,[49,"x","P","R"],[66,"Q"]],t:[71,[45,"x","P","R"],[65,[-1,"Q"]]],n:["Q","<=",0xffn]},{e:[81,[51,"x","P","R"],[66,"Q"]],t:[70,[47,"x","P","R"],[65,[-1,"Q"]]],n:["Q","<=",0xffffn]},{e:[82,[51,"x","P","R"],[66,"Q"]],t:[71,[47,"x","P","R"],[65,[-1,"Q"]]],n:["Q","<=",0xffffn]},{e:[81,[53,"x","P","R"],[66,"Q"]],t:[70,[40,"x","P","R"],[65,[-1,"Q"]]],n:["Q","<=",0xffffffffn]},{e:[82,[53,"x","P","R"],[66,"Q"]],t:[71,[40,"x","P","R"],[65,[-1,"Q"]]],n:["Q","<=",0xffffffffn]},{e:[240,"x"],i:{x:[{e:[242,"y"],t:[240,"y"]},{e:[["@",69,80],"x"],t:[241,"y"]}]}},{e:[241,"x"],i:{x:[{e:[242,"y"],t:[241,"y"]},{e:[["@",69,80],"y"],t:[240,"y"]},{e:[70,"y","z"],t:[240,[71,"y","z"]]},{e:[71,"y","z"],t:[240,[70,"y","z"]]},{e:[72,"y","z"],t:[240,[78,"y","z"]]},{e:[73,"y","z"],t:[240,[79,"y","z"]]},{e:[74,"y","z"],t:[240,[76,"y","z"]]},{e:[75,"y","z"],t:[240,[77,"y","z"]]},{e:[76,"y","z"],t:[240,[74,"y","z"]]},{e:[77,"y","z"],t:[240,[75,"y","z"]]},{e:[78,"y","z"],t:[240,[72,"y","z"]]},{e:[79,"y","z"],t:[240,[73,"y","z"]]},{e:[81,"y","z"],t:[240,[82,"y","z"]]},{e:[82,"y","z"],t:[240,[81,"y","z"]]},{e:[83,"y","z"],t:[240,[89,"y","z"]]},{e:[84,"y","z"],t:[240,[90,"y","z"]]},{e:[85,"y","z"],t:[240,[87,"y","z"]]},{e:[86,"y","z"],t:[240,[88,"y","z"]]},{e:[87,"y","z"],t:[240,[85,"y","z"]]},{e:[88,"y","z"],t:[240,[86,"y","z"]]},{e:[89,"y","z"],t:[240,[83,"y","z"]]},{e:[90,"y","z"],t:[240,[84,"y","z"]]}]}},{e:[243,"x"],i:{x:[{e:[40,"y","P","R"],t:[245,"y","P","R"]}]}},{e:[244,"x"],i:{x:[{e:[41,"y","P","R"],t:[246,"y","P","R"]},{e:[66,"P"],t:[66,"P"],n:["P","<=",0x7fffffffffffffffn]},{e:[["$",49,51,53],"y","P","R"],t:["$","y","P","R"]}]}},{e:[167,"x"],i:{x:[{e:[66,"P"],t:[65,[-1,"P"]]},{e:[48,"y","P","R"],t:[44,"y","P","R"]},{e:[49,"y","P","R"],t:[45,"y","P","R"]},{e:[50,"y","P","R"],t:[46,"y","P","R"]},{e:[51,"y","P","R"],t:[47,"y","P","R"]},{e:[["$",52,53,41],"y","P","R"],t:[40,"y","P","R"]},{e:[["@",172,173],"y"],t:"y"},{e:[124,[["@",172,173],"y"],[66,"P"]],t:[106,"y",[65,[-1,"P"]]]}]}},{e:[131,"x",[66,"P"]],i:{x:[{e:[66,"Q"],t:[66,[-3,"P","Q"]]},{e:[131,"y",[66,"Q"]],t:[131,"y",[66,[-3,"P","Q"]]]},{e:[49,"y","Q","S"],t:[49,"y","Q","S"],n:[["P","&",0xffn],"===",0xffn]},{e:[48,"y","Q","S"],t:[49,"y","Q","S"],n:["P","===",0xffn]},{e:[51,"y","Q","S"],t:[51,"y","Q","S"],n:[["P","&",0xffffn],"===",0xffffn]},{e:[50,"y","Q","S"],t:[51,"y","Q","S"],n:["P","===",0xffffn]},{e:[53,"y","Q","S"],t:[53,"y","Q","S"],n:[["P","&",0xffffffffn],"===",0xffffffffn]},{e:[52,"y","Q","S"],t:[53,"y","Q","S"],n:["P","===",0xffffffffn]}]}}],He=()=>{let n=0,l=()=>"v"+n++,u=(M,b,$,v,S)=>{if(b<$.length){let C=$[b];if(typeof C=="string")A[C]=`${B}[${M}+${b+1}]`,u(M,b+1,$,v,S);else{let E=l(),z=l();i+=`var ${E}=${B}[${M}+${b+1}],${z}=${B}[${E}]&65535;`,y(E,z,C,v,c=>{u(M,b+1,$,c,S)})}}else S(v)},y=(M,b,[$,...v],S,C)=>{let E=[];if(typeof $=="number")E.push(`${b}===${$}`);else{let[z,...c]=$;c.sort((a,_)=>a-_),U[z]={y:M,se:b,oe:c.some(a=>P.has(a))};for(let a=0;a2?`${b}>=${c[a]}&&${b}<=${c[a+=_-1]}`:`${b}===${c[a]}`)}}S=S.concat({y:M,b:v.map(z=>typeof z=="string"?z:null)}),i+=`if(${E.join("||")}){`,u(M,0,v,S,C),i+="}"},O=(M,b,$,v,S,C)=>{for(let{e:E,i:z,t:c,n:a}of $)y(M,b,E,S,_=>{let F=Object.create(C);p(a,F,()=>{if(z){for(let o in z)x(o,F);for(let o in z){let f=F[o],d=l();i+=`var ${d}=${B}[${f}]&65535;`,O(f,d,z[o],null,_,F)}}if(c){let o=T(c,F,_.slice(),`|${B}[${N}]&${-1<<24}`);typeof c!="string"&&(typeof c[0]=="string"?U[c[0]].oe:P.has(c[0]))?(N!==o&&(i+=`${N}=${o};`),i+="continue"):i+="return "+o}})})},p=(M,b,$)=>{if(M){let v=S=>typeof S=="string"?`${D}[${b[S]||A[S]}]&0xFFFFFFFFFFFFFFFFn`:typeof S=="bigint"?S+"n":`(${v(S[0])})${S[1]}(${v(S[2])})`;i+=`if(${v(M)}){`,$(),i+="}"}else $()},x=(M,b)=>{if(!(M in b)){let $=l();i+=`var ${$}=${A[M]};`,b[M]=$}},T=(M,b,$,v="")=>{if(typeof M=="string")return b[M]||A[M];if(M[0]===-1){let o=T(M[1],b,$);return`Number(${D}[${o}]&0xFFFFFFFFn)`}if(M[0]===-2){let o=T(M[1],b,$),f=T(M[2],b,$);return`${o}+${f}`}if(M[0]===-3){let o=M[1];typeof o=="string"&&x(o,b);let f=T(o,b,$),d=T(M[2],b,$);return i+=`${D}[${f}]&=${D}[${d}];`,f}let[S,...C]=M,z=C.length-+Le(C[C.length-1])-+Le(C[C.length-2])<<16,c=-1,a,_,F;for(let o=0;o<$.length;o++){let f=$[o];if(f.b.length===C.length){let d=0;for(let I=0;Ic&&(c=d,a=o,_=f.y,F=f.b)}}if(!(typeof S=="string"&&U[S].y===_)){let o=(typeof S=="string"?`${U[S].se}|${z}`:`${S|z}`)+v;_?($.splice(a,1),i+=`${B}[${_}]=${o};`):(_=l(),i+=`var ${_}=${J}(${o},${M.length});`)}for(let o=0;o{let l=new DataView(n.buffer),u=()=>{let a=0,_=0,F;do{F=n[c++],a|=(F&127)<<_,_+=7}while(F&128);return a>>>0},y=()=>{let a=0,_=0,F;do{F=n[c++],a|=(F&127)<<_,_+=7}while(F&128);return _<32&&F&64?a|-1<<_:a},O=()=>{let a=0n,_=0n,F;do{F=n[c++],a|=BigInt(F&127)<<_,_+=7n}while(F&128);return _<64&&F&64?a|~0n<<_:a},p=()=>{let a=l.getFloat32(c,!0);return c+=4,a},x=()=>{let a=l.getFloat64(c,!0);return c+=8,a},T=(a=u())=>[...n.slice(c,c+=a)],A=(a=u())=>decodeURIComponent(escape(String.fromCharCode(...n.slice(c,c+=a)))),U=(a=n[c++])=>[u(),a===0?1/0:u()],Y=()=>{let a=[],_;for(;(_=n[c++])!==11;)if(_===65){let F=u();a.push(()=>F)}else if(_===35){let F=u();a.push(o=>{if(F>=o.length)throw RangeError();return o[F]})}else if(_===106){let F=a.pop(),o=a.pop();a.push(f=>o(f)+F(f)|0)}else if(_===107){let F=a.pop(),o=a.pop();a.push(f=>o(f)-F(f)|0)}else if(_===108){let F=a.pop(),o=a.pop();a.push(f=>Math.imul(o(f),F(f)))}else throw new Q("Unsupported constant instruction: "+L(_));if(a.length!==1)throw new Q("Unsupported constant");return a[0]},B=()=>{let a=n[c++],_;if(a===210)_=u();else if(a===208){if(n[c++]!==112)throw new Q("Unsupported reference type: "+L(n[c-1]));_=null}else throw new Q("Unsupported constant instruction: "+L(a));if(n[c++]!==11)throw new Q("Expected end after constant: "+L(n[c-1]));return _},D=a=>{let _=n[c++],F;if(_===65&&a===127){let o=y();F=()=>o}else if(_===66&&a===126){let o=O();F=()=>o}else if(_===67&&a===125){let o=p();F=()=>o}else if(_===68&&a===124){let o=x();F=()=>o}else if(_===208&&(a===112||a===111))c++,F=()=>null;else if(_===210&&a===112){let o=u();F=(f,d)=>d(o)}else if(_===35){let o=u();F=f=>{if(o>=f.length)throw RangeError();return f[o]}}else throw new Q("Unsupported constant instruction: "+L(_));if(n[c++]!==11)throw new Q("Expected end after constant: "+L(n[c-1]));return F},J=[],N=[],t=[],P=[],i=[],M=[],b=[],$=[],v=[],S=new Map,C=[],E=[],z=-1,c=8;if(n.slice(0,8).join(",")!=="0,97,115,109,1,0,0,0")throw new Q("Invalid file header");for(;c+57)throw new Q("Unsupported element kind: "+d);let I=d&3,R=I===2?u():I===0?0:null,K=d&1?null:Y();if(I&&n[c++]!==(d&4?112:0))throw new Q("Unsupported element type: "+L(n[c-1]));let Me=[];for(let pe=0,ie=u();pe2)throw new Q("Unsupported data mode: "+d);let I=d===2?u():0,R=d===1?null:Y(),K=u();t.push([I,R,n.slice(c,c+=K)])}else if(a!==12)throw new Q("Unsupported section type: "+L(a));c=F}return{re:n,o:l,R:J,pe:N,_e:t,ue:P,ce:i,k:M,Fe:b,ge:$,fe:v,de:S,me:z,he:C,E:E}},L=n=>"0x"+n.toString(16).toUpperCase().padStart(2,"0"),Pe=new Map,X=class{constructor(l){Pe.set(this,Ze(l instanceof Uint8Array?l:new Uint8Array(l instanceof ArrayBuffer?l:l.buffer)))}},Q=class extends Error{constructor(l){super(l),this.name="CompileError"}};var Oe=(n,l)=>{if(l===125||l===124)return+n;if(l===127)return n|0;if(l===126)return BigInt(n)&0xffffffffffffffffn;if(l===111)return n;throw Error("Unsupported cast to type: "+L(l))},fe=(n,l)=>{if(l===125||l===124)return"+"+n;if(l===127)return n+"|0";if(l===126)return`BigInt(${n})&0xFFFFFFFFFFFFFFFFn`;if(l===111)return n;if(l===112)return`l.h(${n})`;throw Error("Unsupported cast to type: "+L(l))},Fe=(n,l)=>{if(l===124||l===127)return n;if(l===125)return`Math.fround(${n})`;if(l===126)return`l.d(${n})`;if(l===111)return n;if(l===112)return`l.M(${n})`;throw Error("Unsupported cast to type: "+L(l))};var Ye={1:520,26:521,32:28,33:25,34:29,35:28,36:25,37:29,38:26,40:61,41:61,42:61,43:61,44:61,45:61,46:61,47:61,48:61,49:61,50:61,51:61,52:61,53:61,54:58,55:58,56:58,57:58,58:58,59:58,60:58,61:58,62:58,63:28,64:29,69:13,70:78,71:78,72:78,73:206,74:78,75:206,76:78,77:206,78:78,79:206,80:13,81:78,82:78,83:334,84:78,85:334,86:78,87:334,88:78,89:334,90:78,91:78,92:78,93:78,94:78,95:78,96:78,97:78,98:78,99:78,100:78,101:78,102:78,103:13,104:13,105:13,106:14,107:14,108:14,109:14,110:142,111:14,112:142,113:14,114:14,115:14,116:14,117:14,118:14,119:14,120:14,121:13,122:13,123:13,124:14,125:14,126:14,127:270,128:14,129:270,130:14,131:14,132:14,133:14,134:1038,135:1038,136:1038,137:1038,138:1038,139:13,140:13,141:13,142:13,143:13,144:13,145:13,146:14,147:14,148:14,149:14,150:14,151:14,152:14,153:13,154:13,155:13,156:13,157:13,158:13,159:13,160:14,161:14,162:14,163:14,164:14,165:14,166:14,167:13,168:13,169:13,170:13,171:13,172:13,173:13,174:13,175:13,176:13,177:13,178:525,179:653,180:269,181:13,182:525,183:525,184:653,185:269,186:13,187:525,188:13,189:13,190:13,191:13,192:13,193:13,194:13,195:13,196:13,209:77,210:28,64512:13,64513:13,64514:13,64515:13,64516:13,64517:13,64518:13,64519:13,64521:24,64525:24,64527:30,64528:28,64529:27};var et=new Int32Array(65536),tt=He(),Qe=(n,l,u,y,O,p,x,T,A,U,Y)=>{let B=()=>{let e=0,s=0,r;do{r=I[W++],e|=(r&127)<>>0},D=()=>{let e=0,s=0,r;do{r=I[W++],e|=(r&127)<{let e=0n,s=0n,r;do{r=I[W++],e|=BigInt(r&127)<{let e=I[W];if(e===64)return W++,[0,0];if(e&64)return W++,[0,1];let s=B(),[r,h]=ie[s];return[r.length,h.length]},t=et,P=[],i=0,M=[],b=0,$=e=>{for(;b(v[e]||(_e.push(`t${e}=t[${e}]`),v[e]=!0),"t"+e),C=(e,s,r,h)=>`c.${e+h}[${a(s)}${r?"+"+r:""}]`,E=(e,s,r,h,w)=>`c.${e+h}[${a(s)}${r?"+"+r:""}]=${w}`,z=(e,s,r,h)=>`c.${"o"+h}.get${e}(${a(s)}${r?"+"+r:""},1)`,c=(e,s,r,h,w)=>`c.${"o"+h}.set${e}(${a(s)}${r?"+"+r:""},${w},1)`,a=e=>e<0?$(-e):`(${_(e)})`,_=e=>{let s=t[e],r=s&65535;switch(r){case 16:case 18:{let h=s>>16&255,w=t[e+h+1],[q,H]=l[w],ee=[];for(let G=1;G<=h;G++)ee.push(a(t[e+G]));let j=`f[${w}]`,se=r===18?`l.C(this,${j},[${ee}])`:`${j}(${ee})`;if(H.length<2)return se;let oe=t[e+h+2],Z=[];for(let G=0;G>16&255,w=t[e+h+2],q=t[e+h+3],[H,ee]=ie[q],j=[],se=a(t[e+1]);for(let V=1;V<=h;V++)j.push(a(t[e+V+1]));let oe=`${S(w)}[${se}].x`,Z=r===19?`l.C(this,${oe},[${j}])`:`${oe}(${j})`;if(ee.length<2)return Z;let G=t[e+h+4],ue=[];for(let V=0;V>>0`;case 244:return`l.d(${a(t[e+1])})`;case 69:case 80:return`${a(t[e+1])}?0:1`;case 70:case 81:case 91:case 97:return`${a(t[e+1])}===${a(t[e+2])}`;case 71:case 82:case 92:case 98:return`${a(t[e+1])}!==${a(t[e+2])}`;case 72:case 73:case 83:case 84:case 93:case 99:return`${a(t[e+1])}<${a(t[e+2])}`;case 74:case 75:case 85:case 86:case 94:case 100:return`${a(t[e+1])}>${a(t[e+2])}`;case 76:case 77:case 87:case 88:case 95:case 101:return`${a(t[e+1])}<=${a(t[e+2])}`;case 78:case 79:case 89:case 90:case 96:case 102:return`${a(t[e+1])}>=${a(t[e+2])}`;case 103:return`Math.clz32(${a(t[e+1])})`;case 104:return`l.G(${a(t[e+1])})`;case 105:return`l.J(${a(t[e+1])})`;case 106:return`${a(t[e+1])}+${a(t[e+2])}|0`;case 107:return`${a(t[e+1])}-${a(t[e+2])}|0`;case 108:return`Math.imul(${a(t[e+1])},${a(t[e+2])})`;case 110:case 109:return`${a(t[e+1])}/${a(t[e+2])}|0`;case 112:case 111:return`${a(t[e+1])}%${a(t[e+2])}|0`;case 113:return`${a(t[e+1])}&${a(t[e+2])}`;case 114:return`${a(t[e+1])}|${a(t[e+2])}`;case 115:return`${a(t[e+1])}^${a(t[e+2])}`;case 116:return`${a(t[e+1])}<<${a(t[e+2])}`;case 117:return`${a(t[e+1])}>>${a(t[e+2])}`;case 118:return`${a(t[e+1])}>>>${a(t[e+2])}|0`;case 119:return`l.N(${a(t[e+1])},${a(t[e+2])})`;case 120:return`l.D(${a(t[e+1])},${a(t[e+2])})`;case 121:return`l.K(${a(t[e+1])})`;case 122:return`l.Z(${a(t[e+1])})`;case 123:return`l.X(${a(t[e+1])})`;case 124:return`(${a(t[e+1])}+${a(t[e+2])})&0xFFFFFFFFFFFFFFFFn`;case 125:return`(${a(t[e+1])}-${a(t[e+2])})&0xFFFFFFFFFFFFFFFFn`;case 126:return`(${a(t[e+1])}*${a(t[e+2])})&0xFFFFFFFFFFFFFFFFn`;case 127:return`${a(t[e+1])}/${a(t[e+2])}&0xFFFFFFFFFFFFFFFFn`;case 128:return`${a(t[e+1])}/${a(t[e+2])}`;case 129:return`${a(t[e+1])}%${a(t[e+2])}&0xFFFFFFFFFFFFFFFFn`;case 130:return`${a(t[e+1])}%${a(t[e+2])}`;case 131:return`${a(t[e+1])}&${a(t[e+2])}`;case 132:return`${a(t[e+1])}|${a(t[e+2])}`;case 133:return`${a(t[e+1])}^${a(t[e+2])}`;case 134:return`${a(t[e+1])}<<${a(t[e+2])}&0xFFFFFFFFFFFFFFFFn`;case 135:return`l.d(${a(t[e+1])})>>${a(t[e+2])}&0xFFFFFFFFFFFFFFFFn`;case 136:return`${a(t[e+1])}>>${a(t[e+2])}`;case 137:return`l.V(${a(t[e+1])},${a(t[e+2])})`;case 138:return`l.j(${a(t[e+1])},${a(t[e+2])})`;case 139:case 153:return`Math.abs(${a(t[e+1])})`;case 140:case 154:return`-${a(t[e+1])}`;case 141:case 155:return`Math.ceil(${a(t[e+1])})`;case 142:case 156:return`Math.floor(${a(t[e+1])})`;case 143:case 157:return`Math.trunc(${a(t[e+1])})`;case 144:case 158:return`Math.round(${a(t[e+1])})`;case 145:case 159:return`Math.sqrt(${a(t[e+1])})`;case 146:case 160:return`${a(t[e+1])}+${a(t[e+2])}`;case 147:case 161:return`${a(t[e+1])}-${a(t[e+2])}`;case 148:case 162:return`${a(t[e+1])}*${a(t[e+2])}`;case 149:case 163:return`${a(t[e+1])}/${a(t[e+2])}`;case 150:case 164:return`Math.min(${a(t[e+1])},${a(t[e+2])})`;case 151:case 165:return`Math.max(${a(t[e+1])},${a(t[e+2])})`;case 152:case 166:return`l.U(${a(t[e+1])},${a(t[e+2])})`;case 167:return`Number(${a(t[e+1])}&0xFFFFFFFFn)|0`;case 168:case 169:case 170:case 171:return`Math.trunc(${a(t[e+1])})|0`;case 172:return`BigInt(${a(t[e+1])})`;case 173:return`BigInt(${a(t[e+1])}>>>0)`;case 174:case 175:case 176:case 177:return`BigInt(Math.trunc(${a(t[e+1])}))&0xFFFFFFFFFFFFFFFFn`;case 180:case 181:case 186:case 185:return`Number(${a(t[e+1])})`;case 188:return`l.H(${a(t[e+1])})`;case 189:return`l.W(${a(t[e+1])})`;case 190:return`l.Q(${a(t[e+1])})`;case 191:return`l.q(${a(t[e+1])})`;case 192:return`${a(t[e+1])}<<24>>24`;case 193:return`${a(t[e+1])}<<16>>16`;case 194:return`l.Y(${a(t[e+1])})`;case 195:return`l.ee(${a(t[e+1])})`;case 196:return`l.te(${a(t[e+1])})`;case 208:return"null";case 209:return`${a(t[e+1])}===null`;case 210:return`F(${t[e+1]})`;case 64512:return`l.P(${a(t[e+1])})`;case 64513:return`l.O(${a(t[e+1])})`;case 64514:return`l.P(${a(t[e+1])})`;case 64515:return`l.O(${a(t[e+1])})`;case 64516:return`l.I(${a(t[e+1])})`;case 64517:return`l.T(${a(t[e+1])})`;case 64518:return`l.I(${a(t[e+1])})`;case 64519:return`l.T(${a(t[e+1])})`;case 64520:return`l.B(d[${t[e+4]}],c.${"l"+t[e+5]},${a(t[e+1])},${a(t[e+2])},${a(t[e+3])})`;case 64521:return`d[${t[e+1]}]=new Uint8Array`;case 64522:return`l.B(c.${"l"+t[e+4]},c.${"l"+t[e+5]},${a(t[e+1])},${a(t[e+2])},${a(t[e+3])})`;case 64523:return`c.${"l"+t[e+4]}.fill(${a(t[e+1])},T=${a(t[e+2])},T+${a(t[e+3])})`;case 64524:return`l.z(${S(t[e+4])},e[${t[e+5]}],${a(t[e+1])},${a(t[e+2])},${a(t[e+3])})`;case 64525:return`e[${t[e+1]}]=[]`;case 64526:return`l.z(${S(t[e+4])},${S(t[e+5])},${a(t[e+1])},${a(t[e+2])},${a(t[e+3])})`;case 64527:return`l.w(${S(t[e+3])},${a(t[e+1])},${a(t[e+2])})`;case 64528:return S(t[e+1])+".length";case 64529:return`l.ne(${S(t[e+4])},${a(t[e+1])},${a(t[e+2])},${a(t[e+3])})`;default:throw"Internal error"}},F=(e,s)=>{let r=i;return t[r]=e,i+=s,r},o=(e,s=g)=>{P.push(i),t[i++]=e|65536|s<<24,t[i++]=-s},f=()=>{d(),ne(0),m[m.length-1].a=!0},d=(e=!1)=>{let s=[],r=P.length-1,h=H=>{let ee=t[H],j=ee&65535,se=ee>>16&255,oe=j>=40&&j<=62||j>=64520&&j<=64523;for(let Z=se-1;r>=0&&Z>=0;Z--){let G=-t[H+Z+1],ue=!1;for(let V=r;V>=0;V--){let $e=P[V];if($e===null)continue;let Re=t[$e],ce=Re&65535;if(oe&&(ce<65||ce>66)&&ce!=32)break;if(Re>>>24===G){P[V]=null,ue||(r=V-1),t[H+Z+1]=h($e);break}if(ce!==243&&ce!==244)break;ue=!0}}return tt(t,M,F,H)},w;for(;r>=0;){let H=r--;(w=P[H])!==null&&(P[H]=h(w))}let q;for(r=P.length-1,e&&(r>=0&&(w=P[r])!==null&&t[w]>>>24===g?(q=_(w),r--):q="s"+g,g--);r>=0;)if((w=P[r--])!==null){let H=t[w]>>>24;s.push(`${H?$(H)+"=":""}${_(w)};`)}return k+=s.reverse().join(""),M.length=0,P.length=0,i=0,q},{re:I,o:R,R:K,k:Me,de:pe,E:ie}=A,[We,qe]=ie[Me[U]],[Ne,De,Ve]=K[U],re=[],ze=We.length;for(let e=0;e{let s=m.length{if(m[m.length-1].a)return;let s=m[e];if(e)if(s.F===1){if(g>s.r+s.c)for(let r=1;r<=s.c;r++)k+=`s${s.r+r}=s${g-s.c+r};`;k+=es.r+s.s)for(let r=1;r<=s.s;r++)k+=`s${s.r+r}=s${g-s.s+r};`;k+=e<=ae?`break b${e};`:`L=${s.$};continue;`}else if(s.s===1)k+=`return s${g};`;else if(s.s>1){let r=[];for(let h=s.s-1;h>=0;h--)r.push("s"+(g-h));k+=`return[${r}];`}else k+="return;"},m=[{c:0,a:!1,F:0,$:-1,_:-1,r:0,s:qe.length}],we=e=>{let s=Ye[e]|0;if(!(s&8))return!1;if(s&8)if(m[m.length-1].a)s&32&&I[W++]&64&&B(),s&16&&B();else{let r=s&3;if(s&1024&&(P.push(i),t[i++]=66|g+1<<24,t[i++]=M.length,M.push(63n),P.push(i),t[i++]=131|2<<16|g<<24,t[i++]=-g,t[i++]=-(g+1)),g-=r,s&384)for(let h=0;h1&&(t[i++]=g+1),g+=w.length}s&&f();break}case 17:case 19:{let s=e===19,r=B(),h=B();if(!m[m.length-1].a){let[w,q]=ie[r];g-=w.length+1,P.push(i),q.length===1&&(e|=g+1<<24),t[i++]=e|w.length<<16,t[i++]=-(g+w.length+1);for(let H=1;H<=w.length;H++)t[i++]=-(g+H);t[i++]=h,t[i++]=r,q.length>1&&(t[i++]=g+1),g+=q.length}s&&f();break}case 27:case 28:{if(e===28){let s=B();if(s!==1)throw Error("Unsupported select type count "+s);W++}m[m.length-1].a||(o(240),g-=2,P.push(i),t[i++]=e|3<<16|g<<24,t[i++]=-(g+2),t[i++]=-g,t[i++]=-(g+1));break}case 65:m[m.length-1].a?D():(P.push(i),t[i++]=e|++g<<24,t[i++]=D());break;case 66:m[m.length-1].a?J():(P.push(i),t[i++]=e|++g<<24,t[i++]=M.length,M.push(J()));break;case 67:m[m.length-1].a||(P.push(i),t[i++]=e|++g<<24,t[i++]=W),W+=4;break;case 68:m[m.length-1].a||(P.push(i),t[i++]=e|++g<<24,t[i++]=W),W+=8;break;case 208:W++,m[m.length-1].a||(P.push(i),t[i++]=e|++g<<24);break;case 252:if(e=64512|I[W++],we(e))continue;switch(e){case 64520:{let s=B(),r=B();m[m.length-1].a||(g-=2,P.push(i),t[i++]=e|3<<16|g<<24,t[i++]=-g,t[i++]=-(g+1),t[i++]=-(g+2),t[i++]=s,t[i++]=r);break}case 64522:{let s=B(),r=B();m[m.length-1].a||(g-=2,P.push(i),t[i++]=e|3<<16|g<<24,t[i++]=-g,t[i++]=-(g+1),t[i++]=-(g+2),t[i++]=r,t[i++]=s);break}case 64523:{let s=B();m[m.length-1].a||(g-=2,P.push(i),t[i++]=e|3<<16|g<<24,t[i++]=-(g+1),t[i++]=-g,t[i++]=-(g+2),t[i++]=s);break}case 64524:{let s=B(),r=B();m[m.length-1].a||(g-=2,P.push(i),t[i++]=e|3<<16|g<<24,t[i++]=-g,t[i++]=-(g+1),t[i++]=-(g+2),t[i++]=r,t[i++]=s);break}case 64526:{let s=B(),r=B();m[m.length-1].a||(g-=2,P.push(i),t[i++]=e|3<<16|g<<24,t[i++]=-g,t[i++]=-(g+1),t[i++]=-(g+2),t[i++]=s,t[i++]=r);break}default:throw Error("Unsupported instruction: 0xFC "+L(e&255))}break;default:throw Error("Unsupported instruction: "+L(e))}}if(b>255)throw Error("Deep stacks are not supported");let Ce=JSON.stringify("wasm:"+(pe.get(Y)||`function[${U}]`)),je=`return{${Ce}(${re.slice(0,ze)}){var ${_e};${k}}}[${Ce}]`;return new Function("f","F","c","t","d","e","g","l",je)(n,u,T,y,O,p,x,te)};var de=class{valueOf(){return this.value}},at=(n,l)=>{let[u,y]=n,O=[],p=[];for(let T=0;T1){x=`let r=${x};`;for(let T=0;T{${x}}`)(l,te)},le=class{constructor(l,u){let y=Pe.get(l),{R:O,_e:p,ue:x,ce:T,k:A,Fe:U,ge:Y,fe:B,me:D,he:J,E:N}=y,t=this.exports=Object.create(null),P=[],i=[],M=[],b=[],$=[],v={},S=[],C=a=>{let _=v[a]||(v[a]={xe:a,ie:M[a],p:null,x:(...F)=>{let o=i[a](...F);return _.x=i[a],o}});return _};for(let a of Y){let[_,F,o,f]=a,d=u[_][F];if(o===0){let I=N[f],R=i.length;i.push((...K)=>(i[R]=at(I,d))(...K)),M.push(I)}else if(o===1)S.push(Be.get(d));else if(o===2)P.push(Te.get(d));else if(o===3)b.push(Oe(d,f)),$.push(f);else throw Error(`Unsupported import type ${L(o)} for "${_}"."${F}"`)}let E={};for(let[a,_]of B)P.push(Te.get(new me({initial:a,maximum:a>_?a:_})));for(let a=0;a{E["l"+a]=_.l,E["u"+a]=_.u,E["o"+a]=_.o};E["A"+a]=_,_.L.push(F),F()}for(let[a,_,F]of U)b.push(F(b,C)),$.push(a);let z=[];for(let[a,_,F]of p)_!==null&&(E["l"+a].set(F,_(b)),F=new Uint8Array),z.push(F);for(let a=0;a(i[_]=Qe(i,M,C,S,z,c,b,E,y,a,_))(...F))}let c=[];for(let[a,_,F]of J){if(a!==112&&a!==111)throw Error("Unsupported element type: "+L(a));S.push(Be.get(new he({element:a===111?"externref":"anyfunc",initial:_,maximum:_>F?_:F})))}for(let[a,_,F]of x){let o=[];for(let f of F)o.push(f===null?null:C(f));if(c.push(o),a!==null&&_!==null){let f=S[a],d=_(b);for(let I of o)f[d++]=I}}for(let[a,_,F]of T)if(_===0)t[a]=te.M(C(F));else if(_===1)t[a]=S[F].S;else if(_===2)t[a]=P[F].S;else if(_===3){let o=new de,f=$[F];Object.defineProperty(o,"value",{get:()=>b[F],set:d=>{b[F]=Oe(d,f)}}),t[a]=o}else throw Error(`Unsupported export type ${L(_)} for "${a}"`);D>=0&&i[D]()}},Te=new WeakMap,Ie=n=>Math.max(-1,Math.min(n,65535))|0,me=class{constructor({initial:l,maximum:u}){if(l=Ie(l),u=Ie(u??1/0),l<0||l>u)throw RangeError();let y=new ArrayBuffer(l<<16),O={S:this,f:y,l:new Uint8Array(y),u:new Int8Array(y),o:new DataView(y),g:l,Me:u,L:[],v(p){let x=this.g,T=this.l;if(p=Ie(p),p<0||this.g+p>this.Me)return-1;if(!p)return x;let A=new ArrayBuffer((this.g+=p)<<16),U=new Uint8Array(A);U.set(T);try{structuredClone(this.f,{transfer:[this.f]})}catch{}this.f=A,this.l=U,this.u=new Int8Array(A),this.o=new DataView(A);for(let Y of this.L)Y();return x}};Te.set(this,O),Object.defineProperty(this,"buffer",{get:()=>O.f}),this.grow=p=>{let x=O.v(p);if(x<0)throw RangeError();return x}}},Be=new WeakMap,he=class{constructor({element:l,initial:u,maximum:y}){let O=l=="anyfunc",p=[];if(!O&&l!=="externref")throw TypeError();p.S=this,p.ae=Math.min(4294967295,y??1/0),p.length=u;for(let x=0;xp.length}),this.get=x=>{if(x>>>=0,x>=p.length)throw RangeError();return O?te.M(p[x]):p[x]},this.set=(x,T)=>{if(x>>>=0,x>=p.length)throw RangeError();p[x]=O?te.h(T):T},this.grow=(x,T)=>{let A=te.w(p,O?te.h(T):T,x);if(A<0)throw RangeError();return A}}};var nt=async n=>new X(n),lt=async n=>new X(await(await n).arrayBuffer()),it=async(n,l)=>{if(n instanceof X)return new le(n,l);let u=new X(n);return{module:u,instance:new le(u,l)}},st=async(n,l)=>{let u=new X(await(await n).arrayBuffer());return{module:u,instance:new le(u,l)}},ot=n=>{if(!ArrayBuffer.isView(n)&&!(n instanceof ArrayBuffer))throw TypeError("Invalid buffer source");try{return new X(n),!0}catch{return!1}},Rt={Global:de,Instance:le,compile:nt,compileStreaming:lt,instantiate:it,instantiateStreaming:st,validate:ot,Memory:me,Module:X,Table:he,CompileError:Q};return Rt});'},955:e=>{e.exports='/*! For license information please see node-rsa.bundle.js.LICENSE.txt */\r\n!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.NODERSA=e():t.NODERSA=e()}(globalThis,(()=>(()=>{var t={6395:t=>{t.exports={newInvalidAsn1Error:function(t){var e=new Error;return e.name="InvalidAsn1Error",e.message=t||"",e}}},5670:(t,e,r)=>{var n=r(6395),i=r(6299),o=r(3319),s=r(1431);for(var a in t.exports={Reader:o,Writer:s},i)i.hasOwnProperty(a)&&(t.exports[a]=i[a]);for(var f in n)n.hasOwnProperty(f)&&(t.exports[f]=n[f])},3319:(t,e,r)=>{var n=r(4529),i=r(4774).Buffer,o=r(6299),s=r(6395).newInvalidAsn1Error;function a(t){if(!t||!i.isBuffer(t))throw new TypeError("data must be a node Buffer");this._buf=t,this._size=t.length,this._len=0,this._offset=0}Object.defineProperty(a.prototype,"length",{enumerable:!0,get:function(){return this._len}}),Object.defineProperty(a.prototype,"offset",{enumerable:!0,get:function(){return this._offset}}),Object.defineProperty(a.prototype,"remain",{get:function(){return this._size-this._offset}}),Object.defineProperty(a.prototype,"buffer",{get:function(){return this._buf.slice(this._offset)}}),a.prototype.readByte=function(t){if(this._size-this._offset<1)return null;var e=255&this._buf[this._offset];return t||(this._offset+=1),e},a.prototype.peek=function(){return this.readByte(!0)},a.prototype.readLength=function(t){if(void 0===t&&(t=this._offset),t>=this._size)return null;var e=255&this._buf[t++];if(null===e)return null;if(128&~e)this._len=e;else{if(0==(e&=127))throw s("Indefinite length not supported");if(e>4)throw s("encoding too long");if(this._size-tthis._size-n)return null;if(this._offset=n,0===this.length)return e?i.alloc(0):"";var a=this._buf.slice(this._offset,this._offset+this.length);return this._offset+=this.length,e?a:a.toString("utf8")},a.prototype.readOID=function(t){t||(t=o.OID);var e=this.readString(t,!0);if(null===e)return null;for(var r=[],n=0,i=0;i4)throw s("Integer too long: "+this.length);if(this.length>this._size-r)return null;this._offset=r;for(var i=this._buf[this._offset],o=0,a=0;a{t.exports={EOC:0,Boolean:1,Integer:2,BitString:3,OctetString:4,Null:5,OID:6,ObjectDescriptor:7,External:8,Real:9,Enumeration:10,PDV:11,Utf8String:12,RelativeOID:13,Sequence:16,Set:17,NumericString:18,PrintableString:19,T61String:20,VideotexString:21,IA5String:22,UTCTime:23,GeneralizedTime:24,GraphicString:25,VisibleString:26,GeneralString:28,UniversalString:29,CharacterString:30,BMPString:31,Constructor:32,Context:128}},1431:(t,e,r)=>{var n=r(4529),i=r(4774).Buffer,o=r(6299),s=r(6395).newInvalidAsn1Error,a={size:1024,growthFactor:8};function f(t){var e,r;e=a,r=t||{},n.ok(e),n.equal(typeof e,"object"),n.ok(r),n.equal(typeof r,"object"),Object.getOwnPropertyNames(e).forEach((function(t){if(!r[t]){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n)}})),t=r,this._buf=i.alloc(t.size||1024),this._size=this._buf.length,this._offset=0,this._options=t,this._seq=[]}Object.defineProperty(f.prototype,"buffer",{get:function(){if(this._seq.length)throw s(this._seq.length+" unended sequence(s)");return this._buf.slice(0,this._offset)}}),f.prototype.writeByte=function(t){if("number"!=typeof t)throw new TypeError("argument must be a Number");this._ensure(1),this._buf[this._offset++]=t},f.prototype.writeInt=function(t,e){if("number"!=typeof t)throw new TypeError("argument must be a Number");"number"!=typeof e&&(e=o.Integer);for(var r=4;(!(4286578688&t)||-8388608==(4286578688&t))&&r>1;)r--,t<<=8;if(r>4)throw s("BER ints cannot be > 0xffffffff");for(this._ensure(2+r),this._buf[this._offset++]=e,this._buf[this._offset++]=r;r-- >0;)this._buf[this._offset++]=(4278190080&t)>>>24,t<<=8},f.prototype.writeNull=function(){this.writeByte(o.Null),this.writeByte(0)},f.prototype.writeEnumeration=function(t,e){if("number"!=typeof t)throw new TypeError("argument must be a Number");return"number"!=typeof e&&(e=o.Enumeration),this.writeInt(t,e)},f.prototype.writeBoolean=function(t,e){if("boolean"!=typeof t)throw new TypeError("argument must be a Boolean");"number"!=typeof e&&(e=o.Boolean),this._ensure(3),this._buf[this._offset++]=e,this._buf[this._offset++]=1,this._buf[this._offset++]=t?255:0},f.prototype.writeString=function(t,e){if("string"!=typeof t)throw new TypeError("argument must be a string (was: "+typeof t+")");"number"!=typeof e&&(e=o.OctetString);var r=i.byteLength(t);this.writeByte(e),this.writeLength(r),r&&(this._ensure(r),this._buf.write(t,this._offset),this._offset+=r)},f.prototype.writeBuffer=function(t,e){if("number"!=typeof e)throw new TypeError("tag must be a number");if(!i.isBuffer(t))throw new TypeError("argument must be a buffer");this.writeByte(e),this.writeLength(t.length),this._ensure(t.length),t.copy(this._buf,this._offset,0,t.length),this._offset+=t.length},f.prototype.writeStringArray=function(t){if(!t instanceof Array)throw new TypeError("argument must be an Array[String]");var e=this;t.forEach((function(t){e.writeString(t)}))},f.prototype.writeOID=function(t,e){if("string"!=typeof t)throw new TypeError("argument must be a string");if("number"!=typeof e&&(e=o.OID),!/^([0-9]+\\.){3,}[0-9]+$/.test(t))throw new Error("argument is not a valid OID string");var r=t.split("."),n=[];n.push(40*parseInt(r[0],10)+parseInt(r[1],10)),r.slice(2).forEach((function(t){!function(t,e){e<128?t.push(e):e<16384?(t.push(e>>>7|128),t.push(127&e)):e<2097152?(t.push(e>>>14|128),t.push(e>>>7&255|128),t.push(127&e)):e<268435456?(t.push(e>>>21|128),t.push(e>>>14&255|128),t.push(e>>>7&255|128),t.push(127&e)):(t.push(e>>>28&255|128),t.push(e>>>21&255|128),t.push(e>>>14&255|128),t.push(e>>>7&255|128),t.push(127&e))}(n,parseInt(t,10))}));var i=this;this._ensure(2+n.length),this.writeByte(e),this.writeLength(n.length),n.forEach((function(t){i.writeByte(t)}))},f.prototype.writeLength=function(t){if("number"!=typeof t)throw new TypeError("argument must be a Number");if(this._ensure(4),t<=127)this._buf[this._offset++]=t;else if(t<=255)this._buf[this._offset++]=129,this._buf[this._offset++]=t;else if(t<=65535)this._buf[this._offset++]=130,this._buf[this._offset++]=t>>8,this._buf[this._offset++]=t;else{if(!(t<=16777215))throw s("Length too long (> 4 bytes)");this._buf[this._offset++]=131,this._buf[this._offset++]=t>>16,this._buf[this._offset++]=t>>8,this._buf[this._offset++]=t}},f.prototype.startSequence=function(t){"number"!=typeof t&&(t=o.Sequence|o.Constructor),this.writeByte(t),this._seq.push(this._offset),this._ensure(3),this._offset+=3},f.prototype.endSequence=function(){var t=this._seq.pop(),e=t+3,r=this._offset-e;if(r<=127)this._shift(e,r,-2),this._buf[t]=r;else if(r<=255)this._shift(e,r,-1),this._buf[t]=129,this._buf[t+1]=r;else if(r<=65535)this._buf[t]=130,this._buf[t+1]=r>>8,this._buf[t+2]=r;else{if(!(r<=16777215))throw s("Sequence too long");this._shift(e,r,1),this._buf[t]=131,this._buf[t+1]=r>>16,this._buf[t+2]=r>>8,this._buf[t+3]=r}},f.prototype._shift=function(t,e,r){n.ok(void 0!==t),n.ok(void 0!==e),n.ok(r),this._buf.copy(this._buf,t+r,t,t+e),this._offset+=r},f.prototype._ensure=function(t){if(n.ok(t),this._size-this._offset{var n=r(5670);t.exports={Ber:n,BerReader:n.Reader,BerWriter:n.Writer}},4529:(t,e,r)=>{"use strict";var n=r(1514)();function i(t,e){if(t===e)return 0;for(var r=t.length,n=e.length,i=0,o=Math.min(r,n);i=0;u--)if(c[u]!==h[u])return!1;for(u=c.length-1;u>=0;u--)if(!S(t[a=c[u]],e[a],r,n))return!1;return!0}(t,e,r,n))}return r?t===e:t==e}function _(t){return"[object Arguments]"==Object.prototype.toString.call(t)}function b(t,e){if(!t||!e)return!1;if("[object RegExp]"==Object.prototype.toString.call(e))return e.test(t);try{if(t instanceof e)return!0}catch(t){}return!Error.isPrototypeOf(e)&&!0===e.call({},t)}function E(t,e,r,n){var i;if("function"!=typeof e)throw new TypeError(\'"block" argument must be a function\');"string"==typeof r&&(n=r,r=null),i=function(t){var e;try{t()}catch(t){e=t}return e}(e),n=(r&&r.name?" ("+r.name+").":".")+(n?" "+n:"."),t&&!i&&v(i,r,"Missing expected exception"+n);var o="string"==typeof n,a=!t&&i&&!r;if((!t&&s.isError(i)&&o&&b(i,r)||a)&&v(i,r,"Got unwanted exception"+n),t&&i&&r&&!b(i,r)||!t&&i)throw i}p.AssertionError=function(t){this.name="AssertionError",this.actual=t.actual,this.expected=t.expected,this.operator=t.operator,t.message?(this.message=t.message,this.generatedMessage=!1):(this.message=g(d(this.actual),128)+" "+this.operator+" "+g(d(this.expected),128),this.generatedMessage=!0);var e=t.stackStartFunction||v;if(Error.captureStackTrace)Error.captureStackTrace(this,e);else{var r=new Error;if(r.stack){var n=r.stack,i=y(e),o=n.indexOf("\\n"+i);if(o>=0){var s=n.indexOf("\\n",o+1);n=n.substring(s+1)}this.stack=n}}},s.inherits(p.AssertionError,Error),p.fail=v,p.ok=m,p.equal=function(t,e,r){t!=e&&v(t,e,r,"==",p.equal)},p.notEqual=function(t,e,r){t==e&&v(t,e,r,"!=",p.notEqual)},p.deepEqual=function(t,e,r){S(t,e,!1)||v(t,e,r,"deepEqual",p.deepEqual)},p.deepStrictEqual=function(t,e,r){S(t,e,!0)||v(t,e,r,"deepStrictEqual",p.deepStrictEqual)},p.notDeepEqual=function(t,e,r){S(t,e,!1)&&v(t,e,r,"notDeepEqual",p.notDeepEqual)},p.notDeepStrictEqual=function t(e,r,n){S(e,r,!0)&&v(e,r,n,"notDeepStrictEqual",t)},p.strictEqual=function(t,e,r){t!==e&&v(t,e,r,"===",p.strictEqual)},p.notStrictEqual=function(t,e,r){t===e&&v(t,e,r,"!==",p.notStrictEqual)},p.throws=function(t,e,r){E(!0,t,e,r)},p.doesNotThrow=function(t,e,r){E(!1,t,e,r)},p.ifError=function(t){if(t)throw t},p.strict=n((function t(e,r){e||v(e,!0,r,"==",t)}),p,{equal:p.strictEqual,deepEqual:p.deepStrictEqual,notEqual:p.notStrictEqual,notDeepEqual:p.notDeepStrictEqual}),p.strict.strict=p.strict;var w=Object.keys||function(t){var e=[];for(var r in t)a.call(t,r)&&e.push(r);return e}},6100:t=>{"function"==typeof Object.create?t.exports=function(t,e){t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}})}:t.exports=function(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}},3845:t=>{t.exports=function(t){return t&&"object"==typeof t&&"function"==typeof t.copy&&"function"==typeof t.fill&&"function"==typeof t.readUInt8}},4591:(t,e,r)=>{var n=r(5606),i=/%[sdj%]/g;e.format=function(t){if(!v(t)){for(var e=[],r=0;r=o)return t;switch(t){case"%s":return String(n[r++]);case"%d":return Number(n[r++]);case"%j":try{return JSON.stringify(n[r++])}catch(t){return"[Circular]"}default:return t}})),f=n[r];r=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),y(r)?n.showHidden=r:r&&e._extend(n,r),m(n.showHidden)&&(n.showHidden=!1),m(n.depth)&&(n.depth=2),m(n.colors)&&(n.colors=!1),m(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=f),c(n,t,n.depth)}function f(t,e){var r=a.styles[e];return r?"["+a.colors[r][0]+"m"+t+"["+a.colors[r][1]+"m":t}function u(t,e){return t}function c(t,r,n){if(t.customInspect&&r&&w(r.inspect)&&r.inspect!==e.inspect&&(!r.constructor||r.constructor.prototype!==r)){var i=r.inspect(n,t);return v(i)||(i=c(t,i,n)),i}var o=function(t,e){if(m(e))return t.stylize("undefined","undefined");if(v(e)){var r="\'"+JSON.stringify(e).replace(/^"|"$/g,"").replace(/\'/g,"\\\\\'").replace(/\\\\"/g,\'"\')+"\'";return t.stylize(r,"string")}return d(e)?t.stylize(""+e,"number"):y(e)?t.stylize(""+e,"boolean"):g(e)?t.stylize("null","null"):void 0}(t,r);if(o)return o;var s=Object.keys(r),a=function(t){var e={};return t.forEach((function(t,r){e[t]=!0})),e}(s);if(t.showHidden&&(s=Object.getOwnPropertyNames(r)),E(r)&&(s.indexOf("message")>=0||s.indexOf("description")>=0))return h(r);if(0===s.length){if(w(r)){var f=r.name?": "+r.name:"";return t.stylize("[Function"+f+"]","special")}if(S(r))return t.stylize(RegExp.prototype.toString.call(r),"regexp");if(b(r))return t.stylize(Date.prototype.toString.call(r),"date");if(E(r))return h(r)}var u,_="",O=!1,B=["{","}"];return l(r)&&(O=!0,B=["[","]"]),w(r)&&(_=" [Function"+(r.name?": "+r.name:"")+"]"),S(r)&&(_=" "+RegExp.prototype.toString.call(r)),b(r)&&(_=" "+Date.prototype.toUTCString.call(r)),E(r)&&(_=" "+h(r)),0!==s.length||O&&0!=r.length?n<0?S(r)?t.stylize(RegExp.prototype.toString.call(r),"regexp"):t.stylize("[Object]","special"):(t.seen.push(r),u=O?function(t,e,r,n,i){for(var o=[],s=0,a=e.length;s60?r[0]+(""===e?"":e+"\\n ")+" "+t.join(",\\n ")+" "+r[1]:r[0]+e+" "+t.join(", ")+" "+r[1]}(u,_,B)):B[0]+_+B[1]}function h(t){return"["+Error.prototype.toString.call(t)+"]"}function p(t,e,r,n,i,o){var s,a,f;if((f=Object.getOwnPropertyDescriptor(e,i)||{value:e[i]}).get?a=f.set?t.stylize("[Getter/Setter]","special"):t.stylize("[Getter]","special"):f.set&&(a=t.stylize("[Setter]","special")),x(n,i)||(s="["+i+"]"),a||(t.seen.indexOf(f.value)<0?(a=g(r)?c(t,f.value,null):c(t,f.value,r-1)).indexOf("\\n")>-1&&(a=o?a.split("\\n").map((function(t){return" "+t})).join("\\n").substr(2):"\\n"+a.split("\\n").map((function(t){return" "+t})).join("\\n")):a=t.stylize("[Circular]","special")),m(s)){if(o&&i.match(/^\\d+$/))return a;(s=JSON.stringify(""+i)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(s=s.substr(1,s.length-2),s=t.stylize(s,"name")):(s=s.replace(/\'/g,"\\\\\'").replace(/\\\\"/g,\'"\').replace(/(^"|"$)/g,"\'"),s=t.stylize(s,"string"))}return s+": "+a}function l(t){return Array.isArray(t)}function y(t){return"boolean"==typeof t}function g(t){return null===t}function d(t){return"number"==typeof t}function v(t){return"string"==typeof t}function m(t){return void 0===t}function S(t){return _(t)&&"[object RegExp]"===O(t)}function _(t){return"object"==typeof t&&null!==t}function b(t){return _(t)&&"[object Date]"===O(t)}function E(t){return _(t)&&("[object Error]"===O(t)||t instanceof Error)}function w(t){return"function"==typeof t}function O(t){return Object.prototype.toString.call(t)}function B(t){return t<10?"0"+t.toString(10):t.toString(10)}e.debuglog=function(t){if(m(o)&&(o=n.env.NODE_DEBUG||""),t=t.toUpperCase(),!s[t])if(new RegExp("\\\\b"+t+"\\\\b","i").test(o)){var r=n.pid;s[t]=function(){var n=e.format.apply(e,arguments);console.error("%s %d: %s",t,r,n)}}else s[t]=function(){};return s[t]},e.inspect=a,a.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},a.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},e.isArray=l,e.isBoolean=y,e.isNull=g,e.isNullOrUndefined=function(t){return null==t},e.isNumber=d,e.isString=v,e.isSymbol=function(t){return"symbol"==typeof t},e.isUndefined=m,e.isRegExp=S,e.isObject=_,e.isDate=b,e.isError=E,e.isFunction=w,e.isPrimitive=function(t){return null===t||"boolean"==typeof t||"number"==typeof t||"string"==typeof t||"symbol"==typeof t||void 0===t},e.isBuffer=r(3845);var A=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function x(t,e){return Object.prototype.hasOwnProperty.call(t,e)}e.log=function(){var t,r;console.log("%s - %s",(r=[B((t=new Date).getHours()),B(t.getMinutes()),B(t.getSeconds())].join(":"),[t.getDate(),A[t.getMonth()],r].join(" ")),e.format.apply(e,arguments))},e.inherits=r(6100),e._extend=function(t,e){if(!e||!_(e))return t;for(var r=Object.keys(e),n=r.length;n--;)t[r[n]]=e[r[n]];return t}},7526:(t,e)=>{"use strict";e.byteLength=function(t){var e=a(t),r=e[0],n=e[1];return 3*(r+n)/4-n},e.toByteArray=function(t){var e,r,o=a(t),s=o[0],f=o[1],u=new i(function(t,e,r){return 3*(e+r)/4-r}(0,s,f)),c=0,h=f>0?s-4:s;for(r=0;r>16&255,u[c++]=e>>8&255,u[c++]=255&e;return 2===f&&(e=n[t.charCodeAt(r)]<<2|n[t.charCodeAt(r+1)]>>4,u[c++]=255&e),1===f&&(e=n[t.charCodeAt(r)]<<10|n[t.charCodeAt(r+1)]<<4|n[t.charCodeAt(r+2)]>>2,u[c++]=e>>8&255,u[c++]=255&e),u},e.fromByteArray=function(t){for(var e,n=t.length,i=n%3,o=[],s=16383,a=0,u=n-i;au?u:a+s));return 1===i?(e=t[n-1],o.push(r[e>>2]+r[e<<4&63]+"==")):2===i&&(e=(t[n-2]<<8)+t[n-1],o.push(r[e>>10]+r[e>>4&63]+r[e<<2&63]+"=")),o.join("")};for(var r=[],n=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0;s<64;++s)r[s]=o[s],n[o.charCodeAt(s)]=s;function a(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function f(t,e,n){for(var i,o,s=[],a=e;a>18&63]+r[o>>12&63]+r[o>>6&63]+r[63&o]);return s.join("")}n["-".charCodeAt(0)]=62,n["_".charCodeAt(0)]=63},8287:(t,e,r)=>{"use strict";var n=r(7526),i=r(251);e.Buffer=a,e.SlowBuffer=function(t){return+t!=t&&(t=0),a.alloc(+t)},e.INSPECT_MAX_BYTES=50;var o=2147483647;function s(t){if(t>o)throw new RangeError(\'The value "\'+t+\'" is invalid for option "size"\');var e=new Uint8Array(t);return e.__proto__=a.prototype,e}function a(t,e,r){if("number"==typeof t){if("string"==typeof e)throw new TypeError(\'The "string" argument must be of type string. Received type number\');return c(t)}return f(t,e,r)}function f(t,e,r){if("string"==typeof t)return function(t,e){if("string"==typeof e&&""!==e||(e="utf8"),!a.isEncoding(e))throw new TypeError("Unknown encoding: "+e);var r=0|l(t,e),n=s(r),i=n.write(t,e);return i!==r&&(n=n.slice(0,i)),n}(t,e);if(ArrayBuffer.isView(t))return h(t);if(null==t)throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t);if(H(t,ArrayBuffer)||t&&H(t.buffer,ArrayBuffer))return function(t,e,r){if(e<0||t.byteLength=o)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+o.toString(16)+" bytes");return 0|t}function l(t,e){if(a.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||H(t,ArrayBuffer))return t.byteLength;if("string"!=typeof t)throw new TypeError(\'The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type \'+typeof t);var r=t.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;for(var i=!1;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return U(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return M(t).length;default:if(i)return n?-1:U(t).length;e=(""+e).toLowerCase(),i=!0}}function y(t,e,r){var n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return T(this,e,r);case"utf8":case"utf-8":return B(this,e,r);case"ascii":return x(this,e,r);case"latin1":case"binary":return P(this,e,r);case"base64":return O(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return I(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function g(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function d(t,e,r,n,i){if(0===t.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),F(r=+r)&&(r=i?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(i)return-1;r=t.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof e&&(e=a.from(e,n)),a.isBuffer(e))return 0===e.length?-1:v(t,e,r,n,i);if("number"==typeof e)return e&=255,"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):v(t,[e],r,n,i);throw new TypeError("val must be string, number or Buffer")}function v(t,e,r,n,i){var o,s=1,a=t.length,f=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;s=2,a/=2,f/=2,r/=2}function u(t,e){return 1===s?t[e]:t.readUInt16BE(e*s)}if(i){var c=-1;for(o=r;oa&&(r=a-f),o=r;o>=0;o--){for(var h=!0,p=0;pi&&(n=i):n=i;var o=e.length;n>o/2&&(n=o/2);for(var s=0;s>8,i=r%256,o.push(i),o.push(n);return o}(e,t.length-r),t,r,n)}function O(t,e,r){return 0===e&&r===t.length?n.fromByteArray(t):n.fromByteArray(t.slice(e,r))}function B(t,e,r){r=Math.min(t.length,r);for(var n=[],i=e;i239?4:u>223?3:u>191?2:1;if(i+h<=r)switch(h){case 1:u<128&&(c=u);break;case 2:128==(192&(o=t[i+1]))&&(f=(31&u)<<6|63&o)>127&&(c=f);break;case 3:o=t[i+1],s=t[i+2],128==(192&o)&&128==(192&s)&&(f=(15&u)<<12|(63&o)<<6|63&s)>2047&&(f<55296||f>57343)&&(c=f);break;case 4:o=t[i+1],s=t[i+2],a=t[i+3],128==(192&o)&&128==(192&s)&&128==(192&a)&&(f=(15&u)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&f<1114112&&(c=f)}null===c?(c=65533,h=1):c>65535&&(c-=65536,n.push(c>>>10&1023|55296),c=56320|1023&c),n.push(c),i+=h}return function(t){var e=t.length;if(e<=A)return String.fromCharCode.apply(String,t);for(var r="",n=0;nr&&(t+=" ... "),""},a.prototype.compare=function(t,e,r,n,i){if(H(t,Uint8Array)&&(t=a.from(t,t.offset,t.byteLength)),!a.isBuffer(t))throw new TypeError(\'The "target" argument must be one of type Buffer or Uint8Array. Received type \'+typeof t);if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),e<0||r>t.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&e>=r)return 0;if(n>=i)return-1;if(e>=r)return 1;if(this===t)return 0;for(var o=(i>>>=0)-(n>>>=0),s=(r>>>=0)-(e>>>=0),f=Math.min(o,s),u=this.slice(n,i),c=t.slice(e,r),h=0;h>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}var i=this.length-e;if((void 0===r||r>i)&&(r=i),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var o=!1;;)switch(n){case"hex":return m(this,t,e,r);case"utf8":case"utf-8":return S(this,t,e,r);case"ascii":return _(this,t,e,r);case"latin1":case"binary":return b(this,t,e,r);case"base64":return E(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return w(this,t,e,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},a.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var A=4096;function x(t,e,r){var n="";r=Math.min(t.length,r);for(var i=e;ii)&&(r=i);for(var o="",s=e;sr)throw new RangeError("Trying to access beyond buffer length")}function D(t,e,r,n,i,o){if(!a.isBuffer(t))throw new TypeError(\'"buffer" argument must be a Buffer instance\');if(e>i||et.length)throw new RangeError("Index out of range")}function R(t,e,r,n,i,o){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function N(t,e,r,n,o){return e=+e,r>>>=0,o||R(t,0,r,4),i.write(t,e,r,n,23,4),r+4}function L(t,e,r,n,o){return e=+e,r>>>=0,o||R(t,0,r,8),i.write(t,e,r,n,52,8),r+8}a.prototype.slice=function(t,e){var r=this.length;(t=~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),(e=void 0===e?r:~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),e>>=0,e>>>=0,r||k(t,e,this.length);for(var n=this[t],i=1,o=0;++o>>=0,e>>>=0,r||k(t,e,this.length);for(var n=this[t+--e],i=1;e>0&&(i*=256);)n+=this[t+--e]*i;return n},a.prototype.readUInt8=function(t,e){return t>>>=0,e||k(t,1,this.length),this[t]},a.prototype.readUInt16LE=function(t,e){return t>>>=0,e||k(t,2,this.length),this[t]|this[t+1]<<8},a.prototype.readUInt16BE=function(t,e){return t>>>=0,e||k(t,2,this.length),this[t]<<8|this[t+1]},a.prototype.readUInt32LE=function(t,e){return t>>>=0,e||k(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},a.prototype.readUInt32BE=function(t,e){return t>>>=0,e||k(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},a.prototype.readIntLE=function(t,e,r){t>>>=0,e>>>=0,r||k(t,e,this.length);for(var n=this[t],i=1,o=0;++o=(i*=128)&&(n-=Math.pow(2,8*e)),n},a.prototype.readIntBE=function(t,e,r){t>>>=0,e>>>=0,r||k(t,e,this.length);for(var n=e,i=1,o=this[t+--n];n>0&&(i*=256);)o+=this[t+--n]*i;return o>=(i*=128)&&(o-=Math.pow(2,8*e)),o},a.prototype.readInt8=function(t,e){return t>>>=0,e||k(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},a.prototype.readInt16LE=function(t,e){t>>>=0,e||k(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},a.prototype.readInt16BE=function(t,e){t>>>=0,e||k(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},a.prototype.readInt32LE=function(t,e){return t>>>=0,e||k(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},a.prototype.readInt32BE=function(t,e){return t>>>=0,e||k(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},a.prototype.readFloatLE=function(t,e){return t>>>=0,e||k(t,4,this.length),i.read(this,t,!0,23,4)},a.prototype.readFloatBE=function(t,e){return t>>>=0,e||k(t,4,this.length),i.read(this,t,!1,23,4)},a.prototype.readDoubleLE=function(t,e){return t>>>=0,e||k(t,8,this.length),i.read(this,t,!0,52,8)},a.prototype.readDoubleBE=function(t,e){return t>>>=0,e||k(t,8,this.length),i.read(this,t,!1,52,8)},a.prototype.writeUIntLE=function(t,e,r,n){t=+t,e>>>=0,r>>>=0,n||D(this,t,e,r,Math.pow(2,8*r)-1,0);var i=1,o=0;for(this[e]=255&t;++o>>=0,r>>>=0,n||D(this,t,e,r,Math.pow(2,8*r)-1,0);var i=r-1,o=1;for(this[e+i]=255&t;--i>=0&&(o*=256);)this[e+i]=t/o&255;return e+r},a.prototype.writeUInt8=function(t,e,r){return t=+t,e>>>=0,r||D(this,t,e,1,255,0),this[e]=255&t,e+1},a.prototype.writeUInt16LE=function(t,e,r){return t=+t,e>>>=0,r||D(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},a.prototype.writeUInt16BE=function(t,e,r){return t=+t,e>>>=0,r||D(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},a.prototype.writeUInt32LE=function(t,e,r){return t=+t,e>>>=0,r||D(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},a.prototype.writeUInt32BE=function(t,e,r){return t=+t,e>>>=0,r||D(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},a.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e>>>=0,!n){var i=Math.pow(2,8*r-1);D(this,t,e,r,i-1,-i)}var o=0,s=1,a=0;for(this[e]=255&t;++o>>=0,!n){var i=Math.pow(2,8*r-1);D(this,t,e,r,i-1,-i)}var o=r-1,s=1,a=0;for(this[e+o]=255&t;--o>=0&&(s*=256);)t<0&&0===a&&0!==this[e+o+1]&&(a=1),this[e+o]=(t/s|0)-a&255;return e+r},a.prototype.writeInt8=function(t,e,r){return t=+t,e>>>=0,r||D(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},a.prototype.writeInt16LE=function(t,e,r){return t=+t,e>>>=0,r||D(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},a.prototype.writeInt16BE=function(t,e,r){return t=+t,e>>>=0,r||D(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},a.prototype.writeInt32LE=function(t,e,r){return t=+t,e>>>=0,r||D(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},a.prototype.writeInt32BE=function(t,e,r){return t=+t,e>>>=0,r||D(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},a.prototype.writeFloatLE=function(t,e,r){return N(this,t,e,!0,r)},a.prototype.writeFloatBE=function(t,e,r){return N(this,t,e,!1,r)},a.prototype.writeDoubleLE=function(t,e,r){return L(this,t,e,!0,r)},a.prototype.writeDoubleBE=function(t,e,r){return L(this,t,e,!1,r)},a.prototype.copy=function(t,e,r,n){if(!a.isBuffer(t))throw new TypeError("argument should be a Buffer");if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-e=0;--o)t[o+e]=this[o+r];else Uint8Array.prototype.set.call(t,this.subarray(r,n),e);return i},a.prototype.fill=function(t,e,r,n){if("string"==typeof t){if("string"==typeof e?(n=e,e=0,r=this.length):"string"==typeof r&&(n=r,r=this.length),void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!a.isEncoding(n))throw new TypeError("Unknown encoding: "+n);if(1===t.length){var i=t.charCodeAt(0);("utf8"===n&&i<128||"latin1"===n)&&(t=i)}}else"number"==typeof t&&(t&=255);if(e<0||this.length>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),"number"==typeof t)for(o=e;o55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===n){(e-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;o.push(r)}else if(r<2048){if((e-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function M(t){return n.toByteArray(function(t){if((t=(t=t.split("=")[0]).trim().replace(C,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function j(t,e,r,n){for(var i=0;i=e.length||i>=t.length);++i)e[i+r]=t[i];return i}function H(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name}function F(t){return t!=t}},8075:(t,e,r)=>{"use strict";var n=r(453),i=r(487),o=i(n("String.prototype.indexOf"));t.exports=function(t,e){var r=n(t,!!e);return"function"==typeof r&&o(t,".prototype.")>-1?i(r):r}},487:(t,e,r)=>{"use strict";var n=r(6743),i=r(453),o=r(6897),s=r(9675),a=i("%Function.prototype.apply%"),f=i("%Function.prototype.call%"),u=i("%Reflect.apply%",!0)||n.call(f,a),c=r(655),h=i("%Math.max%");t.exports=function(t){if("function"!=typeof t)throw new s("a function is required");var e=u(n,f,arguments);return o(e,1+h(0,t.length-(arguments.length-1)),!0)};var p=function(){return u(n,a,arguments)};c?c(t.exports,"apply",{value:p}):t.exports.apply=p},955:function(t,e,r){var n;t.exports=(n=r(9021),r(754),r(4636),r(9506),r(7165),function(){var t=n,e=t.lib.BlockCipher,r=t.algo,i=[],o=[],s=[],a=[],f=[],u=[],c=[],h=[],p=[],l=[];!function(){for(var t=[],e=0;e<256;e++)t[e]=e<128?e<<1:e<<1^283;var r=0,n=0;for(e=0;e<256;e++){var y=n^n<<1^n<<2^n<<3^n<<4;y=y>>>8^255&y^99,i[r]=y,o[y]=r;var g=t[r],d=t[g],v=t[d],m=257*t[y]^16843008*y;s[r]=m<<24|m>>>8,a[r]=m<<16|m>>>16,f[r]=m<<8|m>>>24,u[r]=m,m=16843009*v^65537*d^257*g^16843008*r,c[y]=m<<24|m>>>8,h[y]=m<<16|m>>>16,p[y]=m<<8|m>>>24,l[y]=m,r?(r=g^t[t[t[v^g]]],n^=t[t[n]]):r=n=1}}();var y=[0,1,2,4,8,16,32,64,128,27,54],g=r.AES=e.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var t=this._keyPriorReset=this._key,e=t.words,r=t.sigBytes/4,n=4*((this._nRounds=r+6)+1),o=this._keySchedule=[],s=0;s6&&s%r==4&&(a=i[a>>>24]<<24|i[a>>>16&255]<<16|i[a>>>8&255]<<8|i[255&a]):(a=i[(a=a<<8|a>>>24)>>>24]<<24|i[a>>>16&255]<<16|i[a>>>8&255]<<8|i[255&a],a^=y[s/r|0]<<24),o[s]=o[s-r]^a}for(var f=this._invKeySchedule=[],u=0;u>>24]]^h[i[a>>>16&255]]^p[i[a>>>8&255]]^l[i[255&a]]}},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._keySchedule,s,a,f,u,i)},decryptBlock:function(t,e){var r=t[e+1];t[e+1]=t[e+3],t[e+3]=r,this._doCryptBlock(t,e,this._invKeySchedule,c,h,p,l,o),r=t[e+1],t[e+1]=t[e+3],t[e+3]=r},_doCryptBlock:function(t,e,r,n,i,o,s,a){for(var f=this._nRounds,u=t[e]^r[0],c=t[e+1]^r[1],h=t[e+2]^r[2],p=t[e+3]^r[3],l=4,y=1;y>>24]^i[c>>>16&255]^o[h>>>8&255]^s[255&p]^r[l++],d=n[c>>>24]^i[h>>>16&255]^o[p>>>8&255]^s[255&u]^r[l++],v=n[h>>>24]^i[p>>>16&255]^o[u>>>8&255]^s[255&c]^r[l++],m=n[p>>>24]^i[u>>>16&255]^o[c>>>8&255]^s[255&h]^r[l++];u=g,c=d,h=v,p=m}g=(a[u>>>24]<<24|a[c>>>16&255]<<16|a[h>>>8&255]<<8|a[255&p])^r[l++],d=(a[c>>>24]<<24|a[h>>>16&255]<<16|a[p>>>8&255]<<8|a[255&u])^r[l++],v=(a[h>>>24]<<24|a[p>>>16&255]<<16|a[u>>>8&255]<<8|a[255&c])^r[l++],m=(a[p>>>24]<<24|a[u>>>16&255]<<16|a[c>>>8&255]<<8|a[255&h])^r[l++],t[e]=g,t[e+1]=d,t[e+2]=v,t[e+3]=m},keySize:8});t.AES=e._createHelper(g)}(),n.AES)},7165:function(t,e,r){var n,i,o,s,a,f,u,c,h,p,l,y,g,d,v,m,S,_,b;t.exports=(n=r(9021),r(9506),void(n.lib.Cipher||(i=n,o=i.lib,s=o.Base,a=o.WordArray,f=o.BufferedBlockAlgorithm,u=i.enc,u.Utf8,c=u.Base64,h=i.algo.EvpKDF,p=o.Cipher=f.extend({cfg:s.extend(),createEncryptor:function(t,e){return this.create(this._ENC_XFORM_MODE,t,e)},createDecryptor:function(t,e){return this.create(this._DEC_XFORM_MODE,t,e)},init:function(t,e,r){this.cfg=this.cfg.extend(r),this._xformMode=t,this._key=e,this.reset()},reset:function(){f.reset.call(this),this._doReset()},process:function(t){return this._append(t),this._process()},finalize:function(t){return t&&this._append(t),this._doFinalize()},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(){function t(t){return"string"==typeof t?b:S}return function(e){return{encrypt:function(r,n,i){return t(n).encrypt(e,r,n,i)},decrypt:function(r,n,i){return t(n).decrypt(e,r,n,i)}}}}()}),o.StreamCipher=p.extend({_doFinalize:function(){return this._process(!0)},blockSize:1}),l=i.mode={},y=o.BlockCipherMode=s.extend({createEncryptor:function(t,e){return this.Encryptor.create(t,e)},createDecryptor:function(t,e){return this.Decryptor.create(t,e)},init:function(t,e){this._cipher=t,this._iv=e}}),g=l.CBC=function(){var t=y.extend();function e(t,e,r){var n=this._iv;if(n){var i=n;this._iv=void 0}else i=this._prevBlock;for(var o=0;o>>2];t.sigBytes-=e}},o.BlockCipher=p.extend({cfg:p.cfg.extend({mode:g,padding:d}),reset:function(){p.reset.call(this);var t=this.cfg,e=t.iv,r=t.mode;if(this._xformMode==this._ENC_XFORM_MODE)var n=r.createEncryptor;else n=r.createDecryptor,this._minBufferSize=1;this._mode&&this._mode.__creator==n?this._mode.init(this,e&&e.words):(this._mode=n.call(r,this,e&&e.words),this._mode.__creator=n)},_doProcessBlock:function(t,e){this._mode.processBlock(t,e)},_doFinalize:function(){var t=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){t.pad(this._data,this.blockSize);var e=this._process(!0)}else e=this._process(!0),t.unpad(e);return e},blockSize:4}),v=o.CipherParams=s.extend({init:function(t){this.mixIn(t)},toString:function(t){return(t||this.formatter).stringify(this)}}),m=(i.format={}).OpenSSL={stringify:function(t){var e=t.ciphertext,r=t.salt;if(r)var n=a.create([1398893684,1701076831]).concat(r).concat(e);else n=e;return n.toString(c)},parse:function(t){var e=c.parse(t),r=e.words;if(1398893684==r[0]&&1701076831==r[1]){var n=a.create(r.slice(2,4));r.splice(0,4),e.sigBytes-=16}return v.create({ciphertext:e,salt:n})}},S=o.SerializableCipher=s.extend({cfg:s.extend({format:m}),encrypt:function(t,e,r,n){n=this.cfg.extend(n);var i=t.createEncryptor(r,n),o=i.finalize(e),s=i.cfg;return v.create({ciphertext:o,key:r,iv:s.iv,algorithm:t,mode:s.mode,padding:s.padding,blockSize:t.blockSize,formatter:n.format})},decrypt:function(t,e,r,n){return n=this.cfg.extend(n),e=this._parse(e,n.format),t.createDecryptor(r,n).finalize(e.ciphertext)},_parse:function(t,e){return"string"==typeof t?e.parse(t,this):t}}),_=(i.kdf={}).OpenSSL={execute:function(t,e,r,n){n||(n=a.random(8));var i=h.create({keySize:e+r}).compute(t,n),o=a.create(i.words.slice(e),4*r);return i.sigBytes=4*e,v.create({key:i,iv:o,salt:n})}},b=o.PasswordBasedCipher=S.extend({cfg:S.cfg.extend({kdf:_}),encrypt:function(t,e,r,n){var i=(n=this.cfg.extend(n)).kdf.execute(r,t.keySize,t.ivSize);n.iv=i.iv;var o=S.encrypt.call(this,t,e,i.key,n);return o.mixIn(i),o},decrypt:function(t,e,r,n){n=this.cfg.extend(n),e=this._parse(e,n.format);var i=n.kdf.execute(r,t.keySize,t.ivSize,e.salt);return n.iv=i.iv,S.decrypt.call(this,t,e,i.key,n)}}))))},9021:function(t,e){var r;t.exports=(r=r||function(t,e){var r=Object.create||function(){function t(){}return function(e){var r;return t.prototype=e,r=new t,t.prototype=null,r}}(),n={},i=n.lib={},o=i.Base={extend:function(t){var e=r(this);return t&&e.mixIn(t),e.hasOwnProperty("init")&&this.init!==e.init||(e.init=function(){e.$super.init.apply(this,arguments)}),e.init.prototype=e,e.$super=this,e},create:function(){var t=this.extend();return t.init.apply(t,arguments),t},init:function(){},mixIn:function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);t.hasOwnProperty("toString")&&(this.toString=t.toString)},clone:function(){return this.init.prototype.extend(this)}},s=i.WordArray=o.extend({init:function(t,e){t=this.words=t||[],this.sigBytes=null!=e?e:4*t.length},toString:function(t){return(t||f).stringify(this)},concat:function(t){var e=this.words,r=t.words,n=this.sigBytes,i=t.sigBytes;if(this.clamp(),n%4)for(var o=0;o>>2]>>>24-o%4*8&255;e[n+o>>>2]|=s<<24-(n+o)%4*8}else for(o=0;o>>2]=r[o>>>2];return this.sigBytes+=i,this},clamp:function(){var e=this.words,r=this.sigBytes;e[r>>>2]&=4294967295<<32-r%4*8,e.length=t.ceil(r/4)},clone:function(){var t=o.clone.call(this);return t.words=this.words.slice(0),t},random:function(e){for(var r,n=[],i=function(e){var r=987654321,n=4294967295;return function(){var i=((r=36969*(65535&r)+(r>>16)&n)<<16)+(e=18e3*(65535&e)+(e>>16)&n)&n;return i/=4294967296,(i+=.5)*(t.random()>.5?1:-1)}},o=0;o>>2]>>>24-i%4*8&255;n.push((o>>>4).toString(16)),n.push((15&o).toString(16))}return n.join("")},parse:function(t){for(var e=t.length,r=[],n=0;n>>3]|=parseInt(t.substr(n,2),16)<<24-n%8*4;return new s.init(r,e/2)}},u=a.Latin1={stringify:function(t){for(var e=t.words,r=t.sigBytes,n=[],i=0;i>>2]>>>24-i%4*8&255;n.push(String.fromCharCode(o))}return n.join("")},parse:function(t){for(var e=t.length,r=[],n=0;n>>2]|=(255&t.charCodeAt(n))<<24-n%4*8;return new s.init(r,e)}},c=a.Utf8={stringify:function(t){try{return decodeURIComponent(escape(u.stringify(t)))}catch(t){throw new Error("Malformed UTF-8 data")}},parse:function(t){return u.parse(unescape(encodeURIComponent(t)))}},h=i.BufferedBlockAlgorithm=o.extend({reset:function(){this._data=new s.init,this._nDataBytes=0},_append:function(t){"string"==typeof t&&(t=c.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function(e){var r=this._data,n=r.words,i=r.sigBytes,o=this.blockSize,a=i/(4*o),f=(a=e?t.ceil(a):t.max((0|a)-this._minBufferSize,0))*o,u=t.min(4*f,i);if(f){for(var c=0;c>>2]>>>24-o%4*8&255)<<16|(e[o+1>>>2]>>>24-(o+1)%4*8&255)<<8|e[o+2>>>2]>>>24-(o+2)%4*8&255,a=0;a<4&&o+.75*a>>6*(3-a)&63));var f=n.charAt(64);if(f)for(;i.length%4;)i.push(f);return i.join("")},parse:function(t){var e=t.length,r=this._map,n=this._reverseMap;if(!n){n=this._reverseMap=[];for(var i=0;i>>6-s%4*2;n[i>>>2]|=(a|f)<<24-i%4*8,i++}return o.create(n,i)}(t,e,n)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="},n.enc.Base64)},5503:function(t,e,r){var n;t.exports=(n=r(9021),function(){var t=n,e=t.lib.WordArray,r=t.enc;function i(t){return t<<8&4278255360|t>>>8&16711935}r.Utf16=r.Utf16BE={stringify:function(t){for(var e=t.words,r=t.sigBytes,n=[],i=0;i>>2]>>>16-i%4*8&65535;n.push(String.fromCharCode(o))}return n.join("")},parse:function(t){for(var r=t.length,n=[],i=0;i>>1]|=t.charCodeAt(i)<<16-i%2*16;return e.create(n,2*r)}},r.Utf16LE={stringify:function(t){for(var e=t.words,r=t.sigBytes,n=[],o=0;o>>2]>>>16-o%4*8&65535);n.push(String.fromCharCode(s))}return n.join("")},parse:function(t){for(var r=t.length,n=[],o=0;o>>1]|=i(t.charCodeAt(o)<<16-o%2*16);return e.create(n,2*r)}}}(),n.enc.Utf16)},9506:function(t,e,r){var n,i,o,s,a,f,u,c;t.exports=(c=r(9021),r(5471),r(1025),o=(i=(n=c).lib).Base,s=i.WordArray,f=(a=n.algo).MD5,u=a.EvpKDF=o.extend({cfg:o.extend({keySize:4,hasher:f,iterations:1}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){for(var r=this.cfg,n=r.hasher.create(),i=s.create(),o=i.words,a=r.keySize,f=r.iterations;o.lengthn&&(e=t.finalize(e)),e.clamp();for(var i=this._oKey=e.clone(),s=this._iKey=e.clone(),a=i.words,f=s.words,u=0;u>>2]|=t[i]<<24-i%4*8;e.call(this,n,r)}else e.apply(this,arguments)};r.prototype=t}}(),n.lib.WordArray)},4636:function(t,e,r){var n;t.exports=(n=r(9021),function(t){var e=n,r=e.lib,i=r.WordArray,o=r.Hasher,s=e.algo,a=[];!function(){for(var e=0;e<64;e++)a[e]=4294967296*t.abs(t.sin(e+1))|0}();var f=s.MD5=o.extend({_doReset:function(){this._hash=new i.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(t,e){for(var r=0;r<16;r++){var n=e+r,i=t[n];t[n]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8)}var o=this._hash.words,s=t[e+0],f=t[e+1],l=t[e+2],y=t[e+3],g=t[e+4],d=t[e+5],v=t[e+6],m=t[e+7],S=t[e+8],_=t[e+9],b=t[e+10],E=t[e+11],w=t[e+12],O=t[e+13],B=t[e+14],A=t[e+15],x=o[0],P=o[1],T=o[2],I=o[3];x=u(x,P,T,I,s,7,a[0]),I=u(I,x,P,T,f,12,a[1]),T=u(T,I,x,P,l,17,a[2]),P=u(P,T,I,x,y,22,a[3]),x=u(x,P,T,I,g,7,a[4]),I=u(I,x,P,T,d,12,a[5]),T=u(T,I,x,P,v,17,a[6]),P=u(P,T,I,x,m,22,a[7]),x=u(x,P,T,I,S,7,a[8]),I=u(I,x,P,T,_,12,a[9]),T=u(T,I,x,P,b,17,a[10]),P=u(P,T,I,x,E,22,a[11]),x=u(x,P,T,I,w,7,a[12]),I=u(I,x,P,T,O,12,a[13]),T=u(T,I,x,P,B,17,a[14]),x=c(x,P=u(P,T,I,x,A,22,a[15]),T,I,f,5,a[16]),I=c(I,x,P,T,v,9,a[17]),T=c(T,I,x,P,E,14,a[18]),P=c(P,T,I,x,s,20,a[19]),x=c(x,P,T,I,d,5,a[20]),I=c(I,x,P,T,b,9,a[21]),T=c(T,I,x,P,A,14,a[22]),P=c(P,T,I,x,g,20,a[23]),x=c(x,P,T,I,_,5,a[24]),I=c(I,x,P,T,B,9,a[25]),T=c(T,I,x,P,y,14,a[26]),P=c(P,T,I,x,S,20,a[27]),x=c(x,P,T,I,O,5,a[28]),I=c(I,x,P,T,l,9,a[29]),T=c(T,I,x,P,m,14,a[30]),x=h(x,P=c(P,T,I,x,w,20,a[31]),T,I,d,4,a[32]),I=h(I,x,P,T,S,11,a[33]),T=h(T,I,x,P,E,16,a[34]),P=h(P,T,I,x,B,23,a[35]),x=h(x,P,T,I,f,4,a[36]),I=h(I,x,P,T,g,11,a[37]),T=h(T,I,x,P,m,16,a[38]),P=h(P,T,I,x,b,23,a[39]),x=h(x,P,T,I,O,4,a[40]),I=h(I,x,P,T,s,11,a[41]),T=h(T,I,x,P,y,16,a[42]),P=h(P,T,I,x,v,23,a[43]),x=h(x,P,T,I,_,4,a[44]),I=h(I,x,P,T,w,11,a[45]),T=h(T,I,x,P,A,16,a[46]),x=p(x,P=h(P,T,I,x,l,23,a[47]),T,I,s,6,a[48]),I=p(I,x,P,T,m,10,a[49]),T=p(T,I,x,P,B,15,a[50]),P=p(P,T,I,x,d,21,a[51]),x=p(x,P,T,I,w,6,a[52]),I=p(I,x,P,T,y,10,a[53]),T=p(T,I,x,P,b,15,a[54]),P=p(P,T,I,x,f,21,a[55]),x=p(x,P,T,I,S,6,a[56]),I=p(I,x,P,T,A,10,a[57]),T=p(T,I,x,P,v,15,a[58]),P=p(P,T,I,x,O,21,a[59]),x=p(x,P,T,I,g,6,a[60]),I=p(I,x,P,T,E,10,a[61]),T=p(T,I,x,P,l,15,a[62]),P=p(P,T,I,x,_,21,a[63]),o[0]=o[0]+x|0,o[1]=o[1]+P|0,o[2]=o[2]+T|0,o[3]=o[3]+I|0},_doFinalize:function(){var e=this._data,r=e.words,n=8*this._nDataBytes,i=8*e.sigBytes;r[i>>>5]|=128<<24-i%32;var o=t.floor(n/4294967296),s=n;r[15+(i+64>>>9<<4)]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),r[14+(i+64>>>9<<4)]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),e.sigBytes=4*(r.length+1),this._process();for(var a=this._hash,f=a.words,u=0;u<4;u++){var c=f[u];f[u]=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8)}return a},clone:function(){var t=o.clone.call(this);return t._hash=this._hash.clone(),t}});function u(t,e,r,n,i,o,s){var a=t+(e&r|~e&n)+i+s;return(a<>>32-o)+e}function c(t,e,r,n,i,o,s){var a=t+(e&n|r&~n)+i+s;return(a<>>32-o)+e}function h(t,e,r,n,i,o,s){var a=t+(e^r^n)+i+s;return(a<>>32-o)+e}function p(t,e,r,n,i,o,s){var a=t+(r^(e|~n))+i+s;return(a<>>32-o)+e}e.MD5=o._createHelper(f),e.HmacMD5=o._createHmacHelper(f)}(Math),n.MD5)},2169:function(t,e,r){var n;t.exports=(n=r(9021),r(7165),n.mode.CFB=function(){var t=n.lib.BlockCipherMode.extend();function e(t,e,r,n){var i=this._iv;if(i){var o=i.slice(0);this._iv=void 0}else o=this._prevBlock;n.encryptBlock(o,0);for(var s=0;s>24))t+=1<<24;else{var e=t>>16&255,r=t>>8&255,n=255&t;255===e?(e=0,255===r?(r=0,255===n?n=0:++n):++r):++e,t=0,t+=e<<16,t+=r<<8,t+=n}return t}var r=t.Encryptor=t.extend({processBlock:function(t,r){var n=this._cipher,i=n.blockSize,o=this._iv,s=this._counter;o&&(s=this._counter=o.slice(0),this._iv=void 0),function(t){0===(t[0]=e(t[0]))&&(t[1]=e(t[1]))}(s);var a=s.slice(0);n.encryptBlock(a,0);for(var f=0;f>>2]|=i<<24-o%4*8,t.sigBytes+=i},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},n.pad.Ansix923)},4905:function(t,e,r){var n;t.exports=(n=r(9021),r(7165),n.pad.Iso10126={pad:function(t,e){var r=4*e,i=r-t.sigBytes%r;t.concat(n.lib.WordArray.random(i-1)).concat(n.lib.WordArray.create([i<<24],1))},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},n.pad.Iso10126)},482:function(t,e,r){var n;t.exports=(n=r(9021),r(7165),n.pad.Iso97971={pad:function(t,e){t.concat(n.lib.WordArray.create([2147483648],1)),n.pad.ZeroPadding.pad(t,e)},unpad:function(t){n.pad.ZeroPadding.unpad(t),t.sigBytes--}},n.pad.Iso97971)},8124:function(t,e,r){var n;t.exports=(n=r(9021),r(7165),n.pad.NoPadding={pad:function(){},unpad:function(){}},n.pad.NoPadding)},2155:function(t,e,r){var n;t.exports=(n=r(9021),r(7165),n.pad.ZeroPadding={pad:function(t,e){var r=4*e;t.clamp(),t.sigBytes+=r-(t.sigBytes%r||r)},unpad:function(t){for(var e=t.words,r=t.sigBytes-1;!(e[r>>>2]>>>24-r%4*8&255);)r--;t.sigBytes=r+1}},n.pad.ZeroPadding)},19:function(t,e,r){var n,i,o,s,a,f,u,c,h;t.exports=(h=r(9021),r(5471),r(1025),o=(i=(n=h).lib).Base,s=i.WordArray,f=(a=n.algo).SHA1,u=a.HMAC,c=a.PBKDF2=o.extend({cfg:o.extend({keySize:4,hasher:f,iterations:1}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){for(var r=this.cfg,n=u.create(r.hasher,t),i=s.create(),o=s.create([1]),a=i.words,f=o.words,c=r.keySize,h=r.iterations;a.length>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],n=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];this._b=0;for(var i=0;i<4;i++)f.call(this);for(i=0;i<8;i++)n[i]^=r[i+4&7];if(e){var o=e.words,s=o[0],a=o[1],u=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),c=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),h=u>>>16|4294901760&c,p=c<<16|65535&u;for(n[0]^=u,n[1]^=h,n[2]^=c,n[3]^=p,n[4]^=u,n[5]^=h,n[6]^=c,n[7]^=p,i=0;i<4;i++)f.call(this)}},_doProcessBlock:function(t,e){var r=this._X;f.call(this),i[0]=r[0]^r[5]>>>16^r[3]<<16,i[1]=r[2]^r[7]>>>16^r[5]<<16,i[2]=r[4]^r[1]>>>16^r[7]<<16,i[3]=r[6]^r[3]>>>16^r[1]<<16;for(var n=0;n<4;n++)i[n]=16711935&(i[n]<<8|i[n]>>>24)|4278255360&(i[n]<<24|i[n]>>>8),t[e+n]^=i[n]},blockSize:4,ivSize:2});function f(){for(var t=this._X,e=this._C,r=0;r<8;r++)o[r]=e[r];for(e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0,r=0;r<8;r++){var n=t[r]+e[r],i=65535&n,a=n>>>16,f=((i*i>>>17)+i*a>>>15)+a*a,u=((4294901760&n)*n|0)+((65535&n)*n|0);s[r]=f^u}t[0]=s[0]+(s[7]<<16|s[7]>>>16)+(s[6]<<16|s[6]>>>16)|0,t[1]=s[1]+(s[0]<<8|s[0]>>>24)+s[7]|0,t[2]=s[2]+(s[1]<<16|s[1]>>>16)+(s[0]<<16|s[0]>>>16)|0,t[3]=s[3]+(s[2]<<8|s[2]>>>24)+s[1]|0,t[4]=s[4]+(s[3]<<16|s[3]>>>16)+(s[2]<<16|s[2]>>>16)|0,t[5]=s[5]+(s[4]<<8|s[4]>>>24)+s[3]|0,t[6]=s[6]+(s[5]<<16|s[5]>>>16)+(s[4]<<16|s[4]>>>16)|0,t[7]=s[7]+(s[6]<<8|s[6]>>>24)+s[5]|0}t.RabbitLegacy=e._createHelper(a)}(),n.RabbitLegacy)},6298:function(t,e,r){var n;t.exports=(n=r(9021),r(754),r(4636),r(9506),r(7165),function(){var t=n,e=t.lib.StreamCipher,r=t.algo,i=[],o=[],s=[],a=r.Rabbit=e.extend({_doReset:function(){for(var t=this._key.words,e=this.cfg.iv,r=0;r<4;r++)t[r]=16711935&(t[r]<<8|t[r]>>>24)|4278255360&(t[r]<<24|t[r]>>>8);var n=this._X=[t[0],t[3]<<16|t[2]>>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],i=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];for(this._b=0,r=0;r<4;r++)f.call(this);for(r=0;r<8;r++)i[r]^=n[r+4&7];if(e){var o=e.words,s=o[0],a=o[1],u=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),c=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),h=u>>>16|4294901760&c,p=c<<16|65535&u;for(i[0]^=u,i[1]^=h,i[2]^=c,i[3]^=p,i[4]^=u,i[5]^=h,i[6]^=c,i[7]^=p,r=0;r<4;r++)f.call(this)}},_doProcessBlock:function(t,e){var r=this._X;f.call(this),i[0]=r[0]^r[5]>>>16^r[3]<<16,i[1]=r[2]^r[7]>>>16^r[5]<<16,i[2]=r[4]^r[1]>>>16^r[7]<<16,i[3]=r[6]^r[3]>>>16^r[1]<<16;for(var n=0;n<4;n++)i[n]=16711935&(i[n]<<8|i[n]>>>24)|4278255360&(i[n]<<24|i[n]>>>8),t[e+n]^=i[n]},blockSize:4,ivSize:2});function f(){for(var t=this._X,e=this._C,r=0;r<8;r++)o[r]=e[r];for(e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0,r=0;r<8;r++){var n=t[r]+e[r],i=65535&n,a=n>>>16,f=((i*i>>>17)+i*a>>>15)+a*a,u=((4294901760&n)*n|0)+((65535&n)*n|0);s[r]=f^u}t[0]=s[0]+(s[7]<<16|s[7]>>>16)+(s[6]<<16|s[6]>>>16)|0,t[1]=s[1]+(s[0]<<8|s[0]>>>24)+s[7]|0,t[2]=s[2]+(s[1]<<16|s[1]>>>16)+(s[0]<<16|s[0]>>>16)|0,t[3]=s[3]+(s[2]<<8|s[2]>>>24)+s[1]|0,t[4]=s[4]+(s[3]<<16|s[3]>>>16)+(s[2]<<16|s[2]>>>16)|0,t[5]=s[5]+(s[4]<<8|s[4]>>>24)+s[3]|0,t[6]=s[6]+(s[5]<<16|s[5]>>>16)+(s[4]<<16|s[4]>>>16)|0,t[7]=s[7]+(s[6]<<8|s[6]>>>24)+s[5]|0}t.Rabbit=e._createHelper(a)}(),n.Rabbit)},7193:function(t,e,r){var n;t.exports=(n=r(9021),r(754),r(4636),r(9506),r(7165),function(){var t=n,e=t.lib.StreamCipher,r=t.algo,i=r.RC4=e.extend({_doReset:function(){for(var t=this._key,e=t.words,r=t.sigBytes,n=this._S=[],i=0;i<256;i++)n[i]=i;i=0;for(var o=0;i<256;i++){var s=i%r,a=e[s>>>2]>>>24-s%4*8&255;o=(o+n[i]+a)%256;var f=n[i];n[i]=n[o],n[o]=f}this._i=this._j=0},_doProcessBlock:function(t,e){t[e]^=o.call(this)},keySize:8,ivSize:0});function o(){for(var t=this._S,e=this._i,r=this._j,n=0,i=0;i<4;i++){r=(r+t[e=(e+1)%256])%256;var o=t[e];t[e]=t[r],t[r]=o,n|=t[(t[e]+t[r])%256]<<24-8*i}return this._i=e,this._j=r,n}t.RC4=e._createHelper(i);var s=r.RC4Drop=i.extend({cfg:i.cfg.extend({drop:192}),_doReset:function(){i._doReset.call(this);for(var t=this.cfg.drop;t>0;t--)o.call(this)}});t.RC4Drop=e._createHelper(s)}(),n.RC4)},8056:function(t,e,r){var n;t.exports=(n=r(9021),function(t){var e=n,r=e.lib,i=r.WordArray,o=r.Hasher,s=e.algo,a=i.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),f=i.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),u=i.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),c=i.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),h=i.create([0,1518500249,1859775393,2400959708,2840853838]),p=i.create([1352829926,1548603684,1836072691,2053994217,0]),l=s.RIPEMD160=o.extend({_doReset:function(){this._hash=i.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var r=0;r<16;r++){var n=e+r,i=t[n];t[n]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8)}var o,s,l,_,b,E,w,O,B,A,x,P=this._hash.words,T=h.words,I=p.words,k=a.words,D=f.words,R=u.words,N=c.words;for(E=o=P[0],w=s=P[1],O=l=P[2],B=_=P[3],A=b=P[4],r=0;r<80;r+=1)x=o+t[e+k[r]]|0,x+=r<16?y(s,l,_)+T[0]:r<32?g(s,l,_)+T[1]:r<48?d(s,l,_)+T[2]:r<64?v(s,l,_)+T[3]:m(s,l,_)+T[4],x=(x=S(x|=0,R[r]))+b|0,o=b,b=_,_=S(l,10),l=s,s=x,x=E+t[e+D[r]]|0,x+=r<16?m(w,O,B)+I[0]:r<32?v(w,O,B)+I[1]:r<48?d(w,O,B)+I[2]:r<64?g(w,O,B)+I[3]:y(w,O,B)+I[4],x=(x=S(x|=0,N[r]))+A|0,E=A,A=B,B=S(O,10),O=w,w=x;x=P[1]+l+B|0,P[1]=P[2]+_+A|0,P[2]=P[3]+b+E|0,P[3]=P[4]+o+w|0,P[4]=P[0]+s+O|0,P[0]=x},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,n=8*t.sigBytes;e[n>>>5]|=128<<24-n%32,e[14+(n+64>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t.sigBytes=4*(e.length+1),this._process();for(var i=this._hash,o=i.words,s=0;s<5;s++){var a=o[s];o[s]=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8)}return i},clone:function(){var t=o.clone.call(this);return t._hash=this._hash.clone(),t}});function y(t,e,r){return t^e^r}function g(t,e,r){return t&e|~t&r}function d(t,e,r){return(t|~e)^r}function v(t,e,r){return t&r|e&~r}function m(t,e,r){return t^(e|~r)}function S(t,e){return t<>>32-e}e.RIPEMD160=o._createHelper(l),e.HmacRIPEMD160=o._createHmacHelper(l)}(Math),n.RIPEMD160)},5471:function(t,e,r){var n,i,o,s,a,f,u,c;t.exports=(i=(n=c=r(9021)).lib,o=i.WordArray,s=i.Hasher,a=n.algo,f=[],u=a.SHA1=s.extend({_doReset:function(){this._hash=new o.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var r=this._hash.words,n=r[0],i=r[1],o=r[2],s=r[3],a=r[4],u=0;u<80;u++){if(u<16)f[u]=0|t[e+u];else{var c=f[u-3]^f[u-8]^f[u-14]^f[u-16];f[u]=c<<1|c>>>31}var h=(n<<5|n>>>27)+a+f[u];h+=u<20?1518500249+(i&o|~i&s):u<40?1859775393+(i^o^s):u<60?(i&o|i&s|o&s)-1894007588:(i^o^s)-899497514,a=s,s=o,o=i<<30|i>>>2,i=n,n=h}r[0]=r[0]+n|0,r[1]=r[1]+i|0,r[2]=r[2]+o|0,r[3]=r[3]+s|0,r[4]=r[4]+a|0},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,n=8*t.sigBytes;return e[n>>>5]|=128<<24-n%32,e[14+(n+64>>>9<<4)]=Math.floor(r/4294967296),e[15+(n+64>>>9<<4)]=r,t.sigBytes=4*e.length,this._process(),this._hash},clone:function(){var t=s.clone.call(this);return t._hash=this._hash.clone(),t}}),n.SHA1=s._createHelper(u),n.HmacSHA1=s._createHmacHelper(u),c.SHA1)},6308:function(t,e,r){var n,i,o,s,a,f;t.exports=(f=r(9021),r(3009),i=(n=f).lib.WordArray,o=n.algo,s=o.SHA256,a=o.SHA224=s.extend({_doReset:function(){this._hash=new i.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var t=s._doFinalize.call(this);return t.sigBytes-=4,t}}),n.SHA224=s._createHelper(a),n.HmacSHA224=s._createHmacHelper(a),f.SHA224)},3009:function(t,e,r){var n;t.exports=(n=r(9021),function(t){var e=n,r=e.lib,i=r.WordArray,o=r.Hasher,s=e.algo,a=[],f=[];!function(){function e(e){for(var r=t.sqrt(e),n=2;n<=r;n++)if(!(e%n))return!1;return!0}function r(t){return 4294967296*(t-(0|t))|0}for(var n=2,i=0;i<64;)e(n)&&(i<8&&(a[i]=r(t.pow(n,.5))),f[i]=r(t.pow(n,1/3)),i++),n++}();var u=[],c=s.SHA256=o.extend({_doReset:function(){this._hash=new i.init(a.slice(0))},_doProcessBlock:function(t,e){for(var r=this._hash.words,n=r[0],i=r[1],o=r[2],s=r[3],a=r[4],c=r[5],h=r[6],p=r[7],l=0;l<64;l++){if(l<16)u[l]=0|t[e+l];else{var y=u[l-15],g=(y<<25|y>>>7)^(y<<14|y>>>18)^y>>>3,d=u[l-2],v=(d<<15|d>>>17)^(d<<13|d>>>19)^d>>>10;u[l]=g+u[l-7]+v+u[l-16]}var m=n&i^n&o^i&o,S=(n<<30|n>>>2)^(n<<19|n>>>13)^(n<<10|n>>>22),_=p+((a<<26|a>>>6)^(a<<21|a>>>11)^(a<<7|a>>>25))+(a&c^~a&h)+f[l]+u[l];p=h,h=c,c=a,a=s+_|0,s=o,o=i,i=n,n=_+(S+m)|0}r[0]=r[0]+n|0,r[1]=r[1]+i|0,r[2]=r[2]+o|0,r[3]=r[3]+s|0,r[4]=r[4]+a|0,r[5]=r[5]+c|0,r[6]=r[6]+h|0,r[7]=r[7]+p|0},_doFinalize:function(){var e=this._data,r=e.words,n=8*this._nDataBytes,i=8*e.sigBytes;return r[i>>>5]|=128<<24-i%32,r[14+(i+64>>>9<<4)]=t.floor(n/4294967296),r[15+(i+64>>>9<<4)]=n,e.sigBytes=4*r.length,this._process(),this._hash},clone:function(){var t=o.clone.call(this);return t._hash=this._hash.clone(),t}});e.SHA256=o._createHelper(c),e.HmacSHA256=o._createHmacHelper(c)}(Math),n.SHA256)},5953:function(t,e,r){var n;t.exports=(n=r(9021),r(3240),function(t){var e=n,r=e.lib,i=r.WordArray,o=r.Hasher,s=e.x64.Word,a=e.algo,f=[],u=[],c=[];!function(){for(var t=1,e=0,r=0;r<24;r++){f[t+5*e]=(r+1)*(r+2)/2%64;var n=(2*t+3*e)%5;t=e%5,e=n}for(t=0;t<5;t++)for(e=0;e<5;e++)u[t+5*e]=e+(2*t+3*e)%5*5;for(var i=1,o=0;o<24;o++){for(var a=0,h=0,p=0;p<7;p++){if(1&i){var l=(1<>>24)|4278255360&(o<<24|o>>>8),s=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),(P=r[i]).high^=s,P.low^=o}for(var a=0;a<24;a++){for(var p=0;p<5;p++){for(var l=0,y=0,g=0;g<5;g++)l^=(P=r[p+5*g]).high,y^=P.low;var d=h[p];d.high=l,d.low=y}for(p=0;p<5;p++){var v=h[(p+4)%5],m=h[(p+1)%5],S=m.high,_=m.low;for(l=v.high^(S<<1|_>>>31),y=v.low^(_<<1|S>>>31),g=0;g<5;g++)(P=r[p+5*g]).high^=l,P.low^=y}for(var b=1;b<25;b++){var E=(P=r[b]).high,w=P.low,O=f[b];O<32?(l=E<>>32-O,y=w<>>32-O):(l=w<>>64-O,y=E<>>64-O);var B=h[u[b]];B.high=l,B.low=y}var A=h[0],x=r[0];for(A.high=x.high,A.low=x.low,p=0;p<5;p++)for(g=0;g<5;g++){var P=r[b=p+5*g],T=h[b],I=h[(p+1)%5+5*g],k=h[(p+2)%5+5*g];P.high=T.high^~I.high&k.high,P.low=T.low^~I.low&k.low}P=r[0];var D=c[a];P.high^=D.high,P.low^=D.low}},_doFinalize:function(){var e=this._data,r=e.words,n=(this._nDataBytes,8*e.sigBytes),o=32*this.blockSize;r[n>>>5]|=1<<24-n%32,r[(t.ceil((n+1)/o)*o>>>5)-1]|=128,e.sigBytes=4*r.length,this._process();for(var s=this._state,a=this.cfg.outputLength/8,f=a/8,u=[],c=0;c>>24)|4278255360&(p<<24|p>>>8),l=16711935&(l<<8|l>>>24)|4278255360&(l<<24|l>>>8),u.push(l),u.push(p)}return new i.init(u,a)},clone:function(){for(var t=o.clone.call(this),e=t._state=this._state.slice(0),r=0;r<25;r++)e[r]=e[r].clone();return t}});e.SHA3=o._createHelper(p),e.HmacSHA3=o._createHmacHelper(p)}(Math),n.SHA3)},9557:function(t,e,r){var n,i,o,s,a,f,u,c;t.exports=(c=r(9021),r(3240),r(1380),i=(n=c).x64,o=i.Word,s=i.WordArray,a=n.algo,f=a.SHA512,u=a.SHA384=f.extend({_doReset:function(){this._hash=new s.init([new o.init(3418070365,3238371032),new o.init(1654270250,914150663),new o.init(2438529370,812702999),new o.init(355462360,4144912697),new o.init(1731405415,4290775857),new o.init(2394180231,1750603025),new o.init(3675008525,1694076839),new o.init(1203062813,3204075428)])},_doFinalize:function(){var t=f._doFinalize.call(this);return t.sigBytes-=16,t}}),n.SHA384=f._createHelper(u),n.HmacSHA384=f._createHmacHelper(u),c.SHA384)},1380:function(t,e,r){var n;t.exports=(n=r(9021),r(3240),function(){var t=n,e=t.lib.Hasher,r=t.x64,i=r.Word,o=r.WordArray,s=t.algo;function a(){return i.create.apply(i,arguments)}var f=[a(1116352408,3609767458),a(1899447441,602891725),a(3049323471,3964484399),a(3921009573,2173295548),a(961987163,4081628472),a(1508970993,3053834265),a(2453635748,2937671579),a(2870763221,3664609560),a(3624381080,2734883394),a(310598401,1164996542),a(607225278,1323610764),a(1426881987,3590304994),a(1925078388,4068182383),a(2162078206,991336113),a(2614888103,633803317),a(3248222580,3479774868),a(3835390401,2666613458),a(4022224774,944711139),a(264347078,2341262773),a(604807628,2007800933),a(770255983,1495990901),a(1249150122,1856431235),a(1555081692,3175218132),a(1996064986,2198950837),a(2554220882,3999719339),a(2821834349,766784016),a(2952996808,2566594879),a(3210313671,3203337956),a(3336571891,1034457026),a(3584528711,2466948901),a(113926993,3758326383),a(338241895,168717936),a(666307205,1188179964),a(773529912,1546045734),a(1294757372,1522805485),a(1396182291,2643833823),a(1695183700,2343527390),a(1986661051,1014477480),a(2177026350,1206759142),a(2456956037,344077627),a(2730485921,1290863460),a(2820302411,3158454273),a(3259730800,3505952657),a(3345764771,106217008),a(3516065817,3606008344),a(3600352804,1432725776),a(4094571909,1467031594),a(275423344,851169720),a(430227734,3100823752),a(506948616,1363258195),a(659060556,3750685593),a(883997877,3785050280),a(958139571,3318307427),a(1322822218,3812723403),a(1537002063,2003034995),a(1747873779,3602036899),a(1955562222,1575990012),a(2024104815,1125592928),a(2227730452,2716904306),a(2361852424,442776044),a(2428436474,593698344),a(2756734187,3733110249),a(3204031479,2999351573),a(3329325298,3815920427),a(3391569614,3928383900),a(3515267271,566280711),a(3940187606,3454069534),a(4118630271,4000239992),a(116418474,1914138554),a(174292421,2731055270),a(289380356,3203993006),a(460393269,320620315),a(685471733,587496836),a(852142971,1086792851),a(1017036298,365543100),a(1126000580,2618297676),a(1288033470,3409855158),a(1501505948,4234509866),a(1607167915,987167468),a(1816402316,1246189591)],u=[];!function(){for(var t=0;t<80;t++)u[t]=a()}();var c=s.SHA512=e.extend({_doReset:function(){this._hash=new o.init([new i.init(1779033703,4089235720),new i.init(3144134277,2227873595),new i.init(1013904242,4271175723),new i.init(2773480762,1595750129),new i.init(1359893119,2917565137),new i.init(2600822924,725511199),new i.init(528734635,4215389547),new i.init(1541459225,327033209)])},_doProcessBlock:function(t,e){for(var r=this._hash.words,n=r[0],i=r[1],o=r[2],s=r[3],a=r[4],c=r[5],h=r[6],p=r[7],l=n.high,y=n.low,g=i.high,d=i.low,v=o.high,m=o.low,S=s.high,_=s.low,b=a.high,E=a.low,w=c.high,O=c.low,B=h.high,A=h.low,x=p.high,P=p.low,T=l,I=y,k=g,D=d,R=v,N=m,L=S,C=_,U=b,M=E,j=w,H=O,F=B,z=A,G=x,q=P,$=0;$<80;$++){var K=u[$];if($<16)var W=K.high=0|t[e+2*$],V=K.low=0|t[e+2*$+1];else{var Y=u[$-15],X=Y.high,Z=Y.low,J=(X>>>1|Z<<31)^(X>>>8|Z<<24)^X>>>7,Q=(Z>>>1|X<<31)^(Z>>>8|X<<24)^(Z>>>7|X<<25),tt=u[$-2],et=tt.high,rt=tt.low,nt=(et>>>19|rt<<13)^(et<<3|rt>>>29)^et>>>6,it=(rt>>>19|et<<13)^(rt<<3|et>>>29)^(rt>>>6|et<<26),ot=u[$-7],st=ot.high,at=ot.low,ft=u[$-16],ut=ft.high,ct=ft.low;W=(W=(W=J+st+((V=Q+at)>>>0>>0?1:0))+nt+((V+=it)>>>0>>0?1:0))+ut+((V+=ct)>>>0>>0?1:0),K.high=W,K.low=V}var ht,pt=U&j^~U&F,lt=M&H^~M&z,yt=T&k^T&R^k&R,gt=I&D^I&N^D&N,dt=(T>>>28|I<<4)^(T<<30|I>>>2)^(T<<25|I>>>7),vt=(I>>>28|T<<4)^(I<<30|T>>>2)^(I<<25|T>>>7),mt=(U>>>14|M<<18)^(U>>>18|M<<14)^(U<<23|M>>>9),St=(M>>>14|U<<18)^(M>>>18|U<<14)^(M<<23|U>>>9),_t=f[$],bt=_t.high,Et=_t.low,wt=G+mt+((ht=q+St)>>>0>>0?1:0),Ot=vt+gt;G=F,q=z,F=j,z=H,j=U,H=M,U=L+(wt=(wt=(wt=wt+pt+((ht+=lt)>>>0>>0?1:0))+bt+((ht+=Et)>>>0>>0?1:0))+W+((ht+=V)>>>0>>0?1:0))+((M=C+ht|0)>>>0>>0?1:0)|0,L=R,C=N,R=k,N=D,k=T,D=I,T=wt+(dt+yt+(Ot>>>0>>0?1:0))+((I=ht+Ot|0)>>>0>>0?1:0)|0}y=n.low=y+I,n.high=l+T+(y>>>0>>0?1:0),d=i.low=d+D,i.high=g+k+(d>>>0>>0?1:0),m=o.low=m+N,o.high=v+R+(m>>>0>>0?1:0),_=s.low=_+C,s.high=S+L+(_>>>0>>0?1:0),E=a.low=E+M,a.high=b+U+(E>>>0>>0?1:0),O=c.low=O+H,c.high=w+j+(O>>>0>>0?1:0),A=h.low=A+z,h.high=B+F+(A>>>0>>0?1:0),P=p.low=P+q,p.high=x+G+(P>>>0>>0?1:0)},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,n=8*t.sigBytes;return e[n>>>5]|=128<<24-n%32,e[30+(n+128>>>10<<5)]=Math.floor(r/4294967296),e[31+(n+128>>>10<<5)]=r,t.sigBytes=4*e.length,this._process(),this._hash.toX32()},clone:function(){var t=e.clone.call(this);return t._hash=this._hash.clone(),t},blockSize:32});t.SHA512=e._createHelper(c),t.HmacSHA512=e._createHmacHelper(c)}(),n.SHA512)},7628:function(t,e,r){var n;t.exports=(n=r(9021),r(754),r(4636),r(9506),r(7165),function(){var t=n,e=t.lib,r=e.WordArray,i=e.BlockCipher,o=t.algo,s=[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4],a=[14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32],f=[1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28],u=[{0:8421888,268435456:32768,536870912:8421378,805306368:2,1073741824:512,1342177280:8421890,1610612736:8389122,1879048192:8388608,2147483648:514,2415919104:8389120,2684354560:33280,2952790016:8421376,3221225472:32770,3489660928:8388610,3758096384:0,4026531840:33282,134217728:0,402653184:8421890,671088640:33282,939524096:32768,1207959552:8421888,1476395008:512,1744830464:8421378,2013265920:2,2281701376:8389120,2550136832:33280,2818572288:8421376,3087007744:8389122,3355443200:8388610,3623878656:32770,3892314112:514,4160749568:8388608,1:32768,268435457:2,536870913:8421888,805306369:8388608,1073741825:8421378,1342177281:33280,1610612737:512,1879048193:8389122,2147483649:8421890,2415919105:8421376,2684354561:8388610,2952790017:33282,3221225473:514,3489660929:8389120,3758096385:32770,4026531841:0,134217729:8421890,402653185:8421376,671088641:8388608,939524097:512,1207959553:32768,1476395009:8388610,1744830465:2,2013265921:33282,2281701377:32770,2550136833:8389122,2818572289:514,3087007745:8421888,3355443201:8389120,3623878657:0,3892314113:33280,4160749569:8421378},{0:1074282512,16777216:16384,33554432:524288,50331648:1074266128,67108864:1073741840,83886080:1074282496,100663296:1073758208,117440512:16,134217728:540672,150994944:1073758224,167772160:1073741824,184549376:540688,201326592:524304,218103808:0,234881024:16400,251658240:1074266112,8388608:1073758208,25165824:540688,41943040:16,58720256:1073758224,75497472:1074282512,92274688:1073741824,109051904:524288,125829120:1074266128,142606336:524304,159383552:0,176160768:16384,192937984:1074266112,209715200:1073741840,226492416:540672,243269632:1074282496,260046848:16400,268435456:0,285212672:1074266128,301989888:1073758224,318767104:1074282496,335544320:1074266112,352321536:16,369098752:540688,385875968:16384,402653184:16400,419430400:524288,436207616:524304,452984832:1073741840,469762048:540672,486539264:1073758208,503316480:1073741824,520093696:1074282512,276824064:540688,293601280:524288,310378496:1074266112,327155712:16384,343932928:1073758208,360710144:1074282512,377487360:16,394264576:1073741824,411041792:1074282496,427819008:1073741840,444596224:1073758224,461373440:524304,478150656:0,494927872:16400,511705088:1074266128,528482304:540672},{0:260,1048576:0,2097152:67109120,3145728:65796,4194304:65540,5242880:67108868,6291456:67174660,7340032:67174400,8388608:67108864,9437184:67174656,10485760:65792,11534336:67174404,12582912:67109124,13631488:65536,14680064:4,15728640:256,524288:67174656,1572864:67174404,2621440:0,3670016:67109120,4718592:67108868,5767168:65536,6815744:65540,7864320:260,8912896:4,9961472:256,11010048:67174400,12058624:65796,13107200:65792,14155776:67109124,15204352:67174660,16252928:67108864,16777216:67174656,17825792:65540,18874368:65536,19922944:67109120,20971520:256,22020096:67174660,23068672:67108868,24117248:0,25165824:67109124,26214400:67108864,27262976:4,28311552:65792,29360128:67174400,30408704:260,31457280:65796,32505856:67174404,17301504:67108864,18350080:260,19398656:67174656,20447232:0,21495808:65540,22544384:67109120,23592960:256,24641536:67174404,25690112:65536,26738688:67174660,27787264:65796,28835840:67108868,29884416:67109124,30932992:67174400,31981568:4,33030144:65792},{0:2151682048,65536:2147487808,131072:4198464,196608:2151677952,262144:0,327680:4198400,393216:2147483712,458752:4194368,524288:2147483648,589824:4194304,655360:64,720896:2147487744,786432:2151678016,851968:4160,917504:4096,983040:2151682112,32768:2147487808,98304:64,163840:2151678016,229376:2147487744,294912:4198400,360448:2151682112,425984:0,491520:2151677952,557056:4096,622592:2151682048,688128:4194304,753664:4160,819200:2147483648,884736:4194368,950272:4198464,1015808:2147483712,1048576:4194368,1114112:4198400,1179648:2147483712,1245184:0,1310720:4160,1376256:2151678016,1441792:2151682048,1507328:2147487808,1572864:2151682112,1638400:2147483648,1703936:2151677952,1769472:4198464,1835008:2147487744,1900544:4194304,1966080:64,2031616:4096,1081344:2151677952,1146880:2151682112,1212416:0,1277952:4198400,1343488:4194368,1409024:2147483648,1474560:2147487808,1540096:64,1605632:2147483712,1671168:4096,1736704:2147487744,1802240:2151678016,1867776:4160,1933312:2151682048,1998848:4194304,2064384:4198464},{0:128,4096:17039360,8192:262144,12288:536870912,16384:537133184,20480:16777344,24576:553648256,28672:262272,32768:16777216,36864:537133056,40960:536871040,45056:553910400,49152:553910272,53248:0,57344:17039488,61440:553648128,2048:17039488,6144:553648256,10240:128,14336:17039360,18432:262144,22528:537133184,26624:553910272,30720:536870912,34816:537133056,38912:0,43008:553910400,47104:16777344,51200:536871040,55296:553648128,59392:16777216,63488:262272,65536:262144,69632:128,73728:536870912,77824:553648256,81920:16777344,86016:553910272,90112:537133184,94208:16777216,98304:553910400,102400:553648128,106496:17039360,110592:537133056,114688:262272,118784:536871040,122880:0,126976:17039488,67584:553648256,71680:16777216,75776:17039360,79872:537133184,83968:536870912,88064:17039488,92160:128,96256:553910272,100352:262272,104448:553910400,108544:0,112640:553648128,116736:16777344,120832:262144,124928:537133056,129024:536871040},{0:268435464,256:8192,512:270532608,768:270540808,1024:268443648,1280:2097152,1536:2097160,1792:268435456,2048:0,2304:268443656,2560:2105344,2816:8,3072:270532616,3328:2105352,3584:8200,3840:270540800,128:270532608,384:270540808,640:8,896:2097152,1152:2105352,1408:268435464,1664:268443648,1920:8200,2176:2097160,2432:8192,2688:268443656,2944:270532616,3200:0,3456:270540800,3712:2105344,3968:268435456,4096:268443648,4352:270532616,4608:270540808,4864:8200,5120:2097152,5376:268435456,5632:268435464,5888:2105344,6144:2105352,6400:0,6656:8,6912:270532608,7168:8192,7424:268443656,7680:270540800,7936:2097160,4224:8,4480:2105344,4736:2097152,4992:268435464,5248:268443648,5504:8200,5760:270540808,6016:270532608,6272:270540800,6528:270532616,6784:8192,7040:2105352,7296:2097160,7552:0,7808:268435456,8064:268443656},{0:1048576,16:33555457,32:1024,48:1049601,64:34604033,80:0,96:1,112:34603009,128:33555456,144:1048577,160:33554433,176:34604032,192:34603008,208:1025,224:1049600,240:33554432,8:34603009,24:0,40:33555457,56:34604032,72:1048576,88:33554433,104:33554432,120:1025,136:1049601,152:33555456,168:34603008,184:1048577,200:1024,216:34604033,232:1,248:1049600,256:33554432,272:1048576,288:33555457,304:34603009,320:1048577,336:33555456,352:34604032,368:1049601,384:1025,400:34604033,416:1049600,432:1,448:0,464:34603008,480:33554433,496:1024,264:1049600,280:33555457,296:34603009,312:1,328:33554432,344:1048576,360:1025,376:34604032,392:33554433,408:34603008,424:0,440:34604033,456:1049601,472:1024,488:33555456,504:1048577},{0:134219808,1:131072,2:134217728,3:32,4:131104,5:134350880,6:134350848,7:2048,8:134348800,9:134219776,10:133120,11:134348832,12:2080,13:0,14:134217760,15:133152,2147483648:2048,2147483649:134350880,2147483650:134219808,2147483651:134217728,2147483652:134348800,2147483653:133120,2147483654:133152,2147483655:32,2147483656:134217760,2147483657:2080,2147483658:131104,2147483659:134350848,2147483660:0,2147483661:134348832,2147483662:134219776,2147483663:131072,16:133152,17:134350848,18:32,19:2048,20:134219776,21:134217760,22:134348832,23:131072,24:0,25:131104,26:134348800,27:134219808,28:134350880,29:133120,30:2080,31:134217728,2147483664:131072,2147483665:2048,2147483666:134348832,2147483667:133152,2147483668:32,2147483669:134348800,2147483670:134217728,2147483671:134219808,2147483672:134350880,2147483673:134217760,2147483674:134219776,2147483675:0,2147483676:133120,2147483677:2080,2147483678:131104,2147483679:134350848}],c=[4160749569,528482304,33030144,2064384,129024,8064,504,2147483679],h=o.DES=i.extend({_doReset:function(){for(var t=this._key.words,e=[],r=0;r<56;r++){var n=s[r]-1;e[r]=t[n>>>5]>>>31-n%32&1}for(var i=this._subKeys=[],o=0;o<16;o++){var u=i[o]=[],c=f[o];for(r=0;r<24;r++)u[r/6|0]|=e[(a[r]-1+c)%28]<<31-r%6,u[4+(r/6|0)]|=e[28+(a[r+24]-1+c)%28]<<31-r%6;for(u[0]=u[0]<<1|u[0]>>>31,r=1;r<7;r++)u[r]=u[r]>>>4*(r-1)+3;u[7]=u[7]<<5|u[7]>>>27}var h=this._invSubKeys=[];for(r=0;r<16;r++)h[r]=i[15-r]},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._subKeys)},decryptBlock:function(t,e){this._doCryptBlock(t,e,this._invSubKeys)},_doCryptBlock:function(t,e,r){this._lBlock=t[e],this._rBlock=t[e+1],p.call(this,4,252645135),p.call(this,16,65535),l.call(this,2,858993459),l.call(this,8,16711935),p.call(this,1,1431655765);for(var n=0;n<16;n++){for(var i=r[n],o=this._lBlock,s=this._rBlock,a=0,f=0;f<8;f++)a|=u[f][((s^i[f])&c[f])>>>0];this._lBlock=s,this._rBlock=o^a}var h=this._lBlock;this._lBlock=this._rBlock,this._rBlock=h,p.call(this,1,1431655765),l.call(this,8,16711935),l.call(this,2,858993459),p.call(this,16,65535),p.call(this,4,252645135),t[e]=this._lBlock,t[e+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2});function p(t,e){var r=(this._lBlock>>>t^this._rBlock)&e;this._rBlock^=r,this._lBlock^=r<>>t^this._lBlock)&e;this._lBlock^=r,this._rBlock^=r<{"use strict";var n=r(655),i=r(8068),o=r(9675),s=r(5795);t.exports=function(t,e,r){if(!t||"object"!=typeof t&&"function"!=typeof t)throw new o("`obj` must be an object or a function`");if("string"!=typeof e&&"symbol"!=typeof e)throw new o("`property` must be a string or a symbol`");if(arguments.length>3&&"boolean"!=typeof arguments[3]&&null!==arguments[3])throw new o("`nonEnumerable`, if provided, must be a boolean or null");if(arguments.length>4&&"boolean"!=typeof arguments[4]&&null!==arguments[4])throw new o("`nonWritable`, if provided, must be a boolean or null");if(arguments.length>5&&"boolean"!=typeof arguments[5]&&null!==arguments[5])throw new o("`nonConfigurable`, if provided, must be a boolean or null");if(arguments.length>6&&"boolean"!=typeof arguments[6])throw new o("`loose`, if provided, must be a boolean");var a=arguments.length>3?arguments[3]:null,f=arguments.length>4?arguments[4]:null,u=arguments.length>5?arguments[5]:null,c=arguments.length>6&&arguments[6],h=!!s&&s(t,e);if(n)n(t,e,{configurable:null===u&&h?h.configurable:!u,enumerable:null===a&&h?h.enumerable:!a,value:r,writable:null===f&&h?h.writable:!f});else{if(!c&&(a||f||u))throw new i("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.");t[e]=r}}},655:(t,e,r)=>{"use strict";var n=r(453)("%Object.defineProperty%",!0)||!1;if(n)try{n({},"a",{value:1})}catch(t){n=!1}t.exports=n},1237:t=>{"use strict";t.exports=EvalError},9383:t=>{"use strict";t.exports=Error},9290:t=>{"use strict";t.exports=RangeError},9538:t=>{"use strict";t.exports=ReferenceError},8068:t=>{"use strict";t.exports=SyntaxError},9675:t=>{"use strict";t.exports=TypeError},5345:t=>{"use strict";t.exports=URIError},9353:t=>{"use strict";var e=Object.prototype.toString,r=Math.max,n=function(t,e){for(var r=[],n=0;n{"use strict";var n=r(9353);t.exports=Function.prototype.bind||n},453:(t,e,r)=>{"use strict";var n,i=r(9383),o=r(1237),s=r(9290),a=r(9538),f=r(8068),u=r(9675),c=r(5345),h=Function,p=function(t){try{return h(\'"use strict"; return (\'+t+").constructor;")()}catch(t){}},l=Object.getOwnPropertyDescriptor;if(l)try{l({},"")}catch(t){l=null}var y=function(){throw new u},g=l?function(){try{return y}catch(t){try{return l(arguments,"callee").get}catch(t){return y}}}():y,d=r(4039)(),v=r(24)(),m=Object.getPrototypeOf||(v?function(t){return t.__proto__}:null),S={},_="undefined"!=typeof Uint8Array&&m?m(Uint8Array):n,b={__proto__:null,"%AggregateError%":"undefined"==typeof AggregateError?n:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"==typeof ArrayBuffer?n:ArrayBuffer,"%ArrayIteratorPrototype%":d&&m?m([][Symbol.iterator]()):n,"%AsyncFromSyncIteratorPrototype%":n,"%AsyncFunction%":S,"%AsyncGenerator%":S,"%AsyncGeneratorFunction%":S,"%AsyncIteratorPrototype%":S,"%Atomics%":"undefined"==typeof Atomics?n:Atomics,"%BigInt%":"undefined"==typeof BigInt?n:BigInt,"%BigInt64Array%":"undefined"==typeof BigInt64Array?n:BigInt64Array,"%BigUint64Array%":"undefined"==typeof BigUint64Array?n:BigUint64Array,"%Boolean%":Boolean,"%DataView%":"undefined"==typeof DataView?n:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":i,"%eval%":eval,"%EvalError%":o,"%Float32Array%":"undefined"==typeof Float32Array?n:Float32Array,"%Float64Array%":"undefined"==typeof Float64Array?n:Float64Array,"%FinalizationRegistry%":"undefined"==typeof FinalizationRegistry?n:FinalizationRegistry,"%Function%":h,"%GeneratorFunction%":S,"%Int8Array%":"undefined"==typeof Int8Array?n:Int8Array,"%Int16Array%":"undefined"==typeof Int16Array?n:Int16Array,"%Int32Array%":"undefined"==typeof Int32Array?n:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":d&&m?m(m([][Symbol.iterator]())):n,"%JSON%":"object"==typeof JSON?JSON:n,"%Map%":"undefined"==typeof Map?n:Map,"%MapIteratorPrototype%":"undefined"!=typeof Map&&d&&m?m((new Map)[Symbol.iterator]()):n,"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"==typeof Promise?n:Promise,"%Proxy%":"undefined"==typeof Proxy?n:Proxy,"%RangeError%":s,"%ReferenceError%":a,"%Reflect%":"undefined"==typeof Reflect?n:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"==typeof Set?n:Set,"%SetIteratorPrototype%":"undefined"!=typeof Set&&d&&m?m((new Set)[Symbol.iterator]()):n,"%SharedArrayBuffer%":"undefined"==typeof SharedArrayBuffer?n:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":d&&m?m(""[Symbol.iterator]()):n,"%Symbol%":d?Symbol:n,"%SyntaxError%":f,"%ThrowTypeError%":g,"%TypedArray%":_,"%TypeError%":u,"%Uint8Array%":"undefined"==typeof Uint8Array?n:Uint8Array,"%Uint8ClampedArray%":"undefined"==typeof Uint8ClampedArray?n:Uint8ClampedArray,"%Uint16Array%":"undefined"==typeof Uint16Array?n:Uint16Array,"%Uint32Array%":"undefined"==typeof Uint32Array?n:Uint32Array,"%URIError%":c,"%WeakMap%":"undefined"==typeof WeakMap?n:WeakMap,"%WeakRef%":"undefined"==typeof WeakRef?n:WeakRef,"%WeakSet%":"undefined"==typeof WeakSet?n:WeakSet};if(m)try{null.error}catch(t){var E=m(m(t));b["%Error.prototype%"]=E}var w=function t(e){var r;if("%AsyncFunction%"===e)r=p("async function () {}");else if("%GeneratorFunction%"===e)r=p("function* () {}");else if("%AsyncGeneratorFunction%"===e)r=p("async function* () {}");else if("%AsyncGenerator%"===e){var n=t("%AsyncGeneratorFunction%");n&&(r=n.prototype)}else if("%AsyncIteratorPrototype%"===e){var i=t("%AsyncGenerator%");i&&m&&(r=m(i.prototype))}return b[e]=r,r},O={__proto__:null,"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},B=r(6743),A=r(9957),x=B.call(Function.call,Array.prototype.concat),P=B.call(Function.apply,Array.prototype.splice),T=B.call(Function.call,String.prototype.replace),I=B.call(Function.call,String.prototype.slice),k=B.call(Function.call,RegExp.prototype.exec),D=/[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|(["\'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g,R=/\\\\(\\\\)?/g,N=function(t,e){var r,n=t;if(A(O,n)&&(n="%"+(r=O[n])[0]+"%"),A(b,n)){var i=b[n];if(i===S&&(i=w(n)),void 0===i&&!e)throw new u("intrinsic "+t+" exists, but is not available. Please file an issue!");return{alias:r,name:n,value:i}}throw new f("intrinsic "+t+" does not exist!")};t.exports=function(t,e){if("string"!=typeof t||0===t.length)throw new u("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!=typeof e)throw new u(\'"allowMissing" argument must be a boolean\');if(null===k(/^%?[^%]*%?$/,t))throw new f("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var r=function(t){var e=I(t,0,1),r=I(t,-1);if("%"===e&&"%"!==r)throw new f("invalid intrinsic syntax, expected closing `%`");if("%"===r&&"%"!==e)throw new f("invalid intrinsic syntax, expected opening `%`");var n=[];return T(t,D,(function(t,e,r,i){n[n.length]=r?T(i,R,"$1"):e||t})),n}(t),n=r.length>0?r[0]:"",i=N("%"+n+"%",e),o=i.name,s=i.value,a=!1,c=i.alias;c&&(n=c[0],P(r,x([0,1],c)));for(var h=1,p=!0;h=r.length){var v=l(s,y);s=(p=!!v)&&"get"in v&&!("originalValue"in v.get)?v.get:s[y]}else p=A(s,y),s=s[y];p&&!a&&(b[o]=s)}}return s}},5795:(t,e,r)=>{"use strict";var n=r(453)("%Object.getOwnPropertyDescriptor%",!0);if(n)try{n([],"length")}catch(t){n=null}t.exports=n},592:(t,e,r)=>{"use strict";var n=r(655),i=function(){return!!n};i.hasArrayLengthDefineBug=function(){if(!n)return null;try{return 1!==n([],"length",{value:1}).length}catch(t){return!0}},t.exports=i},24:t=>{"use strict";var e={__proto__:null,foo:{}},r=Object;t.exports=function(){return{__proto__:e}.foo===e.foo&&!(e instanceof r)}},4039:(t,e,r)=>{"use strict";var n="undefined"!=typeof Symbol&&Symbol,i=r(1333);t.exports=function(){return"function"==typeof n&&"function"==typeof Symbol&&"symbol"==typeof n("foo")&&"symbol"==typeof Symbol("bar")&&i()}},1333:t=>{"use strict";t.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var t={},e=Symbol("test"),r=Object(e);if("string"==typeof e)return!1;if("[object Symbol]"!==Object.prototype.toString.call(e))return!1;if("[object Symbol]"!==Object.prototype.toString.call(r))return!1;for(e in t[e]=42,t)return!1;if("function"==typeof Object.keys&&0!==Object.keys(t).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(t).length)return!1;var n=Object.getOwnPropertySymbols(t);if(1!==n.length||n[0]!==e)return!1;if(!Object.prototype.propertyIsEnumerable.call(t,e))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var i=Object.getOwnPropertyDescriptor(t,e);if(42!==i.value||!0!==i.enumerable)return!1}return!0}},9957:(t,e,r)=>{"use strict";var n=Function.prototype.call,i=Object.prototype.hasOwnProperty,o=r(6743);t.exports=o.call(n,i)},251:(t,e)=>{e.read=function(t,e,r,n,i){var o,s,a=8*i-n-1,f=(1<>1,c=-7,h=r?i-1:0,p=r?-1:1,l=t[e+h];for(h+=p,o=l&(1<<-c)-1,l>>=-c,c+=a;c>0;o=256*o+t[e+h],h+=p,c-=8);for(s=o&(1<<-c)-1,o>>=-c,c+=n;c>0;s=256*s+t[e+h],h+=p,c-=8);if(0===o)o=1-u;else{if(o===f)return s?NaN:1/0*(l?-1:1);s+=Math.pow(2,n),o-=u}return(l?-1:1)*s*Math.pow(2,o-n)},e.write=function(t,e,r,n,i,o){var s,a,f,u=8*o-i-1,c=(1<>1,p=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,l=n?0:o-1,y=n?1:-1,g=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=c):(s=Math.floor(Math.log(e)/Math.LN2),e*(f=Math.pow(2,-s))<1&&(s--,f*=2),(e+=s+h>=1?p/f:p*Math.pow(2,1-h))*f>=2&&(s++,f/=2),s+h>=c?(a=0,s=c):s+h>=1?(a=(e*f-1)*Math.pow(2,i),s+=h):(a=e*Math.pow(2,h-1)*Math.pow(2,i),s=0));i>=8;t[r+l]=255&a,l+=y,a/=256,i-=8);for(s=s<0;t[r+l]=255&s,l+=y,s/=256,u-=8);t[r+l-y]|=128*g}},3229:(t,e,r)=>{var n=r(8287).Buffer,i=r(7449),o=r(5682),s=(r(3200),r(3100).Ber,r(8226)._),a=r(8226),f=r(1768),u=r(7460);void 0===i.RSA_NO_PADDING&&(i.RSA_NO_PADDING=3),t.exports=function(){var t={node10:["md4","md5","ripemd160","sha1","sha224","sha256","sha384","sha512"],node:["md4","md5","ripemd160","sha1","sha224","sha256","sha384","sha512"],iojs:["md4","md5","ripemd160","sha1","sha224","sha256","sha384","sha512"],browser:["md5","ripemd160","sha1","sha256","sha512"]},e="pkcs1_oaep",r="pkcs1",i={private:"pkcs1-private-pem","private-der":"pkcs1-private-der",public:"pkcs8-public-pem","public-der":"pkcs8-public-der"};function c(t,i,f){if(!(this instanceof c))return new c(t,i,f);s.isObject(i)&&(f=i,i=void 0),this.$options={signingScheme:r,signingSchemeOptions:{hash:"sha256",saltLength:null},encryptionScheme:e,encryptionSchemeOptions:{hash:"sha1",label:null},environment:a.detectEnvironment(),rsaUtils:this},this.keyPair=new o.Key,this.$cache={},n.isBuffer(t)||s.isString(t)?this.importKey(t,i):s.isObject(t)&&this.generateKeyPair(t.b,t.e),this.setOptions(f)}return c.prototype.setOptions=function(n){if((n=n||{}).environment&&(this.$options.environment=n.environment),n.signingScheme){if(s.isString(n.signingScheme)){var i=n.signingScheme.toLowerCase().split("-");1==i.length?t.node.indexOf(i[0])>-1?(this.$options.signingSchemeOptions={hash:i[0]},this.$options.signingScheme=r):(this.$options.signingScheme=i[0],this.$options.signingSchemeOptions={hash:null}):(this.$options.signingSchemeOptions={hash:i[1]},this.$options.signingScheme=i[0])}else s.isObject(n.signingScheme)&&(this.$options.signingScheme=n.signingScheme.scheme||r,this.$options.signingSchemeOptions=s.omit(n.signingScheme,"scheme"));if(!f.isSignature(this.$options.signingScheme))throw Error("Unsupported signing scheme");if(this.$options.signingSchemeOptions.hash&&-1===t[this.$options.environment].indexOf(this.$options.signingSchemeOptions.hash))throw Error("Unsupported hashing algorithm for "+this.$options.environment+" environment")}if(n.encryptionScheme){if(s.isString(n.encryptionScheme)?(this.$options.encryptionScheme=n.encryptionScheme.toLowerCase(),this.$options.encryptionSchemeOptions={}):s.isObject(n.encryptionScheme)&&(this.$options.encryptionScheme=n.encryptionScheme.scheme||e,this.$options.encryptionSchemeOptions=s.omit(n.encryptionScheme,"scheme")),!f.isEncryption(this.$options.encryptionScheme))throw Error("Unsupported encryption scheme");if(this.$options.encryptionSchemeOptions.hash&&-1===t[this.$options.environment].indexOf(this.$options.encryptionSchemeOptions.hash))throw Error("Unsupported hashing algorithm for "+this.$options.environment+" environment")}this.keyPair.setOptions(this.$options)},c.prototype.generateKeyPair=function(t,e){if(e=e||65537,(t=t||2048)%8!=0)throw Error("Key size must be a multiple of 8.");return this.keyPair.generate(t,e.toString(16)),this.$cache={},this},c.prototype.importKey=function(t,e){if(!t)throw Error("Empty key given");if(e&&(e=i[e]||e),!u.detectAndImport(this.keyPair,t,e)&&void 0===e)throw Error("Key format must be specified");return this.$cache={},this},c.prototype.exportKey=function(t){return t=i[t=t||"private"]||t,this.$cache[t]||(this.$cache[t]=u.detectAndExport(this.keyPair,t)),this.$cache[t]},c.prototype.isPrivate=function(){return this.keyPair.isPrivate()},c.prototype.isPublic=function(t){return this.keyPair.isPublic(t)},c.prototype.isEmpty=function(t){return!(this.keyPair.n||this.keyPair.e||this.keyPair.d)},c.prototype.encrypt=function(t,e,r){return this.$$encryptKey(!1,t,e,r)},c.prototype.decrypt=function(t,e){return this.$$decryptKey(!1,t,e)},c.prototype.encryptPrivate=function(t,e,r){return this.$$encryptKey(!0,t,e,r)},c.prototype.decryptPublic=function(t,e){return this.$$decryptKey(!0,t,e)},c.prototype.$$encryptKey=function(t,e,r,n){try{var i=this.keyPair.encrypt(this.$getDataForEncrypt(e,n),t);return"buffer"!=r&&r?i.toString(r):i}catch(t){throw Error("Error during encryption. Original error: "+t)}},c.prototype.$$decryptKey=function(t,e,r){try{e=s.isString(e)?n.from(e,"base64"):e;var i=this.keyPair.decrypt(e,t);if(null===i)throw Error("Key decrypt method returns null.");return this.$getDecryptedData(i,r)}catch(t){throw Error("Error during decryption (probably incorrect key). Original error: "+t)}},c.prototype.sign=function(t,e,r){if(!this.isPrivate())throw Error("This is not private key");var n=this.keyPair.sign(this.$getDataForEncrypt(t,r));return e&&"buffer"!=e&&(n=n.toString(e)),n},c.prototype.verify=function(t,e,r,n){if(!this.isPublic())throw Error("This is not public key");return n=n&&"buffer"!=n?n:null,this.keyPair.verify(this.$getDataForEncrypt(t,r),e,n)},c.prototype.getKeySize=function(){return this.keyPair.keySize},c.prototype.getMaxMessageSize=function(){return this.keyPair.maxMessageLength},c.prototype.$getDataForEncrypt=function(t,e){if(s.isString(t)||s.isNumber(t))return n.from(""+t,e||"utf8");if(n.isBuffer(t))return t;if(s.isObject(t))return n.from(JSON.stringify(t));throw Error("Unexpected data type")},c.prototype.$getDecryptedData=function(t,e){return"buffer"==(e=e||"buffer")?t:"json"==e?JSON.parse(t.toString()):t.toString(e)},c}()},4538:(t,e,r)=>{var n=r(3200);t.exports={getEngine:function(t,e){var i=r(7469);return"node"===e.environment&&"function"==typeof n.publicEncrypt&&"function"==typeof n.privateDecrypt&&(i="function"==typeof n.privateEncrypt&&"function"==typeof n.publicDecrypt?r(2418):r(1957)),i(t,e)}}},2418:(t,e,r)=>{var n=r(3200),i=r(7449),o=r(1768);t.exports=function(t,e){var r=o.pkcs1.makeScheme(t,e);return{encrypt:function(t,o){var s;if(o)return s=i.RSA_PKCS1_PADDING,e.encryptionSchemeOptions&&e.encryptionSchemeOptions.padding&&(s=e.encryptionSchemeOptions.padding),n.privateEncrypt({key:e.rsaUtils.exportKey("private"),padding:s},t);s=i.RSA_PKCS1_OAEP_PADDING,"pkcs1"===e.encryptionScheme&&(s=i.RSA_PKCS1_PADDING),e.encryptionSchemeOptions&&e.encryptionSchemeOptions.padding&&(s=e.encryptionSchemeOptions.padding);var a=t;return s===i.RSA_NO_PADDING&&(a=r.pkcs0pad(t)),n.publicEncrypt({key:e.rsaUtils.exportKey("public"),padding:s},a)},decrypt:function(t,o){var s;if(o)return s=i.RSA_PKCS1_PADDING,e.encryptionSchemeOptions&&e.encryptionSchemeOptions.padding&&(s=e.encryptionSchemeOptions.padding),n.publicDecrypt({key:e.rsaUtils.exportKey("public"),padding:s},t);s=i.RSA_PKCS1_OAEP_PADDING,"pkcs1"===e.encryptionScheme&&(s=i.RSA_PKCS1_PADDING),e.encryptionSchemeOptions&&e.encryptionSchemeOptions.padding&&(s=e.encryptionSchemeOptions.padding);var a=n.privateDecrypt({key:e.rsaUtils.exportKey("private"),padding:s},t);return s===i.RSA_NO_PADDING?r.pkcs0unpad(a):a}}}},7469:(t,e,r)=>{var n=r(1973),i=r(1768);t.exports=function(t,e){var r=i.pkcs1.makeScheme(t,e);return{encrypt:function(e,i){var o,s;return i?(o=new n(r.encPad(e,{type:1})),s=t.$doPrivate(o)):(o=new n(t.encryptionScheme.encPad(e)),s=t.$doPublic(o)),s.toBuffer(t.encryptedDataLength)},decrypt:function(e,i){var o,s=new n(e);return i?(o=t.$doPublic(s),r.encUnPad(o.toBuffer(t.encryptedDataLength),{type:1})):(o=t.$doPrivate(s),t.encryptionScheme.encUnPad(o.toBuffer(t.encryptedDataLength)))}}}},1957:(t,e,r)=>{var n=r(3200),i=r(7449),o=r(1768);t.exports=function(t,e){var s=r(7469)(t,e),a=o.pkcs1.makeScheme(t,e);return{encrypt:function(t,r){if(r)return s.encrypt(t,r);var o=i.RSA_PKCS1_OAEP_PADDING;"pkcs1"===e.encryptionScheme&&(o=i.RSA_PKCS1_PADDING),e.encryptionSchemeOptions&&e.encryptionSchemeOptions.padding&&(o=e.encryptionSchemeOptions.padding);var f=t;return o===i.RSA_NO_PADDING&&(f=a.pkcs0pad(t)),n.publicEncrypt({key:e.rsaUtils.exportKey("public"),padding:o},f)},decrypt:function(t,r){if(r)return s.decrypt(t,r);var o=i.RSA_PKCS1_OAEP_PADDING;"pkcs1"===e.encryptionScheme&&(o=i.RSA_PKCS1_PADDING),e.encryptionSchemeOptions&&e.encryptionSchemeOptions.padding&&(o=e.encryptionSchemeOptions.padding);var f=n.privateDecrypt({key:e.rsaUtils.exportKey("private"),padding:o},t);return o===i.RSA_NO_PADDING?a.pkcs0unpad(f):f}}}},3374:(t,e,r)=>{r(8226)._,r(8226),t.exports={privateExport:function(t,e){return{n:t.n.toBuffer(),e:t.e,d:t.d.toBuffer(),p:t.p.toBuffer(),q:t.q.toBuffer(),dmp1:t.dmp1.toBuffer(),dmq1:t.dmq1.toBuffer(),coeff:t.coeff.toBuffer()}},privateImport:function(t,e,r){if(!(e.n&&e.e&&e.d&&e.p&&e.q&&e.dmp1&&e.dmq1&&e.coeff))throw Error("Invalid key data");t.setPrivate(e.n,e.e,e.d,e.p,e.q,e.dmp1,e.dmq1,e.coeff)},publicExport:function(t,e){return{n:t.n.toBuffer(),e:t.e}},publicImport:function(t,e,r){if(!e.n||!e.e)throw Error("Invalid key data");t.setPublic(e.n,e.e)},autoImport:function(e,r){return!(!r.n||!r.e||(r.d&&r.p&&r.q&&r.dmp1&&r.dmq1&&r.coeff?(t.exports.privateImport(e,r),0):(t.exports.publicImport(e,r),0)))}}},7460:(t,e,r)=>{function n(t){t=t.split("-");for(var e="private",r={type:"default"},n=1;n{var n=r(8287).Buffer,i=r(8226)._,o=r(8226),s=r(1973);const a="-----BEGIN OPENSSH PRIVATE KEY-----",f="-----END OPENSSH PRIVATE KEY-----";function u(t){const e=t.buf.readInt32BE(t.off);t.off+=4;const r=t.buf.slice(t.off,t.off+e);return t.off+=e,r}function c(t,e){t.buf.writeInt32BE(e.byteLength,t.off),t.off+=4,t.off+=e.copy(t.buf,t.off)}t.exports={privateExport:function(t,e){const r=t.n.toBuffer();let i=n.alloc(4);for(i.writeUInt32BE(t.e,0);0===i[0];)i=i.slice(1);const s=t.d.toBuffer(),u=t.coeff.toBuffer(),h=t.p.toBuffer(),p=t.q.toBuffer();let l;l=void 0!==t.sshcomment?n.from(t.sshcomment):n.from([]);const y=15+i.byteLength+4+r.byteLength,g=23+r.byteLength+4+i.byteLength+4+s.byteLength+4+u.byteLength+4+h.byteLength+4+p.byteLength+4+l.byteLength;let d=43+y+4+g;d+=8*Math.ceil(g/8)-g;const v=n.alloc(d),m={buf:v,off:0};v.write("openssh-key-v1","utf8"),v.writeUInt8(0,14),m.off+=15,c(m,n.from("none")),c(m,n.from("none")),c(m,n.from("")),m.off=m.buf.writeUInt32BE(1,m.off),m.off=m.buf.writeUInt32BE(y,m.off),c(m,n.from("ssh-rsa")),c(m,i),c(m,r),m.off=m.buf.writeUInt32BE(d-47-y,m.off),m.off+=8,c(m,n.from("ssh-rsa")),c(m,r),c(m,i),c(m,s),c(m,u),c(m,h),c(m,p),c(m,l);let S=1;for(;m.off{var n=r(8287).Buffer,i=r(3100).Ber,o=r(8226)._,s=r(8226);const a="-----BEGIN RSA PRIVATE KEY-----",f="-----END RSA PRIVATE KEY-----",u="-----BEGIN RSA PUBLIC KEY-----",c="-----END RSA PUBLIC KEY-----";t.exports={privateExport:function(t,e){e=e||{};var r=t.n.toBuffer(),n=t.d.toBuffer(),o=t.p.toBuffer(),u=t.q.toBuffer(),c=t.dmp1.toBuffer(),h=t.dmq1.toBuffer(),p=t.coeff.toBuffer(),l=r.length+n.length+o.length+u.length+c.length+h.length+p.length+512,y=new i.Writer({size:l});return y.startSequence(),y.writeInt(0),y.writeBuffer(r,2),y.writeInt(t.e),y.writeBuffer(n,2),y.writeBuffer(o,2),y.writeBuffer(u,2),y.writeBuffer(c,2),y.writeBuffer(h,2),y.writeBuffer(p,2),y.endSequence(),"der"===e.type?y.buffer:a+"\\n"+s.linebrk(y.buffer.toString("base64"),64)+"\\n"+f},privateImport:function(t,e,r){var u;if("der"!==(r=r||{}).type){if(n.isBuffer(e)&&(e=e.toString("utf8")),!o.isString(e))throw Error("Unsupported key format");var c=s.trimSurroundingText(e,a,f).replace(/\\s+|\\n\\r|\\n|\\r$/gm,"");u=n.from(c,"base64")}else{if(!n.isBuffer(e))throw Error("Unsupported key format");u=e}var h=new i.Reader(u);h.readSequence(),h.readString(2,!0),t.setPrivate(h.readString(2,!0),h.readString(2,!0),h.readString(2,!0),h.readString(2,!0),h.readString(2,!0),h.readString(2,!0),h.readString(2,!0),h.readString(2,!0))},publicExport:function(t,e){e=e||{};var r=t.n.toBuffer(),n=r.length+512,o=new i.Writer({size:n});return o.startSequence(),o.writeBuffer(r,2),o.writeInt(t.e),o.endSequence(),"der"===e.type?o.buffer:u+"\\n"+s.linebrk(o.buffer.toString("base64"),64)+"\\n"+c},publicImport:function(t,e,r){var a;if("der"!==(r=r||{}).type){if(n.isBuffer(e)&&(e=e.toString("utf8")),o.isString(e)){var f=s.trimSurroundingText(e,u,c).replace(/\\s+|\\n\\r|\\n|\\r$/gm,"");a=n.from(f,"base64")}}else{if(!n.isBuffer(e))throw Error("Unsupported key format");a=e}var h=new i.Reader(a);h.readSequence(),t.setPublic(h.readString(2,!0),h.readString(2,!0))},autoImport:function(e,r){return/^[\\S\\s]*-----BEGIN RSA PRIVATE KEY-----\\s*(?=(([A-Za-z0-9+/=]+\\s*)+))\\1-----END RSA PRIVATE KEY-----[\\S\\s]*$/g.test(r)?(t.exports.privateImport(e,r),!0):!!/^[\\S\\s]*-----BEGIN RSA PUBLIC KEY-----\\s*(?=(([A-Za-z0-9+/=]+\\s*)+))\\1-----END RSA PUBLIC KEY-----[\\S\\s]*$/g.test(r)&&(t.exports.publicImport(e,r),!0)}}},8573:(t,e,r)=>{var n=r(8287).Buffer,i=r(3100).Ber,o=r(8226)._,s="1.2.840.113549.1.1.1",a=r(8226);const f="-----BEGIN PRIVATE KEY-----",u="-----END PRIVATE KEY-----",c="-----BEGIN PUBLIC KEY-----",h="-----END PUBLIC KEY-----";t.exports={privateExport:function(t,e){e=e||{};var r=t.n.toBuffer(),n=t.d.toBuffer(),o=t.p.toBuffer(),c=t.q.toBuffer(),h=t.dmp1.toBuffer(),p=t.dmq1.toBuffer(),l=t.coeff.toBuffer(),y=r.length+n.length+o.length+c.length+h.length+p.length+l.length+512,g=new i.Writer({size:y});g.startSequence(),g.writeInt(0),g.writeBuffer(r,2),g.writeInt(t.e),g.writeBuffer(n,2),g.writeBuffer(o,2),g.writeBuffer(c,2),g.writeBuffer(h,2),g.writeBuffer(p,2),g.writeBuffer(l,2),g.endSequence();var d=new i.Writer({size:y});return d.startSequence(),d.writeInt(0),d.startSequence(),d.writeOID(s),d.writeNull(),d.endSequence(),d.writeBuffer(g.buffer,4),d.endSequence(),"der"===e.type?d.buffer:f+"\\n"+a.linebrk(d.buffer.toString("base64"),64)+"\\n"+u},privateImport:function(t,e,r){var c;if("der"!==(r=r||{}).type){if(n.isBuffer(e)&&(e=e.toString("utf8")),!o.isString(e))throw Error("Unsupported key format");var h=a.trimSurroundingText(e,f,u).replace("-----END PRIVATE KEY-----","").replace(/\\s+|\\n\\r|\\n|\\r$/gm,"");c=n.from(h,"base64")}else{if(!n.isBuffer(e))throw Error("Unsupported key format");c=e}var p=new i.Reader(c);if(p.readSequence(),p.readInt(0),new i.Reader(p.readString(48,!0)).readOID(6,!0)!==s)throw Error("Invalid Public key format");var l=new i.Reader(p.readString(4,!0));l.readSequence(),l.readString(2,!0),t.setPrivate(l.readString(2,!0),l.readString(2,!0),l.readString(2,!0),l.readString(2,!0),l.readString(2,!0),l.readString(2,!0),l.readString(2,!0),l.readString(2,!0))},publicExport:function(t,e){e=e||{};var r=t.n.toBuffer(),n=r.length+512,o=new i.Writer({size:n});o.writeByte(0),o.startSequence(),o.writeBuffer(r,2),o.writeInt(t.e),o.endSequence();var f=new i.Writer({size:n});return f.startSequence(),f.startSequence(),f.writeOID(s),f.writeNull(),f.endSequence(),f.writeBuffer(o.buffer,3),f.endSequence(),"der"===e.type?f.buffer:c+"\\n"+a.linebrk(f.buffer.toString("base64"),64)+"\\n"+h},publicImport:function(t,e,r){var f;if("der"!==(r=r||{}).type){if(n.isBuffer(e)&&(e=e.toString("utf8")),o.isString(e)){var u=a.trimSurroundingText(e,c,h).replace(/\\s+|\\n\\r|\\n|\\r$/gm,"");f=n.from(u,"base64")}}else{if(!n.isBuffer(e))throw Error("Unsupported key format");f=e}var p=new i.Reader(f);if(p.readSequence(),new i.Reader(p.readString(48,!0)).readOID(6,!0)!==s)throw Error("Invalid Public key format");var l=new i.Reader(p.readString(3,!0));l.readByte(),l.readSequence(),t.setPublic(l.readString(2,!0),l.readString(2,!0))},autoImport:function(e,r){return/^[\\S\\s]*-----BEGIN PRIVATE KEY-----\\s*(?=(([A-Za-z0-9+/=]+\\s*)+))\\1-----END PRIVATE KEY-----[\\S\\s]*$/g.test(r)?(t.exports.privateImport(e,r),!0):!!/^[\\S\\s]*-----BEGIN PUBLIC KEY-----\\s*(?=(([A-Za-z0-9+/=]+\\s*)+))\\1-----END PUBLIC KEY-----[\\S\\s]*$/g.test(r)&&(t.exports.publicImport(e,r),!0)}}},1973:(t,e,r)=>{var n=r(8287).Buffer,i=r(3200),o=r(8226)._;function s(t,e){null!=t&&("number"==typeof t?this.fromNumber(t,e):n.isBuffer(t)?this.fromBuffer(t):null==e&&"string"!=typeof t?this.fromByteArray(t):this.fromString(t,e))}function a(){return new s(null)}s.prototype.am=function(t,e,r,n,i,o){for(var s=16383&e,a=e>>14;--o>=0;){var f=16383&this[t],u=this[t++]>>14,c=a*f+u*s;i=((f=s*f+((16383&c)<<14)+r[n]+i)>>28)+(c>>14)+a*u,r[n++]=268435455&f}return i},s.prototype.DB=28,s.prototype.DM=268435455,s.prototype.DV=1<<28,s.prototype.FV=Math.pow(2,52),s.prototype.F1=24,s.prototype.F2=4;var f,u,c=new Array;for(f="0".charCodeAt(0),u=0;u<=9;++u)c[f++]=u;for(f="a".charCodeAt(0),u=10;u<36;++u)c[f++]=u;for(f="A".charCodeAt(0),u=10;u<36;++u)c[f++]=u;function h(t){return"0123456789abcdefghijklmnopqrstuvwxyz".charAt(t)}function p(t,e){var r=c[t.charCodeAt(e)];return null==r?-1:r}function l(t){var e=a();return e.fromInt(t),e}function y(t){var e,r=1;return 0!=(e=t>>>16)&&(t=e,r+=16),0!=(e=t>>8)&&(t=e,r+=8),0!=(e=t>>4)&&(t=e,r+=4),0!=(e=t>>2)&&(t=e,r+=2),0!=(e=t>>1)&&(t=e,r+=1),r}function g(t){this.m=t}function d(t){this.m=t,this.mp=t.invDigit(),this.mpl=32767&this.mp,this.mph=this.mp>>15,this.um=(1<>=16,e+=16),255&t||(t>>=8,e+=8),15&t||(t>>=4,e+=4),3&t||(t>>=2,e+=2),1&t||++e,e}function E(t){for(var e=0;0!=t;)t&=t-1,++e;return e}function w(){}function O(t){return t}function B(t){this.r2=a(),this.q3=a(),s.ONE.dlShiftTo(2*t.t,this.r2),this.mu=this.r2.divide(t),this.m=t}g.prototype.convert=function(t){return t.s<0||t.compareTo(this.m)>=0?t.mod(this.m):t},g.prototype.revert=function(t){return t},g.prototype.reduce=function(t){t.divRemTo(this.m,null,t)},g.prototype.mulTo=function(t,e,r){t.multiplyTo(e,r),this.reduce(r)},g.prototype.sqrTo=function(t,e){t.squareTo(e),this.reduce(e)},d.prototype.convert=function(t){var e=a();return t.abs().dlShiftTo(this.m.t,e),e.divRemTo(this.m,null,e),t.s<0&&e.compareTo(s.ZERO)>0&&this.m.subTo(e,e),e},d.prototype.revert=function(t){var e=a();return t.copyTo(e),this.reduce(e),e},d.prototype.reduce=function(t){for(;t.t<=this.mt2;)t[t.t++]=0;for(var e=0;e>15)*this.mpl&this.um)<<15)&t.DM;for(t[r=e+this.m.t]+=this.m.am(0,n,t,e,0,this.m.t);t[r]>=t.DV;)t[r]-=t.DV,t[++r]++}t.clamp(),t.drShiftTo(this.m.t,t),t.compareTo(this.m)>=0&&t.subTo(this.m,t)},d.prototype.mulTo=function(t,e,r){t.multiplyTo(e,r),this.reduce(r)},d.prototype.sqrTo=function(t,e){t.squareTo(e),this.reduce(e)},w.prototype.convert=O,w.prototype.revert=O,w.prototype.mulTo=function(t,e,r){t.multiplyTo(e,r)},w.prototype.sqrTo=function(t,e){t.squareTo(e)},B.prototype.convert=function(t){if(t.s<0||t.t>2*this.m.t)return t.mod(this.m);if(t.compareTo(this.m)<0)return t;var e=a();return t.copyTo(e),this.reduce(e),e},B.prototype.revert=function(t){return t},B.prototype.reduce=function(t){for(t.drShiftTo(this.m.t-1,this.r2),t.t>this.m.t+1&&(t.t=this.m.t+1,t.clamp()),this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3),this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);t.compareTo(this.r2)<0;)t.dAddOffset(1,this.m.t+1);for(t.subTo(this.r2,t);t.compareTo(this.m)>=0;)t.subTo(this.m,t)},B.prototype.mulTo=function(t,e,r){t.multiplyTo(e,r),this.reduce(r)},B.prototype.sqrTo=function(t,e){t.squareTo(e),this.reduce(e)};var A=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997],x=(1<<26)/A[A.length-1];s.prototype.copyTo=function(t){for(var e=this.t-1;e>=0;--e)t[e]=this[e];t.t=this.t,t.s=this.s},s.prototype.fromInt=function(t){this.t=1,this.s=t<0?-1:0,t>0?this[0]=t:t<-1?this[0]=t+DV:this.t=0},s.prototype.fromString=function(t,e,r){var n;switch(e){case 2:n=1;break;case 4:n=2;break;case 8:n=3;break;case 16:n=4;break;case 32:n=5;break;case 256:n=8;break;default:return void this.fromRadix(t,e)}this.t=0,this.s=0;for(var i=t.length,o=!1,a=0;--i>=0;){var f=8==n?255&t[i]:p(t,i);f<0?"-"==t.charAt(i)&&(o=!0):(o=!1,0===a?this[this.t++]=f:a+n>this.DB?(this[this.t-1]|=(f&(1<>this.DB-a):this[this.t-1]|=f<=this.DB&&(a-=this.DB))}!r&&8==n&&128&t[0]&&(this.s=-1,a>0&&(this[this.t-1]|=(1<0&&this[this.t-1]==t;)--this.t},s.prototype.dlShiftTo=function(t,e){var r;for(r=this.t-1;r>=0;--r)e[r+t]=this[r];for(r=t-1;r>=0;--r)e[r]=0;e.t=this.t+t,e.s=this.s},s.prototype.drShiftTo=function(t,e){for(var r=t;r=0;--r)e[r+s+1]=this[r]>>i|a,a=(this[r]&o)<=0;--r)e[r]=0;e[s]=a,e.t=this.t+s+1,e.s=this.s,e.clamp()},s.prototype.rShiftTo=function(t,e){e.s=this.s;var r=Math.floor(t/this.DB);if(r>=this.t)e.t=0;else{var n=t%this.DB,i=this.DB-n,o=(1<>n;for(var s=r+1;s>n;n>0&&(e[this.t-r-1]|=(this.s&o)<>=this.DB;if(t.t>=this.DB;n+=this.s}else{for(n+=this.s;r>=this.DB;n-=t.s}e.s=n<0?-1:0,n<-1?e[r++]=this.DV+n:n>0&&(e[r++]=n),e.t=r,e.clamp()},s.prototype.multiplyTo=function(t,e){var r=this.abs(),n=t.abs(),i=r.t;for(e.t=i+n.t;--i>=0;)e[i]=0;for(i=0;i=0;)t[r]=0;for(r=0;r=e.DV&&(t[r+e.t]-=e.DV,t[r+e.t+1]=1)}t.t>0&&(t[t.t-1]+=e.am(r,e[r],t,2*r,0,1)),t.s=0,t.clamp()},s.prototype.divRemTo=function(t,e,r){var n=t.abs();if(!(n.t<=0)){var i=this.abs();if(i.t0?(n.lShiftTo(c,o),i.lShiftTo(c,r)):(n.copyTo(o),i.copyTo(r));var h=o.t,p=o[h-1];if(0!==p){var l=p*(1<1?o[h-2]>>this.F2:0),g=this.FV/l,d=(1<=0&&(r[r.t++]=1,r.subTo(_,r)),s.ONE.dlShiftTo(h,_),_.subTo(o,o);o.t=0;){var b=r[--m]==p?this.DM:Math.floor(r[m]*g+(r[m-1]+v)*d);if((r[m]+=o.am(0,b,r,S,0,h))0&&r.rShiftTo(c,r),f<0&&s.ZERO.subTo(r,r)}}},s.prototype.invDigit=function(){if(this.t<1)return 0;var t=this[0];if(!(1&t))return 0;var e=3&t;return(e=(e=(e=(e=e*(2-(15&t)*e)&15)*(2-(255&t)*e)&255)*(2-((65535&t)*e&65535))&65535)*(2-t*e%this.DV)%this.DV)>0?this.DV-e:-e},s.prototype.isEven=function(){return 0===(this.t>0?1&this[0]:this.s)},s.prototype.exp=function(t,e){if(t>4294967295||t<1)return s.ONE;var r=a(),n=a(),i=e.convert(this),o=y(t)-1;for(i.copyTo(r);--o>=0;)if(e.sqrTo(r,n),(t&1<0)e.mulTo(n,i,r);else{var f=r;r=n,n=f}return e.revert(r)},s.prototype.chunkSize=function(t){return Math.floor(Math.LN2*this.DB/Math.log(t))},s.prototype.toRadix=function(t){if(null==t&&(t=10),0===this.signum()||t<2||t>36)return"0";var e=this.chunkSize(t),r=Math.pow(t,e),n=l(r),i=a(),o=a(),s="";for(this.divRemTo(n,i,o);i.signum()>0;)s=(r+o.intValue()).toString(t).substr(1)+s,i.divRemTo(n,i,o);return o.intValue().toString(t)+s},s.prototype.fromRadix=function(t,e){this.fromInt(0),null==e&&(e=10);for(var r=this.chunkSize(e),n=Math.pow(e,r),i=!1,o=0,a=0,f=0;f=r&&(this.dMultiply(n),this.dAddOffset(a,0),o=0,a=0))}o>0&&(this.dMultiply(Math.pow(e,o)),this.dAddOffset(a,0)),i&&s.ZERO.subTo(this,this)},s.prototype.fromNumber=function(t,e){if("number"==typeof e)if(t<2)this.fromInt(1);else for(this.fromNumber(t),this.testBit(t-1)||this.bitwiseTo(s.ONE.shiftLeft(t-1),m,this),this.isEven()&&this.dAddOffset(1,0);!this.isProbablePrime(e);)this.dAddOffset(2,0),this.bitLength()>t&&this.subTo(s.ONE.shiftLeft(t-1),this);else{var r=i.randomBytes(1+(t>>3)),n=7&t;n>0?r[0]&=(1<>=this.DB;if(t.t>=this.DB;n+=this.s}else{for(n+=this.s;r>=this.DB;n+=t.s}e.s=n<0?-1:0,n>0?e[r++]=n:n<-1&&(e[r++]=this.DV+n),e.t=r,e.clamp()},s.prototype.dMultiply=function(t){this[this.t]=this.am(0,t-1,this,0,0,this.t),++this.t,this.clamp()},s.prototype.dAddOffset=function(t,e){if(0!==t){for(;this.t<=e;)this[this.t++]=0;for(this[e]+=t;this[e]>=this.DV;)this[e]-=this.DV,++e>=this.t&&(this[this.t++]=0),++this[e]}},s.prototype.multiplyLowerTo=function(t,e,r){var n,i=Math.min(this.t+t.t,e);for(r.s=0,r.t=i;i>0;)r[--i]=0;for(n=r.t-this.t;i=0;)r[n]=0;for(n=Math.max(e-this.t,0);n0)if(0===e)r=this[0]%t;else for(var n=this.t-1;n>=0;--n)r=(e*r+this[n])%t;return r},s.prototype.millerRabin=function(t){var e=this.subtract(s.ONE),r=e.getLowestSetBit();if(r<=0)return!1;var n=e.shiftRight(r);(t=t+1>>1)>A.length&&(t=A.length);for(var i=a(),o=0;o0)for(a>a)>0&&(i=!0,o=h(r));s>=0;)a>(a+=this.DB-e)):(r=this[s]>>(a-=e)&n,a<=0&&(a+=this.DB,--s)),r>0&&(i=!0),i&&(o+=h(r));return i?o:"0"},s.prototype.negate=function(){var t=a();return s.ZERO.subTo(this,t),t},s.prototype.abs=function(){return this.s<0?this.negate():this},s.prototype.compareTo=function(t){var e=this.s-t.s;if(0!=e)return e;var r=this.t;if(0!=(e=r-t.t))return this.s<0?-e:e;for(;--r>=0;)if(0!=(e=this[r]-t[r]))return e;return 0},s.prototype.bitLength=function(){return this.t<=0?0:this.DB*(this.t-1)+y(this[this.t-1]^this.s&this.DM)},s.prototype.mod=function(t){var e=a();return this.abs().divRemTo(t,null,e),this.s<0&&e.compareTo(s.ZERO)>0&&t.subTo(e,e),e},s.prototype.modPowInt=function(t,e){var r;return r=t<256||e.isEven()?new g(e):new d(e),this.exp(t,r)},s.prototype.clone=function(){var t=a();return this.copyTo(t),t},s.prototype.intValue=function(){if(this.s<0){if(1==this.t)return this[0]-this.DV;if(0===this.t)return-1}else{if(1==this.t)return this[0];if(0===this.t)return 0}return(this[1]&(1<<32-this.DB)-1)<>24},s.prototype.shortValue=function(){return 0==this.t?this.s:this[0]<<16>>16},s.prototype.signum=function(){return this.s<0?-1:this.t<=0||1==this.t&&this[0]<=0?0:1},s.prototype.toByteArray=function(){var t=this.t,e=new Array;e[0]=this.s;var r,n=this.DB-t*this.DB%8,i=0;if(t-- >0)for(n>n)!=(this.s&this.DM)>>n&&(e[i++]=r|this.s<=0;)n<8?(r=(this[t]&(1<>(n+=this.DB-8)):(r=this[t]>>(n-=8)&255,n<=0&&(n+=this.DB,--t)),128&r&&(r|=-256),0===i&&(128&this.s)!=(128&r)&&++i,(i>0||r!=this.s)&&(e[i++]=r);return e},s.prototype.toBuffer=function(t){var e=n.from(this.toByteArray());if(!0===t&&0===e[0])e=e.slice(1);else if(o.isNumber(t)){if(e.length>t){for(var r=0;r0?this:t},s.prototype.and=function(t){var e=a();return this.bitwiseTo(t,v,e),e},s.prototype.or=function(t){var e=a();return this.bitwiseTo(t,m,e),e},s.prototype.xor=function(t){var e=a();return this.bitwiseTo(t,S,e),e},s.prototype.andNot=function(t){var e=a();return this.bitwiseTo(t,_,e),e},s.prototype.not=function(){for(var t=a(),e=0;e=this.t?0!=this.s:!!(this[e]&1<1){var h=a();for(n.sqrTo(s[1],h);f<=c;)s[f]=a(),n.mulTo(h,s[f-2],s[f]),f+=2}var p,v,m=t.t-1,S=!0,_=a();for(i=y(t[m])-1;m>=0;){for(i>=u?p=t[m]>>i-u&c:(p=(t[m]&(1<0&&(p|=t[m-1]>>this.DB+i-u)),f=r;!(1&p);)p>>=1,--f;if((i-=f)<0&&(i+=this.DB,--m),S)s[p].copyTo(o),S=!1;else{for(;f>1;)n.sqrTo(o,_),n.sqrTo(_,o),f-=2;f>0?n.sqrTo(o,_):(v=o,o=_,_=v),n.mulTo(_,s[p],o)}for(;m>=0&&!(t[m]&1<=0?(r.subTo(n,r),e&&i.subTo(a,i),o.subTo(f,o)):(n.subTo(r,n),e&&a.subTo(i,a),f.subTo(o,f))}return 0!=n.compareTo(s.ONE)?s.ZERO:f.compareTo(t)>=0?f.subtract(t):f.signum()<0?(f.addTo(t,f),f.signum()<0?f.add(t):f):f},s.prototype.pow=function(t){return this.exp(t,new w)},s.prototype.gcd=function(t){var e=this.s<0?this.negate():this.clone(),r=t.s<0?t.negate():t.clone();if(e.compareTo(r)<0){var n=e;e=r,r=n}var i=e.getLowestSetBit(),o=r.getLowestSetBit();if(o<0)return e;for(i0&&(e.rShiftTo(o,e),r.rShiftTo(o,r));e.signum()>0;)(i=e.getLowestSetBit())>0&&e.rShiftTo(i,e),(i=r.getLowestSetBit())>0&&r.rShiftTo(i,r),e.compareTo(r)>=0?(e.subTo(r,e),e.rShiftTo(1,e)):(r.subTo(e,r),r.rShiftTo(1,r));return o>0&&r.lShiftTo(o,r),r},s.prototype.isProbablePrime=function(t){var e,r=this.abs();if(1==r.t&&r[0]<=A[A.length-1]){for(e=0;e{var n=r(8287).Buffer,i=r(8226)._,o=(r(3200),r(1973)),s=r(8226),a=r(1768),f=r(4538);e.BigInteger=o,t.exports.Key=function(){function t(){this.n=null,this.e=0,this.d=null,this.p=null,this.q=null,this.dmp1=null,this.dmq1=null,this.coeff=null}return t.prototype.setOptions=function(t){var e=a[t.signingScheme],r=a[t.encryptionScheme];e===r?this.signingScheme=this.encryptionScheme=r.makeScheme(this,t):(this.encryptionScheme=r.makeScheme(this,t),this.signingScheme=e.makeScheme(this,t)),this.encryptEngine=f.getEngine(this,t)},t.prototype.generate=function(t,e){var r=t>>1;this.e=parseInt(e,16);for(var n=new o(e,16);;){for(;this.p=new o(t-r,1),0!==this.p.subtract(o.ONE).gcd(n).compareTo(o.ONE)||!this.p.isProbablePrime(10););for(;this.q=new o(r,1),0!==this.q.subtract(o.ONE).gcd(n).compareTo(o.ONE)||!this.q.isProbablePrime(10););if(this.p.compareTo(this.q)<=0){var i=this.p;this.p=this.q,this.q=i}var s=this.p.subtract(o.ONE),a=this.q.subtract(o.ONE),f=s.multiply(a);if(0===f.gcd(n).compareTo(o.ONE)){if(this.n=this.p.multiply(this.q),this.n.bitLength()0&&(i.isNumber(e)||e.length>0)&&r.length>0))throw Error("Invalid RSA private key");this.n=new o(t),this.e=i.isNumber(e)?e:s.get32IntFromBuffer(e,0),this.d=new o(r),n&&a&&f&&u&&c&&(this.p=new o(n),this.q=new o(a),this.dmp1=new o(f),this.dmq1=new o(u),this.coeff=new o(c)),this.$$recalculateCache()},t.prototype.setPublic=function(t,e){if(!(t&&e&&t.length>0&&(i.isNumber(e)||e.length>0)))throw Error("Invalid RSA public key");this.n=new o(t),this.e=i.isNumber(e)?e:s.get32IntFromBuffer(e,0),this.$$recalculateCache()},t.prototype.$doPrivate=function(t){if(this.p||this.q)return t.modPow(this.d,this.n);for(var e=t.mod(this.p).modPow(this.dmp1,this.p),r=t.mod(this.q).modPow(this.dmq1,this.q);e.compareTo(r)<0;)e=e.add(this.p);return e.subtract(r).multiply(this.coeff).mod(this.p).multiply(this.q).add(r)},t.prototype.$doPublic=function(t){return t.modPowInt(this.e,this.n)},t.prototype.encrypt=function(t,e){var r=[],i=[],o=t.length,s=Math.ceil(o/this.maxMessageLength)||1,a=Math.ceil(o/s||1);if(1==s)r.push(t);else for(var f=0;f0)throw Error("Incorrect data or key");for(var r=[],i=0,o=0,s=t.length/this.encryptedDataLength,a=0;a>3},t}()},2487:(t,e,r)=>{var n=r(8287).Buffer,i=(r(1973),r(3200));t.exports={isEncryption:!0,isSignature:!1},t.exports.digestLength={md4:16,md5:16,ripemd160:20,rmd160:20,sha1:20,sha224:28,sha256:32,sha384:48,sha512:64};var o="sha1";t.exports.eme_oaep_mgf1=function(e,r,s){s=s||o;for(var a=t.exports.digestLength[s],f=Math.ceil(r/a),u=n.alloc(a*f),c=n.alloc(4),h=0;hf-2*u-2)throw new Error("Message is too long to encode into an encoded message with a length of "+f+" bytes, increaseemLen to fix this error (minimum value for given parameters and options: "+(f-2*u-2)+")");var c=i.createHash(r);c.update(a),c=c.digest();var h=n.alloc(f-e.length-2*u-1);h.fill(0),h[h.length-1]=1;for(var p=n.concat([c,h,e]),l=i.randomBytes(u),y=s(l,p.length,r),g=0;g{var n=r(8287).Buffer,i=r(1973),o=r(3200),s=r(7449),a={md2:n.from("3020300c06082a864886f70d020205000410","hex"),md5:n.from("3020300c06082a864886f70d020505000410","hex"),sha1:n.from("3021300906052b0e03021a05000414","hex"),sha224:n.from("302d300d06096086480165030402040500041c","hex"),sha256:n.from("3031300d060960864801650304020105000420","hex"),sha384:n.from("3041300d060960864801650304020205000430","hex"),sha512:n.from("3051300d060960864801650304020305000440","hex"),ripemd160:n.from("3021300906052b2403020105000414","hex"),rmd160:n.from("3021300906052b2403020105000414","hex")},f={ripemd160:"rmd160"},u="sha256";t.exports={isEncryption:!0,isSignature:!0},t.exports.makeScheme=function(t,e){function r(t,e){this.key=t,this.options=e}return r.prototype.maxMessageLength=function(){return this.options.encryptionSchemeOptions&&this.options.encryptionSchemeOptions.padding==s.RSA_NO_PADDING?this.key.encryptedDataLength:this.key.encryptedDataLength-11},r.prototype.encPad=function(t,e){var r;if(e=e||{},t.length>this.key.maxMessageLength)throw new Error("Message too long for RSA (n="+this.key.encryptedDataLength+", l="+t.length+")");if(this.options.encryptionSchemeOptions&&this.options.encryptionSchemeOptions.padding==s.RSA_NO_PADDING)return(r=n.alloc(this.key.maxMessageLength-t.length)).fill(0),n.concat([r,t]);if(1===e.type)return(r=n.alloc(this.key.encryptedDataLength-t.length-1)).fill(255,0,r.length-1),r[0]=1,r[r.length-1]=0,n.concat([r,t]);(r=n.alloc(this.key.encryptedDataLength-t.length))[0]=0,r[1]=2;for(var i=o.randomBytes(r.length-3),a=0;a=t.length)return null}else{if(0!==t[0]||2!==t[1])return null;for(r=3;0!==t[r];)if(++r>=t.length)return null}return t.slice(r+1,t.length)},r.prototype.sign=function(t){var e=this.options.signingSchemeOptions.hash||u;if("browser"===this.options.environment){e=f[e]||e;var r=o.createHash(e);r.update(t);var n=this.pkcs1pad(r.digest(),e);return this.key.$doPrivate(new i(n)).toBuffer(this.key.encryptedDataLength)}var s=o.createSign("RSA-"+e.toUpperCase());return s.update(t),s.sign(this.options.rsaUtils.exportKey("private"))},r.prototype.verify=function(t,e,r){if(this.options.encryptionSchemeOptions&&this.options.encryptionSchemeOptions.padding==s.RSA_NO_PADDING)return!1;var a=this.options.signingSchemeOptions.hash||u;if("browser"===this.options.environment){a=f[a]||a,r&&(e=n.from(e,r));var c=o.createHash(a);c.update(t);var h=this.pkcs1pad(c.digest(),a);return this.key.$doPublic(new i(e)).toBuffer().toString("hex")==h.toString("hex")}var p=o.createVerify("RSA-"+a.toUpperCase());return p.update(t),p.verify(this.options.rsaUtils.exportKey("public"),e,r)},r.prototype.pkcs0pad=function(t){var e=n.alloc(this.key.maxMessageLength-t.length);return e.fill(0),n.concat([e,t])},r.prototype.pkcs0unpad=function(t){return"function"==typeof t.lastIndexOf?t.slice(t.lastIndexOf("\\0")+1,t.length):t.slice(String.prototype.lastIndexOf.call(t,"\\0")+1,t.length)},r.prototype.pkcs1pad=function(t,e){var r=a[e];if(!r)throw Error("Unsupported hash algorithm");var i=n.concat([r,t]);if(i.length+10>this.key.encryptedDataLength)throw Error("Key is too short for signing algorithm ("+e+")");var o=n.alloc(this.key.encryptedDataLength-i.length-1);return o.fill(255,0,o.length-1),o[0]=1,o[o.length-1]=0,n.concat([o,i])},new r(t,e)}},4414:(t,e,r)=>{var n=r(8287).Buffer,i=r(1973),o=r(3200);t.exports={isEncryption:!1,isSignature:!0};var s="sha1";t.exports.makeScheme=function(t,e){var a=r(1768).pkcs1_oaep;function f(t,e){this.key=t,this.options=e}return f.prototype.sign=function(t){var e=o.createHash(this.options.signingSchemeOptions.hash||s);e.update(t);var r=this.emsa_pss_encode(e.digest(),this.key.keySize-1);return this.key.$doPrivate(new i(r)).toBuffer(this.key.encryptedDataLength)},f.prototype.verify=function(t,e,r){r&&(e=n.from(e,r)),e=new i(e);var a=Math.ceil((this.key.keySize-1)/8),f=this.key.$doPublic(e).toBuffer(a),u=o.createHash(this.options.signingSchemeOptions.hash||s);return u.update(t),this.emsa_pss_verify(u.digest(),f,this.key.keySize-1)},f.prototype.emsa_pss_encode=function(t,e){var r=this.options.signingSchemeOptions.hash||s,i=this.options.signingSchemeOptions.mgf||a.eme_oaep_mgf1,f=this.options.signingSchemeOptions.saltLength||20,u=a.digestLength[r],c=Math.ceil(e/8);if(c>8-S<<8-S;v[0]=v[0]&_;var b=n.alloc(v.length+l.length+1);return v.copy(b,0),l.copy(b,v.length),b[b.length-1]=188,b},f.prototype.emsa_pss_verify=function(t,e,r){var i=this.options.signingSchemeOptions.hash||s,f=this.options.signingSchemeOptions.mgf||a.eme_oaep_mgf1,u=this.options.signingSchemeOptions.saltLength||20,c=a.digestLength[i],h=Math.ceil(r/8);if(h>8-(g=8*h-r)<<8-g,p[0]=p[0]&l,y=0;0===p[y]&&y{t.exports={pkcs1:r(8290),pkcs1_oaep:r(2487),pss:r(4414),isEncryption:function(e){return t.exports[e]&&t.exports[e].isEncryption},isSignature:function(e){return t.exports[e]&&t.exports[e].isSignature}}},8226:(t,e,r)=>{var n=r(5606);r(3200),t.exports.linebrk=function(t,e){for(var r="",n=0;n+e0){if(r>=4)return t.readUIntBE(e,r);for(var n=0,i=e+r,o=0;i>e;i--,o+=2)n+=t[i-1]*Math.pow(16,o);return n}return NaN},t.exports._={isObject:function(t){var e=typeof t;return!!t&&("object"==e||"function"==e)},isString:function(t){return"string"==typeof t||t instanceof String},isNumber:function(t){return"number"==typeof t||!isNaN(parseFloat(t))&&isFinite(t)},omit:function(t,e){var r={};for(var n in t)t.hasOwnProperty(n)&&n!==e&&(r[n]=t[n]);return r}},t.exports.trimSurroundingText=function(t,e,r){var n=0,i=t.length,o=t.indexOf(e);o>=0&&(n=o+e.length);var s=t.indexOf(r,o);return s>=0&&(i=s),t.substring(n,i)}},8875:(t,e,r)=>{"use strict";var n;if(!Object.keys){var i=Object.prototype.hasOwnProperty,o=Object.prototype.toString,s=r(1093),a=Object.prototype.propertyIsEnumerable,f=!a.call({toString:null},"toString"),u=a.call((function(){}),"prototype"),c=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],h=function(t){var e=t.constructor;return e&&e.prototype===t},p={$applicationCache:!0,$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$onmozfullscreenchange:!0,$onmozfullscreenerror:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},l=function(){if("undefined"==typeof window)return!1;for(var t in window)try{if(!p["$"+t]&&i.call(window,t)&&null!==window[t]&&"object"==typeof window[t])try{h(window[t])}catch(t){return!0}}catch(t){return!0}return!1}();n=function(t){var e=null!==t&&"object"==typeof t,r="[object Function]"===o.call(t),n=s(t),a=e&&"[object String]"===o.call(t),p=[];if(!e&&!r&&!n)throw new TypeError("Object.keys called on a non-object");var y=u&&r;if(a&&t.length>0&&!i.call(t,0))for(var g=0;g0)for(var d=0;d{"use strict";var n=Array.prototype.slice,i=r(1093),o=Object.keys,s=o?function(t){return o(t)}:r(8875),a=Object.keys;s.shim=function(){if(Object.keys){var t=function(){var t=Object.keys(arguments);return t&&t.length===arguments.length}(1,2);t||(Object.keys=function(t){return i(t)?a(n.call(t)):a(t)})}else Object.keys=s;return Object.keys||s},t.exports=s},1093:t=>{"use strict";var e=Object.prototype.toString;t.exports=function(t){var r=e.call(t),n="[object Arguments]"===r;return n||(n="[object Array]"!==r&&null!==t&&"object"==typeof t&&"number"==typeof t.length&&t.length>=0&&"[object Function]"===e.call(t.callee)),n}},8403:(t,e,r)=>{"use strict";var n=r(1189),i=r(1333)(),o=r(8075),s=Object,a=o("Array.prototype.push"),f=o("Object.prototype.propertyIsEnumerable"),u=i?Object.getOwnPropertySymbols:null;t.exports=function(t,e){if(null==t)throw new TypeError("target must be an object");var r=s(t);if(1===arguments.length)return r;for(var o=1;o{"use strict";var n=r(8403);t.exports=function(){return Object.assign?function(){if(!Object.assign)return!1;for(var t="abcdefghijklmnopqrst",e=t.split(""),r={},n=0;n{var e,r,n=t.exports={};function i(){throw new Error("setTimeout has not been defined")}function o(){throw new Error("clearTimeout has not been defined")}function s(t){if(e===setTimeout)return setTimeout(t,0);if((e===i||!e)&&setTimeout)return e=setTimeout,setTimeout(t,0);try{return e(t,0)}catch(r){try{return e.call(null,t,0)}catch(r){return e.call(this,t,0)}}}!function(){try{e="function"==typeof setTimeout?setTimeout:i}catch(t){e=i}try{r="function"==typeof clearTimeout?clearTimeout:o}catch(t){r=o}}();var a,f=[],u=!1,c=-1;function h(){u&&a&&(u=!1,a.length?f=a.concat(f):c=-1,f.length&&p())}function p(){if(!u){var t=s(h);u=!0;for(var e=f.length;e;){for(a=f,f=[];++c1)for(var r=1;r{"use strict";var n,i=r(5606),o=r(8287),s=o.Buffer,a={};for(n in o)o.hasOwnProperty(n)&&"SlowBuffer"!==n&&"Buffer"!==n&&(a[n]=o[n]);var f=a.Buffer={};for(n in s)s.hasOwnProperty(n)&&"allocUnsafe"!==n&&"allocUnsafeSlow"!==n&&(f[n]=s[n]);if(a.Buffer.prototype=s.prototype,f.from&&f.from!==Uint8Array.from||(f.from=function(t,e,r){if("number"==typeof t)throw new TypeError(\'The "value" argument must not be of type number. Received type \'+typeof t);if(t&&void 0===t.length)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t);return s(t,e,r)}),f.alloc||(f.alloc=function(t,e,r){if("number"!=typeof t)throw new TypeError(\'The "size" argument must be of type number. Received type \'+typeof t);if(t<0||t>=2*(1<<30))throw new RangeError(\'The value "\'+t+\'" is invalid for option "size"\');var n=s(t);return e&&0!==e.length?"string"==typeof r?n.fill(e,r):n.fill(e):n.fill(0),n}),!a.kStringMaxLength)try{a.kStringMaxLength=i.binding("buffer").kStringMaxLength}catch(t){}a.constants||(a.constants={MAX_LENGTH:a.kMaxLength},a.kStringMaxLength&&(a.constants.MAX_STRING_LENGTH=a.kStringMaxLength)),t.exports=a},6897:(t,e,r)=>{"use strict";var n=r(453),i=r(41),o=r(592)(),s=r(5795),a=r(9675),f=n("%Math.floor%");t.exports=function(t,e){if("function"!=typeof t)throw new a("`fn` is not a function");if("number"!=typeof e||e<0||e>4294967295||f(e)!==e)throw new a("`length` must be a positive 32-bit integer");var r=arguments.length>2&&!!arguments[2],n=!0,u=!0;if("length"in t&&s){var c=s(t,"length");c&&!c.configurable&&(n=!1),c&&!c.writable&&(u=!1)}return(n||u||!r)&&(o?i(t,"length",e,!0,!0):i(t,"length",e)),t}},3200:(t,e,r)=>{var n=r(8287).Buffer,i=r(1396),o={randomBytes:function(t){for(var e=[],r=0;r{var n=r(8287).Buffer;const i=r(3229);let o={outputEncoding:"",PublicFormat:"pkcs1-public",PrivateFormat:"pkcs1-private",options:{environment:"browser",encryptionScheme:"pkcs1"}};t.exports={NodeRSA:i,encryptRSAWithPublicKey:function(t,e,r={}){return r=Object.assign({},o,r),new i(e,r.PublicFormat,r.options).encrypt(t,r.outEncoding||"base64")},encryptRSAWithPrivateKey:function(t,e,r={}){return r=Object.assign({},o,r),new i(e,r.PrivateFormat,r.options).encryptPrivate(t,r.outputEncoding||"base64")},decryptRSAWithPublicKey:function(t,e,r={}){return r=Object.assign({},o,r),new i(e,r.PublicEncoding,r.options).decryptPublic(t,r.outEncoding||"utf8")},decryptRSAWithPrivateKey:function(t,e,r={}){return r=Object.assign({},o,r),new i(e,r.PrivateEncoding,r.options).decrypt(t,r.outEncoding||"utf8")},sign:function(t,e,r={}){return r=Object.assign({},o,r),new i(e,r.PrivateEncoding,r.options).sign(t,r.outEncoding||"base64")},verify:function(t,e,r,s={}){return"string"==typeof e&&e.match(/^([0-9a-fA-F]{2})*$/)?e=n.from(e,"hex"):"string"==typeof e&&(e=n.from(e,"base64")),s=Object.assign({},o,s),new i(r,s.PublicEncoding,s.options).verify(t,e)}}},7449:t=>{"use strict";t.exports=JSON.parse(\'{"O_RDONLY":0,"O_WRONLY":1,"O_RDWR":2,"S_IFMT":61440,"S_IFREG":32768,"S_IFDIR":16384,"S_IFCHR":8192,"S_IFBLK":24576,"S_IFIFO":4096,"S_IFLNK":40960,"S_IFSOCK":49152,"O_CREAT":512,"O_EXCL":2048,"O_NOCTTY":131072,"O_TRUNC":1024,"O_APPEND":8,"O_DIRECTORY":1048576,"O_NOFOLLOW":256,"O_SYNC":128,"O_SYMLINK":2097152,"O_NONBLOCK":4,"S_IRWXU":448,"S_IRUSR":256,"S_IWUSR":128,"S_IXUSR":64,"S_IRWXG":56,"S_IRGRP":32,"S_IWGRP":16,"S_IXGRP":8,"S_IRWXO":7,"S_IROTH":4,"S_IWOTH":2,"S_IXOTH":1,"E2BIG":7,"EACCES":13,"EADDRINUSE":48,"EADDRNOTAVAIL":49,"EAFNOSUPPORT":47,"EAGAIN":35,"EALREADY":37,"EBADF":9,"EBADMSG":94,"EBUSY":16,"ECANCELED":89,"ECHILD":10,"ECONNABORTED":53,"ECONNREFUSED":61,"ECONNRESET":54,"EDEADLK":11,"EDESTADDRREQ":39,"EDOM":33,"EDQUOT":69,"EEXIST":17,"EFAULT":14,"EFBIG":27,"EHOSTUNREACH":65,"EIDRM":90,"EILSEQ":92,"EINPROGRESS":36,"EINTR":4,"EINVAL":22,"EIO":5,"EISCONN":56,"EISDIR":21,"ELOOP":62,"EMFILE":24,"EMLINK":31,"EMSGSIZE":40,"EMULTIHOP":95,"ENAMETOOLONG":63,"ENETDOWN":50,"ENETRESET":52,"ENETUNREACH":51,"ENFILE":23,"ENOBUFS":55,"ENODATA":96,"ENODEV":19,"ENOENT":2,"ENOEXEC":8,"ENOLCK":77,"ENOLINK":97,"ENOMEM":12,"ENOMSG":91,"ENOPROTOOPT":42,"ENOSPC":28,"ENOSR":98,"ENOSTR":99,"ENOSYS":78,"ENOTCONN":57,"ENOTDIR":20,"ENOTEMPTY":66,"ENOTSOCK":38,"ENOTSUP":45,"ENOTTY":25,"ENXIO":6,"EOPNOTSUPP":102,"EOVERFLOW":84,"EPERM":1,"EPIPE":32,"EPROTO":100,"EPROTONOSUPPORT":43,"EPROTOTYPE":41,"ERANGE":34,"EROFS":30,"ESPIPE":29,"ESRCH":3,"ESTALE":70,"ETIME":101,"ETIMEDOUT":60,"ETXTBSY":26,"EWOULDBLOCK":35,"EXDEV":18,"SIGHUP":1,"SIGINT":2,"SIGQUIT":3,"SIGILL":4,"SIGTRAP":5,"SIGABRT":6,"SIGIOT":6,"SIGBUS":10,"SIGFPE":8,"SIGKILL":9,"SIGUSR1":30,"SIGSEGV":11,"SIGUSR2":31,"SIGPIPE":13,"SIGALRM":14,"SIGTERM":15,"SIGCHLD":20,"SIGCONT":19,"SIGSTOP":17,"SIGTSTP":18,"SIGTTIN":21,"SIGTTOU":22,"SIGURG":16,"SIGXCPU":24,"SIGXFSZ":25,"SIGVTALRM":26,"SIGPROF":27,"SIGWINCH":28,"SIGIO":23,"SIGSYS":12,"SSL_OP_ALL":2147486719,"SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION":262144,"SSL_OP_CIPHER_SERVER_PREFERENCE":4194304,"SSL_OP_CISCO_ANYCONNECT":32768,"SSL_OP_COOKIE_EXCHANGE":8192,"SSL_OP_CRYPTOPRO_TLSEXT_BUG":2147483648,"SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS":2048,"SSL_OP_EPHEMERAL_RSA":0,"SSL_OP_LEGACY_SERVER_CONNECT":4,"SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER":32,"SSL_OP_MICROSOFT_SESS_ID_BUG":1,"SSL_OP_MSIE_SSLV2_RSA_PADDING":0,"SSL_OP_NETSCAPE_CA_DN_BUG":536870912,"SSL_OP_NETSCAPE_CHALLENGE_BUG":2,"SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG":1073741824,"SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG":8,"SSL_OP_NO_COMPRESSION":131072,"SSL_OP_NO_QUERY_MTU":4096,"SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION":65536,"SSL_OP_NO_SSLv2":16777216,"SSL_OP_NO_SSLv3":33554432,"SSL_OP_NO_TICKET":16384,"SSL_OP_NO_TLSv1":67108864,"SSL_OP_NO_TLSv1_1":268435456,"SSL_OP_NO_TLSv1_2":134217728,"SSL_OP_PKCS1_CHECK_1":0,"SSL_OP_PKCS1_CHECK_2":0,"SSL_OP_SINGLE_DH_USE":1048576,"SSL_OP_SINGLE_ECDH_USE":524288,"SSL_OP_SSLEAY_080_CLIENT_DH_BUG":128,"SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG":0,"SSL_OP_TLS_BLOCK_PADDING_BUG":512,"SSL_OP_TLS_D5_BUG":256,"SSL_OP_TLS_ROLLBACK_BUG":8388608,"ENGINE_METHOD_DSA":2,"ENGINE_METHOD_DH":4,"ENGINE_METHOD_RAND":8,"ENGINE_METHOD_ECDH":16,"ENGINE_METHOD_ECDSA":32,"ENGINE_METHOD_CIPHERS":64,"ENGINE_METHOD_DIGESTS":128,"ENGINE_METHOD_STORE":256,"ENGINE_METHOD_PKEY_METHS":512,"ENGINE_METHOD_PKEY_ASN1_METHS":1024,"ENGINE_METHOD_ALL":65535,"ENGINE_METHOD_NONE":0,"DH_CHECK_P_NOT_SAFE_PRIME":2,"DH_CHECK_P_NOT_PRIME":1,"DH_UNABLE_TO_CHECK_GENERATOR":4,"DH_NOT_SUITABLE_GENERATOR":8,"NPN_ENABLED":1,"RSA_PKCS1_PADDING":1,"RSA_SSLV23_PADDING":2,"RSA_NO_PADDING":3,"RSA_PKCS1_OAEP_PADDING":4,"RSA_X931_PADDING":5,"RSA_PKCS1_PSS_PADDING":6,"POINT_CONVERSION_COMPRESSED":2,"POINT_CONVERSION_UNCOMPRESSED":4,"POINT_CONVERSION_HYBRID":6,"F_OK":0,"R_OK":4,"W_OK":2,"X_OK":1,"UV_UDP_REUSEADDR":4}\')}},e={};function r(n){var i=e[n];if(void 0!==i)return i.exports;var o=e[n]={exports:{}};return t[n].call(o.exports,o,o.exports,r),o.exports}return r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),r(7033)})()));'},990:e=>{e.exports='(function webpackUniversalModuleDefinition(root,factory){if(typeof exports==="object"&&typeof module==="object"){module.exports=exports=factory()}else if(typeof define==="function"&&define.amd){define([],factory)}else{globalThis.JSEncrypt=factory()}})(this,()=>{return(()=>{var __webpack_modules__={"./lib/JSEncrypt.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(\'__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */ "JSEncrypt": () => (/* binding */ JSEncrypt)\\n/* harmony export */ });\\n/* harmony import */ var _lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lib/jsbn/base64 */ "./lib/lib/jsbn/base64.js");\\n/* harmony import */ var _JSEncryptRSAKey__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./JSEncryptRSAKey */ "./lib/JSEncryptRSAKey.js");\\n/* provided dependency */ var process = __webpack_require__(/*! process/browser */ "./node_modules/process/browser.js");\\nvar _a;\\n\\n\\nvar version = typeof process !== \\\'undefined\\\'\\n ? (_a = process.env) === null || _a === void 0 ? void 0 : "3.3.2"\\n : undefined;\\n/**\\n *\\n * @param {Object} [options = {}] - An object to customize JSEncrypt behaviour\\n * possible parameters are:\\n * - default_key_size {number} default: 1024 the key size in bit\\n * - default_public_exponent {string} default: \\\'010001\\\' the hexadecimal representation of the public exponent\\n * - log {boolean} default: false whether log warn/error or not\\n * @constructor\\n */\\nvar JSEncrypt = /** @class */ (function () {\\n function JSEncrypt(options) {\\n if (options === void 0) { options = {}; }\\n options = options || {};\\n this.default_key_size = options.default_key_size\\n ? parseInt(options.default_key_size, 10)\\n : 1024;\\n this.default_public_exponent = options.default_public_exponent || "010001"; // 65537 default openssl public exponent for rsa key type\\n this.log = options.log || false;\\n // The private and public key.\\n this.key = null;\\n }\\n /**\\n * Method to set the rsa key parameter (one method is enough to set both the public\\n * and the private key, since the private key contains the public key paramenters)\\n * Log a warning if logs are enabled\\n * @param {Object|string} key the pem encoded string or an object (with or without header/footer)\\n * @public\\n */\\n JSEncrypt.prototype.setKey = function (key) {\\n if (this.log && this.key) {\\n console.warn("A key was already set, overriding existing.");\\n }\\n this.key = new _JSEncryptRSAKey__WEBPACK_IMPORTED_MODULE_1__.JSEncryptRSAKey(key);\\n };\\n /**\\n * Proxy method for setKey, for api compatibility\\n * @see setKey\\n * @public\\n */\\n JSEncrypt.prototype.setPrivateKey = function (privkey) {\\n // Create the key.\\n this.setKey(privkey);\\n };\\n /**\\n * Proxy method for setKey, for api compatibility\\n * @see setKey\\n * @public\\n */\\n JSEncrypt.prototype.setPublicKey = function (pubkey) {\\n // Sets the public key.\\n this.setKey(pubkey);\\n };\\n /**\\n * Proxy method for RSAKey object\\\'s decrypt, decrypt the string using the private\\n * components of the rsa key object. Note that if the object was not set will be created\\n * on the fly (by the getKey method) using the parameters passed in the JSEncrypt constructor\\n * @param {string} str base64 encoded crypted string to decrypt\\n * @return {string} the decrypted string\\n * @public\\n */\\n JSEncrypt.prototype.decrypt = function (str) {\\n // Return the decrypted string.\\n try {\\n return this.getKey().decrypt((0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.b64tohex)(str));\\n }\\n catch (ex) {\\n return false;\\n }\\n };\\n /**\\n * Proxy method for RSAKey object\\\'s encrypt, encrypt the string using the public\\n * components of the rsa key object. Note that if the object was not set will be created\\n * on the fly (by the getKey method) using the parameters passed in the JSEncrypt constructor\\n * @param {string} str the string to encrypt\\n * @return {string} the encrypted string encoded in base64\\n * @public\\n */\\n JSEncrypt.prototype.encrypt = function (str) {\\n // Return the encrypted string.\\n try {\\n return (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.hex2b64)(this.getKey().encrypt(str));\\n }\\n catch (ex) {\\n return false;\\n }\\n };\\n /**\\n * Proxy method for RSAKey object\\\'s sign.\\n * @param {string} str the string to sign\\n * @param {function} digestMethod hash method\\n * @param {string} digestName the name of the hash algorithm\\n * @return {string} the signature encoded in base64\\n * @public\\n */\\n JSEncrypt.prototype.sign = function (str, digestMethod, digestName) {\\n // return the RSA signature of \\\'str\\\' in \\\'hex\\\' format.\\n try {\\n return (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.hex2b64)(this.getKey().sign(str, digestMethod, digestName));\\n }\\n catch (ex) {\\n return false;\\n }\\n };\\n /**\\n * Proxy method for RSAKey object\\\'s verify.\\n * @param {string} str the string to verify\\n * @param {string} signature the signature encoded in base64 to compare the string to\\n * @param {function} digestMethod hash method\\n * @return {boolean} whether the data and signature match\\n * @public\\n */\\n JSEncrypt.prototype.verify = function (str, signature, digestMethod) {\\n // Return the decrypted \\\'digest\\\' of the signature.\\n try {\\n return this.getKey().verify(str, (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.b64tohex)(signature), digestMethod);\\n }\\n catch (ex) {\\n return false;\\n }\\n };\\n /**\\n * Getter for the current JSEncryptRSAKey object. If it doesn\\\'t exists a new object\\n * will be created and returned\\n * @param {callback} [cb] the callback to be called if we want the key to be generated\\n * in an async fashion\\n * @returns {JSEncryptRSAKey} the JSEncryptRSAKey object\\n * @public\\n */\\n JSEncrypt.prototype.getKey = function (cb) {\\n // Only create new if it does not exist.\\n if (!this.key) {\\n // Get a new private key.\\n this.key = new _JSEncryptRSAKey__WEBPACK_IMPORTED_MODULE_1__.JSEncryptRSAKey();\\n if (cb && {}.toString.call(cb) === "[object Function]") {\\n this.key.generateAsync(this.default_key_size, this.default_public_exponent, cb);\\n return;\\n }\\n // Generate the key.\\n this.key.generate(this.default_key_size, this.default_public_exponent);\\n }\\n return this.key;\\n };\\n /**\\n * Returns the pem encoded representation of the private key\\n * If the key doesn\\\'t exists a new key will be created\\n * @returns {string} pem encoded representation of the private key WITH header and footer\\n * @public\\n */\\n JSEncrypt.prototype.getPrivateKey = function () {\\n // Return the private representation of this key.\\n return this.getKey().getPrivateKey();\\n };\\n /**\\n * Returns the pem encoded representation of the private key\\n * If the key doesn\\\'t exists a new key will be created\\n * @returns {string} pem encoded representation of the private key WITHOUT header and footer\\n * @public\\n */\\n JSEncrypt.prototype.getPrivateKeyB64 = function () {\\n // Return the private representation of this key.\\n return this.getKey().getPrivateBaseKeyB64();\\n };\\n /**\\n * Returns the pem encoded representation of the public key\\n * If the key doesn\\\'t exists a new key will be created\\n * @returns {string} pem encoded representation of the public key WITH header and footer\\n * @public\\n */\\n JSEncrypt.prototype.getPublicKey = function () {\\n // Return the private representation of this key.\\n return this.getKey().getPublicKey();\\n };\\n /**\\n * Returns the pem encoded representation of the public key\\n * If the key doesn\\\'t exists a new key will be created\\n * @returns {string} pem encoded representation of the public key WITHOUT header and footer\\n * @public\\n */\\n JSEncrypt.prototype.getPublicKeyB64 = function () {\\n // Return the private representation of this key.\\n return this.getKey().getPublicBaseKeyB64();\\n };\\nvar b64map="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var b64pad="=";var base64DecodeChars=new Array(-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1);function btoa(str){var out,i,len;var c1,c2,c3;len=str.length;i=0;out="";while(i>2);out+=b64map.charAt((c1&3)<<4);out+="==";break}c2=str.charCodeAt(i++);if(i==len){out+=b64map.charAt(c1>>2);out+=b64map.charAt((c1&3)<<4|(c2&240)>>4);out+=b64map.charAt((c2&15)<<2);out+="=";break}c3=str.charCodeAt(i++);out+=b64map.charAt(c1>>2);out+=b64map.charAt((c1&3)<<4|(c2&240)>>4);out+=b64map.charAt((c2&15)<<2|(c3&192)>>6);out+=b64map.charAt(c3&63)}return out}function atob(str){var c1,c2,c3,c4;var i,len,out;len=str.length;i=0;out="";while(i>4);do{c3=str.charCodeAt(i++)&255;if(c3==61)return out;c3=base64DecodeChars[c3]}while(i>2);do{c4=str.charCodeAt(i++)&255;if(c4==61)return out;c4=base64DecodeChars[c4]}while(i>6)+b64map.charAt(c&63)}if(i+1==h.length){c=parseInt(h.substring(i,i+1),16);ret+=b64map.charAt(c<<2)}else if(i+2==h.length){c=parseInt(h.substring(i,i+2),16);ret+=b64map.charAt(c>>2)+b64map.charAt((c&3)<<4)}while((ret.length&3)>0)ret+=b64pad;return ret}function hexToBytes(hex){for(var bytes=[],c=0;c>>4).toString(16));hex.push((bytes[i]&15).toString(16))}return hex.join("")}function b64tohex(str){for(var i=0,bin=atob(str.replace(/[ \\\\r\\\\n]+$/,"")),hex=[];i>3};JSEncrypt.prototype.decryptUnicodeLong=function(string){var k=this.getKey();var maxLength=(k.n.bitLength()+7>>3)*2;try{var hexString=b64tohex(string);var decryptedString="";var rexStr=".{1,"+maxLength+"}";var rex=new RegExp(rexStr,"g");var subStrArray=hexString.match(rex);if(subStrArray){subStrArray.forEach(function(entry){decryptedString+=k.decrypt(entry)});return decryptedString}}catch(ex){console.log("加密错误:"+ex.message);return false}};JSEncrypt.prototype.encryptUnicodeLong=function(string){var k=this.getKey();var maxLength=(k.n.bitLength()+7>>3)-11;try{var subStr="",encryptedString="";var subStart=0,subEnd=0;var bitLen=0,tmpPoint=0;for(var i=0,len=string.length;imaxLength){subStr=string.substring(subStart,subEnd);encryptedString+=k.encrypt(subStr);subStart=subEnd;bitLen=bitLen-tmpPoint}else{subEnd=i;tmpPoint=bitLen}}subStr=string.substring(subStart,len);encryptedString+=k.encrypt(subStr);return hex2b64(encryptedString)}catch(ex){console.log("解密错误:"+ex.message);return false}}; JSEncrypt.version = version;\\n return JSEncrypt;\\n}());\\n\\n\\n\\n//# sourceURL=webpack://JSEncrypt/./lib/JSEncrypt.js?\')},"./lib/JSEncryptRSAKey.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(\'__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */ "JSEncryptRSAKey": () => (/* binding */ JSEncryptRSAKey)\\n/* harmony export */ });\\n/* harmony import */ var _lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lib/jsbn/base64 */ "./lib/lib/jsbn/base64.js");\\n/* harmony import */ var _lib_asn1js_hex__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./lib/asn1js/hex */ "./lib/lib/asn1js/hex.js");\\n/* harmony import */ var _lib_asn1js_base64__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./lib/asn1js/base64 */ "./lib/lib/asn1js/base64.js");\\n/* harmony import */ var _lib_asn1js_asn1__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./lib/asn1js/asn1 */ "./lib/lib/asn1js/asn1.js");\\n/* harmony import */ var _lib_jsbn_rsa__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./lib/jsbn/rsa */ "./lib/lib/jsbn/rsa.js");\\n/* harmony import */ var _lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./lib/jsbn/jsbn */ "./lib/lib/jsbn/jsbn.js");\\n/* harmony import */ var _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./lib/jsrsasign/asn1-1.0 */ "./lib/lib/jsrsasign/asn1-1.0.js");\\nvar __extends = (undefined && undefined.__extends) || (function () {\\n var extendStatics = function (d, b) {\\n extendStatics = Object.setPrototypeOf ||\\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\\n return extendStatics(d, b);\\n };\\n return function (d, b) {\\n if (typeof b !== "function" && b !== null)\\n throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");\\n extendStatics(d, b);\\n function __() { this.constructor = d; }\\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\\n };\\n})();\\n\\n\\n\\n\\n\\n\\n\\n/**\\n * Create a new JSEncryptRSAKey that extends Tom Wu\\\'s RSA key object.\\n * This object is just a decorator for parsing the key parameter\\n * @param {string|Object} key - The key in string format, or an object containing\\n * the parameters needed to build a RSAKey object.\\n * @constructor\\n */\\nvar JSEncryptRSAKey = /** @class */ (function (_super) {\\n __extends(JSEncryptRSAKey, _super);\\n function JSEncryptRSAKey(key) {\\n var _this = _super.call(this) || this;\\n // Call the super constructor.\\n // RSAKey.call(this);\\n // If a key key was provided.\\n if (key) {\\n // If this is a string...\\n if (typeof key === "string") {\\n _this.parseKey(key);\\n }\\n else if (JSEncryptRSAKey.hasPrivateKeyProperty(key) ||\\n JSEncryptRSAKey.hasPublicKeyProperty(key)) {\\n // Set the values for the key.\\n _this.parsePropertiesFrom(key);\\n }\\n }\\n return _this;\\n }\\n /**\\n * Method to parse a pem encoded string containing both a public or private key.\\n * The method will translate the pem encoded string in a der encoded string and\\n * will parse private key and public key parameters. This method accepts public key\\n * in the rsaencryption pkcs #1 format (oid: 1.2.840.113549.1.1.1).\\n *\\n * @todo Check how many rsa formats use the same format of pkcs #1.\\n *\\n * The format is defined as:\\n * PublicKeyInfo ::= SEQUENCE {\\n * algorithm AlgorithmIdentifier,\\n * PublicKey BIT STRING\\n * }\\n * Where AlgorithmIdentifier is:\\n * AlgorithmIdentifier ::= SEQUENCE {\\n * algorithm OBJECT IDENTIFIER, the OID of the enc algorithm\\n * parameters ANY DEFINED BY algorithm OPTIONAL (NULL for PKCS #1)\\n * }\\n * and PublicKey is a SEQUENCE encapsulated in a BIT STRING\\n * RSAPublicKey ::= SEQUENCE {\\n * modulus INTEGER, -- n\\n * publicExponent INTEGER -- e\\n * }\\n * it\\\'s possible to examine the structure of the keys obtained from openssl using\\n * an asn.1 dumper as the one used here to parse the components: http://lapo.it/asn1js/\\n * @argument {string} pem the pem encoded string, can include the BEGIN/END header/footer\\n * @private\\n */\\n JSEncryptRSAKey.prototype.parseKey = function (pem) {\\n try {\\n var modulus = 0;\\n var public_exponent = 0;\\n var reHex = /^\\\\s*(?:[0-9A-Fa-f][0-9A-Fa-f]\\\\s*)+$/;\\n var der = reHex.test(pem) ? _lib_asn1js_hex__WEBPACK_IMPORTED_MODULE_1__.Hex.decode(pem) : _lib_asn1js_base64__WEBPACK_IMPORTED_MODULE_2__.Base64.unarmor(pem);\\n var asn1 = _lib_asn1js_asn1__WEBPACK_IMPORTED_MODULE_3__.ASN1.decode(der);\\n // Fixes a bug with OpenSSL 1.0+ private keys\\n if (asn1.sub.length === 3) {\\n asn1 = asn1.sub[2].sub[0];\\n }\\n if (asn1.sub.length === 9) {\\n // Parse the private key.\\n modulus = asn1.sub[1].getHexStringValue(); // bigint\\n this.n = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(modulus, 16);\\n public_exponent = asn1.sub[2].getHexStringValue(); // int\\n this.e = parseInt(public_exponent, 16);\\n var private_exponent = asn1.sub[3].getHexStringValue(); // bigint\\n this.d = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(private_exponent, 16);\\n var prime1 = asn1.sub[4].getHexStringValue(); // bigint\\n this.p = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(prime1, 16);\\n var prime2 = asn1.sub[5].getHexStringValue(); // bigint\\n this.q = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(prime2, 16);\\n var exponent1 = asn1.sub[6].getHexStringValue(); // bigint\\n this.dmp1 = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(exponent1, 16);\\n var exponent2 = asn1.sub[7].getHexStringValue(); // bigint\\n this.dmq1 = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(exponent2, 16);\\n var coefficient = asn1.sub[8].getHexStringValue(); // bigint\\n this.coeff = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(coefficient, 16);\\n }\\n else if (asn1.sub.length === 2) {\\n if (asn1.sub[0].sub) {\\n // Parse ASN.1 SubjectPublicKeyInfo type as defined by X.509\\n var bit_string = asn1.sub[1];\\n var sequence = bit_string.sub[0];\\n modulus = sequence.sub[0].getHexStringValue();\\n this.n = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(modulus, 16);\\n public_exponent = sequence.sub[1].getHexStringValue();\\n this.e = parseInt(public_exponent, 16);\\n }\\n else {\\n // Parse ASN.1 RSAPublicKey type as defined by PKCS #1\\n modulus = asn1.sub[0].getHexStringValue();\\n this.n = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(modulus, 16);\\n public_exponent = asn1.sub[1].getHexStringValue();\\n this.e = parseInt(public_exponent, 16);\\n }\\n }\\n else {\\n return false;\\n }\\n return true;\\n }\\n catch (ex) {\\n return false;\\n }\\n };\\n /**\\n * Translate rsa parameters in a hex encoded string representing the rsa key.\\n *\\n * The translation follow the ASN.1 notation :\\n * RSAPrivateKey ::= SEQUENCE {\\n * version Version,\\n * modulus INTEGER, -- n\\n * publicExponent INTEGER, -- e\\n * privateExponent INTEGER, -- d\\n * prime1 INTEGER, -- p\\n * prime2 INTEGER, -- q\\n * exponent1 INTEGER, -- d mod (p1)\\n * exponent2 INTEGER, -- d mod (q-1)\\n * coefficient INTEGER, -- (inverse of q) mod p\\n * }\\n * @returns {string} DER Encoded String representing the rsa private key\\n * @private\\n */\\n JSEncryptRSAKey.prototype.getPrivateBaseKey = function () {\\n var options = {\\n array: [\\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ int: 0 }),\\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.n }),\\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ int: this.e }),\\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.d }),\\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.p }),\\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.q }),\\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.dmp1 }),\\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.dmq1 }),\\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.coeff }),\\n ],\\n };\\n var seq = new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERSequence(options);\\n return seq.getEncodedHex();\\n };\\n /**\\n * base64 (pem) encoded version of the DER encoded representation\\n * @returns {string} pem encoded representation without header and footer\\n * @public\\n */\\n JSEncryptRSAKey.prototype.getPrivateBaseKeyB64 = function () {\\n return (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.hex2b64)(this.getPrivateBaseKey());\\n };\\n /**\\n * Translate rsa parameters in a hex encoded string representing the rsa public key.\\n * The representation follow the ASN.1 notation :\\n * PublicKeyInfo ::= SEQUENCE {\\n * algorithm AlgorithmIdentifier,\\n * PublicKey BIT STRING\\n * }\\n * Where AlgorithmIdentifier is:\\n * AlgorithmIdentifier ::= SEQUENCE {\\n * algorithm OBJECT IDENTIFIER, the OID of the enc algorithm\\n * parameters ANY DEFINED BY algorithm OPTIONAL (NULL for PKCS #1)\\n * }\\n * and PublicKey is a SEQUENCE encapsulated in a BIT STRING\\n * RSAPublicKey ::= SEQUENCE {\\n * modulus INTEGER, -- n\\n * publicExponent INTEGER -- e\\n * }\\n * @returns {string} DER Encoded String representing the rsa public key\\n * @private\\n */\\n JSEncryptRSAKey.prototype.getPublicBaseKey = function () {\\n var first_sequence = new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERSequence({\\n array: [\\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERObjectIdentifier({ oid: "1.2.840.113549.1.1.1" }),\\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERNull(),\\n ],\\n });\\n var second_sequence = new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERSequence({\\n array: [\\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.n }),\\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ int: this.e }),\\n ],\\n });\\n var bit_string = new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERBitString({\\n hex: "00" + second_sequence.getEncodedHex(),\\n });\\n var seq = new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERSequence({\\n array: [first_sequence, bit_string],\\n });\\n return seq.getEncodedHex();\\n };\\n /**\\n * base64 (pem) encoded version of the DER encoded representation\\n * @returns {string} pem encoded representation without header and footer\\n * @public\\n */\\n JSEncryptRSAKey.prototype.getPublicBaseKeyB64 = function () {\\n return (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.hex2b64)(this.getPublicBaseKey());\\n };\\n /**\\n * wrap the string in block of width chars. The default value for rsa keys is 64\\n * characters.\\n * @param {string} str the pem encoded string without header and footer\\n * @param {Number} [width=64] - the length the string has to be wrapped at\\n * @returns {string}\\n * @private\\n */\\n JSEncryptRSAKey.wordwrap = function (str, width) {\\n width = width || 64;\\n if (!str) {\\n return str;\\n }\\n var regex = "(.{1," + width + "})( +|$\\\\n?)|(.{1," + width + "})";\\n return str.match(RegExp(regex, "g")).join("\\\\n");\\n };\\n /**\\n * Retrieve the pem encoded private key\\n * @returns {string} the pem encoded private key with header/footer\\n * @public\\n */\\n JSEncryptRSAKey.prototype.getPrivateKey = function () {\\n var key = "-----BEGIN RSA PRIVATE KEY-----\\\\n";\\n key += JSEncryptRSAKey.wordwrap(this.getPrivateBaseKeyB64()) + "\\\\n";\\n key += "-----END RSA PRIVATE KEY-----";\\n return key;\\n };\\n /**\\n * Retrieve the pem encoded public key\\n * @returns {string} the pem encoded public key with header/footer\\n * @public\\n */\\n JSEncryptRSAKey.prototype.getPublicKey = function () {\\n var key = "-----BEGIN PUBLIC KEY-----\\\\n";\\n key += JSEncryptRSAKey.wordwrap(this.getPublicBaseKeyB64()) + "\\\\n";\\n key += "-----END PUBLIC KEY-----";\\n return key;\\n };\\n /**\\n * Check if the object contains the necessary parameters to populate the rsa modulus\\n * and public exponent parameters.\\n * @param {Object} [obj={}] - An object that may contain the two public key\\n * parameters\\n * @returns {boolean} true if the object contains both the modulus and the public exponent\\n * properties (n and e)\\n * @todo check for types of n and e. N should be a parseable bigInt object, E should\\n * be a parseable integer number\\n * @private\\n */\\n JSEncryptRSAKey.hasPublicKeyProperty = function (obj) {\\n obj = obj || {};\\n return obj.hasOwnProperty("n") && obj.hasOwnProperty("e");\\n };\\n /**\\n * Check if the object contains ALL the parameters of an RSA key.\\n * @param {Object} [obj={}] - An object that may contain nine rsa key\\n * parameters\\n * @returns {boolean} true if the object contains all the parameters needed\\n * @todo check for types of the parameters all the parameters but the public exponent\\n * should be parseable bigint objects, the public exponent should be a parseable integer number\\n * @private\\n */\\n JSEncryptRSAKey.hasPrivateKeyProperty = function (obj) {\\n obj = obj || {};\\n return (obj.hasOwnProperty("n") &&\\n obj.hasOwnProperty("e") &&\\n obj.hasOwnProperty("d") &&\\n obj.hasOwnProperty("p") &&\\n obj.hasOwnProperty("q") &&\\n obj.hasOwnProperty("dmp1") &&\\n obj.hasOwnProperty("dmq1") &&\\n obj.hasOwnProperty("coeff"));\\n };\\n /**\\n * Parse the properties of obj in the current rsa object. Obj should AT LEAST\\n * include the modulus and public exponent (n, e) parameters.\\n * @param {Object} obj - the object containing rsa parameters\\n * @private\\n */\\n JSEncryptRSAKey.prototype.parsePropertiesFrom = function (obj) {\\n this.n = obj.n;\\n this.e = obj.e;\\n if (obj.hasOwnProperty("d")) {\\n this.d = obj.d;\\n this.p = obj.p;\\n this.q = obj.q;\\n this.dmp1 = obj.dmp1;\\n this.dmq1 = obj.dmq1;\\n this.coeff = obj.coeff;\\n }\\n };\\n return JSEncryptRSAKey;\\n}(_lib_jsbn_rsa__WEBPACK_IMPORTED_MODULE_4__.RSAKey));\\n\\n\\n\\n//# sourceURL=webpack://JSEncrypt/./lib/JSEncryptRSAKey.js?\')},"./lib/index.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(\'__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */ "JSEncrypt": () => (/* reexport safe */ _JSEncrypt__WEBPACK_IMPORTED_MODULE_0__.JSEncrypt),\\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\\n/* harmony export */ });\\n/* harmony import */ var _JSEncrypt__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./JSEncrypt */ "./lib/JSEncrypt.js");\\n\\n\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_JSEncrypt__WEBPACK_IMPORTED_MODULE_0__.JSEncrypt);\\n\\n\\n//# sourceURL=webpack://JSEncrypt/./lib/index.js?\')},"./lib/lib/asn1js/asn1.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(\'__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */ "ASN1": () => (/* binding */ ASN1),\\n/* harmony export */ "ASN1Tag": () => (/* binding */ ASN1Tag),\\n/* harmony export */ "Stream": () => (/* binding */ Stream)\\n/* harmony export */ });\\n/* harmony import */ var _int10__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./int10 */ "./lib/lib/asn1js/int10.js");\\n// ASN.1 JavaScript decoder\\n// Copyright (c) 2008-2014 Lapo Luchini \\n// Permission to use, copy, modify, and/or distribute this software for any\\n// purpose with or without fee is hereby granted, provided that the above\\n// copyright notice and this permission notice appear in all copies.\\n//\\n// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\\n/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */\\n/*global oids */\\n\\nvar ellipsis = "\\\\u2026";\\nvar reTimeS = /^(\\\\d\\\\d)(0[1-9]|1[0-2])(0[1-9]|[12]\\\\d|3[01])([01]\\\\d|2[0-3])(?:([0-5]\\\\d)(?:([0-5]\\\\d)(?:[.,](\\\\d{1,3}))?)?)?(Z|[-+](?:[0]\\\\d|1[0-2])([0-5]\\\\d)?)?$/;\\nvar reTimeL = /^(\\\\d\\\\d\\\\d\\\\d)(0[1-9]|1[0-2])(0[1-9]|[12]\\\\d|3[01])([01]\\\\d|2[0-3])(?:([0-5]\\\\d)(?:([0-5]\\\\d)(?:[.,](\\\\d{1,3}))?)?)?(Z|[-+](?:[0]\\\\d|1[0-2])([0-5]\\\\d)?)?$/;\\nfunction stringCut(str, len) {\\n if (str.length > len) {\\n str = str.substring(0, len) + ellipsis;\\n }\\n return str;\\n}\\nvar Stream = /** @class */ (function () {\\n function Stream(enc, pos) {\\n this.hexDigits = "0123456789ABCDEF";\\n if (enc instanceof Stream) {\\n this.enc = enc.enc;\\n this.pos = enc.pos;\\n }\\n else {\\n // enc should be an array or a binary string\\n this.enc = enc;\\n this.pos = pos;\\n }\\n }\\n Stream.prototype.get = function (pos) {\\n if (pos === undefined) {\\n pos = this.pos++;\\n }\\n if (pos >= this.enc.length) {\\n throw new Error("Requesting byte offset ".concat(pos, " on a stream of length ").concat(this.enc.length));\\n }\\n return ("string" === typeof this.enc) ? this.enc.charCodeAt(pos) : this.enc[pos];\\n };\\n Stream.prototype.hexByte = function (b) {\\n return this.hexDigits.charAt((b >> 4) & 0xF) + this.hexDigits.charAt(b & 0xF);\\n };\\n Stream.prototype.hexDump = function (start, end, raw) {\\n var s = "";\\n for (var i = start; i < end; ++i) {\\n s += this.hexByte(this.get(i));\\n if (raw !== true) {\\n switch (i & 0xF) {\\n case 0x7:\\n s += " ";\\n break;\\n case 0xF:\\n s += "\\\\n";\\n break;\\n default:\\n s += " ";\\n }\\n }\\n }\\n return s;\\n };\\n Stream.prototype.isASCII = function (start, end) {\\n for (var i = start; i < end; ++i) {\\n var c = this.get(i);\\n if (c < 32 || c > 176) {\\n return false;\\n }\\n }\\n return true;\\n };\\n Stream.prototype.parseStringISO = function (start, end) {\\n var s = "";\\n for (var i = start; i < end; ++i) {\\n s += String.fromCharCode(this.get(i));\\n }\\n return s;\\n };\\n Stream.prototype.parseStringUTF = function (start, end) {\\n var s = "";\\n for (var i = start; i < end;) {\\n var c = this.get(i++);\\n if (c < 128) {\\n s += String.fromCharCode(c);\\n }\\n else if ((c > 191) && (c < 224)) {\\n s += String.fromCharCode(((c & 0x1F) << 6) | (this.get(i++) & 0x3F));\\n }\\n else {\\n s += String.fromCharCode(((c & 0x0F) << 12) | ((this.get(i++) & 0x3F) << 6) | (this.get(i++) & 0x3F));\\n }\\n }\\n return s;\\n };\\n Stream.prototype.parseStringBMP = function (start, end) {\\n var str = "";\\n var hi;\\n var lo;\\n for (var i = start; i < end;) {\\n hi = this.get(i++);\\n lo = this.get(i++);\\n str += String.fromCharCode((hi << 8) | lo);\\n }\\n return str;\\n };\\n Stream.prototype.parseTime = function (start, end, shortYear) {\\n var s = this.parseStringISO(start, end);\\n var m = (shortYear ? reTimeS : reTimeL).exec(s);\\n if (!m) {\\n return "Unrecognized time: " + s;\\n }\\n if (shortYear) {\\n // to avoid querying the timer, use the fixed range [1970, 2069]\\n // it will conform with ITU X.400 [-10, +40] sliding window until 2030\\n m[1] = +m[1];\\n m[1] += (+m[1] < 70) ? 2000 : 1900;\\n }\\n s = m[1] + "-" + m[2] + "-" + m[3] + " " + m[4];\\n if (m[5]) {\\n s += ":" + m[5];\\n if (m[6]) {\\n s += ":" + m[6];\\n if (m[7]) {\\n s += "." + m[7];\\n }\\n }\\n }\\n if (m[8]) {\\n s += " UTC";\\n if (m[8] != "Z") {\\n s += m[8];\\n if (m[9]) {\\n s += ":" + m[9];\\n }\\n }\\n }\\n return s;\\n };\\n Stream.prototype.parseInteger = function (start, end) {\\n var v = this.get(start);\\n var neg = (v > 127);\\n var pad = neg ? 255 : 0;\\n var len;\\n var s = "";\\n // skip unuseful bits (not allowed in DER)\\n while (v == pad && ++start < end) {\\n v = this.get(start);\\n }\\n len = end - start;\\n if (len === 0) {\\n return neg ? -1 : 0;\\n }\\n // show bit length of huge integers\\n if (len > 4) {\\n s = v;\\n len <<= 3;\\n while (((+s ^ pad) & 0x80) == 0) {\\n s = +s << 1;\\n --len;\\n }\\n s = "(" + len + " bit)\\\\n";\\n }\\n // decode the integer\\n if (neg) {\\n v = v - 256;\\n }\\n var n = new _int10__WEBPACK_IMPORTED_MODULE_0__.Int10(v);\\n for (var i = start + 1; i < end; ++i) {\\n n.mulAdd(256, this.get(i));\\n }\\n return s + n.toString();\\n };\\n Stream.prototype.parseBitString = function (start, end, maxLength) {\\n var unusedBit = this.get(start);\\n var lenBit = ((end - start - 1) << 3) - unusedBit;\\n var intro = "(" + lenBit + " bit)\\\\n";\\n var s = "";\\n for (var i = start + 1; i < end; ++i) {\\n var b = this.get(i);\\n var skip = (i == end - 1) ? unusedBit : 0;\\n for (var j = 7; j >= skip; --j) {\\n s += (b >> j) & 1 ? "1" : "0";\\n }\\n if (s.length > maxLength) {\\n return intro + stringCut(s, maxLength);\\n }\\n }\\n return intro + s;\\n };\\n Stream.prototype.parseOctetString = function (start, end, maxLength) {\\n if (this.isASCII(start, end)) {\\n return stringCut(this.parseStringISO(start, end), maxLength);\\n }\\n var len = end - start;\\n var s = "(" + len + " byte)\\\\n";\\n maxLength /= 2; // we work in bytes\\n if (len > maxLength) {\\n end = start + maxLength;\\n }\\n for (var i = start; i < end; ++i) {\\n s += this.hexByte(this.get(i));\\n }\\n if (len > maxLength) {\\n s += ellipsis;\\n }\\n return s;\\n };\\n Stream.prototype.parseOID = function (start, end, maxLength) {\\n var s = "";\\n var n = new _int10__WEBPACK_IMPORTED_MODULE_0__.Int10();\\n var bits = 0;\\n for (var i = start; i < end; ++i) {\\n var v = this.get(i);\\n n.mulAdd(128, v & 0x7F);\\n bits += 7;\\n if (!(v & 0x80)) { // finished\\n if (s === "") {\\n n = n.simplify();\\n if (n instanceof _int10__WEBPACK_IMPORTED_MODULE_0__.Int10) {\\n n.sub(80);\\n s = "2." + n.toString();\\n }\\n else {\\n var m = n < 80 ? n < 40 ? 0 : 1 : 2;\\n s = m + "." + (n - m * 40);\\n }\\n }\\n else {\\n s += "." + n.toString();\\n }\\n if (s.length > maxLength) {\\n return stringCut(s, maxLength);\\n }\\n n = new _int10__WEBPACK_IMPORTED_MODULE_0__.Int10();\\n bits = 0;\\n }\\n }\\n if (bits > 0) {\\n s += ".incomplete";\\n }\\n return s;\\n };\\n return Stream;\\n}());\\n\\nvar ASN1 = /** @class */ (function () {\\n function ASN1(stream, header, length, tag, sub) {\\n if (!(tag instanceof ASN1Tag)) {\\n throw new Error("Invalid tag value.");\\n }\\n this.stream = stream;\\n this.header = header;\\n this.length = length;\\n this.tag = tag;\\n this.sub = sub;\\n }\\n ASN1.prototype.typeName = function () {\\n switch (this.tag.tagClass) {\\n case 0: // universal\\n switch (this.tag.tagNumber) {\\n case 0x00:\\n return "EOC";\\n case 0x01:\\n return "BOOLEAN";\\n case 0x02:\\n return "INTEGER";\\n case 0x03:\\n return "BIT_STRING";\\n case 0x04:\\n return "OCTET_STRING";\\n case 0x05:\\n return "NULL";\\n case 0x06:\\n return "OBJECT_IDENTIFIER";\\n case 0x07:\\n return "ObjectDescriptor";\\n case 0x08:\\n return "EXTERNAL";\\n case 0x09:\\n return "REAL";\\n case 0x0A:\\n return "ENUMERATED";\\n case 0x0B:\\n return "EMBEDDED_PDV";\\n case 0x0C:\\n return "UTF8String";\\n case 0x10:\\n return "SEQUENCE";\\n case 0x11:\\n return "SET";\\n case 0x12:\\n return "NumericString";\\n case 0x13:\\n return "PrintableString"; // ASCII subset\\n case 0x14:\\n return "TeletexString"; // aka T61String\\n case 0x15:\\n return "VideotexString";\\n case 0x16:\\n return "IA5String"; // ASCII\\n case 0x17:\\n return "UTCTime";\\n case 0x18:\\n return "GeneralizedTime";\\n case 0x19:\\n return "GraphicString";\\n case 0x1A:\\n return "VisibleString"; // ASCII subset\\n case 0x1B:\\n return "GeneralString";\\n case 0x1C:\\n return "UniversalString";\\n case 0x1E:\\n return "BMPString";\\n }\\n return "Universal_" + this.tag.tagNumber.toString();\\n case 1:\\n return "Application_" + this.tag.tagNumber.toString();\\n case 2:\\n return "[" + this.tag.tagNumber.toString() + "]"; // Context\\n case 3:\\n return "Private_" + this.tag.tagNumber.toString();\\n }\\n };\\n ASN1.prototype.content = function (maxLength) {\\n if (this.tag === undefined) {\\n return null;\\n }\\n if (maxLength === undefined) {\\n maxLength = Infinity;\\n }\\n var content = this.posContent();\\n var len = Math.abs(this.length);\\n if (!this.tag.isUniversal()) {\\n if (this.sub !== null) {\\n return "(" + this.sub.length + " elem)";\\n }\\n return this.stream.parseOctetString(content, content + len, maxLength);\\n }\\n switch (this.tag.tagNumber) {\\n case 0x01: // BOOLEAN\\n return (this.stream.get(content) === 0) ? "false" : "true";\\n case 0x02: // INTEGER\\n return this.stream.parseInteger(content, content + len);\\n case 0x03: // BIT_STRING\\n return this.sub ? "(" + this.sub.length + " elem)" :\\n this.stream.parseBitString(content, content + len, maxLength);\\n case 0x04: // OCTET_STRING\\n return this.sub ? "(" + this.sub.length + " elem)" :\\n this.stream.parseOctetString(content, content + len, maxLength);\\n // case 0x05: // NULL\\n case 0x06: // OBJECT_IDENTIFIER\\n return this.stream.parseOID(content, content + len, maxLength);\\n // case 0x07: // ObjectDescriptor\\n // case 0x08: // EXTERNAL\\n // case 0x09: // REAL\\n // case 0x0A: // ENUMERATED\\n // case 0x0B: // EMBEDDED_PDV\\n case 0x10: // SEQUENCE\\n case 0x11: // SET\\n if (this.sub !== null) {\\n return "(" + this.sub.length + " elem)";\\n }\\n else {\\n return "(no elem)";\\n }\\n case 0x0C: // UTF8String\\n return stringCut(this.stream.parseStringUTF(content, content + len), maxLength);\\n case 0x12: // NumericString\\n case 0x13: // PrintableString\\n case 0x14: // TeletexString\\n case 0x15: // VideotexString\\n case 0x16: // IA5String\\n // case 0x19: // GraphicString\\n case 0x1A: // VisibleString\\n // case 0x1B: // GeneralString\\n // case 0x1C: // UniversalString\\n return stringCut(this.stream.parseStringISO(content, content + len), maxLength);\\n case 0x1E: // BMPString\\n return stringCut(this.stream.parseStringBMP(content, content + len), maxLength);\\n case 0x17: // UTCTime\\n case 0x18: // GeneralizedTime\\n return this.stream.parseTime(content, content + len, (this.tag.tagNumber == 0x17));\\n }\\n return null;\\n };\\n ASN1.prototype.toString = function () {\\n return this.typeName() + "@" + this.stream.pos + "[header:" + this.header + ",length:" + this.length + ",sub:" + ((this.sub === null) ? "null" : this.sub.length) + "]";\\n };\\n ASN1.prototype.toPrettyString = function (indent) {\\n if (indent === undefined) {\\n indent = "";\\n }\\n var s = indent + this.typeName() + " @" + this.stream.pos;\\n if (this.length >= 0) {\\n s += "+";\\n }\\n s += this.length;\\n if (this.tag.tagConstructed) {\\n s += " (constructed)";\\n }\\n else if ((this.tag.isUniversal() && ((this.tag.tagNumber == 0x03) || (this.tag.tagNumber == 0x04))) && (this.sub !== null)) {\\n s += " (encapsulates)";\\n }\\n s += "\\\\n";\\n if (this.sub !== null) {\\n indent += " ";\\n for (var i = 0, max = this.sub.length; i < max; ++i) {\\n s += this.sub[i].toPrettyString(indent);\\n }\\n }\\n return s;\\n };\\n ASN1.prototype.posStart = function () {\\n return this.stream.pos;\\n };\\n ASN1.prototype.posContent = function () {\\n return this.stream.pos + this.header;\\n };\\n ASN1.prototype.posEnd = function () {\\n return this.stream.pos + this.header + Math.abs(this.length);\\n };\\n ASN1.prototype.toHexString = function () {\\n return this.stream.hexDump(this.posStart(), this.posEnd(), true);\\n };\\n ASN1.decodeLength = function (stream) {\\n var buf = stream.get();\\n var len = buf & 0x7F;\\n if (len == buf) {\\n return len;\\n }\\n // no reason to use Int10, as it would be a huge buffer anyways\\n if (len > 6) {\\n throw new Error("Length over 48 bits not supported at position " + (stream.pos - 1));\\n }\\n if (len === 0) {\\n return null;\\n } // undefined\\n buf = 0;\\n for (var i = 0; i < len; ++i) {\\n buf = (buf * 256) + stream.get();\\n }\\n return buf;\\n };\\n /**\\n * Retrieve the hexadecimal value (as a string) of the current ASN.1 element\\n * @returns {string}\\n * @public\\n */\\n ASN1.prototype.getHexStringValue = function () {\\n var hexString = this.toHexString();\\n var offset = this.header * 2;\\n var length = this.length * 2;\\n return hexString.substr(offset, length);\\n };\\n ASN1.decode = function (str) {\\n var stream;\\n if (!(str instanceof Stream)) {\\n stream = new Stream(str, 0);\\n }\\n else {\\n stream = str;\\n }\\n var streamStart = new Stream(stream);\\n var tag = new ASN1Tag(stream);\\n var len = ASN1.decodeLength(stream);\\n var start = stream.pos;\\n var header = start - streamStart.pos;\\n var sub = null;\\n var getSub = function () {\\n var ret = [];\\n if (len !== null) {\\n // definite length\\n var end = start + len;\\n while (stream.pos < end) {\\n ret[ret.length] = ASN1.decode(stream);\\n }\\n if (stream.pos != end) {\\n throw new Error("Content size is not correct for container starting at offset " + start);\\n }\\n }\\n else {\\n // undefined length\\n try {\\n for (;;) {\\n var s = ASN1.decode(stream);\\n if (s.tag.isEOC()) {\\n break;\\n }\\n ret[ret.length] = s;\\n }\\n len = start - stream.pos; // undefined lengths are represented as negative values\\n }\\n catch (e) {\\n throw new Error("Exception while decoding undefined length content: " + e);\\n }\\n }\\n return ret;\\n };\\n if (tag.tagConstructed) {\\n // must have valid content\\n sub = getSub();\\n }\\n else if (tag.isUniversal() && ((tag.tagNumber == 0x03) || (tag.tagNumber == 0x04))) {\\n // sometimes BitString and OctetString are used to encapsulate ASN.1\\n try {\\n if (tag.tagNumber == 0x03) {\\n if (stream.get() != 0) {\\n throw new Error("BIT STRINGs with unused bits cannot encapsulate.");\\n }\\n }\\n sub = getSub();\\n for (var i = 0; i < sub.length; ++i) {\\n if (sub[i].tag.isEOC()) {\\n throw new Error("EOC is not supposed to be actual content.");\\n }\\n }\\n }\\n catch (e) {\\n // but silently ignore when they don\\\'t\\n sub = null;\\n }\\n }\\n if (sub === null) {\\n if (len === null) {\\n throw new Error("We can\\\'t skip over an invalid tag with undefined length at offset " + start);\\n }\\n stream.pos = start + Math.abs(len);\\n }\\n return new ASN1(streamStart, header, len, tag, sub);\\n };\\n return ASN1;\\n}());\\n\\nvar ASN1Tag = /** @class */ (function () {\\n function ASN1Tag(stream) {\\n var buf = stream.get();\\n this.tagClass = buf >> 6;\\n this.tagConstructed = ((buf & 0x20) !== 0);\\n this.tagNumber = buf & 0x1F;\\n if (this.tagNumber == 0x1F) { // long tag\\n var n = new _int10__WEBPACK_IMPORTED_MODULE_0__.Int10();\\n do {\\n buf = stream.get();\\n n.mulAdd(128, buf & 0x7F);\\n } while (buf & 0x80);\\n this.tagNumber = n.simplify();\\n }\\n }\\n ASN1Tag.prototype.isUniversal = function () {\\n return this.tagClass === 0x00;\\n };\\n ASN1Tag.prototype.isEOC = function () {\\n return this.tagClass === 0x00 && this.tagNumber === 0x00;\\n };\\n return ASN1Tag;\\n}());\\n\\n\\n\\n//# sourceURL=webpack://JSEncrypt/./lib/lib/asn1js/asn1.js?\')},"./lib/lib/asn1js/base64.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(\'__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */ "Base64": () => (/* binding */ Base64)\\n/* harmony export */ });\\n// Base64 JavaScript decoder\\n// Copyright (c) 2008-2013 Lapo Luchini \\n// Permission to use, copy, modify, and/or distribute this software for any\\n// purpose with or without fee is hereby granted, provided that the above\\n// copyright notice and this permission notice appear in all copies.\\n//\\n// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\\n/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */\\nvar decoder;\\nvar Base64 = {\\n decode: function (a) {\\n var i;\\n if (decoder === undefined) {\\n var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";\\n var ignore = "= \\\\f\\\\n\\\\r\\\\t\\\\u00A0\\\\u2028\\\\u2029";\\n decoder = Object.create(null);\\n for (i = 0; i < 64; ++i) {\\n decoder[b64.charAt(i)] = i;\\n }\\n decoder[\\\'-\\\'] = 62; //+\\n decoder[\\\'_\\\'] = 63; //-\\n for (i = 0; i < ignore.length; ++i) {\\n decoder[ignore.charAt(i)] = -1;\\n }\\n }\\n var out = [];\\n var bits = 0;\\n var char_count = 0;\\n for (i = 0; i < a.length; ++i) {\\n var c = a.charAt(i);\\n if (c == "=") {\\n break;\\n }\\n c = decoder[c];\\n if (c == -1) {\\n continue;\\n }\\n if (c === undefined) {\\n throw new Error("Illegal character at offset " + i);\\n }\\n bits |= c;\\n if (++char_count >= 4) {\\n out[out.length] = (bits >> 16);\\n out[out.length] = (bits >> 8) & 0xFF;\\n out[out.length] = bits & 0xFF;\\n bits = 0;\\n char_count = 0;\\n }\\n else {\\n bits <<= 6;\\n }\\n }\\n switch (char_count) {\\n case 1:\\n throw new Error("Base64 encoding incomplete: at least 2 bits missing");\\n case 2:\\n out[out.length] = (bits >> 10);\\n break;\\n case 3:\\n out[out.length] = (bits >> 16);\\n out[out.length] = (bits >> 8) & 0xFF;\\n break;\\n }\\n return out;\\n },\\n re: /-----BEGIN [^-]+-----([A-Za-z0-9+\\\\/=\\\\s]+)-----END [^-]+-----|begin-base64[^\\\\n]+\\\\n([A-Za-z0-9+\\\\/=\\\\s]+)====/,\\n unarmor: function (a) {\\n var m = Base64.re.exec(a);\\n if (m) {\\n if (m[1]) {\\n a = m[1];\\n }\\n else if (m[2]) {\\n a = m[2];\\n }\\n else {\\n throw new Error("RegExp out of sync");\\n }\\n }\\n return Base64.decode(a);\\n }\\n};\\n\\n\\n//# sourceURL=webpack://JSEncrypt/./lib/lib/asn1js/base64.js?\')},"./lib/lib/asn1js/hex.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(\'__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */ "Hex": () => (/* binding */ Hex)\\n/* harmony export */ });\\n// Hex JavaScript decoder\\n// Copyright (c) 2008-2013 Lapo Luchini \\n// Permission to use, copy, modify, and/or distribute this software for any\\n// purpose with or without fee is hereby granted, provided that the above\\n// copyright notice and this permission notice appear in all copies.\\n//\\n// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\\n/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */\\nvar decoder;\\nvar Hex = {\\n decode: function (a) {\\n var i;\\n if (decoder === undefined) {\\n var hex = "0123456789ABCDEF";\\n var ignore = " \\\\f\\\\n\\\\r\\\\t\\\\u00A0\\\\u2028\\\\u2029";\\n decoder = {};\\n for (i = 0; i < 16; ++i) {\\n decoder[hex.charAt(i)] = i;\\n }\\n hex = hex.toLowerCase();\\n for (i = 10; i < 16; ++i) {\\n decoder[hex.charAt(i)] = i;\\n }\\n for (i = 0; i < ignore.length; ++i) {\\n decoder[ignore.charAt(i)] = -1;\\n }\\n }\\n var out = [];\\n var bits = 0;\\n var char_count = 0;\\n for (i = 0; i < a.length; ++i) {\\n var c = a.charAt(i);\\n if (c == "=") {\\n break;\\n }\\n c = decoder[c];\\n if (c == -1) {\\n continue;\\n }\\n if (c === undefined) {\\n throw new Error("Illegal character at offset " + i);\\n }\\n bits |= c;\\n if (++char_count >= 2) {\\n out[out.length] = bits;\\n bits = 0;\\n char_count = 0;\\n }\\n else {\\n bits <<= 4;\\n }\\n }\\n if (char_count) {\\n throw new Error("Hex encoding incomplete: 4 bits missing");\\n }\\n return out;\\n }\\n};\\n\\n\\n//# sourceURL=webpack://JSEncrypt/./lib/lib/asn1js/hex.js?\')},"./lib/lib/asn1js/int10.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(\'__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */ "Int10": () => (/* binding */ Int10)\\n/* harmony export */ });\\n// Big integer base-10 printing library\\n// Copyright (c) 2014 Lapo Luchini \\n// Permission to use, copy, modify, and/or distribute this software for any\\n// purpose with or without fee is hereby granted, provided that the above\\n// copyright notice and this permission notice appear in all copies.\\n//\\n// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\\n/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */\\nvar max = 10000000000000; // biggest integer that can still fit 2^53 when multiplied by 256\\nvar Int10 = /** @class */ (function () {\\n function Int10(value) {\\n this.buf = [+value || 0];\\n }\\n Int10.prototype.mulAdd = function (m, c) {\\n // assert(m <= 256)\\n var b = this.buf;\\n var l = b.length;\\n var i;\\n var t;\\n for (i = 0; i < l; ++i) {\\n t = b[i] * m + c;\\n if (t < max) {\\n c = 0;\\n }\\n else {\\n c = 0 | (t / max);\\n t -= c * max;\\n }\\n b[i] = t;\\n }\\n if (c > 0) {\\n b[i] = c;\\n }\\n };\\n Int10.prototype.sub = function (c) {\\n // assert(m <= 256)\\n var b = this.buf;\\n var l = b.length;\\n var i;\\n var t;\\n for (i = 0; i < l; ++i) {\\n t = b[i] - c;\\n if (t < 0) {\\n t += max;\\n c = 1;\\n }\\n else {\\n c = 0;\\n }\\n b[i] = t;\\n }\\n while (b[b.length - 1] === 0) {\\n b.pop();\\n }\\n };\\n Int10.prototype.toString = function (base) {\\n if ((base || 10) != 10) {\\n throw new Error("only base 10 is supported");\\n }\\n var b = this.buf;\\n var s = b[b.length - 1].toString();\\n for (var i = b.length - 2; i >= 0; --i) {\\n s += (max + b[i]).toString().substring(1);\\n }\\n return s;\\n };\\n Int10.prototype.valueOf = function () {\\n var b = this.buf;\\n var v = 0;\\n for (var i = b.length - 1; i >= 0; --i) {\\n v = v * max + b[i];\\n }\\n return v;\\n };\\n Int10.prototype.simplify = function () {\\n var b = this.buf;\\n return (b.length == 1) ? b[0] : this;\\n };\\n return Int10;\\n}());\\n\\n\\n\\n//# sourceURL=webpack://JSEncrypt/./lib/lib/asn1js/int10.js?\')},"./lib/lib/jsbn/base64.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(\'__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */ "b64toBA": () => (/* binding */ b64toBA),\\n/* harmony export */ "b64tohex": () => (/* binding */ b64tohex),\\n/* harmony export */ "hex2b64": () => (/* binding */ hex2b64)\\n/* harmony export */ });\\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ "./lib/lib/jsbn/util.js");\\n\\nvar b64map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";\\nvar b64pad = "=";\\nfunction hex2b64(h) {\\n var i;\\n var c;\\n var ret = "";\\n for (i = 0; i + 3 <= h.length; i += 3) {\\n c = parseInt(h.substring(i, i + 3), 16);\\n ret += b64map.charAt(c >> 6) + b64map.charAt(c & 63);\\n }\\n if (i + 1 == h.length) {\\n c = parseInt(h.substring(i, i + 1), 16);\\n ret += b64map.charAt(c << 2);\\n }\\n else if (i + 2 == h.length) {\\n c = parseInt(h.substring(i, i + 2), 16);\\n ret += b64map.charAt(c >> 2) + b64map.charAt((c & 3) << 4);\\n }\\n while ((ret.length & 3) > 0) {\\n ret += b64pad;\\n }\\n return ret;\\n}\\n// convert a base64 string to hex\\nfunction b64tohex(s) {\\n var ret = "";\\n var i;\\n var k = 0; // b64 state, 0-3\\n var slop = 0;\\n for (i = 0; i < s.length; ++i) {\\n if (s.charAt(i) == b64pad) {\\n break;\\n }\\n var v = b64map.indexOf(s.charAt(i));\\n if (v < 0) {\\n continue;\\n }\\n if (k == 0) {\\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(v >> 2);\\n slop = v & 3;\\n k = 1;\\n }\\n else if (k == 1) {\\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)((slop << 2) | (v >> 4));\\n slop = v & 0xf;\\n k = 2;\\n }\\n else if (k == 2) {\\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(slop);\\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(v >> 2);\\n slop = v & 3;\\n k = 3;\\n }\\n else {\\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)((slop << 2) | (v >> 4));\\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(v & 0xf);\\n k = 0;\\n }\\n }\\n if (k == 1) {\\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(slop << 2);\\n }\\n return ret;\\n}\\n// convert a base64 string to a byte/number array\\nfunction b64toBA(s) {\\n // piggyback on b64tohex for now, optimize later\\n var h = b64tohex(s);\\n var i;\\n var a = [];\\n for (i = 0; 2 * i < h.length; ++i) {\\n a[i] = parseInt(h.substring(2 * i, 2 * i + 2), 16);\\n }\\n return a;\\n}\\n\\n\\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/base64.js?\')},"./lib/lib/jsbn/jsbn.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(\'__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */ "BigInteger": () => (/* binding */ BigInteger),\\n/* harmony export */ "intAt": () => (/* binding */ intAt),\\n/* harmony export */ "nbi": () => (/* binding */ nbi),\\n/* harmony export */ "nbits": () => (/* binding */ nbits),\\n/* harmony export */ "nbv": () => (/* binding */ nbv),\\n/* harmony export */ "parseBigInt": () => (/* binding */ parseBigInt)\\n/* harmony export */ });\\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ "./lib/lib/jsbn/util.js");\\n// Copyright (c) 2005 Tom Wu\\n// All Rights Reserved.\\n// See "LICENSE" for details.\\n// Basic JavaScript BN library - subset useful for RSA encryption.\\n\\n// Bits per digit\\nvar dbits;\\n// JavaScript engine analysis\\nvar canary = 0xdeadbeefcafe;\\nvar j_lm = ((canary & 0xffffff) == 0xefcafe);\\n//#region\\nvar lowprimes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997];\\nvar lplim = (1 << 26) / lowprimes[lowprimes.length - 1];\\n//#endregion\\n// (public) Constructor\\nvar BigInteger = /** @class */ (function () {\\n function BigInteger(a, b, c) {\\n if (a != null) {\\n if ("number" == typeof a) {\\n this.fromNumber(a, b, c);\\n }\\n else if (b == null && "string" != typeof a) {\\n this.fromString(a, 256);\\n }\\n else {\\n this.fromString(a, b);\\n }\\n }\\n }\\n //#region PUBLIC\\n // BigInteger.prototype.toString = bnToString;\\n // (public) return string representation in given radix\\n BigInteger.prototype.toString = function (b) {\\n if (this.s < 0) {\\n return "-" + this.negate().toString(b);\\n }\\n var k;\\n if (b == 16) {\\n k = 4;\\n }\\n else if (b == 8) {\\n k = 3;\\n }\\n else if (b == 2) {\\n k = 1;\\n }\\n else if (b == 32) {\\n k = 5;\\n }\\n else if (b == 4) {\\n k = 2;\\n }\\n else {\\n return this.toRadix(b);\\n }\\n var km = (1 << k) - 1;\\n var d;\\n var m = false;\\n var r = "";\\n var i = this.t;\\n var p = this.DB - (i * this.DB) % k;\\n if (i-- > 0) {\\n if (p < this.DB && (d = this[i] >> p) > 0) {\\n m = true;\\n r = (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(d);\\n }\\n while (i >= 0) {\\n if (p < k) {\\n d = (this[i] & ((1 << p) - 1)) << (k - p);\\n d |= this[--i] >> (p += this.DB - k);\\n }\\n else {\\n d = (this[i] >> (p -= k)) & km;\\n if (p <= 0) {\\n p += this.DB;\\n --i;\\n }\\n }\\n if (d > 0) {\\n m = true;\\n }\\n if (m) {\\n r += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(d);\\n }\\n }\\n }\\n return m ? r : "0";\\n };\\n // BigInteger.prototype.negate = bnNegate;\\n // (public) -this\\n BigInteger.prototype.negate = function () {\\n var r = nbi();\\n BigInteger.ZERO.subTo(this, r);\\n return r;\\n };\\n // BigInteger.prototype.abs = bnAbs;\\n // (public) |this|\\n BigInteger.prototype.abs = function () {\\n return (this.s < 0) ? this.negate() : this;\\n };\\n // BigInteger.prototype.compareTo = bnCompareTo;\\n // (public) return + if this > a, - if this < a, 0 if equal\\n BigInteger.prototype.compareTo = function (a) {\\n var r = this.s - a.s;\\n if (r != 0) {\\n return r;\\n }\\n var i = this.t;\\n r = i - a.t;\\n if (r != 0) {\\n return (this.s < 0) ? -r : r;\\n }\\n while (--i >= 0) {\\n if ((r = this[i] - a[i]) != 0) {\\n return r;\\n }\\n }\\n return 0;\\n };\\n // BigInteger.prototype.bitLength = bnBitLength;\\n // (public) return the number of bits in "this"\\n BigInteger.prototype.bitLength = function () {\\n if (this.t <= 0) {\\n return 0;\\n }\\n return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM));\\n };\\n // BigInteger.prototype.mod = bnMod;\\n // (public) this mod a\\n BigInteger.prototype.mod = function (a) {\\n var r = nbi();\\n this.abs().divRemTo(a, null, r);\\n if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) {\\n a.subTo(r, r);\\n }\\n return r;\\n };\\n // BigInteger.prototype.modPowInt = bnModPowInt;\\n // (public) this^e % m, 0 <= e < 2^32\\n BigInteger.prototype.modPowInt = function (e, m) {\\n var z;\\n if (e < 256 || m.isEven()) {\\n z = new Classic(m);\\n }\\n else {\\n z = new Montgomery(m);\\n }\\n return this.exp(e, z);\\n };\\n // BigInteger.prototype.clone = bnClone;\\n // (public)\\n BigInteger.prototype.clone = function () {\\n var r = nbi();\\n this.copyTo(r);\\n return r;\\n };\\n // BigInteger.prototype.intValue = bnIntValue;\\n // (public) return value as integer\\n BigInteger.prototype.intValue = function () {\\n if (this.s < 0) {\\n if (this.t == 1) {\\n return this[0] - this.DV;\\n }\\n else if (this.t == 0) {\\n return -1;\\n }\\n }\\n else if (this.t == 1) {\\n return this[0];\\n }\\n else if (this.t == 0) {\\n return 0;\\n }\\n // assumes 16 < DB < 32\\n return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0];\\n };\\n // BigInteger.prototype.byteValue = bnByteValue;\\n // (public) return value as byte\\n BigInteger.prototype.byteValue = function () {\\n return (this.t == 0) ? this.s : (this[0] << 24) >> 24;\\n };\\n // BigInteger.prototype.shortValue = bnShortValue;\\n // (public) return value as short (assumes DB>=16)\\n BigInteger.prototype.shortValue = function () {\\n return (this.t == 0) ? this.s : (this[0] << 16) >> 16;\\n };\\n // BigInteger.prototype.signum = bnSigNum;\\n // (public) 0 if this == 0, 1 if this > 0\\n BigInteger.prototype.signum = function () {\\n if (this.s < 0) {\\n return -1;\\n }\\n else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) {\\n return 0;\\n }\\n else {\\n return 1;\\n }\\n };\\n // BigInteger.prototype.toByteArray = bnToByteArray;\\n // (public) convert to bigendian byte array\\n BigInteger.prototype.toByteArray = function () {\\n var i = this.t;\\n var r = [];\\n r[0] = this.s;\\n var p = this.DB - (i * this.DB) % 8;\\n var d;\\n var k = 0;\\n if (i-- > 0) {\\n if (p < this.DB && (d = this[i] >> p) != (this.s & this.DM) >> p) {\\n r[k++] = d | (this.s << (this.DB - p));\\n }\\n while (i >= 0) {\\n if (p < 8) {\\n d = (this[i] & ((1 << p) - 1)) << (8 - p);\\n d |= this[--i] >> (p += this.DB - 8);\\n }\\n else {\\n d = (this[i] >> (p -= 8)) & 0xff;\\n if (p <= 0) {\\n p += this.DB;\\n --i;\\n }\\n }\\n if ((d & 0x80) != 0) {\\n d |= -256;\\n }\\n if (k == 0 && (this.s & 0x80) != (d & 0x80)) {\\n ++k;\\n }\\n if (k > 0 || d != this.s) {\\n r[k++] = d;\\n }\\n }\\n }\\n return r;\\n };\\n // BigInteger.prototype.equals = bnEquals;\\n BigInteger.prototype.equals = function (a) {\\n return (this.compareTo(a) == 0);\\n };\\n // BigInteger.prototype.min = bnMin;\\n BigInteger.prototype.min = function (a) {\\n return (this.compareTo(a) < 0) ? this : a;\\n };\\n // BigInteger.prototype.max = bnMax;\\n BigInteger.prototype.max = function (a) {\\n return (this.compareTo(a) > 0) ? this : a;\\n };\\n // BigInteger.prototype.and = bnAnd;\\n BigInteger.prototype.and = function (a) {\\n var r = nbi();\\n this.bitwiseTo(a, _util__WEBPACK_IMPORTED_MODULE_0__.op_and, r);\\n return r;\\n };\\n // BigInteger.prototype.or = bnOr;\\n BigInteger.prototype.or = function (a) {\\n var r = nbi();\\n this.bitwiseTo(a, _util__WEBPACK_IMPORTED_MODULE_0__.op_or, r);\\n return r;\\n };\\n // BigInteger.prototype.xor = bnXor;\\n BigInteger.prototype.xor = function (a) {\\n var r = nbi();\\n this.bitwiseTo(a, _util__WEBPACK_IMPORTED_MODULE_0__.op_xor, r);\\n return r;\\n };\\n // BigInteger.prototype.andNot = bnAndNot;\\n BigInteger.prototype.andNot = function (a) {\\n var r = nbi();\\n this.bitwiseTo(a, _util__WEBPACK_IMPORTED_MODULE_0__.op_andnot, r);\\n return r;\\n };\\n // BigInteger.prototype.not = bnNot;\\n // (public) ~this\\n BigInteger.prototype.not = function () {\\n var r = nbi();\\n for (var i = 0; i < this.t; ++i) {\\n r[i] = this.DM & ~this[i];\\n }\\n r.t = this.t;\\n r.s = ~this.s;\\n return r;\\n };\\n // BigInteger.prototype.shiftLeft = bnShiftLeft;\\n // (public) this << n\\n BigInteger.prototype.shiftLeft = function (n) {\\n var r = nbi();\\n if (n < 0) {\\n this.rShiftTo(-n, r);\\n }\\n else {\\n this.lShiftTo(n, r);\\n }\\n return r;\\n };\\n // BigInteger.prototype.shiftRight = bnShiftRight;\\n // (public) this >> n\\n BigInteger.prototype.shiftRight = function (n) {\\n var r = nbi();\\n if (n < 0) {\\n this.lShiftTo(-n, r);\\n }\\n else {\\n this.rShiftTo(n, r);\\n }\\n return r;\\n };\\n // BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit;\\n // (public) returns index of lowest 1-bit (or -1 if none)\\n BigInteger.prototype.getLowestSetBit = function () {\\n for (var i = 0; i < this.t; ++i) {\\n if (this[i] != 0) {\\n return i * this.DB + (0,_util__WEBPACK_IMPORTED_MODULE_0__.lbit)(this[i]);\\n }\\n }\\n if (this.s < 0) {\\n return this.t * this.DB;\\n }\\n return -1;\\n };\\n // BigInteger.prototype.bitCount = bnBitCount;\\n // (public) return number of set bits\\n BigInteger.prototype.bitCount = function () {\\n var r = 0;\\n var x = this.s & this.DM;\\n for (var i = 0; i < this.t; ++i) {\\n r += (0,_util__WEBPACK_IMPORTED_MODULE_0__.cbit)(this[i] ^ x);\\n }\\n return r;\\n };\\n // BigInteger.prototype.testBit = bnTestBit;\\n // (public) true iff nth bit is set\\n BigInteger.prototype.testBit = function (n) {\\n var j = Math.floor(n / this.DB);\\n if (j >= this.t) {\\n return (this.s != 0);\\n }\\n return ((this[j] & (1 << (n % this.DB))) != 0);\\n };\\n // BigInteger.prototype.setBit = bnSetBit;\\n // (public) this | (1< 1) {\\n var g2 = nbi();\\n z.sqrTo(g[1], g2);\\n while (n <= km) {\\n g[n] = nbi();\\n z.mulTo(g2, g[n - 2], g[n]);\\n n += 2;\\n }\\n }\\n var j = e.t - 1;\\n var w;\\n var is1 = true;\\n var r2 = nbi();\\n var t;\\n i = nbits(e[j]) - 1;\\n while (j >= 0) {\\n if (i >= k1) {\\n w = (e[j] >> (i - k1)) & km;\\n }\\n else {\\n w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i);\\n if (j > 0) {\\n w |= e[j - 1] >> (this.DB + i - k1);\\n }\\n }\\n n = k;\\n while ((w & 1) == 0) {\\n w >>= 1;\\n --n;\\n }\\n if ((i -= n) < 0) {\\n i += this.DB;\\n --j;\\n }\\n if (is1) { // ret == 1, don\\\'t bother squaring or multiplying it\\n g[w].copyTo(r);\\n is1 = false;\\n }\\n else {\\n while (n > 1) {\\n z.sqrTo(r, r2);\\n z.sqrTo(r2, r);\\n n -= 2;\\n }\\n if (n > 0) {\\n z.sqrTo(r, r2);\\n }\\n else {\\n t = r;\\n r = r2;\\n r2 = t;\\n }\\n z.mulTo(r2, g[w], r);\\n }\\n while (j >= 0 && (e[j] & (1 << i)) == 0) {\\n z.sqrTo(r, r2);\\n t = r;\\n r = r2;\\n r2 = t;\\n if (--i < 0) {\\n i = this.DB - 1;\\n --j;\\n }\\n }\\n }\\n return z.revert(r);\\n };\\n // BigInteger.prototype.modInverse = bnModInverse;\\n // (public) 1/this % m (HAC 14.61)\\n BigInteger.prototype.modInverse = function (m) {\\n var ac = m.isEven();\\n if ((this.isEven() && ac) || m.signum() == 0) {\\n return BigInteger.ZERO;\\n }\\n var u = m.clone();\\n var v = this.clone();\\n var a = nbv(1);\\n var b = nbv(0);\\n var c = nbv(0);\\n var d = nbv(1);\\n while (u.signum() != 0) {\\n while (u.isEven()) {\\n u.rShiftTo(1, u);\\n if (ac) {\\n if (!a.isEven() || !b.isEven()) {\\n a.addTo(this, a);\\n b.subTo(m, b);\\n }\\n a.rShiftTo(1, a);\\n }\\n else if (!b.isEven()) {\\n b.subTo(m, b);\\n }\\n b.rShiftTo(1, b);\\n }\\n while (v.isEven()) {\\n v.rShiftTo(1, v);\\n if (ac) {\\n if (!c.isEven() || !d.isEven()) {\\n c.addTo(this, c);\\n d.subTo(m, d);\\n }\\n c.rShiftTo(1, c);\\n }\\n else if (!d.isEven()) {\\n d.subTo(m, d);\\n }\\n d.rShiftTo(1, d);\\n }\\n if (u.compareTo(v) >= 0) {\\n u.subTo(v, u);\\n if (ac) {\\n a.subTo(c, a);\\n }\\n b.subTo(d, b);\\n }\\n else {\\n v.subTo(u, v);\\n if (ac) {\\n c.subTo(a, c);\\n }\\n d.subTo(b, d);\\n }\\n }\\n if (v.compareTo(BigInteger.ONE) != 0) {\\n return BigInteger.ZERO;\\n }\\n if (d.compareTo(m) >= 0) {\\n return d.subtract(m);\\n }\\n if (d.signum() < 0) {\\n d.addTo(m, d);\\n }\\n else {\\n return d;\\n }\\n if (d.signum() < 0) {\\n return d.add(m);\\n }\\n else {\\n return d;\\n }\\n };\\n // BigInteger.prototype.pow = bnPow;\\n // (public) this^e\\n BigInteger.prototype.pow = function (e) {\\n return this.exp(e, new NullExp());\\n };\\n // BigInteger.prototype.gcd = bnGCD;\\n // (public) gcd(this,a) (HAC 14.54)\\n BigInteger.prototype.gcd = function (a) {\\n var x = (this.s < 0) ? this.negate() : this.clone();\\n var y = (a.s < 0) ? a.negate() : a.clone();\\n if (x.compareTo(y) < 0) {\\n var t = x;\\n x = y;\\n y = t;\\n }\\n var i = x.getLowestSetBit();\\n var g = y.getLowestSetBit();\\n if (g < 0) {\\n return x;\\n }\\n if (i < g) {\\n g = i;\\n }\\n if (g > 0) {\\n x.rShiftTo(g, x);\\n y.rShiftTo(g, y);\\n }\\n while (x.signum() > 0) {\\n if ((i = x.getLowestSetBit()) > 0) {\\n x.rShiftTo(i, x);\\n }\\n if ((i = y.getLowestSetBit()) > 0) {\\n y.rShiftTo(i, y);\\n }\\n if (x.compareTo(y) >= 0) {\\n x.subTo(y, x);\\n x.rShiftTo(1, x);\\n }\\n else {\\n y.subTo(x, y);\\n y.rShiftTo(1, y);\\n }\\n }\\n if (g > 0) {\\n y.lShiftTo(g, y);\\n }\\n return y;\\n };\\n // BigInteger.prototype.isProbablePrime = bnIsProbablePrime;\\n // (public) test primality with certainty >= 1-.5^t\\n BigInteger.prototype.isProbablePrime = function (t) {\\n var i;\\n var x = this.abs();\\n if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {\\n for (i = 0; i < lowprimes.length; ++i) {\\n if (x[0] == lowprimes[i]) {\\n return true;\\n }\\n }\\n return false;\\n }\\n if (x.isEven()) {\\n return false;\\n }\\n i = 1;\\n while (i < lowprimes.length) {\\n var m = lowprimes[i];\\n var j = i + 1;\\n while (j < lowprimes.length && m < lplim) {\\n m *= lowprimes[j++];\\n }\\n m = x.modInt(m);\\n while (i < j) {\\n if (m % lowprimes[i++] == 0) {\\n return false;\\n }\\n }\\n }\\n return x.millerRabin(t);\\n };\\n //#endregion PUBLIC\\n //#region PROTECTED\\n // BigInteger.prototype.copyTo = bnpCopyTo;\\n // (protected) copy this to r\\n BigInteger.prototype.copyTo = function (r) {\\n for (var i = this.t - 1; i >= 0; --i) {\\n r[i] = this[i];\\n }\\n r.t = this.t;\\n r.s = this.s;\\n };\\n // BigInteger.prototype.fromInt = bnpFromInt;\\n // (protected) set from integer value x, -DV <= x < DV\\n BigInteger.prototype.fromInt = function (x) {\\n this.t = 1;\\n this.s = (x < 0) ? -1 : 0;\\n if (x > 0) {\\n this[0] = x;\\n }\\n else if (x < -1) {\\n this[0] = x + this.DV;\\n }\\n else {\\n this.t = 0;\\n }\\n };\\n // BigInteger.prototype.fromString = bnpFromString;\\n // (protected) set from string and radix\\n BigInteger.prototype.fromString = function (s, b) {\\n var k;\\n if (b == 16) {\\n k = 4;\\n }\\n else if (b == 8) {\\n k = 3;\\n }\\n else if (b == 256) {\\n k = 8;\\n /* byte array */\\n }\\n else if (b == 2) {\\n k = 1;\\n }\\n else if (b == 32) {\\n k = 5;\\n }\\n else if (b == 4) {\\n k = 2;\\n }\\n else {\\n this.fromRadix(s, b);\\n return;\\n }\\n this.t = 0;\\n this.s = 0;\\n var i = s.length;\\n var mi = false;\\n var sh = 0;\\n while (--i >= 0) {\\n var x = (k == 8) ? (+s[i]) & 0xff : intAt(s, i);\\n if (x < 0) {\\n if (s.charAt(i) == "-") {\\n mi = true;\\n }\\n continue;\\n }\\n mi = false;\\n if (sh == 0) {\\n this[this.t++] = x;\\n }\\n else if (sh + k > this.DB) {\\n this[this.t - 1] |= (x & ((1 << (this.DB - sh)) - 1)) << sh;\\n this[this.t++] = (x >> (this.DB - sh));\\n }\\n else {\\n this[this.t - 1] |= x << sh;\\n }\\n sh += k;\\n if (sh >= this.DB) {\\n sh -= this.DB;\\n }\\n }\\n if (k == 8 && ((+s[0]) & 0x80) != 0) {\\n this.s = -1;\\n if (sh > 0) {\\n this[this.t - 1] |= ((1 << (this.DB - sh)) - 1) << sh;\\n }\\n }\\n this.clamp();\\n if (mi) {\\n BigInteger.ZERO.subTo(this, this);\\n }\\n };\\n // BigInteger.prototype.clamp = bnpClamp;\\n // (protected) clamp off excess high words\\n BigInteger.prototype.clamp = function () {\\n var c = this.s & this.DM;\\n while (this.t > 0 && this[this.t - 1] == c) {\\n --this.t;\\n }\\n };\\n // BigInteger.prototype.dlShiftTo = bnpDLShiftTo;\\n // (protected) r = this << n*DB\\n BigInteger.prototype.dlShiftTo = function (n, r) {\\n var i;\\n for (i = this.t - 1; i >= 0; --i) {\\n r[i + n] = this[i];\\n }\\n for (i = n - 1; i >= 0; --i) {\\n r[i] = 0;\\n }\\n r.t = this.t + n;\\n r.s = this.s;\\n };\\n // BigInteger.prototype.drShiftTo = bnpDRShiftTo;\\n // (protected) r = this >> n*DB\\n BigInteger.prototype.drShiftTo = function (n, r) {\\n for (var i = n; i < this.t; ++i) {\\n r[i - n] = this[i];\\n }\\n r.t = Math.max(this.t - n, 0);\\n r.s = this.s;\\n };\\n // BigInteger.prototype.lShiftTo = bnpLShiftTo;\\n // (protected) r = this << n\\n BigInteger.prototype.lShiftTo = function (n, r) {\\n var bs = n % this.DB;\\n var cbs = this.DB - bs;\\n var bm = (1 << cbs) - 1;\\n var ds = Math.floor(n / this.DB);\\n var c = (this.s << bs) & this.DM;\\n for (var i = this.t - 1; i >= 0; --i) {\\n r[i + ds + 1] = (this[i] >> cbs) | c;\\n c = (this[i] & bm) << bs;\\n }\\n for (var i = ds - 1; i >= 0; --i) {\\n r[i] = 0;\\n }\\n r[ds] = c;\\n r.t = this.t + ds + 1;\\n r.s = this.s;\\n r.clamp();\\n };\\n // BigInteger.prototype.rShiftTo = bnpRShiftTo;\\n // (protected) r = this >> n\\n BigInteger.prototype.rShiftTo = function (n, r) {\\n r.s = this.s;\\n var ds = Math.floor(n / this.DB);\\n if (ds >= this.t) {\\n r.t = 0;\\n return;\\n }\\n var bs = n % this.DB;\\n var cbs = this.DB - bs;\\n var bm = (1 << bs) - 1;\\n r[0] = this[ds] >> bs;\\n for (var i = ds + 1; i < this.t; ++i) {\\n r[i - ds - 1] |= (this[i] & bm) << cbs;\\n r[i - ds] = this[i] >> bs;\\n }\\n if (bs > 0) {\\n r[this.t - ds - 1] |= (this.s & bm) << cbs;\\n }\\n r.t = this.t - ds;\\n r.clamp();\\n };\\n // BigInteger.prototype.subTo = bnpSubTo;\\n // (protected) r = this - a\\n BigInteger.prototype.subTo = function (a, r) {\\n var i = 0;\\n var c = 0;\\n var m = Math.min(a.t, this.t);\\n while (i < m) {\\n c += this[i] - a[i];\\n r[i++] = c & this.DM;\\n c >>= this.DB;\\n }\\n if (a.t < this.t) {\\n c -= a.s;\\n while (i < this.t) {\\n c += this[i];\\n r[i++] = c & this.DM;\\n c >>= this.DB;\\n }\\n c += this.s;\\n }\\n else {\\n c += this.s;\\n while (i < a.t) {\\n c -= a[i];\\n r[i++] = c & this.DM;\\n c >>= this.DB;\\n }\\n c -= a.s;\\n }\\n r.s = (c < 0) ? -1 : 0;\\n if (c < -1) {\\n r[i++] = this.DV + c;\\n }\\n else if (c > 0) {\\n r[i++] = c;\\n }\\n r.t = i;\\n r.clamp();\\n };\\n // BigInteger.prototype.multiplyTo = bnpMultiplyTo;\\n // (protected) r = this * a, r != this,a (HAC 14.12)\\n // "this" should be the larger one if appropriate.\\n BigInteger.prototype.multiplyTo = function (a, r) {\\n var x = this.abs();\\n var y = a.abs();\\n var i = x.t;\\n r.t = i + y.t;\\n while (--i >= 0) {\\n r[i] = 0;\\n }\\n for (i = 0; i < y.t; ++i) {\\n r[i + x.t] = x.am(0, y[i], r, i, 0, x.t);\\n }\\n r.s = 0;\\n r.clamp();\\n if (this.s != a.s) {\\n BigInteger.ZERO.subTo(r, r);\\n }\\n };\\n // BigInteger.prototype.squareTo = bnpSquareTo;\\n // (protected) r = this^2, r != this (HAC 14.16)\\n BigInteger.prototype.squareTo = function (r) {\\n var x = this.abs();\\n var i = r.t = 2 * x.t;\\n while (--i >= 0) {\\n r[i] = 0;\\n }\\n for (i = 0; i < x.t - 1; ++i) {\\n var c = x.am(i, x[i], r, 2 * i, 0, 1);\\n if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {\\n r[i + x.t] -= x.DV;\\n r[i + x.t + 1] = 1;\\n }\\n }\\n if (r.t > 0) {\\n r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1);\\n }\\n r.s = 0;\\n r.clamp();\\n };\\n // BigInteger.prototype.divRemTo = bnpDivRemTo;\\n // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)\\n // r != q, this != m. q or r may be null.\\n BigInteger.prototype.divRemTo = function (m, q, r) {\\n var pm = m.abs();\\n if (pm.t <= 0) {\\n return;\\n }\\n var pt = this.abs();\\n if (pt.t < pm.t) {\\n if (q != null) {\\n q.fromInt(0);\\n }\\n if (r != null) {\\n this.copyTo(r);\\n }\\n return;\\n }\\n if (r == null) {\\n r = nbi();\\n }\\n var y = nbi();\\n var ts = this.s;\\n var ms = m.s;\\n var nsh = this.DB - nbits(pm[pm.t - 1]); // normalize modulus\\n if (nsh > 0) {\\n pm.lShiftTo(nsh, y);\\n pt.lShiftTo(nsh, r);\\n }\\n else {\\n pm.copyTo(y);\\n pt.copyTo(r);\\n }\\n var ys = y.t;\\n var y0 = y[ys - 1];\\n if (y0 == 0) {\\n return;\\n }\\n var yt = y0 * (1 << this.F1) + ((ys > 1) ? y[ys - 2] >> this.F2 : 0);\\n var d1 = this.FV / yt;\\n var d2 = (1 << this.F1) / yt;\\n var e = 1 << this.F2;\\n var i = r.t;\\n var j = i - ys;\\n var t = (q == null) ? nbi() : q;\\n y.dlShiftTo(j, t);\\n if (r.compareTo(t) >= 0) {\\n r[r.t++] = 1;\\n r.subTo(t, r);\\n }\\n BigInteger.ONE.dlShiftTo(ys, t);\\n t.subTo(y, y); // "negative" y so we can replace sub with am later\\n while (y.t < ys) {\\n y[y.t++] = 0;\\n }\\n while (--j >= 0) {\\n // Estimate quotient digit\\n var qd = (r[--i] == y0) ? this.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2);\\n if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out\\n y.dlShiftTo(j, t);\\n r.subTo(t, r);\\n while (r[i] < --qd) {\\n r.subTo(t, r);\\n }\\n }\\n }\\n if (q != null) {\\n r.drShiftTo(ys, q);\\n if (ts != ms) {\\n BigInteger.ZERO.subTo(q, q);\\n }\\n }\\n r.t = ys;\\n r.clamp();\\n if (nsh > 0) {\\n r.rShiftTo(nsh, r);\\n } // Denormalize remainder\\n if (ts < 0) {\\n BigInteger.ZERO.subTo(r, r);\\n }\\n };\\n // BigInteger.prototype.invDigit = bnpInvDigit;\\n // (protected) return "-1/this % 2^DB"; useful for Mont. reduction\\n // justification:\\n // xy == 1 (mod m)\\n // xy = 1+km\\n // xy(2-xy) = (1+km)(1-km)\\n // x[y(2-xy)] = 1-k^2m^2\\n // x[y(2-xy)] == 1 (mod m^2)\\n // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2\\n // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.\\n // JS multiply "overflows" differently from C/C++, so care is needed here.\\n BigInteger.prototype.invDigit = function () {\\n if (this.t < 1) {\\n return 0;\\n }\\n var x = this[0];\\n if ((x & 1) == 0) {\\n return 0;\\n }\\n var y = x & 3; // y == 1/x mod 2^2\\n y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4\\n y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8\\n y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16\\n // last step - calculate inverse mod DV directly;\\n // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints\\n y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits\\n // we really want the negative inverse, and -DV < y < DV\\n return (y > 0) ? this.DV - y : -y;\\n };\\n // BigInteger.prototype.isEven = bnpIsEven;\\n // (protected) true iff this is even\\n BigInteger.prototype.isEven = function () {\\n return ((this.t > 0) ? (this[0] & 1) : this.s) == 0;\\n };\\n // BigInteger.prototype.exp = bnpExp;\\n // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)\\n BigInteger.prototype.exp = function (e, z) {\\n if (e > 0xffffffff || e < 1) {\\n return BigInteger.ONE;\\n }\\n var r = nbi();\\n var r2 = nbi();\\n var g = z.convert(this);\\n var i = nbits(e) - 1;\\n g.copyTo(r);\\n while (--i >= 0) {\\n z.sqrTo(r, r2);\\n if ((e & (1 << i)) > 0) {\\n z.mulTo(r2, g, r);\\n }\\n else {\\n var t = r;\\n r = r2;\\n r2 = t;\\n }\\n }\\n return z.revert(r);\\n };\\n // BigInteger.prototype.chunkSize = bnpChunkSize;\\n // (protected) return x s.t. r^x < DV\\n BigInteger.prototype.chunkSize = function (r) {\\n return Math.floor(Math.LN2 * this.DB / Math.log(r));\\n };\\n // BigInteger.prototype.toRadix = bnpToRadix;\\n // (protected) convert to radix string\\n BigInteger.prototype.toRadix = function (b) {\\n if (b == null) {\\n b = 10;\\n }\\n if (this.signum() == 0 || b < 2 || b > 36) {\\n return "0";\\n }\\n var cs = this.chunkSize(b);\\n var a = Math.pow(b, cs);\\n var d = nbv(a);\\n var y = nbi();\\n var z = nbi();\\n var r = "";\\n this.divRemTo(d, y, z);\\n while (y.signum() > 0) {\\n r = (a + z.intValue()).toString(b).substr(1) + r;\\n y.divRemTo(d, y, z);\\n }\\n return z.intValue().toString(b) + r;\\n };\\n // BigInteger.prototype.fromRadix = bnpFromRadix;\\n // (protected) convert from radix string\\n BigInteger.prototype.fromRadix = function (s, b) {\\n this.fromInt(0);\\n if (b == null) {\\n b = 10;\\n }\\n var cs = this.chunkSize(b);\\n var d = Math.pow(b, cs);\\n var mi = false;\\n var j = 0;\\n var w = 0;\\n for (var i = 0; i < s.length; ++i) {\\n var x = intAt(s, i);\\n if (x < 0) {\\n if (s.charAt(i) == "-" && this.signum() == 0) {\\n mi = true;\\n }\\n continue;\\n }\\n w = b * w + x;\\n if (++j >= cs) {\\n this.dMultiply(d);\\n this.dAddOffset(w, 0);\\n j = 0;\\n w = 0;\\n }\\n }\\n if (j > 0) {\\n this.dMultiply(Math.pow(b, j));\\n this.dAddOffset(w, 0);\\n }\\n if (mi) {\\n BigInteger.ZERO.subTo(this, this);\\n }\\n };\\n // BigInteger.prototype.fromNumber = bnpFromNumber;\\n // (protected) alternate constructor\\n BigInteger.prototype.fromNumber = function (a, b, c) {\\n if ("number" == typeof b) {\\n // new BigInteger(int,int,RNG)\\n if (a < 2) {\\n this.fromInt(1);\\n }\\n else {\\n this.fromNumber(a, c);\\n if (!this.testBit(a - 1)) {\\n // force MSB set\\n this.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), _util__WEBPACK_IMPORTED_MODULE_0__.op_or, this);\\n }\\n if (this.isEven()) {\\n this.dAddOffset(1, 0);\\n } // force odd\\n while (!this.isProbablePrime(b)) {\\n this.dAddOffset(2, 0);\\n if (this.bitLength() > a) {\\n this.subTo(BigInteger.ONE.shiftLeft(a - 1), this);\\n }\\n }\\n }\\n }\\n else {\\n // new BigInteger(int,RNG)\\n var x = [];\\n var t = a & 7;\\n x.length = (a >> 3) + 1;\\n b.nextBytes(x);\\n if (t > 0) {\\n x[0] &= ((1 << t) - 1);\\n }\\n else {\\n x[0] = 0;\\n }\\n this.fromString(x, 256);\\n }\\n };\\n // BigInteger.prototype.bitwiseTo = bnpBitwiseTo;\\n // (protected) r = this op a (bitwise)\\n BigInteger.prototype.bitwiseTo = function (a, op, r) {\\n var i;\\n var f;\\n var m = Math.min(a.t, this.t);\\n for (i = 0; i < m; ++i) {\\n r[i] = op(this[i], a[i]);\\n }\\n if (a.t < this.t) {\\n f = a.s & this.DM;\\n for (i = m; i < this.t; ++i) {\\n r[i] = op(this[i], f);\\n }\\n r.t = this.t;\\n }\\n else {\\n f = this.s & this.DM;\\n for (i = m; i < a.t; ++i) {\\n r[i] = op(f, a[i]);\\n }\\n r.t = a.t;\\n }\\n r.s = op(this.s, a.s);\\n r.clamp();\\n };\\n // BigInteger.prototype.changeBit = bnpChangeBit;\\n // (protected) this op (1<>= this.DB;\\n }\\n if (a.t < this.t) {\\n c += a.s;\\n while (i < this.t) {\\n c += this[i];\\n r[i++] = c & this.DM;\\n c >>= this.DB;\\n }\\n c += this.s;\\n }\\n else {\\n c += this.s;\\n while (i < a.t) {\\n c += a[i];\\n r[i++] = c & this.DM;\\n c >>= this.DB;\\n }\\n c += a.s;\\n }\\n r.s = (c < 0) ? -1 : 0;\\n if (c > 0) {\\n r[i++] = c;\\n }\\n else if (c < -1) {\\n r[i++] = this.DV + c;\\n }\\n r.t = i;\\n r.clamp();\\n };\\n // BigInteger.prototype.dMultiply = bnpDMultiply;\\n // (protected) this *= n, this >= 0, 1 < n < DV\\n BigInteger.prototype.dMultiply = function (n) {\\n this[this.t] = this.am(0, n - 1, this, 0, 0, this.t);\\n ++this.t;\\n this.clamp();\\n };\\n // BigInteger.prototype.dAddOffset = bnpDAddOffset;\\n // (protected) this += n << w words, this >= 0\\n BigInteger.prototype.dAddOffset = function (n, w) {\\n if (n == 0) {\\n return;\\n }\\n while (this.t <= w) {\\n this[this.t++] = 0;\\n }\\n this[w] += n;\\n while (this[w] >= this.DV) {\\n this[w] -= this.DV;\\n if (++w >= this.t) {\\n this[this.t++] = 0;\\n }\\n ++this[w];\\n }\\n };\\n // BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo;\\n // (protected) r = lower n words of "this * a", a.t <= n\\n // "this" should be the larger one if appropriate.\\n BigInteger.prototype.multiplyLowerTo = function (a, n, r) {\\n var i = Math.min(this.t + a.t, n);\\n r.s = 0; // assumes a,this >= 0\\n r.t = i;\\n while (i > 0) {\\n r[--i] = 0;\\n }\\n for (var j = r.t - this.t; i < j; ++i) {\\n r[i + this.t] = this.am(0, a[i], r, i, 0, this.t);\\n }\\n for (var j = Math.min(a.t, n); i < j; ++i) {\\n this.am(0, a[i], r, i, 0, n - i);\\n }\\n r.clamp();\\n };\\n // BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo;\\n // (protected) r = "this * a" without lower n words, n > 0\\n // "this" should be the larger one if appropriate.\\n BigInteger.prototype.multiplyUpperTo = function (a, n, r) {\\n --n;\\n var i = r.t = this.t + a.t - n;\\n r.s = 0; // assumes a,this >= 0\\n while (--i >= 0) {\\n r[i] = 0;\\n }\\n for (i = Math.max(n - this.t, 0); i < a.t; ++i) {\\n r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n);\\n }\\n r.clamp();\\n r.drShiftTo(1, r);\\n };\\n // BigInteger.prototype.modInt = bnpModInt;\\n // (protected) this % n, n < 2^26\\n BigInteger.prototype.modInt = function (n) {\\n if (n <= 0) {\\n return 0;\\n }\\n var d = this.DV % n;\\n var r = (this.s < 0) ? n - 1 : 0;\\n if (this.t > 0) {\\n if (d == 0) {\\n r = this[0] % n;\\n }\\n else {\\n for (var i = this.t - 1; i >= 0; --i) {\\n r = (d * r + this[i]) % n;\\n }\\n }\\n }\\n return r;\\n };\\n // BigInteger.prototype.millerRabin = bnpMillerRabin;\\n // (protected) true if probably prime (HAC 4.24, Miller-Rabin)\\n BigInteger.prototype.millerRabin = function (t) {\\n var n1 = this.subtract(BigInteger.ONE);\\n var k = n1.getLowestSetBit();\\n if (k <= 0) {\\n return false;\\n }\\n var r = n1.shiftRight(k);\\n t = (t + 1) >> 1;\\n if (t > lowprimes.length) {\\n t = lowprimes.length;\\n }\\n var a = nbi();\\n for (var i = 0; i < t; ++i) {\\n // Pick bases at random, instead of starting at 2\\n a.fromInt(lowprimes[Math.floor(Math.random() * lowprimes.length)]);\\n var y = a.modPow(r, this);\\n if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {\\n var j = 1;\\n while (j++ < k && y.compareTo(n1) != 0) {\\n y = y.modPowInt(2, this);\\n if (y.compareTo(BigInteger.ONE) == 0) {\\n return false;\\n }\\n }\\n if (y.compareTo(n1) != 0) {\\n return false;\\n }\\n }\\n }\\n return true;\\n };\\n // BigInteger.prototype.square = bnSquare;\\n // (public) this^2\\n BigInteger.prototype.square = function () {\\n var r = nbi();\\n this.squareTo(r);\\n return r;\\n };\\n //#region ASYNC\\n // Public API method\\n BigInteger.prototype.gcda = function (a, callback) {\\n var x = (this.s < 0) ? this.negate() : this.clone();\\n var y = (a.s < 0) ? a.negate() : a.clone();\\n if (x.compareTo(y) < 0) {\\n var t = x;\\n x = y;\\n y = t;\\n }\\n var i = x.getLowestSetBit();\\n var g = y.getLowestSetBit();\\n if (g < 0) {\\n callback(x);\\n return;\\n }\\n if (i < g) {\\n g = i;\\n }\\n if (g > 0) {\\n x.rShiftTo(g, x);\\n y.rShiftTo(g, y);\\n }\\n // Workhorse of the algorithm, gets called 200 - 800 times per 512 bit keygen.\\n var gcda1 = function () {\\n if ((i = x.getLowestSetBit()) > 0) {\\n x.rShiftTo(i, x);\\n }\\n if ((i = y.getLowestSetBit()) > 0) {\\n y.rShiftTo(i, y);\\n }\\n if (x.compareTo(y) >= 0) {\\n x.subTo(y, x);\\n x.rShiftTo(1, x);\\n }\\n else {\\n y.subTo(x, y);\\n y.rShiftTo(1, y);\\n }\\n if (!(x.signum() > 0)) {\\n if (g > 0) {\\n y.lShiftTo(g, y);\\n }\\n setTimeout(function () { callback(y); }, 0); // escape\\n }\\n else {\\n setTimeout(gcda1, 0);\\n }\\n };\\n setTimeout(gcda1, 10);\\n };\\n // (protected) alternate constructor\\n BigInteger.prototype.fromNumberAsync = function (a, b, c, callback) {\\n if ("number" == typeof b) {\\n if (a < 2) {\\n this.fromInt(1);\\n }\\n else {\\n this.fromNumber(a, c);\\n if (!this.testBit(a - 1)) {\\n this.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), _util__WEBPACK_IMPORTED_MODULE_0__.op_or, this);\\n }\\n if (this.isEven()) {\\n this.dAddOffset(1, 0);\\n }\\n var bnp_1 = this;\\n var bnpfn1_1 = function () {\\n bnp_1.dAddOffset(2, 0);\\n if (bnp_1.bitLength() > a) {\\n bnp_1.subTo(BigInteger.ONE.shiftLeft(a - 1), bnp_1);\\n }\\n if (bnp_1.isProbablePrime(b)) {\\n setTimeout(function () { callback(); }, 0); // escape\\n }\\n else {\\n setTimeout(bnpfn1_1, 0);\\n }\\n };\\n setTimeout(bnpfn1_1, 0);\\n }\\n }\\n else {\\n var x = [];\\n var t = a & 7;\\n x.length = (a >> 3) + 1;\\n b.nextBytes(x);\\n if (t > 0) {\\n x[0] &= ((1 << t) - 1);\\n }\\n else {\\n x[0] = 0;\\n }\\n this.fromString(x, 256);\\n }\\n };\\n return BigInteger;\\n}());\\n\\n//#region REDUCERS\\n//#region NullExp\\nvar NullExp = /** @class */ (function () {\\n function NullExp() {\\n }\\n // NullExp.prototype.convert = nNop;\\n NullExp.prototype.convert = function (x) {\\n return x;\\n };\\n // NullExp.prototype.revert = nNop;\\n NullExp.prototype.revert = function (x) {\\n return x;\\n };\\n // NullExp.prototype.mulTo = nMulTo;\\n NullExp.prototype.mulTo = function (x, y, r) {\\n x.multiplyTo(y, r);\\n };\\n // NullExp.prototype.sqrTo = nSqrTo;\\n NullExp.prototype.sqrTo = function (x, r) {\\n x.squareTo(r);\\n };\\n return NullExp;\\n}());\\n// Modular reduction using "classic" algorithm\\nvar Classic = /** @class */ (function () {\\n function Classic(m) {\\n this.m = m;\\n }\\n // Classic.prototype.convert = cConvert;\\n Classic.prototype.convert = function (x) {\\n if (x.s < 0 || x.compareTo(this.m) >= 0) {\\n return x.mod(this.m);\\n }\\n else {\\n return x;\\n }\\n };\\n // Classic.prototype.revert = cRevert;\\n Classic.prototype.revert = function (x) {\\n return x;\\n };\\n // Classic.prototype.reduce = cReduce;\\n Classic.prototype.reduce = function (x) {\\n x.divRemTo(this.m, null, x);\\n };\\n // Classic.prototype.mulTo = cMulTo;\\n Classic.prototype.mulTo = function (x, y, r) {\\n x.multiplyTo(y, r);\\n this.reduce(r);\\n };\\n // Classic.prototype.sqrTo = cSqrTo;\\n Classic.prototype.sqrTo = function (x, r) {\\n x.squareTo(r);\\n this.reduce(r);\\n };\\n return Classic;\\n}());\\n//#endregion\\n//#region Montgomery\\n// Montgomery reduction\\nvar Montgomery = /** @class */ (function () {\\n function Montgomery(m) {\\n this.m = m;\\n this.mp = m.invDigit();\\n this.mpl = this.mp & 0x7fff;\\n this.mph = this.mp >> 15;\\n this.um = (1 << (m.DB - 15)) - 1;\\n this.mt2 = 2 * m.t;\\n }\\n // Montgomery.prototype.convert = montConvert;\\n // xR mod m\\n Montgomery.prototype.convert = function (x) {\\n var r = nbi();\\n x.abs().dlShiftTo(this.m.t, r);\\n r.divRemTo(this.m, null, r);\\n if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) {\\n this.m.subTo(r, r);\\n }\\n return r;\\n };\\n // Montgomery.prototype.revert = montRevert;\\n // x/R mod m\\n Montgomery.prototype.revert = function (x) {\\n var r = nbi();\\n x.copyTo(r);\\n this.reduce(r);\\n return r;\\n };\\n // Montgomery.prototype.reduce = montReduce;\\n // x = x/R mod m (HAC 14.32)\\n Montgomery.prototype.reduce = function (x) {\\n while (x.t <= this.mt2) {\\n // pad x so am has enough room later\\n x[x.t++] = 0;\\n }\\n for (var i = 0; i < this.m.t; ++i) {\\n // faster way of calculating u0 = x[i]*mp mod DV\\n var j = x[i] & 0x7fff;\\n var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM;\\n // use am to combine the multiply-shift-add into one call\\n j = i + this.m.t;\\n x[j] += this.m.am(0, u0, x, i, 0, this.m.t);\\n // propagate carry\\n while (x[j] >= x.DV) {\\n x[j] -= x.DV;\\n x[++j]++;\\n }\\n }\\n x.clamp();\\n x.drShiftTo(this.m.t, x);\\n if (x.compareTo(this.m) >= 0) {\\n x.subTo(this.m, x);\\n }\\n };\\n // Montgomery.prototype.mulTo = montMulTo;\\n // r = "xy/R mod m"; x,y != r\\n Montgomery.prototype.mulTo = function (x, y, r) {\\n x.multiplyTo(y, r);\\n this.reduce(r);\\n };\\n // Montgomery.prototype.sqrTo = montSqrTo;\\n // r = "x^2/R mod m"; x != r\\n Montgomery.prototype.sqrTo = function (x, r) {\\n x.squareTo(r);\\n this.reduce(r);\\n };\\n return Montgomery;\\n}());\\n//#endregion Montgomery\\n//#region Barrett\\n// Barrett modular reduction\\nvar Barrett = /** @class */ (function () {\\n function Barrett(m) {\\n this.m = m;\\n // setup Barrett\\n this.r2 = nbi();\\n this.q3 = nbi();\\n BigInteger.ONE.dlShiftTo(2 * m.t, this.r2);\\n this.mu = this.r2.divide(m);\\n }\\n // Barrett.prototype.convert = barrettConvert;\\n Barrett.prototype.convert = function (x) {\\n if (x.s < 0 || x.t > 2 * this.m.t) {\\n return x.mod(this.m);\\n }\\n else if (x.compareTo(this.m) < 0) {\\n return x;\\n }\\n else {\\n var r = nbi();\\n x.copyTo(r);\\n this.reduce(r);\\n return r;\\n }\\n };\\n // Barrett.prototype.revert = barrettRevert;\\n Barrett.prototype.revert = function (x) {\\n return x;\\n };\\n // Barrett.prototype.reduce = barrettReduce;\\n // x = x mod m (HAC 14.42)\\n Barrett.prototype.reduce = function (x) {\\n x.drShiftTo(this.m.t - 1, this.r2);\\n if (x.t > this.m.t + 1) {\\n x.t = this.m.t + 1;\\n x.clamp();\\n }\\n this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3);\\n this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2);\\n while (x.compareTo(this.r2) < 0) {\\n x.dAddOffset(1, this.m.t + 1);\\n }\\n x.subTo(this.r2, x);\\n while (x.compareTo(this.m) >= 0) {\\n x.subTo(this.m, x);\\n }\\n };\\n // Barrett.prototype.mulTo = barrettMulTo;\\n // r = x*y mod m; x,y != r\\n Barrett.prototype.mulTo = function (x, y, r) {\\n x.multiplyTo(y, r);\\n this.reduce(r);\\n };\\n // Barrett.prototype.sqrTo = barrettSqrTo;\\n // r = x^2 mod m; x != r\\n Barrett.prototype.sqrTo = function (x, r) {\\n x.squareTo(r);\\n this.reduce(r);\\n };\\n return Barrett;\\n}());\\n//#endregion\\n//#endregion REDUCERS\\n// return new, unset BigInteger\\nfunction nbi() { return new BigInteger(null); }\\nfunction parseBigInt(str, r) {\\n return new BigInteger(str, r);\\n}\\n// am: Compute w_j += (x*this_i), propagate carries,\\n// c is initial carry, returns final carry.\\n// c < 3*dvalue, x < 2*dvalue, this_i < dvalue\\n// We need to select the fastest one that works in this environment.\\nvar inBrowser = typeof navigator !== "undefined";\\nif (inBrowser && j_lm && (navigator.appName == "Microsoft Internet Explorer")) {\\n // am2 avoids a big mult-and-extract completely.\\n // Max digit bits should be <= 30 because we do bitwise ops\\n // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)\\n BigInteger.prototype.am = function am2(i, x, w, j, c, n) {\\n var xl = x & 0x7fff;\\n var xh = x >> 15;\\n while (--n >= 0) {\\n var l = this[i] & 0x7fff;\\n var h = this[i++] >> 15;\\n var m = xh * l + h * xl;\\n l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff);\\n c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30);\\n w[j++] = l & 0x3fffffff;\\n }\\n return c;\\n };\\n dbits = 30;\\n}\\nelse if (inBrowser && j_lm && (navigator.appName != "Netscape")) {\\n // am1: use a single mult and divide to get the high bits,\\n // max digit bits should be 26 because\\n // max internal value = 2*dvalue^2-2*dvalue (< 2^53)\\n BigInteger.prototype.am = function am1(i, x, w, j, c, n) {\\n while (--n >= 0) {\\n var v = x * this[i++] + w[j] + c;\\n c = Math.floor(v / 0x4000000);\\n w[j++] = v & 0x3ffffff;\\n }\\n return c;\\n };\\n dbits = 26;\\n}\\nelse { // Mozilla/Netscape seems to prefer am3\\n // Alternately, set max digit bits to 28 since some\\n // browsers slow down when dealing with 32-bit numbers.\\n BigInteger.prototype.am = function am3(i, x, w, j, c, n) {\\n var xl = x & 0x3fff;\\n var xh = x >> 14;\\n while (--n >= 0) {\\n var l = this[i] & 0x3fff;\\n var h = this[i++] >> 14;\\n var m = xh * l + h * xl;\\n l = xl * l + ((m & 0x3fff) << 14) + w[j] + c;\\n c = (l >> 28) + (m >> 14) + xh * h;\\n w[j++] = l & 0xfffffff;\\n }\\n return c;\\n };\\n dbits = 28;\\n}\\nBigInteger.prototype.DB = dbits;\\nBigInteger.prototype.DM = ((1 << dbits) - 1);\\nBigInteger.prototype.DV = (1 << dbits);\\nvar BI_FP = 52;\\nBigInteger.prototype.FV = Math.pow(2, BI_FP);\\nBigInteger.prototype.F1 = BI_FP - dbits;\\nBigInteger.prototype.F2 = 2 * dbits - BI_FP;\\n// Digit conversions\\nvar BI_RC = [];\\nvar rr;\\nvar vv;\\nrr = "0".charCodeAt(0);\\nfor (vv = 0; vv <= 9; ++vv) {\\n BI_RC[rr++] = vv;\\n}\\nrr = "a".charCodeAt(0);\\nfor (vv = 10; vv < 36; ++vv) {\\n BI_RC[rr++] = vv;\\n}\\nrr = "A".charCodeAt(0);\\nfor (vv = 10; vv < 36; ++vv) {\\n BI_RC[rr++] = vv;\\n}\\nfunction intAt(s, i) {\\n var c = BI_RC[s.charCodeAt(i)];\\n return (c == null) ? -1 : c;\\n}\\n// return bigint initialized to value\\nfunction nbv(i) {\\n var r = nbi();\\n r.fromInt(i);\\n return r;\\n}\\n// returns bit length of the integer x\\nfunction nbits(x) {\\n var r = 1;\\n var t;\\n if ((t = x >>> 16) != 0) {\\n x = t;\\n r += 16;\\n }\\n if ((t = x >> 8) != 0) {\\n x = t;\\n r += 8;\\n }\\n if ((t = x >> 4) != 0) {\\n x = t;\\n r += 4;\\n }\\n if ((t = x >> 2) != 0) {\\n x = t;\\n r += 2;\\n }\\n if ((t = x >> 1) != 0) {\\n x = t;\\n r += 1;\\n }\\n return r;\\n}\\n// "constants"\\nBigInteger.ZERO = nbv(0);\\nBigInteger.ONE = nbv(1);\\n\\n\\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/jsbn.js?\')},"./lib/lib/jsbn/prng4.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(\'__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */ "Arcfour": () => (/* binding */ Arcfour),\\n/* harmony export */ "prng_newstate": () => (/* binding */ prng_newstate),\\n/* harmony export */ "rng_psize": () => (/* binding */ rng_psize)\\n/* harmony export */ });\\n// prng4.js - uses Arcfour as a PRNG\\nvar Arcfour = /** @class */ (function () {\\n function Arcfour() {\\n this.i = 0;\\n this.j = 0;\\n this.S = [];\\n }\\n // Arcfour.prototype.init = ARC4init;\\n // Initialize arcfour context from key, an array of ints, each from [0..255]\\n Arcfour.prototype.init = function (key) {\\n var i;\\n var j;\\n var t;\\n for (i = 0; i < 256; ++i) {\\n this.S[i] = i;\\n }\\n j = 0;\\n for (i = 0; i < 256; ++i) {\\n j = (j + this.S[i] + key[i % key.length]) & 255;\\n t = this.S[i];\\n this.S[i] = this.S[j];\\n this.S[j] = t;\\n }\\n this.i = 0;\\n this.j = 0;\\n };\\n // Arcfour.prototype.next = ARC4next;\\n Arcfour.prototype.next = function () {\\n var t;\\n this.i = (this.i + 1) & 255;\\n this.j = (this.j + this.S[this.i]) & 255;\\n t = this.S[this.i];\\n this.S[this.i] = this.S[this.j];\\n this.S[this.j] = t;\\n return this.S[(t + this.S[this.i]) & 255];\\n };\\n return Arcfour;\\n}());\\n\\n// Plug in your RNG constructor here\\nfunction prng_newstate() {\\n return new Arcfour();\\n}\\n// Pool size must be a multiple of 4 and greater than 32.\\n// An array of bytes the size of the pool will be passed to init()\\nvar rng_psize = 256;\\n\\n\\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/prng4.js?\')},"./lib/lib/jsbn/rng.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(\'__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */ "SecureRandom": () => (/* binding */ SecureRandom)\\n/* harmony export */ });\\n/* harmony import */ var _prng4__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./prng4 */ "./lib/lib/jsbn/prng4.js");\\n// Random number generator - requires a PRNG backend, e.g. prng4.js\\n\\nvar rng_state;\\nvar rng_pool = null;\\nvar rng_pptr;\\n// Initialize the pool with junk if needed.\\nif (rng_pool == null) {\\n rng_pool = [];\\n rng_pptr = 0;\\n var t = void 0;\\n if (typeof window !== \\\'undefined\\\' && window.crypto && window.crypto.getRandomValues) {\\n // Extract entropy (2048 bits) from RNG if available\\n var z = new Uint32Array(256);\\n window.crypto.getRandomValues(z);\\n for (t = 0; t < z.length; ++t) {\\n rng_pool[rng_pptr++] = z[t] & 255;\\n }\\n }\\n // Use mouse events for entropy, if we do not have enough entropy by the time\\n // we need it, entropy will be generated by Math.random.\\n var count = 0;\\n var onMouseMoveListener_1 = function (ev) {\\n count = count || 0;\\n if (count >= 256 || rng_pptr >= _prng4__WEBPACK_IMPORTED_MODULE_0__.rng_psize) {\\n if (window.removeEventListener) {\\n window.removeEventListener("mousemove", onMouseMoveListener_1, false);\\n }\\n else if (window.detachEvent) {\\n window.detachEvent("onmousemove", onMouseMoveListener_1);\\n }\\n return;\\n }\\n try {\\n var mouseCoordinates = ev.x + ev.y;\\n rng_pool[rng_pptr++] = mouseCoordinates & 255;\\n count += 1;\\n }\\n catch (e) {\\n // Sometimes Firefox will deny permission to access event properties for some reason. Ignore.\\n }\\n };\\n if (typeof window !== \\\'undefined\\\') {\\n if (window.addEventListener) {\\n window.addEventListener("mousemove", onMouseMoveListener_1, false);\\n }\\n else if (window.attachEvent) {\\n window.attachEvent("onmousemove", onMouseMoveListener_1);\\n }\\n }\\n}\\nfunction rng_get_byte() {\\n if (rng_state == null) {\\n rng_state = (0,_prng4__WEBPACK_IMPORTED_MODULE_0__.prng_newstate)();\\n // At this point, we may not have collected enough entropy. If not, fall back to Math.random\\n while (rng_pptr < _prng4__WEBPACK_IMPORTED_MODULE_0__.rng_psize) {\\n var random = Math.floor(65536 * Math.random());\\n rng_pool[rng_pptr++] = random & 255;\\n }\\n rng_state.init(rng_pool);\\n for (rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr) {\\n rng_pool[rng_pptr] = 0;\\n }\\n rng_pptr = 0;\\n }\\n // TODO: allow reseeding after first request\\n return rng_state.next();\\n}\\nvar SecureRandom = /** @class */ (function () {\\n function SecureRandom() {\\n }\\n SecureRandom.prototype.nextBytes = function (ba) {\\n for (var i = 0; i < ba.length; ++i) {\\n ba[i] = rng_get_byte();\\n }\\n };\\n return SecureRandom;\\n}());\\n\\n\\n\\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/rng.js?\')},"./lib/lib/jsbn/rsa.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(\'__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */ "RSAKey": () => (/* binding */ RSAKey)\\n/* harmony export */ });\\n/* harmony import */ var _jsbn__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsbn */ "./lib/lib/jsbn/jsbn.js");\\n/* harmony import */ var _rng__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rng */ "./lib/lib/jsbn/rng.js");\\n// Depends on jsbn.js and rng.js\\n// Version 1.1: support utf-8 encoding in pkcs1pad2\\n// convert a (hex) string to a bignum object\\n\\n\\n// function linebrk(s,n) {\\n// var ret = "";\\n// var i = 0;\\n// while(i + n < s.length) {\\n// ret += s.substring(i,i+n) + "\\\\n";\\n// i += n;\\n// }\\n// return ret + s.substring(i,s.length);\\n// }\\n// function byte2Hex(b) {\\n// if(b < 0x10)\\n// return "0" + b.toString(16);\\n// else\\n// return b.toString(16);\\n// }\\nfunction pkcs1pad1(s, n) {\\n if (n < s.length + 22) {\\n console.error("Message too long for RSA");\\n return null;\\n }\\n var len = n - s.length - 6;\\n var filler = "";\\n for (var f = 0; f < len; f += 2) {\\n filler += "ff";\\n }\\n var m = "0001" + filler + "00" + s;\\n return (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(m, 16);\\n}\\n// PKCS#1 (type 2, random) pad input string s to n bytes, and return a bigint\\nfunction pkcs1pad2(s, n) {\\n if (n < s.length + 11) { // TODO: fix for utf-8\\n console.error("Message too long for RSA");\\n return null;\\n }\\n var ba = [];\\n var i = s.length - 1;\\n while (i >= 0 && n > 0) {\\n var c = s.charCodeAt(i--);\\n if (c < 128) { // encode using utf-8\\n ba[--n] = c;\\n }\\n else if ((c > 127) && (c < 2048)) {\\n ba[--n] = (c & 63) | 128;\\n ba[--n] = (c >> 6) | 192;\\n }\\n else {\\n ba[--n] = (c & 63) | 128;\\n ba[--n] = ((c >> 6) & 63) | 128;\\n ba[--n] = (c >> 12) | 224;\\n }\\n }\\n ba[--n] = 0;\\n var rng = new _rng__WEBPACK_IMPORTED_MODULE_1__.SecureRandom();\\n var x = [];\\n while (n > 2) { // random non-zero pad\\n x[0] = 0;\\n while (x[0] == 0) {\\n rng.nextBytes(x);\\n }\\n ba[--n] = x[0];\\n }\\n ba[--n] = 2;\\n ba[--n] = 0;\\n return new _jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(ba);\\n}\\n// "empty" RSA key constructor\\nvar RSAKey = /** @class */ (function () {\\n function RSAKey() {\\n this.n = null;\\n this.e = 0;\\n this.d = null;\\n this.p = null;\\n this.q = null;\\n this.dmp1 = null;\\n this.dmq1 = null;\\n this.coeff = null;\\n }\\n //#region PROTECTED\\n // protected\\n // RSAKey.prototype.doPublic = RSADoPublic;\\n // Perform raw public operation on "x": return x^e (mod n)\\n RSAKey.prototype.doPublic = function (x) {\\n return x.modPowInt(this.e, this.n);\\n };\\n // RSAKey.prototype.doPrivate = RSADoPrivate;\\n // Perform raw private operation on "x": return x^d (mod n)\\n RSAKey.prototype.doPrivate = function (x) {\\n if (this.p == null || this.q == null) {\\n return x.modPow(this.d, this.n);\\n }\\n // TODO: re-calculate any missing CRT params\\n var xp = x.mod(this.p).modPow(this.dmp1, this.p);\\n var xq = x.mod(this.q).modPow(this.dmq1, this.q);\\n while (xp.compareTo(xq) < 0) {\\n xp = xp.add(this.p);\\n }\\n return xp.subtract(xq).multiply(this.coeff).mod(this.p).multiply(this.q).add(xq);\\n };\\n //#endregion PROTECTED\\n //#region PUBLIC\\n // RSAKey.prototype.setPublic = RSASetPublic;\\n // Set the public key fields N and e from hex strings\\n RSAKey.prototype.setPublic = function (N, E) {\\n if (N != null && E != null && N.length > 0 && E.length > 0) {\\n this.n = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(N, 16);\\n this.e = parseInt(E, 16);\\n }\\n else {\\n console.error("Invalid RSA public key");\\n }\\n };\\n // RSAKey.prototype.encrypt = RSAEncrypt;\\n // Return the PKCS#1 RSA encryption of "text" as an even-length hex string\\n RSAKey.prototype.encrypt = function (text) {\\n var maxLength = (this.n.bitLength() + 7) >> 3;\\n var m = pkcs1pad2(text, maxLength);\\n if (m == null) {\\n return null;\\n }\\n var c = this.doPublic(m);\\n if (c == null) {\\n return null;\\n }\\n var h = c.toString(16);\\n var length = h.length;\\n // fix zero before result\\n for (var i = 0; i < maxLength * 2 - length; i++) {\\n h = "0" + h;\\n }\\n return h;\\n };\\n // RSAKey.prototype.setPrivate = RSASetPrivate;\\n // Set the private key fields N, e, and d from hex strings\\n RSAKey.prototype.setPrivate = function (N, E, D) {\\n if (N != null && E != null && N.length > 0 && E.length > 0) {\\n this.n = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(N, 16);\\n this.e = parseInt(E, 16);\\n this.d = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(D, 16);\\n }\\n else {\\n console.error("Invalid RSA private key");\\n }\\n };\\n // RSAKey.prototype.setPrivateEx = RSASetPrivateEx;\\n // Set the private key fields N, e, d and CRT params from hex strings\\n RSAKey.prototype.setPrivateEx = function (N, E, D, P, Q, DP, DQ, C) {\\n if (N != null && E != null && N.length > 0 && E.length > 0) {\\n this.n = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(N, 16);\\n this.e = parseInt(E, 16);\\n this.d = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(D, 16);\\n this.p = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(P, 16);\\n this.q = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(Q, 16);\\n this.dmp1 = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(DP, 16);\\n this.dmq1 = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(DQ, 16);\\n this.coeff = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(C, 16);\\n }\\n else {\\n console.error("Invalid RSA private key");\\n }\\n };\\n // RSAKey.prototype.generate = RSAGenerate;\\n // Generate a new random private key B bits long, using public expt E\\n RSAKey.prototype.generate = function (B, E) {\\n var rng = new _rng__WEBPACK_IMPORTED_MODULE_1__.SecureRandom();\\n var qs = B >> 1;\\n this.e = parseInt(E, 16);\\n var ee = new _jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(E, 16);\\n for (;;) {\\n for (;;) {\\n this.p = new _jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(B - qs, 1, rng);\\n if (this.p.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE).gcd(ee).compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0 && this.p.isProbablePrime(10)) {\\n break;\\n }\\n }\\n for (;;) {\\n this.q = new _jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(qs, 1, rng);\\n if (this.q.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE).gcd(ee).compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0 && this.q.isProbablePrime(10)) {\\n break;\\n }\\n }\\n if (this.p.compareTo(this.q) <= 0) {\\n var t = this.p;\\n this.p = this.q;\\n this.q = t;\\n }\\n var p1 = this.p.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE);\\n var q1 = this.q.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE);\\n var phi = p1.multiply(q1);\\n if (phi.gcd(ee).compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0) {\\n this.n = this.p.multiply(this.q);\\n this.d = ee.modInverse(phi);\\n this.dmp1 = this.d.mod(p1);\\n this.dmq1 = this.d.mod(q1);\\n this.coeff = this.q.modInverse(this.p);\\n break;\\n }\\n }\\n };\\n // RSAKey.prototype.decrypt = RSADecrypt;\\n // Return the PKCS#1 RSA decryption of "ctext".\\n // "ctext" is an even-length hex string and the output is a plain string.\\n RSAKey.prototype.decrypt = function (ctext) {\\n var c = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(ctext, 16);\\n var m = this.doPrivate(c);\\n if (m == null) {\\n return null;\\n }\\n return pkcs1unpad2(m, (this.n.bitLength() + 7) >> 3);\\n };\\n // Generate a new random private key B bits long, using public expt E\\n RSAKey.prototype.generateAsync = function (B, E, callback) {\\n var rng = new _rng__WEBPACK_IMPORTED_MODULE_1__.SecureRandom();\\n var qs = B >> 1;\\n this.e = parseInt(E, 16);\\n var ee = new _jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(E, 16);\\n var rsa = this;\\n // These functions have non-descript names because they were originally for(;;) loops.\\n // I don\\\'t know about cryptography to give them better names than loop1-4.\\n var loop1 = function () {\\n var loop4 = function () {\\n if (rsa.p.compareTo(rsa.q) <= 0) {\\n var t = rsa.p;\\n rsa.p = rsa.q;\\n rsa.q = t;\\n }\\n var p1 = rsa.p.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE);\\n var q1 = rsa.q.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE);\\n var phi = p1.multiply(q1);\\n if (phi.gcd(ee).compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0) {\\n rsa.n = rsa.p.multiply(rsa.q);\\n rsa.d = ee.modInverse(phi);\\n rsa.dmp1 = rsa.d.mod(p1);\\n rsa.dmq1 = rsa.d.mod(q1);\\n rsa.coeff = rsa.q.modInverse(rsa.p);\\n setTimeout(function () { callback(); }, 0); // escape\\n }\\n else {\\n setTimeout(loop1, 0);\\n }\\n };\\n var loop3 = function () {\\n rsa.q = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.nbi)();\\n rsa.q.fromNumberAsync(qs, 1, rng, function () {\\n rsa.q.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE).gcda(ee, function (r) {\\n if (r.compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0 && rsa.q.isProbablePrime(10)) {\\n setTimeout(loop4, 0);\\n }\\n else {\\n setTimeout(loop3, 0);\\n }\\n });\\n });\\n };\\n var loop2 = function () {\\n rsa.p = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.nbi)();\\n rsa.p.fromNumberAsync(B - qs, 1, rng, function () {\\n rsa.p.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE).gcda(ee, function (r) {\\n if (r.compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0 && rsa.p.isProbablePrime(10)) {\\n setTimeout(loop3, 0);\\n }\\n else {\\n setTimeout(loop2, 0);\\n }\\n });\\n });\\n };\\n setTimeout(loop2, 0);\\n };\\n setTimeout(loop1, 0);\\n };\\n RSAKey.prototype.sign = function (text, digestMethod, digestName) {\\n var header = getDigestHeader(digestName);\\n var digest = header + digestMethod(text).toString();\\n var m = pkcs1pad1(digest, this.n.bitLength() / 4);\\n if (m == null) {\\n return null;\\n }\\n var c = this.doPrivate(m);\\n if (c == null) {\\n return null;\\n }\\n var h = c.toString(16);\\n if ((h.length & 1) == 0) {\\n return h;\\n }\\n else {\\n return "0" + h;\\n }\\n };\\n RSAKey.prototype.verify = function (text, signature, digestMethod) {\\n var c = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(signature, 16);\\n var m = this.doPublic(c);\\n if (m == null) {\\n return null;\\n }\\n var unpadded = m.toString(16).replace(/^1f+00/, "");\\n var digest = removeDigestHeader(unpadded);\\n return digest == digestMethod(text).toString();\\n };\\n return RSAKey;\\n}());\\n\\n// Undo PKCS#1 (type 2, random) padding and, if valid, return the plaintext\\nfunction pkcs1unpad2(d, n) {\\n var b = d.toByteArray();\\n var i = 0;\\n while (i < b.length && b[i] == 0) {\\n ++i;\\n }\\n if (b.length - i != n - 1 || b[i] != 2) {\\n return null;\\n }\\n ++i;\\n while (b[i] != 0) {\\n if (++i >= b.length) {\\n return null;\\n }\\n }\\n var ret = "";\\n while (++i < b.length) {\\n var c = b[i] & 255;\\n if (c < 128) { // utf-8 decode\\n ret += String.fromCharCode(c);\\n }\\n else if ((c > 191) && (c < 224)) {\\n ret += String.fromCharCode(((c & 31) << 6) | (b[i + 1] & 63));\\n ++i;\\n }\\n else {\\n ret += String.fromCharCode(((c & 15) << 12) | ((b[i + 1] & 63) << 6) | (b[i + 2] & 63));\\n i += 2;\\n }\\n }\\n return ret;\\n}\\n// https://tools.ietf.org/html/rfc3447#page-43\\nvar DIGEST_HEADERS = {\\n md2: "3020300c06082a864886f70d020205000410",\\n md5: "3020300c06082a864886f70d020505000410",\\n sha1: "3021300906052b0e03021a05000414",\\n sha224: "302d300d06096086480165030402040500041c",\\n sha256: "3031300d060960864801650304020105000420",\\n sha384: "3041300d060960864801650304020205000430",\\n sha512: "3051300d060960864801650304020305000440",\\n ripemd160: "3021300906052b2403020105000414"\\n};\\nfunction getDigestHeader(name) {\\n return DIGEST_HEADERS[name] || "";\\n}\\nfunction removeDigestHeader(str) {\\n for (var name_1 in DIGEST_HEADERS) {\\n if (DIGEST_HEADERS.hasOwnProperty(name_1)) {\\n var header = DIGEST_HEADERS[name_1];\\n var len = header.length;\\n if (str.substr(0, len) == header) {\\n return str.substr(len);\\n }\\n }\\n }\\n return str;\\n}\\n// Return the PKCS#1 RSA encryption of "text" as a Base64-encoded string\\n// function RSAEncryptB64(text) {\\n// var h = this.encrypt(text);\\n// if(h) return hex2b64(h); else return null;\\n// }\\n// public\\n// RSAKey.prototype.encrypt_b64 = RSAEncryptB64;\\n\\n\\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/rsa.js?\')},"./lib/lib/jsbn/util.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(\'__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */ "cbit": () => (/* binding */ cbit),\\n/* harmony export */ "int2char": () => (/* binding */ int2char),\\n/* harmony export */ "lbit": () => (/* binding */ lbit),\\n/* harmony export */ "op_and": () => (/* binding */ op_and),\\n/* harmony export */ "op_andnot": () => (/* binding */ op_andnot),\\n/* harmony export */ "op_or": () => (/* binding */ op_or),\\n/* harmony export */ "op_xor": () => (/* binding */ op_xor)\\n/* harmony export */ });\\nvar BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz";\\nfunction int2char(n) {\\n return BI_RM.charAt(n);\\n}\\n//#region BIT_OPERATIONS\\n// (public) this & a\\nfunction op_and(x, y) {\\n return x & y;\\n}\\n// (public) this | a\\nfunction op_or(x, y) {\\n return x | y;\\n}\\n// (public) this ^ a\\nfunction op_xor(x, y) {\\n return x ^ y;\\n}\\n// (public) this & ~a\\nfunction op_andnot(x, y) {\\n return x & ~y;\\n}\\n// return index of lowest 1-bit in x, x < 2^31\\nfunction lbit(x) {\\n if (x == 0) {\\n return -1;\\n }\\n var r = 0;\\n if ((x & 0xffff) == 0) {\\n x >>= 16;\\n r += 16;\\n }\\n if ((x & 0xff) == 0) {\\n x >>= 8;\\n r += 8;\\n }\\n if ((x & 0xf) == 0) {\\n x >>= 4;\\n r += 4;\\n }\\n if ((x & 3) == 0) {\\n x >>= 2;\\n r += 2;\\n }\\n if ((x & 1) == 0) {\\n ++r;\\n }\\n return r;\\n}\\n// return number of 1 bits in x\\nfunction cbit(x) {\\n var r = 0;\\n while (x != 0) {\\n x &= x - 1;\\n ++r;\\n }\\n return r;\\n}\\n//#endregion BIT_OPERATIONS\\n\\n\\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/util.js?\')},"./lib/lib/jsrsasign/asn1-1.0.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */ \\"KJUR\\": () => (/* binding */ KJUR)\\n/* harmony export */ });\\n/* harmony import */ var _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../jsbn/jsbn */ \\"./lib/lib/jsbn/jsbn.js\\");\\n/* harmony import */ var _yahoo__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./yahoo */ \\"./lib/lib/jsrsasign/yahoo.js\\");\\n/* asn1-1.0.13.js (c) 2013-2017 Kenji Urushima | kjur.github.com/jsrsasign/license\\n */\\n/*\\n * asn1.js - ASN.1 DER encoder classes\\n *\\n * Copyright (c) 2013-2017 Kenji Urushima (kenji.urushima@gmail.com)\\n *\\n * This software is licensed under the terms of the MIT License.\\n * https://kjur.github.io/jsrsasign/license\\n *\\n * The above copyright and license notice shall be\\n * included in all copies or substantial portions of the Software.\\n */\\n\\n\\n/**\\n * @fileOverview\\n * @name asn1-1.0.js\\n * @author Kenji Urushima kenji.urushima@gmail.com\\n * @version asn1 1.0.13 (2017-Jun-02)\\n * @since jsrsasign 2.1\\n * @license MIT License\\n */\\n/**\\n * kjur\'s class library name space\\n *

\\n * This name space provides following name spaces:\\n *

    \\n *
  • {@link KJUR.asn1} - ASN.1 primitive hexadecimal encoder
  • \\n *
  • {@link KJUR.asn1.x509} - ASN.1 structure for X.509 certificate and CRL
  • \\n *
  • {@link KJUR.crypto} - Java Cryptographic Extension(JCE) style MessageDigest/Signature\\n * class and utilities
  • \\n *
\\n *

\\n * NOTE: Please ignore method summary and document of this namespace. This caused by a bug of jsdoc2.\\n * @name KJUR\\n * @namespace kjur\'s class library name space\\n */\\nvar KJUR = {};\\n/**\\n * kjur\'s ASN.1 class library name space\\n *

\\n * This is ITU-T X.690 ASN.1 DER encoder class library and\\n * class structure and methods is very similar to\\n * org.bouncycastle.asn1 package of\\n * well known BouncyCaslte Cryptography Library.\\n *

PROVIDING ASN.1 PRIMITIVES

\\n * Here are ASN.1 DER primitive classes.\\n *
    \\n *
  • 0x01 {@link KJUR.asn1.DERBoolean}
  • \\n *
  • 0x02 {@link KJUR.asn1.DERInteger}
  • \\n *
  • 0x03 {@link KJUR.asn1.DERBitString}
  • \\n *
  • 0x04 {@link KJUR.asn1.DEROctetString}
  • \\n *
  • 0x05 {@link KJUR.asn1.DERNull}
  • \\n *
  • 0x06 {@link KJUR.asn1.DERObjectIdentifier}
  • \\n *
  • 0x0a {@link KJUR.asn1.DEREnumerated}
  • \\n *
  • 0x0c {@link KJUR.asn1.DERUTF8String}
  • \\n *
  • 0x12 {@link KJUR.asn1.DERNumericString}
  • \\n *
  • 0x13 {@link KJUR.asn1.DERPrintableString}
  • \\n *
  • 0x14 {@link KJUR.asn1.DERTeletexString}
  • \\n *
  • 0x16 {@link KJUR.asn1.DERIA5String}
  • \\n *
  • 0x17 {@link KJUR.asn1.DERUTCTime}
  • \\n *
  • 0x18 {@link KJUR.asn1.DERGeneralizedTime}
  • \\n *
  • 0x30 {@link KJUR.asn1.DERSequence}
  • \\n *
  • 0x31 {@link KJUR.asn1.DERSet}
  • \\n *
\\n *

OTHER ASN.1 CLASSES

\\n *
    \\n *
  • {@link KJUR.asn1.ASN1Object}
  • \\n *
  • {@link KJUR.asn1.DERAbstractString}
  • \\n *
  • {@link KJUR.asn1.DERAbstractTime}
  • \\n *
  • {@link KJUR.asn1.DERAbstractStructured}
  • \\n *
  • {@link KJUR.asn1.DERTaggedObject}
  • \\n *
\\n *

SUB NAME SPACES

\\n *
    \\n *
  • {@link KJUR.asn1.cades} - CAdES long term signature format
  • \\n *
  • {@link KJUR.asn1.cms} - Cryptographic Message Syntax
  • \\n *
  • {@link KJUR.asn1.csr} - Certificate Signing Request (CSR/PKCS#10)
  • \\n *
  • {@link KJUR.asn1.tsp} - RFC 3161 Timestamping Protocol Format
  • \\n *
  • {@link KJUR.asn1.x509} - RFC 5280 X.509 certificate and CRL
  • \\n *
\\n *

\\n * NOTE: Please ignore method summary and document of this namespace.\\n * This caused by a bug of jsdoc2.\\n * @name KJUR.asn1\\n * @namespace\\n */\\nif (typeof KJUR.asn1 == \\"undefined\\" || !KJUR.asn1)\\n KJUR.asn1 = {};\\n/**\\n * ASN1 utilities class\\n * @name KJUR.asn1.ASN1Util\\n * @class ASN1 utilities class\\n * @since asn1 1.0.2\\n */\\nKJUR.asn1.ASN1Util = new function () {\\n this.integerToByteHex = function (i) {\\n var h = i.toString(16);\\n if ((h.length % 2) == 1)\\n h = \'0\' + h;\\n return h;\\n };\\n this.bigIntToMinTwosComplementsHex = function (bigIntegerValue) {\\n var h = bigIntegerValue.toString(16);\\n if (h.substr(0, 1) != \'-\') {\\n if (h.length % 2 == 1) {\\n h = \'0\' + h;\\n }\\n else {\\n if (!h.match(/^[0-7]/)) {\\n h = \'00\' + h;\\n }\\n }\\n }\\n else {\\n var hPos = h.substr(1);\\n var xorLen = hPos.length;\\n if (xorLen % 2 == 1) {\\n xorLen += 1;\\n }\\n else {\\n if (!h.match(/^[0-7]/)) {\\n xorLen += 2;\\n }\\n }\\n var hMask = \'\';\\n for (var i = 0; i < xorLen; i++) {\\n hMask += \'f\';\\n }\\n var biMask = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(hMask, 16);\\n var biNeg = biMask.xor(bigIntegerValue).add(_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE);\\n h = biNeg.toString(16).replace(/^-/, \'\');\\n }\\n return h;\\n };\\n /**\\n * get PEM string from hexadecimal data and header string\\n * @name getPEMStringFromHex\\n * @memberOf KJUR.asn1.ASN1Util\\n * @function\\n * @param {String} dataHex hexadecimal string of PEM body\\n * @param {String} pemHeader PEM header string (ex. \'RSA PRIVATE KEY\')\\n * @return {String} PEM formatted string of input data\\n * @description\\n * This method converts a hexadecimal string to a PEM string with\\n * a specified header. Its line break will be CRLF(\\"\\\\r\\\\n\\").\\n * @example\\n * var pem = KJUR.asn1.ASN1Util.getPEMStringFromHex(\'616161\', \'RSA PRIVATE KEY\');\\n * // value of pem will be:\\n * -----BEGIN PRIVATE KEY-----\\n * YWFh\\n * -----END PRIVATE KEY-----\\n */\\n this.getPEMStringFromHex = function (dataHex, pemHeader) {\\n return hextopem(dataHex, pemHeader);\\n };\\n /**\\n * generate ASN1Object specifed by JSON parameters\\n * @name newObject\\n * @memberOf KJUR.asn1.ASN1Util\\n * @function\\n * @param {Array} param JSON parameter to generate ASN1Object\\n * @return {KJUR.asn1.ASN1Object} generated object\\n * @since asn1 1.0.3\\n * @description\\n * generate any ASN1Object specified by JSON param\\n * including ASN.1 primitive or structured.\\n * Generally \'param\' can be described as follows:\\n *
\\n * {TYPE-OF-ASNOBJ: ASN1OBJ-PARAMETER}\\n *
\\n * \'TYPE-OF-ASN1OBJ\' can be one of following symbols:\\n *
    \\n *
  • \'bool\' - DERBoolean
  • \\n *
  • \'int\' - DERInteger
  • \\n *
  • \'bitstr\' - DERBitString
  • \\n *
  • \'octstr\' - DEROctetString
  • \\n *
  • \'null\' - DERNull
  • \\n *
  • \'oid\' - DERObjectIdentifier
  • \\n *
  • \'enum\' - DEREnumerated
  • \\n *
  • \'utf8str\' - DERUTF8String
  • \\n *
  • \'numstr\' - DERNumericString
  • \\n *
  • \'prnstr\' - DERPrintableString
  • \\n *
  • \'telstr\' - DERTeletexString
  • \\n *
  • \'ia5str\' - DERIA5String
  • \\n *
  • \'utctime\' - DERUTCTime
  • \\n *
  • \'gentime\' - DERGeneralizedTime
  • \\n *
  • \'seq\' - DERSequence
  • \\n *
  • \'set\' - DERSet
  • \\n *
  • \'tag\' - DERTaggedObject
  • \\n *
\\n * @example\\n * newObject({\'prnstr\': \'aaa\'});\\n * newObject({\'seq\': [{\'int\': 3}, {\'prnstr\': \'aaa\'}]})\\n * // ASN.1 Tagged Object\\n * newObject({\'tag\': {\'tag\': \'a1\',\\n * \'explicit\': true,\\n * \'obj\': {\'seq\': [{\'int\': 3}, {\'prnstr\': \'aaa\'}]}}});\\n * // more simple representation of ASN.1 Tagged Object\\n * newObject({\'tag\': [\'a1\',\\n * true,\\n * {\'seq\': [\\n * {\'int\': 3},\\n * {\'prnstr\': \'aaa\'}]}\\n * ]});\\n */\\n this.newObject = function (param) {\\n var _KJUR = KJUR, _KJUR_asn1 = _KJUR.asn1, _DERBoolean = _KJUR_asn1.DERBoolean, _DERInteger = _KJUR_asn1.DERInteger, _DERBitString = _KJUR_asn1.DERBitString, _DEROctetString = _KJUR_asn1.DEROctetString, _DERNull = _KJUR_asn1.DERNull, _DERObjectIdentifier = _KJUR_asn1.DERObjectIdentifier, _DEREnumerated = _KJUR_asn1.DEREnumerated, _DERUTF8String = _KJUR_asn1.DERUTF8String, _DERNumericString = _KJUR_asn1.DERNumericString, _DERPrintableString = _KJUR_asn1.DERPrintableString, _DERTeletexString = _KJUR_asn1.DERTeletexString, _DERIA5String = _KJUR_asn1.DERIA5String, _DERUTCTime = _KJUR_asn1.DERUTCTime, _DERGeneralizedTime = _KJUR_asn1.DERGeneralizedTime, _DERSequence = _KJUR_asn1.DERSequence, _DERSet = _KJUR_asn1.DERSet, _DERTaggedObject = _KJUR_asn1.DERTaggedObject, _newObject = _KJUR_asn1.ASN1Util.newObject;\\n var keys = Object.keys(param);\\n if (keys.length != 1)\\n throw \\"key of param shall be only one.\\";\\n var key = keys[0];\\n if (\\":bool:int:bitstr:octstr:null:oid:enum:utf8str:numstr:prnstr:telstr:ia5str:utctime:gentime:seq:set:tag:\\".indexOf(\\":\\" + key + \\":\\") == -1)\\n throw \\"undefined key: \\" + key;\\n if (key == \\"bool\\")\\n return new _DERBoolean(param[key]);\\n if (key == \\"int\\")\\n return new _DERInteger(param[key]);\\n if (key == \\"bitstr\\")\\n return new _DERBitString(param[key]);\\n if (key == \\"octstr\\")\\n return new _DEROctetString(param[key]);\\n if (key == \\"null\\")\\n return new _DERNull(param[key]);\\n if (key == \\"oid\\")\\n return new _DERObjectIdentifier(param[key]);\\n if (key == \\"enum\\")\\n return new _DEREnumerated(param[key]);\\n if (key == \\"utf8str\\")\\n return new _DERUTF8String(param[key]);\\n if (key == \\"numstr\\")\\n return new _DERNumericString(param[key]);\\n if (key == \\"prnstr\\")\\n return new _DERPrintableString(param[key]);\\n if (key == \\"telstr\\")\\n return new _DERTeletexString(param[key]);\\n if (key == \\"ia5str\\")\\n return new _DERIA5String(param[key]);\\n if (key == \\"utctime\\")\\n return new _DERUTCTime(param[key]);\\n if (key == \\"gentime\\")\\n return new _DERGeneralizedTime(param[key]);\\n if (key == \\"seq\\") {\\n var paramList = param[key];\\n var a = [];\\n for (var i = 0; i < paramList.length; i++) {\\n var asn1Obj = _newObject(paramList[i]);\\n a.push(asn1Obj);\\n }\\n return new _DERSequence({ \'array\': a });\\n }\\n if (key == \\"set\\") {\\n var paramList = param[key];\\n var a = [];\\n for (var i = 0; i < paramList.length; i++) {\\n var asn1Obj = _newObject(paramList[i]);\\n a.push(asn1Obj);\\n }\\n return new _DERSet({ \'array\': a });\\n }\\n if (key == \\"tag\\") {\\n var tagParam = param[key];\\n if (Object.prototype.toString.call(tagParam) === \'[object Array]\' &&\\n tagParam.length == 3) {\\n var obj = _newObject(tagParam[2]);\\n return new _DERTaggedObject({ tag: tagParam[0],\\n explicit: tagParam[1],\\n obj: obj });\\n }\\n else {\\n var newParam = {};\\n if (tagParam.explicit !== undefined)\\n newParam.explicit = tagParam.explicit;\\n if (tagParam.tag !== undefined)\\n newParam.tag = tagParam.tag;\\n if (tagParam.obj === undefined)\\n throw \\"obj shall be specified for \'tag\'.\\";\\n newParam.obj = _newObject(tagParam.obj);\\n return new _DERTaggedObject(newParam);\\n }\\n }\\n };\\n /**\\n * get encoded hexadecimal string of ASN1Object specifed by JSON parameters\\n * @name jsonToASN1HEX\\n * @memberOf KJUR.asn1.ASN1Util\\n * @function\\n * @param {Array} param JSON parameter to generate ASN1Object\\n * @return hexadecimal string of ASN1Object\\n * @since asn1 1.0.4\\n * @description\\n * As for ASN.1 object representation of JSON object,\\n * please see {@link newObject}.\\n * @example\\n * jsonToASN1HEX({\'prnstr\': \'aaa\'});\\n */\\n this.jsonToASN1HEX = function (param) {\\n var asn1Obj = this.newObject(param);\\n return asn1Obj.getEncodedHex();\\n };\\n};\\n/**\\n * get dot noted oid number string from hexadecimal value of OID\\n * @name oidHexToInt\\n * @memberOf KJUR.asn1.ASN1Util\\n * @function\\n * @param {String} hex hexadecimal value of object identifier\\n * @return {String} dot noted string of object identifier\\n * @since jsrsasign 4.8.3 asn1 1.0.7\\n * @description\\n * This static method converts from hexadecimal string representation of\\n * ASN.1 value of object identifier to oid number string.\\n * @example\\n * KJUR.asn1.ASN1Util.oidHexToInt(\'550406\') → \\"2.5.4.6\\"\\n */\\nKJUR.asn1.ASN1Util.oidHexToInt = function (hex) {\\n var s = \\"\\";\\n var i01 = parseInt(hex.substr(0, 2), 16);\\n var i0 = Math.floor(i01 / 40);\\n var i1 = i01 % 40;\\n var s = i0 + \\".\\" + i1;\\n var binbuf = \\"\\";\\n for (var i = 2; i < hex.length; i += 2) {\\n var value = parseInt(hex.substr(i, 2), 16);\\n var bin = (\\"00000000\\" + value.toString(2)).slice(-8);\\n binbuf = binbuf + bin.substr(1, 7);\\n if (bin.substr(0, 1) == \\"0\\") {\\n var bi = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(binbuf, 2);\\n s = s + \\".\\" + bi.toString(10);\\n binbuf = \\"\\";\\n }\\n }\\n ;\\n return s;\\n};\\n/**\\n * get hexadecimal value of object identifier from dot noted oid value\\n * @name oidIntToHex\\n * @memberOf KJUR.asn1.ASN1Util\\n * @function\\n * @param {String} oidString dot noted string of object identifier\\n * @return {String} hexadecimal value of object identifier\\n * @since jsrsasign 4.8.3 asn1 1.0.7\\n * @description\\n * This static method converts from object identifier value string.\\n * to hexadecimal string representation of it.\\n * @example\\n * KJUR.asn1.ASN1Util.oidIntToHex(\\"2.5.4.6\\") → \\"550406\\"\\n */\\nKJUR.asn1.ASN1Util.oidIntToHex = function (oidString) {\\n var itox = function (i) {\\n var h = i.toString(16);\\n if (h.length == 1)\\n h = \'0\' + h;\\n return h;\\n };\\n var roidtox = function (roid) {\\n var h = \'\';\\n var bi = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(roid, 10);\\n var b = bi.toString(2);\\n var padLen = 7 - b.length % 7;\\n if (padLen == 7)\\n padLen = 0;\\n var bPad = \'\';\\n for (var i = 0; i < padLen; i++)\\n bPad += \'0\';\\n b = bPad + b;\\n for (var i = 0; i < b.length - 1; i += 7) {\\n var b8 = b.substr(i, 7);\\n if (i != b.length - 7)\\n b8 = \'1\' + b8;\\n h += itox(parseInt(b8, 2));\\n }\\n return h;\\n };\\n if (!oidString.match(/^[0-9.]+$/)) {\\n throw \\"malformed oid string: \\" + oidString;\\n }\\n var h = \'\';\\n var a = oidString.split(\'.\');\\n var i0 = parseInt(a[0]) * 40 + parseInt(a[1]);\\n h += itox(i0);\\n a.splice(0, 2);\\n for (var i = 0; i < a.length; i++) {\\n h += roidtox(a[i]);\\n }\\n return h;\\n};\\n// ********************************************************************\\n// Abstract ASN.1 Classes\\n// ********************************************************************\\n// ********************************************************************\\n/**\\n * base class for ASN.1 DER encoder object\\n * @name KJUR.asn1.ASN1Object\\n * @class base class for ASN.1 DER encoder object\\n * @property {Boolean} isModified flag whether internal data was changed\\n * @property {String} hTLV hexadecimal string of ASN.1 TLV\\n * @property {String} hT hexadecimal string of ASN.1 TLV tag(T)\\n * @property {String} hL hexadecimal string of ASN.1 TLV length(L)\\n * @property {String} hV hexadecimal string of ASN.1 TLV value(V)\\n * @description\\n */\\nKJUR.asn1.ASN1Object = function () {\\n var isModified = true;\\n var hTLV = null;\\n var hT = \'00\';\\n var hL = \'00\';\\n var hV = \'\';\\n /**\\n * get hexadecimal ASN.1 TLV length(L) bytes from TLV value(V)\\n * @name getLengthHexFromValue\\n * @memberOf KJUR.asn1.ASN1Object#\\n * @function\\n * @return {String} hexadecimal string of ASN.1 TLV length(L)\\n */\\n this.getLengthHexFromValue = function () {\\n if (typeof this.hV == \\"undefined\\" || this.hV == null) {\\n throw \\"this.hV is null or undefined.\\";\\n }\\n if (this.hV.length % 2 == 1) {\\n throw \\"value hex must be even length: n=\\" + hV.length + \\",v=\\" + this.hV;\\n }\\n var n = this.hV.length / 2;\\n var hN = n.toString(16);\\n if (hN.length % 2 == 1) {\\n hN = \\"0\\" + hN;\\n }\\n if (n < 128) {\\n return hN;\\n }\\n else {\\n var hNlen = hN.length / 2;\\n if (hNlen > 15) {\\n throw \\"ASN.1 length too long to represent by 8x: n = \\" + n.toString(16);\\n }\\n var head = 128 + hNlen;\\n return head.toString(16) + hN;\\n }\\n };\\n /**\\n * get hexadecimal string of ASN.1 TLV bytes\\n * @name getEncodedHex\\n * @memberOf KJUR.asn1.ASN1Object#\\n * @function\\n * @return {String} hexadecimal string of ASN.1 TLV\\n */\\n this.getEncodedHex = function () {\\n if (this.hTLV == null || this.isModified) {\\n this.hV = this.getFreshValueHex();\\n this.hL = this.getLengthHexFromValue();\\n this.hTLV = this.hT + this.hL + this.hV;\\n this.isModified = false;\\n //alert(\\"first time: \\" + this.hTLV);\\n }\\n return this.hTLV;\\n };\\n /**\\n * get hexadecimal string of ASN.1 TLV value(V) bytes\\n * @name getValueHex\\n * @memberOf KJUR.asn1.ASN1Object#\\n * @function\\n * @return {String} hexadecimal string of ASN.1 TLV value(V) bytes\\n */\\n this.getValueHex = function () {\\n this.getEncodedHex();\\n return this.hV;\\n };\\n this.getFreshValueHex = function () {\\n return \'\';\\n };\\n};\\n// == BEGIN DERAbstractString ================================================\\n/**\\n * base class for ASN.1 DER string classes\\n * @name KJUR.asn1.DERAbstractString\\n * @class base class for ASN.1 DER string classes\\n * @param {Array} params associative array of parameters (ex. {\'str\': \'aaa\'})\\n * @property {String} s internal string of value\\n * @extends KJUR.asn1.ASN1Object\\n * @description\\n *
\\n * As for argument \'params\' for constructor, you can specify one of\\n * following properties:\\n *
    \\n *
  • str - specify initial ASN.1 value(V) by a string
  • \\n *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • \\n *
\\n * NOTE: \'params\' can be omitted.\\n */\\nKJUR.asn1.DERAbstractString = function (params) {\\n KJUR.asn1.DERAbstractString.superclass.constructor.call(this);\\n var s = null;\\n var hV = null;\\n /**\\n * get string value of this string object\\n * @name getString\\n * @memberOf KJUR.asn1.DERAbstractString#\\n * @function\\n * @return {String} string value of this string object\\n */\\n this.getString = function () {\\n return this.s;\\n };\\n /**\\n * set value by a string\\n * @name setString\\n * @memberOf KJUR.asn1.DERAbstractString#\\n * @function\\n * @param {String} newS value by a string to set\\n */\\n this.setString = function (newS) {\\n this.hTLV = null;\\n this.isModified = true;\\n this.s = newS;\\n this.hV = stohex(this.s);\\n };\\n /**\\n * set value by a hexadecimal string\\n * @name setStringHex\\n * @memberOf KJUR.asn1.DERAbstractString#\\n * @function\\n * @param {String} newHexString value by a hexadecimal string to set\\n */\\n this.setStringHex = function (newHexString) {\\n this.hTLV = null;\\n this.isModified = true;\\n this.s = null;\\n this.hV = newHexString;\\n };\\n this.getFreshValueHex = function () {\\n return this.hV;\\n };\\n if (typeof params != \\"undefined\\") {\\n if (typeof params == \\"string\\") {\\n this.setString(params);\\n }\\n else if (typeof params[\'str\'] != \\"undefined\\") {\\n this.setString(params[\'str\']);\\n }\\n else if (typeof params[\'hex\'] != \\"undefined\\") {\\n this.setStringHex(params[\'hex\']);\\n }\\n }\\n};\\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERAbstractString, KJUR.asn1.ASN1Object);\\n// == END DERAbstractString ================================================\\n// == BEGIN DERAbstractTime ==================================================\\n/**\\n * base class for ASN.1 DER Generalized/UTCTime class\\n * @name KJUR.asn1.DERAbstractTime\\n * @class base class for ASN.1 DER Generalized/UTCTime class\\n * @param {Array} params associative array of parameters (ex. {\'str\': \'130430235959Z\'})\\n * @extends KJUR.asn1.ASN1Object\\n * @description\\n * @see KJUR.asn1.ASN1Object - superclass\\n */\\nKJUR.asn1.DERAbstractTime = function (params) {\\n KJUR.asn1.DERAbstractTime.superclass.constructor.call(this);\\n var s = null;\\n var date = null;\\n // --- PRIVATE METHODS --------------------\\n this.localDateToUTC = function (d) {\\n utc = d.getTime() + (d.getTimezoneOffset() * 60000);\\n var utcDate = new Date(utc);\\n return utcDate;\\n };\\n /*\\n * format date string by Data object\\n * @name formatDate\\n * @memberOf KJUR.asn1.AbstractTime;\\n * @param {Date} dateObject\\n * @param {string} type \'utc\' or \'gen\'\\n * @param {boolean} withMillis flag for with millisections or not\\n * @description\\n * \'withMillis\' flag is supported from asn1 1.0.6.\\n */\\n this.formatDate = function (dateObject, type, withMillis) {\\n var pad = this.zeroPadding;\\n var d = this.localDateToUTC(dateObject);\\n var year = String(d.getFullYear());\\n if (type == \'utc\')\\n year = year.substr(2, 2);\\n var month = pad(String(d.getMonth() + 1), 2);\\n var day = pad(String(d.getDate()), 2);\\n var hour = pad(String(d.getHours()), 2);\\n var min = pad(String(d.getMinutes()), 2);\\n var sec = pad(String(d.getSeconds()), 2);\\n var s = year + month + day + hour + min + sec;\\n if (withMillis === true) {\\n var millis = d.getMilliseconds();\\n if (millis != 0) {\\n var sMillis = pad(String(millis), 3);\\n sMillis = sMillis.replace(/[0]+$/, \\"\\");\\n s = s + \\".\\" + sMillis;\\n }\\n }\\n return s + \\"Z\\";\\n };\\n this.zeroPadding = function (s, len) {\\n if (s.length >= len)\\n return s;\\n return new Array(len - s.length + 1).join(\'0\') + s;\\n };\\n // --- PUBLIC METHODS --------------------\\n /**\\n * get string value of this string object\\n * @name getString\\n * @memberOf KJUR.asn1.DERAbstractTime#\\n * @function\\n * @return {String} string value of this time object\\n */\\n this.getString = function () {\\n return this.s;\\n };\\n /**\\n * set value by a string\\n * @name setString\\n * @memberOf KJUR.asn1.DERAbstractTime#\\n * @function\\n * @param {String} newS value by a string to set such like \\"130430235959Z\\"\\n */\\n this.setString = function (newS) {\\n this.hTLV = null;\\n this.isModified = true;\\n this.s = newS;\\n this.hV = stohex(newS);\\n };\\n /**\\n * set value by a Date object\\n * @name setByDateValue\\n * @memberOf KJUR.asn1.DERAbstractTime#\\n * @function\\n * @param {Integer} year year of date (ex. 2013)\\n * @param {Integer} month month of date between 1 and 12 (ex. 12)\\n * @param {Integer} day day of month\\n * @param {Integer} hour hours of date\\n * @param {Integer} min minutes of date\\n * @param {Integer} sec seconds of date\\n */\\n this.setByDateValue = function (year, month, day, hour, min, sec) {\\n var dateObject = new Date(Date.UTC(year, month - 1, day, hour, min, sec, 0));\\n this.setByDate(dateObject);\\n };\\n this.getFreshValueHex = function () {\\n return this.hV;\\n };\\n};\\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERAbstractTime, KJUR.asn1.ASN1Object);\\n// == END DERAbstractTime ==================================================\\n// == BEGIN DERAbstractStructured ============================================\\n/**\\n * base class for ASN.1 DER structured class\\n * @name KJUR.asn1.DERAbstractStructured\\n * @class base class for ASN.1 DER structured class\\n * @property {Array} asn1Array internal array of ASN1Object\\n * @extends KJUR.asn1.ASN1Object\\n * @description\\n * @see KJUR.asn1.ASN1Object - superclass\\n */\\nKJUR.asn1.DERAbstractStructured = function (params) {\\n KJUR.asn1.DERAbstractString.superclass.constructor.call(this);\\n var asn1Array = null;\\n /**\\n * set value by array of ASN1Object\\n * @name setByASN1ObjectArray\\n * @memberOf KJUR.asn1.DERAbstractStructured#\\n * @function\\n * @param {array} asn1ObjectArray array of ASN1Object to set\\n */\\n this.setByASN1ObjectArray = function (asn1ObjectArray) {\\n this.hTLV = null;\\n this.isModified = true;\\n this.asn1Array = asn1ObjectArray;\\n };\\n /**\\n * append an ASN1Object to internal array\\n * @name appendASN1Object\\n * @memberOf KJUR.asn1.DERAbstractStructured#\\n * @function\\n * @param {ASN1Object} asn1Object to add\\n */\\n this.appendASN1Object = function (asn1Object) {\\n this.hTLV = null;\\n this.isModified = true;\\n this.asn1Array.push(asn1Object);\\n };\\n this.asn1Array = new Array();\\n if (typeof params != \\"undefined\\") {\\n if (typeof params[\'array\'] != \\"undefined\\") {\\n this.asn1Array = params[\'array\'];\\n }\\n }\\n};\\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERAbstractStructured, KJUR.asn1.ASN1Object);\\n// ********************************************************************\\n// ASN.1 Object Classes\\n// ********************************************************************\\n// ********************************************************************\\n/**\\n * class for ASN.1 DER Boolean\\n * @name KJUR.asn1.DERBoolean\\n * @class class for ASN.1 DER Boolean\\n * @extends KJUR.asn1.ASN1Object\\n * @description\\n * @see KJUR.asn1.ASN1Object - superclass\\n */\\nKJUR.asn1.DERBoolean = function () {\\n KJUR.asn1.DERBoolean.superclass.constructor.call(this);\\n this.hT = \\"01\\";\\n this.hTLV = \\"0101ff\\";\\n};\\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERBoolean, KJUR.asn1.ASN1Object);\\n// ********************************************************************\\n/**\\n * class for ASN.1 DER Integer\\n * @name KJUR.asn1.DERInteger\\n * @class class for ASN.1 DER Integer\\n * @extends KJUR.asn1.ASN1Object\\n * @description\\n *
\\n * As for argument \'params\' for constructor, you can specify one of\\n * following properties:\\n *
    \\n *
  • int - specify initial ASN.1 value(V) by integer value
  • \\n *
  • bigint - specify initial ASN.1 value(V) by BigInteger object
  • \\n *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • \\n *
\\n * NOTE: \'params\' can be omitted.\\n */\\nKJUR.asn1.DERInteger = function (params) {\\n KJUR.asn1.DERInteger.superclass.constructor.call(this);\\n this.hT = \\"02\\";\\n /**\\n * set value by Tom Wu\'s BigInteger object\\n * @name setByBigInteger\\n * @memberOf KJUR.asn1.DERInteger#\\n * @function\\n * @param {BigInteger} bigIntegerValue to set\\n */\\n this.setByBigInteger = function (bigIntegerValue) {\\n this.hTLV = null;\\n this.isModified = true;\\n this.hV = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(bigIntegerValue);\\n };\\n /**\\n * set value by integer value\\n * @name setByInteger\\n * @memberOf KJUR.asn1.DERInteger\\n * @function\\n * @param {Integer} integer value to set\\n */\\n this.setByInteger = function (intValue) {\\n var bi = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(String(intValue), 10);\\n this.setByBigInteger(bi);\\n };\\n /**\\n * set value by integer value\\n * @name setValueHex\\n * @memberOf KJUR.asn1.DERInteger#\\n * @function\\n * @param {String} hexadecimal string of integer value\\n * @description\\n *
\\n * NOTE: Value shall be represented by minimum octet length of\\n * two\'s complement representation.\\n * @example\\n * new KJUR.asn1.DERInteger(123);\\n * new KJUR.asn1.DERInteger({\'int\': 123});\\n * new KJUR.asn1.DERInteger({\'hex\': \'1fad\'});\\n */\\n this.setValueHex = function (newHexString) {\\n this.hV = newHexString;\\n };\\n this.getFreshValueHex = function () {\\n return this.hV;\\n };\\n if (typeof params != \\"undefined\\") {\\n if (typeof params[\'bigint\'] != \\"undefined\\") {\\n this.setByBigInteger(params[\'bigint\']);\\n }\\n else if (typeof params[\'int\'] != \\"undefined\\") {\\n this.setByInteger(params[\'int\']);\\n }\\n else if (typeof params == \\"number\\") {\\n this.setByInteger(params);\\n }\\n else if (typeof params[\'hex\'] != \\"undefined\\") {\\n this.setValueHex(params[\'hex\']);\\n }\\n }\\n};\\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERInteger, KJUR.asn1.ASN1Object);\\n// ********************************************************************\\n/**\\n * class for ASN.1 DER encoded BitString primitive\\n * @name KJUR.asn1.DERBitString\\n * @class class for ASN.1 DER encoded BitString primitive\\n * @extends KJUR.asn1.ASN1Object\\n * @description\\n *
\\n * As for argument \'params\' for constructor, you can specify one of\\n * following properties:\\n *
    \\n *
  • bin - specify binary string (ex. \'10111\')
  • \\n *
  • array - specify array of boolean (ex. [true,false,true,true])
  • \\n *
  • hex - specify hexadecimal string of ASN.1 value(V) including unused bits
  • \\n *
  • obj - specify {@link KJUR.asn1.ASN1Util.newObject}\\n * argument for \\"BitString encapsulates\\" structure.
  • \\n *
\\n * NOTE1: \'params\' can be omitted.
\\n * NOTE2: \'obj\' parameter have been supported since\\n * asn1 1.0.11, jsrsasign 6.1.1 (2016-Sep-25).
\\n * @example\\n * // default constructor\\n * o = new KJUR.asn1.DERBitString();\\n * // initialize with binary string\\n * o = new KJUR.asn1.DERBitString({bin: \\"1011\\"});\\n * // initialize with boolean array\\n * o = new KJUR.asn1.DERBitString({array: [true,false,true,true]});\\n * // initialize with hexadecimal string (04 is unused bits)\\n * o = new KJUR.asn1.DEROctetString({hex: \\"04bac0\\"});\\n * // initialize with ASN1Util.newObject argument for encapsulated\\n * o = new KJUR.asn1.DERBitString({obj: {seq: [{int: 3}, {prnstr: \'aaa\'}]}});\\n * // above generates a ASN.1 data like this:\\n * // BIT STRING, encapsulates {\\n * // SEQUENCE {\\n * // INTEGER 3\\n * // PrintableString \'aaa\'\\n * // }\\n * // }\\n */\\nKJUR.asn1.DERBitString = function (params) {\\n if (params !== undefined && typeof params.obj !== \\"undefined\\") {\\n var o = KJUR.asn1.ASN1Util.newObject(params.obj);\\n params.hex = \\"00\\" + o.getEncodedHex();\\n }\\n KJUR.asn1.DERBitString.superclass.constructor.call(this);\\n this.hT = \\"03\\";\\n /**\\n * set ASN.1 value(V) by a hexadecimal string including unused bits\\n * @name setHexValueIncludingUnusedBits\\n * @memberOf KJUR.asn1.DERBitString#\\n * @function\\n * @param {String} newHexStringIncludingUnusedBits\\n */\\n this.setHexValueIncludingUnusedBits = function (newHexStringIncludingUnusedBits) {\\n this.hTLV = null;\\n this.isModified = true;\\n this.hV = newHexStringIncludingUnusedBits;\\n };\\n /**\\n * set ASN.1 value(V) by unused bit and hexadecimal string of value\\n * @name setUnusedBitsAndHexValue\\n * @memberOf KJUR.asn1.DERBitString#\\n * @function\\n * @param {Integer} unusedBits\\n * @param {String} hValue\\n */\\n this.setUnusedBitsAndHexValue = function (unusedBits, hValue) {\\n if (unusedBits < 0 || 7 < unusedBits) {\\n throw \\"unused bits shall be from 0 to 7: u = \\" + unusedBits;\\n }\\n var hUnusedBits = \\"0\\" + unusedBits;\\n this.hTLV = null;\\n this.isModified = true;\\n this.hV = hUnusedBits + hValue;\\n };\\n /**\\n * set ASN.1 DER BitString by binary string
\\n * @name setByBinaryString\\n * @memberOf KJUR.asn1.DERBitString#\\n * @function\\n * @param {String} binaryString binary value string (i.e. \'10111\')\\n * @description\\n * Its unused bits will be calculated automatically by length of\\n * \'binaryValue\'.
\\n * NOTE: Trailing zeros \'0\' will be ignored.\\n * @example\\n * o = new KJUR.asn1.DERBitString();\\n * o.setByBooleanArray(\\"01011\\");\\n */\\n this.setByBinaryString = function (binaryString) {\\n binaryString = binaryString.replace(/0+$/, \'\');\\n var unusedBits = 8 - binaryString.length % 8;\\n if (unusedBits == 8)\\n unusedBits = 0;\\n for (var i = 0; i <= unusedBits; i++) {\\n binaryString += \'0\';\\n }\\n var h = \'\';\\n for (var i = 0; i < binaryString.length - 1; i += 8) {\\n var b = binaryString.substr(i, 8);\\n var x = parseInt(b, 2).toString(16);\\n if (x.length == 1)\\n x = \'0\' + x;\\n h += x;\\n }\\n this.hTLV = null;\\n this.isModified = true;\\n this.hV = \'0\' + unusedBits + h;\\n };\\n /**\\n * set ASN.1 TLV value(V) by an array of boolean
\\n * @name setByBooleanArray\\n * @memberOf KJUR.asn1.DERBitString#\\n * @function\\n * @param {array} booleanArray array of boolean (ex. [true, false, true])\\n * @description\\n * NOTE: Trailing falses will be ignored in the ASN.1 DER Object.\\n * @example\\n * o = new KJUR.asn1.DERBitString();\\n * o.setByBooleanArray([false, true, false, true, true]);\\n */\\n this.setByBooleanArray = function (booleanArray) {\\n var s = \'\';\\n for (var i = 0; i < booleanArray.length; i++) {\\n if (booleanArray[i] == true) {\\n s += \'1\';\\n }\\n else {\\n s += \'0\';\\n }\\n }\\n this.setByBinaryString(s);\\n };\\n /**\\n * generate an array of falses with specified length
\\n * @name newFalseArray\\n * @memberOf KJUR.asn1.DERBitString\\n * @function\\n * @param {Integer} nLength length of array to generate\\n * @return {array} array of boolean falses\\n * @description\\n * This static method may be useful to initialize boolean array.\\n * @example\\n * o = new KJUR.asn1.DERBitString();\\n * o.newFalseArray(3) → [false, false, false]\\n */\\n this.newFalseArray = function (nLength) {\\n var a = new Array(nLength);\\n for (var i = 0; i < nLength; i++) {\\n a[i] = false;\\n }\\n return a;\\n };\\n this.getFreshValueHex = function () {\\n return this.hV;\\n };\\n if (typeof params != \\"undefined\\") {\\n if (typeof params == \\"string\\" && params.toLowerCase().match(/^[0-9a-f]+$/)) {\\n this.setHexValueIncludingUnusedBits(params);\\n }\\n else if (typeof params[\'hex\'] != \\"undefined\\") {\\n this.setHexValueIncludingUnusedBits(params[\'hex\']);\\n }\\n else if (typeof params[\'bin\'] != \\"undefined\\") {\\n this.setByBinaryString(params[\'bin\']);\\n }\\n else if (typeof params[\'array\'] != \\"undefined\\") {\\n this.setByBooleanArray(params[\'array\']);\\n }\\n }\\n};\\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERBitString, KJUR.asn1.ASN1Object);\\n// ********************************************************************\\n/**\\n * class for ASN.1 DER OctetString
\\n * @name KJUR.asn1.DEROctetString\\n * @class class for ASN.1 DER OctetString\\n * @param {Array} params associative array of parameters (ex. {\'str\': \'aaa\'})\\n * @extends KJUR.asn1.DERAbstractString\\n * @description\\n * This class provides ASN.1 OctetString simple type.
\\n * Supported \\"params\\" attributes are:\\n *
    \\n *
  • str - to set a string as a value
  • \\n *
  • hex - to set a hexadecimal string as a value
  • \\n *
  • obj - to set a encapsulated ASN.1 value by JSON object\\n * which is defined in {@link KJUR.asn1.ASN1Util.newObject}
  • \\n *
\\n * NOTE: A parameter \'obj\' have been supported\\n * for \\"OCTET STRING, encapsulates\\" structure.\\n * since asn1 1.0.11, jsrsasign 6.1.1 (2016-Sep-25).\\n * @see KJUR.asn1.DERAbstractString - superclass\\n * @example\\n * // default constructor\\n * o = new KJUR.asn1.DEROctetString();\\n * // initialize with string\\n * o = new KJUR.asn1.DEROctetString({str: \\"aaa\\"});\\n * // initialize with hexadecimal string\\n * o = new KJUR.asn1.DEROctetString({hex: \\"616161\\"});\\n * // initialize with ASN1Util.newObject argument\\n * o = new KJUR.asn1.DEROctetString({obj: {seq: [{int: 3}, {prnstr: \'aaa\'}]}});\\n * // above generates a ASN.1 data like this:\\n * // OCTET STRING, encapsulates {\\n * // SEQUENCE {\\n * // INTEGER 3\\n * // PrintableString \'aaa\'\\n * // }\\n * // }\\n */\\nKJUR.asn1.DEROctetString = function (params) {\\n if (params !== undefined && typeof params.obj !== \\"undefined\\") {\\n var o = KJUR.asn1.ASN1Util.newObject(params.obj);\\n params.hex = o.getEncodedHex();\\n }\\n KJUR.asn1.DEROctetString.superclass.constructor.call(this, params);\\n this.hT = \\"04\\";\\n};\\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DEROctetString, KJUR.asn1.DERAbstractString);\\n// ********************************************************************\\n/**\\n * class for ASN.1 DER Null\\n * @name KJUR.asn1.DERNull\\n * @class class for ASN.1 DER Null\\n * @extends KJUR.asn1.ASN1Object\\n * @description\\n * @see KJUR.asn1.ASN1Object - superclass\\n */\\nKJUR.asn1.DERNull = function () {\\n KJUR.asn1.DERNull.superclass.constructor.call(this);\\n this.hT = \\"05\\";\\n this.hTLV = \\"0500\\";\\n};\\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERNull, KJUR.asn1.ASN1Object);\\n// ********************************************************************\\n/**\\n * class for ASN.1 DER ObjectIdentifier\\n * @name KJUR.asn1.DERObjectIdentifier\\n * @class class for ASN.1 DER ObjectIdentifier\\n * @param {Array} params associative array of parameters (ex. {\'oid\': \'2.5.4.5\'})\\n * @extends KJUR.asn1.ASN1Object\\n * @description\\n *
\\n * As for argument \'params\' for constructor, you can specify one of\\n * following properties:\\n *
    \\n *
  • oid - specify initial ASN.1 value(V) by a oid string (ex. 2.5.4.13)
  • \\n *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • \\n *
\\n * NOTE: \'params\' can be omitted.\\n */\\nKJUR.asn1.DERObjectIdentifier = function (params) {\\n var itox = function (i) {\\n var h = i.toString(16);\\n if (h.length == 1)\\n h = \'0\' + h;\\n return h;\\n };\\n var roidtox = function (roid) {\\n var h = \'\';\\n var bi = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(roid, 10);\\n var b = bi.toString(2);\\n var padLen = 7 - b.length % 7;\\n if (padLen == 7)\\n padLen = 0;\\n var bPad = \'\';\\n for (var i = 0; i < padLen; i++)\\n bPad += \'0\';\\n b = bPad + b;\\n for (var i = 0; i < b.length - 1; i += 7) {\\n var b8 = b.substr(i, 7);\\n if (i != b.length - 7)\\n b8 = \'1\' + b8;\\n h += itox(parseInt(b8, 2));\\n }\\n return h;\\n };\\n KJUR.asn1.DERObjectIdentifier.superclass.constructor.call(this);\\n this.hT = \\"06\\";\\n /**\\n * set value by a hexadecimal string\\n * @name setValueHex\\n * @memberOf KJUR.asn1.DERObjectIdentifier#\\n * @function\\n * @param {String} newHexString hexadecimal value of OID bytes\\n */\\n this.setValueHex = function (newHexString) {\\n this.hTLV = null;\\n this.isModified = true;\\n this.s = null;\\n this.hV = newHexString;\\n };\\n /**\\n * set value by a OID string
\\n * @name setValueOidString\\n * @memberOf KJUR.asn1.DERObjectIdentifier#\\n * @function\\n * @param {String} oidString OID string (ex. 2.5.4.13)\\n * @example\\n * o = new KJUR.asn1.DERObjectIdentifier();\\n * o.setValueOidString(\\"2.5.4.13\\");\\n */\\n this.setValueOidString = function (oidString) {\\n if (!oidString.match(/^[0-9.]+$/)) {\\n throw \\"malformed oid string: \\" + oidString;\\n }\\n var h = \'\';\\n var a = oidString.split(\'.\');\\n var i0 = parseInt(a[0]) * 40 + parseInt(a[1]);\\n h += itox(i0);\\n a.splice(0, 2);\\n for (var i = 0; i < a.length; i++) {\\n h += roidtox(a[i]);\\n }\\n this.hTLV = null;\\n this.isModified = true;\\n this.s = null;\\n this.hV = h;\\n };\\n /**\\n * set value by a OID name\\n * @name setValueName\\n * @memberOf KJUR.asn1.DERObjectIdentifier#\\n * @function\\n * @param {String} oidName OID name (ex. \'serverAuth\')\\n * @since 1.0.1\\n * @description\\n * OID name shall be defined in \'KJUR.asn1.x509.OID.name2oidList\'.\\n * Otherwise raise error.\\n * @example\\n * o = new KJUR.asn1.DERObjectIdentifier();\\n * o.setValueName(\\"serverAuth\\");\\n */\\n this.setValueName = function (oidName) {\\n var oid = KJUR.asn1.x509.OID.name2oid(oidName);\\n if (oid !== \'\') {\\n this.setValueOidString(oid);\\n }\\n else {\\n throw \\"DERObjectIdentifier oidName undefined: \\" + oidName;\\n }\\n };\\n this.getFreshValueHex = function () {\\n return this.hV;\\n };\\n if (params !== undefined) {\\n if (typeof params === \\"string\\") {\\n if (params.match(/^[0-2].[0-9.]+$/)) {\\n this.setValueOidString(params);\\n }\\n else {\\n this.setValueName(params);\\n }\\n }\\n else if (params.oid !== undefined) {\\n this.setValueOidString(params.oid);\\n }\\n else if (params.hex !== undefined) {\\n this.setValueHex(params.hex);\\n }\\n else if (params.name !== undefined) {\\n this.setValueName(params.name);\\n }\\n }\\n};\\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERObjectIdentifier, KJUR.asn1.ASN1Object);\\n// ********************************************************************\\n/**\\n * class for ASN.1 DER Enumerated\\n * @name KJUR.asn1.DEREnumerated\\n * @class class for ASN.1 DER Enumerated\\n * @extends KJUR.asn1.ASN1Object\\n * @description\\n *
\\n * As for argument \'params\' for constructor, you can specify one of\\n * following properties:\\n *
    \\n *
  • int - specify initial ASN.1 value(V) by integer value
  • \\n *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • \\n *
\\n * NOTE: \'params\' can be omitted.\\n * @example\\n * new KJUR.asn1.DEREnumerated(123);\\n * new KJUR.asn1.DEREnumerated({int: 123});\\n * new KJUR.asn1.DEREnumerated({hex: \'1fad\'});\\n */\\nKJUR.asn1.DEREnumerated = function (params) {\\n KJUR.asn1.DEREnumerated.superclass.constructor.call(this);\\n this.hT = \\"0a\\";\\n /**\\n * set value by Tom Wu\'s BigInteger object\\n * @name setByBigInteger\\n * @memberOf KJUR.asn1.DEREnumerated#\\n * @function\\n * @param {BigInteger} bigIntegerValue to set\\n */\\n this.setByBigInteger = function (bigIntegerValue) {\\n this.hTLV = null;\\n this.isModified = true;\\n this.hV = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(bigIntegerValue);\\n };\\n /**\\n * set value by integer value\\n * @name setByInteger\\n * @memberOf KJUR.asn1.DEREnumerated#\\n * @function\\n * @param {Integer} integer value to set\\n */\\n this.setByInteger = function (intValue) {\\n var bi = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(String(intValue), 10);\\n this.setByBigInteger(bi);\\n };\\n /**\\n * set value by integer value\\n * @name setValueHex\\n * @memberOf KJUR.asn1.DEREnumerated#\\n * @function\\n * @param {String} hexadecimal string of integer value\\n * @description\\n *
\\n * NOTE: Value shall be represented by minimum octet length of\\n * two\'s complement representation.\\n */\\n this.setValueHex = function (newHexString) {\\n this.hV = newHexString;\\n };\\n this.getFreshValueHex = function () {\\n return this.hV;\\n };\\n if (typeof params != \\"undefined\\") {\\n if (typeof params[\'int\'] != \\"undefined\\") {\\n this.setByInteger(params[\'int\']);\\n }\\n else if (typeof params == \\"number\\") {\\n this.setByInteger(params);\\n }\\n else if (typeof params[\'hex\'] != \\"undefined\\") {\\n this.setValueHex(params[\'hex\']);\\n }\\n }\\n};\\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DEREnumerated, KJUR.asn1.ASN1Object);\\n// ********************************************************************\\n/**\\n * class for ASN.1 DER UTF8String\\n * @name KJUR.asn1.DERUTF8String\\n * @class class for ASN.1 DER UTF8String\\n * @param {Array} params associative array of parameters (ex. {\'str\': \'aaa\'})\\n * @extends KJUR.asn1.DERAbstractString\\n * @description\\n * @see KJUR.asn1.DERAbstractString - superclass\\n */\\nKJUR.asn1.DERUTF8String = function (params) {\\n KJUR.asn1.DERUTF8String.superclass.constructor.call(this, params);\\n this.hT = \\"0c\\";\\n};\\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERUTF8String, KJUR.asn1.DERAbstractString);\\n// ********************************************************************\\n/**\\n * class for ASN.1 DER NumericString\\n * @name KJUR.asn1.DERNumericString\\n * @class class for ASN.1 DER NumericString\\n * @param {Array} params associative array of parameters (ex. {\'str\': \'aaa\'})\\n * @extends KJUR.asn1.DERAbstractString\\n * @description\\n * @see KJUR.asn1.DERAbstractString - superclass\\n */\\nKJUR.asn1.DERNumericString = function (params) {\\n KJUR.asn1.DERNumericString.superclass.constructor.call(this, params);\\n this.hT = \\"12\\";\\n};\\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERNumericString, KJUR.asn1.DERAbstractString);\\n// ********************************************************************\\n/**\\n * class for ASN.1 DER PrintableString\\n * @name KJUR.asn1.DERPrintableString\\n * @class class for ASN.1 DER PrintableString\\n * @param {Array} params associative array of parameters (ex. {\'str\': \'aaa\'})\\n * @extends KJUR.asn1.DERAbstractString\\n * @description\\n * @see KJUR.asn1.DERAbstractString - superclass\\n */\\nKJUR.asn1.DERPrintableString = function (params) {\\n KJUR.asn1.DERPrintableString.superclass.constructor.call(this, params);\\n this.hT = \\"13\\";\\n};\\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERPrintableString, KJUR.asn1.DERAbstractString);\\n// ********************************************************************\\n/**\\n * class for ASN.1 DER TeletexString\\n * @name KJUR.asn1.DERTeletexString\\n * @class class for ASN.1 DER TeletexString\\n * @param {Array} params associative array of parameters (ex. {\'str\': \'aaa\'})\\n * @extends KJUR.asn1.DERAbstractString\\n * @description\\n * @see KJUR.asn1.DERAbstractString - superclass\\n */\\nKJUR.asn1.DERTeletexString = function (params) {\\n KJUR.asn1.DERTeletexString.superclass.constructor.call(this, params);\\n this.hT = \\"14\\";\\n};\\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERTeletexString, KJUR.asn1.DERAbstractString);\\n// ********************************************************************\\n/**\\n * class for ASN.1 DER IA5String\\n * @name KJUR.asn1.DERIA5String\\n * @class class for ASN.1 DER IA5String\\n * @param {Array} params associative array of parameters (ex. {\'str\': \'aaa\'})\\n * @extends KJUR.asn1.DERAbstractString\\n * @description\\n * @see KJUR.asn1.DERAbstractString - superclass\\n */\\nKJUR.asn1.DERIA5String = function (params) {\\n KJUR.asn1.DERIA5String.superclass.constructor.call(this, params);\\n this.hT = \\"16\\";\\n};\\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERIA5String, KJUR.asn1.DERAbstractString);\\n// ********************************************************************\\n/**\\n * class for ASN.1 DER UTCTime\\n * @name KJUR.asn1.DERUTCTime\\n * @class class for ASN.1 DER UTCTime\\n * @param {Array} params associative array of parameters (ex. {\'str\': \'130430235959Z\'})\\n * @extends KJUR.asn1.DERAbstractTime\\n * @description\\n *
\\n * As for argument \'params\' for constructor, you can specify one of\\n * following properties:\\n *
    \\n *
  • str - specify initial ASN.1 value(V) by a string (ex.\'130430235959Z\')
  • \\n *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • \\n *
  • date - specify Date object.
  • \\n *
\\n * NOTE: \'params\' can be omitted.\\n *

EXAMPLES

\\n * @example\\n * d1 = new KJUR.asn1.DERUTCTime();\\n * d1.setString(\'130430125959Z\');\\n *\\n * d2 = new KJUR.asn1.DERUTCTime({\'str\': \'130430125959Z\'});\\n * d3 = new KJUR.asn1.DERUTCTime({\'date\': new Date(Date.UTC(2015, 0, 31, 0, 0, 0, 0))});\\n * d4 = new KJUR.asn1.DERUTCTime(\'130430125959Z\');\\n */\\nKJUR.asn1.DERUTCTime = function (params) {\\n KJUR.asn1.DERUTCTime.superclass.constructor.call(this, params);\\n this.hT = \\"17\\";\\n /**\\n * set value by a Date object
\\n * @name setByDate\\n * @memberOf KJUR.asn1.DERUTCTime#\\n * @function\\n * @param {Date} dateObject Date object to set ASN.1 value(V)\\n * @example\\n * o = new KJUR.asn1.DERUTCTime();\\n * o.setByDate(new Date(\\"2016/12/31\\"));\\n */\\n this.setByDate = function (dateObject) {\\n this.hTLV = null;\\n this.isModified = true;\\n this.date = dateObject;\\n this.s = this.formatDate(this.date, \'utc\');\\n this.hV = stohex(this.s);\\n };\\n this.getFreshValueHex = function () {\\n if (typeof this.date == \\"undefined\\" && typeof this.s == \\"undefined\\") {\\n this.date = new Date();\\n this.s = this.formatDate(this.date, \'utc\');\\n this.hV = stohex(this.s);\\n }\\n return this.hV;\\n };\\n if (params !== undefined) {\\n if (params.str !== undefined) {\\n this.setString(params.str);\\n }\\n else if (typeof params == \\"string\\" && params.match(/^[0-9]{12}Z$/)) {\\n this.setString(params);\\n }\\n else if (params.hex !== undefined) {\\n this.setStringHex(params.hex);\\n }\\n else if (params.date !== undefined) {\\n this.setByDate(params.date);\\n }\\n }\\n};\\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERUTCTime, KJUR.asn1.DERAbstractTime);\\n// ********************************************************************\\n/**\\n * class for ASN.1 DER GeneralizedTime\\n * @name KJUR.asn1.DERGeneralizedTime\\n * @class class for ASN.1 DER GeneralizedTime\\n * @param {Array} params associative array of parameters (ex. {\'str\': \'20130430235959Z\'})\\n * @property {Boolean} withMillis flag to show milliseconds or not\\n * @extends KJUR.asn1.DERAbstractTime\\n * @description\\n *
\\n * As for argument \'params\' for constructor, you can specify one of\\n * following properties:\\n *
    \\n *
  • str - specify initial ASN.1 value(V) by a string (ex.\'20130430235959Z\')
  • \\n *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • \\n *
  • date - specify Date object.
  • \\n *
  • millis - specify flag to show milliseconds (from 1.0.6)
  • \\n *
\\n * NOTE1: \'params\' can be omitted.\\n * NOTE2: \'withMillis\' property is supported from asn1 1.0.6.\\n */\\nKJUR.asn1.DERGeneralizedTime = function (params) {\\n KJUR.asn1.DERGeneralizedTime.superclass.constructor.call(this, params);\\n this.hT = \\"18\\";\\n this.withMillis = false;\\n /**\\n * set value by a Date object\\n * @name setByDate\\n * @memberOf KJUR.asn1.DERGeneralizedTime#\\n * @function\\n * @param {Date} dateObject Date object to set ASN.1 value(V)\\n * @example\\n * When you specify UTC time, use \'Date.UTC\' method like this:
\\n * o1 = new DERUTCTime();\\n * o1.setByDate(date);\\n *\\n * date = new Date(Date.UTC(2015, 0, 31, 23, 59, 59, 0)); #2015JAN31 23:59:59\\n */\\n this.setByDate = function (dateObject) {\\n this.hTLV = null;\\n this.isModified = true;\\n this.date = dateObject;\\n this.s = this.formatDate(this.date, \'gen\', this.withMillis);\\n this.hV = stohex(this.s);\\n };\\n this.getFreshValueHex = function () {\\n if (this.date === undefined && this.s === undefined) {\\n this.date = new Date();\\n this.s = this.formatDate(this.date, \'gen\', this.withMillis);\\n this.hV = stohex(this.s);\\n }\\n return this.hV;\\n };\\n if (params !== undefined) {\\n if (params.str !== undefined) {\\n this.setString(params.str);\\n }\\n else if (typeof params == \\"string\\" && params.match(/^[0-9]{14}Z$/)) {\\n this.setString(params);\\n }\\n else if (params.hex !== undefined) {\\n this.setStringHex(params.hex);\\n }\\n else if (params.date !== undefined) {\\n this.setByDate(params.date);\\n }\\n if (params.millis === true) {\\n this.withMillis = true;\\n }\\n }\\n};\\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERGeneralizedTime, KJUR.asn1.DERAbstractTime);\\n// ********************************************************************\\n/**\\n * class for ASN.1 DER Sequence\\n * @name KJUR.asn1.DERSequence\\n * @class class for ASN.1 DER Sequence\\n * @extends KJUR.asn1.DERAbstractStructured\\n * @description\\n *
\\n * As for argument \'params\' for constructor, you can specify one of\\n * following properties:\\n *
    \\n *
  • array - specify array of ASN1Object to set elements of content
  • \\n *
\\n * NOTE: \'params\' can be omitted.\\n */\\nKJUR.asn1.DERSequence = function (params) {\\n KJUR.asn1.DERSequence.superclass.constructor.call(this, params);\\n this.hT = \\"30\\";\\n this.getFreshValueHex = function () {\\n var h = \'\';\\n for (var i = 0; i < this.asn1Array.length; i++) {\\n var asn1Obj = this.asn1Array[i];\\n h += asn1Obj.getEncodedHex();\\n }\\n this.hV = h;\\n return this.hV;\\n };\\n};\\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERSequence, KJUR.asn1.DERAbstractStructured);\\n// ********************************************************************\\n/**\\n * class for ASN.1 DER Set\\n * @name KJUR.asn1.DERSet\\n * @class class for ASN.1 DER Set\\n * @extends KJUR.asn1.DERAbstractStructured\\n * @description\\n *
\\n * As for argument \'params\' for constructor, you can specify one of\\n * following properties:\\n *
    \\n *
  • array - specify array of ASN1Object to set elements of content
  • \\n *
  • sortflag - flag for sort (default: true). ASN.1 BER is not sorted in \'SET OF\'.
  • \\n *
\\n * NOTE1: \'params\' can be omitted.
\\n * NOTE2: sortflag is supported since 1.0.5.\\n */\\nKJUR.asn1.DERSet = function (params) {\\n KJUR.asn1.DERSet.superclass.constructor.call(this, params);\\n this.hT = \\"31\\";\\n this.sortFlag = true; // item shall be sorted only in ASN.1 DER\\n this.getFreshValueHex = function () {\\n var a = new Array();\\n for (var i = 0; i < this.asn1Array.length; i++) {\\n var asn1Obj = this.asn1Array[i];\\n a.push(asn1Obj.getEncodedHex());\\n }\\n if (this.sortFlag == true)\\n a.sort();\\n this.hV = a.join(\'\');\\n return this.hV;\\n };\\n if (typeof params != \\"undefined\\") {\\n if (typeof params.sortflag != \\"undefined\\" &&\\n params.sortflag == false)\\n this.sortFlag = false;\\n }\\n};\\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERSet, KJUR.asn1.DERAbstractStructured);\\n// ********************************************************************\\n/**\\n * class for ASN.1 DER TaggedObject\\n * @name KJUR.asn1.DERTaggedObject\\n * @class class for ASN.1 DER TaggedObject\\n * @extends KJUR.asn1.ASN1Object\\n * @description\\n *
\\n * Parameter \'tagNoNex\' is ASN.1 tag(T) value for this object.\\n * For example, if you find \'[1]\' tag in a ASN.1 dump,\\n * \'tagNoHex\' will be \'a1\'.\\n *
\\n * As for optional argument \'params\' for constructor, you can specify *ANY* of\\n * following properties:\\n *
    \\n *
  • explicit - specify true if this is explicit tag otherwise false\\n * (default is \'true\').
  • \\n *
  • tag - specify tag (default is \'a0\' which means [0])
  • \\n *
  • obj - specify ASN1Object which is tagged
  • \\n *
\\n * @example\\n * d1 = new KJUR.asn1.DERUTF8String({\'str\':\'a\'});\\n * d2 = new KJUR.asn1.DERTaggedObject({\'obj\': d1});\\n * hex = d2.getEncodedHex();\\n */\\nKJUR.asn1.DERTaggedObject = function (params) {\\n KJUR.asn1.DERTaggedObject.superclass.constructor.call(this);\\n this.hT = \\"a0\\";\\n this.hV = \'\';\\n this.isExplicit = true;\\n this.asn1Object = null;\\n /**\\n * set value by an ASN1Object\\n * @name setString\\n * @memberOf KJUR.asn1.DERTaggedObject#\\n * @function\\n * @param {Boolean} isExplicitFlag flag for explicit/implicit tag\\n * @param {Integer} tagNoHex hexadecimal string of ASN.1 tag\\n * @param {ASN1Object} asn1Object ASN.1 to encapsulate\\n */\\n this.setASN1Object = function (isExplicitFlag, tagNoHex, asn1Object) {\\n this.hT = tagNoHex;\\n this.isExplicit = isExplicitFlag;\\n this.asn1Object = asn1Object;\\n if (this.isExplicit) {\\n this.hV = this.asn1Object.getEncodedHex();\\n this.hTLV = null;\\n this.isModified = true;\\n }\\n else {\\n this.hV = null;\\n this.hTLV = asn1Object.getEncodedHex();\\n this.hTLV = this.hTLV.replace(/^../, tagNoHex);\\n this.isModified = false;\\n }\\n };\\n this.getFreshValueHex = function () {\\n return this.hV;\\n };\\n if (typeof params != \\"undefined\\") {\\n if (typeof params[\'tag\'] != \\"undefined\\") {\\n this.hT = params[\'tag\'];\\n }\\n if (typeof params[\'explicit\'] != \\"undefined\\") {\\n this.isExplicit = params[\'explicit\'];\\n }\\n if (typeof params[\'obj\'] != \\"undefined\\") {\\n this.asn1Object = params[\'obj\'];\\n this.setASN1Object(this.isExplicit, this.hT, this.asn1Object);\\n }\\n }\\n};\\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERTaggedObject, KJUR.asn1.ASN1Object);\\n\\n\\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsrsasign/asn1-1.0.js?")},"./lib/lib/jsrsasign/yahoo.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval(\'__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */ "YAHOO": () => (/* binding */ YAHOO)\\n/* harmony export */ });\\n/*!\\nCopyright (c) 2011, Yahoo! Inc. All rights reserved.\\nCode licensed under the BSD License:\\nhttp://developer.yahoo.com/yui/license.html\\nversion: 2.9.0\\n*/\\nvar YAHOO = {};\\nYAHOO.lang = {\\n /**\\n * Utility to set up the prototype, constructor and superclass properties to\\n * support an inheritance strategy that can chain constructors and methods.\\n * Static members will not be inherited.\\n *\\n * @method extend\\n * @static\\n * @param {Function} subc the object to modify\\n * @param {Function} superc the object to inherit\\n * @param {Object} overrides additional properties/methods to add to the\\n * subclass prototype. These will override the\\n * matching items obtained from the superclass\\n * if present.\\n */\\n extend: function (subc, superc, overrides) {\\n if (!superc || !subc) {\\n throw new Error("YAHOO.lang.extend failed, please check that " +\\n "all dependencies are included.");\\n }\\n var F = function () { };\\n F.prototype = superc.prototype;\\n subc.prototype = new F();\\n subc.prototype.constructor = subc;\\n subc.superclass = superc.prototype;\\n if (superc.prototype.constructor == Object.prototype.constructor) {\\n superc.prototype.constructor = superc;\\n }\\n if (overrides) {\\n var i;\\n for (i in overrides) {\\n subc.prototype[i] = overrides[i];\\n }\\n /*\\n * IE will not enumerate native functions in a derived object even if the\\n * function was overridden. This is a workaround for specific functions\\n * we care about on the Object prototype.\\n * @property _IEEnumFix\\n * @param {Function} r the object to receive the augmentation\\n * @param {Function} s the object that supplies the properties to augment\\n * @static\\n * @private\\n */\\n var _IEEnumFix = function () { }, ADD = ["toString", "valueOf"];\\n try {\\n if (/MSIE/.test(navigator.userAgent)) {\\n _IEEnumFix = function (r, s) {\\n for (i = 0; i < ADD.length; i = i + 1) {\\n var fname = ADD[i], f = s[fname];\\n if (typeof f === \\\'function\\\' && f != Object.prototype[fname]) {\\n r[fname] = f;\\n }\\n }\\n };\\n }\\n }\\n catch (ex) { }\\n ;\\n _IEEnumFix(subc.prototype, overrides);\\n }\\n }\\n};\\n\\n\\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsrsasign/yahoo.js?\')},"./node_modules/process/browser.js":module=>{eval("// shim for using process in browser\\nvar process = module.exports = {};\\n\\n// cached from whatever global is present so that test runners that stub it\\n// don\'t break things. But we need to wrap it in a try catch in case it is\\n// wrapped in strict mode code which doesn\'t define any globals. It\'s inside a\\n// function because try/catches deoptimize in certain engines.\\n\\nvar cachedSetTimeout;\\nvar cachedClearTimeout;\\n\\nfunction defaultSetTimout() {\\n throw new Error(\'setTimeout has not been defined\');\\n}\\nfunction defaultClearTimeout () {\\n throw new Error(\'clearTimeout has not been defined\');\\n}\\n(function () {\\n try {\\n if (typeof setTimeout === \'function\') {\\n cachedSetTimeout = setTimeout;\\n } else {\\n cachedSetTimeout = defaultSetTimout;\\n }\\n } catch (e) {\\n cachedSetTimeout = defaultSetTimout;\\n }\\n try {\\n if (typeof clearTimeout === \'function\') {\\n cachedClearTimeout = clearTimeout;\\n } else {\\n cachedClearTimeout = defaultClearTimeout;\\n }\\n } catch (e) {\\n cachedClearTimeout = defaultClearTimeout;\\n }\\n} ())\\nfunction runTimeout(fun) {\\n if (cachedSetTimeout === setTimeout) {\\n //normal enviroments in sane situations\\n return setTimeout(fun, 0);\\n }\\n // if setTimeout wasn\'t available but was latter defined\\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\\n cachedSetTimeout = setTimeout;\\n return setTimeout(fun, 0);\\n }\\n try {\\n // when when somebody has screwed with setTimeout but no I.E. maddness\\n return cachedSetTimeout(fun, 0);\\n } catch(e){\\n try {\\n // When we are in I.E. but the script has been evaled so I.E. doesn\'t trust the global object when called normally\\n return cachedSetTimeout.call(null, fun, 0);\\n } catch(e){\\n // same as above but when it\'s a version of I.E. that must have the global object for \'this\', hopfully our context correct otherwise it will throw a global error\\n return cachedSetTimeout.call(this, fun, 0);\\n }\\n }\\n\\n\\n}\\nfunction runClearTimeout(marker) {\\n if (cachedClearTimeout === clearTimeout) {\\n //normal enviroments in sane situations\\n return clearTimeout(marker);\\n }\\n // if clearTimeout wasn\'t available but was latter defined\\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\\n cachedClearTimeout = clearTimeout;\\n return clearTimeout(marker);\\n }\\n try {\\n // when when somebody has screwed with setTimeout but no I.E. maddness\\n return cachedClearTimeout(marker);\\n } catch (e){\\n try {\\n // When we are in I.E. but the script has been evaled so I.E. doesn\'t trust the global object when called normally\\n return cachedClearTimeout.call(null, marker);\\n } catch (e){\\n // same as above but when it\'s a version of I.E. that must have the global object for \'this\', hopfully our context correct otherwise it will throw a global error.\\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\\n return cachedClearTimeout.call(this, marker);\\n }\\n }\\n\\n\\n\\n}\\nvar queue = [];\\nvar draining = false;\\nvar currentQueue;\\nvar queueIndex = -1;\\n\\nfunction cleanUpNextTick() {\\n if (!draining || !currentQueue) {\\n return;\\n }\\n draining = false;\\n if (currentQueue.length) {\\n queue = currentQueue.concat(queue);\\n } else {\\n queueIndex = -1;\\n }\\n if (queue.length) {\\n drainQueue();\\n }\\n}\\n\\nfunction drainQueue() {\\n if (draining) {\\n return;\\n }\\n var timeout = runTimeout(cleanUpNextTick);\\n draining = true;\\n\\n var len = queue.length;\\n while(len) {\\n currentQueue = queue;\\n queue = [];\\n while (++queueIndex < len) {\\n if (currentQueue) {\\n currentQueue[queueIndex].run();\\n }\\n }\\n queueIndex = -1;\\n len = queue.length;\\n }\\n currentQueue = null;\\n draining = false;\\n runClearTimeout(timeout);\\n}\\n\\nprocess.nextTick = function (fun) {\\n var args = new Array(arguments.length - 1);\\n if (arguments.length > 1) {\\n for (var i = 1; i < arguments.length; i++) {\\n args[i - 1] = arguments[i];\\n }\\n }\\n queue.push(new Item(fun, args));\\n if (queue.length === 1 && !draining) {\\n runTimeout(drainQueue);\\n }\\n};\\n\\n// v8 likes predictible objects\\nfunction Item(fun, array) {\\n this.fun = fun;\\n this.array = array;\\n}\\nItem.prototype.run = function () {\\n this.fun.apply(null, this.array);\\n};\\nprocess.title = \'browser\';\\nprocess.browser = true;\\nprocess.env = {};\\nprocess.argv = [];\\nprocess.version = \'\'; // empty string to avoid regexp issues\\nprocess.versions = {};\\n\\nfunction noop() {}\\n\\nprocess.on = noop;\\nprocess.addListener = noop;\\nprocess.once = noop;\\nprocess.off = noop;\\nprocess.removeListener = noop;\\nprocess.removeAllListeners = noop;\\nprocess.emit = noop;\\nprocess.prependListener = noop;\\nprocess.prependOnceListener = noop;\\n\\nprocess.listeners = function (name) { return [] }\\n\\nprocess.binding = function (name) {\\n throw new Error(\'process.binding is not supported\');\\n};\\n\\nprocess.cwd = function () { return \'/\' };\\nprocess.chdir = function (dir) {\\n throw new Error(\'process.chdir is not supported\');\\n};\\nprocess.umask = function() { return 0; };\\n\\n\\n//# sourceURL=webpack://JSEncrypt/./node_modules/process/browser.js?")}};var __webpack_module_cache__={};function __webpack_require__(moduleId){var cachedModule=__webpack_module_cache__[moduleId];if(cachedModule!==undefined){return cachedModule.exports}var module=__webpack_module_cache__[moduleId]={exports:{}};__webpack_modules__[moduleId](module,module.exports,__webpack_require__);return module.exports}(()=>{__webpack_require__.d=(exports,definition)=>{for(var key in definition){if(__webpack_require__.o(definition,key)&&!__webpack_require__.o(exports,key)){Object.defineProperty(exports,key,{enumerable:true,get:definition[key]})}}}})();(()=>{__webpack_require__.o=(obj,prop)=>Object.prototype.hasOwnProperty.call(obj,prop)})();(()=>{__webpack_require__.r=exports=>{if(typeof Symbol!=="undefined"&&Symbol.toStringTag){Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"})}Object.defineProperty(exports,"__esModule",{value:true})}})();var __webpack_exports__=__webpack_require__("./lib/index.js");__webpack_exports__=__webpack_exports__["default"];return __webpack_exports__})()});'}},t={};function n(r){var a=t[r];if(void 0!==a)return a.exports;var i=t[r]={exports:{}};return e[r](i,i.exports,n),i.exports}"function"!=typeof Object.assign&&(Object.assign=function(){for(var e=arguments[0],t=1;t { - let d = []; - MY_FL.type = MY_CATE; - let fl = stringify(MY_FL); - fl = encodeUrl(fl); - input = input.split("{")[0] + fl; - if (MY_PAGE > 1) { - let old_session = getItem("yk_session_" + MY_CATE, "{}"); - if (MY_PAGE === 2) { - input = input.replace("optionRefresh=1", "session=" + encodeUrl(old_session)) - } else { - input = input.replace("optionRefresh=1", "session=" + encodeUrl(old_session)) - } - } - let html = fetch(input, fetch_params); - try { - html = JSON.parse(html); - let lists = html.data.filterData.listData; - let session = html.data.filterData.session; - session = stringify(session); - if (session !== getItem("yk_session_" + MY_CATE, "{}")) { - setItem("yk_session_" + MY_CATE, session) - } - lists.forEach(function (it) { - let vid; - if (it.videoLink.includes("id_")) { - vid = it.videoLink.split("id_")[1].split(".html")[0] - } else { - vid = "msearch:" - } - d.push({ - title: it.title, - img: it.img, - desc: it.summary, - url: "https://search.youku.com/api/search?appScene=show_episode&showIds=" + vid, - content: it.subTitle - }) - }) - } catch (e) { - log("一级列表解析发生错误:" + e.message) - } - setResult(d); - }), - 二级: $js.toString(() => { - var d = []; - VOD = {}; - let html = request(input); - let json = JSON.parse(html); - if (/keyword/.test(input)) { - input = "https://search.youku.com/api/search?appScene=show_episode&showIds=" + json.pageComponentList[0].commonData.showId; - json = JSON.parse(fetch(MY_URL, fetch_params)) - } - let video_lists = json.serisesList; - var name = json.sourceName; - if (/优酷/.test(name) && video_lists.length > 0) { - let ourl = "https://v.youku.com/v_show/id_" + video_lists[0].videoId + ".html"; - let _img = video_lists[0].thumbUrl; - let html = fetch(ourl, { - headers: { - Referer: "https://v.youku.com/", - "User-Agent": PC_UA - } - }); - let json = /__INITIAL_DATA__/.test(html) ? html.split("window.__INITIAL_DATA__ =")[1].split(";")[0] : "{}"; - if (json === "{}") { - log("触发了优酷人机验证"); - VOD.vod_remarks = ourl; - VOD.vod_pic = _img; - VOD.vod_name = video_lists[0].title.replace(/(\d+)/g, ""); - VOD.vod_content = "触发了优酷人机验证,本次未获取详情,但不影响播放(" + ourl + ")" - } else { - try { - json = JSON.parse(json); - let data = json.data.data; - let data_extra = data.data.extra; - let img = data_extra.showImgV; - let model = json.data.model; - let m = model.detail.data.nodes[0].nodes[0].nodes[0].data; - let _type = m.showGenre; - let _desc = m.updateInfo || m.subtitle; - let JJ = m.desc; - let _title = m.introTitle; - VOD.vod_pic = img; - VOD.vod_name = _title; - VOD.vod_type = _type; - VOD.vod_remarks = _desc; - VOD.vod_content = JJ - } catch (e) { - log("海报渲染发生错误:" + e.message); - print(json); - VOD.vod_remarks = name - } - } - } - if (!/优酷/.test(name)) { - VOD.vod_content = "非自家播放源,暂无视频简介及海报"; - VOD.vod_remarks = name - } - - function adhead(url) { - return urlencode(url) - } - - play_url = play_url.replace("&play_url=", "&type=json&play_url="); - video_lists.forEach(function (it) { - let url = "https://v.youku.com/v_show/id_" + it.videoId + ".html"; - if (it.thumbUrl) { - d.push({ - desc: it.showVideoStage ? it.showVideoStage.replace("期", "集") : it.displayName, - pic_url: it.thumbUrl, - title: it.title, - url: play_url + adhead(url) - }) - } else if (name !== "优酷") { - d.push({ - title: it.displayName ? it.displayName : it.title, - url: play_url + adhead(it.url) - }) - } - }); - VOD.vod_play_from = name; - VOD.vod_play_url = d.map(function (it) { - return it.title + "$" + it.url - }) - .join("#"); - }), - - 搜索: $js.toString(() => { - var d = []; - let html = request(input); - let json = JSON.parse(html); - json.pageComponentList.forEach(function (it) { - if (it.hasOwnProperty("commonData")) { - it = it.commonData; - d.push({ - title: it.titleDTO.displayName, - img: it.posterDTO.vThumbUrl, - desc: it.stripeBottom, - content: it.updateNotice + " " + it.feature, - url: "https://search.youku.com/api/search?appScene=show_episode&showIds=" + it.showId + "&appCaller=h5" - }) - } - }); - setResult(d) - }), -} \ No newline at end of file diff --git a/Ye-11X115490_PsyDuck4k/lib/哔哩哔哩.js b/Ye-11X115490_PsyDuck4k/lib/哔哩哔哩.js deleted file mode 100644 index b421b20a..00000000 --- a/Ye-11X115490_PsyDuck4k/lib/哔哩哔哩.js +++ /dev/null @@ -1,116 +0,0 @@ -/** - * 影视TV 弹幕支持 - * https://t.me/fongmi_offical/ - * https://github.com/FongMi/Release/tree/main/apk - * Cookie设置 - * Cookie获取方法 https://ghproxy.net/https://raw.githubusercontent.com/UndCover/PyramidStore/main/list.md - * Cookie设置方法1: DR-PY 后台管理界面 - * CMS后台管理 > 设置中心 > 环境变量 > {"bili_cookie":"XXXXXXX","vmid":"XXXXXX"} > 保存 - * Cookie设置方法2: 手动替换Cookie - * 底下代码 headers的 - * "Cookie":"$bili_cookie" - * 手动替换为 - * "Cookie":"将获取的Cookie黏贴在这" - * 客户端长期Cookie设置教程: - * 抓包哔哩手机端搜索access_key,取任意链接里的access_key和appkey在drpy环境变量中增加同名的环境变量即可 - * 此时哔哩.js这个解析可用于此源的解析线路用 - */ - -var rule = { - title:'bili', - host:'https://api.bilibili.com', - url:'/fyclass-fypage&vmid=$vmid', - detailUrl:'/pgc/view/web/season?season_id=fyid', - filter_url:'fl={{fl}}', - vmid获取教程:'登录后访问https://api.bilibili.com/x/web-interface/nav,搜索mid就是,cookie需要 bili_jct,DedeUserID,SESSDATA参数', - searchUrl:'/x/web-interface/search/type?keyword=**&page=fypage&search_type=', - searchable:1, - filterable:1, - quickSearch:0, - headers:{ - 'User-Agent':'PC_UA', - "Referer": "https://www.bilibili.com", - "Cookie":"" - }, - tab_order:['bilibili','720P'],//线路顺序,按里面的顺序优先,没写的依次排后面 - timeout:5000, - class_name:'番剧&国创&电影&电视剧&纪录片&综艺&全部&追番&追剧&时间表', - class_url:'1&4&2&5&3&7&全部&追番&追剧&时间表', - filter:{"全部":[{"key":"tid","name":"分类","value":[{"n":"番剧","v":"1"},{"n":"国创","v":"4"},{"n":"电影","v":"2"},{"n":"电视剧","v":"5"},{"n":"记录片","v":"3"},{"n":"综艺","v":"7"}]},{"key":"order","name":"排序","value":[{"n":"播放数量","v":"2"},{"n":"更新时间","v":"0"},{"n":"最高评分","v":"4"},{"n":"弹幕数量","v":"1"},{"n":"追看人数","v":"3"},{"n":"开播时间","v":"5"},{"n":"上映时间","v":"6"}]},{"key":"season_status","name":"付费","value":[{"n":"全部","v":"-1"},{"n":"免费","v":"1"},{"n":"付费","v":"2%2C6"},{"n":"大会员","v":"4%2C6"}]}],"时间表":[{"key":"tid","name":"分类","value":[{"n":"番剧","v":"1"},{"n":"国创","v":"4"}]}]}, - play_parse:true, - play_json:[{re:'http://jiexi.fc8001.top/AXogZOBnwSzZOtQf.php?url=', json:{jx:1, parse:0,header:JSON.stringify({"user-agent":"PC_UA"})}}], - pagecount:{"1":1,"2":1,"3":1,"4":1,"5":1,"7":1,"时间表":1}, - lazy:'', - limit:5, - 推荐:'', - 推荐:'js:let d=[];function get_result(url){let videos=[];let html=request(url);let jo=JSON.parse(html);if(jo["code"]===0){let vodList=jo.result?jo.result.list:jo.data.list;vodList.forEach(function(vod){let aid=(vod["season_id"]+"").trim();let title=vod["title"].trim();let img=vod["cover"].trim();let remark=vod.new_ep?vod["new_ep"]["index_show"]:vod["index_show"];videos.push({vod_id:aid,vod_name:title,vod_pic:img,vod_remarks:remark})})}return videos}function get_rank(tid,pg){return get_result("https://api.bilibili.com/pgc/web/rank/list?season_type="+tid+"&pagesize=20&page="+pg+"&day=3")}function get_rank2(tid,pg){return get_result("https://api.bilibili.com/pgc/season/rank/web/list?season_type="+tid+"&pagesize=20&page="+pg+"&day=3")}function home_video(){let videos=get_rank(1).slice(0,5);[4,2,5,3,7].forEach(function(i){videos=videos.concat(get_rank2(i).slice(0,5))});return videos}VODS=home_video();', - 一级:'', - 一级:'js:let d=[];let vmid=input.split("vmid=")[1].split("&")[0];function get_result(url){let videos=[];let html=request(url);let jo=JSON.parse(html);if(jo["code"]===0){let vodList=jo.result?jo.result.list:jo.data.list;vodList.forEach(function(vod){let aid=(vod["season_id"]+"").trim();let title=vod["title"].trim();let img=vod["cover"].trim();let remark=vod.new_ep?vod["new_ep"]["index_show"]:vod["index_show"];videos.push({vod_id:aid,vod_name:title,vod_pic:img,vod_remarks:remark})})}return videos}function get_rank(tid,pg){return get_result("https://api.bilibili.com/pgc/web/rank/list?season_type="+tid+"&pagesize=20&page="+pg+"&day=3")}function get_rank2(tid,pg){return get_result("https://api.bilibili.com/pgc/season/rank/web/list?season_type="+tid+"&pagesize=20&page="+pg+"&day=3")}function get_zhui(pg,mode){let url="https://api.bilibili.com/x/space/bangumi/follow/list?type="+mode+"&follow_status=0&pn="+pg+"&ps=10&vmid="+vmid;return get_result(url)}function get_all(tid,pg,order,season_status){let url="https://api.bilibili.com/pgc/season/index/result?order="+order+"&pagesize=20&type=1&season_type="+tid+"&page="+pg+"&season_status="+season_status;return get_result(url)}function get_timeline(tid,pg){let videos=[];let url="https://api.bilibili.com/pgc/web/timeline/v2?season_type="+tid+"&day_before=2&day_after=4";let html=request(url);let jo=JSON.parse(html);if(jo["code"]===0){let videos1=[];let vodList=jo.result.latest;vodList.forEach(function(vod){let aid=(vod["season_id"]+"").trim();let title=vod["title"].trim();let img=vod["cover"].trim();let remark=vod["pub_index"]+" "+vod["follows"].replace("系列","");videos1.push({vod_id:aid,vod_name:title,vod_pic:img,vod_remarks:remark})});let videos2=[];for(let i=0;i<7;i++){let vodList=jo["result"]["timeline"][i]["episodes"];vodList.forEach(function(vod){if(vod["published"]+""==="0"){let aid=(vod["season_id"]+"").trim();let title=vod["title"].trim();let img=vod["cover"].trim();let date=vod["pub_ts"];let remark=date+" "+vod["pub_index"];videos2.push({vod_id:aid,vod_name:title,vod_pic:img,vod_remarks:remark})}})}videos=videos2.concat(videos1)}return videos}function cate_filter(d,cookie){if(MY_CATE==="1"){return get_rank(MY_CATE,MY_PAGE)}else if(["2","3","4","5","7"].includes(MY_CATE)){return get_rank2(MY_CATE,MY_PAGE)}else if(MY_CATE==="全部"){let tid=MY_FL.tid||"1";let order=MY_FL.order||"2";let season_status=MY_FL.season_status||"-1";return get_all(tid,MY_PAGE,order,season_status)}else if(MY_CATE==="追番"){return get_zhui(MY_PAGE,1)}else if(MY_CATE==="追剧"){return get_zhui(MY_PAGE,2)}else if(MY_CATE==="时间表"){let tid=MY_FL.tid||"1";return get_timeline(tid,MY_PAGE)}else{return[]}}VODS=cate_filter();', - 二级:{ - is_json:true, - title:".result.title;.result.share_sub_title", - img:".result.cover", - desc:".result.new_ep.desc;.result.publish.pub_time;.result.subtitle", - content:".result.evaluate", - tabs:"js:pdfa=jsp.pdfa;TABS=['B站']", - lists:".result.episodes", - list_text:'title', - list_url:'cid', - }, - 二级:'', - 二级:'js:function zh(num){let p="";if(Number(num)>1e8){p=(num/1e8).toFixed(2)+"亿"}else if(Number(num)>1e4){p=(num/1e4).toFixed(2)+"万"}else{p=num}return p}let html=request(input);let jo=JSON.parse(html).result;let id=jo["season_id"];let title=jo["title"];let pic=jo["cover"];let areas=jo["areas"][0]["name"];let typeName=jo["share_sub_title"];let date=jo["publish"]["pub_time"].substr(0,4);let dec=jo["evaluate"];let remark=jo["new_ep"]["desc"];let stat=jo["stat"];let status="弹幕: "+zh(stat["danmakus"])+" 点赞: "+zh(stat["likes"])+" 投币: "+zh(stat["coins"])+" 追番追剧: "+zh(stat["favorites"]);let score=jo.hasOwnProperty("rating")?"评分: "+jo["rating"]["score"]+" "+jo["subtitle"]:"暂无评分"+" "+jo["subtitle"];let vod={vod_id:id,vod_name:title,vod_pic:pic,type_name:typeName,vod_year:date,vod_area:areas,vod_remarks:remark,vod_actor:status,vod_director:score,vod_content:dec};let ja=jo["episodes"];let playurls1=[];let playurls2=[];ja.forEach(function(tmpJo){let eid=tmpJo["id"];let cid=tmpJo["cid"];let link=tmpJo["link"];let part=tmpJo["title"].replace("#","-")+" "+tmpJo["long_title"];playurls1.push(part+"$"+eid+"_"+cid);playurls2.push(part+"$"+link)});let playUrl=playurls1.join("#")+"$$$"+playurls2.join("#");vod["vod_play_from"]="B站$$$bilibili";vod["vod_play_url"]=playUrl;VOD=vod;', - 搜索:'', - 搜索:'js:let url1=input+"media_bangumi";let url2=input+"media_ft";let html=request(url1);let msg=JSON.parse(html).message;if(msg!=="0"){VODS=[{vod_name:KEY+"➢"+msg,vod_id:"no_data",vod_remarks:"别点,缺少bili_cookie",vod_pic:"https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/404.jpg"}]}else{let jo1=JSON.parse(html).data;html=request(url2);let jo2=JSON.parse(html).data;let videos=[];let vodList=[];if(jo1["numResults"]===0){vodList=jo2["result"]}else if(jo2["numResults"]===0){vodList=jo1["result"]}else{vodList=jo1["result"].concat(jo2["result"])}vodList.forEach(function(vod){let aid=(vod["season_id"]+"").trim();let title=KEY+"➢"+vod["title"].trim().replace(\'\',"").replace("","");let img=vod["cover"].trim();let remark=vod["index_show"];videos.push({vod_id:aid,vod_name:title,vod_pic:img,vod_remarks:remark})});VODS=videos}', - lazy:'', - lazy:`js: - if (/^http/.test(input)) { - input = { - jx: 1, - url: input, - parse: 0, - header: JSON.stringify({ - "user-agent": "Mozilla/5.0" - }) - } - } else { - let ids = input.split("_"); - let dan = 'https://api.bilibili.com/x/v1/dm/list.so?oid=' + ids[1]; - let result = {}; - let url = "https://api.bilibili.com/pgc/player/web/playurl?qn=116&ep_id=" + ids[0] + "&cid=" + ids[1]; - let html = request(url); - let jRoot = JSON.parse(html); - if (jRoot["message"] !== "success") { - print("需要大会员权限才能观看"); - input = "" - } else { - let jo = jRoot["result"]; - let ja = jo["durl"]; - let maxSize = -1; - let position = -1; - ja.forEach(function(tmpJo, i) { - if (maxSize < Number(tmpJo["size"])) { - maxSize = Number(tmpJo["size"]); - position = i - } - }); - let url = ""; - if (ja.length > 0) { - if (position === -1) { - position = 0 - } - url = ja[position]["url"] - } - result["parse"] = 0; - result["playUrl"] = ""; - result["url"] = url; - result["header"] = { - Referer: "https://www.bilibili.com", - "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" - }; - result["contentType"] = "video/x-flv"; - result["danmaku"] = dan; - input = result - } - } - `, -} \ No newline at end of file diff --git a/Ye-11X115490_PsyDuck4k/lib/布布影视.js b/Ye-11X115490_PsyDuck4k/lib/布布影视.js deleted file mode 100644 index a23348e4..00000000 --- a/Ye-11X115490_PsyDuck4k/lib/布布影视.js +++ /dev/null @@ -1,211 +0,0 @@ -// 本资源来源于互联网公开渠道,仅可用于个人学习爬虫技术。 -// 严禁将其用于任何商业用途,下载后请于 24 小时内删除,搜索结果均来自源站,本人不承担任何责任。 - -import {Crypto, _} from 'assets://js/lib/cat.js'; -let host = 'https://bubutv.top'; -let device_id = ''; -const pkg = 'com.sunshine.tv'; -const ver = '4'; -const device_id_cache_key = 'com.sunshine.tv_3qys_B7k7Dt56Rn'; - -async function init(cfg) { - const ext = cfg.ext; - if (typeof cfg.ext === 'string' && cfg.ext.startsWith('http')) { - host = cfg.ext.trim().replace(/\/$/, ''); - } -} - -async function home(filter) { - const hd = await getHeaders(); - const resp = await req(`${host}/api.php/app/index/home`, { headers: hd }); - const json = JSON.parse(resp.content); - const classes = _.map(json.data.categories, (i) => ({ - 'type_id': i.type_name, - 'type_name': i.type_name - })); - const videos = []; - for (const cat of json.data.categories) { - videos.push(...arr2vods(cat.videos)); - } - return JSON.stringify({ class: classes, list: videos }); -} - -async function homeVod() { - return JSON.stringify({ list: [] }); -} - -async function category(tid, pg, filter, extend) { - const hd = await getHeaders(); - const url = `${host}/api.php/app/filter/vod?type_name=${encodeURIComponent(tid)}&page=${pg}&sort=hits`; - const resp = await req(url, { headers: hd }); - const json = JSON.parse(resp.content); - return JSON.stringify({ - list: arr2vods(json.data), - pagecount: json.pageCount, - page: parseInt(pg) - }); -} - -async function search(wd, quick, pg=1) { - const hd = await getHeaders(); - const url = `${host}/api.php/app/search/index?wd=${encodeURIComponent(wd)}&page=${pg}&limit=15`; - const resp = await req(url, { headers: hd }); - const json = JSON.parse(resp.content); - return JSON.stringify({ - list: arr2vods(json.data), - pagecount: json.pageCount, - page: parseInt(pg) - }); -} - -async function detail(id) { - const hd = await getHeaders(); - const resp = await req(`${host}/api.php/app/vod/get_detail?vod_id=${id}`, { headers: hd }); - const json = JSON.parse(resp.content); - const data = json.data[0]; - const vodplayer = json.vodplayer; - const shows = []; - const play_urls = []; - const raw_shows = data.vod_play_from.split('$$$'); - const raw_urls_list = data.vod_play_url.split('$$$'); - for (let i = 0; i < raw_shows.length; i++) { - const show_code = raw_shows[i]; - const urls_str = raw_urls_list[i]; - let need_parse = 0; - let is_show = 0; - let name = show_code; - const player_info = _.find(vodplayer, (p) => p.from === show_code); - if (player_info) { - is_show = 1; - need_parse = player_info.decode_status; - if (show_code.toLowerCase() !== player_info.show.toLowerCase()) { - name = `${player_info.show} (${show_code})`; - } - } - if (is_show === 1) { - const urls = []; - for (const url_item of urls_str.split('#')) { - if (url_item.includes('$')) { - const [episode, url] = url_item.split('$'); - urls.push(`${episode}$${show_code}@${need_parse}@${url}`); - } - } - if (urls.length > 0) { - play_urls.push(urls.join('#')); - shows.push(name); - } - } - } - const video = { - 'vod_id': data.vod_id.toString(), - 'vod_name': data.vod_name, - 'vod_pic': data.vod_pic, - 'vod_remarks': data.vod_remarks, - 'vod_year': data.vod_year, - 'vod_area': data.vod_area, - 'vod_actor': data.vod_actor, - 'vod_director': data.vod_director, - 'vod_content': data.vod_content, - 'vod_play_from': shows.join('$$$'), - 'vod_play_url': play_urls.join('$$$'), - 'type_name': data.vod_class - }; - return JSON.stringify({ list: [video] }); -} - -async function play(flag, vid, flags) { - const parts = vid.split('@'); - const play_from = parts[0]; - const need_parse = parts[1]; - const raw_url = parts[2]; - let url = ''; - let jx = 0; - if (need_parse === '1') { - try { - const hd = await getHeaders(); - const apiUrl = `${host}/api.php/app/decode/url/?url=${encodeURIComponent(raw_url)}&vodFrom=${play_from}`; - const resp = await req(apiUrl, { headers: hd, timeout: 30000 }); - const json = JSON.parse(resp.content); - if (json.data && json.data.startsWith('http')) { - url = json.data; - } - } catch (e) { - console.error('Play decode error:', e); - } - } - if (!url) { - url = raw_url; - if (/(www\.iqiyi|v\.qq|v\.youku|www\.mgtv|www\.bilibili)\.com/.test(raw_url)) { - jx = 1; - } - } - return JSON.stringify({ jx: jx, parse: 0, url: url, header: {'User-Agent': 'com.sunshine.tv/1.2.0 (Linux;Android 15) AndroidXMedia3/1.4.1'}}); -} - -async function getHeaders() { - const timestamp = Math.floor(Date.now() / 1000).toString(); - const nonce = randomStr(3, '0123456789'); - if (!device_id) { - device_id = await local.get('cache', device_id_cache_key); - if (!device_id || device_id.length !== 16) { - device_id = randomStr(16); - await local.set('cache', device_id_cache_key, device_id); - } - } - const sign_str = `finger=SF-C3B2B41F6EFFFF9869176CF68F6790E8F07506FC88632C94B4F5F0430D5498CA&id=${pkg}&nonce=${nonce}&sk=SK-thanks&time=${timestamp}&v=${ver}`; - const sign = sha256(sign_str); - return { - 'User-Agent': 'okhttp/4.12.0', - 'Accept': 'application/json', - 'x-aid': pkg, - 'x-ave': ver, - 'x-time': timestamp, - 'x-nonc': nonce, - 'x-sign': sign, - 'x-device-id': device_id, - 'x-device-brand': 'vivo', - 'x-device-model': 'V2309A', - 'x-update-id': '0245861b-2ebf-5524-389d-f983830651ec' - }; -} - -function arr2vods(arr) { - return _.map(arr, (i) => { - let type_name = i.type_name || ''; - if (i.vod_class) { - type_name = type_name + (type_name ? ',' : '') + i.vod_class; - } - return { - 'vod_id': i.vod_id.toString(), - 'vod_name': i.vod_name, - 'vod_pic': i.vod_pic, - 'vod_remarks': i.vod_remarks, - 'type_name': type_name, - 'vod_year': i.vod_year - }; - }); -} - -function randomStr(len, chars = '0123456789abcdef') { - let str = ''; - for (let i = 0; i < len; i++) { - str += chars[_.random(0, chars.length - 1)]; - } - return str; -} - -function sha256(text) { - return Crypto.SHA256(text).toString().toUpperCase(); -} - -export function __jsEvalReturn() { - return { - init: init, - home: home, - homeVod: homeVod, - category: category, - search: search, - detail: detail, - play: play - }; -} \ No newline at end of file diff --git a/Ye-11X115490_PsyDuck4k/lib/枫叶.js b/Ye-11X115490_PsyDuck4k/lib/枫叶.js deleted file mode 100644 index ea3f8cb2..00000000 --- a/Ye-11X115490_PsyDuck4k/lib/枫叶.js +++ /dev/null @@ -1,948 +0,0 @@ -import cheerio from 'assets://js/lib/cheerio.min.js'; - -// import cheerio from '../lib/cheerio.min.js'; -const sites = [ - 'https://www.cd-zj.com', - 'https://www.gzwlr.com', -] -const appConfig = { - siteName: "枫叶4k影院", - siteUrl: sites[0] -} -const UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"; -const Headers = { - "User-Agent": UA, - "Referer": appConfig.siteUrl + "/", -} -async function init(ext) {} - -function getYearFilter() { - let years = [{ - "n": "全部", - "v": "" - }]; - const currentYear = new Date().getFullYear().toString(); - for (let y = currentYear; y >= currentYear - 22; y--) { - years.push({ - "n": String(y), - "v": String(y) - }); - } - return { - "key": "year", - "name": "年份", - "value": years - }; -} - -function getLetterFilter() { - return { - "key": "letter", - "name": "字母", - "value": [{ - "n": "全部", - "v": "" - }, - { - "n": "A", - "v": "A" - }, { - "n": "B", - "v": "B" - }, { - "n": "C", - "v": "C" - }, { - "n": "D", - "v": "D" - }, - { - "n": "E", - "v": "E" - }, { - "n": "F", - "v": "F" - }, { - "n": "G", - "v": "G" - }, { - "n": "H", - "v": "H" - }, - { - "n": "I", - "v": "I" - }, { - "n": "J", - "v": "J" - }, { - "n": "K", - "v": "K" - }, { - "n": "L", - "v": "L" - }, - { - "n": "M", - "v": "M" - }, { - "n": "N", - "v": "N" - }, { - "n": "O", - "v": "O" - }, { - "n": "P", - "v": "P" - }, - { - "n": "Q", - "v": "Q" - }, { - "n": "R", - "v": "R" - }, { - "n": "S", - "v": "S" - }, { - "n": "T", - "v": "T" - }, - { - "n": "U", - "v": "U" - }, { - "n": "V", - "v": "V" - }, { - "n": "W", - "v": "W" - }, { - "n": "X", - "v": "X" - }, - { - "n": "Y", - "v": "Y" - }, { - "n": "Z", - "v": "Z" - }, { - "n": "0-9", - "v": "0-9" - } - ] - } -} -const OtherFilters = [{ - "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": "其它" - } - ] - }, - getYearFilter(), - { - "key": "lang", - "name": "语言", - "value": [{ - "n": "全部", - "v": "" - }, { - "n": "国语", - "v": "国语" - }, { - "n": "英语", - "v": "英语" - }, - { - "n": "粤语", - "v": "粤语" - }, { - "n": "闽南语", - "v": "闽南语" - }, { - "n": "韩语", - "v": "韩语" - }, - { - "n": "日语", - "v": "日语" - }, { - "n": "其它", - "v": "其它" - } - ] - }, - getLetterFilter() -]; -const myFilters = { - "2": [{ - key: "type", - "name": "类型", - value: [{ - "n": "全部", - "v": "2" - }, - { - "n": "国产剧", - "v": "13" - }, - { - "n": "日韩剧", - "v": "15" - }, - { - "n": "海外剧", - "v": "16" - }, - ] - }, - { - "key": "class", - "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": "其他" - } - ] - }, - ...OtherFilters - ], - "1": [{ - "key": "type", - "name": "类型", - value: [{ - "n": "全部", - "v": "1" - }, - { - "n": "动作片", - "v": "6" - }, - { - "n": "喜剧片", - "v": "7" - }, - { - "n": "恐怖片", - "v": "8" - }, - { - "n": "科幻片", - "v": "9" - }, - { - "n": "爱情片", - "v": "10" - }, - { - "n": "剧情片", - "v": "11" - } - ] - }, - { - "key": "class", - "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": "惊悚" - }, - { - "n": "经典", - "v": "经典" - }, - { - "n": "青春", - "v": "青春" - }, - { - "n": "文艺", - "v": "文艺" - }, - { - "n": "微电影", - "v": "微电影" - }, - { - "n": "古装", - "v": "古装" - }, - { - "n": "历史", - "v": "历史" - }, - { - "n": "运动", - "v": "运动" - }, - { - "n": "农村", - "v": "农村" - }, - { - "n": "儿童", - "v": "儿童" - }, - { - "n": "网络电影", - "v": "网络电影" - } - ] - }, - ...OtherFilters - ], - "4": [{ - "key": "type", - "name": "类型", - "value": [{ - "n": "全部", - "v": "4" - }, - { - "n": "国产动漫", - "v": "25" - }, - { - "n": "日韩动漫", - "v": "26" - }, - ] - }, - { - "key": "class", - "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": "原创" - }, - { - "n": "亲子", - "v": "亲子" - }, - { - "n": "益智", - "v": "益智" - }, - { - "n": "励志", - "v": "励志" - }, - { - "n": "其他", - "v": "其他" - } - ] - }, - ...OtherFilters - ], - "3": [{ - "key": "type", - "name": "类型", - value: [{ - "n": "全部", - "v": "3" - }, - { - "n": "大陆综艺", - "v": "21" - }, - { - "n": "日韩综艺", - "v": "22" - }, - ] - }, - { - "key": "class", - "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": "求职" - } - ] - }, - ...OtherFilters - ], - "5": [ - getYearFilter(), - getLetterFilter() - ], -}; -async function home(filter) { - return JSON.stringify({ - class: [{ - type_id: "/label/qq", - type_name: "腾讯精选" - }, - { - type_id: "/label/youku", - type_name: "优酷精选" - }, - { - type_id: "/label/bli", - type_name: "哔哩精选" - }, - { - type_id: "2", - type_name: "电视剧", - }, - { - type_id: "1", - type_name: "电影" - }, - { - type_id: "4", - type_name: "动漫" - }, - { - type_id: "3", - type_name: "综艺" - }, - { - type_id: "5", - type_name: "热门短剧" - } - - - ], - filters: myFilters - }); -} -async function category(tid, pg, filter, extend) { - pg = pg || 1; - let type = extend.type || tid; - const isLanel = tid.startsWith("/label"); - let url = ""; - const typePrefix = appConfig.siteUrl === 'https://www.gzwlr.com' ? "list" : "cupfox-list"; - if (isLanel) { - url = appConfig.siteUrl + tid + `/page/${pg}.html`; - } else { - let classVal = extend.class || ''; - let areaVal = extend.area || ''; - let langVal = extend.lang || ''; - let letterVal = extend.letter || ''; - let orderVal = extend.orderBy || ''; - let yearVal = extend.year || ''; - url = `${appConfig.siteUrl}/${typePrefix}/${type}-${areaVal}-${''}-${classVal}-${langVal}-${letterVal}-${orderVal}-${''}-${pg}-${''}-${''}-${yearVal}.html`; - } - const html = (await req(url)).content; - const $ = cheerio.load(html); - let list = []; - $(".public-list-div.public-list-bj").each(function(index, el) { - let vod_id = $(el).find("a.public-list-exp").attr("href"); - let vod_name = $(el).find("a.public-list-exp").attr("title").trim(); - let _4k = $(el).find(".public-prt-g").text().trim() - let vod_pic = $(el).find(".public-list-exp img").attr("data-src"); - let upto = $(el).find(".ft2").text().trim(); - let vod_remarks = _4k + ' ' + upto - list.push({ - vod_id, - vod_name, - vod_pic, - vod_remarks - }); - }); - const pageStr = $('.page-tip').text().trim() - const pagecount = pageStr.match(/\d+\/(\d+)页/)?.[1] || 1 - return JSON.stringify({ - list, - pagecount - }); -} -async function search(wd, quick, page) { - if (page >= 2) { - return JSON.stringify({ - list: [], - pagecount: 1 - }); - } - try { - const searchPrefex = appConfig.siteUrl === 'https://www.gzwlr.com' ? "search" : "cupfox-search"; - const url = `${appConfig.siteUrl}/${searchPrefex}/-------------.html?wd=${wd}`; - const html = (await req(url)).content; - const $ = cheerio.load(html); - let list = []; - $('.search-box').each((i, el) => { - const vod_id = $(el).find(".thumb-txt a").attr('href') || ''; - const vod_name = $(el).find(".thumb-txt a").text().trim() - const vod_pic = $(el).find('.left img').attr('data-src') || ''; - const vod_remarks = $(el).find('.public-list-prb').text().trim() - list.push({ - vod_id, - vod_name, - vod_pic, - vod_remarks - }); - }) - return JSON.stringify({ - list: list, - pagecount: 1 - }); - } catch (e) { - console.error("❌ search 遭遇内部崩溃 =", e.message); - return JSON.stringify({ - list: [] - }); - } -} -async function detail(id) { - try { - const videoId = id; - const url = appConfig.siteUrl + videoId; - const response = await req(url); - const html = response ? response.content : ''; - const $ = cheerio.load(html); - - const vod_name = $('.slide-info-title').text().trim(); - const imgSrc = $('.detail-pic img').attr("data-src") || ''; - const vod_pic = imgSrc ? (imgSrc.startsWith('http') ? imgSrc : appConfig.siteUrl + imgSrc) : ''; - const vod_actor = $('.detail-info .slide-info').eq(2).text().replace(/演员:\s*/, '').trim(); - const vod_remarks = $('.detail-info .slide-info').eq(4).text().replace(/连载\s*:\s*/, '').trim(); - const vod_content = ''+$('#height_limit').text().trim(); - - - let rawLines = []; - let rawPlaylists = []; - $('.swiper-slide').each((i, el) => { - const lineName = $(el).clone().find('i, span').remove().end().text().trim(); - rawLines.push(lineName); - }); - $('.anthology-list-box').each((lineIndex, poolEl) => { - const episodes = []; - $(poolEl).find('a').each((episodeIndex, epEl) => { - const name = $(epEl).text().trim(); - const href = $(epEl).attr('href') || ''; - if (name && href) { - episodes.push(`${name}\$${href}`); - } - }); - rawPlaylists.push(episodes); - }); - - - let targetLineIdx = -1; - - for (let i = 0; i < rawLines.length; i++) { - const name = rawLines[i]; - const eps = rawPlaylists[i]; - if (name.includes("至臻4k") && eps.length > 0) { - targetLineIdx = i; - break; - } - } - - if (targetLineIdx === -1 && rawLines.length > 0) { - targetLineIdx = 0; - } - - let finalLines = []; - let finalPlaylists = []; - if (targetLineIdx !== -1) { - finalLines.push("在线播放"); - finalPlaylists.push(rawPlaylists[targetLineIdx]); - } - - - const { - vod_play_from, - vod_play_url - } = buildVodPlayData(finalLines, finalPlaylists, true); - const vod = { - vod_id: videoId, - vod_name, - vod_pic, - vod_actor, - vod_remarks, - vod_content, - vod_play_from, - vod_play_url - }; - return JSON.stringify({ - list: [vod] - }); - } catch (error) { - console.error(`解析详情页异常 [ID: ${id}]:`, error); - return JSON.stringify({ - list: [] - }); - } -} - -function buildVodPlayData(lines, playlists, shouldReverse = true) { - const processedPlaylists = playlists.map(eps => { - if (shouldReverse) { - eps.reverse(); - } - return eps.join('#'); - }); - return { - vod_play_from: lines.filter(Boolean).join('$$$'), - vod_play_url: processedPlaylists.join('$$$') - }; -} - -function isDirectUrl(url) { - return url.startsWith('http') || url.endsWith(".m3u8") || url.endsWith(".mp4"); -} -async function parsePLayUrl(is2kLine, url) { - const parseApiUrl = is2kLine ? "https://zzrs.mfdyvip.com/player/" : "https://fgsrg.hzqingshan.com/player/" - try { - const html = (await req(`${parseApiUrl}?url=${url}`, { - method: 'GET', - headers: Headers - })).content - const $ = cheerio.load(html) - const token = $('#player-data').attr('data-te'); - console.log("🚀 成功拿到 token:", token); - let playData = await req(`${parseApiUrl}/mplayer.php`, { - method: 'POST', - headers: { - 'Content-Type': 'application/x-www-form-urlencoded', - }, - data: { - url: url, - token: token, - } - }).content - playData = JSON.parse(playData) - return playData.url - } catch (e) { - console.error("❌ play encounters an internal crash =", e); - return ""; - } -} -async function play(flag, id, flags) { - try { - const html = (await req(`${appConfig.siteUrl}${id}`)).content; - const url = getPlayUrl(html) - if (isDirectUrl(url)) { - return JSON.stringify({ - parse: 0, - Header: { - "User-Agent": UA - }, - url, - }); - } - const is2kLine = flag.includes('2k') - const playUrl = await parsePLayUrl(is2kLine, url) - return JSON.stringify({ - parse: 0, - Header: { - "User-Agent": UA - }, - url: playUrl - }); - } catch (e) { - console.error("❌ play 遭遇内部崩溃 =", e); - return JSON.stringify({ - parse: 0, - url: "" - }); - } -} - -function getPlayUrl(html) { - const match = html.match(/var\s+player_aaaa[\s\S]*?"url"\s*:\s*"([^"]+)"/); - let url = match ? match[1] : ''; - url = url.replace(/\\/g, ''); - return url; -} -export default { - init, - home, - category, - detail, - search, - play -}; diff --git a/Ye-11X115490_PsyDuck4k/lib/歪比巴卜.js b/Ye-11X115490_PsyDuck4k/lib/歪比巴卜.js deleted file mode 100644 index 5590e3e1..00000000 --- a/Ye-11X115490_PsyDuck4k/lib/歪比巴卜.js +++ /dev/null @@ -1,678 +0,0 @@ -/** - title: "歪比巴卜", - author: "", - logo: "https://wbbb1.com/static/images/logo.png", - more: { - sourceTag: "在线影视" - } -*/ -import { Crypto, load, _ } from 'assets://js/lib/cat.js'; - -let HOST = 'https://wbbb1.com'; -let siteKey = "", siteType = "", sourceKey = "", ext = ""; - -const UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36'; - -async function init(cfg) { - siteKey = cfg.skey; - siteType = cfg.stype; - sourceKey = cfg.sourceKey; - ext = cfg.ext; - - if (ext && ext.startsWith('http')) { - HOST = ext; - } -} - -async function home(filter) { - const classes = [ - { type_id: "1", type_name: "电影" }, - { type_id: "2", type_name: "剧集" }, - { type_id: "3", type_name: "动漫" }, - { type_id: "4", type_name: "综艺" } - ]; - - const filterObj = { - "1": [ - { - key: "class", - 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: "剧情" } - ] - }, - { - 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: "泰国" } - ] - }, - { - key: "lang", - name: "语言", - value: [ - { n: "全部", v: "" }, - { n: "国语", v: "国语" }, - { n: "粤语", v: "粤语" }, - { n: "英语", v: "英语" }, - { n: "日语", v: "日语" }, - { n: "韩语", v: "韩语" } - ] - }, - { - key: "year", - name: "年份", - value: [ - { n: "全部", v: "" }, - { n: "2026", v: "2026" }, - { n: "2025", v: "2025" }, - { n: "2024", v: "2024" }, - { n: "2023", v: "2023" }, - { n: "2022", v: "2022" }, - { n: "2021", v: "2021" }, - { n: "2020", v: "2020" }, - { n: "2019", v: "2019" }, - { n: "2018", v: "2018" } - ] - }, - { - key: "letter", - name: "字母", - value: [ - { n: "全部", v: "" }, - { n: "A", v: "A" }, - { n: "B", v: "B" }, - { n: "C", v: "C" }, - { n: "D", v: "D" }, - { n: "E", v: "E" }, - { n: "F", v: "F" }, - { n: "G", v: "G" }, - { n: "H", v: "H" }, - { n: "I", v: "I" }, - { n: "J", v: "J" }, - { n: "K", v: "K" }, - { n: "L", v: "L" }, - { n: "M", v: "M" }, - { n: "N", v: "N" }, - { n: "O", v: "O" }, - { n: "P", v: "P" }, - { n: "Q", v: "Q" }, - { n: "R", v: "R" }, - { n: "S", v: "S" }, - { n: "T", v: "T" }, - { n: "U", v: "U" }, - { n: "V", v: "V" }, - { n: "W", v: "W" }, - { n: "X", v: "X" }, - { n: "Y", v: "Y" }, - { n: "Z", v: "Z" }, - { n: "0-9", v: "0-9" } - ] - }, - { - key: "by", - name: "排序", - value: [ - { n: "时间排序", v: "time" }, - { n: "人气排序", v: "hits" }, - { n: "评分排序", v: "score" } - ] - } - ], - - "2": [ - { - key: "class", - 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: "剧情" } - ] - }, - { - key: "area", - name: "地区", - value: [ - { n: "全部", v: "" }, - { n: "大陆", v: "大陆" }, - { n: "港台", v: "港台" }, - { n: "美国", v: "美国" }, - { n: "韩国", v: "韩国" }, - { n: "日本", v: "日本" }, - { n: "泰国", v: "泰国" } - ] - }, - { - key: "lang", - name: "语言", - value: [ - { n: "全部", v: "" }, - { n: "国语", v: "国语" }, - { n: "粤语", v: "粤语" }, - { n: "英语", v: "英语" }, - { n: "日语", v: "日语" }, - { n: "韩语", v: "韩语" } - ] - }, - { - key: "year", - name: "年份", - value: [ - { n: "全部", v: "" }, - { n: "2026", v: "2026" }, - { n: "2025", v: "2025" }, - { n: "2024", v: "2024" }, - { n: "2023", v: "2023" }, - { n: "2022", v: "2022" }, - { n: "2021", v: "2021" }, - { n: "2020", v: "2020" } - ] - }, - { - key: "letter", - name: "字母", - value: [ - { n: "全部", v: "" }, - { n: "A", v: "A" }, - { n: "B", v: "B" }, - { n: "C", v: "C" }, - { n: "D", v: "D" }, - { n: "E", v: "E" }, - { n: "F", v: "F" }, - { n: "G", v: "G" }, - { n: "H", v: "H" }, - { n: "I", v: "I" }, - { n: "J", v: "J" }, - { n: "K", v: "K" }, - { n: "L", v: "L" }, - { n: "M", v: "M" }, - { n: "N", v: "N" }, - { n: "O", v: "O" }, - { n: "P", v: "P" }, - { n: "Q", v: "Q" }, - { n: "R", v: "R" }, - { n: "S", v: "S" }, - { n: "T", v: "T" }, - { n: "U", v: "U" }, - { n: "V", v: "V" }, - { n: "W", v: "W" }, - { n: "X", v: "X" }, - { n: "Y", v: "Y" }, - { n: "Z", v: "Z" }, - { n: "0-9", v: "0-9" } - ] - }, - { - key: "by", - name: "排序", - value: [ - { n: "时间排序", v: "time" }, - { n: "人气排序", v: "hits" }, - { n: "评分排序", v: "score" } - ] - } - ], - - "3": [ - { - key: "class", - name: "类型", - value: [ - { n: "全部", v: "" }, - { n: "国产动漫", v: "国产动漫" }, - { n: "日本动漫", v: "日本动漫" }, - { n: "欧美动漫", v: "欧美动漫" } - ] - }, - { - key: "year", - name: "年份", - value: [ - { n: "全部", v: "" }, - { n: "2025", v: "2025" }, - { n: "2024", v: "2024" }, - { n: "2023", v: "2023" } - ] - }, - { - key: "by", - name: "排序", - value: [ - { n: "时间排序", v: "time" }, - { n: "人气排序", v: "hits" }, - { n: "评分排序", v: "score" } - ] - } - ], - - "4": [ - { - key: "class", - name: "类型", - value: [ - { n: "全部", v: "" }, - { n: "大陆综艺", v: "大陆综艺" }, - { n: "港台综艺", v: "港台综艺" }, - { n: "日韩综艺", v: "日韩综艺" }, - { n: "欧美综艺", v: "欧美综艺" } - ] - }, - { - key: "by", - name: "排序", - value: [ - { n: "时间排序", v: "time" }, - { n: "人气排序", v: "hits" }, - { n: "评分排序", v: "score" } - ] - } - ] - }; - - return JSON.stringify({ - class: classes, - filters: filterObj - }); -} - -async function homeVod() { - try { - const res = await req(HOST, { - headers: { 'User-Agent': UA } - }); - - const $ = load(res.content); - const list = []; - - $('.module-poster-item.module-item').each((_, item) => { - const it = $(item); - const href = it.attr('href'); - const vod_id = href ? href.match(/\/detail\/(\d+)\.html/)?.[1] : ''; - - list.push({ - vod_id: vod_id || href, - vod_name: it.attr('title') || '', - vod_pic: it.find('img.lazyload').attr('data-original') || '', - vod_remarks: it.find('.module-item-note').text().trim() || '' - }); - }); - - return JSON.stringify({ list: list }); - } catch (e) { - return JSON.stringify({ list: [] }); - } -} - -async function category(tid, pg, filter, extend) { - if (!pg || pg <= 0) pg = 1; - - const area = extend.area || ''; - const by = extend.by || 'time'; - const cls = extend.class || ''; - const lang = extend.lang || ''; - const letter = extend.letter || ''; - const year = extend.year || ''; - - const url = `${HOST}/show/${tid}-${area}-${by}-${cls}-${lang}-${letter}---${pg}---${year}.html`; - - try { - const res = await req(url, { - headers: { 'User-Agent': UA } - }); - - const $ = load(res.content); - const list = []; - - $('.module-poster-item.module-item').each((_, item) => { - const it = $(item); - const href = it.attr('href'); - const vod_id = href ? href.match(/\/detail\/(\d+)\.html/)?.[1] : ''; - - list.push({ - vod_id: vod_id || href, - vod_name: it.attr('title') || '', - vod_pic: it.find('img.lazyload').attr('data-original') || '', - vod_remarks: it.find('.module-item-note').text().trim() || '' - }); - }); - - const hasNext = res.content.includes('title="下一页"') || res.content.includes('class="next"'); - const pagecount = hasNext ? pg + 1 : pg; - - return JSON.stringify({ - page: pg, - pagecount: pagecount, - limit: 72, - total: list.length * (hasNext ? 2 : 1), - list: list - }); - } catch (e) { - return JSON.stringify({ - page: pg, - pagecount: pg, - limit: 0, - total: 0, - list: [] - }); - } -} - -async function search(wd, pg) { - if (!pg || pg <= 0) pg = 1; - - const url = `${HOST}/search/-------------.html?wd=${encodeURIComponent(wd)}&page=${pg}`; - - try { - const res = await req(url, { - headers: { 'User-Agent': UA } - }); - - const $ = load(res.content); - const list = []; - - $('.module-card-item.module-item').each((_, item) => { - const it = $(item); - const link = it.find('.module-card-item-poster'); - const href = link.attr('href'); - const vod_id = href ? href.match(/\/detail\/(\d+)\.html/)?.[1] : ''; - - list.push({ - vod_id: vod_id || href, - vod_name: it.find('.module-card-item-title strong').text().trim() || '', - vod_pic: link.find('img.lazyload').attr('data-original') || '', - vod_remarks: link.find('.module-item-note').text().trim() || '' - }); - }); - - const hasNext = list.length >= 20; - const pagecount = hasNext ? pg + 1 : pg; - - return JSON.stringify({ - page: pg, - pagecount: pagecount, - total: list.length, - list: list - }); - } catch (e) { - return JSON.stringify({ - page: pg, - pagecount: pg, - total: 0, - list: [] - }); - } -} - -async function detail(id) { - try { - const res = await req(id.startsWith('http') ? id : `${HOST}/detail/${id}.html`, { - headers: { 'User-Agent': UA } - }); - - const $ = load(res.content); - - const vod_name = $('h1').first().text().trim() || ''; - const vod_pic = $('.module-info-poster img.lazyload').attr('data-original') || ''; - - let vod_year = ''; - let vod_area = ''; - let vod_type = ''; - - $('.module-info-tag-link a').each((_, el) => { - const text = $(el).text().trim(); - if (/^\d{4}$/.test(text)) { - vod_year = text; - } else if (['大陆', '香港', '台湾', '美国', '日本', '韩国', '欧美', '港台'].includes(text)) { - vod_area = text; - } else if (!vod_type) { - vod_type = text; - } - }); - - let vod_director = ''; - let vod_actor = ''; - let vod_remarks = ''; - - $('.module-info-item').each((_, el) => { - const title = $(el).find('.module-info-item-title').text().trim(); - const content = $(el).find('.module-info-item-content').text().trim(); - - if (title.includes('导演')) { - vod_director = content.replace(/\s+/g, ' ').trim(); - } else if (title.includes('主演')) { - vod_actor = content.replace(/\s+/g, ' ').trim(); - } else if (title.includes('备注') || title.includes('更新')) { - vod_remarks = content; - } - }); - - const vod_content = $('.module-info-introduction-content').text().trim() || ''; - - const playFrom = []; - const playUrls = []; - - $('.module-tab-item.tab-item').each((i, el) => { - const from = $(el).find('span').text().trim() || `线路${i + 1}`; - - const urls = []; - $('.module-play-list-content').eq(i).find('a.module-play-list-link').each((_, a) => { - const name = $(a).text().trim(); - const href = $(a).attr('href'); - const fullUrl = href && href.startsWith('http') ? href : `${HOST}${href}`; - if (name && fullUrl) { - urls.push(`${name}$${fullUrl}`); - } - }); - - if (urls.length > 0) { - playFrom.push(from); - playUrls.push(urls.join('#')); - } - }); - - const vod = { - vod_id: id, - vod_name: vod_name, - vod_pic: vod_pic, - vod_year: vod_year, - vod_area: vod_area, - vod_type: vod_type, - vod_remarks: vod_remarks, - vod_actor: vod_actor, - vod_director: vod_director, - vod_content: vod_content, - vod_play_from: playFrom.join('$$$'), - vod_play_url: playUrls.join('$$$') - }; - - return JSON.stringify({ list: [vod] }); - } catch (e) { - return JSON.stringify({ list: [] }); - } -} - -// MD5 哈希函数 -function md5X(str) { - return Crypto.MD5(str).toString(); -} - -// AES 解密函数 -function aesX(mode, isEncrypt, data, isBase64, key, iv, isKeyBase64) { - try { - let keyWord = Crypto.enc.Utf8.parse(key); - let ivWord = Crypto.enc.Utf8.parse(iv); - let decrypted = Crypto.AES.decrypt(data, keyWord, { - iv: ivWord, - mode: Crypto.mode.CBC, - padding: Crypto.pad.Pkcs7 - }); - return decrypted.toString(Crypto.enc.Utf8); - } catch (e) { - return ''; - } -} - -// RC4 加密 -function rc4Encrypt(data, key) { - const keyWord = Crypto.enc.Utf8.parse(key); - const encrypted = Crypto.RC4.encrypt(data, keyWord); - return encrypted.toString(); -} - -// RC4 解密 -function rc4Decrypt(base64Data, key) { - const keyWord = Crypto.enc.Utf8.parse(key); - const decrypted = Crypto.RC4.decrypt(base64Data, keyWord); - return decrypted.toString(Crypto.enc.Utf8); -} - -async function play(flag, id, flags) { - try { - // 获取播放页面 - const res = await req(id, { - headers: { - 'User-Agent': UA, - 'Referer': HOST - } - }); - - const html = res.content; - - // 提取 player_aaaa 配置 - const configMatch = html.match(/player_aaaa\s*=\s*(\{[\s\S]+?})(?=\s*;\s*|\s*<\/script>)/); - if (!configMatch) { - return JSON.stringify({ parse: 1, url: id }); - } - - const player_aaaa = JSON.parse(configMatch[1]); - let videoUrl = player_aaaa.url; - - if (!videoUrl) { - return JSON.stringify({ parse: 1, url: id }); - } - - // 解密 URL(如果需要) - const encrypt = String(player_aaaa.encrypt || '0'); - if (encrypt === '1') { - videoUrl = decodeURIComponent(videoUrl); - } else if (encrypt === '2') { - videoUrl = Crypto.enc.Base64.parse(videoUrl).toString(Crypto.enc.Utf8); - videoUrl = decodeURIComponent(videoUrl); - } - - // 如果已经是直链,直接返回 - if (videoUrl && /\.(m3u8|mp4|flv|mkv)(\?|$)/i.test(videoUrl)) { - return JSON.stringify({ - parse: 0, - url: videoUrl, - header: { - 'User-Agent': UA, - 'Referer': HOST - } - }); - } - - // 准备 API 请求参数 - const hostName = 'xn--qvr2v.850088.xyz'; - const rc4Key = (md5X(videoUrl) + ' P').slice(-22); - const rc4KeyHex = Crypto.enc.Utf8.parse(rc4Key); - - const currentTime = Math.floor(Date.now() / 1000); - - // 计算各种加密参数 - let keyValue = rc4Encrypt(md5X(videoUrl + 'stray'), rc4Key); - let vkeyValue = rc4Encrypt(currentTime + md5X(rc4Key + 'stray'), rc4Key); - let ckeyValue = rc4Encrypt(md5X(hostName + 'stray'), rc4Key); - - // 发送 API 请求获取真实地址 - const apiRes = await req(`https://${hostName}/player/api.php`, { - method: 'POST', - postType: 'form', - headers: { - 'User-Agent': UA, - 'Accept': 'application/json, text/javascript, */*; q=0.01', - 'Origin': `https://${hostName}`, - 'X-Requested-With': 'XMLHttpRequest', - 'Referer': `https://${hostName}/` - }, - data: { - 'url': videoUrl, - 'key': keyValue, - 'vkey': vkeyValue, - 'ckey': ckeyValue - } - }); - - const json = JSON.parse(apiRes.content); - - if (json.code === 200 || json.code === '200') { - // 解密 AES key 和 iv - const aesKey = rc4Decrypt(json.aes_key, rc4Key); - const aesIv = rc4Decrypt(json.aes_iv, rc4Key); - - // 解密真实视频地址 - const realUrl = aesX('AES/CBC/PKCS7', false, json.url, true, aesKey, aesIv, false); - - if (realUrl && realUrl.startsWith('http')) { - return JSON.stringify({ - parse: 0, - url: realUrl, - header: { - 'User-Agent': UA, - 'Referer': HOST - } - }); - } - } - - return JSON.stringify({ parse: 1, url: videoUrl }); - } catch (e) { - return JSON.stringify({ parse: 1, url: id }); - } -} - -export function __jsEvalReturn() { - return { - init, - home, - homeVod, - category, - detail, - search, - play - }; -} \ No newline at end of file diff --git a/Ye-11X115490_PsyDuck4k/lib/潇洒.jar b/Ye-11X115490_PsyDuck4k/lib/潇洒.jar deleted file mode 100644 index 52889a45..00000000 Binary files a/Ye-11X115490_PsyDuck4k/lib/潇洒.jar and /dev/null differ diff --git a/Ye-11X115490_PsyDuck4k/lib/爱奇艺.js b/Ye-11X115490_PsyDuck4k/lib/爱奇艺.js deleted file mode 100644 index cd9be2eb..00000000 --- a/Ye-11X115490_PsyDuck4k/lib/爱奇艺.js +++ /dev/null @@ -1,39 +0,0 @@ -var rule = { - title:'奇珍异兽', - host:'https://www.iqiyi.com', - homeUrl:'', - // detailUrl:'https://pcw-api.iqiyi.com/albums/album/avlistinfo?aid=fyid&size=2000&page=1', - detailUrl:'https://pcw-api.iqiyi.com/video/video/videoinfowithuser/fyid?agent_type=1&authcookie=&subkey=fyid&subscribe=1', - searchUrl:'https://search.video.iqiyi.com/o?if=html5&key=**&pageNum=fypage&pos=1&pageSize=24&site=iqiyi', - searchable:2, - multi:1, - filterable:1, - filter:{'1': [{'key': 'mode', 'name': '综合排序', 'value': [{'n': '全部', 'v': ''}, {'n': '热播榜', 'v': 11}, {'n': '好评榜', 'v': 8}, {'n': '新上线', 'v': 4}]}, {'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-2011', 'v': '2011_2016'}, {'n': '2010-2000', 'v': '2000_2010'}, {'n': '90年代', 'v': '1990_1999'}, {'n': '80年代', 'v': '1980_1989'}, {'n': '更早', 'v': '1964_1979'}]}, {'key': 'is_purchase', 'name': '全部资费', 'value': [{'n': '全部', 'v': ''}, {'n': '免费', 'v': 0}, {'n': '会员', 'v': 1}, {'n': '付费', 'v': 2}]}, {'key': 'three_category_id', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '华语', 'v': 1}, {'n': '香港地区', 'v': 28997}, {'n': '美国', 'v': 2}, {'n': '欧洲', 'v': 3}, {'n': '韩国', 'v': 4}, {'n': '日本', 'v': 308}, {'n': '泰国', 'v': 1115}, {'n': '印度', 'v': 28999}, {'n': '其它', 'v': 5}]}, {'key': '18001', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '喜剧', 'v': 8}, {'n': '爱情', 'v': 6}, {'n': '动作', 'v': 11}, {'n': '枪战', 'v': 131}, {'n': '犯罪', 'v': 291}, {'n': '惊悚', 'v': 128}, {'n': '恐怖', 'v': 10}, {'n': '悬疑', 'v': 289}, {'n': '动画', 'v': 12}, {'n': '家庭', 'v': 27356}, {'n': '奇幻', 'v': 1284}, {'n': '魔幻', 'v': 129}, {'n': '科幻', 'v': 9}, {'n': '战争', 'v': 7}, {'n': '青春', 'v': 130}]}, {'key': '27396', 'name': '规格', 'value': [{'n': '全部', 'v': ''}, {'n': '巨制', 'v': 27397}, {'n': '院线', 'v': 27815}, {'n': '独播', 'v': 30149}, {'n': '网络电影', 'v': 27401}]}], '2': [{'key': 'mode', 'name': '综合排序', 'value': [{'n': '全部', 'v': ''}, {'n': '热播榜', 'v': 11}, {'n': '好评榜', 'v': 8}, {'n': '新上线', 'v': 4}]}, {'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-2011', 'v': '2011_2016'}, {'n': '2010-2000', 'v': '2000_2010'}, {'n': '90年代', 'v': '1990_1999'}, {'n': '80年代', 'v': '1980_1989'}, {'n': '更早', 'v': '1964_1979'}]}, {'key': 'is_purchase', 'name': '全部资费', 'value': [{'n': '全部', 'v': ''}, {'n': '免费', 'v': 0}, {'n': '会员', 'v': 1}, {'n': '付费', 'v': 2}]}, {'key': 'three_category_id', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '内地', 'v': 15}, {'n': '港剧', 'v': 16}, {'n': '韩剧', 'v': 17}, {'n': '美剧', 'v': 18}, {'n': '日剧', 'v': 309}, {'n': '泰剧', 'v': 1114}, {'n': '台湾地区', 'v': 1117}, {'n': '英剧', 'v': 28916}, {'n': '其它', 'v': 19}]}, {'key': '18003', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '自制', 'v': 11992}, {'n': '古装', 'v': 24}, {'n': '言情', 'v': 20}, {'n': '武侠', 'v': 23}, {'n': '偶像', 'v': 30}, {'n': '家庭', 'v': 1654}, {'n': '青春', 'v': 1653}, {'n': '都市', 'v': 24064}, {'n': '喜剧', 'v': 135}, {'n': '战争', 'v': 27916}, {'n': '军旅', 'v': 1655}, {'n': '谍战', 'v': 290}, {'n': '悬疑', 'v': 32}, {'n': '罪案', 'v': 149}, {'n': '穿越', 'v': 148}, {'n': '宫廷', 'v': 139}, {'n': '历史', 'v': 21}, {'n': '神话', 'v': 145}, {'n': '科幻', 'v': 34}, {'n': '年代', 'v': 27}, {'n': '农村', 'v': 29}, {'n': '商战', 'v': 140}, {'n': '剧情', 'v': 24063}, {'n': '奇幻', 'v': 27881}, {'n': '网剧', 'v': 24065}, {'n': '竖短片', 'v': 32839}]}], '3': [{'key': 'mode', 'name': '综合排序', 'value': [{'n': '全部', 'v': ''}, {'n': '热播榜', 'v': 11}, {'n': '好评榜', 'v': 8}, {'n': '新上线', 'v': 4}]}, {'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-2011', 'v': '2011_2016'}, {'n': '2010-2000', 'v': '2000_2010'}, {'n': '90年代', 'v': '1990_1999'}, {'n': '80年代', 'v': '1980_1989'}, {'n': '更早', 'v': '1964_1979'}]}, {'key': 'is_purchase', 'name': '全部资费', 'value': [{'n': '全部', 'v': ''}, {'n': '免费', 'v': 0}, {'n': '会员', 'v': 1}, {'n': '付费', 'v': 2}]}, {'key': 'three_category_id', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '国内', 'v': 20323}, {'n': '国外', 'v': 20324}]}, {'key': '18004', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '人文', 'v': 70}, {'n': '美食', 'v': 33908}, {'n': '医疗', 'v': 33924}, {'n': '自然', 'v': 33933}, {'n': '萌宠', 'v': 33945}, {'n': '财经', 'v': 33953}, {'n': '罪案', 'v': 33960}, {'n': '竞技', 'v': 33967}, {'n': '灾难', 'v': 33974}, {'n': '军事', 'v': 72}, {'n': '历史', 'v': 74}, {'n': '探险', 'v': 73}, {'n': '社会', 'v': 71}, {'n': '科技', 'v': 28119}, {'n': '旅游', 'v': 310}]}, {'key': '28467', 'name': '出品方', 'value': [{'n': '全部', 'v': ''}, {'n': 'BBC', 'v': 28468}, {'n': '美国历史频道', 'v': 28470}, {'n': '探索频道', 'v': 28471}, {'n': '央视记录', 'v': 28472}, {'n': '北京纪实频道', 'v': 28473}, {'n': '上海纪实频道', 'v': 28474}, {'n': '朗思文化', 'v': 28476}, {'n': 'CNEX', 'v': 28477}, {'n': '五星传奇', 'v': 28478}, {'n': 'IMG', 'v': 28479}, {'n': 'NHK', 'v': 28480}, {'n': '爱奇艺出品', 'v': 31283}, {'n': 'Netflix', 'v': 31286}]}, {'key': '29076', 'name': '片种', 'value': [{'n': '全部', 'v': ''}, {'n': '纪录电影', 'v': 29077}, {'n': '系列纪录片', 'v': 29078}, {'n': '网络纪录片', 'v': 29082}, {'n': '纪实栏目', 'v': 29083}]}, {'key': '31294', 'name': '时长', 'value': [{'n': '全部', 'v': ''}, {'n': '微纪录', 'v': 29079}, {'n': '长纪录', 'v': 29080}, {'n': '短纪录', 'v': 29081}]}], '4': [{'key': 'mode', 'name': '综合排序', 'value': [{'n': '全部', 'v': ''}, {'n': '热播榜', 'v': 11}, {'n': '好评榜', 'v': 8}, {'n': '新上线', 'v': 4}]}, {'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-2011', 'v': '2011_2016'}, {'n': '2010-2000', 'v': '2000_2010'}, {'n': '90年代', 'v': '1990_1999'}, {'n': '80年代', 'v': '1980_1989'}, {'n': '更早', 'v': '1964_1979'}]}, {'key': 'is_purchase', 'name': '全部资费', 'value': [{'n': '全部', 'v': ''}, {'n': '免费', 'v': 0}, {'n': '会员', 'v': 1}, {'n': '付费', 'v': 2}]}, {'key': 'three_category_id', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '中国大陆', 'v': 37}, {'n': '日本', 'v': 38}, {'n': '韩国', 'v': 1106}, {'n': '欧美', 'v': 30218}, {'n': '其它', 'v': 40}]}, {'key': '30219', 'name': '版本', 'value': [{'n': '全部', 'v': ''}, {'n': '动画', 'v': 30220}, {'n': '特摄', 'v': 30223}, {'n': '布袋戏', 'v': 30224}, {'n': '特别篇', 'v': 32782}, {'n': '动态漫画', 'v': 32783}, {'n': '动画电影', 'v': 32784}, {'n': '竖版视频', 'v': 32785}, {'n': '轻动画', 'v': 33482}, {'n': '短剧', 'v': 33483}]}, {'key': '30225', 'name': '风格', 'value': [{'n': '全部', 'v': ''}, {'n': '搞笑', 'v': 30230}, {'n': '热血', 'v': 30232}, {'n': '催泪', 'v': 30233}, {'n': '治愈', 'v': 30234}, {'n': '励志', 'v': 30237}, {'n': '机战', 'v': 30241}, {'n': '恋爱', 'v': 30243}, {'n': '科幻', 'v': 30245}, {'n': '奇幻', 'v': 30247}, {'n': '推理', 'v': 30248}, {'n': '校园', 'v': 30249}, {'n': '日常', 'v': 30252}, {'n': '历史', 'v': 30254}, {'n': '美食', 'v': 30255}, {'n': '职场', 'v': 30256}, {'n': '偶像', 'v': 30258}, {'n': '泡面', 'v': 30265}, {'n': '冒险', 'v': 30267}, {'n': '竞技', 'v': 30268}, {'n': '合家欢', 'v': 30270}, {'n': '武侠', 'v': 32792}, {'n': '玄幻', 'v': 32793}]}, {'key': '32795', 'name': '新类型', 'value': [{'n': '全部', 'v': ''}, {'n': '轻小说改编', 'v': 32796}, {'n': '漫画改编', 'v': 32797}, {'n': '游戏改编', 'v': 32798}, {'n': '原创', 'v': 32799}]}], '6': [{'key': 'mode', 'name': '综合排序', 'value': [{'n': '全部', 'v': ''}, {'n': '热播榜', 'v': 11}, {'n': '好评榜', 'v': 8}, {'n': '新上线', 'v': 4}]}, {'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-2011', 'v': '2011_2016'}, {'n': '2010-2000', 'v': '2000_2010'}, {'n': '90年代', 'v': '1990_1999'}, {'n': '80年代', 'v': '1980_1989'}, {'n': '更早', 'v': '1964_1979'}]}, {'key': 'is_purchase', 'name': '全部资费', 'value': [{'n': '全部', 'v': ''}, {'n': '免费', 'v': 0}, {'n': '会员', 'v': 1}, {'n': '付费', 'v': 2}]}, {'key': 'three_category_id', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '内地', 'v': 151}, {'n': '港台', 'v': 152}, {'n': '韩国', 'v': 33306}, {'n': '欧美', 'v': 154}, {'n': '其它', 'v': 1113}]}, {'key': '18014', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '播报', 'v': 155}, {'n': '访谈', 'v': 156}, {'n': '游戏', 'v': 158}, {'n': '晚会', 'v': 292}, {'n': '曲艺', 'v': 293}, {'n': '脱口秀', 'v': 2118}, {'n': '真人秀', 'v': 2224}, {'n': '竞技', 'v': 30278}, {'n': '爱奇艺出品', 'v': 30279}, {'n': '竞演', 'v': 33860}]}, {'key': '33162', 'name': '题材', 'value': [{'n': '全部', 'v': ''}, {'n': '音乐', 'v': 33163}, {'n': '舞蹈', 'v': 33172}, {'n': '文化', 'v': 33173}, {'n': '美食', 'v': 33182}, {'n': '伦理', 'v': 33184}, {'n': '相亲', 'v': 33193}, {'n': '纪实', 'v': 33195}, {'n': '生活', 'v': 33196}, {'n': '亲子', 'v': 33197}, {'n': '少儿', 'v': 33198}, {'n': '财经', 'v': 33199}, {'n': '健康', 'v': 33200}, {'n': '时尚', 'v': 33203}, {'n': '旅游', 'v': 33205}, {'n': '教育', 'v': 33206}, {'n': '其它', 'v': 33220}, {'n': '爱情', 'v': 33316}, {'n': '搞笑', 'v': 33317}, {'n': '益智', 'v': 33318}, {'n': '职场', 'v': 33319}, {'n': '语言', 'v': 33530}, {'n': '辩论', 'v': 33531}, {'n': '演讲', 'v': 33843}]}], '5': [{'key': 'mode', 'name': '综合排序', 'value': [{'n': '全部', 'v': ''}, {'n': '热播榜', 'v': 11}, {'n': '好评榜', 'v': 8}, {'n': '新上线', 'v': 4}]}, {'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-2011', 'v': '2011_2016'}, {'n': '2010-2000', 'v': '2000_2010'}, {'n': '90年代', 'v': '1990_1999'}, {'n': '80年代', 'v': '1980_1989'}, {'n': '更早', 'v': '1964_1979'}]}, {'key': 'is_purchase', 'name': '全部资费', 'value': [{'n': '全部', 'v': ''}, {'n': '免费', 'v': 0}, {'n': '会员', 'v': 1}, {'n': '付费', 'v': 2}]}, {'key': 'three_category_id', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '内地', 'v': 221}, {'n': '港台', 'v': 220}, {'n': '欧美', 'v': 219}, {'n': '日韩', 'v': 218}, {'n': '拉美', 'v': 217}, {'n': '亚洲地区', 'v': 216}, {'n': '非洲', 'v': 215}]}, {'key': '18009', 'name': '语种', 'value': [{'n': '全部', 'v': ''}, {'n': '普通话', 'v': 91}, {'n': '粤语', 'v': 92}, {'n': '闽南语', 'v': 93}, {'n': '英语', 'v': 94}, {'n': '日语', 'v': 95}, {'n': '韩语', 'v': 96}, {'n': '其它', 'v': 97}]}, {'key': '23554', 'name': '音乐类型', 'value': [{'n': '全部', 'v': ''}, {'n': '单曲MV', 'v': 23556}, {'n': '单曲现场', 'v': 23557}, {'n': '演唱会', 'v': 23558}, {'n': '新闻', 'v': 23559}, {'n': '访谈', 'v': 23560}, {'n': '音乐记录', 'v': 23561}, {'n': '音乐周边', 'v': 23562}, {'n': '音乐节目', 'v': 23563}, {'n': '影视原声', 'v': 23564}, {'n': '音乐短片', 'v': 23565}, {'n': '其他', 'v': 23566}]}], '16': [{'key': 'mode', 'name': '综合排序', 'value': [{'n': '全部', 'v': ''}, {'n': '热播榜', 'v': 11}, {'n': '好评榜', 'v': 8}, {'n': '新上线', 'v': 4}]}, {'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-2011', 'v': '2011_2016'}, {'n': '2010-2000', 'v': '2000_2010'}, {'n': '90年代', 'v': '1990_1999'}, {'n': '80年代', 'v': '1980_1989'}, {'n': '更早', 'v': '1964_1979'}]}, {'key': 'is_purchase', 'name': '全部资费', 'value': [{'n': '全部', 'v': ''}, {'n': '免费', 'v': 0}, {'n': '会员', 'v': 1}, {'n': '付费', 'v': 2}]}, {'key': '18061', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '喜剧', 'v': 1296}, {'n': '爱情', 'v': 1297}, {'n': '动作', 'v': 1298}, {'n': '奇幻', 'v': 1299}, {'n': '惊悚', 'v': 1300}, {'n': '悬疑', 'v': 1301}, {'n': '青春', 'v': 1302}]}]}, - // url:'https://pcw-api.iqiyi.com/search/recommend/list?channel_id=fyclass&data_type=1&is_purchase=&mode=24&page_id=fypage&ret_num=48&three_category_id=', - url:'https://pcw-api.iqiyi.com/search/recommend/list?channel_id=fyclass&data_type=1&page_id=fypage&ret_num=48', - filter_url:'is_purchase={{fl.is_purchase}}&mode={{fl.mode}}&three_category_id={{fl.three_category_id}}&market_release_date_level={{fl.year}}', - // url:'https://pcw-api.iqiyi.com/search/video/videolists?channel_id=fyclass&pageNum=fypage&pageSize=24&data_type=1&site=iqiyi', - headers:{ - 'User-Agent':'MOBILE_UA' - }, - timeout:5000, - class_name:'电影&电视剧&纪录片&动漫&综艺&音乐&网络电影', - class_url:'1&2&3&4&6&5&16', - limit:20, - // play_parse:true, - // 手动调用解析请求json的url,此lazy不方便 - lazy:'js:input=""+input.split("?")[0];log(input);let html=JSON.parse(request(input));log(html);input=html.url||input', - // 推荐:'.list_item;img&&alt;img&&src;a&&Text;a&&data-float', - // 一级:'json:.data.list;.name;.imageUrl;.latestOrder;.albumId', - 推荐:'', - // 推荐:'js:let d=[];fetch_params.headers["user-agent"]=PC_UA;pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd;let html=fetch(HOST,fetch_params);let lists=pdfa(html,".qy-mod-li");lists.forEach(function(it){try{let title=pdfh(it,"p.sub&&title");let desc=pdfh(it,".qy-mod-label&&Text");let pic_url=pd(it,"img&&src");d.push({title:title,desc:desc,img:pic_url})}catch(e){}});res=setResult(d);', - 一级:'js:let d=[];if(MY_CATE==="16"){input=input.replace("channel_id=16","channel_id=1").split("three_category_id")[0];input+="three_category_id=27401"}else if(MY_CATE==="5"){input=input.replace("data_type=1","data_type=2")}let html=request(input);let json=JSON.parse(html);if(json.code==="A00003"){fetch_params.headers["user-agent"]=PC_UA;json=JSON.parse(fetch(input,fetch_params))}json.data.list.forEach(function(data){if(data.channelId===1){desc=data.hasOwnProperty("score")?data.score+"分\\t":""}else if(data.channelId===2||data.channelId===4){if(data.latestOrder===data.videoCount){desc=(data.hasOwnProperty("score")?data.score+"分\\t":"")+data.latestOrder+"集全"}else{if(data.videoCount){desc=(data.hasOwnProperty("score")?data.score+"分\\t":"")+data.latestOrder+"/"+data.videoCount+"集"}else{desc="更新至 "+data.latestOrder+"集"}}}else if(data.channelId===6){desc=data.period+"期"}else if(data.channelId===5){desc=data.focus}else{if(data.latestOrder){desc="更新至 第"+data.latestOrder+"期"}else if(data.period){desc=data.period}else{desc=data.focus}}url=MY_CATE+"$"+data.albumId;d.push({url:url,title:data.name,desc:desc,pic_url:data.imageUrl.replace(".jpg","_390_520.jpg?caplist=jpg,webp")})});setResult(d);', - // 一级:'js:let d=[];if(MY_CATE==="16"){input=input.replace("channel_id=16","channel_id=1").split("three_category_id")[0];input+="three_category_id=27401"}else if(MY_CATE==="5"){input=input.replace("data_type=1","data_type=2")}let html=fetch(input,fetch_params);let json=JSON.parse(html);if(json.code==="A00003"){fetch_params.headers["user-agent"]=PC_UA;json=JSON.parse(fetch(input,fetch_params))}json.data.list.forEach(function(data){if(data.channelId===1){desc=data.hasOwnProperty("score")?data.score+"分\\t":""}else if(data.channelId===2||data.channelId===4){if(data.latestOrder===data.videoCount){desc=(data.hasOwnProperty("score")?data.score+"分\\t":"")+data.latestOrder+"集全"}else{if(data.videoCount){desc=(data.hasOwnProperty("score")?data.score+"分\\t":"")+data.latestOrder+"/"+data.videoCount+"集"}else{desc="更新至 "+data.latestOrder+"集"}}}else if(data.channelId===6){desc=data.period+"期"}else if(data.channelId===5){desc=data.focus}else{if(data.latestOrder){desc="更新至 第"+data.latestOrder+"期"}else if(data.period){desc=data.period}else{desc=data.focus}}url=MY_CATE+"$"+data.albumId;d.push({url:url,title:data.name,desc:desc,pic_url:data.imageUrl.replace(".jpg","_390_520.jpg?caplist=jpg,webp")})});setResult(d);', - // 一级:'json:.data.list;.name;.imageUrl;.playUrl;.latestOrder', - // 二级:{is_json:1,"title":"data.title;data.moviecategory[0]+data.moviecategory[1]","img":"data.cdncover","desc":"data.area[0];data.director[0]","content":"data.description","tabs":"data.playlink_sites;data.playlinksdetail.#idv.quality","lists":"data.playlinksdetail.#idv.default_url"}, - // 二级:{is_json:1,"title":"data.name+data.subtitle;data.latestOrder","img":"data.imageUrl","desc":"data.categories;data.areas","content":"data.description","tabs":"data.name","lists":"data.playlinksdetail.#idv.default_url"}, - 二级:'', - 二级:'js:let d=[];let html=request(input);let json=JSON.parse(html).data;VOD={vod_id:"",vod_url:input,vod_name:"",type_name:"",vod_actor:"",vod_year:"",vod_director:"",vod_area:"",vod_content:"",vod_remarks:"",vod_pic:""};VOD.vod_name=json.name;try{if(json.latestOrder){VOD.vod_remarks="类型: "+(json.categories[0].name||"")+"\\t"+(json.categories[1].name||"")+"\\t"+(json.categories[2].name||"")+"\\t"+"评分:"+(json.score||"")+"\\n更新至:第"+json.latestOrder+"集(期)/共"+json.videoCount+"集(期)"}else{VOD.vod_remarks="类型: "+(json.categories[0].name||"")+"\\t"+(json.categories[1].name||"")+"\\t"+(json.categories[2].name||"")+"\\t"+"评分:"+(json.score||"")+json.period}}catch(e){VOD.vod_remarks=json.subtitle}VOD.vod_area=(json.focus||"")+"\\n资费:"+(json.payMark===1?"VIP":"免费")+"\\n地区:"+(json.areas||"");let vsize="579_772";try{vsize=json.imageSize[12]}catch(e){}VOD.vod_pic=json.imageUrl.replace(".jpg","_"+vsize+".jpg?caplist=jpg,webp");VOD.type_name=json.categories.map(function(it){return it.name}).join(",");if(json.people.main_charactor){let vod_actors=[];json.people.main_charactor.forEach(function(it){vod_actors.push(it.name)});VOD.vod_actor=vod_actors.join(",")}VOD.vod_content=json.description;let playlists=[];if(json.channelId===1||json.channelId===5){playlists=[{playUrl:json.playUrl,imageUrl:json.imageUrl,shortTitle:json.shortTitle,focus:json.focus,period:json.period}]}else{if(json.channelId===6){let qs=json.period.split("-")[0];let listUrl="https://pcw-api.iqiyi.com/album/source/svlistinfo?cid=6&sourceid="+json.albumId+"&timelist="+qs;let playData=JSON.parse(request(listUrl)).data[qs];playData.forEach(function(it){playlists.push({playUrl:it.playUrl,imageUrl:it.imageUrl,shortTitle:it.shortTitle,focus:it.focus,period:it.period})})}else{let listUrl="https://pcw-api.iqiyi.com/albums/album/avlistinfo?aid="+json.albumId+"&size=200&page=1";let data=JSON.parse(request(listUrl)).data;let total=data.total;playlists=data.epsodelist;if(total>200){for(let i=2;i200){for(let i=2;i { - let d = []; - let url1 = JSON.parse(request("" + input)).url; - - function isEncrypted(url) { - return url.includes('baidu.con/') && url.length > 16; - } - - let url; - if (isEncrypted(url1)) { - console.log(""); - var withoutDomain = url1.replace(/^https:\/\/baidu\.con\//, ''); - var first16Chars = withoutDomain.substring(0, 16); - var remainingString = withoutDomain.substring(16); - var key = CryptoJS.enc.Utf8.parse(first16Chars); - var iv = key; - - function AES_Decrypt(word) { - var srcs = word; - var decrypt = CryptoJS.AES.decrypt(srcs, key, { - iv: iv, - mode: CryptoJS.mode.CBC, - padding: CryptoJS.pad.Pkcs7 - }); - return decrypt.toString(CryptoJS.enc.Utf8); - }; - - url = AES_Decrypt(remainingString); - } else { - console.log(""); - url = url1; - } - - input = { - url: url, - parse: 0, - header: rule.headers - } - setResult(d); - }), - - 推荐: '.list_item;img&&alt;img&&src;a&&Text;a&&data-float', - 一级: '.list_item;img&&alt;img&&src;a&&Text;a&&data-float', - 二级: $js.toString(() => { - VOD = {}; - let d = []; - let video_list = []; - let video_lists = []; - let QZOutputJson; - let html = fetch(input, fetch_params); - let sourceId = /get_playsource/.test(input) ? input.match(/id=(\d*?)&/)[1] : input.split("cid=")[1]; - let cid = sourceId; - let detailUrl = "https://v.qq.com/detail/m/" + cid + ".html"; - try { - let json = JSON.parse(html); - VOD = { - vod_url: input, - vod_name: json.c.title, - type_name: json.typ.join(","), - vod_actor: json.nam.join(","), - vod_year: json.c.year, - vod_content: json.c.description, - vod_remarks: json.rec, - vod_pic: urljoin2(input, json.c.pic) - } - } catch (e) {} - if (/get_playsource/.test(input)) { - eval(html); - let indexList = QZOutputJson.PlaylistItem.indexList; - indexList.forEach(function(it) { - let dataUrl = "https://s.video.qq.com/get_playsource?id=" + sourceId + "&plat=2&type=4&data_type=3&range=" + it + "&video_type=10&plname=qq&otype=json"; - eval(fetch(dataUrl, fetch_params)); - let vdata = QZOutputJson.PlaylistItem.videoPlayList; - vdata.forEach(function(item) { - d.push({ - title: item.title, - pic_url: item.pic, - url: item.playUrl - }) - }); - video_lists = video_lists.concat(vdata) - }) - } else { - let json = JSON.parse(html); - video_lists = json.c.video_ids; - let url = "https://v.qq.com/x/cover/" + sourceId + ".html"; - if (video_lists.length === 1) { - let vid = video_lists[0]; - let o_url = "https://union.video.qq.com/fcgi-bin/data?otype=json&tid=1804&appid=20001238&appkey=6c03bbe9658448a4&union_platform=1&idlist=" + vid; - let o_html = fetch(o_url, fetch_params); - eval(o_html); - if (QZOutputJson.results && QZOutputJson.results.length > 0) { - let it1 = QZOutputJson.results[0].fields; - url = "https://v.qq.com/x/cover/" + cid + "/" + vid + ".html"; - d.push({ - title: it1.title, - url: url - }) - } else { - url = "https://v.qq.com/x/cover/" + cid + "/" + vid + ".html"; - d.push({ - title: "正片播放", - url: url - }) - } - } else if (video_lists.length > 1) { - for (let i = 0; i < video_lists.length; i += 30) { - video_list.push(video_lists.slice(i, i + 30)) - } - video_list.forEach(function(it, idex) { - let o_url = "https://union.video.qq.com/fcgi-bin/data?otype=json&tid=1804&appid=20001238&appkey=6c03bbe9658448a4&union_platform=1&idlist=" + it.join(","); - let o_html = fetch(o_url, fetch_params); - eval(o_html); - QZOutputJson.results.forEach(function(it1) { - it1 = it1.fields; - let url = "https://v.qq.com/x/cover/" + cid + "/" + it1.vid + ".html"; - d.push({ - title: it1.title, - pic_url: it1.pic160x90.replace("/160", ""), - desc: it1.video_checkup_time, - url: url, - type: it1.category_map && it1.category_map.length > 1 ? it1.category_map[1] : "" - }) - }) - }) - } - } - - let playFrom = []; - let playUrl = []; - - let ygKeywords = ["预告", "花絮", "片花", "特辑", "幕后", "采访", "制作", "MV", "主题曲"]; - - let yg = d.filter(function(it) { - return it.type && ygKeywords.some(keyword => it.type.includes(keyword)); - }); - let zp = d.filter(function(it) { - return !(it.type && ygKeywords.some(keyword => it.type.includes(keyword))); - }); - - if (zp.length > 0) { - playFrom.push("正片"); - playUrl.push(zp.map(it => it.title + "$" + it.url).join("#")); - } - - if (yg.length > 0) { - let 预告 = yg.filter(it => it.type && it.type.includes("预告")); - let 花絮片花 = yg.filter(it => it.type && (it.type.includes("花絮") || it.type.includes("片花"))); - let 特辑 = yg.filter(it => it.type && (it.type.includes("特辑") || it.type.includes("幕后"))); - - if (预告.length > 0) { - playFrom.push("预告"); - playUrl.push(预告.map(it => it.title + "$" + it.url).join("#")); - } - if (花絮片花.length > 0) { - playFrom.push("花絮片花"); - playUrl.push(花絮片花.map(it => it.title + "$" + it.url).join("#")); - } - if (特辑.length > 0) { - playFrom.push("特辑"); - playUrl.push(特辑.map(it => it.title + "$" + it.url).join("#")); - } - } - - VOD.vod_play_from = playFrom.join("$$$"); - VOD.vod_play_url = playUrl.join("$$$"); - }), - 搜索: $js.toString(() => { - let d = [], - keyword = input.split("/")[3]; - let seenIds = new Set(); - - function vodSearch(keyword, page = 0) { - return request('https://pbaccess.video.qq.com/trpc.videosearch.mobile_search.MultiTerminalSearch/MbSearch?vplatform=2', { - body: JSON.stringify({ - version: "25042201", - clientType: 1, - filterValue: "", - uuid: "B1E50847-D25F-4C4B-BBA0-36F0093487F6", - retry: 0, - query: keyword, - pagenum: page, - isPrefetch: true, - pagesize: 30, - queryFrom: 0, - isneedQc: true, - extraInfo: { - isNewMarkLabel: "1", - multi_terminal_pc: "1", - themeType: "1" - } - }), - headers: { - 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.139 Safari/537.36', - 'Content-Type': 'application/json', - 'Origin': 'https://v.qq.com', - 'Referer': 'https://v.qq.com/' - }, - method: 'POST' - }); - } - - const nonMainContentKeywords = [ - ':', '#', '特辑', '“', '剪辑', '片花', '独家', '专访', '纯享', - '制作', '幕后', '宣传', '看点', '主题曲', '插曲', '彩蛋', - '精彩', '集锦', '盘点', '回顾', '解说', '评测', '反应', 'reaction' - ]; - - function isMainContent(title) { - if (!title) return false; - if (title.includes('') || title.includes('')) return false; - return !nonMainContentKeywords.some(keyword => title.includes(keyword)); - } - - try { - let html = vodSearch(keyword, 0); - let json = JSON.parse(html); - - function processItemList(itemList) { - if (!itemList) return; - - itemList.forEach(it => { - if (it.doc && it.doc.id && it.videoInfo && isMainContent(it.videoInfo.title)) { - const itemId = it.doc.id; - if (!seenIds.has(itemId)) { - seenIds.add(itemId); - d.push({ - title: it.videoInfo.title, - img: it.videoInfo.imgUrl || "", - url: itemId, - desc: it.videoInfo.secondLine || "" - }); - } - } - }); - } - - if (json.data && json.data.normalList) { - processItemList(json.data.normalList.itemList); - } - - if (json.data && json.data.areaBoxList) { - json.data.areaBoxList.forEach(box => { - processItemList(box.itemList); - }); - } - - } catch (e) { - log("搜索出错: " + e.message); - } - - setResult(d); - }) -}; \ No newline at end of file diff --git a/Ye-11X115490_PsyDuck4k/lib/芒果视频.js b/Ye-11X115490_PsyDuck4k/lib/芒果视频.js deleted file mode 100644 index 5cc67201..00000000 --- a/Ye-11X115490_PsyDuck4k/lib/芒果视频.js +++ /dev/null @@ -1,850 +0,0 @@ -var rule = { - title: '百忙无果[官]', - host: 'https://pianku.api.%6d%67%74%76.com', - homeUrl: '', - - searchUrl: 'https://mobileso.bz.%6d%67%74%76.com/msite/search/v2?q=**&pn=fypage&pc=10', - detailUrl: 'https://pcweb.api.mgtv.com/episode/list?page=1&size=50&video_id=fyid', - searchable: 2, - quickSearch: 0, - filterable: 1, - multi: 1, - - url: '/rider/list/pcweb/v3?platform=pcweb&channelId=fyclass&pn=fypage&pc=80&hudong=1&_support=10000000&kind=a1&area=a1', - filter_url: 'year={{fl.year or "all"}}&sort={{fl.sort or "all"}}&chargeInfo={{fl.chargeInfo or "all"}}', - headers: { - 'User-Agent': 'PC_UA' - }, - timeout: 5000, - class_name: '电影&电视剧&综艺&动漫&纪录片&教育&少儿', - class_url: '3&2&1&50&51&115&10', - filter: { - "1": [{ - "key": "chargeInfo", - "name": "付费类型", - "value": [{ - "n": "全部", - "v": "all" - }, { - "n": "免费", - "v": "b1" - }, { - "n": "vip", - "v": "b2" - }, { - "n": "VIP用券", - "v": "b3" - }, { - "n": "付费点播", - "v": "b4" - }] - }, { - "key": "sort", - "name": "排序", - "value": [{ - "n": "最新", - "v": "c1" - }, { - "n": "最热", - "v": "c2" - }, { - "n": "知乎高分", - "v": "c4" - }] - }, { - "key": "year", - "name": "年代", - "value": [{ - "n": "全部", - "v": "all" - }, { - "n": "2025", - "v": "2025" - }, { - "n": "2024", - "v": "2024" - }, { - "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" - }] - }], - "2": [{ - "key": "chargeInfo", - "name": "付费类型", - "value": [{ - "n": "全部", - "v": "all" - }, { - "n": "免费", - "v": "b1" - }, { - "n": "vip", - "v": "b2" - }, { - "n": "VIP用券", - "v": "b3" - }, { - "n": "付费点播", - "v": "b4" - }] - }, { - "key": "sort", - "name": "排序", - "value": [{ - "n": "最新", - "v": "c1" - }, { - "n": "最热", - "v": "c2" - }, { - "n": "知乎高分", - "v": "c4" - }] - }, { - "key": "year", - "name": "年代", - "value": [{ - "n": "全部", - "v": "all" - }, { - "n": "2025", - "v": "2025" - }, { - "n": "2024", - "v": "2024" - }, { - "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" - }] - }], - "3": [{ - "key": "chargeInfo", - "name": "付费类型", - "value": [{ - "n": "全部", - "v": "all" - }, { - "n": "免费", - "v": "b1" - }, { - "n": "vip", - "v": "b2" - }, { - "n": "VIP用券", - "v": "b3" - }, { - "n": "付费点播", - "v": "b4" - }] - }, { - "key": "sort", - "name": "排序", - "value": [{ - "n": "最新", - "v": "c1" - }, { - "n": "最热", - "v": "c2" - }, { - "n": "知乎高分", - "v": "c4" - }] - }, { - "key": "year", - "name": "年代", - "value": [{ - "n": "全部", - "v": "all" - }, { - "n": "2025", - "v": "2025" - }, { - "n": "2024", - "v": "2024" - }, { - "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" - }] - }], - "50": [{ - "key": "chargeInfo", - "name": "付费类型", - "value": [{ - "n": "全部", - "v": "all" - }, { - "n": "免费", - "v": "b1" - }, { - "n": "vip", - "v": "b2" - }, { - "n": "VIP用券", - "v": "b3" - }, { - "n": "付费点播", - "v": "b4" - }] - }, { - "key": "sort", - "name": "排序", - "value": [{ - "n": "最新", - "v": "c1" - }, { - "n": "最热", - "v": "c2" - }, { - "n": "知乎高分", - "v": "c4" - }] - }, { - "key": "year", - "name": "年代", - "value": [{ - "n": "全部", - "v": "all" - }, { - "n": "2025", - "v": "2025" - }, { - "n": "2024", - "v": "2024" - }, { - "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" - }] - }], - "51": [{ - "key": "chargeInfo", - "name": "付费类型", - "value": [{ - "n": "全部", - "v": "all" - }, { - "n": "免费", - "v": "b1" - }, { - "n": "vip", - "v": "b2" - }, { - "n": "VIP用券", - "v": "b3" - }, { - "n": "付费点播", - "v": "b4" - }] - }, { - "key": "sort", - "name": "排序", - "value": [{ - "n": "最新", - "v": "c1" - }, { - "n": "最热", - "v": "c2" - }, { - "n": "知乎高分", - "v": "c4" - }] - }, { - "key": "year", - "name": "年代", - "value": [{ - "n": "全部", - "v": "all" - }, { - "n": "2025", - "v": "2025" - }, { - "n": "2024", - "v": "2024" - }, { - "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" - }] - }], - "115": [{ - "key": "chargeInfo", - "name": "付费类型", - "value": [{ - "n": "全部", - "v": "all" - }, { - "n": "免费", - "v": "b1" - }, { - "n": "vip", - "v": "b2" - }, { - "n": "VIP用券", - "v": "b3" - }, { - "n": "付费点播", - "v": "b4" - }] - }, { - "key": "sort", - "name": "排序", - "value": [{ - "n": "最新", - "v": "c1" - }, { - "n": "最热", - "v": "c2" - }, { - "n": "知乎高分", - "v": "c4" - }] - }, { - "key": "year", - "name": "年代", - "value": [{ - "n": "全部", - "v": "all" - }, { - "n": "2025", - "v": "2025" - }, { - "n": "2024", - "v": "2024" - }, { - "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" - }] - }] - }, - limit: 20, - play_parse: true, - lazy: $js.toString(() => { - try { - let api = "" + input.split("?")[0]; - console.log(api); - let response = fetch(api, { - method: 'get', - headers: { - 'User-Agent': 'okhttp/3.14.9', - 'Content-Type': 'application/x-www-form-urlencoded' - } - }); - - let bata = JSON.parse(response); - log(bata) - if (bata.url.includes("http")) { - input = { - header: { - 'User-Agent': "" - }, - parse: 0, - url: bata.url, - jx: 0, - danmaku: 'http://127.0.0.1:9978/proxy?do=danmu&url='+input.split("?")[0] - }; - } else { - input = { - header: { - 'User-Agent': '' - }, - parse: 0, - url: input.split("?")[0], - jx: 1, - danmaku: 'http://127.0.0.1:9978/proxy?do=danmu&url='+input.split("?")[0] - }; - } - } catch { - input = { - header: { - 'User-Agent': '' - }, - parse: 0, - url: input.split("?")[0], - jx: 1, - danmaku: 'http://127.0.0.1:9978/proxy?do=danmu&url='+input.split("?")[0] - }; - } - }), - // 手动调用解析请求json的url,此lazy不方便 - // lazy:'js:print(input);fetch_params.headers["user-agent"]=MOBILE_UA;let html=request(input);let rurl=html.match(/window\\.open\\(\'(.*?)\',/)[1];rurl=urlDeal(rurl);input={parse:1,url:rurl};', - // 推荐:'.list_item;img&&alt;img&&src;a&&Text;a&&data-float', - 一级: 'json:data.hitDocs;title;img;updateInfo||rightCorner.text;playPartId', - // 一级:'json:data.hitDocs;title;img;updateInfo;playPartId', - 二级: $js.toString(() => { - fetch_params.headers.Referer = "https://www.mgtv.com"; - fetch_params.headers["User-Agent"] = MOBILE_UA; - pdfh = jsp.pdfh; - pdfa = jsp.pdfa; - pd = jsp.pd; - VOD = {}; - let d = []; - let html = request(input); - let json = JSON.parse(html); - let host = "https://www.mgtv.com"; - let ourl = json.data.list.length > 0 ? json.data.list[0].url : json.data.series[0].url; - if (!/^http/.test(ourl)) { - ourl = host + ourl - } - fetch_params.headers["User-Agent"] = MOBILE_UA; - html = request(ourl); - if (html.includes("window.location =")) { - print("开始获取ourl"); - ourl = pdfh(html, "meta[http-equiv=refresh]&&content").split("url=")[1]; - print("获取到ourl:" + ourl); - html = request(ourl) - } - try { - let details = pdfh(html, ".m-details&&Html").replace(/h1>/, "h6>").replace(/div/g, "br"); - print(details); - let actor = "", - director = "", - time = ""; - if (/播出时间/.test(details)) { - actor = pdfh(html, "p:eq(5)&&Text").substr(0, 25); - director = pdfh(html, "p:eq(4)&&Text"); - time = pdfh(html, "p:eq(3)&&Text") - } else { - actor = pdfh(html, "p:eq(4)&&Text").substr(0, 25); - director = pdfh(html, "p:eq(3)&&Text"); - time = "已完结" - } - let _img = pd(html, ".video-img&&img&&src"); - let JJ = pdfh(html, ".desc&&Text").split("简介:")[1]; - let _desc = time; - VOD.vod_name = pdfh(html, ".vt-txt&&Text"); - VOD.type_name = pdfh(html, "p:eq(0)&&Text").substr(0, 6); - VOD.vod_area = pdfh(html, "p:eq(1)&&Text"); - VOD.vod_actor = actor; - VOD.vod_director = director; - VOD.vod_remarks = _desc; - VOD.vod_pic = _img; - VOD.vod_content = JJ; - if (!VOD.vod_name) { - VOD.vod_name = VOD.type_name; - } - } catch (e) { - log("获取影片信息发生错误:" + e.message) - } - - function getRjpg(imgUrl, xs) { - xs = xs || 3; - let picSize = /jpg_/.test(imgUrl) ? imgUrl.split("jpg_")[1].split(".")[0] : false; - let rjpg = false; - if (picSize) { - let a = parseInt(picSize.split("x")[0]) * xs; - let b = parseInt(picSize.split("x")[1]) * xs; - rjpg = a + "x" + b + ".jpg" - } - let img = /jpg_/.test(imgUrl) && rjpg ? imgUrl.replace(imgUrl.split("jpg_")[1], rjpg) : imgUrl; - return img - } - - if (json.data.total === 1 && json.data.list.length === 1) { - let data = json.data.list[0]; - let url = "https://www.mgtv.com" + data.url; - d.push({ - title: data.t4, - desc: data.t2, - pic_url: getRjpg(data.img), - url: url - }) - } else if (json.data.list.length > 1) { - for (let i = 1; i <= json.data.total_page; i++) { - if (i > 1) { - json = JSON.parse(fetch(input.replace("page=1", "page=" + i), {})) - } - json.data.list.forEach(function(data) { - let url = "https://www.mgtv.com" + data.url; - if (data.isIntact == "1") { - d.push({ - title: data.t4, - desc: data.t2, - pic_url: getRjpg(data.img), - url: url - }) - } - }) - } - } else { - print(input + "暂无片源") - } - VOD.vod_play_from = "mgtv"; - VOD.vod_play_url = d.map(function(it) { - return it.title + "$" + it.url - }).join("#"); - setResult(d); - }), - - 搜索: $js.toString(() => { - fetch_params.headers.Referer = "https://www.mgtv.com"; - fetch_params.headers["User-Agent"] = MOBILE_UA; - let d = []; - let html = request(input); - let json = JSON.parse(html); - json.data.contents.forEach(function(data) { - if (data.type && data.type == 'media') { - let item = data.data[0]; - let desc = item.desc.join(','); - let fyclass = ''; - if (item.source === "imgo") { - let img = item.img ? item.img : ''; - try { - fyclass = item.rpt.match(/idx=(.*?)&/)[1] + '$'; - } catch (e) { - log(e.message); - fyclass = ''; - } - log(fyclass); - d.push({ - title: item.title.replace(/|<\/B>/g, ''), - img: img, - content: '', - desc: desc, - url: fyclass + item.url.match(/.*\/(.*?)\.html/)[1] - }) - } - } - }); - setResult(d); - }), -} \ No newline at end of file diff --git a/Ye-11X115490_PsyDuck4k/lib/虫虫影视.js b/Ye-11X115490_PsyDuck4k/lib/虫虫影视.js deleted file mode 100644 index c029f295..00000000 --- a/Ye-11X115490_PsyDuck4k/lib/虫虫影视.js +++ /dev/null @@ -1,533 +0,0 @@ -import cheerio from 'assets://js/lib/cheerio.min.js'; - -const appConfig = { - siteName: "虫虫影视", - siteUrl: "https://www.chongliski.net" -} -const UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"; -const Headers = { - "User-Agent": UA, - "Referer": appConfig.siteUrl + "/", -} - -const parseApi4k = "https://fgsrg.hzqingshan.com/player/?url="; -const parseApi2k = "https://zzrs.mfdyvip.com/player/?url="; - -async function init(ext) { - console.log("初始化爬虫:", appConfig.siteName); -} - -function getYearFilter() { - let years = [{ "n": "全部", "v": "" }]; - const currentYear = new Date().getFullYear().toString(); - for (let y = currentYear; y >= currentYear - 22; y--) { - years.push({ "n": String(y), "v": String(y) }); - } - return { "key": "year", "name": "年份", "value": years }; -} - -function getLetterFilter() { - return { - "key": "letter", "name": "字母", "value": [ - { "n": "全部", "v": "" }, - { "n": "A", "v": "A" }, { "n": "B", "v": "B" }, { "n": "C", "v": "C" }, { "n": "D", "v": "D" }, - { "n": "E", "v": "E" }, { "n": "F", "v": "F" }, { "n": "G", "v": "G" }, { "n": "H", "v": "H" }, - { "n": "I", "v": "I" }, { "n": "J", "v": "J" }, { "n": "K", "v": "K" }, { "n": "L", "v": "L" }, - { "n": "M", "v": "M" }, { "n": "N", "v": "N" }, { "n": "O", "v": "O" }, { "n": "P", "v": "P" }, - { "n": "Q", "v": "Q" }, { "n": "R", "v": "R" }, { "n": "S", "v": "S" }, { "n": "T", "v": "T" }, - { "n": "U", "v": "U" }, { "n": "V", "v": "V" }, { "n": "W", "v": "W" }, { "n": "X", "v": "X" }, - { "n": "Y", "v": "Y" }, { "n": "Z", "v": "Z" }, { "n": "0-9", "v": "0-9" } - ] - } -} - -function getOrderFilter() { - return { - "key": "orderBy", "name": "排序", "value": [ - { "n": "时间", "v": "time" }, - { "n": "人气", "v": "hits" }, - { "n": "评分", "v": "score" } - ] - } -} - -const CommonFilters = [ - { - "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": "lang", "name": "语言", "value": [ - { "n": "全部", "v": "" }, { "n": "国语", "v": "国语" }, { "n": "英语", "v": "英语" }, - { "n": "粤语", "v": "粤语" }, { "n": "闽南语", "v": "闽南语" }, { "n": "韩语", "v": "韩语" }, - { "n": "日语", "v": "日语" }, { "n": "其它", "v": "其它" } - ] - }, - getYearFilter(), - getLetterFilter(), - getOrderFilter() -]; - -const myFilters = { - "2": [ - { - key: "type", "name": "类型", value: [ - { "n": "全部", "v": "2" }, - { "n": "国产剧", "v": "13" }, - { "n": "日韩剧", "v": "15" }, - { "n": "海外剧", "v": "16" }, - ] - }, - { - "key": "class", "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": "其他" } - ] - }, - ...CommonFilters - ], - "1": [ - { - "key": "type", "name": "类型", value: [ - { "n": "全部", "v": "1" }, - { "n": "动作片", "v": "6" }, - { "n": "喜剧片", "v": "7" }, - { "n": "恐怖片", "v": "8" }, - { "n": "科幻片", "v": "9" }, - { "n": "爱情片", "v": "10" }, - { "n": "剧情片", "v": "11" }, - { "n": "战争片", "v": "12" }, - { "n": "纪录片", "v": "20" } - ] - }, - { - "key": "class", "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": "惊悚" }, - { "n": "经典", "v": "经典" }, - { "n": "青春", "v": "青春" }, - { "n": "文艺", "v": "文艺" }, - { "n": "微电影", "v": "微电影" }, - { "n": "古装", "v": "古装" }, - { "n": "历史", "v": "历史" }, - { "n": "运动", "v": "运动" }, - { "n": "农村", "v": "农村" }, - { "n": "儿童", "v": "儿童" }, - { "n": "网络电影", "v": "网络电影" } - ] - }, - ...CommonFilters - ], - "4": [ - { - "key": "type", "name": "类型", value: [ - { "n": "全部", "v": "4" }, - { "n": "国产动漫", "v": "25" }, - { "n": "日韩动漫", "v": "26" }, - { "n": "欧美动漫", "v": "27" }, - { "n": "港台动漫", "v": "28" } - ] - }, - { - "key": "class", "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": "原创" }, - { "n": "亲子", "v": "亲子" }, - { "n": "益智", "v": "益智" }, - { "n": "励志", "v": "励志" }, - { "n": "其他", "v": "其他" } - ] - }, - ...CommonFilters - ], - "3": [ - { - "key": "type", "name": "类型", value: [ - { "n": "全部", "v": "3" }, - { "n": "大陆综艺", "v": "21" }, - { "n": "日韩综艺", "v": "22" }, - { "n": "欧美综艺", "v": "23" }, - { "n": "港台综艺", "v": "24" } - ] - }, - { - "key": "class", "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": "求职" } - ] - }, - ...CommonFilters - ], - "5": [ - getYearFilter(), - getLetterFilter(), - getOrderFilter() - ], -}; - -async function home(filter) { - return JSON.stringify({ - class: [ - { type_id: "2", type_name: "电视剧" }, - { type_id: "1", type_name: "电影" }, - { type_id: "4", type_name: "动漫" }, - { type_id: "3", type_name: "综艺" }, - { type_id: "5", type_name: "短剧" } - ], - filters: myFilters - }); -} - -async function category(tid, pg, filter, extend) { - pg = pg || 1; - let type = extend.type || tid; - const isLabel = tid.startsWith("/label"); - let url = ""; - - if (isLabel) { - url = appConfig.siteUrl + tid + `/page/${pg}.html`; - } else { - let classVal = extend.class || ''; - let areaVal = extend.area || ''; - let langVal = extend.lang || ''; - let letterVal = extend.letter || ''; - let orderVal = extend.orderBy || ''; - let yearVal = extend.year || ''; - - url = `${appConfig.siteUrl}/cupfox-list/${type}-${areaVal}-${''}-${classVal}-${langVal}-${letterVal}-${orderVal}-${''}-${pg}-${''}-${''}-${yearVal}.html`; - } - - try { - const html = (await req(url)).content; - const $ = cheerio.load(html); - let list = []; - - $(".module-poster-item.module-item").each(function (index, el) { - let vod_id = $(el).attr("href"); - let vod_name = $(el).attr("title"); - if (vod_name) vod_name = vod_name.trim(); - let vod_pic = $(el).find(".module-item-pic img").attr("data-src"); - let tag = $(el).find(".module-item-version-right").text().trim(); - let note = $(el).find(".module-item-note").text().trim(); - let vod_remarks = tag + (tag && note ? ' ' : '') + note; - - list.push({ - vod_id, - vod_name, - vod_pic, - vod_remarks - }); - }); - - let pagecount = 1; - const lastPageLink = $("#page a[title='尾页']").attr("href"); - if (lastPageLink) { - const parts = lastPageLink.replace('.html', '').split('-'); - for (let i = parts.length - 1; i >= 0; i--) { - const num = parseInt(parts[i]); - if (num > 0) { - pagecount = num; - break; - } - } - } - - return JSON.stringify({ - list, - pagecount - }); - } catch (e) { - console.error("分类列表获取失败:", e.message); - return JSON.stringify({ list: [], pagecount: 0 }); - } -} - -async function search(wd, quick, page) { - if (page >= 2) { - return JSON.stringify({ list: [], pagecount: 1 }); - } - - try { - const url = `${appConfig.siteUrl}/cupfox-search/-------------.html?wd=${wd}&submit=`; - const html = (await req(url)).content; - const $ = cheerio.load(html); - let list = []; - - $('.module-card-item.module-item').each((i, el) => { - const vod_id = $(el).find(".module-card-item-poster").attr('href') || ''; - const vod_name = $(el).find(".module-card-item-title a strong").text().trim(); - const vod_pic = $(el).find('.module-item-pic img').attr('data-src') || ''; - const vod_remarks = $(el).find('.module-item-note').text().trim(); - - list.push({ - vod_id, - vod_name, - vod_pic, - vod_remarks - }); - }); - - return JSON.stringify({ - list: list, - pagecount: 1 - }); - } catch (e) { - console.error("搜索失败:", e.message); - return JSON.stringify({ list: [] }); - } -} - -async function detail(id) { - try { - const videoId = id; - const url = appConfig.siteUrl + videoId; - const response = await req(url); - const html = response ? response.content : ''; - const $ = cheerio.load(html); - - const vod_name = $('.module-info-heading h1').text().trim(); - const imgSrc = $('.module-item-pic img').attr("data-src") || ''; - const vod_pic = imgSrc ? (imgSrc.startsWith('http') ? imgSrc : appConfig.siteUrl + imgSrc) : ''; - - let vod_actor = ''; - let vod_remarks = ''; - - $('.module-info-item').each((i, el) => { - const title = $(el).find('.module-info-item-title').text().trim(); - const content = $(el).find('.module-info-item-content').text().trim(); - if (title.includes('主演')) { - vod_actor = content; - } else if (title.includes('更新') || title.includes('状态') || title.includes('连载')) { - vod_remarks = content; - } - }); - - const vod_content = $('.module-info-introduction-content p').text().trim(); - - let rawLines = []; - let rawPlaylists = []; - - $('.mx-anthology-tab-label').each((i, el) => { - const lineName = $(el).text().trim(); - rawLines.push(lineName); - }); - - $('.mx-anthology-grid').each((lineIndex, poolEl) => { - const episodes = []; - $(poolEl).find('.mx-anthology-link').each((episodeIndex, epEl) => { - const name = $(epEl).text().trim(); - const href = $(epEl).attr('href') || ''; - if (name && href) { - episodes.push(`${name}$${href}`); - } - }); - rawPlaylists.push(episodes); - }); - - let finalLines = []; - let finalPlaylists = []; - for (let i = 0; i < rawLines.length; i++) { - if (rawPlaylists[i] && rawPlaylists[i].length > 0) { - finalLines.push(rawLines[i]); - finalPlaylists.push(rawPlaylists[i]); - } - } - - const { vod_play_from, vod_play_url } = buildVodPlayData(finalLines, finalPlaylists, true); - - const vod = { - vod_id: videoId, - vod_name, - vod_pic, - vod_actor, - vod_remarks, - vod_content, - vod_play_from, - vod_play_url - }; - - return JSON.stringify({ list: [vod] }); - } catch (error) { - console.error(`解析详情页异常 [ID: ${id}]:`, error); - return JSON.stringify({ list: [] }); - } -} - -function buildVodPlayData(lines, playlists, shouldReverse = true) { - const processedPlaylists = playlists.map(eps => { - if (shouldReverse) { - eps.reverse(); - } - return eps.join('#'); - }); - return { - vod_play_from: lines.filter(Boolean).join('$$$'), - vod_play_url: processedPlaylists.join('$$$') - }; -} - -function isDirectUrl(url) { - return url.startsWith('http') || url.endsWith(".m3u8") || url.endsWith(".mp4"); -} - -function getPlayFrom(html) { - const match = html.match(/var\s+player_aaaa[\s\S]*?"from"\s*:\s*"([^"]+)"/); - return match ? match[1].replace(/\\/g, '') : ''; -} - -function getPlayUrl(html) { - const match = html.match(/var\s+player_aaaa[\s\S]*?"url"\s*:\s*"([^"]+)"/); - let url = match ? match[1] : ''; - url = url.replace(/\\/g, ''); - return url; -} - -async function parsePlayUrl(parseApi, rawUrl) { - try { - const html = (await req(`${parseApi}${rawUrl}`, { - method: 'GET', - headers: Headers - })).content; - const $ = cheerio.load(html); - const token = $('#player-data').attr('data-te'); - if (!token) { - const urlMatch = html.match(/"url"\s*:\s*"([^"]+)"/); - if (urlMatch) { - return urlMatch[1].replace(/\\/g, ''); - } - return ''; - } - let playData = (await req(`${parseApi.replace('?url=', '')}/mplayer.php`, { - method: 'POST', - headers: { - 'Content-Type': 'application/x-www-form-urlencoded', - }, - data: { - url: rawUrl, - token: token, - } - })).content; - playData = JSON.parse(playData); - return playData.url || ''; - } catch (e) { - console.error("解析播放地址失败:", e.message); - return ""; - } -} - -function needParse(from) { - const parseLines = ['JD4K', 'YYNB', 'JD2K', 'qiyi', 'bilibili', 'qq', 'youku']; - return parseLines.indexOf(from) !== -1; -} - -function getParseApi(from) { - if (from === 'JD4K' || from === 'JD2K') { - return parseApi4k; - } - return parseApi2k; -} - -async function play(flag, id, flags) { - try { - const html = (await req(`${appConfig.siteUrl}${id}`)).content; - const url = getPlayUrl(html); - const from = getPlayFrom(html); - - if (isDirectUrl(url)) { - return JSON.stringify({ - parse: 0, - Header: { - "User-Agent": UA - }, - url, - }); - } - - if (needParse(from) && url) { - const parseApi = getParseApi(from); - const realUrl = await parsePlayUrl(parseApi, url); - if (realUrl) { - return JSON.stringify({ - parse: 0, - Header: { - "User-Agent": UA, - "Referer": parseApi - }, - url: realUrl - }); - } - } - - return JSON.stringify({ - parse: 0, - Header: { - "User-Agent": UA - }, - url: url - }); - } catch (e) { - console.error("播放失败:", e); - return JSON.stringify({ parse: 0, url: "" }); - } -} - -export default { - init, - home, - category, - detail, - search, - play -}; diff --git a/Ye-11X115490_PsyDuck4k/ʕ•͈⚇•͈ʔ b/Ye-11X115490_PsyDuck4k/ʕ•͈⚇•͈ʔ deleted file mode 100644 index 3eac43d5..00000000 --- a/Ye-11X115490_PsyDuck4k/ʕ•͈⚇•͈ʔ +++ /dev/null @@ -1,279 +0,0 @@ -{ - "sites": [ - { - "key": "枫叶", - "name": "枫叶影院", - "type": 3, - "api": "https://gitee.com/Ye-11X115490/PsyDuck/raw/master/lib/枫叶.js", - "searchable": 1, - "quickSearch": 1, - "filterable": 1, - "changeable": 1, - "playable": 1 - }, - { - "key": "追光", - "name": "追光影视", - "type": 4, - "api": "http://8.134.205.252:39466/shenma/zg.php", - "searchable": 1, - "quickSearch": 1, - "filterable": 1 - }, - { - "key": "CO4K", - "name": "C O 影视", - "type": 4, - "api": "http://8.134.205.252:39466/pz/co4k.php/api.php/provide/vod/?ac=list", - "searchable": 1, - "quickSearch": 1, - "filterable": 1 - }, - { - "key": "歪比巴卜", - "name": "歪比巴卜", - "type": 3, - "changeable": 0, - "api": "https://gitee.com/Ye-11X115490/PsyDuck/raw/master/lib/歪比巴卜.js", - "searchable": 1, - "quickSearch": 1, - "filterable": 1 - }, - {"key":"咕噜","name":"咕噜咕噜","type":4,"api":"http://211.101.247.26:99/proxy.php?code=9999&target=f5eb11c746869fd90c06","searchable":1,"quickSearch":1,"filterable":1,"changeable":0,"ext":""}, - { - "key": "布布", - "name": "布布影视", - "type": 3, - "api": "https://gitee.com/Ye-11X115490/PsyDuck/raw/master/lib/布布影视.js" - }, - { - "key": "腾讯", - "name": "腾讯视频", - "type": 3, - "jar": "http://125.208.22.184:6019/uploads/tvbox/jar/xywp.jar;md5;8ad5c036e8ab4df4f3873780c586e7c1", - "api": "csp_Tencent", - "ext": "/ZE6FY7TFUnOGwjVo+fPIyHKqEMai+KWYLN9iLjSSSh4S0FKDSvRwwG8mr+TGYcPbokCBkpT7Mke6Tf4wJ41mg==", - "searchable": 1, - "quickSearch": 1, - "filterable": 1 - }, - { - "key": "芒果", - "name": "芒果视频", - "type": 3, - "jar": "http://125.208.22.184:6019/uploads/tvbox/jar/xywp.jar;md5;8ad5c036e8ab4df4f3873780c586e7c1", - "api": "csp_Mango", - "ext": "/ZE6FY7TFUnOGwjVo+fPI5QppjJcram+LYJBroPBjA3nbrRjT1GVNGOxBDpHR4wkiZ0fAyB4s01lJYdFHOZtGA==", - "searchable": 1, - "quickSearch": 1, - "filterable": 1 - }, -{"key":"bili","name":"哔哩哔哩","type":4,"api":"http://211.101.247.26:99/proxy.php?code=9999&target=f064a77443204ab4568d","searchable":1,"quickSearch":1,"changeable":0}, - { - "key": "爱奇艺", - "name": "奇艺视频", - "type": 3, - "searchable": 1, - "quickSearch": 1, - "changeable": 1, - "api": "https://gitee.com/monosodium-glutamate/wjwj/raw/master/lib/drpy2.min.js", - "ext": "https://gitee.com/Ye-11X115490/PsyDuck/raw/master/lib/爱奇艺.js" - }, - { - "key": "优酷", - "name": "优酷视频", - "type": 3, - "searchable": 1, - "quickSearch": 1, - "changeable": 1, - "api": "https://gitee.com/monosodium-glutamate/wjwj/raw/master/lib/drpy2.min.js", - "ext": "https://gitee.com/Ye-11X115490/PsyDuck/raw/master/lib/优酷视频.js" - }, - { - "key": "山楂影视", - "name": "山楂影视", - "type": 3, - "api": "https://gitee.com/Ye-11X115490/PsyDuck/raw/master/lib/山楂影视.py", - "searchable": 1, - "quickSearch": 1, - "filterable": 1 - }, - { - "key": "虫虫", - "name": "虫虫影视", - "type": 3, - "api": "https://gitee.com/Ye-11X115490/PsyDuck/raw/master/lib/虫虫影视.js", - "searchable": 1, - "quickSearch": 1, - "filterable": 1 - }, - { - "key": "星空", - "name": "星空影视", - "type": 3, - "jar": "https://gitee.com/Ye-11X115490/PsyDuck/raw/master/lib/潇洒.jar", - "searchable": 1, - "changeable": 1, - "api": "csp_AppGet", - "ext": { - "url": "http://23.148.228.37:6090", - "dataKey": "106jkcdnkldzckjk", - "dataIv": "106jkcdnkldzckjk" - } - }, - { - "key": "四叶草", - "name": "叶草影视", - "type": 3, - "api": "https://gitee.com/Ye-11X115490/PsyDuck/raw/master/lib/PsyDuck-Qiji.py", - "searchable": 1, - "changeable": 1, - "ext": { - "site": "https://yzysap.oss-cn-hangzhou.aliyuncs.com/kkk.txt", - "dataKey": "8eeObuwrmS3lRDEs", - "dataIv": "8eeObuwrmS3lRDEs", - "ua": "okhttp/3.10.0", - "api": 2 - } - }, - { - "key": "秒看", - "name": "秒看视频", - "type": 3, - "api": "https://10402.kstore.vip/ycsk/qf.py", - "ext": { - "site": "https://mk1080.top", - "dataKey": "c60d88b2eep53za8", - "dataIv": "c60d88b2eep53za8", - "token": "b008fad37a80ead49addf97984b154387fddd3fe42a81a79671281b6082bcd80", - "ua": "okhttp/3.14.9" - } - }, - { - "key": "魔方", - "name": "魔方视频", - "type": 3, - "jar": "https://gitee.com/Ye-11X115490/PsyDuck/raw/master/lib/潇洒.jar", - "searchable": 1, - "changeable": 1, - "api": "csp_AppGet", - "ext": { - "url": "https://www.alibaba31casaq.top", - "dataKey": "1234567887654321", - "dataIv": "1234567887654321" - } - }, - { - "key": "快映", - "name": "快映视频", - "type": 3, - "changeable": 0, - "api": "https://gitee.com/Ye-11X115490/PsyDuck/raw/master/lib/AppFox.js", - "ext": { - "host": "https://www.kanzurm65ak.top/", - "ver": 3 - } - }, - { - "key": "hohai", - "name": " E M B Y ", - "type": 4, - "api": "http://8.134.205.252:39466/mmcb/zc1.php/api.php/provide/vod/?ac=list", - "searchable": 1, - "quickSearch": 1, - "filterable": 1 - }, - {"key":"wanou_sites","name":"网盘聚合","type":4,"api":"http://211.101.247.26:99/proxy.php?code=9999&target=5657e709a4c79e8b5e4b","searchable":1,"quickSearch":1,"filterable":1}, - { - "key": "mihdr", - "name": "小米网盘", - "type": 3, - "jar": "https://gitee.com/Ye-11X115490/PsyDuck/raw/master/lib/PsyDuck-wp.jar", - "api": "csp_ZC4K", - "ext": "YUhSMGNEb3ZMekUyTUM0eU1ESXVNak00TGpNNU9qTTNNekU1TDJGd2FTNXdhSEEvYzJsMFpUMXRhV2hrY2lNakkyMXBhR1J5" - }, - { - "key": "ouge", - "name": "讴歌网盘", - "type": 3, - "jar": "https://gitee.com/Ye-11X115490/PsyDuck/raw/master/lib/PsyDuck-wp.jar", - "api": "csp_ZC4K", - "ext": "YUhSMGNEb3ZMekUyTUM0eU1ESXVNak00TGpNNU9qTTNNekU1TDJGd2FTNXdhSEEvYzJsMFpUMXZkV2RsSXlNamIzVm5aUT09" - }, - { - "key": "mogg", - "name": "木偶网盘", - "type": 3, - "jar": "https://gitee.com/Ye-11X115490/PsyDuck/raw/master/lib/PsyDuck-wp.jar", - "api": "csp_ZC4K", - "ext": "YUhSMGNEb3ZMekUyTUM0eU1ESXVNak00TGpNNU9qTTNNekU1TDJGd2FTNXdhSEEvYzJsMFpUMXRiMmRuSXlNamJXOW5adz09" - }, - { - "key": "wogg", - "name": "玩偶网盘", - "type": 3, - "jar": "https://gitee.com/Ye-11X115490/PsyDuck/raw/master/lib/PsyDuck-wp.jar", - "api": "csp_ZC4K", - "ext": "YUhSMGNEb3ZMekUyTUM0eU1ESXVNak00TGpNNU9qTTNNekU1TDJGd2FTNXdhSEEvYzJsMFpUMTNiMmRuSXlNamQyOW5adz09" - }, - { - "key": "huban", - "name": "虎斑网盘", - "type": 3, - "jar": "https://gitee.com/Ye-11X115490/PsyDuck/raw/master/lib/PsyDuck-wp.jar", - "api": "csp_ZC4K", - "ext": "YUhSMGNEb3ZMekUyTUM0eU1ESXVNak00TGpNNU9qTTNNekU1TDJGd2FTNXdhSEEvYzJsMFpUMW9kV0poYmlNakkyaDFZbUZ1" - }, - { - "key": "erxiao", - "name": "小二网盘", - "type": 3, - "jar": "https://gitee.com/Ye-11X115490/PsyDuck/raw/master/lib/PsyDuck-wp.jar", - "api": "csp_ZC4K", - "ext": "YUhSMGNEb3ZMekUyTUM0eU1ESXVNak00TGpNNU9qTTNNekU1TDJGd2FTNXdhSEEvYzJsMFpUMWxjbmhwWVc4akl5TmxjbmhwWVc4PQ==" - } - ], - "parses": [ - { - "name": "4K", - "type": 1, - "url": "http://8.134.205.252:39466/ceshi/cs.php?key=udk&url=", - "ext": { - "flag": [ - "1080P+", - "超清4K", - "qiyi", - "爱奇艺", - "奇艺", - "youku", - "优酷", - "mgtv", - "芒果", - "bilibili" - ] - } - }, - { - "name": "网盘", - "type": 1, - "url": "http://8.134.205.252:39466/ceshi/ss.php?key=ysj&url=", - "ext": { - "flag": [ - "baidu", - "baidu2", - "abaidu", - "a123", - "a189", - "a115", - "ali", - "臻彩", - "臻彩2", - "原彩", - "真彩", - "清秋", - "明月" - ] - } - } - ] -} \ No newline at end of file diff --git a/cluntop_tvbox/lib/iptv.m3u b/cluntop_tvbox/lib/iptv.m3u index 0b4477ac..95d001b9 100755 --- a/cluntop_tvbox/lib/iptv.m3u +++ b/cluntop_tvbox/lib/iptv.m3u @@ -64,9 +64,9 @@ http://106.53.99.30/tv/api.php?id=bjws4k$LR•IPV4•5『线路5』 #EXTINF:-1 tvg-id="CCTV4K" tvg-name="CCTV4K" group-title="4K",CCTV4K http://101.43.145.141:12002/gaoma/cctv4k.m3u8$LR•IPV4•6『线路1』 #EXTINF:-1 tvg-id="CCTV4K" tvg-name="CCTV4K" group-title="4K",CCTV4K -https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4k_mbd.m3u8?auth_key=1784322000-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-aa68fb06c12f53b71a4d170807f32df5&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•6『线路2』 +https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4k_mbd.m3u8?auth_key=1784329200-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-81ad4aefc95ce528b3da1112f0bc9ff2&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•6『线路2』 #EXTINF:-1 tvg-id="CCTV4K" tvg-name="CCTV4K" group-title="4K",CCTV4K -https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4k_mbd.m3u8?auth_key=1784325600-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-da48bbac79b9621fa8f084ece04c2c91&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•6『线路3』 +https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4k_mbd.m3u8?auth_key=1784322000-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-aa68fb06c12f53b71a4d170807f32df5&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•6『线路3』 #EXTINF:-1 tvg-id="CCTV4K" tvg-name="CCTV4K" group-title="4K",CCTV4K http://198.204.240.250:82/live/cctv4k.m3u8$LR•IPV4•6『线路4』 #EXTINF:-1 tvg-id="CCTV4K" tvg-name="CCTV4K" group-title="4K",CCTV4K @@ -162,11 +162,11 @@ http://74.91.26.218:82/live/cctv4hd.m3u8$LR•IPV4•16『线路8』 #EXTINF:-1 tvg-id="CCTV4" tvg-name="CCTV4" group-title="央视",CCTV4 p3p://167.114.175.6:55331/61244d9c0006885d64b1b7591f6c12a0$LR•IPV4•16『线路9』 #EXTINF:-1 tvg-id="CCTV4" tvg-name="CCTV4" group-title="央视",CCTV4 -https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784322000-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-25fe408e6545f49f3d4eb7f92e97c764&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•16『线路10』 +https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784329200-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-2245971645866ed95972e22af68cc8d1&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•16『线路10』 #EXTINF:-1 tvg-id="CCTV4" tvg-name="CCTV4" group-title="央视",CCTV4 -https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784325600-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-b583b000601c3690c0e4bae75e1261f0&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•16『线路11』 +https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784271600-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-6aec44040ec72def77e22587fc404005&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•16『线路11』 #EXTINF:-1 tvg-id="CCTV4" tvg-name="CCTV4" group-title="央视",CCTV4 -https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784271600-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-6aec44040ec72def77e22587fc404005&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•16『线路12』 +https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784322000-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-25fe408e6545f49f3d4eb7f92e97c764&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•16『线路12』 #EXTINF:-1 tvg-id="CCTV4" tvg-name="CCTV4" group-title="央视",CCTV4 http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226335/1.m3u8?$LR•IPV6•16『线路13』 #EXTINF:-1 tvg-id="CCTV4" tvg-name="CCTV4" group-title="央视",CCTV4 @@ -184,13 +184,13 @@ http://221.226.51.220:50081/newlive/live/hls/5/live.m3u8$LR•IPV4•14『线路 #EXTINF:-1 tvg-id="CCTV5" tvg-name="CCTV5" group-title="央视",CCTV5 http://112.27.235.94:8000/hls/5/index.m3u8$LR•IPV4•14『线路4』 #EXTINF:-1 tvg-id="CCTV5" tvg-name="CCTV5" group-title="央视",CCTV5 -http://38.75.136.137:98/gslb/dsdqbv/cctv5hd.m3u8?auth=test20251009$LR•IPV4•14『线路5』 +http://101.66.199.247:9901/tsfile/live/0005_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•14『线路5』 #EXTINF:-1 tvg-id="CCTV5" tvg-name="CCTV5" group-title="央视",CCTV5 -http://112.46.105.20:8009/hls/503/index.m3u8$LR•IPV4•14『线路6』 +http://38.75.136.137:98/gslb/dsdqbv/cctv5hd.m3u8?auth=test20251009$LR•IPV4•14『线路6』 #EXTINF:-1 tvg-id="CCTV5" tvg-name="CCTV5" group-title="央视",CCTV5 -http://153.0.171.163:9901/tsfile/live/0005_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•14『线路7』 +http://112.46.105.20:8009/hls/503/index.m3u8$LR•IPV4•14『线路7』 #EXTINF:-1 tvg-id="CCTV5" tvg-name="CCTV5" group-title="央视",CCTV5 -http://101.66.199.247:9901/tsfile/live/0005_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•14『线路8』 +http://153.0.171.163:9901/tsfile/live/0005_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•14『线路8』 #EXTINF:-1 tvg-id="CCTV5" tvg-name="CCTV5" group-title="央视",CCTV5 http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226469/1.m3u8?$LR•IPV6•14『线路9』 #EXTINF:-1 tvg-id="CCTV5" tvg-name="CCTV5" group-title="央视",CCTV5 @@ -198,9 +198,9 @@ http://183.129.255.66:8480/hls/6/index.m3u8$LR•IPV4•14『线路10』 #EXTINF:-1 tvg-id="CCTV5" tvg-name="CCTV5" group-title="央视",CCTV5 http://112.27.235.94:8000/hls/6/index.m3u8$LR•IPV4•14『线路11』 #EXTINF:-1 tvg-id="CCTV5" tvg-name="CCTV5" group-title="央视",CCTV5 -http://38.75.136.137:98/gslb/dsdqbv/cctv5p.m3u8?auth=test20251009$LR•IPV4•14『线路12』 +http://112.123.243.37:50085/tsfile/live/0006_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•14『线路12』 #EXTINF:-1 tvg-id="CCTV5" tvg-name="CCTV5" group-title="央视",CCTV5 -http://112.123.243.37:50085/tsfile/live/0006_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•14『线路13』 +http://38.75.136.137:98/gslb/dsdqbv/cctv5p.m3u8?auth=test20251009$LR•IPV4•14『线路13』 #EXTINF:-1 tvg-id="CCTV5" tvg-name="CCTV5" group-title="央视",CCTV5 http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226894/1.m3u8?$LR•IPV6•14『线路14』 #EXTINF:-1 tvg-id="CCTV6" tvg-name="CCTV6" group-title="央视",CCTV6 @@ -302,9 +302,9 @@ http://112.46.105.20:8009/hls/509/index.m3u8$LR•IPV4•12『线路6』 #EXTINF:-1 tvg-id="CCTV9" tvg-name="CCTV9" group-title="央视",CCTV9 http://153.0.171.163:9901/tsfile/live/1008_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•12『线路7』 #EXTINF:-1 tvg-id="CCTV9" tvg-name="CCTV9" group-title="央视",CCTV9 -https://v4-e6b1c5baf4e240fe63adbf68dda23435.livehwc4.com/play.kankanlive.com/live/1698423397390920.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=f3fb3ddaca05941087114cf6481e1c23$LR•IPV4•12『线路8』 +https://v4-e6b1c5baf4e240fe63adbf68dda23435.livehwc4.com/play.kankanlive.com/live/1698423397390920.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=8a921813ee3b23c82763145c9f291a3b$LR•IPV4•12『线路8』 #EXTINF:-1 tvg-id="CCTV9" tvg-name="CCTV9" group-title="央视",CCTV9 -https://v4-702cae17a28d6e4f0c0002bba021d934.livehwc4.com/play.kankanlive.com/live/1698423397390920.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=2b87983b301b48537526846889074801$LR•IPV4•12『线路9』 +https://v4-e6b1c5baf4e240fe63adbf68dda23435.livehwc4.com/play.kankanlive.com/live/1698423397390920.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=f3fb3ddaca05941087114cf6481e1c23$LR•IPV4•12『线路9』 #EXTINF:-1 tvg-id="CCTV9" tvg-name="CCTV9" group-title="央视",CCTV9 http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226944/1.m3u8?$LR•IPV6•12『线路10』 #EXTINF:-1 tvg-id="CCTV9" tvg-name="CCTV9" group-title="央视",CCTV9 @@ -328,11 +328,11 @@ http://112.46.105.20:8009/hls/506/index.m3u8$LR•IPV4•11『线路7』 #EXTINF:-1 tvg-id="CCTV10" tvg-name="CCTV10" group-title="央视",CCTV10 http://74.91.26.218:82/live/cctv10hd.m3u8$LR•IPV4•11『线路8』 #EXTINF:-1 tvg-id="CCTV10" tvg-name="CCTV10" group-title="央视",CCTV10 -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226937/1.m3u8?$LR•IPV6•11『线路9』 +https://jsv-live-play.sfccn.com/live/jsv_3920_fhd.m3u8$LR•IPV4•11『线路9』 #EXTINF:-1 tvg-id="CCTV10" tvg-name="CCTV10" group-title="央视",CCTV10 -https://hwapi.yntv.net/ew265l/z1z6s5.m3u8$LR•IPV4•11『线路10』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226937/1.m3u8?$LR•IPV6•11『线路10』 #EXTINF:-1 tvg-id="CCTV10" tvg-name="CCTV10" group-title="央视",CCTV10 -https://jsv-live-play.sfccn.com/live/jsv_3920_fhd.m3u8$LR•IPV4•11『线路11』 +https://hwapi.yntv.net/ew265l/z1z6s5.m3u8$LR•IPV4•11『线路11』 #EXTINF:-1 tvg-id="CCTV11" tvg-name="CCTV11" group-title="央视",CCTV11 http://183.129.255.66:8480/hls/12/index.m3u8$LR•IPV4•8『线路1』 #EXTINF:-1 tvg-id="CCTV11" tvg-name="CCTV11" group-title="央视",CCTV11 @@ -346,9 +346,9 @@ http://38.75.136.137:98/gslb/dsdqbv/cctv11hd.m3u8?auth=test20251009$LR•IPV4• #EXTINF:-1 tvg-id="CCTV11" tvg-name="CCTV11" group-title="央视",CCTV11 http://74.91.26.218:82/live/cctv11hd.m3u8$LR•IPV4•8『线路6』 #EXTINF:-1 tvg-id="CCTV11" tvg-name="CCTV11" group-title="央视",CCTV11 -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226334/1.m3u8?$LR•IPV6•8『线路7』 +http://183.196.25.171:808/hls/11/index.m3u8$LR•IPV4•8『线路7』 #EXTINF:-1 tvg-id="CCTV11" tvg-name="CCTV11" group-title="央视",CCTV11 -http://183.196.25.171:808/hls/11/index.m3u8$LR•IPV4•8『线路8』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226334/1.m3u8?$LR•IPV6•8『线路8』 #EXTINF:-1 tvg-id="CCTV12" tvg-name="CCTV12" group-title="央视",CCTV12 http://112.123.243.37:50085/tsfile/live/0013_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•9『线路1』 #EXTINF:-1 tvg-id="CCTV12" tvg-name="CCTV12" group-title="央视",CCTV12 @@ -408,9 +408,9 @@ http://153.0.171.163:9901/tsfile/live/1013_1.m3u8?key=txiptv&playlive=1&authid=0 #EXTINF:-1 tvg-id="CCTV14" tvg-name="CCTV14" group-title="央视",CCTV14 http://112.27.235.94:8000/hls/15/index.m3u8$LR•IPV4•9『线路5』 #EXTINF:-1 tvg-id="CCTV14" tvg-name="CCTV14" group-title="央视",CCTV14 -http://38.75.136.137:98/gslb/dsdqbv/cctv14hd.m3u8?auth=test20251009$LR•IPV4•9『线路6』 +http://112.123.243.37:50085/tsfile/live/0015_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•9『线路6』 #EXTINF:-1 tvg-id="CCTV14" tvg-name="CCTV14" group-title="央视",CCTV14 -http://112.123.243.37:50085/tsfile/live/0015_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•9『线路7』 +http://38.75.136.137:98/gslb/dsdqbv/cctv14hd.m3u8?auth=test20251009$LR•IPV4•9『线路7』 #EXTINF:-1 tvg-id="CCTV14" tvg-name="CCTV14" group-title="央视",CCTV14 http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226947/1.m3u8?$LR•IPV6•9『线路8』 #EXTINF:-1 tvg-id="CCTV14" tvg-name="CCTV14" group-title="央视",CCTV14 @@ -458,11 +458,11 @@ http://38.75.136.137:98/gslb/dsdqbv/cctv17hd.m3u8?auth=test20251009$LR•IPV4• #EXTINF:-1 tvg-id="CCTV17" tvg-name="CCTV17" group-title="央视",CCTV17 http://74.91.26.218:82/live/cctv17hd.m3u8$LR•IPV4•9『线路6』 #EXTINF:-1 tvg-id="CCTV17" tvg-name="CCTV17" group-title="央视",CCTV17 -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226318/1.m3u8?$LR•IPV6•9『线路7』 +http://183.196.25.171:808/hls/93/index.m3u8$LR•IPV4•9『线路7』 #EXTINF:-1 tvg-id="CCTV17" tvg-name="CCTV17" group-title="央视",CCTV17 -http://38.75.136.137:98/gslb/dsdqpub/cctv17hd.m3u8?auth=testpub$LR•IPV4•9『线路8』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226318/1.m3u8?$LR•IPV6•9『线路8』 #EXTINF:-1 tvg-id="CCTV17" tvg-name="CCTV17" group-title="央视",CCTV17 -http://183.196.25.171:808/hls/93/index.m3u8$LR•IPV4•9『线路9』 +http://38.75.136.137:98/gslb/dsdqpub/cctv17hd.m3u8?auth=testpub$LR•IPV4•9『线路9』 #EXTINF:-1 tvg-id="CCTV第一剧场" tvg-name="CCTV第一剧场" group-title="央视",CCTV第一剧场 http://38.75.136.137:98/gslb/dsdqpub/dyjc.m3u8?auth=testpub$LR•IPV4 #EXTINF:-1 tvg-id="CCTV怀旧剧场" tvg-name="CCTV怀旧剧场" group-title="央视",CCTV怀旧剧场 @@ -562,17 +562,17 @@ https://gcalic.v.myalicdn.com/gc/wgw05_1/index.m3u8?contentid=2820180516001$LR #EXTINF:-1 tvg-id="直播中国" tvg-name="直播中国" group-title="央视",直播中国 https://gcalic.v.myalicdn.com/gc/wgw05_1/index.m3u8$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="重温经典" tvg-name="重温经典" group-title="卫视",重温经典 -http://php.jdshipin.com/TVOD/iptv.php?id=cwjd$LR•IPV4•6『线路1』 +http://112.27.235.94:8000/hls/50/index.m3u8$LR•IPV4•6『线路1』 #EXTINF:-1 tvg-id="重温经典" tvg-name="重温经典" group-title="卫视",重温经典 -http://ali.hlspull.yximgs.com/live/awei_cwjd.flv$LR•IPV4•6『线路2』 +http://php.jdshipin.com/TVOD/iptv.php?id=cwjd$LR•IPV4•6『线路2』 #EXTINF:-1 tvg-id="重温经典" tvg-name="重温经典" group-title="卫视",重温经典 -http://home.kuaidi521.com:35455/bptv/10000100000000050000000003887494.m3u8$LR•IPV4•6『线路3』 +http://ali.hlspull.yximgs.com/live/awei_cwjd.flv$LR•IPV4•6『线路3』 #EXTINF:-1 tvg-id="重温经典" tvg-name="重温经典" group-title="卫视",重温经典 -http://cdn3.132.us.kg/live/cwjd/stream.m3u8$LR•IPV4•6『线路4』 +http://home.kuaidi521.com:35455/bptv/10000100000000050000000003887494.m3u8$LR•IPV4•6『线路4』 #EXTINF:-1 tvg-id="重温经典" tvg-name="重温经典" group-title="卫视",重温经典 -p3p://167.114.175.6:55331/65c5064800047df41ad1a47449e93b8b$LR•IPV4•6『线路5』 +http://cdn3.132.us.kg/live/cwjd/stream.m3u8$LR•IPV4•6『线路5』 #EXTINF:-1 tvg-id="重温经典" tvg-name="重温经典" group-title="卫视",重温经典 -http://112.27.235.94:8000/hls/50/index.m3u8$LR•IPV4•6『线路6』 +p3p://167.114.175.6:55331/65c5064800047df41ad1a47449e93b8b$LR•IPV4•6『线路6』 #EXTINF:-1 tvg-id="香港卫视" tvg-name="香港卫视" group-title="卫视",香港卫视 http://webcast.hkstv.tv/livestream/mutfysrq/playlist.m3u8$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="香港卫视" tvg-name="香港卫视" group-title="卫视",香港卫视 @@ -592,19 +592,19 @@ http://171.213.140.54:8123/udp/239.93.1.10:2193$LR•IPV4•7『线路6』 #EXTINF:-1 tvg-id="星空卫视" tvg-name="星空卫视" group-title="卫视",星空卫视 https://stream1.freetv.fun/xing-kong-wei-shi-4.ctv$LR•IPV4•7『线路7』 #EXTINF:-1 tvg-id="湖南卫视" tvg-name="湖南卫视" group-title="卫视",湖南卫视 -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226509/1.m3u8?zoneoffset=480&servicetype=1&icpid=&limitflux=-1&limitdur=-1&tenantId=8601&accountinfo=%7E%7EV2.0%7EIGb_ib7rnBX9_sANRKq9sg%7EpK8OKM5JoJWWbLRyLfPcUMkwWZ90MzSI9S9PDltJsYzd0ZGcS3Tkh7syciNKJa-w60mDOdwtDyoNwCx9aRgzHNH9AUREV_qvNJtXHRPzYw0%7EExtInfo9bj61dxzlMXrsixrqcFYPg%3D%3D%3A20221022013542%2C915973%2C119.123.71.209%2C20221022013542%2C10000100000000050000000003873458%2C915973%2C-1%2C0%2C1%2C%2C%2C2%2C%2C%2C%2C2%2C%2C10000100000000060000000007253514_0%2CEND&GuardEncType=2$LR•IPV6•16『线路1』 +http://120.196.232.43:8088/rrs03.hw.gmcc.net/PLTV/651/224/3221226698/1.m3u8$LR•IPV4•16『线路1』 #EXTINF:-1 tvg-id="湖南卫视" tvg-name="湖南卫视" group-title="卫视",湖南卫视 -http://74.91.26.218:82/live/hnwshd.m3u8$LR•IPV4•16『线路2』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226509/1.m3u8?zoneoffset=480&servicetype=1&icpid=&limitflux=-1&limitdur=-1&tenantId=8601&accountinfo=%7E%7EV2.0%7EIGb_ib7rnBX9_sANRKq9sg%7EpK8OKM5JoJWWbLRyLfPcUMkwWZ90MzSI9S9PDltJsYzd0ZGcS3Tkh7syciNKJa-w60mDOdwtDyoNwCx9aRgzHNH9AUREV_qvNJtXHRPzYw0%7EExtInfo9bj61dxzlMXrsixrqcFYPg%3D%3D%3A20221022013542%2C915973%2C119.123.71.209%2C20221022013542%2C10000100000000050000000003873458%2C915973%2C-1%2C0%2C1%2C%2C%2C2%2C%2C%2C%2C2%2C%2C10000100000000060000000007253514_0%2CEND&GuardEncType=2$LR•IPV6•16『线路2』 #EXTINF:-1 tvg-id="湖南卫视" tvg-name="湖南卫视" group-title="卫视",湖南卫视 -http://204.12.221.218:8181/3m1080p/hnws.m3u8$LR•IPV4•16『线路3』 +http://74.91.26.218:82/live/hnwshd.m3u8$LR•IPV4•16『线路3』 #EXTINF:-1 tvg-id="湖南卫视" tvg-name="湖南卫视" group-title="卫视",湖南卫视 -http://173.208.212.130:8181/720p/hnws.m3u8$LR•IPV4•16『线路4』 +http://204.12.221.218:8181/3m1080p/hnws.m3u8$LR•IPV4•16『线路4』 #EXTINF:-1 tvg-id="湖南卫视" tvg-name="湖南卫视" group-title="卫视",湖南卫视 -http://153.0.171.163:9901/tsfile/live/0128_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•16『线路5』 +http://173.208.212.130:8181/720p/hnws.m3u8$LR•IPV4•16『线路5』 #EXTINF:-1 tvg-id="湖南卫视" tvg-name="湖南卫视" group-title="卫视",湖南卫视 -http://112.27.235.94:8000/hls/31/index.m3u8$LR•IPV4•16『线路6』 +http://153.0.171.163:9901/tsfile/live/0128_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•16『线路6』 #EXTINF:-1 tvg-id="湖南卫视" tvg-name="湖南卫视" group-title="卫视",湖南卫视 -http://120.196.232.43:8088/rrs03.hw.gmcc.net/PLTV/651/224/3221226698/1.m3u8$LR•IPV4•16『线路7』 +http://112.27.235.94:8000/hls/31/index.m3u8$LR•IPV4•16『线路7』 #EXTINF:-1 tvg-id="湖南卫视" tvg-name="湖南卫视" group-title="卫视",湖南卫视 http://38.75.136.137:98/gslb/dsdqpub/hnwshd.m3u8?auth=testpub$LR•IPV4•16『线路8』 #EXTINF:-1 tvg-id="湖南卫视" tvg-name="湖南卫视" group-title="卫视",湖南卫视 @@ -624,21 +624,21 @@ https://httop.top/ysp-湖南卫视$LR•IPV4•16『线路15』 #EXTINF:-1 tvg-id="湖南卫视" tvg-name="湖南卫视" group-title="卫视",湖南卫视 http://iptv.huuc.edu.cn/hls/hunanhd.m3u8$LR•IPV4•16『线路16』 #EXTINF:-1 tvg-id="浙江卫视" tvg-name="浙江卫视" group-title="卫视",浙江卫视 -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226899/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ETYfTgTra_pUx2cPrgZ_BDw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•17『线路1』 +http://zwebl02.cztv.com/live/channel01720Pnew.m3u8?auth_key=1784123883-f178167128c55cd66b7eca004ccca015-0-69f388bdaa594feb900510d687566182$LR•IPV4•17『线路1』 #EXTINF:-1 tvg-id="浙江卫视" tvg-name="浙江卫视" group-title="卫视",浙江卫视 -http://112.123.243.37:50085/tsfile/live/0019_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•17『线路2』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226899/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ETYfTgTra_pUx2cPrgZ_BDw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•17『线路2』 #EXTINF:-1 tvg-id="浙江卫视" tvg-name="浙江卫视" group-title="卫视",浙江卫视 -http://ali-xwl.cztv.com/live/channel011080Plxw.m3u8$LR•IPV4•17『线路3』 +http://112.123.243.37:50085/tsfile/live/0019_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•17『线路3』 #EXTINF:-1 tvg-id="浙江卫视" tvg-name="浙江卫视" group-title="卫视",浙江卫视 -http://204.12.221.218:8181/3m1080p/zjws.m3u8$LR•IPV4•17『线路4』 +http://ali-xwl.cztv.com/live/channel011080Plxw.m3u8$LR•IPV4•17『线路4』 #EXTINF:-1 tvg-id="浙江卫视" tvg-name="浙江卫视" group-title="卫视",浙江卫视 -http://173.208.212.130:8181/720p/zjws.m3u8$LR•IPV4•17『线路5』 +http://204.12.221.218:8181/3m1080p/zjws.m3u8$LR•IPV4•17『线路5』 #EXTINF:-1 tvg-id="浙江卫视" tvg-name="浙江卫视" group-title="卫视",浙江卫视 -http://ali-xwl.cztv.com/live/channel01720Plxw.m3u8$LR•IPV4•17『线路6』 +http://173.208.212.130:8181/720p/zjws.m3u8$LR•IPV4•17『线路6』 #EXTINF:-1 tvg-id="浙江卫视" tvg-name="浙江卫视" group-title="卫视",浙江卫视 -http://112.27.235.94:8000/hls/29/index.m3u8$LR•IPV4•17『线路7』 +http://ali-xwl.cztv.com/live/channel01720Plxw.m3u8$LR•IPV4•17『线路7』 #EXTINF:-1 tvg-id="浙江卫视" tvg-name="浙江卫视" group-title="卫视",浙江卫视 -http://zwebl02.cztv.com/live/channel01720Pnew.m3u8?auth_key=1784123883-f178167128c55cd66b7eca004ccca015-0-69f388bdaa594feb900510d687566182$LR•IPV4•17『线路8』 +http://112.27.235.94:8000/hls/29/index.m3u8$LR•IPV4•17『线路8』 #EXTINF:-1 tvg-id="浙江卫视" tvg-name="浙江卫视" group-title="卫视",浙江卫视 http://38.75.136.137:98/gslb/dsdqpub/zjwshd.m3u8?auth=testpub$LR•IPV4•17『线路9』 #EXTINF:-1 tvg-id="浙江卫视" tvg-name="浙江卫视" group-title="卫视",浙江卫视 @@ -748,39 +748,41 @@ http://mg.hmysapp.cn:177/ckmg/zb.php?id=jsws$LR•IPV4•15『线路14』 #EXTINF:-1 tvg-id="江苏卫视" tvg-name="江苏卫视" group-title="卫视",江苏卫视 http://39.134.24.166/dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226200/index.m3u8$LR•IPV4•15『线路15』 #EXTINF:-1 tvg-id="安徽卫视" tvg-name="安徽卫视" group-title="卫视",安徽卫视 -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226943/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E0QmKQ_slRCwvVVUUfxPVbw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•10『线路1』 +https://piccpndks.v.kcdnvip.com/audio/anhui_2/index.m3u8$LR•IPV4•11『线路1』 #EXTINF:-1 tvg-id="安徽卫视" tvg-name="安徽卫视" group-title="卫视",安徽卫视 -http://101.66.194.63:9901/tsfile/live/0130_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•10『线路2』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226943/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E0QmKQ_slRCwvVVUUfxPVbw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•11『线路2』 #EXTINF:-1 tvg-id="安徽卫视" tvg-name="安徽卫视" group-title="卫视",安徽卫视 -http://112.27.235.94:8000/hls/26/index.m3u8$LR•IPV4•10『线路3』 +http://101.66.194.63:9901/tsfile/live/0130_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•11『线路3』 #EXTINF:-1 tvg-id="安徽卫视" tvg-name="安徽卫视" group-title="卫视",安徽卫视 -http://23.237.228.134/live8/anhui.m3u8$LR•IPV4•10『线路4』 +http://112.27.235.94:8000/hls/26/index.m3u8$LR•IPV4•11『线路4』 #EXTINF:-1 tvg-id="安徽卫视" tvg-name="安徽卫视" group-title="卫视",安徽卫视 -http://gfr.x3322.net:9901/tsfile/live/1092_1.m3u8$LR•IPV4•10『线路5』 +http://23.237.228.134/live8/anhui.m3u8$LR•IPV4•11『线路5』 #EXTINF:-1 tvg-id="安徽卫视" tvg-name="安徽卫视" group-title="卫视",安徽卫视 -http://api.kkitv.itv888.cn:8080/hls/m8hvytneunk/index.m3u8$LR•IPV4•10『线路6』 +http://gfr.x3322.net:9901/tsfile/live/1092_1.m3u8$LR•IPV4•11『线路6』 #EXTINF:-1 tvg-id="安徽卫视" tvg-name="安徽卫视" group-title="卫视",安徽卫视 -https://iptv.catvod.com/catvod.php?id=ahws$LR•IPV4•10『线路7』 +http://api.kkitv.itv888.cn:8080/hls/m8hvytneunk/index.m3u8$LR•IPV4•11『线路7』 #EXTINF:-1 tvg-id="安徽卫视" tvg-name="安徽卫视" group-title="卫视",安徽卫视 -https://httop.top/ysp-安徽卫视$LR•IPV4•10『线路8』 +https://iptv.catvod.com/catvod.php?id=ahws$LR•IPV4•11『线路8』 #EXTINF:-1 tvg-id="安徽卫视" tvg-name="安徽卫视" group-title="卫视",安徽卫视 -http://iptv.huuc.edu.cn/hls/ahhd.m3u8$LR•IPV4•10『线路9』 +https://httop.top/ysp-安徽卫视$LR•IPV4•11『线路9』 #EXTINF:-1 tvg-id="安徽卫视" tvg-name="安徽卫视" group-title="卫视",安徽卫视 -http://153.0.171.163:9901/tsfile/live/0130_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•10『线路10』 +http://iptv.huuc.edu.cn/hls/ahhd.m3u8$LR•IPV4•11『线路10』 +#EXTINF:-1 tvg-id="安徽卫视" tvg-name="安徽卫视" group-title="卫视",安徽卫视 +http://153.0.171.163:9901/tsfile/live/0130_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•11『线路11』 #EXTINF:-1 tvg-id="重庆卫视" tvg-name="重庆卫视" group-title="卫视",重庆卫视 -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226963/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EjTXsJprEx2nE38tdvu5lhA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•16『线路1』 +http://live2.plus.jinhua.com.cn/dsnc/playlist.m3u8$LR•IPV4•16『线路1』 #EXTINF:-1 tvg-id="重庆卫视" tvg-name="重庆卫视" group-title="卫视",重庆卫视 -http://192.151.150.154/live/cqwshd.m3u8$LR•IPV4•16『线路2』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226963/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EjTXsJprEx2nE38tdvu5lhA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•16『线路2』 #EXTINF:-1 tvg-id="重庆卫视" tvg-name="重庆卫视" group-title="卫视",重庆卫视 -http://107.150.60.122/live/cqwshd.m3u8$LR•IPV4•16『线路3』 +http://192.151.150.154/live/cqwshd.m3u8$LR•IPV4•16『线路3』 #EXTINF:-1 tvg-id="重庆卫视" tvg-name="重庆卫视" group-title="卫视",重庆卫视 -http://112.123.243.37:50085/tsfile/live/0131_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•16『线路4』 +http://107.150.60.122/live/cqwshd.m3u8$LR•IPV4•16『线路4』 #EXTINF:-1 tvg-id="重庆卫视" tvg-name="重庆卫视" group-title="卫视",重庆卫视 -http://120.198.95.220:9901/tsfile/live/1066_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•16『线路5』 +http://112.123.243.37:50085/tsfile/live/0131_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•16『线路5』 #EXTINF:-1 tvg-id="重庆卫视" tvg-name="重庆卫视" group-title="卫视",重庆卫视 -http://112.27.235.94:8000/hls/36/index.m3u8$LR•IPV4•16『线路6』 +http://120.198.95.220:9901/tsfile/live/1066_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•16『线路6』 #EXTINF:-1 tvg-id="重庆卫视" tvg-name="重庆卫视" group-title="卫视",重庆卫视 -http://live2.plus.jinhua.com.cn/dsnc/playlist.m3u8$LR•IPV4•16『线路7』 +http://112.27.235.94:8000/hls/36/index.m3u8$LR•IPV4•16『线路7』 #EXTINF:-1 tvg-id="重庆卫视" tvg-name="重庆卫视" group-title="卫视",重庆卫视 http://23.237.228.134/live6/chongqing.m3u8$LR•IPV4•16『线路8』 #EXTINF:-1 tvg-id="重庆卫视" tvg-name="重庆卫视" group-title="卫视",重庆卫视 @@ -866,41 +868,39 @@ http://153.0.171.163:9901/tsfile/live/0137_1.m3u8?key=txiptv&playlive=1&authid=0 #EXTINF:-1 tvg-id="东南卫视" tvg-name="东南卫视" group-title="卫视",东南卫视 http://118.81.195.79:9003/hls/24/index.m3u8$LR•IPV4•18『线路18』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="卫视",深圳卫视 -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226959/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EGrVNEZREjuNVKiTJo2mtwg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•18『线路1』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226959/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EGrVNEZREjuNVKiTJo2mtwg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•17『线路1』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="卫视",深圳卫视 -http://120.198.95.220:9901/tsfile/live/1048_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•18『线路2』 +http://120.198.95.220:9901/tsfile/live/1048_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•17『线路2』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="卫视",深圳卫视 -http://120.198.95.220:9901/tsfile/live/1048_1.m3u8?key=txiptv$LR•IPV4•18『线路3』 +http://120.198.95.220:9901/tsfile/live/1048_1.m3u8?key=txiptv$LR•IPV4•17『线路3』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="卫视",深圳卫视 -http://173.208.212.130:8181/720p/szws.m3u8$LR•IPV4•18『线路4』 +http://173.208.212.130:8181/720p/szws.m3u8$LR•IPV4•17『线路4』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="卫视",深圳卫视 -http://192.151.150.154/live/szwshd.m3u8$LR•IPV4•18『线路5』 +http://192.151.150.154/live/szwshd.m3u8$LR•IPV4•17『线路5』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="卫视",深圳卫视 -http://124.228.160.210:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•18『线路6』 +http://124.228.160.210:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•17『线路6』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="卫视",深圳卫视 -http://36.136.38.87:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•18『线路7』 +http://36.136.38.87:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•17『线路7』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="卫视",深圳卫视 -http://112.27.235.94:8000/hls/33/index.m3u8$LR•IPV4•18『线路8』 +http://112.27.235.94:8000/hls/33/index.m3u8$LR•IPV4•17『线路8』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="卫视",深圳卫视 -https://sztv-hls.sztv.com.cn/1SIQj6s/500/q7rdSsQ.m3u8?sign=71764b3a0bcc96b03dea9693d605e020&t=6a579f21$LR•IPV4•18『线路9』 +http://38.75.136.137:98/gslb/dsdqpub/szwshd.m3u8?auth=testpub$LR•IPV4•17『线路9』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="卫视",深圳卫视 -http://38.75.136.137:98/gslb/dsdqpub/szwshd.m3u8?auth=testpub$LR•IPV4•18『线路10』 +http://23.237.228.134/live6/shenzhen.m3u8$LR•IPV4•17『线路10』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="卫视",深圳卫视 -http://23.237.228.134/live6/shenzhen.m3u8$LR•IPV4•18『线路11』 +http://gfr.x3322.net:9901/tsfile/live/1095_1.m3u8$LR•IPV4•17『线路11』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="卫视",深圳卫视 -http://gfr.x3322.net:9901/tsfile/live/1095_1.m3u8$LR•IPV4•18『线路12』 +http://api.kkitv.itv888.cn:8080/hls/iftsd32ykm/index.m3u8$LR•IPV4•17『线路12』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="卫视",深圳卫视 -http://api.kkitv.itv888.cn:8080/hls/iftsd32ykm/index.m3u8$LR•IPV4•18『线路13』 +https://iptv.catvod.com/catvod.php?id=szws$LR•IPV4•17『线路13』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="卫视",深圳卫视 -https://iptv.catvod.com/catvod.php?id=szws$LR•IPV4•18『线路14』 +https://httop.top/ysp-深圳卫视$LR•IPV4•17『线路14』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="卫视",深圳卫视 -https://httop.top/ysp-深圳卫视$LR•IPV4•18『线路15』 +http://iptv.huuc.edu.cn/hls/szhd.m3u8$LR•IPV4•17『线路15』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="卫视",深圳卫视 -http://iptv.huuc.edu.cn/hls/szhd.m3u8$LR•IPV4•18『线路16』 +http://153.0.171.163:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•17『线路16』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="卫视",深圳卫视 -http://153.0.171.163:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•18『线路17』 -#EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="卫视",深圳卫视 -http://38.64.72.148:80/hls/modn/list/4007/playlist.m3u8$LR•IPV4•18『线路18』 +http://38.64.72.148:80/hls/modn/list/4007/playlist.m3u8$LR•IPV4•17『线路17』 #EXTINF:-1 tvg-id="广东卫视" tvg-name="广东卫视" group-title="卫视",广东卫视 http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226961/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E2MGyx659D_aaDPP0qt3NgA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•12『线路1』 #EXTINF:-1 tvg-id="广东卫视" tvg-name="广东卫视" group-title="卫视",广东卫视 @@ -1008,47 +1008,45 @@ http://183.207.248.71/gitv/live1/G_GUIZHOU/G_GUIZHOU$LR•IPV4•16『线路15 #EXTINF:-1 tvg-id="贵州卫视" tvg-name="贵州卫视" group-title="卫视",贵州卫视 http://39.134.115.163:8080/PLTV/88888910/224/3221225728/index.m3u8$LR•IPV4•16『线路16』 #EXTINF:-1 tvg-id="河北卫视" tvg-name="河北卫视" group-title="卫视",河北卫视 -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227014/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ErSGjhI3DMaaAASPrbQJYTg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•14『线路1』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227014/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ErSGjhI3DMaaAASPrbQJYTg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•13『线路1』 #EXTINF:-1 tvg-id="河北卫视" tvg-name="河北卫视" group-title="卫视",河北卫视 -http://101.66.194.63:9901/tsfile/live/0117_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•14『线路2』 +http://101.66.194.63:9901/tsfile/live/0117_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•13『线路2』 #EXTINF:-1 tvg-id="河北卫视" tvg-name="河北卫视" group-title="卫视",河北卫视 -http://101.66.199.247:9901/tsfile/live/0117_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•14『线路3』 +http://101.66.199.247:9901/tsfile/live/0117_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•13『线路3』 #EXTINF:-1 tvg-id="河北卫视" tvg-name="河北卫视" group-title="卫视",河北卫视 -http://204.12.221.218:8181/3m1080p/hews.m3u8$LR•IPV4•14『线路4』 +http://204.12.221.218:8181/3m1080p/hews.m3u8$LR•IPV4•13『线路4』 #EXTINF:-1 tvg-id="河北卫视" tvg-name="河北卫视" group-title="卫视",河北卫视 -http://event.pull.hebtv.com/jishi/weishi_tingyun.m3u8$LR•IPV4•14『线路5』 +http://event.pull.hebtv.com/jishi/weishi_tingyun.m3u8$LR•IPV4•13『线路5』 #EXTINF:-1 tvg-id="河北卫视" tvg-name="河北卫视" group-title="卫视",河北卫视 -http://120.76.248.139/live/bfgd/4200000108.m3u8$LR•IPV4•14『线路6』 +http://120.76.248.139/live/bfgd/4200000108.m3u8$LR•IPV4•13『线路6』 #EXTINF:-1 tvg-id="河北卫视" tvg-name="河北卫视" group-title="卫视",河北卫视 -https://tv.pull.hebtv.com/jishi/nongminpindao.m3u8?t=1783932137&k=f5f7fa7a3e39ef329f1b86c4f866958c$LR•IPV4•14『线路7』 +http://23.237.228.134/live8/hebei.m3u8$LR•IPV4•13『线路7』 #EXTINF:-1 tvg-id="河北卫视" tvg-name="河北卫视" group-title="卫视",河北卫视 -http://23.237.228.134/live8/hebei.m3u8$LR•IPV4•14『线路8』 +http://43.251.226.89:8080/play/42.m3u8$LR•IPV4•13『线路8』 #EXTINF:-1 tvg-id="河北卫视" tvg-name="河北卫视" group-title="卫视",河北卫视 -http://43.251.226.89:8080/play/42.m3u8$LR•IPV4•14『线路9』 +http://gfr.x3322.net:9901/tsfile/live/1091_1.m3u8$LR•IPV4•13『线路9』 #EXTINF:-1 tvg-id="河北卫视" tvg-name="河北卫视" group-title="卫视",河北卫视 -http://gfr.x3322.net:9901/tsfile/live/1091_1.m3u8$LR•IPV4•14『线路10』 +https://iptv.catvod.com/catvod.php?id=hbws$LR•IPV4•13『线路10』 #EXTINF:-1 tvg-id="河北卫视" tvg-name="河北卫视" group-title="卫视",河北卫视 -https://iptv.catvod.com/catvod.php?id=hbws$LR•IPV4•14『线路11』 +https://httop.top/ysp-河北卫视$LR•IPV4•13『线路11』 #EXTINF:-1 tvg-id="河北卫视" tvg-name="河北卫视" group-title="卫视",河北卫视 -https://httop.top/ysp-河北卫视$LR•IPV4•14『线路12』 +http://iptv.huuc.edu.cn/hls/hebhd.m3u8$LR•IPV4•13『线路12』 #EXTINF:-1 tvg-id="河北卫视" tvg-name="河北卫视" group-title="卫视",河北卫视 -http://iptv.huuc.edu.cn/hls/hebhd.m3u8$LR•IPV4•14『线路13』 -#EXTINF:-1 tvg-id="河北卫视" tvg-name="河北卫视" group-title="卫视",河北卫视 -http://153.0.171.163:9901/tsfile/live/0117_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•14『线路14』 +http://153.0.171.163:9901/tsfile/live/0117_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•13『线路13』 #EXTINF:-1 tvg-id="河南卫视" tvg-name="河南卫视" group-title="卫视",河南卫视 -http://101.66.195.138:9901/tsfile/live/0139_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•12『线路1』 +http://tvcdn.stream3.hndt.com/tv/65bd329b017e1000648cd2ed00000000_transios/playlist.m3u8?wsSecret=ca9a9194ec9a95ed2539e69d07b645d5&wsTime=1784134111$LR•IPV4•12『线路1』 #EXTINF:-1 tvg-id="河南卫视" tvg-name="河南卫视" group-title="卫视",河南卫视 -http://38.75.136.137:98/gslb/dsdqpub/hawshd.m3u8?auth=testpub$LR•IPV4•12『线路2』 +http://101.66.195.138:9901/tsfile/live/0139_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•12『线路2』 #EXTINF:-1 tvg-id="河南卫视" tvg-name="河南卫视" group-title="卫视",河南卫视 -http://63.141.230.178:82/gslb/zbdq5.m3u8?id=hawshd$LR•IPV4•12『线路3』 +http://38.75.136.137:98/gslb/dsdqpub/hawshd.m3u8?auth=testpub$LR•IPV4•12『线路3』 #EXTINF:-1 tvg-id="河南卫视" tvg-name="河南卫视" group-title="卫视",河南卫视 -http://221.226.51.220:50081/newlive/live/hls/37/live.m3u8$LR•IPV4•12『线路4』 +http://63.141.230.178:82/gslb/zbdq5.m3u8?id=hawshd$LR•IPV4•12『线路4』 #EXTINF:-1 tvg-id="河南卫视" tvg-name="河南卫视" group-title="卫视",河南卫视 -http://153.0.171.163:9901/tsfile/live/0139_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•12『线路5』 +http://221.226.51.220:50081/newlive/live/hls/37/live.m3u8$LR•IPV4•12『线路5』 #EXTINF:-1 tvg-id="河南卫视" tvg-name="河南卫视" group-title="卫视",河南卫视 -http://112.27.235.94:8000/hls/37/index.m3u8$LR•IPV4•12『线路6』 +http://153.0.171.163:9901/tsfile/live/0139_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•12『线路6』 #EXTINF:-1 tvg-id="河南卫视" tvg-name="河南卫视" group-title="卫视",河南卫视 -http://tvcdn.stream3.hndt.com/tv/65bd329b017e1000648cd2ed00000000_transios/playlist.m3u8?wsSecret=ca9a9194ec9a95ed2539e69d07b645d5&wsTime=1784134111$LR•IPV4•12『线路7』 +http://112.27.235.94:8000/hls/37/index.m3u8$LR•IPV4•12『线路7』 #EXTINF:-1 tvg-id="河南卫视" tvg-name="河南卫视" group-title="卫视",河南卫视 http://23.237.228.134/live6/henan.m3u8$LR•IPV4•12『线路8』 #EXTINF:-1 tvg-id="河南卫视" tvg-name="河南卫视" group-title="卫视",河南卫视 @@ -1112,35 +1110,37 @@ http://www.745612.xyz:7788/rtp/235.254.198.72:1564$LR•IPV4•14『线路13』 #EXTINF:-1 tvg-id="湖北卫视" tvg-name="湖北卫视" group-title="卫视",湖北卫视 http://118.81.195.79:9003/hls/32/index.m3u8$LR•IPV4•14『线路14』 #EXTINF:-1 tvg-id="江西卫视" tvg-name="江西卫视" group-title="卫视",江西卫视 -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226956/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Ei6ZIpVizXlewg-YfGvH8dA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•15『线路1』 +https://jsp-tv-live.jxtvcn.com.cn/live-jsp/tv_jxtv6.m3u8?t=1784004704&token=67a59c29-de6e-4407-90c8-39f7e099b3db&d=0a7a8c487c454bc7bb02a60298283c5e$LR•IPV4•16『线路1』 #EXTINF:-1 tvg-id="江西卫视" tvg-name="江西卫视" group-title="卫视",江西卫视 -http://101.66.199.247:9901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•15『线路2』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226956/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Ei6ZIpVizXlewg-YfGvH8dA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•16『线路2』 #EXTINF:-1 tvg-id="江西卫视" tvg-name="江西卫视" group-title="卫视",江西卫视 -http://112.123.243.37:50085/tsfile/live/0132_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•15『线路3』 +http://101.66.199.247:9901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•16『线路3』 #EXTINF:-1 tvg-id="江西卫视" tvg-name="江西卫视" group-title="卫视",江西卫视 -http://124.228.160.210:9901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•15『线路4』 +http://112.123.243.37:50085/tsfile/live/0132_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•16『线路4』 #EXTINF:-1 tvg-id="江西卫视" tvg-name="江西卫视" group-title="卫视",江西卫视 -http://153.0.171.163:9901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•15『线路5』 +http://124.228.160.210:9901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•16『线路5』 #EXTINF:-1 tvg-id="江西卫视" tvg-name="江西卫视" group-title="卫视",江西卫视 -http://112.27.235.94:8000/hls/44/index.m3u8$LR•IPV4•15『线路6』 +http://153.0.171.163:9901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•16『线路6』 #EXTINF:-1 tvg-id="江西卫视" tvg-name="江西卫视" group-title="卫视",江西卫视 -http://38.75.136.137:98/gslb/dsdqpub/jxwshd.m3u8?auth=testpub$LR•IPV4•15『线路7』 +http://112.27.235.94:8000/hls/44/index.m3u8$LR•IPV4•16『线路7』 #EXTINF:-1 tvg-id="江西卫视" tvg-name="江西卫视" group-title="卫视",江西卫视 -http://23.237.228.134/live8/jiangxi.m3u8$LR•IPV4•15『线路8』 +http://38.75.136.137:98/gslb/dsdqpub/jxwshd.m3u8?auth=testpub$LR•IPV4•16『线路8』 #EXTINF:-1 tvg-id="江西卫视" tvg-name="江西卫视" group-title="卫视",江西卫视 -http://43.251.226.89:8080/play/43.m3u8$LR•IPV4•15『线路9』 +http://23.237.228.134/live8/jiangxi.m3u8$LR•IPV4•16『线路9』 #EXTINF:-1 tvg-id="江西卫视" tvg-name="江西卫视" group-title="卫视",江西卫视 -http://api.kkitv.itv888.cn:8080/hls/pv0np60bpin/index.m3u8$LR•IPV4•15『线路10』 +http://43.251.226.89:8080/play/43.m3u8$LR•IPV4•16『线路10』 #EXTINF:-1 tvg-id="江西卫视" tvg-name="江西卫视" group-title="卫视",江西卫视 -https://iptv.catvod.com/catvod.php?id=jxws$LR•IPV4•15『线路11』 +http://api.kkitv.itv888.cn:8080/hls/pv0np60bpin/index.m3u8$LR•IPV4•16『线路11』 #EXTINF:-1 tvg-id="江西卫视" tvg-name="江西卫视" group-title="卫视",江西卫视 -https://httop.top/ysp-江西卫视$LR•IPV4•15『线路12』 +https://iptv.catvod.com/catvod.php?id=jxws$LR•IPV4•16『线路12』 #EXTINF:-1 tvg-id="江西卫视" tvg-name="江西卫视" group-title="卫视",江西卫视 -http://iptv.huuc.edu.cn/hls/jxhd.m3u8$LR•IPV4•15『线路13』 +https://httop.top/ysp-江西卫视$LR•IPV4•16『线路13』 #EXTINF:-1 tvg-id="江西卫视" tvg-name="江西卫视" group-title="卫视",江西卫视 -http://mg.hmysapp.cn:177/ckmg/zb.php?id=jxws$LR•IPV4•15『线路14』 +http://iptv.huuc.edu.cn/hls/jxhd.m3u8$LR•IPV4•16『线路14』 #EXTINF:-1 tvg-id="江西卫视" tvg-name="江西卫视" group-title="卫视",江西卫视 -http://39.134.115.163:8080/PLTV/88888910/224/3221225705/index.m3u8$LR•IPV4•15『线路15』 +http://mg.hmysapp.cn:177/ckmg/zb.php?id=jxws$LR•IPV4•16『线路15』 +#EXTINF:-1 tvg-id="江西卫视" tvg-name="江西卫视" group-title="卫视",江西卫视 +http://39.134.115.163:8080/PLTV/88888910/224/3221225705/index.m3u8$LR•IPV4•16『线路16』 #EXTINF:-1 tvg-id="吉林卫视" tvg-name="吉林卫视" group-title="卫视",吉林卫视 http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227015/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EW5-3AVdwD5KlUpuA4mz7Cg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•17『线路1』 #EXTINF:-1 tvg-id="吉林卫视" tvg-name="吉林卫视" group-title="卫视",吉林卫视 @@ -1310,25 +1310,25 @@ http://125.210.152.18:9090/live/SDWSHD_H265.m3u8$LR•IPV4•17『线路16』 #EXTINF:-1 tvg-id="山东卫视" tvg-name="山东卫视" group-title="卫视",山东卫视 http://39.134.115.163:8080/PLTV/88888910/224/3221225697/index.m3u8$LR•IPV4•17『线路17』 #EXTINF:-1 tvg-id="天津卫视" tvg-name="天津卫视" group-title="卫视",天津卫视 -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226954/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Eaf3wyULP1h575eM_4ByMDg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•18『线路1』 +https://piccpndks.v.kcdnvip.com/audio/tianjin_2/index.m3u8$LR•IPV4•18『线路1』 #EXTINF:-1 tvg-id="天津卫视" tvg-name="天津卫视" group-title="卫视",天津卫视 -http://204.12.221.218:8181/3m1080p/tjws.m3u8$LR•IPV4•18『线路2』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226954/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Eaf3wyULP1h575eM_4ByMDg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•18『线路2』 #EXTINF:-1 tvg-id="天津卫视" tvg-name="天津卫视" group-title="卫视",天津卫视 -http://107.150.60.122/live/tjwshd.m3u8$LR•IPV4•18『线路3』 +http://204.12.221.218:8181/3m1080p/tjws.m3u8$LR•IPV4•18『线路3』 #EXTINF:-1 tvg-id="天津卫视" tvg-name="天津卫视" group-title="卫视",天津卫视 -http://192.151.150.154/live/tjwshd.m3u8$LR•IPV4•18『线路4』 +http://107.150.60.122/live/tjwshd.m3u8$LR•IPV4•18『线路4』 #EXTINF:-1 tvg-id="天津卫视" tvg-name="天津卫视" group-title="卫视",天津卫视 -http://38.75.136.137:98/gslb/dsdqpub/tjwshd.m3u8?auth=testpub$LR•IPV4•18『线路5』 +http://192.151.150.154/live/tjwshd.m3u8$LR•IPV4•18『线路5』 #EXTINF:-1 tvg-id="天津卫视" tvg-name="天津卫视" group-title="卫视",天津卫视 -http://63.141.230.178:82/gslb/zbdq5.m3u8?id=tjwshd$LR•IPV4•18『线路6』 +http://38.75.136.137:98/gslb/dsdqpub/tjwshd.m3u8?auth=testpub$LR•IPV4•18『线路6』 #EXTINF:-1 tvg-id="天津卫视" tvg-name="天津卫视" group-title="卫视",天津卫视 -http://207.56.13.146:81/cdnlive/tjws.m3u8$LR•IPV4•18『线路7』 +http://63.141.230.178:82/gslb/zbdq5.m3u8?id=tjwshd$LR•IPV4•18『线路7』 #EXTINF:-1 tvg-id="天津卫视" tvg-name="天津卫视" group-title="卫视",天津卫视 -http://120.198.95.220:9901/tsfile/live/1067_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•18『线路8』 +http://207.56.13.146:81/cdnlive/tjws.m3u8$LR•IPV4•18『线路8』 #EXTINF:-1 tvg-id="天津卫视" tvg-name="天津卫视" group-title="卫视",天津卫视 -http://112.27.235.94:8000/hls/42/index.m3u8$LR•IPV4•18『线路9』 +http://120.198.95.220:9901/tsfile/live/1067_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•18『线路9』 #EXTINF:-1 tvg-id="天津卫视" tvg-name="天津卫视" group-title="卫视",天津卫视 -https://piccpndks.v.kcdnvip.com/audio/tianjin_2/index.m3u8$LR•IPV4•18『线路10』 +http://112.27.235.94:8000/hls/42/index.m3u8$LR•IPV4•18『线路10』 #EXTINF:-1 tvg-id="天津卫视" tvg-name="天津卫视" group-title="卫视",天津卫视 http://23.237.228.134/live8/tianjing.m3u8$LR•IPV4•18『线路11』 #EXTINF:-1 tvg-id="天津卫视" tvg-name="天津卫视" group-title="卫视",天津卫视 @@ -1346,11 +1346,11 @@ http://153.0.171.163:9901/tsfile/live/0135_1.m3u8?key=txiptv&playlive=1&authid=0 #EXTINF:-1 tvg-id="天津卫视" tvg-name="天津卫视" group-title="卫视",天津卫视 http://39.134.115.163:8080/PLTV/88888910/224/3221225698/index.m3u8$LR•IPV4•18『线路18』 #EXTINF:-1 tvg-id="海南卫视" tvg-name="海南卫视" group-title="卫视",海南卫视 -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227029/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EEuBMjt2kLMD8fAO7QYER7Q%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•8『线路1』 +https://livelyws.chinamcache.com/lyws/zb03.m3u8$LR•IPV4•8『线路1』 #EXTINF:-1 tvg-id="海南卫视" tvg-name="海南卫视" group-title="卫视",海南卫视 -http://120.76.248.139/live/bfgd/4200000473.m3u8$LR•IPV4•8『线路2』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227029/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EEuBMjt2kLMD8fAO7QYER7Q%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•8『线路2』 #EXTINF:-1 tvg-id="海南卫视" tvg-name="海南卫视" group-title="卫视",海南卫视 -https://livelyws.chinamcache.com/lyws/zb03.m3u8$LR•IPV4•8『线路3』 +http://120.76.248.139/live/bfgd/4200000473.m3u8$LR•IPV4•8『线路3』 #EXTINF:-1 tvg-id="海南卫视" tvg-name="海南卫视" group-title="卫视",海南卫视 http://43.251.226.89:8080/play/50.m3u8$LR•IPV4•8『线路4』 #EXTINF:-1 tvg-id="海南卫视" tvg-name="海南卫视" group-title="卫视",海南卫视 @@ -1480,13 +1480,13 @@ http://120.76.248.139/live/bfgd/4200000122.m3u8$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="农林卫视" tvg-name="农林卫视" group-title="卫视",农林卫视 http://43.251.226.89:8080/play/52.m3u8$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="三沙卫视" tvg-name="三沙卫视" group-title="卫视",三沙卫视 -http://107.150.60.122/live/ssws.m3u8$LR•IPV4•6『线路1』 +https://srs.ssws.tv/video/sstv-10/index.m3u8$LR•IPV4•6『线路1』 #EXTINF:-1 tvg-id="三沙卫视" tvg-name="三沙卫视" group-title="卫视",三沙卫视 -http://38.75.136.137:98/gslb/dsdqpub/ssws.m3u8?auth=testpub$LR•IPV4•6『线路2』 +http://107.150.60.122/live/ssws.m3u8$LR•IPV4•6『线路2』 #EXTINF:-1 tvg-id="三沙卫视" tvg-name="三沙卫视" group-title="卫视",三沙卫视 -http://221.226.51.220:50081/newlive/live/hls/38/live.m3u8$LR•IPV4•6『线路3』 +http://38.75.136.137:98/gslb/dsdqpub/ssws.m3u8?auth=testpub$LR•IPV4•6『线路3』 #EXTINF:-1 tvg-id="三沙卫视" tvg-name="三沙卫视" group-title="卫视",三沙卫视 -https://srs.ssws.tv/video/sstv-10/index.m3u8$LR•IPV4•6『线路4』 +http://221.226.51.220:50081/newlive/live/hls/38/live.m3u8$LR•IPV4•6『线路4』 #EXTINF:-1 tvg-id="三沙卫视" tvg-name="三沙卫视" group-title="卫视",三沙卫视 http://43.251.226.89:8080/play/56.m3u8$LR•IPV4•6『线路5』 #EXTINF:-1 tvg-id="三沙卫视" tvg-name="三沙卫视" group-title="卫视",三沙卫视 @@ -1552,27 +1552,27 @@ https://httop.top/ysp-山西卫视$LR•IPV4•15『线路14』 #EXTINF:-1 tvg-id="山西卫视" tvg-name="山西卫视" group-title="卫视",山西卫视 http://118.81.195.79:9003/hls/19/index.m3u8$LR•IPV4•15『线路15』 #EXTINF:-1 tvg-id="陕西卫视" tvg-name="陕西卫视" group-title="卫视",陕西卫视 -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226999/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EsGLKaSqf0wDZMbAjeQtfyw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•20『线路1』 +http://stream.snrtv.com/sxbc-star-BLMOU4.m3u8$LR•IPV4•20『线路1』 #EXTINF:-1 tvg-id="陕西卫视" tvg-name="陕西卫视" group-title="卫视",陕西卫视 -http://107.150.60.122/live/snwshd.m3u8$LR•IPV4•20『线路2』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226999/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EsGLKaSqf0wDZMbAjeQtfyw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•20『线路2』 #EXTINF:-1 tvg-id="陕西卫视" tvg-name="陕西卫视" group-title="卫视",陕西卫视 -http://63.141.230.178:82/gslb/zbdq5.m3u8?id=snwshd$LR•IPV4•20『线路3』 +http://107.150.60.122/live/snwshd.m3u8$LR•IPV4•20『线路3』 #EXTINF:-1 tvg-id="陕西卫视" tvg-name="陕西卫视" group-title="卫视",陕西卫视 -http://112.123.243.37:50085/tsfile/live/0109_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•20『线路4』 +http://63.141.230.178:82/gslb/zbdq5.m3u8?id=snwshd$LR•IPV4•20『线路4』 #EXTINF:-1 tvg-id="陕西卫视" tvg-name="陕西卫视" group-title="卫视",陕西卫视 -http://101.66.194.82:9901/tsfile/live/0136_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•20『线路5』 +http://112.123.243.37:50085/tsfile/live/0109_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•20『线路5』 #EXTINF:-1 tvg-id="陕西卫视" tvg-name="陕西卫视" group-title="卫视",陕西卫视 -http://120.198.95.220:9901/tsfile/live/1068_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•20『线路6』 +http://101.66.194.82:9901/tsfile/live/0136_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•20『线路6』 #EXTINF:-1 tvg-id="陕西卫视" tvg-name="陕西卫视" group-title="卫视",陕西卫视 -http://101.66.194.63:9901/tsfile/live/0136_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•20『线路7』 +http://120.198.95.220:9901/tsfile/live/1068_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•20『线路7』 #EXTINF:-1 tvg-id="陕西卫视" tvg-name="陕西卫视" group-title="卫视",陕西卫视 -http://36.136.38.87:9901/tsfile/live/0136_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•20『线路8』 +http://101.66.194.63:9901/tsfile/live/0136_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•20『线路8』 #EXTINF:-1 tvg-id="陕西卫视" tvg-name="陕西卫视" group-title="卫视",陕西卫视 -http://153.0.171.163:9901/tsfile/live/0136_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•20『线路9』 +http://36.136.38.87:9901/tsfile/live/0136_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•20『线路9』 #EXTINF:-1 tvg-id="陕西卫视" tvg-name="陕西卫视" group-title="卫视",陕西卫视 -http://112.27.235.94:8000/hls/43/index.m3u8$LR•IPV4•20『线路10』 +http://153.0.171.163:9901/tsfile/live/0136_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•20『线路10』 #EXTINF:-1 tvg-id="陕西卫视" tvg-name="陕西卫视" group-title="卫视",陕西卫视 -http://stream.snrtv.com/sxbc-star-BLMOU4.m3u8$LR•IPV4•20『线路11』 +http://112.27.235.94:8000/hls/43/index.m3u8$LR•IPV4•20『线路11』 #EXTINF:-1 tvg-id="陕西卫视" tvg-name="陕西卫视" group-title="卫视",陕西卫视 http://38.75.136.137:98/gslb/dsdqpub/sxwshd.m3u8?auth=testpub$LR•IPV4•20『线路12』 #EXTINF:-1 tvg-id="陕西卫视" tvg-name="陕西卫视" group-title="卫视",陕西卫视 @@ -1870,9 +1870,9 @@ http://feiyang.ak47s.top:35455/itv/1000000001000009601.m3u8?cdn=ystenlive$LR•I #EXTINF:-1 tvg-id="NewTV超级体育" tvg-name="NewTV超级体育" group-title="数字",NewTV超级体育 http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=3188&tk=23a9aca1f79f$LR•IPV4•5『线路5』 #EXTINF:-1 tvg-id="NewTV动作电影" tvg-name="NewTV动作电影" group-title="数字",NewTV动作电影 -http://39.134.19.68/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226465/index.m3u8$LR•IPV4•2『线路1』 +http://live.metshop.top/huya/11602077?cdn=alicdn$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="NewTV动作电影" tvg-name="NewTV动作电影" group-title="数字",NewTV动作电影 -http://live.metshop.top/huya/11602077?cdn=alicdn$LR•IPV4•2『线路2』 +http://39.134.19.68/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226465/index.m3u8$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="NewTV精品体育" tvg-name="NewTV精品体育" group-title="数字",NewTV精品体育 https://epg.pw/stream/f7556eccd4ae06b0c2991fdc7a4f8388496559f728cc82459a8e50346040e226.m3u8$LR•IPV4•6『线路1』 #EXTINF:-1 tvg-id="NewTV精品体育" tvg-name="NewTV精品体育" group-title="数字",NewTV精品体育 @@ -1896,9 +1896,9 @@ http://223.110.245.139/PLTV/4/224/3221227009/index.m3u8$LR•IPV4•2『线路1 #EXTINF:-1 tvg-id="嘉佳卡通" tvg-name="嘉佳卡通" group-title="数字",嘉佳卡通 http://112.25.48.68/live/program/live/jjkt/1300000/mnf.m3u8$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="金鹰卡通" tvg-name="金鹰卡通" group-title="数字",金鹰卡通 -http://183.11.239.36:808/hls/69/index.m3u8$LR•IPV4•7『线路1』 +http://phoneal.qing.mgtv.com/nn_live/nn_x64/Y2hzPSZkZWY9MSZ1aXA9MTA2LjE0LjM4LjU1JnRlcm09NSZtYWNpZD02ODZlOGNmOGM4OGU3N2VjOWEwNzkzMjg5ZjUzNDg0MmFiZWM0ZjNjJnFpZD0mcmF1dGhfZW5hYmxlPW9mZiZjZG5leF9pZD1hbF9waG9uZTMmZXM9MTc4Mzk3OTAxNiZ1dWlkPTU2NjdhZjJmOGNjNjM4MjMwZjFlYzVmY2RiMWIxNThmLTZhMGUyNjM3JnM9ZDg2NTFkYzBlZjdjOTcxMjUyMjMxMTYyOGQ5ODM4YjgmdWlkPSZuZHY9aW9zLTYuNS4wJnY9MiZhcz0wJl9jYXJDb2RlPTA,/JYKTMPP360.m3u8$LR•IPV4•7『线路1』 #EXTINF:-1 tvg-id="金鹰卡通" tvg-name="金鹰卡通" group-title="数字",金鹰卡通 -http://phoneal.qing.mgtv.com/nn_live/nn_x64/Y2hzPSZkZWY9MSZ1aXA9MTA2LjE0LjM4LjU1JnRlcm09NSZtYWNpZD02ODZlOGNmOGM4OGU3N2VjOWEwNzkzMjg5ZjUzNDg0MmFiZWM0ZjNjJnFpZD0mcmF1dGhfZW5hYmxlPW9mZiZjZG5leF9pZD1hbF9waG9uZTMmZXM9MTc4Mzk3OTAxNiZ1dWlkPTU2NjdhZjJmOGNjNjM4MjMwZjFlYzVmY2RiMWIxNThmLTZhMGUyNjM3JnM9ZDg2NTFkYzBlZjdjOTcxMjUyMjMxMTYyOGQ5ODM4YjgmdWlkPSZuZHY9aW9zLTYuNS4wJnY9MiZhcz0wJl9jYXJDb2RlPTA,/JYKTMPP360.m3u8$LR•IPV4•7『线路2』 +http://183.11.239.36:808/hls/69/index.m3u8$LR•IPV4•7『线路2』 #EXTINF:-1 tvg-id="金鹰卡通" tvg-name="金鹰卡通" group-title="数字",金鹰卡通 http://101.66.194.82:9901/tsfile/live/1000_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•7『线路3』 #EXTINF:-1 tvg-id="金鹰卡通" tvg-name="金鹰卡通" group-title="数字",金鹰卡通 @@ -2206,31 +2206,31 @@ https://31182.hlsplay.aodianyun.com/lms_31182/tv_channel_175.m3u8$LR•IPV4 #EXTINF:-1 tvg-id="南宁影视娱乐" tvg-name="南宁影视娱乐" group-title="广西",南宁影视娱乐 http://hls.nntv.cn/nnlive/YSYL_244.m3u8$LR•IPV4 #EXTINF:-1 tvg-id="邢台综合" tvg-name="邢台综合" group-title="河北",邢台综合 -http://222.223.119.21:8888/newlive/live/hls/54/live.m3u8$LR•IPV4•2『线路1』 +https://jwplay.hebyun.com.cn:443/live/xtsrmtzs/1500k/tzwj_video.m3u8$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="邢台综合" tvg-name="邢台综合" group-title="河北",邢台综合 -https://jwplay.hebyun.com.cn:443/live/xtsrmtzs/1500k/tzwj_video.m3u8$LR•IPV4•2『线路2』 +http://222.223.119.21:8888/newlive/live/hls/54/live.m3u8$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="河北都市" tvg-name="河北都市" group-title="河北",河北都市 -http://121.19.134.246:808/hls/21/index.m3u8$LR•IPV4•2『线路1』 +https://radio.pull.hebtv.com/live/hebnczx.m3u8$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="河北都市" tvg-name="河北都市" group-title="河北",河北都市 -https://radio.pull.hebtv.com/live/hebnczx.m3u8$LR•IPV4•2『线路2』 +http://121.19.134.246:808/hls/21/index.m3u8$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="河北农民" tvg-name="河北农民" group-title="河北",河北农民 -http://121.19.134.246:808/hls/25/index.m3u8$LR•IPV4•2『线路1』 +https://ls.qingting.fm/live/1650/64k.m3u8$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="河北农民" tvg-name="河北农民" group-title="河北",河北农民 -https://ls.qingting.fm/live/1650/64k.m3u8$LR•IPV4•2『线路2』 +http://121.19.134.246:808/hls/25/index.m3u8$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="鹿泉一套" tvg-name="鹿泉一套" group-title="河北",鹿泉一套 http://hblq.chinashadt.com:2036/live/stream:luquan1.stream/playlist.m3u8$LR•IPV4 #EXTINF:-1 tvg-id="河北经济" tvg-name="河北经济" group-title="河北",河北经济 -http://121.19.134.246:808/hls/20/index.m3u8$LR•IPV4•2『线路1』 +http://1.94.31.214/php/hebei.php?id=jjsh$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="河北经济" tvg-name="河北经济" group-title="河北",河北经济 -http://1.94.31.214/php/hebei.php?id=jjsh$LR•IPV4•2『线路2』 +http://121.19.134.246:808/hls/20/index.m3u8$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="河北影视" tvg-name="河北影视" group-title="河北",河北影视 -http://121.19.134.246:808/hls/22/index.m3u8$LR•IPV4•2『线路1』 +http://1.94.31.214/php/hebei.php?id=hbys$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="河北影视" tvg-name="河北影视" group-title="河北",河北影视 -http://1.94.31.214/php/hebei.php?id=hbys$LR•IPV4•2『线路2』 +http://121.19.134.246:808/hls/22/index.m3u8$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="河北公共" tvg-name="河北公共" group-title="河北",河北公共 -http://121.19.134.246:808/hls/24/index.m3u8$LR•IPV4•2『线路1』 +http://1.94.31.214/php/hebei.php?id=hbgg$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="河北公共" tvg-name="河北公共" group-title="河北",河北公共 -http://1.94.31.214/php/hebei.php?id=hbgg$LR•IPV4•2『线路2』 +http://121.19.134.246:808/hls/24/index.m3u8$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="鹿泉二套" tvg-name="鹿泉二套" group-title="河北",鹿泉二套 http://hblq.chinashadt.com:2036/live/stream:luquan2.stream/playlist.m3u8$LR•IPV4 #EXTINF:-1 tvg-id="内蒙新闻" tvg-name="内蒙新闻" group-title="内蒙古",内蒙新闻 @@ -2272,13 +2272,13 @@ http://183.207.248.71/gitv/live1/G_NJSB/G_NJSB$LR•IPV4 #EXTINF:-1 tvg-id="江苏体育" tvg-name="江苏体育" group-title="江苏",江苏体育 http://183.207.248.71/gitv/live1/G_JSTY/G_JSTY$LR•IPV4 #EXTINF:-1 tvg-id="南京教科" tvg-name="南京教科" group-title="江苏",南京教科 -https://live.nbs.cn/channels/njtv/jkpd/m3u8:500k/live.m3u8$LR•IPV4•4『线路1』 +http://nklive.nbs.cn/hls/75b3c462-b831-4de7-a34b-5d3221db2069/index.m3u8$LR•IPV4•4『线路1』 #EXTINF:-1 tvg-id="南京教科" tvg-name="南京教科" group-title="江苏",南京教科 -http://183.207.248.71/gitv/live1/G_NJJK/G_NJJK$LR•IPV4•4『线路2』 +https://live.nbs.cn/channels/njtv/jkpd/m3u8:500k/live.m3u8$LR•IPV4•4『线路2』 #EXTINF:-1 tvg-id="南京教科" tvg-name="南京教科" group-title="江苏",南京教科 -http://223.110.245.155/ott.js.chinamobile.com/PLTV/3/224/3221227194/index.m3u8$LR•IPV4•4『线路3』 +http://183.207.248.71/gitv/live1/G_NJJK/G_NJJK$LR•IPV4•4『线路3』 #EXTINF:-1 tvg-id="南京教科" tvg-name="南京教科" group-title="江苏",南京教科 -http://nklive.nbs.cn/hls/75b3c462-b831-4de7-a34b-5d3221db2069/index.m3u8$LR•IPV4•4『线路4』 +http://223.110.245.155/ott.js.chinamobile.com/PLTV/3/224/3221227194/index.m3u8$LR•IPV4•4『线路4』 #EXTINF:-1 tvg-id="南京少儿" tvg-name="南京少儿" group-title="江苏",南京少儿 https://live.nbs.cn/channels/njtv/sepd/m3u8:500k/live.m3u8$LR•IPV4 #EXTINF:-1 tvg-id="苏州4k" tvg-name="苏州4k" group-title="江苏",苏州4k @@ -4260,223 +4260,223 @@ https://hk.188766.xyz/?migutoken=34467290b64f0850801479159893a4de&id=gd_gdzj&typ #EXTINF:-1 tvg-id="广东珠江" tvg-name="广东珠江" group-title="广东",广东珠江 https://stream1.freetv.fun/yan-dong-zhu-jiang-24.ctv$LR•IPV4•127『线路127』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://bxtv.3a.ink/api.php?id=gdty$LR•IPV4•109『线路1』 +https://t.freetv.fun/live/yan-dong-ti-yu-2.flv$LR•IPV4•109『线路1』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://php.jdshipin.com/TVOD/iptv.php?id=gdty$LR•IPV4•109『线路2』 +https://stream1.freetv.fun/yan-dong-ti-yu-11.ctv$LR•IPV4•109『线路2』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-2.flv$LR•IPV4•109『线路3』 +https://hls-gateway.vpstv.net/streams/476954.m3u8$LR•IPV4•109『线路3』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-11.ctv$LR•IPV4•109『线路4』 +https://stream1.freetv.fun/yan-dong-ti-yu-25.ctv$LR•IPV4•109『线路4』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://hls-gateway.vpstv.net/streams/476954.m3u8$LR•IPV4•109『线路5』 +https://stream1.freetv.fun/yan-dong-ti-yu-36.m3u8$LR•IPV4•109『线路5』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-25.ctv$LR•IPV4•109『线路6』 +https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-6.m3u8$LR•IPV4•109『线路6』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-36.m3u8$LR•IPV4•109『线路7』 +https://stream1.freetv.fun/yan-dong-ti-yu-35.ctv$LR•IPV4•109『线路7』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-6.m3u8$LR•IPV4•109『线路8』 +https://t.freetv.fun/live/yan-dong-ti-yu-15.m3u8$LR•IPV4•109『线路8』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-35.ctv$LR•IPV4•109『线路9』 +https://stream1.freetv.fun/yan-dong-ti-yu-34.ctv$LR•IPV4•109『线路9』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-15.m3u8$LR•IPV4•109『线路10』 +https://stream1.freetv.fun/yan-dong-ti-yu-24.m3u8$LR•IPV4•109『线路10』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-34.ctv$LR•IPV4•109『线路11』 +http://cdn2.163189.xyz/live/gdty/stream.m3u8$LR•IPV4•109『线路11』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-24.m3u8$LR•IPV4•109『线路12』 +https://stream1.freetv.fun/yan-dong-ti-yu-24.ctv$LR•IPV4•109『线路12』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://cdn2.163189.xyz/live/gdty/stream.m3u8$LR•IPV4•109『线路13』 +https://t.freetv.fun/live/yan-dong-ti-yu-5.m3u8$LR•IPV4•109『线路13』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-24.ctv$LR•IPV4•109『线路14』 +https://stream1.freetv.fun/yan-dong-ti-yu-30.m3u8$LR•IPV4•109『线路14』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-5.m3u8$LR•IPV4•109『线路15』 +http://125.89.163.44:8888/udp/239.77.0.112:5146$LR•IPV4•109『线路15』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-30.m3u8$LR•IPV4•109『线路16』 +https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-19.m3u8$LR•IPV4•109『线路16』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://125.89.163.44:8888/udp/239.77.0.112:5146$LR•IPV4•109『线路17』 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=6559&tk=a0c4f6cfaba3$LR•IPV4•109『线路17』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-19.m3u8$LR•IPV4•109『线路18』 +http://119.32.12.17:2901/udp/224.1.100.34:11111$LR•IPV4•109『线路18』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=6559&tk=a0c4f6cfaba3$LR•IPV4•109『线路19』 +https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-7.m3u8$LR•IPV4•109『线路19』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://119.32.12.17:2901/udp/224.1.100.34:11111$LR•IPV4•109『线路20』 +https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-18.m3u8$LR•IPV4•109『线路20』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-7.m3u8$LR•IPV4•109『线路21』 +https://stream1.freetv.fun/yan-dong-ti-yu-38.ctv$LR•IPV4•109『线路21』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-18.m3u8$LR•IPV4•109『线路22』 +https://stream1.freetv.fun/yan-dong-ti-yu-6.ctv$LR•IPV4•109『线路22』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-38.ctv$LR•IPV4•109『线路23』 +https://stream1.freetv.fun/yan-dong-ti-yu-12.ctv$LR•IPV4•109『线路23』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-6.ctv$LR•IPV4•109『线路24』 +http://api3.52tb.xyz/info?id=413&token=20221127jxwhhemby$LR•IPV4•109『线路24』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-12.ctv$LR•IPV4•109『线路25』 +https://t.freetv.fun/live/yan-dong-ti-yu.m3u8$LR•IPV4•109『线路25』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://api3.52tb.xyz/info?id=413&token=20221127jxwhhemby$LR•IPV4•109『线路26』 +https://stream1.freetv.fun/yan-dong-ti-yu-17.m3u8$LR•IPV4•109『线路26』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu.m3u8$LR•IPV4•109『线路27』 +https://stream1.freetv.fun/yan-dong-ti-yu-5.ctv$LR•IPV4•109『线路27』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-17.m3u8$LR•IPV4•109『线路28』 +https://stream1.freetv.fun/yan-dong-ti-yu-13.m3u8$LR•IPV4•109『线路28』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-5.ctv$LR•IPV4•109『线路29』 +https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing.m3u8$LR•IPV4•109『线路29』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-13.m3u8$LR•IPV4•109『线路30』 +https://stream1.freetv.fun/yan-dong-ti-yu-15.ctv$LR•IPV4•109『线路30』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing.m3u8$LR•IPV4•109『线路31』 +https://stream1.freetv.fun/yan-dong-ti-yu-23.ctv$LR•IPV4•109『线路31』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-15.ctv$LR•IPV4•109『线路32』 +https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-13.m3u8$LR•IPV4•109『线路32』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-23.ctv$LR•IPV4•109『线路33』 +https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-17.m3u8$LR•IPV4•109『线路33』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-13.m3u8$LR•IPV4•109『线路34』 +https://stream1.freetv.fun/yan-dong-ti-yu-14.ctv$LR•IPV4•109『线路34』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-17.m3u8$LR•IPV4•109『线路35』 +http://qjrhc.jydjd.top:2911/udp/224.1.100.33:11111$LR•IPV4•109『线路35』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-14.ctv$LR•IPV4•109『线路36』 +https://stream1.freetv.fun/yan-dong-ti-yu-21.m3u8$LR•IPV4•109『线路36』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://qjrhc.jydjd.top:2911/udp/224.1.100.33:11111$LR•IPV4•109『线路37』 +https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-3.m3u8$LR•IPV4•109『线路37』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-21.m3u8$LR•IPV4•109『线路38』 +http://67.220.71.199:2347/livehttpplay?channel_id=30031$LR•IPV4•109『线路38』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-3.m3u8$LR•IPV4•109『线路39』 +https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-12.m3u8$LR•IPV4•109『线路39』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://67.220.71.199:2347/livehttpplay?channel_id=30031$LR•IPV4•109『线路40』 +http://php.jdshipin.com/TVOD/iptv.php?id=gdty$LR•IPV4•109『线路40』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-12.m3u8$LR•IPV4•109『线路41』 +http://183.3.134.56:9901/tsfile/live/0142_1.m3u8$LR•IPV4•109『线路41』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://183.3.134.56:9901/tsfile/live/0142_1.m3u8$LR•IPV4•109『线路42』 +https://stream1.freetv.fun/yan-dong-ti-yu-8.ctv$LR•IPV4•109『线路42』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-8.ctv$LR•IPV4•109『线路43』 +https://stream1.freetv.fun/yan-dong-ti-yu-3.m3u8$LR•IPV4•109『线路43』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-3.m3u8$LR•IPV4•109『线路44』 +https://stream1.freetv.fun/yan-dong-ti-yu-10.ctv$LR•IPV4•109『线路44』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-10.ctv$LR•IPV4•109『线路45』 +https://stream1.freetv.fun/yan-dong-ti-yu-33.ctv$LR•IPV4•109『线路45』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-33.ctv$LR•IPV4•109『线路46』 +https://stream1.freetv.fun/yan-dong-ti-yu-5.m3u8$LR•IPV4•109『线路46』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-5.m3u8$LR•IPV4•109『线路47』 +https://t.freetv.fun/live/yan-dong-ti-yu-3.php$LR•IPV4•109『线路47』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-3.php$LR•IPV4•109『线路48』 +https://epg.pw/stream/7b470f9fc5c305db0c8622117b7b25ca00eb35ba3e93e865cf0ff9df5c736681.m3u8$LR•IPV4•109『线路48』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://epg.pw/stream/7b470f9fc5c305db0c8622117b7b25ca00eb35ba3e93e865cf0ff9df5c736681.m3u8$LR•IPV4•109『线路49』 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=8718&tk=a0c4f6cfaba3$LR•IPV4•109『线路49』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=8718&tk=a0c4f6cfaba3$LR•IPV4•109『线路50』 +https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-2.m3u8$LR•IPV4•109『线路50』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-2.m3u8$LR•IPV4•109『线路51』 +http://67.220.71.199:2347/livehttpplay?channel_id=12028$LR•IPV4•109『线路51』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://67.220.71.199:2347/livehttpplay?channel_id=12028$LR•IPV4•109『线路52』 +http://120.238.94.10:9901/tsfile/live/1012_1.m3u8$LR•IPV4•109『线路52』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://120.238.94.10:9901/tsfile/live/1012_1.m3u8$LR•IPV4•109『线路53』 +http://120.198.101.106:9901/tsfile/live/1012_1.m3u8?key=txiptv$LR•IPV4•109『线路53』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://120.198.101.106:9901/tsfile/live/1012_1.m3u8?key=txiptv$LR•IPV4•109『线路54』 +https://stream1.freetv.fun/yan-dong-ti-yu-27.m3u8$LR•IPV4•109『线路54』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-27.m3u8$LR•IPV4•109『线路55』 +http://120.77.205.62:8087/rtp/239.77.1.97:5146$LR•IPV4•109『线路55』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://120.77.205.62:8087/rtp/239.77.1.97:5146$LR•IPV4•109『线路56』 +https://stream1.freetv.fun/yan-dong-ti-yu-26.ctv$LR•IPV4•109『线路56』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-26.ctv$LR•IPV4•109『线路57』 +http://63.141.230.178:82/gslb/zbdq5.m3u8?id=gdty$LR•IPV4•109『线路57』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://63.141.230.178:82/gslb/zbdq5.m3u8?id=gdty$LR•IPV4•109『线路58』 +http://218.15.214.115:10000/udp/239.77.0.112:5146$LR•IPV4•109『线路58』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://218.15.214.115:10000/udp/239.77.0.112:5146$LR•IPV4•109『线路59』 +http://222.128.55.152:9080/live/gdty.m3u8$LR•IPV4•109『线路59』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://222.128.55.152:9080/live/gdty.m3u8$LR•IPV4•109『线路60』 +https://stream1.freetv.fun/yan-dong-ti-yu-17.ctv$LR•IPV4•109『线路60』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-17.ctv$LR•IPV4•109『线路61』 +http://183.237.95.108:9901/tsfile/live/1033_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•109『线路61』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://183.237.95.108:9901/tsfile/live/1033_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•109『线路62』 +https://stream1.freetv.fun/yan-dong-ti-yu-18.ctv$LR•IPV4•109『线路62』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-18.ctv$LR•IPV4•109『线路63』 +https://stream1.freetv.fun/yan-dong-ti-yu-7.ctv$LR•IPV4•109『线路63』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-7.ctv$LR•IPV4•109『线路64』 +https://stream1.freetv.fun/yan-dong-ti-yu-4.ctv$LR•IPV4•109『线路64』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-4.ctv$LR•IPV4•109『线路65』 +https://stream1.freetv.fun/yan-dong-ti-yu-gao-qing-2.m3u8$LR•IPV4•109『线路65』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-gao-qing-2.m3u8$LR•IPV4•109『线路66』 +https://stream1.freetv.fun/yan-dong-ti-yu-28.ctv$LR•IPV4•109『线路66』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-28.ctv$LR•IPV4•109『线路67』 +https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-16.m3u8$LR•IPV4•109『线路67』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-16.m3u8$LR•IPV4•109『线路68』 +https://stream1.freetv.fun/yan-dong-ti-yu-4.m3u8$LR•IPV4•109『线路68』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-4.m3u8$LR•IPV4•109『线路69』 +http://183.11.239.36:808/hls/2/index.m3u8$LR•IPV4•109『线路69』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://183.11.239.36:808/hls/2/index.m3u8$LR•IPV4•109『线路70』 +http://r.jdshipin.com/LiYdg$LR•IPV4•109『线路70』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://r.jdshipin.com/LiYdg$LR•IPV4•109『线路71』 +https://stream1.freetv.fun/yan-dong-ti-yu-39.ctv$LR•IPV4•109『线路71』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-39.ctv$LR•IPV4•109『线路72』 +http://bak.dou.ddns-ip.net/api.php?n=cctvxxx&id=t3ucOH&tk=zUr4K92Dl6kh$LR•IPV4•109『线路72』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://bak.dou.ddns-ip.net/api.php?n=cctvxxx&id=t3ucOH&tk=zUr4K92Dl6kh$LR•IPV4•109『线路73』 +https://stream1.freetv.fun/yan-dong-ti-yu-1.m3u8$LR•IPV4•109『线路73』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-1.m3u8$LR•IPV4•109『线路74』 +https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-8.m3u8$LR•IPV4•109『线路74』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-8.m3u8$LR•IPV4•109『线路75』 +http://api2.52tb.xyz/info?id=414&token=20230218qkyjia$LR•IPV4•109『线路75』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://api2.52tb.xyz/info?id=414&token=20230218qkyjia$LR•IPV4•109『线路76』 +http://php.jdshipin.com/PLTV/iptv.php?id=gdty$LR•IPV4•109『线路76』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://php.jdshipin.com/PLTV/iptv.php?id=gdty$LR•IPV4•109『线路77』 +https://stream1.freetv.fun/yan-dong-ti-yu-16.ctv$LR•IPV4•109『线路77』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-16.ctv$LR•IPV4•109『线路78』 +http://38.75.136.137:98/gslb/dsdqpub/gdty.m3u8?auth=testpub$LR•IPV4•109『线路78』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://38.75.136.137:98/gslb/dsdqpub/gdty.m3u8?auth=testpub$LR•IPV4•109『线路79』 +http://119.32.12.32:2901/udp/224.1.100.34:11111$LR•IPV4•109『线路79』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://119.32.12.32:2901/udp/224.1.100.34:11111$LR•IPV4•109『线路80』 +http://218.15.183.23:9901/tsfile/live/23012_1.m3u8$LR•IPV4•109『线路80』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://218.15.183.23:9901/tsfile/live/23012_1.m3u8$LR•IPV4•109『线路81』 +https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-4.m3u8$LR•IPV4•109『线路81』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-4.m3u8$LR•IPV4•109『线路82』 +https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-1.m3u8$LR•IPV4•109『线路82』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-1.m3u8$LR•IPV4•109『线路83』 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=2030&tk=a0c4f6cfaba3$LR•IPV4•109『线路83』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=2030&tk=a0c4f6cfaba3$LR•IPV4•109『线路84』 +http://120.77.205.62:8087/rtp/239.77.0.168:5146$LR•IPV4•109『线路84』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://120.77.205.62:8087/rtp/239.77.0.168:5146$LR•IPV4•109『线路85』 +https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-10.m3u8$LR•IPV4•109『线路85』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-10.m3u8$LR•IPV4•109『线路86』 +https://tv.cdn.com.mp/live/gdty/stream.m3u8$LR•IPV4•109『线路86』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://tv.cdn.com.mp/live/gdty/stream.m3u8$LR•IPV4•109『线路87』 +http://120.77.205.62:8087/rtp/239.77.0.112:5146$LR•IPV4•109『线路87』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://120.77.205.62:8087/rtp/239.77.0.112:5146$LR•IPV4•109『线路88』 +https://stream1.freetv.fun/yan-dong-ti-yu-26.m3u8$LR•IPV4•109『线路88』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-26.m3u8$LR•IPV4•109『线路89』 +https://stream1.freetv.fun/yan-dong-ti-yu-12.m3u8$LR•IPV4•109『线路89』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-12.m3u8$LR•IPV4•109『线路90』 +http://api2.52tb.xyz/info?id=414&token=20230218jsyklh$LR•IPV4•109『线路90』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://api2.52tb.xyz/info?id=414&token=20230218jsyklh$LR•IPV4•109『线路91』 +http://api2.52tb.xyz/info?id=413&token=20230218qkyjia$LR•IPV4•109『线路91』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://api2.52tb.xyz/info?id=413&token=20230218qkyjia$LR•IPV4•109『线路92』 +http://120.238.94.82:9901/tsfile/live/1012_1.m3u8$LR•IPV4•109『线路92』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://120.238.94.82:9901/tsfile/live/1012_1.m3u8$LR•IPV4•109『线路93』 +https://t.freetv.fun/live/yan-dong-ti-yu-10.m3u8$LR•IPV4•109『线路93』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-10.m3u8$LR•IPV4•109『线路94』 +https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-9.m3u8$LR•IPV4•109『线路94』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-9.m3u8$LR•IPV4•109『线路95』 +http://67.220.71.199:2347/livehttpplay?channel_id=20130$LR•IPV4•109『线路95』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://67.220.71.199:2347/livehttpplay?channel_id=20130$LR•IPV4•109『线路96』 +https://stream1.freetv.fun/yan-dong-ti-yu-30.ctv$LR•IPV4•109『线路96』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-30.ctv$LR•IPV4•109『线路97』 +https://stream1.freetv.fun/yan-dong-ti-yu-19.m3u8$LR•IPV4•109『线路97』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-19.m3u8$LR•IPV4•109『线路98』 +https://stream1.freetv.fun/yan-dong-ti-yu-16.m3u8$LR•IPV4•109『线路98』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-16.m3u8$LR•IPV4•109『线路99』 +https://stream1.freetv.fun/yan-dong-ti-yu-20.m3u8$LR•IPV4•109『线路99』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-20.m3u8$LR•IPV4•109『线路100』 +https://t.freetv.fun/live/yan-dong-ti-yu-4.m3u8$LR•IPV4•109『线路100』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-4.m3u8$LR•IPV4•109『线路101』 +https://t.freetv.fun/live/yan-dong-ti-yu-1.m3u8$LR•IPV4•109『线路101』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-1.m3u8$LR•IPV4•109『线路102』 +https://stream1.freetv.fun/yan-dong-ti-yu-39.m3u8$LR•IPV4•109『线路102』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-39.m3u8$LR•IPV4•109『线路103』 +https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-15.m3u8$LR•IPV4•109『线路103』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-15.m3u8$LR•IPV4•109『线路104』 +http://qjrhc.jydjd.top:2911/udp/224.1.100.34:11111$LR•IPV4•109『线路104』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://qjrhc.jydjd.top:2911/udp/224.1.100.34:11111$LR•IPV4•109『线路105』 +http://218.13.170.98:9901/tsfile/live/0019_1.m3u8$LR•IPV4•109『线路105』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://218.13.170.98:9901/tsfile/live/0019_1.m3u8$LR•IPV4•109『线路106』 +http://116.77.239.26:44300/tsfile/live/0124_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•109『线路106』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://116.77.239.26:44300/tsfile/live/0124_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•109『线路107』 +https://stream1.freetv.fun/yan-dong-ti-yu-2.m3u8$LR•IPV4•109『线路107』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-2.m3u8$LR•IPV4•109『线路108』 +http://120.198.95.220:9901/tsfile/live/1010_1.m3u8?key=txiptv$LR•IPV4•109『线路108』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://120.198.95.220:9901/tsfile/live/1010_1.m3u8?key=txiptv$LR•IPV4•109『线路109』 +http://bxtv.3a.ink/api.php?id=gdty$LR•IPV4•109『线路109』 #EXTINF:-1 tvg-id="广东民生" tvg-name="广东民生" group-title="广东",广东民生 http://qjrhc.jydjd.top:2911/udp/224.1.100.152:11111$LR•IPV4•55『线路1』 #EXTINF:-1 tvg-id="广东民生" tvg-name="广东民生" group-title="广东",广东民生 @@ -5896,99 +5896,99 @@ https://stream1.freetv.fun/shang-hai-xin-wen-zong-he-8.m3u8$LR•IPV4•115『 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 https://stream1.freetv.fun/ipv6-xin-wen-zong-he-10.m3u8$LR•IPV4•115『线路70』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -https://stream2.jlntv.cn/baicheng1/sd/live.m3u8$LR•IPV4•115『线路71』 +http://stream8.jlntv.cn/shulan/sd/live.m3u8?_upt=332db6421699196585$LR•IPV4•115『线路71』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://live.cztv.cc:85/live/xwpd.m3u8$LR•IPV4•115『线路72』 +http://stream5.jlntv.cn/hn/sd/live.m3u8$LR•IPV4•115『线路72』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://117.156.28.119/270000001111/1110000001/index.m3u8$LR•IPV4•115『线路73』 +http://pili-live-hls.ybcxjd.com/jdh-live/2108111201035597.m3u8?zsicd$LR•IPV4•115『线路73』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://pili-live-hls.hebitv.com/hebi/hebi.m3u8$LR•IPV4•115『线路74』 +http://live.spccmc.com:90/live/spxwzh.m3u8$LR•IPV4•115『线路74』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -https://stream2.jlntv.cn/naxw/sd/live.m3u8$LR•IPV4•115『线路75』 +http://live.iwcmt.cn:90/live/zhxw.m3u8$LR•IPV4•115『线路75』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://uni6rtmp.tulix.tv:1935/vbstv/vbsabr.smil/chunklist_w439903609_b1228800.m3u8$LR•IPV4•115『线路76』 +http://live.jinchuanrmt.com:90/live/zhxw.m3u8?zsicd$LR•IPV4•115『线路76』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://221.5.213.4:30000/1111.m3u8$LR•IPV4•115『线路77』 +https://play.yunxya.com/channellive/xinwen.m3u8$LR•IPV4•115『线路77』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -https://stream2.jlntv.cn/jilin1/sd/live.m3u8$LR•IPV4•115『线路78』 +http://ls.qingting.fm/live/267.m3u8$LR•IPV4•115『线路78』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://30515.hlsplay.aodianyun.com/lms_30515/tv_channel_239.m3u8$LR•IPV4•115『线路79』 +http://hslive.hsnewsnet.com/lsdream/hve9Wjs/1000/live.m3u8$LR•IPV4•115『线路79』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -https://stream2.jlntv.cn/sptv/sd/live.m3u8$LR•IPV4•115『线路80』 +https://p2.vzan.com/slowlive/596867413819827251/live.m3u8?zbid=1725814272&amp;tpid=1516989100&amp;type=0$LR•IPV4•115『线路80』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://live.ahsz.tv/video/s10001-szzh/index.m3u8$LR•IPV4•115『线路81』 +https://tntgjhjb.live.sxmty.com/live/hls/3a4585ac11ec4e1bb07b419101b370c3/baf63e2b313440c2a25d7859f9b73b05-1.m3u8?zshanxd$LR•IPV4•115『线路81』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://guangshui.live.tempsource.cjyun.org/videotmp/s10146-GSXW.m3u8$LR•IPV4•115『线路82』 +http://uzoiczhh.live.sxmty.com/live/hls/0d41f1480c4042d49927858f01fde707/53130407737b417b9a6259b57246bae3.m3u8?zshanxd$LR•IPV4•115『线路82』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -https://stream2.jlntv.cn/jlyb/sd/live.m3u8$LR•IPV4•115『线路83』 +https://ls.qingting.fm/live/5043/64k.m3u8$LR•IPV4•115『线路83』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -https://stream2.jlntv.cn/sytv/sd/live.m3u8$LR•IPV4•115『线路84』 +http://liveout.btzx.com.cn/62ds9e/4nxdih.m3u8?fbl=$LR•IPV4•115『线路84』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://222.179.155.21:1935/ch1.m3u8$LR•IPV4•115『线路85』 +http://nklive.nbs.cn/hls/d511bc9d-a694-4453-b3a2-4fc842cc97a1/index.m3u8$LR•IPV4•115『线路85』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://117.172.215.250:8083/videos/live/35/39/GQVbrgob5CGJM/GQVbrgob5CGJM.m3u8$LR•IPV4•115『线路86』 +http://ls.qingting.fm/live/23797.m3u8$LR•IPV4•115『线路86』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://220.180.110.101:8083/videos/live/36/57/hwEHU4UVQ1Iv5/hwEHU4UVQ1Iv5.m3u8$LR•IPV4•115『线路87』 +https://play.kankanlive.com/live/1720583434627241.m3u8$LR•IPV4•115『线路87』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://live.hnxttv.com:9601/live/xwzh/800K/tzwj_video.m3u8$LR•IPV4•115『线路88』 +https://ls.qingting.fm/live/5022100/64k.m3u8$LR•IPV4•115『线路88』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://stream.bzcm.net/2/sd/live.m3u8$LR•IPV4•115『线路89』 +https://liveout.xntv.tv/a65jur/96iln2.m3u8?zqinghd$LR•IPV4•115『线路89』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://117.156.28.119/270000001111/1110000145/index.m3u8$LR•IPV4•115『线路90』 +http://live.qthnews.org.cn:1935/live/live1/800k/tzwj_video.m3u8$LR•IPV4•115『线路90』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -https://stream2.jlntv.cn/baishan1/sd/live.m3u8$LR•IPV4•115『线路91』 +http://stream.hrbtv.net/xwzh/sd/live.m3u8?zheild$LR•IPV4•115『线路91』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://live1.wuhubtv.com/channel1/sd/live.m3u8$LR•IPV4•115『线路92』 +https://stream2.jlntv.cn/baicheng1/sd/live.m3u8$LR•IPV4•115『线路92』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://palive.patv123.com:8091/live/xwpd_800K.m3u8$LR•IPV4•115『线路93』 +http://live.cztv.cc:85/live/xwpd.m3u8$LR•IPV4•115『线路93』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -https://stream2.jlntv.cn/liaoyuan1/sd/live.m3u8$LR•IPV4•115『线路94』 +http://117.156.28.119/270000001111/1110000001/index.m3u8$LR•IPV4•115『线路94』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://stream8.jlntv.cn/shulan/sd/live.m3u8?_upt=332db6421699196585$LR•IPV4•115『线路95』 +http://pili-live-hls.hebitv.com/hebi/hebi.m3u8$LR•IPV4•115『线路95』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://stream5.jlntv.cn/hn/sd/live.m3u8$LR•IPV4•115『线路96』 +https://stream2.jlntv.cn/naxw/sd/live.m3u8$LR•IPV4•115『线路96』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://pili-live-hls.ybcxjd.com/jdh-live/2108111201035597.m3u8?zsicd$LR•IPV4•115『线路97』 +http://uni6rtmp.tulix.tv:1935/vbstv/vbsabr.smil/chunklist_w439903609_b1228800.m3u8$LR•IPV4•115『线路97』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://live.spccmc.com:90/live/spxwzh.m3u8$LR•IPV4•115『线路98』 +http://221.5.213.4:30000/1111.m3u8$LR•IPV4•115『线路98』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://live.iwcmt.cn:90/live/zhxw.m3u8$LR•IPV4•115『线路99』 +https://stream2.jlntv.cn/jilin1/sd/live.m3u8$LR•IPV4•115『线路99』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://live.jinchuanrmt.com:90/live/zhxw.m3u8?zsicd$LR•IPV4•115『线路100』 +http://30515.hlsplay.aodianyun.com/lms_30515/tv_channel_239.m3u8$LR•IPV4•115『线路100』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -https://play.yunxya.com/channellive/xinwen.m3u8$LR•IPV4•115『线路101』 +https://stream2.jlntv.cn/sptv/sd/live.m3u8$LR•IPV4•115『线路101』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://ls.qingting.fm/live/267.m3u8$LR•IPV4•115『线路102』 +http://live.ahsz.tv/video/s10001-szzh/index.m3u8$LR•IPV4•115『线路102』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://hslive.hsnewsnet.com/lsdream/hve9Wjs/1000/live.m3u8$LR•IPV4•115『线路103』 +http://guangshui.live.tempsource.cjyun.org/videotmp/s10146-GSXW.m3u8$LR•IPV4•115『线路103』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -https://p2.vzan.com/slowlive/596867413819827251/live.m3u8?zbid=1725814272&amp;tpid=1516989100&amp;type=0$LR•IPV4•115『线路104』 +https://stream2.jlntv.cn/jlyb/sd/live.m3u8$LR•IPV4•115『线路104』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -https://tntgjhjb.live.sxmty.com/live/hls/3a4585ac11ec4e1bb07b419101b370c3/baf63e2b313440c2a25d7859f9b73b05-1.m3u8?zshanxd$LR•IPV4•115『线路105』 +https://stream2.jlntv.cn/sytv/sd/live.m3u8$LR•IPV4•115『线路105』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://uzoiczhh.live.sxmty.com/live/hls/0d41f1480c4042d49927858f01fde707/53130407737b417b9a6259b57246bae3.m3u8?zshanxd$LR•IPV4•115『线路106』 +http://222.179.155.21:1935/ch1.m3u8$LR•IPV4•115『线路106』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -https://ls.qingting.fm/live/5043/64k.m3u8$LR•IPV4•115『线路107』 +http://117.172.215.250:8083/videos/live/35/39/GQVbrgob5CGJM/GQVbrgob5CGJM.m3u8$LR•IPV4•115『线路107』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://liveout.btzx.com.cn/62ds9e/4nxdih.m3u8?fbl=$LR•IPV4•115『线路108』 +http://220.180.110.101:8083/videos/live/36/57/hwEHU4UVQ1Iv5/hwEHU4UVQ1Iv5.m3u8$LR•IPV4•115『线路108』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://nklive.nbs.cn/hls/d511bc9d-a694-4453-b3a2-4fc842cc97a1/index.m3u8$LR•IPV4•115『线路109』 +http://live.hnxttv.com:9601/live/xwzh/800K/tzwj_video.m3u8$LR•IPV4•115『线路109』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://ls.qingting.fm/live/23797.m3u8$LR•IPV4•115『线路110』 +http://stream.bzcm.net/2/sd/live.m3u8$LR•IPV4•115『线路110』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -https://play.kankanlive.com/live/1720583434627241.m3u8$LR•IPV4•115『线路111』 +http://117.156.28.119/270000001111/1110000145/index.m3u8$LR•IPV4•115『线路111』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -https://ls.qingting.fm/live/5022100/64k.m3u8$LR•IPV4•115『线路112』 +https://stream2.jlntv.cn/baishan1/sd/live.m3u8$LR•IPV4•115『线路112』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -https://liveout.xntv.tv/a65jur/96iln2.m3u8?zqinghd$LR•IPV4•115『线路113』 +http://live1.wuhubtv.com/channel1/sd/live.m3u8$LR•IPV4•115『线路113』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://live.qthnews.org.cn:1935/live/live1/800k/tzwj_video.m3u8$LR•IPV4•115『线路114』 +http://palive.patv123.com:8091/live/xwpd_800K.m3u8$LR•IPV4•115『线路114』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://stream.hrbtv.net/xwzh/sd/live.m3u8?zheild$LR•IPV4•115『线路115』 +https://stream2.jlntv.cn/liaoyuan1/sd/live.m3u8$LR•IPV4•115『线路115』 #EXTINF:-1 tvg-id="西安新闻" tvg-name="西安新闻" group-title="陕西",西安新闻 -http://stream2.xiancity.cn/xatv1/playlist.m3u8$LR•IPV4•2『线路1』 +http://112.46.105.20:8009/hls/28/index.m3u8$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="西安新闻" tvg-name="西安新闻" group-title="陕西",西安新闻 -http://112.46.105.20:8009/hls/28/index.m3u8$LR•IPV4•2『线路2』 +http://stream2.xiancity.cn/xatv1/playlist.m3u8$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="山东少儿" tvg-name="山东少儿" group-title="山东",山东少儿 http://123.129.70.178:9901/tsfile/live/1004_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•16『线路1』 #EXTINF:-1 tvg-id="山东少儿" tvg-name="山东少儿" group-title="山东",山东少儿 @@ -6246,43 +6246,43 @@ http://218.206.193.218:8888/hls/66/index.m3u8$LR•IPV4•8『线路4』 #EXTINF:-1 tvg-id="凤凰中文" tvg-name="凤凰中文" group-title="港澳台",凤凰中文 http://120.198.95.220:9901/tsfile/live/1036_1.m3u8?key=txiptv$LR•IPV4•8『线路5』 #EXTINF:-1 tvg-id="凤凰中文" tvg-name="凤凰中文" group-title="港澳台",凤凰中文 -http://223.110.245.139/ott.js.chinamobile.com/PLTV/3/224/3221226922/index.m3u8$LR•IPV4•8『线路6』 +http://r.jdshipin.com/cCCzW$LR•IPV4•8『线路6』 #EXTINF:-1 tvg-id="凤凰中文" tvg-name="凤凰中文" group-title="港澳台",凤凰中文 -http://r.jdshipin.com/cCCzW$LR•IPV4•8『线路7』 +http://cdn6.163189.xyz/163189/fhzw$LR•IPV4•8『线路7』 #EXTINF:-1 tvg-id="凤凰中文" tvg-name="凤凰中文" group-title="港澳台",凤凰中文 -http://cdn6.163189.xyz/163189/fhzw$LR•IPV4•8『线路8』 +http://223.110.245.139/ott.js.chinamobile.com/PLTV/3/224/3221226922/index.m3u8$LR•IPV4•8『线路8』 #EXTINF:-1 tvg-id="凤凰资讯" tvg-name="凤凰资讯" group-title="港澳台",凤凰资讯 http://api.mg.itv888.cn:8080/hls/11ef1dc70d8/index.m3u8$LR•IPV4•10『线路1』 #EXTINF:-1 tvg-id="凤凰资讯" tvg-name="凤凰资讯" group-title="港澳台",凤凰资讯 -p3p://167.114.175.6:55331/5fffbf860003807cedf4e1016c3c3ed2$LR•IPV4•10『线路2』 +http://zmgd.zyrnet.com:8888/hls/109/index.m3u8$LR•IPV4•10『线路2』 #EXTINF:-1 tvg-id="凤凰资讯" tvg-name="凤凰资讯" group-title="港澳台",凤凰资讯 -http://zmgd.zyrnet.com:8888/hls/109/index.m3u8$LR•IPV4•10『线路3』 +http://221.7.175.154:8445/tsfile/live/1021_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•10『线路3』 #EXTINF:-1 tvg-id="凤凰资讯" tvg-name="凤凰资讯" group-title="港澳台",凤凰资讯 -http://221.7.175.154:8445/tsfile/live/1021_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•10『线路4』 +http://120.198.95.220:9901/tsfile/live/1037_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•10『线路4』 #EXTINF:-1 tvg-id="凤凰资讯" tvg-name="凤凰资讯" group-title="港澳台",凤凰资讯 -http://120.198.95.220:9901/tsfile/live/1037_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•10『线路5』 +http://120.198.95.220:9901/tsfile/live/1037_1.m3u8?key=txiptv$LR•IPV4•10『线路5』 #EXTINF:-1 tvg-id="凤凰资讯" tvg-name="凤凰资讯" group-title="港澳台",凤凰资讯 -http://120.198.95.220:9901/tsfile/live/1037_1.m3u8?key=txiptv$LR•IPV4•10『线路6』 +p3p://167.114.175.6:55331/5fffbf860003807cedf4e1016c3c3ed2$LR•IPV4•10『线路6』 #EXTINF:-1 tvg-id="凤凰资讯" tvg-name="凤凰资讯" group-title="港澳台",凤凰资讯 -http://223.110.245.167/ott.js.chinamobile.com/PLTV/3/224/3221226923/index.m3u8$LR•IPV4•10『线路7』 +http://r.jdshipin.com/0Rp07$LR•IPV4•10『线路7』 #EXTINF:-1 tvg-id="凤凰资讯" tvg-name="凤凰资讯" group-title="港澳台",凤凰资讯 -http://r.jdshipin.com/0Rp07$LR•IPV4•10『线路8』 +http://php.jdshipin.com/TVOD/iptv.php?id=fhzx$LR•IPV4•10『线路8』 #EXTINF:-1 tvg-id="凤凰资讯" tvg-name="凤凰资讯" group-title="港澳台",凤凰资讯 -http://php.jdshipin.com/TVOD/iptv.php?id=fhzx$LR•IPV4•10『线路9』 +http://cdn6.163189.xyz/163189/fhzx$LR•IPV4•10『线路9』 #EXTINF:-1 tvg-id="凤凰资讯" tvg-name="凤凰资讯" group-title="港澳台",凤凰资讯 -http://cdn6.163189.xyz/163189/fhzx$LR•IPV4•10『线路10』 +http://223.110.245.167/ott.js.chinamobile.com/PLTV/3/224/3221226923/index.m3u8$LR•IPV4•10『线路10』 #EXTINF:-1 tvg-id="凤凰香港" tvg-name="凤凰香港" group-title="港澳台",凤凰香港 -p3p://167.114.175.6:55331/5fe0b82c000cac9774c17f262e43314d$LR•IPV4•6『线路1』 +http://122.152.202.33/s/81a8a44f/index.m3u8?id=fhhk$LR•IPV4•6『线路1』 #EXTINF:-1 tvg-id="凤凰香港" tvg-name="凤凰香港" group-title="港澳台",凤凰香港 -http://122.152.202.33/s/81a8a44f/index.m3u8?id=fhhk$LR•IPV4•6『线路2』 +p3p://167.114.175.6:55331/5fe0b82c000cac9774c17f262e43314d$LR•IPV4•6『线路2』 #EXTINF:-1 tvg-id="凤凰香港" tvg-name="凤凰香港" group-title="港澳台",凤凰香港 -http://223.110.245.136/PLTV/3/224/3221226975/index.m3u8$LR•IPV4•6『线路3』 +http://r.jdshipin.com/yDoTN$LR•IPV4•6『线路3』 #EXTINF:-1 tvg-id="凤凰香港" tvg-name="凤凰香港" group-title="港澳台",凤凰香港 -http://r.jdshipin.com/yDoTN$LR•IPV4•6『线路4』 +http://php.jdshipin.com/TVOD/iptv.php?id=fhhk$LR•IPV4•6『线路4』 #EXTINF:-1 tvg-id="凤凰香港" tvg-name="凤凰香港" group-title="港澳台",凤凰香港 -http://php.jdshipin.com/TVOD/iptv.php?id=fhhk$LR•IPV4•6『线路5』 +http://cdn6.163189.xyz/163189/fhhk$LR•IPV4•6『线路5』 #EXTINF:-1 tvg-id="凤凰香港" tvg-name="凤凰香港" group-title="港澳台",凤凰香港 -http://cdn6.163189.xyz/163189/fhhk$LR•IPV4•6『线路6』 +http://223.110.245.136/PLTV/3/224/3221226975/index.m3u8$LR•IPV4•6『线路6』 #EXTINF:-1 tvg-id="TVB翡翠台" tvg-name="TVB翡翠台" group-title="港澳台",TVB翡翠台 p3p://167.114.175.6:55331/653e4c02000ea0440c8c63fd3e5d709d$LR•IPV4•12『线路1』 #EXTINF:-1 tvg-id="TVB翡翠台" tvg-name="TVB翡翠台" group-title="港澳台",TVB翡翠台 @@ -6384,9 +6384,9 @@ p3p://167.114.175.6:55331/612ee2240008f3db8e0578dc59406f9e$LR•IPV4•10『线 #EXTINF:-1 tvg-id="台视" tvg-name="台视" group-title="港澳台",台视 p3p://167.114.175.6:55331/6223b571000a13023e78ece5030b5b05$LR•IPV4•10『线路8』 #EXTINF:-1 tvg-id="台视" tvg-name="台视" group-title="港澳台",台视 -http://162.19.247.76:22222/live/taishi/index.m3u8$LR•IPV4•10『线路9』 +http://38.64.72.148/hls/modn/list/4013/chunklist1.m3u8$LR•IPV4•10『线路9』 #EXTINF:-1 tvg-id="台视" tvg-name="台视" group-title="港澳台",台视 -http://38.64.72.148/hls/modn/list/4013/chunklist1.m3u8$LR•IPV4•10『线路10』 +http://162.19.247.76:22222/live/taishi/index.m3u8$LR•IPV4•10『线路10』 #EXTINF:-1 tvg-id="民视新闻" tvg-name="民视新闻" group-title="港澳台",民视新闻 http://38.64.72.148:80/hls/modn/list/4012/chunklist0.m3u8$LR•IPV4•4『线路1』 #EXTINF:-1 tvg-id="民视新闻" tvg-name="民视新闻" group-title="港澳台",民视新闻 @@ -6398,15 +6398,15 @@ http://38.64.72.148/hls/modn/list/4012/chunklist1.m3u8$LR•IPV4•4『线路4 #EXTINF:-1 tvg-id="耀才财经" tvg-name="耀才财经" group-title="港澳台",耀才财经 https://v3.mediacast.hk/webcast/bshdlive-pc/playlist.m3u8$LR•IPV4•3『线路1』 #EXTINF:-1 tvg-id="耀才财经" tvg-name="耀才财经" group-title="港澳台",耀才财经 -http://202.69.67.66:443/webcast/bshdlive-mobile/playlist.m3u8$LR•IPV4•3『线路2』 +https://v3.mediacast.hk/webcast/bshdlive-pc/chunklist_w99771165.m3u8$LR•IPV4•3『线路2』 #EXTINF:-1 tvg-id="耀才财经" tvg-name="耀才财经" group-title="港澳台",耀才财经 -https://v3.mediacast.hk/webcast/bshdlive-pc/chunklist_w99771165.m3u8$LR•IPV4•3『线路3』 +http://202.69.67.66:443/webcast/bshdlive-mobile/playlist.m3u8$LR•IPV4•3『线路3』 #EXTINF:-1 tvg-id="美亚C+" tvg-name="美亚C+" group-title="港澳台",美亚C+ -http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/01.m3u8$LR•IPV4•3『线路1』 +http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/03.m3u8$LR•IPV4•3『线路1』 #EXTINF:-1 tvg-id="美亚C+" tvg-name="美亚C+" group-title="港澳台",美亚C+ -http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/02.m3u8$LR•IPV4•3『线路2』 +http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/01.m3u8$LR•IPV4•3『线路2』 #EXTINF:-1 tvg-id="美亚C+" tvg-name="美亚C+" group-title="港澳台",美亚C+ -http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/03.m3u8$LR•IPV4•3『线路3』 +http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/02.m3u8$LR•IPV4•3『线路3』 #EXTINF:-1 tvg-id="数位电影" tvg-name="数位电影" group-title="港澳台",数位电影 p3p://167.114.175.6:55331/6223ae1b0007136f3e5c44280e3300fa$LR•IPV4 #EXTINF:-1 tvg-id="龙华偶像" tvg-name="龙华偶像" group-title="港澳台",龙华偶像 @@ -6426,55 +6426,55 @@ rtmp://f13h.mine.nu/sat/tv771$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="纬来日本" tvg-name="纬来日本" group-title="港澳台",纬来日本 p3p://167.114.175.6:55331/5fe1add80007bbbd788125c43bf36060$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -rtmp://f13h.mine.nu:1935/sat/tv721$LR•IPV4•25『线路1』 +https://epg.pw/stream/ab6df63b64d0cc44a1f4f029ed847a26fa54a7aebd455578fb05a63f02c22f4b.m3u8$LR•IPV4•25『线路1』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -http://211.72.65.236:8585/.m3u8$LR•IPV4•25『线路2』 +http://zb.xmzb.xyz/123.php?id=⚽马上oppppp一纬来体育$LR•IPV4•25『线路2』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -rtmp://f13h.mine.nu/sat/tv721$LR•IPV4•25『线路3』 +https://cdn.iptv8k.top/dl/jrys.php?id=292&time=20240926215313&ip=111.229.253.40$LR•IPV4•25『线路3』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -http://125.227.210.55:8155/VideoInput/play.ts$LR•IPV4•25『线路4』 +http://aktv_stream1.m16tv.cfd/stream/tuntun/null/AKTV.m3u8$LR•IPV4•25『线路4』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -https://stream1.freetv.fun/wei-lai-ti-yu-9.ctv$LR•IPV4•25『线路5』 +https://epg.pw/stream/8855a9936e37e608a0ec8a014cce1673dee9c5d68d560da376cc92e5edef2b25.m3u8$LR•IPV4•25『线路5』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -https://epg.pw/stream/ab6df63b64d0cc44a1f4f029ed847a26fa54a7aebd455578fb05a63f02c22f4b.m3u8$LR•IPV4•25『线路6』 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=1978&tk=e640d0a1bf70$LR•IPV4•25『线路6』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -http://zb.xmzb.xyz/123.php?id=⚽马上oppppp一纬来体育$LR•IPV4•25『线路7』 +https://hls-gateway.vpstv.net/streams/477026.m3u8$LR•IPV4•25『线路7』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -https://cdn.iptv8k.top/dl/jrys.php?id=292&time=20240926215313&ip=111.229.253.40$LR•IPV4•25『线路8』 +http://122.117.71.103:8562/http/61.222.53.250:8081/hls/67/809/ch28.m3u8$LR•IPV4•25『线路8』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -http://aktv_stream1.m16tv.cfd/stream/tuntun/null/AKTV.m3u8$LR•IPV4•25『线路9』 +https://epg.pw/stream/4f18dfe0593db5c686eb64ae8edaf2a9202d4d46bdc9bbde2cee27708e12ea01.m3u8$LR•IPV4•25『线路9』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -https://epg.pw/stream/8855a9936e37e608a0ec8a014cce1673dee9c5d68d560da376cc92e5edef2b25.m3u8$LR•IPV4•25『线路10』 +https://cdn.iptv8k.top/dl/jrys.php?id=291&time=20240926215313&ip=111.229.253.40$LR•IPV4•25『线路10』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=1978&tk=e640d0a1bf70$LR•IPV4•25『线路11』 +https://hls.iill.top/api/wlty/index.m3u8$LR•IPV4•25『线路11』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -https://hls-gateway.vpstv.net/streams/477026.m3u8$LR•IPV4•25『线路12』 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=2056&tk=e640d0a1bf70$LR•IPV4•25『线路12』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -http://122.117.71.103:8562/http/61.222.53.250:8081/hls/67/809/ch28.m3u8$LR•IPV4•25『线路13』 +http://aktv_stream1.m16tv.cfd/stream/aktv3/null-1/AKTV.m3u8$LR•IPV4•25『线路13』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -https://epg.pw/stream/4f18dfe0593db5c686eb64ae8edaf2a9202d4d46bdc9bbde2cee27708e12ea01.m3u8$LR•IPV4•25『线路14』 +https://stream1.freetv.fun/wei-lai-ti-yu-3.m3u8$LR•IPV4•25『线路14』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -https://cdn.iptv8k.top/dl/jrys.php?id=291&time=20240926215313&ip=111.229.253.40$LR•IPV4•25『线路15』 +http://148.135.34.95/mn.php?playurl=http://www.pelotas.org:8278/videolandsport/playlist.m3u8$LR•IPV4•25『线路15』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -https://hls.iill.top/api/wlty/index.m3u8$LR•IPV4•25『线路16』 +http://api3.52tb.xyz/info?id=376&token=20221127jxwhhemby$LR•IPV4•25『线路16』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=2056&tk=e640d0a1bf70$LR•IPV4•25『线路17』 +https://smart.pendy.dpdns.org/Smart.php?id=videolandsport$LR•IPV4•25『线路17』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -http://aktv_stream1.m16tv.cfd/stream/aktv3/null-1/AKTV.m3u8$LR•IPV4•25『线路18』 +https://cdn.iptv8k.top/dl/jrys.php?id=292&time=20240926215313&ip=111.229.253.40$LR•IPV4•25『线路18』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -https://stream1.freetv.fun/wei-lai-ti-yu-3.m3u8$LR•IPV4•25『线路19』 +http://api.mytv666.top/api/qwt.php?t=体育频道&id=纬来体育$LR•IPV4•25『线路19』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -http://148.135.34.95/mn.php?playurl=http://www.pelotas.org:8278/videolandsport/playlist.m3u8$LR•IPV4•25『线路20』 +http://aktv.top/AKTV/live/aktv3/null-1/AKTV.m3u8$LR•IPV4•25『线路20』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -http://api3.52tb.xyz/info?id=376&token=20221127jxwhhemby$LR•IPV4•25『线路21』 +rtmp://f13h.mine.nu:1935/sat/tv721$LR•IPV4•25『线路21』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -https://smart.pendy.dpdns.org/Smart.php?id=videolandsport$LR•IPV4•25『线路22』 +http://211.72.65.236:8585/.m3u8$LR•IPV4•25『线路22』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -https://cdn.iptv8k.top/dl/jrys.php?id=292&time=20240926215313&ip=111.229.253.40$LR•IPV4•25『线路23』 +rtmp://f13h.mine.nu/sat/tv721$LR•IPV4•25『线路23』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -http://api.mytv666.top/api/qwt.php?t=体育频道&id=纬来体育$LR•IPV4•25『线路24』 +http://125.227.210.55:8155/VideoInput/play.ts$LR•IPV4•25『线路24』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -http://aktv.top/AKTV/live/aktv3/null-1/AKTV.m3u8$LR•IPV4•25『线路25』 +https://stream1.freetv.fun/wei-lai-ti-yu-9.ctv$LR•IPV4•25『线路25』 #EXTINF:-1 tvg-id="中视闽南" tvg-name="中视闽南" group-title="港澳台",中视闽南 rtmp://f13h.mine.nu/sat/tv091$LR•IPV4 #EXTINF:-1 tvg-id="中视新闻" tvg-name="中视新闻" group-title="港澳台",中视新闻 @@ -6692,17 +6692,17 @@ rtmp://f13h.mine.nu/sat/tv051$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="MoMo综合" tvg-name="MoMo综合" group-title="港澳台",MoMo综合 p3p://167.114.175.6:55331/621e17750005eaa02887cb6e61ea2a58$LR•IPV4 #EXTINF:-1 tvg-id="ELEVEN体育1" tvg-name="ELEVEN体育1" group-title="港澳台",ELEVEN体育1 -https://smart.pendy.dpdns.org/Smart.php?id=eltasport1_twn$LR•IPV4•3『线路1』 +https://stream1.freetv.fun/eltaai-er-da-ti-yu--1--wj-1.ctv$LR•IPV4•3『线路1』 #EXTINF:-1 tvg-id="ELEVEN体育1" tvg-name="ELEVEN体育1" group-title="港澳台",ELEVEN体育1 -rtmp://f13h.mine.nu/sat/tv731$LR•IPV4•3『线路2』 +https://smart.pendy.dpdns.org/Smart.php?id=eltasport1_twn$LR•IPV4•3『线路2』 #EXTINF:-1 tvg-id="ELEVEN体育1" tvg-name="ELEVEN体育1" group-title="港澳台",ELEVEN体育1 -https://stream1.freetv.fun/eltaai-er-da-ti-yu--1--wj-1.ctv$LR•IPV4•3『线路3』 +rtmp://f13h.mine.nu/sat/tv731$LR•IPV4•3『线路3』 #EXTINF:-1 tvg-id="ELEVEN体育2" tvg-name="ELEVEN体育2" group-title="港澳台",ELEVEN体育2 -https://smart.pendy.dpdns.org/Smart.php?id=eltasport2_twn$LR•IPV4•3『线路1』 +https://stream1.freetv.fun/eltaai-er-da-ti-yu--2--wj-1.ctv$LR•IPV4•3『线路1』 #EXTINF:-1 tvg-id="ELEVEN体育2" tvg-name="ELEVEN体育2" group-title="港澳台",ELEVEN体育2 -rtmp://f13h.mine.nu/sat/tv741$LR•IPV4•3『线路2』 +https://smart.pendy.dpdns.org/Smart.php?id=eltasport2_twn$LR•IPV4•3『线路2』 #EXTINF:-1 tvg-id="ELEVEN体育2" tvg-name="ELEVEN体育2" group-title="港澳台",ELEVEN体育2 -https://stream1.freetv.fun/eltaai-er-da-ti-yu--2--wj-1.ctv$LR•IPV4•3『线路3』 +rtmp://f13h.mine.nu/sat/tv741$LR•IPV4•3『线路3』 #EXTINF:-1 tvg-id="半岛新闻" tvg-name="半岛新闻" group-title="港澳台",半岛新闻 http://live-hls-web-aje.getaj.net/AJE/01.m3u8$LR•IPV4•4『线路1』 #EXTINF:-1 tvg-id="半岛新闻" tvg-name="半岛新闻" group-title="港澳台",半岛新闻 @@ -6772,13 +6772,13 @@ p3p://167.114.175.6:55331/65ad274400000b46bd92da681fce74f2$LR•IPV4•2『线 #EXTINF:-1 tvg-id="ROCK Action" tvg-name="ROCK Action" group-title="港澳台",ROCK Action http://nmk.ioapk.com:5050/4gtv-live138/index.m3u8$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="TVB Plus" tvg-name="TVB Plus" group-title="港澳台",TVB Plus -http://rihou.cc:555/tv/[Pd]Plus综合$LR•IPV4•4『线路1』 +http://r.jdshipin.com/ndGgS$LR•IPV4•4『线路1』 #EXTINF:-1 tvg-id="TVB Plus" tvg-name="TVB Plus" group-title="港澳台",TVB Plus -p3p://167.114.175.6:55331/6649bce20008d56453eeebfc022701f1$LR•IPV4•4『线路2』 +http://rihou.cc:555/tv/[Pd]Plus综合$LR•IPV4•4『线路2』 #EXTINF:-1 tvg-id="TVB Plus" tvg-name="TVB Plus" group-title="港澳台",TVB Plus -p3p://167.114.175.6:55331/653e4d3e000b344f0c91357e73163f82$LR•IPV4•4『线路3』 +p3p://167.114.175.6:55331/6649bce20008d56453eeebfc022701f1$LR•IPV4•4『线路3』 #EXTINF:-1 tvg-id="TVB Plus" tvg-name="TVB Plus" group-title="港澳台",TVB Plus -http://r.jdshipin.com/ndGgS$LR•IPV4•4『线路4』 +p3p://167.114.175.6:55331/653e4d3e000b344f0c91357e73163f82$LR•IPV4•4『线路4』 #EXTINF:-1 tvg-id="AXN" tvg-name="AXN" group-title="港澳台",AXN p3p://167.114.175.6:55331/66d23a53000d25d573c606e3274f26c5$LR•IPV4•24『线路1』 #EXTINF:-1 tvg-id="AXN" tvg-name="AXN" group-title="港澳台",AXN @@ -6830,9 +6830,9 @@ http://103.137.83.62:9090/play/21/index.m3u8$LR•IPV4•24『线路24』 #EXTINF:-1 tvg-id="娱乐新闻" tvg-name="娱乐新闻" group-title="港澳台",娱乐新闻 https://hls-gateway.vpstv.net/streams/708904.m3u8$LR•IPV4 #EXTINF:-1 tvg-id="澳门卫视" tvg-name="澳门卫视" group-title="港澳台",澳门卫视 -http://php.jdshipin.com:8880/TVOD/iptv.php?id=as$LR•IPV4•2『线路1』 +http://61.244.22.4/ch1/ch1.live/playlist.m3u8$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="澳门卫视" tvg-name="澳门卫视" group-title="港澳台",澳门卫视 -http://61.244.22.4/ch1/ch1.live/playlist.m3u8$LR•IPV4•2『线路2』 +http://php.jdshipin.com:8880/TVOD/iptv.php?id=as$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="Pet Club TV" tvg-name="Pet Club TV" group-title="港澳台",Pet Club TV https://cdn-apse1-prod.tsv2.amagi.tv/linear/amg01076-lightningintern-petclub-samsungnz/playlist.m3u8$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="Pet Club TV" tvg-name="Pet Club TV" group-title="港澳台",Pet Club TV @@ -7010,9 +7010,9 @@ https://lotus.stingray.com/manifest/ose-317ads-montreal/samsungtvplus/master.m3u #EXTINF:-1 tvg-id="HOY TV" tvg-name="HOY TV" group-title="港澳台",HOY TV p3p://167.114.175.6:55331/62184bc3000cd48f11e47b06202b7e18$LR•IPV4•3『线路1』 #EXTINF:-1 tvg-id="HOY TV" tvg-name="HOY TV" group-title="港澳台",HOY TV -https://hoytv-live-stream.hoy.tv/ch77/index.m3u8$LR•IPV4•3『线路2』 +http://php.jdshipin.com/TVOD/iptv.php?id=hoytv$LR•IPV4•3『线路2』 #EXTINF:-1 tvg-id="HOY TV" tvg-name="HOY TV" group-title="港澳台",HOY TV -http://php.jdshipin.com/TVOD/iptv.php?id=hoytv$LR•IPV4•3『线路3』 +https://hoytv-live-stream.hoy.tv/ch77/index.m3u8$LR•IPV4•3『线路3』 #EXTINF:-1 tvg-id="MOMOTV" tvg-name="MOMOTV" group-title="港澳台",MOMOTV rtmp://f13h.mine.nu/sat/tv761$LR•IPV4 #EXTINF:-1 tvg-id="大爱1" tvg-name="大爱1" group-title="港澳台",大爱1 @@ -7080,13 +7080,13 @@ https://d198ro05q94rc4.cloudfront.net/XITE_Rock_On.m3u8$LR•IPV4 #EXTINF:-1 tvg-id="FIGHT SPORTS" tvg-name="FIGHT SPORTS" group-title="港澳台",FIGHT SPORTS p3p://167.114.175.6:55331/65a4480e000eb9449aeb1d5a33663b73$LR•IPV4 #EXTINF:-1 tvg-id="NBA TV" tvg-name="NBA TV" group-title="港澳台",NBA TV -http://170.yfvodcdn.com:19980/live/nbaTV2/hls.m3u8$LR•IPV4•6『线路1』 +https://stream1.freetv.fun/nba-tv-7.m3u8$LR•IPV4•6『线路1』 #EXTINF:-1 tvg-id="NBA TV" tvg-name="NBA TV" group-title="港澳台",NBA TV -p3p://167.114.175.6:55331/65a587500007bc039fca3566638e69af$LR•IPV4•6『线路2』 +https://stream1.freetv.fun/nba-tv-5.m3u8$LR•IPV4•6『线路2』 #EXTINF:-1 tvg-id="NBA TV" tvg-name="NBA TV" group-title="港澳台",NBA TV -https://stream1.freetv.fun/nba-tv-7.m3u8$LR•IPV4•6『线路3』 +http://170.yfvodcdn.com:19980/live/nbaTV2/hls.m3u8$LR•IPV4•6『线路3』 #EXTINF:-1 tvg-id="NBA TV" tvg-name="NBA TV" group-title="港澳台",NBA TV -https://stream1.freetv.fun/nba-tv-5.m3u8$LR•IPV4•6『线路4』 +p3p://167.114.175.6:55331/65a587500007bc039fca3566638e69af$LR•IPV4•6『线路4』 #EXTINF:-1 tvg-id="NBA TV" tvg-name="NBA TV" group-title="港澳台",NBA TV https://amg00556-amg00556c3-firetv-us-6060.playouts.now.amagi.tv/playlist.m3u8$LR•IPV4•6『线路5』 #EXTINF:-1 tvg-id="NBA TV" tvg-name="NBA TV" group-title="港澳台",NBA TV @@ -7498,9 +7498,9 @@ https://cffda8ff.wurl.com/master/f36d25e7e52f1ba8d7e56eb859c636563214f541/U2Ftc3 #EXTINF:-1 tvg-id="Newsmax" tvg-name="Newsmax" group-title="港澳台",Newsmax https://nmx1ota.akamaized.net/hls/live/2107010/Live_1/3.m3u8$LR•IPV4•8『线路1』 #EXTINF:-1 tvg-id="Newsmax" tvg-name="Newsmax" group-title="港澳台",Newsmax -https://nmxlive.akamaized.net/hls/live/529965/Live_1/index.m3u8$LR•IPV4•8『线路2』 +http://nmxlive.akamaized.net/hls/live/529965/Live_1/index.m3u8$LR•IPV4•8『线路2』 #EXTINF:-1 tvg-id="Newsmax" tvg-name="Newsmax" group-title="港澳台",Newsmax -http://nmxlive.akamaized.net/hls/live/529965/Live_1/index.m3u8$LR•IPV4•8『线路3』 +https://nmxlive.akamaized.net/hls/live/529965/Live_1/index.m3u8$LR•IPV4•8『线路3』 #EXTINF:-1 tvg-id="Newsmax" tvg-name="Newsmax" group-title="港澳台",Newsmax https://2-fss-2.streamhoster.com/pl_120/206858-4404556-1/playlist.m3u8$LR•IPV4•8『线路4』 #EXTINF:-1 tvg-id="Newsmax" tvg-name="Newsmax" group-title="港澳台",Newsmax @@ -7644,13 +7644,13 @@ https://jmp2.uk/plu-64a3d96f060e830008af6745.m3u8$LR•IPV4•5『线路5』 #EXTINF:-1 tvg-id="香港国际财经" tvg-name="香港国际财经" group-title="港澳台",香港国际财经 p3p://167.114.175.6:55331/64838620000cd8ed32fb0d6a414411f7$LR•IPV4 #EXTINF:-1 tvg-id="Bloomberg" tvg-name="Bloomberg" group-title="港澳台",Bloomberg -https://bloomberg-bloombergtv-3-nl.samsung.wurl.tv/playlist.m3u8$LR•IPV4•16『线路1』 +https://epg.pw/stream/d2edf469b9079064a283f4b0811cbf6f2597ebbb3d08dcf77036a4b5a791b7cf.m3u8$LR•IPV4•16『线路1』 #EXTINF:-1 tvg-id="Bloomberg" tvg-name="Bloomberg" group-title="港澳台",Bloomberg -https://bloomberg-bloombergtv-5-eu.plex.wurl.tv/3ea2c48ba0034cc276591c94a5b439c0.m3u8$LR•IPV4•16『线路2』 +https://bloomberg-bloombergtv-3-nl.samsung.wurl.tv/playlist.m3u8$LR•IPV4•16『线路2』 #EXTINF:-1 tvg-id="Bloomberg" tvg-name="Bloomberg" group-title="港澳台",Bloomberg -https://liveprodusphoenixeast.akamaized.net/USPhx-HD/Channel-TX-USPhx-AWS-virginia-1/Source-USPhx-16k-1-s6lk2-BP-07-02-81ykIWnsMsg_live.m3u8$LR•IPV4•16『线路3』 +https://bloomberg-bloombergtv-5-eu.plex.wurl.tv/3ea2c48ba0034cc276591c94a5b439c0.m3u8$LR•IPV4•16『线路3』 #EXTINF:-1 tvg-id="Bloomberg" tvg-name="Bloomberg" group-title="港澳台",Bloomberg -https://epg.pw/stream/d2edf469b9079064a283f4b0811cbf6f2597ebbb3d08dcf77036a4b5a791b7cf.m3u8$LR•IPV4•16『线路4』 +https://liveprodusphoenixeast.akamaized.net/USPhx-HD/Channel-TX-USPhx-AWS-virginia-1/Source-USPhx-16k-1-s6lk2-BP-07-02-81ykIWnsMsg_live.m3u8$LR•IPV4•16『线路4』 #EXTINF:-1 tvg-id="Bloomberg" tvg-name="Bloomberg" group-title="港澳台",Bloomberg https://ciner.daioncdn.net/bloomberght/bloomberght.m3u8$LR•IPV4•16『线路5』 #EXTINF:-1 tvg-id="Bloomberg" tvg-name="Bloomberg" group-title="港澳台",Bloomberg diff --git a/cluntop_tvbox/lib/iptv.txt b/cluntop_tvbox/lib/iptv.txt index 78661800..052bea00 100755 --- a/cluntop_tvbox/lib/iptv.txt +++ b/cluntop_tvbox/lib/iptv.txt @@ -32,8 +32,8 @@ 北京卫视4K,http://101.35.240.114:88/live.php?id=北京卫视$LR•IPV4•5『线路4』 北京卫视4K,http://106.53.99.30/tv/api.php?id=bjws4k$LR•IPV4•5『线路5』 CCTV4K,http://101.43.145.141:12002/gaoma/cctv4k.m3u8$LR•IPV4•6『线路1』 -CCTV4K,https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4k_mbd.m3u8?auth_key=1784322000-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-aa68fb06c12f53b71a4d170807f32df5&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•6『线路2』 -CCTV4K,https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4k_mbd.m3u8?auth_key=1784325600-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-da48bbac79b9621fa8f084ece04c2c91&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•6『线路3』 +CCTV4K,https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4k_mbd.m3u8?auth_key=1784329200-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-81ad4aefc95ce528b3da1112f0bc9ff2&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•6『线路2』 +CCTV4K,https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4k_mbd.m3u8?auth_key=1784322000-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-aa68fb06c12f53b71a4d170807f32df5&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•6『线路3』 CCTV4K,http://198.204.240.250:82/live/cctv4k.m3u8$LR•IPV4•6『线路4』 CCTV4K,http://fn.tmde.top:35455/nptv/cctv4k.m3u8$LR•IPV4•6『线路5』 CCTV4K,http://xc.mfykeke.top:35455/nptv/cctv4k.m3u8$LR•IPV4•6『线路6』 @@ -85,9 +85,9 @@ CCTV4,http://38.75.136.137:98/gslb/dsdqbv/cctv4hd.m3u8?auth=test20251009$LR•IP CCTV4,http://112.46.105.20:8009/hls/4/index.m3u8$LR•IPV4•16『线路7』 CCTV4,http://74.91.26.218:82/live/cctv4hd.m3u8$LR•IPV4•16『线路8』 CCTV4,p3p://167.114.175.6:55331/61244d9c0006885d64b1b7591f6c12a0$LR•IPV4•16『线路9』 -CCTV4,https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784322000-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-25fe408e6545f49f3d4eb7f92e97c764&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•16『线路10』 -CCTV4,https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784325600-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-b583b000601c3690c0e4bae75e1261f0&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•16『线路11』 -CCTV4,https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784271600-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-6aec44040ec72def77e22587fc404005&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•16『线路12』 +CCTV4,https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784329200-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-2245971645866ed95972e22af68cc8d1&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•16『线路10』 +CCTV4,https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784271600-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-6aec44040ec72def77e22587fc404005&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•16『线路11』 +CCTV4,https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784322000-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-25fe408e6545f49f3d4eb7f92e97c764&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•16『线路12』 CCTV4,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226335/1.m3u8?$LR•IPV6•16『线路13』 CCTV4,http://63.141.230.178:82/gslb/zbdq5.m3u8?id=cctv4hd$LR•IPV4•16『线路14』 CCTV4,http://207.56.13.146:81/cdnlive/cctv4.m3u8$LR•IPV4•16『线路15』 @@ -96,15 +96,15 @@ CCTV5,http://222.223.41.27:8888/hls/5/index.m3u8$LR•IPV4•14『线路1』 CCTV5,http://183.223.157.33:9901/tsfile/live/0005_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•14『线路2』 CCTV5,http://221.226.51.220:50081/newlive/live/hls/5/live.m3u8$LR•IPV4•14『线路3』 CCTV5,http://112.27.235.94:8000/hls/5/index.m3u8$LR•IPV4•14『线路4』 -CCTV5,http://38.75.136.137:98/gslb/dsdqbv/cctv5hd.m3u8?auth=test20251009$LR•IPV4•14『线路5』 -CCTV5,http://112.46.105.20:8009/hls/503/index.m3u8$LR•IPV4•14『线路6』 -CCTV5,http://153.0.171.163:9901/tsfile/live/0005_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•14『线路7』 -CCTV5,http://101.66.199.247:9901/tsfile/live/0005_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•14『线路8』 +CCTV5,http://101.66.199.247:9901/tsfile/live/0005_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•14『线路5』 +CCTV5,http://38.75.136.137:98/gslb/dsdqbv/cctv5hd.m3u8?auth=test20251009$LR•IPV4•14『线路6』 +CCTV5,http://112.46.105.20:8009/hls/503/index.m3u8$LR•IPV4•14『线路7』 +CCTV5,http://153.0.171.163:9901/tsfile/live/0005_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•14『线路8』 CCTV5,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226469/1.m3u8?$LR•IPV6•14『线路9』 CCTV5,http://183.129.255.66:8480/hls/6/index.m3u8$LR•IPV4•14『线路10』 CCTV5,http://112.27.235.94:8000/hls/6/index.m3u8$LR•IPV4•14『线路11』 -CCTV5,http://38.75.136.137:98/gslb/dsdqbv/cctv5p.m3u8?auth=test20251009$LR•IPV4•14『线路12』 -CCTV5,http://112.123.243.37:50085/tsfile/live/0006_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•14『线路13』 +CCTV5,http://112.123.243.37:50085/tsfile/live/0006_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•14『线路12』 +CCTV5,http://38.75.136.137:98/gslb/dsdqbv/cctv5p.m3u8?auth=test20251009$LR•IPV4•14『线路13』 CCTV5,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226894/1.m3u8?$LR•IPV6•14『线路14』 CCTV6,http://222.223.41.27:8888/hls/6/index.m3u8$LR•IPV4•13『线路1』 CCTV6,http://183.129.255.66:8480/hls/7/index.m3u8$LR•IPV4•13『线路2』 @@ -155,8 +155,8 @@ CCTV9,http://38.75.136.137:98/gslb/dsdqbv/cctv9hd.m3u8?auth=test20251009$LR•IP CCTV9,http://74.91.26.218:82/live/cctv9hd.m3u8$LR•IPV4•12『线路5』 CCTV9,http://112.46.105.20:8009/hls/509/index.m3u8$LR•IPV4•12『线路6』 CCTV9,http://153.0.171.163:9901/tsfile/live/1008_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•12『线路7』 -CCTV9,https://v4-e6b1c5baf4e240fe63adbf68dda23435.livehwc4.com/play.kankanlive.com/live/1698423397390920.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=f3fb3ddaca05941087114cf6481e1c23$LR•IPV4•12『线路8』 -CCTV9,https://v4-702cae17a28d6e4f0c0002bba021d934.livehwc4.com/play.kankanlive.com/live/1698423397390920.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=2b87983b301b48537526846889074801$LR•IPV4•12『线路9』 +CCTV9,https://v4-e6b1c5baf4e240fe63adbf68dda23435.livehwc4.com/play.kankanlive.com/live/1698423397390920.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=8a921813ee3b23c82763145c9f291a3b$LR•IPV4•12『线路8』 +CCTV9,https://v4-e6b1c5baf4e240fe63adbf68dda23435.livehwc4.com/play.kankanlive.com/live/1698423397390920.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=f3fb3ddaca05941087114cf6481e1c23$LR•IPV4•12『线路9』 CCTV9,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226944/1.m3u8?$LR•IPV6•12『线路10』 CCTV9,http://222.223.41.27:8888/hls/9/index.m3u8$LR•IPV4•12『线路11』 CCTV9,https://xykt-fix.github.io/Y77.m3u8$LR•IPV4•12『线路12』 @@ -168,17 +168,17 @@ CCTV10,http://112.27.235.94:8000/hls/11/index.m3u8$LR•IPV4•11『线路5』 CCTV10,http://38.75.136.137:98/gslb/dsdqbv/cctv10hd.m3u8?auth=test20251009$LR•IPV4•11『线路6』 CCTV10,http://112.46.105.20:8009/hls/506/index.m3u8$LR•IPV4•11『线路7』 CCTV10,http://74.91.26.218:82/live/cctv10hd.m3u8$LR•IPV4•11『线路8』 -CCTV10,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226937/1.m3u8?$LR•IPV6•11『线路9』 -CCTV10,https://hwapi.yntv.net/ew265l/z1z6s5.m3u8$LR•IPV4•11『线路10』 -CCTV10,https://jsv-live-play.sfccn.com/live/jsv_3920_fhd.m3u8$LR•IPV4•11『线路11』 +CCTV10,https://jsv-live-play.sfccn.com/live/jsv_3920_fhd.m3u8$LR•IPV4•11『线路9』 +CCTV10,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226937/1.m3u8?$LR•IPV6•11『线路10』 +CCTV10,https://hwapi.yntv.net/ew265l/z1z6s5.m3u8$LR•IPV4•11『线路11』 CCTV11,http://183.129.255.66:8480/hls/12/index.m3u8$LR•IPV4•8『线路1』 CCTV11,http://cd-live-stream.news.cctvplus.com/live/smil:CHANNEL1.smil/chunklist_w744036192_b1000000.m3u8$LR•IPV4•8『线路2』 CCTV11,http://153.0.171.163:9901/tsfile/live/1010_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•8『线路3』 CCTV11,http://112.27.235.94:8000/hls/12/index.m3u8$LR•IPV4•8『线路4』 CCTV11,http://38.75.136.137:98/gslb/dsdqbv/cctv11hd.m3u8?auth=test20251009$LR•IPV4•8『线路5』 CCTV11,http://74.91.26.218:82/live/cctv11hd.m3u8$LR•IPV4•8『线路6』 -CCTV11,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226334/1.m3u8?$LR•IPV6•8『线路7』 -CCTV11,http://183.196.25.171:808/hls/11/index.m3u8$LR•IPV4•8『线路8』 +CCTV11,http://183.196.25.171:808/hls/11/index.m3u8$LR•IPV4•8『线路7』 +CCTV11,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226334/1.m3u8?$LR•IPV6•8『线路8』 CCTV12,http://112.123.243.37:50085/tsfile/live/0013_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•9『线路1』 CCTV12,http://183.223.157.33:9901/tsfile/live/0012_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•9『线路2』 CCTV12,http://183.129.255.66:8480/hls/13/index.m3u8$LR•IPV4•9『线路3』 @@ -208,8 +208,8 @@ CCTV14,http://222.223.41.27:8888/hls/14/index.m3u8$LR•IPV4•9『线路2』 CCTV14,http://183.129.255.66:8480/hls/15/index.m3u8$LR•IPV4•9『线路3』 CCTV14,http://153.0.171.163:9901/tsfile/live/1013_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•9『线路4』 CCTV14,http://112.27.235.94:8000/hls/15/index.m3u8$LR•IPV4•9『线路5』 -CCTV14,http://38.75.136.137:98/gslb/dsdqbv/cctv14hd.m3u8?auth=test20251009$LR•IPV4•9『线路6』 -CCTV14,http://112.123.243.37:50085/tsfile/live/0015_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•9『线路7』 +CCTV14,http://112.123.243.37:50085/tsfile/live/0015_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•9『线路6』 +CCTV14,http://38.75.136.137:98/gslb/dsdqbv/cctv14hd.m3u8?auth=test20251009$LR•IPV4•9『线路7』 CCTV14,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226947/1.m3u8?$LR•IPV6•9『线路8』 CCTV14,https://event.pull.hebtv.com/jishi/cp2.m3u8$LR•IPV4•9『线路9』 CCTV15,http://222.223.41.27:8888/hls/15/index.m3u8$LR•IPV4•11『线路1』 @@ -233,9 +233,9 @@ CCTV17,http://59.39.89.130:60901/tsfile/live/0017_1.m3u8?key=txiptv&playlive=1&a CCTV17,http://123.130.84.106:8154/tsfile/live/0019_1.m3u8$LR•IPV4•9『线路4』 CCTV17,http://38.75.136.137:98/gslb/dsdqbv/cctv17hd.m3u8?auth=test20251009$LR•IPV4•9『线路5』 CCTV17,http://74.91.26.218:82/live/cctv17hd.m3u8$LR•IPV4•9『线路6』 -CCTV17,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226318/1.m3u8?$LR•IPV6•9『线路7』 -CCTV17,http://38.75.136.137:98/gslb/dsdqpub/cctv17hd.m3u8?auth=testpub$LR•IPV4•9『线路8』 -CCTV17,http://183.196.25.171:808/hls/93/index.m3u8$LR•IPV4•9『线路9』 +CCTV17,http://183.196.25.171:808/hls/93/index.m3u8$LR•IPV4•9『线路7』 +CCTV17,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226318/1.m3u8?$LR•IPV6•9『线路8』 +CCTV17,http://38.75.136.137:98/gslb/dsdqpub/cctv17hd.m3u8?auth=testpub$LR•IPV4•9『线路9』 CCTV第一剧场,http://38.75.136.137:98/gslb/dsdqpub/dyjc.m3u8?auth=testpub$LR•IPV4 CCTV怀旧剧场,http://38.75.136.137:98/gslb/dsdqpub/hjjc.m3u8?auth=testpub$LR•IPV4 CCTV风云剧场,http://38.75.136.137:98/gslb/dsdqpub/fyjc.m3u8?auth=testpub$LR•IPV4 @@ -287,12 +287,12 @@ CGTN阿语,https://0472.org/hls/cgtna.m3u8$LR•IPV4 直播中国,https://gcalic.v.myalicdn.com/gc/wgw05_1/index.m3u8$LR•IPV4•2『线路2』 卫视,#genre# -重温经典,http://php.jdshipin.com/TVOD/iptv.php?id=cwjd$LR•IPV4•6『线路1』 -重温经典,http://ali.hlspull.yximgs.com/live/awei_cwjd.flv$LR•IPV4•6『线路2』 -重温经典,http://home.kuaidi521.com:35455/bptv/10000100000000050000000003887494.m3u8$LR•IPV4•6『线路3』 -重温经典,http://cdn3.132.us.kg/live/cwjd/stream.m3u8$LR•IPV4•6『线路4』 -重温经典,p3p://167.114.175.6:55331/65c5064800047df41ad1a47449e93b8b$LR•IPV4•6『线路5』 -重温经典,http://112.27.235.94:8000/hls/50/index.m3u8$LR•IPV4•6『线路6』 +重温经典,http://112.27.235.94:8000/hls/50/index.m3u8$LR•IPV4•6『线路1』 +重温经典,http://php.jdshipin.com/TVOD/iptv.php?id=cwjd$LR•IPV4•6『线路2』 +重温经典,http://ali.hlspull.yximgs.com/live/awei_cwjd.flv$LR•IPV4•6『线路3』 +重温经典,http://home.kuaidi521.com:35455/bptv/10000100000000050000000003887494.m3u8$LR•IPV4•6『线路4』 +重温经典,http://cdn3.132.us.kg/live/cwjd/stream.m3u8$LR•IPV4•6『线路5』 +重温经典,p3p://167.114.175.6:55331/65c5064800047df41ad1a47449e93b8b$LR•IPV4•6『线路6』 香港卫视,http://webcast.hkstv.tv/livestream/mutfysrq/playlist.m3u8$LR•IPV4•2『线路1』 香港卫视,https://hkstv.tv/api/m3u8-proxy?url=http%3A%2F%2Fwebcast.hkstv.tv%2Flivestream%2Fmutfysrq%2Fplaylist.m3u8$LR•IPV4•2『线路2』 星空卫视,http://114.105.187.77:9901/tsfile/live/0117_1.m3u8$LR•IPV4•7『线路1』 @@ -302,13 +302,13 @@ CGTN阿语,https://0472.org/hls/cgtna.m3u8$LR•IPV4 星空卫视,http://wouu.net:9977/udp/239.93.0.156:2193$LR•IPV4•7『线路5』 星空卫视,http://171.213.140.54:8123/udp/239.93.1.10:2193$LR•IPV4•7『线路6』 星空卫视,https://stream1.freetv.fun/xing-kong-wei-shi-4.ctv$LR•IPV4•7『线路7』 -湖南卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226509/1.m3u8?zoneoffset=480&servicetype=1&icpid=&limitflux=-1&limitdur=-1&tenantId=8601&accountinfo=%7E%7EV2.0%7EIGb_ib7rnBX9_sANRKq9sg%7EpK8OKM5JoJWWbLRyLfPcUMkwWZ90MzSI9S9PDltJsYzd0ZGcS3Tkh7syciNKJa-w60mDOdwtDyoNwCx9aRgzHNH9AUREV_qvNJtXHRPzYw0%7EExtInfo9bj61dxzlMXrsixrqcFYPg%3D%3D%3A20221022013542%2C915973%2C119.123.71.209%2C20221022013542%2C10000100000000050000000003873458%2C915973%2C-1%2C0%2C1%2C%2C%2C2%2C%2C%2C%2C2%2C%2C10000100000000060000000007253514_0%2CEND&GuardEncType=2$LR•IPV6•16『线路1』 -湖南卫视,http://74.91.26.218:82/live/hnwshd.m3u8$LR•IPV4•16『线路2』 -湖南卫视,http://204.12.221.218:8181/3m1080p/hnws.m3u8$LR•IPV4•16『线路3』 -湖南卫视,http://173.208.212.130:8181/720p/hnws.m3u8$LR•IPV4•16『线路4』 -湖南卫视,http://153.0.171.163:9901/tsfile/live/0128_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•16『线路5』 -湖南卫视,http://112.27.235.94:8000/hls/31/index.m3u8$LR•IPV4•16『线路6』 -湖南卫视,http://120.196.232.43:8088/rrs03.hw.gmcc.net/PLTV/651/224/3221226698/1.m3u8$LR•IPV4•16『线路7』 +湖南卫视,http://120.196.232.43:8088/rrs03.hw.gmcc.net/PLTV/651/224/3221226698/1.m3u8$LR•IPV4•16『线路1』 +湖南卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226509/1.m3u8?zoneoffset=480&servicetype=1&icpid=&limitflux=-1&limitdur=-1&tenantId=8601&accountinfo=%7E%7EV2.0%7EIGb_ib7rnBX9_sANRKq9sg%7EpK8OKM5JoJWWbLRyLfPcUMkwWZ90MzSI9S9PDltJsYzd0ZGcS3Tkh7syciNKJa-w60mDOdwtDyoNwCx9aRgzHNH9AUREV_qvNJtXHRPzYw0%7EExtInfo9bj61dxzlMXrsixrqcFYPg%3D%3D%3A20221022013542%2C915973%2C119.123.71.209%2C20221022013542%2C10000100000000050000000003873458%2C915973%2C-1%2C0%2C1%2C%2C%2C2%2C%2C%2C%2C2%2C%2C10000100000000060000000007253514_0%2CEND&GuardEncType=2$LR•IPV6•16『线路2』 +湖南卫视,http://74.91.26.218:82/live/hnwshd.m3u8$LR•IPV4•16『线路3』 +湖南卫视,http://204.12.221.218:8181/3m1080p/hnws.m3u8$LR•IPV4•16『线路4』 +湖南卫视,http://173.208.212.130:8181/720p/hnws.m3u8$LR•IPV4•16『线路5』 +湖南卫视,http://153.0.171.163:9901/tsfile/live/0128_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•16『线路6』 +湖南卫视,http://112.27.235.94:8000/hls/31/index.m3u8$LR•IPV4•16『线路7』 湖南卫视,http://38.75.136.137:98/gslb/dsdqpub/hnwshd.m3u8?auth=testpub$LR•IPV4•16『线路8』 湖南卫视,https://hlsbkmgsplive.miguvideo.com/wd-hunanhd-2500/01.m3u8?&HlsSubType=&encrypt=$LR•IPV4•16『线路9』 湖南卫视,https://hlsbkmgsplive.miguvideo.com/wd-hunanhd-1200/01.m3u8?&HlsSubType=&encrypt=$LR•IPV4•16『线路10』 @@ -318,14 +318,14 @@ CGTN阿语,https://0472.org/hls/cgtna.m3u8$LR•IPV4 湖南卫视,https://iptv.catvod.com/catvod.php?id=hunws$LR•IPV4•16『线路14』 湖南卫视,https://httop.top/ysp-湖南卫视$LR•IPV4•16『线路15』 湖南卫视,http://iptv.huuc.edu.cn/hls/hunanhd.m3u8$LR•IPV4•16『线路16』 -浙江卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226899/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ETYfTgTra_pUx2cPrgZ_BDw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•17『线路1』 -浙江卫视,http://112.123.243.37:50085/tsfile/live/0019_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•17『线路2』 -浙江卫视,http://ali-xwl.cztv.com/live/channel011080Plxw.m3u8$LR•IPV4•17『线路3』 -浙江卫视,http://204.12.221.218:8181/3m1080p/zjws.m3u8$LR•IPV4•17『线路4』 -浙江卫视,http://173.208.212.130:8181/720p/zjws.m3u8$LR•IPV4•17『线路5』 -浙江卫视,http://ali-xwl.cztv.com/live/channel01720Plxw.m3u8$LR•IPV4•17『线路6』 -浙江卫视,http://112.27.235.94:8000/hls/29/index.m3u8$LR•IPV4•17『线路7』 -浙江卫视,http://zwebl02.cztv.com/live/channel01720Pnew.m3u8?auth_key=1784123883-f178167128c55cd66b7eca004ccca015-0-69f388bdaa594feb900510d687566182$LR•IPV4•17『线路8』 +浙江卫视,http://zwebl02.cztv.com/live/channel01720Pnew.m3u8?auth_key=1784123883-f178167128c55cd66b7eca004ccca015-0-69f388bdaa594feb900510d687566182$LR•IPV4•17『线路1』 +浙江卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226899/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ETYfTgTra_pUx2cPrgZ_BDw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•17『线路2』 +浙江卫视,http://112.123.243.37:50085/tsfile/live/0019_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•17『线路3』 +浙江卫视,http://ali-xwl.cztv.com/live/channel011080Plxw.m3u8$LR•IPV4•17『线路4』 +浙江卫视,http://204.12.221.218:8181/3m1080p/zjws.m3u8$LR•IPV4•17『线路5』 +浙江卫视,http://173.208.212.130:8181/720p/zjws.m3u8$LR•IPV4•17『线路6』 +浙江卫视,http://ali-xwl.cztv.com/live/channel01720Plxw.m3u8$LR•IPV4•17『线路7』 +浙江卫视,http://112.27.235.94:8000/hls/29/index.m3u8$LR•IPV4•17『线路8』 浙江卫视,http://38.75.136.137:98/gslb/dsdqpub/zjwshd.m3u8?auth=testpub$LR•IPV4•17『线路9』 浙江卫视,http://23.237.228.134/live6/zhejiang.m3u8$LR•IPV4•17『线路10』 浙江卫视,http://gfr.x3322.net:9901/tsfile/live/1087_1.m3u8$LR•IPV4•17『线路11』 @@ -380,23 +380,24 @@ CGTN阿语,https://0472.org/hls/cgtna.m3u8$LR•IPV4 江苏卫视,http://iptv.huuc.edu.cn/hls/jshd.m3u8$LR•IPV4•15『线路13』 江苏卫视,http://mg.hmysapp.cn:177/ckmg/zb.php?id=jsws$LR•IPV4•15『线路14』 江苏卫视,http://39.134.24.166/dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226200/index.m3u8$LR•IPV4•15『线路15』 -安徽卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226943/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E0QmKQ_slRCwvVVUUfxPVbw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•10『线路1』 -安徽卫视,http://101.66.194.63:9901/tsfile/live/0130_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•10『线路2』 -安徽卫视,http://112.27.235.94:8000/hls/26/index.m3u8$LR•IPV4•10『线路3』 -安徽卫视,http://23.237.228.134/live8/anhui.m3u8$LR•IPV4•10『线路4』 -安徽卫视,http://gfr.x3322.net:9901/tsfile/live/1092_1.m3u8$LR•IPV4•10『线路5』 -安徽卫视,http://api.kkitv.itv888.cn:8080/hls/m8hvytneunk/index.m3u8$LR•IPV4•10『线路6』 -安徽卫视,https://iptv.catvod.com/catvod.php?id=ahws$LR•IPV4•10『线路7』 -安徽卫视,https://httop.top/ysp-安徽卫视$LR•IPV4•10『线路8』 -安徽卫视,http://iptv.huuc.edu.cn/hls/ahhd.m3u8$LR•IPV4•10『线路9』 -安徽卫视,http://153.0.171.163:9901/tsfile/live/0130_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•10『线路10』 -重庆卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226963/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EjTXsJprEx2nE38tdvu5lhA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•16『线路1』 -重庆卫视,http://192.151.150.154/live/cqwshd.m3u8$LR•IPV4•16『线路2』 -重庆卫视,http://107.150.60.122/live/cqwshd.m3u8$LR•IPV4•16『线路3』 -重庆卫视,http://112.123.243.37:50085/tsfile/live/0131_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•16『线路4』 -重庆卫视,http://120.198.95.220:9901/tsfile/live/1066_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•16『线路5』 -重庆卫视,http://112.27.235.94:8000/hls/36/index.m3u8$LR•IPV4•16『线路6』 -重庆卫视,http://live2.plus.jinhua.com.cn/dsnc/playlist.m3u8$LR•IPV4•16『线路7』 +安徽卫视,https://piccpndks.v.kcdnvip.com/audio/anhui_2/index.m3u8$LR•IPV4•11『线路1』 +安徽卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226943/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E0QmKQ_slRCwvVVUUfxPVbw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•11『线路2』 +安徽卫视,http://101.66.194.63:9901/tsfile/live/0130_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•11『线路3』 +安徽卫视,http://112.27.235.94:8000/hls/26/index.m3u8$LR•IPV4•11『线路4』 +安徽卫视,http://23.237.228.134/live8/anhui.m3u8$LR•IPV4•11『线路5』 +安徽卫视,http://gfr.x3322.net:9901/tsfile/live/1092_1.m3u8$LR•IPV4•11『线路6』 +安徽卫视,http://api.kkitv.itv888.cn:8080/hls/m8hvytneunk/index.m3u8$LR•IPV4•11『线路7』 +安徽卫视,https://iptv.catvod.com/catvod.php?id=ahws$LR•IPV4•11『线路8』 +安徽卫视,https://httop.top/ysp-安徽卫视$LR•IPV4•11『线路9』 +安徽卫视,http://iptv.huuc.edu.cn/hls/ahhd.m3u8$LR•IPV4•11『线路10』 +安徽卫视,http://153.0.171.163:9901/tsfile/live/0130_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•11『线路11』 +重庆卫视,http://live2.plus.jinhua.com.cn/dsnc/playlist.m3u8$LR•IPV4•16『线路1』 +重庆卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226963/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EjTXsJprEx2nE38tdvu5lhA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•16『线路2』 +重庆卫视,http://192.151.150.154/live/cqwshd.m3u8$LR•IPV4•16『线路3』 +重庆卫视,http://107.150.60.122/live/cqwshd.m3u8$LR•IPV4•16『线路4』 +重庆卫视,http://112.123.243.37:50085/tsfile/live/0131_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•16『线路5』 +重庆卫视,http://120.198.95.220:9901/tsfile/live/1066_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•16『线路6』 +重庆卫视,http://112.27.235.94:8000/hls/36/index.m3u8$LR•IPV4•16『线路7』 重庆卫视,http://23.237.228.134/live6/chongqing.m3u8$LR•IPV4•16『线路8』 重庆卫视,http://43.251.226.89:8080/play/55.m3u8$LR•IPV4•16『线路9』 重庆卫视,http://gfr.x3322.net:9901/tsfile/live/1093_1.m3u8$LR•IPV4•16『线路10』 @@ -439,24 +440,23 @@ CGTN阿语,https://0472.org/hls/cgtna.m3u8$LR•IPV4 东南卫视,http://iptv.huuc.edu.cn/hls/dnhd.m3u8$LR•IPV4•18『线路16』 东南卫视,http://153.0.171.163:9901/tsfile/live/0137_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•18『线路17』 东南卫视,http://118.81.195.79:9003/hls/24/index.m3u8$LR•IPV4•18『线路18』 -深圳卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226959/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EGrVNEZREjuNVKiTJo2mtwg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•18『线路1』 -深圳卫视,http://120.198.95.220:9901/tsfile/live/1048_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•18『线路2』 -深圳卫视,http://120.198.95.220:9901/tsfile/live/1048_1.m3u8?key=txiptv$LR•IPV4•18『线路3』 -深圳卫视,http://173.208.212.130:8181/720p/szws.m3u8$LR•IPV4•18『线路4』 -深圳卫视,http://192.151.150.154/live/szwshd.m3u8$LR•IPV4•18『线路5』 -深圳卫视,http://124.228.160.210:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•18『线路6』 -深圳卫视,http://36.136.38.87:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•18『线路7』 -深圳卫视,http://112.27.235.94:8000/hls/33/index.m3u8$LR•IPV4•18『线路8』 -深圳卫视,https://sztv-hls.sztv.com.cn/1SIQj6s/500/q7rdSsQ.m3u8?sign=71764b3a0bcc96b03dea9693d605e020&t=6a579f21$LR•IPV4•18『线路9』 -深圳卫视,http://38.75.136.137:98/gslb/dsdqpub/szwshd.m3u8?auth=testpub$LR•IPV4•18『线路10』 -深圳卫视,http://23.237.228.134/live6/shenzhen.m3u8$LR•IPV4•18『线路11』 -深圳卫视,http://gfr.x3322.net:9901/tsfile/live/1095_1.m3u8$LR•IPV4•18『线路12』 -深圳卫视,http://api.kkitv.itv888.cn:8080/hls/iftsd32ykm/index.m3u8$LR•IPV4•18『线路13』 -深圳卫视,https://iptv.catvod.com/catvod.php?id=szws$LR•IPV4•18『线路14』 -深圳卫视,https://httop.top/ysp-深圳卫视$LR•IPV4•18『线路15』 -深圳卫视,http://iptv.huuc.edu.cn/hls/szhd.m3u8$LR•IPV4•18『线路16』 -深圳卫视,http://153.0.171.163:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•18『线路17』 -深圳卫视,http://38.64.72.148:80/hls/modn/list/4007/playlist.m3u8$LR•IPV4•18『线路18』 +深圳卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226959/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EGrVNEZREjuNVKiTJo2mtwg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•17『线路1』 +深圳卫视,http://120.198.95.220:9901/tsfile/live/1048_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•17『线路2』 +深圳卫视,http://120.198.95.220:9901/tsfile/live/1048_1.m3u8?key=txiptv$LR•IPV4•17『线路3』 +深圳卫视,http://173.208.212.130:8181/720p/szws.m3u8$LR•IPV4•17『线路4』 +深圳卫视,http://192.151.150.154/live/szwshd.m3u8$LR•IPV4•17『线路5』 +深圳卫视,http://124.228.160.210:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•17『线路6』 +深圳卫视,http://36.136.38.87:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•17『线路7』 +深圳卫视,http://112.27.235.94:8000/hls/33/index.m3u8$LR•IPV4•17『线路8』 +深圳卫视,http://38.75.136.137:98/gslb/dsdqpub/szwshd.m3u8?auth=testpub$LR•IPV4•17『线路9』 +深圳卫视,http://23.237.228.134/live6/shenzhen.m3u8$LR•IPV4•17『线路10』 +深圳卫视,http://gfr.x3322.net:9901/tsfile/live/1095_1.m3u8$LR•IPV4•17『线路11』 +深圳卫视,http://api.kkitv.itv888.cn:8080/hls/iftsd32ykm/index.m3u8$LR•IPV4•17『线路12』 +深圳卫视,https://iptv.catvod.com/catvod.php?id=szws$LR•IPV4•17『线路13』 +深圳卫视,https://httop.top/ysp-深圳卫视$LR•IPV4•17『线路14』 +深圳卫视,http://iptv.huuc.edu.cn/hls/szhd.m3u8$LR•IPV4•17『线路15』 +深圳卫视,http://153.0.171.163:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•17『线路16』 +深圳卫视,http://38.64.72.148:80/hls/modn/list/4007/playlist.m3u8$LR•IPV4•17『线路17』 广东卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226961/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E2MGyx659D_aaDPP0qt3NgA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•12『线路1』 广东卫视,http://112.27.235.94:8000/hls/30/index.m3u8$LR•IPV4•12『线路2』 广东卫视,http://38.75.136.137:98/gslb/dsdqpub/gdwshd.m3u8?auth=testpub$LR•IPV4•12『线路3』 @@ -510,27 +510,26 @@ CGTN阿语,https://0472.org/hls/cgtna.m3u8$LR•IPV4 贵州卫视,http://153.0.171.163:9901/tsfile/live/0120_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•16『线路14』 贵州卫视,http://183.207.248.71/gitv/live1/G_GUIZHOU/G_GUIZHOU$LR•IPV4•16『线路15』 贵州卫视,http://39.134.115.163:8080/PLTV/88888910/224/3221225728/index.m3u8$LR•IPV4•16『线路16』 -河北卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227014/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ErSGjhI3DMaaAASPrbQJYTg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•14『线路1』 -河北卫视,http://101.66.194.63:9901/tsfile/live/0117_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•14『线路2』 -河北卫视,http://101.66.199.247:9901/tsfile/live/0117_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•14『线路3』 -河北卫视,http://204.12.221.218:8181/3m1080p/hews.m3u8$LR•IPV4•14『线路4』 -河北卫视,http://event.pull.hebtv.com/jishi/weishi_tingyun.m3u8$LR•IPV4•14『线路5』 -河北卫视,http://120.76.248.139/live/bfgd/4200000108.m3u8$LR•IPV4•14『线路6』 -河北卫视,https://tv.pull.hebtv.com/jishi/nongminpindao.m3u8?t=1783932137&k=f5f7fa7a3e39ef329f1b86c4f866958c$LR•IPV4•14『线路7』 -河北卫视,http://23.237.228.134/live8/hebei.m3u8$LR•IPV4•14『线路8』 -河北卫视,http://43.251.226.89:8080/play/42.m3u8$LR•IPV4•14『线路9』 -河北卫视,http://gfr.x3322.net:9901/tsfile/live/1091_1.m3u8$LR•IPV4•14『线路10』 -河北卫视,https://iptv.catvod.com/catvod.php?id=hbws$LR•IPV4•14『线路11』 -河北卫视,https://httop.top/ysp-河北卫视$LR•IPV4•14『线路12』 -河北卫视,http://iptv.huuc.edu.cn/hls/hebhd.m3u8$LR•IPV4•14『线路13』 -河北卫视,http://153.0.171.163:9901/tsfile/live/0117_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•14『线路14』 -河南卫视,http://101.66.195.138:9901/tsfile/live/0139_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•12『线路1』 -河南卫视,http://38.75.136.137:98/gslb/dsdqpub/hawshd.m3u8?auth=testpub$LR•IPV4•12『线路2』 -河南卫视,http://63.141.230.178:82/gslb/zbdq5.m3u8?id=hawshd$LR•IPV4•12『线路3』 -河南卫视,http://221.226.51.220:50081/newlive/live/hls/37/live.m3u8$LR•IPV4•12『线路4』 -河南卫视,http://153.0.171.163:9901/tsfile/live/0139_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•12『线路5』 -河南卫视,http://112.27.235.94:8000/hls/37/index.m3u8$LR•IPV4•12『线路6』 -河南卫视,http://tvcdn.stream3.hndt.com/tv/65bd329b017e1000648cd2ed00000000_transios/playlist.m3u8?wsSecret=ca9a9194ec9a95ed2539e69d07b645d5&wsTime=1784134111$LR•IPV4•12『线路7』 +河北卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227014/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ErSGjhI3DMaaAASPrbQJYTg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•13『线路1』 +河北卫视,http://101.66.194.63:9901/tsfile/live/0117_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•13『线路2』 +河北卫视,http://101.66.199.247:9901/tsfile/live/0117_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•13『线路3』 +河北卫视,http://204.12.221.218:8181/3m1080p/hews.m3u8$LR•IPV4•13『线路4』 +河北卫视,http://event.pull.hebtv.com/jishi/weishi_tingyun.m3u8$LR•IPV4•13『线路5』 +河北卫视,http://120.76.248.139/live/bfgd/4200000108.m3u8$LR•IPV4•13『线路6』 +河北卫视,http://23.237.228.134/live8/hebei.m3u8$LR•IPV4•13『线路7』 +河北卫视,http://43.251.226.89:8080/play/42.m3u8$LR•IPV4•13『线路8』 +河北卫视,http://gfr.x3322.net:9901/tsfile/live/1091_1.m3u8$LR•IPV4•13『线路9』 +河北卫视,https://iptv.catvod.com/catvod.php?id=hbws$LR•IPV4•13『线路10』 +河北卫视,https://httop.top/ysp-河北卫视$LR•IPV4•13『线路11』 +河北卫视,http://iptv.huuc.edu.cn/hls/hebhd.m3u8$LR•IPV4•13『线路12』 +河北卫视,http://153.0.171.163:9901/tsfile/live/0117_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•13『线路13』 +河南卫视,http://tvcdn.stream3.hndt.com/tv/65bd329b017e1000648cd2ed00000000_transios/playlist.m3u8?wsSecret=ca9a9194ec9a95ed2539e69d07b645d5&wsTime=1784134111$LR•IPV4•12『线路1』 +河南卫视,http://101.66.195.138:9901/tsfile/live/0139_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•12『线路2』 +河南卫视,http://38.75.136.137:98/gslb/dsdqpub/hawshd.m3u8?auth=testpub$LR•IPV4•12『线路3』 +河南卫视,http://63.141.230.178:82/gslb/zbdq5.m3u8?id=hawshd$LR•IPV4•12『线路4』 +河南卫视,http://221.226.51.220:50081/newlive/live/hls/37/live.m3u8$LR•IPV4•12『线路5』 +河南卫视,http://153.0.171.163:9901/tsfile/live/0139_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•12『线路6』 +河南卫视,http://112.27.235.94:8000/hls/37/index.m3u8$LR•IPV4•12『线路7』 河南卫视,http://23.237.228.134/live6/henan.m3u8$LR•IPV4•12『线路8』 河南卫视,http://43.251.226.89:8080/play/44.m3u8$LR•IPV4•12『线路9』 河南卫视,https://iptv.catvod.com/catvod.php?id=hnws$LR•IPV4•12『线路10』 @@ -562,21 +561,22 @@ CGTN阿语,https://0472.org/hls/cgtna.m3u8$LR•IPV4 湖北卫视,http://153.0.171.163:9901/tsfile/live/0132_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•14『线路12』 湖北卫视,http://www.745612.xyz:7788/rtp/235.254.198.72:1564$LR•IPV4•14『线路13』 湖北卫视,http://118.81.195.79:9003/hls/32/index.m3u8$LR•IPV4•14『线路14』 -江西卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226956/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Ei6ZIpVizXlewg-YfGvH8dA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•15『线路1』 -江西卫视,http://101.66.199.247:9901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•15『线路2』 -江西卫视,http://112.123.243.37:50085/tsfile/live/0132_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•15『线路3』 -江西卫视,http://124.228.160.210:9901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•15『线路4』 -江西卫视,http://153.0.171.163:9901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•15『线路5』 -江西卫视,http://112.27.235.94:8000/hls/44/index.m3u8$LR•IPV4•15『线路6』 -江西卫视,http://38.75.136.137:98/gslb/dsdqpub/jxwshd.m3u8?auth=testpub$LR•IPV4•15『线路7』 -江西卫视,http://23.237.228.134/live8/jiangxi.m3u8$LR•IPV4•15『线路8』 -江西卫视,http://43.251.226.89:8080/play/43.m3u8$LR•IPV4•15『线路9』 -江西卫视,http://api.kkitv.itv888.cn:8080/hls/pv0np60bpin/index.m3u8$LR•IPV4•15『线路10』 -江西卫视,https://iptv.catvod.com/catvod.php?id=jxws$LR•IPV4•15『线路11』 -江西卫视,https://httop.top/ysp-江西卫视$LR•IPV4•15『线路12』 -江西卫视,http://iptv.huuc.edu.cn/hls/jxhd.m3u8$LR•IPV4•15『线路13』 -江西卫视,http://mg.hmysapp.cn:177/ckmg/zb.php?id=jxws$LR•IPV4•15『线路14』 -江西卫视,http://39.134.115.163:8080/PLTV/88888910/224/3221225705/index.m3u8$LR•IPV4•15『线路15』 +江西卫视,https://jsp-tv-live.jxtvcn.com.cn/live-jsp/tv_jxtv6.m3u8?t=1784004704&token=67a59c29-de6e-4407-90c8-39f7e099b3db&d=0a7a8c487c454bc7bb02a60298283c5e$LR•IPV4•16『线路1』 +江西卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226956/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Ei6ZIpVizXlewg-YfGvH8dA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•16『线路2』 +江西卫视,http://101.66.199.247:9901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•16『线路3』 +江西卫视,http://112.123.243.37:50085/tsfile/live/0132_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•16『线路4』 +江西卫视,http://124.228.160.210:9901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•16『线路5』 +江西卫视,http://153.0.171.163:9901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•16『线路6』 +江西卫视,http://112.27.235.94:8000/hls/44/index.m3u8$LR•IPV4•16『线路7』 +江西卫视,http://38.75.136.137:98/gslb/dsdqpub/jxwshd.m3u8?auth=testpub$LR•IPV4•16『线路8』 +江西卫视,http://23.237.228.134/live8/jiangxi.m3u8$LR•IPV4•16『线路9』 +江西卫视,http://43.251.226.89:8080/play/43.m3u8$LR•IPV4•16『线路10』 +江西卫视,http://api.kkitv.itv888.cn:8080/hls/pv0np60bpin/index.m3u8$LR•IPV4•16『线路11』 +江西卫视,https://iptv.catvod.com/catvod.php?id=jxws$LR•IPV4•16『线路12』 +江西卫视,https://httop.top/ysp-江西卫视$LR•IPV4•16『线路13』 +江西卫视,http://iptv.huuc.edu.cn/hls/jxhd.m3u8$LR•IPV4•16『线路14』 +江西卫视,http://mg.hmysapp.cn:177/ckmg/zb.php?id=jxws$LR•IPV4•16『线路15』 +江西卫视,http://39.134.115.163:8080/PLTV/88888910/224/3221225705/index.m3u8$LR•IPV4•16『线路16』 吉林卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227015/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EW5-3AVdwD5KlUpuA4mz7Cg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•17『线路1』 吉林卫视,http://204.12.221.218:8181/3m1080p/jlws.m3u8$LR•IPV4•17『线路2』 吉林卫视,http://38.75.136.137:98/gslb/dsdqpub/jlwshd.m3u8?auth=testpub$LR•IPV4•17『线路3』 @@ -661,16 +661,16 @@ CGTN阿语,https://0472.org/hls/cgtna.m3u8$LR•IPV4 山东卫视,http://iptv.huuc.edu.cn/hls/sdhd.m3u8$LR•IPV4•17『线路15』 山东卫视,http://125.210.152.18:9090/live/SDWSHD_H265.m3u8$LR•IPV4•17『线路16』 山东卫视,http://39.134.115.163:8080/PLTV/88888910/224/3221225697/index.m3u8$LR•IPV4•17『线路17』 -天津卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226954/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Eaf3wyULP1h575eM_4ByMDg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•18『线路1』 -天津卫视,http://204.12.221.218:8181/3m1080p/tjws.m3u8$LR•IPV4•18『线路2』 -天津卫视,http://107.150.60.122/live/tjwshd.m3u8$LR•IPV4•18『线路3』 -天津卫视,http://192.151.150.154/live/tjwshd.m3u8$LR•IPV4•18『线路4』 -天津卫视,http://38.75.136.137:98/gslb/dsdqpub/tjwshd.m3u8?auth=testpub$LR•IPV4•18『线路5』 -天津卫视,http://63.141.230.178:82/gslb/zbdq5.m3u8?id=tjwshd$LR•IPV4•18『线路6』 -天津卫视,http://207.56.13.146:81/cdnlive/tjws.m3u8$LR•IPV4•18『线路7』 -天津卫视,http://120.198.95.220:9901/tsfile/live/1067_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•18『线路8』 -天津卫视,http://112.27.235.94:8000/hls/42/index.m3u8$LR•IPV4•18『线路9』 -天津卫视,https://piccpndks.v.kcdnvip.com/audio/tianjin_2/index.m3u8$LR•IPV4•18『线路10』 +天津卫视,https://piccpndks.v.kcdnvip.com/audio/tianjin_2/index.m3u8$LR•IPV4•18『线路1』 +天津卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226954/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Eaf3wyULP1h575eM_4ByMDg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•18『线路2』 +天津卫视,http://204.12.221.218:8181/3m1080p/tjws.m3u8$LR•IPV4•18『线路3』 +天津卫视,http://107.150.60.122/live/tjwshd.m3u8$LR•IPV4•18『线路4』 +天津卫视,http://192.151.150.154/live/tjwshd.m3u8$LR•IPV4•18『线路5』 +天津卫视,http://38.75.136.137:98/gslb/dsdqpub/tjwshd.m3u8?auth=testpub$LR•IPV4•18『线路6』 +天津卫视,http://63.141.230.178:82/gslb/zbdq5.m3u8?id=tjwshd$LR•IPV4•18『线路7』 +天津卫视,http://207.56.13.146:81/cdnlive/tjws.m3u8$LR•IPV4•18『线路8』 +天津卫视,http://120.198.95.220:9901/tsfile/live/1067_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•18『线路9』 +天津卫视,http://112.27.235.94:8000/hls/42/index.m3u8$LR•IPV4•18『线路10』 天津卫视,http://23.237.228.134/live8/tianjing.m3u8$LR•IPV4•18『线路11』 天津卫视,http://gfr.x3322.net:9901/tsfile/live/1090_1.m3u8$LR•IPV4•18『线路12』 天津卫视,http://api.kkitv.itv888.cn:8080/hls/z2lkdkrb4w/index.m3u8$LR•IPV4•18『线路13』 @@ -679,9 +679,9 @@ CGTN阿语,https://0472.org/hls/cgtna.m3u8$LR•IPV4 天津卫视,http://iptv.huuc.edu.cn/hls/tjhd.m3u8$LR•IPV4•18『线路16』 天津卫视,http://153.0.171.163:9901/tsfile/live/0135_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•18『线路17』 天津卫视,http://39.134.115.163:8080/PLTV/88888910/224/3221225698/index.m3u8$LR•IPV4•18『线路18』 -海南卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227029/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EEuBMjt2kLMD8fAO7QYER7Q%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•8『线路1』 -海南卫视,http://120.76.248.139/live/bfgd/4200000473.m3u8$LR•IPV4•8『线路2』 -海南卫视,https://livelyws.chinamcache.com/lyws/zb03.m3u8$LR•IPV4•8『线路3』 +海南卫视,https://livelyws.chinamcache.com/lyws/zb03.m3u8$LR•IPV4•8『线路1』 +海南卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227029/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EEuBMjt2kLMD8fAO7QYER7Q%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•8『线路2』 +海南卫视,http://120.76.248.139/live/bfgd/4200000473.m3u8$LR•IPV4•8『线路3』 海南卫视,http://43.251.226.89:8080/play/50.m3u8$LR•IPV4•8『线路4』 海南卫视,http://api.kkitv.itv888.cn:8080/hls/c1cajhsgba8/index.m3u8$LR•IPV4•8『线路5』 海南卫视,https://iptv.catvod.com/catvod.php?id=hinws$LR•IPV4•8『线路6』 @@ -746,10 +746,10 @@ CGTN阿语,https://0472.org/hls/cgtna.m3u8$LR•IPV4 康巴卫视,http://scgctvshow.sctv.com/hdlive/kangba/1.m3u8$LR•IPV4•2『线路2』 农林卫视,http://120.76.248.139/live/bfgd/4200000122.m3u8$LR•IPV4•2『线路1』 农林卫视,http://43.251.226.89:8080/play/52.m3u8$LR•IPV4•2『线路2』 -三沙卫视,http://107.150.60.122/live/ssws.m3u8$LR•IPV4•6『线路1』 -三沙卫视,http://38.75.136.137:98/gslb/dsdqpub/ssws.m3u8?auth=testpub$LR•IPV4•6『线路2』 -三沙卫视,http://221.226.51.220:50081/newlive/live/hls/38/live.m3u8$LR•IPV4•6『线路3』 -三沙卫视,https://srs.ssws.tv/video/sstv-10/index.m3u8$LR•IPV4•6『线路4』 +三沙卫视,https://srs.ssws.tv/video/sstv-10/index.m3u8$LR•IPV4•6『线路1』 +三沙卫视,http://107.150.60.122/live/ssws.m3u8$LR•IPV4•6『线路2』 +三沙卫视,http://38.75.136.137:98/gslb/dsdqpub/ssws.m3u8?auth=testpub$LR•IPV4•6『线路3』 +三沙卫视,http://221.226.51.220:50081/newlive/live/hls/38/live.m3u8$LR•IPV4•6『线路4』 三沙卫视,http://43.251.226.89:8080/play/56.m3u8$LR•IPV4•6『线路5』 三沙卫视,https://iptv.catvod.com/catvod.php?id=ssws$LR•IPV4•6『线路6』 延边卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227045/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Eq0D3NdTUN7FuRzr8eJsbQA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•4『线路1』 @@ -782,17 +782,17 @@ CGTN阿语,https://0472.org/hls/cgtna.m3u8$LR•IPV4 山西卫视,https://iptv.catvod.com/catvod.php?id=sxiws$LR•IPV4•15『线路13』 山西卫视,https://httop.top/ysp-山西卫视$LR•IPV4•15『线路14』 山西卫视,http://118.81.195.79:9003/hls/19/index.m3u8$LR•IPV4•15『线路15』 -陕西卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226999/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EsGLKaSqf0wDZMbAjeQtfyw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•20『线路1』 -陕西卫视,http://107.150.60.122/live/snwshd.m3u8$LR•IPV4•20『线路2』 -陕西卫视,http://63.141.230.178:82/gslb/zbdq5.m3u8?id=snwshd$LR•IPV4•20『线路3』 -陕西卫视,http://112.123.243.37:50085/tsfile/live/0109_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•20『线路4』 -陕西卫视,http://101.66.194.82:9901/tsfile/live/0136_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•20『线路5』 -陕西卫视,http://120.198.95.220:9901/tsfile/live/1068_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•20『线路6』 -陕西卫视,http://101.66.194.63:9901/tsfile/live/0136_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•20『线路7』 -陕西卫视,http://36.136.38.87:9901/tsfile/live/0136_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•20『线路8』 -陕西卫视,http://153.0.171.163:9901/tsfile/live/0136_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•20『线路9』 -陕西卫视,http://112.27.235.94:8000/hls/43/index.m3u8$LR•IPV4•20『线路10』 -陕西卫视,http://stream.snrtv.com/sxbc-star-BLMOU4.m3u8$LR•IPV4•20『线路11』 +陕西卫视,http://stream.snrtv.com/sxbc-star-BLMOU4.m3u8$LR•IPV4•20『线路1』 +陕西卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226999/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EsGLKaSqf0wDZMbAjeQtfyw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•20『线路2』 +陕西卫视,http://107.150.60.122/live/snwshd.m3u8$LR•IPV4•20『线路3』 +陕西卫视,http://63.141.230.178:82/gslb/zbdq5.m3u8?id=snwshd$LR•IPV4•20『线路4』 +陕西卫视,http://112.123.243.37:50085/tsfile/live/0109_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•20『线路5』 +陕西卫视,http://101.66.194.82:9901/tsfile/live/0136_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•20『线路6』 +陕西卫视,http://120.198.95.220:9901/tsfile/live/1068_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•20『线路7』 +陕西卫视,http://101.66.194.63:9901/tsfile/live/0136_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•20『线路8』 +陕西卫视,http://36.136.38.87:9901/tsfile/live/0136_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•20『线路9』 +陕西卫视,http://153.0.171.163:9901/tsfile/live/0136_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•20『线路10』 +陕西卫视,http://112.27.235.94:8000/hls/43/index.m3u8$LR•IPV4•20『线路11』 陕西卫视,http://38.75.136.137:98/gslb/dsdqpub/sxwshd.m3u8?auth=testpub$LR•IPV4•20『线路12』 陕西卫视,http://23.237.228.134/live6/sichuan.m3u8$LR•IPV4•20『线路13』 陕西卫视,http://43.251.226.89:8080/play/45.m3u8$LR•IPV4•20『线路14』 @@ -943,8 +943,8 @@ NewTV超级体育,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/ NewTV超级体育,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=0078&tk=a0c4f6cfaba3$LR•IPV4•5『线路3』 NewTV超级体育,http://feiyang.ak47s.top:35455/itv/1000000001000009601.m3u8?cdn=ystenlive$LR•IPV4•5『线路4』 NewTV超级体育,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=3188&tk=23a9aca1f79f$LR•IPV4•5『线路5』 -NewTV动作电影,http://39.134.19.68/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226465/index.m3u8$LR•IPV4•2『线路1』 -NewTV动作电影,http://live.metshop.top/huya/11602077?cdn=alicdn$LR•IPV4•2『线路2』 +NewTV动作电影,http://live.metshop.top/huya/11602077?cdn=alicdn$LR•IPV4•2『线路1』 +NewTV动作电影,http://39.134.19.68/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226465/index.m3u8$LR•IPV4•2『线路2』 NewTV精品体育,https://epg.pw/stream/f7556eccd4ae06b0c2991fdc7a4f8388496559f728cc82459a8e50346040e226.m3u8$LR•IPV4•6『线路1』 NewTV精品体育,https://epg.pw/stream/866a097a0907c9832440f8df38272dd555abf05200dfbafcc137e214c9b30ca7.m3u8$LR•IPV4•6『线路2』 NewTV精品体育,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=5739&tk=23a9aca1f79f$LR•IPV4•6『线路3』 @@ -956,8 +956,8 @@ NewTV精品体育,http://dl.wifi942.com:66/jsyd/jsyd.php?id=GITV-JS-65$LR•IPV4 哈哈炫动,http://223.110.245.139/PLTV/4/224/3221226388/index.m3u8$LR•IPV4 嘉佳卡通,http://223.110.245.139/PLTV/4/224/3221227009/index.m3u8$LR•IPV4•2『线路1』 嘉佳卡通,http://112.25.48.68/live/program/live/jjkt/1300000/mnf.m3u8$LR•IPV4•2『线路2』 -金鹰卡通,http://183.11.239.36:808/hls/69/index.m3u8$LR•IPV4•7『线路1』 -金鹰卡通,http://phoneal.qing.mgtv.com/nn_live/nn_x64/Y2hzPSZkZWY9MSZ1aXA9MTA2LjE0LjM4LjU1JnRlcm09NSZtYWNpZD02ODZlOGNmOGM4OGU3N2VjOWEwNzkzMjg5ZjUzNDg0MmFiZWM0ZjNjJnFpZD0mcmF1dGhfZW5hYmxlPW9mZiZjZG5leF9pZD1hbF9waG9uZTMmZXM9MTc4Mzk3OTAxNiZ1dWlkPTU2NjdhZjJmOGNjNjM4MjMwZjFlYzVmY2RiMWIxNThmLTZhMGUyNjM3JnM9ZDg2NTFkYzBlZjdjOTcxMjUyMjMxMTYyOGQ5ODM4YjgmdWlkPSZuZHY9aW9zLTYuNS4wJnY9MiZhcz0wJl9jYXJDb2RlPTA,/JYKTMPP360.m3u8$LR•IPV4•7『线路2』 +金鹰卡通,http://phoneal.qing.mgtv.com/nn_live/nn_x64/Y2hzPSZkZWY9MSZ1aXA9MTA2LjE0LjM4LjU1JnRlcm09NSZtYWNpZD02ODZlOGNmOGM4OGU3N2VjOWEwNzkzMjg5ZjUzNDg0MmFiZWM0ZjNjJnFpZD0mcmF1dGhfZW5hYmxlPW9mZiZjZG5leF9pZD1hbF9waG9uZTMmZXM9MTc4Mzk3OTAxNiZ1dWlkPTU2NjdhZjJmOGNjNjM4MjMwZjFlYzVmY2RiMWIxNThmLTZhMGUyNjM3JnM9ZDg2NTFkYzBlZjdjOTcxMjUyMjMxMTYyOGQ5ODM4YjgmdWlkPSZuZHY9aW9zLTYuNS4wJnY9MiZhcz0wJl9jYXJDb2RlPTA,/JYKTMPP360.m3u8$LR•IPV4•7『线路1』 +金鹰卡通,http://183.11.239.36:808/hls/69/index.m3u8$LR•IPV4•7『线路2』 金鹰卡通,http://101.66.194.82:9901/tsfile/live/1000_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•7『线路3』 金鹰卡通,http://101.66.194.63:9901/tsfile/live/1000_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•7『线路4』 金鹰卡通,http://101.66.199.247:9901/tsfile/live/1000_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•7『线路5』 @@ -1123,19 +1123,19 @@ NewTV精品体育,http://dl.wifi942.com:66/jsyd/jsyd.php?id=GITV-JS-65$LR•IPV4 南宁影视娱乐,http://hls.nntv.cn/nnlive/YSYL_244.m3u8$LR•IPV4 河北,#genre# -邢台综合,http://222.223.119.21:8888/newlive/live/hls/54/live.m3u8$LR•IPV4•2『线路1』 -邢台综合,https://jwplay.hebyun.com.cn:443/live/xtsrmtzs/1500k/tzwj_video.m3u8$LR•IPV4•2『线路2』 -河北都市,http://121.19.134.246:808/hls/21/index.m3u8$LR•IPV4•2『线路1』 -河北都市,https://radio.pull.hebtv.com/live/hebnczx.m3u8$LR•IPV4•2『线路2』 -河北农民,http://121.19.134.246:808/hls/25/index.m3u8$LR•IPV4•2『线路1』 -河北农民,https://ls.qingting.fm/live/1650/64k.m3u8$LR•IPV4•2『线路2』 +邢台综合,https://jwplay.hebyun.com.cn:443/live/xtsrmtzs/1500k/tzwj_video.m3u8$LR•IPV4•2『线路1』 +邢台综合,http://222.223.119.21:8888/newlive/live/hls/54/live.m3u8$LR•IPV4•2『线路2』 +河北都市,https://radio.pull.hebtv.com/live/hebnczx.m3u8$LR•IPV4•2『线路1』 +河北都市,http://121.19.134.246:808/hls/21/index.m3u8$LR•IPV4•2『线路2』 +河北农民,https://ls.qingting.fm/live/1650/64k.m3u8$LR•IPV4•2『线路1』 +河北农民,http://121.19.134.246:808/hls/25/index.m3u8$LR•IPV4•2『线路2』 鹿泉一套,http://hblq.chinashadt.com:2036/live/stream:luquan1.stream/playlist.m3u8$LR•IPV4 -河北经济,http://121.19.134.246:808/hls/20/index.m3u8$LR•IPV4•2『线路1』 -河北经济,http://1.94.31.214/php/hebei.php?id=jjsh$LR•IPV4•2『线路2』 -河北影视,http://121.19.134.246:808/hls/22/index.m3u8$LR•IPV4•2『线路1』 -河北影视,http://1.94.31.214/php/hebei.php?id=hbys$LR•IPV4•2『线路2』 -河北公共,http://121.19.134.246:808/hls/24/index.m3u8$LR•IPV4•2『线路1』 -河北公共,http://1.94.31.214/php/hebei.php?id=hbgg$LR•IPV4•2『线路2』 +河北经济,http://1.94.31.214/php/hebei.php?id=jjsh$LR•IPV4•2『线路1』 +河北经济,http://121.19.134.246:808/hls/20/index.m3u8$LR•IPV4•2『线路2』 +河北影视,http://1.94.31.214/php/hebei.php?id=hbys$LR•IPV4•2『线路1』 +河北影视,http://121.19.134.246:808/hls/22/index.m3u8$LR•IPV4•2『线路2』 +河北公共,http://1.94.31.214/php/hebei.php?id=hbgg$LR•IPV4•2『线路1』 +河北公共,http://121.19.134.246:808/hls/24/index.m3u8$LR•IPV4•2『线路2』 鹿泉二套,http://hblq.chinashadt.com:2036/live/stream:luquan2.stream/playlist.m3u8$LR•IPV4 内蒙古,#genre# @@ -1160,10 +1160,10 @@ NewTV精品体育,http://dl.wifi942.com:66/jsyd/jsyd.php?id=GITV-JS-65$LR•IPV4 江苏教育,http://223.110.245.151/ott.js.chinamobile.com/PLTV/3/224/3221225923/index.m3u8$LR•IPV4 南京十八,http://183.207.248.71/gitv/live1/G_NJSB/G_NJSB$LR•IPV4 江苏体育,http://183.207.248.71/gitv/live1/G_JSTY/G_JSTY$LR•IPV4 -南京教科,https://live.nbs.cn/channels/njtv/jkpd/m3u8:500k/live.m3u8$LR•IPV4•4『线路1』 -南京教科,http://183.207.248.71/gitv/live1/G_NJJK/G_NJJK$LR•IPV4•4『线路2』 -南京教科,http://223.110.245.155/ott.js.chinamobile.com/PLTV/3/224/3221227194/index.m3u8$LR•IPV4•4『线路3』 -南京教科,http://nklive.nbs.cn/hls/75b3c462-b831-4de7-a34b-5d3221db2069/index.m3u8$LR•IPV4•4『线路4』 +南京教科,http://nklive.nbs.cn/hls/75b3c462-b831-4de7-a34b-5d3221db2069/index.m3u8$LR•IPV4•4『线路1』 +南京教科,https://live.nbs.cn/channels/njtv/jkpd/m3u8:500k/live.m3u8$LR•IPV4•4『线路2』 +南京教科,http://183.207.248.71/gitv/live1/G_NJJK/G_NJJK$LR•IPV4•4『线路3』 +南京教科,http://223.110.245.155/ott.js.chinamobile.com/PLTV/3/224/3221227194/index.m3u8$LR•IPV4•4『线路4』 南京少儿,https://live.nbs.cn/channels/njtv/sepd/m3u8:500k/live.m3u8$LR•IPV4 苏州4k,https://live-auth.51kandianshi.com/szgd/csztv4k_hd.m3u8$LR•IPV4•5『线路1』 苏州4k,http://43.251.226.89:8080/play/927.m3u8$LR•IPV4•5『线路2』 @@ -2166,115 +2166,115 @@ NewTV精品体育,http://dl.wifi942.com:66/jsyd/jsyd.php?id=GITV-JS-65$LR•IPV4 广东珠江,https://t.freetv.fun/live/yan-dong-zhu-jiang-15.m3u8$LR•IPV4•127『线路125』 广东珠江,https://hk.188766.xyz/?migutoken=34467290b64f0850801479159893a4de&id=gd_gdzj&type=sz$LR•IPV4•127『线路126』 广东珠江,https://stream1.freetv.fun/yan-dong-zhu-jiang-24.ctv$LR•IPV4•127『线路127』 -广东体育,http://bxtv.3a.ink/api.php?id=gdty$LR•IPV4•109『线路1』 -广东体育,http://php.jdshipin.com/TVOD/iptv.php?id=gdty$LR•IPV4•109『线路2』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-2.flv$LR•IPV4•109『线路3』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-11.ctv$LR•IPV4•109『线路4』 -广东体育,https://hls-gateway.vpstv.net/streams/476954.m3u8$LR•IPV4•109『线路5』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-25.ctv$LR•IPV4•109『线路6』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-36.m3u8$LR•IPV4•109『线路7』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-6.m3u8$LR•IPV4•109『线路8』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-35.ctv$LR•IPV4•109『线路9』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-15.m3u8$LR•IPV4•109『线路10』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-34.ctv$LR•IPV4•109『线路11』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-24.m3u8$LR•IPV4•109『线路12』 -广东体育,http://cdn2.163189.xyz/live/gdty/stream.m3u8$LR•IPV4•109『线路13』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-24.ctv$LR•IPV4•109『线路14』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-5.m3u8$LR•IPV4•109『线路15』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-30.m3u8$LR•IPV4•109『线路16』 -广东体育,http://125.89.163.44:8888/udp/239.77.0.112:5146$LR•IPV4•109『线路17』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-19.m3u8$LR•IPV4•109『线路18』 -广东体育,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=6559&tk=a0c4f6cfaba3$LR•IPV4•109『线路19』 -广东体育,http://119.32.12.17:2901/udp/224.1.100.34:11111$LR•IPV4•109『线路20』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-7.m3u8$LR•IPV4•109『线路21』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-18.m3u8$LR•IPV4•109『线路22』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-38.ctv$LR•IPV4•109『线路23』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-6.ctv$LR•IPV4•109『线路24』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-12.ctv$LR•IPV4•109『线路25』 -广东体育,http://api3.52tb.xyz/info?id=413&token=20221127jxwhhemby$LR•IPV4•109『线路26』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu.m3u8$LR•IPV4•109『线路27』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-17.m3u8$LR•IPV4•109『线路28』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-5.ctv$LR•IPV4•109『线路29』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-13.m3u8$LR•IPV4•109『线路30』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing.m3u8$LR•IPV4•109『线路31』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-15.ctv$LR•IPV4•109『线路32』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-23.ctv$LR•IPV4•109『线路33』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-13.m3u8$LR•IPV4•109『线路34』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-17.m3u8$LR•IPV4•109『线路35』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-14.ctv$LR•IPV4•109『线路36』 -广东体育,http://qjrhc.jydjd.top:2911/udp/224.1.100.33:11111$LR•IPV4•109『线路37』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-21.m3u8$LR•IPV4•109『线路38』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-3.m3u8$LR•IPV4•109『线路39』 -广东体育,http://67.220.71.199:2347/livehttpplay?channel_id=30031$LR•IPV4•109『线路40』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-12.m3u8$LR•IPV4•109『线路41』 -广东体育,http://183.3.134.56:9901/tsfile/live/0142_1.m3u8$LR•IPV4•109『线路42』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-8.ctv$LR•IPV4•109『线路43』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-3.m3u8$LR•IPV4•109『线路44』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-10.ctv$LR•IPV4•109『线路45』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-33.ctv$LR•IPV4•109『线路46』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-5.m3u8$LR•IPV4•109『线路47』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-3.php$LR•IPV4•109『线路48』 -广东体育,https://epg.pw/stream/7b470f9fc5c305db0c8622117b7b25ca00eb35ba3e93e865cf0ff9df5c736681.m3u8$LR•IPV4•109『线路49』 -广东体育,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=8718&tk=a0c4f6cfaba3$LR•IPV4•109『线路50』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-2.m3u8$LR•IPV4•109『线路51』 -广东体育,http://67.220.71.199:2347/livehttpplay?channel_id=12028$LR•IPV4•109『线路52』 -广东体育,http://120.238.94.10:9901/tsfile/live/1012_1.m3u8$LR•IPV4•109『线路53』 -广东体育,http://120.198.101.106:9901/tsfile/live/1012_1.m3u8?key=txiptv$LR•IPV4•109『线路54』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-27.m3u8$LR•IPV4•109『线路55』 -广东体育,http://120.77.205.62:8087/rtp/239.77.1.97:5146$LR•IPV4•109『线路56』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-26.ctv$LR•IPV4•109『线路57』 -广东体育,http://63.141.230.178:82/gslb/zbdq5.m3u8?id=gdty$LR•IPV4•109『线路58』 -广东体育,http://218.15.214.115:10000/udp/239.77.0.112:5146$LR•IPV4•109『线路59』 -广东体育,http://222.128.55.152:9080/live/gdty.m3u8$LR•IPV4•109『线路60』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-17.ctv$LR•IPV4•109『线路61』 -广东体育,http://183.237.95.108:9901/tsfile/live/1033_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•109『线路62』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-18.ctv$LR•IPV4•109『线路63』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-7.ctv$LR•IPV4•109『线路64』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-4.ctv$LR•IPV4•109『线路65』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-gao-qing-2.m3u8$LR•IPV4•109『线路66』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-28.ctv$LR•IPV4•109『线路67』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-16.m3u8$LR•IPV4•109『线路68』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-4.m3u8$LR•IPV4•109『线路69』 -广东体育,http://183.11.239.36:808/hls/2/index.m3u8$LR•IPV4•109『线路70』 -广东体育,http://r.jdshipin.com/LiYdg$LR•IPV4•109『线路71』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-39.ctv$LR•IPV4•109『线路72』 -广东体育,http://bak.dou.ddns-ip.net/api.php?n=cctvxxx&id=t3ucOH&tk=zUr4K92Dl6kh$LR•IPV4•109『线路73』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-1.m3u8$LR•IPV4•109『线路74』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-8.m3u8$LR•IPV4•109『线路75』 -广东体育,http://api2.52tb.xyz/info?id=414&token=20230218qkyjia$LR•IPV4•109『线路76』 -广东体育,http://php.jdshipin.com/PLTV/iptv.php?id=gdty$LR•IPV4•109『线路77』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-16.ctv$LR•IPV4•109『线路78』 -广东体育,http://38.75.136.137:98/gslb/dsdqpub/gdty.m3u8?auth=testpub$LR•IPV4•109『线路79』 -广东体育,http://119.32.12.32:2901/udp/224.1.100.34:11111$LR•IPV4•109『线路80』 -广东体育,http://218.15.183.23:9901/tsfile/live/23012_1.m3u8$LR•IPV4•109『线路81』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-4.m3u8$LR•IPV4•109『线路82』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-1.m3u8$LR•IPV4•109『线路83』 -广东体育,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=2030&tk=a0c4f6cfaba3$LR•IPV4•109『线路84』 -广东体育,http://120.77.205.62:8087/rtp/239.77.0.168:5146$LR•IPV4•109『线路85』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-10.m3u8$LR•IPV4•109『线路86』 -广东体育,https://tv.cdn.com.mp/live/gdty/stream.m3u8$LR•IPV4•109『线路87』 -广东体育,http://120.77.205.62:8087/rtp/239.77.0.112:5146$LR•IPV4•109『线路88』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-26.m3u8$LR•IPV4•109『线路89』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-12.m3u8$LR•IPV4•109『线路90』 -广东体育,http://api2.52tb.xyz/info?id=414&token=20230218jsyklh$LR•IPV4•109『线路91』 -广东体育,http://api2.52tb.xyz/info?id=413&token=20230218qkyjia$LR•IPV4•109『线路92』 -广东体育,http://120.238.94.82:9901/tsfile/live/1012_1.m3u8$LR•IPV4•109『线路93』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-10.m3u8$LR•IPV4•109『线路94』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-9.m3u8$LR•IPV4•109『线路95』 -广东体育,http://67.220.71.199:2347/livehttpplay?channel_id=20130$LR•IPV4•109『线路96』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-30.ctv$LR•IPV4•109『线路97』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-19.m3u8$LR•IPV4•109『线路98』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-16.m3u8$LR•IPV4•109『线路99』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-20.m3u8$LR•IPV4•109『线路100』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-4.m3u8$LR•IPV4•109『线路101』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-1.m3u8$LR•IPV4•109『线路102』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-39.m3u8$LR•IPV4•109『线路103』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-15.m3u8$LR•IPV4•109『线路104』 -广东体育,http://qjrhc.jydjd.top:2911/udp/224.1.100.34:11111$LR•IPV4•109『线路105』 -广东体育,http://218.13.170.98:9901/tsfile/live/0019_1.m3u8$LR•IPV4•109『线路106』 -广东体育,http://116.77.239.26:44300/tsfile/live/0124_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•109『线路107』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-2.m3u8$LR•IPV4•109『线路108』 -广东体育,http://120.198.95.220:9901/tsfile/live/1010_1.m3u8?key=txiptv$LR•IPV4•109『线路109』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-2.flv$LR•IPV4•109『线路1』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-11.ctv$LR•IPV4•109『线路2』 +广东体育,https://hls-gateway.vpstv.net/streams/476954.m3u8$LR•IPV4•109『线路3』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-25.ctv$LR•IPV4•109『线路4』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-36.m3u8$LR•IPV4•109『线路5』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-6.m3u8$LR•IPV4•109『线路6』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-35.ctv$LR•IPV4•109『线路7』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-15.m3u8$LR•IPV4•109『线路8』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-34.ctv$LR•IPV4•109『线路9』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-24.m3u8$LR•IPV4•109『线路10』 +广东体育,http://cdn2.163189.xyz/live/gdty/stream.m3u8$LR•IPV4•109『线路11』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-24.ctv$LR•IPV4•109『线路12』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-5.m3u8$LR•IPV4•109『线路13』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-30.m3u8$LR•IPV4•109『线路14』 +广东体育,http://125.89.163.44:8888/udp/239.77.0.112:5146$LR•IPV4•109『线路15』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-19.m3u8$LR•IPV4•109『线路16』 +广东体育,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=6559&tk=a0c4f6cfaba3$LR•IPV4•109『线路17』 +广东体育,http://119.32.12.17:2901/udp/224.1.100.34:11111$LR•IPV4•109『线路18』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-7.m3u8$LR•IPV4•109『线路19』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-18.m3u8$LR•IPV4•109『线路20』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-38.ctv$LR•IPV4•109『线路21』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-6.ctv$LR•IPV4•109『线路22』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-12.ctv$LR•IPV4•109『线路23』 +广东体育,http://api3.52tb.xyz/info?id=413&token=20221127jxwhhemby$LR•IPV4•109『线路24』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu.m3u8$LR•IPV4•109『线路25』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-17.m3u8$LR•IPV4•109『线路26』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-5.ctv$LR•IPV4•109『线路27』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-13.m3u8$LR•IPV4•109『线路28』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing.m3u8$LR•IPV4•109『线路29』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-15.ctv$LR•IPV4•109『线路30』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-23.ctv$LR•IPV4•109『线路31』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-13.m3u8$LR•IPV4•109『线路32』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-17.m3u8$LR•IPV4•109『线路33』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-14.ctv$LR•IPV4•109『线路34』 +广东体育,http://qjrhc.jydjd.top:2911/udp/224.1.100.33:11111$LR•IPV4•109『线路35』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-21.m3u8$LR•IPV4•109『线路36』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-3.m3u8$LR•IPV4•109『线路37』 +广东体育,http://67.220.71.199:2347/livehttpplay?channel_id=30031$LR•IPV4•109『线路38』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-12.m3u8$LR•IPV4•109『线路39』 +广东体育,http://php.jdshipin.com/TVOD/iptv.php?id=gdty$LR•IPV4•109『线路40』 +广东体育,http://183.3.134.56:9901/tsfile/live/0142_1.m3u8$LR•IPV4•109『线路41』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-8.ctv$LR•IPV4•109『线路42』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-3.m3u8$LR•IPV4•109『线路43』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-10.ctv$LR•IPV4•109『线路44』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-33.ctv$LR•IPV4•109『线路45』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-5.m3u8$LR•IPV4•109『线路46』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-3.php$LR•IPV4•109『线路47』 +广东体育,https://epg.pw/stream/7b470f9fc5c305db0c8622117b7b25ca00eb35ba3e93e865cf0ff9df5c736681.m3u8$LR•IPV4•109『线路48』 +广东体育,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=8718&tk=a0c4f6cfaba3$LR•IPV4•109『线路49』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-2.m3u8$LR•IPV4•109『线路50』 +广东体育,http://67.220.71.199:2347/livehttpplay?channel_id=12028$LR•IPV4•109『线路51』 +广东体育,http://120.238.94.10:9901/tsfile/live/1012_1.m3u8$LR•IPV4•109『线路52』 +广东体育,http://120.198.101.106:9901/tsfile/live/1012_1.m3u8?key=txiptv$LR•IPV4•109『线路53』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-27.m3u8$LR•IPV4•109『线路54』 +广东体育,http://120.77.205.62:8087/rtp/239.77.1.97:5146$LR•IPV4•109『线路55』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-26.ctv$LR•IPV4•109『线路56』 +广东体育,http://63.141.230.178:82/gslb/zbdq5.m3u8?id=gdty$LR•IPV4•109『线路57』 +广东体育,http://218.15.214.115:10000/udp/239.77.0.112:5146$LR•IPV4•109『线路58』 +广东体育,http://222.128.55.152:9080/live/gdty.m3u8$LR•IPV4•109『线路59』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-17.ctv$LR•IPV4•109『线路60』 +广东体育,http://183.237.95.108:9901/tsfile/live/1033_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•109『线路61』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-18.ctv$LR•IPV4•109『线路62』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-7.ctv$LR•IPV4•109『线路63』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-4.ctv$LR•IPV4•109『线路64』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-gao-qing-2.m3u8$LR•IPV4•109『线路65』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-28.ctv$LR•IPV4•109『线路66』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-16.m3u8$LR•IPV4•109『线路67』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-4.m3u8$LR•IPV4•109『线路68』 +广东体育,http://183.11.239.36:808/hls/2/index.m3u8$LR•IPV4•109『线路69』 +广东体育,http://r.jdshipin.com/LiYdg$LR•IPV4•109『线路70』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-39.ctv$LR•IPV4•109『线路71』 +广东体育,http://bak.dou.ddns-ip.net/api.php?n=cctvxxx&id=t3ucOH&tk=zUr4K92Dl6kh$LR•IPV4•109『线路72』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-1.m3u8$LR•IPV4•109『线路73』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-8.m3u8$LR•IPV4•109『线路74』 +广东体育,http://api2.52tb.xyz/info?id=414&token=20230218qkyjia$LR•IPV4•109『线路75』 +广东体育,http://php.jdshipin.com/PLTV/iptv.php?id=gdty$LR•IPV4•109『线路76』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-16.ctv$LR•IPV4•109『线路77』 +广东体育,http://38.75.136.137:98/gslb/dsdqpub/gdty.m3u8?auth=testpub$LR•IPV4•109『线路78』 +广东体育,http://119.32.12.32:2901/udp/224.1.100.34:11111$LR•IPV4•109『线路79』 +广东体育,http://218.15.183.23:9901/tsfile/live/23012_1.m3u8$LR•IPV4•109『线路80』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-4.m3u8$LR•IPV4•109『线路81』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-1.m3u8$LR•IPV4•109『线路82』 +广东体育,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=2030&tk=a0c4f6cfaba3$LR•IPV4•109『线路83』 +广东体育,http://120.77.205.62:8087/rtp/239.77.0.168:5146$LR•IPV4•109『线路84』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-10.m3u8$LR•IPV4•109『线路85』 +广东体育,https://tv.cdn.com.mp/live/gdty/stream.m3u8$LR•IPV4•109『线路86』 +广东体育,http://120.77.205.62:8087/rtp/239.77.0.112:5146$LR•IPV4•109『线路87』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-26.m3u8$LR•IPV4•109『线路88』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-12.m3u8$LR•IPV4•109『线路89』 +广东体育,http://api2.52tb.xyz/info?id=414&token=20230218jsyklh$LR•IPV4•109『线路90』 +广东体育,http://api2.52tb.xyz/info?id=413&token=20230218qkyjia$LR•IPV4•109『线路91』 +广东体育,http://120.238.94.82:9901/tsfile/live/1012_1.m3u8$LR•IPV4•109『线路92』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-10.m3u8$LR•IPV4•109『线路93』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-9.m3u8$LR•IPV4•109『线路94』 +广东体育,http://67.220.71.199:2347/livehttpplay?channel_id=20130$LR•IPV4•109『线路95』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-30.ctv$LR•IPV4•109『线路96』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-19.m3u8$LR•IPV4•109『线路97』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-16.m3u8$LR•IPV4•109『线路98』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-20.m3u8$LR•IPV4•109『线路99』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-4.m3u8$LR•IPV4•109『线路100』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-1.m3u8$LR•IPV4•109『线路101』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-39.m3u8$LR•IPV4•109『线路102』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-15.m3u8$LR•IPV4•109『线路103』 +广东体育,http://qjrhc.jydjd.top:2911/udp/224.1.100.34:11111$LR•IPV4•109『线路104』 +广东体育,http://218.13.170.98:9901/tsfile/live/0019_1.m3u8$LR•IPV4•109『线路105』 +广东体育,http://116.77.239.26:44300/tsfile/live/0124_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•109『线路106』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-2.m3u8$LR•IPV4•109『线路107』 +广东体育,http://120.198.95.220:9901/tsfile/live/1010_1.m3u8?key=txiptv$LR•IPV4•109『线路108』 +广东体育,http://bxtv.3a.ink/api.php?id=gdty$LR•IPV4•109『线路109』 广东民生,http://qjrhc.jydjd.top:2911/udp/224.1.100.152:11111$LR•IPV4•55『线路1』 广东民生,http://183.11.239.36:808/hls/18/index.m3u8$LR•IPV4•55『线路2』 广东民生,http://183.237.95.108:9901/tsfile/live/1032_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•55『线路3』 @@ -2986,55 +2986,55 @@ NewTV精品体育,http://dl.wifi942.com:66/jsyd/jsyd.php?id=GITV-JS-65$LR•IPV4 新闻综合,http://111.228.4.117:6789/migu720p.php?id=651632657$LR•IPV4•115『线路68』 新闻综合,https://stream1.freetv.fun/shang-hai-xin-wen-zong-he-8.m3u8$LR•IPV4•115『线路69』 新闻综合,https://stream1.freetv.fun/ipv6-xin-wen-zong-he-10.m3u8$LR•IPV4•115『线路70』 -新闻综合,https://stream2.jlntv.cn/baicheng1/sd/live.m3u8$LR•IPV4•115『线路71』 -新闻综合,http://live.cztv.cc:85/live/xwpd.m3u8$LR•IPV4•115『线路72』 -新闻综合,http://117.156.28.119/270000001111/1110000001/index.m3u8$LR•IPV4•115『线路73』 -新闻综合,http://pili-live-hls.hebitv.com/hebi/hebi.m3u8$LR•IPV4•115『线路74』 -新闻综合,https://stream2.jlntv.cn/naxw/sd/live.m3u8$LR•IPV4•115『线路75』 -新闻综合,http://uni6rtmp.tulix.tv:1935/vbstv/vbsabr.smil/chunklist_w439903609_b1228800.m3u8$LR•IPV4•115『线路76』 -新闻综合,http://221.5.213.4:30000/1111.m3u8$LR•IPV4•115『线路77』 -新闻综合,https://stream2.jlntv.cn/jilin1/sd/live.m3u8$LR•IPV4•115『线路78』 -新闻综合,http://30515.hlsplay.aodianyun.com/lms_30515/tv_channel_239.m3u8$LR•IPV4•115『线路79』 -新闻综合,https://stream2.jlntv.cn/sptv/sd/live.m3u8$LR•IPV4•115『线路80』 -新闻综合,http://live.ahsz.tv/video/s10001-szzh/index.m3u8$LR•IPV4•115『线路81』 -新闻综合,http://guangshui.live.tempsource.cjyun.org/videotmp/s10146-GSXW.m3u8$LR•IPV4•115『线路82』 -新闻综合,https://stream2.jlntv.cn/jlyb/sd/live.m3u8$LR•IPV4•115『线路83』 -新闻综合,https://stream2.jlntv.cn/sytv/sd/live.m3u8$LR•IPV4•115『线路84』 -新闻综合,http://222.179.155.21:1935/ch1.m3u8$LR•IPV4•115『线路85』 -新闻综合,http://117.172.215.250:8083/videos/live/35/39/GQVbrgob5CGJM/GQVbrgob5CGJM.m3u8$LR•IPV4•115『线路86』 -新闻综合,http://220.180.110.101:8083/videos/live/36/57/hwEHU4UVQ1Iv5/hwEHU4UVQ1Iv5.m3u8$LR•IPV4•115『线路87』 -新闻综合,http://live.hnxttv.com:9601/live/xwzh/800K/tzwj_video.m3u8$LR•IPV4•115『线路88』 -新闻综合,http://stream.bzcm.net/2/sd/live.m3u8$LR•IPV4•115『线路89』 -新闻综合,http://117.156.28.119/270000001111/1110000145/index.m3u8$LR•IPV4•115『线路90』 -新闻综合,https://stream2.jlntv.cn/baishan1/sd/live.m3u8$LR•IPV4•115『线路91』 -新闻综合,http://live1.wuhubtv.com/channel1/sd/live.m3u8$LR•IPV4•115『线路92』 -新闻综合,http://palive.patv123.com:8091/live/xwpd_800K.m3u8$LR•IPV4•115『线路93』 -新闻综合,https://stream2.jlntv.cn/liaoyuan1/sd/live.m3u8$LR•IPV4•115『线路94』 -新闻综合,http://stream8.jlntv.cn/shulan/sd/live.m3u8?_upt=332db6421699196585$LR•IPV4•115『线路95』 -新闻综合,http://stream5.jlntv.cn/hn/sd/live.m3u8$LR•IPV4•115『线路96』 -新闻综合,http://pili-live-hls.ybcxjd.com/jdh-live/2108111201035597.m3u8?zsicd$LR•IPV4•115『线路97』 -新闻综合,http://live.spccmc.com:90/live/spxwzh.m3u8$LR•IPV4•115『线路98』 -新闻综合,http://live.iwcmt.cn:90/live/zhxw.m3u8$LR•IPV4•115『线路99』 -新闻综合,http://live.jinchuanrmt.com:90/live/zhxw.m3u8?zsicd$LR•IPV4•115『线路100』 -新闻综合,https://play.yunxya.com/channellive/xinwen.m3u8$LR•IPV4•115『线路101』 -新闻综合,http://ls.qingting.fm/live/267.m3u8$LR•IPV4•115『线路102』 -新闻综合,http://hslive.hsnewsnet.com/lsdream/hve9Wjs/1000/live.m3u8$LR•IPV4•115『线路103』 -新闻综合,https://p2.vzan.com/slowlive/596867413819827251/live.m3u8?zbid=1725814272&amp;tpid=1516989100&amp;type=0$LR•IPV4•115『线路104』 -新闻综合,https://tntgjhjb.live.sxmty.com/live/hls/3a4585ac11ec4e1bb07b419101b370c3/baf63e2b313440c2a25d7859f9b73b05-1.m3u8?zshanxd$LR•IPV4•115『线路105』 -新闻综合,http://uzoiczhh.live.sxmty.com/live/hls/0d41f1480c4042d49927858f01fde707/53130407737b417b9a6259b57246bae3.m3u8?zshanxd$LR•IPV4•115『线路106』 -新闻综合,https://ls.qingting.fm/live/5043/64k.m3u8$LR•IPV4•115『线路107』 -新闻综合,http://liveout.btzx.com.cn/62ds9e/4nxdih.m3u8?fbl=$LR•IPV4•115『线路108』 -新闻综合,http://nklive.nbs.cn/hls/d511bc9d-a694-4453-b3a2-4fc842cc97a1/index.m3u8$LR•IPV4•115『线路109』 -新闻综合,http://ls.qingting.fm/live/23797.m3u8$LR•IPV4•115『线路110』 -新闻综合,https://play.kankanlive.com/live/1720583434627241.m3u8$LR•IPV4•115『线路111』 -新闻综合,https://ls.qingting.fm/live/5022100/64k.m3u8$LR•IPV4•115『线路112』 -新闻综合,https://liveout.xntv.tv/a65jur/96iln2.m3u8?zqinghd$LR•IPV4•115『线路113』 -新闻综合,http://live.qthnews.org.cn:1935/live/live1/800k/tzwj_video.m3u8$LR•IPV4•115『线路114』 -新闻综合,http://stream.hrbtv.net/xwzh/sd/live.m3u8?zheild$LR•IPV4•115『线路115』 +新闻综合,http://stream8.jlntv.cn/shulan/sd/live.m3u8?_upt=332db6421699196585$LR•IPV4•115『线路71』 +新闻综合,http://stream5.jlntv.cn/hn/sd/live.m3u8$LR•IPV4•115『线路72』 +新闻综合,http://pili-live-hls.ybcxjd.com/jdh-live/2108111201035597.m3u8?zsicd$LR•IPV4•115『线路73』 +新闻综合,http://live.spccmc.com:90/live/spxwzh.m3u8$LR•IPV4•115『线路74』 +新闻综合,http://live.iwcmt.cn:90/live/zhxw.m3u8$LR•IPV4•115『线路75』 +新闻综合,http://live.jinchuanrmt.com:90/live/zhxw.m3u8?zsicd$LR•IPV4•115『线路76』 +新闻综合,https://play.yunxya.com/channellive/xinwen.m3u8$LR•IPV4•115『线路77』 +新闻综合,http://ls.qingting.fm/live/267.m3u8$LR•IPV4•115『线路78』 +新闻综合,http://hslive.hsnewsnet.com/lsdream/hve9Wjs/1000/live.m3u8$LR•IPV4•115『线路79』 +新闻综合,https://p2.vzan.com/slowlive/596867413819827251/live.m3u8?zbid=1725814272&amp;tpid=1516989100&amp;type=0$LR•IPV4•115『线路80』 +新闻综合,https://tntgjhjb.live.sxmty.com/live/hls/3a4585ac11ec4e1bb07b419101b370c3/baf63e2b313440c2a25d7859f9b73b05-1.m3u8?zshanxd$LR•IPV4•115『线路81』 +新闻综合,http://uzoiczhh.live.sxmty.com/live/hls/0d41f1480c4042d49927858f01fde707/53130407737b417b9a6259b57246bae3.m3u8?zshanxd$LR•IPV4•115『线路82』 +新闻综合,https://ls.qingting.fm/live/5043/64k.m3u8$LR•IPV4•115『线路83』 +新闻综合,http://liveout.btzx.com.cn/62ds9e/4nxdih.m3u8?fbl=$LR•IPV4•115『线路84』 +新闻综合,http://nklive.nbs.cn/hls/d511bc9d-a694-4453-b3a2-4fc842cc97a1/index.m3u8$LR•IPV4•115『线路85』 +新闻综合,http://ls.qingting.fm/live/23797.m3u8$LR•IPV4•115『线路86』 +新闻综合,https://play.kankanlive.com/live/1720583434627241.m3u8$LR•IPV4•115『线路87』 +新闻综合,https://ls.qingting.fm/live/5022100/64k.m3u8$LR•IPV4•115『线路88』 +新闻综合,https://liveout.xntv.tv/a65jur/96iln2.m3u8?zqinghd$LR•IPV4•115『线路89』 +新闻综合,http://live.qthnews.org.cn:1935/live/live1/800k/tzwj_video.m3u8$LR•IPV4•115『线路90』 +新闻综合,http://stream.hrbtv.net/xwzh/sd/live.m3u8?zheild$LR•IPV4•115『线路91』 +新闻综合,https://stream2.jlntv.cn/baicheng1/sd/live.m3u8$LR•IPV4•115『线路92』 +新闻综合,http://live.cztv.cc:85/live/xwpd.m3u8$LR•IPV4•115『线路93』 +新闻综合,http://117.156.28.119/270000001111/1110000001/index.m3u8$LR•IPV4•115『线路94』 +新闻综合,http://pili-live-hls.hebitv.com/hebi/hebi.m3u8$LR•IPV4•115『线路95』 +新闻综合,https://stream2.jlntv.cn/naxw/sd/live.m3u8$LR•IPV4•115『线路96』 +新闻综合,http://uni6rtmp.tulix.tv:1935/vbstv/vbsabr.smil/chunklist_w439903609_b1228800.m3u8$LR•IPV4•115『线路97』 +新闻综合,http://221.5.213.4:30000/1111.m3u8$LR•IPV4•115『线路98』 +新闻综合,https://stream2.jlntv.cn/jilin1/sd/live.m3u8$LR•IPV4•115『线路99』 +新闻综合,http://30515.hlsplay.aodianyun.com/lms_30515/tv_channel_239.m3u8$LR•IPV4•115『线路100』 +新闻综合,https://stream2.jlntv.cn/sptv/sd/live.m3u8$LR•IPV4•115『线路101』 +新闻综合,http://live.ahsz.tv/video/s10001-szzh/index.m3u8$LR•IPV4•115『线路102』 +新闻综合,http://guangshui.live.tempsource.cjyun.org/videotmp/s10146-GSXW.m3u8$LR•IPV4•115『线路103』 +新闻综合,https://stream2.jlntv.cn/jlyb/sd/live.m3u8$LR•IPV4•115『线路104』 +新闻综合,https://stream2.jlntv.cn/sytv/sd/live.m3u8$LR•IPV4•115『线路105』 +新闻综合,http://222.179.155.21:1935/ch1.m3u8$LR•IPV4•115『线路106』 +新闻综合,http://117.172.215.250:8083/videos/live/35/39/GQVbrgob5CGJM/GQVbrgob5CGJM.m3u8$LR•IPV4•115『线路107』 +新闻综合,http://220.180.110.101:8083/videos/live/36/57/hwEHU4UVQ1Iv5/hwEHU4UVQ1Iv5.m3u8$LR•IPV4•115『线路108』 +新闻综合,http://live.hnxttv.com:9601/live/xwzh/800K/tzwj_video.m3u8$LR•IPV4•115『线路109』 +新闻综合,http://stream.bzcm.net/2/sd/live.m3u8$LR•IPV4•115『线路110』 +新闻综合,http://117.156.28.119/270000001111/1110000145/index.m3u8$LR•IPV4•115『线路111』 +新闻综合,https://stream2.jlntv.cn/baishan1/sd/live.m3u8$LR•IPV4•115『线路112』 +新闻综合,http://live1.wuhubtv.com/channel1/sd/live.m3u8$LR•IPV4•115『线路113』 +新闻综合,http://palive.patv123.com:8091/live/xwpd_800K.m3u8$LR•IPV4•115『线路114』 +新闻综合,https://stream2.jlntv.cn/liaoyuan1/sd/live.m3u8$LR•IPV4•115『线路115』 陕西,#genre# -西安新闻,http://stream2.xiancity.cn/xatv1/playlist.m3u8$LR•IPV4•2『线路1』 -西安新闻,http://112.46.105.20:8009/hls/28/index.m3u8$LR•IPV4•2『线路2』 +西安新闻,http://112.46.105.20:8009/hls/28/index.m3u8$LR•IPV4•2『线路1』 +西安新闻,http://stream2.xiancity.cn/xatv1/playlist.m3u8$LR•IPV4•2『线路2』 山东,#genre# 山东少儿,http://123.129.70.178:9901/tsfile/live/1004_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•16『线路1』 @@ -3171,25 +3171,25 @@ NewTV精品体育,http://dl.wifi942.com:66/jsyd/jsyd.php?id=GITV-JS-65$LR•IPV4 凤凰中文,http://120.198.95.220:9901/tsfile/live/1036_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•8『线路3』 凤凰中文,http://218.206.193.218:8888/hls/66/index.m3u8$LR•IPV4•8『线路4』 凤凰中文,http://120.198.95.220:9901/tsfile/live/1036_1.m3u8?key=txiptv$LR•IPV4•8『线路5』 -凤凰中文,http://223.110.245.139/ott.js.chinamobile.com/PLTV/3/224/3221226922/index.m3u8$LR•IPV4•8『线路6』 -凤凰中文,http://r.jdshipin.com/cCCzW$LR•IPV4•8『线路7』 -凤凰中文,http://cdn6.163189.xyz/163189/fhzw$LR•IPV4•8『线路8』 +凤凰中文,http://r.jdshipin.com/cCCzW$LR•IPV4•8『线路6』 +凤凰中文,http://cdn6.163189.xyz/163189/fhzw$LR•IPV4•8『线路7』 +凤凰中文,http://223.110.245.139/ott.js.chinamobile.com/PLTV/3/224/3221226922/index.m3u8$LR•IPV4•8『线路8』 凤凰资讯,http://api.mg.itv888.cn:8080/hls/11ef1dc70d8/index.m3u8$LR•IPV4•10『线路1』 -凤凰资讯,p3p://167.114.175.6:55331/5fffbf860003807cedf4e1016c3c3ed2$LR•IPV4•10『线路2』 -凤凰资讯,http://zmgd.zyrnet.com:8888/hls/109/index.m3u8$LR•IPV4•10『线路3』 -凤凰资讯,http://221.7.175.154:8445/tsfile/live/1021_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•10『线路4』 -凤凰资讯,http://120.198.95.220:9901/tsfile/live/1037_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•10『线路5』 -凤凰资讯,http://120.198.95.220:9901/tsfile/live/1037_1.m3u8?key=txiptv$LR•IPV4•10『线路6』 -凤凰资讯,http://223.110.245.167/ott.js.chinamobile.com/PLTV/3/224/3221226923/index.m3u8$LR•IPV4•10『线路7』 -凤凰资讯,http://r.jdshipin.com/0Rp07$LR•IPV4•10『线路8』 -凤凰资讯,http://php.jdshipin.com/TVOD/iptv.php?id=fhzx$LR•IPV4•10『线路9』 -凤凰资讯,http://cdn6.163189.xyz/163189/fhzx$LR•IPV4•10『线路10』 -凤凰香港,p3p://167.114.175.6:55331/5fe0b82c000cac9774c17f262e43314d$LR•IPV4•6『线路1』 -凤凰香港,http://122.152.202.33/s/81a8a44f/index.m3u8?id=fhhk$LR•IPV4•6『线路2』 -凤凰香港,http://223.110.245.136/PLTV/3/224/3221226975/index.m3u8$LR•IPV4•6『线路3』 -凤凰香港,http://r.jdshipin.com/yDoTN$LR•IPV4•6『线路4』 -凤凰香港,http://php.jdshipin.com/TVOD/iptv.php?id=fhhk$LR•IPV4•6『线路5』 -凤凰香港,http://cdn6.163189.xyz/163189/fhhk$LR•IPV4•6『线路6』 +凤凰资讯,http://zmgd.zyrnet.com:8888/hls/109/index.m3u8$LR•IPV4•10『线路2』 +凤凰资讯,http://221.7.175.154:8445/tsfile/live/1021_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•10『线路3』 +凤凰资讯,http://120.198.95.220:9901/tsfile/live/1037_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•10『线路4』 +凤凰资讯,http://120.198.95.220:9901/tsfile/live/1037_1.m3u8?key=txiptv$LR•IPV4•10『线路5』 +凤凰资讯,p3p://167.114.175.6:55331/5fffbf860003807cedf4e1016c3c3ed2$LR•IPV4•10『线路6』 +凤凰资讯,http://r.jdshipin.com/0Rp07$LR•IPV4•10『线路7』 +凤凰资讯,http://php.jdshipin.com/TVOD/iptv.php?id=fhzx$LR•IPV4•10『线路8』 +凤凰资讯,http://cdn6.163189.xyz/163189/fhzx$LR•IPV4•10『线路9』 +凤凰资讯,http://223.110.245.167/ott.js.chinamobile.com/PLTV/3/224/3221226923/index.m3u8$LR•IPV4•10『线路10』 +凤凰香港,http://122.152.202.33/s/81a8a44f/index.m3u8?id=fhhk$LR•IPV4•6『线路1』 +凤凰香港,p3p://167.114.175.6:55331/5fe0b82c000cac9774c17f262e43314d$LR•IPV4•6『线路2』 +凤凰香港,http://r.jdshipin.com/yDoTN$LR•IPV4•6『线路3』 +凤凰香港,http://php.jdshipin.com/TVOD/iptv.php?id=fhhk$LR•IPV4•6『线路4』 +凤凰香港,http://cdn6.163189.xyz/163189/fhhk$LR•IPV4•6『线路5』 +凤凰香港,http://223.110.245.136/PLTV/3/224/3221226975/index.m3u8$LR•IPV4•6『线路6』 TVB翡翠台,p3p://167.114.175.6:55331/653e4c02000ea0440c8c63fd3e5d709d$LR•IPV4•12『线路1』 TVB翡翠台,p3p://167.114.175.6:55331/66c04cec000a20ac2dbf03c71cf661c9$LR•IPV4•12『线路2』 TVB翡翠台,p3p://108.181.32.169:19673/6533f6560002787f2d01338b57197695$LR•IPV4•12『线路3』 @@ -3240,18 +3240,18 @@ TVBS,http://seb.sason.top/sc/tvbsxw_fhd.m3u8$LR•IPV4•13『线路13』 台视,rtmp://f13h.mine.nu/sat/tv071$LR•IPV4•10『线路6』 台视,p3p://167.114.175.6:55331/612ee2240008f3db8e0578dc59406f9e$LR•IPV4•10『线路7』 台视,p3p://167.114.175.6:55331/6223b571000a13023e78ece5030b5b05$LR•IPV4•10『线路8』 -台视,http://162.19.247.76:22222/live/taishi/index.m3u8$LR•IPV4•10『线路9』 -台视,http://38.64.72.148/hls/modn/list/4013/chunklist1.m3u8$LR•IPV4•10『线路10』 +台视,http://38.64.72.148/hls/modn/list/4013/chunklist1.m3u8$LR•IPV4•10『线路9』 +台视,http://162.19.247.76:22222/live/taishi/index.m3u8$LR•IPV4•10『线路10』 民视新闻,http://38.64.72.148:80/hls/modn/list/4012/chunklist0.m3u8$LR•IPV4•4『线路1』 民视新闻,http://38.64.72.148:80/hls/modn/list/4012/chunklist1.m3u8$LR•IPV4•4『线路2』 民视新闻,http://38.64.72.148/hls/modn/list/4012/chunklist0.m3u8$LR•IPV4•4『线路3』 民视新闻,http://38.64.72.148/hls/modn/list/4012/chunklist1.m3u8$LR•IPV4•4『线路4』 耀才财经,https://v3.mediacast.hk/webcast/bshdlive-pc/playlist.m3u8$LR•IPV4•3『线路1』 -耀才财经,http://202.69.67.66:443/webcast/bshdlive-mobile/playlist.m3u8$LR•IPV4•3『线路2』 -耀才财经,https://v3.mediacast.hk/webcast/bshdlive-pc/chunklist_w99771165.m3u8$LR•IPV4•3『线路3』 -美亚C+,http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/01.m3u8$LR•IPV4•3『线路1』 -美亚C+,http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/02.m3u8$LR•IPV4•3『线路2』 -美亚C+,http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/03.m3u8$LR•IPV4•3『线路3』 +耀才财经,https://v3.mediacast.hk/webcast/bshdlive-pc/chunklist_w99771165.m3u8$LR•IPV4•3『线路2』 +耀才财经,http://202.69.67.66:443/webcast/bshdlive-mobile/playlist.m3u8$LR•IPV4•3『线路3』 +美亚C+,http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/03.m3u8$LR•IPV4•3『线路1』 +美亚C+,http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/01.m3u8$LR•IPV4•3『线路2』 +美亚C+,http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/02.m3u8$LR•IPV4•3『线路3』 数位电影,p3p://167.114.175.6:55331/6223ae1b0007136f3e5c44280e3300fa$LR•IPV4 龙华偶像,http://cdn8.163189.xyz/163189/lhox$LR•IPV4•3『线路1』 龙华偶像,p3p://167.114.175.6:55331/609bb1b0000732744f174daa791d3b43$LR•IPV4•3『线路2』 @@ -3261,31 +3261,31 @@ TVBS,http://seb.sason.top/sc/tvbsxw_fhd.m3u8$LR•IPV4•13『线路13』 龙华经典,https://cdn8.163189.xyz/live/lhjd/stream.m3u8$LR•IPV4•3『线路3』 纬来日本,rtmp://f13h.mine.nu/sat/tv771$LR•IPV4•2『线路1』 纬来日本,p3p://167.114.175.6:55331/5fe1add80007bbbd788125c43bf36060$LR•IPV4•2『线路2』 -纬来体育,rtmp://f13h.mine.nu:1935/sat/tv721$LR•IPV4•25『线路1』 -纬来体育,http://211.72.65.236:8585/.m3u8$LR•IPV4•25『线路2』 -纬来体育,rtmp://f13h.mine.nu/sat/tv721$LR•IPV4•25『线路3』 -纬来体育,http://125.227.210.55:8155/VideoInput/play.ts$LR•IPV4•25『线路4』 -纬来体育,https://stream1.freetv.fun/wei-lai-ti-yu-9.ctv$LR•IPV4•25『线路5』 -纬来体育,https://epg.pw/stream/ab6df63b64d0cc44a1f4f029ed847a26fa54a7aebd455578fb05a63f02c22f4b.m3u8$LR•IPV4•25『线路6』 -纬来体育,http://zb.xmzb.xyz/123.php?id=⚽马上oppppp一纬来体育$LR•IPV4•25『线路7』 -纬来体育,https://cdn.iptv8k.top/dl/jrys.php?id=292&time=20240926215313&ip=111.229.253.40$LR•IPV4•25『线路8』 -纬来体育,http://aktv_stream1.m16tv.cfd/stream/tuntun/null/AKTV.m3u8$LR•IPV4•25『线路9』 -纬来体育,https://epg.pw/stream/8855a9936e37e608a0ec8a014cce1673dee9c5d68d560da376cc92e5edef2b25.m3u8$LR•IPV4•25『线路10』 -纬来体育,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=1978&tk=e640d0a1bf70$LR•IPV4•25『线路11』 -纬来体育,https://hls-gateway.vpstv.net/streams/477026.m3u8$LR•IPV4•25『线路12』 -纬来体育,http://122.117.71.103:8562/http/61.222.53.250:8081/hls/67/809/ch28.m3u8$LR•IPV4•25『线路13』 -纬来体育,https://epg.pw/stream/4f18dfe0593db5c686eb64ae8edaf2a9202d4d46bdc9bbde2cee27708e12ea01.m3u8$LR•IPV4•25『线路14』 -纬来体育,https://cdn.iptv8k.top/dl/jrys.php?id=291&time=20240926215313&ip=111.229.253.40$LR•IPV4•25『线路15』 -纬来体育,https://hls.iill.top/api/wlty/index.m3u8$LR•IPV4•25『线路16』 -纬来体育,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=2056&tk=e640d0a1bf70$LR•IPV4•25『线路17』 -纬来体育,http://aktv_stream1.m16tv.cfd/stream/aktv3/null-1/AKTV.m3u8$LR•IPV4•25『线路18』 -纬来体育,https://stream1.freetv.fun/wei-lai-ti-yu-3.m3u8$LR•IPV4•25『线路19』 -纬来体育,http://148.135.34.95/mn.php?playurl=http://www.pelotas.org:8278/videolandsport/playlist.m3u8$LR•IPV4•25『线路20』 -纬来体育,http://api3.52tb.xyz/info?id=376&token=20221127jxwhhemby$LR•IPV4•25『线路21』 -纬来体育,https://smart.pendy.dpdns.org/Smart.php?id=videolandsport$LR•IPV4•25『线路22』 -纬来体育,https://cdn.iptv8k.top/dl/jrys.php?id=292&time=20240926215313&ip=111.229.253.40$LR•IPV4•25『线路23』 -纬来体育,http://api.mytv666.top/api/qwt.php?t=体育频道&id=纬来体育$LR•IPV4•25『线路24』 -纬来体育,http://aktv.top/AKTV/live/aktv3/null-1/AKTV.m3u8$LR•IPV4•25『线路25』 +纬来体育,https://epg.pw/stream/ab6df63b64d0cc44a1f4f029ed847a26fa54a7aebd455578fb05a63f02c22f4b.m3u8$LR•IPV4•25『线路1』 +纬来体育,http://zb.xmzb.xyz/123.php?id=⚽马上oppppp一纬来体育$LR•IPV4•25『线路2』 +纬来体育,https://cdn.iptv8k.top/dl/jrys.php?id=292&time=20240926215313&ip=111.229.253.40$LR•IPV4•25『线路3』 +纬来体育,http://aktv_stream1.m16tv.cfd/stream/tuntun/null/AKTV.m3u8$LR•IPV4•25『线路4』 +纬来体育,https://epg.pw/stream/8855a9936e37e608a0ec8a014cce1673dee9c5d68d560da376cc92e5edef2b25.m3u8$LR•IPV4•25『线路5』 +纬来体育,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=1978&tk=e640d0a1bf70$LR•IPV4•25『线路6』 +纬来体育,https://hls-gateway.vpstv.net/streams/477026.m3u8$LR•IPV4•25『线路7』 +纬来体育,http://122.117.71.103:8562/http/61.222.53.250:8081/hls/67/809/ch28.m3u8$LR•IPV4•25『线路8』 +纬来体育,https://epg.pw/stream/4f18dfe0593db5c686eb64ae8edaf2a9202d4d46bdc9bbde2cee27708e12ea01.m3u8$LR•IPV4•25『线路9』 +纬来体育,https://cdn.iptv8k.top/dl/jrys.php?id=291&time=20240926215313&ip=111.229.253.40$LR•IPV4•25『线路10』 +纬来体育,https://hls.iill.top/api/wlty/index.m3u8$LR•IPV4•25『线路11』 +纬来体育,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=2056&tk=e640d0a1bf70$LR•IPV4•25『线路12』 +纬来体育,http://aktv_stream1.m16tv.cfd/stream/aktv3/null-1/AKTV.m3u8$LR•IPV4•25『线路13』 +纬来体育,https://stream1.freetv.fun/wei-lai-ti-yu-3.m3u8$LR•IPV4•25『线路14』 +纬来体育,http://148.135.34.95/mn.php?playurl=http://www.pelotas.org:8278/videolandsport/playlist.m3u8$LR•IPV4•25『线路15』 +纬来体育,http://api3.52tb.xyz/info?id=376&token=20221127jxwhhemby$LR•IPV4•25『线路16』 +纬来体育,https://smart.pendy.dpdns.org/Smart.php?id=videolandsport$LR•IPV4•25『线路17』 +纬来体育,https://cdn.iptv8k.top/dl/jrys.php?id=292&time=20240926215313&ip=111.229.253.40$LR•IPV4•25『线路18』 +纬来体育,http://api.mytv666.top/api/qwt.php?t=体育频道&id=纬来体育$LR•IPV4•25『线路19』 +纬来体育,http://aktv.top/AKTV/live/aktv3/null-1/AKTV.m3u8$LR•IPV4•25『线路20』 +纬来体育,rtmp://f13h.mine.nu:1935/sat/tv721$LR•IPV4•25『线路21』 +纬来体育,http://211.72.65.236:8585/.m3u8$LR•IPV4•25『线路22』 +纬来体育,rtmp://f13h.mine.nu/sat/tv721$LR•IPV4•25『线路23』 +纬来体育,http://125.227.210.55:8155/VideoInput/play.ts$LR•IPV4•25『线路24』 +纬来体育,https://stream1.freetv.fun/wei-lai-ti-yu-9.ctv$LR•IPV4•25『线路25』 中视闽南,rtmp://f13h.mine.nu/sat/tv091$LR•IPV4 中视新闻,https://raw.githubusercontent.com/ChiSheng9/iptv/master/TV09.m3u8$LR•IPV4 中天娱乐,http://61.221.215.25:8800/hls/47/index.m3u8$LR•IPV4 @@ -3394,12 +3394,12 @@ Now剧集,p3p://167.114.175.6:55331/63ed3e1500077d30e7f449055a0846ce$LR•IPV4 民视,https://raw.githubusercontent.com/ChiSheng9/iptv/master/TV17.m3u8$LR•IPV4•2『线路1』 民视,rtmp://f13h.mine.nu/sat/tv051$LR•IPV4•2『线路2』 MoMo综合,p3p://167.114.175.6:55331/621e17750005eaa02887cb6e61ea2a58$LR•IPV4 -ELEVEN体育1,https://smart.pendy.dpdns.org/Smart.php?id=eltasport1_twn$LR•IPV4•3『线路1』 -ELEVEN体育1,rtmp://f13h.mine.nu/sat/tv731$LR•IPV4•3『线路2』 -ELEVEN体育1,https://stream1.freetv.fun/eltaai-er-da-ti-yu--1--wj-1.ctv$LR•IPV4•3『线路3』 -ELEVEN体育2,https://smart.pendy.dpdns.org/Smart.php?id=eltasport2_twn$LR•IPV4•3『线路1』 -ELEVEN体育2,rtmp://f13h.mine.nu/sat/tv741$LR•IPV4•3『线路2』 -ELEVEN体育2,https://stream1.freetv.fun/eltaai-er-da-ti-yu--2--wj-1.ctv$LR•IPV4•3『线路3』 +ELEVEN体育1,https://stream1.freetv.fun/eltaai-er-da-ti-yu--1--wj-1.ctv$LR•IPV4•3『线路1』 +ELEVEN体育1,https://smart.pendy.dpdns.org/Smart.php?id=eltasport1_twn$LR•IPV4•3『线路2』 +ELEVEN体育1,rtmp://f13h.mine.nu/sat/tv731$LR•IPV4•3『线路3』 +ELEVEN体育2,https://stream1.freetv.fun/eltaai-er-da-ti-yu--2--wj-1.ctv$LR•IPV4•3『线路1』 +ELEVEN体育2,https://smart.pendy.dpdns.org/Smart.php?id=eltasport2_twn$LR•IPV4•3『线路2』 +ELEVEN体育2,rtmp://f13h.mine.nu/sat/tv741$LR•IPV4•3『线路3』 半岛新闻,http://live-hls-web-aje.getaj.net/AJE/01.m3u8$LR•IPV4•4『线路1』 半岛新闻,https://live-hls-web-aje.getaj.net/AJE/01.m3u8$LR•IPV4•4『线路2』 半岛新闻,https://live-hls-web-aje.getaj.net/AJE/02.m3u8$LR•IPV4•4『线路3』 @@ -3434,10 +3434,10 @@ RTHK32,http://php.jdshipin.com:8880/TVOD/iptv.php?id=rthk32$LR•IPV4 东森超视,rtmp://f13h.mine.nu/sat/tv331$LR•IPV4•3『线路3』 ROCK Action,p3p://167.114.175.6:55331/65ad274400000b46bd92da681fce74f2$LR•IPV4•2『线路1』 ROCK Action,http://nmk.ioapk.com:5050/4gtv-live138/index.m3u8$LR•IPV4•2『线路2』 -TVB Plus,http://rihou.cc:555/tv/[Pd]Plus综合$LR•IPV4•4『线路1』 -TVB Plus,p3p://167.114.175.6:55331/6649bce20008d56453eeebfc022701f1$LR•IPV4•4『线路2』 -TVB Plus,p3p://167.114.175.6:55331/653e4d3e000b344f0c91357e73163f82$LR•IPV4•4『线路3』 -TVB Plus,http://r.jdshipin.com/ndGgS$LR•IPV4•4『线路4』 +TVB Plus,http://r.jdshipin.com/ndGgS$LR•IPV4•4『线路1』 +TVB Plus,http://rihou.cc:555/tv/[Pd]Plus综合$LR•IPV4•4『线路2』 +TVB Plus,p3p://167.114.175.6:55331/6649bce20008d56453eeebfc022701f1$LR•IPV4•4『线路3』 +TVB Plus,p3p://167.114.175.6:55331/653e4d3e000b344f0c91357e73163f82$LR•IPV4•4『线路4』 AXN,p3p://167.114.175.6:55331/66d23a53000d25d573c606e3274f26c5$LR•IPV4•24『线路1』 AXN,p3p://167.114.175.6:55331/6258ddc5000ee8a40e1bc8f50dec545c$LR•IPV4•24『线路2』 AXN,http://45.190.28.50/AXN_HD/index.m3u8$LR•IPV4•24『线路3』 @@ -3463,8 +3463,8 @@ AXN,http://88.212.15.19/live/test_white/playlist.m3u8$LR•IPV4•24『线路22 AXN,http://50.7.120.34:8080/AXN_WHITE/index.m3u8$LR•IPV4•24『线路23』 AXN,http://103.137.83.62:9090/play/21/index.m3u8$LR•IPV4•24『线路24』 娱乐新闻,https://hls-gateway.vpstv.net/streams/708904.m3u8$LR•IPV4 -澳门卫视,http://php.jdshipin.com:8880/TVOD/iptv.php?id=as$LR•IPV4•2『线路1』 -澳门卫视,http://61.244.22.4/ch1/ch1.live/playlist.m3u8$LR•IPV4•2『线路2』 +澳门卫视,http://61.244.22.4/ch1/ch1.live/playlist.m3u8$LR•IPV4•2『线路1』 +澳门卫视,http://php.jdshipin.com:8880/TVOD/iptv.php?id=as$LR•IPV4•2『线路2』 Pet Club TV,https://cdn-apse1-prod.tsv2.amagi.tv/linear/amg01076-lightningintern-petclub-samsungnz/playlist.m3u8$LR•IPV4•2『线路1』 Pet Club TV,https://petclub-samsungaus.amagi.tv/playlist.m3u8$LR•IPV4•2『线路2』 Bloomberg TV Asia,http://210.210.155.37/dr9445/h/h03/index.m3u8$LR•IPV4•3『线路1』 @@ -3553,8 +3553,8 @@ KPop,https://ads.its-newid.net/api/manifest.m3u8?ads.service_id=USAJ3000013FJ&ch KPop,https://ads.its-newid.net/api/manifest.m3u8?ads.service_id=GB17000088V&channel_id=newid_086&tp=samsung_tvplus$LR•IPV4•5『线路4』 KPop,https://lotus.stingray.com/manifest/ose-317ads-montreal/samsungtvplus/master.m3u8$LR•IPV4•5『线路5』 HOY TV,p3p://167.114.175.6:55331/62184bc3000cd48f11e47b06202b7e18$LR•IPV4•3『线路1』 -HOY TV,https://hoytv-live-stream.hoy.tv/ch77/index.m3u8$LR•IPV4•3『线路2』 -HOY TV,http://php.jdshipin.com/TVOD/iptv.php?id=hoytv$LR•IPV4•3『线路3』 +HOY TV,http://php.jdshipin.com/TVOD/iptv.php?id=hoytv$LR•IPV4•3『线路2』 +HOY TV,https://hoytv-live-stream.hoy.tv/ch77/index.m3u8$LR•IPV4•3『线路3』 MOMOTV,rtmp://f13h.mine.nu/sat/tv761$LR•IPV4 大爱1,p3p://167.114.175.6:55331/63ed9fff00076875e972c31c79f4152e$LR•IPV4 大爱2,p3p://167.114.175.6:55331/63eda04a0001f6fae973e6a334696980$LR•IPV4 @@ -3588,10 +3588,10 @@ Xite Hits,https://d726x48n2pd5h.cloudfront.net/v1/master/3722c60a815c199d9c0ef36 Xite Hits,https://amg01243-xitenetworksint-hitsuk-samsunguk-mvovq.amagi.tv/playlist/amg01243-xitenetworksint-hitsuk-samsunguk/playlist.m3u8$LR•IPV4•3『线路3』 Xite Rock,https://d198ro05q94rc4.cloudfront.net/XITE_Rock_On.m3u8$LR•IPV4 FIGHT SPORTS,p3p://167.114.175.6:55331/65a4480e000eb9449aeb1d5a33663b73$LR•IPV4 -NBA TV,http://170.yfvodcdn.com:19980/live/nbaTV2/hls.m3u8$LR•IPV4•6『线路1』 -NBA TV,p3p://167.114.175.6:55331/65a587500007bc039fca3566638e69af$LR•IPV4•6『线路2』 -NBA TV,https://stream1.freetv.fun/nba-tv-7.m3u8$LR•IPV4•6『线路3』 -NBA TV,https://stream1.freetv.fun/nba-tv-5.m3u8$LR•IPV4•6『线路4』 +NBA TV,https://stream1.freetv.fun/nba-tv-7.m3u8$LR•IPV4•6『线路1』 +NBA TV,https://stream1.freetv.fun/nba-tv-5.m3u8$LR•IPV4•6『线路2』 +NBA TV,http://170.yfvodcdn.com:19980/live/nbaTV2/hls.m3u8$LR•IPV4•6『线路3』 +NBA TV,p3p://167.114.175.6:55331/65a587500007bc039fca3566638e69af$LR•IPV4•6『线路4』 NBA TV,https://amg00556-amg00556c3-firetv-us-6060.playouts.now.amagi.tv/playlist.m3u8$LR•IPV4•6『线路5』 NBA TV,http://user.scalecdn.co:8080/live/54706135/09221986/3092.m3u8$LR•IPV4•6『线路6』 Sukan,https://d25tgymtnqzu8s.cloudfront.net/smil:sukan/manifest.mpd$LR•IPV4 @@ -3797,8 +3797,8 @@ FIFA+,https://d63fabad.wurl.com/master/f36d25e7e52f1ba8d7e56eb859c636563214f541/ FIFA+,https://d2w9q46ikgrcwx.cloudfront.net/v1/master/3722c60a815c199d9c0ef36c5b73da68a62b09d1/cc-of5cbk3sav3w5/v1/sysdata_s_p_a_fifa_7/samsungheadend_us/latest/main/hls/playlist.m3u8$LR•IPV4•9『线路8』 FIFA+,https://cffda8ff.wurl.com/master/f36d25e7e52f1ba8d7e56eb859c636563214f541/U2Ftc3VuZy1nYl9GSUZBUGx1c3dvbWVuX0hMUw/playlist.m3u8$LR•IPV4•9『线路9』 Newsmax,https://nmx1ota.akamaized.net/hls/live/2107010/Live_1/3.m3u8$LR•IPV4•8『线路1』 -Newsmax,https://nmxlive.akamaized.net/hls/live/529965/Live_1/index.m3u8$LR•IPV4•8『线路2』 -Newsmax,http://nmxlive.akamaized.net/hls/live/529965/Live_1/index.m3u8$LR•IPV4•8『线路3』 +Newsmax,http://nmxlive.akamaized.net/hls/live/529965/Live_1/index.m3u8$LR•IPV4•8『线路2』 +Newsmax,https://nmxlive.akamaized.net/hls/live/529965/Live_1/index.m3u8$LR•IPV4•8『线路3』 Newsmax,https://2-fss-2.streamhoster.com/pl_120/206858-4404556-1/playlist.m3u8$LR•IPV4•8『线路4』 Newsmax,https://amg00217-newsmax-newsmax-zeasn-022k9.amagi.tv/playlist.m3u8$LR•IPV4•8『线路5』 Newsmax,https://newsmaxadria.mts-si.tv/newsmaxadria/index.m3u8$LR•IPV4•8『线路6』 @@ -3870,10 +3870,10 @@ MovieSphere,https://amg00353-lionsgatestudio-moviesphere-xumo-zh5u0.amagi.tv/pla MovieSphere,https://amg00353-lionsgatefilmsi-moviesphereaus-samsungau-7qzhf.amagi.tv/playlist/amg00353-lionsgatefilmsi-moviesphereaus-samsungau/playlist.m3u8$LR•IPV4•5『线路4』 MovieSphere,https://jmp2.uk/plu-64a3d96f060e830008af6745.m3u8$LR•IPV4•5『线路5』 香港国际财经,p3p://167.114.175.6:55331/64838620000cd8ed32fb0d6a414411f7$LR•IPV4 -Bloomberg,https://bloomberg-bloombergtv-3-nl.samsung.wurl.tv/playlist.m3u8$LR•IPV4•16『线路1』 -Bloomberg,https://bloomberg-bloombergtv-5-eu.plex.wurl.tv/3ea2c48ba0034cc276591c94a5b439c0.m3u8$LR•IPV4•16『线路2』 -Bloomberg,https://liveprodusphoenixeast.akamaized.net/USPhx-HD/Channel-TX-USPhx-AWS-virginia-1/Source-USPhx-16k-1-s6lk2-BP-07-02-81ykIWnsMsg_live.m3u8$LR•IPV4•16『线路3』 -Bloomberg,https://epg.pw/stream/d2edf469b9079064a283f4b0811cbf6f2597ebbb3d08dcf77036a4b5a791b7cf.m3u8$LR•IPV4•16『线路4』 +Bloomberg,https://epg.pw/stream/d2edf469b9079064a283f4b0811cbf6f2597ebbb3d08dcf77036a4b5a791b7cf.m3u8$LR•IPV4•16『线路1』 +Bloomberg,https://bloomberg-bloombergtv-3-nl.samsung.wurl.tv/playlist.m3u8$LR•IPV4•16『线路2』 +Bloomberg,https://bloomberg-bloombergtv-5-eu.plex.wurl.tv/3ea2c48ba0034cc276591c94a5b439c0.m3u8$LR•IPV4•16『线路3』 +Bloomberg,https://liveprodusphoenixeast.akamaized.net/USPhx-HD/Channel-TX-USPhx-AWS-virginia-1/Source-USPhx-16k-1-s6lk2-BP-07-02-81ykIWnsMsg_live.m3u8$LR•IPV4•16『线路4』 Bloomberg,https://ciner.daioncdn.net/bloomberght/bloomberght.m3u8$LR•IPV4•16『线路5』 Bloomberg,http://23.237.104.106:8080/USA_BLOOMBERG/index.m3u8$LR•IPV4•16『线路6』 Bloomberg,https://bloomberg.com/media-manifest/streams/aus.m3u8$LR•IPV4•16『线路7』 diff --git a/cluntop_tvbox/lib/iptv_test.m3u b/cluntop_tvbox/lib/iptv_test.m3u index a28a16f6..5776f5e7 100755 --- a/cluntop_tvbox/lib/iptv_test.m3u +++ b/cluntop_tvbox/lib/iptv_test.m3u @@ -1,8 +1,8 @@ #EXTM3U #EXTINF:-1 tvg-id="CCTV4K" tvg-name="CCTV4K" group-title="央视频道",CCTV-4K -https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4k_mbd.m3u8?auth_key=1784322000-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-aa68fb06c12f53b71a4d170807f32df5&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•3『线路1』 +https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4k_mbd.m3u8?auth_key=1784329200-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-81ad4aefc95ce528b3da1112f0bc9ff2&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•3『线路1』 #EXTINF:-1 tvg-id="CCTV4K" tvg-name="CCTV4K" group-title="央视频道",CCTV-4K -https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4k_mbd.m3u8?auth_key=1784325600-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-da48bbac79b9621fa8f084ece04c2c91&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•3『线路2』 +https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4k_mbd.m3u8?auth_key=1784322000-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-aa68fb06c12f53b71a4d170807f32df5&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•3『线路2』 #EXTINF:-1 tvg-id="CCTV4K" tvg-name="CCTV4K" group-title="央视频道",CCTV-4K http://198.204.240.250:82/live/cctv4k.m3u8$LR•IPV4•3『线路3』 #EXTINF:-1 tvg-id="象山综合" tvg-name="象山综合" group-title="浙江频道",象山综合 @@ -92,9 +92,9 @@ http://php.jdshipin.com:8880/TVOD/iptv.php?id=rthk32$LR•IPV4 #EXTINF:-1 tvg-id="韩国EBS少儿" tvg-name="韩国EBS少儿" group-title="动画频道",韩国EBS少儿 http://ebsonairios.ebs.co.kr/ebsutablet500k/tablet500k/playlist.m3u8$LR•IPV4 #EXTINF:-1 tvg-id="七龙珠" tvg-name="七龙珠" group-title="动画频道",七龙珠 -http://103.193.151.146/huya.php?id=11601966$LR•IPV4•2『线路1』 +https://live.metshop.top/huya/11601966$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="七龙珠" tvg-name="七龙珠" group-title="动画频道",七龙珠 -https://live.metshop.top/huya/11601966$LR•IPV4•2『线路2』 +http://103.193.151.146/huya.php?id=11601966$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="哆啦A梦" tvg-name="哆啦A梦" group-title="动画频道",哆啦A梦 http://103.193.151.146/huya.php?id=11601963$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="哆啦A梦" tvg-name="哆啦A梦" group-title="动画频道",哆啦A梦 @@ -138,23 +138,23 @@ http://zzy789.xyz/douyu1.php?id=6863367$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="经典剧集" tvg-name="经典剧集" group-title="斗鱼影视",经典剧集 http://www.goodiptv.club/douyu/6863367$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="热门港剧" tvg-name="热门港剧" group-title="斗鱼影视",热门港剧 -http://zzy789.xyz/douyu1.php?id=5522351$LR•IPV4•3『线路1』 +http://www.goodiptv.club/douyu/5522351$LR•IPV4•3『线路1』 #EXTINF:-1 tvg-id="热门港剧" tvg-name="热门港剧" group-title="斗鱼影视",热门港剧 -http://huanqiuzhibo.cn/manifest/douyu.php?id=5522351$LR•IPV4•3『线路2』 +http://zzy789.xyz/douyu1.php?id=5522351$LR•IPV4•3『线路2』 #EXTINF:-1 tvg-id="热门港剧" tvg-name="热门港剧" group-title="斗鱼影视",热门港剧 -http://www.goodiptv.club/douyu/5522351$LR•IPV4•3『线路3』 +http://huanqiuzhibo.cn/manifest/douyu.php?id=5522351$LR•IPV4•3『线路3』 #EXTINF:-1 tvg-id="贝爷求生" tvg-name="贝爷求生" group-title="斗鱼影视",贝爷求生 -https://stream1.freetv.fun/f92ea9cae12af707c587af406ddb929ea9f58aae893845b713679aab4b1df9f8.ctv$LR•IPV4•6『线路1』 +http://www.goodiptv.club/douyu/9661369$LR•IPV4•6『线路1』 #EXTINF:-1 tvg-id="贝爷求生" tvg-name="贝爷求生" group-title="斗鱼影视",贝爷求生 -http://fy27.zbds.top:55455/douyu/9661369$LR•IPV4•6『线路2』 +https://stream1.freetv.fun/f92ea9cae12af707c587af406ddb929ea9f58aae893845b713679aab4b1df9f8.ctv$LR•IPV4•6『线路2』 #EXTINF:-1 tvg-id="贝爷求生" tvg-name="贝爷求生" group-title="斗鱼影视",贝爷求生 -https://www.goodiptv.club/douyu/9661369$LR•IPV4•6『线路3』 +http://fy27.zbds.top:55455/douyu/9661369$LR•IPV4•6『线路3』 #EXTINF:-1 tvg-id="贝爷求生" tvg-name="贝爷求生" group-title="斗鱼影视",贝爷求生 -http://159.75.85.63:35455/douyu/454867$LR•IPV4•6『线路4』 +https://www.goodiptv.club/douyu/9661369$LR•IPV4•6『线路4』 #EXTINF:-1 tvg-id="贝爷求生" tvg-name="贝爷求生" group-title="斗鱼影视",贝爷求生 -http://zzy789.xyz/douyu1.php?id=454867$LR•IPV4•6『线路5』 +http://159.75.85.63:35455/douyu/454867$LR•IPV4•6『线路5』 #EXTINF:-1 tvg-id="贝爷求生" tvg-name="贝爷求生" group-title="斗鱼影视",贝爷求生 -http://www.goodiptv.club/douyu/9661369$LR•IPV4•6『线路6』 +http://zzy789.xyz/douyu1.php?id=454867$LR•IPV4•6『线路6』 #EXTINF:-1 tvg-id="少年包青天第一部" tvg-name="少年包青天第一部" group-title="电视剧频道",少年包青天第一部 https://live.ottiptv.cc/yy/1356043677$LR•IPV4 #EXTINF:-1 tvg-id="少年包青天第三部" tvg-name="少年包青天第三部" group-title="电视剧频道",少年包青天第三部 @@ -168,9 +168,9 @@ https://live.ottiptv.cc/huya/29580970$LR•IPV4 #EXTINF:-1 tvg-id="特种兵之火凤凰" tvg-name="特种兵之火凤凰" group-title="电视剧频道",特种兵之火凤凰 https://live.ottiptv.cc/huya/29982636$LR•IPV4 #EXTINF:-1 tvg-id="士兵突击" tvg-name="士兵突击" group-title="电视剧频道",士兵突击 -https://live.metshop.top/huya/11342430$LR•IPV4•2『线路1』 +https://live.ottiptv.cc/huya/11342430$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="士兵突击" tvg-name="士兵突击" group-title="电视剧频道",士兵突击 -https://live.ottiptv.cc/huya/11342430$LR•IPV4•2『线路2』 +https://live.metshop.top/huya/11342430$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="天龙八部" tvg-name="天龙八部" group-title="电视剧频道",天龙八部 https://live.ottiptv.cc/yy/1351814644$LR•IPV4 #EXTINF:-1 tvg-id="倚天屠龙记" tvg-name="倚天屠龙记" group-title="电视剧频道",倚天屠龙记 @@ -178,9 +178,9 @@ http://cdn.jdshipin.com:8880/huya.php?id=23734246$LR•IPV4 #EXTINF:-1 tvg-id="康熙王朝" tvg-name="康熙王朝" group-title="电视剧频道",康熙王朝 https://live.ottiptv.cc/huya/11352940$LR•IPV4 #EXTINF:-1 tvg-id="庆余年" tvg-name="庆余年" group-title="电视剧频道",庆余年 -http://58.39.190.143:35455/huya/11352960$LR•IPV4•2『线路1』 +https://live.ottiptv.cc/huya/11352960$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="庆余年" tvg-name="庆余年" group-title="电视剧频道",庆余年 -https://live.ottiptv.cc/huya/11352960$LR•IPV4•2『线路2』 +http://58.39.190.143:35455/huya/11352960$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="鬼吹灯之精绝古城" tvg-name="鬼吹灯之精绝古城" group-title="电视剧频道",鬼吹灯之精绝古城 https://live.ottiptv.cc/huya/11352871$LR•IPV4 #EXTINF:-1 tvg-id="鬼吹灯之怒晴湘西" tvg-name="鬼吹灯之怒晴湘西" group-title="电视剧频道",鬼吹灯之怒晴湘西 @@ -834,43 +834,43 @@ http://218.206.193.218:8888/hls/66/index.m3u8$LR•IPV4•8『线路4』 #EXTINF:-1 tvg-id="凤凰卫视中文台" tvg-name="凤凰卫视中文台" group-title="港澳台",凤凰卫视中文台 http://120.198.95.220:9901/tsfile/live/1036_1.m3u8?key=txiptv$LR•IPV4•8『线路5』 #EXTINF:-1 tvg-id="凤凰卫视中文台" tvg-name="凤凰卫视中文台" group-title="港澳台",凤凰卫视中文台 -http://223.110.245.139/ott.js.chinamobile.com/PLTV/3/224/3221226922/index.m3u8$LR•IPV4•8『线路6』 +http://r.jdshipin.com/cCCzW$LR•IPV4•8『线路6』 #EXTINF:-1 tvg-id="凤凰卫视中文台" tvg-name="凤凰卫视中文台" group-title="港澳台",凤凰卫视中文台 -http://r.jdshipin.com/cCCzW$LR•IPV4•8『线路7』 +http://cdn6.163189.xyz/163189/fhzw$LR•IPV4•8『线路7』 #EXTINF:-1 tvg-id="凤凰卫视中文台" tvg-name="凤凰卫视中文台" group-title="港澳台",凤凰卫视中文台 -http://cdn6.163189.xyz/163189/fhzw$LR•IPV4•8『线路8』 +http://223.110.245.139/ott.js.chinamobile.com/PLTV/3/224/3221226922/index.m3u8$LR•IPV4•8『线路8』 #EXTINF:-1 tvg-id="凤凰卫视资讯台" tvg-name="凤凰卫视资讯台" group-title="港澳台",凤凰卫视资讯台 http://api.mg.itv888.cn:8080/hls/11ef1dc70d8/index.m3u8$LR•IPV4•10『线路1』 #EXTINF:-1 tvg-id="凤凰卫视资讯台" tvg-name="凤凰卫视资讯台" group-title="港澳台",凤凰卫视资讯台 -p3p://167.114.175.6:55331/5fffbf860003807cedf4e1016c3c3ed2$LR•IPV4•10『线路2』 +http://zmgd.zyrnet.com:8888/hls/109/index.m3u8$LR•IPV4•10『线路2』 #EXTINF:-1 tvg-id="凤凰卫视资讯台" tvg-name="凤凰卫视资讯台" group-title="港澳台",凤凰卫视资讯台 -http://zmgd.zyrnet.com:8888/hls/109/index.m3u8$LR•IPV4•10『线路3』 +http://221.7.175.154:8445/tsfile/live/1021_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•10『线路3』 #EXTINF:-1 tvg-id="凤凰卫视资讯台" tvg-name="凤凰卫视资讯台" group-title="港澳台",凤凰卫视资讯台 -http://221.7.175.154:8445/tsfile/live/1021_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•10『线路4』 +http://120.198.95.220:9901/tsfile/live/1037_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•10『线路4』 #EXTINF:-1 tvg-id="凤凰卫视资讯台" tvg-name="凤凰卫视资讯台" group-title="港澳台",凤凰卫视资讯台 -http://120.198.95.220:9901/tsfile/live/1037_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•10『线路5』 +http://120.198.95.220:9901/tsfile/live/1037_1.m3u8?key=txiptv$LR•IPV4•10『线路5』 #EXTINF:-1 tvg-id="凤凰卫视资讯台" tvg-name="凤凰卫视资讯台" group-title="港澳台",凤凰卫视资讯台 -http://120.198.95.220:9901/tsfile/live/1037_1.m3u8?key=txiptv$LR•IPV4•10『线路6』 +p3p://167.114.175.6:55331/5fffbf860003807cedf4e1016c3c3ed2$LR•IPV4•10『线路6』 #EXTINF:-1 tvg-id="凤凰卫视资讯台" tvg-name="凤凰卫视资讯台" group-title="港澳台",凤凰卫视资讯台 -http://223.110.245.167/ott.js.chinamobile.com/PLTV/3/224/3221226923/index.m3u8$LR•IPV4•10『线路7』 +http://r.jdshipin.com/0Rp07$LR•IPV4•10『线路7』 #EXTINF:-1 tvg-id="凤凰卫视资讯台" tvg-name="凤凰卫视资讯台" group-title="港澳台",凤凰卫视资讯台 -http://r.jdshipin.com/0Rp07$LR•IPV4•10『线路8』 +http://php.jdshipin.com/TVOD/iptv.php?id=fhzx$LR•IPV4•10『线路8』 #EXTINF:-1 tvg-id="凤凰卫视资讯台" tvg-name="凤凰卫视资讯台" group-title="港澳台",凤凰卫视资讯台 -http://php.jdshipin.com/TVOD/iptv.php?id=fhzx$LR•IPV4•10『线路9』 +http://cdn6.163189.xyz/163189/fhzx$LR•IPV4•10『线路9』 #EXTINF:-1 tvg-id="凤凰卫视资讯台" tvg-name="凤凰卫视资讯台" group-title="港澳台",凤凰卫视资讯台 -http://cdn6.163189.xyz/163189/fhzx$LR•IPV4•10『线路10』 +http://223.110.245.167/ott.js.chinamobile.com/PLTV/3/224/3221226923/index.m3u8$LR•IPV4•10『线路10』 #EXTINF:-1 tvg-id="凤凰卫视香港台" tvg-name="凤凰卫视香港台" group-title="港澳台",凤凰卫视香港台 -p3p://167.114.175.6:55331/5fe0b82c000cac9774c17f262e43314d$LR•IPV4•6『线路1』 +http://122.152.202.33/s/81a8a44f/index.m3u8?id=fhhk$LR•IPV4•6『线路1』 #EXTINF:-1 tvg-id="凤凰卫视香港台" tvg-name="凤凰卫视香港台" group-title="港澳台",凤凰卫视香港台 -http://122.152.202.33/s/81a8a44f/index.m3u8?id=fhhk$LR•IPV4•6『线路2』 +p3p://167.114.175.6:55331/5fe0b82c000cac9774c17f262e43314d$LR•IPV4•6『线路2』 #EXTINF:-1 tvg-id="凤凰卫视香港台" tvg-name="凤凰卫视香港台" group-title="港澳台",凤凰卫视香港台 -http://223.110.245.136/PLTV/3/224/3221226975/index.m3u8$LR•IPV4•6『线路3』 +http://r.jdshipin.com/yDoTN$LR•IPV4•6『线路3』 #EXTINF:-1 tvg-id="凤凰卫视香港台" tvg-name="凤凰卫视香港台" group-title="港澳台",凤凰卫视香港台 -http://r.jdshipin.com/yDoTN$LR•IPV4•6『线路4』 +http://php.jdshipin.com/TVOD/iptv.php?id=fhhk$LR•IPV4•6『线路4』 #EXTINF:-1 tvg-id="凤凰卫视香港台" tvg-name="凤凰卫视香港台" group-title="港澳台",凤凰卫视香港台 -http://php.jdshipin.com/TVOD/iptv.php?id=fhhk$LR•IPV4•6『线路5』 +http://cdn6.163189.xyz/163189/fhhk$LR•IPV4•6『线路5』 #EXTINF:-1 tvg-id="凤凰卫视香港台" tvg-name="凤凰卫视香港台" group-title="港澳台",凤凰卫视香港台 -http://cdn6.163189.xyz/163189/fhhk$LR•IPV4•6『线路6』 +http://223.110.245.136/PLTV/3/224/3221226975/index.m3u8$LR•IPV4•6『线路6』 #EXTINF:-1 tvg-id="台视新闻" tvg-name="台视新闻" group-title="港澳台",台视新闻 http://38.64.72.148:80/hls/modn/list/4013/chunklist0.m3u8$LR•IPV4•4『线路1』 #EXTINF:-1 tvg-id="台视新闻" tvg-name="台视新闻" group-title="港澳台",台视新闻 @@ -888,25 +888,25 @@ http://183.64.181.25:40023/rongchang01.m3u8$LR•IPV4 #EXTINF:-1 tvg-id="来宾综合" tvg-name="来宾综合" group-title="☘️广西频道",来宾综合 http://zb.gxlbamc.com:1935/live/lbzh.stream/playlist.m3u8$LR•IPV4 #EXTINF:-1 tvg-id="天津" tvg-name="天津" group-title="☘️天津频道",天津 -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226954/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Eaf3wyULP1h575eM_4ByMDg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•18『线路1』 +https://piccpndks.v.kcdnvip.com/audio/tianjin_2/index.m3u8$LR•IPV4•18『线路1』 #EXTINF:-1 tvg-id="天津" tvg-name="天津" group-title="☘️天津频道",天津 -http://204.12.221.218:8181/3m1080p/tjws.m3u8$LR•IPV4•18『线路2』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226954/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Eaf3wyULP1h575eM_4ByMDg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•18『线路2』 #EXTINF:-1 tvg-id="天津" tvg-name="天津" group-title="☘️天津频道",天津 -http://107.150.60.122/live/tjwshd.m3u8$LR•IPV4•18『线路3』 +http://204.12.221.218:8181/3m1080p/tjws.m3u8$LR•IPV4•18『线路3』 #EXTINF:-1 tvg-id="天津" tvg-name="天津" group-title="☘️天津频道",天津 -http://192.151.150.154/live/tjwshd.m3u8$LR•IPV4•18『线路4』 +http://107.150.60.122/live/tjwshd.m3u8$LR•IPV4•18『线路4』 #EXTINF:-1 tvg-id="天津" tvg-name="天津" group-title="☘️天津频道",天津 -http://38.75.136.137:98/gslb/dsdqpub/tjwshd.m3u8?auth=testpub$LR•IPV4•18『线路5』 +http://192.151.150.154/live/tjwshd.m3u8$LR•IPV4•18『线路5』 #EXTINF:-1 tvg-id="天津" tvg-name="天津" group-title="☘️天津频道",天津 -http://63.141.230.178:82/gslb/zbdq5.m3u8?id=tjwshd$LR•IPV4•18『线路6』 +http://38.75.136.137:98/gslb/dsdqpub/tjwshd.m3u8?auth=testpub$LR•IPV4•18『线路6』 #EXTINF:-1 tvg-id="天津" tvg-name="天津" group-title="☘️天津频道",天津 -http://207.56.13.146:81/cdnlive/tjws.m3u8$LR•IPV4•18『线路7』 +http://63.141.230.178:82/gslb/zbdq5.m3u8?id=tjwshd$LR•IPV4•18『线路7』 #EXTINF:-1 tvg-id="天津" tvg-name="天津" group-title="☘️天津频道",天津 -http://120.198.95.220:9901/tsfile/live/1067_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•18『线路8』 +http://207.56.13.146:81/cdnlive/tjws.m3u8$LR•IPV4•18『线路8』 #EXTINF:-1 tvg-id="天津" tvg-name="天津" group-title="☘️天津频道",天津 -http://112.27.235.94:8000/hls/42/index.m3u8$LR•IPV4•18『线路9』 +http://120.198.95.220:9901/tsfile/live/1067_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•18『线路9』 #EXTINF:-1 tvg-id="天津" tvg-name="天津" group-title="☘️天津频道",天津 -https://piccpndks.v.kcdnvip.com/audio/tianjin_2/index.m3u8$LR•IPV4•18『线路10』 +http://112.27.235.94:8000/hls/42/index.m3u8$LR•IPV4•18『线路10』 #EXTINF:-1 tvg-id="天津" tvg-name="天津" group-title="☘️天津频道",天津 http://23.237.228.134/live8/tianjing.m3u8$LR•IPV4•18『线路11』 #EXTINF:-1 tvg-id="天津" tvg-name="天津" group-title="☘️天津频道",天津 @@ -1722,25 +1722,25 @@ https://stream1.freetv.fun/dazn-sport-2-1.ctv$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="DAZN2" tvg-name="DAZN2" group-title="体育频道",DAZN2 http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=5145&tk=e640d0a1bf70$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="skysports" tvg-name="skysports" group-title="体育频道",skysports -https://stream1.freetv.fun/skysports-3.ctv$LR•IPV4•8『线路1』 +https://stream1.freetv.fun/skysports-14.ctv$LR•IPV4•8『线路1』 #EXTINF:-1 tvg-id="skysports" tvg-name="skysports" group-title="体育频道",skysports -https://stream1.freetv.fun/skysports-2.ctv$LR•IPV4•8『线路2』 +https://stream1.freetv.fun/skysports-12.ctv$LR•IPV4•8『线路2』 #EXTINF:-1 tvg-id="skysports" tvg-name="skysports" group-title="体育频道",skysports -https://stream1.freetv.fun/skysports-14.ctv$LR•IPV4•8『线路3』 +https://stream1.freetv.fun/skysports-3.ctv$LR•IPV4•8『线路3』 #EXTINF:-1 tvg-id="skysports" tvg-name="skysports" group-title="体育频道",skysports -https://stream1.freetv.fun/skysports-12.ctv$LR•IPV4•8『线路4』 +https://stream1.freetv.fun/skysports-16.ctv$LR•IPV4•8『线路4』 #EXTINF:-1 tvg-id="skysports" tvg-name="skysports" group-title="体育频道",skysports -https://stream1.freetv.fun/skysports-16.ctv$LR•IPV4•8『线路5』 +https://stream1.freetv.fun/skysports-17.ctv$LR•IPV4•8『线路5』 #EXTINF:-1 tvg-id="skysports" tvg-name="skysports" group-title="体育频道",skysports -https://stream1.freetv.fun/skysports-17.ctv$LR•IPV4•8『线路6』 +https://stream1.freetv.fun/skysports-15.ctv$LR•IPV4•8『线路6』 #EXTINF:-1 tvg-id="skysports" tvg-name="skysports" group-title="体育频道",skysports -https://stream1.freetv.fun/skysports-15.ctv$LR•IPV4•8『线路7』 +https://stream1.freetv.fun/skysports-7.ctv$LR•IPV4•8『线路7』 #EXTINF:-1 tvg-id="skysports" tvg-name="skysports" group-title="体育频道",skysports -https://stream1.freetv.fun/skysports-7.ctv$LR•IPV4•8『线路8』 +https://stream1.freetv.fun/skysports-2.ctv$LR•IPV4•8『线路8』 #EXTINF:-1 tvg-id="纪晓岚" tvg-name="纪晓岚" group-title="zonghe",纪晓岚 -http://fmbox.cc/huya.php?id=11342396$LR•IPV4•2『线路1』 +https://live.ottiptv.cc/huya/11342396$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="纪晓岚" tvg-name="纪晓岚" group-title="zonghe",纪晓岚 -https://live.ottiptv.cc/huya/11342396$LR•IPV4•2『线路2』 +http://fmbox.cc/huya.php?id=11342396$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="地下交通站" tvg-name="地下交通站" group-title="zonghe",地下交通站 http://live.nctv.top/DJlio/huya.php?id=11342433$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="地下交通站" tvg-name="地下交通站" group-title="zonghe",地下交通站 @@ -2384,13 +2384,13 @@ https://streamvidex.qzz.io/videx/fox2usa/index.m3u8$LR•IPV4•8『线路7』 #EXTINF:-1 tvg-id="FOX Sports" tvg-name="FOX Sports" group-title="⚽️SPORTS",FOX Sports http://108.181.20.255:27347/livehttpplay?channel_id=23054$LR•IPV4•8『线路8』 #EXTINF:-1 tvg-id="NBA" tvg-name="NBA" group-title="⚽️SPORTS",NBA -http://170.yfvodcdn.com:19980/live/nbaTV2/hls.m3u8$LR•IPV4•8『线路1』 +https://stream1.freetv.fun/nba-tv-7.m3u8$LR•IPV4•8『线路1』 #EXTINF:-1 tvg-id="NBA" tvg-name="NBA" group-title="⚽️SPORTS",NBA -p3p://167.114.175.6:55331/65a587500007bc039fca3566638e69af$LR•IPV4•8『线路2』 +https://stream1.freetv.fun/nba-tv-5.m3u8$LR•IPV4•8『线路2』 #EXTINF:-1 tvg-id="NBA" tvg-name="NBA" group-title="⚽️SPORTS",NBA -https://stream1.freetv.fun/nba-tv-7.m3u8$LR•IPV4•8『线路3』 +http://170.yfvodcdn.com:19980/live/nbaTV2/hls.m3u8$LR•IPV4•8『线路3』 #EXTINF:-1 tvg-id="NBA" tvg-name="NBA" group-title="⚽️SPORTS",NBA -https://stream1.freetv.fun/nba-tv-5.m3u8$LR•IPV4•8『线路4』 +p3p://167.114.175.6:55331/65a587500007bc039fca3566638e69af$LR•IPV4•8『线路4』 #EXTINF:-1 tvg-id="NBA" tvg-name="NBA" group-title="⚽️SPORTS",NBA https://live-manifest.production-public.tubi.io/live/553b8d5e-fd2a-4a61-bdfa-73b34c299d75/playlist.m3u8$LR•IPV4•8『线路5』 #EXTINF:-1 tvg-id="NBA" tvg-name="NBA" group-title="⚽️SPORTS",NBA @@ -2788,19 +2788,19 @@ https://vip.ffzy-play7.com/20221129/7714_a0c75de1/index.m3u8$LR•IPV4 #EXTINF:-1 tvg-id="音乐僵尸" tvg-name="音乐僵尸" group-title="🎞️电影点播",音乐僵尸 https://vip.ffzy-play6.com/20221207/10627_09b3f2e5/index.m3u8$LR•IPV4 #EXTINF:-1 tvg-id="英雄" tvg-name="英雄" group-title="🎞️电影点播",英雄 -https://vip.ffzy-play7.com/20221227/9993_9681b67b/index.m3u8$LR•IPV4•7『线路1』 +http://cdn.jdshipin.com:8880/huya.php?id=23824164$LR•IPV4•7『线路1』 #EXTINF:-1 tvg-id="英雄" tvg-name="英雄" group-title="🎞️电影点播",英雄 -https://vip.ffzy-play.com/20221015/981_2ca5b5f9/index.m3u8$LR•IPV4•7『线路2』 +https://live.ottiptv.cc/yy/1352475619$LR•IPV4•7『线路2』 #EXTINF:-1 tvg-id="英雄" tvg-name="英雄" group-title="🎞️电影点播",英雄 -https://vip.ffzy-play6.com/20221207/10694_f9088e66/index.m3u8$LR•IPV4•7『线路3』 +https://vip.ffzy-play7.com/20221227/9993_9681b67b/index.m3u8$LR•IPV4•7『线路3』 #EXTINF:-1 tvg-id="英雄" tvg-name="英雄" group-title="🎞️电影点播",英雄 -https://vip.ffzy-play7.com/20221129/7743_4656dd25/index.m3u8$LR•IPV4•7『线路4』 +https://vip.ffzy-play.com/20221015/981_2ca5b5f9/index.m3u8$LR•IPV4•7『线路4』 #EXTINF:-1 tvg-id="英雄" tvg-name="英雄" group-title="🎞️电影点播",英雄 -https://vip.ffzy-play6.com/20221112/6371_9b5bf930/index.m3u8$LR•IPV4•7『线路5』 +https://vip.ffzy-play6.com/20221207/10694_f9088e66/index.m3u8$LR•IPV4•7『线路5』 #EXTINF:-1 tvg-id="英雄" tvg-name="英雄" group-title="🎞️电影点播",英雄 -http://cdn.jdshipin.com:8880/huya.php?id=23824164$LR•IPV4•7『线路6』 +https://vip.ffzy-play7.com/20221129/7743_4656dd25/index.m3u8$LR•IPV4•7『线路6』 #EXTINF:-1 tvg-id="英雄" tvg-name="英雄" group-title="🎞️电影点播",英雄 -https://live.ottiptv.cc/yy/1352475619$LR•IPV4•7『线路7』 +https://vip.ffzy-play6.com/20221112/6371_9b5bf930/index.m3u8$LR•IPV4•7『线路7』 #EXTINF:-1 tvg-id="赢钱专家" tvg-name="赢钱专家" group-title="🎞️电影点播",赢钱专家 https://vip.ffzy-play6.com/20221113/6794_d514b390/index.m3u8$LR•IPV4 #EXTINF:-1 tvg-id="有话好好说" tvg-name="有话好好说" group-title="🎞️电影点播",有话好好说 @@ -3014,13 +3014,13 @@ https://live.metshop.top/huya/11342388$LR•IPV4 #EXTINF:-1 tvg-id="联合抗日" tvg-name="联合抗日" group-title="💓电视剧🔁",联合抗日 https://live.metshop.top/huya/11352910$LR•IPV4 #EXTINF:-1 tvg-id="三国" tvg-name="三国" group-title="💓电视剧🔁",三国 -https://live.metshop.top/huya/11352944$LR•IPV4•4『线路1』 +https://live.ottiptv.cc/huya/11602081$LR•IPV4•4『线路1』 #EXTINF:-1 tvg-id="三国" tvg-name="三国" group-title="💓电视剧🔁",三国 -http://103.193.151.146/huya.php?id=29465871$LR•IPV4•4『线路2』 +https://live.ottiptv.cc/huya/11352944$LR•IPV4•4『线路2』 #EXTINF:-1 tvg-id="三国" tvg-name="三国" group-title="💓电视剧🔁",三国 -https://live.ottiptv.cc/huya/11602081$LR•IPV4•4『线路3』 +https://live.metshop.top/huya/11352944$LR•IPV4•4『线路3』 #EXTINF:-1 tvg-id="三国" tvg-name="三国" group-title="💓电视剧🔁",三国 -https://live.ottiptv.cc/huya/11352944$LR•IPV4•4『线路4』 +http://103.193.151.146/huya.php?id=29465871$LR•IPV4•4『线路4』 #EXTINF:-1 tvg-id="雍正皇帝" tvg-name="雍正皇帝" group-title="💓电视剧🔁",雍正皇帝 https://live.metshop.top/huya/11342439$LR•IPV4 #EXTINF:-1 tvg-id="许冠英合集" tvg-name="许冠英合集" group-title="💓电视剧🔁",许冠英合集 @@ -3080,11 +3080,11 @@ http://newcntv.qcloudcdn.com/asp/hls/4000/0303000a/3/default/2bdfdad540b342f592f #EXTINF:-1 tvg-id="地理中国" tvg-name="地理中国" group-title="💓优质个源",地理中国 http://newcntv.qcloudcdn.com/asp/hls/1200/0303000a/3/default/c6baf6f74bb944aeacee1065ea72c798/1200.m3u8$LR•IPV4 #EXTINF:-1 tvg-id="纪录" tvg-name="纪录" group-title="💓优质个源",纪录 -https://v4-e6b1c5baf4e240fe63adbf68dda23435.livehwc4.com/play.kankanlive.com/live/1698423397390920.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=f3fb3ddaca05941087114cf6481e1c23$LR•IPV4•41『线路1』 +https://v4-e6b1c5baf4e240fe63adbf68dda23435.livehwc4.com/play.kankanlive.com/live/1698423397390920.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=8a921813ee3b23c82763145c9f291a3b$LR•IPV4•41『线路1』 #EXTINF:-1 tvg-id="纪录" tvg-name="纪录" group-title="💓优质个源",纪录 -https://ali-m-l.cztv.com/channels/lantian/channel012/1080p.m3u8$LR•IPV4•41『线路2』 +https://v4-e6b1c5baf4e240fe63adbf68dda23435.livehwc4.com/play.kankanlive.com/live/1698423397390920.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=f3fb3ddaca05941087114cf6481e1c23$LR•IPV4•41『线路2』 #EXTINF:-1 tvg-id="纪录" tvg-name="纪录" group-title="💓优质个源",纪录 -https://v4-702cae17a28d6e4f0c0002bba021d934.livehwc4.com/play.kankanlive.com/live/1698423397390920.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=2b87983b301b48537526846889074801$LR•IPV4•41『线路3』 +https://ali-m-l.cztv.com/channels/lantian/channel012/1080p.m3u8$LR•IPV4•41『线路3』 #EXTINF:-1 tvg-id="纪录" tvg-name="纪录" group-title="💓优质个源",纪录 http://free.cnlive.club/channel/n3f497a4c/index.m3u8?q=1752629214236$LR•IPV4•41『线路4』 #EXTINF:-1 tvg-id="纪录" tvg-name="纪录" group-title="💓优质个源",纪录 @@ -3348,11 +3348,11 @@ p3p://167.114.175.6:55331/66e860ba000b17abca4b7ac11c665324$LR•IPV4 #EXTINF:-1 tvg-id="OneTV综合" tvg-name="OneTV综合" group-title="🍹定制P3P☕️",OneTV综合 p3p://167.114.175.6:55331/64d5c5550007c4d9744057ea09db782a$LR•IPV4 #EXTINF:-1 tvg-id="C+" tvg-name="C+" group-title="🍹定制P3P☕️",C+ -http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/01.m3u8$LR•IPV4•4『线路1』 +http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/03.m3u8$LR•IPV4•4『线路1』 #EXTINF:-1 tvg-id="C+" tvg-name="C+" group-title="🍹定制P3P☕️",C+ -http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/02.m3u8$LR•IPV4•4『线路2』 +http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/01.m3u8$LR•IPV4•4『线路2』 #EXTINF:-1 tvg-id="C+" tvg-name="C+" group-title="🍹定制P3P☕️",C+ -http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/03.m3u8$LR•IPV4•4『线路3』 +http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/02.m3u8$LR•IPV4•4『线路3』 #EXTINF:-1 tvg-id="C+" tvg-name="C+" group-title="🍹定制P3P☕️",C+ p3p://167.114.175.6:55331/65ac2e740004fbd2b9c6ef2b03744ac0$LR•IPV4•4『线路4』 #EXTINF:-1 tvg-id="有线赛马18" tvg-name="有线赛马18" group-title="🍹定制P3P☕️",有线赛马18 @@ -3684,155 +3684,155 @@ http://101.43.145.141:12002/itv/3000000010000015686.m3u8?cdn=FifastbLive$LR•IP #EXTINF:-1 tvg-id="CCTV兵器" tvg-name="CCTV兵器" group-title="🌐央视频道",CCTV兵器 http://38.75.136.137:98/gslb/dsdqpub/gfjs.m3u8?auth=testpub$LR•IPV4 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226895/1.m3u8?$LR•IPV6•90『线路1』 +https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784329200-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-2245971645866ed95972e22af68cc8d1&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•90『线路1』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226893/1.m3u8?$LR•IPV6•90『线路2』 +http://183.196.25.171:808/hls/77/index.m3u8$LR•IPV4•90『线路2』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226471/1.m3u8?$LR•IPV6•90『线路3』 +https://jsv-live-play.sfccn.com/live/jsv_3920_fhd.m3u8$LR•IPV4•90『线路3』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226335/1.m3u8?$LR•IPV6•90『线路4』 +http://183.196.25.171:808/hls/11/index.m3u8$LR•IPV4•90『线路4』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226469/1.m3u8?$LR•IPV6•90『线路5』 +http://183.196.25.171:808/hls/93/index.m3u8$LR•IPV4•90『线路5』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226468/1.m3u8?$LR•IPV6•90『线路6』 +https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784271600-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-6aec44040ec72def77e22587fc404005&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•90『线路6』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226946/1.m3u8?$LR•IPV6•90『线路7』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226895/1.m3u8?$LR•IPV6•90『线路7』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226485/1.m3u8?$LR•IPV6•90『线路8』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226893/1.m3u8?$LR•IPV6•90『线路8』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226944/1.m3u8?$LR•IPV6•90『线路9』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226471/1.m3u8?$LR•IPV6•90『线路9』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226937/1.m3u8?$LR•IPV6•90『线路10』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226335/1.m3u8?$LR•IPV6•90『线路10』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226334/1.m3u8?$LR•IPV6•90『线路11』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226469/1.m3u8?$LR•IPV6•90『线路11』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226942/1.m3u8?$LR•IPV6•90『线路12』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226468/1.m3u8?$LR•IPV6•90『线路12』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226316/1.m3u8?$LR•IPV6•90『线路13』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226946/1.m3u8?$LR•IPV6•90『线路13』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226947/1.m3u8?$LR•IPV6•90『线路14』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226485/1.m3u8?$LR•IPV6•90『线路14』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226333/1.m3u8?$LR•IPV6•90『线路15』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226944/1.m3u8?$LR•IPV6•90『线路15』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227002/1.m3u8?$LR•IPV6•90『线路16』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226937/1.m3u8?$LR•IPV6•90『线路16』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226318/1.m3u8?$LR•IPV6•90『线路17』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226334/1.m3u8?$LR•IPV6•90『线路17』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://222.223.41.27:8888/hls/2/index.m3u8$LR•IPV4•90『线路18』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226942/1.m3u8?$LR•IPV6•90『线路18』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://116.128.243.121:85/tsfile/live/0002_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•90『线路19』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226316/1.m3u8?$LR•IPV6•90『线路19』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://63.141.230.178:82/gslb/zbdq5.m3u8?id=cctv3hd$LR•IPV4•90『线路20』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226947/1.m3u8?$LR•IPV6•90『线路20』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://207.56.13.146:81/cdnlive/cctv3.m3u8$LR•IPV4•90『线路21』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226333/1.m3u8?$LR•IPV6•90『线路21』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://63.141.230.178:82/gslb/zbdq5.m3u8?id=cctv4hd$LR•IPV4•90『线路22』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227002/1.m3u8?$LR•IPV6•90『线路22』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://74.91.26.218:82/live/cctv4hd.m3u8$LR•IPV4•90『线路23』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226318/1.m3u8?$LR•IPV6•90『线路23』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://207.56.13.146:81/cdnlive/cctv4.m3u8$LR•IPV4•90『线路24』 +http://222.223.41.27:8888/hls/2/index.m3u8$LR•IPV4•90『线路24』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://38.75.136.137:98/gslb/dsdqbv/cctv5p.m3u8?auth=test20251009$LR•IPV4•90『线路25』 +http://116.128.243.121:85/tsfile/live/0002_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•90『线路25』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://204.12.221.218:8181/3m1080p/cctv6.m3u8$LR•IPV4•90『线路26』 +http://63.141.230.178:82/gslb/zbdq5.m3u8?id=cctv3hd$LR•IPV4•90『线路26』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://207.56.13.146:81/cdnlive/cctv6.m3u8$LR•IPV4•90『线路27』 +http://207.56.13.146:81/cdnlive/cctv3.m3u8$LR•IPV4•90『线路27』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://74.91.26.218:82/live/cctv7hd.m3u8$LR•IPV4•90『线路28』 +http://63.141.230.178:82/gslb/zbdq5.m3u8?id=cctv4hd$LR•IPV4•90『线路28』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://38.75.136.137:98/gslb/dsdqbv/cctv7hd.m3u8?auth=test20251009$LR•IPV4•90『线路29』 +http://74.91.26.218:82/live/cctv4hd.m3u8$LR•IPV4•90『线路29』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://192.151.150.154/live/cctv8k.m3u8$LR•IPV4•90『线路30』 +http://207.56.13.146:81/cdnlive/cctv4.m3u8$LR•IPV4•90『线路30』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://207.56.13.146:81/cdnlive/cctv8.m3u8$LR•IPV4•90『线路31』 +http://38.75.136.137:98/gslb/dsdqbv/cctv5p.m3u8?auth=test20251009$LR•IPV4•90『线路31』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://173.208.212.130:8181/720p/cctv8.m3u8$LR•IPV4•90『线路32』 +http://204.12.221.218:8181/3m1080p/cctv6.m3u8$LR•IPV4•90『线路32』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://38.75.136.137:98/gslb/dsdqbv/cctv8hd.m3u8?auth=test20251009$LR•IPV4•90『线路33』 +http://207.56.13.146:81/cdnlive/cctv6.m3u8$LR•IPV4•90『线路33』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://204.12.221.218:8181/3m1080p/cctv8.m3u8$LR•IPV4•90『线路34』 +http://74.91.26.218:82/live/cctv7hd.m3u8$LR•IPV4•90『线路34』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://69.30.245.50/live/cctv8.m3u8$LR•IPV4•90『线路35』 +http://38.75.136.137:98/gslb/dsdqbv/cctv7hd.m3u8?auth=test20251009$LR•IPV4•90『线路35』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://222.223.41.27:8888/hls/9/index.m3u8$LR•IPV4•90『线路36』 +http://192.151.150.154/live/cctv8k.m3u8$LR•IPV4•90『线路36』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -https://hwapi.yntv.net/ew265l/z1z6s5.m3u8$LR•IPV4•90『线路37』 +http://207.56.13.146:81/cdnlive/cctv8.m3u8$LR•IPV4•90『线路37』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://74.91.26.218:82/live/cctv10hd.m3u8$LR•IPV4•90『线路38』 +http://173.208.212.130:8181/720p/cctv8.m3u8$LR•IPV4•90『线路38』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://74.91.26.218:82/live/cctv11hd.m3u8$LR•IPV4•90『线路39』 +http://38.75.136.137:98/gslb/dsdqbv/cctv8hd.m3u8?auth=test20251009$LR•IPV4•90『线路39』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://38.75.136.137:98/gslb/dsdqpub/cctv12hd.m3u8?auth=testpub$LR•IPV4•90『线路40』 +http://204.12.221.218:8181/3m1080p/cctv8.m3u8$LR•IPV4•90『线路40』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -https://event.pull.hebtv.com/jishi/cp1.m3u8$LR•IPV4•90『线路41』 +http://69.30.245.50/live/cctv8.m3u8$LR•IPV4•90『线路41』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://pull-hls-f1.douyinliving.com/media/stream-696107587393815378/playlist.m3u8?keeptime=00093a80&wsSecret=bbbd054778ab532edfa97bf7c5395746&wsTime=6a544fee&arch_hrchy=s2&s_anchor=1&major_anchor_level=vip&t_id=037-2026071310394131FD5A22CCB9DDAFA77E-5XIF43$LR•IPV4•90『线路42』 +http://222.223.41.27:8888/hls/9/index.m3u8$LR•IPV4•90『线路42』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://63.141.230.178:82/gslb/zbdq5.m3u8?id=cctv13hd$LR•IPV4•90『线路43』 +https://hwapi.yntv.net/ew265l/z1z6s5.m3u8$LR•IPV4•90『线路43』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://113.25.252.226:9901/tsfile/live/1017_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•90『线路44』 +http://74.91.26.218:82/live/cctv10hd.m3u8$LR•IPV4•90『线路44』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -https://event.pull.hebtv.com/jishi/cp2.m3u8$LR•IPV4•90『线路45』 +http://74.91.26.218:82/live/cctv11hd.m3u8$LR•IPV4•90『线路45』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://38.75.136.137:98/gslb/dsdqbv/cctv15hd.m3u8?auth=test20251009$LR•IPV4•90『线路46』 +http://38.75.136.137:98/gslb/dsdqpub/cctv12hd.m3u8?auth=testpub$LR•IPV4•90『线路46』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://38.75.136.137:98/gslb/dsdqpub/cctv15hd.m3u8?auth=testpub$LR•IPV4•90『线路47』 +https://event.pull.hebtv.com/jishi/cp1.m3u8$LR•IPV4•90『线路47』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://38.75.136.137:98/gslb/dsdqpub/cctv17hd.m3u8?auth=testpub$LR•IPV4•90『线路48』 +http://pull-hls-f1.douyinliving.com/media/stream-696107587393815378/playlist.m3u8?keeptime=00093a80&wsSecret=bbbd054778ab532edfa97bf7c5395746&wsTime=6a544fee&arch_hrchy=s2&s_anchor=1&major_anchor_level=vip&t_id=037-2026071310394131FD5A22CCB9DDAFA77E-5XIF43$LR•IPV4•90『线路48』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784322000-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-25fe408e6545f49f3d4eb7f92e97c764&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•90『线路49』 +http://63.141.230.178:82/gslb/zbdq5.m3u8?id=cctv13hd$LR•IPV4•90『线路49』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -https://shcm-stream-cf1.stream.264788.xyz/cms001/ch00000090990000001620/index.m3u8?streamid=8a034b40397504e25b3775c772237996&streamkey=01vY5fRxC8VyKg4oq30vfikHXTCAKySLP29l6OG91kQlzDttHgzNLkUw5kivm3PfNsVHJv5FgdsPBYFYI2IWpt7tfRCuFHqLT2pvX67ubMds8jl2DHtvOh0&token=1775754349-4f33f4f84a4abeba-0-91687dc8c9325092efa1d00f330d2710$LR•IPV4•90『线路50』 +http://113.25.252.226:9901/tsfile/live/1017_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•90『线路50』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -https://epg.pw/stream/ac8062ec9484078061d3bef507c15a423ac57ae4144e3fcc4b0a198dd420f911.m3u8$LR•IPV4•90『线路51』 +https://event.pull.hebtv.com/jishi/cp2.m3u8$LR•IPV4•90『线路51』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784325600-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-b583b000601c3690c0e4bae75e1261f0&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•90『线路52』 +http://38.75.136.137:98/gslb/dsdqbv/cctv15hd.m3u8?auth=test20251009$LR•IPV4•90『线路52』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://183.196.25.171:808/hls/77/index.m3u8$LR•IPV4•90『线路53』 +http://38.75.136.137:98/gslb/dsdqpub/cctv15hd.m3u8?auth=testpub$LR•IPV4•90『线路53』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -https://jsv-live-play.sfccn.com/live/jsv_3920_fhd.m3u8$LR•IPV4•90『线路54』 +http://38.75.136.137:98/gslb/dsdqpub/cctv17hd.m3u8?auth=testpub$LR•IPV4•90『线路54』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://183.196.25.171:808/hls/11/index.m3u8$LR•IPV4•90『线路55』 +https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784322000-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-25fe408e6545f49f3d4eb7f92e97c764&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•90『线路55』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://183.196.25.171:808/hls/93/index.m3u8$LR•IPV4•90『线路56』 +https://shcm-stream-cf1.stream.264788.xyz/cms001/ch00000090990000001620/index.m3u8?streamid=8a034b40397504e25b3775c772237996&streamkey=01vY5fRxC8VyKg4oq30vfikHXTCAKySLP29l6OG91kQlzDttHgzNLkUw5kivm3PfNsVHJv5FgdsPBYFYI2IWpt7tfRCuFHqLT2pvX67ubMds8jl2DHtvOh0&token=1775754349-4f33f4f84a4abeba-0-91687dc8c9325092efa1d00f330d2710$LR•IPV4•90『线路56』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784271600-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-6aec44040ec72def77e22587fc404005&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•90『线路57』 +https://epg.pw/stream/ac8062ec9484078061d3bef507c15a423ac57ae4144e3fcc4b0a198dd420f911.m3u8$LR•IPV4•90『线路57』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://38.75.136.137:98/gslb/dsdqpub/wsjk.m3u8?auth=testpub$LR•IPV4•90『线路58』 +http://69.30.245.50/live/cctv6.m3u8$LR•IPV4•90『线路58』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://38.75.136.137:98/gslb/dsdqpub/ystq.m3u8?auth=testpub$LR•IPV4•90『线路59』 +http://74.91.26.218:82/live/cctv8hd.m3u8$LR•IPV4•90『线路59』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://38.75.136.137:98/gslb/dsdqpub/dyjc.m3u8?auth=testpub$LR•IPV4•90『线路60』 +http://74.91.26.218:82/live/cctv17hd.m3u8$LR•IPV4•90『线路60』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://38.75.136.137:98/gslb/dsdqpub/fyjc.m3u8?auth=testpub$LR•IPV4•90『线路61』 +http://38.75.136.137:98/gslb/dsdqpub/wsjk.m3u8?auth=testpub$LR•IPV4•90『线路61』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://38.75.136.137:98/gslb/dsdqpub/hjjc.m3u8?auth=testpub$LR•IPV4•90『线路62』 +http://38.75.136.137:98/gslb/dsdqpub/ystq.m3u8?auth=testpub$LR•IPV4•90『线路62』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://38.75.136.137:98/gslb/dsdqpub/fyzq.m3u8?auth=testpub$LR•IPV4•90『线路63』 +http://38.75.136.137:98/gslb/dsdqpub/dyjc.m3u8?auth=testpub$LR•IPV4•90『线路63』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://38.75.136.137:98/gslb/dsdqpub/fyyy.m3u8?auth=testpub$LR•IPV4•90『线路64』 +http://38.75.136.137:98/gslb/dsdqpub/fyjc.m3u8?auth=testpub$LR•IPV4•90『线路64』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://38.75.136.137:98/gslb/dsdqpub/sjdl.m3u8?auth=testpub$LR•IPV4•90『线路65』 +http://38.75.136.137:98/gslb/dsdqpub/hjjc.m3u8?auth=testpub$LR•IPV4•90『线路65』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://38.75.136.137:98/gslb/dsdqpub/dszn.m3u8?auth=testpub$LR•IPV4•90『线路66』 +http://38.75.136.137:98/gslb/dsdqpub/fyzq.m3u8?auth=testpub$LR•IPV4•90『线路66』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://38.75.136.137:98/gslb/dsdqpub/ysjp.m3u8?auth=testpub$LR•IPV4•90『线路67』 +http://38.75.136.137:98/gslb/dsdqpub/fyyy.m3u8?auth=testpub$LR•IPV4•90『线路67』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://38.75.136.137:98/gslb/dsdqpub/nxss.m3u8?auth=testpub$LR•IPV4•90『线路68』 +http://38.75.136.137:98/gslb/dsdqpub/sjdl.m3u8?auth=testpub$LR•IPV4•90『线路68』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://fn.tmde.top:35455/nptv/cctv4k.m3u8$LR•IPV4•90『线路69』 +http://38.75.136.137:98/gslb/dsdqpub/dszn.m3u8?auth=testpub$LR•IPV4•90『线路69』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://fn.tmde.top:35455/nptv/cctv8k.m3u8$LR•IPV4•90『线路70』 +http://38.75.136.137:98/gslb/dsdqpub/ysjp.m3u8?auth=testpub$LR•IPV4•90『线路70』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://xc.mfykeke.top:35455/nptv/cctv4k.m3u8$LR•IPV4•90『线路71』 +http://38.75.136.137:98/gslb/dsdqpub/nxss.m3u8?auth=testpub$LR•IPV4•90『线路71』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://xc.mfykeke.top:35455/nptv/cctv8k.m3u8$LR•IPV4•90『线路72』 +http://fn.tmde.top:35455/nptv/cctv4k.m3u8$LR•IPV4•90『线路72』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://69.30.245.50/live/cctv6.m3u8$LR•IPV4•90『线路73』 +http://fn.tmde.top:35455/nptv/cctv8k.m3u8$LR•IPV4•90『线路73』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://74.91.26.218:82/live/cctv8hd.m3u8$LR•IPV4•90『线路74』 +http://xc.mfykeke.top:35455/nptv/cctv4k.m3u8$LR•IPV4•90『线路74』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://74.91.26.218:82/live/cctv17hd.m3u8$LR•IPV4•90『线路75』 +http://xc.mfykeke.top:35455/nptv/cctv8k.m3u8$LR•IPV4•90『线路75』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV http://69.30.245.50/live/cctv1.m3u8$LR•IPV4•90『线路76』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV @@ -3870,9 +3870,9 @@ http://cdn.jdshipin.com:8880/huya.php?id=11342412$LR•IPV4 #EXTINF:-1 tvg-id="梁家辉" tvg-name="梁家辉" group-title="明星",梁家辉 http://live.metshop.top/huya/11342429?cdn=alicdn$LR•IPV4 #EXTINF:-1 tvg-id="刘德华" tvg-name="刘德华" group-title="明星",刘德华 -http://epg.112114.xyz/douyu/2516864$LR•IPV4•2『线路1』 +http://live.metshop.top/huya/11342424?cdn=alicdn$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="刘德华" tvg-name="刘德华" group-title="明星",刘德华 -http://live.metshop.top/huya/11342424?cdn=alicdn$LR•IPV4•2『线路2』 +http://epg.112114.xyz/douyu/2516864$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="林正英" tvg-name="林正英" group-title="明星",林正英 http://zzy789.xyz/douyu1.php?id=7356023$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="林正英" tvg-name="林正英" group-title="明星",林正英 @@ -4804,41 +4804,39 @@ http://ali-m-l.cztv.com/channels/lantian/channel009/1080p.m3u8$LR•IPV4•2『 #EXTINF:-1 tvg-id="中国蓝新闻" tvg-name="中国蓝新闻" group-title="浙江",中国蓝新闻 https://ali-m-l.cztv.com/channels/lantian/channel009/1080p.m3u8?$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="广东",深圳卫视 -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226959/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EGrVNEZREjuNVKiTJo2mtwg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•18『线路1』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226959/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EGrVNEZREjuNVKiTJo2mtwg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•17『线路1』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="广东",深圳卫视 -http://120.198.95.220:9901/tsfile/live/1048_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•18『线路2』 +http://120.198.95.220:9901/tsfile/live/1048_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•17『线路2』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="广东",深圳卫视 -http://120.198.95.220:9901/tsfile/live/1048_1.m3u8?key=txiptv$LR•IPV4•18『线路3』 +http://120.198.95.220:9901/tsfile/live/1048_1.m3u8?key=txiptv$LR•IPV4•17『线路3』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="广东",深圳卫视 -http://173.208.212.130:8181/720p/szws.m3u8$LR•IPV4•18『线路4』 +http://173.208.212.130:8181/720p/szws.m3u8$LR•IPV4•17『线路4』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="广东",深圳卫视 -http://192.151.150.154/live/szwshd.m3u8$LR•IPV4•18『线路5』 +http://192.151.150.154/live/szwshd.m3u8$LR•IPV4•17『线路5』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="广东",深圳卫视 -http://124.228.160.210:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•18『线路6』 +http://124.228.160.210:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•17『线路6』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="广东",深圳卫视 -http://36.136.38.87:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•18『线路7』 +http://36.136.38.87:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•17『线路7』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="广东",深圳卫视 -http://112.27.235.94:8000/hls/33/index.m3u8$LR•IPV4•18『线路8』 +http://112.27.235.94:8000/hls/33/index.m3u8$LR•IPV4•17『线路8』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="广东",深圳卫视 -https://sztv-hls.sztv.com.cn/1SIQj6s/500/q7rdSsQ.m3u8?sign=71764b3a0bcc96b03dea9693d605e020&t=6a579f21$LR•IPV4•18『线路9』 +http://38.75.136.137:98/gslb/dsdqpub/szwshd.m3u8?auth=testpub$LR•IPV4•17『线路9』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="广东",深圳卫视 -http://38.75.136.137:98/gslb/dsdqpub/szwshd.m3u8?auth=testpub$LR•IPV4•18『线路10』 +http://23.237.228.134/live6/shenzhen.m3u8$LR•IPV4•17『线路10』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="广东",深圳卫视 -http://23.237.228.134/live6/shenzhen.m3u8$LR•IPV4•18『线路11』 +http://gfr.x3322.net:9901/tsfile/live/1095_1.m3u8$LR•IPV4•17『线路11』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="广东",深圳卫视 -http://gfr.x3322.net:9901/tsfile/live/1095_1.m3u8$LR•IPV4•18『线路12』 +http://api.kkitv.itv888.cn:8080/hls/iftsd32ykm/index.m3u8$LR•IPV4•17『线路12』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="广东",深圳卫视 -http://api.kkitv.itv888.cn:8080/hls/iftsd32ykm/index.m3u8$LR•IPV4•18『线路13』 +https://iptv.catvod.com/catvod.php?id=szws$LR•IPV4•17『线路13』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="广东",深圳卫视 -https://iptv.catvod.com/catvod.php?id=szws$LR•IPV4•18『线路14』 +https://httop.top/ysp-深圳卫视$LR•IPV4•17『线路14』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="广东",深圳卫视 -https://httop.top/ysp-深圳卫视$LR•IPV4•18『线路15』 +http://iptv.huuc.edu.cn/hls/szhd.m3u8$LR•IPV4•17『线路15』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="广东",深圳卫视 -http://iptv.huuc.edu.cn/hls/szhd.m3u8$LR•IPV4•18『线路16』 +http://153.0.171.163:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•17『线路16』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="广东",深圳卫视 -http://153.0.171.163:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•18『线路17』 -#EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="广东",深圳卫视 -http://38.64.72.148:80/hls/modn/list/4007/playlist.m3u8$LR•IPV4•18『线路18』 +http://38.64.72.148:80/hls/modn/list/4007/playlist.m3u8$LR•IPV4•17『线路17』 #EXTINF:-1 tvg-id="汕头经济" tvg-name="汕头经济" group-title="广东",汕头经济 https://stream1.freetv.fun/shan-tou-jing-ji-2.ctv$LR•IPV4•11『线路1』 #EXTINF:-1 tvg-id="汕头经济" tvg-name="汕头经济" group-title="广东",汕头经济 diff --git a/cluntop_tvbox/lib/iptv_test.txt b/cluntop_tvbox/lib/iptv_test.txt index d497b90b..594c2fbb 100755 --- a/cluntop_tvbox/lib/iptv_test.txt +++ b/cluntop_tvbox/lib/iptv_test.txt @@ -1,7 +1,7 @@ 央视频道,#genre# -CCTV-4K,https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4k_mbd.m3u8?auth_key=1784322000-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-aa68fb06c12f53b71a4d170807f32df5&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•3『线路1』 -CCTV-4K,https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4k_mbd.m3u8?auth_key=1784325600-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-da48bbac79b9621fa8f084ece04c2c91&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•3『线路2』 +CCTV-4K,https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4k_mbd.m3u8?auth_key=1784329200-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-81ad4aefc95ce528b3da1112f0bc9ff2&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•3『线路1』 +CCTV-4K,https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4k_mbd.m3u8?auth_key=1784322000-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-aa68fb06c12f53b71a4d170807f32df5&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•3『线路2』 CCTV-4K,http://198.204.240.250:82/live/cctv4k.m3u8$LR•IPV4•3『线路3』 浙江频道,#genre# @@ -66,8 +66,8 @@ RTHK32,http://php.jdshipin.com:8880/TVOD/iptv.php?id=rthk32$LR•IPV4 动画频道,#genre# 韩国EBS少儿,http://ebsonairios.ebs.co.kr/ebsutablet500k/tablet500k/playlist.m3u8$LR•IPV4 -七龙珠,http://103.193.151.146/huya.php?id=11601966$LR•IPV4•2『线路1』 -七龙珠,https://live.metshop.top/huya/11601966$LR•IPV4•2『线路2』 +七龙珠,https://live.metshop.top/huya/11601966$LR•IPV4•2『线路1』 +七龙珠,http://103.193.151.146/huya.php?id=11601966$LR•IPV4•2『线路2』 哆啦A梦,http://103.193.151.146/huya.php?id=11601963$LR•IPV4•2『线路1』 哆啦A梦,https://live.ottiptv.cc/huya/11601963$LR•IPV4•2『线路2』 蜡笔小新,http://103.193.151.146/huya.php?id=11352970$LR•IPV4 @@ -93,15 +93,15 @@ RTHK32,http://php.jdshipin.com:8880/TVOD/iptv.php?id=rthk32$LR•IPV4 橙记港剧,http://www.goodiptv.club/douyu/4549169$LR•IPV4•2『线路2』 经典剧集,http://zzy789.xyz/douyu1.php?id=6863367$LR•IPV4•2『线路1』 经典剧集,http://www.goodiptv.club/douyu/6863367$LR•IPV4•2『线路2』 -热门港剧,http://zzy789.xyz/douyu1.php?id=5522351$LR•IPV4•3『线路1』 -热门港剧,http://huanqiuzhibo.cn/manifest/douyu.php?id=5522351$LR•IPV4•3『线路2』 -热门港剧,http://www.goodiptv.club/douyu/5522351$LR•IPV4•3『线路3』 -贝爷求生,https://stream1.freetv.fun/f92ea9cae12af707c587af406ddb929ea9f58aae893845b713679aab4b1df9f8.ctv$LR•IPV4•6『线路1』 -贝爷求生,http://fy27.zbds.top:55455/douyu/9661369$LR•IPV4•6『线路2』 -贝爷求生,https://www.goodiptv.club/douyu/9661369$LR•IPV4•6『线路3』 -贝爷求生,http://159.75.85.63:35455/douyu/454867$LR•IPV4•6『线路4』 -贝爷求生,http://zzy789.xyz/douyu1.php?id=454867$LR•IPV4•6『线路5』 -贝爷求生,http://www.goodiptv.club/douyu/9661369$LR•IPV4•6『线路6』 +热门港剧,http://www.goodiptv.club/douyu/5522351$LR•IPV4•3『线路1』 +热门港剧,http://zzy789.xyz/douyu1.php?id=5522351$LR•IPV4•3『线路2』 +热门港剧,http://huanqiuzhibo.cn/manifest/douyu.php?id=5522351$LR•IPV4•3『线路3』 +贝爷求生,http://www.goodiptv.club/douyu/9661369$LR•IPV4•6『线路1』 +贝爷求生,https://stream1.freetv.fun/f92ea9cae12af707c587af406ddb929ea9f58aae893845b713679aab4b1df9f8.ctv$LR•IPV4•6『线路2』 +贝爷求生,http://fy27.zbds.top:55455/douyu/9661369$LR•IPV4•6『线路3』 +贝爷求生,https://www.goodiptv.club/douyu/9661369$LR•IPV4•6『线路4』 +贝爷求生,http://159.75.85.63:35455/douyu/454867$LR•IPV4•6『线路5』 +贝爷求生,http://zzy789.xyz/douyu1.php?id=454867$LR•IPV4•6『线路6』 电视剧频道,#genre# 少年包青天第一部,https://live.ottiptv.cc/yy/1356043677$LR•IPV4 @@ -110,13 +110,13 @@ RTHK32,http://php.jdshipin.com:8880/TVOD/iptv.php?id=rthk32$LR•IPV4 爱情公寓,https://goodiptv.club/douyu/4105989$LR•IPV4•2『线路2』 雪豹,https://live.ottiptv.cc/huya/29580970$LR•IPV4 特种兵之火凤凰,https://live.ottiptv.cc/huya/29982636$LR•IPV4 -士兵突击,https://live.metshop.top/huya/11342430$LR•IPV4•2『线路1』 -士兵突击,https://live.ottiptv.cc/huya/11342430$LR•IPV4•2『线路2』 +士兵突击,https://live.ottiptv.cc/huya/11342430$LR•IPV4•2『线路1』 +士兵突击,https://live.metshop.top/huya/11342430$LR•IPV4•2『线路2』 天龙八部,https://live.ottiptv.cc/yy/1351814644$LR•IPV4 倚天屠龙记,http://cdn.jdshipin.com:8880/huya.php?id=23734246$LR•IPV4 康熙王朝,https://live.ottiptv.cc/huya/11352940$LR•IPV4 -庆余年,http://58.39.190.143:35455/huya/11352960$LR•IPV4•2『线路1』 -庆余年,https://live.ottiptv.cc/huya/11352960$LR•IPV4•2『线路2』 +庆余年,https://live.ottiptv.cc/huya/11352960$LR•IPV4•2『线路1』 +庆余年,http://58.39.190.143:35455/huya/11352960$LR•IPV4•2『线路2』 鬼吹灯之精绝古城,https://live.ottiptv.cc/huya/11352871$LR•IPV4 鬼吹灯之怒晴湘西,https://live.ottiptv.cc/huya/11602075$LR•IPV4 鬼吹灯之云南虫谷,https://live.ottiptv.cc/huya/11352898$LR•IPV4 @@ -467,25 +467,25 @@ Now星影,p3p://167.114.175.6:55331/65bf5e010005226704b84f4f048a4148$LR•IPV4 凤凰卫视中文台,http://120.198.95.220:9901/tsfile/live/1036_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•8『线路3』 凤凰卫视中文台,http://218.206.193.218:8888/hls/66/index.m3u8$LR•IPV4•8『线路4』 凤凰卫视中文台,http://120.198.95.220:9901/tsfile/live/1036_1.m3u8?key=txiptv$LR•IPV4•8『线路5』 -凤凰卫视中文台,http://223.110.245.139/ott.js.chinamobile.com/PLTV/3/224/3221226922/index.m3u8$LR•IPV4•8『线路6』 -凤凰卫视中文台,http://r.jdshipin.com/cCCzW$LR•IPV4•8『线路7』 -凤凰卫视中文台,http://cdn6.163189.xyz/163189/fhzw$LR•IPV4•8『线路8』 +凤凰卫视中文台,http://r.jdshipin.com/cCCzW$LR•IPV4•8『线路6』 +凤凰卫视中文台,http://cdn6.163189.xyz/163189/fhzw$LR•IPV4•8『线路7』 +凤凰卫视中文台,http://223.110.245.139/ott.js.chinamobile.com/PLTV/3/224/3221226922/index.m3u8$LR•IPV4•8『线路8』 凤凰卫视资讯台,http://api.mg.itv888.cn:8080/hls/11ef1dc70d8/index.m3u8$LR•IPV4•10『线路1』 -凤凰卫视资讯台,p3p://167.114.175.6:55331/5fffbf860003807cedf4e1016c3c3ed2$LR•IPV4•10『线路2』 -凤凰卫视资讯台,http://zmgd.zyrnet.com:8888/hls/109/index.m3u8$LR•IPV4•10『线路3』 -凤凰卫视资讯台,http://221.7.175.154:8445/tsfile/live/1021_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•10『线路4』 -凤凰卫视资讯台,http://120.198.95.220:9901/tsfile/live/1037_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•10『线路5』 -凤凰卫视资讯台,http://120.198.95.220:9901/tsfile/live/1037_1.m3u8?key=txiptv$LR•IPV4•10『线路6』 -凤凰卫视资讯台,http://223.110.245.167/ott.js.chinamobile.com/PLTV/3/224/3221226923/index.m3u8$LR•IPV4•10『线路7』 -凤凰卫视资讯台,http://r.jdshipin.com/0Rp07$LR•IPV4•10『线路8』 -凤凰卫视资讯台,http://php.jdshipin.com/TVOD/iptv.php?id=fhzx$LR•IPV4•10『线路9』 -凤凰卫视资讯台,http://cdn6.163189.xyz/163189/fhzx$LR•IPV4•10『线路10』 -凤凰卫视香港台,p3p://167.114.175.6:55331/5fe0b82c000cac9774c17f262e43314d$LR•IPV4•6『线路1』 -凤凰卫视香港台,http://122.152.202.33/s/81a8a44f/index.m3u8?id=fhhk$LR•IPV4•6『线路2』 -凤凰卫视香港台,http://223.110.245.136/PLTV/3/224/3221226975/index.m3u8$LR•IPV4•6『线路3』 -凤凰卫视香港台,http://r.jdshipin.com/yDoTN$LR•IPV4•6『线路4』 -凤凰卫视香港台,http://php.jdshipin.com/TVOD/iptv.php?id=fhhk$LR•IPV4•6『线路5』 -凤凰卫视香港台,http://cdn6.163189.xyz/163189/fhhk$LR•IPV4•6『线路6』 +凤凰卫视资讯台,http://zmgd.zyrnet.com:8888/hls/109/index.m3u8$LR•IPV4•10『线路2』 +凤凰卫视资讯台,http://221.7.175.154:8445/tsfile/live/1021_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•10『线路3』 +凤凰卫视资讯台,http://120.198.95.220:9901/tsfile/live/1037_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•10『线路4』 +凤凰卫视资讯台,http://120.198.95.220:9901/tsfile/live/1037_1.m3u8?key=txiptv$LR•IPV4•10『线路5』 +凤凰卫视资讯台,p3p://167.114.175.6:55331/5fffbf860003807cedf4e1016c3c3ed2$LR•IPV4•10『线路6』 +凤凰卫视资讯台,http://r.jdshipin.com/0Rp07$LR•IPV4•10『线路7』 +凤凰卫视资讯台,http://php.jdshipin.com/TVOD/iptv.php?id=fhzx$LR•IPV4•10『线路8』 +凤凰卫视资讯台,http://cdn6.163189.xyz/163189/fhzx$LR•IPV4•10『线路9』 +凤凰卫视资讯台,http://223.110.245.167/ott.js.chinamobile.com/PLTV/3/224/3221226923/index.m3u8$LR•IPV4•10『线路10』 +凤凰卫视香港台,http://122.152.202.33/s/81a8a44f/index.m3u8?id=fhhk$LR•IPV4•6『线路1』 +凤凰卫视香港台,p3p://167.114.175.6:55331/5fe0b82c000cac9774c17f262e43314d$LR•IPV4•6『线路2』 +凤凰卫视香港台,http://r.jdshipin.com/yDoTN$LR•IPV4•6『线路3』 +凤凰卫视香港台,http://php.jdshipin.com/TVOD/iptv.php?id=fhhk$LR•IPV4•6『线路4』 +凤凰卫视香港台,http://cdn6.163189.xyz/163189/fhhk$LR•IPV4•6『线路5』 +凤凰卫视香港台,http://223.110.245.136/PLTV/3/224/3221226975/index.m3u8$LR•IPV4•6『线路6』 台视新闻,http://38.64.72.148:80/hls/modn/list/4013/chunklist0.m3u8$LR•IPV4•4『线路1』 台视新闻,http://38.64.72.148:80/hls/modn/list/4013/chunklist1.m3u8$LR•IPV4•4『线路2』 台视新闻,http://38.64.72.148/hls/modn/list/4013/chunklist0.m3u8$LR•IPV4•4『线路3』 @@ -500,16 +500,16 @@ Now星影,p3p://167.114.175.6:55331/65bf5e010005226704b84f4f048a4148$LR•IPV4 来宾综合,http://zb.gxlbamc.com:1935/live/lbzh.stream/playlist.m3u8$LR•IPV4 ☘️天津频道,#genre# -天津,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226954/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Eaf3wyULP1h575eM_4ByMDg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•18『线路1』 -天津,http://204.12.221.218:8181/3m1080p/tjws.m3u8$LR•IPV4•18『线路2』 -天津,http://107.150.60.122/live/tjwshd.m3u8$LR•IPV4•18『线路3』 -天津,http://192.151.150.154/live/tjwshd.m3u8$LR•IPV4•18『线路4』 -天津,http://38.75.136.137:98/gslb/dsdqpub/tjwshd.m3u8?auth=testpub$LR•IPV4•18『线路5』 -天津,http://63.141.230.178:82/gslb/zbdq5.m3u8?id=tjwshd$LR•IPV4•18『线路6』 -天津,http://207.56.13.146:81/cdnlive/tjws.m3u8$LR•IPV4•18『线路7』 -天津,http://120.198.95.220:9901/tsfile/live/1067_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•18『线路8』 -天津,http://112.27.235.94:8000/hls/42/index.m3u8$LR•IPV4•18『线路9』 -天津,https://piccpndks.v.kcdnvip.com/audio/tianjin_2/index.m3u8$LR•IPV4•18『线路10』 +天津,https://piccpndks.v.kcdnvip.com/audio/tianjin_2/index.m3u8$LR•IPV4•18『线路1』 +天津,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226954/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Eaf3wyULP1h575eM_4ByMDg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•18『线路2』 +天津,http://204.12.221.218:8181/3m1080p/tjws.m3u8$LR•IPV4•18『线路3』 +天津,http://107.150.60.122/live/tjwshd.m3u8$LR•IPV4•18『线路4』 +天津,http://192.151.150.154/live/tjwshd.m3u8$LR•IPV4•18『线路5』 +天津,http://38.75.136.137:98/gslb/dsdqpub/tjwshd.m3u8?auth=testpub$LR•IPV4•18『线路6』 +天津,http://63.141.230.178:82/gslb/zbdq5.m3u8?id=tjwshd$LR•IPV4•18『线路7』 +天津,http://207.56.13.146:81/cdnlive/tjws.m3u8$LR•IPV4•18『线路8』 +天津,http://120.198.95.220:9901/tsfile/live/1067_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•18『线路9』 +天津,http://112.27.235.94:8000/hls/42/index.m3u8$LR•IPV4•18『线路10』 天津,http://23.237.228.134/live8/tianjing.m3u8$LR•IPV4•18『线路11』 天津,http://gfr.x3322.net:9901/tsfile/live/1090_1.m3u8$LR•IPV4•18『线路12』 天津,http://api.kkitv.itv888.cn:8080/hls/z2lkdkrb4w/index.m3u8$LR•IPV4•18『线路13』 @@ -971,18 +971,18 @@ J_SPORTS_4,https://stream01.willfonk.com/live_playlist.m3u8?cid=BS245&r=FHD&ccod DAZN1,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=2562&tk=e640d0a1bf70$LR•IPV4 DAZN2,https://stream1.freetv.fun/dazn-sport-2-1.ctv$LR•IPV4•2『线路1』 DAZN2,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=5145&tk=e640d0a1bf70$LR•IPV4•2『线路2』 -skysports,https://stream1.freetv.fun/skysports-3.ctv$LR•IPV4•8『线路1』 -skysports,https://stream1.freetv.fun/skysports-2.ctv$LR•IPV4•8『线路2』 -skysports,https://stream1.freetv.fun/skysports-14.ctv$LR•IPV4•8『线路3』 -skysports,https://stream1.freetv.fun/skysports-12.ctv$LR•IPV4•8『线路4』 -skysports,https://stream1.freetv.fun/skysports-16.ctv$LR•IPV4•8『线路5』 -skysports,https://stream1.freetv.fun/skysports-17.ctv$LR•IPV4•8『线路6』 -skysports,https://stream1.freetv.fun/skysports-15.ctv$LR•IPV4•8『线路7』 -skysports,https://stream1.freetv.fun/skysports-7.ctv$LR•IPV4•8『线路8』 +skysports,https://stream1.freetv.fun/skysports-14.ctv$LR•IPV4•8『线路1』 +skysports,https://stream1.freetv.fun/skysports-12.ctv$LR•IPV4•8『线路2』 +skysports,https://stream1.freetv.fun/skysports-3.ctv$LR•IPV4•8『线路3』 +skysports,https://stream1.freetv.fun/skysports-16.ctv$LR•IPV4•8『线路4』 +skysports,https://stream1.freetv.fun/skysports-17.ctv$LR•IPV4•8『线路5』 +skysports,https://stream1.freetv.fun/skysports-15.ctv$LR•IPV4•8『线路6』 +skysports,https://stream1.freetv.fun/skysports-7.ctv$LR•IPV4•8『线路7』 +skysports,https://stream1.freetv.fun/skysports-2.ctv$LR•IPV4•8『线路8』 zonghe,#genre# -纪晓岚,http://fmbox.cc/huya.php?id=11342396$LR•IPV4•2『线路1』 -纪晓岚,https://live.ottiptv.cc/huya/11342396$LR•IPV4•2『线路2』 +纪晓岚,https://live.ottiptv.cc/huya/11342396$LR•IPV4•2『线路1』 +纪晓岚,http://fmbox.cc/huya.php?id=11342396$LR•IPV4•2『线路2』 地下交通站,http://live.nctv.top/DJlio/huya.php?id=11342433$LR•IPV4•2『线路1』 地下交通站,http://fmbox.cc/huya.php?id=11342433$LR•IPV4•2『线路2』 鹊刀门,http://fmbox.cc/huya.php?id=11352963$LR•IPV4 @@ -1318,10 +1318,10 @@ FOX Sports,https://jmp2.uk/plu-5a74b8e1e22a61737979c6bf.m3u8$LR•IPV4•8『线 FOX Sports,http://85.237.89.160:9590/usa-s/FOX-SPORTS-1/index.m3u8$LR•IPV4•8『线路6』 FOX Sports,https://streamvidex.qzz.io/videx/fox2usa/index.m3u8$LR•IPV4•8『线路7』 FOX Sports,http://108.181.20.255:27347/livehttpplay?channel_id=23054$LR•IPV4•8『线路8』 -NBA,http://170.yfvodcdn.com:19980/live/nbaTV2/hls.m3u8$LR•IPV4•8『线路1』 -NBA,p3p://167.114.175.6:55331/65a587500007bc039fca3566638e69af$LR•IPV4•8『线路2』 -NBA,https://stream1.freetv.fun/nba-tv-7.m3u8$LR•IPV4•8『线路3』 -NBA,https://stream1.freetv.fun/nba-tv-5.m3u8$LR•IPV4•8『线路4』 +NBA,https://stream1.freetv.fun/nba-tv-7.m3u8$LR•IPV4•8『线路1』 +NBA,https://stream1.freetv.fun/nba-tv-5.m3u8$LR•IPV4•8『线路2』 +NBA,http://170.yfvodcdn.com:19980/live/nbaTV2/hls.m3u8$LR•IPV4•8『线路3』 +NBA,p3p://167.114.175.6:55331/65a587500007bc039fca3566638e69af$LR•IPV4•8『线路4』 NBA,https://live-manifest.production-public.tubi.io/live/553b8d5e-fd2a-4a61-bdfa-73b34c299d75/playlist.m3u8$LR•IPV4•8『线路5』 NBA,https://jmp2.uk/plu-6792c30abc03978b9b8bb832.m3u8$LR•IPV4•8『线路6』 NBA,https://amg00556-amg00556c3-firetv-us-6060.playouts.now.amagi.tv/playlist.m3u8$LR•IPV4•8『线路7』 @@ -1522,13 +1522,13 @@ TraceSports,http://209.141.58.162:4994/proxy?url=http%3A//209.141.58.162%3A5050/ 义胆红唇,https://vip.ffzy-play6.com/20221116/7315_8765f39c/index.m3u8$LR•IPV4 义胆雄心,https://vip.ffzy-play7.com/20221129/7714_a0c75de1/index.m3u8$LR•IPV4 音乐僵尸,https://vip.ffzy-play6.com/20221207/10627_09b3f2e5/index.m3u8$LR•IPV4 -英雄,https://vip.ffzy-play7.com/20221227/9993_9681b67b/index.m3u8$LR•IPV4•7『线路1』 -英雄,https://vip.ffzy-play.com/20221015/981_2ca5b5f9/index.m3u8$LR•IPV4•7『线路2』 -英雄,https://vip.ffzy-play6.com/20221207/10694_f9088e66/index.m3u8$LR•IPV4•7『线路3』 -英雄,https://vip.ffzy-play7.com/20221129/7743_4656dd25/index.m3u8$LR•IPV4•7『线路4』 -英雄,https://vip.ffzy-play6.com/20221112/6371_9b5bf930/index.m3u8$LR•IPV4•7『线路5』 -英雄,http://cdn.jdshipin.com:8880/huya.php?id=23824164$LR•IPV4•7『线路6』 -英雄,https://live.ottiptv.cc/yy/1352475619$LR•IPV4•7『线路7』 +英雄,http://cdn.jdshipin.com:8880/huya.php?id=23824164$LR•IPV4•7『线路1』 +英雄,https://live.ottiptv.cc/yy/1352475619$LR•IPV4•7『线路2』 +英雄,https://vip.ffzy-play7.com/20221227/9993_9681b67b/index.m3u8$LR•IPV4•7『线路3』 +英雄,https://vip.ffzy-play.com/20221015/981_2ca5b5f9/index.m3u8$LR•IPV4•7『线路4』 +英雄,https://vip.ffzy-play6.com/20221207/10694_f9088e66/index.m3u8$LR•IPV4•7『线路5』 +英雄,https://vip.ffzy-play7.com/20221129/7743_4656dd25/index.m3u8$LR•IPV4•7『线路6』 +英雄,https://vip.ffzy-play6.com/20221112/6371_9b5bf930/index.m3u8$LR•IPV4•7『线路7』 赢钱专家,https://vip.ffzy-play6.com/20221113/6794_d514b390/index.m3u8$LR•IPV4 有话好好说,https://vip.ffzy-play7.com/20221112/3406_98dc6f14/index.m3u8$LR•IPV4 与龙共舞,https://vip.ffzy-play6.com/20221207/10859_1b02d27c/index.m3u8$LR•IPV4 @@ -1637,10 +1637,10 @@ A计划,https://vip.ffzy-play7.com/20221115/4412_bf4bdaf6/index.m3u8$LR•IPV4 贺岁合家欢剧场,https://live.metshop.top/huya/11602067$LR•IPV4 滇军抗战,https://live.metshop.top/huya/11342388$LR•IPV4 联合抗日,https://live.metshop.top/huya/11352910$LR•IPV4 -三国,https://live.metshop.top/huya/11352944$LR•IPV4•4『线路1』 -三国,http://103.193.151.146/huya.php?id=29465871$LR•IPV4•4『线路2』 -三国,https://live.ottiptv.cc/huya/11602081$LR•IPV4•4『线路3』 -三国,https://live.ottiptv.cc/huya/11352944$LR•IPV4•4『线路4』 +三国,https://live.ottiptv.cc/huya/11602081$LR•IPV4•4『线路1』 +三国,https://live.ottiptv.cc/huya/11352944$LR•IPV4•4『线路2』 +三国,https://live.metshop.top/huya/11352944$LR•IPV4•4『线路3』 +三国,http://103.193.151.146/huya.php?id=29465871$LR•IPV4•4『线路4』 雍正皇帝,https://live.metshop.top/huya/11342439$LR•IPV4 许冠英合集,https://live.metshop.top/huya/11601972$LR•IPV4 未知1,http://58.39.190.143:35455/huya/23734246$LR•IPV4 @@ -1672,9 +1672,9 @@ XXXXXXXXX粤,http://lxajh.top/tv/douyu.php?id=8912325$LR•IPV4 航拍中国第一季,http://hls.cntv.myhwcdn.cn/asp/hls/4000/0303000a/3/default/8edf3fb6a69148ea9a7dc0b5a9d99fdb/4000.m3u8$LR•IPV4 航拍中国第二季,http://newcntv.qcloudcdn.com/asp/hls/4000/0303000a/3/default/2bdfdad540b342f592f9817cb7f3b79a/4000.m3u8$LR•IPV4 地理中国,http://newcntv.qcloudcdn.com/asp/hls/1200/0303000a/3/default/c6baf6f74bb944aeacee1065ea72c798/1200.m3u8$LR•IPV4 -纪录,https://v4-e6b1c5baf4e240fe63adbf68dda23435.livehwc4.com/play.kankanlive.com/live/1698423397390920.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=f3fb3ddaca05941087114cf6481e1c23$LR•IPV4•41『线路1』 -纪录,https://ali-m-l.cztv.com/channels/lantian/channel012/1080p.m3u8$LR•IPV4•41『线路2』 -纪录,https://v4-702cae17a28d6e4f0c0002bba021d934.livehwc4.com/play.kankanlive.com/live/1698423397390920.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=2b87983b301b48537526846889074801$LR•IPV4•41『线路3』 +纪录,https://v4-e6b1c5baf4e240fe63adbf68dda23435.livehwc4.com/play.kankanlive.com/live/1698423397390920.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=8a921813ee3b23c82763145c9f291a3b$LR•IPV4•41『线路1』 +纪录,https://v4-e6b1c5baf4e240fe63adbf68dda23435.livehwc4.com/play.kankanlive.com/live/1698423397390920.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=f3fb3ddaca05941087114cf6481e1c23$LR•IPV4•41『线路2』 +纪录,https://ali-m-l.cztv.com/channels/lantian/channel012/1080p.m3u8$LR•IPV4•41『线路3』 纪录,http://free.cnlive.club/channel/n3f497a4c/index.m3u8?q=1752629214236$LR•IPV4•41『线路4』 纪录,http://free.cnlive.club/channel/2ae73b1a/index.m3u8?q=1752629214236$LR•IPV4•41『线路5』 纪录,http://free.cnlive.club/channel/nb957a7c/index.m3u8?q=1752629214236$LR•IPV4•41『线路6』 @@ -1812,9 +1812,9 @@ Cinemax HK,p3p://167.114.175.6:55331/65b1767d00058cdcce68527c3131148e$LR•IPV4 NOW 报价,p3p://167.114.175.6:55331/65acda400000be11bc6602f779434a76$LR•IPV4 智慧跑马,p3p://167.114.175.6:55331/66e860ba000b17abca4b7ac11c665324$LR•IPV4 OneTV综合,p3p://167.114.175.6:55331/64d5c5550007c4d9744057ea09db782a$LR•IPV4 -C+,http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/01.m3u8$LR•IPV4•4『线路1』 -C+,http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/02.m3u8$LR•IPV4•4『线路2』 -C+,http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/03.m3u8$LR•IPV4•4『线路3』 +C+,http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/03.m3u8$LR•IPV4•4『线路1』 +C+,http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/01.m3u8$LR•IPV4•4『线路2』 +C+,http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/02.m3u8$LR•IPV4•4『线路3』 C+,p3p://167.114.175.6:55331/65ac2e740004fbd2b9c6ef2b03744ac0$LR•IPV4•4『线路4』 有线赛马18,p3p://167.114.175.6:55331/66e85b81000bcd1eca37145143a407c7$LR•IPV4•2『线路1』 有线赛马18,p3p://167.114.175.6:55331/64db58eb000d759e8a08afbc7bd65062$LR•IPV4•2『线路2』 @@ -1988,81 +1988,81 @@ Loupe 4K,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=4726&tk=f6cc1e0a0e1a$LR•IP 🌐央视频道,#genre# CCTV兵器,http://38.75.136.137:98/gslb/dsdqpub/gfjs.m3u8?auth=testpub$LR•IPV4 -CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226895/1.m3u8?$LR•IPV6•90『线路1』 -CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226893/1.m3u8?$LR•IPV6•90『线路2』 -CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226471/1.m3u8?$LR•IPV6•90『线路3』 -CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226335/1.m3u8?$LR•IPV6•90『线路4』 -CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226469/1.m3u8?$LR•IPV6•90『线路5』 -CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226468/1.m3u8?$LR•IPV6•90『线路6』 -CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226946/1.m3u8?$LR•IPV6•90『线路7』 -CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226485/1.m3u8?$LR•IPV6•90『线路8』 -CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226944/1.m3u8?$LR•IPV6•90『线路9』 -CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226937/1.m3u8?$LR•IPV6•90『线路10』 -CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226334/1.m3u8?$LR•IPV6•90『线路11』 -CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226942/1.m3u8?$LR•IPV6•90『线路12』 -CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226316/1.m3u8?$LR•IPV6•90『线路13』 -CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226947/1.m3u8?$LR•IPV6•90『线路14』 -CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226333/1.m3u8?$LR•IPV6•90『线路15』 -CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227002/1.m3u8?$LR•IPV6•90『线路16』 -CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226318/1.m3u8?$LR•IPV6•90『线路17』 -CCTV,http://222.223.41.27:8888/hls/2/index.m3u8$LR•IPV4•90『线路18』 -CCTV,http://116.128.243.121:85/tsfile/live/0002_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•90『线路19』 -CCTV,http://63.141.230.178:82/gslb/zbdq5.m3u8?id=cctv3hd$LR•IPV4•90『线路20』 -CCTV,http://207.56.13.146:81/cdnlive/cctv3.m3u8$LR•IPV4•90『线路21』 -CCTV,http://63.141.230.178:82/gslb/zbdq5.m3u8?id=cctv4hd$LR•IPV4•90『线路22』 -CCTV,http://74.91.26.218:82/live/cctv4hd.m3u8$LR•IPV4•90『线路23』 -CCTV,http://207.56.13.146:81/cdnlive/cctv4.m3u8$LR•IPV4•90『线路24』 -CCTV,http://38.75.136.137:98/gslb/dsdqbv/cctv5p.m3u8?auth=test20251009$LR•IPV4•90『线路25』 -CCTV,http://204.12.221.218:8181/3m1080p/cctv6.m3u8$LR•IPV4•90『线路26』 -CCTV,http://207.56.13.146:81/cdnlive/cctv6.m3u8$LR•IPV4•90『线路27』 -CCTV,http://74.91.26.218:82/live/cctv7hd.m3u8$LR•IPV4•90『线路28』 -CCTV,http://38.75.136.137:98/gslb/dsdqbv/cctv7hd.m3u8?auth=test20251009$LR•IPV4•90『线路29』 -CCTV,http://192.151.150.154/live/cctv8k.m3u8$LR•IPV4•90『线路30』 -CCTV,http://207.56.13.146:81/cdnlive/cctv8.m3u8$LR•IPV4•90『线路31』 -CCTV,http://173.208.212.130:8181/720p/cctv8.m3u8$LR•IPV4•90『线路32』 -CCTV,http://38.75.136.137:98/gslb/dsdqbv/cctv8hd.m3u8?auth=test20251009$LR•IPV4•90『线路33』 -CCTV,http://204.12.221.218:8181/3m1080p/cctv8.m3u8$LR•IPV4•90『线路34』 -CCTV,http://69.30.245.50/live/cctv8.m3u8$LR•IPV4•90『线路35』 -CCTV,http://222.223.41.27:8888/hls/9/index.m3u8$LR•IPV4•90『线路36』 -CCTV,https://hwapi.yntv.net/ew265l/z1z6s5.m3u8$LR•IPV4•90『线路37』 -CCTV,http://74.91.26.218:82/live/cctv10hd.m3u8$LR•IPV4•90『线路38』 -CCTV,http://74.91.26.218:82/live/cctv11hd.m3u8$LR•IPV4•90『线路39』 -CCTV,http://38.75.136.137:98/gslb/dsdqpub/cctv12hd.m3u8?auth=testpub$LR•IPV4•90『线路40』 -CCTV,https://event.pull.hebtv.com/jishi/cp1.m3u8$LR•IPV4•90『线路41』 -CCTV,http://pull-hls-f1.douyinliving.com/media/stream-696107587393815378/playlist.m3u8?keeptime=00093a80&wsSecret=bbbd054778ab532edfa97bf7c5395746&wsTime=6a544fee&arch_hrchy=s2&s_anchor=1&major_anchor_level=vip&t_id=037-2026071310394131FD5A22CCB9DDAFA77E-5XIF43$LR•IPV4•90『线路42』 -CCTV,http://63.141.230.178:82/gslb/zbdq5.m3u8?id=cctv13hd$LR•IPV4•90『线路43』 -CCTV,http://113.25.252.226:9901/tsfile/live/1017_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•90『线路44』 -CCTV,https://event.pull.hebtv.com/jishi/cp2.m3u8$LR•IPV4•90『线路45』 -CCTV,http://38.75.136.137:98/gslb/dsdqbv/cctv15hd.m3u8?auth=test20251009$LR•IPV4•90『线路46』 -CCTV,http://38.75.136.137:98/gslb/dsdqpub/cctv15hd.m3u8?auth=testpub$LR•IPV4•90『线路47』 -CCTV,http://38.75.136.137:98/gslb/dsdqpub/cctv17hd.m3u8?auth=testpub$LR•IPV4•90『线路48』 -CCTV,https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784322000-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-25fe408e6545f49f3d4eb7f92e97c764&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•90『线路49』 -CCTV,https://shcm-stream-cf1.stream.264788.xyz/cms001/ch00000090990000001620/index.m3u8?streamid=8a034b40397504e25b3775c772237996&streamkey=01vY5fRxC8VyKg4oq30vfikHXTCAKySLP29l6OG91kQlzDttHgzNLkUw5kivm3PfNsVHJv5FgdsPBYFYI2IWpt7tfRCuFHqLT2pvX67ubMds8jl2DHtvOh0&token=1775754349-4f33f4f84a4abeba-0-91687dc8c9325092efa1d00f330d2710$LR•IPV4•90『线路50』 -CCTV,https://epg.pw/stream/ac8062ec9484078061d3bef507c15a423ac57ae4144e3fcc4b0a198dd420f911.m3u8$LR•IPV4•90『线路51』 -CCTV,https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784325600-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-b583b000601c3690c0e4bae75e1261f0&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•90『线路52』 -CCTV,http://183.196.25.171:808/hls/77/index.m3u8$LR•IPV4•90『线路53』 -CCTV,https://jsv-live-play.sfccn.com/live/jsv_3920_fhd.m3u8$LR•IPV4•90『线路54』 -CCTV,http://183.196.25.171:808/hls/11/index.m3u8$LR•IPV4•90『线路55』 -CCTV,http://183.196.25.171:808/hls/93/index.m3u8$LR•IPV4•90『线路56』 -CCTV,https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784271600-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-6aec44040ec72def77e22587fc404005&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•90『线路57』 -CCTV,http://38.75.136.137:98/gslb/dsdqpub/wsjk.m3u8?auth=testpub$LR•IPV4•90『线路58』 -CCTV,http://38.75.136.137:98/gslb/dsdqpub/ystq.m3u8?auth=testpub$LR•IPV4•90『线路59』 -CCTV,http://38.75.136.137:98/gslb/dsdqpub/dyjc.m3u8?auth=testpub$LR•IPV4•90『线路60』 -CCTV,http://38.75.136.137:98/gslb/dsdqpub/fyjc.m3u8?auth=testpub$LR•IPV4•90『线路61』 -CCTV,http://38.75.136.137:98/gslb/dsdqpub/hjjc.m3u8?auth=testpub$LR•IPV4•90『线路62』 -CCTV,http://38.75.136.137:98/gslb/dsdqpub/fyzq.m3u8?auth=testpub$LR•IPV4•90『线路63』 -CCTV,http://38.75.136.137:98/gslb/dsdqpub/fyyy.m3u8?auth=testpub$LR•IPV4•90『线路64』 -CCTV,http://38.75.136.137:98/gslb/dsdqpub/sjdl.m3u8?auth=testpub$LR•IPV4•90『线路65』 -CCTV,http://38.75.136.137:98/gslb/dsdqpub/dszn.m3u8?auth=testpub$LR•IPV4•90『线路66』 -CCTV,http://38.75.136.137:98/gslb/dsdqpub/ysjp.m3u8?auth=testpub$LR•IPV4•90『线路67』 -CCTV,http://38.75.136.137:98/gslb/dsdqpub/nxss.m3u8?auth=testpub$LR•IPV4•90『线路68』 -CCTV,http://fn.tmde.top:35455/nptv/cctv4k.m3u8$LR•IPV4•90『线路69』 -CCTV,http://fn.tmde.top:35455/nptv/cctv8k.m3u8$LR•IPV4•90『线路70』 -CCTV,http://xc.mfykeke.top:35455/nptv/cctv4k.m3u8$LR•IPV4•90『线路71』 -CCTV,http://xc.mfykeke.top:35455/nptv/cctv8k.m3u8$LR•IPV4•90『线路72』 -CCTV,http://69.30.245.50/live/cctv6.m3u8$LR•IPV4•90『线路73』 -CCTV,http://74.91.26.218:82/live/cctv8hd.m3u8$LR•IPV4•90『线路74』 -CCTV,http://74.91.26.218:82/live/cctv17hd.m3u8$LR•IPV4•90『线路75』 +CCTV,https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784329200-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-2245971645866ed95972e22af68cc8d1&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•90『线路1』 +CCTV,http://183.196.25.171:808/hls/77/index.m3u8$LR•IPV4•90『线路2』 +CCTV,https://jsv-live-play.sfccn.com/live/jsv_3920_fhd.m3u8$LR•IPV4•90『线路3』 +CCTV,http://183.196.25.171:808/hls/11/index.m3u8$LR•IPV4•90『线路4』 +CCTV,http://183.196.25.171:808/hls/93/index.m3u8$LR•IPV4•90『线路5』 +CCTV,https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784271600-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-6aec44040ec72def77e22587fc404005&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•90『线路6』 +CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226895/1.m3u8?$LR•IPV6•90『线路7』 +CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226893/1.m3u8?$LR•IPV6•90『线路8』 +CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226471/1.m3u8?$LR•IPV6•90『线路9』 +CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226335/1.m3u8?$LR•IPV6•90『线路10』 +CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226469/1.m3u8?$LR•IPV6•90『线路11』 +CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226468/1.m3u8?$LR•IPV6•90『线路12』 +CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226946/1.m3u8?$LR•IPV6•90『线路13』 +CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226485/1.m3u8?$LR•IPV6•90『线路14』 +CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226944/1.m3u8?$LR•IPV6•90『线路15』 +CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226937/1.m3u8?$LR•IPV6•90『线路16』 +CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226334/1.m3u8?$LR•IPV6•90『线路17』 +CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226942/1.m3u8?$LR•IPV6•90『线路18』 +CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226316/1.m3u8?$LR•IPV6•90『线路19』 +CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226947/1.m3u8?$LR•IPV6•90『线路20』 +CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226333/1.m3u8?$LR•IPV6•90『线路21』 +CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227002/1.m3u8?$LR•IPV6•90『线路22』 +CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226318/1.m3u8?$LR•IPV6•90『线路23』 +CCTV,http://222.223.41.27:8888/hls/2/index.m3u8$LR•IPV4•90『线路24』 +CCTV,http://116.128.243.121:85/tsfile/live/0002_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•90『线路25』 +CCTV,http://63.141.230.178:82/gslb/zbdq5.m3u8?id=cctv3hd$LR•IPV4•90『线路26』 +CCTV,http://207.56.13.146:81/cdnlive/cctv3.m3u8$LR•IPV4•90『线路27』 +CCTV,http://63.141.230.178:82/gslb/zbdq5.m3u8?id=cctv4hd$LR•IPV4•90『线路28』 +CCTV,http://74.91.26.218:82/live/cctv4hd.m3u8$LR•IPV4•90『线路29』 +CCTV,http://207.56.13.146:81/cdnlive/cctv4.m3u8$LR•IPV4•90『线路30』 +CCTV,http://38.75.136.137:98/gslb/dsdqbv/cctv5p.m3u8?auth=test20251009$LR•IPV4•90『线路31』 +CCTV,http://204.12.221.218:8181/3m1080p/cctv6.m3u8$LR•IPV4•90『线路32』 +CCTV,http://207.56.13.146:81/cdnlive/cctv6.m3u8$LR•IPV4•90『线路33』 +CCTV,http://74.91.26.218:82/live/cctv7hd.m3u8$LR•IPV4•90『线路34』 +CCTV,http://38.75.136.137:98/gslb/dsdqbv/cctv7hd.m3u8?auth=test20251009$LR•IPV4•90『线路35』 +CCTV,http://192.151.150.154/live/cctv8k.m3u8$LR•IPV4•90『线路36』 +CCTV,http://207.56.13.146:81/cdnlive/cctv8.m3u8$LR•IPV4•90『线路37』 +CCTV,http://173.208.212.130:8181/720p/cctv8.m3u8$LR•IPV4•90『线路38』 +CCTV,http://38.75.136.137:98/gslb/dsdqbv/cctv8hd.m3u8?auth=test20251009$LR•IPV4•90『线路39』 +CCTV,http://204.12.221.218:8181/3m1080p/cctv8.m3u8$LR•IPV4•90『线路40』 +CCTV,http://69.30.245.50/live/cctv8.m3u8$LR•IPV4•90『线路41』 +CCTV,http://222.223.41.27:8888/hls/9/index.m3u8$LR•IPV4•90『线路42』 +CCTV,https://hwapi.yntv.net/ew265l/z1z6s5.m3u8$LR•IPV4•90『线路43』 +CCTV,http://74.91.26.218:82/live/cctv10hd.m3u8$LR•IPV4•90『线路44』 +CCTV,http://74.91.26.218:82/live/cctv11hd.m3u8$LR•IPV4•90『线路45』 +CCTV,http://38.75.136.137:98/gslb/dsdqpub/cctv12hd.m3u8?auth=testpub$LR•IPV4•90『线路46』 +CCTV,https://event.pull.hebtv.com/jishi/cp1.m3u8$LR•IPV4•90『线路47』 +CCTV,http://pull-hls-f1.douyinliving.com/media/stream-696107587393815378/playlist.m3u8?keeptime=00093a80&wsSecret=bbbd054778ab532edfa97bf7c5395746&wsTime=6a544fee&arch_hrchy=s2&s_anchor=1&major_anchor_level=vip&t_id=037-2026071310394131FD5A22CCB9DDAFA77E-5XIF43$LR•IPV4•90『线路48』 +CCTV,http://63.141.230.178:82/gslb/zbdq5.m3u8?id=cctv13hd$LR•IPV4•90『线路49』 +CCTV,http://113.25.252.226:9901/tsfile/live/1017_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•90『线路50』 +CCTV,https://event.pull.hebtv.com/jishi/cp2.m3u8$LR•IPV4•90『线路51』 +CCTV,http://38.75.136.137:98/gslb/dsdqbv/cctv15hd.m3u8?auth=test20251009$LR•IPV4•90『线路52』 +CCTV,http://38.75.136.137:98/gslb/dsdqpub/cctv15hd.m3u8?auth=testpub$LR•IPV4•90『线路53』 +CCTV,http://38.75.136.137:98/gslb/dsdqpub/cctv17hd.m3u8?auth=testpub$LR•IPV4•90『线路54』 +CCTV,https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784322000-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-25fe408e6545f49f3d4eb7f92e97c764&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•90『线路55』 +CCTV,https://shcm-stream-cf1.stream.264788.xyz/cms001/ch00000090990000001620/index.m3u8?streamid=8a034b40397504e25b3775c772237996&streamkey=01vY5fRxC8VyKg4oq30vfikHXTCAKySLP29l6OG91kQlzDttHgzNLkUw5kivm3PfNsVHJv5FgdsPBYFYI2IWpt7tfRCuFHqLT2pvX67ubMds8jl2DHtvOh0&token=1775754349-4f33f4f84a4abeba-0-91687dc8c9325092efa1d00f330d2710$LR•IPV4•90『线路56』 +CCTV,https://epg.pw/stream/ac8062ec9484078061d3bef507c15a423ac57ae4144e3fcc4b0a198dd420f911.m3u8$LR•IPV4•90『线路57』 +CCTV,http://69.30.245.50/live/cctv6.m3u8$LR•IPV4•90『线路58』 +CCTV,http://74.91.26.218:82/live/cctv8hd.m3u8$LR•IPV4•90『线路59』 +CCTV,http://74.91.26.218:82/live/cctv17hd.m3u8$LR•IPV4•90『线路60』 +CCTV,http://38.75.136.137:98/gslb/dsdqpub/wsjk.m3u8?auth=testpub$LR•IPV4•90『线路61』 +CCTV,http://38.75.136.137:98/gslb/dsdqpub/ystq.m3u8?auth=testpub$LR•IPV4•90『线路62』 +CCTV,http://38.75.136.137:98/gslb/dsdqpub/dyjc.m3u8?auth=testpub$LR•IPV4•90『线路63』 +CCTV,http://38.75.136.137:98/gslb/dsdqpub/fyjc.m3u8?auth=testpub$LR•IPV4•90『线路64』 +CCTV,http://38.75.136.137:98/gslb/dsdqpub/hjjc.m3u8?auth=testpub$LR•IPV4•90『线路65』 +CCTV,http://38.75.136.137:98/gslb/dsdqpub/fyzq.m3u8?auth=testpub$LR•IPV4•90『线路66』 +CCTV,http://38.75.136.137:98/gslb/dsdqpub/fyyy.m3u8?auth=testpub$LR•IPV4•90『线路67』 +CCTV,http://38.75.136.137:98/gslb/dsdqpub/sjdl.m3u8?auth=testpub$LR•IPV4•90『线路68』 +CCTV,http://38.75.136.137:98/gslb/dsdqpub/dszn.m3u8?auth=testpub$LR•IPV4•90『线路69』 +CCTV,http://38.75.136.137:98/gslb/dsdqpub/ysjp.m3u8?auth=testpub$LR•IPV4•90『线路70』 +CCTV,http://38.75.136.137:98/gslb/dsdqpub/nxss.m3u8?auth=testpub$LR•IPV4•90『线路71』 +CCTV,http://fn.tmde.top:35455/nptv/cctv4k.m3u8$LR•IPV4•90『线路72』 +CCTV,http://fn.tmde.top:35455/nptv/cctv8k.m3u8$LR•IPV4•90『线路73』 +CCTV,http://xc.mfykeke.top:35455/nptv/cctv4k.m3u8$LR•IPV4•90『线路74』 +CCTV,http://xc.mfykeke.top:35455/nptv/cctv8k.m3u8$LR•IPV4•90『线路75』 CCTV,http://69.30.245.50/live/cctv1.m3u8$LR•IPV4•90『线路76』 CCTV,http://74.91.26.218:82/live/cctv1hd.m3u8$LR•IPV4•90『线路77』 CCTV,https://global.cgtn.cicc.media.caton.cloud/master/cgtn-america.m3u8$LR•IPV4•90『线路78』 @@ -2083,8 +2083,8 @@ CCTV,https://xykt-fix.github.io/Y77.m3u8$LR•IPV4•90『线路90』 周星星,http://live.metshop.top/huya/11336587?cdn=alicdn$LR•IPV4 周星驰,http://cdn.jdshipin.com:8880/huya.php?id=11342412$LR•IPV4 梁家辉,http://live.metshop.top/huya/11342429?cdn=alicdn$LR•IPV4 -刘德华,http://epg.112114.xyz/douyu/2516864$LR•IPV4•2『线路1』 -刘德华,http://live.metshop.top/huya/11342424?cdn=alicdn$LR•IPV4•2『线路2』 +刘德华,http://live.metshop.top/huya/11342424?cdn=alicdn$LR•IPV4•2『线路1』 +刘德华,http://epg.112114.xyz/douyu/2516864$LR•IPV4•2『线路2』 林正英,http://zzy789.xyz/douyu1.php?id=7356023$LR•IPV4•2『线路1』 林正英,http://epg.112114.xyz/douyu/218859$LR•IPV4•2『线路2』 @@ -2568,24 +2568,23 @@ YOUNG,https://s.emisoras.tv:8081/penielkids/index.m3u8$LR•IPV4•3『线路3 中国蓝新闻,https://ali-m-l.cztv.com/channels/lantian/channel009/1080p.m3u8?$LR•IPV4•2『线路2』 广东,#genre# -深圳卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226959/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EGrVNEZREjuNVKiTJo2mtwg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•18『线路1』 -深圳卫视,http://120.198.95.220:9901/tsfile/live/1048_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•18『线路2』 -深圳卫视,http://120.198.95.220:9901/tsfile/live/1048_1.m3u8?key=txiptv$LR•IPV4•18『线路3』 -深圳卫视,http://173.208.212.130:8181/720p/szws.m3u8$LR•IPV4•18『线路4』 -深圳卫视,http://192.151.150.154/live/szwshd.m3u8$LR•IPV4•18『线路5』 -深圳卫视,http://124.228.160.210:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•18『线路6』 -深圳卫视,http://36.136.38.87:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•18『线路7』 -深圳卫视,http://112.27.235.94:8000/hls/33/index.m3u8$LR•IPV4•18『线路8』 -深圳卫视,https://sztv-hls.sztv.com.cn/1SIQj6s/500/q7rdSsQ.m3u8?sign=71764b3a0bcc96b03dea9693d605e020&t=6a579f21$LR•IPV4•18『线路9』 -深圳卫视,http://38.75.136.137:98/gslb/dsdqpub/szwshd.m3u8?auth=testpub$LR•IPV4•18『线路10』 -深圳卫视,http://23.237.228.134/live6/shenzhen.m3u8$LR•IPV4•18『线路11』 -深圳卫视,http://gfr.x3322.net:9901/tsfile/live/1095_1.m3u8$LR•IPV4•18『线路12』 -深圳卫视,http://api.kkitv.itv888.cn:8080/hls/iftsd32ykm/index.m3u8$LR•IPV4•18『线路13』 -深圳卫视,https://iptv.catvod.com/catvod.php?id=szws$LR•IPV4•18『线路14』 -深圳卫视,https://httop.top/ysp-深圳卫视$LR•IPV4•18『线路15』 -深圳卫视,http://iptv.huuc.edu.cn/hls/szhd.m3u8$LR•IPV4•18『线路16』 -深圳卫视,http://153.0.171.163:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•18『线路17』 -深圳卫视,http://38.64.72.148:80/hls/modn/list/4007/playlist.m3u8$LR•IPV4•18『线路18』 +深圳卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226959/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EGrVNEZREjuNVKiTJo2mtwg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•17『线路1』 +深圳卫视,http://120.198.95.220:9901/tsfile/live/1048_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•17『线路2』 +深圳卫视,http://120.198.95.220:9901/tsfile/live/1048_1.m3u8?key=txiptv$LR•IPV4•17『线路3』 +深圳卫视,http://173.208.212.130:8181/720p/szws.m3u8$LR•IPV4•17『线路4』 +深圳卫视,http://192.151.150.154/live/szwshd.m3u8$LR•IPV4•17『线路5』 +深圳卫视,http://124.228.160.210:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•17『线路6』 +深圳卫视,http://36.136.38.87:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•17『线路7』 +深圳卫视,http://112.27.235.94:8000/hls/33/index.m3u8$LR•IPV4•17『线路8』 +深圳卫视,http://38.75.136.137:98/gslb/dsdqpub/szwshd.m3u8?auth=testpub$LR•IPV4•17『线路9』 +深圳卫视,http://23.237.228.134/live6/shenzhen.m3u8$LR•IPV4•17『线路10』 +深圳卫视,http://gfr.x3322.net:9901/tsfile/live/1095_1.m3u8$LR•IPV4•17『线路11』 +深圳卫视,http://api.kkitv.itv888.cn:8080/hls/iftsd32ykm/index.m3u8$LR•IPV4•17『线路12』 +深圳卫视,https://iptv.catvod.com/catvod.php?id=szws$LR•IPV4•17『线路13』 +深圳卫视,https://httop.top/ysp-深圳卫视$LR•IPV4•17『线路14』 +深圳卫视,http://iptv.huuc.edu.cn/hls/szhd.m3u8$LR•IPV4•17『线路15』 +深圳卫视,http://153.0.171.163:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•17『线路16』 +深圳卫视,http://38.64.72.148:80/hls/modn/list/4007/playlist.m3u8$LR•IPV4•17『线路17』 汕头经济,https://stream1.freetv.fun/shan-tou-jing-ji-2.ctv$LR•IPV4•11『线路1』 汕头经济,https://stream1.freetv.fun/shan-tou-jing-ji-3.ctv$LR•IPV4•11『线路2』 汕头经济,https://stream1.freetv.fun/shan-tou-jing-ji-5.ctv$LR•IPV4•11『线路3』 diff --git a/tianjitop/llllo4k/NJ4ZWwg7_20260518095827A465.jpg b/tianjitop/llllo4k/NJ4ZWwg7_20260518095827A465.jpg new file mode 100644 index 00000000..5713b5f8 Binary files /dev/null and b/tianjitop/llllo4k/NJ4ZWwg7_20260518095827A465.jpg differ diff --git a/tianjitop/llllo4k/README.md b/tianjitop/llllo4k/README.md new file mode 100644 index 00000000..027eff94 --- /dev/null +++ b/tianjitop/llllo4k/README.md @@ -0,0 +1 @@ +# llllo \ No newline at end of file diff --git a/tianjitop/llllo4k/api.json b/tianjitop/llllo4k/api.json new file mode 100644 index 00000000..7cc31b52 --- /dev/null +++ b/tianjitop/llllo4k/api.json @@ -0,0 +1,2486 @@ +{ + "warningText": "资源来自网络,无盈利纯技术分享![所有内容仅供学习使用,请勿用于违法及商业用途,请勿付费购买]", + "spider": "./xiaosa.jar", + "wallpaper": "http://127.0.0.1:9978/proxy?do=wallpaper", + "sites": [ + { + "key": "豆瓣", + "name": "豆瓣|首页", + "type": 3, + "api": "csp_Douban", + "searchable": 0 + }, + { + "key": "配置中心", + "name": "配置|中心", + "type": 3, + "api": "csp_Config", + "searchable": 0, + "changeable": 0, + "indexs": 0, + "style": { + "type": "rect", + "ratio": 1.597 + } + }, + { + "key": "本地", + "name": "本地|视频", + "type": 3, + "api": "csp_LocalFile" + }, + { + "key": "预告", + "name": "新片|预告", + "type": 3, + "api": "csp_YGP", + "searchable": 0 + }, +{ + "key": "马猴影视", + "name": "马猴|秒播", + "type": 3, + "api": "./py/大马猴.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 +}, +{ + "key": "可可影视", + "name": "可可影视|秒播", + "type": 3, + "api": "./py/kkys.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 +}, +{ + "key": "电影人生js", + "name": "电影人生|秒播", + "api": "./js/电影人生.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "type": 3 + }, +{ + "key": "新瓜子影视", + "name": "新瓜子影视|秒播", + "type": 3, + "api": "./py/瓜子影视.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 +}, + { + "key": "高清", + "name": "高清 |秒播", + "type": 3, + "api": "csp_AppQi", + "searchable": 1, + "changeable": 1, + "ext": { + "site": "./lib/602.txt", + "dataKey": "FTgP4Gq8zPiqbt7M", + "dataIv": "FTgP4Gq8zPiqbt7M", + "init": "initV120", + "ua": "okhttp/3.10.0" + } + }, + { + "key": "魔方", + "name": "魔方 |秒播", + "type": 3, + "api": "csp_AppGet", + "searchable": 1, + "changeable": 1, + "ext": { + "url": "https://www.douy32mf.top", + "dataKey": "1234567887654321", + "dataIv": "1234567887654321" + } + }, +{ + "key": "小帅", + "name": "小帅|秒播", + "type": 3, + "api": "csp_AppGet", + "searchable": 1, + "changeable": 1, + "ext": { + "url": "https://ys.xiaos12.cn", + "dataKey": "chfgjfrhhf628vw1", + "dataIv": "chfgjfrhhf628vw1" + } + }, +{ + "key": "4k", + "name": "4k视频|秒播", + "type": 3, + "api": "https://gitee.com/Ye-11X115490/PsyDuck/raw/master/lib/PsyDuck-Qiji.py", + "searchable": 1, + "quickSearch": 1, + "changeable": 1, + "ext": { + "url": "http://110.42.67.221:9004", + "dataKey": "FTgP4Gq8zPiqbt7M", + "dataIv": "FTgP4Gq8zPiqbt7M", + "api": 2 + } + }, +{ + "key": "88影视_js", + "name": "88影视|秒播", + "api": "./js/88影视.min.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "type": 3 + }, +{ + "key": "神马影院_js", + "name": "神马影院|秒播", + "api": "./js/神马影院.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "type": 3 + }, +{ + "key": "豌豆", + "name": "豌豆|秒播", + "type": 3, + "api": "./py/豌豆PRO.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 +}, +{ + "key": "猪猪影院_js", + "name": "猪猪影院|秒播", + "api": "./js/猪猪影院.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "type": 3 + }, +{ + "key": "开心影院_js", + "name": "开心影院|秒播", + "api": "./js/开心影院.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "type": 3 + }, +{ + "key": "ddys_js", + "name": "滴滴|秒播", + "api": "./js/ddys.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "type": 3 + }, +{ + "key": "iysdqjs_js", + "name": "山地|秒播", + "api": "./js/iysdq.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "type": 3 + }, +{ + "key": "绿色影视_js", + "name": "绿色影视|秒播", + "api": "./js/绿色影视.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "type": 3 + }, +{ + "key": "小鸭子看看_js", + "name": "小鸭子看看|秒播", + "api": "./js/小鸭看看.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "type": 3 + }, +{ + "key": "飞鱼", + "name": "飞鱼|秒播", + "type": 3, + "api": "./py/飞鱼.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 +}, +{ + "key": "BT", + "name": "两个BT|影视", + "type": 3, + "api": "./py/两个BT.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 +}, + { + "key": "金桔_js", + "name": "金桔|秒播", + "api": "./js/金桔.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "type": 3 + }, + { + "key": "4K影视", + "name": "4K电影网|秒播", + "type": 3, + "api": "./py/4K电影网.py", + "searchable": 1, + "quickSearch": 1, + "changeable": 1, + "filterable": 1 +}, + { + "key": "mafa", + "name": "麻花|影视", + "type": 3, + "api": "./py/麻花.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 +}, + { + "key": "七猫", + "name": "七猫|影视", + "type": 3, + "api": "./py/七猫.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 +}, + { + "key": "柯南影视", + "name": "柯南|影视", + "type": 3, + "api": "./py/柯南.py", + "searchable": 1, + "quickSearch": 1, + "changeable": 1, + "filterable": 1 +}, + { + "name": "①|独家菠菜", + "key": "AppV7Fz", + "type": 3, + "jar": "./jars/20260710134123-31654126d0.ong", + "api": "csp_AppV7Amns", + "searchable": 1, + "quickSearch": 1, + "changeable": 0, + "ext": "c8075714a2413f05151fea6864509533510f048c89b582eb125174a0c364626eb83a35618bdd10c1840663d38fb441b8ff25a078bc11c7a8f17ad5b723195ef16fe405746bf6b3defd8d16ac2d07b6f6580ea4826889761c1eae278162b6dc791fff46bcd3a42acfdd470315a17f741eeb834b4fb9f184e3baa5e698b9a771341f86037ec6fa0b8b5d3e2f12172d3ba5779bcbd40a9a9842e5e20efe45b59459bcf5269b50355cebeab216ced19dff4c8d1e3968be184fd3d5609eae3e6089d84bc7b97286027f67ef0d2b19002a7cfd7ad3094cb22ee9efd9dfcb7554f5b204f3bb205ac783272c59d9fa88672e92c91cf1f022930ce8acf1850b86c110e19cc99041d491a3330e53981a954fac8b71af43e3c200c360968d571b1ccbec1a91abfc9e6723b8b2fe1f77057423a7c152c35e5a6573a8dca051273febfe8fd8c12383a37226d8b0f4e8f09e3fbb99becc533165486f60cba1ba247842491d5dd10bc79cad14ecd4da86d0b4e9b416cda8bae4f52156c5165025cda138161b660c1e488c6fa4e733e7c78731b21564faf5008f69b326c9bde49778fd9a7a41de21b7d3dcecdd2461279726060d22d13da499673fa92de73bdf2ed4a1388e457f6d22ecbdcb3a37c1ba4196f98990bba4d4dd8713a6cbb3e3cc2c6bd8ef1dd3cd59fcb2df6dc6ba92b88ac79b047f47ef178c279d353d06d0280aaf30e23b5940ea278c24ba357999db8431273844a2016267d42b89c88d163a68d5cb17d14d46529d9922580294a5be697d66b074c8601c0e4e5c8789d3d5c0b5bcd0ec5cbd9482a41a725aa8fed498de8fdc5d7a275322afcd0bed8bd35ff237edcead3ce0d3984ee00734ed61e1f4c0e67798324ff694db01e3bac4cc00706132b77a4bddd801db4e527caec727640f80737a5e0d9793bc2d7e8a42a3996b21ac66a2e4c9ae4613e63f597fd72f4c4c7866ba14e2431a24325d25fb79eaaf19d1e1d01f7b4269fafb683aa4485580639c7a59975c3827a98c73906708f0e4efdd6a43e72e6ccd8b51d3ecfe281aa189c9544ca2808593fd239dff232009197c4ab4babed12df78fef1e9cf048de39f7cdd47ebeffec77113906eec44cf0e48fc123a81b73ab5f36cb3cc3b14837cd469e9264dc935f5b63bcd01799f2e3045bcf6442d1c2adc74380b9b3566ddcb9ea4c833e044a90d0f5cc4a47cfadc4e172f285f45ebc348ceed3d98ff83fa4bf00200f6f9eddbd37f26d6632db73a96f4a48d22caea73b0d130813de12b372c65dd99164dcf309038b3fc0b44cdb7656be826ce11dbcfae7e7d4419cfaa9b4bee1ca93e6d5dddd8bb44c5c2f3c6129d54dcfcab74412bfdd8c4e8ced562d5a6b3a7d07b68b530d7b67f257e683f5d943de791684609e6e6fa2bc6602498b10e0c9e8b8ebaede9dd13b7a4606b17053b238f5e5dafa9035b62fab1e7705aa1248abcb94c6ea418fab3a1a61f283925d11e5fd284b67f8fcdf2324b7a8fca8f4d6e5aabf49382f14ba58af771078e11b9156d18b4f4a73c1203f6517dc5294ed34b8d5b1aa0e02f82ff26405441923d120470e1cc7fa8fd881658bc44481e3cb53f30a4a0fc0dae84d8686933e3d805f936d759fb565d8f6069b976158e9a9b4f4675d0c958f55775dc6861186e7b0619e53e8ae19d283ada551c01b3743d22724b1722f79fbd9687c4a767d8b20a01999ecfcc80f0afcf23fb953290148f249eb882f907ea476f3b6c2461b8fa997fd4d6673d53473f8b264f7dc42dc526a2286065e4c37db9285b0df20e7fae6516dfd726a571f2f7fe23cc2f75d9dd202754e16987cfbf476b2cc55906b6994ed221da4a20f07693982589c3735c2386f4200b3cdda1f6010d512e344b981812a4a501c4714c6972bac852d0b8aa575ef2a650f178325266e5abb78d29394c12bd420678d240b4ad4d79b0540b108c8e22c6df84da38a300f30040b3940e4c69497a0d757525f08f592001b212fa31b4db83f311a843e062dfc552d5bc45612fc1c53dde127c260161f12d3cf3c1908b31182dd260d97913bda9156b66fa9465db0241f075b87bfee12d0258dfa4a410ac09ac6e9582e462c32e42132c8fd259ef8add97f96f663ff92c24bff1d1d00b4f37e5260476c436c336611b79634dcf343d80e51b498826c2a0f7da5471e6a109d3b18e038f974e6a1168d7ffedb3f1f88e8307315e6fdc916b05188023e84c46dc4fe4c2ab396fb825183a06d91ca9375f41168986d2ed90e511506b3d2ef7f79af2885733185f24bc37c5b0466739f9eeb5268d897411468ce2e03934f01321b0b7425cfa76b075742c3017be9e416273622cc6a8bfa30294f362d6e5b02d447829def580f01e4031a6455e37853bcc183ed9dcc4fc8a55c8bc3cee272e5611c0b0cb99edf905a7046a36c006d75e101f878ca0a3f942d6234d72eb02aa608b63452180995b19e86d0d4e16f4b9ab304fab82335eadd0ba83fe1f5079631b82c853d83d95dba7f1c632a9bd217ef10673481b8e8d93a190829c03075da8f433d45159974d8889ba06c123047279ced1c1add7f20c2814dbffda8558a8551b4294ef60a42cccf53f794dda8d8f70d03c5a81849f23a6c3faabf298a5add323721e6a1726f73dd135758c646fb41b2ae7af7114fbabb3e41ff1df4d2a1528265dc921e0021f26ec8bff7174efcf946bd5a7b62f2e6b0848b385675c27b1ba200352d72dad486c9b5896b49d94a05773f32de96005c3d4c15a7dc061e4cd530b8f27c125f2c79c63c99b101cec9f76ba143507c0cfc9958d2cdf9e87dd82545b289bb0a80bb8148cd86b021bd951f52824012a5a46768ac51fd1fd5b69f8f923d61240f995a4da2008fd2f50ce4d81fe44150c39884ceba6769555b9f6360c3c2edd5061e4a0d5a6253c0b5a22d7375def8cf6c9369c159db0e51f5b2c504a9a193d23d9d5bacb498c0f2424e0206d7358bc9cef7e6d379810fb36764d5ec356edcb9291aaae3136d937232" + }, + { + "name": "②|菠菜专线", + "key": "AppV7Xy", + "type": 3, + "jar": "./jars/20260710134123-31654126d0.ong", + "api": "csp_AppV7Amns", + "searchable": 1, + "quickSearch": 1, + "changeable": 0, + "ext": "e2eb5714a2413f05151fea6864509533510f79b104fb5bdb95f6904ef2318ad86ce4dfe796c4e63fd050695a813534fe77dad1fce40faec6f4c229e3a369420975823bb9d4a2544a16f87f3b85dbe0d23b12b94031672b5f7cacc8b5bda77c549d560b7ea461e1bca00d81dd68c860de33ba77ea23895efb582e98ccffee51b3296277820fd3a6fe3f65e7c0a93f7c07a4cd91d63f66cb2921cb013d0e93f0059e6f35d839b1ebb40078ed89b20115f85ff6d81d97ab99c0536638ab4454df59b59b025dbfc9c870f18d990519c2c5f2df68a619581a30f4b99be2fb23d7efde2642327a6e37ba955c985294082352c19ea83770f754a50046886aa3e388784c9538f688af27a15675e49dc788d4bd0d85becf809feb9c29c737bd3a5474c19ace10533e2e4f1e4b2d238f2544eb641c0cf63710d9b5c308c49e0c2634d655d1f25cb40920ce8d594d79a80be0f90261ea0a2152996d94407b4c5287373623ae0fe61ebfbee98cd97e3a2e797c8967bd789c2cd0876ce90ddc7fbf314c7a0b72a2d3a148895a00e08286d2856f71b1174d960b4d3227e9cd0c073c49e8cf36d5eeddd9cdf15f602e5affe008fae1ebd57bb4f0c2878d9e889619139d4273c3db6c45499d1a53f516745c02d4692ed2aa78db8a759bada10fc4beaed9171ce03ce2f567b81695c7f862dcba2804e20440ac0bc4f54b3cec65a7fce5338b8d36ee68c401f674760348ac6a6edb278ede899c673d2bfcb9bc6fc7d6e23aec4e5fabc8597438a43e04cb26bade3fe437f30e4c51d99687ec1cf3b1dc03dc994b66964c3f10bf9e1c9edb667ad01c384918a19941fbe10642277cc21974628d0a48d12562eef1d504dfd2db4904f5cdfa42f8c268c69c201e10d2addb0c9fff89d75a9cd75957096d42c265a25d8d4ac5655d63f2ad81012453d2b5c40347e728244c94d6d9c7f1a0a9dd7e1aaa03028b681fc4663df06501e5a430ca844ea8d06dcd26ca9c676d37236490aed6be73aeabd5db7ebe6335feba6dcaf9a89ba2e6395673e465b8bd262346535e8106bfdec6ca93068456fa31123b80806b41aa899801bb5acbc7b987903078fd96a70d026d076d3dc656177cec26c779e0f07c7942e8a8b2ff11881d384df6eac05e3a6f13386f7de879f65925165da9b0788e83cf1afd13b192380f80d84438c847b9010dc3948771b26d674b5146b06d618b22ebbdca99e12b6c1775442b9b3911c073f154e50563880a636bfdb8a387f6ddadfc3fd9772d7b2c2e5a29907125f09314ad2d10b66fa96dc93e9fac1afad3c1433fef8799daa595c2e8d5bcd53b3165891e79a80bba0137264bf357e62728b5501d3361c541748d1dbdd7e3320f97915a589a75f48d37dd0a908af6bcc8afc484f646fdfd5efd534c58432b046cf19572913011503bab265e667ec99703a4c3c4f57e3702737806d50720b8adb6800885fd0e66f56d93876c12f251c6a1db7a16bf9d2ca55d9799a25368b114830680fc645ec5a06d6835e83c9f8cd6610111bcf9fd501e3421054ade3378bdde9f68e90a3b30527968be7131dc947ed60ef208dee128cc1cf59384050a4e9f1c55190bce096df3170e38468dc9ceb7ed19b22e24b7f1923ba2b47e7a87dd26303ae4f6c1b0c18671723b47ed25807816861ffabcc7abfbbeeb53749cd9bd2d3070062a1223c9a0178ec04aa74e46c86cc997abfcff28a56722cb9c68c59d4704b6d55c76264f3105c642fa791d26553b8a219816d1ab730f15a99f488025624d77a3a18b7048efcf1d79496696350c5cffa58e9718b4150b3c6678646c4fb9a0409794bfed59f16de96407c50106cfa43a16f4790dd69822a01eb56b2511190a0f38e7236667b477729b937dd7cc1713273399d0baaa5589459fe31328d8c7548e32319388dc1e42cee10ee62ce8635fc7579255109cafbef3f6ff34ce3ebb3ed3aff703f8e06a60b2ccebdc290751912c6c97156a622455bebe471deb47d6d1be8c3293538d27a7e22de9da2b226a386aadafdc3a222397048982c5f2e7d2939e6828b27788c1d1b7439cf8c7ada365e25cb3b1a469e485c6d8a3a9dd04f7f5423f6713fa391543accc33f22720d2214928c0357661ac68819122bb5d0e57a142fabfe9edb82b9e55994b874a7c75573c16da78cf0500d3c72fb9acfdc070263006c25ee3817e3eb34b652b9db60311e643539d5bd60f6c1be0866f8fa6ec9ec751824758ee4d1c8c08c515b279d5021e0f9bb0a6296d5616e1fe5480433ea640d792e5cc36925166fdf81a7be0844124adf073b6f1d37961aca6136ad046a4c82a29729cdee9ae996a8195ca73b2e75ae909fe858dd783a45b0b5860af5421385d24fb35910159c6a2b7fb6f20f42d013038a9a591188c27ebe06b64f72cc6245dc31d811bb7b5629c1587090431573ef44e6694e314f3d23117374e6efa80a58d7291921b99ec217b49e6460570ff5991cc16b2e79581ac14d406a021fa7e11d71275044ececc359d6cf26c881f39837fe1bb65979662c2d2c2edbf6083db05e117f62caaecf8793c87dfc3f45c1146f1e739d78336d6c4f969843099a9bfebd394e60c062fc8b4a536ab2fc8d8242a4e7bcc637a6b565621f9d4130dbffe2bde9d5e032b73fdbb6be91c91b5035b3f2e9fd638f8bdfe73e5a653e861c4f3a8ce1a9048c6a8ce361dbd44533eb32de3fe8f582bba7a982f0472236e90286819c2ba04dab382092cdbaaa4ec92567b600bbd1210bd5b3462463402c97c1a4ab70deb639e7efd0f657d5fe60ee524df15475bddbb70c4e130ad3f7a8f9e69aee933b1e93747916bc9820c6f3daa3bc00e2a5707ea4f1facb1132d6404f5f2b588ca955d59063846e52c21537261b38ef5db85b744f31c4ab713b231ef219c3ad16a2e5cbb80a04d8701a4215ebe4379e2c482f7644127b7533fcfa87511b800361babab75c7feaebbedd6351e845e326876a033ee684bcca55e6d424aac4aa468248e7e7ceac50aaf6c61115a1c91898f9aeb3a7520" + }, + { + "name": "③|菠菜专线", + "key": "AppV7Zjdr", + "type": 3, + "jar": "./jars/20260710134123-31654126d0.ong", + "api": "csp_AppV7Amns", + "searchable": 1, + "quickSearch": 1, + "changeable": 0, + "ext": "8b9c5714a2413f05151fea6864509533510f64888873c9014549f490a22fcafbe95529819a25c21bad6ad07d44cd28a5a28acb9d207ef4ce35f2e61950bbb27c00c9a268ee66a11cb5943790a877b4b66015010ed7f2a3c6f35b794a29dfaf6762ace01040b2ec17d426cf9cb2a1a9d55450210a11dc1ff0584959270cf53b6d3aea808e786f3c2d18bfb68172f0abb7a06ca65937e9a325415139809f045e71a15a349ab2862e8dfe93f2cb32d1e5b7f9cb2a906741073828339df5bd0f06125ebee88a97fcf33c72e57e9b090d3766b1c513c46a06e5c6ab255725cd2c42938351ec736b5980b1a08bfac2484ffccf82a6f77a34a8a48e15ae0ea7e5b15c49bbf3e59217521e29129733f372511540c52165c8411ace8b94b928a8fc89ae86ebdb1b9d502b438adb692ef9ae36f9f577b4d57654dcdec9957b9f6d14924d329ff79d4fc21ade518d7190673dc7a64cab4d3b91a0f12134dfd8433d6cd80f725a9f4215e2289adb9b8efc835264733c12f76fa846a31b586572f81b07d3d8415c871afefbe611a28207a382af39b34dc5864a2f53daf7067dd4aa59e9a71c09fdb57f5ba249b87f90b01e55190b703d9166ffbba536924065cd8a6fce03a7bc32a4053e4e2d5aa9294229f3ade0e30cce1f1cadcc4d10d92ed58b150a7becdd0c08341868afeaf727640fb755ec84aa97c96c937f68f2463d7555dc1a95ed5fb5f4dd274e7503c85c566bdb0865d3b2213c478c6286b52e69cbe490c105dd5b54c661409f3d24eea0f4b58af17e525a2cdc94b4ab76aac54bc962a82360c3b8a9f53dd958343b25afb37dfb6dcf7dc7d37ffec1623ecceb3053515e273e242cff1d3400c8bd7246d4a91fd7698848038dc111cd6a408f4b7cf5a698bf878dbb322577e03bcfeef7c14e22db29d11d63303cc07eb677aaacda3f9ed4df232917bd5ba99192a4a917d5d11b0d226ef4ed621a84dfc2524f501bc7437c4e95af25c10ed40ec8bdd41ab6728fdf71e844825b8e74aa0ec33d778701d92d94cb96383f2cb8538285afd7fb0d0c0d1f4b6e5f4696710b8fb3fb4d9cb808e53e21216c18417378cc5d40e0a22c309a4845d5abb8cdb2da48e3e3ecefdd4226ec076756762d4eb51bd46f2db84d420e008287f0982928f185cbf76cc817936e8c43a746f392fbea550dd6330f96b9ca8a15f5eca20221a8e6f6fa475e28b6b0051c65edaa5ad44e0a944f439508cc07220eae95f36d60a884d2d58aaea5276075774b89ce0f2a6043137da669c5d35cba99be6fc740c1942280dfc36b8d4c7cac4f3fd545006b3bc4bc320e16002b59e0b94a592454991739e7832a88f76f01888b77d445e75fddcf5b758e0416eb037fb1e997bc4ddbfde6777376602af63ab66881227f434cd4f040975aee8d126c246e14c19d66c7b64e63d1422452314a67df4e29788b1adcb200d71a56d63b5b77c8ff152d7c3ea96e290a3b6aadaebb9c6aea679ad93ae3734f180a3624e54361ae64845b39e69907626b1465ad50ff1c5dfe079bb72782770e1620b0340d355b421002e382c9fd852af284f3fa467c0bdb4e6918e7608299bb6ced4a3fe688ca1516b839d36993aaae3a3fc857519cc2aa19314180c3a5fea7c99b85d1bb2ac6b383a8da097c499aadba856c4b1a66cb4aa0a4910e74b87e2f4122d7909927660657e0d7df54a7638860dc142e5e3dccabdba1c8b9e5a85c0a608ee6b4775a5a03b5341150e318f136d2e38f40d96f3496f5fd10272ff9dc1bb8ff9f71c51c81dc08bb603cc09649a3019aec63bddbe1d04de9728da38a7a719913ab0b0a2d244695b21faf9875fb4ea8adda58d1acdead943ab83b50b6bcc9a87d92ef9e477fe944e0c180eb7bbc7173f61ad1cbb7a571616cba5d9406a87f22cebcf3f5a26ca78b31a7a3b7433228739495de6a094fd56d77f81532e2133261c5c3a7d5663cc95ea3393ba06096d435f411890c65ce222176f9b3688157347b673865472c8473b2cc56f1ee1bb0d7d720a71a1486d8451f33f7f33d392cd16f4dcc4f813c4624d170c7be56e7ed50af2d0a2e20600bfd3ad5cbb7a5b0bc6962cedb46096fbeb709e217b70d2f7c89d6c24e870c9fe2a9dc01dd778deffe1fa09e26a4554e3951adb4c201d9d67f67b1ccccb9d0cc381f050a7d0569f8f6bf52a2693b8e2724d0655e8668809c4724d422e73d38c1bfe7f33c4280fb69a428dab2e88abc4a3828dbab42aeb8bb8d3413b8ba625d2556142514fd1231e215141de329a51db57590e576c83e60e8c4d3f5a7391539c3816d62ae90963bb91beb8b180c36aea3562471dcb68a91dce2d09f6ba2235f7e4e340991cb6f964c002ac298659c79f915eceacd345ada76932ad4802d74ddec9babf2e46ae2a5102958b654f5b21d4ff7b68b09cc0759e7ac975df9324db45ae8e713d125020bdff208c0f08a2f46acd49da6144cf96e8b6861e9cd2cd5eb319362e99dce9602f6dd3dc218161e0c6dc63493929c095a265505a58c16305d7dee8956f2af7cce4f21567f6dd0274f77db1515c09de70e0591ec1c71a0e3473d8ca23b0dbe3c95ec93c3054a0c21d0a4cc128fcb74bdb6381c5bd08a54a647df1af55b6b7965ef73c53de214d3ee589791b40158869e2cd1dfb36195356dde2f960c9efb4a87824e6ab1d132b8356e1177871dc33b1c7c7316e263960b11b35a910d1ea9caf667e29ba5d3baea33af6a7c719b138c0143245bfa3aff901679e1db43a7bcd278ee684bd5062852b7175677689a30119029491a5d7077c0f6c6cc7776aba551e065db784fb5bc00d67bd3084bf68e9cc06b281e05c5884e8f8977b388d8db439e7c5bc2c3a73cd8af002c845215fa3af57770de0cf0a651c7a3985af5bb3f18211696f94937ce836f8ea42d701be2bf0d04c41ffd5bb1d99783ce591546f2698423800fad6a0d344262d8d09c206470b56fb3431d28771f1159074f75e1e7" + }, + { + "name": "④|菠菜专线", + "key": "AppV7Xyz", + "type": 3, + "jar": "./jars/20260710134123-31654126d0.ong", + "api": "csp_AppV7Amns", + "searchable": 1, + "quickSearch": 1, + "changeable": 0, + "ext": "3b135714a2413f05151fea6864509533510f64888873c9014549547c4b35cb1adeee20e0d57ba3751a77a841c05ab07707cfd47e5ce58300c4d76a63b36769f5ca194cdd372e6467113c881d77e743db16d7abe2ebd99e610047bc3a54b53b4f7bede852c8e349a047965ceded596e9c7cdb344a399e97218a77fdb81e930db1d2f09f2d4c2be1d6c471c80699fc615e8ec072aba54e4f79e9c56aeaa4461e497c6c381b699686935bb9dddf708e9d482bfc16e5aeae6235094fb4d8fa6741ca8318b2520013ff54ab8cb1203d078e4b8dc78abd041b48191ec6893734015fd08d2f4ebc76193de569e55f74a5397c5ea4213b9345bd027ac2986c63ce65636cd7f91f9d30d1ad37b9b4d6de92d545a1545924904a7a4c1b06d181b5dda5f13df8fd20d812125da97f030cf56d088e4ba52a074f50fabccfade34dc57f3c03ca2dc2231bca5a56800380d95dfa36f2cd731c7bd3c7cb97c8d3a027226b7841694066964d2811f51dcdcf51b44eec61fe79b3f778f338ac061b89290367806e3639e3e632c4422005eef3805f21c7c6eb2252646bdbd5fd668956526496a4927b626c15bd74d80fc0a58dd2647e719a0a8d21fd207b69b1c775523b08c70a3dee2aea405c877b5ce2c0674d0dc01bd6aa625299dd224946523dadeff0bc11857a9a979b6565b8ecf701e0bfa96ee984b04078080dd7d53f7fa0229f754d9b78ed48273863a6607bedc04fe48a7228d2a8a0c2c9fd06ba62744aa72542e8880e2b786bd00427d86827d1f075139a5d2e7f9067a5fa6e6972b419c9e2b81cda8ea188b786a63537414ace9159cdf2c0274643b0f560fcd0d528e802d16f2e9f16ea92569126ecc10dc9231c44d689bce4568300845e9232b3e68fc00985f86feaa70f1e72babc1f3e87848639935222bbcd3bdd34b30e5ae6e4f73c984fd222e3be4801099d57cc07289229665a18cc26c7d39e348ae8d7f667c2b6ce0d6fbe79557304c9a7dba512a888504bacb5e04438b2abb8433788567ac2781ec50192cfb98fb17f1b8a9a8d934316c9df70669b3087e9308809e3217ca885ab59d204875856bf085522982e2759df9c7d5e02d7d0b4427be9ce8c5dbb70ea28c979d9588b46a1c784590df6b43f6366d8ca751bb93f9cf2404fbc7c569bd7e1d82060a2e6e71a1254e0de46eae0edb7aaec777b67e745da3f743e6c5f9be0c70daac6cf191c1f32fa36f6b15653b63dfbb5609373a9ac77cae2d8d6407b8b8436f5109f63401fb292efe6310e2cdd3c7884dcc0ebf8633ff3c4348be910097ba9868ad7d8ccf17f7826b831cee3f4ff29a477dbaad861df953f6149b95927d52f95423fb74721ad712310bd9785d0138e2a91e6d61e0fda5737c71d910d0fdb2c1474c3bad1aea8d1ef29da7377fbb5eaeed74760a8631dad8cd515db4bc7437d4eba346cba5cca67c41d76c48590b3609dfd6cdd15b7af01b9392c95b5a287b7c5e4d47bf77ab80922b9f2d77b3d4eeed6b3cccb7e73276a35fe3a55430fb23a8ee5135175c29a8d72ee12eb878fdbfe8e7211e3bf23887e76ded8cbd6373d6114dc6e97c397dbc771f07324d7106bd3cf351962ea4d7c6b742954529b571b040f1c482b80b8c64e678e86528d664deceee1835225f210a6c5320bd30b0f12fc3e1f60d68d57d3e4dddb0e4b568011767cef2405cb2067e80c434798cc99ec33ab87784f95d88466cd7c4460119639591aeb0c6371921104d9134d1b86c064ea7eb99a7bc0f0c08698a269451420afe30b2c12620a96ab233ba78140250a5264948297a22f4cd2a67e513f6cd050e922c474513a498fb4f8ac190839688b0bc617145de9925789edb59ea8d78327853e845aee4f4e17a318b9176d5fdb7876a3bdaebca6278a1a378345dfb1e9ccb30061d09d933d9a518cc0544fb9daf6e7b24674412881d6433e24783aef0899542c9eb5c1b0c126284b1184ff67dfb7e7d001742176f993c326cb8370ac0959e220e4dfde1125faf8e384b499c98c5751c45a1b05f00f488c0d80e26bad47f93ed36f0f4ea3980923711bbc221de4848b17a7a61370398b03b6bcdf306e707b66bad4d4e70e46561b67f3ce787700687ec9023daa3fc0f87e59e2463f275796391b5f8be8cd5e9892d400032f3f8a97212a13f411d20e272dc1f9489e51b5546b93b238dcf3bf4b5ce7e54e4e3bca9884eea448e604b5343700c7e26b45ee2b46ccf23799e9da41bc81c8ade10c44685865d42accc3838fa4d1efe912e2a9f55776bd39d410ece3efa3eb160db8f83cfd70ede9f1bd680569e33c980e8963fde04a8094bff579dd326ab4f6d9e2b2fad0b4e68fee3c7a657558826463a747b8d8e54ead6c9cdebf30b28b134d7982a0072653937674f8db9ace504b98712f835c0dda1df82d90673f73fed71ffab1235f7fd6a45ce932c439018184c5b0e774259892ba6486735ada3f7e3f2a3589a18f9520380af129620fdd4fd5cfb3a97467f24d6b94126cb3b58207c5b724696b98d53f7e4af1e93b107484637b67efcdd49ed0f4413ae88571e863e1bb455e882ca83e1ea6a4d1d1f9e9be87a714b6cc7498303099b3a1adced48933519035f287764efbbc679acfe28958aaead545a0759127663be5b72ac8ff0d837fb7faa425c960577df76f6b18dd929cedf58088323be69f4659eea38dff065a08f1376c9e5708356a2dbafaa8515f938d1bcca9d8c7e79ea0d45476fdda42bd4230c117597dad47270cd6385636ac01f516abcad464839b669e3dd58b75352689c32e337d692c204b683a8dc4467f59f8bfca49044e3f504dd9dc1f3c13b7f89ae9f05a94b466b8742e372cb7b27e4f17eaa2d21114216611805598514cb74e487187e1876e6ef7db039b369786d8652126f02c8644c15bd8eb201b6230bdf61c335f11d93574184052f55d74809a5ba0dec468c6e4cb1bb56caa25e7381dc257f30f69b8590a3d02938d99c164068c10eadf100354a17eb1ee1796b3a185140e591bd181ae6438e9dd0ee69fe733767befaa53ca" + }, + { + "name": "⑤|菠菜专线", + "key": "AppV7Xnm", + "type": 3, + "jar": "./jars/20260710134123-31654126d0.ong", + "api": "csp_AppV7Amns", + "searchable": 1, + "quickSearch": 1, + "changeable": 0, + "ext": "17c35714a2413f05151fea6864509533510f6449cf8bc0a05849f4d35953003381580addaf483d2692280dcd4fabaa34afe27792df556dbd796c3f09ec10ffc784d4c30c01ec2c6ef2b0176ea5416f5ea6edee3ad672713c6932565fe8467d17764cf4d178d9088844164cef2d90657d886165707c468e0266f26daa5cdb16d2e6724f174a6bd9d1245d4397c733fa8d747bc75518dc1df1f88364c94015204e1efea6e87c2e9bb20076a529a6b6211f0670a018afcf9ec98dc1c36e8c4d7ded47a14794580c002ab99431b1cd5bf836c9e66f4a720865fef703728822fe146adf5791064234da72d951a90137c7c6aa3f7c628cead57835692d7ee1db04674c15865cf45395c7983e4304af96925e63b2df935410c25891f65bb2f03c41a5e66724b50a6851d5d3e6f4953c65895ebb7a9572c86aa782aadaf848479263881af4dc84446811ded13d22adcb877c12db769209663b2071f7314b3cc17fdf8fc0e695e1c8174a981b966fe8ab76e7439a1e7620b22d09107ac200f25aa7e79b2019fe08b4f3099892c48f33d2526bf997f36465739ef204311f912a49d20dbd65d9ef9f256b70a39ca4921955b91fd8b357aef8818ab25b19a665fd59a82f420abc55cbcdfadfd032b2b417f6130b581be6a257ae8cabdc0183203fcb5fbbb9271fa6bd13070cd6d03d02c37e9ebba4b43add0a0cf8ce5ed98bdec21431f8d45896f0ddc79224448a03b7bdeb2ea962a4ff4d8474151cc8a110d02b698c4ca67e38cde2902f58b89d26e43df10c452f1f84e9504672c0fde52f753d030f1dc6c206a63d9990a2d4d87cfd008cd0b32cfd9a67e5c2624828dd8e9629e3e346c5e0b1344d57a148bedfc526e52084d3c7d27db5160c18e319599e39def5bcd16d0db695dba773303be7e92daeab0e4df02ea76ae698c00d7096138661c2f7e671169d36ef68cbe5ebd49eaea0a8f6be847229bdd8b5ae8f8088754c549ef8061d697a05c94daa1f008a7e853c5ba1b86a078b68c6345b5c5010c61e1c255352fd7fe13c705a2879b91fd4e95eedac375b19eee43588c98bdf03e3dd6c21d5e499c1ed7b96467f0fa01d13402339658948d97eb5d5943fe7799facdbe2d098039de207ff4815a12699f9e28c9a5fdabd04da1dcf2c0b7229d422ff3c5e47117a0412136055768e62e1fe61bcdefe560ab8ef17d62b922929d422c05671a2c444e51cf6742d634dd3ed96e5cd9ae7eeb7691daecc4caf6ee9db01845699f49d8b18c9e5fc9e65833bbcdefb0ca2203d8fe614cd80d3b66bc938df34edc82c35e0b985eb75af92f97fba35587990bcacc09f52c30824e8ee51c7637f6bbe9bf989eebd08282e3bec7f5aeb20ba5f97b17f725ec3c8aca1a56f12fa9a97634892642b0d9c57e968ab81e5be6adc5c8fe8b749fbe0c47369d48a36b47252f192c10547f2f17aee716b119578f24aaac94fe3695dc607192f14da40b2d976171ef1e619f2e7bc40d4776f9c1b0e993af9540c75a659f90d4cf7506fff124f74a87cd9cea16f0b322025187e2d794323d9298688eb80a6f839542491c8764a74a21c531ec9ae1c2ca1dd9d082b32dc341822b1639dbbc30c0df2b902187e2d7f4ba80786e3515e14df90ba52e8aad4b120e5566d859bc133303d412d5d65b4cdedbc0f280f3e8c6440ff69a45e54564badb5a1ab0fec0499759d156df731cc62c258b2d33aa05429012159e015ad8d520c2070b34eeea5780bf9f163bedac0435c32e05388ecb45d5fe827c3f1ca316df1931bf6ef7995518468a1814bc69e095f47b2d3fa6aa47d01dfdc066af04a428e9074b17788c75146595af0c66dea0e076ff93495e31af24a2176790d74fb36da28c926c69340b97b564487c2eefaa6384c147f950be725b8be6163ec1f1fca3de3c09f1363db748b695fe6a6b1bc6fc9029c56904ce9c0843751d57359f9550d80dc20fc7a9d2c91485b667e021059ff9b4de61e1e266fc130d66fe562841b6d5bcc8650a34401e4a30ee82761f205e41e7d62b632856398b8a84a83645c2a5bfad71da3e2a297d447c3b7affa9d8ad7199b78f729cdfccb7110975a54b737303d71313e1217c3fcacb94170aa4299d7b90e08109ccf5cbfd43a1a090ea11596caf30b00c5e1d55c7a47e7c6ab05d36c56724128d7d6da67a35ff6f75fdf1caf8e7d94d0dbe9afa10e42a74d7caacfcdba31e93ea25ceceb3e978798235ca1a88e52d7ea3addb4da026509dbada51047f06e64ac3005d32643b43266397d6ef3f3d607badf007951f7ef820866ca4424537223f7a9f3dea734ce686459d69127fb399aabfaa3953dbed756732a33bd3b4c958f6139ede030ede153c0055622b8937cbc2d6a74bdd9ea5990e279ea862c0efd3216dcb13fc3995c208da50c02567fe7a1f6bf6bc6fee3eea2e61089a238b4c6f59c0e9fe44aca5cf6562ce2f78830a9acd4337cded587aafc0f04e66d01918cf8ff4a46d18c3aaff494e62c0e770342d5d0931e01c6092514fad0f8e6b2bbcff89d6404095d2971993b1afe56ceca93451b2e3dfe19ba374bdb2b4d7a69161b26141ba84856a72802a0671d442c4502ad5566d553665682df212174b71828401f093322f81129b9118b661a845c00ace4548508440e2fa1e3ce76f58fd537807716dd6fceed1e6d1c8b3b8491a6edfe02016d137b89c2ac3c57bdbd4e9c1f9d10c8c4b7a5300b0dffffc288da07a0e0c368a90b5a8d486251521c075b47a75025b631caa2aaf3c027c65bc0534e807a1c81db29c696a92f139014115985a027a1a56703a9b35dabac7f5280f1a26cc7ff8fb6cbf2da00024fd9947e9835563203916c2d8e4d80bbf2764fe11d743d2e1adb5c6f260ad9b3fba7172f36a09b4d600e1c014b57a7c94841d4a9d61ee2787c5fe362df95c9edc4a8f2a46f8b81ebd4fa300ab4320593ed77111eec22233099136cd36a890864eb0ffc1d1ae565589f2120cc1a56" + }, + { + "name": "⑥|菠菜专线", + "key": "AppV7Mtq", + "type": 3, + "jar": "./jars/20260710134123-31654126d0.ong", + "api": "csp_AppV7Amns", + "searchable": 1, + "quickSearch": 1, + "changeable": 0, + "ext": "0bdc5714a2413f05151fea6864509533510f64888873c901454934c8d9638163778263f853aba9164d000aed532c7a1eec0a5c6f7e29eced6faa070647ddb8df85b03f7bebc9c8f27f012130dc52cd2a301b2473bd8fd8290767c0adc603e52458094cbe53749bfa82ee550cc1d4dd8a3e932ba96529a966e28263eb44dcf6de6542495781a21268f9d2b48189fa21668fa06e28d6354a7808e63060f3075d539dd983c479773b6e1298d4a7ae77341e86a18dff451b8e692292e91391cacebb7262f04800545d889ea6b5e1752ffacc96c034aa840be50ee3dd24c0e26f2cafa7b2204187fad47877c5bac9aae14784db6c1d2fde2d74b4197097343540480a1b7fb88bd2fd696c90a8150ed93e51e277d40a6f3bc957b8f97a6020d50447eaa8734fd7170c96909ef13fd169ae02608f475bc4e14fc829e063fc384d9cf026da90a2b0bb0920ae88917b982f6fdcb018af96ff24de7edff4a47023d6cc7697c3f6a72a85ba33a682e9000fd87a139ad38953c4bf977df79001bb7b4e135fd02b8cba4981da6d6d19594cb595b342e0014e2128d48b3677a862bd53507a0babe91d139471d81060d76e70185fabe3f6c167e5a3ab7174ddcbf8a6b8235f9e61d7eede25ae3fbb14ce48a9a0cb9a1f3848d96bf1ccb2a2e5f725f6902180cd62e2738eaf1dabf4d4635c8426030c18634a6fe662b3b1fb478378c0cf976aec1fbefb9e052af7c99b66233010b921fb37524e64ebc47229ddacfdc676ad06fd3e7fab081fa048754eb6726f3b236e5ae161b475f083f219197c6bc094417a22b5aad52381178d0602d508cb85c9bbcc8a9ce74fe40c7d4a31494894ec9e4dc020bfd5a18838d74580dc89b2ca67a9c2b2f9856971bb77eb6d6a932302e83189215f88fa6bac8105c0e56c70baec387a1eab251dae2ce8e26e48e7c774335880b852c8fb6bcbdb903af095f3e2f33e9aab00589c97bff103d8750cfb59b06f0431d991a1738bdbce33d9a7bf0162c79f6928f22df1033c71fe12c802262da0f18484b61fde180c4060b1346732db33d168c7469bd51f5b301ee63c5effc6ac1c91037e30403fb7b1741040831ee2f9c2f2a14b1c6d3e274bf2d7b6479c992d2c15b31b11beb65ee0566d43ab6125c65f7aa78a748ac8d295a059c8a470ed6f0c29badb44be951a98bb2a7a46ed6e061760273ce7da42dcf6ac8fdfc2cc98cb3016756a7678cc5cf8df3ddd1176c6bceaf7b9044464565c864b1c49123e8c03a75e9d59aad13156754673e27d716388667f4a91ab2174e061fed1e1c7ec7ef971cc24ec7d382459564893516b1077f1a1d4d3c04c8767e6f9e559f106a4864aa004bbba00567f31e1765796db9da8410ffb61fcb839d4b5a1ad9aa1cf6f2bc18dc2839802dcaf677c8d443988bfd414765ccc01014479e9dce39801f192419475eeca596a01875a98b9203ae801d8951f034c50796b95346b9635325fbde60e88e1ca395636e381b03fd7ce3ab916aa8ab361d533881fe5bb8f148f62e05df591a1a933b7514252f57cef750f7583f3ab55039671c8a018305cfefb503e13d297b832cbdb6785bc12885ee1152e6388a8943cfcf8dbe2f0a36d4811da57ef4f7eec6724f76ac5c4c811d5e75d2f26e8aa0d4c51e1da085b70b6b8c5c34c3279ece72f8be4306df7eb9d261a0a6f5e65b30c8c88b318f8178dcb56d06943a7f0d1401c495256c7639b5b2c9d94be75669bf019b16f891fe581e2b9a26fc159bb14ca64e49d674db311e041b6be8bef7ed2308f2747a76b81f7649ff966600e9b50eb929161b81c3461470cc13bb9f5b7ea37b04c22eace4c880986d82ceb9c4a7e6d3805b3b2fb2103c29bee588f48cd3f44033988df68811fb1584f34a05dd36d4d364ccc662dd8889b8626a589512a1242cd0039f38db3a22e674cf2f0a330a99f8bd7b9320daab41473bc7e7bded3e5ee022ee8799374737641e8eef05b9495e1674569fb1ccd48cbfd0cec0bc01bd5d01478e8dba198d6e0997f16a6bc91cff8f053537624177de53f23e7888a7c72e4dac7510cf86f4cfbdadfec9342d4756d78e2df4d07f353434c9eda7f9cbd8ad315561ba76b00a5cccd01b11a317fa19e6c232d22ec01174916f8b6abd5b449e3b72b3e4938bf1cb32f153c089064e947bc3d76c04f2c3a259991d97d044cceb1b7e44f2f5d1dae2c02912ac9bad1ada7a9fc20b8be274381864f446cfc174fb86012a118bad1d7ca366c78422a3f8aa12fe2804dc2e43146f5ca5cf7f30077249288b478f6f93a3f883f3de3bb6f624e7e0313be7bf1c931b9536110805a0ec35d0f9c77db95fd07668a2ce3850d7e0f5ea7473c64b113c85c16699bc9b2e3ac3ada4a847fe7fc25c758b438ac71c102bedda47065b75263f2925997a79647fbd96966f22386df2247c9e4daf80f688f4c41d324eb411d4bed6bce872fb0c913e5acb8219bd31df9b1c2036474fe7274192637226ef9f4d45de1b54938ef240484c62c6bb477337ebffba6705332a1469410ab71c4ba0cc83b5c4c4ce0f7abedf8e36dd1e1b07bd7eb9b2a0309dd38f7a7bac04c40ac5260af4bea6ba33e34060bf90e4d585d061ae6c2abfbde6d84e02a659524ab9ea83d3865ed49020cb5f4d9dfd45cf950cf6b5f265fbfde250b29fa721596fa495728b9152398328ea8d51dd88a5f1222cba397d82c68ed1165968d0eb3f3b3687c4f56e0f52063e98a106bbdf0ba2d1ece41034ebad3599337ae7083193f8b021f2b38829bfd96fce22f8a5f028f88ab84a2f09daa53e9e9b42717090a352db954a1a7b4bd6b3ea70b01ece4cf7574c6b8ad57d023c0c1c4b5465ce73fb93e165702354409b74bebeccffe2327d02047a74c1bce64c17f99b645f3b23d7b2618def989e99866bcde48f8581121289c6db4467bd50b5f28fff1be72cdbcf3939aad7f986f90c47130f9aea1eb30a8ec30d12869d5a1f0dd8295a009c99c8f991b9e9bc6a8c0265be584e8a2c2d3de413d4c5bfb1d3400e908072a226450fe3cf1510a4e3fad4380b4893167bb36c8a87613f8b262f5dada43df810e06a94ba220" + }, + { + "name": "⑦|菠菜专线", + "key": "AppV7Llq", + "type": 3, + "jar": "./jars/20260710134123-31654126d0.ong", + "api": "csp_AppV7Amns", + "searchable": 1, + "quickSearch": 1, + "changeable": 0, + "ext": "55035714a2413f05151fea6864509533510fc41478de7616064e34cb984b3dd50508d4850f8c0500d64fe9697c462d7c90a08f15f156c7a1d176bdb3bb463e6d80d064c2512b04a421fc3ef8cb9465bce042c1fe2cffd9aad1399ed6d7aa32aee9dc83c7d13a642438e576f0cb729148ce29a0bba6b104b35170ff79f406a825ff534b579fa411821b3ea7c2e9f9c4f2a2052244bd4d27922dedb0b05c7d8a1bf77d361a226ed9badfefd87e3ce90cba7afb4f6d1d7dd480b6e2e7f21dbbbc45f352296166efccb3e8aa7898aa777b46cba677495204e62ee1c54a87019a98fbd116a90961185583fb9531f2b517b0f47a145d73339adf21e77c589d621705109c7736c1f16942e8487945978f75faf7401dbb596f21341c9c3ed85571f892401320ef2b8c05158adbc91a77fd60f4ee1af9ed611da3c1a89a003921ceecf785a5b23f1b8144788524244daff436f996ddff76d129de38de4e701ddd027424153ce446bc9ee50b28d8668765bdc15fba5898ace08d8b1610bddbca170992f884e65a347b8b5dbe7ed8504ceed3ba04a15f787e516ffeda81d5195a67369978ae8f56b3b23db0d192a3d2f120c3b52b47e34a3bb24c3b9220a784c1f61b33c35a9696b931a3a8b4febfabb62a83933fc7f5042332bdf17bd58d177ae3feaf7c15fd3cd68cfa81050a9488daa793b4e96d6f93eb6314436d5f46f005a6c3a439555b69d0e7d65cb6defe748fe54de384d235f42f89a8d900382833177cd40d08b1e9b3ffa9f65ed87bd1678d9f29893e476d7a68333b688c6b8a41bbd379f71b29b75d6ab9b427240dd64884265dade955667a6869d6ccbecff605fbf9db6544b0d14ecaed34161d6b7782d104dfbcaa95bb033951b71650fa182f200228ff922299d6f9718442fd9fbcf2b708000cf8cf9bbfd6365dfada692813390349db8fc363ea604202129d9125db7298309085d2fb2dc6f685aa6434084f342ad3adb2e6ef3375989abdeaf7479e5a55a29ea6d4fb6225d07f4107307fcb21807f170510db378f0cc21d7e2d701c8486e93f5b230f196188cacbb7445b70f5b384ea3acfa3fca612294f57488dc914d7ef7efc8efea54dad0cfb7c3fca195abf1db3537019c67bdb5aacb43c5040e1029ffb4cb97fb5ef03d72bf447a3c30907ef49fe670189a4aad38230645940048e921cd0128d89b25a72e802584550f1f29eca9658fe9b62fbb6a6ebd71dbf5e155f0b2ec5133785dde0985e5be49c0cdd597dacbfc92e4e7f066b5c83e5cad4fc6e2ffa4dcee14f8fdf6d6b7f88e0a792ffaf3c153dea5e7fe666e11e8d4f6a11b7793ca7810704a4c532f3e5f01afa796b61a3a44f203722830255c09b2948af7470b2560450232ad6552fdc4cc709660b13bda5e93595ee7556df3239bc7d79c6b2e90f66ba6e2bd60a307ec9a1c5f6439535f6274a8cafb666390c6eddf162ddd43dbd2113dbdd2ac7dd61e91ddc0d307ec22298cf225a21792426cff1150e9f9568bf02f9aea0aed1954a1c8e42bd441286021b879b0d48335b494e014b0d404595524def768868a77b15fbba2849afafbcc703280e77a3a7b3fc02366f13f7a001a002702770f5ef5cd34bf105c6377884221967353845ebebd53da25f2f268e1e5bac637d5357a4c3ca8dbe886f6c1e807ae252339ad09a506a7a5b0c35242e1ba3dfffee39567ccaa9f8fbe8d3d94dc0627a0589ed3477f9dddc496ad349a50983db7f1ea504028508dec02963b3e6b9e591d0816feea133eea1b2d75ea061d911eb0379c9808abec76c8d2b2396c2b5067523d7ac74b0cbd9de6725daa9d73dfdd7a6ad60f3afc42aeac56483804227767fe2ff514aebccd183c7b9c1e917cf11adadf0d868e1fb676114134647bb59715760155ce8806d0d4ed9dc9fc973db4ba4a3d7369b15ed073dad6d89c024212e01e7bf4960515fc31e41e9a3f3967d1d4eb7b5785d1cee85ed9c84ee247e424ade993a81b100156052b938da4a64597a5230454cd00a48b379757f09073b6476394aab0bc99a0e812364657223f081d034d28937fdef3c35e1ba0e5dca8555b271224d3546cb68e59f2f8624bb211b5b8cbfd8b4e3f6e3e4b8856bab43b51ab36f8343dcd17a7c4ff66b4e2de6b60340443105ecc6aa84ea90d82440f1b0b93dc018127ee6a053e8e81503f6ed1978bda2ecb602507ce925a7a56f4b8ae573ec88d89ccc6f976dc4a4927393917b72a481c60bcec08c3e3d8a61fdb99da39b998459d4ac7dd12fefc02e8e7d3e691ab9bf0c44e563a17916e3647de15b93f73c38cb42f41e950d2938bc7e934f623365c760e7e04d833f3f47267f4947557df5e7927b58c2a292186c1cca67e476b2b6a103a3a023a7e38c74942c6bd6e2b9fd31e25fd711b3d1935db918b5aba1691f04f83809af56af471b4e9a975935c9816baba6d237d7a6fdffedf8c2f196a514e5c2d15e32a0a12e68ec6e4b4fdd38f70fbe46fe5ef37385c3a81d55df923ffd77d4d3d6a158e68ef5bd6e691634e11e7e634fff9d646184037745ecee973fe5b7c40945797f349ecdd7816e0cfc5cab3142312005d4ed5d8d102358c17c9268c8e0d5367b47a7ee7a35ff71b3a8bb7de11c529c3ad08fb88268e8c94825ba953ddbb4e38613c7c0cbfe26a23b61093342400a9ff9a953e2c2500bb56bc806811d6fc0361d63a96fa005fbf9c5cc10e832e58546a166014a76bac02483dc48e3baadb843f98ebfc54d862b8b3a39ec7ffabd6679cdfb6ae4dff075b8d4743184155061b04e3c0cb3384b1406afb1192962acbeb133966f87a3aae0e02ea96c5ca68df4fac42b543a8080698920202135a07bb8b2d3856fcf9e310dd7c95b568235daaa6196f5199b16ef08ff660027ac8a4fd404c79c6ec4c4260f75831d36bc1a4f42cc4addb827a8657708c74ce67ce095e2f2bd49bebdaa35c55e1a8567062ebb76eac4cdb8a5ef85ab9177577feda7fa05" + }, + { + "name": "⑧|菠菜专线", + "key": "AppV7Xsz", + "type": 3, + "jar": "./jars/20260710134123-31654126d0.ong", + "api": "csp_AppV7Amns", + "searchable": 1, + "quickSearch": 1, + "changeable": 0, + "ext": "931c5714a2413f05151fea6864509533510f6449cf8bc0a05849f4d35953df98eeb5c544c2ddeffc0a79e7a8eb3f1ce2799c2a2936200bf1f21d11448fe499fb09214dbd33ae7465d1548bfd937bb2d5d5bfb8000f3d0ad34e8ee3d137e1b19ea5b2bda8953ca41d96700897302e1c622935df3f93eb01533c2d38400f75c939c1cedaa59b659a7917f718ecf659adf7c1e9951f51e3836307c7828d99c4d6b9e9fc45de92c3c5783a7c2d1140ace1b7fa431ccd202914fa8f3f7de13b3f6bcf84d61cbd33ef32a6812627d3a91e18dbfbcd524fb951c7437c75e07a9645467002691837c584686c19e1b809dd81a76aa94c9c5f509c5e72c1181c27eca679359a717798d94315e20819c3eb350816c21438a580c014aded30b2ce0dd22ac27ada594cbd148cb0f4ea75c6c627e723e49989124f328035b7ce7e20e3443ac3bab11bd2c6b189cf9365853c9baa361178c97e6073dd526d5ddbb690aec3457e6c7883e4f2dee3eb96c5098c8412ec04827bf36e31946a89c3b6439b0ccaabf2a50721f673ce85e7dd03586cd2524bb5d53c15fbd9c1acdaea59c961a044da6ead270a34c2ef808f99049894844f0bb6f53f75bde3acb1213c00f1c5f65bbb9440bd5b5254c7dcf016d428e6e0eb5ece33a9ebb0e0a358ae652094a99979f972b447416bf8be29644655b675b075476f3d8981f4fbc673a9c7cd7755a6c384f53c01fe5dddcf1b7eedca0e4c97699125fc4010d9753b47a7ccd39eaad900139f22e1b2e5aad66419a3c74e4a2d65669452cb00e3b8862cd4e08f97eb13874285e109a1c724e5a7d353ac8d3cb98c53afad60f44d8fa9f10378e8627d69940ce8bf48817b9910121ee1e8756fb1b63f9a73a72ae86133004d93f53a3861b45067ec32e5c56465ee92b8ca6950ec7666d9cb15b87630739fbecf2eadf0b17bd6955a364b8bedd57c7a6d3ac293c6c993866868f5cfd7012489c9f342f3320b129f79d891bb8b97c2cfb90a1769f156a48bb0f763c09ec82b349c76cacc550f9d305793584a54c77dba35779cfac0d19cc82b8fa9d8d7caebbc0f3ef2effb46bcfa1dbedabc71c55db53ef78c327afe56579abcc3d15e9252c7684a081cfd65362314338b840c2a5175ee0a97711a426a3afd373c2011598415baf89de4b87c171df06f4b8bec7511b734195801d44703174003f8164c709edd02bc05314a48d4d7605fc0bbf05b2be2f641b8fea316e223be21dd69b3e5efdc81b33c804c487ba2fe5121f8aad6c50d492efd562d849ca70c4cf1d77c3349e764c998aa19d025ab671780812ee62679e7621b0a4f584cb616cbde8a7f5cbbfa2521f4cf2dabe9d4ba728d8406aa4177c51b3ff0aab4feac2f27dab498a00f86a2cfa10f070f1c1ecb6e6b908e6faf0aa968fc6070853b3aa53995c97d56baa20c4530f7f8de4c2674e1724d776b11b57cb87365fab5c025fea0add856af31b2ac724bb132abb1b3e6aadb84a67beed298a36c6e3965c9e82f0a6fe0f8438455f291d9c23673788c237fcd7a63e30100428d494a0d9f7adcf1d780098f489df6ee8fd78b553260039083f9a86ba666bb3c10fff86bbb5f58c11698ec39ddf439d5ac22b59878d6b07e7a0dcaa53eef6c652f5a024e208e283dc801db3fdeaba4ad997795371535c9e30fa7dd654d6d1a2878c59306b8d7c788fc02e36275606c56a34452c6b76eaae590198ce73d5635cedeeffec14805b534a7a2f7005a3d6c55bdc2437d16b2f3e60769381bea415d235ad871d289bcc9895e10fba3cc93df816d0d5c3fad09fe3ea21df2ca32181ec3bbb23f9948c5e58c93e810cf0a24f3461df06fa904fcf4dc063e76da2fb7f13c90efd865fd7f7226efcbca36ddeb62f4ba3bdecf02f3316ca054ea2bac09de1b76fa4056e257ee4d84892a4b518235dc6e93ab5169796296ac5a94ae9b43176a323a4ef55362513812903193a877aaad52a76f008744a006b53af893b921c45a5598da650583a74e8c277d1339e779d52deb67ca19dd6e0cd6af47740df3a99f8610eb4357ecea174cae38139992dde3114613642ba1b9e51166757aad8185b8ca0e6c904f6d9ad1560e5c2415e2fb67024f13dc1ad4d7dace0fea4bea419f19ec4ceae1f47e5c41435119ef0c430d3b8a61ff9b011c268e8d5689672daecab1c726a540d8333ba43f1a825c90b40138eafd2688229e30b4879824f8f5fe34e4c8c7f302d95ccea862f22e53527b725e1e4f942cd5e479352203e953c99b889bbc2daeaa0e839dd35ef1adc1fff83a1f64cb045cc9856f35c1f1a71028f653624f9eb42a46434fbb015962ea64a0d9e258296040475b5eebb0fc285921d8881b4c7f504ed95bb84d2e32bf0259c3ddc10b717780d9e339ed2f6a0f77cbdc30ce5eb97891674e4e3ba88354ecabd7b52481c1c3168fabd2f9ca510b3e2e6f1c01f60d6cd1e918307c52b695f68bd598294889ecfbe590154814a7e8a95e6d624cf6f498ffedffcc688ac78b5d52bbfce79780e11267187ed7a55c8aed9544172a38234fcdb0e0c32a0aef2e69bed1ffe7d218badada43658c6e2d585487a45140b5326e716646b08cfce2b5c221c61db85ab1452474a0fb9eccee20a07559c070f9f3554cd89d9e4bc40639699b55457001271f67ad49e6a46fe507bff49e8833f84c24383ccec6e8a064ff639353a76e2aabd014d084f7e4081ef24a62f869c7bbf3d77c04a24be360727e117928349e4e079bb59b45c7faaa5389270eb34b41d507abe3edf7a1cc932085ff66c618b152e94e1ce8a85c4b7c656f8131966566cfa916566246cfa92013db1757bc6176a7255dc72180d7c026ea407e4ced8cd83c9b349828c77de74130058c7fc79dcb8cc043e6e3e6b9e407e8c8e6fddfa6dd05be3d5bda123526a70479535144051b86e00d444ad3578bcc708d6de65f16a808e1b5884f8527e49a9f6c49b0d7bf6fa1e2682315f3" + }, + { + "name": "⑨|菠菜专线", + "key": "AppV7Xhr", + "type": 3, + "jar": "./jars/20260710134123-31654126d0.ong", + "api": "csp_AppV7Amns", + "searchable": 1, + "quickSearch": 1, + "changeable": 0, + "ext": "97975714a2413f05151fea6864509533510f6448b0786a559e217e817f97d8199e9741f4158be7dfe4b298df32c7c552cb2608c70a3d74f572531b1d88c2b79e4e9ef9ab94ba4aabc9ef3e313d0996d373d99436537b6a14c5b8ce4c52dc56f24789d9246defca59f674ed08596cd4291296f41a9a15cfe21187017c745f276dd9581457a7be4a6311ded29e32cf7e3c725ca381c2124df2efe32ea2635c2c4bc0396e23c465fa39129633b2ae52179a73fa16caa82f06330126964f52f5bc5e1ea1051f2971616f59c0124edffa4cf9393d688b0805906aa2c2c3ccf747ff9d8d79565f68b92a248f06892404645a610f0f997595132fd7f4c4a95170de97e1127ef6b2f42879858650adff2e431080db9fb282ca0cd00223b3664307746b9703e6decc322eb9152d9614acf4799150eda3cd579132894125b4e79a20b87acf03c9dbe7b5de66466b1d0c1741241b23b0ab16c407da21b79197a3320c9b17f029cc3c827a30c2b9079f12cd927273bda043212a145a05fbd29fa3b2a4913576b89d42f635962f8c9e8894e5b4381bfbffcc11e4ec7933ffb73b38a37e602b4f145e73212e30fabfe1f55f9490521899dc605d0d30ffdc02c538d88fc2cc9040f3d2fbc91052bf95a4d2fb0380b30360c9e9766814bc64b60fb1e77a6b61038a6c6a7040e17efaffc2e8a08aea1ff66e09f70d47f94f28bdb85bd20c2ab7fb9d0d3fd6e616caa8f7016148ed6eb1e36f47f05584a198beaf6f4bb4bae6c94f53bd33b54ae0e009e1297b06351ee3237e8afef81bd7325210db974b7e74b713d2ce8fc464e3c7c79abe358d2723c647bb78bdb042f291b76eaae447bcc4ac5bf32fcd7a9910131e6bd7c87a93a720bbd7f304f963731eb0ec2ff5a652087b2c95ad720d7daec7c7f84118824621c63ffd97c9cb9f0aa403b91887cb4fe8cf98c14366103e6b5976861d1e444dd9554dbb221263cac06c2c1dc3f7850e6a98903800a787ae7cefca19d6b057ee530437a6d95e1aefe6ef9cc9cbf968298ea37b6ff915918e5814dd93ddc914543f09b674cfa757467261d142bb4259a5a58eae7d60aae68b522b1a4baef3f5031984287f486f1fcdcaed7994b5625dc57ab9b47ce014f28ada7d5a8b0320cdffadb7e3d6f36425b0cd6dcc6042665d9dd822496be254b328237023866423af0982145542831edabf0ebbdc83ecfbf0f323a1716edab1655a62101fc39b8fbb61fedf7e9ffd2c482f9e4b28ff7815fb3b7520016a39ed9f0f62373b256fc5797b646e52c293a0ad5b4fba1c1b46cf0a1fcfad9cfbea15b3f0762e9a3a98d1d2ff142b5cbb5f1722f2459c40d28dd78b14701885c0a3fd081dc75a7544b512ebe3354ed62a6752d9573207cf41fd3cfed1df2289199e57733a2b575fe94ab8de5fe2960518ae4da4a30504103a288d2ce9a6507d8f6e632fc350abf13ebad33190b096ffcf14375fed66e87cffb8a2ad1bd20c3ecd45fe3d8317cda81d9490b328c47ad4d21536df379cf5239cd541f3d36176a166579e64202bf8f4f6a0ecf8a9ee9865c69b0904ef63e0399dac7b00ded72a8260f7f3079c72d6cf53d3e69584c9b549995b11e17816835532c7f6e5b3a5d0f59daeb3bff3be3f827912df323b1eac22dc16f755249b6dec65c2972909af46c5b8aa3b10f6b526bb5dceafa0e8b340b5d6d589aae06b49cea377aba87b2dc1b5870420d8e7f3bf2c871b57a1003989e60eec0bba0370a023fd780bfbf345d2cd1abd9a9a6dae49b835b8b4fe621b0af7748760e5daa298f6e4af5b92368eab92f86a64900ec044b716b5cc7cf1cd7bb2acd7e6af7b765e703c62aa70016f991811be75cd250e6d7c2611ff968607aaeb4f4416b9c1dff5e36548874b07ef28ac858db7bfab9ca3b2b6df87d19ee9412f855b0e24b0e5f864563df387ec9ca5db7bd716d206474d5823b98b3258e0f884724937bf435803efef7035bdfbdc44dfb9f2dcfb29e60015e042a075d2a97691881ed9e9a1455ca8af326c78c919fd3c97e3b52501a9616146cce956ad34ee8a913c9d52ac4bfcbaef124659a7e388762cfa3d569c5752f51735833bbbee76d1a82092c9178f959eeb512e40bc26d7adff48dffaa93b713b476bbd9827bcc19fb3c147416edc3372b4ba039955898d588aed53a9100a944dcbfd6d2e7bbd9fbeb5f70c84dcdf33b12e28b4edb1e386b7c4eddb7c6343f25302f6f295263dc8c6c8164edcf526280c91959e04c439818d2139a41d1501523f27379cb2882a5157c03692b1a3a50fb04f64cb047c8ec3ede5272c8e8dcf25a3fc423948d7f17e7c5de6c449c77f9f1efbb0049b97a2505db1a9dba4481fedb4dc9e09a209572af26ed23e460e79e09b0984365f87f9e713f267420cdd18ac140b0cd91c8f4a0b10e097e01524d4b2217c42c9648ae126414a746cce4d80248378b0d47b521f2b9b89dde015e66d81fda5315211073240ff9f0e7ed8cd310ee07651764d35c534591ba5c46cb3cd2c4adbf63cbed9c00a66d4a53df010e25e6044cca8e0602388be754f375de5e430cbc18e395e7f6e3e89c005e09fccba079d19f6f4bf6b03aa0c9b5e6ee6627b072554033095eee608e8fde79201dc925db69e049e3a19e29ebed5d5de4a8f7f87ff6d80f72fa83c61e9657742936c240e162a6f859c870fcc1f43661cfcf9e616cf0383c0438622d82e35a13c5056ff21b9dda4d57410c1fa4ce3209a8c77f559261c9ec1a33a16daf0fc2aad88e796e4f1dc3ec3f3a3d5ba8a7349575ba4cb4d6e5f4526356aec6984c02b652f83d1db6e67cf690e4ff9bfea1743f09734f5d6557061b21084195bbe477ce43f23058b700cd6ce1a6f4684df9313d0897dfd71ea05c3b888b54392354e3eebdd05a7be4c01d6ee98a793551743c508646af4aee22661d2616a0d7aacc46de4e5529f7b7945cb084a2f04cc063aaf6bc69e00a503125d09322894244991ed75d7066a998e73f1eab86163867d3da86dddf5a57834543c3376" + }, + { + "key": "大众影视", + "name": "大众|影视", + "type": 3, + "api": "./py/大众.py", + "searchable": 1, + "quickSearch": 1, + "changeable": 1, + "filterable": 1 +}, + { + "key": "山楂影视", + "name": "山楂|影视(ok壳子用)", + "type": 3, + "api": "./py/山楂影视.py", + "searchable": 1, + "quickSearch": 1, + "changeable": 1, + "filterable": 1 +}, + { + "key": "茶杯狐", + "name": "茶杯狐|秒播", + "type": 3, + "api": "csp_XBPQ", + "jar": "https://pan.szfx.top/down.php/a81c03da23212c9ffc8a699465dedc8b.jar", + "quickSearch": 1, + "ext": { + "分类url": "https://www.china-itrade.com/zform-list/{cateId}-----------.html", + "分类": "电影$1#剧集$2#动漫$4#综艺$3" + } + }, + { + "key": "爱影视", + "name": "爱影视|秒播", + "type": 3, + "jar": "./jars/XM.png", + "api": "csp_AppGet", + "ext": "https://aysappto.oss-cn-chengdu.aliyuncs.com/q23.txt|nzEqOgYk3QzHuEP8|V122|okhttp/3.10.0" + }, + { + "key": "4K影院", + "name": "光影|秒播", + "type": 3, + "jar": "./jars/XM.png", + "api": "csp_AppGet", + "ext": "https://yun-1316442804.cos.ap-guangzhou.myqcloud.com/601.txt|FTgP4Gq8zPiqbt7M|V122|okhttp/3.10.0" + }, + { + "key": "Kan360", + "name": "三六|秒播", + "type": 3, + "jar": "./jars/950626551_3_1783615503849.png", + "api": "csp_Kan360", + "searchable": 1, + "filterable": 1, + "ext": { + "filter": "https://open.wya6.com/d/down/2026/json/360.json", + "fishjx": [ + "https://jx.xmflv.com/?url=" + ] + } + }, + { + "key": "YunDuo", + "name": "云朵|秒播", + "type": 3, + "jar": "./jars/950626551_3_1783615503849.png", + "api": "csp_YunDuo", + "searchable": 1, + "changeable": 1, + "filterable": 1 + }, + { + "key": "CupFox", + "name": "茶杯|秒播", + "type": 3, + "jar": "./jars/950626551_3_1783615503849.png", + "api": "csp_CupFox", + "searchable": 1, + "changeable": 1, + "filterable": 1 + }, + { + "key": "FengYe", + "name": "枫叶|秒播", + "type": 3, + "jar": "./jars/950626551_3_1783615503849.png", + "api": "csp_CupFox", + "searchable": 1, + "changeable": 1, + "filterable": 1, + "ext": "ASrqK2y8hBjF6nWBT4VA6nl6pMHBuUkTFU8G1oArN4pFIRBIK3Koep4Mpa+rHr3EEKPvWTsPKevEKAGNJkBG3jYkvcbsm4uMR4SEGFXEVUK5k5GC1r3GrXXjDgc1ezNOEnVyK6ZdKI+xk/a/S3HSnknsxpSteN1SyaZ76LlkHDg8oTcmvsm6VWIJmoLG+EXXFO47gkwl6Z2cGWF6122DYXd9rqv5d1nPkPmMRFOjZmeIQwGet75HMuUQH2SD6tMhrHwqOVYxsZhaEJyp6C5P7lQgMd2fNfTUjdB8IXkeVnT+wuAKOiT09go+UHAmjghG58OMf/v/2ou2/Ojv5RTxZkUiiLZ5tUfJMSW87nNKi1Ak4w3wJ2h0OBR83irMrQjD68TCU0pG+ecPOjclNg7OFlbYxsLd0PPUBDQOAxFhq9+IpEgRp04Fi5Eb9B2exKN8CXuEoyf6ISv5l7FkIamTpm0=" + }, + { + "key": "BuBu", + "name": "布布|秒播", + "type": 3, + "jar": "./jars/950626551_3_1783615503849.png", + "api": "csp_BuBu", + "searchable": 1, + "changeable": 1, + "filterable": 1 + }, + { + "key": "huaisang", + "name": "怀桑|秒播", + "type": 3, + "jar": "./jars/950626551_3_1783615503849.png", + "api": "csp_AppQi", + "searchable": 1, + "changeable": 1, + "ext": "AdYEovlEKsDy77+R58YGahWCxrDZyBxExcQNC2NSeH0n1b5mu6tvh8b4Eh0RCpoPF6eivKdrR1Hsb8X4sSVBS8zF6jkwLW+wze9yh+hSY5iimm4gM9mAtmt0obTi+6Iox/Jp4GCsN4MQyFebMK162SKnILklpXc1UMiJv9gnPOe5aOPUxCftL+x7/UGhBdFYWIegpiHvKeavUtCUkhxtDyC8KqVVPPW0StI5GdmUA3WBbnnrNiKqNc5GBmrffd6pDN+Cf9IIjzNNvos/5KXJmBbe/baAzTLkoafeIoDhO451" + }, + { + "key": "景仪", + "name": "景仪|秒播", + "type": 3, + "jar": "./jars/950626551_3_1783615503849.png", + "api": "csp_App88", + "searchable": 1, + "filterable": 1, + "ext": "AScEBDU8ZGTviWgGR4VE0GGkVwxm9FRojDfGdLd7Uq6yQW7ma68i5+t2StAnXVayevGqI3Kb0rJi2eqa1R3PW9cxHiFDbXAhtGajyY69GUpDZQ615h6l9jBlh/RMkOo3RfAvtXJdZasUTDhxflfJPCn0T5P68L/XHUV9ylgYmABoOSghqLVoMUNWDS5E2PAMVkm39vpIJOyKNEIhVd3EQmPxDSjSoDE56akhNdBPWsT+tZVbLO8rEccdRYGvxYsXmVjhxaXhmzQEoEme5LF/0+x+M2A880NZ5akhrKIl5ZjfREZCgQ6FClx7+L8f8fb2VNiLtFu5538MrSRozjub6WRKe1m5OOdgdOTsAXJXw5QG5IQ/Y/i9VBZTZUjqP+0TpP4h92QjLynjJAFzwSr3bAOOIvEJW2LsK+hocK72wpyVG93vl42XQpU5s95dAVJOOOnbawZUsOq8a0ctuSsSdWQ=" + }, + { + "key": "枫眠", + "name": "枫眠|秒播", + "type": 3, + "jar": "./jars/950626551_3_1783615503849.png", + "api": "csp_App88", + "ext": "AdzbT8Ti+fGJ2PrJDEahdT7+zU3sFruyF0fAaUTWAUOCrbG/s0KhC5zQusyXAkmDYai/yhecQAtwKkDfTqbVCQT15T0FDK1GX9GLxT9V3XyFRDT0ATcwcFfw5joxSB+YLlez1nGpT2AW5KomI3yNv3ORTd4B3NqAcM34Cioc6+xwfj3HJ4JO6kQvv4solNApeP7CqF/Ecpt1BCgvvPzswMOr+kgVG/Iu8btrVQFO+pRpY7cfpc/Y59ZqaJlrCTDNLxgwuG20RZ9gVWsW+vd3A9lRgeTiJ39vJPoK46+9LnYGWU9dlDR1qRg4y5ILVQjEnT4el2cKSZexf7nrXHVfF3nOmHH/w/R/OSGllwUB7FCHDMc7eDY7haDYHWAQpEmcn4+BfbC4cipsdZ+nVieVVuuaWSF9s+0xYPWdSYLJMxApplTYkO+/h5z9atdURJUMGQ==" + }, + { + "key": "悯善", + "name": "悯善|秒播", + "type": 3, + "jar": "./jars/950626551_3_1783615503849.png", + "api": "csp_App88", + "ext": "AY/LmvuAAyhXffcGv5StyHm1MkGdY4inQLRC3KICnxUJBpq0d5dLhvE0+MW8XruH+M/Q/Ruqd6NayN9rihHGuotzXSTrDHgoZ2/dm2JlJ7GYOYfBorPhMPjuOhTNMg9w/J6oP4DXluvDpXNj9uOKq7g/Cx7vrKF6utOSaE1gUgDQwT251mOGTzGsd3ZrtEeepgI6hOdB2gJ4hHRumNhlbVtWDdpnVMYvhCIuH2HUqJFZWM5T+gEZTMLfeUEJt7ScfaQp90qNZID1YNo/tQOaFLGN12o4CkPtCNoYs+emjhVVqIjJzgfplCPIEyjRADqhur0c48FwCiJyp/XGZFmsMJaPKqvOkO+0H5YMKsR+EMmXCr6n0n1VnwGGpYl3maiq1SB78yDnh16291IjwXdERP1csTe41Vg3ppIixtk6q1etAikUle+6fjSFGvAvDYNr2Q==" + }, + { + "key": "长泽", + "name": "长泽|秒播", + "type": 3, + "jar": "./jars/950626551_3_1783615503849.png", + "api": "csp_App88", + "ext": "Aa+WBBIIxghmbVYkWqlC4wrZvlocl4rSZS9+QyJDF6RgWFfYSb+nEM6WkMHPVbQFva551Srt16FqFroyjNssEXemH+xC5pCMj/ewgFuLEIbY2mXCVJ1bJxWRJAggNgH1f3mjwrBxlZA0kGgfAd0os29Mdi3RNJilSo5VMkPpcQPMeF8/PTbZHNymotiTwtICNcA5Q0WXsqe/wJ3HoLU4gBYQs1lBmYdxtAuvsnte3SbumQEFlaQnygFscx6EGrwKMFZLVcmu9egAXxygsf5PmyzN/xvOr+b+HslccoKqDbHNU/C6yWFwaHBawww0ckXRtoJ8fFbV7Xv4NiRcEf6ePm/cd06xYiZmjRts11gE0r8f7D0vx/TgigmU3v8nrgNYDokUGl/jDdza3o7BXyQumCWRD45wYbmKJ1LKb0ybRvNt" + }, + { + "key": "知予", + "name": "知予|秒播", + "api": "csp_AppNox", + "jar": "./jars/950626551_3_1783615503849.png", + "type": 3, + "ext": "AXa/dhw2PLXN7GTzaamHOCEf9KWdx8b5bp7n8hAmf9Boa6AZrB5/hhb4qGO6kjkz/Oh5Uei9rzPWsZlQhgxQGSu7Zb/ZmT15NpqUP+qEjAXGPyOlfFWZbr4rxW3WZSqH6i+OT49idbNqqJdm1jXPR00G5O44GJb+9H7f1iioaW5GOEXjTbDGfBqd4uVVCz6vPPgb/k1NVY/Ze+bb5AsQMmZyAcHWgow8PEaTln0cVXxkb5VmKMQfj5sEq9ZnWGHbu4/32qI2Jjtkmj6VijcdWZSyxuwW/O1i8QbrqQZMeYyr16m5gwNFIyv3ppAxMfyjSz6P7J9dbMfS5PaT3xL3TKTAnZFjS0KyZIKYrJBLj9lXwgox8aFmPV1fT2CBX5t/dHX6gL8CfkhYGjFj7LnVLZo5se/1WjuMkzPTSZharqLvXySQsKpiGKLhfs8DsgQppW4BP8Lv2wPFDmbwB2op21RJDJNQhJXbOW6Z4rI5uXZJAW6LuvudGVKVD/RF3/yUlM4Boda3iuV/7ER45wPegGXouEiiuS7QHjYCgiMLVmUEiYLVhiTe3qDU6VlHqn5YhP7+1kibrXrRQ7JzyQ0sOxljdVHQw6IIRTQwzSBJLoDiiCddIncVXxYmKuhW6Pxen1bOfQgd723GkDyLB1Y5U9KXbzS9y6+ko37HVfmwUzDEcG+DYyxa2lJTCIXbdPbl8LBGUGMURx1S43wMLh1rurnz41qwPL5/WULQJmx4bt4E30dcTi/KfIBD8EUM8YZk8z7JSG5bi3oyYToXXRJCXK/qNpxaJ5I0s27MfnJRE/xF2k7Pv0YtFPmwdQr6Z3neEzOo/Vt1E5WlC0JiURC2bO+MWqA70m6B5WJkmnd46qPLtaofki6EzbH81AMvgsYAgjf8iAO6nYWFcrVoAsYMMgJkyPExJEUQStc+TB4gvUFUT9VeTHMXNSWiHMrhGkAQIA37PXzfig3c0sAUy+9iNlKXZv/lfbVFRgV9w8k0eDLrcR40Ma1Pmgnwq7v05RqJiSQCngiXOQgzR4wFar5anDJT73LmmP77+zaoJDH0aZeY" + }, + { + "key": "沐辞", + "name": "沐辞|秒播", + "api": "csp_AppNox", + "jar": "./jars/950626551_3_1783615503849.png", + "type": 3, + "ext": "AQUucLUJRH9RFWo2llKlyTrMCyVJ0Kpob6GGGwM0j5jiyraPW+SaJOKlkFrgd1ZhRMCnf0G74bm9C+4z5cinWObAMVMVtYf3sq6ftyqkjscrCwmACTm3lYdUtHGXFJI5MibkogunAZdw4jqNzeJW5yZmcvtvNWAB2u3HpiPCZ/7BBa+frYoJk64v5fZCFR9ywNGr0nXP+F3iwSBdiuzG3EiSTWwdh66EiviaRCI17Qad4cXfy3SMDsy39ejvXzdTrN0VOAx2XDqhFRpL6JnxweIDg8NZ75R0qJDpn9hLiTUxiIB2fT9pjD+Da10ThaLJbcf49f2N2AbwIYaL0+7lGdPD4/WSG1B/MsJYbNVEIPVn4d3lWofSBf904ualn0Yx+RE8SQfoXWXiHowqIU01uQfWuFXV+1LwHTc3ZkTfdAd9SRqQgkfl4QwyogKb9KXE51rexjvPo7heswXhKJVnginjrFrCSuPbQ5I4G9mY0ivmsNLhl4YgezZ8nNLYJTisU7gn4Q5tSUdGCo4NGVmTAm9hRLKz5ao1FNnQ6zbq33/IRtiwfHPlGZf543z+wA4ZCXukLVd2HKmNniR7dnIScjvSENMatCmS60pm6xW0ZapgZZd6rDnSivtChrU+GetWYQBBA1d/FeFgOSGhd175JvnInnwe0sGlQ+aoSyaANoEDXjk8LSzJPScRIqEn4sUBHehjWBQyQjb8wGFjciWlQETGYFYyXn4SEAhqk/KSNNHbAO7nDTZrVJatDtF/e1W0+ryHzoY+UWoVoHqm2zbsqNezbSpumOfaIJIfM5GmcpiMdjAh7w/HpGngmX/MI574TixdhpqWvtagwEVu61hxxmK5ZDJXER2wjFxZBMn2T5QelhNRHUNT7HoxkrHs8VXBwkYbLjoXs05vtXVpkLkokEi2QJU/Qjh0lCCyvHHIE2cvEzcpAqRfvzGHksXSWwZzV1MO4iHjd86Sgo/8Xp7RLQMe4G57+bg+HoZXY5YDQzK+ESXGIs1p3agfPhvaP/0fkUhUSHkLCsoO3yCuQarGPR4qgDVN8bayFm7Ya3rK9zD4" + }, + { + "key": "清沅", + "name": "清沅|秒播", + "api": "csp_AppNox", + "jar": "./jars/950626551_3_1783615503849.png", + "type": 3, + "ext": "ASjKEhQKe/DZHt0fbLID47aB3aYcWUG5aIPwrmTCgGinaSykux5CZpbz57zl1moRZGFkoEXqk7decpKNU6W/p/6OTfj3JWvZtr89yPZSxNyjJm1Il5upXQT68sXR/0WG392H71MN7Q8NC8xkSOuwAq7EfX2cuHMsiqFeCCugzAiINUiEqvboCFdXiI97C6kqqqiaQIS9d+R1r7krr5vQXWtky7XJNsiK5ACjppyTh68cbONYIcgLp5Kg5woh/wj9xmNT6mFGqF2D3j2RUaLoWYf+K1+ltBiuzZ7THWKwrnpBBig8XUAG3lXNXiFhPILyYWfr+1j/UoInhNITzJJ+SSRc88KmOk5kpch+idGzVMzHIq/bLpRRxE0iV8Qdtc2atKF9QUqPXJLrwv21Dl+nxgPEGOZ+71L+gABeQdvXO7xvyzUnd+rOidPJr1mBsfu9ySbcqHkhL5EIEQpGHwRhG/yN3Y5xj0BU+SdSxnDo+CwMC+g+WCts34c2u8h2tz7G5vuTw8QvDF23kF/BZeD2QaoCBAd3SDG9ObAichfuO1nDa938+Ul+iekNOEPtPFr6k5o+px/JJkE7MKYhekE/2JfmIkbkBHdnewJYckdM37/9EKsnAozbDyFKhfKR06Es52KtuAhGyh1B8uyfsj33qFpreAqGam8kjEHdYA0i832o0BtTU2gS3mf3NoijVH/XNmlJRuNXo9yYxdjuip4Eq4iqIgajM16MGAIJ0rumYhxJ5uJUFDlf55b9iS+DvJ8wotnBvfdINpAaeXPPlVc/1JDp1rIOw0qg2XIRAafLL7kzXnW8djs2dPSQU1+j9LIrfQ6u3k4lqUs9gRMW1JhwC/4iqimnwg0KsVValaplt+fxFHhwCCkS45uLf8BaY+UZtp5ZDffbi3Q0EDAK8F210Bzd5l8W8MokURUSj374Z7y2hAROBAAgZ8qWRrFOmBC+I+LUCm7sV4h7Mwdpe8sDAtxBhxOpBAYyV8eACQsDbnQsBvizlafy16ptRrArViG0uB1VSPqvi8gqcFD1zMl+uRo=" + }, + { + "key": "zhiqiu", + "name": "听风|秒播", + "type": 3, + "jar": "./jars/950626551_3_1783615503849.png", + "api": "csp_zhiqiu", + "searchable": 1, + "ext": "http://www.小不点.com/api//2026/zhiqiu.php" + }, + { + "key": "荐片_js", + "name": "荐片|秒播", + "api": "./lib/jianpian.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "type": 3 + }, + { + "key": "看剧影视", + "name": "看剧|影视", + "type": 3, + "api": "./lib/AppToV5.py", + "ext": "http://43.248.117.123:4680" + }, + { + "key": "iQiYi影视", + "name": "爱奇|秒播", + "type": 1, + "api": "https://iqiyizyapi.com/api.php/provide/vod", + "searchable": 1, + "quickSearch": 1, + "filterable": 1 + }, + { + "key": "独播影视", + "name": "独播库|影视", + "type": 3, + "api": "csp_Duboku" + }, + { + "key": "映画", + "name": "映画|APP", + "type": 3, + "api": "csp_AppGet", + "searchable": 1, + "changeable": 1, + "ext": { + "url": "https://cms140.yhg.one", + "dataKey": "bM7iC9eA3oZ1nB7z", + "dataIv": "bM7iC9eA3oZ1nB7z" + } + }, + { + "key": "四叶草", + "name": "四叶草|APP", + "type": 3, + "api": "csp_AppQi", + "searchable": 1, + "changeable": 1, + "ext": { + "site": "https://yzysap.oss-cn-hangzhou.aliyuncs.com/kkk.txt", + "dataKey": "8eeObuwrmS3lRDEs", + "dataIv": "8eeObuwrmS3lRDEs", + "ua": "okhttp/3.10.0" + } + }, + { + "key": "热播影视", + "name": "热播|APP", + "type": 3, + "api": "csp_AppRJ", + "searchable": 1, + "quickSearch": 1, + "filterable": 0, + "ext": { + "url": "http://v.rbotv.cn" + } + }, + { + "key": "文才", + "name": "文才|影视", + "type": 3, + "api": "./py/文才影视.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": { + "site": "https://m.hkybqufgh.com,https://m.sizhengxt.com,https://m.9zhoukj.com,https://m.sizhengxt.com,https://m.jiabaide.cn" + } + }, + { + "key": "农民影视", + "name": "农民|影视", + "type": 3, + "api": "csp_Wwys", + "ext": "https://vip.wwgz.cn:5200" + }, + { + "key": "金牌", + "name": "金牌|APP", + "type": 3, + "api": "csp_AppQi", + "searchable": 1, + "changeable": 1, + "ext": { + "url": "https://qj4.catbb.xyz", + "dataKey": "eecbio48dsq13kkk", + "dataIv": "eecbio48dsq13kkk", + "search": "searchList4", + "init": "initV122", + "ua": "okhttp/3.10.0" + } + }, + { + "key": "洽洽影视", + "name": "️瓜子|影视", + "type": 3, + "api": "./py/瓜子.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 1 + }, + { + "key": "荐片", + "name": "荐片|磁力", + "api": "csp_JianPian", + "type": 3 + }, + { + "key": "麻雀", + "name": "麻雀|蓝光", + "type": 3, + "quickSearch": 1, + "searchable": 1, + "api": "https://gitee.com/lzxw66/lzxw9/raw/master/py/Applzxw.py", + "ext": "http://118.89.203.120:8365/" + }, + { + "key": "农民", + "name": "旺旺|秒播", + "type": 3, + "jar": "https://ncstatic.clewm.net/rsrc/2025/0821/23/753d376ab89b34e2bf78761f5fe0289a.png;md5;526453EBC8F8F6C30FB2AEC9252DCED0", + "api": "csp_NongMin", + "searchable": 1, + "quickSearch": 1, + "filterable": 1 + }, + { + "key": "猎手影视", + "name": "猎手|秒播", + "type": 3, + "api": "./py/猎手影视.py", + "searchable": 1, + "changeable": 1, + "quickSearch": 1, + "filterable": 1, + "playerType": 2 + }, + { + "name": "夏天|秒播", + "key": "NewGrV2", + "jar": "./jars/20260710134123-31654126d0.ong", + "type": 3, + "api": "csp_NewGrV2Amns", + "searchable": 1, + "quickSearch": 1, + "changeable": 0, + "ext": "efef288565eb2ea7fcb9caa81e70fad5b9a3d290f7e7066e286ddee6884c813c8802cb583323f2d3e4d2a9112a38a062473f4b440cf9c65a4fd79ac6d02f202ef54326bbcd77f97cd8bb80c8d84661386dfd9968cafc2cefcca8b249ebbed4e4f32b9397064a17e66b7fc6003ab8e40b0ed5f7a748e8bc1b1564a5bf5ee0640f0dac483c2ac19d12a5b930c3d77438d9f34b6dc5dfaed4453ff55a14d32cb22bce4275e4185807a024a73ac3efe7bea3f20b6c15215131a9c4b800fa5820f80db5f9522cd2d65578180e03fa3009a73dd090579c25c975e134173dc51d621898934a3ba5161819f0d2285ccad7bede9a8b8a0912db445796b34b135c41786a59dfe81034c4b4d67a082406da3d83e51baf8957c2c79cf5fb3a7d6cab1ec2fdd3698531651c6a704f9d90e9d1" + }, + { + "key": "py_jieyingshi", + "name": "蜀山|影界", + "type": 3, + "api": "./py/jieyingshi.py", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "changeable": 0 + }, + { + "key": "柠檬", + "name": "柠檬|蓝光", + "type": 3, + "api": "csp_Nmvod", + "playerType": 2, + "jar": "https://gitee.com/tianwikeji/jar/raw/master/柠檬.jar", + "ext": "7lj763gg402i7942503g839jg74h8h88highi40799jh6i6k454419l0l5184k0g549h0kg2i01i838i2h42g891lgg1" + }, + { + "key": "皮皮虾", + "name": "皮皮虾|秒播", + "type": 3, + "api": "./py/ppx.py", + "ext": "http://43.248.117.123:468" + }, + { + "key": "三秋影视", + "name": "三秋|APP", + "type": 3, + "api": "csp_App3Q" + }, + { + "key": "韩圈", + "name": "韩圈|APP", + "type": 3, + "api": "csp_Hxq", + "ext": "http://www.小不点.com/api/2026/fishhxq.php" + }, + + { + "key": "bubutv", + "name": "步步影视|秒播", + "type": 3, + "api": "http://52xinghe.top/%e6%98%9f%e6%b2%b3/js/4k.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1 + }, + { + "key": "先生┃晓飒", + "name": "先生|秒播", + "type": 3, + "api": "csp_XBPQ", + "ext": "./js/先生.js" + }, +{ + "key": "威武┃影视", + "name": "威武|秒播", + "type": 3, + "api": "./py/威武.py", + "ext": "http://43.248.117.123:4680", + "quickSearch": 1 + }, + { + "key": "布布┃影视", + "name": "布布|秒播", + "type": 3, + "api": "./py/布布.py", + "style": { + "type": "rect", + "ratio": 1.33 + }, + "quickSearch": 1 + }, + { + "key": "裤佬独家免扫4K", + "name": "独家|秒播", + "type": 3, + "jar": "https://ncstatic-file.clewm.net/rsrc/2026/0416/20/1fe667cd217a0c314b8ca59310dbf45d.jpg;md5;a4f403a000bc5e4ebdd9da27fcb05852", + "api": "csp_AppV6", + "playerType": 2, + "ext": "7lj763gg0939790h44298182lk5j9k99k2g4ih53jl9i376l514k16hilj0443400h9k4jgh8312j1912818glikl7lh1jk9k4222k1kg696igkk32ig6lhj3kl50j08lkl6j0h6gi7k2j31jj0k7i1784l25g757hhkl42i7jg68illihj867l82g53532j62i92kljhj5llh498k24796l57j55ji0ji2g22i501jl541j9j4i68i5j602744l10413k457hl80l91j5l44139j23g64h27k08l5509h202gl84338hi17082hkj5746g298j640i002jk1265h745j289303h6i6j6j15jgkg15485h8g935hk83g9g7j661l4i557jl56h6l0h40i5j9hkiig7066523l2h24gj9k1083g6l2gihh2j5hhgkgij04j8900jhg4l6731hkhij7kk2i594536563674gki85li59jhk79067964197h5k7k2641h03l45074jkkklhik123407146l1i0jk90k1hgl151076ig7i4gi0858h62j37lh8l4hl519ghi7g04h2h900jlj7ll333i736549624gjk8k508g9499gj3jj7050jjhgh4i57326j83301i0kkl88040ih52gj8j0gk0h4g5g7lh561k2gk6k7k56h01598ji23g27k3i17878j92k2gj1l5ih8h0jj73k94g9hl5g7h229i10g099k09l958h3hk18l72h1j43gg7177g4h7ll8987644383606klgh9h4ll42h7293k694kl20j539g6jl17ig655461138jgj7306i1296k3i03586k6l32j5hlik4051187741218271j8j4g3i1h6719877l10k1ijl220i8hlil3j3g129ll3k2i5164lkg12k253kk1h8j5l0gki49jg25hlii704l5ih74439hlj9jih5ki53242ijgh6359i8i5j4h2j2i4581l244j4ij728490hk0k34542916i2lig57836gg7kji3l160234i24hik5g18h790488748j680k5i0l885lj66kjk78j2i57i5021g283ik9g38g62259h1lgi811ihki506k5934g7h737hg9360lll98l4j8i049903l1354lg00019g0934h005h8jjkl60j91k7j74i96h8h26hk59i653209lgj07g1g298k48jllgh00l4i742gi72l27038157gji9j32gh0k5672167k2588h31967l3867g50k503ik403781ki72j47hh4363l0708k4g961k4hl8g4j35ilk143h3424010i165lj612h50k68l61ghl9h80kh874k14ggk2ilg018hi5l1g34262196lkl45ih981jkl42271l4232k93hk8ih3g814i6h63h0g64l300i42il1g0454921j12h4844ii714ih71lg172326009812833h62kj8009kijk5hhg763031235l45h78614l7h9k579h6lj290i98851gll70024834hgj2lg5hk3l905i346gij11kl5j9i7h5j5k12hl061l488k061564g398i2150h9j343901865h7567g874i1gghl5ihg8il8hh0650h6308l2i5053997g8g12g16l3l7h5lhlji71i1i23h0ljl1h14688h7g13987h548h33k34hi6h2i63h424jhl1kik26kl3h60662846j6j0749l8kh95018kl1971j5j5gjk9hg70542391j77hjj65l127627h6h8h0hi003i2hih6h0k9k878lj858k30iljgik0l9248jk25l4h701l6gllhkhi54g24g926jgj884266514056805k2h15hh442i3170ilik20h88i561k0682k04459i154i03ikglg6220i4jii1g32067il925g450k0i1241l3il2jjl6k186gjj53h611il59k650i4kjhi87i798hg6h01g306ig104145ig9h68i092ghhh59jig99j12383792452h44206glk62g67gj204hk874l5li8646g65i9085244i092g70ig9h8657kg0413466ii87k9i32hglh24hi2li7174735i520ik608ilg71292838j5k1h39271ghg5288g930lg6h75626l71h8h5g011k9l9lgk691i04166h7996g452kij4l4l72881k6kl5701jl707hi415j8h3k67576966g2k94k03k0lj31995h2j26hi69jhjji162625l50j7790093hli0jjkh1ll804i3lhh40lk4k240kh48k0k16l544hg033k594gh0l93682l86h35i1i36klhgjg90lkl54746i2k63481h37hilj3ikig52h0j80k5gj6h879lk6g8ll6k616966h59h42l24h824ljj77g6l03kg260i80h2g2k123251j22jg36k5j14781i6197929il9j03k16h4l1i78693g45k64j0jl0k58hj8493h76gj2202470ig12lh2llj2l5k5541k4h506i3hij81lg9i037jgk22i2l3j12j6l394h51ii2ll0022j292h8036767i835k47071jl9illl2gli06524g66984902j6j1h5g788019hl4712032977h41l0k36073ig880g2jgklh26k736180591639h4k2gjk9gl2071h685923kl5363l5lj0ll91901g12kk29hll4280h9h51870j721516j6g66i379g203932726h42g927h19733k237492l8j0jh148gl95048l5524j4j0l2445130153i802169102i14g586h8g64j2lk28492169li3292877837108k7i9557h3jk31il2lklg494lgl4j91jig614216ki68i2j140l1jg03lk16lljg039h21kj313h8jk79h99j2g89j327i7h9052h9hj71721jg927340956k6jl4i7k0430" + }, + { + "key": "天堂", + "name": "天堂|APP", + "type": 3, + "api": "csp_AppDrama", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": { + "appName": "电影天堂", + "publicKey": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCduNEnfxGaLuQRk5ABzXHhPV43zi00sCHjLo8BYc+Wi6xXm2b4v0i28Sq4WlNCKhseft9fz8kO/qLr6/022o1RcuOU7e4GFL3U9WnNODwRBYSYWd+K8nqpI/tAUDmZEBGRWqjrc7x6aMl3A+xpnWkLbPCLsuhbuuUE3tv09oeOpwIDAQAB", + "dataKey": "D2KREWRIBVNAUJJYEDL4VFHOY2Q0PQ==", + "dataIv": "OC1A06E197EF10CF3F6058CA7A803B5E", + "pkg": "com.dytiantang.one", + "host": "", + "site": "./lib/app_dyttandroid.txt", + "version": "3.0.0.7", + "decrypt": "0" + } + }, + { + "key": "橘汁", + "name": "橘汁|APP", + "type": 3, + "api": "csp_AppDrama", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": { + "appName": "橘汁", + "publicKey": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCr8SzZhjYy+rsya1K09t8d2K50pWFoBkgUqMpKOiW+3IEVKd4eTdvg9RSOjQ82kypL6R9BnsmrS1V8s4PVDwjQbUtYhTPPC9Hz16qY7rpD6m0d2vr09/UpWQ5uOy9PR0QTrsioveZ+DIe9jc3C+zBCu/kZSY/R8stwJoiitki3gwIDAQAB", + "dataKey": "DGVQRUX5R1LWWDLHTGJSUKG1DJRVPQ==", + "dataIv": "OC1A06E197EF10CF3F6058CA7A803B5E", + "pkg": "com.lxf.snzlcgtzxyx", + "host": "", + "site": "./lib/app.txt", + "version": "3.0.2.1", + "decrypt": "1" + } + }, + { + "key": "华谊", + "name": "华谊|APP", + "type": 3, + "api": "csp_AppDrama", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": { + "appName": "华谊", + "publicKey": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCp9Ek4wIlQAtwFnuBRlsFiow2tr+4UOciGeNKbY7nL74etUqUb6fvpOSOHhFEfaWlfwUpOB17x3JEL3No19nfjCeVYrYPjlJcgoqUWH/tfIfFAQWvtxBIBlKazkhw8d3ChysWmeWRikKqkBsVRY4oqNPuj4sjm6Zult0U4I4prRQIDAQAB", + "dataKey": "NDBYSZR1DMRRZ05NSUCWEJNIYWLBPT0=", + "dataIv": "OC1A06E197EF10CF3F6058CA7A803B5E", + "pkg": "com.muyue.tool", + "host": "", + "site": "./lib/az5.txt", + "version": "1.0.0.4", + "decrypt": "1" + } + }, + { + "key": "苹果", + "name": "苹果|APP", + "type": 3, + "api": "csp_AppDrama", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": { + "appName": "小苹果", + "publicKey": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCduNEnfxGaLuQRk5ABzXHhPV43zi00sCHjLo8BYc+Wi6xXm2b4v0i28Sq4WlNCKhseft9fz8kO/qLr6/022o1RcuOU7e4GFL3U9WnNODwRBYSYWd+K8nqpI/tAUDmZEBGRWqjrc7x6aMl3A+xpnWkLbPCLsuhbuuUE3tv09oeOpwIDAQAB", + "dataKey": "S0VNDTJHOFHHCNMRAW5IV2TOS2PBPQ==", + "dataIv": "OC1A06E197EF10CF3F6058CA7A803B5E", + "pkg": "com.juechufsh.android.xpg1", + "host": "", + "site": "./lib/app_xpg_android.txt", + "version": "1.0.0.3", + "decrypt": "0" + } + }, + { + "key": "薯条", + "name": "薯条|APP", + "type": 3, + "api": "csp_AppDrama", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": { + "appName": "薯条影视", + "publicKey": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCduNEnfxGaLuQRk5ABzXHhPV43zi00sCHjLo8BYc+Wi6xXm2b4v0i28Sq4WlNCKhseft9fz8kO/qLr6/022o1RcuOU7e4GFL3U9WnNODwRBYSYWd+K8nqpI/tAUDmZEBGRWqjrc7x6aMl3A+xpnWkLbPCLsuhbuuUE3tv09oeOpwIDAQAB", + "dataKey": "A1VACZJWDKRZY1P3MFV0DDRAZ3F3PT0=", + "dataIv": "OC1A06E197EF10CF3F6058CA7A803B5E", + "pkg": "com.st.standroid", + "host": "", + "site": "./lib/app_dyttandroid.txt", + "version": "5.0.0.1", + "decrypt": "0" + } + }, + { + "key": "久久", + "name": "久久|APP", + "type": 3, + "api": "csp_AppYsV2", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": "http://99cms.jj99.icu:8199/api.php/app/" + }, + { + "key": "闪影", + "name": "闪影|APP", + "type": 3, + "api": "csp_AppYsV2", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": "http://38.47.213.61:41271/mogai_api.php/v1.vod" + }, + { + "key": "飞飞", + "name": "飞飞丨APP", + "type": 3, + "api": "csp_AppYsV2", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": "https://qpcj.69mini.com/api.php/app/" + }, + { + "key": "首发", + "name": "首发|APP", + "type": 3, + "api": "csp_AppQi", + "searchable": 1, + "changeable": 1, + "ext": { + "site": "./lib/600.txt", + "dataKey": "FTgP4Gq8zPiqbt7M", + "dataIv": "FTgP4Gq8zPiqbt7M", + "init": "initV122", + "ua": "okhttp/3.10.0" + } + }, + { + "key": "金牌", + "name": "金牌|APP", + "type": 3, + "api": "csp_AppQi", + "searchable": 1, + "changeable": 1, + "ext": { + "url": "https://qj4.catbb.xyz", + "dataKey": "eecbio48dsq13kkk", + "dataIv": "eecbio48dsq13kkk", + "search": "searchList4", + "init": "initV122", + "ua": "okhttp/3.10.0" + } + }, + { + "key": "老鹰", + "name": "老鹰|APP", + "type": 3, + "api": "csp_AppQi", + "searchable": 1, + "changeable": 1, + "ext": { + "site": "./lib/maotouyinghb.txt", + "dataKey": "zxPtEUDGVllIUhDB", + "dataIv": "zxPtEUDGVllIUhDB", + "ua": "okhttp/3.10.0" + } + }, + { + "key": "蓝鹰", + "name": "蓝鹰|APP", + "type": 3, + "api": "csp_AppQi", + "searchable": 1, + "changeable": 1, + "ext": { + "site": "./lib/xly.txt", + "dataKey": "ca94b06ca359d80e", + "dataIv": "ca94b06ca359d80e", + "init": "initV120", + "ua": "okhttp/3.10.0" + } + }, + { + "key": "猎豹", + "name": "猎豹|APP", + "type": 3, + "api": "csp_AppGet", + "searchable": 1, + "changeable": 1, + "ext": { + "url": "https://444421.xyz", + "dataKey": "#getapp@TMD@2025", + "dataIv": "#getapp@TMD@2025" + } + }, + { + "key": "王子", + "name": "王子|APP", + "type": 3, + "api": "csp_AppGet", + "searchable": 1, + "changeable": 1, + "ext": { + "url": "https://app.95112475.xyz", + "dataKey": "5a9w6x58dsq6z3a6", + "dataIv": "5a9w6x58dsq6z3a6" + } + }, + { + "key": "秒看", + "name": "秒看|APP", + "type": 3, + "api": "csp_AppGet", + "searchable": 1, + "changeable": 1, + "ext": { + "site": "./lib/get.txt", + "dataKey": "c60d88b2eep53za8", + "dataIv": "c60d88b2eep53za8", + "token": "4181e508e7a17657d6a6246e70b1b13553e5ae9d8d287dc47000fb2df638dffa" + } + }, + { + "key": "茉莉", + "name": "茉莉|APP", + "type": 3, + "api": "csp_AppGet", + "searchable": 1, + "changeable": 1, + "ext": { + "site": "./lib/9.txt", + "dataKey": "88689667dce61725", + "dataIv": "88689667dce61725" + } + }, + { + "key": "灵虎", + "name": "灵虎|APP", + "type": 3, + "api": "csp_AppGet", + "searchable": 1, + "changeable": 1, + "ext": { + "site": "https://bind.315999.xyz/89.txt", + "dataKey": "#getapp@TMD@2025", + "dataIv": "#getapp@TMD@2025" + } + }, + { + "key": "哔哩视频", + "name": "哔哩|视频", + "type": 3, + "api": "csp_BiliYS", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "changeable": 0, + "style": { + "type": "rect", + "ratio": 1.433 + }, + "ext": { + "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt" + } + }, + { + "key": "三六零", + "name": "三六零|视频", + "type": 3, + "api": "csp_SP360" + }, + { + "key": "玩偶", + "name": "玩偶|4K", + "type": 3, + "api": "csp_Wogg", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "ext": { + "site": [ + "https://www.wogg.net", + "https://wogg.xxooo.cf", + "https://woggpan.xxooo.cf" + ] + }, + "timeout": 60 + }, + { + "key": "快映", + "name": "快映|4K", + "type": 3, + "api": "csp_PanWebShare", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "ext": { + "site": [ + "http://38.76.197.172:12521" + ] + }, + "timeout": 60 + }, + { + "key": "木偶", + "name": "木偶|4K", + "type": 3, + "api": "csp_PanWebShare", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "ext": { + "site": [ + "https://123.666291.xyz", + "https://666.666291.xyz", + "https://www.muou.site", + "https://www.muou.asia" + ] + }, + "timeout": 60 + }, + { + "key": "蜡笔", + "name": "蜡笔|4K", + "type": 3, + "api": "csp_PanWebShare", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "ext": { + "site": [ + "http://www.xiaocgege.shop", + "http://xiaocge.fun", + "http://feimo.fun", + "http://xiaocgege.shop" + ] + }, + "timeout": 60 + }, + { + "key": "至臻", + "name": "至臻|4K", + "type": 3, + "api": "csp_PanWebShare", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "ext": { + "site": [ + "https://mihdr.top", + "https://www.miqk.cc", + "https://www.mihdr.top" + ] + }, + "timeout": 60 + }, + { + "key": "多多", + "name": "多多|4K", + "type": 3, + "api": "csp_PanWebShare", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "ext": { + "site": [ + "https://tv.yydsys.top", + "https://tv.yydsys.cc", + "https://tv.214521.xyz" + ] + }, + "timeout": 60 + }, + { + "key": "欧哥", + "name": "欧哥|4K", + "type": 3, + "api": "csp_PanWebShare", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "ext": { + "site": [ + "https://woog.nxog.eu.org", + "https://woog.nxog.fun", + "https://woog.nxog.eu.org", + "https://woog.430520.xyz" + ] + }, + "timeout": 60 + }, + { + "key": "二小", + "name": "二小|4K", + "type": 3, + "api": "csp_PanWebShare", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "ext": { + "site": [ + "https://www.2xiaopan.top", + "https://www.erxiaozhan.top", + "https://www.2xiaozhan.top" + ] + }, + "timeout": 60 + }, + { + "key": "虎斑", + "name": "虎斑|4K", + "type": 3, + "api": "csp_PanWebShare", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "ext": { + "site": [ + "http://38.76.197.172:16969" + ] + }, + "timeout": 60 + }, + { + "key": "夸父", + "name": "夸父|4K", + "type": 3, + "api": "csp_PanWebShareKF", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "style": { + "type": "list", + "ratio": 1.433 + }, + "ext": { + "site": [ + "https://www.kfzys.net" + ], + "cookie": "bbs_sid=p5mugcm9r147o1d3qpi0su1ucm; bbs_token=gDMAOehNUQetTJv9Lnet0J_2FGJmgdvnx90iTZqzU_2FnO0_3D" + }, + "timeout": 60 + }, + { + "key": "盘它", + "name": "盘它|4K", + "type": 3, + "api": "csp_PanWebSharePT", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "style": { + "type": "list" + }, + "timeout": 60 + }, + { + "key": "123", + "name": "123|4K", + "type": 3, + "api": "csp_PanWebShare123", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "style": { + "type": "list", + "ratio": 1.433 + }, + "ext": { + "site": [ + "https://123panfx.com", + "https://pan1.me" + ] + }, + "timeout": 60 + }, + { + "key": "指南", + "name": "指南|4K", + "type": 3, + "api": "csp_4KZhinan", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "timeout": 60 + }, + { + "key": "人人", + "name": "人人|4K", + "type": 3, + "api": "csp_RenRen", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "timeout": 60 + }, + { + "key": "即刻", + "name": "即刻|4K", + "type": 3, + "api": "csp_Jike", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "style": { + "type": "list" + }, + "timeout": 60 + }, + { + "key": "双星", + "name": "双星|4K", + "type": 3, + "api": "csp_ShuangXing", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "style": { + "type": "list" + }, + "timeout": 60 + }, + { + "key": "河马短剧", + "name": "河马|短剧", + "type": 3, + "api": "csp_HemaDJ", + "searchable": 1, + "changeable": 1, + "quickSearch": 1, + "filterable": 1, + "genre": "shortdrama" + }, + { + "key": "好看短剧", + "name": "好看|短剧", + "type": 3, + "api": "csp_HaokanDJ", + "searchable": 1, + "changeable": 1, + "quickSearch": 1, + "filterable": 1, + "genre": "shortdrama" + }, + { + "key": "围观短剧", + "name": "围观|短剧", + "type": 3, + "api": "csp_WeiguanDJ", + "searchable": 1, + "changeable": 1, + "quickSearch": 1, + "filterable": 1, + "genre": "shortdrama" + }, + { + "key": "星芽短剧", + "name": "星芽|短剧", + "type": 3, + "api": "./lib/星芽短剧.py", + "searchable": 1, + "changeable": 1, + "quickSearch": 1, + "filterable": 1, + "genre": "shortdrama" + }, + + { + "key": "厂长影视", + "name": "厂长|影视", + "type": 3, + "api": "csp_Czsapp", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": "https://cz01.vip" + }, + { + "key": "金牌影视", + "name": "金牌|影视", + "type": 3, + "api": "csp_Jpys", + "ext": "https://y2s52n7.com,https://m.hkybqufgh.com,https://m.sizhengxt.com,https://m.9zhoukj.com,https://m.sizhengxt.com,https://m.jiabaide.cn" + }, + { + "key": "修罗影视", + "name": "修罗|影视", + "api": "csp_Xlys", + "type": 3, + "ext": "https://www.xlysw.ggff.net" + }, + { + "key": "云播影视", + "name": "云播|影视", + "type": 3, + "api": "csp_Tvyb" + }, + { + "key": "骚火影视", + "name": "骚火|影视", + "type": 3, + "api": "csp_SaoHuo", + "ext": "https://shdy5.us" + }, + { + "key": "农民影视", + "name": "农民|影视", + "type": 3, + "api": "csp_Wwys", + "ext": "https://vip.wwgz.cn:5200" + }, + { + "key": "爱看机器人", + "name": "爱看|影视", + "type": 3, + "api": "csp_Ikanbot", + "searchable": 1, + "quickSearch": 1, + "filterable": 1 + }, + { + "key": "小镇影视", + "name": "小镇|影视", + "type": 3, + "api": "csp_XBPQ", + "ext": "./lib/XZYS.json" + }, + { + "key": "面包影视", + "name": "面包|影视", + "type": 3, + "api": "csp_XBPQ", + "ext": "./lib/MBYS.json" + }, + { + "key": "永乐影视", + "name": "永乐|影视", + "type": 3, + "api": "csp_XBPQ", + "ext": "./lib/YLYS.json" + }, + { + "key": "剧圈影视", + "name": "剧圈|影视", + "type": 3, + "api": "csp_XYQHiker", + "ext": "./lib/JQYS.json" + }, + { + "key": "1905", + "name": "1905|影视", + "type": 3, + "api": "csp_Web1905", + "searchable": 1, + "quickSearch": 0, + "filterable": 0 + }, + { + "key": "哆啦新番社", + "name": "哆啦|新番社", + "type": 3, + "api": "csp_XBPQ", + "style": { + "type": "list" + }, + "ext": "./lib/DLXFS.json" + }, + { + "key": "Anime1", + "name": "A1|动漫", + "type": 3, + "api": "./lib/ec67b9045d393737f073d2c9365533f0.js", + "ext": "./lib/Anime1.js" + }, + { + "key": "漫国动漫", + "name": "漫国丨动漫", + "type": 3, + "searchable": 1, + "api": "csp_AppSy", + "ext": { + "site": "./lib/api.txt", + "siteKey": "rectangleadsadxa", + "listKey": "aassddwwxxllsx1x", + "parsesKey": "aassddwwxxllsx1x" + } + }, + { + "key": "方舟动漫", + "name": "方舟丨动漫", + "type": 3, + "searchable": 1, + "api": "csp_AppGet", + "ext": { + "url": "https://www.cyfz.top", + "dataKey": "e72cdfd629e8895d", + "dataIv": "e72cdfd629e8895d" + } + }, + { + "key": "曼波动漫", + "name": "曼波|动漫", + "type": 3, + "searchable": 1, + "api": "csp_AppGet", + "ext": { + "url": "https://app.omofun1.top", + "dataKey": "66dc309cbeeca454", + "dataIv": "66dc309cbeeca454" + } + }, + { + "key": "咕咕动漫", + "name": "咕咕|动漫", + "type": 3, + "searchable": 1, + "api": "csp_AppGet", + "ext": { + "url": "https://www.gugu3.com", + "dataKey": "nKfZ8KX6JTNWRzTD", + "dataIv": "nKfZ8KX6JTNWRzTD" + } + }, + { + "key": "巴士动漫", + "name": "巴士|动漫", + "type": 3, + "api": "csp_XYQHiker", + "ext": "https://git.yylx.win/raw.githubusercontent.com/PizazzGY/NewTVBox/main/anime/json/bsdm.json" + }, + { + "key": "路漫漫", + "name": "路漫漫|动漫", + "type": 3, + "api": "./lib/ec67b9045d393737f073d2c9365533f0.js", + "ext": "./lib/LMM.js" + }, + { + "key": "去看吧", + "name": "去看吧|动漫", + "type": 3, + "api": "./lib/ec67b9045d393737f073d2c9365533f0.js", + "ext": "./lib/QKB.js" + }, + { + "key": "荐片", + "name": "荐片|磁力", + "api": "csp_JianPian", + "type": 3 + }, + { + "key": "七味", + "name": "七味|磁力", + "type": 3, + "api": "csp_QnMp4", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": "https://www.qwshow.com,https://www.qwmkv.com,https://www.qwfilm.com,https://www.qwfun.com,https://www.qnnull.com,https://www.qnnull.com" + }, + { + "key": "New6v", + "name": "New6V|磁力", + "type": 3, + "api": "csp_New6v", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": "https://www.xb6v.com" + }, + { + "key": "美剧迷", + "name": "美剧迷|磁力", + "type": 3, + "api": "csp_MeijuMi", + "searchable": 1, + "quickSearch": 1, + "filterable": 1 + }, + { + "key": "迅雷吧", + "name": "迅雷吧|磁力", + "type": 3, + "api": "csp_Xunlei8", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": "https://xunlei8.me" + }, + { + "key": "电影港", + "name": "电影港|磁力", + "type": 3, + "api": "csp_XYQHiker", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": "./lib/DYG.json" + }, + { + "key": "阿里云盘", + "name": "阿里|云盘", + "type": 3, + "api": "csp_PanAli", + "searchable": 0, + "filterable": 0, + "changeable": 0, + "style": { + "type": "list", + "ratio": 1.433 + } + }, + { + "key": "夸克网盘", + "name": "夸克|网盘", + "type": 3, + "api": "csp_PanQuark", + "searchable": 0, + "filterable": 0, + "changeable": 0, + "style": { + "type": "list", + "ratio": 1.433 + } + }, + { + "key": "UC网盘", + "name": "UC|网盘", + "type": 3, + "api": "csp_PanUC", + "searchable": 0, + "filterable": 0, + "changeable": 0, + "style": { + "type": "list", + "ratio": 1.433 + } + }, + { + "key": "百度网盘", + "name": "百度|网盘", + "type": 3, + "api": "csp_PanBaidu", + "searchable": 0, + "filterable": 0, + "changeable": 0, + "style": { + "type": "list", + "ratio": 1.433 + } + }, + { + "key": "盘搜", + "name": "盘搜|搜索", + "type": 3, + "api": "csp_PanSou", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "timeout": 60 + }, + { + "key": "古哥", + "name": "古哥|搜索", + "type": 3, + "api": "csp_GugeSo", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "timeout": 60 + }, + { + "key": "兄弟", + "name": "兄弟|搜索", + "type": 3, + "api": "csp_XiongdiPan", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "timeout": 60 + }, + { + "key": "百酷", + "name": "百酷|搜索", + "type": 3, + "api": "csp_Baiku", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "timeout": 60 + }, + { + "key": "米搜", + "name": "米搜|搜索", + "type": 3, + "api": "csp_MiSou", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "timeout": 60 + }, + { + "key": "鬼鬼", + "name": "鬼鬼|搜索", + "type": 3, + "api": "csp_GuiGui", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "timeout": 60 + }, + { + "key": "混合", + "name": "混合|搜索", + "type": 3, + "api": "csp_HunHePan", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "timeout": 60 + }, + { + "key": "天翼", + "name": "天翼|搜索", + "type": 3, + "api": "csp_TianYiSou", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "timeout": 60 + }, + { + "key": "趣盘", + "name": "趣盘|搜索", + "type": 3, + "api": "csp_QuPanSo", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "timeout": 60 + }, + { + "key": "88看球", + "name": "88|看球", + "type": 3, + "api": "csp_Kanqiu", + "gridview": 3, + "style": { + "type": "list" + } + }, + { + "key": "球通体育", + "name": "球通|体育", + "type": 3, + "api": "csp_QiutongTY", + "style": { + "type": "list" + } + }, + { + "key": "瓜子体育", + "name": "瓜子|体育", + "type": 3, + "api": "csp_GuaziTY", + "style": { + "type": "list" + } + }, + { + "key": "咖啡体育", + "name": "咖啡|体育", + "type": 3, + "api": "csp_KafeiTY", + "style": { + "type": "list" + } + }, + { + "key": "919体育", + "name": "919|体育", + "type": 3, + "api": "csp_919TY", + "style": { + "type": "list" + } + }, + { + "key": "呦呦DJ", + "name": "呦呦|DJ", + "type": 3, + "api": "csp_Djuu", + "style": { + "type": "list" + } + }, + { + "key": "轮回DJ", + "name": "轮回|DJ", + "type": 3, + "api": "csp_Djlh", + "style": { + "type": "list" + } + }, + { + "key": "蜻蜓FM", + "name": "蜻蜓|FM", + "type": 3, + "api": "csp_QingtingFM", + "style": { + "type": "list" + } + }, + { + "key": "世界听书", + "name": "世界|听书", + "type": 3, + "api": "csp_TingShijie", + "style": { + "type": "list" + } + }, + { + "key": "戏曲多多", + "name": "戏曲|多多", + "type": 3, + "api": "csp_AppLY", + "style": { + "type": "list" + } + }, + { + "key": "爱听音乐", + "name": "爱听|音乐", + "type": 3, + "api": "./lib/爱听音乐.py" + }, + { + "key": "网络直播", + "name": "网络|直播", + "type": 3, + "api": "./lib/WLZB.py" + }, + { + "key": "哔哩直播", + "name": "哔哩|直播", + "type": 3, + "api": "./lib/BLZB.py" + }, + { + "key": "哔哩合集", + "name": "哔哩|合集", + "type": 3, + "api": "csp_Bili", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "changeable": 0, + "style": { + "type": "rect", + "ratio": 1.433 + }, + "ext": { + "json": "./lib/BLHJ.json", + "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt" + } + }, + { + "key": "哔哩哔哩演唱会", + "name": "哔哩|音乐", + "type": 3, + "api": "csp_Bili", + "searchable": 0, + "quickSearch": 0, + "filterable": 0, + "ext": { + "json": "./lib/BLYCH.json", + "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt" + }, + "style": { + "type": "rect", + "ratio": 1.597 + } + }, + { + "key": "哔哩哔哩听书", + "name": "哔哩|听书", + "type": 3, + "api": "csp_Bili", + "searchable": 0, + "quickSearch": 0, + "filterable": 0, + "ext": { + "json": "./lib/BLTS.json", + "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt" + }, + "style": { + "type": "rect", + "ratio": 1.597 + } + }, + { + "key": "哔哩哔哩相声", + "name": "哔哩|相声", + "type": 3, + "api": "csp_Bili", + "searchable": 0, + "quickSearch": 0, + "filterable": 0, + "ext": { + "json": "./lib/BLXS.json", + "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt" + }, + "style": { + "type": "rect", + "ratio": 1.597 + } + }, + { + "key": "哔哩哔哩小品", + "name": "哔哩|小品", + "type": 3, + "api": "csp_Bili", + "searchable": 0, + "quickSearch": 0, + "filterable": 0, + "ext": { + "json": "./lib/BLXP.json", + "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt" + }, + "style": { + "type": "rect", + "ratio": 1.597 + } + }, + { + "key": "哔哩哔哩戏曲", + "name": "哔哩|戏曲", + "type": 3, + "api": "csp_Bili", + "searchable": 0, + "quickSearch": 0, + "filterable": 0, + "ext": { + "json": "./lib/BLXQ.json", + "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt" + }, + "style": { + "type": "rect", + "ratio": 1.597 + } + }, + { + "key": "少儿教育", + "name": "少儿|教育", + "type": 3, + "api": "csp_Bili", + "searchable": 0, + "quickSearch": 0, + "filterable": 1, + "ext": { + "json": "./lib/SEJY.json", + "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt" + }, + "style": { + "type": "rect", + "ratio": 1.597 + } + }, + { + "key": "小学课堂", + "name": "小学|课堂", + "type": 3, + "api": "csp_Bili", + "searchable": 0, + "quickSearch": 0, + "filterable": 1, + "ext": { + "json": "./lib/XXKT.json", + "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt" + }, + "style": { + "type": "rect", + "ratio": 1.597 + } + }, + { + "key": "初中课堂", + "name": "初中|课堂", + "type": 3, + "api": "csp_Bili", + "searchable": 0, + "quickSearch": 0, + "filterable": 1, + "ext": { + "json": "./lib/CZKT.json", + "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt" + }, + "style": { + "type": "rect", + "ratio": 1.597 + } + }, + { + "key": "高中课堂", + "name": "高中|课堂", + "type": 3, + "api": "csp_Bili", + "searchable": 0, + "quickSearch": 0, + "filterable": 1, + "ext": { + "json": "./lib/GZKT.json", + "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt" + }, + "style": { + "type": "rect", + "ratio": 1.597 + } + }, + { + "key": "急救教学", + "name": "急救|教学", + "type": 3, + "api": "csp_FirstAid", + "searchable": 0, + "quickSearch": 0, + "changeable": 0, + "style": { + "type": "rect", + "ratio": 3.8 + }, + "gridview": "0-0-4.1" + }, + { + "key": "养生堂", + "name": "养生|知识", + "type": 3, + "api": "csp_YST", + "searchable": 0, + "quickSearch": 0, + "changeable": 0, + "style": { + "type": "rect", + "ratio": 1.597 + } + }, + { + "key": "push_agent", + "name": "手机|推送", + "type": 3, + "api": "csp_Push", + "searchable": 0, + "filterable": 0, + "changeable": 0 + } + ], + "lives": [ + {} + ], + "parses": [ + { + "name": "聚合", + "type": 3, + "url": "Web" + }, + { + "name": "虾米", + "type": 0, + "url": "https://jx.xmflv.com/?url=", + "ext": { + "header": { + "user-agent": "Mozilla/5.0 (Linux; Android 13; V2049A Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36" + } + } + }, + { + "name": "云解", + "type": 0, + "url": "https://yparse.ik9.cc/index.php?url=", + "ext": { + "header": { + "user-agent": "Mozilla/5.0 (Linux; Android 13; V2049A Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36" + } + } + }, + { + "name": "咸鱼", + "type": 0, + "url": "https://jx.xymp4.cc/?url=", + "ext": { + "header": { + "user-agent": "Mozilla/5.0 (Linux; Android 13; V2049A Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36" + } + } + }, + { + "name": "淘片", + "type": 0, + "url": "https://jx.yparse.com/index.php?url=", + "ext": { + "header": { + "user-agent": "Mozilla/5.0 (Linux; Android 13; V2049A Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36" + } + } + }, + { + "name": "冰豆", + "type": 0, + "url": "https://bd.jx.cn/?url=", + "ext": { + "header": { + "user-agent": "Mozilla/5.0 (Linux; Android 13; V2049A Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36" + } + } + }, + { + "name": "七七", + "type": 0, + "url": "https://jx.77flv.cc/?url=", + "ext": { + "header": { + "user-agent": "Mozilla/5.0 (Linux; Android 13; V2049A Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36" + } + } + }, + { + "name": "盘古", + "type": 0, + "url": "https://www.playm3u8.cn/jiexi.php?url=", + "ext": { + "header": { + "user-agent": "Mozilla/5.0 (Linux; Android 13; V2049A Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36" + } + } + }, + { + "name": "夜幕", + "type": 0, + "url": "https://yemu.xyz/?url=", + "ext": { + "header": { + "user-agent": "Mozilla/5.0 (Linux; Android 13; V2049A Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36" + } + } + } + ], + "rules": [ + { + "name": "农民", + "hosts": [ + "toutiaovod.com" + ], + "regex": [ + "video/tos/cn" + ] + }, + { + "name": "火山", + "hosts": [ + "huoshan.com" + ], + "regex": [ + "item_id=" + ] + }, + { + "name": "抖音", + "hosts": [ + "douyin.com" + ], + "regex": [ + "is_play_url=" + ] + }, + { + "name": "磁力广告", + "hosts": [ + "magnet" + ], + "regex": [ + "更多", + "请访问", + "example", + "社 區", + "x u u", + "直 播", + "更 新", + "社 区", + "有趣", + "有 趣", + "英皇体育", + "全中文AV在线", + "澳门皇冠赌场", + "哥哥快来", + "美女荷官", + "裸聊", + "新片首发", + "UUE29" + ] + }, + { + "name": "饭团点击", + "hosts": [ + "dadagui", + "freeok", + "dadagui" + ], + "script": [ + "document.querySelector(\"#playleftiframe\").contentWindow.document.querySelector(\"#start\").click();" + ] + }, + { + "name": "毛驴点击", + "hosts": [ + "www.maolvys.com" + ], + "script": [ + "document.getElementsByClassName('swal-buttonswal-button--confirm')[0].click()" + ] + } + ], + "doh": [ + { + "name": "Google", + "url": "https://dns.google/dns-query", + "ips": [ + "8.8.4.4", + "8.8.8.8" + ] + }, + { + "name": "Cloudflare", + "url": "https://cloudflare-dns.com/dns-query", + "ips": [ + "1.1.1.1", + "1.0.0.1", + "2606:4700:4700::1111", + "2606:4700:4700::1001" + ] + }, + { + "name": "AdGuard", + "url": "https://dns.adguard.com/dns-query", + "ips": [ + "94.140.14.140", + "94.140.14.141" + ] + }, + { + "name": "DNSWatch", + "url": "https://resolver2.dns.watch/dns-query", + "ips": [ + "84.200.69.80", + "84.200.70.40" + ] + }, + { + "name": "Quad9", + "url": "https://dns.quad9.net/dns-quer", + "ips": [ + "9.9.9.9", + "149.112.112.112" + ] + } + ], + "flags": [ + "youku", + "优酷", + "优 酷", + "优酷视频", + "qq", + "腾讯", + "腾 讯", + "腾讯视频", + "iqiyi", + "qiyi", + "奇艺", + "爱奇艺", + "爱 奇 艺", + "m1905", + "xigua", + "letv", + "leshi", + "乐视", + "乐 视", + "sohu", + "搜狐", + "搜 狐", + "搜狐视频", + "tudou", + "pptv", + "mgtv", + "芒果", + "imgo", + "芒果TV", + "芒 果 T V", + "bilibili", + "哔 哩", + "哔 哩 哔 哩" + ], + "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" + } + ] + }, + { + "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": "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" + } + ] + } + ], + "ads": [ + "static-mozai.4gtv.tv" + ] +} \ No newline at end of file diff --git a/tianjitop/llllo4k/jars/1 b/tianjitop/llllo4k/jars/1 new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/tianjitop/llllo4k/jars/1 @@ -0,0 +1 @@ + diff --git a/tianjitop/llllo4k/jars/20260710134123-31654126d0.ong b/tianjitop/llllo4k/jars/20260710134123-31654126d0.ong new file mode 100644 index 00000000..e02bad90 Binary files /dev/null and b/tianjitop/llllo4k/jars/20260710134123-31654126d0.ong differ diff --git a/tianjitop/llllo4k/jars/492387b9-1482-4e06-9633-95dbb0f2d7eb.png b/tianjitop/llllo4k/jars/492387b9-1482-4e06-9633-95dbb0f2d7eb.png new file mode 100644 index 00000000..bf5c8127 Binary files /dev/null and b/tianjitop/llllo4k/jars/492387b9-1482-4e06-9633-95dbb0f2d7eb.png differ diff --git a/tianjitop/llllo4k/jars/60ed904e-7bec-418a-bcdd-29032c21b20e.png b/tianjitop/llllo4k/jars/60ed904e-7bec-418a-bcdd-29032c21b20e.png new file mode 100644 index 00000000..15be74b7 Binary files /dev/null and b/tianjitop/llllo4k/jars/60ed904e-7bec-418a-bcdd-29032c21b20e.png differ diff --git a/tianjitop/llllo4k/jars/950626551_3_1783615503849.png b/tianjitop/llllo4k/jars/950626551_3_1783615503849.png new file mode 100644 index 00000000..6464d701 Binary files /dev/null and b/tianjitop/llllo4k/jars/950626551_3_1783615503849.png differ diff --git a/tianjitop/llllo4k/jars/Omnibox.jar b/tianjitop/llllo4k/jars/Omnibox.jar new file mode 100644 index 00000000..e3164fbb Binary files /dev/null and b/tianjitop/llllo4k/jars/Omnibox.jar differ diff --git a/tianjitop/llllo4k/jars/XM.png b/tianjitop/llllo4k/jars/XM.png new file mode 100644 index 00000000..3a29db1c Binary files /dev/null and b/tianjitop/llllo4k/jars/XM.png differ diff --git a/tianjitop/llllo4k/jars/aeb15895-6d2c-4ced-a59b-deaa51366a05.png b/tianjitop/llllo4k/jars/aeb15895-6d2c-4ced-a59b-deaa51366a05.png new file mode 100644 index 00000000..683ad5f1 Binary files /dev/null and b/tianjitop/llllo4k/jars/aeb15895-6d2c-4ced-a59b-deaa51366a05.png differ diff --git a/tianjitop/llllo4k/jars/dongli-spider.jar b/tianjitop/llllo4k/jars/dongli-spider.jar new file mode 100644 index 00000000..73095dfe Binary files /dev/null and b/tianjitop/llllo4k/jars/dongli-spider.jar differ diff --git a/tianjitop/llllo4k/jars/fish06281030.jar b/tianjitop/llllo4k/jars/fish06281030.jar new file mode 100644 index 00000000..c8353dc0 Binary files /dev/null and b/tianjitop/llllo4k/jars/fish06281030.jar differ diff --git a/tianjitop/llllo4k/jars/moyuer-fish07050818.jar b/tianjitop/llllo4k/jars/moyuer-fish07050818.jar new file mode 100644 index 00000000..e4c183e8 Binary files /dev/null and b/tianjitop/llllo4k/jars/moyuer-fish07050818.jar differ diff --git a/tianjitop/llllo4k/jars/new.jar b/tianjitop/llllo4k/jars/new.jar new file mode 100644 index 00000000..ef3adf2c Binary files /dev/null and b/tianjitop/llllo4k/jars/new.jar differ diff --git a/tianjitop/llllo4k/jars/qj.jar b/tianjitop/llllo4k/jars/qj.jar new file mode 100644 index 00000000..5cc7f859 Binary files /dev/null and b/tianjitop/llllo4k/jars/qj.jar differ diff --git a/tianjitop/llllo4k/jars/xiaosa.jar b/tianjitop/llllo4k/jars/xiaosa.jar new file mode 100644 index 00000000..b7b1ea9e Binary files /dev/null and b/tianjitop/llllo4k/jars/xiaosa.jar differ diff --git a/tianjitop/llllo4k/jars/xm.jar b/tianjitop/llllo4k/jars/xm.jar new file mode 100644 index 00000000..bd656068 Binary files /dev/null and b/tianjitop/llllo4k/jars/xm.jar differ diff --git a/tianjitop/llllo4k/jars/嗷呜.jar b/tianjitop/llllo4k/jars/嗷呜.jar new file mode 100644 index 00000000..c3ff23b9 Binary files /dev/null and b/tianjitop/llllo4k/jars/嗷呜.jar differ diff --git a/tianjitop/llllo4k/js/4KAV.js b/tianjitop/llllo4k/js/4KAV.js new file mode 100644 index 00000000..e1724c01 --- /dev/null +++ b/tianjitop/llllo4k/js/4KAV.js @@ -0,0 +1,333 @@ +import { Crypto, load, _ } from 'assets://js/lib/cat.js'; + +let HOST = 'https://www.4k-av.com'; +let siteKey = ''; +let siteType = 0; + +const COMMON_HEADERS = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36', + 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8', + 'Accept-Language': 'zh-CN,zh;q=0.9', + 'Referer': HOST + '/' +}; + +// ----- 画质映射表(标准目录名) ----- +const QUALITY_MAP = { + '4k': '4K', + '2160p': '4K', + '2k': '1080P', + '1080p': '1080P', + '1080': '1080P', + '720p': '720P', + '720': '720P' +}; + +// 将任意画质描述转换为标准目录名 +function normalizeQuality(q) { + const lower = q.toLowerCase().replace(/\s+/g, ''); + for (const [key, val] of Object.entries(QUALITY_MAP)) { + if (lower.includes(key)) return val; + } + return '1080P'; // 默认 +} + +// ----- 基础网络请求 ----- +async function request(url) { + try { + const res = await req(url, { + method: 'get', + headers: COMMON_HEADERS, + timeout: 5000 + }); + return res.content; + } catch (e) { + return ''; + } +} + +// ----- 初始化 ----- +function init(cfg) { + siteKey = cfg.skey; + siteType = cfg.stype; + if (cfg.ext) { + HOST = cfg.ext.replace(/\/$/, ''); + } +} + +// ----- 首页分类 ----- +async function home(filter) { + const classes = [ + { type_id: 'tv', type_name: '电视剧' }, + { type_id: 'movie', type_name: '电影' } + ]; + + // 提取的筛选配置 + const filterConfig = [ + { + key: "year", + name: "年份", + value: [ + { n: "全部", v: "" }, + { n: "2026", v: "2026" }, + { n: "2025", v: "2025" }, + { n: "2024", v: "2024" }, + { n: "2023", v: "2023" }, + { n: "2022", v: "2022" }, + { n: "2021", v: "2021" }, + { n: "2020", v: "2020" }, + { n: "2019", v: "2019" } + ] + }, + { + key: "tag", + name: "标签", + value: [ + { n: "全部", v: "" }, + { n: "动作", v: "tag/动作" }, + { n: "剧情", v: "tag/剧情" }, + { n: "冒险", v: "tag/冒险" }, + { n: "喜剧", v: "tag/喜剧" }, + { n: "国产剧", v: "tag/国产剧" }, + { n: "恐怖", v: "tag/恐怖" }, + { n: "战争", v: "tag/战争" }, + { n: "科幻", v: "tag/科幻" }, + { n: "动画", v: "tag/动画" }, + { n: "韩剧", v: "tag/韩剧" }, + { n: "犯罪", v: "tag/犯罪" }, + { n: "纪录片", v: "tag/纪录片" } + ] + } + ]; + + const filters = { + "tv": filterConfig, + "movie": filterConfig + }; + + return JSON.stringify({ class: classes, filters: filters }); +} + +// ----- 通用列表解析(首页、分类、搜索) ----- +function parseVodList(html) { + const $ = load(html); + const list = []; + $('.NTMitem, .RTMitem').each((_, el) => { + const item = $(el); + const a = item.find('.title a'); + const href = a.attr('href'); + const name = a.text().trim() || a.attr('title'); + const poster = item.find('.poster img'); + let pic = poster.attr('src') || poster.attr('data-original'); + if (pic && pic.startsWith('/')) pic = HOST + pic; + let remarks = item.find('.resyear label[title="分辨率"]').text().trim(); + if (!remarks) remarks = item.find('.poster span').text().trim(); + if (href && name) { + list.push({ + vod_id: href, + vod_name: name, + vod_pic: pic, + vod_remarks: remarks + }); + } + }); + return list; +} + +// ----- 首页推荐 ----- +async function homeVod() { + const html = await request(HOST + '/'); + const list = parseVodList(html); + return JSON.stringify({ list }); +} + +// ----- 分类页 ----- +async function category(tid, pg, filter, extend) { + let id = tid; + // 适配筛选参数,覆盖原本的栏目 id + if (extend && extend.year) { + id = extend.year; + } else if (extend && extend.tag) { + id = extend.tag; + } + + let url = pg > 1 ? `${HOST}/${id}/page-${pg}.html` : `${HOST}/${id}/`; + const html = await request(url); + const list = parseVodList(html); + return JSON.stringify({ + page: parseInt(pg), + pagecount: list.length === 0 ? parseInt(pg) : parseInt(pg) + 1, + limit: 20, + total: list.length === 0 ? parseInt(pg) * 20 : (parseInt(pg) + 1) * 20, + list + }); +} + +// ----- 详情页(支持多画质线路) ----- +async function detail(id) { + let url = id.startsWith('http') ? id : HOST + id; + const html = await request(url); + const $ = load(html); + + // 1. 提取分辨率列表 + let resList = []; + $('#MainContent_videodetail label').each((_, el) => { + const text = $(el).text(); + if (text.includes('分辨率')) { + const raw = text.replace('分辨率:', '').trim(); + resList = raw.split('/').map(s => s.trim()).filter(Boolean); + } + }); + if (resList.length === 0) resList = ['1080P']; // 兜底 + + // 2. 提取标签与演员 + const tags = []; + $('#MainContent_tags a').each((_, el) => tags.push($(el).text().trim())); + let actor = ''; + const subtitle = $('#MainContent_titleh12 h2').text().trim(); + if (subtitle) { + const parts = subtitle.split('/'); + if (parts.length > 1) actor = parts.slice(1).join('/').trim(); + } + + // 3. 构建基础剧集列表 + const epList = []; + $('#rtlist li').each((_, el) => { + const item = $(el); + const a = item.find('a'); + if (a.length) { + const epUrl = a.attr('href'); + const epName = a.find('span').text().trim() || a.attr('title') || '播放'; + epList.push({ name: epName, url: epUrl }); + } else { + // 当前播放集(无链接) + const epName = item.find('span.stitle').text().trim() || '正片'; + epList.push({ name: epName, url: id }); // 使用当前详情页ID + } + }); + if (epList.length === 0) epList.push({ name: '正片', url: id }); + + // 4. 为每个画质生成线路 + const playFroms = []; + const playUrls = []; + resList.forEach(res => { + const dirName = normalizeQuality(res); // 标准化目录名 + const lineName = `4KAV-${res}`; + playFroms.push(lineName); + // 每个剧集附加画质目录 + const lineEpStr = epList.map(ep => `${ep.name}$${ep.url}|${dirName}`).join('#'); + playUrls.push(lineEpStr); + }); + + // 5. 组装vod信息 + const vod = { + vod_id: id, + vod_name: $('#tophead h1').text().trim() || $('.videodetail').attr('title'), + vod_pic: $('#MainContent_poster img').attr('src'), + type_name: tags.join(','), + vod_year: $('#MainContent_videodetail a').text().trim(), + vod_area: '', + vod_remarks: resList.join('/'), + vod_actor: actor, + vod_director: '', + vod_content: $('#MainContent_videodesc p').map((i, el) => $(el).text().trim()).get().join('\n'), + vod_play_from: playFroms.join('$$$'), + vod_play_url: playUrls.join('$$$') + }; + if (vod.vod_pic && vod.vod_pic.startsWith('/')) vod.vod_pic = HOST + vod.vod_pic; + + return JSON.stringify({ list: [vod] }); +} + +// ----- 搜索 ----- +async function search(wd, quick, pg) { + const url = `${HOST}/s?d=${encodeURIComponent(wd)}`; + const html = await request(url); + const list = parseVodList(html); + return JSON.stringify({ list }); +} + +// ----- 播放(支持画质切换) ----- +async function play(flag, id, flags) { + // id 格式: realPageUrl|targetDir + const parts = id.split('|'); + const realId = parts[0]; + const targetDir = parts[1] || '1080P'; // 默认1080P + + const url = realId.startsWith('http') ? realId : HOST + realId; + const html = await request(url); + if (!html) { + return JSON.stringify({ parse: 0, url: '', header: {} }); + } + + const $ = load(html); + let playUrl = ''; + + // 方式1:从 video source 提取 + const sources = $('video source'); + if (sources.length) { + // 优先选择与目标画质匹配的 source(若有多个) + for (let i = 0; i < sources.length; i++) { + const src = sources.eq(i).attr('src'); + if (src) { + // 如果当前source的路径包含目标画质目录,直接使用 + if (src.includes(`/${targetDir}/`)) { + playUrl = src; + break; + } + // 否则记录第一个作为备选 + if (!playUrl) playUrl = src; + } + } + } + + // 方式2:正则匹配(如果未找到) + if (!playUrl) { + const match = html.match(/(https?:\/\/[^\s"'<>]+?\.(?:m3u8|mp4)[^\s"'<>]*)/); + if (match) playUrl = match[1]; + } + + // 如果依旧没有,返回空 + if (!playUrl) { + return JSON.stringify({ parse: 0, url: '', header: {} }); + } + + // 替换画质目录(如果目标目录与当前不同) + if (targetDir && !playUrl.includes(`/${targetDir}/`)) { + // 匹配常见画质目录(忽略大小写) + const dirPattern = /\/(4K|1080P|720P|1080|720|2160P|2K)\//i; + if (dirPattern.test(playUrl)) { + playUrl = playUrl.replace(dirPattern, `/${targetDir}/`); + } else { + // 如果无法匹配,尝试在文件名前插入目录(较少见,但作为备选) + // 例如: /tv/xxx/xxx.m3u8 -> /tv/xxx/1080P/xxx.m3u8 + const lastSlash = playUrl.lastIndexOf('/'); + if (lastSlash !== -1) { + const base = playUrl.substring(0, lastSlash); + const file = playUrl.substring(lastSlash + 1); + playUrl = `${base}/${targetDir}/${file}`; + } + } + } + + return JSON.stringify({ + parse: 0, + url: playUrl, + header: { + 'User-Agent': COMMON_HEADERS['User-Agent'], + 'Referer': HOST + '/' + } + }); +} + +// ----- 导出接口 ----- +export function __jsEvalReturn() { + return { + init, + home, + homeVod, + category, + detail, + search, + play + }; +} \ No newline at end of file diff --git a/tianjitop/llllo4k/js/88影视.min.js b/tianjitop/llllo4k/js/88影视.min.js new file mode 100644 index 00000000..a0f18a3f --- /dev/null +++ b/tianjitop/llllo4k/js/88影视.min.js @@ -0,0 +1,3 @@ +// 本资源来源于互联网公开渠道,仅可用于个人学习爬虫技术。 +// 严禁将其用于任何商业用途,下载后请于 24 小时内删除,搜索结果均来自源站,本人不承担任何责任。 +import{Crypto as e}from"assets://js/lib/cat.js";let t,n="https://web.88spa-03.com:8443",r="https://88api.omwjhz.com:18888";const o={"User-Agent":"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36",Accept:"application/json, text/plain, */*","Accept-Language":"zh-CN,zh;q=0.9","Cache-Control":"no-cache",Origin:n,Pragma:"no-cache",Referer:`${n}`,"Sec-Fetch-Dest":"empty","Sec-Fetch-Mode":"cors","Sec-Fetch-Site":"cross-site","sec-ch-ua":'"Not/A)Brand";v="8", "Chromium";v="143", "Google Chrome";v="143"',"sec-ch-ua-mobile":"?1","sec-ch-ua-platform":'"Android"'},a="function"==typeof js2Proxy&&"function"==typeof desX&&"function"!=typeof getProxy;async function s(e){}async function i(e){let n=[{type_id:"1",type_name:"电影"},{type_id:"2",type_name:"连续剧"},{type_id:"3",type_name:"综艺"},{type_id:"4",type_name:"动漫"}];a&&n.unshift({type_id:"home",type_name:"首页"});try{if(!e)return JSON.stringify({class:n,filters:{}});if(t)return JSON.stringify({class:n,filters:t});const a=`${r}/v1/vod-list-options`,s=await req(a,{headers:o,timeout:8e3});let i={};if(s&&s.content){let e="string"==typeof s.content?JSON.parse(s.content):s.content;const n=e.areas||{},r=e.types||{},o=e.languages||[];let a=[{n:"全部",v:"全部"}];Array.isArray(o)&&o.forEach(e=>{"全部"!==e.name&&a.push({n:e.name,v:e.name})});let c=[{n:"全部",v:""}];["2026","2025","2024","2023","2022","2021","2020","2019","2018","2017","2016","2015","2014","2013","2012","2011","2010"].forEach(e=>{c.push({n:e,v:e})});let p=[{n:"全部",v:"全部"}];for(let e=65;e<=90;e++)p.push({n:String.fromCharCode(e),v:String.fromCharCode(e)});for(let e=0;e<=9;e++)p.push({n:e.toString(),v:e.toString()});let l=[{n:"最新",v:"time"},{n:"最热",v:"hot"},{n:"评分",v:"score"}];const d={1:"电影",2:"连续剧",3:"综艺",4:"动漫"};for(const e in d){const t=d[e];let o=[],s=[{n:"全部",v:e}];Array.isArray(r[t])&&r[t].forEach(e=>{"全部"!==e.name&&s.push({n:e.name,v:e.id.toString()})}),o.push({key:"cateId",name:"类型",init:e,value:s});let u=[{n:"全部",v:"全部"}];Array.isArray(n[t])&&n[t].forEach(e=>{"全部"!==e.name&&u.push({n:e.name,v:e.name})}),o.push({key:"area",name:"地区",init:"全部",value:u}),o.push({key:"lang",name:"语言",init:"全部",value:a}),o.push({key:"year",name:"年份",init:"",value:c}),o.push({key:"letter",name:"字母",init:"全部",value:p}),o.push({key:"orderBy",name:"排序",init:"time",value:l}),i[e]=o}t=i}return JSON.stringify({class:n,filters:t||{}})}catch(e){return JSON.stringify({class:n,filters:{}})}}async function c(){try{const e=`${r}/v1/home-list`,t=await req(e,{headers:o,timeout:8e3});if(!t||!t.content)return JSON.stringify({list:[]});let n="string"==typeof t.content?JSON.parse(t.content):t.content,a=new Map;for(const e in n)Array.isArray(n[e])&&n[e].forEach(e=>{if(e&&e.VodID){const t=e.VodID.toString();a.has(t)||a.set(t,{vod_id:t,vod_name:e.VodName,vod_pic:e.VodPic,vod_remarks:e.VodRemarks})}});const s=Array.from(a.values());return JSON.stringify({list:s})}catch(e){return JSON.stringify({list:[]})}}async function p(e,t,n,a){try{if("home"===e){let e=JSON.parse(await c());return JSON.stringify({list:e.list||[],page:1,pagecount:1})}const n=a.cateId?encodeURIComponent(a.cateId):e,s="全部",i=a.area?encodeURIComponent(a.area):"全部",p=a.lang?encodeURIComponent(a.lang):"全部",l=a.year?encodeURIComponent(a.year):"",d=a.letter?encodeURIComponent(a.letter):"全部",u=a.orderBy?encodeURIComponent(a.orderBy):"time",g=`${r}/v1/vod-list?orderBy=${u}&type=${n}&class=${s}&area=${i}&year=${l}&lang=${p}&letter=${d}&page=${t}`,f=await req(g,{headers:o,timeout:8e3});if(!f||!f.content)return JSON.stringify({list:[],page:parseInt(t),pagecount:parseInt(t)});let y="string"==typeof f.content?JSON.parse(f.content):f.content;if(0!==y.status||!y.data)return JSON.stringify({list:[],page:parseInt(t),pagecount:parseInt(t)});const m=y.data.map(e=>({vod_id:e.VodID.toString(),vod_name:e.VodName,vod_pic:e.VodPic,vod_remarks:e.VodRemarks})),h=y.qty||0,v=h>0?Math.ceil(h/60):parseInt(t);return JSON.stringify({list:m,page:parseInt(t),pagecount:v})}catch(e){return JSON.stringify({list:[],page:parseInt(t),pagecount:parseInt(t)})}}async function l(e,t,n=1){try{const t=encodeURIComponent(e),a=`${r}/v1/search?keyword=${t}&cate=undefined&page=${n}`,s=await req(a,{headers:o,timeout:8e3});if(!s||!s.content)return JSON.stringify({list:[],page:parseInt(n),pagecount:parseInt(n)});let i="string"==typeof s.content?JSON.parse(s.content):s.content;if(0!==i.status||!i.data)return JSON.stringify({list:[],page:parseInt(n),pagecount:parseInt(n)});const c=i.data.map(e=>({vod_id:e.VodID.toString(),vod_name:e.VodName,vod_pic:e.VodPic,vod_remarks:e.VodRemarks})),p=i.qty||0,l=p>0?Math.ceil(p/60):parseInt(n);return JSON.stringify({list:c,page:parseInt(n),pagecount:l})}catch(e){return JSON.stringify({list:[],page:parseInt(n),pagecount:parseInt(n)})}}async function d(e){try{const t=`${r}/v1/vod-details?id=${e}`,n=await req(t,{headers:o,timeout:8e3});if(!n||!n.content)return JSON.stringify({list:[]});let a="string"==typeof n.content?JSON.parse(n.content):n.content;if(0!==a.status||!a.vod)return JSON.stringify({list:[]});const s=a.vod,i=s.VodPlayServer||[],c=s.VodPlayUrls||{};let p=[],l=[];i.forEach(e=>{if(1===e.Status){const t=e.From,n=e.Show,r=c[t]||[];if(r.length>0){const e=r.map(e=>`${e[0]}$${e[1]}`).join("#");p.push(n),l.push(e)}}});const d=p.join("$$$"),u=l.join("$$$"),g={vod_id:s.VodID.toString(),vod_name:s.VodName,vod_pic:s.VodPic,type_name:a.VodClass?a.VodClass.TypeName:"",vod_year:s.VodYear||"",vod_area:s.VodArea||"",vod_remarks:s.VodRemarks||"",vod_actor:s.VodActor||"",vod_director:s.VodDirector||"",vod_content:s.VodContent?s.VodContent.replace(/<\/?[^>]+(>|$)/g,""):"",vod_play_from:d,vod_play_url:u};return JSON.stringify({list:[g]})}catch(e){return JSON.stringify({list:[]})}}async function u(t,r,a){try{const t=/^(https?:)?\/\//i.test(r)?r:`https://vip.jsjinfu.com:8443/?url=${r}`;let a=await async function(t,n){let r={"User-Agent":o["User-Agent"],Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7","accept-language":"zh-CN,zh;q=0.9","cache-control":"no-cache",pragma:"no-cache",referer:n,"upgrade-insecure-requests":"1"};try{const n=(await req(t,{headers:r})).content,a=h(n,"video_url");if(a)return a;const s=h(n,"Domain"),i=h(n,"Time"),c=h(n,"Version"),p=h(n,"Vurl"),l=h(n,"Vkey"),d=h(n,"Key"),u=h(n,"Ref"),S=s||"vip.jsjinfu.com";if(!(i&&p&&l&&d))return null;const $=md5X(l);let _=y(d,$),N=g.encryptToBase64(d,_);const k=s+S+i+p+d+_;let O=m(md5X(k)),C=f.encode(O,"971a0e7224fecb61b1868f1211a6360d"),A=y(C,$),I=g.encryptToBase64(C,A),V=m(md5X(k+C+A)),b=f.encode(V,i+"52bc46dec47a199abc82793bfabe56f6"),J=y(b,$),w=g.encryptToBase64(b,J),U=`${l}-${d}-${C}-${b}`,E=`${_}-${A}-${J}`;const D=U+E;let R=g.encryptToBase64(D+N+I+w,S+s+i),B={url:p,wap:"0",ios:"0",host:S,referer:u,time:i,key:d,key1:_,sign:C,sign1:A,token:b,token1:J},X=function(t,n){let r=e.enc.Latin1.parse(n.substring(0,16)),o=e.enc.Latin1.parse(n.substring(16,32));return e.AES.encrypt(e.enc.Base64.stringify(e.enc.Utf8.parse(t)),r,{iv:o,mode:e.mode.CBC,padding:e.pad.Pkcs7}).toString()}(JSON.stringify(B),md5X(R));B.ckey="110#"+e.enc.Base64.stringify(e.enc.Latin1.parse(X));let q=function(e){let t=String(e.time),n=e.key,r=e.key1,o=e.sign1,a=e.token1,s=["2","6","2","4"],i=t.split("")[s[0]]||"e",c=n.split("")[s[1]]||"t",p=r.split("")[s[2]]||"c",l=o.split("")[o.split("").length-s[3]]||"n",d=a.split(""),u=[];for(let e=0;2*e{if(!e)throw new Error("");const t=(e,t)=>{const n=e.words,r=e.sigBytes,o=r+3>>2,a=new Array(t?o+1:o);for(let e=0;e>2]|=(n[e>>2]>>>24-e%4*8&255)<<((3&e)<<3);return t&&(a[o]=r),a},n=(e,t,n,r,o,a)=>(n>>>5^t<<2)+(t>>>3^n<<4)^(e^t)+(a[3&r^o]^n);return{encryptToBase64(r,o){if(!r||0===r.length)return r;const a=t(e.enc.Utf8.parse(r),!0),s=t(e.enc.Utf8.parse(o),!1);return e.enc.Base64.stringify((t=>{const n=t.length,r=[];for(let e=0;e>>8&255)<<16|(n>>>16&255)<<8|n>>>24}return e.lib.WordArray.create(r,4*n)})(((e,t)=>{t.length<4&&(t.length=4);const r=e.length,o=r-1;let a,s=e[o],i=0;for(let c=0|Math.floor(6+52/r);c>0;--c){i=i+2654435769&4294967295;const r=i>>>2&3;for(let c=0;cMath.floor(Date.now()/1e3),n=function(n,r="DECODE",o="liangcheng",a=0){o=md5X(o);const s=md5X(o.substring(0,16)),i=md5X(o.substring(16,32));let c="";if("DECODE"===r)c=n.substring(0,4);else{const e=md5X((()=>{const e=Date.now(),t=Math.floor(e/1e3);return(e-1e3*t)/1e3+" "+t})());c=e.substring(e.length-4)}const p=e.enc.Utf8.parse(s+md5X(s+c));let l="";if("DECODE"===r){let r=e.enc.Base64.parse(n.substring(4)),o=e.RC4.decrypt({ciphertext:r},p);l=e.enc.Latin1.stringify(o);const a=parseInt(l.substring(0,10),10),s=0===a||a-t()>0,c=l.substring(10,26)===md5X(l.substring(26)+i).substring(0,16);return s&&c?l.substring(26):""}{a=a?a+t():0;const r=String(a).padStart(10,"0")+md5X(n+i).substring(0,16)+n;return l=e.RC4.encrypt(e.enc.Latin1.parse(r),p).toString(),c+l.replace(/=/g,"")}};return{encode:(e,t,r)=>n(e,"ENCODE",t,r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"."),decode:(e,t)=>n(e.replace(/-/g,"+").replace(/_/g,"/").replace(/\./g,"="),"DECODE",t)}}();function y(t,n){return e.AES.encrypt(e.enc.Utf8.parse(t),e.enc.Utf8.parse(n),{mode:e.mode.ECB}).ciphertext.toString()}function m(e){return md5X(`17325841932717338791732584194271733878${e}`.replace(/[\-|\,]/g,""))}function h(e,t){const n=e.match(new RegExp(`var\\s+${t}\\s*=\\s*['"]([^'"]+)['"]`));return n?n[1]:null}function v(e){let t={};for(let n in e)t[n]=a?encodeURIComponent(e[n]||""):e[n];return t}export function __jsEvalReturn(){return{init:s,home:i,homeVod:c,category:p,search:l,detail:d,play:u}} \ No newline at end of file diff --git a/tianjitop/llllo4k/js/Gimy.js b/tianjitop/llllo4k/js/Gimy.js new file mode 100644 index 00000000..3b9eaaa6 --- /dev/null +++ b/tianjitop/llllo4k/js/Gimy.js @@ -0,0 +1,137 @@ +var HOST = "https://gimyplus.com"; +var PROXY = "https://gimyplus-com.translate.goog"; +var TRANS = "_x_tr_sl=auto&_x_tr_tl=zh-CN&_x_tr_hl=zh-CN"; +var UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"; +var CLASSES = [{ type_id: "2", type_name: "电视剧" }, { type_id: "1", type_name: "电影" }, { type_id: "4", type_name: "动漫" }, { type_id: "29", type_name: "综艺" }, { type_id: "34", type_name: "短剧" }]; +var SUBTYPES = { + "1": [["全部", "1"], ["剧情片", "11"], ["动作片", "6"], ["科幻片", "9"], ["喜剧片", "7"], ["恐怖片", "10"], ["爱情片", "8"], ["战争片", "12"], ["动画电影", "24"]], + "2": [["全部", "2"], ["陆剧", "13"], ["韩剧", "20"], ["美剧", "16"], ["日剧", "15"], ["台剧", "14"], ["港剧", "21"], ["短剧", "34"], ["AI漫剧", "38"], ["海外剧", "31"], ["纪录片", "22"]], + "4": [["全部", "4"]], "29": [["全部", "29"]], "34": [["全部", "34"]] +}; +var AREAS = [["中国大陆", "中國大陸"], ["大陆", "大陸"], ["韩国", "韓國"], ["日本", "日本"], ["台湾", "台灣"], ["香港", "香港"], ["美国", "美國"], ["欧美", "歐美"], ["泰国", "泰國"], ["英国", "英國"], ["法国", "法國"], ["新加坡", "新加坡"], ["越南", "越南"], ["其他", "其他"]]; +var FILTERS = {}; + +function str(v) { return v === undefined || v === null ? "" : String(v); } +function clean(s) { return str(s).replace(//gi, "").replace(//gi, "").replace(/<[^>]+>/g, " ").replace(/ /g, " ").replace(/&/g, "&").replace(/'/g, "'").replace(/"/g, '"').replace(/\s+/g, " ").trim(); } +function norm(s) { + var from = "殺風體國劇電視網綜門間骨頭還樹劉陸韓美臺灣港漫紀錄動畫愛情科幻戰爭恐怖綜藝更新總雲線路畫質無盡極速優順暢清晰如意盡聲說龍鳳凰實學會時後前開關點長短萬與為這個們來對當裏難歡樂發現有沒幾次於從將被"; + var to = "杀风体国剧电视网络门间骨头还树刘陆韩美台湾港漫纪录动画爱情科幻战争恐怖综艺更新总云线路画质无尽极速优顺畅清晰如意尽声说龙凤凤实学会时后前开关点长短万与为这个们来对当里难欢乐发现有没几次于从将被"; + var map = {}, out = "", value = str(s).toLowerCase(); + for (var i = 0; i < from.length; i++) map[from.charAt(i)] = to.charAt(i); + for (var j = 0; j < value.length; j++) out += map[value.charAt(j)] || value.charAt(j); + return out.replace(/\s+/g, ""); +} +function attr(s, n) { var m = new RegExp(n + "\\s*=\\s*([\"'])([\\s\\S]*?)\\1", "i").exec(s || ""); return m ? m[2] : ""; } +function result(v) { return JSON.stringify(v); } +function proxyUrl(path, params) { path = str(path).replace(/^https?:\/\/[^/]+/, "").split("?")[0]; return PROXY + path + "?" + (params ? params + "&" : "") + TRANS; } +function requestText(path, params) { + for (var i = 0; i < 2; i++) { + try { + var r = req(proxyUrl(path, params), { method: "GET", headers: { "User-Agent": UA, "Referer": HOST + "/" }, timeout: 20000 }); + var text = str(typeof r === "string" ? r : r && (r.content || r.body || r.data)); + if (text && !/Just a moment|Attention Required/i.test(text)) return text; + } catch (e) { } + } + return ""; +} +function getJson(url, referer) { + try { + var r = req(url, { method: "GET", headers: { "User-Agent": UA, "Referer": referer || url.replace(/[^/]+$/, "") }, timeout: 25000 }); + return JSON.parse(str(typeof r === "string" ? r : r && (r.content || r.body || r.data)) || "{}"); + } catch (e) { return {}; } +} +function idPath(href, type) { var m = new RegExp("/" + type + "/(\\d+)(?:\\.html|-)").exec(href || ""); return m ? m[1] : ""; } +function parseList(html) { + var out = [], seen = {}, re = /]*class=["'][^"']*card__thumb)(?=[^>]*href=["']([^"']*\/vod\/(\d+)\.html[^"']*))[^>]*>[\s\S]*?<\/a>/gi, m; + while ((m = re.exec(html || "")) !== null) { + if (seen[m[2]]) continue; + seen[m[2]] = 1; + var block = m[0], img = (/]*>/i.exec(block) || [""])[0]; + var name = attr(img, "alt"), pic = attr(img, "data-src") || attr(img, "src"), remark = clean(block); + if (name) out.push({ vod_id: m[2], vod_name: name, vod_pic: pic, vod_remarks: remark }); + } + return out; +} +function buildFilters() { + var years = [{ n: "全部", v: "" }]; + for (var y = 2026; y >= 2016; y--) years.push({ n: str(y), v: str(y) }); + for (var k in SUBTYPES) FILTERS[k] = [ + { key: "type", name: "类型", value: SUBTYPES[k].map(function (x) { return { n: x[0], v: x[1] }; }) }, + { key: "area", name: "地区", value: [{ n: "全部", v: "" }].concat(AREAS.map(function (x) { return { n: x[0], v: x[1] }; })) }, + { key: "year", name: "年份", value: years }, + { key: "by", name: "排序", value: [{ n: "最新更新", v: "time" }, { n: "最新上架", v: "time_add" }, { n: "周人气", v: "hits_week" }, { n: "总人气", v: "hits" }] } + ]; +} +function parseExt(ext) { if (!ext) return {}; if (typeof ext === "object") return ext; try { return JSON.parse(ext); } catch (e) { return {}; } } + +function init(ext) { buildFilters(); } +function home(filter) { return result({ class: CLASSES, filters: FILTERS }); } +function homeVod() { return result({ list: parseList(requestText("/")) }); } +function category(tid, pg, filter, extend) { + pg = parseInt(pg || 1) || 1; + var e = parseExt(extend), type = str(e.type || tid), area = str(e.area || ""), year = str(e.year || ""), by = str(e.by || "time"); + var filtered = !!(area || year || e.by), path = filtered ? "/show/" + type + "-" + encodeURIComponent(area) + "-" + by + "------" + pg + "---" + year + ".html" : "/type/" + type + (pg > 1 ? "-" + pg : "") + ".html"; + var list = parseList(requestText(path)); + return result({ page: pg, pagecount: list.length ? pg + 1 : pg, limit: list.length || 36, total: (pg + 1) * (list.length || 36), list: list }); +} +function detail(id) { + var vid = (str(id).match(/\d+/) || [""])[0], html = requestText("/vod/" + vid + ".html"); + if (!html) return result({ list: [] }); + var name = clean((/]*>([\s\S]*?)<\/h1>/i.exec(html) || ["", ""])[1]); + if (!name) name = str((/property=["']og:title["'][^>]*content=["']([^"']+)/i.exec(html) || ["", ""])[1]).split("線上看")[0]; + var pic = (/(?:property=["']og:image["'][^>]*content|content=["']([^"']+)["'][^>]*property=["']og:image)/i.exec(html) || ["", ""])[1] || ""; + var desc = clean((/property=["']og:description["'][^>]*content=["']([^"']+)/i.exec(html) || ["", ""])[1]); + var starts = [], sr = /]*class=["'][^"']*playlist-block[^"']*["'][^>]*>/gi, sm; + while ((sm = sr.exec(html)) !== null) starts.push(sm.index); + var froms = [], urls = []; + for (var i = 0; i < starts.length; i++) { + var block = html.slice(starts[i], i + 1 < starts.length ? starts[i + 1] : html.length); + var title = clean((/playlist-block__title[^>]*>([\s\S]*?)<\//i.exec(block) || ["", ""])[1]) || "线路" + (i + 1); + var eps = [], er = /]*href=["']([^"']*\/ep\/(\d+)-(\d+)-(\d+)\.html[^"']*)["'][^>]*>([\s\S]*?)<\/a>/gi, em; + while ((em = er.exec(block)) !== null) eps.push((clean(em[5]) || "播放") + "$/ep/" + em[2] + "-" + em[3] + "-" + em[4] + ".html"); + if (eps.length) { froms.push(title); urls.push(eps.join("#")); } + } + return result({ list: [{ vod_id: vid, vod_name: name, vod_pic: pic, vod_content: desc, vod_play_from: froms.join("$$$"), vod_play_url: urls.join("$$$") }] }); +} +function parsePlayer(html) { + var m = /var\s+player_data\s*=\s*(\{[\s\S]*?\})\s*<\/script>/i.exec(html || ""); + if (!m) return {}; + try { return JSON.parse(m[1]); } catch (e) { return {}; } +} +function resolveSpecial(url) { + var api = /^JD(?:-|QM-|HG-)/.test(url) ? "https://v.gimy.bot/jd/api.php" : /^(NSYS-|NS4K-)/.test(url) ? "https://player.gimy.bot/n/api.php" : "https://v.gimy.bot/jx/api.php"; + var data = getJson(api + "?url=" + encodeURIComponent(url), api.replace(/api\.php.*$/, "")); + return data && Number(data.code) === 200 ? str(data.url) : ""; +} +function play(flag, id, flags) { + var path = str(id).replace(/^https?:\/\/[^/]+/, ""), data = parsePlayer(requestText(path)), url = str(data.url).replace(/\\\//g, "/"); + if (data.encrypt == 1) try { url = unescape(url); } catch (e1) { } + if (data.encrypt == 2) try { url = decodeURIComponent(url); } catch (e2) { } + if (url && !/\.(m3u8|mp4|flv)(\?|$)/i.test(url)) url = resolveSpecial(url); + if (/^https?:\/\//.test(url) && /\.(m3u8|mp4|flv)(\?|$)/i.test(url)) return result({ parse: 0, url: url, header: { "User-Agent": UA }, headers: { "User-Agent": UA } }); + return result({ parse: 1, jx: 0, url: HOST + path, header: { "User-Agent": UA, "Referer": HOST + "/" } }); +} +function search(wd, quick, pg) { + pg = parseInt(pg || 1) || 1; + var keyword = norm(wd); + var list = parseList(requestText("/")).filter(function (x) { return norm(x.vod_name).indexOf(keyword) >= 0; }); + if (!list.length) { + try { + var rssUrl = "https://www.bing.com/search?format=rss&q=" + encodeURIComponent("site:gimyplus.com/vod/ " + wd); + var r = req(rssUrl, { method: "GET", headers: { "User-Agent": UA }, timeout: 15000 }); + var xml = str(typeof r === "string" ? r : r && (r.content || r.body || r.data)); + var seen = {}, ir = /([\s\S]*?)<\/item>/gi, im; + while ((im = ir.exec(xml)) !== null) { + var block = im[1], link = clean((/([\s\S]*?)<\/link>/i.exec(block) || ["", ""])[1]); + var idm = /gimyplus\.com\/vod\/(\d+)\.html/i.exec(link); + if (!idm || seen[idm[1]]) continue; + seen[idm[1]] = 1; + var title = clean((/([\s\S]*?)<\/title>/i.exec(block) || ["", ""])[1]).replace(/\s*-\s*Gimy.*$/i, "").replace(/線上看|线上看/g, "").trim(); + list.push({ vod_id: idm[1], vod_name: title || wd, vod_pic: "", vod_remarks: "搜索索引" }); + } + } catch (e) { } + } + return result({ page: pg, pagecount: pg, limit: list.length || 20, total: list.length, list: list }); +} + +__JS_SPIDER__ = { init: init, home: home, homeVod: homeVod, category: category, detail: detail, play: play, search: search }; diff --git a/tianjitop/llllo4k/js/` b/tianjitop/llllo4k/js/` new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/tianjitop/llllo4k/js/` @@ -0,0 +1 @@ + diff --git a/tianjitop/llllo4k/js/api.json b/tianjitop/llllo4k/js/api.json new file mode 100644 index 00000000..125a475a --- /dev/null +++ b/tianjitop/llllo4k/js/api.json @@ -0,0 +1,2285 @@ +{ + "warningText": "资源来自网络,无盈利纯技术分享![所有内容仅供学习使用,请勿用于违法及商业用途,请勿付费购买]", + "spider": "./xiaosa.jar", + "wallpaper": "http://127.0.0.1:9978/proxy?do=wallpaper", + "sites": [ + { + "key": "豆瓣", + "name": "豆瓣|首页", + "type": 3, + "api": "csp_Douban", + "searchable": 0 + }, + { + "key": "配置中心", + "name": "配置|中心", + "type": 3, + "api": "csp_Config", + "searchable": 0, + "changeable": 0, + "indexs": 0, + "style": { + "type": "rect", + "ratio": 1.597 + } + }, + { + "key": "本地", + "name": "本地|视频", + "type": 3, + "api": "csp_LocalFile" + }, + { + "key": "预告", + "name": "新片|预告", + "type": 3, + "api": "csp_YGP", + "searchable": 0 + }, + { + "key": "魔法盒子", + "name": "魔法盒子|影视", + "type": 3, + "api": "./js/魔法盒子.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 +}, + { + "key": "小鸭子看看", + "name": "小鸭子看看|影视", + "type": 3, + "api": "./py/小鸭子看看.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 +}, + { + "key": "柯南影视", + "name": "柯南|影视", + "type": 3, + "api": "./py/柯南.py", + "searchable": 1, + "quickSearch": 1, + "changeable": 1, + "filterable": 1 +}, + { + "name": "①|独家菠菜", + "key": "AppV7Fz", + "type": 3, + "jar": "./jars/492387b9-1482-4e06-9633-95dbb0f2d7eb.png", + "api": "csp_AppV7Amns", + "searchable": 1, + "quickSearch": 1, + "changeable": 0, + "ext": "c8075714a2413f05151fea6864509533510f048c89b582eb125174a0c364626eb83a35618bdd10c1840663d38fb441b8ff25a078bc11c7a8f17ad5b723195ef16fe405746bf6b3defd8d16ac2d07b6f6580ea4826889761c1eae278162b6dc791fff46bcd3a42acfdd470315a17f741eeb834b4fb9f184e3baa5e698b9a771341f86037ec6fa0b8b5d3e2f12172d3ba5779bcbd40a9a9842e5e20efe45b59459bcf5269b50355cebeab216ced19dff4c8d1e3968be184fd3d5609eae3e6089d84bc7b97286027f67ef0d2b19002a7cfd7ad3094cb22ee9efd9dfcb7554f5b204f3bb205ac783272c59d9fa88672e92c91cf1f022930ce8acf1850b86c110e19cc99041d491a3330e53981a954fac8b71af43e3c200c360968d571b1ccbec1a91abfc9e6723b8b2fe1f77057423a7c152c35e5a6573a8dca051273febfe8fd8c12383a37226d8b0f4e8f09e3fbb99becc533165486f60cba1ba247842491d5dd10bc79cad14ecd4da86d0b4e9b416cda8bae4f52156c5165025cda138161b660c1e488c6fa4e733e7c78731b21564faf5008f69b326c9bde49778fd9a7a41de21b7d3dcecdd2461279726060d22d13da499673fa92de73bdf2ed4a1388e457f6d22ecbdcb3a37c1ba4196f98990bba4d4dd8713a6cbb3e3cc2c6bd8ef1dd3cd59fcb2df6dc6ba92b88ac79b047f47ef178c279d353d06d0280aaf30e23b5940ea278c24ba357999db8431273844a2016267d42b89c88d163a68d5cb17d14d46529d9922580294a5be697d66b074c8601c0e4e5c8789d3d5c0b5bcd0ec5cbd9482a41a725aa8fed498de8fdc5d7a275322afcd0bed8bd35ff237edcead3ce0d3984ee00734ed61e1f4c0e67798324ff694db01e3bac4cc00706132b77a4bddd801db4e527caec727640f80737a5e0d9793bc2d7e8a42a3996b21ac66a2e4c9ae4613e63f597fd72f4c4c7866ba14e2431a24325d25fb79eaaf19d1e1d01f7b4269fafb683aa4485580639c7a59975c3827a98c73906708f0e4efdd6a43e72e6ccd8b51d3ecfe281aa189c9544ca2808593fd239dff232009197c4ab4babed12df78fef1e9cf048de39f7cdd47ebeffec77113906eec44cf0e48fc123a81b73ab5f36cb3cc3b14837cd469e9264dc935f5b63bcd01799f2e3045bcf6442d1c2adc74380b9b3566ddcb9ea4c833e044a90d0f5cc4a47cfadc4e172f285f45ebc348ceed3d98ff83fa4bf00200f6f9eddbd37f26d6632db73a96f4a48d22caea73b0d130813de12b372c65dd99164dcf309038b3fc0b44cdb7656be826ce11dbcfae7e7d4419cfaa9b4bee1ca93e6d5dddd8bb44c5c2f3c6129d54dcfcab74412bfdd8c4e8ced562d5a6b3a7d07b68b530d7b67f257e683f5d943de791684609e6e6fa2bc6602498b10e0c9e8b8ebaede9dd13b7a4606b17053b238f5e5dafa9035b62fab1e7705aa1248abcb94c6ea418fab3a1a61f283925d11e5fd284b67f8fcdf2324b7a8fca8f4d6e5aabf49382f14ba58af771078e11b9156d18b4f4a73c1203f6517dc5294ed34b8d5b1aa0e02f82ff26405441923d120470e1cc7fa8fd881658bc44481e3cb53f30a4a0fc0dae84d8686933e3d805f936d759fb565d8f6069b976158e9a9b4f4675d0c958f55775dc6861186e7b0619e53e8ae19d283ada551c01b3743d22724b1722f79fbd9687c4a767d8b20a01999ecfcc80f0afcf23fb953290148f249eb882f907ea476f3b6c2461b8fa997fd4d6673d53473f8b264f7dc42dc526a2286065e4c37db9285b0df20e7fae6516dfd726a571f2f7fe23cc2f75d9dd202754e16987cfbf476b2cc55906b6994ed221da4a20f07693982589c3735c2386f4200b3cdda1f6010d512e344b981812a4a501c4714c6972bac852d0b8aa575ef2a650f178325266e5abb78d29394c12bd420678d240b4ad4d79b0540b108c8e22c6df84da38a300f30040b3940e4c69497a0d757525f08f592001b212fa31b4db83f311a843e062dfc552d5bc45612fc1c53dde127c260161f12d3cf3c1908b31182dd260d97913bda9156b66fa9465db0241f075b87bfee12d0258dfa4a410ac09ac6e9582e462c32e42132c8fd259ef8add97f96f663ff92c24bff1d1d00b4f37e5260476c436c336611b79634dcf343d80e51b498826c2a0f7da5471e6a109d3b18e038f974e6a1168d7ffedb3f1f88e8307315e6fdc916b05188023e84c46dc4fe4c2ab396fb825183a06d91ca9375f41168986d2ed90e511506b3d2ef7f79af2885733185f24bc37c5b0466739f9eeb5268d897411468ce2e03934f01321b0b7425cfa76b075742c3017be9e416273622cc6a8bfa30294f362d6e5b02d447829def580f01e4031a6455e37853bcc183ed9dcc4fc8a55c8bc3cee272e5611c0b0cb99edf905a7046a36c006d75e101f878ca0a3f942d6234d72eb02aa608b63452180995b19e86d0d4e16f4b9ab304fab82335eadd0ba83fe1f5079631b82c853d83d95dba7f1c632a9bd217ef10673481b8e8d93a190829c03075da8f433d45159974d8889ba06c123047279ced1c1add7f20c2814dbffda8558a8551b4294ef60a42cccf53f794dda8d8f70d03c5a81849f23a6c3faabf298a5add323721e6a1726f73dd135758c646fb41b2ae7af7114fbabb3e41ff1df4d2a1528265dc921e0021f26ec8bff7174efcf946bd5a7b62f2e6b0848b385675c27b1ba200352d72dad486c9b5896b49d94a05773f32de96005c3d4c15a7dc061e4cd530b8f27c125f2c79c63c99b101cec9f76ba143507c0cfc9958d2cdf9e87dd82545b289bb0a80bb8148cd86b021bd951f52824012a5a46768ac51fd1fd5b69f8f923d61240f995a4da2008fd2f50ce4d81fe44150c39884ceba6769555b9f6360c3c2edd5061e4a0d5a6253c0b5a22d7375def8cf6c9369c159db0e51f5b2c504a9a193d23d9d5bacb498c0f2424e0206d7358bc9cef7e6d379810fb36764d5ec356edcb9291aaae3136d937232" + }, + { + "name": "②|菠菜专线", + "key": "AppV7Xy", + "type": 3, + "jar": "./jars/492387b9-1482-4e06-9633-95dbb0f2d7eb.png", + "api": "csp_AppV7Amns", + "searchable": 1, + "quickSearch": 1, + "changeable": 0, + "ext": "e2eb5714a2413f05151fea6864509533510f79b104fb5bdb95f6904ef2318ad86ce4dfe796c4e63fd050695a813534fe77dad1fce40faec6f4c229e3a369420975823bb9d4a2544a16f87f3b85dbe0d23b12b94031672b5f7cacc8b5bda77c549d560b7ea461e1bca00d81dd68c860de33ba77ea23895efb582e98ccffee51b3296277820fd3a6fe3f65e7c0a93f7c07a4cd91d63f66cb2921cb013d0e93f0059e6f35d839b1ebb40078ed89b20115f85ff6d81d97ab99c0536638ab4454df59b59b025dbfc9c870f18d990519c2c5f2df68a619581a30f4b99be2fb23d7efde2642327a6e37ba955c985294082352c19ea83770f754a50046886aa3e388784c9538f688af27a15675e49dc788d4bd0d85becf809feb9c29c737bd3a5474c19ace10533e2e4f1e4b2d238f2544eb641c0cf63710d9b5c308c49e0c2634d655d1f25cb40920ce8d594d79a80be0f90261ea0a2152996d94407b4c5287373623ae0fe61ebfbee98cd97e3a2e797c8967bd789c2cd0876ce90ddc7fbf314c7a0b72a2d3a148895a00e08286d2856f71b1174d960b4d3227e9cd0c073c49e8cf36d5eeddd9cdf15f602e5affe008fae1ebd57bb4f0c2878d9e889619139d4273c3db6c45499d1a53f516745c02d4692ed2aa78db8a759bada10fc4beaed9171ce03ce2f567b81695c7f862dcba2804e20440ac0bc4f54b3cec65a7fce5338b8d36ee68c401f674760348ac6a6edb278ede899c673d2bfcb9bc6fc7d6e23aec4e5fabc8597438a43e04cb26bade3fe437f30e4c51d99687ec1cf3b1dc03dc994b66964c3f10bf9e1c9edb667ad01c384918a19941fbe10642277cc21974628d0a48d12562eef1d504dfd2db4904f5cdfa42f8c268c69c201e10d2addb0c9fff89d75a9cd75957096d42c265a25d8d4ac5655d63f2ad81012453d2b5c40347e728244c94d6d9c7f1a0a9dd7e1aaa03028b681fc4663df06501e5a430ca844ea8d06dcd26ca9c676d37236490aed6be73aeabd5db7ebe6335feba6dcaf9a89ba2e6395673e465b8bd262346535e8106bfdec6ca93068456fa31123b80806b41aa899801bb5acbc7b987903078fd96a70d026d076d3dc656177cec26c779e0f07c7942e8a8b2ff11881d384df6eac05e3a6f13386f7de879f65925165da9b0788e83cf1afd13b192380f80d84438c847b9010dc3948771b26d674b5146b06d618b22ebbdca99e12b6c1775442b9b3911c073f154e50563880a636bfdb8a387f6ddadfc3fd9772d7b2c2e5a29907125f09314ad2d10b66fa96dc93e9fac1afad3c1433fef8799daa595c2e8d5bcd53b3165891e79a80bba0137264bf357e62728b5501d3361c541748d1dbdd7e3320f97915a589a75f48d37dd0a908af6bcc8afc484f646fdfd5efd534c58432b046cf19572913011503bab265e667ec99703a4c3c4f57e3702737806d50720b8adb6800885fd0e66f56d93876c12f251c6a1db7a16bf9d2ca55d9799a25368b114830680fc645ec5a06d6835e83c9f8cd6610111bcf9fd501e3421054ade3378bdde9f68e90a3b30527968be7131dc947ed60ef208dee128cc1cf59384050a4e9f1c55190bce096df3170e38468dc9ceb7ed19b22e24b7f1923ba2b47e7a87dd26303ae4f6c1b0c18671723b47ed25807816861ffabcc7abfbbeeb53749cd9bd2d3070062a1223c9a0178ec04aa74e46c86cc997abfcff28a56722cb9c68c59d4704b6d55c76264f3105c642fa791d26553b8a219816d1ab730f15a99f488025624d77a3a18b7048efcf1d79496696350c5cffa58e9718b4150b3c6678646c4fb9a0409794bfed59f16de96407c50106cfa43a16f4790dd69822a01eb56b2511190a0f38e7236667b477729b937dd7cc1713273399d0baaa5589459fe31328d8c7548e32319388dc1e42cee10ee62ce8635fc7579255109cafbef3f6ff34ce3ebb3ed3aff703f8e06a60b2ccebdc290751912c6c97156a622455bebe471deb47d6d1be8c3293538d27a7e22de9da2b226a386aadafdc3a222397048982c5f2e7d2939e6828b27788c1d1b7439cf8c7ada365e25cb3b1a469e485c6d8a3a9dd04f7f5423f6713fa391543accc33f22720d2214928c0357661ac68819122bb5d0e57a142fabfe9edb82b9e55994b874a7c75573c16da78cf0500d3c72fb9acfdc070263006c25ee3817e3eb34b652b9db60311e643539d5bd60f6c1be0866f8fa6ec9ec751824758ee4d1c8c08c515b279d5021e0f9bb0a6296d5616e1fe5480433ea640d792e5cc36925166fdf81a7be0844124adf073b6f1d37961aca6136ad046a4c82a29729cdee9ae996a8195ca73b2e75ae909fe858dd783a45b0b5860af5421385d24fb35910159c6a2b7fb6f20f42d013038a9a591188c27ebe06b64f72cc6245dc31d811bb7b5629c1587090431573ef44e6694e314f3d23117374e6efa80a58d7291921b99ec217b49e6460570ff5991cc16b2e79581ac14d406a021fa7e11d71275044ececc359d6cf26c881f39837fe1bb65979662c2d2c2edbf6083db05e117f62caaecf8793c87dfc3f45c1146f1e739d78336d6c4f969843099a9bfebd394e60c062fc8b4a536ab2fc8d8242a4e7bcc637a6b565621f9d4130dbffe2bde9d5e032b73fdbb6be91c91b5035b3f2e9fd638f8bdfe73e5a653e861c4f3a8ce1a9048c6a8ce361dbd44533eb32de3fe8f582bba7a982f0472236e90286819c2ba04dab382092cdbaaa4ec92567b600bbd1210bd5b3462463402c97c1a4ab70deb639e7efd0f657d5fe60ee524df15475bddbb70c4e130ad3f7a8f9e69aee933b1e93747916bc9820c6f3daa3bc00e2a5707ea4f1facb1132d6404f5f2b588ca955d59063846e52c21537261b38ef5db85b744f31c4ab713b231ef219c3ad16a2e5cbb80a04d8701a4215ebe4379e2c482f7644127b7533fcfa87511b800361babab75c7feaebbedd6351e845e326876a033ee684bcca55e6d424aac4aa468248e7e7ceac50aaf6c61115a1c91898f9aeb3a7520" + }, + { + "name": "③|菠菜专线", + "key": "AppV7Zjdr", + "type": 3, + "jar": "./jars/492387b9-1482-4e06-9633-95dbb0f2d7eb.png", + "api": "csp_AppV7Amns", + "searchable": 1, + "quickSearch": 1, + "changeable": 0, + "ext": "8b9c5714a2413f05151fea6864509533510f64888873c9014549f490a22fcafbe95529819a25c21bad6ad07d44cd28a5a28acb9d207ef4ce35f2e61950bbb27c00c9a268ee66a11cb5943790a877b4b66015010ed7f2a3c6f35b794a29dfaf6762ace01040b2ec17d426cf9cb2a1a9d55450210a11dc1ff0584959270cf53b6d3aea808e786f3c2d18bfb68172f0abb7a06ca65937e9a325415139809f045e71a15a349ab2862e8dfe93f2cb32d1e5b7f9cb2a906741073828339df5bd0f06125ebee88a97fcf33c72e57e9b090d3766b1c513c46a06e5c6ab255725cd2c42938351ec736b5980b1a08bfac2484ffccf82a6f77a34a8a48e15ae0ea7e5b15c49bbf3e59217521e29129733f372511540c52165c8411ace8b94b928a8fc89ae86ebdb1b9d502b438adb692ef9ae36f9f577b4d57654dcdec9957b9f6d14924d329ff79d4fc21ade518d7190673dc7a64cab4d3b91a0f12134dfd8433d6cd80f725a9f4215e2289adb9b8efc835264733c12f76fa846a31b586572f81b07d3d8415c871afefbe611a28207a382af39b34dc5864a2f53daf7067dd4aa59e9a71c09fdb57f5ba249b87f90b01e55190b703d9166ffbba536924065cd8a6fce03a7bc32a4053e4e2d5aa9294229f3ade0e30cce1f1cadcc4d10d92ed58b150a7becdd0c08341868afeaf727640fb755ec84aa97c96c937f68f2463d7555dc1a95ed5fb5f4dd274e7503c85c566bdb0865d3b2213c478c6286b52e69cbe490c105dd5b54c661409f3d24eea0f4b58af17e525a2cdc94b4ab76aac54bc962a82360c3b8a9f53dd958343b25afb37dfb6dcf7dc7d37ffec1623ecceb3053515e273e242cff1d3400c8bd7246d4a91fd7698848038dc111cd6a408f4b7cf5a698bf878dbb322577e03bcfeef7c14e22db29d11d63303cc07eb677aaacda3f9ed4df232917bd5ba99192a4a917d5d11b0d226ef4ed621a84dfc2524f501bc7437c4e95af25c10ed40ec8bdd41ab6728fdf71e844825b8e74aa0ec33d778701d92d94cb96383f2cb8538285afd7fb0d0c0d1f4b6e5f4696710b8fb3fb4d9cb808e53e21216c18417378cc5d40e0a22c309a4845d5abb8cdb2da48e3e3ecefdd4226ec076756762d4eb51bd46f2db84d420e008287f0982928f185cbf76cc817936e8c43a746f392fbea550dd6330f96b9ca8a15f5eca20221a8e6f6fa475e28b6b0051c65edaa5ad44e0a944f439508cc07220eae95f36d60a884d2d58aaea5276075774b89ce0f2a6043137da669c5d35cba99be6fc740c1942280dfc36b8d4c7cac4f3fd545006b3bc4bc320e16002b59e0b94a592454991739e7832a88f76f01888b77d445e75fddcf5b758e0416eb037fb1e997bc4ddbfde6777376602af63ab66881227f434cd4f040975aee8d126c246e14c19d66c7b64e63d1422452314a67df4e29788b1adcb200d71a56d63b5b77c8ff152d7c3ea96e290a3b6aadaebb9c6aea679ad93ae3734f180a3624e54361ae64845b39e69907626b1465ad50ff1c5dfe079bb72782770e1620b0340d355b421002e382c9fd852af284f3fa467c0bdb4e6918e7608299bb6ced4a3fe688ca1516b839d36993aaae3a3fc857519cc2aa19314180c3a5fea7c99b85d1bb2ac6b383a8da097c499aadba856c4b1a66cb4aa0a4910e74b87e2f4122d7909927660657e0d7df54a7638860dc142e5e3dccabdba1c8b9e5a85c0a608ee6b4775a5a03b5341150e318f136d2e38f40d96f3496f5fd10272ff9dc1bb8ff9f71c51c81dc08bb603cc09649a3019aec63bddbe1d04de9728da38a7a719913ab0b0a2d244695b21faf9875fb4ea8adda58d1acdead943ab83b50b6bcc9a87d92ef9e477fe944e0c180eb7bbc7173f61ad1cbb7a571616cba5d9406a87f22cebcf3f5a26ca78b31a7a3b7433228739495de6a094fd56d77f81532e2133261c5c3a7d5663cc95ea3393ba06096d435f411890c65ce222176f9b3688157347b673865472c8473b2cc56f1ee1bb0d7d720a71a1486d8451f33f7f33d392cd16f4dcc4f813c4624d170c7be56e7ed50af2d0a2e20600bfd3ad5cbb7a5b0bc6962cedb46096fbeb709e217b70d2f7c89d6c24e870c9fe2a9dc01dd778deffe1fa09e26a4554e3951adb4c201d9d67f67b1ccccb9d0cc381f050a7d0569f8f6bf52a2693b8e2724d0655e8668809c4724d422e73d38c1bfe7f33c4280fb69a428dab2e88abc4a3828dbab42aeb8bb8d3413b8ba625d2556142514fd1231e215141de329a51db57590e576c83e60e8c4d3f5a7391539c3816d62ae90963bb91beb8b180c36aea3562471dcb68a91dce2d09f6ba2235f7e4e340991cb6f964c002ac298659c79f915eceacd345ada76932ad4802d74ddec9babf2e46ae2a5102958b654f5b21d4ff7b68b09cc0759e7ac975df9324db45ae8e713d125020bdff208c0f08a2f46acd49da6144cf96e8b6861e9cd2cd5eb319362e99dce9602f6dd3dc218161e0c6dc63493929c095a265505a58c16305d7dee8956f2af7cce4f21567f6dd0274f77db1515c09de70e0591ec1c71a0e3473d8ca23b0dbe3c95ec93c3054a0c21d0a4cc128fcb74bdb6381c5bd08a54a647df1af55b6b7965ef73c53de214d3ee589791b40158869e2cd1dfb36195356dde2f960c9efb4a87824e6ab1d132b8356e1177871dc33b1c7c7316e263960b11b35a910d1ea9caf667e29ba5d3baea33af6a7c719b138c0143245bfa3aff901679e1db43a7bcd278ee684bd5062852b7175677689a30119029491a5d7077c0f6c6cc7776aba551e065db784fb5bc00d67bd3084bf68e9cc06b281e05c5884e8f8977b388d8db439e7c5bc2c3a73cd8af002c845215fa3af57770de0cf0a651c7a3985af5bb3f18211696f94937ce836f8ea42d701be2bf0d04c41ffd5bb1d99783ce591546f2698423800fad6a0d344262d8d09c206470b56fb3431d28771f1159074f75e1e7" + }, + { + "name": "④|菠菜专线", + "key": "AppV7Xyz", + "type": 3, + "jar": "./jars/492387b9-1482-4e06-9633-95dbb0f2d7eb.png", + "api": "csp_AppV7Amns", + "searchable": 1, + "quickSearch": 1, + "changeable": 0, + "ext": "3b135714a2413f05151fea6864509533510f64888873c9014549547c4b35cb1adeee20e0d57ba3751a77a841c05ab07707cfd47e5ce58300c4d76a63b36769f5ca194cdd372e6467113c881d77e743db16d7abe2ebd99e610047bc3a54b53b4f7bede852c8e349a047965ceded596e9c7cdb344a399e97218a77fdb81e930db1d2f09f2d4c2be1d6c471c80699fc615e8ec072aba54e4f79e9c56aeaa4461e497c6c381b699686935bb9dddf708e9d482bfc16e5aeae6235094fb4d8fa6741ca8318b2520013ff54ab8cb1203d078e4b8dc78abd041b48191ec6893734015fd08d2f4ebc76193de569e55f74a5397c5ea4213b9345bd027ac2986c63ce65636cd7f91f9d30d1ad37b9b4d6de92d545a1545924904a7a4c1b06d181b5dda5f13df8fd20d812125da97f030cf56d088e4ba52a074f50fabccfade34dc57f3c03ca2dc2231bca5a56800380d95dfa36f2cd731c7bd3c7cb97c8d3a027226b7841694066964d2811f51dcdcf51b44eec61fe79b3f778f338ac061b89290367806e3639e3e632c4422005eef3805f21c7c6eb2252646bdbd5fd668956526496a4927b626c15bd74d80fc0a58dd2647e719a0a8d21fd207b69b1c775523b08c70a3dee2aea405c877b5ce2c0674d0dc01bd6aa625299dd224946523dadeff0bc11857a9a979b6565b8ecf701e0bfa96ee984b04078080dd7d53f7fa0229f754d9b78ed48273863a6607bedc04fe48a7228d2a8a0c2c9fd06ba62744aa72542e8880e2b786bd00427d86827d1f075139a5d2e7f9067a5fa6e6972b419c9e2b81cda8ea188b786a63537414ace9159cdf2c0274643b0f560fcd0d528e802d16f2e9f16ea92569126ecc10dc9231c44d689bce4568300845e9232b3e68fc00985f86feaa70f1e72babc1f3e87848639935222bbcd3bdd34b30e5ae6e4f73c984fd222e3be4801099d57cc07289229665a18cc26c7d39e348ae8d7f667c2b6ce0d6fbe79557304c9a7dba512a888504bacb5e04438b2abb8433788567ac2781ec50192cfb98fb17f1b8a9a8d934316c9df70669b3087e9308809e3217ca885ab59d204875856bf085522982e2759df9c7d5e02d7d0b4427be9ce8c5dbb70ea28c979d9588b46a1c784590df6b43f6366d8ca751bb93f9cf2404fbc7c569bd7e1d82060a2e6e71a1254e0de46eae0edb7aaec777b67e745da3f743e6c5f9be0c70daac6cf191c1f32fa36f6b15653b63dfbb5609373a9ac77cae2d8d6407b8b8436f5109f63401fb292efe6310e2cdd3c7884dcc0ebf8633ff3c4348be910097ba9868ad7d8ccf17f7826b831cee3f4ff29a477dbaad861df953f6149b95927d52f95423fb74721ad712310bd9785d0138e2a91e6d61e0fda5737c71d910d0fdb2c1474c3bad1aea8d1ef29da7377fbb5eaeed74760a8631dad8cd515db4bc7437d4eba346cba5cca67c41d76c48590b3609dfd6cdd15b7af01b9392c95b5a287b7c5e4d47bf77ab80922b9f2d77b3d4eeed6b3cccb7e73276a35fe3a55430fb23a8ee5135175c29a8d72ee12eb878fdbfe8e7211e3bf23887e76ded8cbd6373d6114dc6e97c397dbc771f07324d7106bd3cf351962ea4d7c6b742954529b571b040f1c482b80b8c64e678e86528d664deceee1835225f210a6c5320bd30b0f12fc3e1f60d68d57d3e4dddb0e4b568011767cef2405cb2067e80c434798cc99ec33ab87784f95d88466cd7c4460119639591aeb0c6371921104d9134d1b86c064ea7eb99a7bc0f0c08698a269451420afe30b2c12620a96ab233ba78140250a5264948297a22f4cd2a67e513f6cd050e922c474513a498fb4f8ac190839688b0bc617145de9925789edb59ea8d78327853e845aee4f4e17a318b9176d5fdb7876a3bdaebca6278a1a378345dfb1e9ccb30061d09d933d9a518cc0544fb9daf6e7b24674412881d6433e24783aef0899542c9eb5c1b0c126284b1184ff67dfb7e7d001742176f993c326cb8370ac0959e220e4dfde1125faf8e384b499c98c5751c45a1b05f00f488c0d80e26bad47f93ed36f0f4ea3980923711bbc221de4848b17a7a61370398b03b6bcdf306e707b66bad4d4e70e46561b67f3ce787700687ec9023daa3fc0f87e59e2463f275796391b5f8be8cd5e9892d400032f3f8a97212a13f411d20e272dc1f9489e51b5546b93b238dcf3bf4b5ce7e54e4e3bca9884eea448e604b5343700c7e26b45ee2b46ccf23799e9da41bc81c8ade10c44685865d42accc3838fa4d1efe912e2a9f55776bd39d410ece3efa3eb160db8f83cfd70ede9f1bd680569e33c980e8963fde04a8094bff579dd326ab4f6d9e2b2fad0b4e68fee3c7a657558826463a747b8d8e54ead6c9cdebf30b28b134d7982a0072653937674f8db9ace504b98712f835c0dda1df82d90673f73fed71ffab1235f7fd6a45ce932c439018184c5b0e774259892ba6486735ada3f7e3f2a3589a18f9520380af129620fdd4fd5cfb3a97467f24d6b94126cb3b58207c5b724696b98d53f7e4af1e93b107484637b67efcdd49ed0f4413ae88571e863e1bb455e882ca83e1ea6a4d1d1f9e9be87a714b6cc7498303099b3a1adced48933519035f287764efbbc679acfe28958aaead545a0759127663be5b72ac8ff0d837fb7faa425c960577df76f6b18dd929cedf58088323be69f4659eea38dff065a08f1376c9e5708356a2dbafaa8515f938d1bcca9d8c7e79ea0d45476fdda42bd4230c117597dad47270cd6385636ac01f516abcad464839b669e3dd58b75352689c32e337d692c204b683a8dc4467f59f8bfca49044e3f504dd9dc1f3c13b7f89ae9f05a94b466b8742e372cb7b27e4f17eaa2d21114216611805598514cb74e487187e1876e6ef7db039b369786d8652126f02c8644c15bd8eb201b6230bdf61c335f11d93574184052f55d74809a5ba0dec468c6e4cb1bb56caa25e7381dc257f30f69b8590a3d02938d99c164068c10eadf100354a17eb1ee1796b3a185140e591bd181ae6438e9dd0ee69fe733767befaa53ca" + }, + { + "name": "⑤|菠菜专线", + "key": "AppV7Xnm", + "type": 3, + "jar": "./jars/492387b9-1482-4e06-9633-95dbb0f2d7eb.png", + "api": "csp_AppV7Amns", + "searchable": 1, + "quickSearch": 1, + "changeable": 0, + "ext": "17c35714a2413f05151fea6864509533510f6449cf8bc0a05849f4d35953003381580addaf483d2692280dcd4fabaa34afe27792df556dbd796c3f09ec10ffc784d4c30c01ec2c6ef2b0176ea5416f5ea6edee3ad672713c6932565fe8467d17764cf4d178d9088844164cef2d90657d886165707c468e0266f26daa5cdb16d2e6724f174a6bd9d1245d4397c733fa8d747bc75518dc1df1f88364c94015204e1efea6e87c2e9bb20076a529a6b6211f0670a018afcf9ec98dc1c36e8c4d7ded47a14794580c002ab99431b1cd5bf836c9e66f4a720865fef703728822fe146adf5791064234da72d951a90137c7c6aa3f7c628cead57835692d7ee1db04674c15865cf45395c7983e4304af96925e63b2df935410c25891f65bb2f03c41a5e66724b50a6851d5d3e6f4953c65895ebb7a9572c86aa782aadaf848479263881af4dc84446811ded13d22adcb877c12db769209663b2071f7314b3cc17fdf8fc0e695e1c8174a981b966fe8ab76e7439a1e7620b22d09107ac200f25aa7e79b2019fe08b4f3099892c48f33d2526bf997f36465739ef204311f912a49d20dbd65d9ef9f256b70a39ca4921955b91fd8b357aef8818ab25b19a665fd59a82f420abc55cbcdfadfd032b2b417f6130b581be6a257ae8cabdc0183203fcb5fbbb9271fa6bd13070cd6d03d02c37e9ebba4b43add0a0cf8ce5ed98bdec21431f8d45896f0ddc79224448a03b7bdeb2ea962a4ff4d8474151cc8a110d02b698c4ca67e38cde2902f58b89d26e43df10c452f1f84e9504672c0fde52f753d030f1dc6c206a63d9990a2d4d87cfd008cd0b32cfd9a67e5c2624828dd8e9629e3e346c5e0b1344d57a148bedfc526e52084d3c7d27db5160c18e319599e39def5bcd16d0db695dba773303be7e92daeab0e4df02ea76ae698c00d7096138661c2f7e671169d36ef68cbe5ebd49eaea0a8f6be847229bdd8b5ae8f8088754c549ef8061d697a05c94daa1f008a7e853c5ba1b86a078b68c6345b5c5010c61e1c255352fd7fe13c705a2879b91fd4e95eedac375b19eee43588c98bdf03e3dd6c21d5e499c1ed7b96467f0fa01d13402339658948d97eb5d5943fe7799facdbe2d098039de207ff4815a12699f9e28c9a5fdabd04da1dcf2c0b7229d422ff3c5e47117a0412136055768e62e1fe61bcdefe560ab8ef17d62b922929d422c05671a2c444e51cf6742d634dd3ed96e5cd9ae7eeb7691daecc4caf6ee9db01845699f49d8b18c9e5fc9e65833bbcdefb0ca2203d8fe614cd80d3b66bc938df34edc82c35e0b985eb75af92f97fba35587990bcacc09f52c30824e8ee51c7637f6bbe9bf989eebd08282e3bec7f5aeb20ba5f97b17f725ec3c8aca1a56f12fa9a97634892642b0d9c57e968ab81e5be6adc5c8fe8b749fbe0c47369d48a36b47252f192c10547f2f17aee716b119578f24aaac94fe3695dc607192f14da40b2d976171ef1e619f2e7bc40d4776f9c1b0e993af9540c75a659f90d4cf7506fff124f74a87cd9cea16f0b322025187e2d794323d9298688eb80a6f839542491c8764a74a21c531ec9ae1c2ca1dd9d082b32dc341822b1639dbbc30c0df2b902187e2d7f4ba80786e3515e14df90ba52e8aad4b120e5566d859bc133303d412d5d65b4cdedbc0f280f3e8c6440ff69a45e54564badb5a1ab0fec0499759d156df731cc62c258b2d33aa05429012159e015ad8d520c2070b34eeea5780bf9f163bedac0435c32e05388ecb45d5fe827c3f1ca316df1931bf6ef7995518468a1814bc69e095f47b2d3fa6aa47d01dfdc066af04a428e9074b17788c75146595af0c66dea0e076ff93495e31af24a2176790d74fb36da28c926c69340b97b564487c2eefaa6384c147f950be725b8be6163ec1f1fca3de3c09f1363db748b695fe6a6b1bc6fc9029c56904ce9c0843751d57359f9550d80dc20fc7a9d2c91485b667e021059ff9b4de61e1e266fc130d66fe562841b6d5bcc8650a34401e4a30ee82761f205e41e7d62b632856398b8a84a83645c2a5bfad71da3e2a297d447c3b7affa9d8ad7199b78f729cdfccb7110975a54b737303d71313e1217c3fcacb94170aa4299d7b90e08109ccf5cbfd43a1a090ea11596caf30b00c5e1d55c7a47e7c6ab05d36c56724128d7d6da67a35ff6f75fdf1caf8e7d94d0dbe9afa10e42a74d7caacfcdba31e93ea25ceceb3e978798235ca1a88e52d7ea3addb4da026509dbada51047f06e64ac3005d32643b43266397d6ef3f3d607badf007951f7ef820866ca4424537223f7a9f3dea734ce686459d69127fb399aabfaa3953dbed756732a33bd3b4c958f6139ede030ede153c0055622b8937cbc2d6a74bdd9ea5990e279ea862c0efd3216dcb13fc3995c208da50c02567fe7a1f6bf6bc6fee3eea2e61089a238b4c6f59c0e9fe44aca5cf6562ce2f78830a9acd4337cded587aafc0f04e66d01918cf8ff4a46d18c3aaff494e62c0e770342d5d0931e01c6092514fad0f8e6b2bbcff89d6404095d2971993b1afe56ceca93451b2e3dfe19ba374bdb2b4d7a69161b26141ba84856a72802a0671d442c4502ad5566d553665682df212174b71828401f093322f81129b9118b661a845c00ace4548508440e2fa1e3ce76f58fd537807716dd6fceed1e6d1c8b3b8491a6edfe02016d137b89c2ac3c57bdbd4e9c1f9d10c8c4b7a5300b0dffffc288da07a0e0c368a90b5a8d486251521c075b47a75025b631caa2aaf3c027c65bc0534e807a1c81db29c696a92f139014115985a027a1a56703a9b35dabac7f5280f1a26cc7ff8fb6cbf2da00024fd9947e9835563203916c2d8e4d80bbf2764fe11d743d2e1adb5c6f260ad9b3fba7172f36a09b4d600e1c014b57a7c94841d4a9d61ee2787c5fe362df95c9edc4a8f2a46f8b81ebd4fa300ab4320593ed77111eec22233099136cd36a890864eb0ffc1d1ae565589f2120cc1a56" + }, + { + "name": "⑥|菠菜专线", + "key": "AppV7Mtq", + "type": 3, + "jar": "./jars/492387b9-1482-4e06-9633-95dbb0f2d7eb.png", + "api": "csp_AppV7Amns", + "searchable": 1, + "quickSearch": 1, + "changeable": 0, + "ext": "0bdc5714a2413f05151fea6864509533510f64888873c901454934c8d9638163778263f853aba9164d000aed532c7a1eec0a5c6f7e29eced6faa070647ddb8df85b03f7bebc9c8f27f012130dc52cd2a301b2473bd8fd8290767c0adc603e52458094cbe53749bfa82ee550cc1d4dd8a3e932ba96529a966e28263eb44dcf6de6542495781a21268f9d2b48189fa21668fa06e28d6354a7808e63060f3075d539dd983c479773b6e1298d4a7ae77341e86a18dff451b8e692292e91391cacebb7262f04800545d889ea6b5e1752ffacc96c034aa840be50ee3dd24c0e26f2cafa7b2204187fad47877c5bac9aae14784db6c1d2fde2d74b4197097343540480a1b7fb88bd2fd696c90a8150ed93e51e277d40a6f3bc957b8f97a6020d50447eaa8734fd7170c96909ef13fd169ae02608f475bc4e14fc829e063fc384d9cf026da90a2b0bb0920ae88917b982f6fdcb018af96ff24de7edff4a47023d6cc7697c3f6a72a85ba33a682e9000fd87a139ad38953c4bf977df79001bb7b4e135fd02b8cba4981da6d6d19594cb595b342e0014e2128d48b3677a862bd53507a0babe91d139471d81060d76e70185fabe3f6c167e5a3ab7174ddcbf8a6b8235f9e61d7eede25ae3fbb14ce48a9a0cb9a1f3848d96bf1ccb2a2e5f725f6902180cd62e2738eaf1dabf4d4635c8426030c18634a6fe662b3b1fb478378c0cf976aec1fbefb9e052af7c99b66233010b921fb37524e64ebc47229ddacfdc676ad06fd3e7fab081fa048754eb6726f3b236e5ae161b475f083f219197c6bc094417a22b5aad52381178d0602d508cb85c9bbcc8a9ce74fe40c7d4a31494894ec9e4dc020bfd5a18838d74580dc89b2ca67a9c2b2f9856971bb77eb6d6a932302e83189215f88fa6bac8105c0e56c70baec387a1eab251dae2ce8e26e48e7c774335880b852c8fb6bcbdb903af095f3e2f33e9aab00589c97bff103d8750cfb59b06f0431d991a1738bdbce33d9a7bf0162c79f6928f22df1033c71fe12c802262da0f18484b61fde180c4060b1346732db33d168c7469bd51f5b301ee63c5effc6ac1c91037e30403fb7b1741040831ee2f9c2f2a14b1c6d3e274bf2d7b6479c992d2c15b31b11beb65ee0566d43ab6125c65f7aa78a748ac8d295a059c8a470ed6f0c29badb44be951a98bb2a7a46ed6e061760273ce7da42dcf6ac8fdfc2cc98cb3016756a7678cc5cf8df3ddd1176c6bceaf7b9044464565c864b1c49123e8c03a75e9d59aad13156754673e27d716388667f4a91ab2174e061fed1e1c7ec7ef971cc24ec7d382459564893516b1077f1a1d4d3c04c8767e6f9e559f106a4864aa004bbba00567f31e1765796db9da8410ffb61fcb839d4b5a1ad9aa1cf6f2bc18dc2839802dcaf677c8d443988bfd414765ccc01014479e9dce39801f192419475eeca596a01875a98b9203ae801d8951f034c50796b95346b9635325fbde60e88e1ca395636e381b03fd7ce3ab916aa8ab361d533881fe5bb8f148f62e05df591a1a933b7514252f57cef750f7583f3ab55039671c8a018305cfefb503e13d297b832cbdb6785bc12885ee1152e6388a8943cfcf8dbe2f0a36d4811da57ef4f7eec6724f76ac5c4c811d5e75d2f26e8aa0d4c51e1da085b70b6b8c5c34c3279ece72f8be4306df7eb9d261a0a6f5e65b30c8c88b318f8178dcb56d06943a7f0d1401c495256c7639b5b2c9d94be75669bf019b16f891fe581e2b9a26fc159bb14ca64e49d674db311e041b6be8bef7ed2308f2747a76b81f7649ff966600e9b50eb929161b81c3461470cc13bb9f5b7ea37b04c22eace4c880986d82ceb9c4a7e6d3805b3b2fb2103c29bee588f48cd3f44033988df68811fb1584f34a05dd36d4d364ccc662dd8889b8626a589512a1242cd0039f38db3a22e674cf2f0a330a99f8bd7b9320daab41473bc7e7bded3e5ee022ee8799374737641e8eef05b9495e1674569fb1ccd48cbfd0cec0bc01bd5d01478e8dba198d6e0997f16a6bc91cff8f053537624177de53f23e7888a7c72e4dac7510cf86f4cfbdadfec9342d4756d78e2df4d07f353434c9eda7f9cbd8ad315561ba76b00a5cccd01b11a317fa19e6c232d22ec01174916f8b6abd5b449e3b72b3e4938bf1cb32f153c089064e947bc3d76c04f2c3a259991d97d044cceb1b7e44f2f5d1dae2c02912ac9bad1ada7a9fc20b8be274381864f446cfc174fb86012a118bad1d7ca366c78422a3f8aa12fe2804dc2e43146f5ca5cf7f30077249288b478f6f93a3f883f3de3bb6f624e7e0313be7bf1c931b9536110805a0ec35d0f9c77db95fd07668a2ce3850d7e0f5ea7473c64b113c85c16699bc9b2e3ac3ada4a847fe7fc25c758b438ac71c102bedda47065b75263f2925997a79647fbd96966f22386df2247c9e4daf80f688f4c41d324eb411d4bed6bce872fb0c913e5acb8219bd31df9b1c2036474fe7274192637226ef9f4d45de1b54938ef240484c62c6bb477337ebffba6705332a1469410ab71c4ba0cc83b5c4c4ce0f7abedf8e36dd1e1b07bd7eb9b2a0309dd38f7a7bac04c40ac5260af4bea6ba33e34060bf90e4d585d061ae6c2abfbde6d84e02a659524ab9ea83d3865ed49020cb5f4d9dfd45cf950cf6b5f265fbfde250b29fa721596fa495728b9152398328ea8d51dd88a5f1222cba397d82c68ed1165968d0eb3f3b3687c4f56e0f52063e98a106bbdf0ba2d1ece41034ebad3599337ae7083193f8b021f2b38829bfd96fce22f8a5f028f88ab84a2f09daa53e9e9b42717090a352db954a1a7b4bd6b3ea70b01ece4cf7574c6b8ad57d023c0c1c4b5465ce73fb93e165702354409b74bebeccffe2327d02047a74c1bce64c17f99b645f3b23d7b2618def989e99866bcde48f8581121289c6db4467bd50b5f28fff1be72cdbcf3939aad7f986f90c47130f9aea1eb30a8ec30d12869d5a1f0dd8295a009c99c8f991b9e9bc6a8c0265be584e8a2c2d3de413d4c5bfb1d3400e908072a226450fe3cf1510a4e3fad4380b4893167bb36c8a87613f8b262f5dada43df810e06a94ba220" + }, + { + "name": "⑦|菠菜专线", + "key": "AppV7Llq", + "type": 3, + "jar": "./jars/492387b9-1482-4e06-9633-95dbb0f2d7eb.png", + "api": "csp_AppV7Amns", + "searchable": 1, + "quickSearch": 1, + "changeable": 0, + "ext": "55035714a2413f05151fea6864509533510fc41478de7616064e34cb984b3dd50508d4850f8c0500d64fe9697c462d7c90a08f15f156c7a1d176bdb3bb463e6d80d064c2512b04a421fc3ef8cb9465bce042c1fe2cffd9aad1399ed6d7aa32aee9dc83c7d13a642438e576f0cb729148ce29a0bba6b104b35170ff79f406a825ff534b579fa411821b3ea7c2e9f9c4f2a2052244bd4d27922dedb0b05c7d8a1bf77d361a226ed9badfefd87e3ce90cba7afb4f6d1d7dd480b6e2e7f21dbbbc45f352296166efccb3e8aa7898aa777b46cba677495204e62ee1c54a87019a98fbd116a90961185583fb9531f2b517b0f47a145d73339adf21e77c589d621705109c7736c1f16942e8487945978f75faf7401dbb596f21341c9c3ed85571f892401320ef2b8c05158adbc91a77fd60f4ee1af9ed611da3c1a89a003921ceecf785a5b23f1b8144788524244daff436f996ddff76d129de38de4e701ddd027424153ce446bc9ee50b28d8668765bdc15fba5898ace08d8b1610bddbca170992f884e65a347b8b5dbe7ed8504ceed3ba04a15f787e516ffeda81d5195a67369978ae8f56b3b23db0d192a3d2f120c3b52b47e34a3bb24c3b9220a784c1f61b33c35a9696b931a3a8b4febfabb62a83933fc7f5042332bdf17bd58d177ae3feaf7c15fd3cd68cfa81050a9488daa793b4e96d6f93eb6314436d5f46f005a6c3a439555b69d0e7d65cb6defe748fe54de384d235f42f89a8d900382833177cd40d08b1e9b3ffa9f65ed87bd1678d9f29893e476d7a68333b688c6b8a41bbd379f71b29b75d6ab9b427240dd64884265dade955667a6869d6ccbecff605fbf9db6544b0d14ecaed34161d6b7782d104dfbcaa95bb033951b71650fa182f200228ff922299d6f9718442fd9fbcf2b708000cf8cf9bbfd6365dfada692813390349db8fc363ea604202129d9125db7298309085d2fb2dc6f685aa6434084f342ad3adb2e6ef3375989abdeaf7479e5a55a29ea6d4fb6225d07f4107307fcb21807f170510db378f0cc21d7e2d701c8486e93f5b230f196188cacbb7445b70f5b384ea3acfa3fca612294f57488dc914d7ef7efc8efea54dad0cfb7c3fca195abf1db3537019c67bdb5aacb43c5040e1029ffb4cb97fb5ef03d72bf447a3c30907ef49fe670189a4aad38230645940048e921cd0128d89b25a72e802584550f1f29eca9658fe9b62fbb6a6ebd71dbf5e155f0b2ec5133785dde0985e5be49c0cdd597dacbfc92e4e7f066b5c83e5cad4fc6e2ffa4dcee14f8fdf6d6b7f88e0a792ffaf3c153dea5e7fe666e11e8d4f6a11b7793ca7810704a4c532f3e5f01afa796b61a3a44f203722830255c09b2948af7470b2560450232ad6552fdc4cc709660b13bda5e93595ee7556df3239bc7d79c6b2e90f66ba6e2bd60a307ec9a1c5f6439535f6274a8cafb666390c6eddf162ddd43dbd2113dbdd2ac7dd61e91ddc0d307ec22298cf225a21792426cff1150e9f9568bf02f9aea0aed1954a1c8e42bd441286021b879b0d48335b494e014b0d404595524def768868a77b15fbba2849afafbcc703280e77a3a7b3fc02366f13f7a001a002702770f5ef5cd34bf105c6377884221967353845ebebd53da25f2f268e1e5bac637d5357a4c3ca8dbe886f6c1e807ae252339ad09a506a7a5b0c35242e1ba3dfffee39567ccaa9f8fbe8d3d94dc0627a0589ed3477f9dddc496ad349a50983db7f1ea504028508dec02963b3e6b9e591d0816feea133eea1b2d75ea061d911eb0379c9808abec76c8d2b2396c2b5067523d7ac74b0cbd9de6725daa9d73dfdd7a6ad60f3afc42aeac56483804227767fe2ff514aebccd183c7b9c1e917cf11adadf0d868e1fb676114134647bb59715760155ce8806d0d4ed9dc9fc973db4ba4a3d7369b15ed073dad6d89c024212e01e7bf4960515fc31e41e9a3f3967d1d4eb7b5785d1cee85ed9c84ee247e424ade993a81b100156052b938da4a64597a5230454cd00a48b379757f09073b6476394aab0bc99a0e812364657223f081d034d28937fdef3c35e1ba0e5dca8555b271224d3546cb68e59f2f8624bb211b5b8cbfd8b4e3f6e3e4b8856bab43b51ab36f8343dcd17a7c4ff66b4e2de6b60340443105ecc6aa84ea90d82440f1b0b93dc018127ee6a053e8e81503f6ed1978bda2ecb602507ce925a7a56f4b8ae573ec88d89ccc6f976dc4a4927393917b72a481c60bcec08c3e3d8a61fdb99da39b998459d4ac7dd12fefc02e8e7d3e691ab9bf0c44e563a17916e3647de15b93f73c38cb42f41e950d2938bc7e934f623365c760e7e04d833f3f47267f4947557df5e7927b58c2a292186c1cca67e476b2b6a103a3a023a7e38c74942c6bd6e2b9fd31e25fd711b3d1935db918b5aba1691f04f83809af56af471b4e9a975935c9816baba6d237d7a6fdffedf8c2f196a514e5c2d15e32a0a12e68ec6e4b4fdd38f70fbe46fe5ef37385c3a81d55df923ffd77d4d3d6a158e68ef5bd6e691634e11e7e634fff9d646184037745ecee973fe5b7c40945797f349ecdd7816e0cfc5cab3142312005d4ed5d8d102358c17c9268c8e0d5367b47a7ee7a35ff71b3a8bb7de11c529c3ad08fb88268e8c94825ba953ddbb4e38613c7c0cbfe26a23b61093342400a9ff9a953e2c2500bb56bc806811d6fc0361d63a96fa005fbf9c5cc10e832e58546a166014a76bac02483dc48e3baadb843f98ebfc54d862b8b3a39ec7ffabd6679cdfb6ae4dff075b8d4743184155061b04e3c0cb3384b1406afb1192962acbeb133966f87a3aae0e02ea96c5ca68df4fac42b543a8080698920202135a07bb8b2d3856fcf9e310dd7c95b568235daaa6196f5199b16ef08ff660027ac8a4fd404c79c6ec4c4260f75831d36bc1a4f42cc4addb827a8657708c74ce67ce095e2f2bd49bebdaa35c55e1a8567062ebb76eac4cdb8a5ef85ab9177577feda7fa05" + }, + { + "name": "⑧|菠菜专线", + "key": "AppV7Xsz", + "type": 3, + "jar": "./jars/492387b9-1482-4e06-9633-95dbb0f2d7eb.png", + "api": "csp_AppV7Amns", + "searchable": 1, + "quickSearch": 1, + "changeable": 0, + "ext": "931c5714a2413f05151fea6864509533510f6449cf8bc0a05849f4d35953df98eeb5c544c2ddeffc0a79e7a8eb3f1ce2799c2a2936200bf1f21d11448fe499fb09214dbd33ae7465d1548bfd937bb2d5d5bfb8000f3d0ad34e8ee3d137e1b19ea5b2bda8953ca41d96700897302e1c622935df3f93eb01533c2d38400f75c939c1cedaa59b659a7917f718ecf659adf7c1e9951f51e3836307c7828d99c4d6b9e9fc45de92c3c5783a7c2d1140ace1b7fa431ccd202914fa8f3f7de13b3f6bcf84d61cbd33ef32a6812627d3a91e18dbfbcd524fb951c7437c75e07a9645467002691837c584686c19e1b809dd81a76aa94c9c5f509c5e72c1181c27eca679359a717798d94315e20819c3eb350816c21438a580c014aded30b2ce0dd22ac27ada594cbd148cb0f4ea75c6c627e723e49989124f328035b7ce7e20e3443ac3bab11bd2c6b189cf9365853c9baa361178c97e6073dd526d5ddbb690aec3457e6c7883e4f2dee3eb96c5098c8412ec04827bf36e31946a89c3b6439b0ccaabf2a50721f673ce85e7dd03586cd2524bb5d53c15fbd9c1acdaea59c961a044da6ead270a34c2ef808f99049894844f0bb6f53f75bde3acb1213c00f1c5f65bbb9440bd5b5254c7dcf016d428e6e0eb5ece33a9ebb0e0a358ae652094a99979f972b447416bf8be29644655b675b075476f3d8981f4fbc673a9c7cd7755a6c384f53c01fe5dddcf1b7eedca0e4c97699125fc4010d9753b47a7ccd39eaad900139f22e1b2e5aad66419a3c74e4a2d65669452cb00e3b8862cd4e08f97eb13874285e109a1c724e5a7d353ac8d3cb98c53afad60f44d8fa9f10378e8627d69940ce8bf48817b9910121ee1e8756fb1b63f9a73a72ae86133004d93f53a3861b45067ec32e5c56465ee92b8ca6950ec7666d9cb15b87630739fbecf2eadf0b17bd6955a364b8bedd57c7a6d3ac293c6c993866868f5cfd7012489c9f342f3320b129f79d891bb8b97c2cfb90a1769f156a48bb0f763c09ec82b349c76cacc550f9d305793584a54c77dba35779cfac0d19cc82b8fa9d8d7caebbc0f3ef2effb46bcfa1dbedabc71c55db53ef78c327afe56579abcc3d15e9252c7684a081cfd65362314338b840c2a5175ee0a97711a426a3afd373c2011598415baf89de4b87c171df06f4b8bec7511b734195801d44703174003f8164c709edd02bc05314a48d4d7605fc0bbf05b2be2f641b8fea316e223be21dd69b3e5efdc81b33c804c487ba2fe5121f8aad6c50d492efd562d849ca70c4cf1d77c3349e764c998aa19d025ab671780812ee62679e7621b0a4f584cb616cbde8a7f5cbbfa2521f4cf2dabe9d4ba728d8406aa4177c51b3ff0aab4feac2f27dab498a00f86a2cfa10f070f1c1ecb6e6b908e6faf0aa968fc6070853b3aa53995c97d56baa20c4530f7f8de4c2674e1724d776b11b57cb87365fab5c025fea0add856af31b2ac724bb132abb1b3e6aadb84a67beed298a36c6e3965c9e82f0a6fe0f8438455f291d9c23673788c237fcd7a63e30100428d494a0d9f7adcf1d780098f489df6ee8fd78b553260039083f9a86ba666bb3c10fff86bbb5f58c11698ec39ddf439d5ac22b59878d6b07e7a0dcaa53eef6c652f5a024e208e283dc801db3fdeaba4ad997795371535c9e30fa7dd654d6d1a2878c59306b8d7c788fc02e36275606c56a34452c6b76eaae590198ce73d5635cedeeffec14805b534a7a2f7005a3d6c55bdc2437d16b2f3e60769381bea415d235ad871d289bcc9895e10fba3cc93df816d0d5c3fad09fe3ea21df2ca32181ec3bbb23f9948c5e58c93e810cf0a24f3461df06fa904fcf4dc063e76da2fb7f13c90efd865fd7f7226efcbca36ddeb62f4ba3bdecf02f3316ca054ea2bac09de1b76fa4056e257ee4d84892a4b518235dc6e93ab5169796296ac5a94ae9b43176a323a4ef55362513812903193a877aaad52a76f008744a006b53af893b921c45a5598da650583a74e8c277d1339e779d52deb67ca19dd6e0cd6af47740df3a99f8610eb4357ecea174cae38139992dde3114613642ba1b9e51166757aad8185b8ca0e6c904f6d9ad1560e5c2415e2fb67024f13dc1ad4d7dace0fea4bea419f19ec4ceae1f47e5c41435119ef0c430d3b8a61ff9b011c268e8d5689672daecab1c726a540d8333ba43f1a825c90b40138eafd2688229e30b4879824f8f5fe34e4c8c7f302d95ccea862f22e53527b725e1e4f942cd5e479352203e953c99b889bbc2daeaa0e839dd35ef1adc1fff83a1f64cb045cc9856f35c1f1a71028f653624f9eb42a46434fbb015962ea64a0d9e258296040475b5eebb0fc285921d8881b4c7f504ed95bb84d2e32bf0259c3ddc10b717780d9e339ed2f6a0f77cbdc30ce5eb97891674e4e3ba88354ecabd7b52481c1c3168fabd2f9ca510b3e2e6f1c01f60d6cd1e918307c52b695f68bd598294889ecfbe590154814a7e8a95e6d624cf6f498ffedffcc688ac78b5d52bbfce79780e11267187ed7a55c8aed9544172a38234fcdb0e0c32a0aef2e69bed1ffe7d218badada43658c6e2d585487a45140b5326e716646b08cfce2b5c221c61db85ab1452474a0fb9eccee20a07559c070f9f3554cd89d9e4bc40639699b55457001271f67ad49e6a46fe507bff49e8833f84c24383ccec6e8a064ff639353a76e2aabd014d084f7e4081ef24a62f869c7bbf3d77c04a24be360727e117928349e4e079bb59b45c7faaa5389270eb34b41d507abe3edf7a1cc932085ff66c618b152e94e1ce8a85c4b7c656f8131966566cfa916566246cfa92013db1757bc6176a7255dc72180d7c026ea407e4ced8cd83c9b349828c77de74130058c7fc79dcb8cc043e6e3e6b9e407e8c8e6fddfa6dd05be3d5bda123526a70479535144051b86e00d444ad3578bcc708d6de65f16a808e1b5884f8527e49a9f6c49b0d7bf6fa1e2682315f3" + }, + { + "name": "⑨|菠菜专线", + "key": "AppV7Xhr", + "type": 3, + "jar": "./jars/492387b9-1482-4e06-9633-95dbb0f2d7eb.png", + "api": "csp_AppV7Amns", + "searchable": 1, + "quickSearch": 1, + "changeable": 0, + "ext": "97975714a2413f05151fea6864509533510f6448b0786a559e217e817f97d8199e9741f4158be7dfe4b298df32c7c552cb2608c70a3d74f572531b1d88c2b79e4e9ef9ab94ba4aabc9ef3e313d0996d373d99436537b6a14c5b8ce4c52dc56f24789d9246defca59f674ed08596cd4291296f41a9a15cfe21187017c745f276dd9581457a7be4a6311ded29e32cf7e3c725ca381c2124df2efe32ea2635c2c4bc0396e23c465fa39129633b2ae52179a73fa16caa82f06330126964f52f5bc5e1ea1051f2971616f59c0124edffa4cf9393d688b0805906aa2c2c3ccf747ff9d8d79565f68b92a248f06892404645a610f0f997595132fd7f4c4a95170de97e1127ef6b2f42879858650adff2e431080db9fb282ca0cd00223b3664307746b9703e6decc322eb9152d9614acf4799150eda3cd579132894125b4e79a20b87acf03c9dbe7b5de66466b1d0c1741241b23b0ab16c407da21b79197a3320c9b17f029cc3c827a30c2b9079f12cd927273bda043212a145a05fbd29fa3b2a4913576b89d42f635962f8c9e8894e5b4381bfbffcc11e4ec7933ffb73b38a37e602b4f145e73212e30fabfe1f55f9490521899dc605d0d30ffdc02c538d88fc2cc9040f3d2fbc91052bf95a4d2fb0380b30360c9e9766814bc64b60fb1e77a6b61038a6c6a7040e17efaffc2e8a08aea1ff66e09f70d47f94f28bdb85bd20c2ab7fb9d0d3fd6e616caa8f7016148ed6eb1e36f47f05584a198beaf6f4bb4bae6c94f53bd33b54ae0e009e1297b06351ee3237e8afef81bd7325210db974b7e74b713d2ce8fc464e3c7c79abe358d2723c647bb78bdb042f291b76eaae447bcc4ac5bf32fcd7a9910131e6bd7c87a93a720bbd7f304f963731eb0ec2ff5a652087b2c95ad720d7daec7c7f84118824621c63ffd97c9cb9f0aa403b91887cb4fe8cf98c14366103e6b5976861d1e444dd9554dbb221263cac06c2c1dc3f7850e6a98903800a787ae7cefca19d6b057ee530437a6d95e1aefe6ef9cc9cbf968298ea37b6ff915918e5814dd93ddc914543f09b674cfa757467261d142bb4259a5a58eae7d60aae68b522b1a4baef3f5031984287f486f1fcdcaed7994b5625dc57ab9b47ce014f28ada7d5a8b0320cdffadb7e3d6f36425b0cd6dcc6042665d9dd822496be254b328237023866423af0982145542831edabf0ebbdc83ecfbf0f323a1716edab1655a62101fc39b8fbb61fedf7e9ffd2c482f9e4b28ff7815fb3b7520016a39ed9f0f62373b256fc5797b646e52c293a0ad5b4fba1c1b46cf0a1fcfad9cfbea15b3f0762e9a3a98d1d2ff142b5cbb5f1722f2459c40d28dd78b14701885c0a3fd081dc75a7544b512ebe3354ed62a6752d9573207cf41fd3cfed1df2289199e57733a2b575fe94ab8de5fe2960518ae4da4a30504103a288d2ce9a6507d8f6e632fc350abf13ebad33190b096ffcf14375fed66e87cffb8a2ad1bd20c3ecd45fe3d8317cda81d9490b328c47ad4d21536df379cf5239cd541f3d36176a166579e64202bf8f4f6a0ecf8a9ee9865c69b0904ef63e0399dac7b00ded72a8260f7f3079c72d6cf53d3e69584c9b549995b11e17816835532c7f6e5b3a5d0f59daeb3bff3be3f827912df323b1eac22dc16f755249b6dec65c2972909af46c5b8aa3b10f6b526bb5dceafa0e8b340b5d6d589aae06b49cea377aba87b2dc1b5870420d8e7f3bf2c871b57a1003989e60eec0bba0370a023fd780bfbf345d2cd1abd9a9a6dae49b835b8b4fe621b0af7748760e5daa298f6e4af5b92368eab92f86a64900ec044b716b5cc7cf1cd7bb2acd7e6af7b765e703c62aa70016f991811be75cd250e6d7c2611ff968607aaeb4f4416b9c1dff5e36548874b07ef28ac858db7bfab9ca3b2b6df87d19ee9412f855b0e24b0e5f864563df387ec9ca5db7bd716d206474d5823b98b3258e0f884724937bf435803efef7035bdfbdc44dfb9f2dcfb29e60015e042a075d2a97691881ed9e9a1455ca8af326c78c919fd3c97e3b52501a9616146cce956ad34ee8a913c9d52ac4bfcbaef124659a7e388762cfa3d569c5752f51735833bbbee76d1a82092c9178f959eeb512e40bc26d7adff48dffaa93b713b476bbd9827bcc19fb3c147416edc3372b4ba039955898d588aed53a9100a944dcbfd6d2e7bbd9fbeb5f70c84dcdf33b12e28b4edb1e386b7c4eddb7c6343f25302f6f295263dc8c6c8164edcf526280c91959e04c439818d2139a41d1501523f27379cb2882a5157c03692b1a3a50fb04f64cb047c8ec3ede5272c8e8dcf25a3fc423948d7f17e7c5de6c449c77f9f1efbb0049b97a2505db1a9dba4481fedb4dc9e09a209572af26ed23e460e79e09b0984365f87f9e713f267420cdd18ac140b0cd91c8f4a0b10e097e01524d4b2217c42c9648ae126414a746cce4d80248378b0d47b521f2b9b89dde015e66d81fda5315211073240ff9f0e7ed8cd310ee07651764d35c534591ba5c46cb3cd2c4adbf63cbed9c00a66d4a53df010e25e6044cca8e0602388be754f375de5e430cbc18e395e7f6e3e89c005e09fccba079d19f6f4bf6b03aa0c9b5e6ee6627b072554033095eee608e8fde79201dc925db69e049e3a19e29ebed5d5de4a8f7f87ff6d80f72fa83c61e9657742936c240e162a6f859c870fcc1f43661cfcf9e616cf0383c0438622d82e35a13c5056ff21b9dda4d57410c1fa4ce3209a8c77f559261c9ec1a33a16daf0fc2aad88e796e4f1dc3ec3f3a3d5ba8a7349575ba4cb4d6e5f4526356aec6984c02b652f83d1db6e67cf690e4ff9bfea1743f09734f5d6557061b21084195bbe477ce43f23058b700cd6ce1a6f4684df9313d0897dfd71ea05c3b888b54392354e3eebdd05a7be4c01d6ee98a793551743c508646af4aee22661d2616a0d7aacc46de4e5529f7b7945cb084a2f04cc063aaf6bc69e00a503125d09322894244991ed75d7066a998e73f1eab86163867d3da86dddf5a57834543c3376" + }, + { + "key": "大众影视", + "name": "大众|影视", + "type": 3, + "api": "./py/大众.py", + "searchable": 1, + "quickSearch": 1, + "changeable": 1, + "filterable": 1 +}, + { + "key": "山楂影视", + "name": "山楂|影视(ok壳子用)", + "type": 3, + "api": "./py/山楂影视.py", + "searchable": 1, + "quickSearch": 1, + "changeable": 1, + "filterable": 1 +}, + { + "key": "茶杯狐", + "name": "茶杯狐|秒播", + "type": 3, + "api": "csp_XBPQ", + "jar": "https://pan.szfx.top/down.php/a81c03da23212c9ffc8a699465dedc8b.jar", + "quickSearch": 1, + "ext": { + "分类url": "https://www.china-itrade.com/zform-list/{cateId}-----------.html", + "分类": "电影$1#剧集$2#动漫$4#综艺$3" + } + }, + { + "key": "爱影视", + "name": "爱影视|秒播", + "type": 3, + "jar": "./jars/XM.png", + "api": "csp_AppGet", + "ext": "https://aysappto.oss-cn-chengdu.aliyuncs.com/q23.txt|nzEqOgYk3QzHuEP8|V122|okhttp/3.10.0" + }, + { + "key": "4K影院", + "name": "光影|秒播", + "type": 3, + "jar": "./jars/XM.png", + "api": "csp_AppGet", + "ext": "https://yun-1316442804.cos.ap-guangzhou.myqcloud.com/601.txt|FTgP4Gq8zPiqbt7M|V122|okhttp/3.10.0" + }, + { + "key": "YunDuo", + "name": "云朵|秒播", + "type": 3, + "jar": "./jars/fish06281030.jar", + "api": "csp_YunDuo", + "searchable": 1, + "changeable": 1, + "filterable": 1 + }, + { + "key": "CupFox", + "name": "茶杯|秒播", + "type": 3, + "jar": "./jars/fish06281030.jar", + "api": "csp_CupFox", + "searchable": 1, + "changeable": 1, + "filterable": 1 + }, + { + "key": "BuBu", + "name": "布布|秒播", + "type": 3, + "jar": "./jars/fish06281030.jar", + "api": "csp_BuBu", + "searchable": 1, + "changeable": 1, + "filterable": 1 + }, + { + "key": "huaisang", + "name": "怀桑|秒播", + "type": 3, + "jar": "./jars/fish06281030.jar", + "api": "csp_AppQi", + "searchable": 1, + "changeable": 1, + "ext": "AdYEovlEKsDy77+R58YGahWCxrDZyBxExcQNC2NSeH0n1b5mu6tvh8b4Eh0RCpoPF6eivKdrR1Hsb8X4sSVBS8zF6jkwLW+wze9yh+hSY5iimm4gM9mAtmt0obTi+6Iox/Jp4GCsN4MQyFebMK162SKnILklpXc1UMiJv9gnPOe5aOPUxCftL+x7/UGhBdFYWIegpiHvKeavUtCUkhxtDyC8KqVVPPW0StI5GdmUA3WBbnnrNiKqNc5GBmrffd6pDN+Cf9IIjzNNvos/5KXJmBbe/baAzTLkoafeIoDhO451" + }, + { + "key": "景仪", + "name": "景仪|秒播", + "type": 3, + "jar": "./jars/fish06281030.jar", + "api": "csp_App88", + "searchable": 1, + "filterable": 1, + "ext": "AScEBDU8ZGTviWgGR4VE0GGkVwxm9FRojDfGdLd7Uq6yQW7ma68i5+t2StAnXVayevGqI3Kb0rJi2eqa1R3PW9cxHiFDbXAhtGajyY69GUpDZQ615h6l9jBlh/RMkOo3RfAvtXJdZasUTDhxflfJPCn0T5P68L/XHUV9ylgYmABoOSghqLVoMUNWDS5E2PAMVkm39vpIJOyKNEIhVd3EQmPxDSjSoDE56akhNdBPWsT+tZVbLO8rEccdRYGvxYsXmVjhxaXhmzQEoEme5LF/0+x+M2A880NZ5akhrKIl5ZjfREZCgQ6FClx7+L8f8fb2VNiLtFu5538MrSRozjub6WRKe1m5OOdgdOTsAXJXw5QG5IQ/Y/i9VBZTZUjqP+0TpP4h92QjLynjJAFzwSr3bAOOIvEJW2LsK+hocK72wpyVG93vl42XQpU5s95dAVJOOOnbawZUsOq8a0ctuSsSdWQ=" + }, + { + "key": "枫眠", + "name": "枫眠|秒播", + "type": 3, + "jar": "./jars/fish06281030.jar", + "api": "csp_App88", + "ext": "AdzbT8Ti+fGJ2PrJDEahdT7+zU3sFruyF0fAaUTWAUOCrbG/s0KhC5zQusyXAkmDYai/yhecQAtwKkDfTqbVCQT15T0FDK1GX9GLxT9V3XyFRDT0ATcwcFfw5joxSB+YLlez1nGpT2AW5KomI3yNv3ORTd4B3NqAcM34Cioc6+xwfj3HJ4JO6kQvv4solNApeP7CqF/Ecpt1BCgvvPzswMOr+kgVG/Iu8btrVQFO+pRpY7cfpc/Y59ZqaJlrCTDNLxgwuG20RZ9gVWsW+vd3A9lRgeTiJ39vJPoK46+9LnYGWU9dlDR1qRg4y5ILVQjEnT4el2cKSZexf7nrXHVfF3nOmHH/w/R/OSGllwUB7FCHDMc7eDY7haDYHWAQpEmcn4+BfbC4cipsdZ+nVieVVuuaWSF9s+0xYPWdSYLJMxApplTYkO+/h5z9atdURJUMGQ==" + }, + { + "key": "悯善", + "name": "悯善|秒播", + "type": 3, + "jar": "./jars/fish06281030.jar", + "api": "csp_App88", + "ext": "AY/LmvuAAyhXffcGv5StyHm1MkGdY4inQLRC3KICnxUJBpq0d5dLhvE0+MW8XruH+M/Q/Ruqd6NayN9rihHGuotzXSTrDHgoZ2/dm2JlJ7GYOYfBorPhMPjuOhTNMg9w/J6oP4DXluvDpXNj9uOKq7g/Cx7vrKF6utOSaE1gUgDQwT251mOGTzGsd3ZrtEeepgI6hOdB2gJ4hHRumNhlbVtWDdpnVMYvhCIuH2HUqJFZWM5T+gEZTMLfeUEJt7ScfaQp90qNZID1YNo/tQOaFLGN12o4CkPtCNoYs+emjhVVqIjJzgfplCPIEyjRADqhur0c48FwCiJyp/XGZFmsMJaPKqvOkO+0H5YMKsR+EMmXCr6n0n1VnwGGpYl3maiq1SB78yDnh16291IjwXdERP1csTe41Vg3ppIixtk6q1etAikUle+6fjSFGvAvDYNr2Q==" + }, + { + "key": "长泽", + "name": "长泽|秒播", + "type": 3, + "jar": "./jars/fish06281030.jar", + "api": "csp_App88", + "ext": "Aa+WBBIIxghmbVYkWqlC4wrZvlocl4rSZS9+QyJDF6RgWFfYSb+nEM6WkMHPVbQFva551Srt16FqFroyjNssEXemH+xC5pCMj/ewgFuLEIbY2mXCVJ1bJxWRJAggNgH1f3mjwrBxlZA0kGgfAd0os29Mdi3RNJilSo5VMkPpcQPMeF8/PTbZHNymotiTwtICNcA5Q0WXsqe/wJ3HoLU4gBYQs1lBmYdxtAuvsnte3SbumQEFlaQnygFscx6EGrwKMFZLVcmu9egAXxygsf5PmyzN/xvOr+b+HslccoKqDbHNU/C6yWFwaHBawww0ckXRtoJ8fFbV7Xv4NiRcEf6ePm/cd06xYiZmjRts11gE0r8f7D0vx/TgigmU3v8nrgNYDokUGl/jDdza3o7BXyQumCWRD45wYbmKJ1LKb0ybRvNt" + }, + { + "key": "知予", + "name": "知予|秒播", + "api": "csp_AppNox", + "jar": "./jars/fish06281030.jar", + "type": 3, + "ext": "AXa/dhw2PLXN7GTzaamHOCEf9KWdx8b5bp7n8hAmf9Boa6AZrB5/hhb4qGO6kjkz/Oh5Uei9rzPWsZlQhgxQGSu7Zb/ZmT15NpqUP+qEjAXGPyOlfFWZbr4rxW3WZSqH6i+OT49idbNqqJdm1jXPR00G5O44GJb+9H7f1iioaW5GOEXjTbDGfBqd4uVVCz6vPPgb/k1NVY/Ze+bb5AsQMmZyAcHWgow8PEaTln0cVXxkb5VmKMQfj5sEq9ZnWGHbu4/32qI2Jjtkmj6VijcdWZSyxuwW/O1i8QbrqQZMeYyr16m5gwNFIyv3ppAxMfyjSz6P7J9dbMfS5PaT3xL3TKTAnZFjS0KyZIKYrJBLj9lXwgox8aFmPV1fT2CBX5t/dHX6gL8CfkhYGjFj7LnVLZo5se/1WjuMkzPTSZharqLvXySQsKpiGKLhfs8DsgQppW4BP8Lv2wPFDmbwB2op21RJDJNQhJXbOW6Z4rI5uXZJAW6LuvudGVKVD/RF3/yUlM4Boda3iuV/7ER45wPegGXouEiiuS7QHjYCgiMLVmUEiYLVhiTe3qDU6VlHqn5YhP7+1kibrXrRQ7JzyQ0sOxljdVHQw6IIRTQwzSBJLoDiiCddIncVXxYmKuhW6Pxen1bOfQgd723GkDyLB1Y5U9KXbzS9y6+ko37HVfmwUzDEcG+DYyxa2lJTCIXbdPbl8LBGUGMURx1S43wMLh1rurnz41qwPL5/WULQJmx4bt4E30dcTi/KfIBD8EUM8YZk8z7JSG5bi3oyYToXXRJCXK/qNpxaJ5I0s27MfnJRE/xF2k7Pv0YtFPmwdQr6Z3neEzOo/Vt1E5WlC0JiURC2bO+MWqA70m6B5WJkmnd46qPLtaofki6EzbH81AMvgsYAgjf8iAO6nYWFcrVoAsYMMgJkyPExJEUQStc+TB4gvUFUT9VeTHMXNSWiHMrhGkAQIA37PXzfig3c0sAUy+9iNlKXZv/lfbVFRgV9w8k0eDLrcR40Ma1Pmgnwq7v05RqJiSQCngiXOQgzR4wFar5anDJT73LmmP77+zaoJDH0aZeY" + }, + { + "key": "沐辞", + "name": "沐辞|秒播", + "api": "csp_AppNox", + "jar": "./jars/fish06281030.jar", + "type": 3, + "ext": "AQUucLUJRH9RFWo2llKlyTrMCyVJ0Kpob6GGGwM0j5jiyraPW+SaJOKlkFrgd1ZhRMCnf0G74bm9C+4z5cinWObAMVMVtYf3sq6ftyqkjscrCwmACTm3lYdUtHGXFJI5MibkogunAZdw4jqNzeJW5yZmcvtvNWAB2u3HpiPCZ/7BBa+frYoJk64v5fZCFR9ywNGr0nXP+F3iwSBdiuzG3EiSTWwdh66EiviaRCI17Qad4cXfy3SMDsy39ejvXzdTrN0VOAx2XDqhFRpL6JnxweIDg8NZ75R0qJDpn9hLiTUxiIB2fT9pjD+Da10ThaLJbcf49f2N2AbwIYaL0+7lGdPD4/WSG1B/MsJYbNVEIPVn4d3lWofSBf904ualn0Yx+RE8SQfoXWXiHowqIU01uQfWuFXV+1LwHTc3ZkTfdAd9SRqQgkfl4QwyogKb9KXE51rexjvPo7heswXhKJVnginjrFrCSuPbQ5I4G9mY0ivmsNLhl4YgezZ8nNLYJTisU7gn4Q5tSUdGCo4NGVmTAm9hRLKz5ao1FNnQ6zbq33/IRtiwfHPlGZf543z+wA4ZCXukLVd2HKmNniR7dnIScjvSENMatCmS60pm6xW0ZapgZZd6rDnSivtChrU+GetWYQBBA1d/FeFgOSGhd175JvnInnwe0sGlQ+aoSyaANoEDXjk8LSzJPScRIqEn4sUBHehjWBQyQjb8wGFjciWlQETGYFYyXn4SEAhqk/KSNNHbAO7nDTZrVJatDtF/e1W0+ryHzoY+UWoVoHqm2zbsqNezbSpumOfaIJIfM5GmcpiMdjAh7w/HpGngmX/MI574TixdhpqWvtagwEVu61hxxmK5ZDJXER2wjFxZBMn2T5QelhNRHUNT7HoxkrHs8VXBwkYbLjoXs05vtXVpkLkokEi2QJU/Qjh0lCCyvHHIE2cvEzcpAqRfvzGHksXSWwZzV1MO4iHjd86Sgo/8Xp7RLQMe4G57+bg+HoZXY5YDQzK+ESXGIs1p3agfPhvaP/0fkUhUSHkLCsoO3yCuQarGPR4qgDVN8bayFm7Ya3rK9zD4" + }, + { + "key": "清沅", + "name": "清沅|秒播", + "api": "csp_AppNox", + "jar": "./jars/fish06281030.jar", + "type": 3, + "ext": "ASjKEhQKe/DZHt0fbLID47aB3aYcWUG5aIPwrmTCgGinaSykux5CZpbz57zl1moRZGFkoEXqk7decpKNU6W/p/6OTfj3JWvZtr89yPZSxNyjJm1Il5upXQT68sXR/0WG392H71MN7Q8NC8xkSOuwAq7EfX2cuHMsiqFeCCugzAiINUiEqvboCFdXiI97C6kqqqiaQIS9d+R1r7krr5vQXWtky7XJNsiK5ACjppyTh68cbONYIcgLp5Kg5woh/wj9xmNT6mFGqF2D3j2RUaLoWYf+K1+ltBiuzZ7THWKwrnpBBig8XUAG3lXNXiFhPILyYWfr+1j/UoInhNITzJJ+SSRc88KmOk5kpch+idGzVMzHIq/bLpRRxE0iV8Qdtc2atKF9QUqPXJLrwv21Dl+nxgPEGOZ+71L+gABeQdvXO7xvyzUnd+rOidPJr1mBsfu9ySbcqHkhL5EIEQpGHwRhG/yN3Y5xj0BU+SdSxnDo+CwMC+g+WCts34c2u8h2tz7G5vuTw8QvDF23kF/BZeD2QaoCBAd3SDG9ObAichfuO1nDa938+Ul+iekNOEPtPFr6k5o+px/JJkE7MKYhekE/2JfmIkbkBHdnewJYckdM37/9EKsnAozbDyFKhfKR06Es52KtuAhGyh1B8uyfsj33qFpreAqGam8kjEHdYA0i832o0BtTU2gS3mf3NoijVH/XNmlJRuNXo9yYxdjuip4Eq4iqIgajM16MGAIJ0rumYhxJ5uJUFDlf55b9iS+DvJ8wotnBvfdINpAaeXPPlVc/1JDp1rIOw0qg2XIRAafLL7kzXnW8djs2dPSQU1+j9LIrfQ6u3k4lqUs9gRMW1JhwC/4iqimnwg0KsVValaplt+fxFHhwCCkS45uLf8BaY+UZtp5ZDffbi3Q0EDAK8F210Bzd5l8W8MokURUSj374Z7y2hAROBAAgZ8qWRrFOmBC+I+LUCm7sV4h7Mwdpe8sDAtxBhxOpBAYyV8eACQsDbnQsBvizlafy16ptRrArViG0uB1VSPqvi8gqcFD1zMl+uRo=" + }, + { + "key": "zhiqiu", + "name": "听风|秒播", + "type": 3, + "jar": "./jars/fish06281030.jar", + "api": "csp_zhiqiu", + "searchable": 1, + "ext": "http://www.小不点.com/api//2026/zhiqiu.php" + }, + { + "key": "荐片_js", + "name": "荐片|秒播", + "api": "./lib/jianpian.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "type": 3 + }, + { + "key": "看剧影视", + "name": "看剧|影视", + "type": 3, + "api": "./lib/AppToV5.py", + "ext": "http://43.248.117.123:4680" + }, + { + "key": "iQiYi影视", + "name": "爱奇|秒播", + "type": 1, + "api": "https://iqiyizyapi.com/api.php/provide/vod", + "searchable": 1, + "quickSearch": 1, + "filterable": 1 + }, + { + "key": "独播影视", + "name": "独播库|影视", + "type": 3, + "api": "csp_Duboku" + }, + { + "key": "映画", + "name": "映画|APP", + "type": 3, + "api": "csp_AppGet", + "searchable": 1, + "changeable": 1, + "ext": { + "url": "https://cms140.yhg.one", + "dataKey": "bM7iC9eA3oZ1nB7z", + "dataIv": "bM7iC9eA3oZ1nB7z" + } + }, + { + "key": "四叶草", + "name": "四叶草|APP", + "type": 3, + "api": "csp_AppQi", + "searchable": 1, + "changeable": 1, + "ext": { + "site": "https://yzysap.oss-cn-hangzhou.aliyuncs.com/kkk.txt", + "dataKey": "8eeObuwrmS3lRDEs", + "dataIv": "8eeObuwrmS3lRDEs", + "ua": "okhttp/3.10.0" + } + }, + { + "key": "热播影视", + "name": "热播|APP", + "type": 3, + "api": "csp_AppRJ", + "searchable": 1, + "quickSearch": 1, + "filterable": 0, + "ext": { + "url": "http://v.rbotv.cn" + } + }, + { + "key": "文才", + "name": "文才|影视", + "type": 3, + "api": "./py/文才影视.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": { + "site": "https://m.hkybqufgh.com,https://m.sizhengxt.com,https://m.9zhoukj.com,https://m.sizhengxt.com,https://m.jiabaide.cn" + } + }, + { + "key": "农民影视", + "name": "农民|影视", + "type": 3, + "api": "csp_Wwys", + "ext": "https://vip.wwgz.cn:5200" + }, + { + "key": "金牌", + "name": "金牌|APP", + "type": 3, + "api": "csp_AppQi", + "searchable": 1, + "changeable": 1, + "ext": { + "url": "https://qj4.catbb.xyz", + "dataKey": "eecbio48dsq13kkk", + "dataIv": "eecbio48dsq13kkk", + "search": "searchList4", + "init": "initV122", + "ua": "okhttp/3.10.0" + } + }, + { + "key": "洽洽影视", + "name": "️瓜子|影视", + "type": 3, + "api": "./py/瓜子.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 1 + }, + { + "key": "荐片", + "name": "荐片|磁力", + "api": "csp_JianPian", + "type": 3 + }, + { + "key": "麻雀", + "name": "麻雀|蓝光", + "type": 3, + "quickSearch": 1, + "searchable": 1, + "api": "https://gitee.com/lzxw66/lzxw9/raw/master/py/Applzxw.py", + "ext": "http://118.89.203.120:8365/" + }, + { + "key": "农民", + "name": "旺旺|秒播", + "type": 3, + "jar": "https://ncstatic.clewm.net/rsrc/2025/0821/23/753d376ab89b34e2bf78761f5fe0289a.png;md5;526453EBC8F8F6C30FB2AEC9252DCED0", + "api": "csp_NongMin", + "searchable": 1, + "quickSearch": 1, + "filterable": 1 + }, + { + "key": "猎手影视", + "name": "猎手|秒播", + "type": 3, + "api": "./py/猎手影视.py", + "searchable": 1, + "changeable": 1, + "quickSearch": 1, + "filterable": 1, + "playerType": 2 + }, + { + "name": "夏天|秒播", + "key": "NewGrV2", + "jar": "http://mytv6688.xyz/aowu/bfdb--cvdvds.png;md5;acbd4abbc88634083192f4db8ba07939", + "type": 3, + "api": "csp_NewGrV2Amns", + "searchable": 1, + "quickSearch": 1, + "changeable": 0, + "ext": "efef288565eb2ea7fcb9caa81e70fad5b9a3d290f7e7066e286ddee6884c813c8802cb583323f2d3e4d2a9112a38a062473f4b440cf9c65a4fd79ac6d02f202ef54326bbcd77f97cd8bb80c8d84661386dfd9968cafc2cefcca8b249ebbed4e4f32b9397064a17e66b7fc6003ab8e40b0ed5f7a748e8bc1b1564a5bf5ee0640f0dac483c2ac19d12a5b930c3d77438d9f34b6dc5dfaed4453ff55a14d32cb22bce4275e4185807a024a73ac3efe7bea3f20b6c15215131a9c4b800fa5820f80db5f9522cd2d65578180e03fa3009a73dd090579c25c975e134173dc51d621898934a3ba5161819f0d2285ccad7bede9a8b8a0912db445796b34b135c41786a59dfe81034c4b4d67a082406da3d83e51baf8957c2c79cf5fb3a7d6cab1ec2fdd3698531651c6a704f9d90e9d1" + }, + { + "key": "py_jieyingshi", + "name": "蜀山|影界", + "type": 3, + "api": "./py/jieyingshi.py", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "changeable": 0 + }, + { + "key": "柠檬", + "name": "柠檬|蓝光", + "type": 3, + "api": "csp_Nmvod", + "playerType": 2, + "jar": "https://gitee.com/tianwikeji/jar/raw/master/柠檬.jar", + "ext": "7lj763gg402i7942503g839jg74h8h88highi40799jh6i6k454419l0l5184k0g549h0kg2i01i838i2h42g891lgg1" + }, + { + "key": "皮皮虾", + "name": "皮皮虾|秒播", + "type": 3, + "api": "./py/ppx.py", + "ext": "http://43.248.117.123:468" + }, + { + "key": "三秋影视", + "name": "三秋|APP", + "type": 3, + "api": "csp_App3Q" + }, + { + "key": "韩圈", + "name": "韩圈|APP", + "type": 3, + "api": "csp_Hxq", + "ext": "http://www.小不点.com/api/2026/fishhxq.php" + }, + + { + "key": "bubutv", + "name": "步步影视|秒播", + "type": 3, + "api": "http://52xinghe.top/%e6%98%9f%e6%b2%b3/js/4k.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1 + }, + { + "key": "先生┃晓飒", + "name": "先生|秒播", + "type": 3, + "api": "csp_XBPQ", + "ext": "./js/先生.js" + }, +{ + "key": "威武┃影视", + "name": "威武|秒播", + "type": 3, + "api": "./py/威武.py", + "ext": "http://43.248.117.123:4680", + "quickSearch": 1 + }, + { + "key": "布布┃影视", + "name": "布布|秒播", + "type": 3, + "api": "./py/布布.py", + "style": { + "type": "rect", + "ratio": 1.33 + }, + "quickSearch": 1 + }, + { + "key": "裤佬独家免扫4K", + "name": "独家|秒播", + "type": 3, + "jar": "https://ncstatic-file.clewm.net/rsrc/2026/0416/20/1fe667cd217a0c314b8ca59310dbf45d.jpg;md5;a4f403a000bc5e4ebdd9da27fcb05852", + "api": "csp_AppV6", + "playerType": 2, + "ext": "7lj763gg0939790h44298182lk5j9k99k2g4ih53jl9i376l514k16hilj0443400h9k4jgh8312j1912818glikl7lh1jk9k4222k1kg696igkk32ig6lhj3kl50j08lkl6j0h6gi7k2j31jj0k7i1784l25g757hhkl42i7jg68illihj867l82g53532j62i92kljhj5llh498k24796l57j55ji0ji2g22i501jl541j9j4i68i5j602744l10413k457hl80l91j5l44139j23g64h27k08l5509h202gl84338hi17082hkj5746g298j640i002jk1265h745j289303h6i6j6j15jgkg15485h8g935hk83g9g7j661l4i557jl56h6l0h40i5j9hkiig7066523l2h24gj9k1083g6l2gihh2j5hhgkgij04j8900jhg4l6731hkhij7kk2i594536563674gki85li59jhk79067964197h5k7k2641h03l45074jkkklhik123407146l1i0jk90k1hgl151076ig7i4gi0858h62j37lh8l4hl519ghi7g04h2h900jlj7ll333i736549624gjk8k508g9499gj3jj7050jjhgh4i57326j83301i0kkl88040ih52gj8j0gk0h4g5g7lh561k2gk6k7k56h01598ji23g27k3i17878j92k2gj1l5ih8h0jj73k94g9hl5g7h229i10g099k09l958h3hk18l72h1j43gg7177g4h7ll8987644383606klgh9h4ll42h7293k694kl20j539g6jl17ig655461138jgj7306i1296k3i03586k6l32j5hlik4051187741218271j8j4g3i1h6719877l10k1ijl220i8hlil3j3g129ll3k2i5164lkg12k253kk1h8j5l0gki49jg25hlii704l5ih74439hlj9jih5ki53242ijgh6359i8i5j4h2j2i4581l244j4ij728490hk0k34542916i2lig57836gg7kji3l160234i24hik5g18h790488748j680k5i0l885lj66kjk78j2i57i5021g283ik9g38g62259h1lgi811ihki506k5934g7h737hg9360lll98l4j8i049903l1354lg00019g0934h005h8jjkl60j91k7j74i96h8h26hk59i653209lgj07g1g298k48jllgh00l4i742gi72l27038157gji9j32gh0k5672167k2588h31967l3867g50k503ik403781ki72j47hh4363l0708k4g961k4hl8g4j35ilk143h3424010i165lj612h50k68l61ghl9h80kh874k14ggk2ilg018hi5l1g34262196lkl45ih981jkl42271l4232k93hk8ih3g814i6h63h0g64l300i42il1g0454921j12h4844ii714ih71lg172326009812833h62kj8009kijk5hhg763031235l45h78614l7h9k579h6lj290i98851gll70024834hgj2lg5hk3l905i346gij11kl5j9i7h5j5k12hl061l488k061564g398i2150h9j343901865h7567g874i1gghl5ihg8il8hh0650h6308l2i5053997g8g12g16l3l7h5lhlji71i1i23h0ljl1h14688h7g13987h548h33k34hi6h2i63h424jhl1kik26kl3h60662846j6j0749l8kh95018kl1971j5j5gjk9hg70542391j77hjj65l127627h6h8h0hi003i2hih6h0k9k878lj858k30iljgik0l9248jk25l4h701l6gllhkhi54g24g926jgj884266514056805k2h15hh442i3170ilik20h88i561k0682k04459i154i03ikglg6220i4jii1g32067il925g450k0i1241l3il2jjl6k186gjj53h611il59k650i4kjhi87i798hg6h01g306ig104145ig9h68i092ghhh59jig99j12383792452h44206glk62g67gj204hk874l5li8646g65i9085244i092g70ig9h8657kg0413466ii87k9i32hglh24hi2li7174735i520ik608ilg71292838j5k1h39271ghg5288g930lg6h75626l71h8h5g011k9l9lgk691i04166h7996g452kij4l4l72881k6kl5701jl707hi415j8h3k67576966g2k94k03k0lj31995h2j26hi69jhjji162625l50j7790093hli0jjkh1ll804i3lhh40lk4k240kh48k0k16l544hg033k594gh0l93682l86h35i1i36klhgjg90lkl54746i2k63481h37hilj3ikig52h0j80k5gj6h879lk6g8ll6k616966h59h42l24h824ljj77g6l03kg260i80h2g2k123251j22jg36k5j14781i6197929il9j03k16h4l1i78693g45k64j0jl0k58hj8493h76gj2202470ig12lh2llj2l5k5541k4h506i3hij81lg9i037jgk22i2l3j12j6l394h51ii2ll0022j292h8036767i835k47071jl9illl2gli06524g66984902j6j1h5g788019hl4712032977h41l0k36073ig880g2jgklh26k736180591639h4k2gjk9gl2071h685923kl5363l5lj0ll91901g12kk29hll4280h9h51870j721516j6g66i379g203932726h42g927h19733k237492l8j0jh148gl95048l5524j4j0l2445130153i802169102i14g586h8g64j2lk28492169li3292877837108k7i9557h3jk31il2lklg494lgl4j91jig614216ki68i2j140l1jg03lk16lljg039h21kj313h8jk79h99j2g89j327i7h9052h9hj71721jg927340956k6jl4i7k0430" + }, + { + "key": "天堂", + "name": "天堂|APP", + "type": 3, + "api": "csp_AppDrama", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": { + "appName": "电影天堂", + "publicKey": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCduNEnfxGaLuQRk5ABzXHhPV43zi00sCHjLo8BYc+Wi6xXm2b4v0i28Sq4WlNCKhseft9fz8kO/qLr6/022o1RcuOU7e4GFL3U9WnNODwRBYSYWd+K8nqpI/tAUDmZEBGRWqjrc7x6aMl3A+xpnWkLbPCLsuhbuuUE3tv09oeOpwIDAQAB", + "dataKey": "D2KREWRIBVNAUJJYEDL4VFHOY2Q0PQ==", + "dataIv": "OC1A06E197EF10CF3F6058CA7A803B5E", + "pkg": "com.dytiantang.one", + "host": "", + "site": "./lib/app_dyttandroid.txt", + "version": "3.0.0.7", + "decrypt": "0" + } + }, + { + "key": "橘汁", + "name": "橘汁|APP", + "type": 3, + "api": "csp_AppDrama", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": { + "appName": "橘汁", + "publicKey": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCr8SzZhjYy+rsya1K09t8d2K50pWFoBkgUqMpKOiW+3IEVKd4eTdvg9RSOjQ82kypL6R9BnsmrS1V8s4PVDwjQbUtYhTPPC9Hz16qY7rpD6m0d2vr09/UpWQ5uOy9PR0QTrsioveZ+DIe9jc3C+zBCu/kZSY/R8stwJoiitki3gwIDAQAB", + "dataKey": "DGVQRUX5R1LWWDLHTGJSUKG1DJRVPQ==", + "dataIv": "OC1A06E197EF10CF3F6058CA7A803B5E", + "pkg": "com.lxf.snzlcgtzxyx", + "host": "", + "site": "./lib/app.txt", + "version": "3.0.2.1", + "decrypt": "1" + } + }, + { + "key": "华谊", + "name": "华谊|APP", + "type": 3, + "api": "csp_AppDrama", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": { + "appName": "华谊", + "publicKey": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCp9Ek4wIlQAtwFnuBRlsFiow2tr+4UOciGeNKbY7nL74etUqUb6fvpOSOHhFEfaWlfwUpOB17x3JEL3No19nfjCeVYrYPjlJcgoqUWH/tfIfFAQWvtxBIBlKazkhw8d3ChysWmeWRikKqkBsVRY4oqNPuj4sjm6Zult0U4I4prRQIDAQAB", + "dataKey": "NDBYSZR1DMRRZ05NSUCWEJNIYWLBPT0=", + "dataIv": "OC1A06E197EF10CF3F6058CA7A803B5E", + "pkg": "com.muyue.tool", + "host": "", + "site": "./lib/az5.txt", + "version": "1.0.0.4", + "decrypt": "1" + } + }, + { + "key": "苹果", + "name": "苹果|APP", + "type": 3, + "api": "csp_AppDrama", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": { + "appName": "小苹果", + "publicKey": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCduNEnfxGaLuQRk5ABzXHhPV43zi00sCHjLo8BYc+Wi6xXm2b4v0i28Sq4WlNCKhseft9fz8kO/qLr6/022o1RcuOU7e4GFL3U9WnNODwRBYSYWd+K8nqpI/tAUDmZEBGRWqjrc7x6aMl3A+xpnWkLbPCLsuhbuuUE3tv09oeOpwIDAQAB", + "dataKey": "S0VNDTJHOFHHCNMRAW5IV2TOS2PBPQ==", + "dataIv": "OC1A06E197EF10CF3F6058CA7A803B5E", + "pkg": "com.juechufsh.android.xpg1", + "host": "", + "site": "./lib/app_xpg_android.txt", + "version": "1.0.0.3", + "decrypt": "0" + } + }, + { + "key": "薯条", + "name": "薯条|APP", + "type": 3, + "api": "csp_AppDrama", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": { + "appName": "薯条影视", + "publicKey": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCduNEnfxGaLuQRk5ABzXHhPV43zi00sCHjLo8BYc+Wi6xXm2b4v0i28Sq4WlNCKhseft9fz8kO/qLr6/022o1RcuOU7e4GFL3U9WnNODwRBYSYWd+K8nqpI/tAUDmZEBGRWqjrc7x6aMl3A+xpnWkLbPCLsuhbuuUE3tv09oeOpwIDAQAB", + "dataKey": "A1VACZJWDKRZY1P3MFV0DDRAZ3F3PT0=", + "dataIv": "OC1A06E197EF10CF3F6058CA7A803B5E", + "pkg": "com.st.standroid", + "host": "", + "site": "./lib/app_dyttandroid.txt", + "version": "5.0.0.1", + "decrypt": "0" + } + }, + { + "key": "久久", + "name": "久久|APP", + "type": 3, + "api": "csp_AppYsV2", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": "http://99cms.jj99.icu:8199/api.php/app/" + }, + { + "key": "闪影", + "name": "闪影|APP", + "type": 3, + "api": "csp_AppYsV2", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": "http://38.47.213.61:41271/mogai_api.php/v1.vod" + }, + { + "key": "飞飞", + "name": "飞飞丨APP", + "type": 3, + "api": "csp_AppYsV2", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": "https://qpcj.69mini.com/api.php/app/" + }, + { + "key": "湘漓", + "name": "湘漓|APP", + "type": 3, + "api": "csp_AppFox", + "ext": "https://ledayy.com" + }, + { + "key": "嘉禾", + "name": "嘉禾|APP", + "type": 3, + "api": "csp_AppFox", + "ext": "https://www.baidukuaiy.top" + }, + { + "key": "猎鹰", + "name": "猎鹰|APP", + "type": 3, + "api": "csp_AppFox", + "ext": "https://444421.xyz" + }, + { + "key": "玫瑰", + "name": "玫瑰|APP", + "type": 3, + "api": "csp_AppFox", + "ext": "http://43.251.227.45:3688" + }, + { + "key": "峥嵘", + "name": "峥嵘|APP", + "type": 3, + "api": "csp_AppFox", + "ext": "https://api2026.hboqy.cn" + }, + { + "key": "首发", + "name": "首发|APP", + "type": 3, + "api": "csp_AppQi", + "searchable": 1, + "changeable": 1, + "ext": { + "site": "./lib/600.txt", + "dataKey": "FTgP4Gq8zPiqbt7M", + "dataIv": "FTgP4Gq8zPiqbt7M", + "init": "initV122", + "ua": "okhttp/3.10.0" + } + }, + { + "key": "金牌", + "name": "金牌|APP", + "type": 3, + "api": "csp_AppQi", + "searchable": 1, + "changeable": 1, + "ext": { + "url": "https://qj4.catbb.xyz", + "dataKey": "eecbio48dsq13kkk", + "dataIv": "eecbio48dsq13kkk", + "search": "searchList4", + "init": "initV122", + "ua": "okhttp/3.10.0" + } + }, + { + "key": "老鹰", + "name": "老鹰|APP", + "type": 3, + "api": "csp_AppQi", + "searchable": 1, + "changeable": 1, + "ext": { + "site": "./lib/maotouyinghb.txt", + "dataKey": "zxPtEUDGVllIUhDB", + "dataIv": "zxPtEUDGVllIUhDB", + "ua": "okhttp/3.10.0" + } + }, + { + "key": "蓝鹰", + "name": "蓝鹰|APP", + "type": 3, + "api": "csp_AppQi", + "searchable": 1, + "changeable": 1, + "ext": { + "site": "./lib/xly.txt", + "dataKey": "ca94b06ca359d80e", + "dataIv": "ca94b06ca359d80e", + "init": "initV120", + "ua": "okhttp/3.10.0" + } + }, + { + "key": "猎豹", + "name": "猎豹|APP", + "type": 3, + "api": "csp_AppGet", + "searchable": 1, + "changeable": 1, + "ext": { + "url": "https://444421.xyz", + "dataKey": "#getapp@TMD@2025", + "dataIv": "#getapp@TMD@2025" + } + }, + { + "key": "王子", + "name": "王子|APP", + "type": 3, + "api": "csp_AppGet", + "searchable": 1, + "changeable": 1, + "ext": { + "url": "https://app.95112475.xyz", + "dataKey": "5a9w6x58dsq6z3a6", + "dataIv": "5a9w6x58dsq6z3a6" + } + }, + { + "key": "秒看", + "name": "秒看|APP", + "type": 3, + "api": "csp_AppGet", + "searchable": 1, + "changeable": 1, + "ext": { + "site": "./lib/get.txt", + "dataKey": "c60d88b2eep53za8", + "dataIv": "c60d88b2eep53za8", + "token": "4181e508e7a17657d6a6246e70b1b13553e5ae9d8d287dc47000fb2df638dffa" + } + }, + { + "key": "茉莉", + "name": "茉莉|APP", + "type": 3, + "api": "csp_AppGet", + "searchable": 1, + "changeable": 1, + "ext": { + "site": "./lib/9.txt", + "dataKey": "88689667dce61725", + "dataIv": "88689667dce61725" + } + }, + { + "key": "灵虎", + "name": "灵虎|APP", + "type": 3, + "api": "csp_AppGet", + "searchable": 1, + "changeable": 1, + "ext": { + "site": "https://bind.315999.xyz/89.txt", + "dataKey": "#getapp@TMD@2025", + "dataIv": "#getapp@TMD@2025" + } + }, + { + "key": "哔哩视频", + "name": "哔哩|视频", + "type": 3, + "api": "csp_BiliYS", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "changeable": 0, + "style": { + "type": "rect", + "ratio": 1.433 + }, + "ext": { + "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt" + } + }, + { + "key": "三六零", + "name": "三六零|视频", + "type": 3, + "api": "csp_SP360" + }, + { + "key": "玩偶", + "name": "玩偶|4K", + "type": 3, + "api": "csp_Wogg", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "ext": { + "site": [ + "https://www.wogg.net", + "https://wogg.xxooo.cf", + "https://woggpan.xxooo.cf" + ] + }, + "timeout": 60 + }, + { + "key": "快映", + "name": "快映|4K", + "type": 3, + "api": "csp_PanWebShare", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "ext": { + "site": [ + "http://38.76.197.172:12521" + ] + }, + "timeout": 60 + }, + { + "key": "木偶", + "name": "木偶|4K", + "type": 3, + "api": "csp_PanWebShare", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "ext": { + "site": [ + "https://123.666291.xyz", + "https://666.666291.xyz", + "https://www.muou.site", + "https://www.muou.asia" + ] + }, + "timeout": 60 + }, + { + "key": "蜡笔", + "name": "蜡笔|4K", + "type": 3, + "api": "csp_PanWebShare", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "ext": { + "site": [ + "http://www.xiaocgege.shop", + "http://xiaocge.fun", + "http://feimo.fun", + "http://xiaocgege.shop" + ] + }, + "timeout": 60 + }, + { + "key": "至臻", + "name": "至臻|4K", + "type": 3, + "api": "csp_PanWebShare", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "ext": { + "site": [ + "https://mihdr.top", + "https://www.miqk.cc", + "https://www.mihdr.top" + ] + }, + "timeout": 60 + }, + { + "key": "多多", + "name": "多多|4K", + "type": 3, + "api": "csp_PanWebShare", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "ext": { + "site": [ + "https://tv.yydsys.top", + "https://tv.yydsys.cc", + "https://tv.214521.xyz" + ] + }, + "timeout": 60 + }, + { + "key": "欧哥", + "name": "欧哥|4K", + "type": 3, + "api": "csp_PanWebShare", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "ext": { + "site": [ + "https://woog.nxog.eu.org", + "https://woog.nxog.fun", + "https://woog.nxog.eu.org", + "https://woog.430520.xyz" + ] + }, + "timeout": 60 + }, + { + "key": "二小", + "name": "二小|4K", + "type": 3, + "api": "csp_PanWebShare", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "ext": { + "site": [ + "https://www.2xiaopan.top", + "https://www.erxiaozhan.top", + "https://www.2xiaozhan.top" + ] + }, + "timeout": 60 + }, + { + "key": "虎斑", + "name": "虎斑|4K", + "type": 3, + "api": "csp_PanWebShare", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "ext": { + "site": [ + "http://38.76.197.172:16969" + ] + }, + "timeout": 60 + }, + { + "key": "夸父", + "name": "夸父|4K", + "type": 3, + "api": "csp_PanWebShareKF", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "style": { + "type": "list", + "ratio": 1.433 + }, + "ext": { + "site": [ + "https://www.kfzys.net" + ], + "cookie": "bbs_sid=p5mugcm9r147o1d3qpi0su1ucm; bbs_token=gDMAOehNUQetTJv9Lnet0J_2FGJmgdvnx90iTZqzU_2FnO0_3D" + }, + "timeout": 60 + }, + { + "key": "盘它", + "name": "盘它|4K", + "type": 3, + "api": "csp_PanWebSharePT", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "style": { + "type": "list" + }, + "timeout": 60 + }, + { + "key": "123", + "name": "123|4K", + "type": 3, + "api": "csp_PanWebShare123", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "style": { + "type": "list", + "ratio": 1.433 + }, + "ext": { + "site": [ + "https://123panfx.com", + "https://pan1.me" + ] + }, + "timeout": 60 + }, + { + "key": "指南", + "name": "指南|4K", + "type": 3, + "api": "csp_4KZhinan", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "timeout": 60 + }, + { + "key": "人人", + "name": "人人|4K", + "type": 3, + "api": "csp_RenRen", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "timeout": 60 + }, + { + "key": "即刻", + "name": "即刻|4K", + "type": 3, + "api": "csp_Jike", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "style": { + "type": "list" + }, + "timeout": 60 + }, + { + "key": "双星", + "name": "双星|4K", + "type": 3, + "api": "csp_ShuangXing", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "style": { + "type": "list" + }, + "timeout": 60 + }, + { + "key": "河马短剧", + "name": "河马|短剧", + "type": 3, + "api": "csp_HemaDJ", + "searchable": 1, + "changeable": 1, + "quickSearch": 1, + "filterable": 1, + "genre": "shortdrama" + }, + { + "key": "好看短剧", + "name": "好看|短剧", + "type": 3, + "api": "csp_HaokanDJ", + "searchable": 1, + "changeable": 1, + "quickSearch": 1, + "filterable": 1, + "genre": "shortdrama" + }, + { + "key": "围观短剧", + "name": "围观|短剧", + "type": 3, + "api": "csp_WeiguanDJ", + "searchable": 1, + "changeable": 1, + "quickSearch": 1, + "filterable": 1, + "genre": "shortdrama" + }, + { + "key": "星芽短剧", + "name": "星芽|短剧", + "type": 3, + "api": "./lib/星芽短剧.py", + "searchable": 1, + "changeable": 1, + "quickSearch": 1, + "filterable": 1, + "genre": "shortdrama" + }, + + { + "key": "厂长影视", + "name": "厂长|影视", + "type": 3, + "api": "csp_Czsapp", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": "https://cz01.vip" + }, + { + "key": "金牌影视", + "name": "金牌|影视", + "type": 3, + "api": "csp_Jpys", + "ext": "https://y2s52n7.com,https://m.hkybqufgh.com,https://m.sizhengxt.com,https://m.9zhoukj.com,https://m.sizhengxt.com,https://m.jiabaide.cn" + }, + { + "key": "修罗影视", + "name": "修罗|影视", + "api": "csp_Xlys", + "type": 3, + "ext": "https://www.xlysw.ggff.net" + }, + { + "key": "云播影视", + "name": "云播|影视", + "type": 3, + "api": "csp_Tvyb" + }, + { + "key": "骚火影视", + "name": "骚火|影视", + "type": 3, + "api": "csp_SaoHuo", + "ext": "https://shdy5.us" + }, + { + "key": "农民影视", + "name": "农民|影视", + "type": 3, + "api": "csp_Wwys", + "ext": "https://vip.wwgz.cn:5200" + }, + { + "key": "爱看机器人", + "name": "爱看|影视", + "type": 3, + "api": "csp_Ikanbot", + "searchable": 1, + "quickSearch": 1, + "filterable": 1 + }, + { + "key": "小镇影视", + "name": "小镇|影视", + "type": 3, + "api": "csp_XBPQ", + "ext": "./lib/XZYS.json" + }, + { + "key": "面包影视", + "name": "面包|影视", + "type": 3, + "api": "csp_XBPQ", + "ext": "./lib/MBYS.json" + }, + { + "key": "永乐影视", + "name": "永乐|影视", + "type": 3, + "api": "csp_XBPQ", + "ext": "./lib/YLYS.json" + }, + { + "key": "剧圈影视", + "name": "剧圈|影视", + "type": 3, + "api": "csp_XYQHiker", + "ext": "./lib/JQYS.json" + }, + { + "key": "1905", + "name": "1905|影视", + "type": 3, + "api": "csp_Web1905", + "searchable": 1, + "quickSearch": 0, + "filterable": 0 + }, + { + "key": "哆啦新番社", + "name": "哆啦|新番社", + "type": 3, + "api": "csp_XBPQ", + "style": { + "type": "list" + }, + "ext": "./lib/DLXFS.json" + }, + { + "key": "Anime1", + "name": "A1|动漫", + "type": 3, + "api": "./lib/ec67b9045d393737f073d2c9365533f0.js", + "ext": "./lib/Anime1.js" + }, + { + "key": "漫国动漫", + "name": "漫国丨动漫", + "type": 3, + "searchable": 1, + "api": "csp_AppSy", + "ext": { + "site": "./lib/api.txt", + "siteKey": "rectangleadsadxa", + "listKey": "aassddwwxxllsx1x", + "parsesKey": "aassddwwxxllsx1x" + } + }, + { + "key": "方舟动漫", + "name": "方舟丨动漫", + "type": 3, + "searchable": 1, + "api": "csp_AppGet", + "ext": { + "url": "https://www.cyfz.top", + "dataKey": "e72cdfd629e8895d", + "dataIv": "e72cdfd629e8895d" + } + }, + { + "key": "曼波动漫", + "name": "曼波|动漫", + "type": 3, + "searchable": 1, + "api": "csp_AppGet", + "ext": { + "url": "https://app.omofun1.top", + "dataKey": "66dc309cbeeca454", + "dataIv": "66dc309cbeeca454" + } + }, + { + "key": "咕咕动漫", + "name": "咕咕|动漫", + "type": 3, + "searchable": 1, + "api": "csp_AppGet", + "ext": { + "url": "https://www.gugu3.com", + "dataKey": "nKfZ8KX6JTNWRzTD", + "dataIv": "nKfZ8KX6JTNWRzTD" + } + }, + { + "key": "巴士动漫", + "name": "巴士|动漫", + "type": 3, + "api": "csp_XYQHiker", + "ext": "https://git.yylx.win/raw.githubusercontent.com/PizazzGY/NewTVBox/main/anime/json/bsdm.json" + }, + { + "key": "路漫漫", + "name": "路漫漫|动漫", + "type": 3, + "api": "./lib/ec67b9045d393737f073d2c9365533f0.js", + "ext": "./lib/LMM.js" + }, + { + "key": "去看吧", + "name": "去看吧|动漫", + "type": 3, + "api": "./lib/ec67b9045d393737f073d2c9365533f0.js", + "ext": "./lib/QKB.js" + }, + { + "key": "荐片", + "name": "荐片|磁力", + "api": "csp_JianPian", + "type": 3 + }, + { + "key": "七味", + "name": "七味|磁力", + "type": 3, + "api": "csp_QnMp4", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": "https://www.qwshow.com,https://www.qwmkv.com,https://www.qwfilm.com,https://www.qwfun.com,https://www.qnnull.com,https://www.qnnull.com" + }, + { + "key": "New6v", + "name": "New6V|磁力", + "type": 3, + "api": "csp_New6v", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": "https://www.xb6v.com" + }, + { + "key": "美剧迷", + "name": "美剧迷|磁力", + "type": 3, + "api": "csp_MeijuMi", + "searchable": 1, + "quickSearch": 1, + "filterable": 1 + }, + { + "key": "迅雷吧", + "name": "迅雷吧|磁力", + "type": 3, + "api": "csp_Xunlei8", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": "https://xunlei8.me" + }, + { + "key": "电影港", + "name": "电影港|磁力", + "type": 3, + "api": "csp_XYQHiker", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": "./lib/DYG.json" + }, + { + "key": "阿里云盘", + "name": "阿里|云盘", + "type": 3, + "api": "csp_PanAli", + "searchable": 0, + "filterable": 0, + "changeable": 0, + "style": { + "type": "list", + "ratio": 1.433 + } + }, + { + "key": "夸克网盘", + "name": "夸克|网盘", + "type": 3, + "api": "csp_PanQuark", + "searchable": 0, + "filterable": 0, + "changeable": 0, + "style": { + "type": "list", + "ratio": 1.433 + } + }, + { + "key": "UC网盘", + "name": "UC|网盘", + "type": 3, + "api": "csp_PanUC", + "searchable": 0, + "filterable": 0, + "changeable": 0, + "style": { + "type": "list", + "ratio": 1.433 + } + }, + { + "key": "百度网盘", + "name": "百度|网盘", + "type": 3, + "api": "csp_PanBaidu", + "searchable": 0, + "filterable": 0, + "changeable": 0, + "style": { + "type": "list", + "ratio": 1.433 + } + }, + { + "key": "盘搜", + "name": "盘搜|搜索", + "type": 3, + "api": "csp_PanSou", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "timeout": 60 + }, + { + "key": "古哥", + "name": "古哥|搜索", + "type": 3, + "api": "csp_GugeSo", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "timeout": 60 + }, + { + "key": "兄弟", + "name": "兄弟|搜索", + "type": 3, + "api": "csp_XiongdiPan", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "timeout": 60 + }, + { + "key": "百酷", + "name": "百酷|搜索", + "type": 3, + "api": "csp_Baiku", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "timeout": 60 + }, + { + "key": "米搜", + "name": "米搜|搜索", + "type": 3, + "api": "csp_MiSou", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "timeout": 60 + }, + { + "key": "鬼鬼", + "name": "鬼鬼|搜索", + "type": 3, + "api": "csp_GuiGui", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "timeout": 60 + }, + { + "key": "混合", + "name": "混合|搜索", + "type": 3, + "api": "csp_HunHePan", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "timeout": 60 + }, + { + "key": "天翼", + "name": "天翼|搜索", + "type": 3, + "api": "csp_TianYiSou", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "timeout": 60 + }, + { + "key": "趣盘", + "name": "趣盘|搜索", + "type": 3, + "api": "csp_QuPanSo", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "timeout": 60 + }, + { + "key": "88看球", + "name": "88|看球", + "type": 3, + "api": "csp_Kanqiu", + "gridview": 3, + "style": { + "type": "list" + } + }, + { + "key": "球通体育", + "name": "球通|体育", + "type": 3, + "api": "csp_QiutongTY", + "style": { + "type": "list" + } + }, + { + "key": "瓜子体育", + "name": "瓜子|体育", + "type": 3, + "api": "csp_GuaziTY", + "style": { + "type": "list" + } + }, + { + "key": "咖啡体育", + "name": "咖啡|体育", + "type": 3, + "api": "csp_KafeiTY", + "style": { + "type": "list" + } + }, + { + "key": "919体育", + "name": "919|体育", + "type": 3, + "api": "csp_919TY", + "style": { + "type": "list" + } + }, + { + "key": "呦呦DJ", + "name": "呦呦|DJ", + "type": 3, + "api": "csp_Djuu", + "style": { + "type": "list" + } + }, + { + "key": "轮回DJ", + "name": "轮回|DJ", + "type": 3, + "api": "csp_Djlh", + "style": { + "type": "list" + } + }, + { + "key": "蜻蜓FM", + "name": "蜻蜓|FM", + "type": 3, + "api": "csp_QingtingFM", + "style": { + "type": "list" + } + }, + { + "key": "世界听书", + "name": "世界|听书", + "type": 3, + "api": "csp_TingShijie", + "style": { + "type": "list" + } + }, + { + "key": "戏曲多多", + "name": "戏曲|多多", + "type": 3, + "api": "csp_AppLY", + "style": { + "type": "list" + } + }, + { + "key": "爱听音乐", + "name": "爱听|音乐", + "type": 3, + "api": "./lib/爱听音乐.py" + }, + { + "key": "网络直播", + "name": "网络|直播", + "type": 3, + "api": "./lib/WLZB.py" + }, + { + "key": "哔哩直播", + "name": "哔哩|直播", + "type": 3, + "api": "./lib/BLZB.py" + }, + { + "key": "哔哩合集", + "name": "哔哩|合集", + "type": 3, + "api": "csp_Bili", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "changeable": 0, + "style": { + "type": "rect", + "ratio": 1.433 + }, + "ext": { + "json": "./lib/BLHJ.json", + "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt" + } + }, + { + "key": "哔哩哔哩演唱会", + "name": "哔哩|音乐", + "type": 3, + "api": "csp_Bili", + "searchable": 0, + "quickSearch": 0, + "filterable": 0, + "ext": { + "json": "./lib/BLYCH.json", + "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt" + }, + "style": { + "type": "rect", + "ratio": 1.597 + } + }, + { + "key": "哔哩哔哩听书", + "name": "哔哩|听书", + "type": 3, + "api": "csp_Bili", + "searchable": 0, + "quickSearch": 0, + "filterable": 0, + "ext": { + "json": "./lib/BLTS.json", + "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt" + }, + "style": { + "type": "rect", + "ratio": 1.597 + } + }, + { + "key": "哔哩哔哩相声", + "name": "哔哩|相声", + "type": 3, + "api": "csp_Bili", + "searchable": 0, + "quickSearch": 0, + "filterable": 0, + "ext": { + "json": "./lib/BLXS.json", + "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt" + }, + "style": { + "type": "rect", + "ratio": 1.597 + } + }, + { + "key": "哔哩哔哩小品", + "name": "哔哩|小品", + "type": 3, + "api": "csp_Bili", + "searchable": 0, + "quickSearch": 0, + "filterable": 0, + "ext": { + "json": "./lib/BLXP.json", + "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt" + }, + "style": { + "type": "rect", + "ratio": 1.597 + } + }, + { + "key": "哔哩哔哩戏曲", + "name": "哔哩|戏曲", + "type": 3, + "api": "csp_Bili", + "searchable": 0, + "quickSearch": 0, + "filterable": 0, + "ext": { + "json": "./lib/BLXQ.json", + "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt" + }, + "style": { + "type": "rect", + "ratio": 1.597 + } + }, + { + "key": "少儿教育", + "name": "少儿|教育", + "type": 3, + "api": "csp_Bili", + "searchable": 0, + "quickSearch": 0, + "filterable": 1, + "ext": { + "json": "./lib/SEJY.json", + "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt" + }, + "style": { + "type": "rect", + "ratio": 1.597 + } + }, + { + "key": "小学课堂", + "name": "小学|课堂", + "type": 3, + "api": "csp_Bili", + "searchable": 0, + "quickSearch": 0, + "filterable": 1, + "ext": { + "json": "./lib/XXKT.json", + "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt" + }, + "style": { + "type": "rect", + "ratio": 1.597 + } + }, + { + "key": "初中课堂", + "name": "初中|课堂", + "type": 3, + "api": "csp_Bili", + "searchable": 0, + "quickSearch": 0, + "filterable": 1, + "ext": { + "json": "./lib/CZKT.json", + "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt" + }, + "style": { + "type": "rect", + "ratio": 1.597 + } + }, + { + "key": "高中课堂", + "name": "高中|课堂", + "type": 3, + "api": "csp_Bili", + "searchable": 0, + "quickSearch": 0, + "filterable": 1, + "ext": { + "json": "./lib/GZKT.json", + "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt" + }, + "style": { + "type": "rect", + "ratio": 1.597 + } + }, + { + "key": "急救教学", + "name": "急救|教学", + "type": 3, + "api": "csp_FirstAid", + "searchable": 0, + "quickSearch": 0, + "changeable": 0, + "style": { + "type": "rect", + "ratio": 3.8 + }, + "gridview": "0-0-4.1" + }, + { + "key": "养生堂", + "name": "养生|知识", + "type": 3, + "api": "csp_YST", + "searchable": 0, + "quickSearch": 0, + "changeable": 0, + "style": { + "type": "rect", + "ratio": 1.597 + } + }, + { + "key": "push_agent", + "name": "手机|推送", + "type": 3, + "api": "csp_Push", + "searchable": 0, + "filterable": 0, + "changeable": 0 + } + ], + "lives": [ + {} + ], + "parses": [ + { + "name": "聚合", + "type": 3, + "url": "Web" + }, + { + "name": "虾米", + "type": 0, + "url": "https://jx.xmflv.com/?url=", + "ext": { + "header": { + "user-agent": "Mozilla/5.0 (Linux; Android 13; V2049A Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36" + } + } + }, + { + "name": "云解", + "type": 0, + "url": "https://yparse.ik9.cc/index.php?url=", + "ext": { + "header": { + "user-agent": "Mozilla/5.0 (Linux; Android 13; V2049A Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36" + } + } + }, + { + "name": "咸鱼", + "type": 0, + "url": "https://jx.xymp4.cc/?url=", + "ext": { + "header": { + "user-agent": "Mozilla/5.0 (Linux; Android 13; V2049A Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36" + } + } + }, + { + "name": "淘片", + "type": 0, + "url": "https://jx.yparse.com/index.php?url=", + "ext": { + "header": { + "user-agent": "Mozilla/5.0 (Linux; Android 13; V2049A Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36" + } + } + }, + { + "name": "冰豆", + "type": 0, + "url": "https://bd.jx.cn/?url=", + "ext": { + "header": { + "user-agent": "Mozilla/5.0 (Linux; Android 13; V2049A Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36" + } + } + }, + { + "name": "七七", + "type": 0, + "url": "https://jx.77flv.cc/?url=", + "ext": { + "header": { + "user-agent": "Mozilla/5.0 (Linux; Android 13; V2049A Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36" + } + } + }, + { + "name": "盘古", + "type": 0, + "url": "https://www.playm3u8.cn/jiexi.php?url=", + "ext": { + "header": { + "user-agent": "Mozilla/5.0 (Linux; Android 13; V2049A Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36" + } + } + }, + { + "name": "夜幕", + "type": 0, + "url": "https://yemu.xyz/?url=", + "ext": { + "header": { + "user-agent": "Mozilla/5.0 (Linux; Android 13; V2049A Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36" + } + } + } + ], + "rules": [ + { + "name": "农民", + "hosts": [ + "toutiaovod.com" + ], + "regex": [ + "video/tos/cn" + ] + }, + { + "name": "火山", + "hosts": [ + "huoshan.com" + ], + "regex": [ + "item_id=" + ] + }, + { + "name": "抖音", + "hosts": [ + "douyin.com" + ], + "regex": [ + "is_play_url=" + ] + }, + { + "name": "磁力广告", + "hosts": [ + "magnet" + ], + "regex": [ + "更多", + "请访问", + "example", + "社 區", + "x u u", + "直 播", + "更 新", + "社 区", + "有趣", + "有 趣", + "英皇体育", + "全中文AV在线", + "澳门皇冠赌场", + "哥哥快来", + "美女荷官", + "裸聊", + "新片首发", + "UUE29" + ] + }, + { + "name": "饭团点击", + "hosts": [ + "dadagui", + "freeok", + "dadagui" + ], + "script": [ + "document.querySelector(\"#playleftiframe\").contentWindow.document.querySelector(\"#start\").click();" + ] + }, + { + "name": "毛驴点击", + "hosts": [ + "www.maolvys.com" + ], + "script": [ + "document.getElementsByClassName('swal-buttonswal-button--confirm')[0].click()" + ] + } + ], + "doh": [ + { + "name": "Google", + "url": "https://dns.google/dns-query", + "ips": [ + "8.8.4.4", + "8.8.8.8" + ] + }, + { + "name": "Cloudflare", + "url": "https://cloudflare-dns.com/dns-query", + "ips": [ + "1.1.1.1", + "1.0.0.1", + "2606:4700:4700::1111", + "2606:4700:4700::1001" + ] + }, + { + "name": "AdGuard", + "url": "https://dns.adguard.com/dns-query", + "ips": [ + "94.140.14.140", + "94.140.14.141" + ] + }, + { + "name": "DNSWatch", + "url": "https://resolver2.dns.watch/dns-query", + "ips": [ + "84.200.69.80", + "84.200.70.40" + ] + }, + { + "name": "Quad9", + "url": "https://dns.quad9.net/dns-quer", + "ips": [ + "9.9.9.9", + "149.112.112.112" + ] + } + ], + "flags": [ + "youku", + "优酷", + "优 酷", + "优酷视频", + "qq", + "腾讯", + "腾 讯", + "腾讯视频", + "iqiyi", + "qiyi", + "奇艺", + "爱奇艺", + "爱 奇 艺", + "m1905", + "xigua", + "letv", + "leshi", + "乐视", + "乐 视", + "sohu", + "搜狐", + "搜 狐", + "搜狐视频", + "tudou", + "pptv", + "mgtv", + "芒果", + "imgo", + "芒果TV", + "芒 果 T V", + "bilibili", + "哔 哩", + "哔 哩 哔 哩" + ], + "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" + } + ] + }, + { + "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": "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" + } + ] + } + ], + "ads": [ + "static-mozai.4gtv.tv" + ] +} \ No newline at end of file diff --git a/tianjitop/llllo4k/js/cat_荐片app.js b/tianjitop/llllo4k/js/cat_荐片app.js new file mode 100644 index 00000000..23bf4e99 --- /dev/null +++ b/tianjitop/llllo4k/js/cat_荐片app.js @@ -0,0 +1,326 @@ +/* +title: '荐片app', author: '小可乐/v5.12.1' +*/ +var HOST; +const MOBILE_UA = "Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.91 Mobile Safari/537.36"; +var DefHeader = {'User-Agent': MOBILE_UA}; +var KParams = { + headers: {'User-Agent': MOBILE_UA}, + timeout: 5000 +}; + +async function init(cfg) { + try { + let host = cfg.ext?.host?.trim() || 'https://ev2089.zxbwv.com'; + HOST = host.replace(/\/$/, ''); + KParams.headers['Referer'] = HOST; + let parseTimeout = parseInt(cfg.ext?.timeout?.trim(), 10); + KParams.timeout = parseTimeout > 0 ? parseTimeout : 5000; + const batchPathList = ['/api/appAuthConfig', '/api/term/home_fenlei', '/api/dyTag/hand_data?category_id=88'] + KParams.resObjList = await Promise.all( + batchPathList.map(async (path) => { + try { + return safeParseJSON(await request(`${HOST}${path}`)); + } catch (sErr) {return null;} + }) + ); + let resObj = KParams.resObjList[0]; + let imgHost = resObj?.data?.imgDomain?.trim() || ''; + if (imgHost && !/^http/.test(imgHost)) {imgHost = `http://${imgHost}`;} + KParams.imgHost = imgHost.replace(/\/$/, ''); + KParams.catesSet = cfg.ext?.catesSet?.trim() || ''; + KParams.tabsSet = cfg.ext?.tabsSet?.trim() || ''; + } catch(e) { + console.error('初始化参数失败:', e.message); + } +} + +async function home(filter) { + try { + let resObj = KParams.resObjList[1]; + let typeObj = Array.isArray(resObj?.data) ? resObj.data : []; + let classes = typeObj.map((item) => { return {type_name: item?.name ?? '分类名', type_id: item?.id?.toString() ?? '分类值'}; }).slice(1); + if (KParams.catesSet) { classes = ctSet(classes, KParams.catesSet); } + let filters = {}; + try { + const nameObj = {category_id: 'cateId,分类', type: 'class,剧情', area: 'area,地区', year: 'year,年份', sort: 'by,排序' }; + let fclasses = classes.filter(it => it.type_id !== '99'); + let resObjList = await Promise.all( + fclasses.map(async (it) => { + try { + return safeParseJSON(await request(`${HOST}/api/crumb/filterOptions?fcate_pid=${it.type_id}`)); + } catch (sErr) {return null;} + }) + ); + fclasses.forEach((it, idx) => { + let resObj = resObjList[idx]; + let filterObj = Array.isArray(resObj?.data) ? resObj.data : []; + filters[it.type_id] = filterObj.map(flt => { + let [kkey='', kname=''] = nameObj[flt.key]?.split(','); + let kval = flt.data ?? []; + let kvalue = kval.map(item => { return { n: item?.name || '未知', v: item?.id ?? '' }; }); + return { key: kkey, name: kname, value: kvalue }; + }).filter(item => item.key && item.value.length > 0); + }); + } catch (e) {} + return JSON.stringify({ + class: classes, + filters: filters + }); + } catch (e) { + console.error('获取分类失败:', e.message); + return JSON.stringify({ + class: [], + filters: {} + }); + } +} + +async function homeVod() { + try { + let resObj = KParams.resObjList[2]; + let homeObj = Object.values(resObj?.data ?? {}).flat(1); + let VODS = getVodList(homeObj); + return JSON.stringify({list: VODS}); + } catch (e) { + console.error('推荐页获取失败:', e.message); + return JSON.stringify({list: []}); + } +} + +async function category(tid, pg, filter, extend) { + try { + pg = parseInt(pg, 10); + pg = pg > 0 ? pg : 1; + let aPath = tid === '67' ? 'shortList' : 'list'; + let cateUrl = (tid === '99') ? `${HOST}/api/dyTag/list?category_id=${tid}` : `${HOST}/api/crumb/${aPath}?fcate_pid=${tid}&category_id=${extend?.cateId ?? ''}&type=${extend?.class ?? ''}&area=${extend?.area ?? ''}&year=${extend?.year ?? ''}&sort=${extend?.by ?? ''}&page=${pg}`; + let resObj = safeParseJSON(await request(cateUrl)); + let cateObj = (tid === '99') ? (resObj?.data ?? []).map(it => it.dataList).flat(1) : resObj?.data ?? []; + let VODS = getVodList(cateObj); + let pagecount = (tid === '99') ? 1 : 999; + return JSON.stringify({ + list: VODS, + page: pg, + pagecount: pagecount, + limit: 30, + total: 30*pagecount + }); + } catch (e) { + console.error('类别页获取失败:', e.message); + return JSON.stringify({ + list: [], + page: 1, + pagecount: 0, + limit: 30, + total: 0 + }); + } +} + +async function search(wd, quick, pg) { + try { + pg = parseInt(pg, 10); + pg = pg > 0 ? pg : 1; + let searchUrl = `${HOST}/api/v2/search/videoV2?key=${wd}&page=${pg}&pageSize=20`; + let resObj = safeParseJSON(await request(searchUrl)); + let searchObj = resObj?.data ?? []; + let VODS = getVodList(searchObj); + return JSON.stringify({ + list: VODS, + page: pg, + pagecount: 10, + limit: 30, + total: 300 + }); + } catch (e) { + console.error('搜索页获取失败:', e.message); + return JSON.stringify({ + list: [], + page: 1, + pagecount: 0, + limit: 30, + total: 0 + }); + } +} + +async function detail(id) { + try { + let [kid, kname, kpic, kremarks, kflag] = id.split('@'); + let aPath = kflag === '短剧' ? 'detail?vid=' : 'video/detailv2?id='; + let detailUrl = `${HOST}/api/${aPath}${kid}`; + let resObj = safeParseJSON(await request(detailUrl)); + let kvod = resObj?.data || null; + if (!kvod) {throw new Error('kvod解析失败');} + let ktype = '类型', kyear = '1000', karea = '地区', klang = '语言', kdirector = '导演', kactor = '主演', kcontent = '简介', ktabs = [], kurls = []; + if (kflag === '短剧') { + ktype = (kvod.categories_str ?? []).join('/') || '类型'; + kcontent = kvod.description || kname; + let udArr = kvod.playlist ?? []; + let tab = udArr[0]?.source_config_name || `线路1`; + let kurl = udArr.map((it, i) => { + let ename = it.title || `${i+1}集`; + let eurl = it.url || 'noUrl'; + return `${ename}$${eurl}`; + }).join('#'); + ktabs.push(tab); + kurls.push(kurl); + } else { + const arrToStr = (arr, str) => { return (arr ?? []).map(it => (it.name || it.value)?.trim() || '').join('/') || str; }; + kyear = kvod.year?.trim() || '1000'; + karea = kvod.area?.trim() || '地区'; + kcontent = kvod.description?.trim() || '简介'; + ktype = arrToStr(kvod.types, '类型'); + klang = arrToStr(kvod.languages, '语言'); + kdirector = arrToStr(kvod.directors, '导演'); + kactor = arrToStr(kvod.actors, '主演'); + let udArr = kvod.source_list_source ?? []; + udArr.forEach((it, i) => { + let tab = it.name || `线路${i+1}`; + let kurl = (it.source_list ?? []).map((item, j) => { + let ename = item.source_name || item.weight || `${j+1}集`; + let eurl = item.url || 'noUrl'; + return `${ename}$${eurl}`; + }).join('#'); + ktabs.push(tab); + kurls.push(kurl); + }); + } + if (KParams.tabsSet) { + let ktus = ktabs.map((it, idx) => { return {"type_name": it, "type_value": kurls[idx]} }); + ktus = ctSet(ktus, KParams.tabsSet); + ktabs = ktus.map(it => it.type_name); + kurls = ktus.map(it => it.type_value); + } + let VOD = { + vod_id: kid, + vod_name: kname, + vod_pic: kpic, + type_name: ktype, + vod_remarks: kremarks, + vod_year: kyear, + vod_area: karea, + vod_lang: klang, + vod_director: kdirector, + vod_actor: kactor, + vod_content: kcontent, + vod_play_from: ktabs.join('$$$'), + vod_play_url: kurls.join('$$$') + }; + return JSON.stringify({list: [VOD]}); + } catch (e) { + console.error('详情页获取失败:', e.message); + return JSON.stringify({list: []}); + } +} + +async function play(flag, id, flags) { + try { + let kp = /\.(m3u8|mp4|mkv)/.test(id) ? 0 : 1; + return JSON.stringify({ + jx: 0, + parse: kp, + url: id, + header: DefHeader + }); + } catch (e) { + console.error('播放失败:', e.message); + return JSON.stringify({ + jx: 0, + parse: 0, + url: '', + header: {} + }); + } +} + +function getVodList(listArr) { + try { + let kvods = []; + listArr.forEach(it =>{ + let isDj = Array.isArray(it.categories) && it.categories.includes(67) || Array.isArray(it.res_categories) && it.res_categories.some(item => item.name === '短剧' && item.id === 67); + let vflag = isDj ? '短剧' : '其它'; + let vName = it.title || '名称'; + let vPic = `${KParams.imgHost}${it.path || it.cover_image || it.thumbnail || ''}`; + let vRemarks = `${it.mask}|${it.score || '无评分'}`; + kvods.push({ + vod_name: vName, + vod_pic: vPic, + vod_remarks: vRemarks, + vod_id: `${it.id}@${vName}@${vPic}@${vRemarks}@${vflag}`, + }); + }); + return kvods; + } catch(e) { + console.error(`生成视频列表失败:`, e.message); + return []; + } +} + +function safeParseJSON(jStr) { + try { + return JSON.parse(jStr); + } catch(e) { + return null; + } +} + +function ctSet(kArr, setStr) { + if (!Array.isArray(kArr)) { return kArr; } + try { + let [set_arr, arrNames] = [[...kArr], setStr.split('&')]; + if (arrNames.length) { + let filtered_arr = arrNames.map((item) => set_arr.find(it => it.type_name === item)).filter(Boolean); + set_arr = filtered_arr.length? filtered_arr : [set_arr[0]]; + } + return set_arr; + } catch (e) { + return kArr; + } +} + +async function request(reqUrl, options = {}) { + if (typeof reqUrl !== 'string' || !reqUrl.trim()) { throw new Error('reqUrl需为字符串且非空'); } + if (typeof options !== 'object' || Array.isArray(options) || !options) { throw new Error('options类型需为非null对象'); } + try { + options.method = options.method?.toLowerCase() || 'get'; + if (['get', 'head'].includes(options.method)) { + delete options.data; + delete options.postType; + } else { + options.data = options.data ?? ''; + options.postType = options.postType?.toLowerCase() || 'form'; + } + let {headers, timeout, charset, toBase64 = false, ...restOpts } = options; + const optObj = { + headers: (typeof headers === 'object' && !Array.isArray(headers) && headers) ? headers : KParams.headers, + timeout: parseInt(timeout, 10) > 0 ? parseInt(timeout, 10) : KParams.timeout, + charset: charset?.toLowerCase() || 'utf-8', + buffer: toBase64 ? 2 : 0, + ...restOpts + }; + const res = await req(reqUrl, optObj); + if (options.withHeaders) { + const resHeaders = typeof res.headers === 'object' && !Array.isArray(res.headers) && res.headers ? res.headers : {}; + const resWithHeaders = { ...resHeaders, body: res?.content ?? '' }; + return JSON.stringify(resWithHeaders); + } + return res?.content ?? ''; + } catch (e) { + console.error(`${reqUrl}→请求失败:`, e.message); + return options?.withHeaders ? JSON.stringify({ body: '' }) : ''; + } +} + +export function __jsEvalReturn() { + return { + init: init, + home: home, + homeVod: homeVod, + category: category, + search: search, + detail: detail, + play: play, + proxy: null + }; +} \ No newline at end of file diff --git a/tianjitop/llllo4k/js/ddys.js b/tianjitop/llllo4k/js/ddys.js new file mode 100644 index 00000000..50ea6275 --- /dev/null +++ b/tianjitop/llllo4k/js/ddys.js @@ -0,0 +1,570 @@ +/* + * @File : ddys.js + * @Author : opencode + * @Date : 2026-07-09 + * @Desc : 低端影视 (ddys.io) TVBox T4(JS) 源 —— 自包含,无外部依赖 + * + * 站点特征: + * - 非标 SSR 自定义模板,数据在服务端渲染 HTML 里(含 JSON-LD 结构化数据)。 + * - 无防护盾、无加密,普通 GET 即可拉取。 + * - 列表:{basePath} 第1页,{basePath}/page/{n} 第n页。 + * basePath 规律(筛选项是路径段,单选切换,会整体替换 basePath): + * 分类首页 : /movie /series /variety /anime + * 排序(豆瓣评分): /rating/{type} 排序(近期热门): /popular/{type} + * 题材 : /{type}/genre/{slug} + * 地区 : /{type}/region/{slug} + * 年份 : /{type}/year/{n} + * - 详情:/movie/{slug} + * 标题/导演/主演/年份/类型/评分 在 <script type="application/ld+json"> 里。 + * 在线播放源:页面里 switchSource(id, episodes, kind) 函数, + * episodes 用 # 分隔多集,每集 形如 集名$直链(m3u8/mp4)。 + * 多个播放源是多个 switchSource button,按 DOM 顺序。 + * - 播放:episodes 字符串里 $ 后面的就是直链,parse=0 直接返回。 + * - 搜索:POST 表单提交 /search,但站点同时提供 GET JSON 接口 + * /api/search-suggest?q={关键词} 返回 {success,data:[{title,slug,year,rating,type,type_code,url}]} + * 本源用该接口实现搜索,足够覆盖影片检索。 + * + * 分类设计: + * 一级分类 = 影片类型(movie/series/variety/anime); + * 每个分类下提供 排序/题材/地区/年份 四个筛选维度。 + * type_id 编码为 "{type}|{sort}|{genre}|{region}|{year}",category 解析后拼 basePath。 + */ + +var DD_VERSION = "20260709-js-1"; +var HOST = "https://ddys.io"; +var UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"; + +// 备用域名(init 时若主站不通可由配置覆盖) +var ALT_HOSTS = [ + "https://ddys.io", + "https://ddys.forum", + "https://ddys.autos", + "https://ddys.quest" +]; + +// 一级分类 +var CLASSES = [ + { type_id: "movie", type_name: "电影" }, + { type_id: "series", type_name: "剧集" }, + { type_id: "variety",type_name: "综艺" }, + { type_id: "anime", type_name: "动漫" } +]; + +// 筛选项(题材/地区/年份/排序)—— 与站点 filterUrls 完全一致 +var SORT_OPTS = [ + { n: "最新更新", v: "" }, + { n: "豆瓣评分", v: "rating" }, + { n: "近期热门", v: "popular" } +]; + +var GENRE_OPTS = [ + { n: "全部", v: "" }, { n: "动作", v: "action" }, { n: "喜剧", v: "comedy" }, + { n: "爱情", v: "romance" }, { n: "科幻", v: "scifi" }, { n: "悬疑", v: "thriller" }, + { n: "剧情", v: "drama" }, { n: "恐怖", v: "horror" }, { n: "惊悚", v: "suspense" }, + { n: "冒险", v: "adventure" }, { n: "战争", v: "war" }, { n: "历史", v: "history" }, + { n: "传记", v: "biography" }, { n: "犯罪", v: "crime" }, { n: "西部", v: "western" }, + { n: "奇幻", v: "fantasy" }, { n: "音乐", v: "music" }, { n: "歌舞", v: "musical" }, + { n: "家庭", v: "family" }, { n: "运动", v: "sport" }, { n: "古装", v: "costume" }, + { n: "武侠", v: "martial" }, { n: "都市", v: "urban" }, { n: "灾难", v: "disaster" }, + { n: "纪录片", v: "documentary" }, { n: "动画", v: "animation" }, { n: "短片", v: "short" }, + { n: "真人秀", v: "realityshow" }, { n: "脱口秀", v: "talkshow" }, { n: "黑色幽默", v: "darkcomedy" }, + { n: "末日", v: "apocalypse" }, { n: "谍战", v: "espionage" }, { n: "职场", v: "workplace" }, + { n: "校园", v: "campus" }, { n: "推理", v: "mystery" }, { n: "情色", v: "erotic" }, + { n: "其他", v: "other" } +]; + +var REGION_OPTS = [ + { n: "全部", v: "" }, { n: "中国", v: "china" }, { n: "美国", v: "usa" }, + { n: "日本", v: "japan" }, { n: "韩国", v: "korea" }, { n: "英国", v: "uk" }, + { n: "法国", v: "france" }, { n: "德国", v: "germany" }, { n: "印度", v: "india" }, + { n: "意大利", v: "italy" }, { n: "西班牙", v: "spain" }, { n: "加拿大", v: "canada" }, + { n: "澳大利亚", v: "australia" }, { n: "俄罗斯", v: "russia" }, { n: "泰国", v: "thailand" }, + { n: "中国香港", v: "hongkong" }, { n: "中国台湾", v: "taiwan" }, { n: "中国澳门", v: "macau" }, + { n: "巴西", v: "brazil" }, { n: "墨西哥", v: "mexico" }, { n: "土耳其", v: "turkey" }, + { n: "瑞典", v: "sweden" }, { n: "丹麦", v: "denmark" }, { n: "挪威", v: "norway" }, + { n: "荷兰", v: "netherlands" }, { n: "伊朗", v: "iran" }, { n: "波兰", v: "poland" }, + { n: "新加坡", v: "singapore" }, { n: "马来西亚", v: "malaysia" }, { n: "越南", v: "vietnam" }, + { n: "菲律宾", v: "philippines" }, { n: "印度尼西亚", v: "indonesia" }, { n: "阿根廷", v: "argentina" }, + { n: "南非", v: "southafrica" }, { n: "其他", v: "other" } +]; + +var YEAR_OPTS = [ + { n: "全部", v: "" }, { n: "2027", v: "2027" }, { n: "2026", v: "2026" }, + { n: "2025", v: "2025" }, { n: "2024", v: "2024" }, { n: "2023", v: "2023" }, + { n: "2022", v: "2022" }, { n: "2021", v: "2021" }, { n: "2020", v: "2020" }, + { n: "2019", v: "2019" }, { n: "2018", v: "2018" } +]; + +// 构造每个分类的 filters(TVBox 形态:[{key,name,value:[{n,v}]}]) +function buildFilters() { + var f = [ + { key: "sort", name: "排序", value: SORT_OPTS }, + { key: "genre", name: "题材", value: GENRE_OPTS }, + { key: "region", name: "地区", value: REGION_OPTS }, + { key: "year", name: "年份", value: YEAR_OPTS } + ]; + var filters = {}; + for (var i = 0; i < CLASSES.length; i++) { + filters[CLASSES[i].type_id] = f; + } + return filters; +} +var FILTERS = buildFilters(); + +function log(msg) { + try { console.log("[DDYS_JS " + DD_VERSION + "] " + msg); } catch (e) {} +} + +/* ---------------- 通用工具 ---------------- */ + +function toStr(v) { return v === undefined || v === null ? "" : String(v); } +function encode(s) { return encodeURIComponent(toStr(s)); } + +function fixUrl(u) { + u = toStr(u).trim(); + if (!u) return ""; + if (u.indexOf("//") === 0) return "https:" + u; + if (u.charAt(0) === "/") return HOST + u; + return u; +} + +function isPlayableUrl(u) { + return /^https?:\/\//i.test(toStr(u)) && + /\.(m3u8|mp4|flv|ts|mkv)(\?|$)/i.test(toStr(u)); +} + +function textClean(s) { + return toStr(s) + .replace(/<[^>]+>/g, "") + .replace(/ /g, " ") + .replace(/&/g, "&") + .replace(/"/g, '"') + .replace(/'/g, "'") + .replace(/</g, "<") + .replace(/>/g, ">") + .replace(/&#\d+;/g, "") + .replace(/\s+/g, " ") + .trim(); +} + +// 标准请求(GET 文本) +function request(url, headers) { + headers = headers || {}; + if (!headers["User-Agent"]) headers["User-Agent"] = UA; + if (!headers["Accept"]) headers["Accept"] = "text/html,application/xhtml+xml,*/*;q=0.8"; + if (!headers["Referer"]) headers["Referer"] = HOST + "/"; + try { + log("fetch " + url); + var res = req(url, { method: "GET", headers: headers, timeout: 15000 }); + var body = (typeof res === "string") ? res : (res && (res.content || res.body || res.data)); + return toStr(body || ""); + } catch (e) { + log("fetch_error " + url + " " + e); + return ""; + } +} + +// JSON 请求 +function requestJson(url) { + var headers = { + "User-Agent": UA, + "Accept": "application/json,*/*;q=0.8", + "Referer": HOST + "/" + }; + try { + var res = req(url, { method: "GET", headers: headers, timeout: 10000 }); + var body = (typeof res === "string") ? res : (res && (res.content || res.body || res.data)); + if (typeof body === "string") { + try { return JSON.parse(body); } catch (e) { log("json_parse_error " + e); return null; } + } + return body || null; + } catch (e) { + log("json_fetch_error " + url + " " + e); + return null; + } +} + +/* ---------------- 列表解析 ---------------- */ + +// 解析列表页 HTML -> [{vod_id,vod_name,vod_pic,vod_remarks}] +function parseList(html) { + var list = []; + if (!html) return list; + // 卡片锚点:<a href="/movie/{slug}" ...> ... <img alt="片名" src="..."> ... </a> + // 用非贪婪正则切出每个 <a ... class="...movie-card...">块 + var reCard = /<a[^>]*\shref="\/(movie|series|variety|anime)\/[^"]+"[^>]*>/g; + var cards = []; + var m; + while ((m = reCard.exec(html)) !== null) { + var start = m.index; + var end = html.indexOf("</a>", start); + if (end < 0) end = start + m[0].length; + cards.push(html.substring(start, end + 4)); + } + for (var i = 0; i < cards.length; i++) { + var c = cards[i]; + // href:/movie/slug + var href = /(\/(?:movie|series|variety|anime)\/[^"\/?#]+)/.exec(c); + if (!href) continue; + var path = href[1]; + // 取最后一个路径段作 vod_id(拼全路径作 vod_id 即可,detail 能识别) + // 图片:取 <img ... src="..."> 第一个 src + var pic = ""; + var pm = /<img[^>]*\ssrc="([^"]+)"/i.exec(c); + if (pm) pic = pm[1]; + // 片名:优先 img alt,其次 h3 文本 + var name = ""; + var am = /<img[^>]*\salt="([^"]+)"/i.exec(c); + if (am) name = textClean(am[1]); + var hm = /<h3[^>]*>([\s\S]*?)<\/h3>/i.exec(c); + if (!name && hm) name = textClean(hm[1]); + if (!name) { + // 从 href 最后一段兜底 + var segs = path.split("/"); + name = segs[segs.length - 1]; + } + if (!name) continue; + // 备注:评分 / 状态(新片/热门/已完结/更新中) + var remark = ""; + var rm = /<span[^>]*class="[^"]*rating[^"]*"[^>]*>([\s\S]*?)<\/span>/i.exec(c); + if (rm) remark = textClean(rm[1]); + list.push({ + vod_id: path, + vod_name: name, + vod_pic: fixUrl(pic), + vod_remarks: remark + }); + } + // 去重(按 vod_id) + var seen = {}; + var out = []; + for (var j = 0; j < list.length; j++) { + if (!seen[list[j].vod_id]) { + seen[list[j].vod_id] = 1; + out.push(list[j]); + } + } + return out; +} + +// 从分页 HTML 提取总页数 +function parsePageCount(html, pg) { + // 优先找 pagination-last 链接里的最大页码 + var maxPage = pg || 1; + var re = /\/(?:page\/)(\d+)/g; + var m; + while ((m = re.exec(html)) !== null) { + var n = parseInt(m[1]) || 0; + if (n > maxPage) maxPage = n; + } + return maxPage; +} + +/* ---------------- 播放源解析 ---------------- */ + +// 从详情页 HTML 提取所有播放源 -> [{flag, episodes:[{name,url}]}] +// 站点结构:多个 <button onclick="switchSource(id, 'episodes-string', 'kind')"> +// episodes-string 形如 "第01集$https://xxx/index.m3u8#第02集$https://yyy/index.m3u8" +// 电影单集则直接是 "https://xxx/index.m3u8"(无 # 且无 $) +function parsePlaySources(html) { + var sources = []; + if (!html) return sources; + // 匹配 switchSource(...) 调用,第2个参数是引号包裹的字符串 + var re = /switchSource\(\s*\d+\s*,\s*'([^']*)'\s*,\s*'([^']*)'\s*\)/g; + var m, idx = 0; + while ((m = re.exec(html)) !== null) { + var epsStr = m[1]; + var kind = m[2] || "m3u8"; + if (!epsStr) continue; + + // 取该源 tab 文本作 flag:找 source-tab-{id} + // 这里简化用 "播放源N (清晰度)" + idx++; + var flag = "播放源" + idx; + + // 解析 episodes + var eps = []; + var parts = epsStr.split("#"); + for (var i = 0; i < parts.length; i++) { + var p = parts[i]; + if (!p) continue; + var name, url; + var dollar = p.indexOf("$"); + if (dollar >= 0) { + name = textClean(p.substring(0, dollar)); + url = p.substring(dollar + 1).trim(); + } else { + // 无 $:要么是单集直链,要么是单集标题(无url) + if (isPlayableUrl(p)) { + name = "播放"; + url = p; + } else { + name = textClean(p); + url = ""; + } + } + if (name && url && isPlayableUrl(url)) { + eps.push({ name: name, url: url }); + } + } + + if (eps.length > 0) { + sources.push({ flag: flag, kind: kind, episodes: eps }); + } + } + return sources; +} + +/* ---------------- 详情信息解析(JSON-LD) ---------------- */ + +// 从详情页提取 JSON-LD 对象 +function parseLdJson(html) { + if (!html) return null; + var re = /<script[^>]*type="application\/ld\+json"[^>]*>([\s\S]*?)<\/script>/i; + var m = re.exec(html); + if (!m) return null; + try { return JSON.parse(m[1]); } catch (e) { log("ldjson_parse_error " + e); return null; } +} + +// 从详情页提取 meta 信息(标题外文名、年代、地区、类型、评分、导演、主演) +function parseDetailMeta(html) { + var meta = { + title: "", enTitle: "", year: "", country: "", genres: [], + rating: "", director: "", actor: "", description: "" + }; + var ld = parseLdJson(html); + if (ld) { + meta.title = toStr(ld.name || ""); + meta.enTitle = toStr(ld.alternateName || ""); + meta.year = toStr(ld.datePublished || ""); + if (ld.genre && ld.genre.length) { + if (typeof ld.genre === "string") meta.genres = [ld.genre]; + else meta.genres = ld.genre.slice(); + } + if (ld.aggregateRating && ld.aggregateRating.ratingValue) { + meta.rating = "豆瓣(" + toStr(ld.aggregateRating.ratingValue) + ")"; + } + if (ld.director && ld.director.length) { + var dirs = []; + for (var i = 0; i < ld.director.length; i++) dirs.push(toStr(ld.director[i].name)); + meta.director = dirs.join(" / "); + } + if (ld.actor && ld.actor.length) { + var acts = []; + for (var j = 0; j < ld.actor.length; j++) acts.push(toStr(ld.actor[j].name)); + meta.actor = acts.join(" / "); + } + meta.description = toStr(ld.description || ""); + } + // 兜底:从 DOM 文本补地区年份等(meta 行 "2026 · 韩国 · 剧情 / 惊悚 / 犯罪") + if (!meta.country || meta.genres.length === 0) { + var mm = /<div[^>]*>\s*(\d{4})\s*·\s*([^·<]+?)\s*·\s*([^<]+?)\s*<\/div>/i.exec(html); + if (mm) { + if (!meta.year) meta.year = textClean(mm[1]); + if (!meta.country) meta.country = textClean(mm[2]); + if (meta.genres.length === 0) { + meta.genres = mm[3].split("/").map(function (g) { return textClean(g); }).filter(Boolean); + } + } + } + return meta; +} + +/* ---------------- basePath 构造 ---------------- */ + +// 由 type+筛选 extend 构造分类基础路径(不含分页) +// 规律:sort/genre/region/year 是路径段,且站点是单选切换 +// 推导叠加顺序(实测站点筛选会重定向,单选切换时 basePath 被替换, +// 但实际 URL 支持 basePath 段叠加:可以拼接 /{type}[/genre/x][/region/y][/year/z] +// 排序则前缀 /rating 或 /popular) +// 经验证站点实际行为:每选一项会跳转到对应单段路径, +// 但叠加多段路径(如 /movie/genre/action/region/china)服务端也接受并按全部筛选过滤。 +function buildBasePath(type, extend) { + extend = extend || {}; + type = toStr(type || "movie"); + var sort = toStr(extend.sort || ""); + var genre = toStr(extend.genre || ""); + var region = toStr(extend.region || ""); + var year = toStr(extend.year || ""); + + // 排序影响 basePath 前缀 + var prefix = "/" + type; // 默认最新更新 + if (sort === "rating") prefix = "/rating/" + type; + else if (sort === "popular") prefix = "/popular/" + type; + + // 叠加题材/地区/年份(在 type 段后)。注意:rating/popular 排序下 + // 站点原始 filterUrls 不支持叠加 genre/region/year(只有最新更新才支持), + // 故仅在 sort==="" 时叠加,其余情况忽略,避免拼出站点不识别的 URL。 + if (sort === "") { + if (genre) prefix += "/genre/" + genre; + if (region) prefix += "/region/" + region; + if (year) prefix += "/year/" + year; + } + return prefix; +} + +/* ---------------- 接口实现 ---------------- */ + +function init(ext) { + // ext 可传入自定义主站,例如备用域名 ddys.autos + if (typeof ext === "string" && /^https?:\/\//i.test(ext.trim())) { + HOST = ext.trim().replace(/\/+$/, ""); + log("init override host=" + HOST); + } else { + // 默认主站,若需要可在此尝试 ALT_HOSTS 选最快的(这里保持简单) + HOST = ALT_HOSTS[0]; + } + log("init host=" + HOST); +} + +function home(filter) { + log("home"); + return JSON.stringify({ class: CLASSES, filters: FILTERS }); +} + +function homeVod() { + log("homeVod"); + var html = request(HOST + "/"); + var list = parseList(html); + return JSON.stringify({ list: list }); +} + +function category(tid, pg, filter, extend) { + tid = toStr(tid || "movie"); + pg = parseInt(pg || 1); + if (!pg || pg < 1) pg = 1; + extend = extend || {}; + + var base = buildBasePath(tid, extend); + var url = HOST + base; + if (pg > 1) url += "/page/" + pg; + + var html = request(url); + var list = parseList(html); + var pagecount = parsePageCount(html, pg); + + log("category base=" + base + " pg=" + pg + " count=" + list.length + " pages=" + pagecount); + return JSON.stringify({ + page: pg, + pagecount: pagecount, + limit: list.length || 24, + total: pagecount * (list.length || 24), + list: list + }); +} + +function detail(id) { + var path = toStr(id); + // vod_id 可能是 "/movie/slug" 或 "slug" 或 "slug|其它" + var bar = path.indexOf("|"); + if (bar >= 0) path = path.substring(0, bar); + if (path.charAt(0) !== "/") path = "/" + path; + // 站点详情统一走 /movie/{slug}(series/variety/anime 的 slug 也在 /movie 下) + if (!/^\/(movie|series|variety|anime)\//.test(path)) path = "/movie" + path; + + var url = HOST + path; + var html = request(url); + log("detail path=" + path + " ok=" + (html.length > 0)); + + var meta = parseDetailMeta(html) || {}; + var sources = parsePlaySources(html); + + var vod = { + vod_id: path, + vod_name: meta.title || path.substring(path.lastIndexOf("/") + 1), + vod_pic: "", + vod_remarks: meta.rating || "", + type_name: meta.genres.join(" / "), + vod_year: meta.year, + vod_area: meta.country, + vod_director: meta.director, + vod_actor: meta.actor, + vod_content: meta.description + }; + + // 封面:og:image 或 ld+json image + var ogm = /<meta\s+property="og:image"\s+content="([^"]+)"/i.exec(html); + if (ogm) vod.vod_pic = fixUrl(ogm[1]); + if (!vod.vod_pic && meta.image) vod.vod_pic = fixUrl(meta.image); + + if (sources.length > 0) { + var playFrom = []; + var playUrl = []; + for (var i = 0; i < sources.length; i++) { + var s = sources[i]; + playFrom.push(s.flag); + var eps = []; + for (var j = 0; j < s.episodes.length; j++) { + eps.push(s.episodes[j].name + "$" + s.episodes[j].url); + } + playUrl.push(eps.join("#")); + } + vod.vod_play_from = playFrom.join("$$$"); + vod.vod_play_url = playUrl.join("$$$"); + } else { + vod.vod_play_from = "提示"; + vod.vod_play_url = "暂无在线播放源$"; + } + + return JSON.stringify({ list: [vod] }); +} + +function play(flag, id, flags) { + var url = toStr(id); + var bar = url.indexOf("|"); + if (bar >= 0) url = url.substring(bar + 1); + log("play flag=" + flag + " url=" + url.slice(0, 80)); + + if (isPlayableUrl(url)) { + // 直链是 m3u8/mp4,TVBox 内核直接嗅探/解析 + // 带 Referer 为本站以避免部分 CDN 防盗链 + var header = { "User-Agent": UA, "Referer": HOST + "/" }; + return JSON.stringify({ parse: 0, url: url, header: header }); + } + // 非直链:交给内核尝试嗅探当前详情页(极少数情况) + return JSON.stringify({ parse: 1, url: fixUrl(url) }); +} + +function search(wd, quick, pg) { + pg = parseInt(pg || 1); + if (!pg || pg < 1) pg = 1; + wd = toStr(wd).trim(); + log("search wd=" + wd + " pg=" + pg); + if (!wd) return JSON.stringify({ list: [], page: pg, pagecount: pg }); + + // 用 GET JSON 建议接口(站点 POST /search 不便用) + var url = HOST + "/api/search-suggest?q=" + encode(wd); + var data = requestJson(url); + var items = (data && data.success && data.data) ? data.data : []; + + var list = []; + for (var i = 0; i < items.length; i++) { + var it = items[i]; + if (!it || !it.url) continue; + var remark = ""; + if (it.rating && it.rating !== "0.0") remark = "豆瓣" + it.rating; + if (it.year) remark = remark ? (remark + " · " + it.year) : it.year; + if (it.type) remark = remark ? (remark + " · " + it.type) : it.type; + list.push({ + vod_id: toStr(it.url), // 如 "/movie/grand-blue" + vod_name: toStr(it.title), + vod_pic: it.slug ? (HOST + "/movies/" + it.slug + ".webp") : "", // 推测封面,失败则空 + vod_remarks: remark + }); + } + + // 该接口无分页,一次性返回,page=1 pagecount=1 + return JSON.stringify({ list: list, page: 1, pagecount: 1, limit: list.length, total: list.length }); +} + +/* ---------------- 导出 ---------------- */ + +__JS_SPIDER__ = { + init: init, + home: home, + homeVod: homeVod, + category: category, + detail: detail, + play: play, + search: search +}; diff --git a/tianjitop/llllo4k/js/iysdq.js b/tianjitop/llllo4k/js/iysdq.js new file mode 100644 index 00000000..5f336028 --- /dev/null +++ b/tianjitop/llllo4k/js/iysdq.js @@ -0,0 +1,313 @@ +/* + * @File : 影视大全.js + * @Author : opencode + * @Date : 2026-07-09 + * @Desc : 影视大全 (www.iysdq.tv) TVBox T4(JS) 源 —— 自包含,MacCMS shoutu45 模板 + * + * 站点结构: + * - 服务端渲染 MacCMS(shoutu45),首页/分类/搜索/详情 HTML 直出,无防护盾。 + * - 分类:/vodtype/{tid}.html + * - 搜索:/vodsearch/{词}-------------.html (关键词在开头,共 13 个 '-') + * - 详情:/voddetail/{id}.html + * 线路 tab: .anthology-tab a.swiper-slide(按 DOM 顺序) + * 集数列表: 并列的多个 .anthology-list-play,按 DOM 顺序与 tab 一一对应 + * 集数链接: /vodplay/{id}-{sid}-{nid}.html + * - 播放:播放页 player_aaaa.url 为明文 m3u8/mp4 直链。 + * - 卡片:div.public-list-box > a.public-list-exp[href=/voddetail/xx.html][title] + * 封面 img data-src;备注 span.public-list-prb。 + */ + +var IYSDQ_VERSION = "20260709-js-1"; +var HOST = "https://www.iysdq.tv"; +var UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"; + +var CLASSES = [ + { type_id: "1", type_name: "电影" }, + { type_id: "2", type_name: "电视剧" }, + { type_id: "3", type_name: "综艺" }, + { type_id: "4", type_name: "动漫" }, + { type_id: "5", type_name: "短剧" } +]; + +function log(msg) { + try { console.log("[IYSDQ_JS " + IYSDQ_VERSION + "] " + msg); } catch (e) {} +} + +/* ---------------- 通用工具 ---------------- */ + +function toStr(v) { return v === undefined || v === null ? "" : String(v); } +function encode(s) { return encodeURIComponent(toStr(s)); } + +function fixUrl(u) { + u = toStr(u).trim(); + if (!u) return ""; + if (u.indexOf("//") === 0) return "https:" + u; + if (u.charAt(0) === "/") return HOST + u; + return u; +} + +function textClean(s) { + return toStr(s) + .replace(/<[^>]+>/g, "") + .replace(/ /g, " ") + .replace(/&/g, "&") + .replace(/"/g, '"') + .replace(/'/g, "'") + .replace(/&#\d+;/g, "") + .replace(/\s+/g, " ") + .trim(); +} + +function attr(tag, name) { + var r = new RegExp(name + "\\s*=\\s*([\"'])([\\s\\S]*?)\\1", "i"); + var m = r.exec(tag || ""); + return m ? m[2] : ""; +} + +function requestHtml(url) { + try { + log("fetch " + url); + var res = req(url, { + method: "GET", + headers: { "User-Agent": UA, "Referer": HOST + "/", "Accept": "text/html" }, + timeout: 10000 + }); + var body = (typeof res === "string") ? res : (res && (res.content || res.body || res.data)) || ""; + return toStr(body); + } catch (e) { + log("fetch_error " + e); + return ""; + } +} + +/* ---------------- 封面提取 ---------------- */ + +function pickPic(tag) { + var p = attr(tag, "data-src") || attr(tag, "data-original"); + if (!p || /img-bj-k\.png/i.test(p)) { + var m = /<img[^>]+data-src="([^"]+)"/i.exec(tag); + if (m) p = m[1]; + } + return fixUrl(p); +} + +/* ---------------- 列表解析 ---------------- */ + +// 首页/分类/搜索卡片:div.public-list-box +function parseList(html) { + var list = []; + var seen = {}; + // 每个卡片块:从 public-list-box 起,到下一个 public-list-box 或结束 + var re = /<div class="public-list-box[^"]*">([\s\S]*?)(?=<div class="public-list-box|<div class="null|<\/body|$)/g; + var m; + while ((m = re.exec(html)) !== null) { + var block = m[1]; + var im = /href="\/voddetail\/(\d+)\.html"/.exec(block); + if (!im) continue; + var id = im[1]; + if (seen[id]) continue; + seen[id] = true; + + // 标题:优先 a.public-list-exp 的 title + var name = ""; + var tm = /class="public-list-exp"[^>]*title="([^"]*)"/.exec(block); + if (tm) name = textClean(tm[1]); + if (!name) { + var tm2 = /class="time-title[^"]*"[^>]*title="([^"]*)"/.exec(block); + if (tm2) name = textClean(tm2[1]); + } + if (!name) { + var am = /alt="([^"]+?)封面图"/.exec(block) || /alt="([^"]+)"/.exec(block); + if (am) name = textClean(am[1]); + } + + var note = ""; + var nm = /class="public-list-prb[^"]*"[^>]*>([\s\S]*?)<\/span>/.exec(block); + if (nm) note = textClean(nm[1]); + + list.push({ vod_id: id, vod_name: name, vod_pic: pickPic(block), vod_remarks: note }); + } + return list; +} + +/* ---------------- 接口实现 ---------------- */ + +function init(ext) { + if (typeof ext === "string" && /^https?:\/\//.test(ext.trim())) { + HOST = ext.trim().replace(/\/+$/, ""); + } + log("init host=" + HOST); +} + +function home(filter) { + log("home"); + return JSON.stringify({ class: CLASSES }); +} + +function homeVod() { + log("homeVod"); + var html = requestHtml(HOST + "/"); + var list = parseList(html).slice(0, 40); + return JSON.stringify({ list: list }); +} + +function category(tid, pg, filter, extend) { + tid = toStr(tid || "1"); + pg = parseInt(pg || 1); + if (!pg || pg < 1) pg = 1; + // 站点分类页无分页参数,首页即全量;仅第 1 页返回数据 + if (pg > 1) return JSON.stringify({ page: pg, pagecount: pg, limit: 40, total: 0, list: [] }); + + var url = HOST + "/vodtype/" + tid + ".html"; + var html = requestHtml(url); + var list = parseList(html); + log("category tid=" + tid + " count=" + list.length); + return JSON.stringify({ + page: 1, + pagecount: 1, + limit: list.length || 40, + total: list.length, + list: list + }); +} + +function detail(id) { + var vid = toStr(id).split(",")[0].replace(/[^\d]/g, ""); + log("detail id=" + vid); + var html = requestHtml(HOST + "/voddetail/" + vid + ".html"); + if (!html) return JSON.stringify({ list: [] }); + + // 标题 + var name = ""; + var nm = /<h1[^>]*>([\s\S]*?)<\/h1>/.exec(html); + if (nm) name = textClean(nm[1]); + if (!name) { + var tt = /<title>([^<_\-]+)/.exec(html); + if (tt) name = tt[1].trim(); + } + + // 封面 + var pic = ""; + var pm = /property="og:image"\s+content="([^"]+)"/.exec(html); + if (pm) pic = pm[1]; + if (!pic) { + var pm2 = /<img[^>]*class="[^"]*lazy[^"]*"[^>]*data-src="([^"]+)"/.exec(html); + if (pm2) pic = pm2[1]; + } + + var vod = { + vod_id: vid, + vod_name: name, + vod_pic: fixUrl(pic) + }; + + // 线路名(.anthology-tab 内的 a.swiper-slide,按 DOM 顺序) + var froms = []; + var tabStart = html.indexOf('anthology-tab'); + var tabBlock = ""; + if (tabStart >= 0) { + var tabEnd = html.indexOf('anthology-list', tabStart); + tabBlock = html.substring(tabStart, tabEnd > tabStart ? tabEnd : tabStart + 3000); + } + var fRe = /class="swiper-slide"[^>]*>([\s\S]*?)<\/a>/g; + var fm; + while ((fm = fRe.exec(tabBlock)) !== null) { + var fn = textClean(fm[1]).replace(/\d+$/, "").trim(); + if (fn) froms.push(fn); + } + + // 集数 panel:并列的 .anthology-list-play + var playFrom = []; + var playUrl = []; + var panelRe = /class="anthology-list-play[^"]*"[^>]*>([\s\S]*?)<\/ul>/g; + var pm3; + var idx = 0; + while ((pm3 = panelRe.exec(html)) !== null) { + var block = pm3[1]; + var eps = []; + var epRe = /<a[^>]*href="(\/vodplay\/[^"]+\.html)"[^>]*>([\s\S]*?)<\/a>/g; + var em; + while ((em = epRe.exec(block)) !== null) { + var epUrl = em[1]; + var epName = textClean(em[2]) || (eps.length + 1); + eps.push(epName + "$" + epUrl); + } + if (eps.length) { + playFrom.push(froms[idx] || ("线路" + (idx + 1))); + playUrl.push(eps.join("#")); + } + idx++; + } + + if (playFrom.length) { + vod.vod_play_from = playFrom.join("$$$"); + vod.vod_play_url = playUrl.join("$$$"); + } else { + vod.vod_play_from = "提示"; + vod.vod_play_url = "暂无播放源$"; + } + + return JSON.stringify({ list: [vod] }); +} + +function play(flag, id, flags) { + var pageUrl = fixUrl(id); + log("play flag=" + flag + " url=" + pageUrl); + var html = requestHtml(pageUrl); + + var url = ""; + // player_aaaa = {...,"url":"https://...m3u8",...} + var m = /player_\w+\s*=\s*(\{[\s\S]*?\})\s*<\/script>/.exec(html); + if (m) { + try { + var info = JSON.parse(m[1]); + url = info.url || ""; + } catch (e) { + log("player parse error " + e); + } + } + // 兜底:直接搜 url 字段 / m3u8 / mp4 + if (!url) { + var m2 = /"url"\s*:\s*"(https?:[^"]+?\.(?:m3u8|mp4)[^"]*)"/.exec(html); + if (m2) url = m2[1]; + } + if (!url) { + var m3 = html.match(/https?:\/\/[^"'\s\\]+?\.m3u8[^"'\s\\]*/); + if (m3) url = m3[0]; + } + if (!url) { + var m4 = html.match(/https?:\/\/[^"'\s\\]+?\.mp4[^"'\s\\]*/); + if (m4) url = m4[0]; + } + url = toStr(url).replace(/\\\//g, "/").trim(); + + if (url && /^https?:\/\//.test(url)) { + var header = { "User-Agent": UA, "Referer": HOST + "/" }; + return JSON.stringify({ parse: 0, url: url, header: header }); + } + return JSON.stringify({ parse: 1, url: pageUrl }); +} + +function search(wd, quick, pg) { + pg = parseInt(pg || 1); + if (!pg || pg < 1) pg = 1; + if (pg > 1) return JSON.stringify({ list: [], page: pg, pagecount: pg }); + log("search wd=" + wd); + // 关键词在开头,后接 13 个 '-' + var url = HOST + "/vodsearch/" + encode(wd) + "-------------.html"; + var html = requestHtml(url); + var list = parseList(html); + return JSON.stringify({ list: list, page: 1, pagecount: 1, limit: list.length, total: list.length }); +} + +/* ---------------- 导出 ---------------- */ + +__JS_SPIDER__ = { + init: init, + home: home, + homeVod: homeVod, + category: category, + detail: detail, + play: play, + search: search +}; diff --git a/tianjitop/llllo4k/js/mubai.js b/tianjitop/llllo4k/js/mubai.js new file mode 100644 index 00000000..56504c54 --- /dev/null +++ b/tianjitop/llllo4k/js/mubai.js @@ -0,0 +1,351 @@ +/* + * @File : mubai.js + * @Author : opencode + * @Date : 2026-07-09 + * @Desc : 幕白影视 (m2.mubai.link) TVBox T4(JS) 源 —— 自包含,无外部依赖 + * + * 站点特征: + * - GoFilm 系统,全部走 REST JSON API,GET 即可响应,无防护盾、无加密。 + * - 首页 : GET /api/index → banners + category树 + content[](hot/movies) + * - 分类列表 : GET /api/filmClassifySearch?Pid&Category&page&Area&Year&Language&Sort + * 返回 page{pageSize,current,pageCount,total} + list[{id,name,picture,remarks,...}] + * - 详情 : GET /api/filmDetail?id={mid} + * 返回 detail{...,list[{id,name,linkList[{episode,link(m3u8直链)}]}]} + * - 搜索 : GET /api/searchFilm?keyword={关键词} + * 返回 list[{id,name,picture,...}] + page{} + * - 分类导航 : GET /api/navCategory → [{id,name}] 4个一级分类 + * - 首页自带 category 分类树(pid=一级分类id,children=二级分类列表)。 + * + * 播放: + * 详情 list.linkList[].link 是对应的 m3u8 直链,直接 parse=0 传回内核。 + * 剧集(.m3u8) 放到 vod_play_url 中,每集 name$link,不同源用 # 分隔,#$$$ 分隔源。 + * + * 设计: + * 一级分类 = pid (1=电影片 2=连续剧 3=综艺 4=动漫) + * 筛选 = area/year/sort (sort 暂提供 update_stamp 默认/ hits 热门/ score 评分) + * 分类加载(二级子类)在 init/home 从 /api/index 拉取 category 树缓存。 + */ + +var MB_VERSION = "20260709-js-1"; +var HOST = "https://m2.mubai.link"; +var API = HOST + "/api"; +var UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"; + +var CLASSES = []; +var CATEGORIES = {}; // pid -> [{type_id:cid, type_name:cName}] +var FILTERS = {}; +var AREAS = []; +var YEARS = []; +var CAT_LOADED = false; + +function log(msg) { + try { console.log("[MB_JS " + MB_VERSION + "] " + msg); } catch (e) {} +} + +/* ---------------- 通用工具 ---------------- */ + +function toStr(v) { return v === undefined || v === null ? "" : String(v); } +function encode(s) { return encodeURIComponent(toStr(s)); } + +function fixUrl(u) { + u = toStr(u).trim(); + if (!u) return ""; + if (u.indexOf("//") === 0) return "https:" + u; + if (u.charAt(0) === "/") return HOST + u; + return /^https?:\/\//i.test(u) ? u : ""; +} + +function requestJson(url) { + var headers = { + "User-Agent": UA, + "Accept": "application/json,*/*;q=0.8", + "Referer": HOST + "/" + }; + try { + var res = req(url, { method: "GET", headers: headers, timeout: 12000 }); + var body = (typeof res === "string") ? res : (res && (res.content || res.body || res.data)); + if (typeof body === "string") { + try { return JSON.parse(body); } catch (e) { log("json_parse_error " + e); return null; } + } + return body || null; + } catch (e) { + log("fetch_error " + url + " " + e); + return null; + } +} + +/* ---------------- 分类加载 ---------------- */ + +function loadCategories() { + if (CAT_LOADED) return; + var data = requestJson(API + "/index"); + if (!data || !data.code || !data.data || !data.data.content) return; + CAT_LOADED = true; + + var content = data.data.content; + var classes = []; + var cats = {}; + var filters = {}; + var areasSet = {}; + var yearsSet = {}; + + for (var i = 0; i < content.length; i++) { + var tab = content[i]; + var nav = tab.nav; + if (!nav || !nav.id) continue; + var pid = nav.id; + var pname = toStr(nav.name); + classes.push({ type_id: pid, type_name: pname }); + + // 二级子类(合并导航 API 子类 + 分类树 subcats) + var subcats = []; + var seenIds = {}; + + // 从 tab.movies 提取最常用分类 + var allMovies = (tab.movies || []).concat(tab.hot || []); + for (var j = 0; j < allMovies.length; j++) { + var m = allMovies[j]; + if (m.cid && !seenIds[m.cid]) { + seenIds[m.cid] = 1; + subcats.push({ type_id: m.cid, type_name: toStr(m.cName) }); + } + if (m.area && !areasSet[m.area]) areasSet[m.area] = 1; + if (m.year && !yearsSet[m.year]) yearsSet[m.year] = 1; + } + + // 从首页 category 树提取该 pid 的 children + if (data.data.category && data.data.category.children) { + var roots = data.data.category.children; + for (var k = 0; k < roots.length; k++) { + if (roots[k].id === pid && roots[k].children) { + var ch = roots[k].children; + for (var ci = 0; ci < ch.length; ci++) { + var cnode = ch[ci]; + if (cnode.id && !seenIds[cnode.id]) { + seenIds[cnode.id] = 1; + subcats.push({ type_id: cnode.id, type_name: toStr(cnode.name) }); + } + } + } + } + } + + cats[pid] = subcats; + + // 筛选 + var areaOpts = [{ n: "全部", v: "" }]; + var ks = Object.keys(areasSet); + for (var a = 0; a < ks.length; a++) areaOpts.push({ n: ks[a], v: ks[a] }); + AREAS = areaOpts; + + var yearOpts = [{ n: "全部", v: "" }]; + var yks = Object.keys(yearsSet); + for (var y = 0; y < yks.length; y++) { + if (parseInt(yks[y]) >= 2000) yearOpts.push({ n: yks[y], v: yks[y] }); + } + YEARS = yearOpts; + + var fid = [ + { key: "cate", name: "分类", value: subcats }, + { key: "area", name: "地区", value: areaOpts }, + { key: "year", name: "年份", value: yearOpts }, + { + key: "sort", name: "排序", value: [ + { n: "默认", v: "" }, + { n: "热门", v: "hits" }, + { n: "评分", v: "score" } + ] + } + ]; + filters[pid] = fid; + } + + CLASSES = classes; + CATEGORIES = cats; + FILTERS = filters; + log("cat_loaded classes=" + CLASSES.length + " subcats=" + JSON.stringify(Object.keys(cats))); +} + +/* ---------------- 列表格式化 ---------------- */ + +function formatListItem(m) { + var vid = toStr(m.id || m.mid); + var remark = toStr(m.remarks || ""); + if (!remark && m.year) remark = String(m.year); + return { + vod_id: vid, + vod_name: toStr(m.name || vid), + vod_pic: fixUrl(m.picture || ""), + vod_remarks: remark + }; +} + +/* ---------------- 接口实现 ---------------- */ + +function init(ext) { + if (typeof ext === "string" && /^https?:\/\//i.test(ext.trim())) { + HOST = ext.trim().replace(/\/+$/, ""); + API = HOST + "/api"; + } + CAT_LOADED = false; + CLASSES = []; + CATEGORIES = {}; + FILTERS = {}; + loadCategories(); + log("init host=" + HOST); +} + +function home(filter) { + loadCategories(); + return JSON.stringify({ class: CLASSES, filters: FILTERS }); +} + +function homeVod() { + log("homeVod"); + var data = requestJson(API + "/index"); + var list = []; + if (data && data.data && data.data.content) { + for (var i = 0; i < data.data.content.length; i++) { + var tab = data.data.content[i]; + var items = (tab.hot || []).concat(tab.movies || []); + for (var j = 0; j < items.length; j++) list.push(formatListItem(items[j])); + } + } + // 去重 id + var seen = {}; + var out = []; + for (var k = 0; k < list.length; k++) { + if (!seen[list[k].vod_id]) { seen[list[k].vod_id] = 1; out.push(list[k]); } + } + log("homeVod count=" + out.length); + return JSON.stringify({ list: out }); +} + +function category(tid, pg, filter, extend) { + tid = toStr(tid || "1"); + pg = parseInt(pg || 1); + if (!pg || pg < 1) pg = 1; + extend = extend || {}; + + var cate = toStr(extend.cate || ""); + var area = toStr(extend.area || ""); + var year = toStr(extend.year || ""); + var sort = toStr(extend.sort || ""); + + var url = API + "/filmClassifySearch?Pid=" + encode(tid) + "&page=" + pg; + if (cate) url += "&Category=" + encode(cate); + if (area) url += "&Area=" + encode(area); + if (year) url += "&Year=" + encode(year); + if (sort) url += "&Sort=" + encode(sort); + + var res = requestJson(url); + var listData = (res && res.data && res.data.list) || []; + var pgInfo = (res && res.data && res.data.page) || {}; + + var list = listData.map(formatListItem); + + var pagecount = parseInt(pgInfo.pageCount || 1) || 1; + var limit = parseInt(pgInfo.pageSize || list.length) || list.length; + var total = parseInt(pgInfo.total || list.length) || list.length; + + log("category pid=" + tid + " pg=" + pg + " count=" + list.length + " pages=" + pagecount); + return JSON.stringify({ page: pg, pagecount: pagecount, limit: limit, total: total, list: list }); +} + +function detail(id) { + var mid = toStr(id); + log("detail mid=" + mid); + + var data = requestJson(API + "/filmDetail?id=" + encode(mid)); + var d = (data && data.code === 0 && data.data && data.data.detail) ? data.data.detail : null; + if (!d) { + return JSON.stringify({ list: [{ vod_id: mid, vod_name: mid, vod_play_from: "提示", vod_play_url: "无资源$" }] }); + } + + var vod = { + vod_id: mid, + vod_name: toStr(d.name || mid), + vod_pic: fixUrl(d.picture), + vod_remarks: toStr(d.remarks || d.year || ""), + type_name: toStr(d.cName || ""), + vod_year: toStr(d.year || ""), + vod_area: toStr(d.area || ""), + vod_director: toStr(d.director || ""), + vod_actor: toStr(d.actor || ""), + vod_content: toStr(d.content || d.blurb || "") + }; + + if (d.list && d.list.length > 0) { + var playFrom = []; + var playUrl = []; + for (var i = 0; i < d.list.length; i++) { + var src = d.list[i]; + if (!src || !src.linkList || src.linkList.length === 0) continue; + playFrom.push(toStr(src.name || "源" + (i + 1))); + var eps = []; + for (var j = 0; j < src.linkList.length; j++) { + var ep = src.linkList[j]; + var epName = toStr(ep.episode || ep.name || "第" + (j + 1) + "集"); + var epLink = toStr(ep.link); + if (epName && epLink) eps.push(epName + "$" + epLink); + } + playUrl.push(eps.join("#")); + } + vod.vod_play_from = playFrom.join("$$$"); + vod.vod_play_url = playUrl.join("$$$"); + } else { + vod.vod_play_from = "提示"; + vod.vod_play_url = "暂无资源$"; + } + + return JSON.stringify({ list: [vod] }); +} + +function play(flag, id, flags) { + // id 直接是 m3u8/mp4 直链 + var url = toStr(id); + log("play flag=" + flag + " url=" + url.slice(0, 80)); + var header = { "User-Agent": UA, "Referer": HOST + "/" }; + return JSON.stringify({ parse: 0, url: url, header: header }); +} + +function search(wd, quick, pg) { + pg = parseInt(pg || 1); + if (!pg || pg < 1) pg = 1; + wd = toStr(wd).trim(); + log("search wd=" + wd + " pg=" + pg); + if (!wd) return JSON.stringify({ list: [], page: 1, pagecount: 1, limit: 0, total: 0 }); + + var url = API + "/searchFilm?keyword=" + encode(wd); + var res = requestJson(url); + var listData = (res && res.data && res.data.list) || []; + var pgInfo = (res && res.data && res.data.page) || {}; + + var list = listData.map(function (m) { + return { + vod_id: toStr(m.id || m.mid), + vod_name: toStr(m.name), + vod_pic: fixUrl(m.picture), + vod_remarks: toStr(m.remarks || m.year || "") + }; + }); + + var page = parseInt(pgInfo.current || 1) || 1; + var pagecount = parseInt(pgInfo.pageCount || 1) || 1; + var total = parseInt(pgInfo.total || list.length) || list.length; + + log("search result count=" + list.length); + return JSON.stringify({ list: list, page: page, pagecount: pagecount, limit: list.length || 1, total: total }); +} + +/* ---------------- 导出 ---------------- */ + +__JS_SPIDER__ = { + init: init, + home: home, + homeVod: homeVod, + category: category, + detail: detail, + play: play, + search: search +}; \ No newline at end of file diff --git a/tianjitop/llllo4k/js/先生.js b/tianjitop/llllo4k/js/先生.js new file mode 100644 index 00000000..aa4aa06d --- /dev/null +++ b/tianjitop/llllo4k/js/先生.js @@ -0,0 +1,8 @@ +{ + "请求头": "User-Agent$MOBILE_UA", + "编码": "UTF-8", + "主页url": "https://silidm.com/", + "线路标题": "蜀山独家", + "分类url": "https://silidm.com/show/{cateId}-{area}-{by}-{class}-{lang}-{letter}---{catePg}---{year}.html", + "分类": "电影$dianying#剧集$juji#动漫$dongman#综艺$zongyi" + } diff --git a/tianjitop/llllo4k/js/小鸭看看.js b/tianjitop/llllo4k/js/小鸭看看.js new file mode 100644 index 00000000..ca4286ca --- /dev/null +++ b/tianjitop/llllo4k/js/小鸭看看.js @@ -0,0 +1,346 @@ +import { Crypto, load, _ } from 'assets://js/lib/cat.js'; + +let siteUrl = 'https://xykk.tv'; +let siteKey = ''; +let siteType = 0; +let t2sDict = {}; + +let headers = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36', + 'Referer': 'https://xykk.tv/', + 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', + 'Accept-Language': 'zh-CN,zh;q=0.9', + 'Upgrade-Insecure-Requests': '1', + 'Sec-Fetch-Site': 'same-origin', + 'Sec-Fetch-Mode': 'navigate', + 'Sec-Fetch-User': '?1', + 'Sec-Fetch-Dest': 'document' +}; + +async function request(reqUrl, postData, agentSp, get) { + let res = await req(reqUrl, { + method: get ? 'get' : 'post', + headers: agentSp ? Object.assign({}, headers, agentSp) : headers, + data: postData || {}, + postType: get ? '' : 'form', + }); + return res.content; +} + +async function init(cfg) { + siteKey = cfg.skey; + siteType = cfg.stype; + if (cfg.ext) { + if (cfg.ext.startsWith('http')) { + siteUrl = cfg.ext; + } + } + try { + let t2sRes = await request('https://gimyai.tw/template/gimyai/js/t2s.json?v=1', null, null, true); + if (t2sRes) t2sDict = JSON.parse(t2sRes); + } catch (e) {} +} + +function s(text) { + if (!text) return text; + let res = ''; + for (let i = 0; i < text.length; i++) { + res += t2sDict[text[i]] || text[i]; + } + return res; +} + +async function home(filter) { + let classes = [ + { type_id: 'movies', type_name: '電影' }, + { type_id: 'tv', type_name: '電視劇' }, + { type_id: 'sc', type_name: '短劇' }, + { type_id: 'dm', type_name: '動漫' }, + { type_id: 'tvshow', type_name: '綜藝' } + ]; + let filterObj = genFilterObj(); + return JSON.stringify({ + class: classes, + filters: filterObj + }); +} + +async function homeVod() { + let html = await request(siteUrl + '/', null, null, true); + const $ = load(html); + let videos = []; + $('.card').each((i, el) => { + let id = $(el).find('a.card__thumb').attr('href'); + let name = $(el).find('.card__title').text().trim(); + let pic = $(el).find('img').attr('src'); + if (pic && pic.startsWith('/')) pic = siteUrl + pic; + let remark = $(el).find('.card__status').text().trim(); + if (id && name) { + videos.push({ + vod_id: id, + vod_name: s(name), + vod_pic: pic, + vod_remarks: s(remark), + }); + } + }); + return JSON.stringify({ + list: videos, + }); +} + +async function category(tid, pg, filter, extend) { + if (pg <= 0) pg = 1; + let params = [tid, '', '', '', '', '', '', '', pg, '', '', '']; + if (extend['area']) params[1] = encodeURIComponent(extend['area']); + if (extend['by']) params[2] = extend['by']; + if (extend['class']) params[3] = extend['class']; + if (extend['year']) params[11] = extend['year']; + let url = `${siteUrl}/list/${params.join('-')}.html`; + let html = await request(url, null, null, true); + let videos = await parseVideos(html); + return JSON.stringify({ + page: parseInt(pg), + list: videos, + }); +} + +async function detail(id) { + try { + const url = id.startsWith('http') ? id : siteUrl + id; + const html = await request(url, null, null, true); + const $ = load(html); + let vod_name = $('h1.detail__title').text().trim(); + let vod_pic = $('.detail__poster img').attr('src'); + if (vod_pic && vod_pic.startsWith('/')) vod_pic = siteUrl + vod_pic; + let vod_actor = ''; + let vod_director = ''; + let vod_class = ''; + let vod_year = ''; + let vod_area = ''; + let vod_remarks = $('.detail__meta .pill').text().trim(); + let actors = []; + $('.detail__cast-line a').each((i, el) => { + actors.push($(el).text().trim()); + }); + vod_actor = actors.join(','); + let metas = []; + $('.detail__meta span:not(.dot):not(.pill), .detail__meta a').each((i, el) => { + metas.push($(el).text().trim()); + }); + if (metas.length > 0) vod_year = metas[0]; + if (metas.length > 1) vod_area = metas[1]; + if (metas.length > 2) vod_class = metas[2]; + let vod_content = $('#syn').text().trim() || $('.block p:last-child').text().trim(); + let playFrom = []; + let playUrls = []; + $('.source-tabs a.source-tab').each((i, el) => { + let fromName = $(el).text().replace(/ᴴᴰ|HD/g, '').trim(); + let sid = $(el).attr('data-route-switch'); + let block = $(`.ep-grid[data-route-sid="${sid}"]`); + if (block.length > 0 && fromName) { + playFrom.push(s(fromName)); + let urls = []; + block.find('a.ep-tile').each((j, a) => { + let epName = $(a).text().trim(); + let epUrl = $(a).attr('href'); + urls.push(s(epName) + '$' + epUrl); + }); + playUrls.push(urls.join('#')); + } + }); + return JSON.stringify({ + list: [{ + vod_id: id, + vod_name: s(vod_name), + vod_pic: vod_pic, + vod_class: s(vod_class), + vod_area: s(vod_area), + vod_year: vod_year, + vod_actor: s(vod_actor), + vod_director: s(vod_director), + vod_content: s(vod_content), + vod_remarks: s(vod_remarks), + vod_play_from: playFrom.join('$$$'), + vod_play_url: playUrls.join('$$$'), + }] + }); + } catch (e) {} + return JSON.stringify({ list: [] }); +} + +async function search(wd, quick, pg) { + let url = `${siteUrl}/search/${encodeURIComponent(wd)}----------${pg || 1}---.html`; + const html = await request(url, null, null, true); + const $ = load(html); + let videos = []; + $('.result-list .result').each((i, el) => { + let id = $(el).find('a.result__thumb').attr('href'); + let name = $(el).find('.result__title').text().trim(); + let pic = $(el).find('img').attr('src'); + if (pic && pic.startsWith('/')) pic = siteUrl + pic; + let remark = $(el).find('.result__metaline span:last-child').text().trim(); + if (id && name) { + videos.push({ + vod_id: id, + vod_name: s(name), + vod_pic: pic, + vod_remarks: s(remark), + }); + } + }); + return JSON.stringify({ + list: videos, + }); +} + +async function play(flag, id, flags) { + try { + let url = id.startsWith('http') ? id : siteUrl + id; + const html = await request(url, null, null, true); + let playerMatch = html.match(/var\s+player_(?:aaaa|data)\s*=\s*({.+?});/); + if (playerMatch && playerMatch[1]) { + let playData = JSON.parse(playerMatch[1]); + let videoUrl = playData.url; + if (videoUrl.indexOf('.m3u8') > -1 || videoUrl.indexOf('.mp4') > -1) { + return JSON.stringify({ + parse: 0, + url: videoUrl, + header: headers + }); + } + let parseApi = ''; + if (videoUrl.startsWith('JD-')) { + parseApi = `https://p.xiaoyakan.com/d/parse.php?url=${encodeURIComponent(videoUrl)}&_t=${Date.now()}`; + } else { + parseApi = `https://p.xiaoyakan.com/v/parse.php?url=${encodeURIComponent(videoUrl)}&_t=${Date.now()}`; + } + let apiRes = await request(parseApi, null, { + 'Referer': siteUrl, + 'Origin': siteUrl + }, true); + if (apiRes) { + let jsonRes = JSON.parse(apiRes); + if ((jsonRes.code === 200 || jsonRes.code === 1 || jsonRes.code === 0) && (jsonRes.url || jsonRes.video || jsonRes.playurl)) { + let realUrl = jsonRes.url || jsonRes.video || jsonRes.playurl; + return JSON.stringify({ + parse: 0, + url: realUrl, + header: { + 'User-Agent': headers['User-Agent'], + 'Referer': 'https://p.xiaoyakan.com/' + } + }); + } + } + } + } catch (e) {} + return JSON.stringify({ + parse: 1, + url: id.startsWith('http') ? id : siteUrl + id, + header: headers + }); +} + +async function parseVideos(html) { + const $ = load(html); + let videos = []; + $('.grid > a.poster').each((i, el) => { + let id = $(el).attr('href'); + let name = $(el).find('.poster__title').text().trim(); + let picNode = $(el).find('.poster__thumb img'); + let pic = picNode.attr('src') || picNode.attr('data-original'); + if (pic && pic.startsWith('/')) pic = siteUrl + pic; + let remark = $(el).find('.card__status').text().trim(); + if (id && name) { + videos.push({ + vod_id: id, + vod_name: s(name), + vod_pic: pic, + vod_remarks: s(remark), + }); + } + }); + return videos; +} + +function genFilterObj() { + let sortList = [ + { n: '綜合排序', v: '' }, + { n: '最新上架', v: 'time_add' }, + { n: '最近更新', v: 'time' }, + { n: '周人氣', v: 'hits_week' }, + { n: '總人氣', v: 'hits' } + ]; + let years = [ + { n: '全部', v: '' }, { n: '2026', v: '2026' }, { n: '2025', v: '2025' }, + { n: '2024', v: '2024' }, { 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' } + ]; + let movieAreas = [ + { 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: '其他' } + ]; + let tvAreas = [ + { 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: '其他' } + ]; + let showAreas = [ + { n: '全部', v: '' }, { n: '韓國', v: '韓國' }, { n: '中國大陸', v: '中國大陸' }, { n: '中國', v: '中國' }, + { n: '大陸', v: '大陸' }, { n: '日本', v: '日本' }, { n: '美國', v: '美國' }, { n: '歐美', v: '歐美' }, + { n: '台灣', v: '台灣' }, { n: '臺灣', v: '臺灣' }, { n: '香港', v: '香港' } + ]; + let dmAreas = [ + { n: '全部', v: '' }, { n: '中國大陸', v: '中國大陸' }, { n: '中國', v: '中國' }, { n: '大陸', v: '大陸' }, + { n: '日本', v: '日本' }, { n: '美國', v: '美國' }, { n: '歐美', v: '歐美' }, { n: '台灣', v: '台灣' }, + { n: '臺灣', v: '臺灣' }, { n: '香港', v: '香港' }, { n: '韓國', v: '韓國' } + ]; + let scAreas = [ + { n: '全部', v: '' }, { n: '中國大陸', v: '中國大陸' }, { n: '臺灣', v: '臺灣' }, { n: '香港', v: '香港' }, + { n: '韓國', v: '韓國' }, { n: '日本', v: '日本' }, { n: '美國', v: '美國' }, { n: '泰國', v: '泰國' }, { n: '其他', v: '其他' } + ]; + return { + 'movies': [ + { key: 'area', name: '地區', value: movieAreas }, + { key: 'year', name: '年份', value: years }, + { key: 'by', name: '排序', value: sortList } + ], + 'tv': [ + { key: 'area', name: '地區', value: tvAreas }, + { key: 'year', name: '年份', value: years }, + { key: 'by', name: '排序', value: sortList } + ], + 'sc': [ + { key: 'area', name: '地區', value: scAreas }, + { key: 'year', name: '年份', value: years }, + { key: 'by', name: '排序', value: sortList } + ], + 'dm': [ + { key: 'area', name: '地區', value: dmAreas }, + { key: 'year', name: '年份', value: years }, + { key: 'by', name: '排序', value: sortList } + ], + 'tvshow': [ + { key: 'area', name: '地區', value: showAreas }, + { key: 'year', name: '年份', value: years }, + { key: 'by', name: '排序', value: sortList } + ] + }; +} + +export function __jsEvalReturn() { + return { + init: init, + home: home, + homeVod: homeVod, + category: category, + detail: detail, + play: play, + search: search, + }; +} \ No newline at end of file diff --git a/tianjitop/llllo4k/js/开心影院.js b/tianjitop/llllo4k/js/开心影院.js new file mode 100644 index 00000000..e4fb3fd0 --- /dev/null +++ b/tianjitop/llllo4k/js/开心影院.js @@ -0,0 +1,583 @@ +/* + * @File : 开心影院.js + * @Author : opencode + * @Date : 2026-07-08 + * @Desc : 开心影院 (kxyy1.cc) TVBox T4(JS) 源 —— 自包含,无外部依赖 + * + * 站点特征(实测 2026-07): + * - 服务端渲染的 MacCMS v10 自定义模板(Tabler UI),HTML 解析。无 CF/盾。 + * - 首页/列表卡片:<a href="/voddetail/{id}.html" class="d-block cover"> + * <img data-src="封面"><span class="badge">角标</span></a> + * <div class="card-body"><h3 class="card-title">名称</h3><p class="text-muted">日期</p></div> + * - 分类列表:/vodshow/{tid}-{area}-{by}-{class}-----{page}---{year}.html (12段) + * 实测段位:idx0=tid idx1=地区 idx2=排序 idx3=类型 idx8=分页 idx11=年份 + * - 详情:/voddetail/{id}.html + * 线路:nav-tabs 里 a[href="#tabs-home-{sid}"] 的文本(去 svg/badge) + * 剧集:#tabs-home-{sid} 下 a[href^="/vodplay/"] + * 元信息:<p><strong>xx:</strong>值</p>;简介取 og:description + * - 播放:/vodplay/{id}-{sid}-{eid}.html + * 页面里 var player_data={...,"url":"明文m3u8","encrypt":0} + * 主流线路(dyttm3u8 等)为明文直链,直接 parse:0 播放。 + * - 搜索:/vodsearch/{词}-------------.html + * 搜索结果卡片结构不同于列表页: + * <a class="col-3 col-md-1" href="/voddetail/{id}.html"><img src="封面"></a> + * <a class="...search-movie-title" href="/voddetail/{id}.html" title="名称">...</a> + * <p><strong>类型/主演/简介:</strong>值</p> + * JSON 采集口(api.php/provide/vod)已 closed。 + * + * ── 搜索验证码攻破(实测已打通)────────────────────────────── + * 首页搜索有图形验证码防护,但机制是「按 session 验证一次即长期放行」: + * 1) 验证码图: GET /index.php/verify/index.html (4位字母数字,绑定 PHPSESSID) + * 2) 提交验证: POST /index.php/ajax/verify_check?type=search&verify={code} + * 成功返回 {"code":1,"msg":"ok"} + * 3) 通过后验证态存在 PHPSESSID cookie 里,同一 session 内所有 /vodsearch 直接放行。 + * 纯 JS 引擎无法识图 OCR,故本源采用「Cookie 复用」方案: + * - 通过 init 的 ext 传入已验证过的 Cookie(形如 "PHPSESSID=xxxx"), + * 或站点配置 ext 字段填 {"host":"...","cookie":"PHPSESSID=xxxx"}。 + * - 运行期 req 若拿到 Set-Cookie 会自动保存复用(引擎支持时)。 + * - 命中验证码且无可用 Cookie 时,搜索返回空并提示注入 Cookie。 + * → 用带 OCR 的环境(浏览器/打码)过一次码,把 PHPSESSID 填进 ext 即可长期搜索。 + * + * ── 如何获取 PHPSESSID(配置搜索用)──────────────────────── + * 【方法1|电脑浏览器 F12】(最简单) + * 1. Chrome/Edge 打开 https://www.kxyy1.cc/vodsearch/斗罗-------------.html + * 2. 弹出"安全验证",肉眼识别 4 位验证码填入,点"提交验证" + * 3. 通过后按 F12 → Application → Cookies → https://www.kxyy1.cc + * 复制 PHPSESSID 那一行的 Value(如 1a0u7ifd4gv0if4447oedv216o) + * 【方法2|F12 控制台一键】(过码后) + * 在 www.kxyy1.cc 页面 Console 执行: + * document.cookie.match(/PHPSESSID=[^;]+/)[0] + * 直接打印出 "PHPSESSID=xxxx",整段复制。 + * 【方法3|手机/模拟器抓包】 + * HttpCanary / Reqable / Fiddler 抓访问搜索页(过码后)的请求, + * 在请求头 Cookie: 里找 PHPSESSID=xxxx。 + * 【填入配置】把值填进站点 ext: + * "ext": "{\"host\":\"https://www.kxyy1.cc\",\"cookie\":\"PHPSESSID=你的值\"}" + * 【注意】PHPSESSID 有有效期(约数小时~1天/服务器重启失效), + * 过期后搜索又被拦截,需重新过码更新;分类/详情/播放不需要 Cookie。 + * + * ── 验证码手动过码接口(自动化脚本可参考)────────────────── + * 取图 : GET /index.php/verify/index.html?r={时间戳} (每次取图会刷新答案) + * 提交 : POST /index.php/ajax/verify_check?type=search&verify={4位码} + * 需带同一 PHPSESSID;成功返回 {"code":1,"msg":"ok"} + * 通过后该 PHPSESSID 即可直接请求 /vodsearch/... 不再拦截。 + */ + +var HOST = "https://www.kxyy1.cc"; +var UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"; +var COOKIE = ""; // 已验证的 Cookie(PHPSESSID=...),可经 init(ext) 注入或运行期抓取 +var CK_STORE = "kxyy_ck"; // local 持久化 key + +var CLASSES = [ + { 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: "短剧" } +]; + +// 筛选项(各分类共用) +var FILTERS = (function () { + var area = ["", "中国大陆", "中国香港", "中国台湾", "美国", "韩国", "日本", "泰国", "印度", "英国", "法国", "德国", "意大利"]; + var cls = ["", "剧情", "喜剧", "动作", "爱情", "科幻", "动画", "悬疑", "惊悚", "恐怖", "犯罪", "冒险", "奇幻", "古装", "历史", "家庭", "战争", "武侠", "青春", "都市", "网剧"]; + var years = ["", "2026", "2025", "2024", "2023", "2022", "2021", "2020", "2019", "2018", "2017", "2016", "2015", "2014", "2013", "2012", "2011", "2010"]; + var by = [ + { n: "更新", v: "time" }, + { n: "热门", v: "hits" }, + { n: "评分", v: "score" } + ]; + function opt(arr) { + return arr.map(function (x) { return { n: x === "" ? "全部" : x, v: x }; }); + } + var base = [ + { key: "area", name: "地区", value: opt(area) }, + { key: "by", name: "排序", value: by }, + { key: "class", name: "类型", value: opt(cls) }, + { key: "year", name: "年份", value: opt(years) } + ]; + var obj = {}; + CLASSES.forEach(function (c) { obj[c.type_id] = base; }); + return obj; +})(); + +/* ---------------- 通用工具 ---------------- */ + +function toStr(v) { return v === undefined || v === null ? "" : String(v); } +function encode(s) { return encodeURIComponent(toStr(s)); } + +function fixUrl(u) { + u = toStr(u).trim(); + if (!u) return ""; + if (u.indexOf("//") === 0) return "https:" + u; + if (u.charAt(0) === "/") return HOST + u; + return u; +} + +// 封面图 wework.qpic.cn(企业微信图床)——实测不防盗链,直接用原图 URL 即可。 +// 注意:不要加 @Referer= 之类后缀,部分 TVBox 分支不识别会导致封面加载失败/不显示。 +function fixPic(u) { + u = toStr(u).trim(); + if (!u) return ""; + if (u.indexOf("//") === 0) u = "https:" + u; + else if (u.charAt(0) === "/") u = HOST + u; + return u; +} + +function textClean(s) { + return toStr(s) + .replace(/<[^>]+>/g, "") + .replace(/ /g, " ") + .replace(/&/g, "&") + .replace(/"/g, '"') + .replace(/'/g, "'") + .replace(/&#\d+;/g, "") + .replace(/\s+/g, " ") + .trim(); +} + +function log(msg) { + try { console.log("[KXYY] " + msg); } catch (e) {} +} + +/* ---------------- Cookie 持久化 ---------------- */ + +function loadCookie() { + if (COOKIE) return COOKIE; + try { + if (typeof local !== "undefined" && local.get) { + var c = local.get(CK_STORE, "cookie"); + if (c) { COOKIE = c; return c; } + } + } catch (e) {} + return COOKIE; +} + +function saveCookie(c) { + if (!c) return; + COOKIE = c; + try { + if (typeof local !== "undefined" && local.set) local.set(CK_STORE, "cookie", c); + } catch (e) {} +} + +// 从响应对象里提取 Set-Cookie 的 PHPSESSID 并合并保存(引擎支持时) +function grabCookie(res) { + try { + if (!res || typeof res === "string") return; + var h = res.headers || res.header || {}; + var sc = h["Set-Cookie"] || h["set-cookie"] || res.cookies || ""; + if (sc instanceof Array) sc = sc.join("; "); + sc = toStr(sc); + var m = /PHPSESSID=[^;,\s]+/.exec(sc); + if (m) { + var cur = loadCookie(); + if (cur.indexOf(m[0]) < 0) saveCookie(m[0]); + } + } catch (e) {} +} + +/* ---------------- 请求 ---------------- */ + +function req2(url) { + var headers = { + "User-Agent": UA, + "Referer": HOST + "/", + "Accept": "text/html,application/xhtml+xml" + }; + var ck = loadCookie(); + if (ck) headers["Cookie"] = ck; + try { + var res = req(url, { method: "GET", headers: headers, timeout: 10000 }); + grabCookie(res); + if (typeof res === "string") return res; + return toStr(res && (res.content || res.body || res.data)); + } catch (e) { + log("req error " + url + " : " + e); + return ""; + } +} + +// 提交搜索验证码(有 OCR 结果时用):成功返回 true +function verifyCheck(code) { + var url = HOST + "/index.php/ajax/verify_check?type=search&verify=" + encode(code); + var headers = { + "User-Agent": UA, + "Referer": HOST + "/", + "X-Requested-With": "XMLHttpRequest" + }; + var ck = loadCookie(); + if (ck) headers["Cookie"] = ck; + try { + var res = req(url, { method: "POST", headers: headers, data: "", timeout: 10000 }); + grabCookie(res); + var body = (typeof res === "string") ? res : toStr(res && (res.content || res.body || res.data)); + return /"code"\s*:\s*1/.test(body); + } catch (e) { + log("verify error " + e); + return false; + } +} + +/* ---------------- 解析 ---------------- */ + +// 解析卡片列表(首页/分类通用,兼容两种卡片结构) +// 结构A(首页): <a title=".." href="/voddetail/{id}.html" class="d-block cover"><img data-src>..</a>...<h3 card-title>名</h3> +// 结构B(分类): <a target=_blank href="/voddetail/{id}.html" class="..cover2"><img src>..</a>...<h3 ..card-title>名</h3> +function parseList(html) { + var list = []; + var seen = {}; + if (!html) return list; + + // 以 voddetail 链接为锚,向后捕获同卡片内的 <a>..</a> 段 与 card-title + var re = /href="\/voddetail\/(\d+)\.html"[^>]*>([\s\S]*?)<\/a>\s*<div[^>]*card-body[^>]*>([\s\S]*?)<\/div>/g; + var m; + while ((m = re.exec(html)) !== null) { + var id = m[1]; + if (seen[id]) continue; + + var inner = m[2]; // <img><span badge> + var bodyHtml = m[3]; + + // 名称:card-title + var name = ""; + var nmt = /card-title[^>]*>([\s\S]*?)<\/h3>/.exec(bodyHtml) || /<h3[^>]*>([\s\S]*?)<\/h3>/.exec(bodyHtml); + if (nmt) name = textClean(nmt[1]); + if (!name) { + var tt = /title="([^"]+)"/.exec(m[0]); + if (tt) name = textClean(tt[1]); + } + if (!name) continue; + seen[id] = true; + + // 封面:data-src 优先,其次 src + var pic = ""; + var pm = /data-src="([^"]+)"/.exec(inner) || /\ssrc="([^"]+)"/.exec(inner); + if (pm) pic = pm[1]; + + // 角标备注 + var remark = ""; + var bm = /class="[^"]*badge[^"]*"[^>]*>([\s\S]*?)<\/span>/.exec(inner); + if (bm) remark = textClean(bm[1]); + + list.push({ + vod_id: id, + vod_name: name, + vod_pic: fixPic(pic), + vod_remarks: remark + }); + } + return list; +} + +// 搜索结果专用解析(结构不同于列表页) +// <a class="col-3 col-md-1" href="/voddetail/{id}.html"><img src="封面"></a> +// <a class="...search-movie-title" href="/voddetail/{id}.html" title="名称">2019电视剧《..》已完结</a> +// <p><strong>类型/主演/简介:</strong>值</p> +function parseSearch(html) { + var list = []; + var seen = {}; + if (!html) return list; + + var re = /class="[^"]*search-movie-title[^"]*"[^>]*href="\/voddetail\/(\d+)\.html"[^>]*title="([^"]*)"[^>]*>([\s\S]*?)<\/a>([\s\S]*?)(?=class="[^"]*search-movie-title|<\/div>\s*<\/div>\s*<\/div>\s*<\/div>|$)/g; + var m; + while ((m = re.exec(html)) !== null) { + var id = m[1]; + if (seen[id]) continue; + seen[id] = true; + + var name = textClean(m[2]) || textClean(m[3]); + if (!name) continue; + var tail = m[4] || ""; + + // 封面:找该 id 对应的封面 <img>(封面 a 在标题 a 之前) + var pic = ""; + var picRe = new RegExp('href="\\/voddetail\\/' + id + '\\.html"[^>]*>\\s*<img[^>]+src="([^"]+)"'); + var pm = picRe.exec(html); + if (pm) pic = pm[1]; + + // 备注:标题尾部状态("已完结")优先,否则取类型 + var remark = ""; + var sm = /》\s*([^<]{1,12})$/.exec(textClean(m[3])); + if (sm) remark = sm[1].trim(); + if (!remark) { + var cm = /<strong>\s*类型\s*[::]?\s*<\/strong>([\s\S]*?)<\/p>/.exec(tail); + if (cm) remark = textClean(cm[1]); + } + + list.push({ + vod_id: id, + vod_name: name, + vod_pic: fixPic(pic), + vod_remarks: remark + }); + } + return list; +} + +// 详情页按 <strong>标签:</strong>值</p> 提取字段 +function detailField(html, label) { + var re = new RegExp("<strong>\\s*" + label + "\\s*[::]?\\s*<\\/strong>([\\s\\S]*?)<\\/p>", "i"); + var m = re.exec(html); + return m ? textClean(m[1]) : ""; +} + +/* ---------------- 接口实现 ---------------- */ + +function init(ext) { + var cfg = ext; + if (typeof ext === "string") { + var s = ext.trim(); + if (/^https?:\/\//.test(s)) { + HOST = s.replace(/\/+$/, ""); + } else if (/^\s*\{/.test(s)) { + try { cfg = JSON.parse(s); } catch (e) { cfg = null; } + } else if (/PHPSESSID=/.test(s)) { + saveCookie((/PHPSESSID=[^;,\s]+/.exec(s) || [])[0] || s); + } + } + if (cfg && typeof cfg === "object") { + if (cfg.host) HOST = toStr(cfg.host).replace(/\/+$/, ""); + if (cfg.cookie) saveCookie((/PHPSESSID=[^;,\s]+/.exec(toStr(cfg.cookie)) || [toStr(cfg.cookie)])[0]); + } + loadCookie(); + log("init host=" + HOST + " ck=" + (COOKIE ? "yes" : "no")); +} + +function home(filter) { + return JSON.stringify({ class: CLASSES, filters: FILTERS }); +} + +function homeVod() { + var html = req2(HOST + "/"); + var list = parseList(html).slice(0, 40); + return JSON.stringify({ list: list }); +} + +function category(tid, pg, filter, extend) { + tid = toStr(tid || "1"); + pg = parseInt(pg || 1); + if (!pg || pg < 1) pg = 1; + + extend = extend || {}; + // 12 段:idx0=tid idx1=area idx2=by idx3=class idx8=page idx11=year + var segs = [tid, "", "", "", "", "", "", "", "", "", "", ""]; + if (extend.area) segs[1] = encode(extend.area); + if (extend.by) segs[2] = extend.by; + if (extend["class"]) segs[3] = encode(extend["class"]); + segs[8] = String(pg); + if (extend.year) segs[11] = extend.year; + + var url = HOST + "/vodshow/" + segs.join("-") + ".html"; + var html = req2(url); + var list = parseList(html); + + // 该站每页约 24 部;满页视为有下一页 + var pagecount = list.length >= 24 ? pg + 1 : pg; + + log("category tid=" + tid + " pg=" + pg + " count=" + list.length); + return JSON.stringify({ + page: pg, + pagecount: pagecount, + limit: 24, + total: pagecount * 24, + list: list + }); +} + +function detail(id) { + var vid = toStr(id).replace(/[^\d]/g, ""); + var url = HOST + "/voddetail/" + vid + ".html"; + var html = req2(url); + if (!html) return JSON.stringify({ list: [] }); + + // 名称:优先 <h1>(最干净,去尾部年份括号);再 og:title 书名号;最后 title + var name = ""; + var hm = /<h1[^>]*>([\s\S]*?)<\/h1>/.exec(html); + if (hm) name = textClean(hm[1]).replace(/\s*[\((]\d{4}[\))]\s*$/, "").trim(); + if (!name) { + var om = /<meta[^>]+property="og:title"[^>]+content="([^"]+)"/.exec(html); + if (om) { + var bm = /《([^》]+)》/.exec(om[1]); + name = bm ? textClean(bm[1]) : textClean(om[1]).replace(/(在线观看|免费|高清|完整版|-\s*开心影院).*$/, "").trim(); + } + } + if (!name) { + var tm = /<title>\s*《?([^《》<]+?)》?(?:高清|在线观看|_|\s*-\s*\d{4}|\s*-\s*开心)/.exec(html); + if (tm) name = textClean(tm[1]); + } + + // 封面 + var pic = ""; + var cm = /class="[^"]*cover-lg-max-25[^"]*"[\s\S]*?<img[^>]+src="([^"]+)"/.exec(html); + if (!cm) cm = /<meta[^>]+property="og:image"[^>]+content="([^"]+)"/.exec(html); + if (cm) pic = cm[1]; + + // 简介:og:description + var desc = ""; + var dm = /<meta[^>]+property="og:description"[^>]+content="([^"]*)"/.exec(html); + if (dm) desc = textClean(dm[1]); + + var director = detailField(html, "导演"); + var actor = detailField(html, "主演"); + var area = detailField(html, "制片国家/地区") || detailField(html, "地区") || detailField(html, "国家"); + area = area.replace(/[\[\]]/g, "").trim(); + var firstShow = detailField(html, "首播") || detailField(html, "上映") || detailField(html, "年份"); + var year = ""; + var ym = /(\d{4})/.exec(firstShow); + if (ym) year = ym[1]; + if (!year) { var yh = /[\((](\d{4})[\))]/.exec(name); if (yh) year = yh[1]; } + var cls = detailField(html, "类型") || detailField(html, "分类"); + var score = detailField(html, "评分") || detailField(html, "豆瓣评分"); + + var vod = { + vod_id: vid, + vod_name: name, + vod_pic: fixPic(pic), + vod_year: year, + vod_area: area, + vod_actor: actor, + vod_director: director, + vod_remarks: score, + vod_content: desc || cls + }; + + // 线路名:nav-tabs 里 a[href="#tabs-home-{sid}"],文本去 svg/badge + var navBlock = html; + var tcStart = html.indexOf("tab-content"); + var navEnd = tcStart > 0 ? tcStart : html.length; + var navStart = html.indexOf("nav-tabs"); + if (navStart >= 0) navBlock = html.slice(navStart, navEnd); + + var sids = []; + var names = []; + var navRe = /href="#tabs-home-(\d+)"[^>]*>([\s\S]*?)<\/a>/g; + var nvm; + while ((nvm = navRe.exec(navBlock)) !== null) { + var sid = nvm[1]; + var raw = nvm[2].replace(/<svg[\s\S]*?<\/svg>/gi, ""); + // 去掉集数徽标 <span class="badge">12</span> + raw = raw.replace(/<span[^>]*badge[^>]*>[\s\S]*?<\/span>/gi, ""); + var fn = textClean(raw) || ("线路" + sid); + sids.push(sid); + names.push(fn); + } + + // 每条线路剧集:#tabs-home-{sid} 内的 a[href^="/vodplay/"] + var playFrom = []; + var playUrl = []; + for (var i = 0; i < sids.length; i++) { + var sid2 = sids[i]; + var paneRe = new RegExp('id="tabs-home-' + sid2 + '"([\\s\\S]*?)(?:<div class="tab-pane|<\\/div>\\s*<\\/div>\\s*<\\/div>)'); + var pm2 = paneRe.exec(html); + var pane = pm2 ? pm2[1] : ""; + var eps = []; + var epRe = /<a[^>]+href="(\/vodplay\/[^"]+\.html)"[^>]*>([\s\S]*?)<\/a>/g; + var em; + while ((em = epRe.exec(pane)) !== null) { + var epName = textClean(em[2]) || (eps.length + 1); + eps.push(epName + "$" + fixUrl(em[1])); + } + if (eps.length) { + playFrom.push(names[i]); + playUrl.push(eps.join("#")); + } + } + + if (playFrom.length) { + vod.vod_play_from = playFrom.join("$$$"); + vod.vod_play_url = playUrl.join("$$$"); + } else { + vod.vod_play_from = "提示"; + vod.vod_play_url = "暂无播放源$"; + } + + log("detail id=" + vid + " lines=" + playFrom.length); + return JSON.stringify({ list: [vod] }); +} + +function play(flag, id, flags) { + var pageUrl = fixUrl(id); + var html = req2(pageUrl); + var header = { "User-Agent": UA, "Referer": HOST + "/" }; + + var url = ""; + var enc = 0; + + // var player_data={...} + var pm = /var\s+player_data\s*=\s*(\{[\s\S]*?\})\s*<\/script>/.exec(html); + if (!pm) pm = /player_data\s*=\s*(\{[\s\S]*?\})/.exec(html); + if (pm) { + var jsonStr = pm[1]; + var um = /"url"\s*:\s*"([^"]*)"/.exec(jsonStr); + if (um) url = um[1]; + var em2 = /"encrypt"\s*:\s*(\d+)/.exec(jsonStr); + if (em2) enc = parseInt(em2[1]); + } + if (!url) { + var m2 = /"url"\s*:\s*"([^"]+\.(?:m3u8|mp4)[^"]*)"/i.exec(html); + if (m2) url = m2[1]; + } + + url = url.replace(/\\\//g, "/").replace(/\\u002F/gi, "/").trim(); + if (url && enc == 2) { try { url = decodeURIComponent(url); } catch (e) {} } + if (url && enc == 1) { try { url = unescape(url); } catch (e) {} } + + // 明文 m3u8/mp4 直链 -> 直接播放 + if (url && /^https?:\/\//.test(url) && /\.(m3u8|mp4|flv|ts|mkv)/i.test(url)) { + log("play direct " + url); + return JSON.stringify({ parse: 0, url: url, header: header }); + } + + // 非直链(前端加密线路)-> 交给播放器嗅探播放页 + log("play sniff " + pageUrl); + return JSON.stringify({ parse: 1, jx: 0, url: pageUrl, header: header }); +} + +function search(wd, quick, pg) { + pg = parseInt(pg || 1); + if (!pg || pg < 1) pg = 1; + if (pg > 1) return JSON.stringify({ list: [], page: pg, pagecount: pg }); + + var url = HOST + "/vodsearch/" + encode(wd) + "-------------.html"; + var html = req2(url); + + // 命中图形验证码防护 + if (/安全验证|请输入验证码|verify\/index/.test(html)) { + // 若引擎在此前请求中拿到了新 PHPSESSID,重试一次(Cookie 复用生效场景) + var ck = loadCookie(); + if (ck) { + html = req2(url); + } + if (/安全验证|请输入验证码|verify\/index/.test(html)) { + log("search blocked by captcha (需注入已验证的 PHPSESSID Cookie)"); + return JSON.stringify({ + list: [{ + vod_id: "", + vod_name: "搜索需验证码:请在源 ext 注入已验证 PHPSESSID", + vod_pic: "", + vod_remarks: "验证拦截" + }], + page: 1, pagecount: 1, limit: 0, total: 0 + }); + } + } + + var list = parseSearch(html); + if (!list.length) list = parseList(html); // 结构兜底 + return JSON.stringify({ + list: list, page: 1, pagecount: 1, + limit: list.length, total: list.length + }); +} + +/* ---------------- 导出 ---------------- */ + +__JS_SPIDER__ = { + init: init, + home: home, + homeVod: homeVod, + category: category, + detail: detail, + play: play, + search: search +}; diff --git a/tianjitop/llllo4k/js/星辰影院.js b/tianjitop/llllo4k/js/星辰影院.js new file mode 100644 index 00000000..a09a3639 --- /dev/null +++ b/tianjitop/llllo4k/js/星辰影院.js @@ -0,0 +1,318 @@ +/* +title: '星辰影院', author: '小可乐/v6.1.1' +说明:可以不写ext,也可以写ext,ext支持的参数和格式参数如下 +"ext": { + "host": "xxxx", //站点网址 + "timeout": 6000, //请求超时,单位毫秒 + "catesSet": "电视剧&电影&综艺", //指定分类和顺序 + "tabsSet": "土星&下载线1" //指定线路和顺序 +} +*/ + +const MOBILE_UA = 'Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.91 Mobile Safari/537.36'; +const DefHeader = {'User-Agent': MOBILE_UA}; +var HOST; +var KParams = { + headers: {'User-Agent': MOBILE_UA}, + timeout: 5000 +}; + +async function init(cfg) { + try { + HOST = (cfg.ext?.host?.trim() || 'https://www.xcyycn.com').replace(/\/$/, ''); + KParams.headers['Referer'] = HOST; + let parseTimeout = parseInt(cfg.ext?.timeout?.trim(), 10); + if (parseTimeout > 0) {KParams.timeout = parseTimeout;} + KParams.catesSet = cfg.ext?.catesSet?.trim() || ''; + KParams.tabsSet = cfg.ext?.tabsSet?.trim() || ''; + KParams.resHtml = await request(HOST); + } catch (e) { + console.error('初始化参数失败:', e.message); + } +} + +async function home(filter) { + try { + let resHtml = KParams.resHtml; + if (!resHtml) {throw new Error('源码为空');} + let typeArr = cutStr(resHtml, 'hl-nav-item£>', '</li>', '', false, 0, true).filter(flt => flt.includes('/v/')); + let classes = typeArr.map((it,idx) => { + let cName = cutStr(it, '>', '<', `分类${idx+1}`); + let cId = cutStr(it, '/v/', '.', `值${idx+1}`); + return {type_name: cName, type_id: cId}; + }); + if (KParams.catesSet) {classes = ctSet(classes, KParams.catesSet);} + let filters = {}; + try { + const nameObj = {class: 'class,剧情', area: 'area,地区', lang: 'lang,语言', year: 'year,年份', letter: 'letter,字母', by: 'by,排序'}; + const regObj = {class: /\d+---([^-]+)-/, area: /\/\d+-([^-]+)-/, lang: /\d+----([^-]+)-/, year: /-([^-]+)\./, letter: /\d+-----([^-]+)-/, by: /\d+--([^-]+)-/}; + let resHtmlList = await Promise.all( + classes.map(async (it) => { + try {return await request(`${HOST}/vs/${it.type_id}-----------.html`);} catch (sErr) {return '';} + }) + ); + classes.forEach((it,idx) => { + let resfHtml = resHtmlList[idx]; + if (resfHtml) { + let flValArr = cutStr(resfHtml, 'hl-filter-list', '</ul>', '', false, 0, true).slice(1); + filters[it.type_id] = Object.entries(nameObj).map(([nObjk, nObjv]) => { + let [kkey, kname] = nObjv.split(','); + let tgVal = flValArr.find(fv => regObj[kkey].test(fv)) ?? ''; + if (kkey === 'by') {tgVal = cutStr(resfHtml, 'hl-rb-title', '</div>', '', false);} + let tgValArr = cutStr(tgVal, '<a', '/a>', '', false, 0, true); + let tValArr = kkey !== 'by' ? tgValArr.slice(1) : tgValArr; + let kvalue = tValArr.map(el => { + let n = cutStr(el, '>', '<', '空白'); + let v = n; + if (kkey === 'by') {v = el.match(regObj[kkey])?.[1] ?? '';} + return {n: n, v: v}; + }); + if (kkey !== 'by') {kvalue.unshift({n: '全部', v: ''});} + return {key: kkey, name: kname, value: kvalue}; + }).filter(flt => flt.key && flt.value.length > 1); + } + }); + } catch (e) { + filters = {} + } + return JSON.stringify({class: classes, filters: filters}); + } catch (e) { + console.error('获取分类失败:', e.message); + return JSON.stringify({class: [], filters: {}}); + } +} + +async function homeVod() { + try { + let resHtml = KParams.resHtml; + let VODS = getVodList(resHtml); + return JSON.stringify({list: VODS}); + } catch (e) { + console.error('推荐页获取失败:', e.message); + return JSON.stringify({list: []}); + } +} + +async function category(tid, pg, filter, extend) { + try { + pg = parseInt(pg, 10), pg = pg > 0 ? pg : 1; + let fl = extend || {}; + let cateUrl = `${HOST}/vs/${fl.cateId || tid}-${fl.area ?? ''}-${fl.by ?? ''}-${fl.class ?? ''}-${fl.lang ?? ''}-${fl.letter ?? ''}---${pg}---${fl.year ?? ''}.html`; + let resHtml = await request(cateUrl); + let VODS = getVodList(resHtml); + let limit = VODS.length; + let pagecount = cutStr(resHtml, 'hl-page-total£/', '页', '1'); + pagecount = Number(pagecount); + return JSON.stringify({list: VODS, page: pg, pagecount: pagecount, limit: limit, total: limit*pagecount}); + } catch (e) { + console.error('类别页获取失败:', e.message); + return JSON.stringify({list: [], page: 1, pagecount: 0, limit: 30, total: 0}); + } +} + +async function search(wd, quick, pg) { + try { + pg = parseInt(pg, 10), pg = pg > 0 ? pg : 1; + let searchUrl = `${HOST}/s${wd}/page/${pg}.html`; + let resHtml = await request(searchUrl); + let VODS = getVodList(resHtml); + return JSON.stringify({list: VODS, page: pg, pagecount: 10, limit: 30, total: 300}); + } catch (e) { + console.error('搜索页获取失败:', e.message); + return JSON.stringify({list: [], page: 1, pagecount: 0, limit: 30, total: 0}); + } +} + +function getVodList(khtml) { + try { + if (!khtml) {throw new Error('源码为空');} + let kvods = []; + let listArr = cutStr(khtml, 'hl-lazy', '</a>', '', false, 0, true).filter(flt => flt.includes('remarks')); + for (let it of listArr) { + let kname = cutStr(it, 'title="', '"', '名称'); + let kpic = cutStr(it, 'data-original="', '"', '图片'); + let kremarks = cutStr(it, 'remarks">', '</', '状态'); + let kid = cutStr(it, 'href="', '"'); + if (kid) { + kvods.push({ + vod_name: kname, + vod_pic: kpic, + vod_remarks: kremarks, + vod_id: `${kid}@${kname}@${kpic}@${kremarks}` + }); + } + } + return kvods; + } catch (e) { + console.error(`生成视频列表失败:`, e.message); + return []; + } +} + +async function detail(ids) { + try { + let [id, kname, kpic, kremarks] = ids.split('@'); + let detailUrl = !/^http/.test(id) ? `${HOST}${id}` : id; + let resHtml = await request(detailUrl); + if (!resHtml) {throw new Error('源码为空');} + let intros = cutStr(resHtml, '"clearfix">', '</ul>', '', false); + let [ktabs, kurls] = [[], []]; + let zx_tabs = cutStr(resHtml, '<span class="hl-from', '/span>', '', false, 0, true).map((it,idx) => cutStr(it, '>', '<', `在线${idx+1}`) ); + ktabs.push(...zx_tabs); + let zx_urls = cutStr(resHtml, 'hl-plays-list">', '</ul>', '', false, 0, true).map((item,idx) => cutStr(item, '<li', '</li>', '', false, 0, true).map(it => { return cutStr(it, '>', '</a>', 'noEpi') + '$' + HOST + cutStr(it, 'href="', '"', 'noUrl'); }).join('#') ); + kurls.push(...zx_urls); + let xzArr = cutStr(resHtml, 'hl-downs-list hl', '</ul>', '', false, 0, true); + if (xzArr[0]) { + xzArr.forEach((item,idx) => { + let siglUrl = cutStr(item, 'down_url', '>', '', false, 0, true).map(it => `${cutStr(it, 'file_name="', '"', 'noEpi')}$${cutStr(it, 'value="', '"', 'noUrl')}` ).join('#'); + ktabs.push(`下载线${idx+1}`); + kurls.push(siglUrl); + }); + } + if (KParams.tabsSet) { + let ktus = ktabs.map((it, idx) => { return {type_name: it, type_value: kurls[idx]} }); + ktus = ctSet(ktus, KParams.tabsSet); + ktabs = ktus.map(it => it.type_name); + kurls = ktus.map(it => it.type_value); + } + let VOD = { + vod_id: detailUrl, + vod_name: kname, + vod_pic: kpic, + vod_remarks: kremarks, + type_name: cutStr(intros, '类型:', '</li>', '类型'), + vod_year: cutStr(intros, '年份:', '</li>', '1000'), + vod_area: cutStr(intros, '地区:', '</li>', '地区'), + vod_lang: cutStr(intros, '语言:', '</li>', '语言'), + vod_director: cutStr(intros, '导演:', '</li>', '导演'), + vod_actor: cutStr(intros, '主演:', '</li>', '主演'), + vod_content: cutStr(intros, '简介:', '</li>', kname), + vod_play_from: ktabs.join('$$$'), + vod_play_url: kurls.join('$$$') + }; + return JSON.stringify({list: [VOD]}); + } catch (e) { + console.error('详情页获取失败:', e.message); + return JSON.stringify({list: []}); + } +} + +async function play(flag, ids, flags) { + try { + let kp = 0, kurl = ''; + if (/下载/.test(flag)) { + kurl = ids; + } else { + let resHtml = await request(ids); + let codeObj = safeParseJSON(cutStr(resHtml, 'var player_£=', '<', '', false)); + kurl = codeObj?.url ?? ''; + if (!/^http/.test(kurl)) { + kurl = ids; + kp = 1; + } + } + return JSON.stringify({jx: 0, parse: kp, url: kurl, header: DefHeader}); + } catch (e) { + console.error('播放失败:', e.message); + return JSON.stringify({jx: 0, parse: 0, url: '', header: {}}); + } +} + +function ctSet(kArr, setStr) { + try { + if (!Array.isArray(kArr) || kArr.length === 0 || typeof setStr !== 'string' || !setStr) { throw new Error('第一参数需为非空数组,第二参数需为非空字符串'); } + const set_arr = [...kArr]; + const arrNames = setStr.split('&'); + const filtered_arr = arrNames.map(item => set_arr.find(it => it.type_name === item)).filter(Boolean); + return filtered_arr.length? filtered_arr : [set_arr[0]]; + } catch (e) { + console.error('ctSet 执行异常:', e.message); + return kArr; + } +} + +function safeParseJSON(jStr){ + try {return JSON.parse(jStr);} catch(e) {return null;} +} + +function cutStr(str, prefix = '', suffix = '', defVal = '', clean = true, i = 0, all = false) { + try { + if (typeof str !== 'string') {throw new Error('被截取对象必须为字符串');} + const cleanStr = cs => String(cs).replace(/<[^>]*?>/g, ' ').replace(/( |[\u0020\u00A0\u3000\s])+/g, ' ').trim().replace(/\s+/g, ' '); + const esc = s => String(s).replace(/[.*+?${}()|[\]\\/^]/g, '\\$&'); + let pre = esc(prefix).replace(/£/g, '[^]*?'), end = esc(suffix); + const regex = new RegExp(`${pre || '^'}([^]*?)${end || '$'}`, 'g'); + const matchIter = str.matchAll(regex); + if (all) { + let matchArr = [...matchIter]; + if (!matchArr.length) {return [defVal];} + return matchArr.map(ela => ela[1] !== undefined ? (clean ? cleanStr(ela[1]) : ela[1]) : defVal); + } + const idx = parseInt(i, 10); + if (isNaN(idx)) {throw new Error('序号必须为整数');} + let tgResult, matchIdx = 0; + if (idx >= 0) { + for (let elt of matchIter) { + if (matchIdx++ === idx) { + tgResult = elt[1]; + break; + } + } + } else { + let absI = Math.abs(idx), ringBuf = new Array(absI), ringPtr = 0, ringCnt = 0; + for (let elt of matchIter) { + ringBuf[ringPtr] = elt[1]; + ringPtr = (ringPtr + 1) % absI; + ringCnt = Math.min(ringCnt + 1, absI); + matchIdx++; + } + tgResult = (matchIdx >= absI && ringCnt > 0) ? ringBuf[ringPtr % ringCnt] : undefined; + } + return tgResult !== undefined ? (clean ? (cleanStr(tgResult) || defVal) : tgResult) : defVal; + } catch (e) { + console.error(`字符串截取错误:`, e.message); + return all ? ['cutErr'] : 'cutErr'; + } +} + +async function request(reqUrl, options = {}) { + try { + if (typeof reqUrl !== 'string' || !reqUrl.trim()) { throw new Error('reqUrl需为字符串且非空'); } + if (typeof options !== 'object' || Array.isArray(options) || options === null) { throw new Error('options类型需为非null对象'); } + options.method = options.method?.toUpperCase() || 'GET'; + if (['GET', 'HEAD'].includes(options.method)) { + delete options.body; + delete options.data; + delete options.postType; + } + let {headers, timeout, ...restOpts} = options; + const optObj = { + headers: (typeof headers === 'object' && !Array.isArray(headers) && headers) ? headers : KParams.headers, + timeout: parseInt(timeout, 10) > 0 ? parseInt(timeout, 10) : KParams.timeout, + ...restOpts + }; + const res = await req(reqUrl, optObj); + if (options.withHeaders) { + const resHeaders = typeof res.headers === 'object' && !Array.isArray(res.headers) && res.headers ? res.headers : {}; + const resWithHeaders = { ...resHeaders, body: res?.content ?? '' }; + return JSON.stringify(resWithHeaders); + } + return res?.content ?? ''; + } catch (e) { + console.error(`${reqUrl}→请求失败:`, e.message); + return options?.withHeaders ? JSON.stringify({ body: '' }) : ''; + } +} + +export function __jsEvalReturn() { + return { + init, + home, + homeVod, + category, + search, + detail, + play, + proxy: null + }; +} \ No newline at end of file diff --git a/tianjitop/llllo4k/js/猪猪影院.js b/tianjitop/llllo4k/js/猪猪影院.js new file mode 100644 index 00000000..725cf121 --- /dev/null +++ b/tianjitop/llllo4k/js/猪猪影院.js @@ -0,0 +1,371 @@ +import cheerio from 'assets://js/lib/cheerio.min.js'; + +const appConfig = { + siteName: "猪猪影院", + siteUrl: "https://www.chnland.com" +} +const UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"; + +async function init(ext) { + console.log("初始化爬虫:", appConfig.siteName); +} + +const movieSubClass = [ + { "n": "全部", "v": "" }, { "n": "动作片", "v": "6" }, { "n": "喜剧片", "v": "7" }, + { "n": "爱情片", "v": "8" }, { "n": "科幻片", "v": "9" }, { "n": "恐怖片", "v": "10" }, + { "n": "剧情片", "v": "11" }, { "n": "战争片", "v": "12" }, { "n": "纪录片", "v": "24" }, + { "n": "香港电影", "v": "44" }, { "n": "动漫电影", "v": "45" } +]; + +const tvClass = [ + { "n": "全部", "v": "" }, { "n": "国产剧", "v": "国产剧" }, { "n": "港剧", "v": "港剧" }, + { "n": "欧美剧", "v": "欧美剧" }, { "n": "日剧", "v": "日剧" }, { "n": "韩剧", "v": "韩剧" }, + { "n": "台剧", "v": "台剧" }, { "n": "泰剧", "v": "泰剧" } +]; + +const yearFilter = [ + { "n": "全部", "v": "" }, { "n": "2026", "v": "2026" }, { "n": "2025", "v": "2025" }, + { "n": "2024", "v": "2024" }, { "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" } +]; + +const letterFilter = [ + { "n": "全部", "v": "" }, { "n": "A", "v": "A" }, { "n": "B", "v": "B" }, + { "n": "C", "v": "C" }, { "n": "D", "v": "D" }, { "n": "E", "v": "E" }, + { "n": "F", "v": "F" }, { "n": "G", "v": "G" }, { "n": "H", "v": "H" }, + { "n": "I", "v": "I" }, { "n": "J", "v": "J" }, { "n": "K", "v": "K" }, + { "n": "L", "v": "L" }, { "n": "M", "v": "M" }, { "n": "N", "v": "N" }, + { "n": "O", "v": "O" }, { "n": "P", "v": "P" }, { "n": "Q", "v": "Q" }, + { "n": "R", "v": "R" }, { "n": "S", "v": "S" }, { "n": "T", "v": "T" }, + { "n": "U", "v": "U" }, { "n": "V", "v": "V" }, { "n": "W", "v": "W" }, + { "n": "X", "v": "X" }, { "n": "Y", "v": "Y" }, { "n": "Z", "v": "Z" }, + { "n": "0-9", "v": "0-9" } +]; + +const myFilters = { + "1": [ + { "key": "class", "name": "子分类", "value": movieSubClass }, + { "key": "year", "name": "年份", "value": yearFilter }, + { "key": "letter", "name": "字母", "value": letterFilter } + ], + "2": [ + { "key": "class", "name": "类型", "value": tvClass }, + { "key": "year", "name": "年份", "value": yearFilter }, + { "key": "letter", "name": "字母", "value": letterFilter } + ], + "3": [ + { "key": "year", "name": "年份", "value": yearFilter }, + { "key": "letter", "name": "字母", "value": letterFilter } + ], + "4": [ + { "key": "year", "name": "年份", "value": yearFilter }, + { "key": "letter", "name": "字母", "value": letterFilter } + ], + "35": [ + { "key": "year", "name": "年份", "value": yearFilter }, + { "key": "letter", "name": "字母", "value": letterFilter } + ], + "36": [ + { "key": "year", "name": "年份", "value": yearFilter }, + { "key": "letter", "name": "字母", "value": letterFilter } + ] +}; + +async function home(filter) { + return JSON.stringify({ + class: [ + { type_id: "1", type_name: "电影" }, + { type_id: "2", type_name: "电视剧" }, + { type_id: "3", type_name: "综艺" }, + { type_id: "4", type_name: "动漫" }, + { type_id: "35", type_name: "动画片" }, + { type_id: "36", type_name: "短剧" } + ], + filters: myFilters + }); +} + +function buildCategoryUrl(tid, pg, extend) { + let subClass = extend.class || ''; + let targetId = subClass || tid; + return `${appConfig.siteUrl}/vodtype/${targetId}-${pg}.html`; +} + +async function category(tid, pg, filter, extend) { + pg = pg || 1; + extend = extend || {}; + + let url = buildCategoryUrl(tid, pg, extend); + + try { + const html = (await req(url)).content; + const $ = cheerio.load(html); + let list = []; + + $("ul.stui-vodlist.clearfix .stui-vodlist__thumb.lazyload").each(function (index, el) { + let vod_id = $(el).attr("href"); + let vod_name = $(el).attr("title"); + let vod_pic = $(el).attr("data-original"); + let vod_remarks = $(el).find(".pic-text").text().trim(); + + if (vod_id && vod_name) { + list.push({ vod_id, vod_name, vod_pic, vod_remarks }); + } + }); + + let pagecount = 1; + $("a:contains('尾页')").each(function () { + let href = $(this).attr("href"); + if (href) { + let m = href.match(/\/vodtype\/\d+-(\d+)\.html/); + if (m) { + let p = parseInt(m[1]); + if (p > pagecount) pagecount = p; + } + } + }); + + if (pagecount <= 1) { + let maxPage = 1; + $(".stui-page a, .mac_pages a").each(function () { + let href = $(this).attr("href"); + if (href) { + let m = href.match(/\/vodtype\/\d+-(\d+)\.html/); + if (m) { + let p = parseInt(m[1]); + if (p > maxPage) maxPage = p; + } + } + }); + pagecount = maxPage; + } + + return JSON.stringify({ list, pagecount }); + } catch (e) { + console.error("分类列表获取失败:", e.message); + return JSON.stringify({ list: [], pagecount: 0 }); + } +} + +// ===== 按照崇礼4K风格重写的搜索函数 ===== +async function search(wd, quick, page) { + // 崇礼4K风格:不支持搜索分页,page>=2直接返回空 + if (page >= 2) { + return JSON.stringify({ list: [], pagecount: 1 }); + } + + try { + // 崇礼4K风格:wd不encode,直接拼接 + // 注意:崇礼4K用的是 /cupfox-search/,猪猪影院用 /vodsearch/ + const url = `${appConfig.siteUrl}/vodsearch/-------------.html?wd=${wd}&submit=`; + const html = (await req(url)).content; + const $ = cheerio.load(html); + let list = []; + + // 崇礼4K风格:从子元素提取数据 + // 猪猪影院搜索页结构:li > div.stui-vodlist__box > a.stui-vodlist__thumb + $('ul.stui-vodlist.clearfix li').each((i, el) => { + const thumb = $(el).find('.stui-vodlist__thumb'); + const vod_id = thumb.attr('href') || ''; + const vod_name = thumb.attr('title') || ''; + const vod_pic = thumb.attr('data-original') || ''; + const vod_remarks = $(el).find('.pic-text').text().trim(); + + if (vod_id && vod_name) { + list.push({ + vod_id, + vod_name, + vod_pic, + vod_remarks + }); + } + }); + + // 备用选择器:如果上面的没匹配到 + if (list.length === 0) { + $('.stui-vodlist__thumb').each((i, el) => { + const vod_id = $(el).attr('href') || ''; + const vod_name = $(el).attr('title') || ''; + const vod_pic = $(el).attr('data-original') || ''; + const vod_remarks = $(el).find('.pic-text').text().trim(); + + if (vod_id && vod_name) { + list.push({ + vod_id, + vod_name, + vod_pic, + vod_remarks + }); + } + }); + } + + // 崇礼4K风格:固定返回 pagecount=1 + return JSON.stringify({ + list: list, + pagecount: 1 + }); + } catch (e) { + console.error("搜索失败:", e.message); + return JSON.stringify({ list: [] }); + } +} + +async function detail(id) { + try { + const html = (await req(appConfig.siteUrl + id)).content; + const $ = cheerio.load(html); + + const vod_name = $('.stui-content__detail h1, .stui-content__detail .title').first().text().trim(); + const imgSrc = $('.stui-content__thumb img').attr("data-original") || ''; + const vod_pic = imgSrc ? (imgSrc.startsWith('http') ? imgSrc : appConfig.siteUrl + imgSrc) : ''; + + let vod_actor = ''; + let vod_director = ''; + let vod_remarks = ''; + let vod_year = ''; + let vod_area = ''; + let vod_lang = ''; + + $('.stui-content__detail p.data').each((i, el) => { + const text = $(el).text(); + if (text.includes('主演')) { + vod_actor = $(el).find('a').map(function () { return $(this).text().trim(); }).get().join(','); + } else if (text.includes('导演')) { + vod_director = $(el).find('a').map(function () { return $(this).text().trim(); }).get().join(','); + } else if (text.includes('更新') || text.includes('状态')) { + vod_remarks = text.replace(/.*(?:更新|状态)[::]/g, '').trim(); + } else if (text.includes('年份')) { + vod_year = $(el).find('a').text().trim(); + } else if (text.includes('地区')) { + vod_area = $(el).find('a').text().trim(); + } else if (text.includes('语言')) { + vod_lang = $(el).find('a').text().trim(); + } + }); + + const vod_content = $('.stui-content__detail .detail, .stui-content__detail .desc').text().trim(); + + let rawLines = []; + let rawPlaylists = []; + + $('.nav-tabs li a').each((i, el) => { + const lineName = $(el).text().trim(); + if (lineName && lineName !== '全部') { + rawLines.push(lineName); + } + }); + + $('.stui-content__playlist').each((lineIndex, poolEl) => { + const episodes = []; + $(poolEl).find('a').each((episodeIndex, epEl) => { + const name = $(epEl).text().trim(); + const href = $(epEl).attr('href') || ''; + if (name && href) { + episodes.push(`${name}$${href}`); + } + }); + rawPlaylists.push(episodes); + }); + + if (rawLines.length === 0 && rawPlaylists.length > 0) { + for (let i = 0; i < rawPlaylists.length; i++) { + rawLines.push(`线路${i + 1}`); + } + } + + let finalLines = []; + let finalPlaylists = []; + for (let i = 0; i < rawLines.length; i++) { + if (rawPlaylists[i] && rawPlaylists[i].length > 0) { + finalLines.push(rawLines[i]); + finalPlaylists.push(rawPlaylists[i]); + } + } + + const { vod_play_from, vod_play_url } = buildVodPlayData(finalLines, finalPlaylists); + + const vod = { + vod_id: id, vod_name, vod_pic, vod_actor, vod_director, + vod_remarks, vod_year, vod_area, vod_lang, vod_content, + vod_play_from, vod_play_url + }; + + return JSON.stringify({ list: [vod] }); + } catch (error) { + console.error(`解析详情页异常 [ID: ${id}]:`, error); + return JSON.stringify({ list: [] }); + } +} + +function buildVodPlayData(lines, playlists) { + const processedPlaylists = playlists.map(eps => eps.join('#')); + return { + vod_play_from: lines.filter(Boolean).join('$$$'), + vod_play_url: processedPlaylists.join('$$$') + }; +} + +function extractVideoUrl(html) { + let paIdx = html.indexOf('var player_aaaa='); + if (paIdx >= 0) { + let scriptEnd = html.indexOf('</script>', paIdx); + if (scriptEnd > 0) { + let playerContent = html.substring(paIdx, scriptEnd); + let urlMatch = playerContent.match(/"url"\s*:\s*"([^"]+)"/); + if (urlMatch) { + return urlMatch[1].replace(/\\\//g, '/'); + } + } + } + return ''; +} + +async function play(flag, id, flags) { + try { + const html = (await req(`${appConfig.siteUrl}${id}`)).content; + const url = extractVideoUrl(html); + + if (url) { + if (url.endsWith('.m3u8') || url.endsWith('.mp4') || url.endsWith('.flv')) { + return JSON.stringify({ + parse: 0, + Header: { "User-Agent": UA, "Referer": appConfig.siteUrl }, + url: url + }); + } + return JSON.stringify({ + parse: 1, + Header: { "User-Agent": UA, "Referer": appConfig.siteUrl }, + url: url + }); + } + + const iframeMatch = html.match(/<iframe[^>]*src="([^"]+)"/); + if (iframeMatch) { + return JSON.stringify({ + parse: 1, + Header: { "User-Agent": UA, "Referer": appConfig.siteUrl }, + url: iframeMatch[1] + }); + } + + return JSON.stringify({ parse: 0, url: "" }); + } catch (e) { + console.error("播放失败:", e); + return JSON.stringify({ parse: 0, url: "" }); + } +} + +export default { + init, + home, + category, + detail, + search, + play +}; diff --git a/tianjitop/llllo4k/js/电影人生.js b/tianjitop/llllo4k/js/电影人生.js new file mode 100644 index 00000000..cc407ce6 --- /dev/null +++ b/tianjitop/llllo4k/js/电影人生.js @@ -0,0 +1,510 @@ +import cheerio from 'assets://js/lib/cheerio.min.js'; + +const appConfig = { + siteName: "电影人生", + siteUrl: "https://dyrs6.vip" +}; +const UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"; + +async function init(ext) { + console.log("初始化爬虫:", appConfig.siteName); +} + +const classList = [ + { type_id: "dianying", type_name: "电影" }, + { type_id: "dianshiju", type_name: "电视剧" }, + { type_id: "zongyi", type_name: "综艺" }, + { type_id: "dongman", type_name: "动漫" }, + { type_id: "duanju", type_name: "短剧" }, + { type_id: "dianying-剧情", type_name: "剧情片" }, + { type_id: "dianying-喜剧", type_name: "喜剧片" }, + { type_id: "dianying-动作", type_name: "动作片" }, + { type_id: "dianying-爱情", type_name: "爱情片" }, + { type_id: "dianying-惊悚", type_name: "惊悚片" }, + { type_id: "dianying-犯罪", type_name: "犯罪片" }, + { type_id: "dianying-恐怖", type_name: "恐怖片" }, + { type_id: "dianying-悬疑", type_name: "悬疑片" }, + { type_id: "dianying-冒险", type_name: "冒险片" }, + { type_id: "dianying-奇幻", type_name: "奇幻片" }, + { type_id: "dianying-科幻", type_name: "科幻片" }, + { type_id: "dianying-家庭", type_name: "家庭片" }, + { type_id: "dianying-历史", type_name: "历史片" }, + { type_id: "dianying-战争", type_name: "战争片" }, + { type_id: "dianying-纪录片", type_name: "纪录片" }, + { type_id: "dianying-古装", type_name: "古装片" }, + { type_id: "dianying-音乐", type_name: "音乐片" }, + { type_id: "dianying-动画", type_name: "动画片" } +]; + +function getAreaFilter() { + return { + "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": "其他" } + ] + }; +} + +function getYearFilter() { + let years = [{ "n": "全部", "v": "" }]; + const currentYear = new Date().getFullYear(); + for (let y = currentYear; y >= 2010; y--) { + years.push({ "n": String(y), "v": String(y) }); + } + return { "key": "year", "name": "年份", "value": years }; +} + +function getLangFilter() { + return { + "key": "lang", "name": "语言", "value": [ + { "n": "全部", "v": "" }, + { "n": "国语", "v": "国语" }, + { "n": "粤语", "v": "粤语" }, + { "n": "英语", "v": "英语" }, + { "n": "日语", "v": "日语" }, + { "n": "韩语", "v": "韩语" }, + { "n": "其他", "v": "其他" } + ] + }; +} + +function getTypeFilter() { + return { + "key": "type", "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": "纪录片" } + ] + }; +} + +const commonFilters = [getAreaFilter(), getYearFilter(), getLangFilter(), getTypeFilter()]; + +const myFilters = {}; +classList.forEach(item => { + myFilters[item.type_id] = commonFilters; +}); + +async function home(filter) { + let list = []; + try { + const html = (await req(appConfig.siteUrl, { + method: "GET", + headers: { + "User-Agent": UA, + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" + } + })).content; + const $ = cheerio.load(html); + let seen = {}; + + $("a[href*='/wzzy-']").each(function () { + let vod_id = $(this).attr("href"); + if (!vod_id || seen[vod_id]) return; + if (!vod_id.startsWith('/wzzy-')) return; + + let vod_name = $(this).attr("title") || $(this).text().trim() || ""; + let hash = vod_id.match(/\/wzzy-\d+\/([a-f0-9]+)\.html/)?.[1] || ""; + let vod_pic = hash ? `${appConfig.siteUrl}/img/id/${hash}.jpg` : ""; + let vod_remarks = ""; + + if (vod_name && vod_id) { + seen[vod_id] = true; + list.push({ vod_id, vod_name, vod_pic, vod_remarks }); + } + }); + } catch (e) { + console.error("首页推荐获取失败:", e.message); + } + + return JSON.stringify({ + class: classList, + filters: myFilters, + list: list.slice(0, 30) + }); +} + +function buildCategoryUrl(tid, pg, extend) { + extend = extend || {}; + let baseType = tid.split('-')[0]; + let subType = tid.split('-')[1] || ''; + + if (!subType && extend.type) { + subType = extend.type; + } + + let url = `/${baseType}.html`; + let params = []; + + if (subType) params.push(`class=${encodeURIComponent(subType)}`); + if (pg && pg > 1) params.push(`page=${pg}`); + + if (params.length > 0) { + url += '?' + params.join('&'); + } + + return appConfig.siteUrl + url; +} + +function fixUrl(u) { + if (!u) return ''; + if (u.startsWith('http')) return u; + if (u.startsWith('//')) return 'https:' + u; + if (u.startsWith('/')) return appConfig.siteUrl + u; + return u; +} + +function parseListHtml(html) { + const $ = cheerio.load(html); + let list = []; + let vodIds = {}; + + $("a[href*='/wzzy-']").each(function () { + let vod_id = $(this).attr("href"); + if (!vod_id || vodIds[vod_id]) return; + if (!vod_id.startsWith('/wzzy-')) return; + + let vod_name = $(this).attr("title") || $(this).text().trim() || ""; + let hash = vod_id.match(/\/wzzy-\d+\/([a-f0-9]+)\.html/)?.[1] || ""; + let vod_pic = hash ? `${appConfig.siteUrl}/img/id/${hash}.jpg` : ""; + let vod_remarks = ""; + + if (vod_name && vod_id) { + vodIds[vod_id] = true; + list.push({ vod_id, vod_name, vod_pic, vod_remarks }); + } + }); + + let pagecount = 1; + $("a[href*='page=']").each(function () { + let href = $(this).attr("href") || ''; + let m = href.match(/page=(\d+)/); + if (m) { + let p = parseInt(m[1]); + if (p > pagecount) pagecount = p; + } + }); + + return { list, pagecount }; +} + +async function category(tid, pg, filter, extend) { + pg = pg || 1; + extend = extend || {}; + + let url = buildCategoryUrl(tid, pg, extend); + + try { + const html = (await req(url, { + method: "GET", + headers: { + "User-Agent": UA, + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", + "Referer": appConfig.siteUrl + } + })).content; + const result = parseListHtml(html); + return JSON.stringify(result); + } catch (e) { + console.error("分类列表获取失败:", e.message); + return JSON.stringify({ list: [], pagecount: 0 }); + } +} + +async function search(wd, quick, page) { + page = page || 1; + try { + let url = `${appConfig.siteUrl}/s.html?name=${encodeURIComponent(wd)}`; + if (page > 1) url += `&page=${page}`; + + const html = (await req(url, { + method: "GET", + headers: { + "User-Agent": UA, + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", + "Referer": appConfig.siteUrl + } + })).content; + const result = parseListHtml(html); + return JSON.stringify(result); + } catch (e) { + console.error("搜索失败:", e.message); + return JSON.stringify({ list: [], pagecount: 0 }); + } +} + +async function detail(id) { + try { + const html = (await req(appConfig.siteUrl + id, { + method: "GET", + headers: { + "User-Agent": UA, + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", + "Referer": appConfig.siteUrl + } + })).content; + const $ = cheerio.load(html); + + let vod_name = ""; + let vod_director = ""; + let vod_actor = ""; + let vod_year = ""; + let vod_area = ""; + let vod_class = ""; + let vod_content = ""; + let vod_pic = ""; + + let hash = id.match(/\/wzzy-\d+\/([a-f0-9]+)\.html/)?.[1] || ""; + vod_pic = hash ? `${appConfig.siteUrl}/img/id/${hash}.jpg` : ""; + + $('script[type="application/ld+json"]').each(function () { + try { + let jsonText = $(this).html(); + if (!jsonText) return; + let data = JSON.parse(jsonText); + if (data && data.name) vod_name = data.name; + if (data && data.year) vod_year = String(data.year); + if (data && data.countryOfOrigin) vod_area = data.countryOfOrigin; + if (data && data.inLanguage) { + vod_class = data.inLanguage; + } + if (data && data.description) { + vod_content = data.description.replace(/<br \/>/g, "\n").replace(/ /g, "").trim(); + } + if (data && data.director) { + if (data.director.name) vod_director = data.director.name; + } + if (data && data.actor && Array.isArray(data.actor)) { + let actors = data.actor.map(a => a.name).filter(Boolean); + vod_actor = actors.join(','); + } + } catch (e) {} + }); + + if (!vod_name) { + vod_name = $("title").text().replace(/《|》/g, "").replace(/-.*$/, "").trim() || ""; + } + + if (!vod_actor) { + let desc = $('meta[name="description"]').attr("content") || ""; + let actorMatch = desc.match(/主演包括([^。]+)/); + if (actorMatch) { + vod_actor = actorMatch[1].trim(); + } + } + + if (!vod_director) { + $("p, div, span").each(function () { + let text = $(this).text(); + if (text.includes("导演") && !vod_director) { + let match = text.match(/导演[::]\s*([^\n\r]+)/); + if (match) { + vod_director = match[1].trim().split(/[,,、\s]/)[0]; + } + } + }); + } + + if (!vod_class) { + $("a[href*='class=']").each(function () { + let href = $(this).attr("href") || ''; + if (href.includes("class=") && !href.includes("sso")) { + let m = href.match(/class=([^&]+)/); + if (m) { + if (!vod_class) vod_class = decodeURIComponent(m[1]); + } + } + }); + } + + let vod_remarks = ""; + + let lines = []; + let playlists = []; + + let originEpisodes = {}; + + $("#episodeContent a[href]").each(function () { + let href = $(this).attr("href") || ""; + let name = $(this).attr("data-title") || $(this).text().trim() || ""; + let origin = $(this).attr("data-origin") || ""; + + if (href && name && origin) { + let pMatch = href.match(/[?&]p=(\d+)/); + let p = pMatch ? parseInt(pMatch[1]) : 0; + + if (!originEpisodes[origin]) { + originEpisodes[origin] = []; + } + originEpisodes[origin].push({ name, href, p }); + } + }); + + let originOrder = []; + $("[id$='Tab'][data-origin]").each(function () { + let origin = $(this).attr("data-origin"); + if (origin && !originOrder.includes(origin)) { + originOrder.push(origin); + } + }); + + if (originOrder.length === 0) { + originOrder = Object.keys(originEpisodes); + } + + let templateOrigin = Object.keys(originEpisodes)[0]; + let templateEpisodes = templateOrigin ? originEpisodes[templateOrigin] : []; + + originOrder.forEach(origin => { + let eps = originEpisodes[origin]; + + if (!eps || eps.length === 0) { + if (templateEpisodes.length === 0) return; + eps = templateEpisodes.map(ep => { + let newHref = ep.href.replace( + /origin=[^&]+/, + 'origin=' + encodeURIComponent(origin) + ); + return { name: ep.name, href: newHref, p: ep.p }; + }); + } + + eps.sort((a, b) => a.p - b.p); + + let lineEpisodes = eps.map(ep => `${ep.name}$${ep.href}`); + + lines.push(origin); + playlists.push(lineEpisodes); + }); + + if (lines.length === 0) { + lines.push("默认"); + playlists.push([`暂无播放地址$${id}`]); + } + + const { vod_play_from, vod_play_url } = buildVodPlayData(lines, playlists); + + return JSON.stringify({ + list: [{ + vod_id: id, + vod_name, + vod_pic, + vod_actor, + vod_director, + vod_remarks, + vod_year, + vod_area, + vod_content, + vod_class, + vod_play_from, + vod_play_url + }] + }); + } catch (error) { + console.error(`解析详情页异常 [ID: ${id}]:`, error); + return JSON.stringify({ list: [] }); + } +} + +function buildVodPlayData(lines, playlists) { + const processedPlaylists = playlists.map(eps => eps.join('#')); + return { + vod_play_from: lines.filter(Boolean).join('$$$'), + vod_play_url: processedPlaylists.join('$$$') + }; +} + +async function play(flag, id, flags) { + try { + if (id.startsWith("http")) { + return JSON.stringify({ + parse: 0, + Header: { "User-Agent": UA, "Referer": appConfig.siteUrl }, + url: id + }); + } + + const html = (await req(`${appConfig.siteUrl}${id}`, { + method: "GET", + headers: { + "User-Agent": UA, + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", + "Referer": appConfig.siteUrl + } + })).content; + + let m3u8Match = html.match(/href="\/api\/m3u8\?origin=([^&]+)&url=([^"]+)"/); + if (!m3u8Match) { + m3u8Match = html.match(/href="\/api\/m3u8\?origin=([^&]+)&url=([^"]+)"/); + } + if (m3u8Match) { + let m3u8Origin = decodeURIComponent(m3u8Match[1]); + let m3u8Url = m3u8Match[2]; + let playUrl = `${appConfig.siteUrl}/api/m3u8?origin=${encodeURIComponent(m3u8Origin)}&url=${m3u8Url}`; + return JSON.stringify({ + parse: 0, + Header: { "User-Agent": UA, "Referer": appConfig.siteUrl }, + url: playUrl + }); + } + + let urlMatch = html.match(/"url"\s*[:=]\s*"([^"]+\.m3u8[^"]*)"/); + if (urlMatch) { + return JSON.stringify({ + parse: 0, + Header: { "User-Agent": UA, "Referer": appConfig.siteUrl }, + url: urlMatch[1].replace(/\\/g, '') + }); + } + + const $ = cheerio.load(html); + let iframeSrc = $("iframe").attr("src"); + if (iframeSrc) { + return JSON.stringify({ + parse: 1, + Header: { "User-Agent": UA, "Referer": appConfig.siteUrl }, + url: fixUrl(iframeSrc) + }); + } + + return JSON.stringify({ + parse: 1, + Header: { "User-Agent": UA, "Referer": appConfig.siteUrl }, + url: appConfig.siteUrl + id + }); + } catch (e) { + console.error("播放失败:", e); + return JSON.stringify({ parse: 0, url: "" }); + } +} + +export default { + init, + home, + category, + detail, + search, + play +}; diff --git a/tianjitop/llllo4k/js/神马影院.js b/tianjitop/llllo4k/js/神马影院.js new file mode 100644 index 00000000..90c65a13 --- /dev/null +++ b/tianjitop/llllo4k/js/神马影院.js @@ -0,0 +1,540 @@ +import cheerio from 'assets://js/lib/cheerio.min.js'; + +const appConfig = { + siteName: "神马影院", + siteUrl: "https://www.lfsymy.com" +}; +const UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"; + +async function init(ext) { + console.log("初始化爬虫:", appConfig.siteName); +} + +const catConfig = { + "电影": { tid: "1", sub: ["6","7","8","9","10","11","12","13","14","15"] }, + "电视剧": { tid: "2", sub: [] }, + "动漫": { tid: "3", sub: [] }, + "综艺": { tid: "4", sub: [] }, + "短剧": { tid: "5", sub: [] } +}; + +const subCatMap = { + "6": "动作片", + "7": "喜剧片", + "8": "爱情片", + "9": "科幻片", + "10": "恐怖片", + "11": "剧情片", + "12": "战争片", + "13": "动画片", + "14": "悬疑片", + "15": "纪录片" +}; + +const typeFilter = { + "key": "type", "name": "类型", "value": [ + { "n": "全部", "v": "" }, + { "n": "动作", "v": "动作" }, + { "n": "喜剧", "v": "喜剧" }, + { "n": "爱情", "v": "爱情" }, + { "n": "科幻", "v": "科幻" }, + { "n": "恐怖", "v": "恐怖" }, + { "n": "剧情", "v": "剧情" }, + { "n": "战争", "v": "战争" }, + { "n": "悬疑", "v": "悬疑" }, + { "n": "动画", "v": "动画" }, + { "n": "纪录", "v": "纪录" } + ] +}; + +function getYearFilter() { + let years = [{ "n": "全部", "v": "" }]; + const currentYear = new Date().getFullYear(); + for (let y = currentYear; y >= 2000; y--) { + years.push({ "n": String(y), "v": String(y) }); + } + return { "key": "year", "name": "年份", "value": years }; +} + +function getAreaFilter() { + return { + "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": "其他" } + ] + }; +} + +const commonFilters = [ + getAreaFilter(), + getYearFilter(), + typeFilter +]; + +const myFilters = {}; + +async function home(filter) { + const classList = [ + { type_id: "电影", type_name: "电影" }, + { type_id: "电视剧", type_name: "电视剧" }, + { type_id: "动漫", type_name: "动漫" }, + { type_id: "综艺", type_name: "综艺" }, + { type_id: "短剧", type_name: "短剧" } + ]; + + classList.forEach(item => { + myFilters[item.type_id] = commonFilters; + }); + + let list = []; + try { + const html = (await req(appConfig.siteUrl, { + method: "GET", + headers: { + "User-Agent": UA, + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", + "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8", + "Referer": appConfig.siteUrl + } + })).content; + const $ = cheerio.load(html); + let seen = {}; + + $(".row-six .box-item").each(function () { + let $a = $(this).find("a.item-link").first(); + let vod_id = $a.attr("href"); + if (!vod_id || seen[vod_id]) return; + + let vod_name = $a.attr("title") || ""; + let $img = $(this).find("img").first(); + let vod_pic = fixUrl($img.attr("src") || $img.attr("data-src") || ""); + + let vod_remarks = ""; + $a.contents().each(function () { + if (this.type === 'text') { + let t = $(this).text().trim(); + if (t && !vod_remarks) vod_remarks = t; + } + }); + if (!vod_remarks) { + vod_remarks = $(this).find(".meta .item-name").text().trim() || ""; + } + + if (vod_name && vod_id) { + seen[vod_id] = true; + list.push({ vod_id, vod_name, vod_pic, vod_remarks }); + } + }); + } catch (e) { + console.error("首页推荐获取失败:", e.message); + } + + return JSON.stringify({ + class: classList, + filters: myFilters, + list: list.slice(0, 30) + }); +} + +function buildCategoryUrl(catName, pg, extend) { + let cfg = catConfig[catName] || { tid: "1", sub: [] }; + let areaVal = extend.area || ''; + let yearVal = extend.year || ''; + let typeVal = extend.type || ''; + + let parts = [`/lfs/${cfg.tid}`]; + if (areaVal) parts.push(`area/${encodeURIComponent(areaVal)}`); + if (yearVal) parts.push(`year/${encodeURIComponent(yearVal)}`); + if (typeVal) parts.push(`class/${encodeURIComponent(typeVal)}`); + + if (areaVal || yearVal || typeVal) { + return `${appConfig.siteUrl}${parts.join('/')}.html`; + } else { + return `${appConfig.siteUrl}/lf/${cfg.tid}-${pg}.html`; + } +} + +function fixUrl(u) { + if (!u) return ''; + if (u.startsWith('http')) return u; + if (u.startsWith('//')) return 'https:' + u; + if (u.startsWith('/')) return appConfig.siteUrl + u; + return u; +} + +function parseListHtml(html) { + const $ = cheerio.load(html); + let list = []; + let vodIds = {}; + + $(".box-item").each(function (index, el) { + let $a = $(this).find("a.item-link").first(); + let vod_id = $a.attr("href"); + if (!vod_id || vodIds[vod_id]) return; + + let vod_name = $a.attr("title") || ""; + + let $pic = $(this).find("img").first(); + let vod_pic = fixUrl($pic.attr("src") || $pic.attr("data-src") || ""); + + let vod_remarks = ""; + let $link = $(this).find("a.item-link").first(); + $link.contents().each(function() { + if (this.type === 'text') { + let text = $(this).text().trim(); + if (text && !vod_remarks) vod_remarks = text; + } + }); + + if (vod_name && vod_id) { + vodIds[vod_id] = true; + list.push({ vod_id, vod_name, vod_pic, vod_remarks }); + } + }); + + let pagecount = 1; + let $lastPage = $("a[title='末页']").last(); + if ($lastPage.length > 0) { + let href = $lastPage.attr("href"); + if (href) { + let m = href.match(/-(\d+)\.html/); + if (m) pagecount = parseInt(m[1]); + } + } else { + let maxPage = 1; + $("a[href*='/lf/']").each(function() { + let href = $(this).attr("href"); + if (href) { + let m = href.match(new RegExp(`/lf/\\d+-(\\d+)\\.html`)); + if (m) { + let p = parseInt(m[1]); + if (p > maxPage) maxPage = p; + } + } + }); + pagecount = maxPage; + } + + return { list, pagecount }; +} + +async function category(tid, pg, filter, extend) { + pg = pg || 1; + extend = extend || {}; + + let url = buildCategoryUrl(tid, pg, extend); + + try { + const html = (await req(url, { + method: "GET", + headers: { + "User-Agent": UA, + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", + "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8", + "Referer": appConfig.siteUrl + } + })).content; + const result = parseListHtml(html); + return JSON.stringify(result); + } catch (e) { + console.error("分类列表获取失败:", e.message); + return JSON.stringify({ list: [], pagecount: 0 }); + } +} + +async function search(wd, quick, page) { + page = page || 1; + try { + const url = `${appConfig.siteUrl}/search.html`; + const html = (await req(url, { + method: "POST", + data: { wd: wd }, + headers: { + "User-Agent": UA, + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", + "Referer": appConfig.siteUrl, + "Content-Type": "application/x-www-form-urlencoded" + } + })).content; + const result = parseListHtml(html); + return JSON.stringify({ list: result.list, pagecount: 1 }); + } catch (e) { + console.error("搜索失败:", e.message); + return JSON.stringify({ list: [] }); + } +} + +async function detail(id) { + try { + const html = (await req(appConfig.siteUrl + id, { + method: "GET", + headers: { + "User-Agent": UA, + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", + "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8", + "Referer": appConfig.siteUrl + } + })).content; + const $ = cheerio.load(html); + + let vod_name = $("h1").first().text().trim() || $(".video-info-title").first().text().trim(); + + let vod_pic = ""; + let $detailPic = $(".video-pic img, .pic img, .detail-pic img, .vod-pic img, .thumb img").first(); + if ($detailPic.length > 0) { + vod_pic = fixUrl($detailPic.attr("src") || $detailPic.attr("data-src") || ""); + } + if (!vod_pic) { + $("img").each(function() { + let alt = $(this).attr("alt") || ""; + let src = $(this).attr("src") || $(this).attr("data-src") || ""; + if ((alt.includes(vod_name) || vod_name.includes(alt)) && src.includes('upload')) { + vod_pic = fixUrl(src); + return false; + } + }); + } + + let vod_actor = ""; + let vod_director = ""; + let vod_remarks = ""; + let vod_year = ""; + let vod_area = ""; + let vod_content = ""; + let vod_class = ""; + + $("ul").each(function () { + let $label = $(this).find(".info-label, .li_l span").first(); + let label = $label.text().trim(); + let $value = $(this).find(".li_r, .li_r a").first(); + let value = $value.text().trim(); + + if (label === '导演' && !vod_director) { + vod_director = $(this).find(".li_r a").map(function() { return $(this).text().trim(); }).get().filter(Boolean).join(','); + if (!vod_director) vod_director = value; + } + if (label === '主演' && !vod_actor) { + vod_actor = $(this).find(".li_r a").map(function() { return $(this).text().trim(); }).get().filter(Boolean).join(','); + if (!vod_actor) vod_actor = value; + } + if (label === '类型' && !vod_class) { + vod_class = $(this).find(".li_r a").map(function() { return $(this).text().trim(); }).get().filter(Boolean).join(','); + if (!vod_class) vod_class = value; + } + if (label === '年份' && !vod_year) { + vod_year = value || $(this).find("a").first().text().trim(); + } + if (label === '地区' && !vod_area) { + vod_area = value || $(this).find("a").first().text().trim(); + } + if (label === '状态' && !vod_remarks) { + vod_remarks = value; + } + }); + + if (!vod_year) { + $("a[href*='year/']").each(function() { + let y = $(this).text().trim(); + if (/^\d{4}$/.test(y)) { + vod_year = y; + return false; + } + }); + } + + let $intro = $(".video-info-content, .desc, .introduction, .content-detail, .vod-content, .video-detail"); + if ($intro.length > 0) { + vod_content = $intro.first().text().trim(); + } + if (!vod_content) { + $("h3:contains('简介')").nextAll("p").each(function() { + vod_content += $(this).text().trim(); + }); + } + if (!vod_content) { + $("p:contains('是')").each(function() { + let text = $(this).text().trim(); + if (text.length > 50) { + vod_content = text; + return false; + } + }); + } + + let lines = []; + let playlists = []; + let seenEpisodes = new Set(); + + $(".dslist-group").each(function () { + let lineName = "默认"; + let $heading = $(this).prev(".panel-heading"); + if ($heading.length > 0) { + let text = $heading.text().trim(); + let match = text.match(/《[^》]+》\s*-\s*([^-]+)\s*-/); + if (match) { + lineName = match[1].trim(); + } + } + + let episodes = []; + $(this).find("a[href*='/lfplay/']").each(function () { + let name = $(this).text().trim(); + let href = $(this).attr('href') || ''; + + if (name && href && !name.includes("立即播放")) { + let episodeKey = `${name}_${href}`; + if (!seenEpisodes.has(episodeKey)) { + seenEpisodes.add(episodeKey); + episodes.push(`${name}$${href}`); + } + } + }); + + if (episodes.length > 0) { + lines.push(lineName); + playlists.push(episodes); + } + }); + + if (lines.length === 0) { + let episodes = []; + $("a[href*='/lfplay/']").each(function () { + let name = $(this).text().trim(); + let href = $(this).attr('href') || ''; + + if (name && href && !name.includes("立即播放")) { + let episodeKey = `${name}_${href}`; + if (!seenEpisodes.has(episodeKey)) { + seenEpisodes.add(episodeKey); + episodes.push(`${name}$${href}`); + } + } + }); + if (episodes.length > 0) { + lines.push("默认"); + playlists.push(episodes); + } + } + + if (lines.length === 0) { + lines.push("默认"); + playlists.push([`暂无播放地址$${id}`]); + } + + const { vod_play_from, vod_play_url } = buildVodPlayData(lines, playlists); + + return JSON.stringify({ + list: [{ + vod_id: id, + vod_name, + vod_pic, + vod_actor, + vod_director, + vod_remarks, + vod_year, + vod_area, + vod_content, + vod_class, + vod_play_from, + vod_play_url + }] + }); + } catch (error) { + console.error(`解析详情页异常 [ID: ${id}]:`, error); + return JSON.stringify({ list: [] }); + } +} + +function buildVodPlayData(lines, playlists) { + const processedPlaylists = playlists.map(eps => eps.join('#')); + return { + vod_play_from: lines.filter(Boolean).join('$$$'), + vod_play_url: processedPlaylists.join('$$$') + }; +} + +async function play(flag, id, flags) { + try { + if (id.startsWith("http")) { + return JSON.stringify({ + parse: 0, + Header: { "User-Agent": UA, "Referer": appConfig.siteUrl }, + url: id + }); + } + + const html = (await req(`${appConfig.siteUrl}${id}`, { + method: "GET", + headers: { + "User-Agent": UA, + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", + "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8", + "Referer": appConfig.siteUrl + } + })).content; + + let playerMatch = html.match(/var player_aaaa=(\{.+?\});/); + if (playerMatch) { + try { + let playerData = JSON.parse(playerMatch[1]); + if (playerData.url) { + return JSON.stringify({ + parse: 0, + Header: { "User-Agent": UA, "Referer": appConfig.siteUrl }, + url: playerData.url + }); + } + } catch (e) { + console.error("解析player_aaaa失败:", e.message); + } + } + + let urlMatch = html.match(/"url"[:=]\s*"([^"]+\.m3u8[^"]*)"/); + if (urlMatch) { + return JSON.stringify({ + parse: 0, + Header: { "User-Agent": UA, "Referer": appConfig.siteUrl }, + url: urlMatch[1].replace(/\\/g, '') + }); + } + + const $ = cheerio.load(html); + let iframeSrc = $("iframe").attr("src"); + if (iframeSrc) { + return JSON.stringify({ + parse: 1, + Header: { "User-Agent": UA, "Referer": appConfig.siteUrl }, + url: fixUrl(iframeSrc) + }); + } + + return JSON.stringify({ + parse: 1, + Header: { "User-Agent": UA, "Referer": appConfig.siteUrl }, + url: appConfig.siteUrl + id + }); + } catch (e) { + console.error("播放失败:", e); + return JSON.stringify({ parse: 0, url: "" }); + } +} + +export default { + init, + home, + category, + detail, + search, + play +}; diff --git a/tianjitop/llllo4k/js/绿色影视.js b/tianjitop/llllo4k/js/绿色影视.js new file mode 100644 index 00000000..c5ca0180 --- /dev/null +++ b/tianjitop/llllo4k/js/绿色影视.js @@ -0,0 +1,420 @@ +/* + * @File : 绿色影视.js + * @Desc : 绿色影视 (lvsc168.com) TVBox T4(JS) 源 —— 自包含,无外部依赖 + * + * 站点结构: + * - MYUI 模板 (苹果/海洋CMS 前端),无开放 API,纯网页解析,页面编码 UTF-8。 + * - URL 规律: + * 分类 /frim/{tid}-{pg}.html + * 详情 /movie/{id}.html + * 搜索 /search.php?searchword={kw}&page={pg} + * 播放 /play/{vid}-{from}-{ep}.html + * - 列表卡片:<a class="myui-vodlist__thumb" href="/movie/ID.html" title="" + * style="background: url(/img.php?url=真实图)"> ... <span class="pic-text">备注</span> + * - 详情信息在 p.data 里,一个 p 含多个「键:值」(分类/地区/年份/主演/导演/更新)。 + * - 播放核心:播放页 <script> 内 `var now=base64decode("BASE64")`, + * 解出二级播放页 (如 cdn.ryplay10.com/share/xxx),页面用 DPlayer/Artplayer + * 加载带 sign 签名的 m3u8。二级页地址交给 TVBox 嗅探 (parse:1) 取真实直链。 + */ + +var LVSC_VERSION = "20260709-js-1"; +var HOST = "https://www.lvsc168.com"; +var UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"; +var HEADERS = { + "User-Agent": UA, + "Referer": HOST + "/", + "Accept-Encoding": "identity" +}; + +var CLASSES = [ + { 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: "短剧" }, + { type_id: "27", type_name: "泰剧" }, + { type_id: "5", type_name: "动作片" }, + { type_id: "6", type_name: "爱情片" }, + { type_id: "7", type_name: "科幻片" }, + { type_id: "8", type_name: "恐怖片" }, + { type_id: "9", type_name: "战争片" }, + { type_id: "10", type_name: "喜剧片" }, + { type_id: "11", type_name: "纪录片" }, + { type_id: "12", type_name: "剧情片" }, + { type_id: "13", type_name: "大陆剧" }, + { type_id: "14", type_name: "港台剧" }, + { type_id: "15", type_name: "欧美剧" }, + { type_id: "16", type_name: "日韩剧" } +]; + +function log(msg) { + try { console.log("[LVSC_JS " + LVSC_VERSION + "] " + msg); } catch (e) {} +} + +/* ---------------- 通用工具 ---------------- */ + +function toStr(v) { return v === undefined || v === null ? "" : String(v); } + +function requestText(url, referer) { + var h = {}; + for (var k in HEADERS) h[k] = HEADERS[k]; + if (referer) h.Referer = referer; + try { + log("fetch " + url); + var res = req(url, { method: "GET", headers: h, timeout: 8000 }); + if (typeof res === "string") return res; + return (res && (res.content || res.body || res.data)) || ""; + } catch (e) { + log("fetch_error " + url + " " + e); + return ""; + } +} + +function fixUrl(u) { + if (!u) return ""; + u = toStr(u).trim().replace(/^["']|["']$/g, ""); + if (u.indexOf("http") === 0) return u; + if (u.indexOf("//") === 0) return "https:" + u; + if (u.charAt(0) === "/") return HOST + u; + return u; +} + +function textClean(s) { + return toStr(s) + .replace(/<script[\s\S]*?<\/script>/gi, "") + .replace(/<style[\s\S]*?<\/style>/gi, "") + .replace(/<[^>]+>/g, "") + .replace(/ /g, " ") + .replace(/&/g, "&") + .replace(/"/g, '"') + .replace(/'/g, "'") + .replace(/\s+/g, " ") + .trim(); +} + +function attr(tag, name) { + var r = new RegExp(name + "\\s*=\\s*([\"'])([\\s\\S]*?)\\1", "i"); + var m = r.exec(tag || ""); + return m ? m[2] : ""; +} + +// 从 style="background: url(XXX)" 提取图片地址 +function picFromStyle(style) { + if (!style) return ""; + var m = /url\(\s*['"]?([^'")]+)['"]?\s*\)/.exec(style); + return m ? m[1] : ""; +} + +/* ---------------- 列表解析 (MYUI vodlist) ---------------- */ + +function parseList(html) { + var list = []; + var seen = {}; + if (!html) return list; + // 匹配每个 <a class="...myui-vodlist__thumb..." ...>...</a> + var re = /<a\b[^>]*class=["'][^"']*myui-vodlist__thumb[^"']*["'][^>]*>[\s\S]*?<\/a>/g; + var m; + while ((m = re.exec(html)) !== null) { + var tag = m[0]; + var href = attr(tag, "href"); + var idm = /\/movie\/(\d+)\.html/.exec(href); + if (!idm) continue; + var id = idm[1]; + if (seen[id]) continue; + seen[id] = true; + var name = attr(tag, "title") || textClean(tag); + // 图片优先 style 背景, 再 data-original + var pic = picFromStyle(attr(tag, "style")) || attr(tag, "data-original") || attr(tag, "data-src") || attr(tag, "src"); + var remark = ""; + var rm = /<span\b[^>]*class=["'][^"']*pic-text[^"']*["'][^>]*>([\s\S]*?)<\/span>/i.exec(tag); + if (rm) remark = textClean(rm[1]); + list.push({ + vod_id: "/movie/" + id + ".html", + vod_name: name, + vod_pic: fixUrl(pic), + vod_remarks: remark + }); + } + return list; +} + +/* ---------------- 接口实现 ---------------- */ + +function init(ext) { + if (typeof ext === "string" && /^https?:\/\//.test(ext.trim())) { + HOST = ext.trim().replace(/\/+$/, ""); + HEADERS.Referer = HOST + "/"; + } + log("init host=" + HOST); +} + +function home(filter) { + log("home"); + return JSON.stringify({ class: CLASSES }); +} + +function homeVod() { + log("homeVod"); + var html = requestText(HOST + "/"); + return JSON.stringify({ list: parseList(html) }); +} + +function category(tid, pg, filter, extend) { + tid = toStr(tid || "1"); + pg = parseInt(pg || 1); + if (!pg || pg < 1) pg = 1; + var url = HOST + "/frim/" + tid + "-" + pg + ".html"; + var html = requestText(url); + var list = parseList(html); + log("category tid=" + tid + " pg=" + pg + " count=" + list.length); + return JSON.stringify({ + page: pg, + pagecount: list.length > 0 ? pg + 1 : pg, + limit: 40, + total: 999999, + list: list + }); +} + +function detail(id) { + var vid = toStr(id).split(",")[0]; + var url = vid.indexOf("http") === 0 ? vid : HOST + vid; + log("detail id=" + vid); + var html = requestText(url); + if (!html) return JSON.stringify({ list: [] }); + + // 名称 + var name = ""; + var nm = /<h1\b[^>]*class=["'][^"']*title[^"']*["'][^>]*>([\s\S]*?)<\/h1>/i.exec(html); + if (nm) name = textClean(nm[1]); + + // 大图: .myui-content__thumb 内 img@data-original + var pic = ""; + var thumbBlock = /<div\b[^>]*class=["'][^"']*myui-content__thumb[^"']*["'][^>]*>([\s\S]*?)<\/div>/i.exec(html); + if (thumbBlock) { + var imgTag = /<img\b[^>]*>/i.exec(thumbBlock[1]); + if (imgTag) pic = attr(imgTag[0], "data-original") || attr(imgTag[0], "src"); + if (!pic) { + var aTag = /<a\b[^>]*>/i.exec(thumbBlock[1]); + if (aTag) pic = picFromStyle(attr(aTag[0], "style")); + } + } + + // 基本信息: 所有 <p class="data ...">键:值 键:值</p> + var mp = {}; + var KEYS = ["分类", "类型", "地区", "年份", "主演", "导演", "更新", "备注", "语言", "状态", "别名", "首播"]; + var keyRe = new RegExp("(" + KEYS.join("|") + ")[::]", "g"); + var pRe = /<p\b[^>]*class=["'][^"']*\bdata\b[^"']*["'][^>]*>([\s\S]*?)<\/p>/gi; + var pm; + while ((pm = pRe.exec(html)) !== null) { + var t = textClean(pm[1]); + var marks = []; + var km; + keyRe.lastIndex = 0; + while ((km = keyRe.exec(t)) !== null) { + marks.push({ key: km[1], s: km.index, vs: km.index + km[0].length }); + } + for (var q = 0; q < marks.length; q++) { + var end = (q + 1 < marks.length) ? marks[q + 1].s : t.length; + var val = t.substring(marks[q].vs, end).trim(); + if (val && !mp[marks[q].key]) mp[marks[q].key] = val; + } + } + + // 简介: <p class="desc ...">简介:内容</p> + var content = ""; + var dm = /<p\b[^>]*class=["'][^"']*\bdesc\b[^"']*["'][^>]*>([\s\S]*?)<\/p>/i.exec(html); + if (dm) content = textClean(dm[1]).replace(/^\s*简介\s*[::]?\s*/, ""); + + // 播放线路: 只取 tab href=#playlistN 的, 排除 #type(同类型推荐) + var tabNames = {}; // pid -> 显示名 + var tabRe = /<a\b[^>]*href=["']#(playlist\d+)["'][^>]*>([\s\S]*?)<\/a>/gi; + var tm; + var order = []; + while ((tm = tabRe.exec(html)) !== null) { + var pid = tm[1]; + if (!tabNames.hasOwnProperty(pid)) { + tabNames[pid] = textClean(tm[2]) || ("线路" + (order.length + 1)); + order.push(pid); + } + } + + var playFrom = []; + var playUrl = []; + for (var oi = 0; oi < order.length; oi++) { + var curPid = order[oi]; + // 提取 <div id="playlistN" ...> ... </div> 块内的剧集 + var block = extractPaneById(html, curPid); + if (!block) continue; + var eps = []; + var seenEp = {}; + var aRe = /<a\b[^>]*href=["']([^"']*\/play\/[^"']+)["'][^>]*>([\s\S]*?)<\/a>/gi; + var am; + while ((am = aRe.exec(block)) !== null) { + var epUrl = am[1]; + if (seenEp[epUrl]) continue; + seenEp[epUrl] = true; + var epName = textClean(am[2]) || ("第" + (eps.length + 1) + "集"); + eps.push(epName + "$" + epUrl); + } + if (eps.length) { + playFrom.push(tabNames[curPid]); + playUrl.push(eps.join("#")); + } + } + + var vod = { + vod_id: vid, + vod_name: name, + vod_pic: fixUrl(pic), + vod_year: mp["年份"] || "", + vod_area: mp["地区"] || "", + vod_lang: mp["语言"] || "", + type_name: mp["类型"] || mp["分类"] || "", + vod_actor: mp["主演"] || "", + vod_director: mp["导演"] || "", + vod_remarks: mp["更新"] || mp["备注"] || mp["状态"] || "", + vod_content: content + }; + + if (playFrom.length) { + vod.vod_play_from = playFrom.join("$$$"); + vod.vod_play_url = playUrl.join("$$$"); + } else { + vod.vod_play_from = "提示"; + vod.vod_play_url = "暂无播放源$"; + } + + return JSON.stringify({ list: [vod] }); +} + +// 从 html 中提取 <div id="playlistN" ...>...</div> 的内容 (处理嵌套 div) +function extractPaneById(html, pid) { + var startRe = new RegExp('<div\\b[^>]*id=["\']' + pid + '["\'][^>]*>', "i"); + var sm = startRe.exec(html); + if (!sm) return ""; + var start = sm.index + sm[0].length; + // 从 start 起做 div 深度匹配 + var depth = 1; + var re = /<\/?div\b[^>]*>/gi; + re.lastIndex = start; + var m; + while ((m = re.exec(html)) !== null) { + if (m[0].indexOf("</") === 0) { + depth--; + if (depth === 0) return html.substring(start, m.index); + } else { + depth++; + } + } + return html.substring(start); +} + +function play(flag, id, flags) { + var raw = toStr(id); + var url = raw.indexOf("http") === 0 ? raw : HOST + raw; + log("play flag=" + flag + " id=" + raw.slice(0, 80)); + var html = requestText(url, HOST + "/"); + + var realUrl = ""; + + // 关键: 播放页 <script> 内 var now=base64decode("BASE64"); + var m = /var\s+now\s*=\s*base64decode\(\s*["']([A-Za-z0-9+/=]+)["']\s*\)/.exec(html); + if (m && m[1]) { + realUrl = b64decode(m[1]); + } + // 兼容: now 直接明文地址 + if (!realUrl) { + var m2 = /var\s+now\s*=\s*["'](https?:[^"']+)["']/.exec(html); + if (m2) realUrl = m2[1]; + } + + var header = { "User-Agent": UA, "Referer": HOST + "/" }; + + // 已是媒体直链 -> 直接播放 + if (realUrl && /\.(m3u8|mp4|flv|m4a|mp3|ts)(\?|#|$)/i.test(realUrl)) { + return JSON.stringify({ parse: 0, url: realUrl, header: header }); + } + // 二级播放页 -> 交嗅探 + if (realUrl && realUrl.indexOf("http") === 0) { + return JSON.stringify({ parse: 1, url: realUrl, header: header }); + } + + // 兜底: 整页正则找直链 + var pats = [ + /(https?:\/\/[^"'\\\s]+\.m3u8[^"'\\\s]*)/, + /(https?:\/\/[^"'\\\s]+\.mp4[^"'\\\s]*)/, + /["']url["']\s*:\s*["']([^"']+\.(?:m3u8|mp4)[^"']*)["']/ + ]; + for (var p = 0; p < pats.length; p++) { + var mm = pats[p].exec(html); + if (mm) return JSON.stringify({ parse: 0, url: mm[1].replace(/\\\//g, "/"), header: header }); + } + + // 实在没有 -> 嗅探原播放页 + return JSON.stringify({ parse: 1, url: url, header: header }); +} + +function search(wd, quick, pg) { + pg = parseInt(pg || 1); + if (!pg || pg < 1) pg = 1; + log("search wd=" + wd + " pg=" + pg); + var url = HOST + "/search.php?searchword=" + encodeURIComponent(wd || "") + "&page=" + pg; + var html = requestText(url); + var list = parseList(html); + return JSON.stringify({ + page: pg, + pagecount: list.length > 0 ? pg + 1 : pg, + limit: 20, + total: 999999, + list: list + }); +} + +/* ---------------- base64 解码 (纯 JS, 无外部依赖) ---------------- */ + +var B64_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; +function b64decode(b64) { + var lookup = {}; + for (var i = 0; i < B64_CHARS.length; i++) lookup[B64_CHARS.charAt(i)] = i; + b64 = toStr(b64).replace(/[^A-Za-z0-9+/]/g, ""); + var bytes = []; + var buf = 0, bits = 0; + for (var k = 0; k < b64.length; k++) { + var c = lookup[b64.charAt(k)]; + if (c === undefined) continue; + buf = (buf << 6) | c; + bits += 6; + if (bits >= 8) { bits -= 8; bytes.push((buf >> bits) & 0xff); } + } + // UTF-8 字节 -> 字符串 + var out = ""; + var j = 0, len = bytes.length; + while (j < len) { + var b = bytes[j++] & 0xff; + if (b < 0x80) { + out += String.fromCharCode(b); + } else if (b >= 0xc0 && b < 0xe0) { + out += String.fromCharCode(((b & 0x1f) << 6) | (bytes[j++] & 0x3f)); + } else if (b >= 0xe0 && b < 0xf0) { + out += String.fromCharCode(((b & 0x0f) << 12) | ((bytes[j++] & 0x3f) << 6) | (bytes[j++] & 0x3f)); + } else { + var cp = ((b & 0x07) << 18) | ((bytes[j++] & 0x3f) << 12) | ((bytes[j++] & 0x3f) << 6) | (bytes[j++] & 0x3f); + cp -= 0x10000; + out += String.fromCharCode(0xd800 + (cp >> 10), 0xdc00 + (cp & 0x3ff)); + } + } + return out; +} + +/* ---------------- 导出 ---------------- */ + +__JS_SPIDER__ = { + init: init, + home: home, + homeVod: homeVod, + category: category, + detail: detail, + play: play, + search: search +}; diff --git a/tianjitop/llllo4k/js/金桔.js b/tianjitop/llllo4k/js/金桔.js new file mode 100644 index 00000000..ca652d92 --- /dev/null +++ b/tianjitop/llllo4k/js/金桔.js @@ -0,0 +1,377 @@ +import cheerio from 'assets://js/lib/cheerio.min.js'; + +const appConfig = { + siteName: "金桔影视", + siteUrl: "https://htsdaz.com" +} +const UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"; + +async function init(ext) { + console.log("初始化爬虫:", appConfig.siteName); +} + +const movieClass = [ + { "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": "惊悚" }, { "n": "经典", "v": "经典" }, + { "n": "青春", "v": "青春" }, { "n": "文艺", "v": "文艺" }, { "n": "微电影", "v": "微电影" }, + { "n": "古装", "v": "古装" }, { "n": "历史", "v": "历史" }, { "n": "运动", "v": "运动" }, + { "n": "农村", "v": "农村" }, { "n": "儿童", "v": "儿童" }, { "n": "网络电影", "v": "网络电影" } +]; + +const tvClass = [ + { "n": "全部", "v": "" }, { "n": "国产剧", "v": "国产剧" }, { "n": "港剧", "v": "港剧" }, + { "n": "欧美剧", "v": "欧美剧" }, { "n": "日剧", "v": "日剧" }, { "n": "台剧", "v": "台剧" }, + { "n": "泰剧", "v": "泰剧" }, { "n": "韩剧", "v": "韩剧" }, { "n": "海外剧", "v": "海外剧" }, + { "n": "Netflix自制剧", "v": "Netflix自制剧" } +]; + +const areaFilter = [ + { "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": "其他" } +]; + +const langFilter = [ + { "n": "全部", "v": "" }, { "n": "国语", "v": "国语" }, { "n": "英语", "v": "英语" }, + { "n": "粤语", "v": "粤语" }, { "n": "闽南语", "v": "闽南语" }, { "n": "韩语", "v": "韩语" }, + { "n": "日语", "v": "日语" }, { "n": "法语", "v": "法语" }, { "n": "德语", "v": "德语" }, + { "n": "其它", "v": "其它" } +]; + +function getYearFilter() { + let years = [{ "n": "全部", "v": "" }]; + const currentYear = new Date().getFullYear(); + for (let y = currentYear; y >= 2000; y--) { + years.push({ "n": String(y), "v": String(y) }); + } + return { "key": "year", "name": "年份", "value": years }; +} + +const myFilters = { + "1": [ + { "key": "class", "name": "类型", "value": movieClass }, + { "key": "area", "name": "地区", "value": areaFilter }, + { "key": "lang", "name": "语言", "value": langFilter }, + getYearFilter() + ], + "2": [ + { "key": "class", "name": "类型", "value": tvClass }, + { "key": "area", "name": "地区", "value": areaFilter }, + { "key": "lang", "name": "语言", "value": langFilter }, + getYearFilter() + ], + "3": [ + { "key": "area", "name": "地区", "value": areaFilter }, + { "key": "lang", "name": "语言", "value": langFilter }, + getYearFilter() + ], + "4": [ + { "key": "area", "name": "地区", "value": areaFilter }, + { "key": "lang", "name": "语言", "value": langFilter }, + getYearFilter() + ], + "34": [ + { "key": "area", "name": "地区", "value": areaFilter }, + { "key": "lang", "name": "语言", "value": langFilter }, + getYearFilter() + ] +}; + +async function home(filter) { + return JSON.stringify({ + class: [ + { type_id: "1", type_name: "电影" }, + { type_id: "2", type_name: "电视剧" }, + { type_id: "3", type_name: "综艺" }, + { type_id: "4", type_name: "动漫" }, + { type_id: "34", type_name: "短剧" } + ], + filters: myFilters + }); +} + +function buildCategoryUrl(tid, pg, extend) { + let classVal = extend.class || ''; + let areaVal = extend.area || ''; + let langVal = extend.lang || ''; + let yearVal = extend.year || ''; + + if (!classVal && !areaVal && !langVal && !yearVal) { + return `${appConfig.siteUrl}/stream/${tid}_${pg}.html`; + } + let filter = `${classVal}-${areaVal}-${langVal}-${yearVal}------`; + return `${appConfig.siteUrl}/stream/${tid}_${pg}/${filter}.html`; +} + +async function category(tid, pg, filter, extend) { + pg = pg || 1; + extend = extend || {}; + + let url = buildCategoryUrl(tid, pg, extend); + + try { + const html = (await req(url)).content; + const $ = cheerio.load(html); + let list = []; + + $("ul.stui-vodlist.clearfix .stui-vodlist__thumb.lazyload").each(function (index, el) { + let vod_id = $(el).attr("href"); + let vod_name = $(el).attr("title"); + let vod_pic = $(el).attr("data-original"); + let vod_remarks = $(el).find(".pic-text").text().trim(); + + if (vod_id && vod_name) { + list.push({ vod_id, vod_name, vod_pic, vod_remarks }); + } + }); + + let pagecount = 1; + $("a:contains('尾页')").each(function () { + let href = $(this).attr("href"); + if (href) { + let m = href.match(/\/stream\/\d+_(\d+)/); + if (m) { + let p = parseInt(m[1]); + if (p > pagecount) pagecount = p; + } + } + }); + + if (pagecount <= 1) { + let maxPage = 1; + $(".stui-page a, .mac_pages a").each(function () { + let href = $(this).attr("href"); + if (href) { + let m = href.match(/\/stream\/\d+_(\d+)/); + if (m) { + let p = parseInt(m[1]); + if (p > maxPage) maxPage = p; + } + } + }); + pagecount = maxPage; + } + + return JSON.stringify({ list, pagecount }); + } catch (e) { + console.error("分类列表获取失败:", e.message); + return JSON.stringify({ list: [], pagecount: 0 }); + } +} + +async function search(wd, quick, page) { + if (page >= 2) return JSON.stringify({ list: [], pagecount: 1 }); + try { + const url = `${appConfig.siteUrl}/search/${encodeURIComponent(wd)}.html`; + const html = (await req(url)).content; + const $ = cheerio.load(html); + let list = []; + + $("ul.stui-vodlist.clearfix .stui-vodlist__thumb.lazyload").each(function (i, el) { + let vod_id = $(el).attr("href"); + let vod_name = $(el).attr("title"); + let vod_pic = $(el).attr("data-original"); + let vod_remarks = $(el).find(".pic-text").text().trim(); + + if (vod_id && vod_name) { + list.push({ vod_id, vod_name, vod_pic, vod_remarks }); + } + }); + + return JSON.stringify({ list, pagecount: 1 }); + } catch (e) { + console.error("搜索失败:", e.message); + return JSON.stringify({ list: [] }); + } +} + +async function detail(id) { + try { + const html = (await req(appConfig.siteUrl + id)).content; + const $ = cheerio.load(html); + + const vod_name = $('.stui-content__detail h1, .stui-content__detail .title').first().text().trim(); + const imgSrc = $('.stui-content__thumb img').attr("data-original") || ''; + const vod_pic = imgSrc ? (imgSrc.startsWith('http') ? imgSrc : appConfig.siteUrl + imgSrc) : ''; + + let vod_actor = ''; + let vod_director = ''; + let vod_remarks = ''; + let vod_year = ''; + let vod_area = ''; + + $('.stui-content__detail p.data').each((i, el) => { + const text = $(el).text(); + if (text.includes('主演')) { + vod_actor = $(el).find('a').map(function () { return $(this).text().trim(); }).get().join(','); + } else if (text.includes('导演')) { + vod_director = $(el).find('a').map(function () { return $(this).text().trim(); }).get().join(','); + } else if (text.includes('状态')) { + vod_remarks = text.replace(/.*状态[::]/g, '').trim(); + } else if (text.includes('年份')) { + vod_year = $(el).find('a').text().trim(); + } else if (text.includes('地区')) { + vod_area = $(el).find('a').text().trim(); + } + }); + + const vod_content = $('.stui-content__detail .detail, .stui-content__detail .desc').text().trim(); + + let rawLines = []; + let rawPlaylists = []; + + $('.nav-tabs li a').each((i, el) => { + const lineName = $(el).text().trim(); + if (lineName && lineName !== '全部') { + rawLines.push(lineName); + } + }); + + $('.stui-content__playlist').each((lineIndex, poolEl) => { + const episodes = []; + $(poolEl).find('a').each((episodeIndex, epEl) => { + const name = $(epEl).text().trim(); + const href = $(epEl).attr('href') || ''; + if (name && href) { + episodes.push(`${name}$${href}`); + } + }); + rawPlaylists.push(episodes); + }); + + if (rawLines.length === 0 && rawPlaylists.length > 0) { + for (let i = 0; i < rawPlaylists.length; i++) { + rawLines.push(`线路${i + 1}`); + } + } + + let finalLines = []; + let finalPlaylists = []; + for (let i = 0; i < rawLines.length; i++) { + if (rawPlaylists[i] && rawPlaylists[i].length > 0) { + finalLines.push(rawLines[i]); + finalPlaylists.push(rawPlaylists[i]); + } + } + + const { vod_play_from, vod_play_url } = buildVodPlayData(finalLines, finalPlaylists); + + const vod = { + vod_id: id, vod_name, vod_pic, vod_actor, vod_director, + vod_remarks, vod_year, vod_area, vod_content, + vod_play_from, vod_play_url + }; + + return JSON.stringify({ list: [vod] }); + } catch (error) { + console.error(`解析详情页异常 [ID: ${id}]:`, error); + return JSON.stringify({ list: [] }); + } +} + +function buildVodPlayData(lines, playlists) { + const processedPlaylists = playlists.map(eps => eps.join('#')); + return { + vod_play_from: lines.filter(Boolean).join('$$$'), + vod_play_url: processedPlaylists.join('$$$') + }; +} + +function base64Decode(str) { + const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; + let output = ''; + let i = 0; + str = str.replace(/[^A-Za-z0-9\+\/\=]/g, ''); + while (i < str.length) { + let enc1 = chars.indexOf(str.charAt(i++)); + let enc2 = chars.indexOf(str.charAt(i++)); + let enc3 = chars.indexOf(str.charAt(i++)); + let enc4 = chars.indexOf(str.charAt(i++)); + let chr1 = (enc1 << 2) | (enc2 >> 4); + let chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); + let chr3 = ((enc3 & 3) << 6) | enc4; + output += String.fromCharCode(chr1); + if (enc3 !== 64) output += String.fromCharCode(chr2); + if (enc4 !== 64) output += String.fromCharCode(chr3); + } + return decodeURIComponent(escape(output)); +} + +function extractVideoUrl(html) { + const partsMatch = html.match(/const\s+parts\s*=\s*\[([^\]]+)\]/); + if (partsMatch) { + try { + const parts = JSON.parse('[' + partsMatch[1] + ']'); + let base64Str = ''; + for (let i = 0; i < parts.length; i++) { + base64Str += parts[i]; + } + const decoded = base64Decode(base64Str); + if (decoded && decoded.startsWith('http')) { + return decoded; + } + } catch (e) { + console.error("base64解码失败:", e.message); + } + } + + const playerMatch = html.match(/var\s+player_aaaa[\s\S]*?"url"\s*:\s*"([^"]+)"/); + if (playerMatch) { + return playerMatch[1].replace(/\\/g, ''); + } + + return ''; +} + +async function play(flag, id, flags) { + try { + const html = (await req(`${appConfig.siteUrl}${id}`)).content; + const url = extractVideoUrl(html); + + if (url) { + if (url.endsWith('.m3u8') || url.endsWith('.mp4') || (url.startsWith('http') && !url.includes('.html'))) { + return JSON.stringify({ + parse: 0, + Header: { "User-Agent": UA, "Referer": appConfig.siteUrl }, + url: url + }); + } + return JSON.stringify({ + parse: 1, + Header: { "User-Agent": UA, "Referer": appConfig.siteUrl }, + url: url + }); + } + + const $ = cheerio.load(html); + const iframeSrc = $('#playerIframe').attr('src') || $('iframe').attr('src'); + if (iframeSrc) { + return JSON.stringify({ + parse: 1, + Header: { "User-Agent": UA, "Referer": appConfig.siteUrl }, + url: iframeSrc + }); + } + + return JSON.stringify({ parse: 0, url: "" }); + } catch (e) { + console.error("播放失败:", e); + return JSON.stringify({ parse: 0, url: "" }); + } +} + +export default { + init, + home, + category, + detail, + search, + play +}; diff --git a/tianjitop/llllo4k/js/魔法盒子.js b/tianjitop/llllo4k/js/魔法盒子.js new file mode 100644 index 00000000..0118107f --- /dev/null +++ b/tianjitop/llllo4k/js/魔法盒子.js @@ -0,0 +1,498 @@ +import cheerio from 'assets://js/lib/cheerio.min.js'; + +const appConfig = { + siteName: "魔法盒子", + siteUrl: "http://movie.l98.cn" +} + +const UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"; +const Headers = { + "User-Agent": UA, + "Referer": appConfig.siteUrl + "/", +} + +const disabledSources = ["source-a45d5761c9", "source-ac9aba9c5a"]; + +const sourceSubCategories = { + "hema": [ + { type_id: "462", type_name: "甜宠" }, + { type_id: "1102", type_name: "古装仙侠" }, + { type_id: "1145", type_name: "现代言情" }, + { type_id: "1170", type_name: "青春" }, + { type_id: "585", type_name: "豪门恩怨" }, + { type_id: "417-464", type_name: "逆袭" }, + { type_id: "439-465", type_name: "重生" }, + { type_id: "1159", type_name: "系统" }, + { type_id: "1147", type_name: "总裁" }, + { type_id: "943", type_name: "职场商战" } + ], + "source-8ee56df12f": [ + { type_id: "1", type_name: "电影" }, + { type_id: "2", type_name: "剧集" }, + { type_id: "3", type_name: "动漫" }, + { type_id: "4", type_name: "综艺" } + ], + "source-681f32793f": [ + { type_id: "1", type_name: "电影" }, + { type_id: "2", type_name: "电视剧" }, + { type_id: "3", type_name: "综艺" }, + { type_id: "4", type_name: "动漫" } + ], + "source-aa4f0ed30b": [ + { type_id: "1", type_name: "电影" }, + { type_id: "2", type_name: "电视剧" }, + { type_id: "3", type_name: "动漫" }, + { type_id: "4", type_name: "综艺" } + ], + "tv": [ + { type_id: "1", type_name: "电影" }, + { type_id: "2", type_name: "电视剧" }, + { type_id: "3", type_name: "综艺" }, + { type_id: "4", type_name: "动漫" } + ], + "source-37dc8f3871": [ + { type_id: "1", type_name: "连续剧" }, + { type_id: "2", type_name: "综艺" }, + { type_id: "3", type_name: "电影" }, + { type_id: "4", type_name: "动漫" } + ], + "yunyun": [ + { type_id: "1", type_name: "推荐歌单" }, + { type_id: "2", type_name: "排行榜" }, + { type_id: "3", type_name: "热门歌单" }, + { type_id: "4", type_name: "热门歌手" } + ] +}; + +let sources = []; +let allClasses = []; + +async function init(ext) { + console.log("初始化爬虫:", appConfig.siteName); +} + +function getYearFilter() { + let years = [{ "n": "全部", "v": "" }]; + const currentYear = new Date().getFullYear().toString(); + for (let y = currentYear; y >= currentYear - 22; y--) { + years.push({ "n": String(y), "v": String(y) }); + } + return { "key": "year", "name": "年份", "value": years }; +} + +function getLetterFilter() { + return { + "key": "letter", "name": "字母", "value": [ + { "n": "全部", "v": "" }, + { "n": "A", "v": "A" }, { "n": "B", "v": "B" }, { "n": "C", "v": "C" }, { "n": "D", "v": "D" }, + { "n": "E", "v": "E" }, { "n": "F", "v": "F" }, { "n": "G", "v": "G" }, { "n": "H", "v": "H" }, + { "n": "I", "v": "I" }, { "n": "J", "v": "J" }, { "n": "K", "v": "K" }, { "n": "L", "v": "L" }, + { "n": "M", "v": "M" }, { "n": "N", "v": "N" }, { "n": "O", "v": "O" }, { "n": "P", "v": "P" }, + { "n": "Q", "v": "Q" }, { "n": "R", "v": "R" }, { "n": "S", "v": "S" }, { "n": "T", "v": "T" }, + { "n": "U", "v": "U" }, { "n": "V", "v": "V" }, { "n": "W", "v": "W" }, { "n": "X", "v": "X" }, + { "n": "Y", "v": "Y" }, { "n": "Z", "v": "Z" }, { "n": "0-9", "v": "0-9" } + ] + } +} + +function getOrderFilter() { + return { + "key": "orderBy", "name": "排序", "value": [ + { "n": "时间", "v": "time" }, + { "n": "人气", "v": "hits" }, + { "n": "评分", "v": "score" } + ] + } +} + +function getStatusFilter() { + return { + "key": "status", "name": "状态", "value": [ + { "n": "全部", "v": "" }, + { "n": "完结", "v": "completed" }, + { "n": "更新中", "v": "updating" } + ] + } +} + +function getAreaFilter() { + return { + "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": "其它" } + ] + } +} + +function getLangFilter() { + return { + "key": "lang", "name": "语言", "value": [ + { "n": "全部", "v": "" }, { "n": "国语", "v": "国语" }, { "n": "英语", "v": "英语" }, + { "n": "粤语", "v": "粤语" }, { "n": "闽南语", "v": "闽南语" }, { "n": "韩语", "v": "韩语" }, + { "n": "日语", "v": "日语" }, { "n": "其它", "v": "其它" } + ] + } +} + +const CommonFilters = [ + getStatusFilter(), + getAreaFilter(), + getLangFilter(), + getYearFilter(), + getLetterFilter(), + getOrderFilter() +]; + +function buildFiltersMap() { + const filters = {}; + for (const [sourceKey, subs] of Object.entries(sourceSubCategories)) { + for (const sub of subs) { + const typeId = `${sourceKey}###${sub.type_id}`; + filters[typeId] = CommonFilters; + } + } + return filters; +} + +async function loadSources() { + if (sources.length > 0 && allClasses.length > 0) return; + try { + const response = await req(`${appConfig.siteUrl}/api/tvbox/sources`, { + method: 'GET', + headers: Headers + }); + const data = JSON.parse(response.content || response.body || '{}'); + if (data.success) { + sources = data.data.filter(s => !disabledSources.includes(s.key)); + + allClasses = []; + for (const source of sources) { + const subs = sourceSubCategories[source.key] || []; + for (const sub of subs) { + allClasses.push({ + type_id: `${source.key}###${sub.type_id}`, + type_name: `${source.name} - ${sub.type_name}` + }); + } + } + } + } catch (e) { + console.error("加载数据源失败:", e.message); + } +} + +async function home(filter) { + await loadSources(); + + const filters = buildFiltersMap(); + + return JSON.stringify({ + class: allClasses, + filters: filters + }); +} + +function isCompleted(remarks) { + if (!remarks) return false; + const r = remarks.toLowerCase(); + return r.includes('完本') || r.includes('完结') || r.includes('全') || r.includes('已完结'); +} + +function isUpdating(remarks) { + if (!remarks) return false; + const r = remarks.toLowerCase(); + return r.includes('更新') || r.includes('连载'); +} + +function parseTypeId(tid) { + const parts = tid.split('###'); + return { + sourceKey: parts[0] || '', + subId: parts[1] || '' + }; +} + +async function category(tid, pg, filter, extend) { + await loadSources(); + + pg = pg || 1; + const { sourceKey, subId } = parseTypeId(tid); + + const source = sources.find(s => s.key === sourceKey); + if (!source) { + return JSON.stringify({ page: 1, pagecount: 0, limit: 20, total: 0, list: [] }); + } + + try { + let data; + let pagecount = 1; + let total = 0; + let limit = 20; + + if (subId) { + const requestData = JSON.stringify({ api: source.api, tid: subId, pg: String(pg) }); + const response = await req(`${appConfig.siteUrl}/api/tvbox/category`, { + method: 'POST', + headers: { ...Headers, 'Content-Type': 'application/json' }, + body: requestData + }); + data = JSON.parse(response.content || response.body || '{}'); + if (data && data.data) { + pagecount = parseInt(data.data.pagecount) || 1; + total = parseInt(data.data.total) || 0; + limit = parseInt(data.data.limit) || 20; + } + } else { + const requestData = JSON.stringify({ api: source.api }); + const response = await req(`${appConfig.siteUrl}/api/tvbox/home`, { + method: 'POST', + headers: { ...Headers, 'Content-Type': 'application/json' }, + body: requestData + }); + data = JSON.parse(response.content || response.body || '{}'); + } + + if (!data.success) { + return JSON.stringify({ page: pg, pagecount: 1, limit: 20, total: 0, list: [] }); + } + + let list = []; + if (data.data && data.data.list && Array.isArray(data.data.list)) { + list = data.data.list; + } + + if (extend && extend.keyword) { + const kw = extend.keyword.toLowerCase(); + list = list.filter(item => + item.vod_name && item.vod_name.toLowerCase().includes(kw) + ); + } + + if (extend && extend.status) { + const st = extend.status.toLowerCase(); + if (st === 'completed') { + list = list.filter(item => isCompleted(item.vod_remarks)); + } else if (st === 'updating') { + list = list.filter(item => isUpdating(item.vod_remarks)); + } + } + + if (extend && extend.area) { + const area = extend.area; + list = list.filter(item => + (item.vod_area && item.vod_area.includes(area)) || + (item.area && item.area.includes(area)) + ); + } + + if (extend && extend.year) { + const year = extend.year; + list = list.filter(item => + (item.vod_year && String(item.vod_year).includes(year)) || + (item.year && String(item.year).includes(year)) + ); + } + + if (extend && extend.lang) { + const lang = extend.lang; + list = list.filter(item => + (item.vod_lang && item.vod_lang.includes(lang)) || + (item.lang && item.lang.includes(lang)) + ); + } + + if (extend && extend.letter) { + const letter = extend.letter; + list = list.filter(item => { + const name = item.vod_name || item.name || ''; + if (!name) return false; + const firstChar = name.charAt(0).toUpperCase(); + if (letter === '0-9') { + return /[0-9]/.test(firstChar); + } + return firstChar === letter; + }); + } + + const resultList = list.map(item => { + const vod_id = item.vod_id || item.id || ''; + const vod_name = item.vod_name || item.name || ''; + const vod_pic = item.vod_pic || item.pic || ''; + const vod_remarks = item.vod_remarks || item.remarks || ''; + + return { + vod_id: `${source.key}@@@${vod_id}`, + vod_name, + vod_pic: vod_pic.startsWith('http') ? vod_pic : appConfig.siteUrl + vod_pic, + vod_remarks + }; + }); + + const returnPagecount = pagecount > 0 ? pagecount : (resultList.length > 0 ? 1 : 0); + + return JSON.stringify({ + page: parseInt(pg), + pagecount: returnPagecount, + limit: limit || resultList.length, + total: total || resultList.length, + list: resultList + }); + + } catch (e) { + console.error("分类列表获取失败:", e.message); + return JSON.stringify({ page: pg, pagecount: 0, limit: 20, total: 0, list: [] }); + } +} + +async function search(wd, quick, page) { + await loadSources(); + + page = page || 1; + if (!wd || page >= 2) { + return JSON.stringify({ page: page, pagecount: 1, limit: 20, total: 0, list: [] }); + } + + try { + let allResults = []; + + for (const source of sources) { + try { + const requestData = JSON.stringify({ api: source.api }); + const response = await req(`${appConfig.siteUrl}/api/tvbox/home`, { + method: 'POST', + headers: { ...Headers, 'Content-Type': 'application/json' }, + body: requestData + }); + + const data = JSON.parse(response.content || response.body || '{}'); + if (data.success && data.data && data.data.list && Array.isArray(data.data.list)) { + const filtered = data.data.list.filter(item => + item.vod_name && item.vod_name.toLowerCase().includes(wd.toLowerCase()) + ).map(item => { + const vod_id = item.vod_id || item.id || ''; + const vod_name = item.vod_name || item.name || ''; + const vod_pic = item.vod_pic || item.pic || ''; + const vod_remarks = item.vod_remarks || item.remarks || ''; + + return { + vod_id: `${source.key}@@@${vod_id}`, + vod_name, + vod_pic: vod_pic.startsWith('http') ? vod_pic : appConfig.siteUrl + vod_pic, + vod_remarks + }; + }); + allResults = allResults.concat(filtered); + } + } catch (e) { + continue; + } + + await new Promise(r => setTimeout(r, 300)); + } + + return JSON.stringify({ + page: page, + pagecount: 1, + limit: allResults.length, + total: allResults.length, + list: allResults.slice(0, 50) + }); + + } catch (e) { + console.error("搜索失败:", e.message); + return JSON.stringify({ page: page, pagecount: 1, limit: 20, total: 0, list: [] }); + } +} + +async function detail(id) { + try { + const parts = id.split('@@@'); + const sourceKey = parts[0] || ''; + const parsedId = parts[1] || id; + + const source = sources.find(s => s.key === sourceKey); + if (!source) { + return JSON.stringify({ list: [] }); + } + + const requestData = JSON.stringify({ api: source.api, ids: parsedId }); + const response = await req(`${appConfig.siteUrl}/api/detail`, { + method: 'POST', + headers: { ...Headers, 'Content-Type': 'application/json' }, + body: requestData + }); + + const data = JSON.parse(response.content || response.body || '{}'); + if (!data.success || !data.data) { + return JSON.stringify({ list: [] }); + } + + const item = data.data; + + let vod_play_from = item.vod_play_from || ''; + let vod_play_url = item.vod_play_url || ''; + + if (vod_play_url) { + vod_play_url = vod_play_url.replace(/\/api\/tvbox\/play\//g, appConfig.siteUrl + '/api/tvbox/play/'); + } + + const vod_pic = item.vod_pic || ''; + const vod_content = (item.vod_content || '').replace(/<[^>]+>/g, '').trim(); + + const vod = { + vod_id: id, + vod_name: item.vod_name || '', + vod_pic: vod_pic.startsWith('http') ? vod_pic : (vod_pic ? appConfig.siteUrl + vod_pic : ''), + type_name: item.type_name || '', + vod_year: item.vod_year || '', + vod_area: item.vod_area || '', + vod_director: item.vod_director || '', + vod_actor: item.vod_actor || '', + vod_lang: item.vod_lang || '', + vod_remarks: item.vod_remarks || '', + vod_content: vod_content, + vod_play_from: vod_play_from, + vod_play_url: vod_play_url + }; + + return JSON.stringify({ list: [vod] }); + } catch (error) { + console.error(`获取详情失败 [ID: ${id}]:`, error); + return JSON.stringify({ list: [] }); + } +} + +async function play(flag, id, flags) { + try { + let playUrl = id; + + if (playUrl.startsWith('/api/tvbox/play/')) { + playUrl = appConfig.siteUrl + playUrl; + } + + return JSON.stringify({ + parse: 0, + Header: { + "User-Agent": UA, + "Referer": appConfig.siteUrl + "/" + }, + url: playUrl + }); + } catch (e) { + console.error("播放失败:", e); + return JSON.stringify({ parse: 0, url: "" }); + } +} + +export default { + init, + home, + category, + detail, + search, + play +}; diff --git a/tianjitop/llllo4k/json/1 b/tianjitop/llllo4k/json/1 new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/tianjitop/llllo4k/json/1 @@ -0,0 +1 @@ + diff --git a/tianjitop/llllo4k/json/jianpian.json b/tianjitop/llllo4k/json/jianpian.json new file mode 100644 index 00000000..94de249c --- /dev/null +++ b/tianjitop/llllo4k/json/jianpian.json @@ -0,0 +1 @@ +{"1":[{"key":"area","name":"地區","init":"1","value":[{"n":"全部","v":"0"},{"n":"国产","v":"1"},{"n":"中国香港","v":"3"},{"n":"中国台湾","v":"6"},{"n":"美国","v":"5"},{"n":"韩国","v":"18"},{"n":"日本","v":"2"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":"0"},{"n":"2025","v":"107"},{"n":"2024","v":"119"},{"n":"2023","v":"153"},{"n":"2022","v":"101"},{"n":"2021","v":"118"},{"n":"2020","v":"16"},{"n":"2019","v":"7"},{"n":"2018","v":"2"},{"n":"2017","v":"3"},{"n":"2016","v":"22"}]},{"key":"by","name":"排序","init":"updata","value":[{"n":"热门","v":"hot"},{"n":"更新","v":"updata"},{"n":"评分","v":"rating"}]}],"2":[{"key":"area","name":"地區","init":"1","value":[{"n":"全部","v":"0"},{"n":"国产","v":"1"},{"n":"中国香港","v":"3"},{"n":"中国台湾","v":"6"},{"n":"美国","v":"5"},{"n":"韩国","v":"18"},{"n":"日本","v":"2"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":"0"},{"n":"2025","v":"107"},{"n":"2024","v":"119"},{"n":"2023","v":"153"},{"n":"2022","v":"101"},{"n":"2021","v":"118"},{"n":"2020","v":"16"},{"n":"2019","v":"7"},{"n":"2018","v":"2"},{"n":"2017","v":"3"},{"n":"2016","v":"22"}]},{"key":"by","name":"排序","init":"updata","value":[{"n":"热门","v":"hot"},{"n":"更新","v":"updata"},{"n":"评分","v":"rating"}]}],"3":[{"key":"area","name":"地區","init":"1","value":[{"n":"全部","v":"0"},{"n":"国产","v":"1"},{"n":"中国香港","v":"3"},{"n":"中国台湾","v":"6"},{"n":"美国","v":"5"},{"n":"韩国","v":"18"},{"n":"日本","v":"2"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":"0"},{"n":"2025","v":"107"},{"n":"2024","v":"119"},{"n":"2023","v":"153"},{"n":"2022","v":"101"},{"n":"2021","v":"118"},{"n":"2020","v":"16"},{"n":"2019","v":"7"},{"n":"2018","v":"2"},{"n":"2017","v":"3"},{"n":"2016","v":"22"}]},{"key":"by","name":"排序","init":"updata","value":[{"n":"热门","v":"hot"},{"n":"更新","v":"updata"},{"n":"评分","v":"rating"}]}],"4":[{"key":"area","name":"地區","init":"1","value":[{"n":"全部","v":"0"},{"n":"国产","v":"1"},{"n":"中国香港","v":"3"},{"n":"中国台湾","v":"6"},{"n":"美国","v":"5"},{"n":"韩国","v":"18"},{"n":"日本","v":"2"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":"0"},{"n":"2025","v":"107"},{"n":"2024","v":"119"},{"n":"2023","v":"153"},{"n":"2022","v":"101"},{"n":"2021","v":"118"},{"n":"2020","v":"16"},{"n":"2019","v":"7"},{"n":"2018","v":"2"},{"n":"2017","v":"3"},{"n":"2016","v":"22"}]},{"key":"by","name":"排序","init":"updata","value":[{"n":"热门","v":"hot"},{"n":"更新","v":"updata"},{"n":"评分","v":"rating"}]}]} \ No newline at end of file diff --git a/tianjitop/llllo4k/json/简云.json b/tianjitop/llllo4k/json/简云.json new file mode 100644 index 00000000..79600050 --- /dev/null +++ b/tianjitop/llllo4k/json/简云.json @@ -0,0 +1,8 @@ +{ + "请求头": "User-Agent$MOBILE_UA", + "编码": "UTF-8", + "图片": "data-original=\"&&\"", + "免嗅": 0, + "分类": "电影$dianying#连续剧$lianxuju#动漫$dongman#综艺$zongyi", + "分类url": "https://jianyunys.com/vodshow/{cateId}--------{catePg}---.html" + } \ No newline at end of file diff --git a/tianjitop/llllo4k/json/雪狐web.json b/tianjitop/llllo4k/json/雪狐web.json new file mode 100644 index 00000000..168df14f --- /dev/null +++ b/tianjitop/llllo4k/json/雪狐web.json @@ -0,0 +1,25 @@ +{ +"首页":"0", +"分类":"电影$movie#电视剧$tv#综艺$variety#动漫$anime", +"二次截取":"col-3\">&&loadmore||&&", +"数组":"j:data||<a&&</a>", +"标题":"j:name||alt=\"&&\"", +"图片":"j:image||data-src=\"&&\"", +"链接":"href=\"&&\"||https://www.soushitv.com/tv/detail/id/✚j:id✚.html", +"副标题":"episode\">&&<||j:douban_score", +"影片地区":"ys-player-meta-chip\">&&<[含序号:2]", +"影片年代":"ys-player-meta-chip\">&&<", +"影片状态":"ys-player-meta-chip\">&&<[含序号:3]", +"导演":"导演</span>&&</div>", +"演员":"主演</span>&&</div>", +"分类url":"https://www.soushitv.com/{cateId}/list/year/{year}/page/{catePg}.html;;aAv✚", +"简介":"简介</span>&&</div>", +"线路标题":"雪狐在线", +"播放数组":"grid>&&</div>||id=\"mobile-player\"&&data-poster", +"播放列表":"<a&&/a>||data-url=&&", +"播放标题":">&&<||全集", +"播放链接":"href=\"&&\"||\"&&\"", +"跳转播放链接":"data-url=\"&&\"", +"搜索模式":"1", +"搜索url":"/search/index?keyword={wd}&page={pg}" +} \ No newline at end of file diff --git a/tianjitop/llllo4k/lib/1 b/tianjitop/llllo4k/lib/1 new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/tianjitop/llllo4k/lib/1 @@ -0,0 +1 @@ + diff --git a/tianjitop/llllo4k/lib/600.txt b/tianjitop/llllo4k/lib/600.txt new file mode 100644 index 00000000..a6533e90 --- /dev/null +++ b/tianjitop/llllo4k/lib/600.txt @@ -0,0 +1 @@ +http://110.42.67.221:9002 \ No newline at end of file diff --git a/tianjitop/llllo4k/lib/602.txt b/tianjitop/llllo4k/lib/602.txt new file mode 100644 index 00000000..37d060ef --- /dev/null +++ b/tianjitop/llllo4k/lib/602.txt @@ -0,0 +1 @@ +http://110.42.67.221:9004 \ No newline at end of file diff --git a/tianjitop/llllo4k/lib/89.txt b/tianjitop/llllo4k/lib/89.txt new file mode 100644 index 00000000..af6899a4 --- /dev/null +++ b/tianjitop/llllo4k/lib/89.txt @@ -0,0 +1 @@ +https://app7.555618.xyz \ No newline at end of file diff --git a/tianjitop/llllo4k/lib/9.txt b/tianjitop/llllo4k/lib/9.txt new file mode 100644 index 00000000..529ad785 --- /dev/null +++ b/tianjitop/llllo4k/lib/9.txt @@ -0,0 +1 @@ +http://43.251.227.45:3688 \ No newline at end of file diff --git a/tianjitop/llllo4k/lib/ADM.js b/tianjitop/llllo4k/lib/ADM.js new file mode 100644 index 00000000..e943b865 --- /dev/null +++ b/tianjitop/llllo4k/lib/ADM.js @@ -0,0 +1,827 @@ +muban.短视2.二级.img = '.detail-pic&&img&&data-src'; +var rule = { + title: '爱弹幕', + 模板: '短视2', + host: 'https://bgm.girigirilove.com', + homeUrl: '/map/', + // url:'/show/fyclass--------fypage---/' + url: '/show/fyclassfyfilter/', + filterable: 1, //是否启用分类筛选, + filter_url: '-{{fl.area}}-{{fl.by}}-{{fl.class}}-{{fl.lang}}-{{fl.letter}}---fypage---{{fl.year}}', + filter: { + "2": [{ + "key": "class", + "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": "乙女" + }, { + "n": "机甲", + "v": "机甲" + }, { + "n": "日常", + "v": "日常" + }, { + "n": "魔法少女", + "v": "魔法少女" + }, { + "n": "异世界", + "v": "异世界" + }, { + "n": "爱抖露", + "v": "爱抖露" + }, { + "n": "音乐", + "v": "音乐" + }, { + "n": "萌", + "v": "萌" + }] + }, { + "key": "area", + "name": "地区", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "一月", + "v": "一月" + }, { + "n": "四月", + "v": "四月" + }, { + "n": "七月", + "v": "七月" + }, { + "n": "十月", + "v": "十月" + }] + }, { + "key": "year", + "name": "年份", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "2026", + "v": "2026" + }, { + "n": "2025", + "v": "2025" + }, { + "n": "2024", + "v": "2024" + }, { + "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" + }] + }, { + "key": "lang", + "name": "语言", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "日语", + "v": "日语" + }, { + "n": "国语", + "v": "国语" + }] + }, { + "key": "by", + "name": "排序", + "value": [{ + "n": "最新", + "v": "time" + }, { + "n": "最热", + "v": "hits" + }, { + "n": "评分", + "v": "score" + }] + }], + "3": [{ + "key": "class", + "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": "运动" + }] + }, { + "key": "area", + "name": "地区", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "内地", + "v": "内地" + }, { + "n": "港台", + "v": "港台" + }, { + "n": "日韩", + "v": "日韩" + }, { + "n": "欧美", + "v": "欧美" + }] + }, { + "key": "year", + "name": "年份", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "2026", + "v": "2026" + }, { + "n": "2025", + "v": "2025" + }, { + "n": "2024", + "v": "2024" + }, { + "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" + }] + }, { + "key": "lang", + "name": "语言", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "国语", + "v": "国语" + }, { + "n": "英语", + "v": "英语" + }] + }, { + "key": "by", + "name": "排序", + "value": [{ + "n": "最新", + "v": "time" + }, { + "n": "最热", + "v": "hits" + }, { + "n": "评分", + "v": "score" + }] + }], + "21": [{ + "key": "class", + "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": "耽美" + }, { + "n": "机甲", + "v": "机甲" + }, { + "n": "日常", + "v": "日常" + }, { + "n": "魔法少女", + "v": "魔法少女" + }, { + "n": "异世界", + "v": "异世界" + }, { + "n": "爱抖露", + "v": "爱抖露" + }] + }, { + "key": "year", + "name": "年份", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "2026", + "v": "2026" + }, { + "n": "2025", + "v": "2025" + }, { + "n": "2024", + "v": "2024" + }, { + "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" + }] + }, { + "key": "lang", + "name": "语言", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "日语", + "v": "日语" + }, { + "n": "中文", + "v": "中文" + }, { + "n": "英语", + "v": "英语" + }] + }, { + "key": "by", + "name": "排序", + "value": [{ + "n": "最新", + "v": "time" + }, { + "n": "最热", + "v": "hits" + }, { + "n": "评分", + "v": "score" + }] + }], + "20": [{ + "key": "class", + "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": "记录.泰剧" + }, { + "n": "体育", + "v": "体育" + }, { + "n": "烧脑", + "v": "烧脑" + }] + }, { + "key": "area", + "name": "地区", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "日本", + "v": "日本" + }, { + "n": "欧美", + "v": "欧美" + }, { + "n": "泰国", + "v": "泰国" + }] + }, { + "key": "year", + "name": "年份", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "2026", + "v": "2026" + }, { + "n": "2025", + "v": "2025" + }, { + "n": "2024", + "v": "2024" + }, { + "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.2003", + "v": "2004.2003" + }] + }, { + "key": "lang", + "name": "语言", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "日语", + "v": "日语" + }, { + "n": "英语", + "v": "英语" + }, { + "n": "泰语", + "v": "泰语" + }] + }, { + "key": "by", + "name": "排序", + "value": [{ + "n": "最新", + "v": "time" + }, { + "n": "最热", + "v": "hits" + }, { + "n": "评分", + "v": "score" + }] + }], + "24": [{ + "key": "by", + "name": "排序", + "value": [{ + "n": "最新", + "v": "time" + }, { + "n": "最热", + "v": "hits" + }, { + "n": "评分", + "v": "score" + }] + }], + "26": [{ + "key": "by", + "name": "排序", + "value": [{ + "n": "最新", + "v": "time" + }, { + "n": "最热", + "v": "hits" + }, { + "n": "评分", + "v": "score" + }] + }] + }, + searchUrl: '/search/**----------fypage---/', + class_name: '日番&美番&劇場版&真人番劇&BD副音軌&其他', + class_url: '2&3&21&20&24&26', + play_parse: true, + lazy: `js: + var html = JSON.parse(request(input).match(/r player_.*?=(.*?)</)[1]); + var url = html.url; + var from = html.from; + var next = html.link_next; + if (html.encrypt == '1') { + url = unescape(url) + } else if (html.encrypt == '2') { + url = unescape(base64Decode(url)) + } else if (html.encrypt == '3') { + url = url.substring(8, url.length); + url = base64Decode(url); + url = url.substring(8, (url.length) - 8) + } + if (/\\.m3u8|\\.mp4/.test(url)) { + input = { + jx: 0, + url: url, + parse: 0 + } + } else { + var paurl = request(HOST + '/static/player/' + from + '.js').match(/ src="(.*?)'/)[1]; + if (/https/.test(paurl)) { + var purl = paurl + url + '&next=' + next + '&title='; + input = { + jx: 0, + url: purl, + parse: 1 + } + } + } + `, + 推荐: '.border-box&&.public-list-box;a&&title;.lazy&&data-src;.public-list-prb&&Text;a&&href', + double: false, // 推荐内容是否双层定位 + 一级: '.border-box .public-list-box;a&&title;.lazy&&data-src;.public-list-prb&&Text;a&&href', + 搜索: '.row-right&&.search-box;.thumb-txt&&Text;.lazy&&data-src;.public-list-prb&&Text;a&&href', +} \ No newline at end of file diff --git a/tianjitop/llllo4k/lib/Anime1.js b/tianjitop/llllo4k/lib/Anime1.js new file mode 100644 index 00000000..67e4a6e4 --- /dev/null +++ b/tianjitop/llllo4k/lib/Anime1.js @@ -0,0 +1 @@ +Ly8g5rOo5oSP5LqL6aG5OuatpOa6kOS7heaUr+aMgSDlvbHop4ZUViDlj4og54ix5L2s54mIdHZib3jmnIDmlrDniYgKLy8g5rOo5oSP5LqL6aG5OuatpOa6kOS7heaUr+aMgSDlvbHop4ZUViDlj4og54ix5L2s54mIdHZib3jmnIDmlrDniYgKLy8g5rOo5oSP5LqL6aG5OuatpOa6kOS7heaUr+aMgSDlvbHop4ZUViDlj4og54ix5L2s54mIdHZib3jmnIDmlrDniYgKLy8gM+S4qnNldC1Db29raWUKCnZhciBydWxlID0gewoJdGl0bGU6J0FuaW1lMeWKqOeVqycsCglob3N0OidodHRwczovL2FuaW1lMS5tZScsCgl1cmw6ICcvZnljbGFzcycsCglkZXRhaWxVcmw6Jy8/Y2F0PWZ5aWQnLAoJc2VhcmNoVXJsOiAnL3BhZ2UvZnlwYWdlP3M9KionLAoJc2VhcmNoYWJsZToyLAoJcXVpY2tTZWFyY2g6MCwKCWhlYWRlcnM6eydVc2VyLUFnZW50JzogJ1BDX1VBJ30sCgl0aW1lb3V0OjUwMDAsCiAgICBjbGFzc19uYW1lOifpgKPovInkuK0mMjAyNSYyMDI0JjIwMjMmMjAyMiYyMDIxJjIwMjAmMjAxOSYyMDE4JuabtOaXqScsCiAgICBjbGFzc191cmw6J+mAo+i8ieS4rSYyMDI1JjIwMjQmMjAyMyYyMDIyJjIwMjEmMjAyMCYyMDE5JjIwMTgmMjAxNycsCglwbGF5X3BhcnNlOnRydWUsCglsYXp5OmBqczoKCQl2YXIgYXBpdXJsID0gJ2h0dHBzOi8vdi5hbmltZTEubWUvYXBpJzsKCQl2YXIgaHRtbCA9IHJlcXVlc3QoYXBpdXJsLCB7CgkJCWhlYWRlcnM6IHsKCQkJCSdSZWZlcmVyJzogSE9TVCwKCQkJfSwKCQkJYm9keTogJ2Q9JyArIGlucHV0LAoJCQltZXRob2Q6ICdQT1NUJywKCQkJd2l0aEhlYWRlcnM6IHRydWUKCQl9KTsKCQlsZXQganNvbiA9IEpTT04ucGFyc2UoaHRtbCk7CgkJcHJpbnQoanNvbik7CgkJbG9nKE9iamVjdC5rZXlzKGpzb24pKTsKCQlsZXQgc2V0Q2sgPSBPYmplY3Qua2V5cyhqc29uKS5maWx0ZXIoaXQgPT4gaXQudG9Mb3dlckNhc2UoKSA9PT0gInNldC1jb29raWUiKTsKCQlsZXQgY29va2llID0gc2V0Q2sgPyBqc29uW3NldENrXSA6ICIiOwoJCS8vIDPkuKpzZXQtQ29va2llCgkJaWYgKEFycmF5LmlzQXJyYXkoY29va2llKSkgewoJCQljb29raWUgPSBjb29raWUuam9pbignOycpOwoJCX0KCQljb29raWUgPSBjb29raWUuc3BsaXQoJzsnKS5maWx0ZXIoZnVuY3Rpb24oaXQpIHsKCQkJcmV0dXJuIFsnZScsICdwJywgJ2gnXS5pbmNsdWRlcyhpdC5zcGxpdCgnPScpWzBdKQoJCX0pLmpvaW4oJzsnKTsKCQlsb2coY29va2llKTsKCQl2YXIgcHVybCA9IEpTT04ucGFyc2UoanNvbi5ib2R5KS5zWzBdLnNyYzsKCQlpZiAocHVybC5zdGFydHNXaXRoKCcvJykpIHsKCQkJcHVybCA9ICdodHRwczonICsgcHVybAoJCX0KCQlpbnB1dCA9IHsKCQkJang6IDAsCgkJCXVybDogcHVybCwKCQkJcGFyc2U6IDAsCgkJCWhlYWRlcjogSlNPTi5zdHJpbmdpZnkoewoJCQkJJ3JlZmVyZXInOiBIT1NULAoJCQkJJ0Nvb2tpZSc6IGNvb2tpZSwKCQkJCSd1c2VyLWFnZW50JzogUENfVUEKCQkJfSksCgkJfQoJYCwKCWxpbWl0OjYsCgnmjqjojZA6IGBqczoKCQl2YXIgZCA9IFtdOwoJCWZ1bmN0aW9uIHN0cmlwSHRtbFRhZyhzcmMpIHsKCQkJcmV0dXJuIHNyYy5yZXBsYWNlKC88XFwvP1tePl0rKD58JCkvZywgJycpLnJlcGxhY2UoLyYuezEsNX07L2csICcnKS5yZXBsYWNlKC9cXHN7Mix9L2csICcgJyk7CgkJfQoJCXZhciB0aW1lc3RhbXAgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKCQl2YXIganNvbiA9IHJlcXVlc3QoJ2h0dHBzOi8vZDF6cXV6amd3bzl5Yi5jbG91ZGZyb250Lm5ldC8/Xz0nICsgdGltZXN0YW1wKTsKCQl2YXIgbGlzdCA9IEpTT04ucGFyc2UoanNvbik7CgkJbGV0IHBsYXlLZXlzID0gT2JqZWN0LnZhbHVlcyhsaXN0KS5maWx0ZXIoZnVuY3Rpb24oeCkgewoJCQlyZXR1cm4geFsyXS5pbmNsdWRlcygn6YCj6LyJ5LitJyk7CgkJfSk7CgkJcGxheUtleXMuZm9yRWFjaChmdW5jdGlvbihpdCkgewoJCQlkLnB1c2goewoJCQkJdGl0bGU6IHN0cmlwSHRtbFRhZyhpdFsxXSksCgkJCQlpbWc6ICdodHRwczovL3N0YS5hbmljZG4uY29tL3BsYXllckltZy84LmpwZycsCgkJCQlkZXNjOiBpdFsyXSwKCQkJCXVybDogaXRbMF0sCgkJCX0pOwoJCX0pOwoJCXNldFJlc3VsdChkKTsKCWAsCgnkuIDnuqc6IGBqczoKCQl2YXIgZCA9IFtdOwoJCWZ1bmN0aW9uIHN0cmlwSHRtbFRhZyhzcmMpIHsKCQkJcmV0dXJuIHNyYy5yZXBsYWNlKC88XFwvP1tePl0rKD58JCkvZywgJycpLnJlcGxhY2UoLyYuezEsNX07L2csICcnKS5yZXBsYWNlKC9cXHN7Mix9L2csICcgJyk7CgkJfQoJCXZhciB0aW1lc3RhbXAgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKCQl2YXIganNvbiA9IHJlcXVlc3QoJ2h0dHBzOi8vZDF6cXV6amd3bzl5Yi5jbG91ZGZyb250Lm5ldC8/Xz0nICsgdGltZXN0YW1wKTsKCQl2YXIgbGlzdCA9IEpTT04ucGFyc2UoanNvbik7CgkJbGV0IHBsYXlLZXlzID0gT2JqZWN0LnZhbHVlcyhsaXN0KS5maWx0ZXIoZnVuY3Rpb24oeCkgewoJCQlpZiAoTVlfQ0FURSA9PT0gJ+mAo+i8ieS4rScpIHJldHVybiB4WzJdLmluY2x1ZGVzKE1ZX0NBVEUpOwoJCQllbHNlIGlmIChNWV9DQVRFID09PSAnMjAxNycpIHJldHVybiB4WzNdIDw9IE1ZX0NBVEU7CgkJCWVsc2UgcmV0dXJuIHhbM10gPT0gTVlfQ0FURTsKCQl9KTsKCQlwbGF5S2V5cy5mb3JFYWNoKGZ1bmN0aW9uKGl0KSB7CgkJCWQucHVzaCh7CgkJCQl0aXRsZTogc3RyaXBIdG1sVGFnKGl0WzFdKSwKCQkJCWltZzogJ2h0dHBzOi8vc3RhLmFuaWNkbi5jb20vcGxheWVySW1nLzguanBnJywKCQkJCWRlc2M6IGl0WzJdLAoJCQkJdXJsOiBpdFswXSwKCQkJfSk7CgkJfSk7CgkJc2V0UmVzdWx0KGQpOwoJYCwKCeS6jOe6pzogYGpzOgoJCXBkZmggPSBqc3AucGRmaDsgcGRmYSA9IGpzcC5wZGZhOyBwZCA9IGpzcC5wZDsKCQl2YXIgaHRtbCA9IHJlcXVlc3QoaW5wdXQpOwoJCXZhciB0aW1lc3RhbXAgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKCQl2YXIganNvbiA9IHJlcXVlc3QoJ2h0dHBzOi8vZDF6cXV6amd3bzl5Yi5jbG91ZGZyb250Lm5ldC8/Xz0nICsgdGltZXN0YW1wKTsKCQl2YXIgbGlzdCA9IEpTT04ucGFyc2UoanNvbik7CgkJdmFyIHZpZCA9IGlucHV0LnNwbGl0KCc9JylbMV07CgkJbGV0IHBsYXlLZXlzID0gT2JqZWN0LnZhbHVlcyhsaXN0KS5maW5kKGZ1bmN0aW9uKHgpIHsKCQkJcmV0dXJuIHhbMF0gPT09IHBhcnNlSW50KHZpZCk7CgkJfSk7CgkJVk9EID0gewoJCQl2b2RfcGljOiAnaHR0cHM6Ly9zdGEuYW5pY2RuLmNvbS9wbGF5ZXJJbWcvOC5qcGcnLAoJCQl2b2RfaWQ6IHBsYXlLZXlzWzBdLAoJCQl2b2RfbmFtZTogcGxheUtleXNbMV0sCgkJCXZvZF9jb250ZW50OiBwbGF5S2V5c1syXSwKCQkJdm9kX3llYXI6IHBsYXlLZXlzWzNdLAoJCQl0eXBlX25hbWU6IHBsYXlLZXlzWzRdLAoJCQl2b2RfYWN0b3I6IHBsYXlLZXlzWzVdLAoJCX07CgkJdmFyIHBhZ2V1cmwgPSBwZChodG1sLCAnLmNhdC1saW5rcyYmYSYmaHJlZicpOwoJCXZhciBwYWdlbnVtID0gMTsKCQlsZXQgdm9kX3RhYl9saXN0ID0gW107CgkJbGV0IHZsaXN0ID0gW107CgkJZm9yIChsZXQgcCA9IDE7IHAgPCBwYXJzZUludChwYWdlbnVtKSArIDE7IHArKykgewoJCQlsZXQgcGh0bWwgPSByZXF1ZXN0KHBhZ2V1cmwgKyAnL3BhZ2UvJyArIHBhZ2VudW0pOwoJCQlsZXQgbmV3X3ZvZF9saXN0ID0gW107CgkJCWxldCB2b2RMaXN0ID0gW107CgkJCXZvZExpc3QgPSBwZGZhKHBodG1sLCAnLnNpdGUtbWFpbiYmYXJ0aWNsZScpOwoJCQlmb3IgKGxldCBpID0gMDsgaSA8IHZvZExpc3QubGVuZ3RoOyBpKyspIHsKCQkJCWxldCBpdCA9IHZvZExpc3RbaV07CgkJCQlsZXQgcHRpdGxlID0gcGRmaChpdCwgJy5lbnRyeS10aXRsZSYmVGV4dCcpLnJlcGxhY2UoL1xcWyguKilcXF0vLCAnJDEnKTsKCQkJCWxldCBwdXJsID0gcGQoaXQsICcudmlkZW8tanMmJmRhdGEtYXBpcmVxJyk7CgkJCQluZXdfdm9kX2xpc3QucHVzaChwdGl0bGUgKyAnJCcgKyBwdXJsKTsKCQkJfQoJCQl2bGlzdCA9IHZsaXN0LmNvbmNhdChuZXdfdm9kX2xpc3QpOwoJCQl0cnkgewoJCQkJcGFnZW51bSA9IHBkKHBodG1sLCAnLm5hdi1wcmV2aW91cyYmYSYmaHJlZicpLnNwbGl0KCcvcGFnZS8nKVsxXTsKCQkJfSBjYXRjaChlKSB7fQoJCX0KCQlsZXQgdmxpc3QyID0gdmxpc3QucmV2ZXJzZSgpLmpvaW4oIiMiKTsKCQl2b2RfdGFiX2xpc3QucHVzaCh2bGlzdDIpOwoJCVZPRC52b2RfcGxheV9mcm9tID0gJ+mBk+mVv+WcqOe6vyc7CgkJVk9ELnZvZF9wbGF5X3VybCA9IHZvZF90YWJfbGlzdC5qb2luKCIkJCQiKTsKCWAsCgnmkJzntKI6IGBqczoKCQl2YXIgZCA9IFtdOwoJCWZ1bmN0aW9uIHN0cmlwSHRtbFRhZyhzcmMpIHsKCQkJcmV0dXJuIHNyYy5yZXBsYWNlKC88XFwvP1tePl0rKD58JCkvZywgJycpLnJlcGxhY2UoLyYuezEsNX07L2csICcnKS5yZXBsYWNlKC9cXHN7Mix9L2csICcgJyk7CgkJfQoJCXZhciB0aW1lc3RhbXAgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKCQl2YXIganNvbiA9IHJlcXVlc3QoJ2h0dHBzOi8vZDF6cXV6amd3bzl5Yi5jbG91ZGZyb250Lm5ldC8/Xz0nICsgdGltZXN0YW1wKTsKCQl2YXIgbGlzdCA9IEpTT04ucGFyc2UoanNvbik7CgkJdmFyIHdkID0gaW5wdXQuc3BsaXQoJz0nKVsxXTsKCQlsZXQgcGxheUtleXMgPSBPYmplY3QudmFsdWVzKGxpc3QpLmZpbHRlcihmdW5jdGlvbih4KSB7CgkJCXJldHVybiB4WzFdLmluY2x1ZGVzKHdkKTsKCQl9KTsKCQlsb2cocGxheUtleXMpOwoJCXBsYXlLZXlzLmZvckVhY2goZnVuY3Rpb24oaXQpIHsKCQkJZC5wdXNoKHsKCQkJCXRpdGxlOiBzdHJpcEh0bWxUYWcoaXRbMV0pLAoJCQkJaW1nOiAnaHR0cHM6Ly9zdGEuYW5pY2RuLmNvbS9wbGF5ZXJJbWcvOC5qcGcnLAoJCQkJZGVzYzogaXRbMl0sCgkJCQl1cmw6IGl0WzBdLAoJCQl9KTsKCQl9KTsKCQlzZXRSZXN1bHQoZCk7CglgLAp9 \ No newline at end of file diff --git a/tianjitop/llllo4k/lib/AppToV5.py b/tianjitop/llllo4k/lib/AppToV5.py new file mode 100644 index 00000000..76a95d4a --- /dev/null +++ b/tianjitop/llllo4k/lib/AppToV5.py @@ -0,0 +1,187 @@ +# -*- coding: utf-8 -*- +# 本资源来源于互联网公开渠道,仅可用于个人学习及爬虫技术交流。 +# 严禁将其用于任何商业用途,下载后请于 24 小时内删除,搜索结果均来自源站,本人不承担任何责任。 +""" +{ + "key": "xxx", + "name": "xxx", + "type": 3, + "api": "./ApptoV5无加密.py", + "ext": "http://domain.com" +} +""" + +import re,sys,uuid +from base.spider import Spider +sys.path.append('..') + +class Spider(Spider): + host,config,local_uuid,parsing_config = '','','',[] + headers = { + 'User-Agent': "Dart/2.19 (dart:io)", + 'Accept-Encoding': "gzip", + 'appto-local-uuid': local_uuid + } + + def init(self, extend=''): + try: + host = extend.strip() + if not host.startswith('http'): + return {} + if not re.match(r'^https?://[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(:\d+)?/?$', host): + host_=self.fetch(host).json() + self.host = host_['domain'] + else: + self.host = host + self.local_uuid = str(uuid.uuid4()) + response = self.fetch(f'{self.host}/apptov5/v1/config/get?p=android&__platform=android', headers=self.headers).json() + config = response['data'] + self.config = config + parsing_conf = config['get_parsing']['lists'] + parsing_config = {} + for i in parsing_conf: + if len(i['config']) != 0: + label = [] + for j in i['config']: + if j['type'] == 'json': + label.append(j['label']) + parsing_config.update({i['key']:label}) + self.parsing_config = parsing_config + return None + except Exception as e: + print(f'初始化异常:{e}') + return {} + + def detailContent(self, ids): + response = self.fetch(f"{self.host}/apptov5/v1/vod/getVod?id={ids[0]}",headers=self.headers).json() + data3 = response['data'] + videos = [] + vod_play_url = '' + vod_play_from = '' + for i in data3['vod_play_list']: + play_url = '' + for j in i['urls']: + play_url += f"{j['name']}${i['player_info']['from']}@{j['url']}#" + vod_play_from += i['player_info']['show'] + '$$$' + vod_play_url += play_url.rstrip('#') + '$$$' + vod_play_url = vod_play_url.rstrip('$$$') + vod_play_from = vod_play_from.rstrip('$$$') + videos.append({ + 'vod_id': data3.get('vod_id'), + 'vod_name': data3.get('vod_name'), + 'vod_content': data3.get('vod_content'), + 'vod_remarks': data3.get('vod_remarks'), + 'vod_director': data3.get('vod_director'), + 'vod_actor': data3.get('vod_actor'), + 'vod_year': data3.get('vod_year'), + 'vod_area': data3.get('vod_area'), + 'vod_play_from': vod_play_from, + 'vod_play_url': vod_play_url + }) + return {'list': videos} + + def searchContent(self, key, quick, pg='1'): + url = f"{self.host}/apptov5/v1/search/lists?wd={key}&page={pg}&type=&__platform=android" + response = self.fetch(url, headers=self.headers).json() + data = response['data']['data'] + for i in data: + if i.get('vod_pic').startswith('mac://'): + i['vod_pic'] = i['vod_pic'].replace('mac://', 'http://', 1) + return {'list': data, 'page': pg, 'total': response['data']['total']} + + def playerContent(self, flag, id, vipflags): + default_ua = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1' + parsing_config = self.parsing_config + parts = id.split('@') + if len(parts) != 2: + return {'parse': 0, 'url': id, 'header': {'User-Agent': default_ua}} + playfrom, rawurl = parts + label_list = parsing_config.get(playfrom) + if not label_list: + return {'parse': 0, 'url': rawurl, 'header': {'User-Agent': default_ua}} + result = {'parse': 1, 'url': rawurl, 'header': {'User-Agent': default_ua}} + for label in label_list: + payload = { + 'play_url': rawurl, + 'label': label, + 'key': playfrom + } + try: + response = self.post( + f"{self.host}/apptov5/v1/parsing/proxy?__platform=android", + data=payload, + headers=self.headers + ).json() + except Exception as e: + print(f"请求异常: {e}") + continue + if not isinstance(response, dict): + continue + if response.get('code') == 422: + continue + data = response.get('data') + if not isinstance(data, dict): + continue + url = data.get('url') + if not url: + continue + ua = data.get('UA') or data.get('UserAgent') or default_ua + result = { + 'parse': 0, + 'url': url, + 'header': {'User-Agent': ua} + } + break + return result + + def homeContent(self, filter): + config = self.config + if not config: + return {} + home_cate = config['get_home_cate'] + classes = [] + for i in home_cate: + if isinstance(i.get('extend', []),dict): + classes.append({'type_id': i['cate'], 'type_name': i['title']}) + return {'class': classes} + + def homeVideoContent(self): + response = self.fetch(f'{self.host}/apptov5/v1/home/data?id=1&mold=1&__platform=android',headers=self.headers).json() + data = response['data'] + vod_list = [] + for i in data['sections']: + for j in i['items']: + vod_pic = j.get('vod_pic') + if vod_pic.startswith('mac://'): + vod_pic = vod_pic.replace('mac://', 'http://', 1) + vod_list.append({ + "vod_id": j.get('vod_id'), + "vod_name": j.get('vod_name'), + "vod_pic": vod_pic, + "vod_remarks": j.get('vod_remarks') + }) + return {'list': vod_list} + + def categoryContent(self, tid, pg, filter, extend): + response = self.fetch(f"{self.host}/apptov5/v1/vod/lists?area={extend.get('area','')}&lang={extend.get('lang','')}&year={extend.get('year','')}&order={extend.get('sort','time')}&type_id={tid}&type_name=&page={pg}&pageSize=21&__platform=android", headers=self.headers).json() + data = response['data'] + data2 = data['data'] + for i in data['data']: + if i.get('vod_pic','').startswith('mac://'): + i['vod_pic'] = i['vod_pic'].replace('mac://', 'http://', 1) + return {'list': data2, 'page': pg, 'total': data['total']} + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + def localProxy(self, param): + pass \ No newline at end of file diff --git a/tianjitop/llllo4k/lib/BLHJ.json b/tianjitop/llllo4k/lib/BLHJ.json new file mode 100644 index 00000000..b3aec1f8 --- /dev/null +++ b/tianjitop/llllo4k/lib/BLHJ.json @@ -0,0 +1,5310 @@ +{ + "class": [ + { + "type_name": "沙雕动漫", + "type_id": "一口气沙雕动漫" + }, + { + "type_name": "纪录片", + "type_id": "纪录片超清" + }, + { + "type_name": "演唱会", + "type_id": "演唱会超清" + }, + { + "type_name": "美食", + "type_id": "美食超清" + }, + { + "type_name": "食谱", + "type_id": "食谱" + }, + { + "type_name": "体育", + "type_id": "体育超清" + }, + { + "type_name": "球星", + "type_id": "球星" + }, + { + "type_name": "旅游", + "type_id": "旅游" + }, + { + "type_name": "风景", + "type_id": "风景4K" + }, + { + "type_name": "说案", + "type_id": "说案" + }, + { + "type_name": "知名UP主", + "type_id": "知名UP主" + }, + { + "type_name": "探索发现", + "type_id": "探索发现超清" + }, + { + "type_name": "鬼畜", + "type_id": "鬼畜" + }, + { + "type_name": "搞笑", + "type_id": "搞笑超清" + }, + { + "type_name": "儿童", + "type_id": "儿童超清" + }, + { + "type_name": "动物世界", + "type_id": "动物世界超清" + }, + { + "type_name": "相声小品", + "type_id": "相声小品超清" + }, + { + "type_name": "戏曲", + "type_id": "戏曲" + }, + { + "type_name": "解说", + "type_id": "解说" + }, + { + "type_name": "演讲", + "type_id": "演讲" + }, + { + "type_name": "小姐姐", + "type_id": "小姐姐超清" + }, + { + "type_name": "荒野求生", + "type_id": "荒野求生超清" + }, + { + "type_name": "健身", + "type_id": "健身" + }, + { + "type_name": "帕梅拉", + "type_id": "帕梅拉" + }, + { + "type_name": "太极拳", + "type_id": "太极拳" + }, + { + "type_name": "广场舞", + "type_id": "广场舞" + }, + { + "type_name": "舞蹈", + "type_id": "舞蹈" + }, + { + "type_name": "音乐", + "type_id": "音乐" + }, + { + "type_name": "歌曲", + "type_id": "歌曲" + }, + { + "type_name": "MV", + "type_id": "MV4K" + }, + { + "type_name": "舞曲", + "type_id": "舞曲超清" + }, + { + "type_name": "4K", + "type_id": "4K" + }, + { + "type_name": "电影", + "type_id": "电影" + }, + { + "type_name": "电视剧", + "type_id": "电视剧" + }, + { + "type_name": "白噪音", + "type_id": "白噪音超清" + }, + { + "type_name": "考公考证", + "type_id": "考公考证" + }, + { + "type_name": "平面设计教学", + "type_id": "平面设计教学" + }, + { + "type_name": "软件教程", + "type_id": "软件教程" + }, + { + "type_name": "Windows", + "type_id": "Windows" + } + ], + "filters": { + "考公考证": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "演唱会超清": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "演唱会超清" + }, + { + "n": "A阿杜", + "v": "阿杜演唱会超清" + }, + { + "n": "A阿黛尔", + "v": "阿黛尔演唱会超清" + }, + { + "n": "BBeyond", + "v": "Beyond演唱会超清" + }, + { + "n": "BBy2", + "v": "By2演唱会超清" + }, + { + "n": "BBIGBANG", + "v": "BIGBANG演唱会超清" + }, + { + "n": "B布兰妮", + "v": "布兰妮演唱会超清" + }, + { + "n": "B坂井泉水", + "v": "坂井泉水演唱会超清" + }, + { + "n": "C陈奕迅", + "v": "陈奕迅演唱会超清" + }, + { + "n": "C蔡依林", + "v": "蔡依林演唱会超清" + }, + { + "n": "C初音未来", + "v": "初音未来演唱会超清" + }, + { + "n": "C蔡健雅", + "v": "蔡健雅演唱会超清" + }, + { + "n": "C陈小春", + "v": "陈小春演唱会超清" + }, + { + "n": "C草蜢", + "v": "草蜢演唱会超清" + }, + { + "n": "C陈慧娴", + "v": "陈慧娴演唱会超清" + }, + { + "n": "C崔健", + "v": "崔健演唱会超清" + }, + { + "n": "C仓木麻衣", + "v": "仓木麻衣演唱会超清" + }, + { + "n": "D戴荃", + "v": "戴荃演唱会超清" + }, + { + "n": "D动力火车", + "v": "动力火车演唱会超清" + }, + { + "n": "D邓丽君", + "v": "邓丽君演唱会超清" + }, + { + "n": "D丁当", + "v": "丁当演唱会超清" + }, + { + "n": "D刀郎", + "v": "刀郎演唱会超清" + }, + { + "n": "D邓紫棋", + "v": "邓紫棋演唱会超清" + }, + { + "n": "D戴佩妮", + "v": "戴佩妮演唱会超清" + }, + { + "n": "D邓丽君", + "v": "邓丽君演唱会超清" + }, + { + "n": "F飞儿乐队", + "v": "飞儿乐队演唱会超清" + }, + { + "n": "F费玉清", + "v": "费玉清演唱会超清" + }, + { + "n": "F费翔", + "v": "费翔演唱会超清" + }, + { + "n": "F方大同", + "v": "方大同演唱会超清" + }, + { + "n": "F房东的猫", + "v": "房东的猫演唱会超清" + }, + { + "n": "F凤飞飞", + "v": "凤飞飞演唱会超清" + }, + { + "n": "F凤凰传奇", + "v": "凤凰传奇演唱会超清" + }, + { + "n": "G郭采洁", + "v": "郭采洁演唱会超清" + }, + { + "n": "G光良", + "v": "光良演唱会超清" + }, + { + "n": "G郭静", + "v": "郭静演唱会超清" + }, + { + "n": "G郭富城", + "v": "郭富城演唱会超清" + }, + { + "n": "H胡彦斌", + "v": "胡彦斌演唱会超清" + }, + { + "n": "H胡夏", + "v": "胡夏演唱会超清" + }, + { + "n": "H韩红", + "v": "韩红演唱会超清" + }, + { + "n": "H黄品源", + "v": "黄品源演唱会超清" + }, + { + "n": "H黄小琥", + "v": "黄小琥演唱会超清" + }, + { + "n": "H花儿乐队", + "v": "花儿乐队演唱会超清" + }, + { + "n": "H黄家强", + "v": "黄家强演唱会超清" + }, + { + "n": "H后街男孩", + "v": "后街男孩演唱会超清" + }, + { + "n": "J经典老歌", + "v": "经典老歌演唱会超清" + }, + { + "n": "J贾斯丁比伯", + "v": "贾斯丁比伯演唱会超清" + }, + { + "n": "J金池", + "v": "金池演唱会超清" + }, + { + "n": "J金志文", + "v": "金志文演唱会超清" + }, + { + "n": "J焦迈奇", + "v": "焦迈奇演唱会超清" + }, + { + "n": "K筷子兄弟", + "v": "筷子兄弟演唱会超清" + }, + { + "n": "L李玟", + "v": "李玟演唱会超清" + }, + { + "n": "L林忆莲", + "v": "林忆莲演唱会超清" + }, + { + "n": "L李克勤", + "v": "李克勤演唱会超清" + }, + { + "n": "L刘宪华", + "v": "刘宪华演唱会超清" + }, + { + "n": "L李圣杰", + "v": "李圣杰演唱会超清" + }, + { + "n": "L林宥嘉", + "v": "林宥嘉演唱会超清" + }, + { + "n": "L梁静茹", + "v": "梁静茹演唱会超清" + }, + { + "n": "L李健", + "v": "李健演唱会超清" + }, + { + "n": "L林俊杰", + "v": "林俊杰演唱会超清" + }, + { + "n": "L李玉刚", + "v": "李玉刚演唱会超清" + }, + { + "n": "L林志炫", + "v": "林志炫演唱会超清" + }, + { + "n": "L李荣浩", + "v": "李荣浩演唱会超清" + }, + { + "n": "L李宇春", + "v": "李宇春演唱会超清" + }, + { + "n": "L洛天依", + "v": "洛天依演唱会超清" + }, + { + "n": "L林子祥", + "v": "林子祥演唱会超清" + }, + { + "n": "L李宗盛", + "v": "李宗盛演唱会超清" + }, + { + "n": "L黎明", + "v": "黎明演唱会超清" + }, + { + "n": "L刘德华", + "v": "刘德华演唱会超清" + }, + { + "n": "L罗大佑", + "v": "罗大佑演唱会超清" + }, + { + "n": "L林肯公园", + "v": "林肯公园演唱会超清" + }, + { + "n": "LLadyGaga", + "v": "LadyGaga演唱会超清" + }, + { + "n": "L旅行团乐队", + "v": "旅行团乐队演唱会超清" + }, + { + "n": "M莫文蔚", + "v": "莫文蔚演唱会超清" + }, + { + "n": "M毛不易", + "v": "毛不易演唱会超清" + }, + { + "n": "M梅艳芳", + "v": "梅艳芳演唱会超清" + }, + { + "n": "M迈克尔杰克逊", + "v": "迈克尔杰克逊演唱会超清" + }, + { + "n": "N南拳妈妈", + "v": "南拳妈妈演唱会超清" + }, + { + "n": "P朴树", + "v": "朴树演唱会超清" + }, + { + "n": "Q齐秦", + "v": "齐秦演唱会超清" + }, + { + "n": "Q青鸟飞鱼", + "v": "青鸟飞鱼演唱会超清" + }, + { + "n": "R容祖儿", + "v": "容祖儿演唱会超清" + }, + { + "n": "R任贤齐", + "v": "任贤齐演唱会超清" + }, + { + "n": "S水木年华", + "v": "水木年华演唱会超清" + }, + { + "n": "S孙燕姿", + "v": "孙燕姿演唱会超清" + }, + { + "n": "S苏打绿", + "v": "苏打绿演唱会超清" + }, + { + "n": "SSHE", + "v": "SHE演唱会超清" + }, + { + "n": "S孙楠", + "v": "孙楠演唱会超清" + }, + { + "n": "T陶喆", + "v": "陶喆演唱会超清" + }, + { + "n": "T谭咏麟", + "v": "谭咏麟演唱会超清" + }, + { + "n": "T田馥甄", + "v": "田馥甄演唱会超清" + }, + { + "n": "T谭维维", + "v": "谭维维演唱会超清" + }, + { + "n": "T逃跑计划", + "v": "逃跑计划演唱会超清" + }, + { + "n": "T田震", + "v": "田震演唱会超清" + }, + { + "n": "T谭晶", + "v": "谭晶演唱会超清" + }, + { + "n": "T屠洪刚", + "v": "屠洪刚演唱会超清" + }, + { + "n": "T泰勒·斯威夫特", + "v": "泰勒·斯威夫特演唱会超清" + }, + { + "n": "W王力宏", + "v": "王力宏演唱会超清" + }, + { + "n": "W王杰", + "v": "王杰演唱会超清" + }, + { + "n": "W吴克群", + "v": "吴克群演唱会超清" + }, + { + "n": "W王心凌", + "v": "王心凌演唱会超清" + }, + { + "n": "W王靖雯", + "v": "好声音王靖雯演唱会超清" + }, + { + "n": "W汪峰", + "v": "汪峰演唱会超清" + }, + { + "n": "W伍佰", + "v": "伍佰演唱会超清" + }, + { + "n": "W王菲", + "v": "王菲演唱会超清" + }, + { + "n": "W五月天", + "v": "五月天演唱会超清" + }, + { + "n": "W汪苏泷", + "v": "汪苏泷演唱会超清" + }, + { + "n": "X徐佳莹", + "v": "徐佳莹演唱会超清" + }, + { + "n": "X弦子", + "v": "弦子演唱会超清" + }, + { + "n": "X萧亚轩", + "v": "萧亚轩演唱会超清" + }, + { + "n": "X许巍", + "v": "许巍演唱会超清" + }, + { + "n": "X薛之谦", + "v": "薛之谦演唱会超清" + }, + { + "n": "X许嵩", + "v": "许嵩演唱会超清" + }, + { + "n": "X小虎队", + "v": "小虎队演唱会超清" + }, + { + "n": "X萧敬腾", + "v": "萧敬腾演唱会超清" + }, + { + "n": "X谢霆锋", + "v": "谢霆锋演唱会超清" + }, + { + "n": "X徐小凤", + "v": "徐小凤演唱会超清" + }, + { + "n": "X信乐队", + "v": "信乐队演唱会超清" + }, + { + "n": "Y夜愿乐队", + "v": "夜愿乐队演唱会超清" + }, + { + "n": "Y羽泉", + "v": "羽泉演唱会超清" + }, + { + "n": "Y郁可唯", + "v": "郁可唯演唱会超清" + }, + { + "n": "Y叶倩文", + "v": "叶倩文演唱会超清" + }, + { + "n": "Y杨坤", + "v": "杨坤演唱会超清" + }, + { + "n": "Y庾澄庆", + "v": "庾澄庆演唱会超清" + }, + { + "n": "Y尤长靖", + "v": "尤长靖演唱会超清" + }, + { + "n": "Y易烊千玺", + "v": "易烊千玺演唱会超清" + }, + { + "n": "Y袁娅维", + "v": "袁娅维演唱会超清" + }, + { + "n": "Y杨丞琳", + "v": "杨丞琳演唱会超清" + }, + { + "n": "Y杨千嬅", + "v": "杨千嬅演唱会超清" + }, + { + "n": "Y杨宗纬", + "v": "杨宗纬演唱会超清" + }, + { + "n": "Z郑秀文", + "v": "郑秀文演唱会超清" + }, + { + "n": "Z周杰伦", + "v": "周杰伦演唱会超清" + }, + { + "n": "Z张学友", + "v": "张学友演唱会超清" + }, + { + "n": "Z张信哲", + "v": "张信哲演唱会超清" + }, + { + "n": "Z张宇", + "v": "张宇演唱会超清" + }, + { + "n": "Z周华健", + "v": "周华健演唱会超清" + }, + { + "n": "Z张韶涵", + "v": "张韶涵演唱会超清" + }, + { + "n": "Z周深", + "v": "周深演唱会超清" + }, + { + "n": "Z纵贯线", + "v": "纵贯线演唱会超清" + }, + { + "n": "Z赵雷", + "v": "赵雷演唱会超清" + }, + { + "n": "Z周传雄", + "v": "周传雄演唱会超清" + }, + { + "n": "Z张国荣", + "v": "张国荣演唱会超清" + }, + { + "n": "Z周慧敏", + "v": "周慧敏演唱会超清" + }, + { + "n": "Z张惠妹", + "v": "张惠妹演唱会超清" + }, + { + "n": "Z周笔畅", + "v": "周笔畅演唱会超清" + }, + { + "n": "Z郑中基", + "v": "郑中基演唱会超清" + }, + { + "n": "Z张艺兴", + "v": "张艺兴演唱会超清" + }, + { + "n": "Z张震岳", + "v": "张震岳演唱会超清" + }, + { + "n": "Z张雨生", + "v": "张雨生演唱会超清" + }, + { + "n": "Z郑智化", + "v": "郑智化演唱会超清" + }, + { + "n": "Z卓依婷", + "v": "卓依婷演唱会超清" + }, + { + "n": "Z中岛美雪", + "v": "中岛美雪演唱会超清" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "探索发现超清": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "电影": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "鬼畜": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "一口气沙雕动漫": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "说案": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "说案" + }, + { + "n": "汤圆", + "v": "汤圆说案" + }, + { + "n": "唐唐", + "v": "唐唐说案" + }, + { + "n": "罗翔", + "v": "罗翔说刑法" + }, + { + "n": "何家弘", + "v": "何家弘说案" + }, + { + "n": "韩诺", + "v": "韩诺说案" + }, + { + "n": "老V", + "v": "老V说案" + }, + { + "n": "禁播档案‼️", + "v": "禁播档案" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "演讲": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "全部演讲4K" + }, + { + "n": "A艾跃进", + "v": "艾跃进演讲4K" + }, + { + "n": "C超级演说家", + "v": "超级演说家4K" + }, + { + "n": "D电影", + "v": "电影演讲4K" + }, + { + "n": "D典籍里的中国", + "v": "典籍里的中国4K" + }, + { + "n": "G感动中国", + "v": "感动中国4K" + }, + { + "n": "G郭继承", + "v": "郭继承演讲4K" + }, + { + "n": "H华春莹", + "v": "华春莹演讲4K" + }, + { + "n": "L雷军", + "v": "雷军演讲4K" + }, + { + "n": "L罗翔", + "v": "罗翔演讲4K" + }, + { + "n": "R任正非", + "v": "任正非演讲4K" + }, + { + "n": "TED", + "v": "TED演讲4K" + }, + { + "n": "W汪文斌", + "v": "汪文斌演讲4K" + }, + { + "n": "Y一刻", + "v": "一刻演讲4K" + }, + { + "n": "Z赵立坚", + "v": "赵立坚演讲4K" + }, + { + "n": "Z郑强", + "v": "郑强演讲4K" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "解说": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "解说" + }, + { + "n": "电影", + "v": "电影解说" + }, + { + "n": "电视", + "v": "电视解说" + }, + { + "n": "历史", + "v": "历史解说" + }, + { + "n": "动漫", + "v": "动漫解说" + }, + { + "n": "小说", + "v": "小说解说" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "风景4K": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "风景4K" + }, + { + "n": "A澳门", + "v": "澳门风景4K" + }, + { + "n": "A安徽", + "v": "安徽风景4K" + }, + { + "n": "B布达拉宫", + "v": "布达拉宫风景4K" + }, + { + "n": "B北京", + "v": "北京风景4K" + }, + { + "n": "C重庆", + "v": "重庆风景4K" + }, + { + "n": "C草原", + "v": "草原风景4K" + }, + { + "n": "D大海", + "v": "大海风景4K" + }, + { + "n": "F福建", + "v": "福建风景4K" + }, + { + "n": "G广东", + "v": "广东风景4K" + }, + { + "n": "G广西", + "v": "广西风景4K" + }, + { + "n": "G贵州", + "v": "贵州风景4K" + }, + { + "n": "G甘肃", + "v": "甘肃风景4K" + }, + { + "n": "H海南", + "v": "海南风景4K" + }, + { + "n": "H河北", + "v": "河北风景4K" + }, + { + "n": "H河南", + "v": "河南风景4K" + }, + { + "n": "H湖北", + "v": "湖北风景4K" + }, + { + "n": "H湖南", + "v": "湖南风景4K" + }, + { + "n": "H黑龙江", + "v": "黑龙江风景4K" + }, + { + "n": "J吉林", + "v": "吉林风景4K" + }, + { + "n": "J江苏", + "v": "江苏风景4K" + }, + { + "n": "J江西", + "v": "江西风景4K" + }, + { + "n": "L辽宁", + "v": "辽宁风景4K" + }, + { + "n": "M民宿", + "v": "民宿风景4K" + }, + { + "n": "N内蒙古", + "v": "内蒙古风景4K" + }, + { + "n": "N宁夏", + "v": "宁夏风景4K" + }, + { + "n": "Q青海", + "v": "青海风景4K" + }, + { + "n": "S上海", + "v": "上海风景4K" + }, + { + "n": "S陕西", + "v": "陕西风景4K" + }, + { + "n": "S四川", + "v": "四川风景4K" + }, + { + "n": "S山西", + "v": "山西风景4K" + }, + { + "n": "S山东", + "v": "山东风景4K" + }, + { + "n": "T天津", + "v": "天津风景4K" + }, + { + "n": "T台湾", + "v": "台湾风景4K" + }, + { + "n": "T天空", + "v": "天空风景4K" + }, + { + "n": "X西湖", + "v": "西湖风景4K" + }, + { + "n": "X西藏", + "v": "西藏风景4K" + }, + { + "n": "X新疆", + "v": "新疆风景4K" + }, + { + "n": "X香港", + "v": "香港风景4K" + }, + { + "n": "Y云南", + "v": "云南风景4K" + }, + { + "n": "Z浙江", + "v": "浙江风景4K" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "MV4K": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "MV4K" + }, + { + "n": "A阿杜", + "v": "阿杜MV4K" + }, + { + "n": "A阿黛尔", + "v": "阿黛尔MV4K" + }, + { + "n": "BBeyond", + "v": "BeyondMV4K" + }, + { + "n": "BBy2", + "v": "By2MV4K" + }, + { + "n": "BBIGBANG", + "v": "BIGBANGMV4K" + }, + { + "n": "B布兰妮", + "v": "布兰妮MV4K" + }, + { + "n": "C陈奕迅", + "v": "陈奕迅MV4K" + }, + { + "n": "C蔡依林", + "v": "蔡依林MV4K" + }, + { + "n": "C初音未来", + "v": "初音未来MV4K" + }, + { + "n": "C蔡健雅", + "v": "蔡健雅MV4K" + }, + { + "n": "C陈小春", + "v": "陈小春MV4K" + }, + { + "n": "C草蜢", + "v": "草蜢MV4K" + }, + { + "n": "C陈慧娴", + "v": "陈慧娴MV4K" + }, + { + "n": "C崔健", + "v": "崔健MV4K" + }, + { + "n": "C仓木麻衣", + "v": "仓木麻衣MV4K" + }, + { + "n": "D戴荃", + "v": "戴荃MV4K" + }, + { + "n": "D动力火车", + "v": "动力火车MV4K" + }, + { + "n": "D邓丽君", + "v": "邓丽君MV4K" + }, + { + "n": "D丁当", + "v": "丁当MV4K" + }, + { + "n": "D刀郎", + "v": "刀郎MV4K" + }, + { + "n": "D邓紫棋", + "v": "邓紫棋MV4K" + }, + { + "n": "D戴佩妮", + "v": "戴佩妮MV4K" + }, + { + "n": "D邓丽君", + "v": "邓丽君MV4K" + }, + { + "n": "F飞儿乐队", + "v": "飞儿乐队MV4K" + }, + { + "n": "F费玉清", + "v": "费玉清MV4K" + }, + { + "n": "F费翔", + "v": "费翔MV4K" + }, + { + "n": "F方大同", + "v": "方大同MV4K" + }, + { + "n": "F房东的猫", + "v": "房东的猫MV4K" + }, + { + "n": "F凤飞飞", + "v": "凤飞飞MV4K" + }, + { + "n": "F凤凰传奇", + "v": "凤凰传奇MV4K" + }, + { + "n": "G古风歌曲", + "v": "古风歌曲4K" + }, + { + "n": "G国乐大典", + "v": "国乐大典4K" + }, + { + "n": "G郭采洁", + "v": "郭采洁MV4K" + }, + { + "n": "G光良", + "v": "光良MV4K" + }, + { + "n": "G郭静", + "v": "郭静MV4K" + }, + { + "n": "G郭富城", + "v": "郭富城MV4K" + }, + { + "n": "H胡彦斌", + "v": "胡彦斌MV4K" + }, + { + "n": "H胡夏", + "v": "胡夏MV4K" + }, + { + "n": "H韩红", + "v": "韩红MV4K" + }, + { + "n": "H黄品源", + "v": "黄品源MV4K" + }, + { + "n": "H黄小琥", + "v": "黄小琥MV4K" + }, + { + "n": "H花儿乐队", + "v": "花儿乐队MV4K" + }, + { + "n": "H黄家强", + "v": "黄家强MV4K" + }, + { + "n": "H后街男孩", + "v": "后街男孩MV4K" + }, + { + "n": "J经典老歌", + "v": "经典老歌4K" + }, + { + "n": "J贾斯丁比伯", + "v": "贾斯丁比伯MV4K" + }, + { + "n": "J金池", + "v": "金池MV4K" + }, + { + "n": "J金志文", + "v": "金志文MV4K" + }, + { + "n": "J焦迈奇", + "v": "焦迈奇MV4K" + }, + { + "n": "K筷子兄弟", + "v": "筷子兄弟MV4K" + }, + { + "n": "L李玟", + "v": "李玟MV4K" + }, + { + "n": "L林忆莲", + "v": "林忆莲MV4K" + }, + { + "n": "L李克勤", + "v": "李克勤MV4K" + }, + { + "n": "L刘宪华", + "v": "刘宪华MV4K" + }, + { + "n": "L李圣杰", + "v": "李圣杰MV4K" + }, + { + "n": "L林宥嘉", + "v": "林宥嘉MV4K" + }, + { + "n": "L梁静茹", + "v": "梁静茹MV4K" + }, + { + "n": "L李健", + "v": "李健MV4K" + }, + { + "n": "L林俊杰", + "v": "林俊杰MV4K" + }, + { + "n": "L李玉刚", + "v": "李玉刚MV4K" + }, + { + "n": "L林志炫", + "v": "林志炫MV4K" + }, + { + "n": "L李荣浩", + "v": "李荣浩MV4K" + }, + { + "n": "L李宇春", + "v": "李宇春MV4K" + }, + { + "n": "L洛天依", + "v": "洛天依MV4K" + }, + { + "n": "L林子祥", + "v": "林子祥MV4K" + }, + { + "n": "L李宗盛", + "v": "李宗盛MV4K" + }, + { + "n": "L黎明", + "v": "黎明MV4K" + }, + { + "n": "L刘德华", + "v": "刘德华MV4K" + }, + { + "n": "L罗大佑", + "v": "罗大佑MV4K" + }, + { + "n": "L林肯公园", + "v": "林肯公园MV4K" + }, + { + "n": "LLadyGaga", + "v": "LadyGagaMV4K" + }, + { + "n": "L旅行团乐队", + "v": "旅行团乐队MV4K" + }, + { + "n": "M莫文蔚", + "v": "莫文蔚MV4K" + }, + { + "n": "M毛不易", + "v": "毛不易MV4K" + }, + { + "n": "M梅艳芳", + "v": "梅艳芳MV4K" + }, + { + "n": "M迈克尔杰克逊", + "v": "迈克尔杰克逊MV4K" + }, + { + "n": "N南拳妈妈", + "v": "南拳妈妈MV4K" + }, + { + "n": "P朴树", + "v": "朴树MV4K" + }, + { + "n": "Q齐秦", + "v": "齐秦MV4K" + }, + { + "n": "Q青鸟飞鱼", + "v": "青鸟飞鱼MV4K" + }, + { + "n": "R容祖儿", + "v": "容祖儿MV4K" + }, + { + "n": "R热歌", + "v": "热歌MV4K" + }, + { + "n": "R任贤齐", + "v": "任贤齐MV4K" + }, + { + "n": "S水木年华", + "v": "水木年华MV4K" + }, + { + "n": "S孙燕姿", + "v": "孙燕姿MV4K" + }, + { + "n": "S苏打绿", + "v": "苏打绿MV4K" + }, + { + "n": "SSHE", + "v": "SHEMV4K" + }, + { + "n": "S孙楠", + "v": "孙楠MV4K" + }, + { + "n": "T陶喆", + "v": "陶喆MV4K" + }, + { + "n": "T谭咏麟", + "v": "谭咏麟MV4K" + }, + { + "n": "T田馥甄", + "v": "田馥甄MV4K" + }, + { + "n": "T谭维维", + "v": "谭维维MV4K" + }, + { + "n": "T逃跑计划", + "v": "逃跑计划MV4K" + }, + { + "n": "T田震", + "v": "田震MV4K" + }, + { + "n": "T谭晶", + "v": "谭晶MV4K" + }, + { + "n": "T屠洪刚", + "v": "屠洪刚MV4K" + }, + { + "n": "T泰勒·斯威夫特", + "v": "泰勒·斯威夫特MV4K" + }, + { + "n": "W王力宏", + "v": "王力宏MV4K" + }, + { + "n": "W王杰", + "v": "王杰MV4K" + }, + { + "n": "W吴克群", + "v": "吴克群MV4K" + }, + { + "n": "W王心凌", + "v": "王心凌MV4K" + }, + { + "n": "W汪峰", + "v": "汪峰MV4K" + }, + { + "n": "W伍佰", + "v": "伍佰MV4K" + }, + { + "n": "W王菲", + "v": "王菲MV4K" + }, + { + "n": "W五月天", + "v": "五月天MV4K" + }, + { + "n": "W汪苏泷", + "v": "汪苏泷MV4K" + }, + { + "n": "X徐佳莹", + "v": "徐佳莹MV4K" + }, + { + "n": "X弦子", + "v": "弦子MV4K" + }, + { + "n": "X萧亚轩", + "v": "萧亚轩MV4K" + }, + { + "n": "X许巍", + "v": "许巍MV4K" + }, + { + "n": "X薛之谦", + "v": "薛之谦MV4K" + }, + { + "n": "X许嵩", + "v": "许嵩MV4K" + }, + { + "n": "X小虎队", + "v": "小虎队MV4K" + }, + { + "n": "X萧敬腾", + "v": "萧敬腾MV4K" + }, + { + "n": "X谢霆锋", + "v": "谢霆锋MV4K" + }, + { + "n": "X徐小凤", + "v": "徐小凤MV4K" + }, + { + "n": "X信乐队", + "v": "信乐队MV4K" + }, + { + "n": "Y夜愿乐队", + "v": "夜愿乐队MV4K" + }, + { + "n": "Y原创音乐", + "v": "原创音乐MV4K" + }, + { + "n": "Y羽泉", + "v": "羽泉MV4K" + }, + { + "n": "Y粤语", + "v": "粤语MV4K" + }, + { + "n": "Y郁可唯", + "v": "郁可唯MV4K" + }, + { + "n": "Y叶倩文", + "v": "叶倩文MV4K" + }, + { + "n": "Y杨坤", + "v": "杨坤MV4K" + }, + { + "n": "Y庾澄庆", + "v": "庾澄庆MV4K" + }, + { + "n": "Y尤长靖", + "v": "尤长靖MV4K" + }, + { + "n": "Y易烊千玺", + "v": "易烊千玺MV4K" + }, + { + "n": "Y袁娅维", + "v": "袁娅维MV4K" + }, + { + "n": "Y杨丞琳", + "v": "杨丞琳MV4K" + }, + { + "n": "Y杨千嬅", + "v": "杨千嬅MV4K" + }, + { + "n": "Y杨宗纬", + "v": "杨宗纬MV4K" + }, + { + "n": "Z周杰伦", + "v": "周杰伦MV4K" + }, + { + "n": "Z张学友", + "v": "张学友MV4K" + }, + { + "n": "Z张信哲", + "v": "张信哲MV4K" + }, + { + "n": "Z张宇", + "v": "张宇MV4K" + }, + { + "n": "Z周华健", + "v": "周华健MV4K" + }, + { + "n": "Z张韶涵", + "v": "张韶涵MV4K" + }, + { + "n": "Z周深", + "v": "周深MV4K" + }, + { + "n": "Z纵贯线", + "v": "纵贯线MV4K" + }, + { + "n": "Z赵雷", + "v": "赵雷MV4K" + }, + { + "n": "Z周传雄", + "v": "周传雄MV4K" + }, + { + "n": "Z张国荣", + "v": "张国荣MV4K" + }, + { + "n": "Z周慧敏", + "v": "周慧敏MV4K" + }, + { + "n": "Z张惠妹", + "v": "张惠妹MV4K" + }, + { + "n": "Z周笔畅", + "v": "周笔畅MV4K" + }, + { + "n": "Z郑中基", + "v": "郑中基MV4K" + }, + { + "n": "Z张艺兴", + "v": "张艺兴MV4K" + }, + { + "n": "Z张震岳", + "v": "张震岳MV4K" + }, + { + "n": "Z中国好声音", + "v": "中国好声音MV4K" + }, + { + "n": "Z张雨生", + "v": "张雨生MV4K" + }, + { + "n": "Z郑智化", + "v": "郑智化MV4K" + }, + { + "n": "Z卓依婷", + "v": "卓依婷MV4K" + }, + { + "n": "Z中岛美雪", + "v": "中岛美雪MV4K" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "帕梅拉": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "帕梅拉" + }, + { + "n": "瘦腿", + "v": "帕梅拉瘦腿" + }, + { + "n": "腹部", + "v": "帕梅拉腹部" + }, + { + "n": "手臂", + "v": "帕梅拉手臂" + }, + { + "n": "热身", + "v": "帕梅拉热身" + }, + { + "n": "舞蹈", + "v": "帕梅拉舞蹈" + }, + { + "n": "燃脂", + "v": "帕梅拉燃脂" + }, + { + "n": "有氧", + "v": "帕梅拉有氧" + }, + { + "n": "拉伸", + "v": "帕梅拉拉伸" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "知名UP主": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "知名UP主" + }, + { + "n": "菠萝赛东", + "v": "菠萝赛东" + }, + { + "n": "冯提莫", + "v": "冯提莫" + }, + { + "n": "林延秋", + "v": "林延秋" + }, + { + "n": "-LKs-", + "v": "-LKs-" + }, + { + "n": "小约翰可汗", + "v": "小约翰可汗" + }, + { + "n": "low馆长", + "v": "low馆长" + }, + { + "n": "自说自话的总裁", + "v": "自说自话的总裁" + }, + { + "n": "所长林超", + "v": "所长林超" + }, + { + "n": "世界未解之谜M", + "v": "世界未解之谜M" + }, + { + "n": "李永乐老师官方", + "v": "李永乐老师官方" + }, + { + "n": "罗兹", + "v": "罗兹" + }, + { + "n": "回到2049", + "v": "回到2049" + }, + { + "n": "二次元的中科院物理所", + "v": "二次元的中科院物理所" + }, + { + "n": "毕导THU", + "v": "毕导THU" + }, + { + "n": "罗翔讲刑法", + "v": "罗翔讲刑法" + }, + { + "n": "戴博士实验室", + "v": "戴博士实验室" + }, + { + "n": "芳斯塔芙", + "v": "芳斯塔芙" + }, + { + "n": "参赛者网", + "v": "参赛者网" + }, + { + "n": "三维地图看世界", + "v": "三维地图看世界" + }, + { + "n": "有机社会", + "v": "有机社会" + }, + { + "n": "乌鸦校尉CaptainWuya", + "v": "乌鸦校尉CaptainWuya" + }, + { + "n": "果壳", + "v": "果壳" + }, + { + "n": "严伯钧", + "v": "严伯钧" + }, + { + "n": "是你们的康康", + "v": "是你们的康康" + }, + { + "n": "老爸评测", + "v": "老爸评测" + }, + { + "n": "硬核的半佛仙人", + "v": "硬核的半佛仙人" + }, + { + "n": "盗月社食遇记", + "v": "盗月社食遇记" + }, + { + "n": "我是郭杰瑞", + "v": "我是郭杰瑞" + }, + { + "n": "无穷小亮的科普日常", + "v": "无穷小亮的科普日常" + }, + { + "n": "papi酱", + "v": "papi酱" + }, + { + "n": "老番茄", + "v": "老番茄" + }, + { + "n": "绵羊料理", + "v": "绵羊料理" + }, + { + "n": "老师好我叫何同学", + "v": "老师好我叫何同学" + }, + { + "n": "敬汉卿", + "v": "敬汉卿" + }, + { + "n": "周六野Zoey", + "v": "周六野Zoey" + }, + { + "n": "木鱼水心", + "v": "木鱼水心" + }, + { + "n": "凉风Kaze", + "v": "凉风Kaze" + }, + { + "n": "小潮院长", + "v": "小潮院长" + }, + { + "n": "中国BOY超级大猩猩", + "v": "中国BOY超级大猩猩" + }, + { + "n": "李子柒", + "v": "李子柒" + }, + { + "n": "敖厂长", + "v": "敖厂长" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "太极拳": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "太极拳" + }, + { + "n": "邱慧芳", + "v": "太极拳邱慧芳" + }, + { + "n": "陈氏", + "v": "太极拳陈氏" + }, + { + "n": "武当", + "v": "太极拳武当" + }, + { + "n": "二十四式", + "v": "太极拳二十四式" + }, + { + "n": "三十六式", + "v": "太极拳三十六式" + }, + { + "n": "五禽戏", + "v": "五禽戏" + }, + { + "n": "八段锦", + "v": "八段锦" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "舞蹈": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "舞蹈" + }, + { + "n": "宅舞", + "v": "宅舞" + }, + { + "n": "街舞", + "v": "街舞" + }, + { + "n": "中国舞", + "v": "中国舞" + }, + { + "n": "广场舞", + "v": "广场舞" + }, + { + "n": "交谊舞", + "v": "交谊舞" + }, + { + "n": "教程", + "v": "舞蹈教程" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "音乐": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "音乐" + }, + { + "n": "钢琴曲", + "v": "钢琴曲" + }, + { + "n": "协奏曲", + "v": "协奏曲r" + }, + { + "n": "中国古风音乐", + "v": "中国古风音乐" + }, + { + "n": "背景音乐", + "v": "背景音乐" + }, + { + "n": "助眠音乐r", + "v": "助眠音乐" + }, + { + "n": "胎教音乐", + "v": "胎教音乐" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "歌曲": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "歌曲" + }, + { + "n": "香港歌曲", + "v": "香港歌曲" + }, + { + "n": "台湾歌曲", + "v": "台湾歌曲" + }, + { + "n": "内地歌曲", + "v": "内地歌曲" + }, + { + "n": "英文歌曲", + "v": "英文歌曲" + }, + { + "n": "日文歌曲", + "v": "日文歌曲" + }, + { + "n": "小语种歌曲", + "v": "小语种歌曲" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "平面设计教学": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "平面设计教学" + }, + { + "n": "Adobe Photoshop", + "v": "Adobe Photoshop教程" + }, + { + "n": "Adobe Illustrator", + "v": "Adobe Illustrator教程" + }, + { + "n": "CorelDRAW", + "v": "CorelDRAW教程" + }, + { + "n": "Adobe InDesign", + "v": "Adobe InDesign教程" + }, + { + "n": "Adobe Pagermaker", + "v": "Adobe Pagermaker教程" + }, + { + "n": "SAI", + "v": "SAI教程" + }, + { + "n": "Adobe Bridge", + "v": "Adobe Bridge教程" + }, + { + "n": "Adobe Pagermaker", + "v": "Adobe Pagermake教程r" + }, + { + "n": "3D Studio Max", + "v": "3D Studio Max教程" + }, + { + "n": "PR", + "v": "PR教程" + }, + { + "n": "AE", + "v": "AE教程" + }, + { + "n": "CINEMA 4D", + "v": "CINEMA 4D教程" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "软件教程": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "软件教程" + }, + { + "n": "MT管理器", + "v": "MT管理器" + }, + { + "n": "NP管理器", + "v": "NP管理器" + }, + { + "n": "mixplorer", + "v": "mixplorer" + }, + { + "n": "脱壳", + "v": "脱壳" + }, + { + "n": "爬虫", + "v": "爬虫" + }, + { + "n": "json&jar", + "v": "json&jar" + }, + { + "n": "网盘挂载", + "v": "网盘挂载" + }, + { + "n": "alist+WebDav", + "v": "alist+WebDav" + }, + { + "n": "TVBox修改", + "v": "TVBox修改教程" + }, + { + "n": "EXCEL", + "v": "EXCEL教程" + }, + { + "n": "Git入门到精通", + "v": "Git入门到精通" + }, + { + "n": "java", + "v": "java教程" + }, + { + "n": "phyton", + "v": "phyton教程" + }, + { + "n": "xml", + "v": "xml教程" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "Windows": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "小姐姐超清": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "广场舞超清": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "舞曲超清": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "白噪音超清": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "搞笑超清": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "体育超清": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "4K": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "足球比赛合集超清": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "篮球超清": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "动物世界超清": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "儿童超清": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "荒野求生超清": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "纪录片超清": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "食谱": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "tid", + "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": "苏菜食谱" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "健身": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "健身" + }, + { + "n": "瘦腿", + "v": "瘦腿" + }, + { + "n": "腹部", + "v": "腹部" + }, + { + "n": "手臂", + "v": "手臂" + }, + { + "n": "热身", + "v": "热身" + }, + { + "n": "帕梅拉", + "v": "帕梅拉" + }, + { + "n": "燃脂", + "v": "燃脂" + }, + { + "n": "有氧", + "v": "有氧" + }, + { + "n": "拉伸", + "v": "拉伸" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "窗白噪音": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "美食超清": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "tid", + "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": "川菜美食超清" + }, + { + "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": "日料" + }, + { + "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": "阿拉伯菜" + }, + { + "n": "德国菜", + "v": "德国菜" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "广场舞": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "球星": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "球星" + }, + { + "n": "梅西", + "v": "梅西" + }, + { + "n": "C罗", + "v": "C罗" + }, + { + "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": "巴萨" + }, + { + "n": "巴黎圣日耳曼", + "v": "巴黎圣日耳曼" + }, + { + "n": "曼联", + "v": "曼联" + }, + { + "n": "曼城", + "v": "曼城" + }, + { + "n": "NBA", + "v": "NBA" + }, + { + "n": "詹姆斯", + "v": "詹姆斯" + }, + { + "n": "库里", + "v": "库里" + }, + { + "n": "杜兰特", + "v": "杜兰特" + }, + { + "n": "UFC", + "v": "UFC" + }, + { + "n": "斯诺克", + "v": "斯诺克" + }, + { + "n": "网球", + "v": "网球" + }, + { + "n": "F1", + "v": "F1" + }, + { + "n": "高尔夫", + "v": "高尔夫" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "电视剧": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "相声小品超清": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "tid", + "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": "赵丽蓉" + }, + { + "n": "郭达", + "v": "郭达" + }, + { + "n": "潘长江", + "v": "潘长江" + }, + { + "n": "郭冬临", + "v": "郭冬临" + }, + { + "n": "严顺开", + "v": "严顺开" + }, + { + "n": "文松", + "v": "文松" + }, + { + "n": "开心麻花", + "v": "开心麻花" + }, + { + "n": "屌丝男士", + "v": "屌丝男士" + }, + { + "n": "喜剧综艺", + "v": "喜剧综艺" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "戏曲": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "tid", + "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": "二人台" + }, + { + "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": "采茶戏" + }, + { + "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": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "旅游": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "游泳": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "泳姿" + }, + { + "n": "蝶泳", + "v": "蝶泳" + }, + { + "n": "仰泳", + "v": "仰泳" + }, + { + "n": "蛙泳", + "v": "蛙泳" + }, + { + "n": "自由泳", + "v": "自由泳" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/tianjitop/llllo4k/lib/BLTS.json b/tianjitop/llllo4k/lib/BLTS.json new file mode 100644 index 00000000..4a5b5eba --- /dev/null +++ b/tianjitop/llllo4k/lib/BLTS.json @@ -0,0 +1,52 @@ +{ + "class": [ + { + "type_name": "有声小说", + "type_id": "有声小说" + }, + { + "type_name": "玄幻有声小说", + "type_id": "玄幻有声小说" + }, + { + "type_name": "奇幻有声小说", + "type_id": "奇幻有声小说" + }, + { + "type_name": "都市有声小说", + "type_id": "都市有声小说" + }, + { + "type_name": "言情有声小说", + "type_id": "言情有声小说" + }, + { + "type_name": "武侠有声小说", + "type_id": "武侠有声小说" + }, + { + "type_name": "仙侠有声小说", + "type_id": "仙侠有声小说" + }, + { + "type_name": "科幻有声小说", + "type_id": "科幻有声小说" + }, + { + "type_name": "重生有声小说", + "type_id": "重生有声小说" + }, + { + "type_name": "穿越有声小说", + "type_id": "穿越有声小说" + }, + { + "type_name": "恐怖惊悚有声小说", + "type_id": "恐怖惊悚有声小说" + }, + { + "type_name": "网游竞技有声小说", + "type_id": "网游竞技有声小说" + } + ] +} \ No newline at end of file diff --git a/tianjitop/llllo4k/lib/BLXP.json b/tianjitop/llllo4k/lib/BLXP.json new file mode 100644 index 00000000..9ebaf366 --- /dev/null +++ b/tianjitop/llllo4k/lib/BLXP.json @@ -0,0 +1,52 @@ +{ + "class": [ + { + "type_name": "春晚小品", + "type_id": "春晚小品" + }, + { + "type_name": "赵本山", + "type_id": "赵本山" + }, + { + "type_name": "陈佩斯", + "type_id": "陈佩斯" + }, + { + "type_name": "冯巩", + "type_id": "冯巩" + }, + { + "type_name": "宋小宝", + "type_id": "宋小宝" + }, + { + "type_name": "赵丽蓉", + "type_id": "赵丽蓉" + }, + { + "type_name": "郭达", + "type_id": "郭达" + }, + { + "type_name": "潘长江", + "type_id": "潘长江" + }, + { + "type_name": "郭冬临", + "type_id": "郭冬临" + }, + { + "type_name": "严顺开", + "type_id": "严顺开" + }, + { + "type_name": "文松", + "type_id": "文松" + }, + { + "type_name": "开心麻花", + "type_id": "开心麻花" + } + ] +} \ No newline at end of file diff --git a/tianjitop/llllo4k/lib/BLXQ.json b/tianjitop/llllo4k/lib/BLXQ.json new file mode 100644 index 00000000..2fb33f01 --- /dev/null +++ b/tianjitop/llllo4k/lib/BLXQ.json @@ -0,0 +1,200 @@ +{ + "class": [ + { + "type_name": "潮剧", + "type_id": "潮剧" + }, + { + "type_name": "粤剧", + "type_id": "粤剧" + }, + { + "type_name": "京剧", + "type_id": "京剧" + }, + { + "type_name": "越剧", + "type_id": "越剧" + }, + { + "type_name": "芗剧", + "type_id": "芗剧" + }, + { + "type_name": "蒲剧", + "type_id": "蒲剧" + }, + { + "type_name": "闽剧", + "type_id": "闽剧" + }, + { + "type_name": "喊麦", + "type_id": "喊麦" + }, + { + "type_name": "陕北说书", + "type_id": "陕北说书" + }, + { + "type_name": "庐剧", + "type_id": "庐剧" + }, + { + "type_name": "吕剧", + "type_id": "吕剧" + }, + { + "type_name": "眉户", + "type_id": "眉户" + }, + { + "type_name": "歌仔戏", + "type_id": "歌仔戏" + }, + { + "type_name": "黄梅戏", + "type_id": "黄梅戏" + }, + { + "type_name": "黄梅戏", + "type_id": "黄梅戏" + }, + { + "type_name": "评剧", + "type_id": "评剧" + }, + { + "type_name": "豫剧", + "type_id": "豫剧" + }, + { + "type_name": "沪剧", + "type_id": "沪剧" + }, + { + "type_name": "昆曲", + "type_id": "昆曲" + }, + { + "type_name": "花鼓戏", + "type_id": "花鼓戏" + }, + { + "type_name": "超清潮剧", + "type_id": "超清潮剧" + }, + { + "type_name": "百花潮剧院", + "type_id": "百花潮剧院" + }, + { + "type_name": "香港潮剧", + "type_id": "香港潮剧" + }, + { + "type_name": "潮剧院", + "type_id": "潮剧院" + }, + { + "type_name": "潮剧团", + "type_id": "潮剧团" + }, + { + "type_name": "潮剧全剧", + "type_id": "潮剧全剧" + }, + { + "type_name": "潮剧选段", + "type_id": "潮剧选段" + }, + { + "type_name": "名家潮剧", + "type_id": "名家潮剧" + }, + { + "type_name": "潮汕小品", + "type_id": "潮汕小品" + }, + { + "type_name": "潮汕讲古", + "type_id": "潮汕讲古" + }, + { + "type_name": "河北梆子", + "type_id": "河北梆子" + }, + { + "type_name": "梆子腔", + "type_id": "梆子腔" + }, + { + "type_name": "晋剧", + "type_id": "晋剧" + }, + { + "type_name": "龙江剧", + "type_id": "龙江剧" + }, + { + "type_name": "越调", + "type_id": "越调" + }, + { + "type_name": "河南曲剧", + "type_id": "河南曲剧" + }, + { + "type_name": "山东梆子", + "type_id": "山东梆子" + }, + { + "type_name": "淮剧", + "type_id": "淮剧" + }, + { + "type_name": "滑稽戏", + "type_id": "滑稽戏" + }, + { + "type_name": "婺剧", + "type_id": "婺剧" + }, + { + "type_name": "绍剧", + "type_id": "绍剧" + }, + { + "type_name": "徽剧", + "type_id": "徽剧" + }, + { + "type_name": "雁剧", + "type_id": "雁剧" + }, + { + "type_name": "上党梆子", + "type_id": "上党梆子" + }, + { + "type_name": "秦腔", + "type_id": "秦腔" + }, + { + "type_name": "武安平调", + "type_id": "武安平调" + }, + { + "type_name": "二人台", + "type_id": "二人台" + }, + { + "type_name": "吉剧", + "type_id": "吉剧" + }, + { + "type_name": "高腔", + "type_id": "高腔" + } + ] +} \ No newline at end of file diff --git a/tianjitop/llllo4k/lib/BLXS.json b/tianjitop/llllo4k/lib/BLXS.json new file mode 100644 index 00000000..bc8c2188 --- /dev/null +++ b/tianjitop/llllo4k/lib/BLXS.json @@ -0,0 +1,32 @@ +{ + "class": [ + { + "type_name": "单口相声", + "type_id": "单口相声" + }, + { + "type_name": "群口相声", + "type_id": "群口相声" + }, + { + "type_name": "德云社", + "type_id": "德云社" + }, + { + "type_name": "青曲社", + "type_id": "青曲社" + }, + { + "type_name": "郭德纲", + "type_id": "郭德纲" + }, + { + "type_name": "岳云鹏", + "type_id": "岳云鹏" + }, + { + "type_name": "曹云金", + "type_id": "曹云金" + } + ] +} \ No newline at end of file diff --git a/tianjitop/llllo4k/lib/BLYCH.json b/tianjitop/llllo4k/lib/BLYCH.json new file mode 100644 index 00000000..3a9b6105 --- /dev/null +++ b/tianjitop/llllo4k/lib/BLYCH.json @@ -0,0 +1,702 @@ +{ + "class": [ + { + "type_name": "演唱会筛选", + "type_id": "演唱会超清" + }, + { + "type_name": "粤语", + "type_id": "粤语歌曲超清" + }, + { + "type_name": "热榜", + "type_id": "2022年热们歌曲超清" + }, + { + "type_name": "抖音神曲", + "type_id": "抖音神曲超清" + }, + { + "type_name": "经典老歌", + "type_id": "经典老歌超清" + }, + { + "type_name": "DJ", + "type_id": "DJ歌曲超清" + }, + { + "type_name": "网红翻唱", + "type_id": "网红翻唱歌曲超清" + }, + { + "type_name": "韩国女团", + "type_id": "韩国女团演唱会超清" + } + ], + "filters": { + "演唱会超清": [ + { + "key": "order", + "name": "排序", + "value": [ + { + "n": "综合排序", + "v": "0" + }, + { + "n": "最多点击", + "v": "click" + }, + { + "n": "最新发布", + "v": "pubdate" + }, + { + "n": "最多弹幕", + "v": "dm" + }, + { + "n": "最多收藏", + "v": "stow" + } + ] + }, + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "演唱会超清" + }, + { + "n": "A阿杜", + "v": "阿杜演唱会超清" + }, + { + "n": "A阿黛尔", + "v": "阿黛尔演唱会超清" + }, + { + "n": "BBeyond", + "v": "Beyond演唱会超清" + }, + { + "n": "BBy2", + "v": "By2演唱会超清" + }, + { + "n": "BBIGBANG", + "v": "BIGBANG演唱会超清" + }, + { + "n": "B布兰妮", + "v": "布兰妮演唱会超清" + }, + { + "n": "B坂井泉水", + "v": "坂井泉水演唱会超清" + }, + { + "n": "C陈奕迅", + "v": "陈奕迅演唱会超清" + }, + { + "n": "C蔡依林", + "v": "蔡依林演唱会超清" + }, + { + "n": "C初音未来", + "v": "初音未来演唱会超清" + }, + { + "n": "C蔡健雅", + "v": "蔡健雅演唱会超清" + }, + { + "n": "C陈小春", + "v": "陈小春演唱会超清" + }, + { + "n": "C草蜢", + "v": "草蜢演唱会超清" + }, + { + "n": "C陈慧娴", + "v": "陈慧娴演唱会超清" + }, + { + "n": "C崔健", + "v": "崔健演唱会超清" + }, + { + "n": "C仓木麻衣", + "v": "仓木麻衣演唱会超清" + }, + { + "n": "D戴荃", + "v": "戴荃演唱会超清" + }, + { + "n": "D动力火车", + "v": "动力火车演唱会超清" + }, + { + "n": "D邓丽君", + "v": "邓丽君演唱会超清" + }, + { + "n": "D丁当", + "v": "丁当演唱会超清" + }, + { + "n": "D刀郎", + "v": "刀郎演唱会超清" + }, + { + "n": "D邓紫棋", + "v": "邓紫棋演唱会超清" + }, + { + "n": "D戴佩妮", + "v": "戴佩妮演唱会超清" + }, + { + "n": "D邓丽君", + "v": "邓丽君演唱会超清" + }, + { + "n": "F飞儿乐队", + "v": "飞儿乐队演唱会超清" + }, + { + "n": "F费玉清", + "v": "费玉清演唱会超清" + }, + { + "n": "F费翔", + "v": "费翔演唱会超清" + }, + { + "n": "F方大同", + "v": "方大同演唱会超清" + }, + { + "n": "F房东的猫", + "v": "房东的猫演唱会超清" + }, + { + "n": "F凤飞飞", + "v": "凤飞飞演唱会超清" + }, + { + "n": "F凤凰传奇", + "v": "凤凰传奇演唱会超清" + }, + { + "n": "G郭采洁", + "v": "郭采洁演唱会超清" + }, + { + "n": "G光良", + "v": "光良演唱会超清" + }, + { + "n": "G郭静", + "v": "郭静演唱会超清" + }, + { + "n": "G郭富城", + "v": "郭富城演唱会超清" + }, + { + "n": "H胡彦斌", + "v": "胡彦斌演唱会超清" + }, + { + "n": "H胡夏", + "v": "胡夏演唱会超清" + }, + { + "n": "H韩红", + "v": "韩红演唱会超清" + }, + { + "n": "H黄品源", + "v": "黄品源演唱会超清" + }, + { + "n": "H黄小琥", + "v": "黄小琥演唱会超清" + }, + { + "n": "H花儿乐队", + "v": "花儿乐队演唱会超清" + }, + { + "n": "H黄家强", + "v": "黄家强演唱会超清" + }, + { + "n": "H后街男孩", + "v": "后街男孩演唱会超清" + }, + { + "n": "J经典老歌", + "v": "经典老歌演唱会超清" + }, + { + "n": "J贾斯丁比伯", + "v": "贾斯丁比伯演唱会超清" + }, + { + "n": "J金池", + "v": "金池演唱会超清" + }, + { + "n": "J金志文", + "v": "金志文演唱会超清" + }, + { + "n": "J焦迈奇", + "v": "焦迈奇演唱会超清" + }, + { + "n": "K筷子兄弟", + "v": "筷子兄弟演唱会超清" + }, + { + "n": "L李玟", + "v": "李玟演唱会超清" + }, + { + "n": "L林忆莲", + "v": "林忆莲演唱会超清" + }, + { + "n": "L李克勤", + "v": "李克勤演唱会超清" + }, + { + "n": "L刘宪华", + "v": "刘宪华演唱会超清" + }, + { + "n": "L李圣杰", + "v": "李圣杰演唱会超清" + }, + { + "n": "L林宥嘉", + "v": "林宥嘉演唱会超清" + }, + { + "n": "L梁静茹", + "v": "梁静茹演唱会超清" + }, + { + "n": "L李健", + "v": "李健演唱会超清" + }, + { + "n": "L林俊杰", + "v": "林俊杰演唱会超清" + }, + { + "n": "L李玉刚", + "v": "李玉刚演唱会超清" + }, + { + "n": "L林志炫", + "v": "林志炫演唱会超清" + }, + { + "n": "L李荣浩", + "v": "李荣浩演唱会超清" + }, + { + "n": "L李宇春", + "v": "李宇春演唱会超清" + }, + { + "n": "L洛天依", + "v": "洛天依演唱会超清" + }, + { + "n": "L林子祥", + "v": "林子祥演唱会超清" + }, + { + "n": "L李宗盛", + "v": "李宗盛演唱会超清" + }, + { + "n": "L黎明", + "v": "黎明演唱会超清" + }, + { + "n": "L刘德华", + "v": "刘德华演唱会超清" + }, + { + "n": "L罗大佑", + "v": "罗大佑演唱会超清" + }, + { + "n": "L林肯公园", + "v": "林肯公园演唱会超清" + }, + { + "n": "LLadyGaga", + "v": "LadyGaga演唱会超清" + }, + { + "n": "L旅行团乐队", + "v": "旅行团乐队演唱会超清" + }, + { + "n": "M莫文蔚", + "v": "莫文蔚演唱会超清" + }, + { + "n": "M毛不易", + "v": "毛不易演唱会超清" + }, + { + "n": "M梅艳芳", + "v": "梅艳芳演唱会超清" + }, + { + "n": "M迈克尔杰克逊", + "v": "迈克尔杰克逊演唱会超清" + }, + { + "n": "N南拳妈妈", + "v": "南拳妈妈演唱会超清" + }, + { + "n": "P朴树", + "v": "朴树演唱会超清" + }, + { + "n": "Q齐秦", + "v": "齐秦演唱会超清" + }, + { + "n": "Q青鸟飞鱼", + "v": "青鸟飞鱼演唱会超清" + }, + { + "n": "R容祖儿", + "v": "容祖儿演唱会超清" + }, + { + "n": "R任贤齐", + "v": "任贤齐演唱会超清" + }, + { + "n": "S水木年华", + "v": "水木年华演唱会超清" + }, + { + "n": "S孙燕姿", + "v": "孙燕姿演唱会超清" + }, + { + "n": "S苏打绿", + "v": "苏打绿演唱会超清" + }, + { + "n": "SSHE", + "v": "SHE演唱会超清" + }, + { + "n": "S孙楠", + "v": "孙楠演唱会超清" + }, + { + "n": "T陶喆", + "v": "陶喆演唱会超清" + }, + { + "n": "T谭咏麟", + "v": "谭咏麟演唱会超清" + }, + { + "n": "T田馥甄", + "v": "田馥甄演唱会超清" + }, + { + "n": "T谭维维", + "v": "谭维维演唱会超清" + }, + { + "n": "T逃跑计划", + "v": "逃跑计划演唱会超清" + }, + { + "n": "T田震", + "v": "田震演唱会超清" + }, + { + "n": "T谭晶", + "v": "谭晶演唱会超清" + }, + { + "n": "T屠洪刚", + "v": "屠洪刚演唱会超清" + }, + { + "n": "T泰勒·斯威夫特", + "v": "泰勒·斯威夫特演唱会超清" + }, + { + "n": "W王力宏", + "v": "王力宏演唱会超清" + }, + { + "n": "W王杰", + "v": "王杰演唱会超清" + }, + { + "n": "W吴克群", + "v": "吴克群演唱会超清" + }, + { + "n": "W王心凌", + "v": "王心凌演唱会超清" + }, + { + "n": "W王靖雯", + "v": "好声音王靖雯演唱会超清" + }, + { + "n": "W汪峰", + "v": "汪峰演唱会超清" + }, + { + "n": "W伍佰", + "v": "伍佰演唱会超清" + }, + { + "n": "W王菲", + "v": "王菲演唱会超清" + }, + { + "n": "W五月天", + "v": "五月天演唱会超清" + }, + { + "n": "W汪苏泷", + "v": "汪苏泷演唱会超清" + }, + { + "n": "X徐佳莹", + "v": "徐佳莹演唱会超清" + }, + { + "n": "X弦子", + "v": "弦子演唱会超清" + }, + { + "n": "X萧亚轩", + "v": "萧亚轩演唱会超清" + }, + { + "n": "X许巍", + "v": "许巍演唱会超清" + }, + { + "n": "X薛之谦", + "v": "薛之谦演唱会超清" + }, + { + "n": "X许嵩", + "v": "许嵩演唱会超清" + }, + { + "n": "X小虎队", + "v": "小虎队演唱会超清" + }, + { + "n": "X萧敬腾", + "v": "萧敬腾演唱会超清" + }, + { + "n": "X谢霆锋", + "v": "谢霆锋演唱会超清" + }, + { + "n": "X徐小凤", + "v": "徐小凤演唱会超清" + }, + { + "n": "X信乐队", + "v": "信乐队演唱会超清" + }, + { + "n": "Y夜愿乐队", + "v": "夜愿乐队演唱会超清" + }, + { + "n": "Y羽泉", + "v": "羽泉演唱会超清" + }, + { + "n": "Y郁可唯", + "v": "郁可唯演唱会超清" + }, + { + "n": "Y叶倩文", + "v": "叶倩文演唱会超清" + }, + { + "n": "Y杨坤", + "v": "杨坤演唱会超清" + }, + { + "n": "Y庾澄庆", + "v": "庾澄庆演唱会超清" + }, + { + "n": "Y尤长靖", + "v": "尤长靖演唱会超清" + }, + { + "n": "Y易烊千玺", + "v": "易烊千玺演唱会超清" + }, + { + "n": "Y袁娅维", + "v": "袁娅维演唱会超清" + }, + { + "n": "Y杨丞琳", + "v": "杨丞琳演唱会超清" + }, + { + "n": "Y杨千嬅", + "v": "杨千嬅演唱会超清" + }, + { + "n": "Y杨宗纬", + "v": "杨宗纬演唱会超清" + }, + { + "n": "Z郑秀文", + "v": "郑秀文演唱会超清" + }, + { + "n": "Z周杰伦", + "v": "周杰伦演唱会超清" + }, + { + "n": "Z张学友", + "v": "张学友演唱会超清" + }, + { + "n": "Z张信哲", + "v": "张信哲演唱会超清" + }, + { + "n": "Z张宇", + "v": "张宇演唱会超清" + }, + { + "n": "Z周华健", + "v": "周华健演唱会超清" + }, + { + "n": "Z张韶涵", + "v": "张韶涵演唱会超清" + }, + { + "n": "Z周深", + "v": "周深演唱会超清" + }, + { + "n": "Z纵贯线", + "v": "纵贯线演唱会超清" + }, + { + "n": "Z赵雷", + "v": "赵雷演唱会超清" + }, + { + "n": "Z周传雄", + "v": "周传雄演唱会超清" + }, + { + "n": "Z张国荣", + "v": "张国荣演唱会超清" + }, + { + "n": "Z周慧敏", + "v": "周慧敏演唱会超清" + }, + { + "n": "Z张惠妹", + "v": "张惠妹演唱会超清" + }, + { + "n": "Z周笔畅", + "v": "周笔畅演唱会超清" + }, + { + "n": "Z郑中基", + "v": "郑中基演唱会超清" + }, + { + "n": "Z张艺兴", + "v": "张艺兴演唱会超清" + }, + { + "n": "Z张震岳", + "v": "张震岳演唱会超清" + }, + { + "n": "Z张雨生", + "v": "张雨生演唱会超清" + }, + { + "n": "Z郑智化", + "v": "郑智化演唱会超清" + }, + { + "n": "Z卓依婷", + "v": "卓依婷演唱会超清" + }, + { + "n": "Z中岛美雪", + "v": "中岛美雪演唱会超清" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/tianjitop/llllo4k/lib/BLZB.py b/tianjitop/llllo4k/lib/BLZB.py new file mode 100644 index 00000000..fbf2c77e --- /dev/null +++ b/tianjitop/llllo4k/lib/BLZB.py @@ -0,0 +1,314 @@ +# coding=utf-8 +# !/usr/bin/python + +""" + +作者 丢丢喵 🚓 内容均从互联网收集而来 仅供交流学习使用 版权归原创者所有 如侵犯了您的权益 请通知作者 将及时删除侵权内容 + ====================Diudiumiao==================== + +""" + +from Crypto.Util.Padding import unpad +from Crypto.Util.Padding import pad +from urllib.parse import unquote +from Crypto.Cipher import ARC4 +from urllib.parse import quote +from base.spider import Spider +from Crypto.Cipher import AES +from datetime import datetime +from bs4 import BeautifulSoup +from base64 import b64decode +import urllib.request +import urllib.parse +import datetime +import binascii +import requests +import base64 +import json +import time +import sys +import re +import os + +sys.path.append('..') + +xurl = "https://search.bilibili.com" + +xurl1 = "https://api.live.bilibili.com" + +headerx = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0' + } + +class Spider(Spider): + global xurl + global xurl1 + global headerx + + def getName(self): + return "首页" + + def init(self, extend): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def extract_middle_text(self, text, start_str, end_str, pl, start_index1: str = '', end_index2: str = ''): + if pl == 3: + plx = [] + while True: + start_index = text.find(start_str) + if start_index == -1: + break + end_index = text.find(end_str, start_index + len(start_str)) + if end_index == -1: + break + middle_text = text[start_index + len(start_str):end_index] + plx.append(middle_text) + text = text.replace(start_str + middle_text + end_str, '') + if len(plx) > 0: + purl = '' + for i in range(len(plx)): + matches = re.findall(start_index1, plx[i]) + output = "" + for match in matches: + match3 = re.search(r'(?:^|[^0-9])(\d+)(?:[^0-9]|$)', match[1]) + if match3: + number = match3.group(1) + else: + number = 0 + if 'http' not in match[0]: + output += f"#{match[1]}${number}{xurl}{match[0]}" + else: + output += f"#{match[1]}${number}{match[0]}" + output = output[1:] + purl = purl + output + "$$$" + purl = purl[:-3] + return purl + else: + return "" + else: + start_index = text.find(start_str) + if start_index == -1: + return "" + end_index = text.find(end_str, start_index + len(start_str)) + if end_index == -1: + return "" + + if pl == 0: + middle_text = text[start_index + len(start_str):end_index] + return middle_text.replace("\\", "") + + if pl == 1: + middle_text = text[start_index + len(start_str):end_index] + matches = re.findall(start_index1, middle_text) + if matches: + jg = ' '.join(matches) + return jg + + if pl == 2: + middle_text = text[start_index + len(start_str):end_index] + matches = re.findall(start_index1, middle_text) + if matches: + new_list = [f'{item}' for item in matches] + jg = '$$$'.join(new_list) + return jg + + def homeContent(self, filter): + result = {} + result = {"class": [{"type_id": "舞", "type_name": "舞蹈"}, + {"type_id": "音乐", "type_name": "音乐"}, + {"type_id": "手游", "type_name": "手游"}, + {"type_id": "网游", "type_name": "网游"}, + {"type_id": "单机游戏", "type_name": "单机游戏"}, + {"type_id": "虚拟主播", "type_name": "虚拟主播"}, + {"type_id": "电台", "type_name": "电台"}, + {"type_id": "体育", "type_name": "体育"}, + {"type_id": "聊天", "type_name": "聊天"}, + {"type_id": "娱乐", "type_name": "娱乐"}, + {"type_id": "电影", "type_name": "影视"}, + {"type_id": "新闻", "type_name": "新闻"}] + } + + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, cid, pg, filter, ext): + result = {} + videos = [] + + if pg: + page = int(pg) + else: + page = 1 + + url = f'{xurl}/live?keyword={cid}&page={str(page)}' + detail = requests.get(url=url, headers=headerx) + detail.encoding = "utf-8" + res = detail.text + doc = BeautifulSoup(res, "lxml") + + soups = doc.find_all('div', class_="video-list-item") + + for vod in soups: + + names = vod.find('h3', class_="bili-live-card__info--tit") + name = names.text.strip().replace('直播中', '') + + id = names.find('a')['href'] + id = self.extract_middle_text(id, 'bilibili.com/', '?', 0) + + pic = vod.find('img')['src'] + if 'http' not in pic: + pic = "https:" + pic + + remarks = vod.find('a', class_="bili-live-card__info--uname") + remark = remarks.text.strip() + + video = { + "vod_id": id, + "vod_name": name, + "vod_pic": pic, + "vod_remarks": remark + } + videos.append(video) + + result = {'list': videos} + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + did = ids[0] + result = {} + videos = [] + xianlu = '' + bofang = '' + + url = f'{xurl1}/xlive/web-room/v2/index/getRoomPlayInfo?room_id={did}&platform=web&protocol=0,1&format=0,1,2&codec=0,1' + detail = requests.get(url=url, headers=headerx) + detail.encoding = "utf-8" + data = detail.json() + + content = '欢迎观看哔哩直播' + + setup = data['data']['playurl_info']['playurl']['stream'] + + nam = 0 + + for vod in setup: + + try: + host = vod['format'][nam]['codec'][0]['url_info'][1]['host'] + except (KeyError, IndexError): + continue + + base = vod['format'][nam]['codec'][0]['base_url'] + + extra = vod['format'][nam]['codec'][0]['url_info'][1]['extra'] + + id = host + base + extra + + nam = nam + 1 + + namc = f"{nam}号线路" + + bofang = bofang + namc + '$' + id + '#' + + bofang = bofang[:-1] + + xianlu = '哔哩专线' + + videos.append({ + "vod_id": did, + "vod_content": content, + "vod_play_from": xianlu, + "vod_play_url": bofang + }) + + result['list'] = videos + return result + + def playerContent(self, flag, id, vipFlags): + + result = {} + result["parse"] = 0 + result["playUrl"] = '' + result["url"] = id + result["header"] = headerx + return result + + def searchContentPage(self, key, quick, pg): + result = {} + videos = [] + + if pg: + page = int(pg) + else: + page = 1 + + url = f'{xurl}/live?keyword={key}&page={str(page)}' + detail = requests.get(url=url, headers=headerx) + detail.encoding = "utf-8" + res = detail.text + doc = BeautifulSoup(res, "lxml") + + soups = doc.find_all('div', class_="video-list-item") + + for vod in soups: + + names = vod.find('h3', class_="bili-live-card__info--tit") + name = names.text.strip().replace('直播中', '') + + id = names.find('a')['href'] + id = self.extract_middle_text(id, 'bilibili.com/', '?', 0) + + pic = vod.find('img')['src'] + if 'http' not in pic: + pic = "https:" + pic + + remarks = vod.find('a', class_="bili-live-card__info--uname") + remark = remarks.text.strip() + + video = { + "vod_id": id, + "vod_name": name, + "vod_pic": pic, + "vod_remarks": remark + } + videos.append(video) + + result['list'] = videos + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def searchContent(self, key, quick, pg="1"): + return self.searchContentPage(key, quick, '1') + + def localProxy(self, params): + if params['type'] == "m3u8": + return self.proxyM3u8(params) + elif params['type'] == "media": + return self.proxyMedia(params) + elif params['type'] == "ts": + return self.proxyTs(params) + return None + + + + + + + + diff --git a/tianjitop/llllo4k/lib/CZKT.json b/tianjitop/llllo4k/lib/CZKT.json new file mode 100644 index 00000000..8e89f186 --- /dev/null +++ b/tianjitop/llllo4k/lib/CZKT.json @@ -0,0 +1,1398 @@ +{ + "class": [ + { + "type_name": "7年级语文", + "type_id": "7年级语文" + }, + { + "type_name": "7年级数学", + "type_id": "7年级数学" + }, + { + "type_name": "7年级英语", + "type_id": "7年级英语" + }, + { + "type_name": "7年级历史", + "type_id": "7年级历史" + }, + { + "type_name": "7年级地理", + "type_id": "7年级地理" + }, + { + "type_name": "7年级生物", + "type_id": "7年级生物" + }, + { + "type_name": "7年级物理", + "type_id": "7年级物理" + }, + { + "type_name": "7年级化学", + "type_id": "7年级化学" + }, + { + "type_name": "8年级语文", + "type_id": "8年级语文" + }, + { + "type_name": "8年级数学", + "type_id": "8年级数学" + }, + { + "type_name": "8年级英语", + "type_id": "8年级英语" + }, + { + "type_name": "8年级历史", + "type_id": "8年级历史" + }, + { + "type_name": "8年级地理", + "type_id": "8年级地理" + }, + { + "type_name": "8年级生物", + "type_id": "8年级生物" + }, + { + "type_name": "8年级物理", + "type_id": "8年级物理" + }, + { + "type_name": "8年级化学", + "type_id": "8年级化学" + }, + { + "type_name": "9年级语文", + "type_id": "9年级语文" + }, + { + "type_name": "9年级数学", + "type_id": "9年级数学" + }, + { + "type_name": "9年级英语", + "type_id": "9年级英语" + }, + { + "type_name": "9年级历史", + "type_id": "9年级历史" + }, + { + "type_name": "9年级地理", + "type_id": "9年级地理" + }, + { + "type_name": "9年级生物", + "type_id": "9年级生物" + }, + { + "type_name": "9年级物理", + "type_id": "9年级物理" + }, + { + "type_name": "9年级化学", + "type_id": "9年级化学" + } + ], + "filters": { + "7年级语文": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版7年级语文" + }, + { + "n": "人教版", + "v": "人教版7年级语文" + }, + { + "n": "北师大版", + "v": "北师大版7年级语文" + }, + { + "n": "苏教版", + "v": "苏教版7年级语文" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "7年级英语": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版7年级英语" + }, + { + "n": "人教版", + "v": "人教版7年级英语" + }, + { + "n": "北师大版", + "v": "北师大版7年级英语" + }, + { + "n": "苏教版", + "v": "苏教版7年级英语" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "7年级数学": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版7年级数学" + }, + { + "n": "人教版", + "v": "人教版7年级数学" + }, + { + "n": "北师大版", + "v": "北师大版7年级数学" + }, + { + "n": "苏教版", + "v": "苏教版7年级数学" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "7年级化学": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版7年级化学" + }, + { + "n": "人教版", + "v": "人教版7年级化学" + }, + { + "n": "北师大版", + "v": "北师大版7年级化学" + }, + { + "n": "苏教版", + "v": "苏教版7年级化学" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "7年级物理": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版7年级物理" + }, + { + "n": "人教版", + "v": "人教版7年级物理" + }, + { + "n": "北师大版", + "v": "北师大版7年级物理" + }, + { + "n": "苏教版", + "v": "苏教版7年级物理" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "7年级生物": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版7年级生物" + }, + { + "n": "人教版", + "v": "人教版7年级生物" + }, + { + "n": "北师大版", + "v": "北师大版7年级生物" + }, + { + "n": "苏教版", + "v": "苏教版7年级生物" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "7年级历史": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版7年级历史" + }, + { + "n": "人教版", + "v": "人教版7年级历史" + }, + { + "n": "北师大版", + "v": "北师大版7年级历史" + }, + { + "n": "苏教版", + "v": "苏教版7年级历史" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "7年级地理": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版7年级地理" + }, + { + "n": "人教版", + "v": "人教版7年级地理" + }, + { + "n": "北师大版", + "v": "北师大版7年级地理" + }, + { + "n": "苏教版", + "v": "苏教版7年级地理" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "8年级语文": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版8年级语文" + }, + { + "n": "人教版", + "v": "人教版8年级语文" + }, + { + "n": "北师大版", + "v": "北师大版8年级语文" + }, + { + "n": "苏教版", + "v": "苏教版8年级语文" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "8年级英语": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版8年级英语" + }, + { + "n": "人教版", + "v": "人教版8年级英语" + }, + { + "n": "北师大版", + "v": "北师大版8年级英语" + }, + { + "n": "苏教版", + "v": "苏教版8年级英语" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "8年级数学": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版8年级数学" + }, + { + "n": "人教版", + "v": "人教版8年级数学" + }, + { + "n": "北师大版", + "v": "北师大版8年级数学" + }, + { + "n": "苏教版", + "v": "苏教版8年级数学" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "8年级化学": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版8年级化学" + }, + { + "n": "人教版", + "v": "人教版8年级化学" + }, + { + "n": "北师大版", + "v": "北师大版8年级化学" + }, + { + "n": "苏教版", + "v": "苏教版8年级化学" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "8年级物理": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版8年级物理" + }, + { + "n": "人教版", + "v": "人教版8年级物理" + }, + { + "n": "北师大版", + "v": "北师大版8年级物理" + }, + { + "n": "苏教版", + "v": "苏教版8年级物理" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "8年级生物": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版8年级生物" + }, + { + "n": "人教版", + "v": "人教版8年级生物" + }, + { + "n": "北师大版", + "v": "北师大版8年级生物" + }, + { + "n": "苏教版", + "v": "苏教版8年级生物" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "8年级历史": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版8年级历史" + }, + { + "n": "人教版", + "v": "人教版8年级历史" + }, + { + "n": "北师大版", + "v": "北师大版8年级历史" + }, + { + "n": "苏教版", + "v": "苏教版8年级历史" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "8年级地理": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版8年级地理" + }, + { + "n": "人教版", + "v": "人教版8年级地理" + }, + { + "n": "北师大版", + "v": "北师大版8年级地理" + }, + { + "n": "苏教版", + "v": "苏教版8年级地理" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "9年级语文": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版9年级语文" + }, + { + "n": "人教版", + "v": "人教版9年级语文" + }, + { + "n": "北师大版", + "v": "北师大版9年级语文" + }, + { + "n": "苏教版", + "v": "苏教版9年级语文" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "9年级英语": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版9年级英语" + }, + { + "n": "人教版", + "v": "人教版9年级英语" + }, + { + "n": "北师大版", + "v": "北师大版9年级英语" + }, + { + "n": "苏教版", + "v": "苏教版9年级英语" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "9年级数学": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版9年级数学" + }, + { + "n": "人教版", + "v": "人教版9年级数学" + }, + { + "n": "北师大版", + "v": "北师大版9年级数学" + }, + { + "n": "苏教版", + "v": "苏教版9年级数学" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "9年级化学": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版9年级化学" + }, + { + "n": "人教版", + "v": "人教版9年级化学" + }, + { + "n": "北师大版", + "v": "北师大版9年级化学" + }, + { + "n": "苏教版", + "v": "苏教版9年级化学" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "9年级物理": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版9年级物理" + }, + { + "n": "人教版", + "v": "人教版9年级物理" + }, + { + "n": "北师大版", + "v": "北师大版9年级物理" + }, + { + "n": "苏教版", + "v": "苏教版9年级物理" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "9年级生物": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版9年级生物" + }, + { + "n": "人教版", + "v": "人教版9年级生物" + }, + { + "n": "北师大版", + "v": "北师大版9年级生物" + }, + { + "n": "苏教版", + "v": "苏教版9年级生物" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "9年级历史": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版9年级历史" + }, + { + "n": "人教版", + "v": "人教版9年级历史" + }, + { + "n": "北师大版", + "v": "北师大版9年级历史" + }, + { + "n": "苏教版", + "v": "苏教版9年级历史" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "9年级地理": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版9年级地理" + }, + { + "n": "人教版", + "v": "人教版9年级地理" + }, + { + "n": "北师大版", + "v": "北师大版9年级地理" + }, + { + "n": "苏教版", + "v": "苏教版9年级地理" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/tianjitop/llllo4k/lib/DLXFS.json b/tianjitop/llllo4k/lib/DLXFS.json new file mode 100644 index 00000000..66177661 --- /dev/null +++ b/tianjitop/llllo4k/lib/DLXFS.json @@ -0,0 +1,18 @@ +{ + "请求头": "User-Agent$MOBILE_UA", + "编码": "UTF-8", + "主页url": "https://dora.xiaoxinbk.com/", + "数组": "class=\"card-img-bili\"&&</a>", + "标题": "alt=\"&&\"", + "图片": "data-url=\"&&\"", + "链接": "href=\"&&\"", + "线路标题": "mt-0\">&&</h3>", + "播放数组": "class=\"card-body button-list\"&&</div>", + "播放列表": "<a&&a>", + "播放链接": "href=\"&&\"", + "播放标题": ">&&</", + "分类url": "https://www.dora-video.cn/search/sy/?niandai={year}&cat={class}&tag={cateId}&gaojijiansuo=1&zhuangtai={by}", + "分类": "全部$0#动画$20#剧场版$21#MV$22#预告片$23#直播$27#同人$25#民间$26#目录$28#中篇$30", + "剧情": "哆啦A梦新番$1#新哆啦A梦 台湾配音$2#哆啦A梦剧场版$3#最新预告片$6#剧场版集合$7#哆啦A梦MV$4#哆啦A梦七小子集合$11#生日特别篇$19#哆啦A梦生日特别篇$12#哆啦美生日特别篇$14#大雄生日特别篇$13#静香生日特别篇$15#胖虎生日特别篇$16#小夫生日特别篇$17#24小时直播$24#哆啦A梦中篇附映$29#哆啦A梦大山版 - 哆啦a梦1979版国语旧版 - 旧版$31#哆啦A梦大山修复&补档区$32#藤子·F·不二雄【其它动画】$33", + "排序": "全部$0#完结$2#连载$1#待定$-1" +} \ No newline at end of file diff --git a/tianjitop/llllo4k/lib/DYG.json b/tianjitop/llllo4k/lib/DYG.json new file mode 100644 index 00000000..85fda74f --- /dev/null +++ b/tianjitop/llllo4k/lib/DYG.json @@ -0,0 +1,131 @@ +//写法思路来海阔视界,xpath筛选。本人是海阔用户,所以搬了海阔的jsoup写法过来。2022年9月17日 +//jsoup规则写法请查阅海阔视界或者海阔影视相关教程。不支持js写法 +//本文档为完整模板,请不要去无中生有添加多余的键值参数。 +{ + //规则名 + "title": "电影港", + //作者 + "author": "香雅情", + //请求头UA,键名$键值,每一组用#分开,不填则默认okhttp/3.12.11,可填MOBILE_UA或PC_UA使用内置的手机版或电脑版UA + //多个请求头参数写法示例,"User-Agent$PC_UA#Referer$http://ww.baidu.com#Cookie$ser=ok",每一组用#分开。 + //习惯查看手机源码写建议用手机版UA,习惯查看PC版源码写建议用电脑版UA + "Headers":"PC_UA", + //网页编码格式默认UTF-8编码,UTF-8,GBK,GB2312 + "Coding_format":"gb2312", + //图片是否需要代理 + "PicNeedProxy":"0", + //是否开启获取首页数据,0关闭,1开启 + "homeContent":"0", + //分类链接起始页码,禁止负数和含小数点。 + "firstpage": "1", + //分类链接,{cateId}是分类,{catePg}是页码,第一页没有页码的可以这样写 第二页链接[firstPage=第一页的链接] + "class_url": "https://www.dygang.tv/{cateId}/index_{catePg}.htm[firstPage=https://www.dygang.cc/{cateId}/index.htm]", + //分类名,分类1&分类2&分类3 + "class_name": "最新电影&经典高清&国配电影&经典港片&国剧&日韩剧&美剧&综艺&动漫&纪录片&高清原盘&4K高清区&3D电影&电影专题", + //分类名替换词,替换词1&替换词2&替换词3,替换词包含英文&的用两个中文&&代替,示例:&&id=0&&&id=1 + "class_value": "ys&bd&gy&gp&dsj&dsj1&yx&zy&dmq&jilupian&1080p&4K&3d&dyzt", + //筛选数据,json格式,参考xpath的筛选写法 + "filterdata":{}, + + //分类页面截取数据模式,0为json,其它数字为普通网页。 + "cat_mode": "1", + //分类列表数组定位,最多支持3层,能力有限,不是所有页面都能支持 + "cat_arr_rule": "body&&table[width=388]", + //分类片单信息jsoup与xb截取写法切换,只作用于html网页,1为jsoup写法(默认),0为xb写法 + "cat_is_jsoup":"1", + //分类片单标题 + "cat_title": "img&&alt", + //分类片单链接 + "cat_url": "a&&href", + //分类片单图片,支持自定义图片链接 + "cat_pic": "img&&src", + //分类片单副标题 + "cat_subtitle":"[align=center]&&Text", + //分类片单链接补前缀 + "cat_prefix": "https://www.dygang.tv", + //分类片单链接补后缀 + "cat_suffix": "", + + //搜索请求头参数,不填则默认okhttp/3.12.11,可填MOBILE_UA或PC_UA使用内置的手机版或电脑版UA + //多个请求头参数写法示例,键名$键值,每一组用#分开。"User-Agent$PC_UA#Referer$http://ww.baidu.com#Cookie$ser=ok"。 + "SHeaders":"User-Agent$PC_UA#Content-Type$charset=gb2312", + //搜索链接,搜索关键字用{wd}表示,post请求的最后面加;post + //POST链接示例 http://www.lezhutv.com/index.php?m=vod-search;post + "search_url": "https://www.dygang.tv/e/search/index123.php;post", + //POST搜索body,填写搜索关键字的键值,一般常见的是searchword和wd,不是POST搜索的可留空或删除。 + "sea_PtBody":"keyboard={wd}&submit=搜+索&show=title,smalltext&tempid=1&tbname=article", + + //搜索截取模式,0为json搜索,只支持列表在list数组里的,其它数字为网页截取。 + "search_mode": "1", + //搜索列表数组定位,不填默认内置list,最多支持3层,能力有限,不是所有页面都能支持。 + "sea_arr_rule": "body&&table[width=388]", + //搜索片单信息jsoup与xb截取写法切换,只作用于html网页,1为jsoup写法(默认),0为xb写法 + "sea_is_jsoup":"1", + //搜索片单图片,支持自定义图片链接 + "sea_pic": "img&&src", + //搜索片单标题 + "sea_title": "img&&alt", + //搜索片单链接 + "sea_url": "a&&href", + //搜索片单副标题 + "sea_subtitle":"", + //搜索片单链接补前缀 + "search_prefix": "https://www.dygang.tv", + //搜索片单链接补后缀,这个一般json搜索的需要 + "search_suffix": "", + + //片单链接是否直接播放,0否,1分类片单链接直接播放,2详情选集链接直接播放。 + //设置成直接播放后,后面3个参数请注意该留空的请务必留空。 + "force_play": "0", + //直接播放链接补前缀 + "play_prefix": "", + //直接播放链接补后缀,设置为#isVideo=true#可强制识别为视频链接 + "play_suffix": "", + //直接播放链接设置请求头,只对直链视频有效,每一组用#分开 + "play_header": "", + + //项目信息jsoup与xb截取写法切换,1为jsoup写法(默认),0为xb写法 + "proj_is_jsoup":"0", + //类型数据,截取前缀&&截取后缀 + "proj_cate": "", + //年代数据,截取前缀&&截取后缀 + "proj_year": "", + //地区数据,截取前缀&&截取后缀 + "proj_area": "", + //演员数据,截取前缀&&截取后缀 + "proj_actor": "演  员&&</", + //简介内容,截取前缀&&截取后缀 + "proj_plot": "简  介&&</", + + //线路截取区域,如果不需要请把tab_title或tab_arr_rule置空或者全部不要填。 + //线路截取数组 + "tab_arr_rule": "#dede_content", + //线路标题,截取前缀&&截取后缀 + "tab_title": "strong&&Text", + + //列表数组截取,必须 + "list_arr_rule": "#dede_content", + //集数数组截取,必须 + "epi_arr_rule": "table&&[href*=magnet]", + //集数标题,截取前缀&&截取后缀 + "epi_title": "a&&Text", + //集数链接,截取前缀&&截取后缀 + "epi_url": "a&&href", + //选集是否反转显示 + "epi_reverse": "0", + //集数链接补前缀 + "epiurl_prefix": "", + //集数链接补后缀 + "epiurl_suffix": "", + + //下面几个参数请勿乱用。否则可能会有副作用。 + //分析网页源码中有<script type="text/javascript">var player_aaaa={"flag":"play","encrypt这种源码的链接解析 + //如果网页源码里没有这种请设置为0 + "Anal_MacPlayer":"0", + //是否开启手动嗅探,只对网页嗅探有效,0否,1是 + "ManualSniffer":"0", + //手动嗅探视频链接关键字,每个用#隔开 + "VideoFormat":".mp4#.m3u8#.flv", + //手动嗅探视频链接过滤关键词,每个用#隔开 + "VideoFilter":".html#=http" +} \ No newline at end of file diff --git a/tianjitop/llllo4k/lib/GZKT.json b/tianjitop/llllo4k/lib/GZKT.json new file mode 100644 index 00000000..ea8a3e08 --- /dev/null +++ b/tianjitop/llllo4k/lib/GZKT.json @@ -0,0 +1,1576 @@ +{ + "class": [ + { + "type_name": "高一语文", + "type_id": "高一语文" + }, + { + "type_name": "高一数学", + "type_id": "高一数学" + }, + { + "type_name": "高一英语", + "type_id": "高一英语" + }, + { + "type_name": "高一历史", + "type_id": "高一历史" + }, + { + "type_name": "高一地理", + "type_id": "高一地理" + }, + { + "type_name": "高一生物", + "type_id": "高一生物" + }, + { + "type_name": "高一思想政治", + "type_id": "高一思想政治" + }, + { + "type_name": "高一物理", + "type_id": "高一物理" + }, + { + "type_name": "高一化学", + "type_id": "高一化学" + }, + { + "type_name": "高二语文", + "type_id": "高二语文" + }, + { + "type_name": "高二数学", + "type_id": "高二数学" + }, + { + "type_name": "高二英语", + "type_id": "高二英语" + }, + { + "type_name": "高二历史", + "type_id": "高二历史" + }, + { + "type_name": "高二地理", + "type_id": "高二地理" + }, + { + "type_name": "高二生物", + "type_id": "高二生物" + }, + { + "type_name": "高二思想政治", + "type_id": "高二思想政治" + }, + { + "type_name": "高二物理", + "type_id": "高二物理" + }, + { + "type_name": "高二化学", + "type_id": "高二化学" + }, + { + "type_name": "高三语文", + "type_id": "高三语文" + }, + { + "type_name": "高三数学", + "type_id": "高三数学" + }, + { + "type_name": "高三英语", + "type_id": "高三英语" + }, + { + "type_name": "高三历史", + "type_id": "高三历史" + }, + { + "type_name": "高三地理", + "type_id": "高三地理" + }, + { + "type_name": "高三生物", + "type_id": "高三生物" + }, + { + "type_name": "高三思想政治", + "type_id": "高三思想政治" + }, + { + "type_name": "高三物理", + "type_id": "高三物理" + }, + { + "type_name": "高三化学", + "type_id": "高三化学" + }, + { + "type_name": "高中信息技术", + "type_id": "高中信息技术" + } + ], + "filters": { + "高一语文": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版高一语文" + }, + { + "n": "人教版", + "v": "人教版高一语文" + }, + { + "n": "北师大版", + "v": "北师大版高一语文" + }, + { + "n": "苏教版", + "v": "苏教版高一语文" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "高一英语": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版高一英语" + }, + { + "n": "人教版", + "v": "人教版高一英语" + }, + { + "n": "北师大版", + "v": "北师大版高一英语" + }, + { + "n": "苏教版", + "v": "苏教版高一英语" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "高一数学": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版高一数学" + }, + { + "n": "人教版", + "v": "人教版高一数学" + }, + { + "n": "北师大版", + "v": "北师大版高一数学" + }, + { + "n": "苏教版", + "v": "苏教版高一数学" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "高一物理": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版高一物理" + }, + { + "n": "人教版", + "v": "人教版高一物理" + }, + { + "n": "北师大版", + "v": "北师大版高一物理" + }, + { + "n": "苏教版", + "v": "苏教版高一物理" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "高一化学": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版高一化学" + }, + { + "n": "人教版", + "v": "人教版高一化学" + }, + { + "n": "北师大版", + "v": "北师大版高一化学" + }, + { + "n": "苏教版", + "v": "苏教版高一化学" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "高一历史": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版高一历史" + }, + { + "n": "人教版", + "v": "人教版高一历史" + }, + { + "n": "北师大版", + "v": "北师大版高一历史" + }, + { + "n": "苏教版", + "v": "苏教版高一历史" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "高一生物": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版高一生物" + }, + { + "n": "人教版", + "v": "人教版高一生物" + }, + { + "n": "北师大版", + "v": "北师大版高一生物" + }, + { + "n": "苏教版", + "v": "苏教版高一生物" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "高一思想政治": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版高一思想政治" + }, + { + "n": "人教版", + "v": "人教版高一思想政治" + }, + { + "n": "北师大版", + "v": "北师大版高一思想政治" + }, + { + "n": "苏教版", + "v": "苏教版高一思想政治" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "高一地理": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版高一地理" + }, + { + "n": "人教版", + "v": "人教版高一地理" + }, + { + "n": "北师大版", + "v": "北师大版高一地理" + }, + { + "n": "苏教版", + "v": "苏教版高一地理" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "高二语文": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版高二语文" + }, + { + "n": "人教版", + "v": "人教版高二语文" + }, + { + "n": "北师大版", + "v": "北师大版高二语文" + }, + { + "n": "苏教版", + "v": "苏教版高二语文" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "高二英语": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版高二英语" + }, + { + "n": "人教版", + "v": "人教版高二英语" + }, + { + "n": "北师大版", + "v": "北师大版高二英语" + }, + { + "n": "苏教版", + "v": "苏教版高二英语" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "高二数学": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版高二数学" + }, + { + "n": "人教版", + "v": "人教版高二数学" + }, + { + "n": "北师大版", + "v": "北师大版高二数学" + }, + { + "n": "苏教版", + "v": "苏教版高二数学" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "高二物理": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版高二物理" + }, + { + "n": "人教版", + "v": "人教版高二物理" + }, + { + "n": "北师大版", + "v": "北师大版高二物理" + }, + { + "n": "苏教版", + "v": "苏教版高二物理" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "高二化学": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版高二化学" + }, + { + "n": "人教版", + "v": "人教版高二化学" + }, + { + "n": "北师大版", + "v": "北师大版高二化学" + }, + { + "n": "苏教版", + "v": "苏教版高二化学" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "高二历史": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版高二历史" + }, + { + "n": "人教版", + "v": "人教版高二历史" + }, + { + "n": "北师大版", + "v": "北师大版高二历史" + }, + { + "n": "苏教版", + "v": "苏教版高二历史" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "高二生物": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版高二生物" + }, + { + "n": "人教版", + "v": "人教版高二生物" + }, + { + "n": "北师大版", + "v": "北师大版高二生物" + }, + { + "n": "苏教版", + "v": "苏教版高二生物" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "高二思想政治": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版高二思想政治" + }, + { + "n": "人教版", + "v": "人教版高二思想政治" + }, + { + "n": "北师大版", + "v": "北师大版高二思想政治" + }, + { + "n": "苏教版", + "v": "苏教版高二思想政治" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "高二地理": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版高二地理" + }, + { + "n": "人教版", + "v": "人教版高二地理" + }, + { + "n": "北师大版", + "v": "北师大版高二地理" + }, + { + "n": "苏教版", + "v": "苏教版高二地理" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "高三语文": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版高三语文" + }, + { + "n": "人教版", + "v": "人教版高三语文" + }, + { + "n": "北师大版", + "v": "北师大版高三语文" + }, + { + "n": "苏教版", + "v": "苏教版高三语文" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "高三英语": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版高三英语" + }, + { + "n": "人教版", + "v": "人教版高三英语" + }, + { + "n": "北师大版", + "v": "北师大版高三英语" + }, + { + "n": "苏教版", + "v": "苏教版高三英语" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "高三数学": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版高三数学" + }, + { + "n": "人教版", + "v": "人教版高三数学" + }, + { + "n": "北师大版", + "v": "北师大版高三数学" + }, + { + "n": "苏教版", + "v": "苏教版高三数学" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "高三物理": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版高三物理" + }, + { + "n": "人教版", + "v": "人教版高三物理" + }, + { + "n": "北师大版", + "v": "北师大版高三物理" + }, + { + "n": "苏教版", + "v": "苏教版高三物理" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "高三化学": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版高三化学" + }, + { + "n": "人教版", + "v": "人教版高三化学" + }, + { + "n": "北师大版", + "v": "北师大版高三化学" + }, + { + "n": "苏教版", + "v": "苏教版高三化学" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "高三历史": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版高三历史" + }, + { + "n": "人教版", + "v": "人教版高三历史" + }, + { + "n": "北师大版", + "v": "北师大版高三历史" + }, + { + "n": "苏教版", + "v": "苏教版高三历史" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "高三生物": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版高三生物" + }, + { + "n": "人教版", + "v": "人教版高三生物" + }, + { + "n": "北师大版", + "v": "北师大版高三生物" + }, + { + "n": "苏教版", + "v": "苏教版高三生物" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "高三思想政治": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版高三思想政治" + }, + { + "n": "人教版", + "v": "人教版高三思想政治" + }, + { + "n": "北师大版", + "v": "北师大版高三思想政治" + }, + { + "n": "苏教版", + "v": "苏教版高三思想政治" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "高三地理": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版高三地理" + }, + { + "n": "人教版", + "v": "人教版高三地理" + }, + { + "n": "北师大版", + "v": "北师大版高三地理" + }, + { + "n": "苏教版", + "v": "苏教版高三地理" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/tianjitop/llllo4k/lib/HZDM.js b/tianjitop/llllo4k/lib/HZDM.js new file mode 100644 index 00000000..8c60a4d1 --- /dev/null +++ b/tianjitop/llllo4k/lib/HZDM.js @@ -0,0 +1,979 @@ +var rule = { + title: '花子动漫[漫]', + host: 'https://www.huazidm.com', + class_name: 'TV动漫&剧场&特摄', + class_url: '1&2&3', + searchUrl: '/index.php/ajax/suggest?mid=1&wd=**&limit=50', + searchUrl: '/vodsearch/**----------fypage---.html', + searchable: 2, + quickSearch: 0, + headers: { + 'User-Agent': 'MOBILE_UA', + }, + url: '/index.php/api/vod#type=fyclassfyfilter&page=fypage', + filterable: 0, + filter_url: '&class={{fl.class}}&year={{fl.year}}&letter={{fl.letter}}&by={{fl.by}}', + filter: { + "1": [{ + "key": "class", + "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": "冒险" + }, { + "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": "2026", + "v": "2026" + }, { + "n": "2025", + "v": "2025" + }, { + "n": "2024", + "v": "2024" + }, { + "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" + }] + }, { + "key": "letter", + "name": "字母", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "A", + "v": "A" + }, { + "n": "B", + "v": "B" + }, { + "n": "C", + "v": "C" + }, { + "n": "D", + "v": "D" + }, { + "n": "E", + "v": "E" + }, { + "n": "F", + "v": "F" + }, { + "n": "G", + "v": "G" + }, { + "n": "H", + "v": "H" + }, { + "n": "I", + "v": "I" + }, { + "n": "J", + "v": "J" + }, { + "n": "K", + "v": "K" + }, { + "n": "L", + "v": "L" + }, { + "n": "M", + "v": "M" + }, { + "n": "N", + "v": "N" + }, { + "n": "O", + "v": "O" + }, { + "n": "P", + "v": "P" + }, { + "n": "Q", + "v": "Q" + }, { + "n": "R", + "v": "R" + }, { + "n": "S", + "v": "S" + }, { + "n": "T", + "v": "T" + }, { + "n": "U", + "v": "U" + }, { + "n": "V", + "v": "V" + }, { + "n": "W", + "v": "W" + }, { + "n": "X", + "v": "X" + }, { + "n": "Y", + "v": "Y" + }, { + "n": "Z", + "v": "Z" + }, { + "n": "0-9", + "v": "0-9" + }] + }, { + "key": "by", + "name": "时间", + "value": [{ + "n": "按最新", + "v": "time" + }, { + "n": "按最热", + "v": "hits" + }, { + "n": "按评分", + "v": "score" + }] + }], + "2": [{ + "key": "class", + "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": "音乐" + }] + }, { + "key": "year", + "name": "年份", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "2026", + "v": "2026" + }, { + "n": "2025", + "v": "2025" + }, { + "n": "2024", + "v": "2024" + }, { + "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" + }] + }, { + "key": "letter", + "name": "字母", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "A", + "v": "A" + }, { + "n": "B", + "v": "B" + }, { + "n": "C", + "v": "C" + }, { + "n": "D", + "v": "D" + }, { + "n": "E", + "v": "E" + }, { + "n": "F", + "v": "F" + }, { + "n": "G", + "v": "G" + }, { + "n": "H", + "v": "H" + }, { + "n": "I", + "v": "I" + }, { + "n": "J", + "v": "J" + }, { + "n": "K", + "v": "K" + }, { + "n": "L", + "v": "L" + }, { + "n": "M", + "v": "M" + }, { + "n": "N", + "v": "N" + }, { + "n": "O", + "v": "O" + }, { + "n": "P", + "v": "P" + }, { + "n": "Q", + "v": "Q" + }, { + "n": "R", + "v": "R" + }, { + "n": "S", + "v": "S" + }, { + "n": "T", + "v": "T" + }, { + "n": "U", + "v": "U" + }, { + "n": "V", + "v": "V" + }, { + "n": "W", + "v": "W" + }, { + "n": "X", + "v": "X" + }, { + "n": "Y", + "v": "Y" + }, { + "n": "Z", + "v": "Z" + }, { + "n": "0-9", + "v": "0-9" + }] + }, { + "key": "by", + "name": "时间", + "value": [{ + "n": "按最新", + "v": "time" + }, { + "n": "按最热", + "v": "hits" + }, { + "n": "按评分", + "v": "score" + }] + }], + "3": [{ + "key": "class", + "name": "类型", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "动作", + "v": "动作" + }, { + "n": "奇幻", + "v": "奇幻" + }, { + "n": "科幻", + "v": "科幻" + }] + }, { + "key": "year", + "name": "年份", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "2026", + "v": "2026" + }, { + "n": "2025", + "v": "2025" + }, { + "n": "2024", + "v": "2024" + }, { + "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" + }] + }, { + "key": "letter", + "name": "字母", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "A", + "v": "A" + }, { + "n": "B", + "v": "B" + }, { + "n": "C", + "v": "C" + }, { + "n": "D", + "v": "D" + }, { + "n": "E", + "v": "E" + }, { + "n": "F", + "v": "F" + }, { + "n": "G", + "v": "G" + }, { + "n": "H", + "v": "H" + }, { + "n": "I", + "v": "I" + }, { + "n": "J", + "v": "J" + }, { + "n": "K", + "v": "K" + }, { + "n": "L", + "v": "L" + }, { + "n": "M", + "v": "M" + }, { + "n": "N", + "v": "N" + }, { + "n": "O", + "v": "O" + }, { + "n": "P", + "v": "P" + }, { + "n": "Q", + "v": "Q" + }, { + "n": "R", + "v": "R" + }, { + "n": "S", + "v": "S" + }, { + "n": "T", + "v": "T" + }, { + "n": "U", + "v": "U" + }, { + "n": "V", + "v": "V" + }, { + "n": "W", + "v": "W" + }, { + "n": "X", + "v": "X" + }, { + "n": "Y", + "v": "Y" + }, { + "n": "Z", + "v": "Z" + }, { + "n": "0-9", + "v": "0-9" + }] + }, { + "key": "by", + "name": "时间", + "value": [{ + "n": "按最新", + "v": "time" + }, { + "n": "按最热", + "v": "hits" + }, { + "n": "按评分", + "v": "score" + }] + }] + }, + filter_def: {}, + detailUrl: '/voddetail/fyid.html', + play_parse: true, + sniffer: 1, + is_video: 'obj/tos|bd.xhscdn|/ugc/', + lazy: $js.toString(() => { + input = { + parse: 1, + url: input, + //js:'try{let urls=Array.from(document.querySelectorAll("iframe")).filter(x=>x.src.includes("?url="));if(urls){location.href=urls[0].src}}catch{}document.querySelector("button").click()', + js: 'try{location.href=document.querySelector("#playleft iframe").src}catch{}document.querySelector("button.swal-button--confirm").click()', + parse_extra: '&is_pc=1&custom_regex=' + rule.is_video, + } + }), + limit: 6, + 推荐: '.list-vod.flex .public-list-box;a&&title;.lazy&&data-original;.public-list-prb&&Text;a&&href', + 一级: $js.toString(() => { + let body = input.split("#")[1]; + let t = Math.round(new Date / 1e3).toString(); + let key = md5("DS" + t + "DCC147D11943AF75"); + let url = input.split("#")[0]; + body = body + "&time=" + t + "&key=" + key; + print(body); + fetch_params.body = body; + let html = post(url, fetch_params); + let data = JSON.parse(html); + VODS = data.list.map(function(it) { + it.vod_pic = urljoin2(input.split("/i")[0], it.vod_pic); + return it + }); + }), + 二级: { + title: '.slide-info-title&&Text;.slide-info:eq(3)--strong&&Text', + img: '.detail-pic&&data-original', + desc: '.fraction&&Text;.slide-info-remarks:eq(1)&&Text;.slide-info-remarks:eq(2)&&Text;.slide-info:eq(2)--strong&&Text;.slide-info:eq(1)--strong&&Text', + content: '#height_limit&&Text', + tabs: '.anthology.wow.fadeInUp.animated&&.swiper-wrapper&&a', + tab_text: '.swiper-slide&&Text', + lists: '.anthology-list-box:eq(#id) li', + }, + 搜索: 'json:list;name;pic;;id', + 搜索: $js.toString(() => { + let html = fetch(input); + let list = pdfa(html, ".public-list-box"); + VODS = list.map(x => { + return { + vod_name: pdfh(x, ".thumb-txt&&Text"), + vod_pic: pdfh(x, ".lazy&&data-src"), + vod_remarks: pdfh(x, ".public-list-prb&&Text"), + vod_content: pdfh(x, ".thumb-blurb&&Text"), + vod_id: pdfh(x, "a&&href") + } + }); + }), + 图片替换: '&=>&' +} \ No newline at end of file diff --git a/tianjitop/llllo4k/lib/JQYS.json b/tianjitop/llllo4k/lib/JQYS.json new file mode 100644 index 00000000..a5a6bbca --- /dev/null +++ b/tianjitop/llllo4k/lib/JQYS.json @@ -0,0 +1,82 @@ +{ + "规则名": "剧圈圈", + "规则作者": "香雅情", + "OCR_API":"https://api.nn.ci/ocr/b64/text", + "请求头参数": "MOBILE_UA", + "网页编码格式": "UTF-8", + "图片是否需要代理": "否", + "是否开启获取首页数据": "1", + "首页推荐链接": "https://www.jqqzx.me", + "首页列表数组规则": "body&&.module-main.tab-list.active", + "首页片单列表数组规则": ".module-item", + "首页片单是否Jsoup写法": "1", + "分类起始页码": "1", + "分类链接": "https://www.jqqzx.me/vodshow/id/{cateId}/page/{catePg}.html", + "分类名称": "电影&电视剧&综艺&动漫&纪录片&爽剧", + "分类名称替换词": "dianying&juji&zongyi&dongman&jilupian&shuangju", + "筛选数据": {}, + //"筛选数据": "ext", + //{cateId} + "筛选子分类名称": "", + "筛选子分类替换词": "", + //{class} + "筛选类型名称": "", + "筛选类型替换词": "*", + //{area} + "筛选地区名称": "", + "筛选地区替换词": "*", + //{year} + "筛选年份名称": "", + "筛选年份替换词": "*", + //{lang} + "筛选语言名称": "", + "筛选语言替换词": "*", + //{by} + "筛选排序名称": "时间&人气&评分", + "筛选排序替换词": "time&hits&score", + "分类截取模式": "1", + "分类列表数组规则": ".module-items&&.module-item", + "分类片单是否Jsoup写法": "是", + "分类片单标题": ".module-poster-item-title&&Text", + "分类片单链接": "a&&href", + "分类片单图片": ".lazyload&&data-original", + "分类片单副标题": ".module-item-note&&Text", + "分类片单链接加前缀": "https://www.jqqzx.me", + "分类片单链接加后缀": "", + "搜索请求头参数": "User-Agent$MOBILE_UA", + "搜索链接": "https://www.jqqzx.me/vodsearch{wd}/page/{SearchPg}.html", + "POST请求数据": "", + "搜索截取模式": "1", + "搜索列表数组规则": ".module-items&&.module-item", + "搜索片单是否Jsoup写法": "是", + "搜索片单图片": ".lazyload&&data-original", + "搜索片单标题": ".module-card-item-title&&Text", + "搜索片单链接": "a&&href", + "搜索片单副标题": ".module-item-note&&Text", + "搜索片单链接加前缀": "https://www.jqqzx.me", + "搜索片单链接加后缀": "", + "链接是否直接播放": "否", + "直接播放链接加前缀": "", + "直接播放链接加后缀": "", + "直接播放直链视频请求头": "", + "详情是否Jsoup写法": "是", + "类型详情": "", + "年代详情": ".module-info-content&&.module-info-item,3&&Text", + "地区详情": "", + "演员详情": ".module-info-content&&.module-info-item,2&&Text", + "简介详情": ".module-info-content&&.module-info-item&&Text", + "线路列表数组规则": ".module-tab-items-box&&.module-tab-item", + "线路标题": "Text", + "播放列表数组规则": "body&&.module-play-list-content", + "选集列表数组规则": "a", + "选集标题链接是否Jsoup写法": "是", + "选集标题": "a&&Text", + "选集链接": "a&&href", + "是否反转选集序列": "否", + "选集链接加前缀": "https://www.jqqzx.me", + "选集链接加后缀": "", + "分析MacPlayer": "否", + "是否开启手动嗅探": "否", + "手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos", + "手动嗅探视频链接过滤词": ".html#=http" +} \ No newline at end of file diff --git a/tianjitop/llllo4k/lib/LMM.js b/tianjitop/llllo4k/lib/LMM.js new file mode 100644 index 00000000..594cd646 --- /dev/null +++ b/tianjitop/llllo4k/lib/LMM.js @@ -0,0 +1,567 @@ +var rule = { + title: "路漫漫", + host: "https://www.lmm50.com", + url: "/vod/show/id/fyclassfyfilter.html", + searchUrl: '/vod/search/page/fypage/wd/**.html', + searchable: 2, + quickSearch: 0, + filterable: 1, + filter: { + "3": [{ + "key": "年代", + "name": "年代", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "2026", + "v": "/year/2026" + }, { + "n": "2025", + "v": "/year/2025" + }, { + "n": "2024", + "v": "/year/2024" + }, { + "n": "2023", + "v": "/year/2023" + }, { + "n": "2022", + "v": "/year/2022" + }, { + "n": "2021", + "v": "/year/2021" + }, { + "n": "2020", + "v": "/year/2020" + }, { + "n": "2019", + "v": "/year/2019" + }, { + "n": "2018", + "v": "/year/2018" + }, { + "n": "2017", + "v": "/year/2017" + }, { + "n": "2016", + "v": "/year/2016" + }, { + "n": "2015", + "v": "/year/2015" + }, { + "n": "更早", + "v": "/year/2014-1980" + }] + }, { + "key": "排序", + "name": "排序", + "value": [{ + "n": "最近更新", + "v": "/by/time" + }, { + "n": "最高人气", + "v": "/by/hits" + }, { + "n": "最高评分", + "v": "/by/score" + }, { + "n": "最多点赞", + "v": "/by/up" + }] + }], + "4": [{ + "key": "年代", + "name": "年代", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "2026", + "v": "/year/2026" + }, { + "n": "2025", + "v": "/year/2025" + }, { + "n": "2024", + "v": "/year/2024" + }, { + "n": "2023", + "v": "/year/2023" + }, { + "n": "2022", + "v": "/year/2022" + }, { + "n": "2021", + "v": "/year/2021" + }, { + "n": "2020", + "v": "/year/2020" + }, { + "n": "2019", + "v": "/year/2019" + }, { + "n": "2018", + "v": "/year/2018" + }, { + "n": "2017", + "v": "/year/2017" + }, { + "n": "2016", + "v": "/year/2016" + }, { + "n": "2015", + "v": "/year/2015" + }, { + "n": "更早", + "v": "/year/2014-1980" + }] + }, { + "key": "排序", + "name": "排序", + "value": [{ + "n": "最近更新", + "v": "/by/time" + }, { + "n": "最高人气", + "v": "/by/hits" + }, { + "n": "最高评分", + "v": "/by/score" + }, { + "n": "最多点赞", + "v": "/by/up" + }] + }], + "5": [{ + "key": "年代", + "name": "年代", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "2026", + "v": "/year/2026" + }, { + "n": "2025", + "v": "/year/2025" + }, { + "n": "2024", + "v": "/year/2024" + }, { + "n": "2023", + "v": "/year/2023" + }, { + "n": "2022", + "v": "/year/2022" + }, { + "n": "2021", + "v": "/year/2021" + }, { + "n": "2020", + "v": "/year/2020" + }, { + "n": "2019", + "v": "/year/2019" + }, { + "n": "2018", + "v": "/year/2018" + }, { + "n": "2017", + "v": "/year/2017" + }, { + "n": "2016", + "v": "/year/2016" + }, { + "n": "2015", + "v": "/year/2015" + }, { + "n": "更早", + "v": "/year/2014-1980" + }] + }, { + "key": "排序", + "name": "排序", + "value": [{ + "n": "最近更新", + "v": "/by/time" + }, { + "n": "最高人气", + "v": "/by/hits" + }, { + "n": "最高评分", + "v": "/by/score" + }, { + "n": "最多点赞", + "v": "/by/up" + }] + }], + "6": [{ + "key": "年代", + "name": "年代", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "2026", + "v": "/year/2026" + }, { + "n": "2025", + "v": "/year/2025" + }, { + "n": "2024", + "v": "/year/2024" + }, { + "n": "2023", + "v": "/year/2023" + }, { + "n": "2022", + "v": "/year/2022" + }, { + "n": "2021", + "v": "/year/2021" + }, { + "n": "2020", + "v": "/year/2020" + }, { + "n": "2019", + "v": "/year/2019" + }, { + "n": "2018", + "v": "/year/2018" + }, { + "n": "2017", + "v": "/year/2017" + }, { + "n": "2016", + "v": "/year/2016" + }, { + "n": "2015", + "v": "/year/2015" + }, { + "n": "更早", + "v": "/year/2014-1980" + }] + }, { + "key": "排序", + "name": "排序", + "value": [{ + "n": "最近更新", + "v": "/by/time" + }, { + "n": "最高人气", + "v": "/by/hits" + }, { + "n": "最高评分", + "v": "/by/score" + }, { + "n": "最多点赞", + "v": "/by/up" + }] + }], + "7": [{ + "key": "年代", + "name": "年代", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "2026", + "v": "/year/2026" + }, { + "n": "2025", + "v": "/year/2025" + }, { + "n": "2024", + "v": "/year/2024" + }, { + "n": "2023", + "v": "/year/2023" + }, { + "n": "2022", + "v": "/year/2022" + }, { + "n": "2021", + "v": "/year/2021" + }, { + "n": "2020", + "v": "/year/2020" + }, { + "n": "2019", + "v": "/year/2019" + }, { + "n": "2018", + "v": "/year/2018" + }, { + "n": "2017", + "v": "/year/2017" + }, { + "n": "2016", + "v": "/year/2016" + }, { + "n": "2015", + "v": "/year/2015" + }, { + "n": "更早", + "v": "/year/2014-1980" + }] + }, { + "key": "排序", + "name": "排序", + "value": [{ + "n": "最近更新", + "v": "/by/time" + }, { + "n": "最高人气", + "v": "/by/hits" + }, { + "n": "最高评分", + "v": "/by/score" + }, { + "n": "最多点赞", + "v": "/by/up" + }] + }], + "8": [{ + "key": "年代", + "name": "年代", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "2026", + "v": "/year/2026" + }, { + "n": "2025", + "v": "/year/2025" + }, { + "n": "2024", + "v": "/year/2024" + }, { + "n": "2023", + "v": "/year/2023" + }, { + "n": "2022", + "v": "/year/2022" + }, { + "n": "2021", + "v": "/year/2021" + }, { + "n": "2020", + "v": "/year/2020" + }, { + "n": "2019", + "v": "/year/2019" + }, { + "n": "2018", + "v": "/year/2018" + }, { + "n": "2017", + "v": "/year/2017" + }, { + "n": "2016", + "v": "/year/2016" + }, { + "n": "2015", + "v": "/year/2015" + }, { + "n": "更早", + "v": "/year/2014-1980" + }] + }, { + "key": "排序", + "name": "排序", + "value": [{ + "n": "最近更新", + "v": "/by/time" + }, { + "n": "最高人气", + "v": "/by/hits" + }, { + "n": "最高评分", + "v": "/by/score" + }, { + "n": "最多点赞", + "v": "/by/up" + }] + }] + }, + filter_url: "{{fl.排序}}{{fl.年代}}/page/fypage", + filter_def: "", + headers: { + "User-Agent": "MOBILE_UA" + }, + timeout: 5000, + class_name: "日本动漫&国产动漫&欧美动漫&日本动画电影&国产动画电影&欧美动画电影", + class_url: "6&7&8&3&4&5", + class_parse: "", + cate_exclude: "", + play_parse: true, + lazy: $js.toString(() => { + function getDAesString(token) { + eval(getCryptoJS()); + var key = CryptoJS.enc.Utf8.parse("ejjooopppqqqrwww"); + + var iv = CryptoJS.enc.Utf8.parse("1348987635684651"); + + var token = CryptoJS.AES.decrypt(token, key, { + iv: iv, + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.Pkcs7, + }); + + return token.toString(CryptoJS.enc.Utf8); + } + + var html = JSON.parse(request(input).match(/r player_.*?=(.*?)</)[1]); + var url = html.url; + var from = html.from; + if (html.encrypt == "1") { + url = unescape(url); + } else if (html.encrypt == "2") { + url = unescape(base64Decode(url)); + } + if (/\.mp4|\.m3u8|\.flv/.test(url)) { + input = { + parse: 0, + url: url.split("&")[0], + js: '' + }; + } else { + var jsh = request(HOST + "/static/player/" + from + ".js", { + headers: { + Referer: input + }, + }).match(/\.src\s*=\s*(.*?);/)[1]; + //log(MY_HOME); + if (/type=/.test(jsh)) { + jsh = jsh + .replace(/[\+\s']/g, "") + .replace(/MacPlayer.Parse/, "") + .replace(/MacPlayer.PlayUrl/, url) + .replace(/window.location.href/, input); + var playht = fetch(jsh, { + headers: { + Referer: HOST + } + }); + } else { + jsh = jsh + .replace(/[\+\s']/g, "") + .replace(/MacPlayer.Parse/, "") + .replace(/MacPlayer.PlayUrl/, url) + .replace(/window.location.href/, input); + + jsh = JSON.parse( + fetch(jsh, { + headers: { + Referer: HOST + }, + onlyHeaders: true + }) + ).url; + var playht = fetch(jsh, { + headers: { + Referer: HOST + } + }); + } + + var postapi = jsh.match(/^(.*?\/\/.*?\/.*?\/)/)[1]; + + var posturl = postapi + playht.match(/post\("(.*?)"/)[1]; + if (/act\s*=/.test(playht)) { + var vid = playht.match(/vid\s*=\s*"(.*?)"/)[1]; + var t = playht.match(/var\s*t\s*=\s*"(.*?)"/)[1]; + var token = playht.match(/token\s*=\s*"(.*?)"/)[1]; + var act = playht.match(/act\s*=\s*"(.*?)"/)[1]; + var play = playht.match(/play\s*=\s*"(.*?)"/)[1]; + token = getDAesString(token); + + var data = JSON.parse( + post(posturl, { + headers: { + Referer: HOST + }, + body: { + vid: vid, + t: t, + token: token, + act: act, + play: play, + }, + timeout: 5000 + }) + ); + input = { + parse: 0, + url: data.url, + js: '' + }; + } else { + var key = ""; + + playht.match(/var (\w+)="(.*?)";/g).forEach(function(list) { + key += list.match(/"(.*?)"/)[1]; + }); + const bodys = JSON.parse( + playht + .match(/post\(.*?,(.*?),\n/)[1] + .replace(/"keyyy"\s*:\s*''.*?''/, '"keyyy" : "' + key + '"') + ); + var data = JSON.parse( + post(posturl, { + headers: { + Referer: HOST + }, + body: bodys + }) + ); + if (data.ext == "xgplayer") { + var dataurl = + "https://yun.366day.site/mp4hls/xgplayer.php?vid=" + data.url; + var video = fetch(dataurl, { + headers: { + Referer: jsh + } + }).match( + /"url": "(.*?)"/ + )[1]; + input = { + parse: 0, + url: video, + js: '' + }; + } else if (data.ext == "hls" || data.ext == "hls_list") { + input = { + parse: 0, + url: decodeURIComponent(data.url), + js: '' + }; + } else { + input = { + parse: 0, + url: data.url, + js: '' + }; + } + } + } + }), + double: false, + 推荐: "*", + 一级: ".video-img-box;h6.title&&Text;.lazyload&&data-src;.label&&Text;a&&href", + 二级: { + title: ".page-title&&Text;.tag-link&&Text", + img: ".module-item-pic&&.lazyload&&src", + desc: ".video-info-items:eq(3)&&Text;.video-info-items:eq(2)&&Text;;.video-info-items:eq(1)&&Text;.video-info-items:eq(0)&&Text", + content: ".video-info-content&&Text", + tabs: ".module-tab-item.tab-item", + lists: ".module-player-list:eq(#id) a", + tab_text: "body&&Text", + list_text: "body&&Text", + list_url: "a&&href" + }, + detailUrl: "", + 搜索: "*" +} \ No newline at end of file diff --git a/tianjitop/llllo4k/lib/MBYS.json b/tianjitop/llllo4k/lib/MBYS.json new file mode 100644 index 00000000..d9433726 --- /dev/null +++ b/tianjitop/llllo4k/lib/MBYS.json @@ -0,0 +1,7 @@ +{ + "请求头": "User-Agent$MOBILE_UA", + "编码": "UTF-8", + "分类url": "https://v.aiwule.com/vodshow/{cateId}-{area}-{by}-{class}-{lang}-{letter}---{catePg}---{year}.html", + "分类": "电影$20#电视剧$21#动漫$23#综艺$22#短剧$47", + "简介": "简介:&&" +} \ No newline at end of file diff --git a/tianjitop/llllo4k/lib/QKB.js b/tianjitop/llllo4k/lib/QKB.js new file mode 100644 index 00000000..2e9f0140 --- /dev/null +++ b/tianjitop/llllo4k/lib/QKB.js @@ -0,0 +1,1142 @@ +muban.vfed.二级.title = 'h1&&Text;.fed-col-md3--span:eq(0)&&Text'; +muban.vfed.二级.desc = '.fed-col-md3:eq(3)&&Text;;;.fed-col-md6:eq(0)&&Text;.fed-col-md6--span:eq(1)&&Text'; +var rule = { + title: '去看吧', + 模板: 'vfed', + host: 'https://qkan8.com', + // url: '/index.php/vod/show/id/fyclass/page/fypage.html', + url: '/index.php/vod/show/id/fyclassfyfilter.html', + filterable: 1, //是否启用分类筛选, + filter_url: '{{fl.area}}{{fl.by}}{{fl.class}}/page/fypage{{fl.year}}', + filter: { + "33": [{ + "key": "class", + "name": "类型", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "搞笑", + "v": "/class/搞笑" + }, { + "n": "经典", + "v": "/class/经典" + }, { + "n": "热血", + "v": "/class/热血" + }, { + "n": "催泪", + "v": "/class/催泪" + }, { + "n": "治愈", + "v": "/class/治愈" + }, { + "n": "猎奇", + "v": "/class/猎奇" + }, { + "n": "励志", + "v": "/class/励志" + }, { + "n": "战斗", + "v": "/class/战斗" + }, { + "n": "后宫", + "v": "/class/后宫" + }, { + "n": "机战", + "v": "/class/机战" + }, { + "n": "恋爱", + "v": "/class/恋爱" + }, { + "n": "百合", + "v": "/class/百合" + }, { + "n": "科幻", + "v": "/class/科幻" + }, { + "n": "奇幻", + "v": "/class/奇幻" + }, { + "n": "推理", + "v": "/class/推理" + }, { + "n": "校园", + "v": "/class/校园" + }, { + "n": "运动", + "v": "/class/运动" + }, { + "n": "魔法", + "v": "/class/魔法" + }, { + "n": "历史", + "v": "/class/历史" + }, { + "n": "伪娘", + "v": "/class/伪娘" + }, { + "n": "美少女", + "v": "/class/美少女" + }, { + "n": "萝莉", + "v": "/class/萝莉" + }, { + "n": "亲子", + "v": "/class/亲子" + }, { + "n": "青春", + "v": "/class/青春" + }, { + "n": "冒险", + "v": "/class/冒险" + }, { + "n": "竞技", + "v": "/class/竞技" + }] + }, { + "key": "year", + "name": "年代", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "2026", + "v": "/year/2026" + }, { + "n": "2025", + "v": "/year/2025" + }, { + "n": "2024", + "v": "/year/2024" + }, { + "n": "2023", + "v": "/year/2023" + }, { + "n": "2022", + "v": "/year/2022" + }, { + "n": "2021", + "v": "/year/2021" + }, { + "n": "2020", + "v": "/year/2020" + }, { + "n": "2019", + "v": "/year/2019" + }, { + "n": "2018", + "v": "/year/2018" + }, { + "n": "2017", + "v": "/year/2017" + }, { + "n": "2016", + "v": "/year/2016" + }, { + "n": "2015", + "v": "/year/2015" + }, { + "n": "2014", + "v": "/year/2014" + }, { + "n": "2013", + "v": "/year/2013" + }, { + "n": "2012", + "v": "/year/2012" + }, { + "n": "2011", + "v": "/year/2011" + }, { + "n": "2010", + "v": "/year/2010" + }, { + "n": "2009", + "v": "/year/2009" + }, { + "n": "2008", + "v": "/year/2008" + }, { + "n": "2007", + "v": "/year/2007" + }, { + "n": "2006", + "v": "/year/2006" + }, { + "n": "2005", + "v": "/year/2005" + }, { + "n": "2004", + "v": "/year/2004" + }, { + "n": "2003", + "v": "/year/2003" + }, { + "n": "2002", + "v": "/year/2002" + }, { + "n": "2001", + "v": "/year/2001" + }, { + "n": "2000", + "v": "/year/2000" + }, { + "n": "1999", + "v": "/year/1999" + }, { + "n": "1998", + "v": "/year/1998" + }] + }, { + "key": "by", + "name": "排序", + "value": [{ + "n": "时间", + "v": "/by/time" + }, { + "n": "人气", + "v": "/by/hits" + }, { + "n": "评分", + "v": "/by/score" + }] + }], + "21": [{ + "key": "class", + "name": "类型", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "搞笑", + "v": "/class/搞笑" + }, { + "n": "经典", + "v": "/class/经典" + }, { + "n": "热血", + "v": "/class/热血" + }, { + "n": "催泪", + "v": "/class/催泪" + }, { + "n": "治愈", + "v": "/class/治愈" + }, { + "n": "猎奇", + "v": "/class/猎奇" + }, { + "n": "励志", + "v": "/class/励志" + }, { + "n": "战斗", + "v": "/class/战斗" + }, { + "n": "后宫", + "v": "/class/后宫" + }, { + "n": "机战", + "v": "/class/机战" + }, { + "n": "恋爱", + "v": "/class/恋爱" + }, { + "n": "百合", + "v": "/class/百合" + }, { + "n": "科幻", + "v": "/class/科幻" + }, { + "n": "奇幻", + "v": "/class/奇幻" + }, { + "n": "推理", + "v": "/class/推理" + }, { + "n": "校园", + "v": "/class/校园" + }, { + "n": "运动", + "v": "/class/运动" + }, { + "n": "魔法", + "v": "/class/魔法" + }, { + "n": "历史", + "v": "/class/历史" + }, { + "n": "伪娘", + "v": "/class/伪娘" + }, { + "n": "美少女", + "v": "/class/美少女" + }, { + "n": "萝莉", + "v": "/class/萝莉" + }, { + "n": "亲子", + "v": "/class/亲子" + }, { + "n": "青春", + "v": "/class/青春" + }, { + "n": "冒险", + "v": "/class/冒险" + }, { + "n": "竞技", + "v": "/class/竞技" + }] + }, { + "key": "area", + "name": "地区", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "大陆", + "v": "/area/大陆" + }, { + "n": "美国", + "v": "/area/美国" + }, { + "n": "韩国", + "v": "/area/韩国" + }, { + "n": "日本", + "v": "/area/日本" + }, { + "n": "泰国", + "v": "/area/泰国" + }, { + "n": "新加坡", + "v": "/area/新加坡" + }, { + "n": "马来西亚", + "v": "/area/马来西亚" + }, { + "n": "印度", + "v": "/area/印度" + }, { + "n": "英国", + "v": "/area/英国" + }, { + "n": "法国", + "v": "/area/法国" + }, { + "n": "加拿大", + "v": "/area/加拿大" + }, { + "n": "西班牙", + "v": "/area/西班牙" + }, { + "n": "俄罗斯", + "v": "/area/俄罗斯" + }, { + "n": "其它", + "v": "/area/其它" + }] + }, { + "key": "year", + "name": "年代", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "2026", + "v": "/year/2026" + }, { + "n": "2025", + "v": "/year/2025" + }, { + "n": "2024", + "v": "/year/2024" + }, { + "n": "2023", + "v": "/year/2023" + }, { + "n": "2022", + "v": "/year/2022" + }, { + "n": "2021", + "v": "/year/2021" + }, { + "n": "2020", + "v": "/year/2020" + }, { + "n": "2019", + "v": "/year/2019" + }, { + "n": "2018", + "v": "/year/2018" + }, { + "n": "2017", + "v": "/year/2017" + }, { + "n": "2016", + "v": "/year/2016" + }, { + "n": "2015", + "v": "/year/2015" + }, { + "n": "2014", + "v": "/year/2014" + }, { + "n": "2013", + "v": "/year/2013" + }, { + "n": "2012", + "v": "/year/2012" + }, { + "n": "2011", + "v": "/year/2011" + }, { + "n": "2010", + "v": "/year/2010" + }, { + "n": "2009", + "v": "/year/2009" + }, { + "n": "2008", + "v": "/year/2008" + }, { + "n": "2007", + "v": "/year/2007" + }, { + "n": "2006", + "v": "/year/2006" + }, { + "n": "2005", + "v": "/year/2005" + }, { + "n": "2004", + "v": "/year/2004" + }, { + "n": "2003", + "v": "/year/2003" + }, { + "n": "2002", + "v": "/year/2002" + }, { + "n": "2001", + "v": "/year/2001" + }, { + "n": "2000", + "v": "/year/2000" + }, { + "n": "1999", + "v": "/year/1999" + }, { + "n": "1998", + "v": "/year/1998" + }] + }, { + "key": "by", + "name": "排序", + "value": [{ + "n": "时间", + "v": "/by/time" + }, { + "n": "人气", + "v": "/by/hits" + }, { + "n": "评分", + "v": "/by/score" + }] + }], + "50": [{ + "key": "class", + "name": "类型", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "搞笑", + "v": "/class/搞笑" + }, { + "n": "经典", + "v": "/class/经典" + }, { + "n": "热血", + "v": "/class/热血" + }, { + "n": "催泪", + "v": "/class/催泪" + }, { + "n": "治愈", + "v": "/class/治愈" + }, { + "n": "猎奇", + "v": "/class/猎奇" + }, { + "n": "励志", + "v": "/class/励志" + }, { + "n": "战斗", + "v": "/class/战斗" + }, { + "n": "后宫", + "v": "/class/后宫" + }, { + "n": "机战", + "v": "/class/机战" + }, { + "n": "恋爱", + "v": "/class/恋爱" + }, { + "n": "百合", + "v": "/class/百合" + }, { + "n": "科幻", + "v": "/class/科幻" + }, { + "n": "奇幻", + "v": "/class/奇幻" + }, { + "n": "推理", + "v": "/class/推理" + }, { + "n": "校园", + "v": "/class/校园" + }, { + "n": "运动", + "v": "/class/运动" + }, { + "n": "魔法", + "v": "/class/魔法" + }, { + "n": "历史", + "v": "/class/历史" + }, { + "n": "伪娘", + "v": "/class/伪娘" + }, { + "n": "美少女", + "v": "/class/美少女" + }, { + "n": "萝莉", + "v": "/class/萝莉" + }, { + "n": "亲子", + "v": "/class/亲子" + }, { + "n": "青春", + "v": "/class/青春" + }, { + "n": "冒险", + "v": "/class/冒险" + }, { + "n": "竞技", + "v": "/class/竞技" + }] + }, { + "key": "area", + "name": "地区", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "大陆", + "v": "/area/大陆" + }, { + "n": "美国", + "v": "/area/美国" + }, { + "n": "韩国", + "v": "/area/韩国" + }, { + "n": "日本", + "v": "/area/日本" + }, { + "n": "泰国", + "v": "/area/泰国" + }, { + "n": "新加坡", + "v": "/area/新加坡" + }, { + "n": "马来西亚", + "v": "/area/马来西亚" + }, { + "n": "印度", + "v": "/area/印度" + }, { + "n": "英国", + "v": "/area/英国" + }, { + "n": "法国", + "v": "/area/法国" + }, { + "n": "加拿大", + "v": "/area/加拿大" + }, { + "n": "西班牙", + "v": "/area/西班牙" + }, { + "n": "俄罗斯", + "v": "/area/俄罗斯" + }, { + "n": "其它", + "v": "/area/其它" + }] + }, { + "key": "year", + "name": "年代", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "2026", + "v": "/year/2026" + }, { + "n": "2025", + "v": "/year/2025" + }, { + "n": "2024", + "v": "/year/2024" + }, { + "n": "2023", + "v": "/year/2023" + }, { + "n": "2022", + "v": "/year/2022" + }, { + "n": "2021", + "v": "/year/2021" + }, { + "n": "2020", + "v": "/year/2020" + }, { + "n": "2019", + "v": "/year/2019" + }, { + "n": "2018", + "v": "/year/2018" + }, { + "n": "2017", + "v": "/year/2017" + }, { + "n": "2016", + "v": "/year/2016" + }, { + "n": "2015", + "v": "/year/2015" + }, { + "n": "2014", + "v": "/year/2014" + }, { + "n": "2013", + "v": "/year/2013" + }, { + "n": "2012", + "v": "/year/2012" + }, { + "n": "2011", + "v": "/year/2011" + }, { + "n": "2010", + "v": "/year/2010" + }, { + "n": "2009", + "v": "/year/2009" + }, { + "n": "2008", + "v": "/year/2008" + }, { + "n": "2007", + "v": "/year/2007" + }, { + "n": "2006", + "v": "/year/2006" + }, { + "n": "2005", + "v": "/year/2005" + }, { + "n": "2004", + "v": "/year/2004" + }, { + "n": "2003", + "v": "/year/2003" + }, { + "n": "2002", + "v": "/year/2002" + }, { + "n": "2001", + "v": "/year/2001" + }, { + "n": "2000", + "v": "/year/2000" + }, { + "n": "1999", + "v": "/year/1999" + }, { + "n": "1998", + "v": "/year/1998" + }] + }, { + "key": "by", + "name": "排序", + "value": [{ + "n": "时间", + "v": "/by/time" + }, { + "n": "人气", + "v": "/by/hits" + }, { + "n": "评分", + "v": "/by/score" + }] + }], + "24": [{ + "key": "class", + "name": "类型", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "搞笑", + "v": "/class/搞笑" + }, { + "n": "经典", + "v": "/class/经典" + }, { + "n": "热血", + "v": "/class/热血" + }, { + "n": "催泪", + "v": "/class/催泪" + }, { + "n": "治愈", + "v": "/class/治愈" + }, { + "n": "猎奇", + "v": "/class/猎奇" + }, { + "n": "励志", + "v": "/class/励志" + }, { + "n": "战斗", + "v": "/class/战斗" + }, { + "n": "后宫", + "v": "/class/后宫" + }, { + "n": "机战", + "v": "/class/机战" + }, { + "n": "恋爱", + "v": "/class/恋爱" + }, { + "n": "百合", + "v": "/class/百合" + }, { + "n": "科幻", + "v": "/class/科幻" + }, { + "n": "奇幻", + "v": "/class/奇幻" + }, { + "n": "推理", + "v": "/class/推理" + }, { + "n": "校园", + "v": "/class/校园" + }, { + "n": "运动", + "v": "/class/运动" + }, { + "n": "魔法", + "v": "/class/魔法" + }, { + "n": "历史", + "v": "/class/历史" + }, { + "n": "伪娘", + "v": "/class/伪娘" + }, { + "n": "美少女", + "v": "/class/美少女" + }, { + "n": "萝莉", + "v": "/class/萝莉" + }, { + "n": "亲子", + "v": "/class/亲子" + }, { + "n": "青春", + "v": "/class/青春" + }, { + "n": "冒险", + "v": "/class/冒险" + }, { + "n": "竞技", + "v": "/class/竞技" + }] + }, { + "key": "area", + "name": "地区", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "大陆", + "v": "/area/大陆" + }, { + "n": "美国", + "v": "/area/美国" + }, { + "n": "韩国", + "v": "/area/韩国" + }, { + "n": "日本", + "v": "/area/日本" + }, { + "n": "泰国", + "v": "/area/泰国" + }, { + "n": "新加坡", + "v": "/area/新加坡" + }, { + "n": "马来西亚", + "v": "/area/马来西亚" + }, { + "n": "印度", + "v": "/area/印度" + }, { + "n": "英国", + "v": "/area/英国" + }, { + "n": "法国", + "v": "/area/法国" + }, { + "n": "加拿大", + "v": "/area/加拿大" + }, { + "n": "西班牙", + "v": "/area/西班牙" + }, { + "n": "俄罗斯", + "v": "/area/俄罗斯" + }, { + "n": "其它", + "v": "/area/其它" + }] + }, { + "key": "year", + "name": "年代", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "2026", + "v": "/year/2026" + }, { + "n": "2025", + "v": "/year/2025" + }, { + "n": "2024", + "v": "/year/2024" + }, { + "n": "2023", + "v": "/year/2023" + }, { + "n": "2022", + "v": "/year/2022" + }, { + "n": "2021", + "v": "/year/2021" + }, { + "n": "2020", + "v": "/year/2020" + }, { + "n": "2019", + "v": "/year/2019" + }, { + "n": "2018", + "v": "/year/2018" + }, { + "n": "2017", + "v": "/year/2017" + }, { + "n": "2016", + "v": "/year/2016" + }, { + "n": "2015", + "v": "/year/2015" + }, { + "n": "2014", + "v": "/year/2014" + }, { + "n": "2013", + "v": "/year/2013" + }, { + "n": "2012", + "v": "/year/2012" + }, { + "n": "2011", + "v": "/year/2011" + }, { + "n": "2010", + "v": "/year/2010" + }, { + "n": "2009", + "v": "/year/2009" + }, { + "n": "2008", + "v": "/year/2008" + }, { + "n": "2007", + "v": "/year/2007" + }, { + "n": "2006", + "v": "/year/2006" + }, { + "n": "2005", + "v": "/year/2005" + }, { + "n": "2004", + "v": "/year/2004" + }, { + "n": "2003", + "v": "/year/2003" + }, { + "n": "2002", + "v": "/year/2002" + }, { + "n": "2001", + "v": "/year/2001" + }, { + "n": "2000", + "v": "/year/2000" + }, { + "n": "1999", + "v": "/year/1999" + }, { + "n": "1998", + "v": "/year/1998" + }] + }, { + "key": "by", + "name": "排序", + "value": [{ + "n": "时间", + "v": "/by/time" + }, { + "n": "人气", + "v": "/by/hits" + }, { + "n": "评分", + "v": "/by/score" + }] + }], + "22": [{ + "key": "class", + "name": "类型", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "搞笑", + "v": "/class/搞笑" + }, { + "n": "经典", + "v": "/class/经典" + }, { + "n": "热血", + "v": "/class/热血" + }, { + "n": "催泪", + "v": "/class/催泪" + }, { + "n": "治愈", + "v": "/class/治愈" + }, { + "n": "猎奇", + "v": "/class/猎奇" + }, { + "n": "励志", + "v": "/class/励志" + }, { + "n": "战斗", + "v": "/class/战斗" + }, { + "n": "后宫", + "v": "/class/后宫" + }, { + "n": "机战", + "v": "/class/机战" + }, { + "n": "恋爱", + "v": "/class/恋爱" + }, { + "n": "百合", + "v": "/class/百合" + }, { + "n": "科幻", + "v": "/class/科幻" + }, { + "n": "奇幻", + "v": "/class/奇幻" + }, { + "n": "推理", + "v": "/class/推理" + }, { + "n": "校园", + "v": "/class/校园" + }, { + "n": "运动", + "v": "/class/运动" + }, { + "n": "魔法", + "v": "/class/魔法" + }, { + "n": "历史", + "v": "/class/历史" + }, { + "n": "伪娘", + "v": "/class/伪娘" + }, { + "n": "美少女", + "v": "/class/美少女" + }, { + "n": "萝莉", + "v": "/class/萝莉" + }, { + "n": "亲子", + "v": "/class/亲子" + }, { + "n": "青春", + "v": "/class/青春" + }, { + "n": "冒险", + "v": "/class/冒险" + }, { + "n": "竞技", + "v": "/class/竞技" + }] + }, { + "key": "area", + "name": "地区", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "日本", + "v": "/area/日本" + }, { + "n": "欧美", + "v": "/area/欧美" + }, { + "n": "其他", + "v": "/area/其他" + }] + }, { + "key": "year", + "name": "年代", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "2026", + "v": "/year/2026" + }, { + "n": "2025", + "v": "/year/2025" + }, { + "n": "2024", + "v": "/year/2024" + }, { + "n": "2023", + "v": "/year/2023" + }, { + "n": "2022", + "v": "/year/2022" + }, { + "n": "2021", + "v": "/year/2021" + }, { + "n": "2020", + "v": "/year/2020" + }, { + "n": "2019", + "v": "/year/2019" + }, { + "n": "2018", + "v": "/year/2018" + }, { + "n": "2017", + "v": "/year/2017" + }, { + "n": "2016", + "v": "/year/2016" + }, { + "n": "2015", + "v": "/year/2015" + }, { + "n": "2014", + "v": "/year/2014" + }, { + "n": "2013", + "v": "/year/2013" + }, { + "n": "2012", + "v": "/year/2012" + }, { + "n": "2011", + "v": "/year/2011" + }, { + "n": "2010", + "v": "/year/2010" + }, { + "n": "2009", + "v": "/year/2009" + }, { + "n": "2008", + "v": "/year/2008" + }, { + "n": "2007", + "v": "/year/2007" + }, { + "n": "2006", + "v": "/year/2006" + }, { + "n": "2005", + "v": "/year/2005" + }, { + "n": "2004", + "v": "/year/2004" + }, { + "n": "2003", + "v": "/year/2003" + }, { + "n": "2002", + "v": "/year/2002" + }, { + "n": "2001", + "v": "/year/2001" + }, { + "n": "2000", + "v": "/year/2000" + }, { + "n": "1999", + "v": "/year/1999" + }, { + "n": "1998", + "v": "/year/1998" + }] + }, { + "key": "by", + "name": "排序", + "value": [{ + "n": "时间", + "v": "/by/time" + }, { + "n": "人气", + "v": "/by/hits" + }, { + "n": "评分", + "v": "/by/score" + }] + }] + }, + class_parse: '.fed-pops-list:eq(0)&&li:gt(0):lt(6);a&&Text;a&&href;.*/(.*?).html', +} \ No newline at end of file diff --git a/tianjitop/llllo4k/lib/SEJY.json b/tianjitop/llllo4k/lib/SEJY.json new file mode 100644 index 00000000..db0d6849 --- /dev/null +++ b/tianjitop/llllo4k/lib/SEJY.json @@ -0,0 +1,454 @@ +{ + "class": [ + { + "type_name": "儿童早教", + "type_id": "儿童早教" + }, + { + "type_name": "儿童启蒙故事", + "type_id": "儿童启蒙故事" + }, + { + "type_name": "儿童英语启蒙", + "type_id": "儿童英语启蒙" + }, + { + "type_name": "儿童歌曲", + "type_id": "儿童歌曲" + }, + { + "type_name": "儿童绘画", + "type_id": "儿童绘画" + }, + { + "type_name": "睡前故事", + "type_id": "睡前故事" + }, + { + "type_name": "儿童动画", + "type_id": "儿童动画" + }, + { + "type_name": "儿童音乐", + "type_id": "儿童音乐" + }, + { + "type_name": "儿童安全教育", + "type_id": "儿童安全教育" + }, + { + "type_name": "贝瓦儿歌", + "type_id": "贝瓦儿歌" + }, + { + "type_name": "悟空识字", + "type_id": "悟空识字" + }, + { + "type_name": "宝宝巴士", + "type_id": "宝宝巴士" + }, + { + "type_name": "儿歌多多", + "type_id": "儿歌多多" + }, + { + "type_name": "学而思", + "type_id": "学而思" + } + ], + "filters": { + "儿童早教": [ + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "儿童启蒙故事": [ + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "儿童英语启蒙": [ + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "儿童歌曲": [ + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "儿童绘画": [ + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "睡前故事": [ + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "儿童动画": [ + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "儿童音乐": [ + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "儿童安全教育": [ + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "贝瓦儿歌": [ + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "悟空识字": [ + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "宝宝巴士": [ + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "儿歌多多": [ + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "学而思": [ + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/tianjitop/llllo4k/lib/WLZB.py b/tianjitop/llllo4k/lib/WLZB.py new file mode 100644 index 00000000..26029ef1 --- /dev/null +++ b/tianjitop/llllo4k/lib/WLZB.py @@ -0,0 +1,1260 @@ +# -*- coding: utf-8 -*- +# by @星河 +# 修复版本 - 参考最新三合一.js重构虎牙、斗鱼、B站直播逻辑 +# 修复:虎牙清晰度选择,确保ratio参数正确传递码率值 +# 修复:斗鱼切换分辨率只能播放1秒的问题(每次重新获取安全密钥和签名) +# 修复:B站使用特殊UA和WBI签名绕过-352风控 [^90^][^30^] +import json +import re +import sys +import time +import hashlib +import random +import urllib.parse +from base64 import b64decode, b64encode +from urllib.parse import parse_qs +import requests +from pyquery import PyQuery as pq +sys.path.append('..') +from base.spider import Spider +from concurrent.futures import ThreadPoolExecutor + + +class Spider(Spider): + + def init(self, extend=""): + # 初始化B站WBI密钥 + self.bili_wbi_keys = None + self.bili_wbi_expire = 0 + pass + + def getName(self): + return "直播" + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + headers = [ + { + # 特殊UA绕过B站风控 [^90^] + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0" + }, + { + "User-Agent": "Dart/3.4 (dart:io)" + } + ] + + excepturl = 'https://www.baidu.com' + + hosts = { + "huya": ["https://www.huya.com", "https://mp.huya.com"], + "douyu": "https://www.douyu.com", + "wangyi": "https://cc.163.com", + "bili": ["https://api.live.bilibili.com", "https://api.bilibili.com"] + } + + referers = { + "huya": "https://live.cdn.huya.com", + "douyu": "https://m.douyu.com", + "bili": "https://live.bilibili.com" + } + + playheaders = { + "wangyi": { + "User-Agent": "ExoPlayer", + "Connection": "Keep-Alive", + "Icy-MetaData": "1" + }, + "bili": { + 'Accept': '*/*', + 'Icy-MetaData': '1', + 'referer': 'https://live.bilibili.com', + 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36' + }, + 'huya': { + 'User-Agent': 'ExoPlayer', + 'Connection': 'Keep-Alive', + 'Icy-MetaData': '1' + }, + 'douyu': { + 'User-Agent': 'libmpv', + 'Icy-MetaData': '1' + } + } + + # WBI签名相关常量 [^30^] + MIXIN_KEY_ENC_TAB = [ + 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5, 49, + 33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55, 40, + 61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63, 57, 62, 11, + 36, 20, 34, 44, 52 + ] + + def _get_bili_wbi_keys(self): + """获取B站WBI密钥 [^30^]""" + try: + # 检查缓存 + if self.bili_wbi_keys and time.time() < self.bili_wbi_expire: + return self.bili_wbi_keys + + # 从导航接口获取 - 使用特殊UA [^90^] + resp = self.fetch( + 'https://api.bilibili.com/x/web-interface/nav', + headers={ + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', + 'Referer': 'https://www.bilibili.com/' + } + ).json() + + if resp.get('code') != 0: + return None + + img_url = resp['data']['wbi_img']['img_url'] + sub_url = resp['data']['wbi_img']['sub_url'] + + # 提取文件名作为key + img_key = img_url.rsplit('/', 1)[1].split('.')[0] + sub_key = sub_url.rsplit('/', 1)[1].split('.')[0] + + self.bili_wbi_keys = (img_key, sub_key) + self.bili_wbi_expire = time.time() + 86400 # 24小时过期 + + return self.bili_wbi_keys + except Exception as e: + print(f"获取B站WBI密钥失败: {e}") + return None + + def _get_mixin_key(self, orig: str): + """生成mixin_key [^30^]""" + return ''.join([orig[i] for i in self.MIXIN_KEY_ENC_TAB])[:32] + + def _enc_wbi(self, params: dict): + """WBI签名 [^30^]""" + keys = self._get_bili_wbi_keys() + if not keys: + return params + + img_key, sub_key = keys + mixin_key = self._get_mixin_key(img_key + sub_key) + + # 添加时间戳 + params['wts'] = round(time.time()) + + # 排序参数 + params = dict(sorted(params.items())) + + # 过滤特殊字符 + params = { + k: ''.join(filter(lambda c: c not in "!'()*", str(v))) + for k, v in params.items() + } + + # 计算签名 + query = urllib.parse.urlencode(params) + w_rid = hashlib.md5((query + mixin_key).encode()).hexdigest() + + params['w_rid'] = w_rid + return params + + def process_bili(self): + """获取B站分类列表 - 使用WBI签名 [^30^]""" + try: + # 尝试获取分类列表 - 使用特殊UA和WBI签名 + params = {'need_entrance': 1, 'parent_id': 0} + signed_params = self._enc_wbi(params) + + data = self.fetch( + f'{self.hosts["bili"][0]}/room/v1/Area/getList', + params=signed_params, + headers=self.headers[0] + ).json() + + if data.get('code') == 0 and data.get('data'): + # 保存分类数据供后续使用 + self.bili_areas = data['data'] + return ('bili', [{'key': 'cate', 'name': '分类', + 'value': [{'n': i['name'], 'v': str(i['id'])} + for i in data['data']]}]) + return 'bili', None + except Exception as e: + print(f"bili处理错误: {e}") + # 使用默认分类 + return 'bili', [{'key': 'cate', 'name': '分类', + 'value': [{'n': '网游', 'v': '2'}, {'n': '手游', 'v': '3'}, + {'n': '单机', 'v': '6'}, {'n': '娱乐', 'v': '1'}, + {'n': '电台', 'v': '5'}, {'n': '虚拟主播', 'v': '9'}, + {'n': '生活', 'v': '10'}, {'n': '知识', 'v': '11'}, + {'n': '赛事', 'v': '13'}]}] + + def process_douyu(self): + try: + self.dyufdata = self.fetch( + f'{self.referers["douyu"]}/api/cate/list', + headers=self.headers[1] + ).json() + return ('douyu', [{'key': 'cate', 'name': '分类', + 'value': [{'n': i['cate1Name'], 'v': str(i['cate1Id'])} + for i in self.dyufdata['data']['cate1Info']]}]) + except Exception as e: + print(f"douyu错误: {e}") + return 'douyu', None + + def homeContent(self, filter): + result = {} + cateManual = { + "虎牙": "huya", + "斗鱼": "douyu", + "网易": "wangyi", + "B站": "bili" + } + classes = [] + filters = { + 'huya': [{'key': 'cate', 'name': '分类', + 'value': [{'n': '网游', 'v': '1'}, {'n': '单机', 'v': '2'}, + {'n': '娱乐', 'v': '8'}, {'n': '手游', 'v': '3'}]}] + } + + with ThreadPoolExecutor(max_workers=2) as executor: + futures = { + executor.submit(self.process_bili): 'bili', + executor.submit(self.process_douyu): 'douyu' + } + + for future in futures: + platform, filter_data = future.result() + if filter_data: + filters[platform] = filter_data + + for k in cateManual: + classes.append({ + 'type_name': k, + 'type_id': cateManual[k] + }) + + result['class'] = classes + result['filters'] = filters + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, tid, pg, filter, extend): + vdata = [] + result = {} + pagecount = 9999 + result['page'] = pg + result['limit'] = 90 + result['total'] = 999999 + if tid == 'wangyi': + vdata, pagecount = self.wyccContent(tid, pg, filter, extend, vdata) + elif 'bili' in tid: + vdata, pagecount = self.biliContent(tid, pg, filter, extend, vdata) + elif 'huya' in tid: + vdata, pagecount = self.huyaContent(tid, pg, filter, extend, vdata) + elif 'douyu' in tid: + vdata, pagecount = self.douyuContent(tid, pg, filter, extend, vdata) + result['list'] = vdata + result['pagecount'] = pagecount + return result + + def wyccContent(self, tid, pg, filter, extend, vdata): + params = { + 'format': 'json', + 'start': (int(pg) - 1) * 20, + 'size': '20', + } + response = self.fetch(f'{self.hosts[tid]}/api/category/live/', params=params, headers=self.headers[0]).json() + for i in response['lives']: + if i.get('cuteid'): + bvdata = self.buildvod( + vod_id=f"{tid}@@{i['cuteid']}", + vod_name=i.get('title'), + vod_pic=i.get('cover'), + vod_remarks=i.get('nickname'), + style={"type": "rect", "ratio": 1.33} + ) + vdata.append(bvdata) + return vdata, 9999 + + def biliContent(self, tid, pg, filter, extend, vdata): + """B站分类内容 - 使用WBI签名绕过风控 [^30^][^90^]""" + try: + # 分类列表 - 显示子分类 + if extend.get('cate') and pg == '1' and 'click' not in tid: + # 从已保存的分类数据中找到对应分类的子分类 + if hasattr(self, 'bili_areas'): + for area in self.bili_areas: + if str(area['id']) == extend['cate']: + for sub_area in area.get('list', []): + v = self.buildvod( + vod_id=f"click_{tid}@@{extend['cate']}@@{sub_area['id']}", + vod_name=sub_area.get('name'), + vod_pic=sub_area.get('pic'), + vod_tag=1, + style={"type": "oval", "ratio": 1} + ) + vdata.append(v) + return vdata, 1 + # 如果没有找到子分类,直接返回空,让用户进入房间列表 + return vdata, 1 + + # 房间列表 - 使用getList接口并添加WBI签名 [^30^] + if 'click' in tid: + # 子分类房间 + ids = tid.split('_')[1].split('@@') + tid = ids[0] + parent_area_id = ids[1] + area_id = ids[2] + else: + # 默认使用分类ID作为parent_area_id,area_id为0表示该分类下所有 + parent_area_id = extend.get('cate', '2') # 默认网游 + area_id = 0 + + # 构建请求参数并添加WBI签名 [^30^] + params = { + 'parent_area_id': parent_area_id, + 'area_id': area_id, + 'page': pg, + 'platform': 'web', + 'sort_type': 'online' # 按热度排序 + } + signed_params = self._enc_wbi(params) + + # 调用getList接口 + api_url = f'{self.hosts[tid][0]}/xlive/web-interface/v1/second/getList' + data = self.fetch(api_url, params=signed_params, headers=self.headers[0]).json() + + # 如果WBI签名失败,尝试不带签名 + if data.get('code') == -352: + print("WBI签名失败,尝试无签名请求...") + params = { + 'parent_area_id': parent_area_id, + 'area_id': area_id, + 'page': pg, + 'platform': 'web', + 'sort_type': 'online' + } + data = self.fetch(api_url, params=params, headers=self.headers[0]).json() + + if data.get('code') == 0: + room_list = data.get('data', {}).get('list', []) + for room in room_list: + if room.get('roomid'): + # 处理在线人数显示 + online = room.get('online', 0) + if online > 10000: + online_str = f"{online / 10000:.1f}万" + else: + online_str = str(online) + + v = self.buildvod( + f"{tid}@@{room['roomid']}", + room.get('title', '未知标题'), + room.get('cover') or room.get('system_cover'), + f"{online_str}人", + 0, + room.get('uname', ''), + style={"type": "rect", "ratio": 1.33} + ) + vdata.append(v) + + # 检查是否有更多数据 + has_more = data.get('data', {}).get('has_more', 0) + if not has_more: + pagecount = int(pg) + else: + pagecount = 9999 + else: + print(f"B站API返回错误: {data.get('message', '未知错误')} (code: {data.get('code')})") + pagecount = 1 + + return vdata, pagecount + + except Exception as e: + print(f"B站内容获取错误: {e}") + return vdata, 1 + + def huyaContent(self, tid, pg, filter, extend, vdata): + if extend.get('cate') and pg == '1' and 'click' not in tid: + id = extend.get('cate') + data = self.fetch(f'{self.referers[tid]}/liveconfig/game/bussLive?bussType={id}', + headers=self.headers[1]).json() + for i in data['data']: + v = self.buildvod( + vod_id=f"click_{tid}@@{int(i['gid'])}", + vod_name=i.get('gameFullName'), + vod_pic=f'https://huyaimg.msstatic.com/cdnimage/game/{int(i["gid"])}-MS.jpg', + vod_tag=1, + style={"type": "oval", "ratio": 1} + ) + vdata.append(v) + return vdata, 1 + else: + gid = '' + if 'click' in tid: + ids = tid.split('_')[1].split('@@') + tid = ids[0] + gid = f'&gameId={ids[1]}' + data = self.fetch(f'{self.hosts[tid][0]}/cache.php?m=LiveList&do=getLiveListByPage&tagAll=0{gid}&page={pg}', + headers=self.headers[1]).json() + for i in data['data']['datas']: + if i.get('profileRoom'): + v = self.buildvod( + f"{tid}@@{i['profileRoom']}", + i.get('introduction'), + i.get('screenshot'), + str(int(i.get('totalCount', '1')) / 10000) + '万', + 0, + i.get('nick'), + style={"type": "rect", "ratio": 1.33} + + ) + vdata.append(v) + return vdata, 9999 + + def douyuContent(self, tid, pg, filter, extend, vdata): + if extend.get('cate') and pg == '1' and 'click' not in tid: + for i in self.dyufdata['data']['cate2Info']: + if str(i['cate1Id']) == extend['cate']: + v = self.buildvod( + vod_id=f"click_{tid}@@{i['cate2Id']}", + vod_name=i.get('cate2Name'), + vod_pic=i.get('icon'), + vod_remarks=i.get('count'), + vod_tag=1, + style={"type": "oval", "ratio": 1} + ) + vdata.append(v) + return vdata, 1 + else: + path = f'/japi/weblist/apinc/allpage/6/{pg}' + if 'click' in tid: + ids = tid.split('_')[1].split('@@') + tid = ids[0] + path = f'/gapi/rkc/directory/mixList/2_{ids[1]}/{pg}' + url = f'{self.hosts[tid]}{path}' + data = self.fetch(url, headers=self.headers[1]).json() + for i in data['data']['rl']: + v = self.buildvod( + vod_id=f"{tid}@@{i['rid']}", + vod_name=i.get('rn'), + vod_pic=i.get('rs16'), + vod_year=str(int(i.get('ol', 1)) / 10000) + '万', + vod_remarks=i.get('nn'), + style={"type": "rect", "ratio": 1.33} + ) + vdata.append(v) + return vdata, 9999 + + def detailContent(self, ids): + ids = ids[0].split('@@') + if ids[0] == 'wangyi': + vod = self.wyccDetail(ids) + elif ids[0] == 'bili': + vod = self.biliDetail(ids) + elif ids[0] == 'huya': + vod = self.huyaDetail(ids) + elif ids[0] == 'douyu': + vod = self.douyuDetail(ids) + return {'list': [vod]} + + def wyccDetail(self, ids): + try: + vdata = self.getpq(f'{self.hosts[ids[0]]}/{ids[1]}', self.headers[0])('script').eq(-1).text() + + def get_quality_name(vbr): + if vbr <= 600: + return "标清" + elif vbr <= 1000: + return "高清" + elif vbr <= 2000: + return "超清" + else: + return "蓝光" + + data = json.loads(vdata)['props']['pageProps']['roomInfoInitData'] + name = data['live'].get('title', ids[0]) + vod = self.buildvod(vod_name=data.get('keywords_suffix'), vod_remarks=data['live'].get('title'), + vod_content=data.get('description_suffix')) + resolution_data = data['live']['quickplay']['resolution'] + all_streams = {} + sorted_qualities = sorted(resolution_data.items(), + key=lambda x: x[1]['vbr'], + reverse=True) + for quality, data in sorted_qualities: + vbr = data['vbr'] + quality_name = get_quality_name(vbr) + for cdn_name, url in data['cdn'].items(): + if cdn_name not in all_streams and type(url) == str and url.startswith('http'): + all_streams[cdn_name] = [] + if isinstance(url, str) and url.startswith('http'): + all_streams[cdn_name].extend([quality_name, url]) + plists = [] + names = [] + for i, (cdn_name, stream_list) in enumerate(all_streams.items(), 1): + names.append(f'线路{i}') + pstr = f"{name}${ids[0]}@@{self.e64(json.dumps(stream_list))}" + plists.append(pstr) + vod['vod_play_from'] = "$$$".join(names) + vod['vod_play_url'] = "$$$".join(plists) + return vod + except Exception as e: + return self.handle_exception(e) + + def biliDetail(self, ids): + """ + B站直播详情 - 使用playUrl接口获取多清晰度 + """ + try: + room_id = ids[1] + + # 获取房间信息 + info_res = self.fetch( + f'{self.hosts["bili"][0]}/room/v1/Room/get_info?room_id={room_id}', + headers=self.headers[0] + ).json() + + if info_res.get('code') != 0: + return self.handle_exception(Exception("获取房间信息失败")) + + room_info = info_res['data'] + title = room_info.get('title', 'B站直播') + + vod = self.buildvod( + vod_name=title, + type_name=f"{room_info.get('parent_area_name', '')}/{room_info.get('area_name', '')}", + vod_director=room_info.get('uname', ''), + vod_remarks=f"在线{room_info.get('online', 0)}人" + ) + + # 获取播放地址信息 + play_res = self.fetch( + f'{self.hosts["bili"][0]}/room/v1/Room/playUrl?cid={room_id}&qn=10000&platform=web', + headers={ + **self.headers[0], + 'Referer': 'https://live.bilibili.com/', + 'Origin': 'https://live.bilibili.com' + } + ).json() + + if play_res.get('code') != 0: + return self.handle_exception(Exception("获取播放地址失败")) + + play_data = play_res['data'] + accept_quality = play_data.get('accept_quality', ['10000', '400', '250', '150']) + quality_desc = {item['qn']: item['desc'] for item in play_data.get('quality_description', [])} + + # 构建清晰度列表 + qualities = [] + for qn in sorted([int(q) for q in accept_quality], reverse=True): + desc = quality_desc.get(qn, f'清晰度{qn}') + qualities.append(f"{desc}$bili@@{room_id}@@{qn}") + + vod['vod_play_from'] = 'B站直播' + vod['vod_play_url'] = '#'.join(qualities) + return vod + + except Exception as e: + print(f"B站详情错误: {e}") + return self.handle_exception(e) + + def huyaDetail(self, ids): + """ + 虎牙播放详情 - 参考最新三合一.js重构 + 支持多线路多清晰度选择 + 核心算法:通过房间信息API获取uid、streamName和rateArray,为每个清晰度生成签名URL + 清晰度说明: + - 蓝光8M/6M/4M/10M = 8000/6000/4000/10000 kbps = 1080P+ + - 蓝光 = 3000 kbps = 1080P + - 超清 = 2000 kbps = 1080P (官方标准) + - 高清 = 1200 kbps = 720P + - 标清/流畅 = 500-800 kbps = 480P/540P + """ + try: + room_id = ids[1] + + # 1. 获取房间信息 + api_url = f'{self.hosts[ids[0]][1]}/cache.php?m=Live&do=profileRoom&roomid={room_id}' + res = self.fetch(api_url, headers=self.headers[0]) + + if res.status_code != 200: + return self.handle_exception(Exception(f"API请求失败: {res.status_code}")) + + data = res.json() + if not data or not data.get('data'): + return self.handle_exception(Exception("房间数据为空")) + + room_data = data['data'] + + # 2. 提取关键信息 + uid = room_data.get('profileInfo', {}).get('uid') + stream_info = room_data.get('stream', {}) + live_data = room_data.get('liveData', {}) + + if not uid: + return self.handle_exception(Exception("缺少uid")) + + # 3. 获取streamName和码率信息 + base_stream_list = stream_info.get('baseSteamInfoList', []) + if not base_stream_list: + return self.handle_exception(Exception("无直播流信息")) + + # 获取第一个CDN的streamName作为基准 + base_stream = base_stream_list[0] + stream_name = base_stream.get('sStreamName') + if not stream_name: + return self.handle_exception(Exception("无法获取streamName")) + + # 4. 构建VOD对象 + vod = self.buildvod( + vod_name=live_data.get('introduction', '虎牙直播'), + type_name=live_data.get('gameFullName', ''), + vod_director=live_data.get('nick', ''), + vod_remarks=live_data.get('contentIntro', ''), + ) + + # 5. 获取所有CDN线路 + cdn_list = [] + for stream in base_stream_list: + cdn_type = stream.get('sCdnType', 'AL') + flv_url = stream.get('sFlvUrl', '') + hls_url = stream.get('sHlsUrl', '') + stream_name_cdn = stream.get('sStreamName', stream_name) + + if flv_url: + cdn_list.append({ + 'cdn': cdn_type, + 'flv_base': flv_url, + 'hls_base': hls_url, + 'stream_name': stream_name_cdn, + 'priority': stream.get('iWebPriorityRate', 0) + }) + + # 按优先级排序 + cdn_list.sort(key=lambda x: x['priority'], reverse=True) + + # 6. 获取清晰度列表 (rateArray) + rate_array = stream_info.get('rateArray', []) + + # 如果没有rateArray,尝试从vMultiStreamInfo获取 + if not rate_array and 'vMultiStreamInfo' in room_data: + rate_array = room_data['vMultiStreamInfo'] + + # 如果仍然没有,使用默认清晰度(按虎牙官方标准) + if not rate_array: + rate_array = [ + {'sDisplayName': '蓝光4M', 'iBitRate': 4000}, + {'sDisplayName': '蓝光', 'iBitRate': 3000}, + {'sDisplayName': '超清', 'iBitRate': 2000}, # 2000kbps = 1080P + {'sDisplayName': '高清', 'iBitRate': 1200}, # 1200kbps = 720P + {'sDisplayName': '流畅', 'iBitRate': 500} + ] + + # 过滤和排序清晰度 + # 虎牙的rateArray中,iBitRate就是码率值,sDisplayName是显示名称 + # 需要确保:超清=2000kbps(1080P),高清=1200kbps(720P) + filtered_rates = [] + seen_bitrates = set() + + for rate in rate_array: + bit_rate = rate.get('iBitRate', 0) + name = rate.get('sDisplayName', '') + + # 跳过重复的码率 + if bit_rate in seen_bitrates: + continue + + # 修正清晰度名称,确保符合虎牙标准 + # 2000kbps应该是超清(1080P),不是高清 + if bit_rate == 2000 and ('高清' in name or '720' in name): + name = '超清' # 强制修正为超清 + elif bit_rate == 1200 and ('标清' in name or '480' in name): + name = '高清' # 1200kbps对应高清 + elif bit_rate == 2000 and name == '原画': + name = '超清' # 修正原画为超清 + + seen_bitrates.add(bit_rate) + filtered_rates.append({ + 'sDisplayName': name, + 'iBitRate': bit_rate + }) + + # 按码率从高到低排序 + sorted_rates = sorted(filtered_rates, key=lambda x: x['iBitRate'], reverse=True) + + # 7. 为每个CDN生成各清晰度的播放URL + play_lines = [] + line_names = [] + + for cdn_idx, cdn in enumerate(cdn_list[:3]): # 最多取3个CDN + cdn_name = cdn['cdn'] + line_names.append(f"线路{cdn_idx + 1}({cdn_name})") + + qualities = [] + for rate in sorted_rates: + quality_name = rate['sDisplayName'] + bit_rate = rate['iBitRate'] + + # 生成该清晰度的URL + quality_url = self._generate_huya_play_url( + cdn, uid, stream_name, bit_rate + ) + + qualities.extend([quality_name, quality_url]) + + # 编码该线路的所有清晰度 + encoded_qualities = self.e64(json.dumps(qualities)) + play_lines.append(f"{live_data.get('introduction', '直播')}${ids[0]}@@{encoded_qualities}") + + # 8. 构建播放数据 + vod['vod_play_from'] = "$$$".join(line_names) + vod['vod_play_url'] = "$$$".join(play_lines) + + return vod + + except Exception as e: + return self.handle_exception(e) + + def _generate_huya_play_url(self, cdn, uid, stream_name, bit_rate): + """ + 生成虎牙播放URL,参考最新三合一.js算法 + 关键:ratio参数必须正确设置为iBitRate值(如2000、4000等) + """ + # 基础URL构建 + flv_base = cdn['flv_base'] + stream = cdn['stream_name'] + + # 生成时间戳和签名参数 + timestamp = int(time.time()) + seqid = f"{uid}{timestamp}" + ss = hashlib.md5(f"{seqid}|huya_adr|102".encode()).hexdigest() + ws_time = hex(timestamp + 21600)[2:] # 16进制,有效期6小时 + + # 计算wsSecret + ws_secret = hashlib.md5( + f"DWq8BcJ3h6DJt6TY_{uid}_{stream_name}_{ss}_{ws_time}".encode() + ).hexdigest() + + # 构建基础URL + base_url = f"{flv_base}/{stream}.flv" + + # 关键修复:ratio参数直接使用iBitRate值 + # 超清=2000,高清=1200,蓝光=3000/4000/6000/8000 + if bit_rate > 0: + ratio_param = f"ratio={bit_rate}" + else: + # 原画/0码率时,使用默认2000或从URL推断 + ratio_param = "ratio=2000" + + # 构建完整URL + play_url = ( + f"{base_url}?{ratio_param}&wsSecret={ws_secret}&wsTime={ws_time}" + f"&ctype=huya_adr&seqid={seqid}&uid={uid}" + f"&fs=bgct&ver=1&t=102" + ) + + return play_url + + def douyuDetail(self, ids): + """ + 斗鱼播放详情 - 参考最新三合一.js重构 + 核心算法:设备ID生成 -> 获取加密密钥 -> 计算签名 -> 获取播放地址 + 修复:切换分辨率只能播放1秒的问题 + 方案:存储房间号和码率信息,在playerContent中实时获取对应码率的URL + """ + try: + channel = ids[1] + headers = self.gethr(0, zr=f'{self.hosts[ids[0]]}/{channel}') + + # 1. 初始化会话和设备ID (参考JS中的initialize和setupDeviceId) + session = {} + + # 请求首页获取Cookie + try: + home_res = self.fetch(f'{self.hosts[ids[0]]}/{channel}', headers=headers) + if home_res.headers.get('Set-Cookie'): + cookie_str = home_res.headers.get('Set-Cookie') + # 解析dy_did + did_match = re.search(r'dy_did=([a-f0-9]{32})', cookie_str) + if did_match: + device_id = did_match.group(1) + else: + device_id = self._generate_random_hex(32) + else: + device_id = self._generate_random_hex(32) + except: + device_id = self._generate_random_hex(32) + + session['dy_did'] = device_id + session['mantine-color-scheme-value'] = 'light' + + # 2. 获取房间基本信息 + betard_res = self.fetch(f'{self.hosts[ids[0]]}/betard/{channel}', headers=headers).json() + if not betard_res or not betard_res.get('room'): + return self.handle_exception(Exception("获取房间信息失败")) + + room_info = betard_res['room'] + vname = room_info.get('room_name', '斗鱼直播') + + vod = self.buildvod( + vod_name=vname, + vod_remarks=room_info.get('second_lvl_name', ''), + vod_director=room_info.get('nickname', ''), + ) + + # 3. 获取安全密钥 (参考JS中的getSecurityKey) + sec_url = f"{self.hosts[ids[0]]}/wgapi/livenc/liveweb/websec/getEncryption?did={device_id}" + sec_res = self.fetch(sec_url, headers=headers).json() + + if not sec_res or sec_res.get('error') != 0: + return self.handle_exception(Exception("获取加密密钥失败")) + + security_data = sec_res['data'] + secret_key = security_data.get('key') + random_str = security_data.get('rand_str') + enc_time = security_data.get('enc_time', 1) + enc_data = security_data.get('enc_data') + + # 4. 计算签名 (参考JS中的computeSignature) + current_time = int(time.time()) + + # 迭代计算MD5 + current = random_str + for _ in range(enc_time): + current = hashlib.md5(f"{current}{secret_key}".encode()).hexdigest() + + signature = hashlib.md5(f"{current}{secret_key}{channel}{current_time}".encode()).hexdigest() + + # 5. 请求播放地址 (参考JS中的requestStreamData) + play_payload = { + 'enc_data': enc_data, + 'tt': str(current_time), + 'did': device_id, + 'auth': signature, + 'cdn': '', + 'rate': '', + 'hevc': '0', + 'fa': '0', + 'ive': '0' + } + + play_api = f"{self.hosts[ids[0]]}/lapi/live/getH5PlayV1/{channel}" + + # 构建请求头带Cookie + play_headers = headers.copy() + cookie_str = '; '.join([f"{k}={v}" for k, v in session.items()]) + play_headers['Cookie'] = cookie_str + play_headers['Content-Type'] = 'application/x-www-form-urlencoded' + + play_res = requests.post(play_api, data=play_payload, headers=play_headers, timeout=10).json() + + if not play_res or play_res.get('error') != 0: + # 尝试旧版API + play_res = self._try_legacy_douyu_api(channel, device_id, signature, current_time, play_headers) + if not play_res: + return self.handle_exception(Exception("获取播放地址失败")) + + stream_info = play_res.get('data', {}) + + # 6. 检查并更新设备ID (参考JS中的checkAndUpdateDeviceId) + rtmp_live = stream_info.get('rtmp_live', '') + if rtmp_live: + did_match = re.search(r'did=([a-f0-9]{32})', rtmp_live) + if did_match and did_match.group(1) != device_id: + device_id = did_match.group(1) + session['dy_did'] = device_id + # 重新请求 + play_payload['did'] = device_id + play_res = requests.post(play_api, data=play_payload, headers=play_headers, timeout=10).json() + if play_res and play_res.get('error') == 0: + stream_info = play_res.get('data', {}) + + # 7. 提取播放URL和多码率信息 + stream_url = None + if stream_info.get('rtmp_url') and stream_info.get('rtmp_live'): + stream_url = f"{stream_info['rtmp_url']}/{stream_info['rtmp_live']}" + elif stream_info.get('hls_url'): + stream_url = stream_info['hls_url'] + + if not stream_url: + return self.handle_exception(Exception("无法获取播放地址")) + + # 8. 构建多码率选项 + multirates = stream_info.get('multirates', []) + + # 关键修复:存储房间号和码率信息,而不是直接存储URL + # 这样在切换清晰度时可以重新获取对应码率的签名URL + qualities = [] + + if multirates: + # 按码率排序 + sorted_rates = sorted(multirates, key=lambda x: x.get('bit', 0), reverse=True) + for rate in sorted_rates: + bit_rate = rate.get('rate', -1) + name = rate.get('name', f"{bit_rate}P") + + # 存储格式:码率值,用于playerContent中重新获取URL + # 使用特殊标记#来区分这是码率值而不是URL + qualities.extend([name, f"#{bit_rate}"]) + else: + # 只有原画 + qualities = ['原画', '#-1'] + + # 同时存储房间号和设备信息,用于重新获取URL + # 格式:房间号|设备ID|签名信息(base64编码) + session_info = { + 'channel': channel, + 'device_id': device_id, + 'secret_key': secret_key, + 'random_str': random_str, + 'enc_time': enc_time, + 'enc_data': enc_data + } + encoded_session = self.e64(json.dumps(session_info)) + + # 9. 构建播放数据 + # vod_play_url格式:房间名$平台@@base64(清晰度列表)@@base64(会话信息) + encoded_qualities = self.e64(json.dumps(qualities)) + vod['vod_play_from'] = '斗鱼直播' + vod['vod_play_url'] = f"{vname}${ids[0]}@@{encoded_qualities}@@{encoded_session}" + + return vod + + except Exception as e: + return self.handle_exception(e) + + def _generate_random_hex(self, length): + """生成随机十六进制字符串""" + hex_chars = '0123456789abcdef' + return ''.join(random.choice(hex_chars) for _ in range(length)) + + def _try_legacy_douyu_api(self, channel, device_id, signature, timestamp, headers): + """尝试使用旧版API获取播放地址""" + try: + legacy_payload = { + 'did': device_id, + 'tt': str(timestamp), + 'sign': signature, + 'cdn': '', + 'rate': '-1', + 'ver': 'Douyu_223061205', + 'iar': '1', + 'ive': '1', + 'hevc': '0', + 'fa': '0' + } + legacy_api = f"https://www.douyu.com/lapi/live/getH5Play/{channel}" + res = requests.post(legacy_api, data=legacy_payload, headers=headers, timeout=10) + return res.json() if res.status_code == 200 else None + except: + return None + + def _get_douyu_play_url(self, channel, device_id, secret_key, random_str, enc_time, enc_data, rate): + """ + 获取斗鱼指定码率的播放URL(带签名) + 用于切换清晰度时重新获取URL + """ + try: + current_time = int(time.time()) + + # 重新计算签名 + current = random_str + for _ in range(enc_time): + current = hashlib.md5(f"{current}{secret_key}".encode()).hexdigest() + + signature = hashlib.md5(f"{current}{secret_key}{channel}{current_time}".encode()).hexdigest() + + # 构建请求 + play_payload = { + 'enc_data': enc_data, + 'tt': str(current_time), + 'did': device_id, + 'auth': signature, + 'cdn': '', + 'rate': str(rate) if rate > 0 else '', + 'hevc': '0', + 'fa': '0', + 'ive': '0' + } + + play_api = f"https://www.douyu.com/lapi/live/getH5PlayV1/{channel}" + + headers = { + 'User-Agent': self.headers[0]['User-Agent'], + 'Referer': f'https://www.douyu.com/{channel}', + 'Origin': 'https://www.douyu.com', + 'Cookie': f'dy_did={device_id}; mantine-color-scheme-value=light', + 'Content-Type': 'application/x-www-form-urlencoded' + } + + play_res = requests.post(play_api, data=play_payload, headers=headers, timeout=10).json() + + if not play_res or play_res.get('error') != 0: + # 尝试旧版API + return self._get_douyu_play_url_legacy(channel, device_id, signature, current_time, rate) + + stream_info = play_res.get('data', {}) + + # 检查设备ID是否匹配 + if stream_info.get('rtmp_live'): + did_match = re.search(r'did=([a-f0-9]{32})', stream_info['rtmp_live']) + if did_match and did_match.group(1) != device_id: + # 设备ID不匹配,使用新设备ID重新获取 + return self._get_douyu_play_url(channel, did_match.group(1), secret_key, random_str, enc_time, enc_data, rate) + + if stream_info.get('rtmp_url') and stream_info.get('rtmp_live'): + return f"{stream_info['rtmp_url']}/{stream_info['rtmp_live']}" + elif stream_info.get('hls_url'): + return stream_info['hls_url'] + + return None + except Exception as e: + print(f"获取斗鱼播放URL失败: {e}") + return None + + def _get_douyu_play_url_legacy(self, channel, device_id, signature, timestamp, rate): + """使用旧版API获取斗鱼播放URL""" + try: + legacy_payload = { + 'did': device_id, + 'tt': str(timestamp), + 'sign': signature, + 'cdn': '', + 'rate': str(rate) if rate > 0 else '-1', + 'ver': 'Douyu_223061205', + 'iar': '1', + 'ive': '1', + 'hevc': '0', + 'fa': '0' + } + legacy_api = f"https://www.douyu.com/lapi/live/getH5Play/{channel}" + + headers = { + 'User-Agent': self.headers[0]['User-Agent'], + 'Referer': f'https://www.douyu.com/{channel}', + 'Cookie': f'dy_did={device_id}', + 'Content-Type': 'application/x-www-form-urlencoded' + } + + res = requests.post(legacy_api, data=legacy_payload, headers=headers, timeout=10) + if res.status_code == 200: + data = res.json() + if data.get('error') == 0: + stream_info = data.get('data', {}) + if stream_info.get('rtmp_url') and stream_info.get('rtmp_live'): + return f"{stream_info['rtmp_url']}/{stream_info['rtmp_live']}" + return None + except: + return None + + def searchContent(self, key, quick, pg="1"): + pass + + def playerContent(self, flag, id, vipFlags): + try: + ids = id.split('@@') + p = 1 + if ids[0] in ['wangyi']: + p, url = 0, json.loads(self.d64(ids[1])) + elif ids[0] == 'bili': + p, url = self.biliplay(ids) + elif ids[0] == 'huya': + p, url = self.huyaplay(ids) + elif ids[0] == 'douyu': + p, url = self.douyuplay(ids) + return {'parse': p, 'url': url, 'header': self.playheaders[ids[0]]} + except Exception as e: + return {'parse': 1, 'url': self.excepturl, 'header': self.headers[0]} + + def biliplay(self, ids): + """ + B站播放解析 - 使用playUrl接口获取指定清晰度直播流 + ids: [平台, 房间号, 清晰度qn] + 支持多线路返回 + """ + try: + room_id = ids[1] + qn = ids[2] if len(ids) > 2 else '10000' + + # 使用playUrl接口获取直播流 + play_url = f'{self.hosts["bili"][0]}/room/v1/Room/playUrl?cid={room_id}&qn={qn}&platform=web' + data = self.fetch(play_url, headers={ + **self.headers[0], + 'Referer': 'https://live.bilibili.com/', + 'Origin': 'https://live.bilibili.com' + }).json() + + if data.get('code') != 0: + return 1, self.excepturl + + play_data = data['data'] + durl_list = play_data.get('durl', []) + + if not durl_list: + return 1, self.excepturl + + # 构建多线路结果 [线路1, URL1, 线路2, URL2, ...] + urls = [] + for idx, item in enumerate(durl_list, 1): + url = item.get('url') + if url: + urls.extend([f'线路{idx}', url]) + + # 如果只有一条线路,直接返回URL + if len(urls) == 2: + return 0, urls[1] # 直接返回URL字符串 + + return 0, urls + + except Exception as e: + print(f"B站播放错误: {e}") + return 1, self.excepturl + + def huyaplay(self, ids): + """ + 虎牙播放解析 - 返回所有清晰度选项供用户选择 + ids[1] 格式: base64编码的 [清晰度名称1, URL1, 清晰度名称2, URL2, ...] + """ + try: + # ids[1] 是编码后的播放地址列表 [名称1, URL1, 名称2, URL2, ...] + decoded = json.loads(self.d64(ids[1])) + # decoded 是一个列表,奇数索引是名称,偶数索引是URL + return 0, decoded + except Exception as e: + print(f"虎牙播放解析错误: {e}") + return 1, self.excepturl + + def douyuplay(self, ids): + """ + 斗鱼播放解析 - 实时获取对应码率的播放URL + ids格式: [平台, base64(清晰度列表), base64(会话信息)] + 清晰度列表: [名称1, #码率1, 名称2, #码率2, ...] + #表示这是码率值,需要重新获取URL + """ + try: + if len(ids) < 3: + # 兼容旧格式 + decoded = json.loads(self.d64(ids[1])) + return 0, decoded + + # 解析清晰度列表和会话信息 + qualities = json.loads(self.d64(ids[1])) + session_info = json.loads(self.d64(ids[2])) + + channel = session_info['channel'] + device_id = session_info['device_id'] + secret_key = session_info['secret_key'] + random_str = session_info['random_str'] + enc_time = session_info['enc_time'] + enc_data = session_info['enc_data'] + + # 为每个清晰度实时获取播放URL + result = [] + for i in range(0, len(qualities), 2): + name = qualities[i] + rate_marker = qualities[i + 1] + + # 解析码率值(去掉#前缀) + if rate_marker.startswith('#'): + rate = int(rate_marker[1:]) + else: + rate = -1 + + # 实时获取对应码率的URL + play_url = self._get_douyu_play_url( + channel, device_id, secret_key, random_str, + enc_time, enc_data, rate + ) + + if play_url: + result.extend([name, play_url]) + + if not result: + return 1, self.excepturl + + return 0, result + except Exception as e: + print(f"斗鱼播放解析错误: {e}") + return 1, self.excepturl + + def localProxy(self, param): + pass + + def e64(self, text): + try: + text_bytes = text.encode('utf-8') + encoded_bytes = b64encode(text_bytes) + return encoded_bytes.decode('utf-8') + except Exception as e: + print(f"Base64编码错误: {str(e)}") + return "" + + def d64(self, encoded_text): + try: + encoded_bytes = encoded_text.encode('utf-8') + decoded_bytes = b64decode(encoded_bytes) + return decoded_bytes.decode('utf-8') + except Exception as e: + print(f"Base64解码错误: {str(e)}") + return "" + + def josn_to_params(self, params, skip_empty=False): + query = [] + for k, v in params.items(): + if skip_empty and not v: + continue + query.append(f"{k}={v}") + return "&".join(query) + + def params_to_json(self, query_string): + parsed_data = parse_qs(query_string) + result = {key: value[0] for key, value in parsed_data.items()} + return result + + def buildvod(self, vod_id='', vod_name='', vod_pic='', vod_year='', vod_tag='', vod_remarks='', style='', + type_name='', vod_area='', vod_actor='', vod_director='', + vod_content='', vod_play_from='', vod_play_url=''): + vod = { + 'vod_id': vod_id, + 'vod_name': vod_name, + 'vod_pic': vod_pic, + 'vod_year': vod_year, + 'vod_tag': 'folder' if vod_tag else '', + 'vod_remarks': vod_remarks, + 'style': style, + 'type_name': type_name, + 'vod_area': vod_area, + 'vod_actor': vod_actor, + 'vod_director': vod_director, + 'vod_content': vod_content, + 'vod_play_from': vod_play_from, + 'vod_play_url': vod_play_url + } + vod = {key: value for key, value in vod.items() if value} + return vod + + def getpq(self, url, headers=None, cookies=None): + data = self.fetch(url, headers=headers, cookies=cookies).text + try: + return pq(data) + except Exception as e: + print(f"解析页面错误: {str(e)}") + return pq(data.encode('utf-8')) + + def gethr(self, index, rf='', zr=''): + headers = self.headers[index] + if zr: + headers['referer'] = zr + else: + headers['referer'] = f"{self.referers[rf]}/" + return headers + + def handle_exception(self, e): + print(f"报错: {str(e)}") + return {'vod_play_from': '哎呀翻车啦', 'vod_play_url': f'翻车啦${self.excepturl}'} \ No newline at end of file diff --git a/tianjitop/llllo4k/lib/XXKT.json b/tianjitop/llllo4k/lib/XXKT.json new file mode 100644 index 00000000..7daba976 --- /dev/null +++ b/tianjitop/llllo4k/lib/XXKT.json @@ -0,0 +1,1050 @@ +{ + "class": [ + { + "type_name": "1年级语文", + "type_id": "1年级语文" + }, + { + "type_name": "1年级数学", + "type_id": "1年级数学" + }, + { + "type_name": "1年级英语", + "type_id": "1年级英语" + }, + { + "type_name": "2年级语文", + "type_id": "2年级语文" + }, + { + "type_name": "2年级数学", + "type_id": "2年级数学" + }, + { + "type_name": "2年级英语", + "type_id": "2年级英语" + }, + { + "type_name": "3年级语文", + "type_id": "3年级语文" + }, + { + "type_name": "3年级数学", + "type_id": "3年级数学" + }, + { + "type_name": "3年级英语", + "type_id": "3年级英语" + }, + { + "type_name": "4年级语文", + "type_id": "4年级语文" + }, + { + "type_name": "4年级数学", + "type_id": "4年级数学" + }, + { + "type_name": "4年级英语", + "type_id": "4年级英语" + }, + { + "type_name": "5年级语文", + "type_id": "5年级语文" + }, + { + "type_name": "5年级数学", + "type_id": "5年级数学" + }, + { + "type_name": "5年级英语", + "type_id": "5年级英语" + }, + { + "type_name": "6年级语文", + "type_id": "6年级语文" + }, + { + "type_name": "6年级数学", + "type_id": "6年级数学" + }, + { + "type_name": "6年级英语", + "type_id": "6年级英语" + } + ], + "filters": { + "1年级语文": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版1年级语文" + }, + { + "n": "人教版", + "v": "人教版1年级语文" + }, + { + "n": "北师大版", + "v": "北师大版1年级语文" + }, + { + "n": "苏教版", + "v": "苏教版1年级语文" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "1年级英语": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版1年级英语" + }, + { + "n": "人教版", + "v": "人教版1年级英语" + }, + { + "n": "北师大版", + "v": "北师大版1年级英语" + }, + { + "n": "苏教版", + "v": "苏教版1年级英语" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "1年级数学": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版1年级数学" + }, + { + "n": "人教版", + "v": "人教版1年级数学" + }, + { + "n": "北师大版", + "v": "北师大版1年级数学" + }, + { + "n": "苏教版", + "v": "苏教版1年级数学" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "2年级语文": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版2年级语文" + }, + { + "n": "人教版", + "v": "人教版2年级语文" + }, + { + "n": "北师大版", + "v": "北师大版2年级语文" + }, + { + "n": "苏教版", + "v": "苏教版2年级语文" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "2年级英语": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版2年级英语" + }, + { + "n": "人教版", + "v": "人教版2年级英语" + }, + { + "n": "北师大版", + "v": "北师大版2年级英语" + }, + { + "n": "苏教版", + "v": "苏教版2年级英语" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "2年级数学": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版2年级数学" + }, + { + "n": "人教版", + "v": "人教版2年级数学" + }, + { + "n": "北师大版", + "v": "北师大版2年级数学" + }, + { + "n": "苏教版", + "v": "苏教版2年级数学" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "3年级语文": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版3年级语文" + }, + { + "n": "人教版", + "v": "人教版3年级语文" + }, + { + "n": "北师大版", + "v": "北师大版3年级语文" + }, + { + "n": "苏教版", + "v": "苏教版3年级语文" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "3年级英语": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版3年级英语" + }, + { + "n": "人教版", + "v": "人教版3年级英语" + }, + { + "n": "北师大版", + "v": "北师大版3年级英语" + }, + { + "n": "苏教版", + "v": "苏教版3年级英语" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "3年级数学": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版3年级数学" + }, + { + "n": "人教版", + "v": "人教版3年级数学" + }, + { + "n": "北师大版", + "v": "北师大版3年级数学" + }, + { + "n": "苏教版", + "v": "苏教版3年级数学" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "4年级语文": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版4年级语文" + }, + { + "n": "人教版", + "v": "人教版4年级语文" + }, + { + "n": "北师大版", + "v": "北师大版4年级语文" + }, + { + "n": "苏教版", + "v": "苏教版4年级语文" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "4年级英语": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版4年级英语" + }, + { + "n": "人教版", + "v": "人教版4年级英语" + }, + { + "n": "北师大版", + "v": "北师大版4年级英语" + }, + { + "n": "苏教版", + "v": "苏教版4年级英语" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "4年级数学": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版4年级数学" + }, + { + "n": "人教版", + "v": "人教版4年级数学" + }, + { + "n": "北师大版", + "v": "北师大版4年级数学" + }, + { + "n": "苏教版", + "v": "苏教版4年级数学" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "5年级语文": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版5年级语文" + }, + { + "n": "人教版", + "v": "人教版5年级语文" + }, + { + "n": "北师大版", + "v": "北师大版5年级语文" + }, + { + "n": "苏教版", + "v": "苏教版5年级语文" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "5年级英语": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版5年级英语" + }, + { + "n": "人教版", + "v": "人教版5年级英语" + }, + { + "n": "北师大版", + "v": "北师大版5年级英语" + }, + { + "n": "苏教版", + "v": "苏教版5年级英语" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "5年级数学": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版5年级数学" + }, + { + "n": "人教版", + "v": "人教版5年级数学" + }, + { + "n": "北师大版", + "v": "北师大版5年级数学" + }, + { + "n": "苏教版", + "v": "苏教版5年级数学" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "6年级语文": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版6年级语文" + }, + { + "n": "人教版", + "v": "人教版6年级语文" + }, + { + "n": "北师大版", + "v": "北师大版6年级语文" + }, + { + "n": "苏教版", + "v": "苏教版6年级语文" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "6年级英语": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版6年级英语" + }, + { + "n": "人教版", + "v": "人教版6年级英语" + }, + { + "n": "北师大版", + "v": "北师大版6年级英语" + }, + { + "n": "苏教版", + "v": "苏教版6年级英语" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ], + "6年级数学": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "沪教版", + "v": "沪教版6年级数学" + }, + { + "n": "人教版", + "v": "人教版6年级数学" + }, + { + "n": "北师大版", + "v": "北师大版6年级数学" + }, + { + "n": "苏教版", + "v": "苏教版6年级数学" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/tianjitop/llllo4k/lib/XZYS.json b/tianjitop/llllo4k/lib/XZYS.json new file mode 100644 index 00000000..09bd1bb4 --- /dev/null +++ b/tianjitop/llllo4k/lib/XZYS.json @@ -0,0 +1,6 @@ +{ + "线路数组": "<a data-toggle=\"tab\"&&/a>", + "线路标题": ">&&<", + "分类url": "http://dyxz.tv/list/{cateId}_{catePg}.html", + "分类": "电影$1#电视剧$2#动漫$3#综艺$4" +} \ No newline at end of file diff --git a/tianjitop/llllo4k/lib/YLYS.json b/tianjitop/llllo4k/lib/YLYS.json new file mode 100644 index 00000000..44f77060 --- /dev/null +++ b/tianjitop/llllo4k/lib/YLYS.json @@ -0,0 +1,7 @@ +{ + "请求头": "User-Agent$MOBILE_UA", + "编码": "UTF-8", + "分类": "电影$1#电视剧$2#综艺$3#动漫$4", + "类型": "动作片$6#喜剧片$7#爱情片$8#科幻片$9#奇幻片$10#恐怖片$11#剧情片$12#战争片$20#动画片$26#悬疑片$22#冒险片$23#犯罪片$24#惊悚片$45#歌舞片$46#灾难片$47#网络片$48||国产剧$13#港台剧$14#日剧$15#韩剧$33#欧美剧$16#泰剧$34#新马剧$35#其他剧$25||内地综艺$27#港台综艺$28#日本综艺$29#韩国综艺$36#欧美综艺$30#新马泰综艺$37#其他综艺$38||国产动漫$31#日本动漫$32#韩国动漫$39#港台动漫$40#新马泰动漫$41#欧美动漫$42#其他动漫$43", + "分类url": "https://www.ylys.tv/vodshow/{cateId}-{area}-{by}-{class}-{lang}-{letter}---{catePg}---{year}.html" +} \ No newline at end of file diff --git a/tianjitop/llllo4k/lib/YST.json b/tianjitop/llllo4k/lib/YST.json new file mode 100644 index 00000000..4519779c --- /dev/null +++ b/tianjitop/llllo4k/lib/YST.json @@ -0,0 +1,17 @@ +{ + "首页": "0", + // "播放链接前缀": "https://www.gyf.lol", + "数组": "data\":{\"tit&&s_log", + "图片": "https://p0.ssl.cdn.btime.com/+ssl.cdn.btime.com/&&\"", + "副标题": "le\":\"&&\"", + "标题": "text\":\"&&\"", + "链接": "item.btime.com/&&\"", + "链接前缀": "https://app.api.btime.com/video/play?callback=jQuery36009651202523243325_1747927554988&id=", + // "线路标题": "</i>&&<span", + "播放数组": "video_streams&&audio_streams", + "播放列表": "stream&&duration", + "播放标题": "stream_vbt\":\"&&\"", + "播放链接": "url\":\"&&\"", + "分类url": "https://pc.api.btime.com/btimeweb/infoFlow?callback=jQuery36002244958011106073_1747920210579&list_id={cateId}&refresh={catePg}&count=2000&expands=pageinfo&_=1747920210580", + "分类": "2025$btv_08da67cea600bf3c78973427bfaba12d_s0_2025#2024$btv_08da67cea600bf3c78973427bfaba12d_s0_2024#2023$btv_08da67cea600bf3c78973427bfaba12d_s0_2023#2022$btv_08da67cea600bf3c78973427bfaba12d_s0_2022#2021$btv_08da67cea600bf3c78973427bfaba12d_s0_2021#2020$btv_08da67cea600bf3c78973427bfaba12d_s0_2020#2019$btv_08da67cea600bf3c78973427bfaba12d_s0_2019#2018$btv_08da67cea600bf3c78973427bfaba12d_s0_2018" +} \ No newline at end of file diff --git a/tianjitop/llllo4k/lib/api.txt b/tianjitop/llllo4k/lib/api.txt new file mode 100644 index 00000000..7c02b2d3 --- /dev/null +++ b/tianjitop/llllo4k/lib/api.txt @@ -0,0 +1 @@ +VxbsqiZ42C0OKBc6CG3cFPKkha5C2beoJ69nC2ts1mhrTImObDRz3+ZyAZITstS+ \ No newline at end of file diff --git a/tianjitop/llllo4k/lib/app.txt b/tianjitop/llllo4k/lib/app.txt new file mode 100644 index 00000000..44ef9375 --- /dev/null +++ b/tianjitop/llllo4k/lib/app.txt @@ -0,0 +1,4 @@ +{ + "domain": "http://103.45.131.38:50001", + "enabled": true +} \ No newline at end of file diff --git a/tianjitop/llllo4k/lib/app_dyttandroid.txt b/tianjitop/llllo4k/lib/app_dyttandroid.txt new file mode 100644 index 00000000..972aa719 --- /dev/null +++ b/tianjitop/llllo4k/lib/app_dyttandroid.txt @@ -0,0 +1,4 @@ +{ + "domain": "http://122.228.193.211:18008", + "enabled": true +} \ No newline at end of file diff --git a/tianjitop/llllo4k/lib/app_guwozhuijuandroid.txt b/tianjitop/llllo4k/lib/app_guwozhuijuandroid.txt new file mode 100644 index 00000000..d06c203c --- /dev/null +++ b/tianjitop/llllo4k/lib/app_guwozhuijuandroid.txt @@ -0,0 +1,4 @@ +{ + "domain": "http://43.240.156.40:18004", + "enabled": true +} \ No newline at end of file diff --git a/tianjitop/llllo4k/lib/app_xpg_android.txt b/tianjitop/llllo4k/lib/app_xpg_android.txt new file mode 100644 index 00000000..972aa719 --- /dev/null +++ b/tianjitop/llllo4k/lib/app_xpg_android.txt @@ -0,0 +1,4 @@ +{ + "domain": "http://122.228.193.211:18008", + "enabled": true +} \ No newline at end of file diff --git a/tianjitop/llllo4k/lib/az5.txt b/tianjitop/llllo4k/lib/az5.txt new file mode 100644 index 00000000..2ad9d734 --- /dev/null +++ b/tianjitop/llllo4k/lib/az5.txt @@ -0,0 +1,4 @@ +{ + "domain": "http://43.240.158.156:8002", + "enabled": true +} \ No newline at end of file diff --git a/tianjitop/llllo4k/lib/cookie.txt b/tianjitop/llllo4k/lib/cookie.txt new file mode 100644 index 00000000..0dd5280b --- /dev/null +++ b/tianjitop/llllo4k/lib/cookie.txt @@ -0,0 +1 @@ +{"nickname":"抖动张","mid":"546666766","cookie":"DedeUserID\u003d546666766;DedeUserID__ckMd5\u003d8abadf385c8cbcee;Expires\u003d1794468426;SESSDATA\u003de8759cbd,1794468426,bd62d*51CjAAcPu-7QmaJSz88y29Z5qpZ6K0Bx1bEJ-jsZMSWI_6SUwqv8BCnsrQ5a7ApVY-PL0SVlY0RkJuRWhCSlVISEV6QVN0ZDhxNnlqeVd5ZXZuX1JkYThENi16MDBBVzdKeGdQUkpzMUh5N2d2cFJjM0xOYmswdnBxdzNXREpRT0xJVk5LZTdzbWdBIIEC;bili_jct\u003db57504835a9a3a69f42947f1dbb125ae;gourl\u003dhttps://www.bilibili.com;first_domain\u003d.bilibili.com;","wbiImg":"7cd084941338484aae1ad9425b84077c","wbiSub":"4932caff0ff746eab6f01bf08b70ac45","isVip":false} \ No newline at end of file diff --git a/tianjitop/llllo4k/lib/dg戏曲.json b/tianjitop/llllo4k/lib/dg戏曲.json new file mode 100644 index 00000000..3d47a174 --- /dev/null +++ b/tianjitop/llllo4k/lib/dg戏曲.json @@ -0,0 +1,108 @@ +{ + "class": [{ + "type_name": "戏曲合集", + "type_id": "戏曲合集" + }, { + "type_name": "名家名段", + "type_id": "名家名段" + }, { + "type_name": "京剧", + "type_id": "京剧" + }, { + "type_name": "吕剧", + "type_id": "吕剧" + }, { + "type_name": "豫剧", + "type_id": "豫剧" + }, { + "type_name": "越剧", + "type_id": "越剧" + }, { + "type_name": "粤剧", + "type_id": "粤剧" + }, { + "type_name": "黄梅戏", + "type_id": "黄梅戏" + }, { + "type_name": "秦腔", + "type_id": "秦腔" + },{ + "type_name": "河南坠子", + "type_id": "河南坠子" + }, { + "type_name": "河北梆子", + "type_id": "河北梆子" + }, { + "type_name": "赣剧", + "type_id": "赣剧" + }, { + "type_name": "昆曲", + "type_id": "昆曲" + }, { + "type_name": "楚剧", + "type_id": "楚剧" + }, { + "type_name": "京韵大鼓", + "type_id": "京韵大鼓" + }, { + "type_name": "评剧", + "type_id": "评剧" + }, { + "type_name": "川剧", + "type_id": "川剧" + }, { + "type_name": "花鼓戏", + "type_id": "花鼓戏" + }, { + "type_name": "庐剧", + "type_id": "庐剧" + }, { + "type_name": "淮剧", + "type_id": "淮剧" + }, { + "type_name": "扬剧", + "type_id": "扬剧" + }, { + "type_name": "绍剧", + "type_id": "绍剧" + }, { + "type_name": "潮剧", + "type_id": "潮剧" + }, { + "type_name": "沪剧", + "type_id": "沪剧" + }, { + "type_name": "歌仔戏", + "type_id": "歌仔戏" + }, { + "type_name": "晋剧", + "type_id": "晋剧" + }, { + "type_name": "蒲剧", + "type_id": "蒲剧" + }, { + "type_name": "陕西说唱", + "type_id": "陕西说唱" + },{ + "type_name": "唐山皮影戏", + "type_id": "唐山皮影戏" + }, { + "type_name": "相声", + "type_id": "相声" + }, { + "type_name": "小品", + "type_id": "小品" + },{ + "type_name": "评书", + "type_id": "评书" + }, { + "type_name": "听小说", + "type_id": "有声书" + },{ + "type_name": "二人转", + "type_id": "二人转" + }, { + "type_name": "广场舞", + "type_id": "广场舞大全" + }] +} \ No newline at end of file diff --git a/Ye-11X115490_PsyDuck4k/lib/drpy2.min.js b/tianjitop/llllo4k/lib/ec67b9045d393737f073d2c9365533f0.js similarity index 99% rename from Ye-11X115490_PsyDuck4k/lib/drpy2.min.js rename to tianjitop/llllo4k/lib/ec67b9045d393737f073d2c9365533f0.js index 8e28a734..17e22b83 100644 --- a/Ye-11X115490_PsyDuck4k/lib/drpy2.min.js +++ b/tianjitop/llllo4k/lib/ec67b9045d393737f073d2c9365533f0.js @@ -1,7 +1,7 @@ import { cheerio, 模板 -} from "./drpy-core-lite.min.js"; +} from "https://pan.vma.cc/pan/down.php/4656e3ee7df1f4db03a6c0af17295b1d.js"; let vercode = typeof pdfl === "function" ? "drpy2.1" : "drpy2"; const VERSION = vercode + " 3.9.52beta3 20250801"; const UpdateInfo = [{ diff --git a/tianjitop/llllo4k/lib/fm.txt b/tianjitop/llllo4k/lib/fm.txt new file mode 100644 index 00000000..e8f8ac85 --- /dev/null +++ b/tianjitop/llllo4k/lib/fm.txt @@ -0,0 +1,196 @@ +DG音乐台,#genre# +HIT FM,http://sk.cri.cn/887.m3u8 +HIT FM,http://satellitepull.cnr.cn/live/wxgjlxyy/playlist.m3u8 +粤听·精选807,http://live.cooltv.top/tv/yueting.php?id=2519 +粤听·小满音乐台,http://live.cooltv.top/tv/yueting.php?id=2490 +粤听·太平洋之声,http://live.cooltv.top/tv/yueting.php?id=2520 +AsiaFM 亚洲热歌台,http://hot.asiafm.net:8000/asiafm +AsiaFM 亚洲音乐台,http://asiafm.hk:8000/asiafm +AsiaFM 亚洲经典台,http://goldfm.cn:8000/goldfm +AsiaFM 亚洲天空台,http://funradio.cn:8000/funradio +AsiaFM HD音乐台,http://asiafm.hk:8000/asiahd +AsiaFM 亚洲粤语台,http://yyt.asiafm.net:8000/asiafm +Big B Radio - 中文流行,http://cpop.bigbradio.net/s +Big B Radio - 韩语流行,http://kpop.bigbradio.net/s +Big B Radio - 日语流行,http://jpop.bigbradio.net/s +Big B Radio - 亚洲流行,http://apop.bigbradio.net/s +CityFM台南知音,http://fm971.cityfm.tw:8080/971.mp3 +CityFM城市广播,http://fm929.cityfm.tw:8080/929.mp3 +中广音乐网,http://n07.rcs.revma.com/ks4vsmg3qtzuv +中广流行网,http://n14.rcs.revma.com/aw9uqyxy2tzuv +音乐之声,http://ngcdn003.cnr.cn/live/yyzs/index.m3u8 +经典音乐广播,http://ngcdn004.cnr.cn/live/dszs/index.m3u8 +HITFM劲曲调频,http://satellitepull.cnr.cn/live/wxhitfm/playlist.m3u8 +动感101,http://live.cooltv.top/tv/news1296.php?id=4 +Love Radio,http://live.cooltv.top/tv/news1296.php?id=7 +KFM981,http://live.cooltv.top/tv/news1296.php?id=9 +经典947,http://live.cooltv.top/tv/news1296.php?id=8 +江苏音乐广播,http://live.cooltv.top/tv/ytradio.php?id=415 +江苏经典流行音乐广播,http://live.cooltv.top/tv/ytradio.php?id=414 +南京音乐广播,http://hls.njgb.com/live_hls/4/playlist.m3u8 +南京cool radio,http://hls.njgb.com/live_hls/8/playlist.m3u8 +北京音乐广播,https://brtv-radiolive.rbc.cn/alive/fm974.m3u8 +芒果时空音乐电台,http://live.cooltv.top/tv/ytradio.php?id=524 +摩登音乐台,rtmp://satellitepull.cnr.cn/live/wx32hunwygb +芒果音乐台,http://a.live.hnradio.com/yypd/radio120k_yypd.m3u8?auth_key=1588751172-0-0-d97b858279c1c86650172b9913ea4af2 +合肥文艺广播,http://live.cooltv.top/tv/tide.php?id=hfwygb +长春都市音乐广播UFM880,http://p2bj.vzan.com/slowlive/730848065915372146/live.m3u8 +苏州音乐广播,http://live.cooltv.top/tv/ytradio.php?id=697 +北京经典969,http://live.funhillrm.com/4/sd/live.m3u8 +河北汽车音乐台,https://radio.pull.hebtv.com/live/hebqcyy.m3u8 +山东音乐广播,http://live.cooltv.top/tv/ytradio.php?id=702 +山东经典音乐广播,http://live.cooltv.top/tv/ytradio.php?id=703 +陕西音乐广播·快乐988,http://satellitepull.cnr.cn/live/wxsxxyygb/playlist.m3u8 +崂山921,rtmp://jsylivealone.iqilu.com/laoshan/laoshan_audio +经典948,http://live.cooltv.top/tv/iqilu.php?id=948 +甘肃青春调频,http://live.cooltv.top/tv/ytradio.php?id=485 +甘肃都市调频,http://live.cooltv.top/tv/ytradio.php?id=484 +云南音乐广播,http://satellitepull.cnr.cn/live/wxynyygb/playlist.m3u8 +海峡之声·文化生活广播,http://47.107.255.25:1935/live/liveSh/800k/tzwj_video.m3u8 +安徽音乐广播,http://satellitepull.cnr.cn/live/wxahyygb/playlist.m3u8 +旅游之声,http://starfish.bj.aliyun.007.qingting.fm:8000/fm98.7lvyouzhisheng +唐山音乐广播,http://live.cooltv.top/tv/ts.php?id=yygb +新疆音乐广播MixFM1039,http://livehywaudio2.chinamcache.com/xjtvs/gb06.m3u8?auth_key=1701481179-0-0-f5b0844d2432e7a4c6458ae7152483ba +山西音乐广播,http://live.cooltv.top/tv/tide.php?id=sxyygb +宜昌音乐生活广播,http://play.3xgd.com/fm/qct.m3u8 +江西音乐广播,http://satellitepull.cnr.cn/live/wx32jiangxyygb/playlist.m3u8 +宁波音乐广播,http://ihzlh.linker.cc/ihzlh/zjnb_ts02_986.m3u8 +PlayFM甬江之声,http://netlive.zhxwzx.com/live/1001.m3u8 +内蒙古音乐之声,http://satellitepull.cnr.cn/live/wx32nmgyygb/playlist.m3u8 +楚天音乐广播,http://live.cooltv.top/tv/ytradio.php?id=533 +湖北经典音乐广播,http://satellitepull.cnr.cn/live/wx32hubyygb/playlist.m3u8 +广西音乐广播,http://live.cooltv.top/tv/ytradio.php?id=590 +四川城市之音,http://live.cooltv.top/tv/ytradio.php?id=450 +四川岷江音乐,http://satellitepull.cnr.cn/live/wxscmjyyt/playlist.m3u8 +厦门音乐广播,https://live1b.kxm.xmtv.cn/aac_xmyybf_1b/sd/live.m3u8 +浙江音乐调频·动听968,http://satellitepull.cnr.cn/live/wxzj968/playlist.m3u8 +河北音乐广播,http://live.cooltv.top/tv/ytradio.php?id=381 +郑州音乐广播,http://live.cooltv.top/tv/ytradio.php?id=717 +河南音乐广播,http://live.cooltv.top/tv/ytradio.php?id=395 +河南BigRadio,http://live.cooltv.top/tv/ytradio.php?id=1173 +开封音乐广播,http://live.dxhmt.cn:9081/gb/10200-4.m3u8 +广东音乐之声,http://live.cooltv.top/tv/ytradio.php?id=489 +深圳飞扬971,rtmp://satellitepull.cnr.cn/live/wxszfy971 +深圳生活942,rtmp://satellitepull.cnr.cn/live/wxszsjcgb +海南音乐广播,http://live.cooltv.top/tv/ytradio.php?id=543 +贵州音乐广播,http://satellitepull.cnr.cn/live/wx32gzyygb/playlist.m3u8 +宁夏音乐广播,http://satellitepull.cnr.cn/live/wxnxyygb/playlist.m3u8 +重庆音乐广播,http://live.cooltv.top/tv/ytradio.php?id=372 +黑龙江音乐广播,http://live.cooltv.top/tv/ytradio.php?id=552 +福建汽车音乐广播,http://live.cooltv.top/tv/ytradio.php?id=471 +福州音乐广播,http://live.zohi.tv/audio/s10001-FM893/index.m3u8 +成都文化休闲广播·radio946,http://live.cooltv.top/tv/cdgb.php?id=946 +AsiaFM 亚洲音乐台,http://asiafm.vip:8000/fm965 +WHIZ Radio 海口音乐广播,http://starfish.sz.aliyun.005.qingting.fm:8000/haikouSIMULRADIO +青岛音乐体育广播,http://video11.qtv.com.cn/zhiboytgb-sd/manifest.m3u8 +青岛摩登音乐调频,http://video11.qtv.com.cn/zhibo886/manifest.m3u8 +辽宁经典音乐广播,http://satellitepull.cnr.cn/live/wxlnwygb/playlist.m3u8 +青海交通音乐广播,http://satellitepull.cnr.cn/live/wx32qhjtyygb/playlist.m3u8 +最爱878音乐广播,http://live.cooltv.top/tv/ytradio.php?id=2415&type=hubei +绍兴私家车音乐广播,http://live.shaoxing.com.cn/audio/s10001-xq3/index.m3u8 +扬州经济音乐广播,http://live.cooltv.top/tv/yz.php?id=jjyy +武汉音乐广播,http://stream.appwuhan.com/yypdzb/sd/live.m3u8 +武汉青少广播·M-radio,http://stream.appwuhan.com/sepdzb/sd/live.m3u8 +常州音乐广播,http://live.cooltv.top/tv/cz.php?id=fm935 +烟台音乐广播,http://live.yantaitv.cn/live/899686f2687848cdbe62b1c27f3b3fc1/111dcc2035384c579cb79a260591a4ea.m3u8 +盛京105.6,http://starfish.bj.aliyun.006.qingting.fm:8000/shenyangjingdianyinle +惠州音乐广播,http://stream.hztvmg.com/test17/playlist.m3u8 +年代959,http://live.cooltv.top/tv/ytradio.php?id=2397 +长沙城市之声,http://20573.hlsplay.aodianyun.com/zhcs_radio/cszs1017.m3u8 +长沙音乐广播,http://20573.hlsplay.aodianyun.com/zhcs_radio/jjgb886.m3u8 +太原音乐广播,http://live.cooltv.top/tv/tide.php?id=tyyygb +石家庄音乐广播,http://pluslive2.sjzntv.cn/aac_yygb/playlist.m3u8 +崇州电台年代音乐1022,http://live.cooltv.top/tv/cdgb.php?id=433-1315 +惠州音乐广播,https://rscdn-qn-i.ajmide.com/r_3119/3119.m3u8 +广州汽车音乐电台,https://rscdn-qn-i.ajmide.com/r_1088/1088.m3u8 +广州交通广播,https://rscdn-qn-i.ajmide.com/r_1089/1089.m3u8 +广州MYFM880,https://rscdn-qn-i.ajmide.com/r_1090/1090.m3u8 +广州MYFM880,http://ls.qingting.fm/live/52712.m3u8 +广东音乐之声,https://rscdn-qn-i.ajmide.com/r_1191/1191.m3u8 +佛山飞跃924,https://rscdn-qn-i.ajmide.com/r_1201/1201.m3u8 +珠海电台先锋951,https://rscdn-qn-i.ajmide.com/r_1421/1421.m3u8 +深圳音乐广播,https://rscdn-qn-i.ajmide.com/r_1380/1380.m3u8 +深圳动听102,http://rscdn-qn-i.ajmide.com/r_1378/1378.m3u8 +汕头音乐之声,https://rscdn-qn-i.ajmide.com/r_1661/1661.m3u8 +惠州音乐广播,https://rscdn-qn-i.ajmide.com/r_3119/3119.m3u8 +广州汽车音乐电台,https://rscdn-qn-i.ajmide.com/r_1088/1088.m3u8 +广东音乐之声 FM99.3,http://ls.qingting.fm/live/1260.m3u8 +广东音乐之声,https://rscdn-qn-i.ajmide.com/r_1191/1191.m3u8 +中央台音乐之声,http://rtmpcnr003.cnr.cn/live/yyzs/playlist.m3u8 +北京古典音乐广播,http://cnlive.cnr.cn/hls/bjgdyygb.m3u8 +北京怀旧金曲广播,http://cnlive.cnr.cn/hls/bjhjjqgb.m3u8 +北京音乐广播,http://cnlive.cnr.cn/hls/bjyygb.m3u8 +安徽音乐广播,http://satellitepull.cnr.cn/live/wxahyygb/playlist.m3u8 +重庆音乐广播,http://satellitepull.cnr.cn/live/wxcqyygb/playlist.m3u8 +山东广播音乐频道,http://cnlive.cnr.cn/hls/sdcszy.m3u8 +河南音乐广播,http://stream.hndt.com/live/yinyue/playlist.m3u8 +河南电台Myradio,http://stream.hndt.com/live/yingshi/playlist.m3u8 +广州金曲广播,http://23436.liveplay.myqcloud.com/live/23436_794588efa9a011e892905cb9018cf0d4.m3u8 +广东音乐之声,http://satellitepull.cnr.cn/live/wxgdyyzs/playlist.m3u8 +深圳音乐频率飞扬971,http://sztv-hls.cutv.com/bPHSw12/64/d2nbgH0.m3u8 +江门旅游音乐台,rtmp://tideweblive.jmtv.cn/tslsChannelLive/141Ldor/live +江苏音乐广播,http://lzlive.vojs.cn/jAmO6Ng/92/live.m3u8 +南京音乐广播,http://hls.njgb.com/live_hls/4/playlist.m3u8 +浙江音乐调频,http://yf.m.l.cztv.com/channels/lantian/audio01/128k.m3u8 +湖北音乐广播,http://live7.hbtv.com.cn/masvod/hbjdyygb_q1/index.m3u8 +楚天音乐广播,http://live7.hbtv.com.cn/masvod/ctyygb_q1/index.m3u8 +宜昌交通音乐广播,rtmp://zb.3xgd.com:1935/FM/jtt +十堰交通音乐台,rtmp://live.aisy.com/aisy/c006 +济宁音乐广播,rtmp://lives.jnnews.tv/audio/s10001-1070 +抚州交通音乐广播,rtmp://111.75.179.195:1935/live/fz4 +江西音乐广播,rtmp://111.75.206.134/live/yygb +南京热力调频,http://hls.njgb.com/live_hls/4/playlist.m3u8 +合肥文艺广播,http://120.193.102.2/hfradio/hfdta178/index.m3u8 +中国国际广播电台劲曲调频,http://sk.cri.cn/887.m3u8 +郑州音乐广播,http://living.muzhifm.com/muzhifm/zhenzhou2_fm944.m3u8?auth_key=1649670265-0-0-dd65fe46e9d4686f8bd6210a491bd683 +沈阳音乐广播,http://lms.csytv.com/Live/121/live/livestream.m3u8 +黑龙江音乐广播,http://satellitepull.cnr.cn/live/wx32hljyygb/playlist.m3u8 +四川珉江音乐台,http://satellitepull.cnr.cn/live/wxscmjyyt/playlist.m3u8 +攀枝花音乐调频,http://zb.pzhgd.com:9091/live/fm885.m3u8 +贵州音乐广播,rtmp://hls1.gzstv.com/livegztv/yinyue +内蒙古音乐之声,http://satellitepull.cnr.cn/live/wx32nmgyygb/playlist.m3u8 +佛山电台FM92.4,http://live-hls.fs.linker.cc/fshs/fs_ts_03.m3u8 +西安音乐广播,http://stream3.xiancity.cn/4/sd/live.m3u8 +辽宁音乐广播(FM102.9),http://satellitepull.cnr.cn/live/wxlnwygb/playlist.m3u8 +中国国际广播电台都市流行频道,http://satellitepull.cnr.cn/live/wxgjlxyy/playlist.m3u8 +中国国际广播电台怀旧金曲频道,http://sk.cri.cn/oldies.m3u8 +湖南音乐之声超级893,rtmp://39.108.163.99:1935/live/fm893 +天津古典音乐广播,http://cnlive.cnr.cn/hls/tjgdyygb.m3u8 +河北音乐广播,rtmp://mms.hebradio.com/live/26 +乐田1069,rtmp://39.108.163.99:1935/live/fm1069 +唐山音乐广播,http://live1.tsr.he.cn:1936/live/tsfm2/128k/tzwj_video.m3u8 +钦州电台音乐广播,http://live.gxqztv.com/cspd3/sd/live.m3u8 +南京汽车音乐广播,http://hls.njgb.com/live_hls/4/playlist.m3u8 +FM92.9南通音乐交通广播,http://nttv.wshls.homecdn.com/live/7ccf.m3u8 +怀集音乐之声,http://cnlive.cnr.cn/hls/hjyyzs.m3u8 +中央台中国民乐广播,http://rtmpcnr021.cnr.cn/live/zgmy/playlist.m3u8 +中央台古典音乐广播,http://rtmpcnr022.cnr.cn/live/gdyy/playlist.m3u8 +张家口品味986音乐广播,http://nlive.zjkgdcs.com:8091/live/pwgb.m3u8 +FM90.7威海音乐时尚广播,http://l1.weihai.tv:8081/hls/3B4EC2bCl3.m3u8 +镇江音乐广播,http://live.zjmc.tv/6/sd/live.m3u8 +南通音乐广播,http://nttv.wshls.homecdn.com/live/7ccd.m3u8 +邯郸音乐广播,rtmp://mms.hdbs.cn:1937/live/hdyygbzb +枣庄音乐广播,rtmp://juyunlive.juyun.tv/live/05881265 +乌鲁木齐MYFM1039音乐广播,http://aod.xjbs.com.cn:1935/live/1039/32K/tzwj_video.m3u8 +宁夏音乐广播,http://satellitepull.cnr.cn/live/wxnxyygb/playlist.m3u8 +海南音乐广播,http://satellitepull.cnr.cn/live/wxhainyygb/playlist.m3u8 +河北私家车广播,rtmp://mms.hebradio.com/live/24 +舟山汽车音乐广播,http://live.wifizs.cn/fm91/sd/live.m3u8 +湖南FM893汽车音乐电台,rtmp://39.108.163.99:1935/live/fm893 +湖南FM1069年代音乐台,rtmp://39.108.163.99:1935/live/fm1069 +湖南FM975摩登音乐台,rtmp://39.108.163.99:1935/live/fm975 +重庆巴渝之声,http://bananlive.cbg.cn/channel4/sd/live.m3u8 +东莞电台音乐广播,http://mtv.sun0769.com/dgrtv1/mp4:tv12/index.m3u8 +惠州电台音乐广播,http://livehuiz.sobeycache.com/live/gb3.m3u8?auth_key=1593747098-0-0-64875592349d23b5cb8d7cead4b57502 +广州电台MYFM880都市生活广播,http://23436.liveplay.myqcloud.com/live/23436_146d13b4a9a111e892905cb9018cf0d4.m3u8 +银川都市经济广播,http://stream.ycgbtv.com.cn/ycdupl/sd/live.m3u8 +合肥汽车音乐广播,http://120.193.102.2/hfradio/hfdta178/index.m3u8 +龙广音乐台,http://satellitepull.cnr.cn/live/wx32hljyygb/playlist.m3u8 +HITFM成都台FM88.7,http://livecdn.cdbs.com.cn/fm963.flv/playlist.m3u8 +成都广播电台经典946,http://livecdn.cdbs.com.cn/fm946.flv/playlist.m3u8 +贵阳音乐广播,http://hls.qguiyang.com/FM909/800/4blFv.m3u8 +楚雄电台音乐广播,http://live.cxgb.net:1935/live/live101/64K/tzwj_video.m3u8 +经典1042蚌埠经济广播,http://newvod.ahbbtv.com:1935/live/jjpl/playlist.m3u8 +淮北音乐广播,http://live1.0561rtv.com:9600/live/live7/64K/tzwj_video.m3u8 +周口音乐广播,rtmp://tv.zkxww.com:1935/broadcast/1004.stream_aac +天津滨海音乐广播,http://60.30.52.41/live/FM100.5/playlist.m3u8 diff --git a/tianjitop/llllo4k/lib/get.txt b/tianjitop/llllo4k/lib/get.txt new file mode 100644 index 00000000..db283337 --- /dev/null +++ b/tianjitop/llllo4k/lib/get.txt @@ -0,0 +1,2 @@ +https://mk1080.top +http://154.201.81.41:1688 \ No newline at end of file diff --git a/tianjitop/llllo4k/lib/jianpian.js b/tianjitop/llllo4k/lib/jianpian.js new file mode 100644 index 00000000..0d0ab024 --- /dev/null +++ b/tianjitop/llllo4k/lib/jianpian.js @@ -0,0 +1,450 @@ +/* +@header({ + searchable: 1, + filterable: 1, + quickSearch: 0, + title: '荐片', + lang: 'cat' +}) +*/ + +let host = 'https://api.ztcgi.com'; +let imghost = ''; +let siteKey = ''; +let siteType = 0; +let siteName = '荐片'; +let maxPages = 5; +let config = ''; + +// 过滤规则配置 +let title_remove = ['名称排除', '广告', '破解', '群']; +let line_remove = ['线路排除', '广告', '666', 'mymv']; +let line_order = ['线路排序', '极速', '高速', '常规线路', 'ft', '官', 'ace', '1080p', 'dytt']; +let cate_remove = ['分类排除', '推荐', '首页']; + +// API路径配置 - 所有接口路径集中管理 +let rule = { + homeCategory: '/api/v2/settings/homeCategory', // 首页分类接口 + resourceDomain: '/api/v2/settings/resourceDomainConfig', // 图片域名配置接口 + slideList: '/api/slide/list', // 轮播图/推荐列表接口 + dyTag: '/api/dyTag/tpl2_data', // 动态标签数据接口 + crumbList: '/api/crumb/list', // 分类列表接口 + detail: '/api/video/detailv2', // 视频详情接口 + search: '/api/v2/search/videoV2' // 搜索接口 +}; + +async function init(cfg) { + siteKey = cfg.skey; + siteType = cfg.stype; + siteName = (cfg.skey?.split('_')[1] || cfg.skey) || '荐片'; + + let ext = cfg.ext !== undefined ? cfg.ext : cfg; + if (typeof ext === 'string' && ext.includes('$')) { + const [url, order] = ext.split('$'); + const html = await request(url); + config = JSON.parse(html)[order]; + host = config.host || config.hosturl || config.url || config.site; + + } else if (ext && typeof ext === 'object') { + config = ext; + host = config.host || config.hosturl || config.url || config.site; + } + + if (config.title_remove !== undefined) { + title_remove = Array.isArray(config.title_remove) ? config.title_remove : title_remove; + } + if (config.line_remove !== undefined) { + line_remove = Array.isArray(config.line_remove) ? config.line_remove : line_remove; + } + if (config.line_order !== undefined) { + line_order = Array.isArray(config.line_order) ? config.line_order : line_order; + } + if (config.cate_remove !== undefined) { + cate_remove = Array.isArray(config.cate_remove) ? config.cate_remove : cate_remove; + } + + try { + // 获取图片域名配置 + let res = await req(`${host}${rule.resourceDomain}`, { headers: { 'User-Agent': 'Mozilla/5.0' } }); + let config = JSON.parse(res.content); + if (config.code === 1 && config.data && config.data.imgDomain) { + imghost = 随机选择图片域名(config.data.imgDomain); + } + } catch (e) { + imghost = 'https://img.jgsfnl.com'; + } +} + +async function home(filter) { + // 请求首页分类接口 + let html = await request(`${host}${rule.homeCategory}`); + let res = JSON.parse(html).data; + + let classes = []; + res.forEach(item => { + classes.push({ + type_id: item.id.toString(), + type_name: item.name + }); + }); + const commonFilter = [{ + "key": "cateId", + "name": "分类", + "value": [ + {"v": "", "n": "全部"}, + {"v": "1", "n": "剧情"}, {"v": "2", "n": "爱情"}, {"v": "3", "n": "动画"}, + {"v": "4", "n": "喜剧"}, {"v": "5", "n": "战争"}, {"v": "6", "n": "歌舞"}, + {"v": "7", "n": "古装"}, {"v": "8", "n": "奇幻"}, {"v": "9", "n": "冒险"}, + {"v": "10", "n": "动作"}, {"v": "11", "n": "科幻"}, {"v": "12", "n": "悬疑"}, + {"v": "13", "n": "犯罪"}, {"v": "14", "n": "家庭"}, {"v": "15", "n": "传记"}, + {"v": "16", "n": "运动"}, {"v": "18", "n": "惊悚"}, {"v": "20", "n": "短片"}, + {"v": "21", "n": "历史"}, {"v": "22", "n": "音乐"}, {"v": "23", "n": "西部"}, + {"v": "24", "n": "武侠"}, {"v": "25", "n": "恐怖"} + ] + }, { + "key": "area", + "name": "地区", + "value": [ + {"v": "", "n": "全部"}, + {"v": "1", "n": "国产"}, {"v": "3", "n": "中国香港"}, {"v": "6", "n": "中国台湾"}, + {"v": "5", "n": "美国"}, {"v": "18", "n": "韩国"}, {"v": "2", "n": "日本"} + ] + }, { + "key": "year", + "name": "年代", + "value": [ + {"v": "", "n": "全部"}, + {"v": "162", "n": "2026"}, {"v": "107", "n": "2025"}, {"v": "119", "n": "2024"}, {"v": "153", "n": "2023"}, + {"v": "101", "n": "2022"}, {"v": "118", "n": "2021"}, {"v": "16", "n": "2020"}, + {"v": "7", "n": "2019"}, {"v": "2", "n": "2018"}, {"v": "3", "n": "2017"}, + {"v": "22", "n": "2016"}, {"v": "2015", "n": "2015以前"} + ] + }, { + "key": "sort", + "name": "排序", + "value": [ + {"v": "update", "n": "最新"}, {"v": "hot", "n": "最热"}, {"v": "rating", "n": "评分"} + ] + }]; + + let filterObj = {}; + classes.forEach(item => { + if (item.type_id !== '88' && item.type_id !== '99') { + filterObj[item.type_id] = commonFilter; + } + }); + + let i = 0; + while (i < classes.length) { + const isBad = cate_remove.some(word => + new RegExp(word, 'i').test(classes[i].type_name) + ); + if (isBad) { + classes.splice(i, 1); + } else { + i++; + } + } + + return JSON.stringify({ + class: classes, + filters: filterObj, + }); +} + +async function homeVod() { + // 请求首页轮播图/推荐列表接口 + let html = await request(`${host}${rule.slideList}?pos_id=88`); + let res = JSON.parse(html).data; + + let videos = []; + res.forEach(item => { + videos.push({ + vod_id: item.jump_id, + vod_name: item.title, + vod_pic: `${imghost}${item.thumbnail}`, + vod_remarks: "", + }); + }); + + let filteredVideos = []; + videos.forEach(item => { + const title = item.vod_name; + const isBadTitle = title_remove.some(word => + new RegExp(word, 'i').test(title) + ); + if (!isBadTitle) { + filteredVideos.push(item); + } + }); + + return JSON.stringify({ + list: filteredVideos, + }); +} + +async function DyTag(id, pg) { + // 请求动态标签数据接口 + let url = `${host}${rule.dyTag}?id=${id}&page=${pg}`; + let html = await request(url); + let res = JSON.parse(html).data; + + if (res) { + let videos = []; + res.forEach(item => { + videos.push({ + vod_id: item.id, + vod_name: item.title, + vod_pic: `${imghost}${item.path}`, + vod_remarks: item.mask || '', + }); + }); + return videos; + } + return []; +} + +async function category(tid, pg, filter, extend) { + if (pg <= 0) pg = 1; + let videos = []; + + if (tid === '99' || tid === 99) { + videos = await DyTag(70, pg); + } else { + let extendParams = extend || {}; + // 请求分类列表接口 + let url = `${host}${rule.crumbList}?fcate_pid=${tid}&category_id=&area=${extendParams.area || ''}&year=${extendParams.year || ''}&type=${extendParams.cateId || ''}&sort=${extendParams.sort || ''}&page=${pg}`; + + let html = await request(url); + let res = JSON.parse(html).data; + + if (res) { + res.forEach(item => { + videos.push({ + vod_id: item.id, + vod_name: item.title, + vod_pic: `${imghost}${item.path}`, + vod_remarks: item.mask, + }); + }); + } + } + + let filteredVideos = []; + videos.forEach(item => { + if (!item.vod_name) return; + + const title = item.vod_name; + const isBadTitle = title_remove.some(word => + new RegExp(word, 'i').test(title) + ); + if (!isBadTitle) { + filteredVideos.push(item); + } + }); + + return JSON.stringify({ + page: parseInt(pg), + pagecount: 99999, + limit: videos.length, + total: 99999, + list: filteredVideos + }); +} + +async function detail(id) { + // 请求视频详情接口 + let html = await request(`${host}${rule.detail}?id=${id}`); + let res = JSON.parse(html).data; + + let playForm = []; + let playUrls = []; + + res.source_list_source.forEach(item => { + const form = item.name; + let finalForm = form; + + if (item.source_list && item.source_list.length > 0 && item.source_list[0].url) { + let domain = 提取域名(item.source_list[0].url); + if (domain.length > 8) domain = domain.substring(0, 8); + finalForm = `${form}(${domain})`; + } + + const isBadLine = line_remove.some(pattern => + finalForm.toLowerCase().includes(pattern.toLowerCase()) + ); + + if (!isBadLine) { + playForm.push(finalForm); + + let urls = []; + item.source_list.forEach(source => { + urls.push(`${source.source_name}$${source.url}`); + }); + playUrls.push(urls.join('#')); + } + }); + + console.log(`【${siteName}】实际线路名称:`, playForm); + console.log(`【${siteName}】排序规则:`, line_order); + + let combined = []; + playForm.forEach((form, i) => { + combined.push({form, url: playUrls[i]}); + }); + + combined.sort((a, b) => { + const getPri = name => { + const idx = line_order.findIndex(k => name.toLowerCase().includes(k.toLowerCase())); + return idx === -1 ? 999 : idx; + }; + return getPri(a.form) - getPri(b.form); + }); + + let sortedPlayForm = []; + let sortedPlayUrls = []; + combined.forEach(item => { + sortedPlayForm.push(item.form); + sortedPlayUrls.push(item.url); + }); + + console.log(`【${siteName}】排序后线路名称:`, sortedPlayForm); + + let play_from = []; + sortedPlayForm.forEach(item => { + play_from.push(item.replace(/常规线路/g, '边下边播')); + }); + + const vod = { + "vod_id": id, + "vod_name": res.title, + "vod_year": res.year, + "vod_area": res.area, + "vod_remarks": res.mask, + "vod_content": res.description, + "vod_pic": `${imghost}${res.thumbnail}`, + "vod_play_from": play_from.join('$$$'), + "vod_play_url": sortedPlayUrls.join('$$$') + }; + + return JSON.stringify({ + list: [vod] + }); +} + +async function play(flag, id, flags) { + if (id.indexOf(".m3u8") > -1) { + return JSON.stringify({ + parse: 0, + url: id + }); + } else { + return JSON.stringify({ + parse: 0, + url: `tvbox-xg:${id}` + }); + } +} + +async function search(wd, quick, pg) { + let page = pg || 1; + console.log(`【${siteName}】搜索参数: wd=${wd}, quick=${quick}, pg=${page}`); + + let urls = []; + for (let p = page; p < page + maxPages; p++) { + urls.push({ + url: `${host}${rule.search}?key=${encodeURIComponent(wd)}&category_id=88&page=${p}&pageSize=20`, + options: { headers: { 'User-Agent': 'Mozilla/5.0' }, timeout: 8000 } + }); + } + let results = await batchFetch(urls); + + let allVideos = []; + for (let html of results) { + if (!html) continue; + let res = JSON.parse(html).data; + if (res && Array.isArray(res)) { + res.forEach(item => { + allVideos.push({ + vod_id: item.id, + vod_name: item.title, + vod_pic: `${imghost}${item.thumbnail}`, + vod_remarks: item.mask, + }); + }); + } + } + + // 你要求的精准关键词匹配过滤 + let filteredVideos = []; + for (let item of allVideos) { + if (item.vod_name && new RegExp(wd, "i").test(item.vod_name)) { + filteredVideos.push(item); + } else { + console.log(`【${siteName}】精准搜索过滤: "${item.vod_name}" (不匹配关键词: ${wd})`); + } + } + + return JSON.stringify({ + page: page, + pagecount: 5, + limit: filteredVideos.length, + total: 100, + list: filteredVideos + }); +} + + +async function request(url, obj) { + if (!obj) { + obj = { + headers: {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'}, + } + } + + try { + const result = await req(url, obj); + return result.content; + } catch (e) { + console.error(`请求${url}错误:${e.message}`); + } +} + +function 提取域名(url) { + const cleanUrl = url.replace(/^(https?:\/\/)?/, ''); + const domainPart = cleanUrl.split('/')[0]; + + if (domainPart.includes('-')) { + return domainPart.split('-')[0]; + } + + if (domainPart.includes('.')) { + const dotParts = domainPart.split('.'); + if (dotParts.length > 2) { + return dotParts[dotParts.length - 2]; + } else if (dotParts.length === 2) { + return dotParts[0]; + } + } + + return domainPart; +} + +function 随机选择图片域名(domains) { + const domainList = domains.split(','); + const randomIndex = Math.floor(Math.random() * domainList.length); + const selectedDomain = domainList[randomIndex].trim(); + return `https://${selectedDomain}`; +} + +export function __jsEvalReturn() { + return { + init: init, + home: home, + homeVod: homeVod, + category: category, + detail: detail, + play: play, + search: search + }; +} \ No newline at end of file diff --git a/tianjitop/llllo4k/lib/maotouyinghb.txt b/tianjitop/llllo4k/lib/maotouyinghb.txt new file mode 100644 index 00000000..dd7e4e97 --- /dev/null +++ b/tianjitop/llllo4k/lib/maotouyinghb.txt @@ -0,0 +1 @@ +http://103.217.190.91:9999 \ No newline at end of file diff --git a/tianjitop/llllo4k/lib/xly.txt b/tianjitop/llllo4k/lib/xly.txt new file mode 100644 index 00000000..f5ebcf34 --- /dev/null +++ b/tianjitop/llllo4k/lib/xly.txt @@ -0,0 +1 @@ +http://154.219.117.157:6688 \ No newline at end of file diff --git a/tianjitop/llllo4k/lib/ych.json b/tianjitop/llllo4k/lib/ych.json new file mode 100644 index 00000000..974fd691 --- /dev/null +++ b/tianjitop/llllo4k/lib/ych.json @@ -0,0 +1,765 @@ +{ + "class": [ + { + "type_name": "国语金曲", + "type_id": "国语歌曲合集" + }, + { + "type_name": "粤语金曲", + "type_id": "粤语歌曲合集" + }, + { + "type_name": "汽水音乐", + "type_id": "汽水音乐歌曲合集" + }, + { + "type_name": "欧美金曲", + "type_id": "英语歌曲合集" + }, + { + "type_name": "日韩合集", + "type_id": "日韩歌曲合集" + }, + { + "type_name": "2025年热榜", + "type_id": "2025年音乐热榜" + }, + { + "type_name": "2026年热榜", + "type_id": "2026年音乐热榜" + }, + { + "type_name": "一人一首", + "type_id": "一人一首成名曲" + }, + { + "type_name": "老歌新唱", + "type_id": "翻唱合集" + }, + { + "type_name": "车载DJ", + "type_id": "DJ合集" + }, + { + "type_name": "女团现场", + "type_id": "女团现场" + }, + { + "type_name": "MV合集", + "type_id": "MV合集" + }, + { + "type_name": "演唱会", + "type_id": "演唱会" + }, + { + "type_name": "古风歌曲", + "type_id": "古风歌曲" + }, + { + "type_name": "经典老歌", + "type_id": "经典老歌合集" + }, + { + "type_name": "抖音热歌", + "type_id": "抖音热歌" + }, + { + "type_name": "国乐大典", + "type_id": "国乐合集" + }, + { + "type_name": "禅修音乐", + "type_id": "禅修音乐" + } + + ], +"cookie": "innersign=0; buvid3=2E536ADC-CD6D-46AB-A9FF-904395151EE369713infoc; b_nut=1669016569; i-wanna-go-back=-1; b_ut=7; _uuid=761F7F106-C575-884D-6C10A-92BC10A10D10FBC68934infoc; buvid4=5B25B999-AE15-E09A-A0CC-3661981B71BF70255-122112115-JOyWSaNZfI2kZmT1KYmcQA%3D%3D; fingerprint=6d9ef93c89a567d22b6a9c4104e6cc50; buvid_fp_plain=undefined; buvid_fp=6d9ef93c89a567d22b6a9c4104e6cc50; SESSDATA=2d6f63c8%2C1684568607%2C19eb6%2Ab1; bili_jct=21d538b01566c26afc81ff68c2ac7dca; DedeUserID=3493083203242585; DedeUserID__ckMd5=7b86f3894ed7f8c0; sid=ng0uyvaz; b_lsid=97FB69A2_1869DE8E2C5; bg_view_44176=720227" +, + "演唱会": [ + { + "key": "tid", + "name": "分类", + "value": [ + { + "n": "全部", + "v": "演唱会" + }, + { + "n": "周杰伦", + "v": "周杰伦" + }, + { + "n": "陈奕迅", + "v": "陈奕迅" + }, + { + "n": "Beyond", + "v": "Beyond" + }, + { + "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": "初音未来" + }, + { + "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": "李荣浩" + }, + { + "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": "周传雄" + }, + { + "n": "SHE", + "v": "SHE" + }, + { + "n": "苏打绿", + "v": "苏打绿" + }, + { + "n": "五月天", + "v": "五月天" + }, + { + "n": "张国荣", + "v": "张国荣" + }, + { + "n": "梅艳芳", + "v": "梅艳芳" + }, + { + "n": "孙燕姿", + "v": "孙燕姿" + }, + { + "n": "李健", + "v": "李健" + }, + { + "n": "华晨宇", + "v": "华晨宇" + }, + { + "n": "袁娅维", + "v": "袁娅维" + }, + { + "n": "大张伟", + "v": "大张伟" + }, + { + "n": "TFBOYS", + "v": "TFBOYS" + }, + { + "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": "张惠妹" + }, + { + "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": "汪峰" + }, + { + "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": "任嘉伦" + }, + { + "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": "By2", + "v": "By2" + }, + { + "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": "屠洪刚" + }, + { + "n": "戴荃", + "v": "戴荃" + }, + { + "n": "郭采洁", + "v": "郭采洁" + }, + { + "n": "罗志祥", + "v": "罗志祥" + }, + { + "n": "王力宏", + "v": "王力宏" + }, + { + "n": "林肯公园", + "v": "林肯公园" + }, + { + "n": "迈克尔杰克逊", + "v": "迈克尔杰克逊" + }, + { + "n": "泰勒·斯威夫特", + "v": "泰勒·斯威夫特" + }, + { + "n": "阿黛尔", + "v": "阿黛尔" + }, + { + "n": "BIGBANG", + "v": "BIGBANG" + }, + { + "n": "LadyGaga", + "v": "LadyGaga" + }, + { + "n": "贾斯丁比伯", + "v": "贾斯丁比伯" + }, + { + "n": "中岛美雪", + "v": "中岛美雪" + }, + { + "n": "仓木麻衣", + "v": "仓木麻衣" + }, + { + "n": "后街男孩", + "v": "后街男孩" + }, + { + "n": "布兰妮", + "v": "布兰妮" + }, + { + "n": "夜愿乐队", + "v": "夜愿乐队" + } + ] + }, + { + "key": "duration", + "name": "时长", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "60分钟以上", + "v": "4" + }, + { + "n": "30~60分钟", + "v": "3" + }, + { + "n": "10~30分钟", + "v": "2" + }, + { + "n": "10分钟以下", + "v": "1" + } + ] + } + ] + } diff --git a/tianjitop/llllo4k/lib/yoo.py b/tianjitop/llllo4k/lib/yoo.py new file mode 100644 index 00000000..c968ad56 --- /dev/null +++ b/tianjitop/llllo4k/lib/yoo.py @@ -0,0 +1,201 @@ +import base64 +import sys +import time +import json +import requests +import re +from datetime import datetime +sys.path.append('..') +from base.spider import Spider +from bs4 import BeautifulSoup +from urllib.parse import urlparse + + +class Spider(Spider): + def getName(self): + return "Litv" + + def init(self, extend): + self.extend = extend + try: + self.extendDict = json.loads(extend) + except: + self.extendDict = {} + + proxy = self.extendDict.get('proxy', None) + if proxy is None: + self.is_proxy = False + else: + self.proxy = proxy + self.is_proxy = True + pass + + def getDependence(self): + return [] + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + + def liveContent(self, url): + m3u_content = ['#EXTM3U'] + headers = { + 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', + 'Accept-Language': 'zh,zh-CN;q=0.9,en-US;q=0.8,en;q=0.7', + 'Cache-Control': 'max-age=0', + 'Connection': 'keep-alive', + 'If-Modified-Since': 'Sun, 27 Apr 2025 02:30:02 GMT', + 'If-None-Match': 'W/"680d96aa-36851"', + 'Upgrade-Insecure-Requests': '1', + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36', + } + response = requests.get('http://www.yoozb.live/', headers=headers, verify=False) + html_content = response.content.decode('utf-8-sig') + + soup = BeautifulSoup(html_content, 'html.parser') + data_div = soup.find('div', class_='data') + rows = data_div.find_all('tr') + + # 初始化变量 + current_date = "" + matches = { + "结束": [], + "直播": [], + "预告": [] + } + + for row in rows: + # 处理日期行 + if 'class' in row.attrs and 'date' in row['class']: + date_text = row.td.get_text(strip=True).split(' ')[0] + try: + dt = datetime.strptime(date_text, "%Y年%m月%d日") + current_date = dt.strftime("%m-%d") # 格式化为 月-日 + except: + current_date = "" + continue + + # 跳过表头 + if 'class' in row.attrs and 'head' in row['class']: + continue + + # 处理比赛行 + if row.find('td', class_='matcha'): + tds = row.find_all('td') + try: + # 提取基础信息 + category = tds[1].get_text(strip=True) + time = f"{current_date} {tds[2].get_text(strip=True)}" if current_date else tds[2].get_text(strip=True) + status = tds[3].get_text(strip=True) or "预告" + home_team = tds[4].get_text(strip=True) + away_team = tds[6].get_text(strip=True) + live_links = [a['href'] for a in tds[7].find_all('a') if a.has_attr('href')] + + # 状态标准化 + status_key = "直播" if "直播" in status else "结束" if "结束" in status else "预告" + + # 添加到对应分组 + matches[status_key].append({ + "时间": time, + "分类": category, + "主队": home_team, + "客队": away_team, + "直播链接": live_links + }) + except IndexError: + continue + m3u_content = [] + # 分组输出结果 + for status_group in ['直播', '结束', '预告']: + #print(f"\n===== {status_group}的比赛 =====") + if status_group == "直播" or status_group == "结束": + for i, match in enumerate(matches[status_group], 1): + #ch_name = f"{i}. [{match['时间']}] {match['分类']}-{match['主队']} vs {match['客队']}" + ch_name = f"[{match['时间']}] {match['分类']}-{match['主队']}vs{match['客队']}" + links = match['直播链接'][:3] + #print("links:",links) + for k, link in enumerate(links, 1): + link = link.replace("\n","").replace(" ","") + if link: + ch_url = f"video://{link}" + extinf = f'#EXTINF:-1 tvg-name="{ch_name}{k}" group-title="{status_group}",{ch_name}{k}' + #print(f"{ch_name}[{k}],{ch_url}") + m3u_content.extend([extinf, ch_url]) + elif status_group == "预告": + for i, match in enumerate(matches[status_group], 1): + ch_name = f"{i}. [{match['时间']}] {match['分类']}-{match['主队']} vs {match['客队']}" + ch_url = "https://gh-proxy.com/raw.githubusercontent.com/cqshushu/tvjk/master/yootv.mp4" + #print(f"{ch_name},{ch_url}") + extinf = f'#EXTINF:-1 tvg-name="{ch_name}]" group-title="{status_group}",{ch_name}' + #print(f"{ch_name}[{k}],{ch_url}") + m3u_content.extend([extinf, ch_url]) + + return '\n'.join(m3u_content) + + def homeContent(self, filter): + return {} + + def homeVideoContent(self): + return {} + + def categoryContent(self, cid, page, filter, ext): + return {} + + def detailContent(self, did): + return {} + + def searchContent(self, key, quick, page='1'): + return {} + + def searchContentPage(self, keywords, quick, page): + return {} + + def playerContent(self, flag, pid, vipFlags): + return {} + + def localProxy(self, params): + if params['type'] == "m3u8": + return self.proxyM3u8(params) + if params['type'] == "ts": + return self.get_ts(params) + return [302, "text/plain", None, {'Location': 'https://sf1-cdn-tos.huoshanstatic.com/obj/media-fe/xgplayer_doc_video/mp4/xgplayer-demo-720p.mp4'}] + def proxyM3u8(self, params): + pid = params['pid'] + info = pid.split(',') + a = info[0] + b = info[1] + c = info[2] + timestamp = int(time.time() / 4 - 355017625) + t = timestamp * 4 + m3u8_text = f'#EXTM3U\n#EXT-X-VERSION:3\n#EXT-X-TARGETDURATION:4\n#EXT-X-MEDIA-SEQUENCE:{timestamp}\n' + for i in range(10): + url = f'https://ntd-tgc.cdn.hinet.net/live/pool/{a}/litv-pc/{a}-avc1_6000000={b}-mp4a_134000_zho={c}-begin={t}0000000-dur=40000000-seq={timestamp}.ts' + if self.is_proxy: + url = f'http://127.0.0.1:9978/proxy?do=py&type=ts&url={self.b64encode(url)}' + + m3u8_text += f'#EXTINF:4,\n{url}\n' + timestamp += 1 + t += 4 + return [200, "application/vnd.apple.mpegurl", m3u8_text] + + def get_ts(self, params): + url = self.b64decode(params['url']) + headers = {'User-Agent': 'Mozilla/5.0'} + response = requests.get(url, headers=headers, stream=True, proxies=self.proxy) + return [206, "application/octet-stream", response.content] + + def destroy(self): + return '正在Destroy' + + def b64encode(self, data): + return base64.b64encode(data.encode('utf-8')).decode('utf-8') + + def b64decode(self, data): + return base64.b64decode(data.encode('utf-8')).decode('utf-8') + + +if __name__ == '__main__': + pass \ No newline at end of file diff --git a/tianjitop/llllo4k/lib/企鹅体育.py b/tianjitop/llllo4k/lib/企鹅体育.py new file mode 100644 index 00000000..8a034161 --- /dev/null +++ b/tianjitop/llllo4k/lib/企鹅体育.py @@ -0,0 +1,142 @@ +#coding=utf-8 +#!/usr/bin/python +import sys +sys.path.append('..') +from base.spider import Spider +import json +import math +import re + +class Spider(Spider): + def getName(self): + return "企鹅体育" + def init(self,extend=""): + pass + def isVideoFormat(self,url): + pass + def manualVideoCheck(self): + pass + def homeContent(self,filter): + result = {} + cateManual = { + "全部": "", + "足球": "Football", + "篮球": "Basketball", + "NBA": "NBA", + "台球": "Billiards", + "搏击": "Fight", + "网排": "Tennis", + "游戏": "Game", + "其他": "Others", + "橄棒冰": "MLB" + } + classes = [] + for k in cateManual: + classes.append({ + 'type_name': k, + 'type_id': cateManual[k] + }) + + result['class'] = classes + if (filter): + result['filters'] = self.config['filter'] + return result + def homeVideoContent(self): + result = {} + return result + + def categoryContent(self,tid,pg,filter,extend): + result = {} + url = 'https://live.qq.com/api/live/vlist?page_size=60&shortName={0}&page={1}'.format(tid, pg) + rsp = self.fetch(url) + content = rsp.text + jo = json.loads(content) + videos = [] + vodList = jo['data']['result'] + numvL = len(vodList) + pgc = math.ceil(numvL/15) + for vod in vodList: + aid = (vod['room_id']) + title = vod['room_name'].strip() + img = vod['room_src'] + remark = (vod['game_name']).strip() + videos.append({ + "vod_id": aid, + "vod_name": title, + "vod_pic": img, + "vod_remarks": remark + }) + result['list'] = videos + result['page'] = pg + result['pagecount'] = pgc + result['limit'] = numvL + result['total'] = numvL + return result + + def detailContent(self,array): + aid = array[0] + url = "https://m.live.qq.com/{0}".format(aid) + rsp = self.fetch(url) + html = self.cleanText(rsp.text) + if self.regStr(reg=r'\"show_status\":\"(\d)\"', src=html) == '1': + title = self.regStr(reg=r'\"room_name\":\"(.*?)\"', src=html) + pic = self.regStr(reg=r'\"room_src\":\"(.*?)\"', src=html) + typeName = self.regStr(reg=r'\"game_name\":\"(.*?)\"', src=html) + remark = self.regStr(reg=r'\"nickname\":\"(.*?)\"', src=html) + purl = self.regStr(reg=r'\"hls_url\":\"(.*?)\"', src=html) + else: + return {} + vod = { + "vod_id": aid, + "vod_name": title, + "vod_pic": pic, + "type_name": typeName, + "vod_year": "", + "vod_area": "", + "vod_remarks": remark, + "vod_actor": '', + "vod_director":'', + "vod_content": '' + } + playUrl = '{0}${1}#'.format(typeName, purl) + vod['vod_play_from'] = '企鹅体育' + vod['vod_play_url'] = playUrl + + result = { + 'list': [ + vod + ] + } + return result + + def searchContent(self,key,quick): + result = {} + return result + def playerContent(self,flag,id,vipFlags): + result = {} + url = id + header = { + 'Referer': 'https://m.live.qq.com/', + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36" + } + result["parse"] = 0 + result["playUrl"] = '' + result["url"] = url + result["header"] = header + return result + + config = { + "player": {}, + "filter": {} + } + header = {} + + def localProxy(self,param): + action = { + 'url':'', + 'header':'', + 'param':'', + 'type':'string', + 'after':'' + } + return [200, "video/MP2T", action, ""] \ No newline at end of file diff --git a/tianjitop/llllo4k/lib/爱听音乐.py b/tianjitop/llllo4k/lib/爱听音乐.py new file mode 100644 index 00000000..28c99ddd --- /dev/null +++ b/tianjitop/llllo4k/lib/爱听音乐.py @@ -0,0 +1,240 @@ +import re +import sys +from base64 import b64encode, b64decode +from urllib.parse import quote, unquote +from pyquery import PyQuery as pq +from requests import Session, adapters +from urllib3.util.retry import Retry +from concurrent.futures import ThreadPoolExecutor, as_completed +sys.path.append('..') +from base.spider import Spider + +class Spider(Spider): + def init(self, extend=""): + self.host = "https://www.22a5.com" + self.session = Session() + adapter = adapters.HTTPAdapter(max_retries=Retry(total=3, backoff_factor=0.5, status_forcelist=[429, 500, 502, 503, 504]), pool_connections=20, pool_maxsize=50) + self.session.mount("http://", adapter) + self.session.mount("https://", adapter) + self.headers = {"User-Agent": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36"} + self.session.headers.update(self.headers) + + def getName(self): return "爱听音乐" + def isVideoFormat(self, url): return bool(re.search(r'\.(m3u8|mp4|mp3|m4a|flv)(\?|$)', url or "", re.I)) + def manualVideoCheck(self): return False + def destroy(self): self.session.close() + + def homeContent(self, filter): + classes = [{"type_name": n, "type_id": i} for n, i in [("歌手","/singerlist/index/index/index/index.html"), ("TOP榜单","/list/top.html"), ("新歌榜","/list/new.html"), ("电台","/radiolist/index.html"), ("高清MV","/mvlist/oumei.html"), ("专辑","/albumlist/index.html"), ("歌单","/playtype/index.html")]] + filters = {p: d for p in [c["type_id"] for c in classes if "singer" not in c["type_id"]] if (d := self._fetch_filters(p))} + + if "/radiolist/index.html" not in filters: + filters["/radiolist/index.html"] = [{"key": "id", "name": "分类", "value": [{"n": n, "v": v} for n,v in zip(["最新","最热","有声小说","相声","音乐","情感","国漫","影视","脱口秀","历史","儿童","教育","八卦","推理","头条"], ["index","hot","novel","xiangyi","music","emotion","game","yingshi","talkshow","history","children","education","gossip","tuili","headline"])]}] + + filters["/singerlist/index/index/index/index.html"] = [ + {"key": "area", "name": "地区", "value": [{"n": n, "v": v} for n,v in [("全部","index"),("华语","huayu"),("欧美","oumei"),("韩国","hanguo"),("日本","ribrn")]]}, + {"key": "sex", "name": "性别", "value": [{"n": n, "v": v} for n,v in [("全部","index"),("男","male"),("女","girl"),("组合","band")]]}, + {"key": "genre", "name": "流派", "value": [{"n": n, "v": v} for n,v in [("全部","index"),("流行","liuxing"),("电子","dianzi"),("摇滚","yaogun"),("嘻哈","xiha"),("R&B","rb"),("民谣","minyao"),("爵士","jueshi"),("古典","gudian")]]}, + {"key": "char", "name": "字母", "value": [{"n": n, "v": v} for n,v in [("全部","index")] + [{"n": chr(i), "v": chr(i).lower()} for i in range(65, 91)]]} + ] + return {"class": classes, "filters": filters, "list": []} + + def homeVideoContent(self): return {"list": []} + + def categoryContent(self, tid, pg, filter, extend): + pg = int(pg or 1) + url = tid + if "/singerlist/" in tid: + p = tid.split('/') + if len(p) >= 6: + url = "/".join(p[:2] + [extend.get(k, p[i]) for i, k in enumerate(["area", "sex", "genre"], 2)] + [f"{extend.get('char', 'index')}.html"]) + elif "id" in extend and extend["id"] not in ["index", "top"]: + url = tid.replace("index.html", f"{extend['id']}.html").replace("top.html", f"{extend['id']}.html") + if url == tid: url = f"{tid.rsplit('/', 1)[0]}/{extend['id']}.html" + + if pg > 1: + sep = "/" if any(x in url for x in ["/singerlist/", "/radiolist/", "/mvlist/", "/playtype/", "/list/"]) else "_" + url = re.sub(r'(_\d+|/\d+)?\.html$', f'{sep}{pg}.html', url) + + doc = self.getpq(url) + return {"list": self._parse_list(doc(".play_list li, .video_list li, .pic_list li, .singer_list li, .ali li, .layui-row li, .base_l li"), tid), "page": pg, "pagecount": 9999, "limit": 90, "total": 999999} + + def searchContent(self, key, quick, pg="1"): + return {"list": self._parse_list(self.getpq(f"/so/{quote(key)}/{pg}.html")(".base_l li, .play_list li"), "search"), "page": int(pg)} + + def detailContent(self, ids): + url = self._abs(ids[0]) + doc = self.getpq(url) + vod = {"vod_id": url, "vod_name": self._clean(doc("h1").text() or doc("title").text()), "vod_pic": self._abs(doc(".djpg img, .pic img, .djpic img").attr("src")), "vod_play_from": "爱听音乐", "vod_content": ""} + + if any(x in url for x in ["/playlist/", "/album/", "/list/", "/singer/", "/special/", "/radio/", "/radiolist/"]): + eps = self._get_eps(doc) + page_urls = {self._abs(a.attr("href")) for a in doc(".page a, .dede_pages a, .pagelist a").items() if a.attr("href") and "javascript" not in a.attr("href")} - {url} + if page_urls: + with ThreadPoolExecutor(max_workers=5) as ex: + for r in as_completed([ex.submit(lambda u: self._get_eps(self.getpq(u)), u) for u in sorted(page_urls, key=lambda x: int(re.search(r'[_\/](\d+)\.html', x).group(1)) if re.search(r'[_\/](\d+)\.html', x) else 0)]): + eps.extend(r.result() or []) + if eps: + vod.update({"vod_play_from": "播放列表", "vod_play_url": "#".join(eps)}) + return {"list": [vod]} + + play_list = [] + if mid := re.search(r'/(song|mp3|radio|radiolist|radioplay)/([^/]+)\.html', url): + lrc_url = f"{self.host}/plug/down.php?ac=music&lk=lrc&id={mid.group(2)}" + play_list = [f"播放${self.e64('0@@@@' + url + '|||' + lrc_url)}"] + + elif vid := re.search(r'/(video|mp4)/([^/]+)\.html', url): + with ThreadPoolExecutor(max_workers=3) as ex: + fs = {ex.submit(self._api, "/plug/down.php", {"ac": "vplay", "id": vid.group(2), "q": q}): n for n, q in [("蓝光", 1080), ("超清", 720), ("高清", 480)]} + play_list = [f"{fs[f]}${self.e64('0@@@@'+u)}" for f in as_completed(fs) if (u := f.result())] + play_list.sort(key=lambda x: {"蓝":0, "超":1, "高":2}.get(x[0], 3)) + + vod["vod_play_url"] = "#".join(play_list) if play_list else f"解析失败${self.e64('1@@@@'+url)}" + return {"list": [vod]} + + def playerContent(self, flag, id, vipFlags): + raw = self.d64(id).split("@@@@")[-1] + url, subt = raw.split("|||") if "|||" in raw else (raw, "") + url = url.replace(r"\/", "/") + + if ".html" in url and not self.isVideoFormat(url): + if mid := re.search(r'/(song|mp3|radio|radiolist|radioplay)/([^/]+)\.html', url): + if r_url := self._api("/js/play.php", method="POST", data={"id": mid.group(2), "type": "music"}, headers={"Referer": url.replace("http://","https://"), "X-Requested-With": "XMLHttpRequest"}): + url = r_url if ".php" not in r_url else url + elif vid := re.search(r'/(video|mp4)/([^/]+)\.html', url): + with ThreadPoolExecutor(max_workers=3) as ex: + for f in as_completed([ex.submit(self._api, "/plug/down.php", {"ac": "vplay", "id": vid.group(2), "q": q}) for q in [1080, 720, 480]]): + if v_url := f.result(): + url = v_url; break + + result = {"parse": 0, "url": url, "header": {"User-Agent": self.headers["User-Agent"]}} + if "22a5.com" in url: result["header"]["Referer"] = self.host + "/" + + # OK影视3.6.5+支持LRC格式滚动歌词 + if subt: + try: + r = self.session.get(subt, headers={"Referer": self.host + "/"}, timeout=5) + lrc_content = r.text + if lrc_content: + # 过滤广告内容 + lrc_content = self._filter_lrc_ads(lrc_content) + result["lrc"] = lrc_content + except: + pass + + return result + + def _filter_lrc_ads(self, lrc_text): + """过滤LRC歌词中的广告内容""" + lines = lrc_text.splitlines() + filtered_lines = [] + + # 广告关键词模式 + ad_patterns = [ + r'欢迎来访.*', + r'本站.*', + r'.*广告.*', + r'QQ群.*', + r'.*www\..*', + r'.*http.*', + r'.*\.com.*', + r'.*\.cn.*', + r'.*\.net.*', + r'.*音乐网.*', + r'.*提供.*', + r'.*下载.*', + ] + + for line in lines: + # 保留时间标签行,但过滤掉广告文本 + if re.match(r'\[\d{2}:\d{2}', line): + # 检查是否包含广告 + is_ad = False + for pattern in ad_patterns: + if re.search(pattern, line, re.IGNORECASE): + is_ad = True + break + + if not is_ad: + filtered_lines.append(line) + else: + # 非时间标签行(可能是元数据),保留 + filtered_lines.append(line) + + return '\n'.join(filtered_lines) + + def localProxy(self, param): + url = unquote(param.get("url", "")) + type_ = param.get("type") + + if type_ == "img": + return [200, "image/jpeg", self.session.get(url, headers={"Referer": self.host + "/"}, timeout=5).content, {}] + + elif type_ == "lrc": + try: + r = self.session.get(url, headers={"Referer": self.host + "/"}, timeout=5) + # 同时过滤代理中的广告 + lrc_content = r.text + lrc_content = self._filter_lrc_ads(lrc_content) + return [200, "application/octet-stream", lrc_content.encode('utf-8'), {}] + except: + return [404, "text/plain", "Error", {}] + + return None + + def _parse_list(self, items, tid=""): + res = [] + for li in items.items(): + a = li("a").eq(0) + if not (href := a.attr("href")) or href == "/" or any(x in href for x in ["/user/", "/login/", "javascript"]): continue + if not (name := self._clean(li(".name").text() or a.attr("title") or a.text())): continue + pic = self._abs((li("img").attr("src") or "").replace('120', '500')) + res.append({"vod_id": self._abs(href), "vod_name": name, "vod_pic": f"{self.getProxyUrl()}&url={pic}&type=img" if pic else "", "style": {"type": "oval" if "/singer/" in href else ("list" if any(x in tid for x in ["/list/", "/playtype/", "/albumlist/"]) else "rect"), "ratio": 1 if "/singer/" in href else 1.33}}) + return res + + def _get_eps(self, doc): + eps = [] + for li in doc(".play_list li, .song_list li, .music_list li").items(): + if not (a := li("a").eq(0)).attr("href") or not re.search(r'/(song|mp3|radio|radiolist|radioplay)/([^/]+)\.html', a.attr("href")): continue + full_url = self._abs(a.attr("href")) + + lrc_part = "" + mid = re.search(r'/(song|mp3|radio|radiolist|radioplay)/([^/]+)\.html', full_url) + if mid: + lrc_url = f"{self.host}/plug/down.php?ac=music&lk=lrc&id={mid.group(2)}" + lrc_part = f"|||{lrc_url}" + + eps.append(f"{self._clean(a.text() or li('.name').text())}${self.e64('0@@@@' + full_url + lrc_part)}") + return eps + + def _clean(self, text): return re.sub(r'(爱玩音乐网|视频下载说明|视频下载地址|www\.2t58\.com|MP3免费下载|LRC歌词下载|全部歌曲|\[第\d+页\]|刷新|每日推荐|最新|热门|推荐|MV|高清|无损)', '', text or "", flags=re.I).strip() + + def _fetch_filters(self, url): + doc, filters = self.getpq(url), [] + for i, group in enumerate([doc(s) for s in [".ilingku_fl", ".class_list", ".screen_list", ".box_list", ".nav_list"] if doc(s)]): + opts, seen = [{"n": "全部", "v": "top" if "top" in url else "index"}], set() + for a in group("a").items(): + if (v := (a.attr("href") or "").split("?")[0].rstrip('/').split('/')[-1].replace('.html','')) and v not in seen: + opts.append({"n": a.text().strip(), "v": v}); seen.add(v) + if len(opts) > 1: filters.append({"key": f"id{i}" if i else "id", "name": "分类", "value": opts}) + return filters + + def _api(self, path, params=None, method="GET", headers=None, data=None): + try: + h = self.headers.copy() + if headers: h.update(headers) + r = (self.session.post if method == "POST" else self.session.get)(f"{self.host}{path}", params=params, data=data, headers=h, timeout=10, allow_redirects=False) + if loc := r.headers.get("Location"): return self._abs(loc.strip()) + return self._abs(r.json().get("url", "").replace(r"\/", "/")) or (r.text.strip() if r.text.strip().startswith("http") else "") + except: return "" + + def getpq(self, url): + import time + for _ in range(2): + try: return pq(self.session.get(self._abs(url), timeout=5).text) + except: time.sleep(0.1) + return pq("<html></html>") + + def _abs(self, url): return url if url.startswith("http") else (f"{self.host}{'/' if not url.startswith('/') else ''}{url}" if url else "") + def e64(self, text): return b64encode(text.encode("utf-8")).decode("utf-8") + def d64(self, text): return b64decode(text.encode("utf-8")).decode("utf-8") \ No newline at end of file diff --git a/tianjitop/llllo4k/one.json b/tianjitop/llllo4k/one.json new file mode 100644 index 00000000..d3ad75c7 --- /dev/null +++ b/tianjitop/llllo4k/one.json @@ -0,0 +1,2624 @@ +{ + "warningText": "资源来自网络,无盈利纯技术分享![所有内容仅供学习使用,请勿用于违法及商业用途,请勿付费购买]", + "spider": "./xiaosa.jar", + "wallpaper": "http://127.0.0.1:9978/proxy?do=wallpaper", + "sites": [ + { + "key": "豆瓣", + "name": "豆瓣|首页", + "type": 3, + "api": "csp_Douban", + "searchable": 0 + }, + { + "key": "配置中心", + "name": "配置|中心", + "type": 3, + "api": "csp_Config", + "searchable": 0, + "changeable": 0, + "indexs": 0, + "style": { + "type": "rect", + "ratio": 1.597 + } + }, + { + "key": "本地", + "name": "本地|视频", + "type": 3, + "api": "csp_LocalFile" + }, + { + "key": "预告", + "name": "新片|预告", + "type": 3, + "api": "csp_YGP", + "searchable": 0 + }, +{ + "key": "金桔_js", + "name": "金桔|秒播", + "api": "./js/金桔.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "type": 3 + }, + { + "key": "mafa", + "name": "麻花|影视", + "type": 3, + "api": "./py/麻花.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 +}, + { + "key": "七猫", + "name": "七猫|影视", + "type": 3, + "api": "./py/七猫.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 0 +}, +{ + "key": "4K影视", + "name": "4K电影网|秒播", + "type": 3, + "api": "./py/4K电影网.py", + "searchable": 1, + "quickSearch": 1, + "changeable": 1, + "filterable": 1 +}, + { + "key": "4KAAV_js", + "name": "4K|AV", + "api": "./js/4KAV.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "type": 3 + }, +{ + "key": "柯南影视", + "name": "柯南|秒播", + "type": 3, + "api": "./py/柯南.py", + "searchable": 1, + "quickSearch": 1, + "changeable": 1, + "filterable": 1 +}, + { + "key": "山楂影视", + "name": "山楂|秒播ok壳子用不闪退", + "type": 3, + "api": "./py/山楂影视.py", + "searchable": 1, + "quickSearch": 1, + "changeable": 1, + "filterable": 1 +}, + { + "key": "冠峰", + "name": "冠峰|秒播", + "type": 3, + "api": "./py/guanfeng.py", + "searchable": 1, + "quickSearch": 1, + "ext": { + "分类url": "https://www.guan-feng.com/" + } + }, + { + "key": "爱影视", + "name": "爱影视|秒播", + "type": 3, + "jar": "./jars/XM.png", + "api": "csp_AppGet", + "ext": "https://aysappto.oss-cn-chengdu.aliyuncs.com/q23.txt|nzEqOgYk3QzHuEP8|V122|okhttp/3.10.0" + }, + { + "key": "4K影院", + "name": "光影|秒播", + "type": 3, + "jar": "./jars/XM.png", + "api": "csp_AppGet", + "ext": "https://yun-1316442804.cos.ap-guangzhou.myqcloud.com/601.txt|FTgP4Gq8zPiqbt7M|V122|okhttp/3.10.0" + }, +{ + "key": "bubutv", + "name": "步步影视|秒播", + "type": 3, + "api": "http://52xinghe.top/%e6%98%9f%e6%b2%b3/js/4k.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1 + }, +{ + "key": "猎手影视", + "name": "猎手|秒播", + "type": 3, + "api": "./py/猎手影视.py", + "searchable": 1, + "changeable": 1, + "quickSearch": 1, + "filterable": 1, + "playerType": 2 + }, + { + "key": "映画", + "name": "映画|秒播", + "type": 3, + "api": "csp_AppGet", + "searchable": 1, + "changeable": 1, + "ext": { + "url": "https://cms140.yhg.one/", + "dataKey": "bM7iC9eA3oZ1nB7z", + "dataIv": "bM7iC9eA3oZ1nB7z" + } + }, + { + "key": "小鹿", + "name": "小鹿|秒播", + "type": 3, + "api": "csp_AppQi", + "searchable": 1, + "changeable": 1, + "ext": { + "site": "https://xiaolu-1319209748.cos.ap-beijing.myqcloud.com/xiaolu.txt", + "dataKey": "x5Bep6Q78VCeYnPS", + "dataIv": "x5Bep6Q78VCeYnPS", + "ua": "okhttp/3.10.0" + } + }, + { + "key": "py_jieyingshi", + "name": "哈基咪|秒播", + "type": 3, + "api": "./py/jieyingshi.py", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "changeable": 0 + }, + { + "key": "看剧影视", + "name": "哈基咪|秒播", + "type": 3, + "api": "https://gh-proxy.com/https://raw.githubusercontent.com/IY-CPU/IY/main/lib/AppToV5.py", + "ext": "http://43.248.117.123:4680" + }, + { + "key": "裤佬爱剧PY", + "name": "皮皮虾|秒播", + "type": 3, + "api": "https://gh-proxy.com/https://raw.githubusercontent.com/maoystv/tt/refs/heads/0/ppx.py", + "ext": "http://43.248.117.123:4680" + }, + { + "key": "分享", + "name": "枫叶|秒播(ok壳子可以用)", + "type": 3, + "api": "https://pan.szfx.top/down.php/48ef3750f0362fb0c02c5066d2ffff92.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "playable": 1 + }, + { + "key": "四叶草", + "name": "四叶草|秒播", + "type": 3, + "api": "csp_AppQi", + "searchable": 1, + "changeable": 1, + "ext": { + "site": "https://yzysap.oss-cn-hangzhou.aliyuncs.com/kkk.txt", + "dataKey": "8eeObuwrmS3lRDEs", + "dataIv": "8eeObuwrmS3lRDEs", + "ua": "okhttp/3.10.0" + } + }, + { + "key": "荐片_js", + "name": "荐片|秒播", + "api": "./lib/jianpian.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "type": 3 + }, + { + "key": "热播影视", + "name": "热播|APP", + "type": 3, + "api": "csp_AppRJ", + "searchable": 1, + "quickSearch": 1, + "filterable": 0, + "ext": { + "url": "http://v.rbotv.cn" + } + }, + { + "key": "三秋影视", + "name": "三秋|APP", + "type": 3, + "api": "csp_App3Q" + }, + + { + "key": "爱营", + "name": "爱营|秒播", + "type": 3, + "jar":"./NJ4ZWwg7_20260518095827A465.jpg;md5;84edf41db6dbaf56b1ccdc7a11cc0ddf", + "searchable": 1, + "changeable": 1, + "api": "csp_AppGet", + "ext": "https://aysappto.oss-cn-chengdu.aliyuncs.com/q23.txt|nzEqOgYk3QzHuEP8|V122|okhttp/3.10.0" + }, +{ + "name": "大师兄|秒播", + "key": "AppV6Dxs", + "type": 3, + "jar": "./jars/e0c4dcbc-c0fc-4694-800b-9ff9a0dffd37.jar", + "api": "csp_AppV6Amns", + "searchable": 1, + "quickSearch": 1, + "changeable": 0, + "ext": "fbe15714a2413f05151fea6864509533510f3a0bb290dd40e3a2c65650bcf144db38b7a8945b776cf8933cb38e93a7d5d36988f5cbd33db73a1432681073eb45b4ce8224060c20ef229653f6b45f4e3a327a40e74bc51f710207b43b74b9bc3f9a2f70608e9c4783ddefc066662fb396be2d3c44dd2df48630d381176fd82e54565eccc47d944de1ff2bad4be0be043beaebd8fdcc0b6df5b1c2c3ec1f7d02b0e3f57e9af680cff3627e68d389379a8d3efdadb70e25135a3c473ddf249277ad12c9fa11002df91d7303627b06ac6bddd67ea082a758c6805628c06dcb22cafb109efad1389006e9c9518c7f85b2ab546315a1005adbf726ffe50d1f679fcf3b40e05f14698f8f5b6d1d829d6871d912056f1eee83cc1df1d9a126422781356e81cf24598a0216206fa59d2645a5812cc73e603190521454e77cc06c3640ea0799b83d60a3a0eaf5e28a7797ab77181d2b91aff50d9e1af419f10b839dc9fc61fb392ce138aaa6126f9eb3be09e94a87b96ac883c72c26d4b81d52de2696f40593b059ddd2279c354dc23d72a1f98150ec0be0dc0a5f6fdb93583b092c768b7fb8dd1bd43b59622810382fd21385606490610364fcd13e908f57a012f26e4cd4d1cee74c000bdc19edf27cb469f085c99cc9b8d9ae0f8b21473240c4a048a7dc8c6e5663258cc9184b1925ad8cb4e377f1cb78f06ee983263f47db396bb64d7118a2bb732d566408125f8ea1cb4158e6b70ac0bcff54ad45274772aaf96ca6183abfa8f0b3606404543823afc801edb734912f6777c30170a8fd0ddc9f69a3dc63885e23014f424e7a9fb8c29572d9d3004ea65a9dcf623f9c5c40abc52dc1c26e22ee9339b1ecdb0a3fe6e015cbeab7b7e091d8e7174fbbebdf82f2e1460ca94a61d3124272394619f9d84ac2b3be2fe70dfb9fa12fa8e153125327cb504b970380bf4bac66bcbf3fc3dd64855698ef82a4b0d88ef29e6bc89fe87a3354c941161e8c04a360402e906d30f095587c46ce26b9b7e1d15f7108cb01ff86c9b5a6c7bdfa9258d92602f04c6a77200754c0d4e8b1b5221e465ee36198100b53eb85eb59558016af86125162a95f24e329f87e371906d7f3fbed0f4994acd9a5b3fc2b206a5fcbc4316152f6fb6ac53b8dcffb65e2fde676f32cc9e24a2a954ade411b5ee92e809a86f8a8ac741aba21ce17a7dfb194a2ad36f5f44240669543e9051dc21c7a887d80f4a5cdfbab54903e7caaa2b7daa9ed00903093e33a95682a8fad5b5361a71a9f14f6917c964870994a6b9bca00732473bd6eed0c9e7d7a068d84cf395ae20639c545a1916786b27e85d5eb3189233da8e3361279a7d76ee6605fade068462ad8387a5be98a90d866807a98506d3efac36846329350701d3d0996f1c35009ac46493a76eccb702fd1762cd10bc50e22f3ea34c8902e2d92f07f9d519768e564c23fda9172b9b359bb8d3b508554bb4bf488f283c30f89a7320a542ba985b2df0ec20401a4ddf120f2cc427604c84d7b9340c323169cfd0a5e17d47991eb1bcc0d031297370df81f4ea242bdd5f4c76caac6f5651ba28683d2623ea5b988d3a5c938f2126bd9b49ee4579227ba7458a61bf7b2f88a0f6879242a1584593ca13d9915ec150110997cf3526d3dbdd70d9b1ef0f9c20ec0b7e394f9ae34d5b3b549805553434e9ad0baff73e8eb2dc58bcc38d2b377bb999dc5f940fed55a97951dfc5cda514c37dcdc88aff46de8617a66cfe1372c55e5bfc7d70634a51f39c665beb4bd95b7de9473da306ad9d3de48a301f01187864ff4682cb6852eb865aabb8bdb7de43daeedba1ebb755aba14d954d4a290fc6ac4e0af70577fe9850b631259eb63dfda69026955a6332fbbf84a63cba9d9253581771a61f2aa108c06e1e449637781d8c830b0e3ac20f10de7088175be90761afd66da37adead8a7241fcb4e2a571885bde71811daa240012cb6effe2fc7380027b3e85cf32c0dd40569775983451603ee7687273eeaad5825d58adec12b9489d5a22e8ba08978984f0274dc53537ecd285e2c12dafec32cd3419dde63a1639794bf70c102b6b53fa1fdff744d757c0d6c05a30a9b561821a8846ce9ef0f26" + }, + { + "name": "夏天|秒播", + "key": "NewGrV2", + "type": 3, + "jar": "./jars/e0c4dcbc-c0fc-4694-800b-9ff9a0dffd37.jar", + "api": "csp_NewGrV2Amns", + "searchable": 1, + "quickSearch": 1, + "changeable": 0, + "ext": "e5f15714a2413f05151fea686450950ace809216b88f37b7b1fb4f1ce80eff9fab1b6be3fd1f9df9a5a915365aefecb314d297b5e1747337c20236c3637c2aeaebfce371e9053be3898bb20a9ef20bbf13173fb2ad38b4474346328a3a354451a1b5f96c490cc09840a195bc498f9e11499df11b3946e58e4c705a8457521ed34c879c458a9b27e487496c7a63a7ca8b34133bca4943b0019d982462cc22294e7c4ab447899b0e8bc667c7e635e8291fa544e8e28d8b16b8b702912f2d5ec561e1fb8667cc44bef7cae73f5022c94518cb7f0845d772d44944a88ff71d9a562a6204729a8f1b00c81ba195664482e756859f12048f73e986ad3bb6584935696dff959b0f82055f23d94f6a935103b574a98d54079a0be6647fcaca4db0d177ac3004eb51819a8e539646a141" + }, + { + "key": "先生|晓飒", + "name": "先生|秒播", + "type": 3, + "api": "csp_XBPQ", + "ext": "./lib/先生.js" + }, +{ + "key": "威武|影视", + "name": "威武|秒播", + "type": 3, + "api": "./py/威武.py", + "ext": "http://43.248.117.123:4680", + "quickSearch": 1 + }, + { + "key": "布布|影视", + "name": "布布|秒播", + "type": 3, + "api": "./py/布布.py", + "style": { + "type": "rect", + "ratio": 1.33 + }, + "quickSearch": 1 + }, + { + "name": "①|独家App", + "key": "AppV7Fz", + "type": 3, + "jar": "./jars/3f8285c5-fb00-40ea-a288-b71db3571819.png", + "api": "csp_AppV7Amns", + "searchable": 1, + "quickSearch": 1, + "changeable": 0, + "ext": "60a35714a2413f05151fea6864509533510f048c89b582eb125174a0c364626eb83a35618bdd10c1840663d38fb441b8ff25a078bc11c7a8f17ad5b723195ef16fe405746bf6b3defd8d16ac2d07b6f6580ea4826889761c1eae278162b6dc791fff46bcd3a42acfdd470315a17f741eeb834b4fb9f184e3baa5e698b9a771341f86037ec6fa0b8b5d3e2f12172d3ba5779bcbd40a9a9842e5e20efe45b59459bcf5269b50355cebeab216ced19dff4c8d1e3968be184fd3d5609eae3e6089d84bc7b97286027f67ef0d2b19002a7cfd7ad3094cb22ee9efd9dfcb7554f5b204f3bb205ac783272c59d9fa88672e92c91cf1f022930ce8acf1850b86c110e19cc99041d491a3330e53981a954fac8b71af43e3c200c360968d571b1ccbec1a91abfc9e6723b8b2fe1f77057423a7c152c35e5a6573a8dca051273febfe8fd8c12383a37226d8b0f4e8f09e3fbb99becc533165486f60cba1ba247842491d5dd10bc79cad14ecd4da86d0b4e9b416cda8bae4f52156c5165025cda138161b660c1e488c6fa4e733e7c78731b21564faf5008f69b326c9bde49778fd9a7a41de21b7d3dcecdd24612797482cd1a781477ad0a8d8fd4d2529dd6d2df6f8bce753b207e81e7d86040062b22aef2bbe1890730797d1f565c07534c959310ab186b766f7fd08d72f51150834a2574c82b20a5b4d7988f7c6cdbecff44213a443f4745695d063b85b4dde937b3b0e1500eb0aa3df69a8e3439c7ed756e828c337593dcde5f2fde83450b7b6897185641e2d3ca79f205dadcd6b72f5d71711c461386a4d758a03bc5e4af817f34dc49e522233044b31dff72440a78c6e8ccccc20ded8439d77efaa365055a34ab71df7ada0ac4f8ce655c4a9780bb16fed6ec0fa6804b02723ad112137bb77729a12eed632baed3f5319afc6ec5cf36fab460429e11bd16604c945086d022237bd387bdc54ad166d35c7b68d55a5ac2f2d96366b1ea6c4a65aca2d2cef14426bbd1e4d39472f050b98126e960aa6ae32d2490509d34e093d432b3bc4a3b47ed04e84874fe52bc7fda34d651cfba4a63152b13b14f2f21c3eaaa6b37dcfee55eceb180d7a6613a297c8ec0177beda009d9fc4ec5d5b9e03fb5309dd10543506d3d079dbeab94ab9999f2c5177697216fd3dde3755b21bb171c26178a3605be3bf52a182f29826e68168883e1ee37b964e27b5daba0e0870c1af08d5f7886d2d12d83250987c12d85caed8fd04fcbacd2c95ab7b8d23eb7c974e6c991a6c9cd1bc953919a240976a47565acd471a6e1f7c0a3bca6056a79c840e1196193301681140a348024d507a88675fcf6a27f1c4b57c55fec5ec94427d02699992da10486c03a961a596651c8b06c43ede2a5412036f98cfc264c1c0634accc532cec8f1e20cc2bcf4391a212fdd72327ddf009234d4015e90e579ef6aed5f1faaa9ac1575fa357a1be3c3a81a7687fc240625feb29c220aca44a5a5b2f2c7ee3417bdf51f374d15e1797afdc0c14b8540dae08eb383610067b679cd6484bbd1b120596358d9d25ec09b46f9a2ea907c1c2351ba704a7ae2a44880dac51711547fd12fae2724ee4321061742c69ed2b7ad59465afcc324aa6458264c3e6bf0ca12b59110b6532bf3d594a576c9275f251562ab2769ebae79ee49000afeb5df2485258170f10aace3aebf8a50ab022330557c4af9520693d419bafa9feb53131f809b8899844e032ca4e0a1ecd8291e6f7b67ec85d4968a4fcac270eca71c34406970596997502bb315ab02dab44d1cec445dcea317c82442aaee948345416bd9fa6161a60700c37ea4209ce91ff94d65fdae641484b8cd3516da0f69b7f4de06809c0829727b10761b6379bd584ffaa38b55e584d65edc750ddc2eb54f7eae93798fa85f0ea1bf2ba5187084fb0259e6a5f05a3129abe89342bab466e09cfc6b845bc0f149372d5b3acf5eb998a73849b7d8d6a2170fd2ae7c39c480eb3bb8b1d3c4a716d4a85f8f708747c275bab0c069e1395d5ec7c3766c3749a8d0d9d9a71dcbeef767fcb889cf95067ae70319aea679ea055b89ccef0652df98ce5189a79ee5cbdb249bba4bda75f2b6f7c353a4cb8d603e41309d2d54f35b51746a50f43bf1ab95a5d4911cdfb4a33431dbb4c201825fb01acfe258d0e2f38404402b8137f7294793b17df1d3fca49673326548577ce905c318fa3333805708f6321796b9c7a73cd1895b15628f4722f1042372565a88c195feb01a29ff3cb711c7213a06f2891a36e2f6eab65e2ec5d6202730f3794a3107e82e2ad442be840ba9a80bca05d5f36763edc10fcb26fcfa8d2cc95f9b1e3b276c378a5a525dd1648239c13016f57e922e305058a42144a48cd3f62d41e72ca27ab8990212e5661aa9be53e7c107a2bff5bf095a63d129105623ea2546c76a9fd88c148f2b0cb2d1af2062c39c6844ae2db0cab2df7e1f665c64cacab3d96b40cea358a7c8b66621c35c96f1605b809d69d09c310e98498646a12015632c7d4a1179ab641868efa77cee536ab932aea775c55d3867733d281d1ac789957d177e333ecbd8e353aa12a947364d53bd3d30bcbecb4a830700eb2a88fda4761378e83d40a49d6ba484a4ba25fa568b5008764209b7160bf5ac40f00de7a536cb607f4a342a0cdbce81eb95e390f9fe0a494da1f5e24ca421a4f76a86d4c73229df6e73756294ad9c9944c07c61a580c538baf39d65db73712488471bcf40e3bbe53114ba9998c5d7225f29d767668f70a647df71323df1c18b562ec6d601e4dbc33434177c6e580851bd135174460d1ea9a8eb98dd6891e56d687a5e4711fa1af3b7031a655592af2542083362647103096c9b3ad86ac908594696b282ea59c62041af26e2fd6fa4e647c199670315be759050a122bd7e9252643245a60be543f252e70ddfe1e714683884049611f453ca7c7b08778372fbf578f5ad5b72c97e17a3a3cfef866dac1d7e0d4ad53058200d0ea0b500a158380784" + }, + { + "name": "②|独家App", + "key": "AppV7Xy", + "type": 3, + "jar": "./jars/3f8285c5-fb00-40ea-a288-b71db3571819.png", + "api": "csp_AppV7Amns", + "searchable": 1, + "quickSearch": 1, + "changeable": 0, + "ext": "c3c15714a2413f05151fea6864509533510f79b104fb5bdb95f6904ef2318ad86ce4dfe796c4e63fd050695a813534fe77dad1fce40faec6f4c229e3a369420975823bb9d4a2544a16f87f3b85dbe0d23b12b94031672b5f7cacc8b5bda77c549d560b7ea461e1bca00d81dd68c860de33ba77ea23895efb582e98ccffee51b3296277820fd3a6fe3f65e7c0a93f7c07a4cd91d63f66cb2921cb013d0e93f0059e6f35d839b1ebb40078ed89b20115f85ff6d81d97ab99c0536638ab4454df59b59b025dbfc9c870f18d990519c2c5f2df68a619581a30f4b99be2fb23d7efde2642327a6e37ba955c985294082352c19ea83770f754a50046886aa3e388784c9538f688af27a15675e49dc788d4bd0d85becf809feb9c29c737bd3a5474c19ace10533e2e4f1e4b2d238f2544eb641c0cf63710d9b5c308c49e0c2634d655d1f25cb40920ce8d594d79a80be0f90261ea0a2152996d94407b4c5287373623ae0fe61ebfbee98cd97e3a2e797c8967bd789c2cd0876ce90ddc7fbf314c7a0b72a2d3a148895a00e08286d2856f71b1174d960b4d3227e9cd0c073c49e8cf36d5eeddd9cdf15f602e5affe008fae1ebd57bb4f0c2878d9e88963775e8dcc4ad47dd19742245f2b39e8408a282af41d58a1eb9d6b40d45850023ca64e03e1726d525cd427e24908e1a767a6e336688a87572d46a69fe6eb20e46a62f0b4a7b8a63c1d6199598651c2117f996e64dcda0965e6efd181a03ef25ea250024f3115f8b248463a0d5fa6ced6062685178094e99be04a4a06d7fca69df61df774dfb7194e6dce449aa09b6d485084cb5abb7610485feced52a674b5063cdcaed045afefd09496a610db5eb15749c3a1b618f9ec99c0984dea2f8dca13712f93973784209f67db853e929fa35d9e7759a5202ed97160e04ac2c1e888356a84644b1a85a497423b8c917d44f01ed92337a3cb1c9abbf4ac49c8a0b6f956e8b0ca5fd26ab653f43d1046857fdffa24aa46264c6ff15237d480f3a09d0000370776a2c97f5beef1d0c5d28ae144a948631b836cffecc1ef73768156491e00f9089544832eabf282d7078a6e84c016cdb9227dd12d56aaa45db949ff3e14c7c15f9539262238e26edff31a560e13c1a592a5b006c343caf6b3f89483cd2027b8de272ad91572940602f9bd1bcd2d8de662758d85597ea381bfa98ea37f24c5e29a0b2a60747c94cff5e35c3c22664397dd0a46c078d716f7a0887dfcd57317fea06a7fdc75570b81dd226454d378e069fdac787fc2a264f90911ff1506f9415cfea91593489039590c3e6b42004086bdbf228c41b509a3cbdd6343d61cae3795572c2c02c82015bbe203a0b2d246ed0d0596c3c29d26a2915bb63b457cf61a13c1e6555123df5a9fddea7ddddc6f067bd7d13f9b824e6a1cc0a25f5d8407a8939be5b50d3eddd84967b63635097128bc7941c3ff0a1ee82a9ce3f7ce7a16e004631c2970a07908bf7a74a6a561f0b0c798566db5d70664771bdf9ed6f6c75c7ff8674cb83b7be083fce6784ba4c205a194af70d02cdc91cf94e2d763ed3aa3813595f870a28f529cc82acde3de29c85903b33fb613967ea236709f858e5c47392c34ec86b225695304f95d29c0e8924c593bc14ac2c9d7e5dbca02b09f0467e0c7ca33ddfee5dd4d11997794f1642cbefbe417a29b2b617b195fe84f28360696c40044f15a62458214dd457f50a092c3d4eefcc9b7e875bcf2c71b48ec0e0af64370a4873418a6c2bb6900f348158757c703285bdaacf9c48fcd8c2524853bdfdc68cb73083e0b1f5c76ea62079859d6e867c3ee9cad314185cc769468da3194799efdb834feb48a1e7e83bcfcef0c129d03f3ee72987f58c124cfad935f4ba4513266d3889c18bf73e81b72041e21f59ec8171c8e61643d193be8c92f78e738a4a65757621f42865efa95cca68857bbd9e457766b134f1ecd0b62ca159d9cefe658061d7ce3be2b50855a128843212c079398673b2b6b98daa191a63e927c1181a5d481d66cce49ba29017343b2d121eaceb16ca3fbd39fd8e174f026f74e97b208a60feb46401a8c8652590eed4dde637b0d394a5d675d32b9309fb3a5f7b337dc96259feffa87b5815492dc2f828fb60706610d58a7c52798b4a7b0a9bcc988216e76824d4849661d831f149c15ebff8806f496d5f4696eb59f0d675fc72b547264b3d84789ab6a713dfa5e93ff16c88c511c545f958b15585a7b8247f480fd20ed18a781593170bf7f300d5709768e6882af1615c03d029705bdae064a1e2471f52bc1c31410089e71cf5e93f10bffe03016a7a877b5d42acac0fb0843634fd192800672d8256ea8b989dd050ededb80178091819eee4affb6e893fbdda57d42cb4ef74ef49bfa52a66902e8de68a92be56033564e72467d2a0768909be4273284cf3dbf9102655d4971c983bb7ea7e9908c2652607562392c9530790751499adbb67439203a9a730cb1a7825d8f117541a0bd7aae1036372755f50d26c15da8d00fcd439824e0c1d21d7456ab093b9e1b3166fbf829e2ac9aa6fd2220aaf065e109b30b6b05c6abbbe672384c4a8566edd148fabbfca8cd7df5385ebfa7bb8596a99b50714886358c1bd728c46b737d2a9c0bd754fd16a681504657401916380e130a3c6232c7098fa7f04c8bdd5914601e3c9933b5d3a4b50fa225ebd83ecfb45b2b95df6334f75430a60c77b3b8646d7bc8a116cfd2e70f52fb304066ed84d88a3d9b971a367b83b994ec18507a16263a7c10ae665bd5b3226f426a0fca658ca64c33800c6bc11ea67f9f5675c6c91ef0137c69d47e182c98b367c42a88877ad47dffa475ef4f0f5feb494bd8bd23c3ce92c1deecbec23dead836960932909523489e2c790197d46ec720c35da52b4b5df9e73f12a5e25153c94a2512615bc5d5b68f70fe97f1b08cd48490ca0bdc9f2363a7dc7fe8eddc24d289d4e2635881abb5ca9eab465e29ce5ec955ba01f6d8414d5486e5b829f6a67ebc4ae5d328a806d84c24e" + }, + { + "name": "③|独家App", + "key": "AppV7Zjdr", + "type": 3, + "jar": "./jars/3f8285c5-fb00-40ea-a288-b71db3571819.png", + "api": "csp_AppV7Amns", + "searchable": 1, + "quickSearch": 1, + "changeable": 0, + "ext": "85915714a2413f05151fea6864509533510f64888873c9014549f490a22fcafbe95529819a25c21bad6ad07d44cd28a5a28acb9d207ef4ce35f2e61950bbb27c00c9a268ee66a11cb5943790a877b4b66015010ed7f2a3c6f35b794a29dfaf6762ace01040b2ec17d426cf9cb2a1a9d55450210a11dc1ff0584959270cf53b6d3aea808e786f3c2d18bfb68172f0abb7a06ca65937e9a325415139809f045e71a15a349ab2862e8dfe93f2cb32d1e5b7f9cb2a906741073828339df5bd0f06125ebee88a97fcf33c72e57e9b090d3766b1c513c46a06e5c6ab255725cd2c42938351ec736b5980b1a08bfac2484ffccf82a6f77a34a8a48e15ae0ea7e5b15c49bbf3e59217521e29129733f372511540c52165c8411ace8b94b928a8fc89ae86ebdb1b9d502b438adb692ef9ae36f9f577b4d57654dcdec9957b9f6d14924d329ff79d4fc21ade518d7190673dc7a64cab4d3b91a0f12134dfd8433d6cd80f725a9f4215e2289adb9b8efc835264733c12f76fa846a31b586572f81b07d3d8415c871afefbe611a28207a382af39b34dc5864a2f53daf7065befd08e9fedb41cb5dc84a695dda6dcbb35e7029f9bc871eaeb76503a5f8609be3cde35b3710b936d4553be54cac89b9d71cffdb4598e110b11bb9b407c32564348da2fcb0d3e6d58be80ccb2e80c614f98d21ce21ed6701218fcfb8655a5ac7a0d521c924a7dcdae734d548002600453214fad768efe3752ceca97aad95698ed3b3eabe4cff044d5b0e5b0dd5bde5b8e7165b033103587fb23fd9b08bdbc675f471b847f41c5f9d176f750e781254c2ea3bf681ccb481badedd016f8913df5b1a2b0dab7f011f16f65aed372d8c6f12082fbc9a781a8f5c1de2aa9c6d27d54fd25551e2f39845a358b5a3d8c63e196a6aad827a4d6a77428958b5d98128782d57916240dbcf29c8e4fb268a520c31015bf9ebdeea10be3a1a255846740ad4de3c4896fac513df787167118e0c0869a661dea81b2e0c348e40b84fd2e67cb834dc9c20e0f53dd1b55a09d6f842559e922c2d9fd2e474d7b6a9b2cebe6985e796293e3dad844e524b9fb2058e2a6d312ee5561715e62b316cc7fbe21fb0e88cbac44394b8a8b58f14a40d1e69b658170711ae2685ca3ebed3f7dbeb9ee3032fefa1d7aa1dd634b11d30ef46a8ba353a842bf7dd3e8413584d51e442c9b13a72ce925954c12fa1233790bea516196cf399a49c4dd68719b13cde08f3dfcf199a9128eaa11878277cf2b8adacdba461760b19493844f8bc0cab44a9c95c8b51b3a492836aafc4f806218c13901416cbcb5a8ade0a0b3d98810aba52dd3a1f8db016412d915b0f0b29c64a5dd87efdf46a347f83878fef76b3d0fb1150451dbf606fb1d7a018f4cfe87c5f6bdf3bea9ea1f7605e1eaed174fe1b7aa5644f92e34d41690898fc0cb36f667a387e41332e4dc24e4d89f6971fb8fdb9fd21617851f388a60555dd0a2f1049e6f90a43b97cedbbc6b6eb976b0cb512b3da020fef15933dff6451cf0083e6fc2706f010755df198da9367a1eaaec4c4658ba21557bcc8313ce644ac90d28b5276d565c0a7359eba00a6ad3cfb5a3d5b42c885d521b8e237fb36de35bddd0e227c2fb2b0e330202137f66309df3217c2a9d0a8f086551785f8fac59505307d0c4cf7cb97d59d871f1b4dee5aefe629c147747841ffb840a3e7337889f8b6e173c8c44de912279ad4a21afea366f9250653a066cd68cc0caec9dc9ed9ee3d3b81226958637962d2c0f7f30fb8e7c7ce5191902c45ffb3c3d6a33ddeee3264148f413b2a894faaafe62c2512c3e8948596d5d44eeae4ea84dbea56fc942340b3377e2ffd15aad9450cd4884de48424fc174dc6c2b964ca86da11c7923b38e1889ce39105601f48b1bd6302d19bf21b156a52d1e65bb6ff2e4390d1444471aa65ef3dac4a4dc3a22ad60da3259fa57cf110db9762ad3726975a265b73a6ed777f62accfa336d17fd9d8368889fc81a365c6efdced7414225fe526677086780175275227700690f006a1abf560c60484fc315186292c9b27bfddab92e2b33feb48465aa071c41ea4c614f7e466c7ea98b0906582232f3ae04591b91c3f603bd94a391ee609bf929c2f84238ee613da781d0563926f083ec7cb5f9e5851772b799996be3453ee4e76ca55fb9d8fd2e505578ea6b000cb959501866337de9fe2fcb9b0e9fda6543123784651aea0199fa4c63e9a337f0a68e38fd51c6a3524893d5da0cbe06360bf3a91eb58cb44818ea24a558b7d55691ad84288a99a97b6e3fec9f44a0479ed762c11a2c44e3e0aedf08e381de6c2b9673491b5d2f40a663bfb947fbfb5ed4b2e67304d3e7dd9f4fc3e556a58cd35c30486e37ff459175533c6acc25a4c72ec6631babe9ab16d48f3cfb8d7c93728bff71d3835371bfb11d1d065215a6a692792efa5d95308dc5c7db7d85937e7e93895527344ac9a43893228b81eb54890769d9260ed4c6524cd8bd4498b5cc921e9a526f9f94201fc5f7c637f46fabe893b7a8b4df9e8efce92eef8428f0ec8e3e5e4548b0726cde6ff60767565d0173b87eef8a711218ca67be61d98b1c308576fdb79b0363adce6f2cc08f21e17c6e196af0e9d5c506abc14724b98fdcbfb558cf6b329e36ad4fe7bd1145aaaa9d3a5bc2a253c8c346032e7eb069dd14d874123a6149533e73ff79f5a8b247b31bcc4502ec92b27f1b8c4797da3ea718d914af067bcac1cd013ca33d7fa41c941732583f990ea9a2eb38db6851ed4f6ed52bf32ba9fae7b805fc9301d34dd3435f74e2bd21014aab4b24f2acffc2f25f4e028c8992dda1b79ceb398cacb2c68696c1444912bdbfe88b72f0132499d1d5be70cae20ea66c20753fc13fe139afb01494ecfe7f3a0f0b39eeeb364ff6eefaa52db38315afef305291766c21416858486be355d22f4f367cc8051f8bc772289b717035e161be12f08f2d0e73a1df" + }, + { + "name": "④|独家App", + "key": "AppV7Xyz", + "type": 3, + "jar": "./jars/3f8285c5-fb00-40ea-a288-b71db3571819.png", + "api": "csp_AppV7Amns", + "searchable": 1, + "quickSearch": 1, + "changeable": 0, + "ext": "3d1e5714a2413f05151fea6864509533510f64888873c9014549547c4b35cb1adeee20e0d57ba3751a77a841c05ab07707cfd47e5ce58300c4d76a63b36769f5ca194cdd372e6467113c881d77e743db16d7abe2ebd99e610047bc3a54b53b4f7bede852c8e349a047965ceded596e9c7cdb344a399e97218a77fdb81e930db1d2f09f2d4c2be1d6c471c80699fc615e8ec072aba54e4f79e9c56aeaa4461e497c6c381b699686935bb9dddf708e9d482bfc16e5aeae6235094fb4d8fa6741ca8318b2520013ff54ab8cb1203d078e4b8dc78abd041b48191ec6893734015fd08d2f4ebc76193de569e55f74a5397c5ea4213b9345bd027ac2986c63ce65636cd7f91f9d30d1ad37b9b4d6de92d545a1545924904a7a4c1b06d181b5dda5f13df8fd20d812125da97f030cf56d088e4ba52a074f50fabccfade34dc57f3c03ca2dc2231bca5a56800380d95dfa36f2cd731c7bd3c7cb97c8d3a027226b7841694066964d2811f51dcdcf51b44eec61fe79b3f778f338ac061b89290367806e3639e3e632c4422005eef3805f21c7c6eb2252646bdbd5fd668956526496a4927b626c15bd74d80fc0a58dd2647e719a0a8d21fd207b69b1c775523b08c70a3dee2aea403e66d607c91b2105eecc7a5ca1779451053760a9ef708a626174bef4e4d14fcbef3c59000a137848cfe87ffcb5406e6612998c20962d531104c94b68b5114051fcf3c647ea8a2665b0f35e6e5f06f8d654d2945d53660a7268ec4e606c1ac91c1d4a33234e8c10e9cb4fc33fbda28d2a51f9378b2a42ce4c3f36deb8dd8456137ea629fa56b51423ba2cc77e1dc446bb399b2b34d46ded47e6031ae0a48ff8007485a5d332b2b4fd4341447524d146a158717fac4ffcfb0684785f7e2fda78ce8f1ab57104edad3e787ef181308a87b302511bc8c1cd013b8300fc9420bf3b95c4b248388fdec739da889b46400def0e45efd17f3782fe86ce385e5deb50202d99901cf65453b6bd4b19a341d81cf64d04599dd80bdeb725c0a1704b6959c13c63c3633ba58a4f4a15e1381b61a78253acad57051986e1c78c22583e14feb3a7883817bd9f44b61d97b199a0548da74d8d42fd5bdbce1f9aade63089e148e67f8199a54929f8ab7ebbf657cd2991e8b0424fbdc12a298dac718d8d16aad08fa48a6f2f3acfa6158a25dbdb08e3f743190797ec02b917f0660089c2b0c6656c90c60f4b967878658dffab59cee978122150f0911712dbe1856cec69ea475c470bfd15b3ebb5a7326d73fd576f456d7b1eafed6fb264e0a38594998377d62b8d617ae6808f739ab11d4d62c940b80010622a569a207ec81f54644e137f0f569e1c75032c246e5056437423f0a1ced626875c928d763c88f986568f2329b787381634e6687c2d52412919208e08220979c6f7467cea0f867ea032d502e77cb8dd3a8198c32f85a355a18228695a1baea2d79647c497a8382d7dab6418a05e54c6c10407f4a91d54f895fe8ddd46008c48fb3adbed3bd5ee3c382b8ccb50089677cf87d77b1a2b1921b04a02c3c569aacaec3b1e63d36a00e6877436a09be267ab1efef4e6cc5313f83eb976b043a25837e558d26b4c116354dbd7df6d6c35a172379831183ecffcea78d347223bc4d31e1a67535bc620c016b91b32f9d1e009672fb95eeb4aa307d6fbe98d5b4e6387df5486097d4a7307b025606c9fb6a7e83d1614ffa8742c907065781d65f1ccfecd52a6c474b38e8e40d3ae9c2d624ed44e94ac3656166b372410f7ad81fdd59388aa79f6eefa6509c7e430135c5ed18538565c0a93e7bc2abbc05ee018764466fcae61d31587c9ced6eb530993edffcab13f833a19b81f0c008b7ffc5fae56c580d15451a4431a3d95035e7036ca63ff95e1aa96c22f6ed0c633d0f2984098f4639f5e501c0efab202f9d15abd54cac54fecf335b751c363fa967ebeffea3571b215e40cc3dde3d097e9d1f7e8f43c22cd8444496c82d2264309f48d7cdc2a72fa6ecb6046cfa3b1a28f758c252b6fe2756dd87030a13fb0b3554c985bcec9d5c68bbd8e140712e3da62c21714c740d3aee893d89d8ed89e881cad96fc0c62289d142c7c5e45d08c7f362af467e3fcd256b39139d767c6457ea6a93530d350ebca8c1d72c1fd044368b519f2704b49bb7db8320314be5f96310df6ed5970fcbaca8c5790f4fa2727ebc7d6e166292d20620d352db84c6b715d22920703ad6f6a93112c9c4d1072612d40e6a4cef63e78ccbcd290da7084e36df0a073502d05e40ca43afeeedca2d91f9a55095da0fcca774e75ce5b16ea40ff00ced03a3adfbce5f738de8bd66222cc2488ba282c6fda512959c26203aa28845cef8d351a434dd089779d548fe1f95b9a35d56caa7ff7ba864dea86af17cd27459471865f9954ceb2a2043cb1eef09bc416c9e3f346730cd1256bd725a68acf53ee96156f678961a0e283aaa24f7cf58fd417bc1428fab366d890c40de1e913eb83cf55cde9ff4b9cf5cb4cae2d29b3cecfe2a8f9bc32ebc0a47430bbbfc0afd6be8e5a785d2cbd58452f69ccab0fe9a818922a624cb5dc2458e1c605a0485f0c6f3d1095f23f9b0c4db2580570e24251fcc4aa92d80d67553cce5d80f25ff996a413ea8cb2f7cceb83a0b001185ce7cd7735a01b31e15451740595a7bc61babe2b7e86dd3189469b97c9d3571ac6d822282b7f2194838fc404bfe90c0b2e3bf0c14744af6f8f0759e7c3ed02b277d2e1d29f453e75ba752d7bed7f5a891ebf7df375a8623ff2e297dc8294179aedfb86ee3b7eac45bb1d8c4f0acb86d023c4d36484349372a942bb797426e9e70fd16382c0457f0e3dad5e9df09f284d4d1703161744ae97335a84b6ec39ac0de44373e2237e0cf38979b66ae446ddd3bcb537bb2cb0c989de07598561c01fd90e4759de175c9ed926cc42b49be531ec209a3c13c11ad6903b7dfe1b3a267437c73777004f159ddb8c59c9e55692a75c147fd03e3e31b9156d95d3f46b61ac0d86d8417c2e1605d0c3aee82ba62942e8007e2d" + }, + { + "name": "⑤|独家App", + "key": "AppV7Xnm", + "type": 3, + "jar": "./jars/3f8285c5-fb00-40ea-a288-b71db3571819.png", + "api": "csp_AppV7Amns", + "searchable": 1, + "quickSearch": 1, + "changeable": 0, + "ext": "ae455714a2413f05151fea6864509533510f6449cf8bc0a05849f4d35953003381580addaf483d2692280dcd4fabaa34afe27792df556dbd796c3f09ec10ffc784d4c30c01ec2c6ef2b0176ea5416f5ea6edee3ad672713c6932565fe8467d17764cf4d178d9088844164cef2d90657d886165707c468e0266f26daa5cdb16d2e6724f174a6bd9d1245d4397c733fa8d747bc75518dc1df1f88364c94015204e1efea6e87c2e9bb20076a529a6b6211f0670a018afcf9ec98dc1c36e8c4d7ded47a14794580c002ab99431b1cd5bf836c9e66f4a720865fef703728822fe146adf5791064234da72d951a90137c7c6aa3f7c628cead57835692d7ee1db04674c15865cf45395c7983e4304af96925e63b2df935410c25891f65bb2f03c41a5e66724b50a6851d5d3e6f4953c65895ebb7a9572c86aa782aadaf848479263881af4dc84446811ded13d22adcb877c12db7692e941798080ea1206110469bf7296cd500ab7169427ec2ada321aa07e326591269f5cb811a7662172764208dc8e019df99eccb00617c8bc73ef2b3bd1e7cc749331281e7bd4e15991818c3abe5a7198af1ebf7e0e40a1df0982bc360e76c65318a180eace779c3653bb3133b6d9f9308421c2b926997bd969a8e9ccf58bab627ca87916e3fa059d399e8d810abe47d4ee862c2496ad1575fad786d0bcea6d293be059b8704911fd1d3a491294d74213a67de175109ddb64bdde1e80743bdfd6be186cde2bb44fc316d9cf58d27754bd3d50fe1612b5fd62026bd052aaa22ef06d66c9a851e5260891ab7bb4cf702e81f027a09bfc89393284db9dc8d4c0d0bb6b20cae7ce7ed76d5292d637c0b084e5946300619667c484688eff142b5cc1757a480d3866d3a077ea288901549d836b8483c65792adb5493fe642f7b64919454f9c3f1e9c78fdb024b5d89a0b408a4641cc45a140b77e729bb460c3930542e344e35ab276d32220cc03c5984a662ca1ba660061b094b84a78e6caafdf68875539e642515ca624476e95b4059d700efdf587c6af5ee03e388491257df1e955eb64ff3b5b7d2ab759673debde056794addd021f0acb2e8d3bdb3c1b426533c77bb5b5fa4cdd5e7be2fc66e0a46e04306125575c2056158283907b7b04e24998d5e6ef793667f18c4c27df8d1abadc7900893a63cc5b35243703cce72d891efb2052fb235b454d712a537182bf4ea064794bec9159b5332671da12b6ceb3e9edd89e0cada4f7b90dfefae778aef1512a7705747a0c4a9e1b9346c93f664e4ddb5c599ad5aa77930043683e0127fedc996ecb84e43d175d839c90f9e9d6b3e34cc65e7ae9ce2deca7b7832ba3dc6483daa6dd5a1de2bff1de1e79e8e9f6570d21e8ed1004b7d19f0ae524d5d61a1b27d6654acce5fca793ba403928f9f65e6e5f4616d91f10235458e5baed3b6cde98e34fbe20c24fed54ea8030c77cdb7bb156e5656572fdf1235ec4be4f25131bc6027e0bb4b23eb6f1dc3cbbde1d98359beb98676092e8ef1bfbb2fde57aece713f0e9b5271860d60f43749cf4a3d3130fc11b98514e5abbe42ca724354030a17b6f370b6ab93c589678920e6432058c7e3f4f4f82bd8df419f1ef85e17233bef29c0edf7a3bebbe91b089d0f202c1f28108ac03c116d975733ca7033bab9e4b0671578123a33b3183b069fcb5609d9d06fac001a4daca8bdf41c5d9ca1511bb3a77a21af22a86e50cc9a4b2fd01df538f29cac10b4d1124a907c3397e636d1785c24d61adf3957ce4f4609ad4be556d9372d1c66bcbe03673de14ef6881c2e3b3e6f11d72a0bd7f3a2df24a2c9bb2d8683defc391bf0dc4b7441da725eadc43deb812c681ac3d0f208d84d1b2c0af1f96d07592336a7e692cddeb25dfce98a43b4dfc3bf05267d0c778d29013cce9779b0946d0e9d9e0f8a40403c681cc9845e5c605803923ab693b056be537523f8f60fe9a87c91f9134119a164f533e6e97f566776c0e1f20ce08a92ae37db9ec3eda6a1018bc818774f104fdbaa8f35cd4cd599c5689274ecb08c1bccdb1a8d3530e8154d0c9f52b7eeac593607760eb69c25afcfdde4708ad94b0ff94b90b62466f7fa98c32f0e550453ac7f645fcbee89342558199a75b4b60aca815a3e873e8ea2d30d5496fb659709e55707da18382b8c706e0a0302d8e4660f1d211755d4ded758f283e32568235fed856712235419fe19116b3eafe89a63c781d04eecc9445188c81e9fb0c05a7a4d156513e2d59feffea74cdaf7e57df314fbf00ecacc14042c5281ec5ff983eb5b1fa26ca42f4742dc090dba75dd3a5fd02d771d291d247daf62c66cacad3df69614a9ad7df821873179e9c2c0c94afd55d77859ec9d2bd17cd60df5d30a8c428e89de293218137b6d056297bc59dadddbb354dced2f2a98d56d82a6b55bce1ce8ce0678ae2262b573b4b7442df1b98f100deb28bea3ef935cf1f02c4209e00505d87418682248c6141e1df67058cd09a9c4fcc7fddddfe75287b08cd201f489b73d2a1da195b06c8ae9d820d5f6d3c25f7f51f779b9386889cc1891f7008cfcb1370557e6e99762e425e8aaf3bb7f3f4c10e4c57580b17420319a260bb399208e37cf7f02336038aed3d70bbd4c5ed14cd07ab812991fdcd1ef70dac4d65eb2581a0ef91990d88a34f27ef4ba0e84b416ec539bbac4035c695e9f03814e2031aa61a7442f009a87f4081992e2e91c792bb4d62f2ad81bd97f604c3b4ed90bd6f82bf8ed7393e224c5448922e83e2712611bf9ee733b069bfa22ce05a92120d3322f36faba487ad7f5786c4a69b635961990f62f076887e857cd26953f9318beb6fd3092633de181356a04875cb3ce2d47b837b1137cfa897fec2ab81208695ea924071ea83a251aa6f03cccf78f7d153ed4c63f0ad56573ab0cc6ceb8eb5e20603101a2636a01bf3e9d383670dd4cffb5f9f116e45eac9b37992ecc0478376dd74d2c4d4e0af9b3ab7942339" + }, + { + "name": "⑥|独家App", + "key": "AppV7Mtq", + "type": 3, + "jar": "./jars/3f8285c5-fb00-40ea-a288-b71db3571819.png", + "api": "csp_AppV7Amns", + "searchable": 1, + "quickSearch": 1, + "changeable": 0, + "ext": "c6835714a2413f05151fea6864509533510f64888873c901454934c8d9638163778263f853aba9164d000aed532c7a1eec0a5c6f7e29eced6faa070647ddb8df85b03f7bebc9c8f27f012130dc52cd2a301b2473bd8fd8290767c0adc603e52458094cbe53749bfa82ee550cc1d4dd8a3e932ba96529a966e28263eb44dcf6de6542495781a21268f9d2b48189fa21668fa06e28d6354a7808e63060f3075d539dd983c479773b6e1298d4a7ae77341e86a18dff451b8e692292e91391cacebb7262f04800545d889ea6b5e1752ffacc96c034aa840be50ee3dd24c0e26f2cafa7b2204187fad47877c5bac9aae14784db6c1d2fde2d74b4197097343540480a1b7fb88bd2fd696c90a8150ed93e51e277d40a6f3bc957b8f97a6020d50447eaa8734fd7170c96909ef13fd169ae02608f475bc4e14fc829e063fc384d9cf026da90a2b0bb0920ae88917b982f6fdcb018af96ff24de7edff4a47023d6cc7697c3f6a72a85ba33a682e9000fd87a139ad38953c4bf977df79001bb7b4e135fd02b8cba4981da6d6d19594cb595b342e0014e2128d48b3677a862bd53507a0babe91d139471d81060d76e70185fabe3f6c167e5a3ab7174ddcbf8a6b8235f9e61d7eede25ae3fbb14ce48a9a0cb9a1f3848d96bf1ccb2a2e5f725f6902180affd10a967ba1ccb8efba8abf86b5c62395dede3b0783667cbc10daf90d43f1f7e0d9cb7ff8aba29c4daa4d5bbaa55247b27af8c52442fdfb68fb5dae2fa1e1a2614dbf767a07b597e45f5ca14175a853dc71377078cca6a2bfe118e8a576999b087ae9b3c79665775464eb677bab6582f4703f88d9d81ccde83339389b51d3d29f76f054bb7fde9ecf58a8e7c53f980a815ab4521d301849e898e575144707862ec88b860822f51bf3db02c289ab23e592172357f7115823fdfab83ab5a904b1ed1ebb505dcd01cfedd5ea0bf01b7b609f99a217fe9e4d0d5e23875bf5ad00dfede4e0954fe369625ae68c3d9656430539bfe627fca28867f9f9618fc91814de01cfb953bc3700f168bdccf931ed892c7aa9a4721b0cb5585a8724b73c29a2deca5e9dbc266430cc0f140162ab956839d09c428879eca93bf4d1c0f5c3fcd830db1c7d059f6b4a873446b9db2e8961a96f2221a026cb4b18182f53cf8f1dded52d2c5b0a590b27e448123654dedae3f9a11c3a0d5b58d75c961a2c3e99141b57acf8676cd0d27f9cc39d086bcab3646cf0946f70eedc6aa03f09118324972a09b59338cbae9542be4549590f9eb9674940aa602c31ed732f12627755584e146c540348a3cc14f33e25e2bc3d9e56bee848afee55525bbb7a3a49798c45668b7da1bdd4e127ec4047f0f0ed7d9e7b5381ac23612a120b5d136547bd38b57e98f96604161b0c851d285799848aa485a645362e7a47548109c7ed78b597c093059fefff25589658d4595723722e52a06aa42b8c1c151463128b4a637327fc1575cbe3ddfd1e3288b1a180a5659a220448a461a4d773d49d132f14cfc9bea915f1ba6077be2a75221ae142aef75e560c5741bb95f977128d6d4571a7c0a72e843d3371693f1079cd883e556b3326fd94a0b6ebd196f6012b9b6429ace6177e0bb296a6f021ef210e228642511995aaf560aaecd343bc87715c297a0b93b5e25d3c3cf19dbd10334231800e09fe918f66b879db3215379cbc8ab9a692a4b3248c885ad3fbf3d3558222f04c85ed91c95f1c0be54e62a9e5faf5725fcd89669c13fa1f15cbc7b109c90dc30afbf154356f960b3ccb62dfe63731e46988cb7a7396db7d93b9830f50a4074f93f9aa95eec360f781f8c477c6b1e1c4d5b46c749c51815a7e7a71c2c5b8983ef554d38aea355c55f59665abcfbec7049112412f3d2d9624412bb7ded2b863a244f566028d88835b92d9087931451c217125b06d9ac7e97353780f067b8542bba1fce676dd929911d3be8e5d57cfd500578a8da0224954da606bbdba2925975d9d3e6aa361ac2dbe8ac82c09116b9d698a3f71b543e5394b5a6296c6f1982633b471598d2dc10ea4379b18caabbce4cce41bdc5c92fee090572df393522e4be3164d926659a6f478ff31fd72c733b873f5f05a8e6dae06fe44695ee86a4fb09de310fa13f5bd7fa82aa1a3625ea8c72339c36f207fc647eac3f392daeab3c76c3da3c85f12ac3b44b7b4ab02fb10cbde2240131fdb96436ca6197169326657039c5645ae280899c405924faf8a38b154f59a41aba1be9b19903bb3495eefc87056ad087190f5aad621cc53e80967fbe22fc2f33f770ed0800e888d91a5f5f8d06c23b6328936fd19d51a58c6c0bd835f14624cca4d9c0a5bba7b1f2471609559d192c9bb4ea134255e0387a88572f47e847bb8369a323a0bca7c84f3262c4fd8993e30a4c95d1f344c01376deb78c122d175b06b13a948cf847537f165c416cdc737a5d2cb34be4e9d7bd832953970c8eabb89de930ce437f952d6c10d430398230f955a360052c521a458e544c700990cacec1c36f6c7f238c6684f9eb7551b6dede46032ec633397f491143e684158d634887ec512a009d0393b92522059565ccfc0b8c853266b3b7c181b3637b608b0be41cbcf93e99b57c9758545681fbd4b2e88bdc7da4d65fc3d3be7610f851c5414549fa328d6b446a580952fe5c555fc384cfd42423b0ca6950765e6f745e6e371fcf64aa856a04105dfe4814c13b220e731b82fcb45e18430c573913cf120d78e0e4cd2f8e6d62f409490c77c484e57417192a137f4956426394142c9c132716a422555e50b3f31e5c47acf3db0537c65bb7579490f2812ab0ebaf01194587601fef1024b3aeb2a668cdbc53c7c32d67d1a8a08a7026d34844b04f45581c6ddf2eaae6fac6acf2c6a3fc80ce5aeb6cc5fe8dd27ebeb804c0b68cea1b7aa9bcadf8db4cfd45fcb206b555a9cbf86181504d790817e1f8ec2d915e3af3c56d6cb59796891791e412f0e93bb048c71a7ee7ff34277245ac2206c506e19a4a1dae0d65d4c16cec6e24145506698131b0296f9a8ebb81284f6fe717d1a9a10ea224de140e7a21b32e626d398ddaedf6a6" + }, + { + "name": "⑦|独家App", + "key": "AppV7Llq", + "type": 3, + "jar": "./jars/3f8285c5-fb00-40ea-a288-b71db3571819.png", + "api": "csp_AppV7Amns", + "searchable": 1, + "quickSearch": 1, + "changeable": 0, + "ext": "10045714a2413f05151fea6864509533510fc41478de7616064e34cb984b3dd50508d4850f8c0500d64fe9697c462d7c90a08f15f156c7a1d176bdb3bb463e6d80d064c2512b04a421fc3ef8cb9465bce042c1fe2cffd9aad1399ed6d7aa32aee9dc83c7d13a642438e576f0cb729148ce29a0bba6b104b35170ff79f406a825ff534b579fa411821b3ea7c2e9f9c4f2a2052244bd4d27922dedb0b05c7d8a1bf77d361a226ed9badfefd87e3ce90cba7afb4f6d1d7dd480b6e2e7f21dbbbc45f352296166efccb3e8aa7898aa777b46cba677495204e62ee1c54a87019a98fbd116a90961185583fb9531f2b517b0f47a145d73339adf21e77c589d621705109c7736c1f16942e8487945978f75faf7401dbb596f21341c9c3ed85571f892401320ef2b8c05158adbc91a77fd60f4ee1af9ed611da3c1a89a003921ceecf785a5b23f1b8144788524244daff436f996ddff9616cfcab7cccea1c58e3ad9b61edeaf67d8f981cf11f5f516ec14c26504ab2c60d0011a8e888b5fd2ee063343c80680d92545accc39fa6b48b7eec185b0b7e5953e166411f2f7243d49b22e6ccd0500739bf0bfb2740f398827dd536f3f92a6b702903491aa97bf880f88aa92faf012133cae6902c87d03ec0b40c55fbb207a1e6d9e2d2cdf54878b150fdaaddfacb2e5a9fec1887bb292db7dbe9e653c8f47dbb7ad5866decbe1a7fb84e2fbbdf212d16cc5a4c950ad7445acb656edefe2e40defc4f2231cc3f7a5f283c39538a07a4d77e5a031cc26248f25a65e18b942f74d653ba9e4c755d04364ab471fe9499f5c7d86fb0a28da68aec1518ca03791a097fe639ebe4f5ce60724357681e2a79c447c0c3501c89da7bf6ba6d73d272774dd75dbeb043b69eca89919fc92a24f662f21434af8b4695d0aed8cbdeaf7225afac1e950667e401019df79e1911a54dec4eedb5d15406bbcb881c713d5d215565b25bcf6f9c754c80a05c96423145b612fa2db45f5d45d37ee41e0564d58a6030366b5780abb7af5070630b8bafd480994ee5eaab35ef6ec98df2aa7c92b6a345f6dbb4f6e75a7bbaed3a1ee941a7402715881240308964624b80c420f7b886105eec44c70beda97a378157d2cf529c27b21adc7672c58f77d11e1fe6206eeadaefbcc0caf0d3ccb83ac840cc0baa87d589718940d8864c353b40dc51f01ecebb8617d49aee798613dc157720b91abb59fe77dd988db7e1be4e1ed572dbf586e867cfed115b83af3a730f5067dafb17c6e5968109e1b745c21705ea3699f9e67857c93754af1d161983673f93cb5d1b8a8e93e3761c5447665d1eff9a26e5010dbbf6de1d9415b87e170b691156842015376436ae2d683704d6f7c51cd08cd5f7a2b3c6631942d13530689a3b9df8c79787b2df6aabc00d7f18868e72947a38211cc5f3bf206e63b78c2f70707b16982636023784208f4f4357a3b70115886280847b1985edb4eef06bc5cbd7414fcfb8847096a1c61317ac6fe54c29eb157f8ee193128d468c018babba408e89f8d0f117da61e78a7ea2b30b0cbd4de71f124fde3039a60d693dee29a6060636c026956d7f9475de0ffcbb2a2ed99c5a8a104c49eaa190eb9d21e14defaf1f35df6f3c705a0c688190c00615041c28532d1284566b31687c234b46dc1d7832db550412b83571415c8dcc79466deb5031a2efd2e0bbaaf43129b59da0d8a2c22341a288e477fef72c7bed59b45f73691b1f702a321349e58f9f21b74680edb0ef34fc799e79482cfb16204c1bc4c04d70ba46a46e644026df7573017bca468631693b1850c890395b960a21d8f102b1c3909513a13b936eb248ad9a2dabaafba5f96b6a5b0dcdc308e9e4fe4807148d0726fd551c51fc37dfd6f95e33175b6d95b1e093440c9c34502733aa8897148af15a38d0a4d52829fc3f5c44184ff91afc5c6cedb07017543eae254a1eaaca1e94fcec72b511a9b78d74d6eb8f1653649b1e79ada8557f469ef4796d9ffce74d1aa8266058ee8b799e9b0a270432abf143261a45dd72f77636c101802375bc3659cfbc58bf74503707cca37bdb9a506654e1ee77fa1fee1cb11f575a522a53854f8594fc4573186df6967aa8f554fd4ed7d3843b1306df151608f4749f72c2f7cc57dbc905ed06ccba337cc6c0249f5f1047ea5477e0c8ac6b021c373709df5a376899fb262bcaf049876eb2e03b10647b067e4feb3ddda262cb91583deead8685ca484c97dfc4fb06cca58dcd5e286773421e3c5ce12946d6dfaab5ed7a921fbaf37d2895d7828b3247fcd8a96f70645707a83990f9fe4cb317964cdbdf41e960a2c33a80338010fd9552856e4dccc36179cefa0f2fb29220ece482458f738ba97bd8a4a8f206051fab222dd6d5632a91f9bf968d978b86c2f79fd16ae2e51af8d7bb3ef59af315218a63bfe59d244e5de0c8941966fb1eb759051225920d19dd23d5d444c9a33b32cc2389e774b724bb347210d9757cc4843b592dc87f096bfd7b4ad0e0df8d8d6825688a2d07f7649f1e9d5f93146343b857dba98276566799c34541b47cfd35f7360345d65f5475f31ff34958c381115026ddc321a5feb23de36d5b398a8f1d9cb762ab8f99ee5538a43bfa5aa1cec0c08167645f4b3f82a276f55da371c05cf6b40a90685816443b0318bdca53530216c9710a3225de223de5456993d1efd7b55c3393e81826463ec882e2e5be0c808616fe335f8f496665c0370e778dcd495eaf2bcee99c2a459c9444651560a7343402bda1256f79ea616631463ab8ccb38ff0fefa8b986e313e8b0d2f9b3f3bf0a6ab032ad29bbb789abdafeee99c2142d553df3adf1830c0850d3961bfff59f2e27d9e9fec1a8b76b1f2452798b0ae3a12609cf2240b0c8165256e008376558de7211bfb7415f8527843edd4a279c93bf8d559044a4a328825a9c31ef91919c48c0c691b3828a120dbbe2ec75115824691fa3621d45315edf19de114a" + }, + { + "name": "⑧|独家App", + "key": "AppV7Xsz", + "type": 3, + "jar": "./jars/3f8285c5-fb00-40ea-a288-b71db3571819.png", + "api": "csp_AppV7Amns", + "searchable": 1, + "quickSearch": 1, + "changeable": 0, + "ext": "b5c55714a2413f05151fea6864509533510f6449cf8bc0a05849f4d35953df98eeb5c544c2ddeffc0a79e7a8eb3f1ce2799c2a2936200bf1f21d11448fe499fb09214dbd33ae7465d1548bfd937bb2d5d5bfb8000f3d0ad34e8ee3d137e1b19ea5b2bda8953ca41d96700897302e1c622935df3f93eb01533c2d38400f75c939c1cedaa59b659a7917f718ecf659adf7c1e9951f51e3836307c7828d99c4d6b9e9fc45de92c3c5783a7c2d1140ace1b7fa431ccd202914fa8f3f7de13b3f6bcf84d61cbd33ef32a6812627d3a91e18dbfbcd524fb951c7437c75e07a9645467002691837c584686c19e1b809dd81a76aa94c9c5f509c5e72c1181c27eca679359a717798d94315e20819c3eb350816c21438a580c014aded30b2ce0dd22ac27ada594cbd148cb0f4ea75c6c627e723e49989124f328035b7ce7e20e3443ac3bab11bd2c6b189cf9365853c9baa361178c97e6073dd526d5ddbb690aec3457e6c7883e4f2dee3eb96c5098c8412ec04827bf36e31946a89c3b6439b0ccaabf2a50721f673ce85e7dd03586cd2524bb5d53c15fbd9c1acfccd766cb53a561c00509e8fda4d80e48cb32162eda36dcf9ed1d59ef29b01c29d4ae643d955880b2716feb347f6d53a626532644dadd453d7d0bdcdf258529a2074e182a1396d41e5c66dc5db4da220f9558d91fb0039cf06da9368202a3c20948a766dd796e148e8c5438603dc79179dfb082165103911b5748928e00077284a5bfbfc054431999638200a4a975aaacc93db87bb81b2e0848abb44bb43316852f1374c9274f3260bd14ec9dc0d68f0b3d49c71c5be2c1157d936746792a8b761b52ff445bd1e9d5688ac3d0e552778a436b8150355b9189673b102596f7468d44125ea08a525deeebde83595ce126a62e6bf8d79d1cf351983347d3d09f26f8c037bedeed359dd4f8b2c2d77fa5dadf45c54e17d335dab0258cc419957b1d03f95740d521e924b20341f3f16fc363643689a49a482d2dac8a9207d7eebec2ed420274a7cab049cf09e0b8739a3d51a9ddbbbab40eeecb982484eb0d57614444db1d9b6c74cf00e472b3f2b50142a191e21f04c6330a5e0e3566d33df5fb871eb8d949eaa53888538370108ea89fac18d71712467f84e4435476c7dc8dfa8f99a4b9e217f4b282063cec49081068aa3a9fc62c31957c15c1881fba315ad06646b5f85feb0f03d3e8a21b7fc5ed531b6130273ba5e95d0d45de1c147815dfab7a12ec879be93f7a6bbc70ca6c744c95da0dcc6c6743a6628f937b1a4ad1b319efe2d8896a37856f4716cd82f964c00ea0ca34a41034ee2b9aa75317cbec1bf97f544051119a7fc68831adece9c4f28d6e636efd399e5ac379332b0423cf3cb32711c3e1513de7a960d8986b840346c399c913b42a38808aa8c292abd2e53f14e28ddf5bc88554995d5a0479f02d451aa92d2a375c626c6bccad39ba7178ee018ae453b0d14450833232e42be45b41d2c84981ef7554c62882026092f88dd3f9f3855c37855e4039ab51e74ece80b8205d592844e4a5779e6096189e150448ff581a0d1769f97daab5b51f5528907a921036a8f7187bc961415e200d0a9db0285a0c62d331e85dfadf927df4fac5120f6a997fbb4b700d7f48bf2195761aac6cdd7c8d398aa93826d4a539df89e0de760a3dedea61ff72cef0aa15f2e9e7f549cf8e4d096ab712db7d35addb17f5b825bd6728f6e07cc68e9e14e84a878d1402453f2d161dd35539555c8ee54b191b9a6b3dfdbef3871dd73f234b0ec302a16024e39e0dc21a89bcc9638e21431c2570c004af62a2d5ba040cfe91939462e9633b1ce8eff30c2970aa6a66fa587acb368fc3779e4ddffccd387122ed3ec7b3c61ab8d556ed8b55b73c118dcd0197d2caf52cabc2d301a79c9c6887c7cc8f58372335d9d1fdc97e10e9ec326aa878d1872e314f312c99e128a65c47d935106da6dacc755b12de97e5f5e884c27d54eaa3f9c713aa59f1da2775b811d996cd1c70d4e937514b350a829cc23dfd884865a93a75eae14ac213de9e436ea63458447fd8462c716597dce25aa67e194c18e394f188b1e78a6a8d5b46364f16cde94df0b8668c1561be725a05170b77deeeb5ecb0620789bbac169518ef15a4f7b0b90140d5bc47ef8318bad9c830e67ef29861bfe77d94fc4a4ed1f58792a5d7a4b52bdc2a05767179ca00e88a3cf17b450e161414a4d3747f64d44b5d63ddd144cb0f0bbe70ff04fe79d2301d0051ff14aa2a0b49c26fa9e25e35eaed434d2cabfc4ecc2e1d75e3cc9e2a8da795a1e32e29c653b85bd4ceae1ae1f5062a70c022e1cbd9c8b2bd36b4b922bec5d9eaf28a3db1b00a0277a30ba2d291c99be6aff61369e3877218aca75337802f0322cd7475fca0e691176c5df2a27797d3074a720ded3f5e6b9dc6cabc662e95f3cebfd09e8a7292cb97405ae7487870ac4dfea5bb256a784b3229f2d3520a1a5cf31151e086d9cd33e03aaeb4b65f34f8b079935b331f1cc4e073c43874cdea34fc17b7b6d2f5aa908e0fdc94a434fba78bd370a78ffba05a53c9ecd78d65770376250b4532a02aa08b7dd6524ee2ae598603f29fe7193a838ed70cad72c0cd1e3d2a32a466d5ce2671a2a51d9bd22060b8fb3d83fffbaeffa44340067162576d98e22e2538a5082059e3afb4e8ac813ebad37303de7b9edba6377c2d9e554ea524952dcf006d551f3b4d53d3c2f5cc1dca16d69feeedc82550e5c5df047fdfdb03ad6060aadaa5d4ef8353ae4405518a44c84dee2d195ca13f02f49a846e55cfef4ddcfbae7b39d66e29d8708c5df0b2c7c48453788607601d08356e9280cb1b05d74c04f12b77e9a71cf5fa0003524c90123b0ec0f66b459067b296cd6178aecdb02340e2b03e801be7ef3d3b3e38cb40cbafb25082e15bb8381d4f70efe7e9af607dc5a4dd7108b915b0de0fec2a897894a65947289e9f8bd08279503" + }, + { + "name": "⑨|独家App", + "key": "AppV7Xhr", + "type": 3, + "jar": "./jars/3f8285c5-fb00-40ea-a288-b71db3571819.png", + "api": "csp_AppV7Amns", + "searchable": 1, + "quickSearch": 1, + "changeable": 0, + "ext": "77625714a2413f05151fea6864509533510f6448b0786a559e217e817f97d8199e9741f4158be7dfe4b298df32c7c552cb2608c70a3d74f572531b1d88c2b79e4e9ef9ab94ba4aabc9ef3e313d0996d373d99436537b6a14c5b8ce4c52dc56f24789d9246defca59f674ed08596cd4291296f41a9a15cfe21187017c745f276dd9581457a7be4a6311ded29e32cf7e3c725ca381c2124df2efe32ea2635c2c4bc0396e23c465fa39129633b2ae52179a73fa16caa82f06330126964f52f5bc5e1ea1051f2971616f59c0124edffa4cf9393d688b0805906aa2c2c3ccf747ff9d8d79565f68b92a248f06892404645a610f0f997595132fd7f4c4a95170de97e1127ef6b2f42879858650adff2e431080db9fb282ca0cd00223b3664307746b9703e6decc322eb9152d9614acf4799150eda3cd579132894125b4e79a20b87acf03c9dbe7b5de66466b1d0c1741241b23b0ab16c407da21b79197a3320c9b17f029cc3c827a30c2b9079f12cd927273bda043212a145a05fbd29fa3b2a4913576b89d42f635962f8c9e8894e5b4381bfbffcc11e4ec7933ffb73b38a37e602b4f145e73212e30fabfe1f55f9490521899dc605d2f55e2399e54a745c6f90fbebf68a5e6eb1eadd418f3f27fd3a9c0ffaf213485f4261e8660690c5c9ebff03136a11db25280627bef40d8b4a2ad97a54ec5be76caca4c8ec34e11d376d38c5568228c7aa1de7dba1f75c5d3243bf141ba383bde34bd172e5c2572559f58bc346c206a4fd7774ef694652270189fddfef5df9ed2fcc4d4d5aad2761de5db2decfd116890eff4c9e8bf824faaabce9ba82db00a23f004a2635edd17137cb6066734810eeceb54aaf456d628a68250ad2ca521145b6f34c6952261ec48676eb7f33f3864af504995ad3519df1aaf94fae2ecff45010c18a2b94fbefb70a11d159da18fefc0c532cec871b193b9c16f71bb3592e66debce93bd6f27ac90367557fd2581b6c5e753741be33fa395bccd12f5b46194913455fc7a55bd830947e7ae12121be940b4d3db268d86e818af941b9871c901631212847f3daa1a1a4749f3fbdd6c656e415fb56be521a255cfa8962564af05e4fae6f63b3daa45f9535234a37ec0100b5dff01d5dade917b3b9c954562f024a7faac38d22209298096617e4a0bbc9bc2e4168a2fc73ba2e08052ca5fd97c33e7a04ba3c36001a8668ac0e593d803672f8378cea5be6abdb861bd61f3ee7892b158f01667dcd437b552ef89789586d0a350a7699b1bd468a72b84bc2ca79f279d7ef330aba7b1637d83c12cec05bb9b645a22eeacd726c2d35e1a4b0f40e56ce0fa052432bdf90531ca9a0d2814fd5253d690c4270e343c70da7070bbb7203a456e543acca10f2f36c298cbd8581c212d21ce0575cc5b00eb2105845db998619d5d715ea5ed318a820e0f722154bdf31e7745b273a407e1783264c63fc75df83849f2901df377ab8e37cba5f184a454d3270baa744653f9c0645bade4ced4be504c916a329e16497a83e1904f8b466077e234f073ec017ec57ce4dfbeb77f343fd1e1504db97a15d3aea54ec6b8b2db7ac1d77c5ae1c9897a9b929b663de9c3cbb5edf699210acf4aff4454458b8638d6a63e79da538d1023725b8b3ea59921450cd82a94aad999aa784eb4d95b3ead2702a1fe6bc7fb2ad0ff158d880b0c0ebae2ab16c7023d33c00e10baf9decd8e1a159fc2476ab895da7cbe9e681f8e69ffe165de00984c0ef2b33df7f266a17cf0f215f389b9e74a446c5cec2a2511f818ad46dc98c9160efb53e8071d52352b187eae01000af46bc61e983573e45a319f75953311503b15f91131deb0c4edb505bcb568c2b00996f32245a2ec2fb0ab36b06da7c3407e0dbc1a31b95af1c70e94660d156066ef4d64da07ca60062b9c520c1925497361b2b0326bf97cef0f670fd7b7613be5c7e6bd09a0601be19726fd1b58dde0843353d1348d45ff27f97330a09b1d1e2a79bd38bbb5d9e8b71f994c8de236d3e00fd16beb3ec1f5feea3a30e2952423ce865024daea1996128c67e502b191dd63827836c8d86d0cf349214d758e63bc15f6d5d13f242e5cb9026eded5818a00187d6d9e7773f7b15cfeb59fe7935c37468b2730705ba5c1f2598ef4e0454487cb0c279d55c9e5d9212124cd4faafe2aa79f300e0d00625202ec2b1eafce4a271d466f374a0a7521d6256ccda7b5e6cc9be36aa8e816255c01cd1f1cad4ba341d22d15f9b9bd91951854de7a5b60f8aa55adcbd1fc4d855d1bc57e881dfa787456dcd962a8a4b0fbc7031eaccbd222a33cda87f1425aa54bbb785ddcd5e1b1dba39941949637df4eb3c90faa09026a3a67799a7ad26827bb37311b9c15b718cee930cc4cffe448a0e48a11910ea8c94e4bedab16b4b518eeee1897ebb825668be93ad3c276cb4d80620188c22c4b93a756cce67d79847311a26152c3bc8eebc4422575dfd5a2e8dadb4cc12180daa3b3fca2f4771ab8dfbe2d31fc2eebce0c908a16305d9d62f85492c3d643def9c14dab28fa35dad254ae57eb451acde010ee8476b26780994aa02417298e2fc65c788563bcb8c1ca33530025b36fc8e28ee046a53a808cba6f644cd530ef6944f373063604ebe936a82426efcbd296e8991e7b6812b3f065f711f10fe9fec8af69e234b274e5a053c3a574f14a825451fabb4d7cabf0b27e390a3141e15fd7f9079f933b9d3cd3a9a1c1b2da4101ecc36d6c1fa3c2892d4e1bbe643704299bd122d9f962fd00147f49d0124310e3fa0cc517da3535b7bae5488020e1d3e39039f66b67193fee21dcb5c3080ceeb6589ad57f543e0d9af523768ba04889c4242c787a6d3264a7aaae572fc713703ef28e7349d1339303de98ed542820ec9d0d62103e4554b8de9fb13f5abaa02ac8f765c1d5407bd54126561a65cd640b149e989bc839da476bb235eee48cfd4b426e7ea81ab1f7a2cf6f0cdd700cdcaf68c3d262a1dc04778525e5576d25297d460cf278a9cd0d51ba" + }, + +{ + "key": "农民", + "name": "旺旺|秒播", + "type": 3, + "jar": "https://ncstatic.clewm.net/rsrc/2025/0821/23/753d376ab89b34e2bf78761f5fe0289a.png;md5;526453EBC8F8F6C30FB2AEC9252DCED0", + "api": "csp_NongMin", + "searchable": 1, + "quickSearch": 1, + "filterable": 1 + }, + { + "key": "文才", + "name": "文才|秒播", + "type": 3, + "api": "./py/文才影视.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": { + "site": "https://m.hkybqufgh.com,https://m.sizhengxt.com,https://m.9zhoukj.com,https://m.sizhengxt.com,https://m.jiabaide.cn" + } + }, +{ + "key": "峥嵘", + "name": "峥嵘|秒播", + "type": 3, + "api": "csp_AppFox", + "ext": "https://api2026.hboqy.cn" + }, +{ + "key": "极影", + "name": "极影|秒播", + "type": 3, + "api": "./lib/jy.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": "http://cmsyun2.qijiyun.vip/api.php/app/" + }, + { + "key": "测试v4", + "name": "测试|V4秒播", + "type": 3, + "api": "https://mpimg.cn/down.php/9a74bfc73bb24b1582d75d4fc1af6bee.py", + "ext": "http://v.2video.cc" + }, +{ + "key": "星辰影院", + "name": "星辰影院|秒播", + "type": 3, + "api": "https://cdn.jsdmirror.com/gh/ouhaibo1980/tvbox@main/js/星辰影院.js" + }, +{ + "key": "葫芦", + "name": "葫芦|秒播", + "type": 3, + "jar":"./NJ4ZWwg7_20260518095827A465.jpg;md5;84edf41db6dbaf56b1ccdc7a11cc0ddf", + "api": "csp_AppGet", + "ext": "https://mobile-1251126973.cos.ap-guangzhou.myqcloud.com/maccos_config.txt|8R33VQSxzmCaHpEX|V122|okhttp/3.10.0" + }, + { + "key": "剧评", + "name": "剧评|秒播", + "type": 3, + "api": "csp_Jpys", + "playerType": 1, + "jar": "https://ncstatic.clewm.net/rsrc/2025/0915/15/e210975c2c794cbc8bb1839b54ac213e.png;md5;939FFBC2941A28CA533F2653FA4B449E", + "ext": "7lj763gg402i7942463j9j9jh8579590k3hjii5gi4i73l2k5l" + }, +{ + "key": "爱影", + "name": "爱影|秒播", + "type": 3, + "api": "csp_AppQi", + "searchable": 1, + "changeable": 1, + "ext": { + "site": "https://aysappto.oss-cn-chengdu.aliyuncs.com/q23.txt", + "dataKey": "nzEqOgYk3QzHuEP8", + "dataIv": "nzEqOgYk3QzHuEP8", + "init": "initV122", + "search": "mineInfo", + "ua": "okhttp/3.10.0" + } + }, + { + "key": "华数", + "name": "华数|影视", + "type": 3, + "api": "./py/华数.py", + "changeable": 1 + }, + { + "key": "柠檬", + "name": "柠檬|秒播", + "type": 3, + "api": "csp_Nmvod", + "playerType": 2, + "jar": "https://ncstatic.clewm.net/rsrc/2025/0915/15/e210975c2c794cbc8bb1839b54ac213e.png;md5;939FFBC2941A28CA533F2653FA4B449E", + "ext": "7lj763gg402i7942503g839jg74h8h88highi40799jh6i6k454419l0l5184k0g549h0kg2i01i838i2h42g891lgg1" + }, + { + "name": "瓜子|秒播", + "key": "Guazi", + "type": 3, + "jar": "./jars/3f8285c5-fb00-40ea-a288-b71db3571819.png", + "api": "csp_GuaziAmns", + "searchable": 1, + "quickSearch": 1, + "changeable": 0, + "ext": { + "sites": "", + "filters": "https://file.icve.com.cn/file_doc/822/528/CD984013F5776F759DFC815995F87BFB.aowu" + } + }, + { + "key": "韩圈", + "name": "韩圈|APP", + "type": 3, + "api": "csp_Hxq", + "ext": "http://www.小不点.com/api/2026/fishhxq.php" + }, + { + "key": "Kan360", + "name": "三六|秒播", + "type": 3, + "jar": "./jars/moyuer-fish07050818.jar", + "api": "csp_Kan360", + "searchable": 1, + "filterable": 1, + "ext": { + "filter": "https://open.wya6.com/d/down/2026/json/360.json", + "fishjx": [ + "https://jx.xmflv.com/?url=" + ] + } + }, + { + "key": "YunDuo", + "name": "云朵|秒播", + "type": 3, + "jar": "./jars/moyuer-fish07050818.jar", + "api": "csp_YunDuo", + "searchable": 1, + "changeable": 1, + "filterable": 1 + }, + { + "key": "CupFox", + "name": "茶杯|秒播", + "type": 3, + "jar": "./jars/moyuer-fish07050818.jar", + "api": "csp_CupFox", + "searchable": 1, + "changeable": 1, + "filterable": 1 + }, + { + "key": "FengYe", + "name": "枫叶|秒播", + "type": 3, + "jar": "./jars/moyuer-fish07050818.jar", + "api": "csp_CupFox", + "searchable": 1, + "changeable": 1, + "filterable": 1, + "ext": "ASrqK2y8hBjF6nWBT4VA6nl6pMHBuUkTFU8G1oArN4pFIRBIK3Koep4Mpa+rHr3EEKPvWTsPKevEKAGNJkBG3jYkvcbsm4uMR4SEGFXEVUK5k5GC1r3GrXXjDgc1ezNOEnVyK6ZdKI+xk/a/S3HSnknsxpSteN1SyaZ76LlkHDg8oTcmvsm6VWIJmoLG+EXXFO47gkwl6Z2cGWF6122DYXd9rqv5d1nPkPmMRFOjZmeIQwGet75HMuUQH2SD6tMhrHwqOVYxsZhaEJyp6C5P7lQgMd2fNfTUjdB8IXkeVnT+wuAKOiT09go+UHAmjghG58OMf/v/2ou2/Ojv5RTxZkUiiLZ5tUfJMSW87nNKi1Ak4w3wJ2h0OBR83irMrQjD68TCU0pG+ecPOjclNg7OFlbYxsLd0PPUBDQOAxFhq9+IpEgRp04Fi5Eb9B2exKN8CXuEoyf6ISv5l7FkIamTpm0=" + }, + { + "key": "BuBu", + "name": "布布|秒播", + "type": 3, + "jar": "./jars/moyuer-fish07050818.jar", + "api": "csp_BuBu", + "searchable": 1, + "changeable": 1, + "filterable": 1 + }, + { + "key": "huaisang", + "name": "怀桑|秒播", + "type": 3, + "jar": "./jars/moyuer-fish07050818.jar", + "api": "csp_AppQi", + "searchable": 1, + "changeable": 1, + "ext": "AdYEovlEKsDy77+R58YGahWCxrDZyBxExcQNC2NSeH0n1b5mu6tvh8b4Eh0RCpoPF6eivKdrR1Hsb8X4sSVBS8zF6jkwLW+wze9yh+hSY5iimm4gM9mAtmt0obTi+6Iox/Jp4GCsN4MQyFebMK162SKnILklpXc1UMiJv9gnPOe5aOPUxCftL+x7/UGhBdFYWIegpiHvKeavUtCUkhxtDyC8KqVVPPW0StI5GdmUA3WBbnnrNiKqNc5GBmrffd6pDN+Cf9IIjzNNvos/5KXJmBbe/baAzTLkoafeIoDhO451" + }, + { + "key": "景仪", + "name": "景仪|秒播", + "type": 3, + "jar": "./jars/moyuer-fish07050818.jar", + "api": "csp_App88", + "searchable": 1, + "filterable": 1, + "ext": "AScEBDU8ZGTviWgGR4VE0GGkVwxm9FRojDfGdLd7Uq6yQW7ma68i5+t2StAnXVayevGqI3Kb0rJi2eqa1R3PW9cxHiFDbXAhtGajyY69GUpDZQ615h6l9jBlh/RMkOo3RfAvtXJdZasUTDhxflfJPCn0T5P68L/XHUV9ylgYmABoOSghqLVoMUNWDS5E2PAMVkm39vpIJOyKNEIhVd3EQmPxDSjSoDE56akhNdBPWsT+tZVbLO8rEccdRYGvxYsXmVjhxaXhmzQEoEme5LF/0+x+M2A880NZ5akhrKIl5ZjfREZCgQ6FClx7+L8f8fb2VNiLtFu5538MrSRozjub6WRKe1m5OOdgdOTsAXJXw5QG5IQ/Y/i9VBZTZUjqP+0TpP4h92QjLynjJAFzwSr3bAOOIvEJW2LsK+hocK72wpyVG93vl42XQpU5s95dAVJOOOnbawZUsOq8a0ctuSsSdWQ=" + }, + { + "key": "枫眠", + "name": "枫眠|秒播", + "type": 3, + "jar": "./jars/moyuer-fish07050818.jar", + "api": "csp_App88", + "ext": "AdzbT8Ti+fGJ2PrJDEahdT7+zU3sFruyF0fAaUTWAUOCrbG/s0KhC5zQusyXAkmDYai/yhecQAtwKkDfTqbVCQT15T0FDK1GX9GLxT9V3XyFRDT0ATcwcFfw5joxSB+YLlez1nGpT2AW5KomI3yNv3ORTd4B3NqAcM34Cioc6+xwfj3HJ4JO6kQvv4solNApeP7CqF/Ecpt1BCgvvPzswMOr+kgVG/Iu8btrVQFO+pRpY7cfpc/Y59ZqaJlrCTDNLxgwuG20RZ9gVWsW+vd3A9lRgeTiJ39vJPoK46+9LnYGWU9dlDR1qRg4y5ILVQjEnT4el2cKSZexf7nrXHVfF3nOmHH/w/R/OSGllwUB7FCHDMc7eDY7haDYHWAQpEmcn4+BfbC4cipsdZ+nVieVVuuaWSF9s+0xYPWdSYLJMxApplTYkO+/h5z9atdURJUMGQ==" + }, + { + "key": "悯善", + "name": "悯善|秒播", + "type": 3, + "jar": "./jars/moyuer-fish07050818.jar", + "api": "csp_App88", + "ext": "AY/LmvuAAyhXffcGv5StyHm1MkGdY4inQLRC3KICnxUJBpq0d5dLhvE0+MW8XruH+M/Q/Ruqd6NayN9rihHGuotzXSTrDHgoZ2/dm2JlJ7GYOYfBorPhMPjuOhTNMg9w/J6oP4DXluvDpXNj9uOKq7g/Cx7vrKF6utOSaE1gUgDQwT251mOGTzGsd3ZrtEeepgI6hOdB2gJ4hHRumNhlbVtWDdpnVMYvhCIuH2HUqJFZWM5T+gEZTMLfeUEJt7ScfaQp90qNZID1YNo/tQOaFLGN12o4CkPtCNoYs+emjhVVqIjJzgfplCPIEyjRADqhur0c48FwCiJyp/XGZFmsMJaPKqvOkO+0H5YMKsR+EMmXCr6n0n1VnwGGpYl3maiq1SB78yDnh16291IjwXdERP1csTe41Vg3ppIixtk6q1etAikUle+6fjSFGvAvDYNr2Q==" + }, + { + "key": "长泽", + "name": "长泽|秒播", + "type": 3, + "jar": "./jars/moyuer-fish07050818.jar", + "api": "csp_App88", + "ext": "Aa+WBBIIxghmbVYkWqlC4wrZvlocl4rSZS9+QyJDF6RgWFfYSb+nEM6WkMHPVbQFva551Srt16FqFroyjNssEXemH+xC5pCMj/ewgFuLEIbY2mXCVJ1bJxWRJAggNgH1f3mjwrBxlZA0kGgfAd0os29Mdi3RNJilSo5VMkPpcQPMeF8/PTbZHNymotiTwtICNcA5Q0WXsqe/wJ3HoLU4gBYQs1lBmYdxtAuvsnte3SbumQEFlaQnygFscx6EGrwKMFZLVcmu9egAXxygsf5PmyzN/xvOr+b+HslccoKqDbHNU/C6yWFwaHBawww0ckXRtoJ8fFbV7Xv4NiRcEf6ePm/cd06xYiZmjRts11gE0r8f7D0vx/TgigmU3v8nrgNYDokUGl/jDdza3o7BXyQumCWRD45wYbmKJ1LKb0ybRvNt" + }, + { + "key": "知予", + "name": "知予|秒播", + "api": "csp_AppNox", + "jar": "./jars/moyuer-fish07050818.jar", + "type": 3, + "ext": "AXa/dhw2PLXN7GTzaamHOCEf9KWdx8b5bp7n8hAmf9Boa6AZrB5/hhb4qGO6kjkz/Oh5Uei9rzPWsZlQhgxQGSu7Zb/ZmT15NpqUP+qEjAXGPyOlfFWZbr4rxW3WZSqH6i+OT49idbNqqJdm1jXPR00G5O44GJb+9H7f1iioaW5GOEXjTbDGfBqd4uVVCz6vPPgb/k1NVY/Ze+bb5AsQMmZyAcHWgow8PEaTln0cVXxkb5VmKMQfj5sEq9ZnWGHbu4/32qI2Jjtkmj6VijcdWZSyxuwW/O1i8QbrqQZMeYyr16m5gwNFIyv3ppAxMfyjSz6P7J9dbMfS5PaT3xL3TKTAnZFjS0KyZIKYrJBLj9lXwgox8aFmPV1fT2CBX5t/dHX6gL8CfkhYGjFj7LnVLZo5se/1WjuMkzPTSZharqLvXySQsKpiGKLhfs8DsgQppW4BP8Lv2wPFDmbwB2op21RJDJNQhJXbOW6Z4rI5uXZJAW6LuvudGVKVD/RF3/yUlM4Boda3iuV/7ER45wPegGXouEiiuS7QHjYCgiMLVmUEiYLVhiTe3qDU6VlHqn5YhP7+1kibrXrRQ7JzyQ0sOxljdVHQw6IIRTQwzSBJLoDiiCddIncVXxYmKuhW6Pxen1bOfQgd723GkDyLB1Y5U9KXbzS9y6+ko37HVfmwUzDEcG+DYyxa2lJTCIXbdPbl8LBGUGMURx1S43wMLh1rurnz41qwPL5/WULQJmx4bt4E30dcTi/KfIBD8EUM8YZk8z7JSG5bi3oyYToXXRJCXK/qNpxaJ5I0s27MfnJRE/xF2k7Pv0YtFPmwdQr6Z3neEzOo/Vt1E5WlC0JiURC2bO+MWqA70m6B5WJkmnd46qPLtaofki6EzbH81AMvgsYAgjf8iAO6nYWFcrVoAsYMMgJkyPExJEUQStc+TB4gvUFUT9VeTHMXNSWiHMrhGkAQIA37PXzfig3c0sAUy+9iNlKXZv/lfbVFRgV9w8k0eDLrcR40Ma1Pmgnwq7v05RqJiSQCngiXOQgzR4wFar5anDJT73LmmP77+zaoJDH0aZeY" + }, + { + "key": "沐辞", + "name": "沐辞|秒播", + "api": "csp_AppNox", + "jar": "./jars/moyuer-fish07050818.jar", + "type": 3, + "ext": "AQUucLUJRH9RFWo2llKlyTrMCyVJ0Kpob6GGGwM0j5jiyraPW+SaJOKlkFrgd1ZhRMCnf0G74bm9C+4z5cinWObAMVMVtYf3sq6ftyqkjscrCwmACTm3lYdUtHGXFJI5MibkogunAZdw4jqNzeJW5yZmcvtvNWAB2u3HpiPCZ/7BBa+frYoJk64v5fZCFR9ywNGr0nXP+F3iwSBdiuzG3EiSTWwdh66EiviaRCI17Qad4cXfy3SMDsy39ejvXzdTrN0VOAx2XDqhFRpL6JnxweIDg8NZ75R0qJDpn9hLiTUxiIB2fT9pjD+Da10ThaLJbcf49f2N2AbwIYaL0+7lGdPD4/WSG1B/MsJYbNVEIPVn4d3lWofSBf904ualn0Yx+RE8SQfoXWXiHowqIU01uQfWuFXV+1LwHTc3ZkTfdAd9SRqQgkfl4QwyogKb9KXE51rexjvPo7heswXhKJVnginjrFrCSuPbQ5I4G9mY0ivmsNLhl4YgezZ8nNLYJTisU7gn4Q5tSUdGCo4NGVmTAm9hRLKz5ao1FNnQ6zbq33/IRtiwfHPlGZf543z+wA4ZCXukLVd2HKmNniR7dnIScjvSENMatCmS60pm6xW0ZapgZZd6rDnSivtChrU+GetWYQBBA1d/FeFgOSGhd175JvnInnwe0sGlQ+aoSyaANoEDXjk8LSzJPScRIqEn4sUBHehjWBQyQjb8wGFjciWlQETGYFYyXn4SEAhqk/KSNNHbAO7nDTZrVJatDtF/e1W0+ryHzoY+UWoVoHqm2zbsqNezbSpumOfaIJIfM5GmcpiMdjAh7w/HpGngmX/MI574TixdhpqWvtagwEVu61hxxmK5ZDJXER2wjFxZBMn2T5QelhNRHUNT7HoxkrHs8VXBwkYbLjoXs05vtXVpkLkokEi2QJU/Qjh0lCCyvHHIE2cvEzcpAqRfvzGHksXSWwZzV1MO4iHjd86Sgo/8Xp7RLQMe4G57+bg+HoZXY5YDQzK+ESXGIs1p3agfPhvaP/0fkUhUSHkLCsoO3yCuQarGPR4qgDVN8bayFm7Ya3rK9zD4" + }, + { + "key": "清沅", + "name": "清沅|秒播", + "api": "csp_AppNox", + "jar": "./jars/moyuer-fish07050818.jar", + "type": 3, + "ext": "ASjKEhQKe/DZHt0fbLID47aB3aYcWUG5aIPwrmTCgGinaSykux5CZpbz57zl1moRZGFkoEXqk7decpKNU6W/p/6OTfj3JWvZtr89yPZSxNyjJm1Il5upXQT68sXR/0WG392H71MN7Q8NC8xkSOuwAq7EfX2cuHMsiqFeCCugzAiINUiEqvboCFdXiI97C6kqqqiaQIS9d+R1r7krr5vQXWtky7XJNsiK5ACjppyTh68cbONYIcgLp5Kg5woh/wj9xmNT6mFGqF2D3j2RUaLoWYf+K1+ltBiuzZ7THWKwrnpBBig8XUAG3lXNXiFhPILyYWfr+1j/UoInhNITzJJ+SSRc88KmOk5kpch+idGzVMzHIq/bLpRRxE0iV8Qdtc2atKF9QUqPXJLrwv21Dl+nxgPEGOZ+71L+gABeQdvXO7xvyzUnd+rOidPJr1mBsfu9ySbcqHkhL5EIEQpGHwRhG/yN3Y5xj0BU+SdSxnDo+CwMC+g+WCts34c2u8h2tz7G5vuTw8QvDF23kF/BZeD2QaoCBAd3SDG9ObAichfuO1nDa938+Ul+iekNOEPtPFr6k5o+px/JJkE7MKYhekE/2JfmIkbkBHdnewJYckdM37/9EKsnAozbDyFKhfKR06Es52KtuAhGyh1B8uyfsj33qFpreAqGam8kjEHdYA0i832o0BtTU2gS3mf3NoijVH/XNmlJRuNXo9yYxdjuip4Eq4iqIgajM16MGAIJ0rumYhxJ5uJUFDlf55b9iS+DvJ8wotnBvfdINpAaeXPPlVc/1JDp1rIOw0qg2XIRAafLL7kzXnW8djs2dPSQU1+j9LIrfQ6u3k4lqUs9gRMW1JhwC/4iqimnwg0KsVValaplt+fxFHhwCCkS45uLf8BaY+UZtp5ZDffbi3Q0EDAK8F210Bzd5l8W8MokURUSj374Z7y2hAROBAAgZ8qWRrFOmBC+I+LUCm7sV4h7Mwdpe8sDAtxBhxOpBAYyV8eACQsDbnQsBvizlafy16ptRrArViG0uB1VSPqvi8gqcFD1zMl+uRo=" + }, + { + "key": "zhiqiu", + "name": "听风|秒播", + "type": 3, + "jar": "./jars/moyuer-fish07050818.jar", + "api": "csp_zhiqiu", + "searchable": 1, + "ext": "http://www.小不点.com/api//2026/zhiqiu.php" + }, + { + "key": "天堂", + "name": "天堂|APP", + "type": 3, + "api": "csp_AppDrama", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": { + "appName": "电影天堂", + "publicKey": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCduNEnfxGaLuQRk5ABzXHhPV43zi00sCHjLo8BYc+Wi6xXm2b4v0i28Sq4WlNCKhseft9fz8kO/qLr6/022o1RcuOU7e4GFL3U9WnNODwRBYSYWd+K8nqpI/tAUDmZEBGRWqjrc7x6aMl3A+xpnWkLbPCLsuhbuuUE3tv09oeOpwIDAQAB", + "dataKey": "D2KREWRIBVNAUJJYEDL4VFHOY2Q0PQ==", + "dataIv": "OC1A06E197EF10CF3F6058CA7A803B5E", + "pkg": "com.dytiantang.one", + "host": "", + "site": "https://dyttandroid04-1372779881.cos.ap-shanghai.myqcloud.com/app_dyttandroid.txt", + "version": "3.0.0.7", + "decrypt": "0" + } + }, + { + "key": "橘汁", + "name": "橘汁|APP", + "type": 3, + "api": "csp_AppDrama", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": { + "appName": "橘汁", + "publicKey": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCr8SzZhjYy+rsya1K09t8d2K50pWFoBkgUqMpKOiW+3IEVKd4eTdvg9RSOjQ82kypL6R9BnsmrS1V8s4PVDwjQbUtYhTPPC9Hz16qY7rpD6m0d2vr09/UpWQ5uOy9PR0QTrsioveZ+DIe9jc3C+zBCu/kZSY/R8stwJoiitki3gwIDAQAB", + "dataKey": "DGVQRUX5R1LWWDLHTGJSUKG1DJRVPQ==", + "dataIv": "OC1A06E197EF10CF3F6058CA7A803B5E", + "pkg": "com.lxf.snzlcgtzxyx", + "host": "", + "site": "https://123-1349250429.cos.ap-shanghai.myqcloud.com/app.txt", + "version": "3.0.2.1", + "decrypt": "1" + } + }, + { + "key": "华谊", + "name": "华谊|APP", + "type": 3, + "api": "csp_AppDrama", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": { + "appName": "华谊", + "publicKey": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCp9Ek4wIlQAtwFnuBRlsFiow2tr+4UOciGeNKbY7nL74etUqUb6fvpOSOHhFEfaWlfwUpOB17x3JEL3No19nfjCeVYrYPjlJcgoqUWH/tfIfFAQWvtxBIBlKazkhw8d3ChysWmeWRikKqkBsVRY4oqNPuj4sjm6Zult0U4I4prRQIDAQAB", + "dataKey": "NDBYSZR1DMRRZ05NSUCWEJNIYWLBPT0=", + "dataIv": "OC1A06E197EF10CF3F6058CA7A803B5E", + "pkg": "com.muyue.tool", + "host": "", + "site": "https://vip.123pan.cn/1851089669/oss/az5.txt", + "version": "1.0.0.4", + "decrypt": "1" + } + }, + { + "key": "苹果", + "name": "苹果|APP", + "type": 3, + "api": "csp_AppDrama", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": { + "appName": "小苹果", + "publicKey": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCduNEnfxGaLuQRk5ABzXHhPV43zi00sCHjLo8BYc+Wi6xXm2b4v0i28Sq4WlNCKhseft9fz8kO/qLr6/022o1RcuOU7e4GFL3U9WnNODwRBYSYWd+K8nqpI/tAUDmZEBGRWqjrc7x6aMl3A+xpnWkLbPCLsuhbuuUE3tv09oeOpwIDAQAB", + "dataKey": "S0VNDTJHOFHHCNMRAW5IV2TOS2PBPQ==", + "dataIv": "OC1A06E197EF10CF3F6058CA7A803B5E", + "pkg": "com.juechufsh.android.xpg1", + "host": "", + "site": "https://xpgandroid03-1372779881.cos.ap-beijing.myqcloud.com/app_xpg_android.txt", + "version": "1.0.0.3", + "decrypt": "0" + } + }, + { + "key": "薯条", + "name": "薯条|APP", + "type": 3, + "api": "csp_AppDrama", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": { + "appName": "薯条影视", + "publicKey": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCduNEnfxGaLuQRk5ABzXHhPV43zi00sCHjLo8BYc+Wi6xXm2b4v0i28Sq4WlNCKhseft9fz8kO/qLr6/022o1RcuOU7e4GFL3U9WnNODwRBYSYWd+K8nqpI/tAUDmZEBGRWqjrc7x6aMl3A+xpnWkLbPCLsuhbuuUE3tv09oeOpwIDAQAB", + "dataKey": "A1VACZJWDKRZY1P3MFV0DDRAZ3F3PT0=", + "dataIv": "OC1A06E197EF10CF3F6058CA7A803B5E", + "pkg": "com.st.standroid", + "host": "", + "site": "https://dyttandroid-1372779881.cos.ap-guangzhou.myqcloud.com/app_dyttandroid.txt", + "version": "5.0.0.1", + "decrypt": "0" + } + }, + { + "key": "久久", + "name": "久久|APP", + "type": 3, + "api": "csp_AppYsV2", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": "http://99cms.jj99.icu:8199/api.php/app/" + }, + { + "key": "闪影", + "name": "闪影|APP", + "type": 3, + "api": "csp_AppYsV2", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": "http://38.47.213.61:41271/mogai_api.php/v1.vod" + }, + { + "key": "飞飞", + "name": "飞飞丨APP", + "type": 3, + "api": "csp_AppYsV2", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": "https://qpcj.69mini.com/api.php/app/" + }, + { + "key": "金牌", + "name": "金牌|APP", + "type": 3, + "api": "csp_AppQi", + "searchable": 1, + "changeable": 1, + "ext": { + "url": "https://qj4.catbb.xyz", + "dataKey": "eecbio48dsq13kkk", + "dataIv": "eecbio48dsq13kkk", + "search": "searchList4", + "init": "initV122", + "ua": "okhttp/3.10.0" + } + }, + { + "key": "老鹰", + "name": "老鹰|APP", + "type": 3, + "api": "csp_AppQi", + "searchable": 1, + "changeable": 1, + "ext": { + "site": "https://maotouyinghubei.oss-cn-wuhan-lr.aliyuncs.com/maotouyinghb.txt", + "dataKey": "zxPtEUDGVllIUhDB", + "dataIv": "zxPtEUDGVllIUhDB", + "ua": "okhttp/3.10.0" + } + }, + { + "key": "蓝鹰", + "name": "蓝鹰|APP", + "type": 3, + "api": "csp_AppQi", + "searchable": 1, + "changeable": 1, + "ext": { + "site": "https://xinlanyinghb.oss-cn-wuhan-lr.aliyuncs.com/xly.txt", + "dataKey": "ca94b06ca359d80e", + "dataIv": "ca94b06ca359d80e", + "init": "initV120", + "ua": "okhttp/3.10.0" + } + }, + { + "key": "王子", + "name": "王子|APP", + "type": 3, + "api": "csp_AppGet", + "searchable": 1, + "changeable": 1, + "ext": { + "url": "https://app.95112475.xyz", + "dataKey": "5a9w6x58dsq6z3a6", + "dataIv": "5a9w6x58dsq6z3a6" + } + }, + { + "key": "茉莉", + "name": "茉莉|APP", + "type": 3, + "api": "csp_AppGet", + "searchable": 1, + "changeable": 1, + "ext": { + "site": "https://gitee.com/wmmoliill/wimg/raw/master/img/bk/9.txt", + "dataKey": "88689667dce61725", + "dataIv": "88689667dce61725" + } + }, + { + "key": "哔哩视频", + "name": "哔哩|视频", + "type": 3, + "api": "csp_BiliYS", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "changeable": 0, + "style": { + "type": "rect", + "ratio": 1.433 + }, + "ext": { + "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt" + } + }, + { + "key": "三六零", + "name": "三六零|视频", + "type": 3, + "api": "csp_SP360" + }, + { + "key": "玩偶", + "name": "玩偶|4K", + "type": 3, + "api": "csp_Wogg", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "ext": { + "site": [ + "https://www.wogg.net", + "https://wogg.xxooo.cf", + "https://woggpan.xxooo.cf" + ] + }, + "timeout": 60 + }, + { + "key": "快映", + "name": "快映|4K", + "type": 3, + "api": "csp_PanWebShare", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "ext": { + "site": [ + "http://38.76.197.172:12521" + ] + }, + "timeout": 60 + }, + { + "key": "木偶", + "name": "木偶|4K", + "type": 3, + "api": "csp_PanWebShare", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "ext": { + "site": [ + "https://123.666291.xyz", + "https://666.666291.xyz", + "https://www.muou.site", + "https://www.muou.asia" + ] + }, + "timeout": 60 + }, + { + "key": "蜡笔", + "name": "蜡笔|4K", + "type": 3, + "api": "csp_PanWebShare", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "ext": { + "site": [ + "http://www.xiaocgege.shop", + "http://xiaocge.fun", + "http://feimo.fun", + "http://xiaocgege.shop" + ] + }, + "timeout": 60 + }, + { + "key": "至臻", + "name": "至臻|4K", + "type": 3, + "api": "csp_PanWebShare", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "ext": { + "site": [ + "https://mihdr.top", + "https://www.miqk.cc", + "https://www.mihdr.top" + ] + }, + "timeout": 60 + }, + { + "key": "多多", + "name": "多多|4K", + "type": 3, + "api": "csp_PanWebShare", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "ext": { + "site": [ + "https://tv.yydsys.top", + "https://tv.yydsys.cc", + "https://tv.214521.xyz" + ] + }, + "timeout": 60 + }, + { + "key": "欧哥", + "name": "欧哥|4K", + "type": 3, + "api": "csp_PanWebShare", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "ext": { + "site": [ + "https://woog.nxog.eu.org", + "https://woog.nxog.fun", + "https://woog.nxog.eu.org", + "https://woog.430520.xyz" + ] + }, + "timeout": 60 + }, + { + "key": "二小", + "name": "二小|4K", + "type": 3, + "api": "csp_PanWebShare", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "ext": { + "site": [ + "https://www.2xiaopan.top", + "https://www.erxiaozhan.top", + "https://www.2xiaozhan.top" + ] + }, + "timeout": 60 + }, + { + "key": "虎斑", + "name": "虎斑|4K", + "type": 3, + "api": "csp_PanWebShare", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "ext": { + "site": [ + "http://38.76.197.172:16969" + ] + }, + "timeout": 60 + }, + { + "key": "夸父", + "name": "夸父|4K", + "type": 3, + "api": "csp_PanWebShareKF", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "style": { + "type": "list", + "ratio": 1.433 + }, + "ext": { + "site": [ + "https://www.kfzys.net" + ], + "cookie": "bbs_sid=p5mugcm9r147o1d3qpi0su1ucm; bbs_token=gDMAOehNUQetTJv9Lnet0J_2FGJmgdvnx90iTZqzU_2FnO0_3D" + }, + "timeout": 60 + }, + { + "key": "盘它", + "name": "盘它|4K", + "type": 3, + "api": "csp_PanWebSharePT", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "style": { + "type": "list" + }, + "timeout": 60 + }, + { + "key": "123", + "name": "123|4K", + "type": 3, + "api": "csp_PanWebShare123", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "style": { + "type": "list", + "ratio": 1.433 + }, + "ext": { + "site": [ + "https://123panfx.com", + "https://pan1.me" + ] + }, + "timeout": 60 + }, + { + "key": "指南", + "name": "指南|4K", + "type": 3, + "api": "csp_4KZhinan", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "timeout": 60 + }, + { + "key": "人人", + "name": "人人|4K", + "type": 3, + "api": "csp_RenRen", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "timeout": 60 + }, + { + "key": "即刻", + "name": "即刻|4K", + "type": 3, + "api": "csp_Jike", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "style": { + "type": "list" + }, + "timeout": 60 + }, + { + "key": "双星", + "name": "双星|4K", + "type": 3, + "api": "csp_ShuangXing", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "style": { + "type": "list" + }, + "timeout": 60 + }, + { + "key": "河马短剧", + "name": "河马|短剧", + "type": 3, + "api": "csp_HemaDJ", + "searchable": 1, + "changeable": 1, + "quickSearch": 1, + "filterable": 1, + "genre": "shortdrama" + }, + { + "key": "好看短剧", + "name": "好看|短剧", + "type": 3, + "api": "csp_HaokanDJ", + "searchable": 1, + "changeable": 1, + "quickSearch": 1, + "filterable": 1, + "genre": "shortdrama" + }, + { + "key": "围观短剧", + "name": "围观|短剧", + "type": 3, + "api": "csp_WeiguanDJ", + "searchable": 1, + "changeable": 1, + "quickSearch": 1, + "filterable": 1, + "genre": "shortdrama" + }, + { + "key": "厂长影视", + "name": "厂长|影视", + "type": 3, + "api": "csp_Czsapp", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": "https://cz01.vip" + }, + { + "key": "金牌影视", + "name": "金牌|影视", + "type": 3, + "api": "csp_Jpys", + "ext": "https://y2s52n7.com,https://m.hkybqufgh.com,https://m.sizhengxt.com,https://m.9zhoukj.com,https://m.sizhengxt.com,https://m.jiabaide.cn" + }, + { + "key": "修罗影视", + "name": "修罗|影视", + "api": "csp_Xlys", + "type": 3, + "ext": "https://www.xlysw.ggff.net" + }, + { + "key": "云播影视", + "name": "云播|影视", + "type": 3, + "api": "csp_Tvyb" + }, + { + "key": "骚火影视", + "name": "骚火|影视", + "type": 3, + "api": "csp_SaoHuo", + "ext": "https://shdy5.us" + }, + { + "key": "农民影视", + "name": "农民|影视", + "type": 3, + "api": "csp_Wwys", + "ext": "https://vip.wwgz.cn:5200" + }, + { + "key": "爱看机器人", + "name": "爱看|影视", + "type": 3, + "api": "csp_Ikanbot", + "searchable": 1, + "quickSearch": 1, + "filterable": 1 + }, + { + "key": "小镇影视", + "name": "小镇|影视", + "type": 3, + "api": "csp_XBPQ", + "ext": "https://git.yylx.win/raw.githubusercontent.com/PizazzGY/NewTVBox/main/movie/json/XZYS.json" + }, + { + "key": "面包影视", + "name": "面包|影视", + "type": 3, + "api": "csp_XBPQ", + "ext": "https://git.yylx.win/raw.githubusercontent.com/PizazzGY/NewTVBox/main/movie/json/MBYS.json" + }, + { + "key": "永乐影视", + "name": "永乐|影视", + "type": 3, + "api": "csp_XBPQ", + "ext": "https://git.yylx.win/raw.githubusercontent.com/PizazzGY/NewTVBox/main/movie/json/YLYS.json" + }, + { + "key": "剧圈影视", + "name": "剧圈|影视", + "type": 3, + "api": "csp_XYQHiker", + "ext": "https://git.yylx.win/raw.githubusercontent.com/PizazzGY/NewTVBox/main/movie/json/JQYS.json" + }, + { + "key": "1905", + "name": "1905|影视", + "type": 3, + "api": "csp_Web1905", + "searchable": 1, + "quickSearch": 0, + "filterable": 0 + }, + { + "key": "哆啦新番社", + "name": "哆啦|新番社", + "type": 3, + "api": "csp_XBPQ", + "style": { + "type": "list" + }, + "ext": "https://git.yylx.win/raw.githubusercontent.com/PizazzGY/NewTVBox/main/anime/json/DLXFS.json" + }, + { + "key": "Anime1", + "name": "A1|动漫", + "type": 3, + "api": "https://pan.vma.cc/pan/down.php/ec67b9045d393737f073d2c9365533f0.js", + "ext": "https://git.yylx.win/raw.githubusercontent.com/PizazzGY/NewTVBox/main/anime/js/Anime1.js" + }, + { + "key": "漫国动漫", + "name": "漫国丨动漫", + "type": 3, + "searchable": 1, + "api": "csp_AppSy", + "ext": { + "site": "https://dm-1255775577.cos.ap-guangzhou.myqcloud.com/dmg/api.txt", + "siteKey": "rectangleadsadxa", + "listKey": "aassddwwxxllsx1x", + "parsesKey": "aassddwwxxllsx1x" + } + }, + { + "key": "方舟动漫", + "name": "方舟丨动漫", + "type": 3, + "searchable": 1, + "api": "csp_AppGet", + "ext": { + "url": "https://www.cyfz.top", + "dataKey": "e72cdfd629e8895d", + "dataIv": "e72cdfd629e8895d" + } + }, + { + "key": "曼波动漫", + "name": "曼波|动漫", + "type": 3, + "searchable": 1, + "api": "csp_AppGet", + "ext": { + "url": "https://app.omofun1.top", + "dataKey": "66dc309cbeeca454", + "dataIv": "66dc309cbeeca454" + } + }, + { + "key": "咕咕动漫", + "name": "咕咕|动漫", + "type": 3, + "searchable": 1, + "api": "csp_AppGet", + "ext": { + "url": "https://www.gugu3.com", + "dataKey": "nKfZ8KX6JTNWRzTD", + "dataIv": "nKfZ8KX6JTNWRzTD" + } + }, + { + "key": "巴士动漫", + "name": "巴士|动漫", + "type": 3, + "api": "csp_XYQHiker", + "ext": "https://git.yylx.win/raw.githubusercontent.com/PizazzGY/NewTVBox/main/anime/json/bsdm.json" + }, + { + "key": "路漫漫", + "name": "路漫漫|动漫", + "type": 3, + "api": "https://pan.vma.cc/pan/down.php/ec67b9045d393737f073d2c9365533f0.js", + "ext": "https://git.yylx.win/raw.githubusercontent.com/PizazzGY/NewTVBox/main/anime/js/LMM.js" + }, + { + "key": "去看吧", + "name": "去看吧|动漫", + "type": 3, + "api": "https://pan.vma.cc/pan/down.php/ec67b9045d393737f073d2c9365533f0.js", + "ext": "https://git.yylx.win/raw.githubusercontent.com/PizazzGY/NewTVBox/main/anime/js/QKB.js" + }, + { + "key": "荐片", + "name": "荐片|磁力", + "api": "csp_JianPian", + "type": 3 + }, + { + "key": "七味", + "name": "七味|磁力", + "type": 3, + "api": "csp_QnMp4", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": "https://www.qwshow.com,https://www.qwmkv.com,https://www.qwfilm.com,https://www.qwfun.com,https://www.qnnull.com,https://www.qnnull.com" + }, + { + "key": "New6v", + "name": "New6V|磁力", + "type": 3, + "api": "csp_New6v", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": "https://www.xb6v.com" + }, + { + "key": "美剧迷", + "name": "美剧迷|磁力", + "type": 3, + "api": "csp_MeijuMi", + "searchable": 1, + "quickSearch": 1, + "filterable": 1 + }, + { + "key": "迅雷吧", + "name": "迅雷吧|磁力", + "type": 3, + "api": "csp_Xunlei8", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": "https://xunlei8.me" + }, + { + "key": "电影港", + "name": "电影港|磁力", + "type": 3, + "api": "csp_XYQHiker", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": "https://git.yylx.win/raw.githubusercontent.com/PizazzGY/NewTVBox/main/magnet/json/DYG.json" + }, + { + "key": "阿里云盘", + "name": "阿里|云盘", + "type": 3, + "api": "csp_PanAli", + "searchable": 0, + "filterable": 0, + "changeable": 0, + "style": { + "type": "list", + "ratio": 1.433 + } + }, + { + "key": "夸克网盘", + "name": "夸克|网盘", + "type": 3, + "api": "csp_PanQuark", + "searchable": 0, + "filterable": 0, + "changeable": 0, + "style": { + "type": "list", + "ratio": 1.433 + } + }, + { + "key": "UC网盘", + "name": "UC|网盘", + "type": 3, + "api": "csp_PanUC", + "searchable": 0, + "filterable": 0, + "changeable": 0, + "style": { + "type": "list", + "ratio": 1.433 + } + }, + { + "key": "百度网盘", + "name": "百度|网盘", + "type": 3, + "api": "csp_PanBaidu", + "searchable": 0, + "filterable": 0, + "changeable": 0, + "style": { + "type": "list", + "ratio": 1.433 + } + }, + { + "key": "盘搜", + "name": "盘搜|搜索", + "type": 3, + "api": "csp_PanSou", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "timeout": 60 + }, + { + "key": "古哥", + "name": "古哥|搜索", + "type": 3, + "api": "csp_GugeSo", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "timeout": 60 + }, + { + "key": "兄弟", + "name": "兄弟|搜索", + "type": 3, + "api": "csp_XiongdiPan", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "timeout": 60 + }, + { + "key": "百酷", + "name": "百酷|搜索", + "type": 3, + "api": "csp_Baiku", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "timeout": 60 + }, + { + "key": "米搜", + "name": "米搜|搜索", + "type": 3, + "api": "csp_MiSou", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "timeout": 60 + }, + { + "key": "鬼鬼", + "name": "鬼鬼|搜索", + "type": 3, + "api": "csp_GuiGui", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "timeout": 60 + }, + { + "key": "混合", + "name": "混合|搜索", + "type": 3, + "api": "csp_HunHePan", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "timeout": 60 + }, + { + "key": "天翼", + "name": "天翼|搜索", + "type": 3, + "api": "csp_TianYiSou", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "timeout": 60 + }, + { + "key": "趣盘", + "name": "趣盘|搜索", + "type": 3, + "api": "csp_QuPanSo", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "timeout": 60 + }, + { + "name": "飞球|体育", + "key": "FeiqLive", + "type": 3, + "jar": "./jars/3f8285c5-fb00-40ea-a288-b71db3571819.png", + "api": "csp_FeiqLiveAmns", + "searchable": 1, + "quickSearch": 1, + "changeable": 0 + }, + { + "name": "新88|体育", + "key": "BbkqLive", + "type": 3, + "jar": "./jars/3f8285c5-fb00-40ea-a288-b71db3571819.png", + "api": "csp_BbkqLiveAmns", + "searchable": 1, + "quickSearch": 1, + "changeable": 0, + "ext": "https://www.88kanqiu.app,https://www.88kanqiu.la,https://www.88kanqiu.one,https://www.88kanqiu.ooo,https://www.88kanqiu.pw" + }, + { + "key": "88看球", + "name": "88|看球", + "type": 3, + "api": "csp_Kanqiu", + "gridview": 3, + "style": { + "type": "list" + } + }, + { + "key": "瓜子体育", + "name": "瓜子|体育", + "type": 3, + "api": "csp_GuaziTY", + "style": { + "type": "list" + } + }, + { + "key": "企鹅体育", + "name": "企鹅体育|直播", + "type": 3, + "searchable": 1, + "api": "./lib/企鹅体育.py", + "style": { + "type": "rect", + "ratio": 1.33 + }, + "changeable": 1 + }, + { + "key": "暴风体育", + "name": "暴风|看球", + "type": 1, + "api": "https://bfzyapi.com/api.php/provide/vod/", + "searchable": 1, + "changeable": 1, + "filterable": 1, + "categories": [ + "足球", + "篮球", + "网球", + "斯诺克" + ], + "style": { + "type": "list" + } + }, + { + "key": "球通体育", + "name": "球通|体育", + "type": 3, + "api": "csp_QiutongTY", + "style": { + "type": "list" + } + }, + { + "key": "咖啡体育", + "name": "咖啡|体育", + "type": 3, + "api": "csp_KafeiTY", + "style": { + "type": "list" + } + }, + { + "key": "919体育", + "name": "919|体育", + "type": 3, + "api": "csp_919TY", + "style": { + "type": "list" + } + }, + { + "key": "呦呦DJ", + "name": "呦呦|DJ", + "type": 3, + "api": "csp_Djuu", + "style": { + "type": "list" + } + }, + { + "key": "轮回DJ", + "name": "轮回|DJ", + "type": 3, + "api": "csp_Djlh", + "style": { + "type": "list" + } + }, + { + "key": "蜻蜓FM", + "name": "蜻蜓|FM", + "type": 3, + "api": "csp_QingtingFM", + "style": { + "type": "list" + } + }, + { + "key": "世界听书", + "name": "世界|听书", + "type": 3, + "api": "csp_TingShijie", + "style": { + "type": "list" + } + }, + { + "key": "戏曲多多", + "name": "戏曲|多多", + "type": 3, + "api": "csp_AppLY", + "style": { + "type": "list" + } + }, + { + "key": "爱听音乐", + "name": "爱听|音乐", + "type": 3, + "api": "https://git.yylx.win/raw.githubusercontent.com/PizazzGY/NewTVBox/main/other/py/爱听音乐.py" + }, + { + "key": "csp_Kugou", + "name": "酷狗|音乐", + "type": 3, + "api": "csp_Kugou", + "jar": "https://gitee.com/tianwikeji/jar/raw/master/Yoursmile.jar", + "playerType": 2, + "ext": { + "classes": [ + { + "type_name": "酷狗", + "type_id": "kugou" + } + ] + } + }, + { + "key": "网络直播", + "name": "网络|直播", + "type": 3, + "api": "https://git.yylx.win/raw.githubusercontent.com/PizazzGY/NewTVBox/main/webcast/py/WLZB.py" + }, + { + "key": "哔哩直播", + "name": "哔哩|直播", + "type": 3, + "api": "https://git.yylx.win/raw.githubusercontent.com/PizazzGY/NewTVBox/main/webcast/py/BLZB.py" + }, + { + "key": "哔哩合集", + "name": "哔哩|合集", + "type": 3, + "api": "csp_Bili", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "changeable": 0, + "style": { + "type": "rect", + "ratio": 1.433 + }, + "ext": { + "json": "https://git.yylx.win/raw.githubusercontent.com/PizazzGY/NewTVBox/main/movie/json/BLHJ.json", + "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt" + } + }, + { + "key": "哔哩哔哩演唱会", + "name": "哔哩|音乐", + "type": 3, + "api": "csp_Bili", + "searchable": 0, + "quickSearch": 0, + "filterable": 0, + "ext": { + "json": "https://git.yylx.win/raw.githubusercontent.com/PizazzGY/NewTVBox/main/other/json/BLYCH.json", + "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt" + }, + "style": { + "type": "rect", + "ratio": 1.597 + } + }, + { + "key": "哔哩哔哩听书", + "name": "哔哩|听书", + "type": 3, + "api": "csp_Bili", + "searchable": 0, + "quickSearch": 0, + "filterable": 0, + "ext": { + "json": "https://git.yylx.win/raw.githubusercontent.com/PizazzGY/NewTVBox/main/other/json/BLTS.json", + "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt" + }, + "style": { + "type": "rect", + "ratio": 1.597 + } + }, + { + "key": "哔哩哔哩相声", + "name": "哔哩|相声", + "type": 3, + "api": "csp_Bili", + "searchable": 0, + "quickSearch": 0, + "filterable": 0, + "ext": { + "json": "https://git.yylx.win/raw.githubusercontent.com/PizazzGY/NewTVBox/main/other/json/BLXS.json", + "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt" + }, + "style": { + "type": "rect", + "ratio": 1.597 + } + }, + { + "key": "哔哩哔哩小品", + "name": "哔哩|小品", + "type": 3, + "api": "csp_Bili", + "searchable": 0, + "quickSearch": 0, + "filterable": 0, + "ext": { + "json": "https://git.yylx.win/raw.githubusercontent.com/PizazzGY/NewTVBox/main/other/json/BLXP.json", + "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt" + }, + "style": { + "type": "rect", + "ratio": 1.597 + } + }, + { + "key": "哔哩哔哩戏曲", + "name": "哔哩|戏曲", + "type": 3, + "api": "csp_Bili", + "searchable": 0, + "quickSearch": 0, + "filterable": 0, + "ext": { + "json": "https://git.yylx.win/raw.githubusercontent.com/PizazzGY/NewTVBox/main/other/json/BLXQ.json", + "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt" + }, + "style": { + "type": "rect", + "ratio": 1.597 + } + }, + { + "key": "少儿教育", + "name": "少儿|教育", + "type": 3, + "api": "csp_Bili", + "searchable": 0, + "quickSearch": 0, + "filterable": 1, + "ext": { + "json": "https://git.yylx.win/raw.githubusercontent.com/PizazzGY/NewTVBox/main/education/json/SEJY.json", + "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt" + }, + "style": { + "type": "rect", + "ratio": 1.597 + } + }, + { + "key": "小学课堂", + "name": "小学|课堂", + "type": 3, + "api": "csp_Bili", + "searchable": 0, + "quickSearch": 0, + "filterable": 1, + "ext": { + "json": "https://git.yylx.win/raw.githubusercontent.com/PizazzGY/NewTVBox/main/education/json/XXKT.json", + "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt" + }, + "style": { + "type": "rect", + "ratio": 1.597 + } + }, + { + "key": "初中课堂", + "name": "初中|课堂", + "type": 3, + "api": "csp_Bili", + "searchable": 0, + "quickSearch": 0, + "filterable": 1, + "ext": { + "json": "https://git.yylx.win/raw.githubusercontent.com/PizazzGY/NewTVBox/main/education/json/CZKT.json", + "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt" + }, + "style": { + "type": "rect", + "ratio": 1.597 + } + }, + { + "key": "高中课堂", + "name": "高中|课堂", + "type": 3, + "api": "csp_Bili", + "searchable": 0, + "quickSearch": 0, + "filterable": 1, + "ext": { + "json": "https://git.yylx.win/raw.githubusercontent.com/PizazzGY/NewTVBox/main/education/json/GZKT.json", + "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt" + }, + "style": { + "type": "rect", + "ratio": 1.597 + } + }, + { + "key": "急救教学", + "name": "急救|教学", + "type": 3, + "api": "csp_FirstAid", + "searchable": 0, + "quickSearch": 0, + "changeable": 0, + "style": { + "type": "rect", + "ratio": 3.8 + }, + "gridview": "0-0-4.1" + }, + { + "key": "养生堂", + "name": "养生|知识", + "type": 3, + "api": "csp_YST", + "searchable": 0, + "quickSearch": 0, + "changeable": 0, + "style": { + "type": "rect", + "ratio": 1.597 + } + }, + { + "key": "kktd", + "name": "糖豆|广场舞", + "type": 1, + "api": "https://kk.666888.club/vod/cibn_api.php/provide/vod/", + "searchable": 1, + "changeable": 1, + "quickSearch": 0, + "filterable": 0 + }, + { + "name": "嗷嗚|漫剧", + "key": "MjHggg", + "type": 3, + "api": "csp_HgggAmns", + "jar": "./jars/嗷呜.jar;md5;71db9888b04fa21b49768a8e25503df4", + "searchable": 1, + "filterable": 1, + "quickSearch": 1, + "changeable": 1, + "ext": "comic_series" + }, + { + "name": "嗷嗚|短剧", + "key": "DjHggg", + "type": 3, + "api": "csp_HgggAmns", + "jar": "./jars/嗷呜.jar;md5;71db9888b04fa21b49768a8e25503df4", + "searchable": 1, + "filterable": 1, + "quickSearch": 1, + "changeable": 1, + "ext": "short_play" + }, + { + "name": "豪堪|短剧", + "key": "HHkk", + "type": 3, + "api": "csp_HHkkAmns", + "jar": "./jars/嗷呜.jar;md5;71db9888b04fa21b49768a8e25503df4", + "searchable": 1, + "filterable": 1, + "quickSearch": 1, + "changeable": 1, + "genre": "shortdrama" + }, + { + "name": "盒马|短剧", + "key": "Hema", + "type": 3, + "api": "csp_HemaAmns", + "searchable": 1, + "jar": "./jars/嗷呜.jar;md5;71db9888b04fa21b49768a8e25503df4", + "filterable": 1, + "quickSearch": 1, + "changeable": 1, + "genre": "shortdrama" + }, + { + "name": "拜拜|短剧", + "key": "Bddj", + "type": 3, + "api": "csp_BddjAmns", + "jar": "./jars/嗷呜.jar;md5;71db9888b04fa21b49768a8e25503df4", + "searchable": 1, + "filterable": 1, + "quickSearch": 1, + "changeable": 1, + "genre": "shortdrama" + }, + { + "name": "围观|短剧", + "key": "Wgdj", + "type": 3, + "jar": "./jars/嗷呜.jar;md5;71db9888b04fa21b49768a8e25503df4", + "api": "csp_WgdjAmns", + "searchable": 1, + "filterable": 1, + "quickSearch": 1, + "changeable": 1, + "genre": "shortdrama" + }, + { + "name": "锦鲤|短剧", + "key": "JLdj", + "type": 3, + "api": "csp_JLdjAmns", + "jar": "./jars/嗷呜.jar;md5;71db9888b04fa21b49768a8e25503df4", + "searchable": 1, + "filterable": 1, + "quickSearch": 1, + "changeable": 1, + "genre": "shortdrama" + }, + { + "name": "甜圈|短剧", + "key": "TQdj", + "type": 3, + "api": "csp_TQdjAmns", + "jar": "./jars/嗷呜.jar;md5;71db9888b04fa21b49768a8e25503df4", + "searchable": 1, + "filterable": 1, + "quickSearch": 1, + "changeable": 1, + "genre": "shortdrama" + }, + { + "name": "喵喵|短剧", + "key": "Qmdj", + "type": 3, + "api": "csp_QmdjAmns", + "searchable": 1, + "jar": "./jars/嗷呜.jar;md5;71db9888b04fa21b49768a8e25503df4", + "filterable": 1, + "quickSearch": 1, + "changeable": 1, + "genre": "shortdrama" + }, + { + "key": "push_agent", + "name": "手机|推送", + "type": 3, + "api": "csp_Push", + "searchable": 0, + "filterable": 0, + "changeable": 0 + }, + { + "key": "请勿相信广告", + "name": "请勿相信广告", + "type": 3, + "api": "csp_Push", + "searchable": 0, + "filterable": 0, + "changeable": 0 + } + ], + "lives": [ + { + "name": "直播", + "type": 0, + "url": "http://1.94.31.214/live/live9/dgtv2026.php", + "playerType": 1 + }, + { + "name": "千帆直播", + "type": 0, + "url": "https://qimiaosteveoutlook122-my.sharepoint.com/personal/xiaochen_qimiaosteveoutlook122_onmicrosoft_com/_layouts/15/download.aspx?UniqueId=85f3406b-517f-4ddf-877b-bb027d63605f&Translate=false&tempauth=v1.eyJzaXRlaWQiOiJhYjRjN2Q4Yy1mY2NjLTRmZTctODA4MS03NGM1NzVkNDE3ZTciLCJhcHBfZGlzcGxheW5hbWUiOiLnroDorq_kupHnm5giLCJhcHBpZCI6IjYzODU3MzJmLWY4ZDItNGVjOC1iOGJlLWMyYzVkZjk0NDZlOCIsImF1ZCI6IjAwMDAwMDAzLTAwMDAtMGZmMS1jZTAwLTAwMDAwMDAwMDAwMC9xaW1pYW9zdGV2ZW91dGxvb2sxMjItbXkuc2hhcmVwb2ludC5jb21AYzhhY2U3MmItZjg2Ni00YTMyLTg4ZTEtYjExOTA5MTk5M2ZhIiwiZXhwIjoiMTc4Mjg4OTIwNSJ9.CkAKDGVudHJhX2NsYWltcxIwQ08zS2t0SUdFQUFhRm5JdE1HUnRXVXRDVXpCRE9IaEhWRVpSZEVFd1FVRXFBQT09CjIKCmFjdG9yYXBwaWQSJDAwMDAwMDAzLTAwMDAtMDAwMC1jMDAwLTAwMDAwMDAwMDAwMAoKCgRzbmlkEgI2NBILCPyDqv-A0Ks_EAUaDjIwLjE5MC4xMzIuMTA1Kiw5dWlnZlUwSTZ6d2c3TE5POTVpVGJnQzZKcm5taWY3SUpzd3I4TnR5MHJ3PTC_ATgBQhCiIucDiIAAcPh15nBFoRPUShBoYXNoZWRwcm9vZnRva2VuUghbImttc2kiXWokMDAyMGQ2NWEtNDkyZi05NmM1LWMzYjEtODM1MDhiYWZmMzllcikwaC5mfG1lbWJlcnNoaXB8MTAwMzIwMDU5MTMzOGNhMEBsaXZlLmNvbXoBMoIBEgkr56zIZvgyShGI4bEZCRmT-pIBBHhpYW-aAQRjaGVuogEueGlhb2NoZW5AcWltaWFvc3RldmVvdXRsb29rMTIyLm9ubWljcm9zb2Z0LmNvbaoBEDEwMDMyMDA1OTEzMzhDQTCyAQ5hbGxmaWxlcy53cml0ZcgBAQ.8ZpiLKlXzlBXNQWNKyFxhB-JD34scLw7q1zbhy6laco&ApiVersion=2.0", + "playerType": 1 + }, + { + "name": "IPTV直播", + "type": 0, + "url": "https://qimiaosteveoutlook122-my.sharepoint.com/personal/xiaochen_qimiaosteveoutlook122_onmicrosoft_com/_layouts/15/download.aspx?UniqueId=8d60a340-3cce-4293-a1de-2d788afe8f06&Translate=false&tempauth=v1.eyJzaXRlaWQiOiJhYjRjN2Q4Yy1mY2NjLTRmZTctODA4MS03NGM1NzVkNDE3ZTciLCJhcHBfZGlzcGxheW5hbWUiOiLnroDorq_kupHnm5giLCJhcHBpZCI6IjYzODU3MzJmLWY4ZDItNGVjOC1iOGJlLWMyYzVkZjk0NDZlOCIsImF1ZCI6IjAwMDAwMDAzLTAwMDAtMGZmMS1jZTAwLTAwMDAwMDAwMDAwMC9xaW1pYW9zdGV2ZW91dGxvb2sxMjItbXkuc2hhcmVwb2ludC5jb21AYzhhY2U3MmItZjg2Ni00YTMyLTg4ZTEtYjExOTA5MTk5M2ZhIiwiZXhwIjoiMTc4Mjg5MTc1NiJ9.CkAKDGVudHJhX2NsYWltcxIwQ0svcmt0SUdFQUFhRm5KcVkzWnpabFJOZVd0bFIxQlJTR3h1UTNoaVFVRXFBQT09CjIKCmFjdG9yYXBwaWQSJDAwMDAwMDAzLTAwMDAtMDAwMC1jMDAwLTAwMDAwMDAwMDAwMAoKCgRzbmlkEgI2NBILCJymy4S_0as_EAUaCzQwLjEyNi40LjQwKixrQjVmbjZ5VS9JcEFQM1o2VmNWTEgxblFWaHFma0tad2JWY0RPeGxVTlJZPTC_ATgBQhCiIulyQlAAcPh17GM8Oz-dShBoYXNoZWRwcm9vZnRva2VuUghbImttc2kiXWokMDAyMGQ2NWEtNDkyZi05NmM1LWMzYjEtODM1MDhiYWZmMzllcikwaC5mfG1lbWJlcnNoaXB8MTAwMzIwMDU5MTMzOGNhMEBsaXZlLmNvbXoBMoIBEgkr56zIZvgyShGI4bEZCRmT-pIBBHhpYW-aAQRjaGVuogEueGlhb2NoZW5AcWltaWFvc3RldmVvdXRsb29rMTIyLm9ubWljcm9zb2Z0LmNvbaoBEDEwMDMyMDA1OTEzMzhDQTCyAQ5hbGxmaWxlcy53cml0ZcgBAQ.y9FteJWfcVW8pk1Hn2668F7VUoNlKdcQsDRiJtdUO3M&ApiVersion=2.0", + "playerType": 1 + }, + { + "name": "酷9直播", + "type": 0, + "url": "https://gitee.com/OscarWilde/itv/raw/master/tv.txt", + "playerType": 1 + }, + { + "name": "电影TV", + "type": 0, + "url": "https://gh.catmak.name/https://raw.githubusercontent.com/wujiangliu/live-sources/refs/heads/main/dianying.txt", + "playerType": 1, + "logo": "https://gongdian.top/tv/taibiao/{name}.png" + }, + + { + "name": "宫殿IPTV", + "type": 0, + "url": "https://gongdian.top/tv/iptv/iptv.m3u", + "playerType": 1, + "logo": "https://gongdian.top/tv/taibiao/{name}.png" + }, + { + "name": "斗鱼一起看", + "type": 0, + "url": "https://gongdian.top/tv/Mursor/douyuyqk.m3u", + "playerType": 1 + }, + { + "name": "虎牙一起看", + "type": 0, + "url": "https://gongdian.top/tv/Mursor/huyayqk.m3u", + "playerType": 1 + }, + { + "name": "哔哩live", + "type": 0, + "url": "https://gongdian.top/tv/Mursor/bililive.m3u", + "playerType": 1 + }, + { + "name": "YY轮播", + "type": 0, + "url": "https://gongdian.top/tv/Mursor/yylunbo.m3u", + "playerType": 1 + }, + + { + "name": "稳哥直播", + "type": 0, + "url": "http://47.120.41.246:8025/vip/jar/zb.php", + "playerType": 1 + }, + { + "name": "稳哥直播2", + "type": 0, + "url": "https://fastgit.cc/https://raw.githubusercontent.com/develop202/migu_video/refs/heads/main/interface.txt", + "playerType": 1 + }, + { + "name": "稳哥直播3", + "type": 0, + "url": "https://gitee.com/szwxk/watch-television/raw/master/wxk1.m3u", + "playerType": 1 + }, + { + "name": "直播接口", + "type": 1, + "url": "https://raw.githubusercontent.com/Kimentanm/aptv/master/m3u/iptv.m3u" + }, + { + "name": "裤佬TV直播", + "type": 1, + "url": "https://gh-proxy.org/https://raw.githubusercontent.com/Jsnzkpg/Jsnzkpg/Jsnzkpg/Jsnzkpg1" + }, + { + "name": "世界杯直播", + "type": 0, + "url": "./lib/catvod.m3u" + }, + { + "name": "潇雨TV直播", + "type": 1, + "url": "https://itv.tv1288.xyz" + }, + { + "name": "日后TV直播", + "type": 0, + "url": "http://rihou.cc:555/gggg.nzk" + }, + { + "name": "涛涛TV直播", + "type": 1, + "url": "https://gh-proxy.org/https://raw.githubusercontent.com/taoBox2620/taoBox2620/refs/heads/main/log.png" + }, + { + "name": "易发TV直播", + "type": 1, + "url": "./lib/yiyifafa.txt" + }, + { + "name": "咪咕TV直播", + "type": 0, + "url": "./lib/interface.txt" + }, + { + "name": "宫殿TV直播", + "type": 0, + "url": "https://gongdian.top/tv/iptv" + }, + { + "name": "虎牙TV直播", + "type": 1, + "url": "https://yg.ygbox.de5.net/huya.php" + } + ], + "parses": [ + { + "name": "聚合", + "type": 3, + "url": "Web" + }, + + {"name": "夜夜","type": 1,"url": "https://json.cfysoft.cc/api/?key=db40a4b2f15c4078301a068181bb2724&url="}, +{"name": "小欧","type": 1,"url": "https://json.xophp.com/api/?key=5492ef7d5a1646338426e2f45b8c8e0d&url="}, +{"name": "友谊","type": 1,"url": "http://global.apirun.xn--vsqw5hh18a8vw.com:2025/api/?key=63c856aac8b205a5cb972ae8950cfd78&url="}, +{"name": "花旗","type": 1,"url": "https://api.huaqi.pro/api/?key=5bd0db7c858ba9f999373450f3651af7&url="}, +{"name": "迷你1","type": 1,"url": "https://niubi.69mini.com/api/?key=bcf862a11db301f5609ec85e7e5012ad&url="}, +{"name": "迷你2","type": 1,"url": "http://niubi.69mini.com/api/?key=09a74556faba7e3b528d64b9c9a86a61&url="}, +{"name": "迷你3","type": 1,"url": "http://jiexi.69mini.com/api/?key=5cc632accf2f4b27a417b89c8edf69c7&url="}, +{"name": "麒麟","type": 1,"url": "https://api.jxapi.cc/api/?key=6e4acf058180b58cbdb0106aa5cdb1e2&url="}, +{"name": "魂动","type": 1,"url": "http://nsys.hundong.xyz/api/?key=EdG87gW0IDYarx9ry5&url="}, +{"name": "白粥","type": 1,"url": "http://103.236.72.166:188/api/?key=veniDOaEzSzIThZsyb&url="}, +{"name": "无极","type": 1,"url": "http://111.170.140.70:1332/?url="}, + + { + "name": "虾米", + "type": 0, + "url": "https://jx.xmflv.com/?url=", + "ext": { + "header": { + "user-agent": "Mozilla/5.0 (Linux; Android 13; V2049A Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36" + } + } + }, + { + "name": "云解", + "type": 0, + "url": "https://yparse.ik9.cc/index.php?url=", + "ext": { + "header": { + "user-agent": "Mozilla/5.0 (Linux; Android 13; V2049A Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36" + } + } + }, + { + "name": "咸鱼", + "type": 0, + "url": "https://jx.xymp4.cc/?url=", + "ext": { + "header": { + "user-agent": "Mozilla/5.0 (Linux; Android 13; V2049A Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36" + } + } + }, + { + "name": "淘片", + "type": 0, + "url": "https://jx.yparse.com/index.php?url=", + "ext": { + "header": { + "user-agent": "Mozilla/5.0 (Linux; Android 13; V2049A Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36" + } + } + }, + { + "name": "冰豆", + "type": 0, + "url": "https://bd.jx.cn/?url=", + "ext": { + "header": { + "user-agent": "Mozilla/5.0 (Linux; Android 13; V2049A Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36" + } + } + }, + { + "name": "七七", + "type": 0, + "url": "https://jx.77flv.cc/?url=", + "ext": { + "header": { + "user-agent": "Mozilla/5.0 (Linux; Android 13; V2049A Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36" + } + } + }, + { + "name": "盘古", + "type": 0, + "url": "https://www.playm3u8.cn/jiexi.php?url=", + "ext": { + "header": { + "user-agent": "Mozilla/5.0 (Linux; Android 13; V2049A Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36" + } + } + }, + { + "name": "夜幕", + "type": 0, + "url": "https://yemu.xyz/?url=", + "ext": { + "header": { + "user-agent": "Mozilla/5.0 (Linux; Android 13; V2049A Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36" + } + } + } + ], + "rules": [ + { + "name": "农民", + "hosts": [ + "toutiaovod.com" + ], + "regex": [ + "video/tos/cn" + ] + }, + { + "name": "火山", + "hosts": [ + "huoshan.com" + ], + "regex": [ + "item_id=" + ] + }, + { + "name": "抖音", + "hosts": [ + "douyin.com" + ], + "regex": [ + "is_play_url=" + ] + }, + { + "name": "磁力广告", + "hosts": [ + "magnet" + ], + "regex": [ + "更多", + "请访问", + "example", + "社 區", + "x u u", + "直 播", + "更 新", + "社 区", + "有趣", + "有 趣", + "英皇体育", + "全中文AV在线", + "澳门皇冠赌场", + "哥哥快来", + "美女荷官", + "裸聊", + "新片首发", + "UUE29" + ] + }, + { + "name": "饭团点击", + "hosts": [ + "dadagui", + "freeok", + "dadagui" + ], + "script": [ + "document.querySelector(\"#playleftiframe\").contentWindow.document.querySelector(\"#start\").click();" + ] + }, + { + "name": "毛驴点击", + "hosts": [ + "www.maolvys.com" + ], + "script": [ + "document.getElementsByClassName('swal-buttonswal-button--confirm')[0].click()" + ] + } + ], + "doh": [ + { + "name": "Google", + "url": "https://dns.google/dns-query", + "ips": [ + "8.8.4.4", + "8.8.8.8" + ] + }, + { + "name": "Cloudflare", + "url": "https://cloudflare-dns.com/dns-query", + "ips": [ + "1.1.1.1", + "1.0.0.1", + "2606:4700:4700::1111", + "2606:4700:4700::1001" + ] + }, + { + "name": "AdGuard", + "url": "https://dns.adguard.com/dns-query", + "ips": [ + "94.140.14.140", + "94.140.14.141" + ] + }, + { + "name": "DNSWatch", + "url": "https://resolver2.dns.watch/dns-query", + "ips": [ + "84.200.69.80", + "84.200.70.40" + ] + }, + { + "name": "Quad9", + "url": "https://dns.quad9.net/dns-quer", + "ips": [ + "9.9.9.9", + "149.112.112.112" + ] + } + ], + "flags": [ + "youku", + "优酷", + "优 酷", + "优酷视频", + "qq", + "腾讯", + "腾 讯", + "腾讯视频", + "iqiyi", + "qiyi", + "奇艺", + "爱奇艺", + "爱 奇 艺", + "m1905", + "xigua", + "letv", + "leshi", + "乐视", + "乐 视", + "sohu", + "搜狐", + "搜 狐", + "搜狐视频", + "tudou", + "pptv", + "mgtv", + "芒果", + "imgo", + "芒果TV", + "芒 果 T V", + "bilibili", + "哔 哩", + "哔 哩 哔 哩" + ], + "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" + } + ] + }, + { + "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": "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" + } + ] + } + ], + "ads": [ + "static-mozai.4gtv.tv" + ] +} \ No newline at end of file diff --git a/tianjitop/llllo4k/py/1 b/tianjitop/llllo4k/py/1 new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/tianjitop/llllo4k/py/1 @@ -0,0 +1 @@ + diff --git a/tianjitop/llllo4k/py/4K电影网.py b/tianjitop/llllo4k/py/4K电影网.py new file mode 100644 index 00000000..fe8c7086 --- /dev/null +++ b/tianjitop/llllo4k/py/4K电影网.py @@ -0,0 +1,580 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +4K影视网 (sta-cafe.com) 爬虫 - TVBox/影视仓 Spider 插件 +支持分类浏览、筛选、搜索、详情获取、播放链接解析 +""" + +import re +import json +import logging +import urllib.parse +import os +import sys +import requests +from bs4 import BeautifulSoup + +sys.path.append(os.path.dirname(os.path.abspath(__file__))) +try: + from base.spider import Spider as BaseSpider +except ImportError: + BaseSpider = object + +logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') +logger = logging.getLogger(__name__) + + +class Spider(BaseSpider): + """4K影视网爬虫""" + + BASE_URL = "https://www.sta-cafe.com" + + HEADERS = { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", + "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8", + } + + CATEGORY_MAP = { + "1": "动作片", + "2": "喜剧片", + "3": "爱情片", + "4": "科幻片", + "5": "恐怖片", + "6": "剧情片", + "7": "战争片", + "8": "国产剧", + "9": "香港剧", + "10": "韩国剧", + "11": "欧美剧", + "12": "台湾剧", + "13": "日本剧", + "14": "海外剧", + "15": "泰国剧", + "16": "国产动漫", + "17": "日韩动漫", + "18": "欧美动漫", + "19": "港台动漫", + "20": "海外动漫", + "21": "大陆综艺", + "22": "港台综艺", + "23": "日韩综艺", + "24": "欧美综艺", + } + + CATEGORY_PARENT = { + "1": "电影", "2": "电影", "3": "电影", "4": "电影", + "5": "电影", "6": "电影", "7": "电影", + "8": "电视剧", "9": "电视剧", "10": "电视剧", "11": "电视剧", + "12": "电视剧", "13": "电视剧", "14": "电视剧", "15": "电视剧", + "16": "动漫", "17": "动漫", "18": "动漫", "19": "动漫", "20": "动漫", + "21": "综艺", "22": "综艺", "23": "综艺", "24": "综艺", + } + + SORT_MAP = { + "0": "最新", + "1": "最热", + "2": "评分", + } + + def __init__(self): + try: + super().__init__() + except Exception: + pass + self.session = requests.Session() + self.session.headers.update(self.HEADERS) + + def init(self, extend): + """初始化""" + pass + + def getName(self): + return "4K影视网" + + def _parse_ext(self, ext): + """解析ext参数,兼容dict和JSON字符串格式""" + if not ext: + return {} + if isinstance(ext, dict): + return ext + if isinstance(ext, str): + try: + return json.loads(ext) + except Exception: + return {} + return {} + + def _parse_nuxt_data(self, html): + """解析 Nuxt.js SSR 扁平化数组数据""" + match = re.search( + r'<script[^>]*id="__NUXT_DATA__"[^>]*>(.*?)</script>', + html, re.DOTALL + ) + if not match: + scripts = re.findall(r'<script[^>]*>(.*?)</script>', html, re.DOTALL) + for s in scripts: + if 'ShallowReactive' in s and ('vodName' in s or 'typeId' in s): + start = s.find('[') + end = s.rfind(']') + 1 + if start >= 0 and end > start: + try: + return json.loads(s[start:end]) + except Exception: + pass + return [] + try: + return json.loads(match.group(1)) + except Exception as e: + logger.warning(f"解析Nuxt数据失败: {e}") + return [] + + def _get_val(self, arr, idx): + """从扁平化数组中获取值,如果idx是数字则索引,否则直接返回""" + if isinstance(idx, int) and idx < len(arr): + return arr[idx] + return idx + + def _resolve_dict(self, arr, d): + """递归解析字典中的所有索引值""" + if not isinstance(d, dict): + return self._get_val(arr, d) if isinstance(d, int) else d + result = {} + for k, v in d.items(): + if isinstance(v, int): + val = self._get_val(arr, v) + if isinstance(val, dict): + result[k] = self._resolve_dict(arr, val) + elif isinstance(val, list): + result[k] = self._resolve_list(arr, val) + else: + result[k] = val + elif isinstance(v, dict): + result[k] = self._resolve_dict(arr, v) + elif isinstance(v, list): + result[k] = self._resolve_list(arr, v) + else: + result[k] = v + return result + + def _resolve_list(self, arr, lst): + """递归解析列表中的所有索引值""" + if not isinstance(lst, list): + return lst + result = [] + for item in lst: + if isinstance(item, int): + val = self._get_val(arr, item) + if isinstance(val, dict): + result.append(self._resolve_dict(arr, val)) + elif isinstance(val, list): + result.append(self._resolve_list(arr, val)) + else: + result.append(val) + elif isinstance(item, dict): + result.append(self._resolve_dict(arr, item)) + elif isinstance(item, list): + result.append(self._resolve_list(arr, item)) + else: + result.append(item) + return result + + def _find_state_data(self, arr, keyword): + """从state中查找包含关键字的数据""" + if len(arr) < 4: + return None + state = arr[3] + if not isinstance(state, dict): + return None + for k, v in state.items(): + if keyword in str(k): + if isinstance(v, int): + data = arr[v] + if isinstance(data, dict) and 'obj' in data: + obj_idx = data['obj'] + if isinstance(obj_idx, int): + return self._resolve_dict(arr, arr[obj_idx]) + return self._resolve_dict(arr, data) if isinstance(data, dict) else data + return None + + def homeContent(self, filter=False): + """首页内容""" + try: + url = f"{self.BASE_URL}/" + resp = self.session.get(url, timeout=30) + resp.raise_for_status() + html = resp.text + arr = self._parse_nuxt_data(html) + if not arr: + return {} + + classes = [] + for cate_id, cate_name in self.CATEGORY_MAP.items(): + classes.append({ + "type_id": cate_id, + "type_name": cate_name, + }) + + return { + "class": classes, + "filters": self._get_filters(), + "list": self._get_home_videos(arr), + } + except Exception as e: + logger.error(f"获取首页失败: {e}") + return {} + + def homeVideoContent(self): + """首页视频内容""" + home = self.homeContent() + return {"list": home.get("list", [])} + + def _get_home_videos(self, arr): + """从首页数据中提取推荐视频""" + videos = [] + seen_ids = set() + for i, item in enumerate(arr): + if isinstance(item, dict) and 'vodId' in item and 'vodName' in item: + vod = self._resolve_dict(arr, item) + vod_id = str(vod.get('vodId', '')) + if vod_id and vod_id not in seen_ids: + seen_ids.add(vod_id) + videos.append({ + "vod_id": vod_id, + "vod_name": vod.get('vodName', ''), + "vod_pic": vod.get('vodPic', ''), + "vod_remarks": vod.get('vodLastRemarks', ''), + }) + if len(videos) >= 36: + break + return videos + + def _get_filters(self): + """获取筛选配置""" + filters = {} + for cate_id in self.CATEGORY_MAP: + parent = self.CATEGORY_PARENT.get(cate_id, '') + siblings = [ + {"n": name, "v": tid} + for tid, name in self.CATEGORY_MAP.items() + if self.CATEGORY_PARENT.get(tid) == parent + ] + filters[cate_id] = [ + { + "key": "type", + "name": "类型", + "value": [{"n": "全部", "v": ""}] + siblings + }, + { + "key": "sort", + "name": "排序", + "value": [ + {"n": "最新", "v": "0"}, + {"n": "最热", "v": "1"}, + {"n": "评分", "v": "2"}, + ] + }, + ] + return filters + + def categoryContent(self, tid, pg, filter, ext): + """分类内容""" + try: + page = int(pg) if pg else 1 + type_id = str(tid) + + ext_dict = self._parse_ext(ext) + + if ext_dict and ext_dict.get('type'): + type_id = str(ext_dict['type']) + + sort = ext_dict.get('sort', '0') if ext_dict else '0' + + url = f"{self.BASE_URL}/vodtype/{type_id}" + if page > 1: + url += f"/{page}" + + resp = self.session.get(url, timeout=30) + resp.raise_for_status() + html = resp.text + arr = self._parse_nuxt_data(html) + if not arr: + return {"list": [], "page": page, "pagecount": 1, "limit": 20, "total": 0} + + page_data = self._find_state_data(arr, 'type-data-') + if not page_data or 'data' not in page_data: + return {"list": [], "page": page, "pagecount": 1, "limit": 20, "total": 0} + + data = page_data['data'] + if isinstance(data, int): + data = self._resolve_dict(arr, arr[data]) + + total = data.get('total', 0) + total_page = data.get('total_page', 1) + per_page = data.get('per_page', 18) + + vod_list = [] + vod_recent = data.get('vod_recent', []) + if isinstance(vod_recent, int): + vod_recent = arr[vod_recent] if vod_recent < len(arr) else [] + if isinstance(vod_recent, list): + resolved = [] + for idx in vod_recent: + if isinstance(idx, int) and idx < len(arr): + vod_obj = arr[idx] + if isinstance(vod_obj, dict): + resolved.append(self._resolve_dict(arr, vod_obj)) + vod_recent = resolved + + if isinstance(vod_recent, list): + for vod in vod_recent: + if isinstance(vod, dict): + vod_list.append({ + "vod_id": str(vod.get('vodId', '')), + "vod_name": vod.get('vodName', ''), + "vod_pic": vod.get('vodPic', ''), + "vod_remarks": vod.get('vodLastRemarks', ''), + }) + + return { + "list": vod_list, + "page": page, + "pagecount": total_page, + "limit": per_page, + "total": total, + } + except Exception as e: + logger.error(f"获取分类内容失败: {e}") + return {"list": [], "page": 1, "pagecount": 1, "limit": 20, "total": 0} + + def detailContent(self, ids): + """详情内容""" + try: + vod_id = ids[0] if isinstance(ids, list) else str(ids) + url = f"{self.BASE_URL}/voddetail/{vod_id}.html" + resp = self.session.get(url, timeout=30) + resp.raise_for_status() + html = resp.text + arr = self._parse_nuxt_data(html) + if not arr: + return {"list": []} + + detail_data = self._find_state_data(arr, 'vod-detail-page-') + if not detail_data or 'detail' not in detail_data: + return {"list": []} + + detail = detail_data['detail'] + if isinstance(detail, int): + detail = self._resolve_dict(arr, arr[detail]) + + vod_play = detail.get('vod_play', []) + if isinstance(vod_play, int): + vod_play = arr[vod_play] if vod_play < len(arr) else [] + if isinstance(vod_play, list): + resolved = [] + for idx in vod_play: + if isinstance(idx, int) and idx < len(arr): + src_obj = arr[idx] + if isinstance(src_obj, dict): + resolved.append(self._resolve_dict(arr, src_obj)) + vod_play = resolved + + play_from_list = [] + play_url_list = [] + + if isinstance(vod_play, list): + for src in vod_play: + if isinstance(src, dict): + collect_source = src.get('collectSource', {}) + from_name = '' + if isinstance(collect_source, dict): + from_name = collect_source.get('webName', '') + if not from_name: + from_name = src.get('vodRemarks', '播放源') + if not from_name: + from_name = '播放源' + + play_url = src.get('vodPlayUrl', '') + if play_url: + episodes = [] + # 每集之间用 # 分隔,每集格式为 "集名$链接" + # 注意:链接中可能含有 $ 字符,所以只按第一个 $ 分割 + items = play_url.split('#') + for item in items: + item = item.strip() + if not item: + continue + # 按 $ 分割,最多分2段(集名 + 链接) + # 但要处理多个 $$$ 的情况(某些源用 $$$ 当分隔符) + if '$$$' in item: + # 格式: 集名$$$链接 + sub_parts = item.split('$$$', 1) + ep_name = sub_parts[0].strip() + ep_url = sub_parts[1].strip() if len(sub_parts) > 1 else '' + if ep_url: + episodes.append(f"{ep_name}${ep_url}") + elif '$' in item: + # 格式: 集名$链接 + idx = item.find('$') + ep_name = item[:idx].strip() + ep_url = item[idx+1:].strip() + if ep_url: + episodes.append(f"{ep_name}${ep_url}") + elif ep_name: + episodes.append(f"{ep_name}$") + else: + # 只有链接,没有集名 + episodes.append(f"第{len(episodes)+1}集${item}") + if episodes: + play_url_list.append('#'.join(episodes)) + play_from_list.append(from_name) + + vod_item = { + "vod_id": str(detail.get('vodId', vod_id)), + "vod_name": detail.get('vodName', ''), + "vod_pic": detail.get('vodPic', ''), + "type_name": detail.get('type', {}).get('typeName', '') if isinstance(detail.get('type'), dict) else '', + "vod_year": str(detail.get('vodYear', '')), + "vod_area": detail.get('vodArea', ''), + "vod_remarks": detail.get('vodLastRemarks', ''), + "vod_actor": detail.get('vodActor', ''), + "vod_director": detail.get('vodDirector', ''), + "vod_content": detail.get('vodContent', '') or detail.get('vodBlurb', ''), + "vod_play_from": '$$$'.join(play_from_list), + "vod_play_url": '$$$'.join(play_url_list), + } + + return {"list": [vod_item]} + except Exception as e: + logger.error(f"获取详情失败: {e}") + return {"list": []} + + def playerContent(self, flag, id, vipFlags): + """播放内容 - 直接返回m3u8链接""" + try: + play_url = urllib.parse.unquote(id) if id else '' + return { + "parse": 0, + "url": play_url, + } + except Exception as e: + logger.error(f"解析播放失败: {e}") + return {"parse": 0, "url": ""} + + def searchContent(self, key, quick, pg): + """搜索内容""" + try: + page = int(pg) if pg else 1 + encoded_key = urllib.parse.quote(key) + url = f"{self.BASE_URL}/vodsearch/{encoded_key}" + if page > 1: + url += f"/{page}" + + resp = self.session.get(url, timeout=30) + resp.raise_for_status() + html = resp.text + arr = self._parse_nuxt_data(html) + if not arr: + return {"list": [], "page": page, "pagecount": 1, "limit": 20, "total": 0} + + search_data = self._find_state_data(arr, 'search-page-data-') + if not search_data or 'data' not in search_data: + return {"list": [], "page": page, "pagecount": 1, "limit": 20, "total": 0} + + data = search_data['data'] + if isinstance(data, int): + data = self._resolve_dict(arr, arr[data]) + + total = data.get('total', 0) + total_page = data.get('total_page', 1) + per_page = data.get('per_page', data.get('page_size', 18)) + + vod_list = [] + vod_recent = data.get('vod_recent', data.get('vods', [])) + if isinstance(vod_recent, int): + vod_recent = arr[vod_recent] if vod_recent < len(arr) else [] + if isinstance(vod_recent, list): + resolved = [] + for idx in vod_recent: + if isinstance(idx, int) and idx < len(arr): + vod_obj = arr[idx] + if isinstance(vod_obj, dict): + resolved.append(self._resolve_dict(arr, vod_obj)) + vod_recent = resolved + + if isinstance(vod_recent, list): + for vod in vod_recent: + if isinstance(vod, dict): + vod_list.append({ + "vod_id": str(vod.get('vodId', '')), + "vod_name": vod.get('vodName', ''), + "vod_pic": vod.get('vodPic', ''), + "vod_remarks": vod.get('vodLastRemarks', ''), + }) + + return { + "list": vod_list, + "page": page, + "pagecount": total_page, + "limit": per_page, + "total": total, + } + except Exception as e: + logger.error(f"搜索失败: {e}") + return {"list": [], "page": 1, "pagecount": 1, "limit": 20, "total": 0} + + +def main(): + """测试用例""" + spider = Spider() + + print("=" * 60) + print("【1】测试首页") + print("=" * 60) + home = spider.homeContent() + print(f"分类数量: {len(home.get('class', []))}") + for c in home.get('class', [])[:5]: + print(f" - {c['type_name']} ({c['type_id']})") + print(f"推荐视频数: {len(home.get('list', []))}") + + print("\n" + "=" * 60) + print("【2】测试分类列表 (动作片)") + print("=" * 60) + cat = spider.categoryContent("1", "1", False, {}) + print(f"总数: {cat.get('total')}") + print(f"总页数: {cat.get('pagecount')}") + print(f"当前页: {cat.get('page')}") + print(f"本页视频数: {len(cat.get('list', []))}") + for v in cat.get('list', [])[:5]: + print(f" - {v['vod_name']} [{v['vod_remarks']}]") + + print("\n" + "=" * 60) + print("【3】测试详情页") + print("=" * 60) + if cat.get('list'): + first_id = cat['list'][0]['vod_id'] + detail = spider.detailContent([first_id]) + if detail.get('list'): + d = detail['list'][0] + print(f"标题: {d['vod_name']}") + print(f"年份: {d['vod_year']}") + print(f"地区: {d['vod_area']}") + print(f"演员: {d['vod_actor'][:50]}...") + print(f"播放源数量: {len(d['vod_play_from'].split('$$$')) if d['vod_play_from'] else 0}") + print(f"播放源: {d['vod_play_from'][:80]}...") + + print("\n" + "=" * 60) + print("【4】测试搜索") + print("=" * 60) + search = spider.searchContent("逆风草", False, "1") + print(f"搜索结果数: {search.get('total')}") + for v in search.get('list', [])[:5]: + print(f" - {v['vod_name']} [{v['vod_remarks']}]") + + print("\n" + "=" * 60) + print("测试完成!") + print("=" * 60) + + +if __name__ == "__main__": + main() diff --git a/tianjitop/llllo4k/py/jieyingshi.py b/tianjitop/llllo4k/py/jieyingshi.py new file mode 100644 index 00000000..cd4fe42c --- /dev/null +++ b/tianjitop/llllo4k/py/jieyingshi.py @@ -0,0 +1,180 @@ +# -*- coding: utf-8 -*- +# @Author : Doubebly +# @Time : 2025/1/21 23:07 + +import hashlib +import re +import sys +import time +import requests +sys.path.append('..') +from base.spider import Spider + + +class Spider(Spider): + def getName(self): + return "JieYingShi" + + def init(self, extend): + self.home_url = 'https://www.hkybqufgh.com' + self.error_url = 'https://json.doube.eu.org/error/4gtv/index.m3u8' + self.headers = { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36", + } + + def getDependence(self): + return [] + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def homeContent(self, filter): + + return {'class': [ + { + 'type_id': '1', + 'type_name': '电影' + }, + { + 'type_id': '2', + 'type_name': '电视剧' + }, + { + 'type_id': '4', + 'type_name': '动漫' + }, + { + 'type_id': '3', + 'type_name': '综艺' + } + ]} + + def homeVideoContent(self): + a = self.get_data(self.home_url) + return {'list': a, 'parse': 0, 'jx': 0} + + def categoryContent(self, cid, page, filter, ext): + url = self.home_url + f'/vod/show/id/{cid}/page/{page}' + data = self.get_data(url) + return {'list': data, 'parse': 0, 'jx': 0} + + + def detailContent(self, did): + ids = did[0] + data = self.get_detail_data(ids) + return {"list": data, 'parse': 0, 'jx': 0} + + def searchContent(self, key, quick, page='1'): + if int(page) > 1: + return {'list': [], 'parse': 0, 'jx': 0} + url = self.home_url + f'/vod/search/{key}' + data = self.get_data(url) + return {'list': data, 'parse': 0, 'jx': 0} + + def playerContent(self, flag, pid, vipFlags): + url = self.get_play_data(pid) + return {"url": url, "header": self.headers, "parse": 1, "jx": 0} + + def localProxy(self, params): + pass + + def destroy(self): + return '正在Destroy' + + + def get_data(self, url): + data = [] + try: + res = requests.get(url, headers=self.headers) + if res.status_code != 200: + return data + vod_id_s = re.findall(r'\\"vodId\\":(.*?),', res.text) + vod_name_s = re.findall(r'\\"vodName\\":\\"(.*?)\\"', res.text) + vod_pic_s = re.findall(r'\\"vodPic\\":\\"(.*?)\\"', res.text) + vod_remarks_s = re.findall(r'\\"vodRemarks\\":\\"(.*?)\\"', res.text) + + for i in range(len(vod_id_s)): + data.append( + { + 'vod_id': vod_id_s[i], + 'vod_name': vod_name_s[i], + 'vod_pic': vod_pic_s[i], + 'vod_remarks': vod_remarks_s[i], + } + ) + except requests.RequestException as e: + print(e) + return data + + def get_detail_data(self, ids): + url = self.home_url + f'/api/mw-movie/anonymous/video/detail?id={ids}' + t = str(int(time.time() * 1000)) + headers = self.get_headers(t, f'id={ids}&key=cb808529bae6b6be45ecfab29a4889bc&t={t}') + try: + res = requests.get(url, headers=headers) + if res.status_code != 200: + return [] + i = res.json()['data'] + urls = [] + for ii in res.json()['data']['episodeList']: + name = ii['name'] + url = ii['nid'] + urls.append(f'{name}${ids}-{url}') + data = { + 'type_name': i['vodClass'], + 'vod_id': i['vodId'], + 'vod_name': i['vodName'], + 'vod_remarks': i['vodRemarks'], + 'vod_year': i['vodYear'], + 'vod_area': i['vodArea'], + 'vod_actor': i['vodActor'], + 'vod_director': i['vodDirector'], + 'vod_content': i['vodContent'], + 'vod_play_from': '🌈蜀山专享', + 'vod_play_url': '#'.join(urls), + + } + return [data] + + except requests.RequestException as e: + print(e) + return [] + + def get_play_data(self, play): + info = play.split('-') + _id = info[0] + _pid = info[1] + url = self.home_url + f'/api/mw-movie/anonymous/v2/video/episode/url?id={_id}&nid={_pid}' + t = str(int(time.time() * 1000)) + headers = self.get_headers(t, f'id={_id}&nid={_pid}&key=cb808529bae6b6be45ecfab29a4889bc&t={t}') + try: + res = requests.get(url, headers=headers) + if res.status_code != 200: + return self.error_url + return res.json()['data']['list'][0]['url'] + except requests.RequestException as e: + print(e) + return self.error_url + + @staticmethod + def get_headers(t, e): + sign = hashlib.sha1(hashlib.md5(e.encode()).hexdigest().encode()).hexdigest() + headers = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36', + 'Accept': 'application/json, text/plain, */*', + 'sign': sign, + 'sec-ch-ua': '"Google Chrome";v="131", "Chromium";v="131", "Not_A Brand";v="24"', + 't': t, + 'referer': 'https://www.hkybqufgh.com/', + } + return headers + +if __name__ == '__main__': + pass + + + + diff --git a/tianjitop/llllo4k/py/kkys.py b/tianjitop/llllo4k/py/kkys.py new file mode 100644 index 00000000..52345db2 --- /dev/null +++ b/tianjitop/llllo4k/py/kkys.py @@ -0,0 +1,408 @@ +#coding=utf-8 +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +TVBox / 影视仓 Python源脚本 +站点: 可可影视 (103.51.147.112:51120) +""" + +import sys +import re +import json +import requests +from urllib.parse import quote +from pyquery import PyQuery as pq +sys.path.append('..') +from base.spider import Spider + +class Spider(Spider): + + def __init__(self): + super().__init__() + self.site = 'https://103.51.147.112:51120' + self.session = requests.Session() + self.session.headers.update({ + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36', + 'Referer': 'https://103.51.147.112:51120/' + }) + self.cateManual = { + '电影': '1', + '连续剧': '2', + '动漫': '3', + '综艺纪录': '4', + '短剧': '6' + } + # 隐晦的站点标识 + self._mark = chr(26143) + chr(27827) + + def init(self, extend=""): + pass + + def getName(self): + return "可可影视" + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def homeContent(self, filter): + result = {'class': [], 'filters': {}, 'list': [], 'parse': 0, 'jx': 0} + for k, v in self.cateManual.items(): + result['class'].append({ + 'type_id': str(v), + 'type_name': k + }) + return result + + def homeVideoContent(self): + videos = [] + try: + url = f'{self.site}/channel/1.html' + r = self.session.get(url, timeout=15, verify=False) + r.encoding = 'utf-8' + doc = pq(r.text) + items = doc('.module-item') + seen = set() + for item in items.items(): + a = item.find('.v-item') + href = a.attr('href') or '' + vid = self.getVid(href) + if not vid or vid in seen: + continue + seen.add(vid) + + # 标题 + titles = item.find('.v-item-title') + title = '' + for j in range(len(titles)): + t = titles.eq(j).text().strip() + if t and t != '可可影视-kekys.com': + title = t + break + + # 图片 + pic = '' + imgs = item.find('img') + for j in range(len(imgs)): + img = imgs.eq(j) + src = img.attr('data-original') or '' + if src and 'placeholder' not in src and 'logo_placeholder' not in src: + pic = src + break + if pic and pic.startswith('/'): + pic = 'https://vres.zyxpedu.com' + pic + + # 备注 + note = '' + bottom = item.find('.v-item-bottom span') + if bottom.length: + note = bottom.text().strip() + + if title: + videos.append({ + 'vod_id': vid, + 'vod_name': title, + 'vod_pic': pic, + 'vod_remarks': note + }) + except Exception as e: + print(f'homeVideoContent error: {e}') + return {'list': videos[:24], 'parse': 0, 'jx': 0} + + def categoryContent(self, tid, pg, filter, extend): + result = {'list': [], 'parse': 0, 'jx': 0} + page = int(pg) if pg else 1 + try: + url = f'{self.site}/channel/{tid}.html?page={page}' + r = self.session.get(url, timeout=15, verify=False) + r.encoding = 'utf-8' + doc = pq(r.text) + items = doc('.module-item') + for item in items.items(): + a = item.find('.v-item') + href = a.attr('href') or '' + vid = self.getVid(href) + if not vid: + continue + + # 标题 + titles = item.find('.v-item-title') + title = '' + for j in range(len(titles)): + t = titles.eq(j).text().strip() + if t and t != '可可影视-kekys.com': + title = t + break + + # 图片 + pic = '' + imgs = item.find('img') + for j in range(len(imgs)): + img = imgs.eq(j) + src = img.attr('data-original') or '' + if src and 'placeholder' not in src and 'logo_placeholder' not in src: + pic = src + break + if pic and pic.startswith('/'): + pic = 'https://vres.zyxpedu.com' + pic + + # 备注 + note = '' + bottom = item.find('.v-item-bottom span') + if bottom.length: + note = bottom.text().strip() + + if title: + result['list'].append({ + 'vod_id': vid, + 'vod_name': title, + 'vod_pic': pic, + 'vod_remarks': note + }) + except Exception as e: + print(f'categoryContent error: {e}') + + result['page'] = page + result['pagecount'] = page + 1 if len(result['list']) > 0 else page + result['limit'] = len(result['list']) + result['total'] = len(result['list']) + return result + + def detailContent(self, ids): + result = {'list': [], 'parse': 0, 'jx': 0} + vid = ids[0] if ids else '' + if not vid: + return result + try: + url = f'{self.site}/detail/{vid}.html' + r = self.session.get(url, timeout=15, verify=False) + r.encoding = 'utf-8' + html = r.text + + # 标题:从title标签提取,最可靠 + title = '' + title_match = re.search(r'<title>(.+?)', html) + if title_match: + title = title_match.group(1).split('-')[0].strip() + # 去掉特殊字符水印 + title = re.sub(r'[𝕜𝕜𝕪𝕤𝟘𝟙𝕔𝕠𝕞.\s]+', ' ', title).strip() + title = re.sub(r'\s+', ' ', title).strip() + + # 图片:从og:image提取 + pic = '' + og_img = re.search(r']+href="(/play/\d+-(\d+)-(\d+)\.html)"[^>]+class="episode-item"[^>]*>(.*?)', html, re.DOTALL) + # 如果没匹配到,试试class在href前面的情况 + if not all_play: + all_play = re.findall(r']+class="episode-item"[^>]+href="(/play/\d+-(\d+)-(\d+)\.html)"[^>]*>(.*?)', html, re.DOTALL) + for href, sid, nid, link_html in all_play: + text = re.sub(r'<[^>]+>', '', link_html).strip() + if not text: + continue + if sid not in episodes_by_sid: + episodes_by_sid[sid] = [] + episodes_by_sid[sid].append(f'{text}${href}') + if sid not in seen_sids: + seen_sids.add(sid) + sids_in_order.append(sid) + + # 线路名称 + source_labels = [] + all_labels = re.findall(r'class="source-item-label"[^>]*>([^<]+)]+\.(m3u8|mp4)[^\s"\'<>]*', r.text) + if all_urls: + for url_match in all_urls: + u = url_match[0] if isinstance(url_match, tuple) else url_match + if 'index.m3u8' in u or 'video.m3u8' in u or '.mp4' in u: + video_url = u + break + if not video_url: + video_url = all_urls[0][0] if isinstance(all_urls[0], tuple) else all_urls[0] + + if video_url: + result['parse'] = 0 + result['url'] = video_url + result['jx'] = 0 + result['header'] = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36', + 'Referer': self.site + '/' + } + else: + result['parse'] = 1 + result['url'] = play_url + result['jx'] = 0 + result['header'] = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36', + 'Referer': self.site + '/' + } + except Exception as e: + print(f'playerContent error: {e}') + result['parse'] = 1 + result['url'] = id if id.startswith('http') else self.site + id + result['jx'] = 0 + result['header'] = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36', + 'Referer': self.site + '/' + } + return result + + def searchContent(self, key, quick, pg='1'): + result = {'list': [], 'parse': 0, 'jx': 0} + page = int(pg) if pg else 1 + try: + # 先访问搜索页获取token + search_url = f'{self.site}/search?k={quote(key)}' + r = self.session.get(search_url, timeout=15, verify=False) + r.encoding = 'utf-8' + t_match = re.search(r'name="t" value="([^"]+)"', r.text) + t = t_match.group(1) if t_match else '' + + if t: + url = f'{self.site}/search?k={quote(key)}&t={quote(t)}' + if page > 1: + url += f'&page={page}' + r = self.session.get(url, timeout=15, verify=False) + r.encoding = 'utf-8' + + doc = pq(r.text) + items = doc('.search-result-item') + for item in items.items(): + href = item.attr('href') or '' + vid = self.getVid(href) + if not vid: + continue + + # 标题 + title = '' + title_elem = item.find('.title') + if title_elem.length: + title = title_elem.text().strip() + if not title: + img = item.find('img') + if img.length: + title = img.attr('alt') or img.attr('title') or '' + title = title.strip() + + # 图片 + pic = '' + imgs = item.find('img') + for j in range(len(imgs)): + img = imgs.eq(j) + src = img.attr('data-original') or img.attr('src') or '' + if src and 'placeholder' not in src and 'logo_placeholder' not in src: + pic = src + break + if pic and pic.startswith('/'): + pic = 'https://vres.zyxpedu.com' + pic + + if title: + result['list'].append({ + 'vod_id': vid, + 'vod_name': title, + 'vod_pic': pic, + 'vod_remarks': '' + }) + except Exception as e: + print(f'searchContent error: {e}') + + result['page'] = page + result['pagecount'] = page + 1 if len(result['list']) > 0 else page + result['limit'] = len(result['list']) + result['total'] = len(result['list']) + return result + + def localProxy(self, params): + return [200, "video/MP2T", {}, ""] + + def getVid(self, url): + if not url: + return '' + m = re.search(r'/detail/(\d+)\.html', url) + if m: + return m.group(1) + m = re.search(r'/play/(\d+)-', url) + if m: + return m.group(1) + return '' diff --git a/Ye-11X115490_PsyDuck4k/lib/皮皮虾.py b/tianjitop/llllo4k/py/ppx.py similarity index 100% rename from Ye-11X115490_PsyDuck4k/lib/皮皮虾.py rename to tianjitop/llllo4k/py/ppx.py diff --git a/tianjitop/llllo4k/py/vo.jar b/tianjitop/llllo4k/py/vo.jar new file mode 100644 index 00000000..b236febe Binary files /dev/null and b/tianjitop/llllo4k/py/vo.jar differ diff --git a/tianjitop/llllo4k/py/七猫.py b/tianjitop/llllo4k/py/七猫.py new file mode 100644 index 00000000..b86195e6 --- /dev/null +++ b/tianjitop/llllo4k/py/七猫.py @@ -0,0 +1,300 @@ +#coding=utf-8 +import sys +import re +import json +import html as html_module +import requests +sys.path.append('..') +from base.spider import Spider + +class Spider(Spider): + def __init__(self): + super().__init__() + self.site = 'https://www.qmao.net' + self.session = requests.Session() + self.ua = 'Mozilla/5.0 (Linux; Android 10; SM-G973F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36' + self.session.headers.update({'User-Agent': self.ua}) + self.cateManual = { + '电影': '1', + '电视剧': '2', + '动漫': '3', + '短剧': '4', + } + self._m = chr(0x661f) + chr(0x6cb3) + + def _clean(self, text): + if not text: + return '' + text = re.sub(r'<[^>]+>', '', text) + text = html_module.unescape(text) + text = text.replace('\xa0', ' ').replace(' ', ' ') + text = ' '.join(text.split()) + return text.strip() + + def _get(self, url): + try: + r = self.session.get(url, timeout=15, headers={'Referer': self.site}) + r.encoding = 'utf-8' + return r.text + except: + return '' + + def init(self, extend=''): + pass + + def getName(self): + return '七猫短剧' + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def homeContent(self, filter): + result = {'class': [], 'filters': {}, 'list': [], 'parse': 0, 'jx': 0} + for k, v in self.cateManual.items(): + result['class'].append({'type_id': str(v), 'type_name': k}) + return result + + def _extract_list(self, html): + videos = [] + seen = set() + for m in re.finditer(r'href="/voddetail/(\d+)\.html"', html): + vid = m.group(1) + if vid in seen: + continue + seen.add(vid) + snippet = html[m.start():m.start()+800] + # 标题:分类页 BrowseList,首页 FeaturedList,搜索页 MTagBookList + title = '' + tm = re.search(r'(BrowseList|FeaturedList|MTagBookList)_bookName[^>]*>(.*?)', snippet, re.DOTALL) + if tm: + title = self._clean(tm.group(2)) + if not title: + tm = re.search(r'title="([^"]*)"', snippet) + if tm: + title = self._clean(tm.group(1)) + # 封面 + pic = '' + pm = re.search(r'src="([^"]*\.(?:jpg|webp)[^"]*)"', snippet) + if pm: + pic = pm.group(1).strip() + if not pic.startswith('http'): + pic = self.site + pic + # 备注 + note = '' + nm = re.search(r'(BrowseList|FeaturedList)_(?:lastChapter|tagsBox)[^>]*>(.*?)]*>([^<]+)<', snippet) + if nm: + note = self._clean(nm.group(2)) + # 搜索页:从 img alt 获取集数 + if not note: + am = re.search(r'alt="([^"]*(?:集|完结)[^"]*)"', snippet) + if am: + note = self._clean(am.group(1)) + if title: + videos.append({ + 'vod_id': vid, + 'vod_name': title, + 'vod_pic': pic, + 'vod_remarks': note + }) + return videos + + def homeVideoContent(self): + result = {'list': [], 'parse': 0, 'jx': 0} + html = self._get(self.site) + if html: + result['list'] = self._extract_list(html) + return result + + def categoryContent(self, tid, pg, filter, extend): + result = {'list': [], 'parse': 0, 'jx': 0} + page = int(pg) if pg else 1 + url = f'{self.site}/vodtype/{tid}.html' + html = self._get(url) + if html: + result['list'] = self._extract_list(html) + result['page'] = page + result['pagecount'] = page + 1 if result['list'] else page + result['limit'] = len(result['list']) + result['total'] = len(result['list']) + return result + + def detailContent(self, ids): + result = {'list': [], 'parse': 0, 'jx': 0} + vid = '' + if isinstance(ids, list): + vid = ids[0] if ids else '' + elif ids: + vid = str(ids) + if not vid: + return result + + # 播放页获取 player_aaaa + play_html = self._get(f'{self.site}/vodplay/{vid}-1-1.html') + pd = {} + if play_html: + m = re.search(r'var player_aaaa=(\{[^<]+\})', play_html) + if m: + try: + pd = json.loads(m.group(1)) + except: + pass + + # 详情页 + detail_html = self._get(f'{self.site}/voddetail/{vid}.html') + + # 标题 + title = pd.get('vod_data', {}).get('vod_name', '') + if not title: + m2 = re.search(r'dramaDetail_bookName[^>]*>([^<]+)<', detail_html) + if m2: + title = self._clean(m2.group(1)) + if not title: + m2 = re.search(r'([^<]+)', detail_html) + if m2: + title = self._clean(re.sub(r'\s*[-–—].*$', '', m2.group(1))) + + # 封面 + pic = '' + m2 = re.search(r'dramaDetail_bookCover[^>]*>\s*<img[^>]*src="([^"]*)"', detail_html) + if m2: + pic = m2.group(1).strip() + if not pic.startswith('http'): + pic = self.site + pic + + # 标签/类型 + vod_class = '' + m2 = re.search(r'dramaDetail_tagsBox[^>]*>(.*?)</div>', detail_html, re.DOTALL) + if m2: + vod_class = self._clean(m2.group(1)) + if not vod_class: + vod_class = pd.get('vod_data', {}).get('vod_class', '') + + # 演员 + actor = pd.get('vod_data', {}).get('vod_actor', '') + + # 导演 + director = pd.get('vod_data', {}).get('vod_director', '') + if director: + director = self._m + '、' + director + else: + director = self._m + + # 播放列表 - 从播放页提取集数 + play_from = [] + play_url_list = [] + + if play_html: + # 提取所有线路 + tabs = re.findall(r'episode_tabBtn[^>]*data-sid="(\d+)"[^>]*data-from="([^"]*)"[^>]*>([^<]*)<', play_html) + if not tabs: + tabs = re.findall(r'episode_tabBtn[^>]*>([^<]*)<', play_html) + if tabs: + tabs = [(str(i+1), '', t) for i, t in enumerate(tabs)] + + # 提取集数链接 + episodes = [] + for em in re.finditer(r'<a[^>]*class="CatalogList_linkBox"[^>]*href="(/vodplay/[^"]+)"', play_html): + ep_href = em.group(1) + # 在 </a> 前提取集数编号 + snippet = play_html[em.start():em.start()+600] + num = re.search(r'>\s*(?:<[^>]*>\s*)*(\d+)\s*</a>', snippet) + if num: + ep_num = num.group(1).strip() + episodes.append(f'第{ep_num}集${ep_href}') + else: + episodes.append(f'播放${ep_href}') + # 备用:data-part + if not episodes: + for em in re.finditer(r'href="(/vodplay/[^"]+)"[^>]*data-part="([^"]*)"', play_html): + episodes.append(f'{em.group(2)}${em.group(1)}') + if not episodes: + for em in re.finditer(r'href="(/vodplay/[^"]+)"[^>]*>([^<]*)<', play_html): + if em.group(2).strip(): + episodes.append(f'{em.group(2).strip()}${em.group(1)}') + + if episodes: + line_name = tabs[0][2] if tabs else '默认' + if not line_name: + line_name = tabs[0][1] or '默认' + play_from.append(self._clean(line_name)) + play_url_list.append('#'.join(episodes)) + + # 如果没有从播放页拿到集数,用 player_aaaa 的 URL 直接播放 + if not play_from and pd: + url = pd.get('url', '') + from_flag = pd.get('from', '') + if url: + play_from.append(from_flag or '默认') + play_url_list.append(f'播放${url}') + + vod = { + 'vod_id': vid, + 'vod_name': title, + 'vod_pic': pic, + 'type_name': vod_class, + 'vod_year': '', + 'vod_area': '', + 'vod_remarks': '', + 'vod_actor': actor, + 'vod_director': director, + 'vod_content': '', + 'vod_play_from': '$$$'.join(play_from), + 'vod_play_url': '$$$'.join(play_url_list) + } + result['list'].append(vod) + return result + + def playerContent(self, flag, id, vipFlags): + result = {} + try: + play_url = id + if not play_url.startswith('http'): + play_url = self.site + play_url + + html = self._get(play_url) + m = re.search(r'var player_aaaa=(\{[^<]+\})', html) + if m: + pd = json.loads(m.group(1)) + url = pd.get('url', '') + if url: + result['parse'] = 0 + result['url'] = url + result['jx'] = 0 + result['header'] = { + 'User-Agent': self.ua, + 'Referer': self.site + '/' + } + return result + + result['parse'] = 1 + result['url'] = play_url + result['jx'] = 0 + result['header'] = { + 'User-Agent': self.ua, + 'Referer': self.site + '/' + } + except Exception as e: + print(f'playerContent error: {e}') + + if not result: + result = {'parse': 1, 'url': '', 'jx': 0, 'header': {}} + return result + + def searchContent(self, key, quick, pg='1'): + result = {'list': [], 'parse': 0, 'jx': 0} + wd = requests.utils.quote(key) + url = f'{self.site}/vodsearch/-------------.html?wd={wd}' + html = self._get(url) + if html: + result['list'] = self._extract_list(html) + return result + + def localProxy(self, params): + return [200, "video/MP2T", {}, ""] diff --git a/tianjitop/llllo4k/py/两个BT.py b/tianjitop/llllo4k/py/两个BT.py new file mode 100644 index 00000000..876f4653 --- /dev/null +++ b/tianjitop/llllo4k/py/两个BT.py @@ -0,0 +1,387 @@ +import sys +import urllib.parse +import re +sys.path.append('..') +from base.spider import Spider + +class Spider(Spider): + def getName(self): + return "两个BT影视" + + def init(self, extend=""): + self.host = 'https://www.bttwo.life' + self.headers = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36', + 'Referer': self.host + } + # 预加载筛选ID映射 + self._filter_ids = None + + def isVideoFormat(self, url): + return False + + def manualVideoCheck(self): + return False + + def _load_filter_ids(self): + """加载筛选ID映射""" + if self._filter_ids is not None: + return + + print("[两个BT] 加载筛选ID映射...") + + # 默认映射(兜底) + self._filter_ids = { + 'areas': { + '全部': '', '美国': '5', '日本': '11', '韩国': '12', '中国大陆': '52', + '中国香港': '14', '中国台湾': '21', '法国': '6', '英国': '30', '加拿大': '32', + '德国': '18', '意大利': '19', '西班牙': '24', '俄罗斯': '16', '印度': '34', + '澳大利亚': '22', '泰国': '33', '其他': '78' + }, + 'types': { + '全部': '', '剧情': '1', '悬疑': '2', '恐怖': '3', '惊悚': '4', + '喜剧': '5', '爱情': '6', '犯罪': '9', '动作': '10', '动画': '11', + '奇幻': '12', '科幻': '14', '历史': '15', '战争': '16', '冒险': '18', + '家庭': '19', '纪录': '20', '传记': '28', '运动': '30', '武侠': '31' + }, + 'years': { + '全部': '', '2026': '1', '2025': '3', '2024': '4', '2023': '56', + '2022': '13', '2021': '2', '2020': '6', '2019': '8', '2018': '9', + '2010-2014': '11', '2000-2009': '12', '1990-1999': '13', '1980-1989': '14', + '1970-1979': '15', '1960-1969': '16', '1950-1959': '17', '1940-1949': '18', + '1930-1939': '19', '1920-1929': '20' + } + } + + # 尝试从网站动态获取(可选) + try: + html = self.fetch(f'{self.host}/filter?classify=3', headers=self.headers).text + + # 提取地区ID + area_matches = re.findall(r'href="\?classify=\d+&areas=(\d+)"[^>]*>([^<]+)</a>', html) + for vid, vn in area_matches: + name = vn.strip() + if name.lower() == 'unknown': + name = '其他' + self._filter_ids['areas'][name] = vid + + # 提取类型ID + type_matches = re.findall(r'href="\?classify=\d+&(?:areas=\d+&)?types=(\d+)"[^>]*>([^<]+)</a>', html) + for vid, vn in type_matches: + name = vn.strip() + self._filter_ids['types'][name] = vid + + # 提取年份ID + year_matches = re.findall(r'href="\?classify=\d+&(?:areas=\d+&)?years=(\d+)"[^>]*>([^<]+)</a>', html) + for vid, vn in year_matches: + name = vn.strip() + self._filter_ids['years'][name] = vid + + print(f"[两个BT] 筛选ID加载完成: 地区{len(self._filter_ids['areas'])}, 类型{len(self._filter_ids['types'])}, 年份{len(self._filter_ids['years'])}") + except Exception as e: + print(f"[两个BT] 动态加载筛选ID失败,使用默认映射: {e}") + + def homeContent(self, filter): + self._load_filter_ids() + result = {} + result['class'] = [ + {'type_id': '1', 'type_name': '电影'}, + {'type_id': '2', 'type_name': '电视剧'}, + {'type_id': '3', 'type_name': '动漫'} + ] + result['filters'] = self._get_filters() + return result + + def homeVideoContent(self): + try: + rsp = self.fetch(self.host, headers=self.headers) + doc = self.html(rsp.text) + return {'list': self._get_videos(doc)} + except Exception as e: + print(f'homeVideoContent 错误: {e}') + return {'list': []} + + def categoryContent(self, tid, pg, filter, extend): + try: + self._load_filter_ids() + + # 构建筛选参数(将中文转换为数字ID) + params = [] + + # classify参数:1=电影, 2=电视剧, 3=动漫 + classify_map = {'1': '1', '2': '2', '3': '3'} + classify = classify_map.get(tid, '1') + params.append(f"classify={classify}") + + # 地区筛选 + if extend.get('area'): + area_name = extend['area'] + area_id = self._filter_ids['areas'].get(area_name, '') + if area_id: + params.append(f"areas={area_id}") + + # 类型筛选 + if extend.get('type'): + type_name = extend['type'] + type_id = self._filter_ids['types'].get(type_name, '') + if type_id: + params.append(f"types={type_id}") + + # 年份筛选 + if extend.get('year'): + year_name = extend['year'] + year_id = self._filter_ids['years'].get(year_name, '') + if year_id: + params.append(f"years={year_id}") + + # 分页参数 + if str(pg) != '1': + params.append(f"page={pg}") + + # 构建URL + url = f"{self.host}/filter" + if params: + url += "?" + "&".join(params) + + print(f'[两个BT] 分类请求: {url}') + + rsp = self.fetch(url, headers=self.headers) + doc = self.html(rsp.text) + return { + 'list': self._get_videos(doc), + 'page': int(pg), + 'pagecount': 9999, + 'limit': 20 + } + except Exception as e: + print(f'categoryContent 错误: {e}') + return {'list': []} + + def detailContent(self, ids): + try: + vid = ids[0] + detail_url = f"{self.host}{vid}" if str(vid).startswith('/') else f"{self.host}/play/{vid}" + + rsp = self.fetch(detail_url, headers=self.headers) + doc = self.html(rsp.text) + + # 修复标题提取逻辑 - 按优先级尝试不同的选择器 + title = "未知" + + # 1. 首先尝试h1标题(最常见) + title_nodes = doc.xpath('//h1[contains(@class,"text-lg")]/text()') + if title_nodes and title_nodes[0].strip(): + title = title_nodes[0].strip() + else: + # 2. 尝试h2标题 + title_nodes = doc.xpath('//h2[contains(@class,"text-xl")]/text()') + if title_nodes and title_nodes[0].strip(): + title = title_nodes[0].strip() + else: + # 3. 尝试title标签 + title_nodes = doc.xpath('//title/text()') + if title_nodes and title_nodes[0].strip(): + title = title_nodes[0].strip() + # 清理title中的网站后缀 + title = re.sub(r'\s*-\s*两个BT.*$', '', title) + title = re.sub(r'\s*\|\s*两个BT.*$', '', title) + else: + # 4. 尝试meta标签 + meta_nodes = doc.xpath('//meta[@property="og:title"]/@content') + if meta_nodes and meta_nodes[0].strip(): + title = meta_nodes[0].strip() + + # 最终清理标题 + title = title.strip() + # 移除多余的空格和特殊字符 + title = re.sub(r'\s+', ' ', title) + # 移除常见的网站后缀 + title = re.sub(r'\s*-\s*两个BT.*$', '', title) + title = re.sub(r'\s*\|\s*两个BT.*$', '', title) + title = re.sub(r'\s*-\s*TwoBT.*$', '', title) + title = re.sub(r'\s*\|\s*TwoBT.*$', '', title) + + print(f'[两个BT] 提取标题: {title}') + + img_nodes = doc.xpath('//div[contains(@class,"movie-poster")]//img/@src | //div[contains(@class,"movie-poster")]//img/@data-src | //meta[@property="og:image"]/@content') + pic = "" + for img in img_nodes: + if "placeholder" not in img.lower(): + pic = img + break + if not pic and img_nodes: + pic = img_nodes[0] + + remarks_nodes = doc.xpath('//span[contains(text(),"共") and contains(text(),"集")]/text()') + remarks = remarks_nodes[0].strip() if remarks_nodes else "" + + director_nodes = doc.xpath('//div[text()="导演"]/following-sibling::div[1]/text()') + director = director_nodes[0].strip() if director_nodes else "" + + actor_nodes = doc.xpath('//div[text()="主演"]/following-sibling::div[1]/text()') + actor = actor_nodes[0].strip() if actor_nodes else "" + + content_nodes = doc.xpath('//h3[contains(text(),"剧情简介")]/parent::div/p/text()') + content = content_nodes[0].strip() if content_nodes else "" + + episodes = [] + + # 尝试缩小选择范围,优先寻找播放列表区块 + list_nodes = doc.xpath('//div[contains(@class, "episode")] | //div[contains(@class, "playlist")] | //div[contains(@class, "video-list")]') + + if list_nodes: + links = list_nodes[0].xpath('.//a[contains(@href, "/play/")] | .//a[contains(@class, "episode-link")]') + else: + links = doc.xpath('//a[contains(@class, "episode-link")] | //a[contains(@href, "/play/")]') + + seen_hrefs = set() + + # 提取当前视频的核心ID,用于二次校验,阻断无关剧集的链接 + core_id = "".join([c for c in str(vid) if c.isdigit()]) + if not core_id: + core_id = str(vid).split('/')[-1].split('-')[0].split('.')[0] + + for link in links: + href = link.xpath('./@href')[0] + + if href in seen_hrefs or not href.startswith('/play/'): + continue + + # 若提取到了核心ID且链接中不包含该ID,跳过(防止抓到推荐视频) + if core_id and core_id not in href: + continue + + seen_hrefs.add(href) + + # 直接提取标签内所有文本 + name_list = link.xpath('.//text()') + name = "".join([n.strip() for n in name_list if n.strip()]) + name = " ".join(name.split()) + + if not name: + name = link.xpath('./@data-episode')[0] if link.xpath('./@data-episode') else f"第{len(episodes)+1}集" + + episodes.append(f"{name}${href}") + + return { + 'list': [{ + 'vod_id': vid, + 'vod_name': title, + 'vod_pic': pic, + 'vod_remarks': remarks, + 'vod_director': director, + 'vod_actor': actor, + 'vod_content': content, + 'vod_play_from': '两个BT', + 'vod_play_url': '#'.join(episodes) if episodes else f"正片${detail_url.replace(self.host, '')}" + }] + } + except Exception as e: + print(f'detailContent 错误: {e}') + return {'list': []} + + def searchContent(self, key, quick, pg="1"): + try: + url = f"{self.host}/search?q={urllib.parse.quote(key)}" + if pg != "1": + url += f"&page={pg}" + rsp = self.fetch(url, headers=self.headers) + doc = self.html(rsp.text) + return { + 'list': self._get_search_videos(doc), + 'page': int(pg), + 'pagecount': 9999, + 'limit': 20 + } + except Exception as e: + print(f'searchContent 错误: {e}') + return {'list': []} + + def playerContent(self, flag, id, vipFlags): + # WASM 播放器直连 + play_url = id if id.startswith('http') else self.host + id + return {'parse': 1, 'url': play_url, 'header': self.headers} + + def localProxy(self, param): + return [200, "video/MP2T", ""] + + def _get_videos(self, doc): + videos = [] + nodes = doc.xpath('//div[@data-vod-id] | //a[contains(@href, "/play/")]/ancestor::div[contains(@class, "group")][1]') + seen_ids = set() + + for node in nodes: + v_id = "" + if node.xpath('./@data-vod-id'): + v_id = f"/play/{node.xpath('./@data-vod-id')[0]}" + else: + hrefs = node.xpath('.//a[contains(@href, "/play/")]/@href') + if hrefs: + v_id = hrefs[0] + + if not v_id or v_id in seen_ids: + continue + seen_ids.add(v_id) + + # 修复列表页标题提取 + name = "未知" + + # 1. 尝试h3标签 + name_nodes = node.xpath('.//h3/text()') + if name_nodes and name_nodes[0].strip(): + name = name_nodes[0].strip() + else: + # 2. 尝试a标签的title属性 + name_nodes = node.xpath('.//a[contains(@href, "/play/")]/@title') + if name_nodes and name_nodes[0].strip(): + name = name_nodes[0].strip() + else: + # 3. 尝试img的alt属性 + name_nodes = node.xpath('.//img/@alt') + if name_nodes and name_nodes[0].strip(): + name = name_nodes[0].strip() + + # 清理名称 + name = re.sub(r'\s+', ' ', name).strip() + + img_nodes = node.xpath('.//img/@src | .//img/@data-src | .//img/@data-original') + v_pic = "" + for img in img_nodes: + if "placeholder" not in img.lower(): + v_pic = img + break + if not v_pic and img_nodes: + v_pic = img_nodes[0] + + remarks_nodes = node.xpath('.//span[contains(@class,"text-text-secondary")]/text() | .//span[contains(text(),"更新")]/text() | .//span[contains(@class,"bg-gradient-to-r")]/text() | .//div[contains(@class,"text-green-500")]/text()') + v_remarks = remarks_nodes[0].strip().replace('更新', '') if remarks_nodes else "" + + videos.append({ + 'vod_id': v_id, + 'vod_name': name, + 'vod_pic': v_pic, + 'vod_remarks': v_remarks + }) + return videos + + def _get_search_videos(self, doc): + return self._get_videos(doc) + + def _get_filters(self): + """生成筛选器配置(使用中文名称,但实际会使用数字ID)""" + # 从映射中提取选项 + areas = [{'n': k, 'v': k} for k in self._filter_ids['areas'].keys()] + types = [{'n': k, 'v': k} for k in self._filter_ids['types'].keys()] + years = [{'n': k, 'v': k} for k in self._filter_ids['years'].keys()] + + # 排序:全部放在第一位 + areas.sort(key=lambda x: (x['v'] != '', x['n'])) + types.sort(key=lambda x: (x['v'] != '', x['n'])) + years.sort(key=lambda x: (x['v'] != '', x['n'])) + + base = [ + {'key': 'area', 'name': '地区', 'value': areas}, + {'key': 'type', 'name': '类型', 'value': types}, + {'key': 'year', 'name': '年份', 'value': years} + ] + return {'1': base, '2': base, '3': base} diff --git a/tianjitop/llllo4k/py/华数.py b/tianjitop/llllo4k/py/华数.py new file mode 100644 index 00000000..9348d467 --- /dev/null +++ b/tianjitop/llllo4k/py/华数.py @@ -0,0 +1,546 @@ +# coding=utf-8 +# !/usr/bin/python + +""" + +作者 精彩一瞬间 内容均从互联网收集而来 仅供交流学习使用 严禁用于商业用途 请于24小时内删除 + ====================Diudiumiao==================== + +""" + +from Crypto.Util.Padding import unpad +from Crypto.Util.Padding import pad +from urllib.parse import urlparse +from urllib.parse import unquote +from Crypto.Cipher import ARC4 +from urllib.parse import quote +from base.spider import Spider +from Crypto.Cipher import AES +from datetime import datetime +from bs4 import BeautifulSoup +from base64 import b64decode +import concurrent.futures +import urllib.request +import urllib.parse +import datetime +import binascii +import requests +import hashlib +import base64 +import json +import time +import hmac +import sys +import re +import os + +sys.path.append('..') + +xurl = "https://www.wasu.cn" + +headerx = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36' + } + +headerz = { + 'accept': '*/*', + 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6', + 'cache-control': 'no-cache', + 'origin': xurl, + 'pragma': 'no-cache', + 'priority': 'u=1, i', + 'referer': xurl, + 'sec-ch-ua': '"Microsoft Edge";v="143", "Chromium";v="143", "Not A(Brand";v="24"', + 'sec-ch-ua-mobile': '?0', + 'sec-ch-ua-platform': '"Windows"', + 'sec-fetch-dest': 'empty', + 'sec-fetch-mode': 'cors', + 'sec-fetch-site': 'cross-site', + 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0', + } + +class Spider(Spider): + + def getName(self): + return "精彩" + + def init(self, extend): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def homeVideoContent(self): + pass + + def homeContent(self, filter): + result = {} + result = {"class": [{"type_id": "961", "type_name": "电影"}, + {"type_id": "962", "type_name": "剧集"}, + {"type_id": "963", "type_name": "少儿"}, + {"type_id": "965", "type_name": "栏目"}, + {"type_id": "966", "type_name": "新闻"}], + "list": [], + "filters": {"961": [{"key": "地区", + "name": "地区", + "value": [{"n": "全部", "v": ""}, + {"n": "内地", "v": "内地"}, + {"n": "港台", "v": "港台"}, + {"n": "欧美", "v": "欧美"}, + {"n": "日韩", "v": "日韩"}, + {"n": "泰国", "v": "泰国"}, + {"n": "其他", "v": "其他"}]}, + {"key": "类型", + "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": "武侠"}]}, + {"key": "年代", + "name": "年代", + "value": [{"n": "全部", "v": ""}, + {"n": "2025", "v": "2025"}, + {"n": "2024", "v": "2024"}, + {"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"}]}], + "962": [{"key": "地区", + "name": "地区", + "value": [{"n": "全部", "v": ""}, + {"n": "内地", "v": "内地"}, + {"n": "港台", "v": "港台"}, + {"n": "日韩", "v": "日韩"}, + {"n": "欧美", "v": "欧美"}, + {"n": "泰国", "v": "泰国"}, + {"n": "其他", "v": "其他"}]}, + {"key": "类型", + "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": "历史"}]}, + {"key": "年代", + "name": "年代", + "value": [{"n": "全部", "v": ""}, + {"n": "2025", "v": "2025"}, + {"n": "2024", "v": "2024"}, + {"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"}]}], + "963": [{"key": "地区", + "name": "地区", + "value": [{"n": "全部", "v": ""}, + {"n": "内地", "v": "内地"}, + {"n": "日韩", "v": "日韩"}, + {"n": "欧美", "v": "欧美"}, + {"n": "港台", "v": "港台"}, + {"n": "其他", "v": "其他"}]}, + {"key": "类型", + "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": "童话"}, + {"n": "推理", "v": "推理"}, + {"n": "怀旧", "v": "怀旧"}, + {"n": "宠物", "v": "宠物"}, + {"n": "舞蹈", "v": "舞蹈"}]}, + {"key": "年代", + "name": "年代", + "value": [{"n": "全部", "v": ""}, + {"n": "2025", "v": "2025"}, + {"n": "2024", "v": "2024"}, + {"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"}]}], + "965": [{"key": "地区", + "name": "地区", + "value": [{"n": "全部", "v": ""}, + {"n": "内地", "v": "内地"}, + {"n": "欧美", "v": "欧美"}]}, + {"key": "类型", + "name": "类型", + "value": [{"n": "全部", "v": ""}, + {"n": "文化", "v": "文化"}, + {"n": "纪实", "v": "纪实"}, + {"n": "访谈", "v": "访谈"}, + {"n": "历史", "v": "历史"}, + {"n": "美食", "v": "美食"}, + {"n": "旅游", "v": "旅游"}, + {"n": "时尚", "v": "时尚"}, + {"n": "情感", "v": "情感"}, + {"n": "生活", "v": "生活"}, + {"n": "真人秀", "v": "真人秀"}]}, + {"key": "年代", + "name": "年代", + "value": [{"n": "全部", "v": ""}, + {"n": "2025", "v": "2025"}, + {"n": "2024", "v": "2024"}, + {"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"}]}], + "966": [{"key": "类型", + "name": "类型", + "value": [{"n": "全部", "v": ""}, + {"n": "国内视野", "v": "国内视野"}, + {"n": "国际纵览", "v": "国际纵览"}, + {"n": "军事话题", "v": "军事话题"}, + {"n": "社会百态", "v": "社会百态"}, + {"n": "央视频", "v": "央视频"}]}]}} + return result + + def generate_x_sign(self, secret_b64): + secret_key = self.decode_secret_key(secret_b64) + data = self.get_data_string() + signature = self.compute_signature(secret_key, data) + x_sign = self.encode_signature(signature) + return x_sign + + def decode_secret_key(self, secret_b64): + return base64.b64decode(secret_b64) + + def get_data_string(self): + return "{}" + + def compute_signature(self, secret_key, data): + return hmac.new(secret_key, data.encode('utf-8'), hashlib.sha256).digest() + + def encode_signature(self, signature): + return base64.b64encode(signature).decode('utf-8') + + def get_current_app_key(self, xurl, headerx): + resp = self.fetch_index_page(xurl, headerx) + js_path = self.extract_js_path(resp.text) + js_url = f"{xurl}{js_path}" + js_content = self.fetch_js_content(js_url, headerx) + target_key_b64 = self.extract_target_key(js_content) + return target_key_b64 + + def fetch_index_page(self, xurl, headerx): + resp = requests.get(xurl, headers=headerx) + resp.raise_for_status() + return resp + + def extract_js_path(self, html_content): + js_path_pattern = r'src="(/[\d\.]+/assets/js/index-[\w\.-]+\.js)"' + match = re.search(js_path_pattern, html_content) + return match.group(1) + + def fetch_js_content(self, js_url, headerx): + js_resp = requests.get(js_url, headers=headerx) + js_resp.raise_for_status() + return js_resp.text + + def extract_target_key(self, js_content): + key_pattern = r'const \w+="([^"]+)",\w+="([^"]+)",\w+="([^"]+)";' + key_match = re.search(key_pattern, js_content) + return key_match.group(2) + + def get_headers(self, sign1, xurl): + return { + 'accept': 'application/json, text/plain, */*', + 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6', + 'cache-control': 'no-cache', + 'launchchannel': 'web_channel', + 'origin': xurl, + 'pragma': 'no-cache', + 'priority': 'u=1, i', + 'referer': xurl, + 'sec-ch-ua': '"Microsoft Edge";v="143", "Chromium";v="143", "Not A(Brand";v="24"', + 'sec-ch-ua-mobile': '?0', + 'sec-ch-ua-platform': '"Windows"', + 'sec-fetch-dest': 'empty', + 'sec-fetch-mode': 'cors', + 'sec-fetch-site': 'cross-site', + 'siteid': '1000101', + 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0', + 'x-sign': sign1, + } + + def categoryContent(self, cid, pg, filter, ext): + secret_b64 = self.get_current_app_key(xurl, headerx) + sign1 = self.generate_x_sign(secret_b64) + page = self.get_page_number(pg) + NdType, DqType, LxType = self.extract_filter_types(ext) + headers = self.get_headers(sign1, xurl) + params = self.build_category_params(cid, page, NdType, DqType, LxType) + data = self.fetch_category_data(params, headers) + videos = self.parse_category_videos(data) + return self.build_category_result(videos, pg) + + def get_page_number(self, pg): + return int(pg) if pg else 1 + + def extract_filter_types(self, ext): + NdType = ext.get('年代', '全部') + DqType = ext.get('地区', '全部') + LxType = ext.get('类型', '全部') + return NdType, DqType, LxType + + def build_category_params(self, cid, page, NdType, DqType, LxType): + return {'functionName': 'getNewsSearchedByCondition','nodeId': cid,'nodeTag': LxType,'yearTag': NdType,'countryTag': DqType,'orderType': '0','pageSize': '40','page': page,'keyword': '','siteId': '1000101',} + + def fetch_category_data(self, params, headers): + detail = requests.get('https://ups.5g.wasu.tv/rmp-user-suggest/1000101/hzhs/searchServlet', params=params,headers=headers) + detail.encoding = "utf-8" + return detail.json() + + def parse_category_videos(self, data): + videos = [] + for vod in data['data']: + videos.append(self.parse_category_video(vod)) + return videos + + def parse_category_video(self, vod): + return {"vod_id": f"{vod['nodeId']}@{vod['newsId']}","vod_name": vod['title'],"vod_pic": vod['hPic'],"vod_year": vod.get('pubTime', '暂无日期'),"vod_remarks": vod.get('episodeDesc', '暂无备注')} + + def build_category_result(self, videos, pg): + result = {'list': videos} + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + did = ids[0] + secret_b64 = self.get_current_app_key(xurl, headerx) + sign1 = self.generate_x_sign(secret_b64) + fenge = did.split("@") + headers = self.get_headers(sign1, xurl) + params = self.build_detail_params(fenge) + data = self.fetch_detail_data(params, headers) + content = self.build_content(data) + director = self.extract_detail_field(data, 'director') + actor = self.extract_detail_field(data, 'actor') + remarks = self.extract_detail_field(data, 'episodeDesc') + year = self.extract_detail_field(data, 'pubTime') + area = self.extract_detail_field(data, 'countryTag') + bofang = self.build_play_url(data) + videos = [self.build_video_data(did, director, actor, remarks, year, area, content, bofang)] + return self.build_result(videos) + + def build_detail_params(self, fenge): + return {'siteId': '1000101', 'functionName': 'getCurrentNews', 'nodeId': fenge[0], 'newsId': fenge[1],'platform': 'web',} + + def fetch_detail_data(self, params, headers): + detail = requests.get('https://mcspapp.5g.wasu.tv/bvradio_app/hzhs/newsServlet', params=params, headers=headers) + detail.encoding = "utf-8" + return detail.json() + + def build_content(self, data): + return '介绍剧情📢' + data.get('data', {}).get('newsAbstract', '') + + def extract_detail_field(self, data, field_name): + return data.get('data', {}).get(field_name, '') + + def build_play_url(self, data): + bofang = '' + for vod in data['data']['vodList']: + name = vod['title'] + if len(vod['fileList']) > 1: + id = vod['fileList'][1]['playUrl'] + else: + id = vod['fileList'][0]['playUrl'] + bofang += name + '$' + id + '#' + return bofang[:-1] + + def build_video_data(self, did, director, actor, remarks, year, area, content, bofang): + return {"vod_id": did, "vod_director": director, "vod_actor": actor, "vod_remarks": remarks, "vod_year": year, "vod_area": area, "vod_content": content, "vod_play_from": "华数专线", "vod_play_url": bofang} + + def build_result(self, videos): + result = {} + result['list'] = videos + return result + + def get_x_sign_for_post(self, secret_b64, playUrl): + secret_key = self.decode_secret_key(secret_b64) + payload_dict = self.build_payload_dict(playUrl) + data_string = self.serialize_payload(payload_dict) + signature = self.compute_hmac_signature(secret_key, data_string) + x_sign = self.encode_signature(signature) + return x_sign + + def decode_secret_key(self, secret_b64): + return base64.b64decode(secret_b64) + + def build_payload_dict(self, playUrl): + return {"playUrl": playUrl, "platform": "web"} + + def serialize_payload(self, payload_dict): + return json.dumps(payload_dict, separators=(',', ':'), ensure_ascii=False) + + def compute_hmac_signature(self, secret_key, data_string): + return hmac.new(secret_key, data_string.encode('utf-8'), hashlib.sha256).digest() + + def encode_signature(self, signature): + return base64.b64encode(signature).decode('utf-8') + + def playerContent(self, flag, id, vipFlags): + secret_b64 = self.get_current_app_key(xurl, headerx) + id = self.normalize_play_url(id) + sign2 = self.get_x_sign_for_post(secret_b64, id) + headers = self.get_headers(sign2, xurl) + json_data = self.build_request_json(id) + result = self.post_play_url_request(headers, json_data) + play_url = result['data']['playUrl'] + return self.build_player_result(play_url) + + def normalize_play_url(self, id): + return id.replace('.mp4', '/playlist.m3u8') + + def build_request_json(self, playUrl): + return {'playUrl': playUrl, 'platform': 'web', } + + def post_play_url_request(self, headers, json_data): + response = requests.post('https://mcspapp.5g.wasu.tv/thirdApiFile/file/getPlayUrl', headers=headers, json=json_data) + return response.json() + + def build_player_result(self, play_url): + result = {} + result["parse"] = 0 + result["playUrl"] = '' + result["url"] = play_url + result["header"] = headerz + return result + + def searchContentPage(self, key, quick, pg): + page = self.get_page_number(pg) + secret_b64 = self.get_current_app_key(xurl, headerx) + sign1 = self.generate_x_sign(secret_b64) + headers = self.get_headers(sign1, xurl) + params = self.build_search_params(key, page) + data = self.fetch_search_data(params, headers) + videos = self.parse_search_videos(data) + return self.build_search_result(videos, pg) + + def get_page_number(self, pg): + return int(pg) if pg else 1 + + def build_search_params(self, key, page): + return {'functionName': 'getNewsSearched', 'searchNewsType': '3,4,5', 'keyword': key, 'pageSize': 10, 'page': page, 'siteId': 1000101} + + def fetch_search_data(self, params, headers): + detail = requests.get("https://ups.5g.wasu.tv/rmp-user-suggest/1000101/hzhs/searchServlet", params=params, headers=headers) + detail.encoding = "utf-8" + return detail.json() + + def parse_search_videos(self, data): + videos = [] + for vod in data['data']: + videos.append(self.parse_search_video(vod)) + return videos + + def parse_search_video(self, vod): + return {"vod_id": f"{vod['nodeId']}@{vod['newsId']}", "vod_name": vod['title'], "vod_pic": vod['hPic'], "vod_year": vod.get('pubTime', '暂无日期'), "vod_remarks": vod.get('episodeDesc', '暂无备注')} + + def build_search_result(self, videos, pg): + result = {'list': videos} + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def searchContent(self, key, quick, pg="1"): + return self.searchContentPage(key, quick, '1') + + def localProxy(self, params): + if params['type'] == "m3u8": + return self.proxyM3u8(params) + elif params['type'] == "media": + return self.proxyMedia(params) + elif params['type'] == "ts": + return self.proxyTs(params) + return None + + + + + + + + + + diff --git a/tianjitop/llllo4k/py/大众.py b/tianjitop/llllo4k/py/大众.py new file mode 100644 index 00000000..a5729abb --- /dev/null +++ b/tianjitop/llllo4k/py/大众.py @@ -0,0 +1,491 @@ +#coding=utf-8 +import sys +import re +import json +import requests +sys.path.append('..') +from base.spider import Spider + + +class Spider(Spider): + + def __init__(self): + super().__init__() + self.site = 'https://www.dazhongs.com' + self.session = requests.Session() + self.session.headers.update({ + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36', + 'Referer': 'https://www.dazhongs.com/' + }) + self.cateManual = { + '电影': '1', + '电视剧': '2', + '综艺': '3', + '动漫': '4', + '短剧': '30', + } + + def init(self, extend=''): + pass + + def getName(self): + return '大众影视' + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def _clean(self, text): + if not text: + return '' + text = re.sub(r'<[^>]+>', '', text) + text = text.replace(' ', ' ').replace('&', '&').replace('\u3000', ' ') + text = ' '.join(text.split()) + return text.strip() + + def _get(self, url): + try: + r = self.session.get(url, timeout=15) + r.encoding = 'utf-8' + return r.text + except Exception as e: + print(f'_get error: {e}') + return '' + + def _getVid(self, url): + if not url: + return '' + m = re.search(r'/voddetail/(\d+)\.html', url) + if m: + return m.group(1) + m = re.search(r'/vodplay/(\d+)-', url) + if m: + return m.group(1) + return '' + + def _fixUrl(self, url): + if not url: + return '' + url = url.replace('&', '&') + if url.startswith('//'): + return 'https:' + url + if url.startswith('/'): + return self.site + url + if not url.startswith('http'): + return self.site + '/' + url + return url + + def homeContent(self, filter): + result = {'class': [], 'filters': {}, 'list': [], 'parse': 0, 'jx': 0} + for k, v in self.cateManual.items(): + result['class'].append({'type_id': str(v), 'type_name': k}) + return result + + def homeVideoContent(self): + videos = [] + try: + html = self._get(self.site) + if not html: + return {'list': videos, 'parse': 0, 'jx': 0} + seen = set() + # 首页列表项: <li class="vodlist_item">...</li> + for m in re.finditer(r'<li\s+class="vodlist_item[^"]*"[^>]*>(.*?)</li>', html, re.DOTALL): + block = m.group(1) + # 标题和链接 + tm = re.search(r'href="(/voddetail/\d+\.html)"[^>]*title="([^"]*)"', block) + if not tm: + continue + href = tm.group(1) + title = tm.group(2) + vid = self._getVid(href) + if not vid or vid in seen: + continue + seen.add(vid) + # 封面 + pic = '' + pm = re.search(r'data-original="([^"]+)"', block) + if pm: + pic = self._fixUrl(pm.group(1)) + # 备注 + note = '' + nm = re.search(r'class="pic_text[^"]*"[^>]*>([^<]*)<', block) + if nm: + note = nm.group(1).strip() + if title: + videos.append({ + 'vod_id': vid, + 'vod_name': title, + 'vod_pic': pic, + 'vod_remarks': note + }) + except Exception as e: + print(f'homeVideoContent error: {e}') + return {'list': videos, 'parse': 0, 'jx': 0} + + def categoryContent(self, tid, pg, filter, extend): + result = {'list': [], 'parse': 0, 'jx': 0} + page = int(pg) if pg else 1 + try: + if page == 1: + url = f'{self.site}/vodtype/{tid}.html' + else: + url = f'{self.site}/vodtype/{tid}-{page}.html' + + html = self._get(url) + if not html: + return result + seen = set() + for m in re.finditer(r'<li\s+class="vodlist_item[^"]*"[^>]*>(.*?)</li>', html, re.DOTALL): + block = m.group(1) + tm = re.search(r'href="(/voddetail/\d+\.html)"[^>]*title="([^"]*)"', block) + if not tm: + continue + href = tm.group(1) + title = tm.group(2) + vid = self._getVid(href) + if not vid or vid in seen: + continue + seen.add(vid) + pic = '' + pm = re.search(r'data-original="([^"]+)"', block) + if pm: + pic = self._fixUrl(pm.group(1)) + note = '' + nm = re.search(r'class="pic_text[^"]*"[^>]*>([^<]*)<', block) + if nm: + note = nm.group(1).strip() + if title: + result['list'].append({ + 'vod_id': vid, + 'vod_name': title, + 'vod_pic': pic, + 'vod_remarks': note + }) + except Exception as e: + print(f'categoryContent error: {e}') + + result['page'] = page + result['pagecount'] = page + 1 if len(result['list']) > 0 else page + result['limit'] = len(result['list']) + result['total'] = len(result['list']) + return result + + def detailContent(self, ids): + result = {'list': [], 'parse': 0, 'jx': 0} + vid = ids[0] if ids else '' + if not vid: + return result + try: + html = self._get(f'{self.site}/voddetail/{vid}.html') + if not html: + return result + + # 标题 + title = '' + tm = re.search(r'<h2\s+class="title[^"]*"[^>]*>([^<]+)<', html) + if tm: + title = self._clean(tm.group(1)) + if not title: + tm = re.search(r'<title>([^<]+)', html) + if tm: + title = self._clean(tm.group(1)) + + # 封面 + pic = '' + pm = re.search(r'class="vodlist_thumb[^"]*"[^>]*data-original="([^"]+)"', html) + if pm: + pic = self._fixUrl(pm.group(1)) + + # 备注(状态) + remarks = '' + rm = re.search(r'class="data_style[^"]*"[^>]*>([^<]*)<', html) + if rm: + remarks = rm.group(1).strip() + + # 简介 + desc = '' + dm = re.search(r'class="desc[^"]*"[^>]*>(.*?)</li>', html, re.DOTALL) + if dm: + desc = self._clean(dm.group(1)) + desc = re.sub(r'^简介:\s*', '', desc).strip() + if not desc: + dm2 = re.search(r'<meta\s+name="description"\s+content="([^"]*)"', html) + if dm2: + desc = dm2.group(1).strip() + + # 年份/地区/类型/主演/导演 + vod_year = '' + vod_area = '' + type_name = '' + vod_actor = '' + vod_director = '' + + data_items = re.findall(r'<li\s+class="data[^"]*"[^>]*>(.*?)</li>', html, re.DOTALL) + if len(data_items) >= 1: + first = data_items[0] + ym = re.search(r'年份:</span><a[^>]*>([^<]+)', first) + if ym: + vod_year = ym.group(1).strip() + am = re.search(r'地区:</span><a[^>]*>([^<]+)', first) + if am: + vod_area = am.group(1).strip() + tm2 = re.search(r'类型:</span><a[^>]*>([^<]+)', first) + if tm2: + type_name = tm2.group(1).strip() + if len(data_items) >= 3: + actor_block = data_items[2] + actor_m = re.search(r'主演:(.*)', actor_block, re.DOTALL) + if actor_m: + vod_actor = self._clean(actor_m.group(1)) + if len(data_items) >= 4: + dir_block = data_items[3] + dir_m = re.search(r'导演:(.*)', dir_block, re.DOTALL) + if dir_m: + vod_director = self._clean(dir_m.group(1)) + + # 线路和播放列表 + play_from = [] + play_url = [] + + # 线路名称: #NumTab 下的 <a alt="线路名"> + tab_block = re.search(r'id="NumTab"[^>]*>(.*?)</div>', html, re.DOTALL) + tabs = [] + if tab_block: + tabs = re.findall(r'<a[^>]*alt="([^"]*)"[^>]*>', tab_block.group(1)) + + # 播放列表: 每个 .play_list_box 内的 content_playlist + panels = re.findall(r'class="play_list_box[^"]*"[^>]*>(.*?)</div>\s*</div>', html, re.DOTALL) + + for i, tab_name in enumerate(tabs): + play_from.append(tab_name) + episodes = [] + if i < len(panels): + for em in re.finditer(r'<a[^>]*href="(/vodplay/[^"]+)"[^>]*>([^<]+)<', panels[i]): + ep_href = em.group(1) + ep_name = em.group(2).strip() + if ep_name and ep_href: + episodes.append(f'{ep_name}${ep_href}') + play_url.append('#'.join(episodes)) + + # 兜底: 如果没找到线路tab但有播放列表 (单线路情况) + if not tabs and panels: + play_from.append('默认线路') + episodes = [] + for em in re.finditer(r'<a[^>]*href="(/vodplay/[^"]+)"[^>]*>([^<]+)<', panels[0]): + ep_href = em.group(1) + ep_name = em.group(2).strip() + if ep_name and ep_href: + episodes.append(f'{ep_name}${ep_href}') + play_url.append('#'.join(episodes)) + + vod = { + 'vod_id': vid, + 'vod_name': title, + 'vod_pic': pic, + 'type_name': type_name, + 'vod_year': vod_year, + 'vod_area': vod_area, + 'vod_remarks': remarks, + 'vod_actor': vod_actor, + 'vod_director': vod_director, + 'vod_content': desc, + 'vod_play_from': '$$$'.join(play_from) if play_from else '', + 'vod_play_url': '$$$'.join(play_url) if play_url else '' + } + result['list'].append(vod) + except Exception as e: + print(f'detailContent error: {e}') + return result + + def playerContent(self, flag, id, vipFlags): + result = {} + danmaku = 'http://127.0.0.1:9978/proxy?do=diydanmu' + try: + play_url = id + if id and not id.startswith('http'): + play_url = self.site + id + + html = self._get(play_url) + + # 优先从 player_aaaa JSON 提取 m3u8 直链 + m = re.search(r'player_aaaa\s*=\s*(\{.+?\})\s*<', html) + if m: + try: + data = json.loads(m.group(1)) + m3u8 = data.get('url', '') + if m3u8 and '.m3u8' in m3u8: + result['parse'] = 0 + result['url'] = m3u8 + result['jx'] = 0 + result['header'] = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', + 'Referer': self.site + '/' + } + result['danmaku'] = danmaku + return result + except: + pass + + # 备用: 从页面找 m3u8 链接 + m = re.search(r'url["\s:]+(https?://[^"\s]*\.m3u8[^"\s]*)', html) + if m: + result['parse'] = 0 + result['url'] = m.group(1).replace('\\/', '/') + result['jx'] = 0 + result['header'] = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', + 'Referer': self.site + '/' + } + result['danmaku'] = danmaku + return result + + # 备用: iframe 嗅探 + m = re.search(r'<iframe[^>]+src="([^"]+)"', html) + if m: + result['parse'] = 1 + result['url'] = m.group(1) + result['jx'] = 0 + result['header'] = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', + 'Referer': self.site + '/' + } + result['danmaku'] = danmaku + else: + # 最终兜底: 嗅探模式 + result['parse'] = 1 + result['url'] = play_url + result['jx'] = 0 + result['header'] = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', + 'Referer': self.site + '/' + } + result['danmaku'] = danmaku + except Exception as e: + print(f'playerContent error: {e}') + result['parse'] = 1 + result['url'] = id + result['jx'] = 0 + result['header'] = {} + result['danmaku'] = danmaku + return result + + def searchContent(self, key, quick, pg='1'): + result = {'list': [], 'parse': 0, 'jx': 0} + page = int(pg) if pg else 1 + try: + url = f'{self.site}/vodsearch/-------------.html' + params = {'wd': key} + if page > 1: + params['page'] = page + + r = self.session.get(url, params=params, timeout=15) + r.encoding = 'utf-8' + html = r.text + if not html: + return result + seen = set() + # 搜索结果用 .searchlist_item + for m in re.finditer(r'<li\s+class="searchlist_item[^"]*"[^>]*>(.*?)</li>', html, re.DOTALL): + block = m.group(1) + tm = re.search(r'href="(/voddetail/\d+\.html)"[^>]*title="([^"]*)"', block) + if not tm: + continue + href = tm.group(1) + title = tm.group(2) + vid = self._getVid(href) + if not vid or vid in seen: + continue + seen.add(vid) + # 封面 + pic = '' + pm = re.search(r'data-original="([^"]+)"', block) + if pm: + pic = self._fixUrl(pm.group(1)) + # 备注 + note = '' + nm = re.search(r'class="pic_text[^"]*"[^>]*>([^<]*)<', block) + if nm: + note = nm.group(1).strip() + if title: + result['list'].append({ + 'vod_id': vid, + 'vod_name': title, + 'vod_pic': pic, + 'vod_remarks': note + }) + except Exception as e: + print(f'searchContent error: {e}') + return result + + def localProxy(self, params): + return [200, "video/MP2T", {}, ""] + + +if __name__ == '__main__': + spider = Spider() + + print('=' * 60) + print('测试 homeContent ...') + home = spider.homeContent(True) + print(f"分类数量: {len(home['class'])}") + for c in home['class']: + print(f" {c['type_id']}: {c['type_name']}") + + print() + print('=' * 60) + print('测试 homeVideoContent ...') + hv = spider.homeVideoContent() + print(f"首页列表数量: {len(hv['list'])}") + for item in hv['list'][:5]: + print(f" {item['vod_name']} | {item['vod_id']} | {item['vod_remarks']}") + + print() + print('=' * 60) + print('测试 categoryContent (电影, 第1页) ...') + cat = spider.categoryContent('1', '1', True, {}) + print(f"分类列表数量: {len(cat['list'])}") + for item in cat['list'][:3]: + print(f" {item['vod_name']} | {item['vod_id']}") + + print() + print('=' * 60) + print('测试 searchContent (家业) ...') + search = spider.searchContent('家业', False, '1') + print(f"搜索结果数量: {len(search['list'])}") + for item in search['list'][:3]: + print(f" {item['vod_name']} | {item['vod_id']}") + + print() + print('=' * 60) + test_id = '102577' + print(f'测试 detailContent (vod_id={test_id}) ...') + detail = spider.detailContent([test_id]) + if detail['list']: + info = detail['list'][0] + print(f" 标题: {info['vod_name']}") + print(f" 年份: {info['vod_year']}") + print(f" 地区: {info['vod_area']}") + print(f" 类型: {info['type_name']}") + print(f" 主演: {info['vod_actor']}") + print(f" 导演: {info['vod_director']}") + print(f" 备注: {info['vod_remarks']}") + print(f" 封面: {info['vod_pic']}") + print(f" 简介: {info['vod_content'][:80]}...") + print(f" 线路: {info['vod_play_from']}") + play_urls = info['vod_play_url'].split('$$$') + for i, pu in enumerate(play_urls): + eps = pu.split('#') + print(f" 线路{i+1}: 共{len(eps)}集, 前3集名: {[e.split('$')[0] for e in eps[:3]]}") + + print() + print('=' * 60) + print('测试 playerContent ...') + player = spider.playerContent('稳定线路①', f'/vodplay/102577-1-1.html', '') + print(f" parse: {player.get('parse')}") + print(f" url: {player.get('url', '')[:100]}...") + print(f" jx: {player.get('jx')}") + + print() + print('全部测试完成!') diff --git a/tianjitop/llllo4k/py/大马猴.py b/tianjitop/llllo4k/py/大马猴.py new file mode 100644 index 00000000..565f7460 --- /dev/null +++ b/tianjitop/llllo4k/py/大马猴.py @@ -0,0 +1,542 @@ +# -*- coding: utf-8 -*- +# 大马猴影视 - 整合 bubutv 线路解析逻辑,实现直接播放(无需外置解析) + +import sys +sys.path.append('..') + +import json +import re +import time +import random +import hashlib +from urllib.parse import urlencode, quote +from html.parser import HTMLParser +from base.spider import Spider + + +class _HTMLTextExtractor(HTMLParser): + def __init__(self): + super().__init__() + self._text = [] + + def handle_data(self, data): + self._text.append(data) + + def get_text(self): + return ''.join(self._text) + + +class Spider(Spider): + def __init__(self): + self.host = 'https://dmhyy.com' + self.classes = [ + {'type_id': '23', 'type_name': '电影'}, + {'type_id': '22', 'type_name': '剧集'}, + {'type_id': '24', 'type_name': '动漫'}, + {'type_id': '25', 'type_name': '综艺'}, + ] + self.web_sign = '' + self.x_client = 'YOUR_PUBLIC_CLIENT_ID' # 请替换为真实值 + self._app_device_id = '' + + def init(self, extend=''): + try: + if extend: + if isinstance(extend, dict): + ext = extend + else: + text = str(extend).strip() + ext = json.loads(text) if text.startswith('{') else {'site': text} + site = ext.get('site') or ext.get('host') or '' + if site: + self.host = str(site).split(',')[0].strip().rstrip('/') + self.web_sign = ext.get('web-sign') or ext.get('web_sign') or self.web_sign + self.x_client = ext.get('x-client') or ext.get('x_client') or self.x_client + except Exception: + pass + return None + + def _ensure_ready(self): + if not getattr(self, 'host', ''): + self.host = 'https://dmhyy.com' + self.host = self.host.rstrip('/') + + def getName(self): + return '大马猴影视' + + def destroy(self): + pass + + def isVideoFormat(self, url): + return bool(re.search(r'\.(m3u8|mp4|flv|mkv|avi)(\?|#|$|\s)', str(url or ''), re.I)) + + def manualVideoCheck(self): + return False + + def localProxy(self, param): + return None + + def _headers(self, referer=''): + self._ensure_ready() + headers = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36', + 'Accept': 'application/json, text/plain, */*', + 'Accept-Language': 'zh-CN,zh;q=0.9', + 'Referer': referer or (self.host + '/'), + 'x-client': self.x_client, + 'x-platform': 'web', + 'x-requested-with': 'XMLHttpRequest', + } + if getattr(self, 'web_sign', ''): + headers['web-sign'] = self.web_sign + return headers + + def _app_headers(self): + """生成 app 接口需要的签名头(与 bubutv 一致)""" + timestamp = str(int(time.time())) + nonce = ''.join([str(random.randint(0, 9)) for _ in range(3)]) + pkg = 'com.sunshine.tv' + ver = '4' + finger = 'SF-C3B2B41F6EFFFF9869176CF68F6790E8F07506FC88632C94B4F5F0430D5498CA' + sign_str = f"finger={finger}&id={pkg}&nonce={nonce}&sk=SK-thanks&time={timestamp}&v={ver}" + sign = hashlib.sha256(sign_str.encode()).hexdigest().upper() + + if not self._app_device_id or len(self._app_device_id) != 16: + self._app_device_id = ''.join([random.choice('0123456789abcdef') for _ in range(16)]) + + return { + 'User-Agent': 'okhttp/4.12.0', + 'Accept': 'application/json', + 'x-aid': pkg, + 'x-ave': ver, + 'x-time': timestamp, + 'x-nonc': nonce, + 'x-sign': sign, + 'x-device-id': self._app_device_id, + 'x-device-brand': 'vivo', + 'x-device-model': 'V2309A', + 'x-update-id': '0245861b-2ebf-5524-389d-f983830651ec' + } + + def _api_get(self, path, params=None, referer=''): + self._ensure_ready() + params = params or {} + qs = urlencode(params, doseq=True) + url = self.host + path + (('?' + qs) if qs else '') + try: + r = self.fetch(url, headers=self._headers(referer), timeout=12) + text = getattr(r, 'text', '') or getattr(r, 'content', b'') + if isinstance(text, bytes): + text = text.decode('utf-8', errors='ignore') + if not text: + return {} + return json.loads(text) + except Exception as e: + print('大马猴接口请求失败:', path, params, e) + return {} + + def _clean_text(self, s): + s = str(s or '') + s = re.sub(r'<[^>]+>', ' ', s) + s = s.replace(' ', ' ') + return re.sub(r'\s+', ' ', s).strip() + + def _html2text(self, html): + try: + p = _HTMLTextExtractor() + p.feed(str(html or '')) + return self._clean_text(p.get_text()) + except Exception: + return self._clean_text(html) + + def _as_list(self, data): + if isinstance(data, list): + return data + if isinstance(data, dict): + for k in ('data', 'list', 'items', 'records', 'rows', 'vod_list'): + v = data.get(k) + if isinstance(v, list): + return v + if isinstance(v, dict): + vv = self._as_list(v) + if vv: + return vv + return [] + + def _vod_item(self, item): + if not isinstance(item, dict): + return None + vid = item.get('vod_id') or item.get('id') or item.get('vodId') + name = item.get('vod_name') or item.get('name') or item.get('title') + if not vid or not name: + return None + area = item.get('vod_area', '') + cls = item.get('vod_class', '') + if isinstance(area, list): + area = ','.join([str(x) for x in area if x]) + if isinstance(cls, list): + cls = ','.join([str(x) for x in cls if x]) + return { + 'vod_id': str(vid), + 'vod_name': self._clean_text(name), + 'vod_pic': str(item.get('vod_pic') or item.get('pic') or item.get('cover') or ''), + 'vod_remarks': str(item.get('vod_remarks') or item.get('remarks') or item.get('vod_douban_score') or item.get('vod_year') or ''), + 'vod_year': str(item.get('vod_year') or ''), + 'type_name': self._clean_text(item.get('type_name') or cls or ''), + 'vod_area': self._clean_text(area), + } + + def _vod_list(self, data): + arr = self._as_list(data) + out = [] + seen = set() + for item in arr: + v = self._vod_item(item) + if not v: + continue + if v['vod_id'] in seen: + continue + seen.add(v['vod_id']) + out.append(v) + return out + + def _category_match(self, item, real_tid): + if not isinstance(item, dict): + return False + real_tid = str(real_tid) + item_tid = str(item.get('type_id') or item.get('typeId') or item.get('tid') or '') + if item_tid == real_tid: + return True + name = str(item.get('type_name') or '') + class_value = item.get('vod_class') or [] + if isinstance(class_value, list): + cls = ','.join([str(x) for x in class_value if x]) + else: + cls = str(class_value or '') + text = name + ',' + cls + if real_tid == '23': + return ('电影' in text or '动作片' in text or '剧情片' in text or '喜剧片' in text) and '电视剧' not in text + if real_tid == '22': + return any(k in text for k in ('剧集', '电视剧', '国产剧', '连续剧', '韩剧', '陆剧', '欧美剧', '日剧')) + if real_tid == '24': + return '动漫' in text or '动画' in text or '国产动漫' in text or '日韩动漫' in text + if real_tid == '25': + return '综艺' in text or '真人秀' in text + return True + + def _filter_items_by_category(self, data, real_tid): + arr = self._as_list(data) + return [x for x in arr if self._category_match(x, real_tid)] + + def homeContent(self, filter): + return {'class': self.classes} + + def homeVideoContent(self): + j = self._api_get('/api.php/web/filter/vod', { + 'type_id': '23', + 'page': '1', + 'sort': 'hits' + }, self.host + '/type/23') + return {'list': self._vod_list(j)} + + def categoryContent(self, tid, pg, filter, extend): + self._ensure_ready() + page = str(pg or '1') + sort = 'hits' + if isinstance(extend, dict): + sort = extend.get('sort') or extend.get('by') or sort + + tid_map = {'1': '23', '2': '22', '3': '24', '4': '25'} + real_tid = tid_map.get(str(tid), str(tid)) + j = self._api_get('/api.php/web/filter/vod', { + 'type_id': real_tid, + 'page': page, + 'sort': sort + }, self.host + '/type/' + real_tid) + + filtered_items = self._filter_items_by_category(j, real_tid) + + try: + cur_page = int(page) + except Exception: + cur_page = 1 + if len(filtered_items) < 8: + seen_ids = set(str(x.get('vod_id') or x.get('id') or '') for x in filtered_items if isinstance(x, dict)) + for extra_page in range(cur_page + 1, cur_page + 3): + jj = self._api_get('/api.php/web/filter/vod', { + 'type_id': real_tid, + 'page': str(extra_page), + 'sort': sort + }, self.host + '/type/' + real_tid) + for item in self._filter_items_by_category(jj, real_tid): + vid = str(item.get('vod_id') or item.get('id') or '') + if vid and vid not in seen_ids: + seen_ids.add(vid) + filtered_items.append(item) + if len(filtered_items) >= 24: + break + + videos = self._vod_list(filtered_items) + pagecount = 1 + total = len(videos) + limit = 24 + if isinstance(j, dict): + pagecount = int(j.get('pageCount') or j.get('pagecount') or (cur_page + 1 if videos else cur_page)) + total = int(j.get('total') or total) + limit = int(j.get('limit') or limit) + + return { + 'list': videos, + 'page': cur_page, + 'pagecount': pagecount, + 'limit': limit, + 'total': total + } + + def searchContent(self, key, quick, pg='1'): + self._ensure_ready() + wd = str(key or '').strip() + page = str(pg or '1') + if not wd: + return {'list': [], 'page': int(page)} + + paths = [ + ('/api.php/web/search/vod', {'wd': wd, 'page': page}), + ('/api.php/web/vod/search', {'wd': wd, 'page': page}), + ('/api.php/web/search', {'wd': wd, 'page': page}), + ('/api.php/web/filter/vod', {'keyword': wd, 'page': page, 'sort': 'hits'}), + ] + for path, params in paths: + j = self._api_get(path, params, self.host + '/search?keyword=' + quote(wd)) + videos = self._vod_list(j) + if videos: + return {'list': videos, 'page': int(page)} + return {'list': [], 'page': int(page)} + + def _first_detail(self, ids): + vid = str(ids[0] if isinstance(ids, list) else ids) + j = self._api_get('/api.php/web/vod/get_detail', {'vod_id': vid}, self.host + '/play/' + vid) + arr = self._as_list(j) + return (arr[0] if arr else {}), j + + def _aggregate_sources(self, vid): + paths = [ + '/api.php/web/internal/search_aggregate', + '/api.php/web/search_aggregate', + ] + for path in paths: + j = self._api_get(path, {'vod_id': str(vid)}, self.host + '/play/' + str(vid)) + arr = self._as_list(j) + if arr: + return arr + return [] + + # ---------- 线路构建(与 JS 版一致) ---------- + def detailContent(self, ids): + self._ensure_ready() + if not ids: + return {'list': []} + vid = str(ids[0]) + detail, raw = self._first_detail([vid]) + + if not detail: + agg = self._aggregate_sources(vid) + if agg: + detail = agg[0] + else: + return {'list': []} + + vodplayer = raw.get('vodplayer', []) if isinstance(raw, dict) else [] + + shows = [] + play_urls = [] + + # 1. 聚合接口的直链(优先,need_parse=0) + agg_sources = self._aggregate_sources(vid) + if agg_sources: + agg_sources.sort(key=lambda s: ( + 0 if re.search(r'\.(m3u8|mp4|flv)(\?|#|$|\s)', str(s.get('vod_play_url', '')), re.I) else 1, + s.get('site_name', '') + )) + for src in agg_sources[:4]: + play_url = str(src.get('vod_play_url', '')).strip() + if not play_url: + continue + need_parse = 0 # 聚合直链通常不需要解析 + site_name = src.get('site_name') or src.get('external_display_name') or '聚合线路' + encoded = f"1${site_name}@{need_parse}@{play_url}" + shows.append(site_name) + play_urls.append(encoded) + + # 2. 详情自带的线路 + pf = str(detail.get('vod_play_from', '') or '') + pu = str(detail.get('vod_play_url', '') or '') + if pf and pu: + froms = pf.split('$$$') + urls = pu.split('$$$') + for show_code, urls_str in zip(froms, urls): + need_parse = 1 + is_show = 0 + show_name = show_code + + for player in vodplayer: + if player.get('from') == show_code: + is_show = 1 + need_parse = int(player.get('decode_status', 1)) + if player.get('show', '').lower() != show_code.lower(): + show_name = f"{player['show']}\u2005({show_code})" + break + + if not is_show: + is_show = 1 + sample_url = urls_str.split('#')[0].split('$')[-1] if urls_str else '' + if sample_url.startswith('http') and self.isVideoFormat(sample_url): + need_parse = 0 + + if is_show: + episodes = [] + for url_item in urls_str.split('#'): + if '$' in url_item: + ep, raw_url = url_item.split('$', 1) + episodes.append(f"{ep}${show_code}@{need_parse}@{raw_url}") + if episodes: + play_urls.append('#'.join(episodes)) + shows.append(show_name) + + # 3. 如果没有线路,尝试用聚合接口的未处理项 + if not shows and agg_sources: + for src in agg_sources[:2]: + play_url = str(src.get('vod_play_url', '')).strip() + if play_url: + need_parse = 0 + name = src.get('site_name', '线路') + play_urls.append(f"1${name}@{need_parse}@{play_url}") + shows.append(name) + + area = detail.get('vod_area', '') + cls = detail.get('vod_class', '') + if isinstance(area, list): + area = ','.join([str(x) for x in area if x]) + if isinstance(cls, list): + cls = ','.join([str(x) for x in cls if x]) + + vod = { + 'vod_id': vid, + 'vod_name': self._clean_text(detail.get('vod_name') or ''), + 'vod_pic': str(detail.get('vod_pic') or ''), + 'vod_remarks': str(detail.get('vod_remarks') or ''), + 'type_name': self._clean_text(detail.get('type_name') or cls or ''), + 'vod_year': str(detail.get('vod_year') or ''), + 'vod_area': self._clean_text(area), + 'vod_actor': self._clean_text(detail.get('vod_actor') or ''), + 'vod_director': self._clean_text(detail.get('vod_director') or ''), + 'vod_content': self._html2text(detail.get('vod_content') or ''), + 'vod_play_from': '$$$'.join(shows), + 'vod_play_url': '$$$'.join(play_urls), + } + return {'list': [vod]} + + # ---------- 播放解析(使用 app 解码接口,实现直接播放) ---------- + def playerContent(self, flag, id, vipFlags): + self._ensure_ready() + url = str(id or '').strip() + if not url: + return {'parse': 0, 'url': ''} + + # 处理 @ 标记格式(集数$线路@need_parse@真实地址) + if '@' in url and not url.startswith('http'): + try: + parts = url.split('@', 2) + if len(parts) == 3: + play_from, need_parse, raw_url = parts + if need_parse == '0': + if self.isVideoFormat(raw_url) or raw_url.startswith('http'): + return { + 'parse': 0, 'jx': 0, + 'url': raw_url, + 'header': self._app_headers() + } + else: + return {'parse': 1, 'jx': 1, 'url': raw_url} + # need_parse == '1',尝试解码 + decoded = self._try_decode(raw_url, play_from) + if decoded: + return { + 'parse': 0, 'jx': 0, + 'url': decoded, + 'header': self._app_headers() + } + # 解码失败,若原地址可用则直接播,否则交壳解析 + if self.isVideoFormat(raw_url) or raw_url.startswith('http'): + return {'parse': 0, 'jx': 0, 'url': raw_url, + 'header': self._app_headers()} + else: + return {'parse': 1, 'jx': 1, 'url': raw_url} + except Exception: + pass + + # 旧格式直链直接播放 + if url.startswith('http') and self.isVideoFormat(url): + return { + 'parse': 0, 'jx': 0, + 'url': url, + 'header': self._app_headers() + } + + # 尝试旧版解码接口(web 方式) + decoded = self._try_decode(url, None) + if decoded: + return { + 'parse': 0, 'jx': 0, + 'url': decoded, + 'header': self._app_headers() + } + + # 腾讯/优酷等大站交给壳 + if re.search(r'(v\.qq\.com|youku\.com|iqiyi\.com|mgtv\.com|bilibili\.com)', url, re.I): + return {'parse': 1, 'jx': 1, 'url': url} + + return {'parse': 1, 'jx': 1, 'url': url} + + def _try_decode(self, raw_url, play_from=None): + """优先使用 app 解码接口,失败再尝试 web 接口""" + # ---- 1. app 解码接口(带签名)---- + if play_from: + try: + app_headers = self._app_headers() + app_url = f"{self.host}/api.php/app/decode/url/?url={quote(raw_url)}&vodFrom={play_from}" + r = self.fetch(app_url, headers=app_headers, timeout=10) + data = json.loads(r.text) if r.text else {} + link = data.get('data', '') + if isinstance(link, str) and link.startswith('http'): + return link + except Exception as e: + print(f'App解码失败: {e}') + + # ---- 2. web 解码接口(原有多参数尝试)---- + decode_tries = [ + {'url': raw_url}, + {'play_url': raw_url}, + {'vod_url': raw_url}, + ] + for params in decode_tries: + j = self._api_get('/api.php/web/decode/url', params, self.host + '/play') + link = self._extract_url(j) + if link: + return link + return None + + def _extract_url(self, resp_data): + """从解码响应中提取直链""" + if isinstance(resp_data, str): + return resp_data if resp_data.startswith('http') else None + if isinstance(resp_data, dict): + data = resp_data.get('data') + if isinstance(data, str): + return data if data.startswith('http') else None + if isinstance(data, dict): + url = data.get('url') or data.get('play_url') or data.get('playUrl') or '' + return url if url.startswith('http') else None + url = resp_data.get('url') or resp_data.get('play_url') or '' + return url if url.startswith('http') else None + return None \ No newline at end of file diff --git a/tianjitop/llllo4k/py/威武.py b/tianjitop/llllo4k/py/威武.py new file mode 100644 index 00000000..a0830b2d --- /dev/null +++ b/tianjitop/llllo4k/py/威武.py @@ -0,0 +1,187 @@ +# -*- coding: utf-8 -*- +# 本资源来源于互联网公开渠道,仅可用于个人学习及爬虫技术交流。 +# 严禁将其用于任何商业用途,下载后请于 24 小时内删除,搜索结果均来自源站,本人不承担任何责任。 +""" +{ + "key": "xxx", + "name": "xxx", + "type": 3, + "api": "./ApptoV5无加密.py", + "ext": "http://domain.com" +} +""" + +import re,sys,uuid +from base.spider import Spider +sys.path.append('..') + +class Spider(Spider): + host,config,local_uuid,parsing_config = '','','',[] + headers = { + 'User-Agent': "Dart/2.19 (dart:io)", + 'Accept-Encoding': "gzip", + 'appto-local-uuid': local_uuid + } + + def init(self, extend=''): + try: + host = extend.strip() + if not host.startswith('http'): + return {} + if not re.match(r'^https?://[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(:\d+)?/?$', host): + host_=self.fetch(host).json() + self.host = host_['domain'] + else: + self.host = host + self.local_uuid = str(uuid.uuid4()) + response = self.fetch(f'{self.host}/apptov5/v1/config/get?p=android&__platform=android', headers=self.headers).json() + config = response['data'] + self.config = config + parsing_conf = config['get_parsing']['lists'] + parsing_config = {} + for i in parsing_conf: + if len(i['config']) != 0: + label = [] + for j in i['config']: + if j['type'] == 'json': + label.append(j['label']) + parsing_config.update({i['key']:label}) + self.parsing_config = parsing_config + return None + except Exception as e: + print(f'初始化异常:{e}') + return {} + + def detailContent(self, ids): + response = self.fetch(f"{self.host}/apptov5/v1/vod/getVod?id={ids[0]}",headers=self.headers).json() + data3 = response['data'] + videos = [] + vod_play_url = '' + vod_play_from = '' + for i in data3['vod_play_list']: + play_url = '' + for j in i['urls']: + play_url += f"{j['name']}${i['player_info']['from']}@{j['url']}#" + vod_play_from += i['player_info']['show'] + '$$$' + vod_play_url += play_url.rstrip('#') + '$$$' + vod_play_url = vod_play_url.rstrip('$$$') + vod_play_from = vod_play_from.rstrip('$$$') + videos.append({ + 'vod_id': data3.get('vod_id'), + 'vod_name': data3.get('vod_name'), + 'vod_content': data3.get('vod_content'), + 'vod_remarks': data3.get('vod_remarks'), + 'vod_director': data3.get('vod_director'), + 'vod_actor': data3.get('vod_actor'), + 'vod_year': data3.get('vod_year'), + 'vod_area': data3.get('vod_area'), + 'vod_play_from': vod_play_from, + 'vod_play_url': vod_play_url + }) + return {'list': videos} + + def searchContent(self, key, quick, pg='1'): + url = f"{self.host}/apptov5/v1/search/lists?wd={key}&page={pg}&type=&__platform=android" + response = self.fetch(url, headers=self.headers).json() + data = response['data']['data'] + for i in data: + if i.get('vod_pic').startswith('mac://'): + i['vod_pic'] = i['vod_pic'].replace('mac://', 'http://', 1) + return {'list': data, 'page': pg, 'total': response['data']['total']} + + def playerContent(self, flag, id, vipflags): + default_ua = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1' + parsing_config = self.parsing_config + parts = id.split('@') + if len(parts) != 2: + return {'parse': 0, 'url': id, 'header': {'User-Agent': default_ua}} + playfrom, rawurl = parts + label_list = parsing_config.get(playfrom) + if not label_list: + return {'parse': 0, 'url': rawurl, 'header': {'User-Agent': default_ua}} + result = {'parse': 1, 'url': rawurl, 'header': {'User-Agent': default_ua}} + for label in label_list: + payload = { + 'play_url': rawurl, + 'label': label, + 'key': playfrom + } + try: + response = self.post( + f"{self.host}/apptov5/v1/parsing/proxy?__platform=android", + data=payload, + headers=self.headers + ).json() + except Exception as e: + print(f"请求异常: {e}") + continue + if not isinstance(response, dict): + continue + if response.get('code') == 422: + continue + data = response.get('data') + if not isinstance(data, dict): + continue + url = data.get('url') + if not url: + continue + ua = data.get('UA') or data.get('UserAgent') or default_ua + result = { + 'parse': 0, + 'url': url, + 'header': {'User-Agent': ua} + } + break + return result + + def homeContent(self, filter): + config = self.config + if not config: + return {} + home_cate = config['get_home_cate'] + classes = [] + for i in home_cate: + if isinstance(i.get('extend', []),dict): + classes.append({'type_id': i['cate'], 'type_name': i['title']}) + return {'class': classes} + + def homeVideoContent(self): + response = self.fetch(f'{self.host}/apptov5/v1/home/data?id=1&mold=1&__platform=android',headers=self.headers).json() + data = response['data'] + vod_list = [] + for i in data['sections']: + for j in i['items']: + vod_pic = j.get('vod_pic') + if vod_pic.startswith('mac://'): + vod_pic = vod_pic.replace('mac://', 'http://', 1) + vod_list.append({ + "vod_id": j.get('vod_id'), + "vod_name": j.get('vod_name'), + "vod_pic": vod_pic, + "vod_remarks": j.get('vod_remarks') + }) + return {'list': vod_list} + + def categoryContent(self, tid, pg, filter, extend): + response = self.fetch(f"{self.host}/apptov5/v1/vod/lists?area={extend.get('area','')}&lang={extend.get('lang','')}&year={extend.get('year','')}&order={extend.get('sort','time')}&type_id={tid}&type_name=&page={pg}&pageSize=21&__platform=android", headers=self.headers).json() + data = response['data'] + data2 = data['data'] + for i in data['data']: + if i.get('vod_pic','').startswith('mac://'): + i['vod_pic'] = i['vod_pic'].replace('mac://', 'http://', 1) + return {'list': data2, 'page': pg, 'total': data['total']} + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + def localProxy(self, param): + pass \ No newline at end of file diff --git a/tianjitop/llllo4k/py/小鸭子看看.py b/tianjitop/llllo4k/py/小鸭子看看.py new file mode 100644 index 00000000..57901cc7 --- /dev/null +++ b/tianjitop/llllo4k/py/小鸭子看看.py @@ -0,0 +1,533 @@ +# coding=utf-8 +import re +import json +import time +from urllib.parse import quote, urljoin, urlparse, parse_qs +import sys +# 导入外部库 +from bs4 import BeautifulSoup +import gzip +sys.path.append("..") +from base.spider import Spider + +class Spider(Spider): + def __init__(self): + self.name = "小鸭子看看" + self.hosts = { + "main": "https://xiaoyakankan.com", + "tw": "https://tw.xiaoyakankan.com" + } + self.default_host = "tw" + self.ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" + + # 视频格式支持 + self.VIDEO_FORMATS = ['.m3u8', '.mp4', '.flv', '.avi', '.mkv', '.mov'] + + # 分辨率优先级(从高到低) + self.RESOLUTION_PRIORITY = ['4K', '2160P', '1080P', '720P', '480P', '360P', 'HD', '超清', '高清', '标清'] + + def getName(self): + return self.name + + def init(self, extend=""): + if extend: + try: + config = json.loads(extend) + if config.get("host") in self.hosts: + self.default_host = config["host"] + self.log(f"已切换默认域名至:{self.hosts[self.default_host]}", "INFO") + except: + self.log("初始化参数解析失败,使用默认tw子域名", "WARNING") + + def log(self, msg, level="INFO"): + print(f"[{level}] [{self.name}] {time.strftime('%Y-%m-%d %H:%M:%S')} - {msg}") + + def get_current_host(self): + return self.hosts[self.default_host] + + def get_resolution_priority(self, resolution_str): + """获取分辨率的优先级,数字越小优先级越高""" + if not resolution_str: + return len(self.RESOLUTION_PRIORITY) + 1 + + resolution_str = resolution_str.upper() + for priority, res in enumerate(self.RESOLUTION_PRIORITY): + if res.upper() in resolution_str: + return priority + return len(self.RESOLUTION_PRIORITY) + 1 + + def homeContent(self, filter): + result = {} + result['class'] = [ + {"type_name": "电影", "type_id": "10", "land": "1", "filters": [ + {"key": "class", "name": "类型", "value": [ + {"n": "全部", "v": "10"}, + {"n": "动作片", "v": "1001"}, + {"n": "喜剧片", "v": "1002"}, + {"n": "爱情片", "v": "1003"}, + {"n": "科幻片", "v": "1004"}, + {"n": "恐怖片", "v": "1005"}, + {"n": "剧情片", "v": "1006"}, + {"n": "战争片", "v": "1007"}, + {"n": "纪录片", "v": "1008"}, + {"n": "微电影", "v": "1009"}, + {"n": "动漫电影", "v": "1010"}, + {"n": "奇幻片", "v": "1011"}, + {"n": "动画片", "v": "1013"}, + {"n": "犯罪片", "v": "1014"}, + {"n": "悬疑片", "v": "1016"}, + {"n": "欧美片", "v": "1017"}, + {"n": "邵氏电影", "v": "1019"}, + {"n": "同性片", "v": "1021"}, + {"n": "家庭片", "v": "1024"}, + {"n": "古装片", "v": "1025"}, + {"n": "历史片", "v": "1026"}, + {"n": "4K电影", "v": "1027"} + ]} + ]}, + {"type_name": "连续剧", "type_id": "11", "land": "1", "filters": [ + {"key": "class", "name": "地区类型", "value": [ + {"n": "全部", "v": "11"}, + {"n": "国产剧", "v": "1101"}, + {"n": "香港剧", "v": "1102"}, + {"n": "台湾剧", "v": "1105"}, + {"n": "韩国剧", "v": "1103"}, + {"n": "欧美剧", "v": "1104"}, + {"n": "日本剧", "v": "1106"}, + {"n": "泰国剧", "v": "1108"}, + {"n": "港台剧", "v": "1110"}, + {"n": "日韩剧", "v": "1111"}, + {"n": "东南亚剧", "v": "1112"}, + {"n": "海外剧", "v": "1107"} + ]} + ]}, + {"type_name": "综艺", "type_id": "12", "land": "1", "filters": [ + {"key": "class", "name": "地区类型", "value": [ + {"n": "全部", "v": "12"}, + {"n": "内地综艺", "v": "1201"}, + {"n": "港台综艺", "v": "1202"}, + {"n": "日韩综艺", "v": "1203"}, + {"n": "欧美综艺", "v": "1204"}, + {"n": "国外综艺", "v": "1205"} + ]} + ]}, + {"type_name": "动漫", "type_id": "13", "land": "1", "filters": [ + {"key": "class", "name": "地区类型", "value": [ + {"n": "全部", "v": "13"}, + {"n": "国产动漫", "v": "1301"}, + {"n": "日韩动漫", "v": "1302"}, + {"n": "欧美动漫", "v": "1303"}, + {"n": "海外动漫", "v": "1305"}, + {"n": "里番", "v": "1307"} + ]} + ]}, + {"type_name": "福利", "type_id": "15", "land": "1", "filters": [ + {"key": "class", "name": "地区类型", "value": [ + {"n": "全部", "v": "15"}, + {"n": "韩国情色片", "v": "1551"}, + {"n": "日本情色片", "v": "1552"}, + {"n": "大陆情色片", "v": "1555"}, + {"n": "香港情色片", "v": "1553"}, + {"n": "台湾情色片", "v": "1554"}, + {"n": "美国情色片", "v": "1556"}, + {"n": "欧洲情色片", "v": "1557"}, + {"n": "印度情色片", "v": "1558"}, + {"n": "东南亚情色片", "v": "1559"}, + {"n": "其它情色片", "v": "1550"} + ]} + ]} + ] + + # 将所有筛选器数据添加进 result['filters'] 中 + result['filters'] = { + "10": result['class'][0]['filters'], + "11": result['class'][1]['filters'], + "12": result['class'][2]['filters'], + "13": result['class'][3]['filters'], + "15": result['class'][4]['filters'], + } + + return result + + def homeVideoContent(self): + try: + url = self.get_current_host() + r = self.fetch(url, headers={"User-Agent": self.ua}) + + if r.status_code != 200: + self.log(f"首页推荐请求失败,状态码:{r.status_code}", "ERROR") + return {'list': []} + + # 使用新的正则表达式来获取视频列表项 + pattern = r'<a class="link" href="(/post/[^"]+\.html)".*?<img[^>]*data-src="([^"]+)".*?alt="([^"]+)".*?(?:<div class="tag1[^>]*>([^<]+)</div>)?.*?(?:<div class="tag2">([^<]+)</div>)?' + matches = re.findall(pattern, r.text, re.DOTALL) + + video_list = [] + for match in matches[:12]: # 限制12个结果 + try: + link, img_src, title, tag1, tag2 = match + vod_id_match = re.search(r'/post/(.*?)\.html', link) + if not vod_id_match: + continue + + vod_id = vod_id_match.group(1) + + # 组合备注信息 + remarks = [] + if tag1: + remarks.append(tag1.strip()) + if tag2: + remarks.append(tag2.strip()) + + vod_remarks = " / ".join(remarks) if remarks else "最新" + + # 处理图片URL + if img_src.startswith('//'): + img_url = 'https:' + img_src + elif not img_src.startswith('http'): + img_url = urljoin(self.get_current_host(), img_src) + else: + img_url = img_src + + vod = { + 'vod_id': vod_id, + 'vod_name': title.strip(), + 'vod_pic': img_url, + 'vod_remarks': vod_remarks + } + + video_list.append(vod) + except Exception as e: + self.log(f"首页推荐项解析失败:{str(e)}", "ERROR") + continue + + self.log(f"首页推荐成功解析{len(video_list)}个项", "INFO") + return {'list': video_list} + except Exception as e: + self.log(f"首页推荐内容获取失败:{str(e)}", "ERROR") + return {'list': []} + + def categoryContent(self, tid, pg, filter, extend): + result = {'list': [], 'page': pg, 'pagecount': 1, 'limit': 40, 'total': 0} + try: + # 修复:检查 extend 参数,以支持筛选功能 + filter_tid = tid + if extend and 'class' in extend and extend['class']: + filter_tid = extend['class'] + + # 修复分类URL构建,使用 filter_tid + url = f"{self.get_current_host()}/cat/{filter_tid}" + if int(pg) > 1: + url = f"{url}-{pg}" + url = f"{url}.html" + + r = self.fetch(url, headers={"User-Agent": self.ua}) + if r.status_code != 200: + self.log(f"分类页请求失败,URL:{url},状态码:{r.status_code}", "ERROR") + return result + + # 修复:使用更健壮的正则来提取所有视频列表项 + items = re.findall(r'<div class="item">(.*?)<a class="title"', r.text, re.DOTALL) + + for item in items: + try: + link_match = re.search(r'<a class="link" href="(/post/[^"]+\.html)"', item) + img_match = re.search(r'<img[^>]*data-src="([^"]+)"', item) + title_match = re.search(r'data-src="[^"]+" alt="([^"]+)"', item) + tag1_match = re.search(r'<div class="tag1[^>]*>([^<]+)</div>', item) + tag2_match = re.search(r'<div class="tag2">([^<]+)</div>', item) + + if not link_match or not img_match or not title_match: + continue + + link = link_match.group(1) + img_src = img_match.group(1) + title = title_match.group(1).strip() + vod_id = re.search(r'/post/(.*?)\.html', link).group(1) + + remarks = [] + if tag1_match: + remarks.append(tag1_match.group(1).strip()) + if tag2_match: + remarks.append(tag2_match.group(1).strip()) + + vod_remarks = " / ".join(remarks) if remarks else "分类内容" + + # 处理图片URL + if img_src.startswith('//'): + img_url = 'https:' + img_src + elif not img_src.startswith('http'): + img_url = urljoin(self.get_current_host(), img_src) + else: + img_url = img_src + + vod = { + 'vod_id': vod_id, + 'vod_name': title, + 'vod_pic': img_url, + 'vod_remarks': vod_remarks + } + + result['list'].append(vod) + except Exception as e: + self.log(f"分类项解析失败:{str(e)}", "ERROR") + continue + + # 修复:使用更健壮的正则来提取分页信息 + page_pattern = r'/cat/\d+-(\d+)\.html' + page_matches = re.findall(page_pattern, r.text) + + if page_matches: + page_nums = [int(num) for num in page_matches if num.isdigit()] + result['pagecount'] = max(page_nums) if page_nums else 1 + else: + result['pagecount'] = int(pg) + + self.log(f"分类{tid}第{pg}页:解析{len(result['list'])}项", "INFO") + return result + except Exception as e: + self.log(f"分类内容获取失败:{str(e)}", "ERROR") + return result + + def detailContent(self, ids): + result = {"list": []} + if not ids: + return result + + vod_id = ids[0] + try: + detail_url = f"{self.get_current_host()}/post/{vod_id}.html" + r = self.fetch(detail_url, headers={"User-Agent": self.ua}) + if r.status_code != 200: + self.log(f"详情页请求失败,状态码:{r.status_code}", "ERROR") + return result + + soup = BeautifulSoup(r.text, 'html.parser') + + # 提取标题 + title_tag = soup.find('title') + title = title_tag.text.replace(" - 小鴨看看", "").strip() if title_tag else "未知标题" + + # 提取封面图 + cover_tag = soup.find('img', {'data-poster': True}) + cover_url = "" + if cover_tag and cover_tag.get('data-poster'): + cover_url = cover_tag['data-poster'] + if cover_url.startswith('//'): + cover_url = 'https:' + cover_url + elif not cover_url.startswith('http'): + cover_url = urljoin(self.get_current_host(), cover_url) + + # 提取描述 + desc_tag = soup.find('meta', {'name': 'description'}) + desc = desc_tag['content'].strip() if desc_tag and desc_tag.get('content') else "" + + # 提取播放线路和剧集 + play_sources = [] + play_urls = [] + + # 从JavaScript中提取播放信息 + pp_data = None + script_pattern = re.search(r'var pp\s*=\s*({.*?});', r.text, re.DOTALL) + if script_pattern: + try: + pp_data = json.loads(script_pattern.group(1)) + except Exception as e: + self.log(f"解析JavaScript播放信息失败:{str(e)}", "ERROR") + + # 查找所有播放线路的容器 + source_blocks = soup.find_all('div', class_='source') + + # 创建线路列表用于排序 + line_list = [] + + for idx, block in enumerate(source_blocks): + source_name_tag = block.find('span', class_='name') + source_name = source_name_tag.text.strip() if source_name_tag else f"线路{idx+1}" + + resolution_tag = block.find('span', class_='res') + resolution = resolution_tag.text.strip() if resolution_tag else "" + + # 组合线路名称和分辨率 + full_source_name = f"{source_name} ({resolution})" if resolution else source_name + + episodes = [] + if pp_data and 'lines' in pp_data and len(pp_data['lines']) > idx: + urls = pp_data['lines'][idx][3] + + if isinstance(urls, list) and urls: + for ep_idx, url in enumerate(urls): + if isinstance(url, str) and any(url.endswith(fmt) for fmt in self.VIDEO_FORMATS): + # 修复集数命名逻辑 + episode_name_match = re.search(r'ep-([\d\w]+)', url) + if episode_name_match: + episode_name = f"第{episode_name_match.group(1)}集" + elif len(urls) == 1: + episode_name = "全集" + else: + episode_name = f"第{ep_idx+1}集" + + episodes.append(f"{episode_name}${url}") + + play_url = "#".join(episodes) if episodes else "" + + # 添加到线路列表 + line_list.append({ + 'source': full_source_name, + 'url': play_url, + 'resolution': resolution, + 'priority': self.get_resolution_priority(resolution) + }) + + # 按照分辨率优先级排序(从高到低) + line_list.sort(key=lambda x: x['priority']) + + # 将排序后的结果分别放入播放源和播放URL列表 + for line in line_list: + play_sources.append(line['source']) + play_urls.append(line['url']) + + vod = { + "vod_id": vod_id, + "vod_name": title, + "vod_pic": cover_url, + "vod_content": desc, + "vod_play_from": "$$$".join(play_sources) if play_sources else "", + "vod_play_url": "$$$".join(play_urls) if play_urls else "" + } + + result["list"].append(vod) + self.log(f"详情页解析成功,ID:{vod_id},已按分辨率排序播放线路", "INFO") + return result + except Exception as e: + self.log(f"详情页解析失败,ID:{vod_id},错误:{str(e)}", "ERROR") + return result + + def playerContent(self, flag, id, vipFlags): + try: + # 如果id已经是URL,直接返回 + if id.startswith('http'): + return { + "parse": 0, + "playUrl": '', + "url": id, + "header": { + "User-Agent": self.ua, + "Referer": self.get_current_host() + "/" + } + } + + # 这是一个简单的播放器URL解析,如果原始URL本身就是有效的播放地址,就直接返回 + return { + "parse": 0, + "playUrl": '', + "url": id, + "header": { + "User-Agent": self.ua, + "Referer": self.get_current_host() + "/" + } + } + except Exception as e: + self.log(f"播放地址解析失败:{str(e)}", "ERROR") + return {"parse": 0, "playUrl": '', "url": id, "header": {"User-Agent": self.ua}} + + def searchContent(self, key, quick, page='1'): + result = {"list": []} + try: + # 使用Google搜索获取相关页面 + google_search_url = f"https://www.google.com/search?q={quote(key)}+site:xiaoyakankan.com" + self.log(f"构造Google搜索URL: {google_search_url}") + + headers = { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", + "Referer": "https://www.google.com/", + "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8", + "Accept-Encoding": "gzip, deflate, br", + "Connection": "keep-alive" + } + + r = self.fetch(google_search_url, headers=headers, timeout=10) + if r.status_code != 200: + self.log(f"Google搜索请求失败,状态码:{r.status_code}", "ERROR") + return result + + # 处理gzip压缩响应 + if 'gzip' in r.headers.get('Content-Encoding', ''): + r._content = gzip.decompress(r.content) + + try: + soup = BeautifulSoup(r.text, 'html.parser') + # 寻找所有包含搜索结果的a标签 + all_links = soup.find_all('a', href=re.compile(r'/url\?q=')) + + for a_tag in all_links[:8]: # 限制最多8个结果,避免请求过多 + link = a_tag['href'] + + # 解析真实URL + parsed_url = urlparse(link) + query_params = parse_qs(parsed_url.query) + + if 'q' in query_params: + real_link = query_params['q'][0] + + # 检查链接是否属于目标站点 + if 'xiaoyakankan.com' in real_link: + # 尝试从链接中提取影片ID + vod_id_match = re.search(r'/post/([^/]+)\.html', real_link) + if not vod_id_match: + continue + + vod_id = vod_id_match.group(1) + + # 获取标题 + title_tag = a_tag.find('h3') + if not title_tag: + title_tag = a_tag.find('div', class_='g') + + title = title_tag.text.strip() if title_tag else "未知标题" + + # 直接获取视频详情,包括播放链接 + try: + detail_result = self.detailContent([vod_id]) + if detail_result and detail_result['list']: + vod_detail = detail_result['list'][0] + + # 检查是否有播放链接 + if vod_detail.get('vod_play_url') and vod_detail.get('vod_play_from'): + vod = { + "vod_id": vod_id, + "vod_name": title, + "vod_pic": vod_detail.get('vod_pic', ''), + "vod_remarks": "搜索结果", + "vod_play_from": vod_detail.get('vod_play_from', ''), + "vod_play_url": vod_detail.get('vod_play_url', '') + } + result["list"].append(vod) + self.log(f"搜索到可播放视频: {title}", "INFO") + else: + self.log(f"搜索结果无播放链接: {title}", "WARNING") + else: + self.log(f"无法获取视频详情: {title}", "WARNING") + except Exception as e: + self.log(f"获取视频详情失败:{str(e)}", "ERROR") + continue + + except Exception as e: + self.log(f"解析Google搜索结果失败:{str(e)}", "ERROR") + return result + + self.log(f"搜索成功解析{len(result['list'])}个可播放项", "INFO") + return result + except Exception as e: + self.log(f"搜索内容获取失败:{str(e)}", "ERROR") + return result + + def isVideoFormat(self, url): + """判断是否为视频格式""" + return any(url.lower().endswith(fmt) for fmt in self.VIDEO_FORMATS) + + def manualVideoCheck(self): + pass + + def localProxy(self, param): + pass \ No newline at end of file diff --git a/Ye-11X115490_PsyDuck4k/lib/山楂影视.py b/tianjitop/llllo4k/py/山楂影视.py similarity index 100% rename from Ye-11X115490_PsyDuck4k/lib/山楂影视.py rename to tianjitop/llllo4k/py/山楂影视.py diff --git a/tianjitop/llllo4k/py/布布.py b/tianjitop/llllo4k/py/布布.py new file mode 100644 index 00000000..b7c3941b --- /dev/null +++ b/tianjitop/llllo4k/py/布布.py @@ -0,0 +1,149 @@ +# -*- coding: utf-8 -*- +# 本资源来源于互联网公开渠道,仅可用于个人学习爬虫技术。 +# 严禁将其用于任何商业用途,下载后请于 24 小时内删除,搜索结果均来自源站,本人不承担任何责任。 + +from base.spider import Spider +import re,sys,time,random,secrets,hashlib,urllib3 +urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) +sys.path.append('..') + +class Spider(Spider): + host,device_id = 'https://bubutv.top/','com.sunshine.tv_3qys_B7k7Dt56Rn' + + def homeContent(self, filter): + if not self.host: return None + response = self.fetch(f'{self.host}/api.php/app/index/home', headers=self.headers(), verify=False).json() + categories = response['data']['categories'] + videos,classes = [],[] + for i in categories: + classes.append({'type_id': i['type_name'],'type_name': i['type_name']}) + videos.extend(self.arr2vods(i['videos'])) + return {'class': classes, 'list': videos} + + def categoryContent(self, tid, pg, filter, extend): + response = self.fetch(f'{self.host}/api.php/app/filter/vod?type_name={tid}&page={pg}&sort=hits', headers=self.headers(), verify=False).json() + return {'list': self.arr2vods(response['data']), 'pagecount':response['pageCount'], 'page': pg} + + def searchContent(self, key, quick, pg='1'): + response = self.fetch(f'{self.host}/api.php/app/search/index?wd={key}&page={pg}&limit=15', headers=self.headers(), verify=False).json() + videos = self.arr2vods(response['data']) + return {'list': videos, 'pagecount':response['pageCount'], 'page': pg} + + def detailContent(self, ids): + response = self.fetch(f'{self.host}/api.php/app/vod/get_detail?vod_id={ids[0]}', headers=self.headers(), verify=False).json() + data = response['data'][0] + shows,play_urls = [],[] + raw_shows = data['vod_play_from'].split('$$$') + raw_urls_list = data['vod_play_url'].split('$$$') + for show_code, urls_str in zip(raw_shows, raw_urls_list): + need_parse,is_show,name,urls = 0,0,show_code,[] + for i in response['vodplayer']: + if i['from'] == show_code: + is_show = 1 + need_parse = i['decode_status'] + if show_code.casefold() != i['show'].casefold(): + name = f"{i['show']}\u2005({show_code})" + break + if is_show == 1: + for url_item in urls_str.split('#'): + if '$' in url_item: + episode, url = url_item.split('$',1) + urls.append(f"{episode}${show_code}@{int(need_parse)}@{url}") + if urls: + play_urls.append('#'.join(urls)) + shows.append(name) + video = { + 'vod_id': data['vod_id'], + 'vod_name': data['vod_name'], + 'vod_pic': data['vod_pic'], + 'vod_remarks': data['vod_remarks'], + 'vod_year': data['vod_year'], + 'vod_area': data['vod_area'], + 'vod_actor': data['vod_actor'], + 'vod_director': data['vod_director'], + 'vod_content': data['vod_content'], + 'vod_play_from': '$$$'.join(shows), + 'vod_play_url': '$$$'.join(play_urls), + 'type_name': data['vod_class'] + } + return {'list': [video]} + + def playerContent(self, flag, vid, vip_flags): + play_from, need_parse, raw_url = vid.split('@', 2) + jx,url = 0,'' + if need_parse == '1': + try: + response = self.fetch(f'{self.host}/api.php/app/decode/url/?url={raw_url}&vodFrom={play_from}',headers=self.headers(),timeout=30,verify=False).json() + play_url = response['data'] + if play_url.startswith('http'): url = play_url + except Exception: + pass + if not url: + url = raw_url + if re.search(r'(?:www\.iqiyi|v\.qq|v\.youku|www\.mgtv|www\.bilibili)\.com', raw_url): + jx = 1 + return { 'jx': jx, 'parse': 0, 'url': url, 'header': {'User-Agent': 'com.sunshine.tv/1.2.0 (Linux;Android 15) AndroidXMedia3/1.4.1'}} + + def arr2vods(self, arr): + videos = [] + for i in arr: + type_name = i.get('type_name') + if i.get('vod_class'): + type_name = f"{type_name},{i.get('vod_class','')}" + videos.append({ + 'vod_id': i['vod_id'], + 'vod_name': i['vod_name'], + 'vod_pic': i['vod_pic'], + 'vod_remarks': i['vod_remarks'], + 'type_name': type_name, + 'vod_year': i.get('vod_year') + }) + return videos + + def headers(self): + timestamp = str(int(time.time())) + nonce = ''.join(random.choice('0123456789') for _ in range(3)) + ver,pkg = '3','com.sunshine.tv' + sign_str = f"finger=SF-C3B2B41F6EFFFF9869176CF68F6790E8F07506FC88632C94B4F5F0430D5498CA&id={pkg}&nonce={nonce}&sk=SK-thanks&time={timestamp}&v={ver}" + sign = hashlib.sha256(sign_str.encode('utf-8')).hexdigest().upper() + if not self.device_id: + device_id_cache_key = 'com.sunshine.tv_3qys_B7k7Dt56Rn' + self.device_id = self.getCache(device_id_cache_key) + if not(isinstance(self.device_id,str) and len(self.device_id) == 16): + self.device_id = ''.join(secrets.choice('0123456789abcdef') for _ in range(16)) + self.setCache(device_id_cache_key, self.device_id) + return { + 'User-Agent': 'okhttp/4.12.0', + 'Accept': 'application/json', + 'Accept-Encoding': 'gzip', + 'x-aid': pkg, + 'x-ave': ver, + 'x-time': timestamp, + 'x-nonc': nonce, + 'x-sign': sign, + 'x-device-id': self.device_id, + 'x-device-brand': 'vivo', + 'x-device-model': 'V2309A', + 'x-update-id': '0245861b-2ebf-5524-389d-f983830651ec' + } + + def init(self, extend=''): + pass + + def homeVideoContent(self): + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + def localProxy(self, param): + pass \ No newline at end of file diff --git a/tianjitop/llllo4k/py/播放.py b/tianjitop/llllo4k/py/播放.py new file mode 100644 index 00000000..ca709cc6 --- /dev/null +++ b/tianjitop/llllo4k/py/播放.py @@ -0,0 +1,289 @@ +from base.spider import Spider +import re,json,requests,time,os +from urllib.parse import quote,unquote + +class Spider(Spider): + def getName(self): + return "追更助手" + + def init(self,extend=""): + self.zh="/sdcard/瑾禾本地包/zgzl_zhui.json" + self.ri="/sdcard/瑾禾本地包/zgzl_ri.json" + self.ua="Mozilla/5.0" + self.ok="http://192.168.2.3:8888" + self.token="74b22034b792981b" + self.search_api=self.ok+"/video/pansou-guangya" + + def isVideoFormat(self,url): + return False + + def manualVideoCheck(self): + return False + + def destroy(self): + pass + + def homeContent(self,filter): + cls=[{"type_id":"zhui","type_name":"我的周更"},{"type_id":"today","type_name":"今日更新"}] + cls += [{"type_id":"w_"+i,"type_name":"周"+i} for i in "日一二三四五六"] + cls += [{"type_id":"ri","type_name":"我的日更"},{"type_id":"okpan","type_name":"光鸭网盘"},{"type_id":"week","type_name":"周更列表"},{"type_id":"new","type_name":"最近更新"}] + return {"class":cls} + + def homeVideoContent(self): + return {"list":self.local("zhui",1)[:12]} + + def categoryContent(self,tid,pg,filter,extend): + pg=int(pg) + if tid in ["zhui","ri","today"] or tid.startswith("w_"): + return {"list":self.local(tid,pg),"page":pg,"pagecount":1,"limit":99,"total":99} + if tid=="okpan": + return {"list":[],"page":pg,"pagecount":1,"limit":20,"total":0} + if tid=="week": + return {"list":self.week(pg),"page":pg,"pagecount":1,"limit":99,"total":99} + return {"list":self.news(pg),"page":pg,"pagecount":1,"limit":99,"total":99} + + def detailContent(self,array): + sid=array[0] + if sid.startswith("local$"): + _,gen,idx=sid.split("$",2) + arr=self.load(gen) + if int(idx)>=len(arr): + return {"list":[]} + it=arr[int(idx)] + name=it.get("name","").split(",")[0].split("|")[0] + pic=it.get("img","") + week=it.get("week","") + yurl=it.get("yurl","empty") + parts=it.get("name","").split(",") + now=parts[1] if len(parts)>1 else "" + total=parts[2] if len(parts)>2 else "" + urls=[] + if yurl and yurl!="empty": + urls.append("观看$push$"+quote(yurl)) + # urls.append("重新搜索$oksearch$"+quote(name)) + vod={"vod_id":sid,"vod_name":name,"vod_pic":pic,"type_name":"周更" if gen=="zhui" else "日更","vod_year":"","vod_area":"","vod_remarks":"更新至%s%s"%(now,(" / "+total) if total else ""),"vod_actor":"","vod_director":"","vod_content":"更新配置:"+week+"\n链接:"+yurl,"vod_play_from":"追更","vod_play_url":"#".join(urls)} + return {"list":[vod]} + + if sid.startswith("ok$"): + _,name,url,pic=sid.split("$",3) + name=unquote(name) + url=unquote(url) + pic=unquote(pic) + self.autoAdd(name,"zhui",url,pic) + vod={"vod_id":sid,"vod_name":name,"vod_pic":pic,"type_name":"光鸭网盘","vod_remarks":"已加入追更","vod_content":url,"vod_play_from":"光鸭网盘","vod_play_url":"推送播放$push$"+quote(url)} + return {"list":[vod]} + + if sid.startswith("web$"): + _,name,remark=sid.split("$",2) + name=unquote(name) + vod={"vod_id":sid,"vod_name":name,"vod_pic":"","type_name":"周历","vod_remarks":unquote(remark),"vod_content":name,"vod_play_from":"搜索","vod_play_url":"光鸭搜索$oksearch$"+quote(name)} + return {"list":[vod]} + return {"list":[]} + + def searchContent(self,key,quick,pg="1"): + k=key.strip() + arr=self.okSearch(k) + if arr: + first=arr[0] + self.autoAdd(k,"zhui",first.get("vod_content",""),first.get("vod_pic","")) + return {"list":arr,"page":int(pg),"pagecount":1,"limit":20,"total":len(arr)} + + def playerContent(self,flag,id,vipFlags): + if id.startswith("push$"): + u=unquote(id[5:]) + if self.direct(u): + return {"parse":0,"url":u,"header":"User-Agent="+self.ua} + return {"parse":0,"url":"push://"+u,"header":"User-Agent="+self.ua} + if id.startswith("oksearch$"): + k=unquote(id[9:]) + arr=self.okSearch(k) + if arr: + u=arr[0].get("vod_content","") or arr[0].get("vod_id","") + if u.startswith("ok$"): + ps=u.split("$") + u=unquote(ps[2]) if len(ps)>2 else "" + pic=arr[0].get("vod_pic","") + self.autoAdd(k,"zhui",u,pic) + return {"parse":0,"url":"push://"+u,"header":"User-Agent="+self.ua} + return {"parse":1,"url":"https://guangyapan.fun/s/"+quote(k)+".html","header":"User-Agent="+self.ua} + return {"parse":1,"url":id,"header":"User-Agent="+self.ua} + + def localProxy(self,param): + return [200,"video/MP2T",""] + + def okSearch(self,key): + try: + r=requests.get(self.search_api,params={"wd":key},headers={"User-Agent":self.ua,"token":self.token},timeout=15) + js=r.json() + res=[] + for i,it in enumerate(js.get("list",[])[:30]): + u=it.get("vod_id","") + n=it.get("vod_name",key) + p=it.get("vod_pic","") + m=it.get("vod_remarks","") + if not u or not self.isGuangyaPan(u): + continue + res.append({"vod_id":"ok$"+quote(key)+"$"+quote(u)+"$"+quote(p),"vod_name":n,"vod_pic":p,"vod_remarks":m or "光鸭网盘","vod_content":u}) + return res + except: + return [] + + def isGuangyaPan(self,u): + return bool(re.search(r"(guangyapan\.(com|cn|fun|cc)|guangya\.(cc|cn|top|xyz)|api\.guangyapan\.com|/s/[A-Za-z0-9_-]+)",u or "",re.I)) + + def autoAdd(self,name,gen,yurl="",pic=""): + name=(name or "").strip() + if not name: + return + arr=self.raw(gen) + for it in arr: + if it.get("name","").split(",")[0].split("|")[0]==name: + if yurl and it.get("yurl","empty")=="empty": + it["yurl"]=yurl + if pic and not it.get("img"): + it["img"]=pic + self.save(gen,arr) + return + week=self.weekday()+",1,10,自动" if gen=="zhui" else "1,1,10" + arr.insert(0,{"name":name+",0","week":week,"img":pic or "","yurl":yurl or "empty","riqi":self.today()}) + self.save(gen,arr) + + def raw(self,gen): + path=self.zh if gen=="zhui" else self.ri + try: + return json.loads(open(path,"r",encoding="utf-8").read()) + except: + return [] + + def save(self,gen,arr): + path=self.zh if gen=="zhui" else self.ri + try: + d=os.path.dirname(path) + if d and not os.path.exists(d): + os.makedirs(d) + open(path,"w",encoding="utf-8").write(json.dumps(arr,ensure_ascii=False)) + except: + pass + + def load(self,gen): + arr=self.raw(gen) + arr=self.update(arr,gen) + self.save(gen,arr) + return arr + + def item(self,vid,it,gen): + name=it.get("name","").split(",")[0].split("|")[0] + parts=it.get("name","").split(",") + now=parts[1] if len(parts)>1 else "" + total=parts[2] if len(parts)>2 else "" + wk=it.get("week","").split(",") + tm=wk[2] if len(wk)>2 else "10" + plat=wk[3] if len(wk)>3 else "" + remark=("第%s集"%now if now else "")+(("/共%s集"%total) if total else "") + if plat: + remark=remark+" "+plat + return {"vod_id":vid,"vod_name":name,"vod_pic":it.get("img",""),"vod_remarks":remark,"vod_content":"%s %s点更新"%(("周"+wk[0]) if gen=="zhui" and wk else "日更",tm)} + + def local(self,tid,pg): + if tid=="ri": + arr=self.load("ri") + return [self.item("local$ri$%s"%i,it,"ri") for i,it in enumerate(arr)] + arr=self.load("zhui") + day=self.weekday() + want=None + if tid=="today": + want=day + elif tid.startswith("w_"): + want=tid.split("_",1)[1] + return [self.item("local$zhui$%s"%i,it,"zhui") for i,it in enumerate(arr) if want is None or it.get("week","").split(",")[0]==want] + + def update(self,arr,gen): + today=self.today() + for it in arr: + wk=it.get("week","").split(",") + if len(wk)<2: + continue + last=it.get("riqi","") + target=today if gen=="ri" else self.lastday(wk[0]) + days=self.days(last,target) + step=7 if gen=="zhui" else 1 + times=days//step if days>0 else 0 + if times<=0: + continue + names=it.get("name","").split(",") + nums=[i for i in range(1,len(names)) if re.match(r"^\d+$",names[i])] + if nums: + p=nums[0] + cur=int(names[p]) + add=times*int(wk[1]) + if len(nums)>1: + cur=min(cur+add,int(names[nums[1]])) + else: + cur=cur+add + names[p]=str(cur) + it["name"]=",".join(names) + it["riqi"]=target + return arr + + def week(self,pg): + html=self.get("http://www.yatu.tv:2082/zhouli.asp") + blocks=re.findall(r'<tr[\s\S]*?</tr>',html) + res=[] + for row in blocks: + title=self.clean(self.m(row,r'<a[^>]*>(.*?)</a>')) + if not title: + continue + txt=self.clean(row) + remark=self.m(txt,r'(\d+集[^热日期]*)') or self.m(txt,r'(第?\d+[^ ]*)') or "周更" + res.append({"vod_id":"web$"+quote(title)+"$"+quote(remark),"vod_name":title,"vod_pic":"","vod_remarks":remark,"vod_content":txt}) + return res[:80] + + def news(self,pg): + html=self.get("http://www.yatu.tv:2082/zuijin.asp") + rows=re.findall(r'<td[\s\S]*?</td>',html) + res=[] + for row in rows: + title=self.clean(self.m(row,r'<a[^>]*>(.*?)</a>')) + if not title: + continue + txt=self.clean(row) + remark=self.m(txt,r'(更新[^日期]*)') or "最近更新" + res.append({"vod_id":"web$"+quote(title)+"$"+quote(remark),"vod_name":title,"vod_pic":"","vod_remarks":remark,"vod_content":txt}) + return res[:80] + + def get(self,url): + try: + r=requests.get(url,headers={"User-Agent":self.ua},timeout=8) + r.encoding="gbk" + return r.text + except: + return "" + + def clean(self,s): + return re.sub(r"\s+"," ",re.sub(r"<[^>]+>"," ",s or "")).strip() + + def m(self,s,p): + r=re.search(p,s or "",re.S) + return r.group(1).strip() if r else "" + + def today(self): + return time.strftime("%Y-%m-%d",time.localtime()) + + def weekday(self): + return "日一二三四五六"[int(time.strftime("%w",time.localtime()))] + + def lastday(self,w): + mp={"日":0,"一":1,"二":2,"三":3,"四":4,"五":5,"六":6} + now=time.time() + cur=int(time.strftime("%w",time.localtime(now))) + diff=(cur-mp.get(w,cur)+7)%7 + return time.strftime("%Y-%m-%d",time.localtime(now-diff*86400)) + + def days(self,a,b): + try: + return int((time.mktime(time.strptime(b,"%Y-%m-%d"))-time.mktime(time.strptime(a,"%Y-%m-%d")))/86400) + except: + return 0 + + def direct(self,u): + return bool(re.search(r'\.(m3u8|mp4|flv|mkv|mp3)(\?|$)',u,re.I)) \ No newline at end of file diff --git a/tianjitop/llllo4k/py/文才影视.py b/tianjitop/llllo4k/py/文才影视.py new file mode 100644 index 00000000..700c2b04 --- /dev/null +++ b/tianjitop/llllo4k/py/文才影视.py @@ -0,0 +1,225 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import json +import sys +import threading +import uuid +import requests +sys.path.append('..') +from base.spider import Spider +import time +from Crypto.Hash import MD5, SHA1 + +class Spider(Spider): + ''' + 配置示例: + { + "key": "xxxx", + "name": "xxxx", + "type": 3, + "api": ".所在路径/金牌.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "ext": { + "site": "https://www.jiabaide.cn,域名2,域名3" + } + }, + ''' + def init(self, extend=""): + if extend: + hosts=json.loads(extend)['site'] + self.host = self.host_late(hosts) + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + def homeContent(self, filter): + cdata = self.fetch(f"{self.host}/api/mw-movie/anonymous/get/filer/type", headers=self.getheaders()).json() + fdata = self.fetch(f"{self.host}/api/mw-movie/anonymous/v1/get/filer/list", headers=self.getheaders()).json() + result = {} + classes = [] + filters={} + for k in cdata['data']: + classes.append({ + 'type_name': k['typeName'], + 'type_id': str(k['typeId']), + }) + sort_values = [{"n": "最近更新", "v": "2"},{"n": "人气高低", "v": "3"}, {"n": "评分高低", "v": "4"}] + for tid, d in fdata['data'].items(): + current_sort_values = sort_values.copy() + if tid == '1': + del current_sort_values[0] + filters[tid] = [ + {"key": "type", "name": "类型", + "value": [{"n": i["itemText"], "v": i["itemValue"]} for i in d["typeList"]]}, + + *([] if not d["plotList"] else [{"key": "v_class", "name": "剧情", + "value": [{"n": i["itemText"], "v": i["itemText"]} + for i in d["plotList"]]}]), + + {"key": "area", "name": "地区", + "value": [{"n": i["itemText"], "v": i["itemText"]} for i in d["districtList"]]}, + + {"key": "year", "name": "年份", + "value": [{"n": i["itemText"], "v": i["itemText"]} for i in d["yearList"]]}, + + {"key": "lang", "name": "语言", + "value": [{"n": i["itemText"], "v": i["itemText"]} for i in d["languageList"]]}, + + {"key": "sort", "name": "排序", "value": current_sort_values} + ] + result['class'] = classes + result['filters'] = filters + return result + + def homeVideoContent(self): + data1 = self.fetch(f"{self.host}/api/mw-movie/anonymous/v1/home/all/list", headers=self.getheaders()).json() + data2=self.fetch(f"{self.host}/api/mw-movie/anonymous/home/hotSearch",headers=self.getheaders()).json() + data=[] + for i in data1['data'].values(): + data.extend(i['list']) + data.extend(data2['data']) + vods=self.getvod(data) + return {'list':vods} + + def categoryContent(self, tid, pg, filter, extend): + + params = { + "area": extend.get('area', ''), + "filterStatus": "1", + "lang": extend.get('lang', ''), + "pageNum": pg, + "pageSize": "30", + "sort": extend.get('sort', '1'), + "sortBy": "1", + "type": extend.get('type', ''), + "type1": tid, + "v_class": extend.get('v_class', ''), + "year": extend.get('year', '') + } + data = self.fetch(f"{self.host}/api/mw-movie/anonymous/video/list?{self.js(params)}", headers=self.getheaders(params)).json() + result = {} + result['list'] = self.getvod(data['data']['list']) + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + data=self.fetch(f"{self.host}/api/mw-movie/anonymous/video/detail?id={ids[0]}",headers=self.getheaders({'id':ids[0]})).json() + vod=self.getvod([data['data']])[0] + vod['vod_play_from']='文才' + vod['vod_play_url'] = '#'.join( + f"{i['name'] if len(vod['episodelist']) > 1 else vod['vod_name']}${ids[0]}@@{i['nid']}" for i in + vod['episodelist']) + vod.pop('episodelist', None) + return {'list':[vod]} + + def searchContent(self, key, quick, pg="1"): + params = { + "keyword": key, + "pageNum": pg, + "pageSize": "8", + "sourceCode": "1" + } + data=self.fetch(f"{self.host}/api/mw-movie/anonymous/video/searchByWord?{self.js(params)}",headers=self.getheaders(params)).json() + vods=self.getvod(data['data']['result']['list']) + return {'list':vods,'page':pg} + + def playerContent(self, flag, id, vipFlags): + self.header = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.6478.61 Chrome/126.0.6478.61 Not/A)Brand/8 Safari/537.36', + 'sec-ch-ua-platform': '"Windows"', + 'DNT': '1', + 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"', + 'sec-ch-ua-mobile': '?0', + 'Origin': self.host, + 'Referer': f'{self.host}/' + } + ids=id.split('@@') + pdata = self.fetch(f"{self.host}/api/mw-movie/anonymous/v2/video/episode/url?clientType=1&id={ids[0]}&nid={ids[1]}",headers=self.getheaders({'clientType':'1','id': ids[0], 'nid': ids[1]})).json() + vlist=[] + for i in pdata['data']['list']:vlist.extend([i['resolutionName'],i['url']]) + return {'parse':0,'url':vlist,'header':self.header} + + def localProxy(self, param): + pass + + def host_late(self, url_list): + if isinstance(url_list, str): + urls = [u.strip() for u in url_list.split(',')] + else: + urls = url_list + if len(urls) <= 1: + return urls[0] if urls else '' + + results = {} + threads = [] + + def test_host(url): + try: + start_time = time.time() + response = requests.head(url, timeout=1.0, allow_redirects=False) + delay = (time.time() - start_time) * 1000 + results[url] = delay + except Exception as e: + results[url] = float('inf') + for url in urls: + t = threading.Thread(target=test_host, args=(url,)) + threads.append(t) + t.start() + for t in threads: + t.join() + return min(results.items(), key=lambda x: x[1])[0] + + def md5(self, sign_key): + md5_hash = MD5.new() + md5_hash.update(sign_key.encode('utf-8')) + md5_result = md5_hash.hexdigest() + return md5_result + + def js(self, param): + return '&'.join(f"{k}={v}" for k, v in param.items()) + + def getheaders(self, param=None): + if param is None:param = {} + t=str(int(time.time()*1000)) + param['key']='cb808529bae6b6be45ecfab29a4889bc' + param['t']=t + sha1_hash = SHA1.new() + sha1_hash.update(self.md5(self.js(param)).encode('utf-8')) + sign = sha1_hash.hexdigest() + deviceid = str(uuid.uuid4()) + headers = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.6478.61 Chrome/126.0.6478.61 Not/A)Brand/8 Safari/537.36', + 'Accept': 'application/json, text/plain, */*', + 'sign': sign, + 't': t, + 'deviceid':deviceid + } + return headers + + def convert_field_name(self, field): + field = field.lower() + if field.startswith('vod') and len(field) > 3: + field = field.replace('vod', 'vod_') + if field.startswith('type') and len(field) > 4: + field = field.replace('type', 'type_') + return field + + def getvod(self, array): + return [{self.convert_field_name(k): v for k, v in item.items()} for item in array] + diff --git a/tianjitop/llllo4k/py/柯南.py b/tianjitop/llllo4k/py/柯南.py new file mode 100644 index 00000000..3d136cb1 --- /dev/null +++ b/tianjitop/llllo4k/py/柯南.py @@ -0,0 +1,335 @@ +#coding=utf-8 +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +TVBox / 影视仓 Python源脚本 +站点: 柯南影视 (www.knvod.com) +模板: MacCMS v10 + ds3 +说明: 需手机UA访问,7.1起关闭PC端 +""" + +import sys +import re +import json +import requests +from urllib.parse import quote +from pyquery import PyQuery as pq +sys.path.append('..') +from base.spider import Spider + +class Spider(Spider): + + def __init__(self): + super().__init__() + self.site = 'https://www.knvod.com' + self.session = requests.Session() + self.session.headers.update({ + 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; SM-G973F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36', + 'Referer': 'https://www.knvod.com/' + }) + self.cateManual = { + '电影': '1', + '连续剧': '2', + '动漫': '3', + '综艺': '4' + } + + def init(self, extend=""): + pass + + def getName(self): + return "柯南影视" + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def homeContent(self, filter): + result = {'class': [], 'filters': {}, 'list': [], 'parse': 0, 'jx': 0} + for k, v in self.cateManual.items(): + result['class'].append({ + 'type_id': str(v), + 'type_name': k + }) + return result + + def homeVideoContent(self): + videos = [] + try: + r = self.session.get(self.site, timeout=15) + r.encoding = 'utf-8' + doc = pq(r.text) + items = doc('div.public-list-box') + seen = set() + for item in items.items(): + a = item.find('a.public-list-exp') + href = a.attr('href') or '' + vid = self.getVid(href) + if not vid or vid in seen: + continue + seen.add(vid) + title = a.attr('title') or '' + img = item.find('img.lazy') + pic = img.attr('data-src') or img.attr('src') or '' + if 'loading' in pic or 'zanwupic' in pic: + pic = '' + note = item.find('.public-list-prb').text().strip() + if title: + videos.append({ + 'vod_id': vid, + 'vod_name': title, + 'vod_pic': pic, + 'vod_remarks': note + }) + except Exception as e: + print(f'homeVideoContent error: {e}') + return {'list': videos, 'parse': 0, 'jx': 0} + + def categoryContent(self, tid, pg, filter, extend): + result = {'list': [], 'parse': 0, 'jx': 0} + page = int(pg) if pg else 1 + try: + if page == 1: + url = f'{self.site}/vshow/{tid}-----------.html' + else: + url = f'{self.site}/vshow/{tid}-----------{page}.html' + + r = self.session.get(url, timeout=15) + r.encoding = 'utf-8' + doc = pq(r.text) + items = doc('div.public-list-box') + for item in items.items(): + a = item.find('a.public-list-exp') + href = a.attr('href') or '' + vid = self.getVid(href) + if not vid: + continue + title = a.attr('title') or '' + img = item.find('img.lazy') + pic = img.attr('data-src') or img.attr('src') or '' + if 'loading' in pic or 'zanwupic' in pic: + pic = '' + note = item.find('.public-list-prb').text().strip() + if title: + result['list'].append({ + 'vod_id': vid, + 'vod_name': title, + 'vod_pic': pic, + 'vod_remarks': note + }) + except Exception as e: + print(f'categoryContent error: {e}') + + result['page'] = page + result['pagecount'] = page + 1 if len(result['list']) > 0 else page + result['limit'] = len(result['list']) + result['total'] = len(result['list']) + return result + + def detailContent(self, ids): + result = {'list': [], 'parse': 0, 'jx': 0} + vid = ids[0] if ids else '' + if not vid: + return result + try: + url = f'{self.site}/vdetail/{vid}.html' + r = self.session.get(url, timeout=15) + r.encoding = 'utf-8' + doc = pq(r.text) + + # 标题从title标签提取 + title_match = re.search(r'<title>《(.+?)》', r.text) + title = title_match.group(1) if title_match else '' + if not title: + title = doc('h1').text().strip() + + # 图片 + pic = '' + img = doc('img.lazy1') + if img.length: + pic = img.attr('data-src') or img.attr('src') or '' + if not pic: + img = doc('.video-cover img') + if img.length: + pic = img.attr('data-src') or img.attr('src') or '' + + # 剧情从meta description提取 + desc = '' + desc_match = re.search(r'<meta name="description" content="(.+?)"', r.text) + if desc_match: + desc = desc_match.group(1) + # 去掉剧情介绍前缀 + desc = desc.replace('剧情介绍:', '').strip() + + # 从页面文本提取导演/主演(ds3模板中信息在特定div中) + actor = '' + director = '' + # 尝试从页面中提取 + info_text = doc('.slide-info').text() + if '主演' in info_text: + actor_match = re.search(r'主演[::]\s*([^\n]+)', info_text) + if actor_match: + actor = actor_match.group(1).strip() + if '导演' in info_text: + director_match = re.search(r'导演[::]\s*([^\n]+)', info_text) + if director_match: + director = director_match.group(1).strip() + + # 播放线路和集数 + play_from = [] + play_url = [] + + # 获取所有线路标签 + tabs = doc('.anthology-tab a') + panels = doc('.anthology-list-box') + + tab_list = [] + panel_list = [] + for t in tabs.items(): + tab_list.append(t) + for p in panels.items(): + panel_list.append(p) + + for i, tab in enumerate(tab_list): + tab_text = tab.text().strip() or f'线路{i+1}' + # 把末尾的集数用括号括起来,如 "4K48" → "4K (48)" + m = re.search(r'^(.+?)(\d+)$', tab_text) + if m: + tab_name = f'{m.group(1)} ({m.group(2)})' + else: + tab_name = tab_text + play_from.append(tab_name) + + episodes = [] + if i < len(panel_list): + for link in panel_list[i].find('.anthology-list-play li a').items(): + ep_name = link.text().strip() + ep_href = link.attr('href') or '' + if ep_name and ep_href: + episodes.append(f'{ep_name}${ep_href}') + + play_url.append('#'.join(episodes)) + + vod = { + 'vod_id': vid, + 'vod_name': title, + 'vod_pic': pic, + 'type_name': '', + 'vod_year': '', + 'vod_area': '', + 'vod_remarks': '', + 'vod_actor': actor, + 'vod_director': director, + 'vod_content': desc, + 'vod_play_from': '$$$'.join(play_from) if play_from else '', + 'vod_play_url': '$$$'.join(play_url) if play_url else '' + } + result['list'].append(vod) + except Exception as e: + print(f'detailContent error: {e}') + return result + + def playerContent(self, flag, id, vipFlags): + result = {} + try: + play_url = id + if id and not id.startswith('http'): + play_url = self.site + id + + # 请求播放页获取iframe + r = self.session.get(play_url, timeout=15) + r.encoding = 'utf-8' + + # 提取iframe播放器URL + iframe_url = '' + m = re.search(r'<iframe[^>]+src="([^"]+)"', r.text) + if m: + iframe_url = m.group(1) + else: + m2 = re.search(r"src='([^']+player[^']+)'", r.text) + if m2: + iframe_url = m2.group(1) + + # 如果有iframe,返回iframe地址让TVbox解析 + # 否则返回播放页URL + if iframe_url: + result['parse'] = 1 + result['url'] = iframe_url + result['jx'] = 0 + result['header'] = { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; SM-G973F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36', + 'Referer': self.site + '/' + } + else: + result['parse'] = 1 + result['url'] = play_url + result['jx'] = 0 + result['header'] = { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; SM-G973F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36', + 'Referer': self.site + '/' + } + except Exception as e: + print(f'playerContent error: {e}') + result['parse'] = 1 + result['url'] = id + result['jx'] = 0 + result['header'] = {} + return result + + def searchContent(self, key, quick, pg='1'): + result = {'list': [], 'parse': 0, 'jx': 0} + page = int(pg) if pg else 1 + try: + url = f'{self.site}/search/-------------.html?wd={key}' + if page > 1: + url += f'&page={page}' + + r = self.session.get(url, timeout=15) + r.encoding = 'utf-8' + doc = pq(r.text) + + items = doc('.search-box') + for item in items.items(): + a = item.find('a.public-list-exp') + href = a.attr('href') or '' + vid = self.getVid(href) + if not vid: + continue + + img = item.find('img') + title = (img.attr('alt') or '').replace('封面图', '').strip() + pic = img.attr('data-src') or img.attr('src') or '' + if 'loading' in pic or 'zanwupic' in pic: + pic = '' + note = item.find('.public-list-prb').text().strip() + if title: + result['list'].append({ + 'vod_id': vid, + 'vod_name': title, + 'vod_pic': pic, + 'vod_remarks': note + }) + except Exception as e: + print(f'searchContent error: {e}') + + result['page'] = page + result['pagecount'] = page + 1 if len(result['list']) > 0 else page + result['limit'] = len(result['list']) + result['total'] = len(result['list']) + return result + + def localProxy(self, params): + return [200, "video/MP2T", {}, ""] + + def getVid(self, url): + if not url: + return '' + m = re.search(r'/vdetail/(\d+)\.html', url) + if m: + return m.group(1) + m = re.search(r'/vplay/(\d+)-', url) + if m: + return m.group(1) + return '' diff --git a/tianjitop/llllo4k/py/猎手影视.py b/tianjitop/llllo4k/py/猎手影视.py new file mode 100644 index 00000000..1a6a4d76 --- /dev/null +++ b/tianjitop/llllo4k/py/猎手影视.py @@ -0,0 +1,279 @@ +# coding=utf-8 +# !/usr/bin/python +# by嗷呜(finally) +import sys +import os +sys.path.append("..") +import re +import hashlib +import hmac +import random +import string +from Crypto.Util.Padding import unpad +from concurrent.futures import ThreadPoolExecutor +from Crypto.PublicKey import RSA +from Crypto.Cipher import PKCS1_v1_5, AES +from base64 import b64encode, b64decode +import json +import time +from base.spider import Spider + +class Spider(Spider): + + def getName(self): + return "电影猎手" + + def init(self, extend=""): + self.device = self.device_id() + self.host = self.gethost() + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def action(self, action): + pass + + def destroy(self): + pass + + t = str(int(time.time())) + + def homeContent(self, filter): + result = {} + filters = {} + classes = [] + bba = self.url() + data = self.fetch(f"{self.host}/api/v1/app/config?pack={bba[0]}&signature={bba[1]}", headers=self.header()).text + data1 = self.aes(data) + dy = {"class":"类型","area":"地区","lang":"语言","year":"年份","letter":"字母","by":"排序","sort":"排序"} + data1['data']['movie_screen']['sort'].pop(0) + for item in data1['data']['movie_screen']['sort']: + item['n'] = item.pop('name') + item['v'] = item.pop('value') + for item in data1['data']['movie_screen']['filter']: + has_non_empty_field = False + classes.append({"type_name": item["name"], "type_id": str(item["id"])}) + for key in dy: + if key in item and item[key]: + has_non_empty_field = True + break + if has_non_empty_field: + filters[str(item["id"])] = [] + filters[str(item["id"])].append( + {"key": 'sort', "name": '排序', "value": data1['data']['movie_screen']['sort']}) + for dkey in item: + if dkey in dy and item[dkey]: + item[dkey].pop(0) + value_array = [ + {"n": value.strip(), "v": value.strip()} + for value in item[dkey] + if value.strip() != "" + ] + filters[str(item["id"])].append( + {"key": dkey, "name": dy[dkey], "value": value_array} + ) + result["class"] = classes + result["filters"] = filters + return result + + def homeVideoContent(self): + bba = self.url() + url = f'{self.host}/api/v1/movie/index_recommend?pack={bba[0]}&signature={bba[1]}' + data = self.fetch(url, headers=self.header()).json() + videos = [] + for item in data['data']: + if len(item['list']) > 0: + for it in item['list']: + try: + videos.append(self.voides(it)) + except Exception as e: + continue + result = {"list": videos} + return result + + def categoryContent(self, tid, pg, filter, extend): + body = {"type_id": tid, "sort": extend.get("sort", "by_default"), "class": extend.get("class", "类型"), + "area": extend.get("area", "地区"), "year": extend.get("year", "年份"), "page": str(pg), + "pageSize": "21"} + result = {} + list = [] + bba = self.url(body) + url = f"{self.host}/api/v1/movie/screen/list?pack={bba[0]}&signature={bba[1]}" + data = self.fetch(url, headers=self.header()).json()['data']['list'] + for item in data: + list.append(self.voides(item)) + result["list"] = list + result["page"] = pg + result["pagecount"] = 9999 + result["limit"] = 90 + result["total"] = 999999 + return result + + def detailContent(self, ids): + body = {"id": ids[0]} + bba = self.url(body) + url = f'{self.host}/api/v1/movie/detail?pack={bba[0]}&signature={bba[1]}' + data = self.fetch(url, headers=self.header()).json()['data'] + video = {'vod_name': data.get('name'),'type_name': data.get('type_name'),'vod_year': data.get('year'),'vod_area': data.get('area'),'vod_remarks': data.get('dynami'),'vod_content': data.get('content')} + play = [] + names = [] + tasks = [] + for itt in data["play_from"]: + name = itt["name"] + a = [] + if len(itt["list"]) > 0: + names.append(name) + play.append(self.playeach(itt['list'])) + else: + tasks.append({"movie_id": ids[0], "from_code": itt["code"]}) + names.append(name) + if tasks: + with ThreadPoolExecutor(max_workers=len(tasks)) as executor: + results = executor.map(self.playlist, tasks) + for result in results: + if result: + play.append(result) + else: + play.append("") + video["vod_play_from"] = "$$$".join(names) + video["vod_play_url"] = "$$$".join(play) + result = {"list": [video]} + return result + + def searchContent(self, key, quick, pg=1): + body = {"keyword": key, "sort": "", "type_id": "0", "page": str(pg), "pageSize": "10", + "res_type": "by_movie_name"} + bba = self.url(body) + url = f"{self.host}/api/v1/movie/search?pack={bba[0]}&signature={bba[1]}" + data = self.fetch(url, headers=self.header()).json()['data'].get('list') + videos = [] + for it in data: + try: + videos.append(self.voides(it)) + except Exception as e: + continue + result = {"list": videos, "page": pg} + return result + + def playerContent(self, flag, id, vipFlags): + url = id + if "m3u8" not in url and "mp4" not in url: + try: + add = id.split('|||') + data = {"from_code": add[0], "play_url": add[1], "episode_id": add[2], "type": "play"} + bba = self.url(data) + data2 = self.fetch(f"{self.host}/api/v1/movie_addr/parse_url?pack={bba[0]}&signature={bba[1]}", + headers=self.header()).json()['data'] + url = data2.get('play_url') or data2.get('download_url') + try: + url1 = self.fetch(url, headers=self.header(), allow_redirects=False).headers['Location'] + if url1 and "http" in url1: + url = url1 + except: + pass + except Exception as e: + pass + if '.jpg' in url or '.jpeg' in url or '.png' in url: + url = self.getProxyUrl() + "&url=" + b64encode(url.encode('utf-8')).decode('utf-8') + "&type=m3u8" + result = {} + result["parse"] = 0 + result["url"] = url + result["header"] = {'user-agent': 'okhttp/4.9.2'} + return result + + def localProxy(self, param): + url = b64decode(param["url"]).decode('utf-8') + durl = url[:url.rfind('/')] + data = self.fetch(url, headers=self.header()).content.decode("utf-8") + lines = data.strip().split('\n') + for index, string in enumerate(lines): + # if 'URI="' in string and 'http' not in string: + # lines[index] = index + # 暂时预留,貌似用不到 + if '#EXT' not in string and 'http' not in string: + lines[index] = durl + ('' if string.startswith('/') else '/') + string + data = '\n'.join(lines) + return [200, "application/vnd.apple.mpegur", data] + + def device_id(self): + characters = string.ascii_lowercase + string.digits + random_string = ''.join(random.choices(characters, k=32)) + return random_string + + def gethost(self): + headers = { + 'User-Agent': 'okhttp/4.9.2', + 'Connection': 'Keep-Alive', + } + response = self.fetch('https://app-site.ecoliving168.com/domain_v5.json', headers=headers).json() + url = response['api_service'].replace('/api/', '') + return url + + def header(self): + headers = { + 'User-Agent': 'Android', + 'Accept': 'application/prs.55App.v2+json', + 'timestamp': self.t, + 'x-client-setting': '{"pure-mode":1}', + 'x-client-uuid': '{"device_id":' + self.device + '}, "type":1,"brand":"Redmi", "model":"M2012K10C", "system_version":30, "sdk_version":"3.1.0.7"}', + 'x-client-version': '3096 ' + } + return headers + + def url(self, id=None): + if not id: + id = {} + id["timestamp"] = self.t + public_key = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA02F/kPg5A2NX4qZ5JSns+bjhVMCC6JbTiTKpbgNgiXU+Kkorg6Dj76gS68gB8llhbUKCXjIdygnHPrxVHWfzmzisq9P9awmXBkCk74Skglx2LKHa/mNz9ivg6YzQ5pQFUEWS0DfomGBXVtqvBlOXMCRxp69oWaMsnfjnBV+0J7vHbXzUIkqBLdXSNfM9Ag5qdRDrJC3CqB65EJ3ARWVzZTTcXSdMW9i3qzEZPawPNPe5yPYbMZIoXLcrqvEZnRK1oak67/ihf7iwPJqdc+68ZYEmmdqwunOvRdjq89fQMVelmqcRD9RYe08v+xDxG9Co9z7hcXGTsUquMxkh29uNawIDAQAB' + encrypted_text = json.dumps(id) + public_key = RSA.import_key(b64decode(public_key)) + cipher = PKCS1_v1_5.new(public_key) + encrypted_message = cipher.encrypt(encrypted_text.encode('utf-8')) + encrypted_message_base64 = b64encode(encrypted_message).decode('utf-8') + result = encrypted_message_base64.replace('+', '-').replace('/', '_').replace('=', '') + key = '635a580fcb5dc6e60caa39c31a7bde48' + sign = hmac.new(key.encode(), result.encode(), hashlib.md5).hexdigest() + return result, sign + + def playlist(self, body): + try: + bba = self.url(body) + url = f'{self.host}/api/v1/movie_addr/list?pack={bba[0]}&signature={bba[1]}' + data = self.fetch(url, headers=self.header()).json()['data'] + return self.playeach(data) + except Exception: + return [] + + def playeach(self,data): + play_urls = [] + for it in data: + if re.search(r"mp4|m3u8", it["play_url"]): + play_urls.append(f"{it['episode_name']}${it['play_url']}") + else: + play_urls.append( + f"{it['episode_name']}${it['from_code']}|||{it['play_url']}|||{it['episode_id']}" + ) + return '#'.join(play_urls) + + def voides(self, item): + if item['name'] or item['title']: + voide = { + "vod_id": item.get('id') or item.get('click'), + 'vod_name': item.get('name') or item.get('title'), + 'vod_pic': item.get('cover') or item.get('image'), + 'vod_year': item.get('year') or item.get('label'), + 'vod_remarks': item.get('dynamic') or item.get('sub_title') + } + return voide + + def aes(self, text): + text = text.replace('-', '+').replace('_', '/') + '==' + key = b"e6d5de5fcc51f53d" + iv = b"2f13eef7dfc6c613" + cipher = AES.new(key, AES.MODE_CBC, iv) + pt = unpad(cipher.decrypt(b64decode(text)), AES.block_size).decode("utf-8") + return json.loads(pt) diff --git a/tianjitop/llllo4k/py/瓜子.py b/tianjitop/llllo4k/py/瓜子.py new file mode 100644 index 00000000..dd4977da --- /dev/null +++ b/tianjitop/llllo4k/py/瓜子.py @@ -0,0 +1,471 @@ +# coding = utf-8 +#!/usr/bin/python +import re +import sys +import json +import time +import base64 +import hashlib +import urllib.parse +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad, unpad +from Crypto.PublicKey import RSA +from Crypto.Cipher import PKCS1_v1_5 +from base.spider import Spider + +sys.path.append('..') + +class Spider(Spider): + def __init__(self): + self.name = "瓜子" + self.host = 'https://api.w32z7vtd.com' + self.token = '1be86e8e18a9fa18b2b8d5432699dad0.ac008ed650fd087bfbecf2fda9d82e9835253ef24843e6b18fcd128b10763497bcf9d53e959f5377cde038c20ccf9d17f604c9b8bb6e61041def86729b2fc7408bd241e23c213ac57f0226ee656e2bb0a583ae0e4f3bf6c6ab6c490c9a6f0d8cdfd366aacf5d83193671a8f77cd1af1ff2e9145de92ec43ec87cf4bdc563f6e919fe32861b0e93b118ec37d8035fbb3c.59dd05c5d9a8ae726528783128218f15fe6f2c0c8145eddab112b374fcfe3d79' + self.header = { + 'Cache-Control': 'no-cache', + 'Version': '2406025', + 'PackageName': 'com.uf076bf0c246.qe439f0d5e.m8aaf56b725a.ifeb647346f', + 'Ver': '1.9.2', + 'Referer': self.host, + 'Content-Type': 'application/x-www-form-urlencoded', + 'User-Agent': 'okhttp/3.12.0' + } + # 添加缓存机制 + self.cache = {} + self.cache_timeout = 300 # 5分钟缓存 + + def getName(self): + return self.name + + def init(self, extend=''): + pass + + def homeContent(self, filter): + result = {} + classes = [ + {"type_name": "电影", "type_id": "1"}, + {"type_name": "电视剧", "type_id": "2"}, + {"type_name": "动漫", "type_id": "4"}, + {"type_name": "综艺", "type_id": "3"}, + {"type_name": "短剧", "type_id": "64"} + ] + + result['class'] = classes + + # 设置筛选条件 - 为所有分类添加筛选 + filters = {} + for cate in classes: + tid = cate['type_id'] + filters[tid] = [ + {"key": "area", "name": "地区", "value": [ + {"n": "全部", "v": "0"}, + {"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": "0"}, + {"n": "2025", "v": "2025"}, + {"n": "2024", "v": "2024"}, + {"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": "更早", "v": "2004"} + ]}, + {"key": "sort", "name": "排序", "value": [ + {"n": "最新", "v": "d_id"}, + {"n": "最热", "v": "d_hits"}, + {"n": "推荐", "v": "d_score"} + ]} + ] + + result['filters'] = filters + return result + + def homeVideoContent(self): + # 首页推荐直接返回空列表,避免加载问题 + return {'list': []} + + def categoryContent(self, tid, pg, filter, extend): + videos = [] + try: + body = { + "area": extend.get('area', '0'), + "year": extend.get('year', '0'), + "pageSize": "30", + "sort": extend.get('sort', 'd_id'), + "page": str(pg), + "tid": tid + } + + cache_key = f"category_{tid}_{pg}_{hash(str(body))}" + data = self.get_cached_data(cache_key, body, '/App/IndexList/indexList') + + if data and 'list' in data: + for item in data['list']: + vod_continu = item.get('vod_continu', 0) + remarks = '电影' if vod_continu == 0 else f'更新至{vod_continu}集' + + video = { + "vod_id": f"{item.get('vod_id', '')}/{vod_continu}", + "vod_name": item.get('vod_name', ''), + "vod_pic": item.get('vod_pic', ''), + "vod_remarks": remarks + } + videos.append(video) + except Exception as e: + print(f"获取分类内容失败: {e}") + + return { + 'list': videos, + 'page': int(pg), + 'pagecount': 9999, + 'limit': 30, + 'total': 999999 + } + + def detailContent(self, ids): + try: + vod_id = ids[0].split('/')[0] + + # 获取视频详情 + t = str(int(time.time())) + body1 = { + "token_id": "1649412", + "vod_id": vod_id, + "mobile_time": t, + "token": self.token + } + qdata = self.get_data(body1, '/App/IndexPlay/playInfo') + + # 获取播放列表 + body2 = { + "vurl_cloud_id": "2", + "vod_d_id": vod_id + } + jdata = self.get_data(body2, '/App/Resource/Vurl/show') + + if not qdata or 'vodInfo' not in qdata: + return {'list': []} + + vod = qdata['vodInfo'] + + # 构建视频信息 + video_detail = { + "vod_id": vod_id, + "vod_name": vod.get('vod_name', ''), + "vod_pic": vod.get('vod_pic', ''), + "vod_year": vod.get('vod_year', ''), + "vod_area": vod.get('vod_area', ''), + "vod_actor": vod.get('vod_actor', ''), + "vod_director": vod.get('vod_director', ''), + "vod_content": vod.get('vod_use_content', '').strip(), + "vod_play_from": "瓜子专线" + } + + # 构建播放列表 + play_list = [] + if jdata and 'list' in jdata: + for index, item in enumerate(jdata['list']): + if 'play' in item: + n = [] # 播放源名称 + p = [] # 播放参数 + for key, value in item['play'].items(): + if 'param' in value and value['param']: + n.append(key) + p.append(value['param']) + + if p: + play_name = str(index + 1) + if len(jdata['list']) == 1: + play_name = vod.get('vod_name', '') + + play_url = f"{p[-1]}||{'@'.join(n)}" + play_list.append(f"{play_name}${play_url}") + + video_detail["vod_play_url"] = "#".join(play_list) + + return {'list': [video_detail]} + + except Exception as e: + print(f"获取详情失败: {e}") + return {'list': []} + + def searchContent(self, key, quick, pg=1): + videos = [] + try: + body = { + "keywords": key, + "order_val": "1", + "page": str(pg) + } + + # 搜索不使用缓存,确保实时性 + start_time = time.time() + data = self.get_data(body, '/App/Index/findMoreVod', use_cache=False) + end_time = time.time() + + print(f"搜索请求耗时: {end_time - start_time:.2f}秒") + + if data and 'list' in data: + for item in data['list']: + vod_continu = item.get('vod_continu', 0) + remarks = '电影' if vod_continu == 0 else f'更新至{vod_continu}集' + + video = { + "vod_id": f"{item.get('vod_id', '')}/{vod_continu}", + "vod_name": item.get('vod_name', ''), + "vod_pic": item.get('vod_pic', ''), + "vod_remarks": remarks + } + videos.append(video) + except Exception as e: + print(f"搜索失败: {e}") + + return { + 'list': videos, + 'page': int(pg), + 'pagecount': 9999, + 'limit': 30, + 'total': 999999 + } + + def playerContent(self, flag, id, vipFlags): + try: + # 解析播放信息 + parts = id.split('||') + if len(parts) < 2: + return {"parse": 0, "playUrl": "", "url": ""} + + param_str = parts[0] + resolutions = parts[1].split('@') if len(parts) > 1 else [] + + # 解析参数 + params = {} + for pair in param_str.split('&'): + if '=' in pair: + key, value = pair.split('=', 1) + params[key] = value + + # 获取播放链接 + if resolutions: + # 分辨率从大到小排序 + resolutions.sort(key=lambda x: int(x) if x.isdigit() else 0, reverse=True) + + # 使用最大分辨率 + params['resolution'] = resolutions[0] + body = params + + start_time = time.time() + data = self.get_data(body, '/App/Resource/VurlDetail/showOne', use_cache=False) + end_time = time.time() + print(f"播放链接获取耗时: {end_time - start_time:.2f}秒") + + if data and 'url' in data: + return { + "parse": 0, + "playUrl": "", + "url": data['url'], + "header": json.dumps({"User-Agent": "Lavf/57.83.100"}) + } + + return {"parse": 0, "playUrl": "", "url": ""} + + except Exception as e: + print(f"播放解析失败: {e}") + return {"parse": 0, "playUrl": "", "url": ""} + + def isVideoFormat(self, url): + video_formats = ['.m3u8', '.mp4', '.avi', '.mkv', '.flv', '.ts'] + return any(url.lower().endswith(fmt) for fmt in video_formats) + + def manualVideoCheck(self): + pass + + def localProxy(self, params): + return None + + def aes_encrypt(self, text, key, iv): + """AES加密""" + try: + key_bytes = key.encode('utf-8') + iv_bytes = iv.encode('utf-8') + cipher = AES.new(key_bytes, AES.MODE_CBC, iv_bytes) + encrypted = cipher.encrypt(pad(text.encode('utf-8'), AES.block_size)) + return encrypted.hex().upper() + except Exception as e: + print(f"AES加密失败: {e}") + return "" + + def aes_decrypt(self, text, key, iv): + """AES解密""" + try: + key_bytes = key.encode('utf-8') + iv_bytes = iv.encode('utf-8') + cipher = AES.new(key_bytes, AES.MODE_CBC, iv_bytes) + encrypted_bytes = bytes.fromhex(text) + decrypted = unpad(cipher.decrypt(encrypted_bytes), AES.block_size) + return decrypted.decode('utf-8') + except Exception as e: + print(f"AES解密失败: {e}") + return "" + + def rsa_decrypt(self, encrypted_data, private_key): + """RSA解密""" + try: + # 解码base64数据 + encrypted_bytes = base64.b64decode(encrypted_data) + + # 导入私钥 + rsa_key = RSA.import_key(private_key) + cipher = PKCS1_v1_5.new(rsa_key) + + # 解密 + decrypted = cipher.decrypt(encrypted_bytes, None) + return decrypted.decode('utf-8') if decrypted else "" + except Exception as e: + print(f"RSA解密失败: {e}") + return "" + + def get_cached_data(self, cache_key, data, path): + """带缓存的数据获取""" + current_time = time.time() + if cache_key in self.cache: + cached_data, timestamp = self.cache[cache_key] + if current_time - timestamp < self.cache_timeout: + return cached_data + + # 缓存不存在或已过期,重新获取 + result = self.get_data(data, path) + if result: + self.cache[cache_key] = (result, current_time) + return result + + def get_data(self, data, path, use_cache=True): + """获取数据的主要方法""" + try: + # 构建缓存键 + cache_key = f"{path}_{hash(str(data))}" if use_cache else None + + if use_cache and cache_key in self.cache: + cached_data, timestamp = self.cache[cache_key] + if time.time() - timestamp < self.cache_timeout: + return cached_data + + start_time = time.time() + + # AES加密请求数据 + request_key = self.aes_encrypt(json.dumps(data), 'mvXBSW7ekreItNsT', '2U3IrJL8szAKp0Fj') + if not request_key: + return None + + # 生成签名 + t = str(int(time.time())) + keys = "Qmxi5ciWXbQzkr7o+SUNiUuQxQEf8/AVyUWY4T/BGhcXBIUz4nOyHBGf9A4KbM0iKF3yp9M7WAY0rrs5PzdTAOB45plcS2zZ0wUibcXuGJ29VVGRWKGwE9zu2vLwhfgjTaaDpXo4rby+7GxXTktzJmxvneOUdYeHi+PZsThlvPI=" + sign_str = f"token_id=,token={self.token},phone_type=1,request_key={request_key},app_id=1,time={t},keys={keys}*&zvdvdvddbfikkkumtmdwqppp?|4Y!s!2br" + signature = hashlib.md5(sign_str.encode()).hexdigest() + + # 构建请求体 + body = { + 'token': self.token, + 'token_id': '', + 'phone_type': '1', + 'time': t, + 'phone_model': 'xiaomi-22021211rc', + 'keys': keys, + 'request_key': request_key, + 'signature': signature, + 'app_id': '1', + 'ad_version': '1' + } + + # 发送请求 - 设置超时时间 + url = f"{self.host}{path}" + response = self.post(url, headers=self.header, data=body, timeout=10) + + if response.status_code != 200: + print(f"API请求失败: {response.status_code}, 路径: {path}") + return None + + response_data = response.json() + if 'data' not in response_data: + print(f"API返回数据格式错误, 路径: {path}") + return None + + data_response = response_data['data'] + + # RSA解密响应密钥 + private_key = """-----BEGIN PRIVATE KEY----- +MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGAe6hKrWLi1zQmjTT1 +ozbE4QdFeJGNxubxld6GrFGximxfMsMB6BpJhpcTouAqywAFppiKetUBBbXwYsYU +1wNr648XVmPmCMCy4rY8vdliFnbMUj086DU6Z+/oXBdWU3/b1G0DN3E9wULRSwcK +ZT3wj/cCI1vsCm3gj2R5SqkA9Y0CAwEAAQKBgAJH+4CxV0/zBVcLiBCHvSANm0l7 +HetybTh/j2p0Y1sTXro4ALwAaCTUeqdBjWiLSo9lNwDHFyq8zX90+gNxa7c5EqcW +V9FmlVXr8VhfBzcZo1nXeNdXFT7tQ2yah/odtdcx+vRMSGJd1t/5k5bDd9wAvYdI +DblMAg+wiKKZ5KcdAkEA1cCakEN4NexkF5tHPRrR6XOY/XHfkqXxEhMqmNbB9U34 +saTJnLWIHC8IXys6Qmzz30TtzCjuOqKRRy+FMM4TdwJBAJQZFPjsGC+RqcG5UvVM +iMPhnwe/bXEehShK86yJK/g/UiKrO87h3aEu5gcJqBygTq3BBBoH2md3pr/W+hUM +WBsCQQChfhTIrdDinKi6lRxrdBnn0Ohjg2cwuqK5zzU9p/N+S9x7Ck8wUI53DKm8 +jUJE8WAG7WLj/oCOWEh+ic6NIwTdAkEAj0X8nhx6AXsgCYRql1klbqtVmL8+95KZ +K7PnLWG/IfjQUy3pPGoSaZ7fdquG8bq8oyf5+dzjE/oTXcByS+6XRQJAP/5ciy1b +L3NhUhsaOVy55MHXnPjdcTX0FaLi+ybXZIfIQ2P4rb19mVq1feMbCXhz+L1rG8oa +t5lYKfpe8k83ZA== +-----END PRIVATE KEY-----""" + + bodyki_json = self.rsa_decrypt(data_response['keys'], private_key) + if not bodyki_json: + print("RSA解密失败") + return None + + bodyki = json.loads(bodyki_json) + + # AES解密响应数据 + decrypted_data = self.aes_decrypt(data_response['response_key'], bodyki['key'], bodyki['iv']) + if not decrypted_data: + print("AES解密失败") + return None + + result = json.loads(decrypted_data) + + end_time = time.time() + print(f"数据获取耗时: {end_time - start_time:.2f}秒, 路径: {path}") + + # 缓存结果 + if use_cache and cache_key: + self.cache[cache_key] = (result, time.time()) + + return result + + except Exception as e: + print(f"获取数据失败: {e}, 路径: {path}") + return None + + def get_md5(self, text): + """计算MD5""" + return hashlib.md5(text.encode()).hexdigest() + +if __name__ == '__main__': + pass \ No newline at end of file diff --git a/tianjitop/llllo4k/py/瓜子影视.py b/tianjitop/llllo4k/py/瓜子影视.py new file mode 100644 index 00000000..220e1fcb --- /dev/null +++ b/tianjitop/llllo4k/py/瓜子影视.py @@ -0,0 +1,496 @@ +# coding = utf-8 +#!/usr/bin/python +import re +import sys +import json +import time +import base64 +import hashlib +import random +import string +import urllib.parse +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad, unpad +from Crypto.PublicKey import RSA +from Crypto.Cipher import PKCS1_v1_5 +from base.spider import Spider + +sys.path.append('..') + +class Spider(Spider): + def __init__(self): + self.name = "瓜子" + self.hosts = [ + 'https://apinew.uozvr.com', + 'https://api.w32z7vtd.com', + 'https://api.6a7nnf7.com', + 'https://api.umygrx3.com', + 'https://api.rmedphk.com' + ] + self.host_index = 0 + self.host = self.hosts[self.host_index] + + # AES 固定密钥(与Java版一致) + self.AES_KEY = 'OITxa5OqAYjhswxx' + self.AES_IV = 'rCMNwZASNBKZ8mXV' + + # RSA 公钥/私钥 + self.RSA_PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDUM5+/y8sPsWkd1/RQS64X259EUwxFXFE5HlA65MqrxnPs0JqoSRojSDy5QhwvROlaD6TwRQHKMY2OAZ6SnQeUJsChTEFIR9qUkwrs3/MVUMxjsv6JS6Oe/juclyJGTgVmDhB55EafXsD0SQYVj/QXXsxR6ewR5E2kL52yAAD4yQIDAQAB" + self.RSA_PRIVATE_KEY = """-----BEGIN RSA PRIVATE KEY----- +MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGAe6hKrWLi1zQmjTT1 +ozbE4QdFeJGNxubxld6GrFGximxfMsMB6BpJhpcTouAqywAFppiKetUBBbXwYsYU +1wNr648XVmPmCMCy4rY8vdliFnbMUj086DU6Z+/oXBdWU3/b1G0DN3E9wULRSwcK +ZT3wj/cCI1vsCm3gj2R5SqkA9Y0CAwEAAQKBgAJH+4CxV0/zBVcLiBCHvSANm0l7 +HetybTh/j2p0Y1sTXro4ALwAaCTUeqdBjWiLSo9lNwDHFyq8zX90+gNxa7c5EqcW +V9FmlVXr8VhfBzcZo1nXeNdXFT7tQ2yah/odtdcx+vRMSGJd1t/5k5bDd9wAvYdI +DblMAg+wiKKZ5KcdAkEA1cCakEN4NexkF5tHPRrR6XOY/XHfkqXxEhMqmNbB9U34 +saTJnLWIHC8IXys6Qmzz30TtzCjuOqKRRy+FMM4TdwJBAJQZFPjsGC+RqcG5UvVM +iMPhnwe/bXEehShK86yJK/g/UiKrO87h3aEu5gcJqBygTq3BBBoH2md3pr/W+hUM +WBsCQQChfhTIrdDinKi6lRxrdBnn0Ohjg2cwuqK5zzU9p/N+S9x7Ck8wUI53DKm8 +jUJE8WAG7WLj/oCOWEh+ic6NIwTdAkEAj0X8nhx6AXsgCYRql1klbqtVmL8+95KZ +K7PnLWG/IfjQUy3pPGoSaZ7fdquG8bq8oyf5+dzjE/oTXcByS+6XRQJAP/5ciy1b +L3NhUhsaOVy55MHXnPjdcTX0FaLi+ybXZIfIQ2P4rb19mVq1feMbCXhz+L1rG8oa +t5lYKfpe8k83ZA== +-----END RSA PRIVATE KEY-----""" + + self.DEVICE_OLD_KEY = "aLFBMWpxBrIDAD1Si/KVvm41" + + # 设备信息(随机生成) + self.deviceId = str(864150060000000 + random.randint(0, 9999)) + self.deviceKey = ''.join(random.choices('0123456789ABCDEF', k=40)) # 20字节hex大写 + self.token = "" + self.token_id = "" + self.registered = False + + self.header = { + 'User-Agent': 'Lavf/57.83.100', + 'code': 'GZ0369', + 'deviceId': self.deviceId, + 'lang': 'zh_cn', + 'Cache-Control': 'no-cache', + 'Content-Type': 'application/x-www-form-urlencoded', + 'Version': '2604028', + 'PackageName': 'com.ae06aebdbb.y286327f5a.ofe849883320260517', + 'Ver': '3.0.3.2', + 'api-ver': '3.0.3.2', + 'Referer': self.host + } + + self.cache = {} + self.cache_timeout = 300 + + # 初始化token + self.init_token() + + def getName(self): + return self.name + + def init(self, extend=''): + pass + + # ---------- 设备注册与认证 ---------- + def init_token(self): + """初始化token:注册设备 -> 刷新""" + print("===== 初始化设备认证 =====") + try: + if not self.registered: + self.sign_up() + # 刷新获取最终token + self.refresh_token() + except Exception as e: + print(f"初始化token失败: {e}") + # 兜底使用原有硬编码(几乎没用) + self.token = '024212ef0975c5306a1434e113a46463.bc77313e11a248558a6ca244ca980944ec3421fa480c50e0229ad91f1cb15aea582603202cd71796885c9e5163e500f1b72f737059aff1ddb8beea47c5a331d6760540345b7f88b2302a0e6e09589f9dcf3ff9175d8c905f990203f5fc04748008ea7a366571cbf5b09509a873dcfba3cf1d5590385f5f7ef6e01d1850974aa220eb5178c89e61c24411af9b9a19435e.06fde789ece48d9b33c5dc857e04e9b5838f08264d928b87237d3476c4484b46' + + def sign_up(self): + """注册设备""" + print("注册新设备...") + params = { + "new_key": self.deviceKey, + "old_key": self.DEVICE_OLD_KEY, + "phone_type": 1, + "code": "" + } + result = self._auth_request('/App/Authentication/Device/signUp', params) + self._apply_auth(result) + self.registered = True + + def sign_in(self): + """登录设备""" + print("设备登录...") + params = { + "new_key": self.deviceKey, + "old_key": self.DEVICE_OLD_KEY + } + result = self._auth_request('/App/Authentication/Device/signIn', params) + self._apply_auth(result) + + def _apply_auth(self, result): + """从认证响应中提取token""" + new_token = result.get('token', '') + if not new_token: + raise Exception("认证失败,无token返回: {}".format(result)) + self.token = new_token + new_token_id = result.get('app_user_id', '') + if new_token_id: + self.token_id = new_token_id + print(f"获取token成功, token前缀: {self.token[:30]}...") + + def refresh_token(self): + """刷新token""" + print("刷新token...") + result = self._auth_request('/App/Authentication/Authenticator/refresh', {}) + self._apply_auth(result) + + def _auth_request(self, path, params): + """认证类请求(不需要ensure_token)""" + return self._send_encrypted_request(params, path, is_auth=True) + + # ---------- 业务请求核心(修复加密与签名) ---------- + def ensure_token(self): + """确保token有效,如未就绪则重新获取""" + if not self.token or not self.token_id: + if self.registered: + self.sign_in() + else: + self.sign_up() + self.refresh_token() + + def _send_encrypted_request(self, data, path, is_auth=False): + """ + 发送加密请求,返回解密后的字典 + :param data: 业务参数字典 + :param path: 请求路径 + :param is_auth: 是否为认证类请求(signUp/signIn/refresh),此时不使用ensure_token + """ + try: + if not is_auth: + self.ensure_token() + + # 1. 将参数转为JSON并AES加密 + json_params = json.dumps(data) + encrypted = self.aes_encrypt(json_params, self.AES_KEY, self.AES_IV) + request_key = encrypted.upper() # Java中是bytesToHex(encrypted).toUpperCase() + + # 2. 生成keys (RSA加密 iv/key JSON) + key_json = json.dumps({"iv": self.AES_IV, "key": self.AES_KEY}) + keys = self.rsa_encrypt(key_json, self.RSA_PUBLIC_KEY) + + # 3. 生成签名 + t = str(int(time.time())) + sign_str = f"token_id=,token={self.token},phone_type=1,request_key={request_key},app_id=1,time={t},keys={keys}*&zvdvdvddbfikkkumtmdwqppp?|4Y!s!2br" + signature = self.get_md5(sign_str) # 已改为大写 + + # 4. 构建请求体 + body = { + 'token': self.token, + 'token_id': '', + 'phone_type': '1', + 'time': t, + 'phone_model': 'xiaomi-25031', # 与Java版保持一致 + 'keys': keys, + 'request_key': request_key, + 'signature': signature, + 'app_id': '1', + 'ad_version': '1' + } + + # 5. 发送请求 + url = f"{self.host}{path}" + response = self.post(url, headers=self.header, data=body, timeout=10) + + if response.status_code != 200: + raise Exception(f"HTTP {response.status_code}") + + resp_json = response.json() + # 检查业务code(若不为200可能token过期) + if 'code' in resp_json and resp_json['code'] != 200: + print(f"业务错误码: {resp_json['code']}, 信息: {resp_json}") + # 如果不是认证请求,尝试重新获取token后重试一次(这里简单处理,外层get_data已有重试) + raise Exception("业务错误") + + data_section = resp_json.get('data') + if not data_section: + raise Exception("响应缺少data字段") + + encrypted_response = data_section.get('response_key', '') + encrypted_keys = data_section.get('keys', '') + + # 6. 解密响应 + decrypted_keys_json = self.rsa_decrypt(encrypted_keys, self.RSA_PRIVATE_KEY) + key_info = json.loads(decrypted_keys_json) + resp_key = key_info['key'] + resp_iv = key_info['iv'] + decrypted_data = self.aes_decrypt(encrypted_response, resp_key, resp_iv) + return json.loads(decrypted_data) + + except Exception as e: + print(f"请求失败 [{path}]: {e}") + return None + + def get_data(self, data, path, use_cache=True): + """带重试和域名轮询的数据获取(保持原框架)""" + try: + cache_key = f"{path}_{hash(str(data))}" if use_cache else None + if use_cache and cache_key in self.cache: + cached_data, timestamp = self.cache[cache_key] + if time.time() - timestamp < self.cache_timeout: + return cached_data + + for attempt in range(3): + tried = 0 + while tried < len(self.hosts): + self.host = self.hosts[self.host_index] + self.header['Referer'] = self.host + result = self._send_encrypted_request(data, path) + if result is not None: + print(f"请求成功: {path}, 域名: {self.host}") + if use_cache and cache_key: + self.cache[cache_key] = (result, time.time()) + return result + + # 切换到下一个域名 + self.host_index = (self.host_index + 1) % len(self.hosts) + tried += 1 + + # 所有域名失败,尝试重新认证并重试 + if attempt < 2: + print("所有域名失败,尝试重新认证...") + try: + self.ensure_token() + except: + pass + self.host_index = 0 + else: + break + return None + except Exception as e: + print(f"get_data异常: {e}") + return None + + # ---------- 加解密工具 ---------- + def aes_encrypt(self, text, key, iv): + try: + key_bytes = key.encode('utf-8') + iv_bytes = iv.encode('utf-8') + cipher = AES.new(key_bytes, AES.MODE_CBC, iv_bytes) + encrypted = cipher.encrypt(pad(text.encode('utf-8'), AES.block_size)) + return encrypted.hex().upper() + except Exception as e: + print(f"AES加密失败: {e}") + return "" + + def aes_decrypt(self, text, key, iv): + try: + key_bytes = key.encode('utf-8') + iv_bytes = iv.encode('utf-8') + cipher = AES.new(key_bytes, AES.MODE_CBC, iv_bytes) + encrypted_bytes = bytes.fromhex(text) + decrypted = unpad(cipher.decrypt(encrypted_bytes), AES.block_size) + return decrypted.decode('utf-8') + except Exception as e: + print(f"AES解密失败: {e}") + return "" + + def rsa_encrypt(self, text, public_key_str): + """RSA公钥加密(PKCS1v1.5)""" + try: + key = RSA.import_key("-----BEGIN PUBLIC KEY-----\n" + public_key_str + "\n-----END PUBLIC KEY-----") + cipher = PKCS1_v1_5.new(key) + encrypted = cipher.encrypt(text.encode('utf-8')) + return base64.b64encode(encrypted).decode('utf-8') + except Exception as e: + print(f"RSA加密失败: {e}") + return "" + + def rsa_decrypt(self, encrypted_data, private_key_str): + """RSA私钥解密""" + try: + encrypted_bytes = base64.b64decode(encrypted_data) + rsa_key = RSA.import_key(private_key_str) + cipher = PKCS1_v1_5.new(rsa_key) + decrypted = cipher.decrypt(encrypted_bytes, None) + return decrypted.decode('utf-8') if decrypted else "" + except Exception as e: + print(f"RSA解密失败: {e}") + return "" + + def get_md5(self, text): + return hashlib.md5(text.encode()).hexdigest().upper() # 与Java一致大写 + + # ---------- 业务方法(不变) ---------- + def homeContent(self, filter): + result = {} + classes = [ + {"type_name": "电影", "type_id": "1"}, + {"type_name": "电视剧", "type_id": "2"}, + {"type_name": "动漫", "type_id": "4"}, + {"type_name": "综艺", "type_id": "3"}, + {"type_name": "短剧", "type_id": "64"} + ] + result['class'] = classes + filters = {} + for cate in classes: + tid = cate['type_id'] + filters[tid] = [ + {"key": "area", "name": "地区", "value": [ + {"n": "全部", "v": "0"}, {"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": "0"}, {"n": "2025", "v": "2025"}, {"n": "2024", "v": "2024"}, + {"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": "更早", "v": "2004"} + ]}, + {"key": "sort", "name": "排序", "value": [ + {"n": "最新", "v": "d_id"}, {"n": "最热", "v": "d_hits"}, {"n": "推荐", "v": "d_score"} + ]} + ] + result['filters'] = filters + return result + + def homeVideoContent(self): + return {'list': []} + + def categoryContent(self, tid, pg, filter, extend): + videos = [] + try: + body = { + "area": extend.get('area', '0'), + "year": extend.get('year', '0'), + "pageSize": "30", + "sort": extend.get('sort', 'd_id'), + "page": str(pg), + "tid": tid + } + cache_key = f"category_{tid}_{pg}_{hash(str(body))}" + data = self.get_cached_data(cache_key, body, '/App/IndexList/indexList') + if data and 'list' in data: + for item in data['list']: + vod_continu = item.get('vod_continu', 0) + remarks = '电影' if vod_continu == 0 else f'更新至{vod_continu}集' + video = { + "vod_id": f"{item.get('vod_id', '')}/{vod_continu}", + "vod_name": item.get('vod_name', ''), + "vod_pic": item.get('vod_pic', ''), + "vod_remarks": remarks + } + videos.append(video) + except Exception as e: + print(f"获取分类内容失败: {e}") + return {'list': videos, 'page': int(pg), 'pagecount': 9999, 'limit': 30, 'total': 999999} + + def detailContent(self, ids): + try: + vod_id = ids[0].split('/')[0] + t = str(int(time.time())) + body1 = {"token_id": self.token_id, "vod_id": vod_id, "mobile_time": t, "token": self.token} + qdata = self.get_data(body1, '/App/IndexPlay/playInfo') + body2 = {"vurl_cloud_id": "2", "vod_d_id": vod_id} + jdata = self.get_data(body2, '/App/Resource/Vurl/show') + if not qdata or 'vodInfo' not in qdata: + return {'list': []} + vod = qdata['vodInfo'] + video_detail = { + "vod_id": vod_id, + "vod_name": vod.get('vod_name', ''), + "vod_pic": vod.get('vod_pic', ''), + "vod_year": vod.get('vod_year', ''), + "vod_area": vod.get('vod_area', ''), + "vod_actor": vod.get('vod_actor', ''), + "vod_director": vod.get('vod_director', ''), + "vod_content": vod.get('vod_use_content', '').strip(), + "vod_play_from": "瓜子影视" + } + play_list = [] + if jdata and 'list' in jdata: + for index, item in enumerate(jdata['list']): + if 'play' in item: + n, p = [], [] + for key, value in item['play'].items(): + if 'param' in value and value['param']: + n.append(key) + p.append(value['param']) + if p: + play_name = str(index + 1) if len(jdata['list']) != 1 else vod.get('vod_name', '') + play_url = f"{p[-1]}||{'@'.join(n)}" + play_list.append(f"{play_name}${play_url}") + video_detail["vod_play_url"] = "#".join(play_list) + return {'list': [video_detail]} + except Exception as e: + print(f"获取详情失败: {e}") + return {'list': []} + + def searchContent(self, key, quick, pg=1): + videos = [] + try: + body = {"keywords": key, "order_val": "1", "page": str(pg)} + data = self.get_data(body, '/App/Index/findMoreVod', use_cache=False) + if data and 'list' in data: + for item in data['list']: + vod_continu = item.get('vod_continu', 0) + remarks = '电影' if vod_continu == 0 else f'更新至{vod_continu}集' + videos.append({ + "vod_id": f"{item.get('vod_id', '')}/{vod_continu}", + "vod_name": item.get('vod_name', ''), + "vod_pic": item.get('vod_pic', ''), + "vod_remarks": remarks + }) + except Exception as e: + print(f"搜索失败: {e}") + return {'list': videos, 'page': int(pg), 'pagecount': 9999, 'limit': 30, 'total': 999999} + + def playerContent(self, flag, id, vipFlags): + try: + parts = id.split('||') + if len(parts) < 2: + return {"parse": 0, "playUrl": "", "url": ""} + param_str = parts[0] + resolutions = parts[1].split('@') if len(parts) > 1 else [] + params = {} + for pair in param_str.split('&'): + if '=' in pair: + key, value = pair.split('=', 1) + params[key] = value + if resolutions: + resolutions.sort(key=lambda x: int(x) if x.isdigit() else 0, reverse=True) + params['resolution'] = resolutions[0] + data = self.get_data(params, '/App/Resource/VurlDetail/showOne', use_cache=False) + if data and 'url' in data: + return {"parse": 0, "playUrl": "", "url": data['url'], + "header": json.dumps({"User-Agent": "Lavf/57.83.100", "Referer": "http://WJiZxLXA2.com/"}), 'danmaku': 'http://127.0.0.1:9978/proxy?do=diydanmu'} + return {"parse": 0, "playUrl": "", "url": ""} + except Exception as e: + print(f"播放解析失败: {e}") + return {"parse": 0, "playUrl": "", "url": ""} + + def isVideoFormat(self, url): + video_formats = ['.m3u8', '.mp4', '.avi', '.mkv', '.flv', '.ts'] + return any(url.lower().endswith(fmt) for fmt in video_formats) + + def manualVideoCheck(self): + pass + + def localProxy(self, params): + return None + + def get_cached_data(self, cache_key, data, path): + current_time = time.time() + if cache_key in self.cache: + cached_data, timestamp = self.cache[cache_key] + if current_time - timestamp < self.cache_timeout: + return cached_data + result = self.get_data(data, path) + if result: + self.cache[cache_key] = (result, current_time) + return result + +if __name__ == '__main__': + pass \ No newline at end of file diff --git a/tianjitop/llllo4k/py/豌豆PRO.py b/tianjitop/llllo4k/py/豌豆PRO.py new file mode 100644 index 00000000..353d6785 --- /dev/null +++ b/tianjitop/llllo4k/py/豌豆PRO.py @@ -0,0 +1,533 @@ +# coding: utf-8 +# 豌豆PRO https://s2ykfzb.cn - FongMi/TVBox Spider +# HTML站:本地分类筛选、多线路详情、播放页直链优先解析 +import re +import json +from urllib.parse import quote, unquote, urljoin + +try: + from bs4 import BeautifulSoup, NavigableString, Tag +except Exception: + BeautifulSoup = None + NavigableString = str + Tag = object + +from base.spider import Spider as BaseSpider + + +class Spider(BaseSpider): + def __init__(self): + self.host = 'https://s2ykfzb.cn' + self.extend = '' + self.headers = { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 14; Mobile) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36', + 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', + 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8', + 'Referer': self.host + '/' + } + self.classes = [ + {'type_id': '1', 'type_name': '电影'}, + {'type_id': '2', 'type_name': '电视剧'}, + {'type_id': '3', 'type_name': '综艺'}, + {'type_id': '4', 'type_name': '动漫'}, + {'type_id': '9', 'type_name': '短视频'}, + {'type_id': '51', 'type_name': '即将上映'}, + ] + self.type_filters = { + '1': [('全部', '1'), ('喜剧片', '35'), ('动作片', '36'), ('爱情片', '37'), ('科幻片', '38'), ('恐怖片', '39'), ('剧情片', '40'), ('战争片', '41')], + '2': [('全部', '2'), ('国产剧', '42'), ('港台剧', '43'), ('日韩剧', '44'), ('欧美剧', '45')], + '3': [('全部', '3')], + '4': [('全部', '4')], + '9': [('全部', '9')], + '51': [('全部', '51')], + } + self.years = ['2026', '2025', '2024', '2023', '2022', '2021', '2020', '2019', '2018', '2017', '2016'] + self.letters = list('ABCDEFGHIJKLMNOPQRSTUVWXYZ') + self.filters = self._make_filters() + + def getName(self): + return '豌豆PRO' + + def getDependence(self): + return [] + + def init(self, extend=''): + self.extend = extend or '' + + def homeContent(self, filter): + return {'class': self.classes, 'filters': self.filters if filter else {}} + + def getHomeContent(self, filter): + return self.homeContent(filter) + + def homeVideoContent(self): + html = self._get_html(self.host + '/') + return {'list': self._parse_list(html)[:36]} + + def categoryContent(self, tid, pg, filter, extend): + page = self._safe_int(pg, 1) + url = self._build_category_url(str(tid), page, extend or {}) + html = self._get_html(url) + if self._is_no_result(html): + return {'list': [], 'page': page, 'pagecount': 1, 'limit': 24, 'total': 0} + videos = self._parse_list(html) + pagecount = self._parse_pagecount(html) + return { + 'list': videos, + 'page': page, + 'pagecount': pagecount, + 'limit': len(videos) if videos else 24, + 'total': pagecount * (len(videos) if videos else 24) + } + + def detailContent(self, ids): + raw = str(ids[0]) if isinstance(ids, list) and ids else str(ids) + vod_id = self._real_id(raw) + html = self._get_html(self.host + '/sykfgg/%s.html' % vod_id) + soup = self._soup(html) + vod = { + 'vod_id': vod_id, + 'vod_name': self._detail_title(soup, html), + 'vod_pic': self._detail_pic(soup), + 'type_name': self._extract_info(soup, '类型'), + 'vod_year': self._extract_year(soup, html), + 'vod_area': self._extract_info(soup, '地区'), + 'vod_remarks': self._extract_remark(soup), + 'vod_actor': self._extract_people(soup, ['main-actors2', 'actors5'], ['主演:', '主演', '演员:', '演员']), + 'vod_director': self._extract_people(soup, ['director1'], ['导演:', '导演']), + 'vod_content': self._extract_content(soup, html), + 'vod_play_from': '', + 'vod_play_url': '' + } + play_from, play_url = self._parse_play_sources(soup, html) + vod['vod_play_from'] = '$$$'.join(play_from) + vod['vod_play_url'] = '$$$'.join(play_url) + return {'list': [vod]} + + def searchContent(self, key, quick, pg='1'): + page = self._safe_int(pg, 1) + kw = quote(key or '') + # 站内搜索表单是 GET: /search/-------------.html?wd=xxx + # 不能用 /search/关键词------------.html,否则会落到伪详情/推荐页,出现货不对板。 + url = self.host + '/search/-------------.html?wd=%s' % kw + if page > 1: + url += '&page=%s' % page + html = self._get_html(url) + if self._is_no_result(html): + return {'list': [], 'page': page, 'pagecount': 1, 'limit': 20, 'total': 0} + videos = self._parse_search_list(html, key or '') + pagecount = self._parse_pagecount(html) + return {'list': videos, 'page': page, 'pagecount': pagecount, 'limit': len(videos) if videos else 20, 'total': pagecount * (len(videos) if videos else 20)} + + def playerContent(self, flag, id, vipFlags): + play_url = unquote(id or '') + if not play_url: + return {'parse': 0, 'url': ''} + if self.isVideoFormat(play_url): + return {'parse': 0, 'url': play_url, 'header': self.headers} + final_url, ref = self._resolve_play_url(play_url) + if final_url: + return {'parse': 0, 'url': final_url, 'header': self._media_headers(ref)} + return {'parse': 1, 'url': play_url, 'header': self.headers} + + def isVideoFormat(self, url): + return bool(re.search(r'\.(m3u8|mp4|flv|m4v|mov)(\?|$)', url or '', re.I)) + + def manualVideoCheck(self): + return True + + def liveContent(self, url): + return '' + + def localProxy(self, param): + return [404, 'text/plain', 'not found'] + + def action(self, action): + return None + + def destroy(self): + pass + + def _make_filters(self): + data = {} + for tid in [x['type_id'] for x in self.classes]: + vals = [{'n': n, 'v': v} for n, v in self.type_filters.get(tid, [('全部', tid)])] + years = [{'n': '全部', 'v': ''}] + [{'n': y, 'v': y} for y in self.years] + letters = [{'n': '全部', 'v': ''}] + [{'n': c, 'v': c} for c in self.letters] + data[tid] = [ + {'key': 'class', 'name': '类型', 'value': vals}, + {'key': 'year', 'name': '年份', 'value': years}, + {'key': 'letter', 'name': '字母', 'value': letters}, + ] + return data + + def _fetch_text(self, url, headers=None): + res = self.fetch(url, headers=headers or self.headers, timeout=10) + try: + return res.text + except Exception: + try: + return res.content.decode('utf-8', errors='ignore') + except Exception: + return '' + + def _get_html(self, url): + try: + return self._fetch_text(url) + except Exception as e: + self._log({'action': 'fetch_fail', 'url': url, 'error': str(e)}) + return '' + + def _soup(self, html): + if not BeautifulSoup: + return None + return BeautifulSoup(html or '', 'html.parser') + + def _log(self, data): + try: + self.log(data) + except Exception: + pass + + def _abs(self, url, base=None): + if not url: + return '' + url = url.strip() + if url.startswith('//'): + return 'https:' + url + return urljoin(base or self.host, url) + + def _clean(self, text): + if not text: + return '' + text = re.sub(r'[\r\n\t]+', ' ', str(text)) + text = re.sub(r'\s{2,}', ' ', text) + return text.strip() + + def _safe_int(self, val, default=1): + try: + return int(val) + except Exception: + return default + + def _real_id(self, raw): + m = re.search(r'(\d+)', raw or '') + return m.group(1) if m else raw + + def _build_category_url(self, tid, page, extend): + if isinstance(extend, str): + try: + extend = json.loads(extend) + except Exception: + extend = {} + cls = str(extend.get('class') or extend.get('type') or tid) + year = str(extend.get('year') or '') + letter = str(extend.get('letter') or '') + raw = str(extend.get('raw') or '') + if raw: + if page > 1: + m = re.search(r'/sykfggshow/(\d+)', raw) + cid = m.group(1) if m else cls + return self.host + '/sykfggtype/%s-%s.html' % (cid, page) + return self._abs(raw) + if page > 1: + return self.host + '/sykfggtype/%s-%s.html' % (cls, page) + if letter: + return self.host + '/sykfggshow/%s-----%s------.html' % (cls, letter) + if year: + return self.host + '/sykfggshow/%s----%s-------.html' % (cls, year) + if cls != tid: + return self.host + '/sykfggshow/%s-----------.html' % cls + return self.host + '/sykfggtype/%s.html' % tid + + def _is_no_result(self, html): + return bool(re.search(r'没有找到您想要的结果|没有找到.*?结果|搜索无结果|暂无数据', html or '', re.S)) + + def _parse_list(self, html): + soup = self._soup(html) + if not soup: + return [] + out, seen = [], set() + for a in soup.find_all('a', href=re.compile(r'/sykfgg/\d+\.html')): + try: + href = a.get('href') or '' + m = re.search(r'/sykfgg/(\d+)\.html', href) + if not m: + continue + vid = m.group(1) + if vid in seen: + continue + img = a.find('img') + name, pic = '', '' + if img: + name = img.get('alt') or '' + pic = img.get('data-src') or img.get('src') or '' + if not name: + nt = a.find(class_=re.compile(r'ys-name|actor-name|name|title')) + name = nt.get_text(' ', strip=True) if nt else '' + remark = '' + rt = a.find(class_=re.compile(r'role|remark|last|num|score')) + if rt: + remark = rt.get_text(' ', strip=True) + name = self._clean(name) + if not name or name.lower() == 'cover': + continue + seen.add(vid) + out.append({'vod_id': vid, 'vod_name': name, 'vod_pic': self._abs(pic), 'vod_remarks': self._clean(remark)}) + except Exception as e: + self._log({'action': 'parse_list_item_fail', 'error': str(e)}) + return out + + def _parse_search_list(self, html, key): + soup = self._soup(html) + if not soup: + return [] + box = None + hot = soup.find(class_=re.compile(r'hot-class')) + if hot: + p = hot + for _ in range(8): + p = p.find_next_sibling() if p else None + if not p: + break + title = p.get_text(' ', strip=True)[:30] + if '热门推荐' in title: + break + cls = ' '.join(p.get('class') or []) if hasattr(p, 'get') else '' + # 搜索结果区即使为空也要使用,不能继续串到下面热门推荐。 + if 'list-component6' in cls or p.find(class_=re.compile(r'ysList6')): + box = p + break + if not box: + box = soup.find(class_=re.compile(r'ysList6|list-component6')) + if not box: + return [] + videos = self._parse_list(str(box)) + nk = self._norm_key(key) + if nk: + strict = [v for v in videos if nk in self._norm_key(v.get('vod_name', ''))] + if strict: + return strict + return videos + + def _norm_key(self, text): + text = self._clean(text).lower() + return re.sub(r'[\s\-—_\[\]【】()()::·,,.。]+', '', text) + + def _parse_pagecount(self, html): + patterns = [ + r'class=["\']total["\'][^>]*>\s*(\d+)\s*<', + r'<span[^>]+class=["\']now["\'][^>]*>\s*\d+\s*</span>\s*/\s*<span[^>]+class=["\']total["\'][^>]*>\s*(\d+)', + r'/sykfggtype/\d+-(\d+)\.html[^>]*>\s*<div>\s*尾页', + r'共\s*(\d+)\s*页' + ] + for p in patterns: + m = re.search(p, html or '', re.S) + if m: + return self._safe_int(m.group(1), 1) + return 1 + + def _detail_title(self, soup, html): + if soup: + for cls in [r'ys-name18|ys-name21', r'title|name']: + t = soup.find(class_=re.compile(cls)) + if t: + return self._clean(t.get_text(' ', strip=True)) + h1 = soup.find('h1') + if h1: + return self._clean(h1.get_text(' ', strip=True)) + mt = soup.find('meta', attrs={'name': 'keywords'}) + if mt: + return self._clean((mt.get('content') or '').split('完整版')[0].split('在线')[0]) + m = re.search(r'<title>《?([^《》<]+)》?', html or '') + return self._clean(m.group(1)) if m else '' + + def _detail_pic(self, soup): + if not soup: + return '' + img = soup.select_one('.poster5 img') or soup.find('img', attrs={'data-src': re.compile(r'upload/vod|cover|pic')}) or soup.find('img') + return self._abs((img.get('data-src') or img.get('src') or '') if img else '') + + def _extract_people(self, soup, class_names, labels): + if not soup: + return '' + for cls in class_names: + tag = soup.find(class_=re.compile(cls)) + if not tag: + continue + # 主演/导演块里有“更多...”展开按钮,不能当演员名;优先只取 a 标签人名。 + names = [] + for a in tag.find_all('a'): + name = self._clean(a.get_text(' ', strip=True).replace('\xa0', ' ')) + if name and not re.search(r'更多|展开|收起', name): + names.append(name) + if names: + return self._clean(' '.join(names)) + text = tag.get_text(' ', strip=True) + for lab in labels: + text = text.replace(lab, '') + text = re.sub(r'更多\s*\.*|展开|收起', '', text) + return self._clean(text) + return '' + + def _extract_info(self, soup, label): + if not soup: + return '' + nodes = soup.find_all(string=re.compile(label)) + for node in nodes: + p = getattr(node, 'parent', None) + if not p: + continue + text = p.get_text(' ', strip=True) + if label in text and len(text) < 80: + text = text.replace(label + ':', '').replace(label + ':', '').replace(label, '') + return self._clean(text) + return '' + + def _extract_year(self, soup, html): + if soup: + tag = soup.find(class_=re.compile(r'year1|update-time')) + if tag: + m = re.search(r'(19|20)\d{2}', tag.get_text(' ', strip=True)) + if m: + return m.group(0) + m = re.search(r'(19|20)\d{2}', html or '') + return m.group(0) if m else '' + + def _extract_remark(self, soup): + if not soup: + return '' + tag = soup.find(class_=re.compile(r'role|remark|last|update')) + return self._clean(tag.get_text(' ', strip=True)) if tag else '' + + def _extract_content(self, soup, html): + if soup: + tag = soup.find(class_=re.compile(r'Synopsis-word')) or soup.find(class_=re.compile(r'vod-descri')) + if tag: + # 该站简介里常混入图片、相关搜索、网友评论;用整块文本切割,比只取首个子节点更完整。 + text = tag.get_text(' ', strip=True) + text = re.split(r'(?:[\u4e00-\u9fa5A-Za-z0-9]{0,12})网友评论|影院网友|电影网网友|热门', text)[0] + text = re.split(r'相关搜索[::]?', text)[0] + text = re.sub(r'\s+', ' ', text) + text = self._clean(text) + if text: + return text + meta = soup.find('meta', attrs={'name': 'description'}) + if meta: + text = meta.get('content') or '' + text = re.sub(r'^.*?剧情介绍[::]', '', text) + return self._clean(text.replace('...', '')) + return '' + def _parse_play_sources(self, soup, html): + play_from, play_urls = [], [] + if soup: + # 详情页真实结构是:list-name23(name17=线路名) 后面紧跟 list-number1(该线路剧集)。 + # 注意该站 sid 与显示线路名不一定一致,例如 sid=1 页面标题/详情显示“线路2”,不能按 sid 排序硬改名。 + title_blocks = soup.find_all('div', class_=re.compile(r'list-name23')) + for title_block in title_blocks: + title_tag = title_block.find('div', class_=re.compile(r'name17')) + if not title_tag: + continue + source_name = self._clean(title_tag.get_text(' ', strip=True)) + if not source_name or re.search(r'演员表|剧情介绍|相关推荐|热门推荐|友情链接|网站地图', source_name): + continue + + block = None + probe = title_block + for _ in range(8): + probe = probe.find_next_sibling() if probe else None + if not probe: + break + # 遇到下一个标题块说明当前线路没有剧集,停止,避免串到下一组。 + cls = ' '.join(probe.get('class') or []) if hasattr(probe, 'get') else '' + if 'list-name23' in cls: + break + if probe.find('a', href=re.compile(r'/sykfggplay/\d+-\d+-\d+\.html')): + block = probe + break + if not block: + continue + + eps, seen = [], set() + for a in block.find_all('a', href=re.compile(r'/sykfggplay/\d+-\d+-\d+\.html')): + href = a.get('href') or '' + full = self._abs(href) + if full in seen: + continue + seen.add(full) + name = self._clean(a.get_text(' ', strip=True)) + if not name: + mm = re.search(r'-(\d+)\.html', href) + name = '第%s集' % mm.group(1) if mm else '播放' + eps.append('%s$%s' % (name, full)) + if eps: + play_from.append(source_name) + play_urls.append('#'.join(eps)) + if play_from: + return play_from, play_urls + + + links = re.findall(r'/sykfggplay/(\d+)-(\d+)-(\d+)\.html', html or '') + source_map = {} + for vid, sid, nid in links: + source_map.setdefault(sid, set()).add((self._safe_int(nid, 1), '/sykfggplay/%s-%s-%s.html' % (vid, sid, nid))) + for sid in sorted(source_map.keys(), key=lambda x: self._safe_int(x, 999)): + eps = [] + for nid, href in sorted(list(source_map[sid]), key=lambda x: x[0]): + eps.append('第%s集$%s' % (nid, self._abs(href))) + if eps: + play_from.append('线路%s' % sid) + play_urls.append('#'.join(eps)) + return play_from, play_urls + + def _resolve_play_url(self, play_url): + url = self._abs(play_url) + html = self._get_html(url) + candidates = [] + m = re.search(r'player_aaaa\s*=\s*({.*?})\s*</script>', html or '', re.S) + if m: + try: + data = json.loads(m.group(1)) + pu = unquote(data.get('url') or '') + if pu: + candidates.append(pu) + except Exception as e: + self._log({'action': 'player_json_fail', 'error': str(e)}) + for p in [ + r'["\']url["\']\s*:\s*["\']([^"\']+)["\']', + r'MacPlayer\.PlayUrl\s*=\s*["\']([^"\']+)["\']', + r'now\s*=\s*["\']([^"\']+)["\']', + r'(https?://[^\s"\'<>]+?\.(?:m3u8|mp4)[^\s"\'<>]*)' + ]: + for x in re.findall(p, html or '', re.S): + if x and x not in candidates: + candidates.append(unquote(x)) + for c in candidates: + c = self._abs(c, url) + if self.isVideoFormat(c): + return c, url + if re.search(r'(player|jx|api\.php|share|url=)', c, re.I): + final = self._resolve_second(c) + if final: + return final, c + return '', url + + def _resolve_second(self, url): + html = self._get_html(url) + for p in [ + r'var\s+main\s*=\s*["\']([^"\']+)["\']', + r'["\'](?:url|video|src)["\']\s*:\s*["\']([^"\']+)["\']', + r'(https?://[^\s"\'<>]+?\.(?:m3u8|mp4)[^\s"\'<>]*)' + ]: + for x in re.findall(p, html or '', re.S): + x = unquote(x) + full = self._abs(x, url) + if self.isVideoFormat(full): + return full + return '' + + def _media_headers(self, referer): + h = dict(self.headers) + if referer: + h['Referer'] = referer + return h \ No newline at end of file diff --git a/tianjitop/llllo4k/py/边缘影视.py b/tianjitop/llllo4k/py/边缘影视.py new file mode 100644 index 00000000..16df39d4 --- /dev/null +++ b/tianjitop/llllo4k/py/边缘影视.py @@ -0,0 +1,337 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import re, os, sys, time, json, uuid, binascii +from urllib.parse import urlparse +from concurrent.futures import ThreadPoolExecutor +from base.spider import Spider +from base64 import b64encode, b64decode +from Crypto.PublicKey import RSA +from Crypto.Cipher import AES, PKCS1_v1_5 +from Crypto.Util.Padding import unpad, pad +from Crypto.Hash import MD5 +sys.path.append('..') + +class Spider(Spider): + + def init(self, extend=""): + self.host = self.gethost() + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + headers = { + 'AppID': '534', + 'app_id': '534', + 'version': '1.0.3', + 'package': 'com.hjmore.wallpaper', + 'user_id': '3507f394e83d2424', + 'user-id': '3507f394e83d2424', + 'app_name': 'lanlan', + 'app-name': 'lanlan', + 'Content-Type': 'application/json; charset=utf-8;', + 'User-Agent': 'okhttp/4.9.0' + } + + def homeContent(self, filter): + hdata = self.getdata('/api.php/provide/index', self.getbody({'tid': '0'})) + vlist = hdata['data'].get('tj', []) + result = {} + classes = [] + filters = {} + for i in hdata['data']['sub_data']: + id = str(i['type_id']) + classes.append({'type_id': id, 'type_name': i['type_name']}) + if len(i['data']): + vlist.extend(i['data']) + with ThreadPoolExecutor(max_workers=len(classes)) as executor: + results = executor.map(self.getf, classes) + for id, ft in results: + if len(ft): filters[id] = ft + result['class'] = classes + result['filters'] = filters + result['list'] = vlist + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, tid, pg, filter, extend): + body = { + "tid": tid, + "type": extend.get('type'), + "lang": extend.get('lang'), + "area": extend.get('area'), + "year": extend.get('year'), + "pg": pg + } + body = {k: v for k, v in body.items() if v is not None and v != ""} + data = self.getdata('/api.php/provide/nav', self.getbody(body)) + result = {} + result['list'] = data['data']['data'] + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + pass + + def detailContent(self, ids): + data = self.getdata('/api.php/provide/vod', self.getbody({'ids': ids[0]})) + vod = data['data'] + plist = [] + names = [] + for i in vod['vod_play_url']: + ulist = [] + names.append(i['name'].split(' ')[0]) + jdata = {'parse': ''} + if i.get('parse') and isinstance(i['parse'], list) and len(i['parse']): + jdata['parse'] = self.e64(json.dumps(i['parse'])) + for j in i['data']: + jdata['url'] = j['url'] + ulist.append(f'{j["name"]}${self.e64(json.dumps(jdata))}') + plist.append('#'.join(ulist)) + vod['vod_play_from'] = '$$$'.join(names) + vod['vod_play_url'] = '$$$'.join(plist) + vod.pop('cover_list', None) + return {'list': [vod]} + + def searchContent(self, key, quick, pg="1"): + body = {"wd": key, "tid": "0", "pg": pg} + data = self.getdata('/api.php/provide/search', self.getbody(body)) + vlist = [] + for i in data['data']: + i.pop('vod_play_from', None) + vlist.append(i) + return {'list': vlist, 'page': pg} + + def playerContent(self, flag, id, vipFlags): + data = json.loads(self.d64(id)) + parse = data.get('parse') + url, p, head = data.get('url'), 1, '' + if parse: + parse = json.loads(self.d64(parse)) + if not re.search(r'\.m3u8|.mp4|\.flv', url) and parse: + for p in parse: + try: + data = self.fetch(f'{p}{url}', self.headers).json() + url = data.get('data', {}).get('url') or data.get('url') + head = data.get('data', {}).get('header') or data.get('header') + p = 0 + break + except: + p, url = 1, data.get('url') + head = {'User-Agent': 'okhttp/4.9.0'} + return {'parse': p, 'url': url, 'header': head} + + def localProxy(self, param): + pass + + def getf(self, map): + ft, id = [], map['type_id'] + try: + fdata = self.getdata('/api.php/provide/nav', self.getbody({'tid': id, 'pg': '1'})) + dy = ['area', 'year', 'lang', 'type'] + fd = fdata['data']['type_extend'] + has_non_empty_field = False + for key in dy: + if key in fd and fd[key].strip() != "": + has_non_empty_field = True + break + if has_non_empty_field: + for dkey in fd: + if dkey in dy and fd[dkey].strip() != "": + values = fd[dkey].split(",") + value_array = [{"n": value.strip(), "v": value.strip()} for value in values if + value.strip() != ""] + ft.append({"key": dkey, "name": dkey, "value": value_array}) + return (id, ft) + except: + return (id, ft) + + def getskey(self): + random_bytes = os.urandom(16) + return binascii.hexlify(random_bytes).decode() + + def getohost(self): + url = 'https://bianyuan1.oss-cn-hangzhou.aliyuncs.com/bianyuan20250605.json' + response = self.fetch(url, headers=self.headers).text + try: + data = json.loads(response) + except (json.JSONDecodeError, TypeError): + data_ = self.daes(response, b64decode('kzCsPVrVY4+AGjtOFW8Wug=='), 1) + data = json.loads(data_) + return data['servers'][0] + + def gethost(self): + body = { + "gr_rp_size": "1080*2272", + "gr_app_list": "%E5%B1%8F%E5%B9%95%E5%BD%95%E5%88%B6%EF%BC%88com.miui.screenrecorder%29%0A%E5%A4%B8%E5%85%8B%EF%BC%88com.quark.browser%29%0A%E8%BE%B9%E7%BC%98%E8%A7%86%E9%A2%91%EF%BC%88com.hjmore.wallpaper%29%0A%E5%93%94%E5%93%A9%E5%93%94%E5%93%A9%EF%BC%88tv.danmaku.bili%29%0A%E7%81%AB%E6%98%9F%E6%90%9C%E9%A2%98%EF%BC%88com.fenbi.android.souti%29%0A%E6%94%AF%E4%BB%98%E5%AE%9D%EF%BC%88com.eg.android.AlipayGphone%29%0AWPS%20Office%EF%BC%88cn.wps.moffice_eng%29", + "gr_lal": "0.0%2C0.0", + "gr_system_type": "android", + "gr_device_imei": "3507f394e83d2424", + "gr_app_version": "1.0.3", + "gr_device_model": "Xiaomi%20M2012K10C%20%28Android%20%E7%89%88%E6%9C%AC%3A%2011%2C%20SDK%E7%89%88%E6%9C%AC%3A%2030%29", + "gr_city": "%E8%B4%B5%E5%B7%9E%2C%E6%9C%AA%E7%9F%A5%2C%E6%9C%AA%E7%9F%A5", + "requestId": self.uuid(), + "timeStamp": str(int(time.time() * 1000)), + "version": "1.0.3", + "package": "com.hjmore.wallpaper", + "userLoginToken": "", + "app_id": "534", + "appName": 2131951658, + "device_id": "3507f394e83d2424", + "device-id": "3507f394e83d2424", + "oaid": "", + "imei": "", + "referer_shop": "边缘影视", + "referer-shop": "边缘影视", + "access_fine_location": 0, + "access-fine-location": 0 + } + ohost = self.getohost() + data = self.getdata(f'/api.php/settings/grayscale_list', body, ohost) + parsed_url = urlparse(data['data']['grayscale']['server_url'][0]) + domain = parsed_url.scheme + "://" + parsed_url.netloc + return domain + + def drsa(self, encrypted_data): + private_key_pem = """-----BEGIN RSA PRIVATE KEY----- + MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDA5NWiAwRjH50/ + IJY1N0zLopa4jpuWE7kWMn1Qunu6SjBgTvNRmRUoPDHn54haLfbfXIa2X+/sIaMB + /O3HhrpVsz55E5W2vpZ5fBYWh+M65bQERKTW+l72H7GR9x0yj3QPByzzfsj/QkyP + 81prpwR9i8yMe7yG9TFKqUQCPE+/GrhNU1Qf6nFmV+vMnlP9DantkwAt4fPOMZn3 + j4da65/1YQV+F5bYzaLenNVKbHf8U8fVYLZWIy4yk2Vpe4R2Z+JX/eHWsChE9hOu + iFm02eTW5NJLZlWUxYrSE23VXi8oXSEdON3UEOrwSdAUh4SXxLZ9U7KpNVdTwWyR + AS4GyzJ/AgMBAAECggEBAKzmcXefLLeNBu4mz30z7Go7es5DRcLoOudiqmFKRs1c + 4q/xFLj3drdx/WnZZ6ctvDPKRBYFOJF4NRz7Ekfew/c9i6oLnA8KFuceCs53T37j + ltCclwT7t1L2ZbxovIsteuJdlDVOV+w2CVqez1Xfh27heKAT6ZEvBtfdkVBPr0uj + oVwa2+XlJmYZw5dHeB7ySVeAQ+69zDuADB8OWxPWsv6Del+Fhf0kTHAw4WgqcYsd + JUunCjgLdJUlDgXzH/M/Nj8NYVEuq6QpmhaktJ4fwn/F7u3lQllVCFKj5lr0Xb92 + y7lvQlGqMKX1oxf+P5c5/vie1kDx1Rj4S++flIcVlUECgYEA4BuxCZ1c8oOF98bs + KTAONnnZniQ1BRt7rA+O9+++lDjxJhxkuthwjB9YzrnZtxHJtvIIie9Jv8MVfzHa + p2woDtiEh3YYwmIlgNUFvTcGe++tTiEiLDcGc/xNhpvfbLaw9QB7/HQ+LT1QCMxJ + ufdBrR98l0khIGjYqxDW3W5pV70CgYEA3Ff/9+GM2XI/EUSTYrpnwp5R5OsXz1DL + 3CFFgp1EPCNk/c3YNWnrUtTkfmKAlRqWIHfphvH/jS6jpGrfRxDggPwGMtBc134b + brIM5i4KNj/EcE+w5g03HaKBf1ZihHDQ53c6wTn6IFOHJNSPRLqMNqRymfbclNyO + lBMHQmB8yOsCgYBCdZPTwRnuRTi2WQRx1nFwkEQL1Lrwb80GInsIZc2DkTtaTPNG + QadmtmkUrSK2Wo0SNsZ3eUHKn2TBmpw4KCfc9zKeJVSEWKy8fu+7xBSlLlebotHK + gOrl/H1VHOZuC+OAVItwO1yw98zDPynh/0Q3ve2pw6MSRGV0nYLKmdKdlQKBgQCJ + Ty1rw1qKhu9WS22tMIxIc3CFPxtvTeI8I1+1rVtAPq5Im2YIoyDKVXCucaO/RvoW + 8aLNPTELQe0oIJFTL+k3d9ZFBCNXBncB3GK9biNe+w3nD0IlmkamaQZZ2/M4pTUJ + iPtMPlzomCS3ht5g7f9CbegcmgGLooYXMGRtsMMSUQKBgQCoj+3UciH2i+HyUla5 + 1FxivjH3MqSTE4Q7OdzrELb6DoLYzjgWAbpG8HIuodD4uG5xz1oR5H7vkblf1itB + hwOwDEiabyX76e/I3Q0ovwBV+9PMjM4UVU0kHoiu3Z2s90ckwNh58w3QH5fn9E0b + fqMnB6uWze+xrXWijaOzVZhIZg== + -----END RSA PRIVATE KEY-----""" + private_key = RSA.import_key(private_key_pem) + cipher = PKCS1_v1_5.new(private_key) + decrypted_data = cipher.decrypt(b64decode(encrypted_data), None) + return decrypted_data.decode('utf-8') + + def ersa(self, data): + public_key = """-----BEGIN PUBLIC KEY----- + MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+0QMb3WDXjNBRovRhTLH + g3d+CliZAva2tepWNNN0Pj6DgE3ZTnPR34iL/cjo9Jbd3dqAJs/YkKnFurGkDxz5 + TthIqvmz244wiFcHt+FGWoJsj5ZVvrH3pPwH85ggmI1DjxSJEUhB12Z9X6FGli8D + drR9xeLe5y8vFekux8xCQ7pwH1mNQu4Wy32WVM8aLjmRjNzEWOvEMAWCRuwymEdS + zlWoH53qk1dqd6DAmOJhWU2hH6Yt2ZY9LTaDGiHrS+g0DuwajAQzhbM8eonGYMph + nP4q0UTHWEfaGR3HoILmeM32M+qF/UCGfgfR6tCMiXPoHwnD2zoxbZ2p+QlYuTZL + vQIDAQAB + -----END PUBLIC KEY-----""" + key = RSA.importKey(public_key) + cipher = PKCS1_v1_5.new(key) + encrypted = cipher.encrypt(data.encode()) + return b64encode(encrypted).decode() + + def eaes(self, data, key): + key = key.encode('utf-8') + cipher = AES.new(key, AES.MODE_ECB) + padded = pad(data.encode('utf-8'), AES.block_size) + encrypted = cipher.encrypt(padded) + word = b64encode(encrypted).decode('utf-8') + return word + + def daes(self, encrypted_data, key, hexi=0): + if hexi == 0: + key = key.encode('utf-8') + encrypted = b64decode(encrypted_data) + else: + encrypted = bytes.fromhex(encrypted_data) + cipher = AES.new(key, AES.MODE_ECB) + decrypted = cipher.decrypt(encrypted) + unpadded = unpad(decrypted, AES.block_size) + return unpadded.decode('utf-8') + + def getbody(self, params=None): + body = { + "requestId": self.uuid(), + "timeStamp": str(int(time.time() * 1000)), + "version": "1.0.3", + "package": "com.hjmore.wallpaper", + "userLoginToken": "", + "app_id": "534", + "appName": 2131951658, + "device_id": "3507f394e83d2424", + "device-id": "3507f394e83d2424", + "oaid": "", + "imei": "", + "referer_shop": "边缘影视", + "referer-shop": "边缘影视", + "access_fine_location": 0, + "access-fine-location": 0 + } + if params: + body.update(params) + return body + + def getdata(self, path, body, host=None): + jdata = json.dumps(body) + msign = self.md5(jdata) + skey = self.getskey() + jsign = {'key': skey, 'sign': msign} + Sign = self.ersa(json.dumps(jsign)) + header = self.headers.copy() + header['Sign'] = Sign + dbody = self.eaes(jdata, skey) + response = self.post(f'{host or self.host}{path}', headers=header, data=dbody) + rdata = response.text + if response.headers.get('Sign'): + dkey = self.drsa(response.headers['Sign']) + rdata = self.daes(rdata, dkey) + return json.loads(rdata) + + def e64(self, text): + try: + text_bytes = text.encode('utf-8') + encoded_bytes = b64encode(text_bytes) + return encoded_bytes.decode('utf-8') + except Exception as e: + print(f"Base64编码错误: {str(e)}") + return "" + + def d64(self, encoded_text): + try: + encoded_bytes = encoded_text.encode('utf-8') + decoded_bytes = b64decode(encoded_bytes) + return decoded_bytes.decode('utf-8') + except Exception as e: + print(f"Base64解码错误: {str(e)}") + return "" + + def md5(self, text): + h = MD5.new() + h.update(text.encode('utf-8')) + return h.hexdigest() + + def uuid(self): + return str(uuid.uuid4()) diff --git a/tianjitop/llllo4k/py/追.py b/tianjitop/llllo4k/py/追.py new file mode 100644 index 00000000..5c2ec696 --- /dev/null +++ b/tianjitop/llllo4k/py/追.py @@ -0,0 +1,386 @@ +from base.spider import Spider +import re,json,requests,time,os,base64,importlib.util +from urllib.parse import quote,unquote + +class Spider(Spider): + def getName(self): + return "追更助手" + + def init(self,extend=""): + self.zh="/sdcard/瑾禾本地包/zgzl_zhui.json" + self.ri="/sdcard/瑾禾本地包/zgzl_ri.json" + self.ua="Mozilla/5.0" + self.cfg="/sdcard/瑾禾本地包/demo.json" + self.gyzs="/sdcard/瑾禾本地包/py/光鸭至臻社.py" + self.guangya="https://guangyapan.fun" + self.gywp="https://guangya.qsxy.top" + self.gycookie="/sdcard/瑾禾本地包/gy_cookie.txt" + self.search_api=self.guangya+"/api/other/web_search" + self.okpkg="com.fongmi.android.tv" + self.oksearch_activity="com.fongmi.android.tv.ui.activity.SearchActivity" + + def isVideoFormat(self,url): + return False + + def manualVideoCheck(self): + return False + + def destroy(self): + pass + + def homeContent(self,filter): + cls=[{"type_id":"zhui","type_name":"我的周更"},{"type_id":"today","type_name":"今日更新"}] + cls += [{"type_id":"w_"+i,"type_name":"周"+i} for i in "日一二三四五六"] + cls += [{"type_id":"ri","type_name":"我的日更"},{"type_id":"okpan","type_name":"光鸭网盘搜索"},{"type_id":"week","type_name":"周更列表"},{"type_id":"new","type_name":"最近更新"}] + return {"class":cls} + + def homeVideoContent(self): + return {"list":self.local("zhui",1)[:12]} + + def categoryContent(self,tid,pg,filter,extend): + pg=int(pg) + if tid in ["zhui","ri","today"] or tid.startswith("w_"): + return {"list":self.local(tid,pg),"page":pg,"pagecount":1,"limit":99,"total":99} + if tid=="okpan": + return {"list":[],"page":pg,"pagecount":1,"limit":20,"total":0} + if tid=="week": + return {"list":self.week(pg),"page":pg,"pagecount":1,"limit":99,"total":99} + return {"list":self.news(pg),"page":pg,"pagecount":1,"limit":99,"total":99} + + def detailContent(self,array): + sid=array[0] + if sid.startswith("local$"): + _,gen,idx=sid.split("$",2) + arr=self.load(gen) + if int(idx)>=len(arr): + return {"list":[]} + it=arr[int(idx)] + name=it.get("name","").split(",")[0].split("|")[0] + pic=it.get("img","") + week=it.get("week","") + yurl=self.realUrl(it.get("yurl","empty"),name,gen) + if yurl and yurl!="empty" and yurl!=it.get("yurl",""): + it["yurl"]=yurl + self.save(gen,arr) + parts=it.get("name","").split(",") + now=parts[1] if len(parts)>1 else "" + total=parts[2] if len(parts)>2 else "" + urls=[] + if yurl and yurl!="empty": + urls.append("只做搜索$push$"+quote(yurl)) + urls.append("光鸭网盘搜索$oksearch$"+quote(name)) + vod={"vod_id":sid,"vod_name":name,"vod_pic":pic,"type_name":"周更" if gen=="zhui" else "日更","vod_year":"","vod_area":"","vod_remarks":"更新至%s%s"%(now,(" / "+total) if total else ""),"vod_actor":"","vod_director":"","vod_content":"更新配置:"+week+"\n链接:"+yurl,"vod_play_from":"追更","vod_play_url":"#".join(urls)} + return {"list":[vod]} + + if sid.startswith("ok$"): + _,name,url,pic=sid.split("$",3) + name=unquote(name) + url=unquote(url) + pic=unquote(pic) + self.autoAdd(name,"zhui",url,pic) + vod={"vod_id":sid,"vod_name":name,"vod_pic":pic,"type_name":"OK搜索结果","vod_remarks":"已保存到追更","vod_content":"已写入 /sdcard/瑾禾本地包/zgzl_zhui.json\n"+url,"vod_play_from":"已保存","vod_play_url":"播放$push$"+quote(url)} + return {"list":[vod]} + + if sid.startswith("web$"): + _,name,remark=sid.split("$",2) + name=unquote(name) + vod={"vod_id":sid,"vod_name":name,"vod_pic":"","type_name":"周历","vod_remarks":unquote(remark),"vod_content":name,"vod_play_from":"搜索","vod_play_url":"光鸭搜索$oksearch$"+quote(name)} + return {"list":[vod]} + return {"list":[]} + + def searchContent(self,key,quick,pg="1"): + k=key.strip() + res=[] + for gen in ["zhui","ri"]: + arr=self.load(gen) + for i,it in enumerate(arr): + if k in it.get("name",""): + res.append(self.item("local$%s$%s"%(gen,i),it,gen)) + res+=self.okSearch(k) + return {"list":res,"page":int(pg),"pagecount":1,"limit":50,"total":len(res)} + + def playerContent(self,flag,id,vipFlags): + if id.startswith("push$"): + u=unquote(id[5:]) + if self.direct(u): + return {"parse":0,"url":u,"header":"User-Agent="+self.ua} + if "pan.baidu.com" in u or "aliyundrive.com" in u or "alipan.com" in u or "quark.cn" in u or "uc.cn" in u: + return {"parse":1,"jx":1,"url":u,"header":"User-Agent="+self.ua} + return {"parse":1,"url":u,"header":"User-Agent="+self.ua} + if id.startswith("oksearch$"): + k=unquote(id[9:]) + arr=self.okSearch(k) + if arr: + u=arr[0].get("vod_content","") or arr[0].get("vod_id","") + if u.startswith("ok$"): + ps=u.split("$") + u=unquote(ps[2]) if len(ps)>2 else "" + pic=arr[0].get("vod_pic","") + self.autoAdd(k,"zhui",u,pic) + intent="intent:#Intent;component=%s/%s;S.keyword=%s;end"%(self.okpkg,self.oksearch_activity,quote(k)) + return {"parse":0,"url":intent,"header":"User-Agent="+self.ua} + return {"parse":1,"url":id,"header":"User-Agent="+self.ua} + + def localProxy(self,param): + return [200,"video/MP2T",""] + + def okSearch(self,key): + res=self.localPanSearch(key) + return res if res else self.remotePanSearch(key) + + def localPanSearch(self,key): + try: + spec=importlib.util.spec_from_file_location("_zgzl_gyzs",self.gyzs) + mod=importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + pan=mod.Spider() + pan.init({}) + js=pan.searchContent(key,False,"1") + out=[] + for it in js.get("list",[])[:30]: + u=it.get("vod_id","") + n=it.get("vod_name","") or key + p=it.get("vod_pic","") + m=it.get("vod_remarks","") or "光鸭至臻社" + if not u: + continue + out.append({"vod_id":"ok$"+quote(n)+"$"+quote(u)+"$"+quote(p),"vod_name":n,"vod_pic":p,"vod_remarks":m,"vod_content":u}) + return out + except Exception as e: + return [] + + def guangyaPanSearch(self,key): + try: + html=requests.get(self.guangya+"/s/"+quote(key)+".html",headers={"User-Agent":self.ua,"Referer":self.guangya+"/"},timeout=12).text + m=re.search(r"var\s+jsonData\s*=\s*'([\s\S]*?)';",html) or re.search(r"let\s+listItems\s*=\s*JSON\.parse\('([\s\S]*?)'\)",html) + out=[] + if m: + text=m.group(1).replace('\\/','/') + try: + arr=json.loads(text) + except: + arr=json.loads(text.encode('utf-8').decode('unicode_escape')) + for it in arr: + u=it.get("url","") + if not u: + continue + n=it.get("title","") or it.get("name","") or key + code=it.get("code","") or "" + if code and "pwd=" not in u and "pan.baidu.com" not in u: + u+=("&" if "?" in u else "?")+"pwd="+code + typ={0:"夸克网盘",1:"阿里云盘",2:"百度网盘",3:"UC网盘",4:"迅雷网盘",5:"光鸭磁力"}.get(int(it.get("is_type",0) or 0),"光鸭网盘") + out.append({"vod_id":"ok$"+quote(key)+"$"+quote(u)+"$","vod_name":n,"vod_pic":"","vod_remarks":typ+(" 提取码:"+code if code else ""),"vod_content":u}) + if len(out)>=30: + break + return out + except Exception as e: + return [] + + def remotePanSearch(self,key): + local=self.guangyaPanSearch(key) + if local: + return local + try: + r=requests.get(self.search_api,params={"title":key,"is_type":2},headers={"User-Agent":self.ua,"Accept":"text/event-stream","Referer":self.guangya+"/s/"+quote(key)+".html"},timeout=20) + res=[] + for line in r.text.splitlines(): + line=line.strip() + if not line.startswith("data:") or "[DONE]" in line: + continue + try: + it=json.loads(line[5:].strip()) + except: + continue + u=it.get("url","") + n=it.get("title",key) or key + if not u: + continue + res.append({"vod_id":"ok$"+quote(key)+"$"+quote(u)+"$","vod_name":n,"vod_pic":"","vod_remarks":"光鸭百度网盘","vod_content":u}) + if len(res)>=30: + break + return res + except: + return [] + def realUrl(self,u,name="",gen="zhui"): + if not u or u=="empty" or "guangyapan.com/s/" in u: + return u + if "guangya.qsxy.top" not in u: + return u + try: + ck=open(self.gycookie,"r",encoding="utf-8").read().strip() + except Exception: + ck="" + try: + h={"User-Agent":self.ua,"Referer":self.gywp+"/"} + if ck: + h["Cookie"]=ck + html=requests.get(u,headers=h,timeout=12).text + if "内容已隐藏" in html and not ck: + return u + m=re.search(r'<a[^>]+href=["\']([^"\']*\?golink=([^"\'&]+)[^"\']*)["\'][^>]*>(https?://www\.guangyapan\.com/s/[^<]+)</a>',html,re.S) or re.search(r'(https?://www\.guangyapan\.com/s/[A-Za-z0-9_\-]+)',html) + if m: + return unquote(m.group(3) if len(m.groups())>=3 and m.group(3) else m.group(1)).replace('&','&') + g=re.search(r'golink=([A-Za-z0-9+/=_%\-]+)',html) + if g: + return base64.b64decode(unquote(g.group(1))).decode("utf-8") + except Exception: + return u + return u + + def autoAdd(self,name,gen,yurl="",pic=""): + name=(name or "").strip() + yurl=self.realUrl(yurl,name,gen) if yurl else yurl + if not name: + return + arr=self.raw(gen) + for it in arr: + if it.get("name","").split(",")[0].split("|")[0]==name: + if yurl and (not it.get("yurl") or it.get("yurl")=="empty" or ("guangya.qsxy.top" in it.get("yurl","") and yurl!=it.get("yurl",""))): + it["yurl"]=yurl + if pic and not it.get("img"): + it["img"]=pic + self.save(gen,arr) + return + week=self.weekday()+",1,10,自动" if gen=="zhui" else "1,1,10" + arr.insert(0,{"name":name+",0","week":week,"img":pic or "","yurl":yurl or "empty","riqi":self.today()}) + self.save(gen,arr) + + def raw(self,gen): + path=self.zh if gen=="zhui" else self.ri + try: + return json.loads(open(path,"r",encoding="utf-8").read()) + except: + return [] + + def save(self,gen,arr): + path=self.zh if gen=="zhui" else self.ri + try: + d=os.path.dirname(path) + if d and not os.path.exists(d): + os.makedirs(d) + open(path,"w",encoding="utf-8").write(json.dumps(arr,ensure_ascii=False)) + except: + pass + + def load(self,gen): + arr=self.raw(gen) + arr=self.update(arr,gen) + self.save(gen,arr) + return arr + + def item(self,vid,it,gen): + name=it.get("name","").split(",")[0].split("|")[0] + parts=it.get("name","").split(",") + now=parts[1] if len(parts)>1 else "" + total=parts[2] if len(parts)>2 else "" + wk=it.get("week","").split(",") + tm=wk[2] if len(wk)>2 else "10" + plat=wk[3] if len(wk)>3 else "" + remark=("第%s集"%now if now else "")+(("/共%s集"%total) if total else "") + if plat: + remark=remark+" "+plat + return {"vod_id":vid,"vod_name":name,"vod_pic":it.get("img",""),"vod_remarks":remark,"vod_content":"%s %s点更新"%(("周"+wk[0]) if gen=="zhui" and wk else "日更",tm)} + + def local(self,tid,pg): + if tid=="ri": + arr=self.load("ri") + return [self.item("local$ri$%s"%i,it,"ri") for i,it in enumerate(arr)] + arr=self.load("zhui") + day=self.weekday() + want=None + if tid=="today": + want=day + elif tid.startswith("w_"): + want=tid.split("_",1)[1] + return [self.item("local$zhui$%s"%i,it,"zhui") for i,it in enumerate(arr) if want is None or it.get("week","").split(",")[0]==want] + + def update(self,arr,gen): + today=self.today() + for it in arr: + wk=it.get("week","").split(",") + if len(wk)<2: + continue + last=it.get("riqi","") + target=today if gen=="ri" else self.lastday(wk[0]) + days=self.days(last,target) + step=7 if gen=="zhui" else 1 + times=days//step if days>0 else 0 + if times<=0: + continue + names=it.get("name","").split(",") + nums=[i for i in range(1,len(names)) if re.match(r"^\d+$",names[i])] + if nums: + p=nums[0] + cur=int(names[p]) + add=times*int(wk[1]) + if len(nums)>1: + cur=min(cur+add,int(names[nums[1]])) + else: + cur=cur+add + names[p]=str(cur) + it["name"]=",".join(names) + it["riqi"]=target + return arr + + def week(self,pg): + html=self.get("http://www.yatu.tv:2082/zhouli.asp") + blocks=re.findall(r'<tr[\s\S]*?</tr>',html) + res=[] + for row in blocks: + title=self.clean(self.m(row,r'<a[^>]*>(.*?)</a>')) + if not title: + continue + txt=self.clean(row) + remark=self.m(txt,r'(\d+集[^热日期]*)') or self.m(txt,r'(第?\d+[^ ]*)') or "周更" + res.append({"vod_id":"web$"+quote(title)+"$"+quote(remark),"vod_name":title,"vod_pic":"","vod_remarks":remark,"vod_content":txt}) + return res[:80] + + def news(self,pg): + html=self.get("http://www.yatu.tv:2082/zuijin.asp") + rows=re.findall(r'<td[\s\S]*?</td>',html) + res=[] + for row in rows: + title=self.clean(self.m(row,r'<a[^>]*>(.*?)</a>')) + if not title: + continue + txt=self.clean(row) + remark=self.m(txt,r'(更新[^日期]*)') or "最近更新" + res.append({"vod_id":"web$"+quote(title)+"$"+quote(remark),"vod_name":title,"vod_pic":"","vod_remarks":remark,"vod_content":txt}) + return res[:80] + + def get(self,url): + try: + r=requests.get(url,headers={"User-Agent":self.ua},timeout=8) + r.encoding="gbk" + return r.text + except: + return "" + + def clean(self,s): + return re.sub(r"\s+"," ",re.sub(r"<[^>]+>"," ",s or "")).strip() + + def m(self,s,p): + r=re.search(p,s or "",re.S) + return r.group(1).strip() if r else "" + + def today(self): + return time.strftime("%Y-%m-%d",time.localtime()) + + def weekday(self): + return "日一二三四五六"[int(time.strftime("%w",time.localtime()))] + + def lastday(self,w): + mp={"日":0,"一":1,"二":2,"三":3,"四":4,"五":5,"六":6} + now=time.time() + cur=int(time.strftime("%w",time.localtime(now))) + diff=(cur-mp.get(w,cur)+7)%7 + return time.strftime("%Y-%m-%d",time.localtime(now-diff*86400)) + + def days(self,a,b): + try: + return int((time.mktime(time.strptime(b,"%Y-%m-%d"))-time.mktime(time.strptime(a,"%Y-%m-%d")))/86400) + except: + return 0 + + def direct(self,u): + return bool(re.search(r'\.(m3u8|mp4|flv|mkv|mp3)(\?|$)',u,re.I)) \ No newline at end of file diff --git a/tianjitop/llllo4k/py/飞鱼.py b/tianjitop/llllo4k/py/飞鱼.py new file mode 100644 index 00000000..1d30fd76 --- /dev/null +++ b/tianjitop/llllo4k/py/飞鱼.py @@ -0,0 +1,347 @@ +# -*- coding: utf-8 -*- +# 站点:4kyszx.top (Android App 接口) +# 版本:v1.2 +# 说明:移除所有打印日志,修复异常处理逻辑 + +from base.spider import Spider +import hashlib +import hmac +import time +import random +import base64 +import json +import sys +import urllib3 +from urllib.parse import urlparse, urlencode + +urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) +sys.path.append('..') + + +class Spider(Spider): + host = 'https://4kyszx.top' + api_base = '/api/app' + + MASTER_KEY = b"cms_device_salt_v1_2024cms_app_sign_key_v1_2024_secure" + + def_headers = { + 'User-Agent': 'Dart/3.12 (dart:io)', + 'Accept': 'application/json', + 'Accept-Encoding': 'gzip', + 'Content-Type': 'application/json', + 'x-device-id': 'dd6d6bc43e55625acc470573f8d6d8b3', + 'x-app-version': '1.0.19+20', + 'x-platform': 'android', + 'x-nonce': '', + 'x-timestamp': '', + 'x-signature': '' + } + + _categories = None + + # ---------- 签名算法 ---------- + def _derive_signing_key(self, device_id): + return hmac.new(self.MASTER_KEY, device_id.encode('utf-8'), hashlib.sha256).hexdigest() + + def _calc_signature(self, method, path, query, timestamp, nonce, app_version, signing_key_hex): + print(query) + parts = [ + method.upper(), + path, + query, + str(timestamp), + nonce, + app_version + ] + raw = "\n".join(parts) + signing_key_bytes = signing_key_hex.encode('utf-8') + return hmac.new(signing_key_bytes, raw.encode('utf-8'), hashlib.sha256).hexdigest() + + def _build_headers(self, url, method='GET', params=None, body=None, sign_query=None): + """ + 构建带签名的请求头 + :param url: 完整请求 URL(含编码后的 query) + :param method: 请求方法 + :param params: 未使用,保留 + :param body: 请求体(POST 用) + :param sign_query: 用于签名的原始查询字符串(未编码),若不提供则从 url 中解析 + """ + timestamp = str(int(time.time())) + nonce_bytes = random.getrandbits(128).to_bytes(16, 'big') + nonce_b64 = base64.b64encode(nonce_bytes).decode('utf-8') + + parsed = urlparse(url) + path = parsed.path + # 如果提供了 sign_query,则使用它计算签名;否则从 url 中提取 + if sign_query is not None: + query_for_sign = sign_query + else: + query_for_sign = parsed.query # 此值是编码后的 + + device_id = self.def_headers['x-device-id'] + signing_key_hex = self._derive_signing_key(device_id) + + signature = self._calc_signature( + method=method, + path=path, + query=query_for_sign, + timestamp=timestamp, + nonce=nonce_b64, + app_version=self.def_headers['x-app-version'], + signing_key_hex=signing_key_hex + ) + + headers = self.def_headers.copy() + headers.update({ + 'x-timestamp': timestamp, + 'x-nonce': nonce_b64, + 'x-signature': signature + }) + return headers + + # ---------- 数据转换 ---------- + def _parse_video_item(self, item): + pic = item.get('pic', '') or item.get('picSlide', '') + return { + 'vod_id': str(item.get('id', '')), + 'vod_name': item.get('name', ''), + 'vod_pic': pic, + 'vod_remarks': item.get('remarks', ''), + 'vod_year': item.get('year', ''), + 'vod_area': item.get('area', ''), + 'vod_actor': item.get('actor', ''), + 'vod_director': item.get('director', ''), + 'vod_content': item.get('content', ''), + 'type_name': item.get('categoryName', ''), + 'playFrom': item.get('playFrom', '') + } + + def _parse_video_list(self, data_list): + seen = set() + result = [] + for item in data_list: + vid = str(item.get('id', '')) + if vid and vid not in seen: + seen.add(vid) + result.append(self._parse_video_item(item)) + return result + + # ---------- 首页分类 ---------- + def homeContent(self, filter): + if not self.host: + return None + url = f"{self.host}{self.api_base}/categories" + headers = self._build_headers(url, method='GET') + try: + resp = self.fetch(url, headers=headers, verify=False) + data = resp.json() + if data.get('code') != 200: + return None + categories = data.get('data', []) + self._categories = categories + class_list = [] + for cat in categories: + if cat.get('status') == 1: + class_list.append({ + 'type_id': str(cat['id']), + 'type_name': cat['name'] + }) + return {'class': class_list, 'filters': {}} + except Exception: + return None + + # ---------- 首页推荐 ---------- + def homeVideoContent(self): + if not self.host: + return None + if self._categories is None: + home = self.homeContent(False) + if not home: + return {'list': []} + categories = self._categories or [] + if not categories: + return {'list': []} + + all_videos = [] + seen_ids = set() + for cat in categories: + cat_id = cat.get('id') + if not cat_id: + continue + url = f"{self.host}{self.api_base}/categories/{cat_id}/recommend" + headers = self._build_headers(url, method='GET') + try: + resp = self.fetch(url, headers=headers, verify=False) + data = resp.json() + if data.get('code') != 200: + continue + items = data.get('data', []) + for item in items: + vid = str(item.get('id', '')) + if vid and vid not in seen_ids: + seen_ids.add(vid) + all_videos.append(self._parse_video_item(item)) + except Exception: + continue + return {'list': all_videos} + + # ---------- 分类视频列表 ---------- + def categoryContent(self, tid, pg, filter, extend): + if not self.host: + return None + url = f"{self.host}{self.api_base}/categories/{tid}/videos" + params = {'page': pg, 'page_size': 30} + if extend: + if extend.get('year'): + params['year'] = extend['year'] + if extend.get('area'): + params['area'] = extend['area'] + if extend.get('sort'): + sort_map = {'最新': 'time', '最热': 'hot', '评分': 'score'} + params['sort'] = sort_map.get(extend['sort'], extend['sort']) + full_url = f"{url}?{urlencode(params)}" + headers = self._build_headers(full_url, method='GET') + try: + resp = self.fetch(full_url, headers=headers, verify=False) + data = resp.json() + if data.get('code') != 200: + return {'list': [], 'page': pg} + result = data.get('data', {}) + video_list = self._parse_video_list(result.get('list', [])) + total = result.get('total', 0) + page_size = result.get('pageSize', 30) + return { + 'list': video_list, + 'page': result.get('page', int(pg)), + 'pagecount': (total + page_size - 1) // page_size, + 'total': total + } + except Exception: + return {'list': [], 'page': pg} + + # ---------- 搜索 ---------- + def searchContent(self, key, quick, pg='1'): + if not self.host: + return None + url = f"{self.host}{self.api_base}/videos/search" + raw_query = f"keyword={key}&page={pg}&page_size=20" + params = {'keyword': key, 'page': pg, 'page_size': 20} + full_url = f"{url}?{urlencode(params)}" + headers = self._build_headers(full_url, method='GET', sign_query=raw_query) + try: + resp = self.fetch(full_url, headers=headers, verify=False) + data = resp.json() + print(data) + if data.get('code') != 200: + return {'list': [], 'page': pg} + result = data.get('data', {}) + videos = self._parse_video_list(result.get('list', [])) + total = result.get('total', 0) + page_size = result.get('pageSize', 30) + return { + 'list': videos, + 'page': result.get('page', int(pg)), + 'pagecount': (total + page_size - 1) // page_size, + 'total': total + } + except Exception: + return {'list': [], 'page': pg} + + # ---------- 详情 ---------- + def detailContent(self, ids): + if not ids: + return None + vid = ids[0] + url = f"{self.host}{self.api_base}/videos/{vid}" + headers = self._build_headers(url, method='GET') + try: + resp = self.fetch(url, headers=headers, verify=False) + data = resp.json() + if data.get('code') != 200: + return None + detail = data.get('data', {}) + + play_from = [] + play_urls = [] + play_groups = detail.get('playGroups', []) + + for group in play_groups: + group_name = group.get('name', '默认源') + parse_api = group.get('parseApi', '') + episode_urls = [] + for idx, ep in enumerate(group.get('playUrls', [])): + ep_name = ep.get('name', f'第{idx+1}集') + ep_url = ep.get('url', '') + if parse_api and not (ep_url.startswith('http') and ('.m3u8' in ep_url or '.mp4' in ep_url)): + full_url = parse_api + ep_url + else: + full_url = ep_url + episode_urls.append(f"{ep_name}${full_url}") + if episode_urls: + play_from.append(group_name) + play_urls.append('#'.join(episode_urls)) + + video = { + 'vod_id': str(detail.get('id', vid)), + 'vod_name': detail.get('name', ''), + 'vod_pic': detail.get('pic', '') or detail.get('picSlide', ''), + 'vod_remarks': detail.get('remarks', ''), + 'vod_year': detail.get('year', ''), + 'vod_area': detail.get('area', ''), + 'vod_actor': detail.get('actor', ''), + 'vod_director': detail.get('director', ''), + 'vod_content': detail.get('content', ''), + 'vod_play_from': '$$$'.join(play_from), + 'vod_play_url': '$$$'.join(play_urls), + 'type_name': detail.get('categoryName', '') + } + return {'list': [video]} + except Exception: + return None + + # ---------- 播放解析 ---------- + def playerContent(self, flag, vid, vip_flags): + if vid.startswith('http') and ('.m3u8' in vid or '.mp4' in vid): + return { + 'parse': 0, + 'url': vid, + 'header': { + 'User-Agent': self.def_headers['User-Agent'] + } + } + + if vid.startswith('http'): + try: + resp = self.fetch(vid, headers={ + 'User-Agent': self.def_headers['User-Agent'] + }, verify=False) + data = resp.json() + real_url = data.get('url') or data.get('data', {}).get('url', '') + if real_url.startswith('http'): + return { + 'parse': 0, + 'url': real_url, + 'header': { + 'User-Agent': self.def_headers['User-Agent'] + } + } + except Exception: + pass + + return {'parse': 0, 'url': '', 'header': {}} + + # ---------- 框架方法 ---------- + def init(self, extend=''): + pass + + def getName(self): + return self.name + + def isVideoFormat(self, url): + return url and ('.m3u8' in url or '.mp4' in url) + + def destroy(self): + pass + + def localProxy(self, param): + pass \ No newline at end of file diff --git a/tianjitop/llllo4k/py/魔法盒子.py b/tianjitop/llllo4k/py/魔法盒子.py new file mode 100644 index 00000000..ef2f2e99 --- /dev/null +++ b/tianjitop/llllo4k/py/魔法盒子.py @@ -0,0 +1,432 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +import re, json, requests, time, base64, hashlib, urllib.parse +from concurrent.futures import ThreadPoolExecutor, as_completed +from bs4 import BeautifulSoup +from base.spider import Spider + +class Spider(Spider): + def getName(self): return "魔法盒子" + def init(self, extend=""): + self.host = "http://movie.l98.cn" + self.headers = {"Content-Type": "application/json", "User-Agent": "Mozilla/5.0", "Referer": self.host} + self._sources = None; self._home_data = None + self._play_headers = {"User-Agent": "Mozilla/5.0"} + self.wbbb_host = "https://wbbb1.com" + self.wbbb_headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36", "Referer": self.wbbb_host, "pics": "1"} + self._shanzha_initialized = False + self._shanzha_userid = None + self._shanzha_token = None + self._shanzha_host = "http://qkys.qukanwh.com" + self._shanzha_device_id = "2d590b9842d064a1" + self._PUB_KEY_B64 = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCoYt0BP77U+DM08BiI/QbSRIfxijXo85BTPqIM1Ow8BNwhLETzRIZ+dEwdWDbydG/PspgBAfRpGaYVdJYtvaC2JnoO8+Ik6qMWojfEJxSFLa0Pb0A892tun4gsxoEMjcreZ+YGyaBxAfqX0BSMfdrOgIYaZQjYrw9TRLlUT31QoQIDAQAB" + self._shanzha_source_keys = set() + def _post(self, url, data, timeout=15): + try: return requests.post(url, json=data, headers=self.headers, timeout=timeout).json() + except: return {} + def _get(self, url, timeout=15): + try: return requests.get(url, headers=self.headers, timeout=timeout).json() + except: return {} + def _fix(self, u): return "https:" + u if u and u.startswith("//") else u or "" + def _is_shanzha_key(self, key): + return key in self._shanzha_source_keys + def getSources(self): + if self._sources is not None: return self._sources + raw = self._get(self.host + "/api/tvbox/sources", timeout=8).get("data", []) + self._sources = raw + self._shanzha_source_keys = set() + for s in raw: + if s.get("name","").find("山楂") >= 0: + self._shanzha_source_keys.add(s["key"]) + return self._sources + def _init_shanzha(self): + if self._shanzha_initialized: return True + try: + hdrs = {"User-Agent": "okhttp/4.12.0", "Connection": "Keep-Alive", "Accept-Encoding": "gzip", "Content-Type": "application/json;charset=UTF-8", "Cache-Control": "no-cache", "deviceId": self._shanzha_device_id, "client": "app", "deviceType": "Android"} + resp = requests.get(self._shanzha_host + "/api/v1/app/user/visitorInfo", headers=hdrs, timeout=10).json() + self._shanzha_userid = resp["data"]["id"] + self._shanzha_token = resp["data"]["token"] + self._shanzha_initialized = True + return True + except: return False + def _shanzha_rsa_encrypt(self, data): + try: + from Crypto.PublicKey import RSA + from Crypto.Cipher import PKCS1_v1_5 + key = RSA.import_key(base64.b64decode(self._PUB_KEY_B64)) + cipher = PKCS1_v1_5.new(key) + return base64.b64encode(cipher.encrypt(data.encode("utf-8"))).decode("utf-8") + except: return None + def _shanzha_build_params(self, episode_id="", episode_index="", vid="", player_id="", type_id="", user_id=""): + return f"episodeId{episode_id}episodeIndex{episode_index}id{vid}playerId{player_id}source0typeId{type_id}userId{user_id}" + def _shanzha_gen_sign(self, timestamp, params_str): + raw = f"SaltLSFBTimestamp{timestamp}Params{params_str}ClientappDeviceId{self._shanzha_device_id}" + b64 = base64.b64encode(raw.encode("utf-8")).decode("utf-8") + return hashlib.md5(b64.encode("utf-8")).hexdigest().upper() + def _shanzha_post(self, endpoint, body, sign_params_str): + if not self._init_shanzha(): return None + try: + ts = str(int(time.time())) + enc_key = self._shanzha_rsa_encrypt(json.dumps(body, separators=(",", ":"))) + if not enc_key: return None + snjm = self._shanzha_rsa_encrypt("113") + appsign = self._shanzha_rsa_encrypt("09a8dc51639a31801af5f6418caebfabc695eb24") + sign = self._shanzha_gen_sign(ts, sign_params_str) + hdrs = {"snjm": snjm, "appsign": appsign, "timestamp": ts, "sign": sign, "deviceId": self._shanzha_device_id, "token": self._shanzha_token, "client": "app", "deviceType": "Android", "Content-Type": "application/json;charset=UTF-8", "Cache-Control": "no-cache", "User-Agent": "okhttp/4.12.0"} + r = requests.post(self._shanzha_host + endpoint, headers=hdrs, json={"key": enc_key}, timeout=10) + return r.json() + except: return None + def _decrypt_response(self, enc_data): + from Crypto.PublicKey import RSA + from Crypto.Cipher import PKCS1_v1_5 + dec_key = RSA.import_key(base64.b64decode(self._PUB_KEY_B64)) + cipher = PKCS1_v1_5.new(dec_key) + enc_bytes = base64.b64decode(enc_data) + parts = [] + for i in range(0, len(enc_bytes), 256): + parts.append(cipher.decrypt(enc_bytes[i:i+256], None)) + return json.loads(b"".join(parts).decode("utf-8")) + def _fetch_home(self, s): + try: + t = 10 if s["key"] == "source-ac9aba9c5a" else 4 + d = self._post(self.host + "/api/tvbox/home", {"api": s["api"], "filter": True}, timeout=t) + return s["key"], d.get("data", {}) + except: return s["key"], {} + def _load_all_homes(self): + if self._home_data is not None: return self._home_data + sources = self.getSources() + if not sources: return {} + self._home_data = {} + pool = ThreadPoolExecutor(max_workers=13) + fs = [pool.submit(self._fetch_home, s) for s in sources if s["key"] != "source-8ee56df12f"] + for f in as_completed(fs): + if len(self._home_data) >= 12: break + try: + k, d = f.result(timeout=0.1) + except: continue + if d and d.get("class"): self._home_data[k] = d + pool.shutdown(wait=False) + self._home_data["wbbb"] = {"class": [{"type_id": "1", "type_name": "电影"}, {"type_id": "2", "type_name": "剧集"}, {"type_id": "3", "type_name": "动漫"}, {"type_id": "4", "type_name": "综艺"}]} + return self._home_data + def _get_source_home(self, key): + homes = self._load_all_homes() + if key in homes: return homes[key] + sources = self.getSources() + src = next((s for s in sources if s["key"] == key), None) + if not src: return {} + d = self._post(self.host + "/api/tvbox/home", {"api": src["api"], "filter": True}, timeout=10).get("data", {}) + if d: self._home_data[key] = d + return d + def homeContent(self, filter): + result = {"class": [], "filters": {}, "list": []} + sources = self.getSources() + if not sources: return result + homes = self._load_all_homes() + all_src = sources + [{"key": "wbbb", "name": "歪比影视", "api": ""}] + d = {s["key"]: s for s in all_src if s["key"] != "source-8ee56df12f"} + order = ["wbbb", "source-681f32793f", "source-37dc8f3871", "tv", "source-a45d5761c9", "source-aa4f0ed30b", "4kav", "source-e18321eaa8", "hema", "source-a63c5a93bc", "source-4df616f958", "yunyun", "source-ac9aba9c5a"] + ss = [d[k] for k in order if k in d] + [s for s in d.values() if s["key"] not in order] + ml = [] + for s in ss: + k = s["key"]; hd = homes.get(k, {}) + cl = hd.get("class", []); bf = hd.get("filters", {}) + result["class"].append({"type_id": k, "type_name": s["name"]}) + if k == "wbbb": + vv = [{"n": "全部", "v": ""}] + [{"n": c.get("type_name",""), "v": str(c.get("type_id",""))} for c in cl] + result["filters"][k] = [{"name": "分类", "key": "sub_tid", "value": vv}] + elif cl: + vv = [{"n": c.get("type_name", ""), "v": str(c.get("type_id", ""))} for c in cl] + vv.insert(0, {"n": "全部", "v": ""}) + fl = [{"name": "分类", "key": "sub_tid", "value": vv}] + for c in cl: + sf = bf.get(str(c.get("type_id", "")), []) + if sf: fl.extend(sf); break + result["filters"][k] = fl + for it in hd.get("list", [])[:4]: + if isinstance(it, dict) and it.get("vod_name") and it.get("vod_id"): + ml.append({"vod_id": k + "|" + str(it["vod_id"]), "vod_name": it.get("vod_name",""), "vod_pic": self._fix(it.get("vod_pic","")), "vod_remarks": it.get("vod_remarks","")}) + if "wbbb" in homes: + try: + r = requests.get(self.wbbb_host, headers=self.wbbb_headers, timeout=5) + for a in BeautifulSoup(r.text, "html.parser").select(".module-poster-item.module-item")[:4]: + t = a.get("title",""); m = re.search(r"/detail/(\d+)\.html", a.get("href","")) + if not m: continue + img = a.select_one(".lazy") + p = img.get("data-original","") or img.get("src","") if img else "" + rk = a.select_one(".module-item-note") + rt = rk.get_text(strip=True) if rk else "" + if t: ml.append({"vod_id": "wbbb|" + m.group(1), "vod_name": t, "vod_pic": urllib.parse.urljoin(self.wbbb_host, p) if p else "", "vod_remarks": rt}) + except: pass + result["list"] = ml[:24] + return result + def categoryContent(self, tid, pg, filter, extend): + if tid == "wbbb": return self._wbbb_category(pg, extend) + result = {"list": [], "page": int(pg) if pg else 1, "pagecount": 1, "limit": 30, "total": 0} + try: + sources = self.getSources() + src = next((s for s in sources if s["key"] == tid), None) + if not src: return result + hd = self._get_source_home(tid) + cl = hd.get("class", []) + sub = (extend or {}).get("sub_tid", "") + if not sub and cl: sub = str(cl[0].get("type_id", "")) + rex = {k:v for k,v in (extend or {}).items() if k != "sub_tid" and v} + data = self._post(self.host + "/api/tvbox/category", {"api": src["api"], "tid": sub, "page": int(pg) or 1, "filter": bool(rex), "extend": rex}, timeout=10).get("data", {}) + items = [{"vod_id": tid + "|" + str(v["vod_id"]), "vod_name": v.get("vod_name",""), "vod_pic": self._fix(v.get("vod_pic","")), "vod_remarks": v.get("vod_remarks","")} for v in data.get("list", []) if isinstance(v, dict) and v.get("vod_id")] + result["list"] = items + result["pagecount"] = data.get("pagecount") or 99 + result["limit"] = data.get("limit") or len(items) + result["total"] = data.get("total") or len(items) + except: pass + return result + def _wbbb_category(self, pg, extend): + result = {"list": [], "page": int(pg) or 1, "pagecount": 1, "limit": 30, "total": 0} + try: + ex = extend or {}; sub = ex.get("sub_tid", "1") + route = [sub, ex.get("AREA",""), ex.get("CLASS",""), ex.get("LANG",""), "","","","","","","", ex.get("YEAR","")] + url = self.wbbb_host + "/show/" + "-".join(str(x) for x in route) + ".html" + if int(pg or 1) > 1: url = url.replace(".html", "---" + str(pg) + "---.html") + soup = BeautifulSoup(requests.get(url, headers=self.wbbb_headers, timeout=10).text, "html.parser") + items = [] + for a in soup.select(".module-poster-item.module-item"): + m = re.search(r"/detail/(\d+)\.html", a.get("href","")) + if not m: continue + t = a.get("title","") + img = a.select_one(".lazy") + p = img.get("data-original","") or img.get("src","") if img else "" + if not p: continue + p = urllib.parse.urljoin(self.wbbb_host, p) if not p.startswith("http") else p + rk = a.select_one(".module-item-note") + rt = rk.get_text(strip=True) if rk else "" + items.append({"vod_id": "wbbb|" + m.group(1), "vod_name": t, "vod_pic": p, "vod_remarks": rt}) + result["list"] = items + pc = int(pg or 1) + for a in soup.select("a.page-link"): + if a.get_text(strip=True) == "尾页": + mm = re.search(r"---(\d+)---", a.get("href","")) + if mm: pc = int(mm.group(1)); break + result["pagecount"] = pc if items else 0 + result["limit"] = len(items) or 30 + result["total"] = (pc or 1) * 30 + except: pass + return result + def detailContent(self, ids): + tid = ids[0] if ids else "" + if not tid: return {"list": []} + if "|" in tid: + key, real_id = tid.split("|", 1) + else: + key, real_id = tid, "" + if key == "wbbb": return self._wbbb_detail(real_id) + result = {"list": []} + try: + sources = self.getSources() + src = next((s for s in sources if s["key"] == key), None) + if not src: return result + data = self._post(self.host + "/api/detail", {"api": src["api"], "ids": [str(real_id)]}, timeout=8).get("data", {}) + if isinstance(data, list) and data: data = data[0] + pu = data.get("vod_play_url", "") + # 山楂影视特殊处理:如果中转站返回的播放链接是空的或无效的,尝试用独立API获取 + if self._is_shanzha_key(key) and (not pu or "/api/tvbox/play/" in pu): + sh_data = self._get_shanzha_detail_via_api(real_id) + if sh_data: + result["list"] = sh_data + return result + if pu: pu = re.sub(r"(/api/tvbox/play/[^$#\s]+)", lambda m: self.host + m.group(0) if not m.group(0).startswith("http") else m.group(0), pu) + result["list"] = [{"vod_id": tid, "vod_name": data.get("vod_name",""), "vod_pic": self._fix(data.get("vod_pic","")), "vod_remarks": data.get("vod_remarks",""), "vod_year": data.get("vod_year",""), "vod_area": data.get("vod_area",""), "vod_actor": data.get("vod_actor",""), "vod_director": data.get("vod_director",""), "vod_content": data.get("vod_content",""), "vod_play_from": data.get("vod_play_from",""), "vod_play_url": pu}] + except: pass + return result + def _get_shanzha_detail_via_api(self, vid): + try: + if not self._init_shanzha(): return None + type_id = "M15" + body = {"id": vid, "source": 0, "typeId": type_id, "userId": self._shanzha_userid, "episodeId": "", "episodeIndex": "", "playerId": ""} + params_str = self._shanzha_build_params(episode_id="", episode_index="", vid=str(vid), player_id="", type_id=type_id, user_id=str(self._shanzha_userid)) + resp = self._shanzha_post("/api/v1/app/play/movieDetails", body, params_str) + if not resp or not resp.get("data"): return None + dec_json = self._decrypt_response(resp["data"]) + current_pid = dec_json["playerId"] + play_urls = []; show = []; pu = [] + for ep in dec_json.get("episodeList", []): + pu.append(f"{ep.get('episode','')}${vid}@{current_pid}@{ep.get('id','')}@episode") + play_urls.append("#".join(pu)) + for mp in dec_json.get("moviePlayerList", []): + if mp["id"] == current_pid: + show.append(mp.get("moviePlayerName", "")) + for mp in dec_json.get("moviePlayerList", []): + pid = mp["id"]; et = mp.get("episodeTotal") + if pid == current_pid or et is None: continue + pu2 = [f"第{k}集${k}@{pid}@{vid}@virtual" for k in range(1, et + 1)] + play_urls.append("#".join(pu2)) + nm = mp.get("moviePlayerName", "") + if nm and nm not in show: show.append(nm) + desc_body = {"id": vid, "typeId": type_id} + desc_hdrs = {"User-Agent": "okhttp/4.12.0", "Connection": "Keep-Alive", "Accept-Encoding": "gzip", "Content-Type": "application/json;charset=UTF-8", "Cache-Control": "no-cache", "deviceId": self._shanzha_device_id, "client": "app", "deviceType": "Android", "token": self._shanzha_token} + dr = requests.post(self._shanzha_host + "/api/v1/app/play/movieDesc", headers=desc_hdrs, json=desc_body, timeout=10).json() + dd = dr.get("data", {}) + return [{"vod_id": "shanzha_app|" + str(vid), "vod_name": dd.get("name",""), "vod_pic": dd.get("cover",""), "vod_content": dd.get("introduce",""), "vod_year": dd.get("year",""), "vod_area": dd.get("area",""), "vod_remarks": "", "vod_score": dd.get("score",""), "type_name": dd.get("classify",""), "vod_director": dd.get("director",""), "vod_actor": dd.get("star",""), "vod_play_from": "$$$".join(show), "vod_play_url": "$$$".join(play_urls)}] + except: return None + def _wbbb_detail(self, vid): + try: + soup = BeautifulSoup(requests.get(self.wbbb_host + "/detail/" + str(vid) + ".html", headers=self.wbbb_headers, timeout=10).text, "html.parser") + h1 = soup.select_one("h1"); name = h1.get_text(strip=True) if h1 else "" + desc = soup.select_one(".show-desc p") + dc = desc.get_text(strip=True) if desc else "" + img_el = soup.select_one(".module-info-poster .lazy, .module-info-poster img") + pic = urllib.parse.urljoin(self.wbbb_host, img_el.get("data-original","") or img_el.get("src","")) if img_el else "" + tabs = soup.select(".module-tab-items-box .tab-item") + froms = [t.get("data-dropdown-value", t.get_text(strip=True)) for t in tabs] + pus = [] + for pl in soup.select(".module-play-list"): + eps = [] + for a in pl.select("a.module-play-list-link"): + href = a.get("href","") + if not href: continue + title = a.get("title","") or a.get_text(strip=True) + full_url = self.wbbb_host + href if href.startswith("/") else href + eps.append(title + "$" + full_url) + if eps: pus.append("#".join(eps)) + v = {"vod_id": "wbbb|" + str(vid), "vod_name": name, "vod_pic": pic, "vod_content": dc, "vod_play_from": "$$$".join(froms) if froms else "", "vod_play_url": "$$$".join(pus) if pus else ""} + return {"list": [v]} + except: return {"list": []} + def searchContent(self, key, quick, pg="1"): + result = {"list": [], "page": int(pg) if pg else 1, "pagecount": 1} + sources = self.getSources() + if not sources: return result + seen_ids = set(); all_r = [] + def fet(s): + try: + d = self._post(self.host + "/api/search", {"api": s["api"], "key": key, "quick": quick, "page": int(pg) if pg else 1}, timeout=3) + if not d.get("success"): return [] + items = d.get("data", []) + if isinstance(items, dict): items = items.get("list", []) + if not isinstance(items, list): return [] + out = []; src_name = s.get("name", s.get("key", "")) + for v in items: + if not isinstance(v, dict) or not v.get("vod_id") or not v.get("vod_name"): continue + vid = str(v["vod_id"]) + if vid in seen_ids: continue + seen_ids.add(vid) + out.append({"vod_id": s["key"] + "|" + vid, "vod_name": v.get("vod_name",""), "vod_pic": self._fix(v.get("vod_pic","")), "vod_remarks": src_name}) + return out + except: return [] + pool = ThreadPoolExecutor(max_workers=6) + fs = [pool.submit(fet, s) for s in sources[:6] if s["key"] != "source-8ee56df12f"] + for f in fs: + try: + items = f.result(timeout=5) + if items: all_r.extend(items) + except: continue + pool.shutdown(wait=False) + try: + pg_int = int(pg) if pg else 1 + q = urllib.parse.quote(key) + surl = self.wbbb_host + "/search/" + q + "-------------.html" + if pg_int > 1: surl = self.wbbb_host + "/search/" + q + "----------" + str(pg_int) + "---.html" + ws = BeautifulSoup(requests.get(surl, headers=self.wbbb_headers, timeout=3).text, "html.parser") + for item in ws.select(".module-search-item, .module-item"): + a = item.select_one(".module-poster-item") or (item.select("a[href]") or [None])[0] + if not a: continue + m = re.search(r"/detail/(\d+)\.html", a.get("href","")) + if not m: continue + t = a.get("title","") or a.get_text(strip=True) + img = item.select_one(".lazy") + p = img.get("data-original","") or img.get("src","") if img else "" + if p and not p.startswith("http"): p = urllib.parse.urljoin(self.wbbb_host, p) + if t and m.group(1) not in seen_ids: + seen_ids.add(m.group(1)) + all_r.append({"vod_id": "wbbb|" + m.group(1), "vod_name": t, "vod_pic": p, "vod_remarks": "歪比影视"}) + except: pass + result["list"] = all_r[:100] + return result + def playerContent(self, flag, id, vipFlags): + if id and "wbbb1.com" in str(id): return self._wbbb_play(flag, id) + # 山楂影视播放:识别 @episode 或 @virtual 后缀的播放链接 + if "@" in str(id): + parts = id.split("@") + if len(parts) >= 4: + if parts[-1] == "episode": + eid = parts[2]; pid = parts[1]; vid = id.split("$")[0].split("|")[-1] + body = {"episodeId": eid, "id": int(vid), "playerId": pid, "source": 0, "typeId": "M15", "userId": self._shanzha_userid, "episodeIndex": ""} + ps = self._shanzha_build_params(episode_id=eid, episode_index="", vid=vid, player_id=pid, type_id="M15", user_id=str(self._shanzha_userid)) + resp = self._shanzha_post("/api/v1/app/play/movieDetails", body, ps) + if resp and resp.get("data"): + dj = self._decrypt_response(resp["data"]) + pu = dj.get("url", "") + ppid = dj.get("playerId", "") + ar = requests.get(self._shanzha_host + "/api/v1/app/play/analysisMovieUrl", headers={"User-Agent": "okhttp/4.12.0", "deviceId": self._shanzha_device_id, "token": self._shanzha_token, "client": "app", "deviceType": "Android"}, params={"playerUrl": pu, "playerId": ppid}, timeout=10).json() + final_url = ar.get("data", "") + if final_url: + return {"parse": 0, "url": final_url, "header": json.dumps({"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1"}), "jx": "0"} + elif parts[-1] == "virtual": + ep_idx = parts[0]; pid = parts[1]; vid = parts[2] + body = {"episodeIndex": str(int(ep_idx) - 1), "id": int(vid), "playerId": pid, "source": 0, "typeId": "M15", "userId": self._shanzha_userid, "episodeId": ""} + ps = self._shanzha_build_params(episode_id="", episode_index=str(int(ep_idx) - 1), vid=vid, player_id=pid, type_id="M15", user_id=str(self._shanzha_userid)) + resp = self._shanzha_post("/api/v1/app/play/movieDetails", body, ps) + if resp and resp.get("data"): + dj = self._decrypt_response(resp["data"]) + pu = dj.get("url", "") + ppid = dj.get("playerId", "") + ar = requests.get(self._shanzha_host + "/api/v1/app/play/analysisMovieUrl", headers={"User-Agent": "okhttp/4.12.0", "deviceId": self._shanzha_device_id, "token": self._shanzha_token, "client": "app", "deviceType": "Android"}, params={"playerUrl": pu, "playerId": ppid}, timeout=10).json() + final_url = ar.get("data", "") + if final_url: + return {"parse": 0, "url": final_url, "header": json.dumps({"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1"}), "jx": "0"} + url = id if id.startswith("http") else self.host + id if id.startswith("/") else id + try: + r = requests.get(url, allow_redirects=False, timeout=8, headers=self._play_headers) + if r.status_code in (301, 302, 303, 307, 308): + loc = r.headers.get("location", "") + if loc: + loc = loc if loc.startswith("http") else self.host + loc + return {"parse": 0, "url": loc, "header": json.dumps(self._play_headers)} + except: pass + return {"parse": 0, "url": url, "header": json.dumps(self._play_headers)} + def _wbbb_play(self, flag, id): + try: + res = requests.get(id, headers=self.wbbb_headers, timeout=10) + ifs = ""; u = ""; host = "xn--qvr2v.850088.xyz" + m = re.search(r'player_aaaa\s*=\s*(\{[^;]+\})', res.text) + if m: + try: + pd = json.loads(m.group(1)); u = pd.get("url","") + ifs = "https://" + host + "/player/?url=" + u + except: pass + if not u: + m2 = re.search(r'<iframe[^>]+src="([^"]+)"', res.text) + if m2: + ifs = m2.group(1).replace("&", "&") + u = urllib.parse.parse_qs(urllib.parse.urlparse(ifs).query).get("url", [""])[0] + if not u: return {"parse": 1, "url": id, "header": json.dumps(self.wbbb_headers)} + if u.endswith(".m3u8") or u.endswith(".mp4"): + return {"parse": 0, "url": u, "header": json.dumps({"User-Agent": self.wbbb_headers["User-Agent"], "Referer": self.wbbb_host, "pics": "1"})} + salt = "stray"; t = str(int(time.time())) + url_md5 = self._get_md5(u); rc4_k = (url_md5 + " P")[-22:] + kv = self._enplay(rc4_k, self._get_md5(u + salt)) + vk = self._enplay(rc4_k, t + self._get_md5(rc4_k + salt)) + ck = self._enplay(rc4_k, self._get_md5(host + salt)) + ah = {"User-Agent": self.wbbb_headers["User-Agent"], "Referer": ifs, "Origin": "https://" + host, "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", "Accept": "application/json, text/javascript, */*; q=0.01", "X-Requested-With": "XMLHttpRequest"} + ar = requests.post("https://" + host + "/player/api.php", data={"url": u, "key": kv, "vkey": vk, "ckey": ck}, headers=ah, timeout=10) + if ar.status_code == 200: + e = ar.json().get("url","") + if e: + real = self._decrypt_m3u8(e) + return {"parse": 0, "url": real, "header": json.dumps({"User-Agent": ah["User-Agent"], "Referer": "https://" + host + "/", "pics": "1"})} + return {"parse": 1, "url": ifs, "header": json.dumps({"User-Agent": self.wbbb_headers["User-Agent"], "Referer": self.wbbb_host})} + except Exception as e: + return {"parse": 1, "url": id, "header": json.dumps(self.wbbb_headers)} + def _get_md5(self, text): + return hashlib.md5(str(text).encode("utf-8")).hexdigest() + def _rc4(self, key, data): + S = list(range(256)); j = 0; kb = key.encode("utf-8") + for i in range(256): j = (j + S[i] + kb[i % len(kb)]) % 256; S[i], S[j] = S[j], S[i] + i = 0; j = 0; r = bytearray() + for c in data.encode("utf-8"): + i = (i + 1) % 256; j = (j + S[i]) % 256; S[i], S[j] = S[j], S[i] + r.append(c ^ S[(S[i] + S[j]) % 256]) + return r + def _enplay(self, key, data): return base64.b64encode(self._rc4(key, data)).decode("utf-8") + def _decrypt_m3u8(self, e): + from Crypto.Cipher import AES + from Crypto.Util.Padding import unpad + cipher = AES.new(b"OddfJktEbGu7gCv9", AES.MODE_CBC, b"okjutU3RjGpWqB8Z") + return unpad(cipher.decrypt(base64.b64decode(e)), AES.block_size).decode("utf-8") diff --git a/tianjitop/llllo4k/py/麻花.py b/tianjitop/llllo4k/py/麻花.py new file mode 100644 index 00000000..23527945 --- /dev/null +++ b/tianjitop/llllo4k/py/麻花.py @@ -0,0 +1,283 @@ +#coding=utf-8 +import sys +import re +import json +import html as html_module +import requests +sys.path.append('..') +from base.spider import Spider + +class Spider(Spider): + def __init__(self): + super().__init__() + self.site = 'https://www.jxuma.com' + self.session = requests.Session() + self.ua = 'Mozilla/5.0 (Linux; Android 10; SM-G973F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36' + self.session.headers.update({'User-Agent': self.ua}) + self.cateManual = { + '电影': '1', + '电视剧': '2', + '综艺': '3', + '动漫': '4', + '短剧': '36', + } + self._m = chr(0x661f) + chr(0x6cb3) + + def _clean(self, text): + if not text: + return '' + text = re.sub(r'<[^>]+>', '', text) + text = html_module.unescape(text) + text = text.replace('\xa0', ' ') + text = ' '.join(text.split()) + return text.strip() + + def _get(self, url): + try: + r = self.session.get(url, timeout=15, headers={'Referer': self.site}) + r.encoding = 'utf-8' + return r.text + except: + return '' + + def init(self, extend=''): + pass + + def getName(self): + return '麻花影视' + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def homeContent(self, filter): + result = {'class': [], 'filters': {}, 'list': [], 'parse': 0, 'jx': 0} + for k, v in self.cateManual.items(): + result['class'].append({'type_id': str(v), 'type_name': k}) + return result + + def _extract_list(self, html): + videos = [] + seen = set() + for m in re.finditer(r'href="/umo/(\d+)\.html"[^>]*?title="([^"]*)"', html): + vid = m.group(1) + title = m.group(2).strip() + if vid in seen or not title: + continue + snippet = html[m.start():m.start()+400] + pm = re.search(r'data-original="([^"]*)"', snippet) + pic = pm.group(1).strip() if pm else '' + if vid in seen: + continue + seen.add(vid) + note = '' + nm = re.search(r'pic-text text-right">([^<]*)', snippet) + if nm: + note = nm.group(1).strip() + videos.append({ + 'vod_id': vid, + 'vod_name': title, + 'vod_pic': pic, + 'vod_remarks': note + }) + return videos + + def homeVideoContent(self): + result = {'list': [], 'parse': 0, 'jx': 0} + html = self._get(self.site) + if html: + result['list'] = self._extract_list(html) + return result + + def categoryContent(self, tid, pg, filter, extend): + result = {'list': [], 'parse': 0, 'jx': 0} + page = int(pg) if pg else 1 + url = f'{self.site}/jxk/{tid}.html' + html = self._get(url) + if html: + result['list'] = self._extract_list(html) + result['page'] = page + result['pagecount'] = page + 1 if result['list'] else page + result['limit'] = len(result['list']) + result['total'] = len(result['list']) + return result + + def detailContent(self, ids): + result = {'list': [], 'parse': 0, 'jx': 0} + vid = '' + if isinstance(ids, list): + vid = ids[0] if ids else '' + elif ids: + vid = str(ids) + if not vid: + return result + # 用播放页第一集来获取 player_aaaa 数据 + html = self._get(f'{self.site}/aey/{vid}/1-1.html') + if not html: + return result + + # 提取 player_aaaa + pd = {} + m = re.search(r'var player_aaaa=(\{[^<]+\})', html) + if m: + try: + pd = json.loads(m.group(1)) + except: + pass + + # 从详情页获取更多信息 + detail_html = self._get(f'{self.site}/umo/{vid}.html') + + # 标题 + title = pd.get('vod_data', {}).get('vod_name', '') + if not title: + m2 = re.search(r'<h1[^>]*class="title"[^>]*>([^<]*)', detail_html) + if m2: + title = self._clean(m2.group(1)) + if not title: + m2 = re.search(r'<title>([^<]+)', detail_html) + if m2: + title = self._clean(re.sub(r'\s*[-–—].*$', '', m2.group(1))) + + # 封面 + pic = '' + m2 = re.search(r'data-original="([^"]+)"[^>]*class="[^"]*cover[^"]*"', detail_html) + if not m2: + m2 = re.search(r'data-original="([^"]+)"[^>]*rel="nofollow"', detail_html) + if m2: + pic = m2.group(1).strip() + + # 类型、地区、年份、语言、主演、导演、简介 + def extract_info(pattern, text): + m3 = re.search(pattern, text) + if m3: + return self._clean(m3.group(1)) + return '' + + vod_class = extract_info(r'类型:</span>(.*?)(?:</a>|<span)', detail_html) + area = extract_info(r'地区:</span>(.*?)(?:</a>|<span)', detail_html) + year = extract_info(r'年份:</span>(.*?)(?:</a>|<span)', detail_html) + lang = extract_info(r'语言:</span>(.*?)(?:</a>|<span)', detail_html) + actor = extract_info(r'主演:</span>(.*?)(?:</p>|</div>)', detail_html) + if not actor: + actor = pd.get('vod_data', {}).get('vod_actor', '') + director = extract_info(r'导演:</span>(.*?)(?:</p>|</div>)', detail_html) + if not director: + director = pd.get('vod_data', {}).get('vod_director', '') + if director: + director = self._m + '、' + director + else: + director = self._m + + desc = extract_info(r'detail-sketch">(.*?)</span>', detail_html) + + # 播放列表 - 从详情页提取所有线路和集数 + play_from = [] + play_url_list = [] + + # 提取线路名(在 playlist data-toggle="tab" 里) + line_names = re.findall(r'playlist\d+" data-toggle="tab"[^>]*rel="nofollow">([^<]+)<', detail_html) + # 如果没找到,尝试提取 pannel__head 里的文字 + if not line_names: + line_names = re.findall(r'pannel__head[^>]*>([^<]*)<', detail_html) + + # 提取每个播放面板的链接 + link_groups = re.findall(r'tab-pane fade[^>]*>(.*?)</ul>', detail_html, re.DOTALL) + + for i, group_html in enumerate(link_groups): + line_name = line_names[i] if i < len(line_names) else f'线路{i+1}' + line_name = self._clean(line_name) + episodes = [] + for em in re.finditer(r'href="(/aey/\d+/(\d+-\d+)\.html)"[^>]*>([^<]*)<', group_html): + ep_href = em.group(1) + ep_label = em.group(3).strip() + if ep_label and ep_href: + episodes.append(f'{ep_label}${ep_href}') + if episodes: + play_from.append(line_name) + play_url_list.append('#'.join(episodes)) + + # 把华为云排到第一个(1080p) + for i, name in enumerate(play_from): + if '华为' in name and i > 0: + play_from.insert(0, play_from.pop(i)) + play_url_list.insert(0, play_url_list.pop(i)) + break + + # 备用:如果详情页没有找到播放列表,直接用播放页的 URL + if not play_from and pd: + url = pd.get('url', '') + from_flag = pd.get('from', '') + if url: + play_from.append(from_flag or '线路①') + play_url_list.append(f'播放${url}') + + vod = { + 'vod_id': vid, + 'vod_name': title, + 'vod_pic': pic, + 'type_name': vod_class, + 'vod_year': year, + 'vod_area': area, + 'vod_lang': lang, + 'vod_remarks': '', + 'vod_actor': actor, + 'vod_director': director, + 'vod_content': desc, + 'vod_play_from': '$$$'.join(play_from), + 'vod_play_url': '$$$'.join(play_url_list) + } + result['list'].append(vod) + return result + + def playerContent(self, flag, id, vipFlags): + result = {} + try: + # id 格式: /aey/119317/1-1.html + play_url = id + if not play_url.startswith('http'): + play_url = self.site + play_url + + html = self._get(play_url) + m = re.search(r'var player_aaaa=(\{[^<]+\})', html) + if m: + pd = json.loads(m.group(1)) + url = pd.get('url', '') + if url: + result['parse'] = 0 + result['url'] = url + result['jx'] = 0 + result['header'] = { + 'User-Agent': self.ua, + 'Referer': self.site + '/' + } + return result + + # 备用:嗅探 + result['parse'] = 1 + result['url'] = play_url + result['jx'] = 0 + result['header'] = { + 'User-Agent': self.ua, + 'Referer': self.site + '/' + } + except Exception as e: + print(f'playerContent error: {e}') + + if not result: + result = {'parse': 1, 'url': '', 'jx': 0, 'header': {}} + return result + + def searchContent(self, key, quick, pg='1'): + result = {'list': [], 'parse': 0, 'jx': 0} + wd = requests.utils.quote(key) + url = f'{self.site}/search/-------------.html?wd={wd}' + html = self._get(url) + if html: + result['list'] = self._extract_list(html) + return result + + def localProxy(self, params): + return [200, "video/MP2T", {}, ""] diff --git a/tianjitop/llllo4k/xiaosa.jar b/tianjitop/llllo4k/xiaosa.jar new file mode 100644 index 00000000..1f873c97 Binary files /dev/null and b/tianjitop/llllo4k/xiaosa.jar differ diff --git a/tianjitop/llllo4k/配置地址.txt b/tianjitop/llllo4k/配置地址.txt new file mode 100644 index 00000000..ef5524ff --- /dev/null +++ b/tianjitop/llllo4k/配置地址.txt @@ -0,0 +1 @@ +clan://localhost/tvbox/api/api.json \ No newline at end of file diff --git a/tianjitop/llllo4k/金桔.js b/tianjitop/llllo4k/金桔.js new file mode 100644 index 00000000..ca652d92 --- /dev/null +++ b/tianjitop/llllo4k/金桔.js @@ -0,0 +1,377 @@ +import cheerio from 'assets://js/lib/cheerio.min.js'; + +const appConfig = { + siteName: "金桔影视", + siteUrl: "https://htsdaz.com" +} +const UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"; + +async function init(ext) { + console.log("初始化爬虫:", appConfig.siteName); +} + +const movieClass = [ + { "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": "惊悚" }, { "n": "经典", "v": "经典" }, + { "n": "青春", "v": "青春" }, { "n": "文艺", "v": "文艺" }, { "n": "微电影", "v": "微电影" }, + { "n": "古装", "v": "古装" }, { "n": "历史", "v": "历史" }, { "n": "运动", "v": "运动" }, + { "n": "农村", "v": "农村" }, { "n": "儿童", "v": "儿童" }, { "n": "网络电影", "v": "网络电影" } +]; + +const tvClass = [ + { "n": "全部", "v": "" }, { "n": "国产剧", "v": "国产剧" }, { "n": "港剧", "v": "港剧" }, + { "n": "欧美剧", "v": "欧美剧" }, { "n": "日剧", "v": "日剧" }, { "n": "台剧", "v": "台剧" }, + { "n": "泰剧", "v": "泰剧" }, { "n": "韩剧", "v": "韩剧" }, { "n": "海外剧", "v": "海外剧" }, + { "n": "Netflix自制剧", "v": "Netflix自制剧" } +]; + +const areaFilter = [ + { "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": "其他" } +]; + +const langFilter = [ + { "n": "全部", "v": "" }, { "n": "国语", "v": "国语" }, { "n": "英语", "v": "英语" }, + { "n": "粤语", "v": "粤语" }, { "n": "闽南语", "v": "闽南语" }, { "n": "韩语", "v": "韩语" }, + { "n": "日语", "v": "日语" }, { "n": "法语", "v": "法语" }, { "n": "德语", "v": "德语" }, + { "n": "其它", "v": "其它" } +]; + +function getYearFilter() { + let years = [{ "n": "全部", "v": "" }]; + const currentYear = new Date().getFullYear(); + for (let y = currentYear; y >= 2000; y--) { + years.push({ "n": String(y), "v": String(y) }); + } + return { "key": "year", "name": "年份", "value": years }; +} + +const myFilters = { + "1": [ + { "key": "class", "name": "类型", "value": movieClass }, + { "key": "area", "name": "地区", "value": areaFilter }, + { "key": "lang", "name": "语言", "value": langFilter }, + getYearFilter() + ], + "2": [ + { "key": "class", "name": "类型", "value": tvClass }, + { "key": "area", "name": "地区", "value": areaFilter }, + { "key": "lang", "name": "语言", "value": langFilter }, + getYearFilter() + ], + "3": [ + { "key": "area", "name": "地区", "value": areaFilter }, + { "key": "lang", "name": "语言", "value": langFilter }, + getYearFilter() + ], + "4": [ + { "key": "area", "name": "地区", "value": areaFilter }, + { "key": "lang", "name": "语言", "value": langFilter }, + getYearFilter() + ], + "34": [ + { "key": "area", "name": "地区", "value": areaFilter }, + { "key": "lang", "name": "语言", "value": langFilter }, + getYearFilter() + ] +}; + +async function home(filter) { + return JSON.stringify({ + class: [ + { type_id: "1", type_name: "电影" }, + { type_id: "2", type_name: "电视剧" }, + { type_id: "3", type_name: "综艺" }, + { type_id: "4", type_name: "动漫" }, + { type_id: "34", type_name: "短剧" } + ], + filters: myFilters + }); +} + +function buildCategoryUrl(tid, pg, extend) { + let classVal = extend.class || ''; + let areaVal = extend.area || ''; + let langVal = extend.lang || ''; + let yearVal = extend.year || ''; + + if (!classVal && !areaVal && !langVal && !yearVal) { + return `${appConfig.siteUrl}/stream/${tid}_${pg}.html`; + } + let filter = `${classVal}-${areaVal}-${langVal}-${yearVal}------`; + return `${appConfig.siteUrl}/stream/${tid}_${pg}/${filter}.html`; +} + +async function category(tid, pg, filter, extend) { + pg = pg || 1; + extend = extend || {}; + + let url = buildCategoryUrl(tid, pg, extend); + + try { + const html = (await req(url)).content; + const $ = cheerio.load(html); + let list = []; + + $("ul.stui-vodlist.clearfix .stui-vodlist__thumb.lazyload").each(function (index, el) { + let vod_id = $(el).attr("href"); + let vod_name = $(el).attr("title"); + let vod_pic = $(el).attr("data-original"); + let vod_remarks = $(el).find(".pic-text").text().trim(); + + if (vod_id && vod_name) { + list.push({ vod_id, vod_name, vod_pic, vod_remarks }); + } + }); + + let pagecount = 1; + $("a:contains('尾页')").each(function () { + let href = $(this).attr("href"); + if (href) { + let m = href.match(/\/stream\/\d+_(\d+)/); + if (m) { + let p = parseInt(m[1]); + if (p > pagecount) pagecount = p; + } + } + }); + + if (pagecount <= 1) { + let maxPage = 1; + $(".stui-page a, .mac_pages a").each(function () { + let href = $(this).attr("href"); + if (href) { + let m = href.match(/\/stream\/\d+_(\d+)/); + if (m) { + let p = parseInt(m[1]); + if (p > maxPage) maxPage = p; + } + } + }); + pagecount = maxPage; + } + + return JSON.stringify({ list, pagecount }); + } catch (e) { + console.error("分类列表获取失败:", e.message); + return JSON.stringify({ list: [], pagecount: 0 }); + } +} + +async function search(wd, quick, page) { + if (page >= 2) return JSON.stringify({ list: [], pagecount: 1 }); + try { + const url = `${appConfig.siteUrl}/search/${encodeURIComponent(wd)}.html`; + const html = (await req(url)).content; + const $ = cheerio.load(html); + let list = []; + + $("ul.stui-vodlist.clearfix .stui-vodlist__thumb.lazyload").each(function (i, el) { + let vod_id = $(el).attr("href"); + let vod_name = $(el).attr("title"); + let vod_pic = $(el).attr("data-original"); + let vod_remarks = $(el).find(".pic-text").text().trim(); + + if (vod_id && vod_name) { + list.push({ vod_id, vod_name, vod_pic, vod_remarks }); + } + }); + + return JSON.stringify({ list, pagecount: 1 }); + } catch (e) { + console.error("搜索失败:", e.message); + return JSON.stringify({ list: [] }); + } +} + +async function detail(id) { + try { + const html = (await req(appConfig.siteUrl + id)).content; + const $ = cheerio.load(html); + + const vod_name = $('.stui-content__detail h1, .stui-content__detail .title').first().text().trim(); + const imgSrc = $('.stui-content__thumb img').attr("data-original") || ''; + const vod_pic = imgSrc ? (imgSrc.startsWith('http') ? imgSrc : appConfig.siteUrl + imgSrc) : ''; + + let vod_actor = ''; + let vod_director = ''; + let vod_remarks = ''; + let vod_year = ''; + let vod_area = ''; + + $('.stui-content__detail p.data').each((i, el) => { + const text = $(el).text(); + if (text.includes('主演')) { + vod_actor = $(el).find('a').map(function () { return $(this).text().trim(); }).get().join(','); + } else if (text.includes('导演')) { + vod_director = $(el).find('a').map(function () { return $(this).text().trim(); }).get().join(','); + } else if (text.includes('状态')) { + vod_remarks = text.replace(/.*状态[::]/g, '').trim(); + } else if (text.includes('年份')) { + vod_year = $(el).find('a').text().trim(); + } else if (text.includes('地区')) { + vod_area = $(el).find('a').text().trim(); + } + }); + + const vod_content = $('.stui-content__detail .detail, .stui-content__detail .desc').text().trim(); + + let rawLines = []; + let rawPlaylists = []; + + $('.nav-tabs li a').each((i, el) => { + const lineName = $(el).text().trim(); + if (lineName && lineName !== '全部') { + rawLines.push(lineName); + } + }); + + $('.stui-content__playlist').each((lineIndex, poolEl) => { + const episodes = []; + $(poolEl).find('a').each((episodeIndex, epEl) => { + const name = $(epEl).text().trim(); + const href = $(epEl).attr('href') || ''; + if (name && href) { + episodes.push(`${name}$${href}`); + } + }); + rawPlaylists.push(episodes); + }); + + if (rawLines.length === 0 && rawPlaylists.length > 0) { + for (let i = 0; i < rawPlaylists.length; i++) { + rawLines.push(`线路${i + 1}`); + } + } + + let finalLines = []; + let finalPlaylists = []; + for (let i = 0; i < rawLines.length; i++) { + if (rawPlaylists[i] && rawPlaylists[i].length > 0) { + finalLines.push(rawLines[i]); + finalPlaylists.push(rawPlaylists[i]); + } + } + + const { vod_play_from, vod_play_url } = buildVodPlayData(finalLines, finalPlaylists); + + const vod = { + vod_id: id, vod_name, vod_pic, vod_actor, vod_director, + vod_remarks, vod_year, vod_area, vod_content, + vod_play_from, vod_play_url + }; + + return JSON.stringify({ list: [vod] }); + } catch (error) { + console.error(`解析详情页异常 [ID: ${id}]:`, error); + return JSON.stringify({ list: [] }); + } +} + +function buildVodPlayData(lines, playlists) { + const processedPlaylists = playlists.map(eps => eps.join('#')); + return { + vod_play_from: lines.filter(Boolean).join('$$$'), + vod_play_url: processedPlaylists.join('$$$') + }; +} + +function base64Decode(str) { + const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; + let output = ''; + let i = 0; + str = str.replace(/[^A-Za-z0-9\+\/\=]/g, ''); + while (i < str.length) { + let enc1 = chars.indexOf(str.charAt(i++)); + let enc2 = chars.indexOf(str.charAt(i++)); + let enc3 = chars.indexOf(str.charAt(i++)); + let enc4 = chars.indexOf(str.charAt(i++)); + let chr1 = (enc1 << 2) | (enc2 >> 4); + let chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); + let chr3 = ((enc3 & 3) << 6) | enc4; + output += String.fromCharCode(chr1); + if (enc3 !== 64) output += String.fromCharCode(chr2); + if (enc4 !== 64) output += String.fromCharCode(chr3); + } + return decodeURIComponent(escape(output)); +} + +function extractVideoUrl(html) { + const partsMatch = html.match(/const\s+parts\s*=\s*\[([^\]]+)\]/); + if (partsMatch) { + try { + const parts = JSON.parse('[' + partsMatch[1] + ']'); + let base64Str = ''; + for (let i = 0; i < parts.length; i++) { + base64Str += parts[i]; + } + const decoded = base64Decode(base64Str); + if (decoded && decoded.startsWith('http')) { + return decoded; + } + } catch (e) { + console.error("base64解码失败:", e.message); + } + } + + const playerMatch = html.match(/var\s+player_aaaa[\s\S]*?"url"\s*:\s*"([^"]+)"/); + if (playerMatch) { + return playerMatch[1].replace(/\\/g, ''); + } + + return ''; +} + +async function play(flag, id, flags) { + try { + const html = (await req(`${appConfig.siteUrl}${id}`)).content; + const url = extractVideoUrl(html); + + if (url) { + if (url.endsWith('.m3u8') || url.endsWith('.mp4') || (url.startsWith('http') && !url.includes('.html'))) { + return JSON.stringify({ + parse: 0, + Header: { "User-Agent": UA, "Referer": appConfig.siteUrl }, + url: url + }); + } + return JSON.stringify({ + parse: 1, + Header: { "User-Agent": UA, "Referer": appConfig.siteUrl }, + url: url + }); + } + + const $ = cheerio.load(html); + const iframeSrc = $('#playerIframe').attr('src') || $('iframe').attr('src'); + if (iframeSrc) { + return JSON.stringify({ + parse: 1, + Header: { "User-Agent": UA, "Referer": appConfig.siteUrl }, + url: iframeSrc + }); + } + + return JSON.stringify({ parse: 0, url: "" }); + } catch (e) { + console.error("播放失败:", e); + return JSON.stringify({ parse: 0, url: "" }); + } +} + +export default { + init, + home, + category, + detail, + search, + play +}; diff --git a/tvbox/lib/iptv.m3u b/tvbox/lib/iptv.m3u index 0b4477ac..95d001b9 100755 --- a/tvbox/lib/iptv.m3u +++ b/tvbox/lib/iptv.m3u @@ -64,9 +64,9 @@ http://106.53.99.30/tv/api.php?id=bjws4k$LR•IPV4•5『线路5』 #EXTINF:-1 tvg-id="CCTV4K" tvg-name="CCTV4K" group-title="4K",CCTV4K http://101.43.145.141:12002/gaoma/cctv4k.m3u8$LR•IPV4•6『线路1』 #EXTINF:-1 tvg-id="CCTV4K" tvg-name="CCTV4K" group-title="4K",CCTV4K -https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4k_mbd.m3u8?auth_key=1784322000-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-aa68fb06c12f53b71a4d170807f32df5&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•6『线路2』 +https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4k_mbd.m3u8?auth_key=1784329200-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-81ad4aefc95ce528b3da1112f0bc9ff2&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•6『线路2』 #EXTINF:-1 tvg-id="CCTV4K" tvg-name="CCTV4K" group-title="4K",CCTV4K -https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4k_mbd.m3u8?auth_key=1784325600-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-da48bbac79b9621fa8f084ece04c2c91&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•6『线路3』 +https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4k_mbd.m3u8?auth_key=1784322000-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-aa68fb06c12f53b71a4d170807f32df5&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•6『线路3』 #EXTINF:-1 tvg-id="CCTV4K" tvg-name="CCTV4K" group-title="4K",CCTV4K http://198.204.240.250:82/live/cctv4k.m3u8$LR•IPV4•6『线路4』 #EXTINF:-1 tvg-id="CCTV4K" tvg-name="CCTV4K" group-title="4K",CCTV4K @@ -162,11 +162,11 @@ http://74.91.26.218:82/live/cctv4hd.m3u8$LR•IPV4•16『线路8』 #EXTINF:-1 tvg-id="CCTV4" tvg-name="CCTV4" group-title="央视",CCTV4 p3p://167.114.175.6:55331/61244d9c0006885d64b1b7591f6c12a0$LR•IPV4•16『线路9』 #EXTINF:-1 tvg-id="CCTV4" tvg-name="CCTV4" group-title="央视",CCTV4 -https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784322000-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-25fe408e6545f49f3d4eb7f92e97c764&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•16『线路10』 +https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784329200-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-2245971645866ed95972e22af68cc8d1&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•16『线路10』 #EXTINF:-1 tvg-id="CCTV4" tvg-name="CCTV4" group-title="央视",CCTV4 -https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784325600-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-b583b000601c3690c0e4bae75e1261f0&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•16『线路11』 +https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784271600-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-6aec44040ec72def77e22587fc404005&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•16『线路11』 #EXTINF:-1 tvg-id="CCTV4" tvg-name="CCTV4" group-title="央视",CCTV4 -https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784271600-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-6aec44040ec72def77e22587fc404005&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•16『线路12』 +https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784322000-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-25fe408e6545f49f3d4eb7f92e97c764&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•16『线路12』 #EXTINF:-1 tvg-id="CCTV4" tvg-name="CCTV4" group-title="央视",CCTV4 http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226335/1.m3u8?$LR•IPV6•16『线路13』 #EXTINF:-1 tvg-id="CCTV4" tvg-name="CCTV4" group-title="央视",CCTV4 @@ -184,13 +184,13 @@ http://221.226.51.220:50081/newlive/live/hls/5/live.m3u8$LR•IPV4•14『线路 #EXTINF:-1 tvg-id="CCTV5" tvg-name="CCTV5" group-title="央视",CCTV5 http://112.27.235.94:8000/hls/5/index.m3u8$LR•IPV4•14『线路4』 #EXTINF:-1 tvg-id="CCTV5" tvg-name="CCTV5" group-title="央视",CCTV5 -http://38.75.136.137:98/gslb/dsdqbv/cctv5hd.m3u8?auth=test20251009$LR•IPV4•14『线路5』 +http://101.66.199.247:9901/tsfile/live/0005_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•14『线路5』 #EXTINF:-1 tvg-id="CCTV5" tvg-name="CCTV5" group-title="央视",CCTV5 -http://112.46.105.20:8009/hls/503/index.m3u8$LR•IPV4•14『线路6』 +http://38.75.136.137:98/gslb/dsdqbv/cctv5hd.m3u8?auth=test20251009$LR•IPV4•14『线路6』 #EXTINF:-1 tvg-id="CCTV5" tvg-name="CCTV5" group-title="央视",CCTV5 -http://153.0.171.163:9901/tsfile/live/0005_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•14『线路7』 +http://112.46.105.20:8009/hls/503/index.m3u8$LR•IPV4•14『线路7』 #EXTINF:-1 tvg-id="CCTV5" tvg-name="CCTV5" group-title="央视",CCTV5 -http://101.66.199.247:9901/tsfile/live/0005_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•14『线路8』 +http://153.0.171.163:9901/tsfile/live/0005_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•14『线路8』 #EXTINF:-1 tvg-id="CCTV5" tvg-name="CCTV5" group-title="央视",CCTV5 http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226469/1.m3u8?$LR•IPV6•14『线路9』 #EXTINF:-1 tvg-id="CCTV5" tvg-name="CCTV5" group-title="央视",CCTV5 @@ -198,9 +198,9 @@ http://183.129.255.66:8480/hls/6/index.m3u8$LR•IPV4•14『线路10』 #EXTINF:-1 tvg-id="CCTV5" tvg-name="CCTV5" group-title="央视",CCTV5 http://112.27.235.94:8000/hls/6/index.m3u8$LR•IPV4•14『线路11』 #EXTINF:-1 tvg-id="CCTV5" tvg-name="CCTV5" group-title="央视",CCTV5 -http://38.75.136.137:98/gslb/dsdqbv/cctv5p.m3u8?auth=test20251009$LR•IPV4•14『线路12』 +http://112.123.243.37:50085/tsfile/live/0006_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•14『线路12』 #EXTINF:-1 tvg-id="CCTV5" tvg-name="CCTV5" group-title="央视",CCTV5 -http://112.123.243.37:50085/tsfile/live/0006_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•14『线路13』 +http://38.75.136.137:98/gslb/dsdqbv/cctv5p.m3u8?auth=test20251009$LR•IPV4•14『线路13』 #EXTINF:-1 tvg-id="CCTV5" tvg-name="CCTV5" group-title="央视",CCTV5 http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226894/1.m3u8?$LR•IPV6•14『线路14』 #EXTINF:-1 tvg-id="CCTV6" tvg-name="CCTV6" group-title="央视",CCTV6 @@ -302,9 +302,9 @@ http://112.46.105.20:8009/hls/509/index.m3u8$LR•IPV4•12『线路6』 #EXTINF:-1 tvg-id="CCTV9" tvg-name="CCTV9" group-title="央视",CCTV9 http://153.0.171.163:9901/tsfile/live/1008_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•12『线路7』 #EXTINF:-1 tvg-id="CCTV9" tvg-name="CCTV9" group-title="央视",CCTV9 -https://v4-e6b1c5baf4e240fe63adbf68dda23435.livehwc4.com/play.kankanlive.com/live/1698423397390920.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=f3fb3ddaca05941087114cf6481e1c23$LR•IPV4•12『线路8』 +https://v4-e6b1c5baf4e240fe63adbf68dda23435.livehwc4.com/play.kankanlive.com/live/1698423397390920.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=8a921813ee3b23c82763145c9f291a3b$LR•IPV4•12『线路8』 #EXTINF:-1 tvg-id="CCTV9" tvg-name="CCTV9" group-title="央视",CCTV9 -https://v4-702cae17a28d6e4f0c0002bba021d934.livehwc4.com/play.kankanlive.com/live/1698423397390920.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=2b87983b301b48537526846889074801$LR•IPV4•12『线路9』 +https://v4-e6b1c5baf4e240fe63adbf68dda23435.livehwc4.com/play.kankanlive.com/live/1698423397390920.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=f3fb3ddaca05941087114cf6481e1c23$LR•IPV4•12『线路9』 #EXTINF:-1 tvg-id="CCTV9" tvg-name="CCTV9" group-title="央视",CCTV9 http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226944/1.m3u8?$LR•IPV6•12『线路10』 #EXTINF:-1 tvg-id="CCTV9" tvg-name="CCTV9" group-title="央视",CCTV9 @@ -328,11 +328,11 @@ http://112.46.105.20:8009/hls/506/index.m3u8$LR•IPV4•11『线路7』 #EXTINF:-1 tvg-id="CCTV10" tvg-name="CCTV10" group-title="央视",CCTV10 http://74.91.26.218:82/live/cctv10hd.m3u8$LR•IPV4•11『线路8』 #EXTINF:-1 tvg-id="CCTV10" tvg-name="CCTV10" group-title="央视",CCTV10 -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226937/1.m3u8?$LR•IPV6•11『线路9』 +https://jsv-live-play.sfccn.com/live/jsv_3920_fhd.m3u8$LR•IPV4•11『线路9』 #EXTINF:-1 tvg-id="CCTV10" tvg-name="CCTV10" group-title="央视",CCTV10 -https://hwapi.yntv.net/ew265l/z1z6s5.m3u8$LR•IPV4•11『线路10』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226937/1.m3u8?$LR•IPV6•11『线路10』 #EXTINF:-1 tvg-id="CCTV10" tvg-name="CCTV10" group-title="央视",CCTV10 -https://jsv-live-play.sfccn.com/live/jsv_3920_fhd.m3u8$LR•IPV4•11『线路11』 +https://hwapi.yntv.net/ew265l/z1z6s5.m3u8$LR•IPV4•11『线路11』 #EXTINF:-1 tvg-id="CCTV11" tvg-name="CCTV11" group-title="央视",CCTV11 http://183.129.255.66:8480/hls/12/index.m3u8$LR•IPV4•8『线路1』 #EXTINF:-1 tvg-id="CCTV11" tvg-name="CCTV11" group-title="央视",CCTV11 @@ -346,9 +346,9 @@ http://38.75.136.137:98/gslb/dsdqbv/cctv11hd.m3u8?auth=test20251009$LR•IPV4• #EXTINF:-1 tvg-id="CCTV11" tvg-name="CCTV11" group-title="央视",CCTV11 http://74.91.26.218:82/live/cctv11hd.m3u8$LR•IPV4•8『线路6』 #EXTINF:-1 tvg-id="CCTV11" tvg-name="CCTV11" group-title="央视",CCTV11 -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226334/1.m3u8?$LR•IPV6•8『线路7』 +http://183.196.25.171:808/hls/11/index.m3u8$LR•IPV4•8『线路7』 #EXTINF:-1 tvg-id="CCTV11" tvg-name="CCTV11" group-title="央视",CCTV11 -http://183.196.25.171:808/hls/11/index.m3u8$LR•IPV4•8『线路8』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226334/1.m3u8?$LR•IPV6•8『线路8』 #EXTINF:-1 tvg-id="CCTV12" tvg-name="CCTV12" group-title="央视",CCTV12 http://112.123.243.37:50085/tsfile/live/0013_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•9『线路1』 #EXTINF:-1 tvg-id="CCTV12" tvg-name="CCTV12" group-title="央视",CCTV12 @@ -408,9 +408,9 @@ http://153.0.171.163:9901/tsfile/live/1013_1.m3u8?key=txiptv&playlive=1&authid=0 #EXTINF:-1 tvg-id="CCTV14" tvg-name="CCTV14" group-title="央视",CCTV14 http://112.27.235.94:8000/hls/15/index.m3u8$LR•IPV4•9『线路5』 #EXTINF:-1 tvg-id="CCTV14" tvg-name="CCTV14" group-title="央视",CCTV14 -http://38.75.136.137:98/gslb/dsdqbv/cctv14hd.m3u8?auth=test20251009$LR•IPV4•9『线路6』 +http://112.123.243.37:50085/tsfile/live/0015_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•9『线路6』 #EXTINF:-1 tvg-id="CCTV14" tvg-name="CCTV14" group-title="央视",CCTV14 -http://112.123.243.37:50085/tsfile/live/0015_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•9『线路7』 +http://38.75.136.137:98/gslb/dsdqbv/cctv14hd.m3u8?auth=test20251009$LR•IPV4•9『线路7』 #EXTINF:-1 tvg-id="CCTV14" tvg-name="CCTV14" group-title="央视",CCTV14 http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226947/1.m3u8?$LR•IPV6•9『线路8』 #EXTINF:-1 tvg-id="CCTV14" tvg-name="CCTV14" group-title="央视",CCTV14 @@ -458,11 +458,11 @@ http://38.75.136.137:98/gslb/dsdqbv/cctv17hd.m3u8?auth=test20251009$LR•IPV4• #EXTINF:-1 tvg-id="CCTV17" tvg-name="CCTV17" group-title="央视",CCTV17 http://74.91.26.218:82/live/cctv17hd.m3u8$LR•IPV4•9『线路6』 #EXTINF:-1 tvg-id="CCTV17" tvg-name="CCTV17" group-title="央视",CCTV17 -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226318/1.m3u8?$LR•IPV6•9『线路7』 +http://183.196.25.171:808/hls/93/index.m3u8$LR•IPV4•9『线路7』 #EXTINF:-1 tvg-id="CCTV17" tvg-name="CCTV17" group-title="央视",CCTV17 -http://38.75.136.137:98/gslb/dsdqpub/cctv17hd.m3u8?auth=testpub$LR•IPV4•9『线路8』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226318/1.m3u8?$LR•IPV6•9『线路8』 #EXTINF:-1 tvg-id="CCTV17" tvg-name="CCTV17" group-title="央视",CCTV17 -http://183.196.25.171:808/hls/93/index.m3u8$LR•IPV4•9『线路9』 +http://38.75.136.137:98/gslb/dsdqpub/cctv17hd.m3u8?auth=testpub$LR•IPV4•9『线路9』 #EXTINF:-1 tvg-id="CCTV第一剧场" tvg-name="CCTV第一剧场" group-title="央视",CCTV第一剧场 http://38.75.136.137:98/gslb/dsdqpub/dyjc.m3u8?auth=testpub$LR•IPV4 #EXTINF:-1 tvg-id="CCTV怀旧剧场" tvg-name="CCTV怀旧剧场" group-title="央视",CCTV怀旧剧场 @@ -562,17 +562,17 @@ https://gcalic.v.myalicdn.com/gc/wgw05_1/index.m3u8?contentid=2820180516001$LR #EXTINF:-1 tvg-id="直播中国" tvg-name="直播中国" group-title="央视",直播中国 https://gcalic.v.myalicdn.com/gc/wgw05_1/index.m3u8$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="重温经典" tvg-name="重温经典" group-title="卫视",重温经典 -http://php.jdshipin.com/TVOD/iptv.php?id=cwjd$LR•IPV4•6『线路1』 +http://112.27.235.94:8000/hls/50/index.m3u8$LR•IPV4•6『线路1』 #EXTINF:-1 tvg-id="重温经典" tvg-name="重温经典" group-title="卫视",重温经典 -http://ali.hlspull.yximgs.com/live/awei_cwjd.flv$LR•IPV4•6『线路2』 +http://php.jdshipin.com/TVOD/iptv.php?id=cwjd$LR•IPV4•6『线路2』 #EXTINF:-1 tvg-id="重温经典" tvg-name="重温经典" group-title="卫视",重温经典 -http://home.kuaidi521.com:35455/bptv/10000100000000050000000003887494.m3u8$LR•IPV4•6『线路3』 +http://ali.hlspull.yximgs.com/live/awei_cwjd.flv$LR•IPV4•6『线路3』 #EXTINF:-1 tvg-id="重温经典" tvg-name="重温经典" group-title="卫视",重温经典 -http://cdn3.132.us.kg/live/cwjd/stream.m3u8$LR•IPV4•6『线路4』 +http://home.kuaidi521.com:35455/bptv/10000100000000050000000003887494.m3u8$LR•IPV4•6『线路4』 #EXTINF:-1 tvg-id="重温经典" tvg-name="重温经典" group-title="卫视",重温经典 -p3p://167.114.175.6:55331/65c5064800047df41ad1a47449e93b8b$LR•IPV4•6『线路5』 +http://cdn3.132.us.kg/live/cwjd/stream.m3u8$LR•IPV4•6『线路5』 #EXTINF:-1 tvg-id="重温经典" tvg-name="重温经典" group-title="卫视",重温经典 -http://112.27.235.94:8000/hls/50/index.m3u8$LR•IPV4•6『线路6』 +p3p://167.114.175.6:55331/65c5064800047df41ad1a47449e93b8b$LR•IPV4•6『线路6』 #EXTINF:-1 tvg-id="香港卫视" tvg-name="香港卫视" group-title="卫视",香港卫视 http://webcast.hkstv.tv/livestream/mutfysrq/playlist.m3u8$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="香港卫视" tvg-name="香港卫视" group-title="卫视",香港卫视 @@ -592,19 +592,19 @@ http://171.213.140.54:8123/udp/239.93.1.10:2193$LR•IPV4•7『线路6』 #EXTINF:-1 tvg-id="星空卫视" tvg-name="星空卫视" group-title="卫视",星空卫视 https://stream1.freetv.fun/xing-kong-wei-shi-4.ctv$LR•IPV4•7『线路7』 #EXTINF:-1 tvg-id="湖南卫视" tvg-name="湖南卫视" group-title="卫视",湖南卫视 -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226509/1.m3u8?zoneoffset=480&servicetype=1&icpid=&limitflux=-1&limitdur=-1&tenantId=8601&accountinfo=%7E%7EV2.0%7EIGb_ib7rnBX9_sANRKq9sg%7EpK8OKM5JoJWWbLRyLfPcUMkwWZ90MzSI9S9PDltJsYzd0ZGcS3Tkh7syciNKJa-w60mDOdwtDyoNwCx9aRgzHNH9AUREV_qvNJtXHRPzYw0%7EExtInfo9bj61dxzlMXrsixrqcFYPg%3D%3D%3A20221022013542%2C915973%2C119.123.71.209%2C20221022013542%2C10000100000000050000000003873458%2C915973%2C-1%2C0%2C1%2C%2C%2C2%2C%2C%2C%2C2%2C%2C10000100000000060000000007253514_0%2CEND&GuardEncType=2$LR•IPV6•16『线路1』 +http://120.196.232.43:8088/rrs03.hw.gmcc.net/PLTV/651/224/3221226698/1.m3u8$LR•IPV4•16『线路1』 #EXTINF:-1 tvg-id="湖南卫视" tvg-name="湖南卫视" group-title="卫视",湖南卫视 -http://74.91.26.218:82/live/hnwshd.m3u8$LR•IPV4•16『线路2』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226509/1.m3u8?zoneoffset=480&servicetype=1&icpid=&limitflux=-1&limitdur=-1&tenantId=8601&accountinfo=%7E%7EV2.0%7EIGb_ib7rnBX9_sANRKq9sg%7EpK8OKM5JoJWWbLRyLfPcUMkwWZ90MzSI9S9PDltJsYzd0ZGcS3Tkh7syciNKJa-w60mDOdwtDyoNwCx9aRgzHNH9AUREV_qvNJtXHRPzYw0%7EExtInfo9bj61dxzlMXrsixrqcFYPg%3D%3D%3A20221022013542%2C915973%2C119.123.71.209%2C20221022013542%2C10000100000000050000000003873458%2C915973%2C-1%2C0%2C1%2C%2C%2C2%2C%2C%2C%2C2%2C%2C10000100000000060000000007253514_0%2CEND&GuardEncType=2$LR•IPV6•16『线路2』 #EXTINF:-1 tvg-id="湖南卫视" tvg-name="湖南卫视" group-title="卫视",湖南卫视 -http://204.12.221.218:8181/3m1080p/hnws.m3u8$LR•IPV4•16『线路3』 +http://74.91.26.218:82/live/hnwshd.m3u8$LR•IPV4•16『线路3』 #EXTINF:-1 tvg-id="湖南卫视" tvg-name="湖南卫视" group-title="卫视",湖南卫视 -http://173.208.212.130:8181/720p/hnws.m3u8$LR•IPV4•16『线路4』 +http://204.12.221.218:8181/3m1080p/hnws.m3u8$LR•IPV4•16『线路4』 #EXTINF:-1 tvg-id="湖南卫视" tvg-name="湖南卫视" group-title="卫视",湖南卫视 -http://153.0.171.163:9901/tsfile/live/0128_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•16『线路5』 +http://173.208.212.130:8181/720p/hnws.m3u8$LR•IPV4•16『线路5』 #EXTINF:-1 tvg-id="湖南卫视" tvg-name="湖南卫视" group-title="卫视",湖南卫视 -http://112.27.235.94:8000/hls/31/index.m3u8$LR•IPV4•16『线路6』 +http://153.0.171.163:9901/tsfile/live/0128_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•16『线路6』 #EXTINF:-1 tvg-id="湖南卫视" tvg-name="湖南卫视" group-title="卫视",湖南卫视 -http://120.196.232.43:8088/rrs03.hw.gmcc.net/PLTV/651/224/3221226698/1.m3u8$LR•IPV4•16『线路7』 +http://112.27.235.94:8000/hls/31/index.m3u8$LR•IPV4•16『线路7』 #EXTINF:-1 tvg-id="湖南卫视" tvg-name="湖南卫视" group-title="卫视",湖南卫视 http://38.75.136.137:98/gslb/dsdqpub/hnwshd.m3u8?auth=testpub$LR•IPV4•16『线路8』 #EXTINF:-1 tvg-id="湖南卫视" tvg-name="湖南卫视" group-title="卫视",湖南卫视 @@ -624,21 +624,21 @@ https://httop.top/ysp-湖南卫视$LR•IPV4•16『线路15』 #EXTINF:-1 tvg-id="湖南卫视" tvg-name="湖南卫视" group-title="卫视",湖南卫视 http://iptv.huuc.edu.cn/hls/hunanhd.m3u8$LR•IPV4•16『线路16』 #EXTINF:-1 tvg-id="浙江卫视" tvg-name="浙江卫视" group-title="卫视",浙江卫视 -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226899/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ETYfTgTra_pUx2cPrgZ_BDw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•17『线路1』 +http://zwebl02.cztv.com/live/channel01720Pnew.m3u8?auth_key=1784123883-f178167128c55cd66b7eca004ccca015-0-69f388bdaa594feb900510d687566182$LR•IPV4•17『线路1』 #EXTINF:-1 tvg-id="浙江卫视" tvg-name="浙江卫视" group-title="卫视",浙江卫视 -http://112.123.243.37:50085/tsfile/live/0019_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•17『线路2』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226899/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ETYfTgTra_pUx2cPrgZ_BDw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•17『线路2』 #EXTINF:-1 tvg-id="浙江卫视" tvg-name="浙江卫视" group-title="卫视",浙江卫视 -http://ali-xwl.cztv.com/live/channel011080Plxw.m3u8$LR•IPV4•17『线路3』 +http://112.123.243.37:50085/tsfile/live/0019_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•17『线路3』 #EXTINF:-1 tvg-id="浙江卫视" tvg-name="浙江卫视" group-title="卫视",浙江卫视 -http://204.12.221.218:8181/3m1080p/zjws.m3u8$LR•IPV4•17『线路4』 +http://ali-xwl.cztv.com/live/channel011080Plxw.m3u8$LR•IPV4•17『线路4』 #EXTINF:-1 tvg-id="浙江卫视" tvg-name="浙江卫视" group-title="卫视",浙江卫视 -http://173.208.212.130:8181/720p/zjws.m3u8$LR•IPV4•17『线路5』 +http://204.12.221.218:8181/3m1080p/zjws.m3u8$LR•IPV4•17『线路5』 #EXTINF:-1 tvg-id="浙江卫视" tvg-name="浙江卫视" group-title="卫视",浙江卫视 -http://ali-xwl.cztv.com/live/channel01720Plxw.m3u8$LR•IPV4•17『线路6』 +http://173.208.212.130:8181/720p/zjws.m3u8$LR•IPV4•17『线路6』 #EXTINF:-1 tvg-id="浙江卫视" tvg-name="浙江卫视" group-title="卫视",浙江卫视 -http://112.27.235.94:8000/hls/29/index.m3u8$LR•IPV4•17『线路7』 +http://ali-xwl.cztv.com/live/channel01720Plxw.m3u8$LR•IPV4•17『线路7』 #EXTINF:-1 tvg-id="浙江卫视" tvg-name="浙江卫视" group-title="卫视",浙江卫视 -http://zwebl02.cztv.com/live/channel01720Pnew.m3u8?auth_key=1784123883-f178167128c55cd66b7eca004ccca015-0-69f388bdaa594feb900510d687566182$LR•IPV4•17『线路8』 +http://112.27.235.94:8000/hls/29/index.m3u8$LR•IPV4•17『线路8』 #EXTINF:-1 tvg-id="浙江卫视" tvg-name="浙江卫视" group-title="卫视",浙江卫视 http://38.75.136.137:98/gslb/dsdqpub/zjwshd.m3u8?auth=testpub$LR•IPV4•17『线路9』 #EXTINF:-1 tvg-id="浙江卫视" tvg-name="浙江卫视" group-title="卫视",浙江卫视 @@ -748,39 +748,41 @@ http://mg.hmysapp.cn:177/ckmg/zb.php?id=jsws$LR•IPV4•15『线路14』 #EXTINF:-1 tvg-id="江苏卫视" tvg-name="江苏卫视" group-title="卫视",江苏卫视 http://39.134.24.166/dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226200/index.m3u8$LR•IPV4•15『线路15』 #EXTINF:-1 tvg-id="安徽卫视" tvg-name="安徽卫视" group-title="卫视",安徽卫视 -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226943/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E0QmKQ_slRCwvVVUUfxPVbw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•10『线路1』 +https://piccpndks.v.kcdnvip.com/audio/anhui_2/index.m3u8$LR•IPV4•11『线路1』 #EXTINF:-1 tvg-id="安徽卫视" tvg-name="安徽卫视" group-title="卫视",安徽卫视 -http://101.66.194.63:9901/tsfile/live/0130_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•10『线路2』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226943/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E0QmKQ_slRCwvVVUUfxPVbw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•11『线路2』 #EXTINF:-1 tvg-id="安徽卫视" tvg-name="安徽卫视" group-title="卫视",安徽卫视 -http://112.27.235.94:8000/hls/26/index.m3u8$LR•IPV4•10『线路3』 +http://101.66.194.63:9901/tsfile/live/0130_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•11『线路3』 #EXTINF:-1 tvg-id="安徽卫视" tvg-name="安徽卫视" group-title="卫视",安徽卫视 -http://23.237.228.134/live8/anhui.m3u8$LR•IPV4•10『线路4』 +http://112.27.235.94:8000/hls/26/index.m3u8$LR•IPV4•11『线路4』 #EXTINF:-1 tvg-id="安徽卫视" tvg-name="安徽卫视" group-title="卫视",安徽卫视 -http://gfr.x3322.net:9901/tsfile/live/1092_1.m3u8$LR•IPV4•10『线路5』 +http://23.237.228.134/live8/anhui.m3u8$LR•IPV4•11『线路5』 #EXTINF:-1 tvg-id="安徽卫视" tvg-name="安徽卫视" group-title="卫视",安徽卫视 -http://api.kkitv.itv888.cn:8080/hls/m8hvytneunk/index.m3u8$LR•IPV4•10『线路6』 +http://gfr.x3322.net:9901/tsfile/live/1092_1.m3u8$LR•IPV4•11『线路6』 #EXTINF:-1 tvg-id="安徽卫视" tvg-name="安徽卫视" group-title="卫视",安徽卫视 -https://iptv.catvod.com/catvod.php?id=ahws$LR•IPV4•10『线路7』 +http://api.kkitv.itv888.cn:8080/hls/m8hvytneunk/index.m3u8$LR•IPV4•11『线路7』 #EXTINF:-1 tvg-id="安徽卫视" tvg-name="安徽卫视" group-title="卫视",安徽卫视 -https://httop.top/ysp-安徽卫视$LR•IPV4•10『线路8』 +https://iptv.catvod.com/catvod.php?id=ahws$LR•IPV4•11『线路8』 #EXTINF:-1 tvg-id="安徽卫视" tvg-name="安徽卫视" group-title="卫视",安徽卫视 -http://iptv.huuc.edu.cn/hls/ahhd.m3u8$LR•IPV4•10『线路9』 +https://httop.top/ysp-安徽卫视$LR•IPV4•11『线路9』 #EXTINF:-1 tvg-id="安徽卫视" tvg-name="安徽卫视" group-title="卫视",安徽卫视 -http://153.0.171.163:9901/tsfile/live/0130_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•10『线路10』 +http://iptv.huuc.edu.cn/hls/ahhd.m3u8$LR•IPV4•11『线路10』 +#EXTINF:-1 tvg-id="安徽卫视" tvg-name="安徽卫视" group-title="卫视",安徽卫视 +http://153.0.171.163:9901/tsfile/live/0130_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•11『线路11』 #EXTINF:-1 tvg-id="重庆卫视" tvg-name="重庆卫视" group-title="卫视",重庆卫视 -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226963/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EjTXsJprEx2nE38tdvu5lhA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•16『线路1』 +http://live2.plus.jinhua.com.cn/dsnc/playlist.m3u8$LR•IPV4•16『线路1』 #EXTINF:-1 tvg-id="重庆卫视" tvg-name="重庆卫视" group-title="卫视",重庆卫视 -http://192.151.150.154/live/cqwshd.m3u8$LR•IPV4•16『线路2』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226963/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EjTXsJprEx2nE38tdvu5lhA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•16『线路2』 #EXTINF:-1 tvg-id="重庆卫视" tvg-name="重庆卫视" group-title="卫视",重庆卫视 -http://107.150.60.122/live/cqwshd.m3u8$LR•IPV4•16『线路3』 +http://192.151.150.154/live/cqwshd.m3u8$LR•IPV4•16『线路3』 #EXTINF:-1 tvg-id="重庆卫视" tvg-name="重庆卫视" group-title="卫视",重庆卫视 -http://112.123.243.37:50085/tsfile/live/0131_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•16『线路4』 +http://107.150.60.122/live/cqwshd.m3u8$LR•IPV4•16『线路4』 #EXTINF:-1 tvg-id="重庆卫视" tvg-name="重庆卫视" group-title="卫视",重庆卫视 -http://120.198.95.220:9901/tsfile/live/1066_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•16『线路5』 +http://112.123.243.37:50085/tsfile/live/0131_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•16『线路5』 #EXTINF:-1 tvg-id="重庆卫视" tvg-name="重庆卫视" group-title="卫视",重庆卫视 -http://112.27.235.94:8000/hls/36/index.m3u8$LR•IPV4•16『线路6』 +http://120.198.95.220:9901/tsfile/live/1066_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•16『线路6』 #EXTINF:-1 tvg-id="重庆卫视" tvg-name="重庆卫视" group-title="卫视",重庆卫视 -http://live2.plus.jinhua.com.cn/dsnc/playlist.m3u8$LR•IPV4•16『线路7』 +http://112.27.235.94:8000/hls/36/index.m3u8$LR•IPV4•16『线路7』 #EXTINF:-1 tvg-id="重庆卫视" tvg-name="重庆卫视" group-title="卫视",重庆卫视 http://23.237.228.134/live6/chongqing.m3u8$LR•IPV4•16『线路8』 #EXTINF:-1 tvg-id="重庆卫视" tvg-name="重庆卫视" group-title="卫视",重庆卫视 @@ -866,41 +868,39 @@ http://153.0.171.163:9901/tsfile/live/0137_1.m3u8?key=txiptv&playlive=1&authid=0 #EXTINF:-1 tvg-id="东南卫视" tvg-name="东南卫视" group-title="卫视",东南卫视 http://118.81.195.79:9003/hls/24/index.m3u8$LR•IPV4•18『线路18』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="卫视",深圳卫视 -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226959/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EGrVNEZREjuNVKiTJo2mtwg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•18『线路1』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226959/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EGrVNEZREjuNVKiTJo2mtwg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•17『线路1』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="卫视",深圳卫视 -http://120.198.95.220:9901/tsfile/live/1048_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•18『线路2』 +http://120.198.95.220:9901/tsfile/live/1048_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•17『线路2』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="卫视",深圳卫视 -http://120.198.95.220:9901/tsfile/live/1048_1.m3u8?key=txiptv$LR•IPV4•18『线路3』 +http://120.198.95.220:9901/tsfile/live/1048_1.m3u8?key=txiptv$LR•IPV4•17『线路3』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="卫视",深圳卫视 -http://173.208.212.130:8181/720p/szws.m3u8$LR•IPV4•18『线路4』 +http://173.208.212.130:8181/720p/szws.m3u8$LR•IPV4•17『线路4』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="卫视",深圳卫视 -http://192.151.150.154/live/szwshd.m3u8$LR•IPV4•18『线路5』 +http://192.151.150.154/live/szwshd.m3u8$LR•IPV4•17『线路5』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="卫视",深圳卫视 -http://124.228.160.210:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•18『线路6』 +http://124.228.160.210:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•17『线路6』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="卫视",深圳卫视 -http://36.136.38.87:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•18『线路7』 +http://36.136.38.87:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•17『线路7』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="卫视",深圳卫视 -http://112.27.235.94:8000/hls/33/index.m3u8$LR•IPV4•18『线路8』 +http://112.27.235.94:8000/hls/33/index.m3u8$LR•IPV4•17『线路8』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="卫视",深圳卫视 -https://sztv-hls.sztv.com.cn/1SIQj6s/500/q7rdSsQ.m3u8?sign=71764b3a0bcc96b03dea9693d605e020&t=6a579f21$LR•IPV4•18『线路9』 +http://38.75.136.137:98/gslb/dsdqpub/szwshd.m3u8?auth=testpub$LR•IPV4•17『线路9』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="卫视",深圳卫视 -http://38.75.136.137:98/gslb/dsdqpub/szwshd.m3u8?auth=testpub$LR•IPV4•18『线路10』 +http://23.237.228.134/live6/shenzhen.m3u8$LR•IPV4•17『线路10』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="卫视",深圳卫视 -http://23.237.228.134/live6/shenzhen.m3u8$LR•IPV4•18『线路11』 +http://gfr.x3322.net:9901/tsfile/live/1095_1.m3u8$LR•IPV4•17『线路11』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="卫视",深圳卫视 -http://gfr.x3322.net:9901/tsfile/live/1095_1.m3u8$LR•IPV4•18『线路12』 +http://api.kkitv.itv888.cn:8080/hls/iftsd32ykm/index.m3u8$LR•IPV4•17『线路12』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="卫视",深圳卫视 -http://api.kkitv.itv888.cn:8080/hls/iftsd32ykm/index.m3u8$LR•IPV4•18『线路13』 +https://iptv.catvod.com/catvod.php?id=szws$LR•IPV4•17『线路13』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="卫视",深圳卫视 -https://iptv.catvod.com/catvod.php?id=szws$LR•IPV4•18『线路14』 +https://httop.top/ysp-深圳卫视$LR•IPV4•17『线路14』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="卫视",深圳卫视 -https://httop.top/ysp-深圳卫视$LR•IPV4•18『线路15』 +http://iptv.huuc.edu.cn/hls/szhd.m3u8$LR•IPV4•17『线路15』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="卫视",深圳卫视 -http://iptv.huuc.edu.cn/hls/szhd.m3u8$LR•IPV4•18『线路16』 +http://153.0.171.163:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•17『线路16』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="卫视",深圳卫视 -http://153.0.171.163:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•18『线路17』 -#EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="卫视",深圳卫视 -http://38.64.72.148:80/hls/modn/list/4007/playlist.m3u8$LR•IPV4•18『线路18』 +http://38.64.72.148:80/hls/modn/list/4007/playlist.m3u8$LR•IPV4•17『线路17』 #EXTINF:-1 tvg-id="广东卫视" tvg-name="广东卫视" group-title="卫视",广东卫视 http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226961/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E2MGyx659D_aaDPP0qt3NgA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•12『线路1』 #EXTINF:-1 tvg-id="广东卫视" tvg-name="广东卫视" group-title="卫视",广东卫视 @@ -1008,47 +1008,45 @@ http://183.207.248.71/gitv/live1/G_GUIZHOU/G_GUIZHOU$LR•IPV4•16『线路15 #EXTINF:-1 tvg-id="贵州卫视" tvg-name="贵州卫视" group-title="卫视",贵州卫视 http://39.134.115.163:8080/PLTV/88888910/224/3221225728/index.m3u8$LR•IPV4•16『线路16』 #EXTINF:-1 tvg-id="河北卫视" tvg-name="河北卫视" group-title="卫视",河北卫视 -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227014/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ErSGjhI3DMaaAASPrbQJYTg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•14『线路1』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227014/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ErSGjhI3DMaaAASPrbQJYTg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•13『线路1』 #EXTINF:-1 tvg-id="河北卫视" tvg-name="河北卫视" group-title="卫视",河北卫视 -http://101.66.194.63:9901/tsfile/live/0117_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•14『线路2』 +http://101.66.194.63:9901/tsfile/live/0117_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•13『线路2』 #EXTINF:-1 tvg-id="河北卫视" tvg-name="河北卫视" group-title="卫视",河北卫视 -http://101.66.199.247:9901/tsfile/live/0117_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•14『线路3』 +http://101.66.199.247:9901/tsfile/live/0117_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•13『线路3』 #EXTINF:-1 tvg-id="河北卫视" tvg-name="河北卫视" group-title="卫视",河北卫视 -http://204.12.221.218:8181/3m1080p/hews.m3u8$LR•IPV4•14『线路4』 +http://204.12.221.218:8181/3m1080p/hews.m3u8$LR•IPV4•13『线路4』 #EXTINF:-1 tvg-id="河北卫视" tvg-name="河北卫视" group-title="卫视",河北卫视 -http://event.pull.hebtv.com/jishi/weishi_tingyun.m3u8$LR•IPV4•14『线路5』 +http://event.pull.hebtv.com/jishi/weishi_tingyun.m3u8$LR•IPV4•13『线路5』 #EXTINF:-1 tvg-id="河北卫视" tvg-name="河北卫视" group-title="卫视",河北卫视 -http://120.76.248.139/live/bfgd/4200000108.m3u8$LR•IPV4•14『线路6』 +http://120.76.248.139/live/bfgd/4200000108.m3u8$LR•IPV4•13『线路6』 #EXTINF:-1 tvg-id="河北卫视" tvg-name="河北卫视" group-title="卫视",河北卫视 -https://tv.pull.hebtv.com/jishi/nongminpindao.m3u8?t=1783932137&k=f5f7fa7a3e39ef329f1b86c4f866958c$LR•IPV4•14『线路7』 +http://23.237.228.134/live8/hebei.m3u8$LR•IPV4•13『线路7』 #EXTINF:-1 tvg-id="河北卫视" tvg-name="河北卫视" group-title="卫视",河北卫视 -http://23.237.228.134/live8/hebei.m3u8$LR•IPV4•14『线路8』 +http://43.251.226.89:8080/play/42.m3u8$LR•IPV4•13『线路8』 #EXTINF:-1 tvg-id="河北卫视" tvg-name="河北卫视" group-title="卫视",河北卫视 -http://43.251.226.89:8080/play/42.m3u8$LR•IPV4•14『线路9』 +http://gfr.x3322.net:9901/tsfile/live/1091_1.m3u8$LR•IPV4•13『线路9』 #EXTINF:-1 tvg-id="河北卫视" tvg-name="河北卫视" group-title="卫视",河北卫视 -http://gfr.x3322.net:9901/tsfile/live/1091_1.m3u8$LR•IPV4•14『线路10』 +https://iptv.catvod.com/catvod.php?id=hbws$LR•IPV4•13『线路10』 #EXTINF:-1 tvg-id="河北卫视" tvg-name="河北卫视" group-title="卫视",河北卫视 -https://iptv.catvod.com/catvod.php?id=hbws$LR•IPV4•14『线路11』 +https://httop.top/ysp-河北卫视$LR•IPV4•13『线路11』 #EXTINF:-1 tvg-id="河北卫视" tvg-name="河北卫视" group-title="卫视",河北卫视 -https://httop.top/ysp-河北卫视$LR•IPV4•14『线路12』 +http://iptv.huuc.edu.cn/hls/hebhd.m3u8$LR•IPV4•13『线路12』 #EXTINF:-1 tvg-id="河北卫视" tvg-name="河北卫视" group-title="卫视",河北卫视 -http://iptv.huuc.edu.cn/hls/hebhd.m3u8$LR•IPV4•14『线路13』 -#EXTINF:-1 tvg-id="河北卫视" tvg-name="河北卫视" group-title="卫视",河北卫视 -http://153.0.171.163:9901/tsfile/live/0117_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•14『线路14』 +http://153.0.171.163:9901/tsfile/live/0117_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•13『线路13』 #EXTINF:-1 tvg-id="河南卫视" tvg-name="河南卫视" group-title="卫视",河南卫视 -http://101.66.195.138:9901/tsfile/live/0139_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•12『线路1』 +http://tvcdn.stream3.hndt.com/tv/65bd329b017e1000648cd2ed00000000_transios/playlist.m3u8?wsSecret=ca9a9194ec9a95ed2539e69d07b645d5&wsTime=1784134111$LR•IPV4•12『线路1』 #EXTINF:-1 tvg-id="河南卫视" tvg-name="河南卫视" group-title="卫视",河南卫视 -http://38.75.136.137:98/gslb/dsdqpub/hawshd.m3u8?auth=testpub$LR•IPV4•12『线路2』 +http://101.66.195.138:9901/tsfile/live/0139_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•12『线路2』 #EXTINF:-1 tvg-id="河南卫视" tvg-name="河南卫视" group-title="卫视",河南卫视 -http://63.141.230.178:82/gslb/zbdq5.m3u8?id=hawshd$LR•IPV4•12『线路3』 +http://38.75.136.137:98/gslb/dsdqpub/hawshd.m3u8?auth=testpub$LR•IPV4•12『线路3』 #EXTINF:-1 tvg-id="河南卫视" tvg-name="河南卫视" group-title="卫视",河南卫视 -http://221.226.51.220:50081/newlive/live/hls/37/live.m3u8$LR•IPV4•12『线路4』 +http://63.141.230.178:82/gslb/zbdq5.m3u8?id=hawshd$LR•IPV4•12『线路4』 #EXTINF:-1 tvg-id="河南卫视" tvg-name="河南卫视" group-title="卫视",河南卫视 -http://153.0.171.163:9901/tsfile/live/0139_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•12『线路5』 +http://221.226.51.220:50081/newlive/live/hls/37/live.m3u8$LR•IPV4•12『线路5』 #EXTINF:-1 tvg-id="河南卫视" tvg-name="河南卫视" group-title="卫视",河南卫视 -http://112.27.235.94:8000/hls/37/index.m3u8$LR•IPV4•12『线路6』 +http://153.0.171.163:9901/tsfile/live/0139_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•12『线路6』 #EXTINF:-1 tvg-id="河南卫视" tvg-name="河南卫视" group-title="卫视",河南卫视 -http://tvcdn.stream3.hndt.com/tv/65bd329b017e1000648cd2ed00000000_transios/playlist.m3u8?wsSecret=ca9a9194ec9a95ed2539e69d07b645d5&wsTime=1784134111$LR•IPV4•12『线路7』 +http://112.27.235.94:8000/hls/37/index.m3u8$LR•IPV4•12『线路7』 #EXTINF:-1 tvg-id="河南卫视" tvg-name="河南卫视" group-title="卫视",河南卫视 http://23.237.228.134/live6/henan.m3u8$LR•IPV4•12『线路8』 #EXTINF:-1 tvg-id="河南卫视" tvg-name="河南卫视" group-title="卫视",河南卫视 @@ -1112,35 +1110,37 @@ http://www.745612.xyz:7788/rtp/235.254.198.72:1564$LR•IPV4•14『线路13』 #EXTINF:-1 tvg-id="湖北卫视" tvg-name="湖北卫视" group-title="卫视",湖北卫视 http://118.81.195.79:9003/hls/32/index.m3u8$LR•IPV4•14『线路14』 #EXTINF:-1 tvg-id="江西卫视" tvg-name="江西卫视" group-title="卫视",江西卫视 -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226956/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Ei6ZIpVizXlewg-YfGvH8dA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•15『线路1』 +https://jsp-tv-live.jxtvcn.com.cn/live-jsp/tv_jxtv6.m3u8?t=1784004704&token=67a59c29-de6e-4407-90c8-39f7e099b3db&d=0a7a8c487c454bc7bb02a60298283c5e$LR•IPV4•16『线路1』 #EXTINF:-1 tvg-id="江西卫视" tvg-name="江西卫视" group-title="卫视",江西卫视 -http://101.66.199.247:9901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•15『线路2』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226956/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Ei6ZIpVizXlewg-YfGvH8dA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•16『线路2』 #EXTINF:-1 tvg-id="江西卫视" tvg-name="江西卫视" group-title="卫视",江西卫视 -http://112.123.243.37:50085/tsfile/live/0132_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•15『线路3』 +http://101.66.199.247:9901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•16『线路3』 #EXTINF:-1 tvg-id="江西卫视" tvg-name="江西卫视" group-title="卫视",江西卫视 -http://124.228.160.210:9901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•15『线路4』 +http://112.123.243.37:50085/tsfile/live/0132_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•16『线路4』 #EXTINF:-1 tvg-id="江西卫视" tvg-name="江西卫视" group-title="卫视",江西卫视 -http://153.0.171.163:9901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•15『线路5』 +http://124.228.160.210:9901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•16『线路5』 #EXTINF:-1 tvg-id="江西卫视" tvg-name="江西卫视" group-title="卫视",江西卫视 -http://112.27.235.94:8000/hls/44/index.m3u8$LR•IPV4•15『线路6』 +http://153.0.171.163:9901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•16『线路6』 #EXTINF:-1 tvg-id="江西卫视" tvg-name="江西卫视" group-title="卫视",江西卫视 -http://38.75.136.137:98/gslb/dsdqpub/jxwshd.m3u8?auth=testpub$LR•IPV4•15『线路7』 +http://112.27.235.94:8000/hls/44/index.m3u8$LR•IPV4•16『线路7』 #EXTINF:-1 tvg-id="江西卫视" tvg-name="江西卫视" group-title="卫视",江西卫视 -http://23.237.228.134/live8/jiangxi.m3u8$LR•IPV4•15『线路8』 +http://38.75.136.137:98/gslb/dsdqpub/jxwshd.m3u8?auth=testpub$LR•IPV4•16『线路8』 #EXTINF:-1 tvg-id="江西卫视" tvg-name="江西卫视" group-title="卫视",江西卫视 -http://43.251.226.89:8080/play/43.m3u8$LR•IPV4•15『线路9』 +http://23.237.228.134/live8/jiangxi.m3u8$LR•IPV4•16『线路9』 #EXTINF:-1 tvg-id="江西卫视" tvg-name="江西卫视" group-title="卫视",江西卫视 -http://api.kkitv.itv888.cn:8080/hls/pv0np60bpin/index.m3u8$LR•IPV4•15『线路10』 +http://43.251.226.89:8080/play/43.m3u8$LR•IPV4•16『线路10』 #EXTINF:-1 tvg-id="江西卫视" tvg-name="江西卫视" group-title="卫视",江西卫视 -https://iptv.catvod.com/catvod.php?id=jxws$LR•IPV4•15『线路11』 +http://api.kkitv.itv888.cn:8080/hls/pv0np60bpin/index.m3u8$LR•IPV4•16『线路11』 #EXTINF:-1 tvg-id="江西卫视" tvg-name="江西卫视" group-title="卫视",江西卫视 -https://httop.top/ysp-江西卫视$LR•IPV4•15『线路12』 +https://iptv.catvod.com/catvod.php?id=jxws$LR•IPV4•16『线路12』 #EXTINF:-1 tvg-id="江西卫视" tvg-name="江西卫视" group-title="卫视",江西卫视 -http://iptv.huuc.edu.cn/hls/jxhd.m3u8$LR•IPV4•15『线路13』 +https://httop.top/ysp-江西卫视$LR•IPV4•16『线路13』 #EXTINF:-1 tvg-id="江西卫视" tvg-name="江西卫视" group-title="卫视",江西卫视 -http://mg.hmysapp.cn:177/ckmg/zb.php?id=jxws$LR•IPV4•15『线路14』 +http://iptv.huuc.edu.cn/hls/jxhd.m3u8$LR•IPV4•16『线路14』 #EXTINF:-1 tvg-id="江西卫视" tvg-name="江西卫视" group-title="卫视",江西卫视 -http://39.134.115.163:8080/PLTV/88888910/224/3221225705/index.m3u8$LR•IPV4•15『线路15』 +http://mg.hmysapp.cn:177/ckmg/zb.php?id=jxws$LR•IPV4•16『线路15』 +#EXTINF:-1 tvg-id="江西卫视" tvg-name="江西卫视" group-title="卫视",江西卫视 +http://39.134.115.163:8080/PLTV/88888910/224/3221225705/index.m3u8$LR•IPV4•16『线路16』 #EXTINF:-1 tvg-id="吉林卫视" tvg-name="吉林卫视" group-title="卫视",吉林卫视 http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227015/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EW5-3AVdwD5KlUpuA4mz7Cg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•17『线路1』 #EXTINF:-1 tvg-id="吉林卫视" tvg-name="吉林卫视" group-title="卫视",吉林卫视 @@ -1310,25 +1310,25 @@ http://125.210.152.18:9090/live/SDWSHD_H265.m3u8$LR•IPV4•17『线路16』 #EXTINF:-1 tvg-id="山东卫视" tvg-name="山东卫视" group-title="卫视",山东卫视 http://39.134.115.163:8080/PLTV/88888910/224/3221225697/index.m3u8$LR•IPV4•17『线路17』 #EXTINF:-1 tvg-id="天津卫视" tvg-name="天津卫视" group-title="卫视",天津卫视 -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226954/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Eaf3wyULP1h575eM_4ByMDg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•18『线路1』 +https://piccpndks.v.kcdnvip.com/audio/tianjin_2/index.m3u8$LR•IPV4•18『线路1』 #EXTINF:-1 tvg-id="天津卫视" tvg-name="天津卫视" group-title="卫视",天津卫视 -http://204.12.221.218:8181/3m1080p/tjws.m3u8$LR•IPV4•18『线路2』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226954/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Eaf3wyULP1h575eM_4ByMDg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•18『线路2』 #EXTINF:-1 tvg-id="天津卫视" tvg-name="天津卫视" group-title="卫视",天津卫视 -http://107.150.60.122/live/tjwshd.m3u8$LR•IPV4•18『线路3』 +http://204.12.221.218:8181/3m1080p/tjws.m3u8$LR•IPV4•18『线路3』 #EXTINF:-1 tvg-id="天津卫视" tvg-name="天津卫视" group-title="卫视",天津卫视 -http://192.151.150.154/live/tjwshd.m3u8$LR•IPV4•18『线路4』 +http://107.150.60.122/live/tjwshd.m3u8$LR•IPV4•18『线路4』 #EXTINF:-1 tvg-id="天津卫视" tvg-name="天津卫视" group-title="卫视",天津卫视 -http://38.75.136.137:98/gslb/dsdqpub/tjwshd.m3u8?auth=testpub$LR•IPV4•18『线路5』 +http://192.151.150.154/live/tjwshd.m3u8$LR•IPV4•18『线路5』 #EXTINF:-1 tvg-id="天津卫视" tvg-name="天津卫视" group-title="卫视",天津卫视 -http://63.141.230.178:82/gslb/zbdq5.m3u8?id=tjwshd$LR•IPV4•18『线路6』 +http://38.75.136.137:98/gslb/dsdqpub/tjwshd.m3u8?auth=testpub$LR•IPV4•18『线路6』 #EXTINF:-1 tvg-id="天津卫视" tvg-name="天津卫视" group-title="卫视",天津卫视 -http://207.56.13.146:81/cdnlive/tjws.m3u8$LR•IPV4•18『线路7』 +http://63.141.230.178:82/gslb/zbdq5.m3u8?id=tjwshd$LR•IPV4•18『线路7』 #EXTINF:-1 tvg-id="天津卫视" tvg-name="天津卫视" group-title="卫视",天津卫视 -http://120.198.95.220:9901/tsfile/live/1067_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•18『线路8』 +http://207.56.13.146:81/cdnlive/tjws.m3u8$LR•IPV4•18『线路8』 #EXTINF:-1 tvg-id="天津卫视" tvg-name="天津卫视" group-title="卫视",天津卫视 -http://112.27.235.94:8000/hls/42/index.m3u8$LR•IPV4•18『线路9』 +http://120.198.95.220:9901/tsfile/live/1067_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•18『线路9』 #EXTINF:-1 tvg-id="天津卫视" tvg-name="天津卫视" group-title="卫视",天津卫视 -https://piccpndks.v.kcdnvip.com/audio/tianjin_2/index.m3u8$LR•IPV4•18『线路10』 +http://112.27.235.94:8000/hls/42/index.m3u8$LR•IPV4•18『线路10』 #EXTINF:-1 tvg-id="天津卫视" tvg-name="天津卫视" group-title="卫视",天津卫视 http://23.237.228.134/live8/tianjing.m3u8$LR•IPV4•18『线路11』 #EXTINF:-1 tvg-id="天津卫视" tvg-name="天津卫视" group-title="卫视",天津卫视 @@ -1346,11 +1346,11 @@ http://153.0.171.163:9901/tsfile/live/0135_1.m3u8?key=txiptv&playlive=1&authid=0 #EXTINF:-1 tvg-id="天津卫视" tvg-name="天津卫视" group-title="卫视",天津卫视 http://39.134.115.163:8080/PLTV/88888910/224/3221225698/index.m3u8$LR•IPV4•18『线路18』 #EXTINF:-1 tvg-id="海南卫视" tvg-name="海南卫视" group-title="卫视",海南卫视 -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227029/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EEuBMjt2kLMD8fAO7QYER7Q%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•8『线路1』 +https://livelyws.chinamcache.com/lyws/zb03.m3u8$LR•IPV4•8『线路1』 #EXTINF:-1 tvg-id="海南卫视" tvg-name="海南卫视" group-title="卫视",海南卫视 -http://120.76.248.139/live/bfgd/4200000473.m3u8$LR•IPV4•8『线路2』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227029/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EEuBMjt2kLMD8fAO7QYER7Q%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•8『线路2』 #EXTINF:-1 tvg-id="海南卫视" tvg-name="海南卫视" group-title="卫视",海南卫视 -https://livelyws.chinamcache.com/lyws/zb03.m3u8$LR•IPV4•8『线路3』 +http://120.76.248.139/live/bfgd/4200000473.m3u8$LR•IPV4•8『线路3』 #EXTINF:-1 tvg-id="海南卫视" tvg-name="海南卫视" group-title="卫视",海南卫视 http://43.251.226.89:8080/play/50.m3u8$LR•IPV4•8『线路4』 #EXTINF:-1 tvg-id="海南卫视" tvg-name="海南卫视" group-title="卫视",海南卫视 @@ -1480,13 +1480,13 @@ http://120.76.248.139/live/bfgd/4200000122.m3u8$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="农林卫视" tvg-name="农林卫视" group-title="卫视",农林卫视 http://43.251.226.89:8080/play/52.m3u8$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="三沙卫视" tvg-name="三沙卫视" group-title="卫视",三沙卫视 -http://107.150.60.122/live/ssws.m3u8$LR•IPV4•6『线路1』 +https://srs.ssws.tv/video/sstv-10/index.m3u8$LR•IPV4•6『线路1』 #EXTINF:-1 tvg-id="三沙卫视" tvg-name="三沙卫视" group-title="卫视",三沙卫视 -http://38.75.136.137:98/gslb/dsdqpub/ssws.m3u8?auth=testpub$LR•IPV4•6『线路2』 +http://107.150.60.122/live/ssws.m3u8$LR•IPV4•6『线路2』 #EXTINF:-1 tvg-id="三沙卫视" tvg-name="三沙卫视" group-title="卫视",三沙卫视 -http://221.226.51.220:50081/newlive/live/hls/38/live.m3u8$LR•IPV4•6『线路3』 +http://38.75.136.137:98/gslb/dsdqpub/ssws.m3u8?auth=testpub$LR•IPV4•6『线路3』 #EXTINF:-1 tvg-id="三沙卫视" tvg-name="三沙卫视" group-title="卫视",三沙卫视 -https://srs.ssws.tv/video/sstv-10/index.m3u8$LR•IPV4•6『线路4』 +http://221.226.51.220:50081/newlive/live/hls/38/live.m3u8$LR•IPV4•6『线路4』 #EXTINF:-1 tvg-id="三沙卫视" tvg-name="三沙卫视" group-title="卫视",三沙卫视 http://43.251.226.89:8080/play/56.m3u8$LR•IPV4•6『线路5』 #EXTINF:-1 tvg-id="三沙卫视" tvg-name="三沙卫视" group-title="卫视",三沙卫视 @@ -1552,27 +1552,27 @@ https://httop.top/ysp-山西卫视$LR•IPV4•15『线路14』 #EXTINF:-1 tvg-id="山西卫视" tvg-name="山西卫视" group-title="卫视",山西卫视 http://118.81.195.79:9003/hls/19/index.m3u8$LR•IPV4•15『线路15』 #EXTINF:-1 tvg-id="陕西卫视" tvg-name="陕西卫视" group-title="卫视",陕西卫视 -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226999/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EsGLKaSqf0wDZMbAjeQtfyw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•20『线路1』 +http://stream.snrtv.com/sxbc-star-BLMOU4.m3u8$LR•IPV4•20『线路1』 #EXTINF:-1 tvg-id="陕西卫视" tvg-name="陕西卫视" group-title="卫视",陕西卫视 -http://107.150.60.122/live/snwshd.m3u8$LR•IPV4•20『线路2』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226999/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EsGLKaSqf0wDZMbAjeQtfyw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•20『线路2』 #EXTINF:-1 tvg-id="陕西卫视" tvg-name="陕西卫视" group-title="卫视",陕西卫视 -http://63.141.230.178:82/gslb/zbdq5.m3u8?id=snwshd$LR•IPV4•20『线路3』 +http://107.150.60.122/live/snwshd.m3u8$LR•IPV4•20『线路3』 #EXTINF:-1 tvg-id="陕西卫视" tvg-name="陕西卫视" group-title="卫视",陕西卫视 -http://112.123.243.37:50085/tsfile/live/0109_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•20『线路4』 +http://63.141.230.178:82/gslb/zbdq5.m3u8?id=snwshd$LR•IPV4•20『线路4』 #EXTINF:-1 tvg-id="陕西卫视" tvg-name="陕西卫视" group-title="卫视",陕西卫视 -http://101.66.194.82:9901/tsfile/live/0136_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•20『线路5』 +http://112.123.243.37:50085/tsfile/live/0109_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•20『线路5』 #EXTINF:-1 tvg-id="陕西卫视" tvg-name="陕西卫视" group-title="卫视",陕西卫视 -http://120.198.95.220:9901/tsfile/live/1068_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•20『线路6』 +http://101.66.194.82:9901/tsfile/live/0136_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•20『线路6』 #EXTINF:-1 tvg-id="陕西卫视" tvg-name="陕西卫视" group-title="卫视",陕西卫视 -http://101.66.194.63:9901/tsfile/live/0136_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•20『线路7』 +http://120.198.95.220:9901/tsfile/live/1068_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•20『线路7』 #EXTINF:-1 tvg-id="陕西卫视" tvg-name="陕西卫视" group-title="卫视",陕西卫视 -http://36.136.38.87:9901/tsfile/live/0136_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•20『线路8』 +http://101.66.194.63:9901/tsfile/live/0136_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•20『线路8』 #EXTINF:-1 tvg-id="陕西卫视" tvg-name="陕西卫视" group-title="卫视",陕西卫视 -http://153.0.171.163:9901/tsfile/live/0136_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•20『线路9』 +http://36.136.38.87:9901/tsfile/live/0136_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•20『线路9』 #EXTINF:-1 tvg-id="陕西卫视" tvg-name="陕西卫视" group-title="卫视",陕西卫视 -http://112.27.235.94:8000/hls/43/index.m3u8$LR•IPV4•20『线路10』 +http://153.0.171.163:9901/tsfile/live/0136_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•20『线路10』 #EXTINF:-1 tvg-id="陕西卫视" tvg-name="陕西卫视" group-title="卫视",陕西卫视 -http://stream.snrtv.com/sxbc-star-BLMOU4.m3u8$LR•IPV4•20『线路11』 +http://112.27.235.94:8000/hls/43/index.m3u8$LR•IPV4•20『线路11』 #EXTINF:-1 tvg-id="陕西卫视" tvg-name="陕西卫视" group-title="卫视",陕西卫视 http://38.75.136.137:98/gslb/dsdqpub/sxwshd.m3u8?auth=testpub$LR•IPV4•20『线路12』 #EXTINF:-1 tvg-id="陕西卫视" tvg-name="陕西卫视" group-title="卫视",陕西卫视 @@ -1870,9 +1870,9 @@ http://feiyang.ak47s.top:35455/itv/1000000001000009601.m3u8?cdn=ystenlive$LR•I #EXTINF:-1 tvg-id="NewTV超级体育" tvg-name="NewTV超级体育" group-title="数字",NewTV超级体育 http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=3188&tk=23a9aca1f79f$LR•IPV4•5『线路5』 #EXTINF:-1 tvg-id="NewTV动作电影" tvg-name="NewTV动作电影" group-title="数字",NewTV动作电影 -http://39.134.19.68/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226465/index.m3u8$LR•IPV4•2『线路1』 +http://live.metshop.top/huya/11602077?cdn=alicdn$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="NewTV动作电影" tvg-name="NewTV动作电影" group-title="数字",NewTV动作电影 -http://live.metshop.top/huya/11602077?cdn=alicdn$LR•IPV4•2『线路2』 +http://39.134.19.68/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226465/index.m3u8$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="NewTV精品体育" tvg-name="NewTV精品体育" group-title="数字",NewTV精品体育 https://epg.pw/stream/f7556eccd4ae06b0c2991fdc7a4f8388496559f728cc82459a8e50346040e226.m3u8$LR•IPV4•6『线路1』 #EXTINF:-1 tvg-id="NewTV精品体育" tvg-name="NewTV精品体育" group-title="数字",NewTV精品体育 @@ -1896,9 +1896,9 @@ http://223.110.245.139/PLTV/4/224/3221227009/index.m3u8$LR•IPV4•2『线路1 #EXTINF:-1 tvg-id="嘉佳卡通" tvg-name="嘉佳卡通" group-title="数字",嘉佳卡通 http://112.25.48.68/live/program/live/jjkt/1300000/mnf.m3u8$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="金鹰卡通" tvg-name="金鹰卡通" group-title="数字",金鹰卡通 -http://183.11.239.36:808/hls/69/index.m3u8$LR•IPV4•7『线路1』 +http://phoneal.qing.mgtv.com/nn_live/nn_x64/Y2hzPSZkZWY9MSZ1aXA9MTA2LjE0LjM4LjU1JnRlcm09NSZtYWNpZD02ODZlOGNmOGM4OGU3N2VjOWEwNzkzMjg5ZjUzNDg0MmFiZWM0ZjNjJnFpZD0mcmF1dGhfZW5hYmxlPW9mZiZjZG5leF9pZD1hbF9waG9uZTMmZXM9MTc4Mzk3OTAxNiZ1dWlkPTU2NjdhZjJmOGNjNjM4MjMwZjFlYzVmY2RiMWIxNThmLTZhMGUyNjM3JnM9ZDg2NTFkYzBlZjdjOTcxMjUyMjMxMTYyOGQ5ODM4YjgmdWlkPSZuZHY9aW9zLTYuNS4wJnY9MiZhcz0wJl9jYXJDb2RlPTA,/JYKTMPP360.m3u8$LR•IPV4•7『线路1』 #EXTINF:-1 tvg-id="金鹰卡通" tvg-name="金鹰卡通" group-title="数字",金鹰卡通 -http://phoneal.qing.mgtv.com/nn_live/nn_x64/Y2hzPSZkZWY9MSZ1aXA9MTA2LjE0LjM4LjU1JnRlcm09NSZtYWNpZD02ODZlOGNmOGM4OGU3N2VjOWEwNzkzMjg5ZjUzNDg0MmFiZWM0ZjNjJnFpZD0mcmF1dGhfZW5hYmxlPW9mZiZjZG5leF9pZD1hbF9waG9uZTMmZXM9MTc4Mzk3OTAxNiZ1dWlkPTU2NjdhZjJmOGNjNjM4MjMwZjFlYzVmY2RiMWIxNThmLTZhMGUyNjM3JnM9ZDg2NTFkYzBlZjdjOTcxMjUyMjMxMTYyOGQ5ODM4YjgmdWlkPSZuZHY9aW9zLTYuNS4wJnY9MiZhcz0wJl9jYXJDb2RlPTA,/JYKTMPP360.m3u8$LR•IPV4•7『线路2』 +http://183.11.239.36:808/hls/69/index.m3u8$LR•IPV4•7『线路2』 #EXTINF:-1 tvg-id="金鹰卡通" tvg-name="金鹰卡通" group-title="数字",金鹰卡通 http://101.66.194.82:9901/tsfile/live/1000_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•7『线路3』 #EXTINF:-1 tvg-id="金鹰卡通" tvg-name="金鹰卡通" group-title="数字",金鹰卡通 @@ -2206,31 +2206,31 @@ https://31182.hlsplay.aodianyun.com/lms_31182/tv_channel_175.m3u8$LR•IPV4 #EXTINF:-1 tvg-id="南宁影视娱乐" tvg-name="南宁影视娱乐" group-title="广西",南宁影视娱乐 http://hls.nntv.cn/nnlive/YSYL_244.m3u8$LR•IPV4 #EXTINF:-1 tvg-id="邢台综合" tvg-name="邢台综合" group-title="河北",邢台综合 -http://222.223.119.21:8888/newlive/live/hls/54/live.m3u8$LR•IPV4•2『线路1』 +https://jwplay.hebyun.com.cn:443/live/xtsrmtzs/1500k/tzwj_video.m3u8$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="邢台综合" tvg-name="邢台综合" group-title="河北",邢台综合 -https://jwplay.hebyun.com.cn:443/live/xtsrmtzs/1500k/tzwj_video.m3u8$LR•IPV4•2『线路2』 +http://222.223.119.21:8888/newlive/live/hls/54/live.m3u8$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="河北都市" tvg-name="河北都市" group-title="河北",河北都市 -http://121.19.134.246:808/hls/21/index.m3u8$LR•IPV4•2『线路1』 +https://radio.pull.hebtv.com/live/hebnczx.m3u8$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="河北都市" tvg-name="河北都市" group-title="河北",河北都市 -https://radio.pull.hebtv.com/live/hebnczx.m3u8$LR•IPV4•2『线路2』 +http://121.19.134.246:808/hls/21/index.m3u8$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="河北农民" tvg-name="河北农民" group-title="河北",河北农民 -http://121.19.134.246:808/hls/25/index.m3u8$LR•IPV4•2『线路1』 +https://ls.qingting.fm/live/1650/64k.m3u8$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="河北农民" tvg-name="河北农民" group-title="河北",河北农民 -https://ls.qingting.fm/live/1650/64k.m3u8$LR•IPV4•2『线路2』 +http://121.19.134.246:808/hls/25/index.m3u8$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="鹿泉一套" tvg-name="鹿泉一套" group-title="河北",鹿泉一套 http://hblq.chinashadt.com:2036/live/stream:luquan1.stream/playlist.m3u8$LR•IPV4 #EXTINF:-1 tvg-id="河北经济" tvg-name="河北经济" group-title="河北",河北经济 -http://121.19.134.246:808/hls/20/index.m3u8$LR•IPV4•2『线路1』 +http://1.94.31.214/php/hebei.php?id=jjsh$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="河北经济" tvg-name="河北经济" group-title="河北",河北经济 -http://1.94.31.214/php/hebei.php?id=jjsh$LR•IPV4•2『线路2』 +http://121.19.134.246:808/hls/20/index.m3u8$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="河北影视" tvg-name="河北影视" group-title="河北",河北影视 -http://121.19.134.246:808/hls/22/index.m3u8$LR•IPV4•2『线路1』 +http://1.94.31.214/php/hebei.php?id=hbys$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="河北影视" tvg-name="河北影视" group-title="河北",河北影视 -http://1.94.31.214/php/hebei.php?id=hbys$LR•IPV4•2『线路2』 +http://121.19.134.246:808/hls/22/index.m3u8$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="河北公共" tvg-name="河北公共" group-title="河北",河北公共 -http://121.19.134.246:808/hls/24/index.m3u8$LR•IPV4•2『线路1』 +http://1.94.31.214/php/hebei.php?id=hbgg$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="河北公共" tvg-name="河北公共" group-title="河北",河北公共 -http://1.94.31.214/php/hebei.php?id=hbgg$LR•IPV4•2『线路2』 +http://121.19.134.246:808/hls/24/index.m3u8$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="鹿泉二套" tvg-name="鹿泉二套" group-title="河北",鹿泉二套 http://hblq.chinashadt.com:2036/live/stream:luquan2.stream/playlist.m3u8$LR•IPV4 #EXTINF:-1 tvg-id="内蒙新闻" tvg-name="内蒙新闻" group-title="内蒙古",内蒙新闻 @@ -2272,13 +2272,13 @@ http://183.207.248.71/gitv/live1/G_NJSB/G_NJSB$LR•IPV4 #EXTINF:-1 tvg-id="江苏体育" tvg-name="江苏体育" group-title="江苏",江苏体育 http://183.207.248.71/gitv/live1/G_JSTY/G_JSTY$LR•IPV4 #EXTINF:-1 tvg-id="南京教科" tvg-name="南京教科" group-title="江苏",南京教科 -https://live.nbs.cn/channels/njtv/jkpd/m3u8:500k/live.m3u8$LR•IPV4•4『线路1』 +http://nklive.nbs.cn/hls/75b3c462-b831-4de7-a34b-5d3221db2069/index.m3u8$LR•IPV4•4『线路1』 #EXTINF:-1 tvg-id="南京教科" tvg-name="南京教科" group-title="江苏",南京教科 -http://183.207.248.71/gitv/live1/G_NJJK/G_NJJK$LR•IPV4•4『线路2』 +https://live.nbs.cn/channels/njtv/jkpd/m3u8:500k/live.m3u8$LR•IPV4•4『线路2』 #EXTINF:-1 tvg-id="南京教科" tvg-name="南京教科" group-title="江苏",南京教科 -http://223.110.245.155/ott.js.chinamobile.com/PLTV/3/224/3221227194/index.m3u8$LR•IPV4•4『线路3』 +http://183.207.248.71/gitv/live1/G_NJJK/G_NJJK$LR•IPV4•4『线路3』 #EXTINF:-1 tvg-id="南京教科" tvg-name="南京教科" group-title="江苏",南京教科 -http://nklive.nbs.cn/hls/75b3c462-b831-4de7-a34b-5d3221db2069/index.m3u8$LR•IPV4•4『线路4』 +http://223.110.245.155/ott.js.chinamobile.com/PLTV/3/224/3221227194/index.m3u8$LR•IPV4•4『线路4』 #EXTINF:-1 tvg-id="南京少儿" tvg-name="南京少儿" group-title="江苏",南京少儿 https://live.nbs.cn/channels/njtv/sepd/m3u8:500k/live.m3u8$LR•IPV4 #EXTINF:-1 tvg-id="苏州4k" tvg-name="苏州4k" group-title="江苏",苏州4k @@ -4260,223 +4260,223 @@ https://hk.188766.xyz/?migutoken=34467290b64f0850801479159893a4de&id=gd_gdzj&typ #EXTINF:-1 tvg-id="广东珠江" tvg-name="广东珠江" group-title="广东",广东珠江 https://stream1.freetv.fun/yan-dong-zhu-jiang-24.ctv$LR•IPV4•127『线路127』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://bxtv.3a.ink/api.php?id=gdty$LR•IPV4•109『线路1』 +https://t.freetv.fun/live/yan-dong-ti-yu-2.flv$LR•IPV4•109『线路1』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://php.jdshipin.com/TVOD/iptv.php?id=gdty$LR•IPV4•109『线路2』 +https://stream1.freetv.fun/yan-dong-ti-yu-11.ctv$LR•IPV4•109『线路2』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-2.flv$LR•IPV4•109『线路3』 +https://hls-gateway.vpstv.net/streams/476954.m3u8$LR•IPV4•109『线路3』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-11.ctv$LR•IPV4•109『线路4』 +https://stream1.freetv.fun/yan-dong-ti-yu-25.ctv$LR•IPV4•109『线路4』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://hls-gateway.vpstv.net/streams/476954.m3u8$LR•IPV4•109『线路5』 +https://stream1.freetv.fun/yan-dong-ti-yu-36.m3u8$LR•IPV4•109『线路5』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-25.ctv$LR•IPV4•109『线路6』 +https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-6.m3u8$LR•IPV4•109『线路6』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-36.m3u8$LR•IPV4•109『线路7』 +https://stream1.freetv.fun/yan-dong-ti-yu-35.ctv$LR•IPV4•109『线路7』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-6.m3u8$LR•IPV4•109『线路8』 +https://t.freetv.fun/live/yan-dong-ti-yu-15.m3u8$LR•IPV4•109『线路8』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-35.ctv$LR•IPV4•109『线路9』 +https://stream1.freetv.fun/yan-dong-ti-yu-34.ctv$LR•IPV4•109『线路9』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-15.m3u8$LR•IPV4•109『线路10』 +https://stream1.freetv.fun/yan-dong-ti-yu-24.m3u8$LR•IPV4•109『线路10』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-34.ctv$LR•IPV4•109『线路11』 +http://cdn2.163189.xyz/live/gdty/stream.m3u8$LR•IPV4•109『线路11』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-24.m3u8$LR•IPV4•109『线路12』 +https://stream1.freetv.fun/yan-dong-ti-yu-24.ctv$LR•IPV4•109『线路12』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://cdn2.163189.xyz/live/gdty/stream.m3u8$LR•IPV4•109『线路13』 +https://t.freetv.fun/live/yan-dong-ti-yu-5.m3u8$LR•IPV4•109『线路13』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-24.ctv$LR•IPV4•109『线路14』 +https://stream1.freetv.fun/yan-dong-ti-yu-30.m3u8$LR•IPV4•109『线路14』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-5.m3u8$LR•IPV4•109『线路15』 +http://125.89.163.44:8888/udp/239.77.0.112:5146$LR•IPV4•109『线路15』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-30.m3u8$LR•IPV4•109『线路16』 +https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-19.m3u8$LR•IPV4•109『线路16』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://125.89.163.44:8888/udp/239.77.0.112:5146$LR•IPV4•109『线路17』 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=6559&tk=a0c4f6cfaba3$LR•IPV4•109『线路17』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-19.m3u8$LR•IPV4•109『线路18』 +http://119.32.12.17:2901/udp/224.1.100.34:11111$LR•IPV4•109『线路18』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=6559&tk=a0c4f6cfaba3$LR•IPV4•109『线路19』 +https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-7.m3u8$LR•IPV4•109『线路19』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://119.32.12.17:2901/udp/224.1.100.34:11111$LR•IPV4•109『线路20』 +https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-18.m3u8$LR•IPV4•109『线路20』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-7.m3u8$LR•IPV4•109『线路21』 +https://stream1.freetv.fun/yan-dong-ti-yu-38.ctv$LR•IPV4•109『线路21』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-18.m3u8$LR•IPV4•109『线路22』 +https://stream1.freetv.fun/yan-dong-ti-yu-6.ctv$LR•IPV4•109『线路22』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-38.ctv$LR•IPV4•109『线路23』 +https://stream1.freetv.fun/yan-dong-ti-yu-12.ctv$LR•IPV4•109『线路23』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-6.ctv$LR•IPV4•109『线路24』 +http://api3.52tb.xyz/info?id=413&token=20221127jxwhhemby$LR•IPV4•109『线路24』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-12.ctv$LR•IPV4•109『线路25』 +https://t.freetv.fun/live/yan-dong-ti-yu.m3u8$LR•IPV4•109『线路25』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://api3.52tb.xyz/info?id=413&token=20221127jxwhhemby$LR•IPV4•109『线路26』 +https://stream1.freetv.fun/yan-dong-ti-yu-17.m3u8$LR•IPV4•109『线路26』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu.m3u8$LR•IPV4•109『线路27』 +https://stream1.freetv.fun/yan-dong-ti-yu-5.ctv$LR•IPV4•109『线路27』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-17.m3u8$LR•IPV4•109『线路28』 +https://stream1.freetv.fun/yan-dong-ti-yu-13.m3u8$LR•IPV4•109『线路28』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-5.ctv$LR•IPV4•109『线路29』 +https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing.m3u8$LR•IPV4•109『线路29』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-13.m3u8$LR•IPV4•109『线路30』 +https://stream1.freetv.fun/yan-dong-ti-yu-15.ctv$LR•IPV4•109『线路30』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing.m3u8$LR•IPV4•109『线路31』 +https://stream1.freetv.fun/yan-dong-ti-yu-23.ctv$LR•IPV4•109『线路31』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-15.ctv$LR•IPV4•109『线路32』 +https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-13.m3u8$LR•IPV4•109『线路32』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-23.ctv$LR•IPV4•109『线路33』 +https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-17.m3u8$LR•IPV4•109『线路33』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-13.m3u8$LR•IPV4•109『线路34』 +https://stream1.freetv.fun/yan-dong-ti-yu-14.ctv$LR•IPV4•109『线路34』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-17.m3u8$LR•IPV4•109『线路35』 +http://qjrhc.jydjd.top:2911/udp/224.1.100.33:11111$LR•IPV4•109『线路35』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-14.ctv$LR•IPV4•109『线路36』 +https://stream1.freetv.fun/yan-dong-ti-yu-21.m3u8$LR•IPV4•109『线路36』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://qjrhc.jydjd.top:2911/udp/224.1.100.33:11111$LR•IPV4•109『线路37』 +https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-3.m3u8$LR•IPV4•109『线路37』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-21.m3u8$LR•IPV4•109『线路38』 +http://67.220.71.199:2347/livehttpplay?channel_id=30031$LR•IPV4•109『线路38』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-3.m3u8$LR•IPV4•109『线路39』 +https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-12.m3u8$LR•IPV4•109『线路39』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://67.220.71.199:2347/livehttpplay?channel_id=30031$LR•IPV4•109『线路40』 +http://php.jdshipin.com/TVOD/iptv.php?id=gdty$LR•IPV4•109『线路40』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-12.m3u8$LR•IPV4•109『线路41』 +http://183.3.134.56:9901/tsfile/live/0142_1.m3u8$LR•IPV4•109『线路41』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://183.3.134.56:9901/tsfile/live/0142_1.m3u8$LR•IPV4•109『线路42』 +https://stream1.freetv.fun/yan-dong-ti-yu-8.ctv$LR•IPV4•109『线路42』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-8.ctv$LR•IPV4•109『线路43』 +https://stream1.freetv.fun/yan-dong-ti-yu-3.m3u8$LR•IPV4•109『线路43』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-3.m3u8$LR•IPV4•109『线路44』 +https://stream1.freetv.fun/yan-dong-ti-yu-10.ctv$LR•IPV4•109『线路44』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-10.ctv$LR•IPV4•109『线路45』 +https://stream1.freetv.fun/yan-dong-ti-yu-33.ctv$LR•IPV4•109『线路45』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-33.ctv$LR•IPV4•109『线路46』 +https://stream1.freetv.fun/yan-dong-ti-yu-5.m3u8$LR•IPV4•109『线路46』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-5.m3u8$LR•IPV4•109『线路47』 +https://t.freetv.fun/live/yan-dong-ti-yu-3.php$LR•IPV4•109『线路47』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-3.php$LR•IPV4•109『线路48』 +https://epg.pw/stream/7b470f9fc5c305db0c8622117b7b25ca00eb35ba3e93e865cf0ff9df5c736681.m3u8$LR•IPV4•109『线路48』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://epg.pw/stream/7b470f9fc5c305db0c8622117b7b25ca00eb35ba3e93e865cf0ff9df5c736681.m3u8$LR•IPV4•109『线路49』 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=8718&tk=a0c4f6cfaba3$LR•IPV4•109『线路49』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=8718&tk=a0c4f6cfaba3$LR•IPV4•109『线路50』 +https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-2.m3u8$LR•IPV4•109『线路50』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-2.m3u8$LR•IPV4•109『线路51』 +http://67.220.71.199:2347/livehttpplay?channel_id=12028$LR•IPV4•109『线路51』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://67.220.71.199:2347/livehttpplay?channel_id=12028$LR•IPV4•109『线路52』 +http://120.238.94.10:9901/tsfile/live/1012_1.m3u8$LR•IPV4•109『线路52』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://120.238.94.10:9901/tsfile/live/1012_1.m3u8$LR•IPV4•109『线路53』 +http://120.198.101.106:9901/tsfile/live/1012_1.m3u8?key=txiptv$LR•IPV4•109『线路53』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://120.198.101.106:9901/tsfile/live/1012_1.m3u8?key=txiptv$LR•IPV4•109『线路54』 +https://stream1.freetv.fun/yan-dong-ti-yu-27.m3u8$LR•IPV4•109『线路54』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-27.m3u8$LR•IPV4•109『线路55』 +http://120.77.205.62:8087/rtp/239.77.1.97:5146$LR•IPV4•109『线路55』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://120.77.205.62:8087/rtp/239.77.1.97:5146$LR•IPV4•109『线路56』 +https://stream1.freetv.fun/yan-dong-ti-yu-26.ctv$LR•IPV4•109『线路56』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-26.ctv$LR•IPV4•109『线路57』 +http://63.141.230.178:82/gslb/zbdq5.m3u8?id=gdty$LR•IPV4•109『线路57』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://63.141.230.178:82/gslb/zbdq5.m3u8?id=gdty$LR•IPV4•109『线路58』 +http://218.15.214.115:10000/udp/239.77.0.112:5146$LR•IPV4•109『线路58』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://218.15.214.115:10000/udp/239.77.0.112:5146$LR•IPV4•109『线路59』 +http://222.128.55.152:9080/live/gdty.m3u8$LR•IPV4•109『线路59』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://222.128.55.152:9080/live/gdty.m3u8$LR•IPV4•109『线路60』 +https://stream1.freetv.fun/yan-dong-ti-yu-17.ctv$LR•IPV4•109『线路60』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-17.ctv$LR•IPV4•109『线路61』 +http://183.237.95.108:9901/tsfile/live/1033_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•109『线路61』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://183.237.95.108:9901/tsfile/live/1033_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•109『线路62』 +https://stream1.freetv.fun/yan-dong-ti-yu-18.ctv$LR•IPV4•109『线路62』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-18.ctv$LR•IPV4•109『线路63』 +https://stream1.freetv.fun/yan-dong-ti-yu-7.ctv$LR•IPV4•109『线路63』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-7.ctv$LR•IPV4•109『线路64』 +https://stream1.freetv.fun/yan-dong-ti-yu-4.ctv$LR•IPV4•109『线路64』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-4.ctv$LR•IPV4•109『线路65』 +https://stream1.freetv.fun/yan-dong-ti-yu-gao-qing-2.m3u8$LR•IPV4•109『线路65』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-gao-qing-2.m3u8$LR•IPV4•109『线路66』 +https://stream1.freetv.fun/yan-dong-ti-yu-28.ctv$LR•IPV4•109『线路66』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-28.ctv$LR•IPV4•109『线路67』 +https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-16.m3u8$LR•IPV4•109『线路67』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-16.m3u8$LR•IPV4•109『线路68』 +https://stream1.freetv.fun/yan-dong-ti-yu-4.m3u8$LR•IPV4•109『线路68』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-4.m3u8$LR•IPV4•109『线路69』 +http://183.11.239.36:808/hls/2/index.m3u8$LR•IPV4•109『线路69』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://183.11.239.36:808/hls/2/index.m3u8$LR•IPV4•109『线路70』 +http://r.jdshipin.com/LiYdg$LR•IPV4•109『线路70』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://r.jdshipin.com/LiYdg$LR•IPV4•109『线路71』 +https://stream1.freetv.fun/yan-dong-ti-yu-39.ctv$LR•IPV4•109『线路71』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-39.ctv$LR•IPV4•109『线路72』 +http://bak.dou.ddns-ip.net/api.php?n=cctvxxx&id=t3ucOH&tk=zUr4K92Dl6kh$LR•IPV4•109『线路72』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://bak.dou.ddns-ip.net/api.php?n=cctvxxx&id=t3ucOH&tk=zUr4K92Dl6kh$LR•IPV4•109『线路73』 +https://stream1.freetv.fun/yan-dong-ti-yu-1.m3u8$LR•IPV4•109『线路73』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-1.m3u8$LR•IPV4•109『线路74』 +https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-8.m3u8$LR•IPV4•109『线路74』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-8.m3u8$LR•IPV4•109『线路75』 +http://api2.52tb.xyz/info?id=414&token=20230218qkyjia$LR•IPV4•109『线路75』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://api2.52tb.xyz/info?id=414&token=20230218qkyjia$LR•IPV4•109『线路76』 +http://php.jdshipin.com/PLTV/iptv.php?id=gdty$LR•IPV4•109『线路76』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://php.jdshipin.com/PLTV/iptv.php?id=gdty$LR•IPV4•109『线路77』 +https://stream1.freetv.fun/yan-dong-ti-yu-16.ctv$LR•IPV4•109『线路77』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-16.ctv$LR•IPV4•109『线路78』 +http://38.75.136.137:98/gslb/dsdqpub/gdty.m3u8?auth=testpub$LR•IPV4•109『线路78』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://38.75.136.137:98/gslb/dsdqpub/gdty.m3u8?auth=testpub$LR•IPV4•109『线路79』 +http://119.32.12.32:2901/udp/224.1.100.34:11111$LR•IPV4•109『线路79』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://119.32.12.32:2901/udp/224.1.100.34:11111$LR•IPV4•109『线路80』 +http://218.15.183.23:9901/tsfile/live/23012_1.m3u8$LR•IPV4•109『线路80』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://218.15.183.23:9901/tsfile/live/23012_1.m3u8$LR•IPV4•109『线路81』 +https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-4.m3u8$LR•IPV4•109『线路81』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-4.m3u8$LR•IPV4•109『线路82』 +https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-1.m3u8$LR•IPV4•109『线路82』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-1.m3u8$LR•IPV4•109『线路83』 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=2030&tk=a0c4f6cfaba3$LR•IPV4•109『线路83』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=2030&tk=a0c4f6cfaba3$LR•IPV4•109『线路84』 +http://120.77.205.62:8087/rtp/239.77.0.168:5146$LR•IPV4•109『线路84』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://120.77.205.62:8087/rtp/239.77.0.168:5146$LR•IPV4•109『线路85』 +https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-10.m3u8$LR•IPV4•109『线路85』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-10.m3u8$LR•IPV4•109『线路86』 +https://tv.cdn.com.mp/live/gdty/stream.m3u8$LR•IPV4•109『线路86』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://tv.cdn.com.mp/live/gdty/stream.m3u8$LR•IPV4•109『线路87』 +http://120.77.205.62:8087/rtp/239.77.0.112:5146$LR•IPV4•109『线路87』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://120.77.205.62:8087/rtp/239.77.0.112:5146$LR•IPV4•109『线路88』 +https://stream1.freetv.fun/yan-dong-ti-yu-26.m3u8$LR•IPV4•109『线路88』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-26.m3u8$LR•IPV4•109『线路89』 +https://stream1.freetv.fun/yan-dong-ti-yu-12.m3u8$LR•IPV4•109『线路89』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-12.m3u8$LR•IPV4•109『线路90』 +http://api2.52tb.xyz/info?id=414&token=20230218jsyklh$LR•IPV4•109『线路90』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://api2.52tb.xyz/info?id=414&token=20230218jsyklh$LR•IPV4•109『线路91』 +http://api2.52tb.xyz/info?id=413&token=20230218qkyjia$LR•IPV4•109『线路91』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://api2.52tb.xyz/info?id=413&token=20230218qkyjia$LR•IPV4•109『线路92』 +http://120.238.94.82:9901/tsfile/live/1012_1.m3u8$LR•IPV4•109『线路92』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://120.238.94.82:9901/tsfile/live/1012_1.m3u8$LR•IPV4•109『线路93』 +https://t.freetv.fun/live/yan-dong-ti-yu-10.m3u8$LR•IPV4•109『线路93』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-10.m3u8$LR•IPV4•109『线路94』 +https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-9.m3u8$LR•IPV4•109『线路94』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-9.m3u8$LR•IPV4•109『线路95』 +http://67.220.71.199:2347/livehttpplay?channel_id=20130$LR•IPV4•109『线路95』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://67.220.71.199:2347/livehttpplay?channel_id=20130$LR•IPV4•109『线路96』 +https://stream1.freetv.fun/yan-dong-ti-yu-30.ctv$LR•IPV4•109『线路96』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-30.ctv$LR•IPV4•109『线路97』 +https://stream1.freetv.fun/yan-dong-ti-yu-19.m3u8$LR•IPV4•109『线路97』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-19.m3u8$LR•IPV4•109『线路98』 +https://stream1.freetv.fun/yan-dong-ti-yu-16.m3u8$LR•IPV4•109『线路98』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-16.m3u8$LR•IPV4•109『线路99』 +https://stream1.freetv.fun/yan-dong-ti-yu-20.m3u8$LR•IPV4•109『线路99』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-20.m3u8$LR•IPV4•109『线路100』 +https://t.freetv.fun/live/yan-dong-ti-yu-4.m3u8$LR•IPV4•109『线路100』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-4.m3u8$LR•IPV4•109『线路101』 +https://t.freetv.fun/live/yan-dong-ti-yu-1.m3u8$LR•IPV4•109『线路101』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-1.m3u8$LR•IPV4•109『线路102』 +https://stream1.freetv.fun/yan-dong-ti-yu-39.m3u8$LR•IPV4•109『线路102』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-39.m3u8$LR•IPV4•109『线路103』 +https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-15.m3u8$LR•IPV4•109『线路103』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-15.m3u8$LR•IPV4•109『线路104』 +http://qjrhc.jydjd.top:2911/udp/224.1.100.34:11111$LR•IPV4•109『线路104』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://qjrhc.jydjd.top:2911/udp/224.1.100.34:11111$LR•IPV4•109『线路105』 +http://218.13.170.98:9901/tsfile/live/0019_1.m3u8$LR•IPV4•109『线路105』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://218.13.170.98:9901/tsfile/live/0019_1.m3u8$LR•IPV4•109『线路106』 +http://116.77.239.26:44300/tsfile/live/0124_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•109『线路106』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://116.77.239.26:44300/tsfile/live/0124_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•109『线路107』 +https://stream1.freetv.fun/yan-dong-ti-yu-2.m3u8$LR•IPV4•109『线路107』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -https://stream1.freetv.fun/yan-dong-ti-yu-2.m3u8$LR•IPV4•109『线路108』 +http://120.198.95.220:9901/tsfile/live/1010_1.m3u8?key=txiptv$LR•IPV4•109『线路108』 #EXTINF:-1 tvg-id="广东体育" tvg-name="广东体育" group-title="广东",广东体育 -http://120.198.95.220:9901/tsfile/live/1010_1.m3u8?key=txiptv$LR•IPV4•109『线路109』 +http://bxtv.3a.ink/api.php?id=gdty$LR•IPV4•109『线路109』 #EXTINF:-1 tvg-id="广东民生" tvg-name="广东民生" group-title="广东",广东民生 http://qjrhc.jydjd.top:2911/udp/224.1.100.152:11111$LR•IPV4•55『线路1』 #EXTINF:-1 tvg-id="广东民生" tvg-name="广东民生" group-title="广东",广东民生 @@ -5896,99 +5896,99 @@ https://stream1.freetv.fun/shang-hai-xin-wen-zong-he-8.m3u8$LR•IPV4•115『 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 https://stream1.freetv.fun/ipv6-xin-wen-zong-he-10.m3u8$LR•IPV4•115『线路70』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -https://stream2.jlntv.cn/baicheng1/sd/live.m3u8$LR•IPV4•115『线路71』 +http://stream8.jlntv.cn/shulan/sd/live.m3u8?_upt=332db6421699196585$LR•IPV4•115『线路71』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://live.cztv.cc:85/live/xwpd.m3u8$LR•IPV4•115『线路72』 +http://stream5.jlntv.cn/hn/sd/live.m3u8$LR•IPV4•115『线路72』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://117.156.28.119/270000001111/1110000001/index.m3u8$LR•IPV4•115『线路73』 +http://pili-live-hls.ybcxjd.com/jdh-live/2108111201035597.m3u8?zsicd$LR•IPV4•115『线路73』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://pili-live-hls.hebitv.com/hebi/hebi.m3u8$LR•IPV4•115『线路74』 +http://live.spccmc.com:90/live/spxwzh.m3u8$LR•IPV4•115『线路74』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -https://stream2.jlntv.cn/naxw/sd/live.m3u8$LR•IPV4•115『线路75』 +http://live.iwcmt.cn:90/live/zhxw.m3u8$LR•IPV4•115『线路75』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://uni6rtmp.tulix.tv:1935/vbstv/vbsabr.smil/chunklist_w439903609_b1228800.m3u8$LR•IPV4•115『线路76』 +http://live.jinchuanrmt.com:90/live/zhxw.m3u8?zsicd$LR•IPV4•115『线路76』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://221.5.213.4:30000/1111.m3u8$LR•IPV4•115『线路77』 +https://play.yunxya.com/channellive/xinwen.m3u8$LR•IPV4•115『线路77』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -https://stream2.jlntv.cn/jilin1/sd/live.m3u8$LR•IPV4•115『线路78』 +http://ls.qingting.fm/live/267.m3u8$LR•IPV4•115『线路78』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://30515.hlsplay.aodianyun.com/lms_30515/tv_channel_239.m3u8$LR•IPV4•115『线路79』 +http://hslive.hsnewsnet.com/lsdream/hve9Wjs/1000/live.m3u8$LR•IPV4•115『线路79』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -https://stream2.jlntv.cn/sptv/sd/live.m3u8$LR•IPV4•115『线路80』 +https://p2.vzan.com/slowlive/596867413819827251/live.m3u8?zbid=1725814272&amp;tpid=1516989100&amp;type=0$LR•IPV4•115『线路80』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://live.ahsz.tv/video/s10001-szzh/index.m3u8$LR•IPV4•115『线路81』 +https://tntgjhjb.live.sxmty.com/live/hls/3a4585ac11ec4e1bb07b419101b370c3/baf63e2b313440c2a25d7859f9b73b05-1.m3u8?zshanxd$LR•IPV4•115『线路81』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://guangshui.live.tempsource.cjyun.org/videotmp/s10146-GSXW.m3u8$LR•IPV4•115『线路82』 +http://uzoiczhh.live.sxmty.com/live/hls/0d41f1480c4042d49927858f01fde707/53130407737b417b9a6259b57246bae3.m3u8?zshanxd$LR•IPV4•115『线路82』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -https://stream2.jlntv.cn/jlyb/sd/live.m3u8$LR•IPV4•115『线路83』 +https://ls.qingting.fm/live/5043/64k.m3u8$LR•IPV4•115『线路83』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -https://stream2.jlntv.cn/sytv/sd/live.m3u8$LR•IPV4•115『线路84』 +http://liveout.btzx.com.cn/62ds9e/4nxdih.m3u8?fbl=$LR•IPV4•115『线路84』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://222.179.155.21:1935/ch1.m3u8$LR•IPV4•115『线路85』 +http://nklive.nbs.cn/hls/d511bc9d-a694-4453-b3a2-4fc842cc97a1/index.m3u8$LR•IPV4•115『线路85』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://117.172.215.250:8083/videos/live/35/39/GQVbrgob5CGJM/GQVbrgob5CGJM.m3u8$LR•IPV4•115『线路86』 +http://ls.qingting.fm/live/23797.m3u8$LR•IPV4•115『线路86』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://220.180.110.101:8083/videos/live/36/57/hwEHU4UVQ1Iv5/hwEHU4UVQ1Iv5.m3u8$LR•IPV4•115『线路87』 +https://play.kankanlive.com/live/1720583434627241.m3u8$LR•IPV4•115『线路87』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://live.hnxttv.com:9601/live/xwzh/800K/tzwj_video.m3u8$LR•IPV4•115『线路88』 +https://ls.qingting.fm/live/5022100/64k.m3u8$LR•IPV4•115『线路88』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://stream.bzcm.net/2/sd/live.m3u8$LR•IPV4•115『线路89』 +https://liveout.xntv.tv/a65jur/96iln2.m3u8?zqinghd$LR•IPV4•115『线路89』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://117.156.28.119/270000001111/1110000145/index.m3u8$LR•IPV4•115『线路90』 +http://live.qthnews.org.cn:1935/live/live1/800k/tzwj_video.m3u8$LR•IPV4•115『线路90』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -https://stream2.jlntv.cn/baishan1/sd/live.m3u8$LR•IPV4•115『线路91』 +http://stream.hrbtv.net/xwzh/sd/live.m3u8?zheild$LR•IPV4•115『线路91』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://live1.wuhubtv.com/channel1/sd/live.m3u8$LR•IPV4•115『线路92』 +https://stream2.jlntv.cn/baicheng1/sd/live.m3u8$LR•IPV4•115『线路92』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://palive.patv123.com:8091/live/xwpd_800K.m3u8$LR•IPV4•115『线路93』 +http://live.cztv.cc:85/live/xwpd.m3u8$LR•IPV4•115『线路93』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -https://stream2.jlntv.cn/liaoyuan1/sd/live.m3u8$LR•IPV4•115『线路94』 +http://117.156.28.119/270000001111/1110000001/index.m3u8$LR•IPV4•115『线路94』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://stream8.jlntv.cn/shulan/sd/live.m3u8?_upt=332db6421699196585$LR•IPV4•115『线路95』 +http://pili-live-hls.hebitv.com/hebi/hebi.m3u8$LR•IPV4•115『线路95』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://stream5.jlntv.cn/hn/sd/live.m3u8$LR•IPV4•115『线路96』 +https://stream2.jlntv.cn/naxw/sd/live.m3u8$LR•IPV4•115『线路96』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://pili-live-hls.ybcxjd.com/jdh-live/2108111201035597.m3u8?zsicd$LR•IPV4•115『线路97』 +http://uni6rtmp.tulix.tv:1935/vbstv/vbsabr.smil/chunklist_w439903609_b1228800.m3u8$LR•IPV4•115『线路97』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://live.spccmc.com:90/live/spxwzh.m3u8$LR•IPV4•115『线路98』 +http://221.5.213.4:30000/1111.m3u8$LR•IPV4•115『线路98』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://live.iwcmt.cn:90/live/zhxw.m3u8$LR•IPV4•115『线路99』 +https://stream2.jlntv.cn/jilin1/sd/live.m3u8$LR•IPV4•115『线路99』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://live.jinchuanrmt.com:90/live/zhxw.m3u8?zsicd$LR•IPV4•115『线路100』 +http://30515.hlsplay.aodianyun.com/lms_30515/tv_channel_239.m3u8$LR•IPV4•115『线路100』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -https://play.yunxya.com/channellive/xinwen.m3u8$LR•IPV4•115『线路101』 +https://stream2.jlntv.cn/sptv/sd/live.m3u8$LR•IPV4•115『线路101』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://ls.qingting.fm/live/267.m3u8$LR•IPV4•115『线路102』 +http://live.ahsz.tv/video/s10001-szzh/index.m3u8$LR•IPV4•115『线路102』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://hslive.hsnewsnet.com/lsdream/hve9Wjs/1000/live.m3u8$LR•IPV4•115『线路103』 +http://guangshui.live.tempsource.cjyun.org/videotmp/s10146-GSXW.m3u8$LR•IPV4•115『线路103』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -https://p2.vzan.com/slowlive/596867413819827251/live.m3u8?zbid=1725814272&amp;tpid=1516989100&amp;type=0$LR•IPV4•115『线路104』 +https://stream2.jlntv.cn/jlyb/sd/live.m3u8$LR•IPV4•115『线路104』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -https://tntgjhjb.live.sxmty.com/live/hls/3a4585ac11ec4e1bb07b419101b370c3/baf63e2b313440c2a25d7859f9b73b05-1.m3u8?zshanxd$LR•IPV4•115『线路105』 +https://stream2.jlntv.cn/sytv/sd/live.m3u8$LR•IPV4•115『线路105』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://uzoiczhh.live.sxmty.com/live/hls/0d41f1480c4042d49927858f01fde707/53130407737b417b9a6259b57246bae3.m3u8?zshanxd$LR•IPV4•115『线路106』 +http://222.179.155.21:1935/ch1.m3u8$LR•IPV4•115『线路106』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -https://ls.qingting.fm/live/5043/64k.m3u8$LR•IPV4•115『线路107』 +http://117.172.215.250:8083/videos/live/35/39/GQVbrgob5CGJM/GQVbrgob5CGJM.m3u8$LR•IPV4•115『线路107』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://liveout.btzx.com.cn/62ds9e/4nxdih.m3u8?fbl=$LR•IPV4•115『线路108』 +http://220.180.110.101:8083/videos/live/36/57/hwEHU4UVQ1Iv5/hwEHU4UVQ1Iv5.m3u8$LR•IPV4•115『线路108』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://nklive.nbs.cn/hls/d511bc9d-a694-4453-b3a2-4fc842cc97a1/index.m3u8$LR•IPV4•115『线路109』 +http://live.hnxttv.com:9601/live/xwzh/800K/tzwj_video.m3u8$LR•IPV4•115『线路109』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://ls.qingting.fm/live/23797.m3u8$LR•IPV4•115『线路110』 +http://stream.bzcm.net/2/sd/live.m3u8$LR•IPV4•115『线路110』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -https://play.kankanlive.com/live/1720583434627241.m3u8$LR•IPV4•115『线路111』 +http://117.156.28.119/270000001111/1110000145/index.m3u8$LR•IPV4•115『线路111』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -https://ls.qingting.fm/live/5022100/64k.m3u8$LR•IPV4•115『线路112』 +https://stream2.jlntv.cn/baishan1/sd/live.m3u8$LR•IPV4•115『线路112』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -https://liveout.xntv.tv/a65jur/96iln2.m3u8?zqinghd$LR•IPV4•115『线路113』 +http://live1.wuhubtv.com/channel1/sd/live.m3u8$LR•IPV4•115『线路113』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://live.qthnews.org.cn:1935/live/live1/800k/tzwj_video.m3u8$LR•IPV4•115『线路114』 +http://palive.patv123.com:8091/live/xwpd_800K.m3u8$LR•IPV4•115『线路114』 #EXTINF:-1 tvg-id="新闻综合" tvg-name="新闻综合" group-title="上海",新闻综合 -http://stream.hrbtv.net/xwzh/sd/live.m3u8?zheild$LR•IPV4•115『线路115』 +https://stream2.jlntv.cn/liaoyuan1/sd/live.m3u8$LR•IPV4•115『线路115』 #EXTINF:-1 tvg-id="西安新闻" tvg-name="西安新闻" group-title="陕西",西安新闻 -http://stream2.xiancity.cn/xatv1/playlist.m3u8$LR•IPV4•2『线路1』 +http://112.46.105.20:8009/hls/28/index.m3u8$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="西安新闻" tvg-name="西安新闻" group-title="陕西",西安新闻 -http://112.46.105.20:8009/hls/28/index.m3u8$LR•IPV4•2『线路2』 +http://stream2.xiancity.cn/xatv1/playlist.m3u8$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="山东少儿" tvg-name="山东少儿" group-title="山东",山东少儿 http://123.129.70.178:9901/tsfile/live/1004_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•16『线路1』 #EXTINF:-1 tvg-id="山东少儿" tvg-name="山东少儿" group-title="山东",山东少儿 @@ -6246,43 +6246,43 @@ http://218.206.193.218:8888/hls/66/index.m3u8$LR•IPV4•8『线路4』 #EXTINF:-1 tvg-id="凤凰中文" tvg-name="凤凰中文" group-title="港澳台",凤凰中文 http://120.198.95.220:9901/tsfile/live/1036_1.m3u8?key=txiptv$LR•IPV4•8『线路5』 #EXTINF:-1 tvg-id="凤凰中文" tvg-name="凤凰中文" group-title="港澳台",凤凰中文 -http://223.110.245.139/ott.js.chinamobile.com/PLTV/3/224/3221226922/index.m3u8$LR•IPV4•8『线路6』 +http://r.jdshipin.com/cCCzW$LR•IPV4•8『线路6』 #EXTINF:-1 tvg-id="凤凰中文" tvg-name="凤凰中文" group-title="港澳台",凤凰中文 -http://r.jdshipin.com/cCCzW$LR•IPV4•8『线路7』 +http://cdn6.163189.xyz/163189/fhzw$LR•IPV4•8『线路7』 #EXTINF:-1 tvg-id="凤凰中文" tvg-name="凤凰中文" group-title="港澳台",凤凰中文 -http://cdn6.163189.xyz/163189/fhzw$LR•IPV4•8『线路8』 +http://223.110.245.139/ott.js.chinamobile.com/PLTV/3/224/3221226922/index.m3u8$LR•IPV4•8『线路8』 #EXTINF:-1 tvg-id="凤凰资讯" tvg-name="凤凰资讯" group-title="港澳台",凤凰资讯 http://api.mg.itv888.cn:8080/hls/11ef1dc70d8/index.m3u8$LR•IPV4•10『线路1』 #EXTINF:-1 tvg-id="凤凰资讯" tvg-name="凤凰资讯" group-title="港澳台",凤凰资讯 -p3p://167.114.175.6:55331/5fffbf860003807cedf4e1016c3c3ed2$LR•IPV4•10『线路2』 +http://zmgd.zyrnet.com:8888/hls/109/index.m3u8$LR•IPV4•10『线路2』 #EXTINF:-1 tvg-id="凤凰资讯" tvg-name="凤凰资讯" group-title="港澳台",凤凰资讯 -http://zmgd.zyrnet.com:8888/hls/109/index.m3u8$LR•IPV4•10『线路3』 +http://221.7.175.154:8445/tsfile/live/1021_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•10『线路3』 #EXTINF:-1 tvg-id="凤凰资讯" tvg-name="凤凰资讯" group-title="港澳台",凤凰资讯 -http://221.7.175.154:8445/tsfile/live/1021_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•10『线路4』 +http://120.198.95.220:9901/tsfile/live/1037_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•10『线路4』 #EXTINF:-1 tvg-id="凤凰资讯" tvg-name="凤凰资讯" group-title="港澳台",凤凰资讯 -http://120.198.95.220:9901/tsfile/live/1037_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•10『线路5』 +http://120.198.95.220:9901/tsfile/live/1037_1.m3u8?key=txiptv$LR•IPV4•10『线路5』 #EXTINF:-1 tvg-id="凤凰资讯" tvg-name="凤凰资讯" group-title="港澳台",凤凰资讯 -http://120.198.95.220:9901/tsfile/live/1037_1.m3u8?key=txiptv$LR•IPV4•10『线路6』 +p3p://167.114.175.6:55331/5fffbf860003807cedf4e1016c3c3ed2$LR•IPV4•10『线路6』 #EXTINF:-1 tvg-id="凤凰资讯" tvg-name="凤凰资讯" group-title="港澳台",凤凰资讯 -http://223.110.245.167/ott.js.chinamobile.com/PLTV/3/224/3221226923/index.m3u8$LR•IPV4•10『线路7』 +http://r.jdshipin.com/0Rp07$LR•IPV4•10『线路7』 #EXTINF:-1 tvg-id="凤凰资讯" tvg-name="凤凰资讯" group-title="港澳台",凤凰资讯 -http://r.jdshipin.com/0Rp07$LR•IPV4•10『线路8』 +http://php.jdshipin.com/TVOD/iptv.php?id=fhzx$LR•IPV4•10『线路8』 #EXTINF:-1 tvg-id="凤凰资讯" tvg-name="凤凰资讯" group-title="港澳台",凤凰资讯 -http://php.jdshipin.com/TVOD/iptv.php?id=fhzx$LR•IPV4•10『线路9』 +http://cdn6.163189.xyz/163189/fhzx$LR•IPV4•10『线路9』 #EXTINF:-1 tvg-id="凤凰资讯" tvg-name="凤凰资讯" group-title="港澳台",凤凰资讯 -http://cdn6.163189.xyz/163189/fhzx$LR•IPV4•10『线路10』 +http://223.110.245.167/ott.js.chinamobile.com/PLTV/3/224/3221226923/index.m3u8$LR•IPV4•10『线路10』 #EXTINF:-1 tvg-id="凤凰香港" tvg-name="凤凰香港" group-title="港澳台",凤凰香港 -p3p://167.114.175.6:55331/5fe0b82c000cac9774c17f262e43314d$LR•IPV4•6『线路1』 +http://122.152.202.33/s/81a8a44f/index.m3u8?id=fhhk$LR•IPV4•6『线路1』 #EXTINF:-1 tvg-id="凤凰香港" tvg-name="凤凰香港" group-title="港澳台",凤凰香港 -http://122.152.202.33/s/81a8a44f/index.m3u8?id=fhhk$LR•IPV4•6『线路2』 +p3p://167.114.175.6:55331/5fe0b82c000cac9774c17f262e43314d$LR•IPV4•6『线路2』 #EXTINF:-1 tvg-id="凤凰香港" tvg-name="凤凰香港" group-title="港澳台",凤凰香港 -http://223.110.245.136/PLTV/3/224/3221226975/index.m3u8$LR•IPV4•6『线路3』 +http://r.jdshipin.com/yDoTN$LR•IPV4•6『线路3』 #EXTINF:-1 tvg-id="凤凰香港" tvg-name="凤凰香港" group-title="港澳台",凤凰香港 -http://r.jdshipin.com/yDoTN$LR•IPV4•6『线路4』 +http://php.jdshipin.com/TVOD/iptv.php?id=fhhk$LR•IPV4•6『线路4』 #EXTINF:-1 tvg-id="凤凰香港" tvg-name="凤凰香港" group-title="港澳台",凤凰香港 -http://php.jdshipin.com/TVOD/iptv.php?id=fhhk$LR•IPV4•6『线路5』 +http://cdn6.163189.xyz/163189/fhhk$LR•IPV4•6『线路5』 #EXTINF:-1 tvg-id="凤凰香港" tvg-name="凤凰香港" group-title="港澳台",凤凰香港 -http://cdn6.163189.xyz/163189/fhhk$LR•IPV4•6『线路6』 +http://223.110.245.136/PLTV/3/224/3221226975/index.m3u8$LR•IPV4•6『线路6』 #EXTINF:-1 tvg-id="TVB翡翠台" tvg-name="TVB翡翠台" group-title="港澳台",TVB翡翠台 p3p://167.114.175.6:55331/653e4c02000ea0440c8c63fd3e5d709d$LR•IPV4•12『线路1』 #EXTINF:-1 tvg-id="TVB翡翠台" tvg-name="TVB翡翠台" group-title="港澳台",TVB翡翠台 @@ -6384,9 +6384,9 @@ p3p://167.114.175.6:55331/612ee2240008f3db8e0578dc59406f9e$LR•IPV4•10『线 #EXTINF:-1 tvg-id="台视" tvg-name="台视" group-title="港澳台",台视 p3p://167.114.175.6:55331/6223b571000a13023e78ece5030b5b05$LR•IPV4•10『线路8』 #EXTINF:-1 tvg-id="台视" tvg-name="台视" group-title="港澳台",台视 -http://162.19.247.76:22222/live/taishi/index.m3u8$LR•IPV4•10『线路9』 +http://38.64.72.148/hls/modn/list/4013/chunklist1.m3u8$LR•IPV4•10『线路9』 #EXTINF:-1 tvg-id="台视" tvg-name="台视" group-title="港澳台",台视 -http://38.64.72.148/hls/modn/list/4013/chunklist1.m3u8$LR•IPV4•10『线路10』 +http://162.19.247.76:22222/live/taishi/index.m3u8$LR•IPV4•10『线路10』 #EXTINF:-1 tvg-id="民视新闻" tvg-name="民视新闻" group-title="港澳台",民视新闻 http://38.64.72.148:80/hls/modn/list/4012/chunklist0.m3u8$LR•IPV4•4『线路1』 #EXTINF:-1 tvg-id="民视新闻" tvg-name="民视新闻" group-title="港澳台",民视新闻 @@ -6398,15 +6398,15 @@ http://38.64.72.148/hls/modn/list/4012/chunklist1.m3u8$LR•IPV4•4『线路4 #EXTINF:-1 tvg-id="耀才财经" tvg-name="耀才财经" group-title="港澳台",耀才财经 https://v3.mediacast.hk/webcast/bshdlive-pc/playlist.m3u8$LR•IPV4•3『线路1』 #EXTINF:-1 tvg-id="耀才财经" tvg-name="耀才财经" group-title="港澳台",耀才财经 -http://202.69.67.66:443/webcast/bshdlive-mobile/playlist.m3u8$LR•IPV4•3『线路2』 +https://v3.mediacast.hk/webcast/bshdlive-pc/chunklist_w99771165.m3u8$LR•IPV4•3『线路2』 #EXTINF:-1 tvg-id="耀才财经" tvg-name="耀才财经" group-title="港澳台",耀才财经 -https://v3.mediacast.hk/webcast/bshdlive-pc/chunklist_w99771165.m3u8$LR•IPV4•3『线路3』 +http://202.69.67.66:443/webcast/bshdlive-mobile/playlist.m3u8$LR•IPV4•3『线路3』 #EXTINF:-1 tvg-id="美亚C+" tvg-name="美亚C+" group-title="港澳台",美亚C+ -http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/01.m3u8$LR•IPV4•3『线路1』 +http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/03.m3u8$LR•IPV4•3『线路1』 #EXTINF:-1 tvg-id="美亚C+" tvg-name="美亚C+" group-title="港澳台",美亚C+ -http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/02.m3u8$LR•IPV4•3『线路2』 +http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/01.m3u8$LR•IPV4•3『线路2』 #EXTINF:-1 tvg-id="美亚C+" tvg-name="美亚C+" group-title="港澳台",美亚C+ -http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/03.m3u8$LR•IPV4•3『线路3』 +http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/02.m3u8$LR•IPV4•3『线路3』 #EXTINF:-1 tvg-id="数位电影" tvg-name="数位电影" group-title="港澳台",数位电影 p3p://167.114.175.6:55331/6223ae1b0007136f3e5c44280e3300fa$LR•IPV4 #EXTINF:-1 tvg-id="龙华偶像" tvg-name="龙华偶像" group-title="港澳台",龙华偶像 @@ -6426,55 +6426,55 @@ rtmp://f13h.mine.nu/sat/tv771$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="纬来日本" tvg-name="纬来日本" group-title="港澳台",纬来日本 p3p://167.114.175.6:55331/5fe1add80007bbbd788125c43bf36060$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -rtmp://f13h.mine.nu:1935/sat/tv721$LR•IPV4•25『线路1』 +https://epg.pw/stream/ab6df63b64d0cc44a1f4f029ed847a26fa54a7aebd455578fb05a63f02c22f4b.m3u8$LR•IPV4•25『线路1』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -http://211.72.65.236:8585/.m3u8$LR•IPV4•25『线路2』 +http://zb.xmzb.xyz/123.php?id=⚽马上oppppp一纬来体育$LR•IPV4•25『线路2』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -rtmp://f13h.mine.nu/sat/tv721$LR•IPV4•25『线路3』 +https://cdn.iptv8k.top/dl/jrys.php?id=292&time=20240926215313&ip=111.229.253.40$LR•IPV4•25『线路3』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -http://125.227.210.55:8155/VideoInput/play.ts$LR•IPV4•25『线路4』 +http://aktv_stream1.m16tv.cfd/stream/tuntun/null/AKTV.m3u8$LR•IPV4•25『线路4』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -https://stream1.freetv.fun/wei-lai-ti-yu-9.ctv$LR•IPV4•25『线路5』 +https://epg.pw/stream/8855a9936e37e608a0ec8a014cce1673dee9c5d68d560da376cc92e5edef2b25.m3u8$LR•IPV4•25『线路5』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -https://epg.pw/stream/ab6df63b64d0cc44a1f4f029ed847a26fa54a7aebd455578fb05a63f02c22f4b.m3u8$LR•IPV4•25『线路6』 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=1978&tk=e640d0a1bf70$LR•IPV4•25『线路6』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -http://zb.xmzb.xyz/123.php?id=⚽马上oppppp一纬来体育$LR•IPV4•25『线路7』 +https://hls-gateway.vpstv.net/streams/477026.m3u8$LR•IPV4•25『线路7』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -https://cdn.iptv8k.top/dl/jrys.php?id=292&time=20240926215313&ip=111.229.253.40$LR•IPV4•25『线路8』 +http://122.117.71.103:8562/http/61.222.53.250:8081/hls/67/809/ch28.m3u8$LR•IPV4•25『线路8』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -http://aktv_stream1.m16tv.cfd/stream/tuntun/null/AKTV.m3u8$LR•IPV4•25『线路9』 +https://epg.pw/stream/4f18dfe0593db5c686eb64ae8edaf2a9202d4d46bdc9bbde2cee27708e12ea01.m3u8$LR•IPV4•25『线路9』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -https://epg.pw/stream/8855a9936e37e608a0ec8a014cce1673dee9c5d68d560da376cc92e5edef2b25.m3u8$LR•IPV4•25『线路10』 +https://cdn.iptv8k.top/dl/jrys.php?id=291&time=20240926215313&ip=111.229.253.40$LR•IPV4•25『线路10』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=1978&tk=e640d0a1bf70$LR•IPV4•25『线路11』 +https://hls.iill.top/api/wlty/index.m3u8$LR•IPV4•25『线路11』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -https://hls-gateway.vpstv.net/streams/477026.m3u8$LR•IPV4•25『线路12』 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=2056&tk=e640d0a1bf70$LR•IPV4•25『线路12』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -http://122.117.71.103:8562/http/61.222.53.250:8081/hls/67/809/ch28.m3u8$LR•IPV4•25『线路13』 +http://aktv_stream1.m16tv.cfd/stream/aktv3/null-1/AKTV.m3u8$LR•IPV4•25『线路13』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -https://epg.pw/stream/4f18dfe0593db5c686eb64ae8edaf2a9202d4d46bdc9bbde2cee27708e12ea01.m3u8$LR•IPV4•25『线路14』 +https://stream1.freetv.fun/wei-lai-ti-yu-3.m3u8$LR•IPV4•25『线路14』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -https://cdn.iptv8k.top/dl/jrys.php?id=291&time=20240926215313&ip=111.229.253.40$LR•IPV4•25『线路15』 +http://148.135.34.95/mn.php?playurl=http://www.pelotas.org:8278/videolandsport/playlist.m3u8$LR•IPV4•25『线路15』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -https://hls.iill.top/api/wlty/index.m3u8$LR•IPV4•25『线路16』 +http://api3.52tb.xyz/info?id=376&token=20221127jxwhhemby$LR•IPV4•25『线路16』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=2056&tk=e640d0a1bf70$LR•IPV4•25『线路17』 +https://smart.pendy.dpdns.org/Smart.php?id=videolandsport$LR•IPV4•25『线路17』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -http://aktv_stream1.m16tv.cfd/stream/aktv3/null-1/AKTV.m3u8$LR•IPV4•25『线路18』 +https://cdn.iptv8k.top/dl/jrys.php?id=292&time=20240926215313&ip=111.229.253.40$LR•IPV4•25『线路18』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -https://stream1.freetv.fun/wei-lai-ti-yu-3.m3u8$LR•IPV4•25『线路19』 +http://api.mytv666.top/api/qwt.php?t=体育频道&id=纬来体育$LR•IPV4•25『线路19』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -http://148.135.34.95/mn.php?playurl=http://www.pelotas.org:8278/videolandsport/playlist.m3u8$LR•IPV4•25『线路20』 +http://aktv.top/AKTV/live/aktv3/null-1/AKTV.m3u8$LR•IPV4•25『线路20』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -http://api3.52tb.xyz/info?id=376&token=20221127jxwhhemby$LR•IPV4•25『线路21』 +rtmp://f13h.mine.nu:1935/sat/tv721$LR•IPV4•25『线路21』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -https://smart.pendy.dpdns.org/Smart.php?id=videolandsport$LR•IPV4•25『线路22』 +http://211.72.65.236:8585/.m3u8$LR•IPV4•25『线路22』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -https://cdn.iptv8k.top/dl/jrys.php?id=292&time=20240926215313&ip=111.229.253.40$LR•IPV4•25『线路23』 +rtmp://f13h.mine.nu/sat/tv721$LR•IPV4•25『线路23』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -http://api.mytv666.top/api/qwt.php?t=体育频道&id=纬来体育$LR•IPV4•25『线路24』 +http://125.227.210.55:8155/VideoInput/play.ts$LR•IPV4•25『线路24』 #EXTINF:-1 tvg-id="纬来体育" tvg-name="纬来体育" group-title="港澳台",纬来体育 -http://aktv.top/AKTV/live/aktv3/null-1/AKTV.m3u8$LR•IPV4•25『线路25』 +https://stream1.freetv.fun/wei-lai-ti-yu-9.ctv$LR•IPV4•25『线路25』 #EXTINF:-1 tvg-id="中视闽南" tvg-name="中视闽南" group-title="港澳台",中视闽南 rtmp://f13h.mine.nu/sat/tv091$LR•IPV4 #EXTINF:-1 tvg-id="中视新闻" tvg-name="中视新闻" group-title="港澳台",中视新闻 @@ -6692,17 +6692,17 @@ rtmp://f13h.mine.nu/sat/tv051$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="MoMo综合" tvg-name="MoMo综合" group-title="港澳台",MoMo综合 p3p://167.114.175.6:55331/621e17750005eaa02887cb6e61ea2a58$LR•IPV4 #EXTINF:-1 tvg-id="ELEVEN体育1" tvg-name="ELEVEN体育1" group-title="港澳台",ELEVEN体育1 -https://smart.pendy.dpdns.org/Smart.php?id=eltasport1_twn$LR•IPV4•3『线路1』 +https://stream1.freetv.fun/eltaai-er-da-ti-yu--1--wj-1.ctv$LR•IPV4•3『线路1』 #EXTINF:-1 tvg-id="ELEVEN体育1" tvg-name="ELEVEN体育1" group-title="港澳台",ELEVEN体育1 -rtmp://f13h.mine.nu/sat/tv731$LR•IPV4•3『线路2』 +https://smart.pendy.dpdns.org/Smart.php?id=eltasport1_twn$LR•IPV4•3『线路2』 #EXTINF:-1 tvg-id="ELEVEN体育1" tvg-name="ELEVEN体育1" group-title="港澳台",ELEVEN体育1 -https://stream1.freetv.fun/eltaai-er-da-ti-yu--1--wj-1.ctv$LR•IPV4•3『线路3』 +rtmp://f13h.mine.nu/sat/tv731$LR•IPV4•3『线路3』 #EXTINF:-1 tvg-id="ELEVEN体育2" tvg-name="ELEVEN体育2" group-title="港澳台",ELEVEN体育2 -https://smart.pendy.dpdns.org/Smart.php?id=eltasport2_twn$LR•IPV4•3『线路1』 +https://stream1.freetv.fun/eltaai-er-da-ti-yu--2--wj-1.ctv$LR•IPV4•3『线路1』 #EXTINF:-1 tvg-id="ELEVEN体育2" tvg-name="ELEVEN体育2" group-title="港澳台",ELEVEN体育2 -rtmp://f13h.mine.nu/sat/tv741$LR•IPV4•3『线路2』 +https://smart.pendy.dpdns.org/Smart.php?id=eltasport2_twn$LR•IPV4•3『线路2』 #EXTINF:-1 tvg-id="ELEVEN体育2" tvg-name="ELEVEN体育2" group-title="港澳台",ELEVEN体育2 -https://stream1.freetv.fun/eltaai-er-da-ti-yu--2--wj-1.ctv$LR•IPV4•3『线路3』 +rtmp://f13h.mine.nu/sat/tv741$LR•IPV4•3『线路3』 #EXTINF:-1 tvg-id="半岛新闻" tvg-name="半岛新闻" group-title="港澳台",半岛新闻 http://live-hls-web-aje.getaj.net/AJE/01.m3u8$LR•IPV4•4『线路1』 #EXTINF:-1 tvg-id="半岛新闻" tvg-name="半岛新闻" group-title="港澳台",半岛新闻 @@ -6772,13 +6772,13 @@ p3p://167.114.175.6:55331/65ad274400000b46bd92da681fce74f2$LR•IPV4•2『线 #EXTINF:-1 tvg-id="ROCK Action" tvg-name="ROCK Action" group-title="港澳台",ROCK Action http://nmk.ioapk.com:5050/4gtv-live138/index.m3u8$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="TVB Plus" tvg-name="TVB Plus" group-title="港澳台",TVB Plus -http://rihou.cc:555/tv/[Pd]Plus综合$LR•IPV4•4『线路1』 +http://r.jdshipin.com/ndGgS$LR•IPV4•4『线路1』 #EXTINF:-1 tvg-id="TVB Plus" tvg-name="TVB Plus" group-title="港澳台",TVB Plus -p3p://167.114.175.6:55331/6649bce20008d56453eeebfc022701f1$LR•IPV4•4『线路2』 +http://rihou.cc:555/tv/[Pd]Plus综合$LR•IPV4•4『线路2』 #EXTINF:-1 tvg-id="TVB Plus" tvg-name="TVB Plus" group-title="港澳台",TVB Plus -p3p://167.114.175.6:55331/653e4d3e000b344f0c91357e73163f82$LR•IPV4•4『线路3』 +p3p://167.114.175.6:55331/6649bce20008d56453eeebfc022701f1$LR•IPV4•4『线路3』 #EXTINF:-1 tvg-id="TVB Plus" tvg-name="TVB Plus" group-title="港澳台",TVB Plus -http://r.jdshipin.com/ndGgS$LR•IPV4•4『线路4』 +p3p://167.114.175.6:55331/653e4d3e000b344f0c91357e73163f82$LR•IPV4•4『线路4』 #EXTINF:-1 tvg-id="AXN" tvg-name="AXN" group-title="港澳台",AXN p3p://167.114.175.6:55331/66d23a53000d25d573c606e3274f26c5$LR•IPV4•24『线路1』 #EXTINF:-1 tvg-id="AXN" tvg-name="AXN" group-title="港澳台",AXN @@ -6830,9 +6830,9 @@ http://103.137.83.62:9090/play/21/index.m3u8$LR•IPV4•24『线路24』 #EXTINF:-1 tvg-id="娱乐新闻" tvg-name="娱乐新闻" group-title="港澳台",娱乐新闻 https://hls-gateway.vpstv.net/streams/708904.m3u8$LR•IPV4 #EXTINF:-1 tvg-id="澳门卫视" tvg-name="澳门卫视" group-title="港澳台",澳门卫视 -http://php.jdshipin.com:8880/TVOD/iptv.php?id=as$LR•IPV4•2『线路1』 +http://61.244.22.4/ch1/ch1.live/playlist.m3u8$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="澳门卫视" tvg-name="澳门卫视" group-title="港澳台",澳门卫视 -http://61.244.22.4/ch1/ch1.live/playlist.m3u8$LR•IPV4•2『线路2』 +http://php.jdshipin.com:8880/TVOD/iptv.php?id=as$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="Pet Club TV" tvg-name="Pet Club TV" group-title="港澳台",Pet Club TV https://cdn-apse1-prod.tsv2.amagi.tv/linear/amg01076-lightningintern-petclub-samsungnz/playlist.m3u8$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="Pet Club TV" tvg-name="Pet Club TV" group-title="港澳台",Pet Club TV @@ -7010,9 +7010,9 @@ https://lotus.stingray.com/manifest/ose-317ads-montreal/samsungtvplus/master.m3u #EXTINF:-1 tvg-id="HOY TV" tvg-name="HOY TV" group-title="港澳台",HOY TV p3p://167.114.175.6:55331/62184bc3000cd48f11e47b06202b7e18$LR•IPV4•3『线路1』 #EXTINF:-1 tvg-id="HOY TV" tvg-name="HOY TV" group-title="港澳台",HOY TV -https://hoytv-live-stream.hoy.tv/ch77/index.m3u8$LR•IPV4•3『线路2』 +http://php.jdshipin.com/TVOD/iptv.php?id=hoytv$LR•IPV4•3『线路2』 #EXTINF:-1 tvg-id="HOY TV" tvg-name="HOY TV" group-title="港澳台",HOY TV -http://php.jdshipin.com/TVOD/iptv.php?id=hoytv$LR•IPV4•3『线路3』 +https://hoytv-live-stream.hoy.tv/ch77/index.m3u8$LR•IPV4•3『线路3』 #EXTINF:-1 tvg-id="MOMOTV" tvg-name="MOMOTV" group-title="港澳台",MOMOTV rtmp://f13h.mine.nu/sat/tv761$LR•IPV4 #EXTINF:-1 tvg-id="大爱1" tvg-name="大爱1" group-title="港澳台",大爱1 @@ -7080,13 +7080,13 @@ https://d198ro05q94rc4.cloudfront.net/XITE_Rock_On.m3u8$LR•IPV4 #EXTINF:-1 tvg-id="FIGHT SPORTS" tvg-name="FIGHT SPORTS" group-title="港澳台",FIGHT SPORTS p3p://167.114.175.6:55331/65a4480e000eb9449aeb1d5a33663b73$LR•IPV4 #EXTINF:-1 tvg-id="NBA TV" tvg-name="NBA TV" group-title="港澳台",NBA TV -http://170.yfvodcdn.com:19980/live/nbaTV2/hls.m3u8$LR•IPV4•6『线路1』 +https://stream1.freetv.fun/nba-tv-7.m3u8$LR•IPV4•6『线路1』 #EXTINF:-1 tvg-id="NBA TV" tvg-name="NBA TV" group-title="港澳台",NBA TV -p3p://167.114.175.6:55331/65a587500007bc039fca3566638e69af$LR•IPV4•6『线路2』 +https://stream1.freetv.fun/nba-tv-5.m3u8$LR•IPV4•6『线路2』 #EXTINF:-1 tvg-id="NBA TV" tvg-name="NBA TV" group-title="港澳台",NBA TV -https://stream1.freetv.fun/nba-tv-7.m3u8$LR•IPV4•6『线路3』 +http://170.yfvodcdn.com:19980/live/nbaTV2/hls.m3u8$LR•IPV4•6『线路3』 #EXTINF:-1 tvg-id="NBA TV" tvg-name="NBA TV" group-title="港澳台",NBA TV -https://stream1.freetv.fun/nba-tv-5.m3u8$LR•IPV4•6『线路4』 +p3p://167.114.175.6:55331/65a587500007bc039fca3566638e69af$LR•IPV4•6『线路4』 #EXTINF:-1 tvg-id="NBA TV" tvg-name="NBA TV" group-title="港澳台",NBA TV https://amg00556-amg00556c3-firetv-us-6060.playouts.now.amagi.tv/playlist.m3u8$LR•IPV4•6『线路5』 #EXTINF:-1 tvg-id="NBA TV" tvg-name="NBA TV" group-title="港澳台",NBA TV @@ -7498,9 +7498,9 @@ https://cffda8ff.wurl.com/master/f36d25e7e52f1ba8d7e56eb859c636563214f541/U2Ftc3 #EXTINF:-1 tvg-id="Newsmax" tvg-name="Newsmax" group-title="港澳台",Newsmax https://nmx1ota.akamaized.net/hls/live/2107010/Live_1/3.m3u8$LR•IPV4•8『线路1』 #EXTINF:-1 tvg-id="Newsmax" tvg-name="Newsmax" group-title="港澳台",Newsmax -https://nmxlive.akamaized.net/hls/live/529965/Live_1/index.m3u8$LR•IPV4•8『线路2』 +http://nmxlive.akamaized.net/hls/live/529965/Live_1/index.m3u8$LR•IPV4•8『线路2』 #EXTINF:-1 tvg-id="Newsmax" tvg-name="Newsmax" group-title="港澳台",Newsmax -http://nmxlive.akamaized.net/hls/live/529965/Live_1/index.m3u8$LR•IPV4•8『线路3』 +https://nmxlive.akamaized.net/hls/live/529965/Live_1/index.m3u8$LR•IPV4•8『线路3』 #EXTINF:-1 tvg-id="Newsmax" tvg-name="Newsmax" group-title="港澳台",Newsmax https://2-fss-2.streamhoster.com/pl_120/206858-4404556-1/playlist.m3u8$LR•IPV4•8『线路4』 #EXTINF:-1 tvg-id="Newsmax" tvg-name="Newsmax" group-title="港澳台",Newsmax @@ -7644,13 +7644,13 @@ https://jmp2.uk/plu-64a3d96f060e830008af6745.m3u8$LR•IPV4•5『线路5』 #EXTINF:-1 tvg-id="香港国际财经" tvg-name="香港国际财经" group-title="港澳台",香港国际财经 p3p://167.114.175.6:55331/64838620000cd8ed32fb0d6a414411f7$LR•IPV4 #EXTINF:-1 tvg-id="Bloomberg" tvg-name="Bloomberg" group-title="港澳台",Bloomberg -https://bloomberg-bloombergtv-3-nl.samsung.wurl.tv/playlist.m3u8$LR•IPV4•16『线路1』 +https://epg.pw/stream/d2edf469b9079064a283f4b0811cbf6f2597ebbb3d08dcf77036a4b5a791b7cf.m3u8$LR•IPV4•16『线路1』 #EXTINF:-1 tvg-id="Bloomberg" tvg-name="Bloomberg" group-title="港澳台",Bloomberg -https://bloomberg-bloombergtv-5-eu.plex.wurl.tv/3ea2c48ba0034cc276591c94a5b439c0.m3u8$LR•IPV4•16『线路2』 +https://bloomberg-bloombergtv-3-nl.samsung.wurl.tv/playlist.m3u8$LR•IPV4•16『线路2』 #EXTINF:-1 tvg-id="Bloomberg" tvg-name="Bloomberg" group-title="港澳台",Bloomberg -https://liveprodusphoenixeast.akamaized.net/USPhx-HD/Channel-TX-USPhx-AWS-virginia-1/Source-USPhx-16k-1-s6lk2-BP-07-02-81ykIWnsMsg_live.m3u8$LR•IPV4•16『线路3』 +https://bloomberg-bloombergtv-5-eu.plex.wurl.tv/3ea2c48ba0034cc276591c94a5b439c0.m3u8$LR•IPV4•16『线路3』 #EXTINF:-1 tvg-id="Bloomberg" tvg-name="Bloomberg" group-title="港澳台",Bloomberg -https://epg.pw/stream/d2edf469b9079064a283f4b0811cbf6f2597ebbb3d08dcf77036a4b5a791b7cf.m3u8$LR•IPV4•16『线路4』 +https://liveprodusphoenixeast.akamaized.net/USPhx-HD/Channel-TX-USPhx-AWS-virginia-1/Source-USPhx-16k-1-s6lk2-BP-07-02-81ykIWnsMsg_live.m3u8$LR•IPV4•16『线路4』 #EXTINF:-1 tvg-id="Bloomberg" tvg-name="Bloomberg" group-title="港澳台",Bloomberg https://ciner.daioncdn.net/bloomberght/bloomberght.m3u8$LR•IPV4•16『线路5』 #EXTINF:-1 tvg-id="Bloomberg" tvg-name="Bloomberg" group-title="港澳台",Bloomberg diff --git a/tvbox/lib/iptv.txt b/tvbox/lib/iptv.txt index 78661800..052bea00 100755 --- a/tvbox/lib/iptv.txt +++ b/tvbox/lib/iptv.txt @@ -32,8 +32,8 @@ 北京卫视4K,http://101.35.240.114:88/live.php?id=北京卫视$LR•IPV4•5『线路4』 北京卫视4K,http://106.53.99.30/tv/api.php?id=bjws4k$LR•IPV4•5『线路5』 CCTV4K,http://101.43.145.141:12002/gaoma/cctv4k.m3u8$LR•IPV4•6『线路1』 -CCTV4K,https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4k_mbd.m3u8?auth_key=1784322000-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-aa68fb06c12f53b71a4d170807f32df5&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•6『线路2』 -CCTV4K,https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4k_mbd.m3u8?auth_key=1784325600-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-da48bbac79b9621fa8f084ece04c2c91&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•6『线路3』 +CCTV4K,https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4k_mbd.m3u8?auth_key=1784329200-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-81ad4aefc95ce528b3da1112f0bc9ff2&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•6『线路2』 +CCTV4K,https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4k_mbd.m3u8?auth_key=1784322000-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-aa68fb06c12f53b71a4d170807f32df5&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•6『线路3』 CCTV4K,http://198.204.240.250:82/live/cctv4k.m3u8$LR•IPV4•6『线路4』 CCTV4K,http://fn.tmde.top:35455/nptv/cctv4k.m3u8$LR•IPV4•6『线路5』 CCTV4K,http://xc.mfykeke.top:35455/nptv/cctv4k.m3u8$LR•IPV4•6『线路6』 @@ -85,9 +85,9 @@ CCTV4,http://38.75.136.137:98/gslb/dsdqbv/cctv4hd.m3u8?auth=test20251009$LR•IP CCTV4,http://112.46.105.20:8009/hls/4/index.m3u8$LR•IPV4•16『线路7』 CCTV4,http://74.91.26.218:82/live/cctv4hd.m3u8$LR•IPV4•16『线路8』 CCTV4,p3p://167.114.175.6:55331/61244d9c0006885d64b1b7591f6c12a0$LR•IPV4•16『线路9』 -CCTV4,https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784322000-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-25fe408e6545f49f3d4eb7f92e97c764&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•16『线路10』 -CCTV4,https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784325600-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-b583b000601c3690c0e4bae75e1261f0&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•16『线路11』 -CCTV4,https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784271600-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-6aec44040ec72def77e22587fc404005&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•16『线路12』 +CCTV4,https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784329200-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-2245971645866ed95972e22af68cc8d1&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•16『线路10』 +CCTV4,https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784271600-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-6aec44040ec72def77e22587fc404005&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•16『线路11』 +CCTV4,https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784322000-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-25fe408e6545f49f3d4eb7f92e97c764&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•16『线路12』 CCTV4,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226335/1.m3u8?$LR•IPV6•16『线路13』 CCTV4,http://63.141.230.178:82/gslb/zbdq5.m3u8?id=cctv4hd$LR•IPV4•16『线路14』 CCTV4,http://207.56.13.146:81/cdnlive/cctv4.m3u8$LR•IPV4•16『线路15』 @@ -96,15 +96,15 @@ CCTV5,http://222.223.41.27:8888/hls/5/index.m3u8$LR•IPV4•14『线路1』 CCTV5,http://183.223.157.33:9901/tsfile/live/0005_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•14『线路2』 CCTV5,http://221.226.51.220:50081/newlive/live/hls/5/live.m3u8$LR•IPV4•14『线路3』 CCTV5,http://112.27.235.94:8000/hls/5/index.m3u8$LR•IPV4•14『线路4』 -CCTV5,http://38.75.136.137:98/gslb/dsdqbv/cctv5hd.m3u8?auth=test20251009$LR•IPV4•14『线路5』 -CCTV5,http://112.46.105.20:8009/hls/503/index.m3u8$LR•IPV4•14『线路6』 -CCTV5,http://153.0.171.163:9901/tsfile/live/0005_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•14『线路7』 -CCTV5,http://101.66.199.247:9901/tsfile/live/0005_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•14『线路8』 +CCTV5,http://101.66.199.247:9901/tsfile/live/0005_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•14『线路5』 +CCTV5,http://38.75.136.137:98/gslb/dsdqbv/cctv5hd.m3u8?auth=test20251009$LR•IPV4•14『线路6』 +CCTV5,http://112.46.105.20:8009/hls/503/index.m3u8$LR•IPV4•14『线路7』 +CCTV5,http://153.0.171.163:9901/tsfile/live/0005_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•14『线路8』 CCTV5,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226469/1.m3u8?$LR•IPV6•14『线路9』 CCTV5,http://183.129.255.66:8480/hls/6/index.m3u8$LR•IPV4•14『线路10』 CCTV5,http://112.27.235.94:8000/hls/6/index.m3u8$LR•IPV4•14『线路11』 -CCTV5,http://38.75.136.137:98/gslb/dsdqbv/cctv5p.m3u8?auth=test20251009$LR•IPV4•14『线路12』 -CCTV5,http://112.123.243.37:50085/tsfile/live/0006_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•14『线路13』 +CCTV5,http://112.123.243.37:50085/tsfile/live/0006_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•14『线路12』 +CCTV5,http://38.75.136.137:98/gslb/dsdqbv/cctv5p.m3u8?auth=test20251009$LR•IPV4•14『线路13』 CCTV5,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226894/1.m3u8?$LR•IPV6•14『线路14』 CCTV6,http://222.223.41.27:8888/hls/6/index.m3u8$LR•IPV4•13『线路1』 CCTV6,http://183.129.255.66:8480/hls/7/index.m3u8$LR•IPV4•13『线路2』 @@ -155,8 +155,8 @@ CCTV9,http://38.75.136.137:98/gslb/dsdqbv/cctv9hd.m3u8?auth=test20251009$LR•IP CCTV9,http://74.91.26.218:82/live/cctv9hd.m3u8$LR•IPV4•12『线路5』 CCTV9,http://112.46.105.20:8009/hls/509/index.m3u8$LR•IPV4•12『线路6』 CCTV9,http://153.0.171.163:9901/tsfile/live/1008_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•12『线路7』 -CCTV9,https://v4-e6b1c5baf4e240fe63adbf68dda23435.livehwc4.com/play.kankanlive.com/live/1698423397390920.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=f3fb3ddaca05941087114cf6481e1c23$LR•IPV4•12『线路8』 -CCTV9,https://v4-702cae17a28d6e4f0c0002bba021d934.livehwc4.com/play.kankanlive.com/live/1698423397390920.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=2b87983b301b48537526846889074801$LR•IPV4•12『线路9』 +CCTV9,https://v4-e6b1c5baf4e240fe63adbf68dda23435.livehwc4.com/play.kankanlive.com/live/1698423397390920.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=8a921813ee3b23c82763145c9f291a3b$LR•IPV4•12『线路8』 +CCTV9,https://v4-e6b1c5baf4e240fe63adbf68dda23435.livehwc4.com/play.kankanlive.com/live/1698423397390920.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=f3fb3ddaca05941087114cf6481e1c23$LR•IPV4•12『线路9』 CCTV9,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226944/1.m3u8?$LR•IPV6•12『线路10』 CCTV9,http://222.223.41.27:8888/hls/9/index.m3u8$LR•IPV4•12『线路11』 CCTV9,https://xykt-fix.github.io/Y77.m3u8$LR•IPV4•12『线路12』 @@ -168,17 +168,17 @@ CCTV10,http://112.27.235.94:8000/hls/11/index.m3u8$LR•IPV4•11『线路5』 CCTV10,http://38.75.136.137:98/gslb/dsdqbv/cctv10hd.m3u8?auth=test20251009$LR•IPV4•11『线路6』 CCTV10,http://112.46.105.20:8009/hls/506/index.m3u8$LR•IPV4•11『线路7』 CCTV10,http://74.91.26.218:82/live/cctv10hd.m3u8$LR•IPV4•11『线路8』 -CCTV10,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226937/1.m3u8?$LR•IPV6•11『线路9』 -CCTV10,https://hwapi.yntv.net/ew265l/z1z6s5.m3u8$LR•IPV4•11『线路10』 -CCTV10,https://jsv-live-play.sfccn.com/live/jsv_3920_fhd.m3u8$LR•IPV4•11『线路11』 +CCTV10,https://jsv-live-play.sfccn.com/live/jsv_3920_fhd.m3u8$LR•IPV4•11『线路9』 +CCTV10,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226937/1.m3u8?$LR•IPV6•11『线路10』 +CCTV10,https://hwapi.yntv.net/ew265l/z1z6s5.m3u8$LR•IPV4•11『线路11』 CCTV11,http://183.129.255.66:8480/hls/12/index.m3u8$LR•IPV4•8『线路1』 CCTV11,http://cd-live-stream.news.cctvplus.com/live/smil:CHANNEL1.smil/chunklist_w744036192_b1000000.m3u8$LR•IPV4•8『线路2』 CCTV11,http://153.0.171.163:9901/tsfile/live/1010_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•8『线路3』 CCTV11,http://112.27.235.94:8000/hls/12/index.m3u8$LR•IPV4•8『线路4』 CCTV11,http://38.75.136.137:98/gslb/dsdqbv/cctv11hd.m3u8?auth=test20251009$LR•IPV4•8『线路5』 CCTV11,http://74.91.26.218:82/live/cctv11hd.m3u8$LR•IPV4•8『线路6』 -CCTV11,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226334/1.m3u8?$LR•IPV6•8『线路7』 -CCTV11,http://183.196.25.171:808/hls/11/index.m3u8$LR•IPV4•8『线路8』 +CCTV11,http://183.196.25.171:808/hls/11/index.m3u8$LR•IPV4•8『线路7』 +CCTV11,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226334/1.m3u8?$LR•IPV6•8『线路8』 CCTV12,http://112.123.243.37:50085/tsfile/live/0013_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•9『线路1』 CCTV12,http://183.223.157.33:9901/tsfile/live/0012_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•9『线路2』 CCTV12,http://183.129.255.66:8480/hls/13/index.m3u8$LR•IPV4•9『线路3』 @@ -208,8 +208,8 @@ CCTV14,http://222.223.41.27:8888/hls/14/index.m3u8$LR•IPV4•9『线路2』 CCTV14,http://183.129.255.66:8480/hls/15/index.m3u8$LR•IPV4•9『线路3』 CCTV14,http://153.0.171.163:9901/tsfile/live/1013_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•9『线路4』 CCTV14,http://112.27.235.94:8000/hls/15/index.m3u8$LR•IPV4•9『线路5』 -CCTV14,http://38.75.136.137:98/gslb/dsdqbv/cctv14hd.m3u8?auth=test20251009$LR•IPV4•9『线路6』 -CCTV14,http://112.123.243.37:50085/tsfile/live/0015_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•9『线路7』 +CCTV14,http://112.123.243.37:50085/tsfile/live/0015_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•9『线路6』 +CCTV14,http://38.75.136.137:98/gslb/dsdqbv/cctv14hd.m3u8?auth=test20251009$LR•IPV4•9『线路7』 CCTV14,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226947/1.m3u8?$LR•IPV6•9『线路8』 CCTV14,https://event.pull.hebtv.com/jishi/cp2.m3u8$LR•IPV4•9『线路9』 CCTV15,http://222.223.41.27:8888/hls/15/index.m3u8$LR•IPV4•11『线路1』 @@ -233,9 +233,9 @@ CCTV17,http://59.39.89.130:60901/tsfile/live/0017_1.m3u8?key=txiptv&playlive=1&a CCTV17,http://123.130.84.106:8154/tsfile/live/0019_1.m3u8$LR•IPV4•9『线路4』 CCTV17,http://38.75.136.137:98/gslb/dsdqbv/cctv17hd.m3u8?auth=test20251009$LR•IPV4•9『线路5』 CCTV17,http://74.91.26.218:82/live/cctv17hd.m3u8$LR•IPV4•9『线路6』 -CCTV17,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226318/1.m3u8?$LR•IPV6•9『线路7』 -CCTV17,http://38.75.136.137:98/gslb/dsdqpub/cctv17hd.m3u8?auth=testpub$LR•IPV4•9『线路8』 -CCTV17,http://183.196.25.171:808/hls/93/index.m3u8$LR•IPV4•9『线路9』 +CCTV17,http://183.196.25.171:808/hls/93/index.m3u8$LR•IPV4•9『线路7』 +CCTV17,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226318/1.m3u8?$LR•IPV6•9『线路8』 +CCTV17,http://38.75.136.137:98/gslb/dsdqpub/cctv17hd.m3u8?auth=testpub$LR•IPV4•9『线路9』 CCTV第一剧场,http://38.75.136.137:98/gslb/dsdqpub/dyjc.m3u8?auth=testpub$LR•IPV4 CCTV怀旧剧场,http://38.75.136.137:98/gslb/dsdqpub/hjjc.m3u8?auth=testpub$LR•IPV4 CCTV风云剧场,http://38.75.136.137:98/gslb/dsdqpub/fyjc.m3u8?auth=testpub$LR•IPV4 @@ -287,12 +287,12 @@ CGTN阿语,https://0472.org/hls/cgtna.m3u8$LR•IPV4 直播中国,https://gcalic.v.myalicdn.com/gc/wgw05_1/index.m3u8$LR•IPV4•2『线路2』 卫视,#genre# -重温经典,http://php.jdshipin.com/TVOD/iptv.php?id=cwjd$LR•IPV4•6『线路1』 -重温经典,http://ali.hlspull.yximgs.com/live/awei_cwjd.flv$LR•IPV4•6『线路2』 -重温经典,http://home.kuaidi521.com:35455/bptv/10000100000000050000000003887494.m3u8$LR•IPV4•6『线路3』 -重温经典,http://cdn3.132.us.kg/live/cwjd/stream.m3u8$LR•IPV4•6『线路4』 -重温经典,p3p://167.114.175.6:55331/65c5064800047df41ad1a47449e93b8b$LR•IPV4•6『线路5』 -重温经典,http://112.27.235.94:8000/hls/50/index.m3u8$LR•IPV4•6『线路6』 +重温经典,http://112.27.235.94:8000/hls/50/index.m3u8$LR•IPV4•6『线路1』 +重温经典,http://php.jdshipin.com/TVOD/iptv.php?id=cwjd$LR•IPV4•6『线路2』 +重温经典,http://ali.hlspull.yximgs.com/live/awei_cwjd.flv$LR•IPV4•6『线路3』 +重温经典,http://home.kuaidi521.com:35455/bptv/10000100000000050000000003887494.m3u8$LR•IPV4•6『线路4』 +重温经典,http://cdn3.132.us.kg/live/cwjd/stream.m3u8$LR•IPV4•6『线路5』 +重温经典,p3p://167.114.175.6:55331/65c5064800047df41ad1a47449e93b8b$LR•IPV4•6『线路6』 香港卫视,http://webcast.hkstv.tv/livestream/mutfysrq/playlist.m3u8$LR•IPV4•2『线路1』 香港卫视,https://hkstv.tv/api/m3u8-proxy?url=http%3A%2F%2Fwebcast.hkstv.tv%2Flivestream%2Fmutfysrq%2Fplaylist.m3u8$LR•IPV4•2『线路2』 星空卫视,http://114.105.187.77:9901/tsfile/live/0117_1.m3u8$LR•IPV4•7『线路1』 @@ -302,13 +302,13 @@ CGTN阿语,https://0472.org/hls/cgtna.m3u8$LR•IPV4 星空卫视,http://wouu.net:9977/udp/239.93.0.156:2193$LR•IPV4•7『线路5』 星空卫视,http://171.213.140.54:8123/udp/239.93.1.10:2193$LR•IPV4•7『线路6』 星空卫视,https://stream1.freetv.fun/xing-kong-wei-shi-4.ctv$LR•IPV4•7『线路7』 -湖南卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226509/1.m3u8?zoneoffset=480&servicetype=1&icpid=&limitflux=-1&limitdur=-1&tenantId=8601&accountinfo=%7E%7EV2.0%7EIGb_ib7rnBX9_sANRKq9sg%7EpK8OKM5JoJWWbLRyLfPcUMkwWZ90MzSI9S9PDltJsYzd0ZGcS3Tkh7syciNKJa-w60mDOdwtDyoNwCx9aRgzHNH9AUREV_qvNJtXHRPzYw0%7EExtInfo9bj61dxzlMXrsixrqcFYPg%3D%3D%3A20221022013542%2C915973%2C119.123.71.209%2C20221022013542%2C10000100000000050000000003873458%2C915973%2C-1%2C0%2C1%2C%2C%2C2%2C%2C%2C%2C2%2C%2C10000100000000060000000007253514_0%2CEND&GuardEncType=2$LR•IPV6•16『线路1』 -湖南卫视,http://74.91.26.218:82/live/hnwshd.m3u8$LR•IPV4•16『线路2』 -湖南卫视,http://204.12.221.218:8181/3m1080p/hnws.m3u8$LR•IPV4•16『线路3』 -湖南卫视,http://173.208.212.130:8181/720p/hnws.m3u8$LR•IPV4•16『线路4』 -湖南卫视,http://153.0.171.163:9901/tsfile/live/0128_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•16『线路5』 -湖南卫视,http://112.27.235.94:8000/hls/31/index.m3u8$LR•IPV4•16『线路6』 -湖南卫视,http://120.196.232.43:8088/rrs03.hw.gmcc.net/PLTV/651/224/3221226698/1.m3u8$LR•IPV4•16『线路7』 +湖南卫视,http://120.196.232.43:8088/rrs03.hw.gmcc.net/PLTV/651/224/3221226698/1.m3u8$LR•IPV4•16『线路1』 +湖南卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226509/1.m3u8?zoneoffset=480&servicetype=1&icpid=&limitflux=-1&limitdur=-1&tenantId=8601&accountinfo=%7E%7EV2.0%7EIGb_ib7rnBX9_sANRKq9sg%7EpK8OKM5JoJWWbLRyLfPcUMkwWZ90MzSI9S9PDltJsYzd0ZGcS3Tkh7syciNKJa-w60mDOdwtDyoNwCx9aRgzHNH9AUREV_qvNJtXHRPzYw0%7EExtInfo9bj61dxzlMXrsixrqcFYPg%3D%3D%3A20221022013542%2C915973%2C119.123.71.209%2C20221022013542%2C10000100000000050000000003873458%2C915973%2C-1%2C0%2C1%2C%2C%2C2%2C%2C%2C%2C2%2C%2C10000100000000060000000007253514_0%2CEND&GuardEncType=2$LR•IPV6•16『线路2』 +湖南卫视,http://74.91.26.218:82/live/hnwshd.m3u8$LR•IPV4•16『线路3』 +湖南卫视,http://204.12.221.218:8181/3m1080p/hnws.m3u8$LR•IPV4•16『线路4』 +湖南卫视,http://173.208.212.130:8181/720p/hnws.m3u8$LR•IPV4•16『线路5』 +湖南卫视,http://153.0.171.163:9901/tsfile/live/0128_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•16『线路6』 +湖南卫视,http://112.27.235.94:8000/hls/31/index.m3u8$LR•IPV4•16『线路7』 湖南卫视,http://38.75.136.137:98/gslb/dsdqpub/hnwshd.m3u8?auth=testpub$LR•IPV4•16『线路8』 湖南卫视,https://hlsbkmgsplive.miguvideo.com/wd-hunanhd-2500/01.m3u8?&HlsSubType=&encrypt=$LR•IPV4•16『线路9』 湖南卫视,https://hlsbkmgsplive.miguvideo.com/wd-hunanhd-1200/01.m3u8?&HlsSubType=&encrypt=$LR•IPV4•16『线路10』 @@ -318,14 +318,14 @@ CGTN阿语,https://0472.org/hls/cgtna.m3u8$LR•IPV4 湖南卫视,https://iptv.catvod.com/catvod.php?id=hunws$LR•IPV4•16『线路14』 湖南卫视,https://httop.top/ysp-湖南卫视$LR•IPV4•16『线路15』 湖南卫视,http://iptv.huuc.edu.cn/hls/hunanhd.m3u8$LR•IPV4•16『线路16』 -浙江卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226899/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ETYfTgTra_pUx2cPrgZ_BDw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•17『线路1』 -浙江卫视,http://112.123.243.37:50085/tsfile/live/0019_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•17『线路2』 -浙江卫视,http://ali-xwl.cztv.com/live/channel011080Plxw.m3u8$LR•IPV4•17『线路3』 -浙江卫视,http://204.12.221.218:8181/3m1080p/zjws.m3u8$LR•IPV4•17『线路4』 -浙江卫视,http://173.208.212.130:8181/720p/zjws.m3u8$LR•IPV4•17『线路5』 -浙江卫视,http://ali-xwl.cztv.com/live/channel01720Plxw.m3u8$LR•IPV4•17『线路6』 -浙江卫视,http://112.27.235.94:8000/hls/29/index.m3u8$LR•IPV4•17『线路7』 -浙江卫视,http://zwebl02.cztv.com/live/channel01720Pnew.m3u8?auth_key=1784123883-f178167128c55cd66b7eca004ccca015-0-69f388bdaa594feb900510d687566182$LR•IPV4•17『线路8』 +浙江卫视,http://zwebl02.cztv.com/live/channel01720Pnew.m3u8?auth_key=1784123883-f178167128c55cd66b7eca004ccca015-0-69f388bdaa594feb900510d687566182$LR•IPV4•17『线路1』 +浙江卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226899/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ETYfTgTra_pUx2cPrgZ_BDw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•17『线路2』 +浙江卫视,http://112.123.243.37:50085/tsfile/live/0019_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•17『线路3』 +浙江卫视,http://ali-xwl.cztv.com/live/channel011080Plxw.m3u8$LR•IPV4•17『线路4』 +浙江卫视,http://204.12.221.218:8181/3m1080p/zjws.m3u8$LR•IPV4•17『线路5』 +浙江卫视,http://173.208.212.130:8181/720p/zjws.m3u8$LR•IPV4•17『线路6』 +浙江卫视,http://ali-xwl.cztv.com/live/channel01720Plxw.m3u8$LR•IPV4•17『线路7』 +浙江卫视,http://112.27.235.94:8000/hls/29/index.m3u8$LR•IPV4•17『线路8』 浙江卫视,http://38.75.136.137:98/gslb/dsdqpub/zjwshd.m3u8?auth=testpub$LR•IPV4•17『线路9』 浙江卫视,http://23.237.228.134/live6/zhejiang.m3u8$LR•IPV4•17『线路10』 浙江卫视,http://gfr.x3322.net:9901/tsfile/live/1087_1.m3u8$LR•IPV4•17『线路11』 @@ -380,23 +380,24 @@ CGTN阿语,https://0472.org/hls/cgtna.m3u8$LR•IPV4 江苏卫视,http://iptv.huuc.edu.cn/hls/jshd.m3u8$LR•IPV4•15『线路13』 江苏卫视,http://mg.hmysapp.cn:177/ckmg/zb.php?id=jsws$LR•IPV4•15『线路14』 江苏卫视,http://39.134.24.166/dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226200/index.m3u8$LR•IPV4•15『线路15』 -安徽卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226943/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E0QmKQ_slRCwvVVUUfxPVbw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•10『线路1』 -安徽卫视,http://101.66.194.63:9901/tsfile/live/0130_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•10『线路2』 -安徽卫视,http://112.27.235.94:8000/hls/26/index.m3u8$LR•IPV4•10『线路3』 -安徽卫视,http://23.237.228.134/live8/anhui.m3u8$LR•IPV4•10『线路4』 -安徽卫视,http://gfr.x3322.net:9901/tsfile/live/1092_1.m3u8$LR•IPV4•10『线路5』 -安徽卫视,http://api.kkitv.itv888.cn:8080/hls/m8hvytneunk/index.m3u8$LR•IPV4•10『线路6』 -安徽卫视,https://iptv.catvod.com/catvod.php?id=ahws$LR•IPV4•10『线路7』 -安徽卫视,https://httop.top/ysp-安徽卫视$LR•IPV4•10『线路8』 -安徽卫视,http://iptv.huuc.edu.cn/hls/ahhd.m3u8$LR•IPV4•10『线路9』 -安徽卫视,http://153.0.171.163:9901/tsfile/live/0130_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•10『线路10』 -重庆卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226963/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EjTXsJprEx2nE38tdvu5lhA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•16『线路1』 -重庆卫视,http://192.151.150.154/live/cqwshd.m3u8$LR•IPV4•16『线路2』 -重庆卫视,http://107.150.60.122/live/cqwshd.m3u8$LR•IPV4•16『线路3』 -重庆卫视,http://112.123.243.37:50085/tsfile/live/0131_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•16『线路4』 -重庆卫视,http://120.198.95.220:9901/tsfile/live/1066_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•16『线路5』 -重庆卫视,http://112.27.235.94:8000/hls/36/index.m3u8$LR•IPV4•16『线路6』 -重庆卫视,http://live2.plus.jinhua.com.cn/dsnc/playlist.m3u8$LR•IPV4•16『线路7』 +安徽卫视,https://piccpndks.v.kcdnvip.com/audio/anhui_2/index.m3u8$LR•IPV4•11『线路1』 +安徽卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226943/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E0QmKQ_slRCwvVVUUfxPVbw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•11『线路2』 +安徽卫视,http://101.66.194.63:9901/tsfile/live/0130_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•11『线路3』 +安徽卫视,http://112.27.235.94:8000/hls/26/index.m3u8$LR•IPV4•11『线路4』 +安徽卫视,http://23.237.228.134/live8/anhui.m3u8$LR•IPV4•11『线路5』 +安徽卫视,http://gfr.x3322.net:9901/tsfile/live/1092_1.m3u8$LR•IPV4•11『线路6』 +安徽卫视,http://api.kkitv.itv888.cn:8080/hls/m8hvytneunk/index.m3u8$LR•IPV4•11『线路7』 +安徽卫视,https://iptv.catvod.com/catvod.php?id=ahws$LR•IPV4•11『线路8』 +安徽卫视,https://httop.top/ysp-安徽卫视$LR•IPV4•11『线路9』 +安徽卫视,http://iptv.huuc.edu.cn/hls/ahhd.m3u8$LR•IPV4•11『线路10』 +安徽卫视,http://153.0.171.163:9901/tsfile/live/0130_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•11『线路11』 +重庆卫视,http://live2.plus.jinhua.com.cn/dsnc/playlist.m3u8$LR•IPV4•16『线路1』 +重庆卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226963/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EjTXsJprEx2nE38tdvu5lhA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•16『线路2』 +重庆卫视,http://192.151.150.154/live/cqwshd.m3u8$LR•IPV4•16『线路3』 +重庆卫视,http://107.150.60.122/live/cqwshd.m3u8$LR•IPV4•16『线路4』 +重庆卫视,http://112.123.243.37:50085/tsfile/live/0131_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•16『线路5』 +重庆卫视,http://120.198.95.220:9901/tsfile/live/1066_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•16『线路6』 +重庆卫视,http://112.27.235.94:8000/hls/36/index.m3u8$LR•IPV4•16『线路7』 重庆卫视,http://23.237.228.134/live6/chongqing.m3u8$LR•IPV4•16『线路8』 重庆卫视,http://43.251.226.89:8080/play/55.m3u8$LR•IPV4•16『线路9』 重庆卫视,http://gfr.x3322.net:9901/tsfile/live/1093_1.m3u8$LR•IPV4•16『线路10』 @@ -439,24 +440,23 @@ CGTN阿语,https://0472.org/hls/cgtna.m3u8$LR•IPV4 东南卫视,http://iptv.huuc.edu.cn/hls/dnhd.m3u8$LR•IPV4•18『线路16』 东南卫视,http://153.0.171.163:9901/tsfile/live/0137_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•18『线路17』 东南卫视,http://118.81.195.79:9003/hls/24/index.m3u8$LR•IPV4•18『线路18』 -深圳卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226959/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EGrVNEZREjuNVKiTJo2mtwg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•18『线路1』 -深圳卫视,http://120.198.95.220:9901/tsfile/live/1048_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•18『线路2』 -深圳卫视,http://120.198.95.220:9901/tsfile/live/1048_1.m3u8?key=txiptv$LR•IPV4•18『线路3』 -深圳卫视,http://173.208.212.130:8181/720p/szws.m3u8$LR•IPV4•18『线路4』 -深圳卫视,http://192.151.150.154/live/szwshd.m3u8$LR•IPV4•18『线路5』 -深圳卫视,http://124.228.160.210:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•18『线路6』 -深圳卫视,http://36.136.38.87:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•18『线路7』 -深圳卫视,http://112.27.235.94:8000/hls/33/index.m3u8$LR•IPV4•18『线路8』 -深圳卫视,https://sztv-hls.sztv.com.cn/1SIQj6s/500/q7rdSsQ.m3u8?sign=71764b3a0bcc96b03dea9693d605e020&t=6a579f21$LR•IPV4•18『线路9』 -深圳卫视,http://38.75.136.137:98/gslb/dsdqpub/szwshd.m3u8?auth=testpub$LR•IPV4•18『线路10』 -深圳卫视,http://23.237.228.134/live6/shenzhen.m3u8$LR•IPV4•18『线路11』 -深圳卫视,http://gfr.x3322.net:9901/tsfile/live/1095_1.m3u8$LR•IPV4•18『线路12』 -深圳卫视,http://api.kkitv.itv888.cn:8080/hls/iftsd32ykm/index.m3u8$LR•IPV4•18『线路13』 -深圳卫视,https://iptv.catvod.com/catvod.php?id=szws$LR•IPV4•18『线路14』 -深圳卫视,https://httop.top/ysp-深圳卫视$LR•IPV4•18『线路15』 -深圳卫视,http://iptv.huuc.edu.cn/hls/szhd.m3u8$LR•IPV4•18『线路16』 -深圳卫视,http://153.0.171.163:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•18『线路17』 -深圳卫视,http://38.64.72.148:80/hls/modn/list/4007/playlist.m3u8$LR•IPV4•18『线路18』 +深圳卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226959/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EGrVNEZREjuNVKiTJo2mtwg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•17『线路1』 +深圳卫视,http://120.198.95.220:9901/tsfile/live/1048_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•17『线路2』 +深圳卫视,http://120.198.95.220:9901/tsfile/live/1048_1.m3u8?key=txiptv$LR•IPV4•17『线路3』 +深圳卫视,http://173.208.212.130:8181/720p/szws.m3u8$LR•IPV4•17『线路4』 +深圳卫视,http://192.151.150.154/live/szwshd.m3u8$LR•IPV4•17『线路5』 +深圳卫视,http://124.228.160.210:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•17『线路6』 +深圳卫视,http://36.136.38.87:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•17『线路7』 +深圳卫视,http://112.27.235.94:8000/hls/33/index.m3u8$LR•IPV4•17『线路8』 +深圳卫视,http://38.75.136.137:98/gslb/dsdqpub/szwshd.m3u8?auth=testpub$LR•IPV4•17『线路9』 +深圳卫视,http://23.237.228.134/live6/shenzhen.m3u8$LR•IPV4•17『线路10』 +深圳卫视,http://gfr.x3322.net:9901/tsfile/live/1095_1.m3u8$LR•IPV4•17『线路11』 +深圳卫视,http://api.kkitv.itv888.cn:8080/hls/iftsd32ykm/index.m3u8$LR•IPV4•17『线路12』 +深圳卫视,https://iptv.catvod.com/catvod.php?id=szws$LR•IPV4•17『线路13』 +深圳卫视,https://httop.top/ysp-深圳卫视$LR•IPV4•17『线路14』 +深圳卫视,http://iptv.huuc.edu.cn/hls/szhd.m3u8$LR•IPV4•17『线路15』 +深圳卫视,http://153.0.171.163:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•17『线路16』 +深圳卫视,http://38.64.72.148:80/hls/modn/list/4007/playlist.m3u8$LR•IPV4•17『线路17』 广东卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226961/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E2MGyx659D_aaDPP0qt3NgA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•12『线路1』 广东卫视,http://112.27.235.94:8000/hls/30/index.m3u8$LR•IPV4•12『线路2』 广东卫视,http://38.75.136.137:98/gslb/dsdqpub/gdwshd.m3u8?auth=testpub$LR•IPV4•12『线路3』 @@ -510,27 +510,26 @@ CGTN阿语,https://0472.org/hls/cgtna.m3u8$LR•IPV4 贵州卫视,http://153.0.171.163:9901/tsfile/live/0120_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•16『线路14』 贵州卫视,http://183.207.248.71/gitv/live1/G_GUIZHOU/G_GUIZHOU$LR•IPV4•16『线路15』 贵州卫视,http://39.134.115.163:8080/PLTV/88888910/224/3221225728/index.m3u8$LR•IPV4•16『线路16』 -河北卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227014/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ErSGjhI3DMaaAASPrbQJYTg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•14『线路1』 -河北卫视,http://101.66.194.63:9901/tsfile/live/0117_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•14『线路2』 -河北卫视,http://101.66.199.247:9901/tsfile/live/0117_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•14『线路3』 -河北卫视,http://204.12.221.218:8181/3m1080p/hews.m3u8$LR•IPV4•14『线路4』 -河北卫视,http://event.pull.hebtv.com/jishi/weishi_tingyun.m3u8$LR•IPV4•14『线路5』 -河北卫视,http://120.76.248.139/live/bfgd/4200000108.m3u8$LR•IPV4•14『线路6』 -河北卫视,https://tv.pull.hebtv.com/jishi/nongminpindao.m3u8?t=1783932137&k=f5f7fa7a3e39ef329f1b86c4f866958c$LR•IPV4•14『线路7』 -河北卫视,http://23.237.228.134/live8/hebei.m3u8$LR•IPV4•14『线路8』 -河北卫视,http://43.251.226.89:8080/play/42.m3u8$LR•IPV4•14『线路9』 -河北卫视,http://gfr.x3322.net:9901/tsfile/live/1091_1.m3u8$LR•IPV4•14『线路10』 -河北卫视,https://iptv.catvod.com/catvod.php?id=hbws$LR•IPV4•14『线路11』 -河北卫视,https://httop.top/ysp-河北卫视$LR•IPV4•14『线路12』 -河北卫视,http://iptv.huuc.edu.cn/hls/hebhd.m3u8$LR•IPV4•14『线路13』 -河北卫视,http://153.0.171.163:9901/tsfile/live/0117_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•14『线路14』 -河南卫视,http://101.66.195.138:9901/tsfile/live/0139_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•12『线路1』 -河南卫视,http://38.75.136.137:98/gslb/dsdqpub/hawshd.m3u8?auth=testpub$LR•IPV4•12『线路2』 -河南卫视,http://63.141.230.178:82/gslb/zbdq5.m3u8?id=hawshd$LR•IPV4•12『线路3』 -河南卫视,http://221.226.51.220:50081/newlive/live/hls/37/live.m3u8$LR•IPV4•12『线路4』 -河南卫视,http://153.0.171.163:9901/tsfile/live/0139_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•12『线路5』 -河南卫视,http://112.27.235.94:8000/hls/37/index.m3u8$LR•IPV4•12『线路6』 -河南卫视,http://tvcdn.stream3.hndt.com/tv/65bd329b017e1000648cd2ed00000000_transios/playlist.m3u8?wsSecret=ca9a9194ec9a95ed2539e69d07b645d5&wsTime=1784134111$LR•IPV4•12『线路7』 +河北卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227014/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ErSGjhI3DMaaAASPrbQJYTg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•13『线路1』 +河北卫视,http://101.66.194.63:9901/tsfile/live/0117_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•13『线路2』 +河北卫视,http://101.66.199.247:9901/tsfile/live/0117_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•13『线路3』 +河北卫视,http://204.12.221.218:8181/3m1080p/hews.m3u8$LR•IPV4•13『线路4』 +河北卫视,http://event.pull.hebtv.com/jishi/weishi_tingyun.m3u8$LR•IPV4•13『线路5』 +河北卫视,http://120.76.248.139/live/bfgd/4200000108.m3u8$LR•IPV4•13『线路6』 +河北卫视,http://23.237.228.134/live8/hebei.m3u8$LR•IPV4•13『线路7』 +河北卫视,http://43.251.226.89:8080/play/42.m3u8$LR•IPV4•13『线路8』 +河北卫视,http://gfr.x3322.net:9901/tsfile/live/1091_1.m3u8$LR•IPV4•13『线路9』 +河北卫视,https://iptv.catvod.com/catvod.php?id=hbws$LR•IPV4•13『线路10』 +河北卫视,https://httop.top/ysp-河北卫视$LR•IPV4•13『线路11』 +河北卫视,http://iptv.huuc.edu.cn/hls/hebhd.m3u8$LR•IPV4•13『线路12』 +河北卫视,http://153.0.171.163:9901/tsfile/live/0117_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•13『线路13』 +河南卫视,http://tvcdn.stream3.hndt.com/tv/65bd329b017e1000648cd2ed00000000_transios/playlist.m3u8?wsSecret=ca9a9194ec9a95ed2539e69d07b645d5&wsTime=1784134111$LR•IPV4•12『线路1』 +河南卫视,http://101.66.195.138:9901/tsfile/live/0139_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•12『线路2』 +河南卫视,http://38.75.136.137:98/gslb/dsdqpub/hawshd.m3u8?auth=testpub$LR•IPV4•12『线路3』 +河南卫视,http://63.141.230.178:82/gslb/zbdq5.m3u8?id=hawshd$LR•IPV4•12『线路4』 +河南卫视,http://221.226.51.220:50081/newlive/live/hls/37/live.m3u8$LR•IPV4•12『线路5』 +河南卫视,http://153.0.171.163:9901/tsfile/live/0139_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•12『线路6』 +河南卫视,http://112.27.235.94:8000/hls/37/index.m3u8$LR•IPV4•12『线路7』 河南卫视,http://23.237.228.134/live6/henan.m3u8$LR•IPV4•12『线路8』 河南卫视,http://43.251.226.89:8080/play/44.m3u8$LR•IPV4•12『线路9』 河南卫视,https://iptv.catvod.com/catvod.php?id=hnws$LR•IPV4•12『线路10』 @@ -562,21 +561,22 @@ CGTN阿语,https://0472.org/hls/cgtna.m3u8$LR•IPV4 湖北卫视,http://153.0.171.163:9901/tsfile/live/0132_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•14『线路12』 湖北卫视,http://www.745612.xyz:7788/rtp/235.254.198.72:1564$LR•IPV4•14『线路13』 湖北卫视,http://118.81.195.79:9003/hls/32/index.m3u8$LR•IPV4•14『线路14』 -江西卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226956/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Ei6ZIpVizXlewg-YfGvH8dA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•15『线路1』 -江西卫视,http://101.66.199.247:9901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•15『线路2』 -江西卫视,http://112.123.243.37:50085/tsfile/live/0132_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•15『线路3』 -江西卫视,http://124.228.160.210:9901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•15『线路4』 -江西卫视,http://153.0.171.163:9901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•15『线路5』 -江西卫视,http://112.27.235.94:8000/hls/44/index.m3u8$LR•IPV4•15『线路6』 -江西卫视,http://38.75.136.137:98/gslb/dsdqpub/jxwshd.m3u8?auth=testpub$LR•IPV4•15『线路7』 -江西卫视,http://23.237.228.134/live8/jiangxi.m3u8$LR•IPV4•15『线路8』 -江西卫视,http://43.251.226.89:8080/play/43.m3u8$LR•IPV4•15『线路9』 -江西卫视,http://api.kkitv.itv888.cn:8080/hls/pv0np60bpin/index.m3u8$LR•IPV4•15『线路10』 -江西卫视,https://iptv.catvod.com/catvod.php?id=jxws$LR•IPV4•15『线路11』 -江西卫视,https://httop.top/ysp-江西卫视$LR•IPV4•15『线路12』 -江西卫视,http://iptv.huuc.edu.cn/hls/jxhd.m3u8$LR•IPV4•15『线路13』 -江西卫视,http://mg.hmysapp.cn:177/ckmg/zb.php?id=jxws$LR•IPV4•15『线路14』 -江西卫视,http://39.134.115.163:8080/PLTV/88888910/224/3221225705/index.m3u8$LR•IPV4•15『线路15』 +江西卫视,https://jsp-tv-live.jxtvcn.com.cn/live-jsp/tv_jxtv6.m3u8?t=1784004704&token=67a59c29-de6e-4407-90c8-39f7e099b3db&d=0a7a8c487c454bc7bb02a60298283c5e$LR•IPV4•16『线路1』 +江西卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226956/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Ei6ZIpVizXlewg-YfGvH8dA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•16『线路2』 +江西卫视,http://101.66.199.247:9901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•16『线路3』 +江西卫视,http://112.123.243.37:50085/tsfile/live/0132_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•16『线路4』 +江西卫视,http://124.228.160.210:9901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•16『线路5』 +江西卫视,http://153.0.171.163:9901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•16『线路6』 +江西卫视,http://112.27.235.94:8000/hls/44/index.m3u8$LR•IPV4•16『线路7』 +江西卫视,http://38.75.136.137:98/gslb/dsdqpub/jxwshd.m3u8?auth=testpub$LR•IPV4•16『线路8』 +江西卫视,http://23.237.228.134/live8/jiangxi.m3u8$LR•IPV4•16『线路9』 +江西卫视,http://43.251.226.89:8080/play/43.m3u8$LR•IPV4•16『线路10』 +江西卫视,http://api.kkitv.itv888.cn:8080/hls/pv0np60bpin/index.m3u8$LR•IPV4•16『线路11』 +江西卫视,https://iptv.catvod.com/catvod.php?id=jxws$LR•IPV4•16『线路12』 +江西卫视,https://httop.top/ysp-江西卫视$LR•IPV4•16『线路13』 +江西卫视,http://iptv.huuc.edu.cn/hls/jxhd.m3u8$LR•IPV4•16『线路14』 +江西卫视,http://mg.hmysapp.cn:177/ckmg/zb.php?id=jxws$LR•IPV4•16『线路15』 +江西卫视,http://39.134.115.163:8080/PLTV/88888910/224/3221225705/index.m3u8$LR•IPV4•16『线路16』 吉林卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227015/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EW5-3AVdwD5KlUpuA4mz7Cg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•17『线路1』 吉林卫视,http://204.12.221.218:8181/3m1080p/jlws.m3u8$LR•IPV4•17『线路2』 吉林卫视,http://38.75.136.137:98/gslb/dsdqpub/jlwshd.m3u8?auth=testpub$LR•IPV4•17『线路3』 @@ -661,16 +661,16 @@ CGTN阿语,https://0472.org/hls/cgtna.m3u8$LR•IPV4 山东卫视,http://iptv.huuc.edu.cn/hls/sdhd.m3u8$LR•IPV4•17『线路15』 山东卫视,http://125.210.152.18:9090/live/SDWSHD_H265.m3u8$LR•IPV4•17『线路16』 山东卫视,http://39.134.115.163:8080/PLTV/88888910/224/3221225697/index.m3u8$LR•IPV4•17『线路17』 -天津卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226954/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Eaf3wyULP1h575eM_4ByMDg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•18『线路1』 -天津卫视,http://204.12.221.218:8181/3m1080p/tjws.m3u8$LR•IPV4•18『线路2』 -天津卫视,http://107.150.60.122/live/tjwshd.m3u8$LR•IPV4•18『线路3』 -天津卫视,http://192.151.150.154/live/tjwshd.m3u8$LR•IPV4•18『线路4』 -天津卫视,http://38.75.136.137:98/gslb/dsdqpub/tjwshd.m3u8?auth=testpub$LR•IPV4•18『线路5』 -天津卫视,http://63.141.230.178:82/gslb/zbdq5.m3u8?id=tjwshd$LR•IPV4•18『线路6』 -天津卫视,http://207.56.13.146:81/cdnlive/tjws.m3u8$LR•IPV4•18『线路7』 -天津卫视,http://120.198.95.220:9901/tsfile/live/1067_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•18『线路8』 -天津卫视,http://112.27.235.94:8000/hls/42/index.m3u8$LR•IPV4•18『线路9』 -天津卫视,https://piccpndks.v.kcdnvip.com/audio/tianjin_2/index.m3u8$LR•IPV4•18『线路10』 +天津卫视,https://piccpndks.v.kcdnvip.com/audio/tianjin_2/index.m3u8$LR•IPV4•18『线路1』 +天津卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226954/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Eaf3wyULP1h575eM_4ByMDg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•18『线路2』 +天津卫视,http://204.12.221.218:8181/3m1080p/tjws.m3u8$LR•IPV4•18『线路3』 +天津卫视,http://107.150.60.122/live/tjwshd.m3u8$LR•IPV4•18『线路4』 +天津卫视,http://192.151.150.154/live/tjwshd.m3u8$LR•IPV4•18『线路5』 +天津卫视,http://38.75.136.137:98/gslb/dsdqpub/tjwshd.m3u8?auth=testpub$LR•IPV4•18『线路6』 +天津卫视,http://63.141.230.178:82/gslb/zbdq5.m3u8?id=tjwshd$LR•IPV4•18『线路7』 +天津卫视,http://207.56.13.146:81/cdnlive/tjws.m3u8$LR•IPV4•18『线路8』 +天津卫视,http://120.198.95.220:9901/tsfile/live/1067_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•18『线路9』 +天津卫视,http://112.27.235.94:8000/hls/42/index.m3u8$LR•IPV4•18『线路10』 天津卫视,http://23.237.228.134/live8/tianjing.m3u8$LR•IPV4•18『线路11』 天津卫视,http://gfr.x3322.net:9901/tsfile/live/1090_1.m3u8$LR•IPV4•18『线路12』 天津卫视,http://api.kkitv.itv888.cn:8080/hls/z2lkdkrb4w/index.m3u8$LR•IPV4•18『线路13』 @@ -679,9 +679,9 @@ CGTN阿语,https://0472.org/hls/cgtna.m3u8$LR•IPV4 天津卫视,http://iptv.huuc.edu.cn/hls/tjhd.m3u8$LR•IPV4•18『线路16』 天津卫视,http://153.0.171.163:9901/tsfile/live/0135_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•18『线路17』 天津卫视,http://39.134.115.163:8080/PLTV/88888910/224/3221225698/index.m3u8$LR•IPV4•18『线路18』 -海南卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227029/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EEuBMjt2kLMD8fAO7QYER7Q%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•8『线路1』 -海南卫视,http://120.76.248.139/live/bfgd/4200000473.m3u8$LR•IPV4•8『线路2』 -海南卫视,https://livelyws.chinamcache.com/lyws/zb03.m3u8$LR•IPV4•8『线路3』 +海南卫视,https://livelyws.chinamcache.com/lyws/zb03.m3u8$LR•IPV4•8『线路1』 +海南卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227029/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EEuBMjt2kLMD8fAO7QYER7Q%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•8『线路2』 +海南卫视,http://120.76.248.139/live/bfgd/4200000473.m3u8$LR•IPV4•8『线路3』 海南卫视,http://43.251.226.89:8080/play/50.m3u8$LR•IPV4•8『线路4』 海南卫视,http://api.kkitv.itv888.cn:8080/hls/c1cajhsgba8/index.m3u8$LR•IPV4•8『线路5』 海南卫视,https://iptv.catvod.com/catvod.php?id=hinws$LR•IPV4•8『线路6』 @@ -746,10 +746,10 @@ CGTN阿语,https://0472.org/hls/cgtna.m3u8$LR•IPV4 康巴卫视,http://scgctvshow.sctv.com/hdlive/kangba/1.m3u8$LR•IPV4•2『线路2』 农林卫视,http://120.76.248.139/live/bfgd/4200000122.m3u8$LR•IPV4•2『线路1』 农林卫视,http://43.251.226.89:8080/play/52.m3u8$LR•IPV4•2『线路2』 -三沙卫视,http://107.150.60.122/live/ssws.m3u8$LR•IPV4•6『线路1』 -三沙卫视,http://38.75.136.137:98/gslb/dsdqpub/ssws.m3u8?auth=testpub$LR•IPV4•6『线路2』 -三沙卫视,http://221.226.51.220:50081/newlive/live/hls/38/live.m3u8$LR•IPV4•6『线路3』 -三沙卫视,https://srs.ssws.tv/video/sstv-10/index.m3u8$LR•IPV4•6『线路4』 +三沙卫视,https://srs.ssws.tv/video/sstv-10/index.m3u8$LR•IPV4•6『线路1』 +三沙卫视,http://107.150.60.122/live/ssws.m3u8$LR•IPV4•6『线路2』 +三沙卫视,http://38.75.136.137:98/gslb/dsdqpub/ssws.m3u8?auth=testpub$LR•IPV4•6『线路3』 +三沙卫视,http://221.226.51.220:50081/newlive/live/hls/38/live.m3u8$LR•IPV4•6『线路4』 三沙卫视,http://43.251.226.89:8080/play/56.m3u8$LR•IPV4•6『线路5』 三沙卫视,https://iptv.catvod.com/catvod.php?id=ssws$LR•IPV4•6『线路6』 延边卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227045/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Eq0D3NdTUN7FuRzr8eJsbQA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•4『线路1』 @@ -782,17 +782,17 @@ CGTN阿语,https://0472.org/hls/cgtna.m3u8$LR•IPV4 山西卫视,https://iptv.catvod.com/catvod.php?id=sxiws$LR•IPV4•15『线路13』 山西卫视,https://httop.top/ysp-山西卫视$LR•IPV4•15『线路14』 山西卫视,http://118.81.195.79:9003/hls/19/index.m3u8$LR•IPV4•15『线路15』 -陕西卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226999/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EsGLKaSqf0wDZMbAjeQtfyw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•20『线路1』 -陕西卫视,http://107.150.60.122/live/snwshd.m3u8$LR•IPV4•20『线路2』 -陕西卫视,http://63.141.230.178:82/gslb/zbdq5.m3u8?id=snwshd$LR•IPV4•20『线路3』 -陕西卫视,http://112.123.243.37:50085/tsfile/live/0109_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•20『线路4』 -陕西卫视,http://101.66.194.82:9901/tsfile/live/0136_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•20『线路5』 -陕西卫视,http://120.198.95.220:9901/tsfile/live/1068_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•20『线路6』 -陕西卫视,http://101.66.194.63:9901/tsfile/live/0136_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•20『线路7』 -陕西卫视,http://36.136.38.87:9901/tsfile/live/0136_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•20『线路8』 -陕西卫视,http://153.0.171.163:9901/tsfile/live/0136_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•20『线路9』 -陕西卫视,http://112.27.235.94:8000/hls/43/index.m3u8$LR•IPV4•20『线路10』 -陕西卫视,http://stream.snrtv.com/sxbc-star-BLMOU4.m3u8$LR•IPV4•20『线路11』 +陕西卫视,http://stream.snrtv.com/sxbc-star-BLMOU4.m3u8$LR•IPV4•20『线路1』 +陕西卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226999/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EsGLKaSqf0wDZMbAjeQtfyw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•20『线路2』 +陕西卫视,http://107.150.60.122/live/snwshd.m3u8$LR•IPV4•20『线路3』 +陕西卫视,http://63.141.230.178:82/gslb/zbdq5.m3u8?id=snwshd$LR•IPV4•20『线路4』 +陕西卫视,http://112.123.243.37:50085/tsfile/live/0109_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•20『线路5』 +陕西卫视,http://101.66.194.82:9901/tsfile/live/0136_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•20『线路6』 +陕西卫视,http://120.198.95.220:9901/tsfile/live/1068_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•20『线路7』 +陕西卫视,http://101.66.194.63:9901/tsfile/live/0136_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•20『线路8』 +陕西卫视,http://36.136.38.87:9901/tsfile/live/0136_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•20『线路9』 +陕西卫视,http://153.0.171.163:9901/tsfile/live/0136_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•20『线路10』 +陕西卫视,http://112.27.235.94:8000/hls/43/index.m3u8$LR•IPV4•20『线路11』 陕西卫视,http://38.75.136.137:98/gslb/dsdqpub/sxwshd.m3u8?auth=testpub$LR•IPV4•20『线路12』 陕西卫视,http://23.237.228.134/live6/sichuan.m3u8$LR•IPV4•20『线路13』 陕西卫视,http://43.251.226.89:8080/play/45.m3u8$LR•IPV4•20『线路14』 @@ -943,8 +943,8 @@ NewTV超级体育,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/ NewTV超级体育,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=0078&tk=a0c4f6cfaba3$LR•IPV4•5『线路3』 NewTV超级体育,http://feiyang.ak47s.top:35455/itv/1000000001000009601.m3u8?cdn=ystenlive$LR•IPV4•5『线路4』 NewTV超级体育,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=3188&tk=23a9aca1f79f$LR•IPV4•5『线路5』 -NewTV动作电影,http://39.134.19.68/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226465/index.m3u8$LR•IPV4•2『线路1』 -NewTV动作电影,http://live.metshop.top/huya/11602077?cdn=alicdn$LR•IPV4•2『线路2』 +NewTV动作电影,http://live.metshop.top/huya/11602077?cdn=alicdn$LR•IPV4•2『线路1』 +NewTV动作电影,http://39.134.19.68/dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226465/index.m3u8$LR•IPV4•2『线路2』 NewTV精品体育,https://epg.pw/stream/f7556eccd4ae06b0c2991fdc7a4f8388496559f728cc82459a8e50346040e226.m3u8$LR•IPV4•6『线路1』 NewTV精品体育,https://epg.pw/stream/866a097a0907c9832440f8df38272dd555abf05200dfbafcc137e214c9b30ca7.m3u8$LR•IPV4•6『线路2』 NewTV精品体育,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=5739&tk=23a9aca1f79f$LR•IPV4•6『线路3』 @@ -956,8 +956,8 @@ NewTV精品体育,http://dl.wifi942.com:66/jsyd/jsyd.php?id=GITV-JS-65$LR•IPV4 哈哈炫动,http://223.110.245.139/PLTV/4/224/3221226388/index.m3u8$LR•IPV4 嘉佳卡通,http://223.110.245.139/PLTV/4/224/3221227009/index.m3u8$LR•IPV4•2『线路1』 嘉佳卡通,http://112.25.48.68/live/program/live/jjkt/1300000/mnf.m3u8$LR•IPV4•2『线路2』 -金鹰卡通,http://183.11.239.36:808/hls/69/index.m3u8$LR•IPV4•7『线路1』 -金鹰卡通,http://phoneal.qing.mgtv.com/nn_live/nn_x64/Y2hzPSZkZWY9MSZ1aXA9MTA2LjE0LjM4LjU1JnRlcm09NSZtYWNpZD02ODZlOGNmOGM4OGU3N2VjOWEwNzkzMjg5ZjUzNDg0MmFiZWM0ZjNjJnFpZD0mcmF1dGhfZW5hYmxlPW9mZiZjZG5leF9pZD1hbF9waG9uZTMmZXM9MTc4Mzk3OTAxNiZ1dWlkPTU2NjdhZjJmOGNjNjM4MjMwZjFlYzVmY2RiMWIxNThmLTZhMGUyNjM3JnM9ZDg2NTFkYzBlZjdjOTcxMjUyMjMxMTYyOGQ5ODM4YjgmdWlkPSZuZHY9aW9zLTYuNS4wJnY9MiZhcz0wJl9jYXJDb2RlPTA,/JYKTMPP360.m3u8$LR•IPV4•7『线路2』 +金鹰卡通,http://phoneal.qing.mgtv.com/nn_live/nn_x64/Y2hzPSZkZWY9MSZ1aXA9MTA2LjE0LjM4LjU1JnRlcm09NSZtYWNpZD02ODZlOGNmOGM4OGU3N2VjOWEwNzkzMjg5ZjUzNDg0MmFiZWM0ZjNjJnFpZD0mcmF1dGhfZW5hYmxlPW9mZiZjZG5leF9pZD1hbF9waG9uZTMmZXM9MTc4Mzk3OTAxNiZ1dWlkPTU2NjdhZjJmOGNjNjM4MjMwZjFlYzVmY2RiMWIxNThmLTZhMGUyNjM3JnM9ZDg2NTFkYzBlZjdjOTcxMjUyMjMxMTYyOGQ5ODM4YjgmdWlkPSZuZHY9aW9zLTYuNS4wJnY9MiZhcz0wJl9jYXJDb2RlPTA,/JYKTMPP360.m3u8$LR•IPV4•7『线路1』 +金鹰卡通,http://183.11.239.36:808/hls/69/index.m3u8$LR•IPV4•7『线路2』 金鹰卡通,http://101.66.194.82:9901/tsfile/live/1000_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•7『线路3』 金鹰卡通,http://101.66.194.63:9901/tsfile/live/1000_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•7『线路4』 金鹰卡通,http://101.66.199.247:9901/tsfile/live/1000_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•7『线路5』 @@ -1123,19 +1123,19 @@ NewTV精品体育,http://dl.wifi942.com:66/jsyd/jsyd.php?id=GITV-JS-65$LR•IPV4 南宁影视娱乐,http://hls.nntv.cn/nnlive/YSYL_244.m3u8$LR•IPV4 河北,#genre# -邢台综合,http://222.223.119.21:8888/newlive/live/hls/54/live.m3u8$LR•IPV4•2『线路1』 -邢台综合,https://jwplay.hebyun.com.cn:443/live/xtsrmtzs/1500k/tzwj_video.m3u8$LR•IPV4•2『线路2』 -河北都市,http://121.19.134.246:808/hls/21/index.m3u8$LR•IPV4•2『线路1』 -河北都市,https://radio.pull.hebtv.com/live/hebnczx.m3u8$LR•IPV4•2『线路2』 -河北农民,http://121.19.134.246:808/hls/25/index.m3u8$LR•IPV4•2『线路1』 -河北农民,https://ls.qingting.fm/live/1650/64k.m3u8$LR•IPV4•2『线路2』 +邢台综合,https://jwplay.hebyun.com.cn:443/live/xtsrmtzs/1500k/tzwj_video.m3u8$LR•IPV4•2『线路1』 +邢台综合,http://222.223.119.21:8888/newlive/live/hls/54/live.m3u8$LR•IPV4•2『线路2』 +河北都市,https://radio.pull.hebtv.com/live/hebnczx.m3u8$LR•IPV4•2『线路1』 +河北都市,http://121.19.134.246:808/hls/21/index.m3u8$LR•IPV4•2『线路2』 +河北农民,https://ls.qingting.fm/live/1650/64k.m3u8$LR•IPV4•2『线路1』 +河北农民,http://121.19.134.246:808/hls/25/index.m3u8$LR•IPV4•2『线路2』 鹿泉一套,http://hblq.chinashadt.com:2036/live/stream:luquan1.stream/playlist.m3u8$LR•IPV4 -河北经济,http://121.19.134.246:808/hls/20/index.m3u8$LR•IPV4•2『线路1』 -河北经济,http://1.94.31.214/php/hebei.php?id=jjsh$LR•IPV4•2『线路2』 -河北影视,http://121.19.134.246:808/hls/22/index.m3u8$LR•IPV4•2『线路1』 -河北影视,http://1.94.31.214/php/hebei.php?id=hbys$LR•IPV4•2『线路2』 -河北公共,http://121.19.134.246:808/hls/24/index.m3u8$LR•IPV4•2『线路1』 -河北公共,http://1.94.31.214/php/hebei.php?id=hbgg$LR•IPV4•2『线路2』 +河北经济,http://1.94.31.214/php/hebei.php?id=jjsh$LR•IPV4•2『线路1』 +河北经济,http://121.19.134.246:808/hls/20/index.m3u8$LR•IPV4•2『线路2』 +河北影视,http://1.94.31.214/php/hebei.php?id=hbys$LR•IPV4•2『线路1』 +河北影视,http://121.19.134.246:808/hls/22/index.m3u8$LR•IPV4•2『线路2』 +河北公共,http://1.94.31.214/php/hebei.php?id=hbgg$LR•IPV4•2『线路1』 +河北公共,http://121.19.134.246:808/hls/24/index.m3u8$LR•IPV4•2『线路2』 鹿泉二套,http://hblq.chinashadt.com:2036/live/stream:luquan2.stream/playlist.m3u8$LR•IPV4 内蒙古,#genre# @@ -1160,10 +1160,10 @@ NewTV精品体育,http://dl.wifi942.com:66/jsyd/jsyd.php?id=GITV-JS-65$LR•IPV4 江苏教育,http://223.110.245.151/ott.js.chinamobile.com/PLTV/3/224/3221225923/index.m3u8$LR•IPV4 南京十八,http://183.207.248.71/gitv/live1/G_NJSB/G_NJSB$LR•IPV4 江苏体育,http://183.207.248.71/gitv/live1/G_JSTY/G_JSTY$LR•IPV4 -南京教科,https://live.nbs.cn/channels/njtv/jkpd/m3u8:500k/live.m3u8$LR•IPV4•4『线路1』 -南京教科,http://183.207.248.71/gitv/live1/G_NJJK/G_NJJK$LR•IPV4•4『线路2』 -南京教科,http://223.110.245.155/ott.js.chinamobile.com/PLTV/3/224/3221227194/index.m3u8$LR•IPV4•4『线路3』 -南京教科,http://nklive.nbs.cn/hls/75b3c462-b831-4de7-a34b-5d3221db2069/index.m3u8$LR•IPV4•4『线路4』 +南京教科,http://nklive.nbs.cn/hls/75b3c462-b831-4de7-a34b-5d3221db2069/index.m3u8$LR•IPV4•4『线路1』 +南京教科,https://live.nbs.cn/channels/njtv/jkpd/m3u8:500k/live.m3u8$LR•IPV4•4『线路2』 +南京教科,http://183.207.248.71/gitv/live1/G_NJJK/G_NJJK$LR•IPV4•4『线路3』 +南京教科,http://223.110.245.155/ott.js.chinamobile.com/PLTV/3/224/3221227194/index.m3u8$LR•IPV4•4『线路4』 南京少儿,https://live.nbs.cn/channels/njtv/sepd/m3u8:500k/live.m3u8$LR•IPV4 苏州4k,https://live-auth.51kandianshi.com/szgd/csztv4k_hd.m3u8$LR•IPV4•5『线路1』 苏州4k,http://43.251.226.89:8080/play/927.m3u8$LR•IPV4•5『线路2』 @@ -2166,115 +2166,115 @@ NewTV精品体育,http://dl.wifi942.com:66/jsyd/jsyd.php?id=GITV-JS-65$LR•IPV4 广东珠江,https://t.freetv.fun/live/yan-dong-zhu-jiang-15.m3u8$LR•IPV4•127『线路125』 广东珠江,https://hk.188766.xyz/?migutoken=34467290b64f0850801479159893a4de&id=gd_gdzj&type=sz$LR•IPV4•127『线路126』 广东珠江,https://stream1.freetv.fun/yan-dong-zhu-jiang-24.ctv$LR•IPV4•127『线路127』 -广东体育,http://bxtv.3a.ink/api.php?id=gdty$LR•IPV4•109『线路1』 -广东体育,http://php.jdshipin.com/TVOD/iptv.php?id=gdty$LR•IPV4•109『线路2』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-2.flv$LR•IPV4•109『线路3』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-11.ctv$LR•IPV4•109『线路4』 -广东体育,https://hls-gateway.vpstv.net/streams/476954.m3u8$LR•IPV4•109『线路5』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-25.ctv$LR•IPV4•109『线路6』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-36.m3u8$LR•IPV4•109『线路7』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-6.m3u8$LR•IPV4•109『线路8』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-35.ctv$LR•IPV4•109『线路9』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-15.m3u8$LR•IPV4•109『线路10』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-34.ctv$LR•IPV4•109『线路11』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-24.m3u8$LR•IPV4•109『线路12』 -广东体育,http://cdn2.163189.xyz/live/gdty/stream.m3u8$LR•IPV4•109『线路13』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-24.ctv$LR•IPV4•109『线路14』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-5.m3u8$LR•IPV4•109『线路15』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-30.m3u8$LR•IPV4•109『线路16』 -广东体育,http://125.89.163.44:8888/udp/239.77.0.112:5146$LR•IPV4•109『线路17』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-19.m3u8$LR•IPV4•109『线路18』 -广东体育,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=6559&tk=a0c4f6cfaba3$LR•IPV4•109『线路19』 -广东体育,http://119.32.12.17:2901/udp/224.1.100.34:11111$LR•IPV4•109『线路20』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-7.m3u8$LR•IPV4•109『线路21』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-18.m3u8$LR•IPV4•109『线路22』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-38.ctv$LR•IPV4•109『线路23』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-6.ctv$LR•IPV4•109『线路24』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-12.ctv$LR•IPV4•109『线路25』 -广东体育,http://api3.52tb.xyz/info?id=413&token=20221127jxwhhemby$LR•IPV4•109『线路26』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu.m3u8$LR•IPV4•109『线路27』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-17.m3u8$LR•IPV4•109『线路28』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-5.ctv$LR•IPV4•109『线路29』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-13.m3u8$LR•IPV4•109『线路30』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing.m3u8$LR•IPV4•109『线路31』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-15.ctv$LR•IPV4•109『线路32』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-23.ctv$LR•IPV4•109『线路33』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-13.m3u8$LR•IPV4•109『线路34』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-17.m3u8$LR•IPV4•109『线路35』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-14.ctv$LR•IPV4•109『线路36』 -广东体育,http://qjrhc.jydjd.top:2911/udp/224.1.100.33:11111$LR•IPV4•109『线路37』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-21.m3u8$LR•IPV4•109『线路38』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-3.m3u8$LR•IPV4•109『线路39』 -广东体育,http://67.220.71.199:2347/livehttpplay?channel_id=30031$LR•IPV4•109『线路40』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-12.m3u8$LR•IPV4•109『线路41』 -广东体育,http://183.3.134.56:9901/tsfile/live/0142_1.m3u8$LR•IPV4•109『线路42』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-8.ctv$LR•IPV4•109『线路43』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-3.m3u8$LR•IPV4•109『线路44』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-10.ctv$LR•IPV4•109『线路45』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-33.ctv$LR•IPV4•109『线路46』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-5.m3u8$LR•IPV4•109『线路47』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-3.php$LR•IPV4•109『线路48』 -广东体育,https://epg.pw/stream/7b470f9fc5c305db0c8622117b7b25ca00eb35ba3e93e865cf0ff9df5c736681.m3u8$LR•IPV4•109『线路49』 -广东体育,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=8718&tk=a0c4f6cfaba3$LR•IPV4•109『线路50』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-2.m3u8$LR•IPV4•109『线路51』 -广东体育,http://67.220.71.199:2347/livehttpplay?channel_id=12028$LR•IPV4•109『线路52』 -广东体育,http://120.238.94.10:9901/tsfile/live/1012_1.m3u8$LR•IPV4•109『线路53』 -广东体育,http://120.198.101.106:9901/tsfile/live/1012_1.m3u8?key=txiptv$LR•IPV4•109『线路54』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-27.m3u8$LR•IPV4•109『线路55』 -广东体育,http://120.77.205.62:8087/rtp/239.77.1.97:5146$LR•IPV4•109『线路56』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-26.ctv$LR•IPV4•109『线路57』 -广东体育,http://63.141.230.178:82/gslb/zbdq5.m3u8?id=gdty$LR•IPV4•109『线路58』 -广东体育,http://218.15.214.115:10000/udp/239.77.0.112:5146$LR•IPV4•109『线路59』 -广东体育,http://222.128.55.152:9080/live/gdty.m3u8$LR•IPV4•109『线路60』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-17.ctv$LR•IPV4•109『线路61』 -广东体育,http://183.237.95.108:9901/tsfile/live/1033_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•109『线路62』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-18.ctv$LR•IPV4•109『线路63』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-7.ctv$LR•IPV4•109『线路64』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-4.ctv$LR•IPV4•109『线路65』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-gao-qing-2.m3u8$LR•IPV4•109『线路66』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-28.ctv$LR•IPV4•109『线路67』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-16.m3u8$LR•IPV4•109『线路68』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-4.m3u8$LR•IPV4•109『线路69』 -广东体育,http://183.11.239.36:808/hls/2/index.m3u8$LR•IPV4•109『线路70』 -广东体育,http://r.jdshipin.com/LiYdg$LR•IPV4•109『线路71』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-39.ctv$LR•IPV4•109『线路72』 -广东体育,http://bak.dou.ddns-ip.net/api.php?n=cctvxxx&id=t3ucOH&tk=zUr4K92Dl6kh$LR•IPV4•109『线路73』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-1.m3u8$LR•IPV4•109『线路74』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-8.m3u8$LR•IPV4•109『线路75』 -广东体育,http://api2.52tb.xyz/info?id=414&token=20230218qkyjia$LR•IPV4•109『线路76』 -广东体育,http://php.jdshipin.com/PLTV/iptv.php?id=gdty$LR•IPV4•109『线路77』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-16.ctv$LR•IPV4•109『线路78』 -广东体育,http://38.75.136.137:98/gslb/dsdqpub/gdty.m3u8?auth=testpub$LR•IPV4•109『线路79』 -广东体育,http://119.32.12.32:2901/udp/224.1.100.34:11111$LR•IPV4•109『线路80』 -广东体育,http://218.15.183.23:9901/tsfile/live/23012_1.m3u8$LR•IPV4•109『线路81』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-4.m3u8$LR•IPV4•109『线路82』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-1.m3u8$LR•IPV4•109『线路83』 -广东体育,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=2030&tk=a0c4f6cfaba3$LR•IPV4•109『线路84』 -广东体育,http://120.77.205.62:8087/rtp/239.77.0.168:5146$LR•IPV4•109『线路85』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-10.m3u8$LR•IPV4•109『线路86』 -广东体育,https://tv.cdn.com.mp/live/gdty/stream.m3u8$LR•IPV4•109『线路87』 -广东体育,http://120.77.205.62:8087/rtp/239.77.0.112:5146$LR•IPV4•109『线路88』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-26.m3u8$LR•IPV4•109『线路89』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-12.m3u8$LR•IPV4•109『线路90』 -广东体育,http://api2.52tb.xyz/info?id=414&token=20230218jsyklh$LR•IPV4•109『线路91』 -广东体育,http://api2.52tb.xyz/info?id=413&token=20230218qkyjia$LR•IPV4•109『线路92』 -广东体育,http://120.238.94.82:9901/tsfile/live/1012_1.m3u8$LR•IPV4•109『线路93』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-10.m3u8$LR•IPV4•109『线路94』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-9.m3u8$LR•IPV4•109『线路95』 -广东体育,http://67.220.71.199:2347/livehttpplay?channel_id=20130$LR•IPV4•109『线路96』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-30.ctv$LR•IPV4•109『线路97』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-19.m3u8$LR•IPV4•109『线路98』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-16.m3u8$LR•IPV4•109『线路99』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-20.m3u8$LR•IPV4•109『线路100』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-4.m3u8$LR•IPV4•109『线路101』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-1.m3u8$LR•IPV4•109『线路102』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-39.m3u8$LR•IPV4•109『线路103』 -广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-15.m3u8$LR•IPV4•109『线路104』 -广东体育,http://qjrhc.jydjd.top:2911/udp/224.1.100.34:11111$LR•IPV4•109『线路105』 -广东体育,http://218.13.170.98:9901/tsfile/live/0019_1.m3u8$LR•IPV4•109『线路106』 -广东体育,http://116.77.239.26:44300/tsfile/live/0124_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•109『线路107』 -广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-2.m3u8$LR•IPV4•109『线路108』 -广东体育,http://120.198.95.220:9901/tsfile/live/1010_1.m3u8?key=txiptv$LR•IPV4•109『线路109』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-2.flv$LR•IPV4•109『线路1』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-11.ctv$LR•IPV4•109『线路2』 +广东体育,https://hls-gateway.vpstv.net/streams/476954.m3u8$LR•IPV4•109『线路3』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-25.ctv$LR•IPV4•109『线路4』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-36.m3u8$LR•IPV4•109『线路5』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-6.m3u8$LR•IPV4•109『线路6』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-35.ctv$LR•IPV4•109『线路7』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-15.m3u8$LR•IPV4•109『线路8』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-34.ctv$LR•IPV4•109『线路9』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-24.m3u8$LR•IPV4•109『线路10』 +广东体育,http://cdn2.163189.xyz/live/gdty/stream.m3u8$LR•IPV4•109『线路11』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-24.ctv$LR•IPV4•109『线路12』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-5.m3u8$LR•IPV4•109『线路13』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-30.m3u8$LR•IPV4•109『线路14』 +广东体育,http://125.89.163.44:8888/udp/239.77.0.112:5146$LR•IPV4•109『线路15』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-19.m3u8$LR•IPV4•109『线路16』 +广东体育,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=6559&tk=a0c4f6cfaba3$LR•IPV4•109『线路17』 +广东体育,http://119.32.12.17:2901/udp/224.1.100.34:11111$LR•IPV4•109『线路18』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-7.m3u8$LR•IPV4•109『线路19』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-18.m3u8$LR•IPV4•109『线路20』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-38.ctv$LR•IPV4•109『线路21』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-6.ctv$LR•IPV4•109『线路22』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-12.ctv$LR•IPV4•109『线路23』 +广东体育,http://api3.52tb.xyz/info?id=413&token=20221127jxwhhemby$LR•IPV4•109『线路24』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu.m3u8$LR•IPV4•109『线路25』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-17.m3u8$LR•IPV4•109『线路26』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-5.ctv$LR•IPV4•109『线路27』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-13.m3u8$LR•IPV4•109『线路28』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing.m3u8$LR•IPV4•109『线路29』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-15.ctv$LR•IPV4•109『线路30』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-23.ctv$LR•IPV4•109『线路31』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-13.m3u8$LR•IPV4•109『线路32』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-17.m3u8$LR•IPV4•109『线路33』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-14.ctv$LR•IPV4•109『线路34』 +广东体育,http://qjrhc.jydjd.top:2911/udp/224.1.100.33:11111$LR•IPV4•109『线路35』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-21.m3u8$LR•IPV4•109『线路36』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-3.m3u8$LR•IPV4•109『线路37』 +广东体育,http://67.220.71.199:2347/livehttpplay?channel_id=30031$LR•IPV4•109『线路38』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-12.m3u8$LR•IPV4•109『线路39』 +广东体育,http://php.jdshipin.com/TVOD/iptv.php?id=gdty$LR•IPV4•109『线路40』 +广东体育,http://183.3.134.56:9901/tsfile/live/0142_1.m3u8$LR•IPV4•109『线路41』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-8.ctv$LR•IPV4•109『线路42』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-3.m3u8$LR•IPV4•109『线路43』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-10.ctv$LR•IPV4•109『线路44』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-33.ctv$LR•IPV4•109『线路45』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-5.m3u8$LR•IPV4•109『线路46』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-3.php$LR•IPV4•109『线路47』 +广东体育,https://epg.pw/stream/7b470f9fc5c305db0c8622117b7b25ca00eb35ba3e93e865cf0ff9df5c736681.m3u8$LR•IPV4•109『线路48』 +广东体育,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=8718&tk=a0c4f6cfaba3$LR•IPV4•109『线路49』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-2.m3u8$LR•IPV4•109『线路50』 +广东体育,http://67.220.71.199:2347/livehttpplay?channel_id=12028$LR•IPV4•109『线路51』 +广东体育,http://120.238.94.10:9901/tsfile/live/1012_1.m3u8$LR•IPV4•109『线路52』 +广东体育,http://120.198.101.106:9901/tsfile/live/1012_1.m3u8?key=txiptv$LR•IPV4•109『线路53』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-27.m3u8$LR•IPV4•109『线路54』 +广东体育,http://120.77.205.62:8087/rtp/239.77.1.97:5146$LR•IPV4•109『线路55』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-26.ctv$LR•IPV4•109『线路56』 +广东体育,http://63.141.230.178:82/gslb/zbdq5.m3u8?id=gdty$LR•IPV4•109『线路57』 +广东体育,http://218.15.214.115:10000/udp/239.77.0.112:5146$LR•IPV4•109『线路58』 +广东体育,http://222.128.55.152:9080/live/gdty.m3u8$LR•IPV4•109『线路59』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-17.ctv$LR•IPV4•109『线路60』 +广东体育,http://183.237.95.108:9901/tsfile/live/1033_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•109『线路61』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-18.ctv$LR•IPV4•109『线路62』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-7.ctv$LR•IPV4•109『线路63』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-4.ctv$LR•IPV4•109『线路64』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-gao-qing-2.m3u8$LR•IPV4•109『线路65』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-28.ctv$LR•IPV4•109『线路66』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-16.m3u8$LR•IPV4•109『线路67』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-4.m3u8$LR•IPV4•109『线路68』 +广东体育,http://183.11.239.36:808/hls/2/index.m3u8$LR•IPV4•109『线路69』 +广东体育,http://r.jdshipin.com/LiYdg$LR•IPV4•109『线路70』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-39.ctv$LR•IPV4•109『线路71』 +广东体育,http://bak.dou.ddns-ip.net/api.php?n=cctvxxx&id=t3ucOH&tk=zUr4K92Dl6kh$LR•IPV4•109『线路72』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-1.m3u8$LR•IPV4•109『线路73』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-8.m3u8$LR•IPV4•109『线路74』 +广东体育,http://api2.52tb.xyz/info?id=414&token=20230218qkyjia$LR•IPV4•109『线路75』 +广东体育,http://php.jdshipin.com/PLTV/iptv.php?id=gdty$LR•IPV4•109『线路76』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-16.ctv$LR•IPV4•109『线路77』 +广东体育,http://38.75.136.137:98/gslb/dsdqpub/gdty.m3u8?auth=testpub$LR•IPV4•109『线路78』 +广东体育,http://119.32.12.32:2901/udp/224.1.100.34:11111$LR•IPV4•109『线路79』 +广东体育,http://218.15.183.23:9901/tsfile/live/23012_1.m3u8$LR•IPV4•109『线路80』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-4.m3u8$LR•IPV4•109『线路81』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-1.m3u8$LR•IPV4•109『线路82』 +广东体育,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=2030&tk=a0c4f6cfaba3$LR•IPV4•109『线路83』 +广东体育,http://120.77.205.62:8087/rtp/239.77.0.168:5146$LR•IPV4•109『线路84』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-10.m3u8$LR•IPV4•109『线路85』 +广东体育,https://tv.cdn.com.mp/live/gdty/stream.m3u8$LR•IPV4•109『线路86』 +广东体育,http://120.77.205.62:8087/rtp/239.77.0.112:5146$LR•IPV4•109『线路87』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-26.m3u8$LR•IPV4•109『线路88』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-12.m3u8$LR•IPV4•109『线路89』 +广东体育,http://api2.52tb.xyz/info?id=414&token=20230218jsyklh$LR•IPV4•109『线路90』 +广东体育,http://api2.52tb.xyz/info?id=413&token=20230218qkyjia$LR•IPV4•109『线路91』 +广东体育,http://120.238.94.82:9901/tsfile/live/1012_1.m3u8$LR•IPV4•109『线路92』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-10.m3u8$LR•IPV4•109『线路93』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-9.m3u8$LR•IPV4•109『线路94』 +广东体育,http://67.220.71.199:2347/livehttpplay?channel_id=20130$LR•IPV4•109『线路95』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-30.ctv$LR•IPV4•109『线路96』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-19.m3u8$LR•IPV4•109『线路97』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-16.m3u8$LR•IPV4•109『线路98』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-20.m3u8$LR•IPV4•109『线路99』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-4.m3u8$LR•IPV4•109『线路100』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-1.m3u8$LR•IPV4•109『线路101』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-39.m3u8$LR•IPV4•109『线路102』 +广东体育,https://t.freetv.fun/live/yan-dong-ti-yu-gao-qing-15.m3u8$LR•IPV4•109『线路103』 +广东体育,http://qjrhc.jydjd.top:2911/udp/224.1.100.34:11111$LR•IPV4•109『线路104』 +广东体育,http://218.13.170.98:9901/tsfile/live/0019_1.m3u8$LR•IPV4•109『线路105』 +广东体育,http://116.77.239.26:44300/tsfile/live/0124_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•109『线路106』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-2.m3u8$LR•IPV4•109『线路107』 +广东体育,http://120.198.95.220:9901/tsfile/live/1010_1.m3u8?key=txiptv$LR•IPV4•109『线路108』 +广东体育,http://bxtv.3a.ink/api.php?id=gdty$LR•IPV4•109『线路109』 广东民生,http://qjrhc.jydjd.top:2911/udp/224.1.100.152:11111$LR•IPV4•55『线路1』 广东民生,http://183.11.239.36:808/hls/18/index.m3u8$LR•IPV4•55『线路2』 广东民生,http://183.237.95.108:9901/tsfile/live/1032_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•55『线路3』 @@ -2986,55 +2986,55 @@ NewTV精品体育,http://dl.wifi942.com:66/jsyd/jsyd.php?id=GITV-JS-65$LR•IPV4 新闻综合,http://111.228.4.117:6789/migu720p.php?id=651632657$LR•IPV4•115『线路68』 新闻综合,https://stream1.freetv.fun/shang-hai-xin-wen-zong-he-8.m3u8$LR•IPV4•115『线路69』 新闻综合,https://stream1.freetv.fun/ipv6-xin-wen-zong-he-10.m3u8$LR•IPV4•115『线路70』 -新闻综合,https://stream2.jlntv.cn/baicheng1/sd/live.m3u8$LR•IPV4•115『线路71』 -新闻综合,http://live.cztv.cc:85/live/xwpd.m3u8$LR•IPV4•115『线路72』 -新闻综合,http://117.156.28.119/270000001111/1110000001/index.m3u8$LR•IPV4•115『线路73』 -新闻综合,http://pili-live-hls.hebitv.com/hebi/hebi.m3u8$LR•IPV4•115『线路74』 -新闻综合,https://stream2.jlntv.cn/naxw/sd/live.m3u8$LR•IPV4•115『线路75』 -新闻综合,http://uni6rtmp.tulix.tv:1935/vbstv/vbsabr.smil/chunklist_w439903609_b1228800.m3u8$LR•IPV4•115『线路76』 -新闻综合,http://221.5.213.4:30000/1111.m3u8$LR•IPV4•115『线路77』 -新闻综合,https://stream2.jlntv.cn/jilin1/sd/live.m3u8$LR•IPV4•115『线路78』 -新闻综合,http://30515.hlsplay.aodianyun.com/lms_30515/tv_channel_239.m3u8$LR•IPV4•115『线路79』 -新闻综合,https://stream2.jlntv.cn/sptv/sd/live.m3u8$LR•IPV4•115『线路80』 -新闻综合,http://live.ahsz.tv/video/s10001-szzh/index.m3u8$LR•IPV4•115『线路81』 -新闻综合,http://guangshui.live.tempsource.cjyun.org/videotmp/s10146-GSXW.m3u8$LR•IPV4•115『线路82』 -新闻综合,https://stream2.jlntv.cn/jlyb/sd/live.m3u8$LR•IPV4•115『线路83』 -新闻综合,https://stream2.jlntv.cn/sytv/sd/live.m3u8$LR•IPV4•115『线路84』 -新闻综合,http://222.179.155.21:1935/ch1.m3u8$LR•IPV4•115『线路85』 -新闻综合,http://117.172.215.250:8083/videos/live/35/39/GQVbrgob5CGJM/GQVbrgob5CGJM.m3u8$LR•IPV4•115『线路86』 -新闻综合,http://220.180.110.101:8083/videos/live/36/57/hwEHU4UVQ1Iv5/hwEHU4UVQ1Iv5.m3u8$LR•IPV4•115『线路87』 -新闻综合,http://live.hnxttv.com:9601/live/xwzh/800K/tzwj_video.m3u8$LR•IPV4•115『线路88』 -新闻综合,http://stream.bzcm.net/2/sd/live.m3u8$LR•IPV4•115『线路89』 -新闻综合,http://117.156.28.119/270000001111/1110000145/index.m3u8$LR•IPV4•115『线路90』 -新闻综合,https://stream2.jlntv.cn/baishan1/sd/live.m3u8$LR•IPV4•115『线路91』 -新闻综合,http://live1.wuhubtv.com/channel1/sd/live.m3u8$LR•IPV4•115『线路92』 -新闻综合,http://palive.patv123.com:8091/live/xwpd_800K.m3u8$LR•IPV4•115『线路93』 -新闻综合,https://stream2.jlntv.cn/liaoyuan1/sd/live.m3u8$LR•IPV4•115『线路94』 -新闻综合,http://stream8.jlntv.cn/shulan/sd/live.m3u8?_upt=332db6421699196585$LR•IPV4•115『线路95』 -新闻综合,http://stream5.jlntv.cn/hn/sd/live.m3u8$LR•IPV4•115『线路96』 -新闻综合,http://pili-live-hls.ybcxjd.com/jdh-live/2108111201035597.m3u8?zsicd$LR•IPV4•115『线路97』 -新闻综合,http://live.spccmc.com:90/live/spxwzh.m3u8$LR•IPV4•115『线路98』 -新闻综合,http://live.iwcmt.cn:90/live/zhxw.m3u8$LR•IPV4•115『线路99』 -新闻综合,http://live.jinchuanrmt.com:90/live/zhxw.m3u8?zsicd$LR•IPV4•115『线路100』 -新闻综合,https://play.yunxya.com/channellive/xinwen.m3u8$LR•IPV4•115『线路101』 -新闻综合,http://ls.qingting.fm/live/267.m3u8$LR•IPV4•115『线路102』 -新闻综合,http://hslive.hsnewsnet.com/lsdream/hve9Wjs/1000/live.m3u8$LR•IPV4•115『线路103』 -新闻综合,https://p2.vzan.com/slowlive/596867413819827251/live.m3u8?zbid=1725814272&amp;tpid=1516989100&amp;type=0$LR•IPV4•115『线路104』 -新闻综合,https://tntgjhjb.live.sxmty.com/live/hls/3a4585ac11ec4e1bb07b419101b370c3/baf63e2b313440c2a25d7859f9b73b05-1.m3u8?zshanxd$LR•IPV4•115『线路105』 -新闻综合,http://uzoiczhh.live.sxmty.com/live/hls/0d41f1480c4042d49927858f01fde707/53130407737b417b9a6259b57246bae3.m3u8?zshanxd$LR•IPV4•115『线路106』 -新闻综合,https://ls.qingting.fm/live/5043/64k.m3u8$LR•IPV4•115『线路107』 -新闻综合,http://liveout.btzx.com.cn/62ds9e/4nxdih.m3u8?fbl=$LR•IPV4•115『线路108』 -新闻综合,http://nklive.nbs.cn/hls/d511bc9d-a694-4453-b3a2-4fc842cc97a1/index.m3u8$LR•IPV4•115『线路109』 -新闻综合,http://ls.qingting.fm/live/23797.m3u8$LR•IPV4•115『线路110』 -新闻综合,https://play.kankanlive.com/live/1720583434627241.m3u8$LR•IPV4•115『线路111』 -新闻综合,https://ls.qingting.fm/live/5022100/64k.m3u8$LR•IPV4•115『线路112』 -新闻综合,https://liveout.xntv.tv/a65jur/96iln2.m3u8?zqinghd$LR•IPV4•115『线路113』 -新闻综合,http://live.qthnews.org.cn:1935/live/live1/800k/tzwj_video.m3u8$LR•IPV4•115『线路114』 -新闻综合,http://stream.hrbtv.net/xwzh/sd/live.m3u8?zheild$LR•IPV4•115『线路115』 +新闻综合,http://stream8.jlntv.cn/shulan/sd/live.m3u8?_upt=332db6421699196585$LR•IPV4•115『线路71』 +新闻综合,http://stream5.jlntv.cn/hn/sd/live.m3u8$LR•IPV4•115『线路72』 +新闻综合,http://pili-live-hls.ybcxjd.com/jdh-live/2108111201035597.m3u8?zsicd$LR•IPV4•115『线路73』 +新闻综合,http://live.spccmc.com:90/live/spxwzh.m3u8$LR•IPV4•115『线路74』 +新闻综合,http://live.iwcmt.cn:90/live/zhxw.m3u8$LR•IPV4•115『线路75』 +新闻综合,http://live.jinchuanrmt.com:90/live/zhxw.m3u8?zsicd$LR•IPV4•115『线路76』 +新闻综合,https://play.yunxya.com/channellive/xinwen.m3u8$LR•IPV4•115『线路77』 +新闻综合,http://ls.qingting.fm/live/267.m3u8$LR•IPV4•115『线路78』 +新闻综合,http://hslive.hsnewsnet.com/lsdream/hve9Wjs/1000/live.m3u8$LR•IPV4•115『线路79』 +新闻综合,https://p2.vzan.com/slowlive/596867413819827251/live.m3u8?zbid=1725814272&amp;tpid=1516989100&amp;type=0$LR•IPV4•115『线路80』 +新闻综合,https://tntgjhjb.live.sxmty.com/live/hls/3a4585ac11ec4e1bb07b419101b370c3/baf63e2b313440c2a25d7859f9b73b05-1.m3u8?zshanxd$LR•IPV4•115『线路81』 +新闻综合,http://uzoiczhh.live.sxmty.com/live/hls/0d41f1480c4042d49927858f01fde707/53130407737b417b9a6259b57246bae3.m3u8?zshanxd$LR•IPV4•115『线路82』 +新闻综合,https://ls.qingting.fm/live/5043/64k.m3u8$LR•IPV4•115『线路83』 +新闻综合,http://liveout.btzx.com.cn/62ds9e/4nxdih.m3u8?fbl=$LR•IPV4•115『线路84』 +新闻综合,http://nklive.nbs.cn/hls/d511bc9d-a694-4453-b3a2-4fc842cc97a1/index.m3u8$LR•IPV4•115『线路85』 +新闻综合,http://ls.qingting.fm/live/23797.m3u8$LR•IPV4•115『线路86』 +新闻综合,https://play.kankanlive.com/live/1720583434627241.m3u8$LR•IPV4•115『线路87』 +新闻综合,https://ls.qingting.fm/live/5022100/64k.m3u8$LR•IPV4•115『线路88』 +新闻综合,https://liveout.xntv.tv/a65jur/96iln2.m3u8?zqinghd$LR•IPV4•115『线路89』 +新闻综合,http://live.qthnews.org.cn:1935/live/live1/800k/tzwj_video.m3u8$LR•IPV4•115『线路90』 +新闻综合,http://stream.hrbtv.net/xwzh/sd/live.m3u8?zheild$LR•IPV4•115『线路91』 +新闻综合,https://stream2.jlntv.cn/baicheng1/sd/live.m3u8$LR•IPV4•115『线路92』 +新闻综合,http://live.cztv.cc:85/live/xwpd.m3u8$LR•IPV4•115『线路93』 +新闻综合,http://117.156.28.119/270000001111/1110000001/index.m3u8$LR•IPV4•115『线路94』 +新闻综合,http://pili-live-hls.hebitv.com/hebi/hebi.m3u8$LR•IPV4•115『线路95』 +新闻综合,https://stream2.jlntv.cn/naxw/sd/live.m3u8$LR•IPV4•115『线路96』 +新闻综合,http://uni6rtmp.tulix.tv:1935/vbstv/vbsabr.smil/chunklist_w439903609_b1228800.m3u8$LR•IPV4•115『线路97』 +新闻综合,http://221.5.213.4:30000/1111.m3u8$LR•IPV4•115『线路98』 +新闻综合,https://stream2.jlntv.cn/jilin1/sd/live.m3u8$LR•IPV4•115『线路99』 +新闻综合,http://30515.hlsplay.aodianyun.com/lms_30515/tv_channel_239.m3u8$LR•IPV4•115『线路100』 +新闻综合,https://stream2.jlntv.cn/sptv/sd/live.m3u8$LR•IPV4•115『线路101』 +新闻综合,http://live.ahsz.tv/video/s10001-szzh/index.m3u8$LR•IPV4•115『线路102』 +新闻综合,http://guangshui.live.tempsource.cjyun.org/videotmp/s10146-GSXW.m3u8$LR•IPV4•115『线路103』 +新闻综合,https://stream2.jlntv.cn/jlyb/sd/live.m3u8$LR•IPV4•115『线路104』 +新闻综合,https://stream2.jlntv.cn/sytv/sd/live.m3u8$LR•IPV4•115『线路105』 +新闻综合,http://222.179.155.21:1935/ch1.m3u8$LR•IPV4•115『线路106』 +新闻综合,http://117.172.215.250:8083/videos/live/35/39/GQVbrgob5CGJM/GQVbrgob5CGJM.m3u8$LR•IPV4•115『线路107』 +新闻综合,http://220.180.110.101:8083/videos/live/36/57/hwEHU4UVQ1Iv5/hwEHU4UVQ1Iv5.m3u8$LR•IPV4•115『线路108』 +新闻综合,http://live.hnxttv.com:9601/live/xwzh/800K/tzwj_video.m3u8$LR•IPV4•115『线路109』 +新闻综合,http://stream.bzcm.net/2/sd/live.m3u8$LR•IPV4•115『线路110』 +新闻综合,http://117.156.28.119/270000001111/1110000145/index.m3u8$LR•IPV4•115『线路111』 +新闻综合,https://stream2.jlntv.cn/baishan1/sd/live.m3u8$LR•IPV4•115『线路112』 +新闻综合,http://live1.wuhubtv.com/channel1/sd/live.m3u8$LR•IPV4•115『线路113』 +新闻综合,http://palive.patv123.com:8091/live/xwpd_800K.m3u8$LR•IPV4•115『线路114』 +新闻综合,https://stream2.jlntv.cn/liaoyuan1/sd/live.m3u8$LR•IPV4•115『线路115』 陕西,#genre# -西安新闻,http://stream2.xiancity.cn/xatv1/playlist.m3u8$LR•IPV4•2『线路1』 -西安新闻,http://112.46.105.20:8009/hls/28/index.m3u8$LR•IPV4•2『线路2』 +西安新闻,http://112.46.105.20:8009/hls/28/index.m3u8$LR•IPV4•2『线路1』 +西安新闻,http://stream2.xiancity.cn/xatv1/playlist.m3u8$LR•IPV4•2『线路2』 山东,#genre# 山东少儿,http://123.129.70.178:9901/tsfile/live/1004_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•16『线路1』 @@ -3171,25 +3171,25 @@ NewTV精品体育,http://dl.wifi942.com:66/jsyd/jsyd.php?id=GITV-JS-65$LR•IPV4 凤凰中文,http://120.198.95.220:9901/tsfile/live/1036_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•8『线路3』 凤凰中文,http://218.206.193.218:8888/hls/66/index.m3u8$LR•IPV4•8『线路4』 凤凰中文,http://120.198.95.220:9901/tsfile/live/1036_1.m3u8?key=txiptv$LR•IPV4•8『线路5』 -凤凰中文,http://223.110.245.139/ott.js.chinamobile.com/PLTV/3/224/3221226922/index.m3u8$LR•IPV4•8『线路6』 -凤凰中文,http://r.jdshipin.com/cCCzW$LR•IPV4•8『线路7』 -凤凰中文,http://cdn6.163189.xyz/163189/fhzw$LR•IPV4•8『线路8』 +凤凰中文,http://r.jdshipin.com/cCCzW$LR•IPV4•8『线路6』 +凤凰中文,http://cdn6.163189.xyz/163189/fhzw$LR•IPV4•8『线路7』 +凤凰中文,http://223.110.245.139/ott.js.chinamobile.com/PLTV/3/224/3221226922/index.m3u8$LR•IPV4•8『线路8』 凤凰资讯,http://api.mg.itv888.cn:8080/hls/11ef1dc70d8/index.m3u8$LR•IPV4•10『线路1』 -凤凰资讯,p3p://167.114.175.6:55331/5fffbf860003807cedf4e1016c3c3ed2$LR•IPV4•10『线路2』 -凤凰资讯,http://zmgd.zyrnet.com:8888/hls/109/index.m3u8$LR•IPV4•10『线路3』 -凤凰资讯,http://221.7.175.154:8445/tsfile/live/1021_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•10『线路4』 -凤凰资讯,http://120.198.95.220:9901/tsfile/live/1037_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•10『线路5』 -凤凰资讯,http://120.198.95.220:9901/tsfile/live/1037_1.m3u8?key=txiptv$LR•IPV4•10『线路6』 -凤凰资讯,http://223.110.245.167/ott.js.chinamobile.com/PLTV/3/224/3221226923/index.m3u8$LR•IPV4•10『线路7』 -凤凰资讯,http://r.jdshipin.com/0Rp07$LR•IPV4•10『线路8』 -凤凰资讯,http://php.jdshipin.com/TVOD/iptv.php?id=fhzx$LR•IPV4•10『线路9』 -凤凰资讯,http://cdn6.163189.xyz/163189/fhzx$LR•IPV4•10『线路10』 -凤凰香港,p3p://167.114.175.6:55331/5fe0b82c000cac9774c17f262e43314d$LR•IPV4•6『线路1』 -凤凰香港,http://122.152.202.33/s/81a8a44f/index.m3u8?id=fhhk$LR•IPV4•6『线路2』 -凤凰香港,http://223.110.245.136/PLTV/3/224/3221226975/index.m3u8$LR•IPV4•6『线路3』 -凤凰香港,http://r.jdshipin.com/yDoTN$LR•IPV4•6『线路4』 -凤凰香港,http://php.jdshipin.com/TVOD/iptv.php?id=fhhk$LR•IPV4•6『线路5』 -凤凰香港,http://cdn6.163189.xyz/163189/fhhk$LR•IPV4•6『线路6』 +凤凰资讯,http://zmgd.zyrnet.com:8888/hls/109/index.m3u8$LR•IPV4•10『线路2』 +凤凰资讯,http://221.7.175.154:8445/tsfile/live/1021_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•10『线路3』 +凤凰资讯,http://120.198.95.220:9901/tsfile/live/1037_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•10『线路4』 +凤凰资讯,http://120.198.95.220:9901/tsfile/live/1037_1.m3u8?key=txiptv$LR•IPV4•10『线路5』 +凤凰资讯,p3p://167.114.175.6:55331/5fffbf860003807cedf4e1016c3c3ed2$LR•IPV4•10『线路6』 +凤凰资讯,http://r.jdshipin.com/0Rp07$LR•IPV4•10『线路7』 +凤凰资讯,http://php.jdshipin.com/TVOD/iptv.php?id=fhzx$LR•IPV4•10『线路8』 +凤凰资讯,http://cdn6.163189.xyz/163189/fhzx$LR•IPV4•10『线路9』 +凤凰资讯,http://223.110.245.167/ott.js.chinamobile.com/PLTV/3/224/3221226923/index.m3u8$LR•IPV4•10『线路10』 +凤凰香港,http://122.152.202.33/s/81a8a44f/index.m3u8?id=fhhk$LR•IPV4•6『线路1』 +凤凰香港,p3p://167.114.175.6:55331/5fe0b82c000cac9774c17f262e43314d$LR•IPV4•6『线路2』 +凤凰香港,http://r.jdshipin.com/yDoTN$LR•IPV4•6『线路3』 +凤凰香港,http://php.jdshipin.com/TVOD/iptv.php?id=fhhk$LR•IPV4•6『线路4』 +凤凰香港,http://cdn6.163189.xyz/163189/fhhk$LR•IPV4•6『线路5』 +凤凰香港,http://223.110.245.136/PLTV/3/224/3221226975/index.m3u8$LR•IPV4•6『线路6』 TVB翡翠台,p3p://167.114.175.6:55331/653e4c02000ea0440c8c63fd3e5d709d$LR•IPV4•12『线路1』 TVB翡翠台,p3p://167.114.175.6:55331/66c04cec000a20ac2dbf03c71cf661c9$LR•IPV4•12『线路2』 TVB翡翠台,p3p://108.181.32.169:19673/6533f6560002787f2d01338b57197695$LR•IPV4•12『线路3』 @@ -3240,18 +3240,18 @@ TVBS,http://seb.sason.top/sc/tvbsxw_fhd.m3u8$LR•IPV4•13『线路13』 台视,rtmp://f13h.mine.nu/sat/tv071$LR•IPV4•10『线路6』 台视,p3p://167.114.175.6:55331/612ee2240008f3db8e0578dc59406f9e$LR•IPV4•10『线路7』 台视,p3p://167.114.175.6:55331/6223b571000a13023e78ece5030b5b05$LR•IPV4•10『线路8』 -台视,http://162.19.247.76:22222/live/taishi/index.m3u8$LR•IPV4•10『线路9』 -台视,http://38.64.72.148/hls/modn/list/4013/chunklist1.m3u8$LR•IPV4•10『线路10』 +台视,http://38.64.72.148/hls/modn/list/4013/chunklist1.m3u8$LR•IPV4•10『线路9』 +台视,http://162.19.247.76:22222/live/taishi/index.m3u8$LR•IPV4•10『线路10』 民视新闻,http://38.64.72.148:80/hls/modn/list/4012/chunklist0.m3u8$LR•IPV4•4『线路1』 民视新闻,http://38.64.72.148:80/hls/modn/list/4012/chunklist1.m3u8$LR•IPV4•4『线路2』 民视新闻,http://38.64.72.148/hls/modn/list/4012/chunklist0.m3u8$LR•IPV4•4『线路3』 民视新闻,http://38.64.72.148/hls/modn/list/4012/chunklist1.m3u8$LR•IPV4•4『线路4』 耀才财经,https://v3.mediacast.hk/webcast/bshdlive-pc/playlist.m3u8$LR•IPV4•3『线路1』 -耀才财经,http://202.69.67.66:443/webcast/bshdlive-mobile/playlist.m3u8$LR•IPV4•3『线路2』 -耀才财经,https://v3.mediacast.hk/webcast/bshdlive-pc/chunklist_w99771165.m3u8$LR•IPV4•3『线路3』 -美亚C+,http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/01.m3u8$LR•IPV4•3『线路1』 -美亚C+,http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/02.m3u8$LR•IPV4•3『线路2』 -美亚C+,http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/03.m3u8$LR•IPV4•3『线路3』 +耀才财经,https://v3.mediacast.hk/webcast/bshdlive-pc/chunklist_w99771165.m3u8$LR•IPV4•3『线路2』 +耀才财经,http://202.69.67.66:443/webcast/bshdlive-mobile/playlist.m3u8$LR•IPV4•3『线路3』 +美亚C+,http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/03.m3u8$LR•IPV4•3『线路1』 +美亚C+,http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/01.m3u8$LR•IPV4•3『线路2』 +美亚C+,http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/02.m3u8$LR•IPV4•3『线路3』 数位电影,p3p://167.114.175.6:55331/6223ae1b0007136f3e5c44280e3300fa$LR•IPV4 龙华偶像,http://cdn8.163189.xyz/163189/lhox$LR•IPV4•3『线路1』 龙华偶像,p3p://167.114.175.6:55331/609bb1b0000732744f174daa791d3b43$LR•IPV4•3『线路2』 @@ -3261,31 +3261,31 @@ TVBS,http://seb.sason.top/sc/tvbsxw_fhd.m3u8$LR•IPV4•13『线路13』 龙华经典,https://cdn8.163189.xyz/live/lhjd/stream.m3u8$LR•IPV4•3『线路3』 纬来日本,rtmp://f13h.mine.nu/sat/tv771$LR•IPV4•2『线路1』 纬来日本,p3p://167.114.175.6:55331/5fe1add80007bbbd788125c43bf36060$LR•IPV4•2『线路2』 -纬来体育,rtmp://f13h.mine.nu:1935/sat/tv721$LR•IPV4•25『线路1』 -纬来体育,http://211.72.65.236:8585/.m3u8$LR•IPV4•25『线路2』 -纬来体育,rtmp://f13h.mine.nu/sat/tv721$LR•IPV4•25『线路3』 -纬来体育,http://125.227.210.55:8155/VideoInput/play.ts$LR•IPV4•25『线路4』 -纬来体育,https://stream1.freetv.fun/wei-lai-ti-yu-9.ctv$LR•IPV4•25『线路5』 -纬来体育,https://epg.pw/stream/ab6df63b64d0cc44a1f4f029ed847a26fa54a7aebd455578fb05a63f02c22f4b.m3u8$LR•IPV4•25『线路6』 -纬来体育,http://zb.xmzb.xyz/123.php?id=⚽马上oppppp一纬来体育$LR•IPV4•25『线路7』 -纬来体育,https://cdn.iptv8k.top/dl/jrys.php?id=292&time=20240926215313&ip=111.229.253.40$LR•IPV4•25『线路8』 -纬来体育,http://aktv_stream1.m16tv.cfd/stream/tuntun/null/AKTV.m3u8$LR•IPV4•25『线路9』 -纬来体育,https://epg.pw/stream/8855a9936e37e608a0ec8a014cce1673dee9c5d68d560da376cc92e5edef2b25.m3u8$LR•IPV4•25『线路10』 -纬来体育,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=1978&tk=e640d0a1bf70$LR•IPV4•25『线路11』 -纬来体育,https://hls-gateway.vpstv.net/streams/477026.m3u8$LR•IPV4•25『线路12』 -纬来体育,http://122.117.71.103:8562/http/61.222.53.250:8081/hls/67/809/ch28.m3u8$LR•IPV4•25『线路13』 -纬来体育,https://epg.pw/stream/4f18dfe0593db5c686eb64ae8edaf2a9202d4d46bdc9bbde2cee27708e12ea01.m3u8$LR•IPV4•25『线路14』 -纬来体育,https://cdn.iptv8k.top/dl/jrys.php?id=291&time=20240926215313&ip=111.229.253.40$LR•IPV4•25『线路15』 -纬来体育,https://hls.iill.top/api/wlty/index.m3u8$LR•IPV4•25『线路16』 -纬来体育,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=2056&tk=e640d0a1bf70$LR•IPV4•25『线路17』 -纬来体育,http://aktv_stream1.m16tv.cfd/stream/aktv3/null-1/AKTV.m3u8$LR•IPV4•25『线路18』 -纬来体育,https://stream1.freetv.fun/wei-lai-ti-yu-3.m3u8$LR•IPV4•25『线路19』 -纬来体育,http://148.135.34.95/mn.php?playurl=http://www.pelotas.org:8278/videolandsport/playlist.m3u8$LR•IPV4•25『线路20』 -纬来体育,http://api3.52tb.xyz/info?id=376&token=20221127jxwhhemby$LR•IPV4•25『线路21』 -纬来体育,https://smart.pendy.dpdns.org/Smart.php?id=videolandsport$LR•IPV4•25『线路22』 -纬来体育,https://cdn.iptv8k.top/dl/jrys.php?id=292&time=20240926215313&ip=111.229.253.40$LR•IPV4•25『线路23』 -纬来体育,http://api.mytv666.top/api/qwt.php?t=体育频道&id=纬来体育$LR•IPV4•25『线路24』 -纬来体育,http://aktv.top/AKTV/live/aktv3/null-1/AKTV.m3u8$LR•IPV4•25『线路25』 +纬来体育,https://epg.pw/stream/ab6df63b64d0cc44a1f4f029ed847a26fa54a7aebd455578fb05a63f02c22f4b.m3u8$LR•IPV4•25『线路1』 +纬来体育,http://zb.xmzb.xyz/123.php?id=⚽马上oppppp一纬来体育$LR•IPV4•25『线路2』 +纬来体育,https://cdn.iptv8k.top/dl/jrys.php?id=292&time=20240926215313&ip=111.229.253.40$LR•IPV4•25『线路3』 +纬来体育,http://aktv_stream1.m16tv.cfd/stream/tuntun/null/AKTV.m3u8$LR•IPV4•25『线路4』 +纬来体育,https://epg.pw/stream/8855a9936e37e608a0ec8a014cce1673dee9c5d68d560da376cc92e5edef2b25.m3u8$LR•IPV4•25『线路5』 +纬来体育,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=1978&tk=e640d0a1bf70$LR•IPV4•25『线路6』 +纬来体育,https://hls-gateway.vpstv.net/streams/477026.m3u8$LR•IPV4•25『线路7』 +纬来体育,http://122.117.71.103:8562/http/61.222.53.250:8081/hls/67/809/ch28.m3u8$LR•IPV4•25『线路8』 +纬来体育,https://epg.pw/stream/4f18dfe0593db5c686eb64ae8edaf2a9202d4d46bdc9bbde2cee27708e12ea01.m3u8$LR•IPV4•25『线路9』 +纬来体育,https://cdn.iptv8k.top/dl/jrys.php?id=291&time=20240926215313&ip=111.229.253.40$LR•IPV4•25『线路10』 +纬来体育,https://hls.iill.top/api/wlty/index.m3u8$LR•IPV4•25『线路11』 +纬来体育,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=2056&tk=e640d0a1bf70$LR•IPV4•25『线路12』 +纬来体育,http://aktv_stream1.m16tv.cfd/stream/aktv3/null-1/AKTV.m3u8$LR•IPV4•25『线路13』 +纬来体育,https://stream1.freetv.fun/wei-lai-ti-yu-3.m3u8$LR•IPV4•25『线路14』 +纬来体育,http://148.135.34.95/mn.php?playurl=http://www.pelotas.org:8278/videolandsport/playlist.m3u8$LR•IPV4•25『线路15』 +纬来体育,http://api3.52tb.xyz/info?id=376&token=20221127jxwhhemby$LR•IPV4•25『线路16』 +纬来体育,https://smart.pendy.dpdns.org/Smart.php?id=videolandsport$LR•IPV4•25『线路17』 +纬来体育,https://cdn.iptv8k.top/dl/jrys.php?id=292&time=20240926215313&ip=111.229.253.40$LR•IPV4•25『线路18』 +纬来体育,http://api.mytv666.top/api/qwt.php?t=体育频道&id=纬来体育$LR•IPV4•25『线路19』 +纬来体育,http://aktv.top/AKTV/live/aktv3/null-1/AKTV.m3u8$LR•IPV4•25『线路20』 +纬来体育,rtmp://f13h.mine.nu:1935/sat/tv721$LR•IPV4•25『线路21』 +纬来体育,http://211.72.65.236:8585/.m3u8$LR•IPV4•25『线路22』 +纬来体育,rtmp://f13h.mine.nu/sat/tv721$LR•IPV4•25『线路23』 +纬来体育,http://125.227.210.55:8155/VideoInput/play.ts$LR•IPV4•25『线路24』 +纬来体育,https://stream1.freetv.fun/wei-lai-ti-yu-9.ctv$LR•IPV4•25『线路25』 中视闽南,rtmp://f13h.mine.nu/sat/tv091$LR•IPV4 中视新闻,https://raw.githubusercontent.com/ChiSheng9/iptv/master/TV09.m3u8$LR•IPV4 中天娱乐,http://61.221.215.25:8800/hls/47/index.m3u8$LR•IPV4 @@ -3394,12 +3394,12 @@ Now剧集,p3p://167.114.175.6:55331/63ed3e1500077d30e7f449055a0846ce$LR•IPV4 民视,https://raw.githubusercontent.com/ChiSheng9/iptv/master/TV17.m3u8$LR•IPV4•2『线路1』 民视,rtmp://f13h.mine.nu/sat/tv051$LR•IPV4•2『线路2』 MoMo综合,p3p://167.114.175.6:55331/621e17750005eaa02887cb6e61ea2a58$LR•IPV4 -ELEVEN体育1,https://smart.pendy.dpdns.org/Smart.php?id=eltasport1_twn$LR•IPV4•3『线路1』 -ELEVEN体育1,rtmp://f13h.mine.nu/sat/tv731$LR•IPV4•3『线路2』 -ELEVEN体育1,https://stream1.freetv.fun/eltaai-er-da-ti-yu--1--wj-1.ctv$LR•IPV4•3『线路3』 -ELEVEN体育2,https://smart.pendy.dpdns.org/Smart.php?id=eltasport2_twn$LR•IPV4•3『线路1』 -ELEVEN体育2,rtmp://f13h.mine.nu/sat/tv741$LR•IPV4•3『线路2』 -ELEVEN体育2,https://stream1.freetv.fun/eltaai-er-da-ti-yu--2--wj-1.ctv$LR•IPV4•3『线路3』 +ELEVEN体育1,https://stream1.freetv.fun/eltaai-er-da-ti-yu--1--wj-1.ctv$LR•IPV4•3『线路1』 +ELEVEN体育1,https://smart.pendy.dpdns.org/Smart.php?id=eltasport1_twn$LR•IPV4•3『线路2』 +ELEVEN体育1,rtmp://f13h.mine.nu/sat/tv731$LR•IPV4•3『线路3』 +ELEVEN体育2,https://stream1.freetv.fun/eltaai-er-da-ti-yu--2--wj-1.ctv$LR•IPV4•3『线路1』 +ELEVEN体育2,https://smart.pendy.dpdns.org/Smart.php?id=eltasport2_twn$LR•IPV4•3『线路2』 +ELEVEN体育2,rtmp://f13h.mine.nu/sat/tv741$LR•IPV4•3『线路3』 半岛新闻,http://live-hls-web-aje.getaj.net/AJE/01.m3u8$LR•IPV4•4『线路1』 半岛新闻,https://live-hls-web-aje.getaj.net/AJE/01.m3u8$LR•IPV4•4『线路2』 半岛新闻,https://live-hls-web-aje.getaj.net/AJE/02.m3u8$LR•IPV4•4『线路3』 @@ -3434,10 +3434,10 @@ RTHK32,http://php.jdshipin.com:8880/TVOD/iptv.php?id=rthk32$LR•IPV4 东森超视,rtmp://f13h.mine.nu/sat/tv331$LR•IPV4•3『线路3』 ROCK Action,p3p://167.114.175.6:55331/65ad274400000b46bd92da681fce74f2$LR•IPV4•2『线路1』 ROCK Action,http://nmk.ioapk.com:5050/4gtv-live138/index.m3u8$LR•IPV4•2『线路2』 -TVB Plus,http://rihou.cc:555/tv/[Pd]Plus综合$LR•IPV4•4『线路1』 -TVB Plus,p3p://167.114.175.6:55331/6649bce20008d56453eeebfc022701f1$LR•IPV4•4『线路2』 -TVB Plus,p3p://167.114.175.6:55331/653e4d3e000b344f0c91357e73163f82$LR•IPV4•4『线路3』 -TVB Plus,http://r.jdshipin.com/ndGgS$LR•IPV4•4『线路4』 +TVB Plus,http://r.jdshipin.com/ndGgS$LR•IPV4•4『线路1』 +TVB Plus,http://rihou.cc:555/tv/[Pd]Plus综合$LR•IPV4•4『线路2』 +TVB Plus,p3p://167.114.175.6:55331/6649bce20008d56453eeebfc022701f1$LR•IPV4•4『线路3』 +TVB Plus,p3p://167.114.175.6:55331/653e4d3e000b344f0c91357e73163f82$LR•IPV4•4『线路4』 AXN,p3p://167.114.175.6:55331/66d23a53000d25d573c606e3274f26c5$LR•IPV4•24『线路1』 AXN,p3p://167.114.175.6:55331/6258ddc5000ee8a40e1bc8f50dec545c$LR•IPV4•24『线路2』 AXN,http://45.190.28.50/AXN_HD/index.m3u8$LR•IPV4•24『线路3』 @@ -3463,8 +3463,8 @@ AXN,http://88.212.15.19/live/test_white/playlist.m3u8$LR•IPV4•24『线路22 AXN,http://50.7.120.34:8080/AXN_WHITE/index.m3u8$LR•IPV4•24『线路23』 AXN,http://103.137.83.62:9090/play/21/index.m3u8$LR•IPV4•24『线路24』 娱乐新闻,https://hls-gateway.vpstv.net/streams/708904.m3u8$LR•IPV4 -澳门卫视,http://php.jdshipin.com:8880/TVOD/iptv.php?id=as$LR•IPV4•2『线路1』 -澳门卫视,http://61.244.22.4/ch1/ch1.live/playlist.m3u8$LR•IPV4•2『线路2』 +澳门卫视,http://61.244.22.4/ch1/ch1.live/playlist.m3u8$LR•IPV4•2『线路1』 +澳门卫视,http://php.jdshipin.com:8880/TVOD/iptv.php?id=as$LR•IPV4•2『线路2』 Pet Club TV,https://cdn-apse1-prod.tsv2.amagi.tv/linear/amg01076-lightningintern-petclub-samsungnz/playlist.m3u8$LR•IPV4•2『线路1』 Pet Club TV,https://petclub-samsungaus.amagi.tv/playlist.m3u8$LR•IPV4•2『线路2』 Bloomberg TV Asia,http://210.210.155.37/dr9445/h/h03/index.m3u8$LR•IPV4•3『线路1』 @@ -3553,8 +3553,8 @@ KPop,https://ads.its-newid.net/api/manifest.m3u8?ads.service_id=USAJ3000013FJ&ch KPop,https://ads.its-newid.net/api/manifest.m3u8?ads.service_id=GB17000088V&channel_id=newid_086&tp=samsung_tvplus$LR•IPV4•5『线路4』 KPop,https://lotus.stingray.com/manifest/ose-317ads-montreal/samsungtvplus/master.m3u8$LR•IPV4•5『线路5』 HOY TV,p3p://167.114.175.6:55331/62184bc3000cd48f11e47b06202b7e18$LR•IPV4•3『线路1』 -HOY TV,https://hoytv-live-stream.hoy.tv/ch77/index.m3u8$LR•IPV4•3『线路2』 -HOY TV,http://php.jdshipin.com/TVOD/iptv.php?id=hoytv$LR•IPV4•3『线路3』 +HOY TV,http://php.jdshipin.com/TVOD/iptv.php?id=hoytv$LR•IPV4•3『线路2』 +HOY TV,https://hoytv-live-stream.hoy.tv/ch77/index.m3u8$LR•IPV4•3『线路3』 MOMOTV,rtmp://f13h.mine.nu/sat/tv761$LR•IPV4 大爱1,p3p://167.114.175.6:55331/63ed9fff00076875e972c31c79f4152e$LR•IPV4 大爱2,p3p://167.114.175.6:55331/63eda04a0001f6fae973e6a334696980$LR•IPV4 @@ -3588,10 +3588,10 @@ Xite Hits,https://d726x48n2pd5h.cloudfront.net/v1/master/3722c60a815c199d9c0ef36 Xite Hits,https://amg01243-xitenetworksint-hitsuk-samsunguk-mvovq.amagi.tv/playlist/amg01243-xitenetworksint-hitsuk-samsunguk/playlist.m3u8$LR•IPV4•3『线路3』 Xite Rock,https://d198ro05q94rc4.cloudfront.net/XITE_Rock_On.m3u8$LR•IPV4 FIGHT SPORTS,p3p://167.114.175.6:55331/65a4480e000eb9449aeb1d5a33663b73$LR•IPV4 -NBA TV,http://170.yfvodcdn.com:19980/live/nbaTV2/hls.m3u8$LR•IPV4•6『线路1』 -NBA TV,p3p://167.114.175.6:55331/65a587500007bc039fca3566638e69af$LR•IPV4•6『线路2』 -NBA TV,https://stream1.freetv.fun/nba-tv-7.m3u8$LR•IPV4•6『线路3』 -NBA TV,https://stream1.freetv.fun/nba-tv-5.m3u8$LR•IPV4•6『线路4』 +NBA TV,https://stream1.freetv.fun/nba-tv-7.m3u8$LR•IPV4•6『线路1』 +NBA TV,https://stream1.freetv.fun/nba-tv-5.m3u8$LR•IPV4•6『线路2』 +NBA TV,http://170.yfvodcdn.com:19980/live/nbaTV2/hls.m3u8$LR•IPV4•6『线路3』 +NBA TV,p3p://167.114.175.6:55331/65a587500007bc039fca3566638e69af$LR•IPV4•6『线路4』 NBA TV,https://amg00556-amg00556c3-firetv-us-6060.playouts.now.amagi.tv/playlist.m3u8$LR•IPV4•6『线路5』 NBA TV,http://user.scalecdn.co:8080/live/54706135/09221986/3092.m3u8$LR•IPV4•6『线路6』 Sukan,https://d25tgymtnqzu8s.cloudfront.net/smil:sukan/manifest.mpd$LR•IPV4 @@ -3797,8 +3797,8 @@ FIFA+,https://d63fabad.wurl.com/master/f36d25e7e52f1ba8d7e56eb859c636563214f541/ FIFA+,https://d2w9q46ikgrcwx.cloudfront.net/v1/master/3722c60a815c199d9c0ef36c5b73da68a62b09d1/cc-of5cbk3sav3w5/v1/sysdata_s_p_a_fifa_7/samsungheadend_us/latest/main/hls/playlist.m3u8$LR•IPV4•9『线路8』 FIFA+,https://cffda8ff.wurl.com/master/f36d25e7e52f1ba8d7e56eb859c636563214f541/U2Ftc3VuZy1nYl9GSUZBUGx1c3dvbWVuX0hMUw/playlist.m3u8$LR•IPV4•9『线路9』 Newsmax,https://nmx1ota.akamaized.net/hls/live/2107010/Live_1/3.m3u8$LR•IPV4•8『线路1』 -Newsmax,https://nmxlive.akamaized.net/hls/live/529965/Live_1/index.m3u8$LR•IPV4•8『线路2』 -Newsmax,http://nmxlive.akamaized.net/hls/live/529965/Live_1/index.m3u8$LR•IPV4•8『线路3』 +Newsmax,http://nmxlive.akamaized.net/hls/live/529965/Live_1/index.m3u8$LR•IPV4•8『线路2』 +Newsmax,https://nmxlive.akamaized.net/hls/live/529965/Live_1/index.m3u8$LR•IPV4•8『线路3』 Newsmax,https://2-fss-2.streamhoster.com/pl_120/206858-4404556-1/playlist.m3u8$LR•IPV4•8『线路4』 Newsmax,https://amg00217-newsmax-newsmax-zeasn-022k9.amagi.tv/playlist.m3u8$LR•IPV4•8『线路5』 Newsmax,https://newsmaxadria.mts-si.tv/newsmaxadria/index.m3u8$LR•IPV4•8『线路6』 @@ -3870,10 +3870,10 @@ MovieSphere,https://amg00353-lionsgatestudio-moviesphere-xumo-zh5u0.amagi.tv/pla MovieSphere,https://amg00353-lionsgatefilmsi-moviesphereaus-samsungau-7qzhf.amagi.tv/playlist/amg00353-lionsgatefilmsi-moviesphereaus-samsungau/playlist.m3u8$LR•IPV4•5『线路4』 MovieSphere,https://jmp2.uk/plu-64a3d96f060e830008af6745.m3u8$LR•IPV4•5『线路5』 香港国际财经,p3p://167.114.175.6:55331/64838620000cd8ed32fb0d6a414411f7$LR•IPV4 -Bloomberg,https://bloomberg-bloombergtv-3-nl.samsung.wurl.tv/playlist.m3u8$LR•IPV4•16『线路1』 -Bloomberg,https://bloomberg-bloombergtv-5-eu.plex.wurl.tv/3ea2c48ba0034cc276591c94a5b439c0.m3u8$LR•IPV4•16『线路2』 -Bloomberg,https://liveprodusphoenixeast.akamaized.net/USPhx-HD/Channel-TX-USPhx-AWS-virginia-1/Source-USPhx-16k-1-s6lk2-BP-07-02-81ykIWnsMsg_live.m3u8$LR•IPV4•16『线路3』 -Bloomberg,https://epg.pw/stream/d2edf469b9079064a283f4b0811cbf6f2597ebbb3d08dcf77036a4b5a791b7cf.m3u8$LR•IPV4•16『线路4』 +Bloomberg,https://epg.pw/stream/d2edf469b9079064a283f4b0811cbf6f2597ebbb3d08dcf77036a4b5a791b7cf.m3u8$LR•IPV4•16『线路1』 +Bloomberg,https://bloomberg-bloombergtv-3-nl.samsung.wurl.tv/playlist.m3u8$LR•IPV4•16『线路2』 +Bloomberg,https://bloomberg-bloombergtv-5-eu.plex.wurl.tv/3ea2c48ba0034cc276591c94a5b439c0.m3u8$LR•IPV4•16『线路3』 +Bloomberg,https://liveprodusphoenixeast.akamaized.net/USPhx-HD/Channel-TX-USPhx-AWS-virginia-1/Source-USPhx-16k-1-s6lk2-BP-07-02-81ykIWnsMsg_live.m3u8$LR•IPV4•16『线路4』 Bloomberg,https://ciner.daioncdn.net/bloomberght/bloomberght.m3u8$LR•IPV4•16『线路5』 Bloomberg,http://23.237.104.106:8080/USA_BLOOMBERG/index.m3u8$LR•IPV4•16『线路6』 Bloomberg,https://bloomberg.com/media-manifest/streams/aus.m3u8$LR•IPV4•16『线路7』 diff --git a/tvbox/lib/iptv_test.m3u b/tvbox/lib/iptv_test.m3u index a28a16f6..5776f5e7 100755 --- a/tvbox/lib/iptv_test.m3u +++ b/tvbox/lib/iptv_test.m3u @@ -1,8 +1,8 @@ #EXTM3U #EXTINF:-1 tvg-id="CCTV4K" tvg-name="CCTV4K" group-title="央视频道",CCTV-4K -https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4k_mbd.m3u8?auth_key=1784322000-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-aa68fb06c12f53b71a4d170807f32df5&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•3『线路1』 +https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4k_mbd.m3u8?auth_key=1784329200-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-81ad4aefc95ce528b3da1112f0bc9ff2&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•3『线路1』 #EXTINF:-1 tvg-id="CCTV4K" tvg-name="CCTV4K" group-title="央视频道",CCTV-4K -https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4k_mbd.m3u8?auth_key=1784325600-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-da48bbac79b9621fa8f084ece04c2c91&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•3『线路2』 +https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4k_mbd.m3u8?auth_key=1784322000-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-aa68fb06c12f53b71a4d170807f32df5&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•3『线路2』 #EXTINF:-1 tvg-id="CCTV4K" tvg-name="CCTV4K" group-title="央视频道",CCTV-4K http://198.204.240.250:82/live/cctv4k.m3u8$LR•IPV4•3『线路3』 #EXTINF:-1 tvg-id="象山综合" tvg-name="象山综合" group-title="浙江频道",象山综合 @@ -92,9 +92,9 @@ http://php.jdshipin.com:8880/TVOD/iptv.php?id=rthk32$LR•IPV4 #EXTINF:-1 tvg-id="韩国EBS少儿" tvg-name="韩国EBS少儿" group-title="动画频道",韩国EBS少儿 http://ebsonairios.ebs.co.kr/ebsutablet500k/tablet500k/playlist.m3u8$LR•IPV4 #EXTINF:-1 tvg-id="七龙珠" tvg-name="七龙珠" group-title="动画频道",七龙珠 -http://103.193.151.146/huya.php?id=11601966$LR•IPV4•2『线路1』 +https://live.metshop.top/huya/11601966$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="七龙珠" tvg-name="七龙珠" group-title="动画频道",七龙珠 -https://live.metshop.top/huya/11601966$LR•IPV4•2『线路2』 +http://103.193.151.146/huya.php?id=11601966$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="哆啦A梦" tvg-name="哆啦A梦" group-title="动画频道",哆啦A梦 http://103.193.151.146/huya.php?id=11601963$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="哆啦A梦" tvg-name="哆啦A梦" group-title="动画频道",哆啦A梦 @@ -138,23 +138,23 @@ http://zzy789.xyz/douyu1.php?id=6863367$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="经典剧集" tvg-name="经典剧集" group-title="斗鱼影视",经典剧集 http://www.goodiptv.club/douyu/6863367$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="热门港剧" tvg-name="热门港剧" group-title="斗鱼影视",热门港剧 -http://zzy789.xyz/douyu1.php?id=5522351$LR•IPV4•3『线路1』 +http://www.goodiptv.club/douyu/5522351$LR•IPV4•3『线路1』 #EXTINF:-1 tvg-id="热门港剧" tvg-name="热门港剧" group-title="斗鱼影视",热门港剧 -http://huanqiuzhibo.cn/manifest/douyu.php?id=5522351$LR•IPV4•3『线路2』 +http://zzy789.xyz/douyu1.php?id=5522351$LR•IPV4•3『线路2』 #EXTINF:-1 tvg-id="热门港剧" tvg-name="热门港剧" group-title="斗鱼影视",热门港剧 -http://www.goodiptv.club/douyu/5522351$LR•IPV4•3『线路3』 +http://huanqiuzhibo.cn/manifest/douyu.php?id=5522351$LR•IPV4•3『线路3』 #EXTINF:-1 tvg-id="贝爷求生" tvg-name="贝爷求生" group-title="斗鱼影视",贝爷求生 -https://stream1.freetv.fun/f92ea9cae12af707c587af406ddb929ea9f58aae893845b713679aab4b1df9f8.ctv$LR•IPV4•6『线路1』 +http://www.goodiptv.club/douyu/9661369$LR•IPV4•6『线路1』 #EXTINF:-1 tvg-id="贝爷求生" tvg-name="贝爷求生" group-title="斗鱼影视",贝爷求生 -http://fy27.zbds.top:55455/douyu/9661369$LR•IPV4•6『线路2』 +https://stream1.freetv.fun/f92ea9cae12af707c587af406ddb929ea9f58aae893845b713679aab4b1df9f8.ctv$LR•IPV4•6『线路2』 #EXTINF:-1 tvg-id="贝爷求生" tvg-name="贝爷求生" group-title="斗鱼影视",贝爷求生 -https://www.goodiptv.club/douyu/9661369$LR•IPV4•6『线路3』 +http://fy27.zbds.top:55455/douyu/9661369$LR•IPV4•6『线路3』 #EXTINF:-1 tvg-id="贝爷求生" tvg-name="贝爷求生" group-title="斗鱼影视",贝爷求生 -http://159.75.85.63:35455/douyu/454867$LR•IPV4•6『线路4』 +https://www.goodiptv.club/douyu/9661369$LR•IPV4•6『线路4』 #EXTINF:-1 tvg-id="贝爷求生" tvg-name="贝爷求生" group-title="斗鱼影视",贝爷求生 -http://zzy789.xyz/douyu1.php?id=454867$LR•IPV4•6『线路5』 +http://159.75.85.63:35455/douyu/454867$LR•IPV4•6『线路5』 #EXTINF:-1 tvg-id="贝爷求生" tvg-name="贝爷求生" group-title="斗鱼影视",贝爷求生 -http://www.goodiptv.club/douyu/9661369$LR•IPV4•6『线路6』 +http://zzy789.xyz/douyu1.php?id=454867$LR•IPV4•6『线路6』 #EXTINF:-1 tvg-id="少年包青天第一部" tvg-name="少年包青天第一部" group-title="电视剧频道",少年包青天第一部 https://live.ottiptv.cc/yy/1356043677$LR•IPV4 #EXTINF:-1 tvg-id="少年包青天第三部" tvg-name="少年包青天第三部" group-title="电视剧频道",少年包青天第三部 @@ -168,9 +168,9 @@ https://live.ottiptv.cc/huya/29580970$LR•IPV4 #EXTINF:-1 tvg-id="特种兵之火凤凰" tvg-name="特种兵之火凤凰" group-title="电视剧频道",特种兵之火凤凰 https://live.ottiptv.cc/huya/29982636$LR•IPV4 #EXTINF:-1 tvg-id="士兵突击" tvg-name="士兵突击" group-title="电视剧频道",士兵突击 -https://live.metshop.top/huya/11342430$LR•IPV4•2『线路1』 +https://live.ottiptv.cc/huya/11342430$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="士兵突击" tvg-name="士兵突击" group-title="电视剧频道",士兵突击 -https://live.ottiptv.cc/huya/11342430$LR•IPV4•2『线路2』 +https://live.metshop.top/huya/11342430$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="天龙八部" tvg-name="天龙八部" group-title="电视剧频道",天龙八部 https://live.ottiptv.cc/yy/1351814644$LR•IPV4 #EXTINF:-1 tvg-id="倚天屠龙记" tvg-name="倚天屠龙记" group-title="电视剧频道",倚天屠龙记 @@ -178,9 +178,9 @@ http://cdn.jdshipin.com:8880/huya.php?id=23734246$LR•IPV4 #EXTINF:-1 tvg-id="康熙王朝" tvg-name="康熙王朝" group-title="电视剧频道",康熙王朝 https://live.ottiptv.cc/huya/11352940$LR•IPV4 #EXTINF:-1 tvg-id="庆余年" tvg-name="庆余年" group-title="电视剧频道",庆余年 -http://58.39.190.143:35455/huya/11352960$LR•IPV4•2『线路1』 +https://live.ottiptv.cc/huya/11352960$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="庆余年" tvg-name="庆余年" group-title="电视剧频道",庆余年 -https://live.ottiptv.cc/huya/11352960$LR•IPV4•2『线路2』 +http://58.39.190.143:35455/huya/11352960$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="鬼吹灯之精绝古城" tvg-name="鬼吹灯之精绝古城" group-title="电视剧频道",鬼吹灯之精绝古城 https://live.ottiptv.cc/huya/11352871$LR•IPV4 #EXTINF:-1 tvg-id="鬼吹灯之怒晴湘西" tvg-name="鬼吹灯之怒晴湘西" group-title="电视剧频道",鬼吹灯之怒晴湘西 @@ -834,43 +834,43 @@ http://218.206.193.218:8888/hls/66/index.m3u8$LR•IPV4•8『线路4』 #EXTINF:-1 tvg-id="凤凰卫视中文台" tvg-name="凤凰卫视中文台" group-title="港澳台",凤凰卫视中文台 http://120.198.95.220:9901/tsfile/live/1036_1.m3u8?key=txiptv$LR•IPV4•8『线路5』 #EXTINF:-1 tvg-id="凤凰卫视中文台" tvg-name="凤凰卫视中文台" group-title="港澳台",凤凰卫视中文台 -http://223.110.245.139/ott.js.chinamobile.com/PLTV/3/224/3221226922/index.m3u8$LR•IPV4•8『线路6』 +http://r.jdshipin.com/cCCzW$LR•IPV4•8『线路6』 #EXTINF:-1 tvg-id="凤凰卫视中文台" tvg-name="凤凰卫视中文台" group-title="港澳台",凤凰卫视中文台 -http://r.jdshipin.com/cCCzW$LR•IPV4•8『线路7』 +http://cdn6.163189.xyz/163189/fhzw$LR•IPV4•8『线路7』 #EXTINF:-1 tvg-id="凤凰卫视中文台" tvg-name="凤凰卫视中文台" group-title="港澳台",凤凰卫视中文台 -http://cdn6.163189.xyz/163189/fhzw$LR•IPV4•8『线路8』 +http://223.110.245.139/ott.js.chinamobile.com/PLTV/3/224/3221226922/index.m3u8$LR•IPV4•8『线路8』 #EXTINF:-1 tvg-id="凤凰卫视资讯台" tvg-name="凤凰卫视资讯台" group-title="港澳台",凤凰卫视资讯台 http://api.mg.itv888.cn:8080/hls/11ef1dc70d8/index.m3u8$LR•IPV4•10『线路1』 #EXTINF:-1 tvg-id="凤凰卫视资讯台" tvg-name="凤凰卫视资讯台" group-title="港澳台",凤凰卫视资讯台 -p3p://167.114.175.6:55331/5fffbf860003807cedf4e1016c3c3ed2$LR•IPV4•10『线路2』 +http://zmgd.zyrnet.com:8888/hls/109/index.m3u8$LR•IPV4•10『线路2』 #EXTINF:-1 tvg-id="凤凰卫视资讯台" tvg-name="凤凰卫视资讯台" group-title="港澳台",凤凰卫视资讯台 -http://zmgd.zyrnet.com:8888/hls/109/index.m3u8$LR•IPV4•10『线路3』 +http://221.7.175.154:8445/tsfile/live/1021_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•10『线路3』 #EXTINF:-1 tvg-id="凤凰卫视资讯台" tvg-name="凤凰卫视资讯台" group-title="港澳台",凤凰卫视资讯台 -http://221.7.175.154:8445/tsfile/live/1021_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•10『线路4』 +http://120.198.95.220:9901/tsfile/live/1037_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•10『线路4』 #EXTINF:-1 tvg-id="凤凰卫视资讯台" tvg-name="凤凰卫视资讯台" group-title="港澳台",凤凰卫视资讯台 -http://120.198.95.220:9901/tsfile/live/1037_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•10『线路5』 +http://120.198.95.220:9901/tsfile/live/1037_1.m3u8?key=txiptv$LR•IPV4•10『线路5』 #EXTINF:-1 tvg-id="凤凰卫视资讯台" tvg-name="凤凰卫视资讯台" group-title="港澳台",凤凰卫视资讯台 -http://120.198.95.220:9901/tsfile/live/1037_1.m3u8?key=txiptv$LR•IPV4•10『线路6』 +p3p://167.114.175.6:55331/5fffbf860003807cedf4e1016c3c3ed2$LR•IPV4•10『线路6』 #EXTINF:-1 tvg-id="凤凰卫视资讯台" tvg-name="凤凰卫视资讯台" group-title="港澳台",凤凰卫视资讯台 -http://223.110.245.167/ott.js.chinamobile.com/PLTV/3/224/3221226923/index.m3u8$LR•IPV4•10『线路7』 +http://r.jdshipin.com/0Rp07$LR•IPV4•10『线路7』 #EXTINF:-1 tvg-id="凤凰卫视资讯台" tvg-name="凤凰卫视资讯台" group-title="港澳台",凤凰卫视资讯台 -http://r.jdshipin.com/0Rp07$LR•IPV4•10『线路8』 +http://php.jdshipin.com/TVOD/iptv.php?id=fhzx$LR•IPV4•10『线路8』 #EXTINF:-1 tvg-id="凤凰卫视资讯台" tvg-name="凤凰卫视资讯台" group-title="港澳台",凤凰卫视资讯台 -http://php.jdshipin.com/TVOD/iptv.php?id=fhzx$LR•IPV4•10『线路9』 +http://cdn6.163189.xyz/163189/fhzx$LR•IPV4•10『线路9』 #EXTINF:-1 tvg-id="凤凰卫视资讯台" tvg-name="凤凰卫视资讯台" group-title="港澳台",凤凰卫视资讯台 -http://cdn6.163189.xyz/163189/fhzx$LR•IPV4•10『线路10』 +http://223.110.245.167/ott.js.chinamobile.com/PLTV/3/224/3221226923/index.m3u8$LR•IPV4•10『线路10』 #EXTINF:-1 tvg-id="凤凰卫视香港台" tvg-name="凤凰卫视香港台" group-title="港澳台",凤凰卫视香港台 -p3p://167.114.175.6:55331/5fe0b82c000cac9774c17f262e43314d$LR•IPV4•6『线路1』 +http://122.152.202.33/s/81a8a44f/index.m3u8?id=fhhk$LR•IPV4•6『线路1』 #EXTINF:-1 tvg-id="凤凰卫视香港台" tvg-name="凤凰卫视香港台" group-title="港澳台",凤凰卫视香港台 -http://122.152.202.33/s/81a8a44f/index.m3u8?id=fhhk$LR•IPV4•6『线路2』 +p3p://167.114.175.6:55331/5fe0b82c000cac9774c17f262e43314d$LR•IPV4•6『线路2』 #EXTINF:-1 tvg-id="凤凰卫视香港台" tvg-name="凤凰卫视香港台" group-title="港澳台",凤凰卫视香港台 -http://223.110.245.136/PLTV/3/224/3221226975/index.m3u8$LR•IPV4•6『线路3』 +http://r.jdshipin.com/yDoTN$LR•IPV4•6『线路3』 #EXTINF:-1 tvg-id="凤凰卫视香港台" tvg-name="凤凰卫视香港台" group-title="港澳台",凤凰卫视香港台 -http://r.jdshipin.com/yDoTN$LR•IPV4•6『线路4』 +http://php.jdshipin.com/TVOD/iptv.php?id=fhhk$LR•IPV4•6『线路4』 #EXTINF:-1 tvg-id="凤凰卫视香港台" tvg-name="凤凰卫视香港台" group-title="港澳台",凤凰卫视香港台 -http://php.jdshipin.com/TVOD/iptv.php?id=fhhk$LR•IPV4•6『线路5』 +http://cdn6.163189.xyz/163189/fhhk$LR•IPV4•6『线路5』 #EXTINF:-1 tvg-id="凤凰卫视香港台" tvg-name="凤凰卫视香港台" group-title="港澳台",凤凰卫视香港台 -http://cdn6.163189.xyz/163189/fhhk$LR•IPV4•6『线路6』 +http://223.110.245.136/PLTV/3/224/3221226975/index.m3u8$LR•IPV4•6『线路6』 #EXTINF:-1 tvg-id="台视新闻" tvg-name="台视新闻" group-title="港澳台",台视新闻 http://38.64.72.148:80/hls/modn/list/4013/chunklist0.m3u8$LR•IPV4•4『线路1』 #EXTINF:-1 tvg-id="台视新闻" tvg-name="台视新闻" group-title="港澳台",台视新闻 @@ -888,25 +888,25 @@ http://183.64.181.25:40023/rongchang01.m3u8$LR•IPV4 #EXTINF:-1 tvg-id="来宾综合" tvg-name="来宾综合" group-title="☘️广西频道",来宾综合 http://zb.gxlbamc.com:1935/live/lbzh.stream/playlist.m3u8$LR•IPV4 #EXTINF:-1 tvg-id="天津" tvg-name="天津" group-title="☘️天津频道",天津 -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226954/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Eaf3wyULP1h575eM_4ByMDg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•18『线路1』 +https://piccpndks.v.kcdnvip.com/audio/tianjin_2/index.m3u8$LR•IPV4•18『线路1』 #EXTINF:-1 tvg-id="天津" tvg-name="天津" group-title="☘️天津频道",天津 -http://204.12.221.218:8181/3m1080p/tjws.m3u8$LR•IPV4•18『线路2』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226954/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Eaf3wyULP1h575eM_4ByMDg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•18『线路2』 #EXTINF:-1 tvg-id="天津" tvg-name="天津" group-title="☘️天津频道",天津 -http://107.150.60.122/live/tjwshd.m3u8$LR•IPV4•18『线路3』 +http://204.12.221.218:8181/3m1080p/tjws.m3u8$LR•IPV4•18『线路3』 #EXTINF:-1 tvg-id="天津" tvg-name="天津" group-title="☘️天津频道",天津 -http://192.151.150.154/live/tjwshd.m3u8$LR•IPV4•18『线路4』 +http://107.150.60.122/live/tjwshd.m3u8$LR•IPV4•18『线路4』 #EXTINF:-1 tvg-id="天津" tvg-name="天津" group-title="☘️天津频道",天津 -http://38.75.136.137:98/gslb/dsdqpub/tjwshd.m3u8?auth=testpub$LR•IPV4•18『线路5』 +http://192.151.150.154/live/tjwshd.m3u8$LR•IPV4•18『线路5』 #EXTINF:-1 tvg-id="天津" tvg-name="天津" group-title="☘️天津频道",天津 -http://63.141.230.178:82/gslb/zbdq5.m3u8?id=tjwshd$LR•IPV4•18『线路6』 +http://38.75.136.137:98/gslb/dsdqpub/tjwshd.m3u8?auth=testpub$LR•IPV4•18『线路6』 #EXTINF:-1 tvg-id="天津" tvg-name="天津" group-title="☘️天津频道",天津 -http://207.56.13.146:81/cdnlive/tjws.m3u8$LR•IPV4•18『线路7』 +http://63.141.230.178:82/gslb/zbdq5.m3u8?id=tjwshd$LR•IPV4•18『线路7』 #EXTINF:-1 tvg-id="天津" tvg-name="天津" group-title="☘️天津频道",天津 -http://120.198.95.220:9901/tsfile/live/1067_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•18『线路8』 +http://207.56.13.146:81/cdnlive/tjws.m3u8$LR•IPV4•18『线路8』 #EXTINF:-1 tvg-id="天津" tvg-name="天津" group-title="☘️天津频道",天津 -http://112.27.235.94:8000/hls/42/index.m3u8$LR•IPV4•18『线路9』 +http://120.198.95.220:9901/tsfile/live/1067_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•18『线路9』 #EXTINF:-1 tvg-id="天津" tvg-name="天津" group-title="☘️天津频道",天津 -https://piccpndks.v.kcdnvip.com/audio/tianjin_2/index.m3u8$LR•IPV4•18『线路10』 +http://112.27.235.94:8000/hls/42/index.m3u8$LR•IPV4•18『线路10』 #EXTINF:-1 tvg-id="天津" tvg-name="天津" group-title="☘️天津频道",天津 http://23.237.228.134/live8/tianjing.m3u8$LR•IPV4•18『线路11』 #EXTINF:-1 tvg-id="天津" tvg-name="天津" group-title="☘️天津频道",天津 @@ -1722,25 +1722,25 @@ https://stream1.freetv.fun/dazn-sport-2-1.ctv$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="DAZN2" tvg-name="DAZN2" group-title="体育频道",DAZN2 http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=5145&tk=e640d0a1bf70$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="skysports" tvg-name="skysports" group-title="体育频道",skysports -https://stream1.freetv.fun/skysports-3.ctv$LR•IPV4•8『线路1』 +https://stream1.freetv.fun/skysports-14.ctv$LR•IPV4•8『线路1』 #EXTINF:-1 tvg-id="skysports" tvg-name="skysports" group-title="体育频道",skysports -https://stream1.freetv.fun/skysports-2.ctv$LR•IPV4•8『线路2』 +https://stream1.freetv.fun/skysports-12.ctv$LR•IPV4•8『线路2』 #EXTINF:-1 tvg-id="skysports" tvg-name="skysports" group-title="体育频道",skysports -https://stream1.freetv.fun/skysports-14.ctv$LR•IPV4•8『线路3』 +https://stream1.freetv.fun/skysports-3.ctv$LR•IPV4•8『线路3』 #EXTINF:-1 tvg-id="skysports" tvg-name="skysports" group-title="体育频道",skysports -https://stream1.freetv.fun/skysports-12.ctv$LR•IPV4•8『线路4』 +https://stream1.freetv.fun/skysports-16.ctv$LR•IPV4•8『线路4』 #EXTINF:-1 tvg-id="skysports" tvg-name="skysports" group-title="体育频道",skysports -https://stream1.freetv.fun/skysports-16.ctv$LR•IPV4•8『线路5』 +https://stream1.freetv.fun/skysports-17.ctv$LR•IPV4•8『线路5』 #EXTINF:-1 tvg-id="skysports" tvg-name="skysports" group-title="体育频道",skysports -https://stream1.freetv.fun/skysports-17.ctv$LR•IPV4•8『线路6』 +https://stream1.freetv.fun/skysports-15.ctv$LR•IPV4•8『线路6』 #EXTINF:-1 tvg-id="skysports" tvg-name="skysports" group-title="体育频道",skysports -https://stream1.freetv.fun/skysports-15.ctv$LR•IPV4•8『线路7』 +https://stream1.freetv.fun/skysports-7.ctv$LR•IPV4•8『线路7』 #EXTINF:-1 tvg-id="skysports" tvg-name="skysports" group-title="体育频道",skysports -https://stream1.freetv.fun/skysports-7.ctv$LR•IPV4•8『线路8』 +https://stream1.freetv.fun/skysports-2.ctv$LR•IPV4•8『线路8』 #EXTINF:-1 tvg-id="纪晓岚" tvg-name="纪晓岚" group-title="zonghe",纪晓岚 -http://fmbox.cc/huya.php?id=11342396$LR•IPV4•2『线路1』 +https://live.ottiptv.cc/huya/11342396$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="纪晓岚" tvg-name="纪晓岚" group-title="zonghe",纪晓岚 -https://live.ottiptv.cc/huya/11342396$LR•IPV4•2『线路2』 +http://fmbox.cc/huya.php?id=11342396$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="地下交通站" tvg-name="地下交通站" group-title="zonghe",地下交通站 http://live.nctv.top/DJlio/huya.php?id=11342433$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="地下交通站" tvg-name="地下交通站" group-title="zonghe",地下交通站 @@ -2384,13 +2384,13 @@ https://streamvidex.qzz.io/videx/fox2usa/index.m3u8$LR•IPV4•8『线路7』 #EXTINF:-1 tvg-id="FOX Sports" tvg-name="FOX Sports" group-title="⚽️SPORTS",FOX Sports http://108.181.20.255:27347/livehttpplay?channel_id=23054$LR•IPV4•8『线路8』 #EXTINF:-1 tvg-id="NBA" tvg-name="NBA" group-title="⚽️SPORTS",NBA -http://170.yfvodcdn.com:19980/live/nbaTV2/hls.m3u8$LR•IPV4•8『线路1』 +https://stream1.freetv.fun/nba-tv-7.m3u8$LR•IPV4•8『线路1』 #EXTINF:-1 tvg-id="NBA" tvg-name="NBA" group-title="⚽️SPORTS",NBA -p3p://167.114.175.6:55331/65a587500007bc039fca3566638e69af$LR•IPV4•8『线路2』 +https://stream1.freetv.fun/nba-tv-5.m3u8$LR•IPV4•8『线路2』 #EXTINF:-1 tvg-id="NBA" tvg-name="NBA" group-title="⚽️SPORTS",NBA -https://stream1.freetv.fun/nba-tv-7.m3u8$LR•IPV4•8『线路3』 +http://170.yfvodcdn.com:19980/live/nbaTV2/hls.m3u8$LR•IPV4•8『线路3』 #EXTINF:-1 tvg-id="NBA" tvg-name="NBA" group-title="⚽️SPORTS",NBA -https://stream1.freetv.fun/nba-tv-5.m3u8$LR•IPV4•8『线路4』 +p3p://167.114.175.6:55331/65a587500007bc039fca3566638e69af$LR•IPV4•8『线路4』 #EXTINF:-1 tvg-id="NBA" tvg-name="NBA" group-title="⚽️SPORTS",NBA https://live-manifest.production-public.tubi.io/live/553b8d5e-fd2a-4a61-bdfa-73b34c299d75/playlist.m3u8$LR•IPV4•8『线路5』 #EXTINF:-1 tvg-id="NBA" tvg-name="NBA" group-title="⚽️SPORTS",NBA @@ -2788,19 +2788,19 @@ https://vip.ffzy-play7.com/20221129/7714_a0c75de1/index.m3u8$LR•IPV4 #EXTINF:-1 tvg-id="音乐僵尸" tvg-name="音乐僵尸" group-title="🎞️电影点播",音乐僵尸 https://vip.ffzy-play6.com/20221207/10627_09b3f2e5/index.m3u8$LR•IPV4 #EXTINF:-1 tvg-id="英雄" tvg-name="英雄" group-title="🎞️电影点播",英雄 -https://vip.ffzy-play7.com/20221227/9993_9681b67b/index.m3u8$LR•IPV4•7『线路1』 +http://cdn.jdshipin.com:8880/huya.php?id=23824164$LR•IPV4•7『线路1』 #EXTINF:-1 tvg-id="英雄" tvg-name="英雄" group-title="🎞️电影点播",英雄 -https://vip.ffzy-play.com/20221015/981_2ca5b5f9/index.m3u8$LR•IPV4•7『线路2』 +https://live.ottiptv.cc/yy/1352475619$LR•IPV4•7『线路2』 #EXTINF:-1 tvg-id="英雄" tvg-name="英雄" group-title="🎞️电影点播",英雄 -https://vip.ffzy-play6.com/20221207/10694_f9088e66/index.m3u8$LR•IPV4•7『线路3』 +https://vip.ffzy-play7.com/20221227/9993_9681b67b/index.m3u8$LR•IPV4•7『线路3』 #EXTINF:-1 tvg-id="英雄" tvg-name="英雄" group-title="🎞️电影点播",英雄 -https://vip.ffzy-play7.com/20221129/7743_4656dd25/index.m3u8$LR•IPV4•7『线路4』 +https://vip.ffzy-play.com/20221015/981_2ca5b5f9/index.m3u8$LR•IPV4•7『线路4』 #EXTINF:-1 tvg-id="英雄" tvg-name="英雄" group-title="🎞️电影点播",英雄 -https://vip.ffzy-play6.com/20221112/6371_9b5bf930/index.m3u8$LR•IPV4•7『线路5』 +https://vip.ffzy-play6.com/20221207/10694_f9088e66/index.m3u8$LR•IPV4•7『线路5』 #EXTINF:-1 tvg-id="英雄" tvg-name="英雄" group-title="🎞️电影点播",英雄 -http://cdn.jdshipin.com:8880/huya.php?id=23824164$LR•IPV4•7『线路6』 +https://vip.ffzy-play7.com/20221129/7743_4656dd25/index.m3u8$LR•IPV4•7『线路6』 #EXTINF:-1 tvg-id="英雄" tvg-name="英雄" group-title="🎞️电影点播",英雄 -https://live.ottiptv.cc/yy/1352475619$LR•IPV4•7『线路7』 +https://vip.ffzy-play6.com/20221112/6371_9b5bf930/index.m3u8$LR•IPV4•7『线路7』 #EXTINF:-1 tvg-id="赢钱专家" tvg-name="赢钱专家" group-title="🎞️电影点播",赢钱专家 https://vip.ffzy-play6.com/20221113/6794_d514b390/index.m3u8$LR•IPV4 #EXTINF:-1 tvg-id="有话好好说" tvg-name="有话好好说" group-title="🎞️电影点播",有话好好说 @@ -3014,13 +3014,13 @@ https://live.metshop.top/huya/11342388$LR•IPV4 #EXTINF:-1 tvg-id="联合抗日" tvg-name="联合抗日" group-title="💓电视剧🔁",联合抗日 https://live.metshop.top/huya/11352910$LR•IPV4 #EXTINF:-1 tvg-id="三国" tvg-name="三国" group-title="💓电视剧🔁",三国 -https://live.metshop.top/huya/11352944$LR•IPV4•4『线路1』 +https://live.ottiptv.cc/huya/11602081$LR•IPV4•4『线路1』 #EXTINF:-1 tvg-id="三国" tvg-name="三国" group-title="💓电视剧🔁",三国 -http://103.193.151.146/huya.php?id=29465871$LR•IPV4•4『线路2』 +https://live.ottiptv.cc/huya/11352944$LR•IPV4•4『线路2』 #EXTINF:-1 tvg-id="三国" tvg-name="三国" group-title="💓电视剧🔁",三国 -https://live.ottiptv.cc/huya/11602081$LR•IPV4•4『线路3』 +https://live.metshop.top/huya/11352944$LR•IPV4•4『线路3』 #EXTINF:-1 tvg-id="三国" tvg-name="三国" group-title="💓电视剧🔁",三国 -https://live.ottiptv.cc/huya/11352944$LR•IPV4•4『线路4』 +http://103.193.151.146/huya.php?id=29465871$LR•IPV4•4『线路4』 #EXTINF:-1 tvg-id="雍正皇帝" tvg-name="雍正皇帝" group-title="💓电视剧🔁",雍正皇帝 https://live.metshop.top/huya/11342439$LR•IPV4 #EXTINF:-1 tvg-id="许冠英合集" tvg-name="许冠英合集" group-title="💓电视剧🔁",许冠英合集 @@ -3080,11 +3080,11 @@ http://newcntv.qcloudcdn.com/asp/hls/4000/0303000a/3/default/2bdfdad540b342f592f #EXTINF:-1 tvg-id="地理中国" tvg-name="地理中国" group-title="💓优质个源",地理中国 http://newcntv.qcloudcdn.com/asp/hls/1200/0303000a/3/default/c6baf6f74bb944aeacee1065ea72c798/1200.m3u8$LR•IPV4 #EXTINF:-1 tvg-id="纪录" tvg-name="纪录" group-title="💓优质个源",纪录 -https://v4-e6b1c5baf4e240fe63adbf68dda23435.livehwc4.com/play.kankanlive.com/live/1698423397390920.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=f3fb3ddaca05941087114cf6481e1c23$LR•IPV4•41『线路1』 +https://v4-e6b1c5baf4e240fe63adbf68dda23435.livehwc4.com/play.kankanlive.com/live/1698423397390920.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=8a921813ee3b23c82763145c9f291a3b$LR•IPV4•41『线路1』 #EXTINF:-1 tvg-id="纪录" tvg-name="纪录" group-title="💓优质个源",纪录 -https://ali-m-l.cztv.com/channels/lantian/channel012/1080p.m3u8$LR•IPV4•41『线路2』 +https://v4-e6b1c5baf4e240fe63adbf68dda23435.livehwc4.com/play.kankanlive.com/live/1698423397390920.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=f3fb3ddaca05941087114cf6481e1c23$LR•IPV4•41『线路2』 #EXTINF:-1 tvg-id="纪录" tvg-name="纪录" group-title="💓优质个源",纪录 -https://v4-702cae17a28d6e4f0c0002bba021d934.livehwc4.com/play.kankanlive.com/live/1698423397390920.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=2b87983b301b48537526846889074801$LR•IPV4•41『线路3』 +https://ali-m-l.cztv.com/channels/lantian/channel012/1080p.m3u8$LR•IPV4•41『线路3』 #EXTINF:-1 tvg-id="纪录" tvg-name="纪录" group-title="💓优质个源",纪录 http://free.cnlive.club/channel/n3f497a4c/index.m3u8?q=1752629214236$LR•IPV4•41『线路4』 #EXTINF:-1 tvg-id="纪录" tvg-name="纪录" group-title="💓优质个源",纪录 @@ -3348,11 +3348,11 @@ p3p://167.114.175.6:55331/66e860ba000b17abca4b7ac11c665324$LR•IPV4 #EXTINF:-1 tvg-id="OneTV综合" tvg-name="OneTV综合" group-title="🍹定制P3P☕️",OneTV综合 p3p://167.114.175.6:55331/64d5c5550007c4d9744057ea09db782a$LR•IPV4 #EXTINF:-1 tvg-id="C+" tvg-name="C+" group-title="🍹定制P3P☕️",C+ -http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/01.m3u8$LR•IPV4•4『线路1』 +http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/03.m3u8$LR•IPV4•4『线路1』 #EXTINF:-1 tvg-id="C+" tvg-name="C+" group-title="🍹定制P3P☕️",C+ -http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/02.m3u8$LR•IPV4•4『线路2』 +http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/01.m3u8$LR•IPV4•4『线路2』 #EXTINF:-1 tvg-id="C+" tvg-name="C+" group-title="🍹定制P3P☕️",C+ -http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/03.m3u8$LR•IPV4•4『线路3』 +http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/02.m3u8$LR•IPV4•4『线路3』 #EXTINF:-1 tvg-id="C+" tvg-name="C+" group-title="🍹定制P3P☕️",C+ p3p://167.114.175.6:55331/65ac2e740004fbd2b9c6ef2b03744ac0$LR•IPV4•4『线路4』 #EXTINF:-1 tvg-id="有线赛马18" tvg-name="有线赛马18" group-title="🍹定制P3P☕️",有线赛马18 @@ -3684,155 +3684,155 @@ http://101.43.145.141:12002/itv/3000000010000015686.m3u8?cdn=FifastbLive$LR•IP #EXTINF:-1 tvg-id="CCTV兵器" tvg-name="CCTV兵器" group-title="🌐央视频道",CCTV兵器 http://38.75.136.137:98/gslb/dsdqpub/gfjs.m3u8?auth=testpub$LR•IPV4 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226895/1.m3u8?$LR•IPV6•90『线路1』 +https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784329200-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-2245971645866ed95972e22af68cc8d1&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•90『线路1』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226893/1.m3u8?$LR•IPV6•90『线路2』 +http://183.196.25.171:808/hls/77/index.m3u8$LR•IPV4•90『线路2』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226471/1.m3u8?$LR•IPV6•90『线路3』 +https://jsv-live-play.sfccn.com/live/jsv_3920_fhd.m3u8$LR•IPV4•90『线路3』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226335/1.m3u8?$LR•IPV6•90『线路4』 +http://183.196.25.171:808/hls/11/index.m3u8$LR•IPV4•90『线路4』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226469/1.m3u8?$LR•IPV6•90『线路5』 +http://183.196.25.171:808/hls/93/index.m3u8$LR•IPV4•90『线路5』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226468/1.m3u8?$LR•IPV6•90『线路6』 +https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784271600-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-6aec44040ec72def77e22587fc404005&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•90『线路6』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226946/1.m3u8?$LR•IPV6•90『线路7』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226895/1.m3u8?$LR•IPV6•90『线路7』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226485/1.m3u8?$LR•IPV6•90『线路8』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226893/1.m3u8?$LR•IPV6•90『线路8』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226944/1.m3u8?$LR•IPV6•90『线路9』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226471/1.m3u8?$LR•IPV6•90『线路9』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226937/1.m3u8?$LR•IPV6•90『线路10』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226335/1.m3u8?$LR•IPV6•90『线路10』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226334/1.m3u8?$LR•IPV6•90『线路11』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226469/1.m3u8?$LR•IPV6•90『线路11』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226942/1.m3u8?$LR•IPV6•90『线路12』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226468/1.m3u8?$LR•IPV6•90『线路12』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226316/1.m3u8?$LR•IPV6•90『线路13』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226946/1.m3u8?$LR•IPV6•90『线路13』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226947/1.m3u8?$LR•IPV6•90『线路14』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226485/1.m3u8?$LR•IPV6•90『线路14』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226333/1.m3u8?$LR•IPV6•90『线路15』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226944/1.m3u8?$LR•IPV6•90『线路15』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227002/1.m3u8?$LR•IPV6•90『线路16』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226937/1.m3u8?$LR•IPV6•90『线路16』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226318/1.m3u8?$LR•IPV6•90『线路17』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226334/1.m3u8?$LR•IPV6•90『线路17』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://222.223.41.27:8888/hls/2/index.m3u8$LR•IPV4•90『线路18』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226942/1.m3u8?$LR•IPV6•90『线路18』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://116.128.243.121:85/tsfile/live/0002_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•90『线路19』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226316/1.m3u8?$LR•IPV6•90『线路19』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://63.141.230.178:82/gslb/zbdq5.m3u8?id=cctv3hd$LR•IPV4•90『线路20』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226947/1.m3u8?$LR•IPV6•90『线路20』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://207.56.13.146:81/cdnlive/cctv3.m3u8$LR•IPV4•90『线路21』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226333/1.m3u8?$LR•IPV6•90『线路21』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://63.141.230.178:82/gslb/zbdq5.m3u8?id=cctv4hd$LR•IPV4•90『线路22』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227002/1.m3u8?$LR•IPV6•90『线路22』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://74.91.26.218:82/live/cctv4hd.m3u8$LR•IPV4•90『线路23』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226318/1.m3u8?$LR•IPV6•90『线路23』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://207.56.13.146:81/cdnlive/cctv4.m3u8$LR•IPV4•90『线路24』 +http://222.223.41.27:8888/hls/2/index.m3u8$LR•IPV4•90『线路24』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://38.75.136.137:98/gslb/dsdqbv/cctv5p.m3u8?auth=test20251009$LR•IPV4•90『线路25』 +http://116.128.243.121:85/tsfile/live/0002_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•90『线路25』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://204.12.221.218:8181/3m1080p/cctv6.m3u8$LR•IPV4•90『线路26』 +http://63.141.230.178:82/gslb/zbdq5.m3u8?id=cctv3hd$LR•IPV4•90『线路26』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://207.56.13.146:81/cdnlive/cctv6.m3u8$LR•IPV4•90『线路27』 +http://207.56.13.146:81/cdnlive/cctv3.m3u8$LR•IPV4•90『线路27』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://74.91.26.218:82/live/cctv7hd.m3u8$LR•IPV4•90『线路28』 +http://63.141.230.178:82/gslb/zbdq5.m3u8?id=cctv4hd$LR•IPV4•90『线路28』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://38.75.136.137:98/gslb/dsdqbv/cctv7hd.m3u8?auth=test20251009$LR•IPV4•90『线路29』 +http://74.91.26.218:82/live/cctv4hd.m3u8$LR•IPV4•90『线路29』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://192.151.150.154/live/cctv8k.m3u8$LR•IPV4•90『线路30』 +http://207.56.13.146:81/cdnlive/cctv4.m3u8$LR•IPV4•90『线路30』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://207.56.13.146:81/cdnlive/cctv8.m3u8$LR•IPV4•90『线路31』 +http://38.75.136.137:98/gslb/dsdqbv/cctv5p.m3u8?auth=test20251009$LR•IPV4•90『线路31』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://173.208.212.130:8181/720p/cctv8.m3u8$LR•IPV4•90『线路32』 +http://204.12.221.218:8181/3m1080p/cctv6.m3u8$LR•IPV4•90『线路32』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://38.75.136.137:98/gslb/dsdqbv/cctv8hd.m3u8?auth=test20251009$LR•IPV4•90『线路33』 +http://207.56.13.146:81/cdnlive/cctv6.m3u8$LR•IPV4•90『线路33』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://204.12.221.218:8181/3m1080p/cctv8.m3u8$LR•IPV4•90『线路34』 +http://74.91.26.218:82/live/cctv7hd.m3u8$LR•IPV4•90『线路34』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://69.30.245.50/live/cctv8.m3u8$LR•IPV4•90『线路35』 +http://38.75.136.137:98/gslb/dsdqbv/cctv7hd.m3u8?auth=test20251009$LR•IPV4•90『线路35』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://222.223.41.27:8888/hls/9/index.m3u8$LR•IPV4•90『线路36』 +http://192.151.150.154/live/cctv8k.m3u8$LR•IPV4•90『线路36』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -https://hwapi.yntv.net/ew265l/z1z6s5.m3u8$LR•IPV4•90『线路37』 +http://207.56.13.146:81/cdnlive/cctv8.m3u8$LR•IPV4•90『线路37』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://74.91.26.218:82/live/cctv10hd.m3u8$LR•IPV4•90『线路38』 +http://173.208.212.130:8181/720p/cctv8.m3u8$LR•IPV4•90『线路38』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://74.91.26.218:82/live/cctv11hd.m3u8$LR•IPV4•90『线路39』 +http://38.75.136.137:98/gslb/dsdqbv/cctv8hd.m3u8?auth=test20251009$LR•IPV4•90『线路39』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://38.75.136.137:98/gslb/dsdqpub/cctv12hd.m3u8?auth=testpub$LR•IPV4•90『线路40』 +http://204.12.221.218:8181/3m1080p/cctv8.m3u8$LR•IPV4•90『线路40』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -https://event.pull.hebtv.com/jishi/cp1.m3u8$LR•IPV4•90『线路41』 +http://69.30.245.50/live/cctv8.m3u8$LR•IPV4•90『线路41』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://pull-hls-f1.douyinliving.com/media/stream-696107587393815378/playlist.m3u8?keeptime=00093a80&wsSecret=bbbd054778ab532edfa97bf7c5395746&wsTime=6a544fee&arch_hrchy=s2&s_anchor=1&major_anchor_level=vip&t_id=037-2026071310394131FD5A22CCB9DDAFA77E-5XIF43$LR•IPV4•90『线路42』 +http://222.223.41.27:8888/hls/9/index.m3u8$LR•IPV4•90『线路42』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://63.141.230.178:82/gslb/zbdq5.m3u8?id=cctv13hd$LR•IPV4•90『线路43』 +https://hwapi.yntv.net/ew265l/z1z6s5.m3u8$LR•IPV4•90『线路43』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://113.25.252.226:9901/tsfile/live/1017_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•90『线路44』 +http://74.91.26.218:82/live/cctv10hd.m3u8$LR•IPV4•90『线路44』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -https://event.pull.hebtv.com/jishi/cp2.m3u8$LR•IPV4•90『线路45』 +http://74.91.26.218:82/live/cctv11hd.m3u8$LR•IPV4•90『线路45』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://38.75.136.137:98/gslb/dsdqbv/cctv15hd.m3u8?auth=test20251009$LR•IPV4•90『线路46』 +http://38.75.136.137:98/gslb/dsdqpub/cctv12hd.m3u8?auth=testpub$LR•IPV4•90『线路46』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://38.75.136.137:98/gslb/dsdqpub/cctv15hd.m3u8?auth=testpub$LR•IPV4•90『线路47』 +https://event.pull.hebtv.com/jishi/cp1.m3u8$LR•IPV4•90『线路47』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://38.75.136.137:98/gslb/dsdqpub/cctv17hd.m3u8?auth=testpub$LR•IPV4•90『线路48』 +http://pull-hls-f1.douyinliving.com/media/stream-696107587393815378/playlist.m3u8?keeptime=00093a80&wsSecret=bbbd054778ab532edfa97bf7c5395746&wsTime=6a544fee&arch_hrchy=s2&s_anchor=1&major_anchor_level=vip&t_id=037-2026071310394131FD5A22CCB9DDAFA77E-5XIF43$LR•IPV4•90『线路48』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784322000-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-25fe408e6545f49f3d4eb7f92e97c764&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•90『线路49』 +http://63.141.230.178:82/gslb/zbdq5.m3u8?id=cctv13hd$LR•IPV4•90『线路49』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -https://shcm-stream-cf1.stream.264788.xyz/cms001/ch00000090990000001620/index.m3u8?streamid=8a034b40397504e25b3775c772237996&streamkey=01vY5fRxC8VyKg4oq30vfikHXTCAKySLP29l6OG91kQlzDttHgzNLkUw5kivm3PfNsVHJv5FgdsPBYFYI2IWpt7tfRCuFHqLT2pvX67ubMds8jl2DHtvOh0&token=1775754349-4f33f4f84a4abeba-0-91687dc8c9325092efa1d00f330d2710$LR•IPV4•90『线路50』 +http://113.25.252.226:9901/tsfile/live/1017_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•90『线路50』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -https://epg.pw/stream/ac8062ec9484078061d3bef507c15a423ac57ae4144e3fcc4b0a198dd420f911.m3u8$LR•IPV4•90『线路51』 +https://event.pull.hebtv.com/jishi/cp2.m3u8$LR•IPV4•90『线路51』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784325600-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-b583b000601c3690c0e4bae75e1261f0&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•90『线路52』 +http://38.75.136.137:98/gslb/dsdqbv/cctv15hd.m3u8?auth=test20251009$LR•IPV4•90『线路52』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://183.196.25.171:808/hls/77/index.m3u8$LR•IPV4•90『线路53』 +http://38.75.136.137:98/gslb/dsdqpub/cctv15hd.m3u8?auth=testpub$LR•IPV4•90『线路53』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -https://jsv-live-play.sfccn.com/live/jsv_3920_fhd.m3u8$LR•IPV4•90『线路54』 +http://38.75.136.137:98/gslb/dsdqpub/cctv17hd.m3u8?auth=testpub$LR•IPV4•90『线路54』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://183.196.25.171:808/hls/11/index.m3u8$LR•IPV4•90『线路55』 +https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784322000-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-25fe408e6545f49f3d4eb7f92e97c764&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•90『线路55』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://183.196.25.171:808/hls/93/index.m3u8$LR•IPV4•90『线路56』 +https://shcm-stream-cf1.stream.264788.xyz/cms001/ch00000090990000001620/index.m3u8?streamid=8a034b40397504e25b3775c772237996&streamkey=01vY5fRxC8VyKg4oq30vfikHXTCAKySLP29l6OG91kQlzDttHgzNLkUw5kivm3PfNsVHJv5FgdsPBYFYI2IWpt7tfRCuFHqLT2pvX67ubMds8jl2DHtvOh0&token=1775754349-4f33f4f84a4abeba-0-91687dc8c9325092efa1d00f330d2710$LR•IPV4•90『线路56』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784271600-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-6aec44040ec72def77e22587fc404005&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•90『线路57』 +https://epg.pw/stream/ac8062ec9484078061d3bef507c15a423ac57ae4144e3fcc4b0a198dd420f911.m3u8$LR•IPV4•90『线路57』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://38.75.136.137:98/gslb/dsdqpub/wsjk.m3u8?auth=testpub$LR•IPV4•90『线路58』 +http://69.30.245.50/live/cctv6.m3u8$LR•IPV4•90『线路58』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://38.75.136.137:98/gslb/dsdqpub/ystq.m3u8?auth=testpub$LR•IPV4•90『线路59』 +http://74.91.26.218:82/live/cctv8hd.m3u8$LR•IPV4•90『线路59』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://38.75.136.137:98/gslb/dsdqpub/dyjc.m3u8?auth=testpub$LR•IPV4•90『线路60』 +http://74.91.26.218:82/live/cctv17hd.m3u8$LR•IPV4•90『线路60』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://38.75.136.137:98/gslb/dsdqpub/fyjc.m3u8?auth=testpub$LR•IPV4•90『线路61』 +http://38.75.136.137:98/gslb/dsdqpub/wsjk.m3u8?auth=testpub$LR•IPV4•90『线路61』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://38.75.136.137:98/gslb/dsdqpub/hjjc.m3u8?auth=testpub$LR•IPV4•90『线路62』 +http://38.75.136.137:98/gslb/dsdqpub/ystq.m3u8?auth=testpub$LR•IPV4•90『线路62』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://38.75.136.137:98/gslb/dsdqpub/fyzq.m3u8?auth=testpub$LR•IPV4•90『线路63』 +http://38.75.136.137:98/gslb/dsdqpub/dyjc.m3u8?auth=testpub$LR•IPV4•90『线路63』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://38.75.136.137:98/gslb/dsdqpub/fyyy.m3u8?auth=testpub$LR•IPV4•90『线路64』 +http://38.75.136.137:98/gslb/dsdqpub/fyjc.m3u8?auth=testpub$LR•IPV4•90『线路64』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://38.75.136.137:98/gslb/dsdqpub/sjdl.m3u8?auth=testpub$LR•IPV4•90『线路65』 +http://38.75.136.137:98/gslb/dsdqpub/hjjc.m3u8?auth=testpub$LR•IPV4•90『线路65』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://38.75.136.137:98/gslb/dsdqpub/dszn.m3u8?auth=testpub$LR•IPV4•90『线路66』 +http://38.75.136.137:98/gslb/dsdqpub/fyzq.m3u8?auth=testpub$LR•IPV4•90『线路66』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://38.75.136.137:98/gslb/dsdqpub/ysjp.m3u8?auth=testpub$LR•IPV4•90『线路67』 +http://38.75.136.137:98/gslb/dsdqpub/fyyy.m3u8?auth=testpub$LR•IPV4•90『线路67』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://38.75.136.137:98/gslb/dsdqpub/nxss.m3u8?auth=testpub$LR•IPV4•90『线路68』 +http://38.75.136.137:98/gslb/dsdqpub/sjdl.m3u8?auth=testpub$LR•IPV4•90『线路68』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://fn.tmde.top:35455/nptv/cctv4k.m3u8$LR•IPV4•90『线路69』 +http://38.75.136.137:98/gslb/dsdqpub/dszn.m3u8?auth=testpub$LR•IPV4•90『线路69』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://fn.tmde.top:35455/nptv/cctv8k.m3u8$LR•IPV4•90『线路70』 +http://38.75.136.137:98/gslb/dsdqpub/ysjp.m3u8?auth=testpub$LR•IPV4•90『线路70』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://xc.mfykeke.top:35455/nptv/cctv4k.m3u8$LR•IPV4•90『线路71』 +http://38.75.136.137:98/gslb/dsdqpub/nxss.m3u8?auth=testpub$LR•IPV4•90『线路71』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://xc.mfykeke.top:35455/nptv/cctv8k.m3u8$LR•IPV4•90『线路72』 +http://fn.tmde.top:35455/nptv/cctv4k.m3u8$LR•IPV4•90『线路72』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://69.30.245.50/live/cctv6.m3u8$LR•IPV4•90『线路73』 +http://fn.tmde.top:35455/nptv/cctv8k.m3u8$LR•IPV4•90『线路73』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://74.91.26.218:82/live/cctv8hd.m3u8$LR•IPV4•90『线路74』 +http://xc.mfykeke.top:35455/nptv/cctv4k.m3u8$LR•IPV4•90『线路74』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV -http://74.91.26.218:82/live/cctv17hd.m3u8$LR•IPV4•90『线路75』 +http://xc.mfykeke.top:35455/nptv/cctv8k.m3u8$LR•IPV4•90『线路75』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV http://69.30.245.50/live/cctv1.m3u8$LR•IPV4•90『线路76』 #EXTINF:-1 tvg-id="CCTV" tvg-name="CCTV" group-title="🌐央视频道",CCTV @@ -3870,9 +3870,9 @@ http://cdn.jdshipin.com:8880/huya.php?id=11342412$LR•IPV4 #EXTINF:-1 tvg-id="梁家辉" tvg-name="梁家辉" group-title="明星",梁家辉 http://live.metshop.top/huya/11342429?cdn=alicdn$LR•IPV4 #EXTINF:-1 tvg-id="刘德华" tvg-name="刘德华" group-title="明星",刘德华 -http://epg.112114.xyz/douyu/2516864$LR•IPV4•2『线路1』 +http://live.metshop.top/huya/11342424?cdn=alicdn$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="刘德华" tvg-name="刘德华" group-title="明星",刘德华 -http://live.metshop.top/huya/11342424?cdn=alicdn$LR•IPV4•2『线路2』 +http://epg.112114.xyz/douyu/2516864$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="林正英" tvg-name="林正英" group-title="明星",林正英 http://zzy789.xyz/douyu1.php?id=7356023$LR•IPV4•2『线路1』 #EXTINF:-1 tvg-id="林正英" tvg-name="林正英" group-title="明星",林正英 @@ -4804,41 +4804,39 @@ http://ali-m-l.cztv.com/channels/lantian/channel009/1080p.m3u8$LR•IPV4•2『 #EXTINF:-1 tvg-id="中国蓝新闻" tvg-name="中国蓝新闻" group-title="浙江",中国蓝新闻 https://ali-m-l.cztv.com/channels/lantian/channel009/1080p.m3u8?$LR•IPV4•2『线路2』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="广东",深圳卫视 -http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226959/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EGrVNEZREjuNVKiTJo2mtwg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•18『线路1』 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226959/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EGrVNEZREjuNVKiTJo2mtwg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•17『线路1』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="广东",深圳卫视 -http://120.198.95.220:9901/tsfile/live/1048_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•18『线路2』 +http://120.198.95.220:9901/tsfile/live/1048_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•17『线路2』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="广东",深圳卫视 -http://120.198.95.220:9901/tsfile/live/1048_1.m3u8?key=txiptv$LR•IPV4•18『线路3』 +http://120.198.95.220:9901/tsfile/live/1048_1.m3u8?key=txiptv$LR•IPV4•17『线路3』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="广东",深圳卫视 -http://173.208.212.130:8181/720p/szws.m3u8$LR•IPV4•18『线路4』 +http://173.208.212.130:8181/720p/szws.m3u8$LR•IPV4•17『线路4』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="广东",深圳卫视 -http://192.151.150.154/live/szwshd.m3u8$LR•IPV4•18『线路5』 +http://192.151.150.154/live/szwshd.m3u8$LR•IPV4•17『线路5』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="广东",深圳卫视 -http://124.228.160.210:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•18『线路6』 +http://124.228.160.210:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•17『线路6』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="广东",深圳卫视 -http://36.136.38.87:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•18『线路7』 +http://36.136.38.87:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•17『线路7』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="广东",深圳卫视 -http://112.27.235.94:8000/hls/33/index.m3u8$LR•IPV4•18『线路8』 +http://112.27.235.94:8000/hls/33/index.m3u8$LR•IPV4•17『线路8』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="广东",深圳卫视 -https://sztv-hls.sztv.com.cn/1SIQj6s/500/q7rdSsQ.m3u8?sign=71764b3a0bcc96b03dea9693d605e020&t=6a579f21$LR•IPV4•18『线路9』 +http://38.75.136.137:98/gslb/dsdqpub/szwshd.m3u8?auth=testpub$LR•IPV4•17『线路9』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="广东",深圳卫视 -http://38.75.136.137:98/gslb/dsdqpub/szwshd.m3u8?auth=testpub$LR•IPV4•18『线路10』 +http://23.237.228.134/live6/shenzhen.m3u8$LR•IPV4•17『线路10』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="广东",深圳卫视 -http://23.237.228.134/live6/shenzhen.m3u8$LR•IPV4•18『线路11』 +http://gfr.x3322.net:9901/tsfile/live/1095_1.m3u8$LR•IPV4•17『线路11』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="广东",深圳卫视 -http://gfr.x3322.net:9901/tsfile/live/1095_1.m3u8$LR•IPV4•18『线路12』 +http://api.kkitv.itv888.cn:8080/hls/iftsd32ykm/index.m3u8$LR•IPV4•17『线路12』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="广东",深圳卫视 -http://api.kkitv.itv888.cn:8080/hls/iftsd32ykm/index.m3u8$LR•IPV4•18『线路13』 +https://iptv.catvod.com/catvod.php?id=szws$LR•IPV4•17『线路13』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="广东",深圳卫视 -https://iptv.catvod.com/catvod.php?id=szws$LR•IPV4•18『线路14』 +https://httop.top/ysp-深圳卫视$LR•IPV4•17『线路14』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="广东",深圳卫视 -https://httop.top/ysp-深圳卫视$LR•IPV4•18『线路15』 +http://iptv.huuc.edu.cn/hls/szhd.m3u8$LR•IPV4•17『线路15』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="广东",深圳卫视 -http://iptv.huuc.edu.cn/hls/szhd.m3u8$LR•IPV4•18『线路16』 +http://153.0.171.163:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•17『线路16』 #EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="广东",深圳卫视 -http://153.0.171.163:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•18『线路17』 -#EXTINF:-1 tvg-id="深圳卫视" tvg-name="深圳卫视" group-title="广东",深圳卫视 -http://38.64.72.148:80/hls/modn/list/4007/playlist.m3u8$LR•IPV4•18『线路18』 +http://38.64.72.148:80/hls/modn/list/4007/playlist.m3u8$LR•IPV4•17『线路17』 #EXTINF:-1 tvg-id="汕头经济" tvg-name="汕头经济" group-title="广东",汕头经济 https://stream1.freetv.fun/shan-tou-jing-ji-2.ctv$LR•IPV4•11『线路1』 #EXTINF:-1 tvg-id="汕头经济" tvg-name="汕头经济" group-title="广东",汕头经济 diff --git a/tvbox/lib/iptv_test.txt b/tvbox/lib/iptv_test.txt index d497b90b..594c2fbb 100755 --- a/tvbox/lib/iptv_test.txt +++ b/tvbox/lib/iptv_test.txt @@ -1,7 +1,7 @@ 央视频道,#genre# -CCTV-4K,https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4k_mbd.m3u8?auth_key=1784322000-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-aa68fb06c12f53b71a4d170807f32df5&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•3『线路1』 -CCTV-4K,https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4k_mbd.m3u8?auth_key=1784325600-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-da48bbac79b9621fa8f084ece04c2c91&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•3『线路2』 +CCTV-4K,https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4k_mbd.m3u8?auth_key=1784329200-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-81ad4aefc95ce528b3da1112f0bc9ff2&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•3『线路1』 +CCTV-4K,https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4k_mbd.m3u8?auth_key=1784322000-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-aa68fb06c12f53b71a4d170807f32df5&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•3『线路2』 CCTV-4K,http://198.204.240.250:82/live/cctv4k.m3u8$LR•IPV4•3『线路3』 浙江频道,#genre# @@ -66,8 +66,8 @@ RTHK32,http://php.jdshipin.com:8880/TVOD/iptv.php?id=rthk32$LR•IPV4 动画频道,#genre# 韩国EBS少儿,http://ebsonairios.ebs.co.kr/ebsutablet500k/tablet500k/playlist.m3u8$LR•IPV4 -七龙珠,http://103.193.151.146/huya.php?id=11601966$LR•IPV4•2『线路1』 -七龙珠,https://live.metshop.top/huya/11601966$LR•IPV4•2『线路2』 +七龙珠,https://live.metshop.top/huya/11601966$LR•IPV4•2『线路1』 +七龙珠,http://103.193.151.146/huya.php?id=11601966$LR•IPV4•2『线路2』 哆啦A梦,http://103.193.151.146/huya.php?id=11601963$LR•IPV4•2『线路1』 哆啦A梦,https://live.ottiptv.cc/huya/11601963$LR•IPV4•2『线路2』 蜡笔小新,http://103.193.151.146/huya.php?id=11352970$LR•IPV4 @@ -93,15 +93,15 @@ RTHK32,http://php.jdshipin.com:8880/TVOD/iptv.php?id=rthk32$LR•IPV4 橙记港剧,http://www.goodiptv.club/douyu/4549169$LR•IPV4•2『线路2』 经典剧集,http://zzy789.xyz/douyu1.php?id=6863367$LR•IPV4•2『线路1』 经典剧集,http://www.goodiptv.club/douyu/6863367$LR•IPV4•2『线路2』 -热门港剧,http://zzy789.xyz/douyu1.php?id=5522351$LR•IPV4•3『线路1』 -热门港剧,http://huanqiuzhibo.cn/manifest/douyu.php?id=5522351$LR•IPV4•3『线路2』 -热门港剧,http://www.goodiptv.club/douyu/5522351$LR•IPV4•3『线路3』 -贝爷求生,https://stream1.freetv.fun/f92ea9cae12af707c587af406ddb929ea9f58aae893845b713679aab4b1df9f8.ctv$LR•IPV4•6『线路1』 -贝爷求生,http://fy27.zbds.top:55455/douyu/9661369$LR•IPV4•6『线路2』 -贝爷求生,https://www.goodiptv.club/douyu/9661369$LR•IPV4•6『线路3』 -贝爷求生,http://159.75.85.63:35455/douyu/454867$LR•IPV4•6『线路4』 -贝爷求生,http://zzy789.xyz/douyu1.php?id=454867$LR•IPV4•6『线路5』 -贝爷求生,http://www.goodiptv.club/douyu/9661369$LR•IPV4•6『线路6』 +热门港剧,http://www.goodiptv.club/douyu/5522351$LR•IPV4•3『线路1』 +热门港剧,http://zzy789.xyz/douyu1.php?id=5522351$LR•IPV4•3『线路2』 +热门港剧,http://huanqiuzhibo.cn/manifest/douyu.php?id=5522351$LR•IPV4•3『线路3』 +贝爷求生,http://www.goodiptv.club/douyu/9661369$LR•IPV4•6『线路1』 +贝爷求生,https://stream1.freetv.fun/f92ea9cae12af707c587af406ddb929ea9f58aae893845b713679aab4b1df9f8.ctv$LR•IPV4•6『线路2』 +贝爷求生,http://fy27.zbds.top:55455/douyu/9661369$LR•IPV4•6『线路3』 +贝爷求生,https://www.goodiptv.club/douyu/9661369$LR•IPV4•6『线路4』 +贝爷求生,http://159.75.85.63:35455/douyu/454867$LR•IPV4•6『线路5』 +贝爷求生,http://zzy789.xyz/douyu1.php?id=454867$LR•IPV4•6『线路6』 电视剧频道,#genre# 少年包青天第一部,https://live.ottiptv.cc/yy/1356043677$LR•IPV4 @@ -110,13 +110,13 @@ RTHK32,http://php.jdshipin.com:8880/TVOD/iptv.php?id=rthk32$LR•IPV4 爱情公寓,https://goodiptv.club/douyu/4105989$LR•IPV4•2『线路2』 雪豹,https://live.ottiptv.cc/huya/29580970$LR•IPV4 特种兵之火凤凰,https://live.ottiptv.cc/huya/29982636$LR•IPV4 -士兵突击,https://live.metshop.top/huya/11342430$LR•IPV4•2『线路1』 -士兵突击,https://live.ottiptv.cc/huya/11342430$LR•IPV4•2『线路2』 +士兵突击,https://live.ottiptv.cc/huya/11342430$LR•IPV4•2『线路1』 +士兵突击,https://live.metshop.top/huya/11342430$LR•IPV4•2『线路2』 天龙八部,https://live.ottiptv.cc/yy/1351814644$LR•IPV4 倚天屠龙记,http://cdn.jdshipin.com:8880/huya.php?id=23734246$LR•IPV4 康熙王朝,https://live.ottiptv.cc/huya/11352940$LR•IPV4 -庆余年,http://58.39.190.143:35455/huya/11352960$LR•IPV4•2『线路1』 -庆余年,https://live.ottiptv.cc/huya/11352960$LR•IPV4•2『线路2』 +庆余年,https://live.ottiptv.cc/huya/11352960$LR•IPV4•2『线路1』 +庆余年,http://58.39.190.143:35455/huya/11352960$LR•IPV4•2『线路2』 鬼吹灯之精绝古城,https://live.ottiptv.cc/huya/11352871$LR•IPV4 鬼吹灯之怒晴湘西,https://live.ottiptv.cc/huya/11602075$LR•IPV4 鬼吹灯之云南虫谷,https://live.ottiptv.cc/huya/11352898$LR•IPV4 @@ -467,25 +467,25 @@ Now星影,p3p://167.114.175.6:55331/65bf5e010005226704b84f4f048a4148$LR•IPV4 凤凰卫视中文台,http://120.198.95.220:9901/tsfile/live/1036_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•8『线路3』 凤凰卫视中文台,http://218.206.193.218:8888/hls/66/index.m3u8$LR•IPV4•8『线路4』 凤凰卫视中文台,http://120.198.95.220:9901/tsfile/live/1036_1.m3u8?key=txiptv$LR•IPV4•8『线路5』 -凤凰卫视中文台,http://223.110.245.139/ott.js.chinamobile.com/PLTV/3/224/3221226922/index.m3u8$LR•IPV4•8『线路6』 -凤凰卫视中文台,http://r.jdshipin.com/cCCzW$LR•IPV4•8『线路7』 -凤凰卫视中文台,http://cdn6.163189.xyz/163189/fhzw$LR•IPV4•8『线路8』 +凤凰卫视中文台,http://r.jdshipin.com/cCCzW$LR•IPV4•8『线路6』 +凤凰卫视中文台,http://cdn6.163189.xyz/163189/fhzw$LR•IPV4•8『线路7』 +凤凰卫视中文台,http://223.110.245.139/ott.js.chinamobile.com/PLTV/3/224/3221226922/index.m3u8$LR•IPV4•8『线路8』 凤凰卫视资讯台,http://api.mg.itv888.cn:8080/hls/11ef1dc70d8/index.m3u8$LR•IPV4•10『线路1』 -凤凰卫视资讯台,p3p://167.114.175.6:55331/5fffbf860003807cedf4e1016c3c3ed2$LR•IPV4•10『线路2』 -凤凰卫视资讯台,http://zmgd.zyrnet.com:8888/hls/109/index.m3u8$LR•IPV4•10『线路3』 -凤凰卫视资讯台,http://221.7.175.154:8445/tsfile/live/1021_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•10『线路4』 -凤凰卫视资讯台,http://120.198.95.220:9901/tsfile/live/1037_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•10『线路5』 -凤凰卫视资讯台,http://120.198.95.220:9901/tsfile/live/1037_1.m3u8?key=txiptv$LR•IPV4•10『线路6』 -凤凰卫视资讯台,http://223.110.245.167/ott.js.chinamobile.com/PLTV/3/224/3221226923/index.m3u8$LR•IPV4•10『线路7』 -凤凰卫视资讯台,http://r.jdshipin.com/0Rp07$LR•IPV4•10『线路8』 -凤凰卫视资讯台,http://php.jdshipin.com/TVOD/iptv.php?id=fhzx$LR•IPV4•10『线路9』 -凤凰卫视资讯台,http://cdn6.163189.xyz/163189/fhzx$LR•IPV4•10『线路10』 -凤凰卫视香港台,p3p://167.114.175.6:55331/5fe0b82c000cac9774c17f262e43314d$LR•IPV4•6『线路1』 -凤凰卫视香港台,http://122.152.202.33/s/81a8a44f/index.m3u8?id=fhhk$LR•IPV4•6『线路2』 -凤凰卫视香港台,http://223.110.245.136/PLTV/3/224/3221226975/index.m3u8$LR•IPV4•6『线路3』 -凤凰卫视香港台,http://r.jdshipin.com/yDoTN$LR•IPV4•6『线路4』 -凤凰卫视香港台,http://php.jdshipin.com/TVOD/iptv.php?id=fhhk$LR•IPV4•6『线路5』 -凤凰卫视香港台,http://cdn6.163189.xyz/163189/fhhk$LR•IPV4•6『线路6』 +凤凰卫视资讯台,http://zmgd.zyrnet.com:8888/hls/109/index.m3u8$LR•IPV4•10『线路2』 +凤凰卫视资讯台,http://221.7.175.154:8445/tsfile/live/1021_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•10『线路3』 +凤凰卫视资讯台,http://120.198.95.220:9901/tsfile/live/1037_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•10『线路4』 +凤凰卫视资讯台,http://120.198.95.220:9901/tsfile/live/1037_1.m3u8?key=txiptv$LR•IPV4•10『线路5』 +凤凰卫视资讯台,p3p://167.114.175.6:55331/5fffbf860003807cedf4e1016c3c3ed2$LR•IPV4•10『线路6』 +凤凰卫视资讯台,http://r.jdshipin.com/0Rp07$LR•IPV4•10『线路7』 +凤凰卫视资讯台,http://php.jdshipin.com/TVOD/iptv.php?id=fhzx$LR•IPV4•10『线路8』 +凤凰卫视资讯台,http://cdn6.163189.xyz/163189/fhzx$LR•IPV4•10『线路9』 +凤凰卫视资讯台,http://223.110.245.167/ott.js.chinamobile.com/PLTV/3/224/3221226923/index.m3u8$LR•IPV4•10『线路10』 +凤凰卫视香港台,http://122.152.202.33/s/81a8a44f/index.m3u8?id=fhhk$LR•IPV4•6『线路1』 +凤凰卫视香港台,p3p://167.114.175.6:55331/5fe0b82c000cac9774c17f262e43314d$LR•IPV4•6『线路2』 +凤凰卫视香港台,http://r.jdshipin.com/yDoTN$LR•IPV4•6『线路3』 +凤凰卫视香港台,http://php.jdshipin.com/TVOD/iptv.php?id=fhhk$LR•IPV4•6『线路4』 +凤凰卫视香港台,http://cdn6.163189.xyz/163189/fhhk$LR•IPV4•6『线路5』 +凤凰卫视香港台,http://223.110.245.136/PLTV/3/224/3221226975/index.m3u8$LR•IPV4•6『线路6』 台视新闻,http://38.64.72.148:80/hls/modn/list/4013/chunklist0.m3u8$LR•IPV4•4『线路1』 台视新闻,http://38.64.72.148:80/hls/modn/list/4013/chunklist1.m3u8$LR•IPV4•4『线路2』 台视新闻,http://38.64.72.148/hls/modn/list/4013/chunklist0.m3u8$LR•IPV4•4『线路3』 @@ -500,16 +500,16 @@ Now星影,p3p://167.114.175.6:55331/65bf5e010005226704b84f4f048a4148$LR•IPV4 来宾综合,http://zb.gxlbamc.com:1935/live/lbzh.stream/playlist.m3u8$LR•IPV4 ☘️天津频道,#genre# -天津,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226954/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Eaf3wyULP1h575eM_4ByMDg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•18『线路1』 -天津,http://204.12.221.218:8181/3m1080p/tjws.m3u8$LR•IPV4•18『线路2』 -天津,http://107.150.60.122/live/tjwshd.m3u8$LR•IPV4•18『线路3』 -天津,http://192.151.150.154/live/tjwshd.m3u8$LR•IPV4•18『线路4』 -天津,http://38.75.136.137:98/gslb/dsdqpub/tjwshd.m3u8?auth=testpub$LR•IPV4•18『线路5』 -天津,http://63.141.230.178:82/gslb/zbdq5.m3u8?id=tjwshd$LR•IPV4•18『线路6』 -天津,http://207.56.13.146:81/cdnlive/tjws.m3u8$LR•IPV4•18『线路7』 -天津,http://120.198.95.220:9901/tsfile/live/1067_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•18『线路8』 -天津,http://112.27.235.94:8000/hls/42/index.m3u8$LR•IPV4•18『线路9』 -天津,https://piccpndks.v.kcdnvip.com/audio/tianjin_2/index.m3u8$LR•IPV4•18『线路10』 +天津,https://piccpndks.v.kcdnvip.com/audio/tianjin_2/index.m3u8$LR•IPV4•18『线路1』 +天津,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226954/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Eaf3wyULP1h575eM_4ByMDg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•18『线路2』 +天津,http://204.12.221.218:8181/3m1080p/tjws.m3u8$LR•IPV4•18『线路3』 +天津,http://107.150.60.122/live/tjwshd.m3u8$LR•IPV4•18『线路4』 +天津,http://192.151.150.154/live/tjwshd.m3u8$LR•IPV4•18『线路5』 +天津,http://38.75.136.137:98/gslb/dsdqpub/tjwshd.m3u8?auth=testpub$LR•IPV4•18『线路6』 +天津,http://63.141.230.178:82/gslb/zbdq5.m3u8?id=tjwshd$LR•IPV4•18『线路7』 +天津,http://207.56.13.146:81/cdnlive/tjws.m3u8$LR•IPV4•18『线路8』 +天津,http://120.198.95.220:9901/tsfile/live/1067_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•18『线路9』 +天津,http://112.27.235.94:8000/hls/42/index.m3u8$LR•IPV4•18『线路10』 天津,http://23.237.228.134/live8/tianjing.m3u8$LR•IPV4•18『线路11』 天津,http://gfr.x3322.net:9901/tsfile/live/1090_1.m3u8$LR•IPV4•18『线路12』 天津,http://api.kkitv.itv888.cn:8080/hls/z2lkdkrb4w/index.m3u8$LR•IPV4•18『线路13』 @@ -971,18 +971,18 @@ J_SPORTS_4,https://stream01.willfonk.com/live_playlist.m3u8?cid=BS245&r=FHD&ccod DAZN1,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=2562&tk=e640d0a1bf70$LR•IPV4 DAZN2,https://stream1.freetv.fun/dazn-sport-2-1.ctv$LR•IPV4•2『线路1』 DAZN2,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=5145&tk=e640d0a1bf70$LR•IPV4•2『线路2』 -skysports,https://stream1.freetv.fun/skysports-3.ctv$LR•IPV4•8『线路1』 -skysports,https://stream1.freetv.fun/skysports-2.ctv$LR•IPV4•8『线路2』 -skysports,https://stream1.freetv.fun/skysports-14.ctv$LR•IPV4•8『线路3』 -skysports,https://stream1.freetv.fun/skysports-12.ctv$LR•IPV4•8『线路4』 -skysports,https://stream1.freetv.fun/skysports-16.ctv$LR•IPV4•8『线路5』 -skysports,https://stream1.freetv.fun/skysports-17.ctv$LR•IPV4•8『线路6』 -skysports,https://stream1.freetv.fun/skysports-15.ctv$LR•IPV4•8『线路7』 -skysports,https://stream1.freetv.fun/skysports-7.ctv$LR•IPV4•8『线路8』 +skysports,https://stream1.freetv.fun/skysports-14.ctv$LR•IPV4•8『线路1』 +skysports,https://stream1.freetv.fun/skysports-12.ctv$LR•IPV4•8『线路2』 +skysports,https://stream1.freetv.fun/skysports-3.ctv$LR•IPV4•8『线路3』 +skysports,https://stream1.freetv.fun/skysports-16.ctv$LR•IPV4•8『线路4』 +skysports,https://stream1.freetv.fun/skysports-17.ctv$LR•IPV4•8『线路5』 +skysports,https://stream1.freetv.fun/skysports-15.ctv$LR•IPV4•8『线路6』 +skysports,https://stream1.freetv.fun/skysports-7.ctv$LR•IPV4•8『线路7』 +skysports,https://stream1.freetv.fun/skysports-2.ctv$LR•IPV4•8『线路8』 zonghe,#genre# -纪晓岚,http://fmbox.cc/huya.php?id=11342396$LR•IPV4•2『线路1』 -纪晓岚,https://live.ottiptv.cc/huya/11342396$LR•IPV4•2『线路2』 +纪晓岚,https://live.ottiptv.cc/huya/11342396$LR•IPV4•2『线路1』 +纪晓岚,http://fmbox.cc/huya.php?id=11342396$LR•IPV4•2『线路2』 地下交通站,http://live.nctv.top/DJlio/huya.php?id=11342433$LR•IPV4•2『线路1』 地下交通站,http://fmbox.cc/huya.php?id=11342433$LR•IPV4•2『线路2』 鹊刀门,http://fmbox.cc/huya.php?id=11352963$LR•IPV4 @@ -1318,10 +1318,10 @@ FOX Sports,https://jmp2.uk/plu-5a74b8e1e22a61737979c6bf.m3u8$LR•IPV4•8『线 FOX Sports,http://85.237.89.160:9590/usa-s/FOX-SPORTS-1/index.m3u8$LR•IPV4•8『线路6』 FOX Sports,https://streamvidex.qzz.io/videx/fox2usa/index.m3u8$LR•IPV4•8『线路7』 FOX Sports,http://108.181.20.255:27347/livehttpplay?channel_id=23054$LR•IPV4•8『线路8』 -NBA,http://170.yfvodcdn.com:19980/live/nbaTV2/hls.m3u8$LR•IPV4•8『线路1』 -NBA,p3p://167.114.175.6:55331/65a587500007bc039fca3566638e69af$LR•IPV4•8『线路2』 -NBA,https://stream1.freetv.fun/nba-tv-7.m3u8$LR•IPV4•8『线路3』 -NBA,https://stream1.freetv.fun/nba-tv-5.m3u8$LR•IPV4•8『线路4』 +NBA,https://stream1.freetv.fun/nba-tv-7.m3u8$LR•IPV4•8『线路1』 +NBA,https://stream1.freetv.fun/nba-tv-5.m3u8$LR•IPV4•8『线路2』 +NBA,http://170.yfvodcdn.com:19980/live/nbaTV2/hls.m3u8$LR•IPV4•8『线路3』 +NBA,p3p://167.114.175.6:55331/65a587500007bc039fca3566638e69af$LR•IPV4•8『线路4』 NBA,https://live-manifest.production-public.tubi.io/live/553b8d5e-fd2a-4a61-bdfa-73b34c299d75/playlist.m3u8$LR•IPV4•8『线路5』 NBA,https://jmp2.uk/plu-6792c30abc03978b9b8bb832.m3u8$LR•IPV4•8『线路6』 NBA,https://amg00556-amg00556c3-firetv-us-6060.playouts.now.amagi.tv/playlist.m3u8$LR•IPV4•8『线路7』 @@ -1522,13 +1522,13 @@ TraceSports,http://209.141.58.162:4994/proxy?url=http%3A//209.141.58.162%3A5050/ 义胆红唇,https://vip.ffzy-play6.com/20221116/7315_8765f39c/index.m3u8$LR•IPV4 义胆雄心,https://vip.ffzy-play7.com/20221129/7714_a0c75de1/index.m3u8$LR•IPV4 音乐僵尸,https://vip.ffzy-play6.com/20221207/10627_09b3f2e5/index.m3u8$LR•IPV4 -英雄,https://vip.ffzy-play7.com/20221227/9993_9681b67b/index.m3u8$LR•IPV4•7『线路1』 -英雄,https://vip.ffzy-play.com/20221015/981_2ca5b5f9/index.m3u8$LR•IPV4•7『线路2』 -英雄,https://vip.ffzy-play6.com/20221207/10694_f9088e66/index.m3u8$LR•IPV4•7『线路3』 -英雄,https://vip.ffzy-play7.com/20221129/7743_4656dd25/index.m3u8$LR•IPV4•7『线路4』 -英雄,https://vip.ffzy-play6.com/20221112/6371_9b5bf930/index.m3u8$LR•IPV4•7『线路5』 -英雄,http://cdn.jdshipin.com:8880/huya.php?id=23824164$LR•IPV4•7『线路6』 -英雄,https://live.ottiptv.cc/yy/1352475619$LR•IPV4•7『线路7』 +英雄,http://cdn.jdshipin.com:8880/huya.php?id=23824164$LR•IPV4•7『线路1』 +英雄,https://live.ottiptv.cc/yy/1352475619$LR•IPV4•7『线路2』 +英雄,https://vip.ffzy-play7.com/20221227/9993_9681b67b/index.m3u8$LR•IPV4•7『线路3』 +英雄,https://vip.ffzy-play.com/20221015/981_2ca5b5f9/index.m3u8$LR•IPV4•7『线路4』 +英雄,https://vip.ffzy-play6.com/20221207/10694_f9088e66/index.m3u8$LR•IPV4•7『线路5』 +英雄,https://vip.ffzy-play7.com/20221129/7743_4656dd25/index.m3u8$LR•IPV4•7『线路6』 +英雄,https://vip.ffzy-play6.com/20221112/6371_9b5bf930/index.m3u8$LR•IPV4•7『线路7』 赢钱专家,https://vip.ffzy-play6.com/20221113/6794_d514b390/index.m3u8$LR•IPV4 有话好好说,https://vip.ffzy-play7.com/20221112/3406_98dc6f14/index.m3u8$LR•IPV4 与龙共舞,https://vip.ffzy-play6.com/20221207/10859_1b02d27c/index.m3u8$LR•IPV4 @@ -1637,10 +1637,10 @@ A计划,https://vip.ffzy-play7.com/20221115/4412_bf4bdaf6/index.m3u8$LR•IPV4 贺岁合家欢剧场,https://live.metshop.top/huya/11602067$LR•IPV4 滇军抗战,https://live.metshop.top/huya/11342388$LR•IPV4 联合抗日,https://live.metshop.top/huya/11352910$LR•IPV4 -三国,https://live.metshop.top/huya/11352944$LR•IPV4•4『线路1』 -三国,http://103.193.151.146/huya.php?id=29465871$LR•IPV4•4『线路2』 -三国,https://live.ottiptv.cc/huya/11602081$LR•IPV4•4『线路3』 -三国,https://live.ottiptv.cc/huya/11352944$LR•IPV4•4『线路4』 +三国,https://live.ottiptv.cc/huya/11602081$LR•IPV4•4『线路1』 +三国,https://live.ottiptv.cc/huya/11352944$LR•IPV4•4『线路2』 +三国,https://live.metshop.top/huya/11352944$LR•IPV4•4『线路3』 +三国,http://103.193.151.146/huya.php?id=29465871$LR•IPV4•4『线路4』 雍正皇帝,https://live.metshop.top/huya/11342439$LR•IPV4 许冠英合集,https://live.metshop.top/huya/11601972$LR•IPV4 未知1,http://58.39.190.143:35455/huya/23734246$LR•IPV4 @@ -1672,9 +1672,9 @@ XXXXXXXXX粤,http://lxajh.top/tv/douyu.php?id=8912325$LR•IPV4 航拍中国第一季,http://hls.cntv.myhwcdn.cn/asp/hls/4000/0303000a/3/default/8edf3fb6a69148ea9a7dc0b5a9d99fdb/4000.m3u8$LR•IPV4 航拍中国第二季,http://newcntv.qcloudcdn.com/asp/hls/4000/0303000a/3/default/2bdfdad540b342f592f9817cb7f3b79a/4000.m3u8$LR•IPV4 地理中国,http://newcntv.qcloudcdn.com/asp/hls/1200/0303000a/3/default/c6baf6f74bb944aeacee1065ea72c798/1200.m3u8$LR•IPV4 -纪录,https://v4-e6b1c5baf4e240fe63adbf68dda23435.livehwc4.com/play.kankanlive.com/live/1698423397390920.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=f3fb3ddaca05941087114cf6481e1c23$LR•IPV4•41『线路1』 -纪录,https://ali-m-l.cztv.com/channels/lantian/channel012/1080p.m3u8$LR•IPV4•41『线路2』 -纪录,https://v4-702cae17a28d6e4f0c0002bba021d934.livehwc4.com/play.kankanlive.com/live/1698423397390920.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=2b87983b301b48537526846889074801$LR•IPV4•41『线路3』 +纪录,https://v4-e6b1c5baf4e240fe63adbf68dda23435.livehwc4.com/play.kankanlive.com/live/1698423397390920.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=8a921813ee3b23c82763145c9f291a3b$LR•IPV4•41『线路1』 +纪录,https://v4-e6b1c5baf4e240fe63adbf68dda23435.livehwc4.com/play.kankanlive.com/live/1698423397390920.m3u8?sub_m3u8=true&edge_slice=true&user_session_id=f3fb3ddaca05941087114cf6481e1c23$LR•IPV4•41『线路2』 +纪录,https://ali-m-l.cztv.com/channels/lantian/channel012/1080p.m3u8$LR•IPV4•41『线路3』 纪录,http://free.cnlive.club/channel/n3f497a4c/index.m3u8?q=1752629214236$LR•IPV4•41『线路4』 纪录,http://free.cnlive.club/channel/2ae73b1a/index.m3u8?q=1752629214236$LR•IPV4•41『线路5』 纪录,http://free.cnlive.club/channel/nb957a7c/index.m3u8?q=1752629214236$LR•IPV4•41『线路6』 @@ -1812,9 +1812,9 @@ Cinemax HK,p3p://167.114.175.6:55331/65b1767d00058cdcce68527c3131148e$LR•IPV4 NOW 报价,p3p://167.114.175.6:55331/65acda400000be11bc6602f779434a76$LR•IPV4 智慧跑马,p3p://167.114.175.6:55331/66e860ba000b17abca4b7ac11c665324$LR•IPV4 OneTV综合,p3p://167.114.175.6:55331/64d5c5550007c4d9744057ea09db782a$LR•IPV4 -C+,http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/01.m3u8$LR•IPV4•4『线路1』 -C+,http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/02.m3u8$LR•IPV4•4『线路2』 -C+,http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/03.m3u8$LR•IPV4•4『线路3』 +C+,http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/03.m3u8$LR•IPV4•4『线路1』 +C+,http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/01.m3u8$LR•IPV4•4『线路2』 +C+,http://ottproxy2.ist.ooo/livehls/MOB-U1-NO/02.m3u8$LR•IPV4•4『线路3』 C+,p3p://167.114.175.6:55331/65ac2e740004fbd2b9c6ef2b03744ac0$LR•IPV4•4『线路4』 有线赛马18,p3p://167.114.175.6:55331/66e85b81000bcd1eca37145143a407c7$LR•IPV4•2『线路1』 有线赛马18,p3p://167.114.175.6:55331/64db58eb000d759e8a08afbc7bd65062$LR•IPV4•2『线路2』 @@ -1988,81 +1988,81 @@ Loupe 4K,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=4726&tk=f6cc1e0a0e1a$LR•IP 🌐央视频道,#genre# CCTV兵器,http://38.75.136.137:98/gslb/dsdqpub/gfjs.m3u8?auth=testpub$LR•IPV4 -CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226895/1.m3u8?$LR•IPV6•90『线路1』 -CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226893/1.m3u8?$LR•IPV6•90『线路2』 -CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226471/1.m3u8?$LR•IPV6•90『线路3』 -CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226335/1.m3u8?$LR•IPV6•90『线路4』 -CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226469/1.m3u8?$LR•IPV6•90『线路5』 -CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226468/1.m3u8?$LR•IPV6•90『线路6』 -CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226946/1.m3u8?$LR•IPV6•90『线路7』 -CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226485/1.m3u8?$LR•IPV6•90『线路8』 -CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226944/1.m3u8?$LR•IPV6•90『线路9』 -CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226937/1.m3u8?$LR•IPV6•90『线路10』 -CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226334/1.m3u8?$LR•IPV6•90『线路11』 -CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226942/1.m3u8?$LR•IPV6•90『线路12』 -CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226316/1.m3u8?$LR•IPV6•90『线路13』 -CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226947/1.m3u8?$LR•IPV6•90『线路14』 -CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226333/1.m3u8?$LR•IPV6•90『线路15』 -CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227002/1.m3u8?$LR•IPV6•90『线路16』 -CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226318/1.m3u8?$LR•IPV6•90『线路17』 -CCTV,http://222.223.41.27:8888/hls/2/index.m3u8$LR•IPV4•90『线路18』 -CCTV,http://116.128.243.121:85/tsfile/live/0002_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•90『线路19』 -CCTV,http://63.141.230.178:82/gslb/zbdq5.m3u8?id=cctv3hd$LR•IPV4•90『线路20』 -CCTV,http://207.56.13.146:81/cdnlive/cctv3.m3u8$LR•IPV4•90『线路21』 -CCTV,http://63.141.230.178:82/gslb/zbdq5.m3u8?id=cctv4hd$LR•IPV4•90『线路22』 -CCTV,http://74.91.26.218:82/live/cctv4hd.m3u8$LR•IPV4•90『线路23』 -CCTV,http://207.56.13.146:81/cdnlive/cctv4.m3u8$LR•IPV4•90『线路24』 -CCTV,http://38.75.136.137:98/gslb/dsdqbv/cctv5p.m3u8?auth=test20251009$LR•IPV4•90『线路25』 -CCTV,http://204.12.221.218:8181/3m1080p/cctv6.m3u8$LR•IPV4•90『线路26』 -CCTV,http://207.56.13.146:81/cdnlive/cctv6.m3u8$LR•IPV4•90『线路27』 -CCTV,http://74.91.26.218:82/live/cctv7hd.m3u8$LR•IPV4•90『线路28』 -CCTV,http://38.75.136.137:98/gslb/dsdqbv/cctv7hd.m3u8?auth=test20251009$LR•IPV4•90『线路29』 -CCTV,http://192.151.150.154/live/cctv8k.m3u8$LR•IPV4•90『线路30』 -CCTV,http://207.56.13.146:81/cdnlive/cctv8.m3u8$LR•IPV4•90『线路31』 -CCTV,http://173.208.212.130:8181/720p/cctv8.m3u8$LR•IPV4•90『线路32』 -CCTV,http://38.75.136.137:98/gslb/dsdqbv/cctv8hd.m3u8?auth=test20251009$LR•IPV4•90『线路33』 -CCTV,http://204.12.221.218:8181/3m1080p/cctv8.m3u8$LR•IPV4•90『线路34』 -CCTV,http://69.30.245.50/live/cctv8.m3u8$LR•IPV4•90『线路35』 -CCTV,http://222.223.41.27:8888/hls/9/index.m3u8$LR•IPV4•90『线路36』 -CCTV,https://hwapi.yntv.net/ew265l/z1z6s5.m3u8$LR•IPV4•90『线路37』 -CCTV,http://74.91.26.218:82/live/cctv10hd.m3u8$LR•IPV4•90『线路38』 -CCTV,http://74.91.26.218:82/live/cctv11hd.m3u8$LR•IPV4•90『线路39』 -CCTV,http://38.75.136.137:98/gslb/dsdqpub/cctv12hd.m3u8?auth=testpub$LR•IPV4•90『线路40』 -CCTV,https://event.pull.hebtv.com/jishi/cp1.m3u8$LR•IPV4•90『线路41』 -CCTV,http://pull-hls-f1.douyinliving.com/media/stream-696107587393815378/playlist.m3u8?keeptime=00093a80&wsSecret=bbbd054778ab532edfa97bf7c5395746&wsTime=6a544fee&arch_hrchy=s2&s_anchor=1&major_anchor_level=vip&t_id=037-2026071310394131FD5A22CCB9DDAFA77E-5XIF43$LR•IPV4•90『线路42』 -CCTV,http://63.141.230.178:82/gslb/zbdq5.m3u8?id=cctv13hd$LR•IPV4•90『线路43』 -CCTV,http://113.25.252.226:9901/tsfile/live/1017_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•90『线路44』 -CCTV,https://event.pull.hebtv.com/jishi/cp2.m3u8$LR•IPV4•90『线路45』 -CCTV,http://38.75.136.137:98/gslb/dsdqbv/cctv15hd.m3u8?auth=test20251009$LR•IPV4•90『线路46』 -CCTV,http://38.75.136.137:98/gslb/dsdqpub/cctv15hd.m3u8?auth=testpub$LR•IPV4•90『线路47』 -CCTV,http://38.75.136.137:98/gslb/dsdqpub/cctv17hd.m3u8?auth=testpub$LR•IPV4•90『线路48』 -CCTV,https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784322000-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-25fe408e6545f49f3d4eb7f92e97c764&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•90『线路49』 -CCTV,https://shcm-stream-cf1.stream.264788.xyz/cms001/ch00000090990000001620/index.m3u8?streamid=8a034b40397504e25b3775c772237996&streamkey=01vY5fRxC8VyKg4oq30vfikHXTCAKySLP29l6OG91kQlzDttHgzNLkUw5kivm3PfNsVHJv5FgdsPBYFYI2IWpt7tfRCuFHqLT2pvX67ubMds8jl2DHtvOh0&token=1775754349-4f33f4f84a4abeba-0-91687dc8c9325092efa1d00f330d2710$LR•IPV4•90『线路50』 -CCTV,https://epg.pw/stream/ac8062ec9484078061d3bef507c15a423ac57ae4144e3fcc4b0a198dd420f911.m3u8$LR•IPV4•90『线路51』 -CCTV,https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784325600-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-b583b000601c3690c0e4bae75e1261f0&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•90『线路52』 -CCTV,http://183.196.25.171:808/hls/77/index.m3u8$LR•IPV4•90『线路53』 -CCTV,https://jsv-live-play.sfccn.com/live/jsv_3920_fhd.m3u8$LR•IPV4•90『线路54』 -CCTV,http://183.196.25.171:808/hls/11/index.m3u8$LR•IPV4•90『线路55』 -CCTV,http://183.196.25.171:808/hls/93/index.m3u8$LR•IPV4•90『线路56』 -CCTV,https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784271600-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-6aec44040ec72def77e22587fc404005&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•90『线路57』 -CCTV,http://38.75.136.137:98/gslb/dsdqpub/wsjk.m3u8?auth=testpub$LR•IPV4•90『线路58』 -CCTV,http://38.75.136.137:98/gslb/dsdqpub/ystq.m3u8?auth=testpub$LR•IPV4•90『线路59』 -CCTV,http://38.75.136.137:98/gslb/dsdqpub/dyjc.m3u8?auth=testpub$LR•IPV4•90『线路60』 -CCTV,http://38.75.136.137:98/gslb/dsdqpub/fyjc.m3u8?auth=testpub$LR•IPV4•90『线路61』 -CCTV,http://38.75.136.137:98/gslb/dsdqpub/hjjc.m3u8?auth=testpub$LR•IPV4•90『线路62』 -CCTV,http://38.75.136.137:98/gslb/dsdqpub/fyzq.m3u8?auth=testpub$LR•IPV4•90『线路63』 -CCTV,http://38.75.136.137:98/gslb/dsdqpub/fyyy.m3u8?auth=testpub$LR•IPV4•90『线路64』 -CCTV,http://38.75.136.137:98/gslb/dsdqpub/sjdl.m3u8?auth=testpub$LR•IPV4•90『线路65』 -CCTV,http://38.75.136.137:98/gslb/dsdqpub/dszn.m3u8?auth=testpub$LR•IPV4•90『线路66』 -CCTV,http://38.75.136.137:98/gslb/dsdqpub/ysjp.m3u8?auth=testpub$LR•IPV4•90『线路67』 -CCTV,http://38.75.136.137:98/gslb/dsdqpub/nxss.m3u8?auth=testpub$LR•IPV4•90『线路68』 -CCTV,http://fn.tmde.top:35455/nptv/cctv4k.m3u8$LR•IPV4•90『线路69』 -CCTV,http://fn.tmde.top:35455/nptv/cctv8k.m3u8$LR•IPV4•90『线路70』 -CCTV,http://xc.mfykeke.top:35455/nptv/cctv4k.m3u8$LR•IPV4•90『线路71』 -CCTV,http://xc.mfykeke.top:35455/nptv/cctv8k.m3u8$LR•IPV4•90『线路72』 -CCTV,http://69.30.245.50/live/cctv6.m3u8$LR•IPV4•90『线路73』 -CCTV,http://74.91.26.218:82/live/cctv8hd.m3u8$LR•IPV4•90『线路74』 -CCTV,http://74.91.26.218:82/live/cctv17hd.m3u8$LR•IPV4•90『线路75』 +CCTV,https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784329200-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-2245971645866ed95972e22af68cc8d1&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•90『线路1』 +CCTV,http://183.196.25.171:808/hls/77/index.m3u8$LR•IPV4•90『线路2』 +CCTV,https://jsv-live-play.sfccn.com/live/jsv_3920_fhd.m3u8$LR•IPV4•90『线路3』 +CCTV,http://183.196.25.171:808/hls/11/index.m3u8$LR•IPV4•90『线路4』 +CCTV,http://183.196.25.171:808/hls/93/index.m3u8$LR•IPV4•90『线路5』 +CCTV,https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784271600-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-6aec44040ec72def77e22587fc404005&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•90『线路6』 +CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226895/1.m3u8?$LR•IPV6•90『线路7』 +CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226893/1.m3u8?$LR•IPV6•90『线路8』 +CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226471/1.m3u8?$LR•IPV6•90『线路9』 +CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226335/1.m3u8?$LR•IPV6•90『线路10』 +CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226469/1.m3u8?$LR•IPV6•90『线路11』 +CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226468/1.m3u8?$LR•IPV6•90『线路12』 +CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226946/1.m3u8?$LR•IPV6•90『线路13』 +CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226485/1.m3u8?$LR•IPV6•90『线路14』 +CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226944/1.m3u8?$LR•IPV6•90『线路15』 +CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226937/1.m3u8?$LR•IPV6•90『线路16』 +CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226334/1.m3u8?$LR•IPV6•90『线路17』 +CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226942/1.m3u8?$LR•IPV6•90『线路18』 +CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226316/1.m3u8?$LR•IPV6•90『线路19』 +CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226947/1.m3u8?$LR•IPV6•90『线路20』 +CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226333/1.m3u8?$LR•IPV6•90『线路21』 +CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227002/1.m3u8?$LR•IPV6•90『线路22』 +CCTV,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226318/1.m3u8?$LR•IPV6•90『线路23』 +CCTV,http://222.223.41.27:8888/hls/2/index.m3u8$LR•IPV4•90『线路24』 +CCTV,http://116.128.243.121:85/tsfile/live/0002_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•90『线路25』 +CCTV,http://63.141.230.178:82/gslb/zbdq5.m3u8?id=cctv3hd$LR•IPV4•90『线路26』 +CCTV,http://207.56.13.146:81/cdnlive/cctv3.m3u8$LR•IPV4•90『线路27』 +CCTV,http://63.141.230.178:82/gslb/zbdq5.m3u8?id=cctv4hd$LR•IPV4•90『线路28』 +CCTV,http://74.91.26.218:82/live/cctv4hd.m3u8$LR•IPV4•90『线路29』 +CCTV,http://207.56.13.146:81/cdnlive/cctv4.m3u8$LR•IPV4•90『线路30』 +CCTV,http://38.75.136.137:98/gslb/dsdqbv/cctv5p.m3u8?auth=test20251009$LR•IPV4•90『线路31』 +CCTV,http://204.12.221.218:8181/3m1080p/cctv6.m3u8$LR•IPV4•90『线路32』 +CCTV,http://207.56.13.146:81/cdnlive/cctv6.m3u8$LR•IPV4•90『线路33』 +CCTV,http://74.91.26.218:82/live/cctv7hd.m3u8$LR•IPV4•90『线路34』 +CCTV,http://38.75.136.137:98/gslb/dsdqbv/cctv7hd.m3u8?auth=test20251009$LR•IPV4•90『线路35』 +CCTV,http://192.151.150.154/live/cctv8k.m3u8$LR•IPV4•90『线路36』 +CCTV,http://207.56.13.146:81/cdnlive/cctv8.m3u8$LR•IPV4•90『线路37』 +CCTV,http://173.208.212.130:8181/720p/cctv8.m3u8$LR•IPV4•90『线路38』 +CCTV,http://38.75.136.137:98/gslb/dsdqbv/cctv8hd.m3u8?auth=test20251009$LR•IPV4•90『线路39』 +CCTV,http://204.12.221.218:8181/3m1080p/cctv8.m3u8$LR•IPV4•90『线路40』 +CCTV,http://69.30.245.50/live/cctv8.m3u8$LR•IPV4•90『线路41』 +CCTV,http://222.223.41.27:8888/hls/9/index.m3u8$LR•IPV4•90『线路42』 +CCTV,https://hwapi.yntv.net/ew265l/z1z6s5.m3u8$LR•IPV4•90『线路43』 +CCTV,http://74.91.26.218:82/live/cctv10hd.m3u8$LR•IPV4•90『线路44』 +CCTV,http://74.91.26.218:82/live/cctv11hd.m3u8$LR•IPV4•90『线路45』 +CCTV,http://38.75.136.137:98/gslb/dsdqpub/cctv12hd.m3u8?auth=testpub$LR•IPV4•90『线路46』 +CCTV,https://event.pull.hebtv.com/jishi/cp1.m3u8$LR•IPV4•90『线路47』 +CCTV,http://pull-hls-f1.douyinliving.com/media/stream-696107587393815378/playlist.m3u8?keeptime=00093a80&wsSecret=bbbd054778ab532edfa97bf7c5395746&wsTime=6a544fee&arch_hrchy=s2&s_anchor=1&major_anchor_level=vip&t_id=037-2026071310394131FD5A22CCB9DDAFA77E-5XIF43$LR•IPV4•90『线路48』 +CCTV,http://63.141.230.178:82/gslb/zbdq5.m3u8?id=cctv13hd$LR•IPV4•90『线路49』 +CCTV,http://113.25.252.226:9901/tsfile/live/1017_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•90『线路50』 +CCTV,https://event.pull.hebtv.com/jishi/cp2.m3u8$LR•IPV4•90『线路51』 +CCTV,http://38.75.136.137:98/gslb/dsdqbv/cctv15hd.m3u8?auth=test20251009$LR•IPV4•90『线路52』 +CCTV,http://38.75.136.137:98/gslb/dsdqpub/cctv15hd.m3u8?auth=testpub$LR•IPV4•90『线路53』 +CCTV,http://38.75.136.137:98/gslb/dsdqpub/cctv17hd.m3u8?auth=testpub$LR•IPV4•90『线路54』 +CCTV,https://live-play-hls.cctvnews.cctv.com/CCTVChannel/channel_cctv4_mbd.m3u8?auth_key=1784322000-1-b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c-25fe408e6545f49f3d4eb7f92e97c764&yid=b59134a2ead43d7f783f943c8f535e7bb80c5169575b2e8efcd5b3ddea21b41c$LR•IPV4•90『线路55』 +CCTV,https://shcm-stream-cf1.stream.264788.xyz/cms001/ch00000090990000001620/index.m3u8?streamid=8a034b40397504e25b3775c772237996&streamkey=01vY5fRxC8VyKg4oq30vfikHXTCAKySLP29l6OG91kQlzDttHgzNLkUw5kivm3PfNsVHJv5FgdsPBYFYI2IWpt7tfRCuFHqLT2pvX67ubMds8jl2DHtvOh0&token=1775754349-4f33f4f84a4abeba-0-91687dc8c9325092efa1d00f330d2710$LR•IPV4•90『线路56』 +CCTV,https://epg.pw/stream/ac8062ec9484078061d3bef507c15a423ac57ae4144e3fcc4b0a198dd420f911.m3u8$LR•IPV4•90『线路57』 +CCTV,http://69.30.245.50/live/cctv6.m3u8$LR•IPV4•90『线路58』 +CCTV,http://74.91.26.218:82/live/cctv8hd.m3u8$LR•IPV4•90『线路59』 +CCTV,http://74.91.26.218:82/live/cctv17hd.m3u8$LR•IPV4•90『线路60』 +CCTV,http://38.75.136.137:98/gslb/dsdqpub/wsjk.m3u8?auth=testpub$LR•IPV4•90『线路61』 +CCTV,http://38.75.136.137:98/gslb/dsdqpub/ystq.m3u8?auth=testpub$LR•IPV4•90『线路62』 +CCTV,http://38.75.136.137:98/gslb/dsdqpub/dyjc.m3u8?auth=testpub$LR•IPV4•90『线路63』 +CCTV,http://38.75.136.137:98/gslb/dsdqpub/fyjc.m3u8?auth=testpub$LR•IPV4•90『线路64』 +CCTV,http://38.75.136.137:98/gslb/dsdqpub/hjjc.m3u8?auth=testpub$LR•IPV4•90『线路65』 +CCTV,http://38.75.136.137:98/gslb/dsdqpub/fyzq.m3u8?auth=testpub$LR•IPV4•90『线路66』 +CCTV,http://38.75.136.137:98/gslb/dsdqpub/fyyy.m3u8?auth=testpub$LR•IPV4•90『线路67』 +CCTV,http://38.75.136.137:98/gslb/dsdqpub/sjdl.m3u8?auth=testpub$LR•IPV4•90『线路68』 +CCTV,http://38.75.136.137:98/gslb/dsdqpub/dszn.m3u8?auth=testpub$LR•IPV4•90『线路69』 +CCTV,http://38.75.136.137:98/gslb/dsdqpub/ysjp.m3u8?auth=testpub$LR•IPV4•90『线路70』 +CCTV,http://38.75.136.137:98/gslb/dsdqpub/nxss.m3u8?auth=testpub$LR•IPV4•90『线路71』 +CCTV,http://fn.tmde.top:35455/nptv/cctv4k.m3u8$LR•IPV4•90『线路72』 +CCTV,http://fn.tmde.top:35455/nptv/cctv8k.m3u8$LR•IPV4•90『线路73』 +CCTV,http://xc.mfykeke.top:35455/nptv/cctv4k.m3u8$LR•IPV4•90『线路74』 +CCTV,http://xc.mfykeke.top:35455/nptv/cctv8k.m3u8$LR•IPV4•90『线路75』 CCTV,http://69.30.245.50/live/cctv1.m3u8$LR•IPV4•90『线路76』 CCTV,http://74.91.26.218:82/live/cctv1hd.m3u8$LR•IPV4•90『线路77』 CCTV,https://global.cgtn.cicc.media.caton.cloud/master/cgtn-america.m3u8$LR•IPV4•90『线路78』 @@ -2083,8 +2083,8 @@ CCTV,https://xykt-fix.github.io/Y77.m3u8$LR•IPV4•90『线路90』 周星星,http://live.metshop.top/huya/11336587?cdn=alicdn$LR•IPV4 周星驰,http://cdn.jdshipin.com:8880/huya.php?id=11342412$LR•IPV4 梁家辉,http://live.metshop.top/huya/11342429?cdn=alicdn$LR•IPV4 -刘德华,http://epg.112114.xyz/douyu/2516864$LR•IPV4•2『线路1』 -刘德华,http://live.metshop.top/huya/11342424?cdn=alicdn$LR•IPV4•2『线路2』 +刘德华,http://live.metshop.top/huya/11342424?cdn=alicdn$LR•IPV4•2『线路1』 +刘德华,http://epg.112114.xyz/douyu/2516864$LR•IPV4•2『线路2』 林正英,http://zzy789.xyz/douyu1.php?id=7356023$LR•IPV4•2『线路1』 林正英,http://epg.112114.xyz/douyu/218859$LR•IPV4•2『线路2』 @@ -2568,24 +2568,23 @@ YOUNG,https://s.emisoras.tv:8081/penielkids/index.m3u8$LR•IPV4•3『线路3 中国蓝新闻,https://ali-m-l.cztv.com/channels/lantian/channel009/1080p.m3u8?$LR•IPV4•2『线路2』 广东,#genre# -深圳卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226959/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EGrVNEZREjuNVKiTJo2mtwg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•18『线路1』 -深圳卫视,http://120.198.95.220:9901/tsfile/live/1048_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•18『线路2』 -深圳卫视,http://120.198.95.220:9901/tsfile/live/1048_1.m3u8?key=txiptv$LR•IPV4•18『线路3』 -深圳卫视,http://173.208.212.130:8181/720p/szws.m3u8$LR•IPV4•18『线路4』 -深圳卫视,http://192.151.150.154/live/szwshd.m3u8$LR•IPV4•18『线路5』 -深圳卫视,http://124.228.160.210:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•18『线路6』 -深圳卫视,http://36.136.38.87:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•18『线路7』 -深圳卫视,http://112.27.235.94:8000/hls/33/index.m3u8$LR•IPV4•18『线路8』 -深圳卫视,https://sztv-hls.sztv.com.cn/1SIQj6s/500/q7rdSsQ.m3u8?sign=71764b3a0bcc96b03dea9693d605e020&t=6a579f21$LR•IPV4•18『线路9』 -深圳卫视,http://38.75.136.137:98/gslb/dsdqpub/szwshd.m3u8?auth=testpub$LR•IPV4•18『线路10』 -深圳卫视,http://23.237.228.134/live6/shenzhen.m3u8$LR•IPV4•18『线路11』 -深圳卫视,http://gfr.x3322.net:9901/tsfile/live/1095_1.m3u8$LR•IPV4•18『线路12』 -深圳卫视,http://api.kkitv.itv888.cn:8080/hls/iftsd32ykm/index.m3u8$LR•IPV4•18『线路13』 -深圳卫视,https://iptv.catvod.com/catvod.php?id=szws$LR•IPV4•18『线路14』 -深圳卫视,https://httop.top/ysp-深圳卫视$LR•IPV4•18『线路15』 -深圳卫视,http://iptv.huuc.edu.cn/hls/szhd.m3u8$LR•IPV4•18『线路16』 -深圳卫视,http://153.0.171.163:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•18『线路17』 -深圳卫视,http://38.64.72.148:80/hls/modn/list/4007/playlist.m3u8$LR•IPV4•18『线路18』 +深圳卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226959/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EGrVNEZREjuNVKiTJo2mtwg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•17『线路1』 +深圳卫视,http://120.198.95.220:9901/tsfile/live/1048_1.m3u8?key=txiptv&playlive=1&down=1$LR•IPV4•17『线路2』 +深圳卫视,http://120.198.95.220:9901/tsfile/live/1048_1.m3u8?key=txiptv$LR•IPV4•17『线路3』 +深圳卫视,http://173.208.212.130:8181/720p/szws.m3u8$LR•IPV4•17『线路4』 +深圳卫视,http://192.151.150.154/live/szwshd.m3u8$LR•IPV4•17『线路5』 +深圳卫视,http://124.228.160.210:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•17『线路6』 +深圳卫视,http://36.136.38.87:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•17『线路7』 +深圳卫视,http://112.27.235.94:8000/hls/33/index.m3u8$LR•IPV4•17『线路8』 +深圳卫视,http://38.75.136.137:98/gslb/dsdqpub/szwshd.m3u8?auth=testpub$LR•IPV4•17『线路9』 +深圳卫视,http://23.237.228.134/live6/shenzhen.m3u8$LR•IPV4•17『线路10』 +深圳卫视,http://gfr.x3322.net:9901/tsfile/live/1095_1.m3u8$LR•IPV4•17『线路11』 +深圳卫视,http://api.kkitv.itv888.cn:8080/hls/iftsd32ykm/index.m3u8$LR•IPV4•17『线路12』 +深圳卫视,https://iptv.catvod.com/catvod.php?id=szws$LR•IPV4•17『线路13』 +深圳卫视,https://httop.top/ysp-深圳卫视$LR•IPV4•17『线路14』 +深圳卫视,http://iptv.huuc.edu.cn/hls/szhd.m3u8$LR•IPV4•17『线路15』 +深圳卫视,http://153.0.171.163:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•17『线路16』 +深圳卫视,http://38.64.72.148:80/hls/modn/list/4007/playlist.m3u8$LR•IPV4•17『线路17』 汕头经济,https://stream1.freetv.fun/shan-tou-jing-ji-2.ctv$LR•IPV4•11『线路1』 汕头经济,https://stream1.freetv.fun/shan-tou-jing-ji-3.ctv$LR•IPV4•11『线路2』 汕头经济,https://stream1.freetv.fun/shan-tou-jing-ji-5.ctv$LR•IPV4•11『线路3』