diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..924330b --- /dev/null +++ b/.gitignore @@ -0,0 +1,80 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# Dependency directories +node_modules/ +package-lock.json + +# Build output +dist/ +dist-ssr/ +*.local +bundle-analysis.html + +# Environment variables +.env +.env.local +.env.development +.env.development.local +.env.test.local +.env.production.local + +# Vite specific +.vite/ +vite.config.js.timestamp-* +vite.config.ts.timestamp-* + +# IDEs and editors +.idea/ +.vscode/* +!.vscode/extensions.json +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +# OS generated files +.DS_Store +Thumbs.db + +# Testing +coverage/ +*.lcov + +# Yarn +.yarn/* +!.yarn/patches +!.yarn/releases +!.yarn/plugins +!.yarn/sdks +!.yarn/versions +.pnp.* + + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? +vite.config.dev.ts + +# test +.git/objects/* +data/archive +.DS_Store +runtime/* +archive/ +*.ipynb +*.pack +*.pyc diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..027ccad --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "box"] + path = box + url = https://github.com/xMydev/TVBoxRuleMaster \ No newline at end of file diff --git a/19988d71ec893884cbe.tmp b/19988d71ec893884cbe.tmp new file mode 100644 index 0000000..656b59f --- /dev/null +++ b/19988d71ec893884cbe.tmp @@ -0,0 +1,1932 @@ +{ + "sites": [ + { + "key": "豆瓣", + "name": "豆瓣", + "type": 3, + "api": "csp_Douban", + "searchable": 0, + "changeable": 1, + "indexs": 1, + "ext": "./lib/tokenm.json$$$./lib/douban.json" + }, + { + "key": "嗷呜弹幕", + "name": "弹幕", + "type": 3, + "jar": "./jar/spider-woof.jar", + "api": "csp_GoConfig", + "indexs": 1, + "searchable": 0, + "filterable": 0, + "quickSearch": 0, + "changeable": 0, + "ext": "./lib" + }, + { + "key": "AList", + "name": "Alist", + "type": 3, + "api": "csp_AList", + "searchable": 1, + "filterable": 1, + "changeable": 1, + "timeout": 60, + "vodPic": "./img/file.jpg", + "ext": "./js/alist.json" + }, + { + "key": "BiliBili", + "name": "Bili_MTV", + "type": 3, + "api": "csp_Bili", + "style": { + "type": "rect", + "ratio": 1.597 + }, + "searchable": 1, + "quickSearch": 0, + "changeable": 0, + "timeout": 60, + "ext": { + "json": "./js/mtv.json", + "cookie": "" + } + }, + { + "key": "采集集合", + "name": "采集集合", + "type": 1, + "api": "http://127.0.0.1:1988/lb?lb=3", + "jar": "./jar/yt-aa.jar", + "searchable": 1, + "style": { + "type": "rect", + "ratio": 1.33 + }, + "changeable": 1 + }, + { + "key": "tt", + "name": "老三|4K", + "type": 3, + "api": "https://gitee.com/yuyu10588/tt/raw/t/t/drpy2.min.js", + "ext": "https://gh.clun.top/raw.githubusercontent.com/ljlfct01/ljlfct01.github.io/main/%E8%85%BE%E4%BA%914k.js" + }, + { + "key": "1", + "name": "== 1 ==" + }, + { + "key": "小苹果", + "name": "苹果弹幕", + "type": 3, + "api": "csp_Xpg", + "jar": "./jar/fenghuang.jar", + "ext": { + "danmu": true + } + }, + { + "key": "可可影视", + "name": "可可影视", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/可可.json" + }, + { + "key": "旺旺", + "name": "旺旺短剧", + "type": 1, + "api": "https://api.wwzy.tv/api.php/provide/vod/", + "playerType": 1, + "searchable": 1, + "changeable": 1 + }, + { + "key": "久久影视", + "name": "久久影视", + "type": 3, + "api": "csp_AppYsV2", + "jar": "./jar/qf.jar", + "playerType": 2, + "ext": "http://99cms.jj99.icu:8199/api.php/app/" + }, + { + "key": "艾旦影视", + "name": "艾旦影视", + "type": 1, + "ext": { + "proxy": "proxy" + }, + "api": "https://www.lovedan.net/api.php/provide/vod/", + "quickSearch": 1, + "searchable": 1, + "changeable": 1, + "categories": [ + "国产动漫", + "日韩动漫", + "国产剧" + ] + }, + { + "key": "四个圈影视", + "name": "四圈影视", + "type": 1, + "api": "https://pg.fenwe078.cf/api.php/provide/vod/", + "quickSearch": 1, + "searchable": 1, + "changeable": 1, + "categories": [ + "国产动漫", + "日韩动漫", + "国产剧" + ] + }, + { + "key": "骚火影视", + "name": "骚火影视", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/骚火.json" + }, + { + "key": "小红", + "name": "小红影视", + "type": 3, + "api": "csp_XBPQ", + "filterable": 1, + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/小红.json" + }, + { + "key": "小镇", + "name": "小镇影视", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/小镇.json" + }, + { + "key": "百思", + "name": "百思影视", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/百思.json" + }, + { + "key": "影院", + "name": "影院大全", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/影院.json" + }, + { + "key": "随客", + "name": "随客影视", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/随客.json" + }, + { + "key": "西瓜", + "name": "西瓜影视", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/西瓜.json" + }, + { + "key": "七点影视", + "name": "七点影视", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/7点.json" + }, + { + "key": "三九影视", + "name": "三九影视", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./XBPQ/三九影视.json" + }, + { + "key": "巴士动漫", + "name": "巴士动漫", + "type": 3, + "api": "csp_XYQHiker", + "jar": "./jar/XBPQ.jar", + "ext": "./XYQHiker/巴士动漫.json" + }, + { + "key": "穷电影", + "name": "穷电影", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/穷电影.json" + }, + { + "key": "狐狸君", + "name": "狐狸君", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/狐狸君.json" + }, + { + "key": "大白鲨", + "name": "大白鲨", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/大白鲨.json" + }, + { + "key": "2", + "name": "== 2 ==" + }, + { + "key": "白嫖2", + "name": "️白嫖影视", + "type": 3, + "api": "csp_XBPQ", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/白嫖1.json" + }, + { + "key": "白嫖3", + "name": "白嫖影视", + "type": 3, + "ua": "okhttp/3.15", + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/白嫖2.json" + }, + { + "key": "白嫖4", + "name": "白嫖影视", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/白嫖3.json" + }, + { + "key": "3", + "name": "== 3 ==" + }, + { + "key": "py_jianpian", + "name": "荐片(T3)", + "type": 3, + "api": "./js/py/plugin/html/新荐片.py", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "changeable": 0 + }, + { + "key": "py_光速", + "name": "光速(T3)", + "type": 3, + "api": "./js/py/plugin/app/光速APP.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 5, + "ext": "" + }, + { + "key": "py_胖虎", + "name": "胖虎(T3)", + "type": 3, + "api": "./js/py/plugin/app/胖虎APP.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 5, + "ext": "" + }, + { + "key": "py_视觉", + "name": "视觉(T3)", + "type": 3, + "api": "./js/py/plugin/app/视觉APP.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 5, + "ext": "" + }, + { + "key": "py_哇哇", + "name": "哇哇(T3)", + "type": 3, + "api": "./js/py/plugin/app/哇哇APP.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 5, + "ext": "" + }, + { + "key": "py_金牌", + "name": "金牌(T3)", + "type": 3, + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "api": "./js/py/plugin/html/金牌.py", + "order_num": 5, + "ext": "" + }, + { + "key": "py_皮皮虾", + "name": "皮皮虾(T3)", + "type": 3, + "api": "./js/py/plugin/app/皮皮虾APP.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 5, + "ext": "" + }, + { + "key": "py_APPV2", + "name": "APPV2(T3)", + "type": 3, + "api": "./js/py/plugin/app/APPV2.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 5, + "ext": "" + }, + { + "key": "py_hitv", + "name": "hitv(T3)", + "type": 3, + "api": "./js/py/plugin/app/hitvAPP.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 5, + "ext": "" + }, + { + "key": "py_kzb", + "name": "kzd(T3)", + "type": 3, + "api": "./js/py/aowuplugin/kzb.py", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "changeable": 0 + }, + { + "key": "py_三号动漫", + "name": "三号动漫(T3)", + "type": 3, + "api": "./js/py/plugin/app/三号动漫APP.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 5, + "ext": "" + }, + { + "key": "py_火车太顺", + "name": "火车太顺(T3)", + "type": 3, + "api": "./js/py/plugin/app/火车太顺APP.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 5, + "ext": "" + }, + { + "key": "py_剧多短剧", + "name": "剧多短剧(T3)", + "type": 3, + "api": "./js/py/plugin/app/剧多短剧APP.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 5, + "ext": "" + }, + { + "key": "py_红果网页.py", + "name": "红果网页(T3)", + "type": 3, + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "api": "./js/py/plugin/html/红果网页.py", + "order_num": 5, + "ext": "" + }, + { + "key": "py_绝对影视", + "name": "绝对影视(T3)", + "type": 3, + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "api": "./js/py/plugin/html/绝对影视.py", + "order_num": 5, + "ext": "" + }, + { + "key": "py_嗷呜动漫", + "name": "嗷呜动漫(T3)", + "type": 3, + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "api": "./js/py/plugin/html/嗷呜动漫.py", + "order_num": 5, + "ext": "" + }, + { + "key": "py_甜圈短剧", + "name": "甜圈短剧(T3)", + "type": 3, + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "api": "./js/py/plugin/html/甜圈短剧.py", + "order_num": 5, + "ext": "" + }, + { + "key": "py_jieyingshi", + "name": "界影视(T3)", + "type": 3, + "api": "./py/py_jieyingshi.py", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "changeable": 0 + }, + { + "key": "py_aigua", + "name": "爱瓜TV(T3)", + "type": 3, + "api": "./js/py/plugin/app/爱瓜TVAPP.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 5, + "ext": "" + }, + { + "key": "js_youyou", + "name": "悠悠视频(T3)", + "type": 3, + "api": "./js/py/plugin/app/悠悠APP.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 5, + "ext": "" + }, + { + "key": "py_国外", + "name": "国外剧情(T3)", + "type": 3, + "api": "./py/py_guowaiju.py", + "quickSearch": 1, + "searchable": 1, + "filterable": 1 + }, + { + "key": "py_偷乐", + "name": "偷乐短剧(T3)", + "type": 3, + "api": "./py/偷乐短剧.py", + "searchable": 1, + "changeable": 1, + "quickSearch": 1, + "filterable": 1, + "playerType": 2 + }, + { + "key": "py_猎手", + "name": "电影猎手(T3)", + "type": 3, + "api": "./js/py/plugin/app/电影猎手.py", + "quickSearch": 1, + "searchable": 1, + "filterable": 0 + }, + { + "key": "py_美帕", + "name": "美帕影视(T3)", + "type": 3, + "api": "./js/py/plugin/app/美帕APP.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "playerType": 2, + "order_num": 5, + "ext": "" + }, + { + "key": "py_嗨皮", + "name": "嗨皮影视(T3)", + "type": 3, + "api": "./py/嗨皮影视.py", + "quickSearch": 1, + "filterable": 1, + "playerType": 2 + }, + { + "key": "py_云端", + "name": "云端影视(T3)", + "type": 3, + "api": "./py/云端影视.py", + "quickSearch": 1, + "filterable": 1, + "playerType": 2 + }, + { + "key": "py_魔方", + "name": "魔方影视(T3)", + "type": 3, + "api": "./js/py/plugin/app/魔方影视APP.py", + "quickSearch": 1, + "filterable": 1, + "playerType": 2 + }, + { + "key": "py_边缘", + "name": "边缘影视(T3)", + "type": 3, + "api": "./js/py/plugin/app/边缘影视APP.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "playerType": 2, + "order_num": 5, + "ext": "" + }, + { + "key": "py_恋鱼", + "name": "恋鱼影视(T3)", + "type": 3, + "api": "./js/py/plugin/app/恋鱼影视APP.py", + "quickSearch": 1, + "filterable": 1, + "playerType": 2 + }, + { + "key": "py_若惜", + "name": "若惜影视(T3)", + "type": 3, + "api": "./js/py/plugin/app/若惜追剧APP.py", + "quickSearch": 1, + "filterable": 1, + "playerType": 2 + }, + { + "key": "py_云速", + "name": "云速影视(T3)", + "type": 3, + "api": "./py/云速影视.py", + "quickSearch": 1, + "filterable": 1, + "playerType": 2 + }, + { + "key": "py_旺旺", + "name": "旺旺影视(T3)", + "type": 3, + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "api": "./js/py/plugin/html/旺旺.py", + "playerType": 2, + "order_num": 5, + "ext": "" + }, + { + "key": "py_农牧", + "name": "农牧影视(T3)", + "type": 3, + "api": "./py/农民影视.py", + "quickSearch": 1, + "filterable": 1, + "playerType": 2 + }, + { + "key": "py_文才", + "name": "文才影视(T3)", + "type": 3, + "api": "./py/文才影视.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": { + "site": "https://www.hkybqufgh.com,https://www.sizhengxt.com,https://0996zp.com,https://9zhoukj.com/,https://www.sizhengxt.com,https://www.tjrongze.com,https://www.jiabaide.cn,https://cqzuoer.com" + } + }, + { + "key": "py_4KAV", + "name": "4KAV(T3)", + "type": 3, + "api": "./py/4KAV.py", + "quickSearch": 1, + "searchable": 1, + "filterable": 1 + }, + { + "key": "py_随机小姐姐", + "name": "随机小姐姐(T3)", + "type": 3, + "api": "./js/py/plugin/html/随机小姐姐.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 5, + "ext": "" + }, + { + "key": "3.1", + "name": "== 3.1 ==" + }, + { + "key": "py_DianYingTanTang", + "name": "🫐电影天堂(T4)", + "type": 4, + "api": "https://py.doube.eu.org/spider?site=DianYingTanTang", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "changeable": 0 + }, + { + "key": "py_OleVod", + "name": "欧乐影院(T4)", + "type": 4, + "api": "https://py.doube.eu.org/spider?site=OleVod", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "changeable": 0 + }, + { + "key": "py_Dm84", + "name": "动漫巴士(T4)", + "type": 4, + "api": "https://py.doube.eu.org/spider?site=Dm84", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "changeable": 0 + }, + { + "key": "4", + "name": "== 4 ==" + }, + { + "key": "人人影视", + "name": "人人影视", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/人人.json" + }, + { + "key": "农民影视", + "name": "农民影视", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/农民.json" + }, + { + "key": "熊猫影视", + "name": "熊猫影视", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/熊猫.json" + }, + { + "key": "秀儿影院", + "name": "秀儿影院", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/秀儿.json" + }, + { + "key": "毒舌影视", + "name": "毒舌影视", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/毒舌.json" + }, + { + "key": "星辰影院", + "name": "星辰影院", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/星辰.json" + }, + { + "key": "全网看", + "name": "全网看", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/全网看.json" + }, + { + "key": "free影视", + "name": "free影视", + "type": 3, + "click": "document.querySelector(\"#playleft iframe\").contentWindow.document.querySelector(\"#start\").click();", + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/free.json" + }, + { + "key": "喝茶影视", + "name": "喝茶影视", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/喝茶.json" + }, + { + "key": "策弛影视", + "name": "策弛影视", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/策弛.json" + }, + { + "key": "茶杯狐影视", + "name": "茶杯狐影视", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/茶杯狐.json" + }, + { + "key": "瓜籽影院", + "name": "瓜籽影院", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/瓜籽.json" + }, + { + "key": "来看点播", + "name": "来看点播", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/来看.json" + }, + { + "key": "布卡影视", + "name": "布卡影视", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/布卡.json" + }, + { + "key": "一帆影视", + "name": "一帆影视", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/一帆.json" + }, + { + "key": "欧乐影视", + "name": "欧乐影视", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/欧乐.json" + }, + { + "key": "奇迹", + "name": "奇迹影视", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/奇迹.json" + }, + { + "key": "素白白", + "name": "素白白", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/素白白.json" + }, + { + "key": "5", + "name": "== 5 ==" + }, + { + "key": "豆瓣资源", + "name": "豆瓣采集", + "type": 1, + "quickSearch": 1, + "api": "https://caiji.dbzy.tv/api.php/provide/vod/" + }, + { + "key": "索尼", + "name": "索尼采集 ", + "type": 1, + "api": "https://suoniapi.com/api.php/provide/vod/", + "playUrl": "https://www.snplayer.com/?url=", + "quickSearch": 1, + "searchable": 1, + "changeable": 1, + "categories": [ + "国产动漫", + "日韩动漫", + "国产剧" + ] + }, + { + "key": "量子", + "name": "量子采集", + "type": 1, + "api": "https://cj.lziapi.com/api.php/provide/vod/", + "playUrl": "https://lziplayer.com/?url=", + "quickSearch": 1, + "searchable": 1, + "changeable": 1, + "categories": [ + "国产动漫", + "日韩动漫", + "国产剧" + ] + }, + { + "key": "非凡", + "name": "非凡采集", + "type": 1, + "api": "https://cj.ffzyapi.com/api.php/provide/vod/?", + "quickSearch": 1, + "searchable": 1, + "changeable": 1, + "categories": [ + "国产动漫", + "日韩动漫", + "国产剧" + ] + }, + { + "key": "无尽", + "name": "无尽采集", + "type": 1, + "api": "https://api.wujinapi.net/api.php/provide/vod/", + "playUrl": "https://jx.wujinkk.com/dplayer/?url=", + "quickSearch": 1, + "searchable": 1, + "changeable": 1, + "categories": [ + "国产动漫", + "日韩动漫", + "国产剧", + "预告片" + ] + }, + { + "key": "金鹰", + "name": "金鹰采集", + "type": 1, + "api": "https://jyzyapi.com/api.php/provide/vod/", + "quickSearch": 1, + "searchable": 1, + "changeable": 1, + "categories": [ + "中国动漫", + "日本动漫", + "内地剧" + ] + }, + { + "key": "速播", + "name": "速播采集", + "type": 1, + "api": "https://subocaiji.com/api.php/provide/vod/", + "quickSearch": 1, + "searchable": 1, + "changeable": 1, + "categories": [ + "中国动漫", + "日本动漫", + "大陆剧" + ] + }, + { + "key": "樱花", + "name": "樱花采集", + "type": 1, + "api": "https://m3u8.apiyhzy.com/api.php/provide/vod/", + "playUrl": "https://jx.yhzybf.com/player/jx.php?url=", + "quickSearch": 1, + "searchable": 1, + "changeable": 1, + "categories": [ + "国产动漫", + "日本动漫", + "国产剧" + ] + }, + { + "key": "黑木耳", + "name": "黑木耳", + "type": 1, + "api": "https://json02.heimuer.xyz/api.php/provide/vod/", + "playUrl": "https://hoplayer.com/index.html?url=", + "quickSearch": 1, + "categories": [ + "国产动漫", + "日本动漫", + "国产剧" + ] + }, + { + "key": "电影天堂", + "name": "电影天堂", + "type": 1, + "api": "http://caiji.dyttzyapi.com/api.php/provide/vod/", + "searchable": 1, + "quickSearch": 1, + "changeable": 0, + "categories": [ + "国产动漫", + "日韩动漫", + "连续剧" + ] + }, + { + "key": "6", + "name": "== 6 ==" + }, + { + "key": "网盘配置", + "name": "网盘及彈幕配置", + "type": 3, + "api": "csp_Config", + "searchable": 0, + "changeable": 0, + "ext": "./lib/tokenm.json", + "style": { + "type": "rect", + "ratio": 1.5 + } + }, + { + "key": "Local", + "name": "本地文件夹", + "type": 3, + "api": "csp_Local" + }, + { + "key": "FirstAid", + "name": "🚑 急救知识 ", + "type": 3, + "api": "csp_FirstAid", + "searchable": 0, + "quickSearch": 0, + "changeable": 0, + "style": { + "type": "rect", + "ratio": 3.8 + } + }, + { + "key": "Guanying", + "name": "观影网盘", + "type": 3, + "api": "csp_Guanying", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$https://www.gying.net$$$noproxy$$$1$$$./lib/guanying.txt$$$GUANYING" + }, + { + "key": "FourKFM", + "name": "4K网盘", + "type": 3, + "api": "csp_FourKFM", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$http://4kfm.com/$$$noproxy$$$1$$$./lib/4kfm.txt$$$4KFM" + }, + { + "key": "校长影视", + "name": "校长影视", + "type": 3, + "api": "csp_XiaoZhang", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$https://xzyshd.com$$$proxy$$$1" + }, + { + "key": "Wogg", + "name": "玩偶哥哥", + "type": 3, + "api": "csp_Wogg", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$https://www.wogg.one/$$$noproxy$$$1$$$./lib/wogg.json$$$WOGG" + }, + { + "key": "yydsys", + "name": "玩你老哥", + "type": 3, + "api": "csp_Wobg", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$https://tv.yydsys.top/$$$proxy$$$1$$$./lib/wogg.json$$$WNLG" + }, + { + "key": "Mogg", + "name": "木偶哥哥", + "type": 3, + "api": "csp_Wobg", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$http://123.666291.xyz/$$$noproxy$$$1$$$./lib/wogg.json$$$MOGG" + }, + { + "key": "WOSS", + "name": "玩偶叔叔", + "type": 3, + "api": "csp_Wobg", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$https://woss.fenwe.eu.org/$$$noproxy$$$1$$$./lib/wogg.json$$$WOSS" + }, + { + "key": "DAWO", + "name": "大玩偶", + "type": 3, + "api": "csp_Wobg", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$http://149.88.87.18:6688/$$$noproxy$$$1$$$./lib/wogg.json$$$DAWO" + }, + { + "key": "蜡笔网盘", + "name": "蜡笔网盘", + "type": 3, + "api": "csp_Wobg", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$https://www.goimg.asia/$$$noproxy$$$1$$$./lib/wogg.json$$$LABI" + }, + { + "key": "BAIJIA", + "name": "百家网盘", + "type": 3, + "api": "csp_Wobg", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$http://cj.jiexi.news/$$$noproxy$$$1$$$./lib/wogg.json$$$BAIJIA" + }, + { + "key": "Xiaomi", + "name": "小米网盘", + "type": 3, + "api": "csp_Wobg", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$https://www.mucpan.cc/$$$noproxy$$$1$$$./lib/wogg.json$$$XIAOMI" + }, + { + "key": "Hmxz", + "name": "海绵网盘", + "type": 3, + "api": "csp_Hmxz", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$https://haimian.eu.org/$$$noproxy$$$1$$$./lib/hmxz.txt$$$HMXZ", + "style": { + "type": "list", + "ratio": 1.1 + } + }, + { + "key": "Leijing", + "name": "雷鲸网盘", + "type": 3, + "api": "csp_Panta", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$https://leijing.xyz/$$$noproxy$$$1$$$./lib/leijing.txt$$$LEIJING", + "style": { + "type": "list", + "ratio": 1.1 + } + }, + { + "key": "至臻网盘", + "name": "至臻网盘", + "type": 3, + "api": "csp_Wobg", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$https://mihdr.top/$$$noproxy$$$1$$$./lib/wogg.json$$$ZHIZHEN" + }, + { + "key": "QINGYING", + "name": "清影|网盘", + "type": 3, + "api": "csp_Wobg", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$https://revohd.com/$$$noproxy$$$1$$$./lib/wogg.json$$$QINGYING" + }, + { + "key": "Guazi", + "name": "瓜子|App", + "type": 3, + "api": "csp_Guazi", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "" + }, + { + "key": "ddys", + "name": "低端影视|网盘", + "type": 3, + "api": "csp_Ddys", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$https://ddys.pro/$$$proxy$$$1$$$" + }, + { + "key": "美剧迷", + "name": "美剧迷|网盘", + "type": 3, + "api": "csp_Meijumi", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 120, + "ext": "./lib/tokenm.json$$$https://www.meijumi.net/$$$proxy$$$1" + }, + { + "key": "LIBVIO", + "name": "LIBVIO|网盘", + "type": 3, + "api": "csp_Libvio", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$http://www.libvio.mov/$$$noproxy$$$1" + }, + { + "key": "Hdhive", + "name": "鸟窝|网盘", + "type": 3, + "api": "csp_Hdh", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 120, + "ext": "./lib/tokenm.json$$$https://hdhive.online$$$noproxy$$$1$$$./lib/hdhive.txt" + }, + { + "key": "TianYiSou", + "name": "天逸搜|网盘搜索", + "type": 3, + "api": "csp_TianYiSou", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$null$$$proxy" + }, + { + "key": "YunPan", + "name": "云盘资源|网盘", + "type": 3, + "api": "csp_YunPan", + "timeout": 60, + "ext": "./lib/tokenm.json$$$null$$$proxy$$$1" + }, + { + "key": "Panta", + "name": "盘Ta|网盘", + "type": 3, + "api": "csp_Panta", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$https://www.91panta.cn/$$$null$$$1$$$./lib/panta.txt$$$PANTA", + "style": { + "type": "list", + "ratio": 1.1 + } + }, + { + "key": "DaPanSo", + "name": "大盘搜|网盘搜索", + "type": 3, + "api": "csp_DaPanSo", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$https://dapanso.com$$$proxy$$$1" + }, + { + "key": "PikaSo", + "name": "皮卡搜|网盘搜索", + "type": 3, + "api": "csp_PikaSo", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$https://www.pikaso.top/$$$null", + "style": { + "type": "list", + "ratio": 1.1 + } + }, + { + "key": "Qianfan", + "name": "千帆|网盘搜索", + "type": 3, + "api": "csp_Qianfan", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$https://pan.qianfan.app$$$null$$$./lib/qianfan.txt$$$1" + }, + { + "key": "新6V", + "name": "新6V|网盘", + "type": 3, + "api": "csp_Xb6v", + "searchable": 1, + "changeable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$https://www.66ss.org$$$null$$$1" + }, + { + "key": "BLSGod", + "name": "BLSGod|磁", + "type": 3, + "api": "csp_BLSGod", + "changeable": 1, + "timeout": 60 + }, + { + "key": "SeedHub", + "name": "SeedHub|磁", + "type": 3, + "api": "csp_SeedHub", + "changeable": 1, + "timeout": 60 + }, + { + "key": "YingSo", + "name": "影搜|网盘搜索", + "type": 3, + "api": "csp_YingSo", + "timeout": 60, + "ext": "./lib/tokenm.json" + }, + { + "key": "異界", + "name": "異界", + "type": 3, + "api": "csp_Ysj", + "searchable": 1, + "changeable": 0 + }, + { + "key": "酷狗", + "name": "酷狗", + "type": 3, + "api": "csp_Kugou", + "searchable": 1, + "changeable": 0 + }, + { + "key": "hipy_js_KTV歌厅[听]1", + "name": "KTV歌厅", + "type": 3, + "api": "./lib/drpy2.min.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 0, + "ext": "./js/drpy2.js" + }, + { + "key": "Yinyuetai", + "name": "音悦台", + "type": 3, + "api": "csp_Yinyuetai", + "searchable": 1, + "changeable": 0 + }, + { + "key": "push_agent", + "name": "推送", + "type": 3, + "api": "csp_Push", + "changeable": 0, + "timeout": 30, + "ext": "./lib/tokenm.json" + }, + { + "key": "應用商店", + "name": "應用商店", + "type": 3, + "api": "csp_Market", + "searchable": 0, + "changeable": 0, + "ext": "https://fm.t4tv.hz.cz/json/market.json" + }, + { + "key": "直播转点播", + "name": "电视┃直播", + "type": 3, + "searchable": 0, + "api": "./lib/live2vod.js", + "ext": "./lib/feimaolive.json" + }, + { + "key": "7", + "name": "== 7 ==" + }, + { + "key": "MXDM", + "name": "MXDM|动漫", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/mx.json" + }, + { + "key": "MiFun", + "name": "MiFun|动漫", + "type": 3, + "api": "./py/MiFunP.py", + "quickSearch": 1, + "filterable": 1, + "playerType": 2 + }, + { + "key": "CliCli", + "name": "CliCli|动漫", + "type": 3, + "api": "./py/CliCli动漫.py", + "quickSearch": 1, + "filterable": 1, + "playerType": 2 + }, + { + "key": "哆啦", + "name": "哆啦|新番社", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "quickSearch": 1, + "filterable": 1, + "style": { + "type": "list" + }, + "ext": "./XBPQ/哆啦新番社.json" + }, + { + "key": "8", + "name": "== 8 ==" + }, + { + "key": "Hdhive", + "name": "影巢网盘", + "type": 3, + "api": "csp_Hdhive", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./json/tokenm.json$$$proxy$$$1", + "order_num": 9999 + } + ], + "lives": [ + { + "name": "cluntop", + "type": 0, + "url": "./lib/iptv.m3u", + "ua": "okhttp/4.1.0" + }, + { + "name": "Mursor", + "type": "0", + "url": "https://gh.clun.top/raw.githubusercontent.com/Mursor/LIVE/main/iptv.m3u", + "playerType": 2, + "timeout": 10, + "ua": "okHttp/Mod-1.4.0.0" + }, + { + "name": "tv_jp", + "type": "0", + "url": "https://gh.clun.top/raw.githubusercontent.com/luongz/iptv-jp/main/jp.m3u" + }, + { + "name": "tv_jp_clean", + "type": "0", + "url": "https://gh.clun.top/raw.githubusercontent.com/luongz/iptv-jp/main/jp_clean.m3u" + }, + { + "name": "平台直播", + "type": 0, + "url": "https://tv.iill.top/m3u/Live", + "ua": "okhttp/3.15", + "playerType": 2 + }, + { + "name": "冰茶 TV", + "type": 0, + "url": "https://fy.188766.xyz/?ip=&mishitong=true&mima=mianfeidehaimaiqian&json=true", + "ua": "bingcha/1.1" + }, + { + "name": "肥羊虎牙一起看", + "type": 0, + "url": "https://gh.clun.top/raw.githubusercontent.com/mursor1985/LIVE/main/huyayqk.m3u", + "playerType": 2, + "timeout": 10, + "ua": "okHttp/Mod-1.4.0.0" + }, + { + "name": "肥羊B站直播", + "type": 0, + "url": "https://gh.clun.top/raw.githubusercontent.com/mursor1985/LIVE/main/bililive.m3u", + "playerType": 2, + "timeout": 10, + "ua": "okHttp/Mod-1.4.0.0" + }, + { + "name": "肥羊斗鱼一起看", + "type": 0, + "url": "https://gh.clun.top/raw.githubusercontent.com/mursor1985/LIVE/main/douyuyqk.m3u", + "playerType": 2, + "timeout": 10, + "ua": "okHttp/Mod-1.4.0.0" + }, + { + "name": "肥羊YY轮播", + "type": 0, + "url": "https://gh.clun.top/raw.githubusercontent.com/mursor1985/LIVE/main/yylunbo.m3u", + "playerType": 2, + "timeout": 10, + "ua": "okHttp/Mod-1.4.0.0" + }, + { + "name": "YTLive", + "type": 0, + "url": "./lib/yo21.txt" + }, + { + "name": "wqwqwq", + "type": 0, + "url": "https://la1.wqwqwq.sbs/tv.m3u" + }, + { + "name": "YanG", + "type": 0, + "url": "https://tv.iill.top/m3u/Gather", + "ua": "(Windows NT 10.0; Win64; x64) PotPlayer/25.03.21", + "epg": "http://epg.51zmt.top:8000/api/diyp/?ch={name}&date={date}", + "logo": "https://live.fanmingming.com/tv/{name}.png" + }, + { + "name": "nctv", + "type": 0, + "url": "http://live.nctv.top/x.txt", + "ua": "okhttp/4.1.0" + }, + { + "name": "ofiii", + "type": 0, + "url": "./lib/ofiii.m3u" + }, + { + "name": "Guovin", + "type": 0, + "url": "https://gh.clun.top/raw.githubusercontent.com/Guovin/iptv-api/gd/output/result.m3u" + }, + { + "name": "mlzlzj", + "type": 0, + "url": "https://gh.clun.top/raw.githubusercontent.com/mlzlzj/TV/main/output/result.m3u" + }, + { + "name": "gambiarras", + "type": 0, + "url": "https://github.com/gambiarras/legal-iptv/blob/main/playlist.m3u" + }, + { + "name": "epg.pw All", + "type": 0, + "url": "https://m3u.002397.xyz/all.m3u" + }, + { + "name": "iptv.org All", + "type": 0, + "url": "https://m3u.002397.xyz/o_all.m3u" + }, + { + "group": "redirect", + "channels": [ + { + "name": "redirect", + "urls": [ + "proxy://do=live&type=live&proxy=&url=" + ] + } + ] + } + ], + "doh": [ + { + "name": "OpenDNS", + "url": "https://dns.www.opendns.com/dns-query", + "ips": [ + "208.67.222.222", + "208.67.220.220" + ] + }, + { + "name": "114dns", + "url": "https://dns.114dns.com/dns-query", + "ips": [ + "114.114.114.114", + "114.114.115.115" + ] + }, + { + "name": "腾讯", + "url": "https://doh.pub/dns-query", + "ips": [ + "119.29.29.29" + ] + }, + { + "name": "阿里", + "url": "https://dns.alidns.com/dns-query", + "ips": [ + "223.6.6.6", + "223.5.5.5" + ] + }, + { + "name": "360", + "url": "https://doh.360.cn/dns-query" + }, + { + "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" + ] + } + ], + "proxy": [ + "raw.github*.com", + "github.com", + "youtube.com", + ".*boku.*", + ".*nivod.*", + ".*ulivetv.*", + "missav.ws", + "javmulu.net", + "www.netflav.com" + ], + "hosts": [ + "cache.ott.ystenlive.itv.cmvideo.cn=base-v4-free-mghy.e.cdn.chinamobile.com", + "cache.ott.bestlive.itv.cmvideo.cn=base-v4-free-mghy.e.cdn.chinamobile.com", + "cache.ott.wasulive.itv.cmvideo.cn=base-v4-free-mghy.e.cdn.chinamobile.com", + "cache.ott.fifalive.itv.cmvideo.cn=base-v4-free-mghy.e.cdn.chinamobile.com", + "cache.ott.hnbblive.itv.cmvideo.cn=base-v4-free-mghy.e.cdn.chinamobile.com", + "hlsztemgsplive.miguvideo.com=hlsztemgsplive.miguvideo.com.b.cdn.chinamobile.com", + "push-rtmp-hs-spe-f5.douyincdn.com=source-fcdn-spe-push.s.bytefcdn.com", + "cdn9.163189.xyz=gcore.jsdelivr.net", + "cache.ott.fifalive.itv.cmvideo.cn=cache.ott.fifalive.itv.cmvideo.cn.e.cdn.chinamobile.com", + "studentlive.migucloud.com=base-v4v6-miguvideo.e.cdn.chinamobile.com" + ], + "rules": [ + { + "host": "*", + "rule": [ + "http((?!http).){12,}?\\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg|m4a)\\?.*" + ] + }, + { + "host": "*", + "rule": [ + "http((?!http).){12,}\\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg|m4a)" + ] + }, + { + "name": "ofiii", + "hosts": [ + "www.ofiii.com" + ], + "script": [ + "const play=document.getElementsByClassName('play_icon')[0],event=new MouseEvent('click',{bubbles:!0,cancelable:!0,view:window,screenX:100,screenY:100,clientX:50,clientY:50,button:0,shiftKey:!1,ctrlKey:!1,altKey:!1,metaKey:!1,modifierState:0});play.dispatchEvent(event);" + ] + }, + { + "host": "www.djuu.com", + "rule": [ + "mp4.djuu.com", + "m4a" + ] + }, + { + "host": "www.sharenice.net", + "rule": [ + "huoshan.com", + "/item/video/" + ], + "filter": [] + }, + { + "host": "www.sharenice.net", + "rule": [ + "sovv.qianpailive.com", + "vid=" + ], + "filter": [] + }, + { + "host": "www.sharenice.net", + "rule": [ + "douyin.com", + "/play/" + ] + }, + { + "host": "m.ysxs8.vip", + "rule": [ + "ysting.ysxs8.vip:81", + "xmcdn.com" + ], + "filter": [] + }, + { + "host": "hdmoli.com", + "rule": [ + ".m3u8" + ] + }, + { + "host": "https://api.live.bilibili.com", + "rule": [ + "bilivideo.com", + "/index.m3u8" + ], + "filter": [ + "data.bilibili.com/log/web", + "i0.hdslb.com/bfs/live/" + ] + }, + { + "host": "www.agemys.cc", + "rule": [ + "cdn-tos", + "obj/tos-cn" + ] + }, + { + "host": "www.fun4k.com", + "rule": [ + "https://hd.ijycnd.com/play", + "index.m3u8" + ] + }, + { + "host": "zjmiao.com", + "rule": [ + "play.videomiao.vip/API.php", + "time=", + "key=", + "path=" + ] + }, + { + "name": "火山嗅探", + "hosts": [ + "huoshan.com" + ], + "regex": [ + "item_id=" + ] + }, + { + "name": "抖音嗅探", + "hosts": [ + "douyin.com" + ], + "regex": [ + "is_play_url=" + ] + }, + { + "name": "農民嗅探", + "hosts": [ + "toutiaovod.com" + ], + "regex": [ + "video/tos/cn" + ] + }, + { + "name": "夜市", + "hosts": [ + "yeslivetv.com" + ], + "script": [ + "document.getElementsByClassName('vjs-big-play-button')[0].click()" + ] + }, + { + "name": "毛驢", + "hosts": [ + "www.maolvys.com" + ], + "script": [ + "document.getElementsByClassName('swal-button swal-button--confirm')[0].click()" + ] + }, + { + "name": "磁力", + "hosts": [ + "magnet" + ], + "regex": [ + "更多", + "社 區", + "x u u", + "最 新", + "直 播", + "更 新", + "社 区", + "有 趣", + "英皇体育", + "全中文AV在线", + "澳门皇冠赌场", + "哥哥快来", + "美女荷官", + "裸聊", + "新片首发", + "UUE29" + ] + } + ], + "headers": [ + { + "host": "hlsztemgsplive.miguvideo.com", + "header": { + "User-Agent": "bingcha/1.1" + } + } + ], + "ads": [ + "static-mozai.4gtv.tv" + ], + "parses": [ + { + "name": "M3U8", + "url": "https://jx.m3u8.tv/jiexi/?url=", + "type": 0 + }, + { + "name": "PM", + "url": "https://www.playm3u8.cn/jiexi.php?url=", + "type": 0 + }, + { + "name": "七哥", + "url": "https://jx.nnxv.cn/tv.php?url=", + "type": 0 + } + ], + "flags": [ + "youku", + "qq", + "iqiyi", + "qiyi", + "letv", + "sohu", + "tudou", + "pptv", + "mgtv", + "wasu" + ], + "disabled_wallpaper": "", + "wallpaper": "./img/0.jpg", + "logo": "./img/pg.gif", + "spider": "./pg.jar", + "warningText": "1" +} \ No newline at end of file diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..848110a --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +clun.cc \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..ad5b9ba --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 ClunTop + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/box.json b/box.json new file mode 100644 index 0000000..656b59f --- /dev/null +++ b/box.json @@ -0,0 +1,1932 @@ +{ + "sites": [ + { + "key": "豆瓣", + "name": "豆瓣", + "type": 3, + "api": "csp_Douban", + "searchable": 0, + "changeable": 1, + "indexs": 1, + "ext": "./lib/tokenm.json$$$./lib/douban.json" + }, + { + "key": "嗷呜弹幕", + "name": "弹幕", + "type": 3, + "jar": "./jar/spider-woof.jar", + "api": "csp_GoConfig", + "indexs": 1, + "searchable": 0, + "filterable": 0, + "quickSearch": 0, + "changeable": 0, + "ext": "./lib" + }, + { + "key": "AList", + "name": "Alist", + "type": 3, + "api": "csp_AList", + "searchable": 1, + "filterable": 1, + "changeable": 1, + "timeout": 60, + "vodPic": "./img/file.jpg", + "ext": "./js/alist.json" + }, + { + "key": "BiliBili", + "name": "Bili_MTV", + "type": 3, + "api": "csp_Bili", + "style": { + "type": "rect", + "ratio": 1.597 + }, + "searchable": 1, + "quickSearch": 0, + "changeable": 0, + "timeout": 60, + "ext": { + "json": "./js/mtv.json", + "cookie": "" + } + }, + { + "key": "采集集合", + "name": "采集集合", + "type": 1, + "api": "http://127.0.0.1:1988/lb?lb=3", + "jar": "./jar/yt-aa.jar", + "searchable": 1, + "style": { + "type": "rect", + "ratio": 1.33 + }, + "changeable": 1 + }, + { + "key": "tt", + "name": "老三|4K", + "type": 3, + "api": "https://gitee.com/yuyu10588/tt/raw/t/t/drpy2.min.js", + "ext": "https://gh.clun.top/raw.githubusercontent.com/ljlfct01/ljlfct01.github.io/main/%E8%85%BE%E4%BA%914k.js" + }, + { + "key": "1", + "name": "== 1 ==" + }, + { + "key": "小苹果", + "name": "苹果弹幕", + "type": 3, + "api": "csp_Xpg", + "jar": "./jar/fenghuang.jar", + "ext": { + "danmu": true + } + }, + { + "key": "可可影视", + "name": "可可影视", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/可可.json" + }, + { + "key": "旺旺", + "name": "旺旺短剧", + "type": 1, + "api": "https://api.wwzy.tv/api.php/provide/vod/", + "playerType": 1, + "searchable": 1, + "changeable": 1 + }, + { + "key": "久久影视", + "name": "久久影视", + "type": 3, + "api": "csp_AppYsV2", + "jar": "./jar/qf.jar", + "playerType": 2, + "ext": "http://99cms.jj99.icu:8199/api.php/app/" + }, + { + "key": "艾旦影视", + "name": "艾旦影视", + "type": 1, + "ext": { + "proxy": "proxy" + }, + "api": "https://www.lovedan.net/api.php/provide/vod/", + "quickSearch": 1, + "searchable": 1, + "changeable": 1, + "categories": [ + "国产动漫", + "日韩动漫", + "国产剧" + ] + }, + { + "key": "四个圈影视", + "name": "四圈影视", + "type": 1, + "api": "https://pg.fenwe078.cf/api.php/provide/vod/", + "quickSearch": 1, + "searchable": 1, + "changeable": 1, + "categories": [ + "国产动漫", + "日韩动漫", + "国产剧" + ] + }, + { + "key": "骚火影视", + "name": "骚火影视", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/骚火.json" + }, + { + "key": "小红", + "name": "小红影视", + "type": 3, + "api": "csp_XBPQ", + "filterable": 1, + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/小红.json" + }, + { + "key": "小镇", + "name": "小镇影视", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/小镇.json" + }, + { + "key": "百思", + "name": "百思影视", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/百思.json" + }, + { + "key": "影院", + "name": "影院大全", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/影院.json" + }, + { + "key": "随客", + "name": "随客影视", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/随客.json" + }, + { + "key": "西瓜", + "name": "西瓜影视", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/西瓜.json" + }, + { + "key": "七点影视", + "name": "七点影视", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/7点.json" + }, + { + "key": "三九影视", + "name": "三九影视", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./XBPQ/三九影视.json" + }, + { + "key": "巴士动漫", + "name": "巴士动漫", + "type": 3, + "api": "csp_XYQHiker", + "jar": "./jar/XBPQ.jar", + "ext": "./XYQHiker/巴士动漫.json" + }, + { + "key": "穷电影", + "name": "穷电影", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/穷电影.json" + }, + { + "key": "狐狸君", + "name": "狐狸君", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/狐狸君.json" + }, + { + "key": "大白鲨", + "name": "大白鲨", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/大白鲨.json" + }, + { + "key": "2", + "name": "== 2 ==" + }, + { + "key": "白嫖2", + "name": "️白嫖影视", + "type": 3, + "api": "csp_XBPQ", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/白嫖1.json" + }, + { + "key": "白嫖3", + "name": "白嫖影视", + "type": 3, + "ua": "okhttp/3.15", + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/白嫖2.json" + }, + { + "key": "白嫖4", + "name": "白嫖影视", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/白嫖3.json" + }, + { + "key": "3", + "name": "== 3 ==" + }, + { + "key": "py_jianpian", + "name": "荐片(T3)", + "type": 3, + "api": "./js/py/plugin/html/新荐片.py", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "changeable": 0 + }, + { + "key": "py_光速", + "name": "光速(T3)", + "type": 3, + "api": "./js/py/plugin/app/光速APP.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 5, + "ext": "" + }, + { + "key": "py_胖虎", + "name": "胖虎(T3)", + "type": 3, + "api": "./js/py/plugin/app/胖虎APP.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 5, + "ext": "" + }, + { + "key": "py_视觉", + "name": "视觉(T3)", + "type": 3, + "api": "./js/py/plugin/app/视觉APP.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 5, + "ext": "" + }, + { + "key": "py_哇哇", + "name": "哇哇(T3)", + "type": 3, + "api": "./js/py/plugin/app/哇哇APP.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 5, + "ext": "" + }, + { + "key": "py_金牌", + "name": "金牌(T3)", + "type": 3, + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "api": "./js/py/plugin/html/金牌.py", + "order_num": 5, + "ext": "" + }, + { + "key": "py_皮皮虾", + "name": "皮皮虾(T3)", + "type": 3, + "api": "./js/py/plugin/app/皮皮虾APP.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 5, + "ext": "" + }, + { + "key": "py_APPV2", + "name": "APPV2(T3)", + "type": 3, + "api": "./js/py/plugin/app/APPV2.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 5, + "ext": "" + }, + { + "key": "py_hitv", + "name": "hitv(T3)", + "type": 3, + "api": "./js/py/plugin/app/hitvAPP.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 5, + "ext": "" + }, + { + "key": "py_kzb", + "name": "kzd(T3)", + "type": 3, + "api": "./js/py/aowuplugin/kzb.py", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "changeable": 0 + }, + { + "key": "py_三号动漫", + "name": "三号动漫(T3)", + "type": 3, + "api": "./js/py/plugin/app/三号动漫APP.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 5, + "ext": "" + }, + { + "key": "py_火车太顺", + "name": "火车太顺(T3)", + "type": 3, + "api": "./js/py/plugin/app/火车太顺APP.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 5, + "ext": "" + }, + { + "key": "py_剧多短剧", + "name": "剧多短剧(T3)", + "type": 3, + "api": "./js/py/plugin/app/剧多短剧APP.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 5, + "ext": "" + }, + { + "key": "py_红果网页.py", + "name": "红果网页(T3)", + "type": 3, + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "api": "./js/py/plugin/html/红果网页.py", + "order_num": 5, + "ext": "" + }, + { + "key": "py_绝对影视", + "name": "绝对影视(T3)", + "type": 3, + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "api": "./js/py/plugin/html/绝对影视.py", + "order_num": 5, + "ext": "" + }, + { + "key": "py_嗷呜动漫", + "name": "嗷呜动漫(T3)", + "type": 3, + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "api": "./js/py/plugin/html/嗷呜动漫.py", + "order_num": 5, + "ext": "" + }, + { + "key": "py_甜圈短剧", + "name": "甜圈短剧(T3)", + "type": 3, + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "api": "./js/py/plugin/html/甜圈短剧.py", + "order_num": 5, + "ext": "" + }, + { + "key": "py_jieyingshi", + "name": "界影视(T3)", + "type": 3, + "api": "./py/py_jieyingshi.py", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "changeable": 0 + }, + { + "key": "py_aigua", + "name": "爱瓜TV(T3)", + "type": 3, + "api": "./js/py/plugin/app/爱瓜TVAPP.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 5, + "ext": "" + }, + { + "key": "js_youyou", + "name": "悠悠视频(T3)", + "type": 3, + "api": "./js/py/plugin/app/悠悠APP.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 5, + "ext": "" + }, + { + "key": "py_国外", + "name": "国外剧情(T3)", + "type": 3, + "api": "./py/py_guowaiju.py", + "quickSearch": 1, + "searchable": 1, + "filterable": 1 + }, + { + "key": "py_偷乐", + "name": "偷乐短剧(T3)", + "type": 3, + "api": "./py/偷乐短剧.py", + "searchable": 1, + "changeable": 1, + "quickSearch": 1, + "filterable": 1, + "playerType": 2 + }, + { + "key": "py_猎手", + "name": "电影猎手(T3)", + "type": 3, + "api": "./js/py/plugin/app/电影猎手.py", + "quickSearch": 1, + "searchable": 1, + "filterable": 0 + }, + { + "key": "py_美帕", + "name": "美帕影视(T3)", + "type": 3, + "api": "./js/py/plugin/app/美帕APP.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "playerType": 2, + "order_num": 5, + "ext": "" + }, + { + "key": "py_嗨皮", + "name": "嗨皮影视(T3)", + "type": 3, + "api": "./py/嗨皮影视.py", + "quickSearch": 1, + "filterable": 1, + "playerType": 2 + }, + { + "key": "py_云端", + "name": "云端影视(T3)", + "type": 3, + "api": "./py/云端影视.py", + "quickSearch": 1, + "filterable": 1, + "playerType": 2 + }, + { + "key": "py_魔方", + "name": "魔方影视(T3)", + "type": 3, + "api": "./js/py/plugin/app/魔方影视APP.py", + "quickSearch": 1, + "filterable": 1, + "playerType": 2 + }, + { + "key": "py_边缘", + "name": "边缘影视(T3)", + "type": 3, + "api": "./js/py/plugin/app/边缘影视APP.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "playerType": 2, + "order_num": 5, + "ext": "" + }, + { + "key": "py_恋鱼", + "name": "恋鱼影视(T3)", + "type": 3, + "api": "./js/py/plugin/app/恋鱼影视APP.py", + "quickSearch": 1, + "filterable": 1, + "playerType": 2 + }, + { + "key": "py_若惜", + "name": "若惜影视(T3)", + "type": 3, + "api": "./js/py/plugin/app/若惜追剧APP.py", + "quickSearch": 1, + "filterable": 1, + "playerType": 2 + }, + { + "key": "py_云速", + "name": "云速影视(T3)", + "type": 3, + "api": "./py/云速影视.py", + "quickSearch": 1, + "filterable": 1, + "playerType": 2 + }, + { + "key": "py_旺旺", + "name": "旺旺影视(T3)", + "type": 3, + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "api": "./js/py/plugin/html/旺旺.py", + "playerType": 2, + "order_num": 5, + "ext": "" + }, + { + "key": "py_农牧", + "name": "农牧影视(T3)", + "type": 3, + "api": "./py/农民影视.py", + "quickSearch": 1, + "filterable": 1, + "playerType": 2 + }, + { + "key": "py_文才", + "name": "文才影视(T3)", + "type": 3, + "api": "./py/文才影视.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": { + "site": "https://www.hkybqufgh.com,https://www.sizhengxt.com,https://0996zp.com,https://9zhoukj.com/,https://www.sizhengxt.com,https://www.tjrongze.com,https://www.jiabaide.cn,https://cqzuoer.com" + } + }, + { + "key": "py_4KAV", + "name": "4KAV(T3)", + "type": 3, + "api": "./py/4KAV.py", + "quickSearch": 1, + "searchable": 1, + "filterable": 1 + }, + { + "key": "py_随机小姐姐", + "name": "随机小姐姐(T3)", + "type": 3, + "api": "./js/py/plugin/html/随机小姐姐.py", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 5, + "ext": "" + }, + { + "key": "3.1", + "name": "== 3.1 ==" + }, + { + "key": "py_DianYingTanTang", + "name": "🫐电影天堂(T4)", + "type": 4, + "api": "https://py.doube.eu.org/spider?site=DianYingTanTang", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "changeable": 0 + }, + { + "key": "py_OleVod", + "name": "欧乐影院(T4)", + "type": 4, + "api": "https://py.doube.eu.org/spider?site=OleVod", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "changeable": 0 + }, + { + "key": "py_Dm84", + "name": "动漫巴士(T4)", + "type": 4, + "api": "https://py.doube.eu.org/spider?site=Dm84", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "changeable": 0 + }, + { + "key": "4", + "name": "== 4 ==" + }, + { + "key": "人人影视", + "name": "人人影视", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/人人.json" + }, + { + "key": "农民影视", + "name": "农民影视", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/农民.json" + }, + { + "key": "熊猫影视", + "name": "熊猫影视", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/熊猫.json" + }, + { + "key": "秀儿影院", + "name": "秀儿影院", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/秀儿.json" + }, + { + "key": "毒舌影视", + "name": "毒舌影视", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/毒舌.json" + }, + { + "key": "星辰影院", + "name": "星辰影院", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/星辰.json" + }, + { + "key": "全网看", + "name": "全网看", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/全网看.json" + }, + { + "key": "free影视", + "name": "free影视", + "type": 3, + "click": "document.querySelector(\"#playleft iframe\").contentWindow.document.querySelector(\"#start\").click();", + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/free.json" + }, + { + "key": "喝茶影视", + "name": "喝茶影视", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/喝茶.json" + }, + { + "key": "策弛影视", + "name": "策弛影视", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/策弛.json" + }, + { + "key": "茶杯狐影视", + "name": "茶杯狐影视", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/茶杯狐.json" + }, + { + "key": "瓜籽影院", + "name": "瓜籽影院", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/瓜籽.json" + }, + { + "key": "来看点播", + "name": "来看点播", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/来看.json" + }, + { + "key": "布卡影视", + "name": "布卡影视", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/布卡.json" + }, + { + "key": "一帆影视", + "name": "一帆影视", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/一帆.json" + }, + { + "key": "欧乐影视", + "name": "欧乐影视", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/欧乐.json" + }, + { + "key": "奇迹", + "name": "奇迹影视", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/奇迹.json" + }, + { + "key": "素白白", + "name": "素白白", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/素白白.json" + }, + { + "key": "5", + "name": "== 5 ==" + }, + { + "key": "豆瓣资源", + "name": "豆瓣采集", + "type": 1, + "quickSearch": 1, + "api": "https://caiji.dbzy.tv/api.php/provide/vod/" + }, + { + "key": "索尼", + "name": "索尼采集 ", + "type": 1, + "api": "https://suoniapi.com/api.php/provide/vod/", + "playUrl": "https://www.snplayer.com/?url=", + "quickSearch": 1, + "searchable": 1, + "changeable": 1, + "categories": [ + "国产动漫", + "日韩动漫", + "国产剧" + ] + }, + { + "key": "量子", + "name": "量子采集", + "type": 1, + "api": "https://cj.lziapi.com/api.php/provide/vod/", + "playUrl": "https://lziplayer.com/?url=", + "quickSearch": 1, + "searchable": 1, + "changeable": 1, + "categories": [ + "国产动漫", + "日韩动漫", + "国产剧" + ] + }, + { + "key": "非凡", + "name": "非凡采集", + "type": 1, + "api": "https://cj.ffzyapi.com/api.php/provide/vod/?", + "quickSearch": 1, + "searchable": 1, + "changeable": 1, + "categories": [ + "国产动漫", + "日韩动漫", + "国产剧" + ] + }, + { + "key": "无尽", + "name": "无尽采集", + "type": 1, + "api": "https://api.wujinapi.net/api.php/provide/vod/", + "playUrl": "https://jx.wujinkk.com/dplayer/?url=", + "quickSearch": 1, + "searchable": 1, + "changeable": 1, + "categories": [ + "国产动漫", + "日韩动漫", + "国产剧", + "预告片" + ] + }, + { + "key": "金鹰", + "name": "金鹰采集", + "type": 1, + "api": "https://jyzyapi.com/api.php/provide/vod/", + "quickSearch": 1, + "searchable": 1, + "changeable": 1, + "categories": [ + "中国动漫", + "日本动漫", + "内地剧" + ] + }, + { + "key": "速播", + "name": "速播采集", + "type": 1, + "api": "https://subocaiji.com/api.php/provide/vod/", + "quickSearch": 1, + "searchable": 1, + "changeable": 1, + "categories": [ + "中国动漫", + "日本动漫", + "大陆剧" + ] + }, + { + "key": "樱花", + "name": "樱花采集", + "type": 1, + "api": "https://m3u8.apiyhzy.com/api.php/provide/vod/", + "playUrl": "https://jx.yhzybf.com/player/jx.php?url=", + "quickSearch": 1, + "searchable": 1, + "changeable": 1, + "categories": [ + "国产动漫", + "日本动漫", + "国产剧" + ] + }, + { + "key": "黑木耳", + "name": "黑木耳", + "type": 1, + "api": "https://json02.heimuer.xyz/api.php/provide/vod/", + "playUrl": "https://hoplayer.com/index.html?url=", + "quickSearch": 1, + "categories": [ + "国产动漫", + "日本动漫", + "国产剧" + ] + }, + { + "key": "电影天堂", + "name": "电影天堂", + "type": 1, + "api": "http://caiji.dyttzyapi.com/api.php/provide/vod/", + "searchable": 1, + "quickSearch": 1, + "changeable": 0, + "categories": [ + "国产动漫", + "日韩动漫", + "连续剧" + ] + }, + { + "key": "6", + "name": "== 6 ==" + }, + { + "key": "网盘配置", + "name": "网盘及彈幕配置", + "type": 3, + "api": "csp_Config", + "searchable": 0, + "changeable": 0, + "ext": "./lib/tokenm.json", + "style": { + "type": "rect", + "ratio": 1.5 + } + }, + { + "key": "Local", + "name": "本地文件夹", + "type": 3, + "api": "csp_Local" + }, + { + "key": "FirstAid", + "name": "🚑 急救知识 ", + "type": 3, + "api": "csp_FirstAid", + "searchable": 0, + "quickSearch": 0, + "changeable": 0, + "style": { + "type": "rect", + "ratio": 3.8 + } + }, + { + "key": "Guanying", + "name": "观影网盘", + "type": 3, + "api": "csp_Guanying", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$https://www.gying.net$$$noproxy$$$1$$$./lib/guanying.txt$$$GUANYING" + }, + { + "key": "FourKFM", + "name": "4K网盘", + "type": 3, + "api": "csp_FourKFM", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$http://4kfm.com/$$$noproxy$$$1$$$./lib/4kfm.txt$$$4KFM" + }, + { + "key": "校长影视", + "name": "校长影视", + "type": 3, + "api": "csp_XiaoZhang", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$https://xzyshd.com$$$proxy$$$1" + }, + { + "key": "Wogg", + "name": "玩偶哥哥", + "type": 3, + "api": "csp_Wogg", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$https://www.wogg.one/$$$noproxy$$$1$$$./lib/wogg.json$$$WOGG" + }, + { + "key": "yydsys", + "name": "玩你老哥", + "type": 3, + "api": "csp_Wobg", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$https://tv.yydsys.top/$$$proxy$$$1$$$./lib/wogg.json$$$WNLG" + }, + { + "key": "Mogg", + "name": "木偶哥哥", + "type": 3, + "api": "csp_Wobg", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$http://123.666291.xyz/$$$noproxy$$$1$$$./lib/wogg.json$$$MOGG" + }, + { + "key": "WOSS", + "name": "玩偶叔叔", + "type": 3, + "api": "csp_Wobg", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$https://woss.fenwe.eu.org/$$$noproxy$$$1$$$./lib/wogg.json$$$WOSS" + }, + { + "key": "DAWO", + "name": "大玩偶", + "type": 3, + "api": "csp_Wobg", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$http://149.88.87.18:6688/$$$noproxy$$$1$$$./lib/wogg.json$$$DAWO" + }, + { + "key": "蜡笔网盘", + "name": "蜡笔网盘", + "type": 3, + "api": "csp_Wobg", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$https://www.goimg.asia/$$$noproxy$$$1$$$./lib/wogg.json$$$LABI" + }, + { + "key": "BAIJIA", + "name": "百家网盘", + "type": 3, + "api": "csp_Wobg", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$http://cj.jiexi.news/$$$noproxy$$$1$$$./lib/wogg.json$$$BAIJIA" + }, + { + "key": "Xiaomi", + "name": "小米网盘", + "type": 3, + "api": "csp_Wobg", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$https://www.mucpan.cc/$$$noproxy$$$1$$$./lib/wogg.json$$$XIAOMI" + }, + { + "key": "Hmxz", + "name": "海绵网盘", + "type": 3, + "api": "csp_Hmxz", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$https://haimian.eu.org/$$$noproxy$$$1$$$./lib/hmxz.txt$$$HMXZ", + "style": { + "type": "list", + "ratio": 1.1 + } + }, + { + "key": "Leijing", + "name": "雷鲸网盘", + "type": 3, + "api": "csp_Panta", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$https://leijing.xyz/$$$noproxy$$$1$$$./lib/leijing.txt$$$LEIJING", + "style": { + "type": "list", + "ratio": 1.1 + } + }, + { + "key": "至臻网盘", + "name": "至臻网盘", + "type": 3, + "api": "csp_Wobg", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$https://mihdr.top/$$$noproxy$$$1$$$./lib/wogg.json$$$ZHIZHEN" + }, + { + "key": "QINGYING", + "name": "清影|网盘", + "type": 3, + "api": "csp_Wobg", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$https://revohd.com/$$$noproxy$$$1$$$./lib/wogg.json$$$QINGYING" + }, + { + "key": "Guazi", + "name": "瓜子|App", + "type": 3, + "api": "csp_Guazi", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "" + }, + { + "key": "ddys", + "name": "低端影视|网盘", + "type": 3, + "api": "csp_Ddys", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$https://ddys.pro/$$$proxy$$$1$$$" + }, + { + "key": "美剧迷", + "name": "美剧迷|网盘", + "type": 3, + "api": "csp_Meijumi", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 120, + "ext": "./lib/tokenm.json$$$https://www.meijumi.net/$$$proxy$$$1" + }, + { + "key": "LIBVIO", + "name": "LIBVIO|网盘", + "type": 3, + "api": "csp_Libvio", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$http://www.libvio.mov/$$$noproxy$$$1" + }, + { + "key": "Hdhive", + "name": "鸟窝|网盘", + "type": 3, + "api": "csp_Hdh", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 120, + "ext": "./lib/tokenm.json$$$https://hdhive.online$$$noproxy$$$1$$$./lib/hdhive.txt" + }, + { + "key": "TianYiSou", + "name": "天逸搜|网盘搜索", + "type": 3, + "api": "csp_TianYiSou", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$null$$$proxy" + }, + { + "key": "YunPan", + "name": "云盘资源|网盘", + "type": 3, + "api": "csp_YunPan", + "timeout": 60, + "ext": "./lib/tokenm.json$$$null$$$proxy$$$1" + }, + { + "key": "Panta", + "name": "盘Ta|网盘", + "type": 3, + "api": "csp_Panta", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$https://www.91panta.cn/$$$null$$$1$$$./lib/panta.txt$$$PANTA", + "style": { + "type": "list", + "ratio": 1.1 + } + }, + { + "key": "DaPanSo", + "name": "大盘搜|网盘搜索", + "type": 3, + "api": "csp_DaPanSo", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$https://dapanso.com$$$proxy$$$1" + }, + { + "key": "PikaSo", + "name": "皮卡搜|网盘搜索", + "type": 3, + "api": "csp_PikaSo", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$https://www.pikaso.top/$$$null", + "style": { + "type": "list", + "ratio": 1.1 + } + }, + { + "key": "Qianfan", + "name": "千帆|网盘搜索", + "type": 3, + "api": "csp_Qianfan", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$https://pan.qianfan.app$$$null$$$./lib/qianfan.txt$$$1" + }, + { + "key": "新6V", + "name": "新6V|网盘", + "type": 3, + "api": "csp_Xb6v", + "searchable": 1, + "changeable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$https://www.66ss.org$$$null$$$1" + }, + { + "key": "BLSGod", + "name": "BLSGod|磁", + "type": 3, + "api": "csp_BLSGod", + "changeable": 1, + "timeout": 60 + }, + { + "key": "SeedHub", + "name": "SeedHub|磁", + "type": 3, + "api": "csp_SeedHub", + "changeable": 1, + "timeout": 60 + }, + { + "key": "YingSo", + "name": "影搜|网盘搜索", + "type": 3, + "api": "csp_YingSo", + "timeout": 60, + "ext": "./lib/tokenm.json" + }, + { + "key": "異界", + "name": "異界", + "type": 3, + "api": "csp_Ysj", + "searchable": 1, + "changeable": 0 + }, + { + "key": "酷狗", + "name": "酷狗", + "type": 3, + "api": "csp_Kugou", + "searchable": 1, + "changeable": 0 + }, + { + "key": "hipy_js_KTV歌厅[听]1", + "name": "KTV歌厅", + "type": 3, + "api": "./lib/drpy2.min.js", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "order_num": 0, + "ext": "./js/drpy2.js" + }, + { + "key": "Yinyuetai", + "name": "音悦台", + "type": 3, + "api": "csp_Yinyuetai", + "searchable": 1, + "changeable": 0 + }, + { + "key": "push_agent", + "name": "推送", + "type": 3, + "api": "csp_Push", + "changeable": 0, + "timeout": 30, + "ext": "./lib/tokenm.json" + }, + { + "key": "應用商店", + "name": "應用商店", + "type": 3, + "api": "csp_Market", + "searchable": 0, + "changeable": 0, + "ext": "https://fm.t4tv.hz.cz/json/market.json" + }, + { + "key": "直播转点播", + "name": "电视┃直播", + "type": 3, + "searchable": 0, + "api": "./lib/live2vod.js", + "ext": "./lib/feimaolive.json" + }, + { + "key": "7", + "name": "== 7 ==" + }, + { + "key": "MXDM", + "name": "MXDM|动漫", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "ext": "./js/s/mx.json" + }, + { + "key": "MiFun", + "name": "MiFun|动漫", + "type": 3, + "api": "./py/MiFunP.py", + "quickSearch": 1, + "filterable": 1, + "playerType": 2 + }, + { + "key": "CliCli", + "name": "CliCli|动漫", + "type": 3, + "api": "./py/CliCli动漫.py", + "quickSearch": 1, + "filterable": 1, + "playerType": 2 + }, + { + "key": "哆啦", + "name": "哆啦|新番社", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "quickSearch": 1, + "filterable": 1, + "style": { + "type": "list" + }, + "ext": "./XBPQ/哆啦新番社.json" + }, + { + "key": "8", + "name": "== 8 ==" + }, + { + "key": "Hdhive", + "name": "影巢网盘", + "type": 3, + "api": "csp_Hdhive", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./json/tokenm.json$$$proxy$$$1", + "order_num": 9999 + } + ], + "lives": [ + { + "name": "cluntop", + "type": 0, + "url": "./lib/iptv.m3u", + "ua": "okhttp/4.1.0" + }, + { + "name": "Mursor", + "type": "0", + "url": "https://gh.clun.top/raw.githubusercontent.com/Mursor/LIVE/main/iptv.m3u", + "playerType": 2, + "timeout": 10, + "ua": "okHttp/Mod-1.4.0.0" + }, + { + "name": "tv_jp", + "type": "0", + "url": "https://gh.clun.top/raw.githubusercontent.com/luongz/iptv-jp/main/jp.m3u" + }, + { + "name": "tv_jp_clean", + "type": "0", + "url": "https://gh.clun.top/raw.githubusercontent.com/luongz/iptv-jp/main/jp_clean.m3u" + }, + { + "name": "平台直播", + "type": 0, + "url": "https://tv.iill.top/m3u/Live", + "ua": "okhttp/3.15", + "playerType": 2 + }, + { + "name": "冰茶 TV", + "type": 0, + "url": "https://fy.188766.xyz/?ip=&mishitong=true&mima=mianfeidehaimaiqian&json=true", + "ua": "bingcha/1.1" + }, + { + "name": "肥羊虎牙一起看", + "type": 0, + "url": "https://gh.clun.top/raw.githubusercontent.com/mursor1985/LIVE/main/huyayqk.m3u", + "playerType": 2, + "timeout": 10, + "ua": "okHttp/Mod-1.4.0.0" + }, + { + "name": "肥羊B站直播", + "type": 0, + "url": "https://gh.clun.top/raw.githubusercontent.com/mursor1985/LIVE/main/bililive.m3u", + "playerType": 2, + "timeout": 10, + "ua": "okHttp/Mod-1.4.0.0" + }, + { + "name": "肥羊斗鱼一起看", + "type": 0, + "url": "https://gh.clun.top/raw.githubusercontent.com/mursor1985/LIVE/main/douyuyqk.m3u", + "playerType": 2, + "timeout": 10, + "ua": "okHttp/Mod-1.4.0.0" + }, + { + "name": "肥羊YY轮播", + "type": 0, + "url": "https://gh.clun.top/raw.githubusercontent.com/mursor1985/LIVE/main/yylunbo.m3u", + "playerType": 2, + "timeout": 10, + "ua": "okHttp/Mod-1.4.0.0" + }, + { + "name": "YTLive", + "type": 0, + "url": "./lib/yo21.txt" + }, + { + "name": "wqwqwq", + "type": 0, + "url": "https://la1.wqwqwq.sbs/tv.m3u" + }, + { + "name": "YanG", + "type": 0, + "url": "https://tv.iill.top/m3u/Gather", + "ua": "(Windows NT 10.0; Win64; x64) PotPlayer/25.03.21", + "epg": "http://epg.51zmt.top:8000/api/diyp/?ch={name}&date={date}", + "logo": "https://live.fanmingming.com/tv/{name}.png" + }, + { + "name": "nctv", + "type": 0, + "url": "http://live.nctv.top/x.txt", + "ua": "okhttp/4.1.0" + }, + { + "name": "ofiii", + "type": 0, + "url": "./lib/ofiii.m3u" + }, + { + "name": "Guovin", + "type": 0, + "url": "https://gh.clun.top/raw.githubusercontent.com/Guovin/iptv-api/gd/output/result.m3u" + }, + { + "name": "mlzlzj", + "type": 0, + "url": "https://gh.clun.top/raw.githubusercontent.com/mlzlzj/TV/main/output/result.m3u" + }, + { + "name": "gambiarras", + "type": 0, + "url": "https://github.com/gambiarras/legal-iptv/blob/main/playlist.m3u" + }, + { + "name": "epg.pw All", + "type": 0, + "url": "https://m3u.002397.xyz/all.m3u" + }, + { + "name": "iptv.org All", + "type": 0, + "url": "https://m3u.002397.xyz/o_all.m3u" + }, + { + "group": "redirect", + "channels": [ + { + "name": "redirect", + "urls": [ + "proxy://do=live&type=live&proxy=&url=" + ] + } + ] + } + ], + "doh": [ + { + "name": "OpenDNS", + "url": "https://dns.www.opendns.com/dns-query", + "ips": [ + "208.67.222.222", + "208.67.220.220" + ] + }, + { + "name": "114dns", + "url": "https://dns.114dns.com/dns-query", + "ips": [ + "114.114.114.114", + "114.114.115.115" + ] + }, + { + "name": "腾讯", + "url": "https://doh.pub/dns-query", + "ips": [ + "119.29.29.29" + ] + }, + { + "name": "阿里", + "url": "https://dns.alidns.com/dns-query", + "ips": [ + "223.6.6.6", + "223.5.5.5" + ] + }, + { + "name": "360", + "url": "https://doh.360.cn/dns-query" + }, + { + "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" + ] + } + ], + "proxy": [ + "raw.github*.com", + "github.com", + "youtube.com", + ".*boku.*", + ".*nivod.*", + ".*ulivetv.*", + "missav.ws", + "javmulu.net", + "www.netflav.com" + ], + "hosts": [ + "cache.ott.ystenlive.itv.cmvideo.cn=base-v4-free-mghy.e.cdn.chinamobile.com", + "cache.ott.bestlive.itv.cmvideo.cn=base-v4-free-mghy.e.cdn.chinamobile.com", + "cache.ott.wasulive.itv.cmvideo.cn=base-v4-free-mghy.e.cdn.chinamobile.com", + "cache.ott.fifalive.itv.cmvideo.cn=base-v4-free-mghy.e.cdn.chinamobile.com", + "cache.ott.hnbblive.itv.cmvideo.cn=base-v4-free-mghy.e.cdn.chinamobile.com", + "hlsztemgsplive.miguvideo.com=hlsztemgsplive.miguvideo.com.b.cdn.chinamobile.com", + "push-rtmp-hs-spe-f5.douyincdn.com=source-fcdn-spe-push.s.bytefcdn.com", + "cdn9.163189.xyz=gcore.jsdelivr.net", + "cache.ott.fifalive.itv.cmvideo.cn=cache.ott.fifalive.itv.cmvideo.cn.e.cdn.chinamobile.com", + "studentlive.migucloud.com=base-v4v6-miguvideo.e.cdn.chinamobile.com" + ], + "rules": [ + { + "host": "*", + "rule": [ + "http((?!http).){12,}?\\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg|m4a)\\?.*" + ] + }, + { + "host": "*", + "rule": [ + "http((?!http).){12,}\\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg|m4a)" + ] + }, + { + "name": "ofiii", + "hosts": [ + "www.ofiii.com" + ], + "script": [ + "const play=document.getElementsByClassName('play_icon')[0],event=new MouseEvent('click',{bubbles:!0,cancelable:!0,view:window,screenX:100,screenY:100,clientX:50,clientY:50,button:0,shiftKey:!1,ctrlKey:!1,altKey:!1,metaKey:!1,modifierState:0});play.dispatchEvent(event);" + ] + }, + { + "host": "www.djuu.com", + "rule": [ + "mp4.djuu.com", + "m4a" + ] + }, + { + "host": "www.sharenice.net", + "rule": [ + "huoshan.com", + "/item/video/" + ], + "filter": [] + }, + { + "host": "www.sharenice.net", + "rule": [ + "sovv.qianpailive.com", + "vid=" + ], + "filter": [] + }, + { + "host": "www.sharenice.net", + "rule": [ + "douyin.com", + "/play/" + ] + }, + { + "host": "m.ysxs8.vip", + "rule": [ + "ysting.ysxs8.vip:81", + "xmcdn.com" + ], + "filter": [] + }, + { + "host": "hdmoli.com", + "rule": [ + ".m3u8" + ] + }, + { + "host": "https://api.live.bilibili.com", + "rule": [ + "bilivideo.com", + "/index.m3u8" + ], + "filter": [ + "data.bilibili.com/log/web", + "i0.hdslb.com/bfs/live/" + ] + }, + { + "host": "www.agemys.cc", + "rule": [ + "cdn-tos", + "obj/tos-cn" + ] + }, + { + "host": "www.fun4k.com", + "rule": [ + "https://hd.ijycnd.com/play", + "index.m3u8" + ] + }, + { + "host": "zjmiao.com", + "rule": [ + "play.videomiao.vip/API.php", + "time=", + "key=", + "path=" + ] + }, + { + "name": "火山嗅探", + "hosts": [ + "huoshan.com" + ], + "regex": [ + "item_id=" + ] + }, + { + "name": "抖音嗅探", + "hosts": [ + "douyin.com" + ], + "regex": [ + "is_play_url=" + ] + }, + { + "name": "農民嗅探", + "hosts": [ + "toutiaovod.com" + ], + "regex": [ + "video/tos/cn" + ] + }, + { + "name": "夜市", + "hosts": [ + "yeslivetv.com" + ], + "script": [ + "document.getElementsByClassName('vjs-big-play-button')[0].click()" + ] + }, + { + "name": "毛驢", + "hosts": [ + "www.maolvys.com" + ], + "script": [ + "document.getElementsByClassName('swal-button swal-button--confirm')[0].click()" + ] + }, + { + "name": "磁力", + "hosts": [ + "magnet" + ], + "regex": [ + "更多", + "社 區", + "x u u", + "最 新", + "直 播", + "更 新", + "社 区", + "有 趣", + "英皇体育", + "全中文AV在线", + "澳门皇冠赌场", + "哥哥快来", + "美女荷官", + "裸聊", + "新片首发", + "UUE29" + ] + } + ], + "headers": [ + { + "host": "hlsztemgsplive.miguvideo.com", + "header": { + "User-Agent": "bingcha/1.1" + } + } + ], + "ads": [ + "static-mozai.4gtv.tv" + ], + "parses": [ + { + "name": "M3U8", + "url": "https://jx.m3u8.tv/jiexi/?url=", + "type": 0 + }, + { + "name": "PM", + "url": "https://www.playm3u8.cn/jiexi.php?url=", + "type": 0 + }, + { + "name": "七哥", + "url": "https://jx.nnxv.cn/tv.php?url=", + "type": 0 + } + ], + "flags": [ + "youku", + "qq", + "iqiyi", + "qiyi", + "letv", + "sohu", + "tudou", + "pptv", + "mgtv", + "wasu" + ], + "disabled_wallpaper": "", + "wallpaper": "./img/0.jpg", + "logo": "./img/pg.gif", + "spider": "./pg.jar", + "warningText": "1" +} \ No newline at end of file diff --git a/fun.json b/fun.json new file mode 100644 index 0000000..33e0565 --- /dev/null +++ b/fun.json @@ -0,0 +1,1281 @@ +{ + "sites": [ + { + "key": "精品资源站", + "name": "精品资源", + "type": 1, + "api": "https://www.jingpinx.com/api.php/provide/vod/", + "ext": "proxy" + }, + { + "key": "七区_py", + "name": "七区", + "type": 3, + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "api": "./js/ss/七区.py", + "order_num": 5, + "ext": "" + }, + { + "key": "美少女", + "name": "美少女", + "type": 0, + "api": "https://www.msnii.com/api/xml.php", + "searchable": 1, + "quickSearch": 1 + }, + { + "key": "AV资源", + "name": "AV资源", + "type": 1, + "api": "https://api.souavzy.vip/api.php/provide/vod/at/json", + "searchable": 1, + "style": { + "type": "rect", + "ratio": 1.33 + }, + "changeable": 1 + }, + { + "key": "大奶子", + "name": "大奶子资源", + "type": 1, + "api": "https://apidanaizi.com/api.php/provide/vod", + "searchable": 1, + "style": { + "type": "rect", + "ratio": 1.33 + }, + "changeable": 1 + }, + { + "key": "花都", + "name": "花都影视", + "type": 3, + "changeable": 1, + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "api": "csp_XBPQ", + "jar": "./lib/XBPQ.jar", + "ext": "./js/py/花都.json" + }, + { + "key": "py_Phub", + "name": "Pronhub(T3)", + "type": 3, + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "api": "./js/py/aowuplugin/xhamster.py", + "order_num": 5, + "ext": "" + }, + { + "key": "py_数逼毛", + "name": "py_4K数逼毛(T3)", + "type": 3, + "api": "./js/py/aowuplugin/py_4K数逼毛.py", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "changeable": 0 + }, + { + "key": "py_51吸瓜", + "name": "51吸瓜(T3)", + "type": 3, + "api": "./js/py/plugin/adult/51吸瓜.py" + }, + { + "key": "py_DSYS", + "name": "DSYS(T3)", + "type": 3, + "api": "./js/py/plugin/adult/DSYS.py" + }, + { + "key": "py_Miss", + "name": "Miss(T3)", + "type": 3, + "api": "./js/py/plugin/adult/Miss.py" + }, + { + "key": "py_Phb", + "name": "Phb(T3)", + "type": 3, + "api": "./js/py/plugin/adult/Phb.py" + }, + { + "key": "py_Xhm", + "name": "Xhm(T3)", + "type": 3, + "api": "./js/py/plugin/adult/Xhm.py" + }, + { + "key": "py_Xvd", + "name": "Xvd(T3)", + "type": 3, + "api": "./js/py/plugin/adult/Xvd.py" + }, + { + "key": "py_lav", + "name": "lav(T3)", + "type": 3, + "api": "./js/py/plugin/adult/lavAPP.py" + }, + { + "key": "py_推特", + "name": "推特(T3)", + "type": 3, + "api": "./js/py/plugin/adult/推特APP.py" + }, + { + "key": "py_小红薯", + "name": "小红薯(T3)", + "type": 3, + "api": "./js/py/plugin/adult/小红薯APP.py" + }, + { + "key": "py_浴火社", + "name": "浴火社(T3)", + "type": 3, + "api": "./js/py/plugin/adult/小浴火社APP.py" + }, + { + "key": "py_吃瓜", + "name": "吃瓜(T3)", + "type": 3, + "api": "./js/py/plugin/adult/吃瓜.py" + }, + { + "key": "py_花都", + "name": "花都(T3)", + "type": 3, + "api": "./js/py/plugin/adult/花都.py" + }, + { + "key": "py_香蕉", + "name": "香蕉(T3)", + "type": 3, + "api": "./js/py/plugin/adult/香蕉.py" + }, + { + "key": "AIvin", + "name": "AIvin", + "type": 0, + "api": "http://lbapiby.com/api.php/provide/vod/at/xml", + "ext": "proxy" + }, + { + "key": "色猫", + "name": "色猫", + "type": 1, + "api": "https://caiji.semaozy.net/inc/apijson_vod.php", + "ext": "proxy" + }, + { + "key": "色猫", + "name": "色猫2", + "type": 1, + "api": "https://api.maozyapi.com/inc/apijson_vod.php", + "ext": "proxy" + }, + { + "key": "TGYunPan18pan", + "name": "TG|涩涩", + "searchable": 1, + "changeable": 1, + "type": 3, + "api": "csp_TGYunPan", + "timeout": 60, + "ext": { + "token": "./lib/tokenm.json", + "json": "https://raw.githubusercontent.com/fish2018/lib/main/json/18pan.json", + "keywords": "名称,片名,推荐", + "channellist": "CosMM18,avpush,ribenseyuge1,cilitu,cctav,ppg1314,avab01,SeseAnime,AVnew,jpccav,PornXOS,CCCTAV", + "proxy": "noproxy", + "danmu": true + } + }, + { + "key": "色播", + "name": "色播", + "type": 3, + "api": "https://raw.githubusercontent.com/fish2018/lib/main/js/dr_py/js/sebo.js", + "searchable": 1, + "changeable": 0 + }, + { + "key": "py_色播聚合", + "name": "py_色播聚合(T3)", + "type": 3, + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "api": "./aowuplugin/py_色播聚合.py", + "order_num": 5, + "ext": "" + }, + { + "key": "XMVideo", + "name": "熊猫视频", + "type": 3, + "api": "csp_XMVideo", + "searchable": 1, + "filterable": 1, + "jar": "https://raw.githubusercontent.com/guot55/yg/main/jar/182.jar" + }, + { + "key": "百万破解AV", + "name": "百万破解", + "type": 3, + "api": "csp_XBPQ", + "jar": "./jar/XBPQ.jar", + "searchable": 1, + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 120, + "ext": "./js/py/百万.json" + }, + { + "key": "pronlulu", + "name": "pronlulu", + "type": 3, + "api": "csp_XBPQ", + "timeout": 120, + "jar": "./lib/XBPQ.jar", + "ext": "./js/py/pronlulu.json" + }, + { + "key": "玩偶", + "name": "玩偶姐姐", + "type": 3, + "api": "csp_Doll", + "searchable": 1, + "recordable": 0, + "style": { + "type": "rect", + "ratio": 1.309 + }, + "ext": "proxy" + }, + { + "key": "Zuise", + "name": "最色", + "type": 3, + "api": "csp_Zuise", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "proxy" + }, + { + "key": "csp_xBPQ_超清", + "name": "香蕉超清", + "type": 3, + "api": "csp_xBPQ", + "searchable": 1, + "quickSearch": 1, + "filterable": 0, + "ext": "{\"分类url\":\"https://avhh.vip/cq/{cateId}-{catePg}.html\", \"分类\":\"请勿外传$2k-yazhou#按主页切换源$2k-zipaitoupai#无分类切换VPN$2k-chaoqingchuanmei#或者其他网络$2k-3Ddongman#资源网络共享$2k-oumei#有倒卖贩卖纯属欺诈$2k-luanlunrenqi#请勿相信!$2k-siwazhifu#绝对禁止未成年人观看$2k-zhibolubo#SM另类$2k-SMlinglei#超清三级$2k-chaoqingsanji\",\"副标题\":\"duration\\\">&& + + + + + + + 雨呢主页,TVBox,接口 + + + + + + + + + + + + + + + + + + + + + + +
+ +

雨呢个人主页

+ +

+ | 显示 +

+
+ + + \ No newline at end of file diff --git a/js/ok/ok.json b/js/ok/ok.json index e5a12a4..0207469 100644 --- a/js/ok/ok.json +++ b/js/ok/ok.json @@ -5,7 +5,7 @@ "sites": [ { "key": "豆瓣", - "name": "🤓公众号┃OK杰克", + "name": "🤓公众号┃星河电视屋", "type": 3, "api": "csp_DoubanGuard", "searchable": 0, diff --git a/js/py/plugin/html/柯南影视.py b/js/py/plugin/html/柯南影视.py new file mode 100644 index 0000000..5313945 --- /dev/null +++ b/js/py/plugin/html/柯南影视.py @@ -0,0 +1,197 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import re +import sys +from urllib.parse import quote, urlparse +from Crypto.Hash import SHA256 +sys.path.append("..") +import json +import time +from pyquery import PyQuery as pq +from base.spider import Spider + +class Spider(Spider): + + def init(self, extend=""): + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def action(self, action): + pass + + def destroy(self): + pass + + host='https://www.knvod.com' + + 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-CN,zh;q=0.9,en;q=0.8', + 'Sec-Fetch-Dest': 'document', + 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36', + 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="134", "Google Chrome";v="134"', + 'sec-ch-ua-platform': '"macOS"', + 'Origin': host, + 'Referer': f"{host}/", + 'Cookie':'X-Robots-Tag=CDN-VERIFY' + } + + def homeContent(self, filter): + data=self.getpq(self.fetch(self.host,headers=self.headers).text) + result = {} + classes = [] + for k in data('.head-more.box a').items(): + i=k.attr('href') + if i and '/show' in i: + classes.append({ + 'type_name': k.text(), + 'type_id': re.findall(r'\d+', i)[0] + }) + result['class'] = classes + result['list']=self.getlist(data('.border-box.public-r .public-list-div')) + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, tid, pg, filter, extend): + data=self.getpq(self.fetch(f"{self.host}/show/{tid}--------{pg}---/",headers=self.headers).text) + result = {} + result['list'] = self.getlist(data('.border-box.public-r .public-list-div')) + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + data = self.getpq(self.fetch(f"{self.host}/list/{ids[0]}/", headers=self.headers).text) + v=data('.detail-info.lightSpeedIn .slide-info') + vod = { + 'vod_year': v.eq(-1).text().split(':',1)[-1], + 'vod_remarks': v.eq(0), + 'vod_actor': v.eq(3).text().split(':',1)[-1], + 'vod_director': v.eq(2).text().split(':',1)[-1], + 'vod_content': data('.switch-box #height_limit').text() + } + np=data('.anthology.wow.fadeInUp') + ndata=np('.anthology-tab .swiper-wrapper .swiper-slide') + pdata=np('.anthology-list .anthology-list-box ul') + play,names=[],[] + for i in range(len(ndata)): + n=ndata.eq(i)('a') + n('span').remove() + names.append(n.text()) + vs=[] + for v in pdata.eq(i)('li').items(): + vs.append(f"{v.text()}${v('a').attr('href')}") + play.append('#'.join(vs)) + vod["vod_play_from"] = "$$$".join(names) + vod["vod_play_url"] = "$$$".join(play) + result = {"list": [vod]} + return result + + def searchContent(self, key, quick, pg="1"): + data = self.fetch(f"{self.host}/index.php/ajax/suggest?mid=1&wd={key}&limit=9999×tamp={int(time.time()*1000)}", headers=self.headers).json() + videos=[] + for i in data['list']: + videos.append({ + 'vod_id': i['id'], + 'vod_name': i['name'], + 'vod_pic': i['pic'] + }) + return {'list':videos,'page':pg} + + def playerContent(self, flag, id, vipFlags): + h={ + 'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.8 Mobile/15E148 Safari/604.1', + 'Origin': self.host + } + data = self.getpq(self.fetch(f"{self.host}{id}", headers=self.headers).text) + try: + jstr = data('.player-box .player-left script').eq(1).text() + jsdata = json.loads(jstr.split('=',1)[-1]) + url = jsdata.get('url') + if not re.search(r'\.m3u8|\.mp4',jsdata['url']): + jxd=self.fetch(f"{self.host}/static/player/{jsdata['from']}.js", headers=self.headers).text + jx=re.search(r'http.*?url=', jxd) + if not jx:raise Exception('未找到jx') + parsed_url = urlparse(jx.group()) + jxhost = parsed_url.scheme + "://" + parsed_url.netloc + title=data('head title').eq(0).text().split('-')[0] + next=f"{self.host.split('//')[-1]}{jsdata['link_next']}" if jsdata.get('link_next') else '' + cd=self.fetch(f"{jx.group()}{jsdata['url']}&next=//{next}&title={quote(title)}", headers=self.headers).text + match = re.search(r'var\s+config\s*=\s*(\{[\s\S]*?\})', cd) + if not match:raise Exception('未找到config') + cm=re.sub(r',\s*}(?=\s*$)', '}', match.group(1)) + config=json.loads(cm) + config.update({'key':self.sha256(f"{self.gettime()}knvod")}) + config.pop('next',None) + headers = { + 'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.8 Mobile/15E148 Safari/604.1', + 'Accept': 'application/json, text/javascript, */*; q=0.01', + 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8', + 'Cache-Control': 'no-cache', + 'DNT': '1', + 'Origin': jxhost, + 'Pragma': 'no-cache', + 'Sec-Fetch-Dest': 'empty', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Site': 'same-origin', + 'Sec-Fetch-Storage-Access': 'active', + 'X-Requested-With': 'XMLHttpRequest', + } + h['Origin']=jxhost + jd=self.post(f"{jxhost}/post.php", headers=headers, data=json.dumps(config)) + data=json.loads(jd.content.decode('utf-8-sig')) + url=data.get('knvod') + p = 0 + if not url:raise Exception('未找到播放地址') + except Exception as e: + print('错误信息:',e) + p,url=1,f"{self.host}{id}" + return {"parse": p, "url": url, "header": h} + + def localProxy(self, param): + pass + + def getlist(self,data): + videos=[] + for i in data.items(): + id = i('a').attr('href') + if id: + id = re.search(r'\d+', id).group(0) + img = i('img').attr('data-src') + if img and 'url=' in img and 'http' not in img: img = f'{self.host}{img}' + videos.append({ + 'vod_id': id, + 'vod_name': i('a').attr('title'), + 'vod_pic': img, + 'vod_remarks': i('.public-prt').text() or i('.public-list-prb').text() + }) + return videos + + def getpq(self, data): + try: + return pq(data) + except Exception as e: + print(f"{str(e)}") + return pq(data.encode('utf-8')) + + def gettime(self): + current_time = int(time.time()) + hourly_timestamp = current_time - (current_time % 3600) + return hourly_timestamp + + def sha256(self, text): + sha = SHA256.new() + sha.update(text.encode()) + return sha.hexdigest() diff --git a/js/py/plugin/html/甜圈短剧.py b/js/py/plugin/html/甜圈短剧.py new file mode 100644 index 0000000..9d1ca26 --- /dev/null +++ b/js/py/plugin/html/甜圈短剧.py @@ -0,0 +1,151 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import sys +sys.path.append('..') +from base.spider import Spider + + +class Spider(Spider): + + def init(self, extend=""): + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + ahost='https://api.cenguigui.cn' + + headers = { + 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36', + 'sec-ch-ua-platform': '"macOS"', + 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="134", "Google Chrome";v="134"', + 'DNT': '1', + 'sec-ch-ua-mobile': '?0', + 'Sec-Fetch-Site': 'cross-site', + 'Sec-Fetch-Mode': 'no-cors', + 'Sec-Fetch-Dest': 'video', + 'Sec-Fetch-Storage-Access': 'active', + 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8', + } + + def homeContent(self, filter): + 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': '🎬 小人物'}, + {'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': '喜剧', 'type_name': '🎬 喜剧'}, + {'type_id': '剧情', 'type_name': '🎬 剧情'}]} + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, tid, pg, filter, extend): + params = { + 'classname': tid, + 'offset': str((int(pg) - 1)), + } + data = self.fetch(f'{self.ahost}/api/duanju/api.php', params=params, headers=self.headers).json() + videos = [] + for k in data['data']: + videos.append({ + 'vod_id': k.get('book_id'), + 'vod_name': k.get('title'), + 'vod_pic': k.get('cover'), + 'vod_year': k.get('score'), + 'vod_remarks': f"{k.get('sub_title')}|{k.get('episode_cnt')}" + }) + result = {} + result['list'] = videos + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + v=self.fetch(f'{self.ahost}/api/duanju/api.php', params={'book_id': ids[0]}, headers=self.headers).json() + vod = { + 'type_name': v.get('category'), + 'vod_year': v.get('time'), + 'vod_remarks': v.get('duration'), + 'vod_content': v.get('desc'), + 'vod_play_from': '嗷呜爱看短剧', + 'vod_play_url': '#'.join([f"{i['title']}${i['video_id']}" for i in v['data']]) + } + return {'list':[vod]} + + def searchContent(self, key, quick, pg="1"): + return self.categoryContent(key, pg, True, {}) + + def playerContent(self, flag, id, vipFlags): + data=self.fetch(f'{self.ahost}/api/duanju/api.php', params={'video_id': id}, headers=self.headers).json() + return {'parse': 0, 'url': data['data']['url'], 'header': self.headers} + + def localProxy(self, param): + pass diff --git a/js/py/plugin/html/红果网页.py b/js/py/plugin/html/红果网页.py new file mode 100644 index 0000000..fea8d5f --- /dev/null +++ b/js/py/plugin/html/红果网页.py @@ -0,0 +1,127 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import re +import sys +from pyquery import PyQuery as pq +sys.path.append('..') +from base.spider import Spider + +class Spider(Spider): + + def init(self, extend=""): + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + host='https://www.hongguodj.cc' + + headers = { + 'Accept': '*/*', + 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8', + 'Cache-Control': 'no-cache', + 'Connection': 'keep-alive', + 'DNT': '1', + 'Origin': host, + 'Pragma': 'no-cache', + 'Sec-Fetch-Dest': 'empty', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Site': 'cross-site', + 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36', + 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="134", "Google Chrome";v="134"', + 'sec-ch-ua-mobile': '?0', + 'sec-ch-ua-platform': '"macOS"', + } + + def homeContent(self, filter): + result = {} + classes = [] + vlist = [] + data = pq(self.fetch(self.host, headers=self.headers).text) + for i in list(data('.slip li').items())[1:]: + classes.append({ + 'type_name': i.text(), + 'type_id': re.findall(r'\d+', i('a').attr('href'))[0] + }) + for i in data('.wrap .rows').items(): + vlist.extend(self.getlist(i('li'))) + result['class'] = classes + result['list'] = vlist + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, tid, pg, filter, extend): + data=pq(self.fetch(f'{self.host}/type/{tid}-{pg}.html', headers=self.headers).text) + result = {} + result['list'] = self.getlist(data('.list ul li')) + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + data=pq(self.fetch(f'{self.host}{ids[0]}', headers=self.headers).text) + v=data('.info') + p=v('p') + vod = { + 'vod_name': v('h1').text(), + 'type_name': p.eq(2).text(), + 'vod_year': p.eq(3).text(), + 'vod_area': p.eq(4).text(), + 'vod_remarks': v('em').text(), + 'vod_actor': p.eq(0).text(), + 'vod_director': p.eq(1).text(), + 'vod_content': data('#desc .text').text(), + 'vod_play_from': '', + 'vod_play_url': '' + } + names = [i.text() for i in data('.title.slip a').items()] + plist=[] + for i in data('.play-list ul').items(): + plist.append('#'.join([f'{j("a").text()}${j("a").attr("href")}' for j in i('li').items()])) + vod['vod_play_from'] = '$$$'.join(names) + vod['vod_play_url'] = '$$$'.join(plist) + return {'list': [vod]} + + def searchContent(self, key, quick, pg="1"): + data=pq(self.fetch(f'{self.host}/search/{key}----------{pg}---.html', headers=self.headers).text) + return {'list': self.getlist(data('.show.rows li')),'page':pg} + + def playerContent(self, flag, id, vipFlags): + p=0 + uid=f'{self.host}{id}' + data=pq(self.fetch(uid, headers=self.headers).text) + url=data('.video.ratio').attr('data-play') + if not url: + url = uid + p = 1 + return {'parse': p, 'url': url, 'header': self.headers} + + def localProxy(self, param): + pass + + def getlist(self,data): + vlist = [] + for j in data.items(): + vlist.append({ + 'vod_id': j('a').attr('href'), + 'vod_name': j('img').attr('alt'), + 'vod_pic': self.host + j('img').attr('data-src'), + 'vod_year': j('.bg').text(), + 'vod_remarks': j('p').text() + }) + return vlist + + diff --git a/js/py/plugin/html/绝对影视.py b/js/py/plugin/html/绝对影视.py new file mode 100644 index 0000000..820abf2 --- /dev/null +++ b/js/py/plugin/html/绝对影视.py @@ -0,0 +1,147 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import base64 +import re +import sys +from Crypto.Cipher import AES +from Crypto.Util.Padding import unpad +from pyquery import PyQuery as pq +sys.path.append('..') +from base.spider import Spider + + +class Spider(Spider): + + def init(self, extend=""): + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + host = 'https://www.jdys.art' + + headers = { + 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36', + 'sec-ch-ua-platform': '"macOS"', + 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="134", "Google Chrome";v="134"', + 'dnt': '1', + 'sec-ch-ua-mobile': '?0', + 'origin': host, + 'sec-fetch-site': 'cross-site', + 'sec-fetch-mode': 'cors', + 'sec-fetch-dest': 'empty', + 'referer': f'{host}/', + 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', + 'priority': 'u=1, i', + } + + def homeContent(self, filter): + data = self.getpq(self.fetch(self.host, headers=self.headers).text) + result = {} + classes = [] + for k in list(data('.navtop .navlist li').items())[:9]: + classes.append({ + 'type_name': k('a').text(), + 'type_id': k('a').attr('href'), + }) + result['class'] = classes + result['list'] = self.getlist(data('.mi_btcon .bt_img ul li')) + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, tid, pg, filter, extend): + data = self.getpq(self.fetch(f"{tid}{'' if pg == '1' else f'page/{pg}/'}", headers=self.headers).text) + result = {} + result['list'] = self.getlist(data('.mi_cont .bt_img ul li')) + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + data = self.getpq(self.fetch(ids[0], headers=self.headers).text) + data2 = data('.moviedteail_list li') + vod = { + 'vod_name': data('.dytext h1').text(), + 'type_name': data2.eq(0).text(), + 'vod_year': data2.eq(2).text(), + 'vod_area': data2.eq(1).text(), + 'vod_remarks': data2.eq(4).text(), + 'vod_actor': data2.eq(7).text(), + 'vod_director': data2.eq(5).text(), + 'vod_content': data('.yp_context').text().strip() + } + vdata = data('.paly_list_btn a') + play = [] + for i in vdata.items(): + a = i.text() + "$" + i.attr.href + play.append(a) + vod["vod_play_from"] = "在线播放" + vod["vod_play_url"] = "#".join(play) + result = {"list": [vod]} + return result + + def searchContent(self, key, quick, pg="1"): + data = self.getpq(self.fetch(f"{self.host}/page/{pg}/?s={key}", headers=self.headers).text) + return {'list': self.getlist(data('.mi_cont .bt_img ul li')), 'page': pg} + + def playerContent(self, flag, id, vipFlags): + data = self.getpq(self.fetch(id, headers=self.headers).text) + try: + sc = data('.videoplay script').eq(-1).text() + strd = re.findall(r'var\s+[^=]*=\s*"([^"]*)";', sc) + kdata = re.findall(r'parse\((.*?)\);', sc) + jm = self.aes(strd[0], kdata[0].replace('"', ''), kdata[1].replace('"', '')) + url = re.search(r'url: "(.*?)"', jm).group(1) + p = 0 + except: + p = 1 + url = id + result = {} + result["parse"] = p + result["url"] = url + result["header"] = self.headers + return result + + def localProxy(self, param): + pass + + def getpq(self, text): + try: + return pq(text) + except Exception as e: + print(f"{str(e)}") + return pq(text.encode('utf-8')) + + def getlist(self, data): + videos = [] + for i in data.items(): + videos.append({ + 'vod_id': i('a').attr('href'), + 'vod_name': i('a img').attr('alt'), + 'vod_pic': i('a img').attr('src'), + 'vod_remarks': i('.dycategory').text(), + 'vod_year': i('.dyplayinfo').text() or i('.rating').text(), + }) + return videos + + def aes(self, word, key, iv): + key = key.encode('utf-8') + iv = iv.encode('utf-8') + encrypted_data = base64.b64decode(word) + cipher = AES.new(key, AES.MODE_CBC, iv) + decrypted_data = cipher.decrypt(encrypted_data) + decrypted_data = unpad(decrypted_data, AES.block_size) + return decrypted_data.decode('utf-8') diff --git a/js/py/plugin/html/金牌.py b/js/py/plugin/html/金牌.py new file mode 100644 index 0000000..be3b628 --- /dev/null +++ b/js/py/plugin/html/金牌.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/js/py/plugin/html/随机小姐姐.py b/js/py/plugin/html/随机小姐姐.py new file mode 100644 index 0000000..e5c78be --- /dev/null +++ b/js/py/plugin/html/随机小姐姐.py @@ -0,0 +1,144 @@ +# coding=utf-8 +# !/usr/bin/python +import sys +import requests +import datetime +from bs4 import BeautifulSoup +import re +import base64 +from base.spider import Spider +import json + +sys.path.append('..') +xurl = "http://xjj2.716888.xyz" +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', + 'Cookie':'mk_encrypt_c21f969b5f03d33d43e04f8f136e7682=390e11f0d5ae13b2787e6a72db11527f' +} + + +class Spider(Spider): + global xurl + global headerx + + def getName(self): + return "首页" + + def init(self, extend): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def homeContent(self, filter): + pass + + def homeVideoContent(self): + id = ['4k/4k.php', 'djxjj/dj1.php', 'zj/jipinyz/jipinyz.php', 'zj/xuejie/xuejie.php', 'zj/kawayi/kawayi.php', + 'zj/nennen/nennen.php', 'zj/heji1/heji1.php', 'zj/sihuawd/sihuawd.php', 'zj/wanmeisc/wanmeisc.php', + 'zj/manyao/manyao.php', 'zj/sihuadd/sihuadd.php', 'zj/qingchun/qingchun.php', 'zj/cos/cos.php', + 'zj/jingpinbz/jingpinbz.php', 'zj/jipinll/jipinll.php', 'zj/nideym/nideym.php', 'zj/tianmei/tianmei.php', + 'zj/yusi/yusi.php', 'zj/shuaige/shuaige.php', 'zj/rewu/rewu.php', 'zj/jingpinsc/jingpinsc.php'] + name = ['随机', 'DJ姐姐', '极品钰足', '学姐系列', '卡哇伊', '嫩嫩系列', '美女舞蹈', '丝滑舞蹈', '完美身材', + '慢摇系列', '丝滑吊带', '清纯系列', 'COS系列', '精品变装', '极品罗丽', '你的裕梦', '甜妹系列', + '御丝系列', '帅哥哥', '热舞系列', '精品收藏'] + pic = ['https://img0.baidu.com/it/u=2236794495,926227820&fm=253&fmt=auto&app=138&f=JPEG?w=1091&h=500', + 'https://pic.rmb.bdstatic.com/mvideo/e17d86ce4489a02870ace9a25a804c3e', + 'https://img1.baidu.com/it/u=4087009209,613234683&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=364', + 'https://img1.baidu.com/it/u=2347706654,3055017263&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=750', + 'https://img2.baidu.com/it/u=3715511725,1094436549&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=1083', + 'https://img2.baidu.com/it/u=2560410906,3760952489&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=750', + 'https://img0.baidu.com/it/u=4119328645,2294770712&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=750', + 'https://img1.baidu.com/it/u=3167365498,4156845177&fm=253&fmt=auto&app=120&f=JPEG?w=355&h=631', + 'https://img2.baidu.com/it/u=2214691242,2295609938&fm=253&fmt=auto&app=120&f=JPEG?w=800&h=973', + 'https://img1.baidu.com/it/u=3930123826,1131807820&fm=253&fmt=auto&app=138&f=JPEG?w=889&h=500', + 'https://img2.baidu.com/it/u=3998619741,1128428746&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=594', + 'https://img2.baidu.com/it/u=1507871502,2316279678&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=768', + 'https://img0.baidu.com/it/u=2245878765,4037513957&fm=253&fmt=auto&app=138&f=JPEG?w=617&h=411', + 'https://img1.baidu.com/it/u=3623293272,829752126&fm=253&fmt=auto&app=138&f=JPEG?w=285&h=285', + 'https://img2.baidu.com/it/u=1922261112,3647796435&fm=253&fmt=auto&app=120&f=JPEG?w=500&h=542', + 'https://img1.baidu.com/it/u=3970043028,2042301564&fm=253&fmt=auto&app=120&f=JPEG?w=500&h=889', + 'https://img2.baidu.com/it/u=3229384329,3046902124&fm=253&fmt=auto&app=120&f=JPEG?w=800&h=800', + 'https://img1.baidu.com/it/u=3113661564,2558849413&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500', + 'https://img1.baidu.com/it/u=2361496550,3302335162&fm=253&fmt=auto&app=138&f=JPEG?w=333&h=500', + 'https://img1.baidu.com/it/u=270105183,1595166255&fm=253&fmt=auto&app=120&f=JPEG?w=800&h=500', + 'https://img1.baidu.com/it/u=4071105902,825241031&fm=253&fmt=auto&app=138&f=JPEG?w=235&h=340'] + list_length = len(id) + videos = [] + for i in range(list_length): + print(id[i]) + video = { + "vod_id": id[i], + "vod_name": name[i], + "vod_pic": pic[i], + "vod_remarks": '播放20个', + } + videos.append(video) + + result = {'list': videos} + + return result + + def categoryContent(self, cid, pg, filter, ext): + pass + + def detailContent(self, ids): + videos = [] + result = {} + did = ids[0] + for i in range(1, 21): + playurl = "" + for j in range(1, i + 1): + playurl += f"{j}$/fenlei/{did}#" + playurl = playurl[:-1] + + videos.append({ + "vod_id": '', + "vod_name": '', + "vod_pic": "", + "type_name": '', + "vod_year": "", + "vod_area": "", + "vod_remarks": "", + "vod_actor": "", + "vod_director": "", + "vod_content": "", + "vod_play_from": "GK推荐", + "vod_play_url": playurl + }) + + result['list'] = videos + return result + + def playerContent(self, flag, id, vipFlags): + result = {} + response = requests.get(url=xurl + id, headers=headerx, allow_redirects=False) + + location_header = response.headers.get('Location') + if 'http' in location_header: + purl = location_header + else: + purl = 'http:' + location_header + result["parse"] = 0 + result["playUrl"] = '' + result["url"] = purl + result["header"] = headerx + return result + + def searchContentPage(self, key, quick, page): + pass + + def searchContent(self, key, quick): + 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/js/py/plugin/html/骚火电影.py b/js/py/plugin/html/骚火电影.py new file mode 100644 index 0000000..788ae32 --- /dev/null +++ b/js/py/plugin/html/骚火电影.py @@ -0,0 +1,218 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import re +import sys +from urllib.parse import urlparse +import base64 +from pyquery import PyQuery as pq +sys.path.append('..') +from base.spider import Spider + + +class Spider(Spider): + + def init(self, extend=""): + self.host=self.gethost() + self.headers.update({'referer': f'{self.host}/'}) + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + 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-CN,zh;q=0.9,en;q=0.8', + 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="130", "Google Chrome";v="130"', + 'sec-ch-ua-platform': '"Android"', + 'user-agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36', + } + + def homeContent(self, filter): + data=self.getpq() + result = {} + classes = [] + filters = {"1": {"name": "类型","key": "tid","value": [{"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": 17},{"n": "惊悚","v": 18},{"n": "其它","v": 19}]},"2": {"name": "类型","key": "tid","value": [{"n": "大陆剧","v": 20},{"n": "港剧","v": 21},{"n": "韩剧","v": 22},{"n": "美剧","v": 23},{"n": "日剧","v": 24},{"n": "英剧","v": 25},{"n": "台剧","v": 26},{"n": "其它","v": 27}]}} + for k in data('.top_bar.clearfix a').items(): + j = k.attr('href') + if j and 'list' in j: + id = re.search(r'\d+', j).group(0) + classes.append({ + 'type_name': k.text(), + 'type_id': id + }) + result['class'] = classes + result['filters'] = filters + result['list'] = self.getlist(data('.grid_box ul li')) + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, tid, pg, filter, extend): + data=self.getpq(f"/list/{extend.get('tid',tid)}-{pg}.html") + result = {} + result['list'] = self.getlist(data('.grid_box ul li')) + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + data=self.getpq(ids[0]) + vod = { + 'vod_remarks': data('.grid_box.v_info_box p').text(), + 'vod_content': data('.p_txt.show_part').text().split('\n')[0], + } + n=list(data('.play_from ul li').items()) + p=list(data('ul.play_list li').items()) + ns,ps=[],[] + for i,j in enumerate(n): + ns.append(j.text()) + ps.append('#'.join([f"{k.text()}${k.attr('href')}" for k in list(p[i]('a').items())[::-1]])) + vod['vod_play_from']='$$$'.join(ns) + vod['vod_play_url']='$$$'.join(ps) + return {'list':[vod]} + + def searchContent(self, key, quick, pg="1"): + pass + + def playerContent(self, flag, id, vipFlags): + data=self.getpq(id) + try: + surl=data('section[style*="padding-top"] iframe').eq(0).attr('src') + sd=pq(self.fetch(surl,headers=self.headers).text)('body script').html() + jdata=self.extract_values(sd) + jdata['key']=self.hhh(jdata['key']) + parsed_url = urlparse(surl) + durl = parsed_url.scheme + "://" + parsed_url.netloc + headers = { + 'accept': 'application/json, text/javascript, */*; q=0.01', + 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', + 'cache-control': 'no-cache', + 'content-type': 'application/x-www-form-urlencoded; charset=UTF-8', + 'dnt': '1', + 'origin': durl, + 'pragma': 'no-cache', + 'priority': 'u=1, i', + 'referer': f'{surl}', + 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="130", "Google Chrome";v="130"', + 'sec-ch-ua-mobile': '?1', + 'sec-ch-ua-platform': '"Android"', + 'sec-fetch-dest': 'empty', + 'sec-fetch-mode': 'cors', + 'sec-fetch-site': 'same-origin', + 'sec-fetch-storage-access': 'active', + 'user-agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36', + 'x-requested-with': 'XMLHttpRequest', + } + jjb=self.post(f"{durl}/api.php",headers=headers,data=jdata).json() + url,p=jjb['url'],0 + except Exception as e: + self.log(f"失败: {e}") + url,p=f'{self.host}{id}',1 + phd={ + 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36', + 'sec-ch-ua-platform': '"Android"', + 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="130", "Google Chrome";v="130"', + 'sec-fetch-dest': 'video', + 'referer': f'{self.host}/', + 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', + } + return {'parse': p, 'url': url, 'header': phd} + + def localProxy(self, param): + pass + + def liveContent(self, url): + pass + + def gethost(self): + data=pq(self.fetch("http://shapp.us",headers=self.headers).text) + for i in data('.content-top ul li').items(): + h=i('a').attr('href') + if h: + data = self.fetch(h, headers=self.headers, timeout=5) + if data.status_code == 200: + return h + + def extract_values(self, text): + url_match = re.search(r'var url = "([^"]+)"', text) + url = url_match.group(1) if url_match else None + t_match = re.search(r'var t = "([^"]+)"', text) + t = t_match.group(1) if t_match else None + key_match = re.search(r'var key = hhh\("([^"]+)"\)', text) + key_param = key_match.group(1) if key_match else None + act_match = re.search(r'var act = "([^"]+)"', text) + act = act_match.group(1) if act_match else None + play_match = re.search(r'var play = "([^"]+)"', text) + play = play_match.group(1) if play_match else None + return { + "url": url, + "t": t, + "key": key_param, + "act": act, + "play": play + } + + def getlist(self,data): + videos = [] + for i in data.items(): + videos.append({ + 'vod_id': i('a').attr('href'), + 'vod_name': i('a').attr('title'), + 'vod_pic': i('a img').attr('data-original'), + 'vod_remarks': i('.v_note').text() + }) + return videos + + def getpq(self, path=''): + data=self.fetch(f"{self.host}{path}",headers=self.headers).text + try: + return pq(data) + except Exception as e: + print(f"{str(e)}") + return pq(data.encode('utf-8')) + + def hhh(self, t): + ee = { + "0Oo0o0O0": "a", "1O0bO001": "b", "2OoCcO2": "c", "3O0dO0O3": "d", + "4OoEeO4": "e", "5O0fO0O5": "f", "6OoGgO6": "g", "7O0hO0O7": "h", + "8OoIiO8": "i", "9O0jO0O9": "j", "0OoKkO0": "k", "1O0lO0O1": "l", + "2OoMmO2": "m", "3O0nO0O3": "n", "4OoOoO4": "o", "5O0pO0O5": "p", + "6OoQqO6": "q", "7O0rO0O7": "r", "8OoSsO8": "s", "9O0tO0O9": "t", + "0OoUuO0": "u", "1O0vO0O1": "v", "2OoWwO2": "w", "3O0xO0O3": "x", + "4OoYyO4": "y", "5O0zO0O5": "z", "0OoAAO0": "A", "1O0BBO1": "B", + "2OoCCO2": "C", "3O0DDO3": "D", "4OoEEO4": "E", "5O0FFO5": "F", + "6OoGGO6": "G", "7O0HHO7": "H", "8OoIIO8": "I", "9O0JJO9": "J", + "0OoKKO0": "K", "1O0LLO1": "L", "2OoMMO2": "M", "3O0NNO3": "N", + "4OoOOO4": "O", "5O0PPO5": "P", "6OoQQO6": "Q", "7O0RRO7": "R", + "8OoSSO8": "S", "9O0TTO9": "T", "0OoUO0": "U", "1O0VVO1": "V", + "2OoWWO2": "W", "3O0XXO3": "X", "4OoYYO4": "Y", "5O0ZZO5": "Z" + } + n = "" + o = base64.b64decode(t).decode('utf-8', errors='replace') + i = 0 + while i < len(o): + l = o[i] + found = False + for key, value in ee.items(): + if o[i:i + len(key)] == key: + l = value + i += len(key) - 1 + found = True + break + if not found: + pass + n += l + i += 1 + return n diff --git a/js/py/plugin/official/优.py b/js/py/plugin/official/优.py new file mode 100644 index 0000000..399d0db --- /dev/null +++ b/js/py/plugin/official/优.py @@ -0,0 +1,301 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import json +import sys +import time +from concurrent.futures import ThreadPoolExecutor, as_completed +from urllib.parse import quote +from Crypto.Hash import MD5 +import requests +sys.path.append('..') +from base.spider import Spider + + +class Spider(Spider): + + def init(self, extend=""): + self.session = requests.Session() + self.session.headers.update(self.headers) + self.session.cookies.update(self.cookie) + self.get_ctoken() + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + host='https://www.youku.com' + + shost='https://search.youku.com' + + h5host='https://acs.youku.com' + + ihost='https://v.youku.com' + + headers = { + 'User-Agent': 'Mozilla/5.0 (; Windows 10.0.26100.3194_64 ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Electron/14.2.0 Safari/537.36 Node/14.17.0 YoukuDesktop/9.2.60 UOSYouku (2.0.1)-Electron(UTDID ZYmGMAAAACkDAMU8hbiMmYdd;CHANNEL official;ZREAL 0;BTYPE TM2013;BRAND TIMI;BUILDVER 9.2.60.1001)', + 'Referer': f'{host}/' + } + + cookie={ + "__ysuid": "17416134165380iB", + "__aysid": "1741613416541WbD", + "xlly_s": "1", + "isI18n": "false", + "cna": "bNdVIKmmsHgCAXW9W6yrQ1/s", + "__ayft": "1741672162330", + "__arpvid": "1741672162331FBKgrn-1741672162342", + "__ayscnt": "1", + "__aypstp": "1", + "__ayspstp": "3", + "tfstk": "gZbiib4JpG-6DqW-B98_2rwPuFrd1fTXQt3vHEp4YpJIBA3OgrWcwOi90RTOo9XVQ5tAM5NcK_CP6Ep97K2ce1XDc59v3KXAgGFLyzC11ET2n8U8yoyib67M3xL25e8gS8pbyzC1_ET4e8URWTsSnHv2uh8VTeJBgEuN3d-ELQAWuKWV36PHGpJ2uEWVTxvicLX1ewyUXYSekxMf-CxMEqpnoqVvshvP_pABOwvXjL5wKqeulm52np_zpkfCDGW9Ot4uKFIRwZtP7vP9_gfAr3KEpDWXSIfWRay-DHIc_Z-hAzkD1i5Ooi5LZ0O5YO_1mUc476YMI3R6xzucUnRlNe_zemKdm172xMwr2L7CTgIkbvndhFAVh3_YFV9Ng__52U4SQKIdZZjc4diE4EUxlFrfKmiXbBOHeP72v7sAahuTtWm78hRB1yV3tmg9bBOEhWVnq5KwOBL5." + } + + def homeContent(self, filter): + result = {} + categories = ["电视剧", "电影", "综艺", "动漫", "少儿", "纪录片", "文化", "亲子", "教育", "搞笑", "生活", + "体育", "音乐", "游戏"] + classes = [{'type_name': category, 'type_id': category} for category in categories] + filters = {} + self.typeid = {} + with ThreadPoolExecutor(max_workers=len(categories)) as executor: + tasks = { + executor.submit(self.cf, {'type': category}, True): category + for category in categories + } + + for future in as_completed(tasks): + try: + category = tasks[future] + session, ft = future.result() + filters[category] = ft + self.typeid[category] = session + except Exception as e: + print(f"处理分类 {tasks[future]} 时出错: {str(e)}") + + result['class'] = classes + result['filters'] = filters + return result + + def homeVideoContent(self): + try: + vlist = [] + params={"ms_codes":"2019061000","params":"{\"debug\":0,\"gray\":0,\"pageNo\":1,\"utdid\":\"ZYmGMAAAACkDAMU8hbiMmYdd\",\"userId\":\"\",\"bizKey\":\"YOUKU_WEB\",\"appPackageKey\":\"com.youku.YouKu\",\"showNodeList\":0,\"reqSubNode\":0,\"nodeKey\":\"WEBHOME\",\"bizContext\":\"{\\\"spmA\\\":\\\"a2hja\\\"}\"}","system_info":"{\"device\":\"pcweb\",\"os\":\"pcweb\",\"ver\":\"1.0.0.0\",\"userAgent\":\"Mozilla/5.0 (; Windows 10.0.26100.3194_64 ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Electron/14.2.0 Safari/537.36 Node/14.17.0 YoukuDesktop/9.2.60 UOSYouku (2.0.1)-Electron(UTDID ZYmGMAAAACkDAMU8hbiMmYdd;CHANNEL official;ZREAL 0;BTYPE TM2013;BRAND TIMI;BUILDVER 9.2.60.1001)\",\"guid\":\"1590141704165YXe\",\"appPackageKey\":\"com.youku.pcweb\",\"young\":0,\"brand\":\"\",\"network\":\"\",\"ouid\":\"\",\"idfa\":\"\",\"scale\":\"\",\"operator\":\"\",\"resolution\":\"\",\"pid\":\"\",\"childGender\":0,\"zx\":0}"} + data=self.getdata(f'{self.h5host}/h5/mtop.youku.columbus.home.query/1.0/',params) + okey=list(data['data'].keys())[0] + for i in data['data'][okey]['data']['nodes'][0]['nodes'][-1]['nodes'][0]['nodes']: + if i.get('nodes') and i['nodes'][0].get('data'): + i=i['nodes'][0]['data'] + if i.get('assignId'): + vlist.append({ + 'vod_id': i['assignId'], + 'vod_name': i.get('title'), + 'vod_pic': i.get('vImg') or i.get('img'), + 'vod_year': i.get('mark',{}).get('data',{}).get('text'), + 'vod_remarks': i.get('summary') + }) + return {'list': vlist} + except Exception as e: + print(f"处理主页视频数据时出错: {str(e)}") + return {'list': []} + + def categoryContent(self, tid, pg, filter, extend): + result = {} + vlist = [] + result['page'] = pg + result['limit'] = 90 + result['total'] = 999999 + pagecount = 9999 + params = {'type': tid} + id = self.typeid[tid] + params.update(extend) + if pg == '1': + id=self.cf(params) + data=self.session.get(f'{self.host}/category/data?session={id}¶ms={quote(json.dumps(params))}&pageNo={pg}').json() + try: + data=data['data']['filterData'] + for i in data['listData']: + if i.get('videoLink') and 's=' in i['videoLink']: + vlist.append({ + 'vod_id': i.get('videoLink').split('s=')[-1], + 'vod_name': i.get('title'), + 'vod_pic': i.get('img'), + 'vod_year': i.get('rightTagText'), + 'vod_remarks': i.get('summary') + }) + self.typeid[tid]=quote(json.dumps(data['session'])) + except: + pagecount=pg + result['list'] = vlist + result['pagecount'] = pagecount + return result + + def detailContent(self, ids): + try: + data=self.session.get(f'{self.ihost}/v_getvideo_info/?showId={ids[0]}').json() + v=data['data'] + vod = { + 'type_name': v.get('showVideotype'), + 'vod_year': v.get('lastUpdate'), + 'vod_remarks': v.get('rc_title'), + 'vod_actor': v.get('_personNameStr'), + 'vod_content': v.get('showdesc'), + 'vod_play_from': '优酷', + 'vod_play_url': '' + } + params={"biz":"new_detail_web2","videoId":v.get('vid'),"scene":"web_page","componentVersion":"3","ip":data.get('ip'),"debug":0,"utdid":"ZYmGMAAAACkDAMU8hbiMmYdd","userId":0,"platform":"pc","nextSession":"","gray":0,"source":"pcNoPrev","showId":ids[0]} + sdata,index=self.getinfo(params) + pdata=sdata['nodes'] + if index > len(pdata): + batch_size = len(pdata) + total_batches = ((index + batch_size - 1) // batch_size) - 1 + ssj = json.loads(sdata['data']['session']) + with ThreadPoolExecutor(max_workers=total_batches) as executor: + futures = [] + for batch in range(total_batches): + start = batch_size + 1 + (batch * batch_size) + end = start + batch_size - 1 + next_session = ssj.copy() + next_session.update({ + "itemStartStage": start, + "itemEndStage": min(end, index) + }) + current_params = params.copy() + current_params['nextSession'] = json.dumps(next_session) + futures.append((start, executor.submit(self.getvinfo, current_params))) + futures.sort(key=lambda x: x[0]) + + for _, future in futures: + try: + result = future.result() + pdata.extend(result['nodes']) + except Exception as e: + print(f"Error fetching data: {str(e)}") + vod['vod_play_url'] = '#'.join([f"{i['data'].get('title')}${i['data']['action'].get('value')}" for i in pdata]) + return {'list': [vod]} + except Exception as e: + print(e) + return {'list': [{'vod_play_from': '哎呀翻车啦', 'vod_play_url': f'呜呜呜${self.host}'}]} + + def searchContent(self, key, quick, pg="1"): + data=self.session.get(f'{self.shost}/api/search?pg={pg}&keyword={key}').json() + vlist = [] + for i in data['pageComponentList']: + if i.get('commonData') and (i['commonData'].get('showId') or i['commonData'].get('realShowId')): + i=i['commonData'] + vlist.append({ + 'vod_id': i.get('showId') or i.get('realShowId'), + 'vod_name': i['titleDTO'].get('displayName'), + 'vod_pic': i['posterDTO'].get('vThumbUrl'), + 'vod_year': i.get('feature'), + 'vod_remarks': i.get('updateNotice') + }) + return {'list': vlist, 'page': pg} + + def playerContent(self, flag, id, vipFlags): + return {'jx':1,'parse': 1, 'url': f"{self.ihost}/video?vid={id}", 'header': ''} + + def localProxy(self, param): + pass + + def cf(self,params,b=False): + response = self.session.get(f'{self.host}/category/data?params={quote(json.dumps(params))}&optionRefresh=1&pageNo=1').json() + data=response['data']['filterData'] + session=quote(json.dumps(data['session'])) + if b: + return session,self.get_filter_data(data['filter']['filterData'][1:]) + return session + + def process_key(self, key): + if '_' not in key: + return key + parts = key.split('_') + result = parts[0] + for part in parts[1:]: + if part: + result += part[0].upper() + part[1:] + return result + + def get_filter_data(self, data): + result = [] + try: + for item in data: + if not item.get('subFilter'): + continue + first_sub = item['subFilter'][0] + if not first_sub.get('filterType'): + continue + filter_item = { + 'key': self.process_key(first_sub['filterType']), + 'name': first_sub['title'], + 'value': [] + } + for sub in item['subFilter']: + if 'value' in sub: + filter_item['value'].append({ + 'n': sub['title'], + 'v': sub['value'] + }) + if filter_item['value']: + result.append(filter_item) + + except Exception as e: + print(f"处理筛选数据时出错: {str(e)}") + + return result + + def get_ctoken(self): + data=self.session.get(f'{self.h5host}/h5/mtop.ykrec.recommendservice.recommend/1.0/?jsv=2.6.1&appKey=24679788') + + def md5(self,t,text): + h = MD5.new() + token=self.session.cookies.get('_m_h5_tk').split('_')[0] + data=f"{token}&{t}&24679788&{text}" + h.update(data.encode('utf-8')) + return h.hexdigest() + + def getdata(self, url, params, recursion_count=0, max_recursion=3): + data = json.dumps(params) + t = int(time.time() * 1000) + jsdata = { + 'appKey': '24679788', + 't': t, + 'sign': self.md5(t, data), + 'data': data + } + response = self.session.get(url, params=jsdata) + if '令牌过期' in response.text: + if recursion_count >= max_recursion: + raise Exception("达到最大递归次数,无法继续请求") + self.get_ctoken() + return self.getdata(url, params, recursion_count + 1, max_recursion) + else: + return response.json() + + def getvinfo(self,params): + body = { + "ms_codes": "2019030100", + "params": json.dumps(params), + "system_info": "{\"os\":\"iku\",\"device\":\"iku\",\"ver\":\"9.2.9\",\"appPackageKey\":\"com.youku.iku\",\"appPackageId\":\"pcweb\"}" + } + data = self.getdata(f'{self.h5host}/h5/mtop.youku.columbus.gateway.new.execute/1.0/', body) + okey = list(data['data'].keys())[0] + i = data['data'][okey]['data'] + return i + + def getinfo(self,params): + i = self.getvinfo(params) + jdata=i['nodes'][0]['nodes'][3] + info=i['data']['extra']['episodeTotal'] + if i['data']['extra']['showCategory'] in ['电影','游戏']: + jdata = i['nodes'][0]['nodes'][4] + return jdata,info + diff --git a/js/py/plugin/official/爱.py b/js/py/plugin/official/爱.py new file mode 100644 index 0000000..7574897 --- /dev/null +++ b/js/py/plugin/official/爱.py @@ -0,0 +1,249 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import json +import random +import sys +from base64 import b64encode, b64decode +from concurrent.futures import ThreadPoolExecutor, as_completed +from urllib.parse import quote +sys.path.append('..') +from base.spider import Spider + +class Spider(Spider): + + def init(self, extend=""): + self.did = 'f8da348e186e6ee574d647918f5a7114' + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + rhost = 'https://www.iqiyi.com' + + hhost='https://mesh.if.iqiyi.com' + + dhost='https://miniapp.iqiyi.com' + + headers = { + 'Origin': rhost, + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36', + 'Referer': f'{rhost}/', + } + + def homeContent(self, filter): + result = {} + cateManual = { + "全部": "1009", + "电影": "1", + "剧集": "2", + "综艺": "6", + "动漫": "4", + "儿童": "15", + "微剧": "35", + "纪录片": "3" + } + classes = [] + filters = {} + for k in cateManual: + classes.append({ + 'type_name': k, + 'type_id': cateManual[k] + }) + 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 + return result + + def homeVideoContent(self): + data=self.fetch(f'{self.hhost}/portal/lw/v5/channel/recommend?v=13.014.21150', headers=self.headers).json() + vlist = [] + for i in data['items'][1:]: + for j in i['video'][0]['data']: + id = j.get('firstId') + pic=j.get('prevue',{}).get('image_url') or j.get('album_image_url_hover') + if id and pic: + pu=j.get('prevue',{}).get('page_url') or j.get('page_url').split('?')[0] + id = f'{id}@{self.e64(pu)}' + vlist.append({ + 'vod_id': id, + 'vod_name': j.get('display_name'), + 'vod_pic': pic, + 'vod_year': j.get('sns_score'), + 'vod_remarks': j.get('dq_updatestatus') or j.get('rank_prefix') + }) + return {'list':vlist} + + def categoryContent(self, tid, pg, filter, extend): + if pg == "1": + self.sid = '' + new_data = {'mode':'24'} + for key, value in extend.items(): + if value: + key_value_pairs = self.d64(value).split(',') + for pair in key_value_pairs: + k, v = pair.split('=') + if k in new_data: + new_data[k] += "," + v + else: + new_data[k] = v + path=f"/portal/lw/videolib/data?uid=&passport_id=&ret_num=60&version=13.034.21571&device_id={self.did}&channel_id={tid}&page_id={pg}&session={self.sid}&os=&conduit_id=&vip=0&auth=&recent_selected_tag=&ad=%5B%7B%22lm%22%3A%225%22%2C%22ai%22%3A%225%22%2C%22fp%22%3A%226%22%2C%22sei%22%3A%22S78ff51b694677e17af4b19368dadb7bd%22%2C%22position%22%3A%22library%22%7D%5D&adExt=%7B%22r%22%3A%221.2.1-ares6-pure%22%7D&dfp=a00b3c577e541c41149be7cde9320500b0a11307e61a8445448f7f4a9e895ced0f&filter={quote(json.dumps(new_data))}" + data=self.fetch(f'{self.hhost}{path}', headers=self.headers).json() + self.sid = data['session'] + videos = [] + for i in data['data']: + id = i.get('firstId') or i.get('tv_id') + if not id: + id=i.get('play_url').split(';')[0].split('=')[-1] + if id and not i.get('h'): + id=f'{id}@{self.e64(i.get("page_url"))}' + videos.append({ + 'vod_id': id, + 'vod_name': i.get('display_name'), + 'vod_pic': i.get('album_image_url_hover'), + 'vod_year': i.get('sns_score'), + 'vod_remarks': i.get('dq_updatestatus') or i.get('pay_mark') + }) + result = {} + result['list'] = videos + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + ids = ids[0].split('@') + ids[-1] = self.d64(ids[-1]) + data = self.fetch(f'{self.dhost}/h5/mina/baidu/play/body/v1/{ids[0]}/', headers=self.headers).json() + v=data['data']['playInfo'] + vod = { + 'vod_name': v.get('albumName'), + 'type_name': v.get('tags'), + 'vod_year': v.get('albumYear'), + 'vod_remarks': v.get('updateStrategy'), + 'vod_actor': v.get('mainActors'), + 'vod_director': v.get('directors'), + 'vod_content': v.get('albumDesc'), + 'vod_play_from': '爱奇艺', + 'vod_play_url': '' + } + if data.get('data') and data['data'].get('videoList') and data['data']['videoList'].get('videos'): + purl=[f'{i["shortTitle"]}${i["pageUrl"]}' for i in data['data']['videoList']['videos']] + pg=data['data']['videoList'].get('totalPages') + if pg and pg > 1: + id = v['albumId'] + pages = list(range(2, pg + 1)) + page_results = {} + with ThreadPoolExecutor(max_workers=10) as executor: + future_to_page = { + executor.submit(self.fetch_page_data, page, id): page + for page in pages + } + for future in as_completed(future_to_page): + page = future_to_page[future] + try: + result = future.result() + page_results[page] = result + except Exception as e: + print(f"Error fetching page {page}: {e}") + for page in sorted(page_results.keys()): + purl.extend(page_results[page]) + vod['vod_play_url'] = '#'.join(purl) + else: + vdata=self.fetch(f'{self.dhost}/h5/mina/baidu/play/head/v1/{ids[0]}/', headers=self.headers).json() + v=vdata['data']['playInfo'] + vod = { + 'vod_name': v.get('shortTitle'), + 'type_name': v.get('channelName'), + 'vod_year': v.get('year'), + 'vod_remarks': v.get('focus'), + 'vod_actor': v.get('mainActors'), + 'vod_director': v.get('directors'), + 'vod_content': v.get('desc'), + 'vod_play_from': '爱奇艺', + 'vod_play_url': f'{v.get("shortTitle")}${ids[-1]}' + } + return {'list':[vod]} + + def searchContent(self, key, quick, pg="1"): + data=self.fetch(f'{self.hhost}/portal/lw/search/homePageV3?key={key}¤t_page={pg}&mode=1&source=input&suggest=&version=13.014.21150&pageNum={pg}&pageSize=25&pu=&u={self.did}&scale=150&token=&userVip=0&conduit=&vipType=-1&os=&osShortName=win10&dataType=&appMode=', headers=self.headers).json() + videos = [] + vdata=data['data']['templates'] + for i in data['data']['templates']: + if i.get('intentAlbumInfos'): + vdata=[{'albumInfo': c} for c in i['intentAlbumInfos']]+vdata + + for i in vdata: + if i.get('albumInfo') and (i['albumInfo'].get('playQipuId','') or i['albumInfo'].get('qipuId')) and i['albumInfo'].get('pageUrl'): + b=i['albumInfo'] + id=f"{(b.get('playQipuId','') or b.get('qipuId'))}@{self.e64(b.get('pageUrl'))}" + videos.append({ + 'vod_id': id, + 'vod_name': b.get('title'), + 'vod_pic': b.get('img'), + 'vod_year': (b.get('year',{}) or {}).get('value'), + 'vod_remarks': b.get('subscriptContent') or b.get('channel') or b.get('vipTips') + }) + return {'list':videos,'page':pg} + + def playerContent(self, flag, id, vipFlags): + id=id.replace('http://m.','https://www.') + return {'jx':1,'parse': 1, 'url': id, 'header': ''} + + def localProxy(self, param): + pass + + def fetch_page_data(self, page, id): + try: + url = f'{self.dhost}/h5/mina/avlist/{page}/{id}/' + data = self.fetch(url, headers=self.headers).json() + return [f'{i["shortTitle"]}${i["pageUrl"]}' for i in data['data']['videoList']['videos']] + except: + return [] + + def getf(self,body): + data=self.fetch(f'{self.hhost}/portal/lw/videolib/tag?channel_id={body["type_id"]}&tagAdd=&selected_tag_name=&version=13.014.21150&device={self.did}&uid=', headers=self.headers).json() + ft = [] + # for i in data[:-1]: + for i in data: + try: + value_array = [{"n": value['text'], "v": self.e64(value['tag_param'])} for value in i['tags'] if + value.get('tag_param')] + ft.append({"key": i['group'], "name": i['group'], "value": value_array}) + except: + print(i) + return (body['type_id'], ft) + + 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: str): + 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 random_str(self,length=16): + hex_chars = '0123456789abcdef' + return ''.join(random.choice(hex_chars) for _ in range(length)) diff --git a/js/py/plugin/official/腾.py b/js/py/plugin/official/腾.py new file mode 100644 index 0000000..dfa4404 --- /dev/null +++ b/js/py/plugin/official/腾.py @@ -0,0 +1,320 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import json +import sys +import uuid +import copy +sys.path.append('..') +from base.spider import Spider +from concurrent.futures import ThreadPoolExecutor, as_completed + + +class Spider(Spider): + + def init(self, extend=""): + self.dbody = { + "page_params": { + "channel_id": "", + "filter_params": "sort=75", + "page_type": "channel_operation", + "page_id": "channel_list_second_page" + } + } + self.body = self.dbody + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + host = 'https://v.qq.com' + + apihost = 'https://pbaccess.video.qq.com' + + headers = { + 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.5410.0 Safari/537.36', + 'origin': host, + 'referer': f'{host}/' + } + + def homeContent(self, filter): + cdata = { + "电视剧": "100113", + "电影": "100173", + "综艺": "100109", + "纪录片": "100105", + "动漫": "100119", + "少儿": "100150", + "短剧": "110755" + } + result = {} + classes = [] + filters = {} + for k in cdata: + classes.append({ + 'type_name': k, + 'type_id': cdata[k] + }) + with ThreadPoolExecutor(max_workers=len(classes)) as executor: + futures = [executor.submit(self.get_filter_data, item['type_id']) for item in classes] + for future in futures: + cid, data = future.result() + if not data.get('data', {}).get('module_list_datas'): + continue + filter_dict = {} + try: + items = data['data']['module_list_datas'][-1]['module_datas'][-1]['item_data_lists']['item_datas'] + for item in items: + if not item.get('item_params', {}).get('index_item_key'): + continue + params = item['item_params'] + filter_key = params['index_item_key'] + if filter_key not in filter_dict: + filter_dict[filter_key] = { + 'key': filter_key, + 'name': params['index_name'], + 'value': [] + } + filter_dict[filter_key]['value'].append({ + 'n': params['option_name'], + 'v': params['option_value'] + }) + except (IndexError, KeyError): + continue + filters[cid] = list(filter_dict.values()) + result['class'] = classes + result['filters'] = filters + return result + + def homeVideoContent(self): + json_data = {'page_context':None,'page_params':{'page_id':'100101','page_type':'channel','skip_privacy_types':'0','support_click_scan':'1','new_mark_label_enabled':'1','ams_cookies':'',},'page_bypass_params':{'params':{'caller_id':'','data_mode':'default','page_id':'','page_type':'channel','platform_id':'2','user_mode':'default',},'scene':'channel','abtest_bypass_id':'',}} + data = self.post(f'{self.apihost}/trpc.vector_layout.page_view.PageService/getPage',headers=self.headers, json=json_data).json() + vlist = [] + for it in data['data']['CardList'][0]['children_list']['list']['cards']: + if it.get('params'): + p = it['params'] + tag = json.loads(p.get('uni_imgtag', '{}') or p.get('imgtag', '{}') or '{}') + id = it.get('id') or p.get('cid') + name = p.get('mz_title') or p.get('title') + if name and 'http' not in id: + vlist.append({ + 'vod_id': id, + 'vod_name': name, + 'vod_pic': p.get('image_url'), + 'vod_year': tag.get('tag_2', {}).get('text'), + 'vod_remarks': tag.get('tag_4', {}).get('text') + }) + return {'list': vlist} + + def categoryContent(self, tid, pg, filter, extend): + result = {} + params = { + "sort": extend.get('sort', '75'), + "attr": extend.get('attr', '-1'), + "itype": extend.get('itype', '-1'), + "ipay": extend.get('ipay', '-1'), + "iarea": extend.get('iarea', '-1'), + "iyear": extend.get('iyear', '-1'), + "theater": extend.get('theater', '-1'), + "award": extend.get('award', '-1'), + "recommend": extend.get('recommend', '-1') + } + if pg == '1': + self.body = self.dbody.copy() + self.body['page_params']['channel_id'] = tid + self.body['page_params']['filter_params'] = self.josn_to_params(params) + data = self.post( + f'{self.apihost}/trpc.universal_backend_service.page_server_rpc.PageServer/GetPageData?video_appid=1000005&vplatform=2&vversion_name=8.9.10&new_mark_label_enabled=1', + json=self.body, headers=self.headers).json() + ndata = data['data'] + if ndata['has_next_page']: + result['pagecount'] = 9999 + self.body['page_context'] = ndata['next_page_context'] + else: + result['pagecount'] = int(pg) + vlist = [] + for its in ndata['module_list_datas'][-1]['module_datas'][-1]['item_data_lists']['item_datas']: + id = its.get('item_params', {}).get('cid') + if id: + p = its['item_params'] + tag = json.loads(p.get('uni_imgtag', '{}') or p.get('imgtag', '{}') or '{}') + name = p.get('mz_title') or p.get('title') + pic = p.get('new_pic_hz') or p.get('new_pic_vt') + vlist.append({ + 'vod_id': id, + 'vod_name': name, + 'vod_pic': pic, + 'vod_year': tag.get('tag_2', {}).get('text'), + 'vod_remarks': tag.get('tag_4', {}).get('text') + }) + result['list'] = vlist + result['page'] = pg + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + vbody = {"page_params":{"req_from":"web","cid":ids[0],"vid":"","lid":"","page_type":"detail_operation","page_id":"detail_page_introduction"},"has_cache":1} + body = {"page_params":{"req_from":"web_vsite","page_id":"vsite_episode_list","page_type":"detail_operation","id_type":"1","page_size":"","cid":ids[0],"vid":"","lid":"","page_num":"","page_context":"","detail_page_type":"1"},"has_cache":1} + with ThreadPoolExecutor(max_workers=2) as executor: + future_detail = executor.submit(self.get_vdata, vbody) + future_episodes = executor.submit(self.get_vdata, body) + vdata = future_detail.result() + data = future_episodes.result() + + pdata = self.process_tabs(data, body, ids) + if not pdata: + return self.handle_exception(None, "No pdata available") + + try: + star_list = vdata['data']['module_list_datas'][0]['module_datas'][0]['item_data_lists']['item_datas'][ + 0].get('sub_items', {}).get('star_list', {}).get('item_datas', []) + actors = [star['item_params']['name'] for star in star_list] + names = ['腾讯视频', '预告片'] + plist, ylist = self.process_pdata(pdata, ids) + if not plist: + del names[0] + if not ylist: + del names[1] + vod = self.build_vod(vdata, actors, plist, ylist, names) + return {'list': [vod]} + except Exception as e: + return self.handle_exception(e, "Error processing detail") + + def searchContent(self, key, quick, pg="1"): + params = { + "query": key, + "appID": "3172", + "appKey": "lGhFIPeD3HsO9xEp", + "pageNum": int(pg) - 1, + "pageSize": "10" + } + data = self.fetch(f"{self.apihost}/trpc.videosearch.smartboxServer.HttpRountRecall/Smartbox", params=params,headers=self.headers).json() + vlist = [] + for k in data['data']['smartboxItemList']: + if k.get('basicDoc') and k['basicDoc'].get('id'): + img_tag = k.get('videoInfo', {}).get('imgTag') + if img_tag is not None and isinstance(img_tag, str): + try: + tag = json.loads(img_tag) + except json.JSONDecodeError as e: + tag = {} + else: + tag = {} + vlist.append({ + 'vod_id': k['basicDoc']['id'], + 'vod_name': self.removeHtmlTags(k['basicDoc']['title']), + 'vod_pic': k['videoInfo']['imgUrl'], + 'vod_year': k['videoInfo'].get('typeName') + ' ' + tag.get('tag_2', {}).get('text', ''), + 'vod_remarks': tag.get('tag_4', {}).get('text', '') + }) + return {'list': vlist, 'page': pg} + + def playerContent(self, flag, id, vipFlags): + ids = id.split('@') + url = f"{self.host}/x/cover/{ids[0]}/{ids[1]}.html" + return {'jx':1,'parse': 1, 'url': url, 'header': ''} + + def localProxy(self, param): + pass + + def get_filter_data(self, cid): + hbody = self.dbody.copy() + hbody['page_params']['channel_id'] = cid + data = self.post( + f'{self.apihost}/trpc.universal_backend_service.page_server_rpc.PageServer/GetPageData?video_appid=1000005&vplatform=2&vversion_name=8.9.10&new_mark_label_enabled=1', + json=hbody, headers=self.headers).json() + return cid, data + + def get_vdata(self, body): + try: + vdata = self.post( + f'{self.apihost}/trpc.universal_backend_service.page_server_rpc.PageServer/GetPageData?video_appid=3000010&vplatform=2&vversion_name=8.2.96', + json=body, headers=self.headers + ).json() + return vdata + except Exception as e: + print(f"Error in get_vdata: {str(e)}") + return {'data': {'module_list_datas': []}} + + def process_pdata(self, pdata, ids): + plist = [] + ylist = [] + for k in pdata: + if k.get('item_id'): + pid = f"{k['item_params']['union_title']}${ids[0]}@{k['item_id']}" + if '预告' in k['item_params']['union_title']: + ylist.append(pid) + else: + plist.append(pid) + return plist, ylist + + def build_vod(self, vdata, actors, plist, ylist, names): + d = vdata['data']['module_list_datas'][0]['module_datas'][0]['item_data_lists']['item_datas'][0]['item_params'] + urls = [] + if plist: + urls.append('#'.join(plist)) + if ylist: + urls.append('#'.join(ylist)) + vod = { + 'type_name': d.get('sub_genre', ''), + 'vod_name': d.get('title', ''), + 'vod_year': d.get('year', ''), + 'vod_area': d.get('area_name', ''), + 'vod_remarks': d.get('holly_online_time', '') or d.get('hotval', ''), + 'vod_actor': ','.join(actors), + 'vod_content': d.get('cover_description', ''), + 'vod_play_from': '$$$'.join(names), + 'vod_play_url': '$$$'.join(urls) + } + return vod + + def handle_exception(self, e, message): + print(f"{message}: {str(e)}") + return {'list': [{'vod_play_from': '哎呀翻车啦', 'vod_play_url': '翻车啦#555'}]} + + def process_tabs(self, data, body, ids): + try: + pdata = data['data']['module_list_datas'][-1]['module_datas'][-1]['item_data_lists']['item_datas'] + tabs = data['data']['module_list_datas'][-1]['module_datas'][-1]['module_params'].get('tabs') + if tabs and len(json.loads(tabs)): + tabs = json.loads(tabs) + remaining_tabs = tabs[1:] + task_queue = [] + for tab in remaining_tabs: + nbody = copy.deepcopy(body) + nbody['page_params']['page_context'] = tab['page_context'] + task_queue.append(nbody) + with ThreadPoolExecutor(max_workers=10) as executor: + future_map = {executor.submit(self.get_vdata, task): idx for idx, task in enumerate(task_queue)} + results = [None] * len(task_queue) + for future in as_completed(future_map.keys()): + idx = future_map[future] + results[idx] = future.result() + for result in results: + if result: + page_data = result['data']['module_list_datas'][-1]['module_datas'][-1]['item_data_lists'][ + 'item_datas'] + pdata.extend(page_data) + return pdata + except Exception as e: + print(f"Error processing episodes: {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) + + diff --git a/js/py/plugin/official/芒.py b/js/py/plugin/official/芒.py new file mode 100644 index 0000000..6ba8e34 --- /dev/null +++ b/js/py/plugin/official/芒.py @@ -0,0 +1,205 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import sys +import time +from concurrent.futures import ThreadPoolExecutor, as_completed +sys.path.append('..') +from base.spider import Spider + +class Spider(Spider): + + def init(self, extend=""): + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + rhost='https://www.mgtv.com' + + host='https://pianku.api.mgtv.com' + + vhost='https://pcweb.api.mgtv.com' + + mhost='https://dc.bz.mgtv.com' + + shost='https://mobileso.bz.mgtv.com' + + 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', + 'origin': rhost, + 'referer': f'{rhost}/' + } + + def homeContent(self, filter): + result = {} + cateManual = { + "电影": "3", + "电视剧": "2", + "综艺": "1", + "动画": "50", + "少儿": "10", + "纪录片": "51", + "教育": "115" + } + classes = [] + filters = {} + for k in cateManual: + classes.append({ + 'type_name': k, + 'type_id': cateManual[k] + }) + 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 + return result + + def homeVideoContent(self): + data=self.fetch(f'{self.mhost}/dynamic/v1/channel/index/0/0/0/1000000/0/0/17/1354?type=17&version=5.0&t={str(int(time.time()*1000))}&_support=10000000', headers=self.headers).json() + videoList = [] + for i in data['data']: + if i.get('DSLList') and len(i['DSLList']): + for j in i['DSLList']: + if j.get('data') and j['data'].get('items') and len(j['data']['items']): + for k in j['data']['items']: + videoList.append({ + 'vod_id': k["videoId"], + 'vod_name': k['videoName'], + 'vod_pic': k['img'], + 'vod_year': k.get('cornerTitle'), + 'vod_remarks': k.get('time') or k.get('desc'), + }) + return {'list':videoList} + + def categoryContent(self, tid, pg, filter, extend): + body={ + 'allowedRC': '1', + 'platform': 'pcweb', + 'channelId': tid, + 'pn': pg, + 'pc': '80', + 'hudong': '1', + '_support': '10000000' + } + body.update(extend) + data=self.fetch(f'{self.host}/rider/list/pcweb/v3', params=body, headers=self.headers).json() + videoList = [] + for i in data['data']['hitDocs']: + videoList.append({ + 'vod_id': i["playPartId"], + 'vod_name': i['title'], + 'vod_pic': i['img'], + 'vod_year': (i.get('rightCorner',{}) or {}).get('text') or i.get('year'), + 'vod_remarks': i['updateInfo'] + }) + result = {} + result['list'] = videoList + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + vbody={'allowedRC': '1', 'vid': ids[0], 'type': 'b', '_support': '10000000'} + vdata=self.fetch(f'{self.vhost}/video/info', params=vbody, headers=self.headers).json() + d=vdata['data']['info']['detail'] + vod = { + 'vod_name': vdata['data']['info']['title'], + 'type_name': d.get('kind'), + 'vod_year': d.get('releaseTime'), + 'vod_area': d.get('area'), + 'vod_lang': d.get('language'), + 'vod_remarks': d.get('updateInfo'), + 'vod_actor': d.get('leader'), + 'vod_director': d.get('director'), + 'vod_content': d.get('story'), + 'vod_play_from': '芒果TV', + 'vod_play_url': '' + } + data,pdata=self.fetch_page_data('1', ids[0],True) + pagecount=data['data'].get('total_page') or 1 + if int(pagecount)>1: + pages = list(range(2, pagecount+1)) + page_results = {} + with ThreadPoolExecutor(max_workers=10) as executor: + future_to_page = { + executor.submit(self.fetch_page_data, page, ids[0]): page + for page in pages + } + for future in as_completed(future_to_page): + page = future_to_page[future] + try: + result = future.result() + page_results[page] = result + except Exception as e: + print(f"Error fetching page {page}: {e}") + for page in sorted(page_results.keys()): + pdata.extend(page_results[page]) + vod['vod_play_url'] = '#'.join(pdata) + return {'list':[vod]} + + def searchContent(self, key, quick, pg="1"): + data=self.fetch(f'{self.shost}/applet/search/v1?channelCode=mobile-wxap&q={key}&pn={pg}&pc=10&_support=10000000', headers=self.headers).json() + videoList = [] + for i in data['data']['contents']: + if i.get('data') and len(i['data']): + k = i['data'][0] + if k.get('vid') and k.get('img'): + try: + videoList.append({ + 'vod_id': k['vid'], + 'vod_name': k['title'], + 'vod_pic': k['img'], + 'vod_year': (i.get('rightTopCorner',{}) or {}).get('text') or i.get('year'), + 'vod_remarks': '/'.join(i.get('desc',[])), + }) + except: + print(k) + return {'list':videoList,'page':pg} + + def playerContent(self, flag, id, vipFlags): + id=f'{self.rhost}{id}' + return {'jx':1,'parse': 1, 'url': id, 'header': ''} + + def localProxy(self, param): + pass + + def getf(self, body): + params = { + 'allowedRC': '1', + 'channelId': body['type_id'], + 'platform': 'pcweb', + '_support': '10000000', + } + data = self.fetch(f'{self.host}/rider/config/channel/v1', params=params, headers=self.headers).json() + ft = [] + for i in data['data']['listItems']: + try: + value_array = [{"n": value['tagName'], "v": value['tagId']} for value in i['items'] if + value.get('tagName')] + ft.append({"key": i['eName'], "name": i['typeName'], "value": value_array}) + except: + print(i) + return body['type_id'], ft + + def fetch_page_data(self, page, id, b=False): + body = {'version': '5.5.35', 'video_id': id, 'page': page, 'size': '30', + 'platform': '4', 'src': 'mgtv', 'allowedRC': '1', '_support': '10000000'} + data = self.fetch(f'{self.vhost}/episode/list', params=body, headers=self.headers).json() + ldata = [f'{i["t3"]}${i["url"]}' for i in data['data']['list']] + if b: + return data, ldata + else: + return ldata diff --git a/js/py/plugin/tools/wogg_wobg分类筛选生成.py b/js/py/plugin/tools/wogg_wobg分类筛选生成.py new file mode 100644 index 0000000..612647b --- /dev/null +++ b/js/py/plugin/tools/wogg_wobg分类筛选生成.py @@ -0,0 +1,111 @@ +import re +import asyncio +from urllib.parse import unquote +import aiohttp +from pyquery import PyQuery as pq + +headers = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.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,application/signed-exchange;v=b3;q=0.7', + 'Accept-Language': 'zh-CN,zh;q=0.9' +} + +async def fetch(session, url): + async with session.get(url, headers=headers) as response: + return await response.text() + +def grtclass(data): + classes = [] + vdata = [] + for i in data.items(): + j = i('a').attr('href') + if j and ('type' in j or 'show' in j): + id = re.search(r'\d+', j) + if id: + id = id.group(0) + else: + id = j.split('/')[-1].split('.')[0] + if id not in vdata: + vdata.append(id) + classes.append({ + 'type_name': i('a').text(), + 'type_id': id + }) + return classes + +def get_k(text,type): + key = '' + cates={"class": "类型,剧情", "area": "地区", "lang": "语言", "year": "年份,时间", "letter": "字母", "by": "排序","sort": "排序"} + for i,x in cates.items(): + if type== 'wobg' and i in text: + key = i + break + elif type == 'wogg': + for j in x.split(','): + if j in text: + key = i + break + + if type == 'wobg': + if not key: + if 'id' in text: + key = 'id' + return key + +def get_v(text,key,type): + if type == 'wobg': + return text.split(f'{key}/')[-1].split('/')[0].split('.')[0] + else: + v=text.split('/',-1)[-1].split('.')[0][1:].replace('-','') + if v=='09':v='0-9' + return v + +async def c(session, host): + html = await fetch(session, host) + data = pq(html) + classes = grtclass(data('.drop-content-items li')) + if not len(classes): classes = grtclass(data('.nav-menu-items li')) + return classes + +async def get_ft(session, url,type): + print(f"请求: {url}") + html = await fetch(session, url) + data = pq(html) + ft = [] + for i in list(data('div.library-box.scroll-box').items())[1:]: + n = i('a.library-item-first').text() + c = i('.library-list a') + if type == 'wobg': + key = get_k(c.eq(0).attr('href'), type) + else: + key = get_k(n,type) + ft.append({ + 'name': n or key, + 'key': key, + 'value': [{'v': unquote(get_v(j.attr('href'),key,type)), 'n': j.text()} for j in c.items()] + }) + return ft + +async def main(host,type): + async with aiohttp.ClientSession() as session: + categories = await c(session, host) + print(f"分类: {categories}") + tasks = [] + fts = {} + if len(categories): + for i in categories: + path=f"/index.php/vod/show/id/{i['type_id']}.html" if type == 'wobg' else f"/vodtype/{i['type_id']}.html" + task = asyncio.create_task(get_ft(session, f"{host}{path}",type)) + tasks.append((i['type_id'], task)) + for type_id, task in tasks: + fts[type_id] = await task + return {'class': categories, 'filters': fts} + +if __name__ == '__main__': + # url = 'http://wogg.xxooo.cf' + url = 'http://2xiaopan.fun' + types = ['wobg','wogg'] + loop = asyncio.get_event_loop() + result = loop.run_until_complete(main(url, types[0])) + print('分类筛选生成结果:') + print(result) \ No newline at end of file diff --git a/js/s/7点.json b/js/s/7点.json new file mode 100644 index 0000000..af12b83 --- /dev/null +++ b/js/s/7点.json @@ -0,0 +1,19 @@ +{ + "数组": "", + "链接": "href=\"&&\"", + "标题": "title=\"&&\"", + "图片": "data-original=\"&&\"[替换:amp;>>空]", + "简介": "+pt-10 pb-10\" style=*>&&

", + "分类url": "https://www.7.movie/vodshow/{cateId}-{area}--{class}-----{catePg}---{year}.html", + "分类": "短剧$24#电视剧$21#电影$20#动漫$22#综艺$23", + "副标题": "class=\"item-status text-overflow\">&&<", + "分类url": "https://www.7.movie/vodtype/{cateId}.html", + "搜索数组": "", + "搜索二次截取": "", + "播放列表": "", + "播放标题": "\">&&", + "播放链接": "href=\"&&\"", + "搜索url": "https://dabaisha.tv/search?wd={wd}", + "搜索模式": "1", + "搜索数组": "class=\"cover\"&&", + "搜索图片": "https+://dabaisha.tv/upload/+data-src=\"/upload/&&\"" +} \ No newline at end of file diff --git a/js/s/奇迹.json b/js/s/奇迹.json new file mode 100644 index 0000000..0493675 --- /dev/null +++ b/js/s/奇迹.json @@ -0,0 +1,14 @@ +{ + "二次截取": "module-items\"&&id=\"page[替换:module-footer>>module-item]", + "数组": "module-item-pic&&module-item module-item-go w16", + "图片": "data-src=\"&&\"", + "副标题": "module-item-text\">&&", + "线路数组": "data-dropdown-value=&&", + "线路标题": "&&[替换:>>【]+集】", + "播放数组": "scroll-content&&", + "播放列表": "", + "播放标题": "&&", + "简介": "剧情:&&", + "分类url": "https://qiji.91by.top/index.php/vod/show/area/{area}/by/{by}/class/{class}/id/{cateId}/page/{catePg}/year/{year}.html", + "分类": "电影$1#电视剧$2#综艺$3#动漫$4#短剧$20" +} diff --git a/js/s/奇迹影视.json b/js/s/奇迹影视.json new file mode 100644 index 0000000..40b7213 --- /dev/null +++ b/js/s/奇迹影视.json @@ -0,0 +1,14 @@ +{ + "二次截取": "module-items\"&&id=\"page[替换:module-footer>>module-item]", + "数组": "module-item-pic&&module-item module-item-go w16", + "图片": "data-src=\"&&\"", + "副标题": "module-item-text\">&&", + "线路数组": "data-dropdown-value=&&", + "线路标题": "&&[替换:>>【]+集】", + "播放数组": "scroll-content&&", + "播放列表": "", + "播放标题": "&&", + "简介": "剧情:&&", + "分类url": "https://qiji.91by.top/index.php/vod/show/area/{area}/by/{by}/class/{class}/id/{cateId}/page/{catePg}/year/{year}.html", + "分类": "电影$1#电视剧$2#综艺$3#动漫$4#短剧$20" +} \ No newline at end of file diff --git a/js/s/小枫影视.json b/js/s/小枫影视.json new file mode 100644 index 0000000..f4a87e0 --- /dev/null +++ b/js/s/小枫影视.json @@ -0,0 +1,10 @@ +{ + "二次截取": "module-items\"&&id=\"page[替换:module-footer>>module-item]", + "数组": "module-item-pic&&module-item\"", + "图片": "data-src=\"&&\"", + "副标题": "module-item-text\">&&", + "线路数组": "data-dropdown-value=&&[不包含:视频]", + "线路标题": "&&[替换:>>【]+集】", + "分类url": "https://kekedy.icu/vodshow/{cateId}-{area}-{by}-{class}-{lang}----{catePg}---{year}.html", + "分类": "电影$1#国产剧$2#综艺$6#短剧$8#纪录片$9" +} \ No newline at end of file diff --git a/js/s/小红.json b/js/s/小红.json new file mode 100644 index 0000000..ca7a6a1 --- /dev/null +++ b/js/s/小红.json @@ -0,0 +1,16 @@ +{ + "主页url": "https://xiaohys.com/", + "分类url": "https://xiaohys.com/show/{cateId}-{area}--{class}-{lang}----{by}---{year}", + "分类": "电影$movie#电视剧$tv#综艺$variety#动漫$anime", + "数组": "public-list-div public-list-bj&&", + "标题": "class=\"public-list-button\">*>&&", + "副标题": "public-list-prb hide ft2\">&&", + "图片": "data-src=\"&&\"", + "链接": "href=\"&&\"", + "播放数组": "anthology-list-play size&&", + "播放列表": "", + "播放标题": ">&&", + "线路数组": "swiper-slide&&", + "线路标题": "&&", + "线路标题": ">&&<", + "分类url": "http://dyxz.tv/list/{cateId}_{catePg}.html", + "分类": "电影$1#电视剧$2#动漫$3#综艺$4" +} \ No newline at end of file diff --git a/js/s/尼玛影视.json b/js/s/尼玛影视.json new file mode 100644 index 0000000..85c1910 --- /dev/null +++ b/js/s/尼玛影视.json @@ -0,0 +1,5 @@ +{ + "简介": "hl-content-text\">&&", + "分类url": "http://nm.xxxc137.top/vodshow/{cateId}-{area}--{class}-----{catePg}---{year}.html", + "分类": "短剧$25#电视剧$2#电影$1#动漫$4#综艺$3" +} \ No newline at end of file diff --git a/js/s/巴士动漫.json b/js/s/巴士动漫.json new file mode 100644 index 0000000..d2132d8 --- /dev/null +++ b/js/s/巴士动漫.json @@ -0,0 +1,81 @@ +{ + "规则名": "动漫巴士", + "规则作者": "", + "请求头参数": "User-Agent$MOBILE_UA#Accept$text/html#accept-language$zh-CN,zh;q=0.8", + "网页编码格式": "UTF-8", + "图片是否需要代理": "0", + "是否开启获取首页数据": "1", + "首页推荐链接": "https://dm84.net", + "首页列表数组规则": "body&&.v_list", + "首页片单列表数组规则": "li", + "首页片单是否Jsoup写法": "1", + "分类起始页码": "1", + "分类链接": "https://dm84.net/list-{cateId}-{catePg}.html[firstPage=https://dm84.net/list-{cateId}.html]", + "分类名称": "国产动漫&日本动漫&欧美动漫&动漫电影", + "分类名称替换词": "1&2&3&4", + "筛选数据": {}, + //"筛选数据": "ext", + //{cateId} + "筛选子分类名称": "", + "筛选子分类替换词": "", + //{class} + "筛选类型名称": "", + "筛选类型替换词": "*", + //{area} + "筛选地区名称": "", + "筛选地区替换词": "*", + //{year} + "筛选年份名称": "", + "筛选年份替换词": "*", + //{lang} + "筛选语言名称": "", + "筛选语言替换词": "*", + //{by} + "筛选排序名称": "时间&人气&评分", + "筛选排序替换词": "time&hits&score", + "分类截取模式": "1", + "分类列表数组规则": ".v_list&&li", + "分类片单是否Jsoup写法": "1", + "分类片单标题": "a&&title!在线观看", + "分类片单链接": "a&&href", + "分类片单图片": ".lazy&&data-bg", + "分类片单副标题": ".desc&&Text", + "分类片单链接加前缀": "https://dm84.net", + "分类片单链接加后缀": "", + "搜索请求头参数": "User-Agent$手机#Accept$text/html#accept-language$zh-CN,zh;q=0.8", + "搜索链接": "https://dm84.net/s-{wd}---------{SearchPg}.html", + "POST请求数据": "", + "搜索截取模式": "1", + "搜索列表数组规则": ".v_list&&li", + "搜索片单是否Jsoup写法": "1", + "搜索片单图片": ".lazy&&data-bg", + "搜索片单标题": "a&&title!在线观看", + "搜索片单链接": "a&&href", + "搜索片单副标题": ".desc&&Text", + "搜索片单链接加前缀": "https://dm84.net", + "搜索片单链接加后缀": "", + "链接是否直接播放": "0", + "直接播放链接加前缀": "", + "直接播放链接加后缀": "", + "直接播放直链视频请求头": "", + "详情是否Jsoup写法": "1", + "类型详情": "", + "年代详情": "", + "地区详情": "", + "演员详情": "", + "简介详情": ".intro&&-p&&Text", + "线路列表数组规则": ".play_from&&li", + "线路标题": "Text", + "播放列表数组规则": ".tab_content&&.play_list", + "选集列表数组规则": "a", + "选集标题链接是否Jsoup写法": "1", + "选集标题": "a&&Text", + "选集链接": "a&&href", + "是否反转选集序列": "1", + "选集链接加前缀": "https://dm84.net", + "选集链接加后缀": "", + "分析MacPlayer": "0", + "是否开启手动嗅探": "0", + "手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos", + "手动嗅探视频链接过滤词": ".html#=http" +} \ No newline at end of file diff --git a/js/s/巴蜀影视.json b/js/s/巴蜀影视.json new file mode 100644 index 0000000..79557cf --- /dev/null +++ b/js/s/巴蜀影视.json @@ -0,0 +1,11 @@ +{ + "请求头": "User-Agent$MOBILE_UA", + "编码": "UTF-8", + "图片": "_src=\"&&\"", + "线路标题":"-+>&&<", + "分类": "电影$dianying#电视剧$lianxuju#", + "分类url": "http://www.jsjiyuan.com/t/{cateId}-{catePg}.html", + "简介": "美人如花,情愫缱绻,与君相依相伴不离不弃。 + " + } + }, \ No newline at end of file diff --git a/js/s/布卡.json b/js/s/布卡.json new file mode 100644 index 0000000..7ff6d06 --- /dev/null +++ b/js/s/布卡.json @@ -0,0 +1,8 @@ +{ + "标题": "title=\"&&\"", + "链接": "href=\"&&\"", + "主页url": "https://m.ycblcw.com/label/new.html", + "线路数组": "class=\"item\">&&", + "线路标题": "data-toggle=\"tab\">&&", + "分类url": "https://m.ycblcw.com/bukasw/{cateId}-{area}-{by}-{class}-{lang}-{catePg}------{year}.html;;d0" +} \ No newline at end of file diff --git a/js/s/布谷TV.json b/js/s/布谷TV.json new file mode 100644 index 0000000..6972e0e --- /dev/null +++ b/js/s/布谷TV.json @@ -0,0 +1,17 @@ +{ + "主页url": "https://www.bugutv.org/", + "搜索url": "https://www.bugutv.org/?cat=&s={wd}", + "搜索数组": "content-area\">&&", + "简介": "◎简*介

&&

", + "导演": "◎导*演&&
", + "主演": "◎主*演&&
", + "影片年代": "◎上映 日期&&
", + "影片地区": "◎产*地&&
", + "线路数组": "entry-content u-text-format u-clearfix&&\"content-template", + "线路标题": "磁力", + "播放数组": "entry-content u-text-format u-clearfix&&\"content-template", + "播放列表": "

&&

[包含:magnet]", + "播放链接": "*\">&&", + "分类": "4K蓝光原盘$4kuhd#4K电影$4kmovie#4K剧集$4ktv#杜比视界$dolbyvision#4K纪录片$4kdocu#4K演示片$4kdemo/4ktv-4ktv#杜比演示片$4kdemo/dolbydomo#DTS演示片$4kdemo/dtsdomo#8K演示片$4kdemo/8kdemo#蓝光电影$bluraymovie/bluray-movie#蓝光剧集$bluraymovie/bluraytv#3D蓝光$bluraymovie/3dmovie#蓝光纪录片$bluraymovie/documentary#蓝光演唱会$bluraymovie/audiotest", + "分类url": "https://www.bugutv.org/{cateId}/page/{catePg}" +} \ No newline at end of file diff --git a/js/s/影搜.json b/js/s/影搜.json new file mode 100644 index 0000000..bedb5df --- /dev/null +++ b/js/s/影搜.json @@ -0,0 +1,13 @@ +{"搜索请求头参数": "User-Agent$PC_UA#Referer$https://yingso.fun/", +"搜索链接": "https://ys.api.yingso.fun/v3/ali/search;post", +"POST请求数据": "{\"pageNum\":1,\"pageSize\":30,\"title\":\"{wd}\",\"root\":1,\"cat\":\"all\"}", +"搜索截取模式": "0", +"搜索列表数组规则": "data", +"搜索片单是否Jsoup写法": "1", +"搜索片单图片": "", +"搜索片单标题": "title", +"搜索片单链接": "key", +"搜索片单副标题": "", +"搜索片单链接加前缀": "https://www.aliyundrive.com/s/", +"搜索片单链接加后缀": "" +} \ No newline at end of file diff --git a/js/s/影院.json b/js/s/影院.json new file mode 100644 index 0000000..02721b0 --- /dev/null +++ b/js/s/影院.json @@ -0,0 +1,4 @@ +{ + "分类url": "https://www.iysdq.cc/vodshow/{cateId}-{area}-------{catePg}---.html", + "分类": "电影$1#电视剧$2#综艺$3#动漫$4#短剧$5" +} \ No newline at end of file diff --git a/js/s/播视童趣.json b/js/s/播视童趣.json new file mode 100644 index 0000000..9aeb060 --- /dev/null +++ b/js/s/播视童趣.json @@ -0,0 +1,70 @@ +{ + "规则名": "播视童趣", + "规则作者": "香雅情", + "请求头参数": "电脑", + "网页编码格式": "UTF-8", + "图片是否需要代理": "0", + "是否开启获取首页数据": "1", + "首页推荐链接": "https://www.boosj.com/baby/", + "首页列表数组规则": "body&&.pub-hotplay-main||.pub-child-dance||.pub-toy-play||.pub-describe-story||.pub-child-song||.pub-child-eduction", + "首页片单列表数组规则": "a:has(img)", + "首页片单是否Jsoup写法": "1", + "首页片单标题": "img&&alt", + "首页片单链接": "a&&href", + "首页片单图片": "img&&src", + "首页片单副标题": "", + "首页片单链接加前缀": "", + "首页片单链接加后缀": "", + "分类起始页码": "1", + "分类链接": "https://www.boosj.com/search_res_3362__{cateId}_{catePg}_.html", + "分类名称": "全部&辅食&动画&儿童舞蹈&少儿英语&儿童歌曲&才艺&播视自制&故事&亲子教育&美术&其他&儿童游戏&识物&绘本&古诗&科普&儿童玩具&播视童趣儿童玩具", + "分类名称替换词": "&28&582&3364&3366&3367&3622&3782&3822&3842&4402&4583&4762&4842&4843&4844&4845&5102&5142", + "筛选数据": {}, + //"筛选数据": "ext", + //{cateId} + "筛选子分类名称": "", + "筛选子分类替换词": "", + //{class} + "筛选类型名称": "", + "筛选类型替换词": "*", + //{area} + "筛选地区名称": "", + "筛选地区替换词": "*", + //{year} + "筛选年份名称": "", + "筛选年份替换词": "*", + //{lang} + "筛选语言名称": "", + "筛选语言替换词": "*", + //{by} + "筛选排序名称": "", + "筛选排序替换词": "", + "分类截取模式": "1", + "分类列表数组规则": "body&&.bj-col4:has(img)", + "分类片单是否Jsoup写法": "1", + "分类片单标题": "a&&title", + "分类片单链接": "a&&href", + "分类片单图片": "img&&data-original", + "分类片单副标题": "", + "分类片单链接加前缀": "", + "分类片单链接加后缀": "", + "搜索请求头参数": "User-Agent$手机", + "搜索链接": "{wd}", + "POST请求数据": "", + "搜索截取模式": "1", + "搜索列表数组规则": "", + "搜索片单是否Jsoup写法": "1", + "搜索片单图片": "", + "搜索片单标题": "", + "搜索片单链接": "", + "搜索片单副标题": "", + "搜索片单链接加前缀": "", + "搜索片单链接加后缀": "", + "链接是否直接播放": "1", + "直接播放链接加前缀": "", + "直接播放链接加后缀": "", + "直接播放直链视频请求头": "", + "是否开启手动嗅探": "0", + "手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos", + "手动嗅探视频链接过滤词": ".html#=http" +} \ No newline at end of file diff --git a/js/s/斗鱼直播.json b/js/s/斗鱼直播.json new file mode 100644 index 0000000..5ccbb44 --- /dev/null +++ b/js/s/斗鱼直播.json @@ -0,0 +1,43 @@ +{ + "规则名": "斗鱼直播", + "规则作者": "香雅情", + "请求头参数": "手机", + "网页编码格式": "UTF-8", + "图片是否需要代理": "0", + "是否开启获取首页数据": "0", + "分类起始页码": "1", + "分类链接": "https://m.douyu.com/api/room/list?page={catePg}&type={cateId}", + "分类名称": "网游竞技&单机热游&手游休闲&娱乐天地&颜值&科技文化&语音互动&语音直播&正能量&赛车竞技&京斗云", + "分类名称替换词": "LOL&TVgame&wzry&ecy&yz&wh&paidui&yyjy&znl&eracing&jdy", + "筛选数据": "ext", + "筛选子分类名称": "英雄联盟&热门游戏&穿越火线&超击突破&CFHD&使命召唤&DNF&DOTA2&炉石传说&CS:GO&无畏契约&lol云顶之弈&魔兽争霸&魔兽怀旧服&自走棋&传奇&跑跑卡丁车&网易游戏&星际争霸&格斗游戏&守望先锋归来&DOTA&魔兽世界&剑网3&魔域&我的世界&超激斗梦境&冒险岛&三国杀&梦幻西游&天涯明月刀&街头篮球&NBA2KOL2&QQ飞车端游&战地之王&军事游戏&棋牌娱乐&FIFA ONLINE 4&热门网游&诛仙世界&千古风流&APEX&流放之路POE&剑网3缘起&逆水寒&风暴英雄&逆战&坦克世界&战舰世界&巫师之昆特牌&反恐精英Online&暗黑破坏神&梦三国2&传奇世界&方舟:生存进化&刀塔霸业&神武4电脑版&群雄逐鹿&堡垒之夜&无限法则&问道电脑版&西山居游戏&最终幻想14&战意&剑灵&星际战甲&龙之谷&铁甲雄兵&古剑奇谭网络版&轩辕传奇&神途&激战2&高达文化区&忍者村大战2&RPG网游专区&诛仙3&Artifact&斗鱼游戏&笑傲江湖OL&冒险岛2&无尽战区&生死狙击&斗战神&永恒之塔&竞速游戏&九阴真经&我的起源&FPS综合网游&劲舞团&天下&刀锋铁骑&火箭联盟&泡泡堂&武侠乂&音乐游戏&百变球球&游戏装机&新倩女幽魂&创世战车&天谕&征途2&QQ炫舞&泰亚史诗&大唐无双&枪火游侠&海战世界&秘境对决&兽人必须死&怪物猎人ol&火源&生存竞技&手工星球&艾兰岛&腾讯游戏&星战前夜:晨曦&热血传奇怀旧版&仙侠世界2&Anarea&枪火重生&彩虹岛&御龙在天&英魂之刃&自由篮球&洛奇英雄传&洛奇&封印者&奇奥英雄传&合金弹头&新英雄年代&星尘传说&盛趣游戏&九阴真经2&沙盒游戏&体育网游&我的世界:地下城&恐鬼症&领地人生&梦塔防&重生边缘&大话西游2&猎人&虎豹骑&传奇之梦&伏魔传&梦想世界3电脑版&海之乐章2&新风火之旅&鬼谷无双&猎龙战记&不败传说&天子剑&热血江湖online&血杀英雄&千年3&逍遥情缘&天空之城&快乐西游&诺亚传说&鹿鼎记&新桃花源记&疾风之刃电脑版&武魂2电脑版&奇迹世界sun&地城之光&新丝路&剑侠世界2电脑版&斩魂&大唐2&幻想神域电脑版&蜀山:初章&狼人对决网游&武林群侠传&飘流幻境&卡拉彼丘&破天一剑&剑雨江湖&四国军棋&命运方舟&新大话西游3&装甲战争&释厄英雄&隆冬&暴雪游戏综合&Battlebit&HypeSquad&长尾4部虚拟分区&幕后高手&燕云十六声&THE FINALS&不良土壤&篮球高手&NBA2K Online&塔瑞斯世界&再战Online&跑跑卡丁车:漂移&传奇永恒&ARC Raiders&传奇归来&权力的游戏 凛冬将至页游&异星前哨&The Front&欺骗公司&全境封锁2||主机游戏&刺客信条:英灵殿&马里奥制造&逃离塔科夫&命运2&墲人之境&Evil Dead&恐怖游戏&荒野大镖客&九劫曲&灵魂筹码&骑马与砍杀&只狼&饥荒&全境封锁&怀旧游戏&战地风云&隐形守护者&ATLAS&进击的巨人&NBA2K&八方旅人&血污:夜之仪式&人类一败涂地&挺进地牢&环世界&古墓丽影&波西亚时光&鬼泣&往日不再&仙剑奇侠传&神秘海域&塞尔达系列&僵尸世界大战&足球游戏&橙光&莎木&圣歌&了不起的修仙模拟器&女神异闻录&斯普拉遁&超级马里奥&三国志系列&星际公民&最终幻想&中土世界:战争之影&流放者柯南&行尸走肉&深海迷航&三国群英传&腐烂国度&无主之地&层层恐惧&圣女战旗&瘟疫传说:无罪&哆啦A梦:牧场物语&鬼哭邦&幽灵行动:断点&不屈者柯南&风之旅人&辐射&太吾绘卷&SCUM&正当防卫&以撒的结合&文明&仁王&缺氧&全面吃鸡模拟器&古剑奇谭&宝可梦:剑/盾&魔法破碎&JUMP大乱斗&皇牌空战&体育游戏&海岛大亨&NBA 2K 欢乐竞技场2&碧海黑帆&最后生还者2&装机模拟器&侏罗纪世界:进化&植物大战僵尸:花园战争系列&蜘蛛侠&战争机器5&战国无双&勇者斗恶龙:建造者2&遗迹:灰烬重生&血源&羞辱系列&星之卡比&侠客风云传&旺达与巨像&吞食孔明传&突变元年:伊甸园之路&死亡搁浅&双点医院&守墓人&忍者龙剑传&模拟人生&迷雾侦探&龙腾世纪&猎天使魔女&狂野星球之旅&空洞骑士&狙击精英&救赎之路&精灵宝可梦Let's Go!&驾驶俱乐部&极限竞速&极品飞车&胡闹厨房&河洛群侠传&归于沉寂&光之子&疯狂的麦克斯&地铁:离去&沉没之城&尘埃系列&超凡双生&飙酷车神&鬼泣5&孢子&暗黑地牢&Rime&生死狙击2&Inside&三国战纪&怀旧FC&讨鬼传&经典单机&奇异小队&英雄无敌&索尼克系列&暗黑血统&街机游戏&合金装备&红色警戒&星球大战系列&纪元:变异&镜之边缘&无双大蛇&海贼王系列&波斯王子&灵魂之火&Hob&祖先:人类史诗&勿忘我&寂静之人&海贼无双&黑道圣徒系列&鬼屋魔影:启蒙&我还活着&巨神狩猎&三合会之战&女巫&大将军:罗马&人类黎明&漫展模拟器&电竞传奇&爱丽丝:庇护&深渊狂猎&古惑狼三部曲&掠食&重装机兵XENO&暗夜长梦&火焰纹章系列&神鬼寓言&物质世界&星露谷物语&质量效应&沙石镇时光&英雄传说&刀剑神域&博德之门&通灵塔&火炬之光&噬血代码&恶灵附身&上古卷轴&战场女武神&无畏&命运之手&神舞幻想&消失的星球&赛博朋克2077&碧蓝幻想&中国式家长&勇者斗恶龙&幻想三国志&堕落之王&生化变种&精灵宝可梦系列&魔界战记&最后的守护者&尼尔:机械纪元&伊苏&迸发&审判之眼:死神的遗言&天国:拯救&地牢围攻&幻&克苏鲁的呼唤&奇异人生&黑暗影集:棉兰幽灵&蔚蓝&对马岛之魂&少数幸运儿&与狼同行&无人深空&乐高世界&超能队长&内心朋友&Deracine&风来之国&EVOTINCTION&看火人&F1系列&超级房车赛系列&壁中精灵>赛车7&赛车计划 系列&极速骑行&超级机器人大战&幽浮系列&信长之野望&超级食肉男孩&这是我的战争&太空战舰:战术行动&杀戮尖塔&冰汽时代&帝国时代&十字军之王&精英:危险&马克思佩恩&量子破碎&死亡空间&光明记忆&海贼王:寻秘世界&非常英雄&旁观者&凯瑟琳Full Body&噬神者&鬼武者重制版&叛乱:沙漠风暴&王国之心&除暴战警&幽林怪谈&任天堂明星大乱斗特别版&杀手&雷霆一击&狂怒&德军总部&Control&骷髅骑士&疯狂之月&耀西的手工世界&三位一体&ToolsUp!&新樱花大战&赏金奇兵&华沙&宅男的人间冒险&黑暗献祭&失落余烬&斩服少女:异布&精灵与萤火意志&2020东京奥运&世界汽车拉力锦标赛&十三机兵防卫圈&沙雕鹿模拟器&奇异世界:灵魂风暴&MUGEN&作业疯了&足球经理&战争附言&雨中冒险&亿万僵尸&疑案追声&一起玩农场&舞力全开&武装突袭&我的朋友佩德罗&时光之帽&王国与城堡&天空之山&逃脱者&石油大亨&生化奇兵&神界:原罪&荣耀战魂&全面战争模拟器&欧洲卡车模拟器&末日方舟&美国逃亡者&漫漫长夜&恐惧狼群&极限巅峰&永恒轮回&孤岛危机&孤岛惊魂&福尔摩斯&浮岛物语&都市:天际线&地球陨落&盗贼之海&餐瘾地城&raft&Dayz&60秒&俄罗斯钓鱼&黑暗逃生&猎人:荒野的召唤&失落城堡&恐怖黎明&传送门骑士&死亡细胞&茶杯头&地痞街区&漫威终极联盟&看门狗&真三国无双&纪元1800&耀西的毛线世界&节奏地牢&围攻&百战天虫&心灵杀手&战斗砖块剧场&泰拉瑞亚&斩妖行&未转变者&异星工厂&群星&求生意志OL&消逝的光芒&UFC&传送门&底特律:变人&恶魔城&方根书简&废品机械师&光环&归家异途&过山车之星&毁灭战士&火影忍者:究极忍者风暴&几何冲刺&监狱建筑师&军团要塞&坎巴拉太空计划&恋爱模拟器&料理模拟器&流浪汉模拟器&龙珠:超宇宙&马里奥赛车&模拟城市&模拟农场&模拟山羊&魔能&欧陆风云&奇妙探险队&乞丐模拟器&小偷模拟器&桌游模拟器&逆转裁判&俄罗斯方块99&史莱姆牧场&请出示证件&超越光速&传说之下&深岩银河&赛博朋克酒保行动&植物大战僵尸&城堡毁灭者&武装原型&游戏开发者&半条命&去月球&蝙蝠侠&Refunct&未上锁的房间&失忆症&艾迪芬奇的记忆&勇敢的心&影子战术:将军之刃&逃出生天&异界锁链&动物园之星&天外世界&最后的绿洲&VRChat&大富翁&路易鬼屋&马里奥和索尼克在东京奥运会&牧场物语&斩妖Raksasi&军团&反恐精英&扣押&英雄连&黑客网络&太阳帝国的原罪:反叛&星界边境&红色至日&杀戮空间&又一个僵尸塔防&点击英雄&王国:经典&表层指挥&进化&黑手党&节奏光剑&龙珠斗士Z&死亡岛&暴战机甲兵&魔方世界&勇气默示录&永劫无间&龙与地下城:黑暗联盟&破败王者&9-5&速度与激情&新世界&人类&解忧咖啡店&幻影异闻录&龙珠Z&初音未来:歌姬计划&嗜血边缘&圣剑传说&复仇者联盟&废土3&部落与弯刀&一拳超人:无名英雄&Raji:远古传奇&我的英雄学院:唯我正义&铁血战士:狩猎场&幽灵行者&地心深处&洛克人&侍道&森林&kenshi&哈迪斯&伤害世界&极乐迪斯科&一字不落>FO&非常普通的鹿&缉私警察&只只大冒险&音灵&寄居隅怪奇事件簿&一起开火车!&霓虹深渊&莫塔守山人&夜勤人&传说法师&矿坑之下&龙崖&主机其他游戏&无尽世界&城市帝国&微软飞行模拟&卡片猎人&要塞:十字军东征&不义联盟&天命奇御&地狱之刃&红色派系&战场兄弟&SUPERHOT&火影忍者博人传&铁路帝国&杰克盒子的派对游戏包&真人快打&海军行动&BeamNG赛车&绿色地狱&火柴人战斗&地铁:归来&撕裂&星球基地&尤卡莱莉大冒险&二战装甲战车&钢铁苍穹&破坏领主&洪潮之焰&细胞分裂&工作模拟器&乐高漫威超级英雄&岛&北境之地&油管主播的生活&进击!要塞!&地狱潜者&钓鱼星球&行会&乐高侏罗纪世界&攻城英雄&厕所穿越记&创造世界&地下城&地狱已满&房产达人&废土2&军团战争&狂热火车&罗马之子&爬行世界&叛变:沙漠风暴&人间地狱&贪婪地牢&王国:两位君主&王牌英雄&无冬之夜&吸血鬼:避世血族&远星物语&战术小队&战争行为&这是警察&终极定制夜&万智对决&月影之塔&机甲战魔&temtem&ECO&薄暮传说&堡垒:火焰之炼&宝箱点击&弹丸论破&渎神&翻滚石块&疯狂运输&荒岛求生&皇家美食&基佬大乱斗&家园&僵尸毁灭工程&晶体管&雷神之锤&零时代&美国陆军&迷雾生存&骑士与商人&桥梁建造者&深海&神话时代&神力科莎&神探杰克&泰坦之旅&逃离扎特沃&陷阵之志&悬崖帝国&野兽传奇&遗忘国度之闲置冠军&音乐战机&英雄萨姆&越野巨轮&赃物与巫术&脏弹&职业自行车队经理&撞车嘉年华&碧蓝航线&传颂之物&绝体绝命都市&食人鲨&腐化2029&僵尸部队&吉拉夫与安妮卡&赛马大亨&广播&钢铁危机&地狱时刻&胡闹搬家&方根胶片&小镇英雄&公主计划&妖精的尾巴&玛拉的夏天&少林九武猴&Skul英雄杀手&坦克维修模拟&绝望监牢&无尽宇宙&恐怖的世界&石质碎片&瑞秋福斯特自杀之谜&装甲军团&太空海盗和僵尸&女巫来了&超级兔子人&夜间城邦&手部模拟器&超级鸡马&健身环大冒险&汽车调试项目&不予播出&炼金工房系列&灾厄逆刃&人行道&星空精灵&宝石:霜之怒&骰子地下城&铁锤守卫:英雄传&魔域地牢&漫漫长路&卡片地下城&超时空方舟&在森林深处&超载地牢&爱丽丝与巨人&符文工房&妙连千军&猎人竞技场:传奇&高能小队&风暴岛&丸霸无双&超可靠快递&SKYHILL: 黑雾&逃出地牢&彼岸晴空&彼岸花&咬紧牙关&迷走深空:碎舰师&生死大乱斗&黑色空岛&钻头派对&疯狂世界&守夜人:长夜&组装车间&毁灭全人类&海绵宝宝:争霸比基尼海滩&云城朋克&炽热的帆:海盗之战&明天会有救援&游击队1941&逆行竞技场&崩解&北方之魂&腐败&岛屿生存者&残存之人&再编译&梦幻模拟战 I&&II&无间冥寺&先驱者&遵命,陛下&量子联盟&永生之境:吸血鬼战争&咒语破碎&V4跨界战&九霄缳神记&退休模拟器&安妮:最后的希望&末日地带:与世隔绝&世界游戏大全51&神奇101&疾速追杀Hex&广东之路&危险驾驶&少女地狱的毒公主&深海争霸&伊甸之路&凤凰点&盟军敢死队&浪人传说&地牢守护者&主机视频&传奇生物&冬日计划&几何竞技场&龙魂&灭火先锋&汽车交易模拟器&全面坦克模拟器&我来自江湖&亦春秋&异星探险家&异形:隔离&至暗之光&超级巴基球&侠隐阁&怒之铁拳4&魔法尖塔&美国卡车模拟&泰坦陨落&捣蛋大作战&觅长生&揍击派对&国王的恩赐&海底大猎杀&黑荆棘角斗场&紫塞秋风&浴血黑帮:傀儡师&恶果之地&轩辕剑柒&尸变纪元&瓦解&空穴山谷&防僵尸基地&堕落圣杯&觉醒&寻找埃文&致命游民复仇者&四海兄弟&末日求生&布莱尔女巫&北方城镇&创世理想乡&绝境北方&生存日记&山海旅人&恐龙化石猎人&超级动物大逃杀&完美的一天&梦幻引擎:游牧城市&不思议的皇冠&上行战场&幸福工厂&废品大亨&开拓者:正义之怒&武士零&冰与火之舞&恶魔之魂&地平线&PROJECT ATHIA&迷途猫&Returnal&麻布仔大冒险&小小大星球&柯娜:精神之桥&幽灵线:东京&JETT:遥远彼岸&众神陨落&Solar Ash&BUGSNAX&The Waylanders&生化危机4重制版&Pragmata&暴雨&怪物火车&雷曼&瑞奇与叮当&桥梁建造师&再见火山高校&宇航员的娱乐室&小恶魔附体&米德加德部落&宇宙机器人&死亡循环&海岛故事&欺诈之地&避风港&裂缝破坏者&INMOST&占领火星&永恒空间&Grounded&星际漫游者&水晶传说&士兵突击&无限空间&未知海岸&Griefhelm&直到尽头&钢铁收割&末日准备狂&要塞:军阀之战&逝者摆渡人&支柱&层层梦境&侠盗猎马人&最老的灵魂&Superliminal&滑板鸟&超猎都市&疯狂连杀&黑色之书&解放者&钢铁誓言&花园故事&遥不可及&恶魔之书&最后的法术&怪物舞会&黑色起源&信仰:邪恶三相&滑雪胜地大亨&荒野之地&展翅翱翔&弹出地牢&神笔狗良&变形记&螃蟹大战&梅林之手&30XX&Exo One&Omno&Röki&Undungeon&当过去就在眼前&地狱使者&火星地平线&马科超人&世纪之石&未绑定:世界分离&异宇星还&Foregone&泡泡糖忍战&Windbound&代号13&古惑狼4&火车模拟世界&火星求生&上古之环&为了国王&小小梦魇&伊森卡特的消失&糖豆人&The Cycle&螃蟹之王&和班尼特福迪一起攻克难关&实况力量棒球2020&托尼霍克职业滑板&巫火&赤痕:月之诅咒2&纸片马里奥&足球小将:新秀崛起&阿玛拉王国:惩罚&城堡风暴&盗贼遗产&渡神纪&迷雾之夏&成人脑力锻炼&热力纳斯卡&苏打地牢&星际拓荒&修道院:破碎瓷器&冒险之旅:十字军东征&冠军冲刺&赛道狂飙&工人物语&海商王&非一般职场&永进&侠道游歌&沉浮&行界:重构&不当英雄&一方灵田&模拟狩猎&Aeolis Tournament&英灵神殿&红怪&部落:原始建造者&迷雾征程&庄园主&动物派对&Olija&致命躯壳&终结降临&虚空列车&影子武士&Creaks&废墟的旗帜&节奏医生&终点咖啡馆&痞子英雄&风之王国&轻木模型飞行模拟器&为了人民&随动回旋镖&燃烧吧,蜘蛛&北极光&恐龙公园&星际反叛军&愤怒的面具&垃圾场模拟器&辐射谷物语&星际小队&暗影火炬城&影子工厂&中国城市建设者&死亡之夜&亡灵军团&神佑释放&阿尔比恩&洞窟探险&中世纪王朝&WWE 2K竞技场&四海旅人&怪兽远征&Uragun&二次灭绝&罪恶帝国&皮克敏&烈火战马&墨心&天穗之咲稻姬&空战猎鹰&快到碗里来&我的公司996&戴森球计划&烟火&鬼谷八荒&回门&Muse Dash&天神镇物语&无尽旅图&战魂铭人&ALTF4&极限竞速:地平线4&恐惧之间&DmC:鬼泣&超级马里奥:奥德赛&超级马里奥3D世界&恶灵附身2&疯狂游戏大亨2&孤岛惊魂6&怪物猎人&归家异途2&鬼泣2&鬼泣3&鬼泣4&黑神话:悟空&呼吸边缘&环形帝国2&求生之路&仁王2&忍者龙剑传:大师合集&三国群英传8&三国志14&杀手3&双人成行&逃生2&甜蜜之家&王国之心3&小小梦魇2&宇宙大拍扁&重生旅人&循环英雄&生化入侵&神界:原罪2&氰化欢乐秀-末日通行证&魔法气泡-特趣思2&漆弹大作战2&丧尸围城2&神秘海域4&要塞:群雄割据&星际乐土太空基地&不是地下城&邪恶天才2:统治世界&疯狂轮子&草图&洛夫洛特爵士&Scrapnaut&Everhood&遥远:导演剪辑版&最后的克劳迪亚&锋芒录&失乐园&血根&忘却的尤克特拉希尔&装甲战线&战斗周期&珊瑚岛&石器争霸&租房达人&路易吉洋楼3&寂静岭:暴雨&狙击手:幽灵战士契约2&全面战争&丧尸围城1&寂静岭2&巫魔人&农场经理&瓦塔姆&I Wanna Maker&尼尔:伪装者&异界之上&浣熊通缉犯&The Signifier&石碑&英科迪亚&无路之旅&夜深人静&破碎&斯盖尔之女&Taur&Obye me&走过至暗时刻&审判者&超级寄生虫&蒸汽地牢:禁闭&南瓜杰克&三教&112接线员&工匠镇&瑞利达&泡沫冬景&侍道外传:刀神&复体&曼岛TT赛事:边缘竞速2&战争机器:战术小队&侠之道&海绵宝宝:比奇堡的冒险&分离&奇妙探险队2&爱上火车&刺客信条:奥德赛&丧尸围城4&神秘海域2:纵横四海&神秘海域3:德雷克的诡计&星球大战:前线&终极神秘古域:混沌洞穴&尸变纪元2&Moonray&神田川Jet Girls&玩命关头:十字路口&灵魂旅人&古树旋律:重生&面容&车祸现场模拟器&破门而入2:北方特遣队&破门而入&俄罗斯方块效应:连接&过山车大亨3:完全版&模拟大爷&SD高达G世纪:起源&绿林侠盗:亡命之徒与传奇&东方计划:不可思议的幻想乡&地球黎明&劳拉GO&Fate/EXTELLA&临终:重生试炼&生生不息&虚拟现实乐园&夏日课堂&妖精剑士F&最终幻想世界&苍翼默示录:神观之梦&荒神&晚班&光环战争&子弹风暴&异域镇魂曲&生命线&暗黑迷途&没有人知道的大冒险&巡警&冥河:黑暗碎片&极限脱出:九人游戏&耻辱之日&菲丽丝工作室:不可思议之旅的炼金术&狙击精英4&三国志13:威力加强版&热血物语:地下世界&史诗战争模拟器&银河护卫队&讨鬼传2&上古卷轴:传奇&闪乱神乐:少女们的选择&幽灵行动:荒野&白色情人节&美国职业摔角联盟2K17&荒野八人组&无夜之国&誓死坚守&苏菲的炼金工房&喷射侠&隐藏的人&叙利亚战争&武器店物语&罪恶少女:诱惑&小三角大英雄&狂战传说&双截龙4&七:远去的日子&地下蚁国&九张羊皮纸&戎马丹心汉匈决战&咒语力量3&小兵大战&维京人 人中之狼&你好邻居&大神:绝景版&寻找天堂&画中世界&桥梁工程师传送门&现代战争&SCP:秘密实验室&纷争终结者&魔界村:重制版&绯红结系&罪恶装备:STRIVE&铁翼少女&涅克罗蒙达:赏金猎人&骑士精神2&辽阔旷野&脊柱&Rune Knights&最后的咒语&红至日2:幸存者&真女神转生3&堕落军团&边境&当火车鸣笛三秒&军团1944&速降王者&地球灭亡前60秒&工业崛起&征服的荣耀:围城&前往中世纪&Arid&环形帝国&伊始之地&二之国2:亡灵之国&二之国:白色圣灰的女王&进击的巨人2&航海日记2&枪血黑手党2&隐龙传:影踪&高等动物&魔域之书&诸神灰烬:救赎&精灵鼠传说&和平世界&自由人:游击战争&战国无双5&泰拉科技&宇宙主义&永恒终焉&死亡教堂&灵魂能力6&基因特工&不要喂食猴子&9—5&迷宫大侦探&古剑奇谭3&日落过载&幻影深渊&不可思议之梦蝶&迷城重生&史诗战斗幻想5&钢铁之鼠&剑士&GRIS&古剑奇谭:永夜&核爆RPG&永恒边缘&旁观者2&Below&彩虹坠入&嗜血印&荒无人烟&哥特舰队:阿玛达2&伊苏9&兽人必须死3&上古之魂&狙击精英VR&遗忘之城&大逆转裁判:编年史&Last Stop&解除绑定:世界分离&边界之外&异种&十字回镖&从军&二人世界&石炉&上帝之城:监狱帝国&狂热运输2&机甲战士5&再见狂野之心&DJMAX致敬&分手装修&PICO PARK&光明记忆:无限&死亡之门&神明在上&中世纪王国战争&澳洲国际网球2&白门&创世纪:阿尔法一号&秘馆疑踪&侠盗公司&英雄传说:创之轨迹&战地系列&塞尔达传说:天空之剑HD&国王的恩赐2&密闭之城2&尘埃异变&赞助者&他们在这里&旅行游记&玉言离光&夜书&脑航员2&异形:火力小队精英&12分钟&九十六号公路&FORECLOSED&重塑火星&你画我猜&RiMS Racing&地牢迷途&Soul Delivery&黑书&哀歌&故障朋克&喋血复仇&武林志2&破晓传说&雷能思之门&星位继承者&米德加尔的部落&城镇叠叠乐&恶魔反击战&山河伏妖录&终极拉扯&诈欺娇娃&蛛丝诡迹&听风者也&荒神2&战匠杜沃&血猎&死寂&人生重开模拟器&钢铁之尾&鬼灭之刃 火之神血风谭&漫威银河护卫队&剑侠图&审判之逝&帝国神话&实况救援大作战&蔚蓝色法则&蓝色反射:帝&艾尔登法环&黑相集:灰冥界&零~濡鸦之巫女~&美国式家长&互动派对&艾玛和泰迪熊:影子历险记&宝可梦:晶灿钻石/明亮珍珠&极限国度&邪恶冥刻&盒裂变&银河破裂者&部落幸存者&偶像大师:星耀季节&极限竞速:地平线5&翼星求生&时间加载器&成长物语:永恒树之歌&世纪:灰烬纪元&琉隐&塞伯利亚之谜:世界之前&酒馆带师&使命召唤系列&弃海:波弟大冒险&黑暗时代:背水一战&天命奇御二&光环:无限&卡牌之声:龙之岛&侏罗纪世界:进化2&蓝精灵:毒叶大作战&廖添丁:绝代凶贼之末日&莱恩的岛&笼中窥梦&那由多的轨迹:改&符文工厂4&雷霆一号&真三国无双8:帝国&英雄传说:零之轨迹 改&Propnight&垃圾水手&网吧模拟器&诡野西部&The Anacrusis&远征军:罗马&要战便战&宝可梦传说:阿尔宙斯&浩劫前夕&秘馆疑踪2&文字游戏&地平线 西之绝境&消逝的光芒2&无主之地3&战神:诸神黄昏&幽闭深渊&师父&恶月十三&昭和米国物语&小缇娜的奇幻之地&海上狼人杀&吸血鬼幸存者&侠乂行:浪迹天涯&巴比伦陨落&最终幻想:起源&HordeCore&乐高星球大战:天行者传奇&头等舱危机&星之卡比 探索发现&神州志:西游&瘟疫列车&FORSPOKEN&双子星:盛气凌人&风暴奇侠&Code B.R.E.A.K.&地心护核者&Indies’ Lies&霍格沃茨之遗&三伏&太荒初境&赏金游戏&奥丁:神叛&午夜猎魂&隐世神剑传&ABRISS&生死轮回&微光之镜&沙丘:香料战争&骑士陨落大冒险&塔猎手&铸时匠&特里贡:太空故事&卢默特:赤灵主宰编年史& 高尔夫大乱斗&暴走枪姬&孤山难越&维隆系统&宇宙汉堡王&Deck of Ashes&筑梦颂&开普勒斯&双点校园&潜行者2:切尔诺贝利之心&神都不良探&黄泉之路&春逝百年抄&哥谭骑士&星空&隐秘的角落&江湖客栈&蜡笔小新:我与博士的暑假&盐与献祭&吸血鬼:避世血族 绝唱&雪凤山&采石场惊魂&时空勇士&灵魂骇客2&火焰纹章无双:风花雪月&数码宝贝 绝境求生&神领编年史&2089:边境&夜莺&Ilysia&Project Q&哥布林弹球&蛇之守望者&Pummel Party&Holomento&合金重组&MIR4&我们永远在这里&创世灰烬&代号锦衣卫&碳酸危机&重装前哨&失心疯&女鬼桥:开魂路&地狱仆从&太阁立志传5 DX&Overprime&森林之子&星际海盗&生死抉择:血霾&杜蒙&雪居之地&千爵史诗&阿凡达:潘多拉边境&超逼真的攻城模拟器 &弈仙牌&Pwnk&夜族崛起&忍者神龟:施莱德的复仇&漫威SNAP&伏魔录&魔力宝贝&黎明前20分钟&弹幕互动玩法&逃离塔科夫:竞技场&木卫四协议&马里奥足球:战斗联盟&仙剑客栈2&罗马复兴&风暴之门&迷失&荒野的召唤:垂钓者&游戏王:大师决斗&修仙立志传&起飞吧!兔兔&咩咩启示录&记忆边境&冲就完事模拟器&足球,但大乱斗&幽灵观察者&SD高达:激斗同盟&房地产大亨&都广丹青录&伊格利亚战记&大江湖之苍龙与白鸟&尼罗河勇士2&暗邪西部&再刷一把&Dinkum&摔角城大乱斗&海岛之魂&Rooted&雅戈泰探险&同舟共济&PlateUp&萤火突击&弗兰基的复仇&天地归虚&冬日幸存者&沙丘:觉醒&无处不在&堕落之主&战国王朝&High on Life&匹诺曹的谎言&破月勇者&Park Beyond&逃生:试炼&战锤40K:暗潮&最远的边陲&萌宠大赢家 &钢铁崛起&Isonzo&蔑视&瘟疫传说:安魂曲&索尼克 未知边境&最后生还者 重制版&狂野泊车&友尽高尔夫&漂泊牧歌&刺客信条:代号JADE&红霞岛&塞尔达传说:王国之泪&霸剑霄云录&破碎线&卧龙:苍天陨落& 卡库远古封印&原子之心&霓虹入侵者&尘封大陆&Brotato&油尽航行&黄金魁犬&巴特拉:家在何方&餐车大亨&飞越13号房&时灵:星辰愚者&暴君的游戏&超能机器人&Warhaven&宝可梦:朱/紫&第一后裔&埃维尔村&奥雷萨之下&面具古墓&铳墓G.O.R.E.&黑相集:心中魔&Kingshunt&漫威暗夜之子&奇怪的RPG&百面千相&Evercore Heroes&东方:平野孤鸿&灵魂石幸存者&像素哥3&冰封之焰&神之天平&魔骑少女&伊克西翁&英勇无厌&万智牌:竞技场&主机一起看&兜仙&风帆纪元&社交互动游戏&矮人通天塔&轮回修仙路&海岸桃源:文明之种&咕喵怪物&Divine Knockout&无限暖暖&巫师系列&药剂工艺:炼金模拟器&四灵棋境&Dark and Darker&虚实万象&自杀小队:杀死正义联盟&江湖十一&方舟2&寂静村的孩子们&XDefiant&神奇躲避球&刺客信条:幻景&未尽行夜&天外武林&Warlander&盗日求生&Hi-Fi Rush&神笔谈兵&狂野之心&心渊梦境&Scars Above&寄梦远方&通神榜&中国式相亲2&Pacific Drive&恐怖录像带&白之旅&收获日3&浮生箓2:九九行歌&错误游戏&大航海时代:起源&法外枭雄:滚石城&莱莎的炼金工房&最终幻想16&街头霸王&ONI:鬼族武者立志传&Tchia&大侠立志传&零 ~月蚀的假面~&最后纪元&魔戒:咕噜&乌鸦之境&狼人嫌疑:神秘大厦&遇见造物主&铁拳8&网络奇兵&恐龙浩劫&护焰者&Prison Life 2&Innchanted&Lightyear Frontier&世界大战:西方战线&幻兽帕鲁&炸鸡派对&为了吾王2&Life by You&迷失之刃&迪士尼无限飞车&妖怪手表4强化之章&终极钓鱼模拟器&乱:失落之岛&战争之人2&深入后室&Eresys&德雷克的胜算&硬核机甲&巴别号漫游指南&叛军兴起&Pax Dei&钢铁指挥官&梦想屋:游戏&恐龙重生&摇滚之神&求生岛:不老泉传说&宠物旅馆&Teravit&坏兽联盟&荆棘:山丘之王||王者荣耀&LOL手游&和平精英&暗区突围&幻塔&火影忍者&COD手游&哈利波特:魔法觉醒&lol电竞经理&DNF手游&金铲铲之战&天刀手游&原神&航海王热血航线&万国觉醒&鸿图之下&欢乐麻将&王者模拟战&中国象棋&天谕手游&巅峰坦克&新游中心&热门手游&APEX手游&梦幻手游&QQ飞车&第五人格&欢乐斗地主&荒野乱斗&阴阳师&狼人杀&JJ斗地主&梦幻新诛仙&街霸对决&人类跌落梦境&机动都市阿尔法&一人之下&多多自走棋&崩坏3&风云岛行动&云游戏&跑跑手游&率土之滨&灌篮高手&皇室战争&王牌战士&战歌竞技场&忍者必须死3&神武4手游&梦幻模拟战&实况足球&剑与远征&航海王:燃烧意志&百闻牌&球球大作战&英雄杀&魔域口袋版&梦幻三维版&口袋新旅程&剑网3:指尖江湖&部落冲突&剑与家园&新笑傲江湖&猫和老鼠&猎人手游&明日之后&影之诗&决战平安京&决斗之城&魂斗罗归来&贪吃蛇大作战&圣斗士星矢&问道手游&魔力宝贝手游&最强NBA&旅行青蛙&热血街篮&手游推广&魔灵召唤&香肠派对&街头篮球手游&迷你世界&荒野行动&战双帕弥什&大话西游2口袋版&FIFA足球世界&街篮&一起来捉妖&明日方舟&自由幻想手游&火影忍者OL&一梦江湖&王牌战争:文明重启&完美世界手游&拳皇98OL&重装上阵&梦塔防手游&赛尔号&猎魂觉醒&仙境传说&流星群侠传&特色手游&逃跑吧少年&弹弹堂&石器时代&狂野飙车9:竞速传奇&RPG手游&天天酷跑&英魂之刃口袋版&拉结尔&倩女幽魂手游&决斗之城2&战争与文明&街球艺术&传奇手游&欢乐升级&雀魂&二次元手游&天龙八部online&征途2手游&万王之王3D&武林外传&我叫MT4&时空召唤&方舟手游&我的勇者&手机帝国&4399游戏&侍魂&潮人篮球&元气骑士&红警OL手游&狐妖小红娘手游&植物大战僵尸手游&战就战&俄罗斯方块环游记&二战风云2&食物语&龙之谷手游&塞尔之光&龙珠最强之战&虚荣&创造与魔法&境界-死神激斗&奇迹觉醒&光遇&游戏王:决斗链接&巅峰战舰&失落城堡手游&绝世战魂&雷霆游戏&寻仙&吾爱斗地主&天天象棋&王国纪元&非人学园&梦幻诛仙&召唤与合成&不思议迷宫&家庭教师&雪鹰领主&贪婪洞窟2&龙族幻想&奇葩战斗家&妖精的尾巴:魔导少年&剑网3指尖对弈&逆转回合&剑侠情缘2:剑歌行&异化之地&拳皇命运&三国杀移动版&罗布乐思&第二银河&足球手游&月圆之夜&蜀门&节奏大师&王牌战争&权力的游戏 凛冬将至&QQ炫舞手游&野蛮人大作战&全民枪战2&秦时明月世界&量子特攻&天龙八部&坦克大决战&花与剑&独立手游&青春篮球&终结者2审判日&一起优诺&神都夜行录&飞机大战2&阿瑞斯病毒&一起来飞车&麻将来了&风之大陆&金属对决&轩辕剑龙舞云山&微乐棋牌&辐射:避难所Online&遇见逆水寒&街篮2&战塔英雄&赛尔号手游&极光计划&不良人3&镇魔曲手游&绿茵之巅&音舞手游&激斗火柴人&堡垒前线:破坏与创造&传奇世界手游&魂武者&疯狂动物城:赛车嘉年华&猎手之王&武侠乂手游&英雄爱三国&永恒纪元&犬夜叉:奈落之战&孤岛先锋&传送门骑士手游&乱世王者&数码宝贝:相遇&仙剑4&光荣使命&长安幻世绘&篮球手游&元素地牢&帕斯卡契约&我是谜&闹闹天宫&原始守卫战&废土行动&鬼泣-巅峰之战&射击类手游&权力与纷争&轮回诀&海岛纪元&热血足球&命运歌姬&绿色征途&云梦四时歌&救赎之地&口袋对决&王牌御史&城堡抢翻天&银翼计划&光明大陆&项羽传&暗黑破坏神:不朽&鹿鼎记手游&妖神记&伊洛纳&银汉游戏&新神魔大陆&公主连结Re:Dive&三国志战略版&摩尔庄园&失落王冠&口袋觉醒&契约轮回&天地劫:幽城再临&阴阳师:妖怪屋&螺旋风暴&Disorder&妖怪名单之前世今生&黑潮之上&凹凸世界&云上城之歌&荣誉指挥官&天龙八部手游&战舰猎手&大秦帝国之帝国烽烟&五子棋&围棋&咔叽探险队&梦想新大陆&三国志幻想大陆:国创加强版&造梦无双&全球行动&放学别跑&两座城池&征服与霸业&新射雕群侠传&伊甸之战&诛仙手游&妄想山海&烽火之争&黎明觉醒:生机&星光创造营&梦幻花园&最强蜗牛&魔渊之刃&江南百景图&龙之谷2手游&不朽之旅&装甲前线&高能手办团&庆余年&我的侠客&曙光英雄&解神者&真三国无双霸&大话西游手游&血族&影之刃3&口袋进化&少年三国志:零&蘑菇战争2&开心消消乐&镖人&战争怒吼&战三国:八阵奇谋&幻书启世录&忘川风华录&新剑侠情缘手游&星耀对决&地城邂逅:记忆憧憬&旧日传说&小动物之星&超凡先锋&重生细胞&一念逍遥&像素危城&坦克世界闪击战&时空中的绘旅人&汉家江湖&约战:精灵再临&魂器学院&海岛奇兵&钢铁力量2&阴阳师:妖怪小班&浮生为卿歌&仙剑奇侠传九野&魔域手游&大唐无双手游&泰拉瑞亚手游&永不言弃&永不言弃2&牌乐门&永远的7日之都&坦克连&边境之旅&地铁跑酷&提灯与地下城&极无双&灵魂潮汐&坦克无敌&恶果之地手游&战舰世界闪击战&辐射:避难所&漫威:超级争霸战&耀光传奇&小森生活&艾彼&南瓜先生2九龙城寨&狂暴之翼&天使纪元&三十六计&西游女儿国&山海镜花&女神联盟2&少年西游记&少年三国志&少年三国志2&不可思议乐队&钢琴师&横扫千军&节奏大爆炸&喵斯快跑&去月球手游&深渊地平线&双子&说剑&小美斗地主&全明星激斗&全民奇迹2&原始传奇&地下城堡2:黑暗觉醒&进化之地&梦想世界3手游&有杀气童话2&辉煌传奇&蓝天传奇&铁血传奇&完美传奇&阳光传奇&浴血传奇&梓轩传奇&巨像骑士团&冒险与深渊&摸金校尉之九幽将军&螺旋圆舞曲&字母人&古今江湖&精灵之境&伊甸园的骄傲&镇魂街:武神躯&斗罗大陆:斗神再临&斗罗大陆:武魂觉醒&斗罗大陆2绝世唐门&英雄棋士团&骰子猎人&古代战争&梦幻家园&濡沫江湖&螺旋英雄谭&贪婪洞窟&匠木&冒险与挖矿&战神觉醒&九州仙剑传H5&荣耀大天使&暗黑大天使&古剑奇闻录H5&热血战歌&蓝月传奇&七战&神将屠龙&战龙归来&凡人修仙传挂机版H5&山河图志&谁是首富H5&武动苍穹&神魔传说&大城主&丛林猎人H5&攻城掠地&英雄这边请H5&大皇帝&我的帝国H5&盗墓笔记&朝歌封神录&人偶馆绮幻夜&长生劫&跨越星弧&拳魂觉醒&末日沙城&五行师&地下城堡&阿卡迪亚&剑与轮回&魔王与神锤&王牌高校&天天打波利&混沌起源&鬼语迷城&仙灵觉醒&大天使之剑&黄金裁决&谜方&战斗少女跑酷&宝可梦大探险&僵尸榨汁机&全战天下&数码宝贝:新世纪&嘻嘻棋牌&绝世仙王&一刀传世&斗罗大陆&一千克拉女王&破雪刃&坎公骑冠剑&刀剑乱舞ONLINE&JJ象棋&动物餐厅&天姬变&剑玲珑&奇迹之剑&王者修仙&御剑修仙&火线精英&小小突击队&造梦西游OL&皇帝成长计划2&热血神剑&领主战争&偶像请就位&魔力契约&我们的星球&比特大爆炸&胡桃日记&奥奇传说手游&云端问仙&三国志贾诩传&战斗吧龙魂&奇门之上&学园偶像季:群星闪耀&剑开仙门&晴明传&猫猫咖啡屋&花亦山心之月&恶魔秘境&月神的迷宫&光影链接&少女的王座&机甲爱丽丝&半盏复古行&星之彼端&此生无白&猫之宿约者&狼人对决&露西她所期望的一切&未来之役手游&最终幻想:勇气启示录 幻影战争&第八秩序&贝比岛&葫芦娃兄弟&复苏的魔女&王者射击&造梦西游4&造梦西游外传&战神遗迹&漫威超级战争&零号任务&小小村长&以太之光&豪杰成长计划&轩辕剑:剑之源&龙珠觉醒&同步音律&热血合击&比特小队&还有这种操作&逆水寒手游&流言侦探&战舰联盟&黑暗与光明&黑暗料理王&另一个伊甸:超越时空的猫&末剑&少女前线&野蛮时代&遇见&霓虹深渊:无限&绯红之境&如果一生只有三十岁&女神星球&想不想修真&阳春艺曲&胡莱三国3&灵魂宝戒&暴走英雄坛&奥拉星&诸神皇冠&姬斗无双&托拉姆物语&妙奇星球&不休的乌拉拉&先游云游戏&万象物语手游&机动战姬:聚变&聊斋搜灵录&球场风云&魔法洞穴2&绿茵信仰&星空时代&烟雨江湖&糖果缤纷乐&放置军团&千纹时空&网红奶茶店&远方的故事&白鸟游乐园&超脱力医院&我爱弹射&蜀山掌门&追妖记&球球联盟&誓灵&江湖悠悠&王牌竞速&文明与征服&聚爆&隐藏的家伙&神角技巧&碧蓝航线手游&爆炒江湖&300大作战&2047&机动战队大作战&活下去&四叶草剧场&宝可梦大集结&无极仙途&元素方尖&汉末霸业&EVE星战前夜:无烬星河&下一站江湖Ⅰ&光与夜之恋&弹力果冻&七雄纷争&放置江湖&火力苏打(T3)&植物大战僵尸2&魔神英雄传&球球英雄&刀剑神域黑衣剑士:王牌&苍之骑士团2&悠长假期&云裳羽衣&桃源记&四季物语&百分之一&无悔华夏&猫之城&墨斗&圣斗士星矢:正义传说&未定事件簿&雏蜂:深渊天使&ProjectGAIA&崩坏学园2&斗罗大陆:魂师对决&寻宝物语&映月城与电子姬&古墓丽影传说:迷踪&漫威对决&奶牛镇的小时光&放置与召唤&乱世曹操传&道友请留步&城堡传说大乱斗&一剑断念-像素仙侠&我是航海家&交叉次元&暮光起源&军团战棋英雄时代&天御乾坤&仙弈传说&代号:弥弥尔&索尼克在2020东京奥运会&繁荣美食市场物语&喵星人简史&姬魔恋战纪&食之契约&闪烁之光&牧羊人之心&老农种树&三国演义:吞噬无界&重建家园&合金机兵&群雄时代&苍蓝境界&斯特恩大陆&大明侠客令&通感纪元&航海奇闻&赛尔特大陆&不休战队&偶像梦幻祭2&卡卡保皇&灵猫传&荒野日记:孤岛&还有这种操作2&绝对演绎&剑侠世界3&召唤与合成2&攻城天下&上古王冠&纯白和弦&方舟之旅&异界事务所&萌宠大战僵尸&像素时代&仙侠第一放置&无尽的拉格朗日&弓箭手大作战&策马三国志&神行少女&挨饿荒野&武林英雄传&文明大爆炸&饥饿鲨:世界&造物梦工厂&诺亚之心&闪耀暖暖&无双萌将&战鼓英雄&超级精灵手表&青鸾繁华录&樱都学园&物种起源&剑之荣耀&刀剑乱舞-ONLINE-&人形觉醒&模拟城市:我是市长&九州三国志&重返帝国&太古仙尊&长安幻想&火炬之光:无限&策略军团&富豪闯三国&猫头鹰和灯塔&终结战场&绯石之心&魔天记&萌将风云&王者争雄&雷电傲气雄鹰&魔戒战争&捍卫星球&早安少女&不休江湖&拂晓&拂晓的拾荒团&江山:烽火连城&三国连环战&放开那三国3&古镜记&古剑奇谭木语人&料理次元&苍蓝誓约&火影忍者:忍者新世代&战火与荣耀&末日远征&战棋三国2&滚动的天空&战场英雄物语&新斗罗大陆&一起来飞车2&登山赛车&小小航海士外传&征程三国&我一点都不可口&荒野乱斗(腾讯版)&小小勇者&萌侠挂机&小冰冰传奇&三国战纪2手游&艾丽莎的国度&我的战舰&最终王冠&我是大东家&幸存者危城&我欲封天山海战&盛唐烟雨&余烬风暴&猫旅馆物语&暗魔领主&冒险公社手游&欧陆战争5:帝国&古荒遗迹&纪念碑谷2&大航海探险物语&末日来袭&我在7年后等着你&航海日记&一拳超人:最强之男&王国保卫战4&半世界之旅&妖怪手帐&迷失立方&奥特曼宇宙英雄&新三国杀&奶块&策魂三国&奥特曼系列OL&欢喜斗地主&洪荒文明&决战羽毛球&街头足球&浅塘&同人圣三国蜀汉传&心灵战争&零之战线&冒险王3OL&超级幻影猫2&无尽寒冬&末剑二&河图寻仙记&王的骑士&火影忍者:巅峰对决&元气骑士新作&冒险王2&梦间集&塔防之光&极略三国&我做夫人那些年&小小五千年&牌武者&牌师&被尘封的故事&火柴人联盟2&荒野日记&三国志吕布传&萝莉养成计划&非常普通的鹿手游&战箭天下&实况球会经理&全职猎手&超级改造家&斗斗堂&代号MA&DEEMO(古树旋律)&创意蛋糕店&时空猎人&美美小店&狗狗呼叫喵星&三国终极觉醒&策马守天关&骑士纷争&星际逆战&钓鱼大对决&沧月战纪&羽毛球高高手&了凡录&掌门太忙&LoveLive! 学园偶像祭&隐世录&黑色沙漠手游&魔力宝贝:旅人&玄中记&大家饿餐厅&修真江湖&出发吧冒险家&一拳超人正义执行&画境长恨歌&小花仙&盾之勇者成名录:浪潮&领主传奇&幻兽爱合成&魔力宝贝归来&完美世界:诸神之战&荣耀新三国&终末阵线:伊诺贝塔&巅峰极速&蛋仔派对&新盗墓笔记&轩辕传奇手游&萤火突击国际服&冰原守卫者&冒险小分队&崩坏:星穹铁道&无序次元&卧龙吟2&爆裂魔女&地下城堡3:魂之诗&乱世逐鹿&武林闲侠&淘米游戏&伊甸启示录&黑暗与光明手游&关于我转生变成史莱姆这档事&异能都市&叫我大掌柜&暖雪&玛娜希斯回响&永劫无间手游&无期迷途&逆光潜入&深空之眼&幻想神话志&CF手游&新天龙八部手游&无神之界&时空猎人3&保卫萝卜4&尘白禁区&明日方舟:终末地&龙之国物语&传奇天下&末日家园R计划&最佳球会&原始征途&奥特曼:集结&进化之地2&魂&全民大灌篮&航海王:梦想指针&枪火重生手游&派对之星&火影三国志&网易其它组&萌宠大侦探之迷雾岛&三国战纪手游&染·钟楼谜团&绝区零&魔兽弧光大作战&全民泡泡超人&重返CODM&综合手游&IP游戏&部落与弯刀手游&鸣潮&棋牌游戏&逗斗火柴人&战争公约&奥比岛:梦想国度&九灵神域&龙之谷世界&TapTap新游&永恒轮回:无限&劲舞团手游&神陵武装&黎明之海&环形战争&伊瑟·重启日&浮岛冒险Forager&队长小翼:王牌对决&铃兰之剑&出发吧麦芬&野蛮人大作战2&晶核&大野逐龙&星火编辑器&竹马胭脂铺&全面憨憨战争模拟器&最佳11人-冠军球会&空之要塞:启航&极无双2&鲤 重制版&我叫MT:归来&冰汽时代手游&射雕&王者万象棋&代号破晓&赛尔计划&羊了个羊&列王之剑&小小蚁国&跃迁旅人&SLG综合&战火与永恒&代号:伙伴&天使之战&海岛连萌&全明星街球派对&合金弹头:觉醒&弹弹堂大冒险&三国诛将录&劲乐幻想&白荆回廊&战地无疆&三国志战棋版&一拳超人:世界&鹅鸭杀手游&忍者龟:归来&太空行动&天龙八部2:飞龙战天&王者传奇&女神异闻录:夜幕魅影&彼界&墨武侠&代号:UH&动物王者||二次元&一起看&颜值(横屏)&音乐&户外&美食&原创IP&心动派对&音遇恋人&舞蹈&趣生活&心动FM&娱乐推荐&校园&营收内用&武汉纺织大学&武汉体育学院&湖北大学&华中农业大学&上海财经大学&华中师范大学&武汉工程大学&湖北经济学院&武昌理工学院&汉口学院&武汉软件工程职业学院&湖北美术学院&武汉生物工程学院&武昌首义学院&武汉铁路职业技术学院&江汉大学&武汉大学&华中科技大学&河北经贸大学&北京体育大学&北京城市学院&中南民族大学&西安电子科技大学&东北大学&大连海事大学&中国地质大学(武汉)&华东交通大学&西南交通大学&南京大学&上海大学&长沙理工大学&湖南交通职业技术学院&文华学院&成龙影视传媒学院&荆门职业学院&桂林电子科技大学&青岛农业大学&郑州科技学院&南华大学&河北科技大学&山东工艺美术学院&北京航空航天大学&广西理工职业技术学院&北京服装学院&湖北工业大学&新疆科技学院&新疆师范大学&新疆天山职业技术大学&新疆农业大学&昌吉学院&新疆工程学院&新疆理工学院&石河子大学&新疆交通职业技术学院&新疆体育职业技术学院&新疆财经大学&新疆医科大学&新疆大学&河南大学&齐鲁工业大学&青岛科技大学&黄河水利职业技术学院&河南开封科技传媒学院&安徽工程大学&青岛大学&山东交通学院&湖南工程学院&山西工程技术学院&西安文理学院&广东工业大学&华侨大学&湖北工业大学工程技术学院&浙江树人大学&兵团新兴职业技术学院&四川传媒学院&武汉工程大学邮电与信息工程学院&重庆邮电大学&云南大学&四川电影电视学院&重庆理工大学&重庆移通学院&四川天府新区信息职业学院&宁波大学&江西财经大学&四川音乐学院&无锡城市职业技术学院&超管推荐||颜值||文化&企鹅直播&数码科技&社会人文&汽车&科普&纪录片&斗鱼购物&成年教育||派对&心动FM.&一起玩&开黑车队&点唱&CP聊天&交友||语音交友&音乐之声&连麦互动&娱乐开黑||星星点灯&正能量||赛车竞技||京斗云", + "筛选子分类替换词": "LOL&rmyx&CF&SuperPeople&CFHD&COD&DNF&DOTA2&How&CSGO&VALORANT&ydzhy&mszb&wowclassic&dota2rpg&cq&Popkart&wyyx&SC&FTG&Overwatch&DOTA&WOW&JX3&EudemonsOnline&MC&cjdmj&mxd&sanguosha&MHXYOL&tianya&jtlq&NBA2KOL2&qqfcdy&AVA&jsyx&qipai&FOL4&rmwy&zxsj&qgflpc&APEX&PathofExile&JW3YQ&nsh&HOTS&NZ&TKSJ&wfws&wszktp&CS&DIABLO&msg2&cqsj&fzscjh&DotaUnderlords&swdnb&qxzl&blzy&roe&wddnb&Seasun&FF14&WYZY&BladeSoul&Warframe&DragonNest&tjxb&gjqtwlb&XYCQ&shentu&GuildWars2&gdyxq&rzcdz2&rpgwyzq&zhuxian3&Artifact&DYYX&xajhol&MXD2&WJZQ&BattleTeams&dzs&AION&jingsu&JYZJ&wdqy&FPSOL&jwt&tianxai&dftq&hjlm&ppt&wxy&MG&BBQQ&youxizhuangji&ONLINE&cszc&tianyu&zhengtu2&qqxw&tyss&dtws&qhyx&hzsj&mjdj&srbxs&MHol&hy&scjj&sgxq&ald&TencentGame&EVE&rxcqhjsgb&xxsj2&Anarea&qhcs&CHD&YLZT&YHZR&ZYLQ&LQYXZ&LQ&FYZ&QAYXZ&HJDT&XYXSD&XCCS&SQYX&JYZJ2&SHYX&TYWY&MD&KGZ&LDRS&TDOTK&CSBYOL&dhxy2&lr&hbq&cqzm&fmz&mxsjpc3&hzyz2&xfhzl&ggws&llzj&bbcs&tianzijian&rxjhol&xsxy&qn3&xyqy&tkzc&klxy&nycs&ldj&xthyj&jfzr1&wh2pc&qjsjsun&dczg&xsl1&jxsj2pc&zhpc&dt2pc&hxsypc&ssczpc&lrdjpc&wlqxzpc&plhjpc&klbq&ptyj&jyjh&sgjq&LostArk&xy3&zjzz&SEYX&longvinter&g_bliz&BBR&HypeSquad&cw4bxnfq&VEILEDEXPERTS&WHEREWINDSMEET&THEFINALS&Dysterra&lqgs&NBA2KOL&Tarisland&zzonline&KartRiderDrift&EternalLegend&ARCR&TheReturnofLegend&GOTPC&AlienMarauder&TheFront&DeceiveInc&TheDivision2||TVgame&AC&Mario&EFT&MY2&wu&EvilDead&Horror&hydbk&jjq&lhcm&MountAndBlade&ZL&DontStarve&qjfs&classic&BF&yxshz&ATLAS&AoT&NBA2K&OT&Blood&Human&Enter&RimWorld&gmly&bxysg&DMC&WRBZ&PAL&Uncharted&TLoZ&WWZ&zq&cg&Shenmue&sg&ACS&P5&Splatoon&SMO&Sangokushi&StarCitizen&FF&MiddleEarth&Conan&TWD&Subnautica&SANGO&SoD2&Bor&LoF&Banner&Innocence&Doraemon&GKB&Ghost&bqzkn&Journey&fs&twhj&Scum&zdfw&Isaac&CVI&NIOH&ONI&TAB&GuJian3&PSS&SpellBreak&JUMPDLD&hpkz&tyyx&hddh&nba2khljjc2&klhdt&TLOU2&PCBS&JWE&PvsZ&Spide&Gears&ZGWS&DQB2&Rem&BB&Dish&Kirby&ToW&SotC&ETwK&MYZ&DS&TPH&GK&NG&Sims&TotNS&DA&Bayonetta&JttSP&HKS&SE&SSfR&PLsGo&DriveClub&jxjs&jpfc&Overcooked&TBoD&FtS&COL&MadMax&ME&TSC&DiRT&BTS&Crew&DevilMayCry5&Spore&DD&Rime&ssjjtwo&Inside&sgzj&edwcy&Toukiden&jddj&StrangeBrigade&HoMM&Sonic&Darksiders&jjyx&MetalGear&hsjj&StarWars&ANNO&MsE&WO&OnePiece&PfP&lhzh&Hob&Ancestors&Remw&QuietMan&OPPW&SR&AitD&Alive&PftG&TW&Noita&Rome&DawnMan&ConSim&ESL&Alice&LxL&CBNST&Prey&MMX&Int&FireEmblem&Fable&Outward&Stardew&Effect&SSZSG&Heroes&SAO&BG&Ziggurat&Torchlight&CodeVein&TheEvilWithin&TES&VC&Dauntless&HoF&FoD&LostSphear&Cyberpunk&GF&CP&DQ&HXSGZ&LotF&Biomutant&Pokemon&Disgaea&TLG&NieR&Ys&Surge&JE&KingdomCome&DS3&Phantom&CoC&LiS&TDP&Celeste&GoT&WHF&TWAU&NMS&LEGOW&CapSp&TIF&Deracine&Eastward&EVOTINCTION&Firewatch&F1&RD&Genie>&PC&Ride&SRW&XCOM2&KOEINOBU&SuperMeatBoy&TWoM&SHT&sljt&Frostpunk&AoEIV&CKII&ED&MP&QB&swkj&Bright&OPWS&UH&Beholder&CFB&GE3&Onimusha&Insurgency&KH&Crackdown3&BladedFury&SSBS&Hitman&Mordhau&Rage&Wf&Control&Med&Moons&YCW&Trine&ToolsUp&Sakura&Desp&WARSAW&Otaku&Dark&Ember&KLK&Ori&2020Olympic&WRC&Aegis&DEEEER&Soulstorm&mugen&HomeWork&Football&Post&RoR&Billions&Unheard&Farm&JustDance&ArmA&Pedro&AHT&Kingdoms&Skyhill&Escapists&Oil&BioShock&Divinity&Honor&TABS&Truck&Delivery&Fugitive&mmcy&Wolves&STEEP&Survival&Crysis&FarCry&Holmes&Forager&Skylines&Earth&hdzh&Dungeon&raft&DayZ&60S&RF&DECEIT&theHunter&LC&GD&PK&DC&Cuphead&SoR&MUA&kmg&DW&Anno1800&Yww&CotN&Besiege&Worms&AlanWake&BT&Terraria&EE&Unturned&Factorio&Stellaris&WTLOL&DL&UFC&Portal&Detroit&Castlevania&RL&SpM&Halo&HB&gsczx&Doom&Naruto&JHCC&PA&TF&Kerbal&LoveSim&CookingSim&BumSim&DBX&MarioKart&SimCity&SimFarm&GoatSim&Magicka&EU&TCE&HoboToughLife&ThiefSimulator&TabletopSimulator&AceA&T99&slmmc&QCSZJ&FTL&Undertale&DRGD&CBA&PvZ&CC&BroForce&GGM&HL&Moon&Batman&Refunct&Room&Amnesia&Edith&VH&Shadow&AWO&YJSL&PlanetZoo&TWSJ&LO&VRChat&RichMan&LM&MST&SOSRIMT&Raksasi&Leg&fkjy&DISTRAINT&yxl&Hacknet&SOASER&Starbound&TRS&KF2&YAZD&CH&Kingdom&BCZH&ES2&Mafia&BS&DFZ&swn&BAT&CW&BD2&NB&DDDA&RK&NTF&FFC&NW&HUMANKIND&CT&IR&DBZ&MIKU&BE&THS&MA&Wasteland&BLYWD&OPM&Raji&HERO&PH&Ghostrunner&DRG&mega&Samurai&Forest&kenshi&Hades&Hurtworld&JLDSK&YZBL>FO&fcptdl&jsjc&biped&INVAXION&jjygqsjb&Unrailed&NA&Morta&Moonlighter&Wizard&UnderMine&longya&OG&WJSJ&UE&MFS&CPLR&SHC&BYLM&TMQY&DYZR&RFG&ZCXD&CJR&NTB&TLDG&TJPP&MKKE&HJXD&BNG&GH&SF&METRO&REND&PB&YL&WWPC&ISI&WLOM&TFINF&TCSCB&JS&LMSH&TISLE&BJZD&ygzbdsh&JJYS&DYQZ&CDXQ&hh3&lgzljsj&gcyx&cscyj&czsj&dxc&DYYM&FCDR&ftxl&jtzz&krhc&lmzz&pxsj&FBSM&RJDY&tldl&wglwjz&WPYX&WDZY&xxgbsxz&yxwy&Squad&zzxw&zjsjc&ZJDZY&WZDJ&LUNA&DXM&temtem&ECO&bmcs&FWF&RG&dwlp&dushen&FGSK&FKYS&hdqs&HJMS&jldld&JY&jshmgc&JTG&QL&GZ&mgljsyc&mwsc&KM&qljzz&Depth&SHSD&SLKS&stjk&TTZL&AZ&XZZZ&xydg&YSCQ&YWGD&AUDIOS&SSHD&YYJL&SAS&DirtyBomb&zyzxcdjl&zcjnh&AL&CSZW&ZZT&SRS&Corr&Zom4&GAA&WP&OnAir>WJ&Hellpoint&MO&FGJP<H&BP&FT&Mara&9M&Skul&TMS&JWJL&Neov&WOH&SP&RQFST&ZJJT&SPAZ&Witch&Bunny&Rat&HS&UCH&RFA&CARP&NFB&LJGF&ZE&TP&AST&GCFW&SZDXC&TCSW&MYDL&ALWD&CMD&CA&DITF&CZDL&LATG&FWGF&MLQJ&HAL&GNXD&IoD&Wanba&TRDS&SKYHILLHW&EtG&PAQK&Oth&YJYG&MZSK&BeatMe&HSKN&DMR&Psy&VTLN&ZZCJ&DAH&hmbb&Cl&BSPBR&HWCT&Par&Ret&Dis&North&CarFb&Sur&TWR&Rec&MH&CotDG&Outriders&YYG&LZLM&IRVW&Spe&V4&JXHSJ&TX&ANNIE&Endzone&CHG51&TW101&JSZS&RTGD&WXJS&DGZ&ST&Eden&XKD&COMM&TOR&DLSHZ&zjsp&cqsw&drjh&GA&longhun&Embr&CTS&TTS&WLZJH&YCQ&Astroneer&yxgl&zazg&SBT&XYG&nztq&mfjt&ATS&Titanfall&dddzz&MCS&zjpd&KB2&FAGF&BA&zsqf&PBM&egzd&XYS&DA2&Di&DH&Zhelter&TG&Waking&Evan&Danger&shxd&STA&Blair&bfcz&Craftopia&BN&SJ&TR&DFH&SAR&APD&DENC&bsydhg&TA&xfgc&FPDH&KTZ&WSL&FAI&DSR&Horizon&Path&Stray&Returnal&SABA&LBP&Kena>O&JETT&GodFall&Ash&BUGSNAX&Way&ResidentEvil&Prag&BY&GWHC&Rayman&RCL&PB2&GVH&ASP&LDI&TOF&ABRM&SWXH&TIS&Grift&Haven&THERIF&INMOST&OMTG&EVERSPACE&Grounded&Starmancer&Cris&Soldat2&ASFTU&Shores&Griefhelm&UTE&IH&MRP&Stronghold&Spiritfarer&Backbone&Dreamscaper&Rustler&Eldest&Superliminal&SkateBIRD&clds&ULTRAKILL&BlackBook&Liberated&TIO&GardenStory&OORTR&HELLCARD&TLS&MPMC&Genesis&FAITH&SSRT&WTNL&WINGSPAN&Popup&Chicory&Metamorphosis&FightCrab&THOM&30XX&ExoOne&Omno&Roki&Undungeon&WTPWA&Hellbound&MarsH&Mako&ROAMB&UWA&EFAS&Foregone&Ninjala&Wind&Sub&ghl&TSW&Smars&ER&FTK&XXMM&TVOEC&FallGuys&Cycle&KOF&GOIWBF&EBPPY&THPS&wuhuo&BROTN&PMTOK&CTRONC&KOARER&Cas&TVV&Gods&mwzx&NLDL&NH&Soda&xjth&RBP&pqtc&GJCJ&SDKB&GRWY&Port&FYBZC&EF&SOW&chenfu&WENT&RH&IL&Hunting&Aeolis&Valheim&CARRION&Tribe&Blight&Manor&Animals&Olija&Shell&TRUE&Voidtrain&ShadowW&Creaks&Banners&Rhythm&Necro&RHROT&Windy&Balsa&FTP&Fu&KIWF&NL&Park&xjfpj&MOF&ljcmnq&Atomi&xjxd&FIST&IF&CCC&NOTD&wljt&BU&Albion&Spel&zsjwc&WWE2Kjjc&AFATE&Monst&Uragun&SEEX&Sin&pikmin&LHZZ&MOXIN&Sakuna&Falconeer&NBUP&WDGS&DSP&Firework&GGBH&WBH&MuseDash&tszwy&Carto&ZHMR&ALTF4&FH4&Fearsurrounds&DmCDevilMayCry&SuperMarioOdyssey&SuperMario3DWorld&TheEvilWithin2&MadGamesTycoon2&FarCry6&MonsterHunterRise&HomeBehind2&DevilMayCry2&DevilMayCry3&DevilMayCry4&BlackMythWuKong&Breathedge&CIRCLEEMPIRES&Left4Dead&Nioh2&NINJAGAIDEN&TheThreeKingdoms8&THREEKINGDOMSXIV&Hitman3&ittakestwo&Outlast2&HomeSweetHome&KingdomHeartsIII&LittleNightmares2&BigBia&Revita&LoopHero&Biochemical&DivinityOS2&CyanideHappiness&PuyoPuyoletris2&splatoon2&DeadRising2&Uncharted4&StrongholdWarlords&SpacebaseStartopia&DungeonNoDungeon&EvilGenius2&CrazyWheels&MAQUETTE&SirLovelot&Scrapnaut&Everhood&Faraway&LastCloudia&Fengmanglu&ParadiseLost&Bloodroots&ExplorerYggdrasil&Armoredfront&Combatcycle&CoralIsland&STONEARENA&TheTenants&LuigisMansion3&SilentHillDownpour&SniperContracts2&TotalWarWARHAMMER&DeadRising1&SilentHill2&TheSlormancer&FarmManager&Wattam&IWannaMaker&NieRReplicant&NigateTale&WantedRacoon&TheSignifier&Stela&ENCODYA&ThePathless&AtDeadOfNight&TheShattering&MaidofSker&Taur&Obyeme&ThroughDarkest&ADJUDICATOR&HyperParasite&VaporumLockdown&PumpkinJack&The3rdBuilding&112Operator&Tinkertown&Relicta&ChristmasTina&KATANAKAMI&TheComplex&TTIsleofMan2&GearsTactics&PathOfWuxia&BattleforBikini&Disintegration&CuriousExpedition2&LastRun&Odyssey&DeadRising4&AmongThieves&DrakesDeception&Battlefront&UltimateADOM&DeadAge2&Moonray&Kandagawa&FASTFURIOUS&SpiritFarerlhlr&DEEMOReborn&Visage&Accident&DoorKickers2&DoorKickers&TetrisEffect&RollerCoaster3&JustDieAlready&SDGundamG&Hood&TouHou&EarthsDawn&LaraCroftGO&FateEXTELLA&DYINGReborn&LifeGoesOn&VRWorlds&SummerLesson&FairyFencerF&WorldofFF&CentralFiction&Aragami&LateShift&HaloWars&Bulletstorm&Planescape&Lifeline&2Dark&AnotherAdventure&BeatCop&Styx&ZeroEscape&DayofInfamy&AtelierFiris&SniperElite4&Sangokushi13&RiverCityRansom&BattleSimulator&Guardians&Toukiden2&ScrollsLegends&SenranKagura&GhostReconWildland&WhiteDay&WWE2K&TheWildEight&NightsofAzure&UntilWeDie&AtelierSophie&Splasher&HiddenFolks&SyrianWarfare&WeaponShopFantasy&CriminalGirls&LittleTriangle&TalesofBerseria&DoubleDragon4&TheDaysLongGone&Undergrowth&NineParchments&GloriaSinica&Spellforce3&Warpips&VikingsWofM&Helloneighbor&okamihd&findparadise&Gorogoa&bridgecons&ModernCombat&scpsl&Troubleshooter&GhostnGoblins&SCARLETNEXUS&GuiltyGear&WingDarkness&NHiredGun&Chivalry2&OpenCountry&BackBonejz&RuneKnights&TheLastSpell&TheRed2&ShinMegami3&RisetoGlory&Boundary&trainthree&BATTALION1944&Descenders&Meteor60&RiseIndustry&SIEGE&GoMedieval&Arid&CircleEmpiresH&TerraNil&NinoKuniII&NinoKuni&AttackonTitan2&hhrj2&GunsGore2&HiddenDragon&Higheranimals&Bookofdevil&AshofGods&GhostTale&riseofagonroa&Freeman&SWarriors5&TerraTech&TheUniversim&ResonanceofFate&DeathCathedral&SoulCalibur6&G2Fighter&NotFeedMonkeys&NinetoFive&LabyrinthCity&GuJianqitan3&SunsetOverdrive&PhantomAbyss&IncredibleMandy&RebornCity&BattleFantasy5&SteelRats&KenshiJS&GRIS&gujianyongye&ATOMRPG&EdgeEternity&Beholder2&Below&IrisFall&BloodySpell&DESOLATE&Battlefleet2&Ys9&OrcsDie3&EldestSouls&SniperEliteVR&ForgotCity&TheGreatAce&LastStop&UnboundWorlds&OutofLine&Quarantine&BoomerangX&jointhearmy&WorldforTwo&Stonehearth&CityofGod&TransportFever2&MechWarrior5&SayonaraWild&DJMAXRESPECT&ToolUP&PICOPARK&Brightmemory&DeathsDoor&godsabove&MedievalWars&AOTennis2&TheWhiteDoor&AlphaOne&HeavenDust&RogueCompany&HajimariNOKiseki&Battlefiel&SkywardSword&KingsBounty2&AirtightCity2&GRIME&Patron&Theyarehere&BookofTravels&TALEOFJADE&NightBook&Psychonauts2&FireteamElite&TwelveMinutes&Road96&FORECLOSED&ReshapingMars&DrawGuess&RiMSRacing&NeverReturn&SoulDelivery&theblackbook&Lamentum&Glitchpunk&Back4Blood&Wushu2&TalesofArise&LEMNISGATE&AstriaAscending&TribesofMidgard&Townscaper&Demoncounterattack&ShanHeFuYaoLu&FlingtotheFinish&TheBigconline&Keyword&Listentothewind&Aragami2&Dwerve&Bloodhunt&DeathlyStillness&LifeRestart&TailsofIron&KimtesunoYaiba&GuardiansGalaxy&JianXiaTu&Lostjudgment&mythofempires&RescueParty&BlueProtocol&BLUEREFLECTION&ELDENRING&DARKPICTURESHOUSE&MaidenofBlackWater&GROWINGUP&INTERACTIVEPARTY&TANDEMATALEOFSHADO&BrilliantDiamond&RidersRepublic&Inscryption&BreakingBox&TheRiftbreaker&SettlementSurvival&IdolmasterStarlit&ForzaHorizon5&IICARUS&TimeLoader&GrowSongofEvertree&CenturyAgeofAshes&LiuYin&SyberiaWorldBefore&TavernMaster&CALLOFDUTYCOD&ProntyFishyAdventu&AgeofDarknessFinal&FateSeekerII&HaloInfinite&VoiceOfCards&JurassicWorld&SmurfsMission&LegendofTianding&LensIsland&Moncage&TheLegendofNayutaB&RuneFactory4&ThunderTierOne&ShinSangokumusou8E&TheLegendofHeroesZ&Propnight&TrashSailors&InternetCS&WeirdWest&TheAnacrusis&ExpeditionsRome&DiplomacyNotOption&PokemonArceus&TheDayBefore&HeavenDust2&WordGame&ForbiddenWest&DyingLight2&Borderlands3&GodofWarRagnarok&HiddenDeep&SIFU&Undecember&SHOWAAMERICANSTORY&TinyTina&DreadHunger&VampireSurvivors&XIAYIXING&BabylonFall&STRANGEROFPARADISE&HordeCore&LEGOStarWars&FirstClassTrouble&TheForgottenLand&DivinityChronicles&PandemicTrain&FORSPOKEN&YoungSouls&TheCycleFrontier&CodeBREAK&CoreKeeper&IndiesLies&HogwartsLegacy&SANFU&TalesofWild&BountyGame&ODINValhallaRising&MidnightGhostHunt&Shenjianzhuan&ABRISS&Loopmancer&GlimmerinMirror&DuneSpiceWars&Knightfall&IceSitruuna&Clocker&TrigonSpaceStory&Lumote&GolfGang&WildcatGunMachine&Insurmountable&VELONE&GodlikeBurger&DeckofAshes&Dorfromantik&Keplerth&TwoPointCampus&HeartofChernobyl&ShenDuBuLiangTan&TrektoYomi&TheCentennialCase&GothamKnights&Starfield&YinMiDeJiaoLuo&TheJianghu&CrayonXiaoxin&SaltandSacrifice&Vampire&SecretOpera&TheQuarry&LIVEALIVE&soulhackers2&FireEmblemWarriors&DigimonSurvive&DioFieldChronicle&2089borderscape&Nightingale&Ilysia&ProjectQ&Peglin&TheSerpentRogue&PummelParty&Holomento&MetalMind&MIR4&WeWereHereF&AshesofCreation&dhjjw&sodacrisis&Outpost&MADiSON&TheBridgeCurse&Hellslave&TaikouRisshiden&Overprime&SonsOfTheForest&Marauders&Decision&Dolmen&Wildfrost&CardShark&Avatar&WarfareSimulator&yixianpai&Pwnk&VRising&NinjaTurtles&MarvelSnap&SoulDossier&CrossGate&20MinutesTillDawn&DMHDXY&ARENA&CallistoProtocol&MarioStrikers&NewPalHotel2&RomanRenaissance&StormGate&mishi&theangler&MasterDuel&XXLZZ&QFBTT&CultoftheLamb&Thymesia&PowerWash&GutsAndGoals&GhostWatchers&BATTLEALLIANC&tycoon&DGDQL&Eagarlnia&djhzclybn&NileWarriors2&EvilWest&PlayAgain&Dinkum&Rumbleverse&SpiritofIsland&Rooted&ExpeditionAgartha&ShipofFools&PlateUp&LostLight&RoboRevengeSquad&Tiandiguixu&WinterSurvival&DuneAwakening&Everywhere&LordsofFallen&SengokuDynasty&HighonLife&LiesofP&Moonbreaker&ParkBeyond&TheOutlastTrials&40KDarktide&FarthestFrontier&BloomingBusiness&Steelrising&Isonzo&Scorn&Requiem&SonicFrontiers&LastofUs&YouSuckatParking&GWYF&WanderingVillage&ACJADE&REDFALL&TEARSKINGDOM&BJXYL&Shatterline&Wolong&KAKU&AtomicHeart&FromSpace&ATLASFALLEN&Brotato&FueledUp&SundayGold&Batora&FoodTruckSimulator&BREAKOUT&shiling&DespotGame&Bibots&Warhaven&ScarletandViolet&TheFirstDescendant&Eville&BeneathOresa&MianJuGuMu&GUNGRAVEGORE&TheDevilinMe&Kingshunt&MarvelMidnightSuns&WeirdRPG&THEPERCEIVER&EvercoreHeroes&MomentinEast&SoulstoneSurvivors&McPixel3&FrozenFlame&ASTLIBRARevision&TheKnightWitch&IXION&BraveryandGreed&TheGatheringArena&zjyqk&douxian&ffjy&SJHDYX&DwarvenSkykeep&lhxxl&Kainga&GoonyaMonster&DivineKnockout&wxnn&TheWitcher&potioncraft&Spiritle&DarkandDarker&Pragmata&KTJL&Jianghu11&ARK2&ChildrenSilentown&XDefiant&OddBallers&ACMirage&WJYX&TravelerofWuxia&Warlander&LevelZero&HiFiRush&Inkulinati&WildHearts&Afterimage&ScarsAbove&Season&TaoistofLegend&CrazyforLove&PacificDrive&AnthologyofFear&Blanc&PAYDAY&FloatingLife&404GAMERESET&UnchartedWaters&CrimeBoss&AtelierRyza3&FinalFantasyXVI&StreetFighter&GUIZU&Tchia&HerosAdventure&FATALFRAME&LastEpoch&Gollum&Ravenbound&MysteryMansion&MeetYourMaker&TEKKEN8&SystemShock&Exoprimal&FlameKeeper&PrisonLife&Innchanted&LightyearFrontier&TheGreatWar&Palworld&ScreamingChicken&ForTheKing&LifebyYou&StrayBlade&SpeedStorm&YokaiWatch&FishingSimulator&Lostlands&MenofWar&InsidetheBackrooms&Eresys&DrakesOdds&HARDCORE&BBHMYZN&PJXQ&PaxDei>ZHG&MXW&KLCS&GodofRock&QSD&PetHotels&Teravit&HSLM&TheMountainKing||wzry&LOLM&hpjy&aqtw&ht&hyrz&smzhsy&HarryPotter&EGAME&mdnf&JGAME&tdsy&yuanshen&HHWRXHX&wgjx&htzx&HLMJ&wzrpg&ZGXQ&tysy&DFTK&xyzx&phone&APEXM&mhxy&qqfcsy&dwrg&hlddz&hyld&yys&LRS&jj&mhxzx&jbdj&rlybtdsjb&jddsaef&yrzx&zzq&bhxl&fydxd&cloudgame&PPKDCSY&stzb&glgs&hszz&wpzs&ChessRush&rzbxs3&sw3&mhmnz&skzq&jyyz&hhwrsyz&BWP&qqdzz&yxs&mykdb&MHXX3D&KDXLC&jw3zjjh&blct&jyjy&xxajh&mhls&lrlr&mrzh&yzs&jzpaj&JDZC&DLHGL&tcsdzz&sdsxs&wd&mlbbsy&zqnba&LXQW&rxjl&rmsy&mlzh&xcpd&jtlqsy&MNSJ&hyxd&zspms&dhxy2kdb&fifazqsj&jl&yiqilaizhuoyao&mrfz&zyhx&huoyingrenzheOL&ymjh&wmcq&wmsjsy&kof98&zzsz&mtfsy&srh&lhjx&xjcs&liuxinghudiejian&tssy&tpbsn&TTT&sqsd&kybc9&rpgsy&ttkp&yh&lje&qnyhsy&jdzc2&zzywm&jqys&cqsy&hlsj&Majsoul&ecysy&tianlongbabuonline&zt2sy&wwzw3D&wlwz&MT4&skzh&FZ&wdyz&sjdg&4399yx&shnycs&crlq&yuanqiqishi&hjolsy&hyxhn&ZWDZJS&zjz&elsfkhyj&ezfy2&swy&lzgsy&sezg&lzzqzz&xurong&ccymf&jjssjd&qjjx&skygy&yxwjdlj&dfzj&slcbsy&jszh<yx&xunxian&waddz&ttxq&wgjy&frxy&mhzx&zhyhc&bsymg&jtjs&xylz&tldk2&lzhx&qpzdj&YJDWB&jwszjdy&nzhh&jianxiaqingyuan&yhzd&qhmy&SGSSY&Roblox&dieryinhe&zqsy&yyzy&sm&jzds&wpzz&qldyxbdjz&QQxwSY&ymrdzz&qmqz2&qsmysj&lztg&TLBB&tkdjz&hyj&dlsy&qclq&zjz2spr&yqyn&sdyxl&fjdz2&arlsbd&yqlfc&mjll&fzdl&jsdj&xyjlwys&WLQP&fsbnsonline&yjnsh&jl2&ztyx&srhsy&jgjh&blr3&zmq&lyzd&ywsy&jdhcr&BLQX&cqsjsy&hwz&fkdwcscjnh&lszw&wxysy&yxasg&yhjy&qycnlzz&gdxf&csmqs&lswz&smbbxy&xjqxz4&grsm&cahsh&lqsy&ysdl&pskqy&wsm&nntg&ysswz&ftxd&gqdfzz&qtsy&qlyfz&lhj&HAIDAOJIYUAN&rxzq&mygj&lszt&ymssg&jszd&kddj&wpys&cbqft&yyjh&gmdl&xyz&diabloimmortal&ldjsy&ysj&yln&yhyx&xsmdl&gzlj&sgzzlb&mezy&slwg&kdjx&qylh&tdj&yysygw&lxfb&Disorder&ygmdzqsjs&hczs&atsj&ysczg&ryzhg&tlbbsy&zjls&dqdgzdgfy&wzq&wq&kjtxd&mxxdl&sgzhxdl&zmws&qqxd&FXBP&LZCC&zfyby&XSDQXZ&ydzz&zxsy&wxsh&fhzz&lmjx&xgczy&mhhy&zqwn&MYZREN&JNBJT&lzg2sy&bxzl&zjqx&GNSBT&QYN&wdxk&sgyx&jsz&zsgwsb&dhxysy&XZ&YZR3&kdjh&SNSGZ0&mgzz2&kxxxl&BR&zznh&zsg&hsqsl&wcfhl&xjxqysy&xydj&dcxhjycj&jrcs&xdwzx&cfxf&csxb&ynxy&xswc&SJZ&skhlr&HJJH&yzjlzl&hqxy&hdqb>ll2&bgyry&fswqg&xjqxzjy&mysy&dtwssy&tlrysy&ybyq&ybyq2&plm&yyd7rzd&tkl&bjzl&dtpk&tdydxc&JWS&LHCX&TKWD&egzdsy&zjsjsjz&fsbns&mwcjzbz&ygcq&xssh&ab&ngxs2&kbzy&tsjy&sslj&xyneg&shjh&nslm2&snxyj&snsgz&snsgz2&bksyyd&gqs&hsqj&jzdbz&mskp&qyq&sydpx&sz&shuojian&xmddz&QMXJD&qmqj2&yuanshichuanqi&dxcb2&jhzd&mxsj3&YSQTH2&hhcq<cq&txcq&wmcq1&ygcq1&yxcq&zxcq&jxqst&mxysy&mjxwzjyjj&lxywq&zmr&gjjh&jlzj&ydydja&zhjwsq&dldldszl&dldlwhjx&dldl2jstm&yxqst&tzlr&gdzz&mhjy&rmjh&lxyxt&tldk&jm&mxywk&zsjx&jzxjzh5&rydts&ahdts&gjqwlh5&rxzg&lycq&qz&sjtl&zlgl&frxxzgjbh5&shtz&sssfh5&wdcq&smcs&dcz&cllrh5&gcld&yxzbqh5&dhd&wddgh5&dmbj&cgfsl&rogqhy&csj&kyxh&qhjx&mrsc&wxs&dxcb&akdy&jylh&mwysq&wpgx&ttdbl&hdqy&gymc&xljx&dtszj&hjcj&mf&zdsnpk&bkmdrx&jszzj&qztx&smbbxsj&xxqp&jsxw&ydcs&dldl&yqklnw&pxr&kgqgj&djlwol&jjxq&dwct&tjb&jll&qjzj&wzxx&yjxx&hxjy&xxtjd&zmxyol&hdczjh2&rxsj&lzzz&oxqjw&mlqy&weplanet&btdbz&htrj&aqcssy&ydwx2y&sgzjxz&zdblh&qmzs&xyoxj_qxsy&jkxm&qmz&mmkfw&hysxzy&emmj&ysdmg&gylj&sndwz&jjals&bzfgx&xzbd&cswb&mzsyz&lrdj&lxtsxwdyq&PUBGNS&hyzz&dbzx&bbd&hlwxd&fsdmv&wzsj1&zmxy4&zmxywz&zsyj&MarvelSuperWar&LHRW&xxcz&ytzg&hjczjh&xyjjzy&lzjx&tbyl&rxhj&btxd&hzzzcz&NSHM&lyzt&zjlm&haygm&hallw&lygyd&mj&snqx&ymsd&yj&nhsywx&fhzj&rgyszyess&nsxq&xbxxz&ycyq&hlsg3&lhbj&bzyxt&alx&zswg&jdws&tlmwy&mqxq&bqdwll&Gamer&wxwy1&jdzjjb&lzsll&qcfy&mfdx2&lyxy&xksd&yyjhsy&tgbfl&fzjt&qwsk&whncd&yfdgs&bnyly&ctlyy&wats&sszm&zyj&qqlm&slsy&jhyy&WPJS&wmyzf&jubao&ycdjh&SJJQ&blhxsy&bcjh&300dzz&2047&jdzddzz&hxq&sycjc&PokemonUNITE&wjxt&ysfj&hmby&evexzqywjxh&xyzjh&gyyzl&tlgd&qxfz&fzjh&T3&zwdzjs2&msyxz&qqyx&djsyhyjs&czqst2&ycjq&ycyy&tyj&sjwy&bfzy&whrhx&mzc&modou&sdsxszyz&wdsjp&cfsyts&projectgaia&bhxy2&dldlhsdj&xbwy&yycydzj&gmlycsmz&mwdj&nnzdxsg&fzyzh&lsccz&dyqlb&cbcsdld&yjdnxsxx&wshhj&jccy&mgqy&jtzqyxsd&tyqk&xycs&dhmme&snkz2020daydh&frmsscwy&mxrjs&jmlzj&szqy&syzg&myrzx&lnzs&sgyytswj&cjjy&hjjb&qxsd&cljj&stedl&dmxkl&tgjy&hhqw&setdl&bxzd&oxmhj2&kkbh&lmz&hyrjgd&hyzzcz&jdyy&jxsj3&zhyhc2&gctx&sgwg&cbhx&fzzl&yjsws&mcdzjs&xssd&xxdyfz&wjdlglr&gjsdzz&cmsgz&sxsn&aehy&wlyxc&wmdbz&jessj&zwmgc&nyzx&synn&wsmj&zgyx&cjjlsb&qlfhl&ydxy&wzqy&jzry&djlwonline&rxjx&mncswssc&jzsgz&cfdg&tgxz&cahx&hjzgwx&cljt&fhcsg&mtyhdt&zjzc&fszx&mtj&mjfy&wzzx&ldaqxy&mjzz&hwxq&zasn&bxjh&fx&fxdsht&jsfhlc&sglhz&fknsg3&gjj&gjqtmyr&llcy&clsy&hyrzrzxsd&zhyry&mryz&zqsg2&gddtk&zcyxwy&xdldl&yqlfc2&dssc&xxhhswc&zcsg&wyddbkk&hyldtxb&xxyz&mxgj&xbbcq&sgzj2&alsdgd&wdzj&zzwg&wsddj&xczwc&wyftshz&styy&yjfb&mlgwy&amlz&mxgs&olzz5dg&ghyj&jnbg2&dhhtxwy&mrlx&wz7nhdzn&hhrj&yqcrzqzn&wgbwz4&bsjzl&ygsz&mslf&atmyzyx&xsgs&nk&chsg&atmxlol&HXDDZ&hhwm&jzymq&jtzq&qt&trssgshc&xlzz&lzzx&mxw3ol&cjhym2&wjhd&mj2&htxxj&wdqs&hyrzdfdj&yqqsxz&mxw2&mjj&tfzg&jlsg&wzfrnxn&xxwqn&pwz&ps&bcfdgs&hcrlm2&hyrj&sgzlbc&llycjh&fcptdlsy&zjtx&skqhjl&qzls&cjgzj&ddt&dhma&demmogsxl&cydgd&sklr&mmxd&gghjmx&sgzjjx&cmstg&qsfz&xjnz&dyddj&cyzj&ymqggs&lfl&zmtm&lovelivexyoxj&ysl&hesmsy&mlbblr&xzj&dject&xzjh&cfbmxj&yqcrzyzx&hjchg&xhx&dzyzcmllc&lzcq&hsahc&mlbbgl&zszz&ryxsg&zmzxynbt&dfjs&dzpd&xdmbj&XYCQSY&yhtj&byswz&mxxfd&bhxqtd&wxcy&wly2&blmn&dxcb3hzs&lszl&wlxx&tmyx&ydqsl&haygmsy&gywzsbcslmzds&ynds&jwdzg&warmsnow&mnxshx&Naraka&wqmt&ngqr&skzy&hxshz&CFSY&xtlbbsy&wszj&sklr3&bwlb4&cbjq&mrfzzmd&TOD&CQTX&mrjy&TotalFootball&yszt&atmjj&jhzd2&h&qmdgl&hhwmxzz&GunfireReborn&FlashParty&g_hysg&g_wyqt&mcdztzmwd&sgzjsy&BOTC&jql&warcraftrumble&QMPPCR&RECODM&zhsy&ipyx&blywdsy&cm&QPYX&ddhcr&warconvention&abdmxgd&jlsy&lzgsj&taptapxy&g_yhlhwx&AUDITION&slwz&lmzh&hxzz&yscqr&fdmxforager&dzxywpdj&llzjwzhpdsj&cfbmf&ymrdzz2&jhcoa&dyzl&xhbjq&zmyzp&qmhhzzmnq&zj11rgjqh&kzysqh&jws2&lczb&wjmtgl&FrostpunkSLG&ZERO&wzwxq&dhpx&srjh&Yanglegeyang&lwzj&xxyg&SpaceLeaperCocoon&SLG&Infinitykingdom&DHGB&tszz&IslandAliance&hoopheroes&MetalSlug&g_ddtdmx&sgzjl&g_jyhx&BJHL&zdwj&g_sgzzqb&yqcrsj&GooseDuck&rzggl&SuperSus&tlbb2flzt&wzcq&P5X&g_bj&mwx&DHUH&ZOOBA||ecy&yqk&XX&music&HW&ms&ip&xdpd&yinyu&dance&QSH&dtxs&yltj&xy&ysny&WHFZ&WHTYXY&HBDX&HAU&SUFE&CCNU&WIT&HBUE&WUT&HU&WVCSE&HAFA&WUB&WSU&WRVCT&JU&WHU&HUST&HEUET&BSU&BCU&SCMZU&XDU&NEU&DMU&CUGWH&ECJU&SJU&NU&SU&CUST&HCP&WHC&JCMAMC&JMZYXY&GYET&QAU&ZKY&USC&HEBUST&SDADA&BUAA&GXLG&BIFT&HBUT&XUST&XJNU&TSZYU&XJAU&CJXY&XGY&XLG&SHZU&XJCP&XJTYZYJSXY&XJUFE&XJMU&XJU&HENU&QLU&QUST&YRCTI&HUMC&AHPU&QU&SDJTXY&HIE&SXIT&XAWL&GHUT&HQU&HUTETC&ZSU&BTXX&SUMC&WITPT&CUPT&YNU&SCFTC&CQUT&CUMC&TIVC&NBU&JUFE&SCCM&WCCVT&g_cgtj||yz||wh&qezb&smkj&shrw&car&kepu&jlp&DYGW&jiaoyu||paidui&DIANT&yiqiwan&KHCD&Sing&cpdd&sweettalk||yyjy&yyzs&lianmaihudong&ylkh||xxdd&znl||eracing||jdy", + "分类截取模式": "0", + "分类列表数组规则": "data.list", + "分类片单是否Jsoup写法": "1", + "分类片单标题": "roomName", + "分类片单链接": "rid", + "分类片单图片": "roomSrc", + "分类片单副标题": "nickname", + "分类片单链接加前缀": "https://www.goodiptv.club/douyu/", + "分类片单链接加后缀": "#EPG线路$http://epg.112114.xyz/douyu/'input'#AOIS线路$https://www.aois.eu.org/live/douyu/'input'", + "搜索请求头参数": "User-Agent$手机", + "搜索链接": "https://m.douyu.com/api/search/liveRoom;post", + "POST请求数据": {"sk":"{wd}","offset":0,"limit":20,"did":"bf1f5579c0b2f6066af0bee200051531"}, + "搜索截取模式": "0", + "搜索列表数组规则": "data.list", + "搜索片单是否Jsoup写法": "1", + "搜索片单图片": "roomSrc", + "搜索片单标题": "roomName", + "搜索片单链接": "roomId", + "搜索片单副标题": "nickname", + "搜索片单链接加前缀": "https://www.goodiptv.club/douyu/", + "搜索片单链接加后缀": "#EPG线路$http://epg.112114.xyz/douyu/'input'#AOIS线路$https://www.aois.eu.org/live/douyu/'input'", + "链接是否直接播放": "1", + "直接播放链接加前缀": "", + "直接播放链接加后缀": "", + "直接播放直链视频请求头": "", + "是否开启手动嗅探": "0", + "手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos#112114.xyz/huya#live.52sf.ga", + "手动嗅探视频链接过滤词": ".html#=http" +} \ No newline at end of file diff --git a/js/s/星空影视.json b/js/s/星空影视.json new file mode 100644 index 0000000..603dccd --- /dev/null +++ b/js/s/星空影视.json @@ -0,0 +1,7 @@ +{ + "请求头": "User-Agent$MOBILE_UA", + "编码": "UTF-8", + "分类": "电影$1#电视剧$2#综艺$3#动漫$4#", + "分类url": "http://www.ipcname.cn/search.php?page={catePg}&searchtype=5&tid={cateId}&area={area}&yuyan={lang}", + "简介": "己所不欲,勿施于人" + } \ No newline at end of file diff --git a/js/s/星辰.json b/js/s/星辰.json new file mode 100644 index 0000000..6b6e954 --- /dev/null +++ b/js/s/星辰.json @@ -0,0 +1,7 @@ +{ + "请求头": "手机", + "简介": "剧情介绍:+detail-content\" style=*>&&", + "播放标题": ">&&<[不包含:鉴飽#視频]", + "分类url": "http://www.grjsm.com/show/{cateId}-{area}--{class}-----{catePg}---{year}.html", + "分类": "短剧$25#电视剧$2#电影$1#动漫$4#综艺$3" +} diff --git a/js/s/星辰影视.json b/js/s/星辰影视.json new file mode 100644 index 0000000..642ac0e --- /dev/null +++ b/js/s/星辰影视.json @@ -0,0 +1,8 @@ + { + "请求头": "User-Agent$MOBILE_UA", + "编码": "UTF-8", + "分类": "电影$1#连续剧$2#综艺$3#动漫$4#", + "分类url": "http://ljmovie.com/list/{cateId}-{catePg}.html", + "简介": "美人似花娇艳绽放,此情难消,愿与君缠绵不断。 + " + } \ No newline at end of file diff --git a/js/s/来看.json b/js/s/来看.json new file mode 100644 index 0000000..d77e2e4 --- /dev/null +++ b/js/s/来看.json @@ -0,0 +1,11 @@ +{ + "简介": "剧情介绍:+check selected\">&&", + "数组": "public-list-div public-list-bj\">&&", + "图片": "data-src=\"&&\"", + "标题": "time-title hide ft4\" href=*>&&", + "副标题": "public-list-subtitle cor5 hide ft2\">&&", + "线路数组": "", + "播放数组": "anthology-list-play&&", + "分类url": "https://lkvod.me/show/{cateId}-{area}--{class}-----{catePg}---{year}.html", + "分类": "电视剧$2#电影$1#动漫$4#综艺$3" +} diff --git a/js/s/桃子影视.json b/js/s/桃子影视.json new file mode 100644 index 0000000..4a9be5e --- /dev/null +++ b/js/s/桃子影视.json @@ -0,0 +1 @@ +{"请求头":"手机","简介":"剧情介绍:+detail-content\" style=*>&&","分类url":"http://www.mpfpj.com/vodshow/{cateId}-{area}--{class}-----{catePg}---{year}.html","分类":"短剧$39#电视剧$2#电影$1#动漫$4#综艺$3"}}, \ No newline at end of file diff --git a/js/s/樱花动漫.json b/js/s/樱花动漫.json new file mode 100644 index 0000000..317804e --- /dev/null +++ b/js/s/樱花动漫.json @@ -0,0 +1,6 @@ +{ + "简介": "", + "数组": "", + "分类url": "http://www.yinghuadm.cn/show_{cateId}--{by}-{class}-----{catePg}---{year}.html", + "分类": "日本动漫$ribendongman#国产动漫$guochandongman#动漫电影$dongmandianying#欧美动漫$oumeidongman" +} \ No newline at end of file diff --git a/js/s/樱花影视.json b/js/s/樱花影视.json new file mode 100644 index 0000000..2ca5775 --- /dev/null +++ b/js/s/樱花影视.json @@ -0,0 +1,5 @@ +{ + "线路标题": "

&&

", + "分类url": "https://yinghuadm.fun/vodshow/{cateId}-{area}--{class}-----{catePg}---{year}.html", + "分类": "电影$1#剧集$2#综艺$3#动漫$4" +} \ No newline at end of file diff --git a/js/s/欧乐.json b/js/s/欧乐.json new file mode 100644 index 0000000..4f90535 --- /dev/null +++ b/js/s/欧乐.json @@ -0,0 +1,10 @@ +{ + "简介": "剧情介绍:+fed-part-both fed-text-muted\">&&

", + "数组": "fed-col-xs4 fed-col-sm3 fed-col-md2\">&&", + "图片": "data-original=\"&&\"", + "标题": "fed-part-eone\" href=*>&&
", + "副标题": "fed-text-center\">&&", + "线路数组": "fed-btns-info fed-rims-info fed-part-eone&&", + "分类url": "https://www.ifuntv.cc/f/area/{area}/class/{class}/id/{cateId}/page/{catePg}/year/{year}.html", + "分类": "短剧$32#电视剧$2#电影$1#动漫$4#综艺$3" +} diff --git a/js/s/歪片影视.json b/js/s/歪片影视.json new file mode 100644 index 0000000..f8c9286 --- /dev/null +++ b/js/s/歪片影视.json @@ -0,0 +1,14 @@ + { + "请求头": "User-Agent$MOBILE_UA", + "编码": "UTF-8", + "主页url": "https://www.waipian30.com/", + "数组": "/video/&&", + "标题": "title=\"&&\"", + "图片": "data-original=\"&&\"", + "副标题": "item-note\">&&<", + "链接": "/video/+&&\"", + "跳转播放链接": "urlDecode(var player_*\"url\":\"&&%26)", + "分类": "电影$dianying#电视剧$juji#短剧$duanju#综艺$zongyi#动漫$dongman#纪录片$jilupian", + "分类url": "https://waipian30.com/show-{cateId}-{area}-{by}-{class}-----{catePg}---{year}/", + "简介": "introduction-content\">&&" + } \ No newline at end of file diff --git a/js/s/毒舌.json b/js/s/毒舌.json new file mode 100644 index 0000000..56fa033 --- /dev/null +++ b/js/s/毒舌.json @@ -0,0 +1,13 @@ +{ + "数组": "/detail&&", + "标题": "*title\">&&<", + "简介": "detail-desc\">&&", + "图片": "https://vres.wbadl.cn/vod1/vod/cover/+vod1/vod/cover/&&\"", + "链接": "/detail/+/&&\"", + "导演": "导演:&&", + "演员": "演员:&&", + "线路数组": "source-item-label&&", + "播放数组": "episode-list&&", + "分类url": "https://www.dushe03.com/show/{cateId}-{area}-{class}--{year}-2-{catePg}.html;;d0", + "分类": "电视剧$2#电影$1#动漫$3#综艺$4#短剧$6" +} diff --git a/js/s/毒舌影视.json b/js/s/毒舌影视.json new file mode 100644 index 0000000..07cdd12 --- /dev/null +++ b/js/s/毒舌影视.json @@ -0,0 +1,52 @@ +{ + "作者": "", + "站名": "XBPQ影视", + "请求头": "User-Agent$MOBILE_UA", + "编码": "UTF-8", + "主页url": "https://www.thshic.com/", + "首页": "120", + "起始页": "1", + "分类url": "/thssw/{cateId}-{area}-{by}-{class}-{lang}-{letter}---{catePg}---{year}.html;;mrc", + "分类": "电影$1#电视剧$2#综艺$3#动漫$4#短剧$5", + "二次截取": "", + "数组": "cover-img\"&&&&>thsplay#.html>>-1-1.html]", + "影片年代": "-------------*.html\" target=\"_blank\">&&", + "影片地区": "--*-----------.html\" target=\"_blank\">&&", + "多线数组": "
  • &&
  • ", + "多线链接": "href=\"&&\"", + "线路二次截取": "active col-flex wrap&&", + "线路数组": "", + "线路标题": ">&&", + "倒序": "0", + "播放列表": "[不包含:дрр滈凊]", + "播放标题": ">&&<", + "播放链接": "href=\"&&\"", + "跳转播放链接": "var player_*\"url\":\"&&\"", + "搜索请求头": "User-Agent$MOBILE_UA", + "搜索url": "https://www.thshic.com/thssc/{wd}----------{pg}---.html", + "搜索模式": "1", + "搜索后缀": "", + "搜索二次截取": "", + "搜索数组": "cover-img\"&&&&&&<", + "分类": "电影$1#连续剧$2#综艺$4#动漫$3#", + "分类url": "http://www.hemaqi.com/tags/{cateId}-{area}-------{catePg}---{year}.html", + "简介": "爱情如诗,情浓意长,愿与你一同咏唱此曲长长久久。 + " + } \ No newline at end of file diff --git a/js/s/流星影视.json b/js/s/流星影视.json new file mode 100644 index 0000000..3e5d63f --- /dev/null +++ b/js/s/流星影视.json @@ -0,0 +1,9 @@ +{ + "请求头": "User-Agent$MOBILE_UA", + "编码": "UTF-8", + "线路标题":"河马-+>&&<", + "分类": "电影$1#连续剧$2#综艺$4#动漫$3#", + "分类url": "http://www.hemaqi.com/tags/{cateId}-{area}-------{catePg}---{year}.html", + "简介": "爱情如诗,情浓意长,愿与你一同咏唱此曲长长久久。 + " + } \ No newline at end of file diff --git a/js/s/海纳影视.json b/js/s/海纳影视.json new file mode 100644 index 0000000..4b90fec --- /dev/null +++ b/js/s/海纳影视.json @@ -0,0 +1,6 @@ +{ + "简介": "简介:&&", + "数组": "row\">&&", + "分类url": "https://www.hainatv.net/index.php/vod/show/area/{area}/id/{cateId}/lang/{lang}/page/{catePg}/year/{year}.html", + "分类": "电影$1#电视剧$2#综艺$3#动漫$4#短剧$59" +} \ No newline at end of file diff --git a/js/s/熊猫.json b/js/s/熊猫.json new file mode 100644 index 0000000..f44a66c --- /dev/null +++ b/js/s/熊猫.json @@ -0,0 +1,9 @@ +{ + "请求头": "手机", + "简介": "剧情介绍:+description\">&&", + "数组": "module-item\">&&module-item-text", + "图片": "data-src=\"&&\"", + "副标题": "video-class\">&&", + "分类url": "https://jxhwsl.com/index.php/vod/show/area/{area}/class/{class}/id/{cateId}/page/{catePg}/year/{year}.html", + "分类": "短剧$99#电视剧$79#电影$61#动漫$93#综艺$88" +} diff --git a/js/s/爱你短剧.json b/js/s/爱你短剧.json new file mode 100644 index 0000000..c7948e9 --- /dev/null +++ b/js/s/爱你短剧.json @@ -0,0 +1,81 @@ +{ + "规则名": "爱你短剧", + "规则作者": "香雅情", + "请求头参数": "MOBILE_UA", + "网页编码格式": "UTF-8", + "图片是否需要代理": "否", + "是否开启获取首页数据": "是", + "首页推荐链接": "https://ainidj.com/", + "首页列表数组规则": "body&&.module-items", + "首页片单列表数组规则": ".module-item:lt(12)", + "首页片单是否Jsoup写法": "1", + "分类起始页码": "1", + "分类链接": "https://ainidj.com/vodshwo/{cateId}--------{catePg}---.html", + "分类名称": "穿越&战神&重生&爱情&萌娃&神医&古代&玄幻&言情", + "分类名称替换词": "fenle&fenlei2&fenlei3&fenlei4&guda&shenyi&gudai&xuanhuan&yanqing", + "筛选数据": {}, + //"筛选数据": "ext", + //{cateId} + "筛选子分类名称": "", + "筛选子分类替换词": "", + //{class} + "筛选类型名称": "", + "筛选类型替换词": "*", + //{area} + "筛选地区名称": "", + "筛选地区替换词": "*", + //{year} + "筛选年份名称": "", + "筛选年份替换词": "*", + //{lang} + "筛选语言名称": "", + "筛选语言替换词": "*", + //{by} + "筛选排序名称": "时间&人气&评分", + "筛选排序替换词": "time&hits&score", + "分类截取模式": "1", + "分类列表数组规则": ".module-items&&.module-item", + "分类片单是否Jsoup写法": "是", + "分类片单标题": ".video-name&&Text", + "分类片单链接": "a&&href", + "分类片单图片": ".lazy&&data-src", + "分类片单副标题": ".module-item-text&&Text", + "分类片单链接加前缀": "https://ainidj.com", + "分类片单链接加后缀": "", + "搜索请求头参数": "User-Agent$MOBILE_UA", + "搜索链接": "https://ainidj.com/vodsearch/{wd}----------{SearchPg}---.html", + "POST请求数据": "", + "搜索截取模式": "1", + "搜索列表数组规则": ".module-items&&.module-search-item", + "搜索片单是否Jsoup写法": "是", + "搜索片单图片": ".lazyload&&data-src", + "搜索片单标题": ".video-info&&h3&&Text", + "搜索片单链接": "a&&href", + "搜索片单副标题": ".video-serial&&Text", + "搜索片单链接加前缀": "https://ainidj.com", + "搜索片单链接加后缀": "", + "链接是否直接播放": "否", + "直接播放链接加前缀": "", + "直接播放链接加后缀": "", + "直接播放直链视频请求头": "", + "详情是否Jsoup写法": "是", + "类型详情": "", + "年代详情": "", + "地区详情": "", + "演员详情": "", + "简介详情": ".video-info-main&&.video-info-content&&Text", + "线路列表数组规则": ".module-tab-items&&.module-tab-item", + "线路标题": "Text", + "播放列表数组规则": "body&&.module-player-list", + "选集列表数组规则": ".scroll-content&&a", + "选集标题链接是否Jsoup写法": "是", + "选集标题": "a&&Text", + "选集链接": "a&&href", + "是否反转选集序列": "否", + "选集链接加前缀": "https://ainidj.com", + "选集链接加后缀": "", + "分析MacPlayer": "否", + "是否开启手动嗅探": "否", + "手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos", + "手动嗅探视频链接过滤词": ".html#=http" +} \ No newline at end of file diff --git a/js/s/爱我短剧.json b/js/s/爱我短剧.json new file mode 100644 index 0000000..cf3bd09 --- /dev/null +++ b/js/s/爱我短剧.json @@ -0,0 +1,25 @@ +{ + "请求头": "User-Agent$MOBILE_UA", + "主页url": "https://www.aiwodj.com", + "数组": "lazy lazyloaded&&>]", + "图片": "data-src=\"&&\"", + "标题": "title=\"&&\"", + "链接": "href=\"&&\"", + "副标题": "+module-item-caption\">&&&&
    ", + "播放列表": "", + "播放标题": "span>&&", + "播放链接": "href=\"&&\"", + "跳转播放链接": "urlDecode(var player_*\"url\":\"&&\")", + "搜索url": "https://www.aiwodj.com/vodsearch/{wd}----------{pg}---.html", + "搜索数组": "lazy lazyload&&>]", + "搜索图片": "data-src=\"&&\"", + "搜索标题": "+title=\"&&\"", + "搜索链接": "href=\"&&\"", + "分类url": "https://www.aiwodj.com/vodshow/{cateId}--{by}-{class}-{lang}----{catePg}---{year}.html", + "分类": "穿越&战神&重生&爱情&萌娃&神医&古代&玄幻&言情", + "分类值": "fenle&fenlei2&fenlei3&fenlei4&guda&shenyi&gudai&xuanhuan&yanqing" +} \ No newline at end of file diff --git a/js/s/狐狸君.json b/js/s/狐狸君.json new file mode 100644 index 0000000..1219930 --- /dev/null +++ b/js/s/狐狸君.json @@ -0,0 +1,21 @@ +{ + "搜索模式": "1", + "搜索url": "https://www.foxjun.com/s/?q={wd}", + "搜索数组": "class=\"media\">&&/div>", + "搜索图片": "src=\"&&\"", + "搜索标题": "《&&》", + "搜索副标题": "》&&\"", + "搜索链接": "href=\"&&\"", + "标题": "《&&》", + "副标题": "》&&\"", + "影片年代": "上映日期:&&

    ", + "影片类型": "类型:&&

    ", + "主演": "主演:&&

    ", + "简介": "简介:&&

    ", + "播放数组": "&&", + "播放列表": "[包含:magnet]", + "播放标题": ">&&<", + "播放链接": "href=\"&&\"", + "分类url": "https://www.foxjun.com/channel/{cateId}.html?apage1={catepg}", + "分类": "国产剧$guochanju#电影$dianying#动画$donghua#美欧剧$meiouju#日韩剧$rihanju" +} \ No newline at end of file diff --git a/js/s/玩偶哥哥.json b/js/s/玩偶哥哥.json new file mode 100644 index 0000000..dfc2f5b --- /dev/null +++ b/js/s/玩偶哥哥.json @@ -0,0 +1,84 @@ +{ + "规则名": "玩偶哥哥", + //"DEBUG":"1", + "规则作者": "香雅情", + "请求头参数": "MOBILE_UA", + "网页编码格式": "UTF-8", + "图片是否需要代理": "否", + "是否开启获取首页数据": "是", + "首页推荐链接": "https://www.wogg.net", + "首页列表数组规则": "body&&.module-items", + "首页片单列表数组规则": ".module-item:not(:matches(饭太硬|公众号))", + "首页片单是否Jsoup写法": "1", + "分类起始页码": "1", + //"分类链接": "https://www.wogg.net/index.php/vodshow/{cateId}--{by}------{catePg}---{year}.html", + "分类链接": "https://www.wogg.net/vodshow/{cateId}--{by}------{catePg}---{year}.html", + "分类名称": "电影&电视剧&综艺&动漫&短剧&音乐空间", + "分类名称替换词": "1&2&4&3&6&5", + //"筛选数据": {}, + "筛选数据": "ext", + //{cateId} + "筛选子分类名称": "", + "筛选子分类替换词": "", + //{class} + "筛选类型名称": "", + "筛选类型替换词": "*", + //{area} + "筛选地区名称": "", + "筛选地区替换词": "*", + //{year} + "筛选年份名称": "", + "筛选年份替换词": "*", + //{lang} + "筛选语言名称": "", + "筛选语言替换词": "*", + //{by} + "筛选排序名称": "时间&人气&评分", + "筛选排序替换词": "time&hits&score", + "分类截取模式": "1", + "分类列表数组规则": ".module-items&&.module-item:not(:matches(饭太硬|公众号))", + "分类片单是否Jsoup写法": "是", + "分类片单标题": "a&&title", + "分类片单链接": "a&&href", + "分类片单图片": ".module-item-pic&&img&&data-src", + "分类片单副标题": ".module-item-text&&Text", + "分类片单链接加前缀": "https://www.wogg.net", + "分类片单链接加后缀": "", + "搜索请求头参数": "User-Agent$MOBILE_UA", + //"搜索链接": "https://www.wogg.net/index.php/vodsearch/{wd}----------{SearchPg}---.html", + "搜索链接": "https://www.wogg.net/vodsearch/{wd}----------{SearchPg}---.html", + "POST请求数据": "", + "搜索截取模式": "1", + "搜索列表数组规则": ".module-items&&.module-search-item", + "搜索片单是否Jsoup写法": "是", + "搜索片单图片": ".lazyload&&data-src", + "搜索片单标题": "h3&&Text", + "搜索片单链接": "h3&&a&&href", + "搜索片单副标题": ".video-info&&a&&Text", + "搜索片单链接加前缀": "https://www.wogg.net", + "搜索片单链接加后缀": "", + "链接是否直接播放": "否", + "直接播放链接加前缀": "", + "直接播放链接加后缀": "", + "直接播放直链视频请求头": "", + "详情是否Jsoup写法": "是", + "类型详情": "", + "年代详情": "", + "地区详情": "", + "演员详情": ".video-info-main&&.video-info-actor,1&&Text", + "简介详情": ".video-info-content&&p,-1&&Text", + "线路列表数组规则": ".module-player-tab&&.module-tab-item", + "线路标题": "span&&Text", + "播放列表数组规则": "body&&.module-player-list", + "选集列表数组规则": ".module-row-one:matches(https://www.ali(pan|yundrive).com/s/)", + "选集标题链接是否Jsoup写法": "是", + "选集标题": "h4&&Text", + "选集链接": ".btn-down&&a&&href", + "是否反转选集序列": "否", + "选集链接加前缀": "", + "选集链接加后缀": "", + "分析MacPlayer": "", + "是否开启手动嗅探": "否", + "手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos", + "手动嗅探视频链接过滤词": ".html#=http" +} \ No newline at end of file diff --git a/js/s/瓜籽.json b/js/s/瓜籽.json new file mode 100644 index 0000000..79216b7 --- /dev/null +++ b/js/s/瓜籽.json @@ -0,0 +1,9 @@ +{ + "简介": "简介:&&

    ", + "图片": "data-src=\"&&\"", + "播放链接": "href=\"&&\"", + "二次播放链接": "data-video-url=\"&&\"", + "线路标题": "
    &&", + "分类url": "http://www.guaziyingyuan.com/Show/{cateId}-{area}--{class}-----{catePg}---{year}/", + "分类": "电视剧$2#电影$1#动漫$4#综艺$3" +} \ No newline at end of file diff --git a/js/s/电影港.json b/js/s/电影港.json new file mode 100644 index 0000000..85fda74 --- /dev/null +++ b/js/s/电影港.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": "演  员&&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/js/s/电影牛.json b/js/s/电影牛.json new file mode 100644 index 0000000..36b24cb --- /dev/null +++ b/js/s/电影牛.json @@ -0,0 +1,71 @@ +{ + "规则名": "电影牛影院", + "规则作者": "香雅情", + "请求头参数": "手机", + "网页编码格式": "UTF-8", + "图片是否需要代理": "1", + "是否开启获取首页数据": "1", + "首页推荐链接": "https://www.dianyingn.cc", + "首页列表数组规则": "body&&.fed-list-info:has(.fed-list-remarks)", + "首页片单列表数组规则": "li", + "首页片单是否Jsoup写法": "1", + "首页片单标题": ".fed-list-title&&Text", + "首页片单链接": "a&&href", + "首页片单图片": ".fed-list-pics&&data-original", + "首页片单副标题": ".fed-list-remarks&&Text", + "首页片单链接加前缀": "https://www.dianyingn.cc", + "首页片单链接加后缀": "", + "分类起始页码": "1", + "分类链接": "https://www.dianyingn.cc/vodtype/{cateId}-{catePg}.html", + "分类名称": "电影&电视剧&综艺&动漫", + "分类名称替换词": "dianying&dianshiju&zongyi&dongman", + "筛选数据": "ext", + "筛选子分类名称": "动作片&喜剧片&爱情片&科幻片&恐怖片&剧情片&战争片&纪录片||国产剧&港台剧&日韩剧&欧美剧", + "筛选子分类替换词": "dongzuopian&xijupian&aiqingpian&kehuanpian&kongbupian&juqingpian&zhanzhengpian&jilupian||guochanju&gangtaiju&rihanju&oumeiju", + + "分类截取模式": "1", + "分类列表数组规则": "body&&.fed-list-item:has(.fed-list-remarks)", + "分类片单是否Jsoup写法": "1", + "分类片单标题": ".fed-list-title&&Text", + "分类片单链接": "a&&href", + "分类片单图片": ".fed-list-pics&&data-original", + "分类片单副标题": ".fed-list-remarks&&Text", + "分类片单链接加前缀": "https://www.dianyingn.cc", + "分类片单链接加后缀": "", + "搜索请求头参数": "手机", + "搜索链接": "https://www.dianyingn.cc/index.php/ajax/suggest.html?mid=1&wd={wd}", + "POST请求数据": "", + "搜索截取模式": "0", + "搜索列表数组规则": "list", + "搜索片单是否Jsoup写法": "1", + "搜索片单图片": "pic", + "搜索片单标题": "name", + "搜索片单链接": "id", + "搜索片单副标题": "", + "搜索片单链接加前缀": "https://www.dianyingn.cc/voddetail/", + "搜索片单链接加后缀": ".html", + "链接是否直接播放": "0", + "直接播放链接加前缀": "https://live.52sf.ga/huya/", + "直接播放链接加后缀": "#isVideo=true#", + "直接播放直链视频请求头": "authority$ku.peizq.online#Referer$https://play.peizq.online", + "详情是否Jsoup写法": "0", + "类型详情": "", + "年代详情": "", + "地区详情": "", + "演员详情": "主演:&&", + "简介详情": "简介:&&", + "线路列表数组规则": ".fed-tabs-item&&ul&&li", + "线路标题": "Text", + "播放列表数组规则": "body&&.fed-play-item", + "选集列表数组规则": ".fed-btns-info", + "选集标题链接是否Jsoup写法": "1", + "选集标题": "a&&Text", + "选集链接": "a&&href", + "是否反转选集序列": "0", + "选集链接加前缀": "https://www.dianyingn.cc", + "选集链接加后缀": "", + "分析MacPlayer": "0", + "是否开启手动嗅探": "0", + "手动嗅探视频链接关键词": ".mp4#.m3u8#.flv", + "手动嗅探视频链接过滤词": ".html#=http" +} \ No newline at end of file diff --git a/js/s/白嫖1.json b/js/s/白嫖1.json new file mode 100644 index 0000000..7343b9a --- /dev/null +++ b/js/s/白嫖1.json @@ -0,0 +1,6 @@ +{ + "分类url": "https://www.6699z.cn/vodshow/{cateId}-{area}-{by}-{class}-{lang}-{letter}---{catePg}---{year}.html", + "分类": "电影&剧集&综艺&动漫&短剧", + "分类值": "1&2&3&4&58", + "类型": "动作片$6#喜剧片$7#爱情片$8#高分经典科幻片$9#恐怖片$10#剧情片$11#战争片$12||国产剧$13#香港剧$28#恋爱不分国度$29#台湾剧$27#美国剧$31#泰国剧$33#其它剧$35||无||无||无" +} diff --git a/js/s/白嫖2.json b/js/s/白嫖2.json new file mode 100644 index 0000000..2958c40 --- /dev/null +++ b/js/s/白嫖2.json @@ -0,0 +1,6 @@ +{ + "分类url": "https://www.qyzf88.com/qyvodtype/{cateId}-{area}-{by}-{class}-----{catePg}---{year}.html", + "分类": "电影$1#电视剧$2#樱花动漫$4#综艺$3", + "副标题": "class=\"pic-text text-right\"&&", + "简介": "寒+剧情介绍:&&

    " +} diff --git a/js/s/白嫖3.json b/js/s/白嫖3.json new file mode 100644 index 0000000..5c059f7 --- /dev/null +++ b/js/s/白嫖3.json @@ -0,0 +1,8 @@ +{ + "简介": "剧情介绍:+module-item-style video-text\">&&
    ", + "数组": "&&", + "播放数组": "module-blocklist\">&&", + "分类url": "https://ys.51baipiao.net/index.php/vod/show/area/{area}/class/{class}/id/{cateId}/page/{catePg}/year/{year}.html", + "分类": "电视剧$2#电影$1#动漫$29#综艺$3" +} diff --git a/js/s/百思.json b/js/s/百思.json new file mode 100644 index 0000000..be6ca54 --- /dev/null +++ b/js/s/百思.json @@ -0,0 +1,4 @@ +{ + "分类url": "https://www.bestpipe.cn/vodshow/{cateId}-{area}-------{catePg}---.html", + "分类": "电影$20#剧集$21#短剧$24#综艺$23#动漫$22" +} \ No newline at end of file diff --git a/js/s/百思派.json b/js/s/百思派.json new file mode 100644 index 0000000..8eab5f8 --- /dev/null +++ b/js/s/百思派.json @@ -0,0 +1,60 @@ +{ + "规则名": "百思派电影网", + "请求头参数": "手机", + "网页编码格式": "UTF-8", + "图片是否需要代理": "0", + "是否开启获取首页数据": "1", + "首页推荐链接": "https://www.bestpipe.cn", + "首页列表数组规则": "body&&.stui-vodlist", + "首页片单列表数组规则": "li", + "首页片单是否Jsoup写法": "1", + "分类起始页码": "1", + "分类链接": "https://www.bestpipe.cn/vodshow/{cateId}-{area}-{by}-{class}-{lang}----{catePg}---{year}.html", + "分类名称": "电影&剧集&短剧&动漫&综艺", + "分类名称替换词": "20&21&24&22&23", + "筛选数据": "ext", + "筛选类型名称": "Netflix&剧情&科幻&动作&喜剧&爱情&冒险&儿童&歌舞&音乐&奇幻&动画&恐怖&惊悚&战争&传记&纪录&犯罪&悬疑&西部&灾难&古装&武侠&家庭&短片&校园&文艺&运动&青春&同性&励志&历史||Netflix&欧美&短剧&古装&武侠&励志&家庭&剧情&喜剧&战争&科幻&惊悚&恐怖&悬疑&犯罪&动作&冒险&历史&同性||古代&现代&穿越&玄幻&霸总&英雄救美&未婚妻&师姐&绝美&逆袭&美女&爱情&甜宠&虐恋&爽剧&搞笑&情感&动漫&萌宝&都市&言情&重生&乡村&神医&幻想&反转&复仇&修仙&古装&男频||Netflix&热血&科幻&美少女&魔幻&经典&励志&少儿&冒险&搞笑&推理&恋爱&治愈&幻想&校园&动物&机战&亲子&儿歌&运动&悬疑&怪物&战争&益智&青春&童话&竞技&动作&社会&友情&真人版&电影版&OVA版&TV版&新番动画&完结动画||Netflix&脱口秀&真人秀&选秀&八卦&访谈&情感&生活&晚会&搞笑&音乐&时尚&游戏&少儿&体育&纪实&科教&曲艺&歌舞&财经&汽车&播报&其他", + "筛选类型替换词": "*", + "筛选地区名称": "大陆&香港&台湾&美国&日本&韩国&英国&法国&德国&印度&泰国&丹麦&瑞典&巴西&加拿大&俄罗斯&意大利&比利时&爱尔兰&西班牙&澳大利亚&其它||大陆&香港&韩国&美国&日本&法国&英国&德国&台湾&泰国&印度&其他||大陆&香港&韩国&美国&日本&法国&英国&德国&台湾&泰国&印度&其他||大陆&日本&欧美&其他||大陆&韩国&香港&台湾&美国&其它", + "筛选地区替换词": "*", + "筛选语言名称": "英语&法语&国语&粤语&日语&韩语&泰语&德语&俄语&闽南语&丹麦语&波兰语&瑞典语&印地语&挪威语&意大利语&西班牙语||空||空||国语&英语&粤语&闽南语&韩语&日语&其它||国语&英语&粤语&闽南语&韩语&日语&其它", + "筛选语言替换词": "*", + "详情是否Jsoup写法": "是", + "类型详情": ".stui-content__detail&&.data,1&&Text!状态:", + "年代详情": ".stui-content__detail&&.data,4&&Text!年份:", + "地区详情": ".stui-content__detail&&.data,2&&Text!地区:", + "演员详情": ".stui-content__detail&&.data,6&&Text!主演:", + "简介详情": ".stui-content__detail&&.detail-content&&Text", + "分类截取模式": "1", + "分类列表数组规则": "body&&.stui-vodlist__box", + "分类片单是否Jsoup写法": "1", + "分类片单标题": "a&&title", + "分类片单链接": "a&&href", + "分类片单图片": ".stui-vodlist__thumb&&data-original", + "分类片单副标题": ".pic-text&&Text", + "分类片单链接加前缀": "https://www.bestpipe.cn", + "搜索请求头参数": "User-Agent$手机", + "搜索链接": "https://www.bestpipe.cn/vodsearch/{wd}----------1---.html", + "搜索截取模式": "1", + "搜索列表数组规则": "body&&.stui-vodlist__box", + "搜索片单是否Jsoup写法": "1", + "搜索片单标题": "a&&title", + "搜索片单链接": "a&&href", + "搜索片单图片": ".stui-vodlist__thumb&&data-original", + "搜索片单副标题": ".pic-text&&Text", + "搜索片单链接加前缀": "https://www.bestpipe.cn", + "线路列表数组规则": "body&&.nav-tabs&&a", + "线路标题": "Text", + "播放列表数组规则": "body&&.stui-content__playlist", + "选集列表数组规则": "a", + "选集标题链接是否Jsoup写法": "1", + "选集标题": "a&&Text", + "选集链接": "a&&href", + "是否反转选集序列": "0", + "选集链接加前缀": "https://www.bestpipe.cn", + "选集链接加后缀": "", + "分析MacPlayer": "2", + "是否开启手动嗅探": "0", + "手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos", + "手动嗅探视频链接过滤词": ".html#=http" +} \ No newline at end of file diff --git a/js/s/皮皮虾.json b/js/s/皮皮虾.json new file mode 100644 index 0000000..8735b91 --- /dev/null +++ b/js/s/皮皮虾.json @@ -0,0 +1,6 @@ +{ + "首页": "0", + "线路标题": "module-tab-value\">&&", + "分类url": "http://www.ppxys.vip/s/{cateId}/area/{area}/by/{by}/class/{class}/lang/{lang}/letter/{letter}/page/{catePg}/year/{year}.html", + "分类": "剧集$1#电影$2#动漫番剧$3" +} \ No newline at end of file diff --git a/js/s/盒子影视.json b/js/s/盒子影视.json new file mode 100644 index 0000000..50e6a64 --- /dev/null +++ b/js/s/盒子影视.json @@ -0,0 +1,81 @@ +{ + "规则名": "电影盒子", + "规则作者": "", + "请求头参数": "手机", + "网页编码格式": "UTF-8", + "图片是否需要代理": "0", + "是否开启获取首页数据": "0", + "首页推荐链接": "http://80kp.com", + "首页列表数组规则": "body&&.stui-vodlist:has(h4)", + "首页片单列表数组规则": "li", + "首页片单是否Jsoup写法": "1", + "分类起始页码": "1", + "分类链接": "http://80kp.com/films/{cateId}_{catePg}.html[firstPage=http://80kp.com/films/{cateId}.html]", + "分类名称": "电影&电视剧&综艺&动漫", + "分类名称替换词": "1&2&4&3", + "筛选数据": {}, + //"筛选数据": "ext", + //{cateId} + "筛选子分类名称": "", + "筛选子分类替换词": "", + //{class} + "筛选类型名称": "", + "筛选类型替换词": "*", + //{area} + "筛选地区名称": "", + "筛选地区替换词": "*", + //{year} + "筛选年份名称": "", + "筛选年份替换词": "*", + //{lang} + "筛选语言名称": "", + "筛选语言替换词": "*", + //{by} + "筛选排序名称": "时间&人气&评分", + "筛选排序替换词": "time&hits&score", + "分类截取模式": "1", + "分类列表数组规则": ".stui-vodlist&&li", + "分类片单是否Jsoup写法": "1", + "分类片单标题": "h4&&a&&Text", + "分类片单链接": "h4&&a&&href", + "分类片单图片": ".lazyload&&data-original", + "分类片单副标题": ".pic-text&&Text", + "分类片单链接加前缀": "http://80kp.com", + "分类片单链接加后缀": "", + "搜索请求头参数": "User-Agent$手机", + "搜索链接": "http://80kp.com/search.php;post", + "POST请求数据": "searchword={wd}", + "搜索截取模式": "1", + "搜索列表数组规则": ".stui-vodlist__media&&li", + "搜索片单是否Jsoup写法": "1", + "搜索片单图片": ".lazyload&&data-original", + "搜索片单标题": "h3&&a&&Text", + "搜索片单链接": "h3&&a&&href", + "搜索片单副标题": ".pic-text&&Text", + "搜索片单链接加前缀": "http://80kp.com", + "搜索片单链接加后缀": "", + "链接是否直接播放": "0", + "直接播放链接加前缀": "", + "直接播放链接加后缀": "", + "直接播放直链视频请求头": "", + "详情是否Jsoup写法": "0", + "类型详情": "类型:&&", + "年代详情": "年份:&&", + "地区详情": "地区:&&", + "演员详情": "主演:&&

    ", + "简介详情": "简介:&&

    ", + "线路列表数组规则": ".nav-tabs&&li", + "线路标题": "Text", + "播放列表数组规则": "body&&.stui-content__playlist", + "选集列表数组规则": "li", + "选集标题链接是否Jsoup写法": "1", + "选集标题": "a&&Text", + "选集链接": "a&&href", + "是否反转选集序列": "0", + "选集链接加前缀": "http://80kp.com", + "选集链接加后缀": "", + "分析MacPlayer": "0", + "是否开启手动嗅探": "1", + "手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos#obj/tos-#pt=m3u8#mime_type=video_mp4#x-oss-signature=", + "手动嗅探视频链接过滤词": ".html#=http" +} \ No newline at end of file diff --git a/js/s/看看影视.json b/js/s/看看影视.json new file mode 100644 index 0000000..e735ce4 --- /dev/null +++ b/js/s/看看影视.json @@ -0,0 +1,81 @@ +{ + "规则名": "看一看", + "规则作者": "", + "请求头参数": "User-Agent$手机#Referer$https://www.kykhd.cc/", + "网页编码格式": "UTF-8", + "图片是否需要代理": "0", + "是否开启获取首页数据": "1", + "首页推荐链接": "https://www.kykhd.cc", + "首页列表数组规则": "body&&.index-area", + "首页片单列表数组规则": "ul&&li", + "首页片单是否Jsoup写法": "1", + "分类起始页码": "1", + "分类链接": "https://www.kykhd.cc/index.php?m=vod-list-id-{cateId}-pg-{catePg}-order--by-{by}-class-0-year-0-letter--area-{area}-lang-.html", + "分类名称": "电影&电视剧&综艺&动漫", + "分类名称替换词": "1&2&3&4", + //"筛选数据": {}, + "筛选数据": "ext", + //{cateId} + "筛选子分类名称": "动作片&喜剧片&爱情片&科幻片&恐怖片&剧情片&战争片&纪录片&微电影&惊悚片&悬疑片||国产剧&港台剧&日韩剧&欧美剧&泰剧&海外剧||TV综艺&音乐MV||TV版&电影版&剧场版&国语经典", + "筛选子分类替换词": "5&6&7&8&9&10&11&16&18&20&21||12&13&14&15&19&32||26&31||23&24&25&36", + //{class} + "筛选类型名称": "", + "筛选类型替换词": "*", + //{area} + "筛选地区名称": "大陆&香港&台湾&美国&韩国&日本&泰国&新加坡&马来西亚&印度&英国&法国&加拿大&西班牙&俄罗斯&其它", + "筛选地区替换词": "*", + //{year} + "筛选年份名称": "", + "筛选年份替换词": "*", + //{lang} + "筛选语言名称": "", + "筛选语言替换词": "*", + //{by} + "筛选排序名称": "时间&人气&评分", + "筛选排序替换词": "time&hits&score", + "分类截取模式": "1", + "分类列表数组规则": ".index-area&&li", + "分类片单是否Jsoup写法": "1", + "分类片单标题": "a&&title", + "分类片单链接": "a&&href", + "分类片单图片": "img&&data-original", + "分类片单副标题": ".other&&Text", + "分类片单链接加前缀": "https://www.kykhd.cc", + "分类片单链接加后缀": "", + "搜索请求头参数": "User-Agent$手机#Referer$https://www.kykhd.cc/", + "搜索链接": "https://www.kykhd.cc/index.php?m=vod-search-pg-1-wd-{wd}.html", + "POST请求数据": "", + "搜索截取模式": "1", + "搜索列表数组规则": ".index-area&&li", + "搜索片单是否Jsoup写法": "1", + "搜索片单图片": "img&&data-original", + "搜索片单标题": "a&&title", + "搜索片单链接": "a&&href", + "搜索片单副标题": ".other&&Text", + "搜索片单链接加前缀": "https://www.kykhd.cc", + "搜索片单链接加后缀": "", + "链接是否直接播放": "0", + "直接播放链接加前缀": "", + "直接播放链接加后缀": "", + "直接播放直链视频请求头": "", + "详情是否Jsoup写法": "1", + "类型详情": "", + "年代详情": "", + "地区详情": "", + "演员详情": "", + "简介详情": ".ct-c&&.js&&Text", + "线路列表数组规则": ".playfrom&&li", + "线路标题": "Text", + "播放列表数组规则": "body&&.playlist", + "选集列表数组规则": "ul&&li", + "选集标题链接是否Jsoup写法": "1", + "选集标题": "a&&Text", + "选集链接": "a&&href", + "是否反转选集序列": "0", + "选集链接加前缀": "https://www.kykhd.cc", + "选集链接加后缀": "", + "分析MacPlayer": "0", + "是否开启手动嗅探": "0", + "手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos", + "手动嗅探视频链接过滤词": ".html#=http" +} \ No newline at end of file diff --git a/js/s/短剧屋.json b/js/s/短剧屋.json new file mode 100644 index 0000000..0a1bf24 --- /dev/null +++ b/js/s/短剧屋.json @@ -0,0 +1,81 @@ +{ + "规则名": "短剧屋", + "规则作者": "", + "请求头参数": "手机", + "网页编码格式": "UTF-8", + "图片是否需要代理": "0", + "是否开启获取首页数据": "1", + "首页推荐链接": "http://www.metaysw.com", + "首页列表数组规则": "body&&.vod-vodlist", + "首页片单列表数组规则": "li", + "首页片单是否Jsoup写法": "1", + "分类起始页码": "1", + "分类链接": "http://www.metaysw.com/type/{cateId}-{catePg}.html", + "分类名称": "短剧", + "分类名称替换词": "lianxuju", + "筛选数据": {}, + //"筛选数据": "ext", + //{cateId} + "筛选子分类名称": "", + "筛选子分类替换词": "", + //{class} + "筛选类型名称": "", + "筛选类型替换词": "*", + //{area} + "筛选地区名称": "", + "筛选地区替换词": "*", + //{year} + "筛选年份名称": "", + "筛选年份替换词": "*", + //{lang} + "筛选语言名称": "", + "筛选语言替换词": "*", + //{by} + "筛选排序名称": "时间&人气&评分", + "筛选排序替换词": "time&hits&score", + "分类截取模式": "1", + "分类列表数组规则": ".vod-vodlist&&li", + "分类片单是否Jsoup写法": "1", + "分类片单标题": ".vod-vodlist__title&&Text", + "分类片单链接": "a&&href", + "分类片单图片": ".lazyload&&data-original", + "分类片单副标题": ".pic-text&&Text", + "分类片单链接加前缀": "http://www.metaysw.com", + "分类片单链接加后缀": "", + "搜索请求头参数": "User-Agent$手机", + "搜索链接": "http://www.metaysw.com/search/page/{SearchPg}/wd/{wd}.html", + "POST请求数据": "", + "搜索截取模式": "1", + "搜索列表数组规则": ".vod-vodlist&&li", + "搜索片单是否Jsoup写法": "1", + "搜索片单图片": ".lazyload&&data-original", + "搜索片单标题": ".vod-vodlist__title&&Text", + "搜索片单链接": "a&&href", + "搜索片单副标题": ".pic-text&&Text", + "搜索片单链接加前缀": "http://www.metaysw.com", + "搜索片单链接加后缀": "", + "链接是否直接播放": "0", + "直接播放链接加前缀": "https://live.52sf.ga/huya/", + "直接播放链接加后缀": "#isVideo=true#", + "直接播放直链视频请求头": "authority$ku.peizq.online#Referer$https://play.peizq.online", + "详情是否Jsoup写法": "1", + "类型详情": "", + "年代详情": "", + "地区详情": "", + "演员详情": ".vod-content__detail&&p,2&&Text!主演:", + "简介详情": "", + "线路列表数组规则": ".dropdown-menu&&li", + "线路标题": "a&&Text", + "播放列表数组规则": "body&&.vod-content__playlist", + "选集列表数组规则": "li", + "选集标题链接是否Jsoup写法": "1", + "选集标题": "a&&Text", + "选集链接": "a&&href", + "是否反转选集序列": "0", + "选集链接加前缀": "http://www.metaysw.com", + "选集链接加后缀": "", + "分析MacPlayer": "0", + "是否开启手动嗅探": "0", + "手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos", + "手动嗅探视频链接过滤词": ".html#=http" +} \ No newline at end of file diff --git a/js/s/短剧影视.json b/js/s/短剧影视.json new file mode 100644 index 0000000..ca8fd33 --- /dev/null +++ b/js/s/短剧影视.json @@ -0,0 +1,4 @@ + { + "分类": "短剧$duanju#电影$dianying#电视剧$dianshiju#动漫$dongman#综艺$zongyi", + "分类url": "https://www.duanjuwang.cc/vodtype/{cateId}/page/{catePg}.html" + } \ No newline at end of file diff --git a/js/s/短剧网.json b/js/s/短剧网.json new file mode 100644 index 0000000..1d5f5a7 --- /dev/null +++ b/js/s/短剧网.json @@ -0,0 +1,4 @@ +{ + "分类": "短剧$duanju#电影$dianying#电视剧$dianshiju#动漫$dongman#综艺$zongyi", + "分类url": "https://www.duanjuwang.cc/vodtype/{cateId}/page/{catePg}.html" +} \ No newline at end of file diff --git a/js/s/秀儿.json b/js/s/秀儿.json new file mode 100644 index 0000000..5397ed0 --- /dev/null +++ b/js/s/秀儿.json @@ -0,0 +1,7 @@ +{ + "简介": "剧情介绍:+tt\" style=*>&&", + "数组": "&&", + "分类url": "https://xiuer.pro/show/{cateId}/area/{area}/class/{class}/page/{catePg}/year/{year}/", + "分类": "短剧$duanju#电视剧$dianshiju#电影$dianying#动漫$dongman#综艺$zongyi" +} diff --git a/js/s/秀儿影视.json b/js/s/秀儿影视.json new file mode 100644 index 0000000..0901bce --- /dev/null +++ b/js/s/秀儿影视.json @@ -0,0 +1,8 @@ +{ + "简介": "tt\" style=*>&&", + "数组": "&&", + "搜索url": "https://xiuer.pro/vod/search/?wd={wd}", + "分类url": "https://xiuer.pro/show/{cateId}/area/{area}/class/{class}/page/{catePg}/year/{year}/", + "分类": "短剧$duanju#电视剧$dianshiju#电影$dianying#动漫$dongman#综艺$zongyi" +} \ No newline at end of file diff --git a/js/s/穷电影.json b/js/s/穷电影.json new file mode 100644 index 0000000..f48c63a --- /dev/null +++ b/js/s/穷电影.json @@ -0,0 +1,14 @@ +{ + "请求头": "手机", + "数组": "", + "搜索": "https://m.qiongdy6.com/query/{wd}", + "搜索列表数组规则": "body&&.form-control&&.btn-default", + "图片": "data-lazy-img=\"&&\"", + "标题": "title=\"&&\"", + "链接": "href=\"&&\"", + "副标题": "class=\"newest\">&&", + "播放数组": "class=\"play-list\">&&", + "线路标题": "data-key=\"*\">&&", + "分类": "电影$nowplayingmovie#电视剧$topsearchtv#综艺$topsearchshow#动漫$topsearchcomic", + "分类url": "https://m.qiongdy6.com/top/{cateId}_{catePg}.html" +} diff --git a/js/s/策弛.json b/js/s/策弛.json new file mode 100644 index 0000000..6486f85 --- /dev/null +++ b/js/s/策弛.json @@ -0,0 +1,12 @@ +{ + "请求头": "手机", + "简介": "剧情介绍:+简介:&&

    ", + "数组": "col-md-6 col-sm-6 col-xs-3\">&&", + "图片": "data-original=\"&&\"", + "标题": "name text-overflow\">&&", + "副标题": "vtitle text-right\">&&", + "线路数组": "swiper-slide play-list-toggle&&", + "播放数组": "play-list fade-in&&", + "分类url": "https://www.fcwei.com/show/area/{area}/class/{class}/id/{cateId}/page/{catePg}/year/{year}.html;;d1", + "分类": "电视剧$lianxuju#电影$dianying#动漫$dongman#综艺$zongyi" +} diff --git a/js/s/素白白.json b/js/s/素白白.json new file mode 100644 index 0000000..90a1ec9 --- /dev/null +++ b/js/s/素白白.json @@ -0,0 +1,7 @@ +{ + "简介": "剧情介绍:+yp_context\">&&", + "线路数组": "javascript:void(0);\">&&", + "播放数组": "paly_list_btn\">&&", + "分类url": "https://www.subaibai.com/{cateId}/page/{catePg}[https://www.subaibai.com/{cateId}]", + "分类": "电视剧$tv-drama#国产剧$domestic-drama#欧美剧$american-drama#日韩剧$korean-drama#电影$new-movie#热门电影$hot-month#高分电影$high-movie#动漫电影$cartoon-movie#香港电影$cartoon-movie#动漫剧$anime-drama" +} diff --git a/js/s/茶杯狐.json b/js/s/茶杯狐.json new file mode 100644 index 0000000..36b89f4 --- /dev/null +++ b/js/s/茶杯狐.json @@ -0,0 +1,8 @@ +{ + "简介": "剧情介绍:+简介:&&

    ", + "副标题": "vtitle text-right\">&&", + "线路数组": "play-list-toggle\">&&", + "播放数组": "play-list fade-in&&", + "分类url": "https://www.youmidian.com/mv_type/{cateId}-{area}--{class}-----{catePg}---{year}.html", + "分类": "电视剧$2#电影$1#动漫$4#综艺$40#纪录片$41" +} diff --git a/js/s/虎牙直播.json b/js/s/虎牙直播.json new file mode 100644 index 0000000..86b0635 --- /dev/null +++ b/js/s/虎牙直播.json @@ -0,0 +1,53 @@ +{ + "规则名": "虎牙直播", + "规则作者": "香雅情", + "请求头参数": "手机", + "网页编码格式": "UTF-8", + "图片是否需要代理": "0", + "是否开启获取首页数据": "1", + "首页推荐链接": "clan://XYQTVBox/虎牙主播.html", + "首页列表数组规则": "body&&.list", + "首页片单列表数组规则": "a", + "首页片单是否Jsoup写法": "1", + "首页片单标题": "a&&Text", + "首页片单链接": "a&&href", + "首页片单图片": "a&&data-original", + "首页片单副标题": "a&&desc", + "首页片单链接加前缀": "http://43.138.170.29:35455/huya/", + "首页片单链接加后缀": "#GD线路$https://www.goodiptv.club/huya/'input'", + "分类起始页码": "1", + "分类链接": "https://live.cdn.huya.com/liveHttpUI/getLiveList?iGid={cateId}&iPageNo={catePg}&iPageSize=120", + "分类名称": "热门&网游&单机&娱乐&手游", + "分类名称替换词": "2336&1&7771&1663&3203", + "筛选数据": "ext", + "筛选子分类名称": "王者荣耀&云梦之星&绝地求生&英雄联盟&星秀&吃喝玩乐&主机游戏&和平精英&穿越火线&颜值&二次元&地下城与勇士&暴雪专区&一起看&我的世界||英雄联盟&lol云顶之弈&守望先锋归来&超击突破&穿越火线&地下城与勇士&炉石传说&魔兽世界&DOTA2&CS:GO&CFHD&DOTA1&QQ飞车&问道&魔兽争霸3&逆战&梦三国&坦克世界&起凡:群雄逐鹿&神武4电脑版&堡垒之夜&英魂之刃&网游竞技&暴雪专区&射击综合游戏&军事游戏&无畏契约&逆水寒&剑灵&冒险岛&永恒之塔&诛仙3&彩虹岛Online&热血江湖&传奇&炉石战棋&龙之谷&传奇类游戏&御龙在天&QQ三国&寻仙&天谕&剑网3&枪神纪&反恐精英Online&体育游戏&星际争霸&武林外传一世琴缘&战舰世界&生死狙击2&千年3&星际战甲&铁甲雄兵&斗战神&荒野行动PC版&暗黑破坏神&九阴真经&QQ华夏&天涯明月刀&丝路传说2&大唐无双零&QQ自由幻想&战争雷霆&使命召唤:战区&NBA2KOL系列&跑跑卡丁车&命运方舟&征途&梦想世界3&刀剑英雄&激战2&新倩女幽魂&诛仙世界&流放之路&FIFA Online系列&真·三国无双OL&神泣&轩辕传奇&天翼决&大话西游2&战地之王&造梦西游OL&生死狙击&完美世界:诸神之战&QQ仙侠传&战意&反恐行动online&蜀山:初章&希望OL&完美端游系列&天下&命运2&征途2&创世战车&全球使命3&天命西游&洛奇英雄传&剑侠世界&赛尔号&泡泡堂&蜀门&劲舞团&QQ幻想&古剑奇谭OL&QQ炫舞&新飞飞(FlyFF)&新剑侠情缘&热血江湖2&天堂&装甲战争&疾风之刃&起凡游戏三国争霸&征程&FIFA Online4&极光世界 弑神传&坦克大战&QQ幻想世界&使命召唤:现代战争&奇迹世界2&鹿鼎记&QQ音速&梦幻诛仙2&诺亚传说&飞龙在天传奇&天书奇谈&成吉思汗3&全球使命&街头篮球&权力的游戏 凛冬将至 页游&新挑战&星辰变&火线精英&自在西游&黑色沙漠&起凡:群雄逐鹿HD&斗破苍穹&赤壁&刀剑2&远征Online梦想版&Project Zomboid&奇迹:传奇&逍遥江湖零&黄易群侠传2&释厄英雄&反恐精英&炫舞时代&魔侠传&神魔大陆&EVE Online&无尽战区&全面战争:竞技场&千古风流&万王之王3&冰原之战&冒险岛2&云端王国&北地物语2&梦幻龙族II&数码精灵Online&倚天Ⅱ&神话&三国&九天神话&名将三国&阿克拉什:传承&最强军团&忍者村大战2&夺宝传世&300英雄&风云龙战天下&成吉思汗怀旧版&领地人生&笑傲江湖&上古世纪&劲乐团&蜀山剑侠传&上古封神&人类必须反击&热血轩辕OL&超激斗梦境&极品飞车Online&独孤求败&威尼斯崛起&蜀山神话&圣境传说&永久基地&火瀑&圣斗士星矢ol&无限法则&仙侠世界2&坠星大陆&霸刀群侠传online&闪烁之光&龙麒&画皮世界&黎明之光&神佑&创世联盟&泰亚史诗&使命召唤:黑色行动4&御天降魔传||战神:诸神黄昏&Dread Hunger&天天吃鸡&永劫无间&主机游戏&我的世界&方舟&单机热游&互动点播&怀旧游戏&逃离塔科夫&Apex英雄&部落:上升&卧龙:苍天陨落&俄罗斯钓鱼4&怪物猎人物语&怪物猎人:崛起&骑马与砍杀系列&死亡之夜&SCUM&饥荒&艾尔登法环&荒野大镖客2&恐惧之间&使命召唤系列&星球大战系列&怪物猎人世界&森林之子&互动剧游&恐鬼症&欧洲卡车模拟&极限竞速:地平线&DayZ独立版&战地5&阿尔比恩&盗贼之海&幽灵线:东京&纸人&育碧游戏&港诡实录&漫漫长夜&三国志&只狼:影逝二度&黑与白2&其他单机&Among Us&Dark and Darker&仙剑奇侠传七&罗布乐思&归家异途&霍格沃茨之遗&仁王2&岛&帝国神话&双人成行&灵魂筹码&九霄缳神记&都市:天际线&甜蜜之家&流放者柯南&鬼谷八荒&海底大作战&帝国时代4&深岩银河:下潜&猎人:荒野的召唤&大侠立志传&英灵神殿&Stray&洛克王国&石油骚动&消逝的光芒2&非对称派对游戏&真三国无双&魔法门之英雄无敌系列&海贼王 寻秘世界&音乐游戏&任天堂专区&扫雷&全面战争:三国&战术小队&文明6&全境封锁&流星蝴蝶剑&WWE 2K&哈迪斯&刺客信条&看门狗:军团&对马岛之魂&渡神记&全面战争&精灵与萤火意志&层层恐惧&伤害世界&拾荒者&英雄连&奥奇传说&缺氧&逃生者2&美丽水世界&机械迷城&沙石镇时光&禁闭求生&帝国时代系列&宝可梦:剑盾&武装突袭&十三月&糖豆人:终极淘汰赛&幽灵行动:荒野&战锤40K:暗潮&海贼王:热血燃烧&胡闹厨房&精灵宝可梦Let's Go&紫塞秋风&雨血前传:蜃楼&小骨:英雄杀手&最终幻想7:重制版&四海兄弟&FIFA足球&奥拉星&生化3:抵抗计划&戴森球计划&足球小将&新世界&环世界&无人深空&星露谷物语&游戏王&三国群英传8&实况足球系列&神秘海域4&塞尔达传说:荒野之息&路易鬼屋3&摔跤城大乱斗&恐怖黎明&罗马复兴&马里奥专区&人间地狱&冰汽时代&刺客信条:英灵殿&漫威蜘蛛侠&弈仙牌&中土世界系列&奥日与黑暗森林&恶魔之魂&小缇娜的奇幻之地&Biped&攻城掠地&人类一败涂地&斩妖行&Steamcraft&Cube&割绳子&黑山:起源&闪克&街机游戏&桥梁建造师&马里奥赛车8&纪元1800&黎明之星&剑勇传奇:忍者龙剑传Z&太荒初境&复仇者联盟&死亡搁浅&FIFA 23&模拟农场&模拟人生4&细胞分裂&极品飞车22:不羁&超级战壕大战&鬼武者3&最终幻想:起源&霓虹深渊&最终幻想系列&女神异闻录&瑞奇与叮当&轩辕剑外传:云之遥&草根传奇&泰坦陨落&SCP 173&龙歌&立方体&为了吾皇||星秀&户外&一起看&二次元&虚拟偶像&旅游&娱乐天地&放映厅&交友&组队&吃喝玩乐&颜值&原创&虎牙地方&体育&虎牙文化&趣分享&美食&科技&音乐&派对&直播购||和平精英&云梦之星&王者荣耀&黎明觉醒:生机&英雄联盟手游&金铲铲之战&原神&CF手游&三国志战棋版&综合手游&新游广场&QQ飞车手游&火影忍者手游&欢乐麻将&中国象棋&三国杀&天天狼人&欢乐斗地主&暗区突围&问道手游&部落冲突&皇室战争&忍者必须死3&手游休闲&MMORPG&战争冲突&动作游戏&棋牌桌游&王者模拟战&天龙八部手游&二次元手游&虎牙领主争霸&一起玩&明日之后&狼人杀手游&COD手游&暗黑破坏神:不朽&幻塔&神武4手游&第五人格&天涯明月刀手游&御龙在天手游&三国志战略版&球球大作战&狼人杀&蛋仔派对&多乐棋牌&崩坏3&天天象棋&英雄杀&DNF手游&诛仙手游&热血江湖手游&完美世界手游&妄想山海&新笑傲江湖&崩坏:星穹铁道&指尖四川麻将&迷你世界&斗罗大陆:魂师对决&狼人杀官方&万国觉醒&天龙八部2:飞龙战天&云上城之歌&奇迹MU:觉醒&JJ棋牌&奶块&斗破苍穹手游&最强NBA&极无双2&武侠乂手游&新剑侠情缘手游&创造与魔法&逆水寒手游&阴阳师&多多自走棋&倩女幽魂手游&跑跑卡丁车手游&巅峰战舰&征途2手游&率土之滨&英雄联盟电竞经理&流星群侠传&英魂之刃口袋版&重返帝国&SKY光遇&永恒纪元:戒&剑侠世界3&征途手游&绝世仙王&青云诀2&一梦江湖&精灵盛典:黎明&红警OL&海岛奇兵&剑灵:革命&九灵神域&混沌起源&梦幻诛仙手游&天天酷跑&龙武手游&王牌战争:文明重启&时空猎人3&太古神王2&寻仙手游&天天吃鸡手机版&FIFA足球世界&方舟手游&弹弹堂手游&长安幻想&航海王:燃烧意志&风云&庆余年手游&魔力宝贝&口袋觉醒&三国战纪2&影之刃3&新斗罗大陆&仙境传说RO&北凉悍刀行&单机手游&无神之界&军棋&猎魂觉醒&灌篮高手正版授权手游&王牌竞速&行界&鸿图之下&三国战纪&斗罗大陆&新盗墓笔记&荒野乱斗&荣耀大天使&梦幻新诛仙&航海王热血航线&雀魂麻将&明日方舟&坦克世界闪击战&永劫无间手游&龙之谷2手游&轩辕传奇手游&合金弹头:觉醒&超凡先锋&机动都市阿尔法&不良人3&决战平安京&剑侠世界2手游&逃跑吧!少年&荒野行动&香肠派对&植物大战僵尸&哈利波特:魔法觉醒&剑网3:指尖江湖&火影忍者OL&天谕手游&拳皇命运&QQ炫舞手游&风云岛行动&Lost Light(萤火突击国际服)&一念逍遥&蚁族崛起&QQ华夏手游&仙魔决&绝世战魂&镇魂街:天生为王&梦幻模拟战&游戏王:决斗链接&原始征途&全民枪战2&魂斗罗:归来&我叫MT4&巅峰极速&武林外传手游&龙之谷世界&斗罗大陆-斗神再临&黑色沙漠手游&时空召唤&魔力宝贝:旅人&决斗之城&少年三国志2&掼蛋&阴阳师:百闻牌&冰火创世纪&元气骑士&龙珠觉醒&黎明之光手游&远征&绿色征途&天堂2:血盟&火炬之光:无限&梦三国手游&绝区零&腾讯桌球&虎牙吃鸡&自由之战2&重生细胞&忘川风华录&蛇蛇争霸&欢乐升级&球球英雄&我的起源&一拳超人:最强之男&太空行动&绿茵信仰&无期迷途&漫威超级战争&逍遥情缘&仙战&龙族幻想&新游推荐&荣耀新三国&摩尔庄园&天堂 W&斗罗大陆:武魂觉醒&斗破仙途&魔渊之刃&刀塔传奇&幻世九歌&深空之眼&未来之役&剑与家园&一剑斩仙&剑网1:归来&镇魂街:武神躯&虎牙球球&米加小镇&警匪杀&龙之国物语&黑暗与光明手游&小小蚁国&饭狼&零号任务&星球:重启&魂武者&一人之下&龙与家园&重写三国志&提灯与地下城&贪吃蛇大作战&战双:帕弥什&星露谷物语手游&圣斗士星矢(腾讯)&斗罗大陆2:绝世唐门&忍者龟:归来&刺客同盟&神雕侠侣手游&武动乾坤&魔龙世界&洪荒&三国志:幻想大陆&全民斩仙&小小军团&猎龙计划&新轩辕剑&圣斗士星矢:正义传说&龙族血统&航海王激战&微信小游戏&枪火重生手游&三十六计&口袋妖怪重制&三界争锋&口袋妖怪 VS&蜀山奇缘&不良人2&弹弹堂大冒险&泰拉瑞亚手游&QQ游戏大厅&另一个伊甸: 超越时空的猫&斗斗堂&狩猎时刻&刀剑契约&仙剑Q传&口袋对决&乱世王者&全民奇迹2&航海王强者之路&牧羊人之心&口袋决斗&少年三国志&秦时明月2&一拳超人正义执行&大话西游手游&风暴魔域&混沌与秩序之英雄战歌&文明与征服&君临天下(手游)&天使纪元&航海王:启航&剑侠情缘手游&太极熊猫3:猎龙&九州天空城3D&诺亚之心&星途&永不言弃3:世界&全民精灵&我的恐龙&放开那三国3&一刀流&侍魂OL&火影世界3D&坎公骑冠剑&APEX手游&神将三国&保卫萝卜3&无尽的拉格朗日&战舰猎手&极无双&奇迹:最强者&热血英雄&大唐仙灵之灵武奇缘&猫之城&光明冒险&实况足球&数码宝贝:新世纪&非人学园&傲世西游&饥荒:新家&密室逃脱&真三国无双霸&传奇天下&失落城堡手游&火影忍者:巅峰对决&传奇生物&猫和老鼠", + "筛选子分类替换词": "2336&9521&2793&1&1663&100044&100032&3203&4&2168&2633&2&100043&2135&1732||1&5485&2174&7467&4&2&393&8&7&862&6079&6&9&107&4615&135&489&802&1612&3227&100117&1830&100023&100043&100141&100133&5937&2952&897&2243&446&1646&683&387&983&5751&15&2060&675&1090&734&1899&900&496&1918&100135&5&1661&1947&6091&878&627&2765&591&3185&1123&1009&1878&1219&1026&1584&1862&624&5911&3959&162&3058&2715&486&915&406&1579&7749&427&100079&324&2531&159&779&2975&618&6815&2471&7217&2291&2599&861&7761&1161&3034&1597&2942&677&2741&2953&1086&432&903&2755&440&4711&2420&2419&1892&2440&1582&586&386&1966&2276&334&11&678&3683&514&4359&2897&5713&766&45&1085&488&190&77&2225&641&939&206&7945&583&553&2550&7907&1877&5423&590&179&1867&142&1319&3917&133&42&7677&863&3353&55&296&1292&2318&5901&7155&1057&925&2350&1003&1204&1524&594&959&299&1053&1153&6741&1142&534&2369&772&1132&84&640&2282&288&1046&2469&217&1824&997&385&5691&2563&365&1200&216&822&447&399&1652&3189&2723&1337&91&7455&2814&337&41&2090&2713&2977&4429&676||7771&7601&2793&6219&100032&1732&1997&100002&5907&100125&3493&5011&1318&7859&5495&7101&6479&4783&6129&4245&74&5801&4319&6679&100137&554&3519&7943&6919&6205&475&2634&1125&4371&8115&3641&7669&5257&100139&5853&2303&2270&4505&38&3069&6163&7905&6509&5771&2949&7881&5795&3019&6821&6737&4059&5941&2201&6739&2772&6571&3101&4835&3647&2906&7993&6609&7745&2864&2585&7581&6101&1599&2096&5097&2761&100087&2349&3004&2360&2650&2342&426&2796&6153&1962&6155&6039&6231&3521&5895&2288&2337&6851&232&2848&2884&3015&2365&1834&7687&6065&708&5715&465&7823&6083&2794&3016&2473&4217&4375&6045&98&6565&5809&5995&1888&2846&5931&6523&6103&7239&4865&2566&2443&412&6425&2596&2486&2924&5719&7773&3435&2430&2120&5429&5725&6149&4249&7871&1807&1946&6151&7647&5307&1737&3289&6105&5243&51&896&37&111&5999&3275&5947&5235&40&1498&7685&6121&5695&7789&2344&6607&270&7885&175&61&7653&5743&2454&3981&2455&157&230&1446&1083&14&289&2965||1663&2165&2135&2633&6055&6791&100022&6245&4079&5367&100044&2168&6861&5123&2356&4089&5883&2752&2408&3793&7785&7759||3203&9521&2336&6131&6203&7185&5489&2413&7937&100029&100052&2928&2429&1751&1671&1669&2774&1749&7209&2477&1797&2439&4041&100004&100273&7449&100197&100036&5699&2852&100091&7529&6613&3483&100049&4769&6385&6437&3135&3115&5115&2568&5619&2411&2785&6909&6209&2639&4997&2688&4921&2647&2817&4237&6007&5669&7349&7215&2683&6745&3679&6159&7929&5977&3116&3841&2775&4337&2988&7825&4929&6259&2931&7725&2598&5133&2503&2620&2502&2811&2691&7177&3927&2760&6955&3719&2646&7183&2556&6619&6009&3082&6123&4413&2624&4545&7719&5985&2672&1715&5219&5479&6411&6649&2979&4341&3873&4035&2857&6727&3943&3061&6939&2891&5953&6049&6251&6657&2675&7781&2777&6767&2561&3071&5399&6463&8109&6027&6047&6119&7093&4613&6477&5975&6181&7107&4925&4977&7579&2736&2927&6931&6507&5411&5891&3064&3150&4137&3084&3639&485&5835&3885&3901&5925&3379&2991&4695&6859&6419&7019&3743&1674&7501&6557&3481&4451&7713&3027&2824&4087&6979&3331&7797&6631&7287&2551&7573&2868&6125&6225&5019&7889&4287&3087&2649&7837&4227&2609&6399&2615&7711&2444&7465&2830&6561&6415&2680&3925&7027&5365&4629&7893&7017&7127&6881&6247&1673&4649&3160&6943&5981&7291&6381&1739&5837&1694&7199&6877&6831&2838&6843&7361&7069&7451&7269&7191&7675&6635&7803&2957&6787&7681&4317&3847&6863&7795&6547&2584&4133&4471&2521&6581&7913&3745&1781&3829&2807&1755&6029&1685&2671&3827&4421&6923&3749&2867&3459&7631&4195&2625&1670&2744&1794&2655&7849&7059&7213&6667&7133&6543&3705&1672&4761&2930&6233&6299&3881&4995&2627&1784&6951&2626&4759&2511&7071&1987&3439&2648&2621&2778&3329&6405&3549&3757&1688&3143&6291&1667&2707&1759&6641&7037&6621&1677&6809&2875&2702&3215&1764&5425&6497&7899&3741&6793&4045&1679&6491&1719&6071&6927&5403&6439&7005&2758", + "分类截取模式": "0", + "分类列表数组规则": "vList", + "分类片单是否Jsoup写法": "1", + "分类片单标题": "sIntroduction", + "分类片单链接": "lProfileRoom", + "分类片单图片": "sScreenshot", + "分类片单副标题": "sNick", + "分类片单链接加前缀": "http://8.210.232.168/php/huya.php?id=", + "分类片单链接加后缀": "#GD线路$https://www.goodiptv.club/huya/'input'", + "搜索请求头参数": "User-Agent$手机", + "搜索链接": "https://search.cdn.huya.com/?m=Search&do=getSearchContent&plt=m&q={wd}&uid=0&app=11&v=4&typ=-5&start=0@&rows=40", + "POST请求数据": "", + "搜索截取模式": "0", + "搜索列表数组规则": "response.3.docs", + "搜索片单是否Jsoup写法": "1", + "搜索片单图片": "game_screenshot", + "搜索片单标题": "game_nick", + "搜索片单链接": "room_id", + "搜索片单副标题": "gameName", + "搜索片单链接加前缀": "http://43.138.170.29:35455/huya/", + "搜索片单链接加后缀": "#GD线路$https://www.goodiptv.club/huya/'input'", + "链接是否直接播放": "1", + "直接播放链接加前缀": "", + "直接播放链接加后缀": "", + "直接播放直链视频请求头": "", + "是否开启手动嗅探": "1", + "手动嗅探视频链接关键词": "/huya", + "手动嗅探视频链接过滤词": ".html#=http" +} \ No newline at end of file diff --git a/js/s/西瓜.json b/js/s/西瓜.json new file mode 100644 index 0000000..b4f1480 --- /dev/null +++ b/js/s/西瓜.json @@ -0,0 +1,14 @@ +{ + "主页url": "https://sszzyy.com/", + "分类url": "https://sszzyy.com/index.php/vod/show/id/{cateId}/page/{catePg}.html", + "分类": "电影$20#剧集$37", + "标题": "title=\"*\">&&", + "图片": "data-original=\"&&\"", + "链接": "href=\"&&\"", + "播放数组": "content_playlist&&", + "播放列表": "", + "播放标题": ">&&", + "跳转播放链接": "src=\"&&\"", + "线路数组": "class=\"titleName cr3 swiper-slide&&", + "线路标题": ">&&" +} diff --git a/js/s/随客.json b/js/s/随客.json new file mode 100644 index 0000000..c55f2d5 --- /dev/null +++ b/js/s/随客.json @@ -0,0 +1,19 @@ +{ + "请求头": "User-Agent$MOBILE_UA", + "编码": "UTF-8", + "数组": "lazyload\"&&&&", + "链接": "href=\"&&\"", + "播放数组": "stui-content__playlist column8 clearfix\">&&", + "播放列表": "", + "播放链接": "href=\"&&\"", + "播放标题": ">&&&&&&&&", + "数组": "\"v_img\"&&/div>", + "标题": "title=\"&&\"", + "副标题": "v_note\"&&&&

    ", + "副标题": "v_note\">&&", + "分类url": "https://saohuody.com/list/{cateId}-{catePg}.html", + "分类": "国产剧$12#港剧$13#台剧$14#日剧$15#韩剧$16#美剧$17#海外$18#泰剧$19#动作$5#喜剧$6#爱情$7#科幻$8#恐怖$9#剧情$10#战争$11#动画$33" +} \ No newline at end of file diff --git a/js/ss/kisd.json b/js/ss/kisd.json new file mode 100644 index 0000000..1f1bcc8 --- /dev/null +++ b/js/ss/kisd.json @@ -0,0 +1,10 @@ +{ + "请求头": "User-Agent$MOBILE_UA", + "编码": "UTF-8", + "标题": "alt=\"&&\"", + "数组": "img-box cover-md bind_video_img&&", + "直接播放": "1", + "分类url": "https://www.kissavtv.com/index/getstylemvs/id/{cateId}/sort/update/page/{catePg}", + "分类": "中文&角色&制服&调教&无码&丝袜&啪啪", + "分类值": "3&2&4&7&11&6&5" +} diff --git a/js/ss/pronlulu.json b/js/ss/pronlulu.json new file mode 100644 index 0000000..ef35f30 --- /dev/null +++ b/js/ss/pronlulu.json @@ -0,0 +1,11 @@ +{ + //"主页url": "https://www.pornlulu.com/", + //"数组": "class=\"card\"&&", + //"标题": "alt=\"&&\"", + //"图片": "src=\"&&\"", + //"链接": "href=\"&&\"", + //"直接播放": "1", + "嗅探词": ".m3u8#.mp4", + "分类url": "https://www.pornlulu.com/cat/{cateId}?page={catePg}", + "分类": "國產自拍$263#中文字幕$48#日本有碼$269國產情色460#日本無碼$270#國產精品$249強姦亂倫$13#歐美精品$260#制服誘惑$92#蘿莉少女$103#成人動漫$274#美女主播$264#亞洲有碼$105#國產主播$268#國產視頻$304#巨乳美乳$93#歐美極品$266#自拍偷拍$28#騎兵有碼$261#無碼專區$254#抖陰視頻$25" +} diff --git a/js/ss/七区.py b/js/ss/七区.py new file mode 100644 index 0000000..4bbc91c --- /dev/null +++ b/js/ss/七区.py @@ -0,0 +1,658 @@ +# coding=utf-8 +#!/usr/bin/python +import sys +sys.path.append('..') +from base.spider import Spider +import json +import time +import urllib.parse +import re +import requests +from lxml import etree +from urllib.parse import urljoin + +class Spider(Spider): + + def getName(self): + return "苹果视频" + + def init(self, extend=""): + self.host = "https://618636.xyz" + self.api_host = "https://h5.xxoo168.org" + self.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', + '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', + 'Accept-Encoding': 'gzip, deflate', + 'Connection': 'keep-alive', + 'Referer': self.host + } + # 定义特殊分区ID列表 + self.special_categories = ['37', '43', '40', '49', '44', '41', '39', '45', '42', '38', '66', '46', '48', '47'] + self.log(f"苹果视频爬虫初始化完成,主站: {self.host}") + + def html(self, content): + """将HTML内容转换为可查询的对象""" + try: + return etree.HTML(content) + except: + self.log("HTML解析失败") + return None + + def regStr(self, pattern, string, index=1): + """正则表达式提取字符串""" + try: + match = re.search(pattern, string, re.IGNORECASE) + if match and len(match.groups()) >= index: + return match.group(index) + except: + pass + return "" + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def homeContent(self, filter): + """获取首页内容和分类""" + result = {} + # 分类定义 + classes = [ + {'type_id': '618636.xyz_37', 'type_name': '国产AV'}, + {'type_id': '618636.xyz_43', 'type_name': '探花AV'}, + {'type_id': '618636.xyz_40', 'type_name': '网黄UP主'}, + {'type_id': '618636.xyz_49', 'type_name': '绿帽淫妻'}, + {'type_id': '618636.xyz_44', 'type_name': '国产传媒'}, + {'type_id': '618636.xyz_41', 'type_name': '福利姬'}, + {'type_id': '618636.xyz_39', 'type_name': '字幕'}, + {'type_id': '618636.xyz_45', 'type_name': '水果派'}, + {'type_id': '618636.xyz_42', 'type_name': '主播直播'}, + {'type_id': '618636.xyz_38', 'type_name': '欧美'}, + {'type_id': '618636.xyz_66', 'type_name': 'FC2'}, + {'type_id': '618636.xyz_46', 'type_name': '性爱教学'}, + {'type_id': '618636.xyz_48', 'type_name': '三及片'}, + {'type_id': '618636.xyz_47', 'type_name': '动漫'} + ] + result['class'] = classes + + try: + rsp = self.fetch(self.host, headers=self.headers) + if not rsp or rsp.status_code != 200: + self.log("首页请求失败") + result['list'] = [] + return result + + doc = self.html(rsp.text) + if not doc: + self.log("首页HTML解析失败") + result['list'] = [] + return result + + videos = self._get_videos(doc, limit=20) + result['list'] = videos + except Exception as e: + self.log(f"首页获取出错: {str(e)}") + result['list'] = [] + return result + + def homeVideoContent(self): + """分类定义 - 兼容性方法""" + return { + 'class': [ + {'type_id': '618636.xyz_37', 'type_name': '国产AV'}, + {'type_id': '618636.xyz_43', 'type_name': '探花AV'}, + {'type_id': '618636.xyz_40', 'type_name': '网黄UP主'}, + {'type_id': '618636.xyz_49', 'type_name': '绿帽淫妻'}, + {'type_id': '618636.xyz_44', 'type_name': '国产传媒'}, + {'type_id': '618636.xyz_41', 'type_name': '福利姬'}, + {'type_id': '618636.xyz_39', 'type_name': '字幕'}, + {'type_id': '618636.xyz_45', 'type_name': '水果派'}, + {'type_id': '618636.xyz_42', 'type_name': '主播直播'}, + {'type_id': '618636.xyz_38', 'type_name': '欧美'}, + {'type_id': '618636.xyz_66', 'type_name': 'FC2'}, + {'type_id': '618636.xyz_46', 'type_name': '性爱教学'}, + {'type_id': '618636.xyz_48', 'type_name': '三及片'}, + {'type_id': '618636.xyz_47', 'type_name': '动漫'} + ] + } + + def categoryContent(self, tid, pg, filter, extend): + """分类内容 - 修复版""" + try: + domain, type_id = tid.split('_') + url = f"https://{domain}/index.php/vod/type/id/{type_id}.html" + if pg and pg != '1': + url = url.replace('.html', f'/page/{pg}.html') + + self.log(f"访问分类URL: {url}") + rsp = self.fetch(url, headers=self.headers) + if not rsp or rsp.status_code != 200: + self.log("分类页面请求失败") + return {'list': []} + + doc = self.html(rsp.text) + if not doc: + self.log("分类页面HTML解析失败") + return {'list': []} + + videos = self._get_videos(doc, category_id=type_id, limit=20) + + # 尝试从分页元素中提取真实的分页信息 + pagecount = 5 # 默认值 + total = 100 # 默认值 + + # 查找分页信息 + page_elements = doc.xpath('//ul[@class="pagination"]/li/a') + if page_elements: + try: + # 查找尾页链接 + last_page = None + for elem in page_elements: + if '尾' in elem.text or 'last' in elem.text.lower(): + href = elem.xpath('./@href')[0] + page_match = re.search(r'/page/(\d+)\.html', href) + if page_match: + pagecount = int(page_match.group(1)) + total = pagecount * 20 + break + except: + pass + + return { + 'list': videos, + 'page': int(pg), + 'pagecount': pagecount, + 'limit': 20, + 'total': total + } + except Exception as e: + self.log(f"分类内容获取出错: {str(e)}") + return {'list': []} + + def searchContent(self, key, quick, pg="1"): + """搜索功能 - 修复版""" + try: + # 构造搜索URL + search_url = f"{self.host}/index.php/vod/search/wd/{urllib.parse.quote(key)}/page/{pg}.html" + self.log(f"搜索URL: {search_url}") + + rsp = self.fetch(search_url, headers=self.headers) + if not rsp or rsp.status_code != 200: + self.log("搜索请求失败") + return {'list': []} + + doc = self.html(rsp.text) + if not doc: + self.log("搜索页面解析失败") + return {'list': []} + + videos = self._get_videos(doc, limit=20) + + # 分页信息 + pagecount = 5 + total = 100 + + return { + 'list': videos, + 'page': int(pg), + 'pagecount': pagecount, + 'limit': 20, + 'total': total + } + except Exception as e: + self.log(f"搜索出错: {str(e)}") + return {'list': []} + + def detailContent(self, ids): + """详情页面 - 修复版""" + try: + vid = ids[0] + + # 检查是否是特殊分区的链接 + if vid.startswith('special_'): + parts = vid.split('_') + if len(parts) >= 4: + category_id = parts[1] + video_id = parts[2] + encoded_url = '_'.join(parts[3:]) + play_url = urllib.parse.unquote(encoded_url) + + self.log(f"特殊分区视频,直接使用链接: {play_url}") + + # 从播放链接中提取视频URL + parsed_url = urllib.parse.urlparse(play_url) + query_params = urllib.parse.parse_qs(parsed_url.query) + video_url = query_params.get('v', [''])[0] + pic_url = query_params.get('b', [''])[0] + title_encrypted = query_params.get('m', [''])[0] + + # 解码标题 + title = self._decrypt_title(title_encrypted) + + return { + 'list': [{ + 'vod_id': vid, + 'vod_name': title, + 'vod_pic': pic_url, + 'vod_remarks': '', + 'vod_year': '', + 'vod_play_from': '直接播放', + 'vod_play_url': f"第1集${play_url}" + }] + } + + # 常规处理 + if '_' in vid and len(vid.split('_')) > 2: + domain, category_id, video_id = vid.split('_') + else: + domain, video_id = vid.split('_') + + detail_url = f"https://{domain}/index.php/vod/detail/id/{video_id}.html" + + self.log(f"访问详情URL: {detail_url}") + rsp = self.fetch(detail_url, headers=self.headers) + if not rsp or rsp.status_code != 200: + self.log("详情页面请求失败") + return {'list': []} + + doc = self.html(rsp.text) + if not doc: + self.log("详情页面HTML解析失败") + return {'list': []} + + video_info = self._get_detail(doc, rsp.text, vid) + return {'list': [video_info]} if video_info else {'list': []} + except Exception as e: + self.log(f"详情获取出错: {str(e)}") + return {'list': []} + + def playerContent(self, flag, id, vipFlags): + """播放链接 - 修复版""" + try: + self.log(f"获取播放链接: flag={flag}, id={id}") + + # 检查是否是特殊分区的链接 + if id.startswith('special_'): + parts = id.split('_') + if len(parts) >= 4: + category_id = parts[1] + video_id = parts[2] + encoded_url = '_'.join(parts[3:]) + play_url = urllib.parse.unquote(encoded_url) + + self.log(f"特殊分区视频,直接使用链接: {play_url}") + + # 从播放链接中提取视频URL + parsed_url = urllib.parse.urlparse(play_url) + query_params = urllib.parse.parse_qs(parsed_url.query) + video_url = query_params.get('v', [''])[0] + + if video_url: + if video_url.startswith('//'): + video_url = 'https:' + video_url + elif not video_url.startswith('http'): + video_url = urljoin(self.host, video_url) + + self.log(f"从特殊链接中提取到视频地址: {video_url}") + return {'parse': 0, 'playUrl': '', 'url': video_url} + + # 检查传入的ID是否为完整URL + if id.startswith('http'): + self.log("ID 是一个完整URL,直接解析参数") + parsed_url = urllib.parse.urlparse(id) + query_params = urllib.parse.parse_qs(parsed_url.query) + + video_url = query_params.get('v', [''])[0] + if not video_url: + for key in query_params: + if key in ['url', 'src', 'file']: + video_url = query_params[key][0] + break + + if video_url: + video_url = urllib.parse.unquote(video_url) + if video_url.startswith('//'): + video_url = 'https:' + video_url + elif not video_url.startswith('http'): + video_url = urljoin(self.host, video_url) + + self.log(f"从 URL 参数中提取到视频地址: {video_url}") + return {'parse': 0, 'playUrl': '', 'url': video_url} + else: + self.log("URL 中没有找到视频参数,尝试从页面提取") + rsp = self.fetch(id, headers=self.headers) + if rsp and rsp.status_code == 200: + video_url = self._extract_direct_video_url(rsp.text) + if video_url: + self.log(f"从页面提取到视频地址: {video_url}") + return {'parse': 0, 'playUrl': '', 'url': video_url} + + self.log("无法从页面提取视频链接,返回原始URL") + return {'parse': 1, 'playUrl': '', 'url': id} + + # 从 id 格式中提取视频ID和分类ID + if id.count('_') >= 2: + parts = id.split('_') + video_id = parts[-1] + category_id = parts[1] + else: + video_id = id.split('_')[-1] + category_id = '' + + self.log(f"视频ID: {video_id}, 分类ID: {category_id}") + + # 对于特殊分类,使用直接解析播放页面的方式 + if category_id in self.special_categories: + self.log("特殊分类,尝试从详情页提取直接播放链接") + play_page_url = f"{self.host}/index.php/vod/play/id/{video_id}.html" + + rsp = self.fetch(play_page_url, headers=self.headers) + if rsp and rsp.status_code == 200: + video_url = self._extract_direct_video_url(rsp.text) + if video_url: + self.log(f"从播放页面提取到视频地址: {video_url}") + return {'parse': 0, 'playUrl': '', 'url': video_url} + + self.log("从播放页面提取失败,尝试API方式") + return self._get_video_by_api(id, video_id) + else: + self.log("使用API方式获取视频地址") + return self._get_video_by_api(id, video_id) + + except Exception as e: + self.log(f"播放链接获取出错: {str(e)}") + if '_' in id: + domain, play_id = id.split('_') + play_url = f"https://{domain}/html/kkyd.html?m={play_id}" + else: + play_url = f"{self.host}/html/kkyd.html?m={id}" + return {'parse': 1, 'playUrl': '', 'url': play_url} + + def _get_video_by_api(self, id, video_id): + """通过API获取视频地址""" + try: + api_url = f"{self.api_host}/api/v2/vod/reqplay/{video_id}" + self.log(f"请求API获取视频地址: {api_url}") + + api_headers = self.headers.copy() + api_headers.update({ + 'Referer': f"{self.host}/", + 'Origin': self.host, + 'X-Requested-With': 'XMLHttpRequest' + }) + + api_response = self.fetch(api_url, headers=api_headers) + if api_response and api_response.status_code == 200: + data = api_response.json() + self.log(f"API响应: {data}") + + if data.get('retcode') == 3: + video_url = data.get('data', {}).get('httpurl_preview', '') + else: + video_url = data.get('data', {}).get('httpurl', '') + + if video_url: + video_url = video_url.replace('?300', '') + self.log(f"从API获取到视频地址: {video_url}") + return {'parse': 0, 'playUrl': '', 'url': video_url} + else: + self.log("API响应中没有找到视频地址") + else: + self.log(f"API请求失败,状态码: {api_response.status_code if api_response else '无响应'}") + + if '_' in id: + domain, play_id = id.split('_') + play_url = f"https://{domain}/html/kkyd.html?m={play_id}" + else: + play_url = f"{self.host}/html/kkyd.html?m={id}" + self.log(f"API请求失败,回退到播放页面: {play_url}") + return {'parse': 1, 'playUrl': '', 'url': play_url} + + except Exception as e: + self.log(f"API方式获取视频出错: {str(e)}") + if '_' in id: + domain, play_id = id.split('_') + play_url = f"https://{domain}/html/kkyd.html?m={play_id}" + else: + play_url = f"{self.host}/html/kkyd.html?m={id}" + return {'parse': 1, 'playUrl': '', 'url': play_url} + + def _extract_direct_video_url(self, html_content): + """从HTML内容中提取直接播放链接""" + try: + patterns = [ + r'v=([^&]+\.(?:m3u8|mp4))', + r'"url"\s*:\s*["\']([^"\']+\.(?:mp4|m3u8))["\']', + r'src\s*=\s*["\']([^"\']+\.(?:mp4|m3u8))["\']', + r'http[^\s<>"\'?]+\.(?:mp4|m3u8)' + ] + + for pattern in patterns: + matches = re.findall(pattern, html_content, re.IGNORECASE) + for match in matches: + if isinstance(match, tuple): + match = match[0] + extracted_url = match.replace('\\', '') + extracted_url = urllib.parse.unquote(extracted_url) + + if extracted_url.startswith('//'): + extracted_url = 'https:' + extracted_url + elif extracted_url.startswith('http'): + return extracted_url + + return None + except Exception as e: + self.log(f"提取直接播放URL出错: {str(e)}") + return None + + def _get_videos(self, doc, category_id=None, limit=None): + """获取影片列表 - 根据实际网站结构修复""" + try: + videos = [] + # 修复XPath选择器,匹配实际的HTML结构 + elements = doc.xpath('//ul[@class="thumbnail-group"]//a[@class="thumbnail"]') + if not elements: + # 尝试其他可能的选择器 + elements = doc.xpath('//a[contains(@class, "thumbnail")]') + + self.log(f"找到 {len(elements)} 个视频元素") + + for elem in elements: + video = self._extract_video(elem, category_id) + if video: + videos.append(video) + + return videos[:limit] if limit and videos else videos + except Exception as e: + self.log(f"获取影片列表出错: {str(e)}") + return [] + + def _extract_video(self, element, category_id=None): + """提取影片信息 - 修复版""" + try: + # 获取链接 + link = element.xpath('./@href')[0] + if link.startswith('/'): + link = self.host + link + + # 检查是否是特殊分区的链接 + is_special_link = '/html/28k.html' in link or '/html/ar.html' in link + + # 对于特殊分区,直接使用链接本身作为ID + if is_special_link and category_id in self.special_categories: + # 从链接中提取视频ID + parsed_url = urllib.parse.urlparse(link) + query_params = urllib.parse.parse_qs(parsed_url.query) + video_url = query_params.get('v', [''])[0] + + if video_url: + video_id_match = re.search(r'/([a-f0-9-]+)/[^/]+\.m3u8', video_url) + if video_id_match: + video_id = video_id_match.group(1) + else: + video_id = str(hash(link) % 1000000) + else: + video_id = str(hash(link) % 1000000) + + final_vod_id = f"special_{category_id}_{video_id}_{urllib.parse.quote(link)}" + else: + # 常规处理 + vod_id = self.regStr(r'/id/(\d+)\.html', link) + if not vod_id: + vod_id = str(hash(link) % 1000000) + + final_vod_id = f"618636.xyz_{vod_id}" + if category_id: + final_vod_id = f"618636.xyz_{category_id}_{vod_id}" + + # 提取标题 - 修复选择器 + title_elem = element.xpath('.//span[@class="title km-script"]/text()') + if not title_elem: + title_elem = element.xpath('.//span[contains(@class, "title")]/text()') + if not title_elem: + title_elem = element.xpath('.//p[contains(@class, "title")]/text()') + if not title_elem: + title_elem = element.xpath('.//h3/text()') + if not title_elem: + title_elem = element.xpath('.//h4/text()') + if not title_elem: + self.log("未找到标题元素,跳过该视频") + return None + + title_encrypted = title_elem[0].strip() + title = self._decrypt_title(title_encrypted) + + # 提取图片 - 修复选择器 + pic_elem = element.xpath('.//img/@data-original') + if not pic_elem: + pic_elem = element.xpath('.//img/@src') + pic = pic_elem[0] if pic_elem else '' + + if pic: + if pic.startswith('//'): + pic = 'https:' + pic + elif pic.startswith('/'): + pic = self.host + pic + + return { + 'vod_id': final_vod_id, + 'vod_name': title, + 'vod_pic': pic, + 'vod_remarks': '', + 'vod_year': '' + } + except Exception as e: + self.log(f"提取影片信息出错: {str(e)}") + return None + + def _decrypt_title(self, encrypted_text): + """解密标题""" + try: + decrypted_chars = [] + for char in encrypted_text: + code_point = ord(char) + decrypted_code = code_point ^ 128 + decrypted_char = chr(decrypted_code) + decrypted_chars.append(decrypted_char) + + decrypted_text = ''.join(decrypted_chars) + return decrypted_text + except Exception as e: + self.log(f"标题解密失败: {str(e)}") + return encrypted_text + + def _get_detail(self, doc, html_content, vid): + """获取详情信息 - 修复版""" + try: + title = self._get_text(doc, ['//h1/text()', '//title/text()']) + pic = self._get_text(doc, ['//div[contains(@class,"dyimg")]//img/@src', '//img[contains(@class,"poster")]/@src']) + if pic and pic.startswith('/'): + pic = self.host + pic + desc = self._get_text(doc, ['//div[contains(@class,"yp_context")]/text()', '//div[contains(@class,"introduction")]//text()']) + actor = self._get_text(doc, ['//span[contains(text(),"主演")]/following-sibling::*/text()']) + director = self._get_text(doc, ['//span[contains(text(),"导演")]/following-sibling::*/text()']) + + play_from = [] + play_urls = [] + + # 修复播放链接提取逻辑 + player_link_patterns = [ + r'href="(/html/28k\.html[^"]*)"', + r'href="(/html/ar\.html[^"]*)"', + r'href="(/html/kkyd\.html[^"]*)"' + ] + + player_links = [] + for pattern in player_link_patterns: + matches = re.findall(pattern, html_content) + player_links.extend(matches) + + if player_links: + episodes = [] + for link in player_links: + full_url = urljoin(self.host, link) + episodes.append(f"第1集${full_url}") + + if episodes: + play_from.append("默认播放源") + play_urls.append('#'.join(episodes)) + + if not play_from: + self.log("未找到播放源,使用默认播放方式") + play_from.append("默认播放源") + play_urls.append(f"第1集${vid}") + + return { + '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), + 'vod_play_url': '$$$'.join(play_urls) + } + except Exception as e: + self.log(f"获取详情出错: {str(e)}") + return None + + def _get_text(self, doc, selectors): + """通用文本提取""" + for selector in selectors: + try: + texts = doc.xpath(selector) + for text in texts: + if text and text.strip(): + return text.strip() + except: + continue + return '' + + def log(self, message): + """日志输出""" + print(f"[苹果视频] {message}") + + def fetch(self, url, headers=None, method='GET', data=None, timeout=10): + """网络请求""" + try: + if headers is None: + headers = self.headers + if method == 'GET': + response = requests.get(url, headers=headers, timeout=timeout, verify=False) + else: + response = requests.post(url, headers=headers, data=data, timeout=timeout, verify=False) + return response + except Exception as e: + self.log(f"网络请求失败: {url}, 错误: {str(e)}") + return None + +# 注册爬虫 +if __name__ == '__main__': + from base.spider import Spider as BaseSpider + BaseSpider.register(Spider()) \ No newline at end of file diff --git a/js/ss/百万.json b/js/ss/百万.json new file mode 100644 index 0000000..7d4b042 --- /dev/null +++ b/js/ss/百万.json @@ -0,0 +1,9 @@ +{ + "数组": "class=\"appel-max\"&&", + "标题": "alt=\"&&\"", + "图片": "src=\"&&\"", + "链接": "href=\"&&\"", + "分类url": "https://www.lsshaofu.xyz/index.php/vod/type/id/{cateId}/page/{catePg}.html", + "分类": "百万破解$44#熟女$45#每日黑料$46#自拍偷拍$47#18+少女$49#国产自拍$50#日本无码$51", + "跳转播放链接": "urlDecode(var player_*url\":\"&&\")" +} diff --git a/js/ss/花都.json b/js/ss/花都.json new file mode 100644 index 0000000..fb5cb42 --- /dev/null +++ b/js/ss/花都.json @@ -0,0 +1,11 @@ +{ + "数组": "class=\"stui-vodlist__box\"&&", + "图片": "data-original=\"&&\"", + "副标题": "&&", + "链接": "href=\"&&\"", + "播放链接": "href=\"&&\"", + "播放列表": "&&

    ", + "图片": "data-original=\"&&\"[替换:amp;>>空]", + "线路数组": "#ewave-playlist-&&", + "分类url": "https://www.7.movie/vodshow/{cateId}-{area}--{class}-----{catePg}---{year}.html", + "分类": "短剧$24#电视剧$21#电影$20#动漫$22#综艺$23" +} \ No newline at end of file diff --git a/js/xiaosa/XBPQ/三九影视.json b/js/xiaosa/XBPQ/三九影视.json new file mode 100644 index 0000000..d684645 --- /dev/null +++ b/js/xiaosa/XBPQ/三九影视.json @@ -0,0 +1,5 @@ +{ + "简介": "+detail-content\" style=*>&&", + "分类url": "https://www.539539.xyz/index.php/vod/show/area/{area}/class/{class}/id/{cateId}/page/{catePg}/year/{year}.html", + "分类": "短剧$25#电视剧$2#电影$1#动漫$4#综艺$3" +} \ No newline at end of file diff --git a/js/xiaosa/XBPQ/三四影视.json b/js/xiaosa/XBPQ/三四影视.json new file mode 100644 index 0000000..ebc8d96 --- /dev/null +++ b/js/xiaosa/XBPQ/三四影视.json @@ -0,0 +1,5 @@ +{ + "简介": "+col-pd\">&&

    ", + "分类url": "https://ikan234.com/show/{cateId}-{area}--{class}-----{catePg}---{year}.html", + "分类": "短剧$5#电视剧$2#电影$1#动漫$4#综艺$3" +} \ No newline at end of file diff --git a/js/xiaosa/XBPQ/修罗影视.json b/js/xiaosa/XBPQ/修罗影视.json new file mode 100644 index 0000000..b94ea54 --- /dev/null +++ b/js/xiaosa/XBPQ/修罗影视.json @@ -0,0 +1,15 @@ +{ + "数组": "card card-sm card-link&&", + "图片": "src=\"&&\"", + "标题": "mb-0 card-title text-truncate\">&&<", + "副标题": "start-0 text-red-fg\">&&", + "链接": "href=\"&&\"", + "简介": "剧情简介:&&\"", + "线路标题": "磁力+>&&<", + "播放数组": "download-list&&", + "播放列表": "", + "播放标题": "text-muted\">&&[不包含:网盘下载]", + "跳转播放链接": "href=\"&&\"", + "分类url": "https://v.xlys.ltd.ua/s/all/{catePg}?type={cateId};;d0", + "分类": "电影$0#电视剧$1" +} \ No newline at end of file diff --git a/js/xiaosa/XBPQ/免费影视.json b/js/xiaosa/XBPQ/免费影视.json new file mode 100644 index 0000000..68b8b00 --- /dev/null +++ b/js/xiaosa/XBPQ/免费影视.json @@ -0,0 +1,20 @@ +{ + "站名": "", + "主页url": "https://www.freeok.ac", + "请求头": "User-Agent$MOBILE_UA", + "编码": "UTF-8", + "数组": "", + "图片": "data-original=\"&&\"", + "标题": "", + "链接": "href=\"&&\"", + "副标题": "", + "线路数组": "module-tab-item&&", + "线路标题": "data-dropdown-value=\"&&\"", + "播放数组": "", + "播放标题": "", + "跳转播放链接": "urlDecode(Base64(var player_*url\":\"&&\"))", + "搜索url": "https://www.freeok.ac/vodsearch/-------------.html?wd={wd}", + "简介": "

    &&

    ", + "分类url": "https://www.freeok.ac/type/{cateId}.html", + "分类": "电影$1#连续剧$2#动漫$3#综艺$4#短剧$24" +} \ No newline at end of file diff --git a/js/xiaosa/XBPQ/养生堂.json b/js/xiaosa/XBPQ/养生堂.json new file mode 100644 index 0000000..4519779 --- /dev/null +++ b/js/xiaosa/XBPQ/养生堂.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=", + // "线路标题": "&&", + "线路数组": "javascript:;\">&&", + "数组": "
  • &&
  • ", + "图片": "data-echo=\"&&\"", + "分类url": "https://vip.wwgz.cn:5200/vod-list-id-{cateId}-pg-{catePg}-order--by-time-class-0-year-{year}-letter--area-{area}-lang-.html", + "分类": "电影$1#电视剧$2#动漫$4#综艺$3#短剧$26" +} \ No newline at end of file diff --git a/js/xiaosa/XBPQ/哆啦新番社.json b/js/xiaosa/XBPQ/哆啦新番社.json new file mode 100644 index 0000000..6617766 --- /dev/null +++ b/js/xiaosa/XBPQ/哆啦新番社.json @@ -0,0 +1,18 @@ +{ + "请求头": "User-Agent$MOBILE_UA", + "编码": "UTF-8", + "主页url": "https://dora.xiaoxinbk.com/", + "数组": "class=\"card-img-bili\"&&", + "标题": "alt=\"&&\"", + "图片": "data-url=\"&&\"", + "链接": "href=\"&&\"", + "线路标题": "mt-0\">&&", + "播放数组": "class=\"card-body button-list\"&&", + "播放列表": "", + "播放链接": "href=\"&&\"", + "播放标题": ">&&", + "标题": "title=*>&&<", + "图片": "data-src=\"&&\"", + "副标题": "class\">&&<", + "链接": "href=\"&&\"[替换:vodplay>>voddetail#-1-1.html>>.html]", + "影片年代": "-----------*.html\">&&&&", + "导演": "导演:&&", + "主演": "主演:&&\">", + "简介": "vod_content\"&&", + "线路数组": "data-dropdown&&/small>", + "线路标题": "value=\"&&\"+【共+&&<+集】", + "播放数组": "id=\"sort-item&&", + "播放列表": "", + "播放标题": "&&<", + "播放链接": "href=\"&&\"", + "跳转播放链接": "var player_*\"url\":\"&&\"", + "搜索请求头": "User-Agent$MOBILE_UA", + "搜索url": "https://mxvod.com/vodsearch/{wd}----------{pg}---.html", + "搜索模式": "1", + "搜索数组": "lazyload\"&&/a>", + "搜索标题": "title=\"&&\"", + "搜索图片": "data-src=\"&&\"", + "搜索副标题": "title=*>&&<", + "搜索链接": "href=\"&&\"", + "筛选": "1", + "类型": "动作片$dongzuopian#喜剧片$xijupian#爱情片$aiqingpian#科幻片$kehuanpian#恐怖片$kongbupian#战争片$zhanzhengpian#剧情片$juqingpian#动画片$donghuapian#悬疑片$xuanyi#纪录片$jilupian#奇幻片$qihuanpian#灾难片$zainanpian||国产剧$guochanju#欧美剧$oumeiju#日剧$riju#韩剧$hanju#港台剧$gangtai#海外剧$haiwai||大陆综艺$daluzongyi#港台综艺$gangtaizongyi#欧美综艺$oumeizongyi#日韩综艺$rihanzongyi#海外综艺$haiwaizongyi||国产动漫$guochandongman#日韩动漫$rihandongman#欧美动漫$oumeidongman#海外动漫$haiwaidongman||空", + "剧情": "喜剧&爱情&恐怖&动作&科幻&剧情&战争&警匪&犯罪&动画&奇幻&武侠&冒险&枪战&恐怖&悬疑&惊悚&经典&青春&文艺&微电影&古装&历史&运动&农村&儿童&网络电影||古装&战争&青春偶像&喜剧&家庭&犯罪&动作&奇幻&剧情&历史&经典&乡村&情景&商战&网剧&其他||选秀&情感&访谈&播报&旅游&音乐&美食&纪实&曲艺&生活&游戏互动&财经&求职||情感&科幻&热血&推理&搞笑&冒险&萝莉&校园&动作&机战&运动&战争&少年&少女&社会&原创&亲子&益智&励志&其他||古装&虐恋&逆袭&神豪&重生&复仇&穿越&甜宠&强者&萌宝&其它", + "年份": "1990-2025", + "年份值": "*", + "语言值": "*", + "排序": "时间&人气&评分", + "排序值": "time&hits&score" +} \ No newline at end of file diff --git a/js/xiaosa/XBPQ/樱花动漫.json b/js/xiaosa/XBPQ/樱花动漫.json new file mode 100644 index 0000000..317804e --- /dev/null +++ b/js/xiaosa/XBPQ/樱花动漫.json @@ -0,0 +1,6 @@ +{ + "简介": "", + "数组": "", + "分类url": "http://www.yinghuadm.cn/show_{cateId}--{by}-{class}-----{catePg}---{year}.html", + "分类": "日本动漫$ribendongman#国产动漫$guochandongman#动漫电影$dongmandianying#欧美动漫$oumeidongman" +} \ No newline at end of file diff --git a/js/xiaosa/XBPQ/永乐影视.json b/js/xiaosa/XBPQ/永乐影视.json new file mode 100644 index 0000000..44f7706 --- /dev/null +++ b/js/xiaosa/XBPQ/永乐影视.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/js/xiaosa/XBPQ/海纳影视.json b/js/xiaosa/XBPQ/海纳影视.json new file mode 100644 index 0000000..4b90fec --- /dev/null +++ b/js/xiaosa/XBPQ/海纳影视.json @@ -0,0 +1,6 @@ +{ + "简介": "简介:&&", + "数组": "row\">&&", + "分类url": "https://www.hainatv.net/index.php/vod/show/area/{area}/id/{cateId}/lang/{lang}/page/{catePg}/year/{year}.html", + "分类": "电影$1#电视剧$2#综艺$3#动漫$4#短剧$59" +} \ No newline at end of file diff --git a/js/xiaosa/XBPQ/狐狸君.json b/js/xiaosa/XBPQ/狐狸君.json new file mode 100644 index 0000000..1219930 --- /dev/null +++ b/js/xiaosa/XBPQ/狐狸君.json @@ -0,0 +1,21 @@ +{ + "搜索模式": "1", + "搜索url": "https://www.foxjun.com/s/?q={wd}", + "搜索数组": "class=\"media\">&&/div>", + "搜索图片": "src=\"&&\"", + "搜索标题": "《&&》", + "搜索副标题": "》&&\"", + "搜索链接": "href=\"&&\"", + "标题": "《&&》", + "副标题": "》&&\"", + "影片年代": "上映日期:&&

    ", + "影片类型": "类型:&&

    ", + "主演": "主演:&&

    ", + "简介": "简介:&&

    ", + "播放数组": "&&", + "播放列表": "[包含:magnet]", + "播放标题": ">&&<", + "播放链接": "href=\"&&\"", + "分类url": "https://www.foxjun.com/channel/{cateId}.html?apage1={catepg}", + "分类": "国产剧$guochanju#电影$dianying#动画$donghua#美欧剧$meiouju#日韩剧$rihanju" +} \ No newline at end of file diff --git a/js/xiaosa/XBPQ/番茄短剧.json b/js/xiaosa/XBPQ/番茄短剧.json new file mode 100644 index 0000000..647622a --- /dev/null +++ b/js/xiaosa/XBPQ/番茄短剧.json @@ -0,0 +1,37 @@ +{ + "请求头": "User-Agent$MOBILE_UA", + "编码": "UTF-8", + "主页url": "https://www.dzwhs.com/zwhstp/5.html", + "首页": "120", + "起始页": "1", + "分类url": "/zwhssw/5--{by}-{cateId}-{lang}-{letter}---{catePg}---{year}.html;", + "分类": "古装&反转&穿越&总裁&言情&爽文&女恋&都市", + "分类值": "*", + "数组": "默认--lazyload\"&&&&&&<", + "影片类型": "类型:
    &&<", + "状态": "状态:&&", + "线路标题": "(>&&<)", + "播放二次截取": "", + "播放数组": "playlist clearfix&&", + "倒序": "0", + "播放列表": "", + "播放标题": ">&&<", + "播放链接": "href=\"&&\"", + "跳转播放链接": "var player_*\"url\":\"&&\"", + "搜索请求头": "User-Agent$MOBILE_UA", + "搜索url": "/zwhssc/{wd}----------{pg}---.html", + "搜索模式": "1", + "排序": "最新上映&超高人气&全网热播&高分好评", + "排序值": "time&hits&up&score", + "筛选": "1" +} \ No newline at end of file diff --git a/js/xiaosa/XBPQ/雪糕影视.json b/js/xiaosa/XBPQ/雪糕影视.json new file mode 100644 index 0000000..d90a276 --- /dev/null +++ b/js/xiaosa/XBPQ/雪糕影视.json @@ -0,0 +1,5 @@ +{ + "分类": "电影$1#剧集$2#综艺$3#动漫$4", + "类型": "动作片$1#喜剧片$2#爱情片$21#海外动漫$3#科幻片$4#恐怖片$5#剧情片$6#战争片$7#纪录片$8#其他$9", + "分类url": "https://www.xgitv.com/vshow/{cateId}-----------.html" +} \ No newline at end of file diff --git a/js/xiaosa/XBPQ/面包影视.json b/js/xiaosa/XBPQ/面包影视.json new file mode 100644 index 0000000..d943372 --- /dev/null +++ b/js/xiaosa/XBPQ/面包影视.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/js/xiaosa/XBPQ/骚火影视.json b/js/xiaosa/XBPQ/骚火影视.json new file mode 100644 index 0000000..4ab6048 --- /dev/null +++ b/js/xiaosa/XBPQ/骚火影视.json @@ -0,0 +1,16 @@ +{ + "首页": "0", + "请求头": "User-Agent$MOBILE_UA#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", + "分类url": "https://shdy2.com/list/{cateId}-{catePg}.html", + "分类": "剧集$2#电影$1#港剧$21#台剧$26#日剧$24#韩剧$22#美剧$23", + "数组": "class=\"v_img&&/li>", + "标题": "alt=\"&&\"", + "图片": "original=\"&&\"", + "链接": "href=\"&&\"", + "简介": "show_part\">&&", + "播放数组": "", + "倒序": "1" +} \ No newline at end of file diff --git a/js/xiaosa/XBPQ/麦田影视.json b/js/xiaosa/XBPQ/麦田影视.json new file mode 100644 index 0000000..bd2404a --- /dev/null +++ b/js/xiaosa/XBPQ/麦田影视.json @@ -0,0 +1,38 @@ +{ + "站名": "麦田appXBPQ", + "规则作者": "啦啦啦", + "请求头": "User-Agent$MOBILE_UA", + "编码": "UTF-8", + "主页url": "http://172.247.31.147:25321/mtys.php/v6/index_video", + "分类url": "http://172.247.31.147:25321/mtys.php/v6/video?pg={catePg}&tid={cateId}&class={class}&area={area}&lang={lang}&year={year}&order={by};;mr", + "分类": "电影&电视剧&综艺&动漫&少儿&短剧&直播", + "分类值": "1&2&3&4&25&26&30", + "数组": "{&&}", + "图片": "vod_pic\":\"&&\"", + "标题": "vod_name\":\"&&\"", + "副标题": "vod_remarks\":\"&&\"", + "链接": "http://172.247.31.147:25321/mtys.php/v6/video_detail?id=+vod_id\":&&,", + "线路二次截取": "vod_url_with_player\":\\[{&&}\\][替换:\"name\":\">>\"name\":\"题]", + "线路数组": "\"name\":\"&&,", + "线路标题": "题&&\"", + "播放二次截取": "vod_url_with_player\":\\[{&&}\\]", + "播放数组": "url\":&&,[替换:\">>接表题#$>>题接#\\#>>接表表题]", + "播放列表": "表&&表", + "播放标题": "题&&题", + "播放链接": "urlDecode(接&&接)", + "解析": "PD源$http://172.247.31.148:25320/jx.php?url=#NB源$https://api.nbyjson.top:7788/api/?key=ws9Lz1EtqfU09AzZKl&url=#ZB源$http://27.25.159.14:6699/api/mgapp.php?url=", + "影片类型": "vod_class\":\"&&\"", + "影片年代": "vod_year\":\"&&\"", + "影片地区": "vod_area\":\"&&\"", + "导演": "vod_director\":\"&&\"", + "主演": "vod_actor\":\"&&\"", + "简介": "vod_content\":\"&&\"", + "搜索url": "http://172.247.31.147:25321/mtys.php/v6/search?pg={pg}&tid=0&text={wd}", + "搜索模式": "1", + "搜索二次截取": "data\":\\[&&\\]", + "搜索数组": "{&&}", + "搜索图片": "vod_pic\":\"&&\"", + "搜索标题": "vod_name\":\"&&\"", + "搜索副标题": "vod_remarks\":\"&&\"", + "搜索链接": "http://172.247.31.147:25321/mtys.php/v6/video_detail?id=+vod_id\":&&," +} \ No newline at end of file diff --git a/js/xiaosa/XYQHiker/农民影视.json b/js/xiaosa/XYQHiker/农民影视.json new file mode 100644 index 0000000..32f2acb --- /dev/null +++ b/js/xiaosa/XYQHiker/农民影视.json @@ -0,0 +1,71 @@ +{ + "规则名": "农民影视", + "规则作者": "香雅情", + "请求头参数": "User-Agent$手机#accept$text/html#Referer$https://vip.wwgz.cn:5200/", + "网页编码格式": "UTF-8", + "图片是否需要代理": "0", + "是否开启获取首页数据": "1", + "首页推荐链接": "https://vip.wwgz.cn:5200/", + "首页列表数组规则": "body&&.globalPicList", + "首页片单列表数组规则": "li:has(img)", + "首页片单是否Jsoup写法": "1", + "首页片单标题": ".sTit&&Text", + "首页片单链接": "a&&href", + "首页片单图片": "img&&data-echo||data-src||src", + "首页片单副标题": ".sBottom&&Text", + "首页片单链接加前缀": "https://vip.wwgz.cn:5200/", + "首页片单链接加后缀": "", + "分类起始页码": "1", + "分类链接": "https://vip.wwgz.cn:5200/vod-list-id-{cateId}-pg-{catePg}-order--by-{by}-class--year-{year}-letter--area-{area}-lang-.html", + "分类名称": "电影&电视剧&综艺&动漫&短剧", + "分类名称替换词": "1&2&3&4&26", + "筛选数据": "ext", + "筛选子分类名称": "动作片&喜剧片&爱情片&科幻片&恐怖片&剧情片&战争片&惊悚片&奇幻片||国产剧&港台泰&日韩剧&欧美剧||空||动漫剧&动漫片", + "筛选子分类替换词": "5&6&7&8&9&10&11&16&17||12&13&14&15||空||18&19", + "筛选地区名称": "大陆&香港&台湾&美国&韩国&日本&泰国&新加坡&马来西亚&印度&英国&法国&加拿大&西班牙&俄罗斯&其它", + "筛选地区替换词": "*", + "分类截取模式": "1", + "分类列表数组规则": ".globalPicList&&li", + "分类片单是否Jsoup写法": "1", + "分类片单标题": ".sTit&&Text", + "分类片单链接": "a&&href", + "分类片单图片": "img&&data-echo||data-src||src", + "分类片单副标题": ".sBottom&&Text", + "分类片单链接加前缀": "https://vip.wwgz.cn:5200/", + "分类片单链接加后缀": "", + "搜索请求头参数": "User-Agent$手机#Referer$https://vip.wwgz.cn:5200/", + "search_url": "https://vip.wwgz.cn:5200/index.php?m=vod-search;post", + "sea_PtBody": "wd={wd}", + "search_mode": "1", + "sea_arr_rule": "#data_list&&li", + "sea_is_jsoup": "1", + "sea_pic": ".lazyload&&data-src", + "sea_title": ".sTit&&Text", + "sea_url": "a&&href", + "搜索片单副标题": ".sDes,-1&&Text", + "搜索片单链接加前缀": "https://vip.wwgz.cn:5200/", + "搜索片单链接加后缀": "", + "链接是否直接播放": "0", + "直接播放链接加前缀": "https://live.52sf.ga/huya/", + "直接播放链接加后缀": "#isVideo=true#", + "直接播放直链视频请求头": "authority$ku.peizq.online#Referer$https://play.peizq.online", + "详情是否Jsoup写法": "1", + "类型详情": ".type-title&&Text", + "年代详情": "body&&span:contains(年代:)&&Text!年代:", + "地区详情": "", + "演员详情": "body&&.sDes:contains(主演:)&&Text!主演:", + "简介详情": ".detail-con&&p&&Text!简介:", + "线路列表数组规则": "#leftTabBox&&ul&&li", + "播放列表数组规则": "#leftTabBox&&.numList", + "选集列表数组规则": "li", + "选集标题链接是否Jsoup写法": "1", + "选集标题": "a&&Text", + "选集链接": "a&&href", + "是否反转选集序列": "1", + "选集链接加前缀": "https://vip.wwgz.cn:5200/", + "选集链接加后缀": "", + "分析MacPlayer": "0", + "是否开启手动嗅探": "1", + "手动嗅探视频链接关键词": ".mp4#.m3u8#item/video#video_mp4#video/tos", + "手动嗅探视频链接过滤词": ".html#=http" +} \ No newline at end of file diff --git a/js/xiaosa/XYQHiker/巴士动漫.json b/js/xiaosa/XYQHiker/巴士动漫.json new file mode 100644 index 0000000..d2132d8 --- /dev/null +++ b/js/xiaosa/XYQHiker/巴士动漫.json @@ -0,0 +1,81 @@ +{ + "规则名": "动漫巴士", + "规则作者": "", + "请求头参数": "User-Agent$MOBILE_UA#Accept$text/html#accept-language$zh-CN,zh;q=0.8", + "网页编码格式": "UTF-8", + "图片是否需要代理": "0", + "是否开启获取首页数据": "1", + "首页推荐链接": "https://dm84.net", + "首页列表数组规则": "body&&.v_list", + "首页片单列表数组规则": "li", + "首页片单是否Jsoup写法": "1", + "分类起始页码": "1", + "分类链接": "https://dm84.net/list-{cateId}-{catePg}.html[firstPage=https://dm84.net/list-{cateId}.html]", + "分类名称": "国产动漫&日本动漫&欧美动漫&动漫电影", + "分类名称替换词": "1&2&3&4", + "筛选数据": {}, + //"筛选数据": "ext", + //{cateId} + "筛选子分类名称": "", + "筛选子分类替换词": "", + //{class} + "筛选类型名称": "", + "筛选类型替换词": "*", + //{area} + "筛选地区名称": "", + "筛选地区替换词": "*", + //{year} + "筛选年份名称": "", + "筛选年份替换词": "*", + //{lang} + "筛选语言名称": "", + "筛选语言替换词": "*", + //{by} + "筛选排序名称": "时间&人气&评分", + "筛选排序替换词": "time&hits&score", + "分类截取模式": "1", + "分类列表数组规则": ".v_list&&li", + "分类片单是否Jsoup写法": "1", + "分类片单标题": "a&&title!在线观看", + "分类片单链接": "a&&href", + "分类片单图片": ".lazy&&data-bg", + "分类片单副标题": ".desc&&Text", + "分类片单链接加前缀": "https://dm84.net", + "分类片单链接加后缀": "", + "搜索请求头参数": "User-Agent$手机#Accept$text/html#accept-language$zh-CN,zh;q=0.8", + "搜索链接": "https://dm84.net/s-{wd}---------{SearchPg}.html", + "POST请求数据": "", + "搜索截取模式": "1", + "搜索列表数组规则": ".v_list&&li", + "搜索片单是否Jsoup写法": "1", + "搜索片单图片": ".lazy&&data-bg", + "搜索片单标题": "a&&title!在线观看", + "搜索片单链接": "a&&href", + "搜索片单副标题": ".desc&&Text", + "搜索片单链接加前缀": "https://dm84.net", + "搜索片单链接加后缀": "", + "链接是否直接播放": "0", + "直接播放链接加前缀": "", + "直接播放链接加后缀": "", + "直接播放直链视频请求头": "", + "详情是否Jsoup写法": "1", + "类型详情": "", + "年代详情": "", + "地区详情": "", + "演员详情": "", + "简介详情": ".intro&&-p&&Text", + "线路列表数组规则": ".play_from&&li", + "线路标题": "Text", + "播放列表数组规则": ".tab_content&&.play_list", + "选集列表数组规则": "a", + "选集标题链接是否Jsoup写法": "1", + "选集标题": "a&&Text", + "选集链接": "a&&href", + "是否反转选集序列": "1", + "选集链接加前缀": "https://dm84.net", + "选集链接加后缀": "", + "分析MacPlayer": "0", + "是否开启手动嗅探": "0", + "手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos", + "手动嗅探视频链接过滤词": ".html#=http" +} \ No newline at end of file diff --git a/js/xiaosa/XYQHiker/电影港.json b/js/xiaosa/XYQHiker/电影港.json new file mode 100644 index 0000000..85fda74 --- /dev/null +++ b/js/xiaosa/XYQHiker/电影港.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": "演  员&&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/js/xiaosa/XYQHiker/电影牛.json b/js/xiaosa/XYQHiker/电影牛.json new file mode 100644 index 0000000..36b24cb --- /dev/null +++ b/js/xiaosa/XYQHiker/电影牛.json @@ -0,0 +1,71 @@ +{ + "规则名": "电影牛影院", + "规则作者": "香雅情", + "请求头参数": "手机", + "网页编码格式": "UTF-8", + "图片是否需要代理": "1", + "是否开启获取首页数据": "1", + "首页推荐链接": "https://www.dianyingn.cc", + "首页列表数组规则": "body&&.fed-list-info:has(.fed-list-remarks)", + "首页片单列表数组规则": "li", + "首页片单是否Jsoup写法": "1", + "首页片单标题": ".fed-list-title&&Text", + "首页片单链接": "a&&href", + "首页片单图片": ".fed-list-pics&&data-original", + "首页片单副标题": ".fed-list-remarks&&Text", + "首页片单链接加前缀": "https://www.dianyingn.cc", + "首页片单链接加后缀": "", + "分类起始页码": "1", + "分类链接": "https://www.dianyingn.cc/vodtype/{cateId}-{catePg}.html", + "分类名称": "电影&电视剧&综艺&动漫", + "分类名称替换词": "dianying&dianshiju&zongyi&dongman", + "筛选数据": "ext", + "筛选子分类名称": "动作片&喜剧片&爱情片&科幻片&恐怖片&剧情片&战争片&纪录片||国产剧&港台剧&日韩剧&欧美剧", + "筛选子分类替换词": "dongzuopian&xijupian&aiqingpian&kehuanpian&kongbupian&juqingpian&zhanzhengpian&jilupian||guochanju&gangtaiju&rihanju&oumeiju", + + "分类截取模式": "1", + "分类列表数组规则": "body&&.fed-list-item:has(.fed-list-remarks)", + "分类片单是否Jsoup写法": "1", + "分类片单标题": ".fed-list-title&&Text", + "分类片单链接": "a&&href", + "分类片单图片": ".fed-list-pics&&data-original", + "分类片单副标题": ".fed-list-remarks&&Text", + "分类片单链接加前缀": "https://www.dianyingn.cc", + "分类片单链接加后缀": "", + "搜索请求头参数": "手机", + "搜索链接": "https://www.dianyingn.cc/index.php/ajax/suggest.html?mid=1&wd={wd}", + "POST请求数据": "", + "搜索截取模式": "0", + "搜索列表数组规则": "list", + "搜索片单是否Jsoup写法": "1", + "搜索片单图片": "pic", + "搜索片单标题": "name", + "搜索片单链接": "id", + "搜索片单副标题": "", + "搜索片单链接加前缀": "https://www.dianyingn.cc/voddetail/", + "搜索片单链接加后缀": ".html", + "链接是否直接播放": "0", + "直接播放链接加前缀": "https://live.52sf.ga/huya/", + "直接播放链接加后缀": "#isVideo=true#", + "直接播放直链视频请求头": "authority$ku.peizq.online#Referer$https://play.peizq.online", + "详情是否Jsoup写法": "0", + "类型详情": "", + "年代详情": "", + "地区详情": "", + "演员详情": "主演:&&", + "简介详情": "简介:&&", + "线路列表数组规则": ".fed-tabs-item&&ul&&li", + "线路标题": "Text", + "播放列表数组规则": "body&&.fed-play-item", + "选集列表数组规则": ".fed-btns-info", + "选集标题链接是否Jsoup写法": "1", + "选集标题": "a&&Text", + "选集链接": "a&&href", + "是否反转选集序列": "0", + "选集链接加前缀": "https://www.dianyingn.cc", + "选集链接加后缀": "", + "分析MacPlayer": "0", + "是否开启手动嗅探": "0", + "手动嗅探视频链接关键词": ".mp4#.m3u8#.flv", + "手动嗅探视频链接过滤词": ".html#=http" +} \ No newline at end of file diff --git a/js/xiaosa/XYQHiker/盒子影视.json b/js/xiaosa/XYQHiker/盒子影视.json new file mode 100644 index 0000000..50e6a64 --- /dev/null +++ b/js/xiaosa/XYQHiker/盒子影视.json @@ -0,0 +1,81 @@ +{ + "规则名": "电影盒子", + "规则作者": "", + "请求头参数": "手机", + "网页编码格式": "UTF-8", + "图片是否需要代理": "0", + "是否开启获取首页数据": "0", + "首页推荐链接": "http://80kp.com", + "首页列表数组规则": "body&&.stui-vodlist:has(h4)", + "首页片单列表数组规则": "li", + "首页片单是否Jsoup写法": "1", + "分类起始页码": "1", + "分类链接": "http://80kp.com/films/{cateId}_{catePg}.html[firstPage=http://80kp.com/films/{cateId}.html]", + "分类名称": "电影&电视剧&综艺&动漫", + "分类名称替换词": "1&2&4&3", + "筛选数据": {}, + //"筛选数据": "ext", + //{cateId} + "筛选子分类名称": "", + "筛选子分类替换词": "", + //{class} + "筛选类型名称": "", + "筛选类型替换词": "*", + //{area} + "筛选地区名称": "", + "筛选地区替换词": "*", + //{year} + "筛选年份名称": "", + "筛选年份替换词": "*", + //{lang} + "筛选语言名称": "", + "筛选语言替换词": "*", + //{by} + "筛选排序名称": "时间&人气&评分", + "筛选排序替换词": "time&hits&score", + "分类截取模式": "1", + "分类列表数组规则": ".stui-vodlist&&li", + "分类片单是否Jsoup写法": "1", + "分类片单标题": "h4&&a&&Text", + "分类片单链接": "h4&&a&&href", + "分类片单图片": ".lazyload&&data-original", + "分类片单副标题": ".pic-text&&Text", + "分类片单链接加前缀": "http://80kp.com", + "分类片单链接加后缀": "", + "搜索请求头参数": "User-Agent$手机", + "搜索链接": "http://80kp.com/search.php;post", + "POST请求数据": "searchword={wd}", + "搜索截取模式": "1", + "搜索列表数组规则": ".stui-vodlist__media&&li", + "搜索片单是否Jsoup写法": "1", + "搜索片单图片": ".lazyload&&data-original", + "搜索片单标题": "h3&&a&&Text", + "搜索片单链接": "h3&&a&&href", + "搜索片单副标题": ".pic-text&&Text", + "搜索片单链接加前缀": "http://80kp.com", + "搜索片单链接加后缀": "", + "链接是否直接播放": "0", + "直接播放链接加前缀": "", + "直接播放链接加后缀": "", + "直接播放直链视频请求头": "", + "详情是否Jsoup写法": "0", + "类型详情": "类型:&&", + "年代详情": "年份:&&", + "地区详情": "地区:&&", + "演员详情": "主演:&&

    ", + "简介详情": "简介:&&

    ", + "线路列表数组规则": ".nav-tabs&&li", + "线路标题": "Text", + "播放列表数组规则": "body&&.stui-content__playlist", + "选集列表数组规则": "li", + "选集标题链接是否Jsoup写法": "1", + "选集标题": "a&&Text", + "选集链接": "a&&href", + "是否反转选集序列": "0", + "选集链接加前缀": "http://80kp.com", + "选集链接加后缀": "", + "分析MacPlayer": "0", + "是否开启手动嗅探": "1", + "手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos#obj/tos-#pt=m3u8#mime_type=video_mp4#x-oss-signature=", + "手动嗅探视频链接过滤词": ".html#=http" +} \ No newline at end of file diff --git a/js/xiaosa/XYQHiker/短剧屋.json b/js/xiaosa/XYQHiker/短剧屋.json new file mode 100644 index 0000000..0a1bf24 --- /dev/null +++ b/js/xiaosa/XYQHiker/短剧屋.json @@ -0,0 +1,81 @@ +{ + "规则名": "短剧屋", + "规则作者": "", + "请求头参数": "手机", + "网页编码格式": "UTF-8", + "图片是否需要代理": "0", + "是否开启获取首页数据": "1", + "首页推荐链接": "http://www.metaysw.com", + "首页列表数组规则": "body&&.vod-vodlist", + "首页片单列表数组规则": "li", + "首页片单是否Jsoup写法": "1", + "分类起始页码": "1", + "分类链接": "http://www.metaysw.com/type/{cateId}-{catePg}.html", + "分类名称": "短剧", + "分类名称替换词": "lianxuju", + "筛选数据": {}, + //"筛选数据": "ext", + //{cateId} + "筛选子分类名称": "", + "筛选子分类替换词": "", + //{class} + "筛选类型名称": "", + "筛选类型替换词": "*", + //{area} + "筛选地区名称": "", + "筛选地区替换词": "*", + //{year} + "筛选年份名称": "", + "筛选年份替换词": "*", + //{lang} + "筛选语言名称": "", + "筛选语言替换词": "*", + //{by} + "筛选排序名称": "时间&人气&评分", + "筛选排序替换词": "time&hits&score", + "分类截取模式": "1", + "分类列表数组规则": ".vod-vodlist&&li", + "分类片单是否Jsoup写法": "1", + "分类片单标题": ".vod-vodlist__title&&Text", + "分类片单链接": "a&&href", + "分类片单图片": ".lazyload&&data-original", + "分类片单副标题": ".pic-text&&Text", + "分类片单链接加前缀": "http://www.metaysw.com", + "分类片单链接加后缀": "", + "搜索请求头参数": "User-Agent$手机", + "搜索链接": "http://www.metaysw.com/search/page/{SearchPg}/wd/{wd}.html", + "POST请求数据": "", + "搜索截取模式": "1", + "搜索列表数组规则": ".vod-vodlist&&li", + "搜索片单是否Jsoup写法": "1", + "搜索片单图片": ".lazyload&&data-original", + "搜索片单标题": ".vod-vodlist__title&&Text", + "搜索片单链接": "a&&href", + "搜索片单副标题": ".pic-text&&Text", + "搜索片单链接加前缀": "http://www.metaysw.com", + "搜索片单链接加后缀": "", + "链接是否直接播放": "0", + "直接播放链接加前缀": "https://live.52sf.ga/huya/", + "直接播放链接加后缀": "#isVideo=true#", + "直接播放直链视频请求头": "authority$ku.peizq.online#Referer$https://play.peizq.online", + "详情是否Jsoup写法": "1", + "类型详情": "", + "年代详情": "", + "地区详情": "", + "演员详情": ".vod-content__detail&&p,2&&Text!主演:", + "简介详情": "", + "线路列表数组规则": ".dropdown-menu&&li", + "线路标题": "a&&Text", + "播放列表数组规则": "body&&.vod-content__playlist", + "选集列表数组规则": "li", + "选集标题链接是否Jsoup写法": "1", + "选集标题": "a&&Text", + "选集链接": "a&&href", + "是否反转选集序列": "0", + "选集链接加前缀": "http://www.metaysw.com", + "选集链接加后缀": "", + "分析MacPlayer": "0", + "是否开启手动嗅探": "0", + "手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos", + "手动嗅探视频链接过滤词": ".html#=http" +} \ No newline at end of file diff --git a/js/xiaosa/api.json b/js/xiaosa/api.json new file mode 100644 index 0000000..c35af7a --- /dev/null +++ b/js/xiaosa/api.json @@ -0,0 +1,2486 @@ +{ + "spider": "./spider.jar", + "wallpaper": "http://bobohome.ignorelist.com:20247/bing", + "logo": "http://127.0.0.1:9978/file/TVBox/logo.png", + "sites": [ + { + "key": "豆瓣", + "name": "豆瓣|首页", + "type": 3, + "api": "csp_Douban", + "searchable": 0 + }, + { + "key": "预告", + "name": "新片|预告", + "type": 3, + "api": "csp_YGP", + "searchable": 0 + }, + { + "key": "本地", + "name": "本地|视频", + "type": 3, + "api": "csp_LocalFile" + }, + { + "key": "配置中心", + "name": "配置|中心", + "type": 3, + "api": "csp_Config", + "searchable": 0, + "changeable": 0, + "indexs": 0, + "style": { + "type": "rect", + "ratio": 1.597 + } + }, + { + "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_AppRJ", + "searchable": 1, + "quickSearch": 1, + "filterable": 0, + "ext": { + "url": "http://v.lkuys.cn" + } + }, + { + "key": "加菲", + "name": "加菲丨APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppQi", + "ext": { + "url": "", + "site": "https://aysappto.oss-cn-chengdu.aliyuncs.com/qj1.txt", + "dataKey": "dksvndkaAjekakcE", + "dataIv": "dksvndkaAjekakcE", + "deviceId": "", + "version": "", + "ua": "" + } + }, + { + "key": "咖啡", + "name": "咖啡丨APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppQi", + "ext": { + "url": "", + "site": "https://daen-1256234123.cos.ap-shanghai.myqcloud.com/MuQi/mqxh.txt", + "dataKey": "37kj83zs1q16jk6t", + "dataIv": "37kj83zs1q16jk6t", + "deviceId": "", + "version": "101", + "ua": "" + } + }, + { + "key": "哔滴", + "name": "哔滴丨APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppQi", + "ext": { + "url": "", + "site": "https://ooxooxooxooxoo-1259561579.cos.ap-chengdu.myqcloud.com/ip.json", + "dataKey": "5ae8ee4bb95ea0ce", + "dataIv": "5ae8ee4bb95ea0ce", + "deviceId": "", + "version": "120", + "ua": "okhttp/3.10.0 BDYS/109.0.0.8" + } + }, + { + "key": "若雪", + "name": "若雪丨APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppQi", + "ext": { + "url": "https://appcms.rx4k.top", + "site": "", + "dataKey": "ZX10ysTYZWtIJCTU", + "dataIv": "ZX10ysTYZWtIJCTU", + "deviceId": "", + "version": "120" + } + }, + { + "key": "蓝鹰", + "name": "蓝鹰|APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppQi", + "ext": { + "url": "", + "site": "https://lanyinghz.oss-cn-hangzhou.aliyuncs.com/lanyingxmy.txt", + "dataKey": "ca94b06ca359d80e", + "dataIv": "ca94b06ca359d80e", + "deviceId": "", + "version": "120" + } + }, + { + "key": "仓鼠", + "name": "仓鼠|APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppQi", + "ext": { + "url": "", + "site": "https://ceshi307386.oss-cn-beijing.aliyuncs.com/ceshi421.txt", + "dataKey": "da61247f5b662597", + "dataIv": "da61247f5b662597", + "deviceId": "", + "version": "120" + } + }, + { + "key": "鲸鱼", + "name": "鲸鱼|APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppQi", + "ext": { + "url": "", + "site": "https://jingyu4k-1312635929.cos.ap-nanjing.myqcloud.com/1.json", + "dataKey": "AAdgrdghjfgswerA", + "dataIv": "AAdgrdghjfgswerA", + "deviceId": "", + "version": "" + } + }, + { + "key": "热剧", + "name": "热剧丨APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppQi", + "ext": { + "url": "https://www.rebovod.com", + "site": "", + "dataKey": "8191A7F47B37882F", + "dataIv": "8191A7F47B37882F", + "deviceId": "", + "version": "", + "ua": "" + } + }, + { + "key": "影视", + "name": "影视丨APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppQi", + "ext": { + "url": "", + "site": "https://aysappto.oss-cn-chengdu.aliyuncs.com/qj2.txt", + "dataKey": "sada21321sdq231d", + "dataIv": "sada21321sdq231d", + "deviceId": "", + "version": "", + "ua": "" + } + }, + { + "key": "小猪", + "name": "小猪丨APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppQi", + "ext": { + "url": "", + "site": "https://tiantangyoulu.oss-cn-beijing.aliyuncs.com/tengxunyun.txt", + "dataKey": "seb5tq9mykp2w9ry", + "dataIv": "seb5tq9mykp2w9ry", + "deviceId": "", + "version": "", + "ua": "okhttp/3.10.0" + } + }, + { + "key": "八天", + "name": "八天丨APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "https://dy.8ttv.cn", + "site": "", + "dataKey": "1111111111111111", + "dataIv": "1111111111111111", + "deviceId": "", + "version": "", + "ua": "" + } + }, + { + "key": "紫金", + "name": "紫金丨APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "http://www.zjcvod.com", + "site": "", + "dataKey": "ab4e9a421675f14b", + "dataIv": "ab4e9a421675f14b", + "deviceId": "", + "version": "", + "ua": "" + } + }, + { + "key": "刷剧", + "name": "刷剧丨APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "", + "site": "https://dingchaowangzhan.oss-cn-beijing.aliyuncs.com/1.txt", + "dataKey": "1387006363333333", + "dataIv": "1387006363333333", + "deviceId": "", + "version": "", + "ua": "" + } + }, + { + "key": "九零", + "name": "九零丨APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "https://65fs2d9awaa1d2a7ea8.019990.xyz", + "site": "", + "dataKey": "5a9w6x58dsq6z3a6", + "dataIv": "5a9w6x58dsq6z3a6", + "deviceId": "", + "version": "", + "ua": "" + } + }, + { + "key": "狂欢", + "name": "狂欢丨APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "http://m.m.m.kahzw.com", + "site": "", + "dataKey": "xnybssspqtwotuwj", + "dataIv": "xnybssspqtwotuwj", + "deviceId": "", + "version": "", + "ua": "" + } + }, + { + "key": "奈飞", + "name": "奈飞丨APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "https://movier.ink", + "site": "", + "dataKey": "moviermovierink9", + "dataIv": "moviermovierink9", + "deviceId": "", + "version": "", + "ua": "" + } + }, + { + "key": "迪吧", + "name": "迪吧丨APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "", + "site": "https://appto2-1316376600.cos.ap-beijing.myqcloud.com/gap.txt", + "dataKey": "685bf108bc47b67d", + "dataIv": "685bf108bc47b67d", + "deviceId": "", + "version": "", + "ua": "" + } + }, + { + "key": "米奇", + "name": "米奇丨APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "http://www.milkidc.cn", + "site": "", + "dataKey": "20c79c979da8db0f", + "dataIv": "20c79c979da8db0f", + "deviceId": "", + "version": "", + "ua": "" + } + }, + { + "key": "星星", + "name": "星星丨APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "http://starani.qcanime.xyz", + "site": "", + "dataKey": "123456789StarAni", + "dataIv": "123456789StarAni", + "deviceId": "", + "version": "", + "ua": "okhttp/3.10.0 BDYS/109.0.0.8" + } + }, + { + "key": "像素", + "name": "像素丨APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "https://mcvod.top", + "site": "", + "dataKey": "cnmbknmbtounimab", + "dataIv": "cnmbknmbtounimab", + "deviceId": "", + "version": "", + "ua": "" + } + }, + { + "key": "豆丁", + "name": "豆丁丨APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "http://45.66.157.77:9427", + "site": "", + "dataKey": "Xasdasd!123123dd", + "dataIv": "Xasdasd!123123dd", + "deviceId": "", + "version": "", + "ua": "" + } + }, + { + "key": "斗量", + "name": "斗量丨APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "", + "site": "https://app-cms-v10-1314306855.cos.ap-guangzhou.myqcloud.com/appcms.php", + "dataKey": "A1akVPQmnnE4Fz9Z", + "dataIv": "A1akVPQmnnE4Fz9Z", + "deviceId": "", + "version": "", + "ua": "" + } + }, + { + "key": "稀饭", + "name": "稀饭丨APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "https://app.xifanys.com", + "site": "", + "dataKey": "HM6Ly9yeS4ya3dvL", + "dataIv": "HM6Ly9yeS4ya3dvL", + "deviceId": "", + "version": "", + "ua": "" + } + }, + { + "key": "爱看", + "name": "爱看丨APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "https://aikan.my", + "site": "", + "dataKey": "hzxjRSmyTmSE4ENE", + "dataIv": "hzxjRSmyTmSE4ENE", + "deviceId": "", + "version": "", + "ua": "" + } + }, + { + "key": "布雷", + "name": "布雷丨APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "https://cms.bl4k.cc", + "site": "", + "dataKey": "B7uaxcwdpX2dww82", + "dataIv": "B7uaxcwdpX2dww82", + "deviceId": "", + "version": "", + "ua": "" + } + }, + { + "key": "五八", + "name": "五八丨APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "https://dy.58ys.vip", + "site": "", + "dataKey": "JEWibY1AgWF0V1xx", + "dataIv": "JEWibY1AgWF0V1xx", + "deviceId": "", + "version": "", + "ua": "" + } + }, + { + "key": "狂人", + "name": "狂人丨APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "https://www.zjkrmv.vip", + "site": "", + "dataKey": "vXeyuJFqTKqWUtWU", + "dataIv": "vXeyuJFqTKqWUtWU", + "deviceId": "", + "version": "", + "ua": "" + } + }, + { + "key": "驿站", + "name": "驿站丨APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "", + "site": "https://dyyztvappapigoodgx.68.gy:12689/ciwk28vu38io8/apiurl.txt", + "dataKey": "dyyztvapiappyyds", + "dataIv": "dyyztvapiappyyds", + "deviceId": "", + "version": "", + "ua": "" + } + }, + { + "key": "外剧", + "name": "外剧丨APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "https://guowaiju.com", + "site": "", + "dataKey": "7xv16h7qgkrs9b1p", + "dataIv": "7xv16h7qgkrs9b1p", + "deviceId": "", + "version": "", + "ua": "" + } + }, + { + "key": "爱影", + "name": "爱影丨APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "https://app.lkdyw.cn", + "site": "", + "dataKey": "e65144389e9361b5", + "dataIv": "e65144389e9361b5", + "deviceId": "", + "version": "", + "ua": "" + } + }, + { + "key": "火狐", + "name": "火狐丨APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "http://huohu.yihn.cc", + "site": "", + "dataKey": "huohushipingetap", + "dataIv": "huohushipingetap", + "deviceId": "", + "version": "140", + "ua": "" + } + }, + { + "key": "云端", + "name": "云端|APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "https://c8k2n5l0i9s8b2m1jj8k2x2l9ff68.ydysapi.cfd:27899", + "site": "", + "dataKey": "k9o3p2c8b7m3z0o8", + "dataIv": "k9o3p2c8b7m3z0o8", + "deviceId": "", + "version": "" + } + }, + { + "key": "光影", + "name": "光影|APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "https://www.guangyingmi.com", + "dataKey": "230fnsodfsdhfon2", + "dataIv": "230fnsodfsdhfon2", + "deviceId": "", + "version": "" + } + }, + { + "key": "莱米", + "name": "莱米|APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "", + "site": "http://laiget-1313189639.cos.ap-guangzhou.myqcloud.com/laimi.txt", + "dataKey": "ce032244d093b3e2", + "dataIv": "ce032244d093b3e2", + "deviceId": "", + "version": "" + } + }, + { + "key": "灵虎", + "name": "灵虎|APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "", + "site": "https://bind.315999.xyz/89.txt", + "dataKey": "#getapp@TMD@2025", + "dataIv": "#getapp@TMD@2025", + "deviceId": "", + "version": "120" + } + }, + { + "key": "旗星", + "name": "旗星|APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "http://ys.qist.top", + "site": "", + "dataKey": "2SWSPFxugBLPPOKo", + "dataIv": "2SWSPFxugBLPPOKo", + "deviceId": "", + "version": "120" + } + }, + { + "key": "丫丫", + "name": "丫丫|APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "http://tv.yy-fun.cc", + "dataKey": "qkxnwkfjwpcnwycl", + "dataIv": "qkxnwkfjwpcnwycl", + "deviceId": "", + "version": "" + } + }, + { + "key": "云速", + "name": "云速|APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "", + "site": "http://59.153.167.137:7788/1.json", + "dataKey": "4d83b87c4c5ea111", + "dataIv": "4d83b87c4c5ea111", + "deviceId": "", + "version": "105" + } + }, + { + "key": "萝卜", + "name": "萝卜|APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "https://apiapplbys.lbys.app:5678", + "dataKey": "apiapplbyskey168", + "dataIv": "apiapplbyskey168", + "deviceId": "", + "version": "107" + } + }, + { + "key": "米兔", + "name": "米兔|APP", + "type": 3, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "https://new.tkbot.fun", + "dataKey": "d032c12876bc6848", + "dataIv": "d032c12876bc6848", + "deviceId": "", + "version": "200" + } + }, + { + "key": "移动", + "name": "移动|APP", + "type": 3, + "api": "csp_YD", + "searchable": 1, + "quickSearch": 1, + "style": { + "type": "list" + } + }, + { + "key": "哔哩视频", + "name": "哔哩|视频", + "type": 3, + "api": "csp_BiliYS", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "changeable": 0, + "style": { + "type": "rect", + "ratio": 1.433 + }, + "ext": { + "json": "./json/哔哩视频.json", + "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt" + } + }, + { + "key": "腾讯视频", + "name": "腾讯|视频", + "type": 3, + "api": "./js/drpy2.min.js", + "ext": "./js/腾讯视频.js" + }, + { + "key": "优酷视频", + "name": "优酷|视频", + "type": 3, + "api": "./js/drpy2.min.js", + "ext": "./js/优酷视频.js" + }, + { + "key": "芒果视频", + "name": "芒果|视频", + "type": 3, + "api": "./js/drpy2.min.js", + "ext": "./js/芒果视频.js" + }, + { + "key": "爱奇艺", + "name": "爱奇异|视频", + "type": 3, + "api": "./js/drpy2.min.js", + "ext": "./js/爱奇艺.js" + }, + { + "key": "三六零", + "name": "三六零|视频", + "type": 3, + "api": "csp_SP360" + }, + { + "key": "小斑快映", + "name": "快映|4K", + "type": 3, + "api": "csp_PanWebShare", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "ext": "./json/xbky.json" + }, + { + "key": "玩偶哥哥", + "name": "玩偶|4K", + "type": 3, + "api": "csp_PanWebShare", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "ext": "./json/wogg.json" + }, + { + "key": "木偶", + "name": "木偶|4K", + "type": 3, + "api": "csp_PanWebShare", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "ext": "./json/mogg.json" + }, + { + "key": "蜡笔", + "name": "蜡笔|4K", + "type": 3, + "api": "csp_PanWebShare", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "ext": "./json/lb.json" + }, + { + "key": "至臻", + "name": "至臻|4K", + "type": 3, + "api": "csp_PanWebShare", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "ext": "./json/zz.json" + }, + { + "key": "多多", + "name": "多多|4K", + "type": 3, + "api": "csp_PanWebShare", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "ext": "./json/yyds.json" + }, + { + "key": "欧哥", + "name": "欧哥|4K", + "type": 3, + "api": "csp_PanWebShare", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "ext": "./json/og.json" + }, + { + "key": "二小", + "name": "二小|4K", + "type": 3, + "api": "csp_PanWebShare", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "ext": "./json/ex.json" + }, + { + "key": "虎斑", + "name": "虎斑|4K", + "type": 3, + "api": "csp_PanWebShare", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "ext": "./json/hb.json" + }, + { + "key": "雷鲸", + "name": "雷鲸|4K", + "type": 3, + "api": "csp_PanWebShareCloudLJ", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "style": { + "type": "list", + "ratio": 1.433 + }, + "ext": "./json/lj.json" + }, + { + "key": "海绵", + "name": "海绵|4K", + "type": 3, + "api": "csp_PanWebShareCloudHM", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "style": { + "type": "list", + "ratio": 1.433 + }, + "ext": "./json/hm.json" + }, + { + "key": "夸父", + "name": "夸父|4K", + "type": 3, + "api": "csp_PanWebShareCloudKF", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "style": { + "type": "list", + "ratio": 1.433 + }, + "ext": "./json/kf.json" + }, + { + "key": "123", + "name": "123|4K", + "type": 3, + "api": "csp_PanWebShareCloud123", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "style": { + "type": "list", + "ratio": 1.433 + }, + "ext": "./json/123.json" + }, + { + "key": "趣盘", + "name": "趣盘|4K", + "type": 3, + "api": "csp_PanWebQu", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "changeable": 1, + "style": { + "type": "list", + "ratio": 1.433 + }, + "ext": { + "url": "https://www.qupanshe.com" + } + }, + { + "key": "双星", + "name": "双星|4K", + "type": 3, + "api": "./js/drpy2.min.js", + "ext": "./js/双星.js", + "style": { + "type": "list" + } + }, + { + "key": "人人", + "name": "人人|4K", + "type": 3, + "api": "./js/drpy2.min.js", + "ext": "./js/人人电影网.js", + "style": { + "type": "list" + } + }, + { + "key": "星芽短剧", + "name": "星芽|短剧", + "type": 3, + "api": "./py/星芽短剧.py", + "searchable": 1, + "changeable": 1, + "quickSearch": 1, + "filterable": 1 + }, + { + "key": "甜圈短剧", + "name": "甜圈|短剧", + "type": 3, + "api": "./py/甜圈短剧.py", + "searchable": 1, + "changeable": 1, + "quickSearch": 1, + "filterable": 1 + }, + { + "key": "锦鲤短剧", + "name": "锦鲤|短剧", + "type": 3, + "api": "./py/锦鲤短剧.py", + "searchable": 1, + "changeable": 1, + "quickSearch": 1, + "filterable": 1 + }, + { + "key": "剧王短剧", + "name": "剧王|短剧", + "type": 3, + "api": "./py/剧王短剧.py", + "searchable": 1, + "changeable": 1, + "quickSearch": 1, + "filterable": 1 + }, + { + "key": "番茄短剧", + "name": "番茄|短剧", + "type": 3, + "api": "csp_XBPQ", + "ext": "./XBPQ/番茄短剧.json" + }, + { + "key": "剧屋短剧", + "name": "剧屋|短剧", + "type": 3, + "api": "csp_XYQHiker", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": "./XYQHiker/短剧屋.json" + }, + { + "key": "天翼影视", + "name": "天翼|影视", + "type": 1, + "api": "http://7.qqqtv.top/api.php/provide/vod/", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "categories": [ + "推荐", + "电影", + "电视剧", + "综艺", + "动漫" + ] + }, + { + "key": "猎手影视", + "name": "猎手|影视", + "type": 3, + "api": "./py/猎手影视.py", + "searchable": 1, + "changeable": 1, + "quickSearch": 1, + "filterable": 1 + }, + { + "key": "厂长影视", + "name": "厂长|影视", + "type": 3, + "playerType": "2", + "api": "csp_Czsapp", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": "https://www.czzymovie.com/" + }, + { + "key": "金牌影视", + "name": "金牌|影视", + "type": 3, + "api": "csp_Jpys", + "ext": "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_Tvyb", + "ext": "http://www.viptv01.com" + }, + { + "key": "奇优影视", + "name": "奇优|影视", + "type": 3, + "api": "csp_Qiyou" + }, + { + "key": "苹果影视", + "name": "苹果|影视", + "type": 3, + "api": "csp_LiteApple", + "searchable": 1, + "quickSearch": 1, + "filterable": 1 + }, + { + "key": "全网影视", + "name": "全看|影视", + "type": 3, + "api": "csp_Quanwk", + "ext": "https://www.91qkw.com" + }, + { + "key": "饺子影视", + "name": "饺子|影视", + "type": 3, + "api": "csp_Jiaozi" + }, + { + "key": "低端影视", + "name": "低端|影视", + "type": 3, + "api": "csp_Ddys", + "searchable": 1, + "quickSearch": 1, + "filterable": 1 + }, + { + "key": "瓜子影视", + "name": "瓜子|影视", + "type": 3, + "api": "csp_Gz360", + "searchable": 1, + "quickSearch": 1, + "filterable": 1 + }, + { + "key": "骚火影视", + "name": "骚火|影视", + "type": 3, + "api": "csp_SaoHuo", + "playerType": 2, + "ext": "https://shdy5.us" + }, + { + "key": "农民影视", + "name": "农民|影视", + "type": 3, + "api": "csp_Wwys", + "ext": "https://www.wwgz.cn" + }, + { + "key": "爱看机器人", + "name": "爱看|影视", + "type": 3, + "api": "csp_Ikanbot", + "searchable": 1, + "quickSearch": 1, + "filterable": 1 + }, + { + "key": "明星影视", + "name": "明星|影视", + "type": 3, + "api": "csp_XBPQ", + "ext": "./XBPQ/明星影视.json" + }, + { + "key": "面包影视", + "name": "面包|影视", + "type": 3, + "api": "csp_XBPQ", + "ext": "./XBPQ/面包影视.json" + }, + { + "key": "永乐影视", + "name": "永乐|影视", + "type": 3, + "api": "csp_XBPQ", + "ext": "./XBPQ/永乐影视.json" + }, + { + "key": "三九影视", + "name": "三九|影视", + "type": 3, + "api": "csp_XBPQ", + "ext": "./XBPQ/三九影视.json" + }, + { + "key": "剧圈圈", + "name": "剧圈|影视", + "type": 3, + "api": "./js/drpy2.min.js", + "ext": "./js/剧圈圈.js" + }, + { + "key": "采集之王", + "name": "采集|合集", + "type": 3, + "api": "./js/drpy2.min.js", + "ext": "./js/采集之王.js?type=url¶ms=../json/采集静态.json$1$1" + }, + { + "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": "./XBPQ/哆啦新番社.json" + }, + { + "key": "56动漫", + "name": "56|动漫", + "type": 3, + "api": "./js/drpy2.min.js", + "ext": "./js/56动漫.js" + }, + { + "key": "Anime1", + "name": "A1|动漫", + "type": 3, + "api": "./js/drpy2.min.js", + "ext": "./js/Anime1.js" + }, + { + "key": "NT动漫", + "name": "NT|动漫", + "type": 3, + "api": "./js/drpy2.min.js", + "ext": "./js/NT动漫.js" + }, + { + "key": "漫国", + "name": "漫国丨动漫", + "type": 3, + "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, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "http://www.drdm.fun", + "site": "", + "dataKey": "qE2nD0rL1lH4uP9r", + "dataIv": "qE2nD0rL1lH4uP9r", + "deviceId": "", + "version": "", + "ua": "" + } + }, + { + "key": "漫屋", + "name": "漫屋丨动漫", + "type": 3, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "https://www.yunwuee.icu", + "site": "", + "dataKey": "ygcnb9bdcmb8aeiw", + "dataIv": "ygcnb9bdcmb8aeiw", + "deviceId": "", + "version": "", + "ua": "" + } + }, + { + "key": "方舟", + "name": "方舟丨动漫", + "type": 3, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "https://www.cyfz.vip", + "site": "", + "dataKey": "e72cdfd629e8895d", + "dataIv": "e72cdfd629e8895d", + "deviceId": "", + "version": "", + "ua": "" + } + }, + { + "key": "元咲", + "name": "元咲丨动漫", + "type": 3, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "http://cic.aicg.fun", + "site": "", + "dataKey": "2c4h36abd96se10u", + "dataIv": "2c4h36abd96se10u", + "deviceId": "", + "version": "", + "ua": "" + } + }, + { + "key": "番薯", + "name": "番薯丨动漫", + "type": 3, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "https://new.app.bytegooty.com", + "site": "", + "dataKey": "N4yj7l7xKxHF4*gz", + "dataIv": "N4yj7l7xKxHF4*gz", + "deviceId": "", + "version": "", + "ua": "" + } + }, + { + "key": "曼波动漫", + "name": "曼波|动漫", + "type": 3, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "https://app.omofun1.top", + "dataKey": "66dc309cbeeca454", + "dataIv": "66dc309cbeeca454", + "deviceId": "", + "version": "" + } + }, + { + "key": "稀饭动漫", + "name": "稀饭|动漫", + "type": 3, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "", + "site": "https://xfapp-1305390065.cos.ap-guangzhou.myqcloud.com/getapp.txt", + "dataKey": "1yZ2Spn9krnzVKoC", + "dataIv": "1yZ2Spn9krnzVKoC", + "deviceId": "", + "version": "" + } + }, + { + "key": "咕咕动漫", + "name": "咕咕|动漫", + "type": 3, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "https://www.gugu3.com", + "dataKey": "nKfZ8KX6JTNWRzTD", + "dataIv": "nKfZ8KX6JTNWRzTD", + "deviceId": "", + "version": "" + } + }, + { + "key": "派对动漫", + "name": "派对|动漫", + "type": 3, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "https://qjappcms.acg.party", + "dataKey": "AmtMYFCJDPoTlK7z", + "dataIv": "AmtMYFCJDPoTlK7z", + "deviceId": "", + "version": "" + } + }, + { + "key": "米饭", + "name": "米饭|动漫", + "type": 3, + "quickSearch": 1, + "api": "csp_AppGet", + "ext": { + "url": "https://get.mymifun.com", + "site": "", + "dataKey": "GETMIFUNGEIMIFUN", + "dataIv": "GETMIFUNGEIMIFUN", + "deviceId": "", + "version": "" + } + }, + { + "key": "樱花动漫", + "name": "樱花|动漫", + "type": 3, + "api": "csp_XBPQ", + "ext": "./XBPQ/樱花动漫.json" + }, + { + "key": "巴士动漫", + "name": "巴士|动漫", + "type": 3, + "api": "csp_XYQHiker", + "ext": "./XYQHiker/巴士动漫.json" + }, + { + "key": "好看动漫", + "name": "好看|动漫", + "type": 3, + "api": "./js/drpy2.min.js", + "ext": "./js/好看动漫.js" + }, + { + "key": "奇米动漫", + "name": "奇米|动漫", + "type": 3, + "api": "./js/drpy2.min.js", + "ext": "./js/奇米动漫.js" + }, + { + "key": "花子动漫", + "name": "花子|动漫", + "type": 3, + "api": "./js/drpy2.min.js", + "ext": "./js/花子动漫.js" + }, + { + "key": "动画片", + "name": "动画片|动漫", + "type": 3, + "api": "./js/drpy2.min.js", + "ext": "./js/动画片大全.js" + }, + { + "key": "路漫漫", + "name": "路漫漫|动漫", + "type": 3, + "api": "./js/drpy2.min.js", + "ext": "./js/路漫漫.js" + }, + { + "key": "动漫岛", + "name": "动漫岛|动漫", + "type": 3, + "api": "./js/drpy2.min.js", + "ext": "./js/动漫岛.js" + }, + { + "key": "去看吧", + "name": "去看吧|动漫", + "type": 3, + "api": "./js/drpy2.min.js", + "ext": "./js/去看吧.js" + }, + { + "key": "异世界", + "name": "异世界|动漫", + "type": 3, + "api": "./js/drpy2.min.js", + "ext": "./js/异世界.js" + }, + { + "key": "荐片", + "name": "荐片|磁力", + "api": "csp_Jianpian", + "type": 3, + "ext": "https://api.ztcgi.com" + }, + { + "key": "修罗", + "name": "修罗|磁力", + "api": "csp_Xlys", + "type": 3, + "ext": "https://xl01.com.de" + }, + { + "key": "七味", + "name": "七味|磁力", + "type": 3, + "api": "csp_QnMp4", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": { + "url": "https://www.pkmp4.xyz,https://www.qwnull.com,https://www.qwmkv.com,https://www.qwfilm.com,https://www.qnmp4.com,https://www.qnnull.com,https://www.qnhot.com" + } + }, + { + "key": "80S", + "name": "80S|磁力", + "type": 3, + "api": "csp_BLSGod", + "playerType": 1, + "searchable": 1, + "quickSearch": 1, + "filterable": 1 + }, + { + "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 + }, + { + "key": "电影港", + "name": "电影港|磁力", + "type": 3, + "api": "csp_XYQHiker", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": "./XYQHiker/电影港.json" + }, + { + "key": "狐狸君", + "name": "狐狸君|磁力", + "type": 3, + "api": "csp_XBPQ", + "changeable": 1, + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": "./XBPQ/狐狸君.json" + }, + { + "key": "Mp4电影", + "name": "Mp4电影|磁力", + "type": 3, + "api": "csp_Mp4Mov", + "searchable": 1, + "quickSearch": 1, + "filterable": 1 + }, + { + "key": "美剧天堂", + "name": "美剧天堂|磁力", + "type": 3, + "api": "csp_MeijuTT", + "searchable": 1, + "quickSearch": 1, + "filterable": 1 + }, + { + "key": "电影天堂", + "name": "电影天堂|磁力", + "type": 3, + "api": "csp_DyGod", + "searchable": 1, + "quickSearch": 1, + "filterable": 1 + }, + { + "key": "夸克云盘", + "name": "夸克|云盘", + "type": 3, + "api": "csp_PanQuark", + "searchable": 0, + "filterable": 0, + "changeable": 0, + "style": { + "type": "list", + "ratio": 1.433 + }, + "ext": "./json/quarkShare.json" + }, + { + "key": "UC", + "name": "UC|云盘", + "type": 3, + "api": "csp_PanUc", + "searchable": 0, + "filterable": 0, + "changeable": 0, + "style": { + "type": "list", + "ratio": 1.433 + }, + "ext": "./json/ucShare.json" + }, + { + "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_TGSou", + "searchable": 1, + "quickSearch": 1, + "filterable": 1 + }, + { + "key": "夸克盘搜", + "name": "夸克|搜索", + "type": 3, + "api": "csp_PanSou", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": { + "cloudDrives": "quark" + } + }, + { + "key": "UC盘搜", + "name": "UC|搜索", + "type": 3, + "api": "csp_PanSou", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": { + "cloudDrives": "uc" + } + }, + { + "key": "天翼盘搜", + "name": "天翼|搜索", + "type": 3, + "api": "csp_PanSou", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": { + "cloudDrives": "tianyi" + } + }, + { + "key": "123盘搜", + "name": "123|搜索", + "type": 3, + "api": "csp_PanSou", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": { + "cloudDrives": "123" + } + }, + { + "key": "百度盘搜", + "name": "百度|搜索", + "type": 3, + "api": "csp_PanSou", + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "ext": { + "cloudDrives": "baidu" + } + }, + { + "key": "百酷", + "name": "百酷|搜索", + "type": 3, + "api": "csp_Baiku" + }, + { + "key": "米搜", + "name": "米搜|搜索", + "type": 3, + "api": "csp_MiSou" + }, + { + "key": "酷乐搜索", + "name": "酷乐|搜索", + "type": 3, + "api": "csp_KuLe" + }, + { + "key": "爱看搜索", + "name": "爱看|搜索", + "type": 3, + "api": "csp_AiKan" + }, + { + "key": "鬼鬼搜索", + "name": "鬼鬼|搜索", + "type": 3, + "api": "csp_GuiGui" + }, + { + "key": "AList", + "name": "AList|合集", + "type": 3, + "api": "csp_Alist", + "searchable": 1, + "filterable": 1, + "changeable": 0, + "style": { + "type": "list" + }, + "ext": "./json/alist.json" + }, + { + "key": "88看球", + "name": "88|看球", + "type": 3, + "api": "csp_Kanqiu", + "gridview": 3, + "style": { + "type": "list" + } + }, + { + "key": "网络直播", + "name": "网络|直播", + "type": 3, + "api": "./py/网络直播.py" + }, + { + "key": "哔哩直播", + "name": "哔哩|直播", + "type": 3, + "api": "./py/哔哩直播.py" + }, + { + "key": "哔哩合集", + "name": "哔哩|合集", + "type": 3, + "api": "csp_Bili", + "searchable": 1, + "quickSearch": 0, + "filterable": 0, + "changeable": 0, + "style": { + "type": "rect", + "ratio": 1.433 + }, + "ext": { + "json": "./json/哔哩合集.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": { + "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt", + "json": "./json/哔哩哔哩演唱会.json" + }, + "style": { + "type": "rect", + "ratio": 1.597 + } + }, + { + "key": "哔哩哔哩听书", + "name": "哔哩|听书", + "type": 3, + "api": "csp_Bili", + "searchable": 0, + "quickSearch": 0, + "filterable": 0, + "ext": { + "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt", + "json": "./json/哔哩哔哩听书.json" + }, + "style": { + "type": "rect", + "ratio": 1.597 + } + }, + { + "key": "哔哩哔哩相声", + "name": "哔哩|相声", + "type": 3, + "api": "csp_Bili", + "searchable": 0, + "quickSearch": 0, + "filterable": 0, + "ext": { + "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt", + "json": "./json/哔哩哔哩相声.json" + }, + "style": { + "type": "rect", + "ratio": 1.597 + } + }, + { + "key": "哔哩哔哩小品", + "name": "哔哩|小品", + "type": 3, + "api": "csp_Bili", + "searchable": 0, + "quickSearch": 0, + "filterable": 0, + "ext": { + "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt", + "json": "./json/哔哩哔哩小品.json" + }, + "style": { + "type": "rect", + "ratio": 1.597 + } + }, + { + "key": "哔哩哔哩戏曲", + "name": "哔哩|戏曲", + "type": 3, + "api": "csp_Bili", + "searchable": 0, + "quickSearch": 0, + "filterable": 0, + "ext": { + "cookie": "http://127.0.0.1:9978/file/TVBox/bili_cookie.txt", + "json": "./json/哔哩哔哩戏曲.json" + }, + "style": { + "type": "rect", + "ratio": 1.597 + } + }, + { + "key": "少儿教育", + "name": "少儿|教育", + "type": 3, + "api": "csp_Bili", + "searchable": 0, + "quickSearch": 0, + "filterable": 1, + "ext": { + "json": "./json/少儿教育.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": "./json/小学课堂.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": "./json/初中课堂.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": "./json/高中课堂.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_XBPQ", + "ext": "./XBPQ/养生堂.json", + "style": { + "type": "rect", + "ratio": 1.597 + } + }, + { + "key": "版本信息", + "name": "版本|信息", + "type": 3, + "api": "csp_Market", + "searchable": 0, + "changeable": 0, + "indexs": 0, + "ext": "https://pizazz.s3.bitiful.net/single.json" + }, + { + "key": "push_agent", + "name": "手机|推送", + "type": 3, + "api": "csp_Push", + "searchable": 0, + "filterable": 0, + "changeable": 0 + } + ], + "parses": [ + { + "name": "无上", + "type": "1", + "url": "https://mfjx.iwsyy.xyz/?url=", + "ext": { + "flag": [ + "qq", + "腾讯", + "qiyi", + "爱奇艺", + "奇艺", + "youku", + "优酷", + "sohu", + "搜狐", + "letv", + "乐视", + "mgtv", + "芒果", + "tnmb", + "seven", + "bilibili", + "1905" + ], + "header": { + "User-Agent": "okhttp/4.9.1" + } + } + }, + { + "name": "巧计", + "type": 1, + "url": "https://zy.qiaoji8.com/xiafan.php?url=", + "ext": { + "flag": [ + "QD4K", + "iyf", + "duanju", + "gzcj", + "GTV", + "GZYS", + "weggz", + "Ace" + ], + "header": { + "User-Agent": "okhttp/4.9.1" + } + } + }, + { + "name": "咸鱼", + "type": 0, + "url": "https://jx.xymp4.cc/?url=", + "ext": { + "header": { + "user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.3124.68" + } + } + }, + { + "name": "虾米", + "type": 0, + "url": "https://jx.xmflv.com/?url=", + "ext": { + "header": { + "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.57" + } + } + }, + { + "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": [ + "lz", + "vip.lz", + "v.cdnlz", + "hd.lz", + "ffzy", + "vip.ffzy", + "hd.ffzy" + ], + "regex": [ + "#EXT-X-DISCONTINUITY\r*\n*#EXTINF:6.666667,[\\s\\S]*?#EXT-X-DISCONTINUITY", + "#EXT-X-DISCONTINUITY\r*\n*#EXTINF:6.600000,[\\s\\S]*?#EXT-X-DISCONTINUITY" + ] + }, + { + "name": "索尼", + "hosts": [ + "suonizy", + "qrssv.com" + ], + "regex": [ + "15.1666", + "15.2666" + ] + }, + { + "name": "乐视", + "hosts": [ + "leshiyun" + ], + "regex": [ + "15.92" + ] + }, + { + "name": "优质", + "hosts": [ + "yzzy", + "playback" + ], + "regex": [ + "16.63", + "18.66", + "17.66", + "19.13" + ] + }, + { + "name": "快看", + "hosts": [ + "kuaikan", + "vip.kuaikan" + ], + "regex": [ + "15.32", + "15.231", + "18.066" + ] + }, + { + "name": "360", + "hosts": [ + "lyhuicheng" + ], + "regex": [ + "#EXTINF.*?\\s+.*?hrz8QcR9.*?\\.ts\\s+", + "#EXT-X-KEY:METHOD=NONE[\\s\\S]*?#EXT-X-DISCONTINUITY" + ] + }, + { + "name": "开源棋牌", + "hosts": [ + "askzycdn", + "jkunbf", + "bfikuncdn", + "bfaskcdn" + ], + "regex": [ + "#EXT-X-KEY:METHOD=NONE\r*\n*#EXTINF:5,[\\s\\S]*?#EXT-X-DISCONTINUITY", + "#EXT-X-KEY:METHOD=AES-128,URI=\"[^\"]+\"\r*\n*#EXTINF:3.333,[\\s\\S]*?#EXT-X-DISCONTINUITY" + ] + }, + { + "name": "暴风", + "hosts": [ + "bfengbf.com", + "bfzy", + "c1" + ], + "regex": [ + "#EXTINF.*?\\s+.*?adjump.*?\\.ts\\s+", + "#EXT-X-DISCONTINUITY\r*\n*#EXTINF:3,[\\s\\S]*?#EXT-X-DISCONTINUITY" + ] + }, + { + "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" + ] + } + ], + "hosts": [ + "cache.ott.*.itv.cmvideo.cn=base-v4-free-mghy.e.cdn.chinamobile.com", + "cache.ott.ystenlive.itv.cmvideo.cn=base-v4-free-mghy.e.cdn.chinamobile.com", + "cache.ott.bestlive.itv.cmvideo.cn=base-v4-free-mghy.e.cdn.chinamobile.com", + "cache.ott.wasulive.itv.cmvideo.cn=base-v4-free-mghy.e.cdn.chinamobile.com", + "cache.ott.fifalive.itv.cmvideo.cn=base-v4-free-mghy.e.cdn.chinamobile.com", + "cache.ott.hnbblive.itv.cmvideo.cn=base-v4-free-mghy.e.cdn.chinamobile.com" + ], + "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/js/xiaosa/js/56动漫.js b/js/xiaosa/js/56动漫.js new file mode 100644 index 0000000..266b5f0 --- /dev/null +++ b/js/xiaosa/js/56动漫.js @@ -0,0 +1,40 @@ +var rule = { + title: '56动漫', + host: 'https://www.56dm.cc/', + url: 'https://www.56dm.cc/type/fyclass-fypage.html', + searchUrl: 'https://www.56dm.cc/search/**----------fypage---.html', + searchable: 2, //是否启用全局搜索, + quickSearch: 0, //是否启用快速搜索, + filterable: 0, //是否启用分类筛选, + headers: { + 'User-Agent': 'UC_UA', // "Cookie": "" + }, // class_parse:'.stui-header__menu li:gt(0):lt(7);a&&Text;a&&href;/(\\d+).html', + class_parse: '.snui-header-menu-nav li:gt(0):lt(6);a&&Text;a&&href;.*/(.*?).html', + play_parse: true, + lazy: `js: + if(/\\.(m3u8|mp4)/.test(input)){ + input = {parse:0,url:input} + }else{ + if(rule.parse_url.startsWith('json:')){ + let purl = rule.parse_url.replace('json:','')+input; + let html = request(purl); + input = {parse:0,url:JSON.parse(html).url} + }else{ + input= rule.parse_url+input; + } + } + `, + limit: 6, + 推荐: '.cCBf_FAAEfbc;li;a&&title;.lazyload&&data-original;.dAD_BBCI&&Text;a&&href', + double: true, // 推荐内容是否双层定位 + 一级: '.cCBf_FAAEfbc li;a&&title;a&&data-original;.dAD_BBCI&&Text;a&&href', + 二级: { + "title": "h1&&Text", + "img": ".stui-content__thumb .lazyload&&data-original", + "desc": ".cCBf_DABCcac__hcIdeE p:eq(0)&&Text;.cCBf_DABCcac__hcIdeE p:eq(1)&&Text;.cCBf_DABCcac__hcIdeE p:eq(2)&&Text;.cCBf_DABCcac__hcIdeE p:eq(3)&&Text;.cCBf_DABCcac__hcIdeE p:eq(4)&&Text", + "content": ".detail&&Text", + "tabs": ".channel-tab li", + "lists": ".play-list-content:eq(#id) li" + }, + 搜索: '.cCBf_FAAEfbc__dbD;a&&title;.lazyload&&data-original;.dAD_BBCI&&Text;a&&href;.cCBf_FAAEfbc__hcIdeE&&p:eq(0) p&&Text', +} \ No newline at end of file diff --git a/js/xiaosa/js/88看球.js b/js/xiaosa/js/88看球.js new file mode 100644 index 0000000..c552ea3 --- /dev/null +++ b/js/xiaosa/js/88看球.js @@ -0,0 +1,61 @@ +var rule = { + title:'88看球', + // host:'http://www.88kanqiu.cc', + host:'http://www.88kanqiu.bar/', + url: "/match/fyclass/live", + searchUrl: "", + searchable: 0, + quickSearch: 0, + class_parse: ".nav-pills li;a&&Text;a&&href;/match/(\\d+)/live", + headers: { + "User-Agent": "PC_UA", + }, + timeout: 5000, + play_parse: true, + pagecount:{"1":1,"2":1,"4":1,"22":1,"8":1,"9":1,"10":1,"14":1,"15":1,"12":1,"13":1,"16":1,"28":1,"7":1,"11":1,"33":1,"27":1,"23":1,"26":1,"3":1,"21":1,"18":1}, + lazy: `js: + if(/embed=/.test(input)) { + let url = input.match(/embed=(.*?)&/)[1]; + url = base64Decode(url); + input = { + jx:0, + url: url.split('#')[0], + parse: 0 + } + } else if (/\?url=/.test(input)){ + input = { + jx:0, + url: input.split('?url=')[1].split('#')[0], + parse: 0 + } + } else { + input + } + `, + limit: 6, + double: false, + 推荐: "*", + 一级: ".list-group .group-game-item;.d-none&&Text;img&&src;.btn&&Text;a&&href", + 二级: { + title: ".game-info-container&&Text;.customer-navbar-nav li&&Text", + img: "img&&src", + desc: ";;;div.team-name:eq(0)&&Text;div.team-name:eq(1)&&Text", + content: "div.game-time&&Text", + tabs: "js:TABS=['实时直播']", + lists: `js: + LISTS = []; + let html = request(input.replace('play', 'play-url')); + let pdata = JSON.parse(html).data; + pdata = pdata.slice(6); + pdata = pdata.slice(0, -2); + pdata = base64Decode(pdata); + // log(pdata); + let jo = JSON.parse(pdata).links; + let d = jo.map(function (it) { + return it.name + '$' + urlencode(it.url) + }); + LISTS.push(d) + `, + }, + 搜索: "", +}; \ No newline at end of file diff --git a/js/xiaosa/js/APPV2.js b/js/xiaosa/js/APPV2.js new file mode 100644 index 0000000..fec0f1b --- /dev/null +++ b/js/xiaosa/js/APPV2.js @@ -0,0 +1,109 @@ +/** + * 传参 ?type=url¶ms=http://122.228.85.203:1000@泽少1 + * 传参 ?type=url¶ms=http://122.228.85.203:1000@泽少2 + */ + +var rule = { + title: 'APPV2[模板]', + author: '道长', + version: '20241012 beta1', + update_info: ` +20241012: +1.根据群友嗷呜的appv2模板修改成可传参源,类似采集之王用法传参 +`.trim(), + host: '', + url: '/api.php/app/video?tid=fyclassfyfilter&limit=20&pg=fypage', + filter_url: '', + filter: {}, + homeUrl: '/api.php/app/index_video', + detailUrl: '/api.php/app/video_detail?id=fyid', + searchUrl: '/api.php/app/search?text=**&pg=fypage', + parseUrl: '', + searchable: 2, + quickSearch: 1, + filterable: 1, + headers: { + 'User-Agent': 'okhttp/4.1.0' + }, + params: 'http://122.228.85.203:1000$http://122.228.85.203:1000/play?url=', + hostJs: $js.toString(() => { + HOST = rule.params.split('$')[0]; + }), + 预处理: $js.toString(() => { + log(`传入参数:${rule.params}`); + let _host = rule.params.split('$')[0]; + rule.parseUrl = rule.params.split('$')[1]; + let _url = _host.rstrip('/') + '/api.php/app/nav?token'; + let _headers = {'User-Agent': 'Dart/2.14 (dart:io)'}; + let html = request(_url, {headers: _headers}); + let data = JSON.parse(html); + let _classes = []; + let _filter = {}; + let _filter_url = ''; + let dy = {"class": "类型", "area": "地区", "lang": "语言", "year": "年份", "letter": "字母", "by": "排序"}; + let jsonData = data.list; + for (let k = 0; k < jsonData.length; k++) { + let hasNonEmptyField = false; + let _obj = { + type_name: jsonData[k].type_name, + type_id: jsonData[k].type_id, + }; + _classes.push(_obj); + for (let key in dy) { + if (key in jsonData[k].type_extend && jsonData[k].type_extend[key].trim() !== "") { + hasNonEmptyField = true; + break + } + } + if (hasNonEmptyField) { + _filter[String(jsonData[k].type_id)] = []; + for (let dkey in jsonData[k].type_extend) { + if (dkey in dy && jsonData[k].type_extend[dkey].trim() !== "") { + if (k === 0) { + _filter_url += `&${dkey}={{fl.${dkey}}}` + } + let values = jsonData[k].type_extend[dkey].split(','); + let valueArray = values.map(value => ({"n": value.trim(), "v": value.trim()})); + _filter[String(jsonData[k].type_id)].push({"key": dkey, "name": dy[dkey], "value": valueArray}) + } + } + } + } + rule.classes = _classes; + rule.filter = _filter; + rule.filter_url = _filter_url; + }), + class_parse: $js.toString(() => { + input = rule.classes; + }), + play_parse: true, + lazy: $js.toString(() => { + if (!/^http/.test(input)) { + input = rule.parseUrl + input + } else { + input = { + url: input, + parse: 0, + header: '' + } + } + + }), + 推荐: $js.toString(() => { + let data = JSON.parse(request(input)).list; + let com = []; + data.forEach(item => { + if (Array.isArray(item.vlist) && item.vlist.length !== 0) { + com = com.concat(item.vlist) + } + }) + VODS = com + }), + 一级: $js.toString(() => { + VODS = JSON.parse(request(input)).list + }), + 二级: $js.toString(() => { + VOD = JSON.parse(request(input)).data + }), + 搜索: '*', +} \ No newline at end of file diff --git a/js/xiaosa/js/Anime1.js b/js/xiaosa/js/Anime1.js new file mode 100644 index 0000000..c0e6fb0 --- /dev/null +++ b/js/xiaosa/js/Anime1.js @@ -0,0 +1,169 @@ +// 注意事项:此源仅支持 影视TV 及 爱佬版tvbox最新版 +// 注意事项:此源仅支持 影视TV 及 爱佬版tvbox最新版 +// 注意事项:此源仅支持 影视TV 及 爱佬版tvbox最新版 +// 3个set-Cookie + +var rule = { + title:'Anime1动畫', + host:'https://anime1.me', + url: '/fyclass', + detailUrl:'/?cat=fyid', + searchUrl: '/page/fypage?s=**', + searchable:2, + quickSearch:0, + headers:{'User-Agent': 'PC_UA'}, + timeout:5000, + class_name:'連載中&2025&2024&2023&2022&2021&2020&2019&2018&更早', + class_url:'連載中&2025&2024&2023&2022&2021&2020&2019&2018&2017', + play_parse:true, + lazy:`js: + var apiurl = 'https://v.anime1.me/api'; + var html = request(apiurl, { + headers: { + 'Referer': HOST, + }, + body: 'd=' + input, + method: 'POST', + withHeaders: true + }); + let json = JSON.parse(html); + print(json); + log(Object.keys(json)); + let setCk = Object.keys(json).filter(it => it.toLowerCase() === "set-cookie"); + let cookie = setCk ? json[setCk] : ""; + // 3个set-Cookie + if (Array.isArray(cookie)) { + cookie = cookie.join(';'); + } + cookie = cookie.split(';').filter(function(it) { + return ['e', 'p', 'h'].includes(it.split('=')[0]) + }).join(';'); + log(cookie); + var purl = JSON.parse(json.body).s[0].src; + if (purl.startsWith('/')) { + purl = 'https:' + purl + } + input = { + jx: 0, + url: purl, + parse: 0, + header: JSON.stringify({ + 'referer': HOST, + 'Cookie': cookie, + 'user-agent': PC_UA + }), + } + `, + limit:6, + 推荐: `js: + var d = []; + function stripHtmlTag(src) { + return src.replace(/<\\/?[^>]+(>|$)/g, '').replace(/&.{1,5};/g, '').replace(/\\s{2,}/g, ' '); + } + var timestamp = new Date().getTime(); + var json = request('https://d1zquzjgwo9yb.cloudfront.net/?_=' + timestamp); + var list = JSON.parse(json); + let playKeys = Object.values(list).filter(function(x) { + return x[2].includes('連載中'); + }); + playKeys.forEach(function(it) { + d.push({ + title: stripHtmlTag(it[1]), + img: 'https://sta.anicdn.com/playerImg/8.jpg', + desc: it[2], + url: it[0], + }); + }); + setResult(d); + `, + 一级: `js: + var d = []; + function stripHtmlTag(src) { + return src.replace(/<\\/?[^>]+(>|$)/g, '').replace(/&.{1,5};/g, '').replace(/\\s{2,}/g, ' '); + } + var timestamp = new Date().getTime(); + var json = request('https://d1zquzjgwo9yb.cloudfront.net/?_=' + timestamp); + var list = JSON.parse(json); + let playKeys = Object.values(list).filter(function(x) { + if (MY_CATE === '連載中') return x[2].includes(MY_CATE); + else if (MY_CATE === '2017') return x[3] <= MY_CATE; + else return x[3] == MY_CATE; + }); + playKeys.forEach(function(it) { + d.push({ + title: stripHtmlTag(it[1]), + img: 'https://sta.anicdn.com/playerImg/8.jpg', + desc: it[2], + url: it[0], + }); + }); + setResult(d); + `, + 二级: `js: + pdfh = jsp.pdfh; pdfa = jsp.pdfa; pd = jsp.pd; + var html = request(input); + var timestamp = new Date().getTime(); + var json = request('https://d1zquzjgwo9yb.cloudfront.net/?_=' + timestamp); + var list = JSON.parse(json); + var vid = input.split('=')[1]; + let playKeys = Object.values(list).find(function(x) { + return x[0] === parseInt(vid); + }); + VOD = { + vod_pic: 'https://sta.anicdn.com/playerImg/8.jpg', + vod_id: playKeys[0], + vod_name: playKeys[1], + vod_content: playKeys[2], + vod_year: playKeys[3], + type_name: playKeys[4], + vod_actor: playKeys[5], + }; + var pageurl = pd(html, '.cat-links&&a&&href'); + var pagenum = 1; + let vod_tab_list = []; + let vlist = []; + for (let p = 1; p < parseInt(pagenum) + 1; p++) { + let phtml = request(pageurl + '/page/' + pagenum); + let new_vod_list = []; + let vodList = []; + vodList = pdfa(phtml, '.site-main&&article'); + for (let i = 0; i < vodList.length; i++) { + let it = vodList[i]; + let ptitle = pdfh(it, '.entry-title&&Text').replace(/\\[(.*)\\]/, '$1'); + let purl = pd(it, '.video-js&&data-apireq'); + new_vod_list.push(ptitle + '$' + purl); + } + vlist = vlist.concat(new_vod_list); + try { + pagenum = pd(phtml, '.nav-previous&&a&&href').split('/page/')[1]; + } catch(e) {} + } + let vlist2 = vlist.reverse().join("#"); + vod_tab_list.push(vlist2); + VOD.vod_play_from = '在线播放'; + VOD.vod_play_url = vod_tab_list.join("$$$"); + `, + 搜索: `js: + var d = []; + function stripHtmlTag(src) { + return src.replace(/<\\/?[^>]+(>|$)/g, '').replace(/&.{1,5};/g, '').replace(/\\s{2,}/g, ' '); + } + var timestamp = new Date().getTime(); + var json = request('https://d1zquzjgwo9yb.cloudfront.net/?_=' + timestamp); + var list = JSON.parse(json); + var wd = input.split('=')[1]; + let playKeys = Object.values(list).filter(function(x) { + return x[1].includes(wd); + }); + log(playKeys); + playKeys.forEach(function(it) { + d.push({ + title: stripHtmlTag(it[1]), + img: 'https://sta.anicdn.com/playerImg/8.jpg', + desc: it[2], + url: it[0], + }); + }); + setResult(d); + `, +} \ No newline at end of file diff --git a/js/xiaosa/js/NT动漫.js b/js/xiaosa/js/NT动漫.js new file mode 100644 index 0000000..4dde948 --- /dev/null +++ b/js/xiaosa/js/NT动漫.js @@ -0,0 +1,1013 @@ +// http://www.ntdm.tv +var rule = { + title: 'NT动漫', + host: 'http://www.ntdm8.com', + homeUrl: '/type/riben.html', + // url:'/show/fyclass--------fypage---.html', + url: '/show/fyclassfyfilter.html', + filterable: 1, //是否启用分类筛选, + filter_url: '--{{fl.by}}-{{fl.class}}--{{fl.letter}}---fypage---{{fl.year}}', + filter: { + "riben": [{ + "key": "year", + "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" + }, { + "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": "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": "历史" + }, { + "n": "社会", + "v": "社会" + }, { + "n": "职场", + "v": "职场" + }, { + "n": "剧情", + "v": "剧情" + }, { + "n": "伪娘", + "v": "伪娘" + }, { + "n": "耽美", + "v": "耽美" + }, { + "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": "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" + }] + }], + "zhongguo": [{ + "key": "year", + "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" + }, { + "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": "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": "历史" + }, { + "n": "社会", + "v": "社会" + }, { + "n": "职场", + "v": "职场" + }, { + "n": "剧情", + "v": "剧情" + }, { + "n": "伪娘", + "v": "伪娘" + }, { + "n": "耽美", + "v": "耽美" + }, { + "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": "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" + }] + }], + "omei": [{ + "key": "year", + "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" + }, { + "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": "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": "历史" + }, { + "n": "社会", + "v": "社会" + }, { + "n": "职场", + "v": "职场" + }, { + "n": "剧情", + "v": "剧情" + }, { + "n": "伪娘", + "v": "伪娘" + }, { + "n": "耽美", + "v": "耽美" + }, { + "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": "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" + }] + }] + }, + searchUrl: '/search/**----------fypage---.html', + searchable: 2, //是否启用全局搜索, + quickSearch: 0, //是否启用快速搜索, + headers: { //网站的请求头,完整支持所有的,常带ua和cookies + 'User-Agent': 'MOBILE_UA', + }, + class_parse: '.search-tag li;a&&Text;a&&href;.*/(\\w+).html', + play_parse: true, + detailUrl: '', + lazy: "", + limit: 6, + 推荐: '*', + 一级: '.blockcontent1&&.blockdif2;img&&alt;img&&src;.newname&&Text;a&&href', + 二级访问前: '', + 二级: { + "title": "h4&&Text;.detail_imform_value:eq(6)&&Text", + "img": ".poster&&src", + "desc": ".detail_imform_kv:eq(0)&&Text;.detail_imform_value:eq(5)&&Text;.detail_imform_value:eq(2)&&Text;.detail_imform_kv:eq(0)&&Text;.detail_imform_kv:eq(3)&&Text", + "content": ".detail_imform_desc_pre&&Text", + "tabs": "#menu0&&li", + "lists": ".movurl:eq(#id)&&li" + }, + 搜索: '*', +} \ No newline at end of file diff --git a/js/xiaosa/js/NyaFun.js b/js/xiaosa/js/NyaFun.js new file mode 100644 index 0000000..16b21a2 --- /dev/null +++ b/js/xiaosa/js/NyaFun.js @@ -0,0 +1,13 @@ +muban.短视2.二级.img = '.detail-pic&&img&&data-src'; +var rule = { + title: 'NyaFun', + 模板:'短视2', + host: 'https://www.nyafun.net', + homeUrl:'/map.html', + url: '/index.php/api/vod#type=fyclass&page=fypage', + class_name:'番剧&剧场', + class_url:'2&1', + detailUrl:'/bangumi/fyid.html', + 推荐:'.border-box .public-list-box;a&&title;.lazy&&data-src;.public-list-prb&&Text;a&&href', + double: false, // 推荐内容是否双层定位 +} \ No newline at end of file diff --git a/js/xiaosa/js/alishare.txt b/js/xiaosa/js/alishare.txt new file mode 100644 index 0000000..cd52f13 --- /dev/null +++ b/js/xiaosa/js/alishare.txt @@ -0,0 +1,70 @@ +[ + { + "share_name": "优品阁", + "share_id": "uWa9gbM3RJ7" + }, + { + "share_name": "阿里1T", + "share_id": "mxAfB6eRgY4" + }, + { + "share_name": "平凡中的", + "share_id": "4ydLxf7VgH7" + }, + { + "share_name": "tacit0924", + "share_id": "DNgnCudf4cD?pwd=6666" + }, + { + "share_name": "黄妈", + "share_id": "4bGRVUdUtct" + }, + { + "share_name": "YYDSVIP", + "share_id": "dieULBdYP3D" + }, + { + "share_name": "优源阁", + "share_id": "RnjUi1urdb2" + }, + { + "share_name": "风流动漫", + "share_id": "WdaaeX7HK44" + }, + { + "share_name": "风流剧集", + "share_id": "kgxWjZsK6bq" + }, + { + "share_name": "xiaaluo", + "share_id": "sg8CdGUwmUr" + }, + { + "share_name": "4K影视", + "share_id": "wHPKUENKFsS" + }, + { + "share_name": "诺兰全集", + "share_id": "gf2GebXnZHh" + }, + { + "share_name": "纪录片", + "share_id": "fSNHaYST47s" + }, + { + "share_name": "掌灯者|港", + "share_id": "wHPKUENKFsS" + }, + { + "share_name": "掌灯者|一", + "share_id": "wHPKUENKFsS" + }, + { + "share_name": "掌灯者|二", + "share_id": "wHPKUENKFsS" + }, + { + "share_name": "掌灯者|三", + "share_id": "wHPKUENKFsS" + } +] \ No newline at end of file diff --git a/js/xiaosa/js/drpy-core-lite.min.js b/js/xiaosa/js/drpy-core-lite.min.js new file mode 100644 index 0000000..2aec8b0 --- /dev/null +++ b/js/xiaosa/js/drpy-core-lite.min.js @@ -0,0 +1 @@ +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 { + _o.msg = _o.msg.trim().split("\n").map(_it => _it.trim()).join("\n"); + return _o + }) +} + +function init_test() { + console.log("init_test_start"); + console.log("当前版本号:" + VERSION); + console.log("本地代理地址:" + getProxyUrl()); + console.log(RKEY); + console.log(JSON.stringify(rule)); + console.log("init_test_end") +} + +function ocr_demo_test() { + let img_base64 = `iVBORw0KGgoAAAANSUhEUgAAAIAAAAAoBAMAAADEX+97AAAAG1BMVEXz+/4thQTa7N6QwIFFkyNeokKozqDB3b93sWHFR+MEAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABN0lEQVRIie2TQU+DQBCFt9vScvQpxR4xrcSjJCZ67JDGXsX+AdR4B3vpsSYm/m2HXaRLmuySepR3Gdidb/btDAjRq5dT96eCMlfBuzi1QLZUoZy2yz5sOvI+9iomaPEZ6nWnEtxqIyiM1RcAy44GNDhBXUjot/VVNweV1ah68FqWRyjKIOqAcyYF6rGcmpYnHzGt3fycNoMw0d3/THFu7hFSJ/8OXO6iTM8/KSg09obAzIHLO250LgQ0txOZSfgrV4Exdw98uGycJ0ErAeExZGhOmFHV9zHO6qVSj0MpLq7xZON56o++MjlsEgfVhbQWWME+xQX7J4V6zfi9A1Ly9rP1BvEXp+BbVJ/M77n+wfOIDVp51pZ4iBxvmj9AGrtvry6emwfKnVkW+ZRKd5ZNMvob36vXP9YPDmQki8QiCFAAAAAASUVORK5CYII=`; + OcrApi.api = OCR_API; + let code = OcrApi.classification(img_base64); + log("测试验证码图片的ocr识别结果为:" + code) +} + +function rsa_demo_test() { + let t1 = (new Date).getTime(); + let pkcs1_public = ` +-----BEGIN RSA PUBLIC KEY----- +MEgCQQCrI0pQ/ERRpJ3Ou190XJedFq846nDYP52rOtXyDxlFK5D3p6JJu2RwsKwy +lsQ9xY0xYPpRZUZKMEeR7e9gmRNLAgMBAAE= +-----END RSA PUBLIC KEY----- +`.trim(); + let pkcs1_public_pem = ` +MEgCQQCrI0pQ/ERRpJ3Ou190XJedFq846nDYP52rOtXyDxlFK5D3p6JJu2RwsKwy +lsQ9xY0xYPpRZUZKMEeR7e9gmRNLAgMBAAE= +`.trim(); + let pkcs8_public = ` +-----BEGIN PUBLIC KEY----- +MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKsjSlD8RFGknc67X3Rcl50WrzjqcNg/ +nas61fIPGUUrkPenokm7ZHCwrDKWxD3FjTFg+lFlRkowR5Ht72CZE0sCAwEAAQ== +-----END PUBLIC KEY-----`.trim(); + let pkcs8_public_pem = ` +MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKsjSlD8RFGknc67X3Rcl50WrzjqcNg/ +nas61fIPGUUrkPenokm7ZHCwrDKWxD3FjTFg+lFlRkowR5Ht72CZE0sCAwEAAQ== +`.trim(); + let pkcs1_private = ` +-----BEGIN RSA PRIVATE KEY----- +MIIBOAIBAAJBAKsjSlD8RFGknc67X3Rcl50WrzjqcNg/nas61fIPGUUrkPenokm7 +ZHCwrDKWxD3FjTFg+lFlRkowR5Ht72CZE0sCAwEAAQI/b6OV1z65UokQaMvSeRXt +0Yv6wiYtduQI9qpq5nzy/ytaqsbBfClNTi/HifKPKxlRouWFkc518EQI8LBxoarJ +AiEA4DaONMplV8PQNa3TKn2F+SDEvLOCjdL0kHKdN90Ti28CIQDDZnTBaHgZwZbA +hS7Bbf5yvwjWMhO6Y7l04/Qm7R+35QIgPuQuqXIoUSD080mp1N5WyRW++atksIF+ +5lGv9e6GP/MCICnj8y/rl6Pd7tXDN6zcSeqLrfdNsREKhB3dKOCXgW9JAiAFYtFS +EJNBXVRTK42SNsZ2hJ/9xLwOwnH2epT8Q43s3Q== +-----END RSA PRIVATE KEY----- +`.trim(); + let pkcs8_private = ` +-----BEGIN PRIVATE KEY----- +MIIBUgIBADANBgkqhkiG9w0BAQEFAASCATwwggE4AgEAAkEAqyNKUPxEUaSdzrtf +dFyXnRavOOpw2D+dqzrV8g8ZRSuQ96eiSbtkcLCsMpbEPcWNMWD6UWVGSjBHke3v +YJkTSwIDAQABAj9vo5XXPrlSiRBoy9J5Fe3Ri/rCJi125Aj2qmrmfPL/K1qqxsF8 +KU1OL8eJ8o8rGVGi5YWRznXwRAjwsHGhqskCIQDgNo40ymVXw9A1rdMqfYX5IMS8 +s4KN0vSQcp033ROLbwIhAMNmdMFoeBnBlsCFLsFt/nK/CNYyE7pjuXTj9CbtH7fl +AiA+5C6pcihRIPTzSanU3lbJFb75q2SwgX7mUa/17oY/8wIgKePzL+uXo93u1cM3 +rNxJ6out902xEQqEHd0o4JeBb0kCIAVi0VIQk0FdVFMrjZI2xnaEn/3EvA7CcfZ6 +lPxDjezd +-----END PRIVATE KEY----- +`.trim(); + let data = ` +NodeRsa +这是node-rsa 现在修改集成在drpy里使用`.trim(); + let encryptedWithPublic = NODERSA.encryptRSAWithPublicKey(data, pkcs1_public, { + outputEncoding: "base64", + options: { + environment: "browser", + encryptionScheme: "pkcs1_oaep" + } + }); + console.log("公钥加密"); + console.log(encryptedWithPublic); + let decryptedWithPrivate = NODERSA.decryptRSAWithPrivateKey(encryptedWithPublic, pkcs1_private, { + options: { + environment: "browser", + encryptionScheme: "pkcs1_oaep" + } + }); + console.log("私钥解密"); + console.log(decryptedWithPrivate); + let pkcs1_sha256_sign = NODERSA.sign("1", pkcs1_private, { + outputEncoding: "base64", + options: { + environment: "browser", + encryptionScheme: "pkcs1", + signingScheme: "pkcs1-sha256" + } + }); + console.log("pkcs1_sha256_sign"); + console.log(pkcs1_sha256_sign); + let pkcs1_sha256_sign_verify = NODERSA.verify("1", "Oulx2QrgeipKYBtqEDqFb2s/+ndk2cGQxO4CkhU7iBM1vyNmmvqubpsmeoUuN3waGrYZLknSEdwBkfv0tUMpFQ==", pkcs1_private, { + options: { + environment: "browser", + encryptionScheme: "pkcs1", + signingScheme: "pkcs1-sha256" + } + }); + console.log("pkcs1_sha256_sign_verify"); + console.log(pkcs1_sha256_sign_verify); + let pkcs1_oaep_sha256 = NODERSA.encryptRSAWithPublicKey(data, `-----BEGIN RSA PUBLIC KEY----- +MIIBCgKCAQEA5KOq1gRNyllLNWKQy8sGpZE3Q1ULLSmzZw+eaAhj9lvqn7IsT1du +SYn08FfoOA2qMwtz+1O2l1mgzNoSVCyVpVabnTG+C9XKeZXAnJHd8aYA7l7Sxhdm +kte+iymYZ0ZBPzijo8938iugtVvqi9UgDmnY3u/NlQDqiL5BGqSxSTd/Sgmy3zD8 +PYzEa3wD9vehQ5fZZ45vKIq8GNVh2Z8+IGO85FF1OsN7+b2yGJa/FmDDNn0+HP+m +PfI+kYBqEVpo0Ztbc3UdxgFwGC8O1n8AQyriwHnSOtIiuBH62J/7qyC/3LEAApRb +Dd9YszqzmODjQUddZKHmvc638VW+azc0EwIDAQAB +-----END RSA PUBLIC KEY----- +`, { + outputEncoding: "base64", + options: { + environment: "browser", + encryptionScheme: { + scheme: "pkcs1_oaep", + hash: "sha256" + } + } + }); + console.log("pkcs1_oaep_sha256"); + console.log(pkcs1_oaep_sha256); + decryptedWithPrivate = NODERSA.decryptRSAWithPrivateKey("kSZesAAyYh2hdsQnYMdGqb6gKAzTauBKouvBzWcc4+F8RvGd0nwO6mVkUMVilPgUuNxjEauHayHiY8gI3Py45UI3+km0rSGyHrS6dHiHgCkMejXHieglYzAB0IxX3Jkm4z/66bdB/D+GFy0oct5fGCMI1UHPjEAYOsazJDa8lBFNbjiWFeb/qiZtIx3vGM7KYPAZzyRf/zPbbQ8zy9xOmRuOl5nnIxgo0Okp3KO/RIPO4GZOSBA8f2lx1UtNwwrXAMpcNavtoqHVcjJ/9lcotXYQFrn5b299pSIRf2gVm8ZJ31SK6Z8cc14nKtvgnmsgClDzIXJ1o1RcDK+knVAySg==", `-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEA5KOq1gRNyllLNWKQy8sGpZE3Q1ULLSmzZw+eaAhj9lvqn7Is +T1duSYn08FfoOA2qMwtz+1O2l1mgzNoSVCyVpVabnTG+C9XKeZXAnJHd8aYA7l7S +xhdmkte+iymYZ0ZBPzijo8938iugtVvqi9UgDmnY3u/NlQDqiL5BGqSxSTd/Sgmy +3zD8PYzEa3wD9vehQ5fZZ45vKIq8GNVh2Z8+IGO85FF1OsN7+b2yGJa/FmDDNn0+ +HP+mPfI+kYBqEVpo0Ztbc3UdxgFwGC8O1n8AQyriwHnSOtIiuBH62J/7qyC/3LEA +ApRbDd9YszqzmODjQUddZKHmvc638VW+azc0EwIDAQABAoIBADZ/QGgUzInvsLp/ +zO2WbfYm39o/uhNAvk9RbLt1TIZbMFhyOpeKynHi3Swwd9xsfWX/U9zS/lGi/m31 +iKrhmaW4OA1G3vqpMcK7TBbFufYwUEaA+ZJX344euH8pIfdzyneMQ4z3Far2dS7l +QsmjuilVV2kEFadveXewiYoVOWCu00w6bN8wy2SIHlQn+kIL6HQhWz12iKKflIKu +eGRdzLHsKmBt6WbY1Wuhx7HU0fAKdlBDPxCHNlI+kybUYE9o5C2vJiaVM5wqJBgZ +8Dz8kt1QbLJ910JoLXkLVQ8uC8NJKQwFtqQjTGPnEq0+wbgz6Ij599rKZkwW/xq9 +l6KoUiECgYEA6Ah42tVdkNW047f03xVYXFH96RgorHRS36mR8Y+ONUq1fwKidovC +WjwVujt4OPf3l1W6iyn/F6cu/bsmvPrSc3HTN0B1V31QK4OjgetxQ2PSbTldH02J +NPzkt+v+cPxXpx/P5mgt7Weefw5txU547KubGrHUV5rBKFtIx9pj16MCgYEA/EF0 +o19+D24DZAPwlDS5VbEd7FStnwY4oQ5PqbuNOSbSJLMWU0AqzXcRokp8UTyCZ0X3 +ATkS1REq97kShCuR+npTR6a6DlY7sdpPI1SMLNajgB2tkx0EOzX+PfNIbHUd4jpJ +I0ZMAHv/OOtkzQHDaeTWBTrzsWm6/nTiykfduNECgYEA46AMD4HpPECqKAs66e5i +tI6q7JSKskObWVdcmQEfnSAhVOwcvPb2Ptda6UuV8S0xcwDi88rLOUUFUFzc79+P +vTkY38cYVi/VChsluDpk7ptqv0PbGu5Rf+3n4pZdEjI7OvR2W64wAAn67uIUxc7p +yiO/ET0K9rYWb6S9jXGtKMkCgYEA2kPAqoO7zZoBMQ7/oR0lp/HC1HRIbiqx4RlC +8Lgpb+QZPEwA6zPAVVvLVENi4d+bbcRp/xLlKpraNNJcJSSWAMbLPFoU7sbKjA87 +HnTPfRSTEA2d3Ibk3F7Rh8TzS3Ti0JZiJjVzGZAwu41iAMifzwaD8K6boUy80eNN +QH2CaaECgYBUsLYvC/MiYg3w+LGOONuQongoVUXjGqnw2bjVa9RK7lwRdXPUqJ51 +MpVO98IkoLvGSI/0sGNP3GKNhC+eMGjJAVwFyEuOn+JsmMv9Y9uStIVi5tIHIhKw +m7mp8il0kaftHdSxTbspG3tZ2fjIiFIZkLEOmRpd7ogWumgOajzUdA== +-----END RSA PRIVATE KEY-----`, { + options: { + environment: "browser", + encryptionScheme: "pkcs1_oaep" + } + }); + console.log("decryptedWithPrivate"); + console.log(decryptedWithPrivate); + (() => { + let key = new NODERSA.NodeRSA({ + b: 1024 + }); + key.setOptions({ + encryptionScheme: "pkcs1" + }); + let text = `你好drpy node-ras`; + let encrypted = key.encrypt(text, "base64"); + console.log("encrypted: ", encrypted); + const decrypted = key.decrypt(encrypted, "utf8"); + console.log("decrypted: ", decrypted) + })(); + let t2 = (new Date).getTime(); + console.log("rsa_demo_test 测试耗时:" + (t2 - t1) + "毫秒") +} + +function pre() { + if (typeof rule.预处理 === "string" && rule.预处理 && rule.预处理.trim()) { + let code = rule.预处理.trim(); + console.log("执行预处理代码:" + code); + if (code.startsWith("js:")) { + code = code.replace("js:", "") + } + try { + eval(code) + } catch (e) { + console.log(`预处理执行失败:${e.message}`) + } + } +} +let rule = {}; +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 PC_UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36"; +const UA = "Mozilla/5.0"; +const UC_UA = "Mozilla/5.0 (Linux; U; Android 9; zh-CN; MI 9 Build/PKQ1.181121.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/12.5.5.1035 Mobile Safari/537.36"; +const IOS_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"; +const RULE_CK = "cookie"; +const CATE_EXCLUDE = "首页|留言|APP|下载|资讯|新闻|动态"; +const TAB_EXCLUDE = "猜你|喜欢|下载|剧情|榜|评论"; +const OCR_RETRY = 3; +const OCR_API = "https://api.nn.ci/ocr/b64/text"; +if (typeof MY_URL === "undefined") { + var MY_URL +} +var HOST; +var RKEY; +var fetch; +var print; +var log; +var rule_fetch_params; +var fetch_params; +var oheaders; +var _pdfh; +var _pdfa; +var _pd; +const DOM_CHECK_ATTR = /(url|src|href|-original|-src|-play|-url|style)$/; +const SPECIAL_URL = /^(ftp|magnet|thunder|ws):/; +const NOADD_INDEX = /:eq|:lt|:gt|:first|:last|^body$|^#/; +const URLJOIN_ATTR = /(url|src|href|-original|-src|-play|-url|style)$|^(data-|url-|src-)/; +const SELECT_REGEX = /:eq|:lt|:gt|#/g; +const SELECT_REGEX_A = /:eq|:lt|:gt/g; +const $js = { + toString(func) { + let strfun = func.toString(); + return strfun.replace(/^\(\)(\s+)?=>(\s+)?\{/, "js:").replace(/\}$/, "") + } +}; + +function window_b64() { + let b64map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + let 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 < len) { + c1 = str.charCodeAt(i++) & 255; + if (i == len) { + out += b64map.charAt(c1 >> 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 < len) { + do { + c1 = base64DecodeChars[str.charCodeAt(i++) & 255] + } while (i < len && c1 == -1); + if (c1 == -1) break; + do { + c2 = base64DecodeChars[str.charCodeAt(i++) & 255] + } while (i < len && c2 == -1); + if (c2 == -1) break; + out += String.fromCharCode(c1 << 2 | (c2 & 48) >> 4); + do { + c3 = str.charCodeAt(i++) & 255; + if (c3 == 61) return out; + c3 = base64DecodeChars[c3] + } while (i < len && c3 == -1); + if (c3 == -1) break; + out += String.fromCharCode((c2 & 15) << 4 | (c3 & 60) >> 2); + do { + c4 = str.charCodeAt(i++) & 255; + if (c4 == 61) return out; + c4 = base64DecodeChars[c4] + } while (i < len && c4 == -1); + if (c4 == -1) break; + out += String.fromCharCode((c3 & 3) << 6 | c4) + } + return out + } + return { + atob: atob, + btoa: btoa + } +} +if (typeof atob !== "function" || typeof btoa !== "function") { + var { + atob, + btoa + } = window_b64() +} +if (typeof Object.assign !== "function") { + Object.assign = function() { + let target = arguments[0]; + for (let i = 1; i < arguments.length; i++) { + let source = arguments[i]; + for (let key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key] + } + } + } + return target + } +} +if (!String.prototype.includes) { + String.prototype.includes = function(search, start) { + if (typeof start !== "number") { + start = 0 + } + if (start + search.length > this.length) { + return false + } else { + return this.indexOf(search, start) !== -1 + } + } +} +if (!Array.prototype.includes) { + Object.defineProperty(Array.prototype, "includes", { + value: function(searchElement, fromIndex) { + if (this == null) { + throw new TypeError('"this" is null or not defined') + } + var o = Object(this); + var len = o.length >>> 0; + if (len === 0) { + return false + } + var n = fromIndex | 0; + var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0); + while (k < len) { + if (o[k] === searchElement) { + return true + } + k++ + } + return false + }, + enumerable: false + }) +} +if (typeof String.prototype.startsWith !== "function") { + String.prototype.startsWith = function(prefix) { + return this.slice(0, prefix.length) === prefix + } +} +if (typeof String.prototype.endsWith !== "function") { + String.prototype.endsWith = function(suffix) { + return this.indexOf(suffix, this.length - suffix.length) !== -1 + } +} +Object.defineProperty(Object.prototype, "myValues", { + value: function(obj) { + if (obj == null) { + throw new TypeError("Cannot convert undefined or null to object") + } + var res = []; + for (var k in obj) { + if (obj.hasOwnProperty(k)) { + res.push(obj[k]) + } + } + return res + }, + enumerable: false +}); +if (typeof Object.prototype.values !== "function") { + Object.defineProperty(Object.prototype, "values", { + value: function(obj) { + if (obj == null) { + throw new TypeError("Cannot convert undefined or null to object") + } + var res = []; + for (var k in obj) { + if (obj.hasOwnProperty(k)) { + res.push(obj[k]) + } + } + return res + }, + enumerable: false + }) +} +if (typeof Array.prototype.join !== "function") { + Object.defineProperty(Array.prototype, "join", { + value: function(emoji) { + emoji = emoji || ""; + let self = this; + let str = ""; + let i = 0; + if (!Array.isArray(self)) { + throw String(self) + "is not Array" + } + if (self.length === 0) { + return "" + } + if (self.length === 1) { + return String(self[0]) + } + i = 1; + str = this[0]; + for (; i < self.length; i++) { + str += String(emoji) + String(self[i]) + } + return str + }, + enumerable: false + }) +} +if (typeof Array.prototype.toReversed !== "function") { + Object.defineProperty(Array.prototype, "toReversed", { + value: function() { + const clonedList = this.slice(); + const reversedList = clonedList.reverse(); + return reversedList + }, + enumerable: false + }) +} +Object.defineProperty(Array.prototype, "append", { + value: Array.prototype.push, + enumerable: false +}); +Object.defineProperty(String.prototype, "strip", { + value: String.prototype.trim, + enumerable: false +}); +Object.defineProperty(String.prototype, "rstrip", { + value: function(chars) { + let regex = new RegExp(chars + "$"); + return this.replace(regex, "") + }, + enumerable: false +}); + +function 是否正版(vipUrl) { + let flag = new RegExp("qq.com|iqiyi.com|youku.com|mgtv.com|bilibili.com|sohu.com|ixigua.com|pptv.com|miguvideo.com|le.com|1905.com|fun.tv"); + return flag.test(vipUrl) +} + +function urlDeal(vipUrl) { + if (!vipUrl) { + return "" + } + if (!是否正版(vipUrl)) { + return vipUrl + } + if (!/miguvideo/.test(vipUrl)) { + vipUrl = vipUrl.split("#")[0].split("?")[0] + } + return vipUrl +} + +function setResult(d) { + if (!Array.isArray(d)) { + return [] + } + VODS = []; + d.forEach(function(it) { + let obj = { + vod_id: it.url || "", + vod_name: it.title || "", + vod_remarks: it.desc || "", + vod_content: it.content || "", + vod_pic: it.pic_url || it.img || "" + }; + let keys = Object.keys(it); + if (keys.includes("tname")) { + obj.type_name = it.tname || "" + } + if (keys.includes("tid")) { + obj.type_id = it.tid || "" + } + if (keys.includes("year")) { + obj.vod_year = it.year || "" + } + if (keys.includes("actor")) { + obj.vod_actor = it.actor || "" + } + if (keys.includes("director")) { + obj.vod_director = it.director || "" + } + if (keys.includes("area")) { + obj.vod_area = it.area || "" + } + VODS.push(obj) + }); + return VODS +} + +function setResult2(res) { + VODS = res.list || []; + return VODS +} + +function setHomeResult(res) { + if (!res || typeof res !== "object") { + return [] + } + return setResult(res.list) +} + +function rc(js) { + if (js === "maomi_aes.js") { + var a = CryptoJS.enc.Utf8.parse("625222f9149e961d"); + var t = CryptoJS.enc.Utf8.parse("5efdtf6060e2o330"); + return { + De: function(word) { + word = CryptoJS.enc.Hex.parse(word); + return CryptoJS.AES.decrypt(CryptoJS.enc.Base64.stringify(word), a, { + iv: t, + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.Pkcs7 + }).toString(CryptoJS.enc.Utf8) + }, + En: function(word) { + var Encrypted = CryptoJS.AES.encrypt(word, a, { + iv: t, + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.Pkcs7 + }); + return Encrypted.ciphertext.toString() + } + } + } + return {} +} + +function maoss(jxurl, ref, key) { + fetch_params = JSON.parse(JSON.stringify(rule_fetch_params)); + eval(getCryptoJS()); + try { + var getVideoInfo = function(text) { + return CryptoJS.AES.decrypt(text, key, { + iv: iv, + padding: CryptoJS.pad.Pkcs7 + }).toString(CryptoJS.enc.Utf8) + }; + var token_key = key == undefined ? "dvyYRQlnPRCMdQSe" : key; + if (ref) { + var html = request(jxurl, { + headers: { + Referer: ref + } + }) + } else { + var html = request(jxurl) + } + if (html.indexOf("&btwaf=") != -1) { + html = request(jxurl + "&btwaf" + html.match(/&btwaf(.*?)"/)[1], { + headers: { + Referer: ref + } + }) + } + var token_iv = html.split('_token = "')[1].split('"')[0]; + var key = CryptoJS.enc.Utf8.parse(token_key); + var iv = CryptoJS.enc.Utf8.parse(token_iv); + eval(html.match(/var config = {[\s\S]*?}/)[0] + ""); + if (!config.url.startsWith("http")) { + config.url = CryptoJS.AES.decrypt(config.url, key, { + iv: iv, + padding: CryptoJS.pad.Pkcs7 + }).toString(CryptoJS.enc.Utf8) + } + return config.url + } catch (e) { + return "" + } +} + +function urlencode(str) { + str = (str + "").toString(); + return encodeURIComponent(str).replace(/!/g, "%21").replace(/'/g, "%27").replace(/\(/g, "%28").replace(/\)/g, "%29").replace(/\*/g, "%2A").replace(/%20/g, "+") +} + +function encodeUrl(str) { + if (typeof encodeURI == "function") { + return encodeURI(str) + } else { + str = (str + "").toString(); + return encodeURIComponent(str).replace(/%2F/g, "/").replace(/%3F/g, "?").replace(/%3A/g, ":").replace(/%40/g, "@").replace(/%3D/g, "=").replace(/%3A/g, ":").replace(/%2C/g, ",").replace(/%2B/g, "+").replace(/%24/g, "$") + } +} + +function base64Encode(text) { + return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(text)) +} + +function base64Decode(text) { + return CryptoJS.enc.Utf8.stringify(CryptoJS.enc.Base64.parse(text)) +} + +function md5(text) { + return CryptoJS.MD5(text).toString() +} + +function uint8ArrayToBase64(uint8Array) { + let binaryString = String.fromCharCode.apply(null, Array.from(uint8Array)); + return btoa(binaryString) +} + +function Utf8ArrayToStr(array) { + var out, i, len, c; + var char2, char3; + out = ""; + len = array.length; + i = 0; + while (i < len) { + c = array[i++]; + switch (c >> 4) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + out += String.fromCharCode(c); + break; + case 12: + case 13: + char2 = array[i++]; + out += String.fromCharCode((c & 31) << 6 | char2 & 63); + break; + case 14: + char2 = array[i++]; + char3 = array[i++]; + out += String.fromCharCode((c & 15) << 12 | (char2 & 63) << 6 | (char3 & 63) << 0); + break + } + } + return out +} + +function gzip(str) { + let arr = pako.gzip(str, {}); + return uint8ArrayToBase64(arr) +} + +function ungzip(b64Data) { + let strData = atob(b64Data); + const charData = strData.split("").map(function(x) { + return x.charCodeAt(0) + }); + const binData = new Uint8Array(charData); + const data = pako.inflate(binData); + return Utf8ArrayToStr(data) +} + +function encodeStr(input, encoding) { + encoding = encoding || "gbk"; + if (encoding.startsWith("gb")) { + input = gbkTool.encode(input) + } + return input +} + +function decodeStr(input, encoding) { + encoding = encoding || "gbk"; + if (encoding.startsWith("gb")) { + input = gbkTool.decode(input) + } + return input +} + +function getCryptoJS() { + return 'console.log("CryptoJS已装载");' +} +const RSA = { + decode: function(data, key, option) { + option = option || {}; + if (typeof JSEncrypt === "function") { + let chunkSize = option.chunkSize || 117; + let privateKey = this.getPrivateKey(key); + const decryptor = new JSEncrypt; + decryptor.setPrivateKey(privateKey); + let uncrypted = ""; + uncrypted = decryptor.decryptUnicodeLong(data); + return uncrypted + } else { + return false + } + }, + encode: function(data, key, option) { + option = option || {}; + if (typeof JSEncrypt === "function") { + let chunkSize = option.chunkSize || 117; + let publicKey = this.getPublicKey(key); + const encryptor = new JSEncrypt; + encryptor.setPublicKey(publicKey); + let encrypted = ""; + encrypted = encryptor.encryptUnicodeLong(data); + return encrypted + } else { + return false + } + }, + fixKey(key, prefix, endfix) { + if (!key.includes(prefix)) { + key = prefix + key + } + if (!key.includes(endfix)) { + key += endfix + } + return key + }, + getPrivateKey(key) { + let prefix = "-----BEGIN RSA PRIVATE KEY-----"; + let endfix = "-----END RSA PRIVATE KEY-----"; + return this.fixKey(key, prefix, endfix) + }, + getPublicKey(key) { + let prefix = "-----BEGIN PUBLIC KEY-----"; + let endfix = "-----END PUBLIC KEY-----"; + return this.fixKey(key, prefix, endfix) + } +}; + +function getProxyUrl() { + if (typeof getProxy === "function") { + return getProxy(true) + } else { + return "http://127.0.0.1:9978/proxy?do=js" + } +} + +function fixAdM3u8(m3u8_text, m3u8_url, ad_remove) { + if (!m3u8_text && !m3u8_url || !m3u8_text && m3u8_url && !m3u8_url.startsWith("http")) { + return "" + } + if (!m3u8_text) { + log("m3u8_url:" + m3u8_url); + m3u8_text = request(m3u8_url) + } + log("len(m3u8_text):" + m3u8_text.length); + if (!ad_remove) { + return m3u8_text + } + if (ad_remove.startsWith("reg:")) { + ad_remove = ad_remove.slice(4) + } else if (ad_remove.startsWith("js:")) { + ad_remove = ad_remove.slice(3) + } + let m3u8_start = m3u8_text.slice(0, m3u8_text.indexOf("#EXTINF")).trim(); + let m3u8_body = m3u8_text.slice(m3u8_text.indexOf("#EXTINF"), m3u8_text.indexOf("#EXT-X-ENDLIST")).trim(); + let m3u8_end = m3u8_text.slice(m3u8_text.indexOf("#EXT-X-ENDLIST")).trim(); + let murls = []; + let m3_body_list = m3u8_body.split("\n"); + let m3_len = m3_body_list.length; + let i = 0; + while (i < m3_len) { + let mi = m3_body_list[i]; + let mi_1 = m3_body_list[i + 1]; + if (mi.startsWith("#EXTINF")) { + murls.push([mi, mi_1].join("&")); + i += 2 + } else if (mi.startsWith("#EXT-X-DISCONTINUITY")) { + let mi_2 = m3_body_list[i + 2]; + murls.push([mi, mi_1, mi_2].join("&")); + i += 3 + } else { + break + } + } + let new_m3u8_body = []; + for (let murl of murls) { + if (ad_remove && new RegExp(ad_remove).test(murl)) {} else { + let murl_list = murl.split("&"); + if (!murl_list[murl_list.length - 1].startsWith("http") && m3u8_url.startsWith("http")) { + murl_list[murl_list.length - 1] = urljoin(m3u8_url, murl_list[murl_list.length - 1]) + } + murl_list.forEach(it => { + new_m3u8_body.push(it) + }) + } + } + new_m3u8_body = new_m3u8_body.join("\n").trim(); + m3u8_text = [m3u8_start, new_m3u8_body, m3u8_end].join("\n").trim(); + return m3u8_text +} + +function fixAdM3u8Ai(m3u8_url, headers) { + let ts = (new Date).getTime(); + let option = headers ? { + headers: headers + } : {}; + + function b(s1, s2) { + let i = 0; + while (i < s1.length) { + if (s1[i] !== s2[i]) { + break + } + i++ + } + return i + } + + function reverseString(str) { + return str.split("").reverse().join("") + } + let m3u8 = request(m3u8_url, option); + m3u8 = m3u8.trim().split("\n").map(it => it.startsWith("#") ? it : urljoin(m3u8_url, it)).join("\n"); + m3u8 = m3u8.replace(/\n\n/gi, "\n"); + let last_url = m3u8.split("\n").slice(-1)[0]; + if (last_url.length < 5) { + last_url = m3u8.split("\n").slice(-2)[0] + } + if (last_url.includes(".m3u8") && last_url !== m3u8_url) { + m3u8_url = urljoin2(m3u8_url, last_url); + log("嵌套的m3u8_url:" + m3u8_url); + m3u8 = request(m3u8_url, option) + } + let s = m3u8.trim().split("\n").filter(it => it.trim()).join("\n"); + let ss = s.split("\n"); + if (m3u8_url.indexOf("ffzy") > 0) { + let j = 0, + k1 = 0, + m = 0, + n = 0, + t = 0; + let s2 = ""; + for (let i = 0; i < ss.length; i++) { + let s = ss[i]; + let s1 = ""; + if (s.startsWith("#EXTINF")) { + s1 = s.slice(8); + n++; + if (n == 1) k1 = i; + if (s2.indexOf(s1) == -1) { + s2 = s2 + s1; + m++ + } + t = t + parseFloat(s1); + i++; + s = ss[i] + } + if (s.startsWith("#EXT-X-DISCONTINUITY")) { + if (n == 5) { + log("n:" + n); + log("m:" + m); + for (let j = k1; j < k1 + n * 2; j++) { + log(ss[j]) + } + log("广告位置:" + k1); + log("数据条数:" + n); + log("数据种类:" + m); + log("广告时间:" + t.toFixed(5)); + ss.splice(k1, 2 * n + 1); + i = i - 2 * n + 1 + } + t = 0; + m = 0; + n = 0; + s2 = "" + } + } + } + let firststr = ""; + let maxl = 0; + let kk = 0; + let kkk1 = 1; + let kkk2 = 0; + let secondstr = ""; + for (let i = 0; i < ss.length; i++) { + let s = ss[i]; + if (!s.startsWith("#")) { + if (kk == 0) firststr = s; + if (kk > 0) { + if (maxl > b(firststr, s) + 1) { + if (secondstr.length < 5) secondstr = s; + kkk2++ + } else { + maxl = b(firststr, s); + kkk1++ + } + } + kk++; + if (kk >= 30) break + } + } + if (kkk2 > kkk1) firststr = secondstr; + let firststrlen = firststr.length; + let ml = Math.round(ss.length / 2).toString().length; + let maxc = 0; + let laststr = ss.toReversed().find(x => { + if (!x.startsWith("#")) { + let k = b(reverseString(firststr), reverseString(x)); + maxl = b(firststr, x); + maxc++; + if (firststrlen - maxl <= ml + k || maxc > 10) { + return true + } + } + return false + }); + log("最后一条切片:" + laststr); + let ad_urls = []; + for (let i = 0; i < ss.length; i++) { + let s = ss[i]; + if (!s.startsWith("#")) { + if (b(firststr, s) < maxl) { + ad_urls.push(s); + ss.splice(i - 1, 2); + i = i - 2 + } else { + ss[i] = urljoin(m3u8_url, s) + } + } else { + ss[i] = s.replace(/URI=\"(.*)\"/, 'URI="' + urljoin(m3u8_url, "$1") + '"') + } + } + log("处理的m3u8地址:" + m3u8_url); + log("----广告地址----"); + log(ad_urls); + m3u8 = ss.join("\n"); + log("处理耗时:" + ((new Date).getTime() - ts).toString()); + log(m3u8); + return m3u8 +} + +function forceOrder(lists, key, option) { + let start = Math.floor(lists.length / 2); + let end = Math.min(lists.length - 1, start + 1); + if (start >= end) { + return lists + } + let first = lists[start]; + let second = lists[end]; + if (key) { + try { + first = first[key]; + second = second[key] + } catch (e) {} + } + if (option && typeof option === "function") { + try { + first = option(first); + second = option(second) + } catch (e) {} + } + first += ""; + second += ""; + if (first.match(/(\d+)/) && second.match(/(\d+)/)) { + let num1 = Number(first.match(/(\d+)/)[1]); + let num2 = Number(second.match(/(\d+)/)[1]); + if (num1 > num2) { + lists.reverse() + } + } + return lists +} +let VODS = []; +let VOD = {}; +let TABS = []; +let LISTS = []; + +function getQuery(url) { + try { + if (url.indexOf("?") > -1) { + url = url.slice(url.indexOf("?") + 1) + } + let arr = url.split("#")[0].split("&"); + const resObj = {}; + arr.forEach(item => { + let arr1 = item.split("="); + let key = arr1[0]; + let value = arr1.slice(1).join("="); + resObj[key] = value + }); + return resObj + } catch (err) { + log(`getQuery发生错误:${e.message}`); + return {} + } +} + +function urljoin(fromPath, nowPath) { + fromPath = fromPath || ""; + nowPath = nowPath || ""; + return joinUrl(fromPath, nowPath) +} +var urljoin2 = urljoin; +const defaultParser = { + pdfh: pdfh, + pdfa: pdfa, + pd: pd +}; + +function pdfh2(html, parse) { + let html2 = html; + try { + if (typeof html !== "string") { + html2 = html.rr(html.ele).toString() + } + } catch (e) { + print(`html对象转文本发生了错误:${e.message}`) + } + let result = defaultParser.pdfh(html2, parse); + let option = parse.includes("&&") ? parse.split("&&").slice(-1)[0] : parse.split(" ").slice(-1)[0]; + if (/style/.test(option.toLowerCase()) && /url\(/.test(result)) { + try { + result = result.match(/url\((.*?)\)/)[1]; + result = result.replace(/^['|"](.*)['|"]$/, "$1") + } catch (e) {} + } + return result +} + +function pdfa2(html, parse) { + let html2 = html; + try { + if (typeof html !== "string") { + html2 = html.rr(html.ele).toString() + } + } catch (e) { + print(`html对象转文本发生了错误:${e.message}`) + } + return defaultParser.pdfa(html2, parse) +} + +function pd2(html, parse, uri) { + let ret = pdfh2(html, parse); + if (typeof uri === "undefined" || !uri) { + uri = "" + } + if (DOM_CHECK_ATTR.test(parse) && !SPECIAL_URL.test(ret)) { + if (/http/.test(ret)) { + ret = ret.slice(ret.indexOf("http")) + } else { + ret = urljoin(MY_URL, ret) + } + } + return ret +} +const parseTags = { + jsp: { + pdfh: pdfh2, + pdfa: pdfa2, + pd: pd2 + }, + json: { + pdfh(html, parse) { + if (!parse || !parse.trim()) { + return "" + } + if (typeof html === "string") { + html = JSON.parse(html) + } + parse = parse.trim(); + if (!parse.startsWith("$.")) { + parse = "$." + parse + } + parse = parse.split("||"); + for (let ps of parse) { + let ret = cheerio.jp(ps, html); + if (Array.isArray(ret)) { + ret = ret[0] || "" + } else { + ret = ret || "" + } + if (ret && typeof ret !== "string") { + ret = ret.toString() + } + if (ret) { + return ret + } + } + return "" + }, + pdfa(html, parse) { + if (!parse || !parse.trim()) { + return "" + } + if (typeof html === "string") { + html = JSON.parse(html) + } + parse = parse.trim(); + if (!parse.startsWith("$.")) { + parse = "$." + parse + } + let ret = cheerio.jp(parse, html); + if (Array.isArray(ret) && Array.isArray(ret[0]) && ret.length === 1) { + return ret[0] || [] + } + return ret || [] + }, + pd(html, parse) { + let ret = parseTags.json.pdfh(html, parse); + if (ret) { + return urljoin(MY_URL, ret) + } + return ret + } + }, + jq: { + pdfh(html, parse) { + if (!html || !parse || !parse.trim()) { + return "" + } + parse = parse.trim(); + let result = defaultParser.pdfh(html, parse); + return result + }, + pdfa(html, parse) { + if (!html || !parse || !parse.trim()) { + return [] + } + parse = parse.trim(); + let result = defaultParser.pdfa(html, parse); + print(`pdfa解析${parse}=>${result.length}`); + return result + }, + pd(html, parse, base_url) { + if (!html || !parse || !parse.trim()) { + return "" + } + parse = parse.trim(); + base_url = base_url || MY_URL; + return defaultParser.pd(html, parse, base_url) + } + }, + getParse(p0) { + if (p0.startsWith("jsp:")) { + return this.jsp + } else if (p0.startsWith("json:")) { + return this.json + } else if (p0.startsWith("jq:")) { + return this.jq + } else { + return this.jq + } + } +}; +const stringify = JSON.stringify; +const jsp = parseTags.jsp; +const jq = parseTags.jq; + +function readFile(filePath) { + filePath = filePath || "./uri.min.js"; + var fd = os.open(filePath); + var buffer = new ArrayBuffer(1024); + var len = os.read(fd, buffer, 0, 1024); + console.log(len); + let text = String.fromCharCode.apply(null, new Uint8Array(buffer)); + console.log(text); + return text +} + +function dealJson(html) { + try { + html = html.trim(); + if (!(html.startsWith("{") && html.endsWith("}") || html.startsWith("[") && html.endsWith("]"))) { + html = "{" + html.match(/.*?\{(.*)\}/m)[1] + "}" + } + } catch (e) {} + try { + html = JSON.parse(html) + } catch (e) {} + return html +} +var OcrApi = { + api: OCR_API, + classification: function(img) { + let code = ""; + try { + log("通过drpy_ocr验证码接口过验证..."); + let html = ""; + if (this.api.endsWith("drpy/text")) { + html = request(this.api, { + data: { + img: img + }, + headers: { + "User-Agent": PC_UA + }, + method: "POST" + }, true) + } else { + html = post(this.api, { + body: img + }) + } + code = html || "" + } catch (e) { + log(`OCR识别验证码发生错误:${e.message}`) + } + return code + } +}; + +function verifyCode(url) { + let cnt = 0; + let host = getHome(url); + let cookie = ""; + while (cnt < OCR_RETRY) { + try { + let yzm_url = `${host}/index.php/verify/index.html`; + console.log(`验证码链接:${yzm_url}`); + let hhtml = request(yzm_url, { + withHeaders: true, + toBase64: true + }, true); + let json = JSON.parse(hhtml); + if (!cookie) { + let setCk = Object.keys(json).find(it => it.toLowerCase() === "set-cookie"); + cookie = setCk ? json[setCk].split(";")[0] : "" + } + console.log("cookie:" + cookie); + let img = json.body; + let code = OcrApi.classification(img); + console.log(`第${cnt+1}次验证码识别结果:${code}`); + let submit_url = `${host}/index.php/ajax/verify_check?type=search&verify=${code}`; + console.log(submit_url); + let html = request(submit_url, { + headers: { + Cookie: cookie + }, + method: "POST" + }); + html = JSON.parse(html); + if (html.msg === "ok") { + console.log(`第${cnt+1}次验证码提交成功`); + return cookie + } else if (html.msg !== "ok" && cnt + 1 >= OCR_RETRY) { + cookie = "" + } + } catch (e) { + console.log(`第${cnt+1}次验证码提交失败:${e.message}`); + if (cnt + 1 >= OCR_RETRY) { + cookie = "" + } + } + cnt += 1 + } + return cookie +} + +function setItem(k, v) { + local.set(RKEY, k, v); + console.log(`规则${RKEY}设置${k} => ${v}`) +} + +function getItem(k, v) { + return local.get(RKEY, k) || v +} + +function clearItem(k) { + local.delete(RKEY, k) +} + +function getHome(url) { + if (!url) { + return "" + } + let tmp = url.split("//"); + url = tmp[0] + "//" + tmp[1].split("/")[0]; + try { + url = decodeURIComponent(url) + } catch (e) {} + return url +} + +function buildUrl(url, obj) { + obj = obj || {}; + if (url.indexOf("?") < 0) { + url += "?" + } + let param_list = []; + let keys = Object.keys(obj); + keys.forEach(it => { + param_list.push(it + "=" + obj[it]) + }); + let prs = param_list.join("&"); + if (keys.length > 0 && !url.endsWith("?")) { + url += "&" + } + url += prs; + return url +} + +function $require(url) { + eval(request(url)) +} + +function keysToLowerCase(obj) { + return Object.keys(obj).reduce((result, key) => { + const newKey = key.toLowerCase(); + result[newKey] = obj[key]; + return result + }, {}) +} + +function buildQueryString(params) { + const queryArray = []; + for (const key in params) { + if (params.hasOwnProperty(key)) { + let value = params[key]; + if (value === undefined || value === null) { + value = "" + } else { + value = value.toString() + } + const encodedKey = encodeURIComponent(key); + const encodedValue = encodeURIComponent(value); + queryArray.push(encodedKey + "=" + encodedValue) + } + } + return queryArray.join("&") +} + +function parseQueryString(query) { + const params = {}; + query.split("&").forEach(function(part) { + const regex = /^(.*?)=(.*)/; + const match = part.match(regex); + if (match) { + const key = decodeURIComponent(match[1]); + const value = decodeURIComponent(match[2]); + params[key] = value + } + }); + return params +} + +function encodeIfContainsSpecialChars(value) { + const specialChars = ":/?#[]@!$'()*+,;=%"; + if (specialChars.split("").some(char => value.includes(char))) { + return encodeURIComponent(value) + } + return value +} + +function objectToQueryString(obj) { + const encoded = []; + for (let key in obj) { + if (obj.hasOwnProperty(key)) { + encoded.push(encodeURIComponent(key) + "=" + encodeIfContainsSpecialChars(obj[key])) + } + } + return encoded.join("&") +} + +function request(url, obj, ocr_flag) { + ocr_flag = ocr_flag || false; + if (typeof obj === "undefined" || !obj || obj === {}) { + if (!fetch_params || !fetch_params.headers) { + let headers = { + "User-Agent": MOBILE_UA + }; + if (rule.headers) { + Object.assign(headers, rule.headers) + } + if (!fetch_params) { + fetch_params = {} + } + fetch_params.headers = headers + } + if (!fetch_params.headers.Referer) { + fetch_params.headers.Referer = getHome(url) + } + obj = fetch_params + } else { + let headers = obj.headers || {}; + let keys = Object.keys(headers).map(it => it.toLowerCase()); + if (!keys.includes("user-agent")) { + headers["User-Agent"] = MOBILE_UA; + if (typeof fetch_params === "object" && fetch_params && fetch_params.headers) { + let fetch_headers = keysToLowerCase(fetch_params.headers); + if (fetch_headers["user-agent"]) { + headers["User-Agent"] = fetch_headers["user-agent"] + } + } + } + if (!keys.includes("referer")) { + headers["Referer"] = getHome(url) + } + obj.headers = headers + } + if (rule.encoding && rule.encoding !== "utf-8" && !ocr_flag) { + if (!obj.headers.hasOwnProperty("Content-Type") && !obj.headers.hasOwnProperty("content-type")) { + obj.headers["Content-Type"] = "text/html; charset=" + rule.encoding + } + } + if (typeof obj.body != "undefined" && obj.body && typeof obj.body === "string") { + if (!obj.headers.hasOwnProperty("Content-Type") && !obj.headers.hasOwnProperty("content-type")) { + obj.headers["Content-Type"] = "application/x-www-form-urlencoded; charset=" + rule.encoding + } + } else if (typeof obj.body != "undefined" && obj.body && typeof obj.body === "object") { + obj.data = obj.body; + delete obj.body + } + if (!url) { + return obj.withHeaders ? "{}" : "" + } + if (obj.toBase64) { + obj.buffer = 2; + delete obj.toBase64 + } + if (obj.redirect === false) { + obj.redirect = 0 + } + if (obj.headers.hasOwnProperty("Content-Type") || obj.headers.hasOwnProperty("content-type")) { + let _contentType = obj.headers["Content-Type"] || obj.headers["content-type"] || ""; + if (_contentType.includes("application/x-www-form-urlencoded")) { + log("custom body is application/x-www-form-urlencoded"); + if (typeof obj.body == "string") { + let temp_obj = parseQueryString(obj.body); + console.log(JSON.stringify(temp_obj)) + } + } + } + console.log(JSON.stringify(obj.headers)); + console.log("request:" + url + `|method:${obj.method||"GET"}|body:${obj.body||""}`); + let res = req(url, obj); + let html = res.content || ""; + if (obj.withHeaders) { + let htmlWithHeaders = res.headers; + htmlWithHeaders.body = html; + return JSON.stringify(htmlWithHeaders) + } else { + return html + } +} + +function post(url, obj) { + obj = obj || {}; + obj.method = "POST"; + return request(url, obj) +} + +function reqCookie(url, obj, all_cookie) { + obj = obj || {}; + obj.withHeaders = true; + all_cookie = all_cookie || false; + let html = request(url, obj); + let json = JSON.parse(html); + let setCk = Object.keys(json).find(it => it.toLowerCase() === "set-cookie"); + let cookie = setCk ? json[setCk] : ""; + if (Array.isArray(cookie)) { + cookie = cookie.join(";") + } + if (!all_cookie) { + cookie = cookie.split(";")[0] + } + html = json.body; + return { + cookie: cookie, + html: html + } +} +fetch = request; +print = function(data) { + data = data || ""; + if (typeof data == "object" && Object.keys(data).length > 0) { + try { + data = JSON.stringify(data); + console.log(data) + } catch (e) { + console.log(typeof data + ":" + data.length); + return + } + } else if (typeof data == "object" && Object.keys(data).length < 1) { + console.log("null object") + } else { + console.log(data) + } +}; +log = print; + +function checkHtml(html, url, obj) { + if (/\?btwaf=/.test(html)) { + let btwaf = html.match(/btwaf(.*?)"/)[1]; + url = url.split("#")[0] + "?btwaf" + btwaf; + print("宝塔验证访问链接:" + url); + html = request(url, obj) + } + return html +} + +function getCode(url, obj) { + let html = request(url, obj); + html = checkHtml(html, url, obj); + return html +} + +function getHtml(url) { + let obj = {}; + if (rule.headers) { + obj.headers = rule.headers + } + let cookie = getItem(RULE_CK, ""); + if (cookie) { + if (obj.headers && !Object.keys(obj.headers).map(it => it.toLowerCase()).includes("cookie")) { + log("历史无cookie,新增过验证后的cookie"); + obj.headers["Cookie"] = cookie + } else if (obj.headers && obj.headers.cookie && obj.headers.cookie !== cookie) { + obj.headers["Cookie"] = cookie; + log("历史有小写过期的cookie,更新过验证后的cookie") + } else if (obj.headers && obj.headers.Cookie && obj.headers.Cookie !== cookie) { + obj.headers["Cookie"] = cookie; + log("历史有大写过期的cookie,更新过验证后的cookie") + } else if (!obj.headers) { + obj.headers = { + Cookie: cookie + }; + log("历史无headers,更新过验证后的含cookie的headers") + } + } + let html = getCode(url, obj); + return html +} + +function homeParse(homeObj) { + fetch_params = JSON.parse(JSON.stringify(rule_fetch_params)); + let classes = []; + if (homeObj.class_name && homeObj.class_url) { + let names = homeObj.class_name.split("&"); + let urls = homeObj.class_url.split("&"); + let cnt = Math.min(names.length, urls.length); + for (let i = 0; i < cnt; i++) { + classes.push({ + type_id: urls[i], + type_name: names[i] + }) + } + } + if (homeObj.class_parse) { + if (homeObj.class_parse.startsWith("js:")) { + var input = homeObj.MY_URL; + try { + eval(homeObj.class_parse.replace("js:", "")); + if (Array.isArray(input)) { + classes = input + } + } catch (e) { + log(`通过js动态获取分类发生了错误:${e.message}`) + } + } else { + let p = homeObj.class_parse.split(";"); + let p0 = p[0]; + let _ps = parseTags.getParse(p0); + let is_json = p0.startsWith("json:"); + _pdfa = _ps.pdfa; + _pdfh = _ps.pdfh; + _pd = _ps.pd; + MY_URL = rule.url; + if (is_json) { + try { + let cms_cate_url = homeObj.MY_URL.replace("ac=detail", "ac=list"); + let html = homeObj.home_html || getHtml(cms_cate_url); + if (html) { + if (cms_cate_url === homeObj.MY_URL) { + homeHtmlCache = html + } + let list = _pdfa(html, p0.replace("json:", "")); + if (list && list.length > 0) { + classes = list + } + } + } catch (e) { + console.log(e.message) + } + } else if (p.length >= 3 && !is_json) { + try { + let html = homeObj.home_html || getHtml(homeObj.MY_URL); + if (html) { + homeHtmlCache = html; + let list = _pdfa(html, p0); + if (list && list.length > 0) { + list.forEach((it, idex) => { + try { + let name = _pdfh(it, p[1]); + if (homeObj.cate_exclude && new RegExp(homeObj.cate_exclude).test(name)) { + return + } + let url = _pd(it, p[2]); + if (p.length > 3 && p[3] && !homeObj.home_html) { + let exp = new RegExp(p[3]); + url = url.match(exp)[1] + } + classes.push({ + type_id: url.trim(), + type_name: name.trim() + }) + } catch (e) { + console.log(`分类列表定位第${idex}个元素正常报错:${e.message}`) + } + }) + } + } + } catch (e) { + console.log(e.message) + } + } + } + } + classes = classes.filter(it => !homeObj.cate_exclude || !new RegExp(homeObj.cate_exclude).test(it.type_name)); + let resp = { + class: classes + }; + if (homeObj.filter) { + resp.filters = homeObj.filter + } + console.log(JSON.stringify(resp)); + return JSON.stringify(resp) +} + +function getPP(p, pn, pp, ppn) { + try { + let ps = p[pn] === "*" && pp.length > ppn ? pp[ppn] : p[pn]; + return ps + } catch (e) { + return "" + } +} + +function homeVodParse(homeVodObj) { + fetch_params = JSON.parse(JSON.stringify(rule_fetch_params)); + let d = []; + MY_URL = homeVodObj.homeUrl; + console.log(MY_URL); + let t1 = (new Date).getTime(); + let p = homeVodObj.推荐; + print("p:" + p); + if (p === "*" && rule.一级) { + p = rule.一级; + homeVodObj.double = false + } + if (!p || typeof p !== "string") { + return "{}" + } + p = p.trim(); + let pp = rule.一级 ? rule.一级.split(";") : []; + if (p.startsWith("js:")) { + const TYPE = "home"; + var input = MY_URL; + HOST = rule.host; + eval(p.replace("js:", "")); + d = VODS + } else { + p = p.split(";"); + if (!homeVodObj.double && p.length < 5) { + return "{}" + } else if (homeVodObj.double && p.length < 6) { + return "{}" + } + let p0 = getPP(p, 0, pp, 0); + let _ps = parseTags.getParse(p0); + _pdfa = _ps.pdfa; + _pdfh = _ps.pdfh; + _pd = _ps.pd; + let is_json = p0.startsWith("json:"); + p0 = p0.replace(/^(jsp:|json:|jq:)/, ""); + let html = homeHtmlCache || getHtml(MY_URL); + homeHtmlCache = undefined; + if (is_json) { + html = dealJson(html) + } + try { + console.log("double:" + homeVodObj.double); + if (homeVodObj.double) { + let items = _pdfa(html, p0); + let p1 = getPP(p, 1, pp, 0); + let p2 = getPP(p, 2, pp, 1); + let p3 = getPP(p, 3, pp, 2); + let p4 = getPP(p, 4, pp, 3); + let p5 = getPP(p, 5, pp, 4); + let p6 = getPP(p, 6, pp, 5); + for (let item of items) { + let items2 = _pdfa(item, p1); + for (let item2 of items2) { + try { + let title = _pdfh(item2, p2); + let img = ""; + try { + img = _pd(item2, p3) + } catch (e) {} + let desc = ""; + try { + desc = _pdfh(item2, p4) + } catch (e) {} + let links = []; + for (let _p5 of p5.split("+")) { + let link = !homeVodObj.detailUrl ? _pd(item2, _p5, MY_URL) : _pdfh(item2, _p5); + links.push(link) + } + let content; + if (p.length > 6 && p[6]) { + content = _pdfh(item2, p6) + } else { + content = "" + } + let vid = links.join("$"); + if (rule.二级 === "*") { + vid = vid + "@@" + title + "@@" + img + } + let vod = { + vod_name: title, + vod_pic: img, + vod_remarks: desc, + vod_content: content, + vod_id: vid + }; + d.push(vod) + } catch (e) { + console.log(`首页列表双层定位处理发生错误:${e.message}`) + } + } + } + } else { + let items = _pdfa(html, p0); + let p1 = getPP(p, 1, pp, 1); + let p2 = getPP(p, 2, pp, 2); + let p3 = getPP(p, 3, pp, 3); + let p4 = getPP(p, 4, pp, 4); + let p5 = getPP(p, 5, pp, 5); + for (let item of items) { + try { + let title = _pdfh(item, p1); + let img = ""; + try { + img = _pd(item, p2, MY_URL) + } catch (e) {} + let desc = ""; + try { + desc = _pdfh(item, p3) + } catch (e) {} + let links = []; + for (let _p5 of p4.split("+")) { + let link = !homeVodObj.detailUrl ? _pd(item, _p5, MY_URL) : _pdfh(item, _p5); + links.push(link) + } + let content; + if (p.length > 5 && p[5]) { + content = _pdfh(item, p5) + } else { + content = "" + } + let vid = links.join("$"); + if (rule.二级 === "*") { + vid = vid + "@@" + title + "@@" + img + } + let vod = { + vod_name: title, + vod_pic: img, + vod_remarks: desc, + vod_content: content, + vod_id: vid + }; + d.push(vod) + } catch (e) { + console.log(`首页列表单层定位处理发生错误:${e.message}`) + } + } + } + } catch (e) {} + } + let t2 = (new Date).getTime(); + console.log("加载首页推荐耗时:" + (t2 - t1) + "毫秒"); + if (rule.图片替换) { + if (rule.图片替换.startsWith("js:")) { + d.forEach(it => { + try { + var input = it.vod_pic; + eval(rule.图片替换.trim().replace("js:", "")); + it.vod_pic = input + } catch (e) { + log(`图片:${it.vod_pic}替换错误:${e.message}`) + } + }) + } else if (rule.图片替换.includes("=>")) { + let replace_from = rule.图片替换.split("=>")[0]; + let replace_to = rule.图片替换.split("=>")[1]; + d.forEach(it => { + if (it.vod_pic && it.vod_pic.startsWith("http")) { + it.vod_pic = it.vod_pic.replace(replace_from, replace_to) + } + }) + } + } + if (rule.图片来源) { + d.forEach(it => { + if (it.vod_pic && it.vod_pic.startsWith("http")) { + it.vod_pic = it.vod_pic + rule.图片来源 + } + }) + } + if (d.length > 0) { + print(d.slice(0, 2)) + } + return JSON.stringify({ + list: d + }) +} + +function categoryParse(cateObj) { + fetch_params = JSON.parse(JSON.stringify(rule_fetch_params)); + let p = cateObj.一级; + if (!p || typeof p !== "string") { + return "{}" + } + let d = []; + let url = cateObj.url.replaceAll("fyclass", cateObj.tid); + if (cateObj.pg === 1 && url.includes("[") && url.includes("]")) { + url = url.split("[")[1].split("]")[0] + } else if (cateObj.pg > 1 && url.includes("[") && url.includes("]")) { + url = url.split("[")[0] + } + if (rule.filter_url) { + if (!/fyfilter/.test(url)) { + if (!url.endsWith("&") && !rule.filter_url.startsWith("&")) { + url += "&" + } + url += rule.filter_url + } else { + url = url.replace("fyfilter", rule.filter_url) + } + url = url.replaceAll("fyclass", cateObj.tid); + let fl = cateObj.filter ? cateObj.extend : {}; + if (rule.filter_def && typeof rule.filter_def === "object") { + try { + if (Object.keys(rule.filter_def).length > 0 && rule.filter_def.hasOwnProperty(cateObj.tid)) { + let self_fl_def = rule.filter_def[cateObj.tid]; + if (self_fl_def && typeof self_fl_def === "object") { + let fl_def = JSON.parse(JSON.stringify(self_fl_def)); + fl = Object.assign(fl_def, fl) + } + } + } catch (e) { + print(`合并不同分类对应的默认筛选出错:${e.message}`) + } + } + let new_url; + new_url = cheerio.jinja2(url, { + fl: fl, + fyclass: cateObj.tid + }); + url = new_url + } + if (/fypage/.test(url)) { + if (url.includes("(") && url.includes(")")) { + let url_rep = url.match(/.*?\((.*)\)/)[1]; + let cnt_page = url_rep.replaceAll("fypage", cateObj.pg); + let cnt_pg = eval(cnt_page); + url = url.replaceAll(url_rep, cnt_pg).replaceAll("(", "").replaceAll(")", "") + } else { + url = url.replaceAll("fypage", cateObj.pg) + } + } + MY_URL = url; + console.log(MY_URL); + p = p.trim(); + const MY_CATE = cateObj.tid; + if (p.startsWith("js:")) { + var MY_FL = cateObj.extend; + const TYPE = "cate"; + var input = MY_URL; + const MY_PAGE = cateObj.pg; + var desc = ""; + eval(p.trim().replace("js:", "")); + d = VODS + } else { + p = p.split(";"); + if (p.length < 5) { + return "{}" + } + let _ps = parseTags.getParse(p[0]); + _pdfa = _ps.pdfa; + _pdfh = _ps.pdfh; + _pd = _ps.pd; + let is_json = p[0].startsWith("json:"); + p[0] = p[0].replace(/^(jsp:|json:|jq:)/, ""); + try { + let html = getHtml(MY_URL); + if (html) { + if (is_json) { + html = dealJson(html) + } + let list = _pdfa(html, p[0]); + list.forEach(it => { + let links = p[4].split("+").map(p4 => { + return !rule.detailUrl ? _pd(it, p4, MY_URL) : _pdfh(it, p4) + }); + let link = links.join("$"); + let vod_id = rule.detailUrl ? MY_CATE + "$" + link : link; + let vod_name = _pdfh(it, p[1]).replace(/\n|\t/g, "").trim(); + let vod_pic = _pd(it, p[2], MY_URL); + if (rule.二级 === "*") { + vod_id = vod_id + "@@" + vod_name + "@@" + vod_pic + } + d.push({ + vod_id: vod_id, + vod_name: vod_name, + vod_pic: vod_pic, + vod_remarks: _pdfh(it, p[3]).replace(/\n|\t/g, "").trim() + }) + }) + } + } catch (e) { + console.log(e.message) + } + } + if (rule.图片替换) { + if (rule.图片替换.startsWith("js:")) { + d.forEach(it => { + try { + var input = it.vod_pic; + eval(rule.图片替换.trim().replace("js:", "")); + it.vod_pic = input + } catch (e) { + log(`图片:${it.vod_pic}替换错误:${e.message}`) + } + }) + } else if (rule.图片替换.includes("=>")) { + let replace_from = rule.图片替换.split("=>")[0]; + let replace_to = rule.图片替换.split("=>")[1]; + d.forEach(it => { + if (it.vod_pic && it.vod_pic.startsWith("http")) { + it.vod_pic = it.vod_pic.replace(replace_from, replace_to) + } + }) + } + } + if (rule.图片来源) { + d.forEach(it => { + if (it.vod_pic && it.vod_pic.startsWith("http")) { + it.vod_pic = it.vod_pic + rule.图片来源 + } + }) + } + if (d.length > 0) { + print(d.slice(0, 2)) + } + let pagecount = 0; + if (rule.pagecount && typeof rule.pagecount === "object" && rule.pagecount.hasOwnProperty(MY_CATE)) { + print(`MY_CATE:${MY_CATE},pagecount:${JSON.stringify(rule.pagecount)}`); + pagecount = parseInt(rule.pagecount[MY_CATE]) + } + let nodata = { + list: [{ + vod_name: "无数据,防无限请求", + vod_id: "no_data", + vod_remarks: "不要点,会崩的", + vod_pic: "https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/404.jpg" + }], + total: 1, + pagecount: 1, + page: 1, + limit: 1 + }; + let vod = d.length < 1 ? JSON.stringify(nodata) : JSON.stringify({ + page: parseInt(cateObj.pg), + pagecount: pagecount || 999, + limit: 20, + total: 999, + list: d + }); + return vod +} + +function searchParse(searchObj) { + fetch_params = JSON.parse(JSON.stringify(rule_fetch_params)); + let d = []; + if (!searchObj.searchUrl) { + return "{}" + } + if (rule.searchNoPage && Number(searchObj.pg) > 1) { + return "{}" + } + let p = searchObj.搜索 === "*" && rule.一级 ? rule.一级 : searchObj.搜索; + if (!p || typeof p !== "string") { + return "{}" + } + p = p.trim(); + let pp = rule.一级 ? rule.一级.split(";") : []; + let url = searchObj.searchUrl.replaceAll("**", searchObj.wd); + if (searchObj.pg === 1 && url.includes("[") && url.includes("]") && !url.includes("#")) { + url = url.split("[")[1].split("]")[0] + } else if (searchObj.pg > 1 && url.includes("[") && url.includes("]") && !url.includes("#")) { + url = url.split("[")[0] + } + if (/fypage/.test(url)) { + if (url.includes("(") && url.includes(")")) { + let url_rep = url.match(/.*?\((.*)\)/)[1]; + let cnt_page = url_rep.replaceAll("fypage", searchObj.pg); + let cnt_pg = eval(cnt_page); + url = url.replaceAll(url_rep, cnt_pg).replaceAll("(", "").replaceAll(")", "") + } else { + url = url.replaceAll("fypage", searchObj.pg) + } + } + MY_URL = url; + console.log(MY_URL); + if (p.startsWith("js:")) { + const TYPE = "search"; + const MY_PAGE = searchObj.pg; + const KEY = searchObj.wd; + var input = MY_URL; + var detailUrl = rule.detailUrl || ""; + eval(p.trim().replace("js:", "")); + d = VODS + } else { + p = p.split(";"); + if (p.length < 5) { + return "{}" + } + let p0 = getPP(p, 0, pp, 0); + let _ps = parseTags.getParse(p0); + _pdfa = _ps.pdfa; + _pdfh = _ps.pdfh; + _pd = _ps.pd; + let is_json = p0.startsWith("json:"); + p0 = p0.replace(/^(jsp:|json:|jq:)/, ""); + try { + let req_method = MY_URL.split(";").length > 1 ? MY_URL.split(";")[1].toLowerCase() : "get"; + let html; + if (req_method === "post") { + let rurls = MY_URL.split(";")[0].split("#"); + let rurl = rurls[0]; + let params = rurls.length > 1 ? rurls[1] : ""; + print(`post=》rurl:${rurl},params:${params}`); + let _fetch_params = JSON.parse(JSON.stringify(rule_fetch_params)); + let postData = { + body: params + }; + Object.assign(_fetch_params, postData); + html = post(rurl, _fetch_params) + } else if (req_method === "postjson") { + let rurls = MY_URL.split(";")[0].split("#"); + let rurl = rurls[0]; + let params = rurls.length > 1 ? rurls[1] : ""; + print(`postjson-》rurl:${rurl},params:${params}`); + try { + params = JSON.parse(params) + } catch (e) { + params = "{}" + } + let _fetch_params = JSON.parse(JSON.stringify(rule_fetch_params)); + let postData = { + body: params + }; + Object.assign(_fetch_params, postData); + html = post(rurl, _fetch_params) + } else { + html = getHtml(MY_URL) + } + if (html) { + let search_tag = rule.搜索验证标识 || "系统安全验证|输入验证码"; + if (new RegExp(search_tag).test(html)) { + let cookie = verifyCode(MY_URL); + if (cookie) { + console.log(`本次成功过验证,cookie:${cookie}`); + setItem(RULE_CK, cookie) + } else { + console.log(`本次自动过搜索验证失败,cookie:${cookie}`) + } + html = getHtml(MY_URL) + } + if (!html.includes(searchObj.wd)) { + console.log("搜索结果源码未包含关键字,疑似搜索失败,正为您打印结果源码"); + console.log(html) + } + if (is_json) { + html = dealJson(html) + } + let list = _pdfa(html, p0); + let p1 = getPP(p, 1, pp, 1); + let p2 = getPP(p, 2, pp, 2); + let p3 = getPP(p, 3, pp, 3); + let p4 = getPP(p, 4, pp, 4); + let p5 = getPP(p, 5, pp, 5); + list.forEach(it => { + let links = p4.split("+").map(_p4 => { + return !rule.detailUrl ? _pd(it, _p4, MY_URL) : _pdfh(it, _p4) + }); + let link = links.join("$"); + let content; + if (p.length > 5 && p[5]) { + content = _pdfh(it, p5) + } else { + content = "" + } + let vod_id = link; + let vod_name = _pdfh(it, p1).replace(/\n|\t/g, "").trim(); + let vod_pic = _pd(it, p2, MY_URL); + if (rule.二级 === "*") { + vod_id = vod_id + "@@" + vod_name + "@@" + vod_pic + } + let ob = { + vod_id: vod_id, + vod_name: vod_name, + vod_pic: vod_pic, + vod_remarks: _pdfh(it, p3).replace(/\n|\t/g, "").trim(), + vod_content: content.replace(/\n|\t/g, "").trim() + }; + d.push(ob) + }) + } + } catch (e) { + print(`搜索发生错误:${e.message}`); + return "{}" + } + } + if (rule.图片替换) { + if (rule.图片替换.startsWith("js:")) { + d.forEach(it => { + try { + var input = it.vod_pic; + eval(rule.图片替换.trim().replace("js:", "")); + it.vod_pic = input + } catch (e) { + log(`图片:${it.vod_pic}替换错误:${e.message}`) + } + }) + } else if (rule.图片替换.includes("=>")) { + let replace_from = rule.图片替换.split("=>")[0]; + let replace_to = rule.图片替换.split("=>")[1]; + d.forEach(it => { + if (it.vod_pic && it.vod_pic.startsWith("http")) { + it.vod_pic = it.vod_pic.replace(replace_from, replace_to) + } + }) + } + } + if (rule.图片来源) { + d.forEach(it => { + if (it.vod_pic && it.vod_pic.startsWith("http")) { + it.vod_pic = it.vod_pic + rule.图片来源 + } + }) + } + return JSON.stringify({ + page: parseInt(searchObj.pg), + pagecount: 10, + limit: 20, + total: 100, + list: d + }) +} + +function detailParse(detailObj) { + let t1 = (new Date).getTime(); + fetch_params = JSON.parse(JSON.stringify(rule_fetch_params)); + let orId = detailObj.orId; + let vod_name = "片名"; + let vod_pic = ""; + let vod_id = orId; + if (rule.二级 === "*") { + let extra = orId.split("@@"); + vod_name = extra.length > 1 ? extra[1] : vod_name; + vod_pic = extra.length > 2 ? extra[2] : vod_pic + } + let vod = { + vod_id: vod_id, + vod_name: vod_name, + vod_pic: vod_pic, + type_name: "类型", + vod_year: "年份", + vod_area: "地区", + vod_remarks: "更新信息", + vod_actor: "主演", + vod_director: "导演", + vod_content: "简介" + }; + let p = detailObj.二级; + let url = detailObj.url; + let detailUrl = detailObj.detailUrl; + let fyclass = detailObj.fyclass; + let tab_exclude = detailObj.tab_exclude; + let html = detailObj.html || ""; + MY_URL = url; + if (detailObj.二级访问前) { + try { + print(`尝试在二级访问前执行代码:${detailObj.二级访问前}`); + eval(detailObj.二级访问前.trim().replace("js:", "")) + } catch (e) { + print(`二级访问前执行代码出现错误:${e.message}`) + } + } + if (p === "*") { + vod.vod_play_from = "在线播放"; + vod.vod_remarks = detailUrl; + vod.vod_actor = "没有二级,只有一级链接直接嗅探播放"; + vod.vod_content = MY_URL; + vod.vod_play_url = "嗅探播放$" + MY_URL.split("@@")[0] + } else if (typeof p === "string" && p.trim().startsWith("js:")) { + const TYPE = "detail"; + var input = MY_URL; + var play_url = ""; + eval(p.trim().replace("js:", "")); + vod = VOD; + console.log(JSON.stringify(vod)) + } else if (p && typeof p === "object") { + let tt1 = (new Date).getTime(); + if (!html) { + html = getHtml(MY_URL) + } + print(`二级${MY_URL}仅获取源码耗时:${(new Date).getTime()-tt1}毫秒`); + let _ps; + if (p.is_json) { + print("二级是json"); + _ps = parseTags.json; + html = dealJson(html) + } else if (p.is_jsp) { + print("二级是jsp"); + _ps = parseTags.jsp + } else if (p.is_jq) { + print("二级是jq"); + _ps = parseTags.jq + } else { + print("二级默认jq"); + _ps = parseTags.jq + } + let tt2 = (new Date).getTime(); + print(`二级${MY_URL}获取并装载源码耗时:${tt2-tt1}毫秒`); + _pdfa = _ps.pdfa; + _pdfh = _ps.pdfh; + _pd = _ps.pd; + if (p.title) { + let p1 = p.title.split(";"); + vod.vod_name = _pdfh(html, p1[0]).replace(/\n|\t/g, "").trim(); + let type_name = p1.length > 1 ? _pdfh(html, p1[1]).replace(/\n|\t/g, "").replace(/ /g, "").trim() : ""; + vod.type_name = type_name || vod.type_name + } + if (p.desc) { + try { + let p1 = p.desc.split(";"); + vod.vod_remarks = _pdfh(html, p1[0]).replace(/\n|\t/g, "").trim(); + vod.vod_year = p1.length > 1 ? _pdfh(html, p1[1]).replace(/\n|\t/g, "").trim() : ""; + vod.vod_area = p1.length > 2 ? _pdfh(html, p1[2]).replace(/\n|\t/g, "").trim() : ""; + vod.vod_actor = p1.length > 3 ? _pdfh(html, p1[3]).replace(/\n|\t/g, "").trim() : ""; + vod.vod_director = p1.length > 4 ? _pdfh(html, p1[4]).replace(/\n|\t/g, "").trim() : "" + } catch (e) {} + } + if (p.content) { + try { + let p1 = p.content.split(";"); + vod.vod_content = _pdfh(html, p1[0]).replace(/\n|\t/g, "").trim() + } catch (e) {} + } + if (p.img) { + try { + let p1 = p.img.split(";"); + vod.vod_pic = _pd(html, p1[0], MY_URL) + } catch (e) {} + } + let vod_play_from = "$$$"; + let playFrom = []; + if (p.重定向 && p.重定向.startsWith("js:")) { + print("开始执行重定向代码:" + p.重定向); + html = eval(p.重定向.replace("js:", "")) + } + if (p.tabs) { + if (p.tabs.startsWith("js:")) { + print("开始执行tabs代码:" + p.tabs); + var input = MY_URL; + eval(p.tabs.replace("js:", "")); + playFrom = TABS + } else { + let p_tab = p.tabs.split(";")[0]; + let vHeader = _pdfa(html, p_tab); + console.log(vHeader.length); + let tab_text = p.tab_text || "body&&Text"; + let new_map = {}; + for (let v of vHeader) { + let v_title = _pdfh(v, tab_text).trim(); + if (!v_title) { + v_title = "线路空" + } + console.log(v_title); + if (tab_exclude && new RegExp(tab_exclude).test(v_title)) { + continue + } + if (!new_map.hasOwnProperty(v_title)) { + new_map[v_title] = 1 + } else { + new_map[v_title] += 1 + } + if (new_map[v_title] > 1) { + v_title += Number(new_map[v_title] - 1) + } + playFrom.push(v_title) + } + } + console.log(JSON.stringify(playFrom)) + } else { + playFrom = ["在线播放"] + } + vod.vod_play_from = playFrom.join(vod_play_from); + let vod_play_url = "$$$"; + let vod_tab_list = []; + if (p.lists) { + if (p.lists.startsWith("js:")) { + print("开始执行lists代码:" + p.lists); + try { + var input = MY_URL; + var play_url = ""; + eval(p.lists.replace("js:", "")); + for (let i in LISTS) { + if (LISTS.hasOwnProperty(i)) { + try { + LISTS[i] = LISTS[i].map(it => it.split("$").slice(0, 2).join("$")) + } catch (e) { + print(`格式化LISTS发生错误:${e.message}`) + } + } + } + vod_play_url = LISTS.map(it => it.join("#")).join(vod_play_url) + } catch (e) { + print(`js执行lists: 发生错误:${e.message}`) + } + } else { + let list_text = p.list_text || "body&&Text"; + let list_url = p.list_url || "a&&href"; + let list_url_prefix = p.list_url_prefix || ""; + let is_tab_js = p.tabs.trim().startsWith("js:"); + for (let i = 0; i < playFrom.length; i++) { + let tab_name = playFrom[i]; + let tab_ext = p.tabs.split(";").length > 1 && !is_tab_js ? p.tabs.split(";")[1] : ""; + let p1 = p.lists.replaceAll("#idv", tab_name).replaceAll("#id", i); + tab_ext = tab_ext.replaceAll("#idv", tab_name).replaceAll("#id", i); + let tabName = tab_ext ? _pdfh(html, tab_ext) : tab_name; + console.log(tabName); + let new_vod_list = []; + let tt1 = (new Date).getTime(); + if (typeof pdfl === "function") { + new_vod_list = pdfl(html, p1, list_text, list_url, MY_URL); + if (list_url_prefix) { + new_vod_list = new_vod_list.map(it => it.split("$")[0] + "$" + list_url_prefix + it.split("$").slice(1).join("$")) + } + } else { + let vodList = []; + try { + vodList = _pdfa(html, p1); + console.log("len(vodList):" + vodList.length) + } catch (e) {} + for (let i = 0; i < vodList.length; i++) { + let it = vodList[i]; + new_vod_list.push(_pdfh(it, list_text).trim() + "$" + list_url_prefix + _pd(it, list_url, MY_URL)) + } + } + if (new_vod_list.length > 0) { + new_vod_list = forceOrder(new_vod_list, "", x => x.split("$")[0]); + console.log(`drpy影响性能代码共计列表数循环次数:${new_vod_list.length},耗时:${(new Date).getTime()-tt1}毫秒`) + } + let vlist = new_vod_list.join("#"); + vod_tab_list.push(vlist) + } + vod_play_url = vod_tab_list.join(vod_play_url) + } + } + vod.vod_play_url = vod_play_url + } + if (rule.图片替换 && rule.图片替换.includes("=>")) { + let replace_from = rule.图片替换.split("=>")[0]; + let replace_to = rule.图片替换.split("=>")[1]; + vod.vod_pic = vod.vod_pic.replace(replace_from, replace_to) + } + if (rule.图片来源 && vod.vod_pic && vod.vod_pic.startsWith("http")) { + vod.vod_pic = vod.vod_pic + rule.图片来源 + } + if (!vod.vod_id || vod_id.includes("$") && vod.vod_id !== vod_id) { + vod.vod_id = vod_id + } + let t2 = (new Date).getTime(); + console.log(`加载二级界面${MY_URL}耗时:${t2-t1}毫秒`); + try { + vod = vodDeal(vod) + } catch (e) { + console.log(`vodDeal发生错误:${e.message}`) + } + return JSON.stringify({ + list: [vod] + }) +} + +function get_tab_index(vod) { + let obj = {}; + vod.vod_play_from.split("$$$").forEach((it, index) => { + obj[it] = index + }); + return obj +} + +function vodDeal(vod) { + let vod_play_from = vod.vod_play_from.split("$$$"); + let vod_play_url = vod.vod_play_url.split("$$$"); + let tab_removed_list = vod_play_from; + let tab_ordered_list = vod_play_from; + let tab_renamed_list = vod_play_from; + let tab_list = vod_play_from; + let play_ordered_list = vod_play_url; + if (rule.tab_remove && rule.tab_remove.length > 0 || rule.tab_order && rule.tab_order.length > 0) { + let tab_index_dict = get_tab_index(vod); + if (rule.tab_remove && rule.tab_remove.length > 0) { + tab_removed_list = vod_play_from.filter(it => !rule.tab_remove.includes(it)); + tab_list = tab_removed_list + } + if (rule.tab_order && rule.tab_order.length > 0) { + let tab_order = rule.tab_order; + tab_ordered_list = tab_removed_list.sort((a, b) => { + const getOrderIndex = (tabName, orderRules) => { + for (let i = 0; i < orderRules.length; i++) { + if (tabName.includes(orderRules[i])) { + return i + } + } + return 9999 + }; + const indexA = getOrderIndex(a, tab_order); + const indexB = getOrderIndex(b, tab_order); + return indexA - indexB + }); + tab_list = tab_ordered_list + } + play_ordered_list = tab_list.map(it => vod_play_url[tab_index_dict[it]]) + } + if (rule.tab_rename && typeof rule.tab_rename === "object" & Object.keys(rule.tab_rename).length > 0) { + tab_renamed_list = tab_list.map(it => rule.tab_rename[it] || it); + tab_list = tab_renamed_list + } + vod.vod_play_from = tab_list.join("$$$"); + vod.vod_play_url = play_ordered_list.join("$$$"); + return vod +} + +function tellIsJx(url) { + try { + let is_vip = !/\.(m3u8|mp4|m4a)$/.test(url.split("?")[0]) && 是否正版(url); + return is_vip ? 1 : 0 + } catch (e) { + return 1 + } +} + +function playParse(playObj) { + fetch_params = JSON.parse(JSON.stringify(rule_fetch_params)); + MY_URL = playObj.url; + var MY_FLAG = playObj.flag; + if (!/http/.test(MY_URL)) { + try { + MY_URL = base64Decode(MY_URL) + } catch (e) {} + } + MY_URL = decodeURIComponent(MY_URL); + var input = MY_URL; + var flag = MY_FLAG; + let common_play = { + parse: SPECIAL_URL.test(input) || /^(push:)/.test(input) ? 0 : 1, + url: input, + flag: flag, + jx: tellIsJx(input) + }; + let lazy_play; + if (!rule.play_parse || !rule.lazy) { + lazy_play = common_play + } else if (rule.play_parse && rule.lazy && typeof rule.lazy === "string") { + try { + let lazy_code = rule.lazy.trim(); + if (lazy_code.startsWith("js:")) { + lazy_code = lazy_code.replace("js:", "").trim() + } + print("开始执行js免嗅=>" + lazy_code); + eval(lazy_code); + lazy_play = typeof input === "object" ? input : { + parse: SPECIAL_URL.test(input) || /^(push:)/.test(input) ? 0 : 1, + jx: tellIsJx(input), + url: input + } + } catch (e) { + print(`js免嗅错误:${e.message}`); + lazy_play = common_play + } + } else { + lazy_play = common_play + } + if (Array.isArray(rule.play_json) && rule.play_json.length > 0) { + let web_url = lazy_play.url; + for (let pjson of rule.play_json) { + if (pjson.re && (pjson.re === "*" || web_url.match(new RegExp(pjson.re)))) { + if (pjson.json && typeof pjson.json === "object") { + let base_json = pjson.json; + lazy_play = Object.assign(lazy_play, base_json); + break + } + } + } + } else if (rule.play_json && !Array.isArray(rule.play_json)) { + let base_json = { + jx: 1, + parse: 1 + }; + lazy_play = Object.assign(lazy_play, base_json) + } else if (!rule.play_json) { + let base_json = { + jx: 0, + parse: 1 + }; + lazy_play = Object.assign(lazy_play, base_json) + } + console.log(JSON.stringify(lazy_play)); + return JSON.stringify(lazy_play) +} + +function proxyParse(proxyObj) { + var input = proxyObj.params; + if (proxyObj.proxy_rule) { + log("准备执行本地代理规则:\n" + proxyObj.proxy_rule); + try { + eval(proxyObj.proxy_rule); + if (input && input !== proxyObj.params && Array.isArray(input) && input.length >= 3) { + return input + } else { + return [404, "text/plain", "Not Found"] + } + } catch (e) { + return [500, "text/plain", "代理规则错误:" + e.message] + } + } else { + return [404, "text/plain", "Not Found"] + } +} + +function isVideoParse(isVideoObj) { + var input = isVideoObj.url; + if (!isVideoObj.t) { + let re_matcher = new RegExp(isVideoObj.isVideo, "i"); + return re_matcher.test(input) + } else { + try { + eval(isVideoObj.isVideo); + if (typeof input === "boolean") { + return input + } else { + return false + } + } catch (e) { + log(`执行嗅探规则发生错误:${e.message}`); + return false + } + } +} + +function removeHeader(content, options = {}) { + const { + mode = "header-only", fileType + } = options; + const COMMENT_CONFIG = { + ".js": { + start: "/*", + end: "*/", + regex: /^\s*\/\*([\s\S]*?)\*\/\s*/, + headerRegex: /@header\(([\s\S]*?)\)/, + topCommentsRegex: /^(\s*(\/\/[^\n]*\n|\/\*[\s\S]*?\*\/)\s*)+/ + }, + ".py": { + start: '"""', + end: '"""', + regex: /^\s*"""([\s\S]*?)"""\s*/, + headerRegex: /@header\(([\s\S]*?)\)/, + topCommentsRegex: /^(\s*(#[^\n]*\n|'''[\s\S]*?'''|"""[\s\S]*?""")\s*)+/ + } + }; + if (!fileType) throw new Error("fileType option is required"); + const ext = fileType.startsWith(".") ? fileType : `.${fileType}`; + const config = COMMENT_CONFIG[ext]; + if (!config) throw new Error(`Unsupported file type: ${ext}`); + if (mode === "top-comments") { + const match = content.match(config.topCommentsRegex); + if (match) { + return content.substring(match[0].length).trim() + } + return content.trim() + } + const match = content.match(config.regex); + if (!match) return content.trim(); + let [fullComment, innerContent] = match; + if (config.headerRegex.test(innerContent)) { + innerContent = innerContent.replace(config.headerRegex, ""); + const cleanedInner = innerContent.split("\n").filter(line => line.trim().length > 0).join("\n"); + if (!cleanedInner.trim()) { + return content.replace(fullComment, "").trim() + } else { + const newComment = `${config.start}${cleanedInner}${config.end}`; + return content.replace(fullComment, newComment).trim() + } + } + return content.trim() +} + +function getOriginalJs(js_code) { + let current_match = /var rule|function|let |var |const|class Rule|async|this\./; + if (current_match.test(js_code)) { + return js_code + } + js_code = removeHeader(js_code, { + mode: "top-comments", + fileType: ".js" + }); + let rsa_private_key = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCqin/jUpqM6+fgYP/oMqj9zcdHMM0mEZXLeTyixIJWP53lzJV2N2E3OP6BBpUmq2O1a9aLnTIbADBaTulTNiOnVGoNG58umBnupnbmmF8iARbDp2mTzdMMeEgLdrfXS6Y3VvazKYALP8EhEQykQVarexR78vRq7ltY3quXx7cgI0ROfZz5Sw3UOLQJ+VoWmwIxu9AMEZLVzFDQN93hzuzs3tNyHK6xspBGB7zGbwCg+TKi0JeqPDrXxYUpAz1cQ/MO+Da0WgvkXnvrry8NQROHejdLVOAslgr6vYthH9bKbsGyNY3H+P12kcxo9RAcVveONnZbcMyxjtF5dWblaernAgMBAAECggEAGdEHlSEPFmAr5PKqKrtoi6tYDHXdyHKHC5tZy4YV+Pp+a6gxxAiUJejx1hRqBcWSPYeKne35BM9dgn5JofgjI5SKzVsuGL6bxl3ayAOu+xXRHWM9f0t8NHoM5fdd0zC3g88dX3fb01geY2QSVtcxSJpEOpNH3twgZe6naT2pgiq1S4okpkpldJPo5GYWGKMCHSLnKGyhwS76gF8bTPLoay9Jxk70uv6BDUMlA4ICENjmsYtd3oirWwLwYMEJbSFMlyJvB7hjOjR/4RpT4FPnlSsIpuRtkCYXD4jdhxGlvpXREw97UF2wwnEUnfgiZJ2FT/MWmvGGoaV/CfboLsLZuQKBgQDTNZdJrs8dbijynHZuuRwvXvwC03GDpEJO6c1tbZ1s9wjRyOZjBbQFRjDgFeWs9/T1aNBLUrgsQL9c9nzgUziXjr1Nmu52I0Mwxi13Km/q3mT+aQfdgNdu6ojsI5apQQHnN/9yMhF6sNHg63YOpH+b+1bGRCtr1XubuLlumKKscwKBgQDOtQ2lQjMtwsqJmyiyRLiUOChtvQ5XI7B2mhKCGi8kZ+WEAbNQcmThPesVzW+puER6D4Ar4hgsh9gCeuTaOzbRfZ+RLn3Aksu2WJEzfs6UrGvm6DU1INn0z/tPYRAwPX7sxoZZGxqML/z+/yQdf2DREoPdClcDa2Lmf1KpHdB+vQKBgBXFCVHz7a8n4pqXG/HvrIMJdEpKRwH9lUQS/zSPPtGzaLpOzchZFyQQBwuh1imM6Te+VPHeldMh3VeUpGxux39/m+160adlnRBS7O7CdgSsZZZ/dusS06HAFNraFDZf1/VgJTk9BeYygX+AZYu+0tReBKSs9BjKSVJUqPBIVUQXAoGBAJcZ7J6oVMcXxHxwqoAeEhtvLcaCU9BJK36XQ/5M67ceJ72mjJC6/plUbNukMAMNyyi62gO6I9exearecRpB/OGIhjNXm99Ar59dAM9228X8gGfryLFMkWcO/fNZzb6lxXmJ6b2LPY3KqpMwqRLTAU/zy+ax30eFoWdDHYa4X6e1AoGAfa8asVGOJ8GL9dlWufEeFkDEDKO9ww5GdnpN+wqLwePWqeJhWCHad7bge6SnlylJp5aZXl1+YaBTtOskC4Whq9TP2J+dNIgxsaF5EFZQJr8Xv+lY9lu0CruYOh9nTNF9x3nubxJgaSid/7yRPfAGnsJRiknB5bsrCvgsFQFjJVs="; + let decode_content = ""; + + function aes_decrypt(data) { + let key = CryptoJS.enc.Hex.parse("686A64686E780A0A0A0A0A0A0A0A0A0A"); + let iv = CryptoJS.enc.Hex.parse("647A797964730A0A0A0A0A0A0A0A0A0A"); + let encrypted = CryptoJS.AES.decrypt({ + ciphertext: CryptoJS.enc.Base64.parse(data) + }, key, { + iv: iv, + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.Pkcs7 + }).toString(CryptoJS.enc.Utf8); + return encrypted + } + let error_log = false; + + function logger(text) { + if (error_log) { + log(text) + } + } + let decode_funcs = [text => { + try { + return ungzip(text) + } catch (e) { + logger("非gzip加密"); + return "" + } + }, text => { + try { + return base64Decode(text) + } catch (e) { + logger("非b64加密"); + return "" + } + }, text => { + try { + return aes_decrypt(text) + } catch (e) { + logger("非aes加密"); + return "" + } + }, text => { + try { + return RSA.decode(text, rsa_private_key, null) + } catch (e) { + logger("非rsa加密"); + return "" + } + }]; + let func_index = 0; + while (!current_match.test(decode_content)) { + decode_content = decode_funcs[func_index](js_code); + func_index++; + if (func_index >= decode_funcs.length) { + break + } + } + return decode_content +} + +function runMain(main_func_code, arg) { + let mainFunc = function() { + return "" + }; + try { + eval(main_func_code + "\nmainFunc=main;"); + return mainFunc(arg) + } catch (e) { + log(`执行main_funct发生了错误:${e.message}`); + return "" + } +} + +function init(ext) { + console.log("init"); + rule = {}; + rule_fetch_params = {}; + fetch_params = null; + try { + let muban = 模板.getMubans(); + if (typeof ext == "object") { + rule = ext + } else if (typeof ext == "string") { + let is_file = ext.startsWith("file://"); + if (ext.startsWith("http") || is_file) { + let query = getQuery(ext); + if (is_file) { + ext = ext.split("?")[0] + } + let js = request(ext, { + method: "GET" + }); + if (js) { + js = getOriginalJs(js); + eval("(function(){" + js.replace("var rule", "rule") + "})()") + } + if (query.type === "url" && query.params) { + if (is_file && /^http/.test(query.params)) { + rule.params = query.params + } else { + rule.params = urljoin(ext, query.params) + } + } else if (query.params) { + rule.params = query.params + } + } else { + ext = getOriginalJs(ext); + eval("(function(){" + ext.replace("var rule", "rule") + "})()") + } + } else { + console.log(`规则加载失败,不支持的规则类型:${typeof ext}`); + return + } + rule.host = (rule.host || "").rstrip("/"); + HOST = rule.host; + if (rule.hostJs) { + console.log(`检测到hostJs,准备执行...`); + try { + eval(rule.hostJs); + rule.host = HOST.rstrip("/") + } catch (e) { + console.log(`执行${rule.hostJs}获取host发生错误:${e.message}`) + } + } + if (rule["模板"] === "自动") { + try { + let host_headers = rule["headers"] || {}; + let host_html = getCode(HOST, { + headers: host_headers + }); + let match_muban = ""; + let muban_keys = Object.keys(muban).filter(it => !/默认|短视2|采集1/.test(it)); + for (let muban_key of muban_keys) { + try { + let host_data = JSON.parse(home({}, host_html, muban[muban_key].class_parse)); + if (host_data.class && host_data.class.length > 0) { + match_muban = muban_key; + console.log(`自动匹配模板:【${muban_key}】`); + break + } + } catch (e) { + console.log(`自动匹配模板:【${muban_key}】错误:${e.message}`) + } + } + if (match_muban) { + muban["自动"] = muban[match_muban]; + if (rule["模板修改"] && rule["模板修改"].startsWith("js:")) { + eval(rule["模板修改"].replace("js:", "").trim()) + } + } else { + delete rule["模板"] + } + } catch (e) { + delete rule["模板"] + } + } + if (rule.模板 && muban.hasOwnProperty(rule.模板)) { + print("继承模板:" + rule.模板); + rule = Object.assign(muban[rule.模板], rule) + } + let rule_cate_excludes = (rule.cate_exclude || "").split("|").filter(it => it.trim()); + let rule_tab_excludes = (rule.tab_exclude || "").split("|").filter(it => it.trim()); + rule_cate_excludes = rule_cate_excludes.concat(CATE_EXCLUDE.split("|").filter(it => it.trim())); + rule_tab_excludes = rule_tab_excludes.concat(TAB_EXCLUDE.split("|").filter(it => it.trim())); + rule.cate_exclude = rule_cate_excludes.join("|"); + rule.tab_exclude = rule_tab_excludes.join("|"); + rule.类型 = rule.类型 || "影视"; + rule.url = rule.url || ""; + rule.double = rule.double || false; + rule.homeUrl = rule.homeUrl || ""; + rule.detailUrl = rule.detailUrl || ""; + rule.searchUrl = rule.searchUrl || ""; + rule.homeUrl = rule.host && rule.homeUrl ? urljoin(rule.host, rule.homeUrl) : rule.homeUrl || rule.host; + rule.homeUrl = cheerio.jinja2(rule.homeUrl, { + rule: rule + }); + rule.detailUrl = rule.host && rule.detailUrl ? urljoin(rule.host, rule.detailUrl) : rule.detailUrl; + rule.二级访问前 = rule.二级访问前 || ""; + if (rule.url.includes("[") && rule.url.includes("]")) { + let u1 = rule.url.split("[")[0]; + let u2 = rule.url.split("[")[1].split("]")[0]; + rule.url = rule.host && rule.url ? urljoin(rule.host, u1) + "[" + urljoin(rule.host, u2) + "]" : rule.url + } else { + rule.url = rule.host && rule.url ? urljoin(rule.host, rule.url) : rule.url + } + if (rule.searchUrl.includes("[") && rule.searchUrl.includes("]") && !rule.searchUrl.includes("#")) { + let u1 = rule.searchUrl.split("[")[0]; + let u2 = rule.searchUrl.split("[")[1].split("]")[0]; + rule.searchUrl = rule.host && rule.searchUrl ? urljoin(rule.host, u1) + "[" + urljoin(rule.host, u2) + "]" : rule.searchUrl + } else { + rule.searchUrl = rule.host && rule.searchUrl ? urljoin(rule.host, rule.searchUrl) : rule.searchUrl + } + rule.timeout = rule.timeout || 5e3; + rule.encoding = rule.编码 || rule.encoding || "utf-8"; + rule.search_encoding = rule.搜索编码 || rule.search_encoding || ""; + rule.图片来源 = rule.图片来源 || ""; + rule.图片替换 = rule.图片替换 || ""; + rule.play_json = rule.hasOwnProperty("play_json") ? rule.play_json : []; + rule.pagecount = rule.hasOwnProperty("pagecount") ? rule.pagecount : {}; + rule.proxy_rule = rule.hasOwnProperty("proxy_rule") ? rule.proxy_rule : ""; + if (!rule.hasOwnProperty("sniffer")) { + rule.sniffer = false + } + rule.sniffer = rule.hasOwnProperty("sniffer") ? rule.sniffer : ""; + rule.sniffer = !!(rule.sniffer && rule.sniffer !== "0" && rule.sniffer !== "false"); + rule.isVideo = rule.hasOwnProperty("isVideo") ? rule.isVideo : ""; + if (rule.sniffer && !rule.isVideo) { + rule.isVideo = "http((?!http).){12,}?\\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg|m4a|mp3)\\?.*|http((?!http).){12,}\\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg|m4a|mp3)|http((?!http).)*?video/tos*|http((?!http).)*?obj/tos*" + } + rule.tab_remove = rule.hasOwnProperty("tab_remove") ? rule.tab_remove : []; + rule.tab_order = rule.hasOwnProperty("tab_order") ? rule.tab_order : []; + rule.tab_rename = rule.hasOwnProperty("tab_rename") ? rule.tab_rename : {}; + if (rule.headers && typeof rule.headers === "object") { + try { + let header_keys = Object.keys(rule.headers); + for (let k of header_keys) { + if (k.toLowerCase() === "user-agent") { + let v = rule.headers[k]; + console.log(v); + if (["MOBILE_UA", "PC_UA", "UC_UA", "IOS_UA", "UA"].includes(v)) { + rule.headers[k] = eval(v) + } + } else if (k.toLowerCase() === "cookie") { + let v = rule.headers[k]; + if (v && v.startsWith("http")) { + console.log(v); + try { + v = fetch(v); + console.log(v); + rule.headers[k] = v + } catch (e) { + console.log(`从${v}获取cookie发生错误:${e.message}`) + } + } + } + } + } catch (e) { + console.log(`处理headers发生错误:${e.message}`) + } + } else { + rule.headers = {} + } + oheaders = deepCopy(rule.headers); + rule_fetch_params = { + headers: rule.headers, + timeout: rule.timeout, + encoding: rule.encoding + }; + RKEY = typeof key !== "undefined" && key ? key : "drpy_" + (rule.title || rule.host); + pre(); + init_test() + } catch (e) { + console.log(`init_test发生错误:${e.message}`) + } +} +let homeHtmlCache = undefined; + +function home(filter, home_html, class_parse) { + console.log("home"); + home_html = home_html || ""; + class_parse = class_parse || ""; + if (typeof rule.filter === "string" && rule.filter.trim().length > 0) { + try { + let filter_json = ungzip(rule.filter.trim()); + rule.filter = JSON.parse(filter_json) + } catch (e) { + rule.filter = {} + } + } + let homeObj = { + filter: rule.filter || false, + MY_URL: rule.homeUrl, + class_name: rule.class_name || "", + class_url: rule.class_url || "", + class_parse: class_parse || rule.class_parse || "", + cate_exclude: rule.cate_exclude, + home_html: home_html + }; + return homeParse(homeObj) +} + +function homeVod(params) { + console.log("homeVod"); + let homeVodObj = { + "推荐": rule.推荐, + double: rule.double, + homeUrl: rule.homeUrl, + detailUrl: rule.detailUrl + }; + return homeVodParse(homeVodObj) +} + +function category(tid, pg, filter, extend) { + let cateObj = { + url: rule.url, + "一级": rule.一级, + tid: tid, + pg: parseInt(pg), + filter: filter, + extend: extend + }; + return categoryParse(cateObj) +} + +function detail(vod_url) { + let orId = vod_url; + let fyclass = ""; + log("orId:" + orId); + if (vod_url.indexOf("$") > -1) { + let tmp = vod_url.split("$"); + fyclass = tmp[0]; + vod_url = tmp[1] + } + let detailUrl = vod_url.split("@@")[0]; + let url; + if (!detailUrl.startsWith("http") && !detailUrl.includes("/")) { + url = rule.detailUrl.replaceAll("fyid", detailUrl).replaceAll("fyclass", fyclass) + } else if (detailUrl.includes("/")) { + url = urljoin(rule.homeUrl, detailUrl) + } else { + url = detailUrl + } + let detailObj = { + orId: orId, + url: url, + "二级": rule.二级, + "二级访问前": rule.二级访问前, + detailUrl: detailUrl, + fyclass: fyclass, + tab_exclude: rule.tab_exclude + }; + return detailParse(detailObj) +} + +function play(flag, id, flags) { + let playObj = { + url: id, + flag: flag, + flags: flags + }; + return playParse(playObj) +} + +function search(wd, quick, pg) { + if (rule.search_encoding) { + if (rule.search_encoding.toLowerCase() !== "utf-8") { + wd = encodeStr(wd, rule.search_encoding) + } + } else if (rule.encoding && rule.encoding.toLowerCase() !== "utf-8") { + wd = encodeStr(wd, rule.encoding) + } + let searchObj = { + searchUrl: rule.searchUrl, + "搜索": rule.搜索, + wd: wd, + pg: pg || 1, + quick: quick + }; + return searchParse(searchObj) +} + +function proxy(params) { + if (rule.proxy_rule && rule.proxy_rule.trim()) { + rule.proxy_rule = rule.proxy_rule.trim() + } + if (rule.proxy_rule.startsWith("js:")) { + rule.proxy_rule = rule.proxy_rule.replace("js:", "") + } + let proxyObj = { + params: params, + proxy_rule: rule.proxy_rule + }; + return proxyParse(proxyObj) +} + +function sniffer() { + let enable_sniffer = rule.sniffer || false; + if (enable_sniffer) { + log("开始执行辅助嗅探代理规则...") + } + return enable_sniffer +} + +function isVideo(url) { + let t = 0; + let is_video; + if (rule.isVideo && rule.isVideo.trim()) { + is_video = rule.isVideo.trim() + } + if (is_video.startsWith("js:")) { + is_video = is_video.replace("js:", ""); + t = 1 + } + let isVideoObj = { + url: url, + isVideo: is_video, + t: t + }; + let result = isVideoParse(isVideoObj); + if (result) { + log("成功执行辅助嗅探规则并检测到视频地址:\n" + rule.isVideo) + } + return result +} + +function getRule(key) { + return key ? rule[key] || "" : rule +} + +function deepCopy(_obj) { + return JSON.parse(JSON.stringify(_obj)) +} + +function matchesAll(str, pattern, flatten) { + if (!pattern.global) { + pattern = new RegExp(pattern.source, "g" + (pattern.ignoreCase ? "i" : "") + (pattern.multiline ? "m" : "")) + } + var matches = []; + var match; + while ((match = pattern.exec(str)) !== null) { + matches.push(match) + } + return flatten ? matches.flat() : matches +} + +function stringUtils() { + Object.defineProperties(String.prototype, { + replaceX: { + value: function(regex, replacement) { + let matches = matchesAll(this, regex, true); + if (matches && matches.length > 1) { + const hasCaptureGroup = /\$\d/.test(replacement); + if (hasCaptureGroup) { + return this.replace(regex, m => m.replace(regex, replacement)) + } else { + return this.replace(regex, (m, p1) => m.replace(p1, replacement)) + } + } + return this.replace(regex, replacement) + }, + configurable: true, + enumerable: false, + writable: true + }, + parseX: { + get: function() { + try { + return JSON.parse(this) + } catch (e) { + console.log(e.message); + return this.startsWith("[") ? [] : {} + } + }, + configurable: true, + enumerable: false + } + }) +} + +function cut(text, start, end, method, All) { + let result = ""; + let c = (t, s, e) => { + let result = ""; + let rs = []; + let results = []; + try { + let lr = new RegExp(String.raw`${s}`.toString()); + let rr = new RegExp(String.raw`${e}`.toString()); + const segments = t.split(lr); + if (segments.length < 2) return ""; + let cutSegments = segments.slice(1).map(segment => { + let splitSegment = segment.split(rr); + return splitSegment.length < 2 ? undefined : splitSegment[0] + e + }).filter(f => f); + if (All) { + return `[${cutSegments.join(",")}]` + } else { + return cutSegments[0] + } + } catch (e) { + console.log(`Error cutting text:${e.message}`) + } + return result + }; + result = c(text, start, end); + stringUtils(); + if (method && typeof method === "function") { + result = method(result) + } + return result +} + +function DRPY() { + return { + runMain: runMain, + getRule: getRule, + init: init, + home: home, + homeVod: homeVod, + category: category, + detail: detail, + play: play, + search: search, + proxy: proxy, + sniffer: sniffer, + isVideo: isVideo, + fixAdM3u8Ai: fixAdM3u8Ai + } +} +export default { + runMain: runMain, + getRule: getRule, + init: init, + home: home, + homeVod: homeVod, + category: category, + detail: detail, + play: play, + search: search, + proxy: proxy, + sniffer: sniffer, + isVideo: isVideo, + fixAdM3u8Ai: fixAdM3u8Ai, + DRPY: DRPY +}; \ No newline at end of file diff --git a/js/xiaosa/js/三六零.js b/js/xiaosa/js/三六零.js new file mode 100644 index 0000000..40e1a25 --- /dev/null +++ b/js/xiaosa/js/三六零.js @@ -0,0 +1,843 @@ +var rule = { + title: '360影视[官]', + host: 'https://www.360kan.com', + homeUrl: 'https://api.web.360kan.com/v1/rank?cat=2&size=9', + detailUrl: 'https://api.web.360kan.com/v1/detail?cat=fyclass&id=fyid', + searchUrl: 'https://api.so.360kan.com/index?force_v=1&kw=**&from=&pageno=fypage&v_ap=1&tab=all', + url: 'https://api.web.360kan.com/v1/fyfilter&size=35&pageno=fypage&callback=', + filterable: 1, + filter_url: 'filter/list?catid=fyclass&rank={{fl.排序}}&cat={{fl.类型}}&year={{fl.年代}}&area={{fl.地区}}', + filter: { + "1": [{ + "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": "内地", + "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": "2010", + "v": "2010" + }, { + "n": "2009", + "v": "2009" + }, { + "n": "2008", + "v": "2008" + }, { + "n": "2007", + "v": "2007" + }, { + "n": "更早", + "v": "lt_year" + }] + }, { + "key": "排序", + "name": "排序", + "value": [{ + "n": "最近热映", + "v": "rankhot" + }, { + "n": "最近上映", + "v": "ranklatest" + }, { + "n": "最受好评", + "v": "rankpoint" + }] + }], + "2": [{ + "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": "科幻" + }, { + "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": "新加坡" + }] + }, { + "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": "2010", + "v": "2010" + }, { + "n": "2009", + "v": "2009" + }, { + "n": "2008", + "v": "2008" + }, { + "n": "2007", + "v": "2007" + }, { + "n": "更早", + "v": "lt_year" + }] + }, { + "key": "排序", + "name": "排序", + "value": [{ + "n": "最近热映", + "v": "rankhot" + }, { + "n": "最近上映", + "v": "ranklatest" + }, { + "n": "最受好评", + "v": "rankpoint" + }] + }], + "3": [{ + "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": "歌舞" + }, { + "n": "财经", + "v": "财经" + }, { + "n": "汽车", + "v": "汽车" + }, { + "n": "播报", + "v": "播报" + }, { + "n": "其他", + "v": "其他" + }] + }, { + "key": "地区", + "name": "地区", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "内地", + "v": "大陆" + }, { + "n": "中国香港", + "v": "香港" + }, { + "n": "中国台湾", + "v": "台湾" + }, { + "n": "日本", + "v": "日本" + }, { + "n": "欧美", + "v": "欧美" + }] + }, { + "key": "排序", + "name": "排序", + "value": [{ + "n": "最近热映", + "v": "rankhot" + }, { + "n": "最近上映", + "v": "ranklatest" + }] + }], + "4": [{ + "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": "悬疑" + }, { + "n": "怪物", + "v": "怪物" + }, { + "n": "战争", + "v": "战争" + }, { + "n": "益智", + "v": "益智" + }, { + "n": "青春", + "v": "青春" + }, { + "n": "童话", + "v": "童话" + }, { + "n": "竞技", + "v": "竞技" + }, { + "n": "动作", + "v": "动作" + }, { + "n": "社会", + "v": "社会" + }, { + "n": "友情", + "v": "友情" + }, { + "n": "真人版", + "v": "真人版" + }, { + "n": "电影版", + "v": "电影版" + }, { + "n": "OVA版", + "v": "OVA版" + }, { + "n": "TV版", + "v": "TV版" + }, { + "n": "新番动画", + "v": "新番动画" + }, { + "n": "完结动画", + "v": "完结动画" + }] + }, { + "key": "地区", + "name": "地区", + "value": [{ + "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" + }, { + "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": "更早", + "v": "更早" + }] + }, { + "key": "排序", + "name": "排序", + "value": [{ + "n": "最近热映", + "v": "rankhot" + }, { + "n": "最近上映", + "v": "ranklatest" + }] + }] + }, + filter_def: {}, + headers: { + 'User-Agent': 'MOBILE_UA' + }, + timeout: 5000, + class_name: '电视剧&电影&综艺&动漫', + class_url: '2&1&3&4', + limit: 5, + multi: 1, + searchable: 2, + 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); + if (bata.url.includes("qq,qiyi,imgo,youku,leshi,bilibili1,m1905")) { + input = { + parse: 0, + url: bata.url, + jx: 0, + danmaku: "http://103.45.162.207:25252/hbdm.php?key=7894561232&id=" + input.split("?")[0] + }; + } else { + input = { + parse: 0, + url: input.split("?")[0], + jx: 1, + danmaku: "http://103.45.162.207:25252/hbdm.php?key=7894561232&id=" + input.split("?")[0] + }; + } + } catch { + input = { + parse: 0, + url: input.split("?")[0], + jx: 1, + danmaku: "http://103.45.162.207:25252/hbdm.php?key=7894561232&id=" + input.split("?")[0] + }; + } + }), + // 疑似t4专用的 + // lazy:'js:input={parse: 1, playUrl: "", jx: 1, url: input.split("?")[0]}', + // 手动调用解析请求json的url,此lazy不方便 + // lazy:'js:input="https://cache.json.icu/home/api?type=ys&uid=292796&key=fnoryABDEFJNPQV269&url="+input.split("?")[0];log(input);let html=JSON.parse(request(input));log(html);input=html.url||input', + 推荐: 'json:data;title;cover;comment;cat+ent_id;description', + 一级: 'json:data.movies;title;cover;pubdate;id;description', + 二级: '', + 二级: $js.toString(() => { + let html = JSON.parse(fetch(input, fetch_params)); + let data = html.data; + let tilte = data.title; + let img = data.cdncover; + let vod_type = data.moviecategory.join(","); + let area = data.area.join(","); + let director = data.director.join(","); + let actor = data.actor.join(","); + let content = data.description; + let base_vod = { + vod_id: input, + vod_name: tilte, + type_name: vod_type, + vod_actor: actor, + vod_director: director, + vod_content: content, + vod_remarks: area, + vod_pic: urljoin2(input, img) + }; + let delta = 50; + let vod_play = {}; + let sites = data.playlink_sites; + sites.forEach(function(site) { + let playList = ""; + let vodItems = []; + print(data) + if (data.allupinfo) { + let total = parseInt(data.allupinfo[site]); + print(total) + for (let j = 1; j < total; j += delta) { + let end = Math.min(total, j + delta - 1); + print(end) + let url2 = buildUrl(input, { + start: j, + end: end, + site: site + }); + let vod_data = JSON.parse(fetch(url2), fetch_params).data; + if (vod_data != null) { + if (vod_data.allepidetail) { + vod_data = vod_data.allepidetail[site]; + vod_data.forEach(function(item, index) { + vodItems.push((item.playlink_num || "") + "$" + urlDeal(item.url || "")) + }) + } else { + vod_data = vod_data.defaultepisode; + vod_data.forEach(function(item, index) { + vodItems.push((item.period || "") + (item.name || "") + "$" + urlDeal(item.url) || "") + }) + } + } + } + } else { + let item = data.playlinksdetail[site]; + vodItems.push((item.sort || "") + "$" + urlDeal(item.default_url || "")) + } + if (vodItems.length > 0) { + playList = vodItems.join("#") + } + if (playList.length < 1) { + return + } + vod_play[site] = playList + }); + let tabs = Object.keys(vod_play); + let playUrls = []; + for (let id in tabs) { + print("id:" + id); + playUrls.push(vod_play[tabs[id]]) + } + if (tabs.length > 0) { + let vod_play_from = tabs.join("$$$"); + let vod_play_url = playUrls.join("$$$"); + base_vod.vod_play_from = vod_play_from; + base_vod.vod_play_url = vod_play_url + } + VOD = base_vod; + }), + 搜索: 'json:data.longData.rows;titleTxt||titlealias;cover;cat_name;cat_id+en_id;description', +} \ No newline at end of file diff --git a/js/xiaosa/js/人人电影网.js b/js/xiaosa/js/人人电影网.js new file mode 100644 index 0000000..d42832f --- /dev/null +++ b/js/xiaosa/js/人人电影网.js @@ -0,0 +1,113 @@ +var rule = { + title: '人人电影网', + host: 'https://www.rrdynb.com', + homeUrl: '/', + url: '/fyclass_fypage.html?', + filter_url: '{{fl.class}}', + filter: {}, + searchUrl: '/plus/search.php?q=**&pagesize=10&submit=', + searchable: 2, + quickSearch: 1, + filterable: 0, + headers: { + 'User-Agent': 'PC_UA', + 'Cookie': '' + }, + timeout: 5000, + class_name: '影视&电视剧&老电影&动漫', + class_url: 'movie/list_2&dianshiju/list_6&zongyi/list_10&dongman/list_13', + play_parse: true, + play_json: [{ + re: '*', + json: { + parse: 0, + jx: 0 + } + }], + lazy: "js:\n input = 'push://' + input;\n ", + limit: 6, + 推荐: '', + 一级: 'li:has(img);img&&alt;img&&data-original;;a&&href', + 二级: { + title: "h1&&Text", + img: "img&&src", + desc: ".info:eq(0)&&Text", + content: ".content&&Text", + tabs: `js: + pdfh = jsp.pdfh; + pdfa = jsp.pdfa; + pd = jsp.pd; + TABS = []; + let d = pdfa(html, 'span a'); + let tabsq = []; + let tabsb = []; + let tabsm = false; + let tabse = false; + + d.forEach(function(it) { + let burl = pdfh(it, 'a&&href'); + if (burl.includes("pan.quark.cn/s/")) { + tabsq.push("夸克网盘"); + } else if (burl.includes("pan.baidu.com/s/")) { + tabsb.push("百度网盘"); + } else if (burl.startsWith("magnet")) { + tabsm = true; + } else if (burl.startsWith("ed2k")) { + tabse = true; + } + }); + + + if (tabsb.length > 0) TABS.push("百度网盘"); + if (tabsq.length > 0) TABS.push("夸克网盘"); + if (tabsm) TABS.push("磁力"); + if (tabse) TABS.push("电驴"); + log('生成TABS: ' + JSON.stringify(TABS));`, + lists: `js: + pdfh = jsp.pdfh; + pdfa = jsp.pdfa; + pd = jsp.pd; + LISTS = []; + let d = pdfa(html, 'span a'); + let listm = []; + let liste = []; + let listq = []; + let listb = []; + + d.forEach(function(it) { + let burl = pdfh(it, 'a&&href'); + let title = pdfh(it, 'a&&Text'); + let loopresult = title + '$' + burl; + + if (burl.includes("pan.quark.cn/s/")) { + burl = burl.split("?")[0]; + loopresult = title + '$' + burl; + listq.push(loopresult); + } else if (burl.includes("pan.baidu.com/s/")) { + let codeMatch = title.match(/提取码[::]?\s*(\w{4})|(\w{4})(?=提取|百度|网盘)/i); + if (codeMatch) { + let code = codeMatch[1] || codeMatch[2]; + burl += '#' + code; + } + loopresult = title + '$' + burl; + listb.push(loopresult); + } else if (burl.startsWith("magnet")) { + listm.push(loopresult); + } else if (burl.startsWith("ed2k")) { + liste.push(loopresult); + } + }); + + + if (listb.length > 0) LISTS.push(listb); + if (listq.length > 0) LISTS.push(listq); + if (listm.length > 0) LISTS.push(listm); + if (liste.length > 0) LISTS.push(liste); + + + if (LISTS.length === 0 && listq.length > 0) { + LISTS = [listq]; + }`, + }, + 搜索: 'li:has(img);h2&&Text;img&&data-original;.tags&&Text;a&&href', +}; \ No newline at end of file diff --git a/js/xiaosa/js/优酷视频.js b/js/xiaosa/js/优酷视频.js new file mode 100644 index 0000000..c8559f9 --- /dev/null +++ b/js/xiaosa/js/优酷视频.js @@ -0,0 +1,2299 @@ +var rule = { + title: '优酷[官]', + host: 'https://www.%79%6f%75%6b%75.com', + homeUrl: '', + searchUrl: 'https://search.%79%6f%75%6b%75.com/api/search?pg=fypage&keyword=**', + searchable: 2, + quickSearch: 0, + filterable: 1, + multi: 1, + url: '/category/data?optionRefresh=1&pageNo=fypage¶ms=fyfilter', + filter_url: '{{fl}}', + filter: { + "电视剧": [{ + "key": "main_area", + "name": "全部地区", + "value": [{ + "n": "全部地区", + "v": "" + }, { + "n": "内地剧", + "v": "中国内地" + }, { + "n": "港剧", + "v": "中国香港" + }, { + "n": "台剧", + "v": "中国台湾" + }, { + "n": "韩剧", + "v": "韩国" + }, { + "n": "美剧", + "v": "美国" + }, { + "n": "英剧", + "v": "英国" + }, { + "n": "日剧", + "v": "日本" + }, { + "n": "泰剧", + "v": "泰国" + }] + }, { + "key": "tags", + "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": "year", + "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-2011", + "v": "2011-2014" + }, { + "n": "更早", + "v": "-2010" + }] + }, { + "key": "status", + "name": "全部规格", + "value": [{ + "n": "全部规格", + "v": "" + }, { + "n": "全网独播", + "v": "1" + }, { + "n": "优酷自制", + "v": "2" + }, { + "n": "已完结", + "v": "3" + }, { + "n": "即将上线", + "v": "4" + }, { + "n": "短剧", + "v": "5" + }] + }, { + "key": "pay_type", + "name": "付费类型", + "value": [{ + "n": "付费类型", + "v": "" + }, { + "n": "免费", + "v": "0" + }, { + "n": "VIP", + "v": "2" + }, { + "n": "付费", + "v": "1" + }] + }, { + "key": "sort", + "name": "综合排序", + "value": [{ + "n": "综合排序", + "v": "" + }, { + "n": "热度最高", + "v": "7" + }, { + "n": "最新上线", + "v": "1" + }, { + "n": "最好评", + "v": "3" + }, { + "n": "最多播放", + "v": "2" + }] + }], + "电影": [{ + "key": "main_area", + "name": "全部地区", + "value": [{ + "n": "全部地区", + "v": "" + }, { + "n": "内地", + "v": "中国内地" + }, { + "n": "中国香港", + "v": "中国香港" + }, { + "n": "中国台湾", + "v": "中国台湾" + }, { + "n": "美国", + "v": "美国" + }, { + "n": "印度", + "v": "印度" + }, { + "n": "日韩", + "v": "韩国,日本" + }, { + "n": "泰国", + "v": "泰国" + }, { + "n": "欧洲", + "v": "欧洲" + }] + }, { + "key": "tags", + "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": "其他" + }] + }, { + "key": "source", + "name": "全部规格", + "value": [{ + "n": "全部规格", + "v": "" + }, { + "n": "院线", + "v": "1" + }, { + "n": "网络电影", + "v": "0" + }, { + "n": "独播", + "v": "2" + }, { + "n": "高清修复", + "v": "3" + }, { + "n": "1080P", + "v": "4" + }] + }, { + "key": "year", + "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-2010", + "v": "2010-2014" + }, { + "n": "2009-2000", + "v": "2000-2009" + }, { + "n": "90年代", + "v": "1990-1999" + }, { + "n": "80年代", + "v": "1980-1989" + }, { + "n": "70年代", + "v": "1970-1979" + }, { + "n": "更早", + "v": "-1969" + }] + }, { + "key": "pay_type", + "name": "付费类型", + "value": [{ + "n": "付费类型", + "v": "" + }, { + "n": "免费", + "v": "0" + }, { + "n": "会员", + "v": "2" + }, { + "n": "点播", + "v": "1" + }] + }, { + "key": "sort", + "name": "综合排序", + "value": [{ + "n": "综合排序", + "v": "" + }, { + "n": "热度最高", + "v": "7" + }, { + "n": "最多播放", + "v": "2" + }, { + "n": "最新上线", + "v": "1" + }, { + "n": "最好评", + "v": "3" + }] + }, { + "key": "tag_label_name", + "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": "main_area", + "name": "全部地区", + "value": [{ + "n": "全部地区", + "v": "" + }, { + "n": "内地", + "v": "中国内地" + }, { + "n": "中国台湾", + "v": "中国台湾" + }, { + "n": "美国", + "v": "美国" + }, { + "n": "英国", + "v": "英国" + }] + }, { + "key": "tags", + "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": "year", + "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-2011", + "v": "2011-2014" + }, { + "n": "更早", + "v": "-2010" + }] + }, { + "key": "status", + "name": "全部规格", + "value": [{ + "n": "全部规格", + "v": "" + }, { + "n": "优酷自制", + "v": "2" + }, { + "n": "优酷独播", + "v": "1" + }, { + "n": "电视综艺", + "v": "6" + }, { + "n": "已完结", + "v": "3" + }, { + "n": "即将上线", + "v": "4" + }] + }, { + "key": "pay_type", + "name": "付费类型", + "value": [{ + "n": "付费类型", + "v": "" + }, { + "n": "免费", + "v": "0" + }, { + "n": "VIP", + "v": "2" + }, { + "n": "付费", + "v": "1" + }] + }, { + "key": "sort", + "name": "热度最高", + "value": [{ + "n": "热度最高", + "v": "" + }, { + "n": "最新更新", + "v": "8" + }, { + "n": "最近开播", + "v": "9" + }, { + "n": "最多评论", + "v": "4" + }] + }, { + "key": "tag_label_name", + "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": "sort", + "name": "综合排序", + "value": [{ + "n": "综合排序", + "v": "" + }, { + "n": "最多播放", + "v": "2" + }, { + "n": "最好评", + "v": "3" + }, { + "n": "最新上线", + "v": "1" + }] + }, { + "key": "main_area", + "name": "全部地区", + "value": [{ + "n": "全部地区", + "v": "" + }, { + "n": "内地", + "v": "中国内地" + }, { + "n": "日本", + "v": "日本" + }, { + "n": "美国", + "v": "美国" + }, { + "n": "中国台湾", + "v": "中国台湾" + }, { + "n": "其他", + "v": "其他" + }] + }, { + "key": "tags", + "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": "布袋戏" + }] + }, { + "key": "completed", + "name": "连载情况", + "value": [{ + "n": "连载情况", + "v": "" + }, { + "n": "更新中", + "v": "0" + }, { + "n": "已完结", + "v": "1" + }] + }, { + "key": "pay_type", + "name": "付费类型", + "value": [{ + "n": "付费类型", + "v": "" + }, { + "n": "免费", + "v": "0" + }, { + "n": "会员", + "v": "2" + }] + }, { + "key": "year", + "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": "00年代", + "v": "2000-2010" + }, { + "n": "更早", + "v": "-1999" + }] + }, { + "key": "tag_label_name", + "name": "为你推荐", + "value": [{ + "n": "为你推荐", + "v": "" + }, { + "n": "3D动画", + "v": "3D动画" + }, { + "n": "搞笑日常", + "v": "搞笑日常" + }, { + "n": "大男主", + "v": "大男主" + }, { + "n": "高燃", + "v": "高燃" + }, { + "n": "萌系", + "v": "萌系" + }, { + "n": "修真", + "v": "修真" + }, { + "n": "怀旧", + "v": "怀旧" + }, { + "n": "超级英雄", + "v": "超级英雄" + }, { + "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": "main_area", + "name": "全部地区", + "value": [{ + "n": "全部地区", + "v": "" + }, { + "n": "中国", + "v": "中国,香港,台湾" + }, { + "n": "美国", + "v": "美国" + }, { + "n": "英国", + "v": "英国" + }, { + "n": "其他国家", + "v": "其他" + }] + }, { + "key": "show_label_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": "音频" + }] + }, { + "key": "child_tags", + "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": "课程辅导" + }] + }, { + "key": "age", + "name": "全部年龄", + "value": [{ + "n": "全部年龄", + "v": "" + }, { + "n": "0-2岁", + "v": "0-2" + }, { + "n": "3-4岁", + "v": "3-4" + }, { + "n": "5-6岁", + "v": "5-6" + }, { + "n": "7岁以上", + "v": "7-" + }] + }, { + "key": "pay_type", + "name": "付费类型", + "value": [{ + "n": "付费类型", + "v": "" + }, { + "n": "免费", + "v": "0" + }, { + "n": "付费", + "v": "1" + }, { + "n": "VIP", + "v": "2" + }] + }, { + "key": "sort", + "name": "综合排序", + "value": [{ + "n": "综合排序", + "v": "" + }, { + "n": "最新上线", + "v": "1" + }, { + "n": "最多播放", + "v": "2" + }, { + "n": "最多评论", + "v": "4" + }, { + "n": "最多收藏", + "v": "5" + }] + }], + "纪录片": [{ + "key": "tags", + "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": "company", + "name": "全部出品", + "value": [{ + "n": "全部出品", + "v": "" + }, { + "n": "BBC", + "v": "bbc,british" + }, { + "n": "央视", + "v": "央视,中央电视台,cctv,中国广播电影电视节目交易中心" + }, { + "n": "国家地理", + "v": "国家地理" + }, { + "n": "Love Nature", + "v": "love nature" + }, { + "n": "LGI", + "v": "looking" + }, { + "n": "A&E", + "v": "ae" + }, { + "n": "OTF", + "v": "fence" + }] + }, { + "key": "year", + "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-2011", + "v": "2011-2014" + }, { + "n": "更早", + "v": "-2010" + }] + }, { + "key": "pay_type", + "name": "付费类型", + "value": [{ + "n": "付费类型", + "v": "" + }, { + "n": "免费", + "v": "0" + }, { + "n": "会员", + "v": "2" + }] + }, { + "key": "sort", + "name": "热度最高", + "value": [{ + "n": "热度最高", + "v": "" + }, { + "n": "综合排序", + "v": "0" + }, { + "n": "最新上线", + "v": "1" + }, { + "n": "最好评", + "v": "3" + }, { + "n": "最多收藏", + "v": "5" + }] + }], + "文化": [{ + "key": "tags", + "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": "people", + "name": "文化大咖", + "value": [{ + "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": "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-2011", + "v": "2011-2014" + }, { + "n": "更早", + "v": "-2010" + }] + }, { + "key": "pay_type", + "name": "付费类型", + "value": [{ + "n": "付费类型", + "v": "" + }, { + "n": "免费", + "v": "0" + }, { + "n": "会员", + "v": "2" + }] + }, { + "key": "sort", + "name": "热度最高", + "value": [{ + "n": "热度最高", + "v": "" + }, { + "n": "综合排序", + "v": "0" + }, { + "n": "最新上线", + "v": "1" + }, { + "n": "最好评", + "v": "3" + }, { + "n": "最多收藏", + "v": "5" + }] + }], + "亲子": [{ + "key": "qinzi_genre", + "name": "全部类型", + "value": [{ + "n": "全部类型", + "v": "" + }, { + "n": "孕产", + "v": "孕产" + }, { + "n": "育儿知识", + "v": "育儿知识,育儿达人,育儿专家,爸爸育儿,隔代育儿,育儿明星" + }, { + "n": "好物种草", + "v": "母婴用品,测评,母婴用品种草" + }, { + "n": "美食", + "v": "儿童美食,辅食,孕期饮食" + }, { + "n": "手工DIY", + "v": "手工diy" + }, { + "n": "教育观念", + "v": "教育观念" + }, { + "n": "亲子综艺", + "v": "亲子综艺" + }, { + "n": "亲子互动", + "v": "亲子旅游,亲子游戏,亲子阅读,玩具,早教,启蒙" + }, { + "n": "萌娃", + "v": "萌娃" + }, { + "n": "搞笑", + "v": "搞笑" + }, { + "n": "美妆", + "v": "美妆" + }] + }, { + "key": "pregnancy_stage", + "name": "全部阶段", + "value": [{ + "n": "全部阶段", + "v": "" + }, { + "n": "备孕", + "v": "备孕" + }, { + "n": "孕早期", + "v": "孕早" + }, { + "n": "孕中期", + "v": "孕中" + }, { + "n": "孕晚期", + "v": "孕晚" + }] + }, { + "key": "show_label_baby_age", + "name": "全部分龄", + "value": [{ + "n": "全部分龄", + "v": "" + }, { + "n": "0-1岁", + "v": "0-1" + }, { + "n": "1-3岁", + "v": "1-3" + }, { + "n": "3-6岁", + "v": "3-6" + }, { + "n": "6岁+", + "v": "6-" + }] + }, { + "key": "pay_type", + "name": "全部", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "免费", + "v": "0" + }, { + "n": "会员免费", + "v": "2" + }] + }, { + "key": "sort", + "name": "热度最高", + "value": [{ + "n": "热度最高", + "v": "" + }, { + "n": "综合排序", + "v": "0" + }, { + "n": "最新上线", + "v": "1" + }, { + "n": "最多播放", + "v": "2" + }, { + "n": "最多评论", + "v": "3" + }, { + "n": "最多收藏", + "v": "5" + }] + }], + "教育": [{ + "key": "tags", + "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": "company", + "name": "全部出品", + "value": [{ + "n": "全部出品", + "v": "" + }, { + "n": "TED", + "v": "ted" + }, { + "n": "耶鲁大学", + "v": "耶鲁大学" + }, { + "n": "哈佛大学", + "v": "哈佛大学" + }, { + "n": "斯坦福大学", + "v": "斯坦福大学" + }, { + "n": "麻省理工学院", + "v": "麻省理工学院" + }] + }, { + "key": "pay_type", + "name": "全部节目", + "value": [{ + "n": "全部节目", + "v": "" + }, { + "n": "免费", + "v": "0" + }, { + "n": "付费", + "v": "1" + }, { + "n": "VIP", + "v": "2" + }] + }, { + "key": "sort", + "name": "综合排序", + "value": [{ + "n": "综合排序", + "v": "" + }, { + "n": "最多播放", + "v": "2" + }, { + "n": "最多收藏", + "v": "5" + }, { + "n": "最好评", + "v": "3" + }, { + "n": "最新上线", + "v": "1" + }] + }], + "搞笑": [{ + "key": "division", + "name": "全部专区", + "value": [{ + "n": "全部专区", + "v": "" + }, { + "n": "1080P", + "v": "3" + }, { + "n": "独播", + "v": "6" + }, { + "n": "免费", + "v": "5" + }] + }, { + "key": "sort", + "name": "综合排序", + "value": [{ + "n": "综合排序", + "v": "" + }, { + "n": "最多播放", + "v": "2" + }, { + "n": "最好评", + "v": "3" + }, { + "n": "最新上线", + "v": "1" + }] + }], + "生活": [{ + "key": "division", + "name": "全部专区", + "value": [{ + "n": "全部专区", + "v": "" + }, { + "n": "1080P", + "v": "3" + }, { + "n": "独播", + "v": "6" + }, { + "n": "VIP", + "v": "4" + }, { + "n": "免费", + "v": "5" + }] + }, { + "key": "sort", + "name": "综合排序", + "value": [{ + "n": "综合排序", + "v": "" + }, { + "n": "最多播放", + "v": "2" + }, { + "n": "最好评", + "v": "3" + }, { + "n": "最新上线", + "v": "1" + }] + }], + "体育": [{ + "key": "division", + "name": "全部专区", + "value": [{ + "n": "全部专区", + "v": "" + }, { + "n": "1080P", + "v": "3" + }, { + "n": "独播", + "v": "6" + }, { + "n": "VIP", + "v": "4" + }, { + "n": "免费", + "v": "5" + }] + }, { + "key": "tags", + "name": "全部类型", + "value": [{ + "n": "全部类型", + "v": "" + }, { + "n": "篮球", + "v": "篮球" + }, { + "n": "足球", + "v": "足球" + }, { + "n": "台球", + "v": "台球" + }, { + "n": "CBA", + "v": "CBA" + }, { + "n": "钓鱼", + "v": "钓鱼" + }] + }, { + "key": "sort", + "name": "综合排序", + "value": [{ + "n": "综合排序", + "v": "" + }, { + "n": "最多播放", + "v": "2" + }, { + "n": "最好评", + "v": "3" + }, { + "n": "最新上线", + "v": "1" + }] + }], + "音乐": [{ + "key": "division", + "name": "全部专区", + "value": [{ + "n": "全部专区", + "v": "" + }, { + "n": "1080P", + "v": "3" + }, { + "n": "独播", + "v": "6" + }, { + "n": "免费", + "v": "5" + }] + }, { + "key": "main_area", + "name": "全部地区", + "value": [{ + "n": "全部地区", + "v": "" + }, { + "n": "中国", + "v": "中国" + }, { + "n": "中国台湾", + "v": "中国台湾" + }, { + "n": "中国香港", + "v": "中国香港" + }, { + "n": "美国", + "v": "美国" + }, { + "n": "其他", + "v": "其他" + }] + }, { + "key": "music_show_type", + "name": "全部类型", + "value": [{ + "n": "全部类型", + "v": "" + }, { + "n": "演唱会", + "v": "演唱会" + }, { + "n": "live现场", + "v": "live现场" + }, { + "n": "颁奖典礼", + "v": "颁奖典礼" + }, { + "n": "舞蹈", + "v": "舞蹈" + }, { + "n": "影视原声", + "v": "影视原声" + }, { + "n": "音乐达人", + "v": "音乐达人" + }, { + "n": "音乐教学", + "v": "音乐教学" + }, { + "n": "音乐纪录片", + "v": "音乐纪录片" + }, { + "n": "音乐mv", + "v": "音乐mv" + }, { + "n": "音乐自制", + "v": "音乐自制" + }] + }, { + "key": "sort", + "name": "综合排序", + "value": [{ + "n": "综合排序", + "v": "" + }, { + "n": "最多播放", + "v": "2" + }, { + "n": "最好评", + "v": "3" + }, { + "n": "最新上线", + "v": "1" + }] + }], + "游戏": [{ + "key": "division", + "name": "全部专区", + "value": [{ + "n": "全部专区", + "v": "" + }, { + "n": "1080P", + "v": "3" + }, { + "n": "独播", + "v": "6" + }, { + "n": "VIP", + "v": "4" + }, { + "n": "免费", + "v": "5" + }] + }, { + "key": "game_brand", + "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": "tags", + "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": "sort", + "name": "综合排序", + "value": [{ + "n": "综合排序", + "v": "" + }, { + "n": "最多播放", + "v": "2" + }, { + "n": "最好评", + "v": "3" + }, { + "n": "最新上线", + "v": "1" + }] + }] + }, + headers: { + 'User-Agent': 'PC_UA', + 'Cookie': 'cna=VvNvGX3e0ywCAavVEXlnA2bg; __ysuid=1626676228345Rl1; __ayft=1652434048647; __arycid=dm-1-00; __arcms=dm-1-00; __ayvstp=85; __arpvid=1667204023100cWWdgM-1667204023112; __ayscnt=10; __aypstp=60; isg=BBwcqxvvk3BxkWQGugbLpUSf7TrOlcC_U7GAj_YdfYfvQbzLHqYGT4Hgp6m5TvgX; tfstk=c3JOByYUH20ilVucLOhh0pCtE40lZfGc-PjLHLLfuX7SWNyAiQvkeMBsIw7PWDC..; l=eBQguS-PjdJFGJT-BOfwourza77OSIRA_uPzaNbMiOCPOb1B5UxfW6yHp4T6C3GVhsGJR3rp2umHBeYBqQd-nxvOF8qmSVDmn', + 'Referer': 'https://www.youku.com', + }, + timeout: 5000, + class_name: '电视剧&电影&综艺&动漫&少儿&纪录片&文化&亲子&教育&搞笑&生活&体育&音乐&游戏', + class_url: '电视剧&电影&综艺&动漫&少儿&纪录片&文化&亲子&教育&搞笑&生活&体育&音乐&游戏', + 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); + if (bata.url.includes("http")) { + input = { + parse: 0, + url: bata.url, + jx: 0, + danmaku: "http://127.0.0.1:9978/proxy?do=danmu&site=js&url=http://dm.qxq6.com/zy/api.php?url=" + input.split("?")[0] + }; + } else { + input = { + parse: 0, + url: input.split("?")[0], + jx: 1, + danmaku: "http://127.0.0.1:9978/proxy?do=danmu&site=js&url=http://dm.qxq6.com/zy/api.php?url=" + input.split("?")[0] + }; + } + } catch { + input = { + parse: 0, + url: input.split("?")[0], + jx: 1, + danmaku: "http://127.0.0.1:9978/proxy?do=danmu&site=js&url=http://dm.qxq6.com/zy/api.php?url=" + input.split("?")[0] + }; + } + }), + 一级: $js.toString(() => { + 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/js/xiaosa/js/全盘.js b/js/xiaosa/js/全盘.js new file mode 100644 index 0000000..aefdd85 --- /dev/null +++ b/js/xiaosa/js/全盘.js @@ -0,0 +1,52 @@ +var rule = { + title: '懒盘搜', + host: 'https://so.yuneu.com/', + hostJs: '', + headers: { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.91 Mobile Safari/537.36', + }, + 编码: 'utf-8', + timeout: 5000, + url: 'https://so.yuneu.com/search?q=fyclass&format=video&page=fypage', + filter_url: '', + detailUrl: '', + searchUrl: 'https://so.yuneu.com/search?q=**&format=video&exact=true&page=fypage', + searchable: 1, + quickSearch: 1, + filterable: 1, + class_name: '', + class_url: '', + proxy_rule: '', + sniffer: false, + isVideo: '', + play_parse: true, + parse_url: '', + lazy: "js:\n input = 'push://' + input;\n ", + limit: 9, + double: false, + // 推荐: '*', + 一级: 'js:\n let html = fetch(input);\n let list = pdfa(html, "body&&.semi-space-medium-vertical");\n VODS = list.map(x => {\n let remarks = pdfh(x, "div&&img&&alt");\n // 过滤掉包含"迅雷云盘"的内容\n if(remarks.includes("迅雷云盘") || remarks.includes("115") || remarks.includes("阿里")) return null;\n return {\n vod_name: pdfh(x, "div&&a&&title"),\n vod_pic: \'https://img0.baidu.com/it/u=2841223652,2325996620&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500\',\n vod_remarks: remarks,\n vod_content: remarks,\n vod_id: pdfh(x, "div&&a&&href")\n }\n }).filter(x => x !== null);\n ', + 二级: { + title: 'h1&&Text', + img: 'img&&src', + desc: '.card-text:eq(2)&&Text;;;;', + content: 'body&&.semi-space-loose-vertical&&a&&href', + tabs: "js:TABS = ['全盘搜']", + lists: "js:\n LISTS = [];\n let lists1 = pdfa(html, 'body&&.semi-space-loose-vertical').map(it => {\n let _tt = pdfh(it, 'span&&title');\n let _uu = pdfh(it, 'a&&href');\n return _tt + '$' + _uu;\n });\n LISTS.push(lists1);\n ", + }, + 搜索: 'js:\n let html = fetch(input);\n let list = pdfa(html, "body&&.semi-space-medium-vertical");\n VODS = list.map(x => {\n let remarks = pdfh(x, "div&&img&&alt");\n // 过滤掉包含"迅雷云盘"的内容\n if(remarks.includes("迅雷云盘") || remarks.includes("115") || remarks.includes("阿里")) return null;\n return {\n vod_name: pdfh(x, "div&&a&&title"),\n vod_pic: \'https://img0.baidu.com/it/u=2841223652,2325996620&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500\',\n vod_remarks: remarks,\n vod_content: remarks,\n vod_id: pdfh(x, "div&&a&&href")\n }\n }).filter(x => x !== null);\n ', + cate_exclude: '首页|留言|APP|下载|资讯|新闻|动态', + tab_exclude: '猜你|喜欢|下载|剧情|榜|评论', + 类型: '影视', + homeUrl: 'https://so.yuneu.com/', + 二级访问前: '', + encoding: 'utf-8', + search_encoding: '', + 图片来源: '', + 图片替换: '', + play_json: [], + pagecount: {}, + tab_remove: [], + tab_order: [], + tab_rename: {}, +} \ No newline at end of file diff --git a/js/xiaosa/js/剧圈圈.js b/js/xiaosa/js/剧圈圈.js new file mode 100644 index 0000000..94036de --- /dev/null +++ b/js/xiaosa/js/剧圈圈.js @@ -0,0 +1,12 @@ +Object.assign(muban.mxpro.二级, { + tab_text: 'div--small&&Text', +}); +var rule = { + 模板: 'mxpro', + title: '剧圈圈', + host: 'https://www.jqqzx.cc/', + url: '/vodshow/id/fyclass/page/fypage.html', + searchUrl: '/vodsearch**/page/fypage.html', + class_parse: '.navbar-items li:gt(2):lt(8);a&&Text;a&&href;.*/(.*?)\.html', + cate_exclude: '今日更新|热榜', +} \ No newline at end of file diff --git a/js/xiaosa/js/动漫岛.js b/js/xiaosa/js/动漫岛.js new file mode 100644 index 0000000..1ffcc71 --- /dev/null +++ b/js/xiaosa/js/动漫岛.js @@ -0,0 +1,1100 @@ +var rule = { + title: '动漫岛', + // host:'http://www.dmd85.com', + // host:'http://www.88dmw.com', + host: 'http://www.dmand5.com', + // url:'/vod-list-id-fyclass-pg-fypage-order--by-{by}-class-{class}-year-{year}-letter--area--lang-.html', + url: '/vod-list-id-fyclass-pg-fypage-order-fyfilter-area--lang-.html', + filterable: 1, //是否启用分类筛选, + filter_url: '-by-{{fl.by}}-class-{{fl.class}}-year-{{fl.year}}-letter-{{fl.letter}}', + filter: { + "1": [{ + "key": "class", + "name": "剧情", + "value": [{ + "n": "全部", + "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": "14" + }, { + "n": "推理", + "v": "13" + }, { + "n": "魔法", + "v": "12" + }, { + "n": "神魔", + "v": "11" + }, { + "n": "治愈", + "v": "10" + }, { + "n": "竞技", + "v": "59" + }, { + "n": "悬疑", + "v": "60" + }, { + "n": "战争", + "v": "62" + }, { + "n": "萝莉", + "v": "63" + }, { + "n": "魔幻", + "v": "64" + }, { + "n": "战斗", + "v": "65" + }, { + "n": "歌舞", + "v": "98" + }, { + "n": "历史", + "v": "99" + }, { + "n": "励志", + "v": "108" + }, { + "n": "偶像", + "v": "118" + }, { + "n": "职场", + "v": "121" + }] + }, { + "key": "year", + "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" + }, { + "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": "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" + }] + }, { + "key": "by", + "name": "排序", + "value": [{ + "n": "更新", + "v": "time" + }, { + "n": "得分", + "v": "score" + }, { + "n": "总排行", + "v": "hits" + }] + }], + "3": [{ + "key": "class", + "name": "剧情", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "冒险", + "v": "36" + }, { + "n": "热血", + "v": "37" + }, { + "n": "奇幻", + "v": "38" + }, { + "n": "恋爱", + "v": "39" + }, { + "n": "恋爱", + "v": "40" + }, { + "n": "恋爱", + "v": "40" + }, { + "n": "搞笑", + "v": "42" + }, { + "n": "治愈", + "v": "43" + }, { + "n": "神魔", + "v": "44" + }, { + "n": "魔法", + "v": "45" + }, { + "n": "百合", + "v": "46" + }, { + "n": "推理", + "v": "47" + }, { + "n": "科幻", + "v": "48" + }, { + "n": "竞技", + "v": "49" + }, { + "n": "悬疑", + "v": "66" + }, { + "n": "战争", + "v": "68" + }, { + "n": "萝莉", + "v": "69" + }, { + "n": "魔幻", + "v": "70" + }, { + "n": "战斗", + "v": "71" + }, { + "n": "青春", + "v": "72" + }, { + "n": "历史", + "v": "100" + }, { + "n": "歌舞", + "v": "101" + }, { + "n": "恐怖", + "v": "104" + }, { + "n": "职场", + "v": "107" + }, { + "n": "励志", + "v": "109" + }, { + "n": "偶像", + "v": "119" + }] + }, { + "key": "year", + "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" + }, { + "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": "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" + }] + }, { + "key": "by", + "name": "排序", + "value": [{ + "n": "更新", + "v": "time" + }, { + "n": "得分", + "v": "score" + }, { + "n": "总排行", + "v": "hits" + }] + }], + "4": [{ + "key": "class", + "name": "剧情", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "冒险", + "v": "50" + }, { + "n": "热血", + "v": "51" + }, { + "n": "武侠", + "v": "52" + }, { + "n": "奇幻", + "v": "53" + }, { + "n": "玄幻", + "v": "54" + }, { + "n": "竞技", + "v": "55" + }, { + "n": "魔幻", + "v": "56" + }, { + "n": "科幻", + "v": "57" + }, { + "n": "恋爱", + "v": "58" + }, { + "n": "历史", + "v": "73" + }, { + "n": "战斗", + "v": "74" + }, { + "n": "搞笑", + "v": "75" + }, { + "n": "神魔", + "v": "76" + }, { + "n": "战争", + "v": "97" + }, { + "n": "古风", + "v": "111" + }, { + "n": "少女", + "v": "112" + }, { + "n": "萝莉", + "v": "113" + }, { + "n": "治愈", + "v": "114" + }, { + "n": "日常", + "v": "115" + }, { + "n": "歌舞", + "v": "116" + }, { + "n": "偶像", + "v": "120" + }, { + "n": "职场", + "v": "123" + }, { + "n": "仙侠", + "v": "125" + }] + }, { + "key": "year", + "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" + }, { + "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": "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" + }] + }, { + "key": "by", + "name": "排序", + "value": [{ + "n": "更新", + "v": "time" + }, { + "n": "得分", + "v": "score" + }, { + "n": "总排行", + "v": "hits" + }] + }], + "16": [{ + "key": "class", + "name": "剧情", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "冒险", + "v": "77" + }, { + "n": "热血", + "v": "78" + }, { + "n": "奇幻", + "v": "79" + }, { + "n": "恋爱", + "v": "80" + }, { + "n": "校园", + "v": "81" + }, { + "n": "后宫", + "v": "82" + }, { + "n": "搞笑", + "v": "83" + }, { + "n": "青春", + "v": "84" + }, { + "n": "百合", + "v": "85" + }, { + "n": "治愈", + "v": "86" + }, { + "n": "神魔", + "v": "87" + }, { + "n": "魔法", + "v": "88" + }, { + "n": "推理", + "v": "89" + }, { + "n": "科幻", + "v": "90" + }, { + "n": "竞技", + "v": "91" + }, { + "n": "悬疑", + "v": "92" + }, { + "n": "战争", + "v": "93" + }, { + "n": "萝莉", + "v": "94" + }, { + "n": "魔幻", + "v": "95" + }, { + "n": "战斗", + "v": "96" + }, { + "n": "历史", + "v": "102" + }, { + "n": "歌舞", + "v": "103" + }, { + "n": "恐怖", + "v": "105" + }, { + "n": "职场", + "v": "106" + }, { + "n": "励志", + "v": "110" + }, { + "n": "偶像", + "v": "117" + }, { + "n": "职场", + "v": "124" + }] + }, { + "key": "year", + "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" + }, { + "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": "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" + }] + }, { + "key": "by", + "name": "排序", + "value": [{ + "n": "更新", + "v": "time" + }, { + "n": "得分", + "v": "score" + }, { + "n": "总排行", + "v": "hits" + }] + }] + }, + searchUrl: '/search-pg-fypage-wd-**.html', + searchable: 2, //是否启用全局搜索, + quickSearch: 0, //是否启用快速搜索, + headers: { + 'User-Agent': 'PC_UA', + }, + class_parse: '.secNacUl li;a&&Text;a&&href;.*/(\\d+)-1.html', + play_parse: true, + lazy: '', + limit: 6, + 推荐: '.c1_l_wap_contact li;*;img&&src;.time:eq(0)&&Text;*', + 一级: '.list3_cn_box .cn_box2;a&&title;.list_pic&&src;.list_20 li:eq(1) span&&Text;a&&href', + 二级: { + "title": "h1&&Text;.o_r_contact&&li:eq(0)&&Text", + "img": ".o_big_img_bg_b img&&src", + "desc": ".o_r_contact&&li:eq(6)&&Text;.o_r_contact&&li:eq(5)&&Text;.o_r_contact&&li:eq(3)&&Text;.o_r_contact&&li:eq(2)&&Text;.o_r_contact&&li:eq(1)&&Text", + "content": ".des_box&&Text", + "tabs": ".from-tabs&&label", + "lists": ".mn_list_li_movie:eq(#id) li" + }, + 搜索: '*', +} \ No newline at end of file diff --git a/js/xiaosa/js/动漫巴士.js b/js/xiaosa/js/动漫巴士.js new file mode 100644 index 0000000..db8ae7b --- /dev/null +++ b/js/xiaosa/js/动漫巴士.js @@ -0,0 +1,64 @@ +var rule = { + author: '小可乐/240526/第一版', + title: '动漫巴士[漫]', + host: 'http://dm84.site', + hostJs: 'print(HOST);let html=request(HOST,{headers:{"User-Agent":MOBILE_UA}});let src= jsp.pdfh(html,"ul&&a:eq(0)&&href");print(src);HOST=src', + headers: { + 'User-Agent': 'MOBILE_UA' + }, + 编码: 'utf-8', + timeout: 5000, + + homeUrl: '/', + url: '/show-fyclass--fyfilter-fypage.html', + filter_url: '{{fl.by}}-{{fl.class}}--{{fl.year}}', + detailUrl: '', + searchUrl: '/s-**---------fypage.html', + searchable: 1, + quickSearch: 1, + filterable: 1, + + class_name: '国产动漫&日本动漫&欧美动漫&电影', + class_url: '1&2&3&4', + filter_def: {}, + + proxy_rule: '', + sniffer: 0, + isVideo: '', + play_parse: true, + parse_url: '', + lazy: `js: +let html = request(input); +let kurl = pdfh(html,'body&&iframe').match(/src="(.*?)"/)[1]; +input= kurl +`, + + limit: 9, + double: false, + 推荐: '*', + //列表;标题;图片;描述;链接;详情(可不写) + 一级: '.v_list li;a&&title;a&&data-bg;.desc&&Text;a&&href', + 二级: { + //名称;类型 + "title": "h1&&Text;meta[name*=class]&&content", + //图片 + "img": "img&&src", + //主要描述;年份;地区;演员;导演 + "desc": "meta[name*=update_date]&&content;meta[name*=release_date]&&content;meta[name*=area]&&content;meta[name*=actor]&&content;meta[name*=director]&&content", + //简介 + "content": "p:eq(-2)&&Text", + //线路数组 + "tabs": ".tab_control&&li", + //线路标题 + "tab_text": "body&&Text", + //播放数组 选集列表 + "lists": ".play_list:eq(#id)&&a", + //选集标题 + "list_text": "body&&Text", + //选集链接 + "list_url": "a&&href" + }, + 搜索: '*', + + filter: 'H4sIAAAAAAAAA+2WbUsqQRTH3+/HmNe+0LWn21eJXlgIRU+Q3UBEsLTaCrYtSm9cb2RQ2YOVFUFa9mWcGf0Wjc6cMxPFstDlcgXf7e/39+zo2XPUlEUiZHTMSpGZeJKMksnZWCJBQmQ+NhcXyKt1erQteDk2+1OIsRSZF5quldvZckcLIOmQsqcb9LmurALImPOL5QsqUwAZd3O6TgFmF2+tpy3IJGB2vmvUScDzKmfNxjGcJwHrspVWKQN1EiBrZV55w1WZArynd8Svd+GeEvCzb5VZZoW9XPF97ICp0uPpEDY5GY8t6h6zwlO78Biwx3bYHlCue2n4qPZR00e0j5je1t42fVj7sOEjP9CLS8OPaD9i+mHth00/pP2Q6Qe1H/zYr4mk0S13j9Z2PnVLN1HA0rR4Kdy5Wauxu32VTE0vJfSzvs1RZ10licmFxXjnWGs8ZBH7r+3E+l778AImQkKQnfDbJeq59OYKMgl6Dqv0rYAT2AU877hEf1fgPAlBdoIVa+LdQZ2EIDvBVq95HjMJmN3XWc6BTAK+l8MG9SBTgHUrHsvkoU4CZm6Ze/A8Fei6be5Usa4LmD2U2n9O+MElxMj9re2prY3+z1vr92vlW+e3mT7b9+UW9ee5l+Z54F/Ms/ib0nwt6v8sHfj2POeLdPMc6iQE+eb3nWenyrJrcJ6E/jz3zjxb6XeqCRqqbAwAAA==' +} \ No newline at end of file diff --git a/js/xiaosa/js/动画片大全.js b/js/xiaosa/js/动画片大全.js new file mode 100644 index 0000000..696e162 --- /dev/null +++ b/js/xiaosa/js/动画片大全.js @@ -0,0 +1,28 @@ +var rule = { + title: '动画片大全', + host: 'https://www.dhpdq2.com/', + url: 'https://www.dhpdq2.com/katong/fyclass-fypage/', + searchUrl: '/vodsearch/**----------fypage---/', + class_parse: '.c_class li;a&&Text;a&&href;.*/(.*?)/', + searchable: 2, + quickSearch: 0, + filterable: 0, + headers: { + 'User-Agent': 'MOBILE_UA', + }, + play_parse: true, + lazy: '', + limit: 6, + 推荐: '.stui-vodlist;li;a&&title;a&&data-original;.pic-text&&Text;a&&href', + double: true, + 一级: '.stui-vodlist li;a&&title;a&&data-original;.pic-text&&Text;a&&href', + 二级: { + title: 'h1&&Text;.detail_list&&ul:eq(1)&&li&&a:eq(2)&&Text', + img: '.vodlist_thumb&&data-original', + desc: '.playinfo&&p:eq(0)&&Text;.playinfo&&p:eq(1)&&Text;.playinfo&&p:eq(2)&&Text;.playinfo&&p:eq(3)&&Text', + content: '.content:eq(1)', + tabs: '.relatesdh .title h3', + lists: '.relatesdh:eq(#id) li', + }, + 搜索: '*', +} \ No newline at end of file diff --git a/js/xiaosa/js/去看吧.js b/js/xiaosa/js/去看吧.js new file mode 100644 index 0000000..81f9121 --- /dev/null +++ b/js/xiaosa/js/去看吧.js @@ -0,0 +1,1127 @@ +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://www.k9dm.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": "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": "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": "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": "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": "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/js/xiaosa/js/双星.js b/js/xiaosa/js/双星.js new file mode 100644 index 0000000..2c3e9c4 --- /dev/null +++ b/js/xiaosa/js/双星.js @@ -0,0 +1,52 @@ +var rule = { + title: '双子星', + host: 'https://1.star2.cn', + hostJs: '', + headers: { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.91 Mobile Safari/537.36', + }, + 编码: 'utf-8', + timeout: 5000, + url: 'https://1.star2.cn/fyclass/', + filter_url: '', + detailUrl: '', + searchUrl: 'https://1.star2.cn/search/?keyword=**', + searchable: 1, + quickSearch: 1, + filterable: 1, + class_name: '短剧&国剧&综艺&电影&韩日&英美&外剧&动漫', + class_url: 'dj&ju&zy&mv&rh&ym&wj&dm', + proxy_rule: '', + sniffer: false, + isVideo: '', + play_parse: true, + parse_url: '', + lazy: "js:\n input = 'push://' + input;\n ", + limit: 9, + double: false, + 推荐: '*', + 一级: 'js:\n let html = fetch(input);\n let list = pdfa(html, ".erx-list&&li");\n VODS = list.map(x => {\n return {\n vod_name: pdfh(x, "a&&Text"),\n vod_pic: \'https://fs-im-kefu.7moor-fs1.com/ly/4d2c3f00-7d4c-11e5-af15-41bf63ae4ea0/1746269827120/1.jpeg\',\n vod_remarks: pdfh(x, "a&&Text"),\n vod_content: pdfh(x, "a&&Text"),\n vod_id: pdfh(x, "a&&href")\n }\n });\n ', + 二级: { + title: 'h1&&Text', + img: 'https://fs-im-kefu.7moor-fs1.com/ly/4d2c3f00-7d4c-11e5-af15-41bf63ae4ea0/1746269827120/1.jpeg', + desc: '.card-text:eq(2)&&Text;;;;', + content: '.card-text:eq(0)&&Text', + tabs: "js:TABS = ['双星']", + lists: "js:\n LISTS = [];\n let lists1 = pdfa(html, '.dlipp-cont-bd').map(it => {\n let _tt = pdfh(it, 'a&&Text');\n let _uu = pdfh(it, 'a&&href');\n return _tt + '$' + _uu;\n });\n LISTS.push(lists1);\n ", + }, + 搜索: 'js:\n let html = fetch(input);\n let list = pdfa(html, ".erx-list&&li");\n VODS = list.map(x => {\n return {\n vod_name: pdfh(x, "a&&Text"),\n vod_pic: \'https://fs-im-kefu.7moor-fs1.com/ly/4d2c3f00-7d4c-11e5-af15-41bf63ae4ea0/1746269827120/1.jpeg\', \n vod_remarks: pdfh(x, "a&&Text"),\n vod_content: pdfh(x, "a&&Text"),\n vod_id: pdfh(x, "a&&href")\n }\n });\n ', + cate_exclude: '首页|留言|APP|下载|资讯|新闻|动态', + tab_exclude: '猜你|喜欢|下载|剧情|榜|评论', + 类型: '影视', + homeUrl: 'https://1.star2.cn', + 二级访问前: '', + encoding: 'utf-8', + search_encoding: '', + 图片来源: '', + 图片替换: '', + play_json: [], + pagecount: {}, + tab_remove: [], + tab_order: [], + tab_rename: {}, +} \ No newline at end of file diff --git a/js/xiaosa/js/天堂.js b/js/xiaosa/js/天堂.js new file mode 100644 index 0000000..3184415 --- /dev/null +++ b/js/xiaosa/js/天堂.js @@ -0,0 +1,52 @@ +var rule = { + title: '盘搜天堂', + host: 'https://pansott.com/', + hostJs: '', + headers: { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.91 Mobile Safari/537.36', + }, + 编码: 'utf-8', + timeout: 5000, + url: 'https://pansott.com/search?q=fyclass&format=video&page=fypage', + filter_url: '', + detailUrl: '', + searchUrl: 'https://pansott.com/search?q=**&format=video&exact=true&page=fypage', + searchable: 1, + quickSearch: 1, + filterable: 1, + class_name: '剧集&电影&短剧&动漫&综艺', + class_url: '剧集&电影&短网剧&动漫&综艺', + proxy_rule: '', + sniffer: false, + isVideo: '', + play_parse: true, + parse_url: '', + lazy: "js:\n input = 'push://' + input;\n ", + limit: 9, + double: false, + // 推荐: '*', + 一级: 'js:\n let html = fetch(input);\n let list = pdfa(html, "body&&.semi-space-medium-vertical");\n VODS = list.map(x => {\n let remarks = pdfh(x, "div&&img&&alt");\n // 过滤掉包含"迅雷云盘"或"115"的内容\n if(remarks.includes("迅雷云盘") || remarks.includes("115") || remarks.includes("阿里")) return null;\n return {\n vod_name: pdfh(x, "div&&a&&title"),\n vod_pic: \'\',\n vod_remarks: remarks,\n vod_content: remarks,\n vod_id: pdfh(x, "div&&a&&href")\n }\n }).filter(x => x !== null);\n ', + 二级: { + title: 'h1&&Text', + img: 'img&&src', + desc: '.card-text:eq(2)&&Text;;;;', + content: 'body&&.semi-space-loose-vertical&&a&&href', + tabs: "js:TABS = ['天堂']", + lists: "js:\n LISTS = [];\n let lists1 = pdfa(html, 'body&&.semi-space-loose-vertical').map(it => {\n let _tt = pdfh(it, 'span&&title');\n let _uu = pdfh(it, 'a&&href');\n return _tt + '$' + _uu;\n });\n LISTS.push(lists1);\n ", + }, + 搜索: 'js:\n let html = fetch(input);\n let list = pdfa(html, "body&&.semi-space-medium-vertical");\n VODS = list.map(x => {\n let remarks = pdfh(x, "div&&img&&alt");\n // 过滤掉包含"迅雷云盘"或"115"的内容\n if(remarks.includes("迅雷云盘") || remarks.includes("115") || remarks.includes("阿里")) return null;\n return {\n vod_name: pdfh(x, "div&&a&&title"),\n vod_pic: \'\',\n vod_remarks: remarks,\n vod_content: remarks,\n vod_id: pdfh(x, "div&&a&&href")\n }\n }).filter(x => x !== null);\n ', + cate_exclude: '首页|留言|APP|下载|资讯|新闻|动态', + tab_exclude: '猜你|喜欢|下载|剧情|榜|评论', + 类型: '影视', + homeUrl: 'https://pansott.com/', + 二级访问前: '', + encoding: 'utf-8', + search_encoding: '', + 图片来源: '', + 图片替换: '', + play_json: [], + pagecount: {}, + tab_remove: [], + tab_order: [], + tab_rename: {}, +} \ No newline at end of file diff --git a/js/xiaosa/js/奇米动漫.js b/js/xiaosa/js/奇米动漫.js new file mode 100644 index 0000000..9e4e97b --- /dev/null +++ b/js/xiaosa/js/奇米动漫.js @@ -0,0 +1,1164 @@ +var rule = { + title: '奇米动漫', + host: 'http://www.qimiqimi.net', + url: '/show/fyclassfyfilter.html', + filterable: 1, //是否启用分类筛选, + filter_url: '{{fl.area}}{{fl.by}}{{fl.class}}{{fl.letter}}/page/fypage{{fl.year}}', + filter: { + "xinfan": [{ + "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/日常" + }] + }, { + "key": "area", + "name": "地区", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "日本", + "v": "/area/日本/" + }, { + "n": "大陆", + "v": "/area/中国/" + }, { + "n": "欧美", + "v": "/area/欧美/" + }, { + "n": "韩国", + "v": "/area/韩国/" + }, { + "n": "港台", + "v": "/area/港台/" + }] + }, { + "key": "year", + "name": "年份", + "value": [{ + "n": "全部", + "v": "" + }, { + "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" + }] + }, { + "key": "letter", + "name": "字母", + "value": [{ + "n": "字母", + "v": "" + }, { + "n": "A", + "v": "/letter/A" + }, { + "n": "B", + "v": "/letter/B" + }, { + "n": "C", + "v": "/letter/C" + }, { + "n": "D", + "v": "/letter/D" + }, { + "n": "E", + "v": "/letter/E" + }, { + "n": "F", + "v": "/letter/F" + }, { + "n": "G", + "v": "/letter/G" + }, { + "n": "H", + "v": "/letter/H" + }, { + "n": "I", + "v": "/letter/I" + }, { + "n": "J", + "v": "/letter/J" + }, { + "n": "K", + "v": "/letter/K" + }, { + "n": "L", + "v": "/letter/L" + }, { + "n": "M", + "v": "/letter/M" + }, { + "n": "N", + "v": "/letter/N" + }, { + "n": "O", + "v": "/letter/O" + }, { + "n": "P", + "v": "/letter/P" + }, { + "n": "Q", + "v": "/letter/Q" + }, { + "n": "R", + "v": "/letter/R" + }, { + "n": "S", + "v": "/letter/S" + }, { + "n": "T", + "v": "/letter/T" + }, { + "n": "U", + "v": "/letter/U" + }, { + "n": "V", + "v": "/letter/V" + }, { + "n": "W", + "v": "/letter/W" + }, { + "n": "X", + "v": "/letter/X" + }, { + "n": "Y", + "v": "/letter/Y" + }, { + "n": "Z", + "v": "/letter/Z" + }, { + "n": "0-9", + "v": "/letter/0-9" + }] + }, { + "key": "by", + "name": "排序", + "value": [{ + "n": "时间", + "v": "/by/time" + }, { + "n": "人气", + "v": "/by/hits" + }, { + "n": "评分", + "v": "/by/score" + }] + }], + "riman": [{ + "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/日常" + }] + }, { + "key": "area", + "name": "地区", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "日本", + "v": "/area/日本/" + }, { + "n": "大陆", + "v": "/area/中国/" + }, { + "n": "欧美", + "v": "/area/欧美/" + }, { + "n": "韩国", + "v": "/area/韩国/" + }, { + "n": "港台", + "v": "/area/港台/" + }] + }, { + "key": "year", + "name": "年份", + "value": [{ + "n": "全部", + "v": "" + }, { + "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" + }] + }, { + "key": "letter", + "name": "字母", + "value": [{ + "n": "字母", + "v": "" + }, { + "n": "A", + "v": "/letter/A" + }, { + "n": "B", + "v": "/letter/B" + }, { + "n": "C", + "v": "/letter/C" + }, { + "n": "D", + "v": "/letter/D" + }, { + "n": "E", + "v": "/letter/E" + }, { + "n": "F", + "v": "/letter/F" + }, { + "n": "G", + "v": "/letter/G" + }, { + "n": "H", + "v": "/letter/H" + }, { + "n": "I", + "v": "/letter/I" + }, { + "n": "J", + "v": "/letter/J" + }, { + "n": "K", + "v": "/letter/K" + }, { + "n": "L", + "v": "/letter/L" + }, { + "n": "M", + "v": "/letter/M" + }, { + "n": "N", + "v": "/letter/N" + }, { + "n": "O", + "v": "/letter/O" + }, { + "n": "P", + "v": "/letter/P" + }, { + "n": "Q", + "v": "/letter/Q" + }, { + "n": "R", + "v": "/letter/R" + }, { + "n": "S", + "v": "/letter/S" + }, { + "n": "T", + "v": "/letter/T" + }, { + "n": "U", + "v": "/letter/U" + }, { + "n": "V", + "v": "/letter/V" + }, { + "n": "W", + "v": "/letter/W" + }, { + "n": "X", + "v": "/letter/X" + }, { + "n": "Y", + "v": "/letter/Y" + }, { + "n": "Z", + "v": "/letter/Z" + }, { + "n": "0-9", + "v": "/letter/0-9" + }] + }, { + "key": "by", + "name": "排序", + "value": [{ + "n": "时间", + "v": "/by/time" + }, { + "n": "人气", + "v": "/by/hits" + }, { + "n": "评分", + "v": "/by/score" + }] + }], + "guoman": [{ + "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/日常" + }] + }, { + "key": "area", + "name": "地区", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "日本", + "v": "/area/日本/" + }, { + "n": "大陆", + "v": "/area/中国/" + }, { + "n": "欧美", + "v": "/area/欧美/" + }, { + "n": "韩国", + "v": "/area/韩国/" + }, { + "n": "港台", + "v": "/area/港台/" + }] + }, { + "key": "year", + "name": "年份", + "value": [{ + "n": "全部", + "v": "" + }, { + "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" + }] + }, { + "key": "letter", + "name": "字母", + "value": [{ + "n": "字母", + "v": "" + }, { + "n": "A", + "v": "/letter/A" + }, { + "n": "B", + "v": "/letter/B" + }, { + "n": "C", + "v": "/letter/C" + }, { + "n": "D", + "v": "/letter/D" + }, { + "n": "E", + "v": "/letter/E" + }, { + "n": "F", + "v": "/letter/F" + }, { + "n": "G", + "v": "/letter/G" + }, { + "n": "H", + "v": "/letter/H" + }, { + "n": "I", + "v": "/letter/I" + }, { + "n": "J", + "v": "/letter/J" + }, { + "n": "K", + "v": "/letter/K" + }, { + "n": "L", + "v": "/letter/L" + }, { + "n": "M", + "v": "/letter/M" + }, { + "n": "N", + "v": "/letter/N" + }, { + "n": "O", + "v": "/letter/O" + }, { + "n": "P", + "v": "/letter/P" + }, { + "n": "Q", + "v": "/letter/Q" + }, { + "n": "R", + "v": "/letter/R" + }, { + "n": "S", + "v": "/letter/S" + }, { + "n": "T", + "v": "/letter/T" + }, { + "n": "U", + "v": "/letter/U" + }, { + "n": "V", + "v": "/letter/V" + }, { + "n": "W", + "v": "/letter/W" + }, { + "n": "X", + "v": "/letter/X" + }, { + "n": "Y", + "v": "/letter/Y" + }, { + "n": "Z", + "v": "/letter/Z" + }, { + "n": "0-9", + "v": "/letter/0-9" + }] + }, { + "key": "by", + "name": "排序", + "value": [{ + "n": "时间", + "v": "/by/time" + }, { + "n": "人气", + "v": "/by/hits" + }, { + "n": "评分", + "v": "/by/score" + }] + }], + "jcdm": [{ + "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/日常" + }] + }, { + "key": "area", + "name": "地区", + "value": [{ + "n": "全部", + "v": "" + }, { + "n": "日本", + "v": "/area/日本/" + }, { + "n": "大陆", + "v": "/area/中国/" + }, { + "n": "欧美", + "v": "/area/欧美/" + }, { + "n": "韩国", + "v": "/area/韩国/" + }, { + "n": "港台", + "v": "/area/港台/" + }] + }, { + "key": "year", + "name": "年份", + "value": [{ + "n": "全部", + "v": "" + }, { + "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" + }] + }, { + "key": "letter", + "name": "字母", + "value": [{ + "n": "字母", + "v": "" + }, { + "n": "A", + "v": "/letter/A" + }, { + "n": "B", + "v": "/letter/B" + }, { + "n": "C", + "v": "/letter/C" + }, { + "n": "D", + "v": "/letter/D" + }, { + "n": "E", + "v": "/letter/E" + }, { + "n": "F", + "v": "/letter/F" + }, { + "n": "G", + "v": "/letter/G" + }, { + "n": "H", + "v": "/letter/H" + }, { + "n": "I", + "v": "/letter/I" + }, { + "n": "J", + "v": "/letter/J" + }, { + "n": "K", + "v": "/letter/K" + }, { + "n": "L", + "v": "/letter/L" + }, { + "n": "M", + "v": "/letter/M" + }, { + "n": "N", + "v": "/letter/N" + }, { + "n": "O", + "v": "/letter/O" + }, { + "n": "P", + "v": "/letter/P" + }, { + "n": "Q", + "v": "/letter/Q" + }, { + "n": "R", + "v": "/letter/R" + }, { + "n": "S", + "v": "/letter/S" + }, { + "n": "T", + "v": "/letter/T" + }, { + "n": "U", + "v": "/letter/U" + }, { + "n": "V", + "v": "/letter/V" + }, { + "n": "W", + "v": "/letter/W" + }, { + "n": "X", + "v": "/letter/X" + }, { + "n": "Y", + "v": "/letter/Y" + }, { + "n": "Z", + "v": "/letter/Z" + }, { + "n": "0-9", + "v": "/letter/0-9" + }] + }, { + "key": "by", + "name": "排序", + "value": [{ + "n": "时间", + "v": "/by/time" + }, { + "n": "人气", + "v": "/by/hits" + }, { + "n": "评分", + "v": "/by/score" + }] + }] + }, + searchable: 2, //是否启用全局搜索, + headers: { //网站的请求头,完整支持所有的,常带ua和cookies + 'User-Agent': 'PC_UA', + }, + class_parse: '#nav li;a&&Text;a&&href;.*/(\\w+).html', + cate_exclude: '番组专题|最近更新', + play_parse: true, + lazy: `js: + var html = JSON.parse(request(input).match(/r player_.*?=(.*?) { + TABS.push(pdfh(it, 'a&&alt')) + }); + `, + // "lists": ".content_playlist:not(.list_scroll):eq(#id) a" + "lists": "div.playlist_full:eq(#id) li" + }, + 搜索: 'li.searchlist_item;*;*;*;*', +} \ No newline at end of file diff --git a/js/xiaosa/js/校长.js b/js/xiaosa/js/校长.js new file mode 100644 index 0000000..e5ceea9 --- /dev/null +++ b/js/xiaosa/js/校长.js @@ -0,0 +1,162 @@ +var rule = { + title: '校长影视[云盘]', + host: 'https://xzyshd.com', + homeUrl: '/', + url: '/fyclass.html?page=fypage', + filter_url: '{{fl.class}}', + filter: {}, + searchUrl: '/search.html?keyword=**', + searchable: 2, + quickSearch: 0, + filterable: 0, + headers: { + 'User-Agent': 'PC_UA', + 'Cookie': '' + }, + timeout: 5000, + class_name: '电视剧&电影&动漫&纪录片&综艺', + class_url: 'dsj&dy&dm&jlp&zy', + play_parse: true, + play_json: [{ + re: '*', + json: { + parse: 0, + jx: 0 + } + }], + lazy: "js:\n input = 'push://' + input;\n ", + limit: 6, + 推荐: 'div.container div.row a:has(>img);img&&alt;img&&src;img&&alt;a&&href', + 一级: 'div.container div.row div.list-boxes;img&&alt;img&&src;div.list-actions&&Text;a&&href', + 二级: { + title: "div.container div.row h1&&Text", + img: "div.container div.row img&&src", + desc: 'div.container div.row div.article-infobox&&Text', //remark + content: 'div.container div.row div#info&&Text', + tabs: `js: +pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd; +TABS=[] +let d = pdfa(html, 'div.container div.row a'); +let tabsa = []; +let tabsq = []; +let tabsm = false; +let tabse = false; +d.forEach(function(it) { + let burl = pdfh(it, 'a&&href'); + if (burl.startsWith("https://pan.quark.cn/s/")){ + tabsq.push("夸克网盘"); + }else if (burl.startsWith("magnet")){ + tabsm = true; + }else if (burl.startsWith("ed2k")){ + tabse = true; + } +}); +if (tabsm === true){ + TABS.push("磁力"); +} +if (tabse === true){ + TABS.push("电驴"); +} +if (false && tabsa.length + tabsq.length > 1){ + TABS.push("选择右侧线路"); +} +let tmpIndex; +tmpIndex=1; +tabsa.forEach(function(it){ + TABS.push(it + tmpIndex); + tmpIndex = tmpIndex + 1; +}); +tmpIndex=1; +tabsq.forEach(function(it){ + TABS.push(it + tmpIndex); + tmpIndex = tmpIndex + 1; +}); +log('xzys TABS >>>>>>>>>>>>>>>>>>' + TABS); +`, + lists: `js: +log(TABS); +pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd; +LISTS = []; +let d = pdfa(html, 'div.container div.row a'); +let lista = []; +let listq = []; +let listm = []; +let liste = []; +d.forEach(function(it){ + let burl = pdfh(it, 'a&&href'); + let title = pdfh(it, 'a&&Text'); + log('dygang title >>>>>>>>>>>>>>>>>>>>>>>>>>' + title); + log('dygang burl >>>>>>>>>>>>>>>>>>>>>>>>>>' + burl); + let loopresult = title + '$' + burl; + if (burl.startsWith("https://pan.quark.cn/s/")){ + if (true){ + if (TABS.length==1){ + burl = "http://127.0.0.1:9978/proxy?do=quark&type=push&confirm=0&url=" + encodeURIComponent(burl); + }else{ + burl = "http://127.0.0.1:9978/proxy?do=quark&type=push&url=" + encodeURIComponent(burl); + } + }else{ + burl = "push://" + burl; + } + loopresult = title + '$' + burl; + listq.push(loopresult); + }else if (burl.startsWith("magnet")){ + listm.push(loopresult); + }else if (burl.startsWith("ed2k")){ + liste.push(loopresult); + } +}); +if (listm.length>0){ + LISTS.push(listm); +} +if (liste.length>0){ + LISTS.push(liste); +} +if (false && lista.length + listq.length > 1){ + LISTS.push(["选择右侧线路,或3秒后自动跳过$http://127.0.0.1:10079/delay/"]); +} +lista.forEach(function(it){ + LISTS.push([it]); +}); +listq.forEach(function(it){ + LISTS.push([it]); +}); +`, + + }, + 搜索: `js: +pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd; +if (rule_fetch_params.headers.Cookie.startsWith("http")){ + rule_fetch_params.headers.Cookie=fetch(rule_fetch_params.headers.Cookie); + let cookie = rule_fetch_params.headers.Cookie; + setItem(RULE_CK, cookie); +}; +log('xzys seach cookie>>>>>>>>>>>>>' + rule_fetch_params.headers.Cookie); +let _fetch_params = JSON.parse(JSON.stringify(rule_fetch_params)); +log("xzys search params>>>>>>>>>>>>>>>" + JSON.stringify(_fetch_params)); +let search_html = request( HOST + '/search.html?keyword=' + encodeURIComponent(KEY), _fetch_params) +//log("xzys search result>>>>>>>>>>>>>>>" + search_html); +let d=[]; +let dlist = pdfa(search_html, 'div.container div.row div.list-boxes'); +dlist.forEach(function(it){ + let title = pdfh(it, 'h2 a img&&alt'); + if (searchObj.quick === true){ + if (title.includes(KEY)){ + title = KEY; + } + } + let img = pd(it, 'h2 a img&&src', HOST); + let content = pdfh(it, 'p.text_p&&Text'); + let desc = pdfh(it, 'div.list-actions&&Text'); //remark + let url = pd(it, 'h2 a&&href', HOST); + d.push({ + title:title, + img:img, + content:content, + desc:desc, + url:url + }) +}); +setResult(d); +`, +} \ No newline at end of file diff --git a/js/xiaosa/js/爱奇艺.js b/js/xiaosa/js/爱奇艺.js new file mode 100644 index 0000000..0ca0057 --- /dev/null +++ b/js/xiaosa/js/爱奇艺.js @@ -0,0 +1,1392 @@ +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": "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-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, + 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); + if (bata.url.includes("qiyi")) { + input = { + parse: 0, + url: bata.url, + jx: 0, + danmaku: "http://127.0.0.1:9978/proxy?do=danmu&site=js&url=http://dm.qxq6.com/zy/api.php?url=" + input.split("?")[0] + }; + } else { + input = { + parse: 0, + url: input.split("?")[0], + jx: 1, + danmaku: "http://127.0.0.1:9978/proxy?do=danmu&site=js&url=http://dm.qxq6.com/zy/api.php?url=" + input.split("?")[0] + }; + } + } catch { + input = { + parse: 0, + url: input.split("?")[0], + jx: 1, + danmaku: "http://127.0.0.1:9978/proxy?do=danmu&site=js&url=http://dm.qxq6.com/zy/api.php?url=" + input.split("?")[0] + }; + } + }), + // play_parse:true, + // 手动调用解析请求json的url,此lazy不方便 + // lazy:'js:input="https://cache.json.icu/home/api?type=ys&uid=292796&key=fnoryABDEFJNPQV269&url="+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 { + input = "push://" + input; + }), + double: false, + 推荐: '', + 一级: '', + 二级: $js.toString(() => { + const parts = input.replace(rule.host + "/", "").split('~~'); + if (decodeURIComponent(parts[0]) == "网络") { + const options = { + method: 'POST', + headers: {}, + body: { + 'url': urlencode(parts[2]), + 'title': decodeURIComponent(parts[1]) + } + }; + let html = request(rule.siteurl + "/api/other/save_url", options) + parts[2] = JSON.parse(html).data.url; + } + let picsm; + if (parts[2].includes("baidu")) { + picsm = rule.baidupic; + } else { + picsm = rule.pic; + } + let data = { + vod_name: decodeURIComponent(parts[1]), + vod_pic: picsm, + vod_play_from: '推送', + vod_play_url: "推送$" + parts[2] + }; + VOD = data; + }), + 搜索: $js.toString(() => { + let html2 = request(rule.siteurl + "/api/other/web_search?title=" + input.replace(rule.host + "/", "") + "&is_type=2"); + // console.log(html); + const strArray2 = html2.split('\n'); + for (const s of strArray2) { + if (s.includes('data') && !s.includes('DONE')) { + const jsonStr = s.replace(/^data:/, ''); + try { + const js = JSON.parse(jsonStr); + const name = js.title || ''; + const url = js.url || ''; + d.push({ + url: "网络" + "~~" + name + "~~" + url, + title: name, + img: rule.baidupic, + }) + } catch (e) { + console.error('解析JSON失败:', e); + } + } + } + + let html1 = request(rule.siteurl + "/api/other/web_search?title=" + input.replace(rule.host + "/", "") + "&is_type=0"); + // console.log(html); + const strArray = html1.split('\n'); + for (const s of strArray) { + if (s.includes('data') && !s.includes('DONE')) { + const jsonStr = s.replace(/^data:/, ''); + try { + const js = JSON.parse(jsonStr); + const name = js.title || ''; + const url = js.url || ''; + d.push({ + url: "网络" + "~~" + name + "~~" + url, + title: name, + img: rule.pic, + }) + } catch (e) { + console.error('解析JSON失败:', e); + } + } + } + + let html = request(rule.siteurl + "/s/" + input.replace(rule.host + "/", ""), {}) + const regex = /copyText\(\$event,'([^']+)','([^']+)'/g; + let matcher; + while ((matcher = regex.exec(html)) !== + null) { + const title = matcher[1]; + const url = matcher[2]; + let picsm; + if (url.includes("baidu")) { + picsm = rule.baidupic; + } else { + picsm = rule.pic; + } + d.push({ + url: "本地" + "~~" + title + "~~" + url, + title: title, + img: picsm, + }) + } + + setResult(d) + }), +} \ No newline at end of file diff --git a/js/xiaosa/js/腾讯视频.js b/js/xiaosa/js/腾讯视频.js new file mode 100644 index 0000000..6c70846 --- /dev/null +++ b/js/xiaosa/js/腾讯视频.js @@ -0,0 +1,935 @@ +globalThis.vod1 = function(ids) { + let html1 = request('https://pbaccess.video.qq.com/trpc.videosearch.mobile_search.MultiTerminalSearch/MbSearch?vplatform=2', { + body: { + "version": "25042201", + "clientType": 1, + "filterValue": "", + "uuid": "B1E50847-D25F-4C4B-BBA0-36F0093487F6", + "retry": 0, + "query": ids, + "pagenum": 0, + "isPrefetch": true, + "pagesize": 30, + "queryFrom": 0, + "searchDatakey": "", + "transInfo": "", + "isneedQc": true, + "preQid": "", + "adClientInfo": "", + "extraInfo": { + "isNewMarkLabel": "1", + "multi_terminal_pc": "1", + "themeType": "1", + "sugRelatedIds": "{}", + "appVersion": "" + } + }, + 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' + }, true); + return html1; +} +var rule = { + title: '腾云驾雾[官]', + host: 'https://v.%71%71.com', + // homeUrl: '/x/bu/pagesheet/list?_all=1&append=1&channel=choice&listpage=1&offset=0&pagesize=21&iarea=-1&sort=18', + homeUrl: '/x/bu/pagesheet/list?_all=1&append=1&channel=cartoon&listpage=1&offset=0&pagesize=21&iarea=-1&sort=18', + detailUrl: 'https://node.video.%71%71.com/x/api/float_vinfo2?cid=fyid', + searchUrl: '/x/search/?q=**&stag=fypage', + searchUrl: 'https://pbaccess.video.%71%71.com/trpc.videosearch.smartboxServer.HttpRountRecall/Smartbox?query=**&appID=3172&appKey=lGhFIPeD3HsO9xEp&pageNum=(fypage-1)&pageSize=10', + searchUrl: '**', + searchable: 2, + filterable: 1, + multi: 1, + // url:'/channel/fyclass?listpage=fypage&channel=fyclass&sort=18&_all=1', + url: '/x/bu/pagesheet/list?_all=1&append=1&channel=fyclass&listpage=1&offset=((fypage-1)*21)&pagesize=21&iarea=-1', + // filter_url: 'sort={{fl.sort or 18}}&year={{fl.year}}&pay={{fl.pay}}', + // filter_url: 'sort={{fl.sort or 75}}&year={{fl.year}}&pay={{fl.pay}}', + filter_url: 'sort={{fl.sort or 75}}&iyear={{fl.iyear}}&year={{fl.year}}&itype={{fl.type}}&ifeature={{fl.feature}}&iarea={{fl.area}}&itrailer={{fl.itrailer}}&gender={{fl.sex}}', + // filter: 'H4sIAAAAAAAAA+2UzUrDQBCA32XOEZLUJrGvIj0saaDBNisxBkIJCG3Fi4oepIg3EQoieqiH+vM23Zq+hRuaZLZ4ce9z2/lmd2d2+NgR+H0e+gF0DkdwFGTQgRMeJ2BAxIaSwvrqVnxcyzhlg9PttqjED2c/45cSy8DyIDcavr57q/lBw8XTd/E6qbnT8M3zTFyc72RtC/Jumd+2c8wy7KZ4nxSL5Z9uxHS+Gc+r83sWVp1eVttl4Dluk1h93YubWZVwduplAYuxoFguVp+P/y5om/Z+/YxyqfAW8pbKbeS2yi3kO/ebyE2Fy1nXXBm7DDzknspd5K7KHeSOytvI2+XAugYkKWlD2mhrM+RpSB8OmaNvTsriMEgycofc0XbHZ3HCeUTukDv67vTDQY/MIXO0zelxn5M4JI6mOPkvgswSEpgPAAA=', + filter: { + "choice": [{ + "key": "sort", + "name": "排序", + "value": [{ + "n": "最热", + "v": "75" + }, { + "n": "最新", + "v": "83" + }, { + "n": "好评", + "v": "81" + }] + }, { + "key": "iyear", + "name": "年代", + "value": [{ + "n": "全部", + "v": "-1" + }, { + "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" + }] + }], + "tv": [{ + "key": "sort", + "name": "排序", + "value": [{ + "n": "最热", + "v": "75" + }, { + "n": "最新", + "v": "79" + }, { + "n": "好评", + "v": "16" + }] + }, { + "key": "feature", + "name": "类型", + "value": [{ + "n": "全部", + "v": "-1" + }, { + "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": "13" + }, { + "n": "青春", + "v": "14" + }, { + "n": "猎奇", + "v": "15" + }, { + "n": "科幻", + "v": "16" + }, { + "n": "竞技", + "v": "17" + }, { + "n": "玄幻", + "v": "18" + }] + }, { + "key": "iyear", + "name": "年代", + "value": [{ + "n": "全部", + "v": "-1" + }, { + "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" + }] + }], + "movie": [{ + "key": "sort", + "name": "排序", + "value": [{ + "n": "最热", + "v": "75" + }, { + "n": "最新", + "v": "83" + }, { + "n": "好评", + "v": "81" + }] + }, { + "key": "type", + "name": "类型", + "value": [{ + "n": "全部", + "v": "-1" + }, { + "n": "犯罪", + "v": "4" + }, { + "n": "励志", + "v": "2" + }, { + "n": "喜剧", + "v": "100004" + }, { + "n": "热血", + "v": "100061" + }, { + "n": "悬疑", + "v": "100009" + }, { + "n": "爱情", + "v": "100005" + }, { + "n": "科幻", + "v": "100012" + }, { + "n": "恐怖", + "v": "100010" + }, { + "n": "动画", + "v": "100015" + }, { + "n": "战争", + "v": "100006" + }, { + "n": "家庭", + "v": "100017" + }, { + "n": "剧情", + "v": "100022" + }, { + "n": "奇幻", + "v": "100016" + }, { + "n": "武侠", + "v": "100011" + }, { + "n": "历史", + "v": "100021" + }, { + "n": "老片", + "v": "100013" + }, { + "n": "西部", + "v": "3" + }, { + "n": "记录片", + "v": "100020" + }] + }, { + "key": "year", + "name": "年代", + "value": [{ + "n": "全部", + "v": "-1" + }, { + "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" + }] + }], + "variety": [{ + "key": "sort", + "name": "排序", + "value": [{ + "n": "最热", + "v": "75" + }, { + "n": "最新", + "v": "23" + }] + }, { + "key": "iyear", + "name": "年代", + "value": [{ + "n": "全部", + "v": "-1" + }, { + "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" + }] + }], + "cartoon": [{ + "key": "sort", + "name": "排序", + "value": [{ + "n": "最热", + "v": "75" + }, { + "n": "最新", + "v": "83" + }, { + "n": "好评", + "v": "81" + }] + }, { + "key": "area", + "name": "地区", + "value": [{ + "n": "全部", + "v": "-1" + }, { + "n": "内地", + "v": "1" + }, { + "n": "日本", + "v": "2" + }, { + "n": "欧美", + "v": "3" + }, { + "n": "其他", + "v": "4" + }] + }, { + "key": "type", + "name": "类型", + "value": [{ + "n": "全部", + "v": "-1" + }, { + "n": "玄幻", + "v": "9" + }, { + "n": "科幻", + "v": "4" + }, { + "n": "武侠", + "v": "13" + }, { + "n": "冒险", + "v": "3" + }, { + "n": "战斗", + "v": "5" + }, { + "n": "搞笑", + "v": "1" + }, { + "n": "恋爱", + "v": "7" + }, { + "n": "魔幻", + "v": "6" + }, { + "n": "竞技", + "v": "20" + }, { + "n": "悬疑", + "v": "17" + }, { + "n": "日常", + "v": "15" + }, { + "n": "校园", + "v": "16" + }, { + "n": "真人", + "v": "18" + }, { + "n": "推理", + "v": "14" + }, { + "n": "历史", + "v": "19" + }, { + "n": "经典", + "v": "3" + }, { + "n": "其他", + "v": "12" + }] + }, { + "key": "iyear", + "name": "年代", + "value": [{ + "n": "全部", + "v": "-1" + }, { + "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" + }] + }], + "child": [{ + "key": "sort", + "name": "排序", + "value": [{ + "n": "最热", + "v": "75" + }, { + "n": "最新", + "v": "76" + }, { + "n": "好评", + "v": "20" + }] + }, { + "key": "sex", + "name": "性别", + "value": [{ + "n": "全部", + "v": "-1" + }, { + "n": "女孩", + "v": "1" + }, { + "n": "男孩", + "v": "2" + }] + }, { + "key": "area", + "name": "地区", + "value": [{ + "n": "全部", + "v": "-1" + }, { + "n": "内地", + "v": "3" + }, { + "n": "日本", + "v": "2" + }, { + "n": "其他", + "v": "1" + }] + }, { + "key": "iyear", + "name": "年龄段", + "value": [{ + "n": "全部", + "v": "-1" + }, { + "n": "0-3岁", + "v": "1" + }, { + "n": "4-6岁", + "v": "2" + }, { + "n": "7-9岁", + "v": "3" + }, { + "n": "10岁以上", + "v": "4" + }, { + "n": "全年龄段", + "v": "7" + }] + }], + "doco": [{ + "key": "sort", + "name": "排序", + "value": [{ + "n": "最热", + "v": "75" + }, { + "n": "最新", + "v": "74" + }] + }, { + "key": "itrailer", + "name": "出品方", + "value": [{ + "n": "全部", + "v": "-1" + }, { + "n": "BBC", + "v": "1" + }, { + "n": "国家地理", + "v": "4" + }, { + "n": "HBO", + "v": "3175" + }, { + "n": "NHK", + "v": "2" + }, { + "n": "历史频道", + "v": "7" + }, { + "n": "ITV", + "v": "3530" + }, { + "n": "探索频道", + "v": "3174" + }, { + "n": "ZDF", + "v": "3176" + }, { + "n": "腾讯自制", + "v": "15" + }, { + "n": "合作机构", + "v": "6" + }, { + "n": "其他", + "v": "5" + }] + }, { + "key": "type", + "name": "类型", + "value": [{ + "n": "全部", + "v": "-1" + }, { + "n": "自然", + "v": "4" + }, { + "n": "美食", + "v": "10" + }, { + "n": "社会", + "v": "3" + }, { + "n": "人文", + "v": "6" + }, { + "n": "历史", + "v": "1" + }, { + "n": "军事", + "v": "2" + }, { + "n": "科技", + "v": "8" + }, { + "n": "财经", + "v": "14" + }, { + "n": "探险", + "v": "15" + }, { + "n": "罪案", + "v": "7" + }, { + "n": "竞技", + "v": "12" + }, { + "n": "旅游", + "v": "11" + }] + }] + }, + headers: { + 'User-Agent': 'PC_UA' + }, + timeout: 5000, + // class_parse:'.site_channel a;a&&Text;a&&href;channel/(.*)', + cate_exclude: '会员|游戏|全部', + // class_name: '精选&电视剧&电影&综艺&动漫&少儿&纪录片', + // class_url: 'choice&tv&movie&variety&cartoon&child&doco', + class_name: '精选&电影&电视剧&综艺&动漫&少儿&纪录片', + class_url: 'choice&movie&tv&variety&cartoon&child&doco', + limit: 20, + // play_parse:true, + // 手动调用解析请求json的url,此lazy不方便 + play_parse: true, + lazy: $js.toString(() => { + try { + let api = "http://127.0.0.1:9978/proxy?do=seachdanmu&go=getuserjx&url=" + 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&site=js&url=http://dm.qxq6.com/zy/api.php?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&site=js&url=http://dm.qxq6.com/zy/api.php?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&site=js&url=http://dm.qxq6.com/zy/api.php?url=' + input.split("?")[0] + }; + } + }), + 推荐: '.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 list = []; + 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.%71%71.com/detail/m/" + cid + ".html"; + log("详情页:" + detailUrl); + pdfh = jsp.pdfh; + pd = jsp.pd; + 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) { + log("解析片名海报等基础信息发生错误:" + e.message) + } + 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, + desc: item.episode_number + "\t\t\t播放量:" + item.thirdLine, + 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]; + 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 yg = d.filter(function(it) { + return it.type && it.type !== "正片" + }); + let zp = d.filter(function(it) { + return !(it.type && it.type !== "正片") + }); + VOD.vod_play_from = yg.length < 1 ? "qq" : "qq$$$qq 预告及花絮"; + VOD.vod_play_url = yg.length < 1 ? d.map(function(it) { + return it.title + "$" + it.url + }).join("#") : [zp, yg].map(function(it) { + return it.map(function(its) { + return its.title + "$" + its.url + }).join("#") + }).join("$$$"); + }), + 搜索: $js.toString(() => { + let d = []; + pdfa = jsp.pdfa; + pdfh = jsp.pdfh; + pd = jsp.pd; + let html = request(input); + let baseList = pdfa(html, "body&&.result_item_v"); + log(baseList.length); + baseList.forEach(function(it) { + let longText = pdfh(it, ".result_title&&a&&Text"); + let shortText = pdfh(it, ".type&&Text"); + let fromTag = pdfh(it, ".result_source&&Text"); + let score = pdfh(it, ".figure_info&&Text"); + let content = pdfh(it, ".desc_text&&Text"); + // let url = pdfh(it, ".result_title&&a&&href"); + let url = pdfh(it, "div&&r-data"); + // log(longText); + // log(shortText); + // log('url:'+url); + let img = pd(it, ".figure_pic&&src"); + url = "https://node.video.qq.com/x/api/float_vinfo2?cid=" + url.match(/.*\/(.*?)\.html/)[1]; + log(shortText + "|" + url); + if (fromTag.match(/腾讯/)) { + d.push({ + title: longText.split(shortText)[0], + img: img, + url: url, + content: content, + desc: shortText + " " + score + }) + } + }); + setResult(d); + }), + 搜索: $js.toString(() => { + let d = []; + let html = request(input); + let json = JSON.parse(html); + if (json.data.smartboxItemList.length > 0) { + let cid = json.data.smartboxItemList[0].basicDoc.id; + let url = 'https://node.video.qq.com/x/api/float_vinfo2?cid=' + cid; + let html1 = request(url); + let data = JSON.parse(html1); + + d.push({ + title: data.c.title, + img: data.c.pic, + url: url, + content: data.c.description, + desc: data.rec + }); + } + setResult(d); + }), + 搜索: $js.toString(() => { + let d = []; + let mame = (input.split("/")[3]); + let html = vod1(input.split("/")[3]); + let json = JSON.parse(html); + + let list = json.data.normalList.itemList; + console.log(json); + log(list[0].videoInfo.title); + list.forEach(function(it) { + try { + if (it.doc.id.length > 11) { + d.push({ + title: it.videoInfo.title, + img: it.videoInfo.imgUrl, + url: it.doc.id, + // content: "", + //desc: "data.rec" + }); + } + } catch { + + } + + }); + let list2 = json.data.areaBoxList[0].itemList; + list2.forEach(function(it) { + try { + if (it.doc.id.length > 11 && it.videoInfo.title.match(mame)) { + d.push({ + title: it.videoInfo.title, + img: it.videoInfo.imgUrl, + url: it.doc.id, + // content: "", + //desc: "data.rec" + }); + } + } catch { + + } + + }); + setResult(d); + }) +} \ No newline at end of file diff --git a/js/xiaosa/js/芒果视频.js b/js/xiaosa/js/芒果视频.js new file mode 100644 index 0000000..d8e7d09 --- /dev/null +++ b/js/xiaosa/js/芒果视频.js @@ -0,0 +1,843 @@ +var rule = { + title: '百忙无果[官]', + host: 'https://pianku.api.%6d%67%74%76.com', + homeUrl: '', + // searchUrl: 'https://mobileso.bz.%6d%67%74%76.com/pc/search/v1?q=**&pn=fypage&pc=10', + // 新版接口搜索变成v2并且加了验证,蛋疼 + // searchUrl: 'https://mobileso.bz.mgtv.com/pc/search/v2?allowedRC=1&src=mgtv&did=cf03b959-6945-4cb6-bcb3-88762459354d×tamp=2024-06-21T15%3A52%3A55Z&signVersion=1&signNonce=8dae67a1fafc4bda984ec8deb47666ad&q=**&pn=fypage&pc=10&corr=1&_support=10000000&signature=4e27fddcd2a1a66d6c1764ed6b74bab7', + // 用手机的吧,搞不定这个 + 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, + // 分类链接fypage参数支持1个()表达式 + // https://www.mgtv.com/lib/3?lastp=list_index&kind=a1&year=all&chargeInfo=a1&sort=c2 + 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: '2&3&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); + if (bata.url.includes("mgtv")) { + input = { + parse: 0, + url: bata.url, + jx: 0, + danmaku: "http://127.0.0.1:9978/proxy?do=danmu&site=js&url=http://dm.qxq6.com/zy/api.php?url=" + input.split("?")[0] + }; + } else { + input = { + parse: 0, + url: input.split("?")[0], + jx: 1, + danmaku: "http://127.0.0.1:9978/proxy?do=danmu&site=js&url=http://dm.qxq6.com/zy/api.php?url=" + input.split("?")[0] + }; + } + } catch { + input = { + parse: 0, + url: input.split("?")[0], + jx: 1, + danmaku: "http://127.0.0.1:9978/proxy?do=danmu&site=js&url=http://dm.qxq6.com/zy/api.php?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/js/xiaosa/js/花子动漫.js b/js/xiaosa/js/花子动漫.js new file mode 100644 index 0000000..f669f44 --- /dev/null +++ b/js/xiaosa/js/花子动漫.js @@ -0,0 +1,970 @@ +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": "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": "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": "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/js/xiaosa/js/路漫漫.js b/js/xiaosa/js/路漫漫.js new file mode 100644 index 0000000..d781efa --- /dev/null +++ b/js/xiaosa/js/路漫漫.js @@ -0,0 +1,549 @@ +var rule = { + title: "路漫漫", + host: "http://www.lmm36.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": "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": "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": "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": "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": "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": "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_.*?=(.*?) { + function getClasses(item) { + let classes = []; + if (item.class_name && item.class_url) { + if (!/&|电影|电视剧|综艺|动漫[\u4E00-\u9FA5]+/.test(item.class_name)) { + try { + item.class_name = ungzip(item.class_name) + } catch (e) { + log(`不识别的class_name导致gzip解码失败:${e}`) + return classes + } + } + let names = item.class_name.split('&'); + let urls = item.class_url.split('&'); + let cnt = Math.min(names.length, urls.length); + for (let i = 0; i < cnt; i++) { + classes.push({ + 'type_id': urls[i], + 'type_name': names[i] + }); + } + } + return classes + } + if (typeof(batchFetch) === 'function') { + rule.search_limit = 16; + log('当前程序支持批量请求[batchFetch],搜索限制已设置为16'); + } + let _url = rule.params; + log(`传入参数:${_url}`); + if (_url && typeof(_url) === 'string' && /^(http|file)/.test(_url)) { + if (_url.includes('$')) { + let _url_params = _url.split('$'); + _url = _url_params[0]; + rule.search_match = !!(_url_params[1]); + if (_url_params.length > 2) { + rule.search_pic = !!(_url_params[2]); + } + } + let html = request(_url); + let json = JSON.parse(html); + let _classes = []; + rule.filter = {}; + rule.filter_def = {}; + json.forEach(it => { + let _obj = { + type_name: it.name, + type_id: it.url, + parse_url: it.parse_url || '', + searchable: it.searchable !== 0, + api: it.api || '', + cate_exclude: it.cate_exclude || '', + cate_excludes: it.cate_excludes || [], + }; + _classes.push(_obj); + try { + let json1 = []; + if (it.class_name && it.class_url) { + json1 = getClasses(it); + } else { + json1 = JSON.parse(request(urljoin(_obj.type_id, _obj.api || rule.classUrl))).class; + } + if (_obj.cate_excludes && Array.isArray(_obj.cate_excludes) && _obj.cate_excludes.length > 0) { + json1 = json1.filter(cl => !_obj.cate_excludes.includes(cl.type_name)); + } else if (_obj.cate_exclude) { + json1 = json1.filter(cl => !new RegExp(_obj.cate_exclude, 'i').test(cl.type_name)); + } + rule.filter[_obj.type_id] = [{ + "key": "类型", + "name": "类型", + "value": json1.map(i => { + return { + "n": i.type_name, + 'v': i.type_id + } + }) + }]; + if (json1.length > 0) { + rule.filter_def[it.url] = { + "类型": json1[0].type_id + }; + } + } catch (e) { + rule.filter[it.url] = [{ + "key": "类型", + "name": "类型", + "value": [{ + "n": "全部", + "v": "" + }] + }]; + } + }); + rule.classes = _classes; + } + }), + class_parse: $js.toString(() => { + input = rule.classes; + }), + 推荐: $js.toString(() => { + VODS = []; + if (rule.classes) { + let randomClass = getRandomItem(rule.classes); + let _url = urljoin(randomClass.type_id, input); + if (randomClass.api) { + _url = _url.replace('/api.php/provide/vod/', randomClass.api) + } + try { + let html = request(_url, { + timeout: rule.timeout + }); + let json = JSON.parse(html); + VODS = json.list; + VODS.forEach(it => { + it.vod_id = randomClass.type_id + '$' + it.vod_id; + it.vod_remarks = it.vod_remarks + '|' + randomClass.type_name; + }); + } catch (e) {} + } + }), + 一级: $js.toString(() => { + VODS = []; + if (rule.classes) { + let _url = urljoin(MY_CATE, input); + let current_vod = rule.classes.find(item => item.type_id === MY_CATE); + if (current_vod && current_vod.api) { + _url = _url.replace('/api.php/provide/vod/', current_vod.api) + } + let html = request(_url); + let json = JSON.parse(html); + VODS = json.list; + VODS.forEach(it => { + it.vod_id = MY_CATE + '$' + it.vod_id + }); + } + }), + 二级: $js.toString(() => { + VOD = {}; + if (orId === 'update_info') { + VOD = { + vod_content: rule.update_info.trim(), + vod_name: '更新日志', + type_name: '更新日志', + vod_pic: 'https://resource-cdn.tuxiaobei.com/video/FtWhs2mewX_7nEuE51_k6zvg6awl.png', + vod_remarks: `版本:${rule.version}`, + vod_play_from: '道长在线', + vod_play_url: '随机小视频$http://api.yujn.cn/api/zzxjj.php', + }; + } else { + if (rule.classes) { + let _url = urljoin(fyclass, input); + let current_vod = rule.classes.find(item => item.type_id === fyclass); + if (current_vod && current_vod.api) { + _url = _url.replace('/api.php/provide/vod/', current_vod.api) + } + let html = request(_url); + let json = JSON.parse(html); + let data = json.list; + VOD = data[0]; + if (current_vod && current_vod.type_name) { + VOD.vod_play_from = VOD.vod_play_from.split('$$$').map(it => current_vod.type_name + '|' + it).join('$$$') + } + } + } + }), + 搜索: $js.toString(() => { + VODS = []; + if (rule.classes) { + let canSearch = rule.classes.filter(it => it.searchable); + let page = Number(MY_PAGE); + page = (MY_PAGE - 1) % Math.ceil(canSearch.length / rule.search_limit) + 1; + let truePage = Math.ceil(MY_PAGE / Math.ceil(canSearch.length / rule.search_limit)); + if (rule.search_limit) { + let start = (page - 1) * rule.search_limit; + let end = page * rule.search_limit; + let t1 = new Date().getTime(); + let searchMode = typeof(batchFetch) === 'function' ? '批量' : '单个'; + log('start:' + start); + log('end:' + end); + log('搜索模式:' + searchMode); + log('精准搜索:' + rule.search_match); + log('强制获取图片:' + rule.search_pic); + if (start < canSearch.length) { + let search_classes = canSearch.slice(start, end); + let urls = []; + search_classes.forEach(it => { + let _url = urljoin(it.type_id, input); + if (it.api) { + _url = _url.replace('/api.php/provide/vod/', it.api) + } + _url = _url.replace("#TruePage#", "" + truePage); + urls.push(_url); + }); + let results_list = []; + let results = []; + if (typeof(batchFetch) === 'function') { + let reqUrls = urls.map(it => { + return { + url: it, + options: { + timeout: rule.timeout + } + } + }); + let rets = batchFetch(reqUrls); + let detailUrls = []; + let detailUrlCount = 0; + rets.forEach((ret, idx) => { + let it = search_classes[idx]; + if (ret) { + try { + let json = JSON.parse(ret); + let data = json.list; + data.forEach(i => { + i.site_name = it.type_name; + i.vod_id = it.type_id + '$' + i.vod_id; + i.vod_remarks = i.vod_remarks + '|' + it.type_name; + }); + if (rule.search_match) { + data = data.filter(item => item.vod_name && (new RegExp(KEY, 'i')).test(item.vod_name)) + } + if (data.length > 0) { + if (rule.search_pic && !data[0].vod_pic) { + log(`当前搜索站点【${it.type_name}】没图片,尝试访问二级去获取图片`); + let detailUrl = urls[idx].split('wd=')[0] + 'ac=detail&ids=' + data.map(k => k.vod_id.split('$')[1]).join(','); + detailUrls.push(detailUrl); + results_list.push({ + data: data, + has_pic: false, + detailUrlCount: detailUrlCount + }); + detailUrlCount++; + } else { + results_list.push({ + data: data, + has_pic: true + }); + } + } + } catch (e) { + log(`请求:${it.type_id}发生错误:${e.message}`) + } + } + }); + let reqUrls2 = detailUrls.map(it => { + return { + url: it, + options: { + timeout: rule.timeout + } + } + }); + let rets2 = reqUrls2.length > 0 ? batchFetch(reqUrls2) : []; + for (let k = 0; k < results_list.length; k++) { + let result_data = results_list[k].data; + if (!results_list[k].has_pic) { + try { + let detailJson = JSON.parse(rets2[results_list[k].detailUrlCount]); + log('二级数据列表元素数:' + detailJson.list.length); + result_data.forEach((d, _seq) => { + let detailVodPic = detailJson.list.find(vod => vod.vod_id.toString() === d.vod_id.split('$')[1]); + if (detailVodPic) { + Object.assign(d, { + vod_pic: detailVodPic.vod_pic + }); + } + }); + } catch (e) { + log(`强制获取网站${result_data[0].site_name}的搜索图片失败:${e.message}`); + } + } + results = results.concat(result_data); + } + } else { + urls.forEach((_url, idx) => { + let it = search_classes[idx]; + try { + let html = request(_url); + let json = JSON.parse(html); + let data = json.list; + data.forEach(i => { + i.vod_id = it.type_id + '$' + i.vod_id; + i.vod_remarks = i.vod_remarks + '|' + it.type_name; + }); + if (rule.search_match) { + data = data.filter(item => item.vod_name && (new RegExp(KEY, 'i')).test(item.vod_name)) + } + if (data.length > 0) { + if (rule.search_pic && !data[0].vod_pic) { + log(`当前搜索站点【${it.type_name}】没图片,尝试访问二级去获取图片`); + let detailUrl = urls[idx].split('wd=')[0] + 'ac=detail&ids=' + data.map(k => k.vod_id.split('$')[1]).join(','); + try { + let detailJson = JSON.parse(request(detailUrl)); + log('二级数据列表元素数:' + detailJson.list.length); + data.forEach((d, _seq) => { + let detailVodPic = detailJson.list.find(vod => vod.vod_id.toString() === d.vod_id.split('$')[1]); + if (detailVodPic) { + Object.assign(d, { + vod_pic: detailVodPic.vod_pic + }); + } + }); + } catch (e) { + log(`强制获取网站${it.type_id}的搜索图片失败:${e.message}`); + } + } + results = results.concat(data); + } + results = results.concat(data); + } catch (e) { + log(`请求:${it.type_id}发生错误:${e.message}`) + } + }); + } + VODS = results; + let t2 = new Date().getTime(); + log(`${searchMode}搜索:${urls.length}个站耗时:${(Number(t2) - Number(t1))}ms`) + } + } + } + }), + lazy: $js.toString(() => { + let parse_url = ''; + if (flag && flag.includes('|')) { + let type_name = flag.split('|')[0]; + let current_vod = rule.classes.find(item => item.type_name === type_name); + if (current_vod && current_vod.parse_url) { + parse_url = current_vod.parse_url + } + } + if (/\.(m3u8|mp4)/.test(input)) { + input = { + parse: 0, + url: input + } + } else { + if (parse_url.startsWith('json:')) { + let purl = parse_url.replace('json:', '') + input; + let html = request(purl); + input = { + parse: 0, + url: JSON.parse(html).url + } + } else { + input = parse_url + input; + } + } + }), +} \ No newline at end of file diff --git a/js/xiaosa/json/123.json b/js/xiaosa/json/123.json new file mode 100644 index 0000000..8ca8fce --- /dev/null +++ b/js/xiaosa/json/123.json @@ -0,0 +1,25 @@ +{ + "SiteUrl": "https://123panfx.com,https://pan1.me", + "Classes": [ + { + "type_name": "电影", + "type_id": "2" + }, + { + "type_name": "剧集", + "type_id": "48" + }, + { + "type_name": "4K原盘", + "type_id": "56" + }, + { + "type_name": "综艺", + "type_id": "52" + }, + { + "type_name": "动漫", + "type_id": "37" + } + ] +} \ No newline at end of file diff --git a/js/xiaosa/json/aliShare.json b/js/xiaosa/json/aliShare.json new file mode 100644 index 0000000..5fc43c8 --- /dev/null +++ b/js/xiaosa/json/aliShare.json @@ -0,0 +1,105 @@ +[ + { + "name": "我的网盘", + "folders": [ + { + "shareId": "", + "folder": "root" + } + ] + }, + { + "name": "短剧合集", + "folders": [ + { + "shareId": "Y5wMKfVDD6K", + "folder": "6616613853041ba53f2842918e02346943d980b4" + } + ] + }, + { + "name": "动漫合集", + "folders": [ + { + "shareId": "LEaepiYfxcw", + "folder": "61019a966975bfef583449a39b36da512384b2d7" + } + ] + }, + { + "name": "电影合集", + "folders": [ + { + "shareId": "ZHNChQfiPfk", + "folder": "root" + }, + { + "shareId": "e27BPgDwxeA", + "folder": "root" + }, + { + "shareId": "XUH7r6BZuML", + "folder": "root" + }, + { + "shareId": "qZ4f1i2EFW2", + "folder": "root" + }, + { + "shareId": "ohJ68NV7iFw", + "folder": "root" + } + ] + }, + { + "name": "电视剧合集", + "folders": [ + { + "shareId": "ftMhRaKUfYp", + "folder": "root" + }, + { + "shareId": "MLWPRHRt9W3", + "folder": "root" + }, + { + "shareId": "8Fg4TNsd2A2", + "folder": "root" + }, + { + "shareId": "ar8Kg9azw1S", + "folder": "root" + }, + { + "shareId": "GMYSz3AHFaA", + "folder": "root" + } + ] + }, + { + "name": "综艺合集", + "folders": [ + { + "shareId": "UuHi9PeYSVz", + "folder": "root" + }, + { + "shareId": "v9To3HC6vhs", + "folder": "root" + } + ] + }, + { + "name": "其它合集", + "folders": [ + { + "shareId": "4ydLxf7VgH7", + "folder": "root" + }, + { + "shareId": "uWa9gbM3RJ7", + "folder": "root" + } + ] + } +] \ No newline at end of file diff --git a/js/xiaosa/json/alist.json b/js/xiaosa/json/alist.json new file mode 100644 index 0000000..a6ac9a8 --- /dev/null +++ b/js/xiaosa/json/alist.json @@ -0,0 +1,21 @@ +{ + "vodPic": "https://rogsoft.ddnsto.com/softcenter/softcenter/res/icon-alist.png", + "drives": [ + { + "name": "小雅", + "server": "http://alist.xiaoya.pro" + }, + { + "name": "触光", + "server": "https://pan.ichuguang.com" + }, + { + "name": "魔都云", + "server": "https://cdn.modupan.com" + }, + { + "name": "七米蓝", + "server": "https://al.chirmyram.com" + } + ] +} \ No newline at end of file diff --git a/js/xiaosa/json/aliyunpansearch.json b/js/xiaosa/json/aliyunpansearch.json new file mode 100644 index 0000000..03d8470 --- /dev/null +++ b/js/xiaosa/json/aliyunpansearch.json @@ -0,0 +1,199 @@ +{ + "classes": [ + { + "type_name": "电影", + "type_id": "dy" + }, + { + "type_name": "电视", + "type_id": "ds" + }, + { + "type_name": "短剧", + "type_id": "dj" + }, + { + "type_name": "综艺", + "type_id": "zy" + }, + { + "type_name": "动漫", + "type_id": "dm" + }, + { + "type_name": "音乐", + "type_id": "yy" + } + ], + "filters": { + "dy": [ + { + "key": "root", + "name": "来源", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "夸克", + "v": "2" + }, + { + "n": "UC", + "v": "5" + }, + { + "n": "阿里", + "v": "1" + }, + { + "n": "百度", + "v": "4" + } + ] + } + ], + "ds": [ + { + "key": "root", + "name": "来源", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "夸克", + "v": "2" + }, + { + "n": "UC", + "v": "5" + }, + { + "n": "阿里", + "v": "1" + }, + { + "n": "百度", + "v": "4" + } + ] + } + ], + "dj": [ + { + "key": "root", + "name": "来源", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "夸克", + "v": "2" + }, + { + "n": "UC", + "v": "5" + }, + { + "n": "阿里", + "v": "1" + }, + { + "n": "百度", + "v": "4" + } + ] + } + ], + "zy": [ + { + "key": "root", + "name": "来源", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "夸克", + "v": "2" + }, + { + "n": "UC", + "v": "5" + }, + { + "n": "阿里", + "v": "1" + }, + { + "n": "百度", + "v": "4" + } + ] + } + ], + "dm": [ + { + "key": "root", + "name": "来源", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "夸克", + "v": "2" + }, + { + "n": "UC", + "v": "5" + }, + { + "n": "阿里", + "v": "1" + }, + { + "n": "百度", + "v": "4" + } + ] + } + ], + "yy": [ + { + "key": "root", + "name": "来源", + "value": [ + { + "n": "全部", + "v": "0" + }, + { + "n": "夸克", + "v": "2" + }, + { + "n": "UC", + "v": "5" + }, + { + "n": "阿里", + "v": "1" + }, + { + "n": "百度", + "v": "4" + } + ] + } + ] + }, + "siteUrl": "https://ys1api.yingso.fun/v7/ali/all" +} \ No newline at end of file diff --git a/js/xiaosa/json/am.json b/js/xiaosa/json/am.json new file mode 100644 index 0000000..d7aab28 --- /dev/null +++ b/js/xiaosa/json/am.json @@ -0,0 +1,31 @@ +{ + "SiteUrl": "https://vip.omii.top", + "Domains": [ + "https://vip.omii.top", + "https://omtv.top" + ], + "SiteWord": "am", + "SiteName": "奥秘", + "Classes": [ + { + "type_name": "电影", + "type_id": "30" + }, + { + "type_name": "剧集", + "type_id": "31" + }, + { + "type_name": "动漫", + "type_id": "32" + }, + { + "type_name": "综艺", + "type_id": "33" + }, + { + "type_name": "短剧", + "type_id": "34" + } + ] +} \ No newline at end of file diff --git a/js/xiaosa/json/bj.json b/js/xiaosa/json/bj.json new file mode 100644 index 0000000..1dc35f9 --- /dev/null +++ b/js/xiaosa/json/bj.json @@ -0,0 +1,1463 @@ +{ + "SiteUrl": "", + "Domains": [ + "http://cj.jiexi.news", + "http://baijia.dpdns.org", + "http://bj.885525.xyz", + "http://baijia.filegear-sg.me" + ], + "SiteWord": "bj", + "SiteName": "百家", + "Classes": [ + { + "type_name": "百家电影", + "type_id": "1" + }, + { + "type_name": "百家剧集", + "type_id": "2" + }, + { + "type_name": "百家综艺", + "type_id": "3" + }, + { + "type_name": "百家动漫", + "type_id": "4" + }, + { + "type_name": "臻彩世界", + "type_id": "39" + }, + { + "type_name": "天翼&123", + "type_id": "38" + } + ], + "Filters": { + "1": [ + { + "name": "剧情", + "value": [ + { + "v": "喜剧", + "n": "喜剧" + }, + { + "v": "爱情", + "n": "爱情" + }, + { + "v": "恐怖", + "n": "恐怖" + }, + { + "v": "动作", + "n": "动作" + }, + { + "v": "科幻", + "n": "科幻" + }, + { + "v": "剧情", + "n": "剧情" + }, + { + "v": "战争", + "n": "战争" + }, + { + "v": "警匪", + "n": "警匪" + }, + { + "v": "犯罪", + "n": "犯罪" + }, + { + "v": "动画", + "n": "动画" + }, + { + "v": "奇幻", + "n": "奇幻" + }, + { + "v": "武侠", + "n": "武侠" + }, + { + "v": "冒险", + "n": "冒险" + }, + { + "v": "枪战", + "n": "枪战" + }, + { + "v": "恐怖", + "n": "恐怖" + }, + { + "v": "悬疑", + "n": "悬疑" + }, + { + "v": "惊悚", + "n": "惊悚" + }, + { + "v": "经典", + "n": "经典" + }, + { + "v": "青春", + "n": "青春" + }, + { + "v": "文艺", + "n": "文艺" + }, + { + "v": "微电影", + "n": "微电影" + }, + { + "v": "古装", + "n": "古装" + }, + { + "v": "历史", + "n": "历史" + }, + { + "v": "运动", + "n": "运动" + }, + { + "v": "农村", + "n": "农村" + }, + { + "v": "儿童", + "n": "儿童" + }, + { + "v": "网络电影", + "n": "网络电影" + } + ], + "key": "class" + }, + { + "name": "地区", + "value": [ + { + "v": "大陆", + "n": "大陆" + }, + { + "v": "香港", + "n": "香港" + }, + { + "v": "台湾", + "n": "台湾" + }, + { + "v": "美国", + "n": "美国" + }, + { + "v": "法国", + "n": "法国" + }, + { + "v": "英国", + "n": "英国" + }, + { + "v": "日本", + "n": "日本" + }, + { + "v": "韩国", + "n": "韩国" + }, + { + "v": "德国", + "n": "德国" + }, + { + "v": "泰国", + "n": "泰国" + }, + { + "v": "印度", + "n": "印度" + }, + { + "v": "意大利", + "n": "意大利" + }, + { + "v": "西班牙", + "n": "西班牙" + }, + { + "v": "加拿大", + "n": "加拿大" + }, + { + "v": "其他", + "n": "其他" + } + ], + "key": "area" + }, + { + "name": "语言", + "value": [ + { + "v": "国语", + "n": "国语" + }, + { + "v": "英语", + "n": "英语" + }, + { + "v": "粤语", + "n": "粤语" + }, + { + "v": "闽南语", + "n": "闽南语" + }, + { + "v": "韩语", + "n": "韩语" + }, + { + "v": "日语", + "n": "日语" + }, + { + "v": "法语", + "n": "法语" + }, + { + "v": "德语", + "n": "德语" + }, + { + "v": "其它", + "n": "其它" + } + ], + "key": "lang" + }, + { + "name": "时间", + "value": [ + { + "v": "2024", + "n": "2024" + }, + { + "v": "2023", + "n": "2023" + }, + { + "v": "2022", + "n": "2022" + }, + { + "v": "2021", + "n": "2021" + }, + { + "v": "2020", + "n": "2020" + }, + { + "v": "2019", + "n": "2019" + }, + { + "v": "2018", + "n": "2018" + }, + { + "v": "2017", + "n": "2017" + }, + { + "v": "2016", + "n": "2016" + }, + { + "v": "2015", + "n": "2015" + }, + { + "v": "2014", + "n": "2014" + }, + { + "v": "2013", + "n": "2013" + }, + { + "v": "2012", + "n": "2012" + }, + { + "v": "2011", + "n": "2011" + }, + { + "v": "2010", + "n": "2010" + } + ], + "key": "year" + }, + { + "name": "字母查找", + "value": [ + { + "v": "A", + "n": "A" + }, + { + "v": "B", + "n": "B" + }, + { + "v": "C", + "n": "C" + }, + { + "v": "D", + "n": "D" + }, + { + "v": "E", + "n": "E" + }, + { + "v": "F", + "n": "F" + }, + { + "v": "G", + "n": "G" + }, + { + "v": "H", + "n": "H" + }, + { + "v": "I", + "n": "I" + }, + { + "v": "J", + "n": "J" + }, + { + "v": "K", + "n": "K" + }, + { + "v": "L", + "n": "L" + }, + { + "v": "M", + "n": "M" + }, + { + "v": "N", + "n": "N" + }, + { + "v": "O", + "n": "O" + }, + { + "v": "P", + "n": "P" + }, + { + "v": "Q", + "n": "Q" + }, + { + "v": "R", + "n": "R" + }, + { + "v": "S", + "n": "S" + }, + { + "v": "T", + "n": "T" + }, + { + "v": "U", + "n": "U" + }, + { + "v": "V", + "n": "V" + }, + { + "v": "W", + "n": "W" + }, + { + "v": "X", + "n": "X" + }, + { + "v": "Y", + "n": "Y" + }, + { + "v": "Z", + "n": "Z" + }, + { + "v": "0-9", + "n": "0-9" + } + ], + "key": "character" + }, + { + "name": "评分排序", + "value": [ + { + "v": "time", + "n": "时间排序" + }, + { + "v": "hits", + "n": "人气排序" + }, + { + "v": "score", + "n": "评分排序" + } + ], + "key": "order" + } + ], + "2": [ + { + "name": "类型", + "value": [ + { + "v": "13", + "n": "国产剧" + }, + { + "v": "14", + "n": "欧美剧" + }, + { + "v": "15", + "n": "日韩剧" + }, + { + "v": "16", + "n": "港台剧" + }, + { + "v": "23", + "n": "泰剧" + } + ], + "key": "type" + }, + { + "name": "剧情", + "value": [ + { + "v": "古装", + "n": "古装" + }, + { + "v": "战争", + "n": "战争" + }, + { + "v": "青春偶像", + "n": "青春偶像" + }, + { + "v": "喜剧", + "n": "喜剧" + }, + { + "v": "家庭", + "n": "家庭" + }, + { + "v": "犯罪", + "n": "犯罪" + }, + { + "v": "动作", + "n": "动作" + }, + { + "v": "奇幻", + "n": "奇幻" + }, + { + "v": "剧情", + "n": "剧情" + }, + { + "v": "历史", + "n": "历史" + }, + { + "v": "经典", + "n": "经典" + }, + { + "v": "乡村", + "n": "乡村" + }, + { + "v": "情景", + "n": "情景" + }, + { + "v": "商战", + "n": "商战" + }, + { + "v": "网剧", + "n": "网剧" + }, + { + "v": "其他", + "n": "其他" + } + ], + "key": "class" + }, + { + "name": "地区", + "value": [ + { + "v": "中国大陆", + "n": "中国大陆" + }, + { + "v": "大陆", + "n": "大陆" + }, + { + "v": "内地", + "n": "内地" + }, + { + "v": "韩国", + "n": "韩国" + }, + { + "v": "香港", + "n": "香港" + }, + { + "v": "台湾", + "n": "台湾" + }, + { + "v": "日本", + "n": "日本" + }, + { + "v": "美国", + "n": "美国" + }, + { + "v": "泰国", + "n": "泰国" + }, + { + "v": "英国", + "n": "英国" + }, + { + "v": "新加坡", + "n": "新加坡" + }, + { + "v": "其他", + "n": "其他" + } + ], + "key": "area" + }, + { + "name": "语言", + "value": [ + { + "v": "国语", + "n": "国语" + }, + { + "v": "英语", + "n": "英语" + }, + { + "v": "粤语", + "n": "粤语" + }, + { + "v": "闽南语", + "n": "闽南语" + }, + { + "v": "韩语", + "n": "韩语" + }, + { + "v": "日语", + "n": "日语" + }, + { + "v": "其它", + "n": "其它" + } + ], + "key": "lang" + }, + { + "name": "时间", + "value": [ + { + "v": "2024", + "n": "2024" + }, + { + "v": "2023", + "n": "2023" + }, + { + "v": "2022", + "n": "2022" + }, + { + "v": "2021", + "n": "2021" + }, + { + "v": "2020", + "n": "2020" + }, + { + "v": "2019", + "n": "2019" + }, + { + "v": "2018", + "n": "2018" + }, + { + "v": "2017", + "n": "2017" + }, + { + "v": "2016", + "n": "2016" + }, + { + "v": "2015", + "n": "2015" + }, + { + "v": "2014", + "n": "2014" + }, + { + "v": "2013", + "n": "2013" + }, + { + "v": "2012", + "n": "2012" + }, + { + "v": "2011", + "n": "2011" + }, + { + "v": "2010", + "n": "2010" + } + ], + "key": "year" + }, + { + "name": "字母查找", + "value": [ + { + "v": "A", + "n": "A" + }, + { + "v": "B", + "n": "B" + }, + { + "v": "C", + "n": "C" + }, + { + "v": "D", + "n": "D" + }, + { + "v": "E", + "n": "E" + }, + { + "v": "F", + "n": "F" + }, + { + "v": "G", + "n": "G" + }, + { + "v": "H", + "n": "H" + }, + { + "v": "I", + "n": "I" + }, + { + "v": "J", + "n": "J" + }, + { + "v": "K", + "n": "K" + }, + { + "v": "L", + "n": "L" + }, + { + "v": "M", + "n": "M" + }, + { + "v": "N", + "n": "N" + }, + { + "v": "O", + "n": "O" + }, + { + "v": "P", + "n": "P" + }, + { + "v": "Q", + "n": "Q" + }, + { + "v": "R", + "n": "R" + }, + { + "v": "S", + "n": "S" + }, + { + "v": "T", + "n": "T" + }, + { + "v": "U", + "n": "U" + }, + { + "v": "V", + "n": "V" + }, + { + "v": "W", + "n": "W" + }, + { + "v": "X", + "n": "X" + }, + { + "v": "Y", + "n": "Y" + }, + { + "v": "Z", + "n": "Z" + }, + { + "v": "0-9", + "n": "0-9" + } + ], + "key": "character" + }, + { + "name": "评分排序", + "value": [ + { + "v": "time", + "n": "时间排序" + }, + { + "v": "hits", + "n": "人气排序" + }, + { + "v": "score", + "n": "评分排序" + } + ], + "key": "order" + } + ], + "3": [ + { + "name": "类型", + "value": [ + { + "v": "20", + "n": "国产" + }, + { + "v": "21", + "n": "日韩" + }, + { + "v": "22", + "n": "欧美" + } + ], + "key": "type" + }, + { + "name": "时间", + "value": [ + { + "v": "2024", + "n": "2024" + }, + { + "v": "2023", + "n": "2023" + }, + { + "v": "2022", + "n": "2022" + }, + { + "v": "2021", + "n": "2021" + }, + { + "v": "2020", + "n": "2020" + }, + { + "v": "2019", + "n": "2019" + }, + { + "v": "2018", + "n": "2018" + }, + { + "v": "2017", + "n": "2017" + }, + { + "v": "2016", + "n": "2016" + }, + { + "v": "2015", + "n": "2015" + }, + { + "v": "2014", + "n": "2014" + }, + { + "v": "2013", + "n": "2013" + }, + { + "v": "2012", + "n": "2012" + }, + { + "v": "2011", + "n": "2011" + }, + { + "v": "2010", + "n": "2010" + } + ], + "key": "year" + }, + { + "name": "字母查找", + "value": [ + { + "v": "A", + "n": "A" + }, + { + "v": "B", + "n": "B" + }, + { + "v": "C", + "n": "C" + }, + { + "v": "D", + "n": "D" + }, + { + "v": "E", + "n": "E" + }, + { + "v": "F", + "n": "F" + }, + { + "v": "G", + "n": "G" + }, + { + "v": "H", + "n": "H" + }, + { + "v": "I", + "n": "I" + }, + { + "v": "J", + "n": "J" + }, + { + "v": "K", + "n": "K" + }, + { + "v": "L", + "n": "L" + }, + { + "v": "M", + "n": "M" + }, + { + "v": "N", + "n": "N" + }, + { + "v": "O", + "n": "O" + }, + { + "v": "P", + "n": "P" + }, + { + "v": "Q", + "n": "Q" + }, + { + "v": "R", + "n": "R" + }, + { + "v": "S", + "n": "S" + }, + { + "v": "T", + "n": "T" + }, + { + "v": "U", + "n": "U" + }, + { + "v": "V", + "n": "V" + }, + { + "v": "W", + "n": "W" + }, + { + "v": "X", + "n": "X" + }, + { + "v": "Y", + "n": "Y" + }, + { + "v": "Z", + "n": "Z" + }, + { + "v": "0-9", + "n": "0-9" + } + ], + "key": "character" + }, + { + "name": "评分排序", + "value": [ + { + "v": "time", + "n": "时间排序" + }, + { + "v": "hits", + "n": "人气排序" + }, + { + "v": "score", + "n": "评分排序" + } + ], + "key": "order" + } + ], + "25": [ + { + "name": "时间", + "value": [ + { + "v": "2024", + "n": "2024" + }, + { + "v": "2023", + "n": "2023" + }, + { + "v": "2022", + "n": "2022" + }, + { + "v": "2021", + "n": "2021" + }, + { + "v": "2020", + "n": "2020" + }, + { + "v": "2019", + "n": "2019" + }, + { + "v": "2018", + "n": "2018" + }, + { + "v": "2017", + "n": "2017" + }, + { + "v": "2016", + "n": "2016" + }, + { + "v": "2015", + "n": "2015" + }, + { + "v": "2014", + "n": "2014" + }, + { + "v": "2013", + "n": "2013" + }, + { + "v": "2012", + "n": "2012" + }, + { + "v": "2011", + "n": "2011" + }, + { + "v": "2010", + "n": "2010" + } + ], + "key": "year" + }, + { + "name": "字母查找", + "value": [ + { + "v": "A", + "n": "A" + }, + { + "v": "B", + "n": "B" + }, + { + "v": "C", + "n": "C" + }, + { + "v": "D", + "n": "D" + }, + { + "v": "E", + "n": "E" + }, + { + "v": "F", + "n": "F" + }, + { + "v": "G", + "n": "G" + }, + { + "v": "H", + "n": "H" + }, + { + "v": "I", + "n": "I" + }, + { + "v": "J", + "n": "J" + }, + { + "v": "K", + "n": "K" + }, + { + "v": "L", + "n": "L" + }, + { + "v": "M", + "n": "M" + }, + { + "v": "N", + "n": "N" + }, + { + "v": "O", + "n": "O" + }, + { + "v": "P", + "n": "P" + }, + { + "v": "Q", + "n": "Q" + }, + { + "v": "R", + "n": "R" + }, + { + "v": "S", + "n": "S" + }, + { + "v": "T", + "n": "T" + }, + { + "v": "U", + "n": "U" + }, + { + "v": "V", + "n": "V" + }, + { + "v": "W", + "n": "W" + }, + { + "v": "X", + "n": "X" + }, + { + "v": "Y", + "n": "Y" + }, + { + "v": "Z", + "n": "Z" + }, + { + "v": "0-9", + "n": "0-9" + } + ], + "key": "character" + }, + { + "name": "评分排序", + "value": [ + { + "v": "time", + "n": "时间排序" + }, + { + "v": "hits", + "n": "人气排序" + }, + { + "v": "score", + "n": "评分排序" + } + ], + "key": "order" + } + ], + "4": [ + { + "name": "时间", + "value": [ + { + "v": "2024", + "n": "2024" + }, + { + "v": "2023", + "n": "2023" + }, + { + "v": "2022", + "n": "2022" + }, + { + "v": "2021", + "n": "2021" + }, + { + "v": "2020", + "n": "2020" + }, + { + "v": "2019", + "n": "2019" + }, + { + "v": "2018", + "n": "2018" + }, + { + "v": "2017", + "n": "2017" + }, + { + "v": "2016", + "n": "2016" + }, + { + "v": "2015", + "n": "2015" + }, + { + "v": "2014", + "n": "2014" + }, + { + "v": "2013", + "n": "2013" + }, + { + "v": "2012", + "n": "2012" + }, + { + "v": "2011", + "n": "2011" + }, + { + "v": "2010", + "n": "2010" + } + ], + "key": "year" + }, + { + "name": "字母查找", + "value": [ + { + "v": "A", + "n": "A" + }, + { + "v": "B", + "n": "B" + }, + { + "v": "C", + "n": "C" + }, + { + "v": "D", + "n": "D" + }, + { + "v": "E", + "n": "E" + }, + { + "v": "F", + "n": "F" + }, + { + "v": "G", + "n": "G" + }, + { + "v": "H", + "n": "H" + }, + { + "v": "I", + "n": "I" + }, + { + "v": "J", + "n": "J" + }, + { + "v": "K", + "n": "K" + }, + { + "v": "L", + "n": "L" + }, + { + "v": "M", + "n": "M" + }, + { + "v": "N", + "n": "N" + }, + { + "v": "O", + "n": "O" + }, + { + "v": "P", + "n": "P" + }, + { + "v": "Q", + "n": "Q" + }, + { + "v": "R", + "n": "R" + }, + { + "v": "S", + "n": "S" + }, + { + "v": "T", + "n": "T" + }, + { + "v": "U", + "n": "U" + }, + { + "v": "V", + "n": "V" + }, + { + "v": "W", + "n": "W" + }, + { + "v": "X", + "n": "X" + }, + { + "v": "Y", + "n": "Y" + }, + { + "v": "Z", + "n": "Z" + }, + { + "v": "0-9", + "n": "0-9" + } + ], + "key": "character" + }, + { + "name": "评分排序", + "value": [ + { + "v": "time", + "n": "时间排序" + }, + { + "v": "hits", + "n": "人气排序" + }, + { + "v": "score", + "n": "评分排序" + } + ], + "key": "order" + } + ] + } +} \ No newline at end of file diff --git a/js/xiaosa/json/dawo.json b/js/xiaosa/json/dawo.json new file mode 100644 index 0000000..0aa02d5 --- /dev/null +++ b/js/xiaosa/json/dawo.json @@ -0,0 +1,1470 @@ +{ + "SiteUrl": "", + "Domains": [ + "http://149.88.87.18:6688" + ], + "SiteWord": "dawo", + "SiteName": "大玩偶", + "Classes": [ + { + "type_name": "电影", + "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": "短剧", + "type_id": "20" + }, + { + "type_name": "纪录片", + "type_id": "21" + }, + { + "type_name": "4k高码", + "type_id": "22" + } + ], + "Filters": { + "3": [ + { + "name": "类型", + "value": [ + { + "v": "37", + "n": "日韩动漫" + }, + { + "v": "38", + "n": "欧美动漫" + }, + { + "v": "36", + "n": "国产动漫" + } + ], + "key": "type" + }, + { + "name": "剧情", + "value": [ + { + "v": "古装", + "n": "古装" + }, + { + "v": "战争", + "n": "战争" + }, + { + "v": "青春偶像", + "n": "青春偶像" + }, + { + "v": "喜剧", + "n": "喜剧" + }, + { + "v": "家庭", + "n": "家庭" + }, + { + "v": "犯罪", + "n": "犯罪" + }, + { + "v": "动作", + "n": "动作" + }, + { + "v": "奇幻", + "n": "奇幻" + }, + { + "v": "剧情", + "n": "剧情" + }, + { + "v": "历史", + "n": "历史" + }, + { + "v": "经典", + "n": "经典" + }, + { + "v": "乡村", + "n": "乡村" + }, + { + "v": "情景", + "n": "情景" + }, + { + "v": "商战", + "n": "商战" + }, + { + "v": "网剧", + "n": "网剧" + }, + { + "v": "其他", + "n": "其他" + } + ], + "key": "class" + }, + { + "name": "地区", + "value": [ + { + "v": "内地", + "n": "内地" + }, + { + "v": "韩国", + "n": "韩国" + }, + { + "v": "香港", + "n": "香港" + }, + { + "v": "台湾", + "n": "台湾" + }, + { + "v": "日本", + "n": "日本" + }, + { + "v": "美国", + "n": "美国" + }, + { + "v": "泰国", + "n": "泰国" + }, + { + "v": "英国", + "n": "英国" + }, + { + "v": "新加坡", + "n": "新加坡" + }, + { + "v": "其他", + "n": "其他" + } + ], + "key": "area" + }, + { + "name": "语言", + "value": [ + { + "v": "国语", + "n": "国语" + }, + { + "v": "英语", + "n": "英语" + }, + { + "v": "粤语", + "n": "粤语" + }, + { + "v": "闽南语", + "n": "闽南语" + }, + { + "v": "韩语", + "n": "韩语" + }, + { + "v": "日语", + "n": "日语" + }, + { + "v": "其它", + "n": "其它" + } + ], + "key": "lang" + }, + { + "name": "时间", + "value": [ + { + "v": "2024", + "n": "2024" + }, + { + "v": "2023", + "n": "2023" + }, + { + "v": "2022", + "n": "2022" + }, + { + "v": "2021", + "n": "2021" + }, + { + "v": "2020", + "n": "2020" + }, + { + "v": "2019", + "n": "2019" + }, + { + "v": "2018", + "n": "2018" + }, + { + "v": "2017", + "n": "2017" + }, + { + "v": "2016", + "n": "2016" + }, + { + "v": "2015", + "n": "2015" + }, + { + "v": "2014", + "n": "2014" + }, + { + "v": "2013", + "n": "2013" + }, + { + "v": "2012", + "n": "2012" + }, + { + "v": "2011", + "n": "2011" + }, + { + "v": "2010", + "n": "2010" + } + ], + "key": "year" + }, + { + "name": "字母查找", + "value": [ + { + "v": "A", + "n": "A" + }, + { + "v": "B", + "n": "B" + }, + { + "v": "C", + "n": "C" + }, + { + "v": "D", + "n": "D" + }, + { + "v": "E", + "n": "E" + }, + { + "v": "F", + "n": "F" + }, + { + "v": "G", + "n": "G" + }, + { + "v": "H", + "n": "H" + }, + { + "v": "I", + "n": "I" + }, + { + "v": "J", + "n": "J" + }, + { + "v": "K", + "n": "K" + }, + { + "v": "L", + "n": "L" + }, + { + "v": "M", + "n": "M" + }, + { + "v": "N", + "n": "N" + }, + { + "v": "O", + "n": "O" + }, + { + "v": "P", + "n": "P" + }, + { + "v": "Q", + "n": "Q" + }, + { + "v": "R", + "n": "R" + }, + { + "v": "S", + "n": "S" + }, + { + "v": "T", + "n": "T" + }, + { + "v": "U", + "n": "U" + }, + { + "v": "V", + "n": "V" + }, + { + "v": "W", + "n": "W" + }, + { + "v": "X", + "n": "X" + }, + { + "v": "Y", + "n": "Y" + }, + { + "v": "Z", + "n": "Z" + }, + { + "v": "0-9", + "n": "0-9" + } + ], + "key": "character" + }, + { + "name": "评分排序", + "value": [ + { + "v": "time", + "n": "时间排序" + }, + { + "v": "hits", + "n": "人气排序" + }, + { + "v": "score", + "n": "评分排序" + } + ], + "key": "order" + } + ], + "4": [ + { + "name": "类型", + "value": [ + { + "v": "39", + "n": "国产综艺" + }, + { + "v": "40", + "n": "其他综艺" + } + ], + "key": "type" + }, + { + "name": "时间", + "value": [ + { + "v": "2024", + "n": "2024" + }, + { + "v": "2023", + "n": "2023" + }, + { + "v": "2022", + "n": "2022" + }, + { + "v": "2021", + "n": "2021" + }, + { + "v": "2020", + "n": "2020" + }, + { + "v": "2019", + "n": "2019" + }, + { + "v": "2018", + "n": "2018" + }, + { + "v": "2017", + "n": "2017" + }, + { + "v": "2016", + "n": "2016" + }, + { + "v": "2015", + "n": "2015" + }, + { + "v": "2014", + "n": "2014" + }, + { + "v": "2013", + "n": "2013" + }, + { + "v": "2012", + "n": "2012" + }, + { + "v": "2011", + "n": "2011" + }, + { + "v": "2010", + "n": "2010" + } + ], + "key": "year" + }, + { + "name": "字母查找", + "value": [ + { + "v": "A", + "n": "A" + }, + { + "v": "B", + "n": "B" + }, + { + "v": "C", + "n": "C" + }, + { + "v": "D", + "n": "D" + }, + { + "v": "E", + "n": "E" + }, + { + "v": "F", + "n": "F" + }, + { + "v": "G", + "n": "G" + }, + { + "v": "H", + "n": "H" + }, + { + "v": "I", + "n": "I" + }, + { + "v": "J", + "n": "J" + }, + { + "v": "K", + "n": "K" + }, + { + "v": "L", + "n": "L" + }, + { + "v": "M", + "n": "M" + }, + { + "v": "N", + "n": "N" + }, + { + "v": "O", + "n": "O" + }, + { + "v": "P", + "n": "P" + }, + { + "v": "Q", + "n": "Q" + }, + { + "v": "R", + "n": "R" + }, + { + "v": "S", + "n": "S" + }, + { + "v": "T", + "n": "T" + }, + { + "v": "U", + "n": "U" + }, + { + "v": "V", + "n": "V" + }, + { + "v": "W", + "n": "W" + }, + { + "v": "X", + "n": "X" + }, + { + "v": "Y", + "n": "Y" + }, + { + "v": "Z", + "n": "Z" + }, + { + "v": "0-9", + "n": "0-9" + } + ], + "key": "character" + }, + { + "name": "评分排序", + "value": [ + { + "v": "time", + "n": "时间排序" + }, + { + "v": "hits", + "n": "人气排序" + }, + { + "v": "score", + "n": "评分排序" + } + ], + "key": "order" + } + ], + "1": [ + { + "name": "类型", + "value": [ + { + "v": "25", + "n": "科幻" + }, + { + "v": "26", + "n": "战争" + }, + { + "v": "27", + "n": "爱情" + }, + { + "v": "28", + "n": "恐怖" + }, + { + "v": "29", + "n": "院线" + }, + { + "v": "30", + "n": "其他" + } + ], + "key": "type" + }, + { + "name": "剧情", + "value": [ + { + "v": "喜剧", + "n": "喜剧" + }, + { + "v": "爱情", + "n": "爱情" + }, + { + "v": "恐怖", + "n": "恐怖" + }, + { + "v": "动作", + "n": "动作" + }, + { + "v": "科幻", + "n": "科幻" + }, + { + "v": "剧情", + "n": "剧情" + }, + { + "v": "战争", + "n": "战争" + }, + { + "v": "警匪", + "n": "警匪" + }, + { + "v": "犯罪", + "n": "犯罪" + }, + { + "v": "动画", + "n": "动画" + }, + { + "v": "奇幻", + "n": "奇幻" + }, + { + "v": "武侠", + "n": "武侠" + }, + { + "v": "冒险", + "n": "冒险" + }, + { + "v": "枪战", + "n": "枪战" + }, + { + "v": "恐怖", + "n": "恐怖" + }, + { + "v": "悬疑", + "n": "悬疑" + }, + { + "v": "惊悚", + "n": "惊悚" + }, + { + "v": "经典", + "n": "经典" + }, + { + "v": "青春", + "n": "青春" + }, + { + "v": "文艺", + "n": "文艺" + }, + { + "v": "微电影", + "n": "微电影" + }, + { + "v": "古装", + "n": "古装" + }, + { + "v": "历史", + "n": "历史" + }, + { + "v": "运动", + "n": "运动" + }, + { + "v": "农村", + "n": "农村" + }, + { + "v": "儿童", + "n": "儿童" + }, + { + "v": "网络电影", + "n": "网络电影" + } + ], + "key": "class" + }, + { + "name": "地区", + "value": [ + { + "v": "内地", + "n": "内地" + }, + { + "v": "韩国", + "n": "韩国" + }, + { + "v": "香港", + "n": "香港" + }, + { + "v": "台湾", + "n": "台湾" + }, + { + "v": "日本", + "n": "日本" + }, + { + "v": "美国", + "n": "美国" + }, + { + "v": "泰国", + "n": "泰国" + }, + { + "v": "英国", + "n": "英国" + }, + { + "v": "新加坡", + "n": "新加坡" + }, + { + "v": "其他", + "n": "其他" + } + ], + "key": "area" + }, + { + "name": "语言", + "value": [ + { + "v": "国语", + "n": "国语" + }, + { + "v": "英语", + "n": "英语" + }, + { + "v": "粤语", + "n": "粤语" + }, + { + "v": "闽南语", + "n": "闽南语" + }, + { + "v": "韩语", + "n": "韩语" + }, + { + "v": "日语", + "n": "日语" + }, + { + "v": "其它", + "n": "其它" + } + ], + "key": "lang" + }, + { + "name": "时间", + "value": [ + { + "v": "2024", + "n": "2024" + }, + { + "v": "2023", + "n": "2023" + }, + { + "v": "2022", + "n": "2022" + }, + { + "v": "2021", + "n": "2021" + }, + { + "v": "2020", + "n": "2020" + }, + { + "v": "2019", + "n": "2019" + }, + { + "v": "2018", + "n": "2018" + }, + { + "v": "2017", + "n": "2017" + }, + { + "v": "2016", + "n": "2016" + }, + { + "v": "2015", + "n": "2015" + }, + { + "v": "2014", + "n": "2014" + }, + { + "v": "2013", + "n": "2013" + }, + { + "v": "2012", + "n": "2012" + }, + { + "v": "2011", + "n": "2011" + }, + { + "v": "2010", + "n": "2010" + } + ], + "key": "year" + }, + { + "name": "字母查找", + "value": [ + { + "v": "A", + "n": "A" + }, + { + "v": "B", + "n": "B" + }, + { + "v": "C", + "n": "C" + }, + { + "v": "D", + "n": "D" + }, + { + "v": "E", + "n": "E" + }, + { + "v": "F", + "n": "F" + }, + { + "v": "G", + "n": "G" + }, + { + "v": "H", + "n": "H" + }, + { + "v": "I", + "n": "I" + }, + { + "v": "J", + "n": "J" + }, + { + "v": "K", + "n": "K" + }, + { + "v": "L", + "n": "L" + }, + { + "v": "M", + "n": "M" + }, + { + "v": "N", + "n": "N" + }, + { + "v": "O", + "n": "O" + }, + { + "v": "P", + "n": "P" + }, + { + "v": "Q", + "n": "Q" + }, + { + "v": "R", + "n": "R" + }, + { + "v": "S", + "n": "S" + }, + { + "v": "T", + "n": "T" + }, + { + "v": "U", + "n": "U" + }, + { + "v": "V", + "n": "V" + }, + { + "v": "W", + "n": "W" + }, + { + "v": "X", + "n": "X" + }, + { + "v": "Y", + "n": "Y" + }, + { + "v": "Z", + "n": "Z" + }, + { + "v": "0-9", + "n": "0-9" + } + ], + "key": "character" + }, + { + "name": "评分排序", + "value": [ + { + "v": "time", + "n": "时间排序" + }, + { + "v": "hits", + "n": "人气排序" + }, + { + "v": "score", + "n": "评分排序" + } + ], + "key": "order" + } + ], + "2": [ + { + "name": "类型", + "value": [ + { + "v": "31", + "n": "国产剧" + }, + { + "v": "32", + "n": "欧美剧" + }, + { + "v": "33", + "n": "日韩剧" + }, + { + "v": "35", + "n": "其他剧" + }, + { + "v": "34", + "n": "港台剧" + } + ], + "key": "type" + }, + { + "name": "剧情", + "value": [ + { + "v": "喜剧", + "n": "喜剧" + }, + { + "v": "爱情", + "n": "爱情" + }, + { + "v": "恐怖", + "n": "恐怖" + }, + { + "v": "动作", + "n": "动作" + }, + { + "v": "科幻", + "n": "科幻" + }, + { + "v": "剧情", + "n": "剧情" + }, + { + "v": "战争", + "n": "战争" + }, + { + "v": "警匪", + "n": "警匪" + }, + { + "v": "犯罪", + "n": "犯罪" + }, + { + "v": "动画", + "n": "动画" + }, + { + "v": "奇幻", + "n": "奇幻" + }, + { + "v": "武侠", + "n": "武侠" + }, + { + "v": "冒险", + "n": "冒险" + }, + { + "v": "枪战", + "n": "枪战" + }, + { + "v": "恐怖", + "n": "恐怖" + }, + { + "v": "悬疑", + "n": "悬疑" + }, + { + "v": "惊悚", + "n": "惊悚" + }, + { + "v": "经典", + "n": "经典" + }, + { + "v": "青春", + "n": "青春" + }, + { + "v": "文艺", + "n": "文艺" + }, + { + "v": "微电影", + "n": "微电影" + }, + { + "v": "古装", + "n": "古装" + }, + { + "v": "历史", + "n": "历史" + }, + { + "v": "运动", + "n": "运动" + }, + { + "v": "农村", + "n": "农村" + }, + { + "v": "儿童", + "n": "儿童" + }, + { + "v": "网络电影", + "n": "网络电影" + } + ], + "key": "class" + }, + { + "name": "地区", + "value": [ + { + "v": "内地", + "n": "内地" + }, + { + "v": "韩国", + "n": "韩国" + }, + { + "v": "香港", + "n": "香港" + }, + { + "v": "台湾", + "n": "台湾" + }, + { + "v": "日本", + "n": "日本" + }, + { + "v": "美国", + "n": "美国" + }, + { + "v": "泰国", + "n": "泰国" + }, + { + "v": "英国", + "n": "英国" + }, + { + "v": "新加坡", + "n": "新加坡" + }, + { + "v": "其他", + "n": "其他" + } + ], + "key": "area" + }, + { + "name": "语言", + "value": [ + { + "v": "国语", + "n": "国语" + }, + { + "v": "英语", + "n": "英语" + }, + { + "v": "粤语", + "n": "粤语" + }, + { + "v": "闽南语", + "n": "闽南语" + }, + { + "v": "韩语", + "n": "韩语" + }, + { + "v": "日语", + "n": "日语" + }, + { + "v": "其它", + "n": "其它" + } + ], + "key": "lang" + }, + { + "name": "时间", + "value": [ + { + "v": "2024", + "n": "2024" + }, + { + "v": "2023", + "n": "2023" + }, + { + "v": "2022", + "n": "2022" + }, + { + "v": "2021", + "n": "2021" + }, + { + "v": "2020", + "n": "2020" + }, + { + "v": "2019", + "n": "2019" + }, + { + "v": "2018", + "n": "2018" + }, + { + "v": "2017", + "n": "2017" + }, + { + "v": "2016", + "n": "2016" + }, + { + "v": "2015", + "n": "2015" + }, + { + "v": "2014", + "n": "2014" + }, + { + "v": "2013", + "n": "2013" + }, + { + "v": "2012", + "n": "2012" + }, + { + "v": "2011", + "n": "2011" + }, + { + "v": "2010", + "n": "2010" + } + ], + "key": "year" + }, + { + "name": "字母查找", + "value": [ + { + "v": "A", + "n": "A" + }, + { + "v": "B", + "n": "B" + }, + { + "v": "C", + "n": "C" + }, + { + "v": "D", + "n": "D" + }, + { + "v": "E", + "n": "E" + }, + { + "v": "F", + "n": "F" + }, + { + "v": "G", + "n": "G" + }, + { + "v": "H", + "n": "H" + }, + { + "v": "I", + "n": "I" + }, + { + "v": "J", + "n": "J" + }, + { + "v": "K", + "n": "K" + }, + { + "v": "L", + "n": "L" + }, + { + "v": "M", + "n": "M" + }, + { + "v": "N", + "n": "N" + }, + { + "v": "O", + "n": "O" + }, + { + "v": "P", + "n": "P" + }, + { + "v": "Q", + "n": "Q" + }, + { + "v": "R", + "n": "R" + }, + { + "v": "S", + "n": "S" + }, + { + "v": "T", + "n": "T" + }, + { + "v": "U", + "n": "U" + }, + { + "v": "V", + "n": "V" + }, + { + "v": "W", + "n": "W" + }, + { + "v": "X", + "n": "X" + }, + { + "v": "Y", + "n": "Y" + }, + { + "v": "Z", + "n": "Z" + }, + { + "v": "0-9", + "n": "0-9" + } + ], + "key": "character" + }, + { + "name": "评分排序", + "value": [ + { + "v": "time", + "n": "时间排序" + }, + { + "v": "hits", + "n": "人气排序" + }, + { + "v": "score", + "n": "评分排序" + } + ], + "key": "order" + } + ] + } +} \ No newline at end of file diff --git a/js/xiaosa/json/ex.json b/js/xiaosa/json/ex.json new file mode 100644 index 0000000..1b0f880 --- /dev/null +++ b/js/xiaosa/json/ex.json @@ -0,0 +1,33 @@ +{ + "SiteUrl": "https://xhww.net", + "Domains": [ + "https://xhww.net", + "https://erxiaofn.click", + "https://erxiaofn.site", + "https://www.xhww.net" + ], + "SiteWord": "ex", + "SiteName": "二小", + "Classes": [ + { + "type_name": "热播资源", + "type_id": "22" + }, + { + "type_name": "二小电影", + "type_id": "1" + }, + { + "type_name": "二小剧集", + "type_id": "2" + }, + { + "type_name": "二小动漫", + "type_id": "3" + }, + { + "type_name": "二小综艺", + "type_id": "17" + } + ] +} \ No newline at end of file diff --git a/js/xiaosa/json/hb.json b/js/xiaosa/json/hb.json new file mode 100644 index 0000000..d083b5a --- /dev/null +++ b/js/xiaosa/json/hb.json @@ -0,0 +1,34 @@ +{ + "SiteUrl": "http://103.45.162.207:20720", + "Domains": [ + "http://103.45.162.207:20720" + ], + "SiteWord": "hb", + "SiteName": "虎斑", + "Classes": [ + { + "type_name": "小虎斑电影", + "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": "小虎斑短剧", + "type_id": "6" + } + ] +} \ No newline at end of file diff --git a/js/xiaosa/json/hm.json b/js/xiaosa/json/hm.json new file mode 100644 index 0000000..e20e995 --- /dev/null +++ b/js/xiaosa/json/hm.json @@ -0,0 +1,25 @@ +{ + "SiteUrl": "https://www.haimianxz.com,https://www.hmxz.org", + "Classes": [ + { + "type_name": "电影", + "type_id": "1" + }, + { + "type_name": "剧集", + "type_id": "2" + }, + { + "type_name": "动漫", + "type_id": "3" + }, + { + "type_name": "其它", + "type_id": "3" + }, + { + "type_name": "综艺", + "type_id": "5" + } + ] +} \ No newline at end of file diff --git a/js/xiaosa/json/kf.json b/js/xiaosa/json/kf.json new file mode 100644 index 0000000..71eac49 --- /dev/null +++ b/js/xiaosa/json/kf.json @@ -0,0 +1,30 @@ +{ + "SiteUrl": "https://www.kuafuzy.com,https://www.kfzy.cc", + "Classes": [ + { + "type_name": "电影", + "type_id": "1" + }, + { + "type_name": "剧集", + "type_id": "2" + }, + { + "type_name": "4K电影", + "type_id": "3" + }, + { + "type_name": "4K剧集", + "type_id": "4" + }, + { + "type_name": "动漫", + "type_id": "5" + }, + { + "type_name": "短剧", + "type_id": "6" + } + ], + "Cookie": "bbs_token=zNQpYs_2BmC2e_2FcUM_2BmuihZ33Jswh_2Fj7sPtelqcw_3D_3D; bbs_sid=65idikju2chtl9sv5or02qlpjj" +} \ No newline at end of file diff --git a/js/xiaosa/json/lb.json b/js/xiaosa/json/lb.json new file mode 100644 index 0000000..e4eaf29 --- /dev/null +++ b/js/xiaosa/json/lb.json @@ -0,0 +1,40 @@ +{ + "SiteUrl": "http://www.labi88.sbs", + "Domains": [ + "http://www.labi88.sbs", + "https://feimao666.fun", + "http://feimao888.fun" + ], + "SiteWord": "labi", + "SiteName": "蜡笔", + "Classes": [ + { + "type_name": "蜡笔电影", + "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": "臻彩4K", + "type_id": "24" + }, + { + "type_name": "蜡笔臻彩", + "type_id": "29" + } + ] +} \ No newline at end of file diff --git a/js/xiaosa/json/lj.json b/js/xiaosa/json/lj.json new file mode 100644 index 0000000..e2a386e --- /dev/null +++ b/js/xiaosa/json/lj.json @@ -0,0 +1,33 @@ +{ + "SiteUrl": "https://www.leijing.xyz,https://www.leijing1.com,https://leijing.xyz,https://leijing1.com", + "Classes": [ + { + "type_name": "电影", + "type_id": "42204681950354" + }, + { + "type_name": "剧集", + "type_id": "42204684250355" + }, + { + "type_name": "动漫", + "type_id": "42204792950357" + }, + { + "type_name": "影视原盘", + "type_id": "42212287587456" + }, + { + "type_name": "纪录", + "type_id": "42204697150356" + }, + { + "type_name": "综艺", + "type_id": "42210356650363" + }, + { + "type_name": "演唱会", + "type_id": "42317879720298" + } + ] +} \ No newline at end of file diff --git a/js/xiaosa/json/mogg.json b/js/xiaosa/json/mogg.json new file mode 100644 index 0000000..c57ba51 --- /dev/null +++ b/js/xiaosa/json/mogg.json @@ -0,0 +1,28 @@ +{ + "SiteUrl": "http://123.666291.xyz", + "Domains": [ + "http://123.666291.xyz", + "https://www.muou.site", + "https://www.muou.asia" + ], + "SiteWord": "mogg", + "SiteName": "木偶", + "Classes": [ + { + "type_name": "木偶电影", + "type_id": "1" + }, + { + "type_name": "木偶剧集", + "type_id": "2" + }, + { + "type_name": "木偶动漫", + "type_id": "3" + }, + { + "type_name": "木偶纪录片", + "type_id": "4" + } + ] +} \ No newline at end of file diff --git a/js/xiaosa/json/og.json b/js/xiaosa/json/og.json new file mode 100644 index 0000000..c51e0ca --- /dev/null +++ b/js/xiaosa/json/og.json @@ -0,0 +1,30 @@ +{ + "SiteUrl": "https://woog.nxog.eu.org", + "Domains": [ + "https://woog.nxog.eu.org" + ], + "SiteWord": "og", + "SiteName": "欧歌", + "Classes": [ + { + "type_name": "电影", + "type_id": "1" + }, + { + "type_name": "剧集", + "type_id": "2" + }, + { + "type_name": "动漫", + "type_id": "3" + }, + { + "type_name": "综艺", + "type_id": "4" + }, + { + "type_name": "短剧", + "type_id": "5" + } + ] +} \ No newline at end of file diff --git a/js/xiaosa/json/quarkShare.json b/js/xiaosa/json/quarkShare.json new file mode 100644 index 0000000..c66e218 --- /dev/null +++ b/js/xiaosa/json/quarkShare.json @@ -0,0 +1,111 @@ +[ + { + "name": "我的网盘", + "folders": [ + { + "shareId": "", + "folder": "0" + } + ] + }, + { + "name": "幼儿教育", + "folders": [ + { + "shareId": "a08f66152533", + "folder": "0" + } + ] + }, + { + "name": "短剧合集", + "folders": [ + { + "shareId": "885fd4ba2d92", + "folder": "0" + }, + { + "shareId": "a1cda418984f", + "folder": "0" + } + ] + }, + { + "name": "电影合集", + "folders": [ + { + "shareId": "49ab75d52e00", + "folder": "0" + }, + { + "shareId": "a632967760cf", + "folder": "0" + }, + { + "shareId": "2f59bb5d96b9", + "folder": "0" + }, + { + "shareId": "50828c368def", + "folder": "0" + }, + { + "shareId": "e07e26aecc08", + "folder": "0" + }, + { + "shareId": "0536a38a356e", + "folder": "0" + }, + { + "shareId": "e273ef697403", + "folder": "0" + }, + { + "shareId": "c8ac6c88e5d8", + "folder": "0" + } + ] + }, + { + "name": "电视剧合集", + "folders": [ + { + "shareId": "d19c4ebe1ff7", + "folder": "0" + }, + { + "shareId": "cd4c5ac7e830", + "folder": "0" + }, + { + "shareId": "e1b2ba8b6d6c", + "folder": "0" + }, + { + "shareId": "166fa0a7ca6f", + "folder": "0" + }, + { + "shareId": "37a92c0b7f10", + "folder": "0" + }, + { + "shareId": "fb3386e42af2", + "folder": "0" + }, + { + "shareId": "46ce214f4ed7", + "folder": "0" + }, + { + "shareId": "fe4681d7fb43", + "folder": "0" + }, + { + "shareId": "8d65e885b059", + "folder": "0" + } + ] + } +] \ No newline at end of file diff --git a/js/xiaosa/json/sd.json b/js/xiaosa/json/sd.json new file mode 100644 index 0000000..2941d7e --- /dev/null +++ b/js/xiaosa/json/sd.json @@ -0,0 +1,31 @@ +{ + "SiteUrl": "", + "Domains": [ + "http://1.95.79.193", + "http://1.95.79.193:666" + ], + "SiteWord": "sd", + "SiteName": "闪电", + "Classes": [ + { + "type_name": "闪电电影", + "type_id": "1" + }, + { + "type_name": "闪电剧集", + "type_id": "2" + }, + { + "type_name": "闪电综艺", + "type_id": "3" + }, + { + "type_name": "闪电动漫", + "type_id": "4" + }, + { + "type_name": "闪电短剧", + "type_id": "30" + } + ] +} \ No newline at end of file diff --git a/js/xiaosa/json/ucShare.json b/js/xiaosa/json/ucShare.json new file mode 100644 index 0000000..d560b5e --- /dev/null +++ b/js/xiaosa/json/ucShare.json @@ -0,0 +1,47 @@ +[ + { + "name": "我的网盘", + "folders": [ + { + "shareId": "", + "folder": "0" + } + ] + }, + { + "name": "豆瓣TOP250部", + "folders": [ + { + "shareId": "c0503fdee6644", + "folder": "0" + } + ] + }, + { + "name": "日剧", + "folders": [ + { + "shareId": "391b86c09cd24", + "folder": "9df4921d548841199e625765413f8bd6" + } + ] + }, + { + "name": "韩剧", + "folders": [ + { + "shareId": "21f04a22052f4", + "folder": "950f5ca7d5e54d528c0dae1fddec5c78" + } + ] + }, + { + "name": "音乐", + "folders": [ + { + "shareId": "369e30038dae4", + "folder": "1b8a55dc18a54fb7aea8ed2b6fd6ad53" + } + ] + } +] \ No newline at end of file diff --git a/js/xiaosa/json/wogg.json b/js/xiaosa/json/wogg.json new file mode 100644 index 0000000..1e1adcb --- /dev/null +++ b/js/xiaosa/json/wogg.json @@ -0,0 +1,2054 @@ +{ + "SiteUrl": "http://www.wogg.lol", + "Domains": [ + "http://www.wogg.lol", + "https://woggpan.888484.xyz", + "https://www.wogg.one", + "https://wogg.xxooo.cf" + ], + "SiteWord": "wogg", + "SiteName": "玩偶", + "Classes": [ + { + "type_name": "玩偶电影", + "type_id": "1" + }, + { + "type_name": "玩偶剧集", + "type_id": "2" + }, + { + "type_name": "臻彩视界", + "type_id": "44" + }, + { + "type_name": "动漫", + "type_id": "3" + }, + { + "type_name": "综艺", + "type_id": "4" + }, + { + "type_name": "音乐", + "type_id": "5" + }, + { + "type_name": "短剧", + "type_id": "6" + }, + { + "type_name": "纪录片", + "type_id": "46" + } + ], + "Filters": { + "1": [ + { + "name": "剧情", + "value": [ + { + "v": "喜剧", + "n": "喜剧" + }, + { + "v": "爱情", + "n": "爱情" + }, + { + "v": "恐怖", + "n": "恐怖" + }, + { + "v": "动作", + "n": "动作" + }, + { + "v": "科幻", + "n": "科幻" + }, + { + "v": "剧情", + "n": "剧情" + }, + { + "v": "战争", + "n": "战争" + }, + { + "v": "警匪", + "n": "警匪" + }, + { + "v": "犯罪", + "n": "犯罪" + }, + { + "v": "古装", + "n": "古装" + }, + { + "v": "奇幻", + "n": "奇幻" + }, + { + "v": "武侠", + "n": "武侠" + }, + { + "v": "冒险", + "n": "冒险" + }, + { + "v": "枪战", + "n": "枪战" + }, + { + "v": "恐怖", + "n": "恐怖" + }, + { + "v": "悬疑", + "n": "悬疑" + }, + { + "v": "惊悚", + "n": "惊悚" + }, + { + "v": "经典", + "n": "经典" + }, + { + "v": "青春", + "n": "青春" + }, + { + "v": "文艺", + "n": "文艺" + }, + { + "v": "微电影", + "n": "微电影" + }, + { + "v": "历史", + "n": "历史" + } + ], + "key": "class" + }, + { + "name": "地区", + "value": [ + { + "v": "中国大陆", + "n": "中国大陆" + }, + { + "v": "中国香港", + "n": "中国香港" + }, + { + "v": "中国台湾", + "n": "中国台湾" + }, + { + "v": "美国", + "n": "美国" + }, + { + "v": "西班牙", + "n": "西班牙" + }, + { + "v": "法国", + "n": "法国" + }, + { + "v": "英国", + "n": "英国" + }, + { + "v": "日本", + "n": "日本" + }, + { + "v": "韩国", + "n": "韩国" + }, + { + "v": "泰国", + "n": "泰国" + }, + { + "v": "德国", + "n": "德国" + }, + { + "v": "印度", + "n": "印度" + }, + { + "v": "意大利", + "n": "意大利" + }, + { + "v": "加拿大", + "n": "加拿大" + }, + { + "v": "其他", + "n": "其他" + } + ], + "key": "area" + }, + { + "name": "时间", + "value": [ + { + "v": "2025", + "n": "2025" + }, + { + "v": "2024", + "n": "2024" + }, + { + "v": "2023", + "n": "2023" + }, + { + "v": "2022", + "n": "2022" + }, + { + "v": "2021", + "n": "2021" + }, + { + "v": "2020", + "n": "2020" + }, + { + "v": "2019", + "n": "2019" + }, + { + "v": "2018", + "n": "2018" + }, + { + "v": "2017", + "n": "2017" + }, + { + "v": "2016", + "n": "2016" + }, + { + "v": "2015", + "n": "2015" + }, + { + "v": "2014", + "n": "2014" + }, + { + "v": "2013", + "n": "2013" + }, + { + "v": "2012", + "n": "2012" + }, + { + "v": "2011", + "n": "2011" + }, + { + "v": "2010", + "n": "2010" + } + ], + "key": "year" + }, + { + "name": "字母查找", + "value": [ + { + "v": "A", + "n": "A" + }, + { + "v": "B", + "n": "B" + }, + { + "v": "C", + "n": "C" + }, + { + "v": "D", + "n": "D" + }, + { + "v": "E", + "n": "E" + }, + { + "v": "F", + "n": "F" + }, + { + "v": "G", + "n": "G" + }, + { + "v": "H", + "n": "H" + }, + { + "v": "I", + "n": "I" + }, + { + "v": "J", + "n": "J" + }, + { + "v": "K", + "n": "K" + }, + { + "v": "L", + "n": "L" + }, + { + "v": "M", + "n": "M" + }, + { + "v": "N", + "n": "N" + }, + { + "v": "O", + "n": "O" + }, + { + "v": "P", + "n": "P" + }, + { + "v": "Q", + "n": "Q" + }, + { + "v": "R", + "n": "R" + }, + { + "v": "S", + "n": "S" + }, + { + "v": "T", + "n": "T" + }, + { + "v": "U", + "n": "U" + }, + { + "v": "V", + "n": "V" + }, + { + "v": "W", + "n": "W" + }, + { + "v": "X", + "n": "X" + }, + { + "v": "Y", + "n": "Y" + }, + { + "v": "Z", + "n": "Z" + }, + { + "v": "0-9", + "n": "0-9" + } + ], + "key": "character" + }, + { + "name": "评分排序", + "value": [ + { + "v": "time", + "n": "时间排序" + }, + { + "v": "hits", + "n": "人气排序" + }, + { + "v": "score", + "n": "评分排序" + } + ], + "key": "order" + } + ], + "2": [ + { + "name": "剧情", + "value": [ + { + "v": "喜剧", + "n": "喜剧" + }, + { + "v": "爱情", + "n": "爱情" + }, + { + "v": "恐怖", + "n": "恐怖" + }, + { + "v": "动作", + "n": "动作" + }, + { + "v": "科幻", + "n": "科幻" + }, + { + "v": "剧情", + "n": "剧情" + }, + { + "v": "战争", + "n": "战争" + }, + { + "v": "警匪", + "n": "警匪" + }, + { + "v": "犯罪", + "n": "犯罪" + }, + { + "v": "古装", + "n": "古装" + }, + { + "v": "奇幻", + "n": "奇幻" + }, + { + "v": "武侠", + "n": "武侠" + }, + { + "v": "冒险", + "n": "冒险" + }, + { + "v": "枪战", + "n": "枪战" + }, + { + "v": "恐怖", + "n": "恐怖" + }, + { + "v": "悬疑", + "n": "悬疑" + }, + { + "v": "惊悚", + "n": "惊悚" + }, + { + "v": "经典", + "n": "经典" + }, + { + "v": "青春", + "n": "青春" + }, + { + "v": "文艺", + "n": "文艺" + }, + { + "v": "微电影", + "n": "微电影" + }, + { + "v": "历史", + "n": "历史" + } + ], + "key": "class" + }, + { + "name": "地区", + "value": [ + { + "v": "中国大陆", + "n": "中国大陆" + }, + { + "v": "中国香港", + "n": "中国香港" + }, + { + "v": "中国台湾", + "n": "中国台湾" + }, + { + "v": "美国", + "n": "美国" + }, + { + "v": "西班牙", + "n": "西班牙" + }, + { + "v": "法国", + "n": "法国" + }, + { + "v": "英国", + "n": "英国" + }, + { + "v": "日本", + "n": "日本" + }, + { + "v": "韩国", + "n": "韩国" + }, + { + "v": "泰国", + "n": "泰国" + }, + { + "v": "德国", + "n": "德国" + }, + { + "v": "印度", + "n": "印度" + }, + { + "v": "意大利", + "n": "意大利" + }, + { + "v": "加拿大", + "n": "加拿大" + }, + { + "v": "其他", + "n": "其他" + } + ], + "key": "area" + }, + { + "name": "时间", + "value": [ + { + "v": "2025", + "n": "2025" + }, + { + "v": "2024", + "n": "2024" + }, + { + "v": "2023", + "n": "2023" + }, + { + "v": "2022", + "n": "2022" + }, + { + "v": "2021", + "n": "2021" + }, + { + "v": "2020", + "n": "2020" + }, + { + "v": "2019", + "n": "2019" + }, + { + "v": "2018", + "n": "2018" + }, + { + "v": "2017", + "n": "2017" + }, + { + "v": "2016", + "n": "2016" + }, + { + "v": "2015", + "n": "2015" + }, + { + "v": "2014", + "n": "2014" + }, + { + "v": "2013", + "n": "2013" + }, + { + "v": "2012", + "n": "2012" + }, + { + "v": "2011", + "n": "2011" + }, + { + "v": "2010", + "n": "2010" + } + ], + "key": "year" + }, + { + "name": "字母查找", + "value": [ + { + "v": "A", + "n": "A" + }, + { + "v": "B", + "n": "B" + }, + { + "v": "C", + "n": "C" + }, + { + "v": "D", + "n": "D" + }, + { + "v": "E", + "n": "E" + }, + { + "v": "F", + "n": "F" + }, + { + "v": "G", + "n": "G" + }, + { + "v": "H", + "n": "H" + }, + { + "v": "I", + "n": "I" + }, + { + "v": "J", + "n": "J" + }, + { + "v": "K", + "n": "K" + }, + { + "v": "L", + "n": "L" + }, + { + "v": "M", + "n": "M" + }, + { + "v": "N", + "n": "N" + }, + { + "v": "O", + "n": "O" + }, + { + "v": "P", + "n": "P" + }, + { + "v": "Q", + "n": "Q" + }, + { + "v": "R", + "n": "R" + }, + { + "v": "S", + "n": "S" + }, + { + "v": "T", + "n": "T" + }, + { + "v": "U", + "n": "U" + }, + { + "v": "V", + "n": "V" + }, + { + "v": "W", + "n": "W" + }, + { + "v": "X", + "n": "X" + }, + { + "v": "Y", + "n": "Y" + }, + { + "v": "Z", + "n": "Z" + }, + { + "v": "0-9", + "n": "0-9" + } + ], + "key": "character" + }, + { + "name": "评分排序", + "value": [ + { + "v": "time", + "n": "时间排序" + }, + { + "v": "hits", + "n": "人气排序" + }, + { + "v": "score", + "n": "评分排序" + } + ], + "key": "order" + } + ], + "3": [ + { + "name": "剧情", + "value": [ + { + "v": "情感", + "n": "情感" + }, + { + "v": "科幻", + "n": "科幻" + }, + { + "v": "热血", + "n": "热血" + }, + { + "v": "推理", + "n": "推理" + }, + { + "v": "搞笑", + "n": "搞笑" + }, + { + "v": "冒险", + "n": "冒险" + }, + { + "v": "萝莉", + "n": "萝莉" + }, + { + "v": "校园", + "n": "校园" + }, + { + "v": "动作", + "n": "动作" + }, + { + "v": "机战", + "n": "机战" + }, + { + "v": "运动", + "n": "运动" + }, + { + "v": "战争", + "n": "战争" + }, + { + "v": "少年", + "n": "少年" + }, + { + "v": "少女", + "n": "少女" + }, + { + "v": "社会", + "n": "社会" + }, + { + "v": "原创", + "n": "原创" + }, + { + "v": "亲子", + "n": "亲子" + }, + { + "v": "益智", + "n": "益智" + }, + { + "v": "励志", + "n": "励志" + }, + { + "v": "其他", + "n": "其他" + } + ], + "key": "class" + }, + { + "name": "地区", + "value": [ + { + "v": "中国大陆", + "n": "中国大陆" + }, + { + "v": "日本", + "n": "日本" + }, + { + "v": "美国", + "n": "美国" + }, + { + "v": "英国", + "n": "英国" + }, + { + "v": "西班牙", + "n": "西班牙" + }, + { + "v": "法国", + "n": "法国" + }, + { + "v": "其他", + "n": "其他" + } + ], + "key": "area" + }, + { + "name": "时间", + "value": [ + { + "v": "2025", + "n": "2025" + }, + { + "v": "2024", + "n": "2024" + }, + { + "v": "2023", + "n": "2023" + }, + { + "v": "2022", + "n": "2022" + }, + { + "v": "2021", + "n": "2021" + }, + { + "v": "2020", + "n": "2020" + }, + { + "v": "2019", + "n": "2019" + }, + { + "v": "2018", + "n": "2018" + }, + { + "v": "2017", + "n": "2017" + }, + { + "v": "2016", + "n": "2016" + }, + { + "v": "2015", + "n": "2015" + }, + { + "v": "2014", + "n": "2014" + }, + { + "v": "2013", + "n": "2013" + }, + { + "v": "2012", + "n": "2012" + }, + { + "v": "2011", + "n": "2011" + }, + { + "v": "2010", + "n": "2010" + } + ], + "key": "year" + }, + { + "name": "字母查找", + "value": [ + { + "v": "A", + "n": "A" + }, + { + "v": "B", + "n": "B" + }, + { + "v": "C", + "n": "C" + }, + { + "v": "D", + "n": "D" + }, + { + "v": "E", + "n": "E" + }, + { + "v": "F", + "n": "F" + }, + { + "v": "G", + "n": "G" + }, + { + "v": "H", + "n": "H" + }, + { + "v": "I", + "n": "I" + }, + { + "v": "J", + "n": "J" + }, + { + "v": "K", + "n": "K" + }, + { + "v": "L", + "n": "L" + }, + { + "v": "M", + "n": "M" + }, + { + "v": "N", + "n": "N" + }, + { + "v": "O", + "n": "O" + }, + { + "v": "P", + "n": "P" + }, + { + "v": "Q", + "n": "Q" + }, + { + "v": "R", + "n": "R" + }, + { + "v": "S", + "n": "S" + }, + { + "v": "T", + "n": "T" + }, + { + "v": "U", + "n": "U" + }, + { + "v": "V", + "n": "V" + }, + { + "v": "W", + "n": "W" + }, + { + "v": "X", + "n": "X" + }, + { + "v": "Y", + "n": "Y" + }, + { + "v": "Z", + "n": "Z" + }, + { + "v": "0-9", + "n": "0-9" + } + ], + "key": "character" + }, + { + "name": "评分排序", + "value": [ + { + "v": "time", + "n": "时间排序" + }, + { + "v": "hits", + "n": "人气排序" + }, + { + "v": "score", + "n": "评分排序" + } + ], + "key": "order" + } + ], + "4": [ + { + "name": "地区", + "value": [ + { + "v": "中国大陆", + "n": "中国大陆" + }, + { + "v": "中国台湾", + "n": "中国台湾" + }, + { + "v": "美国", + "n": "美国" + }, + { + "v": "法国", + "n": "法国" + }, + { + "v": "英国", + "n": "英国" + }, + { + "v": "日本", + "n": "日本" + }, + { + "v": "韩国", + "n": "韩国" + } + ], + "key": "area" + }, + { + "name": "时间", + "value": [ + { + "v": "2025", + "n": "2025" + }, + { + "v": "2024", + "n": "2024" + }, + { + "v": "2023", + "n": "2023" + }, + { + "v": "2022", + "n": "2022" + }, + { + "v": "2021", + "n": "2021" + }, + { + "v": "2020", + "n": "2020" + }, + { + "v": "2019", + "n": "2019" + }, + { + "v": "2018", + "n": "2018" + }, + { + "v": "2017", + "n": "2017" + }, + { + "v": "2016", + "n": "2016" + }, + { + "v": "2015", + "n": "2015" + }, + { + "v": "2014", + "n": "2014" + }, + { + "v": "2013", + "n": "2013" + }, + { + "v": "2012", + "n": "2012" + }, + { + "v": "2011", + "n": "2011" + }, + { + "v": "2010", + "n": "2010" + } + ], + "key": "year" + }, + { + "name": "字母查找", + "value": [ + { + "v": "A", + "n": "A" + }, + { + "v": "B", + "n": "B" + }, + { + "v": "C", + "n": "C" + }, + { + "v": "D", + "n": "D" + }, + { + "v": "E", + "n": "E" + }, + { + "v": "F", + "n": "F" + }, + { + "v": "G", + "n": "G" + }, + { + "v": "H", + "n": "H" + }, + { + "v": "I", + "n": "I" + }, + { + "v": "J", + "n": "J" + }, + { + "v": "K", + "n": "K" + }, + { + "v": "L", + "n": "L" + }, + { + "v": "M", + "n": "M" + }, + { + "v": "N", + "n": "N" + }, + { + "v": "O", + "n": "O" + }, + { + "v": "P", + "n": "P" + }, + { + "v": "Q", + "n": "Q" + }, + { + "v": "R", + "n": "R" + }, + { + "v": "S", + "n": "S" + }, + { + "v": "T", + "n": "T" + }, + { + "v": "U", + "n": "U" + }, + { + "v": "V", + "n": "V" + }, + { + "v": "W", + "n": "W" + }, + { + "v": "X", + "n": "X" + }, + { + "v": "Y", + "n": "Y" + }, + { + "v": "Z", + "n": "Z" + }, + { + "v": "0-9", + "n": "0-9" + } + ], + "key": "character" + }, + { + "name": "评分排序", + "value": [ + { + "v": "time", + "n": "时间排序" + }, + { + "v": "hits", + "n": "人气排序" + }, + { + "v": "score", + "n": "评分排序" + } + ], + "key": "order" + } + ], + "5": [ + { + "name": "字母查找", + "value": [ + { + "v": "A", + "n": "A" + }, + { + "v": "B", + "n": "B" + }, + { + "v": "C", + "n": "C" + }, + { + "v": "D", + "n": "D" + }, + { + "v": "E", + "n": "E" + }, + { + "v": "F", + "n": "F" + }, + { + "v": "G", + "n": "G" + }, + { + "v": "H", + "n": "H" + }, + { + "v": "I", + "n": "I" + }, + { + "v": "J", + "n": "J" + }, + { + "v": "K", + "n": "K" + }, + { + "v": "L", + "n": "L" + }, + { + "v": "M", + "n": "M" + }, + { + "v": "N", + "n": "N" + }, + { + "v": "O", + "n": "O" + }, + { + "v": "P", + "n": "P" + }, + { + "v": "Q", + "n": "Q" + }, + { + "v": "R", + "n": "R" + }, + { + "v": "S", + "n": "S" + }, + { + "v": "T", + "n": "T" + }, + { + "v": "U", + "n": "U" + }, + { + "v": "V", + "n": "V" + }, + { + "v": "W", + "n": "W" + }, + { + "v": "X", + "n": "X" + }, + { + "v": "Y", + "n": "Y" + }, + { + "v": "Z", + "n": "Z" + }, + { + "v": "0-9", + "n": "0-9" + } + ], + "key": "character" + }, + { + "name": "评分排序", + "value": [ + { + "v": "time", + "n": "时间排序" + }, + { + "v": "hits", + "n": "人气排序" + }, + { + "v": "score", + "n": "评分排序" + } + ], + "key": "order" + } + ], + "6": [ + { + "name": "剧情", + "value": [ + { + "v": "男频", + "n": "男频" + }, + { + "v": "女频", + "n": "女频" + }, + { + "v": "都市", + "n": "都市" + }, + { + "v": "甜宠", + "n": "甜宠" + }, + { + "v": "年代", + "n": "年代" + }, + { + "v": "穿越", + "n": "穿越" + }, + { + "v": "古装", + "n": "古装" + }, + { + "v": "亲情", + "n": "亲情" + }, + { + "v": "奇幻", + "n": "奇幻" + }, + { + "v": "萌宝", + "n": "萌宝" + }, + { + "v": "重生", + "n": "重生" + }, + { + "v": "冒险", + "n": "冒险" + }, + { + "v": "逆袭", + "n": "逆袭" + }, + { + "v": "虐恋", + "n": "虐恋" + }, + { + "v": "鉴宝", + "n": "鉴宝" + } + ], + "key": "class" + }, + { + "name": "时间", + "value": [ + { + "v": "2025", + "n": "2025" + }, + { + "v": "2024", + "n": "2024" + }, + { + "v": "2023", + "n": "2023" + }, + { + "v": "2022", + "n": "2022" + }, + { + "v": "2021", + "n": "2021" + } + ], + "key": "year" + }, + { + "name": "字母查找", + "value": [ + { + "v": "A", + "n": "A" + }, + { + "v": "B", + "n": "B" + }, + { + "v": "C", + "n": "C" + }, + { + "v": "D", + "n": "D" + }, + { + "v": "E", + "n": "E" + }, + { + "v": "F", + "n": "F" + }, + { + "v": "G", + "n": "G" + }, + { + "v": "H", + "n": "H" + }, + { + "v": "I", + "n": "I" + }, + { + "v": "J", + "n": "J" + }, + { + "v": "K", + "n": "K" + }, + { + "v": "L", + "n": "L" + }, + { + "v": "M", + "n": "M" + }, + { + "v": "N", + "n": "N" + }, + { + "v": "O", + "n": "O" + }, + { + "v": "P", + "n": "P" + }, + { + "v": "Q", + "n": "Q" + }, + { + "v": "R", + "n": "R" + }, + { + "v": "S", + "n": "S" + }, + { + "v": "T", + "n": "T" + }, + { + "v": "U", + "n": "U" + }, + { + "v": "V", + "n": "V" + }, + { + "v": "W", + "n": "W" + }, + { + "v": "X", + "n": "X" + }, + { + "v": "Y", + "n": "Y" + }, + { + "v": "Z", + "n": "Z" + }, + { + "v": "0-9", + "n": "0-9" + } + ], + "key": "character" + }, + { + "name": "评分排序", + "value": [ + { + "v": "time", + "n": "时间排序" + }, + { + "v": "hits", + "n": "人气排序" + }, + { + "v": "score", + "n": "评分排序" + } + ], + "key": "order" + } + ], + "44": [ + { + "name": "剧情", + "value": [ + { + "v": "爱情", + "n": "爱情" + }, + { + "v": "恐怖", + "n": "恐怖" + }, + { + "v": "动作", + "n": "动作" + }, + { + "v": "科幻", + "n": "科幻" + }, + { + "v": "剧情", + "n": "剧情" + }, + { + "v": "战争", + "n": "战争" + }, + { + "v": "警匪", + "n": "警匪" + }, + { + "v": "犯罪", + "n": "犯罪" + }, + { + "v": "古装", + "n": "古装" + }, + { + "v": "奇幻", + "n": "奇幻" + }, + { + "v": "武侠", + "n": "武侠" + }, + { + "v": "冒险", + "n": "冒险" + }, + { + "v": "枪战", + "n": "枪战" + }, + { + "v": "恐怖", + "n": "恐怖" + }, + { + "v": "悬疑", + "n": "悬疑" + }, + { + "v": "惊悚", + "n": "惊悚" + }, + { + "v": "经典", + "n": "经典" + }, + { + "v": "青春", + "n": "青春" + }, + { + "v": "文艺", + "n": "文艺" + }, + { + "v": "微电影", + "n": "微电影" + }, + { + "v": "历史", + "n": "历史" + } + ], + "key": "class" + }, + { + "name": "地区", + "value": [ + { + "v": "中国大陆", + "n": "中国大陆" + }, + { + "v": "中国香港", + "n": "中国香港" + }, + { + "v": "中国台湾", + "n": "中国台湾" + }, + { + "v": "美国", + "n": "美国" + }, + { + "v": "西班牙", + "n": "西班牙" + }, + { + "v": "法国", + "n": "法国" + }, + { + "v": "英国", + "n": "英国" + }, + { + "v": "日本", + "n": "日本" + }, + { + "v": "韩国", + "n": "韩国" + }, + { + "v": "泰国", + "n": "泰国" + }, + { + "v": "德国", + "n": "德国" + }, + { + "v": "印度", + "n": "印度" + }, + { + "v": "意大利", + "n": "意大利" + }, + { + "v": "加拿大", + "n": "加拿大" + }, + { + "v": "其他", + "n": "其他" + } + ], + "key": "area" + }, + { + "name": "时间", + "value": [ + { + "v": "2025", + "n": "2025" + }, + { + "v": "2024", + "n": "2024" + }, + { + "v": "2023", + "n": "2023" + }, + { + "v": "2022", + "n": "2022" + }, + { + "v": "2021", + "n": "2021" + }, + { + "v": "2020", + "n": "2020" + }, + { + "v": "2019", + "n": "2019" + }, + { + "v": "2018", + "n": "2018" + }, + { + "v": "2017", + "n": "2017" + }, + { + "v": "2016", + "n": "2016" + }, + { + "v": "2015", + "n": "2015" + }, + { + "v": "2014", + "n": "2014" + }, + { + "v": "2013", + "n": "2013" + }, + { + "v": "2012", + "n": "2012" + }, + { + "v": "2011", + "n": "2011" + }, + { + "v": "2010", + "n": "2010" + } + ], + "key": "year" + }, + { + "name": "字母查找", + "value": [ + { + "v": "A", + "n": "A" + }, + { + "v": "B", + "n": "B" + }, + { + "v": "C", + "n": "C" + }, + { + "v": "D", + "n": "D" + }, + { + "v": "E", + "n": "E" + }, + { + "v": "F", + "n": "F" + }, + { + "v": "G", + "n": "G" + }, + { + "v": "H", + "n": "H" + }, + { + "v": "I", + "n": "I" + }, + { + "v": "J", + "n": "J" + }, + { + "v": "K", + "n": "K" + }, + { + "v": "L", + "n": "L" + }, + { + "v": "M", + "n": "M" + }, + { + "v": "N", + "n": "N" + }, + { + "v": "O", + "n": "O" + }, + { + "v": "P", + "n": "P" + }, + { + "v": "Q", + "n": "Q" + }, + { + "v": "R", + "n": "R" + }, + { + "v": "S", + "n": "S" + }, + { + "v": "T", + "n": "T" + }, + { + "v": "U", + "n": "U" + }, + { + "v": "V", + "n": "V" + }, + { + "v": "W", + "n": "W" + }, + { + "v": "X", + "n": "X" + }, + { + "v": "Y", + "n": "Y" + }, + { + "v": "Z", + "n": "Z" + }, + { + "v": "0-9", + "n": "0-9" + } + ], + "key": "character" + }, + { + "name": "评分排序", + "value": [ + { + "n": "时间排序" + }, + { + "n": "人气排序" + }, + { + "n": "评分排序" + } + ], + "key": "order" + } + ] + } +} \ No newline at end of file diff --git a/js/xiaosa/json/xbky.json b/js/xiaosa/json/xbky.json new file mode 100644 index 0000000..93351bc --- /dev/null +++ b/js/xiaosa/json/xbky.json @@ -0,0 +1,38 @@ +{ + "SiteUrl": "http://xsayang.fun:12512", + "Domains": [ + "http://xsayang.fun:12512" + ], + "SiteWord": "xbky", + "SiteName": "小斑快映", + "Classes": [ + { + "type_name": "电影", + "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": "短剧", + "type_id": "6" + }, + { + "type_name": "123", + "type_id": "35" + } + ] +} \ No newline at end of file diff --git a/js/xiaosa/json/xf.json b/js/xiaosa/json/xf.json new file mode 100644 index 0000000..7c2132c --- /dev/null +++ b/js/xiaosa/json/xf.json @@ -0,0 +1,1461 @@ +{ + "SiteUrl": "", + "Domains": [ + "http://154.204.177.231", + "http://www.xn--ghqy10g1w0a.xyz" + ], + "SiteWord": "xf", + "SiteName": "下饭", + "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": "28" + }, + { + "type_name": "臻彩世界", + "type_id": "30" + } + ], + "Filters": { + "1": [ + { + "name": "剧情", + "value": [ + { + "v": "喜剧", + "n": "喜剧" + }, + { + "v": "爱情", + "n": "爱情" + }, + { + "v": "恐怖", + "n": "恐怖" + }, + { + "v": "动作", + "n": "动作" + }, + { + "v": "科幻", + "n": "科幻" + }, + { + "v": "剧情", + "n": "剧情" + }, + { + "v": "战争", + "n": "战争" + }, + { + "v": "警匪", + "n": "警匪" + }, + { + "v": "犯罪", + "n": "犯罪" + }, + { + "v": "动画", + "n": "动画" + }, + { + "v": "奇幻", + "n": "奇幻" + }, + { + "v": "武侠", + "n": "武侠" + }, + { + "v": "冒险", + "n": "冒险" + }, + { + "v": "枪战", + "n": "枪战" + }, + { + "v": "恐怖", + "n": "恐怖" + }, + { + "v": "悬疑", + "n": "悬疑" + }, + { + "v": "惊悚", + "n": "惊悚" + }, + { + "v": "经典", + "n": "经典" + }, + { + "v": "青春", + "n": "青春" + }, + { + "v": "文艺", + "n": "文艺" + }, + { + "v": "微电影", + "n": "微电影" + }, + { + "v": "古装", + "n": "古装" + }, + { + "v": "历史", + "n": "历史" + }, + { + "v": "运动", + "n": "运动" + }, + { + "v": "农村", + "n": "农村" + }, + { + "v": "儿童", + "n": "儿童" + }, + { + "v": "网络电影", + "n": "网络电影" + } + ], + "key": "class" + }, + { + "name": "地区", + "value": [ + { + "v": "大陆", + "n": "大陆" + }, + { + "v": "香港", + "n": "香港" + }, + { + "v": "台湾", + "n": "台湾" + }, + { + "v": "美国", + "n": "美国" + }, + { + "v": "法国", + "n": "法国" + }, + { + "v": "英国", + "n": "英国" + }, + { + "v": "日本", + "n": "日本" + }, + { + "v": "韩国", + "n": "韩国" + }, + { + "v": "德国", + "n": "德国" + }, + { + "v": "泰国", + "n": "泰国" + }, + { + "v": "印度", + "n": "印度" + }, + { + "v": "意大利", + "n": "意大利" + }, + { + "v": "西班牙", + "n": "西班牙" + }, + { + "v": "加拿大", + "n": "加拿大" + }, + { + "v": "其他", + "n": "其他" + } + ], + "key": "area" + }, + { + "name": "语言", + "value": [ + { + "v": "国语", + "n": "国语" + }, + { + "v": "英语", + "n": "英语" + }, + { + "v": "粤语", + "n": "粤语" + }, + { + "v": "闽南语", + "n": "闽南语" + }, + { + "v": "韩语", + "n": "韩语" + }, + { + "v": "日语", + "n": "日语" + }, + { + "v": "法语", + "n": "法语" + }, + { + "v": "德语", + "n": "德语" + }, + { + "v": "其它", + "n": "其它" + } + ], + "key": "lang" + }, + { + "name": "时间", + "value": [ + { + "v": "2024", + "n": "2024" + }, + { + "v": "2023", + "n": "2023" + }, + { + "v": "2022", + "n": "2022" + }, + { + "v": "2021", + "n": "2021" + }, + { + "v": "2020", + "n": "2020" + }, + { + "v": "2019", + "n": "2019" + }, + { + "v": "2018", + "n": "2018" + }, + { + "v": "2017", + "n": "2017" + }, + { + "v": "2016", + "n": "2016" + }, + { + "v": "2015", + "n": "2015" + }, + { + "v": "2014", + "n": "2014" + }, + { + "v": "2013", + "n": "2013" + }, + { + "v": "2012", + "n": "2012" + }, + { + "v": "2011", + "n": "2011" + }, + { + "v": "2010", + "n": "2010" + } + ], + "key": "year" + }, + { + "name": "字母查找", + "value": [ + { + "v": "A", + "n": "A" + }, + { + "v": "B", + "n": "B" + }, + { + "v": "C", + "n": "C" + }, + { + "v": "D", + "n": "D" + }, + { + "v": "E", + "n": "E" + }, + { + "v": "F", + "n": "F" + }, + { + "v": "G", + "n": "G" + }, + { + "v": "H", + "n": "H" + }, + { + "v": "I", + "n": "I" + }, + { + "v": "J", + "n": "J" + }, + { + "v": "K", + "n": "K" + }, + { + "v": "L", + "n": "L" + }, + { + "v": "M", + "n": "M" + }, + { + "v": "N", + "n": "N" + }, + { + "v": "O", + "n": "O" + }, + { + "v": "P", + "n": "P" + }, + { + "v": "Q", + "n": "Q" + }, + { + "v": "R", + "n": "R" + }, + { + "v": "S", + "n": "S" + }, + { + "v": "T", + "n": "T" + }, + { + "v": "U", + "n": "U" + }, + { + "v": "V", + "n": "V" + }, + { + "v": "W", + "n": "W" + }, + { + "v": "X", + "n": "X" + }, + { + "v": "Y", + "n": "Y" + }, + { + "v": "Z", + "n": "Z" + }, + { + "v": "0-9", + "n": "0-9" + } + ], + "key": "character" + }, + { + "name": "评分排序", + "value": [ + { + "v": "time", + "n": "时间排序" + }, + { + "v": "hits", + "n": "人气排序" + }, + { + "v": "score", + "n": "评分排序" + } + ], + "key": "order" + } + ], + "2": [ + { + "name": "类型", + "value": [ + { + "v": "13", + "n": "国产剧" + }, + { + "v": "14", + "n": "欧美剧" + }, + { + "v": "15", + "n": "日韩剧" + }, + { + "v": "16", + "n": "港台剧" + }, + { + "v": "23", + "n": "泰剧" + } + ], + "key": "type" + }, + { + "name": "剧情", + "value": [ + { + "v": "古装", + "n": "古装" + }, + { + "v": "战争", + "n": "战争" + }, + { + "v": "青春偶像", + "n": "青春偶像" + }, + { + "v": "喜剧", + "n": "喜剧" + }, + { + "v": "家庭", + "n": "家庭" + }, + { + "v": "犯罪", + "n": "犯罪" + }, + { + "v": "动作", + "n": "动作" + }, + { + "v": "奇幻", + "n": "奇幻" + }, + { + "v": "剧情", + "n": "剧情" + }, + { + "v": "历史", + "n": "历史" + }, + { + "v": "经典", + "n": "经典" + }, + { + "v": "乡村", + "n": "乡村" + }, + { + "v": "情景", + "n": "情景" + }, + { + "v": "商战", + "n": "商战" + }, + { + "v": "网剧", + "n": "网剧" + }, + { + "v": "其他", + "n": "其他" + } + ], + "key": "class" + }, + { + "name": "地区", + "value": [ + { + "v": "中国大陆", + "n": "中国大陆" + }, + { + "v": "大陆", + "n": "大陆" + }, + { + "v": "内地", + "n": "内地" + }, + { + "v": "韩国", + "n": "韩国" + }, + { + "v": "香港", + "n": "香港" + }, + { + "v": "台湾", + "n": "台湾" + }, + { + "v": "日本", + "n": "日本" + }, + { + "v": "美国", + "n": "美国" + }, + { + "v": "泰国", + "n": "泰国" + }, + { + "v": "英国", + "n": "英国" + }, + { + "v": "新加坡", + "n": "新加坡" + }, + { + "v": "其他", + "n": "其他" + } + ], + "key": "area" + }, + { + "name": "语言", + "value": [ + { + "v": "国语", + "n": "国语" + }, + { + "v": "英语", + "n": "英语" + }, + { + "v": "粤语", + "n": "粤语" + }, + { + "v": "闽南语", + "n": "闽南语" + }, + { + "v": "韩语", + "n": "韩语" + }, + { + "v": "日语", + "n": "日语" + }, + { + "v": "其它", + "n": "其它" + } + ], + "key": "lang" + }, + { + "name": "时间", + "value": [ + { + "v": "2024", + "n": "2024" + }, + { + "v": "2023", + "n": "2023" + }, + { + "v": "2022", + "n": "2022" + }, + { + "v": "2021", + "n": "2021" + }, + { + "v": "2020", + "n": "2020" + }, + { + "v": "2019", + "n": "2019" + }, + { + "v": "2018", + "n": "2018" + }, + { + "v": "2017", + "n": "2017" + }, + { + "v": "2016", + "n": "2016" + }, + { + "v": "2015", + "n": "2015" + }, + { + "v": "2014", + "n": "2014" + }, + { + "v": "2013", + "n": "2013" + }, + { + "v": "2012", + "n": "2012" + }, + { + "v": "2011", + "n": "2011" + }, + { + "v": "2010", + "n": "2010" + } + ], + "key": "year" + }, + { + "name": "字母查找", + "value": [ + { + "v": "A", + "n": "A" + }, + { + "v": "B", + "n": "B" + }, + { + "v": "C", + "n": "C" + }, + { + "v": "D", + "n": "D" + }, + { + "v": "E", + "n": "E" + }, + { + "v": "F", + "n": "F" + }, + { + "v": "G", + "n": "G" + }, + { + "v": "H", + "n": "H" + }, + { + "v": "I", + "n": "I" + }, + { + "v": "J", + "n": "J" + }, + { + "v": "K", + "n": "K" + }, + { + "v": "L", + "n": "L" + }, + { + "v": "M", + "n": "M" + }, + { + "v": "N", + "n": "N" + }, + { + "v": "O", + "n": "O" + }, + { + "v": "P", + "n": "P" + }, + { + "v": "Q", + "n": "Q" + }, + { + "v": "R", + "n": "R" + }, + { + "v": "S", + "n": "S" + }, + { + "v": "T", + "n": "T" + }, + { + "v": "U", + "n": "U" + }, + { + "v": "V", + "n": "V" + }, + { + "v": "W", + "n": "W" + }, + { + "v": "X", + "n": "X" + }, + { + "v": "Y", + "n": "Y" + }, + { + "v": "Z", + "n": "Z" + }, + { + "v": "0-9", + "n": "0-9" + } + ], + "key": "character" + }, + { + "name": "评分排序", + "value": [ + { + "v": "time", + "n": "时间排序" + }, + { + "v": "hits", + "n": "人气排序" + }, + { + "v": "score", + "n": "评分排序" + } + ], + "key": "order" + } + ], + "3": [ + { + "name": "类型", + "value": [ + { + "v": "20", + "n": "国产" + }, + { + "v": "21", + "n": "日韩" + }, + { + "v": "22", + "n": "欧美" + } + ], + "key": "type" + }, + { + "name": "时间", + "value": [ + { + "v": "2024", + "n": "2024" + }, + { + "v": "2023", + "n": "2023" + }, + { + "v": "2022", + "n": "2022" + }, + { + "v": "2021", + "n": "2021" + }, + { + "v": "2020", + "n": "2020" + }, + { + "v": "2019", + "n": "2019" + }, + { + "v": "2018", + "n": "2018" + }, + { + "v": "2017", + "n": "2017" + }, + { + "v": "2016", + "n": "2016" + }, + { + "v": "2015", + "n": "2015" + }, + { + "v": "2014", + "n": "2014" + }, + { + "v": "2013", + "n": "2013" + }, + { + "v": "2012", + "n": "2012" + }, + { + "v": "2011", + "n": "2011" + }, + { + "v": "2010", + "n": "2010" + } + ], + "key": "year" + }, + { + "name": "字母查找", + "value": [ + { + "v": "A", + "n": "A" + }, + { + "v": "B", + "n": "B" + }, + { + "v": "C", + "n": "C" + }, + { + "v": "D", + "n": "D" + }, + { + "v": "E", + "n": "E" + }, + { + "v": "F", + "n": "F" + }, + { + "v": "G", + "n": "G" + }, + { + "v": "H", + "n": "H" + }, + { + "v": "I", + "n": "I" + }, + { + "v": "J", + "n": "J" + }, + { + "v": "K", + "n": "K" + }, + { + "v": "L", + "n": "L" + }, + { + "v": "M", + "n": "M" + }, + { + "v": "N", + "n": "N" + }, + { + "v": "O", + "n": "O" + }, + { + "v": "P", + "n": "P" + }, + { + "v": "Q", + "n": "Q" + }, + { + "v": "R", + "n": "R" + }, + { + "v": "S", + "n": "S" + }, + { + "v": "T", + "n": "T" + }, + { + "v": "U", + "n": "U" + }, + { + "v": "V", + "n": "V" + }, + { + "v": "W", + "n": "W" + }, + { + "v": "X", + "n": "X" + }, + { + "v": "Y", + "n": "Y" + }, + { + "v": "Z", + "n": "Z" + }, + { + "v": "0-9", + "n": "0-9" + } + ], + "key": "character" + }, + { + "name": "评分排序", + "value": [ + { + "v": "time", + "n": "时间排序" + }, + { + "v": "hits", + "n": "人气排序" + }, + { + "v": "score", + "n": "评分排序" + } + ], + "key": "order" + } + ], + "25": [ + { + "name": "时间", + "value": [ + { + "v": "2024", + "n": "2024" + }, + { + "v": "2023", + "n": "2023" + }, + { + "v": "2022", + "n": "2022" + }, + { + "v": "2021", + "n": "2021" + }, + { + "v": "2020", + "n": "2020" + }, + { + "v": "2019", + "n": "2019" + }, + { + "v": "2018", + "n": "2018" + }, + { + "v": "2017", + "n": "2017" + }, + { + "v": "2016", + "n": "2016" + }, + { + "v": "2015", + "n": "2015" + }, + { + "v": "2014", + "n": "2014" + }, + { + "v": "2013", + "n": "2013" + }, + { + "v": "2012", + "n": "2012" + }, + { + "v": "2011", + "n": "2011" + }, + { + "v": "2010", + "n": "2010" + } + ], + "key": "year" + }, + { + "name": "字母查找", + "value": [ + { + "v": "A", + "n": "A" + }, + { + "v": "B", + "n": "B" + }, + { + "v": "C", + "n": "C" + }, + { + "v": "D", + "n": "D" + }, + { + "v": "E", + "n": "E" + }, + { + "v": "F", + "n": "F" + }, + { + "v": "G", + "n": "G" + }, + { + "v": "H", + "n": "H" + }, + { + "v": "I", + "n": "I" + }, + { + "v": "J", + "n": "J" + }, + { + "v": "K", + "n": "K" + }, + { + "v": "L", + "n": "L" + }, + { + "v": "M", + "n": "M" + }, + { + "v": "N", + "n": "N" + }, + { + "v": "O", + "n": "O" + }, + { + "v": "P", + "n": "P" + }, + { + "v": "Q", + "n": "Q" + }, + { + "v": "R", + "n": "R" + }, + { + "v": "S", + "n": "S" + }, + { + "v": "T", + "n": "T" + }, + { + "v": "U", + "n": "U" + }, + { + "v": "V", + "n": "V" + }, + { + "v": "W", + "n": "W" + }, + { + "v": "X", + "n": "X" + }, + { + "v": "Y", + "n": "Y" + }, + { + "v": "Z", + "n": "Z" + }, + { + "v": "0-9", + "n": "0-9" + } + ], + "key": "character" + }, + { + "name": "评分排序", + "value": [ + { + "v": "time", + "n": "时间排序" + }, + { + "v": "hits", + "n": "人气排序" + }, + { + "v": "score", + "n": "评分排序" + } + ], + "key": "order" + } + ], + "4": [ + { + "name": "时间", + "value": [ + { + "v": "2024", + "n": "2024" + }, + { + "v": "2023", + "n": "2023" + }, + { + "v": "2022", + "n": "2022" + }, + { + "v": "2021", + "n": "2021" + }, + { + "v": "2020", + "n": "2020" + }, + { + "v": "2019", + "n": "2019" + }, + { + "v": "2018", + "n": "2018" + }, + { + "v": "2017", + "n": "2017" + }, + { + "v": "2016", + "n": "2016" + }, + { + "v": "2015", + "n": "2015" + }, + { + "v": "2014", + "n": "2014" + }, + { + "v": "2013", + "n": "2013" + }, + { + "v": "2012", + "n": "2012" + }, + { + "v": "2011", + "n": "2011" + }, + { + "v": "2010", + "n": "2010" + } + ], + "key": "year" + }, + { + "name": "字母查找", + "value": [ + { + "v": "A", + "n": "A" + }, + { + "v": "B", + "n": "B" + }, + { + "v": "C", + "n": "C" + }, + { + "v": "D", + "n": "D" + }, + { + "v": "E", + "n": "E" + }, + { + "v": "F", + "n": "F" + }, + { + "v": "G", + "n": "G" + }, + { + "v": "H", + "n": "H" + }, + { + "v": "I", + "n": "I" + }, + { + "v": "J", + "n": "J" + }, + { + "v": "K", + "n": "K" + }, + { + "v": "L", + "n": "L" + }, + { + "v": "M", + "n": "M" + }, + { + "v": "N", + "n": "N" + }, + { + "v": "O", + "n": "O" + }, + { + "v": "P", + "n": "P" + }, + { + "v": "Q", + "n": "Q" + }, + { + "v": "R", + "n": "R" + }, + { + "v": "S", + "n": "S" + }, + { + "v": "T", + "n": "T" + }, + { + "v": "U", + "n": "U" + }, + { + "v": "V", + "n": "V" + }, + { + "v": "W", + "n": "W" + }, + { + "v": "X", + "n": "X" + }, + { + "v": "Y", + "n": "Y" + }, + { + "v": "Z", + "n": "Z" + }, + { + "v": "0-9", + "n": "0-9" + } + ], + "key": "character" + }, + { + "name": "评分排序", + "value": [ + { + "v": "time", + "n": "时间排序" + }, + { + "v": "hits", + "n": "人气排序" + }, + { + "v": "score", + "n": "评分排序" + } + ], + "key": "order" + } + ] + } +} \ No newline at end of file diff --git a/js/xiaosa/json/yyds.json b/js/xiaosa/json/yyds.json new file mode 100644 index 0000000..3c2cffa --- /dev/null +++ b/js/xiaosa/json/yyds.json @@ -0,0 +1,36 @@ +{ + "SiteUrl": "https://tv.yydsys.top", + "Domains": [ + "https://tv.yydsys.top", + "https://tv.yydsys.cc", + "https://tv.214521.xyz" + ], + "SiteWord": "yyds", + "SiteName": "多多", + "Classes": [ + { + "type_name": "多多电影", + "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": "纪录", + "type_id": "20" + } + ] +} \ No newline at end of file diff --git a/js/xiaosa/json/zz.json b/js/xiaosa/json/zz.json new file mode 100644 index 0000000..22adc18 --- /dev/null +++ b/js/xiaosa/json/zz.json @@ -0,0 +1,41 @@ +{ + "SiteUrl": "https://mihdr.top", + "Domains": [ + "https://mihdr.top", + "http://xiaomi666.fun", + "http://www.miqk.cc", + "https://xiaomiai.site" + ], + "SiteWord": "zz", + "SiteName": "至臻", + "Classes": [ + { + "type_name": "臻彩电影", + "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": "老剧计划", + "type_id": "24" + }, + { + "type_name": "臻彩严选", + "type_id": "26" + } + ] +} \ No newline at end of file diff --git a/js/xiaosa/json/初中课堂.json b/js/xiaosa/json/初中课堂.json new file mode 100644 index 0000000..8e89f18 --- /dev/null +++ b/js/xiaosa/json/初中课堂.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/js/xiaosa/json/哔哩合集.json b/js/xiaosa/json/哔哩合集.json new file mode 100644 index 0000000..b3aec1f --- /dev/null +++ b/js/xiaosa/json/哔哩合集.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/js/xiaosa/json/哔哩哔哩听书.json b/js/xiaosa/json/哔哩哔哩听书.json new file mode 100644 index 0000000..4a5b5eb --- /dev/null +++ b/js/xiaosa/json/哔哩哔哩听书.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/js/xiaosa/json/哔哩哔哩小品.json b/js/xiaosa/json/哔哩哔哩小品.json new file mode 100644 index 0000000..9ebaf36 --- /dev/null +++ b/js/xiaosa/json/哔哩哔哩小品.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/js/xiaosa/json/哔哩哔哩戏曲.json b/js/xiaosa/json/哔哩哔哩戏曲.json new file mode 100644 index 0000000..31ceb05 --- /dev/null +++ b/js/xiaosa/json/哔哩哔哩戏曲.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/js/xiaosa/json/哔哩哔哩演唱会.json b/js/xiaosa/json/哔哩哔哩演唱会.json new file mode 100644 index 0000000..3a9b610 --- /dev/null +++ b/js/xiaosa/json/哔哩哔哩演唱会.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/js/xiaosa/json/哔哩哔哩相声.json b/js/xiaosa/json/哔哩哔哩相声.json new file mode 100644 index 0000000..bc8c218 --- /dev/null +++ b/js/xiaosa/json/哔哩哔哩相声.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/js/xiaosa/json/哔哩视频.json b/js/xiaosa/json/哔哩视频.json new file mode 100644 index 0000000..897b724 --- /dev/null +++ b/js/xiaosa/json/哔哩视频.json @@ -0,0 +1,374 @@ +{ + "class": [ + { + "type_name": "番剧", + "type_id": "1" + }, + { + "type_name": "国创", + "type_id": "4" + }, + { + "type_name": "剧集", + "type_id": "5" + }, + { + "type_name": "综艺", + "type_id": "7" + }, + { + "type_name": "纪录", + "type_id": "3" + } + ], + "filters": { + "2": [ + { + "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" + } + ] + } + ], + "5": [ + { + "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" + } + ] + } + ], + "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" + } + ] + } + ], + "3": [ + { + "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" + } + ] + } + ], + "1": [ + { + "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" + } + ] + } + ], + "4": [ + { + "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" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/js/xiaosa/json/小学课堂.json b/js/xiaosa/json/小学课堂.json new file mode 100644 index 0000000..7daba97 --- /dev/null +++ b/js/xiaosa/json/小学课堂.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/js/xiaosa/json/少儿教育.json b/js/xiaosa/json/少儿教育.json new file mode 100644 index 0000000..db0d684 --- /dev/null +++ b/js/xiaosa/json/少儿教育.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/js/xiaosa/json/采集静态.json b/js/xiaosa/json/采集静态.json new file mode 100644 index 0000000..ef1ce84 --- /dev/null +++ b/js/xiaosa/json/采集静态.json @@ -0,0 +1,124 @@ +[ + { + "name": "魔都资源", + "url": "https://caiji.moduapi.cc", + "parse_url": "", + "cate_exclude": "电影|连续剧|综艺|伦理片", + "class_name": "H4sIAAAAAAAAAzWPWQ6CQBBEb8M5FaMyxIh8iAskfriMIiJqXECH09A9cAtnmuGrX3VXV1IQiqrg4B7xd7ZwsW82p04kXJbTTnyu4GVGNOOJnMdGqFGJSLKxBUEEjGuSzg0HQyLuQ/7VhP0Z9gLyMW6u6CyrghENXLTXdE1fUFyIvF29JR9MR+DdyWcnMvAp2b1KERP1y2ZdaqrTDMScdps2om3HuNUcVrqDJtUwFJpMQ0WqG+Yl7RZ7jBKi5xt2AdEjMx8qVo0/1LC8rzQBAAA=", + "class_url": "1&2&3&4&5&6&10&11&12&13&14&15&16&17&18&20&21&22&23&24&25&26&27&28&29&30&31&32&33&34&35&36&37&38" + }, + { + "name": "360资源", + "url": "https://360zy.com", + "parse_url": "", + "cate_exclude": "电影|连续剧|综艺|动漫|伦理片|体育|爽文短剧", + "class_name": "H4sIALGjdWYC/zWRa3aCMBCFd5N9tAvomhRaFHoqcKpYrUd7VEQtCD6rYGAzee6iYYi/8s0kmZl7h/fPFO+RqKa8SKgdIV7chZ0j6qzZ/ReR+4p7Frc7dYLgCVAwUQ9r4t09M9+AIp/eippY22OtAN7Zkb5l3S+S25D7xiSP6j5yNWLXFGi2UemaWBzxslcTwZ/COKCX5yfETIcZY/i8u9A84akidykWUJr2LOoeoIkR88CHYZyU4y1Qu5TjEijfUjwAmiVaD+/DxNTN2K2E/sOQTWKg8x9dBkDHTE9Hl5EcWdqfenY3ewTDUIl4BCDiYWOjtzFTy9MB/NGBuBy5ZyKe7uqDTba0a/F9gURYSXPdWI1Z0FGzw456GSkW0sT0aiDx6rPTtFGP6O2kbvimEhdHu0SKESl/VPAhcKzKgJTwKOc+a7+rDarteHJQyZYl5sk/IOiszA8CAAA=", + "class_url": "1&2&3&4&5&6&7&8&9&10&11&12&13&14&15&16&17&18&20&21&22&23&24&25&26&27&28&29&30&31&32&33&34&35&36&37&38&39&40&41&42&43&45&46&47&48&49&50&51&52&53" + }, + { + "name": "豪华资源", + "url": "https://hhzyapi.com", + "parse_url": "", + "cate_exclude": "电视剧|电影|综艺|动漫|短剧|伦理片", + "class_name": "H4sIALGjdWYC/zVPWw6CMBC8Tc/pI6D1w0eCKErCj1ofKBBjokg5DbsLt7Bdy1dnZrezMxS8WuWDVIKCF+hCYKqonluhO0X4zhglF/vg5sjskuIzt6ipTrT0SU4EzM6Nji2iaYFjj7UwNkusqRV8vhbhcImDkKdSuT2cbptSWtQ+ctBr54fVTYDvQcynjEABWzTvO+y1WzCRME578o/+J/StWlkKWOT4qdnhoLrId7L5Z0r1xLRc5D1hE0doWHe7mkOOUgpXXGaWkb5yyOPE1aLkbk78ALNMUSlMAQAA", + "class_url": "1&2&3&4&5&6&7&8&9&10&11&12&13&14&15&16&17&20&23&24&25&26&27&28&30&31&32&33&34&35&36&37&38" + }, + { + "name": "速播资源", + "url": "https://subocaiji.com", + "parse_url": "", + "cate_exclude": "电影|电视剧|动漫|综艺|短剧|伦理片", + "class_name": "H4sIALGjdWYC/zWPWw6CMBBFd9N1+ohKNVGMiBpI+FHrAyJISHiV1bQzsAuZgl/39LY9k0En0zJh6GStWGoumF4/oH4zrOqWlwzLl5ZH5CvqlfSJ0EpgvjAk9rqoiMA6q5Kbd1yMtzC1YeKazvX7erT0dhyG6qvoLsPQXQxFQ9QFTwpsthSQf6BJDZ1uJtKYQtV3tJckVPLQzr5t5qlyw1QeaU+OG/Q/wA//h1CQctwtiHrJD0Ycn8r6AAAA", + "class_url": "1&2&3&4&5&6&7&8&9&10&11&12&13&14&15&16&17&18&20&21&22&23&24&25&26&27" + }, + { + "name": "红牛资源", + "url": "https://www.hongniuzy2.com", + "parse_url": "", + "cate_exclude": "电影|连续剧|综艺|动漫|纪录片|伦理片|体育赛事|短剧", + "class_name": "H4sIALGjdWYC/y2PXQ6CMBCEb9Nz+hOVaqIYFU0g8qRV1AgSEikUL9Pu1lvorj7Nl5nNZBbXlTOF8K89NjcnlcCm9VILNz1BeyGxJkE5ES5KvjERBgUMR0xq6eqGCPoh9CK+k+qfQrCzWrIXG6sVtcPzDl3JtD2wXBV2cyK3yKHu2Ctzknd65kE6c2bDNbwJf4tte8RwTLY1Kz94+Cq2eiYwpS8+mOVyptYAAAA=", + "class_url": "1&2&3&4&5&6&7&8&9&10&11&12&13&14&15&16&17&18&19&20&21&29&30" + }, + { + "name": "新浪资源", + "url": "https://api.xinlangapi.com", + "parse_url": "", + "api": "/xinlangapi.php/provide/vod/from/xlm3u8/", + "cate_exclude": "电影|电视剧|动漫|综艺|纪录片|伦理片|体育|短剧", + "class_name": "H4sIALGjdWYC/0WOXQ6CMBCEb9Nz+hOR+qAYETUh4UWtikaQkEihPU27W24hXU18msk3m53BuLaqZBjXTgSWC2YXF+hyhm3nuGQob1Ztkc89Nyr1DsMSpjNyYm2b1jsI90ZyuuPil8I4glFCLEkHTO4o+gP1wPsJuqLGVQGNJnYXqJf/Ffgd12dXSncnkqrwYrozRoH/adTGTV4Ms8fAP2ziC/TQAAAA", + "class_url": "1&2&3&4&5&6&7&8&9&10&11&12&13&14&15&16&17&18&20&21&22&23&24" + }, + { + "name": "黑木耳资源", + "url": "https://www.heimuer.tv", + "parse_url": "", + "cate_exclude": "^电影$|^电视剧$|^综艺$|^动漫$|^短剧$", + "class_name": "H4sIALGjdWYC/0WSbXKCQAyGb8M5UQcRqgU7DFal2mllKBa/pqNjQexl2M1yi7LZpP2175PNJnkDEJ1FfbIgOqtsKLzMEv6HvH1aUN2UV1pdRA4c8Fwdb+oE1fCpneeowrG0M1Rx0qWiSl3xXWkle6G0Y4wt66bMdHV5PeijXedIsxSPfgHxFJ8MfNlfaAW9e7u4oxqdaATwD1BvUWVTatKNBVEF5GK9w3pfR3QS4CGLDO6PqOJjmxd45VyaKsbYbqxGK+w9em5KD6tXgXCuqOopVAlV7x6J/eDfD61IWwqOBNrYsuabWSqTggHHYMBJujl5zTgPQ7BR7w55UfNQ9h4IWnuo3nbs0mzNAKQrddpymjuBaE0gNpOmcjkt/1EXnyFKxP6V026lsv+ahmOxf+EbY5uammWaf8T4IzDOCeiDUxouiIGdcyZWN/ALQpTFCIwCAAA=", + "class_url": "1&2&3&4&6&7&8&9&10&11&12&13&14&15&16&20&21&22&23&24&25&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&52&53&54&55&56&57&58&59&60&61&62&63" + }, + { + "name": "暴风资源", + "url": "https://bfzyapi.com", + "parse_url": "", + "cate_exclude": "电影片|连续剧|综艺片|动漫片|伦理片|电影解说|体育|演员|新闻资讯", + "class_name": "H4sIALGjdWYC/zWRa3aCMBCFd5N1+kIFj1VOLdbq0Z6iBq0VrI8qGN1MMhN20WSAP8x34c7NZMDRWYkDuh2mvEiKGVEwUy63BPUh1AJLyH11y4i6B2g65HN5SdB9l6lLX9OtEm9Ew7bep5b0c47Zj3EzNRUy5ZZgx/HxYilfT+AaEy02xkC+QQK3B/nGK5jtiM5/ahkQHZPK50Vw/6ZZimTStslmlaI4qRTmpEFSiSKxEJjdtUvjqiXPJ+1Clw2VoNxKUG4pTAiOivXQQjUPdXxi+VdL+Z59LcWrbvzq81SmPaYvRxw2GcZ7KsK3BYJYx6lyegwXdllmDOVELO/0cbSAxDc3ZLh56ounbieZhQxfElN0VDM/wWysr8UOuwICc4PVEeo9qGU6rLN8vFWbD1xn5snyplDXhm75cJqbnqUOHZlN5OPzH964N6gIAgAA", + "class_url": "20&21&22&23&24&25&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&52&53&54&55&56&57&58&65&66&67&68&69&70&71&72" + }, + { + "name": "量子资源", + "url": "https://cj.lziapi.com", + "parse_url": "", + "cate_exclude": "电影片|连续剧|动漫片|综艺片|伦理片|电影解说|体育|演员|新闻资讯", + "class_name": "H4sIALGjdWYC/zWR607DMAyF3ybPCbuxDom1Yms3UTEJtmWI0bSMAr1kvEzspG9B46S/8h3b8XEcvSpBFjq4Y+bvWTcfEHCmm9YEtY3B4oTtuyclU6I47Yss6XmB4ykRj6BqLOFtiDcx1QXcZ3G+UXVAsSepam49uuMWfwXR7q0PW8Iz19cHSybLQa7pxjLH6krZ5IDpmaj8gX1MdMn9XdjzbjtzkzPbeZkPIjn0FoMgCy/8NPRGXzYIN4kX1G0QztsJ1R51OKMF0BoNfzXiiyn5aEafzHxfdDhmWmR0yMgeGAsjapjeM2xXEG36QN4ljSknJhNDGyfgVKgqdHnWvUwgWpDVzn7SP/ilxw64AQAA", + "class_url": "1&2&3&4&6&7&8&9&10&11&12&13&14&15&16&20&21&22&23&24&25&26&27&28&29&30&31&32&33&34&35&36&37&38&39&40&41&42&43&44&45&46" + }, + { + "name": "非凡资源", + "url": "http://cj.ffzyapi.com", + "parse_url": "", + "cate_exclude": "电影片|连续剧|动漫片|综艺片|伦理片", + "class_name": "H4sIAFhXhmYC/zWQWw6CMBBFd8M6NUakfggmChKJ/ADViFpiiPIobqadwi6kQ/k7d153ZtShlLxQZGP1v4tqHpJQSzVtT2odk9srtHdDgkdIfjQWaVJOAas1Et3LqtEESw8WPtYRarLgnERNMHbmoqbaY8hC+L6Q4tsY1gQ5Vd1OU/9kkh+xw2VQdZgNUohypPIjEx/pzUyvTOgQ2tPmlp7sslkE6WgxC7QwwmyDN5qyWUybGIHTZjF5T0K0mfJsfECsP/cHYziM500BAAA=", + "class_url": "1&2&3&4&6&7&8&9&10&11&12&13&14&15&16&20&21&22&23&24&25&26&27&28&29&30&31&32&33&34&36" + }, + { + "name": "索尼资源", + "url": "https://suoniapi.com", + "parse_url": "", + "cate_exclude": "电影|电视剧|综艺|动漫|体育赛事|预告片|影视解说|爽文短剧|伦理|港台三级|两性课堂|写真热舞", + "class_name": "H4sIAFlXhmYC/z1RbXaCMBC8TU7QW/RSip/oq8orxVp56hNoaqtFq1gFopfJZsMtGhLor93Z3czuTNBNgB0IuomkXbApwSyXdkpg8CHyrzJw5qPdI+D5ql1m2D+IVkdn1IFrVmaiORENT8/ZtOqK/itPbV2bM57Skl1sKd5GZVYsN7owjXS4xGWA8V6jow6YfgJ70VTJL4SenghpMetWR6rHiqYGimK8r4HeU2sx640i86YG5px/regaNZqqnjG7K5C74B54/kY4e5bWj0zmPB0SjL9x0iLyfCxDsW6DM9BEXizjFDpDokxWBksayPikHGTC6+FyVyri+TtOutVOfrExNeaoo01HRnfhXeuxaST8bQX4JRQNKuMbrCwC3Rn6S2ztZH9BHh7RfKzwbQhqKRAdi7UjmkP1hcrrJ8m26hRjfCiDDs9m/LYicD3xLMDNXZ4HRLYdcVoIa4ueQ3C0V52ixeBikcJKxH5s9vwBtOQp10cCAAA=", + "class_url": "1&2&3&4&6&7&8&9&10&11&12&13&14&15&16&17&18&19&20&23&25&26&27&28&29&30&31&39&44&45&47&48&49&50&51&52&53&54&55&56&57&58&59&60&61&62&63&64&65&66&67&68&69&70" + }, + { + "name": "️极速资源", + "url": "https://jszyapi.com", + "parse_url": "", + "cate_exclude": "电视剧|电影|动漫|综艺|短剧|伦理片", + "api": "/api.php/provide/vod/at/json/", + "class_name": "H4sIAGJXhmYC/zVP0W7CMBD7m3znYKIQkICKUsaoxMsgsBUooEpQmn5N7i79iyVH+hTbsXw2JaVVEUglKClBXwXmipqpF9r9Gh8XRtujf3C1Y3bM8V54ZOo9zSOSQwHjg9GZRzS64ueAtTRzJtZUDM+XR9ib40fKv1IFH46+TCU9sucC9DLkYf0nIBpAxqecQAlHmMcJNjoYXCXM8o68q78JvWorKwGzAp8Nl9UL27/ZcmOqiYAf1a6j4HEhbmFH3ORZ0RFODIR6TfvdcON+TmnMy8YX0r/ceDcMG2l7cvf+AYiMpdZZAQAA", + "class_url": "1&2&3&4&5&6&7&8&9&10&11&12&13&14&15&16&17&20&23&24&25&26&27&28&29&30&31&32&33&34&35&36&37&38" + }, + { + "name": "光速资源", + "url": "https://api.guangsuapi.com", + "parse_url": "", + "cate_exclude": "电影|电视剧|综艺|动漫|记录片|伦理片|体育赛事|短剧", + "class_name": "H4sIAFVXhmYC/y2Oaw6CMBCEb9Nz+ohINVGMiBpJ+KNW4gskJPJoT9PulltIF3/Nl5nJ7GJYGpkzDEsrPMMFw6a1vGZmcYP27kTLGPmcmSjuY0fo5zCdEYmNqRpKufh7MA5gFBH5B11zSs+iO9I6PASqFdH3Dapw1CWpk+EiDv/A/kLeOoNKUb3InNhXZuTOber2ioFHJLd28rHlSddLhsmz7/0A4RcQUdYAAAA=", + "class_url": "1&2&3&4&6&7&8&9&10&11&12&13&14&15&16&20&21&22&23&24&25&30&31" + }, + { + "name": "卧龙资源", + "url": "https://collect.wolongzy.cc", + "parse_url": "", + "cate_exclude": "电影片|连续剧|综艺片|动漫片|伦理片|电影解说|体育|短剧", + "class_name": "H4sIAFZXhmYC/1WR0VLCQAxF/6bfqXQsbB9omYEq2JEHKqtQ2iIC0nbxZ5pk+Qt303VG307uZnJvsjQ9gtqTGHr6+4WaHQjpUdNqUVsNwjdst446lTIlqWmyRKM9+g9McgKXxhLex3iXcJ+Q7hVHT10tWHtWXS2tx209x6+SafluZEuYS7qOLUFU4eXK2uMrpjnT8QxZYkkXFagZ+y53LhxNmz8GHPt3niv6Qa4w1lHV7+kCuAIyeZsHrsBD9S+ak4lvpuVKl58e+iEOFuxdnKDu80SZXvHqMA4g+uAjDHJKJhw6LEltmMqCYt/r2jXFAf/B6WAFs5Yx/QEG4wmPmwEAAA==", + "class_url": "1&2&3&4&5&6&7&8&9&10&11&12&13&14&15&16&17&18&22&23&24&25&26&27&30&31&32&33&37&38&39&42&43&44&45&46&48&49&51&54" + }, + { + "name": "无尽资源", + "url": "https://api.wujinapi.me", + "parse_url": "", + "cate_exclude": "电影|连续剧|综艺|动漫|伦理片|体育赛事|影视解说|短剧|预告片|资讯|公告|头条|港台三级|韩国伦理|西方伦理|日本伦理|两性课堂|写真热舞", + "class_name": "H4sIAFhXhmYC/zVRWVbCQBC8zZxTwxp8CnliFI2AEhzUaIIQhSxwmeklt3Ayk/xVdVe/7qqmaQrlVvB5TvkXuFJQXrCbCRhtsPgUnHb5O66ZKgNyBwL8QKtqRMMtdnoGSQ+OeY3wcoIXvtG5suni8EFlrqk9lSqT9ZLqbYaHuEYwTvB4MotPN1pgar0IvJGAcI/PL0IVbzTpmz3ZB5R3NaoW740W79cYRAalfxD6Zj6U1azfGNECrW6JXjpOWhJJvbP1a2+zru1MS4ysJU5EvmfMjDY0NaZpFFP5YWrrQRNE5aSYjMmGi7ukPkuVt+z8cPqksitB8TdNOkK3WfZZrjjeC1qYD9gj24XWVUOKKUy3qngU/Lurx6vXrk7KpGyG1MGlTDbx2OAEr8/oHxti42qIOoR4ITk+wdIR0J9RsKDOFw/nAgMXVu0JsN5Vrx5eXumP639dcxnR0ITPXQ/3c5uJgONe5St6P/Ov/t045FVP5TN1Wgq6SXSn6pRwcP4BxMt0fHACAAA=", + "class_url": "1&2&3&4&5&6&7&8&9&10&11&12&13&14&15&16&17&18&20&21&22&23&24&25&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&52&53&54&55&56&57&58&59" + } +] \ No newline at end of file diff --git a/js/xiaosa/json/高中课堂.json b/js/xiaosa/json/高中课堂.json new file mode 100644 index 0000000..ea8a3e0 --- /dev/null +++ b/js/xiaosa/json/高中课堂.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/js/xiaosa/py/APPV2.py b/js/xiaosa/py/APPV2.py new file mode 100644 index 0000000..c3fe418 --- /dev/null +++ b/js/xiaosa/py/APPV2.py @@ -0,0 +1,97 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import sys +sys.path.append('..') +from base.spider import Spider + +class Spider(Spider): + + def init(self, extend=""): + ''' + example: + { + "key": "py_appV2", + "name": "xxx", + "type": 3, + "searchable": 1, + "quickSearch": 1, + "filterable": 1, + "api": "./py/APPV2.py", + "ext": "http://cmsyt.lyyytv.cn" + } + + ''' + self.host=extend + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + headers = { + 'User-Agent': 'okhttp/4.12.0', + } + + def homeContent(self, filter): + data = self.fetch(f"{self.host}//api.php/app/nav?token=",headers=self.headers).json() + keys = ["class", "area", "lang", "year", "letter", "by", "sort"] + filters = {} + classes = [] + for item in data['list']: + has_non_empty_field = False + jsontype_extend = item["type_extend"] + classes.append({"type_name": item["type_name"], "type_id": item["type_id"]}) + for key in keys: + if key in jsontype_extend and jsontype_extend[key].strip() != "": + has_non_empty_field = True + break + if has_non_empty_field: + filters[str(item["type_id"])] = [] + for dkey in jsontype_extend: + if dkey in keys and jsontype_extend[dkey].strip() != "": + values = jsontype_extend[dkey].split(",") + value_array = [{"n": value.strip(), "v": value.strip()} for value in values if + value.strip() != ""] + filters[str(item["type_id"])].append({"key": dkey, "name": dkey, "value": value_array}) + result = {} + result["class"] = classes + result["filters"] = filters + return result + + def homeVideoContent(self): + data=self.fetch(f"{self.host}/api.php/app/index_video?token=",headers=self.headers).json() + videos=[] + for item in data['list']:videos.extend(item['vlist']) + return {'list':videos} + + def categoryContent(self, tid, pg, filter, extend): + params = {'tid':tid,'class':extend.get('class',''),'area':extend.get('area',''),'lang':extend.get('lang',''),'year':extend.get('year',''),'limit':'18','pg':pg} + data=self.fetch(f"{self.host}/api.php/app/video",params=params,headers=self.headers).json() + return data + + def detailContent(self, ids): + data=self.fetch(f"{self.host}/api.php/app/video_detail?id={ids[0]}",headers=self.headers).json() + return {'list':[data['data']]} + + def searchContent(self, key, quick, pg="1"): + data=self.fetch(f"{self.host}/api.php/app/search?text={key}&pg={pg}",headers=self.headers).json() + videos=data['list'] + for item in data['list']: + item.pop('type', None) + return {'list':videos,'page':pg} + + def playerContent(self, flag, id, vipFlags): + return {'jx':1,'playUrl':'','parse': 1, 'url': id, 'header': self.headers} + + def localProxy(self, param): + pass + + diff --git a/js/xiaosa/py/优酷视频.py b/js/xiaosa/py/优酷视频.py new file mode 100644 index 0000000..399d0db --- /dev/null +++ b/js/xiaosa/py/优酷视频.py @@ -0,0 +1,301 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import json +import sys +import time +from concurrent.futures import ThreadPoolExecutor, as_completed +from urllib.parse import quote +from Crypto.Hash import MD5 +import requests +sys.path.append('..') +from base.spider import Spider + + +class Spider(Spider): + + def init(self, extend=""): + self.session = requests.Session() + self.session.headers.update(self.headers) + self.session.cookies.update(self.cookie) + self.get_ctoken() + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + host='https://www.youku.com' + + shost='https://search.youku.com' + + h5host='https://acs.youku.com' + + ihost='https://v.youku.com' + + headers = { + 'User-Agent': 'Mozilla/5.0 (; Windows 10.0.26100.3194_64 ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Electron/14.2.0 Safari/537.36 Node/14.17.0 YoukuDesktop/9.2.60 UOSYouku (2.0.1)-Electron(UTDID ZYmGMAAAACkDAMU8hbiMmYdd;CHANNEL official;ZREAL 0;BTYPE TM2013;BRAND TIMI;BUILDVER 9.2.60.1001)', + 'Referer': f'{host}/' + } + + cookie={ + "__ysuid": "17416134165380iB", + "__aysid": "1741613416541WbD", + "xlly_s": "1", + "isI18n": "false", + "cna": "bNdVIKmmsHgCAXW9W6yrQ1/s", + "__ayft": "1741672162330", + "__arpvid": "1741672162331FBKgrn-1741672162342", + "__ayscnt": "1", + "__aypstp": "1", + "__ayspstp": "3", + "tfstk": "gZbiib4JpG-6DqW-B98_2rwPuFrd1fTXQt3vHEp4YpJIBA3OgrWcwOi90RTOo9XVQ5tAM5NcK_CP6Ep97K2ce1XDc59v3KXAgGFLyzC11ET2n8U8yoyib67M3xL25e8gS8pbyzC1_ET4e8URWTsSnHv2uh8VTeJBgEuN3d-ELQAWuKWV36PHGpJ2uEWVTxvicLX1ewyUXYSekxMf-CxMEqpnoqVvshvP_pABOwvXjL5wKqeulm52np_zpkfCDGW9Ot4uKFIRwZtP7vP9_gfAr3KEpDWXSIfWRay-DHIc_Z-hAzkD1i5Ooi5LZ0O5YO_1mUc476YMI3R6xzucUnRlNe_zemKdm172xMwr2L7CTgIkbvndhFAVh3_YFV9Ng__52U4SQKIdZZjc4diE4EUxlFrfKmiXbBOHeP72v7sAahuTtWm78hRB1yV3tmg9bBOEhWVnq5KwOBL5." + } + + def homeContent(self, filter): + result = {} + categories = ["电视剧", "电影", "综艺", "动漫", "少儿", "纪录片", "文化", "亲子", "教育", "搞笑", "生活", + "体育", "音乐", "游戏"] + classes = [{'type_name': category, 'type_id': category} for category in categories] + filters = {} + self.typeid = {} + with ThreadPoolExecutor(max_workers=len(categories)) as executor: + tasks = { + executor.submit(self.cf, {'type': category}, True): category + for category in categories + } + + for future in as_completed(tasks): + try: + category = tasks[future] + session, ft = future.result() + filters[category] = ft + self.typeid[category] = session + except Exception as e: + print(f"处理分类 {tasks[future]} 时出错: {str(e)}") + + result['class'] = classes + result['filters'] = filters + return result + + def homeVideoContent(self): + try: + vlist = [] + params={"ms_codes":"2019061000","params":"{\"debug\":0,\"gray\":0,\"pageNo\":1,\"utdid\":\"ZYmGMAAAACkDAMU8hbiMmYdd\",\"userId\":\"\",\"bizKey\":\"YOUKU_WEB\",\"appPackageKey\":\"com.youku.YouKu\",\"showNodeList\":0,\"reqSubNode\":0,\"nodeKey\":\"WEBHOME\",\"bizContext\":\"{\\\"spmA\\\":\\\"a2hja\\\"}\"}","system_info":"{\"device\":\"pcweb\",\"os\":\"pcweb\",\"ver\":\"1.0.0.0\",\"userAgent\":\"Mozilla/5.0 (; Windows 10.0.26100.3194_64 ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Electron/14.2.0 Safari/537.36 Node/14.17.0 YoukuDesktop/9.2.60 UOSYouku (2.0.1)-Electron(UTDID ZYmGMAAAACkDAMU8hbiMmYdd;CHANNEL official;ZREAL 0;BTYPE TM2013;BRAND TIMI;BUILDVER 9.2.60.1001)\",\"guid\":\"1590141704165YXe\",\"appPackageKey\":\"com.youku.pcweb\",\"young\":0,\"brand\":\"\",\"network\":\"\",\"ouid\":\"\",\"idfa\":\"\",\"scale\":\"\",\"operator\":\"\",\"resolution\":\"\",\"pid\":\"\",\"childGender\":0,\"zx\":0}"} + data=self.getdata(f'{self.h5host}/h5/mtop.youku.columbus.home.query/1.0/',params) + okey=list(data['data'].keys())[0] + for i in data['data'][okey]['data']['nodes'][0]['nodes'][-1]['nodes'][0]['nodes']: + if i.get('nodes') and i['nodes'][0].get('data'): + i=i['nodes'][0]['data'] + if i.get('assignId'): + vlist.append({ + 'vod_id': i['assignId'], + 'vod_name': i.get('title'), + 'vod_pic': i.get('vImg') or i.get('img'), + 'vod_year': i.get('mark',{}).get('data',{}).get('text'), + 'vod_remarks': i.get('summary') + }) + return {'list': vlist} + except Exception as e: + print(f"处理主页视频数据时出错: {str(e)}") + return {'list': []} + + def categoryContent(self, tid, pg, filter, extend): + result = {} + vlist = [] + result['page'] = pg + result['limit'] = 90 + result['total'] = 999999 + pagecount = 9999 + params = {'type': tid} + id = self.typeid[tid] + params.update(extend) + if pg == '1': + id=self.cf(params) + data=self.session.get(f'{self.host}/category/data?session={id}¶ms={quote(json.dumps(params))}&pageNo={pg}').json() + try: + data=data['data']['filterData'] + for i in data['listData']: + if i.get('videoLink') and 's=' in i['videoLink']: + vlist.append({ + 'vod_id': i.get('videoLink').split('s=')[-1], + 'vod_name': i.get('title'), + 'vod_pic': i.get('img'), + 'vod_year': i.get('rightTagText'), + 'vod_remarks': i.get('summary') + }) + self.typeid[tid]=quote(json.dumps(data['session'])) + except: + pagecount=pg + result['list'] = vlist + result['pagecount'] = pagecount + return result + + def detailContent(self, ids): + try: + data=self.session.get(f'{self.ihost}/v_getvideo_info/?showId={ids[0]}').json() + v=data['data'] + vod = { + 'type_name': v.get('showVideotype'), + 'vod_year': v.get('lastUpdate'), + 'vod_remarks': v.get('rc_title'), + 'vod_actor': v.get('_personNameStr'), + 'vod_content': v.get('showdesc'), + 'vod_play_from': '优酷', + 'vod_play_url': '' + } + params={"biz":"new_detail_web2","videoId":v.get('vid'),"scene":"web_page","componentVersion":"3","ip":data.get('ip'),"debug":0,"utdid":"ZYmGMAAAACkDAMU8hbiMmYdd","userId":0,"platform":"pc","nextSession":"","gray":0,"source":"pcNoPrev","showId":ids[0]} + sdata,index=self.getinfo(params) + pdata=sdata['nodes'] + if index > len(pdata): + batch_size = len(pdata) + total_batches = ((index + batch_size - 1) // batch_size) - 1 + ssj = json.loads(sdata['data']['session']) + with ThreadPoolExecutor(max_workers=total_batches) as executor: + futures = [] + for batch in range(total_batches): + start = batch_size + 1 + (batch * batch_size) + end = start + batch_size - 1 + next_session = ssj.copy() + next_session.update({ + "itemStartStage": start, + "itemEndStage": min(end, index) + }) + current_params = params.copy() + current_params['nextSession'] = json.dumps(next_session) + futures.append((start, executor.submit(self.getvinfo, current_params))) + futures.sort(key=lambda x: x[0]) + + for _, future in futures: + try: + result = future.result() + pdata.extend(result['nodes']) + except Exception as e: + print(f"Error fetching data: {str(e)}") + vod['vod_play_url'] = '#'.join([f"{i['data'].get('title')}${i['data']['action'].get('value')}" for i in pdata]) + return {'list': [vod]} + except Exception as e: + print(e) + return {'list': [{'vod_play_from': '哎呀翻车啦', 'vod_play_url': f'呜呜呜${self.host}'}]} + + def searchContent(self, key, quick, pg="1"): + data=self.session.get(f'{self.shost}/api/search?pg={pg}&keyword={key}').json() + vlist = [] + for i in data['pageComponentList']: + if i.get('commonData') and (i['commonData'].get('showId') or i['commonData'].get('realShowId')): + i=i['commonData'] + vlist.append({ + 'vod_id': i.get('showId') or i.get('realShowId'), + 'vod_name': i['titleDTO'].get('displayName'), + 'vod_pic': i['posterDTO'].get('vThumbUrl'), + 'vod_year': i.get('feature'), + 'vod_remarks': i.get('updateNotice') + }) + return {'list': vlist, 'page': pg} + + def playerContent(self, flag, id, vipFlags): + return {'jx':1,'parse': 1, 'url': f"{self.ihost}/video?vid={id}", 'header': ''} + + def localProxy(self, param): + pass + + def cf(self,params,b=False): + response = self.session.get(f'{self.host}/category/data?params={quote(json.dumps(params))}&optionRefresh=1&pageNo=1').json() + data=response['data']['filterData'] + session=quote(json.dumps(data['session'])) + if b: + return session,self.get_filter_data(data['filter']['filterData'][1:]) + return session + + def process_key(self, key): + if '_' not in key: + return key + parts = key.split('_') + result = parts[0] + for part in parts[1:]: + if part: + result += part[0].upper() + part[1:] + return result + + def get_filter_data(self, data): + result = [] + try: + for item in data: + if not item.get('subFilter'): + continue + first_sub = item['subFilter'][0] + if not first_sub.get('filterType'): + continue + filter_item = { + 'key': self.process_key(first_sub['filterType']), + 'name': first_sub['title'], + 'value': [] + } + for sub in item['subFilter']: + if 'value' in sub: + filter_item['value'].append({ + 'n': sub['title'], + 'v': sub['value'] + }) + if filter_item['value']: + result.append(filter_item) + + except Exception as e: + print(f"处理筛选数据时出错: {str(e)}") + + return result + + def get_ctoken(self): + data=self.session.get(f'{self.h5host}/h5/mtop.ykrec.recommendservice.recommend/1.0/?jsv=2.6.1&appKey=24679788') + + def md5(self,t,text): + h = MD5.new() + token=self.session.cookies.get('_m_h5_tk').split('_')[0] + data=f"{token}&{t}&24679788&{text}" + h.update(data.encode('utf-8')) + return h.hexdigest() + + def getdata(self, url, params, recursion_count=0, max_recursion=3): + data = json.dumps(params) + t = int(time.time() * 1000) + jsdata = { + 'appKey': '24679788', + 't': t, + 'sign': self.md5(t, data), + 'data': data + } + response = self.session.get(url, params=jsdata) + if '令牌过期' in response.text: + if recursion_count >= max_recursion: + raise Exception("达到最大递归次数,无法继续请求") + self.get_ctoken() + return self.getdata(url, params, recursion_count + 1, max_recursion) + else: + return response.json() + + def getvinfo(self,params): + body = { + "ms_codes": "2019030100", + "params": json.dumps(params), + "system_info": "{\"os\":\"iku\",\"device\":\"iku\",\"ver\":\"9.2.9\",\"appPackageKey\":\"com.youku.iku\",\"appPackageId\":\"pcweb\"}" + } + data = self.getdata(f'{self.h5host}/h5/mtop.youku.columbus.gateway.new.execute/1.0/', body) + okey = list(data['data'].keys())[0] + i = data['data'][okey]['data'] + return i + + def getinfo(self,params): + i = self.getvinfo(params) + jdata=i['nodes'][0]['nodes'][3] + info=i['data']['extra']['episodeTotal'] + if i['data']['extra']['showCategory'] in ['电影','游戏']: + jdata = i['nodes'][0]['nodes'][4] + return jdata,info + diff --git a/js/xiaosa/py/偷乐短剧.py b/js/xiaosa/py/偷乐短剧.py new file mode 100644 index 0000000..4aeb27b --- /dev/null +++ b/js/xiaosa/py/偷乐短剧.py @@ -0,0 +1,790 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# 偷乐短剧爬虫 + +import sys +import json +import re +import time +import urllib.parse +import requests +from bs4 import BeautifulSoup + +# 导入基础类 +sys.path.append('../../') +try: + from base.spider import Spider +except ImportError: + # 本地调试时的替代实现 + class Spider: + def init(self, extend=""): + pass + +class Spider(Spider): + def __init__(self): + # 网站主URL + self.siteUrl = "https://www.toule.top" + + # 根据网站实际结构,分类链接格式为: /index.php/vod/show/class/分类名/id/1.html + # 分类ID映射 - 从网站中提取的分类 + self.cateManual = { + "男频": "/index.php/vod/show/class/%E7%94%B7%E9%A2%91/id/1.html", + "女频": "/index.php/vod/show/class/%E5%A5%B3%E9%A2%91/id/1.html", + "都市": "/index.php/vod/show/class/%E9%83%BD%E5%B8%82/id/1.html", + "赘婿": "/index.php/vod/show/class/%E8%B5%98%E5%A9%BF/id/1.html", + "战神": "/index.php/vod/show/class/%E6%88%98%E7%A5%9E/id/1.html", + "古代言情": "/index.php/vod/show/class/%E5%8F%A4%E4%BB%A3%E8%A8%80%E6%83%85/id/1.html", + "现代言情": "/index.php/vod/show/class/%E7%8E%B0%E4%BB%A3%E8%A8%80%E6%83%85/id/1.html", + "历史": "/index.php/vod/show/class/%E5%8E%86%E5%8F%B2/id/1.html", + "玄幻": "/index.php/vod/show/class/%E7%8E%84%E5%B9%BB/id/1.html", + "搞笑": "/index.php/vod/show/class/%E6%90%9E%E7%AC%91/id/1.html", + "甜宠": "/index.php/vod/show/class/%E7%94%9C%E5%AE%A0/id/1.html", + "励志": "/index.php/vod/show/class/%E5%8A%B1%E5%BF%97/id/1.html", + "逆袭": "/index.php/vod/show/class/%E9%80%86%E8%A2%AD/id/1.html", + "穿越": "/index.php/vod/show/class/%E7%A9%BF%E8%B6%8A/id/1.html", + "古装": "/index.php/vod/show/class/%E5%8F%A4%E8%A3%85/id/1.html" + } + + # 请求头 + self.headers = { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36", + "Referer": "https://www.toule.top/", + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", + "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8", + "Accept-Encoding": "gzip, deflate, br", + "Connection": "keep-alive", + } + + + # 缓存 + self.cache = {} + self.cache_timeout = {} + + def getName(self): + return "偷乐短剧" + + def init(self, extend=""): + # 初始化方法,可以留空 + return + + def isVideoFormat(self, url): + """判断是否为视频格式""" + video_formats = ['.mp4', '.m3u8', '.ts', '.flv', '.avi', '.mkv', '.mov', '.rmvb', '.3gp'] + for format in video_formats: + if format in url.lower(): + return True + return False + + def manualVideoCheck(self): + """是否需要手动检查视频""" + return False + + # 工具方法 - 网络请求 + def fetch(self, url, headers=None, data=None, method="GET"): + """统一的网络请求方法""" + try: + if headers is None: + headers = self.headers.copy() + + if method.upper() == "GET": + response = requests.get(url, headers=headers, params=data, timeout=10,verify=False) + else: # POST + response = requests.post(url, headers=headers, data=data, timeout=10,verify=False) + + response.raise_for_status() + response.encoding = response.apparent_encoding or 'utf-8' + return response + except Exception as e: + self.log(f"请求失败: {url}, 错误: {str(e)}", "ERROR") + return None + + # 缓存方法 + def getCache(self, key, timeout=3600): + """获取缓存数据""" + if key in self.cache and key in self.cache_timeout: + if time.time() < self.cache_timeout[key]: + return self.cache[key] + else: + del self.cache[key] + del self.cache_timeout[key] + return None + + def setCache(self, key, value, timeout=3600): + """设置缓存数据""" + self.cache[key] = value + self.cache_timeout[key] = time.time() + timeout + + # 日志方法 + def log(self, msg, level='INFO'): + """记录日志""" + levels = { + 'DEBUG': 0, + 'INFO': 1, + 'WARNING': 2, + 'ERROR': 3 + } + + current_level = 'INFO' # 可以设置为DEBUG以获取更多信息 + + if levels.get(level, 4) >= levels.get(current_level, 1): + print(f"[{level}] {time.strftime('%Y-%m-%d %H:%M:%S')} - {msg}") + + # 辅助方法 - 从URL中提取视频ID + def extractVodId(self, url): + """从URL中提取视频ID""" + # 路径格式: /index.php/vod/play/id/9024/sid/1/nid/1.html + match = re.search(r'/id/(\d+)/', url) + if match: + return match.group(1) + return "" + + # 辅助方法 - 从网页内容中提取分类 + def extractCategories(self, text): + """从网页内容中提取分类标签""" + cats = [] + # 匹配标签字符串,例如: "男频,逆袭,亲情,短剧" + if "," in text: + parts = text.split(",") + for part in parts: + part = part.strip() + if part and part != "短剧": + cats.append(part) + return cats + + # 主要接口实现 + def homeContent(self, filter): + """获取首页分类及内容""" + result = {} + classes = [] + + # 从缓存获取 + cache_key = 'home_classes' + cached_classes = self.getCache(cache_key) + if cached_classes: + classes = cached_classes + else: + # 使用预定义的分类 + for k, v in self.cateManual.items(): + classes.append({ + 'type_id': v, # 使用完整URL路径作为type_id + 'type_name': k + }) + + # 保存到缓存 + self.setCache(cache_key, classes, 24*3600) # 缓存24小时 + + result['class'] = classes + + # 获取首页推荐视频 + videos = self.homeVideoContent().get('list', []) + result['list'] = videos + + return result + + def homeVideoContent(self): + """获取首页推荐视频内容""" + result = {'list': []} + videos = [] + + # 从缓存获取 + cache_key = 'home_videos' + cached_videos = self.getCache(cache_key) + if cached_videos: + return {'list': cached_videos} + + try: + response = self.fetch(self.siteUrl) + if response and response.status_code == 200: + html = response.text + soup = BeautifulSoup(html, 'html.parser') + + # 查找最新更新区域 + latest_section = soup.find('h2', text=lambda t: t and '最新更新' in t) + if latest_section: + container = latest_section.parent # 获取容器 + if container: + # 查找所有 li.item 元素 + items = container.find_all('li', class_='item') + + for item in items: + try: + # 获取链接和标题 + title_link = item.find('h3') + if not title_link: + continue + + title = title_link.text.strip() + + # 获取第一个链接作为详情页链接 + link_tag = item.find('a') + if not link_tag: + continue + + link = link_tag.get('href', '') + if not link.startswith('http'): + link = urllib.parse.urljoin(self.siteUrl, link) + + # 提取ID + vid = self.extractVodId(link) + if not vid: + continue + + # 获取图片 + img_tag = item.find('img') + img_url = "" + if img_tag: + img_url = img_tag.get('src', img_tag.get('data-src', '')) + if img_url and not img_url.startswith('http'): + img_url = urllib.parse.urljoin(self.siteUrl, img_url) + + # 获取备注信息 + remarks = "" + remarks_tag = item.find('span', class_='remarks') + if remarks_tag: + remarks = remarks_tag.text.strip() + + # 获取标签信息 + tags = "" + tags_tag = item.find('span', class_='tags') + if tags_tag: + tags = tags_tag.text.strip() + + # 合并备注和标签 + if remarks and tags: + remarks = f"{remarks} | {tags}" + elif tags: + remarks = tags + + # 构建视频项 + videos.append({ + 'vod_id': vid, + 'vod_name': title, + 'vod_pic': img_url, + 'vod_remarks': remarks + }) + except Exception as e: + self.log(f"处理视频项时出错: {str(e)}", "ERROR") + continue + + # 保存到缓存 + self.setCache(cache_key, videos, 3600) # 缓存1小时 + except Exception as e: + self.log(f"获取首页视频内容发生错误: {str(e)}", "ERROR") + + result['list'] = videos + return result + + def categoryContent(self, tid, pg, filter, extend): + """获取分类内容""" + result = {} + videos = [] + + # 处理页码 + if pg is None: + pg = 1 + else: + pg = int(pg) + + # 构建分类URL - tid是完整的URL路径 + if tid.startswith("/"): + # 替换页码,URL格式可能像: /index.php/vod/show/class/男频/id/1.html + if pg > 1: + if "html" in tid: + category_url = tid.replace(".html", f"/page/{pg}.html") + else: + category_url = f"{tid}/page/{pg}.html" + else: + category_url = tid + + full_url = urllib.parse.urljoin(self.siteUrl, category_url) + else: + # 如果tid不是URL路径,可能是旧版分类ID,尝试查找对应URL + category_url = "" + for name, url in self.cateManual.items(): + if name == tid: + category_url = url + break + + if not category_url: + self.log(f"未找到分类ID对应的URL: {tid}", "ERROR") + result['list'] = [] + result['page'] = pg + result['pagecount'] = 1 + result['limit'] = 0 + result['total'] = 0 + return result + + # 处理页码 + if pg > 1: + if "html" in category_url: + category_url = category_url.replace(".html", f"/page/{pg}.html") + else: + category_url = f"{category_url}/page/{pg}.html" + + full_url = urllib.parse.urljoin(self.siteUrl, category_url) + + # 请求分类页 + try: + response = self.fetch(full_url) + if response and response.status_code == 200: + html = response.text + soup = BeautifulSoup(html, 'html.parser') + + # 查找视频项,根据实际HTML结构调整 + items = soup.find_all('li', class_='item') + + for item in items: + try: + # 获取链接和标题 + title_tag = item.find('h3') + if not title_tag: + continue + + title = title_tag.text.strip() + + # 获取链接 + link_tag = item.find('a') + if not link_tag: + continue + + link = link_tag.get('href', '') + if not link.startswith('http'): + link = urllib.parse.urljoin(self.siteUrl, link) + + # 提取ID + vid = self.extractVodId(link) + if not vid: + continue + + # 获取图片 + img_tag = item.find('img') + img_url = "" + if img_tag: + img_url = img_tag.get('src', img_tag.get('data-src', '')) + if img_url and not img_url.startswith('http'): + img_url = urllib.parse.urljoin(self.siteUrl, img_url) + + # 获取备注信息 + remarks = "" + remarks_tag = item.find('span', class_='remarks') + if remarks_tag: + remarks = remarks_tag.text.strip() + + # 获取标签信息 + tags = "" + tags_tag = item.find('span', class_='tags') + if tags_tag: + tags = tags_tag.text.strip() + + # 合并备注和标签 + if remarks and tags: + remarks = f"{remarks} | {tags}" + elif tags: + remarks = tags + + # 构建视频项 + videos.append({ + 'vod_id': vid, + 'vod_name': title, + 'vod_pic': img_url, + 'vod_remarks': remarks + }) + except Exception as e: + self.log(f"处理分类视频项时出错: {str(e)}", "ERROR") + continue + + # 查找分页信息 + # 默认值 + total = len(videos) + pagecount = 1 + limit = 20 + + # 尝试查找分页元素 + pagination = soup.find('ul', class_='page') + if pagination: + # 查找最后一页的链接 + last_page_links = pagination.find_all('a') + for link in last_page_links: + page_text = link.text.strip() + if page_text.isdigit(): + pagecount = max(pagecount, int(page_text)) + except Exception as e: + self.log(f"获取分类内容发生错误: {str(e)}", "ERROR") + + result['list'] = videos + result['page'] = pg + result['pagecount'] = pagecount + result['limit'] = limit + result['total'] = total + + return result + + def detailContent(self, ids): + """获取详情内容""" + result = {} + + if not ids or len(ids) == 0: + return result + + # 视频ID + vid = ids[0] + + # 构建播放页URL + play_url = f"{self.siteUrl}/index.php/vod/play/id/{vid}/sid/1/nid/1.html" + + try: + response = self.fetch(play_url) + if not response or response.status_code != 200: + return result + + html = response.text + soup = BeautifulSoup(html, 'html.parser') + + # 提取视频基本信息 + # 标题 + title = "" + title_tag = soup.find('h1', class_='items-title') + if title_tag: + title = title_tag.text.strip() + + # 图片 + pic = "" + pic_tag = soup.find('img', class_='thumb') + if pic_tag: + pic = pic_tag.get('src', '') + if pic and not pic.startswith('http'): + pic = urllib.parse.urljoin(self.siteUrl, pic) + + # 简介 + desc = "" + desc_tag = soup.find('div', class_='text-content') + if desc_tag: + desc = desc_tag.text.strip() + + # 标签/分类 + tags = [] + tags_container = soup.find('span', class_='items-tags') + if tags_container: + tag_links = tags_container.find_all('a') + for tag in tag_links: + tag_text = tag.text.strip() + if tag_text: + tags.append(tag_text) + + # 提取播放列表 + play_from = "偷乐短剧" + play_list = [] + + # 查找播放列表区域 + play_area = soup.find('div', class_='swiper-wrapper') + if play_area: + # 查找所有剧集链接 + episode_links = play_area.find_all('a') + for ep in episode_links: + ep_title = ep.text.strip() + ep_url = ep.get('href', '') + + if ep_url: + # 直接使用URL作为ID + if not ep_url.startswith('http'): + ep_url = urllib.parse.urljoin(self.siteUrl, ep_url) + + # 提取集数信息 + ep_num = ep_title + if ep_num.isdigit(): + ep_num = f"第{ep_num}集" + + play_list.append(f"{ep_num}${ep_url}") + + # 如果没有找到播放列表,查找播放按钮 + if not play_list: + play_btn = soup.find('a', class_='btn-play') + if play_btn: + play_url = play_btn.get('href', '') + if play_url: + if not play_url.startswith('http'): + play_url = urllib.parse.urljoin(self.siteUrl, play_url) + + play_list.append(f"播放${play_url}") + + # 如果仍然没有找到播放链接,使用播放页URL + if not play_list: + play_url = f"{self.siteUrl}/index.php/vod/play/id/{vid}/sid/1/nid/1.html" + play_list.append(f"播放${play_url}") + + # 提取更多信息(导演、演员等) + director = "" + actor = "" + year = "" + area = "" + remarks = "" + + # 查找备注信息 + meta_items = soup.find_all('div', class_='meta-item') + for item in meta_items: + item_title = item.find('span', class_='item-title') + item_content = item.find('span', class_='item-content') + + if item_title and item_content: + title_text = item_title.text.strip() + content_text = item_content.text.strip() + + if "导演" in title_text: + director = content_text + elif "主演" in title_text: + actor = content_text + elif "年份" in title_text: + year = content_text + elif "地区" in title_text: + area = content_text + elif "简介" in title_text: + if not desc: + desc = content_text + elif "状态" in title_text: + remarks = content_text + + # 如果没有从meta-item中获取到remarks + if not remarks: + remarks_tag = soup.find('span', class_='remarks') + if remarks_tag: + remarks = remarks_tag.text.strip() + + # 构建标准数据结构 + vod = { + "vod_id": vid, + "vod_name": title, + "vod_pic": pic, + "vod_year": year, + "vod_area": area, + "vod_remarks": remarks, + "vod_actor": actor, + "vod_director": director, + "vod_content": desc, + "type_name": ",".join(tags), + "vod_play_from": play_from, + "vod_play_url": "#".join(play_list) + } + + result = { + 'list': [vod] + } + except Exception as e: + self.log(f"获取详情内容时出错: {str(e)}", "ERROR") + + return result + + def searchContent(self, key, quick, pg=1): + """搜索功能""" + result = {} + videos = [] + + # 构建搜索URL和参数 + search_url = f"{self.siteUrl}/index.php/vod/search.html" + params = {"wd": key} + + try: + response = self.fetch(search_url, data=params) + if response and response.status_code == 200: + html = response.text + soup = BeautifulSoup(html, 'html.parser') + + # 查找搜索结果项 + search_items = soup.find_all('li', class_='item') + + for item in search_items: + try: + # 获取标题 + title_tag = item.find('h3') + if not title_tag: + continue + + title = title_tag.text.strip() + + # 获取链接 + link_tag = item.find('a') + if not link_tag: + continue + + link = link_tag.get('href', '') + if not link.startswith('http'): + link = urllib.parse.urljoin(self.siteUrl, link) + + # 提取视频ID + vid = self.extractVodId(link) + if not vid: + continue + + # 获取图片 + img_tag = item.find('img') + img_url = "" + if img_tag: + img_url = img_tag.get('src', img_tag.get('data-src', '')) + if img_url and not img_url.startswith('http'): + img_url = urllib.parse.urljoin(self.siteUrl, img_url) + + # 获取备注信息 + remarks = "" + remarks_tag = item.find('span', class_='remarks') + if remarks_tag: + remarks = remarks_tag.text.strip() + + # 获取标签信息 + tags = "" + tags_tag = item.find('span', class_='tags') + if tags_tag: + tags = tags_tag.text.strip() + + # 合并备注和标签 + if remarks and tags: + remarks = f"{remarks} | {tags}" + elif tags: + remarks = tags + + # 构建视频项 + videos.append({ + 'vod_id': vid, + 'vod_name': title, + 'vod_pic': img_url, + 'vod_remarks': remarks + }) + except Exception as e: + self.log(f"处理搜索结果时出错: {str(e)}", "ERROR") + continue + except Exception as e: + self.log(f"搜索功能发生错误: {str(e)}", "ERROR") + + result['list'] = videos + return result + + def searchContentPage(self, key, quick, pg=1): + return self.searchContent(key, quick, pg) + + def playerContent(self, flag, id, vipFlags): + """获取播放内容""" + result = {} + + try: + # 判断是否已经是视频URL + if self.isVideoFormat(id): + result["parse"] = 0 + result["url"] = id + result["playUrl"] = "" + result["header"] = json.dumps(self.headers) + return result + + # 判断是否是完整的页面URL + if id.startswith(('http://', 'https://')): + play_url = id + # 尝试作为相对路径处理 + elif id.startswith('/'): + play_url = urllib.parse.urljoin(self.siteUrl, id) + # 假设是视频ID,构建播放页面URL + else: + # 检查是否是"视频ID_集数"格式 + parts = id.split('_') + if len(parts) > 1 and parts[0].isdigit(): + vid = parts[0] + nid = parts[1] + play_url = f"{self.siteUrl}/index.php/vod/play/id/{vid}/sid/1/nid/{nid}.html" + else: + # 直接当作视频ID处理 + play_url = f"{self.siteUrl}/index.php/vod/play/id/{id}/sid/1/nid/1.html" + + # 访问播放页获取真实播放地址 + try: + self.log(f"正在解析播放页面: {play_url}") + response = self.fetch(play_url) + if response and response.status_code == 200: + html = response.text + + # 查找player_aaaa变量 + player_match = re.search(r'var\s+player_aaaa\s*=\s*({.*?});', html, re.DOTALL) + if player_match: + try: + player_data = json.loads(player_match.group(1)) + if 'url' in player_data: + video_url = player_data['url'] + if not video_url.startswith('http'): + video_url = urllib.parse.urljoin(self.siteUrl, video_url) + + self.log(f"从player_aaaa获取到视频地址: {video_url}") + result["parse"] = 0 + result["url"] = video_url + result["playUrl"] = "" + result["header"] = json.dumps(self.headers) + return result + except json.JSONDecodeError as e: + self.log(f"解析player_aaaa JSON出错: {str(e)}", "ERROR") + + # 如果player_aaaa解析失败,尝试其他方式 + # 1. 查找video标签 + video_match = re.search(r']*src=["\'](.*?)["\']', html) + if video_match: + video_url = video_match.group(1) + if not video_url.startswith('http'): + video_url = urllib.parse.urljoin(self.siteUrl, video_url) + + self.log(f"从video标签找到视频地址: {video_url}") + result["parse"] = 0 + result["url"] = video_url + result["playUrl"] = "" + result["header"] = json.dumps(self.headers) + return result + + # 2. 查找iframe + iframe_match = re.search(r']*src=["\'](.*?)["\']', html) + if iframe_match: + iframe_url = iframe_match.group(1) + if not iframe_url.startswith('http'): + iframe_url = urllib.parse.urljoin(self.siteUrl, iframe_url) + + self.log(f"找到iframe,正在解析: {iframe_url}") + # 访问iframe内容 + iframe_response = self.fetch(iframe_url) + if iframe_response and iframe_response.status_code == 200: + iframe_html = iframe_response.text + + # 在iframe内容中查找视频地址 + iframe_video_match = re.search(r'(https?://[^\'"]+\.(mp4|m3u8|ts))', iframe_html) + if iframe_video_match: + video_url = iframe_video_match.group(1) + + self.log(f"从iframe中找到视频地址: {video_url}") + result["parse"] = 0 + result["url"] = video_url + result["playUrl"] = "" + result["header"] = json.dumps({ + "User-Agent": self.headers["User-Agent"], + "Referer": iframe_url + }) + return result + + # 3. 查找任何可能的视频URL + url_match = re.search(r'(https?://[^\'"]+\.(mp4|m3u8|ts))', html) + if url_match: + video_url = url_match.group(1) + + self.log(f"找到可能的视频地址: {video_url}") + result["parse"] = 0 + result["url"] = video_url + result["playUrl"] = "" + result["header"] = json.dumps(self.headers) + return result + except Exception as e: + self.log(f"解析播放地址时出错: {str(e)}", "ERROR") + + # 如果所有方式都失败,返回外部解析标志 + self.log("未找到直接可用的视频地址,需要外部解析", "WARNING") + result["parse"] = 1 # 表示需要外部解析 + result["url"] = play_url # 返回播放页面URL + result["playUrl"] = "" + result["header"] = json.dumps(self.headers) + + except Exception as e: + self.log(f"获取播放内容时出错: {str(e)}", "ERROR") + + return result + + def localProxy(self, param): + """本地代理""" + return [404, "text/plain", {}, "Not Found"] diff --git a/js/xiaosa/py/光速影视.py b/js/xiaosa/py/光速影视.py new file mode 100644 index 0000000..33b1204 --- /dev/null +++ b/js/xiaosa/py/光速影视.py @@ -0,0 +1,222 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import re +import sys +from Crypto.Hash import MD5 +sys.path.append('..') +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad, unpad +from urllib.parse import quote, urlparse +from base64 import b64encode, b64decode +import json +import time +from base.spider import Spider + +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 action(self, action): + pass + + def destroy(self): + pass + + def homeContent(self, filter): + data = self.getdata("/api.php/getappapi.index/initV119") + dy = {"class": "类型", "area": "地区", "lang": "语言", "year": "年份", "letter": "字母", "by": "排序", + "sort": "排序"} + filters = {} + classes = [] + json_data = data["type_list"] + homedata = data["banner_list"][8:] + for item in json_data: + if item["type_name"] == "全部": + continue + has_non_empty_field = False + jsontype_extend = json.loads(item["type_extend"]) + homedata.extend(item["recommend_list"]) + jsontype_extend["sort"] = "最新,最热,最赞" + classes.append({"type_name": item["type_name"], "type_id": item["type_id"]}) + for key in dy: + if key in jsontype_extend and jsontype_extend[key].strip() != "": + has_non_empty_field = True + break + if has_non_empty_field: + filters[str(item["type_id"])] = [] + for dkey in jsontype_extend: + if dkey in dy and jsontype_extend[dkey].strip() != "": + values = jsontype_extend[dkey].split(",") + value_array = [{"n": value.strip(), "v": value.strip()} for value in values if + value.strip() != ""] + filters[str(item["type_id"])].append({"key": dkey, "name": dy[dkey], "value": value_array}) + result = {} + result["class"] = classes + result["filters"] = filters + result["list"] = homedata[1:] + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, tid, pg, filter, extend): + body = {"area": extend.get('area', '全部'), "year": extend.get('year', '全部'), "type_id": tid, "page": pg, + "sort": extend.get('sort', '最新'), "lang": extend.get('lang', '全部'), + "class": extend.get('class', '全部')} + result = {} + data = self.getdata("/api.php/getappapi.index/typeFilterVodList", body) + result["list"] = data["recommend_list"] + result["page"] = pg + result["pagecount"] = 9999 + result["limit"] = 90 + result["total"] = 999999 + return result + + def detailContent(self, ids): + body = f"vod_id={ids[0]}" + data = self.getdata("/api.php/getappapi.index/vodDetail", body) + vod = data["vod"] + play = [] + names = [] + for itt in data["vod_play_list"]: + a = [] + names.append(itt["player_info"]["show"]) + for it in itt['urls']: + it['user_agent']=itt["player_info"].get("user_agent") + it["parse"]=itt["player_info"].get("parse") + a.append(f"{it['name']}${self.e64(json.dumps(it))}") + play.append("#".join(a)) + vod["vod_play_from"] = "$$$".join(names) + vod["vod_play_url"] = "$$$".join(play) + result = {"list": [vod]} + return result + + def searchContent(self, key, quick, pg="1"): + body = f"keywords={key}&type_id=0&page={pg}" + data = self.getdata("/api.php/getappapi.index/searchList", body) + result = {"list": data["search_list"], "page": pg} + return result + + def playerContent(self, flag, id, vipFlags): + ids = json.loads(self.d64(id)) + h = {"User-Agent": (ids['user_agent'] or "okhttp/3.14.9")} + try: + if re.search(r'url=', ids['parse_api_url']): + data = self.fetch(ids['parse_api_url'], headers=h, timeout=10).json() + url = data.get('url') or data['data'].get('url') + else: + body = f"parse_api={ids.get('parse') or ids['parse_api_url'].replace(ids['url'], '')}&url={quote(self.aes(ids['url'], True))}&token={ids.get('token')}" + b = self.getdata("/api.php/getappapi.index/vodParse", body)['json'] + url = json.loads(b)['url'] + if 'error' in url: raise ValueError(f"解析失败: {url}") + p = 0 + except Exception as e: + print('错误信息:', e) + url, p = ids['url'], 1 + + if re.search(r'\.jpg|\.png|\.jpeg', url): + url = self.Mproxy(url) + result = {} + result["parse"] = p + result["url"] = url + result["header"] = h + return result + + def localProxy(self, param): + return self.Mlocal(param) + + def gethost(self): + headers = { + 'User-Agent': 'okhttp/3.14.9' + } + host = self.fetch('https://jingyu-1312635929.cos.ap-nanjing.myqcloud.com/1.json', + headers=headers).text.strip() + return host + + phend = { + 'User-Agent': 'Dalvik/2.1.0 (Linux; U; Android 11; M2012K10C Build/RP1A.200720.011)', + 'allowCrossProtocolRedirects': 'true' + } + + def aes(self, operation, text): + key = "4d83b87c4c5ea111".encode("utf-8") + iv = key + if operation == "encrypt": + cipher = AES.new(key, AES.MODE_CBC, iv) + ct_bytes = cipher.encrypt(pad(text.encode("utf-8"), AES.block_size)) + ct = b64encode(ct_bytes).decode("utf-8") + return ct + elif operation == "decrypt": + cipher = AES.new(key, AES.MODE_CBC, iv) + pt = unpad(cipher.decrypt(b64decode(text)), AES.block_size) + return pt.decode("utf-8") + + def header(self): + t = str(int(time.time())) + header = {"Referer":self.host, + "User-Agent": "okhttp/3.14.9", "app-version-code": "300", "app-ui-mode": "light", + "app-api-verify-time": t, "app-user-device-id": self.md5(t), + "app-api-verify-sign": self.aes("encrypt", t), + "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"} + return header + + def getdata(self, path, data=None): + vdata = self.post(f"{self.host}{path}", headers=self.header(), data=data, timeout=10).json()['data'] + data1 = self.aes("decrypt", vdata) + return json.loads(data1) + + def Mproxy(self, url): + return self.getProxyUrl() + "&url=" + b64encode(url.encode('utf-8')).decode('utf-8') + "&type=m3u8" + + def Mlocal(self, param,header=None): + url = self.d64(param["url"]) + ydata = self.fetch(url, headers=header, allow_redirects=False) + data = ydata.content.decode('utf-8') + if ydata.headers.get('Location'): + url = ydata.headers['Location'] + data = self.fetch(url, headers=header).content.decode('utf-8') + parsed_url = urlparse(url) + durl = parsed_url.scheme + "://" + parsed_url.netloc + lines = data.strip().split('\n') + for index, string in enumerate(lines): + if '#EXT' not in string and 'http' not in string: + last_slash_index = string.rfind('/') + lpath = string[:last_slash_index + 1] + lines[index] = durl + ('' if lpath.startswith('/') else '/') + lpath + data = '\n'.join(lines) + return [200, "application/vnd.apple.mpegur", data] + + 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() diff --git a/js/xiaosa/py/剧王短剧.py b/js/xiaosa/py/剧王短剧.py new file mode 100644 index 0000000..d596cc2 --- /dev/null +++ b/js/xiaosa/py/剧王短剧.py @@ -0,0 +1,329 @@ +# 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://djw1.com" + +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' + } + +class Spider(Spider): + global xurl + 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 = {"class": []} + + detail = requests.get(url=xurl + "/all/", headers=headerx) + detail.encoding = "utf-8" + res = detail.text + + doc = BeautifulSoup(res, "lxml") + + soups = doc.find_all('section', class_="container items") + + for soup in soups: + vods = soup.find_all('li') + + for vod in vods: + + id = vod.find('a')['href'] + + name = vod.text.strip() + + result["class"].append({"type_id": id, "type_name": "" + 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'{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('section', class_="container items") + + for soup in soups: + vods = soup.find_all('li') + + for vod in vods: + + name = vod.find('img')['alt'] + + ids = vod.find('a', class_="image-line") + id = ids['href'] + + pic = vod.find('img')['src'] + + remark = self.extract_middle_text(str(vod), 'class="remarks light">', '<', 0) + + 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 = '' + + if 'http' not in did: + did = xurl + did + + res = requests.get(url=did, headers=headerx) + res.encoding = "utf-8" + res = res.text + doc = BeautifulSoup(res, "lxml") + + url = 'https://fs-im-kefu.7moor-fs1.com/ly/4d2c3f00-7d4c-11e5-af15-41bf63ae4ea0/1732707176882/jiduo.txt' + response = requests.get(url) + response.encoding = 'utf-8' + code = response.text + name = self.extract_middle_text(code, "s1='", "'", 0) + Jumps = self.extract_middle_text(code, "s2='", "'", 0) + + content = '集多为您介绍剧情📢' + self.extract_middle_text(res,'class="info-detail">','<', 0) + + remarks = self.extract_middle_text(res, 'class="info-mark">', '<', 0) + + year = self.extract_middle_text(res, 'class="info-addtime">', '<', 0) + + if name not in content: + bofang = Jumps + xianlu = '1' + else: + soups = doc.find('div', class_="ep-list-items") + + soup = soups.find_all('a') + + for sou in soup: + + id = sou['href'] + + name = sou.text.strip() + + bofang = bofang + name + '$' + id + '#' + + bofang = bofang[:-1] + + xianlu = '专线' + + videos.append({ + "vod_id": did, + "vod_remarks": remarks, + "vod_year": year, + "vod_content": content, + "vod_play_from": xianlu, + "vod_play_url": bofang + }) + + result['list'] = videos + return result + + def playerContent(self, flag, id, vipFlags): + + res = requests.get(url=id, headers=headerx) + res.encoding = "utf-8" + res = res.text + + url = self.extract_middle_text(res, '"wwm3u8":"', '"', 0).replace('\\', '') + + result = {} + result["parse"] = 0 + result["playUrl"] = '' + result["url"] = url + result["header"] = headerx + return result + + def searchContentPage(self, key, quick, pg): + result = {} + videos = [] + + if pg: + page = int(pg) + else: + page = 1 + + url = f'{xurl}/search/{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('section', class_="container items") + + for soup in soups: + vods = soup.find_all('li') + + for vod in vods: + + name = vod.find('img')['alt'] + + ids = vod.find('a', class_="image-line") + id = ids['href'] + + pic = vod.find('img')['src'] + + remark = self.extract_middle_text(str(vod), 'class="remarks light">', '<', 0) + + 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/js/xiaosa/py/哔哩直播.py b/js/xiaosa/py/哔哩直播.py new file mode 100644 index 0000000..6f427c7 --- /dev/null +++ b/js/xiaosa/py/哔哩直播.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/js/xiaosa/py/星芽短剧.py b/js/xiaosa/py/星芽短剧.py new file mode 100644 index 0000000..1accc9a --- /dev/null +++ b/js/xiaosa/py/星芽短剧.py @@ -0,0 +1,343 @@ +# coding = utf-8 +# !/usr/bin/python + +""" +""" + +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 bs4 import BeautifulSoup +from base64 import b64decode +import urllib.request +import urllib.parse +import binascii +import requests +import base64 +import json +import time +import sys +import re +import os + +sys.path.append('..') + +xurl = "https://app.whjzjx.cn" + +headers = { + 'User-Agent': 'Linux; Android 12; Pixel 3 XL) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.101 Mobile Safari/537.36' + } + +headerf = { + "platform": "1", + "user_agent": "Mozilla/5.0 (Linux; Android 9; V1938T Build/PQ3A.190705.08211809; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/91.0.4472.114 Safari/537.36", + "content-type": "application/json; charset=utf-8" + } + +times = int(time.time() * 1000) + +data = { + "device": "2a50580e69d38388c94c93605241fb306", + "package_name": "com.jz.xydj", + "android_id": "ec1280db12795506", + "install_first_open": True, + "first_install_time": 1752505243345, + "last_update_time": 1752505243345, + "report_link_url": "", + "authorization": "", + "timestamp": times + } + +plain_text = json.dumps(data, separators=(',', ':'), ensure_ascii=False) + +key = "B@ecf920Od8A4df7" +key_bytes = key.encode('utf-8') +plain_bytes = plain_text.encode('utf-8') +cipher = AES.new(key_bytes, AES.MODE_ECB) +padded_data = pad(plain_bytes, AES.block_size) +ciphertext = cipher.encrypt(padded_data) +encrypted = base64.b64encode(ciphertext).decode('utf-8') + +response = requests.post("https://u.shytkjgs.com/user/v3/account/login", headers=headerf, data=encrypted) +response_data = response.json() +Authorization = response_data['data']['token'] + +headerx = { + 'authorization': Authorization, + 'platform': '1', + 'version_name': '3.8.3.1' + } + +class Spider(Spider): + global xurl + global headerx + global headers + + 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": "1", "type_name": "剧场"}, + {"type_id": "3", "type_name": "新剧"}, + {"type_id": "2", "type_name": "热播"}, + {"type_id": "7", "type_name": "星选"}, + {"type_id": "5", "type_name": "阳光"}], + } + + return result + + def homeVideoContent(self): + videos = [] + + url= f'{xurl}/v1/theater/home_page?theater_class_id=1&class2_id=4&page_num=1&page_size=24' + detail = requests.get(url=url, headers=headerx) + detail.encoding = "utf-8" + if detail.status_code == 200: + data = detail.json() + + for vod in data['data']['list']: + + name = vod['theater']['title'] + + id = vod['theater']['id'] + + pic = vod['theater']['cover_url'] + + remark = vod['theater']['play_amount_str'] + + video = { + "vod_id": id, + "vod_name": name, + "vod_pic": pic, + "vod_remarks": remark + } + videos.append(video) + + result = {'list': videos} + return result + + def categoryContent(self, cid, pg, filter, ext): + result = {} + videos = [] + + url = f'{xurl}/v1/theater/home_page?theater_class_id={cid}&page_num={pg}&page_size=24' + detail = requests.get(url=url,headers=headerx) + detail.encoding = "utf-8" + if detail.status_code == 200: + data = detail.json() + + for vod in data['data']['list']: + + name = vod['theater']['title'] + + id = vod['theater']['id'] + + pic = vod['theater']['cover_url'] + + remark = vod['theater']['theme'] + + 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'{xurl}/v2/theater_parent/detail?theater_parent_id={did}' + detail = requests.get(url=url, headers=headerx) + detail.encoding = "utf-8" + if detail.status_code == 200: + data = detail.json() + + url = 'https://fs-im-kefu.7moor-fs1.com/ly/4d2c3f00-7d4c-11e5-af15-41bf63ae4ea0/1732707176882/jiduo.txt' + response = requests.get(url) + response.encoding = 'utf-8' + code = response.text + name = self.extract_middle_text(code, "s1='", "'", 0) + Jumps = self.extract_middle_text(code, "s2='", "'", 0) + + content = '剧情:' + data['data']['introduction'] + + area = data['data']['desc_tags'][0] + + remarks = data['data']['filing'] + + # 修复剧集只有一集的问题 - 检查theaters数据是否存在且不为空 + if 'theaters' in data['data'] and data['data']['theaters']: + for sou in data['data']['theaters']: + id = sou['son_video_url'] + name = sou['num'] + bofang = bofang + str(name) + '$' + id + '#' + + bofang = bofang[:-1] if bofang.endswith('#') else bofang + xianlu = '星芽' + else: + # 如果没有theaters数据,检查是否有单个视频URL + if 'video_url' in data['data'] and data['data']['video_url']: + bofang = '1$' + data['data']['video_url'] + xianlu = '星芽' + else: + bofang = Jumps + xianlu = '1' + + videos.append({ + "vod_id": did, + "vod_content": content, + "vod_remarks": remarks, + "vod_area": area, + "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"] = headers + return result + + def searchContentPage(self, key, quick, page): + result = {} + videos = [] + + payload = { + "text": key + } + + url = f"{xurl}/v3/search" + detail = requests.post(url=url, headers=headerx, json=payload) + if detail.status_code == 200: + detail.encoding = "utf-8" + data = detail.json() + + for vod in data['data']['theater']['search_data']: + + name = vod['title'] + + id = vod['id'] + + pic = vod['cover_url'] + + remark = vod['score_str'] + + video = { + "vod_id": id, + "vod_name": name, + "vod_pic": pic, + "vod_remarks": remark + } + videos.append(video) + + result['list'] = videos + result['page'] = page + 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 \ No newline at end of file diff --git a/js/xiaosa/py/爱奇艺.py b/js/xiaosa/py/爱奇艺.py new file mode 100644 index 0000000..2b0af3d --- /dev/null +++ b/js/xiaosa/py/爱奇艺.py @@ -0,0 +1,248 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import random +import sys +from base64 import b64encode, b64decode +from concurrent.futures import ThreadPoolExecutor, as_completed +from urllib.parse import urlencode +sys.path.append('..') +from base.spider import Spider + + +class Spider(Spider): + + def init(self, extend=""): + self.did = self.random_str(32) + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + rhost = 'https://www.iqiyi.com' + + hhost='https://mesh.if.iqiyi.com' + + dhost='https://miniapp.iqiyi.com' + + headers = { + 'Origin': rhost, + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36', + 'Referer': f'{rhost}/', + } + + def homeContent(self, filter): + result = {} + cateManual = { + "全部": "1009", + "电影": "1", + "剧集": "2", + "综艺": "6", + "动漫": "4", + "儿童": "15", + "微剧": "35", + "纪录片": "3" + } + classes = [] + filters = {} + for k in cateManual: + classes.append({ + 'type_name': k, + 'type_id': cateManual[k] + }) + 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 + return result + + def homeVideoContent(self): + data=self.fetch(f'{self.hhost}/portal/lw/v5/channel/recommend?v=13.014.21150', headers=self.headers).json() + vlist = [] + for i in data['items'][1:]: + for j in i['video'][0]['data']: + id = j.get('firstId') + pic=j.get('prevue',{}).get('image_url') or j.get('album_image_url_hover') + if id and pic: + pu=j.get('prevue',{}).get('page_url') or j.get('page_url').split('?')[0] + id = f'{id}@{self.e64(pu)}' + vlist.append({ + 'vod_id': id, + 'vod_name': j.get('display_name'), + 'vod_pic': pic, + 'vod_year': j.get('sns_score'), + 'vod_remarks': j.get('dq_updatestatus') or j.get('rank_prefix') + }) + return {'list':vlist} + + def categoryContent(self, tid, pg, filter, extend): + if pg == "1": + self.sid = '' + new_data = {'mode':'24'} + for key, value in extend.items(): + if value: + key_value_pairs = self.d64(value).split(',') + for pair in key_value_pairs: + k, v = pair.split('=') + if k in new_data: + new_data[k] += "," + v + else: + new_data[k] = v + path=f'/portal/lw/videolib/data?uid=&passport_id=&ret_num=60&version=13.014.21150&device_id={self.did}&channel_id={tid}&page_id={pg}&session={self.sid}&os=&conduit_id=&vip=0&auth&recent_selected_tag=&ad=%5B%7B%22lm%22:%225%22,%22ai%22:%225%22,%22fp%22:%226%22,%22sei%22:%22Sa867aa9d326e2bd8654d8c2a8636055e%22,%22position%22:%22library%22%7D%5D&adExt=%7B%22r%22:%221.2.1-ares6-pure%22%7D&dfp=a12f96215b2f7842a98c082799ca0c3d9236be00946701b106829754d8ece3aaf8&filter={urlencode(new_data)}' + data=self.fetch(f'{self.hhost}{path}', headers=self.headers).json() + self.sid = data['session'] + videos = [] + for i in data['data']: + id = i.get('firstId') or i.get('tv_id') + if not id: + id=i.get('play_url').split(';')[0].split('=')[-1] + if id and not i.get('h'): + id=f'{id}@{self.e64(i.get("page_url"))}' + videos.append({ + 'vod_id': id, + 'vod_name': i.get('display_name'), + 'vod_pic': i.get('album_image_url_hover'), + 'vod_year': i.get('sns_score'), + 'vod_remarks': i.get('dq_updatestatus') or i.get('pay_mark') + }) + result = {} + result['list'] = videos + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + ids = ids[0].split('@') + ids[-1] = self.d64(ids[-1]) + data = self.fetch(f'{self.dhost}/h5/mina/baidu/play/body/v1/{ids[0]}/', headers=self.headers).json() + v=data['data']['playInfo'] + vod = { + 'vod_name': v.get('albumName'), + 'type_name': v.get('tags'), + 'vod_year': v.get('albumYear'), + 'vod_remarks': v.get('updateStrategy'), + 'vod_actor': v.get('mainActors'), + 'vod_director': v.get('directors'), + 'vod_content': v.get('albumDesc'), + 'vod_play_from': '爱奇艺', + 'vod_play_url': '' + } + if data.get('data') and data['data'].get('videoList') and data['data']['videoList'].get('videos'): + purl=[f'{i["shortTitle"]}${i["pageUrl"]}' for i in data['data']['videoList']['videos']] + pg=data['data']['videoList'].get('totalPages') + if pg and pg > 1: + id = v['albumId'] + pages = list(range(2, pg + 1)) + page_results = {} + with ThreadPoolExecutor(max_workers=10) as executor: + future_to_page = { + executor.submit(self.fetch_page_data, page, id): page + for page in pages + } + for future in as_completed(future_to_page): + page = future_to_page[future] + try: + result = future.result() + page_results[page] = result + except Exception as e: + print(f"Error fetching page {page}: {e}") + for page in sorted(page_results.keys()): + purl.extend(page_results[page]) + vod['vod_play_url'] = '#'.join(purl) + else: + vdata=self.fetch(f'{self.dhost}/h5/mina/baidu/play/head/v1/{ids[0]}/', headers=self.headers).json() + v=vdata['data']['playInfo'] + vod = { + 'vod_name': v.get('shortTitle'), + 'type_name': v.get('channelName'), + 'vod_year': v.get('year'), + 'vod_remarks': v.get('focus'), + 'vod_actor': v.get('mainActors'), + 'vod_director': v.get('directors'), + 'vod_content': v.get('desc'), + 'vod_play_from': '爱奇艺', + 'vod_play_url': f'{v.get("shortTitle")}${ids[-1]}' + } + return {'list':[vod]} + + def searchContent(self, key, quick, pg="1"): + data=self.fetch(f'{self.hhost}/portal/lw/search/homePageV3?key={key}¤t_page={pg}&mode=1&source=input&suggest=&version=13.014.21150&pageNum={pg}&pageSize=25&pu=&u={self.did}&scale=150&token=&userVip=0&conduit=&vipType=-1&os=&osShortName=win10&dataType=&appMode=', headers=self.headers).json() + videos = [] + vdata=data['data']['templates'] + for i in data['data']['templates']: + if i.get('intentAlbumInfos'): + vdata=[{'albumInfo': c} for c in i['intentAlbumInfos']]+vdata + + for i in vdata: + if i.get('albumInfo') and (i['albumInfo'].get('playQipuId','') or i['albumInfo'].get('qipuId')) and i['albumInfo'].get('pageUrl'): + b=i['albumInfo'] + id=f"{(b.get('playQipuId','') or b.get('qipuId'))}@{self.e64(b.get('pageUrl'))}" + videos.append({ + 'vod_id': id, + 'vod_name': b.get('title'), + 'vod_pic': b.get('img'), + 'vod_year': (b.get('year',{}) or {}).get('value'), + 'vod_remarks': b.get('subscriptContent') or b.get('channel') or b.get('vipTips') + }) + return {'list':videos,'page':pg} + + def playerContent(self, flag, id, vipFlags): + return {'jx':1,'parse': 1, 'url': id, 'header': ''} + + def localProxy(self, param): + pass + + def fetch_page_data(self, page, id): + try: + url = f'{self.dhost}/h5/mina/avlist/{page}/{id}/' + data = self.fetch(url, headers=self.headers).json() + return [f'{i["shortTitle"]}${i["pageUrl"]}' for i in data['data']['videoList']['videos']] + except: + return [] + + def getf(self,body): + data=self.fetch(f'{self.hhost}/portal/lw/videolib/tag?channel_id={body["type_id"]}&tagAdd=&selected_tag_name=&version=13.014.21150&device={self.did}&uid=', headers=self.headers).json() + ft = [] + # for i in data[:-1]: + for i in data: + try: + value_array = [{"n": value['text'], "v": self.e64(value['tag_param'])} for value in i['tags'] if + value.get('tag_param')] + ft.append({"key": i['group'], "name": i['group'], "value": value_array}) + except: + print(i) + return (body['type_id'], ft) + + 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: str): + 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 random_str(self,length=16): + hex_chars = '0123456789abcdef' + return ''.join(random.choice(hex_chars) for _ in range(length)) diff --git a/js/xiaosa/py/爱看短剧.py b/js/xiaosa/py/爱看短剧.py new file mode 100644 index 0000000..b447431 --- /dev/null +++ b/js/xiaosa/py/爱看短剧.py @@ -0,0 +1,109 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import json +import sys +from pyquery import PyQuery as pq +sys.path.append('..') +from base.spider import Spider + +class Spider(Spider): + + def init(self, extend=""): + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + host='http://www.toule.top' + + headers = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36', + 'Referer':f'{host}/', + 'Origin':host + } + + def homeContent(self, filter): + data=self.getpq() + result = {} + classes = [] + for k in data('.swiper-wrapper .swiper-slide').items(): + classes.append({ + 'type_name': k.text(), + 'type_id': k.text() + }) + result['class'] = classes + result['list'] = self.getlist(data('.container.items ul li')) + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, tid, pg, filter, extend): + data=self.getpq(f"/index.php/vod/show/class/{tid}/id/1/page/{pg}.html") + result = {} + result['list'] = self.getlist(data('.container.items ul li')) + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + data=self.getpq(ids[0]) + v=data('.container.detail-content') + vod = { + 'vod_remarks': v('.items-tags a').text(), + 'vod_content': v('.text-content .detail').text(), + 'vod_play_from': '爱看短剧', + 'vod_play_url': '#'.join([f"{i.text()}${i('a').attr('href')}" for i in data('.swiper-wrapper .swiper-slide').items()]) + } + return {'list':[vod]} + + def searchContent(self, key, quick, pg="1"): + data=self.getpq(f"/index.php/vod/search/page/{pg}/wd/{key}.html") + return {'list':self.getlist(data('.container.items ul li')),'page':pg} + + def playerContent(self, flag, id, vipFlags): + data=self.getpq(id) + try: + jstr=data('.player-content script').eq(0).text() + jt=json.loads(jstr.split('=',1)[-1]) + p,url=0,jt['url'] + except Exception as e: + print(f"获取播放地址失败: {e}") + p,url=1,f'{self.host}{id}' + return {'parse': p, 'url': url, 'header': self.headers} + + def localProxy(self, param): + pass + + def liveContent(self, url): + pass + + def getpq(self, path=''): + data=self.fetch(f"{self.host}{path}",headers=self.headers).text + try: + return pq(data) + except Exception as e: + print(f"{str(e)}") + return pq(data.encode('utf-8')) + + def getlist(self,data): + videos = [] + for i in data.items(): + videos.append({ + 'vod_id': i('.image-line').attr('href'), + 'vod_name': i('img').attr('alt'), + 'vod_pic': i('img').attr('src'), + 'vod_remarks': i('.remarks.light').text() + }) + return videos \ No newline at end of file diff --git a/js/xiaosa/py/猎手影视.py b/js/xiaosa/py/猎手影视.py new file mode 100644 index 0000000..1a6a4d7 --- /dev/null +++ b/js/xiaosa/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/js/xiaosa/py/甜圈短剧.py b/js/xiaosa/py/甜圈短剧.py new file mode 100644 index 0000000..40cac38 --- /dev/null +++ b/js/xiaosa/py/甜圈短剧.py @@ -0,0 +1,156 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import sys +sys.path.append('..') +from base.spider import Spider + +class Spider(Spider): + + def init(self, extend=""): + pass + + def getName(self): + return "甜圈短剧" + + def isVideoFormat(self, url): + return True + + def manualVideoCheck(self): + return False + + def destroy(self): + pass + + # 更新为新的域名 + ahost = 'https://mov.cenguigui.cn' + + headers = { + 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36', + 'sec-ch-ua-platform': '"macOS"', + 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="134", "Google Chrome";v="134"', + 'DNT': '1', + 'sec-ch-ua-mobile': '?0', + 'Sec-Fetch-Site': 'cross-site', + 'Sec-Fetch-Mode': 'no-cors', + 'Sec-Fetch-Dest': 'video', + 'Sec-Fetch-Storage-Access': 'active', + 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8', + } + + def homeContent(self, filter): + 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': '🎬 小人物'}, + {'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': '喜剧', 'type_name': '🎬 喜剧'}, + {'type_id': '剧情', 'type_name': '🎬 剧情'}]} + return result + + def homeVideoContent(self): + return [] + + def categoryContent(self, tid, pg, filter, extend): + params = { + 'classname': tid, + 'offset': str((int(pg) - 1)), + } + # 更新请求路径为 /duanju/api.php + data = self.fetch(f'{self.ahost}/duanju/api.php', params=params, headers=self.headers).json() + videos = [] + for k in data['data']: + videos.append({ + 'vod_id': k.get('book_id'), + 'vod_name': k.get('title'), + 'vod_pic': k.get('cover'), + 'vod_year': k.get('score'), + 'vod_remarks': f"{k.get('sub_title')}|{k.get('episode_cnt')}" + }) + result = {} + result['list'] = videos + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + # 更新请求路径为 /duanju/api.php + v = self.fetch(f'{self.ahost}/duanju/api.php', params={'book_id': ids[0]}, headers=self.headers).json() + vod = { + 'vod_id': ids[0], + 'vod_name': v.get('title'), + 'type_name': v.get('category'), + 'vod_year': v.get('time'), + 'vod_remarks': v.get('duration'), + 'vod_content': v.get('desc'), + 'vod_play_from': '爱看短剧', + 'vod_play_url': '#'.join([f"{i['title']}${i['video_id']}" for i in v['data']]) + } + return {'list': [vod]} + + def searchContent(self, key, quick, pg="1"): + return self.categoryContent(key, pg, True, {}) + + def playerContent(self, flag, id, vipFlags): + # 更新请求路径为 /duanju/api.php + data = self.fetch(f'{self.ahost}/duanju/api.php', params={'video_id': id}, headers=self.headers).json() + return {'parse': 0, 'url': data['data']['url'], 'header': self.headers} + + def localProxy(self, param): + pass \ No newline at end of file diff --git a/js/xiaosa/py/网络直播.py b/js/xiaosa/py/网络直播.py new file mode 100644 index 0000000..4e54c02 --- /dev/null +++ b/js/xiaosa/py/网络直播.py @@ -0,0 +1,767 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import json +import re +import sys +import time +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=""): + tid = 'douyin' + headers = self.gethr(0, tid) + response = requests.head(self.hosts[tid], headers=headers) + ttwid = response.cookies.get('ttwid') + headers.update({ + 'authority': self.hosts[tid].split('//')[-1], + 'cookie': f'ttwid={ttwid}' if ttwid else '' + }) + self.dyheaders = headers + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + 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 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"], + "douyin": "https://live.douyin.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", + "douyin": "https://live.douyin.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': referers['bili'], + 'user-agent': headers[0]['User-Agent'] + }, + 'douyin': { + 'User-Agent': 'libmpv', + 'Icy-MetaData': '1' + }, + 'huya': { + 'User-Agent': 'ExoPlayer', + 'Connection': 'Keep-Alive', + 'Icy-MetaData': '1' + }, + 'douyu': { + 'User-Agent': 'libmpv', + 'Icy-MetaData': '1' + } + } + + def process_bili(self): + try: + self.blfdata = self.fetch( + f'{self.hosts["bili"][0]}/room/v1/Area/getList?need_entrance=1&parent_id=0', + headers=self.gethr(0, 'bili') + ).json() + return ('bili', [{'key': 'cate', 'name': '分类', + 'value': [{'n': i['name'], 'v': str(i['id'])} + for i in self.blfdata['data']]}]) + except Exception as e: + print(f"bili处理错误: {e}") + return 'bili', None + + def process_douyin(self): + try: + data = self.getpq(self.hosts['douyin'], headers=self.dyheaders)('script') + for i in data.items(): + if 'categoryData' in i.text(): + content = i.text() + start = content.find('{') + end = content.rfind('}') + 1 + if start != -1 and end != -1: + json_str = content[start:end] + json_str = json_str.replace('\\"', '"') + try: + self.dyifdata = json.loads(json_str) + return ('douyin', [{'key': 'cate', 'name': '分类', + 'value': [{'n': i['partition']['title'], + 'v': f"{i['partition']['id_str']}@@{i['partition']['title']}"} + for i in self.dyifdata['categoryData']]}]) + except json.JSONDecodeError as e: + print(f"douyin解析错误: {e}") + return 'douyin', None + except Exception as e: + print(f"douyin请求或处理错误: {e}") + return 'douyin', None + + 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", + "抖音": "douyin", + "斗鱼": "douyu", + "网易": "wangyi" + } + classes = [] + filters = { + 'huya': [{'key': 'cate', 'name': '分类', + 'value': [{'n': '网游', 'v': '1'}, {'n': '单机', 'v': '2'}, + {'n': '娱乐', 'v': '8'}, {'n': '手游', 'v': '3'}]}] + } + + with ThreadPoolExecutor(max_workers=3) as executor: + futures = { + executor.submit(self.process_bili): 'bili', + executor.submit(self.process_douyin): 'douyin', + 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 'douyin' in tid: + vdata, pagecount = self.douyinContent(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): + if extend.get('cate') and pg == '1' and 'click' not in tid: + for i in self.blfdata['data']: + if str(i['id']) == extend['cate']: + for j in i['list']: + v = self.buildvod( + vod_id=f"click_{tid}@@{i['id']}@@{j['id']}", + vod_name=j.get('name'), + vod_pic=j.get('pic'), + vod_tag=1, + style={"type": "oval", "ratio": 1} + ) + vdata.append(v) + return vdata, 1 + else: + path = f'/xlive/web-interface/v1/second/getListByArea?platform=web&sort=online&page_size=30&page={pg}' + if 'click' in tid: + ids = tid.split('_')[1].split('@@') + tid = ids[0] + path = f'/xlive/web-interface/v1/second/getList?platform=web&parent_area_id={ids[1]}&area_id={ids[-1]}&sort_type=&page={pg}' + data = self.fetch(f'{self.hosts[tid][0]}{path}', headers=self.gethr(0, tid)).json() + for i in data['data']['list']: + if i.get('roomid'): + data = self.buildvod( + f"{tid}@@{i['roomid']}", + i.get('title'), + i.get('cover'), + i.get('watched_show', {}).get('text_large'), + 0, + i.get('uname'), + style={"type": "rect", "ratio": 1.33} + ) + vdata.append(data) + return vdata, 9999 + + 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 douyinContent(self, tid, pg, filter, extend, vdata): + if extend.get('cate') and pg == '1' and 'click' not in tid: + ids = extend.get('cate').split('@@') + for i in self.dyifdata['categoryData']: + c = i['partition'] + if c['id_str'] == ids[0] and c['title'] == ids[1]: + vlist = i['sub_partition'].copy() + vlist.insert(0, {'partition': c}) + for j in vlist: + j = j['partition'] + v = self.buildvod( + vod_id=f"click_{tid}@@{j['id_str']}@@{j['type']}", + vod_name=j.get('title'), + vod_pic='https://p3-pc-weboff.byteimg.com/tos-cn-i-9r5gewecjs/pwa_v3/512x512-1.png', + vod_tag=1, + style={"type": "oval", "ratio": 1} + ) + vdata.append(v) + return vdata, 1 + else: + path = f'/webcast/web/partition/detail/room/?aid=6383&app_name=douyin_web&live_id=1&device_platform=web&count=15&offset={(int(pg) - 1) * 15}&partition=720&partition_type=1' + if 'click' in tid: + ids = tid.split('_')[1].split('@@') + tid = ids[0] + path = f'/webcast/web/partition/detail/room/?aid=6383&app_name=douyin_web&live_id=1&device_platform=web&count=15&offset={(int(pg) - 1) * 15}&partition={ids[1]}&partition_type={ids[-1]}&req_from=2' + data = self.fetch(f'{self.hosts[tid]}{path}', headers=self.dyheaders).json() + for i in data['data']['data']: + v = self.buildvod( + vod_id=f"{tid}@@{i['web_rid']}", + vod_name=i['room'].get('title'), + vod_pic=i['room']['cover'].get('url_list')[0], + vod_year=i.get('user_count_str'), + vod_remarks=i['room']['owner'].get('nickname'), + 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] == 'douyin': + vod = self.douyinDetail(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): + try: + vdata = self.fetch( + f'{self.hosts[ids[0]][0]}/xlive/web-room/v1/index/getInfoByRoom?room_id={ids[1]}&wts={int(time.time())}', + headers=self.gethr(0, ids[0])).json() + v = vdata['data']['room_info'] + vod = self.buildvod( + vod_name=v.get('title'), + type_name=v.get('parent_area_name') + '/' + v.get('area_name'), + vod_remarks=v.get('tags'), + vod_play_from=v.get('title'), + ) + data = self.fetch( + f'{self.hosts[ids[0]][0]}/xlive/web-room/v2/index/getRoomPlayInfo?room_id={ids[1]}&protocol=0%2C1&format=0%2C1%2C2&codec=0%2C1&platform=web', + headers=self.gethr(0, ids[0])).json() + vdnams = data['data']['playurl_info']['playurl']['g_qn_desc'] + all_accept_qns = [] + streams = data['data']['playurl_info']['playurl']['stream'] + for stream in streams: + for format_item in stream['format']: + for codec in format_item['codec']: + if 'accept_qn' in codec: + all_accept_qns.append(codec['accept_qn']) + max_accept_qn = max(all_accept_qns, key=len) if all_accept_qns else [] + quality_map = { + item['qn']: item['desc'] + for item in vdnams + } + quality_names = [f"{quality_map.get(qn)}${ids[0]}@@{ids[1]}@@{qn}" for qn in max_accept_qn] + vod['vod_play_url'] = "#".join(quality_names) + return vod + except Exception as e: + return self.handle_exception(e) + + def huyaDetail(self, ids): + try: + vdata = self.fetch(f'{self.hosts[ids[0]][1]}/cache.php?m=Live&do=profileRoom&roomid={ids[1]}', + headers=self.headers[0]).json() + v = vdata['data']['liveData'] + vod = self.buildvod( + vod_name=v.get('introduction'), + type_name=v.get('gameFullName'), + vod_director=v.get('nick'), + vod_remarks=v.get('contentIntro'), + ) + data = dict(reversed(list(vdata['data']['stream'].items()))) + names = [] + plist = [] + + for stream_type, stream_data in data.items(): + if isinstance(stream_data, dict) and 'multiLine' in stream_data and 'rateArray' in stream_data: + names.append(f"线路{len(names) + 1}") + qualities = sorted( + stream_data['rateArray'], + key=lambda x: (x['iBitRate'], x['sDisplayName']), + reverse=True + ) + cdn_urls = [] + for cdn in stream_data['multiLine']: + quality_urls = [] + for quality in qualities: + quality_name = quality['sDisplayName'] + bit_rate = quality['iBitRate'] + base_url = cdn['url'] + if bit_rate > 0: + if '.m3u8' in base_url: + new_url = base_url.replace( + 'ratio=2000', + f'ratio={bit_rate}' + ) + else: + new_url = base_url.replace( + 'imgplus.flv', + f'imgplus_{bit_rate}.flv' + ) + else: + new_url = base_url + quality_urls.extend([quality_name, new_url]) + encoded_urls = self.e64(json.dumps(quality_urls)) + cdn_urls.append(f"{cdn['cdnType']}${ids[0]}@@{encoded_urls}") + + if cdn_urls: + plist.append('#'.join(cdn_urls)) + vod['vod_play_from'] = "$$$".join(names) + vod['vod_play_url'] = "$$$".join(plist) + return vod + except Exception as e: + return self.handle_exception(e) + + def douyinDetail(self, ids): + url = f'{self.hosts[ids[0]]}/webcast/room/web/enter/?aid=6383&app_name=douyin_web&live_id=1&device_platform=web&enter_from=web_live&web_rid={ids[1]}&room_id_str=&enter_source=&Room-Enter-User-Login-Ab=0&is_need_double_stream=false&cookie_enabled=true&screen_width=1980&screen_height=1080&browser_language=zh-CN&browser_platform=Win32&browser_name=Edge&browser_version=125.0.0.0' + data = self.fetch(url, headers=self.dyheaders).json() + try: + vdata = data['data']['data'][0] + vod = self.buildvod( + vod_name=vdata['title'], + vod_remarks=vdata['user_count_str'], + ) + resolution_data = vdata['stream_url']['live_core_sdk_data']['pull_data']['options']['qualities'] + stream_json = vdata['stream_url']['live_core_sdk_data']['pull_data']['stream_data'] + stream_json = json.loads(stream_json) + available_types = [] + if any(sdk_key in stream_json['data'] and 'main' in stream_json['data'][sdk_key] for sdk_key in + stream_json['data']): + available_types.append('main') + if any(sdk_key in stream_json['data'] and 'backup' in stream_json['data'][sdk_key] for sdk_key in + stream_json['data']): + available_types.append('backup') + plist = [] + for line_type in available_types: + format_arrays = {'flv': [], 'hls': [], 'lls': []} + qualities = sorted(resolution_data, key=lambda x: x['level'], reverse=True) + for quality in qualities: + sdk_key = quality['sdk_key'] + if sdk_key in stream_json['data'] and line_type in stream_json['data'][sdk_key]: + stream_info = stream_json['data'][sdk_key][line_type] + if stream_info.get('flv'): + format_arrays['flv'].extend([quality['name'], stream_info['flv']]) + if stream_info.get('hls'): + format_arrays['hls'].extend([quality['name'], stream_info['hls']]) + if stream_info.get('lls'): + format_arrays['lls'].extend([quality['name'], stream_info['lls']]) + format_urls = [] + for format_name, url_array in format_arrays.items(): + if url_array: + encoded_urls = self.e64(json.dumps(url_array)) + format_urls.append(f"{format_name}${ids[0]}@@{encoded_urls}") + + if format_urls: + plist.append('#'.join(format_urls)) + + names = ['线路1', '线路2'][:len(plist)] + vod['vod_play_from'] = "$$$".join(names) + vod['vod_play_url'] = "$$$".join(plist) + return vod + + except Exception as e: + return self.handle_exception(e) + + def douyuDetail(self, ids): + headers = self.gethr(0, zr=f'{self.hosts[ids[0]]}/{ids[1]}') + try: + data = self.fetch(f'{self.hosts[ids[0]]}/betard/{ids[1]}', headers=headers).json() + vname = data['room']['room_name'] + vod = self.buildvod( + vod_name=vname, + vod_remarks=data['room'].get('second_lvl_name'), + vod_director=data['room'].get('nickname'), + ) + vdata = self.fetch(f'{self.hosts[ids[0]]}/swf_api/homeH5Enc?rids={ids[1]}', headers=headers).json() + json_body = vdata['data'] + json_body = {"html": self.douyu_text(json_body[f'room{ids[1]}']), "rid": ids[1]} + sign = self.post('http://alive.nsapps.cn/api/AllLive/DouyuSign', json=json_body, headers=self.headers[1]).json()['data'] + body = f'{sign}&cdn=&rate=-1&ver=Douyu_223061205&iar=1&ive=1&hevc=0&fa=0' + body=self.params_to_json(body) + nubdata = self.post(f'{self.hosts[ids[0]]}/lapi/live/getH5Play/{ids[1]}', data=body, headers=headers).json() + plist = [] + names = [] + for i,x in enumerate(nubdata['data']['cdnsWithName']): + names.append(f'线路{i+1}') + d = {'sign': sign, 'cdn': x['cdn'], 'id': ids[1]} + plist.append( + f'{vname}${ids[0]}@@{self.e64(json.dumps(d))}@@{self.e64(json.dumps(nubdata["data"]["multirates"]))}') + vod['vod_play_from'] = "$$$".join(names) + vod['vod_play_url'] = "$$$".join(plist) + return vod + except Exception as e: + return self.handle_exception(e) + + def douyu_text(self, text): + function_positions = [m.start() for m in re.finditer('function', text)] + total_functions = len(function_positions) + if total_functions % 2 == 0: + target_index = total_functions // 2 + 1 + else: + target_index = (total_functions - 1) // 2 + 1 + if total_functions >= target_index: + cut_position = function_positions[target_index - 1] + ctext = text[4:cut_position] + return re.sub(r'eval\(strc\)\([\w\d,]+\)', 'strc', ctext) + return text + + 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', 'douyin','huya']: + p, url = 0, json.loads(self.d64(ids[1])) + elif ids[0] == 'bili': + p, url = self.biliplay(ids) + elif ids[0] == 'huya': + p, url = 0, json.loads(self.d64(ids[1])) + 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): + try: + data = self.fetch( + f'{self.hosts[ids[0]][0]}/xlive/web-room/v2/index/getRoomPlayInfo?room_id={ids[1]}&protocol=0,1&format=0,2&codec=0&platform=web&qn={ids[2]}', + headers=self.gethr(0, ids[0])).json() + urls = [] + line_index = 1 + for stream in data['data']['playurl_info']['playurl']['stream']: + for format_item in stream['format']: + for codec in format_item['codec']: + for url_info in codec['url_info']: + full_url = f"{url_info['host']}/{codec['base_url'].lstrip('/')}{url_info['extra']}" + urls.extend([f"线路{line_index}", full_url]) + line_index += 1 + return 0, urls + except Exception as e: + return 1, self.excepturl + + def douyuplay(self, ids): + try: + sdata = json.loads(self.d64(ids[1])) + headers = self.gethr(0, zr=f'{self.hosts[ids[0]]}/{sdata["id"]}') + ldata = json.loads(self.d64(ids[2])) + result_obj = {} + with ThreadPoolExecutor(max_workers=len(ldata)) as executor: + futures = [ + executor.submit( + self.douyufp, + sdata, + quality, + headers, + self.hosts[ids[0]], + result_obj + ) for quality in ldata + ] + for future in futures: + future.result() + + result = [] + for bit in sorted(result_obj.keys(), reverse=True): + result.extend(result_obj[bit]) + + if result: + return 0, result + return 1, self.excepturl + + except Exception as e: + return 1, self.excepturl + + def douyufp(self, sdata, quality, headers, host, result_obj): + try: + body = f'{sdata["sign"]}&cdn={sdata["cdn"]}&rate={quality["rate"]}' + body=self.params_to_json(body) + data = self.post(f'{host}/lapi/live/getH5Play/{sdata["id"]}', + data=body, headers=headers).json() + if data.get('data'): + play_url = data['data']['rtmp_url'] + '/' + data['data']['rtmp_live'] + bit = quality.get('bit', 0) + if bit not in result_obj: + result_obj[bit] = [] + result_obj[bit].extend([quality['name'], play_url]) + except Exception as e: + print(f"Error fetching {quality['name']}: {str(e)}") + + 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}'} + diff --git a/js/xiaosa/py/腾讯视频.py b/js/xiaosa/py/腾讯视频.py new file mode 100644 index 0000000..7a5218f --- /dev/null +++ b/js/xiaosa/py/腾讯视频.py @@ -0,0 +1,323 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import json +import sys +import uuid +import copy +sys.path.append('..') +from base.spider import Spider +from concurrent.futures import ThreadPoolExecutor, as_completed + + +class Spider(Spider): + + def init(self, extend=""): + self.dbody = { + "page_params": { + "channel_id": "", + "filter_params": "sort=75", + "page_type": "channel_operation", + "page_id": "channel_list_second_page" + } + } + self.body = self.dbody + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + host = 'https://v.qq.com' + + apihost = 'https://pbaccess.video.qq.com' + + headers = { + 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.5410.0 Safari/537.36', + 'origin': host, + 'referer': f'{host}/' + } + + def homeContent(self, filter): + cdata = { + "电视剧": "100113", + "电影": "100173", + "综艺": "100109", + "纪录片": "100105", + "动漫": "100119", + "少儿": "100150", + "短剧": "110755" + } + result = {} + classes = [] + filters = {} + for k in cdata: + classes.append({ + 'type_name': k, + 'type_id': cdata[k] + }) + with ThreadPoolExecutor(max_workers=len(classes)) as executor: + futures = [executor.submit(self.get_filter_data, item['type_id']) for item in classes] + for future in futures: + cid, data = future.result() + if not data.get('data', {}).get('module_list_datas'): + continue + filter_dict = {} + try: + items = data['data']['module_list_datas'][-1]['module_datas'][-1]['item_data_lists']['item_datas'] + for item in items: + if not item.get('item_params', {}).get('index_item_key'): + continue + params = item['item_params'] + filter_key = params['index_item_key'] + if filter_key not in filter_dict: + filter_dict[filter_key] = { + 'key': filter_key, + 'name': params['index_name'], + 'value': [] + } + filter_dict[filter_key]['value'].append({ + 'n': params['option_name'], + 'v': params['option_value'] + }) + except (IndexError, KeyError): + continue + filters[cid] = list(filter_dict.values()) + result['class'] = classes + result['filters'] = filters + return result + + def homeVideoContent(self): + json_data = {'page_context':None,'page_params':{'page_id':'100101','page_type':'channel','skip_privacy_types':'0','support_click_scan':'1','new_mark_label_enabled':'1','ams_cookies':'',},'page_bypass_params':{'params':{'caller_id':'','data_mode':'default','page_id':'','page_type':'channel','platform_id':'2','user_mode':'default',},'scene':'channel','abtest_bypass_id':'',}} + data = self.post(f'{self.apihost}/trpc.vector_layout.page_view.PageService/getPage',headers=self.headers, json=json_data).json() + vlist = [] + for it in data['data']['CardList'][0]['children_list']['list']['cards']: + if it.get('params'): + p = it['params'] + tag = json.loads(p.get('uni_imgtag', '{}') or p.get('imgtag', '{}') or '{}') + id = it.get('id') or p.get('cid') + name = p.get('mz_title') or p.get('title') + if name and 'http' not in id: + vlist.append({ + 'vod_id': id, + 'vod_name': name, + 'vod_pic': p.get('image_url'), + 'vod_year': tag.get('tag_2', {}).get('text'), + 'vod_remarks': tag.get('tag_4', {}).get('text') + }) + return {'list': vlist} + + def categoryContent(self, tid, pg, filter, extend): + result = {} + params = { + "sort": extend.get('sort', '75'), + "attr": extend.get('attr', '-1'), + "itype": extend.get('itype', '-1'), + "ipay": extend.get('ipay', '-1'), + "iarea": extend.get('iarea', '-1'), + "iyear": extend.get('iyear', '-1'), + "theater": extend.get('theater', '-1'), + "award": extend.get('award', '-1'), + "recommend": extend.get('recommend', '-1') + } + if pg == '1': + self.body = self.dbody.copy() + self.body['page_params']['channel_id'] = tid + self.body['page_params']['filter_params'] = self.josn_to_params(params) + data = self.post( + f'{self.apihost}/trpc.universal_backend_service.page_server_rpc.PageServer/GetPageData?video_appid=1000005&vplatform=2&vversion_name=8.9.10&new_mark_label_enabled=1', + json=self.body, headers=self.headers).json() + ndata = data['data'] + if ndata['has_next_page']: + result['pagecount'] = 9999 + self.body['page_context'] = ndata['next_page_context'] + else: + result['pagecount'] = int(pg) + vlist = [] + for its in ndata['module_list_datas'][-1]['module_datas'][-1]['item_data_lists']['item_datas']: + id = its.get('item_params', {}).get('cid') + if id: + p = its['item_params'] + tag = json.loads(p.get('uni_imgtag', '{}') or p.get('imgtag', '{}') or '{}') + name = p.get('mz_title') or p.get('title') + pic = p.get('new_pic_hz') or p.get('new_pic_vt') + vlist.append({ + 'vod_id': id, + 'vod_name': name, + 'vod_pic': pic, + 'vod_year': tag.get('tag_2', {}).get('text'), + 'vod_remarks': tag.get('tag_4', {}).get('text') + }) + result['list'] = vlist + result['page'] = pg + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + vbody = {"page_params":{"req_from":"web","cid":ids[0],"vid":"","lid":"","page_type":"detail_operation","page_id":"detail_page_introduction"},"has_cache":1} + body = {"page_params":{"req_from":"web_vsite","page_id":"vsite_episode_list","page_type":"detail_operation","id_type":"1","page_size":"","cid":ids[0],"vid":"","lid":"","page_num":"","page_context":"","detail_page_type":"1"},"has_cache":1} + with ThreadPoolExecutor(max_workers=2) as executor: + future_detail = executor.submit(self.get_vdata, vbody) + future_episodes = executor.submit(self.get_vdata, body) + vdata = future_detail.result() + data = future_episodes.result() + + pdata = self.process_tabs(data, body, ids) + if not pdata: + return self.handle_exception(None, "No pdata available") + + try: + star_list = vdata['data']['module_list_datas'][0]['module_datas'][0]['item_data_lists']['item_datas'][ + 0].get('sub_items', {}).get('star_list', {}).get('item_datas', []) + actors = [star['item_params']['name'] for star in star_list] + names = ['腾讯视频', '预告片'] + plist, ylist = self.process_pdata(pdata, ids) + if not plist: + del names[0] + if not ylist: + del names[1] + vod = self.build_vod(vdata, actors, plist, ylist, names) + return {'list': [vod]} + except Exception as e: + return self.handle_exception(e, "Error processing detail") + + def searchContent(self, key, quick, pg="1"): + headers = self.headers.copy() + headers.update({'Content-Type': 'application/json'}) + body = {'version':'25021101','clientType':1,'filterValue':'','uuid':str(uuid.uuid4()),'retry':0,'query':key,'pagenum':int(pg)-1,'pagesize':30,'queryFrom':0,'searchDatakey':'','transInfo':'','isneedQc':True,'preQid':'','adClientInfo':'','extraInfo':{'isNewMarkLabel':'1','multi_terminal_pc':'1','themeType':'1',},} + data = self.post(f'{self.apihost}/trpc.videosearch.mobile_search.MultiTerminalSearch/MbSearch?vplatform=2', + json=body, headers=headers).json() + vlist = [] + vname=["电视剧", "电影", "综艺", "纪录片", "动漫", "少儿", "短剧"] + v=data['data']['normalList']['itemList'] + d=data['data']['areaBoxList'][0]['itemList'] + q=v+d + if v[0].get('doc') and v[0]['doc'].get('id') =='MainNeed':q=d+v + for k in q: + if k.get('doc') and k.get('videoInfo') and k['doc'].get('id') and '外站' not in k['videoInfo'].get('subTitle') and k['videoInfo'].get('title') and k['videoInfo'].get('typeName') in vname: + img_tag = k.get('videoInfo', {}).get('imgTag') + if img_tag is not None and isinstance(img_tag, str): + try: + tag = json.loads(img_tag) + except json.JSONDecodeError as e: + tag = {} + else: + tag = {} + pic = k.get('videoInfo', {}).get('imgUrl') + vlist.append({ + 'vod_id': k['doc']['id'], + 'vod_name': self.removeHtmlTags(k['videoInfo']['title']), + 'vod_pic': pic, + 'vod_year': k['videoInfo'].get('typeName') +' '+ tag.get('tag_2', {}).get('text', ''), + 'vod_remarks': tag.get('tag_4', {}).get('text', '') + }) + return {'list': vlist, 'page': pg} + + def playerContent(self, flag, id, vipFlags): + ids = id.split('@') + url = f"{self.host}/x/cover/{ids[0]}/{ids[1]}.html" + return {'jx':1,'parse': 1, 'url': url, 'header': ''} + + def localProxy(self, param): + pass + + def get_filter_data(self, cid): + hbody = self.dbody.copy() + hbody['page_params']['channel_id'] = cid + data = self.post( + f'{self.apihost}/trpc.universal_backend_service.page_server_rpc.PageServer/GetPageData?video_appid=1000005&vplatform=2&vversion_name=8.9.10&new_mark_label_enabled=1', + json=hbody, headers=self.headers).json() + return cid, data + + def get_vdata(self, body): + try: + vdata = self.post( + f'{self.apihost}/trpc.universal_backend_service.page_server_rpc.PageServer/GetPageData?video_appid=3000010&vplatform=2&vversion_name=8.2.96', + json=body, headers=self.headers + ).json() + return vdata + except Exception as e: + print(f"Error in get_vdata: {str(e)}") + return {'data': {'module_list_datas': []}} + + def process_pdata(self, pdata, ids): + plist = [] + ylist = [] + for k in pdata: + if k.get('item_id'): + pid = f"{k['item_params']['union_title']}${ids[0]}@{k['item_id']}" + if '预告' in k['item_params']['union_title']: + ylist.append(pid) + else: + plist.append(pid) + return plist, ylist + + def build_vod(self, vdata, actors, plist, ylist, names): + d = vdata['data']['module_list_datas'][0]['module_datas'][0]['item_data_lists']['item_datas'][0]['item_params'] + urls = [] + if plist: + urls.append('#'.join(plist)) + if ylist: + urls.append('#'.join(ylist)) + vod = { + 'type_name': d.get('sub_genre', ''), + 'vod_name': d.get('title', ''), + 'vod_year': d.get('year', ''), + 'vod_area': d.get('area_name', ''), + 'vod_remarks': d.get('holly_online_time', '') or d.get('hotval', ''), + 'vod_actor': ','.join(actors), + 'vod_content': d.get('cover_description', ''), + 'vod_play_from': '$$$'.join(names), + 'vod_play_url': '$$$'.join(urls) + } + return vod + + def handle_exception(self, e, message): + print(f"{message}: {str(e)}") + return {'list': [{'vod_play_from': '哎呀翻车啦', 'vod_play_url': '翻车啦#555'}]} + + def process_tabs(self, data, body, ids): + try: + pdata = data['data']['module_list_datas'][-1]['module_datas'][-1]['item_data_lists']['item_datas'] + tabs = data['data']['module_list_datas'][-1]['module_datas'][-1]['module_params'].get('tabs') + if tabs and len(json.loads(tabs)): + tabs = json.loads(tabs) + remaining_tabs = tabs[1:] + task_queue = [] + for tab in remaining_tabs: + nbody = copy.deepcopy(body) + nbody['page_params']['page_context'] = tab['page_context'] + task_queue.append(nbody) + with ThreadPoolExecutor(max_workers=10) as executor: + future_map = {executor.submit(self.get_vdata, task): idx for idx, task in enumerate(task_queue)} + results = [None] * len(task_queue) + for future in as_completed(future_map.keys()): + idx = future_map[future] + results[idx] = future.result() + for result in results: + if result: + page_data = result['data']['module_list_datas'][-1]['module_datas'][-1]['item_data_lists'][ + 'item_datas'] + pdata.extend(page_data) + return pdata + except Exception as e: + print(f"Error processing episodes: {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) + + diff --git a/js/xiaosa/py/芒果视频.py b/js/xiaosa/py/芒果视频.py new file mode 100644 index 0000000..6ba8e34 --- /dev/null +++ b/js/xiaosa/py/芒果视频.py @@ -0,0 +1,205 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import sys +import time +from concurrent.futures import ThreadPoolExecutor, as_completed +sys.path.append('..') +from base.spider import Spider + +class Spider(Spider): + + def init(self, extend=""): + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + rhost='https://www.mgtv.com' + + host='https://pianku.api.mgtv.com' + + vhost='https://pcweb.api.mgtv.com' + + mhost='https://dc.bz.mgtv.com' + + shost='https://mobileso.bz.mgtv.com' + + 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', + 'origin': rhost, + 'referer': f'{rhost}/' + } + + def homeContent(self, filter): + result = {} + cateManual = { + "电影": "3", + "电视剧": "2", + "综艺": "1", + "动画": "50", + "少儿": "10", + "纪录片": "51", + "教育": "115" + } + classes = [] + filters = {} + for k in cateManual: + classes.append({ + 'type_name': k, + 'type_id': cateManual[k] + }) + 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 + return result + + def homeVideoContent(self): + data=self.fetch(f'{self.mhost}/dynamic/v1/channel/index/0/0/0/1000000/0/0/17/1354?type=17&version=5.0&t={str(int(time.time()*1000))}&_support=10000000', headers=self.headers).json() + videoList = [] + for i in data['data']: + if i.get('DSLList') and len(i['DSLList']): + for j in i['DSLList']: + if j.get('data') and j['data'].get('items') and len(j['data']['items']): + for k in j['data']['items']: + videoList.append({ + 'vod_id': k["videoId"], + 'vod_name': k['videoName'], + 'vod_pic': k['img'], + 'vod_year': k.get('cornerTitle'), + 'vod_remarks': k.get('time') or k.get('desc'), + }) + return {'list':videoList} + + def categoryContent(self, tid, pg, filter, extend): + body={ + 'allowedRC': '1', + 'platform': 'pcweb', + 'channelId': tid, + 'pn': pg, + 'pc': '80', + 'hudong': '1', + '_support': '10000000' + } + body.update(extend) + data=self.fetch(f'{self.host}/rider/list/pcweb/v3', params=body, headers=self.headers).json() + videoList = [] + for i in data['data']['hitDocs']: + videoList.append({ + 'vod_id': i["playPartId"], + 'vod_name': i['title'], + 'vod_pic': i['img'], + 'vod_year': (i.get('rightCorner',{}) or {}).get('text') or i.get('year'), + 'vod_remarks': i['updateInfo'] + }) + result = {} + result['list'] = videoList + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + vbody={'allowedRC': '1', 'vid': ids[0], 'type': 'b', '_support': '10000000'} + vdata=self.fetch(f'{self.vhost}/video/info', params=vbody, headers=self.headers).json() + d=vdata['data']['info']['detail'] + vod = { + 'vod_name': vdata['data']['info']['title'], + 'type_name': d.get('kind'), + 'vod_year': d.get('releaseTime'), + 'vod_area': d.get('area'), + 'vod_lang': d.get('language'), + 'vod_remarks': d.get('updateInfo'), + 'vod_actor': d.get('leader'), + 'vod_director': d.get('director'), + 'vod_content': d.get('story'), + 'vod_play_from': '芒果TV', + 'vod_play_url': '' + } + data,pdata=self.fetch_page_data('1', ids[0],True) + pagecount=data['data'].get('total_page') or 1 + if int(pagecount)>1: + pages = list(range(2, pagecount+1)) + page_results = {} + with ThreadPoolExecutor(max_workers=10) as executor: + future_to_page = { + executor.submit(self.fetch_page_data, page, ids[0]): page + for page in pages + } + for future in as_completed(future_to_page): + page = future_to_page[future] + try: + result = future.result() + page_results[page] = result + except Exception as e: + print(f"Error fetching page {page}: {e}") + for page in sorted(page_results.keys()): + pdata.extend(page_results[page]) + vod['vod_play_url'] = '#'.join(pdata) + return {'list':[vod]} + + def searchContent(self, key, quick, pg="1"): + data=self.fetch(f'{self.shost}/applet/search/v1?channelCode=mobile-wxap&q={key}&pn={pg}&pc=10&_support=10000000', headers=self.headers).json() + videoList = [] + for i in data['data']['contents']: + if i.get('data') and len(i['data']): + k = i['data'][0] + if k.get('vid') and k.get('img'): + try: + videoList.append({ + 'vod_id': k['vid'], + 'vod_name': k['title'], + 'vod_pic': k['img'], + 'vod_year': (i.get('rightTopCorner',{}) or {}).get('text') or i.get('year'), + 'vod_remarks': '/'.join(i.get('desc',[])), + }) + except: + print(k) + return {'list':videoList,'page':pg} + + def playerContent(self, flag, id, vipFlags): + id=f'{self.rhost}{id}' + return {'jx':1,'parse': 1, 'url': id, 'header': ''} + + def localProxy(self, param): + pass + + def getf(self, body): + params = { + 'allowedRC': '1', + 'channelId': body['type_id'], + 'platform': 'pcweb', + '_support': '10000000', + } + data = self.fetch(f'{self.host}/rider/config/channel/v1', params=params, headers=self.headers).json() + ft = [] + for i in data['data']['listItems']: + try: + value_array = [{"n": value['tagName'], "v": value['tagId']} for value in i['items'] if + value.get('tagName')] + ft.append({"key": i['eName'], "name": i['typeName'], "value": value_array}) + except: + print(i) + return body['type_id'], ft + + def fetch_page_data(self, page, id, b=False): + body = {'version': '5.5.35', 'video_id': id, 'page': page, 'size': '30', + 'platform': '4', 'src': 'mgtv', 'allowedRC': '1', '_support': '10000000'} + data = self.fetch(f'{self.vhost}/episode/list', params=body, headers=self.headers).json() + ldata = [f'{i["t3"]}${i["url"]}' for i in data['data']['list']] + if b: + return data, ldata + else: + return ldata diff --git a/js/xiaosa/py/追星影视.py b/js/xiaosa/py/追星影视.py new file mode 100644 index 0000000..8f00cac --- /dev/null +++ b/js/xiaosa/py/追星影视.py @@ -0,0 +1,182 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import json +import random +import string +import sys +from base64 import b64decode, b64encode +from urllib.parse import quote, unquote +sys.path.append('..') +import concurrent.futures +from base.spider import Spider + + +class Spider(Spider): + + def init(self, extend=""): + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + host='https://xy.51gy.top' + + headers = { + 'User-Agent': 'okhttp/4.9.1', + 'mark-time': 'null', + 'fn-api-version': '3.1.9', + 'versionCode': '19', + 'product': 'gysg', + 'sg': '22664e555e0015684f988833803b3055', + } + + def homeContent(self, filter): + data=self.fetch(f"{self.host}/api.php/vod/type", headers=self.headers).json() + result,filters,videos = {},{},[] + classes = [{'type_id': i['type_name'], 'type_name': i['type_name']} for i in data['list'][1:]] + body={'token':'', 'type_id':data['list'][0]['type_id']} + ldata=self.post(f"{self.host}/api.php/vod/category", data=body, headers=self.headers).json() + for i in ldata['data']['banner']: + videos.append({ + 'vod_id':i.get('vod_id'), + 'vod_name':i.get('vod_name'), + 'vod_pic':i.get('vod_pic_thumb') + }) + with concurrent.futures.ThreadPoolExecutor(max_workers=len(classes)) as executor: + future_to_aid = {executor.submit(self.fts, aid): aid for aid in classes} + for future in concurrent.futures.as_completed(future_to_aid): + aid = future_to_aid[future] + try: + aid_id, fts = future.result() + filters[aid_id] = fts + except Exception as e: + print(f"Error processing aid {aid}: {e}") + result['class'] = classes + result['filters'] = filters + result['list'] = videos + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, tid, pg, filter, extend): + params={'state':extend.get('state',tid) or tid,'class':extend.get('classes','全部'),'area':extend.get('area','全部'),'year':extend.get('year','全部'),'lang':extend.get('lang','全部'),'version':extend.get('version','全部'),'pg':pg} + data=self.fetch(f"{self.host}/api.php/vod/list", params=params, headers=self.headers).json() + result = {} + videos = [] + for i in data['data']['list']: + if str(i.get('vod_id', 0)) != '0': + videos.append({ + 'vod_id': i.get('vod_id'), + 'vod_name': i.get('vod_name'), + 'vod_pic': i.get('vod_pic'), + 'vod_year': f"{i.get('vod_score')}分", + 'vod_remarks': i.get('vod_remarks') + }) + result['list'] = videos + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + body={'ids':ids[0],'uni_code':self.getunc(),'ac':'detail','token':''} + data=self.post(f"{self.host}/api.php/vod/detail2", data=body, headers=self.headers).json() + v=data['data'] + vod = { + 'type_name': v.get('type_name'), + 'vod_year': v.get('vod_year'), + 'vod_area': v.get('vod_area'), + 'vod_lang': v.get('vod_lang'), + 'vod_remarks': v.get('vod_remarks'), + 'vod_actor': v.get('vod_actor'), + 'vod_director': v.get('vod_director'), + 'vod_content': v.get('vod_content') + } + n,p=[],[] + for i in v['vod_play_list']: + pp=i['player_info'] + n.append(pp['show']) + np=[] + for j in i['urls']: + cd={'parse':pp.get('parse'),'url':j['url'],'headers':pp.get('headers')} + np.append(f"{j['name']}${self.e64(json.dumps(cd))}") + p.append('#'.join(np)) + vod.update({'vod_play_from':'$$$'.join(n),'vod_play_url':'$$$'.join(p)}) + return {'list':[vod]} + + def searchContent(self, key, quick, pg="1"): + data=self.fetch(f"{self.host}/api.php/vod/search", params={'keywords':key,'type':'1','pg':pg}, headers=self.headers).json() + return {'list':data['list'],'page':pg} + + def playerContent(self, flag, id, vipFlags): + ids=json.loads(self.d64(id)) + headers = {} + urls=ids['url'] + if ids.get('headers'): + hs=ids['headers'].split('=>',1) + headers[hs[0].strip()]=hs[-1].strip() + if isinstance(ids.get('parse'), list) and len(ids['parse']) > 0: + urls=[] + for i,x in enumerate(ids['parse']): + su=f"{self.getProxyUrl()}&url={quote(x+ids['url'])}" + urls.extend([f'解析{i+1}',su]) + return {'parse': 0, 'url': urls, 'header': headers} + + def localProxy(self, param): + try: + body = {'url':unquote(param['url'])} + data=self.post(f"{self.host}/api.php/vod/m_jie_xi", data=body, headers=self.headers).json() + url=data.get('url') or data['data'].get('url') + return [302,'video/MP2T',None,{'Location':url}] + except: + return [] + + def liveContent(self, url): + pass + + def fts(self, tdata): + params={'state':tdata['type_id'],'pg':'1'} + data = self.fetch(f"{self.host}/api.php/vod/list", params=params, headers=self.headers).json() + ftks = ["classes", "area", "lang", "year", "version", "state"] + filter = [ + { + 'name': k, + 'key': k, + 'value': [{'n': i, 'v': i} for i in v.split(',')] + } + for k, v in data['data']['classes']["type_extend"].items() + if k in ftks and v + ] + return tdata['type_id'],filter + + def getunc(self): + chars = string.ascii_lowercase + string.digits + data = ''.join(random.choice(chars) for _ in range(16)) + return self.e64(data) + + 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: + 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: + return "" \ No newline at end of file diff --git a/js/xiaosa/py/金牌影视.py b/js/xiaosa/py/金牌影视.py new file mode 100644 index 0000000..815951a --- /dev/null +++ b/js/xiaosa/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/js/xiaosa/py/锦鲤短剧.py b/js/xiaosa/py/锦鲤短剧.py new file mode 100644 index 0000000..b3a2dbc --- /dev/null +++ b/js/xiaosa/py/锦鲤短剧.py @@ -0,0 +1,147 @@ +from base.spider import Spider +import re,sys,json +sys.path.append('..') + +class Spider(Spider): + api_host = 'https://api.jinlidj.com' + origin = 'https://www.jinlidj.com' + api_path = '/api/search' + headers = { + 'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36", + 'Content-Type': "application/json", + 'accept-language': "zh-CN,zh;q=0.9", + 'cache-control': "no-cache", + 'origin': origin, + 'pragma': "no-cache", + 'priority': "u=1, i", + 'referer': origin+'/', + 'sec-ch-ua': "\"Not)A;Brand\";v=\"8\", \"Chromium\";v=\"138\", \"Google Chrome\";v=\"138\"", + 'sec-ch-ua-mobile': "?0", + 'sec-ch-ua-platform': "\"Windows\"", + 'sec-fetch-dest': "empty", + 'sec-fetch-mode': "cors", + 'sec-fetch-site': "same-site" + } + + def homeContent(self, filter): + return {'class': [{'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': '伦理现实'}, {'type_id': 6, 'type_name': '时空穿越'}, {'type_id': 7, 'type_name': '权谋身份'}]} + + def homeVideoContent(self): + payload = { + "page": 1, + "limit": 24, + "type_id": "", + "year": "", + "keyword": "" + } + response = self.post(f"{self.api_host}{self.api_path}", data=json.dumps(payload), headers=self.headers).json() + data = response['data'] + videos = [] + for i in data['list']: + videos.append({ + 'vod_id': i.get('vod_id'), + 'vod_name': i.get('vod_name'), + 'vod_class': i.get('vod_class'), + 'vod_pic': i.get('vod_pic'), + 'vod_year': i.get('vod_year'), + 'vod_remarks': i.get('vod_total')+'集', + 'vod_score': i.get('vod_score') + }) + return {'list': videos} + + def detailContent(self, ids): + response = self.post(f'{self.api_host}/api/detail/{ids[0]}', data=json.dumps({}), headers=self.headers).json() + data = response['data'] + videos = [] + vod_play_url = '' + for name,url in data['player'].items(): + vod_play_url += f'{name}${url}#' + vod_play_url.rstrip('#') + videos.append({ + 'vod_id': data.get('vod_id'), + 'vod_name': data.get('vod_name'), + 'vod_content': data.get('vod_blurb'), + 'vod_remarks': '集数:' + data.get('vod_total'), + "vod_director": data.get('vod_director'), + "vod_actor": data.get('vod_actor'), + 'vod_year': data.get('vod_year'), + 'vod_area': data.get('vod_area'), + 'vod_play_from': '锦鲤短剧', + 'vod_play_url': vod_play_url + }) + return {'list': videos} + + def searchContent(self, key, quick, pg="1"): + payload = { + "page": pg, + "limit": 24, + "type_id": "", + "keyword": key + } + response = self.post(f'{self.api_host}{self.api_path}', data=json.dumps(payload), headers=self.headers).json() + data = response['data'] + videos = [] + for i in data['list']: + videos.append({ + "vod_id": i['vod_id'], + "vod_name": i['vod_name'], + "vod_class": i['vod_class'], + "vod_pic": i['vod_pic'], + 'vod_year': i.get('vod_year'), + "vod_remarks": i['vod_total'] + '集' + }) + return {'list': videos, 'page': pg, 'total': data['total'], 'limit': 24} + + def categoryContent(self, tid, pg, filter, extend): + payload = { + "page": pg, + "limit": 24, + "type_id": tid, + "year": "", + "keyword": "" + } + response = self.post(f'{self.api_host}{self.api_path}', data=json.dumps(payload), headers=self.headers).json() + data = response['data'] + videos = [] + for i in data['list']: + videos.append({ + 'vod_id': i.get('vod_id'), + 'vod_name': i.get('vod_name'), + 'vod_class': i.get('vod_class'), + 'vod_pic': i.get('vod_pic'), + 'vod_remarks': i.get('vod_total')+'集', + 'vod_year': i.get('vod_year'), + 'vod_score': i.get('vod_score') + }) + return {'list': videos} + + def playerContent(self, flag, id, vipflags): + parse = 0 + header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36'} + try: + response = self.fetch(id, headers=self.headers).text + match = re.search(r'let\s+data\s*=\s*(\{[^}]*http[^}]*\});', response, re.IGNORECASE) + data = match.group(1) + data2 = json.loads(data) + url = data2['url'] + except Exception: + url, parse, header = id, 1, self.headers + return {'parse': parse, 'url': url,'header': header} + + def init(self, extend=''): + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + def localProxy(self, param): + pass diff --git a/js/xiaosa/py/零度影视.py b/js/xiaosa/py/零度影视.py new file mode 100644 index 0000000..0caa59e --- /dev/null +++ b/js/xiaosa/py/零度影视.py @@ -0,0 +1,220 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import json +import random +import sys +from base64 import b64encode, b64decode +from concurrent.futures import ThreadPoolExecutor +sys.path.append('..') +from base.spider import Spider + +class Spider(Spider): + + def init(self, extend=""): + did=self.getdid() + self.headers.update({'deviceId': did}) + token=self.gettk() + self.headers.update({'token': token}) + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + host='http://ldys.sq1005.top' + + headers = { + 'User-Agent': 'okhttp/4.12.0', + 'client': 'app', + 'deviceType': 'Android' + } + + def homeContent(self, filter): + data=self.post(f"{self.host}/api/v1/app/screen/screenType", headers=self.headers).json() + result = {} + cate = { + "类型": "classify", + "地区": "region", + "年份": "year" + } + sort={ + 'key':'sreecnTypeEnum', + 'name': '排序', + 'value':[{'n':'最新','v':'NEWEST'},{'n':'人气','v':'POPULARITY'},{'n':'评分','v':'COLLECT'},{'n':'热搜','v':'HOT'}] + } + classes = [] + filters = {} + for k in data['data']: + classes.append({ + 'type_name': k['name'], + 'type_id': k['id'] + }) + filters[k['id']] = [] + for v in k['children']: + filters[k['id']].append({ + 'name': v['name'], + 'key': cate[v['name']], + 'value':[{'n':i['name'],'v':i['name']} for i in v['children']] + }) + filters[k['id']].append(sort) + result['class'] = classes + result['filters'] = filters + return result + + def homeVideoContent(self): + jdata={"condition":64,"pageNum":1,"pageSize":40} + data=self.post(f"{self.host}/api/v1/app/recommend/recommendSubList", headers=self.headers, json=jdata).json() + return {'list':self.getlist(data['data']['records'])} + + def categoryContent(self, tid, pg, filter, extend): + jdata = { + 'condition': { + 'sreecnTypeEnum': 'NEWEST', + 'typeId': tid, + }, + 'pageNum': int(pg), + 'pageSize': 40, + } + jdata['condition'].update(extend) + data = self.post(f"{self.host}/api/v1/app/screen/screenMovie", headers=self.headers, json=jdata).json() + result = {} + result['list'] = self.getlist(data['data']['records']) + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + ids = ids[0].split('@@') + jdata = {"id": int(ids[0]), "typeId": ids[-1]} + v = self.post(f"{self.host}/api/v1/app/play/movieDesc", headers=self.headers, json=jdata).json() + v = v['data'] + vod = { + 'type_name': v.get('classify'), + 'vod_year': v.get('year'), + 'vod_area': v.get('area'), + 'vod_actor': v.get('star'), + 'vod_director': v.get('director'), + 'vod_content': v.get('introduce'), + 'vod_play_from': '', + 'vod_play_url': '' + } + c = self.post(f"{self.host}/api/v1/app/play/movieDetails", headers=self.headers, json=jdata).json() + l = c['data']['moviePlayerList'] + n = {str(i['id']): i['moviePlayerName'] for i in l} + m = jdata.copy() + m.update({'playerId': str(l[0]['id'])}) + pd = self.getv(m, c['data']['episodeList']) + if len(l)-1: + with ThreadPoolExecutor(max_workers=len(l)-1) as executor: + future_to_player = {executor.submit(self.getd, jdata, player): player for player in l[1:]} + for future in future_to_player: + try: + o,p = future.result() + pd.update(self.getv(o,p)) + except Exception as e: + print(f"请求失败: {e}") + w, e = [],[] + for i, x in pd.items(): + if x: + w.append(n[i]) + e.append(x) + vod['vod_play_from'] = '$$$'.join(w) + vod['vod_play_url'] = '$$$'.join(e) + return {'list': [vod]} + + def searchContent(self, key, quick, pg="1"): + jdata={ + "condition": { + "value": key + }, + "pageNum": int(pg), + "pageSize": 40 + } + data=self.post(f"{self.host}/api/v1/app/search/searchMovie", headers=self.headers, json=jdata).json() + return {'list':self.getlist(data['data']['records']),'page':pg} + + def playerContent(self, flag, id, vipFlags): + jdata=json.loads(self.d64(id)) + data = self.post(f"{self.host}/api/v1/app/play/movieDetails", headers=self.headers, json=jdata).json() + try: + params={'playerUrl':data['data']['url'],'playerId':jdata['playerId']} + pd=self.fetch(f"{self.host}/api/v1/app/play/analysisMovieUrl", headers=self.headers, params=params).json() + url,p=pd['data'],0 + except Exception as e: + print(f"请求失败: {e}") + url,p=data['data']['url'],0 + return {'parse': p, 'url': url, 'header': {'User-Agent': 'okhttp/4.12.0'}} + + def localProxy(self, param): + pass + + def liveContent(self, url): + pass + + def gettk(self): + data=self.fetch(f"{self.host}/api/v1/app/user/visitorInfo", headers=self.headers).json() + return data['data']['token'] + + def getdid(self): + did=self.getCache('ldid') + if not did: + hex_chars = '0123456789abcdef' + did =''.join(random.choice(hex_chars) for _ in range(16)) + self.setCache('ldid',did) + return did + + def getd(self,jdata,player): + x = jdata.copy() + x.update({'playerId': str(player['id'])}) + response = self.post(f"{self.host}/api/v1/app/play/movieDetails", headers=self.headers, json=x).json() + return x, response['data']['episodeList'] + + def getv(self,d,c): + f={d['playerId']:''} + g=[] + for i in c: + j=d.copy() + j.update({'episodeId':str(i['id'])}) + g.append(f"{i['episode']}${self.e64(json.dumps(j))}") + f[d['playerId']]='#'.join(g) + return f + + def getlist(self,data): + videos = [] + for i in data: + videos.append({ + 'vod_id': f"{i['id']}@@{i['typeId']}", + 'vod_name': i.get('name'), + 'vod_pic': i.get('cover'), + 'vod_year': i.get('year'), + 'vod_remarks': i.get('totalEpisode') + }) + return videos + + 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 "" diff --git a/js/xiaosa/spider.jar b/js/xiaosa/spider.jar new file mode 100644 index 0000000..30a2e82 Binary files /dev/null and b/js/xiaosa/spider.jar differ diff --git a/jsm.json b/jsm.json new file mode 100644 index 0000000..5748ca2 --- /dev/null +++ b/jsm.json @@ -0,0 +1,925 @@ +{ + "spider":"./pg.jar", + "sites":[ + { + "key": "豆瓣", + "name": "豆瓣", + "type": 3, + "api": "csp_Douban", + "searchable": 0, + "changeable": 1, + "indexs":1, + "ext": "./lib/tokenm.json$$$./lib/douban.json" + }, + {"key":"TGDouban","name":"TG豆瓣","type":3,"api":"csp_TGDouban","timeout":120, + "ext":{ + "token":"./lib/tokenm.json", + "json":"./lib/tgsearch.json", + "keywords":"名称,片名,推荐", + "tgsearch_url":"http://127.0.0.1:10199", + "tgsearch_media_url":"http://127.0.0.1:10199", + "channellist":"tgsearchers3,leoziyuan,peccxinpd,yydf_hzl,vip115hot,clouddriveresources,q66share,yggpan,xiangxiunbb,oscardianying,dianying4k,wfysfx02,quarkfree,ucwpzy,ucquark,mcph860,mcph608,xunleibl,taoxgzy,yunpanx,kkxlzy,mcph086,dianyingshare,quark_movies,zyfx2022,alyp_1,quanziyuanshe,hdhhd21,guoman4k,duan_ju,q_dianying,q_dianshiju,sharepanfilms,mcph01,jdjdn1111,panjclub,baicaozy,yunpan189,tianyirigeng,cloudtianyi,tyysypzypd,txtyzy,kuakeclound,tyypzhpd,zyfb123,xx123pan,zyzhpd123,yingshifenxiang123,yp123pan,wp123zy115:oneonefivewpfx,lsp115,qukanmovie,channel_shares_115,share4115,ysxb48,aliyun:zaihuayun,sharealiyun,aliyun_4k_movies,aliyunys,qixingzhenren,yunpanuc,ucshare,ucwangpan", + "proxy":"proxy", + "douban":"./lib/douban.json", + "danmu":true + }, + "style": { + "type": "rect", + "ratio": 0.7 + } + }, + { + "key": "网盘配置", + "name": "网盘及彈幕配置", + "type": 3, + "api": "csp_Config", + "searchable": 0, + "changeable": 0, + "ext":"./lib/tokenm.json", + "style": { + "type": "rect", + "ratio": 1.5 + } + }, + {"key":"Local","name":"本地","type":3,"api":"csp_Local"}, + { + "key": "FirstAid", + "name": "🚑 急救知识 ", + "type": 3, + "api": "csp_FirstAid", + "searchable": 0, + "quickSearch": 0, + "changeable": 0, + "style": { + "type": "rect", + "ratio": 3.8 + } + }, + { + "key":"bili", + "name":"B站 | Bili[jar]", + "type":3, + "api": "csp_Bili", + "searchable": 1, + "quickSearch": 0, + "changeable": 0, + "timeout":60, + "playerType": 2, + "ext":{ + "type":"演唱会#电影#电视剧#帕梅拉#广场舞#纪录片#综艺#鬼畜#音乐#舞蹈#影视#知识#美食#风光#田园#户外#8K#徐云", + "cookie":"" + } + }, + {"key":"TGYunPanLocal","name":"TG频道搜索","type":3,"api":"csp_TGYunPanLocal","timeout":120, + "ext":{ + "token":"./lib/tokenm.json", + "json":"./lib/tgsearch.json", + "keywords":"名称,片名,推荐", + "tgsearch_url":"http://127.0.0.1:10199", + "tgsearch_media_url":"http://127.0.0.1:10199", + "channellist":"tgsearchers3,leoziyuan,peccxinpd,yydf_hzl,vip115hot,clouddriveresources,q66share,yggpan,xiangxiunbb,oscardianying,dianying4k,wfysfx02,quarkfree,ucwpzy,ucquark,mcph860,mcph608,xunleibl,taoxgzy,yunpanx,kkxlzy,mcph086,dianyingshare,quark_movies,zyfx2022,alyp_1,quanziyuanshe,hdhhd21,guoman4k,duan_ju,q_dianying,q_dianshiju,sharepanfilms,mcph01,jdjdn1111,panjclub,baicaozy,yunpan189,tianyirigeng,cloudtianyi,tyysypzypd,txtyzy,kuakeclound,tyypzhpd,zyfb123,xx123pan,zyzhpd123,yingshifenxiang123,yp123pan,wp123zy115:oneonefivewpfx,lsp115,qukanmovie,channel_shares_115,share4115,ysxb48,aliyun:zaihuayun,sharealiyun,aliyun_4k_movies,aliyunys,qixingzhenren,yunpanuc,ucshare,ucwangpan", + "proxy":"proxy", + "danmu":true + }, + "style": { + "type": "rect", + "ratio": 1.77 + } + }, + {"key":"TGYunPan","name":"TG群组搜索","type":3,"api":"csp_TGYunPan","timeout":120, + "ext":{ + "token":"./lib/tokenm.json", + "json":"./lib/tgsearch.json", + "keywords":"名称,片名,推荐", + "tgsearch_url":"http://127.0.0.1:10199", + "tgsearch_media_url":"http://127.0.0.1:10199", + "channellist":"tgsearchers3,KFCYeah,tianyifc,BaiduCloudDisk,txtyzy,peccxinpd,gotopan,PanjClub,kkxlzy,baicaoZY,yggpan,zaihuayun,Q66Share,Oscar_4Kmovies,shareAliyun,alyp_1,Quark_Movies,XiangxiuNBB,ydypzyfx,ucquark,xx123pan,zyfb123,tyypzhpd,tianyirigeng,cloudtianyi,hdhhd21,Lsp115,qixingzhenren,tyysypzypd,vip115hot,wp123zy,yunpan189,yydf_hzl,leoziyuan", + "proxy":"noproxy", + "danmu":true + }, + "style": { + "type": "rect", + "ratio": 1.77 + } + }, + {"key":"Guanying","name":"观影|网盘|磁力","type":3,"api":"csp_Guanying","quickSearch":1, "changeable":1, "filterable":1, "timeout":60, "ext":"./lib/tokenm.json$$$https://www.gying.net$$$noproxy$$$1$$$./lib/guanying.txt$$$GUANYING"}, + {"key":"FourKZN","name":"4K指南|网盘|磁力","type":3,"api":"csp_FourKZN","quickSearch":1, "changeable":1, "filterable":1, "timeout":60, "ext":"./lib/tokenm.json$$$http://xuexizhinan.com/$$$noproxy$$$1$$$./lib/4kzn.txt$$$4KZN"}, + {"key":"FourKFox","name":"4KFox|网盘|磁力","type":3,"api":"csp_FourKFox","quickSearch":1, "changeable":1, "filterable":1, "timeout":60, "ext":"./lib/tokenm.json$$$http://4kfox.com/$$$noproxy$$$1$$$./lib/4kfox.txt$$$4KFOX"}, + {"key":"FourKFM","name":"4K影库|网盘|磁力","type":3,"api":"csp_FourKFM","quickSearch":1, "changeable":1, "filterable":1, "timeout":60, "ext":"./lib/tokenm.json$$$http://4kfm.com/$$$noproxy$$$1$$$./lib/4kfm.txt$$$4KFM"}, + {"key":"校长影视","name":"校长影视|网盘","type":3,"api":"csp_XiaoZhang", "quickSearch":1, "changeable":1, "filterable":1, "timeout":60,"ext":"./lib/tokenm.json$$$https://xzyshd.com$$$proxy$$$1"}, + {"key":"Wogg","name":"玩偶哥哥|网盘","type":3,"api":"csp_Wogg","quickSearch":1, "changeable":1, "filterable":1, "timeout":60, "ext":"./lib/tokenm.json$$$http://wogg.888484.xyz/$$$noproxy$$$1$$$./lib/wogg.json$$$WOGG"}, + {"key":"yydsys","name":"玩你老哥|网盘","type":3,"api":"csp_Wobg","quickSearch":1, "changeable":1, "filterable":1, "timeout":60, "ext":"./lib/tokenm.json$$$https://tv.yydsys.top/$$$proxy$$$1$$$./lib/wogg.json$$$WNLG"}, + {"key":"Mogg","name":"木偶哥哥|网盘","type":3,"api":"csp_Wobg","quickSearch":1, "changeable":1, "filterable":1, "timeout":60, "ext":"./lib/tokenm.json$$$http://123.666291.xyz/$$$noproxy$$$1$$$./lib/wogg.json$$$MOGG"}, + { + "key": "至臻|网盘", + "name": "至臻|网盘", + "type": 3, + "api": "csp_Wobg", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$https://mihdr.top/$$$noproxy$$$1$$$./lib/wogg.json$$$ZHIZHEN" + }, + {"key":"Hmxz","name":"海绵|网盘","type":3,"api":"csp_Hmxz","quickSearch":1, "changeable":1, "filterable":1, "timeout":60, "ext":"./lib/tokenm.json$$$https://haimian.eu.org/$$$noproxy$$$1$$$./lib/hmxz.txt$$$HMXZ", + "style": { + "type": "list", + "ratio": 1.1 + } + }, + {"key":"Leijing","name":"雷鲸|网盘","type":3,"api":"csp_Panta","quickSearch":1, "changeable":1, "filterable":1, "timeout":60, "ext":"./lib/tokenm.json$$$https://leijing.xyz/$$$noproxy$$$1$$$./lib/leijing.txt$$$LEIJING", + "style": { + "type": "list", + "ratio": 1.1 + } + }, + {"key":"LIBVIO","name":"LIBVIO|网盘","type":3,"api":"csp_Libvio","quickSearch":1, "changeable":1, "filterable":1, "timeout":60, "ext":"./lib/tokenm.json$$$http://www.libvio.mov/$$$noproxy$$$1"}, + { + "key":"Youtube", + "name":"Youtube", + "type":3, + "api": "csp_Youtube", + "searchable": 1, + "quickSearch": 0, + "changeable": 0, + "timeout": 120, + "ext":{ + "token":"./lib/tokenm.json", + "json":"./lib/youtube.json", + "type":"直播#新闻#剧集#电影#综艺#纪录片#音乐#体育#动物#风光#放松#4K#HDR#movie#music#documentary#bbc documentary#national geographic documentary", + "keywords":"排行榜,HOT,TRENDS,热门话题,热门趋势,热门综艺,热门电影,热门电视剧,小姐姐", + "codecs":"", + "proxy":"proxy", + "danmu":true + }, + "style": { + "type": "rect", + "ratio": 1.77 + } + }, + {"key":"Guazi","name":"瓜子|App","type":3,"api":"csp_Guazi","quickSearch":1, "changeable":1, "filterable":1, "timeout":60, "ext":""}, + {"key":"Moli","name":"HDmoli|网盘","type":3,"api":"csp_Moli","quickSearch":1, "changeable":1, "filterable":1, "timeout":60, "ext":"./lib/tokenm.json$$$https://www.hdmoli.pro/$$$proxy$$$1$$$./lib/moli.json"}, + {"key":"ddys","name":"低端影视|网盘","type":3,"api":"csp_Ddys","quickSearch":1, "changeable":1, "filterable":1, "timeout":60, "ext":"./lib/tokenm.json$$$https://ddys.pro/$$$proxy$$$1$$$"}, + {"key":"美剧迷","name":"美剧迷|网盘","type":3,"api":"csp_Meijumi", "quickSearch":1, "changeable":1, "filterable":1, "timeout":120,"ext":"./lib/tokenm.json$$$https://www.meijumi.net/$$$proxy$$$1"}, + {"key":"WebDAV","name":"WebDAV[jar]","type":3,"api":"csp_WebDAV","searchable":1,"filterable":1,"changeable":1,"timeout":60, + "playerType": 2, + "ext":"./lib/webdav.json"}, + {"key":"AList","name":"网盘|Alist[jar]","type":3,"api":"csp_AList","searchable":1,"filterable":1,"changeable":1,"timeout":60, + "playerType": 2, + "ext":"./lib/alistjar.json"}, + {"key":"PushShare","name":"我的资源分享","type":3, "api":"csp_PushShare","searchable":1,"quickSearch":1, "changeable":1, "filterable":0, "timeout":60, "ext":"./lib/tokenm.json$$$./lib/pushshare.txt$$$db$$$1", + "style": { + "type": "list", + "ratio": 1.1 + } + }, + {"key":"AlistShare","name":"网盘分享合集","type":3,"api":"csp_AlistShare","searchable":1,"quickSearch":1, "changeable":1, "filterable":0, "timeout":120, "ext":"./lib/tokenm.json$$$null$$$proxy$$$1", + "style": { + "type": "list", + "ratio": 1.1 + } + }, + {"key":"AliShare","name":"阿里云盘影视分享","type":3,"api":"csp_AliShare","searchable":1,"quickSearch":1, "changeable":1, "filterable":0, "timeout":60, "ext":"./lib/tokenm.json$$$./lib/alishare.txt$$$db$$$1", + "style": { + "type": "list", + "ratio": 1.1 + } + }, + {"key":"AliShareEBook","name":"阿里云盘书籍分享","type":3,"api":"csp_AliShare","searchable":0,"quickSearch":0, "changeable":0, "filterable":0, "timeout":60, "ext":"./lib/tokenm.json$$$./lib/alishare.ebook.txt$$$db$$$1", + "style": { + "type": "list", + "ratio": 1.1 + } + }, + {"key":"QuarkShare","name":"夸克云盘分享","type":3,"api":"csp_QuarkShare","searchable":1,"quickSearch":0, "changeable":0, "filterable":0, "timeout":60, "ext":"./lib/tokenm.json$$$./lib/quarkshare.txt", + "style": { + "type": "list", + "ratio": 1.1 + } + }, + {"key":"123Share","name":"123云盘分享","type":3,"api":"csp_P123Share","searchable":1,"quickSearch":1, "changeable":0, "filterable":0, "timeout":120, "ext":"./lib/tokenm.json$$$./lib/123share.txt$$$db$$$1", + "style": { + "type": "list", + "ratio": 1.1 + } + }, + {"key":"189Share","name":"189云盘分享","type":3,"api":"csp_P189Share","searchable":1,"quickSearch":1, "changeable":0, "filterable":0, "timeout":120, "ext":"./lib/tokenm.json$$$./lib/189share.txt$$$db$$$1", + "style": { + "type": "list", + "ratio": 1.1 + } + }, + {"key":"ThunderShare","name":"迅雷云盘分享","type":3,"api":"csp_ThunderShare","searchable":1,"quickSearch":0, "changeable":0, "filterable":0, "timeout":60, "ext":"./lib/tokenm.json$$$./lib/thundershare.txt", + "style": { + "type": "list", + "ratio": 1.1 + } + }, + {"key":"UCShare","name":"UC云盘分享","type":3,"api":"csp_UCShare","searchable":1,"quickSearch":0, "changeable":0, "filterable":0, "timeout":60, "ext":"./lib/tokenm.json$$$./lib/ucshare.txt$$$db$$$1", + "style": { + "type": "list", + "ratio": 1.1 + } + }, + {"key":"115Share","name":"115云盘分享","type":3,"api":"csp_P115Share","searchable":1,"quickSearch":1, "changeable":0, "filterable":0, "timeout":120, "ext":"./lib/tokenm.json$$$./lib/115share.txt$$$db$$$1", + "style": { + "type": "list", + "ratio": 1.1 + } + }, + {"key":"PikPakShare","name":"PikPak分享","type":3,"api":"csp_PikPakShare","searchable":1,"quickSearch":1, "changeable":1, "filterable":0, "timeout":60, "ext":"./lib/tokenm.json$$$./lib/pikpakclass.json$$$./lib/pikpakclass.json.txt.gz", + "style": { + "type": "list", + "ratio": 1.1 + } + }, + {"key":"SambaShare","name":"Samba分享","type":3,"api":"csp_SambaShare","searchable":0,"quickSearch":0, "changeable":0, "filterable":0, "timeout":60, "ext":"./lib/tokenm.json$$$./lib/sambashare.txt"}, + {"key":"Hdhive","name":"鸟窝|网盘","type":3,"api":"csp_Hdh","quickSearch":1, "changeable":1, "filterable":1, "timeout":120, "ext":"./lib/tokenm.json$$$https://hdhive.com$$$noproxy$$$1$$$./lib/hdhive.txt"}, + {"key":"TianYiSou","name":"天逸搜|网盘搜索","type":3,"api":"csp_TianYiSou","quickSearch":1, "changeable":1, "filterable":1, "timeout":60, "ext":"./lib/tokenm.json$$$null$$$proxy"}, + {"key":"YunPan","name":"云盘资源|网盘","type":3,"api":"csp_YunPan","timeout":60, "ext":"./lib/tokenm.json$$$null$$$proxy$$$1"}, + {"key":"YingSo","name":"影搜|网盘搜索","type":3,"api":"csp_YingSo","timeout":60, "ext":"./lib/tokenm.json"}, + {"key":"混合盘","name":"混合盘|网盘搜索","type":3,"api":"csp_HunHePan","timeout":60, "ext":"./lib/tokenm.json", + "style": { + "type": "list", + "ratio": 1.1 + } + }, + {"key":"88Pan","name":"88网盘|网盘搜索","type":3,"api":"csp_EightEight","timeout":60, "ext":"./lib/tokenm.json$$$https://662688.xyz$$$", + "style": { + "type": "list", + "ratio": 1.1 + } + }, + {"key":"PanSearch","name":"PanSearch|网盘搜索","type":3,"api":"csp_PanSearch","quickSearch":1, "changeable":1, "filterable":1, "timeout":60, "ext":"./lib/tokenm.json$$$null$$$proxy"}, + {"key":"盘友圈","name":"盘友圈|网盘搜索","type":3,"api":"csp_Panyq","timeout":60, "ext":"./lib/tokenm.json$$$site$$$proxy"}, + {"key":"易搜","name":"易搜|网盘搜索","type":3,"api":"csp_YiSo","timeout":60, "ext":"./lib/tokenm.json$$$./lib/yiso.txt", + "style": { + "type": "list", + "ratio": 1.1 + } + }, + {"key":"秒搜","name":"秒搜|网盘搜索","type":3,"api":"csp_MiaoSou","timeout":60, "ext":"./lib/tokenm.json", + "style": { + "type": "list", + "ratio": 1.1 + } + }, + {"key":"Funletu","name":"趣盘搜|夸克搜索","type":3,"api":"csp_Funletu","quickSearch":1, "changeable":1, "filterable":1, "timeout":60, "ext":"./lib/tokenm.json", + "style": { + "type": "list", + "ratio": 1.1 + } + }, + {"key":"QuarkPanso","name":"夸克盘搜|夸克搜索","type":3,"api":"csp_QuarkPanso","quickSearch":1, "changeable":1, "filterable":1, "timeout":60, "ext":"./lib/tokenm.json", + "style": { + "type": "list", + "ratio": 1.1 + } + }, + {"key":"Panta","name":"盘Ta|网盘","type":3,"api":"csp_Panta","quickSearch":1, "changeable":1, "filterable":1, "timeout":60, "ext":"./lib/tokenm.json$$$https://www.91panta.cn/$$$null$$$1$$$./lib/panta.txt$$$PANTA", + "style": { + "type": "list", + "ratio": 1.1 + } + }, + {"key":"DaPanSo","name":"大盘搜|网盘搜索","type":3,"api":"csp_DaPanSo","quickSearch":1, "changeable":1, "filterable":1, "timeout":60, "ext":"./lib/tokenm.json$$$https://dapanso.com$$$proxy$$$1"}, + {"key":"PikaSo","name":"皮卡搜|网盘搜索","type":3,"api":"csp_PikaSo","quickSearch":1, "changeable":1, "filterable":1, "timeout":60, "ext":"./lib/tokenm.json$$$https://www.pikaso.top/$$$null", + "style": { + "type": "list", + "ratio": 1.1 + } + }, + {"key":"Qianfan","name":"千帆|网盘搜索","type":3,"api":"csp_Qianfan","quickSearch":1, "changeable":1, "filterable":1, "timeout":60, "ext":"./lib/tokenm.json$$$https://pan.qianfan.app$$$null$$$./lib/qianfan.txt$$$1"}, + {"key":"YunSo","name":"小云搜索|网盘搜索","type":3,"api":"csp_YunSo","quickSearch":1, "changeable":1, "filterable":1, "timeout":60, "ext":"./lib/tokenm.json$$$https://www.yunso.net$$$null$$$1", + "style": { + "type": "list", + "ratio": 1.1 + } + }, + {"key":"YunPanOne","name":"云盘One|网盘搜索","type":3,"api":"csp_YunPanOne","quickSearch":1, "changeable":1, "filterable":1, "timeout":60, "ext":"./lib/tokenm.json$$$null$$$proxy$$$1"}, + { + "key": "新6V", + "name": "新6V|网盘", + "type": 3, + "api": "csp_Xb6v", + "searchable": 1, + "changeable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$https://www.66ss.org$$$null$$$1" + }, + { + "key": "索尼资源", + "name": "索尼┃资源", + "type": 1, + "api": "https://suoniapi.com/api.php/provide/vod/from/snm3u8/", + "categories": [ + "动作片", + "喜剧片", + "爱情片", + "科幻片", + "恐怖片", + "剧情片", + "战争片", + "国产剧", + "欧美剧", + "韩剧", + "日剧", + "港剧", + "台剧", + "泰剧", + "海外剧", + "纪录片", + "大陆综艺", + "日韩综艺", + "港台综艺", + "欧美综艺", + "国产动漫", + "日韩动漫", + "欧美动漫", + "动画片", + "港台动漫", + "海外动漫", + "演唱会", + "体育赛事", + "篮球", + "足球", + "预告片", + "斯诺克", + "影视解说" + ], + "searchable": 1, + "quickSearch": 1 + }, + {"key":"UP云搜","name":"阿里|UP云搜","type":3,"api":"csp_UpYun","timeout":30, "ext":"./lib/tokenm.json", + "style": { + "type": "list", + "ratio": 1.1 + } + }, + {"key":"BLSGod","name":"BLSGod|磁","type":3,"api":"csp_BLSGod","changeable":1, "timeout":60}, + {"key":"SeedHub","name":"SeedHub|磁","type":3,"api":"csp_SeedHub","changeable":1, "timeout":60}, + { + "key": "ikun", + "name": "ikun", + "type": 1, + "api": "http://127.0.0.1:10079/p/0/proxy/https://ikunzyapi.com/api.php/provide/vod/?", + "playUrl": "json:http://127.0.0.1:10079/parse/?thread=0&proxy=proxy&url=", + "playerType":1, + "searchable": 1, + "changeable": 1 + }, + { + "key": "暴風", + "name": "暴風", + "type": 1, + "api": "http://127.0.0.1:10079/p/0/proxy/https://bfzyapi.com/api.php/provide/vod?", + "playUrl": "json:http://127.0.0.1:10079/parse/?thread=0&proxy=proxy&url=", + "searchable": 1, + "changeable": 1 + }, + { + "key": "索尼", + "name": "索尼 ", + "type": 1, + "api": "http://127.0.0.1:10079/p/0/proxy/https://suoniapi.com/api.php/provide/vod?", + "playUrl": "json:http://127.0.0.1:10079/parse/?thread=0&proxy=proxy&url=", + "searchable": 1, + "changeable": 1 + }, + { + "key": "量子", + "name": "量子", + "type": 1, + "api": "http://127.0.0.1:10079/p/0/proxy/http://cj.lziapi.com/api.php/provide/vod/?", + "playUrl": "json:http://127.0.0.1:10079/parse/?thread=0&proxy=proxy&url=", + "playerType":1, + "searchable": 1, + "changeable": 1 + }, + { + "key": "非凡", + "name": "非凡", + "type": 1, + "api": "http://127.0.0.1:10079/p/0/proxy/http://cj.ffzyapi.com/api.php/provide/vod/?", + "playUrl": "json:http://127.0.0.1:10079/parse/?thread=0&proxy=proxy&url=", + "playerType":1, + "searchable": 1, + "changeable": 1, + "categories": [ + "国产动漫", + "日韩动漫", + "国产剧", + "韩国剧", + "日本剧", + "电影片", + "连续剧", + "综艺片", + "动漫片", + "动作片", + "喜剧片", + "爱情片", + "科幻片", + "恐怖片", + "剧情片", + "战争片", + "香港剧", + "欧美剧", + "记录片", + "台湾剧", + "海外剧", + "泰国剧", + "大陆综艺", + "港台综艺", + "日韩综艺", + "欧美综艺", + "欧美动漫", + "港台动漫", + "海外动漫" + ] + }, + { + "key": "異界", + "name": "異界", + "type": 3, + "api": "csp_Ysj", + "searchable": 1, + "changeable": 0 + }, + {"key":"drpy_js_Alist","name":"网盘 | Alist[js]","type":3,"api":"./lib/alist.min.js","searchable":1,"filterable":1,"changeable":1,"ext":"./js/alist.json"}, + { + "key": "酷狗", + "name": "酷狗", + "type": 3, + "api": "csp_Kugou", + "searchable": 1, + "changeable": 0 + }, + { + "key": "Yinyuetai", + "name": "音悦台", + "type": 3, + "api": "csp_Yinyuetai", + "searchable": 1, + "changeable": 0 + }, + {"key": "push_agent","name": "推送","type": 3,"api": "csp_Push","changeable":0, "timeout":30, "ext":"./lib/tokenm.json"}, + { + "key": "應用商店", + "name": "應用商店", + "type": 3, + "api": "csp_Market", + "searchable": 0, + "changeable": 0, + "ext": "https://fm.t4tv.hz.cz/json/market.json" + }, + { + "key": "直播转点播", + "name": "🐼️┃电视┃直播", + "type": 3, + "searchable": 0, + "api": "./lib/live2vod.js", + "ext": "./lib/feimaolive.json" + } + ], + "lives":[ + { + "name": "最强国内直播(合并版)", + "type": 0, + "url": "http://127.0.0.1:10079/c/3600/null/http://127.0.0.1:35456/all.m3u", + "ua": "okhttp/3.15", + "epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}", + "logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png", + "catchup": { + "type": "append", + "source": "?livemode=4&starttime=${(b)yyyyMMdd'T'HHmm}00.00Z&endtime=${(e)yyyyMMdd'T'HHmm}00.00Z" + } + }, + { + "name": "最强国内直播", + "type": 0, + "url": "http://127.0.0.1:10079/c/3600/null/http://127.0.0.1:35456/tv.m3u", + "ua": "okhttp/3.15", + "epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}", + "logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png", + "catchup": { + "type": "append", + "source": "?livemode=4&starttime=${(b)yyyyMMdd'T'HHmm}00.00Z&endtime=${(e)yyyyMMdd'T'HHmm}00.00Z" + } + }, + { + "name": "最强国内直播(EPG-1天回看)", + "type": 0, + "url": "http://127.0.0.1:10079/c/3600/null/http://127.0.0.1:35456/tv.m3u", + "ua": "okhttp/3.15", + "epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date=DATE1SUB", + "logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png", + "catchup": { + "type": "append", + "source": "?livemode=4&starttime=${(b)yyyyMMdd'T'HHmm}00.00Z&endtime=${(e)yyyyMMdd'T'HHmm}00.00Z" + } + }, + { + "name": "FeiYang牧场", + "type": 0, + "url": "http://sub.ottiptv.cc/iptv.m3u", + "ua": "okHttp/Mod-1.3.0.0", + "epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date=DATE1SUB", + "logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png", + "catchup": { + "type": "append", + "source": "?livemode=4&starttime=${(b)yyyyMMdd'T'HHmm}00.00Z&endtime=${(e)yyyyMMdd'T'HHmm}00.00Z" + } + }, + { + "name": "BJYD", + "type": 0, + "url": "http://127.0.0.1:10079/c/3600/null/http://127.0.0.1:35456/bjyd.m3u", + "ua": "okhttp/3.15", + "epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}", + "logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png", + "catchup": { + "type": "append", + "source": "?livemode=4&starttime=${(b)yyyyMMdd'T'HHmm}00.00Z&endtime=${(e)yyyyMMdd'T'HHmm}00.00Z" + } + }, + { + "name": "BJYD(EPG-1天回看)", + "type": 0, + "url": "http://127.0.0.1:10079/c/3600/null/http://127.0.0.1:35456/bjyd.m3u", + "ua": "okhttp/3.15", + "epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date=DATE1SUB", + "logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png", + "catchup": { + "type": "append", + "source": "?livemode=4&starttime=${(b)yyyyMMdd'T'HHmm}00.00Z&endtime=${(e)yyyyMMdd'T'HHmm}00.00Z" + } + }, + { + "name": "BJYD(EPG-2天回看)", + "type": 0, + "url": "http://127.0.0.1:10079/c/3600/null/http://127.0.0.1:35456/bjyd.m3u", + "ua": "okhttp/3.15", + "epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date=DATE2SUB", + "logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png", + "catchup": { + "type": "append", + "source": "?livemode=4&starttime=${(b)yyyyMMdd'T'HHmm}00.00Z&endtime=${(e)yyyyMMdd'T'HHmm}00.00Z" + } + }, + { + "name": "BJYD(EPG-3天回看)", + "type": 0, + "url": "http://127.0.0.1:10079/c/3600/null/http://127.0.0.1:35456/bjyd.m3u", + "ua": "okhttp/3.15", + "epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date=DATE3SUB", + "logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png", + "catchup": { + "type": "append", + "source": "?livemode=4&starttime=${(b)yyyyMMdd'T'HHmm}00.00Z&endtime=${(e)yyyyMMdd'T'HHmm}00.00Z" + } + }, + { + "name": "BIPTV(IPV6,可回看)", + "type": 0, + "url": "./lib/biptv.txt", + "ua": "okhttp/3.15", + "epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}", + "logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png" + }, + { + "name": "PandaGo投屏直播接收记录", + "type": 0, + "url": "http://127.0.0.1:10079/dlnam3u/tv.m3u", + "ua": "okhttp/3.15.", + "epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}", + "logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png" + }, + { + "name": "FMM.m3u", + "type": 0, + "url": "http://127.0.0.1:10079/c/3600/proxy/https://raw.githubusercontent.com/fanmingming/live/refs/heads/main/tv/m3u/ipv6.m3u", + + "ua": "okhttp/3.15", + "epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}", + "logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png" + }, + { + "name": "FMM.m3u.音质增强", + "type": 0, + "url": "http://127.0.0.1:10079/mp4/3600/proxy/https://raw.githubusercontent.com/fanmingming/live/refs/heads/main/tv/m3u/ipv6.m3u", + + "ua": "okhttp/3.15", + "epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}", + "logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png" + }, + { + "name": "肥羊TX赛事直播", + "type": 0, + "url": "http://127.0.0.1:10079/c/60/null/http://127.0.0.1:35456/txevent.m3u", + "ua": "okhttp/3.15", + "epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}", + "logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png" + }, + { + "name": "肥羊QY赛事直播", + "type": 0, + "url": "http://127.0.0.1:10079/c/60/null/http://127.0.0.1:35456/iqyevent.m3u", + "ua": "okhttp/3.15", + "epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}", + "logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png" + }, + { + "name": "肥羊B站直播", + "type": 0, + "url": "http://127.0.0.1:10079/c/3600/null/http://127.0.0.1:35456/bililive.m3u", + "ua": "okhttp/3.15", + "epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}", + "logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png" + }, + { + "name": "肥羊B站直播.音质增强", + "type": 0, + "url": "http://127.0.0.1:10079/mp4/3600/null/http://127.0.0.1:35456/bililive.m3u", + "ua": "okhttp/3.15", + "epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}", + "logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png" + }, + { + "name": "肥羊虎牙一起看", + "type": 0, + "url": "http://127.0.0.1:10079/c/3600/null/http://127.0.0.1:35456/huyayqk.m3u", + "ua": "okhttp/3.15", + "epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}", + "logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png" + }, + { + "name": "肥羊虎牙一起看.音质增强", + "type": 0, + "url": "http://127.0.0.1:10079/mp4/3600/null/http://127.0.0.1:35456/huyayqk.m3u", + "ua": "okhttp/3.15", + "epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}", + "logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png" + }, + { + "name": "肥羊斗鱼一起看", + "type": 0, + "url": "http://127.0.0.1:10079/c/3600/null/http://127.0.0.1:35456/douyuyqk.m3u", + "ua": "okhttp/3.15", + "epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}", + "logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png" + }, + { + "name": "肥羊斗鱼一起看.音质增强", + "type": 0, + "url": "http://127.0.0.1:10079/mp4/3600/null/http://127.0.0.1:35456/douyuyqk.m3u", + "ua": "okhttp/3.15", + "epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}", + "logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png" + }, + { + "name": "肥羊YY轮播", + "type": 0, + "url": "http://127.0.0.1:10079/c/3600/null/http://127.0.0.1:35456/yylunbo.m3u", + "ua": "okhttp/3.15", + "epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}", + "logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png" + }, + { + "name": "YTB直播", + "type": 0, + "url": "./lib/ytblive.m3u", + "ua": "okhttp/3.15", + "epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}", + "logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png" + }, + { + "name": "AKTV.电视直播", + "type": 0, + "url": "http://aktv.top/live.m3u", + "ua": "okhttp/3.15", + "epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}", + "logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png" + }, + { + "name": "Gather.电视直播", + "type": 0, + "url": "https://tv.iill.top/m3u/Gather", + "ua": "okhttp/3.15", + "epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}", + "logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png" + }, + { + "name": "Gather.网络直播", + "type": 0, + "url": "https://tv.iill.top/m3u/Live", + "ua": "okhttp/3.15", + "epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}", + "logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png" + }, + { + "name": "FMM.txt", + "type": 0, + "url": "http://127.0.0.1:10079/c/3600/proxy/https://fanmingming.com/txt?url=https://live.fanmingming.cn/tv/m3u/ipv6.m3u", + + "ua": "okhttp/3.15", + "epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}", + "logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png" + }, + { + "name": "zouming.ipv6", + "type": 0, + "url": "http://127.0.0.1:10079/c/3600/proxy/http://ww.zouming.com/ipv6.txt", + "ua": "okhttp/3.15", + "epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}", + "logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png" + }, + { + "name": "YTLive", + "type": 0, + + "url": "./lib/yo21.txt" + }, + { + "group":"redirect", + "channels":[ + { + "name":"redirect", + "urls":[ + "proxy://do=live&type=live&proxy=&url=" + ] + } + ] + } + ], + "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" + ] + } + ], + "proxy": [ + "raw.githubusercontent.com", + "googlevideo.com", + "cdn.v82u1l.com", + "cdn.iz8qkg.com", + "cdn.kin6c1.com", + "c.biggggg.com", + "c.olddddd.com", + "haiwaikan.com", + "www.histar.tv", + "youtube.com", + "uhibo.com", + ".*boku.*", + ".*nivod.*", + ".*ulivetv.*" + ], + "hosts": [ + "cache.ott.ystenlive.itv.cmvideo.cn=base-v4-free-mghy.e.cdn.chinamobile.com", + "cache.ott.bestlive.itv.cmvideo.cn=base-v4-free-mghy.e.cdn.chinamobile.com", + "cache.ott.wasulive.itv.cmvideo.cn=base-v4-free-mghy.e.cdn.chinamobile.com", + "cache.ott.fifalive.itv.cmvideo.cn=base-v4-free-mghy.e.cdn.chinamobile.com", + "cache.ott.hnbblive.itv.cmvideo.cn=base-v4-free-mghy.e.cdn.chinamobile.com" + ], + "rules":[ + { + "name": "proxy", + "hosts": [ + "raw.githubusercontent.com", + "googlevideo.com", + "cdn.v82u1l.com", + "cdn.iz8qkg.com", + "cdn.kin6c1.com", + "c.biggggg.com", + "c.olddddd.com", + "haiwaikan.com", + "www.histar.tv", + "youtube.com", + "uhibo.com", + ".*boku.*", + ".*nivod.*", + "*.t4tv.hz.cz", + ".*ulivetv.*" + ] + }, + {"host":"www.djuu.com","rule":["mp4.djuu.com","m4a"]},{"host":"www.sharenice.net","rule":["huoshan.com","/item/video/"],"filter":[]}, + {"host":"www.sharenice.net","rule":["sovv.qianpailive.com","vid="],"filter":[]}, + {"host":"www.sharenice.net","rule":["douyin.com","/play/"]}, + {"host":"m.ysxs8.vip","rule":["ysting.ysxs8.vip:81","xmcdn.com"],"filter":[]}, + {"host":"hdmoli.com","rule":[".m3u8"]},{"host":"https://api.live.bilibili.com","rule":["bilivideo.com","/index.m3u8"],"filter":["data.bilibili.com/log/web","i0.hdslb.com/bfs/live/"]}, + {"host":"www.agemys.cc","rule":["cdn-tos","obj/tos-cn"]}, + {"host":"www.fun4k.com","rule":["https://hd.ijycnd.com/play","index.m3u8"]}, + {"host":"zjmiao.com","rule":["play.videomiao.vip/API.php","time=","key=","path="]}, + { + "name": "火山嗅探", + "hosts": [ + "huoshan.com" + ], + "regex": [ + "item_id=" + ] + }, + { + "name": "抖音嗅探", + "hosts": [ + "douyin.com" + ], + "regex": [ + "is_play_url=" + ] + }, + { + "name": "農民嗅探", + "hosts": [ + "toutiaovod.com" + ], + "regex": [ + "video/tos/cn" + ] + }, + { + "name": "夜市", + "hosts": [ + "yeslivetv.com" + ], + "script": [ + "document.getElementsByClassName('vjs-big-play-button')[0].click()" + ] + }, + { + "name": "毛驢", + "hosts": [ + "www.maolvys.com" + ], + "script": [ + "document.getElementsByClassName('swal-button swal-button--confirm')[0].click()" + ] + }, + { + "name": "磁力广告", + "hosts": [ + "magnet" + ], + "regex": [ + "更多", + "社 區", + "x u u", + "最 新", + "直 播", + "更 新", + "社 区", + "有 趣", + "英皇体育", + "全中文AV在线", + "澳门皇冠赌场", + "哥哥快来", + "美女荷官", + "裸聊", + "新片首发", + "UUE29" + ] + } + ], + "parses": [ + ], + "flags":["youku","qq","iqiyi","qiyi","letv","sohu","tudou","pptv","mgtv","wasu"], + "wallpaper": "http://饭太硬.top/深色壁纸/api.php", + "disabled_wallpaper":"http://www.kf666888.cn/api/tvbox/img" +} diff --git a/lib/115share.txt b/lib/115share.txt new file mode 100644 index 0000000..b621e28 --- /dev/null +++ b/lib/115share.txt @@ -0,0 +1,673 @@ +self 我的115网盘 1 +sw6pw793wfp?password=w816 小雅|4KRemux +sw68fuu3nnw?password=pb57 小雅|电影1080P +swzew4m3nc6?password=i0d7 小雅|电影|原盘 +swhid5x3wfa?password=xdf9 小雅|电影|韩国原盘 +swh3rih3wfa?password=g512 小雅|电影|台湾原盘 +swhbfy33wfa?password=a372 小雅|电影|香港原盘 +swhbs4r3zh9?password=ec38 小雅|电影|UHD原盘 +sw68wz93ncb?password=6666 小雅|欧美电影 +sw6plt23ncb?password=6666 小雅|美剧 +swznm373w1p?password=pe35 小雅|欧美剧 +swzg8dd3wye?password=m5b3 小雅|日韩电影 +swzjxcp3wfa?password=of89 小雅|日韩剧 +sw68e813nnw?password=n9e0 小雅|电视剧 +swzyiww3wn9?password=w1e0 小雅|合集1 +swzyiwq3wn9?password=x716 小雅|合集2 +swzyiwb3wn9?password=qfe8 小雅|合集3 +swz6gml3fwo?password=8888 小雅|动画电影 +swzqh673h4y?password=5296 小雅|千部抖音短剧合集 +swzx76f3wfa?password=n724 小雅|抖音短剧合集1.77T +swzmqcr3fs6?password=xd67 小雅|音乐22万首 +sw658uq36x2?password=md98 小雅|音乐22万首|DDS+HiRes +sw658uq36x2?password=md98 小雅|音乐22万首|母带系列 +sw658uq36x2?password=md98 小雅|音乐22万首|索尼精选 +sw658uq36x2?password=md98 小雅|音乐22万首|各类风格 +sw658ub36x2?password=q7e0 小雅|音乐22万首|华语27000首无损 +swz93883nhj?password=sa53 豆瓣|TOP250电影_1.67TB 1 +swz8h1h33xj?password=0000 豆瓣|TOP250电影_12.65Tb 1 +swz18wn3zh9?password=yf61 演唱会|演唱会原盘_820T 1 +sw6udf93wcx?password=na63 演唱会|演唱会_蓝光原盘22TB +swzg9pt3wye?password=c899 演唱会|演唱会_重编码6TB +swz6sow3fwo?password=8888 演唱会|1080P港台演唱会【2.55T】 +swz6si63fwo?password=8888 演唱会|演唱会【13T】 +swz9yva3hi8?password=m332 REMUX|2267部2160p_remux_FGT_101.32TB 1 +sw6e6ij3flt?password=t055 REMUX|4K_REMUX_774部_41.16T +swz6gd93fwo?password=8888 REMUX|4K_REMUX电影2257部 1 +swzn5913wzq?password=nbc5 REMUX|969部部欧美4K原盘电影_45.03T +swzzmu33hi8?password=i5e0 REMUX|无损REMUX电影_101.32TB 1 +swh9ej13zmi?password=50io 原盘|BD-ISO_3.29PB 1 +swzc37p3zh9?password=f534 原盘|1080P蓝光电影_220T 1 +sw68b0u3hhq?password=gd41 原盘|蓝光原盘_666.3T 1 +swz6gp53fwo?password=8888 原盘|蓝光原盘_646T_合集 1 +sw620dv3wzn?password=e536 原盘|sGNB特效字幕原盘_313部_21.18T +sw6u87633jp?password=u527 原盘|sGNB特效字幕原盘_315部_21.52T 1 +swhbs4r3zh9?password=ec38 原盘|UHD原盘iso_145.3TB 1 +sw6e6i13flt?password=f794 原盘|4K原盘_16.94T +sw3uax136w4?password=eea6 原盘|CMCT迷你蓝光原盘_2.81T +sw69nao3h3b?password=a548 原盘|港片蓝光原盘669部_16.3T +swnmisp3wxf?password=i1c6 原盘|剧集原盘_23.3T +swznmd03nc7?password=p897 原盘|动漫原盘_40.49T +sw313rp3zx1?password=w146 原盘|SGNB特效字幕蓝光原盘563部_26.52TB +swzg3ja33xj?password=f3h5 原盘|FRDS站396部_8.87TB +sw6ug2k3nom?password=t7d0 原盘|香港电影_香港蓝光高清粤语电影合集1242部_(16T) +sw62cfo3z23?password=ze90 原盘|3D电影_68.26T +swzm4z63697?password=6688 大包|FRDS电视剧大包 1 +swzew4m3nc6?password=i0d7 大包|2.24pb大包 1 +swzawra3zx1?password=scf1 大包|1.6pb大合集 1 +swz3ys93wzv?password=rc12 电影|电影频道3300部_16.33T +swnrb3b3nat?password=pd76 电影|亚洲1080P_9.33T +swz8hp033xj?password=0000 电影|多部曲电影系列_21TB +swzj12t3znw?password=tff8 电影|未分类电影_4.65TB +sw6uh9x3z2b?password=6666 电影|未分类电影_1620TB +swzgep23wye?password=c106 电影|大陆电影_6TB +swzg8dd3wye?password=m5b3 电影|日韩电影_6TB +sw60fyp33eb?password=lcd6 排行|豆瓣2022影视排行榜_1.51T +sw6tco83hbe?password=v517 排行|2021豆瓣年度影视榜单_832.64G +sw6tcot3hbe?password=e9d7 排行|2022必看最热门影视剧十部_620.84G +swzplko3wye?password=k596 欧美电影|合集_22TB +swzj2cx3h4y?password=g180 欧美电影|漫威宇宙系列_1.87TB +swz936a3znw?password=a0d3 欧美电影|指环王系列_300GB +swz93n63z57?password=dda3 欧美电影|变形金刚_500GB +sw629ie3nli?password=d5c7 NetFlix_6.17T +sw6tco93hbe?password=ka54 剧集|TVB电视剧合集650部_74.3T +swznm373w1p?password=pe35 剧集|欧美剧_60.9T 1 +swnsdrk3h2m?password=p783 剧集|海贼王_553.61G +swntmxc3wp6?password=a3f5 剧集|皇家师姐系列 +swnsdrm3h2m?password=fea2 剧集|火影忍者全集_455.42G +swzn9y13zwh?password=crow 剧集|老友记全十季_594.26G +sw6q9w833o2?password=a956 剧集|柯南_766.64G +sw6p2t63h2m?password=oea1 剧集|迷失1-6季_203.3G +swz826g3nc0?password=ff47 剧集|甜蜜家园_Season_3 +swztlnh33xj?password=f3h5 剧集|行尸走肉全季杜比 +swz6fb3369v?password=9999 香港|GOTV_10.46TB +swzsehq3ncb?password=5566 香港|合集8.23TB +swz9lr83w8f?password=oc53 香港|杜琪峰(银河映像系列) +swzdtjc3nb4?password=ef97 香港|成龙 +sw30v4b3zu2?password=a429 香港|林正英电影合集46部_209.13G +swz8cd233xj?password=0000 香港|满清十大酷刑第一部 +sw6gqo43flt?password=qc62 香港|周星驰系列_854.96G +swzdtj93nb4?password=d6c3 香港|周星驰 +swzv6533697?password=2618 日韩剧|合集18.12TB +swzah0d3wvk?password=c142 国产剧|合集_51.41TB +swz8t9x3h5k?password=n3f4 国产剧|【繁花_翡翠台源_100GB】 +swz93y53zp0?password=ef25 国产剧|【唐朝诡事录_全2季】 +sw6u7zc3fwo?password=8888 国产剧|【陈情令】_(2019)_50集全_4K中字【86G】 +sw6u7ep3fwo?password=8888 国产剧|【隐秘的角落】(2020)_12集全_4K中字【69G】 +sw6u78w3fwo?password=8888 国产剧|【庆余年】(2019)_46集全_4K中字【62G】 +sw6u79l3fwo?password=8888 国产剧|【沉默的真相】(2020)_12集全_4K中字【17G】 +sw6u79p3fwo?password=8888 国产剧|【斗罗大陆】(2021)_40集全_1080P中字【46G】 +sw6u72q3fwo?password=8888 国产剧|【开端】(2022)_15集全_4K中字【58G】 +sw6u72m3fwo?password=8888 国产剧|【狂飙】(2023)_39集全_4K中字【77G】 +sw6u7u33fwo?password=8888 国产剧|【漫长的季节】(2023)_12集全_4K中字【36G】 +sw6ukxa3fwo?password=8888 国产剧|【梦华录】(2022)_40集全_4K中字【148G】 +sw6uil53fwo?password=8888 国产剧|【琅琊榜】(2015)_54集全_4K中字【80G】 +sw6u42s3fwo?password=8888 国产剧|【苍兰诀】(2022)_36集全_4K中字【42G】 +sw6u42b3fwo?password=8888 国产剧|【后宫·甄嬛传】(2011)_76集全_4K中字【490G】 +sw6ugfa3fwo?password=8888 国产剧|【山河令】36集全_4K中字【87G】 +sw6ugfj3fwo?password=8888 国产剧|【沉香如屑·沉香重华】_(2022)_59集全_4K中字【125G】 +sw6ugl73fwo?password=8888 国产剧|【星汉灿烂·月升沧海】56集全_4K画质【71G】 +sw6ugoj3fwo?password=8888 国产剧|【武林外传】(2006)_81集全_4K中字【104GB】 +sw6ugkc3fwo?password=8888 国产剧|【白夜追凶】(2017)_32集全_4K中字【257G】 +sw6utz93fwo?password=8888 国产剧|【知否知否应是绿肥红瘦】(2018)_73集全_4K中字【119G】 +sw6utfi3fwo?password=8888 国产剧|【莲花楼】(2023)_40集全_4K中字【52G】 +sw6utft3fwo?password=8888 国产剧|【香蜜沉沉烬如霜】(2018)_60集全_4K中字【119G】 +sw6utts3fwo?password=8888 国产剧|【觉醒年代】(2021)_43集全_4K中字【86G】 +sw6ut8p3fwo?password=8888 国产剧|【长安十二时辰】(2019)_48集全_4K中字【46G】 +sw6ut8j3fwo?password=8888 国产剧|【你是我的荣耀】(2021)_32集全_4K中字【41G】 +sw6ujon3fwo?password=8888 国产剧|【亲爱的,热爱的】(2019)_41集全_4K中字【59G】 +sw6u0rm3fwo?password=8888 国产剧|【人民的名义】(2017)_55集全_4K中字【118G】 +sw6u0px3fwo?password=8888 国产剧|【三体】(2023)_4K中字【21G】 +sw6u0tb3fwo?password=8888 国产剧|【我的人间烟火】(2023)_40集全_1080P中字【45G】 +sw6u01o3fwo?password=8888 国产剧|【山海情】(2021)_4K中字【33G】 +sw6u01x3fwo?password=8888 国产剧|【你微笑时很美】(2021)_31集全_4K中字【54G】 +sw6uupp3fwo?password=8888 国产剧|【延禧攻略】(2018)_70集全_4K中字【123G】 +sw6uujx3fwo?password=8888 国产剧|【有翡】_(2020)_51集全_1080P中字【72G】 +sw6uu063fwo?password=8888 国产剧|【最好的我们】(2016)_24集全_4K中字【24G】 +swz36yf3fwo?password=8888 国产剧|【风吹半夏】(2022)_36集全_4K中字【77G】 +swz36ye3fwo?password=8888 国产剧|【余生,请多指教】(2022)_29集全_1080P种子【15G】 +swz36yt3fwo?password=8888 国产剧|【传闻中的陈芊芊】(2020)_24集全_4K中字【29G】 +swz36ka3fwo?password=8888 国产剧|【扫黑风暴】(2021)_28集全_1080P中字【31G】 +swz36dx3fwo?password=8888 国产剧|【狼殿下】(2020)_49集全_4K中字【88G】 +swz36m63fwo?password=8888 国产剧|【仙剑奇侠传三】(2009)_37集全_4K中字【137G】 +swz36me3fwo?password=8888 国产剧|【长相思】(2023)_39集全_4K中字【38G】 +swz36m03fwo?password=8888 国产剧|【锦衣之下】(2019)_55集全_4K中字【80G】 +swz365l3fwo?password=8888 国产剧|【琉璃】(2020)_59集全_4K中字【194G】 +swz36543fwo?password=8888 国产剧|【长月烬明】(2023)_40集全_4K中字【95G】 +swz365x3fwo?password=8888 国产剧|【都挺好】(2019)_46集全_4K中字【84G】 +swz36v63fwo?password=8888 国产剧|【龙岭迷窟】(2020)_18集全_4K中字【21G】 +swz3hop3fwo?password=8888 国产剧|【父母爱情】(2014)_44集全_4K中字【61G】 +swz3hks3fwo?password=8888 国产剧|【御赐小仵作】(2021)_20集36集双版本_1080P【101G】 +swz3hk73fwo?password=8888 国产剧|【仙剑奇侠传】34集全_1080P中字【24G】 +swz3hkj3fwo?password=8888 国产剧|【三生三世枕上书】(2020)_56集全_4K中字【82G】 +swz3h5j3fwo?password=8888 国产剧|【三生三世十里桃花】(2017)_58集全_4K中字【146G】 +swz3sf73fwo?password=8888 国产剧|【伪装者】(2015)_41集全_4K中字【43G】 +swz3sf43fwo?password=8888 国产剧|【4K修复】【西游记+续集】【218G】 +swz3sfv3fwo?password=8888 国产剧|【猎罪图鉴】(2022)全20集_4K中字 +swz3slh3fwo?password=8888 国产剧|【长歌行】(2021)_49集全_1080P中字【66G】 +swz3s4x3fwo?password=8888 国产剧|【爱情公寓】1-5季_全集+番外篇+大电影_4K中字【203G】 +swz3s403fwo?password=8888 国产剧|【小欢喜】(2019)_49集全_4K中字【75G】 +swz3skd3fwo?password=8888 国产剧|【重启之极海听雷】第一季_(2020)_4K中字【172G】 +swz3skm3fwo?password=8888 国产剧|【重启之极海听雷】第二季_(2020)_4K中字【42G】 +swz3sdn3fwo?password=8888 国产剧|【摩天大楼】(2020)_16集全_4K中字【62G】 +swz3sde3fwo?password=8888 国产剧|【无证之罪】(2017)_12集全_4K中字【17G】 +swz3smy3fwo?password=8888 国产剧|【如懿传】(2018)_87集全_1080P中字【194G】 +swz3sai3fwo?password=8888 国产剧|【步步惊心】(2011)_35集全_4K中字【101G】 +swz3sag3fwo?password=8888 国产剧|【我是余欢水】(2020)_12集全_4K中字【77G】 +swz3spn3fwo?password=8888 国产剧|【去有风的地方】(2023)_40集全_4K中字【101G】 +swz3lbp3fwo?password=8888 国产剧|【梦中的那片海】(2023)_38集全_4K中字【24G】 +swz3lob3fwo?password=8888 国产剧|【欢乐颂】1-4季_1080P中字【156G】 +swz3lok3fwo?password=8888 国产剧|【棋魂】(2020)_36集全_4K中字【210G】 +swz3qos3fwo?password=8888 国产剧|【叛逆者】(2021)_43集全_4K中字【49G】 +swz3qas3fwo?password=8888 国产剧|【以家人之名】(2020)_40集全_1080P中字【47G】 +swz3bge3fwo?password=8888 国产剧|【唐人街探案】(2020)_12集全_4K中字【18G】 +swz6syq3fwo?password=8888 国产剧|【警察荣誉】38集全_4K中字【57G】 +swz6sk93fwo?password=8888 国产剧|【三十而已】(2020)_43集全_1080P中字【41G】 +swz6sdq3fwo?password=8888 国产剧|【玉骨遥】40集全_4K中字【60G】 +swz6sd73fwo?password=8888 国产剧|【爱很美味】(2021)_20集全_4K中字【8.6G】 +swz6smb3fwo?password=8888 国产剧|【司藤】30集全_4K中字【74G】 +swz6smv3fwo?password=8888 国产剧|【赘婿】36集全_4K中字【54G】 +swz6s5n3fwo?password=8888 国产剧|【终极笔记】(2020)_36集全_4K中字【178G】 +swz6s5l3fwo?password=8888 国产剧|【人世间】(2022)_58集全_4K中字【63G】 +swz6s5e3fwo?password=8888 国产剧|【周生如故】(2021)_24集全_1080P中字【15G】 +swz6s2r3fwo?password=8888 国产剧|【战长沙】(2014)_32集全_1080P中字【111G】 +swz6lz23fwo?password=8888 国产剧|【你好,旧时光】(2017)_30集全_4K中字【80G】 +swz6lhb3fwo?password=8888 国产剧|【风起洛阳】(2021)_39集全_4K中字【43G】 +swz6lfp3fwo?password=8888 国产剧|【潜伏】(2008)_30集全_4K中字【41G】 +swz6ls73fwo?password=8888 国产剧|【东宫】(2019)_52集全_4K中字【119G】 +swz6lsc3fwo?password=8888 国产剧|【幸福到万家】(2022)_40集全_4K中字【64G】 +swz6lql3fwo?password=8888 国产剧|【红楼梦】(1987)_36集全_4K中字【42G】 +swz6lqe3fwo?password=8888 国产剧|【还珠格格】1-3季全_1080P中字【141G】 +swz6l753fwo?password=8888 国产剧|【鬼吹灯之精绝古城】(2016)_21集全_1080P中字【16G】 +swz6liq3fwo?password=8888 国产剧|【亮剑】(2005)_30集全_4K中字【35G】 +swz6lic3fwo?password=8888 国产剧|【大宋少年志】1-2季全_4K中字【139G】 +swz6l453fwo?password=8888 国产剧|【唐朝诡事录】(2022)_36集全_4K中字【51G】 +swz6l483fwo?password=8888 国产剧|【卿卿日常】(2022)_40集全_4K中字【79G】 +swz6lkf3fwo?password=8888 国产剧|【微微一笑很倾城】(2016)_30集全_1080P中字【22G】 +swz6lmu3fwo?password=8888 国产剧|【爱情公寓】1-5季+番外1-3季_4K中字【200G】 +swz6l5a3fwo?password=8888 国产剧|【宸汐缘】(2019)_60集全_4K中字【96G】 +swz6lve3fwo?password=8888 国产剧|【大明王朝1566】(2007)_46集全_1080P中字【30G】 +swz6lew3fwo?password=8888 国产剧|【河神】1-2季全_4K中字【51G】 +swz6lar3fwo?password=8888 国产剧|【大江大河】(2018)_47集全_4K中字【52G】 +swz6lpo3fwo?password=8888 国产剧|【女心理师】(2021)_40集全_4K中字【68G】 +swz6lus3fwo?password=8888 国产剧|【大明王朝1566】(2007)_46集全_4K中字【250G】 +swz6b2y3fwo?password=8888 国产剧|【我在他乡挺好的】(2021)_12集全_1080P中字【30G】 +swz6o6q3fwo?password=8888 国产剧|【余罪】1-2季全_1080P中字【19.5G】 +swz6ooq3fwo?password=8888 国产剧|【士兵突击】(2006)_30集全_4K中字【45G】 +swz6oyp3fwo?password=8888 国产剧|【天盛长歌】(2018)_70集全_4K中字【132G】 +swz6k9q3fwo?password=8888 国产剧|【与君初相识·恰似故人归】(2022)_42集全_4K中字【101G】 +swz6doo3fwo?password=8888 国产剧|【谁是凶手】(2021)_16集全_4K中字【18G】 +swz3qvq3fwo?password=8888 美剧|_冰与火之歌:权力的游戏【1-8季全1.31TB】 +sw6uoem3fwo?password=8888 美剧|【冰与火之歌:权力的游戏】1-8季全_4K中字杜比视界【1.85T】 +sw6u7iy3fwo?password=8888 美剧|【神探夏洛克】1-4季全_1080P中字【78G】 +sw6uotq3fwo?password=8888 美剧|【绝命毒师】1-5季全_4K中字【209G】 +sw6u7n93fwo?password=8888 美剧|【怪奇物语】1-4季_4K中字【255G】 +sw6u7y83fwo?password=8888 美剧|【老友记】1-10季全_1080P中字【209G】 +sw6u75u3fwo?password=8888 美剧|【生活大爆炸】1-12季全_1080P中字【258G】 +sw6u7es3fwo?password=8888 美剧|【行尸走肉】1-11季全_1080P中字【585G】 +swztlnh33xj?password=f3h5 美剧|【行尸走肉】1-11季全_REMUX【1.27TB】 +sw6u7tp3fwo?password=8888 美剧|【切尔诺贝利】5集全_1080P中字【13G】 +sw6u78c3fwo?password=8888 美剧|【黑镜】1-6季全_4K中字【144G】 +sw6u79h3fwo?password=8888 美剧|【后翼弃兵】(2020)_7集全_4K中字【57G】 +sw6uify3fwo?password=8888 美剧|【越狱】1-5季全+特别篇_1080P中字【182G】 +sw6u4vy3fwo?password=8888 美剧|【真探】1-3季全_1080P中字【29G】 +sw6u4j73fwo?password=8888 美剧|【嗜血法医】1-9季全_1080P中字【246G】 +sw6u4963fwo?password=8888 美剧|【黑袍纠察队】1-3季_4K中字【182G】 +sw6u41k3fwo?password=8888 美剧|【风骚律师】1-6季全_4K中字【275G】 +sw6u4c93fwo?password=8888 美剧|【纸牌屋】1-6季全_4K中字【284G】 +sw6u42n3fwo?password=8888 美剧|【浴血黑帮】1-6季全_4K中字【162G】 +sw6u42v3fwo?password=8888 美剧|【曼达洛人】1-3集全_4K中字【136G】 +swzjpfq3wrb?password=s8f0 美剧|【迷失】1-6季全_1080P中字【108G】 +sw6uakw3fwo?password=8888 美剧|【猎魔人】1-3季_4K中字【139G】 +sw6uakm3fwo?password=8888 美剧|【性爱自修室】1-4季_4K中字【193G】 +sw6uadf3fwo?password=8888 美剧|【最后生还者】第一季_4K中字【67G】 +sw6uadk3fwo?password=8888 美剧|_【致命女人】1-2季_1080P中字【29G】 +sw6uaji3fwo?password=8888 美剧|【西部世界】1-4季_4K中字【445G】 +sw6ua2t3fwo?password=8888 美剧|【办公室】1-9季全_1080P中字【200G】 +sw6ug3k3fwo?password=8888 美剧|【老爸老妈的浪漫史】1-9季全_1080P中字【273G】 +swzj8g33wrb?password=z6d8 美剧|【兄弟连】10集全_1080P中字【177.6G】 +swzj8au3wrb?password=i050 美剧|【太平洋战争】10集全_1080P中字【122G】 +sw6ugsb3fwo?password=8888 美剧|【维京传奇】1-6季全_1080P中字【137G】 +sw6ugln3fwo?password=8888 美剧|【旺达幻视】9集全_4K中字【46G】 +sw6ug5r3fwo?password=8888 美剧|【摩登家庭】1-11季_1080P中字【298G】 +sw6up8u3fwo?password=8888 美剧|【纸钞屋】1-5季全_1080P中字【46G】 +sw6upun3fwo?password=8888 美剧|【毒枭】1-3季全_4K中字【180G】 +sw6utzo3fwo?password=8888 美剧|【去他的世界】1-2季_4K中字【35G】 +sw6uty43fwo?password=8888 美剧|【暗黑】1-3季全_4K中字【69G】 +sw6uttz3fwo?password=8888 美剧|【夜魔侠】1-3季全_4K中字【204G】 +sw6ujls3fwo?password=8888 美剧|【洛基】第一季_4K中字【22G】 +sw6ujoa3fwo?password=8888 美剧|【星期三】第一季_4K中字【33G】 +sw6uxg53fwo?password=8888 美剧|【豪斯医生】1-8季全_1080P中字【222G】 +sw6u0df3fwo?password=8888 美剧|【迷离时空(原版)】1-5季全_1080P中字【308G】 +sw6u0m73fwo?password=8888 美剧|【邪恶力量】1-15季全_1080P中字【1006G】 +sw6u0mu3fwo?password=8888 美剧|【冰血暴】1-4季全_1080P中字【65G】 +sw6u0v73fwo?password=8888 美剧|【龙之家族】第一季_4K中字【25G】 +sw6u0gx3fwo?password=8888 美剧|【美国恐怖故事】1-11季_1080P中字【306G】 +sw6u0tv3fwo?password=8888 美剧|【黑客军团】1-4季全_1080P中字【32G】 +sw6u0xb3fwo?password=8888 美剧|【国土安全】1-8季全_1080P中字【132G】 +sw6uup63fwo?password=8888 美剧|【唐顿庄园】1-6季全_1080P中字【82G】 +sw6uup03fwo?password=8888 美剧|【指环王:力量之戒】第一季[全8集]4K中字【74G】 +sw6uu1g3fwo?password=8888 美剧|【心灵猎人】1-2季_4K中字【119G】 +sw6uuc23fwo?password=8888 美剧|【伦敦生活】1-2季全_4K中字【28G】 +swz36ki3fwo?password=8888 美剧|【破产姐妹】1-6季全_1080P中字【87G】 +swz36mo3fwo?password=8888 美剧|【月光骑士】6集全_4K中字【32G】 +swz36vd3fwo?password=8888 美剧|【路西法】1-6季全_1080P中字【112G】 +swz36e73fwo?password=8888 美剧|【使女的故事】1-5季全_1080P中字【62G】 +swz36ah3fwo?password=8888 美剧|【黑钱胜地】1-4季_4K中字【200G】 +swz3h4i3fwo?password=8888 美剧|【十三个原因】1-4季全_4K中字【523G】 +swz3hyk3fwo?password=8888 美剧|【大小谎言】1-2季全_1080P中字【21G】 +swz3hmf3fwo?password=8888 美剧|【汉尼拔】1-3季全_1080P中字【59G】 +swz3h543fwo?password=8888 美剧|【宋飞正传】1-9季全_4K中字【488G】 +swz3hed3fwo?password=8888 美剧|【亢奋】1-2季_4K中字【205G】 +swz3hak3fwo?password=8888 美剧|【无耻之徒】1-11季全_1080P中字【201G】 +swz3hg43fwo?password=8888 美剧|【东城梦魇】(2021)_7集全_1080P中字【11G】 +swz3swd3fwo?password=8888 美剧|【鬼庄园】(2020)_9集全_4K中字【23G】 +swz3sw73fwo?password=8888 美剧|【鬼入侵】(2018)_10集全_4K中字【20G】 +swz3sfn3fwo?password=8888 美剧|【足球教练】1-3季_1080P中字【34G】 +swz3sbi3fwo?password=8888 美剧|【你】1-4季_1080P中字【118G】 +swz3s4m3fwo?password=8888 美剧|【我们这一天】1-6季_1080P中字【101G】 +swz3sv73fwo?password=8888 美剧|【混乱之子】1-7季_1080P中字【172G】 +swz3svt3fwo?password=8888 美剧|【猎鹰与冬兵】(2021)_6集全_4K中字【21G】 +swz3se13fwo?password=8888 美剧|【废柴联盟】1-6季_4K中字【260G】 +swz3lbz3fwo?password=8888 美剧|【绯闻女孩】1-6季_1080P中字【109G】 +swz3lo83fwo?password=8888 美剧|【疑犯追踪】1-5季_1080P中字【145G】 +swz3lia3fwo?password=8888 美剧|【超能英雄】1-4季_1080P中字【115G】 +swz3qb83fwo?password=8888 美剧|【犯罪心理】1-16季全_1080P中字【395G】 +swz3q5s3fwo?password=8888 美剧|【广告狂人】1-7季全_1080P中字【373G】 +swz3qek3fwo?password=8888 美剧|【伞学院】1-3季_4K中字【201G】 +swz3qe03fwo?password=8888 美剧|【人生切割术】第一季_(2022)_4K中字【75G】 +swz3qgz3fwo?password=8888 美剧|【危机边缘】1-5季_1080P中字【90G】 +swz3qgq3fwo?password=8888 美剧|【萤火虫】(2002)_14集全_1080P中字【37G】 +swz3ba63fwo?password=8888 美剧|【斯巴达克斯】1-4季_1080P中字【491G】 +swz3bxo3fwo?password=8888 美剧|【哥谭】1-5季_1080P蓝光原盘中字【720G】 +swz6zsv3fwo?password=8888 美剧|【黑道家族】1-6季全_1080P中字【169G】 +swz6zlm3fwo?password=8888 美剧|【闪电侠】1-9季全_1080P中字【180G】 +swz6wjj3fwo?password=8888 美剧|【实习医生格蕾】1-19季全_1080P中字【1.03T】 +swz6fff3fwo?password=8888 美剧|【女子监狱】1-7季全_1080P中字【188G】 +swz6ff83fwo?password=8888 美剧|【杀死伊芙】1-4季_1080P中字【23G】 +swz6fs73fwo?password=8888 美剧|【神盾局特工】1-7季_1080P中字【124G】 +swz6fld3fwo?password=8888 美剧|【火线】1-5季全_1080P中字【61G】 +swz6s4a3fwo?password=8888 美剧|【继承之战】1-4季_4K外挂中字【368G】 +swz6sy63fwo?password=8888 美剧|【公园与游憩】1-7季全_1080P中字【255G】 +swz6skk3fwo?password=8888 美剧|【真爱如血】1-7季全_1080P中字【142G】 +swz6sd63fwo?password=8888 美剧|【超感猎杀】1-2季_4K中字【126G】 +swz6sdr3fwo?password=8888 美剧|【白莲花度假村】1-2季_1080P中字【48G】 +swz6s553fwo?password=8888 美剧|【千谎百计】1-3季全_1080P中字【125G】 +swz6lny3fwo?password=8888 美剧|【神秘博士】1-13季全_1080P中字【324G】 +swz6lww3fwo?password=8888 美剧|【X档案】1-11季+电影版两部_1080P中字【143G】 +swz6lff3fwo?password=8888 美剧|【鹰眼】(2021)_6集全_4K中字【43G】 +swz6lbk3fwo?password=8888 美剧|【IT狂人】1-4季全_标清中字【20G】 +swz6lb03fwo?password=8888 美剧|【无人生还】(2015)_3集全_1080P中字【14G】 +swz6l7f3fwo?password=8888 美剧|【童话镇】1-7季_720P中字【72G】 +swz6lyi3fwo?password=8888 美剧|【欧比旺】(2022)_6集全_4K中字【36G】 +swz6lmm3fwo?password=8888 美剧|【黄石】1-5季_4K中字【更新中】 +swz6lee3fwo?password=8888 美剧|【双峰】1-3季_1080P中字【106G】 +swz6lgx3fwo?password=8888 美剧|【杰西卡·琼斯】1-3季_1080P中字【139G】 +swz6lpz3fwo?password=8888 美剧|【怒呛人生】(2023)_10集全_4K中字【30G】 +swz6lp23fwo?password=8888 美剧|【绝望主妇】1-8季_720P中字【71G】 +swz6ltu3fwo?password=8888 美剧|【绝望主妇】1-8季_1080P中字【300G】 +swz6l033fwo?password=8888 美剧|【地球百子】1-7季全_1080P中字【206G】 +swz6b1z3fwo?password=8888 美剧|【杰茜驾到】1-7季全_1080P中字【194G】 +swz6b1r3fwo?password=8888 美剧|【正常人】(2020)_12集全_1080P中字【9.23G】 +swz6bcn3fwo?password=8888 美剧|【大西洋帝国】1-5季_1080P中字【122G】 +swz6onx3fwo?password=8888 美剧|【小谢尔顿】1-6季_1080P中字【85G】 +swz6o643fwo?password=8888 美剧|【女浩克】(2022)_9集全_4K中字【40G】 +swz6oo83fwo?password=8888 美剧|【傲慢与偏见】(1995)_6集全_1080P外挂字幕【78G】 +swz6o7w3fwo?password=8888 美剧|【贴身保镖】第一季_1080P中字【7G】 +swz6o453fwo?password=8888 美剧|【反恐24小时】1-9季全_1080P中字【399G】 +swz6oyi3fwo?password=8888 美剧|【良医】1-6季_1080P中字【64G】 +swz6k1k3fwo?password=8888 美剧|【硅谷】1-6季_1080P中字【39G】 +swz6kcq3fwo?password=8888 美剧|【副本】1-2季_4K中字【127G】 +swz6k0s3fwo?password=8888 美剧|【罪夜之奔】(2016)_8集全_1080P中字【5G】 +swz6kuu3fwo?password=8888 美剧|【艾米丽在巴黎】1-3季_1080P中字【105G】 +swz6dl23fwo?password=8888 美剧|【罗马】1-2季_1080P中字【60G】 +swz6d773fwo?password=8888 美剧|【好兆头】1-2季_4K中字【67G】 +swz6ew93fwo?password=8888 美剧|【黑色孤儿】1-5季_1080P中字【95G】 +swz6ebs3fwo?password=8888 美剧|【叶卡捷琳娜大帝】1-3季_1080P中字 +sw6u7mw3fwo?password=8888 韩剧|【阿拉姆恩之剑:阿斯达年代记】(2023)_1080P韩语中字_李准基_|_张东健_/_申世景 +sw62qsa3fwo?password=8888 韩剧|【鱿鱼游戏】第一季(2021)_4K韩语中字_李政宰_/_朴海秀_/_魏嘏隽 +sw62qq83fwo?password=8888 韩剧|【请回答1988】(2015)_20集全_4K韩语中字_成东日_/_李一花_/_罗美兰 +sw62qbl3fwo?password=8888 韩剧|【黑暗荣耀】第一季_(2022)_4K韩语中字_宋慧乔_/_李到晛_/_林智妍 +sw62q7z3fwo?password=8888 韩剧|【黑暗荣耀】第二季_(2023)_1080P韩语中字_宋慧乔_/_李到晛_/_林智妍 +sw62q773fwo?password=8888 韩剧|【孤单又灿烂的神:鬼怪】(2016)_16集全_4K韩语中字_孔刘_/_金高银_/_李栋旭 +sw62q723fwo?password=8888 韩剧|【来自星星的你】(2013)_21集全_1080P韩语中字_金秀贤_/_全智贤_/_朴海镇 +sw62qiy3fwo?password=8888 韩剧|【信号】(2016)_16集全_1080P韩语中字_李帝勋_/_赵震雄_/_金惠秀 +sw62qie3fwo?password=8888 韩剧|【太阳的后裔】(2016)_16集全_1080P韩语中字_宋慧乔_/_宋仲基_/_金智媛 +sw62qi23fwo?password=8888 韩剧|【爱的迫降】(2019)_16集全_4K韩语中字_玄彬_/_孙艺珍_/_徐智慧 +sw62q4j3fwo?password=8888 韩剧|【机智医生生活】第一季_(2020)_1080P韩语中字_曹政奭_/_柳演锡_/_郑敬淏 +sw62q4c3fwo?password=8888 韩剧|【机智医生生活】第二季_(2021)_1080P韩语中字_曹政奭_/_柳演锡_/_郑敬淏 +sw62qyq3fwo?password=8888 韩剧|【W-两个世界】(2016)_16集全_1080P韩语中字_李钟硕_/_韩孝周_/_郑幼贞 +sw62qyg3fwo?password=8888 韩剧|【机智牢房生活】(2017)_16集全_1080P韩剧|中字_朴海秀_/_郑敬淏_/_郑秀晶 +sw62qkz3fwo?password=8888 韩剧|【继承者们】(2013)_20集全_1080P韩语中字_李敏镐_/_朴信惠_/_金宇彬 +sw62qkg3fwo?password=8888 韩剧|【当你沉睡时】(2017)_32集全_1080P韩语中字_李钟硕_/_裴秀智_/_李相烨 +sw62qk93fwo?password=8888 韩剧|【窥探】(2021)_20集全_1080P韩语中字_李昇基_/_李熙俊_/_朴柱炫 +sw62qk13fwo?password=8888 韩剧|【举重妖精金福珠】(2016)_16集全_1080P韩语中字_李圣经_/_南柱赫_/_景收真 +sw62qdh3fwo?password=8888 韩剧|【甜蜜家园】(2020)_10集全_4K韩语中字_宋江_/_李施吟_/_李到晛 +sw62qdv3fwo?password=8888 韩剧|【非常律师禹英禑】(2022)_16集全_1080P韩语中字_朴恩斌_/_姜泰伍_/_姜其永 +sw62qmf3fwo?password=8888 韩剧|【那年,我们的夏天】(2021)_16集全_1080P韩语中字_崔宇植_/_金多美_/_金圣喆 +sw62qma3fwo?password=8888 韩剧|【欢迎来到王之国】(2023)_16集全_1080P韩语中字_李俊昊_/_林允儿_/_高媛熙 +sw62q5z3fwo?password=8888 韩剧|【治愈者】(2014)_20集全_1080P韩语中字_池昌旭_/_朴敏英_/_刘智泰 +sw62q5g3fwo?password=8888 韩剧|【今生是第一次】(2017)_16集全_1080P韩语中字_李民基_/_郑素敏_/_朴炳垠 +sw62qvl3fwo?password=8888 韩剧|【没关系,是爱情啊】(2014)_16集全_1080P韩语中字_赵寅成_/_孔晓振_/_成东日 +sw62qvg3fwo?password=8888 韩剧|【请回答1997】(2012)_16集全_1080P韩语中字_郑恩地_/_徐仁国_/_申素率 +sw62qan3fwo?password=8888 韩剧|【蓝色大海的传说】(2016)_20集全_720P韩语中字_全智贤_/_李敏镐_/_文素丽 +sw62qa43fwo?password=8888 韩剧|【僵尸校园】(2022)_12集全_4K韩语中字_尹灿荣_/_朴持厚_/_曹怡贤 +sw62qax3fwo?password=8888 韩剧|【社内相亲】(2022)_12集全_1080P韩语中字_安孝燮_/_金世正_/_金旻奎 +sw62qg93fwo?password=8888 韩剧|【我的解放日志】(2022)_16集全_4K韩语中字_李民基_/_金智媛_/_孙锡久 +sw62qpn3fwo?password=8888 韩剧|【365:逆转命运的1年】(2020)_24集全_1080P韩语中字_李浚赫_/_南志铉_/_金智秀 +sw62qpd3fwo?password=8888 韩剧|【财阀家的小儿子】(2022)_16集全_1080P韩语中字_宋仲基_/_李星民_/_申铉彬 +sw62q8x3fwo?password=8888 韩剧|【大力女子都奉顺】(2017)_16集全_1080P韩语中字_朴宝英_/_朴炯植_/_金志洙 +sw62bog3fwo?password=8888 韩剧|【城市猎人】(2011)_20集全_720P韩语中字_李敏镐_/_朴敏英_/_李浚赫 +sw62big3fwo?password=8888 韩剧|【哦我的鬼神大人】(2015)_16集全_1080P韩语中字_朴宝英_/_曹政奭_/_金瑟祺 +sw62bi23fwo?password=8888 韩剧|【二十五,二十一】(2022)_16集全_1080P韩语中字_金泰梨_/_南柱赫_/_金知妍 +sw62b4d3fwo?password=8888 韩剧|【超异能族】(2023)_20集全_4K韩语中字_柳承龙_/_韩孝周_/_赵寅成 +sw62b4j3fwo?password=8888 韩剧|【海岸村恰恰恰】(2021)_16集全_1080P韩语中字_申敏儿_/_金宣虎_/_李相二 +sw62byh3fwo?password=8888 韩剧|【D.P:逃兵追缉令】_第一季_(2021)_4K韩语中字_丁海寅_/_具教焕_/_金成畇_ +sw62bmt3fwo?password=8888 韩剧|【D.P:逃兵追缉令】_第二季_(2023)_4K韩语中字_丁海寅_/_具教焕_/_金成畇 +sw62b533fwo?password=8888 韩剧|【仁显王后的男人】(2012)_16集全_1080P韩语中字_刘寅娜_/_池贤宇_/_金镇宇 +sw62b5h3fwo?password=8888 韩剧|【少年法庭】(2022)_10集全_4K韩语中字_金惠秀_/_金武烈_/_李星民 +sw62bvt3fwo?password=8888 韩剧|【杀了我治愈我】(2015)_20集全_1080P韩语中字_池晟_/_黄正音_/_朴叙俊 +sw62beq3fwo?password=8888 韩剧|【未生】(2014)_20集全_1080P韩语中字_任时完_/_李星民_/_姜素拉 +sw62bep3fwo?password=8888 韩剧|【内在美】(2018)_16集全_1080P韩语中字_徐玄振_/_李民基_/_李多熙 +sw62bai3fwo?password=8888 韩剧|【语义错误】(2022)_8集全_1080P韩语中字_朴栖含_/_朴宰灿_/_宋智午 +sw62bgh3fwo?password=8888 韩剧|【我的ID是江南美人】(2018)_16集全_1080P韩语中字_林秀香_/_车银优_/_赵宇丽 +sw62bgf3fwo?password=8888 韩剧|【偶然发现的一天】(2019)_32集全_1080P韩语中字_金惠奫_/_金路云_/_李宰旭 +sw62bga3fwo?password=8888 韩剧|【国王:永远的君主】(2020)_16集全_1080P韩语中字_李敏镐_/_金高银_/_禹棹焕 +sw62bg03fwo?password=8888 韩剧|【请回答1994】(2013)_21集全_1080P韩语中字_高雅拉_/_柳演锡_/_正宇 +sw62bpy3fwo?password=8888 韩剧|【Move_to_Heaven:我是遗物整理师】(2021)_10集全_4K韩语中字_李帝勋_/_汤峻相_/_洪承熙 +sw62owv3fwo?password=8888 韩剧|【夫妻的世界】(2020)_16集全_1080P韩语中字_金喜爱_/_朴解浚_/_韩韶禧 +sw62ofn3fwo?password=8888 韩剧|【安娜】(2022)_6集全_1080P韩语中字_裴秀智_/_郑恩彩_/_金俊翰 +sw62ofi3fwo?password=8888 韩剧|【火星生活】(2018)_16集全_1080P韩语中字_郑敬淏_/_朴成雄_/_高我星 +sw62ofe3fwo?password=8888 韩剧|【春夜】(2019)_16集全_4K韩语中字_韩志旼_/_丁海寅_/_金俊翰 +sw62osq3fwo?password=8888 韩剧|【酒鬼都市女人们】(2021)_12集全_1080P韩语中字_李先彬_/_韩善花_/_郑恩地 +sw62osg3fwo?password=8888 韩剧|【棒球大联盟】(2019)_16集全_1080P韩语中字_南宫珉_/_朴恩斌_/_吴正世 +sw62oq13fwo?password=8888 韩剧|【囚犯医生】(2019)_16集全_1080P韩语中字_南宫珉_/_权娜拉_/_金炳哲 +sw62ob33fwo?password=8888 韩剧|【迷雾】(2018)_16集全_1080P韩语中字_金南珠_/_池珍熙_/_高俊 +sw62obv3fwo?password=8888 韩剧|【我的名字】(2021)_8集全_4K韩语中字_韩韶禧_/_朴熹洵_/_安普贤 +sw62oo33fwo?password=8888 韩剧|【咖啡王子1号店】(2007)_17集全_1080P韩语中字_尹恩惠_/_孔刘_/_李善均 +sw62ook3fwo?password=8888 韩剧|【黑话律师】(2022)_16集全_1080P韩语中字_李钟硕_/_林允儿_/_金周宪 +sw62oor3fwo?password=8888 韩剧|【耀眼】(2019)_12集全_1080P韩语中字_金惠子_/_韩志旼_/_南柱赫 +sw62o7s3fwo?password=8888 韩剧|【地狱公使】(2021)_6集全_4K韩语中字_刘亚仁_/_金贤珠_/_朴正民 +sw62o7r3fwo?password=8888 韩剧|【请输入搜索词:WWW】(2019)_16集全_1080P韩语中字_林秀晶_/_张基龙_/_李多熙 +sw62oid3fwo?password=8888 韩剧|【阿尔罕布拉宫的回忆】(2018)_16集全_1080P韩语中字_玄彬_/_朴信惠_/_朴勋_ +sw62oyx3fwo?password=8888 韩剧|【她很漂亮】(2015)_16集全_1080P韩语中字_黄正音_/_朴叙俊_/_高俊熙 +sw62oks3fwo?password=8888 韩剧|【我亲爱的朋友们】(2016)_16集全_1080P韩语中字_高贤贞_/_赵寅成_/_金惠子 +sw62okn3fwo?password=8888 韩剧|【Live】(2018)_18集全_720P韩语中字_郑有美_/_李光洙_/_裴晟祐 +sw62ok43fwo?password=8888 韩剧|【制作人】(2015)_12集全_1080P韩语中字_金秀贤_/_车太贤_/_孔晓振 +sw62odw3fwo?password=8888 韩剧|【她的私生活】(2019)_16集全_1080P韩语中字_朴敏英_/_金材昱_/_安普贤 +sw62odl3fwo?password=8888 韩剧|【大长今】(2003)_54集全_1080P国语韩语多音轨中字_李英爱_/_池珍熙_/_任豪 +sw62odr3fwo?password=8888 韩剧|【无法抗拒的他】(2021)_10集全_1080P韩语中字_宋江_/_韩韶禧_/_蔡钟协 +sw62omq3fwo?password=8888 韩剧|【加油吧威基基】(2018)_20集全_1080P韩语中字_金正贤_/_李伊庚_/_孙承源 +sw62omv3fwo?password=8888 韩剧|【绅士的品格】(2012)_20集全_1080P韩语中字_张东健_/_金荷娜_/_金民钟 +sw62om93fwo?password=8888 韩剧|【九回时间旅行】(2013)_20集全_1080P韩语中字_李阵郁_/_赵胤熙_/_全卢民 +sw6uayo3fwo?password=8888 日剧|【非自然死亡】全10集_1080P中字【13G】 +swz3hvx3fwo?password=8888 日剧|【胜者即是正义】(2012)_11集全_1080P中字【13G】 +swz3hv03fwo?password=8888 日剧|【胜者即是正义2】(2013)_10集全_1080P中字【13G】 +swz3l4f3fwo?password=8888 日剧|【弥留之国的爱丽丝】1-2季_4K中字【100G】 +swz6syr3fwo?password=8888 日剧|【半泽直树】1-2季全_1080P中字【38G】 +swz6sdf3fwo?password=8888 日剧|【我是大哥大】10集全_1080P中字【38G】 +swz6s5p3fwo?password=8888 日剧|【重启人生】10集全_1080P中字【11G】 +swz6s513fwo?password=8888 日剧|【轮到你了】20集全_1080P中字【20G】 +swz6o4e3fwo?password=8888 日剧|【四重奏】(2017)_10集全_1080P中字【16G】 +swz6kjm3fwo?password=8888 日剧|【我的恐怖妻子】(2016)_9集全_1080P中字【13G】 +swz6dk13fwo?password=8888 日剧|【凪的新生活】(2019)_10集全_1080P中字【9G】 +sw6uis63fwo?password=8888 台剧|【想见你】(2019)_13集全_4K中字【36G】 +sw6uj4h3fwo?password=8888 台剧|【我们与恶的距离】(2019)_10集全_4K中字【88G】 +swz6lk43fwo?password=8888 台剧|【我可能不会爱你】(2011)_23集全_1080P中字【17G】 +swz6kcg3fwo?password=8888 台剧|【俗女养成记】1-2季_4K中字【74G】 +swnvgvv3z29?password=h6b2 纪录片|中国通史全100集_64.07G +sw682pw3nyo?password=s8c8 纪录片|国外纪录片_1.86T +sw6xm3j3w7v?password=1111 纪录片|百家讲坛全集_2.21T +swz6smc3fwo?password=8888 纪录片|【地球脉动】1-3季_1080P中字【436G】 +sw68md23w8m?password=q353 纪录片|盗火纪录片_9.32T +swz6fb03fwo?password=8888 纪录片|一级方程式:疾速争胜_(2019) +swz6fbu3fwo?password=8888 纪录片|七个世界,一个星球_(2019) +swz6fo33fwo?password=8888 纪录片|72种危险动物:拉丁美洲_(2017) +swz6fo43fwo?password=8888 纪录片|72种危险动物:亚洲篇_(2018) +swz6foy3fwo?password=8888 纪录片|2022_(2022) +swz6fok3fwo?password=8888 纪录片|阿波罗11号_(2019) +swz6fod3fwo?password=8888 纪录片|阿莱克斯·施瓦泽:为真相而跑_(2023) +swz6fov3fwo?password=8888 纪录片|埃及艳后_(2023) +swz6foe3fwo?password=8888 纪录片|艾德·希兰:成名之路_(2023) +swz6foa3fwo?password=8888 纪录片|爱犬情深_(2018) +swz6fog3fwo?password=8888 纪录片|摆脱贫困_(2021) +swz6fo83fwo?password=8888 纪录片|北回归线_(2010) +swz6foj3fwo?password=8888 纪录片|北极奇观_(2014) +swz6fo93fwo?password=8888 纪录片|北极熊_(2022) +swz6fo13fwo?password=8888 纪录片|贝尔蒂·格雷戈里:与动物零距离_(2023) +swz6fo03fwo?password=8888 纪录片|奔向月球_(2015) +swz6f733fwo?password=8888 纪录片|变态者意识形态指南_(2012) +swz6f7n3fwo?password=8888 纪录片|冰冻星球2_(2022) +swz6f7z3fwo?password=8888 纪录片|冰河时代的巨人_(2013) +swz6f7w3fwo?password=8888 纪录片|冰雪之巅_(2018) +swz6f7s3fwo?password=8888 纪录片|博茨瓦纳惊人的野生动物_(2020) +swz6f7q3fwo?password=8888 纪录片|不破不立_(2021) +swz6f7o3fwo?password=8888 纪录片|不止考古·我与三星堆_(2022) +swz6f7i3fwo?password=8888 纪录片|坂本龙一:终曲_(2017) +swz6f743fwo?password=8888 纪录片|BBC_野性都市_(2018) +swz6f7k3fwo?password=8888 纪录片|彩排_(2022) +swz6f7d3fwo?password=8888 纪录片|茶,一片树叶的故事_(2013) +swz6f753fwo?password=8888 纪录片|超凡动物奇观_(2022) +swz6f7v3fwo?password=8888 纪录片|超级工程_(2012) +swz6f7r3fwo?password=8888 纪录片|沉船搜索者澳大利亚_(2022) +swz6f7t3fwo?password=8888 纪录片|穿越落基山脉_(2011) +swz6f783fwo?password=8888 纪录片|从太空看地球_(2019) +swz6f7j3fwo?password=8888 纪录片|大白鲨_(2013) +swz6f7x3fwo?password=8888 纪录片|大堡礁探险_(2018) +swz6f7c3fwo?password=8888 纪录片|大陆的崛起_(2013) +swz6f703fwo?password=8888 纪录片|大秦岭_(2010) +swz6f7u3fwo?password=8888 纪录片|大太平洋_(2017) +swz6fi33fwo?password=8888 纪录片|大峡谷探险之河流告急_(2008) +swz6fi63fwo?password=8888 纪录片|大象的秘密_(2023) +swz6fih3fwo?password=8888 纪录片|大象女王_(2019) +swz6fiw3fwo?password=8888 纪录片|大熊猫_(2018) +swz6fif3fwo?password=8888 纪录片|登陆日:诺曼底1944_(2014) +swz6fis3fwo?password=8888 纪录片|地球的夜晚_(2020) +swz6fil3fwo?password=8888 纪录片|地球风暴_(2022) +swz6fiq3fwo?password=8888 纪录片|地球脉动_(2006) +swz6fib3fwo?password=8888 纪录片|地球脉动2_(2016) +swz6fi73fwo?password=8888 纪录片|地球:神奇的一天_(2017) +swz6fii3fwo?password=8888 纪录片|第四阶段_(2016) +swz6fiy3fwo?password=8888 纪录片|帝国的崛起:奥斯曼_(2020) +swz6fik3fwo?password=8888 纪录片|帝企鹅日记2:召唤_(2017) +swz6fim3fwo?password=8888 纪录片|帝王蝶的迁徙_(2012) +swz6fiv3fwo?password=8888 纪录片|东瀛大宝荐 +swz6fie3fwo?password=8888 纪录片|动物本色_(2021) +swz6fig3fwo?password=8888 纪录片|敦煌:生而传奇_(2021) +swz6fi83fwo?password=8888 纪录片|恶海捕蟹记:血脉篇_(2020) +swz6fij3fwo?password=8888 纪录片|非洲_(2013) +swz6fic3fwo?password=8888 纪录片|非洲:动物乐园_(2017) +swz6fi23fwo?password=8888 纪录片|风味原产地_(2019) +swz6f433fwo?password=8888 纪录片|佛罗伦萨和乌菲兹美术馆_(2015) +swz6f4n3fwo?password=8888 纪录片|功勋_(2021) +swz6f4s3fwo?password=8888 纪录片|孤注一掷:阿森纳_(2022) +swz6f4q3fwo?password=8888 纪录片|孤注一掷:巴西国家队_(2020) +swz6f4o3fwo?password=8888 纪录片|孤注一掷:曼彻斯特城_(2018) +swz6f473fwo?password=8888 纪录片|孤注一掷:托特纳姆热刺_(2020) +swz6f4i3fwo?password=8888 纪录片|龟女士的奥德赛_(2018) +swz6f4y3fwo?password=8888 纪录片|国际空间站_(2002) +swz6f4k3fwo?password=8888 纪录片|国家地理:大迁徙_(2010) +swz6f4m3fwo?password=8888 纪录片|国家地理:远征南极_(2009) +swz6f4r3fwo?password=8888 纪录片|海狼之岛_(2022) +swz6f4a3fwo?password=8888 纪录片|海洋_(2010) +swz6f4p3fwo?password=8888 纪录片|海洋:我们的蓝色星球_(2018) +swz6f4t3fwo?password=8888 纪录片|航空母舰:七海卫士_(2016) +swz6fyz3fwo?password=8888 纪录片|航拍中国_(2017) +swz6fyw3fwo?password=8888 纪录片|河西走廊_(2015) +swz6fyf3fwo?password=8888 纪录片|黑猩猩帝国_(2023) +swz6fyb3fwo?password=8888 纪录片|黑夜跟踪狂:追捕连环杀手_(2021) +swz6fy73fwo?password=8888 纪录片|欢迎来地球_(2021) +swz6fyi3fwo?password=8888 纪录片|环法自行车赛:逆风飞驰_(2023) +swz6fyy3fwo?password=8888 纪录片|回到太空_(2022) +swz6fyk3fwo?password=8888 纪录片|急诊先锋:纽约_(2023) +swz6fym3fwo?password=8888 纪录片|记忆的力量·抗美援朝_(2020) +swz6fyv3fwo?password=8888 纪录片|家园_(2020) +swz6fye3fwo?password=8888 纪录片|揭秘海军陆战队_(2017) +swz6fyg3fwo?password=8888 纪录片|巨兽_(2023) +swz6fyt3fwo?password=8888 纪录片|觉醒_(2018) +swz6fyj3fwo?password=8888 纪录片|康纳·麦格雷戈:拳王万岁_(2023) +swz6fy13fwo?password=8888 纪录片|克里斯·海姆斯沃斯:挑战极限_(2022) +swz6fy23fwo?password=8888 纪录片|狂野日本_(2015) +swz6fk33fwo?password=8888 纪录片|狂野之美:国家公园探险_(2016) +swz6fkn3fwo?password=8888 纪录片|蓝色星球_(2001) +swz6fks3fwo?password=8888 纪录片|蓝色星球2_(2017) +swz6fkb3fwo?password=8888 纪录片|雷吉_(2023) +swz6fki3fwo?password=8888 纪录片|李小龙传奇_(2008) +swz6fky3fwo?password=8888 纪录片|了解宇宙如何运行_(2010) +swz6fkk3fwo?password=8888 纪录片|绿色星球_(2022) +swz6fkm3fwo?password=8888 纪录片|罗马四大圣殿_(2016) +swz6fk53fwo?password=8888 纪录片|麦道夫:华尔街吸金恶霸_(2023) +swz6fkr3fwo?password=8888 纪录片|没有极限_(2015) +swz6fka3fwo?password=8888 纪录片|美国内战_(1990) +swz6fkp3fwo?password=8888 纪录片|美国西海岸之旅_(2014) +swz6fk83fwo?password=8888 纪录片|美丽星球_(2016) +swz6fk93fwo?password=8888 纪录片|美丽中国_(2008) +swz6fk13fwo?password=8888 纪录片|梦想之大:构建我们的世界_(2017) +swz6fkc3fwo?password=8888 纪录片|木偶奇遇记_(2022) +swz6fdn3fwo?password=8888 纪录片|喵星人的奇思妙想_(2022) +swz6fdz3fwo?password=8888 纪录片|MH370:消失的马航客机_(2023) +swz6fdh3fwo?password=8888 纪录片|纳米比亚-旷野的精神_(2016) +swz6fdw3fwo?password=8888 纪录片|南极3D:在边缘_(2014) +swz6fdq3fwo?password=8888 纪录片|南太平洋之旅_(2013) +swz6fd73fwo?password=8888 纪录片|欧洲_(2016) +swz6fdy3fwo?password=8888 纪录片|披头士乐队:回归_(2021) +swz6fdm3fwo?password=8888 纪录片|僻壤凶案_(2022) +swz6fd53fwo?password=8888 纪录片|婆罗洲:亚洲的魅力_(2017) +swz6fdv3fwo?password=8888 纪录片|破发点:大满贯之路_(2023) +swz6fda3fwo?password=8888 纪录片|破浪_(2016) +swz6fdg3fwo?password=8888 纪录片|奇妙酒店:大堂之外的生活_(2017) +swz6fdp3fwo?password=8888 纪录片|企鹅群里有特务_(2013) +swz6fd83fwo?password=8888 纪录片|企鹅小镇_(2021) +swz6fdj3fwo?password=8888 纪录片|切尔诺贝利_(2019) +swz6fdx3fwo?password=8888 纪录片|情系斯波克_(2016) +swz6fm33fwo?password=8888 纪录片|求偶游戏_(2021) +swz6fmh3fwo?password=8888 纪录片|全力挥杆:高尔夫大满贯之路_(2023) +swz6fmf3fwo?password=8888 纪录片|全美缉凶:波士顿马拉松爆炸案_(2023) +swz6fml3fwo?password=8888 纪录片|全球绝美国家公园_(2022) +swz6fmb3fwo?password=8888 纪录片|人间游乐场_(2022) +swz6fmi3fwo?password=8888 纪录片|人生七年1_(1964) +swz6fmy3fwo?password=8888 纪录片|人生七年2_(1970) +swz6fmd3fwo?password=8888 纪录片|人生七年3_(1977) +swz6fm53fwo?password=8888 纪录片|人生七年4_(1984) +swz6fme3fwo?password=8888 纪录片|人生七年5_(1991) +swz6fma3fwo?password=8888 纪录片|人生七年6_(1999) +swz6fmp3fwo?password=8888 纪录片|人生七年7_(2006) +swz6fmt3fwo?password=8888 纪录片|人生七年8_(2012) +swz6fm93fwo?password=8888 纪录片|人生七年9_(2019) +swz6fm13fwo?password=8888 纪录片|人生第一次_(2020) +swz6fmc3fwo?password=8888 纪录片|塞伦盖蒂_(2019) +swz6fm23fwo?password=8888 纪录片|塞伦盖蒂国家公园_(2011) +swz6fmu3fwo?password=8888 纪录片|舌尖上的中国_(2012) +swz6f5n3fwo?password=8888 纪录片|生门_(2017) +swz6f563fwo?password=8888 纪录片|生命_(2009) +swz6f5h3fwo?password=8888 纪录片|盛会_(2022) +swz6f5w3fwo?password=8888 纪录片|时间的风景_(2012) +swz6f5f3fwo?password=8888 纪录片|史前星球_(2022) +swz6f5s3fwo?password=8888 纪录片|水下中国_(2019) +swz6f5q3fwo?password=8888 纪录片|他乡的童年_(2019) +swz6f5b3fwo?password=8888 纪录片|泰勒·斯威夫特:美利坚女士_(2020) +swz6f5i3fwo?password=8888 纪录片|太空之旅_(2015) +swz6f543fwo?password=8888 纪录片|徒手攀岩_(2018) +swz6f5k3fwo?password=8888 纪录片|外星世界_(2020) +swz6f5v3fwo?password=8888 纪录片|完美星球_(2021) +swz6f5e3fwo?password=8888 纪录片|万物之生_(2022) +swz6f5g3fwo?password=8888 纪录片|王朝_(2018) +swz6f5p3fwo?password=8888 纪录片|王阳明_(2021) +swz6f5t3fwo?password=8888 纪录片|韦科惨案:末日烈火_(2023) +swz6f5j3fwo?password=8888 纪录片|为了全人类_(1989) +swz6f593fwo?password=8888 纪录片|维多利亚的秘密:天使与恶魔_(2022) +swz6f5u3fwo?password=8888 纪录片|未来漫游指南_(2022) +swz6fvs3fwo?password=8888 纪录片|我工作故我在_(2023) +swz6fvi3fwo?password=8888 纪录片|我们的父亲_(2022) +swz6fvm3fwo?password=8888 纪录片|我们的浩瀚宇宙_(2022) +swz6fv53fwo?password=8888 纪录片|我们的星球_(2019) +swz6fvr3fwo?password=8888 纪录片|我们的自然_(2018) +swz6fve3fwo?password=8888 纪录片|我们星球上的生命_(2023) +swz6fva3fwo?password=8888 纪录片|我是一名杀手_(2018) +swz6fvp3fwo?password=8888 纪录片|无穷之路_(2021) +swz6fvj3fwo?password=8888 纪录片|武林外传_(2018) +swz6fvx3fwo?password=8888 纪录片|小小世界_(2020) +swz6fv03fwo?password=8888 纪录片|行星_(2019) +swz6fvu3fwo?password=8888 纪录片|血与性:400年王室风云_(2022) +swz6fr63fwo?password=8888 纪录片|药剂师_(2020) +swz6frh3fwo?password=8888 纪录片|野性太平洋_(2016) +swz6frf3fwo?password=8888 纪录片|野性英伦_(2023) +swz6frq3fwo?password=8888 纪录片|夜色中的地球_(2020) +swz6fr73fwo?password=8888 纪录片|移民国度_(2020) +swz6frm3fwo?password=8888 纪录片|影响世界的中国植物_(2019) +swz6frp3fwo?password=8888 纪录片|与浪争锋_(2022) +swz6frx3fwo?password=8888 纪录片|宇宙时空之旅_(2014) +swz6fe33fwo?password=8888 纪录片|遇见最极致的中国_(2022) +swz6few3fwo?password=8888 纪录片|原味澳洲_(2013) +swz6fel3fwo?password=8888 纪录片|约翰·威尔逊的十万个怎么做_(2020) +swz6feb3fwo?password=8888 纪录片|找寻_(2021) +swz6fe73fwo?password=8888 纪录片|这货哪来的_(2023) +swz6fek3fwo?password=8888 纪录片|致富攻略_(2023) +swz6fem3fwo?password=8888 纪录片|中国_(2020) +swz6fev3fwo?password=8888 纪录片|中国救护_(2023) +swz6fee3fwo?password=8888 纪录片|中国通史_(2013) +swz6feg3fwo?password=8888 纪录片|中国之谜_(2016) +swz6fep3fwo?password=8888 纪录片|中国最美公路_(2022) +swz6fet3fwo?password=8888 纪录片|众神之地_(2022) +swz6fej3fwo?password=8888 纪录片|追缉汽车大亨:卡洛斯·戈恩_(2023) +swz6fe93fwo?password=8888 纪录片|追逐珊瑚_(2017) +swz6fec3fwo?password=8888 纪录片|最后的珊瑚礁:海底世界_(2012) +swz6fe23fwo?password=8888 纪录片|最后的舞动_(2020) +swz6feu3fwo?password=8888 纪录片|最美公路_(2018) +swz6fan3fwo?password=8888 纪录片|座头鲸_(2015) +sw6vuxp366e?password=kd83 音乐MV|港台MV_1.14T +sw658uq36x2?password=md98 音乐MV|音乐22万首_8.76T +swzmqcr3fs6?password=xd67 音乐MV|音乐22万首_3.83TB +swzmqca3fs6?password=j9d3 音乐MV|音乐22万首_8.76TB +swzva8w3fs6?password=l381 音乐MV|音乐22万首_1.80TB +swz6ft53fwo?password=8888 精选|各类无损音乐合集9万首(8.8T) +swz6soa3fwo?password=8888 精选|成龙电影合集【447G】 +swz6sot3fwo?password=8888 精选|《_成龙65部作品合集@Ourdisc_蓝光原盘_》【1.48T】 +swz6so13fwo?password=8888 精选|林正英电影合集46部【209G】 +swz6so23fwo?password=8888 精选|李连杰电影合集【210G】 +swz6s763fwo?password=8888 精选|邵氏4K【777G】 +swz6s7w3fwo?password=8888 精选|周星馳电影合集【183G】 +swz6s743fwo?password=8888 精选|动漫_已经刮削整理_394部【13.97T】 +swz6s7y3fwo?password=8888 精选|freembook全站15.72万书(kindle格式为主)_1.6t +swz6s7d3fwo?password=8888 精选|港片蓝光原盘1--669部【16T】 +swz6s783fwo?password=8888 精选|纪录片合集_蓝光原盘 +swz6sin3fwo?password=8888 精选|泰剧【3.15T】 +swz6sih3fwo?password=8888 精选|音乐22万首14.39T音乐包2 +swz6siw3fwo?password=8888 精选|印度電子圖書館部分書籍(29萬12T左右) +swz6sil3fwo?password=8888 精选|中美百万66万书籍的超大zip压缩版.ca66萬zip【8.7T】 +swz6sib3fwo?password=8888 精选|最强爽文短剧合集373部 +swz6gd93fwo?password=8888 精选|2267部2160p_remux_FGT【120T】 +swz6gml3fwo?password=8888 精选|动画电影1000部【9.7T】 +swz6gmc3fwo?password=8888 精选|综艺【4.75T】 +swz6ges3fwo?password=8888 精选|动漫原盘【40T】 +swz6gp53fwo?password=8888 精选|蓝光原盘_646T_合集 +swz692e3fwo?password=8888 精选|高清翡翠台_合集_(18.7tb) +swz692x3fwo?password=8888 精选|TVB【7T】 +swz69un3fwo?password=8888 精选|TVB_ATV最强电视剧合集【650部73T】 +swzfv793fwo?password=8888 精选|【_BD-ISO_】】【2224TB】 +swzt3w43hc6?password=s922 精选|希腊神话改编影视 +swzt3w23hc6?password=z631 精选|尼古拉斯凯奇 +swzt3wi3hc6?password=gf96 精选|恐怖片 +swzt3fh3hc6?password=ia38 精选|全球丧尸电影百佳合集 +swnnsis3zx1?password=g0d1 精选|600t合集 +swzlcya3wsp?password=bab4 精选|1600t合集 +swz82uz33a3?password=x1e1 精选|踢馆秘籍 +swzkpip3ncb?password=5566 精选|【电影系列合集】4K +swzkpij3ncb?password=5566 精选|【电影系列合集】AE制作全特效字幕 +swzkpix3ncb?password=5566 精选|【电影系列合集】最佳影片合集 +swzkpi23ncb?password=5566 精选|漫威电影合集 +swzkpiu3ncb?password=5566 精选|电影系列合集2 +swz939j3hz7?password=bcd5 日本动漫|奥特曼系列 +swzjuqj33dn?password=7777 日本动漫|火影忍者 +sw62c3o3z9p?password=s137 动漫|动画片_3.99T +sw6upku3hqj?password=hc61 动漫|动漫394部_13.97T +swznmd03nc7?password=p897 动漫|动漫原盘_40.49T +sw6x8sj3zzo?password=v321 动漫|皮克斯动画合集4K_REMUX_975.83G +sw3x2pd33zy?password=xzpq 动漫|小猪佩奇_21.95G +swnd82q3zx1?password=ua89 动漫|奥特曼_1.1T +sw3c8o83hgl?password=b5e6 魔戒六部曲_1.18T +swzdt0w3nb4?password=f0a7 诺兰系列原盘访问码:d843 +swzdt933nb4?password=la51 姜文 +swny8y43z12?password=o932 NBA总决赛1991-2020_698.21G +swzg31833xj?password=f3h5 2024欧洲杯 +sw6rt783hgh?password=ifd6 PPT素材模板_84.82G diff --git a/lib/123share.txt b/lib/123share.txt new file mode 100644 index 0000000..82a1f8f --- /dev/null +++ b/lib/123share.txt @@ -0,0 +1,21 @@ +self 我的123网盘 0 +IpPUVv-3gOj?pwd=JZMM 【SGNB@CHDBits特效字幕4K_UHD原盘DIY电影合集】[1-345部]_[最终整理v2更新版_24.01TB] +oec7Vv-odJWh?pwd=G8Et SGNB特效字幕4K原盘电影集 +Gme4Td-BW0Bd?pwd=evCv iso原盘|豆瓣top25 +Kliajv-TAWpd iso原盘|合集 +KASbTd-Yjjrv iso原盘|爱在三部曲 +IpPUVv-4cCj?pwd=dNQN iso原盘|浪客剑心合集 +IpPUVv-2INj?pwd=JMYP REMUX电影|诺兰合集 +TcMcTd-7YWJ?pwd=JMYP REMUX剧集|东京爱情故事 +IpPUVv-zFNj?pwd=JMYP REMUX剧集|纸牌屋 +TcMcTd-bYWJ?pwd=JMYP REMUX剧集|请回答1988 +IpPUVv-rJNj?pwd=JMYP REMUX剧集|黑道家族 +IpPUVv-5FNj?pwd=JMYP REMUX剧集|国土安全 +IpPUVv-jFNj?pwd=JMYP REMUX剧集|兄弟连 +IpPUVv-UgNj?pwd=JMYP REMUX剧集|行尸走肉系列官方版 +TcMcTd-aPWJ?pwd=JZMM REMUX剧集|重启人生 +Xrvgjv-ApMWA REMUX剧集|曼洛达人 +x2rdTd-1oSP3 成龙系列电影合集 +6Lv8Vv-i6kD3 REMUX电影|中南海保镖 +0pQSVv-OgQKd 动画电影合集 +0pQSVv-OXEKd 动画剧场版合集 diff --git a/lib/189share.txt b/lib/189share.txt new file mode 100644 index 0000000..a491ef9 --- /dev/null +++ b/lib/189share.txt @@ -0,0 +1,135 @@ +self 我的189网盘 0 +uURbMvvmaQJ3 蓝光影剧合集[beAst]兽组十年站庆_3.52TB +YRBrquFFnQr2 海绵电影iso|周星驰蓝光原盘46部 +fQBzQrz2m2am 海绵电影iso|成龙65部 +mMzuMnMJ3yUr 海绵电影iso|星际旅行1-10 +ZziMbij67jui 海绵电影iso|死亡笔记.真人版1-4 +MzQzE32Irqei 海绵电影iso|死亡笔记.真人版1-4 +MJjimuZzemqi 海绵电影iso|致命弯道1-7 +FV7J3a7JvyM3 海绵电影iso|十一罗汉+十二罗汉+十三罗汉 +BzieyyuIR7ne 海绵电影iso|白蛇1-3 +RZjuYjRZFzAj 海绵电影iso|冰川时代1-5 +euaqAreaUb2u 海绵电影iso|虎胆龙威1-5 +VFfYryfQzABb 海绵电影iso|电锯惊魂1-9 +IRRJRfaAj6be 海绵电影iso|指环王1-3|| +INZBFzRVBRzy 海绵电影iso|指环王1-3|2 +ZJnmAjNj2ymu 海绵电影iso|指环王1-3|3 +AZ3If2MZbiui 海绵电影iso|致命武器1-4|1 +jQzuaeqyUjm2 海绵电影iso|致命武器1-4|2 +VJVBF3qUria2 海绵电影iso|致命武器1-4|3 +eA7NzamQFzEn 海绵电影iso|致命武器1-4|4 +J3Qra2qyMF7z 海绵电影iso|机器战警1-3|1 +2URjUn2quqY3 海绵电影iso|机器战警1-3|2 +VVrAfurUjIZj 海绵电影iso|机器战警1-3|3 +MRVnuaqyQFv2 海绵电影iso|死亡飞车1-4 +UFF3euEzQNfe 海绵电影iso|王家卫|东邪西毒 +eMJv6vim6N32 海绵电影iso|王家卫|2046 +fyiMBrm2QfM3 海绵电影iso|王家卫|阿飞正传 +Vj63UvjQbYbu 海绵电影iso|王家卫|堕落天使 +2qA3IbRR7vmq 海绵电影iso|王家卫|重亲森林 +mAJria7Nv2qi 海绵电影iso|王家卫|春光乍泄 +ANb6Jb3IJJ7r 海绵电影iso|王家卫|旺角卡门 +6jErE3IVjMjm 海绵电影iso|王家卫|花样年华 +3INZJreQnMre 海绵电影iso|王家卫|一代宗师 +2yQ3qiFZFzAb?pwd=bzp0 4KHDR电影总合集1 +RvmY7ruMRNfm?pwd=8y5e 4KHDR电影总合集2 +VNFbEfmee26v?pwd=83ir 4KHDR电影总合集3 +A3yu2avyyyua?pwd=7c7f 4KHDR电影总合集5 +UjqeEziEjqMn?pwd=u26b 4KHDR电影总合集9 +Uj6fia2iqq6v?pwd=7ty7 4KHDR电影总合集11 +AjuYbiqi2AJr 吉卜力工作室25部动漫合集 +uUr2qeqieQ3e 国内各大制片厂电影合集 +fuiaAfVfmuUz 四大名著合集 +ZJZVz2fu2uEj?pwd=in91 漫威宇宙合集 +ZvqQryJ73QJf 加勒比海盗合集 +eeUnuuaYb22e 生化危机合集 +RJZr6b2e6BV3 海绵演唱会iso|滨崎步|2014巡回演唱会 +vei6zaiQjQFf 海绵演唱会iso|滨崎步|出道21周年 +VvyYNjRbIJju 海绵演唱会iso|滨崎步|午夜马戏团2015 +fuqY3uZZZJJz 海绵演唱会iso|滨崎步|2016 +6j2INfQbAfQr 海绵演唱会iso|滨崎步|2012巡回演唱会 +qyiYRrjqeAja 海绵演唱会iso|滨崎步|2009巡回演唱会 +m6bMb2niMfqu 海绵演唱会iso|滨崎步|2016日本巡回演唱会1 +q6NJzejYNBBv 海绵演唱会iso|滨崎步|2016日本巡回演唱会2 +RBRn6rvAriMr 海绵演唱会iso|滨崎步|2016日本巡回演唱会3 +yuYbai7fuMbe 海绵演唱会iso|滨崎步|AOne2015 +3muYfm2u6nye 海绵演唱会iso|滨崎步|CoLOURS2014 +EJFnYzmmimyu 海绵演唱会iso|滨崎步|出道15周年 +ZrmIvqZ36jEj 海绵演唱会iso|滨崎步|2008-2009信念倒计时演唱会 +QVnea2FfaEfm 海绵演唱会iso|滨崎步|2009-2010跨年演唱会 +yE7ZZrVB3MZv 海绵演唱会iso|滨崎步|2011迷你专辑 +77vEzm7bqUBb 海绵演唱会iso|滨崎步|摇滚马戏团2010 +FFj2Uf7za6nu 海绵演唱会iso|许巍|2015此时此刻演唱会LIVE纪录辑 +Yveya2UBrE3y 海绵演唱会iso|王菲|2016幻梦一场 +YruMnybUFjai 海绵演唱会iso|张震岳|2014破浪演唱会 +6JVviyJrYNru 海绵演唱会iso|周杰伦|2010超时代世界巡回演唱会 +eUjEF3MRbeum 海绵演唱会iso|周杰伦|2013-3015魔天伦世界巡回演唱会 +RNJn6fA7zEje 海绵演唱会iso|周杰伦|2016地表最强巡回演唱会 +3AVbIn2UJJR3 海绵演唱会iso|蔡依林|2015play世界巡回演唱会 +vMNBJjiYRFrq 海绵演唱会iso|刘德华|2007完美世界香港红馆 +fUZNnimA7vmi 海绵演唱会iso|刘德华|2010震撼红馆跨年演唱会 +euyuI3AvIZZj 海绵演唱会iso|张学友|2010私人角落迷你音乐会 +yM3UvqnQfeqq 海绵演唱会iso|张学友|二分之一 +6nyE73zuEvue 海绵演唱会iso|张学友|2018醒着做梦 +EVjyIf7byy6v 海绵演唱会iso|张学友|光年世界巡回演唱会07香港站 +ZnQFnanuUZBv 海绵演唱会iso|郭富城|2008舞林正传 +a6nmaajeaENn 海绵演唱会iso|郭富城|2013世界巡回香港站 +2aAnQznm63Iz 海绵演唱会iso|容祖儿|2010演唱会 +QjyMvqeEZfIn 海绵演唱会iso|容祖儿|2013演唱会 +N7NFJ3EJzIJj 海绵演唱会iso|容祖儿|2017演唱会1 +jUZr6rYBrmeq 海绵演唱会iso|容祖儿|2017演唱会2 +JJBvU3bEJRjy 海绵演唱会iso|容祖儿|2015演唱会 +rYnyIjr2mu2m 海绵演唱会iso|容祖儿|2015演唱会 +riUz6jV3E32y 海绵演唱会iso|容祖儿|2009黄金十年 +auiEn22Mfa6r 海绵演唱会iso|周慧敏|2018出道30周年演唱会 +77r6jmEbEf2u 海绵演唱会iso|周慧敏|2018出道30周年演唱会 +IFzMBvAFvEbu 海绵演唱会iso|周慧敏|2011出道25周年演唱会 +bMbMRb73qui2 海绵演唱会iso|郑秀文|Gig演唱会 +N7J77jNZ7nEv 海绵演唱会iso|郑秀文|2015演唱会 +QruEjmvqAzie 海绵演唱会iso|郑秀文|2016演唱会 +JvuMRzZRFr6n 海绵演唱会iso|郑秀文|2007演唱会 +B7rQfmimuERf 海绵演唱会iso|郑秀文|2009世界巡回香港站 +UbI7Znr2MJNj 海绵演唱会iso|郑秀文|2019世界巡回演唱会4k +aQf6raIFNfye 海绵演唱会iso|叶倩文|2012完全是你演唱会 +UVnQvq3InMb2 海绵演唱会iso|许志安|2015演唱会 +iEJNzaIf6Rfe 海绵演唱会iso|许志安|2011红磡25周年 +bYB7BfzAJFz2 海绵演唱会iso|林峯|2016演唱会1 +3Qj2uyveEvq2 海绵演唱会iso|林峯|2016演唱会2 +6JNVBvFVfmIn 海绵演唱会iso|李克勤||2005-2006演奏厅1 +73AZFbZRvARb 海绵演唱会iso|李克勤|2005-2006演奏厅2 +uuM7raZfA732 海绵演唱会iso|久石让|武道馆 +Azmei2vmyaea 海绵演唱会iso|陈洁仪X赵增熹 +6NzqaqbEvqam 海绵演唱会iso|陈洁丽 +VZBbEvAFnm22 海绵演唱会iso|罗志祥|2014极限拼图 +bq6732JjqQF3 海绵演唱会iso|苏打绿|2015故事未了 +BriA73jIzmM3 海绵演唱会iso|苏打绿|2013当我们一起走过演唱会 +MryIRnURjuQn 海绵演唱会iso|林子祥|40周年演唱会2016 +FbeaeeuqmuMn 海绵演唱会iso|林子祥|2013林子祥&赵增熹演唱会 +uYnqIneI7Z7z 海绵演唱会iso|林子祥|2010音乐会 +VNjyMnzA3uQj 海绵演唱会iso|张敬轩|2011交响音乐会 +auEBzaeeyEji 海绵演唱会iso|张敬轩|2009音乐会 +f2AjEjZVnqYv 海绵演唱会iso|张敬轩|2008演唱会 +niu63iAjEzya 海绵演唱会iso|田馥甄|2017演唱会 +YfI3MzvYBJ3u 海绵演唱会iso|2013宝丽金群星永恒金曲 +BfUBNnRJN7fa 海绵演唱会iso|2012浮想联翩群星追忆张国荣演唱会 +36BV7ruauiUf 海绵演唱会iso|周华健|2015世界巡回台北站 +qE32yy2UJFja 海绵演唱会iso|温拿乐队|2016演唱会1 +yMJvmuNVVFFf 海绵演唱会iso|温拿乐队|2016演唱会2 +3IBjInVNz6ji 海绵演唱会iso|张信哲|2016还爱光年演唱会 +naEn2qq6NzYz 海绵演唱会iso|谭咏麟&杜丽莎 +ZJ3ue2Z3QbYr 海绵演唱会iso|邓紫棋|2013世界巡回演唱会 +iu2uem2A3IFj 海绵演唱会iso|邓紫棋|红馆演唱会2011 +IFBNVv7biU7z 海绵演唱会iso|李知恩|2019巡回演唱会1 +U3YBzmInUfyy 海绵演唱会iso|李知恩|2019巡回演唱会2 +zmMvmiMZj2Az 海绵演唱会iso|林俊杰|实验专辑-和自己对话录音纪实 +mQzqIvbeUV7n 海绵演唱会iso|卫兰 +UjUzmemM3aay 海绵演唱会iso|巫启贤 +aEvMzeJVBBBr 海绵演唱会iso|林宥嘉|神游世界巡回演唱会 +mamE7bZBFjuy 海绵演唱会iso|宝儿|2022出道20周年 +e2Ajae6JriIz 海绵演唱会iso|宋祖英|台北小巨蛋 +n63INvQbmqua 海绵演唱会iso|宋祖英|肯尼迪演唱会 +IFjQJzBJNB7f 海绵演唱会iso|宋祖英|北京鸟巢演唱会 +rMB3Y3jiUzyi 海绵演唱会iso|侧田|2011演唱会 +QJziQnZRFzAf 海绵演唱会iso|侧田|2015世界巡回 +mE3EFnIB3Iza 海绵演唱会iso|泳儿|2015音乐会 +NZVraevMnABb 音乐MV合集 diff --git a/lib/XBPQ.jar b/lib/XBPQ.jar new file mode 100644 index 0000000..8b9203d Binary files /dev/null and b/lib/XBPQ.jar differ diff --git a/lib/aliproxy.tar.xz b/lib/aliproxy.tar.xz new file mode 100644 index 0000000..5b3eddd Binary files /dev/null and b/lib/aliproxy.tar.xz differ diff --git a/lib/aliproxy.tar.xz.md5 b/lib/aliproxy.tar.xz.md5 new file mode 100644 index 0000000..ca89edb --- /dev/null +++ b/lib/aliproxy.tar.xz.md5 @@ -0,0 +1 @@ +c2cff5531361fb7bbc9c2f39e136590d diff --git a/lib/alishare.ebook.txt b/lib/alishare.ebook.txt new file mode 100644 index 0000000..94a7316 --- /dev/null +++ b/lib/alishare.ebook.txt @@ -0,0 +1,77 @@ +zAajGfX1cxE 中信出版图书 1 +kgCYrLpLgiZ 机械工业出版社6000册 1 +EmhjMiwBrNj 清华大学出版社2237册 1 +3XEmnpcKYwd 新知文库 1 +XpsFL9BcCbN 北京国家图书馆 1 +BPkNEszAXjr 一万本图书馆PDF 1 +STfm58hKPBu 湖湘文库 1 +LZvTLPW8fbF 亲子教育 +gfsRY67BRcb 历史传记 +vbULbViB6jg 婚恋两性 +nk24tt7C2nt 婚恋家庭 +nk24tt7C2nt 婚恋家庭 +LYHR2C7oGrN 官场商战 +h3qDZvSNJaH 影视时尚 +1Wq86hBek8P 心理励志 +erF8fL1E9SR 思想文化 +qzBiRPyuKCU 恐怖悬疑 +5b6xedKYxDB 推理侦探 +5Do3YzWGsdT 文学名著 +h8nj4ZxEhTV 旅游休闲 +W8uEmn2UEm4 武侠仙侠 +C6FdSeriQAg 武侠小说 +Q2Uyg5yXCTp 漫画绘本 +4CP6kP21RE1 玄幻奇幻 +AbmTF4S9R2u 玄幻小说 +S2r9Q7dofdw 社科经典 +Tkz17pPJ54n 科幻小说 +ZCma3m8tkqu 综合书籍 +PJc6BcfuRwn 美容养生 +1vp4gtVqHVV 职场理财 +TMXRKiUGzMe 青春校园 +vEdkxEJocnb 科教类 +AM8mtK1botT 平台类 +NkKQg1a7qM9 小说类 +1th3c74q1cu 漫画类 +auNq9mXGJ8N 新书类 +xPX311pWQP8 杂志类 +43sAoXEduDZ 我的小书屋01 +Rj2xnX7GLUW 我的小书屋02 +XMbjpWzN4Jj 我的小书屋03 +V69EqCbMHST 我的小书屋04 +zpRyQG5Sykg 我的小书屋05 +6TZTQve3haL 我的小书屋06 +FsWBsXLDyMn 全球推理小说大集合 1 +D9fe45j1eHa ePUBee整站电子书库01 +ct8cPiYpscj ePUBee整站电子书库02 +a9rZPQKHfDu ePUBee整站电子书库03 +h45mCPUZc3E ePUBee整站电子书库04 +bhDAK42pnSU ePUBee整站电子书库05 +jdPrqXLaXBU ePUBee整站电子书库06 +3exRgUFUPrv ePUBee整站电子书库07 +AMY3umXHQrH ePUBee整站电子书库08 +16ryTfdGrAP ePUBee整站电子书库09 +5W8EsnTsCRN ePUBee整站电子书库10 +D72AZeTnTVL ePUBee整站电子书库11 +Z4SyuRZZj8Z ePUBee整站电子书库12 +xMCNaJvx7tk ePUBee整站电子书库13 +MK7LwGqokKF ePUBee整站电子书库14 +p9Lnskk2e2L ePUBee整站电子书库15 +pKEdszFRn2v ePUBee整站电子书库16 +7fKJ3VC7yWg ePUBee整站电子书库17 +QXMJVQzPJzG ePUBee整站电子书库18 +eTbXLxV5HZ3 ePUBee整站电子书库19 +wvdQyRer63P ePUBee整站电子书库20 +LrLMDHopskR ePUBee整站电子书库21 +jr4xL8NvHW9 ePUBee整站电子书库22 +5tPVRsXdBk4 ePUBee整站电子书库23 +iMBCRc32UNM ePUBee整站电子书库24 +S8NodisNHcU ePUBee整站电子书库25 +4TRTbyZrKki ePUBee整站电子书库26 +iYZMj7CFPks 广东省立中山图书馆「A-G」 +unEV8t3QfTc 广东省立中山图书馆「H-K」 +uT7hzi7CnvP 广东省立中山图书馆「L-N」 +U2fcieUVKuY 广东省立中山图书馆「O-Q」 +h3s9tXNJxQK 广东省立中山图书馆「R-T」 +SXZ17uS7oju 广东省立中山图书馆「U-X」 +GwnQxogFss3 广东省立中山图书馆「Y-Z」 diff --git a/lib/alishare.txt b/lib/alishare.txt new file mode 100644 index 0000000..520052d --- /dev/null +++ b/lib/alishare.txt @@ -0,0 +1,21 @@ +self 我的阿里云盘 +cdqCsAWD9wC?pwd=6666 Tacit0924-总合集 1 updated_at DESC +ZHNChQfiPfk 杜比视界电影 +e27BPgDwxeA 4KREMUX电影 +XUH7r6BZuML 老K分享|电影1剧集1 +qZ4f1i2EFW2 老K分享|电影2剧集2 +ohJ68NV7iFw 老K分享|高清美剧10G一集 +4ydLxf7VgH7 平凡中的 1 +gf2GebXnZHh 诺兰全集 1 +dieULBdYP3D YYDSVIP|YYDSVIP 1 +UuHi9PeYSVz YYDSVIP|YYDSVip-综艺 +v9To3HC6vhs YYDSVIP|YYDSVip-综合 +uWa9gbM3RJ7 优源阁-资源总合集 1 +ftMhRaKUfYp 掌灯者|港剧 +MLWPRHRt9W3 掌灯者|台剧 +8Fg4TNsd2A2 掌灯者|大陆剧1 +ar8Kg9azw1S 掌灯者|大陆剧2 +GMYSz3AHFaA 掌灯者|大陆剧3 +cmy3KCTRpFA 合集|李连杰电影合集 +hMsDJ6dsGxQ 合集|成龙电影合集 +fSNHaYST47s 合集|纪录片合集2 diff --git a/lib/alist.min.js b/lib/alist.min.js new file mode 100644 index 0000000..ddd4adf --- /dev/null +++ b/lib/alist.min.js @@ -0,0 +1 @@ +import{distance}from"./mod.js";import{sortListByCN}from"./sortName.js";String.prototype.rstrip=function(chars){let regex=new RegExp(chars+"$");return this.replace(regex,"")};var showMode="single";var searchDriver="";var limit_search_show=200;var search_type="";var detail_order="name";var playRaw=1;const request_timeout=5e3;const VERSION="alist v2/v3 20221223";const UA="Mozilla/5.0";function print(any){any=any||"";if(typeof any=="object"&&Object.keys(any).length>0){try{any=JSON.stringify(any);console.log(any)}catch(e){console.log(typeof any+":"+any.length)}}else if(typeof any=="object"&&Object.keys(any).length<1){console.log("null object")}else{console.log(any)}}function getHome(url){if(!url){return""}let tmp=url.split("//");url=tmp[0]+"//"+tmp[1].split("/")[0];try{url=decodeURIComponent(url)}catch(e){}return url}const http=function(url,options={}){if(options.method==="POST"&&options.data){options.body=JSON.stringify(options.data);options.headers=Object.assign({"content-type":"application/json"},options.headers)}options.timeout=request_timeout;if(!options.headers){options.headers={}}let keys=Object.keys(options.headers).map(it=>it.toLowerCase());if(!keys.includes("referer")){options.headers["Referer"]=getHome(url)}if(!keys.includes("user-agent")){options.headers["User-Agent"]=UA}try{const res=req(url,options);res.json=()=>res&&res.content?JSON.parse(res.content):null;res.text=()=>res&&res.content?res.content:"";return res}catch(e){return{json(){return null},text(){return""}}}};["get","post"].forEach(method=>{http[method]=function(url,options={}){return http(url,Object.assign(options,{method:method.toUpperCase()}))}});const __drives={};function isMedia(file){return/\.(dff|dsf|mp3|aac|wav|wma|cda|flac|m4a|mid|mka|mp2|mpa|mpc|ape|ofr|ogg|ra|wv|tta|ac3|dts|tak|webm|wmv|mpeg|mov|ram|swf|mp4|avi|rm|rmvb|flv|mpg|mkv|m3u8|ts|3gp|asf)$/.test(file.toLowerCase())}function get_drives_path(tid){const index=tid.indexOf("$");const name=tid.substring(0,index);const path=tid.substring(index+1);return{drives:get_drives(name),path:path}}function get_drives(name){const{settings,api,server}=__drives[name];if(settings.v3==null){settings.v3=false;const data=http.get(server+"/api/public/settings").json().data;if(Array.isArray(data)){settings.title=data.find(x=>x.key==="title")?.value;settings.v3=false;settings.version=data.find(x=>x.key==="version")?.value;settings.enableSearch=data.find(x=>x.key==="enable search")?.value==="true"}else{settings.title=data.title;settings.v3=true;settings.version=data.version;settings.enableSearch=false}api.path=settings.v3?"/api/fs/list":"/api/public/path";api.file=settings.v3?"/api/fs/get":"/api/public/path";api.search=settings.v3?"/api/public/search":"/api/public/search"}return __drives[name]}function init(ext){console.log("当前版本号:"+VERSION);let data;if(typeof ext=="object"){data=ext;print("alist ext:object")}else if(typeof ext=="string"){if(ext.startsWith("http")){let alist_data=ext.split(";");let alist_data_url=alist_data[0];limit_search_show=alist_data.length>1?Number(alist_data[1])||limit_search_show:limit_search_show;search_type=alist_data.length>2?alist_data[2]:search_type;print(alist_data_url);data=http.get(alist_data_url).json()}else{print("alist ext:json string");data=JSON.parse(ext)}}let drives=[];if(Array.isArray(data)&&data.length>0&&data[0].hasOwnProperty("server")&&data[0].hasOwnProperty("name")){drives=data}else if(!Array.isArray(data)&&data.hasOwnProperty("drives")&&Array.isArray(data.drives)){drives=data.drives.filter(it=>it.type&&it.type==="alist"||!it.type)}print(drives);searchDriver=(drives.find(x=>x.search)||{}).name||"";if(!searchDriver&&drives.length>0){searchDriver=drives[0].name}print(searchDriver);drives.forEach(item=>{let _path_param=[];if(item.params){_path_param=Object.keys(item.params);_path_param.sort((a,b)=>a.length-b.length)}if(item.password){let pwdObj={password:item.password};if(!item.params){item.params={"/":pwdObj}}else{item.params["/"]=pwdObj}_path_param.unshift("/")}__drives[item.name]={name:item.name,server:item.server.endsWith("/")?item.server.rstrip("/"):item.server,startPage:item.startPage||"/",showAll:item.showAll===true,search:!!item.search,params:item.params||{},_path_param:_path_param,settings:{},api:{},getParams(path){const key=this._path_param.find(x=>path.startsWith(x));return Object.assign({},this.params[key],{path:path})},getPath(path){const res=http.post(this.server+this.api.path,{data:this.getParams(path)}).json();return this.settings.v3?res.data.content:res.data.files},getFile(path){let raw_url=this.server+"/d"+path;raw_url=encodeURI(raw_url);let data={raw_url:raw_url,raw_url1:raw_url};if(playRaw===1){try{const res=http.post(this.server+this.api.file,{data:this.getParams(path)}).json();data=this.settings.v3?res.data:res.data.files[0];if(!this.settings.v3){data.raw_url=data.url}data.raw_url1=raw_url;return data}catch(e){return data}}else{return data}},isFolder(data){return data.type===1},isVideo(data){return this.settings.v3?data.type===2||data.type===0||data.type===3:data.type===3||data.type===0||data.type===4},is_subt(data){if(data.type===1){return false}const ext=/\.(srt|ass|scc|stl|ttml)$/;return ext.test(data.name)},getPic(data){let pic=this.settings.v3?data.thumb:data.thumbnail;return pic||(this.isFolder(data)?"http://img1.3png.com/281e284a670865a71d91515866552b5f172b.png":"")},getTime(data,isStandard){isStandard=isStandard||false;try{let tTime=data.updated_at||data.time_str||data.modified||"";let date="";if(tTime){tTime=tTime.split("T");date=tTime[0];if(isStandard){date=date.replace(/-/g,"/")}tTime=tTime[1].split(/Z|\./);date+=" "+tTime[0]}return date}catch(e){return""}}}});print("init执行完毕")}function home(filter){let classes=Object.keys(__drives).map(key=>({type_id:`${key}$${__drives[key].startPage}`,type_name:key,type_flag:"1"}));let filter_dict={};let filters=[{key:"order",name:"排序",value:[{n:"名称⬆️",v:"vod_name_asc"},{n:"名称⬇️",v:"vod_name_desc"},{n:"中英⬆️",v:"vod_cn_asc"},{n:"中英⬇️",v:"vod_cn_desc"},{n:"时间⬆️",v:"vod_time_asc"},{n:"时间⬇️",v:"vod_time_desc"},{n:"大小⬆️",v:"vod_size_asc"},{n:"大小⬇️",v:"vod_size_desc"},{n:"无",v:"none"}]},{key:"show",name:"播放展示",value:[{n:"单集",v:"single"},{n:"全集",v:"all"}]}];classes.forEach(it=>{filter_dict[it.type_id]=filters});print("----home----");print(classes);return JSON.stringify({class:classes,filters:filter_dict})}function homeVod(params){let _post_data={pageNum:0,pageSize:100};let _post_url="https://pbaccess.video.qq.com/trpc.videosearch.hot_rank.HotRankServantHttp/HotRankHttp";let data=http.post(_post_url,{data:_post_data}).json();let _list=[];try{data=data["data"]["navItemList"][0]["hotRankResult"]["rankItemList"];data.forEach(it=>{_list.push({vod_name:it.title,vod_id:"msearch:"+it.title,vod_pic:"https://avatars.githubusercontent.com/u/97389433?s=120&v=4",vod_remarks:it.changeOrder})})}catch(e){print("Alist获取首页推荐发送错误:"+e.message)}return JSON.stringify({list:_list})}function category(tid,pg,filter,extend){let orid=tid.replace(/#all#|#search#/g,"");let{drives,path}=get_drives_path(orid);const id=orid.endsWith("/")?orid:orid+"/";const list=drives.getPath(path);let subList=[];let vodFiles=[];let allList=[];let fl=filter?extend:{};if(fl.show){showMode=fl.show}list.forEach(item=>{if(drives.is_subt(item)){subList.push(item.name)}if(!drives.showAll&&!drives.isFolder(item)&&!drives.isVideo(item)){return}let vod_time=drives.getTime(item);let vod_size=get_size(item.size);let remark=vod_time.split(" ")[0].substr(3)+"\t"+vod_size;let vod_id=id+item.name+(drives.isFolder(item)?"/":"");if(showMode==="all"){vod_id+="#all#"}print(vod_id);const vod={vod_id:vod_id,vod_name:item.name.replaceAll("$","").replaceAll("#",""),vod_pic:drives.getPic(item),vod_time:vod_time,vod_size:item.size,vod_tag:drives.isFolder(item)?"folder":"file",vod_remarks:drives.isFolder(item)?remark+" 文件夹":remark};if(drives.isVideo(item)){vodFiles.push(vod)}allList.push(vod)});if(vodFiles.length===1&&subList.length>0){let sub;if(subList.length===1){sub=subList[0]}else{let subs=JSON.parse(JSON.stringify(subList));subs.sort((a,b)=>{let a_similar=(a.includes("chs")?100:0)+levenshteinDistance(a,vodFiles[0].vod_name);let b_similar=(b.includes("chs")?100:0)+levenshteinDistance(b,vodFiles[0].vod_name);if(a_similar>b_similar){return 1}else{return-1}});sub=subs.slice(-1)[0]}vodFiles[0].vod_id+="@@@"+sub;vodFiles[0].vod_remarks+="🏷️"}else{vodFiles.forEach(item=>{const lh=0;let sub;subList.forEach(s=>{const l=levenshteinDistance(s,item.vod_name);if(l>60&&l>lh){sub=s}});if(sub){item.vod_id+="@@@"+sub;item.vod_remarks+="🏷️"}})}if(fl.order){let key=fl.order.split("_").slice(0,-1).join("_");let order=fl.order.split("_").slice(-1)[0];print(`排序key:${key},排序order:${order}`);if(key.includes("name")){detail_order="name";allList=sortListByName(allList,key,order)}else if(key.includes("cn")){detail_order="cn";allList=sortListByCN(allList,"vod_name",order)}else if(key.includes("time")){detail_order="time";allList=sortListByTime(allList,key,order)}else if(key.includes("size")){detail_order="size";allList=sortListBySize(allList,key,order)}else if(fl.order.includes("none")){detail_order="none";print("不排序")}}else{if(detail_order!=="none"){allList=sortListByName(allList,"vod_name","asc")}}print("----category----"+`tid:${tid},detail_order:${detail_order},showMode:${showMode}`);return JSON.stringify({page:1,pagecount:1,limit:allList.length,total:allList.length,list:allList})}function getAll(otid,tid,drives,path){try{const content=category(tid,null,false,null);const isFile=isMedia(otid.replace(/#all#|#search#/g,"").split("@@@")[0]);const{list}=JSON.parse(content);let vod_play_url=[];list.forEach(x=>{if(x.vod_tag==="file"){let vid=x.vod_id.replace(/#all#|#search#/g,"");vod_play_url.push(`${x.vod_name}$${vid.substring(vid.indexOf("$")+1)}`)}});const pl=path.split("/").filter(it=>it);let vod_name=pl[pl.length-1]||drives.name;if(vod_name===drives.name){print(pl)}if(otid.includes("#search#")){vod_name+="[搜]"}let vod={vod_id:otid,vod_name:vod_name,type_name:"文件夹",vod_pic:"https://avatars.githubusercontent.com/u/97389433?s=120&v=4",vod_content:tid,vod_tag:"folder",vod_play_from:drives.name,vod_play_url:vod_play_url.join("#"),vod_remarks:drives.settings.title};print("----detail1----");print(vod);return JSON.stringify({list:[vod]})}catch(e){print(e.message);let list=[{vod_name:"无数据,防无限请求",type_name:"文件夹",vod_id:"no_data",vod_remarks:"不要点,会崩的",vod_pic:"https://ghproxy.com/https://raw.githubusercontent.com/hjdhnx/dr_py/main/404.jpg",vod_actor:e.message,vod_director:tid,vod_content:otid}];return JSON.stringify({list:list})}}function detail(tid){let isSearch=tid.includes("#search#");let isAll=tid.includes("#all#");let otid=tid;tid=tid.replace(/#all#|#search#/g,"");let isFile=isMedia(tid.split("@@@")[0]);print(`isFile:${tid}?${isFile}`);let{drives,path}=get_drives_path(tid);print(`drives:${drives},path:${path},`);if(path.endsWith("/")){return getAll(otid,tid,drives,path)}else{if(isSearch&&!isFile){return getAll(otid,tid,drives,path)}else if(isAll){let new_tid;if(isFile){new_tid=tid.split("/").slice(0,-1).join("/")+"/"}else{new_tid=tid}print(`全集模式 tid:${tid}=>tid:${new_tid}`);let{drives,path}=get_drives_path(new_tid);return getAll(otid,new_tid,drives,path)}else if(isFile){let paths=path.split("@@@");let vod_name=paths[0].substring(paths[0].lastIndexOf("/")+1);let vod_title=vod_name;if(otid.includes("#search#")){vod_title+="[搜]"}let vod={vod_id:otid,vod_name:vod_title,type_name:"文件",vod_pic:"https://avatars.githubusercontent.com/u/97389433?s=120&v=4",vod_content:tid,vod_play_from:drives.name,vod_play_url:vod_name+"$"+path,vod_remarks:drives.settings.title};print("----detail2----");print(vod);return JSON.stringify({list:[vod]})}else{return JSON.stringify({list:[]})}}}function play(flag,id,flags){const drives=get_drives(flag);const urls=id.split("@@@");let vod={parse:0,playUrl:"",url:drives.getFile(urls[0]).raw_url};if(urls.length>=2){const path=urls[0].substring(0,urls[0].lastIndexOf("/")+1);vod.subt=drives.getFile(path+urls[1]).raw_url1}print("----play----");print(vod);return JSON.stringify(vod)}function search(wd,quick){print(__drives);print("可搜索的alist驱动:"+searchDriver);if(!searchDriver||!wd){return JSON.stringify({list:[]})}else{let driver=__drives[searchDriver];wd=wd.split(" ").filter(it=>it.trim()).join("+");print(driver);let surl=driver.server+"/search?box="+wd+"&url=";if(search_type){surl+="&type="+search_type}print("搜索链接:"+surl);let html=http.get(surl).text();let lists=[];try{lists=pdfa(html,"div&&ul&&a")}catch(e){}print(`搜索结果数:${lists.length},搜索结果显示数量限制:${limit_search_show}`);let vods=[];let excludeReg=/\.(pdf|epub|mobi|txt|doc|lrc)$/;let cnt=0;lists.forEach(it=>{let vhref=pdfh(it,"a&&href");if(vhref){vhref=unescape(vhref)}if(excludeReg.test(vhref)){return}if(cnt1024*1024*1024*1024){sz/=1024*1024*1024*1024;filesize="TB"}else if(sz>1024*1024*1024){sz/=1024*1024*1024;filesize="GB"}else if(sz>1024*1024){sz/=1024*1024;filesize="MB"}else if(sz>1024){sz/=1024;filesize="KB"}else{filesize="B"}let sizeStr=sz.toFixed(2)+filesize,index=sizeStr.indexOf("."),dou=sizeStr.substr(index+1,2);if(dou==="00"){return sizeStr.substring(0,index)+sizeStr.substr(index+3,2)}else{return sizeStr}}function levenshteinDistance(str1,str2){return 100-100*distance(str1,str2)/Math.max(str1.length,str2.length)}function naturalSort(options){if(!options){options={}}return function(a,b){if(options.key){a=a[options.key];b=b[options.key]}var EQUAL=0;var GREATER=options.order==="desc"?-1:1;var SMALLER=-GREATER;var re=/(^-?[0-9]+(\.?[0-9]*)[df]?e?[0-9]?$|^0x[0-9a-f]+$|[0-9]+)/gi;var sre=/(^[ ]*|[ ]*$)/g;var dre=/(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/;var hre=/^0x[0-9a-f]+$/i;var ore=/^0/;var normalize=function normalize(value){var string=""+value;return options.caseSensitive?string:string.toLowerCase()};var x=normalize(a).replace(sre,"")||"";var y=normalize(b).replace(sre,"")||"";var xN=x.replace(re,"\0$1\0").replace(/\0$/,"").replace(/^\0/,"").split("\0");var yN=y.replace(re,"\0$1\0").replace(/\0$/,"").replace(/^\0/,"").split("\0");if(!x&&!y)return EQUAL;if(!x&&y)return GREATER;if(x&&!y)return SMALLER;var xD=parseInt(x.match(hre))||xN.length!=1&&x.match(dre)&&Date.parse(x);var yD=parseInt(y.match(hre))||xD&&y.match(dre)&&Date.parse(y)||null;var oFxNcL,oFyNcL;if(yD){if(xDyD)return GREATER}for(var cLoc=0,numS=Math.max(xN.length,yN.length);cLocoFyNcL)return GREATER}return EQUAL}}const sortListByName=(vodList,key,order)=>{if(!key){return vodList}order=order||"asc";return vodList.sort(naturalSort({key:key,order:order,caseSensitive:true}))};const getTimeInt=timeStr=>{return new Date(timeStr).getTime()};const sortListByTime=(vodList,key,order)=>{if(!key){return vodList}let ASCarr=vodList.sort((a,b)=>{a=a[key];b=b[key];return getTimeInt(a)-getTimeInt(b)});if(order==="desc"){ASCarr.reverse()}return ASCarr};const sortListBySize=(vodList,key,order)=>{if(!key){return vodList}let ASCarr=vodList.sort((a,b)=>{a=a[key];b=b[key];return(Number(a)||0)-(Number(b)||0)});if(order==="desc"){ASCarr.reverse()}return ASCarr};export default{init:init,home:home,homeVod:homeVod,category:category,detail:detail,play:play,search:search}; \ No newline at end of file diff --git a/lib/alistjar.example.json b/lib/alistjar.example.json new file mode 100644 index 0000000..967af34 --- /dev/null +++ b/lib/alistjar.example.json @@ -0,0 +1,11 @@ +{ + "drives": [ + { + "name": "alist.jar", + "search": true, + "searchable": true, + "server": "http://192.168.1.1:5678/" + } + ], + "danmu":true +} diff --git a/lib/allinone.tar.xz b/lib/allinone.tar.xz new file mode 100644 index 0000000..f135fa5 Binary files /dev/null and b/lib/allinone.tar.xz differ diff --git a/lib/allinone.tar.xz.md5 b/lib/allinone.tar.xz.md5 new file mode 100644 index 0000000..dc0ed13 --- /dev/null +++ b/lib/allinone.tar.xz.md5 @@ -0,0 +1 @@ +09989a1b89a263c9d97a4ee044a53c45 diff --git a/lib/biptv.txt b/lib/biptv.txt new file mode 100644 index 0000000..74d24eb --- /dev/null +++ b/lib/biptv.txt @@ -0,0 +1,87 @@ +CCTV1,http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226895/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EI0Rkc6neBYgfpoJ1yud8Fw%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNPpqgHe3PQ5GNQoO-yUgA8C%2CEND +CCTV1,http://[2409:8087:1:20:20::29]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226895/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EI0Rkc6neBYgfpoJ1yud8Fw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND +CCTV2,http://otttv.bj.chinamobile.com/PLTV/88888888/224/3221226893/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EcnoJZd_sZxCC6bZYZh4R6g%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND +CCTV3,http://[2409:8087:1:20:20::29]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226456/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E_6GNVcVOz9Xub8CclyMRUg%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNOIR_8g_qYRqpV5wTQqRILi%2CEND +CCTV4,http://[2409:8087:1:20:20::29]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226470/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E0wP1dRMt9qCzHdvA65wh1w%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNMcuN2HH7RLPyPHWOUWhSMk%2CEND +CCTV4,http://[2409:8087:1:20:20::26]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226335/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EBFJ5gRpm8ntK8JEFPZOhLQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND +CCTV5,http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226454/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ErKwB8Qqtvssoy-K7GEgesQ%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNOIR_8g_qYRqpV5wTQqRILi%2CEND +CCTV5+,http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226458/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Em70vyfVI_MkrcLYjHWnqOA%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNNlS0O1LA8iGydXPYujpRue%2CEND +CCTV5+,http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226894/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EevWZ0zmguDsOY_Mf3SM5TA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND +CCTV6,http://[2409:8087:1:20:20::29]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226453/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Ex56LEwufYqPdJkUNYhbNCw%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNOH2PzEhAK60LI_FWtVxfVS%2CEND +CCTV7,http://[2409:8087:1:20:20::2a]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226234/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EutDC7HLJc_gC0YdIDr7oig%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNPOHuulzlCcw92vP3vgYa4n%2CEND +CCTV7,http://[2409:8087:1:20:20::29]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226946/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E2bEV_zkW1hRnWmsZq6rlbw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND +CCTV8,http://[2409:8087:1:20:20::29]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226451/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EO_1NY-UghfdG_S28Bf_FPw%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNO1anuaDcpMt0_BMig72trX%2CEND +CCTV9,http://otttv.bj.chinamobile.com/PLTV/88888888/224/3221226944/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EgdZMBjOTdDWVEgovFkZoew%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND +CCTV10,http://[2409:8087:1:20:20::29]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226449/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EzhRgoBfyoaW0eC2lnTJYAQ%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNOxqyo6ss4VuHKCaIhF4e3B%2CEND +CCTV10,http://[2409:8087:1:20:20::26]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226937/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Egbbk6OxyTS2utbJWm7Qw1w%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND +CCTV11,http://[2409:8087:1:20:20::26]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226334/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E0RcQQbNseiHvFO8XWf466A%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND +CCTV11,http://[2409:8087:1:20:20::2a]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226448/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Eqfhzy1ZrFZrYrATDOB991A%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNOu522yjh6D1Z_dApuOt9eE%2CEND +CCTV12,http://[2409:8087:1:20:20::29]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226228/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E2knJCFLHz_HqfBZXNGeA1A%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNMIlZ5z7o_ym15iMooogSvj%2CEND +CCTV12,http://[2409:8087:1:20:20::29]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226942/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E9nVa4WyKpuJgFy6Zh4TplQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND +CCTV13,http://[2409:8087:1:20:20::29]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226316/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EqHPe9pEEWJ00hz1ArnRZVA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND +CCTV13,http://[2409:8087:1:20:20::2a]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226446/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EU-IJJyzlYeEElWsacI4JKw%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNMT7DWkynQtRPzNDJCOY_C_%2CEND +CCTV14,http://[2409:8087:1:20:20::26]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226229/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Ey_UgKg-_uoDiTW1MNHptPg%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNNLabf3bHEXv4444iiOs_Px%2CEND +CCTV14,http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226947/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EgtTqPYLE5COifF-qvYi2Ig%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND +CCTV15,http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226333/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EWyklhmFh7oMx-lG1tNUcSQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND +CCTV15,http://[2409:8087:1:20:20::29]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226444/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EFQ8BWVFffGkwLTLNv7CwFQ%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNM7I2coCeiP5K0pSIMZqcUB%2CEND +CCTV16,http://[2409:8087:1:20:20::2a]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227002/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EX9goLRw26BM_r54des2PAw%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNPt5W7-RovMDpE-7B-0PhHw%2CEND +CCTV16,http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227002/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EX9goLRw26BM_r54des2PAw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND +CCTV17,http://[2409:8087:1:20:20::29]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226442/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EtihRNVe_x2y1Lgi_XWYeNw%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNOl8OnsD1vPD0mhNmo98J3J%2CEND +CCTV17,http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226318/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EEkwQnoHNXRDb-IayWakK1A%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND +CGTN,http://[2409:8087:1:20:20::29]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226443/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Ebu8iDniP_aAtg-APxKXKAA%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNOeLGc8fhipDF_paLm6VUd-%2CEND +北京卫视,http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226900/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EcYPi33WFyhvd6SjmqUKhJg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND +北京卫视,http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226436/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ElMQ3ov45VmhzipweN5VstQ%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNPg_yZ8DZHTaSU92MIl_o3b%2CEND +深圳卫视,http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226245/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EFvxuZ6Kfg6J67sArVd0LuA%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNO9YxM-C8gPFvQRk47-h2ok%2CEND +湖北卫视,http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226240/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ExfU_RR0RQok0w_xd7h22CQ%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNPVnDV2fEBphgm3TP7hAHBx%2CEND +东方卫视,http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226237/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EuOKqNaOUqqiJjXIfPoRPMQ%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNNeqgYr1eA9ESriCOsl_DTz%2CEND +浙江卫视,http://[2409:8087:1:20:20::26]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226247/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Eo6BokfP3WkB3SIXSrgvRBA%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNP3w4GkbU9L7iRQ8H2vgzhF%2CEND +吉林卫视,http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226533/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EicY_6znuOTlmMeE15TFEig%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNNNUZpDp9cPVsM_M_ftJRVM%2CEND +江苏卫视,http://[2409:8087:1:20:20::2a]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226242/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EJT6eqtJpcKnNhyUS90EOgw%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNN1SxXwCt0S69Lq27ZMJpfR%2CEND +山东卫视,http://[2409:8087:1:20:20::2a]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226244/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EycMz-PML_dQW8iLcNBkw7g%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNMYCYLC04QAM6EBli1wTuET%2CEND +黑龙江卫视,http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226239/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EEHwpSHKc5p-bHJfhpIWFig%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNM5Y8rTELLykZJHp-bmY2YW%2CEND +东南卫视,http://[2409:8087:1:20:20::2a]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226496/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EkZUfG47p98m2PZiCsgkhyQ%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNM5EcQIH6BiwZavlhPLb4oJ%2CEND +江西卫视,http://[2409:8087:1:20:20::29]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226243/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EfPpe3gkzCutYMoqOQQZNzA%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNMVuW7agCgULnvgy9rhLyCH%2CEND +云南卫视,http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226543/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EzQy9f4DIExLCs810r0Q6Kw%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNO_hnHaWpTsMQwR98VJGduo%2CEND +辽宁卫视,http://[2409:8087:1:20:20::26]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226488/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E0dsu8dOBmGQQO7fSrvySew%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNN4l9PIxeExdzsncIMJiPZb%2CEND +重庆卫视,http://[2409:8087:1:20:20::26]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226518/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Ey-ITbF7am-eD_R60rK2QcQ%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNMWkDi37K3eowQvLymiiLyV%2CEND +山西卫视,http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226531/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EokFa56wMKUpB1vaIjEe92A%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNPoj5DNJHruOghC7vAQxinJ%2CEND +海南卫视,http://[2409:8087:1:20:20::29]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226574/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EZOP0PLu1-XG8_Ae0lTe9HQ%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNODcjESMU4f6yMuMuOuQbie%2CEND +安徽卫视,http://[2409:8087:1:20:20::2a]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226490/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EcN5s_AlHugvAv9Pda6f9fA%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNOtRTFrO5eKiKNV40gMGHaS%2CEND +甘肃卫视,http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226545/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EPxObabIs3mLyPmSf2HHtqQ%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNNBE3K16ZfzYGIqbP6z6cGJ%2CEND +青海卫视,http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226529/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Ege4qzvU2ax15UdL3NFQ7AQ%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNNdiWnhjH1amCOGECUhABr9%2CEND +山东教育卫视[785*576],http://[2409:8087:1:20:20::26]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226526/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EEtk94qghXphElKOQlUC-Yw%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNOpyxkKQ6N6FjQz-LrJwo0o%2CEND +宁夏卫视,http://[2409:8087:1:20:20::26]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226528/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E9-jWxE6tfiz7aO7MvbCY7Q%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNMi3qn27U9rBeXpVrJ8eLy7%2CEND +内蒙古卫视,http://[2409:8087:1:20:20::26]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226530/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EHHMwHAFmEx4xxtZRlWhCrg%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNMZe-zTYLW-Yz0RcFLVr37n%2CEND +陕西卫视,http://[2409:8087:1:20:20::26]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226532/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E6sNSqmLCqLFl_AJPBXp1qA%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNO6b4uKEI14SNy0LDiw52LH%2CEND +广西卫视,http://[2409:8087:1:20:20::26]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226534/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EpjsBggKPaCw3f-xlBWZWaQ%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNMJYhPE64lykNkIsypBRZqO%2CEND +厦门卫视[785*576],http://[2409:8087:1:20:20::26]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226542/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E0HuqirkTe1cAUljwazjNGw%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNMvSOYesmmWPPy5i3xS4Rsb%2CEND +三沙卫视,http://[2409:8087:1:20:20::26]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226544/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Eb2dn60YQRxhB5rAyOnrv0g%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNO_hnHaWpTsMQwR98VJGduo%2CEND +新疆卫视,http://[2409:8087:1:20:20::26]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226546/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ETtoZKRqwsL9SQjr1A0iH5g%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNMREPnBLSH3b8pR7cnmo9am%2CEND +西藏卫视,http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226527/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EmHuqUIe0F51C4h6xZanhig%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNMi3qn27U9rBeXpVrJ8eLy7%2CEND +兵团卫视,http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226541/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ESv-rH0nF41q6pxKZKeRnNA%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNN-56c_rnHTXQA4R-D0Dlau%2CEND +延边卫视[1024*576],http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227045/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Eq0D3NdTUN7FuRzr8eJsbQA%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNONS2RAhxb5u6NYaMGGM23S%2CEND +康巴卫视[1024*576],http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227027/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EkHMvBpWz4rccMxNvSRekpQ%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNPtFfVFX0AVycM8b4Xmbcl4%2CEND +嘉佳卡通,http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226539/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EQDRyt1jaDU7f52NwPN526A%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNOLcRNi6C1PMX5tGrYl_SiR%2CEND +茶频道,http://[2409:8087:1:20:20::26]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226548/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Ec1XXmbKOEhI6pFYCxtVG9A%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNOD3hCDGl7mDB_HDsnRfhB2%2CEND +快乐垂钓,http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226549/1.m3u8?GuardEncType=2&accountinfo=~~V2.0~RHz0NOpqUZZN1Iz6lVLkkg~_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNNSiF8rKF1Pn2LepKMJ2cEG%2CEND +超级电影,http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226233/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EfPRR4mbRWhkCFuUCVm9THg%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNM4kysjLk_woYMRnu35KtBV%2CEND +超级综艺,http://[2409:8087:1:20:20::26]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226231/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Ejm-KqHfTZezbm9C-325YiA%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNNnfpAUC20DSCXUyGpDggnK%2CEND +超级体育,http://[2409:8087:1:20:20::26]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226232/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Eg-EQHTrpbCOxNSgnFRbr4w%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNMNhcQPODGVtsSVKlB7CbAh%2CEND +金牌综艺,http://[2409:8087:1:20:20::2a]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227004/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EkcfszuSJNo6WZ8h7xrIswA%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNMWi_zfgUXV5YnB6haFF-C2%2CEND +北京IPTV 4K,http://[2409:8087:1:20:20::26]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226550/1.m3u8?GuardEncType=2&accountinfo=~~V2.0~e2qS8h6u-xp3gd50vNr1sw~_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNPPFD3HVWEytEVyliOxehfe%2CEND +北京国际,http://[2409:8087:1:20:20::2a]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226510/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EIfgL7tTUNqHAIdgvKuwj8A%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNPr9j5nfyiWS_jEXD6m401A%2CEND +北京新闻,http://[2409:8087:1:20:20::2a]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226437/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EncK5uEAdYwWMsf8WJWI1mQ%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNO_LSIQh_h2P54Cz-MqgJqC%2CEND +北京文艺,http://[2409:8087:1:20:20::29]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226440/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EWrJcgMpdGPvZavpf4dmmrQ%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNNhmwDsUZnvQgU5E5wiGA2g%2CEND +北京体育休闲,http://[2409:8087:1:20:20::29]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226438/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EeVAybrHg955d_IRT9e_uHQ%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNMLCKqkSfuGOusJwBMwlCbz%2CEND +北京影视,http://[2409:8087:1:20:20::2a]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226433/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EygquRbh9L0wUPRY53fsZWw%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNO62IynDcU1yYDL1b4Xte8T%2CEND +北京生活,http://[2409:8087:1:20:20::2a]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226514/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Es-PVNcPJsjr_oBdcXGT40g%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNMWvZ0r6eMXcXJOGrCpJiq1%2CEND +北京财经,http://[2409:8087:1:20:20::2a]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226516/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Eh9_SEkmWeMdS1TMnIILZgg%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNPIiicEW7OIvk1s-X-PXHqO%2CEND +北京纪实科教,http://[2409:8087:1:20:20::29]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226434/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Ejj3PtVjzl6ZzFdM-Vi1dmQ%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNPJa61jREJv4ZfZigyrxX0U%2CEND +北京IPTV 淘电影,http://[2409:8087:1:20:20::26]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226552/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EXOsrWMA-UCdUl1hQSR9EKw%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNNg3bzRax0E9tLmO9xgXVx8%2CEND +北京IPTV 淘剧场,http://[2409:8087:1:20:20::26]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226553/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EQaJ92NID2SpQlY6_VJVogg%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNOuQYJeiYEeFWTkFfE86Vq-%2CEND +北京IPTV 淘娱乐,http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226551/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Ex0efg9fpenP8E8lWJUb5Lg%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNNg3bzRax0E9tLmO9xgXVx8%2CEND +北京IPTV 淘BABY,http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226554/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EN0sbBMpQv4sLsW5foy3YfA%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNNg3bzRax0E9tLmO9xgXVx8%2CEND +北京IPTV 萌宠TV,http://[2409:8087:1:20:20::26]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226555/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E_PpxWPtvSZRFtu_Ged_-vQ%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNO0istnBuoA2R9ODSCqyIyS%2CEND +中国教育1台,http://[2409:8087:1:20:20::2a]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226494/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EB8MrpAzJ_Bw12HHVBcZO6g%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNONWWecbSKZXNjh_5hExtTC%2CEND +中国教育2台[785*576],http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226537/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E7AxXs4eTU2oiWrhopr9sHw%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNNxsM0Bor098BJglrhfEQTl%2CEND +中国教育4台[785*576],http://[2409:8087:1:20:20::26]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226557/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EBzZToIaOOoaa_jAUfhUQHQ%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNOD9BEmVSNbqSQpqXZxnxbk%2CEND diff --git a/lib/bttt.json b/lib/bttt.json new file mode 100644 index 0000000..259c4e4 --- /dev/null +++ b/lib/bttt.json @@ -0,0 +1,71 @@ +{ + "规则名": "BT天堂", + "规则作者": "", + "请求头参数": "PC_UA", + "网页编码格式": "UTF-8", + "图片是否需要代理": "0", + "是否开启获取首页数据": "1", + "首页推荐链接": "https://www.bttt11.com", + "首页列表数组规则": "body&&.ul-imgtxt1", + "首页片单列表数组规则": "li", + "首页片单是否Jsoup写法": "1", + "首页片单标题": "h3&&Text", + "首页片单链接": "a&&href", + "首页片单图片": "img&&src", + "首页片单副标题": "span,-1&&Text", + "首页片单链接加前缀": "https://www.bt-tt.com", + "首页片单链接加后缀": "", + "分类起始页码": "0", + "分类链接": "https://www.bttt11.com/www.bt-tt.com/html/page-{cateId}-{catePg}.html", + //"分类链接": "https://www.clgod.xyz/list/{catePg}-{cateId}-0-0.html", + "分类名称": "畅影大陆电影&畅影港台电影&畅影欧美电影&畅影欧美剧&畅影日韩剧&畅影日韩电影&畅影动漫&畅影亚太剧&畅影亚太电影&畅影综艺&畅影纪录片", + "分类名称替换词": "4&3&1&6&7&2&11&10&5&12&13", + //"分类名称": "电影&动作&灵异&奇幻&宗教&励志&犯罪&功夫&喜剧&黑色&幽默&爱情&香港&纪录片&灾难&亲情&暴力&僵尸&丧尸&悬疑&人性&惊悚&血腥&武侠&剧情&历史&战争&经典&漫画&改编&恐怖&穿越&青春&黑帮&文艺&浪漫&同志&冒险&动画&演唱会", + //"分类名称替换词": "0&1&2&3&4&5&6&7&8&10&11&12&1315&16&17&18&19&20&21&22&23&24&25&27&28&29&30&31&32&33&34&35&36&37&38&39&40&41&42", + "筛选数据": {}, + "分类截取模式": "1", + "分类列表数组规则": ".ul-imgtxt2&&li", + "分类片单是否Jsoup写法": "1", + "分类片单标题": "h3&&Text", + "分类片单链接": "a&&href", + "分类片单图片": "img&&src", + "分类片单副标题": "span,-1--a&&Text!更新时间:", + "分类片单链接加前缀": "https://www.bt-tt.com", + "分类片单链接加后缀": "", + "搜索请求头参数": "User-Agent$PC_UA", + "搜索链接": "https://www.bt-tt.com/e/search/;post", + "POST请求数据": "show=title,newstext&keyboard={wd}&searchtype=影视搜索", + "搜索截取模式": "1", + "搜索列表数组规则": ".ul-imgtxt2&&li", + "搜索片单是否Jsoup写法": "1", + "搜索片单图片": "img&&src", + "搜索片单标题": "h3&&Text", + "搜索片单链接": "a&&href", + "搜索片单副标题": "span,-1--a&&Text!更新时间:", + "搜索片单链接加前缀": "https://www.bt-tt.com", + "搜索片单链接加后缀": "", + "链接是否直接播放": "0", + "直接播放链接加前缀": "", + "直接播放链接加后缀": "", + "直接播放直链视频请求头": "", + "详情是否Jsoup写法": "0", + "类型详情": "

    ◎类  别&&

    ", + "年代详情": "

    ◎年  代&&

    ", + "地区详情": "

    ◎产  地&&

    ", + "演员详情": "", + "简介详情": "", + "线路列表数组规则": "", + "线路标题": "", + "播放列表数组规则": "body&&.container", + "选集列表数组规则": "a[href^=magnet]||a[href^=ed2K]", + "选集标题链接是否Jsoup写法": "1", + "选集标题": "Text", + "选集链接": "a&&href", + "是否反转选集序列": "0", + "选集链接加前缀": "", + "选集链接加后缀": "", + "分析MacPlayer": "0", + "是否开启手动嗅探": "0", + "手动嗅探视频链接关键词": ".mp4#.m3u8#.flv", + "手动嗅探视频链接过滤词": ".html" +} diff --git a/lib/cheerio.min.js b/lib/cheerio.min.js new file mode 100644 index 0000000..5e953bc --- /dev/null +++ b/lib/cheerio.min.js @@ -0,0 +1 @@ +var e,t=function(){return t=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0?this.children[this.children.length-1]:null}get childNodes(){return this.children}set childNodes(e){this.children=e}}class g extends A{constructor(){super(...arguments),this.type=e.CDATA}get nodeType(){return 4}}class N extends A{constructor(){super(...arguments),this.type=e.Root}get nodeType(){return 9}}class C extends A{constructor(t,n,r=[],i=("script"===t?e.Script:"style"===t?e.Style:e.Tag)){super(r),this.name=t,this.attribs=n,this.type=i}get nodeType(){return 1}get tagName(){return this.name}set tagName(e){this.name=e}get attributes(){return Object.keys(this.attribs).map((e=>{var t,n;return{name:e,value:this.attribs[e],namespace:null===(t=this["x-attribsNamespace"])||void 0===t?void 0:t[e],prefix:null===(n=this["x-attribsPrefix"])||void 0===n?void 0:n[e]}}))}}function I(t){return(n=t).type===e.Tag||n.type===e.Script||n.type===e.Style;var n}function S(t){return t.type===e.CDATA}function b(t){return t.type===e.Text}function O(t){return t.type===e.Comment}function y(t){return t.type===e.Directive}function L(t){return t.type===e.Root}function k(e){return Object.prototype.hasOwnProperty.call(e,"children")}function v(e,t=!1){let n;if(b(e))n=new m(e.data);else if(O(e))n=new T(e.data);else if(I(e)){const r=t?D(e.children):[],i=new C(e.name,{...e.attribs},r);r.forEach((e=>e.parent=i)),null!=e.namespace&&(i.namespace=e.namespace),e["x-attribsNamespace"]&&(i["x-attribsNamespace"]={...e["x-attribsNamespace"]}),e["x-attribsPrefix"]&&(i["x-attribsPrefix"]={...e["x-attribsPrefix"]}),n=i}else if(S(e)){const r=t?D(e.children):[],i=new g(r);r.forEach((e=>e.parent=i)),n=i}else if(L(e)){const r=t?D(e.children):[],i=new N(r);r.forEach((e=>e.parent=i)),e["x-mode"]&&(i["x-mode"]=e["x-mode"]),n=i}else{if(!y(e))throw new Error(`Not implemented yet: ${e.type}`);{const t=new _(e.name,e.data);null!=e["x-name"]&&(t["x-name"]=e["x-name"],t["x-publicId"]=e["x-publicId"],t["x-systemId"]=e["x-systemId"]),n=t}}return n.startIndex=e.startIndex,n.endIndex=e.endIndex,null!=e.sourceCodeLocation&&(n.sourceCodeLocation=e.sourceCodeLocation),n}function D(e){const t=e.map((e=>v(e,!0)));for(let e=1;e$\x80-\uFFFF]/g,x=new Map([[34,"""],[38,"&"],[39,"'"],[60,"<"],[62,">"]]),w=null!=String.prototype.codePointAt?(e,t)=>e.codePointAt(t):(e,t)=>55296==(64512&e.charCodeAt(t))?1024*(e.charCodeAt(t)-55296)+e.charCodeAt(t+1)-56320+65536:e.charCodeAt(t);function B(e){let t,n="",r=0;for(;null!==(t=P.exec(e));){const i=t.index,s=e.charCodeAt(i),a=x.get(s);void 0!==a?(n+=e.substring(r,i)+a,r=i+1):(n+=`${e.substring(r,i)}&#x${w(e,i).toString(16)};`,r=P.lastIndex+=Number(55296==(64512&s)))}return n+e.substr(r)}function F(e,t){return function(n){let r,i=0,s="";for(;r=e.exec(n);)i!==r.index&&(s+=n.substring(i,r.index)),s+=t.get(r[0].charCodeAt(0)),i=r.index+1;return s+n.substring(i)}}const U=F(/["&\u00A0]/g,new Map([[34,"""],[38,"&"],[160," "]])),H=F(/[&<>\u00A0]/g,new Map([[38,"&"],[60,"<"],[62,">"],[160," "]])),G=new Map(["altGlyph","altGlyphDef","altGlyphItem","animateColor","animateMotion","animateTransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","glyphRef","linearGradient","radialGradient","textPath"].map((e=>[e.toLowerCase(),e]))),Y=new Map(["definitionURL","attributeName","attributeType","baseFrequency","baseProfile","calcMode","clipPathUnits","diffuseConstant","edgeMode","filterUnits","glyphRef","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"].map((e=>[e.toLowerCase(),e]))),q=new Set(["style","script","xmp","iframe","noembed","noframes","plaintext","noscript"]);function K(e){return e.replace(/"/g,""")}const j=new Set(["area","base","basefont","br","col","command","embed","frame","hr","img","input","isindex","keygen","link","meta","param","source","track","wbr"]);function V(e,t={}){const n="length"in e?e:[e];let r="";for(let e=0;e`;case c:return function(e){return`\x3c!--${e.data}--\x3e`}(e);case p:return function(e){return``}(e);case l:case h:case u:return function(e,t){var n;"foreign"===t.xmlMode&&(e.name=null!==(n=G.get(e.name))&&void 0!==n?n:e.name,e.parent&&Q.has(e.parent.name)&&(t={...t,xmlMode:!1}));!t.xmlMode&&X.has(e.name)&&(t={...t,xmlMode:"foreign"});let r=`<${e.name}`;const i=function(e,t){var n;if(!e)return;const r=!1===(null!==(n=t.encodeEntities)&&void 0!==n?n:t.decodeEntities)?K:t.xmlMode||"utf8"!==t.encodeEntities?B:U;return Object.keys(e).map((n=>{var i,s;const a=null!==(i=e[n])&&void 0!==i?i:"";return"foreign"===t.xmlMode&&(n=null!==(s=Y.get(n))&&void 0!==s?s:n),t.emptyAttrs||t.xmlMode||""!==a?`${n}="${r(a)}"`:n})).join(" ")}(e.attribs,t);i&&(r+=` ${i}`);0===e.children.length&&(t.xmlMode?!1!==t.selfClosingTags:t.selfClosingTags&&j.has(e.name))?(t.xmlMode||(r+=" "),r+="/>"):(r+=">",e.children.length>0&&(r+=V(e.children,t)),!t.xmlMode&&j.has(e.name)||(r+=``));return r}(e,t);case a:return function(e,t){var n;let r=e.data||"";!1===(null!==(n=t.encodeEntities)&&void 0!==n?n:t.decodeEntities)||!t.xmlMode&&e.parent&&q.has(e.parent.name)||(r=t.xmlMode||"utf8"!==t.encodeEntities?B(r):H(r));return r}(e,t)}}const Q=new Set(["mi","mo","mn","ms","mtext","annotation-xml","foreignObject","desc","title"]),X=new Set(["svg","math"]);function $(e,t){return V(e,t)}function z(e){return Array.isArray(e)?e.map(z).join(""):k(e)&&!O(e)?z(e.children):b(e)?e.data:""}function J(t){return Array.isArray(t)?t.map(J).join(""):k(t)&&(t.type===e.Tag||S(t))?J(t.children):b(t)?t.data:""}function Z(e){return k(e)?e.children:[]}function ee(e){return e.parent||null}function te(e){const t=ee(e);if(null!=t)return Z(t);const n=[e];let{prev:r,next:i}=e;for(;null!=r;)n.unshift(r),({prev:r}=r);for(;null!=i;)n.push(i),({next:i}=i);return n}function ne(e){let{next:t}=e;for(;null!==t&&!I(t);)({next:t}=t);return t}function re(e){let{prev:t}=e;for(;null!==t&&!I(t);)({prev:t}=t);return t}function ie(e){if(e.prev&&(e.prev.next=e.next),e.next&&(e.next.prev=e.prev),e.parent){const t=e.parent.children;t.splice(t.lastIndexOf(e),1)}}function se(e,t,n=!0,r=1/0){return Array.isArray(t)||(t=[t]),ae(e,t,n,r)}function ae(e,t,n,r){const i=[];for(const s of t){if(e(s)&&(i.push(s),--r<=0))break;if(n&&k(s)&&s.children.length>0){const t=ae(e,s.children,n,r);if(i.push(...t),r-=t.length,r<=0)break}}return i}function oe(e,t,n=!0){let r=null;for(let i=0;i0&&(r=oe(e,s.children,!0)))}return r}const ce={tag_name:e=>"function"==typeof e?t=>I(t)&&e(t.name):"*"===e?I:t=>I(t)&&t.name===e,tag_type:e=>"function"==typeof e?t=>e(t.type):t=>t.type===e,tag_contains:e=>"function"==typeof e?t=>b(t)&&e(t.data):t=>b(t)&&t.data===e};function le(e,t){return"function"==typeof t?n=>I(n)&&t(n.attribs[e]):n=>I(n)&&n.attribs[e]===t}function he(e,t){return n=>e(n)||t(n)}function ue(e){const t=Object.keys(e).map((t=>{const n=e[t];return Object.prototype.hasOwnProperty.call(ce,t)?ce[t](n):le(t,n)}));return 0===t.length?null:t.reduce(he)}function pe(e,t,n=!0,r=1/0){return se(ce.tag_name(e),t,n,r)}var fe;function de(e,t){const n=[],r=[];if(e===t)return 0;let i=k(e)?e:e.parent;for(;i;)n.unshift(i),i=i.parent;for(i=k(t)?t:t.parent;i;)r.unshift(i),i=i.parent;const s=Math.min(n.length,r.length);let a=0;for(;ac.indexOf(h)?o===t?fe.FOLLOWING|fe.CONTAINED_BY:fe.FOLLOWING:o===e?fe.PRECEDING|fe.CONTAINS:fe.PRECEDING}function Ee(e){return(e=e.filter(((e,t,n)=>!n.includes(e,t+1)))).sort(((e,t)=>{const n=de(e,t);return n&fe.PRECEDING?-1:n&fe.FOLLOWING?1:0})),e}!function(e){e[e.DISCONNECTED=1]="DISCONNECTED",e[e.PRECEDING=2]="PRECEDING",e[e.FOLLOWING=4]="FOLLOWING",e[e.CONTAINS=8]="CONTAINS",e[e.CONTAINED_BY=16]="CONTAINED_BY"}(fe||(fe={}));const me=["url","type","lang"],Te=["fileSize","bitrate","framerate","samplingrate","channels","duration","height","width"];function _e(e){return pe("media:content",e).map((e=>{const{attribs:t}=e,n={medium:t.medium,isDefault:!!t.isDefault};for(const e of me)t[e]&&(n[e]=t[e]);for(const e of Te)t[e]&&(n[e]=parseInt(t[e],10));return t.expression&&(n.expression=t.expression),n}))}function Ae(e,t){return pe(e,t,!0,1)[0]}function ge(e,t,n=!1){return z(pe(e,t,n,1)).trim()}function Ne(e,t,n,r,i=!1){const s=ge(n,r,i);s&&(e[t]=s)}function Ce(e){return"rss"===e||"feed"===e||"rdf:RDF"===e}var Ie,Se=Object.freeze({__proto__:null,isTag:I,isCDATA:S,isText:b,isComment:O,isDocument:L,hasChildren:k,getOuterHTML:$,getInnerHTML:function(e,t){return k(e)?e.children.map((e=>$(e,t))).join(""):""},getText:function e(t){return Array.isArray(t)?t.map(e).join(""):I(t)?"br"===t.name?"\n":e(t.children):S(t)?e(t.children):b(t)?t.data:""},textContent:z,innerText:J,getChildren:Z,getParent:ee,getSiblings:te,getAttributeValue:function(e,t){var n;return null===(n=e.attribs)||void 0===n?void 0:n[t]},hasAttrib:function(e,t){return null!=e.attribs&&Object.prototype.hasOwnProperty.call(e.attribs,t)&&null!=e.attribs[t]},getName:function(e){return e.name},nextElementSibling:ne,prevElementSibling:re,removeElement:ie,replaceElement:function(e,t){const n=t.prev=e.prev;n&&(n.next=t);const r=t.next=e.next;r&&(r.prev=t);const i=t.parent=e.parent;if(i){const n=i.children;n[n.lastIndexOf(e)]=t,e.parent=null}},appendChild:function(e,t){if(ie(t),t.next=null,t.parent=e,e.children.push(t)>1){const n=e.children[e.children.length-2];n.next=t,t.prev=n}else t.prev=null},append:function(e,t){ie(t);const{parent:n}=e,r=e.next;if(t.next=r,t.prev=e,e.next=t,t.parent=n,r){if(r.prev=t,n){const e=n.children;e.splice(e.lastIndexOf(r),0,t)}}else n&&n.children.push(t)},prependChild:function(e,t){if(ie(t),t.parent=e,t.prev=null,1!==e.children.unshift(t)){const n=e.children[1];n.prev=t,t.next=n}else t.next=null},prepend:function(e,t){ie(t);const{parent:n}=e;if(n){const r=n.children;r.splice(r.indexOf(e),0,t)}e.prev&&(e.prev.next=t),t.parent=n,t.prev=e.prev,t.next=e,e.prev=t},filter:se,find:ae,findOneChild:function(e,t){return t.find(e)},findOne:oe,existsOne:function e(t,n){return n.some((n=>I(n)&&(t(n)||n.children.length>0&&e(t,n.children))))},findAll:function(e,t){var n;const r=[],i=t.filter(I);let s;for(;s=i.shift();){const t=null===(n=s.children)||void 0===n?void 0:n.filter(I);t&&t.length>0&&i.unshift(...t),e(s)&&r.push(s)}return r},testElement:function(e,t){const n=ue(e);return!n||n(t)},getElements:function(e,t,n,r=1/0){const i=ue(e);return i?se(i,t,n,r):[]},getElementById:function(e,t,n=!0){return Array.isArray(t)||(t=[t]),oe(le("id",e),t,n)},getElementsByTagName:pe,getElementsByTagType:function(e,t,n=!0,r=1/0){return se(ce.tag_type(e),t,n,r)},removeSubsets:function(e){let t=e.length;for(;--t>=0;){const n=e[t];if(t>0&&e.lastIndexOf(n,t-1)>=0)e.splice(t,1);else for(let r=n.parent;r;r=r.parent)if(e.includes(r)){e.splice(t,1);break}}return e},get DocumentPosition(){return fe},compareDocumentPosition:de,uniqueSort:Ee,getFeed:function(e){const t=Ae(Ce,e);return t?"feed"===t.name?function(e){var t;const n=e.children,r={type:"atom",items:pe("entry",n).map((e=>{var t;const{children:n}=e,r={media:_e(n)};Ne(r,"id","id",n),Ne(r,"title","title",n);const i=null===(t=Ae("link",n))||void 0===t?void 0:t.attribs.href;i&&(r.link=i);const s=ge("summary",n)||ge("content",n);s&&(r.description=s);const a=ge("updated",n);return a&&(r.pubDate=new Date(a)),r}))};Ne(r,"id","id",n),Ne(r,"title","title",n);const i=null===(t=Ae("link",n))||void 0===t?void 0:t.attribs.href;i&&(r.link=i);Ne(r,"description","subtitle",n);const s=ge("updated",n);s&&(r.updated=new Date(s));return Ne(r,"author","email",n,!0),r}(t):function(e){var t,n;const r=null!==(n=null===(t=Ae("channel",e.children))||void 0===t?void 0:t.children)&&void 0!==n?n:[],i={type:e.name.substr(0,3),id:"",items:pe("item",e.children).map((e=>{const{children:t}=e,n={media:_e(t)};Ne(n,"id","guid",t),Ne(n,"title","title",t),Ne(n,"link","link",t),Ne(n,"description","description",t);const r=ge("pubDate",t);return r&&(n.pubDate=new Date(r)),n}))};Ne(i,"title","title",r),Ne(i,"link","link",r),Ne(i,"description","description",r);const s=ge("lastBuildDate",r);s&&(i.updated=new Date(s));return Ne(i,"author","managingEditor",r,!0),i}(t):null}}),be="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{};function Oe(e){if(Object.keys)return Object.keys(e);var t=[];for(var n in e)t.push(n);return t}function ye(e,t){if(e.forEach)return e.forEach(t);for(var n=0;n1&&c.shift(),this._hasParentSelector=null;const l=this._trace(c,t,["$"],i,s,n).filter((function(e){return e&&!e.isParentSelector}));return l.length?o||1!==l.length||l[0].hasArrExpr?l.reduce(((e,t)=>{const n=this._getPreferredOutput(t);return a&&Array.isArray(n)?e=e.concat(n):e.push(n),e}),[]):this._getPreferredOutput(l[0]):o?[]:void 0},He.prototype._getPreferredOutput=function(e){const t=this.currResultType;switch(t){case"all":{const t=Array.isArray(e.path)?e.path:He.toPathArray(e.path);return e.pointer=He.toPointer(t),e.path="string"==typeof e.path?e.path:He.toPathString(e.path),e}case"value":case"parent":case"parentProperty":return e[t];case"path":return He.toPathString(e[t]);case"pointer":return He.toPointer(e.path);default:throw new TypeError("Unknown result type")}},He.prototype._handleCallback=function(e,t,n){if(t){const r=this._getPreferredOutput(e);e.path="string"==typeof e.path?e.path:He.toPathString(e.path),t(r,n,e)}},He.prototype._trace=function(e,t,n,r,i,s,a,o){let c;if(!e.length)return c={path:n,value:t,parent:r,parentProperty:i,hasArrExpr:a},this._handleCallback(c,s,"value"),c;const l=e[0],h=e.slice(1),u=[];function p(e){Array.isArray(e)?e.forEach((e=>{u.push(e)})):u.push(e)}if(("string"!=typeof l||o)&&t&&we.call(t,l))p(this._trace(h,t[l],Be(n,l),t,l,s,a));else if("*"===l)this._walk(t,(e=>{p(this._trace(h,t[e],Be(n,e),t,e,s,!0,!0))}));else if(".."===l)p(this._trace(h,t,n,r,i,s,a)),this._walk(t,(r=>{"object"==typeof t[r]&&p(this._trace(e.slice(),t[r],Be(n,r),t,r,s,!0))}));else{if("^"===l)return this._hasParentSelector=!0,{path:n.slice(0,-1),expr:h,isParentSelector:!0};if("~"===l)return c={path:Be(n,l),value:i,parent:r,parentProperty:null},this._handleCallback(c,s,"property"),c;if("$"===l)p(this._trace(h,t,n,null,null,s,a));else if(/^(-?\d*):(-?\d*):?(\d*)$/u.test(l))p(this._slice(l,h,t,n,r,i,s));else if(0===l.indexOf("?(")){if(this.currPreventEval)throw new Error("Eval [?(expr)] prevented in JSONPath expression.");const e=l.replace(/^\?\((.*?)\)$/u,"$1");this._walk(t,(a=>{this._eval(e,t[a],a,n,r,i)&&p(this._trace(h,t[a],Be(n,a),t,a,s,!0))}))}else if("("===l[0]){if(this.currPreventEval)throw new Error("Eval [(expr)] prevented in JSONPath expression.");p(this._trace(Fe(this._eval(l,t,n[n.length-1],n.slice(0,-1),r,i),h),t,n,r,i,s,a))}else if("@"===l[0]){let e=!1;const a=l.slice(1,-2);switch(a){case"scalar":t&&["object","function"].includes(typeof t)||(e=!0);break;case"boolean":case"string":case"undefined":case"function":typeof t===a&&(e=!0);break;case"integer":!Number.isFinite(t)||t%1||(e=!0);break;case"number":Number.isFinite(t)&&(e=!0);break;case"nonFinite":"number"!=typeof t||Number.isFinite(t)||(e=!0);break;case"object":t&&typeof t===a&&(e=!0);break;case"array":Array.isArray(t)&&(e=!0);break;case"other":e=this.currOtherTypeCallback(t,n,r,i);break;case"null":null===t&&(e=!0);break;default:throw new TypeError("Unknown value type "+a)}if(e)return c={path:n,value:t,parent:r,parentProperty:i},this._handleCallback(c,s,"value"),c}else if("`"===l[0]&&t&&we.call(t,l.slice(1))){const e=l.slice(1);p(this._trace(h,t[e],Be(n,e),t,e,s,a,!0))}else if(l.includes(",")){const e=l.split(",");for(const a of e)p(this._trace(Fe(a,h),t,n,r,i,s,!0))}else!o&&t&&we.call(t,l)&&p(this._trace(h,t[l],Be(n,l),t,l,s,a,!0))}if(this._hasParentSelector)for(let e=0;e{t(e)}))},He.prototype._slice=function(e,t,n,r,i,s,a){if(!Array.isArray(n))return;const o=n.length,c=e.split(":"),l=c[2]&&Number.parseInt(c[2])||1;let h=c[0]&&Number.parseInt(c[0])||0,u=c[1]&&Number.parseInt(c[1])||o;h=h<0?Math.max(0,h+o):Math.min(o,h),u=u<0?Math.max(0,u+o):Math.min(o,u);const p=[];for(let e=h;e{p.push(e)}))}return p},He.prototype._eval=function(e,t,n,r,i,s){this.currSandbox._$_parentProperty=s,this.currSandbox._$_parent=i,this.currSandbox._$_property=n,this.currSandbox._$_root=this.json,this.currSandbox._$_v=t;const a=e.includes("@path");a&&(this.currSandbox._$_path=He.toPathString(r.concat([n])));const o="script:"+e;if(!He.cache[o]){let t=e.replace(/@parentProperty/gu,"_$_parentProperty").replace(/@parent/gu,"_$_parent").replace(/@property/gu,"_$_property").replace(/@root/gu,"_$_root").replace(/@([.\s)[])/gu,"_$_v$1");a&&(t=t.replace(/@path/gu,"_$_path")),He.cache[o]=new this.vm.Script(t)}try{return He.cache[o].runInNewContext(this.currSandbox)}catch(t){throw new Error("jsonPath: "+t.message+": "+e)}},He.cache={},He.toPathString=function(e){const t=e,n=t.length;let r="$";for(let e=1;e":">"},i=/[&"'<>]/g,s=e.exports={};function a(e,t){return n.hasOwnProperty.call(e,t)}function o(e){return r[e]}function c(e,t,n){var r,i,s;if(e instanceof Error&&(e=(i=e).name+": "+i.message),Object.setPrototypeOf?(r=new Error(e),Object.setPrototypeOf(r,c.prototype)):(r=this,Object.defineProperty(r,"message",{enumerable:!1,writable:!0,value:e})),Object.defineProperty(r,"name",{value:"Template render error"}),Error.captureStackTrace&&Error.captureStackTrace(r,this.constructor),i){var a=Object.getOwnPropertyDescriptor(i,"stack");(s=a&&(a.get||function(){return a.value}))||(s=function(){return i.stack})}else{var o=new Error(e).stack;s=function(){return o}}return Object.defineProperty(r,"stack",{get:function(){return s.call(r)}}),Object.defineProperty(r,"cause",{value:i}),r.lineno=t,r.colno=n,r.firstUpdate=!0,r.Update=function(e){var t="("+(e||"unknown path")+")";return this.firstUpdate&&(this.lineno&&this.colno?t+=" [Line "+this.lineno+", Column "+this.colno+"]":this.lineno&&(t+=" [Line "+this.lineno+"]")),t+="\n ",this.firstUpdate&&(t+=" "),this.message=t+(this.message||""),this.firstUpdate=!1,this},r}function l(e){return"[object Function]"===n.toString.call(e)}function h(e){return"[object Array]"===n.toString.call(e)}function u(e){return"[object String]"===n.toString.call(e)}function p(e){return"[object Object]"===n.toString.call(e)}function f(e){var t=function(e){return e?"string"==typeof e?e.split("."):[e]:[]}(e);return function(e){for(var n=e,r=0;r1)for(var n=1;n0&&a.length>i){a.warned=!0;var o=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+t+" listeners added. Use emitter.setMaxListeners() to increase limit");o.name="MaxListenersExceededWarning",o.emitter=e,o.type=t,o.count=a.length,function(e){"function"==typeof console.warn?console.warn(e):console.log(e)}(o)}}else a=s[t]=n,++e._eventsCount;return e}function bt(e,t,n){var r=!1;function i(){e.removeListener(t,i),r||(r=!0,n.apply(e,arguments))}return i.listener=n,i}function Ot(e){var t=this._events;if(t){var n=t[e];if("function"==typeof n)return 1;if(n)return n.length}return 0}function yt(e,t){for(var n=new Array(t);t--;)n[t]=e[t];return n}function Lt(){var e;Tt.call(this),this.__emitError=(e=this,function(t){e.emit("error",t)})}function kt(){return new Lt}mt.prototype=Object.create(null),Tt.EventEmitter=Tt,Tt.usingDomains=!1,Tt.prototype.domain=void 0,Tt.prototype._events=void 0,Tt.prototype._maxListeners=void 0,Tt.defaultMaxListeners=10,Tt.init=function(){this.domain=null,Tt.usingDomains&&undefined.active,this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=new mt,this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},Tt.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||isNaN(e))throw new TypeError('"n" argument must be a positive number');return this._maxListeners=e,this},Tt.prototype.getMaxListeners=function(){return _t(this)},Tt.prototype.emit=function(e){var t,n,r,i,s,a,o,c="error"===e;if(a=this._events)c=c&&null==a.error;else if(!c)return!1;if(o=this.domain,c){if(t=arguments[1],!o){if(t instanceof Error)throw t;var l=new Error('Uncaught, unspecified "error" event. ('+t+")");throw l.context=t,l}return t||(t=new Error('Uncaught, unspecified "error" event')),t.domainEmitter=this,t.domain=o,t.domainThrown=!1,o.emit("error",t),!1}if(!(n=a[e]))return!1;var h="function"==typeof n;switch(r=arguments.length){case 1:At(n,h,this);break;case 2:gt(n,h,this,arguments[1]);break;case 3:Nt(n,h,this,arguments[1],arguments[2]);break;case 4:Ct(n,h,this,arguments[1],arguments[2],arguments[3]);break;default:for(i=new Array(r-1),s=1;s0;)if(n[s]===t||n[s].listener&&n[s].listener===t){a=n[s].listener,i=s;break}if(i<0)return this;if(1===n.length){if(n[0]=void 0,0==--this._eventsCount)return this._events=new mt,this;delete r[e]}else!function(e,t){for(var n=t,r=n+1,i=e.length;r0?Reflect.ownKeys(this._events):[]},("function"==typeof Object.create?function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}:function(e,t){e.super_=t;var n=function(){};n.prototype=t.prototype,e.prototype=new n,e.prototype.constructor=e})(Lt,Tt),Lt.prototype.add=function(e){e.on("error",this.__emitError)},Lt.prototype.remove=function(e){e.removeListener("error",this.__emitError)},Lt.prototype.bind=function(e){var t=this.__emitError;return function(){var n=Array.prototype.slice.call(arguments);try{e.apply(null,n)}catch(e){t(e)}}},Lt.prototype.intercept=function(e){var t=this.__emitError;return function(n){if(n)t(n);else{var r=Array.prototype.slice.call(arguments,1);try{e.apply(null,r)}catch(n){t(n)}}}},Lt.prototype.run=function(e){var t=this.__emitError;try{e()}catch(e){t(e)}return this},Lt.prototype.dispose=function(){return this.removeAllListeners(),this},Lt.prototype.enter=Lt.prototype.exit=function(){return this};var vt,Dt={Domain:Lt,createDomain:kt,create:kt},Rt="function"==typeof setImmediate,Mt=Pt;function Pt(e){xt.length||(Ut(),wt=!0),xt[xt.length]=e}var xt=[],wt=!1,Bt=0;function Ft(){for(;Bt1024){for(var t=0,n=xt.length-Bt;t=!".indexOf(r)){this.forward();var o,c=["==","===","!=","!==","<=",">=","//","**"],l=r+this.current();switch(-1!==je.indexOf(c,l)&&(this.forward(),r=l,-1!==je.indexOf(c,l+this.current())&&(r=l+this.current(),this.forward())),r){case"(":o="left-paren";break;case")":o="right-paren";break;case"[":o="left-bracket";break;case"]":o="right-bracket";break;case"{":o="left-curly";break;case"}":o="right-curly";break;case",":o="comma";break;case":":o="colon";break;case"~":o="tilde";break;case"|":o="pipe";break;default:o="operator"}return Kt(o,r,t,n)}if((e=this._extractUntil(" \n\t\r ()[]{}%*-+~/#,:|.<>=!")).match(/^[-+]?[0-9]+$/))return"."===this.current()?(this.forward(),Kt("float",e+"."+this._extract("0123456789"),t,n)):Kt("int",e,t,n);if(e.match(/^(true|false)$/))return Kt("boolean",e,t,n);if("none"===e)return Kt("none",e,t,n);if("null"===e)return Kt("none",e,t,n);if(e)return Kt("symbol",e,t,n);throw new Error("Unexpected value while parsing: "+e)}var h,u=this.tags.BLOCK_START.charAt(0)+this.tags.VARIABLE_START.charAt(0)+this.tags.COMMENT_START.charAt(0)+this.tags.COMMENT_END.charAt(0);if(this.isFinished())return null;if((e=this._extractString(this.tags.BLOCK_START+"-"))||(e=this._extractString(this.tags.BLOCK_START)))return this.in_code=!0,Kt("block-start",e,t,n);if((e=this._extractString(this.tags.VARIABLE_START+"-"))||(e=this._extractString(this.tags.VARIABLE_START)))return this.in_code=!0,Kt("variable-start",e,t,n);e="";var p=!1;for(this._matches(this.tags.COMMENT_START)&&(p=!0,e=this._extractString(this.tags.COMMENT_START));null!==(h=this._extractUntil(u));){if(e+=h,(this._matches(this.tags.BLOCK_START)||this._matches(this.tags.VARIABLE_START)||this._matches(this.tags.COMMENT_START))&&!p){if(this.lstripBlocks&&this._matches(this.tags.BLOCK_START)&&this.colno>0&&this.colno<=e.length){var f=e.slice(-this.colno);if(/^\s+$/.test(f)&&!(e=e.slice(0,-this.colno)).length)return this.nextToken()}break}if(this._matches(this.tags.COMMENT_END)){if(!p)throw new Error("unexpected end of comment");e+=this._extractString(this.tags.COMMENT_END);break}e+=this.current(),this.forward()}if(null===h&&p)throw new Error("expected end of comment, got end of file");return Kt(p?"comment":"data",e,t,n)},t._parseString=function(e){this.forward();for(var t="";!this.isFinished()&&this.current()!==e;){var n=this.current();if("\\"===n){switch(this.forward(),this.current()){case"n":t+="\n";break;case"t":t+="\t";break;case"r":t+="\r";break;default:t+=this.current()}this.forward()}else t+=n,this.forward()}return this.forward(),t},t._matches=function(e){return this.index+e.length>this.len?null:this.str.slice(this.index,this.index+e.length)===e},t._extractString=function(e){return this._matches(e)?(this.forwardN(e.length),e):null},t._extractUntil=function(e){return this._extractMatching(!0,e||"")},t._extract=function(e){return this._extractMatching(!1,e)},t._extractMatching=function(e,t){if(this.isFinished())return null;var n=t.indexOf(this.current());if(e&&-1===n||!e&&-1!==n){var r=this.current();this.forward();for(var i=t.indexOf(this.current());(e&&-1===i||!e&&-1!==i)&&!this.isFinished();)r+=this.current(),this.forward(),i=t.indexOf(this.current());return r}return""},t._extractRegex=function(e){var t=this.currentStr().match(e);return t?(this.forwardN(t[0].length),t):null},t.isFinished=function(){return this.index>=this.len},t.forwardN=function(e){for(var t=0;t2?i-2:0),a=2;a0||!n)&&Et.stdout.write(" ".repeat(t));var s=i===r.length-1?"":"\n";Et.stdout.write(""+e+s)}))}var hr={Node:on,Root:hn,NodeList:ln,Value:cn,Literal:un,Symbol:pn,Group:fn,Array:dn,Pair:En,Dict:mn,Output:Un,Capture:Hn,TemplateData:Gn,If:_n,IfAsync:An,InlineIf:gn,For:Nn,AsyncEach:Cn,AsyncAll:In,Macro:Sn,Caller:bn,Import:On,FromImport:yn,FunCall:Ln,Filter:kn,FilterAsync:vn,KeywordArgs:Dn,Block:Rn,Super:Mn,Extends:Pn,Include:xn,Set:wn,Switch:Bn,Case:Fn,LookupVal:Tn,BinOp:qn,In:Kn,Is:jn,Or:Vn,And:Wn,Not:Qn,Add:Xn,Concat:$n,Sub:zn,Mul:Jn,Div:Zn,FloorDiv:er,Mod:tr,Pow:nr,Neg:rr,Pos:ir,Compare:sr,CompareOperand:ar,CallExtension:or,CallExtensionAsync:cr,printNodes:function e(t,n){if(n=n||0,lr(t.typename+": ",n),t instanceof ln)lr("\n"),t.children.forEach((function(t){e(t,n+2)}));else if(t instanceof or)lr(t.extName+"."+t.prop+"\n"),t.args&&e(t.args,n+2),t.contentArgs&&t.contentArgs.forEach((function(t){e(t,n+2)}));else{var r=[],i=null;t.iterFields((function(e,t){e instanceof on?r.push([t,e]):(i=i||{})[t]=e})),i?lr(JSON.stringify(i,null,2)+"\n",null,!0):lr("\n"),r.forEach((function(t){var r=t[0],i=t[1];lr("["+r+"] =>",n+2),e(i,n+4)}))}}};function ur(e,t){return ur=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},ur(e,t)}hr.Node,hr.Root,hr.NodeList,hr.Value,hr.Literal,hr.Group,hr.Pair,hr.Dict,hr.Output,hr.Capture,hr.TemplateData,hr.If,hr.IfAsync,hr.InlineIf,hr.For,hr.AsyncEach,hr.AsyncAll,hr.Macro,hr.Caller,hr.Import,hr.FromImport,hr.FunCall,hr.Filter,hr.FilterAsync,hr.KeywordArgs,hr.Block,hr.Super,hr.Extends,hr.Include,hr.Switch,hr.Case,hr.LookupVal,hr.BinOp,hr.In,hr.Is,hr.Or,hr.And,hr.Not,hr.Add,hr.Concat,hr.Sub,hr.Mul,hr.Div,hr.FloorDiv,hr.Mod,hr.Pow,hr.Neg,hr.Pos,hr.Compare,hr.CompareOperand,hr.CallExtension,hr.CallExtensionAsync,hr.printNodes;var pr=function(e){var t,n;function r(){return e.apply(this,arguments)||this}n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,ur(t,n);var i=r.prototype;return i.init=function(e){this.tokens=e,this.peeked=null,this.breakOnBlocks=null,this.dropLeadingWhitespace=!1,this.extensions=[]},i.nextToken=function(e){var t;if(this.peeked){if(e||this.peeked.type!==Vt.TOKEN_WHITESPACE)return t=this.peeked,this.peeked=null,t;this.peeked=null}if(t=this.tokens.nextToken(),!e)for(;t&&t.type===Vt.TOKEN_WHITESPACE;)t=this.tokens.nextToken();return t},i.peekToken=function(){return this.peeked=this.peeked||this.nextToken(),this.peeked},i.pushToken=function(e){if(this.peeked)throw new Error("pushToken: can only push one token on between reads");this.peeked=e},i.error=function(e,t,n){if(void 0===t||void 0===n){var r=this.peekToken()||{};t=r.lineno,n=r.colno}return void 0!==t&&(t+=1),void 0!==n&&(n+=1),new je.TemplateError(e,t,n)},i.fail=function(e,t,n){throw this.error(e,t,n)},i.skip=function(e){var t=this.nextToken();return!(!t||t.type!==e)||(this.pushToken(t),!1)},i.expect=function(e){var t=this.nextToken();return t.type!==e&&this.fail("expected "+e+", got "+t.type,t.lineno,t.colno),t},i.skipValue=function(e,t){var n=this.nextToken();return!(!n||n.type!==e||n.value!==t)||(this.pushToken(n),!1)},i.skipSymbol=function(e){return this.skipValue(Vt.TOKEN_SYMBOL,e)},i.advanceAfterBlockEnd=function(e){var t;return e||((t=this.peekToken())||this.fail("unexpected end of file"),t.type!==Vt.TOKEN_SYMBOL&&this.fail("advanceAfterBlockEnd: expected symbol token or explicit name to be passed"),e=this.nextToken().value),(t=this.nextToken())&&t.type===Vt.TOKEN_BLOCK_END?"-"===t.value.charAt(0)&&(this.dropLeadingWhitespace=!0):this.fail("expected block end in "+e+" statement"),t},i.advanceAfterVariableEnd=function(){var e=this.nextToken();e&&e.type===Vt.TOKEN_VARIABLE_END?this.dropLeadingWhitespace="-"===e.value.charAt(e.value.length-this.tokens.tags.VARIABLE_END.length-1):(this.pushToken(e),this.fail("expected variable end"))},i.parseFor=function(){var e,t,n=this.peekToken();if(this.skipSymbol("for")?(e=new hr.For(n.lineno,n.colno),t="endfor"):this.skipSymbol("asyncEach")?(e=new hr.AsyncEach(n.lineno,n.colno),t="endeach"):this.skipSymbol("asyncAll")?(e=new hr.AsyncAll(n.lineno,n.colno),t="endall"):this.fail("parseFor: expected for{Async}",n.lineno,n.colno),e.name=this.parsePrimary(),e.name instanceof hr.Symbol||this.fail("parseFor: variable name expected for loop"),this.peekToken().type===Vt.TOKEN_COMMA){var r=e.name;for(e.name=new hr.Array(r.lineno,r.colno),e.name.addChild(r);this.skip(Vt.TOKEN_COMMA);){var i=this.parsePrimary();e.name.addChild(i)}}return this.skipSymbol("in")||this.fail('parseFor: expected "in" keyword for loop',n.lineno,n.colno),e.arr=this.parseExpression(),this.advanceAfterBlockEnd(n.value),e.body=this.parseUntilBlocks(t,"else"),this.skipSymbol("else")&&(this.advanceAfterBlockEnd("else"),e.else_=this.parseUntilBlocks(t)),this.advanceAfterBlockEnd(),e},i.parseMacro=function(){var e=this.peekToken();this.skipSymbol("macro")||this.fail("expected macro");var t=this.parsePrimary(!0),n=this.parseSignature(),r=new hr.Macro(e.lineno,e.colno,t,n);return this.advanceAfterBlockEnd(e.value),r.body=this.parseUntilBlocks("endmacro"),this.advanceAfterBlockEnd(),r},i.parseCall=function(){var e=this.peekToken();this.skipSymbol("call")||this.fail("expected call");var t=this.parseSignature(!0)||new hr.NodeList,n=this.parsePrimary();this.advanceAfterBlockEnd(e.value);var r=this.parseUntilBlocks("endcall");this.advanceAfterBlockEnd();var i=new hr.Symbol(e.lineno,e.colno,"caller"),s=new hr.Caller(e.lineno,e.colno,i,t,r),a=n.args.children;return a[a.length-1]instanceof hr.KeywordArgs||a.push(new hr.KeywordArgs),a[a.length-1].addChild(new hr.Pair(e.lineno,e.colno,i,s)),new hr.Output(e.lineno,e.colno,[n])},i.parseWithContext=function(){var e=this.peekToken(),t=null;return this.skipSymbol("with")?t=!0:this.skipSymbol("without")&&(t=!1),null!==t&&(this.skipSymbol("context")||this.fail("parseFrom: expected context after with/without",e.lineno,e.colno)),t},i.parseImport=function(){var e=this.peekToken();this.skipSymbol("import")||this.fail("parseImport: expected import",e.lineno,e.colno);var t=this.parseExpression();this.skipSymbol("as")||this.fail('parseImport: expected "as" keyword',e.lineno,e.colno);var n=this.parseExpression(),r=this.parseWithContext(),i=new hr.Import(e.lineno,e.colno,t,n,r);return this.advanceAfterBlockEnd(e.value),i},i.parseFrom=function(){var e=this.peekToken();this.skipSymbol("from")||this.fail("parseFrom: expected from");var t=this.parseExpression();this.skipSymbol("import")||this.fail("parseFrom: expected import",e.lineno,e.colno);for(var n,r=new hr.NodeList;;){var i=this.peekToken();if(i.type===Vt.TOKEN_BLOCK_END){r.children.length||this.fail("parseFrom: Expected at least one import name",e.lineno,e.colno),"-"===i.value.charAt(0)&&(this.dropLeadingWhitespace=!0),this.nextToken();break}r.children.length>0&&!this.skip(Vt.TOKEN_COMMA)&&this.fail("parseFrom: expected comma",e.lineno,e.colno);var s=this.parsePrimary();if("_"===s.value.charAt(0)&&this.fail("parseFrom: names starting with an underscore cannot be imported",s.lineno,s.colno),this.skipSymbol("as")){var a=this.parsePrimary();r.addChild(new hr.Pair(s.lineno,s.colno,s,a))}else r.addChild(s);n=this.parseWithContext()}return new hr.FromImport(e.lineno,e.colno,t,r,n)},i.parseBlock=function(){var e=this.peekToken();this.skipSymbol("block")||this.fail("parseBlock: expected block",e.lineno,e.colno);var t=new hr.Block(e.lineno,e.colno);t.name=this.parsePrimary(),t.name instanceof hr.Symbol||this.fail("parseBlock: variable name expected",e.lineno,e.colno),this.advanceAfterBlockEnd(e.value),t.body=this.parseUntilBlocks("endblock"),this.skipSymbol("endblock"),this.skipSymbol(t.name.value);var n=this.peekToken();return n||this.fail("parseBlock: expected endblock, got end of file"),this.advanceAfterBlockEnd(n.value),t},i.parseExtends=function(){var e="extends",t=this.peekToken();this.skipSymbol(e)||this.fail("parseTemplateRef: expected extends");var n=new hr.Extends(t.lineno,t.colno);return n.template=this.parseExpression(),this.advanceAfterBlockEnd(t.value),n},i.parseInclude=function(){var e="include",t=this.peekToken();this.skipSymbol(e)||this.fail("parseInclude: expected include");var n=new hr.Include(t.lineno,t.colno);return n.template=this.parseExpression(),this.skipSymbol("ignore")&&this.skipSymbol("missing")&&(n.ignoreMissing=!0),this.advanceAfterBlockEnd(t.value),n},i.parseIf=function(){var e,t=this.peekToken();this.skipSymbol("if")||this.skipSymbol("elif")||this.skipSymbol("elseif")?e=new hr.If(t.lineno,t.colno):this.skipSymbol("ifAsync")?e=new hr.IfAsync(t.lineno,t.colno):this.fail("parseIf: expected if, elif, or elseif",t.lineno,t.colno),e.cond=this.parseExpression(),this.advanceAfterBlockEnd(t.value),e.body=this.parseUntilBlocks("elif","elseif","else","endif");var n=this.peekToken();switch(n&&n.value){case"elseif":case"elif":e.else_=this.parseIf();break;case"else":this.advanceAfterBlockEnd(),e.else_=this.parseUntilBlocks("endif"),this.advanceAfterBlockEnd();break;case"endif":e.else_=null,this.advanceAfterBlockEnd();break;default:this.fail("parseIf: expected elif, else, or endif, got end of file")}return e},i.parseSet=function(){var e=this.peekToken();this.skipSymbol("set")||this.fail("parseSet: expected set",e.lineno,e.colno);for(var t,n=new hr.Set(e.lineno,e.colno,[]);(t=this.parsePrimary())&&(n.targets.push(t),this.skip(Vt.TOKEN_COMMA)););return this.skipValue(Vt.TOKEN_OPERATOR,"=")?(n.value=this.parseExpression(),this.advanceAfterBlockEnd(e.value)):this.skip(Vt.TOKEN_BLOCK_END)?(n.body=new hr.Capture(e.lineno,e.colno,this.parseUntilBlocks("endset")),n.value=null,this.advanceAfterBlockEnd()):this.fail("parseSet: expected = or block end in set tag",e.lineno,e.colno),n},i.parseSwitch=function(){var e="switch",t="endswitch",n="case",r="default",i=this.peekToken();this.skipSymbol(e)||this.skipSymbol(n)||this.skipSymbol(r)||this.fail('parseSwitch: expected "switch," "case" or "default"',i.lineno,i.colno);var s=this.parseExpression();this.advanceAfterBlockEnd(e),this.parseUntilBlocks(n,r,t);var a,o=this.peekToken(),c=[];do{this.skipSymbol(n);var l=this.parseExpression();this.advanceAfterBlockEnd(e);var h=this.parseUntilBlocks(n,r,t);c.push(new hr.Case(o.line,o.col,l,h)),o=this.peekToken()}while(o&&o.value===n);switch(o.value){case r:this.advanceAfterBlockEnd(),a=this.parseUntilBlocks(t),this.advanceAfterBlockEnd();break;case t:this.advanceAfterBlockEnd();break;default:this.fail('parseSwitch: expected "case," "default" or "endswitch," got EOF.')}return new hr.Switch(i.lineno,i.colno,s,c,a)},i.parseStatement=function(){var e=this.peekToken();if(e.type!==Vt.TOKEN_SYMBOL&&this.fail("tag name expected",e.lineno,e.colno),this.breakOnBlocks&&-1!==je.indexOf(this.breakOnBlocks,e.value))return null;switch(e.value){case"raw":return this.parseRaw();case"verbatim":return this.parseRaw("verbatim");case"if":case"ifAsync":return this.parseIf();case"for":case"asyncEach":case"asyncAll":return this.parseFor();case"block":return this.parseBlock();case"extends":return this.parseExtends();case"include":return this.parseInclude();case"set":return this.parseSet();case"macro":return this.parseMacro();case"call":return this.parseCall();case"import":return this.parseImport();case"from":return this.parseFrom();case"filter":return this.parseFilterStatement();case"switch":return this.parseSwitch();default:if(this.extensions.length)for(var t=0;t0;){var o=s[0],c=s[1],l=s[2];l===e?r+=1:l===t&&(r-=1),0===r?(i+=c,this.tokens.backN(o.length-c.length)):i+=o}return new hr.Output(a.lineno,a.colno,[new hr.TemplateData(a.lineno,a.colno,i)])},i.parsePostfix=function(e){for(var t,n=this.peekToken();n;){if(n.type===Vt.TOKEN_LEFT_PAREN)e=new hr.FunCall(n.lineno,n.colno,e,this.parseSignature());else if(n.type===Vt.TOKEN_LEFT_BRACKET)(t=this.parseAggregate()).children.length>1&&this.fail("invalid index"),e=new hr.LookupVal(n.lineno,n.colno,e,t.children[0]);else{if(n.type!==Vt.TOKEN_OPERATOR||"."!==n.value)break;this.nextToken();var r=this.nextToken();r.type!==Vt.TOKEN_SYMBOL&&this.fail("expected name as lookup value, got "+r.value,r.lineno,r.colno),t=new hr.Literal(r.lineno,r.colno,r.value),e=new hr.LookupVal(n.lineno,n.colno,e,t)}n=this.peekToken()}return e},i.parseExpression=function(){return this.parseInlineIf()},i.parseInlineIf=function(){var e=this.parseOr();if(this.skipSymbol("if")){var t=this.parseOr(),n=e;(e=new hr.InlineIf(e.lineno,e.colno)).body=n,e.cond=t,this.skipSymbol("else")?e.else_=this.parseOr():e.else_=null}return e},i.parseOr=function(){for(var e=this.parseAnd();this.skipSymbol("or");){var t=this.parseAnd();e=new hr.Or(e.lineno,e.colno,e,t)}return e},i.parseAnd=function(){for(var e=this.parseNot();this.skipSymbol("and");){var t=this.parseNot();e=new hr.And(e.lineno,e.colno,e,t)}return e},i.parseNot=function(){var e=this.peekToken();return this.skipSymbol("not")?new hr.Not(e.lineno,e.colno,this.parseNot()):this.parseIn()},i.parseIn=function(){for(var e=this.parseIs();;){var t=this.nextToken();if(!t)break;var n=t.type===Vt.TOKEN_SYMBOL&&"not"===t.value;if(n||this.pushToken(t),!this.skipSymbol("in")){n&&this.pushToken(t);break}var r=this.parseIs();e=new hr.In(e.lineno,e.colno,e,r),n&&(e=new hr.Not(e.lineno,e.colno,e))}return e},i.parseIs=function(){var e=this.parseCompare();if(this.skipSymbol("is")){var t=this.skipSymbol("not"),n=this.parseCompare();e=new hr.Is(e.lineno,e.colno,e,n),t&&(e=new hr.Not(e.lineno,e.colno,e))}return e},i.parseCompare=function(){for(var e=["==","===","!=","!==","<",">","<=",">="],t=this.parseConcat(),n=[];;){var r=this.nextToken();if(!r)break;if(-1===e.indexOf(r.value)){this.pushToken(r);break}n.push(new hr.CompareOperand(r.lineno,r.colno,this.parseConcat(),r.value))}return n.length?new hr.Compare(n[0].lineno,n[0].colno,t,n):t},i.parseConcat=function(){for(var e=this.parseAdd();this.skipValue(Vt.TOKEN_TILDE,"~");){var t=this.parseAdd();e=new hr.Concat(e.lineno,e.colno,e,t)}return e},i.parseAdd=function(){for(var e=this.parseSub();this.skipValue(Vt.TOKEN_OPERATOR,"+");){var t=this.parseSub();e=new hr.Add(e.lineno,e.colno,e,t)}return e},i.parseSub=function(){for(var e=this.parseMul();this.skipValue(Vt.TOKEN_OPERATOR,"-");){var t=this.parseMul();e=new hr.Sub(e.lineno,e.colno,e,t)}return e},i.parseMul=function(){for(var e=this.parseDiv();this.skipValue(Vt.TOKEN_OPERATOR,"*");){var t=this.parseDiv();e=new hr.Mul(e.lineno,e.colno,e,t)}return e},i.parseDiv=function(){for(var e=this.parseFloorDiv();this.skipValue(Vt.TOKEN_OPERATOR,"/");){var t=this.parseFloorDiv();e=new hr.Div(e.lineno,e.colno,e,t)}return e},i.parseFloorDiv=function(){for(var e=this.parseMod();this.skipValue(Vt.TOKEN_OPERATOR,"//");){var t=this.parseMod();e=new hr.FloorDiv(e.lineno,e.colno,e,t)}return e},i.parseMod=function(){for(var e=this.parsePow();this.skipValue(Vt.TOKEN_OPERATOR,"%");){var t=this.parsePow();e=new hr.Mod(e.lineno,e.colno,e,t)}return e},i.parsePow=function(){for(var e=this.parseUnary();this.skipValue(Vt.TOKEN_OPERATOR,"**");){var t=this.parseUnary();e=new hr.Pow(e.lineno,e.colno,e,t)}return e},i.parseUnary=function(e){var t,n=this.peekToken();return t=this.skipValue(Vt.TOKEN_OPERATOR,"-")?new hr.Neg(n.lineno,n.colno,this.parseUnary(!0)):this.skipValue(Vt.TOKEN_OPERATOR,"+")?new hr.Pos(n.lineno,n.colno,this.parseUnary(!0)):this.parsePrimary(),e||(t=this.parseFilter(t)),t},i.parsePrimary=function(e){var t,n=this.nextToken(),r=null;if(n?n.type===Vt.TOKEN_STRING?t=n.value:n.type===Vt.TOKEN_INT?t=parseInt(n.value,10):n.type===Vt.TOKEN_FLOAT?t=parseFloat(n.value):n.type===Vt.TOKEN_BOOLEAN?"true"===n.value?t=!0:"false"===n.value?t=!1:this.fail("invalid boolean: "+n.value,n.lineno,n.colno):n.type===Vt.TOKEN_NONE?t=null:n.type===Vt.TOKEN_REGEX&&(t=new RegExp(n.value.body,n.value.flags)):this.fail("expected expression, got end of file"),void 0!==t?r=new hr.Literal(n.lineno,n.colno,t):n.type===Vt.TOKEN_SYMBOL?r=new hr.Symbol(n.lineno,n.colno,n.value):(this.pushToken(n),r=this.parseAggregate()),e||(r=this.parsePostfix(r)),r)return r;throw this.error("unexpected token: "+n.value,n.lineno,n.colno)},i.parseFilterName=function(){for(var e=this.expect(Vt.TOKEN_SYMBOL),t=e.value;this.skipValue(Vt.TOKEN_OPERATOR,".");)t+="."+this.expect(Vt.TOKEN_SYMBOL).value;return new hr.Symbol(e.lineno,e.colno,t)},i.parseFilterArgs=function(e){return this.peekToken().type===Vt.TOKEN_LEFT_PAREN?this.parsePostfix(e).args.children:[]},i.parseFilter=function(e){for(;this.skip(Vt.TOKEN_PIPE);){var t=this.parseFilterName();e=new hr.Filter(t.lineno,t.colno,t,new hr.NodeList(t.lineno,t.colno,[e].concat(this.parseFilterArgs(e))))}return e},i.parseFilterStatement=function(){var e=this.peekToken();this.skipSymbol("filter")||this.fail("parseFilterStatement: expected filter");var t=this.parseFilterName(),n=this.parseFilterArgs(t);this.advanceAfterBlockEnd(e.value);var r=new hr.Capture(t.lineno,t.colno,this.parseUntilBlocks("endfilter"));this.advanceAfterBlockEnd();var i=new hr.Filter(t.lineno,t.colno,t,new hr.NodeList(t.lineno,t.colno,[r].concat(n)));return new hr.Output(t.lineno,t.colno,[i])},i.parseAggregate=function(){var e,t=this.nextToken();switch(t.type){case Vt.TOKEN_LEFT_PAREN:e=new hr.Group(t.lineno,t.colno);break;case Vt.TOKEN_LEFT_BRACKET:e=new hr.Array(t.lineno,t.colno);break;case Vt.TOKEN_LEFT_CURLY:e=new hr.Dict(t.lineno,t.colno);break;default:return null}for(;;){var n=this.peekToken().type;if(n===Vt.TOKEN_RIGHT_PAREN||n===Vt.TOKEN_RIGHT_BRACKET||n===Vt.TOKEN_RIGHT_CURLY){this.nextToken();break}if(e.children.length>0&&(this.skip(Vt.TOKEN_COMMA)||this.fail("parseAggregate: expected comma after expression",t.lineno,t.colno)),e instanceof hr.Dict){var r=this.parsePrimary();this.skip(Vt.TOKEN_COLON)||this.fail("parseAggregate: expected colon after dict key",t.lineno,t.colno);var i=this.parseExpression();e.addChild(new hr.Pair(r.lineno,r.colno,r,i))}else{var s=this.parseExpression();e.addChild(s)}}return e},i.parseSignature=function(e,t){var n=this.peekToken();if(!t&&n.type!==Vt.TOKEN_LEFT_PAREN){if(e)return null;this.fail("expected arguments",n.lineno,n.colno)}n.type===Vt.TOKEN_LEFT_PAREN&&(n=this.nextToken());for(var r=new hr.NodeList(n.lineno,n.colno),i=new hr.KeywordArgs(n.lineno,n.colno),s=!1;;){if(n=this.peekToken(),!t&&n.type===Vt.TOKEN_RIGHT_PAREN){this.nextToken();break}if(t&&n.type===Vt.TOKEN_BLOCK_END)break;if(s&&!this.skip(Vt.TOKEN_COMMA))this.fail("parseSignature: expected comma after expression",n.lineno,n.colno);else{var a=this.parseExpression();this.skipValue(Vt.TOKEN_OPERATOR,"=")?i.addChild(new hr.Pair(a.lineno,a.colno,a,this.parseExpression())):r.addChild(a)}s=!0}return i.children.length&&r.addChild(i),r},i.parseUntilBlocks=function(){for(var e=this.breakOnBlocks,t=arguments.length,n=new Array(t),r=0;re.length)a=i.slice(0,e.length),i.slice(a.length,o).forEach((function(e,n){n":">","<=":"<=",">=":">="},Pr=function(e){var t,n;function r(){return e.apply(this,arguments)||this}n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,vr(t,n);var i=r.prototype;return i.init=function(e,t){this.templateName=e,this.codebuf=[],this.lastId=0,this.buffer=null,this.bufferStack=[],this._scopeClosers="",this.inBlock=!1,this.throwOnUndefined=t},i.fail=function(e,t,n){throw void 0!==t&&(t+=1),void 0!==n&&(n+=1),new Dr(e,t,n)},i._pushBuffer=function(){var e=this._tmpid();return this.bufferStack.push(this.buffer),this.buffer=e,this._emit("var "+this.buffer+' = "";'),e},i._popBuffer=function(){this.buffer=this.bufferStack.pop()},i._emit=function(e){this.codebuf.push(e)},i._emitLine=function(e){this._emit(e+"\n")},i._emitLines=function(){for(var e=this,t=arguments.length,n=new Array(t),r=0;r0&&i._emit(","),i.compile(e,t)})),r&&this._emit(r)},i._compileExpression=function(e,t){this.assertType(e,hr.Literal,hr.Symbol,hr.Group,hr.Array,hr.Dict,hr.FunCall,hr.Caller,hr.Filter,hr.LookupVal,hr.Compare,hr.InlineIf,hr.In,hr.Is,hr.And,hr.Or,hr.Not,hr.Add,hr.Concat,hr.Sub,hr.Mul,hr.Div,hr.FloorDiv,hr.Mod,hr.Pow,hr.Neg,hr.Pos,hr.Compare,hr.NodeList),this.compile(e,t)},i.assertType=function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r0&&r._emit(","),e){r._emitLine("function(cb) {"),r._emitLine("if(!cb) { cb = function(err) { if(err) { throw err; }}}");var i=r._pushBuffer();r._withScopedSyntax((function(){r.compile(e,t),r._emitLine("cb(null, "+i+");")})),r._popBuffer(),r._emitLine("return "+i+";"),r._emitLine("}")}else r._emit("null")})),n){var o=this._tmpid();this._emitLine(", "+this._makeCallback(o)),this._emitLine(this.buffer+" += runtime.suppressValue("+o+", "+a+" && env.opts.autoescape);"),this._addScopeLevel()}else this._emit(")"),this._emit(", "+a+" && env.opts.autoescape);\n")},i.compileCallExtensionAsync=function(e,t){this.compileCallExtension(e,t,!0)},i.compileNodeList=function(e,t){this._compileChildren(e,t)},i.compileLiteral=function(e){if("string"==typeof e.value){var t=e.value.replace(/\\/g,"\\\\");t=(t=(t=(t=(t=t.replace(/"/g,'\\"')).replace(/\n/g,"\\n")).replace(/\r/g,"\\r")).replace(/\t/g,"\\t")).replace(/\u2028/g,"\\u2028"),this._emit('"'+t+'"')}else null===e.value?this._emit("null"):this._emit(e.value.toString())},i.compileSymbol=function(e,t){var n=e.value,r=t.lookup(n);r?this._emit(r):this._emit('runtime.contextOrFrameLookup(context, frame, "'+n+'")')},i.compileGroup=function(e,t){this._compileAggregate(e,t,"(",")")},i.compileArray=function(e,t){this._compileAggregate(e,t,"[","]")},i.compileDict=function(e,t){this._compileAggregate(e,t,"{","}")},i.compilePair=function(e,t){var n=e.key,r=e.value;n instanceof hr.Symbol?n=new hr.Literal(n.lineno,n.colno,n.value):n instanceof hr.Literal&&"string"==typeof n.value||this.fail("compilePair: Dict keys must be strings or names",n.lineno,n.colno),this.compile(n,t),this._emit(": "),this._compileExpression(r,t)},i.compileInlineIf=function(e,t){this._emit("("),this.compile(e.cond,t),this._emit("?"),this.compile(e.body,t),this._emit(":"),null!==e.else_?this.compile(e.else_,t):this._emit('""'),this._emit(")")},i.compileIn=function(e,t){this._emit("runtime.inOperator("),this.compile(e.left,t),this._emit(","),this.compile(e.right,t),this._emit(")")},i.compileIs=function(e,t){var n=e.right.name?e.right.name.value:e.right.value;this._emit('env.getTest("'+n+'").call(context, '),this.compile(e.left,t),e.right.args&&(this._emit(","),this.compile(e.right.args,t)),this._emit(") === true")},i._binOpEmitter=function(e,t,n){this.compile(e.left,t),this._emit(n),this.compile(e.right,t)},i.compileOr=function(e,t){return this._binOpEmitter(e,t," || ")},i.compileAnd=function(e,t){return this._binOpEmitter(e,t," && ")},i.compileAdd=function(e,t){return this._binOpEmitter(e,t," + ")},i.compileConcat=function(e,t){return this._binOpEmitter(e,t,' + "" + ')},i.compileSub=function(e,t){return this._binOpEmitter(e,t," - ")},i.compileMul=function(e,t){return this._binOpEmitter(e,t," * ")},i.compileDiv=function(e,t){return this._binOpEmitter(e,t," / ")},i.compileMod=function(e,t){return this._binOpEmitter(e,t," % ")},i.compileNot=function(e,t){this._emit("!"),this.compile(e.target,t)},i.compileFloorDiv=function(e,t){this._emit("Math.floor("),this.compile(e.left,t),this._emit(" / "),this.compile(e.right,t),this._emit(")")},i.compilePow=function(e,t){this._emit("Math.pow("),this.compile(e.left,t),this._emit(", "),this.compile(e.right,t),this._emit(")")},i.compileNeg=function(e,t){this._emit("-"),this.compile(e.target,t)},i.compilePos=function(e,t){this._emit("+"),this.compile(e.target,t)},i.compileCompare=function(e,t){var n=this;this.compile(e.expr,t),e.ops.forEach((function(e){n._emit(" "+Mr[e.type]+" "),n.compile(e.expr,t)}))},i.compileLookupVal=function(e,t){this._emit("runtime.memberLookup(("),this._compileExpression(e.target,t),this._emit("),"),this._compileExpression(e.val,t),this._emit(")")},i._getNodeName=function(e){switch(e.typename){case"Symbol":return e.value;case"FunCall":return"the return value of ("+this._getNodeName(e.name)+")";case"LookupVal":return this._getNodeName(e.target)+'["'+this._getNodeName(e.val)+'"]';case"Literal":return e.value.toString();default:return"--expression--"}},i.compileFunCall=function(e,t){this._emit("(lineno = "+e.lineno+", colno = "+e.colno+", "),this._emit("runtime.callWrap("),this._compileExpression(e.name,t),this._emit(', "'+this._getNodeName(e.name).replace(/"/g,'\\"')+'", context, '),this._compileAggregate(e.args,t,"[","])"),this._emit(")")},i.compileFilter=function(e,t){var n=e.name;this.assertType(n,hr.Symbol),this._emit('env.getFilter("'+n.value+'").call(context, '),this._compileAggregate(e.args,t),this._emit(")")},i.compileFilterAsync=function(e,t){var n=e.name,r=e.symbol.value;this.assertType(n,hr.Symbol),t.set(r,r),this._emit('env.getFilter("'+n.value+'").call(context, '),this._compileAggregate(e.args,t),this._emitLine(", "+this._makeCallback(r)),this._addScopeLevel()},i.compileKeywordArgs=function(e,t){this._emit("runtime.makeKeywordArgs("),this.compileDict(e,t),this._emit(")")},i.compileSet=function(e,t){var n=this,r=[];e.targets.forEach((function(e){var i=e.value,s=t.lookup(i);null==s&&(s=n._tmpid(),n._emitLine("var "+s+";")),r.push(s)})),e.value?(this._emit(r.join(" = ")+" = "),this._compileExpression(e.value,t),this._emitLine(";")):(this._emit(r.join(" = ")+" = "),this.compile(e.body,t),this._emitLine(";")),e.targets.forEach((function(e,t){var i=r[t],s=e.value;n._emitLine('frame.set("'+s+'", '+i+", true);"),n._emitLine("if(frame.topLevel) {"),n._emitLine('context.setVariable("'+s+'", '+i+");"),n._emitLine("}"),"_"!==s.charAt(0)&&(n._emitLine("if(frame.topLevel) {"),n._emitLine('context.addExport("'+s+'", '+i+");"),n._emitLine("}"))}))},i.compileSwitch=function(e,t){var n=this;this._emit("switch ("),this.compile(e.expr,t),this._emit(") {"),e.cases.forEach((function(e,r){n._emit("case "),n.compile(e.cond,t),n._emit(": "),n.compile(e.body,t),e.body.children.length&&n._emitLine("break;")})),e.default&&(this._emit("default:"),this.compile(e.default,t)),this._emit("}")},i.compileIf=function(e,t,n){var r=this;this._emit("if("),this._compileExpression(e.cond,t),this._emitLine(") {"),this._withScopedSyntax((function(){r.compile(e.body,t),n&&r._emit("cb()")})),e.else_?(this._emitLine("}\nelse {"),this._withScopedSyntax((function(){r.compile(e.else_,t),n&&r._emit("cb()")}))):n&&(this._emitLine("}\nelse {"),this._emit("cb()")),this._emitLine("}")},i.compileIfAsync=function(e,t){this._emit("(function(cb) {"),this.compileIf(e,t,!0),this._emit("})("+this._makeCallback()),this._addScopeLevel()},i._emitLoopBindings=function(e,t,n,r){var i=this;[{name:"index",val:n+" + 1"},{name:"index0",val:n},{name:"revindex",val:r+" - "+n},{name:"revindex0",val:r+" - "+n+" - 1"},{name:"first",val:n+" === 0"},{name:"last",val:n+" === "+r+" - 1"},{name:"length",val:r}].forEach((function(e){i._emitLine('frame.set("loop.'+e.name+'", '+e.val+");")}))},i.compileFor=function(e,t){var n=this,r=this._tmpid(),i=this._tmpid(),s=this._tmpid();if(t=t.push(),this._emitLine("frame = frame.push();"),this._emit("var "+s+" = "),this._compileExpression(e.arr,t),this._emitLine(";"),this._emit("if("+s+") {"),this._emitLine(s+" = runtime.fromIterator("+s+");"),e.name instanceof hr.Array){this._emitLine("var "+r+";"),this._emitLine("if(runtime.isArray("+s+")) {"),this._emitLine("var "+i+" = "+s+".length;"),this._emitLine("for("+r+"=0; "+r+" < "+s+".length; "+r+"++) {"),e.name.children.forEach((function(i,a){var o=n._tmpid();n._emitLine("var "+o+" = "+s+"["+r+"]["+a+"];"),n._emitLine('frame.set("'+i+'", '+s+"["+r+"]["+a+"]);"),t.set(e.name.children[a].value,o)})),this._emitLoopBindings(e,s,r,i),this._withScopedSyntax((function(){n.compile(e.body,t)})),this._emitLine("}"),this._emitLine("} else {");var a=e.name.children,o=a[0],c=a[1],l=this._tmpid(),h=this._tmpid();t.set(o.value,l),t.set(c.value,h),this._emitLine(r+" = -1;"),this._emitLine("var "+i+" = runtime.keys("+s+").length;"),this._emitLine("for(var "+l+" in "+s+") {"),this._emitLine(r+"++;"),this._emitLine("var "+h+" = "+s+"["+l+"];"),this._emitLine('frame.set("'+o.value+'", '+l+");"),this._emitLine('frame.set("'+c.value+'", '+h+");"),this._emitLoopBindings(e,s,r,i),this._withScopedSyntax((function(){n.compile(e.body,t)})),this._emitLine("}"),this._emitLine("}")}else{var u=this._tmpid();t.set(e.name.value,u),this._emitLine("var "+i+" = "+s+".length;"),this._emitLine("for(var "+r+"=0; "+r+" < "+s+".length; "+r+"++) {"),this._emitLine("var "+u+" = "+s+"["+r+"];"),this._emitLine('frame.set("'+e.name.value+'", '+u+");"),this._emitLoopBindings(e,s,r,i),this._withScopedSyntax((function(){n.compile(e.body,t)})),this._emitLine("}")}this._emitLine("}"),e.else_&&(this._emitLine("if (!"+i+") {"),this.compile(e.else_,t),this._emitLine("}")),this._emitLine("frame = frame.pop();")},i._compileAsyncLoop=function(e,t,n){var r=this,i=this._tmpid(),s=this._tmpid(),a=this._tmpid(),o=n?"asyncAll":"asyncEach";if(t=t.push(),this._emitLine("frame = frame.push();"),this._emit("var "+a+" = runtime.fromIterator("),this._compileExpression(e.arr,t),this._emitLine(");"),e.name instanceof hr.Array){var c=e.name.children.length;this._emit("runtime."+o+"("+a+", "+c+", function("),e.name.children.forEach((function(e){r._emit(e.value+",")})),this._emit(i+","+s+",next) {"),e.name.children.forEach((function(e){var n=e.value;t.set(n,n),r._emitLine('frame.set("'+n+'", '+n+");")}))}else{var l=e.name.value;this._emitLine("runtime."+o+"("+a+", 1, function("+l+", "+i+", "+s+",next) {"),this._emitLine('frame.set("'+l+'", '+l+");"),t.set(l,l)}this._emitLoopBindings(e,a,i,s),this._withScopedSyntax((function(){var s;n&&(s=r._pushBuffer()),r.compile(e.body,t),r._emitLine("next("+i+(s?","+s:"")+");"),n&&r._popBuffer()}));var h=this._tmpid();this._emitLine("}, "+this._makeCallback(h)),this._addScopeLevel(),n&&this._emitLine(this.buffer+" += "+h+";"),e.else_&&(this._emitLine("if (!"+a+".length) {"),this.compile(e.else_,t),this._emitLine("}")),this._emitLine("frame = frame.pop();")},i.compileAsyncEach=function(e,t){this._compileAsyncLoop(e,t)},i.compileAsyncAll=function(e,t){this._compileAsyncLoop(e,t,!0)},i._compileMacro=function(e,t){var n=this,r=[],i=null,s="macro_"+this._tmpid(),a=void 0!==t;e.args.children.forEach((function(t,s){s===e.args.children.length-1&&t instanceof hr.Dict?i=t:(n.assertType(t,hr.Symbol),r.push(t))}));var o,c=[].concat(r.map((function(e){return"l_"+e.value})),["kwargs"]),l=r.map((function(e){return'"'+e.value+'"'})),h=(i&&i.children||[]).map((function(e){return'"'+e.key.value+'"'}));o=a?t.push(!0):new Rr,this._emitLines("var "+s+" = runtime.makeMacro(","["+l.join(", ")+"], ","["+h.join(", ")+"], ","function ("+c.join(", ")+") {","var callerFrame = frame;","frame = "+(a?"frame.push(true);":"new runtime.Frame();"),"kwargs = kwargs || {};",'if (Object.prototype.hasOwnProperty.call(kwargs, "caller")) {','frame.set("caller", kwargs.caller); }'),r.forEach((function(e){n._emitLine('frame.set("'+e.value+'", l_'+e.value+");"),o.set(e.value,"l_"+e.value)})),i&&i.children.forEach((function(e){var t=e.key.value;n._emit('frame.set("'+t+'", '),n._emit('Object.prototype.hasOwnProperty.call(kwargs, "'+t+'")'),n._emit(' ? kwargs["'+t+'"] : '),n._compileExpression(e.value,o),n._emit(");")}));var u=this._pushBuffer();return this._withScopedSyntax((function(){n.compile(e.body,o)})),this._emitLine("frame = "+(a?"frame.pop();":"callerFrame;")),this._emitLine("return new runtime.SafeString("+u+");"),this._emitLine("});"),this._popBuffer(),s},i.compileMacro=function(e,t){var n=this._compileMacro(e),r=e.name.value;t.set(r,n),t.parent?this._emitLine('frame.set("'+r+'", '+n+");"):("_"!==e.name.value.charAt(0)&&this._emitLine('context.addExport("'+r+'");'),this._emitLine('context.setVariable("'+r+'", '+n+");"))},i.compileCaller=function(e,t){this._emit("(function (){");var n=this._compileMacro(e,t);this._emit("return "+n+";})()")},i._compileGetTemplate=function(e,t,n,r){var i=this._tmpid(),s=this._templateName(),a=this._makeCallback(i),o=n?"true":"false",c=r?"true":"false";return this._emit("env.getTemplate("),this._compileExpression(e.template,t),this._emitLine(", "+o+", "+s+", "+c+", "+a),i},i.compileImport=function(e,t){var n=e.target.value,r=this._compileGetTemplate(e,t,!1,!1);this._addScopeLevel(),this._emitLine(r+".getExported("+(e.withContext?"context.getVariables(), frame, ":"")+this._makeCallback(r)),this._addScopeLevel(),t.set(n,r),t.parent?this._emitLine('frame.set("'+n+'", '+r+");"):this._emitLine('context.setVariable("'+n+'", '+r+");")},i.compileFromImport=function(e,t){var n=this,r=this._compileGetTemplate(e,t,!1,!1);this._addScopeLevel(),this._emitLine(r+".getExported("+(e.withContext?"context.getVariables(), frame, ":"")+this._makeCallback(r)),this._addScopeLevel(),e.names.children.forEach((function(e){var i,s,a=n._tmpid();e instanceof hr.Pair?(i=e.key.value,s=e.value.value):s=i=e.value,n._emitLine("if(Object.prototype.hasOwnProperty.call("+r+', "'+i+'")) {'),n._emitLine("var "+a+" = "+r+"."+i+";"),n._emitLine("} else {"),n._emitLine("cb(new Error(\"cannot import '"+i+"'\")); return;"),n._emitLine("}"),t.set(s,a),t.parent?n._emitLine('frame.set("'+s+'", '+a+");"):n._emitLine('context.setVariable("'+s+'", '+a+");")}))},i.compileBlock=function(e){var t=this._tmpid();this.inBlock||this._emit('(parentTemplate ? function(e, c, f, r, cb) { cb(""); } : '),this._emit('context.getBlock("'+e.name.value+'")'),this.inBlock||this._emit(")"),this._emitLine("(env, context, frame, runtime, "+this._makeCallback(t)),this._emitLine(this.buffer+" += "+t+";"),this._addScopeLevel()},i.compileSuper=function(e,t){var n=e.blockName.value,r=e.symbol.value,i=this._makeCallback(r);this._emitLine('context.getSuper(env, "'+n+'", b_'+n+", frame, runtime, "+i),this._emitLine(r+" = runtime.markSafe("+r+");"),this._addScopeLevel(),t.set(r,r)},i.compileExtends=function(e,t){var n=this._tmpid(),r=this._compileGetTemplate(e,t,!0,!1);this._emitLine("parentTemplate = "+r),this._emitLine("for(var "+n+" in parentTemplate.blocks) {"),this._emitLine("context.addBlock("+n+", parentTemplate.blocks["+n+"]);"),this._emitLine("}"),this._addScopeLevel()},i.compileInclude=function(e,t){this._emitLine("var tasks = [];"),this._emitLine("tasks.push("),this._emitLine("function(callback) {");var n=this._compileGetTemplate(e,t,!1,e.ignoreMissing);this._emitLine("callback(null,"+n+");});"),this._emitLine("});");var r=this._tmpid();this._emitLine("tasks.push("),this._emitLine("function(template, callback){"),this._emitLine("template.render(context.getVariables(), frame, "+this._makeCallback(r)),this._emitLine("callback(null,"+r+");});"),this._emitLine("});"),this._emitLine("tasks.push("),this._emitLine("function(result, callback){"),this._emitLine(this.buffer+" += result;"),this._emitLine("callback(null);"),this._emitLine("});"),this._emitLine("env.waterfall(tasks, function(){"),this._addScopeLevel()},i.compileTemplateData=function(e,t){this.compileLiteral(e,t)},i.compileCapture=function(e,t){var n=this,r=this.buffer;this.buffer="output",this._emitLine("(function() {"),this._emitLine('var output = "";'),this._withScopedSyntax((function(){n.compile(e.body,t)})),this._emitLine("return output;"),this._emitLine("})()"),this.buffer=r},i.compileOutput=function(e,t){var n=this;e.children.forEach((function(r){r instanceof hr.TemplateData?r.value&&(n._emit(n.buffer+" += "),n.compileLiteral(r,t),n._emitLine(";")):(n._emit(n.buffer+" += runtime.suppressValue("),n.throwOnUndefined&&n._emit("runtime.ensureDefined("),n.compile(r,t),n.throwOnUndefined&&n._emit(","+e.lineno+","+e.colno+")"),n._emit(", env.opts.autoescape);\n"))}))},i.compileRoot=function(e,t){var n=this;t&&this.fail("compileRoot: root node can't have frame"),t=new Rr,this._emitFuncBegin(e,"root"),this._emitLine("var parentTemplate = null;"),this._compileChildren(e,t),this._emitLine("if(parentTemplate) {"),this._emitLine("parentTemplate.rootRenderFunc(env, context, frame, runtime, cb);"),this._emitLine("} else {"),this._emitLine("cb(null, "+this.buffer+");"),this._emitLine("}"),this._emitFuncEnd(!0),this.inBlock=!0;var r=[],i=e.findAll(hr.Block);i.forEach((function(e,t){var i=e.name.value;if(-1!==r.indexOf(i))throw new Error('Block "'+i+'" defined more than once.');r.push(i),n._emitFuncBegin(e,"b_"+i);var s=new Rr;n._emitLine("var frame = frame.push(true);"),n.compile(e.body,s),n._emitFuncEnd()})),this._emitLine("return {"),i.forEach((function(e,t){var r="b_"+e.name.value;n._emitLine(r+": "+r+",")})),this._emitLine("root: root\n};")},i.compile=function(e,t){var n=this["compile"+e.typename];n?n.call(this,e,t):this.fail("compile: Cannot compile node: "+e.typename,e.lineno,e.colno)},i.getCode=function(){return this.codebuf.join("")},r}(en.Obj),xr={compile:function(e,t,n,r,i){void 0===i&&(i={});var s=new Pr(r,i.throwOnUndefined),a=(n||[]).map((function(e){return e.preprocess})).filter((function(e){return!!e})).reduce((function(e,t){return t(e)}),e);return s.compile(Nr.transform(fr.parse(a,n,i),t,r)),s.getCode()},Compiler:Pr},wr=Ke((function(e){var t=e.exports={};function n(e,t){return null==e||!1===e?t:e}function r(e){return e!=e}function i(e){var t=(e=n(e,"")).toLowerCase();return kr.copySafeness(e,t.charAt(0).toUpperCase()+t.slice(1))}function s(e){if(je.isString(e))return e.split("");if(je.isObject(e))return je._entries(e||{}).map((function(e){return{key:e[0],value:e[1]}}));if(je.isArray(e))return e;throw new je.TemplateError("list filter: type not iterable")}function a(e){return function(t,n,r){void 0===n&&(n="truthy");var i=this,s=i.env.getTest(n);return je.toArray(t).filter((function(t){return s.call(i,t,r)===e}))}}function o(e){return kr.copySafeness(e,e.replace(/^\s*|\s*$/g,""))}t.abs=Math.abs,t.batch=function(e,t,n){var r,i=[],s=[];for(r=0;r=t)return e;var r=t-e.length,i=je.repeat(" ",r/2-r%2),s=je.repeat(" ",r/2);return kr.copySafeness(e,i+e+s)},t.default=function(e,t,n){return n?e||t:void 0!==e?e:t},t.dictsort=function(e,t,n){if(!je.isObject(e))throw new je.TemplateError("dictsort filter: val must be an object");var r,i=[];for(var s in e)i.push([s,e[s]]);if(void 0===n||"key"===n)r=0;else{if("value"!==n)throw new je.TemplateError("dictsort filter: You can only sort by either key or value");r=1}return i.sort((function(e,n){var i=e[r],s=n[r];return t||(je.isString(i)&&(i=i.toUpperCase()),je.isString(s)&&(s=s.toUpperCase())),i>s?1:i===s?0:-1})),i},t.dump=function(e,t){return JSON.stringify(e,null,t)},t.escape=function(e){return e instanceof kr.SafeString?e:(e=null==e?"":e,kr.markSafe(je.escape(e.toString())))},t.safe=function(e){return e instanceof kr.SafeString?e:(e=null==e?"":e,kr.markSafe(e.toString()))},t.first=function(e){return e[0]},t.forceescape=function(e){return e=null==e?"":e,kr.markSafe(je.escape(e.toString()))},t.groupby=function(e,t){return je.groupBy(e,t,this.env.opts.throwOnUndefined)},t.indent=function(e,t,r){if(""===(e=n(e,"")))return"";t=t||4;var i=e.split("\n"),s=je.repeat(" ",t),a=i.map((function(e,t){return 0!==t||r?""+s+e:e})).join("\n");return kr.copySafeness(e,a)},t.join=function(e,t,n){return t=t||"",n&&(e=je.map(e,(function(e){return e[n]}))),e.join(t)},t.last=function(e){return e[e.length-1]},t.length=function(e){var t=n(e,"");return void 0!==t?"function"==typeof Map&&t instanceof Map||"function"==typeof Set&&t instanceof Set?t.size:!je.isObject(t)||t instanceof kr.SafeString?t.length:je.keys(t).length:0},t.list=s,t.lower=function(e){return(e=n(e,"")).toLowerCase()},t.nl2br=function(e){return null==e?"":kr.copySafeness(e,e.replace(/\r\n|\n/g,"
    \n"))},t.random=function(e){return e[Math.floor(Math.random()*e.length)]},t.reject=a(!1),t.rejectattr=function(e,t){return e.filter((function(e){return!e[t]}))},t.select=a(!0),t.selectattr=function(e,t){return e.filter((function(e){return!!e[t]}))},t.replace=function(e,t,n,r){var i=e;if(t instanceof RegExp)return e.replace(t,n);void 0===r&&(r=-1);var s="";if("number"==typeof t)t=""+t;else if("string"!=typeof t)return e;if("number"==typeof e&&(e=""+e),"string"!=typeof e&&!(e instanceof kr.SafeString))return e;if(""===t)return s=n+e.split("").join(n)+n,kr.copySafeness(e,s);var a=e.indexOf(t);if(0===r||-1===a)return e;for(var o=0,c=0;a>-1&&(-1===r||c=i&&h.push(n),s.push(h)}return s},t.sum=function(e,t,n){return void 0===n&&(n=0),t&&(e=je.map(e,(function(e){return e[t]}))),n+e.reduce((function(e,t){return e+t}),0)},t.sort=kr.makeMacro(["value","reverse","case_sensitive","attribute"],[],(function(e,t,n,r){var i=this,s=je.map(e,(function(e){return e})),a=je.getAttrGetter(r);return s.sort((function(e,s){var o=r?a(e):e,c=r?a(s):s;if(i.env.opts.throwOnUndefined&&r&&(void 0===o||void 0===c))throw new TypeError('sort: attribute "'+r+'" resolved to undefined');return!n&&je.isString(o)&&je.isString(c)&&(o=o.toLowerCase(),c=c.toLowerCase()),oc?t?-1:1:0})),s})),t.string=function(e){return kr.copySafeness(e,e)},t.striptags=function(e,t){var r=o((e=n(e,"")).replace(/<\/?([a-z][a-z0-9]*)\b[^>]*>|/gi,"")),i="";return i=t?r.replace(/^ +| +$/gm,"").replace(/ +/g," ").replace(/(\r\n)/g,"\n").replace(/\n\n\n+/g,"\n\n"):r.replace(/\s+/gi," "),kr.copySafeness(e,i)},t.title=function(e){var t=(e=n(e,"")).split(" ").map((function(e){return i(e)}));return kr.copySafeness(e,t.join(" "))},t.trim=o,t.truncate=function(e,t,r,i){var s=e;if(t=t||255,(e=n(e,"")).length<=t)return e;if(r)e=e.substring(0,t);else{var a=e.lastIndexOf(" ",t);-1===a&&(a=t),e=e.substring(0,a)}return e+=null!=i?i:"...",kr.copySafeness(s,e)},t.upper=function(e){return(e=n(e,"")).toUpperCase()},t.urlencode=function(e){var t=encodeURIComponent;return je.isString(e)?t(e):(je.isArray(e)?e:je._entries(e)).map((function(e){var n=e[0],r=e[1];return t(n)+"="+t(r)})).join("&")};var c=/^(?:\(|<|<)?(.*?)(?:\.|,|\)|\n|>)?$/,l=/^[\w.!#$%&'*+\-\/=?\^`{|}~]+@[a-z\d\-]+(\.[a-z\d\-]+)+$/i,h=/^https?:\/\/.*$/,u=/^www\./,p=/\.(?:org|net|com)(?:\:|\/|$)/;t.urlize=function(e,t,n){r(t)&&(t=1/0);var i=!0===n?' rel="nofollow"':"";return e.split(/(\s+)/).filter((function(e){return e&&e.length})).map((function(e){var n=e.match(c),r=n?n[1]:e,s=r.substr(0,t);return h.test(r)?'"+s+"":u.test(r)?'"+s+"":l.test(r)?''+r+"":p.test(r)?'"+s+"":e})).join("")},t.wordcount=function(e){var t=(e=n(e,""))?e.match(/\w+/g):null;return t?t.length:null},t.float=function(e,t){var n=parseFloat(e);return r(n)?t:n};var f=kr.makeMacro(["value","default","base"],[],(function(e,t,n){void 0===n&&(n=10);var i=parseInt(e,n);return r(i)?t:i}));t.int=f,t.d=t.default,t.e=t.escape})),Br={};function Fr(e,t){for(var n=0,r=e.length-1;r>=0;r--){var i=e[r];"."===i?e.splice(r,1):".."===i?(e.splice(r,1),n++):n&&(e.splice(r,1),n--)}if(t)for(;n--;n)e.unshift("..");return e}var Ur=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/,Hr=function(e){return Ur.exec(e).slice(1)};function Gr(){for(var e="",t=!1,n=arguments.length-1;n>=-1&&!t;n--){var r=n>=0?arguments[n]:"/";if("string"!=typeof r)throw new TypeError("Arguments to path.resolve must be strings");r&&(e=r+"/"+e,t="/"===r.charAt(0))}return(t?"/":"")+(e=Fr(jr(e.split("/"),(function(e){return!!e})),!t).join("/"))||"."}function Yr(e){var t=qr(e),n="/"===Vr(e,-1);return(e=Fr(jr(e.split("/"),(function(e){return!!e})),!t).join("/"))||t||(e="."),e&&n&&(e+="/"),(t?"/":"")+e}function qr(e){return"/"===e.charAt(0)}var Kr={extname:function(e){return Hr(e)[3]},basename:function(e,t){var n=Hr(e)[2];return t&&n.substr(-1*t.length)===t&&(n=n.substr(0,n.length-t.length)),n},dirname:function(e){var t=Hr(e),n=t[0],r=t[1];return n||r?(r&&(r=r.substr(0,r.length-1)),n+r):"."},sep:"/",delimiter:":",relative:function(e,t){function n(e){for(var t=0;t=0&&""===e[n];n--);return t>n?[]:e.slice(t,n-t+1)}e=Gr(e).substr(1),t=Gr(t).substr(1);for(var r=n(e.split("/")),i=n(t.split("/")),s=Math.min(r.length,i.length),a=s,o=0;o=t},t.greaterthan=function(e,t){return e>t},t.gt=t.greaterthan,t.le=function(e,t){return e<=t},t.lessthan=function(e,t){return e=e.length&&(t=0),this.current=e[t],this.current}}}ni.callable,ni.defined,ni.divisibleby,ni.escaped,ni.equalto,ni.eq,ni.sameas,ni.even,ni.falsy,ni.ge,ni.greaterthan,ni.gt,ni.le,ni.lessthan,ni.lt,ni.lower,ni.ne,ni.number,ni.odd,ni.string,ni.truthy,ni.undefined,ni.upper,ni.iterable,ni.mapping;var ii=function(){return{range:function(e,t,n){void 0===t?(t=e,e=0,n=1):n||(n=1);var r=[];if(n>0)for(var i=e;it;s+=n)r.push(s);return r},cycler:function(){return ri(Array.prototype.slice.call(arguments))},joiner:function(e){return function(e){e=e||",";var t=!0;return function(){var n=t?"":e;return t=!1,n}}(e)}}};function si(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,ai(e,t)}function ai(e,t){return ai=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},ai(e,t)}var oi=ti.FileSystemLoader,ci=ti.WebLoader,li=ti.PrecompiledLoader,hi=en.Obj,ui=en.EmitterObj,pi=kr.handleError,fi=kr.Frame;function di(e,t,n){Gt((function(){e(t,n)}))}var Ei={type:"code",obj:{root:function(e,t,n,r,i){try{i(null,"")}catch(e){i(pi(e,null,null))}}}},mi=function(e){function t(){return e.apply(this,arguments)||this}si(t,e);var n=t.prototype;return n.init=function(e,t){var n=this;t=this.opts=t||{},this.opts.dev=!!t.dev,this.opts.autoescape=null==t.autoescape||t.autoescape,this.opts.throwOnUndefined=!!t.throwOnUndefined,this.opts.trimBlocks=!!t.trimBlocks,this.opts.lstripBlocks=!!t.lstripBlocks,this.loaders=[],e?this.loaders=je.isArray(e)?e:[e]:oi?this.loaders=[new oi("views")]:ci&&(this.loaders=[new ci("/views")]),"undefined"!=typeof window&&window.jinja2Precompiled&&this.loaders.unshift(new li(window.jinja2Precompiled)),this._initLoaders(),this.globals=ii(),this.filters={},this.tests={},this.asyncFilters=[],this.extensions={},this.extensionsList=[],je._entries(wr).forEach((function(e){var t=e[0],r=e[1];return n.addFilter(t,r)})),je._entries(ni).forEach((function(e){var t=e[0],r=e[1];return n.addTest(t,r)}))},n._initLoaders=function(){var e=this;this.loaders.forEach((function(t){t.cache={},"function"==typeof t.on&&(t.on("update",(function(n,r){t.cache[n]=null,e.emit("update",n,r,t)})),t.on("load",(function(n,r){e.emit("load",n,r,t)})))}))},n.invalidateCache=function(){this.loaders.forEach((function(e){e.cache={}}))},n.addExtension=function(e,t){return t.__name=e,this.extensions[e]=t,this.extensionsList.push(t),this},n.removeExtension=function(e){var t=this.getExtension(e);t&&(this.extensionsList=je.without(this.extensionsList,t),delete this.extensions[e])},n.getExtension=function(e){return this.extensions[e]},n.hasExtension=function(e){return!!this.extensions[e]},n.addGlobal=function(e,t){return this.globals[e]=t,this},n.getGlobal=function(e){if(void 0===this.globals[e])throw new Error("global not found: "+e);return this.globals[e]},n.addFilter=function(e,t,n){var r=t;return n&&this.asyncFilters.push(e),this.filters[e]=r,this},n.getFilter=function(e){if(!this.filters[e])throw new Error("filter not found: "+e);return this.filters[e]},n.addTest=function(e,t){return this.tests[e]=t,this},n.getTest=function(e){if(!this.tests[e])throw new Error("test not found: "+e);return this.tests[e]},n.resolveTemplate=function(e,t,n){return!(!e.isRelative||!t)&&e.isRelative(n)&&e.resolve?e.resolve(t,n):n},n.getTemplate=function(e,t,n,r,i){var s,a=this,o=this,c=null;if(e&&e.raw&&(e=e.raw),je.isFunction(n)&&(i=n,n=null,t=t||!1),je.isFunction(t)&&(i=t,t=!1),e instanceof _i)c=e;else{if("string"!=typeof e)throw new Error("template names must be a string: "+e);for(var l=0;le.length-3)return!1;var n=e.charCodeAt(t+1);return(n>=Pi.LowerA&&n<=Pi.LowerZ||n>=Pi.UpperA&&n<=Pi.UpperZ||n===Pi.Exclamation)&&e.includes(">",t+2)}!function(e){e[e.LowerA=97]="LowerA",e[e.LowerZ=122]="LowerZ",e[e.UpperA=65]="UpperA",e[e.UpperZ=90]="UpperZ",e[e.Exclamation=33]="Exclamation"}(Pi||(Pi={}));var Hi=Object.prototype.hasOwnProperty,Gi=/\s+/,Yi={null:null,true:!0,false:!1},qi=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,Ki=/^{[^]*}$|^\[[^]*]$/;function ji(e,t,n){var r;if(e&&I(e))return null!==(r=e.attribs)&&void 0!==r||(e.attribs={}),t?Hi.call(e.attribs,t)?!n&&qi.test(t)?t:e.attribs[t]:"option"===e.name&&"value"===t?Li(e.children):"input"!==e.name||"radio"!==e.attribs.type&&"checkbox"!==e.attribs.type||"value"!==t?void 0:"on":e.attribs}function Vi(e,t,n){null===n?zi(e,t):e.attribs[t]="".concat(n)}function Wi(e,t,n){return t in e?e[t]:!n&&qi.test(t)?void 0!==ji(e,t,!1):ji(e,t,n)}function Qi(e,t,n,r){t in e?e[t]=n:Vi(e,t,!r&&qi.test(t)?n?"":null:"".concat(n))}function Xi(e,t,n){var r,i=e;null!==(r=i.data)&&void 0!==r||(i.data={}),"object"==typeof t?Object.assign(i.data,t):"string"==typeof t&&void 0!==n&&(i.data[t]=n)}function $i(e,t){var n,r,i,s;null==t?r=(n=Object.keys(e.attribs).filter((function(e){return e.startsWith("data-")}))).map((function(e){return e.slice("data-".length).replace(/[_.-](\w|$)/g,(function(e,t){return t.toUpperCase()}))})):(n=["data-"+(s=t,s.replace(/[A-Z]/g,"-$&").toLowerCase())],r=[t]);for(var a=0;a1?this:ji(this[0],e,this.options.xmlMode)},prop:function(e,t){var n,r=this;if("string"==typeof e&&void 0===t){var i=this[0];if(!i||!I(i))return;switch(e){case"style":var s=this.css(),a=Object.keys(s);return a.forEach((function(e,t){s[t]=e})),s.length=a.length,s;case"tagName":case"nodeName":return i.name.toUpperCase();case"href":case"src":var o=null===(n=i.attribs)||void 0===n?void 0:n[e];return"undefined"==typeof URL||("href"!==e||"a"!==i.tagName&&"link"!==i.name)&&("src"!==e||"img"!==i.tagName&&"iframe"!==i.tagName&&"audio"!==i.tagName&&"video"!==i.tagName&&"source"!==i.tagName)||void 0===o||!this.options.baseURI?o:new URL(o,this.options.baseURI).href;case"innerText":return J(i);case"textContent":return z(i);case"outerHTML":return this.clone().wrap("").parent().html();case"innerHTML":return this.html();default:return Wi(i,e,this.options.xmlMode)}}if("object"==typeof e||void 0!==t){if("function"==typeof t){if("object"==typeof e)throw new Error("Bad combination of arguments.");return Bi(this,(function(n,i){I(n)&&Qi(n,e,t.call(n,i,Wi(n,e,r.options.xmlMode)),r.options.xmlMode)}))}return Bi(this,(function(n){I(n)&&("object"==typeof e?Object.keys(e).forEach((function(t){var i=e[t];Qi(n,t,i,r.options.xmlMode)})):Qi(n,e,t,r.options.xmlMode))}))}},data:function(e,t){var n,r=this[0];if(r&&I(r)){var i=r;return null!==(n=i.data)&&void 0!==n||(i.data={}),e?"object"==typeof e||void 0!==t?(Bi(this,(function(n){I(n)&&("object"==typeof e?Xi(n,e):Xi(n,e,t))})),this):Hi.call(i.data,e)?i.data[e]:$i(i,e):$i(i)}},val:function(e){var t=0===arguments.length,n=this[0];if(!n||!I(n))return t?void 0:this;switch(n.name){case"textarea":return this.text(e);case"select":var r=this.find("option:selected");if(!t){if(null==this.attr("multiple")&&"object"==typeof e)return this;this.find("option").removeAttr("selected");for(var i="object"!=typeof e?[e]:e,s=0;s-1;){var i=r+e.length;if((0===r||Gi.test(n[r-1]))&&(i===n.length||Gi.test(n[i])))return!0}return!1}))},addClass:function e(t){if("function"==typeof t)return Bi(this,(function(n,r){if(I(n)){var i=n.attribs.class||"";e.call([n],t.call(n,r,i))}}));if(!t||"string"!=typeof t)return this;for(var n=t.split(Gi),r=this.length,i=0;i=0&&(t.splice(o,1),s=!0,a--)}s&&(e.attribs.class=t.join(" "))}}))},toggleClass:function e(t,n){if("function"==typeof t)return Bi(this,(function(r,i){I(r)&&e.call([r],t.call(r,i,r.attribs.class||"",n),n)}));if(!t||"string"!=typeof t)return this;for(var r=t.split(Gi),i=r.length,s="boolean"==typeof n?n?1:-1:0,a=this.length,o=0;o=0&&u<0?l.push(r[h]):s<=0&&u>=0&&l.splice(u,1)}c.attribs.class=l.join(" ")}}return this}});!function(e){e.Attribute="attribute",e.Pseudo="pseudo",e.PseudoElement="pseudo-element",e.Tag="tag",e.Universal="universal",e.Adjacent="adjacent",e.Child="child",e.Descendant="descendant",e.Parent="parent",e.Sibling="sibling",e.ColumnCombinator="column-combinator"}(Zi||(Zi={})),function(e){e.Any="any",e.Element="element",e.End="end",e.Equals="equals",e.Exists="exists",e.Hyphen="hyphen",e.Not="not",e.Start="start"}(es||(es={}));const ns=/^[^\\#]?(?:\\(?:[\da-f]{1,6}\s?|.)|[\w\-\u00b0-\uFFFF])+/,rs=/\\([\da-f]{1,6}\s?|(\s)|.)/gi,is=new Map([[126,es.Element],[94,es.Start],[36,es.End],[42,es.Any],[33,es.Not],[124,es.Hyphen]]),ss=new Set(["has","not","matches","is","where","host","host-context"]);function as(e){switch(e.type){case Zi.Adjacent:case Zi.Child:case Zi.Descendant:case Zi.Parent:case Zi.Sibling:case Zi.ColumnCombinator:return!0;default:return!1}}const os=new Set(["contains","icontains"]);function cs(e,t,n){const r=parseInt(t,16)-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)}function ls(e){return e.replace(rs,cs)}function hs(e){return 39===e||34===e}function us(e){return 32===e||9===e||10===e||12===e||13===e}function ps(e){const t=[],n=fs(t,`${e}`,0);if(n0&&n0&&as(r[r.length-1]))throw new Error("Did not expect successive traversals.")}function l(e){r.length>0&&r[r.length-1].type===Zi.Descendant?r[r.length-1].type=e:(c(),r.push({type:e}))}function h(e,t){r.push({type:Zi.Attribute,name:e,action:t,value:i(1),namespace:null,ignoreCase:"quirks"})}function u(){if(r.length&&r[r.length-1].type===Zi.Descendant&&r.pop(),0===r.length)throw new Error("Empty sub-selector");e.push(r)}if(s(0),t.length===n)return n;e:for(;n=0&&r>=1)):e.type===Zi.Pseudo&&(e.data?"has"===e.name||"contains"===e.name?r=0:Array.isArray(e.data)?(r=Math.min(...e.data.map((e=>Math.min(...e.map(gs))))),r<0&&(r=0)):r=2:r=3),r}const Ns=/[-[\]{}()*+?.,\\^$|#\s]/g;function Cs(e){return e.replace(Ns,"\\$&")}const Is=new Set(["accept","accept-charset","align","alink","axis","bgcolor","charset","checked","clear","codetype","color","compact","declare","defer","dir","direction","disabled","enctype","face","frame","hreflang","http-equiv","lang","language","link","media","method","multiple","nohref","noresize","noshade","nowrap","readonly","rel","rev","rules","scope","scrolling","selected","shape","target","text","type","valign","valuetype","vlink"]);function Ss(e,t){return"boolean"==typeof e.ignoreCase?e.ignoreCase:"quirks"===e.ignoreCase?!!t.quirksMode:!t.xmlMode&&Is.has(e.name)}const bs={equals(e,t,n){const{adapter:r}=n,{name:i}=t;let{value:s}=t;return Ss(t,n)?(s=s.toLowerCase(),t=>{const n=r.getAttributeValue(t,i);return null!=n&&n.length===s.length&&n.toLowerCase()===s&&e(t)}):t=>r.getAttributeValue(t,i)===s&&e(t)},hyphen(e,t,n){const{adapter:r}=n,{name:i}=t;let{value:s}=t;const a=s.length;return Ss(t,n)?(s=s.toLowerCase(),function(t){const n=r.getAttributeValue(t,i);return null!=n&&(n.length===a||"-"===n.charAt(a))&&n.substr(0,a).toLowerCase()===s&&e(t)}):function(t){const n=r.getAttributeValue(t,i);return null!=n&&(n.length===a||"-"===n.charAt(a))&&n.substr(0,a)===s&&e(t)}},element(e,t,n){const{adapter:r}=n,{name:i,value:s}=t;if(/\s/.test(s))return ds.falseFunc;const a=new RegExp(`(?:^|\\s)${Cs(s)}(?:$|\\s)`,Ss(t,n)?"i":"");return function(t){const n=r.getAttributeValue(t,i);return null!=n&&n.length>=s.length&&a.test(n)&&e(t)}},exists:(e,{name:t},{adapter:n})=>r=>n.hasAttrib(r,t)&&e(r),start(e,t,n){const{adapter:r}=n,{name:i}=t;let{value:s}=t;const a=s.length;return 0===a?ds.falseFunc:Ss(t,n)?(s=s.toLowerCase(),t=>{const n=r.getAttributeValue(t,i);return null!=n&&n.length>=a&&n.substr(0,a).toLowerCase()===s&&e(t)}):t=>{var n;return!!(null===(n=r.getAttributeValue(t,i))||void 0===n?void 0:n.startsWith(s))&&e(t)}},end(e,t,n){const{adapter:r}=n,{name:i}=t;let{value:s}=t;const a=-s.length;return 0===a?ds.falseFunc:Ss(t,n)?(s=s.toLowerCase(),t=>{var n;return(null===(n=r.getAttributeValue(t,i))||void 0===n?void 0:n.substr(a).toLowerCase())===s&&e(t)}):t=>{var n;return!!(null===(n=r.getAttributeValue(t,i))||void 0===n?void 0:n.endsWith(s))&&e(t)}},any(e,t,n){const{adapter:r}=n,{name:i,value:s}=t;if(""===s)return ds.falseFunc;if(Ss(t,n)){const t=new RegExp(Cs(s),"i");return function(n){const a=r.getAttributeValue(n,i);return null!=a&&a.length>=s.length&&t.test(a)&&e(n)}}return t=>{var n;return!!(null===(n=r.getAttributeValue(t,i))||void 0===n?void 0:n.includes(s))&&e(t)}},not(e,t,n){const{adapter:r}=n,{name:i}=t;let{value:s}=t;return""===s?t=>!!r.getAttributeValue(t,i)&&e(t):Ss(t,n)?(s=s.toLowerCase(),t=>{const n=r.getAttributeValue(t,i);return(null==n||n.length!==s.length||n.toLowerCase()!==s)&&e(t)}):t=>r.getAttributeValue(t,i)!==s&&e(t)}};var Os=Ke((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.parse=void 0;var n=new Set([9,10,12,13,32]),r="0".charCodeAt(0),i="9".charCodeAt(0);t.parse=function(e){if("even"===(e=e.trim().toLowerCase()))return[2,0];if("odd"===e)return[2,1];var t=0,s=0,a=c(),o=l();if(t=r&&e.charCodeAt(t)<=i;)s=10*s+(e.charCodeAt(t)-r),t++;return t===n?null:s}function h(){for(;t=n};var r=Math.abs(t),i=(n%r+r)%r;return t>1?function(e){return e>=n&&e%r===i}:function(e){return e<=n&&e%r===i}}}));qe(ys),ys.compile;var Ls=Os,ks=ys,vs=Ke((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.compile=t.parse=void 0,Object.defineProperty(t,"parse",{enumerable:!0,get:function(){return Ls.parse}}),Object.defineProperty(t,"compile",{enumerable:!0,get:function(){return ks.compile}}),t.default=function(e){return(0,ks.compile)((0,Ls.parse)(e))}})),Ds=qe(vs);function Rs(e,t){return n=>{const r=t.getParent(n);return null!=r&&t.isTag(r)&&e(n)}}vs.compile,vs.parse;const Ms={contains:(e,t,{adapter:n})=>function(r){return e(r)&&n.getText(r).includes(t)},icontains(e,t,{adapter:n}){const r=t.toLowerCase();return function(t){return e(t)&&n.getText(t).toLowerCase().includes(r)}},"nth-child"(e,t,{adapter:n,equals:r}){const i=Ds(t);return i===ds.falseFunc?ds.falseFunc:i===ds.trueFunc?Rs(e,n):function(t){const s=n.getSiblings(t);let a=0;for(let e=0;e=0&&!r(t,s[e]);e--)n.isTag(s[e])&&a++;return i(a)&&e(t)}},"nth-of-type"(e,t,{adapter:n,equals:r}){const i=Ds(t);return i===ds.falseFunc?ds.falseFunc:i===ds.trueFunc?Rs(e,n):function(t){const s=n.getSiblings(t);let a=0;for(let e=0;e=0;e--){const i=s[e];if(r(t,i))break;n.isTag(i)&&n.getName(i)===n.getName(t)&&a++}return i(a)&&e(t)}},root:(e,t,{adapter:n})=>t=>{const r=n.getParent(t);return(null==r||!n.isTag(r))&&e(t)},scope(e,t,n,r){const{equals:i}=n;return r&&0!==r.length?1===r.length?t=>i(r[0],t)&&e(t):t=>r.includes(t)&&e(t):Ms.root(e,t,n)},hover:Ps("isHovered"),visited:Ps("isVisited"),active:Ps("isActive")};function Ps(e){return function(t,n,{adapter:r}){const i=r[e];return"function"!=typeof i?ds.falseFunc:function(e){return i(e)&&t(e)}}}const xs={empty:(e,{adapter:t})=>!t.getChildren(e).some((e=>t.isTag(e)||""!==t.getText(e))),"first-child"(e,{adapter:t,equals:n}){if(t.prevElementSibling)return null==t.prevElementSibling(e);const r=t.getSiblings(e).find((e=>t.isTag(e)));return null!=r&&n(e,r)},"last-child"(e,{adapter:t,equals:n}){const r=t.getSiblings(e);for(let i=r.length-1;i>=0;i--){if(n(e,r[i]))return!0;if(t.isTag(r[i]))break}return!1},"first-of-type"(e,{adapter:t,equals:n}){const r=t.getSiblings(e),i=t.getName(e);for(let s=0;s=0;s--){const a=r[s];if(n(e,a))return!0;if(t.isTag(a)&&t.getName(a)===i)break}return!1},"only-of-type"(e,{adapter:t,equals:n}){const r=t.getName(e);return t.getSiblings(e).every((i=>n(e,i)||!t.isTag(i)||t.getName(i)!==r))},"only-child":(e,{adapter:t,equals:n})=>t.getSiblings(e).every((r=>n(e,r)||!t.isTag(r)))};function ws(e,t,n,r){if(null===n){if(e.length>r)throw new Error(`Pseudo-class :${t} requires an argument`)}else if(e.length===r)throw new Error(`Pseudo-class :${t} doesn't have any arguments`)}const Bs={"any-link":":is(a, area, link)[href]",link:":any-link:not(:visited)",disabled:":is(\n :is(button, input, select, textarea, optgroup, option)[disabled],\n optgroup[disabled] > option,\n fieldset[disabled]:not(fieldset[disabled] legend:first-of-type *)\n )",enabled:":not(:disabled)",checked:":is(:is(input[type=radio], input[type=checkbox])[checked], option:selected)",required:":is(input, select, textarea)[required]",optional:":is(input, select, textarea):not([required])",selected:"option:is([selected], select:not([multiple]):not(:has(> option[selected])) > :first-of-type)",checkbox:"[type=checkbox]",file:"[type=file]",password:"[type=password]",radio:"[type=radio]",reset:"[type=reset]",image:"[type=image]",submit:"[type=submit]",parent:":not(:empty)",header:":is(h1, h2, h3, h4, h5, h6)",button:":is(button, input[type=button])",input:":is(input, textarea, select, button)",text:"input:is(:not([type!='']), [type=text])"},Fs={};function Us(e,t){const n=t.getSiblings(e);if(n.length<=1)return[];const r=n.indexOf(e);return r<0||r===n.length-1?[]:n.slice(r+1).filter(t.isTag)}function Hs(e){return{xmlMode:!!e.xmlMode,lowerCaseAttributeNames:!!e.lowerCaseAttributeNames,lowerCaseTags:!!e.lowerCaseTags,quirksMode:!!e.quirksMode,cacheResults:!!e.cacheResults,pseudos:e.pseudos,adapter:e.adapter,equals:e.equals}}const Gs=(e,t,n,r,i)=>{const s=i(t,Hs(n),r);return s===ds.trueFunc?e:s===ds.falseFunc?ds.falseFunc:t=>s(t)&&e(t)},Ys={is:Gs,matches:Gs,where:Gs,not(e,t,n,r,i){const s=i(t,Hs(n),r);return s===ds.falseFunc?e:s===ds.trueFunc?ds.falseFunc:t=>!s(t)&&e(t)},has(e,t,n,r,i){const{adapter:s}=n,a=Hs(n);a.relativeSelector=!0;const o=t.some((e=>e.some(Ts)))?[Fs]:void 0,c=i(t,a,o);if(c===ds.falseFunc)return ds.falseFunc;const l=function(e,t){return e===ds.falseFunc?ds.falseFunc:n=>t.isTag(n)&&e(n)}(c,s);if(o&&c!==ds.trueFunc){const{shouldTestNextSiblings:t=!1}=c;return n=>{if(!e(n))return!1;o[0]=n;const r=s.getChildren(n),i=t?[...r,...Us(n,s)]:r;return s.existsOne(l,i)}}return t=>e(t)&&s.existsOne(l,s.getChildren(t))}};function qs(e,t){const n=t.getParent(e);return n&&t.isTag(n)?n:null}function Ks(e,t,n,r,i){const{adapter:s,equals:a}=n;switch(t.type){case Zi.PseudoElement:throw new Error("Pseudo-elements are not supported by css-select");case Zi.ColumnCombinator:throw new Error("Column combinators are not yet supported by css-select");case Zi.Attribute:if(null!=t.namespace)throw new Error("Namespaced attributes are not yet supported by css-select");return n.xmlMode&&!n.lowerCaseAttributeNames||(t.name=t.name.toLowerCase()),bs[t.action](e,t,n);case Zi.Pseudo:return function(e,t,n,r,i){var s;const{name:a,data:o}=t;if(Array.isArray(o)){if(!(a in Ys))throw new Error(`Unknown pseudo-class :${a}(${o})`);return Ys[a](e,o,n,r,i)}const c=null===(s=n.pseudos)||void 0===s?void 0:s[a],l="string"==typeof c?c:Bs[a];if("string"==typeof l){if(null!=o)throw new Error(`Pseudo ${a} doesn't have any arguments`);const t=ps(l);return Ys.is(e,t,n,r,i)}if("function"==typeof c)return ws(c,a,o,1),t=>c(t,o)&&e(t);if(a in Ms)return Ms[a](e,o,n,r);if(a in xs){const t=xs[a];return ws(t,a,o,2),r=>t(r,n,o)&&e(r)}throw new Error(`Unknown pseudo-class :${a}`)}(e,t,n,r,i);case Zi.Tag:{if(null!=t.namespace)throw new Error("Namespaced tag names are not yet supported by css-select");let{name:r}=t;return n.xmlMode&&!n.lowerCaseTags||(r=r.toLowerCase()),function(t){return s.getName(t)===r&&e(t)}}case Zi.Descendant:{if(!1===n.cacheResults||"undefined"==typeof WeakSet)return function(t){let n=t;for(;n=qs(n,s);)if(e(n))return!0;return!1};const t=new WeakSet;return function(n){let r=n;for(;r=qs(r,s);)if(!t.has(r)){if(s.isTag(r)&&e(r))return!0;t.add(r)}return!1}}case"_flexibleDescendant":return function(t){let n=t;do{if(e(n))return!0}while(n=qs(n,s));return!1};case Zi.Parent:return function(t){return s.getChildren(t).some((t=>s.isTag(t)&&e(t)))};case Zi.Child:return function(t){const n=s.getParent(t);return null!=n&&s.isTag(n)&&e(n)};case Zi.Sibling:return function(t){const n=s.getSiblings(t);for(let r=0;re.some(js))))}const Vs={type:Zi.Descendant},Ws={type:"_flexibleDescendant"},Qs={type:Zi.Pseudo,name:"scope",data:null};function Xs(e,t,n){var r;e.forEach(As),n=null!==(r=t.context)&&void 0!==r?r:n;const i=Array.isArray(n),s=n&&(Array.isArray(n)?n:[n]);if(!1!==t.relativeSelector)!function(e,{adapter:t},n){const r=!!(null==n?void 0:n.every((e=>{const n=t.isTag(e)&&t.getParent(e);return e===Fs||n&&t.isTag(n)})));for(const t of e){if(t.length>0&&Ts(t[0])&&t[0].type!==Zi.Descendant);else{if(!r||t.some(js))continue;t.unshift(Vs)}t.unshift(Qs)}}(e,t,s);else if(e.some((e=>e.length>0&&Ts(e[0]))))throw new Error("Relative selectors are not allowed when the `relativeSelector` option is disabled");let a=!1;const o=e.map((e=>{if(e.length>=2){const[t,n]=e;t.type!==Zi.Pseudo||"scope"!==t.name||(i&&n.type===Zi.Descendant?e[1]=Ws:n.type!==Zi.Adjacent&&n.type!==Zi.Sibling||(a=!0))}return function(e,t,n){var r;return e.reduce(((e,r)=>e===ds.falseFunc?ds.falseFunc:Ks(e,r,t,n,Xs)),null!==(r=t.rootFunc)&&void 0!==r?r:ds.trueFunc)}(e,t,s)})).reduce($s,ds.falseFunc);return o.shouldTestNextSiblings=a,o}function $s(e,t){return t===ds.falseFunc||e===ds.trueFunc?e:e===ds.falseFunc||t===ds.trueFunc?t:function(n){return e(n)||t(n)}}const zs=(e,t)=>e===t,Js={adapter:Se,equals:zs};const Zs=(ea=Xs,function(e,t,n){const r=function(e){var t,n,r,i;const s=null!=e?e:Js;return null!==(t=s.adapter)&&void 0!==t||(s.adapter=Se),null!==(n=s.equals)&&void 0!==n||(s.equals=null!==(i=null===(r=s.adapter)||void 0===r?void 0:r.equals)&&void 0!==i?i:zs),s}(t);return ea(e,r,n)});var ea;function ta(e,t,n=!1){return n&&(e=function(e,t){const n=Array.isArray(e)?e.slice(0):[e],r=n.length;for(let e=0;ee.some(ra))))}function ia(e){const t=[],n=[];for(const r of e)r.some(ra)?t.push(r):n.push(r);return[n,t]}const sa={type:Zi.Universal,namespace:null},aa={type:Zi.Pseudo,name:"scope",data:null};function oa(e,t,n={}){return ca([e],t,n)}function ca(e,t,n={}){if("function"==typeof t)return e.some(t);const[r,i]=ia(ps(t));return r.length>0&&e.some(Zs(r,n))||i.some((t=>ua(t,e,n).length>0))}function la(e,t,n={}){return ha(ps(e),t,n)}function ha(e,t,n){if(0===t.length)return[];const[r,i]=ia(e);let s;if(r.length){const e=Ea(t,r,n);if(0===i.length)return e;e.length&&(s=new Set(e))}for(let e=0;eI(e)&&!s.has(e))):t;if(0===a.length)break;const o=ua(r,t,n);if(o.length)if(s)o.forEach((e=>s.add(e)));else{if(e===i.length-1)return o;s=new Set(o)}}return void 0!==s?s.size===t.length?t:t.filter((e=>s.has(e))):[]}function ua(e,t,n){var r;if(e.some(as)){const i=null!==(r=n.root)&&void 0!==r?r:function(e){for(;e.parent;)e=e.parent;return e}(t[0]),s={...n,context:t,relativeSelector:!1};return e.push(aa),pa(i,e,s,!0,t.length)}return pa(t,e,n,!1,t.length)}function pa(e,t,n,r,i){const s=t.findIndex(ra),a=t.slice(0,s),o=t[s],c=t.length-1===s?i:1/0,l=function(e,t,n){const r=null!=t?parseInt(t,10):NaN;switch(e){case"first":return 1;case"nth":case"eq":return isFinite(r)?r>=0?r+1:1/0:0;case"lt":return isFinite(r)?r>=0?Math.min(r,n):1/0:0;case"gt":return isFinite(r)?1/0:0;case"odd":return 2*n;case"even":return 2*n-1;case"last":case"not":return 1/0}}(o.name,o.data,c);if(0===l)return[];const h=(0!==a.length||Array.isArray(e)?0===a.length?(Array.isArray(e)?e:[e]).filter(I):r||a.some(as)?fa(e,[a],n,l):Ea(e,[a],n):Z(e).filter(I)).slice(0,l);let u=function(e,t,n,r){const i="string"==typeof n?parseInt(n,10):NaN;switch(e){case"first":case"lt":return t;case"last":return t.length>0?[t[t.length-1]]:t;case"nth":case"eq":return isFinite(i)&&Math.abs(i)t%2==0));case"odd":return t.filter(((e,t)=>t%2==1));case"not":{const e=new Set(ha(n,t,r));return t.filter((t=>!e.has(t)))}}}(o.name,h,o.data,n);if(0===u.length||t.length===s+1)return u;const p=t.slice(s+1),f=p.some(as);if(f){if(as(p[0])){const{type:e}=p[0];e!==Zi.Sibling&&e!==Zi.Adjacent||(u=ta(u,Se,!0)),p.unshift(sa)}n={...n,relativeSelector:!1,rootFunc:e=>u.includes(e)}}else n.rootFunc&&n.rootFunc!==Es&&(n={...n,rootFunc:Es});return p.some(ra)?pa(u,p,n,!1,i):f?fa(u,[p],n,i):Ea(u,[p],n)}function fa(e,t,n,r){return da(e,Zs(t,n,e),r)}function da(e,t,n=1/0){return ae((e=>I(e)&&t(e)),ta(e,Se,t.shouldTestNextSiblings),!0,n)}function Ea(e,t,n){const r=(Array.isArray(e)?e:[e]).filter(I);if(0===r.length)return r;const i=Zs(t,n);return i===Es?r:r.filter(i)}var ma=function(e,t,n){if(n||2===arguments.length)for(var r,i=0,s=t.length;i1&&s.length>1?n.reduce((function(e,t){return t(e)}),s):s)}}}var Aa=_a((function(e,t){for(var n,r=[],i=0;ipa(t,e,n,!0,r)));return i.length&&a.push(fa(t,i,n,r)),0===a.length?[]:1===a.length?a[0]:Ee(a.reduce(((e,t)=>[...e,...t])))}(e,i,s))},parent:Ia,parents:Sa,parentsUntil:ba,closest:function(e){var t,n=[];if(!e)return this._make(n);var r={xmlMode:this.options.xmlMode,root:null===(t=this._root)||void 0===t?void 0:t[0]},i="string"==typeof e?function(t){return oa(t,e,r)}:Pa(e);return Bi(this,(function(e){for(;e&&I(e);){if(i(e,0)){n.includes(e)||n.push(e);break}e=e.parent}})),this._make(n)},next:Oa,nextAll:ya,nextUntil:La,prev:ka,prevAll:va,prevUntil:Da,siblings:Ra,children:Ma,contents:function(){var e=this.toArray().reduce((function(e,t){return k(t)?e.concat(t.children):e}),[]);return this._make(e)},each:function(e){for(var t=0,n=this.length;t0})},first:function(){return this.length>1?this._make(this[0]):this},last:function(){return this.length>0?this._make(this[this.length-1]):this},eq:function(e){var t;return 0===(e=+e)&&this.length<=1?this:(e<0&&(e=this.length+e),this._make(null!==(t=this[e])&&void 0!==t?t:[]))},get:function(e){return null==e?this.toArray():this[e<0?this.length+e:e]},toArray:function(){return Array.prototype.slice.call(this)},index:function(e){var t,n;return null==e?(t=this.parent().children(),n=this[0]):"string"==typeof e?(t=this._make(e),n=this[0]):(t=this,n=wi(e)?e[0]:e),Array.prototype.indexOf.call(t,n)},slice:function(e,t){return this._make(Array.prototype.slice.call(this,e,t))},end:function(){var e;return null!==(e=this.prevObject)&&void 0!==e?e:this._make([])},add:function(e,t){var n=this._make(e,t),r=Ee(ma(ma([],this.get(),!0),n.get(),!0));return this._make(r)},addBack:function(e){return this.prevObject?this.add(e?this.prevObject.filter(e):this.prevObject):this}});function Ba(e,t){var n=Array.isArray(e)?e:[e];t?t.children=n:t=null;for(var r=0;r=e.length?null:e[t+n],h=0;h-1&&(p.children.splice(f,1),i===p&&t>f&&o[0]--)}u.parent=i,u.prev&&(u.prev.next=null!==(s=u.next)&&void 0!==s?s:null),u.next&&(u.next.prev=null!==(a=u.prev)&&void 0!==a?a:null),u.prev=0===h?c:r[h-1],u.next=h===r.length-1?l:r[h+1]}return c&&(c.next=r[0]),l&&(l.prev=r[r.length-1]),e.splice.apply(e,o)}var Ga=Ua((function(e,t,n){Ha(t,t.length,0,e,n)})),Ya=Ua((function(e,t,n){Ha(t,0,0,e,n)}));function qa(e){return function(t){for(var n=this.length-1,r=this.parents().last(),i=0;i0&&void 0!==t&&(n[t]+=";".concat(o))}else n[t=s.slice(0,a).trim()]=s.slice(a+1).trim()}return n}(e.attribs.style);if("string"==typeof t)return n[t];if(Array.isArray(t)){var r={};return t.forEach((function(e){null!=n[e]&&(r[e]=n[e])})),r}return n}}var Xa=Object.freeze({__proto__:null,css:function(e,t){return null!=e&&null!=t||"object"==typeof e&&!Array.isArray(e)?Bi(this,(function(n,r){I(n)&&Wa(n,e,t,r)})):0!==this.length?Qa(this[0],e):void 0}}),$a=/%20/g,za=/\r?\n/g;var Ja=Object.freeze({__proto__:null,serialize:function(){var e=this.serializeArray().map((function(e){return"".concat(encodeURIComponent(e.name),"=").concat(encodeURIComponent(e.value))}));return e.join("&").replace($a,"+")},serializeArray:function(){var e=this;return this.map((function(t,n){var r=e._make(n);return I(n)&&"form"===n.name?r.find("input,select,textarea,keygen").toArray():r.filter("input,select,textarea,keygen").toArray()})).filter('[name!=""]:enabled:not(:submit, :button, :image, :reset, :file):matches([checked], :not(:checkbox, :radio))').map((function(t,n){var r,i=e._make(n),s=i.attr("name"),a=null!==(r=i.val())&&void 0!==r?r:"";return Array.isArray(a)?a.map((function(e){return{name:s,value:e.replace(za,"\r\n")}})):{name:s,value:a.replace(za,"\r\n")}})).toArray()}}),Za=function(e,t,n){if(this.length=0,this.options=n,this._root=t,e){for(var r=0;r=55296&&e<=57343}function po(e){return 32!==e&&10!==e&&13!==e&&9!==e&&12!==e&&e>=1&&e<=31||e>=127&&e<=159}function fo(e){return e>=64976&&e<=65007||ro.has(e)}var Eo;!function(e){e.controlCharacterInInputStream="control-character-in-input-stream",e.noncharacterInInputStream="noncharacter-in-input-stream",e.surrogateInInputStream="surrogate-in-input-stream",e.nonVoidHtmlElementStartTagWithTrailingSolidus="non-void-html-element-start-tag-with-trailing-solidus",e.endTagWithAttributes="end-tag-with-attributes",e.endTagWithTrailingSolidus="end-tag-with-trailing-solidus",e.unexpectedSolidusInTag="unexpected-solidus-in-tag",e.unexpectedNullCharacter="unexpected-null-character",e.unexpectedQuestionMarkInsteadOfTagName="unexpected-question-mark-instead-of-tag-name",e.invalidFirstCharacterOfTagName="invalid-first-character-of-tag-name",e.unexpectedEqualsSignBeforeAttributeName="unexpected-equals-sign-before-attribute-name",e.missingEndTagName="missing-end-tag-name",e.unexpectedCharacterInAttributeName="unexpected-character-in-attribute-name",e.unknownNamedCharacterReference="unknown-named-character-reference",e.missingSemicolonAfterCharacterReference="missing-semicolon-after-character-reference",e.unexpectedCharacterAfterDoctypeSystemIdentifier="unexpected-character-after-doctype-system-identifier",e.unexpectedCharacterInUnquotedAttributeValue="unexpected-character-in-unquoted-attribute-value",e.eofBeforeTagName="eof-before-tag-name",e.eofInTag="eof-in-tag",e.missingAttributeValue="missing-attribute-value",e.missingWhitespaceBetweenAttributes="missing-whitespace-between-attributes",e.missingWhitespaceAfterDoctypePublicKeyword="missing-whitespace-after-doctype-public-keyword",e.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers="missing-whitespace-between-doctype-public-and-system-identifiers",e.missingWhitespaceAfterDoctypeSystemKeyword="missing-whitespace-after-doctype-system-keyword",e.missingQuoteBeforeDoctypePublicIdentifier="missing-quote-before-doctype-public-identifier",e.missingQuoteBeforeDoctypeSystemIdentifier="missing-quote-before-doctype-system-identifier",e.missingDoctypePublicIdentifier="missing-doctype-public-identifier",e.missingDoctypeSystemIdentifier="missing-doctype-system-identifier",e.abruptDoctypePublicIdentifier="abrupt-doctype-public-identifier",e.abruptDoctypeSystemIdentifier="abrupt-doctype-system-identifier",e.cdataInHtmlContent="cdata-in-html-content",e.incorrectlyOpenedComment="incorrectly-opened-comment",e.eofInScriptHtmlCommentLikeText="eof-in-script-html-comment-like-text",e.eofInDoctype="eof-in-doctype",e.nestedComment="nested-comment",e.abruptClosingOfEmptyComment="abrupt-closing-of-empty-comment",e.eofInComment="eof-in-comment",e.incorrectlyClosedComment="incorrectly-closed-comment",e.eofInCdata="eof-in-cdata",e.absenceOfDigitsInNumericCharacterReference="absence-of-digits-in-numeric-character-reference",e.nullCharacterReference="null-character-reference",e.surrogateCharacterReference="surrogate-character-reference",e.characterReferenceOutsideUnicodeRange="character-reference-outside-unicode-range",e.controlCharacterReference="control-character-reference",e.noncharacterCharacterReference="noncharacter-character-reference",e.missingWhitespaceBeforeDoctypeName="missing-whitespace-before-doctype-name",e.missingDoctypeName="missing-doctype-name",e.invalidCharacterSequenceAfterDoctypeName="invalid-character-sequence-after-doctype-name",e.duplicateAttribute="duplicate-attribute",e.nonConformingDoctype="non-conforming-doctype",e.missingDoctype="missing-doctype",e.misplacedDoctype="misplaced-doctype",e.endTagWithoutMatchingOpenElement="end-tag-without-matching-open-element",e.closingOfElementWithOpenChildElements="closing-of-element-with-open-child-elements",e.disallowedContentInNoscriptInHead="disallowed-content-in-noscript-in-head",e.openElementsLeftAfterEof="open-elements-left-after-eof",e.abandonedHeadElementChild="abandoned-head-element-child",e.misplacedStartTagForHeadElement="misplaced-start-tag-for-head-element",e.nestedNoscriptInHead="nested-noscript-in-head",e.eofInElementThatCanContainOnlyText="eof-in-element-that-can-contain-only-text"}(Eo=Eo||(Eo={}));class mo{constructor(e){this.handler=e,this.html="",this.pos=-1,this.lastGapPos=-2,this.gapStack=[],this.skipNextNewLine=!1,this.lastChunkWritten=!1,this.endOfChunkHit=!1,this.bufferWaterline=65536,this.isEol=!1,this.lineStartPos=0,this.droppedBufferSize=0,this.line=1,this.lastErrOffset=-1}get col(){return this.pos-this.lineStartPos+Number(this.lastGapPos!==this.pos)}get offset(){return this.droppedBufferSize+this.pos}getError(e){const{line:t,col:n,offset:r}=this;return{code:e,startLine:t,endLine:t,startCol:n,endCol:n,startOffset:r,endOffset:r}}_err(e){this.handler.onParseError&&this.lastErrOffset!==this.offset&&(this.lastErrOffset=this.offset,this.handler.onParseError(this.getError(e)))}_addGap(){this.gapStack.push(this.lastGapPos),this.lastGapPos=this.pos}_processSurrogate(e){if(this.pos!==this.html.length-1){const t=this.html.charCodeAt(this.pos+1);if(function(e){return e>=56320&&e<=57343}(t))return this.pos++,this._addGap(),1024*(e-55296)+9216+t}else if(!this.lastChunkWritten)return this.endOfChunkHit=!0,io.EOF;return this._err(Eo.surrogateInInputStream),e}willDropParsedChunk(){return this.pos>this.bufferWaterline}dropParsedChunk(){this.willDropParsedChunk()&&(this.html=this.html.substring(this.pos),this.lineStartPos-=this.pos,this.droppedBufferSize+=this.pos,this.pos=0,this.lastGapPos=-2,this.gapStack.length=0)}write(e,t){this.html.length>0?this.html+=e:this.html=e,this.endOfChunkHit=!1,this.lastChunkWritten=t}insertHtmlAtCurrentPos(e){this.html=this.html.substring(0,this.pos+1)+e+this.html.substring(this.pos+1),this.endOfChunkHit=!1}startsWith(e,t){if(this.pos+e.length>this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,!1;if(t)return this.html.startsWith(e,this.pos);for(let t=0;t=this.html.length?(this.endOfChunkHit=!this.lastChunkWritten,io.EOF):this.html.charCodeAt(t)}advance(){if(this.pos++,this.isEol&&(this.isEol=!1,this.line++,this.lineStartPos=this.pos),this.pos>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,io.EOF;let e=this.html.charCodeAt(this.pos);if(e===io.CARRIAGE_RETURN)return this.isEol=!0,this.skipNextNewLine=!0,io.LINE_FEED;if(e===io.LINE_FEED&&(this.isEol=!0,this.skipNextNewLine))return this.line--,this.skipNextNewLine=!1,this._addGap(),this.advance();this.skipNextNewLine=!1,uo(e)&&(e=this._processSurrogate(e));return null===this.handler.onParseError||e>31&&e<127||e===io.LINE_FEED||e===io.CARRIAGE_RETURN||e>159&&e<64976||this._checkForProblematicCharacters(e),e}_checkForProblematicCharacters(e){po(e)?this._err(Eo.controlCharacterInInputStream):fo(e)&&this._err(Eo.noncharacterInInputStream)}retreat(e){for(this.pos-=e;this.pos=0;n--)if(e.attrs[n].name===t)return e.attrs[n].value;return null}!function(e){e[e.CHARACTER=0]="CHARACTER",e[e.NULL_CHARACTER=1]="NULL_CHARACTER",e[e.WHITESPACE_CHARACTER=2]="WHITESPACE_CHARACTER",e[e.START_TAG=3]="START_TAG",e[e.END_TAG=4]="END_TAG",e[e.COMMENT=5]="COMMENT",e[e.DOCTYPE=6]="DOCTYPE",e[e.EOF=7]="EOF",e[e.HIBERNATION=8]="HIBERNATION"}(To=To||(To={}));var Ao=Ke((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=new Uint16Array('ᵁ<Õıʊҝջאٵ۞ޢߖࠏ੊ઑඡ๭༉༦჊ረዡᐕᒝᓃᓟᔥ\0\0\0\0\0\0ᕫᛍᦍᰒᷝ὾⁠↰⊍⏀⏻⑂⠤⤒ⴈ⹈⿎〖㊺㘹㞬㣾㨨㩱㫠㬮ࠀEMabcfglmnoprstu\\bfms„‹•˜¦³¹ÈÏlig耻Æ䃆P耻&䀦cute耻Á䃁reve;䄂Āiyx}rc耻Â䃂;䐐r;쀀𝔄rave耻À䃀pha;䎑acr;䄀d;橓Āgp¡on;䄄f;쀀𝔸plyFunction;恡ing耻Å䃅Ācs¾Ãr;쀀𝒜ign;扔ilde耻Ã䃃ml耻Ä䃄ЀaceforsuåûþėĜĢħĪĀcrêòkslash;或Ŷöø;櫧ed;挆y;䐑ƀcrtąċĔause;戵noullis;愬a;䎒r;쀀𝔅pf;쀀𝔹eve;䋘còēmpeq;扎܀HOacdefhilorsuōőŖƀƞƢƵƷƺǜȕɳɸɾcy;䐧PY耻©䂩ƀcpyŝŢźute;䄆Ā;iŧŨ拒talDifferentialD;慅leys;愭ȀaeioƉƎƔƘron;䄌dil耻Ç䃇rc;䄈nint;戰ot;䄊ĀdnƧƭilla;䂸terDot;䂷òſi;䎧rcleȀDMPTLJNjǑǖot;抙inus;抖lus;投imes;抗oĀcsǢǸkwiseContourIntegral;戲eCurlyĀDQȃȏoubleQuote;思uote;怙ȀlnpuȞȨɇɕonĀ;eȥȦ户;橴ƀgitȯȶȺruent;扡nt;戯ourIntegral;戮ĀfrɌɎ;愂oduct;成nterClockwiseContourIntegral;戳oss;樯cr;쀀𝒞pĀ;Cʄʅ拓ap;才րDJSZacefiosʠʬʰʴʸˋ˗ˡ˦̳ҍĀ;oŹʥtrahd;椑cy;䐂cy;䐅cy;䐏ƀgrsʿ˄ˇger;怡r;憡hv;櫤Āayː˕ron;䄎;䐔lĀ;t˝˞戇a;䎔r;쀀𝔇Āaf˫̧Ācm˰̢riticalȀADGT̖̜̀̆cute;䂴oŴ̋̍;䋙bleAcute;䋝rave;䁠ilde;䋜ond;拄ferentialD;慆Ѱ̽\0\0\0͔͂\0Ѕf;쀀𝔻ƀ;DE͈͉͍䂨ot;惜qual;扐blèCDLRUVͣͲ΂ϏϢϸontourIntegraìȹoɴ͹\0\0ͻ»͉nArrow;懓Āeo·ΤftƀARTΐΖΡrrow;懐ightArrow;懔eåˊngĀLRΫτeftĀARγιrrow;柸ightArrow;柺ightArrow;柹ightĀATϘϞrrow;懒ee;抨pɁϩ\0\0ϯrrow;懑ownArrow;懕erticalBar;戥ǹABLRTaВЪаўѿͼrrowƀ;BUНОТ憓ar;椓pArrow;懵reve;䌑eft˒к\0ц\0ѐightVector;楐eeVector;楞ectorĀ;Bљњ憽ar;楖ightǔѧ\0ѱeeVector;楟ectorĀ;BѺѻ懁ar;楗eeĀ;A҆҇护rrow;憧ĀctҒҗr;쀀𝒟rok;䄐ࠀNTacdfglmopqstuxҽӀӄӋӞӢӧӮӵԡԯԶՒ՝ՠեG;䅊H耻Ð䃐cute耻É䃉ƀaiyӒӗӜron;䄚rc耻Ê䃊;䐭ot;䄖r;쀀𝔈rave耻È䃈ement;戈ĀapӺӾcr;䄒tyɓԆ\0\0ԒmallSquare;旻erySmallSquare;斫ĀgpԦԪon;䄘f;쀀𝔼silon;䎕uĀaiԼՉlĀ;TՂՃ橵ilde;扂librium;懌Āci՗՚r;愰m;橳a;䎗ml耻Ë䃋Āipժկsts;戃onentialE;慇ʀcfiosօֈ֍ֲ׌y;䐤r;쀀𝔉lledɓ֗\0\0֣mallSquare;旼erySmallSquare;斪Ͱֺ\0ֿ\0\0ׄf;쀀𝔽All;戀riertrf;愱cò׋؀JTabcdfgorstר׬ׯ׺؀ؒؖ؛؝أ٬ٲcy;䐃耻>䀾mmaĀ;d׷׸䎓;䏜reve;䄞ƀeiy؇،ؐdil;䄢rc;䄜;䐓ot;䄠r;쀀𝔊;拙pf;쀀𝔾eater̀EFGLSTصلَٖٛ٦qualĀ;Lؾؿ扥ess;招ullEqual;执reater;檢ess;扷lantEqual;橾ilde;扳cr;쀀𝒢;扫ЀAacfiosuڅڋږڛڞڪھۊRDcy;䐪Āctڐڔek;䋇;䁞irc;䄤r;愌lbertSpace;愋ǰگ\0ڲf;愍izontalLine;攀Āctۃۅòکrok;䄦mpńېۘownHumðįqual;扏܀EJOacdfgmnostuۺ۾܃܇܎ܚܞܡܨ݄ݸދޏޕcy;䐕lig;䄲cy;䐁cute耻Í䃍Āiyܓܘrc耻Î䃎;䐘ot;䄰r;愑rave耻Ì䃌ƀ;apܠܯܿĀcgܴܷr;䄪inaryI;慈lieóϝǴ݉\0ݢĀ;eݍݎ戬Āgrݓݘral;戫section;拂isibleĀCTݬݲomma;恣imes;恢ƀgptݿރވon;䄮f;쀀𝕀a;䎙cr;愐ilde;䄨ǫޚ\0ޞcy;䐆l耻Ï䃏ʀcfosuެ޷޼߂ߐĀiyޱ޵rc;䄴;䐙r;쀀𝔍pf;쀀𝕁ǣ߇\0ߌr;쀀𝒥rcy;䐈kcy;䐄΀HJacfosߤߨ߽߬߱ࠂࠈcy;䐥cy;䐌ppa;䎚Āey߶߻dil;䄶;䐚r;쀀𝔎pf;쀀𝕂cr;쀀𝒦րJTaceflmostࠥࠩࠬࡐࡣ঳সে্਷ੇcy;䐉耻<䀼ʀcmnpr࠷࠼ࡁࡄࡍute;䄹bda;䎛g;柪lacetrf;愒r;憞ƀaeyࡗ࡜ࡡron;䄽dil;䄻;䐛Āfsࡨ॰tԀACDFRTUVarࡾࢩࢱࣦ࣠ࣼयज़ΐ४Ānrࢃ࢏gleBracket;柨rowƀ;BR࢙࢚࢞憐ar;懤ightArrow;懆eiling;挈oǵࢷ\0ࣃbleBracket;柦nǔࣈ\0࣒eeVector;楡ectorĀ;Bࣛࣜ懃ar;楙loor;挊ightĀAV࣯ࣵrrow;憔ector;楎Āerँगeƀ;AVउऊऐ抣rrow;憤ector;楚iangleƀ;BEतथऩ抲ar;槏qual;抴pƀDTVषूौownVector;楑eeVector;楠ectorĀ;Bॖॗ憿ar;楘ectorĀ;B॥०憼ar;楒ightáΜs̀EFGLSTॾঋকঝঢভqualGreater;拚ullEqual;扦reater;扶ess;檡lantEqual;橽ilde;扲r;쀀𝔏Ā;eঽা拘ftarrow;懚idot;䄿ƀnpw৔ਖਛgȀLRlr৞৷ਂਐeftĀAR০৬rrow;柵ightArrow;柷ightArrow;柶eftĀarγਊightáοightáϊf;쀀𝕃erĀLRਢਬeftArrow;憙ightArrow;憘ƀchtਾੀੂòࡌ;憰rok;䅁;扪Ѐacefiosuਗ਼੝੠੷੼અઋ઎p;椅y;䐜Ādl੥੯iumSpace;恟lintrf;愳r;쀀𝔐nusPlus;戓pf;쀀𝕄cò੶;䎜ҀJacefostuણધભીଔଙඑ඗ඞcy;䐊cute;䅃ƀaey઴હાron;䅇dil;䅅;䐝ƀgswે૰଎ativeƀMTV૓૟૨ediumSpace;怋hiĀcn૦૘ë૙eryThiî૙tedĀGL૸ଆreaterGreateòٳessLesóੈLine;䀊r;쀀𝔑ȀBnptଢନଷ଺reak;恠BreakingSpace;䂠f;愕ڀ;CDEGHLNPRSTV୕ୖ୪୼஡௫ఄ౞಄ದ೘ൡඅ櫬Āou୛୤ngruent;扢pCap;扭oubleVerticalBar;戦ƀlqxஃஊ஛ement;戉ualĀ;Tஒஓ扠ilde;쀀≂̸ists;戄reater΀;EFGLSTஶஷ஽௉௓௘௥扯qual;扱ullEqual;쀀≧̸reater;쀀≫̸ess;批lantEqual;쀀⩾̸ilde;扵umpń௲௽ownHump;쀀≎̸qual;쀀≏̸eĀfsఊధtTriangleƀ;BEచఛడ拪ar;쀀⧏̸qual;括s̀;EGLSTవశ఼ౄోౘ扮qual;扰reater;扸ess;쀀≪̸lantEqual;쀀⩽̸ilde;扴estedĀGL౨౹reaterGreater;쀀⪢̸essLess;쀀⪡̸recedesƀ;ESಒಓಛ技qual;쀀⪯̸lantEqual;拠ĀeiಫಹverseElement;戌ghtTriangleƀ;BEೋೌ೒拫ar;쀀⧐̸qual;拭ĀquೝഌuareSuĀbp೨೹setĀ;E೰ೳ쀀⊏̸qual;拢ersetĀ;Eഃആ쀀⊐̸qual;拣ƀbcpഓതൎsetĀ;Eഛഞ쀀⊂⃒qual;抈ceedsȀ;ESTലള഻െ抁qual;쀀⪰̸lantEqual;拡ilde;쀀≿̸ersetĀ;E൘൛쀀⊃⃒qual;抉ildeȀ;EFT൮൯൵ൿ扁qual;扄ullEqual;扇ilde;扉erticalBar;戤cr;쀀𝒩ilde耻Ñ䃑;䎝܀Eacdfgmoprstuvලෂ෉෕ෛ෠෧෼ขภยา฿ไlig;䅒cute耻Ó䃓Āiy෎ීrc耻Ô䃔;䐞blac;䅐r;쀀𝔒rave耻Ò䃒ƀaei෮ෲ෶cr;䅌ga;䎩cron;䎟pf;쀀𝕆enCurlyĀDQฎบoubleQuote;怜uote;怘;橔Āclวฬr;쀀𝒪ash耻Ø䃘iŬื฼de耻Õ䃕es;樷ml耻Ö䃖erĀBP๋๠Āar๐๓r;怾acĀek๚๜;揞et;掴arenthesis;揜Ҁacfhilors๿ງຊຏຒດຝະ໼rtialD;戂y;䐟r;쀀𝔓i;䎦;䎠usMinus;䂱Āipຢອncareplanåڝf;愙Ȁ;eio຺ູ໠໤檻cedesȀ;EST່້໏໚扺qual;檯lantEqual;扼ilde;找me;怳Ādp໩໮uct;戏ortionĀ;aȥ໹l;戝Āci༁༆r;쀀𝒫;䎨ȀUfos༑༖༛༟OT耻"䀢r;쀀𝔔pf;愚cr;쀀𝒬؀BEacefhiorsu༾གྷཇའཱིྦྷྪྭ႖ႩႴႾarr;椐G耻®䂮ƀcnrཎནབute;䅔g;柫rĀ;tཛྷཝ憠l;椖ƀaeyཧཬཱron;䅘dil;䅖;䐠Ā;vླྀཹ愜erseĀEUྂྙĀlq྇ྎement;戋uilibrium;懋pEquilibrium;楯r»ཹo;䎡ghtЀACDFTUVa࿁࿫࿳ဢဨၛႇϘĀnr࿆࿒gleBracket;柩rowƀ;BL࿜࿝࿡憒ar;懥eftArrow;懄eiling;按oǵ࿹\0စbleBracket;柧nǔည\0နeeVector;楝ectorĀ;Bဝသ懂ar;楕loor;挋Āerိ၃eƀ;AVဵံြ抢rrow;憦ector;楛iangleƀ;BEၐၑၕ抳ar;槐qual;抵pƀDTVၣၮၸownVector;楏eeVector;楜ectorĀ;Bႂႃ憾ar;楔ectorĀ;B႑႒懀ar;楓Āpuႛ႞f;愝ndImplies;楰ightarrow;懛ĀchႹႼr;愛;憱leDelayed;槴ڀHOacfhimoqstuფჱჷჽᄙᄞᅑᅖᅡᅧᆵᆻᆿĀCcჩხHcy;䐩y;䐨FTcy;䐬cute;䅚ʀ;aeiyᄈᄉᄎᄓᄗ檼ron;䅠dil;䅞rc;䅜;䐡r;쀀𝔖ortȀDLRUᄪᄴᄾᅉownArrow»ОeftArrow»࢚ightArrow»࿝pArrow;憑gma;䎣allCircle;战pf;쀀𝕊ɲᅭ\0\0ᅰt;戚areȀ;ISUᅻᅼᆉᆯ斡ntersection;抓uĀbpᆏᆞsetĀ;Eᆗᆘ抏qual;抑ersetĀ;Eᆨᆩ抐qual;抒nion;抔cr;쀀𝒮ar;拆ȀbcmpᇈᇛሉላĀ;sᇍᇎ拐etĀ;Eᇍᇕqual;抆ĀchᇠህeedsȀ;ESTᇭᇮᇴᇿ扻qual;檰lantEqual;扽ilde;承Tháྌ;我ƀ;esሒሓሣ拑rsetĀ;Eሜም抃qual;抇et»ሓրHRSacfhiorsሾቄ቉ቕ቞ቱቶኟዂወዑORN耻Þ䃞ADE;愢ĀHc቎ቒcy;䐋y;䐦Ābuቚቜ;䀉;䎤ƀaeyብቪቯron;䅤dil;䅢;䐢r;쀀𝔗Āeiቻ኉Dzኀ\0ኇefore;戴a;䎘Ācn኎ኘkSpace;쀀  Space;怉ldeȀ;EFTካኬኲኼ戼qual;扃ullEqual;扅ilde;扈pf;쀀𝕋ipleDot;惛Āctዖዛr;쀀𝒯rok;䅦ૡዷጎጚጦ\0ጬጱ\0\0\0\0\0ጸጽ፷ᎅ\0᏿ᐄᐊᐐĀcrዻጁute耻Ú䃚rĀ;oጇገ憟cir;楉rǣጓ\0጖y;䐎ve;䅬Āiyጞጣrc耻Û䃛;䐣blac;䅰r;쀀𝔘rave耻Ù䃙acr;䅪Ādiፁ፩erĀBPፈ፝Āarፍፐr;䁟acĀekፗፙ;揟et;掵arenthesis;揝onĀ;P፰፱拃lus;抎Āgp፻፿on;䅲f;쀀𝕌ЀADETadps᎕ᎮᎸᏄϨᏒᏗᏳrrowƀ;BDᅐᎠᎤar;椒ownArrow;懅ownArrow;憕quilibrium;楮eeĀ;AᏋᏌ报rrow;憥ownáϳerĀLRᏞᏨeftArrow;憖ightArrow;憗iĀ;lᏹᏺ䏒on;䎥ing;䅮cr;쀀𝒰ilde;䅨ml耻Ü䃜ҀDbcdefosvᐧᐬᐰᐳᐾᒅᒊᒐᒖash;披ar;櫫y;䐒ashĀ;lᐻᐼ抩;櫦Āerᑃᑅ;拁ƀbtyᑌᑐᑺar;怖Ā;iᑏᑕcalȀBLSTᑡᑥᑪᑴar;戣ine;䁼eparator;杘ilde;所ThinSpace;怊r;쀀𝔙pf;쀀𝕍cr;쀀𝒱dash;抪ʀcefosᒧᒬᒱᒶᒼirc;䅴dge;拀r;쀀𝔚pf;쀀𝕎cr;쀀𝒲Ȁfiosᓋᓐᓒᓘr;쀀𝔛;䎞pf;쀀𝕏cr;쀀𝒳ҀAIUacfosuᓱᓵᓹᓽᔄᔏᔔᔚᔠcy;䐯cy;䐇cy;䐮cute耻Ý䃝Āiyᔉᔍrc;䅶;䐫r;쀀𝔜pf;쀀𝕐cr;쀀𝒴ml;䅸ЀHacdefosᔵᔹᔿᕋᕏᕝᕠᕤcy;䐖cute;䅹Āayᕄᕉron;䅽;䐗ot;䅻Dzᕔ\0ᕛoWidtè૙a;䎖r;愨pf;愤cr;쀀𝒵௡ᖃᖊᖐ\0ᖰᖶᖿ\0\0\0\0ᗆᗛᗫᙟ᙭\0ᚕ᚛ᚲᚹ\0ᚾcute耻á䃡reve;䄃̀;Ediuyᖜᖝᖡᖣᖨᖭ戾;쀀∾̳;房rc耻â䃢te肻´̆;䐰lig耻æ䃦Ā;r²ᖺ;쀀𝔞rave耻à䃠ĀepᗊᗖĀfpᗏᗔsym;愵èᗓha;䎱ĀapᗟcĀclᗤᗧr;䄁g;樿ɤᗰ\0\0ᘊʀ;adsvᗺᗻᗿᘁᘇ戧nd;橕;橜lope;橘;橚΀;elmrszᘘᘙᘛᘞᘿᙏᙙ戠;榤e»ᘙsdĀ;aᘥᘦ戡ѡᘰᘲᘴᘶᘸᘺᘼᘾ;榨;榩;榪;榫;榬;榭;榮;榯tĀ;vᙅᙆ戟bĀ;dᙌᙍ抾;榝Āptᙔᙗh;戢»¹arr;捼Āgpᙣᙧon;䄅f;쀀𝕒΀;Eaeiop዁ᙻᙽᚂᚄᚇᚊ;橰cir;橯;扊d;手s;䀧roxĀ;e዁ᚒñᚃing耻å䃥ƀctyᚡᚦᚨr;쀀𝒶;䀪mpĀ;e዁ᚯñʈilde耻ã䃣ml耻ä䃤Āciᛂᛈoninôɲnt;樑ࠀNabcdefiklnoprsu᛭ᛱᜰ᜼ᝃᝈ᝸᝽០៦ᠹᡐᜍ᤽᥈ᥰot;櫭Ācrᛶ᜞kȀcepsᜀᜅᜍᜓong;扌psilon;䏶rime;怵imĀ;e᜚᜛戽q;拍Ŷᜢᜦee;抽edĀ;gᜬᜭ挅e»ᜭrkĀ;t፜᜷brk;掶Āoyᜁᝁ;䐱quo;怞ʀcmprtᝓ᝛ᝡᝤᝨausĀ;eĊĉptyv;榰séᜌnoõēƀahwᝯ᝱ᝳ;䎲;愶een;扬r;쀀𝔟g΀costuvwឍឝឳេ៕៛៞ƀaiuបពរðݠrc;旯p»፱ƀdptឤឨឭot;樀lus;樁imes;樂ɱឹ\0\0ើcup;樆ar;昅riangleĀdu៍្own;施p;斳plus;樄eåᑄåᒭarow;植ƀako៭ᠦᠵĀcn៲ᠣkƀlst៺֫᠂ozenge;槫riangleȀ;dlr᠒᠓᠘᠝斴own;斾eft;旂ight;斸k;搣Ʊᠫ\0ᠳƲᠯ\0ᠱ;斒;斑4;斓ck;斈ĀeoᠾᡍĀ;qᡃᡆ쀀=⃥uiv;쀀≡⃥t;挐Ȁptwxᡙᡞᡧᡬf;쀀𝕓Ā;tᏋᡣom»Ꮜtie;拈؀DHUVbdhmptuvᢅᢖᢪᢻᣗᣛᣬ᣿ᤅᤊᤐᤡȀLRlrᢎᢐᢒᢔ;敗;敔;敖;敓ʀ;DUduᢡᢢᢤᢦᢨ敐;敦;敩;敤;敧ȀLRlrᢳᢵᢷᢹ;敝;敚;敜;教΀;HLRhlrᣊᣋᣍᣏᣑᣓᣕ救;敬;散;敠;敫;敢;敟ox;槉ȀLRlrᣤᣦᣨᣪ;敕;敒;攐;攌ʀ;DUduڽ᣷᣹᣻᣽;敥;敨;攬;攴inus;抟lus;択imes;抠ȀLRlrᤙᤛᤝ᤟;敛;敘;攘;攔΀;HLRhlrᤰᤱᤳᤵᤷ᤻᤹攂;敪;敡;敞;攼;攤;攜Āevģ᥂bar耻¦䂦Ȁceioᥑᥖᥚᥠr;쀀𝒷mi;恏mĀ;e᜚᜜lƀ;bhᥨᥩᥫ䁜;槅sub;柈Ŭᥴ᥾lĀ;e᥹᥺怢t»᥺pƀ;Eeįᦅᦇ;檮Ā;qۜۛೡᦧ\0᧨ᨑᨕᨲ\0ᨷᩐ\0\0᪴\0\0᫁\0\0ᬡᬮ᭍᭒\0᯽\0ᰌƀcpr᦭ᦲ᧝ute;䄇̀;abcdsᦿᧀᧄ᧊᧕᧙戩nd;橄rcup;橉Āau᧏᧒p;橋p;橇ot;橀;쀀∩︀Āeo᧢᧥t;恁îړȀaeiu᧰᧻ᨁᨅǰ᧵\0᧸s;橍on;䄍dil耻ç䃧rc;䄉psĀ;sᨌᨍ橌m;橐ot;䄋ƀdmnᨛᨠᨦil肻¸ƭptyv;榲t脀¢;eᨭᨮ䂢räƲr;쀀𝔠ƀceiᨽᩀᩍy;䑇ckĀ;mᩇᩈ朓ark»ᩈ;䏇r΀;Ecefms᩟᩠ᩢᩫ᪤᪪᪮旋;槃ƀ;elᩩᩪᩭ䋆q;扗eɡᩴ\0\0᪈rrowĀlr᩼᪁eft;憺ight;憻ʀRSacd᪒᪔᪖᪚᪟»ཇ;擈st;抛irc;抚ash;抝nint;樐id;櫯cir;槂ubsĀ;u᪻᪼晣it»᪼ˬ᫇᫔᫺\0ᬊonĀ;eᫍᫎ䀺Ā;qÇÆɭ᫙\0\0᫢aĀ;t᫞᫟䀬;䁀ƀ;fl᫨᫩᫫戁îᅠeĀmx᫱᫶ent»᫩eóɍǧ᫾\0ᬇĀ;dኻᬂot;橭nôɆƀfryᬐᬔᬗ;쀀𝕔oäɔ脀©;sŕᬝr;愗Āaoᬥᬩrr;憵ss;朗Ācuᬲᬷr;쀀𝒸Ābpᬼ᭄Ā;eᭁᭂ櫏;櫑Ā;eᭉᭊ櫐;櫒dot;拯΀delprvw᭠᭬᭷ᮂᮬᯔ᯹arrĀlr᭨᭪;椸;椵ɰ᭲\0\0᭵r;拞c;拟arrĀ;p᭿ᮀ憶;椽̀;bcdosᮏᮐᮖᮡᮥᮨ截rcap;橈Āauᮛᮞp;橆p;橊ot;抍r;橅;쀀∪︀Ȁalrv᮵ᮿᯞᯣrrĀ;mᮼᮽ憷;椼yƀevwᯇᯔᯘqɰᯎ\0\0ᯒreã᭳uã᭵ee;拎edge;拏en耻¤䂤earrowĀlrᯮ᯳eft»ᮀight»ᮽeäᯝĀciᰁᰇoninôǷnt;戱lcty;挭ঀAHabcdefhijlorstuwz᰸᰻᰿ᱝᱩᱵᲊᲞᲬᲷ᳻᳿ᴍᵻᶑᶫᶻ᷆᷍rò΁ar;楥Ȁglrs᱈ᱍ᱒᱔ger;怠eth;愸òᄳhĀ;vᱚᱛ怐»ऊūᱡᱧarow;椏aã̕Āayᱮᱳron;䄏;䐴ƀ;ao̲ᱼᲄĀgrʿᲁr;懊tseq;橷ƀglmᲑᲔᲘ耻°䂰ta;䎴ptyv;榱ĀirᲣᲨsht;楿;쀀𝔡arĀlrᲳᲵ»ࣜ»သʀaegsv᳂͸᳖᳜᳠mƀ;oș᳊᳔ndĀ;ș᳑uit;晦amma;䏝in;拲ƀ;io᳧᳨᳸䃷de脀÷;o᳧ᳰntimes;拇nø᳷cy;䑒cɯᴆ\0\0ᴊrn;挞op;挍ʀlptuwᴘᴝᴢᵉᵕlar;䀤f;쀀𝕕ʀ;emps̋ᴭᴷᴽᵂqĀ;d͒ᴳot;扑inus;戸lus;戔quare;抡blebarwedgåúnƀadhᄮᵝᵧownarrowóᲃarpoonĀlrᵲᵶefôᲴighôᲶŢᵿᶅkaro÷གɯᶊ\0\0ᶎrn;挟op;挌ƀcotᶘᶣᶦĀryᶝᶡ;쀀𝒹;䑕l;槶rok;䄑Ādrᶰᶴot;拱iĀ;fᶺ᠖斿Āah᷀᷃ròЩaòྦangle;榦Āci᷒ᷕy;䑟grarr;柿ऀDacdefglmnopqrstuxḁḉḙḸոḼṉṡṾấắẽỡἪἷὄ὎὚ĀDoḆᴴoôᲉĀcsḎḔute耻é䃩ter;橮ȀaioyḢḧḱḶron;䄛rĀ;cḭḮ扖耻ê䃪lon;払;䑍ot;䄗ĀDrṁṅot;扒;쀀𝔢ƀ;rsṐṑṗ檚ave耻è䃨Ā;dṜṝ檖ot;檘Ȁ;ilsṪṫṲṴ檙nters;揧;愓Ā;dṹṺ檕ot;檗ƀapsẅẉẗcr;䄓tyƀ;svẒẓẕ戅et»ẓpĀ1;ẝẤijạả;怄;怅怃ĀgsẪẬ;䅋p;怂ĀgpẴẸon;䄙f;쀀𝕖ƀalsỄỎỒrĀ;sỊị拕l;槣us;橱iƀ;lvỚớở䎵on»ớ;䏵ȀcsuvỪỳἋἣĀioữḱrc»Ḯɩỹ\0\0ỻíՈantĀglἂἆtr»ṝess»Ṻƀaeiἒ἖Ἒls;䀽st;扟vĀ;DȵἠD;橸parsl;槥ĀDaἯἳot;打rr;楱ƀcdiἾὁỸr;愯oô͒ĀahὉὋ;䎷耻ð䃰Āmrὓὗl耻ë䃫o;悬ƀcipὡὤὧl;䀡sôծĀeoὬὴctatioîՙnentialåչৡᾒ\0ᾞ\0ᾡᾧ\0\0ῆῌ\0ΐ\0ῦῪ \0 ⁚llingdotseñṄy;䑄male;晀ƀilrᾭᾳ῁lig;耀ffiɩᾹ\0\0᾽g;耀ffig;耀ffl;쀀𝔣lig;耀filig;쀀fjƀaltῙ῜ῡt;晭ig;耀flns;斱of;䆒ǰ΅\0ῳf;쀀𝕗ĀakֿῷĀ;vῼ´拔;櫙artint;樍Āao‌⁕Ācs‑⁒ႉ‸⁅⁈\0⁐β•‥‧‪‬\0‮耻½䂽;慓耻¼䂼;慕;慙;慛Ƴ‴\0‶;慔;慖ʴ‾⁁\0\0⁃耻¾䂾;慗;慜5;慘ƶ⁌\0⁎;慚;慝8;慞l;恄wn;挢cr;쀀𝒻ࢀEabcdefgijlnorstv₂₉₟₥₰₴⃰⃵⃺⃿℃ℒℸ̗ℾ⅒↞Ā;lٍ₇;檌ƀcmpₐₕ₝ute;䇵maĀ;dₜ᳚䎳;檆reve;䄟Āiy₪₮rc;䄝;䐳ot;䄡Ȁ;lqsؾق₽⃉ƀ;qsؾٌ⃄lanô٥Ȁ;cdl٥⃒⃥⃕c;檩otĀ;o⃜⃝檀Ā;l⃢⃣檂;檄Ā;e⃪⃭쀀⋛︀s;檔r;쀀𝔤Ā;gٳ؛mel;愷cy;䑓Ȁ;Eajٚℌℎℐ;檒;檥;檤ȀEaesℛℝ℩ℴ;扩pĀ;p℣ℤ檊rox»ℤĀ;q℮ℯ檈Ā;q℮ℛim;拧pf;쀀𝕘Āci⅃ⅆr;愊mƀ;el٫ⅎ⅐;檎;檐茀>;cdlqr׮ⅠⅪⅮⅳⅹĀciⅥⅧ;檧r;橺ot;拗Par;榕uest;橼ʀadelsↄⅪ←ٖ↛ǰ↉\0↎proø₞r;楸qĀlqؿ↖lesó₈ií٫Āen↣↭rtneqq;쀀≩︀Å↪ԀAabcefkosy⇄⇇⇱⇵⇺∘∝∯≨≽ròΠȀilmr⇐⇔⇗⇛rsðᒄf»․ilôکĀdr⇠⇤cy;䑊ƀ;cwࣴ⇫⇯ir;楈;憭ar;意irc;䄥ƀalr∁∎∓rtsĀ;u∉∊晥it»∊lip;怦con;抹r;쀀𝔥sĀew∣∩arow;椥arow;椦ʀamopr∺∾≃≞≣rr;懿tht;戻kĀlr≉≓eftarrow;憩ightarrow;憪f;쀀𝕙bar;怕ƀclt≯≴≸r;쀀𝒽asè⇴rok;䄧Ābp⊂⊇ull;恃hen»ᱛૡ⊣\0⊪\0⊸⋅⋎\0⋕⋳\0\0⋸⌢⍧⍢⍿\0⎆⎪⎴cute耻í䃭ƀ;iyݱ⊰⊵rc耻î䃮;䐸Ācx⊼⊿y;䐵cl耻¡䂡ĀfrΟ⋉;쀀𝔦rave耻ì䃬Ȁ;inoܾ⋝⋩⋮Āin⋢⋦nt;樌t;戭fin;槜ta;愩lig;䄳ƀaop⋾⌚⌝ƀcgt⌅⌈⌗r;䄫ƀelpܟ⌏⌓inåގarôܠh;䄱f;抷ed;䆵ʀ;cfotӴ⌬⌱⌽⍁are;愅inĀ;t⌸⌹戞ie;槝doô⌙ʀ;celpݗ⍌⍐⍛⍡al;抺Āgr⍕⍙eróᕣã⍍arhk;樗rod;樼Ȁcgpt⍯⍲⍶⍻y;䑑on;䄯f;쀀𝕚a;䎹uest耻¿䂿Āci⎊⎏r;쀀𝒾nʀ;EdsvӴ⎛⎝⎡ӳ;拹ot;拵Ā;v⎦⎧拴;拳Ā;iݷ⎮lde;䄩ǫ⎸\0⎼cy;䑖l耻ï䃯̀cfmosu⏌⏗⏜⏡⏧⏵Āiy⏑⏕rc;䄵;䐹r;쀀𝔧ath;䈷pf;쀀𝕛ǣ⏬\0⏱r;쀀𝒿rcy;䑘kcy;䑔Ѐacfghjos␋␖␢␧␭␱␵␻ppaĀ;v␓␔䎺;䏰Āey␛␠dil;䄷;䐺r;쀀𝔨reen;䄸cy;䑅cy;䑜pf;쀀𝕜cr;쀀𝓀஀ABEHabcdefghjlmnoprstuv⑰⒁⒆⒍⒑┎┽╚▀♎♞♥♹♽⚚⚲⛘❝❨➋⟀⠁⠒ƀart⑷⑺⑼rò৆òΕail;椛arr;椎Ā;gঔ⒋;檋ar;楢ॣ⒥\0⒪\0⒱\0\0\0\0\0⒵Ⓔ\0ⓆⓈⓍ\0⓹ute;䄺mptyv;榴raîࡌbda;䎻gƀ;dlࢎⓁⓃ;榑åࢎ;檅uo耻«䂫rЀ;bfhlpst࢙ⓞⓦⓩ⓫⓮⓱⓵Ā;f࢝ⓣs;椟s;椝ë≒p;憫l;椹im;楳l;憢ƀ;ae⓿─┄檫il;椙Ā;s┉┊檭;쀀⪭︀ƀabr┕┙┝rr;椌rk;杲Āak┢┬cĀek┨┪;䁻;䁛Āes┱┳;榋lĀdu┹┻;榏;榍Ȁaeuy╆╋╖╘ron;䄾Ādi═╔il;䄼ìࢰâ┩;䐻Ȁcqrs╣╦╭╽a;椶uoĀ;rนᝆĀdu╲╷har;楧shar;楋h;憲ʀ;fgqs▋▌উ◳◿扤tʀahlrt▘▤▷◂◨rrowĀ;t࢙□aé⓶arpoonĀdu▯▴own»њp»०eftarrows;懇ightƀahs◍◖◞rrowĀ;sࣴࢧarpoonó྘quigarro÷⇰hreetimes;拋ƀ;qs▋ও◺lanôবʀ;cdgsব☊☍☝☨c;檨otĀ;o☔☕橿Ā;r☚☛檁;檃Ā;e☢☥쀀⋚︀s;檓ʀadegs☳☹☽♉♋pproøⓆot;拖qĀgq♃♅ôউgtò⒌ôছiíলƀilr♕࣡♚sht;楼;쀀𝔩Ā;Eজ♣;檑š♩♶rĀdu▲♮Ā;l॥♳;楪lk;斄cy;䑙ʀ;achtੈ⚈⚋⚑⚖rò◁orneòᴈard;楫ri;旺Āio⚟⚤dot;䅀ustĀ;a⚬⚭掰che»⚭ȀEaes⚻⚽⛉⛔;扨pĀ;p⛃⛄檉rox»⛄Ā;q⛎⛏檇Ā;q⛎⚻im;拦Ѐabnoptwz⛩⛴⛷✚✯❁❇❐Ānr⛮⛱g;柬r;懽rëࣁgƀlmr⛿✍✔eftĀar০✇ightá৲apsto;柼ightá৽parrowĀlr✥✩efô⓭ight;憬ƀafl✶✹✽r;榅;쀀𝕝us;樭imes;樴š❋❏st;戗áፎƀ;ef❗❘᠀旊nge»❘arĀ;l❤❥䀨t;榓ʀachmt❳❶❼➅➇ròࢨorneòᶌarĀ;d྘➃;業;怎ri;抿̀achiqt➘➝ੀ➢➮➻quo;怹r;쀀𝓁mƀ;egল➪➬;檍;檏Ābu┪➳oĀ;rฟ➹;怚rok;䅂萀<;cdhilqrࠫ⟒☹⟜⟠⟥⟪⟰Āci⟗⟙;檦r;橹reå◲mes;拉arr;楶uest;橻ĀPi⟵⟹ar;榖ƀ;ef⠀भ᠛旃rĀdu⠇⠍shar;楊har;楦Āen⠗⠡rtneqq;쀀≨︀Å⠞܀Dacdefhilnopsu⡀⡅⢂⢎⢓⢠⢥⢨⣚⣢⣤ઃ⣳⤂Dot;戺Ȁclpr⡎⡒⡣⡽r耻¯䂯Āet⡗⡙;時Ā;e⡞⡟朠se»⡟Ā;sျ⡨toȀ;dluျ⡳⡷⡻owîҌefôएðᏑker;斮Āoy⢇⢌mma;権;䐼ash;怔asuredangle»ᘦr;쀀𝔪o;愧ƀcdn⢯⢴⣉ro耻µ䂵Ȁ;acdᑤ⢽⣀⣄sôᚧir;櫰ot肻·Ƶusƀ;bd⣒ᤃ⣓戒Ā;uᴼ⣘;横ţ⣞⣡p;櫛ò−ðઁĀdp⣩⣮els;抧f;쀀𝕞Āct⣸⣽r;쀀𝓂pos»ᖝƀ;lm⤉⤊⤍䎼timap;抸ఀGLRVabcdefghijlmoprstuvw⥂⥓⥾⦉⦘⧚⧩⨕⨚⩘⩝⪃⪕⪤⪨⬄⬇⭄⭿⮮ⰴⱧⱼ⳩Āgt⥇⥋;쀀⋙̸Ā;v⥐௏쀀≫⃒ƀelt⥚⥲⥶ftĀar⥡⥧rrow;懍ightarrow;懎;쀀⋘̸Ā;v⥻ే쀀≪⃒ightarrow;懏ĀDd⦎⦓ash;抯ash;抮ʀbcnpt⦣⦧⦬⦱⧌la»˞ute;䅄g;쀀∠⃒ʀ;Eiop඄⦼⧀⧅⧈;쀀⩰̸d;쀀≋̸s;䅉roø඄urĀ;a⧓⧔普lĀ;s⧓ସdz⧟\0⧣p肻 ଷmpĀ;e௹ఀʀaeouy⧴⧾⨃⨐⨓ǰ⧹\0⧻;橃on;䅈dil;䅆ngĀ;dൾ⨊ot;쀀⩭̸p;橂;䐽ash;怓΀;Aadqsxஒ⨩⨭⨻⩁⩅⩐rr;懗rĀhr⨳⨶k;椤Ā;oᏲᏰot;쀀≐̸uiöୣĀei⩊⩎ar;椨í஘istĀ;s஠டr;쀀𝔫ȀEest௅⩦⩹⩼ƀ;qs஼⩭௡ƀ;qs஼௅⩴lanô௢ií௪Ā;rஶ⪁»ஷƀAap⪊⪍⪑rò⥱rr;憮ar;櫲ƀ;svྍ⪜ྌĀ;d⪡⪢拼;拺cy;䑚΀AEadest⪷⪺⪾⫂⫅⫶⫹rò⥦;쀀≦̸rr;憚r;急Ȁ;fqs఻⫎⫣⫯tĀar⫔⫙rro÷⫁ightarro÷⪐ƀ;qs఻⪺⫪lanôౕĀ;sౕ⫴»శiíౝĀ;rవ⫾iĀ;eచథiäඐĀpt⬌⬑f;쀀𝕟膀¬;in⬙⬚⬶䂬nȀ;Edvஉ⬤⬨⬮;쀀⋹̸ot;쀀⋵̸ǡஉ⬳⬵;拷;拶iĀ;vಸ⬼ǡಸ⭁⭃;拾;拽ƀaor⭋⭣⭩rȀ;ast୻⭕⭚⭟lleì୻l;쀀⫽⃥;쀀∂̸lint;樔ƀ;ceಒ⭰⭳uåಥĀ;cಘ⭸Ā;eಒ⭽ñಘȀAait⮈⮋⮝⮧rò⦈rrƀ;cw⮔⮕⮙憛;쀀⤳̸;쀀↝̸ghtarrow»⮕riĀ;eೋೖ΀chimpqu⮽⯍⯙⬄୸⯤⯯Ȁ;cerല⯆ഷ⯉uå൅;쀀𝓃ortɭ⬅\0\0⯖ará⭖mĀ;e൮⯟Ā;q൴൳suĀbp⯫⯭å೸åഋƀbcp⯶ⰑⰙȀ;Ees⯿ⰀഢⰄ抄;쀀⫅̸etĀ;eഛⰋqĀ;qണⰀcĀ;eലⰗñസȀ;EesⰢⰣൟⰧ抅;쀀⫆̸etĀ;e൘ⰮqĀ;qൠⰣȀgilrⰽⰿⱅⱇìௗlde耻ñ䃱çృiangleĀlrⱒⱜeftĀ;eచⱚñదightĀ;eೋⱥñ೗Ā;mⱬⱭ䎽ƀ;esⱴⱵⱹ䀣ro;愖p;怇ҀDHadgilrsⲏⲔⲙⲞⲣⲰⲶⳓⳣash;抭arr;椄p;쀀≍⃒ash;抬ĀetⲨⲬ;쀀≥⃒;쀀>⃒nfin;槞ƀAetⲽⳁⳅrr;椂;쀀≤⃒Ā;rⳊⳍ쀀<⃒ie;쀀⊴⃒ĀAtⳘⳜrr;椃rie;쀀⊵⃒im;쀀∼⃒ƀAan⳰⳴ⴂrr;懖rĀhr⳺⳽k;椣Ā;oᏧᏥear;椧ቓ᪕\0\0\0\0\0\0\0\0\0\0\0\0\0ⴭ\0ⴸⵈⵠⵥ⵲ⶄᬇ\0\0ⶍⶫ\0ⷈⷎ\0ⷜ⸙⸫⸾⹃Ācsⴱ᪗ute耻ó䃳ĀiyⴼⵅrĀ;c᪞ⵂ耻ô䃴;䐾ʀabios᪠ⵒⵗLjⵚlac;䅑v;樸old;榼lig;䅓Ācr⵩⵭ir;榿;쀀𝔬ͯ⵹\0\0⵼\0ⶂn;䋛ave耻ò䃲;槁Ābmⶈ෴ar;榵Ȁacitⶕ⶘ⶥⶨrò᪀Āir⶝ⶠr;榾oss;榻nå๒;槀ƀaeiⶱⶵⶹcr;䅍ga;䏉ƀcdnⷀⷅǍron;䎿;榶pf;쀀𝕠ƀaelⷔ⷗ǒr;榷rp;榹΀;adiosvⷪⷫⷮ⸈⸍⸐⸖戨rò᪆Ȁ;efmⷷⷸ⸂⸅橝rĀ;oⷾⷿ愴f»ⷿ耻ª䂪耻º䂺gof;抶r;橖lope;橗;橛ƀclo⸟⸡⸧ò⸁ash耻ø䃸l;折iŬⸯ⸴de耻õ䃵esĀ;aǛ⸺s;樶ml耻ö䃶bar;挽ૡ⹞\0⹽\0⺀⺝\0⺢⺹\0\0⻋ຜ\0⼓\0\0⼫⾼\0⿈rȀ;astЃ⹧⹲຅脀¶;l⹭⹮䂶leìЃɩ⹸\0\0⹻m;櫳;櫽y;䐿rʀcimpt⺋⺏⺓ᡥ⺗nt;䀥od;䀮il;怰enk;怱r;쀀𝔭ƀimo⺨⺰⺴Ā;v⺭⺮䏆;䏕maô੶ne;明ƀ;tv⺿⻀⻈䏀chfork»´;䏖Āau⻏⻟nĀck⻕⻝kĀ;h⇴⻛;愎ö⇴sҀ;abcdemst⻳⻴ᤈ⻹⻽⼄⼆⼊⼎䀫cir;樣ir;樢Āouᵀ⼂;樥;橲n肻±ຝim;樦wo;樧ƀipu⼙⼠⼥ntint;樕f;쀀𝕡nd耻£䂣Ԁ;Eaceinosu່⼿⽁⽄⽇⾁⾉⾒⽾⾶;檳p;檷uå໙Ā;c໎⽌̀;acens່⽙⽟⽦⽨⽾pproø⽃urlyeñ໙ñ໎ƀaes⽯⽶⽺pprox;檹qq;檵im;拨iíໟmeĀ;s⾈ຮ怲ƀEas⽸⾐⽺ð⽵ƀdfp໬⾙⾯ƀals⾠⾥⾪lar;挮ine;挒urf;挓Ā;t໻⾴ï໻rel;抰Āci⿀⿅r;쀀𝓅;䏈ncsp;怈̀fiopsu⿚⋢⿟⿥⿫⿱r;쀀𝔮pf;쀀𝕢rime;恗cr;쀀𝓆ƀaeo⿸〉〓tĀei⿾々rnionóڰnt;樖stĀ;e【】䀿ñἙô༔઀ABHabcdefhilmnoprstux぀けさすムㄎㄫㅇㅢㅲㆎ㈆㈕㈤㈩㉘㉮㉲㊐㊰㊷ƀartぇおがròႳòϝail;検aròᱥar;楤΀cdenqrtとふへみわゔヌĀeuねぱ;쀀∽̱te;䅕iãᅮmptyv;榳gȀ;del࿑らるろ;榒;榥å࿑uo耻»䂻rր;abcfhlpstw࿜ガクシスゼゾダッデナp;極Ā;f࿠ゴs;椠;椳s;椞ë≝ð✮l;楅im;楴l;憣;憝Āaiパフil;椚oĀ;nホボ戶aló༞ƀabrョリヮrò៥rk;杳ĀakンヽcĀekヹ・;䁽;䁝Āes㄂㄄;榌lĀduㄊㄌ;榎;榐Ȁaeuyㄗㄜㄧㄩron;䅙Ādiㄡㄥil;䅗ì࿲âヺ;䑀Ȁclqsㄴㄷㄽㅄa;椷dhar;楩uoĀ;rȎȍh;憳ƀacgㅎㅟངlȀ;ipsླྀㅘㅛႜnåႻarôྩt;断ƀilrㅩဣㅮsht;楽;쀀𝔯ĀaoㅷㆆrĀduㅽㅿ»ѻĀ;l႑ㆄ;楬Ā;vㆋㆌ䏁;䏱ƀgns㆕ㇹㇼht̀ahlrstㆤㆰ㇂㇘㇤㇮rrowĀ;t࿜ㆭaéトarpoonĀduㆻㆿowîㅾp»႒eftĀah㇊㇐rrowó࿪arpoonóՑightarrows;應quigarro÷ニhreetimes;拌g;䋚ingdotseñἲƀahm㈍㈐㈓rò࿪aòՑ;怏oustĀ;a㈞㈟掱che»㈟mid;櫮Ȁabpt㈲㈽㉀㉒Ānr㈷㈺g;柭r;懾rëဃƀafl㉇㉊㉎r;榆;쀀𝕣us;樮imes;樵Āap㉝㉧rĀ;g㉣㉤䀩t;榔olint;樒arò㇣Ȁachq㉻㊀Ⴜ㊅quo;怺r;쀀𝓇Ābu・㊊oĀ;rȔȓƀhir㊗㊛㊠reåㇸmes;拊iȀ;efl㊪ၙᠡ㊫方tri;槎luhar;楨;愞ൡ㋕㋛㋟㌬㌸㍱\0㍺㎤\0\0㏬㏰\0㐨㑈㑚㒭㒱㓊㓱\0㘖\0\0㘳cute;䅛quï➺Ԁ;Eaceinpsyᇭ㋳㋵㋿㌂㌋㌏㌟㌦㌩;檴ǰ㋺\0㋼;檸on;䅡uåᇾĀ;dᇳ㌇il;䅟rc;䅝ƀEas㌖㌘㌛;檶p;檺im;择olint;樓iíሄ;䑁otƀ;be㌴ᵇ㌵担;橦΀Aacmstx㍆㍊㍗㍛㍞㍣㍭rr;懘rĀhr㍐㍒ë∨Ā;oਸ਼਴t耻§䂧i;䀻war;椩mĀin㍩ðnuóñt;朶rĀ;o㍶⁕쀀𝔰Ȁacoy㎂㎆㎑㎠rp;景Āhy㎋㎏cy;䑉;䑈rtɭ㎙\0\0㎜iäᑤaraì⹯耻­䂭Āgm㎨㎴maƀ;fv㎱㎲㎲䏃;䏂Ѐ;deglnprካ㏅㏉㏎㏖㏞㏡㏦ot;橪Ā;q኱ኰĀ;E㏓㏔檞;檠Ā;E㏛㏜檝;檟e;扆lus;樤arr;楲aròᄽȀaeit㏸㐈㐏㐗Āls㏽㐄lsetmé㍪hp;樳parsl;槤Ādlᑣ㐔e;挣Ā;e㐜㐝檪Ā;s㐢㐣檬;쀀⪬︀ƀflp㐮㐳㑂tcy;䑌Ā;b㐸㐹䀯Ā;a㐾㐿槄r;挿f;쀀𝕤aĀdr㑍ЂesĀ;u㑔㑕晠it»㑕ƀcsu㑠㑹㒟Āau㑥㑯pĀ;sᆈ㑫;쀀⊓︀pĀ;sᆴ㑵;쀀⊔︀uĀbp㑿㒏ƀ;esᆗᆜ㒆etĀ;eᆗ㒍ñᆝƀ;esᆨᆭ㒖etĀ;eᆨ㒝ñᆮƀ;afᅻ㒦ְrť㒫ֱ»ᅼaròᅈȀcemt㒹㒾㓂㓅r;쀀𝓈tmîñiì㐕aræᆾĀar㓎㓕rĀ;f㓔ឿ昆Āan㓚㓭ightĀep㓣㓪psiloîỠhé⺯s»⡒ʀbcmnp㓻㕞ሉ㖋㖎Ҁ;Edemnprs㔎㔏㔑㔕㔞㔣㔬㔱㔶抂;櫅ot;檽Ā;dᇚ㔚ot;櫃ult;櫁ĀEe㔨㔪;櫋;把lus;檿arr;楹ƀeiu㔽㕒㕕tƀ;en㔎㕅㕋qĀ;qᇚ㔏eqĀ;q㔫㔨m;櫇Ābp㕚㕜;櫕;櫓c̀;acensᇭ㕬㕲㕹㕻㌦pproø㋺urlyeñᇾñᇳƀaes㖂㖈㌛pproø㌚qñ㌗g;晪ڀ123;Edehlmnps㖩㖬㖯ሜ㖲㖴㗀㗉㗕㗚㗟㗨㗭耻¹䂹耻²䂲耻³䂳;櫆Āos㖹㖼t;檾ub;櫘Ā;dሢ㗅ot;櫄sĀou㗏㗒l;柉b;櫗arr;楻ult;櫂ĀEe㗤㗦;櫌;抋lus;櫀ƀeiu㗴㘉㘌tƀ;enሜ㗼㘂qĀ;qሢ㖲eqĀ;q㗧㗤m;櫈Ābp㘑㘓;櫔;櫖ƀAan㘜㘠㘭rr;懙rĀhr㘦㘨ë∮Ā;oਫ਩war;椪lig耻ß䃟௡㙑㙝㙠ዎ㙳㙹\0㙾㛂\0\0\0\0\0㛛㜃\0㜉㝬\0\0\0㞇ɲ㙖\0\0㙛get;挖;䏄rë๟ƀaey㙦㙫㙰ron;䅥dil;䅣;䑂lrec;挕r;쀀𝔱Ȁeiko㚆㚝㚵㚼Dz㚋\0㚑eĀ4fኄኁaƀ;sv㚘㚙㚛䎸ym;䏑Ācn㚢㚲kĀas㚨㚮pproø዁im»ኬsðኞĀas㚺㚮ð዁rn耻þ䃾Ǭ̟㛆⋧es膀×;bd㛏㛐㛘䃗Ā;aᤏ㛕r;樱;樰ƀeps㛡㛣㜀á⩍Ȁ;bcf҆㛬㛰㛴ot;挶ir;櫱Ā;o㛹㛼쀀𝕥rk;櫚á㍢rime;怴ƀaip㜏㜒㝤dåቈ΀adempst㜡㝍㝀㝑㝗㝜㝟ngleʀ;dlqr㜰㜱㜶㝀㝂斵own»ᶻeftĀ;e⠀㜾ñम;扜ightĀ;e㊪㝋ñၚot;旬inus;樺lus;樹b;槍ime;樻ezium;揢ƀcht㝲㝽㞁Āry㝷㝻;쀀𝓉;䑆cy;䑛rok;䅧Āio㞋㞎xô᝷headĀlr㞗㞠eftarro÷ࡏightarrow»ཝऀAHabcdfghlmoprstuw㟐㟓㟗㟤㟰㟼㠎㠜㠣㠴㡑㡝㡫㢩㣌㣒㣪㣶ròϭar;楣Ācr㟜㟢ute耻ú䃺òᅐrǣ㟪\0㟭y;䑞ve;䅭Āiy㟵㟺rc耻û䃻;䑃ƀabh㠃㠆㠋ròᎭlac;䅱aòᏃĀir㠓㠘sht;楾;쀀𝔲rave耻ù䃹š㠧㠱rĀlr㠬㠮»ॗ»ႃlk;斀Āct㠹㡍ɯ㠿\0\0㡊rnĀ;e㡅㡆挜r»㡆op;挏ri;旸Āal㡖㡚cr;䅫肻¨͉Āgp㡢㡦on;䅳f;쀀𝕦̀adhlsuᅋ㡸㡽፲㢑㢠ownáᎳarpoonĀlr㢈㢌efô㠭ighô㠯iƀ;hl㢙㢚㢜䏅»ᏺon»㢚parrows;懈ƀcit㢰㣄㣈ɯ㢶\0\0㣁rnĀ;e㢼㢽挝r»㢽op;挎ng;䅯ri;旹cr;쀀𝓊ƀdir㣙㣝㣢ot;拰lde;䅩iĀ;f㜰㣨»᠓Āam㣯㣲rò㢨l耻ü䃼angle;榧ހABDacdeflnoprsz㤜㤟㤩㤭㦵㦸㦽㧟㧤㧨㧳㧹㧽㨁㨠ròϷarĀ;v㤦㤧櫨;櫩asèϡĀnr㤲㤷grt;榜΀eknprst㓣㥆㥋㥒㥝㥤㦖appá␕othinçẖƀhir㓫⻈㥙opô⾵Ā;hᎷ㥢ïㆍĀiu㥩㥭gmá㎳Ābp㥲㦄setneqĀ;q㥽㦀쀀⊊︀;쀀⫋︀setneqĀ;q㦏㦒쀀⊋︀;쀀⫌︀Āhr㦛㦟etá㚜iangleĀlr㦪㦯eft»थight»ၑy;䐲ash»ံƀelr㧄㧒㧗ƀ;beⷪ㧋㧏ar;抻q;扚lip;拮Ābt㧜ᑨaòᑩr;쀀𝔳tré㦮suĀbp㧯㧱»ജ»൙pf;쀀𝕧roð໻tré㦴Ācu㨆㨋r;쀀𝓋Ābp㨐㨘nĀEe㦀㨖»㥾nĀEe㦒㨞»㦐igzag;榚΀cefoprs㨶㨻㩖㩛㩔㩡㩪irc;䅵Ādi㩀㩑Ābg㩅㩉ar;機eĀ;qᗺ㩏;扙erp;愘r;쀀𝔴pf;쀀𝕨Ā;eᑹ㩦atèᑹcr;쀀𝓌ૣណ㪇\0㪋\0㪐㪛\0\0㪝㪨㪫㪯\0\0㫃㫎\0㫘ៜ៟tré៑r;쀀𝔵ĀAa㪔㪗ròσrò৶;䎾ĀAa㪡㪤ròθrò৫að✓is;拻ƀdptឤ㪵㪾Āfl㪺ឩ;쀀𝕩imåឲĀAa㫇㫊ròώròਁĀcq㫒ីr;쀀𝓍Āpt៖㫜ré។Ѐacefiosu㫰㫽㬈㬌㬑㬕㬛㬡cĀuy㫶㫻te耻ý䃽;䑏Āiy㬂㬆rc;䅷;䑋n耻¥䂥r;쀀𝔶cy;䑗pf;쀀𝕪cr;쀀𝓎Ācm㬦㬩y;䑎l耻ÿ䃿Ԁacdefhiosw㭂㭈㭔㭘㭤㭩㭭㭴㭺㮀cute;䅺Āay㭍㭒ron;䅾;䐷ot;䅼Āet㭝㭡træᕟa;䎶r;쀀𝔷cy;䐶grarr;懝pf;쀀𝕫cr;쀀𝓏Ājn㮅㮇;怍j;怌'.split("").map((function(e){return e.charCodeAt(0)})))}));qe(Ao);var go=Ke((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=new Uint16Array("Ȁaglq\tɭ\0\0p;䀦os;䀧t;䀾t;䀼uot;䀢".split("").map((function(e){return e.charCodeAt(0)})))}));qe(go);var No=Ke((function(e,t){var n;Object.defineProperty(t,"__esModule",{value:!0}),t.replaceCodePoint=t.fromCodePoint=void 0;var r=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]);function i(e){var t;return e>=55296&&e<=57343||e>1114111?65533:null!==(t=r.get(e))&&void 0!==t?t:e}t.fromCodePoint=null!==(n=String.fromCodePoint)&&void 0!==n?n:function(e){var t="";return e>65535&&(e-=65536,t+=String.fromCharCode(e>>>10&1023|55296),e=56320|1023&e),t+=String.fromCharCode(e)},t.replaceCodePoint=i,t.default=function(e){return(0,t.fromCodePoint)(i(e))}}));qe(No),No.replaceCodePoint,No.fromCodePoint;var Co=Ao,Io=go,So=No,bo=Ke((function(e,t){var n=Ge&&Ge.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.decodeXML=t.decodeHTMLStrict=t.decodeHTML=t.determineBranch=t.BinTrieFlags=t.fromCodePoint=t.replaceCodePoint=t.decodeCodePoint=t.xmlDecodeTree=t.htmlDecodeTree=void 0;var r=n(Co);t.htmlDecodeTree=r.default;var i=n(Io);t.xmlDecodeTree=i.default;var s=n(So);t.decodeCodePoint=s.default;var a,o,c=So;function l(e){return function(t,n){for(var r="",i=0,c=0;(c=t.indexOf("&",c))>=0;)if(r+=t.slice(i,c),i=c,c+=1,t.charCodeAt(c)!==a.NUM){for(var l=0,u=1,p=0,f=e[p];c>14)-1))break;p+=E}}if(0!==l)r+=1===(E=(e[l]&o.VALUE_LENGTH)>>14)?String.fromCharCode(e[l]&~o.VALUE_LENGTH):2===E?String.fromCharCode(e[l+1]):String.fromCharCode(e[l+1],e[l+2]),i=c-u+1}else{var m=c+1,T=10,_=t.charCodeAt(m);(_|a.To_LOWER_BIT)===a.LOWER_X&&(T=16,c+=1,m+=1);do{_=t.charCodeAt(++c)}while(_>=a.ZERO&&_<=a.NINE||16===T&&(_|a.To_LOWER_BIT)>=a.LOWER_A&&(_|a.To_LOWER_BIT)<=a.LOWER_F);if(m!==c){var A=t.substring(m,c),g=parseInt(A,T);if(t.charCodeAt(c)===a.SEMI)c+=1;else if(n)continue;r+=(0,s.default)(g),i=c}}return r+t.slice(i)}}function h(e,t,n,r){var i=(t&o.BRANCH_LENGTH)>>7,s=t&o.JUMP_TABLE;if(0===i)return 0!==s&&r===s?n:-1;if(s){var a=r-s;return a<0||a>=i?-1:e[n+a]-1}for(var c=n,l=c+i-1;c<=l;){var h=c+l>>>1,u=e[h];if(ur))return e[h+i];l=h-1}}return-1}Object.defineProperty(t,"replaceCodePoint",{enumerable:!0,get:function(){return c.replaceCodePoint}}),Object.defineProperty(t,"fromCodePoint",{enumerable:!0,get:function(){return c.fromCodePoint}}),function(e){e[e.NUM=35]="NUM",e[e.SEMI=59]="SEMI",e[e.ZERO=48]="ZERO",e[e.NINE=57]="NINE",e[e.LOWER_A=97]="LOWER_A",e[e.LOWER_F=102]="LOWER_F",e[e.LOWER_X=120]="LOWER_X",e[e.To_LOWER_BIT=32]="To_LOWER_BIT"}(a||(a={})),function(e){e[e.VALUE_LENGTH=49152]="VALUE_LENGTH",e[e.BRANCH_LENGTH=16256]="BRANCH_LENGTH",e[e.JUMP_TABLE=127]="JUMP_TABLE"}(o=t.BinTrieFlags||(t.BinTrieFlags={})),t.determineBranch=h;var u=l(r.default),p=l(i.default);t.decodeHTML=function(e){return u(e,!1)},t.decodeHTMLStrict=function(e){return u(e,!0)},t.decodeXML=function(e){return p(e,!0)}}));qe(bo),bo.decodeXML,bo.decodeHTMLStrict,bo.decodeHTML;var Oo=bo.determineBranch,yo=bo.BinTrieFlags,Lo=bo.fromCodePoint,ko=bo.replaceCodePoint;bo.decodeCodePoint;var vo,Do,Ro,Mo,Po,xo=bo.xmlDecodeTree,wo=bo.htmlDecodeTree;!function(e){e.HTML="http://www.w3.org/1999/xhtml",e.MATHML="http://www.w3.org/1998/Math/MathML",e.SVG="http://www.w3.org/2000/svg",e.XLINK="http://www.w3.org/1999/xlink",e.XML="http://www.w3.org/XML/1998/namespace",e.XMLNS="http://www.w3.org/2000/xmlns/"}(vo=vo||(vo={})),function(e){e.TYPE="type",e.ACTION="action",e.ENCODING="encoding",e.PROMPT="prompt",e.NAME="name",e.COLOR="color",e.FACE="face",e.SIZE="size"}(Do=Do||(Do={})),function(e){e.NO_QUIRKS="no-quirks",e.QUIRKS="quirks",e.LIMITED_QUIRKS="limited-quirks"}(Ro=Ro||(Ro={})),function(e){e.A="a",e.ADDRESS="address",e.ANNOTATION_XML="annotation-xml",e.APPLET="applet",e.AREA="area",e.ARTICLE="article",e.ASIDE="aside",e.B="b",e.BASE="base",e.BASEFONT="basefont",e.BGSOUND="bgsound",e.BIG="big",e.BLOCKQUOTE="blockquote",e.BODY="body",e.BR="br",e.BUTTON="button",e.CAPTION="caption",e.CENTER="center",e.CODE="code",e.COL="col",e.COLGROUP="colgroup",e.DD="dd",e.DESC="desc",e.DETAILS="details",e.DIALOG="dialog",e.DIR="dir",e.DIV="div",e.DL="dl",e.DT="dt",e.EM="em",e.EMBED="embed",e.FIELDSET="fieldset",e.FIGCAPTION="figcaption",e.FIGURE="figure",e.FONT="font",e.FOOTER="footer",e.FOREIGN_OBJECT="foreignObject",e.FORM="form",e.FRAME="frame",e.FRAMESET="frameset",e.H1="h1",e.H2="h2",e.H3="h3",e.H4="h4",e.H5="h5",e.H6="h6",e.HEAD="head",e.HEADER="header",e.HGROUP="hgroup",e.HR="hr",e.HTML="html",e.I="i",e.IMG="img",e.IMAGE="image",e.INPUT="input",e.IFRAME="iframe",e.KEYGEN="keygen",e.LABEL="label",e.LI="li",e.LINK="link",e.LISTING="listing",e.MAIN="main",e.MALIGNMARK="malignmark",e.MARQUEE="marquee",e.MATH="math",e.MENU="menu",e.META="meta",e.MGLYPH="mglyph",e.MI="mi",e.MO="mo",e.MN="mn",e.MS="ms",e.MTEXT="mtext",e.NAV="nav",e.NOBR="nobr",e.NOFRAMES="noframes",e.NOEMBED="noembed",e.NOSCRIPT="noscript",e.OBJECT="object",e.OL="ol",e.OPTGROUP="optgroup",e.OPTION="option",e.P="p",e.PARAM="param",e.PLAINTEXT="plaintext",e.PRE="pre",e.RB="rb",e.RP="rp",e.RT="rt",e.RTC="rtc",e.RUBY="ruby",e.S="s",e.SCRIPT="script",e.SECTION="section",e.SELECT="select",e.SOURCE="source",e.SMALL="small",e.SPAN="span",e.STRIKE="strike",e.STRONG="strong",e.STYLE="style",e.SUB="sub",e.SUMMARY="summary",e.SUP="sup",e.TABLE="table",e.TBODY="tbody",e.TEMPLATE="template",e.TEXTAREA="textarea",e.TFOOT="tfoot",e.TD="td",e.TH="th",e.THEAD="thead",e.TITLE="title",e.TR="tr",e.TRACK="track",e.TT="tt",e.U="u",e.UL="ul",e.SVG="svg",e.VAR="var",e.WBR="wbr",e.XMP="xmp"}(Mo=Mo||(Mo={})),function(e){e[e.UNKNOWN=0]="UNKNOWN",e[e.A=1]="A",e[e.ADDRESS=2]="ADDRESS",e[e.ANNOTATION_XML=3]="ANNOTATION_XML",e[e.APPLET=4]="APPLET",e[e.AREA=5]="AREA",e[e.ARTICLE=6]="ARTICLE",e[e.ASIDE=7]="ASIDE",e[e.B=8]="B",e[e.BASE=9]="BASE",e[e.BASEFONT=10]="BASEFONT",e[e.BGSOUND=11]="BGSOUND",e[e.BIG=12]="BIG",e[e.BLOCKQUOTE=13]="BLOCKQUOTE",e[e.BODY=14]="BODY",e[e.BR=15]="BR",e[e.BUTTON=16]="BUTTON",e[e.CAPTION=17]="CAPTION",e[e.CENTER=18]="CENTER",e[e.CODE=19]="CODE",e[e.COL=20]="COL",e[e.COLGROUP=21]="COLGROUP",e[e.DD=22]="DD",e[e.DESC=23]="DESC",e[e.DETAILS=24]="DETAILS",e[e.DIALOG=25]="DIALOG",e[e.DIR=26]="DIR",e[e.DIV=27]="DIV",e[e.DL=28]="DL",e[e.DT=29]="DT",e[e.EM=30]="EM",e[e.EMBED=31]="EMBED",e[e.FIELDSET=32]="FIELDSET",e[e.FIGCAPTION=33]="FIGCAPTION",e[e.FIGURE=34]="FIGURE",e[e.FONT=35]="FONT",e[e.FOOTER=36]="FOOTER",e[e.FOREIGN_OBJECT=37]="FOREIGN_OBJECT",e[e.FORM=38]="FORM",e[e.FRAME=39]="FRAME",e[e.FRAMESET=40]="FRAMESET",e[e.H1=41]="H1",e[e.H2=42]="H2",e[e.H3=43]="H3",e[e.H4=44]="H4",e[e.H5=45]="H5",e[e.H6=46]="H6",e[e.HEAD=47]="HEAD",e[e.HEADER=48]="HEADER",e[e.HGROUP=49]="HGROUP",e[e.HR=50]="HR",e[e.HTML=51]="HTML",e[e.I=52]="I",e[e.IMG=53]="IMG",e[e.IMAGE=54]="IMAGE",e[e.INPUT=55]="INPUT",e[e.IFRAME=56]="IFRAME",e[e.KEYGEN=57]="KEYGEN",e[e.LABEL=58]="LABEL",e[e.LI=59]="LI",e[e.LINK=60]="LINK",e[e.LISTING=61]="LISTING",e[e.MAIN=62]="MAIN",e[e.MALIGNMARK=63]="MALIGNMARK",e[e.MARQUEE=64]="MARQUEE",e[e.MATH=65]="MATH",e[e.MENU=66]="MENU",e[e.META=67]="META",e[e.MGLYPH=68]="MGLYPH",e[e.MI=69]="MI",e[e.MO=70]="MO",e[e.MN=71]="MN",e[e.MS=72]="MS",e[e.MTEXT=73]="MTEXT",e[e.NAV=74]="NAV",e[e.NOBR=75]="NOBR",e[e.NOFRAMES=76]="NOFRAMES",e[e.NOEMBED=77]="NOEMBED",e[e.NOSCRIPT=78]="NOSCRIPT",e[e.OBJECT=79]="OBJECT",e[e.OL=80]="OL",e[e.OPTGROUP=81]="OPTGROUP",e[e.OPTION=82]="OPTION",e[e.P=83]="P",e[e.PARAM=84]="PARAM",e[e.PLAINTEXT=85]="PLAINTEXT",e[e.PRE=86]="PRE",e[e.RB=87]="RB",e[e.RP=88]="RP",e[e.RT=89]="RT",e[e.RTC=90]="RTC",e[e.RUBY=91]="RUBY",e[e.S=92]="S",e[e.SCRIPT=93]="SCRIPT",e[e.SECTION=94]="SECTION",e[e.SELECT=95]="SELECT",e[e.SOURCE=96]="SOURCE",e[e.SMALL=97]="SMALL",e[e.SPAN=98]="SPAN",e[e.STRIKE=99]="STRIKE",e[e.STRONG=100]="STRONG",e[e.STYLE=101]="STYLE",e[e.SUB=102]="SUB",e[e.SUMMARY=103]="SUMMARY",e[e.SUP=104]="SUP",e[e.TABLE=105]="TABLE",e[e.TBODY=106]="TBODY",e[e.TEMPLATE=107]="TEMPLATE",e[e.TEXTAREA=108]="TEXTAREA",e[e.TFOOT=109]="TFOOT",e[e.TD=110]="TD",e[e.TH=111]="TH",e[e.THEAD=112]="THEAD",e[e.TITLE=113]="TITLE",e[e.TR=114]="TR",e[e.TRACK=115]="TRACK",e[e.TT=116]="TT",e[e.U=117]="U",e[e.UL=118]="UL",e[e.SVG=119]="SVG",e[e.VAR=120]="VAR",e[e.WBR=121]="WBR",e[e.XMP=122]="XMP"}(Po=Po||(Po={}));const Bo=new Map([[Mo.A,Po.A],[Mo.ADDRESS,Po.ADDRESS],[Mo.ANNOTATION_XML,Po.ANNOTATION_XML],[Mo.APPLET,Po.APPLET],[Mo.AREA,Po.AREA],[Mo.ARTICLE,Po.ARTICLE],[Mo.ASIDE,Po.ASIDE],[Mo.B,Po.B],[Mo.BASE,Po.BASE],[Mo.BASEFONT,Po.BASEFONT],[Mo.BGSOUND,Po.BGSOUND],[Mo.BIG,Po.BIG],[Mo.BLOCKQUOTE,Po.BLOCKQUOTE],[Mo.BODY,Po.BODY],[Mo.BR,Po.BR],[Mo.BUTTON,Po.BUTTON],[Mo.CAPTION,Po.CAPTION],[Mo.CENTER,Po.CENTER],[Mo.CODE,Po.CODE],[Mo.COL,Po.COL],[Mo.COLGROUP,Po.COLGROUP],[Mo.DD,Po.DD],[Mo.DESC,Po.DESC],[Mo.DETAILS,Po.DETAILS],[Mo.DIALOG,Po.DIALOG],[Mo.DIR,Po.DIR],[Mo.DIV,Po.DIV],[Mo.DL,Po.DL],[Mo.DT,Po.DT],[Mo.EM,Po.EM],[Mo.EMBED,Po.EMBED],[Mo.FIELDSET,Po.FIELDSET],[Mo.FIGCAPTION,Po.FIGCAPTION],[Mo.FIGURE,Po.FIGURE],[Mo.FONT,Po.FONT],[Mo.FOOTER,Po.FOOTER],[Mo.FOREIGN_OBJECT,Po.FOREIGN_OBJECT],[Mo.FORM,Po.FORM],[Mo.FRAME,Po.FRAME],[Mo.FRAMESET,Po.FRAMESET],[Mo.H1,Po.H1],[Mo.H2,Po.H2],[Mo.H3,Po.H3],[Mo.H4,Po.H4],[Mo.H5,Po.H5],[Mo.H6,Po.H6],[Mo.HEAD,Po.HEAD],[Mo.HEADER,Po.HEADER],[Mo.HGROUP,Po.HGROUP],[Mo.HR,Po.HR],[Mo.HTML,Po.HTML],[Mo.I,Po.I],[Mo.IMG,Po.IMG],[Mo.IMAGE,Po.IMAGE],[Mo.INPUT,Po.INPUT],[Mo.IFRAME,Po.IFRAME],[Mo.KEYGEN,Po.KEYGEN],[Mo.LABEL,Po.LABEL],[Mo.LI,Po.LI],[Mo.LINK,Po.LINK],[Mo.LISTING,Po.LISTING],[Mo.MAIN,Po.MAIN],[Mo.MALIGNMARK,Po.MALIGNMARK],[Mo.MARQUEE,Po.MARQUEE],[Mo.MATH,Po.MATH],[Mo.MENU,Po.MENU],[Mo.META,Po.META],[Mo.MGLYPH,Po.MGLYPH],[Mo.MI,Po.MI],[Mo.MO,Po.MO],[Mo.MN,Po.MN],[Mo.MS,Po.MS],[Mo.MTEXT,Po.MTEXT],[Mo.NAV,Po.NAV],[Mo.NOBR,Po.NOBR],[Mo.NOFRAMES,Po.NOFRAMES],[Mo.NOEMBED,Po.NOEMBED],[Mo.NOSCRIPT,Po.NOSCRIPT],[Mo.OBJECT,Po.OBJECT],[Mo.OL,Po.OL],[Mo.OPTGROUP,Po.OPTGROUP],[Mo.OPTION,Po.OPTION],[Mo.P,Po.P],[Mo.PARAM,Po.PARAM],[Mo.PLAINTEXT,Po.PLAINTEXT],[Mo.PRE,Po.PRE],[Mo.RB,Po.RB],[Mo.RP,Po.RP],[Mo.RT,Po.RT],[Mo.RTC,Po.RTC],[Mo.RUBY,Po.RUBY],[Mo.S,Po.S],[Mo.SCRIPT,Po.SCRIPT],[Mo.SECTION,Po.SECTION],[Mo.SELECT,Po.SELECT],[Mo.SOURCE,Po.SOURCE],[Mo.SMALL,Po.SMALL],[Mo.SPAN,Po.SPAN],[Mo.STRIKE,Po.STRIKE],[Mo.STRONG,Po.STRONG],[Mo.STYLE,Po.STYLE],[Mo.SUB,Po.SUB],[Mo.SUMMARY,Po.SUMMARY],[Mo.SUP,Po.SUP],[Mo.TABLE,Po.TABLE],[Mo.TBODY,Po.TBODY],[Mo.TEMPLATE,Po.TEMPLATE],[Mo.TEXTAREA,Po.TEXTAREA],[Mo.TFOOT,Po.TFOOT],[Mo.TD,Po.TD],[Mo.TH,Po.TH],[Mo.THEAD,Po.THEAD],[Mo.TITLE,Po.TITLE],[Mo.TR,Po.TR],[Mo.TRACK,Po.TRACK],[Mo.TT,Po.TT],[Mo.U,Po.U],[Mo.UL,Po.UL],[Mo.SVG,Po.SVG],[Mo.VAR,Po.VAR],[Mo.WBR,Po.WBR],[Mo.XMP,Po.XMP]]);function Fo(e){var t;return null!==(t=Bo.get(e))&&void 0!==t?t:Po.UNKNOWN}const Uo=Po,Ho={[vo.HTML]:new Set([Uo.ADDRESS,Uo.APPLET,Uo.AREA,Uo.ARTICLE,Uo.ASIDE,Uo.BASE,Uo.BASEFONT,Uo.BGSOUND,Uo.BLOCKQUOTE,Uo.BODY,Uo.BR,Uo.BUTTON,Uo.CAPTION,Uo.CENTER,Uo.COL,Uo.COLGROUP,Uo.DD,Uo.DETAILS,Uo.DIR,Uo.DIV,Uo.DL,Uo.DT,Uo.EMBED,Uo.FIELDSET,Uo.FIGCAPTION,Uo.FIGURE,Uo.FOOTER,Uo.FORM,Uo.FRAME,Uo.FRAMESET,Uo.H1,Uo.H2,Uo.H3,Uo.H4,Uo.H5,Uo.H6,Uo.HEAD,Uo.HEADER,Uo.HGROUP,Uo.HR,Uo.HTML,Uo.IFRAME,Uo.IMG,Uo.INPUT,Uo.LI,Uo.LINK,Uo.LISTING,Uo.MAIN,Uo.MARQUEE,Uo.MENU,Uo.META,Uo.NAV,Uo.NOEMBED,Uo.NOFRAMES,Uo.NOSCRIPT,Uo.OBJECT,Uo.OL,Uo.P,Uo.PARAM,Uo.PLAINTEXT,Uo.PRE,Uo.SCRIPT,Uo.SECTION,Uo.SELECT,Uo.SOURCE,Uo.STYLE,Uo.SUMMARY,Uo.TABLE,Uo.TBODY,Uo.TD,Uo.TEMPLATE,Uo.TEXTAREA,Uo.TFOOT,Uo.TH,Uo.THEAD,Uo.TITLE,Uo.TR,Uo.TRACK,Uo.UL,Uo.WBR,Uo.XMP]),[vo.MATHML]:new Set([Uo.MI,Uo.MO,Uo.MN,Uo.MS,Uo.MTEXT,Uo.ANNOTATION_XML]),[vo.SVG]:new Set([Uo.TITLE,Uo.FOREIGN_OBJECT,Uo.DESC]),[vo.XLINK]:new Set,[vo.XML]:new Set,[vo.XMLNS]:new Set};function Go(e){return e===Uo.H1||e===Uo.H2||e===Uo.H3||e===Uo.H4||e===Uo.H5||e===Uo.H6}const Yo=new Set([Mo.STYLE,Mo.SCRIPT,Mo.XMP,Mo.IFRAME,Mo.NOEMBED,Mo.NOFRAMES,Mo.PLAINTEXT]);const qo=new Map([[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]);var Ko;!function(e){e[e.DATA=0]="DATA",e[e.RCDATA=1]="RCDATA",e[e.RAWTEXT=2]="RAWTEXT",e[e.SCRIPT_DATA=3]="SCRIPT_DATA",e[e.PLAINTEXT=4]="PLAINTEXT",e[e.TAG_OPEN=5]="TAG_OPEN",e[e.END_TAG_OPEN=6]="END_TAG_OPEN",e[e.TAG_NAME=7]="TAG_NAME",e[e.RCDATA_LESS_THAN_SIGN=8]="RCDATA_LESS_THAN_SIGN",e[e.RCDATA_END_TAG_OPEN=9]="RCDATA_END_TAG_OPEN",e[e.RCDATA_END_TAG_NAME=10]="RCDATA_END_TAG_NAME",e[e.RAWTEXT_LESS_THAN_SIGN=11]="RAWTEXT_LESS_THAN_SIGN",e[e.RAWTEXT_END_TAG_OPEN=12]="RAWTEXT_END_TAG_OPEN",e[e.RAWTEXT_END_TAG_NAME=13]="RAWTEXT_END_TAG_NAME",e[e.SCRIPT_DATA_LESS_THAN_SIGN=14]="SCRIPT_DATA_LESS_THAN_SIGN",e[e.SCRIPT_DATA_END_TAG_OPEN=15]="SCRIPT_DATA_END_TAG_OPEN",e[e.SCRIPT_DATA_END_TAG_NAME=16]="SCRIPT_DATA_END_TAG_NAME",e[e.SCRIPT_DATA_ESCAPE_START=17]="SCRIPT_DATA_ESCAPE_START",e[e.SCRIPT_DATA_ESCAPE_START_DASH=18]="SCRIPT_DATA_ESCAPE_START_DASH",e[e.SCRIPT_DATA_ESCAPED=19]="SCRIPT_DATA_ESCAPED",e[e.SCRIPT_DATA_ESCAPED_DASH=20]="SCRIPT_DATA_ESCAPED_DASH",e[e.SCRIPT_DATA_ESCAPED_DASH_DASH=21]="SCRIPT_DATA_ESCAPED_DASH_DASH",e[e.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN=22]="SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN",e[e.SCRIPT_DATA_ESCAPED_END_TAG_OPEN=23]="SCRIPT_DATA_ESCAPED_END_TAG_OPEN",e[e.SCRIPT_DATA_ESCAPED_END_TAG_NAME=24]="SCRIPT_DATA_ESCAPED_END_TAG_NAME",e[e.SCRIPT_DATA_DOUBLE_ESCAPE_START=25]="SCRIPT_DATA_DOUBLE_ESCAPE_START",e[e.SCRIPT_DATA_DOUBLE_ESCAPED=26]="SCRIPT_DATA_DOUBLE_ESCAPED",e[e.SCRIPT_DATA_DOUBLE_ESCAPED_DASH=27]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH",e[e.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH=28]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH",e[e.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN=29]="SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN",e[e.SCRIPT_DATA_DOUBLE_ESCAPE_END=30]="SCRIPT_DATA_DOUBLE_ESCAPE_END",e[e.BEFORE_ATTRIBUTE_NAME=31]="BEFORE_ATTRIBUTE_NAME",e[e.ATTRIBUTE_NAME=32]="ATTRIBUTE_NAME",e[e.AFTER_ATTRIBUTE_NAME=33]="AFTER_ATTRIBUTE_NAME",e[e.BEFORE_ATTRIBUTE_VALUE=34]="BEFORE_ATTRIBUTE_VALUE",e[e.ATTRIBUTE_VALUE_DOUBLE_QUOTED=35]="ATTRIBUTE_VALUE_DOUBLE_QUOTED",e[e.ATTRIBUTE_VALUE_SINGLE_QUOTED=36]="ATTRIBUTE_VALUE_SINGLE_QUOTED",e[e.ATTRIBUTE_VALUE_UNQUOTED=37]="ATTRIBUTE_VALUE_UNQUOTED",e[e.AFTER_ATTRIBUTE_VALUE_QUOTED=38]="AFTER_ATTRIBUTE_VALUE_QUOTED",e[e.SELF_CLOSING_START_TAG=39]="SELF_CLOSING_START_TAG",e[e.BOGUS_COMMENT=40]="BOGUS_COMMENT",e[e.MARKUP_DECLARATION_OPEN=41]="MARKUP_DECLARATION_OPEN",e[e.COMMENT_START=42]="COMMENT_START",e[e.COMMENT_START_DASH=43]="COMMENT_START_DASH",e[e.COMMENT=44]="COMMENT",e[e.COMMENT_LESS_THAN_SIGN=45]="COMMENT_LESS_THAN_SIGN",e[e.COMMENT_LESS_THAN_SIGN_BANG=46]="COMMENT_LESS_THAN_SIGN_BANG",e[e.COMMENT_LESS_THAN_SIGN_BANG_DASH=47]="COMMENT_LESS_THAN_SIGN_BANG_DASH",e[e.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH=48]="COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH",e[e.COMMENT_END_DASH=49]="COMMENT_END_DASH",e[e.COMMENT_END=50]="COMMENT_END",e[e.COMMENT_END_BANG=51]="COMMENT_END_BANG",e[e.DOCTYPE=52]="DOCTYPE",e[e.BEFORE_DOCTYPE_NAME=53]="BEFORE_DOCTYPE_NAME",e[e.DOCTYPE_NAME=54]="DOCTYPE_NAME",e[e.AFTER_DOCTYPE_NAME=55]="AFTER_DOCTYPE_NAME",e[e.AFTER_DOCTYPE_PUBLIC_KEYWORD=56]="AFTER_DOCTYPE_PUBLIC_KEYWORD",e[e.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER=57]="BEFORE_DOCTYPE_PUBLIC_IDENTIFIER",e[e.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED=58]="DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED",e[e.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED=59]="DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED",e[e.AFTER_DOCTYPE_PUBLIC_IDENTIFIER=60]="AFTER_DOCTYPE_PUBLIC_IDENTIFIER",e[e.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS=61]="BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS",e[e.AFTER_DOCTYPE_SYSTEM_KEYWORD=62]="AFTER_DOCTYPE_SYSTEM_KEYWORD",e[e.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER=63]="BEFORE_DOCTYPE_SYSTEM_IDENTIFIER",e[e.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED=64]="DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED",e[e.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED=65]="DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED",e[e.AFTER_DOCTYPE_SYSTEM_IDENTIFIER=66]="AFTER_DOCTYPE_SYSTEM_IDENTIFIER",e[e.BOGUS_DOCTYPE=67]="BOGUS_DOCTYPE",e[e.CDATA_SECTION=68]="CDATA_SECTION",e[e.CDATA_SECTION_BRACKET=69]="CDATA_SECTION_BRACKET",e[e.CDATA_SECTION_END=70]="CDATA_SECTION_END",e[e.CHARACTER_REFERENCE=71]="CHARACTER_REFERENCE",e[e.NAMED_CHARACTER_REFERENCE=72]="NAMED_CHARACTER_REFERENCE",e[e.AMBIGUOUS_AMPERSAND=73]="AMBIGUOUS_AMPERSAND",e[e.NUMERIC_CHARACTER_REFERENCE=74]="NUMERIC_CHARACTER_REFERENCE",e[e.HEXADEMICAL_CHARACTER_REFERENCE_START=75]="HEXADEMICAL_CHARACTER_REFERENCE_START",e[e.HEXADEMICAL_CHARACTER_REFERENCE=76]="HEXADEMICAL_CHARACTER_REFERENCE",e[e.DECIMAL_CHARACTER_REFERENCE=77]="DECIMAL_CHARACTER_REFERENCE",e[e.NUMERIC_CHARACTER_REFERENCE_END=78]="NUMERIC_CHARACTER_REFERENCE_END"}(Ko||(Ko={}));const jo={DATA:Ko.DATA,RCDATA:Ko.RCDATA,RAWTEXT:Ko.RAWTEXT,SCRIPT_DATA:Ko.SCRIPT_DATA,PLAINTEXT:Ko.PLAINTEXT,CDATA_SECTION:Ko.CDATA_SECTION};function Vo(e){return e>=io.DIGIT_0&&e<=io.DIGIT_9}function Wo(e){return e>=io.LATIN_CAPITAL_A&&e<=io.LATIN_CAPITAL_Z}function Qo(e){return function(e){return e>=io.LATIN_SMALL_A&&e<=io.LATIN_SMALL_Z}(e)||Wo(e)}function Xo(e){return Qo(e)||Vo(e)}function $o(e){return e>=io.LATIN_CAPITAL_A&&e<=io.LATIN_CAPITAL_F}function zo(e){return e>=io.LATIN_SMALL_A&&e<=io.LATIN_SMALL_F}function Jo(e){return e+32}function Zo(e){return e===io.SPACE||e===io.LINE_FEED||e===io.TABULATION||e===io.FORM_FEED}function ec(e){return Zo(e)||e===io.SOLIDUS||e===io.GREATER_THAN_SIGN}class tc{constructor(e,t){this.options=e,this.handler=t,this.paused=!1,this.inLoop=!1,this.inForeignNode=!1,this.lastStartTagName="",this.active=!1,this.state=Ko.DATA,this.returnState=Ko.DATA,this.charRefCode=-1,this.consumedAfterSnapshot=-1,this.currentCharacterToken=null,this.currentToken=null,this.currentAttr={name:"",value:""},this.preprocessor=new mo(t),this.currentLocation=this.getCurrentLocation(-1)}_err(e){var t,n;null===(n=(t=this.handler).onParseError)||void 0===n||n.call(t,this.preprocessor.getError(e))}getCurrentLocation(e){return this.options.sourceCodeLocationInfo?{startLine:this.preprocessor.line,startCol:this.preprocessor.col-e,startOffset:this.preprocessor.offset-e,endLine:-1,endCol:-1,endOffset:-1}:null}_runParsingLoop(){if(!this.inLoop){for(this.inLoop=!0;this.active&&!this.paused;){this.consumedAfterSnapshot=0;const e=this._consume();this._ensureHibernation()||this._callState(e)}this.inLoop=!1}}pause(){this.paused=!0}resume(e){if(!this.paused)throw new Error("Parser was already resumed");this.paused=!1,this.inLoop||(this._runParsingLoop(),this.paused||null==e||e())}write(e,t,n){this.active=!0,this.preprocessor.write(e,t),this._runParsingLoop(),this.paused||null==n||n()}insertHtmlAtCurrentPos(e){this.active=!0,this.preprocessor.insertHtmlAtCurrentPos(e),this._runParsingLoop()}_ensureHibernation(){return!!this.preprocessor.endOfChunkHit&&(this._unconsume(this.consumedAfterSnapshot),this.active=!1,!0)}_consume(){return this.consumedAfterSnapshot++,this.preprocessor.advance()}_unconsume(e){this.consumedAfterSnapshot-=e,this.preprocessor.retreat(e)}_reconsumeInState(e,t){this.state=e,this._callState(t)}_advanceBy(e){this.consumedAfterSnapshot+=e;for(let t=0;t0&&this._err(Eo.endTagWithAttributes),e.selfClosing&&this._err(Eo.endTagWithTrailingSolidus),this.handler.onEndTag(e)),this.preprocessor.dropParsedChunk()}emitCurrentComment(e){this.prepareToken(e),this.handler.onComment(e),this.preprocessor.dropParsedChunk()}emitCurrentDoctype(e){this.prepareToken(e),this.handler.onDoctype(e),this.preprocessor.dropParsedChunk()}_emitCurrentCharacterToken(e){if(this.currentCharacterToken){switch(e&&this.currentCharacterToken.location&&(this.currentCharacterToken.location.endLine=e.startLine,this.currentCharacterToken.location.endCol=e.startCol,this.currentCharacterToken.location.endOffset=e.startOffset),this.currentCharacterToken.type){case To.CHARACTER:this.handler.onCharacter(this.currentCharacterToken);break;case To.NULL_CHARACTER:this.handler.onNullCharacter(this.currentCharacterToken);break;case To.WHITESPACE_CHARACTER:this.handler.onWhitespaceCharacter(this.currentCharacterToken)}this.currentCharacterToken=null}}_emitEOFToken(){const e=this.getCurrentLocation(0);e&&(e.endLine=e.startLine,e.endCol=e.startCol,e.endOffset=e.startOffset),this._emitCurrentCharacterToken(e),this.handler.onEof({type:To.EOF,location:e}),this.active=!1}_appendCharToCurrentCharacterToken(e,t){if(this.currentCharacterToken){if(this.currentCharacterToken.type===e)return void(this.currentCharacterToken.chars+=t);this.currentLocation=this.getCurrentLocation(0),this._emitCurrentCharacterToken(this.currentLocation),this.preprocessor.dropParsedChunk()}this._createCharacterToken(e,t)}_emitCodePoint(e){const t=Zo(e)?To.WHITESPACE_CHARACTER:e===io.NULL?To.NULL_CHARACTER:To.CHARACTER;this._appendCharToCurrentCharacterToken(t,String.fromCodePoint(e))}_emitChars(e){this._appendCharToCurrentCharacterToken(To.CHARACTER,e)}_matchNamedCharacterReference(e){let t=null,n=0,r=!1;for(let s=0,a=wo[0];s>=0&&(s=Oo(wo,a,s+1,e),!(s<0));e=this._consume()){n+=1,a=wo[s];const o=a&yo.VALUE_LENGTH;if(o){const a=(o>>14)-1;if(e!==io.SEMICOLON&&this._isCharacterReferenceInAttribute()&&((i=this.preprocessor.peek(1))===io.EQUALS_SIGN||Xo(i))?(t=[io.AMPERSAND],s+=a):(t=0===a?[wo[s]&~yo.VALUE_LENGTH]:1===a?[wo[++s]]:[wo[++s],wo[++s]],n=0,r=e!==io.SEMICOLON),0===a){this._consume();break}}}var i;return this._unconsume(n),r&&!this.preprocessor.endOfChunkHit&&this._err(Eo.missingSemicolonAfterCharacterReference),this._unconsume(1),t}_isCharacterReferenceInAttribute(){return this.returnState===Ko.ATTRIBUTE_VALUE_DOUBLE_QUOTED||this.returnState===Ko.ATTRIBUTE_VALUE_SINGLE_QUOTED||this.returnState===Ko.ATTRIBUTE_VALUE_UNQUOTED}_flushCodePointConsumedAsCharacterReference(e){this._isCharacterReferenceInAttribute()?this.currentAttr.value+=String.fromCodePoint(e):this._emitCodePoint(e)}_callState(e){switch(this.state){case Ko.DATA:this._stateData(e);break;case Ko.RCDATA:this._stateRcdata(e);break;case Ko.RAWTEXT:this._stateRawtext(e);break;case Ko.SCRIPT_DATA:this._stateScriptData(e);break;case Ko.PLAINTEXT:this._statePlaintext(e);break;case Ko.TAG_OPEN:this._stateTagOpen(e);break;case Ko.END_TAG_OPEN:this._stateEndTagOpen(e);break;case Ko.TAG_NAME:this._stateTagName(e);break;case Ko.RCDATA_LESS_THAN_SIGN:this._stateRcdataLessThanSign(e);break;case Ko.RCDATA_END_TAG_OPEN:this._stateRcdataEndTagOpen(e);break;case Ko.RCDATA_END_TAG_NAME:this._stateRcdataEndTagName(e);break;case Ko.RAWTEXT_LESS_THAN_SIGN:this._stateRawtextLessThanSign(e);break;case Ko.RAWTEXT_END_TAG_OPEN:this._stateRawtextEndTagOpen(e);break;case Ko.RAWTEXT_END_TAG_NAME:this._stateRawtextEndTagName(e);break;case Ko.SCRIPT_DATA_LESS_THAN_SIGN:this._stateScriptDataLessThanSign(e);break;case Ko.SCRIPT_DATA_END_TAG_OPEN:this._stateScriptDataEndTagOpen(e);break;case Ko.SCRIPT_DATA_END_TAG_NAME:this._stateScriptDataEndTagName(e);break;case Ko.SCRIPT_DATA_ESCAPE_START:this._stateScriptDataEscapeStart(e);break;case Ko.SCRIPT_DATA_ESCAPE_START_DASH:this._stateScriptDataEscapeStartDash(e);break;case Ko.SCRIPT_DATA_ESCAPED:this._stateScriptDataEscaped(e);break;case Ko.SCRIPT_DATA_ESCAPED_DASH:this._stateScriptDataEscapedDash(e);break;case Ko.SCRIPT_DATA_ESCAPED_DASH_DASH:this._stateScriptDataEscapedDashDash(e);break;case Ko.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN:this._stateScriptDataEscapedLessThanSign(e);break;case Ko.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:this._stateScriptDataEscapedEndTagOpen(e);break;case Ko.SCRIPT_DATA_ESCAPED_END_TAG_NAME:this._stateScriptDataEscapedEndTagName(e);break;case Ko.SCRIPT_DATA_DOUBLE_ESCAPE_START:this._stateScriptDataDoubleEscapeStart(e);break;case Ko.SCRIPT_DATA_DOUBLE_ESCAPED:this._stateScriptDataDoubleEscaped(e);break;case Ko.SCRIPT_DATA_DOUBLE_ESCAPED_DASH:this._stateScriptDataDoubleEscapedDash(e);break;case Ko.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH:this._stateScriptDataDoubleEscapedDashDash(e);break;case Ko.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN:this._stateScriptDataDoubleEscapedLessThanSign(e);break;case Ko.SCRIPT_DATA_DOUBLE_ESCAPE_END:this._stateScriptDataDoubleEscapeEnd(e);break;case Ko.BEFORE_ATTRIBUTE_NAME:this._stateBeforeAttributeName(e);break;case Ko.ATTRIBUTE_NAME:this._stateAttributeName(e);break;case Ko.AFTER_ATTRIBUTE_NAME:this._stateAfterAttributeName(e);break;case Ko.BEFORE_ATTRIBUTE_VALUE:this._stateBeforeAttributeValue(e);break;case Ko.ATTRIBUTE_VALUE_DOUBLE_QUOTED:this._stateAttributeValueDoubleQuoted(e);break;case Ko.ATTRIBUTE_VALUE_SINGLE_QUOTED:this._stateAttributeValueSingleQuoted(e);break;case Ko.ATTRIBUTE_VALUE_UNQUOTED:this._stateAttributeValueUnquoted(e);break;case Ko.AFTER_ATTRIBUTE_VALUE_QUOTED:this._stateAfterAttributeValueQuoted(e);break;case Ko.SELF_CLOSING_START_TAG:this._stateSelfClosingStartTag(e);break;case Ko.BOGUS_COMMENT:this._stateBogusComment(e);break;case Ko.MARKUP_DECLARATION_OPEN:this._stateMarkupDeclarationOpen(e);break;case Ko.COMMENT_START:this._stateCommentStart(e);break;case Ko.COMMENT_START_DASH:this._stateCommentStartDash(e);break;case Ko.COMMENT:this._stateComment(e);break;case Ko.COMMENT_LESS_THAN_SIGN:this._stateCommentLessThanSign(e);break;case Ko.COMMENT_LESS_THAN_SIGN_BANG:this._stateCommentLessThanSignBang(e);break;case Ko.COMMENT_LESS_THAN_SIGN_BANG_DASH:this._stateCommentLessThanSignBangDash(e);break;case Ko.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:this._stateCommentLessThanSignBangDashDash(e);break;case Ko.COMMENT_END_DASH:this._stateCommentEndDash(e);break;case Ko.COMMENT_END:this._stateCommentEnd(e);break;case Ko.COMMENT_END_BANG:this._stateCommentEndBang(e);break;case Ko.DOCTYPE:this._stateDoctype(e);break;case Ko.BEFORE_DOCTYPE_NAME:this._stateBeforeDoctypeName(e);break;case Ko.DOCTYPE_NAME:this._stateDoctypeName(e);break;case Ko.AFTER_DOCTYPE_NAME:this._stateAfterDoctypeName(e);break;case Ko.AFTER_DOCTYPE_PUBLIC_KEYWORD:this._stateAfterDoctypePublicKeyword(e);break;case Ko.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER:this._stateBeforeDoctypePublicIdentifier(e);break;case Ko.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED:this._stateDoctypePublicIdentifierDoubleQuoted(e);break;case Ko.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED:this._stateDoctypePublicIdentifierSingleQuoted(e);break;case Ko.AFTER_DOCTYPE_PUBLIC_IDENTIFIER:this._stateAfterDoctypePublicIdentifier(e);break;case Ko.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS:this._stateBetweenDoctypePublicAndSystemIdentifiers(e);break;case Ko.AFTER_DOCTYPE_SYSTEM_KEYWORD:this._stateAfterDoctypeSystemKeyword(e);break;case Ko.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER:this._stateBeforeDoctypeSystemIdentifier(e);break;case Ko.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED:this._stateDoctypeSystemIdentifierDoubleQuoted(e);break;case Ko.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED:this._stateDoctypeSystemIdentifierSingleQuoted(e);break;case Ko.AFTER_DOCTYPE_SYSTEM_IDENTIFIER:this._stateAfterDoctypeSystemIdentifier(e);break;case Ko.BOGUS_DOCTYPE:this._stateBogusDoctype(e);break;case Ko.CDATA_SECTION:this._stateCdataSection(e);break;case Ko.CDATA_SECTION_BRACKET:this._stateCdataSectionBracket(e);break;case Ko.CDATA_SECTION_END:this._stateCdataSectionEnd(e);break;case Ko.CHARACTER_REFERENCE:this._stateCharacterReference(e);break;case Ko.NAMED_CHARACTER_REFERENCE:this._stateNamedCharacterReference(e);break;case Ko.AMBIGUOUS_AMPERSAND:this._stateAmbiguousAmpersand(e);break;case Ko.NUMERIC_CHARACTER_REFERENCE:this._stateNumericCharacterReference(e);break;case Ko.HEXADEMICAL_CHARACTER_REFERENCE_START:this._stateHexademicalCharacterReferenceStart(e);break;case Ko.HEXADEMICAL_CHARACTER_REFERENCE:this._stateHexademicalCharacterReference(e);break;case Ko.DECIMAL_CHARACTER_REFERENCE:this._stateDecimalCharacterReference(e);break;case Ko.NUMERIC_CHARACTER_REFERENCE_END:this._stateNumericCharacterReferenceEnd(e);break;default:throw new Error("Unknown state")}}_stateData(e){switch(e){case io.LESS_THAN_SIGN:this.state=Ko.TAG_OPEN;break;case io.AMPERSAND:this.returnState=Ko.DATA,this.state=Ko.CHARACTER_REFERENCE;break;case io.NULL:this._err(Eo.unexpectedNullCharacter),this._emitCodePoint(e);break;case io.EOF:this._emitEOFToken();break;default:this._emitCodePoint(e)}}_stateRcdata(e){switch(e){case io.AMPERSAND:this.returnState=Ko.RCDATA,this.state=Ko.CHARACTER_REFERENCE;break;case io.LESS_THAN_SIGN:this.state=Ko.RCDATA_LESS_THAN_SIGN;break;case io.NULL:this._err(Eo.unexpectedNullCharacter),this._emitChars("�");break;case io.EOF:this._emitEOFToken();break;default:this._emitCodePoint(e)}}_stateRawtext(e){switch(e){case io.LESS_THAN_SIGN:this.state=Ko.RAWTEXT_LESS_THAN_SIGN;break;case io.NULL:this._err(Eo.unexpectedNullCharacter),this._emitChars("�");break;case io.EOF:this._emitEOFToken();break;default:this._emitCodePoint(e)}}_stateScriptData(e){switch(e){case io.LESS_THAN_SIGN:this.state=Ko.SCRIPT_DATA_LESS_THAN_SIGN;break;case io.NULL:this._err(Eo.unexpectedNullCharacter),this._emitChars("�");break;case io.EOF:this._emitEOFToken();break;default:this._emitCodePoint(e)}}_statePlaintext(e){switch(e){case io.NULL:this._err(Eo.unexpectedNullCharacter),this._emitChars("�");break;case io.EOF:this._emitEOFToken();break;default:this._emitCodePoint(e)}}_stateTagOpen(e){if(Qo(e))this._createStartTagToken(),this.state=Ko.TAG_NAME,this._stateTagName(e);else switch(e){case io.EXCLAMATION_MARK:this.state=Ko.MARKUP_DECLARATION_OPEN;break;case io.SOLIDUS:this.state=Ko.END_TAG_OPEN;break;case io.QUESTION_MARK:this._err(Eo.unexpectedQuestionMarkInsteadOfTagName),this._createCommentToken(1),this.state=Ko.BOGUS_COMMENT,this._stateBogusComment(e);break;case io.EOF:this._err(Eo.eofBeforeTagName),this._emitChars("<"),this._emitEOFToken();break;default:this._err(Eo.invalidFirstCharacterOfTagName),this._emitChars("<"),this.state=Ko.DATA,this._stateData(e)}}_stateEndTagOpen(e){if(Qo(e))this._createEndTagToken(),this.state=Ko.TAG_NAME,this._stateTagName(e);else switch(e){case io.GREATER_THAN_SIGN:this._err(Eo.missingEndTagName),this.state=Ko.DATA;break;case io.EOF:this._err(Eo.eofBeforeTagName),this._emitChars("");break;case io.NULL:this._err(Eo.unexpectedNullCharacter),this.state=Ko.SCRIPT_DATA_ESCAPED,this._emitChars("�");break;case io.EOF:this._err(Eo.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break;default:this.state=Ko.SCRIPT_DATA_ESCAPED,this._emitCodePoint(e)}}_stateScriptDataEscapedLessThanSign(e){e===io.SOLIDUS?this.state=Ko.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:Qo(e)?(this._emitChars("<"),this.state=Ko.SCRIPT_DATA_DOUBLE_ESCAPE_START,this._stateScriptDataDoubleEscapeStart(e)):(this._emitChars("<"),this.state=Ko.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(e))}_stateScriptDataEscapedEndTagOpen(e){Qo(e)?(this.state=Ko.SCRIPT_DATA_ESCAPED_END_TAG_NAME,this._stateScriptDataEscapedEndTagName(e)):(this._emitChars("");break;case io.NULL:this._err(Eo.unexpectedNullCharacter),this.state=Ko.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars("�");break;case io.EOF:this._err(Eo.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break;default:this.state=Ko.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(e)}}_stateScriptDataDoubleEscapedLessThanSign(e){e===io.SOLIDUS?(this.state=Ko.SCRIPT_DATA_DOUBLE_ESCAPE_END,this._emitChars("/")):(this.state=Ko.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(e))}_stateScriptDataDoubleEscapeEnd(e){if(this.preprocessor.startsWith(co,!1)&&ec(this.preprocessor.peek(co.length))){this._emitCodePoint(e);for(let e=0;e1114111)this._err(Eo.characterReferenceOutsideUnicodeRange),this.charRefCode=io.REPLACEMENT_CHARACTER;else if(uo(this.charRefCode))this._err(Eo.surrogateCharacterReference),this.charRefCode=io.REPLACEMENT_CHARACTER;else if(fo(this.charRefCode))this._err(Eo.noncharacterCharacterReference);else if(po(this.charRefCode)||this.charRefCode===io.CARRIAGE_RETURN){this._err(Eo.controlCharacterReference);const e=qo.get(this.charRefCode);void 0!==e&&(this.charRefCode=e)}this._flushCodePointConsumedAsCharacterReference(this.charRefCode),this._reconsumeInState(this.returnState,e)}}const nc=new Set([Po.DD,Po.DT,Po.LI,Po.OPTGROUP,Po.OPTION,Po.P,Po.RB,Po.RP,Po.RT,Po.RTC]),rc=new Set([...nc,Po.CAPTION,Po.COLGROUP,Po.TBODY,Po.TD,Po.TFOOT,Po.TH,Po.THEAD,Po.TR]),ic=new Map([[Po.APPLET,vo.HTML],[Po.CAPTION,vo.HTML],[Po.HTML,vo.HTML],[Po.MARQUEE,vo.HTML],[Po.OBJECT,vo.HTML],[Po.TABLE,vo.HTML],[Po.TD,vo.HTML],[Po.TEMPLATE,vo.HTML],[Po.TH,vo.HTML],[Po.ANNOTATION_XML,vo.MATHML],[Po.MI,vo.MATHML],[Po.MN,vo.MATHML],[Po.MO,vo.MATHML],[Po.MS,vo.MATHML],[Po.MTEXT,vo.MATHML],[Po.DESC,vo.SVG],[Po.FOREIGN_OBJECT,vo.SVG],[Po.TITLE,vo.SVG]]),sc=[Po.H1,Po.H2,Po.H3,Po.H4,Po.H5,Po.H6],ac=[Po.TR,Po.TEMPLATE,Po.HTML],oc=[Po.TBODY,Po.TFOOT,Po.THEAD,Po.TEMPLATE,Po.HTML],cc=[Po.TABLE,Po.TEMPLATE,Po.HTML],lc=[Po.TD,Po.TH];class hc{constructor(e,t,n){this.treeAdapter=t,this.handler=n,this.items=[],this.tagIDs=[],this.stackTop=-1,this.tmplCount=0,this.currentTagId=Po.UNKNOWN,this.current=e}get currentTmplContentOrNode(){return this._isInTemplate()?this.treeAdapter.getTemplateContent(this.current):this.current}_indexOf(e){return this.items.lastIndexOf(e,this.stackTop)}_isInTemplate(){return this.currentTagId===Po.TEMPLATE&&this.treeAdapter.getNamespaceURI(this.current)===vo.HTML}_updateCurrentElement(){this.current=this.items[this.stackTop],this.currentTagId=this.tagIDs[this.stackTop]}push(e,t){this.stackTop++,this.items[this.stackTop]=e,this.current=e,this.tagIDs[this.stackTop]=t,this.currentTagId=t,this._isInTemplate()&&this.tmplCount++,this.handler.onItemPush(e,t,!0)}pop(){const e=this.current;this.tmplCount>0&&this._isInTemplate()&&this.tmplCount--,this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(e,!0)}replace(e,t){const n=this._indexOf(e);this.items[n]=t,n===this.stackTop&&(this.current=t)}insertAfter(e,t,n){const r=this._indexOf(e)+1;this.items.splice(r,0,t),this.tagIDs.splice(r,0,n),this.stackTop++,r===this.stackTop&&this._updateCurrentElement(),this.handler.onItemPush(this.current,this.currentTagId,r===this.stackTop)}popUntilTagNamePopped(e){let t=this.stackTop+1;do{t=this.tagIDs.lastIndexOf(e,t-1)}while(t>0&&this.treeAdapter.getNamespaceURI(this.items[t])!==vo.HTML);this.shortenToLength(t<0?0:t)}shortenToLength(e){for(;this.stackTop>=e;){const t=this.current;this.tmplCount>0&&this._isInTemplate()&&(this.tmplCount-=1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(t,this.stackTop=0;n--)if(e.includes(this.tagIDs[n])&&this.treeAdapter.getNamespaceURI(this.items[n])===t)return n;return-1}clearBackTo(e,t){const n=this._indexOfTagNames(e,t);this.shortenToLength(n+1)}clearBackToTableContext(){this.clearBackTo(cc,vo.HTML)}clearBackToTableBodyContext(){this.clearBackTo(oc,vo.HTML)}clearBackToTableRowContext(){this.clearBackTo(ac,vo.HTML)}remove(e){const t=this._indexOf(e);t>=0&&(t===this.stackTop?this.pop():(this.items.splice(t,1),this.tagIDs.splice(t,1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(e,!1)))}tryPeekProperlyNestedBodyElement(){return this.stackTop>=1&&this.tagIDs[1]===Po.BODY?this.items[1]:null}contains(e){return this._indexOf(e)>-1}getCommonAncestor(e){const t=this._indexOf(e)-1;return t>=0?this.items[t]:null}isRootHtmlElementCurrent(){return 0===this.stackTop&&this.tagIDs[0]===Po.HTML}hasInScope(e){for(let t=this.stackTop;t>=0;t--){const n=this.tagIDs[t],r=this.treeAdapter.getNamespaceURI(this.items[t]);if(n===e&&r===vo.HTML)return!0;if(ic.get(n)===r)return!1}return!0}hasNumberedHeaderInScope(){for(let e=this.stackTop;e>=0;e--){const t=this.tagIDs[e],n=this.treeAdapter.getNamespaceURI(this.items[e]);if(Go(t)&&n===vo.HTML)return!0;if(ic.get(t)===n)return!1}return!0}hasInListItemScope(e){for(let t=this.stackTop;t>=0;t--){const n=this.tagIDs[t],r=this.treeAdapter.getNamespaceURI(this.items[t]);if(n===e&&r===vo.HTML)return!0;if((n===Po.UL||n===Po.OL)&&r===vo.HTML||ic.get(n)===r)return!1}return!0}hasInButtonScope(e){for(let t=this.stackTop;t>=0;t--){const n=this.tagIDs[t],r=this.treeAdapter.getNamespaceURI(this.items[t]);if(n===e&&r===vo.HTML)return!0;if(n===Po.BUTTON&&r===vo.HTML||ic.get(n)===r)return!1}return!0}hasInTableScope(e){for(let t=this.stackTop;t>=0;t--){const n=this.tagIDs[t];if(this.treeAdapter.getNamespaceURI(this.items[t])===vo.HTML){if(n===e)return!0;if(n===Po.TABLE||n===Po.TEMPLATE||n===Po.HTML)return!1}}return!0}hasTableBodyContextInTableScope(){for(let e=this.stackTop;e>=0;e--){const t=this.tagIDs[e];if(this.treeAdapter.getNamespaceURI(this.items[e])===vo.HTML){if(t===Po.TBODY||t===Po.THEAD||t===Po.TFOOT)return!0;if(t===Po.TABLE||t===Po.HTML)return!1}}return!0}hasInSelectScope(e){for(let t=this.stackTop;t>=0;t--){const n=this.tagIDs[t];if(this.treeAdapter.getNamespaceURI(this.items[t])===vo.HTML){if(n===e)return!0;if(n!==Po.OPTION&&n!==Po.OPTGROUP)return!1}}return!0}generateImpliedEndTags(){for(;nc.has(this.currentTagId);)this.pop()}generateImpliedEndTagsThoroughly(){for(;rc.has(this.currentTagId);)this.pop()}generateImpliedEndTagsWithExclusion(e){for(;this.currentTagId!==e&&rc.has(this.currentTagId);)this.pop()}}var uc;!function(e){e[e.Marker=0]="Marker",e[e.Element=1]="Element"}(uc=uc||(uc={}));const pc={type:uc.Marker};class fc{constructor(e){this.treeAdapter=e,this.entries=[],this.bookmark=null}_getNoahArkConditionCandidates(e,t){const n=[],r=t.length,i=this.treeAdapter.getTagName(e),s=this.treeAdapter.getNamespaceURI(e);for(let e=0;e[e.name,e.value])));let i=0;for(let e=0;er.get(e.name)===e.value))&&(i+=1,i>=3&&this.entries.splice(t.idx,1))}}insertMarker(){this.entries.unshift(pc)}pushElement(e,t){this._ensureNoahArkCondition(e),this.entries.unshift({type:uc.Element,element:e,token:t})}insertElementAfterBookmark(e,t){const n=this.entries.indexOf(this.bookmark);this.entries.splice(n,0,{type:uc.Element,element:e,token:t})}removeEntry(e){const t=this.entries.indexOf(e);t>=0&&this.entries.splice(t,1)}clearToLastMarker(){const e=this.entries.indexOf(pc);e>=0?this.entries.splice(0,e+1):this.entries.length=0}getElementEntryInScopeWithTagName(e){const t=this.entries.find((t=>t.type===uc.Marker||this.treeAdapter.getTagName(t.element)===e));return t&&t.type===uc.Element?t:null}getElementEntry(e){return this.entries.find((t=>t.type===uc.Element&&t.element===e))}}function dc(e){return{nodeName:"#text",value:e,parentNode:null}}const Ec={createDocument:()=>({nodeName:"#document",mode:Ro.NO_QUIRKS,childNodes:[]}),createDocumentFragment:()=>({nodeName:"#document-fragment",childNodes:[]}),createElement:(e,t,n)=>({nodeName:e,tagName:e,attrs:n,namespaceURI:t,childNodes:[],parentNode:null}),createCommentNode:e=>({nodeName:"#comment",data:e,parentNode:null}),appendChild(e,t){e.childNodes.push(t),t.parentNode=e},insertBefore(e,t,n){const r=e.childNodes.indexOf(n);e.childNodes.splice(r,0,t),t.parentNode=e},setTemplateContent(e,t){e.content=t},getTemplateContent:e=>e.content,setDocumentType(e,t,n,r){const i=e.childNodes.find((e=>"#documentType"===e.nodeName));if(i)i.name=t,i.publicId=n,i.systemId=r;else{const i={nodeName:"#documentType",name:t,publicId:n,systemId:r,parentNode:null};Ec.appendChild(e,i)}},setDocumentMode(e,t){e.mode=t},getDocumentMode:e=>e.mode,detachNode(e){if(e.parentNode){const t=e.parentNode.childNodes.indexOf(e);e.parentNode.childNodes.splice(t,1),e.parentNode=null}},insertText(e,t){if(e.childNodes.length>0){const n=e.childNodes[e.childNodes.length-1];if(Ec.isTextNode(n))return void(n.value+=t)}Ec.appendChild(e,dc(t))},insertTextBefore(e,t,n){const r=e.childNodes[e.childNodes.indexOf(n)-1];r&&Ec.isTextNode(r)?r.value+=t:Ec.insertBefore(e,dc(t),n)},adoptAttributes(e,t){const n=new Set(e.attrs.map((e=>e.name)));for(let r=0;re.childNodes[0],getChildNodes:e=>e.childNodes,getParentNode:e=>e.parentNode,getAttrList:e=>e.attrs,getTagName:e=>e.tagName,getNamespaceURI:e=>e.namespaceURI,getTextNodeContent:e=>e.value,getCommentNodeContent:e=>e.data,getDocumentTypeNodeName:e=>e.name,getDocumentTypeNodePublicId:e=>e.publicId,getDocumentTypeNodeSystemId:e=>e.systemId,isTextNode:e=>"#text"===e.nodeName,isCommentNode:e=>"#comment"===e.nodeName,isDocumentTypeNode:e=>"#documentType"===e.nodeName,isElementNode:e=>Object.prototype.hasOwnProperty.call(e,"tagName"),setNodeSourceCodeLocation(e,t){e.sourceCodeLocation=t},getNodeSourceCodeLocation:e=>e.sourceCodeLocation,updateNodeSourceCodeLocation(e,t){e.sourceCodeLocation={...e.sourceCodeLocation,...t}}},mc=["+//silmaril//dtd html pro v0r11 19970101//","-//as//dtd html 3.0 aswedit + extensions//","-//advasoft ltd//dtd html 3.0 aswedit + extensions//","-//ietf//dtd html 2.0 level 1//","-//ietf//dtd html 2.0 level 2//","-//ietf//dtd html 2.0 strict level 1//","-//ietf//dtd html 2.0 strict level 2//","-//ietf//dtd html 2.0 strict//","-//ietf//dtd html 2.0//","-//ietf//dtd html 2.1e//","-//ietf//dtd html 3.0//","-//ietf//dtd html 3.2 final//","-//ietf//dtd html 3.2//","-//ietf//dtd html 3//","-//ietf//dtd html level 0//","-//ietf//dtd html level 1//","-//ietf//dtd html level 2//","-//ietf//dtd html level 3//","-//ietf//dtd html strict level 0//","-//ietf//dtd html strict level 1//","-//ietf//dtd html strict level 2//","-//ietf//dtd html strict level 3//","-//ietf//dtd html strict//","-//ietf//dtd html//","-//metrius//dtd metrius presentational//","-//microsoft//dtd internet explorer 2.0 html strict//","-//microsoft//dtd internet explorer 2.0 html//","-//microsoft//dtd internet explorer 2.0 tables//","-//microsoft//dtd internet explorer 3.0 html strict//","-//microsoft//dtd internet explorer 3.0 html//","-//microsoft//dtd internet explorer 3.0 tables//","-//netscape comm. corp.//dtd html//","-//netscape comm. corp.//dtd strict html//","-//o'reilly and associates//dtd html 2.0//","-//o'reilly and associates//dtd html extended 1.0//","-//o'reilly and associates//dtd html extended relaxed 1.0//","-//sq//dtd html 2.0 hotmetal + extensions//","-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//","-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//","-//spyglass//dtd html 2.0 extended//","-//sun microsystems corp.//dtd hotjava html//","-//sun microsystems corp.//dtd hotjava strict html//","-//w3c//dtd html 3 1995-03-24//","-//w3c//dtd html 3.2 draft//","-//w3c//dtd html 3.2 final//","-//w3c//dtd html 3.2//","-//w3c//dtd html 3.2s draft//","-//w3c//dtd html 4.0 frameset//","-//w3c//dtd html 4.0 transitional//","-//w3c//dtd html experimental 19960712//","-//w3c//dtd html experimental 970421//","-//w3c//dtd w3 html//","-//w3o//dtd w3 html 3.0//","-//webtechs//dtd mozilla html 2.0//","-//webtechs//dtd mozilla html//"],Tc=[...mc,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"],_c=new Set(["-//w3o//dtd w3 html strict 3.0//en//","-/w3c/dtd html 4.0 transitional/en","html"]),Ac=["-//w3c//dtd xhtml 1.0 frameset//","-//w3c//dtd xhtml 1.0 transitional//"],gc=[...Ac,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"];function Nc(e,t){return t.some((t=>e.startsWith(t)))}const Cc="text/html",Ic="application/xhtml+xml",Sc=new Map(["attributeName","attributeType","baseFrequency","baseProfile","calcMode","clipPathUnits","diffuseConstant","edgeMode","filterUnits","glyphRef","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"].map((e=>[e.toLowerCase(),e]))),bc=new Map([["xlink:actuate",{prefix:"xlink",name:"actuate",namespace:vo.XLINK}],["xlink:arcrole",{prefix:"xlink",name:"arcrole",namespace:vo.XLINK}],["xlink:href",{prefix:"xlink",name:"href",namespace:vo.XLINK}],["xlink:role",{prefix:"xlink",name:"role",namespace:vo.XLINK}],["xlink:show",{prefix:"xlink",name:"show",namespace:vo.XLINK}],["xlink:title",{prefix:"xlink",name:"title",namespace:vo.XLINK}],["xlink:type",{prefix:"xlink",name:"type",namespace:vo.XLINK}],["xml:base",{prefix:"xml",name:"base",namespace:vo.XML}],["xml:lang",{prefix:"xml",name:"lang",namespace:vo.XML}],["xml:space",{prefix:"xml",name:"space",namespace:vo.XML}],["xmlns",{prefix:"",name:"xmlns",namespace:vo.XMLNS}],["xmlns:xlink",{prefix:"xmlns",name:"xlink",namespace:vo.XMLNS}]]),Oc=new Map(["altGlyph","altGlyphDef","altGlyphItem","animateColor","animateMotion","animateTransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","glyphRef","linearGradient","radialGradient","textPath"].map((e=>[e.toLowerCase(),e]))),yc=new Set([Po.B,Po.BIG,Po.BLOCKQUOTE,Po.BODY,Po.BR,Po.CENTER,Po.CODE,Po.DD,Po.DIV,Po.DL,Po.DT,Po.EM,Po.EMBED,Po.H1,Po.H2,Po.H3,Po.H4,Po.H5,Po.H6,Po.HEAD,Po.HR,Po.I,Po.IMG,Po.LI,Po.LISTING,Po.MENU,Po.META,Po.NOBR,Po.OL,Po.P,Po.PRE,Po.RUBY,Po.S,Po.SMALL,Po.SPAN,Po.STRONG,Po.STRIKE,Po.SUB,Po.SUP,Po.TABLE,Po.TT,Po.U,Po.UL,Po.VAR]);function Lc(e){for(let t=0;t0&&this._setContextModes(e,t)}onItemPop(e,t){var n,r;if(this.options.sourceCodeLocationInfo&&this._setEndLocation(e,this.currentToken),null===(r=(n=this.treeAdapter).onItemPop)||void 0===r||r.call(n,e,this.openElements.current),t){let e,t;0===this.openElements.stackTop&&this.fragmentContext?(e=this.fragmentContext,t=this.fragmentContextID):({current:e,currentTagId:t}=this.openElements),this._setContextModes(e,t)}}_setContextModes(e,t){const n=e===this.document||this.treeAdapter.getNamespaceURI(e)===vo.HTML;this.currentNotInHTML=!n,this.tokenizer.inForeignNode=!n&&!this._isIntegrationPoint(t,e)}_switchToTextParsing(e,t){this._insertElement(e,vo.HTML),this.tokenizer.state=t,this.originalInsertionMode=this.insertionMode,this.insertionMode=Rc.TEXT}switchToPlaintextParsing(){this.insertionMode=Rc.TEXT,this.originalInsertionMode=Rc.IN_BODY,this.tokenizer.state=jo.PLAINTEXT}_getAdjustedCurrentElement(){return 0===this.openElements.stackTop&&this.fragmentContext?this.fragmentContext:this.openElements.current}_findFormInFragmentContext(){let e=this.fragmentContext;for(;e;){if(this.treeAdapter.getTagName(e)===Mo.FORM){this.formElement=e;break}e=this.treeAdapter.getParentNode(e)}}_initTokenizerForFragmentParsing(){if(this.fragmentContext&&this.treeAdapter.getNamespaceURI(this.fragmentContext)===vo.HTML)switch(this.fragmentContextID){case Po.TITLE:case Po.TEXTAREA:this.tokenizer.state=jo.RCDATA;break;case Po.STYLE:case Po.XMP:case Po.IFRAME:case Po.NOEMBED:case Po.NOFRAMES:case Po.NOSCRIPT:this.tokenizer.state=jo.RAWTEXT;break;case Po.SCRIPT:this.tokenizer.state=jo.SCRIPT_DATA;break;case Po.PLAINTEXT:this.tokenizer.state=jo.PLAINTEXT}}_setDocumentType(e){const t=e.name||"",n=e.publicId||"",r=e.systemId||"";if(this.treeAdapter.setDocumentType(this.document,t,n,r),e.location){const t=this.treeAdapter.getChildNodes(this.document).find((e=>this.treeAdapter.isDocumentTypeNode(e)));t&&this.treeAdapter.setNodeSourceCodeLocation(t,e.location)}}_attachElementToTree(e,t){if(this.options.sourceCodeLocationInfo){const n=t&&{...t,startTag:t};this.treeAdapter.setNodeSourceCodeLocation(e,n)}if(this._shouldFosterParentOnInsertion())this._fosterParentElement(e);else{const t=this.openElements.currentTmplContentOrNode;this.treeAdapter.appendChild(t,e)}}_appendElement(e,t){const n=this.treeAdapter.createElement(e.tagName,t,e.attrs);this._attachElementToTree(n,e.location)}_insertElement(e,t){const n=this.treeAdapter.createElement(e.tagName,t,e.attrs);this._attachElementToTree(n,e.location),this.openElements.push(n,e.tagID)}_insertFakeElement(e,t){const n=this.treeAdapter.createElement(e,vo.HTML,[]);this._attachElementToTree(n,null),this.openElements.push(n,t)}_insertTemplate(e){const t=this.treeAdapter.createElement(e.tagName,vo.HTML,e.attrs),n=this.treeAdapter.createDocumentFragment();this.treeAdapter.setTemplateContent(t,n),this._attachElementToTree(t,e.location),this.openElements.push(t,e.tagID),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(n,null)}_insertFakeRootElement(){const e=this.treeAdapter.createElement(Mo.HTML,vo.HTML,[]);this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(e,null),this.treeAdapter.appendChild(this.openElements.current,e),this.openElements.push(e,Po.HTML)}_appendCommentNode(e,t){const n=this.treeAdapter.createCommentNode(e.data);this.treeAdapter.appendChild(t,n),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(n,e.location)}_insertCharacters(e){let t,n;if(this._shouldFosterParentOnInsertion()?(({parent:t,beforeElement:n}=this._findFosterParentingLocation()),n?this.treeAdapter.insertTextBefore(t,e.chars,n):this.treeAdapter.insertText(t,e.chars)):(t=this.openElements.currentTmplContentOrNode,this.treeAdapter.insertText(t,e.chars)),!e.location)return;const r=this.treeAdapter.getChildNodes(t),i=n?r.lastIndexOf(n):r.length,s=r[i-1];if(this.treeAdapter.getNodeSourceCodeLocation(s)){const{endLine:t,endCol:n,endOffset:r}=e.location;this.treeAdapter.updateNodeSourceCodeLocation(s,{endLine:t,endCol:n,endOffset:r})}else this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(s,e.location)}_adoptNodes(e,t){for(let n=this.treeAdapter.getFirstChild(e);n;n=this.treeAdapter.getFirstChild(e))this.treeAdapter.detachNode(n),this.treeAdapter.appendChild(t,n)}_setEndLocation(e,t){if(this.treeAdapter.getNodeSourceCodeLocation(e)&&t.location){const n=t.location,r=this.treeAdapter.getTagName(e),i=t.type===To.END_TAG&&r===t.tagName?{endTag:{...n},endLine:n.endLine,endCol:n.endCol,endOffset:n.endOffset}:{endLine:n.startLine,endCol:n.startCol,endOffset:n.startOffset};this.treeAdapter.updateNodeSourceCodeLocation(e,i)}}shouldProcessStartTagTokenInForeignContent(e){if(!this.currentNotInHTML)return!1;let t,n;return 0===this.openElements.stackTop&&this.fragmentContext?(t=this.fragmentContext,n=this.fragmentContextID):({current:t,currentTagId:n}=this.openElements),(e.tagID!==Po.SVG||this.treeAdapter.getTagName(t)!==Mo.ANNOTATION_XML||this.treeAdapter.getNamespaceURI(t)!==vo.MATHML)&&(this.tokenizer.inForeignNode||(e.tagID===Po.MGLYPH||e.tagID===Po.MALIGNMARK)&&!this._isIntegrationPoint(n,t,vo.HTML))}_processToken(e){switch(e.type){case To.CHARACTER:this.onCharacter(e);break;case To.NULL_CHARACTER:this.onNullCharacter(e);break;case To.COMMENT:this.onComment(e);break;case To.DOCTYPE:this.onDoctype(e);break;case To.START_TAG:this._processStartTag(e);break;case To.END_TAG:this.onEndTag(e);break;case To.EOF:this.onEof(e);break;case To.WHITESPACE_CHARACTER:this.onWhitespaceCharacter(e)}}_isIntegrationPoint(e,t,n){return Dc(e,this.treeAdapter.getNamespaceURI(t),this.treeAdapter.getAttrList(t),n)}_reconstructActiveFormattingElements(){const e=this.activeFormattingElements.entries.length;if(e){const t=this.activeFormattingElements.entries.findIndex((e=>e.type===uc.Marker||this.openElements.contains(e.element)));for(let n=t<0?e-1:t-1;n>=0;n--){const e=this.activeFormattingElements.entries[n];this._insertElement(e.token,this.treeAdapter.getNamespaceURI(e.element)),e.element=this.openElements.current}}}_closeTableCell(){this.openElements.generateImpliedEndTags(),this.openElements.popUntilTableCellPopped(),this.activeFormattingElements.clearToLastMarker(),this.insertionMode=Rc.IN_ROW}_closePElement(){this.openElements.generateImpliedEndTagsWithExclusion(Po.P),this.openElements.popUntilTagNamePopped(Po.P)}_resetInsertionMode(){for(let e=this.openElements.stackTop;e>=0;e--)switch(0===e&&this.fragmentContext?this.fragmentContextID:this.openElements.tagIDs[e]){case Po.TR:return void(this.insertionMode=Rc.IN_ROW);case Po.TBODY:case Po.THEAD:case Po.TFOOT:return void(this.insertionMode=Rc.IN_TABLE_BODY);case Po.CAPTION:return void(this.insertionMode=Rc.IN_CAPTION);case Po.COLGROUP:return void(this.insertionMode=Rc.IN_COLUMN_GROUP);case Po.TABLE:return void(this.insertionMode=Rc.IN_TABLE);case Po.BODY:return void(this.insertionMode=Rc.IN_BODY);case Po.FRAMESET:return void(this.insertionMode=Rc.IN_FRAMESET);case Po.SELECT:return void this._resetInsertionModeForSelect(e);case Po.TEMPLATE:return void(this.insertionMode=this.tmplInsertionModeStack[0]);case Po.HTML:return void(this.insertionMode=this.headElement?Rc.AFTER_HEAD:Rc.BEFORE_HEAD);case Po.TD:case Po.TH:if(e>0)return void(this.insertionMode=Rc.IN_CELL);break;case Po.HEAD:if(e>0)return void(this.insertionMode=Rc.IN_HEAD)}this.insertionMode=Rc.IN_BODY}_resetInsertionModeForSelect(e){if(e>0)for(let t=e-1;t>0;t--){const e=this.openElements.tagIDs[t];if(e===Po.TEMPLATE)break;if(e===Po.TABLE)return void(this.insertionMode=Rc.IN_SELECT_IN_TABLE)}this.insertionMode=Rc.IN_SELECT}_isElementCausesFosterParenting(e){return Pc.has(e)}_shouldFosterParentOnInsertion(){return this.fosterParentingEnabled&&this._isElementCausesFosterParenting(this.openElements.currentTagId)}_findFosterParentingLocation(){for(let e=this.openElements.stackTop;e>=0;e--){const t=this.openElements.items[e];switch(this.openElements.tagIDs[e]){case Po.TEMPLATE:if(this.treeAdapter.getNamespaceURI(t)===vo.HTML)return{parent:this.treeAdapter.getTemplateContent(t),beforeElement:null};break;case Po.TABLE:{const n=this.treeAdapter.getParentNode(t);return n?{parent:n,beforeElement:t}:{parent:this.openElements.items[e-1],beforeElement:null}}}}return{parent:this.openElements.items[0],beforeElement:null}}_fosterParentElement(e){const t=this._findFosterParentingLocation();t.beforeElement?this.treeAdapter.insertBefore(t.parent,e,t.beforeElement):this.treeAdapter.appendChild(t.parent,e)}_isSpecialElement(e,t){const n=this.treeAdapter.getNamespaceURI(e);return Ho[n].has(t)}onCharacter(e){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode)!function(e,t){e._insertCharacters(t),e.framesetOk=!1}(this,e);else switch(this.insertionMode){case Rc.INITIAL:Vc(this,e);break;case Rc.BEFORE_HTML:Wc(this,e);break;case Rc.BEFORE_HEAD:Qc(this,e);break;case Rc.IN_HEAD:zc(this,e);break;case Rc.IN_HEAD_NO_SCRIPT:Jc(this,e);break;case Rc.AFTER_HEAD:Zc(this,e);break;case Rc.IN_BODY:case Rc.IN_CAPTION:case Rc.IN_CELL:case Rc.IN_TEMPLATE:nl(this,e);break;case Rc.TEXT:case Rc.IN_SELECT:case Rc.IN_SELECT_IN_TABLE:this._insertCharacters(e);break;case Rc.IN_TABLE:case Rc.IN_TABLE_BODY:case Rc.IN_ROW:ul(this,e);break;case Rc.IN_TABLE_TEXT:ml(this,e);break;case Rc.IN_COLUMN_GROUP:gl(this,e);break;case Rc.AFTER_BODY:kl(this,e);break;case Rc.AFTER_AFTER_BODY:vl(this,e)}}onNullCharacter(e){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode)!function(e,t){t.chars="�",e._insertCharacters(t)}(this,e);else switch(this.insertionMode){case Rc.INITIAL:Vc(this,e);break;case Rc.BEFORE_HTML:Wc(this,e);break;case Rc.BEFORE_HEAD:Qc(this,e);break;case Rc.IN_HEAD:zc(this,e);break;case Rc.IN_HEAD_NO_SCRIPT:Jc(this,e);break;case Rc.AFTER_HEAD:Zc(this,e);break;case Rc.TEXT:this._insertCharacters(e);break;case Rc.IN_TABLE:case Rc.IN_TABLE_BODY:case Rc.IN_ROW:ul(this,e);break;case Rc.IN_COLUMN_GROUP:gl(this,e);break;case Rc.AFTER_BODY:kl(this,e);break;case Rc.AFTER_AFTER_BODY:vl(this,e)}}onComment(e){if(this.skipNextNewLine=!1,this.currentNotInHTML)Kc(this,e);else switch(this.insertionMode){case Rc.INITIAL:case Rc.BEFORE_HTML:case Rc.BEFORE_HEAD:case Rc.IN_HEAD:case Rc.IN_HEAD_NO_SCRIPT:case Rc.AFTER_HEAD:case Rc.IN_BODY:case Rc.IN_TABLE:case Rc.IN_CAPTION:case Rc.IN_COLUMN_GROUP:case Rc.IN_TABLE_BODY:case Rc.IN_ROW:case Rc.IN_CELL:case Rc.IN_SELECT:case Rc.IN_SELECT_IN_TABLE:case Rc.IN_TEMPLATE:case Rc.IN_FRAMESET:case Rc.AFTER_FRAMESET:Kc(this,e);break;case Rc.IN_TABLE_TEXT:Tl(this,e);break;case Rc.AFTER_BODY:!function(e,t){e._appendCommentNode(t,e.openElements.items[0])}(this,e);break;case Rc.AFTER_AFTER_BODY:case Rc.AFTER_AFTER_FRAMESET:!function(e,t){e._appendCommentNode(t,e.document)}(this,e)}}onDoctype(e){switch(this.skipNextNewLine=!1,this.insertionMode){case Rc.INITIAL:!function(e,t){e._setDocumentType(t);const n=t.forceQuirks?Ro.QUIRKS:function(e){if("html"!==e.name)return Ro.QUIRKS;const{systemId:t}=e;if(t&&"http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd"===t.toLowerCase())return Ro.QUIRKS;let{publicId:n}=e;if(null!==n){if(n=n.toLowerCase(),_c.has(n))return Ro.QUIRKS;let e=null===t?Tc:mc;if(Nc(n,e))return Ro.QUIRKS;if(e=null===t?Ac:gc,Nc(n,e))return Ro.LIMITED_QUIRKS}return Ro.NO_QUIRKS}(t);(function(e){return"html"===e.name&&null===e.publicId&&(null===e.systemId||"about:legacy-compat"===e.systemId)})(t)||e._err(t,Eo.nonConformingDoctype);e.treeAdapter.setDocumentMode(e.document,n),e.insertionMode=Rc.BEFORE_HTML}(this,e);break;case Rc.BEFORE_HEAD:case Rc.IN_HEAD:case Rc.IN_HEAD_NO_SCRIPT:case Rc.AFTER_HEAD:this._err(e,Eo.misplacedDoctype);break;case Rc.IN_TABLE_TEXT:Tl(this,e)}}onStartTag(e){this.skipNextNewLine=!1,this.currentToken=e,this._processStartTag(e),e.selfClosing&&!e.ackSelfClosing&&this._err(e,Eo.nonVoidHtmlElementStartTagWithTrailingSolidus)}_processStartTag(e){this.shouldProcessStartTagTokenInForeignContent(e)?function(e,t){if(function(e){const t=e.tagID;return t===Po.FONT&&e.attrs.some((({name:e})=>e===Do.COLOR||e===Do.SIZE||e===Do.FACE))||yc.has(t)}(t))Dl(e),e._startTagOutsideForeignContent(t);else{const n=e._getAdjustedCurrentElement(),r=e.treeAdapter.getNamespaceURI(n);r===vo.MATHML?Lc(t):r===vo.SVG&&(!function(e){const t=Oc.get(e.tagName);null!=t&&(e.tagName=t,e.tagID=Fo(e.tagName))}(t),kc(t)),vc(t),t.selfClosing?e._appendElement(t,r):e._insertElement(t,r),t.ackSelfClosing=!0}}(this,e):this._startTagOutsideForeignContent(e)}_startTagOutsideForeignContent(e){switch(this.insertionMode){case Rc.INITIAL:Vc(this,e);break;case Rc.BEFORE_HTML:!function(e,t){t.tagID===Po.HTML?(e._insertElement(t,vo.HTML),e.insertionMode=Rc.BEFORE_HEAD):Wc(e,t)}(this,e);break;case Rc.BEFORE_HEAD:!function(e,t){switch(t.tagID){case Po.HTML:ol(e,t);break;case Po.HEAD:e._insertElement(t,vo.HTML),e.headElement=e.openElements.current,e.insertionMode=Rc.IN_HEAD;break;default:Qc(e,t)}}(this,e);break;case Rc.IN_HEAD:Xc(this,e);break;case Rc.IN_HEAD_NO_SCRIPT:!function(e,t){switch(t.tagID){case Po.HTML:ol(e,t);break;case Po.BASEFONT:case Po.BGSOUND:case Po.HEAD:case Po.LINK:case Po.META:case Po.NOFRAMES:case Po.STYLE:Xc(e,t);break;case Po.NOSCRIPT:e._err(t,Eo.nestedNoscriptInHead);break;default:Jc(e,t)}}(this,e);break;case Rc.AFTER_HEAD:!function(e,t){switch(t.tagID){case Po.HTML:ol(e,t);break;case Po.BODY:e._insertElement(t,vo.HTML),e.framesetOk=!1,e.insertionMode=Rc.IN_BODY;break;case Po.FRAMESET:e._insertElement(t,vo.HTML),e.insertionMode=Rc.IN_FRAMESET;break;case Po.BASE:case Po.BASEFONT:case Po.BGSOUND:case Po.LINK:case Po.META:case Po.NOFRAMES:case Po.SCRIPT:case Po.STYLE:case Po.TEMPLATE:case Po.TITLE:e._err(t,Eo.abandonedHeadElementChild),e.openElements.push(e.headElement,Po.HEAD),Xc(e,t),e.openElements.remove(e.headElement);break;case Po.HEAD:e._err(t,Eo.misplacedStartTagForHeadElement);break;default:Zc(e,t)}}(this,e);break;case Rc.IN_BODY:ol(this,e);break;case Rc.IN_TABLE:pl(this,e);break;case Rc.IN_TABLE_TEXT:Tl(this,e);break;case Rc.IN_CAPTION:!function(e,t){const n=t.tagID;_l.has(n)?e.openElements.hasInTableScope(Po.CAPTION)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(Po.CAPTION),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=Rc.IN_TABLE,pl(e,t)):ol(e,t)}(this,e);break;case Rc.IN_COLUMN_GROUP:Al(this,e);break;case Rc.IN_TABLE_BODY:Nl(this,e);break;case Rc.IN_ROW:Il(this,e);break;case Rc.IN_CELL:!function(e,t){const n=t.tagID;_l.has(n)?(e.openElements.hasInTableScope(Po.TD)||e.openElements.hasInTableScope(Po.TH))&&(e._closeTableCell(),Il(e,t)):ol(e,t)}(this,e);break;case Rc.IN_SELECT:bl(this,e);break;case Rc.IN_SELECT_IN_TABLE:!function(e,t){const n=t.tagID;n===Po.CAPTION||n===Po.TABLE||n===Po.TBODY||n===Po.TFOOT||n===Po.THEAD||n===Po.TR||n===Po.TD||n===Po.TH?(e.openElements.popUntilTagNamePopped(Po.SELECT),e._resetInsertionMode(),e._processStartTag(t)):bl(e,t)}(this,e);break;case Rc.IN_TEMPLATE:!function(e,t){switch(t.tagID){case Po.BASE:case Po.BASEFONT:case Po.BGSOUND:case Po.LINK:case Po.META:case Po.NOFRAMES:case Po.SCRIPT:case Po.STYLE:case Po.TEMPLATE:case Po.TITLE:Xc(e,t);break;case Po.CAPTION:case Po.COLGROUP:case Po.TBODY:case Po.TFOOT:case Po.THEAD:e.tmplInsertionModeStack[0]=Rc.IN_TABLE,e.insertionMode=Rc.IN_TABLE,pl(e,t);break;case Po.COL:e.tmplInsertionModeStack[0]=Rc.IN_COLUMN_GROUP,e.insertionMode=Rc.IN_COLUMN_GROUP,Al(e,t);break;case Po.TR:e.tmplInsertionModeStack[0]=Rc.IN_TABLE_BODY,e.insertionMode=Rc.IN_TABLE_BODY,Nl(e,t);break;case Po.TD:case Po.TH:e.tmplInsertionModeStack[0]=Rc.IN_ROW,e.insertionMode=Rc.IN_ROW,Il(e,t);break;default:e.tmplInsertionModeStack[0]=Rc.IN_BODY,e.insertionMode=Rc.IN_BODY,ol(e,t)}}(this,e);break;case Rc.AFTER_BODY:!function(e,t){t.tagID===Po.HTML?ol(e,t):kl(e,t)}(this,e);break;case Rc.IN_FRAMESET:!function(e,t){switch(t.tagID){case Po.HTML:ol(e,t);break;case Po.FRAMESET:e._insertElement(t,vo.HTML);break;case Po.FRAME:e._appendElement(t,vo.HTML),t.ackSelfClosing=!0;break;case Po.NOFRAMES:Xc(e,t)}}(this,e);break;case Rc.AFTER_FRAMESET:!function(e,t){switch(t.tagID){case Po.HTML:ol(e,t);break;case Po.NOFRAMES:Xc(e,t)}}(this,e);break;case Rc.AFTER_AFTER_BODY:!function(e,t){t.tagID===Po.HTML?ol(e,t):vl(e,t)}(this,e);break;case Rc.AFTER_AFTER_FRAMESET:!function(e,t){switch(t.tagID){case Po.HTML:ol(e,t);break;case Po.NOFRAMES:Xc(e,t)}}(this,e)}}onEndTag(e){this.skipNextNewLine=!1,this.currentToken=e,this.currentNotInHTML?function(e,t){if(t.tagID===Po.P||t.tagID===Po.BR)return Dl(e),void e._endTagOutsideForeignContent(t);for(let n=e.openElements.stackTop;n>0;n--){const r=e.openElements.items[n];if(e.treeAdapter.getNamespaceURI(r)===vo.HTML){e._endTagOutsideForeignContent(t);break}const i=e.treeAdapter.getTagName(r);if(i.toLowerCase()===t.tagName){t.tagName=i,e.openElements.shortenToLength(n);break}}}(this,e):this._endTagOutsideForeignContent(e)}_endTagOutsideForeignContent(e){switch(this.insertionMode){case Rc.INITIAL:Vc(this,e);break;case Rc.BEFORE_HTML:!function(e,t){const n=t.tagID;n!==Po.HTML&&n!==Po.HEAD&&n!==Po.BODY&&n!==Po.BR||Wc(e,t)}(this,e);break;case Rc.BEFORE_HEAD:!function(e,t){const n=t.tagID;n===Po.HEAD||n===Po.BODY||n===Po.HTML||n===Po.BR?Qc(e,t):e._err(t,Eo.endTagWithoutMatchingOpenElement)}(this,e);break;case Rc.IN_HEAD:!function(e,t){switch(t.tagID){case Po.HEAD:e.openElements.pop(),e.insertionMode=Rc.AFTER_HEAD;break;case Po.BODY:case Po.BR:case Po.HTML:zc(e,t);break;case Po.TEMPLATE:$c(e,t);break;default:e._err(t,Eo.endTagWithoutMatchingOpenElement)}}(this,e);break;case Rc.IN_HEAD_NO_SCRIPT:!function(e,t){switch(t.tagID){case Po.NOSCRIPT:e.openElements.pop(),e.insertionMode=Rc.IN_HEAD;break;case Po.BR:Jc(e,t);break;default:e._err(t,Eo.endTagWithoutMatchingOpenElement)}}(this,e);break;case Rc.AFTER_HEAD:!function(e,t){switch(t.tagID){case Po.BODY:case Po.HTML:case Po.BR:Zc(e,t);break;case Po.TEMPLATE:$c(e,t);break;default:e._err(t,Eo.endTagWithoutMatchingOpenElement)}}(this,e);break;case Rc.IN_BODY:ll(this,e);break;case Rc.TEXT:!function(e,t){var n;t.tagID===Po.SCRIPT&&(null===(n=e.scriptHandler)||void 0===n||n.call(e,e.openElements.current));e.openElements.pop(),e.insertionMode=e.originalInsertionMode}(this,e);break;case Rc.IN_TABLE:fl(this,e);break;case Rc.IN_TABLE_TEXT:Tl(this,e);break;case Rc.IN_CAPTION:!function(e,t){const n=t.tagID;switch(n){case Po.CAPTION:case Po.TABLE:e.openElements.hasInTableScope(Po.CAPTION)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(Po.CAPTION),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=Rc.IN_TABLE,n===Po.TABLE&&fl(e,t));break;case Po.BODY:case Po.COL:case Po.COLGROUP:case Po.HTML:case Po.TBODY:case Po.TD:case Po.TFOOT:case Po.TH:case Po.THEAD:case Po.TR:break;default:ll(e,t)}}(this,e);break;case Rc.IN_COLUMN_GROUP:!function(e,t){switch(t.tagID){case Po.COLGROUP:e.openElements.currentTagId===Po.COLGROUP&&(e.openElements.pop(),e.insertionMode=Rc.IN_TABLE);break;case Po.TEMPLATE:$c(e,t);break;case Po.COL:break;default:gl(e,t)}}(this,e);break;case Rc.IN_TABLE_BODY:Cl(this,e);break;case Rc.IN_ROW:Sl(this,e);break;case Rc.IN_CELL:!function(e,t){const n=t.tagID;switch(n){case Po.TD:case Po.TH:e.openElements.hasInTableScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=Rc.IN_ROW);break;case Po.TABLE:case Po.TBODY:case Po.TFOOT:case Po.THEAD:case Po.TR:e.openElements.hasInTableScope(n)&&(e._closeTableCell(),Sl(e,t));break;case Po.BODY:case Po.CAPTION:case Po.COL:case Po.COLGROUP:case Po.HTML:break;default:ll(e,t)}}(this,e);break;case Rc.IN_SELECT:Ol(this,e);break;case Rc.IN_SELECT_IN_TABLE:!function(e,t){const n=t.tagID;n===Po.CAPTION||n===Po.TABLE||n===Po.TBODY||n===Po.TFOOT||n===Po.THEAD||n===Po.TR||n===Po.TD||n===Po.TH?e.openElements.hasInTableScope(n)&&(e.openElements.popUntilTagNamePopped(Po.SELECT),e._resetInsertionMode(),e.onEndTag(t)):Ol(e,t)}(this,e);break;case Rc.IN_TEMPLATE:!function(e,t){t.tagID===Po.TEMPLATE&&$c(e,t)}(this,e);break;case Rc.AFTER_BODY:Ll(this,e);break;case Rc.IN_FRAMESET:!function(e,t){t.tagID!==Po.FRAMESET||e.openElements.isRootHtmlElementCurrent()||(e.openElements.pop(),e.fragmentContext||e.openElements.currentTagId===Po.FRAMESET||(e.insertionMode=Rc.AFTER_FRAMESET))}(this,e);break;case Rc.AFTER_FRAMESET:!function(e,t){t.tagID===Po.HTML&&(e.insertionMode=Rc.AFTER_AFTER_FRAMESET)}(this,e);break;case Rc.AFTER_AFTER_BODY:vl(this,e)}}onEof(e){switch(this.insertionMode){case Rc.INITIAL:Vc(this,e);break;case Rc.BEFORE_HTML:Wc(this,e);break;case Rc.BEFORE_HEAD:Qc(this,e);break;case Rc.IN_HEAD:zc(this,e);break;case Rc.IN_HEAD_NO_SCRIPT:Jc(this,e);break;case Rc.AFTER_HEAD:Zc(this,e);break;case Rc.IN_BODY:case Rc.IN_TABLE:case Rc.IN_CAPTION:case Rc.IN_COLUMN_GROUP:case Rc.IN_TABLE_BODY:case Rc.IN_ROW:case Rc.IN_CELL:case Rc.IN_SELECT:case Rc.IN_SELECT_IN_TABLE:hl(this,e);break;case Rc.TEXT:!function(e,t){e._err(t,Eo.eofInElementThatCanContainOnlyText),e.openElements.pop(),e.insertionMode=e.originalInsertionMode,e.onEof(t)}(this,e);break;case Rc.IN_TABLE_TEXT:Tl(this,e);break;case Rc.IN_TEMPLATE:yl(this,e);break;case Rc.AFTER_BODY:case Rc.IN_FRAMESET:case Rc.AFTER_FRAMESET:case Rc.AFTER_AFTER_BODY:case Rc.AFTER_AFTER_FRAMESET:jc(this,e)}}onWhitespaceCharacter(e){if(this.skipNextNewLine&&(this.skipNextNewLine=!1,e.chars.charCodeAt(0)===io.LINE_FEED)){if(1===e.chars.length)return;e.chars=e.chars.substr(1)}if(this.tokenizer.inForeignNode)this._insertCharacters(e);else switch(this.insertionMode){case Rc.IN_HEAD:case Rc.IN_HEAD_NO_SCRIPT:case Rc.AFTER_HEAD:case Rc.TEXT:case Rc.IN_COLUMN_GROUP:case Rc.IN_SELECT:case Rc.IN_SELECT_IN_TABLE:case Rc.IN_FRAMESET:case Rc.AFTER_FRAMESET:this._insertCharacters(e);break;case Rc.IN_BODY:case Rc.IN_CAPTION:case Rc.IN_CELL:case Rc.IN_TEMPLATE:case Rc.AFTER_BODY:case Rc.AFTER_AFTER_BODY:case Rc.AFTER_AFTER_FRAMESET:tl(this,e);break;case Rc.IN_TABLE:case Rc.IN_TABLE_BODY:case Rc.IN_ROW:ul(this,e);break;case Rc.IN_TABLE_TEXT:El(this,e)}}}function Bc(e,t){let n=e.activeFormattingElements.getElementEntryInScopeWithTagName(t.tagName);return n?e.openElements.contains(n.element)?e.openElements.hasInScope(t.tagID)||(n=null):(e.activeFormattingElements.removeEntry(n),n=null):cl(e,t),n}function Fc(e,t){let n=null,r=e.openElements.stackTop;for(;r>=0;r--){const i=e.openElements.items[r];if(i===t.element)break;e._isSpecialElement(i,e.openElements.tagIDs[r])&&(n=i)}return n||(e.openElements.shortenToLength(r<0?0:r),e.activeFormattingElements.removeEntry(t)),n}function Uc(e,t,n){let r=t,i=e.openElements.getCommonAncestor(t);for(let s=0,a=i;a!==n;s++,a=i){i=e.openElements.getCommonAncestor(a);const n=e.activeFormattingElements.getElementEntry(a),o=n&&s>=3;!n||o?(o&&e.activeFormattingElements.removeEntry(n),e.openElements.remove(a)):(a=Hc(e,n),r===t&&(e.activeFormattingElements.bookmark=n),e.treeAdapter.detachNode(r),e.treeAdapter.appendChild(a,r),r=a)}return r}function Hc(e,t){const n=e.treeAdapter.getNamespaceURI(t.element),r=e.treeAdapter.createElement(t.token.tagName,n,t.token.attrs);return e.openElements.replace(t.element,r),t.element=r,r}function Gc(e,t,n){const r=Fo(e.treeAdapter.getTagName(t));if(e._isElementCausesFosterParenting(r))e._fosterParentElement(n);else{const i=e.treeAdapter.getNamespaceURI(t);r===Po.TEMPLATE&&i===vo.HTML&&(t=e.treeAdapter.getTemplateContent(t)),e.treeAdapter.appendChild(t,n)}}function Yc(e,t,n){const r=e.treeAdapter.getNamespaceURI(n.element),{token:i}=n,s=e.treeAdapter.createElement(i.tagName,r,i.attrs);e._adoptNodes(t,s),e.treeAdapter.appendChild(t,s),e.activeFormattingElements.insertElementAfterBookmark(s,i),e.activeFormattingElements.removeEntry(n),e.openElements.remove(n.element),e.openElements.insertAfter(t,s,i.tagID)}function qc(e,t){for(let n=0;n<8;n++){const n=Bc(e,t);if(!n)break;const r=Fc(e,n);if(!r)break;e.activeFormattingElements.bookmark=n;const i=Uc(e,r,n.element),s=e.openElements.getCommonAncestor(n.element);e.treeAdapter.detachNode(i),s&&Gc(e,s,i),Yc(e,r,n)}}function Kc(e,t){e._appendCommentNode(t,e.openElements.currentTmplContentOrNode)}function jc(e,t){if(e.stopped=!0,t.location){const n=e.fragmentContext?0:2;for(let r=e.openElements.stackTop;r>=n;r--)e._setEndLocation(e.openElements.items[r],t);if(!e.fragmentContext&&e.openElements.stackTop>=0){const n=e.openElements.items[0],r=e.treeAdapter.getNodeSourceCodeLocation(n);if(r&&!r.endTag&&(e._setEndLocation(n,t),e.openElements.stackTop>=1)){const n=e.openElements.items[1],r=e.treeAdapter.getNodeSourceCodeLocation(n);r&&!r.endTag&&e._setEndLocation(n,t)}}}}function Vc(e,t){e._err(t,Eo.missingDoctype,!0),e.treeAdapter.setDocumentMode(e.document,Ro.QUIRKS),e.insertionMode=Rc.BEFORE_HTML,e._processToken(t)}function Wc(e,t){e._insertFakeRootElement(),e.insertionMode=Rc.BEFORE_HEAD,e._processToken(t)}function Qc(e,t){e._insertFakeElement(Mo.HEAD,Po.HEAD),e.headElement=e.openElements.current,e.insertionMode=Rc.IN_HEAD,e._processToken(t)}function Xc(e,t){switch(t.tagID){case Po.HTML:ol(e,t);break;case Po.BASE:case Po.BASEFONT:case Po.BGSOUND:case Po.LINK:case Po.META:e._appendElement(t,vo.HTML),t.ackSelfClosing=!0;break;case Po.TITLE:e._switchToTextParsing(t,jo.RCDATA);break;case Po.NOSCRIPT:e.options.scriptingEnabled?e._switchToTextParsing(t,jo.RAWTEXT):(e._insertElement(t,vo.HTML),e.insertionMode=Rc.IN_HEAD_NO_SCRIPT);break;case Po.NOFRAMES:case Po.STYLE:e._switchToTextParsing(t,jo.RAWTEXT);break;case Po.SCRIPT:e._switchToTextParsing(t,jo.SCRIPT_DATA);break;case Po.TEMPLATE:e._insertTemplate(t),e.activeFormattingElements.insertMarker(),e.framesetOk=!1,e.insertionMode=Rc.IN_TEMPLATE,e.tmplInsertionModeStack.unshift(Rc.IN_TEMPLATE);break;case Po.HEAD:e._err(t,Eo.misplacedStartTagForHeadElement);break;default:zc(e,t)}}function $c(e,t){e.openElements.tmplCount>0?(e.openElements.generateImpliedEndTagsThoroughly(),e.openElements.currentTagId!==Po.TEMPLATE&&e._err(t,Eo.closingOfElementWithOpenChildElements),e.openElements.popUntilTagNamePopped(Po.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode()):e._err(t,Eo.endTagWithoutMatchingOpenElement)}function zc(e,t){e.openElements.pop(),e.insertionMode=Rc.AFTER_HEAD,e._processToken(t)}function Jc(e,t){const n=t.type===To.EOF?Eo.openElementsLeftAfterEof:Eo.disallowedContentInNoscriptInHead;e._err(t,n),e.openElements.pop(),e.insertionMode=Rc.IN_HEAD,e._processToken(t)}function Zc(e,t){e._insertFakeElement(Mo.BODY,Po.BODY),e.insertionMode=Rc.IN_BODY,el(e,t)}function el(e,t){switch(t.type){case To.CHARACTER:nl(e,t);break;case To.WHITESPACE_CHARACTER:tl(e,t);break;case To.COMMENT:Kc(e,t);break;case To.START_TAG:ol(e,t);break;case To.END_TAG:ll(e,t);break;case To.EOF:hl(e,t)}}function tl(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t)}function nl(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t),e.framesetOk=!1}function rl(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,vo.HTML),e.framesetOk=!1,t.ackSelfClosing=!0}function il(e){const t=_o(e,Do.TYPE);return null!=t&&"hidden"===t.toLowerCase()}function sl(e,t){e._switchToTextParsing(t,jo.RAWTEXT)}function al(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,vo.HTML)}function ol(e,t){switch(t.tagID){case Po.I:case Po.S:case Po.B:case Po.U:case Po.EM:case Po.TT:case Po.BIG:case Po.CODE:case Po.FONT:case Po.SMALL:case Po.STRIKE:case Po.STRONG:!function(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,vo.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}(e,t);break;case Po.A:!function(e,t){const n=e.activeFormattingElements.getElementEntryInScopeWithTagName(Mo.A);n&&(qc(e,t),e.openElements.remove(n.element),e.activeFormattingElements.removeEntry(n)),e._reconstructActiveFormattingElements(),e._insertElement(t,vo.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}(e,t);break;case Po.H1:case Po.H2:case Po.H3:case Po.H4:case Po.H5:case Po.H6:!function(e,t){e.openElements.hasInButtonScope(Po.P)&&e._closePElement(),Go(e.openElements.currentTagId)&&e.openElements.pop(),e._insertElement(t,vo.HTML)}(e,t);break;case Po.P:case Po.DL:case Po.OL:case Po.UL:case Po.DIV:case Po.DIR:case Po.NAV:case Po.MAIN:case Po.MENU:case Po.ASIDE:case Po.CENTER:case Po.FIGURE:case Po.FOOTER:case Po.HEADER:case Po.HGROUP:case Po.DIALOG:case Po.DETAILS:case Po.ADDRESS:case Po.ARTICLE:case Po.SECTION:case Po.SUMMARY:case Po.FIELDSET:case Po.BLOCKQUOTE:case Po.FIGCAPTION:!function(e,t){e.openElements.hasInButtonScope(Po.P)&&e._closePElement(),e._insertElement(t,vo.HTML)}(e,t);break;case Po.LI:case Po.DD:case Po.DT:!function(e,t){e.framesetOk=!1;const n=t.tagID;for(let t=e.openElements.stackTop;t>=0;t--){const r=e.openElements.tagIDs[t];if(n===Po.LI&&r===Po.LI||(n===Po.DD||n===Po.DT)&&(r===Po.DD||r===Po.DT)){e.openElements.generateImpliedEndTagsWithExclusion(r),e.openElements.popUntilTagNamePopped(r);break}if(r!==Po.ADDRESS&&r!==Po.DIV&&r!==Po.P&&e._isSpecialElement(e.openElements.items[t],r))break}e.openElements.hasInButtonScope(Po.P)&&e._closePElement(),e._insertElement(t,vo.HTML)}(e,t);break;case Po.BR:case Po.IMG:case Po.WBR:case Po.AREA:case Po.EMBED:case Po.KEYGEN:rl(e,t);break;case Po.HR:!function(e,t){e.openElements.hasInButtonScope(Po.P)&&e._closePElement(),e._appendElement(t,vo.HTML),e.framesetOk=!1,t.ackSelfClosing=!0}(e,t);break;case Po.RB:case Po.RTC:!function(e,t){e.openElements.hasInScope(Po.RUBY)&&e.openElements.generateImpliedEndTags(),e._insertElement(t,vo.HTML)}(e,t);break;case Po.RT:case Po.RP:!function(e,t){e.openElements.hasInScope(Po.RUBY)&&e.openElements.generateImpliedEndTagsWithExclusion(Po.RTC),e._insertElement(t,vo.HTML)}(e,t);break;case Po.PRE:case Po.LISTING:!function(e,t){e.openElements.hasInButtonScope(Po.P)&&e._closePElement(),e._insertElement(t,vo.HTML),e.skipNextNewLine=!0,e.framesetOk=!1}(e,t);break;case Po.XMP:!function(e,t){e.openElements.hasInButtonScope(Po.P)&&e._closePElement(),e._reconstructActiveFormattingElements(),e.framesetOk=!1,e._switchToTextParsing(t,jo.RAWTEXT)}(e,t);break;case Po.SVG:!function(e,t){e._reconstructActiveFormattingElements(),kc(t),vc(t),t.selfClosing?e._appendElement(t,vo.SVG):e._insertElement(t,vo.SVG),t.ackSelfClosing=!0}(e,t);break;case Po.HTML:!function(e,t){0===e.openElements.tmplCount&&e.treeAdapter.adoptAttributes(e.openElements.items[0],t.attrs)}(e,t);break;case Po.BASE:case Po.LINK:case Po.META:case Po.STYLE:case Po.TITLE:case Po.SCRIPT:case Po.BGSOUND:case Po.BASEFONT:case Po.TEMPLATE:Xc(e,t);break;case Po.BODY:!function(e,t){const n=e.openElements.tryPeekProperlyNestedBodyElement();n&&0===e.openElements.tmplCount&&(e.framesetOk=!1,e.treeAdapter.adoptAttributes(n,t.attrs))}(e,t);break;case Po.FORM:!function(e,t){const n=e.openElements.tmplCount>0;e.formElement&&!n||(e.openElements.hasInButtonScope(Po.P)&&e._closePElement(),e._insertElement(t,vo.HTML),n||(e.formElement=e.openElements.current))}(e,t);break;case Po.NOBR:!function(e,t){e._reconstructActiveFormattingElements(),e.openElements.hasInScope(Po.NOBR)&&(qc(e,t),e._reconstructActiveFormattingElements()),e._insertElement(t,vo.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t)}(e,t);break;case Po.MATH:!function(e,t){e._reconstructActiveFormattingElements(),Lc(t),vc(t),t.selfClosing?e._appendElement(t,vo.MATHML):e._insertElement(t,vo.MATHML),t.ackSelfClosing=!0}(e,t);break;case Po.TABLE:!function(e,t){e.treeAdapter.getDocumentMode(e.document)!==Ro.QUIRKS&&e.openElements.hasInButtonScope(Po.P)&&e._closePElement(),e._insertElement(t,vo.HTML),e.framesetOk=!1,e.insertionMode=Rc.IN_TABLE}(e,t);break;case Po.INPUT:!function(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,vo.HTML),il(t)||(e.framesetOk=!1),t.ackSelfClosing=!0}(e,t);break;case Po.PARAM:case Po.TRACK:case Po.SOURCE:!function(e,t){e._appendElement(t,vo.HTML),t.ackSelfClosing=!0}(e,t);break;case Po.IMAGE:!function(e,t){t.tagName=Mo.IMG,t.tagID=Po.IMG,rl(e,t)}(e,t);break;case Po.BUTTON:!function(e,t){e.openElements.hasInScope(Po.BUTTON)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(Po.BUTTON)),e._reconstructActiveFormattingElements(),e._insertElement(t,vo.HTML),e.framesetOk=!1}(e,t);break;case Po.APPLET:case Po.OBJECT:case Po.MARQUEE:!function(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,vo.HTML),e.activeFormattingElements.insertMarker(),e.framesetOk=!1}(e,t);break;case Po.IFRAME:!function(e,t){e.framesetOk=!1,e._switchToTextParsing(t,jo.RAWTEXT)}(e,t);break;case Po.SELECT:!function(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,vo.HTML),e.framesetOk=!1,e.insertionMode=e.insertionMode===Rc.IN_TABLE||e.insertionMode===Rc.IN_CAPTION||e.insertionMode===Rc.IN_TABLE_BODY||e.insertionMode===Rc.IN_ROW||e.insertionMode===Rc.IN_CELL?Rc.IN_SELECT_IN_TABLE:Rc.IN_SELECT}(e,t);break;case Po.OPTION:case Po.OPTGROUP:!function(e,t){e.openElements.currentTagId===Po.OPTION&&e.openElements.pop(),e._reconstructActiveFormattingElements(),e._insertElement(t,vo.HTML)}(e,t);break;case Po.NOEMBED:sl(e,t);break;case Po.FRAMESET:!function(e,t){const n=e.openElements.tryPeekProperlyNestedBodyElement();e.framesetOk&&n&&(e.treeAdapter.detachNode(n),e.openElements.popAllUpToHtmlElement(),e._insertElement(t,vo.HTML),e.insertionMode=Rc.IN_FRAMESET)}(e,t);break;case Po.TEXTAREA:!function(e,t){e._insertElement(t,vo.HTML),e.skipNextNewLine=!0,e.tokenizer.state=jo.RCDATA,e.originalInsertionMode=e.insertionMode,e.framesetOk=!1,e.insertionMode=Rc.TEXT}(e,t);break;case Po.NOSCRIPT:e.options.scriptingEnabled?sl(e,t):al(e,t);break;case Po.PLAINTEXT:!function(e,t){e.openElements.hasInButtonScope(Po.P)&&e._closePElement(),e._insertElement(t,vo.HTML),e.tokenizer.state=jo.PLAINTEXT}(e,t);break;case Po.COL:case Po.TH:case Po.TD:case Po.TR:case Po.HEAD:case Po.FRAME:case Po.TBODY:case Po.TFOOT:case Po.THEAD:case Po.CAPTION:case Po.COLGROUP:break;default:al(e,t)}}function cl(e,t){const n=t.tagName,r=t.tagID;for(let t=e.openElements.stackTop;t>0;t--){const i=e.openElements.items[t],s=e.openElements.tagIDs[t];if(r===s&&(r!==Po.UNKNOWN||e.treeAdapter.getTagName(i)===n)){e.openElements.generateImpliedEndTagsWithExclusion(r),e.openElements.stackTop>=t&&e.openElements.shortenToLength(t);break}if(e._isSpecialElement(i,s))break}}function ll(e,t){switch(t.tagID){case Po.A:case Po.B:case Po.I:case Po.S:case Po.U:case Po.EM:case Po.TT:case Po.BIG:case Po.CODE:case Po.FONT:case Po.NOBR:case Po.SMALL:case Po.STRIKE:case Po.STRONG:qc(e,t);break;case Po.P:!function(e){e.openElements.hasInButtonScope(Po.P)||e._insertFakeElement(Mo.P,Po.P),e._closePElement()}(e);break;case Po.DL:case Po.UL:case Po.OL:case Po.DIR:case Po.DIV:case Po.NAV:case Po.PRE:case Po.MAIN:case Po.MENU:case Po.ASIDE:case Po.BUTTON:case Po.CENTER:case Po.FIGURE:case Po.FOOTER:case Po.HEADER:case Po.HGROUP:case Po.DIALOG:case Po.ADDRESS:case Po.ARTICLE:case Po.DETAILS:case Po.SECTION:case Po.SUMMARY:case Po.LISTING:case Po.FIELDSET:case Po.BLOCKQUOTE:case Po.FIGCAPTION:!function(e,t){const n=t.tagID;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n))}(e,t);break;case Po.LI:!function(e){e.openElements.hasInListItemScope(Po.LI)&&(e.openElements.generateImpliedEndTagsWithExclusion(Po.LI),e.openElements.popUntilTagNamePopped(Po.LI))}(e);break;case Po.DD:case Po.DT:!function(e,t){const n=t.tagID;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTagsWithExclusion(n),e.openElements.popUntilTagNamePopped(n))}(e,t);break;case Po.H1:case Po.H2:case Po.H3:case Po.H4:case Po.H5:case Po.H6:!function(e){e.openElements.hasNumberedHeaderInScope()&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilNumberedHeaderPopped())}(e);break;case Po.BR:!function(e){e._reconstructActiveFormattingElements(),e._insertFakeElement(Mo.BR,Po.BR),e.openElements.pop(),e.framesetOk=!1}(e);break;case Po.BODY:!function(e,t){if(e.openElements.hasInScope(Po.BODY)&&(e.insertionMode=Rc.AFTER_BODY,e.options.sourceCodeLocationInfo)){const n=e.openElements.tryPeekProperlyNestedBodyElement();n&&e._setEndLocation(n,t)}}(e,t);break;case Po.HTML:!function(e,t){e.openElements.hasInScope(Po.BODY)&&(e.insertionMode=Rc.AFTER_BODY,Ll(e,t))}(e,t);break;case Po.FORM:!function(e){const t=e.openElements.tmplCount>0,{formElement:n}=e;t||(e.formElement=null),(n||t)&&e.openElements.hasInScope(Po.FORM)&&(e.openElements.generateImpliedEndTags(),t?e.openElements.popUntilTagNamePopped(Po.FORM):n&&e.openElements.remove(n))}(e);break;case Po.APPLET:case Po.OBJECT:case Po.MARQUEE:!function(e,t){const n=t.tagID;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n),e.activeFormattingElements.clearToLastMarker())}(e,t);break;case Po.TEMPLATE:$c(e,t);break;default:cl(e,t)}}function hl(e,t){e.tmplInsertionModeStack.length>0?yl(e,t):jc(e,t)}function ul(e,t){if(Pc.has(e.openElements.currentTagId))switch(e.pendingCharacterTokens.length=0,e.hasNonWhitespacePendingCharacterToken=!1,e.originalInsertionMode=e.insertionMode,e.insertionMode=Rc.IN_TABLE_TEXT,t.type){case To.CHARACTER:ml(e,t);break;case To.WHITESPACE_CHARACTER:El(e,t)}else dl(e,t)}function pl(e,t){switch(t.tagID){case Po.TD:case Po.TH:case Po.TR:!function(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(Mo.TBODY,Po.TBODY),e.insertionMode=Rc.IN_TABLE_BODY,Nl(e,t)}(e,t);break;case Po.STYLE:case Po.SCRIPT:case Po.TEMPLATE:Xc(e,t);break;case Po.COL:!function(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(Mo.COLGROUP,Po.COLGROUP),e.insertionMode=Rc.IN_COLUMN_GROUP,Al(e,t)}(e,t);break;case Po.FORM:!function(e,t){e.formElement||0!==e.openElements.tmplCount||(e._insertElement(t,vo.HTML),e.formElement=e.openElements.current,e.openElements.pop())}(e,t);break;case Po.TABLE:!function(e,t){e.openElements.hasInTableScope(Po.TABLE)&&(e.openElements.popUntilTagNamePopped(Po.TABLE),e._resetInsertionMode(),e._processStartTag(t))}(e,t);break;case Po.TBODY:case Po.TFOOT:case Po.THEAD:!function(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,vo.HTML),e.insertionMode=Rc.IN_TABLE_BODY}(e,t);break;case Po.INPUT:!function(e,t){il(t)?e._appendElement(t,vo.HTML):dl(e,t),t.ackSelfClosing=!0}(e,t);break;case Po.CAPTION:!function(e,t){e.openElements.clearBackToTableContext(),e.activeFormattingElements.insertMarker(),e._insertElement(t,vo.HTML),e.insertionMode=Rc.IN_CAPTION}(e,t);break;case Po.COLGROUP:!function(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,vo.HTML),e.insertionMode=Rc.IN_COLUMN_GROUP}(e,t);break;default:dl(e,t)}}function fl(e,t){switch(t.tagID){case Po.TABLE:e.openElements.hasInTableScope(Po.TABLE)&&(e.openElements.popUntilTagNamePopped(Po.TABLE),e._resetInsertionMode());break;case Po.TEMPLATE:$c(e,t);break;case Po.BODY:case Po.CAPTION:case Po.COL:case Po.COLGROUP:case Po.HTML:case Po.TBODY:case Po.TD:case Po.TFOOT:case Po.TH:case Po.THEAD:case Po.TR:break;default:dl(e,t)}}function dl(e,t){const n=e.fosterParentingEnabled;e.fosterParentingEnabled=!0,el(e,t),e.fosterParentingEnabled=n}function El(e,t){e.pendingCharacterTokens.push(t)}function ml(e,t){e.pendingCharacterTokens.push(t),e.hasNonWhitespacePendingCharacterToken=!0}function Tl(e,t){let n=0;if(e.hasNonWhitespacePendingCharacterToken)for(;n0&&e.openElements.currentTagId===Po.OPTION&&e.openElements.tagIDs[e.openElements.stackTop-1]===Po.OPTGROUP&&e.openElements.pop(),e.openElements.currentTagId===Po.OPTGROUP&&e.openElements.pop();break;case Po.OPTION:e.openElements.currentTagId===Po.OPTION&&e.openElements.pop();break;case Po.SELECT:e.openElements.hasInSelectScope(Po.SELECT)&&(e.openElements.popUntilTagNamePopped(Po.SELECT),e._resetInsertionMode());break;case Po.TEMPLATE:$c(e,t)}}function yl(e,t){e.openElements.tmplCount>0?(e.openElements.popUntilTagNamePopped(Po.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode(),e.onEof(t)):jc(e,t)}function Ll(e,t){var n;if(t.tagID===Po.HTML){if(e.fragmentContext||(e.insertionMode=Rc.AFTER_AFTER_BODY),e.options.sourceCodeLocationInfo&&e.openElements.tagIDs[0]===Po.HTML){e._setEndLocation(e.openElements.items[0],t);const r=e.openElements.items[1];r&&!(null===(n=e.treeAdapter.getNodeSourceCodeLocation(r))||void 0===n?void 0:n.endTag)&&e._setEndLocation(r,t)}}else kl(e,t)}function kl(e,t){e.insertionMode=Rc.IN_BODY,el(e,t)}function vl(e,t){e.insertionMode=Rc.IN_BODY,el(e,t)}function Dl(e){for(;e.treeAdapter.getNamespaceURI(e.openElements.current)!==vo.HTML&&!e._isIntegrationPoint(e.openElements.currentTagId,e.openElements.current);)e.openElements.pop()}var Rl=Ke((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.escapeText=t.escapeAttribute=t.escapeUTF8=t.escape=t.encodeXML=t.getCodePoint=t.xmlReplacer=void 0,t.xmlReplacer=/["&'<>$\x80-\uFFFF]/g;var n=new Map([[34,"""],[38,"&"],[39,"'"],[60,"<"],[62,">"]]);function r(e){for(var r,i="",s=0;null!==(r=t.xmlReplacer.exec(e));){var a=r.index,o=e.charCodeAt(a),c=n.get(o);void 0!==c?(i+=e.substring(s,a)+c,s=a+1):(i+="".concat(e.substring(s,a),"&#x").concat((0,t.getCodePoint)(e,a).toString(16),";"),s=t.xmlReplacer.lastIndex+=Number(55296==(64512&o)))}return i+e.substr(s)}function i(e,t){return function(n){for(var r,i=0,s="";r=e.exec(n);)i!==r.index&&(s+=n.substring(i,r.index)),s+=t.get(r[0].charCodeAt(0)),i=r.index+1;return s+n.substring(i)}}t.getCodePoint=null!=String.prototype.codePointAt?function(e,t){return e.codePointAt(t)}:function(e,t){return 55296==(64512&e.charCodeAt(t))?1024*(e.charCodeAt(t)-55296)+e.charCodeAt(t+1)-56320+65536:e.charCodeAt(t)},t.encodeXML=r,t.escape=r,t.escapeUTF8=i(/[&<>'"]/g,n),t.escapeAttribute=i(/["&\u00A0]/g,new Map([[34,"""],[38,"&"],[160," "]])),t.escapeText=i(/[&<>\u00A0]/g,new Map([[38,"&"],[60,"<"],[62,">"],[160," "]]))}));qe(Rl);var Ml=Rl.escapeText,Pl=Rl.escapeAttribute;Rl.escapeUTF8,Rl.escape,Rl.encodeXML,Rl.getCodePoint,Rl.xmlReplacer;const xl=new Set([Mo.AREA,Mo.BASE,Mo.BASEFONT,Mo.BGSOUND,Mo.BR,Mo.COL,Mo.EMBED,Mo.FRAME,Mo.HR,Mo.IMG,Mo.INPUT,Mo.KEYGEN,Mo.LINK,Mo.META,Mo.PARAM,Mo.SOURCE,Mo.TRACK,Mo.WBR]);const wl={treeAdapter:Ec,scriptingEnabled:!0};function Bl(e,t){return Fl(e,{...wl,...t})}function Fl(e,t){return t.treeAdapter.isElementNode(e)?function(e,t){const n=t.treeAdapter.getTagName(e);return`<${n}${function(e,{treeAdapter:t}){let n="";for(const r of t.getAttrList(e)){if(n+=" ",r.namespace)switch(r.namespace){case vo.XML:n+=`xml:${r.name}`;break;case vo.XMLNS:"xmlns"!==r.name&&(n+="xmlns:"),n+=r.name;break;case vo.XLINK:n+=`xlink:${r.name}`;break;default:n+=`${r.prefix}:${r.name}`}else n+=r.name;n+=`="${Pl(r.value)}"`}return n}(e,t)}>${function(e,t){return t.treeAdapter.isElementNode(e)&&t.treeAdapter.getNamespaceURI(e)===vo.HTML&&xl.has(t.treeAdapter.getTagName(e))}(e,t)?"":`${function(e,t){let n="";const r=t.treeAdapter.isElementNode(e)&&t.treeAdapter.getTagName(e)===Mo.TEMPLATE&&t.treeAdapter.getNamespaceURI(e)===vo.HTML?t.treeAdapter.getTemplateContent(e):e,i=t.treeAdapter.getChildNodes(r);if(i)for(const e of i)n+=Fl(e,t);return n}(e,t)}`}`}(e,t):t.treeAdapter.isTextNode(e)?function(e,t){const{treeAdapter:n}=t,r=n.getTextNodeContent(e),i=n.getParentNode(e),s=i&&n.isElementNode(i)&&n.getTagName(i);return s&&n.getNamespaceURI(i)===vo.HTML&&(a=s,o=t.scriptingEnabled,Yo.has(a)||o&&a===Mo.NOSCRIPT)?r:Ml(r);var a,o}(e,t):t.treeAdapter.isCommentNode(e)?function(e,{treeAdapter:t}){return`\x3c!--${t.getCommentNodeContent(e)}--\x3e`}(e,t):t.treeAdapter.isDocumentTypeNode(e)?function(e,{treeAdapter:t}){return``}(e,t):""}function Ul(e){return new m(e)}function Hl(e){const t=e.includes('"')?"'":'"';return t+e+t}const Gl={isCommentNode:O,isElementNode:I,isTextNode:b,createDocument(){const e=new N([]);return e["x-mode"]=Ro.NO_QUIRKS,e},createDocumentFragment:()=>new N([]),createElement(e,t,n){const r=Object.create(null),i=Object.create(null),s=Object.create(null);for(let e=0;enew T(e),appendChild(e,t){const n=e.children[e.children.length-1];n&&(n.next=t,t.prev=n),e.children.push(t),t.parent=e},insertBefore(e,t,n){const r=e.children.indexOf(n),{prev:i}=n;i&&(i.next=t,t.prev=i),n.prev=t,t.next=n,e.children.splice(r,0,t),t.parent=e},setTemplateContent(e,t){Gl.appendChild(e,t)},getTemplateContent:e=>e.children[0],setDocumentType(e,t,n,r){const i=function(e,t,n){let r="!DOCTYPE ";return e&&(r+=e),t?r+=` PUBLIC ${Hl(t)}`:n&&(r+=" SYSTEM"),n&&(r+=` ${Hl(n)}`),r}(t,n,r);let s=e.children.find((e=>y(e)&&"!doctype"===e.name));s?s.data=null!=i?i:null:(s=new _("!doctype",i),Gl.appendChild(e,s)),s["x-name"]=null!=t?t:void 0,s["x-publicId"]=null!=n?n:void 0,s["x-systemId"]=null!=r?r:void 0},setDocumentMode(e,t){e["x-mode"]=t},getDocumentMode:e=>e["x-mode"],detachNode(e){if(e.parent){const t=e.parent.children.indexOf(e),{prev:n,next:r}=e;e.prev=null,e.next=null,n&&(n.next=r),r&&(r.prev=n),e.parent.children.splice(t,1),e.parent=null}},insertText(e,t){const n=e.children[e.children.length-1];n&&b(n)?n.data+=t:Gl.appendChild(e,Ul(t))},insertTextBefore(e,t,n){const r=e.children[e.children.indexOf(n)-1];r&&b(r)?r.data+=t:Gl.insertBefore(e,Ul(t),n)},adoptAttributes(e,t){for(let n=0;ne.children[0],getChildNodes:e=>e.children,getParentNode:e=>e.parent,getAttrList:e=>e.attributes,getTagName:e=>e.name,getNamespaceURI:e=>e.namespace,getTextNodeContent:e=>e.data,getCommentNodeContent:e=>e.data,getDocumentTypeNodeName(e){var t;return null!==(t=e["x-name"])&&void 0!==t?t:""},getDocumentTypeNodePublicId(e){var t;return null!==(t=e["x-publicId"])&&void 0!==t?t:""},getDocumentTypeNodeSystemId(e){var t;return null!==(t=e["x-systemId"])&&void 0!==t?t:""},isDocumentTypeNode:e=>y(e)&&"!doctype"===e.name,setNodeSourceCodeLocation(e,t){t&&(e.startIndex=t.startOffset,e.endIndex=t.endOffset),e.sourceCodeLocation=t},getNodeSourceCodeLocation:e=>e.sourceCodeLocation,updateNodeSourceCodeLocation(e,t){null!=t.endOffset&&(e.endIndex=t.endOffset),e.sourceCodeLocation={...e.sourceCodeLocation,...t}}};var Yl=function(e,t,n){if(n||2===arguments.length)for(var r,i=0,s=t.length;i=Kl.Zero&&e<=Kl.Nine}!function(e){e[e.Tab=9]="Tab",e[e.NewLine=10]="NewLine",e[e.FormFeed=12]="FormFeed",e[e.CarriageReturn=13]="CarriageReturn",e[e.Space=32]="Space",e[e.ExclamationMark=33]="ExclamationMark",e[e.Num=35]="Num",e[e.Amp=38]="Amp",e[e.SingleQuote=39]="SingleQuote",e[e.DoubleQuote=34]="DoubleQuote",e[e.Dash=45]="Dash",e[e.Slash=47]="Slash",e[e.Zero=48]="Zero",e[e.Nine=57]="Nine",e[e.Semi=59]="Semi",e[e.Lt=60]="Lt",e[e.Eq=61]="Eq",e[e.Gt=62]="Gt",e[e.Questionmark=63]="Questionmark",e[e.UpperA=65]="UpperA",e[e.LowerA=97]="LowerA",e[e.UpperF=70]="UpperF",e[e.LowerF=102]="LowerF",e[e.UpperZ=90]="UpperZ",e[e.LowerZ=122]="LowerZ",e[e.LowerX=120]="LowerX",e[e.OpeningSquareBracket=91]="OpeningSquareBracket"}(Kl||(Kl={})),function(e){e[e.Text=1]="Text",e[e.BeforeTagName=2]="BeforeTagName",e[e.InTagName=3]="InTagName",e[e.InSelfClosingTag=4]="InSelfClosingTag",e[e.BeforeClosingTagName=5]="BeforeClosingTagName",e[e.InClosingTagName=6]="InClosingTagName",e[e.AfterClosingTagName=7]="AfterClosingTagName",e[e.BeforeAttributeName=8]="BeforeAttributeName",e[e.InAttributeName=9]="InAttributeName",e[e.AfterAttributeName=10]="AfterAttributeName",e[e.BeforeAttributeValue=11]="BeforeAttributeValue",e[e.InAttributeValueDq=12]="InAttributeValueDq",e[e.InAttributeValueSq=13]="InAttributeValueSq",e[e.InAttributeValueNq=14]="InAttributeValueNq",e[e.BeforeDeclaration=15]="BeforeDeclaration",e[e.InDeclaration=16]="InDeclaration",e[e.InProcessingInstruction=17]="InProcessingInstruction",e[e.BeforeComment=18]="BeforeComment",e[e.CDATASequence=19]="CDATASequence",e[e.InSpecialComment=20]="InSpecialComment",e[e.InCommentLike=21]="InCommentLike",e[e.BeforeSpecialS=22]="BeforeSpecialS",e[e.SpecialStartSequence=23]="SpecialStartSequence",e[e.InSpecialTag=24]="InSpecialTag",e[e.BeforeEntity=25]="BeforeEntity",e[e.BeforeNumericEntity=26]="BeforeNumericEntity",e[e.InNamedEntity=27]="InNamedEntity",e[e.InNumericEntity=28]="InNumericEntity",e[e.InHexEntity=29]="InHexEntity"}(jl||(jl={})),function(e){e[e.NoValue=0]="NoValue",e[e.Unquoted=1]="Unquoted",e[e.Single=2]="Single",e[e.Double=3]="Double"}(Vl||(Vl={}));const zl={Cdata:new Uint8Array([67,68,65,84,65,91]),CdataEnd:new Uint8Array([93,93,62]),CommentEnd:new Uint8Array([45,45,62]),ScriptEnd:new Uint8Array([60,47,115,99,114,105,112,116]),StyleEnd:new Uint8Array([60,47,115,116,121,108,101]),TitleEnd:new Uint8Array([60,47,116,105,116,108,101])};class Jl{constructor({xmlMode:e=!1,decodeEntities:t=!0},n){this.cbs=n,this.state=jl.Text,this.buffer="",this.sectionStart=0,this.index=0,this.baseState=jl.Text,this.isSpecial=!1,this.running=!0,this.offset=0,this.sequenceIndex=0,this.trieIndex=0,this.trieCurrent=0,this.entityResult=0,this.entityExcess=0,this.xmlMode=e,this.decodeEntities=t,this.entityTrie=e?xo:wo}reset(){this.state=jl.Text,this.buffer="",this.sectionStart=0,this.index=0,this.baseState=jl.Text,this.currentSequence=void 0,this.running=!0,this.offset=0}write(e){this.offset+=this.buffer.length,this.buffer=e,this.parse()}end(){this.running&&this.finish()}pause(){this.running=!1}resume(){this.running=!0,this.indexthis.sectionStart&&this.cbs.ontext(this.sectionStart,this.index),this.state=jl.BeforeTagName,this.sectionStart=this.index):this.decodeEntities&&e===Kl.Amp&&(this.state=jl.BeforeEntity)}stateSpecialStartSequence(e){const t=this.sequenceIndex===this.currentSequence.length;if(t?Xl(e):(32|e)===this.currentSequence[this.sequenceIndex]){if(!t)return void this.sequenceIndex++}else this.isSpecial=!1;this.sequenceIndex=0,this.state=jl.InTagName,this.stateInTagName(e)}stateInSpecialTag(e){if(this.sequenceIndex===this.currentSequence.length){if(e===Kl.Gt||Ql(e)){const t=this.index-this.currentSequence.length;if(this.sectionStart=Kl.LowerA&&e<=Kl.LowerZ||e>=Kl.UpperA&&e<=Kl.UpperZ}(e)}startSpecial(e,t){this.isSpecial=!0,this.currentSequence=e,this.sequenceIndex=t,this.state=jl.SpecialStartSequence}stateBeforeTagName(e){if(e===Kl.ExclamationMark)this.state=jl.BeforeDeclaration,this.sectionStart=this.index+1;else if(e===Kl.Questionmark)this.state=jl.InProcessingInstruction,this.sectionStart=this.index+1;else if(this.isTagStartChar(e)){const t=32|e;this.sectionStart=this.index,this.xmlMode||t!==zl.TitleEnd[2]?this.state=this.xmlMode||t!==zl.ScriptEnd[2]?jl.InTagName:jl.BeforeSpecialS:this.startSpecial(zl.TitleEnd,3)}else e===Kl.Slash?this.state=jl.BeforeClosingTagName:(this.state=jl.Text,this.stateText(e))}stateInTagName(e){Xl(e)&&(this.cbs.onopentagname(this.sectionStart,this.index),this.sectionStart=-1,this.state=jl.BeforeAttributeName,this.stateBeforeAttributeName(e))}stateBeforeClosingTagName(e){Ql(e)||(e===Kl.Gt?this.state=jl.Text:(this.state=this.isTagStartChar(e)?jl.InClosingTagName:jl.InSpecialComment,this.sectionStart=this.index))}stateInClosingTagName(e){(e===Kl.Gt||Ql(e))&&(this.cbs.onclosetag(this.sectionStart,this.index),this.sectionStart=-1,this.state=jl.AfterClosingTagName,this.stateAfterClosingTagName(e))}stateAfterClosingTagName(e){(e===Kl.Gt||this.fastForwardTo(Kl.Gt))&&(this.state=jl.Text,this.sectionStart=this.index+1)}stateBeforeAttributeName(e){e===Kl.Gt?(this.cbs.onopentagend(this.index),this.isSpecial?(this.state=jl.InSpecialTag,this.sequenceIndex=0):this.state=jl.Text,this.baseState=this.state,this.sectionStart=this.index+1):e===Kl.Slash?this.state=jl.InSelfClosingTag:Ql(e)||(this.state=jl.InAttributeName,this.sectionStart=this.index)}stateInSelfClosingTag(e){e===Kl.Gt?(this.cbs.onselfclosingtag(this.index),this.state=jl.Text,this.baseState=jl.Text,this.sectionStart=this.index+1,this.isSpecial=!1):Ql(e)||(this.state=jl.BeforeAttributeName,this.stateBeforeAttributeName(e))}stateInAttributeName(e){(e===Kl.Eq||Xl(e))&&(this.cbs.onattribname(this.sectionStart,this.index),this.sectionStart=-1,this.state=jl.AfterAttributeName,this.stateAfterAttributeName(e))}stateAfterAttributeName(e){e===Kl.Eq?this.state=jl.BeforeAttributeValue:e===Kl.Slash||e===Kl.Gt?(this.cbs.onattribend(Vl.NoValue,this.index),this.state=jl.BeforeAttributeName,this.stateBeforeAttributeName(e)):Ql(e)||(this.cbs.onattribend(Vl.NoValue,this.index),this.state=jl.InAttributeName,this.sectionStart=this.index)}stateBeforeAttributeValue(e){e===Kl.DoubleQuote?(this.state=jl.InAttributeValueDq,this.sectionStart=this.index+1):e===Kl.SingleQuote?(this.state=jl.InAttributeValueSq,this.sectionStart=this.index+1):Ql(e)||(this.sectionStart=this.index,this.state=jl.InAttributeValueNq,this.stateInAttributeValueNoQuotes(e))}handleInAttributeValue(e,t){e===t||!this.decodeEntities&&this.fastForwardTo(t)?(this.cbs.onattribdata(this.sectionStart,this.index),this.sectionStart=-1,this.cbs.onattribend(t===Kl.DoubleQuote?Vl.Double:Vl.Single,this.index),this.state=jl.BeforeAttributeName):this.decodeEntities&&e===Kl.Amp&&(this.baseState=this.state,this.state=jl.BeforeEntity)}stateInAttributeValueDoubleQuotes(e){this.handleInAttributeValue(e,Kl.DoubleQuote)}stateInAttributeValueSingleQuotes(e){this.handleInAttributeValue(e,Kl.SingleQuote)}stateInAttributeValueNoQuotes(e){Ql(e)||e===Kl.Gt?(this.cbs.onattribdata(this.sectionStart,this.index),this.sectionStart=-1,this.cbs.onattribend(Vl.Unquoted,this.index),this.state=jl.BeforeAttributeName,this.stateBeforeAttributeName(e)):this.decodeEntities&&e===Kl.Amp&&(this.baseState=this.state,this.state=jl.BeforeEntity)}stateBeforeDeclaration(e){e===Kl.OpeningSquareBracket?(this.state=jl.CDATASequence,this.sequenceIndex=0):this.state=e===Kl.Dash?jl.BeforeComment:jl.InDeclaration}stateInDeclaration(e){(e===Kl.Gt||this.fastForwardTo(Kl.Gt))&&(this.cbs.ondeclaration(this.sectionStart,this.index),this.state=jl.Text,this.sectionStart=this.index+1)}stateInProcessingInstruction(e){(e===Kl.Gt||this.fastForwardTo(Kl.Gt))&&(this.cbs.onprocessinginstruction(this.sectionStart,this.index),this.state=jl.Text,this.sectionStart=this.index+1)}stateBeforeComment(e){e===Kl.Dash?(this.state=jl.InCommentLike,this.currentSequence=zl.CommentEnd,this.sequenceIndex=2,this.sectionStart=this.index+1):this.state=jl.InDeclaration}stateInSpecialComment(e){(e===Kl.Gt||this.fastForwardTo(Kl.Gt))&&(this.cbs.oncomment(this.sectionStart,this.index,0),this.state=jl.Text,this.sectionStart=this.index+1)}stateBeforeSpecialS(e){const t=32|e;t===zl.ScriptEnd[3]?this.startSpecial(zl.ScriptEnd,4):t===zl.StyleEnd[3]?this.startSpecial(zl.StyleEnd,4):(this.state=jl.InTagName,this.stateInTagName(e))}stateBeforeEntity(e){this.entityExcess=1,this.entityResult=0,e===Kl.Num?this.state=jl.BeforeNumericEntity:e===Kl.Amp||(this.trieIndex=0,this.trieCurrent=this.entityTrie[0],this.state=jl.InNamedEntity,this.stateInNamedEntity(e))}stateInNamedEntity(e){if(this.entityExcess+=1,this.trieIndex=Oo(this.entityTrie,this.trieCurrent,this.trieIndex+1,e),this.trieIndex<0)return this.emitNamedEntity(),void this.index--;this.trieCurrent=this.entityTrie[this.trieIndex];const t=this.trieCurrent&yo.VALUE_LENGTH;if(t){const n=(t>>14)-1;if(this.allowLegacyEntity()||e===Kl.Semi){const e=this.index-this.entityExcess+1;e>this.sectionStart&&this.emitPartial(this.sectionStart,e),this.entityResult=this.trieIndex,this.trieIndex+=n,this.entityExcess=0,this.sectionStart=this.index+1,0===n&&this.emitNamedEntity()}else this.trieIndex+=n}}emitNamedEntity(){if(this.state=this.baseState,0===this.entityResult)return;switch((this.entityTrie[this.entityResult]&yo.VALUE_LENGTH)>>14){case 1:this.emitCodePoint(this.entityTrie[this.entityResult]&~yo.VALUE_LENGTH);break;case 2:this.emitCodePoint(this.entityTrie[this.entityResult+1]);break;case 3:this.emitCodePoint(this.entityTrie[this.entityResult+1]),this.emitCodePoint(this.entityTrie[this.entityResult+2])}}stateBeforeNumericEntity(e){(32|e)===Kl.LowerX?(this.entityExcess++,this.state=jl.InHexEntity):(this.state=jl.InNumericEntity,this.stateInNumericEntity(e))}emitNumericEntity(e){const t=this.index-this.entityExcess-1;t+2+Number(this.state===jl.InHexEntity)!==this.index&&(t>this.sectionStart&&this.emitPartial(this.sectionStart,t),this.sectionStart=this.index+Number(e),this.emitCodePoint(ko(this.entityResult))),this.state=this.baseState}stateInNumericEntity(e){e===Kl.Semi?this.emitNumericEntity(!0):$l(e)?(this.entityResult=10*this.entityResult+(e-Kl.Zero),this.entityExcess++):(this.allowLegacyEntity()?this.emitNumericEntity(!1):this.state=this.baseState,this.index--)}stateInHexEntity(e){e===Kl.Semi?this.emitNumericEntity(!0):$l(e)?(this.entityResult=16*this.entityResult+(e-Kl.Zero),this.entityExcess++):!function(e){return e>=Kl.UpperA&&e<=Kl.UpperF||e>=Kl.LowerA&&e<=Kl.LowerF}(e)?(this.allowLegacyEntity()?this.emitNumericEntity(!1):this.state=this.baseState,this.index--):(this.entityResult=16*this.entityResult+((32|e)-Kl.LowerA+10),this.entityExcess++)}allowLegacyEntity(){return!this.xmlMode&&(this.baseState===jl.Text||this.baseState===jl.InSpecialTag)}cleanup(){this.running&&this.sectionStart!==this.index&&(this.state===jl.Text||this.state===jl.InSpecialTag&&0===this.sequenceIndex?(this.cbs.ontext(this.sectionStart,this.index),this.sectionStart=this.index):this.state!==jl.InAttributeValueDq&&this.state!==jl.InAttributeValueSq&&this.state!==jl.InAttributeValueNq||(this.cbs.onattribdata(this.sectionStart,this.index),this.sectionStart=this.index))}shouldContinue(){return this.index0&&s.has(this.stack[this.stack.length-1]);){const e=this.stack.pop();null===(n=(t=this.cbs).onclosetag)||void 0===n||n.call(t,e,!0)}this.isVoidElement(e)||(this.stack.push(e),ah.has(e)?this.foreignContext.push(!0):oh.has(e)&&this.foreignContext.push(!1)),null===(i=(r=this.cbs).onopentagname)||void 0===i||i.call(r,e),this.cbs.onopentag&&(this.attribs={})}endOpenTag(e){var t,n;this.startIndex=this.openTagStart,this.attribs&&(null===(n=(t=this.cbs).onopentag)||void 0===n||n.call(t,this.tagname,this.attribs,e),this.attribs=null),this.cbs.onclosetag&&this.isVoidElement(this.tagname)&&this.cbs.onclosetag(this.tagname,!0),this.tagname=""}onopentagend(e){this.endIndex=e,this.endOpenTag(!1),this.startIndex=e+1}onclosetag(e,t){var n,r,i,s,a,o;this.endIndex=t;let c=this.getSlice(e,t);if(this.lowerCaseTagNames&&(c=c.toLowerCase()),(ah.has(c)||oh.has(c))&&this.foreignContext.pop(),this.isVoidElement(c))this.options.xmlMode||"br"!==c||(null===(r=(n=this.cbs).onopentagname)||void 0===r||r.call(n,"br"),null===(s=(i=this.cbs).onopentag)||void 0===s||s.call(i,"br",{},!0),null===(o=(a=this.cbs).onclosetag)||void 0===o||o.call(a,"br",!1));else{const e=this.stack.lastIndexOf(c);if(-1!==e)if(this.cbs.onclosetag){let t=this.stack.length-e;for(;t--;)this.cbs.onclosetag(this.stack.pop(),0!==t)}else this.stack.length=e;else this.options.xmlMode||"p"!==c||(this.emitOpenTag("p"),this.closeCurrentTag(!0))}this.startIndex=t+1}onselfclosingtag(e){this.endIndex=e,this.options.xmlMode||this.options.recognizeSelfClosing||this.foreignContext[this.foreignContext.length-1]?(this.closeCurrentTag(!1),this.startIndex=e+1):this.onopentagend(e)}closeCurrentTag(e){var t,n;const r=this.tagname;this.endOpenTag(e),this.stack[this.stack.length-1]===r&&(null===(n=(t=this.cbs).onclosetag)||void 0===n||n.call(t,r,!e),this.stack.pop())}onattribname(e,t){this.startIndex=e;const n=this.getSlice(e,t);this.attribname=this.lowerCaseAttributeNames?n.toLowerCase():n}onattribdata(e,t){this.attribvalue+=this.getSlice(e,t)}onattribentity(e){this.attribvalue+=Lo(e)}onattribend(e,t){var n,r;this.endIndex=t,null===(r=(n=this.cbs).onattribute)||void 0===r||r.call(n,this.attribname,this.attribvalue,e===Vl.Double?'"':e===Vl.Single?"'":e===Vl.NoValue?void 0:null),this.attribs&&!Object.prototype.hasOwnProperty.call(this.attribs,this.attribname)&&(this.attribs[this.attribname]=this.attribvalue),this.attribvalue=""}getInstructionName(e){const t=e.search(ch);let n=t<0?e:e.substr(0,t);return this.lowerCaseTagNames&&(n=n.toLowerCase()),n}ondeclaration(e,t){this.endIndex=t;const n=this.getSlice(e,t);if(this.cbs.onprocessinginstruction){const e=this.getInstructionName(n);this.cbs.onprocessinginstruction(`!${e}`,`!${n}`)}this.startIndex=t+1}onprocessinginstruction(e,t){this.endIndex=t;const n=this.getSlice(e,t);if(this.cbs.onprocessinginstruction){const e=this.getInstructionName(n);this.cbs.onprocessinginstruction(`?${e}`,`?${n}`)}this.startIndex=t+1}oncomment(e,t,n){var r,i,s,a;this.endIndex=t,null===(i=(r=this.cbs).oncomment)||void 0===i||i.call(r,this.getSlice(e,t-n)),null===(a=(s=this.cbs).oncommentend)||void 0===a||a.call(s),this.startIndex=t+1}oncdata(e,t,n){var r,i,s,a,o,c,l,h,u,p;this.endIndex=t;const f=this.getSlice(e,t-n);this.options.xmlMode||this.options.recognizeCDATA?(null===(i=(r=this.cbs).oncdatastart)||void 0===i||i.call(r),null===(a=(s=this.cbs).ontext)||void 0===a||a.call(s,f),null===(c=(o=this.cbs).oncdataend)||void 0===c||c.call(o)):(null===(h=(l=this.cbs).oncomment)||void 0===h||h.call(l,`[CDATA[${f}]]`),null===(p=(u=this.cbs).oncommentend)||void 0===p||p.call(u)),this.startIndex=t+1}onend(){var e,t;if(this.cbs.onclosetag){this.endIndex=this.startIndex;for(let e=this.stack.length;e>0;this.cbs.onclosetag(this.stack[--e],!0));}null===(t=(e=this.cbs).onend)||void 0===t||t.call(e)}reset(){var e,t,n,r;null===(t=(e=this.cbs).onreset)||void 0===t||t.call(e),this.tokenizer.reset(),this.tagname="",this.attribname="",this.attribs=null,this.stack.length=0,this.startIndex=0,this.endIndex=0,null===(r=(n=this.cbs).onparserinit)||void 0===r||r.call(n,this),this.buffers.length=0,this.bufferOffset=0,this.writeIndex=0,this.ended=!1}parseComplete(e){this.reset(),this.end(e)}getSlice(e,t){for(;e-this.bufferOffset>=this.buffers[0].length;)this.shiftBuffer();let n=this.buffers[0].slice(e-this.bufferOffset,t-this.bufferOffset);for(;t-this.bufferOffset>this.buffers[0].length;)this.shiftBuffer(),n+=this.buffers[0].slice(0,t-this.bufferOffset);return n}shiftBuffer(){this.bufferOffset+=this.buffers[0].length,this.writeIndex--,this.buffers.shift()}write(e){var t,n;this.ended?null===(n=(t=this.cbs).onerror)||void 0===n||n.call(t,new Error(".write() after done!")):(this.buffers.push(e),this.tokenizer.running&&(this.tokenizer.write(e),this.writeIndex++))}end(e){var t,n;this.ended?null===(n=(t=this.cbs).onerror)||void 0===n||n.call(t,Error(".end() after done!")):(e&&this.write(e),this.ended=!0,this.tokenizer.end())}pause(){this.tokenizer.pause()}resume(){for(this.tokenizer.resume();this.tokenizer.running&&this.writeIndex>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8); + } + } else { + // Copy one word at a time + for (var j = 0; j < thatSigBytes; j += 4) { + thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2]; + } + } + this.sigBytes += thatSigBytes; + + // Chainable + return this; + }, + + /** + * Removes insignificant bits. + * + * @example + * + * wordArray.clamp(); + */ + clamp: function () { + // Shortcuts + var words = this.words; + var sigBytes = this.sigBytes; + + // Clamp + words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8); + words.length = Math.ceil(sigBytes / 4); + }, + + /** + * Creates a copy of this word array. + * + * @return {WordArray} The clone. + * + * @example + * + * var clone = wordArray.clone(); + */ + clone: function () { + var clone = Base.clone.call(this); + clone.words = this.words.slice(0); + + return clone; + }, + + /** + * Creates a word array filled with random bytes. + * + * @param {number} nBytes The number of random bytes to generate. + * + * @return {WordArray} The random word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.lib.WordArray.random(16); + */ + random: function (nBytes) { + var words = []; + + for (var i = 0; i < nBytes; i += 4) { + words.push(cryptoSecureRandomInt()); + } + + return new WordArray.init(words, nBytes); + } + }); + + /** + * Encoder namespace. + */ + var C_enc = C.enc = {}; + + /** + * Hex encoding strategy. + */ + var Hex = C_enc.Hex = { + /** + * Converts a word array to a hex string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The hex string. + * + * @static + * + * @example + * + * var hexString = CryptoJS.enc.Hex.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + + // Convert + var hexChars = []; + for (var i = 0; i < sigBytes; i++) { + var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + hexChars.push((bite >>> 4).toString(16)); + hexChars.push((bite & 0x0f).toString(16)); + } + + return hexChars.join(''); + }, + + /** + * Converts a hex string to a word array. + * + * @param {string} hexStr The hex string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Hex.parse(hexString); + */ + parse: function (hexStr) { + // Shortcut + var hexStrLength = hexStr.length; + + // Convert + var words = []; + for (var i = 0; i < hexStrLength; i += 2) { + words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4); + } + + return new WordArray.init(words, hexStrLength / 2); + } + }; + + /** + * Latin1 encoding strategy. + */ + var Latin1 = C_enc.Latin1 = { + /** + * Converts a word array to a Latin1 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The Latin1 string. + * + * @static + * + * @example + * + * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + + // Convert + var latin1Chars = []; + for (var i = 0; i < sigBytes; i++) { + var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + latin1Chars.push(String.fromCharCode(bite)); + } + + return latin1Chars.join(''); + }, + + /** + * Converts a Latin1 string to a word array. + * + * @param {string} latin1Str The Latin1 string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Latin1.parse(latin1String); + */ + parse: function (latin1Str) { + // Shortcut + var latin1StrLength = latin1Str.length; + + // Convert + var words = []; + for (var i = 0; i < latin1StrLength; i++) { + words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8); + } + + return new WordArray.init(words, latin1StrLength); + } + }; + + /** + * UTF-8 encoding strategy. + */ + var Utf8 = C_enc.Utf8 = { + /** + * Converts a word array to a UTF-8 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The UTF-8 string. + * + * @static + * + * @example + * + * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); + */ + stringify: function (wordArray) { + try { + return decodeURIComponent(escape(Latin1.stringify(wordArray))); + } catch (e) { + throw new Error('Malformed UTF-8 data'); + } + }, + + /** + * Converts a UTF-8 string to a word array. + * + * @param {string} utf8Str The UTF-8 string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Utf8.parse(utf8String); + */ + parse: function (utf8Str) { + return Latin1.parse(unescape(encodeURIComponent(utf8Str))); + } + }; + + /** + * Abstract buffered block algorithm template. + * + * The property blockSize must be implemented in a concrete subtype. + * + * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0 + */ + var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({ + /** + * Resets this block algorithm's data buffer to its initial state. + * + * @example + * + * bufferedBlockAlgorithm.reset(); + */ + reset: function () { + // Initial values + this._data = new WordArray.init(); + this._nDataBytes = 0; + }, + + /** + * Adds new data to this block algorithm's buffer. + * + * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8. + * + * @example + * + * bufferedBlockAlgorithm._append('data'); + * bufferedBlockAlgorithm._append(wordArray); + */ + _append: function (data) { + // Convert string to WordArray, else assume WordArray already + if (typeof data == 'string') { + data = Utf8.parse(data); + } + + // Append + this._data.concat(data); + this._nDataBytes += data.sigBytes; + }, + + /** + * Processes available data blocks. + * + * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype. + * + * @param {boolean} doFlush Whether all blocks and partial blocks should be processed. + * + * @return {WordArray} The processed data. + * + * @example + * + * var processedData = bufferedBlockAlgorithm._process(); + * var processedData = bufferedBlockAlgorithm._process(!!'flush'); + */ + _process: function (doFlush) { + var processedWords; + + // Shortcuts + var data = this._data; + var dataWords = data.words; + var dataSigBytes = data.sigBytes; + var blockSize = this.blockSize; + var blockSizeBytes = blockSize * 4; + + // Count blocks ready + var nBlocksReady = dataSigBytes / blockSizeBytes; + if (doFlush) { + // Round up to include partial blocks + nBlocksReady = Math.ceil(nBlocksReady); + } else { + // Round down to include only full blocks, + // less the number of blocks that must remain in the buffer + nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0); + } + + // Count words ready + var nWordsReady = nBlocksReady * blockSize; + + // Count bytes ready + var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes); + + // Process blocks + if (nWordsReady) { + for (var offset = 0; offset < nWordsReady; offset += blockSize) { + // Perform concrete-algorithm logic + this._doProcessBlock(dataWords, offset); + } + + // Remove processed words + processedWords = dataWords.splice(0, nWordsReady); + data.sigBytes -= nBytesReady; + } + + // Return processed words + return new WordArray.init(processedWords, nBytesReady); + }, + + /** + * Creates a copy of this object. + * + * @return {Object} The clone. + * + * @example + * + * var clone = bufferedBlockAlgorithm.clone(); + */ + clone: function () { + var clone = Base.clone.call(this); + clone._data = this._data.clone(); + + return clone; + }, + + _minBufferSize: 0 + }); + + /** + * Abstract hasher template. + * + * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits) + */ + var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({ + /** + * Configuration options. + */ + cfg: Base.extend(), + + /** + * Initializes a newly created hasher. + * + * @param {Object} cfg (Optional) The configuration options to use for this hash computation. + * + * @example + * + * var hasher = CryptoJS.algo.SHA256.create(); + */ + init: function (cfg) { + // Apply config defaults + this.cfg = this.cfg.extend(cfg); + + // Set initial values + this.reset(); + }, + + /** + * Resets this hasher to its initial state. + * + * @example + * + * hasher.reset(); + */ + reset: function () { + // Reset data buffer + BufferedBlockAlgorithm.reset.call(this); + + // Perform concrete-hasher logic + this._doReset(); + }, + + /** + * Updates this hasher with a message. + * + * @param {WordArray|string} messageUpdate The message to append. + * + * @return {Hasher} This hasher. + * + * @example + * + * hasher.update('message'); + * hasher.update(wordArray); + */ + update: function (messageUpdate) { + // Append + this._append(messageUpdate); + + // Update the hash + this._process(); + + // Chainable + return this; + }, + + /** + * Finalizes the hash computation. + * Note that the finalize operation is effectively a destructive, read-once operation. + * + * @param {WordArray|string} messageUpdate (Optional) A final message update. + * + * @return {WordArray} The hash. + * + * @example + * + * var hash = hasher.finalize(); + * var hash = hasher.finalize('message'); + * var hash = hasher.finalize(wordArray); + */ + finalize: function (messageUpdate) { + // Final message update + if (messageUpdate) { + this._append(messageUpdate); + } + + // Perform concrete-hasher logic + var hash = this._doFinalize(); + + return hash; + }, + + blockSize: 512/32, + + /** + * Creates a shortcut function to a hasher's object interface. + * + * @param {Hasher} hasher The hasher to create a helper for. + * + * @return {Function} The shortcut function. + * + * @static + * + * @example + * + * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256); + */ + _createHelper: function (hasher) { + return function (message, cfg) { + return new hasher.init(cfg).finalize(message); + }; + }, + + /** + * Creates a shortcut function to the HMAC's object interface. + * + * @param {Hasher} hasher The hasher to use in this HMAC helper. + * + * @return {Function} The shortcut function. + * + * @static + * + * @example + * + * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256); + */ + _createHmacHelper: function (hasher) { + return function (message, key) { + return new C_algo.HMAC.init(hasher, key).finalize(message); + }; + } + }); + + /** + * Algorithm namespace. + */ + var C_algo = C.algo = {}; + + return C; + }(Math)); + + + (function (undefined) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var Base = C_lib.Base; + var X32WordArray = C_lib.WordArray; + + /** + * x64 namespace. + */ + var C_x64 = C.x64 = {}; + + /** + * A 64-bit word. + */ + var X64Word = C_x64.Word = Base.extend({ + /** + * Initializes a newly created 64-bit word. + * + * @param {number} high The high 32 bits. + * @param {number} low The low 32 bits. + * + * @example + * + * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607); + */ + init: function (high, low) { + this.high = high; + this.low = low; + } + + /** + * Bitwise NOTs this word. + * + * @return {X64Word} A new x64-Word object after negating. + * + * @example + * + * var negated = x64Word.not(); + */ + // not: function () { + // var high = ~this.high; + // var low = ~this.low; + + // return X64Word.create(high, low); + // }, + + /** + * Bitwise ANDs this word with the passed word. + * + * @param {X64Word} word The x64-Word to AND with this word. + * + * @return {X64Word} A new x64-Word object after ANDing. + * + * @example + * + * var anded = x64Word.and(anotherX64Word); + */ + // and: function (word) { + // var high = this.high & word.high; + // var low = this.low & word.low; + + // return X64Word.create(high, low); + // }, + + /** + * Bitwise ORs this word with the passed word. + * + * @param {X64Word} word The x64-Word to OR with this word. + * + * @return {X64Word} A new x64-Word object after ORing. + * + * @example + * + * var ored = x64Word.or(anotherX64Word); + */ + // or: function (word) { + // var high = this.high | word.high; + // var low = this.low | word.low; + + // return X64Word.create(high, low); + // }, + + /** + * Bitwise XORs this word with the passed word. + * + * @param {X64Word} word The x64-Word to XOR with this word. + * + * @return {X64Word} A new x64-Word object after XORing. + * + * @example + * + * var xored = x64Word.xor(anotherX64Word); + */ + // xor: function (word) { + // var high = this.high ^ word.high; + // var low = this.low ^ word.low; + + // return X64Word.create(high, low); + // }, + + /** + * Shifts this word n bits to the left. + * + * @param {number} n The number of bits to shift. + * + * @return {X64Word} A new x64-Word object after shifting. + * + * @example + * + * var shifted = x64Word.shiftL(25); + */ + // shiftL: function (n) { + // if (n < 32) { + // var high = (this.high << n) | (this.low >>> (32 - n)); + // var low = this.low << n; + // } else { + // var high = this.low << (n - 32); + // var low = 0; + // } + + // return X64Word.create(high, low); + // }, + + /** + * Shifts this word n bits to the right. + * + * @param {number} n The number of bits to shift. + * + * @return {X64Word} A new x64-Word object after shifting. + * + * @example + * + * var shifted = x64Word.shiftR(7); + */ + // shiftR: function (n) { + // if (n < 32) { + // var low = (this.low >>> n) | (this.high << (32 - n)); + // var high = this.high >>> n; + // } else { + // var low = this.high >>> (n - 32); + // var high = 0; + // } + + // return X64Word.create(high, low); + // }, + + /** + * Rotates this word n bits to the left. + * + * @param {number} n The number of bits to rotate. + * + * @return {X64Word} A new x64-Word object after rotating. + * + * @example + * + * var rotated = x64Word.rotL(25); + */ + // rotL: function (n) { + // return this.shiftL(n).or(this.shiftR(64 - n)); + // }, + + /** + * Rotates this word n bits to the right. + * + * @param {number} n The number of bits to rotate. + * + * @return {X64Word} A new x64-Word object after rotating. + * + * @example + * + * var rotated = x64Word.rotR(7); + */ + // rotR: function (n) { + // return this.shiftR(n).or(this.shiftL(64 - n)); + // }, + + /** + * Adds this word with the passed word. + * + * @param {X64Word} word The x64-Word to add with this word. + * + * @return {X64Word} A new x64-Word object after adding. + * + * @example + * + * var added = x64Word.add(anotherX64Word); + */ + // add: function (word) { + // var low = (this.low + word.low) | 0; + // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0; + // var high = (this.high + word.high + carry) | 0; + + // return X64Word.create(high, low); + // } + }); + + /** + * An array of 64-bit words. + * + * @property {Array} words The array of CryptoJS.x64.Word objects. + * @property {number} sigBytes The number of significant bytes in this word array. + */ + var X64WordArray = C_x64.WordArray = Base.extend({ + /** + * Initializes a newly created word array. + * + * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects. + * @param {number} sigBytes (Optional) The number of significant bytes in the words. + * + * @example + * + * var wordArray = CryptoJS.x64.WordArray.create(); + * + * var wordArray = CryptoJS.x64.WordArray.create([ + * CryptoJS.x64.Word.create(0x00010203, 0x04050607), + * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) + * ]); + * + * var wordArray = CryptoJS.x64.WordArray.create([ + * CryptoJS.x64.Word.create(0x00010203, 0x04050607), + * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) + * ], 10); + */ + init: function (words, sigBytes) { + words = this.words = words || []; + + if (sigBytes != undefined) { + this.sigBytes = sigBytes; + } else { + this.sigBytes = words.length * 8; + } + }, + + /** + * Converts this 64-bit word array to a 32-bit word array. + * + * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array. + * + * @example + * + * var x32WordArray = x64WordArray.toX32(); + */ + toX32: function () { + // Shortcuts + var x64Words = this.words; + var x64WordsLength = x64Words.length; + + // Convert + var x32Words = []; + for (var i = 0; i < x64WordsLength; i++) { + var x64Word = x64Words[i]; + x32Words.push(x64Word.high); + x32Words.push(x64Word.low); + } + + return X32WordArray.create(x32Words, this.sigBytes); + }, + + /** + * Creates a copy of this word array. + * + * @return {X64WordArray} The clone. + * + * @example + * + * var clone = x64WordArray.clone(); + */ + clone: function () { + var clone = Base.clone.call(this); + + // Clone "words" array + var words = clone.words = this.words.slice(0); + + // Clone each X64Word object + var wordsLength = words.length; + for (var i = 0; i < wordsLength; i++) { + words[i] = words[i].clone(); + } + + return clone; + } + }); + }()); + + + (function () { + // Check if typed arrays are supported + if (typeof ArrayBuffer != 'function') { + return; + } + + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + + // Reference original init + var superInit = WordArray.init; + + // Augment WordArray.init to handle typed arrays + var subInit = WordArray.init = function (typedArray) { + // Convert buffers to uint8 + if (typedArray instanceof ArrayBuffer) { + typedArray = new Uint8Array(typedArray); + } + + // Convert other array views to uint8 + if ( + typedArray instanceof Int8Array || + (typeof Uint8ClampedArray !== "undefined" && typedArray instanceof Uint8ClampedArray) || + typedArray instanceof Int16Array || + typedArray instanceof Uint16Array || + typedArray instanceof Int32Array || + typedArray instanceof Uint32Array || + typedArray instanceof Float32Array || + typedArray instanceof Float64Array + ) { + typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength); + } + + // Handle Uint8Array + if (typedArray instanceof Uint8Array) { + // Shortcut + var typedArrayByteLength = typedArray.byteLength; + + // Extract bytes + var words = []; + for (var i = 0; i < typedArrayByteLength; i++) { + words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8); + } + + // Initialize this word array + superInit.call(this, words, typedArrayByteLength); + } else { + // Else call normal init + superInit.apply(this, arguments); + } + }; + + subInit.prototype = WordArray; + }()); + + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var C_enc = C.enc; + + /** + * UTF-16 BE encoding strategy. + */ + var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = { + /** + * Converts a word array to a UTF-16 BE string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The UTF-16 BE string. + * + * @static + * + * @example + * + * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + + // Convert + var utf16Chars = []; + for (var i = 0; i < sigBytes; i += 2) { + var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff; + utf16Chars.push(String.fromCharCode(codePoint)); + } + + return utf16Chars.join(''); + }, + + /** + * Converts a UTF-16 BE string to a word array. + * + * @param {string} utf16Str The UTF-16 BE string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Utf16.parse(utf16String); + */ + parse: function (utf16Str) { + // Shortcut + var utf16StrLength = utf16Str.length; + + // Convert + var words = []; + for (var i = 0; i < utf16StrLength; i++) { + words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16); + } + + return WordArray.create(words, utf16StrLength * 2); + } + }; + + /** + * UTF-16 LE encoding strategy. + */ + C_enc.Utf16LE = { + /** + * Converts a word array to a UTF-16 LE string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The UTF-16 LE string. + * + * @static + * + * @example + * + * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + + // Convert + var utf16Chars = []; + for (var i = 0; i < sigBytes; i += 2) { + var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff); + utf16Chars.push(String.fromCharCode(codePoint)); + } + + return utf16Chars.join(''); + }, + + /** + * Converts a UTF-16 LE string to a word array. + * + * @param {string} utf16Str The UTF-16 LE string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str); + */ + parse: function (utf16Str) { + // Shortcut + var utf16StrLength = utf16Str.length; + + // Convert + var words = []; + for (var i = 0; i < utf16StrLength; i++) { + words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16)); + } + + return WordArray.create(words, utf16StrLength * 2); + } + }; + + function swapEndian(word) { + return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff); + } + }()); + + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var C_enc = C.enc; + + /** + * Base64 encoding strategy. + */ + var Base64 = C_enc.Base64 = { + /** + * Converts a word array to a Base64 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The Base64 string. + * + * @static + * + * @example + * + * var base64String = CryptoJS.enc.Base64.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + var map = this._map; + + // Clamp excess bits + wordArray.clamp(); + + // Convert + var base64Chars = []; + for (var i = 0; i < sigBytes; i += 3) { + var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff; + var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff; + + var triplet = (byte1 << 16) | (byte2 << 8) | byte3; + + for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) { + base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f)); + } + } + + // Add padding + var paddingChar = map.charAt(64); + if (paddingChar) { + while (base64Chars.length % 4) { + base64Chars.push(paddingChar); + } + } + + return base64Chars.join(''); + }, + + /** + * Converts a Base64 string to a word array. + * + * @param {string} base64Str The Base64 string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Base64.parse(base64String); + */ + parse: function (base64Str) { + // Shortcuts + var base64StrLength = base64Str.length; + var map = this._map; + var reverseMap = this._reverseMap; + + if (!reverseMap) { + reverseMap = this._reverseMap = []; + for (var j = 0; j < map.length; j++) { + reverseMap[map.charCodeAt(j)] = j; + } + } + + // Ignore padding + var paddingChar = map.charAt(64); + if (paddingChar) { + var paddingIndex = base64Str.indexOf(paddingChar); + if (paddingIndex !== -1) { + base64StrLength = paddingIndex; + } + } + + // Convert + return parseLoop(base64Str, base64StrLength, reverseMap); + + }, + + _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' + }; + + function parseLoop(base64Str, base64StrLength, reverseMap) { + var words = []; + var nBytes = 0; + for (var i = 0; i < base64StrLength; i++) { + if (i % 4) { + var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2); + var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2); + var bitsCombined = bits1 | bits2; + words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8); + nBytes++; + } + } + return WordArray.create(words, nBytes); + } + }()); + + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var C_enc = C.enc; + + /** + * Base64url encoding strategy. + */ + var Base64url = C_enc.Base64url = { + /** + * Converts a word array to a Base64url string. + * + * @param {WordArray} wordArray The word array. + * + * @param {boolean} urlSafe Whether to use url safe + * + * @return {string} The Base64url string. + * + * @static + * + * @example + * + * var base64String = CryptoJS.enc.Base64url.stringify(wordArray); + */ + stringify: function (wordArray, urlSafe=true) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + var map = urlSafe ? this._safe_map : this._map; + + // Clamp excess bits + wordArray.clamp(); + + // Convert + var base64Chars = []; + for (var i = 0; i < sigBytes; i += 3) { + var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff; + var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff; + + var triplet = (byte1 << 16) | (byte2 << 8) | byte3; + + for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) { + base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f)); + } + } + + // Add padding + var paddingChar = map.charAt(64); + if (paddingChar) { + while (base64Chars.length % 4) { + base64Chars.push(paddingChar); + } + } + + return base64Chars.join(''); + }, + + /** + * Converts a Base64url string to a word array. + * + * @param {string} base64Str The Base64url string. + * + * @param {boolean} urlSafe Whether to use url safe + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Base64url.parse(base64String); + */ + parse: function (base64Str, urlSafe=true) { + // Shortcuts + 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 < map.length; j++) { + reverseMap[map.charCodeAt(j)] = j; + } + } + + // Ignore padding + var paddingChar = map.charAt(64); + if (paddingChar) { + var paddingIndex = base64Str.indexOf(paddingChar); + if (paddingIndex !== -1) { + base64StrLength = paddingIndex; + } + } + + // Convert + return parseLoop(base64Str, base64StrLength, reverseMap); + + }, + + _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=', + _safe_map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_', + }; + + function parseLoop(base64Str, base64StrLength, reverseMap) { + var words = []; + var nBytes = 0; + for (var i = 0; i < base64StrLength; i++) { + if (i % 4) { + var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2); + var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2); + var bitsCombined = bits1 | bits2; + words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8); + nBytes++; + } + } + return WordArray.create(words, nBytes); + } + }()); + + (function (Math) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var Hasher = C_lib.Hasher; + var C_algo = C.algo; + + // Constants table + var T = []; + + // Compute constants + (function () { + for (var i = 0; i < 64; i++) { + T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0; + } + }()); + + /** + * MD5 hash algorithm. + */ + var MD5 = C_algo.MD5 = Hasher.extend({ + _doReset: function () { + this._hash = new WordArray.init([ + 0x67452301, 0xefcdab89, + 0x98badcfe, 0x10325476 + ]); + }, + + _doProcessBlock: function (M, offset) { + // Swap endian + for (var i = 0; i < 16; i++) { + // Shortcuts + var offset_i = offset + i; + var M_offset_i = M[offset_i]; + + M[offset_i] = ( + (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | + (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) + ); + } + + // Shortcuts + 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]; + + // Working varialbes + var a = H[0]; + var b = H[1]; + var c = H[2]; + var d = H[3]; + + // Computation + 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]); + + // Intermediate hash value + 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 () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); + + var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000); + var nBitsTotalL = nBitsTotal; + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = ( + (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) | + (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00) + ); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( + (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) | + (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00) + ); + + data.sigBytes = (dataWords.length + 1) * 4; + + // Hash final blocks + this._process(); + + // Shortcuts + var hash = this._hash; + var H = hash.words; + + // Swap endian + for (var i = 0; i < 4; i++) { + // Shortcut + var H_i = H[i]; + + H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | + (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); + } + + // Return final computed hash + 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 << s) | (n >>> (32 - s))) + b; + } + + function GG(a, b, c, d, x, s, t) { + var n = a + ((b & d) | (c & ~d)) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + function HH(a, b, c, d, x, s, t) { + var n = a + (b ^ c ^ d) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + function II(a, b, c, d, x, s, t) { + var n = a + (c ^ (b | ~d)) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.MD5('message'); + * var hash = CryptoJS.MD5(wordArray); + */ + C.MD5 = Hasher._createHelper(MD5); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacMD5(message, key); + */ + C.HmacMD5 = Hasher._createHmacHelper(MD5); + }(Math)); + + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var Hasher = C_lib.Hasher; + var C_algo = C.algo; + + // Reusable object + var W = []; + + /** + * SHA-1 hash algorithm. + */ + var SHA1 = C_algo.SHA1 = Hasher.extend({ + _doReset: function () { + this._hash = new WordArray.init([ + 0x67452301, 0xefcdab89, + 0x98badcfe, 0x10325476, + 0xc3d2e1f0 + ]); + }, + + _doProcessBlock: function (M, offset) { + // Shortcut + var H = this._hash.words; + + // Working variables + var a = H[0]; + var b = H[1]; + var c = H[2]; + var d = H[3]; + var e = H[4]; + + // Computation + 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)) + 0x5a827999; + } else if (i < 40) { + t += (b ^ c ^ d) + 0x6ed9eba1; + } else if (i < 60) { + t += ((b & c) | (b & d) | (c & d)) - 0x70e44324; + } else /* if (i < 80) */ { + t += (b ^ c ^ d) - 0x359d3e2a; + } + + e = d; + d = c; + c = (b << 30) | (b >>> 2); + b = a; + a = t; + } + + // Intermediate hash value + 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 () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; + data.sigBytes = dataWords.length * 4; + + // Hash final blocks + this._process(); + + // Return final computed hash + return this._hash; + }, + + clone: function () { + var clone = Hasher.clone.call(this); + clone._hash = this._hash.clone(); + + return clone; + } + }); + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.SHA1('message'); + * var hash = CryptoJS.SHA1(wordArray); + */ + C.SHA1 = Hasher._createHelper(SHA1); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacSHA1(message, key); + */ + C.HmacSHA1 = Hasher._createHmacHelper(SHA1); + }()); + + + (function (Math) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var Hasher = C_lib.Hasher; + var C_algo = C.algo; + + // Initialization and round constants tables + var H = []; + var K = []; + + // Compute constants + (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)) * 0x100000000) | 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++; + } + }()); + + // Reusable object + var W = []; + + /** + * SHA-256 hash algorithm. + */ + var SHA256 = C_algo.SHA256 = Hasher.extend({ + _doReset: function () { + this._hash = new WordArray.init(H.slice(0)); + }, + + _doProcessBlock: function (M, offset) { + // Shortcut + var H = this._hash.words; + + // Working variables + 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]; + + // Computation + 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; + } + + // Intermediate hash value + 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 () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; + data.sigBytes = dataWords.length * 4; + + // Hash final blocks + this._process(); + + // Return final computed hash + return this._hash; + }, + + clone: function () { + var clone = Hasher.clone.call(this); + clone._hash = this._hash.clone(); + + return clone; + } + }); + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.SHA256('message'); + * var hash = CryptoJS.SHA256(wordArray); + */ + C.SHA256 = Hasher._createHelper(SHA256); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacSHA256(message, key); + */ + C.HmacSHA256 = Hasher._createHmacHelper(SHA256); + }(Math)); + + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var C_algo = C.algo; + var SHA256 = C_algo.SHA256; + + /** + * SHA-224 hash algorithm. + */ + var SHA224 = C_algo.SHA224 = SHA256.extend({ + _doReset: function () { + this._hash = new WordArray.init([ + 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, + 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 + ]); + }, + + _doFinalize: function () { + var hash = SHA256._doFinalize.call(this); + + hash.sigBytes -= 4; + + return hash; + } + }); + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.SHA224('message'); + * var hash = CryptoJS.SHA224(wordArray); + */ + C.SHA224 = SHA256._createHelper(SHA224); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacSHA224(message, key); + */ + C.HmacSHA224 = SHA256._createHmacHelper(SHA224); + }()); + + + (function () { + // Shortcuts + 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); + } + + // Constants + var K = [ + X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd), + X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc), + X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019), + X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118), + X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe), + X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2), + X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1), + X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694), + X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3), + X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65), + X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483), + X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5), + X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210), + X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4), + X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725), + X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70), + X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926), + X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df), + X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8), + X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b), + X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001), + X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30), + X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910), + X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8), + X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53), + X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8), + X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb), + X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3), + X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60), + X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec), + X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9), + X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b), + X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207), + X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178), + X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6), + X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b), + X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493), + X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c), + X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a), + X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817) + ]; + + // Reusable objects + var W = []; + (function () { + for (var i = 0; i < 80; i++) { + W[i] = X64Word_create(); + } + }()); + + /** + * SHA-512 hash algorithm. + */ + var SHA512 = C_algo.SHA512 = Hasher.extend({ + _doReset: function () { + this._hash = new X64WordArray.init([ + new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b), + new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1), + new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f), + new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179) + ]); + }, + + _doProcessBlock: function (M, offset) { + // Shortcuts + 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; + + // Working variables + 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; + + // Rounds + for (var i = 0; i < 80; i++) { + var Wil; + var Wih; + + // Shortcut + var Wi = W[i]; + + // Extend message + if (i < 16) { + Wih = Wi.high = M[offset + i * 2] | 0; + Wil = Wi.low = M[offset + i * 2 + 1] | 0; + } else { + // Gamma0 + 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)); + + // Gamma1 + 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)); + + // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16] + 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) < (gamma0l >>> 0) ? 1 : 0); + Wil = Wil + gamma1l; + Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0); + Wil = Wil + Wi16l; + Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0); + + Wi.high = Wih; + Wi.low = Wil; + } + + var chh = (eh & fh) ^ (~eh & gh); + var chl = (el & fl) ^ (~el & gl); + 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)); + + // t1 = h + sigma1 + ch + K[i] + W[i] + var Ki = K[i]; + var Kih = Ki.high; + var Kil = Ki.low; + + var t1l = hl + sigma1l; + var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0); + var t1l = t1l + chl; + var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0); + var t1l = t1l + Kil; + var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0); + var t1l = t1l + Wil; + var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0); + + // t2 = sigma0 + maj + var t2l = sigma0l + majl; + var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0); + + // Update working variables + hh = gh; + hl = gl; + gh = fh; + gl = fl; + fh = eh; + fl = el; + el = (dl + t1l) | 0; + eh = (dh + t1h + ((el >>> 0) < (dl >>> 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) < (t1l >>> 0) ? 1 : 0)) | 0; + } + + // Intermediate hash value + H0l = H0.low = (H0l + al); + H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0)); + H1l = H1.low = (H1l + bl); + H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0)); + H2l = H2.low = (H2l + cl); + H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0)); + H3l = H3.low = (H3l + dl); + H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0)); + H4l = H4.low = (H4l + el); + H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0)); + H5l = H5.low = (H5l + fl); + H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0)); + H6l = H6.low = (H6l + gl); + H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0)); + H7l = H7.low = (H7l + hl); + H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0)); + }, + + _doFinalize: function () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); + dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000); + dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal; + data.sigBytes = dataWords.length * 4; + + // Hash final blocks + this._process(); + + // Convert hash to 32-bit word array before returning + var hash = this._hash.toX32(); + + // Return final computed hash + return hash; + }, + + clone: function () { + var clone = Hasher.clone.call(this); + clone._hash = this._hash.clone(); + + return clone; + }, + + blockSize: 1024/32 + }); + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.SHA512('message'); + * var hash = CryptoJS.SHA512(wordArray); + */ + C.SHA512 = Hasher._createHelper(SHA512); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacSHA512(message, key); + */ + C.HmacSHA512 = Hasher._createHmacHelper(SHA512); + }()); + + + (function () { + // Shortcuts + 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; + + /** + * SHA-384 hash algorithm. + */ + var SHA384 = C_algo.SHA384 = SHA512.extend({ + _doReset: function () { + this._hash = new X64WordArray.init([ + new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507), + new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939), + new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511), + new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4) + ]); + }, + + _doFinalize: function () { + var hash = SHA512._doFinalize.call(this); + + hash.sigBytes -= 16; + + return hash; + } + }); + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.SHA384('message'); + * var hash = CryptoJS.SHA384(wordArray); + */ + C.SHA384 = SHA512._createHelper(SHA384); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacSHA384(message, key); + */ + C.HmacSHA384 = SHA512._createHmacHelper(SHA384); + }()); + + + (function (Math) { + // Shortcuts + 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; + + // Constants tables + var RHO_OFFSETS = []; + var PI_INDEXES = []; + var ROUND_CONSTANTS = []; + + // Compute Constants + (function () { + // Compute rho offset constants + 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; + } + + // Compute pi index constants + 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; + } + } + + // Compute round constants + var LFSR = 0x01; + for (var i = 0; i < 24; i++) { + var roundConstantMsw = 0; + var roundConstantLsw = 0; + + for (var j = 0; j < 7; j++) { + if (LFSR & 0x01) { + var bitPosition = (1 << j) - 1; + if (bitPosition < 32) { + roundConstantLsw ^= 1 << bitPosition; + } else /* if (bitPosition >= 32) */ { + roundConstantMsw ^= 1 << (bitPosition - 32); + } + } + + // Compute next LFSR + if (LFSR & 0x80) { + // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1 + LFSR = (LFSR << 1) ^ 0x71; + } else { + LFSR <<= 1; + } + } + + ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw); + } + }()); + + // Reusable objects for temporary values + var T = []; + (function () { + for (var i = 0; i < 25; i++) { + T[i] = X64Word.create(); + } + }()); + + /** + * SHA-3 hash algorithm. + */ + var SHA3 = C_algo.SHA3 = Hasher.extend({ + /** + * Configuration options. + * + * @property {number} outputLength + * The desired number of bits in the output hash. + * Only values permitted are: 224, 256, 384, 512. + * Default: 512 + */ + cfg: Hasher.cfg.extend({ + outputLength: 512 + }), + + _doReset: function () { + var state = this._state = [] + for (var i = 0; i < 25; i++) { + state[i] = new X64Word.init(); + } + + this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32; + }, + + _doProcessBlock: function (M, offset) { + // Shortcuts + var state = this._state; + var nBlockSizeLanes = this.blockSize / 2; + + // Absorb + for (var i = 0; i < nBlockSizeLanes; i++) { + // Shortcuts + var M2i = M[offset + 2 * i]; + var M2i1 = M[offset + 2 * i + 1]; + + // Swap endian + M2i = ( + (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) | + (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00) + ); + M2i1 = ( + (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) | + (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00) + ); + + // Absorb message into state + var lane = state[i]; + lane.high ^= M2i1; + lane.low ^= M2i; + } + + // Rounds + for (var round = 0; round < 24; round++) { + // Theta + for (var x = 0; x < 5; x++) { + // Mix column lanes + var tMsw = 0, tLsw = 0; + for (var y = 0; y < 5; y++) { + var lane = state[x + 5 * y]; + tMsw ^= lane.high; + tLsw ^= lane.low; + } + + // Temporary values + var Tx = T[x]; + Tx.high = tMsw; + Tx.low = tLsw; + } + for (var x = 0; x < 5; x++) { + // Shortcuts + var Tx4 = T[(x + 4) % 5]; + var Tx1 = T[(x + 1) % 5]; + var Tx1Msw = Tx1.high; + var Tx1Lsw = Tx1.low; + + // Mix surrounding columns + 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; + } + } + + // Rho Pi + for (var laneIndex = 1; laneIndex < 25; laneIndex++) { + var tMsw; + var tLsw; + + // Shortcuts + var lane = state[laneIndex]; + var laneMsw = lane.high; + var laneLsw = lane.low; + var rhoOffset = RHO_OFFSETS[laneIndex]; + + // Rotate lanes + if (rhoOffset < 32) { + tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset)); + tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset)); + } else /* if (rhoOffset >= 32) */ { + tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset)); + tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset)); + } + + // Transpose lanes + var TPiLane = T[PI_INDEXES[laneIndex]]; + TPiLane.high = tMsw; + TPiLane.low = tLsw; + } + + // Rho pi at x = y = 0 + var T0 = T[0]; + var state0 = state[0]; + T0.high = state0.high; + T0.low = state0.low; + + // Chi + for (var x = 0; x < 5; x++) { + for (var y = 0; y < 5; y++) { + // Shortcuts + 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]; + + // Mix rows + lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high); + lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low); + } + } + + // Iota + var lane = state[0]; + var roundConstant = ROUND_CONSTANTS[round]; + lane.high ^= roundConstant.high; + lane.low ^= roundConstant.low; + } + }, + + _doFinalize: function () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + var blockSizeBits = this.blockSize * 32; + + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32); + dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80; + data.sigBytes = dataWords.length * 4; + + // Hash final blocks + this._process(); + + // Shortcuts + var state = this._state; + var outputLengthBytes = this.cfg.outputLength / 8; + var outputLengthLanes = outputLengthBytes / 8; + + // Squeeze + var hashWords = []; + for (var i = 0; i < outputLengthLanes; i++) { + // Shortcuts + var lane = state[i]; + var laneMsw = lane.high; + var laneLsw = lane.low; + + // Swap endian + laneMsw = ( + (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) | + (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00) + ); + laneLsw = ( + (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) | + (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00) + ); + + // Squeeze state to retrieve hash + hashWords.push(laneLsw); + hashWords.push(laneMsw); + } + + // Return final computed hash + 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; + } + }); + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.SHA3('message'); + * var hash = CryptoJS.SHA3(wordArray); + */ + C.SHA3 = Hasher._createHelper(SHA3); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacSHA3(message, key); + */ + C.HmacSHA3 = Hasher._createHmacHelper(SHA3); + }(Math)); + + + /** @preserve + (c) 2012 by Cédric Mesnil. All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + (function (Math) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var Hasher = C_lib.Hasher; + var C_algo = C.algo; + + // Constants table + 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([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]); + var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]); + + /** + * RIPEMD160 hash algorithm. + */ + var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({ + _doReset: function () { + this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]); + }, + + _doProcessBlock: function (M, offset) { + + // Swap endian + for (var i = 0; i < 16; i++) { + // Shortcuts + var offset_i = offset + i; + var M_offset_i = M[offset_i]; + + // Swap + M[offset_i] = ( + (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | + (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) + ); + } + // Shortcut + 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; + + // Working variables + 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]; + // Computation + 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 {// if (i<80) { + 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 {// if (i<80) { + 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; + } + // Intermediate hash value + 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 () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( + (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) | + (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00) + ); + data.sigBytes = (dataWords.length + 1) * 4; + + // Hash final blocks + this._process(); + + // Shortcuts + var hash = this._hash; + var H = hash.words; + + // Swap endian + for (var i = 0; i < 5; i++) { + // Shortcut + var H_i = H[i]; + + // Swap + H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | + (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); + } + + // Return final computed hash + 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)); + } + + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.RIPEMD160('message'); + * var hash = CryptoJS.RIPEMD160(wordArray); + */ + C.RIPEMD160 = Hasher._createHelper(RIPEMD160); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacRIPEMD160(message, key); + */ + C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160); + }(Math)); + + + (function () { + // Shortcuts + 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; + + /** + * HMAC algorithm. + */ + var HMAC = C_algo.HMAC = Base.extend({ + /** + * Initializes a newly created HMAC. + * + * @param {Hasher} hasher The hash algorithm to use. + * @param {WordArray|string} key The secret key. + * + * @example + * + * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key); + */ + init: function (hasher, key) { + // Init hasher + hasher = this._hasher = new hasher.init(); + + // Convert string to WordArray, else assume WordArray already + if (typeof key == 'string') { + key = Utf8.parse(key); + } + + // Shortcuts + var hasherBlockSize = hasher.blockSize; + var hasherBlockSizeBytes = hasherBlockSize * 4; + + // Allow arbitrary length keys + if (key.sigBytes > hasherBlockSizeBytes) { + key = hasher.finalize(key); + } + + // Clamp excess bits + key.clamp(); + + // Clone key for inner and outer pads + var oKey = this._oKey = key.clone(); + var iKey = this._iKey = key.clone(); + + // Shortcuts + var oKeyWords = oKey.words; + var iKeyWords = iKey.words; + + // XOR keys with pad constants + for (var i = 0; i < hasherBlockSize; i++) { + oKeyWords[i] ^= 0x5c5c5c5c; + iKeyWords[i] ^= 0x36363636; + } + oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes; + + // Set initial values + this.reset(); + }, + + /** + * Resets this HMAC to its initial state. + * + * @example + * + * hmacHasher.reset(); + */ + reset: function () { + // Shortcut + var hasher = this._hasher; + + // Reset + hasher.reset(); + hasher.update(this._iKey); + }, + + /** + * Updates this HMAC with a message. + * + * @param {WordArray|string} messageUpdate The message to append. + * + * @return {HMAC} This HMAC instance. + * + * @example + * + * hmacHasher.update('message'); + * hmacHasher.update(wordArray); + */ + update: function (messageUpdate) { + this._hasher.update(messageUpdate); + + // Chainable + return this; + }, + + /** + * Finalizes the HMAC computation. + * Note that the finalize operation is effectively a destructive, read-once operation. + * + * @param {WordArray|string} messageUpdate (Optional) A final message update. + * + * @return {WordArray} The HMAC. + * + * @example + * + * var hmac = hmacHasher.finalize(); + * var hmac = hmacHasher.finalize('message'); + * var hmac = hmacHasher.finalize(wordArray); + */ + finalize: function (messageUpdate) { + // Shortcut + var hasher = this._hasher; + + // Compute HMAC + var innerHash = hasher.finalize(messageUpdate); + hasher.reset(); + var hmac = hasher.finalize(this._oKey.clone().concat(innerHash)); + + return hmac; + } + }); + }()); + + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var Base = C_lib.Base; + var WordArray = C_lib.WordArray; + var C_algo = C.algo; + var SHA1 = C_algo.SHA1; + var HMAC = C_algo.HMAC; + + /** + * Password-Based Key Derivation Function 2 algorithm. + */ + var PBKDF2 = C_algo.PBKDF2 = Base.extend({ + /** + * Configuration options. + * + * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) + * @property {Hasher} hasher The hasher to use. Default: SHA1 + * @property {number} iterations The number of iterations to perform. Default: 1 + */ + cfg: Base.extend({ + keySize: 128/32, + hasher: SHA1, + iterations: 1 + }), + + /** + * Initializes a newly created key derivation function. + * + * @param {Object} cfg (Optional) The configuration options to use for the derivation. + * + * @example + * + * var kdf = CryptoJS.algo.PBKDF2.create(); + * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 }); + * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 }); + */ + init: function (cfg) { + this.cfg = this.cfg.extend(cfg); + }, + + /** + * Computes the Password-Based Key Derivation Function 2. + * + * @param {WordArray|string} password The password. + * @param {WordArray|string} salt A salt. + * + * @return {WordArray} The derived key. + * + * @example + * + * var key = kdf.compute(password, salt); + */ + compute: function (password, salt) { + // Shortcut + var cfg = this.cfg; + + // Init HMAC + var hmac = HMAC.create(cfg.hasher, password); + + // Initial values + var derivedKey = WordArray.create(); + var blockIndex = WordArray.create([0x00000001]); + + // Shortcuts + var derivedKeyWords = derivedKey.words; + var blockIndexWords = blockIndex.words; + var keySize = cfg.keySize; + var iterations = cfg.iterations; + + // Generate key + while (derivedKeyWords.length < keySize) { + var block = hmac.update(salt).finalize(blockIndex); + hmac.reset(); + + // Shortcuts + var blockWords = block.words; + var blockWordsLength = blockWords.length; + + // Iterations + var intermediate = block; + for (var i = 1; i < iterations; i++) { + intermediate = hmac.finalize(intermediate); + hmac.reset(); + + // Shortcut + var intermediateWords = intermediate.words; + + // XOR intermediate with block + for (var j = 0; j < blockWordsLength; j++) { + blockWords[j] ^= intermediateWords[j]; + } + } + + derivedKey.concat(block); + blockIndexWords[0]++; + } + derivedKey.sigBytes = keySize * 4; + + return derivedKey; + } + }); + + /** + * Computes the Password-Based Key Derivation Function 2. + * + * @param {WordArray|string} password The password. + * @param {WordArray|string} salt A salt. + * @param {Object} cfg (Optional) The configuration options to use for this computation. + * + * @return {WordArray} The derived key. + * + * @static + * + * @example + * + * var key = CryptoJS.PBKDF2(password, salt); + * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 }); + * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 }); + */ + C.PBKDF2 = function (password, salt, cfg) { + return PBKDF2.create(cfg).compute(password, salt); + }; + }()); + + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var Base = C_lib.Base; + var WordArray = C_lib.WordArray; + var C_algo = C.algo; + var MD5 = C_algo.MD5; + + /** + * This key derivation function is meant to conform with EVP_BytesToKey. + * www.openssl.org/docs/crypto/EVP_BytesToKey.html + */ + var EvpKDF = C_algo.EvpKDF = Base.extend({ + /** + * Configuration options. + * + * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) + * @property {Hasher} hasher The hash algorithm to use. Default: MD5 + * @property {number} iterations The number of iterations to perform. Default: 1 + */ + cfg: Base.extend({ + keySize: 128/32, + hasher: MD5, + iterations: 1 + }), + + /** + * Initializes a newly created key derivation function. + * + * @param {Object} cfg (Optional) The configuration options to use for the derivation. + * + * @example + * + * var kdf = CryptoJS.algo.EvpKDF.create(); + * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 }); + * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 }); + */ + init: function (cfg) { + this.cfg = this.cfg.extend(cfg); + }, + + /** + * Derives a key from a password. + * + * @param {WordArray|string} password The password. + * @param {WordArray|string} salt A salt. + * + * @return {WordArray} The derived key. + * + * @example + * + * var key = kdf.compute(password, salt); + */ + compute: function (password, salt) { + var block; + + // Shortcut + var cfg = this.cfg; + + // Init hasher + var hasher = cfg.hasher.create(); + + // Initial values + var derivedKey = WordArray.create(); + + // Shortcuts + var derivedKeyWords = derivedKey.words; + var keySize = cfg.keySize; + var iterations = cfg.iterations; + + // Generate key + while (derivedKeyWords.length < keySize) { + if (block) { + hasher.update(block); + } + block = hasher.update(password).finalize(salt); + hasher.reset(); + + // Iterations + for (var i = 1; i < iterations; i++) { + block = hasher.finalize(block); + hasher.reset(); + } + + derivedKey.concat(block); + } + derivedKey.sigBytes = keySize * 4; + + return derivedKey; + } + }); + + /** + * Derives a key from a password. + * + * @param {WordArray|string} password The password. + * @param {WordArray|string} salt A salt. + * @param {Object} cfg (Optional) The configuration options to use for this computation. + * + * @return {WordArray} The derived key. + * + * @static + * + * @example + * + * var key = CryptoJS.EvpKDF(password, salt); + * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 }); + * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 }); + */ + C.EvpKDF = function (password, salt, cfg) { + return EvpKDF.create(cfg).compute(password, salt); + }; + }()); + + + /** + * Cipher core components. + */ + CryptoJS.lib.Cipher || (function (undefined) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var Base = C_lib.Base; + var WordArray = C_lib.WordArray; + var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm; + var C_enc = C.enc; + var Utf8 = C_enc.Utf8; + var Base64 = C_enc.Base64; + var C_algo = C.algo; + var EvpKDF = C_algo.EvpKDF; + + /** + * Abstract base cipher template. + * + * @property {number} keySize This cipher's key size. Default: 4 (128 bits) + * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits) + * @property {number} _ENC_XFORM_MODE A constant representing encryption mode. + * @property {number} _DEC_XFORM_MODE A constant representing decryption mode. + */ + var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({ + /** + * Configuration options. + * + * @property {WordArray} iv The IV to use for this operation. + */ + cfg: Base.extend(), + + /** + * Creates this cipher in encryption mode. + * + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {Cipher} A cipher instance. + * + * @static + * + * @example + * + * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray }); + */ + createEncryptor: function (key, cfg) { + return this.create(this._ENC_XFORM_MODE, key, cfg); + }, + + /** + * Creates this cipher in decryption mode. + * + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {Cipher} A cipher instance. + * + * @static + * + * @example + * + * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray }); + */ + createDecryptor: function (key, cfg) { + return this.create(this._DEC_XFORM_MODE, key, cfg); + }, + + /** + * Initializes a newly created cipher. + * + * @param {number} xformMode Either the encryption or decryption transormation mode constant. + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @example + * + * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray }); + */ + init: function (xformMode, key, cfg) { + // Apply config defaults + this.cfg = this.cfg.extend(cfg); + + // Store transform mode and key + this._xformMode = xformMode; + this._key = key; + + // Set initial values + this.reset(); + }, + + /** + * Resets this cipher to its initial state. + * + * @example + * + * cipher.reset(); + */ + reset: function () { + // Reset data buffer + BufferedBlockAlgorithm.reset.call(this); + + // Perform concrete-cipher logic + this._doReset(); + }, + + /** + * Adds data to be encrypted or decrypted. + * + * @param {WordArray|string} dataUpdate The data to encrypt or decrypt. + * + * @return {WordArray} The data after processing. + * + * @example + * + * var encrypted = cipher.process('data'); + * var encrypted = cipher.process(wordArray); + */ + process: function (dataUpdate) { + // Append + this._append(dataUpdate); + + // Process available blocks + return this._process(); + }, + + /** + * Finalizes the encryption or decryption process. + * Note that the finalize operation is effectively a destructive, read-once operation. + * + * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt. + * + * @return {WordArray} The data after final processing. + * + * @example + * + * var encrypted = cipher.finalize(); + * var encrypted = cipher.finalize('data'); + * var encrypted = cipher.finalize(wordArray); + */ + finalize: function (dataUpdate) { + // Final data update + if (dataUpdate) { + this._append(dataUpdate); + } + + // Perform concrete-cipher logic + var finalProcessedData = this._doFinalize(); + + return finalProcessedData; + }, + + keySize: 128/32, + + ivSize: 128/32, + + _ENC_XFORM_MODE: 1, + + _DEC_XFORM_MODE: 2, + + /** + * Creates shortcut functions to a cipher's object interface. + * + * @param {Cipher} cipher The cipher to create a helper for. + * + * @return {Object} An object with encrypt and decrypt shortcut functions. + * + * @static + * + * @example + * + * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES); + */ + _createHelper: (function () { + function selectCipherStrategy(key) { + if (typeof key == 'string') { + return PasswordBasedCipher; + } else { + return SerializableCipher; + } + } + + return function (cipher) { + return { + encrypt: function (message, key, cfg) { + return selectCipherStrategy(key).encrypt(cipher, message, key, cfg); + }, + + decrypt: function (ciphertext, key, cfg) { + return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg); + } + }; + }; + }()) + }); + + /** + * Abstract base stream cipher template. + * + * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits) + */ + var StreamCipher = C_lib.StreamCipher = Cipher.extend({ + _doFinalize: function () { + // Process partial blocks + var finalProcessedBlocks = this._process(!!'flush'); + + return finalProcessedBlocks; + }, + + blockSize: 1 + }); + + /** + * Mode namespace. + */ + var C_mode = C.mode = {}; + + /** + * Abstract base block cipher mode template. + */ + var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({ + /** + * Creates this mode for encryption. + * + * @param {Cipher} cipher A block cipher instance. + * @param {Array} iv The IV words. + * + * @static + * + * @example + * + * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words); + */ + createEncryptor: function (cipher, iv) { + return this.Encryptor.create(cipher, iv); + }, + + /** + * Creates this mode for decryption. + * + * @param {Cipher} cipher A block cipher instance. + * @param {Array} iv The IV words. + * + * @static + * + * @example + * + * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words); + */ + createDecryptor: function (cipher, iv) { + return this.Decryptor.create(cipher, iv); + }, + + /** + * Initializes a newly created mode. + * + * @param {Cipher} cipher A block cipher instance. + * @param {Array} iv The IV words. + * + * @example + * + * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words); + */ + init: function (cipher, iv) { + this._cipher = cipher; + this._iv = iv; + } + }); + + /** + * Cipher Block Chaining mode. + */ + var CBC = C_mode.CBC = (function () { + /** + * Abstract base CBC mode. + */ + var CBC = BlockCipherMode.extend(); + + /** + * CBC encryptor. + */ + CBC.Encryptor = CBC.extend({ + /** + * Processes the data block at offset. + * + * @param {Array} words The data words to operate on. + * @param {number} offset The offset where the block starts. + * + * @example + * + * mode.processBlock(data.words, offset); + */ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher; + var blockSize = cipher.blockSize; + + // XOR and encrypt + xorBlock.call(this, words, offset, blockSize); + cipher.encryptBlock(words, offset); + + // Remember this block to use with next block + this._prevBlock = words.slice(offset, offset + blockSize); + } + }); + + /** + * CBC decryptor. + */ + CBC.Decryptor = CBC.extend({ + /** + * Processes the data block at offset. + * + * @param {Array} words The data words to operate on. + * @param {number} offset The offset where the block starts. + * + * @example + * + * mode.processBlock(data.words, offset); + */ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher; + var blockSize = cipher.blockSize; + + // Remember this block to use with next block + var thisBlock = words.slice(offset, offset + blockSize); + + // Decrypt and XOR + cipher.decryptBlock(words, offset); + xorBlock.call(this, words, offset, blockSize); + + // This block becomes the previous block + this._prevBlock = thisBlock; + } + }); + + function xorBlock(words, offset, blockSize) { + var block; + + // Shortcut + var iv = this._iv; + + // Choose mixing block + if (iv) { + block = iv; + + // Remove IV for subsequent blocks + this._iv = undefined; + } else { + block = this._prevBlock; + } + + // XOR blocks + for (var i = 0; i < blockSize; i++) { + words[offset + i] ^= block[i]; + } + } + + return CBC; + }()); + + /** + * Padding namespace. + */ + var C_pad = C.pad = {}; + + /** + * PKCS #5/7 padding strategy. + */ + var Pkcs7 = C_pad.Pkcs7 = { + /** + * Pads data using the algorithm defined in PKCS #5/7. + * + * @param {WordArray} data The data to pad. + * @param {number} blockSize The multiple that the data should be padded to. + * + * @static + * + * @example + * + * CryptoJS.pad.Pkcs7.pad(wordArray, 4); + */ + pad: function (data, blockSize) { + // Shortcut + var blockSizeBytes = blockSize * 4; + + // Count padding bytes + var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; + + // Create padding word + var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes; + + // Create padding + var paddingWords = []; + for (var i = 0; i < nPaddingBytes; i += 4) { + paddingWords.push(paddingWord); + } + var padding = WordArray.create(paddingWords, nPaddingBytes); + + // Add padding + data.concat(padding); + }, + + /** + * Unpads data that had been padded using the algorithm defined in PKCS #5/7. + * + * @param {WordArray} data The data to unpad. + * + * @static + * + * @example + * + * CryptoJS.pad.Pkcs7.unpad(wordArray); + */ + unpad: function (data) { + // Get number of padding bytes from last byte + var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; + + // Remove padding + data.sigBytes -= nPaddingBytes; + } + }; + + /** + * Abstract base block cipher template. + * + * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits) + */ + var BlockCipher = C_lib.BlockCipher = Cipher.extend({ + /** + * Configuration options. + * + * @property {Mode} mode The block mode to use. Default: CBC + * @property {Padding} padding The padding strategy to use. Default: Pkcs7 + */ + cfg: Cipher.cfg.extend({ + mode: CBC, + padding: Pkcs7 + }), + + reset: function () { + var modeCreator; + + // Reset cipher + Cipher.reset.call(this); + + // Shortcuts + var cfg = this.cfg; + var iv = cfg.iv; + var mode = cfg.mode; + + // Reset block mode + if (this._xformMode == this._ENC_XFORM_MODE) { + modeCreator = mode.createEncryptor; + } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { + modeCreator = mode.createDecryptor; + // Keep at least one block in the buffer for unpadding + 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; + + // Shortcut + var padding = this.cfg.padding; + + // Finalize + if (this._xformMode == this._ENC_XFORM_MODE) { + // Pad data + padding.pad(this._data, this.blockSize); + + // Process final blocks + finalProcessedBlocks = this._process(!!'flush'); + } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { + // Process final blocks + finalProcessedBlocks = this._process(!!'flush'); + + // Unpad data + padding.unpad(finalProcessedBlocks); + } + + return finalProcessedBlocks; + }, + + blockSize: 128/32 + }); + + /** + * A collection of cipher parameters. + * + * @property {WordArray} ciphertext The raw ciphertext. + * @property {WordArray} key The key to this ciphertext. + * @property {WordArray} iv The IV used in the ciphering operation. + * @property {WordArray} salt The salt used with a key derivation function. + * @property {Cipher} algorithm The cipher algorithm. + * @property {Mode} mode The block mode used in the ciphering operation. + * @property {Padding} padding The padding scheme used in the ciphering operation. + * @property {number} blockSize The block size of the cipher. + * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string. + */ + var CipherParams = C_lib.CipherParams = Base.extend({ + /** + * Initializes a newly created cipher params object. + * + * @param {Object} cipherParams An object with any of the possible cipher parameters. + * + * @example + * + * var cipherParams = CryptoJS.lib.CipherParams.create({ + * ciphertext: ciphertextWordArray, + * key: keyWordArray, + * iv: ivWordArray, + * salt: saltWordArray, + * algorithm: CryptoJS.algo.AES, + * mode: CryptoJS.mode.CBC, + * padding: CryptoJS.pad.PKCS7, + * blockSize: 4, + * formatter: CryptoJS.format.OpenSSL + * }); + */ + init: function (cipherParams) { + this.mixIn(cipherParams); + }, + + /** + * Converts this cipher params object to a string. + * + * @param {Format} formatter (Optional) The formatting strategy to use. + * + * @return {string} The stringified cipher params. + * + * @throws Error If neither the formatter nor the default formatter is set. + * + * @example + * + * var string = cipherParams + ''; + * var string = cipherParams.toString(); + * var string = cipherParams.toString(CryptoJS.format.OpenSSL); + */ + toString: function (formatter) { + return (formatter || this.formatter).stringify(this); + } + }); + + /** + * Format namespace. + */ + var C_format = C.format = {}; + + /** + * OpenSSL formatting strategy. + */ + var OpenSSLFormatter = C_format.OpenSSL = { + /** + * Converts a cipher params object to an OpenSSL-compatible string. + * + * @param {CipherParams} cipherParams The cipher params object. + * + * @return {string} The OpenSSL-compatible string. + * + * @static + * + * @example + * + * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams); + */ + stringify: function (cipherParams) { + var wordArray; + + // Shortcuts + var ciphertext = cipherParams.ciphertext; + var salt = cipherParams.salt; + + // Format + if (salt) { + wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext); + } else { + wordArray = ciphertext; + } + + return wordArray.toString(Base64); + }, + + /** + * Converts an OpenSSL-compatible string to a cipher params object. + * + * @param {string} openSSLStr The OpenSSL-compatible string. + * + * @return {CipherParams} The cipher params object. + * + * @static + * + * @example + * + * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString); + */ + parse: function (openSSLStr) { + var salt; + + // Parse base64 + var ciphertext = Base64.parse(openSSLStr); + + // Shortcut + var ciphertextWords = ciphertext.words; + + // Test for salt + if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) { + // Extract salt + salt = WordArray.create(ciphertextWords.slice(2, 4)); + + // Remove salt from ciphertext + ciphertextWords.splice(0, 4); + ciphertext.sigBytes -= 16; + } + + return CipherParams.create({ ciphertext: ciphertext, salt: salt }); + } + }; + + /** + * A cipher wrapper that returns ciphertext as a serializable cipher params object. + */ + var SerializableCipher = C_lib.SerializableCipher = Base.extend({ + /** + * Configuration options. + * + * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL + */ + cfg: Base.extend({ + format: OpenSSLFormatter + }), + + /** + * Encrypts a message. + * + * @param {Cipher} cipher The cipher algorithm to use. + * @param {WordArray|string} message The message to encrypt. + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {CipherParams} A cipher params object. + * + * @static + * + * @example + * + * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key); + * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv }); + * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL }); + */ + encrypt: function (cipher, message, key, cfg) { + // Apply config defaults + cfg = this.cfg.extend(cfg); + + // Encrypt + var encryptor = cipher.createEncryptor(key, cfg); + var ciphertext = encryptor.finalize(message); + + // Shortcut + var cipherCfg = encryptor.cfg; + + // Create and return serializable cipher params + return CipherParams.create({ + ciphertext: ciphertext, + key: key, + iv: cipherCfg.iv, + algorithm: cipher, + mode: cipherCfg.mode, + padding: cipherCfg.padding, + blockSize: cipher.blockSize, + formatter: cfg.format + }); + }, + + /** + * Decrypts serialized ciphertext. + * + * @param {Cipher} cipher The cipher algorithm to use. + * @param {CipherParams|string} ciphertext The ciphertext to decrypt. + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {WordArray} The plaintext. + * + * @static + * + * @example + * + * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL }); + * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL }); + */ + decrypt: function (cipher, ciphertext, key, cfg) { + // Apply config defaults + cfg = this.cfg.extend(cfg); + + // Convert string to CipherParams + ciphertext = this._parse(ciphertext, cfg.format); + + // Decrypt + var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext); + + return plaintext; + }, + + /** + * Converts serialized ciphertext to CipherParams, + * else assumed CipherParams already and returns ciphertext unchanged. + * + * @param {CipherParams|string} ciphertext The ciphertext. + * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext. + * + * @return {CipherParams} The unserialized ciphertext. + * + * @static + * + * @example + * + * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format); + */ + _parse: function (ciphertext, format) { + if (typeof ciphertext == 'string') { + return format.parse(ciphertext, this); + } else { + return ciphertext; + } + } + }); + + /** + * Key derivation function namespace. + */ + var C_kdf = C.kdf = {}; + + /** + * OpenSSL key derivation function. + */ + var OpenSSLKdf = C_kdf.OpenSSL = { + /** + * Derives a key and IV from a password. + * + * @param {string} password The password to derive from. + * @param {number} keySize The size in words of the key to generate. + * @param {number} ivSize The size in words of the IV to generate. + * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly. + * + * @return {CipherParams} A cipher params object with the key, IV, and salt. + * + * @static + * + * @example + * + * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32); + * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt'); + */ + execute: function (password, keySize, ivSize, salt) { + // Generate random salt + if (!salt) { + salt = WordArray.random(64/8); + } + + // Derive key and IV + var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt); + + // Separate key and IV + var iv = WordArray.create(key.words.slice(keySize), ivSize * 4); + key.sigBytes = keySize * 4; + + // Return params + return CipherParams.create({ key: key, iv: iv, salt: salt }); + } + }; + + /** + * A serializable cipher wrapper that derives the key from a password, + * and returns ciphertext as a serializable cipher params object. + */ + var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({ + /** + * Configuration options. + * + * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL + */ + cfg: SerializableCipher.cfg.extend({ + kdf: OpenSSLKdf + }), + + /** + * Encrypts a message using a password. + * + * @param {Cipher} cipher The cipher algorithm to use. + * @param {WordArray|string} message The message to encrypt. + * @param {string} password The password. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {CipherParams} A cipher params object. + * + * @static + * + * @example + * + * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password'); + * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL }); + */ + encrypt: function (cipher, message, password, cfg) { + // Apply config defaults + cfg = this.cfg.extend(cfg); + + // Derive key and other params + var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize); + + // Add IV to config + cfg.iv = derivedParams.iv; + + // Encrypt + var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg); + + // Mix in derived params + ciphertext.mixIn(derivedParams); + + return ciphertext; + }, + + /** + * Decrypts serialized ciphertext using a password. + * + * @param {Cipher} cipher The cipher algorithm to use. + * @param {CipherParams|string} ciphertext The ciphertext to decrypt. + * @param {string} password The password. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {WordArray} The plaintext. + * + * @static + * + * @example + * + * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL }); + * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL }); + */ + decrypt: function (cipher, ciphertext, password, cfg) { + // Apply config defaults + cfg = this.cfg.extend(cfg); + + // Convert string to CipherParams + ciphertext = this._parse(ciphertext, cfg.format); + + // Derive key and other params + var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt); + + // Add IV to config + cfg.iv = derivedParams.iv; + + // Decrypt + var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg); + + return plaintext; + } + }); + }()); + + + /** + * Cipher Feedback block mode. + */ + CryptoJS.mode.CFB = (function () { + var CFB = CryptoJS.lib.BlockCipherMode.extend(); + + CFB.Encryptor = CFB.extend({ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher; + var blockSize = cipher.blockSize; + + generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); + + // Remember this block to use with next block + this._prevBlock = words.slice(offset, offset + blockSize); + } + }); + + CFB.Decryptor = CFB.extend({ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher; + var blockSize = cipher.blockSize; + + // Remember this block to use with next block + var thisBlock = words.slice(offset, offset + blockSize); + + generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); + + // This block becomes the previous block + this._prevBlock = thisBlock; + } + }); + + function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) { + var keystream; + + // Shortcut + var iv = this._iv; + + // Generate keystream + if (iv) { + keystream = iv.slice(0); + + // Remove IV for subsequent blocks + this._iv = undefined; + } else { + keystream = this._prevBlock; + } + cipher.encryptBlock(keystream, 0); + + // Encrypt + for (var i = 0; i < blockSize; i++) { + words[offset + i] ^= keystream[i]; + } + } + + return CFB; + }()); + + + /** + * Counter block mode. + */ + CryptoJS.mode.CTR = (function () { + var CTR = CryptoJS.lib.BlockCipherMode.extend(); + + var Encryptor = CTR.Encryptor = CTR.extend({ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher + var blockSize = cipher.blockSize; + var iv = this._iv; + var counter = this._counter; + + // Generate keystream + if (iv) { + counter = this._counter = iv.slice(0); + + // Remove IV for subsequent blocks + this._iv = undefined; + } + var keystream = counter.slice(0); + cipher.encryptBlock(keystream, 0); + + // Increment counter + counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0 + + // Encrypt + for (var i = 0; i < blockSize; i++) { + words[offset + i] ^= keystream[i]; + } + } + }); + + CTR.Decryptor = Encryptor; + + return CTR; + }()); + + + /** @preserve + * Counter block mode compatible with Dr Brian Gladman fileenc.c + * derived from CryptoJS.mode.CTR + * Jan Hruby jhruby.web@gmail.com + */ + CryptoJS.mode.CTRGladman = (function () { + var CTRGladman = CryptoJS.lib.BlockCipherMode.extend(); + + function incWord(word) + { + if (((word >> 24) & 0xff) === 0xff) { //overflow + var b1 = (word >> 16)&0xff; + var b2 = (word >> 8)&0xff; + var b3 = word & 0xff; + + if (b1 === 0xff) // overflow b1 + { + b1 = 0; + if (b2 === 0xff) + { + b2 = 0; + if (b3 === 0xff) + { + b3 = 0; + } + else + { + ++b3; + } + } + else + { + ++b2; + } + } + else + { + ++b1; + } + + word = 0; + word += (b1 << 16); + word += (b2 << 8); + word += b3; + } + else + { + word += (0x01 << 24); + } + return word; + } + + function incCounter(counter) + { + if ((counter[0] = incWord(counter[0])) === 0) + { + // encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8 + counter[1] = incWord(counter[1]); + } + return counter; + } + + var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher + var blockSize = cipher.blockSize; + var iv = this._iv; + var counter = this._counter; + + // Generate keystream + if (iv) { + counter = this._counter = iv.slice(0); + + // Remove IV for subsequent blocks + this._iv = undefined; + } + + incCounter(counter); + + var keystream = counter.slice(0); + cipher.encryptBlock(keystream, 0); + + // Encrypt + for (var i = 0; i < blockSize; i++) { + words[offset + i] ^= keystream[i]; + } + } + }); + + CTRGladman.Decryptor = Encryptor; + + return CTRGladman; + }()); + + + + + /** + * Output Feedback block mode. + */ + CryptoJS.mode.OFB = (function () { + var OFB = CryptoJS.lib.BlockCipherMode.extend(); + + var Encryptor = OFB.Encryptor = OFB.extend({ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher + var blockSize = cipher.blockSize; + var iv = this._iv; + var keystream = this._keystream; + + // Generate keystream + if (iv) { + keystream = this._keystream = iv.slice(0); + + // Remove IV for subsequent blocks + this._iv = undefined; + } + cipher.encryptBlock(keystream, 0); + + // Encrypt + for (var i = 0; i < blockSize; i++) { + words[offset + i] ^= keystream[i]; + } + } + }); + + OFB.Decryptor = Encryptor; + + return OFB; + }()); + + + /** + * Electronic Codebook block mode. + */ + CryptoJS.mode.ECB = (function () { + var ECB = CryptoJS.lib.BlockCipherMode.extend(); + + ECB.Encryptor = ECB.extend({ + processBlock: function (words, offset) { + this._cipher.encryptBlock(words, offset); + } + }); + + ECB.Decryptor = ECB.extend({ + processBlock: function (words, offset) { + this._cipher.decryptBlock(words, offset); + } + }); + + return ECB; + }()); + + + /** + * ANSI X.923 padding strategy. + */ + CryptoJS.pad.AnsiX923 = { + pad: function (data, blockSize) { + // Shortcuts + var dataSigBytes = data.sigBytes; + var blockSizeBytes = blockSize * 4; + + // Count padding bytes + var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes; + + // Compute last byte position + var lastBytePos = dataSigBytes + nPaddingBytes - 1; + + // Pad + data.clamp(); + data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8); + data.sigBytes += nPaddingBytes; + }, + + unpad: function (data) { + // Get number of padding bytes from last byte + var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; + + // Remove padding + data.sigBytes -= nPaddingBytes; + } + }; + + + /** + * ISO 10126 padding strategy. + */ + CryptoJS.pad.Iso10126 = { + pad: function (data, blockSize) { + // Shortcut + var blockSizeBytes = blockSize * 4; + + // Count padding bytes + var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; + + // Pad + data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)). + concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1)); + }, + + unpad: function (data) { + // Get number of padding bytes from last byte + var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; + + // Remove padding + data.sigBytes -= nPaddingBytes; + } + }; + + + /** + * ISO/IEC 9797-1 Padding Method 2. + */ + CryptoJS.pad.Iso97971 = { + pad: function (data, blockSize) { + // Add 0x80 byte + data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1)); + + // Zero pad the rest + CryptoJS.pad.ZeroPadding.pad(data, blockSize); + }, + + unpad: function (data) { + // Remove zero padding + CryptoJS.pad.ZeroPadding.unpad(data); + + // Remove one more byte -- the 0x80 byte + data.sigBytes--; + } + }; + + + /** + * Zero padding strategy. + */ + CryptoJS.pad.ZeroPadding = { + pad: function (data, blockSize) { + // Shortcut + var blockSizeBytes = blockSize * 4; + + // Pad + data.clamp(); + data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes); + }, + + unpad: function (data) { + // Shortcut + var dataWords = data.words; + + // Unpad + var i = data.sigBytes - 1; + for (var i = data.sigBytes - 1; i >= 0; i--) { + if (((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) { + data.sigBytes = i + 1; + break; + } + } + } + }; + + + /** + * A noop padding strategy. + */ + CryptoJS.pad.NoPadding = { + pad: function () { + }, + + unpad: function () { + } + }; + + + (function (undefined) { + // Shortcuts + 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 = { + /** + * Converts the ciphertext of a cipher params object to a hexadecimally encoded string. + * + * @param {CipherParams} cipherParams The cipher params object. + * + * @return {string} The hexadecimally encoded string. + * + * @static + * + * @example + * + * var hexString = CryptoJS.format.Hex.stringify(cipherParams); + */ + stringify: function (cipherParams) { + return cipherParams.ciphertext.toString(Hex); + }, + + /** + * Converts a hexadecimally encoded ciphertext string to a cipher params object. + * + * @param {string} input The hexadecimally encoded string. + * + * @return {CipherParams} The cipher params object. + * + * @static + * + * @example + * + * var cipherParams = CryptoJS.format.Hex.parse(hexString); + */ + parse: function (input) { + var ciphertext = Hex.parse(input); + return CipherParams.create({ ciphertext: ciphertext }); + } + }; + }()); + + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var BlockCipher = C_lib.BlockCipher; + var C_algo = C.algo; + + // Lookup tables + 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 = []; + + // Compute lookup tables + (function () { + // Compute double table + var d = []; + for (var i = 0; i < 256; i++) { + if (i < 128) { + d[i] = i << 1; + } else { + d[i] = (i << 1) ^ 0x11b; + } + } + + // Walk GF(2^8) + var x = 0; + var xi = 0; + for (var i = 0; i < 256; i++) { + // Compute sbox + var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4); + sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63; + SBOX[x] = sx; + INV_SBOX[sx] = x; + + // Compute multiplication + var x2 = d[x]; + var x4 = d[x2]; + var x8 = d[x4]; + + // Compute sub bytes, mix columns tables + var t = (d[sx] * 0x101) ^ (sx * 0x1010100); + 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; + + // Compute inv sub bytes, inv mix columns tables + var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100); + 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; + + // Compute next counter + if (!x) { + x = xi = 1; + } else { + x = x2 ^ d[d[d[x8 ^ x2]]]; + xi ^= d[d[xi]]; + } + } + }()); + + // Precomputed Rcon lookup + var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]; + + /** + * AES block cipher algorithm. + */ + var AES = C_algo.AES = BlockCipher.extend({ + _doReset: function () { + var t; + + // Skip reset of nRounds has been set before and key did not change + if (this._nRounds && this._keyPriorReset === this._key) { + return; + } + + // Shortcuts + var key = this._keyPriorReset = this._key; + var keyWords = key.words; + var keySize = key.sigBytes / 4; + + // Compute number of rounds + var nRounds = this._nRounds = keySize + 6; + + // Compute number of key schedule rows + var ksRows = (nRounds + 1) * 4; + + // Compute key schedule + var keySchedule = this._keySchedule = []; + for (var ksRow = 0; ksRow < ksRows; ksRow++) { + if (ksRow < keySize) { + keySchedule[ksRow] = keyWords[ksRow]; + } else { + t = keySchedule[ksRow - 1]; + + if (!(ksRow % keySize)) { + // Rot word + t = (t << 8) | (t >>> 24); + + // Sub word + t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; + + // Mix Rcon + t ^= RCON[(ksRow / keySize) | 0] << 24; + } else if (keySize > 6 && ksRow % keySize == 4) { + // Sub word + t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; + } + + keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t; + } + } + + // Compute inv key schedule + var invKeySchedule = this._invKeySchedule = []; + for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) { + var ksRow = ksRows - invKsRow; + + if (invKsRow % 4) { + var t = keySchedule[ksRow]; + } else { + var t = keySchedule[ksRow - 4]; + } + + if (invKsRow < 4 || ksRow <= 4) { + invKeySchedule[invKsRow] = t; + } else { + invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^ + INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]]; + } + } + }, + + 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) { + // Swap 2nd and 4th rows + 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); + + // Inv swap 2nd and 4th rows + 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) { + // Shortcut + var nRounds = this._nRounds; + + // Get input, add round key + 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]; + + // Key schedule row counter + var ksRow = 4; + + // Rounds + for (var round = 1; round < nRounds; round++) { + // Shift rows, sub bytes, mix columns, add round key + var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++]; + var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++]; + var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++]; + var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++]; + + // Update state + s0 = t0; + s1 = t1; + s2 = t2; + s3 = t3; + } + + // Shift rows, sub bytes, add round key + var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]; + var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]; + var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]; + var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]; + + // Set output + M[offset] = t0; + M[offset + 1] = t1; + M[offset + 2] = t2; + M[offset + 3] = t3; + }, + + keySize: 256/32 + }); + + /** + * Shortcut functions to the cipher's object interface. + * + * @example + * + * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg); + * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg); + */ + C.AES = BlockCipher._createHelper(AES); + }()); + + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var BlockCipher = C_lib.BlockCipher; + var C_algo = C.algo; + + // Permuted Choice 1 constants + 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 + ]; + + // Permuted Choice 2 constants + 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 + ]; + + // Cumulative bit shift constants + var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28]; + + // SBOXes and round permutation constants + var SBOX_P = [ + { + 0x0: 0x808200, + 0x10000000: 0x8000, + 0x20000000: 0x808002, + 0x30000000: 0x2, + 0x40000000: 0x200, + 0x50000000: 0x808202, + 0x60000000: 0x800202, + 0x70000000: 0x800000, + 0x80000000: 0x202, + 0x90000000: 0x800200, + 0xa0000000: 0x8200, + 0xb0000000: 0x808000, + 0xc0000000: 0x8002, + 0xd0000000: 0x800002, + 0xe0000000: 0x0, + 0xf0000000: 0x8202, + 0x8000000: 0x0, + 0x18000000: 0x808202, + 0x28000000: 0x8202, + 0x38000000: 0x8000, + 0x48000000: 0x808200, + 0x58000000: 0x200, + 0x68000000: 0x808002, + 0x78000000: 0x2, + 0x88000000: 0x800200, + 0x98000000: 0x8200, + 0xa8000000: 0x808000, + 0xb8000000: 0x800202, + 0xc8000000: 0x800002, + 0xd8000000: 0x8002, + 0xe8000000: 0x202, + 0xf8000000: 0x800000, + 0x1: 0x8000, + 0x10000001: 0x2, + 0x20000001: 0x808200, + 0x30000001: 0x800000, + 0x40000001: 0x808002, + 0x50000001: 0x8200, + 0x60000001: 0x200, + 0x70000001: 0x800202, + 0x80000001: 0x808202, + 0x90000001: 0x808000, + 0xa0000001: 0x800002, + 0xb0000001: 0x8202, + 0xc0000001: 0x202, + 0xd0000001: 0x800200, + 0xe0000001: 0x8002, + 0xf0000001: 0x0, + 0x8000001: 0x808202, + 0x18000001: 0x808000, + 0x28000001: 0x800000, + 0x38000001: 0x200, + 0x48000001: 0x8000, + 0x58000001: 0x800002, + 0x68000001: 0x2, + 0x78000001: 0x8202, + 0x88000001: 0x8002, + 0x98000001: 0x800202, + 0xa8000001: 0x202, + 0xb8000001: 0x808200, + 0xc8000001: 0x800200, + 0xd8000001: 0x0, + 0xe8000001: 0x8200, + 0xf8000001: 0x808002 + }, + { + 0x0: 0x40084010, + 0x1000000: 0x4000, + 0x2000000: 0x80000, + 0x3000000: 0x40080010, + 0x4000000: 0x40000010, + 0x5000000: 0x40084000, + 0x6000000: 0x40004000, + 0x7000000: 0x10, + 0x8000000: 0x84000, + 0x9000000: 0x40004010, + 0xa000000: 0x40000000, + 0xb000000: 0x84010, + 0xc000000: 0x80010, + 0xd000000: 0x0, + 0xe000000: 0x4010, + 0xf000000: 0x40080000, + 0x800000: 0x40004000, + 0x1800000: 0x84010, + 0x2800000: 0x10, + 0x3800000: 0x40004010, + 0x4800000: 0x40084010, + 0x5800000: 0x40000000, + 0x6800000: 0x80000, + 0x7800000: 0x40080010, + 0x8800000: 0x80010, + 0x9800000: 0x0, + 0xa800000: 0x4000, + 0xb800000: 0x40080000, + 0xc800000: 0x40000010, + 0xd800000: 0x84000, + 0xe800000: 0x40084000, + 0xf800000: 0x4010, + 0x10000000: 0x0, + 0x11000000: 0x40080010, + 0x12000000: 0x40004010, + 0x13000000: 0x40084000, + 0x14000000: 0x40080000, + 0x15000000: 0x10, + 0x16000000: 0x84010, + 0x17000000: 0x4000, + 0x18000000: 0x4010, + 0x19000000: 0x80000, + 0x1a000000: 0x80010, + 0x1b000000: 0x40000010, + 0x1c000000: 0x84000, + 0x1d000000: 0x40004000, + 0x1e000000: 0x40000000, + 0x1f000000: 0x40084010, + 0x10800000: 0x84010, + 0x11800000: 0x80000, + 0x12800000: 0x40080000, + 0x13800000: 0x4000, + 0x14800000: 0x40004000, + 0x15800000: 0x40084010, + 0x16800000: 0x10, + 0x17800000: 0x40000000, + 0x18800000: 0x40084000, + 0x19800000: 0x40000010, + 0x1a800000: 0x40004010, + 0x1b800000: 0x80010, + 0x1c800000: 0x0, + 0x1d800000: 0x4010, + 0x1e800000: 0x40080010, + 0x1f800000: 0x84000 + }, + { + 0x0: 0x104, + 0x100000: 0x0, + 0x200000: 0x4000100, + 0x300000: 0x10104, + 0x400000: 0x10004, + 0x500000: 0x4000004, + 0x600000: 0x4010104, + 0x700000: 0x4010000, + 0x800000: 0x4000000, + 0x900000: 0x4010100, + 0xa00000: 0x10100, + 0xb00000: 0x4010004, + 0xc00000: 0x4000104, + 0xd00000: 0x10000, + 0xe00000: 0x4, + 0xf00000: 0x100, + 0x80000: 0x4010100, + 0x180000: 0x4010004, + 0x280000: 0x0, + 0x380000: 0x4000100, + 0x480000: 0x4000004, + 0x580000: 0x10000, + 0x680000: 0x10004, + 0x780000: 0x104, + 0x880000: 0x4, + 0x980000: 0x100, + 0xa80000: 0x4010000, + 0xb80000: 0x10104, + 0xc80000: 0x10100, + 0xd80000: 0x4000104, + 0xe80000: 0x4010104, + 0xf80000: 0x4000000, + 0x1000000: 0x4010100, + 0x1100000: 0x10004, + 0x1200000: 0x10000, + 0x1300000: 0x4000100, + 0x1400000: 0x100, + 0x1500000: 0x4010104, + 0x1600000: 0x4000004, + 0x1700000: 0x0, + 0x1800000: 0x4000104, + 0x1900000: 0x4000000, + 0x1a00000: 0x4, + 0x1b00000: 0x10100, + 0x1c00000: 0x4010000, + 0x1d00000: 0x104, + 0x1e00000: 0x10104, + 0x1f00000: 0x4010004, + 0x1080000: 0x4000000, + 0x1180000: 0x104, + 0x1280000: 0x4010100, + 0x1380000: 0x0, + 0x1480000: 0x10004, + 0x1580000: 0x4000100, + 0x1680000: 0x100, + 0x1780000: 0x4010004, + 0x1880000: 0x10000, + 0x1980000: 0x4010104, + 0x1a80000: 0x10104, + 0x1b80000: 0x4000004, + 0x1c80000: 0x4000104, + 0x1d80000: 0x4010000, + 0x1e80000: 0x4, + 0x1f80000: 0x10100 + }, + { + 0x0: 0x80401000, + 0x10000: 0x80001040, + 0x20000: 0x401040, + 0x30000: 0x80400000, + 0x40000: 0x0, + 0x50000: 0x401000, + 0x60000: 0x80000040, + 0x70000: 0x400040, + 0x80000: 0x80000000, + 0x90000: 0x400000, + 0xa0000: 0x40, + 0xb0000: 0x80001000, + 0xc0000: 0x80400040, + 0xd0000: 0x1040, + 0xe0000: 0x1000, + 0xf0000: 0x80401040, + 0x8000: 0x80001040, + 0x18000: 0x40, + 0x28000: 0x80400040, + 0x38000: 0x80001000, + 0x48000: 0x401000, + 0x58000: 0x80401040, + 0x68000: 0x0, + 0x78000: 0x80400000, + 0x88000: 0x1000, + 0x98000: 0x80401000, + 0xa8000: 0x400000, + 0xb8000: 0x1040, + 0xc8000: 0x80000000, + 0xd8000: 0x400040, + 0xe8000: 0x401040, + 0xf8000: 0x80000040, + 0x100000: 0x400040, + 0x110000: 0x401000, + 0x120000: 0x80000040, + 0x130000: 0x0, + 0x140000: 0x1040, + 0x150000: 0x80400040, + 0x160000: 0x80401000, + 0x170000: 0x80001040, + 0x180000: 0x80401040, + 0x190000: 0x80000000, + 0x1a0000: 0x80400000, + 0x1b0000: 0x401040, + 0x1c0000: 0x80001000, + 0x1d0000: 0x400000, + 0x1e0000: 0x40, + 0x1f0000: 0x1000, + 0x108000: 0x80400000, + 0x118000: 0x80401040, + 0x128000: 0x0, + 0x138000: 0x401000, + 0x148000: 0x400040, + 0x158000: 0x80000000, + 0x168000: 0x80001040, + 0x178000: 0x40, + 0x188000: 0x80000040, + 0x198000: 0x1000, + 0x1a8000: 0x80001000, + 0x1b8000: 0x80400040, + 0x1c8000: 0x1040, + 0x1d8000: 0x80401000, + 0x1e8000: 0x400000, + 0x1f8000: 0x401040 + }, + { + 0x0: 0x80, + 0x1000: 0x1040000, + 0x2000: 0x40000, + 0x3000: 0x20000000, + 0x4000: 0x20040080, + 0x5000: 0x1000080, + 0x6000: 0x21000080, + 0x7000: 0x40080, + 0x8000: 0x1000000, + 0x9000: 0x20040000, + 0xa000: 0x20000080, + 0xb000: 0x21040080, + 0xc000: 0x21040000, + 0xd000: 0x0, + 0xe000: 0x1040080, + 0xf000: 0x21000000, + 0x800: 0x1040080, + 0x1800: 0x21000080, + 0x2800: 0x80, + 0x3800: 0x1040000, + 0x4800: 0x40000, + 0x5800: 0x20040080, + 0x6800: 0x21040000, + 0x7800: 0x20000000, + 0x8800: 0x20040000, + 0x9800: 0x0, + 0xa800: 0x21040080, + 0xb800: 0x1000080, + 0xc800: 0x20000080, + 0xd800: 0x21000000, + 0xe800: 0x1000000, + 0xf800: 0x40080, + 0x10000: 0x40000, + 0x11000: 0x80, + 0x12000: 0x20000000, + 0x13000: 0x21000080, + 0x14000: 0x1000080, + 0x15000: 0x21040000, + 0x16000: 0x20040080, + 0x17000: 0x1000000, + 0x18000: 0x21040080, + 0x19000: 0x21000000, + 0x1a000: 0x1040000, + 0x1b000: 0x20040000, + 0x1c000: 0x40080, + 0x1d000: 0x20000080, + 0x1e000: 0x0, + 0x1f000: 0x1040080, + 0x10800: 0x21000080, + 0x11800: 0x1000000, + 0x12800: 0x1040000, + 0x13800: 0x20040080, + 0x14800: 0x20000000, + 0x15800: 0x1040080, + 0x16800: 0x80, + 0x17800: 0x21040000, + 0x18800: 0x40080, + 0x19800: 0x21040080, + 0x1a800: 0x0, + 0x1b800: 0x21000000, + 0x1c800: 0x1000080, + 0x1d800: 0x40000, + 0x1e800: 0x20040000, + 0x1f800: 0x20000080 + }, + { + 0x0: 0x10000008, + 0x100: 0x2000, + 0x200: 0x10200000, + 0x300: 0x10202008, + 0x400: 0x10002000, + 0x500: 0x200000, + 0x600: 0x200008, + 0x700: 0x10000000, + 0x800: 0x0, + 0x900: 0x10002008, + 0xa00: 0x202000, + 0xb00: 0x8, + 0xc00: 0x10200008, + 0xd00: 0x202008, + 0xe00: 0x2008, + 0xf00: 0x10202000, + 0x80: 0x10200000, + 0x180: 0x10202008, + 0x280: 0x8, + 0x380: 0x200000, + 0x480: 0x202008, + 0x580: 0x10000008, + 0x680: 0x10002000, + 0x780: 0x2008, + 0x880: 0x200008, + 0x980: 0x2000, + 0xa80: 0x10002008, + 0xb80: 0x10200008, + 0xc80: 0x0, + 0xd80: 0x10202000, + 0xe80: 0x202000, + 0xf80: 0x10000000, + 0x1000: 0x10002000, + 0x1100: 0x10200008, + 0x1200: 0x10202008, + 0x1300: 0x2008, + 0x1400: 0x200000, + 0x1500: 0x10000000, + 0x1600: 0x10000008, + 0x1700: 0x202000, + 0x1800: 0x202008, + 0x1900: 0x0, + 0x1a00: 0x8, + 0x1b00: 0x10200000, + 0x1c00: 0x2000, + 0x1d00: 0x10002008, + 0x1e00: 0x10202000, + 0x1f00: 0x200008, + 0x1080: 0x8, + 0x1180: 0x202000, + 0x1280: 0x200000, + 0x1380: 0x10000008, + 0x1480: 0x10002000, + 0x1580: 0x2008, + 0x1680: 0x10202008, + 0x1780: 0x10200000, + 0x1880: 0x10202000, + 0x1980: 0x10200008, + 0x1a80: 0x2000, + 0x1b80: 0x202008, + 0x1c80: 0x200008, + 0x1d80: 0x0, + 0x1e80: 0x10000000, + 0x1f80: 0x10002008 + }, + { + 0x0: 0x100000, + 0x10: 0x2000401, + 0x20: 0x400, + 0x30: 0x100401, + 0x40: 0x2100401, + 0x50: 0x0, + 0x60: 0x1, + 0x70: 0x2100001, + 0x80: 0x2000400, + 0x90: 0x100001, + 0xa0: 0x2000001, + 0xb0: 0x2100400, + 0xc0: 0x2100000, + 0xd0: 0x401, + 0xe0: 0x100400, + 0xf0: 0x2000000, + 0x8: 0x2100001, + 0x18: 0x0, + 0x28: 0x2000401, + 0x38: 0x2100400, + 0x48: 0x100000, + 0x58: 0x2000001, + 0x68: 0x2000000, + 0x78: 0x401, + 0x88: 0x100401, + 0x98: 0x2000400, + 0xa8: 0x2100000, + 0xb8: 0x100001, + 0xc8: 0x400, + 0xd8: 0x2100401, + 0xe8: 0x1, + 0xf8: 0x100400, + 0x100: 0x2000000, + 0x110: 0x100000, + 0x120: 0x2000401, + 0x130: 0x2100001, + 0x140: 0x100001, + 0x150: 0x2000400, + 0x160: 0x2100400, + 0x170: 0x100401, + 0x180: 0x401, + 0x190: 0x2100401, + 0x1a0: 0x100400, + 0x1b0: 0x1, + 0x1c0: 0x0, + 0x1d0: 0x2100000, + 0x1e0: 0x2000001, + 0x1f0: 0x400, + 0x108: 0x100400, + 0x118: 0x2000401, + 0x128: 0x2100001, + 0x138: 0x1, + 0x148: 0x2000000, + 0x158: 0x100000, + 0x168: 0x401, + 0x178: 0x2100400, + 0x188: 0x2000001, + 0x198: 0x2100000, + 0x1a8: 0x0, + 0x1b8: 0x2100401, + 0x1c8: 0x100401, + 0x1d8: 0x400, + 0x1e8: 0x2000400, + 0x1f8: 0x100001 + }, + { + 0x0: 0x8000820, + 0x1: 0x20000, + 0x2: 0x8000000, + 0x3: 0x20, + 0x4: 0x20020, + 0x5: 0x8020820, + 0x6: 0x8020800, + 0x7: 0x800, + 0x8: 0x8020000, + 0x9: 0x8000800, + 0xa: 0x20800, + 0xb: 0x8020020, + 0xc: 0x820, + 0xd: 0x0, + 0xe: 0x8000020, + 0xf: 0x20820, + 0x80000000: 0x800, + 0x80000001: 0x8020820, + 0x80000002: 0x8000820, + 0x80000003: 0x8000000, + 0x80000004: 0x8020000, + 0x80000005: 0x20800, + 0x80000006: 0x20820, + 0x80000007: 0x20, + 0x80000008: 0x8000020, + 0x80000009: 0x820, + 0x8000000a: 0x20020, + 0x8000000b: 0x8020800, + 0x8000000c: 0x0, + 0x8000000d: 0x8020020, + 0x8000000e: 0x8000800, + 0x8000000f: 0x20000, + 0x10: 0x20820, + 0x11: 0x8020800, + 0x12: 0x20, + 0x13: 0x800, + 0x14: 0x8000800, + 0x15: 0x8000020, + 0x16: 0x8020020, + 0x17: 0x20000, + 0x18: 0x0, + 0x19: 0x20020, + 0x1a: 0x8020000, + 0x1b: 0x8000820, + 0x1c: 0x8020820, + 0x1d: 0x20800, + 0x1e: 0x820, + 0x1f: 0x8000000, + 0x80000010: 0x20000, + 0x80000011: 0x800, + 0x80000012: 0x8020020, + 0x80000013: 0x20820, + 0x80000014: 0x20, + 0x80000015: 0x8020000, + 0x80000016: 0x8000000, + 0x80000017: 0x8000820, + 0x80000018: 0x8020820, + 0x80000019: 0x8000020, + 0x8000001a: 0x8000800, + 0x8000001b: 0x0, + 0x8000001c: 0x20800, + 0x8000001d: 0x820, + 0x8000001e: 0x20020, + 0x8000001f: 0x8020800 + } + ]; + + // Masks that select the SBOX input + var SBOX_MASK = [ + 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000, + 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f + ]; + + /** + * DES block cipher algorithm. + */ + var DES = C_algo.DES = BlockCipher.extend({ + _doReset: function () { + // Shortcuts + var key = this._key; + var keyWords = key.words; + + // Select 56 bits according to PC1 + var keyBits = []; + for (var i = 0; i < 56; i++) { + var keyBitPos = PC1[i] - 1; + keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1; + } + + // Assemble 16 subkeys + var subKeys = this._subKeys = []; + for (var nSubKey = 0; nSubKey < 16; nSubKey++) { + // Create subkey + var subKey = subKeys[nSubKey] = []; + + // Shortcut + var bitShift = BIT_SHIFTS[nSubKey]; + + // Select 48 bits according to PC2 + for (var i = 0; i < 24; i++) { + // Select from the left 28 key bits + subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6); + + // Select from the right 28 key bits + subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6); + } + + // Since each subkey is applied to an expanded 32-bit input, + // the subkey can be broken into 8 values scaled to 32-bits, + // which allows the key to be used without expansion + 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); + } + + // Compute inverse subkeys + 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) { + // Get input + this._lBlock = M[offset]; + this._rBlock = M[offset + 1]; + + // Initial permutation + exchangeLR.call(this, 4, 0x0f0f0f0f); + exchangeLR.call(this, 16, 0x0000ffff); + exchangeRL.call(this, 2, 0x33333333); + exchangeRL.call(this, 8, 0x00ff00ff); + exchangeLR.call(this, 1, 0x55555555); + + // Rounds + for (var round = 0; round < 16; round++) { + // Shortcuts + var subKey = subKeys[round]; + var lBlock = this._lBlock; + var rBlock = this._rBlock; + + // Feistel function + 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; + } + + // Undo swap from last round + var t = this._lBlock; + this._lBlock = this._rBlock; + this._rBlock = t; + + // Final permutation + exchangeLR.call(this, 1, 0x55555555); + exchangeRL.call(this, 8, 0x00ff00ff); + exchangeRL.call(this, 2, 0x33333333); + exchangeLR.call(this, 16, 0x0000ffff); + exchangeLR.call(this, 4, 0x0f0f0f0f); + + // Set output + M[offset] = this._lBlock; + M[offset + 1] = this._rBlock; + }, + + keySize: 64/32, + + ivSize: 64/32, + + blockSize: 64/32 + }); + + // Swap bits across the left and right words + function exchangeLR(offset, mask) { + var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask; + this._rBlock ^= t; + this._lBlock ^= t << offset; + } + + function exchangeRL(offset, mask) { + var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask; + this._lBlock ^= t; + this._rBlock ^= t << offset; + } + + /** + * Shortcut functions to the cipher's object interface. + * + * @example + * + * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg); + * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg); + */ + C.DES = BlockCipher._createHelper(DES); + + /** + * Triple-DES block cipher algorithm. + */ + var TripleDES = C_algo.TripleDES = BlockCipher.extend({ + _doReset: function () { + // Shortcuts + var key = this._key; + var keyWords = key.words; + // Make sure the key length is valid (64, 128 or >= 192 bit) + if (keyWords.length !== 2 && keyWords.length !== 4 && keyWords.length < 6) { + throw new Error('Invalid key length - 3DES requires the key length to be 64, 128, 192 or >192.'); + } + + // Extend the key according to the keying options defined in 3DES standard + 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); + + // Create DES instances + 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 + }); + + /** + * Shortcut functions to the cipher's object interface. + * + * @example + * + * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg); + * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg); + */ + C.TripleDES = BlockCipher._createHelper(TripleDES); + }()); + + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var StreamCipher = C_lib.StreamCipher; + var C_algo = C.algo; + + /** + * RC4 stream cipher algorithm. + */ + var RC4 = C_algo.RC4 = StreamCipher.extend({ + _doReset: function () { + // Shortcuts + var key = this._key; + var keyWords = key.words; + var keySigBytes = key.sigBytes; + + // Init sbox + var S = this._S = []; + for (var i = 0; i < 256; i++) { + S[i] = i; + } + + // Key setup + for (var i = 0, j = 0; i < 256; i++) { + var keyByteIndex = i % keySigBytes; + var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff; + + j = (j + S[i] + keyByte) % 256; + + // Swap + var t = S[i]; + S[i] = S[j]; + S[j] = t; + } + + // Counters + this._i = this._j = 0; + }, + + _doProcessBlock: function (M, offset) { + M[offset] ^= generateKeystreamWord.call(this); + }, + + keySize: 256/32, + + ivSize: 0 + }); + + function generateKeystreamWord() { + // Shortcuts + var S = this._S; + var i = this._i; + var j = this._j; + + // Generate keystream word + var keystreamWord = 0; + for (var n = 0; n < 4; n++) { + i = (i + 1) % 256; + j = (j + S[i]) % 256; + + // Swap + var t = S[i]; + S[i] = S[j]; + S[j] = t; + + keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8); + } + + // Update counters + this._i = i; + this._j = j; + + return keystreamWord; + } + + /** + * Shortcut functions to the cipher's object interface. + * + * @example + * + * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg); + * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg); + */ + C.RC4 = StreamCipher._createHelper(RC4); + + /** + * Modified RC4 stream cipher algorithm. + */ + var RC4Drop = C_algo.RC4Drop = RC4.extend({ + /** + * Configuration options. + * + * @property {number} drop The number of keystream words to drop. Default 192 + */ + cfg: RC4.cfg.extend({ + drop: 192 + }), + + _doReset: function () { + RC4._doReset.call(this); + + // Drop + for (var i = this.cfg.drop; i > 0; i--) { + generateKeystreamWord.call(this); + } + } + }); + + /** + * Shortcut functions to the cipher's object interface. + * + * @example + * + * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg); + * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg); + */ + C.RC4Drop = StreamCipher._createHelper(RC4Drop); + }()); + + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var StreamCipher = C_lib.StreamCipher; + var C_algo = C.algo; + + // Reusable objects + var S = []; + var C_ = []; + var G = []; + + /** + * Rabbit stream cipher algorithm + */ + var Rabbit = C_algo.Rabbit = StreamCipher.extend({ + _doReset: function () { + // Shortcuts + var K = this._key.words; + var iv = this.cfg.iv; + + // Swap endian + for (var i = 0; i < 4; i++) { + K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) | + (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00); + } + + // Generate initial state values + 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) + ]; + + // Generate initial counter values + var C = this._C = [ + (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), + (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), + (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), + (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) + ]; + + // Carry bit + this._b = 0; + + // Iterate the system four times + for (var i = 0; i < 4; i++) { + nextState.call(this); + } + + // Modify the counters + for (var i = 0; i < 8; i++) { + C[i] ^= X[(i + 4) & 7]; + } + + // IV setup + if (iv) { + // Shortcuts + var IV = iv.words; + var IV_0 = IV[0]; + var IV_1 = IV[1]; + + // Generate four subvectors + var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); + var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); + var i1 = (i0 >>> 16) | (i2 & 0xffff0000); + var i3 = (i2 << 16) | (i0 & 0x0000ffff); + + // Modify counter values + C[0] ^= i0; + C[1] ^= i1; + C[2] ^= i2; + C[3] ^= i3; + C[4] ^= i0; + C[5] ^= i1; + C[6] ^= i2; + C[7] ^= i3; + + // Iterate the system four times + for (var i = 0; i < 4; i++) { + nextState.call(this); + } + } + }, + + _doProcessBlock: function (M, offset) { + // Shortcut + var X = this._X; + + // Iterate the system + nextState.call(this); + + // Generate four keystream words + 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++) { + // Swap endian + S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | + (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); + + // Encrypt + M[offset + i] ^= S[i]; + } + }, + + blockSize: 128/32, + + ivSize: 64/32 + }); + + function nextState() { + // Shortcuts + var X = this._X; + var C = this._C; + + // Save old counter values + for (var i = 0; i < 8; i++) { + C_[i] = C[i]; + } + + // Calculate new counter values + C[0] = (C[0] + 0x4d34d34d + this._b) | 0; + C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; + C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; + C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; + C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; + C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; + C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; + C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; + this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; + + // Calculate the g-values + for (var i = 0; i < 8; i++) { + var gx = X[i] + C[i]; + + // Construct high and low argument for squaring + var ga = gx & 0xffff; + var gb = gx >>> 16; + + // Calculate high and low result of squaring + var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; + var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); + + // High XOR low + G[i] = gh ^ gl; + } + + // Calculate new state values + 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; + } + + /** + * Shortcut functions to the cipher's object interface. + * + * @example + * + * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg); + * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg); + */ + C.Rabbit = StreamCipher._createHelper(Rabbit); + }()); + + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var StreamCipher = C_lib.StreamCipher; + var C_algo = C.algo; + + // Reusable objects + var S = []; + var C_ = []; + var G = []; + + /** + * Rabbit stream cipher algorithm. + * + * This is a legacy version that neglected to convert the key to little-endian. + * This error doesn't affect the cipher's security, + * but it does affect its compatibility with other implementations. + */ + var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({ + _doReset: function () { + // Shortcuts + var K = this._key.words; + var iv = this.cfg.iv; + + // Generate initial state values + 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) + ]; + + // Generate initial counter values + var C = this._C = [ + (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), + (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), + (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), + (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) + ]; + + // Carry bit + this._b = 0; + + // Iterate the system four times + for (var i = 0; i < 4; i++) { + nextState.call(this); + } + + // Modify the counters + for (var i = 0; i < 8; i++) { + C[i] ^= X[(i + 4) & 7]; + } + + // IV setup + if (iv) { + // Shortcuts + var IV = iv.words; + var IV_0 = IV[0]; + var IV_1 = IV[1]; + + // Generate four subvectors + var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); + var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); + var i1 = (i0 >>> 16) | (i2 & 0xffff0000); + var i3 = (i2 << 16) | (i0 & 0x0000ffff); + + // Modify counter values + C[0] ^= i0; + C[1] ^= i1; + C[2] ^= i2; + C[3] ^= i3; + C[4] ^= i0; + C[5] ^= i1; + C[6] ^= i2; + C[7] ^= i3; + + // Iterate the system four times + for (var i = 0; i < 4; i++) { + nextState.call(this); + } + } + }, + + _doProcessBlock: function (M, offset) { + // Shortcut + var X = this._X; + + // Iterate the system + nextState.call(this); + + // Generate four keystream words + 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++) { + // Swap endian + S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | + (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); + + // Encrypt + M[offset + i] ^= S[i]; + } + }, + + blockSize: 128/32, + + ivSize: 64/32 + }); + + function nextState() { + // Shortcuts + var X = this._X; + var C = this._C; + + // Save old counter values + for (var i = 0; i < 8; i++) { + C_[i] = C[i]; + } + + // Calculate new counter values + C[0] = (C[0] + 0x4d34d34d + this._b) | 0; + C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; + C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; + C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; + C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; + C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; + C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; + C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; + this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; + + // Calculate the g-values + for (var i = 0; i < 8; i++) { + var gx = X[i] + C[i]; + + // Construct high and low argument for squaring + var ga = gx & 0xffff; + var gb = gx >>> 16; + + // Calculate high and low result of squaring + var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; + var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); + + // High XOR low + G[i] = gh ^ gl; + } + + // Calculate new state values + 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; + } + + /** + * Shortcut functions to the cipher's object interface. + * + * @example + * + * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg); + * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg); + */ + C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy); + }()); + + + return CryptoJS; + +})); \ No newline at end of file diff --git a/lib/douban.json b/lib/douban.json new file mode 100644 index 0000000..0cd6b7d --- /dev/null +++ b/lib/douban.json @@ -0,0 +1,1192 @@ +{ + "hot_gaia": [ + { + "key": "sort", + "name": "排序", + "value": [ + { + "n": "热度", + "v": "recommend" + }, + { + "n": "最新", + "v": "time" + }, + { + "n": "评分", + "v": "rank" + } + ] + }, + { + "key": "area", + "name": "地区", + "value": [ + { + "n": "全部", + "v": "全部" + }, + { + "n": "华语", + "v": "华语" + }, + { + "n": "欧美", + "v": "欧美" + }, + { + "n": "韩国", + "v": "韩国" + }, + { + "n": "日本", + "v": "日本" + } + ] + } + ], + "tv_hot": [ + { + "key": "type", + "name": "分类", + "value": [ + { + "n": "综合", + "v": "" + }, + { + "n": "国产剧", + "v": "国产剧" + }, + { + "n": "欧美剧", + "v": "欧美" + }, + { + "n": "港剧", + "v": "香港" + }, + { + "n": "台剧", + "v": "台湾" + }, + { + "n": "日剧", + "v": "日剧" + }, + { + "n": "韩剧", + "v": "韩剧" + }, + { + "n": "动画", + "v": "动画" + } + ] + } + ], + "show_hot": [ + { + "key": "type", + "name": "分类", + "value": [ + { + "n": "综合", + "v": "" + }, + { + "n": "国内", + "v": "中国" + }, + { + "n": "香港", + "v": "香港" + }, + { + "n": "台湾", + "v": "台湾" + }, + { + "n": "国外", + "v": "国外" + } + ] + } + ], + "movie": [ + { + "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": "西部" + }, + { + "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": "瑞典" + }, + { + "n": "巴西", + "v": "巴西" + }, + { + "n": "丹麦", + "v": "丹麦" + } + ] + }, + { + "key": "sort", + "name": "排序", + "value": [ + { + "n": "近期热度", + "v": "T" + }, + { + "n": "首映时间", + "v": "R" + }, + { + "n": "高分优先", + "v": "S" + } + ] + }, + { + "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": "2010年代", + "v": "2010年代" + }, + { + "n": "2000年代", + "v": "2000年代" + }, + { + "n": "90年代", + "v": "90年代" + }, + { + "n": "80年代", + "v": "80年代" + }, + { + "n": "70年代", + "v": "70年代" + }, + { + "n": "60年代", + "v": "60年代" + }, + { + "n": "更早", + "v": "更早" + } + ] + } + ], + "tv": [ + { + "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": "恐怖" + }, + { + "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": "真人秀", + "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": "印度" + }, + { + "n": "加拿大", + "v": "加拿大" + }, + { + "n": "爱尔兰", + "v": "爱尔兰" + }, + { + "n": "澳大利亚", + "v": "澳大利亚" + } + ] + }, + { + "key": "sort", + "name": "排序", + "value": [ + { + "n": "近期热度", + "v": "T" + }, + { + "n": "首播时间", + "v": "R" + }, + { + "n": "高分优先", + "v": "S" + } + ] + }, + { + "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": "2010年代", + "v": "2010年代" + }, + { + "n": "2000年代", + "v": "2000年代" + }, + { + "n": "90年代", + "v": "90年代" + }, + { + "n": "80年代", + "v": "80年代" + }, + { + "n": "70年代", + "v": "70年代" + }, + { + "n": "60年代", + "v": "60年代" + }, + { + "n": "更早", + "v": "更早" + } + ] + }, + { + "key": "平台", + "name": "平台", + "value": [ + { + "n": "全部", + "v": "" + }, + { + "n": "腾讯视频", + "v": "腾讯视频" + }, + { + "n": "爱奇艺", + "v": "爱奇艺" + }, + { + "n": "优酷", + "v": "优酷" + }, + { + "n": "湖南卫视", + "v": "湖南卫视" + }, + { + "n": "Netflix", + "v": "Netflix" + }, + { + "n": "HBO", + "v": "HBO" + }, + { + "n": "BBC", + "v": "BBC" + }, + { + "n": "NHK", + "v": "NHK" + }, + { + "n": "CBS", + "v": "CBS" + }, + { + "n": "NBC", + "v": "NBC" + }, + { + "n": "tvN", + "v": "tvN" + } + ] + } + ], + "rank_list_movie": [ + { + "key": "榜单", + "name": "榜单", + "value": [ + { + "n": "实时热门电影", + "v": "movie_real_time_hotest" + }, + { + "n": "一周口碑电影榜", + "v": "movie_weekly_best" + }, + { + "n": "豆瓣电影Top250", + "v": "movie_top250" + } + ] + } + ], + "rank_list_tv": [ + { + "key": "榜单", + "name": "榜单", + "value": [ + { + "n": "实时热门电视", + "v": "tv_real_time_hotest" + }, + { + "n": "华语口碑剧集榜", + "v": "tv_chinese_best_weekly" + }, + { + "n": "全球口碑剧集榜", + "v": "tv_global_best_weekly" + }, + { + "n": "国内口碑综艺榜", + "v": "show_chinese_best_weekly" + }, + { + "n": "国外口碑综艺榜", + "v": "show_global_best_weekly" + } + ] + } + ], + "book_hot": [ + { + "key": "type", + "name": "分类", + "value": [ + { + "n": "综合", + "v": "book_hot" + }, + { + "n": "豆瓣阅读TOP250", + "v": "book_top250" + }, + { + "n": "一周热门图书榜", + "v": "EC645NBAI" + }, + { + "n": "悬疑推理小说一周热门榜", + "v": "ECHU5PTUY" + }, + { + "n": "科幻奇幻小说一周热门榜", + "v": "ECEA5SP5A" + }, + { + "n": "绘本绘画一周热门榜", + "v": "EC5U5NVYQ" + }, + { + "n": "商业经管图书一周热门榜", + "v": "ECE45ORCA" + }, + { + "n": "影视戏剧图书一周热门榜", + "v": "ECWU5QFUI" + }, + { + "n": "艺术设计图书一周热门榜", + "v": "ECI45ZBNY" + }, + { + "n": "科学新知图书一周热门榜", + "v": "ECIM5L2YI" + }, + { + "n": "社会纪实图书一周热门榜", + "v": "ECQU5U7HQ" + }, + { + "n": "历史文化图书一周热门榜", + "v": "ECIE5S2IQ" + }, + { + "n": "文学图书一周热门榜", + "v": "ECRM5OCGI" + }, + { + "n": "小说一周热门榜", + "v": "ECF45REBQ" + } + ] + } + ], + "book": [ + { + "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": "港台" + } + ] + }, + { + "key": "流行", + "name": "流行", + "value": [ + { + "n": "流行", + "v": "流行" + }, + { + "n": "漫画", + "v": "漫画" + }, + { + "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": "音乐" + } + ] + }, + { + "key": "生活", + "name": "生活", + "value": [ + { + "n": "生活", + "v": "生活" + }, + { + "n": "旅行", + "v": "旅行" + }, + { + "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": "企业史" + } + ] + }, + { + "key": "科技", + "name": "科技", + "value": [ + { + "n": "科技", + "v": "科技" + }, + { + "n": "科普", + "v": "科普" + }, + { + "n": "互联网", + "v": "互联网" + }, + { + "n": "编程", + "v": "编程" + }, + { + "n": "交互设计", + "v": "交互设计" + }, + { + "n": "算法", + "v": "算法" + }, + { + "n": "通信", + "v": "通信" + }, + { + "n": "神经网络", + "v": "神经网络" + } + ] + }, + { + "key": "sort", + "name": "排序", + "value": [ + { + "n": "近期热度", + "v": "T" + }, + { + "n": "首播时间", + "v": "R" + }, + { + "n": "高分优先", + "v": "S" + } + ] + } + ] +} diff --git a/lib/drpy2.min.js b/lib/drpy2.min.js new file mode 100644 index 0000000..7c5e4ce --- /dev/null +++ b/lib/drpy2.min.js @@ -0,0 +1,73 @@ +import cheerio from"assets://js/lib/cheerio.min.js";import"assets://js/lib/crypto-js.js";import"./node-rsa.js";import"./pako.min.js";import 模板 from"./template.js";import{gbkTool}from"./gbk.js";import"./json5.js";import"./jinja.js";const _jinja2=cheerio.jinja2;cheerio.jinja2=function(template,obj){try{return jinja.render(template,obj)}catch(e){console.log("新的jinja2库渲染失败,换回原始cheerio:"+e.message);return _jinja2(template,obj)}};function init_test(){console.log("init_test_start");console.log("当前版本号:"+VERSION);console.log("本地代理地址:"+getProxyUrl());console.log(RKEY);console.log(JSON.stringify(rule));console.log("init_test_end")}function ocr_demo_test(){let img_base64=`iVBORw0KGgoAAAANSUhEUgAAAIAAAAAoBAMAAADEX+97AAAAG1BMVEXz+/4thQTa7N6QwIFFkyNeokKozqDB3b93sWHFR+MEAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABN0lEQVRIie2TQU+DQBCFt9vScvQpxR4xrcSjJCZ67JDGXsX+AdR4B3vpsSYm/m2HXaRLmuySepR3Gdidb/btDAjRq5dT96eCMlfBuzi1QLZUoZy2yz5sOvI+9iomaPEZ6nWnEtxqIyiM1RcAy44GNDhBXUjot/VVNweV1ah68FqWRyjKIOqAcyYF6rGcmpYnHzGt3fycNoMw0d3/THFu7hFSJ/8OXO6iTM8/KSg09obAzIHLO250LgQ0txOZSfgrV4Exdw98uGycJ0ErAeExZGhOmFHV9zHO6qVSj0MpLq7xZON56o++MjlsEgfVhbQWWME+xQX7J4V6zfi9A1Ly9rP1BvEXp+BbVJ/M77n+wfOIDVp51pZ4iBxvmj9AGrtvry6emwfKnVkW+ZRKd5ZNMvob36vXP9YPDmQki8QiCFAAAAAASUVORK5CYII=`;OcrApi.api=OCR_API;let code=OcrApi.classification(img_base64);log("测试验证码图片的ocr识别结果为:"+code)}function rsa_demo_test(){let t1=(new Date).getTime();let pkcs1_public=` +-----BEGIN RSA PUBLIC KEY----- +MEgCQQCrI0pQ/ERRpJ3Ou190XJedFq846nDYP52rOtXyDxlFK5D3p6JJu2RwsKwy +lsQ9xY0xYPpRZUZKMEeR7e9gmRNLAgMBAAE= +-----END RSA PUBLIC KEY----- +`.trim();let pkcs1_public_pem=` +MEgCQQCrI0pQ/ERRpJ3Ou190XJedFq846nDYP52rOtXyDxlFK5D3p6JJu2RwsKwy +lsQ9xY0xYPpRZUZKMEeR7e9gmRNLAgMBAAE= +`.trim();let pkcs8_public=` +-----BEGIN PUBLIC KEY----- +MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKsjSlD8RFGknc67X3Rcl50WrzjqcNg/ +nas61fIPGUUrkPenokm7ZHCwrDKWxD3FjTFg+lFlRkowR5Ht72CZE0sCAwEAAQ== +-----END PUBLIC KEY-----`.trim();let pkcs8_public_pem=` +MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKsjSlD8RFGknc67X3Rcl50WrzjqcNg/ +nas61fIPGUUrkPenokm7ZHCwrDKWxD3FjTFg+lFlRkowR5Ht72CZE0sCAwEAAQ== +`.trim();let pkcs1_private=` +-----BEGIN RSA PRIVATE KEY----- +MIIBOAIBAAJBAKsjSlD8RFGknc67X3Rcl50WrzjqcNg/nas61fIPGUUrkPenokm7 +ZHCwrDKWxD3FjTFg+lFlRkowR5Ht72CZE0sCAwEAAQI/b6OV1z65UokQaMvSeRXt +0Yv6wiYtduQI9qpq5nzy/ytaqsbBfClNTi/HifKPKxlRouWFkc518EQI8LBxoarJ +AiEA4DaONMplV8PQNa3TKn2F+SDEvLOCjdL0kHKdN90Ti28CIQDDZnTBaHgZwZbA +hS7Bbf5yvwjWMhO6Y7l04/Qm7R+35QIgPuQuqXIoUSD080mp1N5WyRW++atksIF+ +5lGv9e6GP/MCICnj8y/rl6Pd7tXDN6zcSeqLrfdNsREKhB3dKOCXgW9JAiAFYtFS +EJNBXVRTK42SNsZ2hJ/9xLwOwnH2epT8Q43s3Q== +-----END RSA PRIVATE KEY----- +`.trim();let pkcs8_private=` +-----BEGIN PRIVATE KEY----- +MIIBUgIBADANBgkqhkiG9w0BAQEFAASCATwwggE4AgEAAkEAqyNKUPxEUaSdzrtf +dFyXnRavOOpw2D+dqzrV8g8ZRSuQ96eiSbtkcLCsMpbEPcWNMWD6UWVGSjBHke3v +YJkTSwIDAQABAj9vo5XXPrlSiRBoy9J5Fe3Ri/rCJi125Aj2qmrmfPL/K1qqxsF8 +KU1OL8eJ8o8rGVGi5YWRznXwRAjwsHGhqskCIQDgNo40ymVXw9A1rdMqfYX5IMS8 +s4KN0vSQcp033ROLbwIhAMNmdMFoeBnBlsCFLsFt/nK/CNYyE7pjuXTj9CbtH7fl +AiA+5C6pcihRIPTzSanU3lbJFb75q2SwgX7mUa/17oY/8wIgKePzL+uXo93u1cM3 +rNxJ6out902xEQqEHd0o4JeBb0kCIAVi0VIQk0FdVFMrjZI2xnaEn/3EvA7CcfZ6 +lPxDjezd +-----END PRIVATE KEY----- +`.trim();let data=` +NodeRsa +这是node-rsa 现在修改集成在drpy里使用`.trim();let encryptedWithPublic=NODERSA.encryptRSAWithPublicKey(data,pkcs1_public,{outputEncoding:"base64",options:{environment:"browser",encryptionScheme:"pkcs1_oaep"}});console.log("公钥加密");console.log(encryptedWithPublic);let decryptedWithPrivate=NODERSA.decryptRSAWithPrivateKey(encryptedWithPublic,pkcs1_private,{options:{environment:"browser",encryptionScheme:"pkcs1_oaep"}});console.log("私钥解密");console.log(decryptedWithPrivate);let pkcs1_sha256_sign=NODERSA.sign("1",pkcs1_private,{outputEncoding:"base64",options:{environment:"browser",encryptionScheme:"pkcs1",signingScheme:"pkcs1-sha256"}});console.log("pkcs1_sha256_sign");console.log(pkcs1_sha256_sign);let pkcs1_sha256_sign_verify=NODERSA.verify("1","Oulx2QrgeipKYBtqEDqFb2s/+ndk2cGQxO4CkhU7iBM1vyNmmvqubpsmeoUuN3waGrYZLknSEdwBkfv0tUMpFQ==",pkcs1_private,{options:{environment:"browser",encryptionScheme:"pkcs1",signingScheme:"pkcs1-sha256"}});console.log("pkcs1_sha256_sign_verify");console.log(pkcs1_sha256_sign_verify);let pkcs1_oaep_sha256=NODERSA.encryptRSAWithPublicKey(data,`-----BEGIN RSA PUBLIC KEY----- +MIIBCgKCAQEA5KOq1gRNyllLNWKQy8sGpZE3Q1ULLSmzZw+eaAhj9lvqn7IsT1du +SYn08FfoOA2qMwtz+1O2l1mgzNoSVCyVpVabnTG+C9XKeZXAnJHd8aYA7l7Sxhdm +kte+iymYZ0ZBPzijo8938iugtVvqi9UgDmnY3u/NlQDqiL5BGqSxSTd/Sgmy3zD8 +PYzEa3wD9vehQ5fZZ45vKIq8GNVh2Z8+IGO85FF1OsN7+b2yGJa/FmDDNn0+HP+m +PfI+kYBqEVpo0Ztbc3UdxgFwGC8O1n8AQyriwHnSOtIiuBH62J/7qyC/3LEAApRb +Dd9YszqzmODjQUddZKHmvc638VW+azc0EwIDAQAB +-----END RSA PUBLIC KEY----- +`,{outputEncoding:"base64",options:{environment:"browser",encryptionScheme:{scheme:"pkcs1_oaep",hash:"sha256"}}});console.log("pkcs1_oaep_sha256");console.log(pkcs1_oaep_sha256);decryptedWithPrivate=NODERSA.decryptRSAWithPrivateKey("kSZesAAyYh2hdsQnYMdGqb6gKAzTauBKouvBzWcc4+F8RvGd0nwO6mVkUMVilPgUuNxjEauHayHiY8gI3Py45UI3+km0rSGyHrS6dHiHgCkMejXHieglYzAB0IxX3Jkm4z/66bdB/D+GFy0oct5fGCMI1UHPjEAYOsazJDa8lBFNbjiWFeb/qiZtIx3vGM7KYPAZzyRf/zPbbQ8zy9xOmRuOl5nnIxgo0Okp3KO/RIPO4GZOSBA8f2lx1UtNwwrXAMpcNavtoqHVcjJ/9lcotXYQFrn5b299pSIRf2gVm8ZJ31SK6Z8cc14nKtvgnmsgClDzIXJ1o1RcDK+knVAySg==",`-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEA5KOq1gRNyllLNWKQy8sGpZE3Q1ULLSmzZw+eaAhj9lvqn7Is +T1duSYn08FfoOA2qMwtz+1O2l1mgzNoSVCyVpVabnTG+C9XKeZXAnJHd8aYA7l7S +xhdmkte+iymYZ0ZBPzijo8938iugtVvqi9UgDmnY3u/NlQDqiL5BGqSxSTd/Sgmy +3zD8PYzEa3wD9vehQ5fZZ45vKIq8GNVh2Z8+IGO85FF1OsN7+b2yGJa/FmDDNn0+ +HP+mPfI+kYBqEVpo0Ztbc3UdxgFwGC8O1n8AQyriwHnSOtIiuBH62J/7qyC/3LEA +ApRbDd9YszqzmODjQUddZKHmvc638VW+azc0EwIDAQABAoIBADZ/QGgUzInvsLp/ +zO2WbfYm39o/uhNAvk9RbLt1TIZbMFhyOpeKynHi3Swwd9xsfWX/U9zS/lGi/m31 +iKrhmaW4OA1G3vqpMcK7TBbFufYwUEaA+ZJX344euH8pIfdzyneMQ4z3Far2dS7l +QsmjuilVV2kEFadveXewiYoVOWCu00w6bN8wy2SIHlQn+kIL6HQhWz12iKKflIKu +eGRdzLHsKmBt6WbY1Wuhx7HU0fAKdlBDPxCHNlI+kybUYE9o5C2vJiaVM5wqJBgZ +8Dz8kt1QbLJ910JoLXkLVQ8uC8NJKQwFtqQjTGPnEq0+wbgz6Ij599rKZkwW/xq9 +l6KoUiECgYEA6Ah42tVdkNW047f03xVYXFH96RgorHRS36mR8Y+ONUq1fwKidovC +WjwVujt4OPf3l1W6iyn/F6cu/bsmvPrSc3HTN0B1V31QK4OjgetxQ2PSbTldH02J +NPzkt+v+cPxXpx/P5mgt7Weefw5txU547KubGrHUV5rBKFtIx9pj16MCgYEA/EF0 +o19+D24DZAPwlDS5VbEd7FStnwY4oQ5PqbuNOSbSJLMWU0AqzXcRokp8UTyCZ0X3 +ATkS1REq97kShCuR+npTR6a6DlY7sdpPI1SMLNajgB2tkx0EOzX+PfNIbHUd4jpJ +I0ZMAHv/OOtkzQHDaeTWBTrzsWm6/nTiykfduNECgYEA46AMD4HpPECqKAs66e5i +tI6q7JSKskObWVdcmQEfnSAhVOwcvPb2Ptda6UuV8S0xcwDi88rLOUUFUFzc79+P +vTkY38cYVi/VChsluDpk7ptqv0PbGu5Rf+3n4pZdEjI7OvR2W64wAAn67uIUxc7p +yiO/ET0K9rYWb6S9jXGtKMkCgYEA2kPAqoO7zZoBMQ7/oR0lp/HC1HRIbiqx4RlC +8Lgpb+QZPEwA6zPAVVvLVENi4d+bbcRp/xLlKpraNNJcJSSWAMbLPFoU7sbKjA87 +HnTPfRSTEA2d3Ibk3F7Rh8TzS3Ti0JZiJjVzGZAwu41iAMifzwaD8K6boUy80eNN +QH2CaaECgYBUsLYvC/MiYg3w+LGOONuQongoVUXjGqnw2bjVa9RK7lwRdXPUqJ51 +MpVO98IkoLvGSI/0sGNP3GKNhC+eMGjJAVwFyEuOn+JsmMv9Y9uStIVi5tIHIhKw +m7mp8il0kaftHdSxTbspG3tZ2fjIiFIZkLEOmRpd7ogWumgOajzUdA== +-----END RSA PRIVATE KEY-----`,{options:{environment:"browser",encryptionScheme:"pkcs1_oaep"}});console.log("decryptedWithPrivate");console.log(decryptedWithPrivate);(()=>{let key=new NODERSA.NodeRSA({b:1024});key.setOptions({encryptionScheme:"pkcs1"});let text=`你好drpy node-ras`;let encrypted=key.encrypt(text,"base64");console.log("encrypted: ",encrypted);const decrypted=key.decrypt(encrypted,"utf8");console.log("decrypted: ",decrypted)})();let t2=(new Date).getTime();console.log("rsa_demo_test 测试耗时:"+(t2-t1)+"毫秒")}function pre(){if(typeof rule.预处理==="string"&&rule.预处理&&rule.预处理.trim()){let code=rule.预处理.trim();console.log("执行预处理代码:"+code);if(code.startsWith("js:")){code=code.replace("js:","")}try{eval(code)}catch(e){console.log(`预处理执行失败:${e.message}`)}}}let rule={};let vercode=typeof pdfl==="function"?"drpy2.1":"drpy2";const VERSION=vercode+" 3.9.51beta2 20240711";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 PC_UA="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36";const UA="Mozilla/5.0";const UC_UA="Mozilla/5.0 (Linux; U; Android 9; zh-CN; MI 9 Build/PKQ1.181121.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/12.5.5.1035 Mobile Safari/537.36";const IOS_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";const RULE_CK="cookie";const CATE_EXCLUDE="首页|留言|APP|下载|资讯|新闻|动态";const TAB_EXCLUDE="猜你|喜欢|下载|剧情|榜|评论";const OCR_RETRY=3;const OCR_API="https://api.nn.ci/ocr/b64/text";if(typeof MY_URL==="undefined"){var MY_URL}var HOST;var RKEY;var fetch;var print;var log;var rule_fetch_params;var fetch_params;var oheaders;var _pdfh;var _pdfa;var _pd;const DOM_CHECK_ATTR=/(url|src|href|-original|-src|-play|-url|style)$/;const SPECIAL_URL=/^(ftp|magnet|thunder|ws):/;const NOADD_INDEX=/:eq|:lt|:gt|:first|:last|^body$|^#/;const URLJOIN_ATTR=/(url|src|href|-original|-src|-play|-url|style)$|^(data-|url-|src-)/;const SELECT_REGEX=/:eq|:lt|:gt|#/g;const SELECT_REGEX_A=/:eq|:lt|:gt/g;const $js={toString(func){let strfun=func.toString();return strfun.replace(/^\(\)(\s+)?=>(\s+)?\{/,"js:").replace(/\}$/,"")}};function window_b64(){let b64map="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";let 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(ithis.length){return false}else{return this.indexOf(search,start)!==-1}}}if(!Array.prototype.includes){Object.defineProperty(Array.prototype,"includes",{value:function(searchElement,fromIndex){if(this==null){throw new TypeError('"this" is null or not defined')}var o=Object(this);var len=o.length>>>0;if(len===0){return false}var n=fromIndex|0;var k=Math.max(n>=0?n:len-Math.abs(n),0);while(k>4){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:out+=String.fromCharCode(c);break;case 12:case 13:char2=array[i++];out+=String.fromCharCode((c&31)<<6|char2&63);break;case 14:char2=array[i++];char3=array[i++];out+=String.fromCharCode((c&15)<<12|(char2&63)<<6|(char3&63)<<0);break}}return out}function gzip(str){let arr=pako.gzip(str,{});return uint8ArrayToBase64(arr)}function ungzip(b64Data){let strData=atob(b64Data);const charData=strData.split("").map(function(x){return x.charCodeAt(0)});const binData=new Uint8Array(charData);const data=pako.inflate(binData);return Utf8ArrayToStr(data)}function encodeStr(input,encoding){encoding=encoding||"gbk";if(encoding.startsWith("gb")){const strTool=gbkTool();input=strTool.encode(input)}return input}function decodeStr(input,encoding){encoding=encoding||"gbk";if(encoding.startsWith("gb")){const strTool=gbkTool();input=strTool.decode(input)}return input}function getCryptoJS(){return'console.log("CryptoJS已装载");'}const RSA={decode:function(data,key,option){option=option||{};if(typeof JSEncrypt==="function"){let chunkSize=option.chunkSize||117;let privateKey=this.getPrivateKey(key);const decryptor=new JSEncrypt;decryptor.setPrivateKey(privateKey);let uncrypted="";uncrypted=decryptor.decryptUnicodeLong(data);return uncrypted}else{return false}},encode:function(data,key,option){option=option||{};if(typeof JSEncrypt==="function"){let chunkSize=option.chunkSize||117;let publicKey=this.getPublicKey(key);const encryptor=new JSEncrypt;encryptor.setPublicKey(publicKey);let encrypted="";encrypted=encryptor.encryptUnicodeLong(data);return encrypted}else{return false}},fixKey(key,prefix,endfix){if(!key.includes(prefix)){key=prefix+key}if(!key.includes(endfix)){key+=endfix}return key},getPrivateKey(key){let prefix="-----BEGIN RSA PRIVATE KEY-----";let endfix="-----END RSA PRIVATE KEY-----";return this.fixKey(key,prefix,endfix)},getPublicKey(key){let prefix="-----BEGIN PUBLIC KEY-----";let endfix="-----END PUBLIC KEY-----";return this.fixKey(key,prefix,endfix)}};function getProxyUrl(){if(typeof getProxy==="function"){return getProxy(true)}else{return"http://127.0.0.1:9978/proxy?do=js"}}function fixAdM3u8(m3u8_text,m3u8_url,ad_remove){if(!m3u8_text&&!m3u8_url||!m3u8_text&&m3u8_url&&!m3u8_url.startsWith("http")){return""}if(!m3u8_text){log("m3u8_url:"+m3u8_url);m3u8_text=request(m3u8_url)}log("len(m3u8_text):"+m3u8_text.length);if(!ad_remove){return m3u8_text}if(ad_remove.startsWith("reg:")){ad_remove=ad_remove.slice(4)}else if(ad_remove.startsWith("js:")){ad_remove=ad_remove.slice(3)}let m3u8_start=m3u8_text.slice(0,m3u8_text.indexOf("#EXTINF")).trim();let m3u8_body=m3u8_text.slice(m3u8_text.indexOf("#EXTINF"),m3u8_text.indexOf("#EXT-X-ENDLIST")).trim();let m3u8_end=m3u8_text.slice(m3u8_text.indexOf("#EXT-X-ENDLIST")).trim();let murls=[];let m3_body_list=m3u8_body.split("\n");let m3_len=m3_body_list.length;let i=0;while(i{new_m3u8_body.push(it)})}}new_m3u8_body=new_m3u8_body.join("\n").trim();m3u8_text=[m3u8_start,new_m3u8_body,m3u8_end].join("\n").trim();return m3u8_text}function fixAdM3u8Ai(m3u8_url,headers){let ts=(new Date).getTime();let option=headers?{headers:headers}:{};function b(s1,s2){let i=0;while(iit.startsWith("#")?it:urljoin(m3u8_url,it)).join("\n");m3u8=m3u8.replace(/\n\n/gi,"\n");let last_url=m3u8.split("\n").slice(-1)[0];if(last_url.length<5){last_url=m3u8.split("\n").slice(-2)[0]}if(last_url.includes(".m3u8")&&last_url!==m3u8_url){m3u8_url=urljoin2(m3u8_url,last_url);log("嵌套的m3u8_url:"+m3u8_url);m3u8=request(m3u8_url,option)}let s=m3u8.trim().split("\n").filter(it=>it.trim()).join("\n");let ss=s.split("\n");let firststr="";let maxl=0;let kk=0;let kkk=2;let secondstr="";for(let i=0;i1){if(maxl>b(firststr,s)){if(secondstr.length<5)secondstr=s;kkk=kkk+2}else{maxl=b(firststr,s);kkk++}}kk++;if(kk>=20)break}}if(kkk>30)firststr=secondstr;let firststrlen=firststr.length;let ml=Math.round(ss.length/2).toString().length;let maxc=0;let laststr=ss.toReversed().find(x=>{if(!x.startsWith("#")){let k=b(reverseString(firststr),reverseString(x));maxl=b(firststr,x);maxc++;if(firststrlen-maxl<=ml+k||maxc>10){return true}}return false});log("最后一条切片:"+laststr);let ad_urls=[];for(let i=0;i=end){return lists}let first=lists[start];let second=lists[end];if(key){try{first=first[key];second=second[key]}catch(e){}}if(option&&typeof option==="function"){try{first=option(first);second=option(second)}catch(e){}}first+="";second+="";if(first.match(/(\d+)/)&&second.match(/(\d+)/)){let num1=Number(first.match(/(\d+)/)[1]);let num2=Number(second.match(/(\d+)/)[1]);if(num1>num2){lists.reverse()}}return lists}let VODS=[];let VOD={};let TABS=[];let LISTS=[];function getQuery(url){try{if(url.indexOf("?")>-1){url=url.slice(url.indexOf("?")+1)}let arr=url.split("#")[0].split("&");const resObj={};arr.forEach(item=>{let arr1=item.split("=");let key=arr1[0];let value=arr1.slice(1).join("=");resObj[key]=value});return resObj}catch(err){log(`getQuery发生错误:${e.message}`);return{}}}function urljoin(fromPath,nowPath){fromPath=fromPath||"";nowPath=nowPath||"";return joinUrl(fromPath,nowPath)}var urljoin2=urljoin;const defaultParser={pdfh:pdfh,pdfa:pdfa,pd:pd};function pdfh2(html,parse){let html2=html;try{if(typeof html!=="string"){html2=html.rr(html.ele).toString()}}catch(e){print(`html对象转文本发生了错误:${e.message}`)}let result=defaultParser.pdfh(html2,parse);let option=parse.includes("&&")?parse.split("&&").slice(-1)[0]:parse.split(" ").slice(-1)[0];if(/style/.test(option.toLowerCase())&&/url\(/.test(result)){try{result=result.match(/url\((.*?)\)/)[1];result=result.replace(/^['|"](.*)['|"]$/,"$1")}catch(e){}}return result}function pdfa2(html,parse){let html2=html;try{if(typeof html!=="string"){html2=html.rr(html.ele).toString()}}catch(e){print(`html对象转文本发生了错误:${e.message}`)}return defaultParser.pdfa(html2,parse)}function pd2(html,parse,uri){let ret=pdfh2(html,parse);if(typeof uri==="undefined"||!uri){uri=""}if(DOM_CHECK_ATTR.test(parse)&&!SPECIAL_URL.test(ret)){if(/http/.test(ret)){ret=ret.slice(ret.indexOf("http"))}else{ret=urljoin(MY_URL,ret)}}return ret}const parseTags={jsp:{pdfh:pdfh2,pdfa:pdfa2,pd:pd2},json:{pdfh(html,parse){if(!parse||!parse.trim()){return""}if(typeof html==="string"){html=JSON.parse(html)}parse=parse.trim();if(!parse.startsWith("$.")){parse="$."+parse}parse=parse.split("||");for(let ps of parse){let ret=cheerio.jp(ps,html);if(Array.isArray(ret)){ret=ret[0]||""}else{ret=ret||""}if(ret&&typeof ret!=="string"){ret=ret.toString()}if(ret){return ret}}return""},pdfa(html,parse){if(!parse||!parse.trim()){return""}if(typeof html==="string"){html=JSON.parse(html)}parse=parse.trim();if(!parse.startsWith("$.")){parse="$."+parse}let ret=cheerio.jp(parse,html);if(Array.isArray(ret)&&Array.isArray(ret[0])&&ret.length===1){return ret[0]||[]}return ret||[]},pd(html,parse){let ret=parseTags.json.pdfh(html,parse);if(ret){return urljoin(MY_URL,ret)}return ret}},jq:{pdfh(html,parse){if(!html||!parse||!parse.trim()){return""}parse=parse.trim();let result=defaultParser.pdfh(html,parse);return result},pdfa(html,parse){if(!html||!parse||!parse.trim()){return[]}parse=parse.trim();let result=defaultParser.pdfa(html,parse);print(`pdfa解析${parse}=>${result.length}`);return result},pd(html,parse,base_url){if(!html||!parse||!parse.trim()){return""}parse=parse.trim();base_url=base_url||MY_URL;return defaultParser.pd(html,parse,base_url)}},getParse(p0){if(p0.startsWith("jsp:")){return this.jsp}else if(p0.startsWith("json:")){return this.json}else if(p0.startsWith("jq:")){return this.jq}else{return this.jq}}};const stringify=JSON.stringify;const jsp=parseTags.jsp;const jq=parseTags.jq;function readFile(filePath){filePath=filePath||"./uri.min.js";var fd=os.open(filePath);var buffer=new ArrayBuffer(1024);var len=os.read(fd,buffer,0,1024);console.log(len);let text=String.fromCharCode.apply(null,new Uint8Array(buffer));console.log(text);return text}function dealJson(html){try{html=html.trim();if(!(html.startsWith("{")&&html.endsWith("}")||html.startsWith("[")&&html.endsWith("]"))){html="{"+html.match(/.*?\{(.*)\}/m)[1]+"}"}}catch(e){}try{html=JSON.parse(html)}catch(e){}return html}var OcrApi={api:OCR_API,classification:function(img){let code="";try{log("通过drpy_ocr验证码接口过验证...");let html="";if(this.api.endsWith("drpy/text")){html=request(this.api,{data:{img:img},headers:{"User-Agent":PC_UA},method:"POST"},true)}else{html=post(this.api,{body:img})}code=html||""}catch(e){log(`OCR识别验证码发生错误:${e.message}`)}return code}};function verifyCode(url){let cnt=0;let host=getHome(url);let cookie="";while(cntit.toLowerCase()==="set-cookie");cookie=setCk?json[setCk].split(";")[0]:""}console.log("cookie:"+cookie);let img=json.body;let code=OcrApi.classification(img);console.log(`第${cnt+1}次验证码识别结果:${code}`);let submit_url=`${host}/index.php/ajax/verify_check?type=search&verify=${code}`;console.log(submit_url);let html=request(submit_url,{headers:{Cookie:cookie},method:"POST"});html=JSON.parse(html);if(html.msg==="ok"){console.log(`第${cnt+1}次验证码提交成功`);return cookie}else if(html.msg!=="ok"&&cnt+1>=OCR_RETRY){cookie=""}}catch(e){console.log(`第${cnt+1}次验证码提交失败:${e.message}`);if(cnt+1>=OCR_RETRY){cookie=""}}cnt+=1}return cookie}function setItem(k,v){local.set(RKEY,k,v);console.log(`规则${RKEY}设置${k} => ${v}`)}function getItem(k,v){return local.get(RKEY,k)||v}function clearItem(k){local.delete(RKEY,k)}function getHome(url){if(!url){return""}let tmp=url.split("//");url=tmp[0]+"//"+tmp[1].split("/")[0];try{url=decodeURIComponent(url)}catch(e){}return url}function buildUrl(url,obj){obj=obj||{};if(url.indexOf("?")<0){url+="?"}let param_list=[];let keys=Object.keys(obj);keys.forEach(it=>{param_list.push(it+"="+obj[it])});let prs=param_list.join("&");if(keys.length>0&&!url.endsWith("?")){url+="&"}url+=prs;return url}function $require(url){eval(request(url))}function keysToLowerCase(obj){return Object.keys(obj).reduce((result,key)=>{const newKey=key.toLowerCase();result[newKey]=obj[key];return result},{})}function request(url,obj,ocr_flag){ocr_flag=ocr_flag||false;if(typeof obj==="undefined"||!obj||obj==={}){if(!fetch_params||!fetch_params.headers){let headers={"User-Agent":MOBILE_UA};if(rule.headers){Object.assign(headers,rule.headers)}if(!fetch_params){fetch_params={}}fetch_params.headers=headers}if(!fetch_params.headers.Referer){fetch_params.headers.Referer=getHome(url)}obj=fetch_params}else{let headers=obj.headers||{};let keys=Object.keys(headers).map(it=>it.toLowerCase());if(!keys.includes("user-agent")){headers["User-Agent"]=MOBILE_UA;if(typeof fetch_params==="object"&&fetch_params&&fetch_params.headers){let fetch_headers=keysToLowerCase(fetch_params.headers);if(fetch_headers["user-agent"]){headers["User-Agent"]=fetch_headers["user-agent"]}}}if(!keys.includes("referer")){headers["Referer"]=getHome(url)}obj.headers=headers}if(rule.encoding&&rule.encoding!=="utf-8"&&!ocr_flag){if(!obj.headers.hasOwnProperty("Content-Type")&&!obj.headers.hasOwnProperty("content-type")){obj.headers["Content-Type"]="text/html; charset="+rule.encoding}}if(typeof obj.body!="undefined"&&obj.body&&typeof obj.body==="string"){if(!obj.headers.hasOwnProperty("Content-Type")&&!obj.headers.hasOwnProperty("content-type")){obj.headers["Content-Type"]="application/x-www-form-urlencoded; charset="+rule.encoding}}else if(typeof obj.body!="undefined"&&obj.body&&typeof obj.body==="object"){obj.data=obj.body;delete obj.body}if(!url){return obj.withHeaders?"{}":""}if(obj.toBase64){obj.buffer=2;delete obj.toBase64}if(obj.redirect===false){obj.redirect=0}console.log(JSON.stringify(obj.headers));console.log("request:"+url+`|method:${obj.method||"GET"}|body:${obj.body||""}`);let res=req(url,obj);let html=res.content||"";if(obj.withHeaders){let htmlWithHeaders=res.headers;htmlWithHeaders.body=html;return JSON.stringify(htmlWithHeaders)}else{return html}}function post(url,obj){obj=obj||{};obj.method="POST";return request(url,obj)}function reqCookie(url,obj,all_cookie){obj=obj||{};obj.withHeaders=true;all_cookie=all_cookie||false;let html=request(url,obj);let json=JSON.parse(html);let setCk=Object.keys(json).find(it=>it.toLowerCase()==="set-cookie");let cookie=setCk?json[setCk]:"";if(Array.isArray(cookie)){cookie=cookie.join(";")}if(!all_cookie){cookie=cookie.split(";")[0]}html=json.body;return{cookie:cookie,html:html}}fetch=request;print=function(data){data=data||"";if(typeof data=="object"&&Object.keys(data).length>0){try{data=JSON.stringify(data);console.log(data)}catch(e){console.log(typeof data+":"+data.length);return}}else if(typeof data=="object"&&Object.keys(data).length<1){console.log("null object")}else{console.log(data)}};log=print;function checkHtml(html,url,obj){if(/\?btwaf=/.test(html)){let btwaf=html.match(/btwaf(.*?)"/)[1];url=url.split("#")[0]+"?btwaf"+btwaf;print("宝塔验证访问链接:"+url);html=request(url,obj)}return html}function getCode(url,obj){let html=request(url,obj);html=checkHtml(html,url,obj);return html}function getHtml(url){let obj={};if(rule.headers){obj.headers=rule.headers}let cookie=getItem(RULE_CK,"");if(cookie){if(obj.headers&&!Object.keys(obj.headers).map(it=>it.toLowerCase()).includes("cookie")){log("历史无cookie,新增过验证后的cookie");obj.headers["Cookie"]=cookie}else if(obj.headers&&obj.headers.cookie&&obj.headers.cookie!==cookie){obj.headers["Cookie"]=cookie;log("历史有小写过期的cookie,更新过验证后的cookie")}else if(obj.headers&&obj.headers.Cookie&&obj.headers.Cookie!==cookie){obj.headers["Cookie"]=cookie;log("历史有大写过期的cookie,更新过验证后的cookie")}else if(!obj.headers){obj.headers={Cookie:cookie};log("历史无headers,更新过验证后的含cookie的headers")}}let html=getCode(url,obj);return html}function homeParse(homeObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let classes=[];if(homeObj.class_name&&homeObj.class_url){let names=homeObj.class_name.split("&");let urls=homeObj.class_url.split("&");let cnt=Math.min(names.length,urls.length);for(let i=0;i0){classes=list}}}catch(e){console.log(e.message)}}else if(p.length>=3&&!is_json){try{let html=homeObj.home_html||getHtml(homeObj.MY_URL);if(html){homeHtmlCache=html;let list=_pdfa(html,p0);if(list&&list.length>0){list.forEach((it,idex)=>{try{let name=_pdfh(it,p[1]);if(homeObj.cate_exclude&&new RegExp(homeObj.cate_exclude).test(name)){return}let url=_pd(it,p[2]);if(p.length>3&&p[3]&&!homeObj.home_html){let exp=new RegExp(p[3]);url=url.match(exp)[1]}classes.push({type_id:url.trim(),type_name:name.trim()})}catch(e){console.log(`分类列表定位第${idex}个元素正常报错:${e.message}`)}})}}}catch(e){console.log(e.message)}}}}classes=classes.filter(it=>!homeObj.cate_exclude||!new RegExp(homeObj.cate_exclude).test(it.type_name));let resp={class:classes};if(homeObj.filter){resp.filters=homeObj.filter}console.log(JSON.stringify(resp));return JSON.stringify(resp)}function getPP(p,pn,pp,ppn){try{let ps=p[pn]==="*"&&pp.length>ppn?pp[ppn]:p[pn];return ps}catch(e){return""}}function homeVodParse(homeVodObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let d=[];MY_URL=homeVodObj.homeUrl;console.log(MY_URL);let t1=(new Date).getTime();let p=homeVodObj.推荐;print("p:"+p);if(p==="*"&&rule.一级){p=rule.一级;homeVodObj.double=false}if(!p||typeof p!=="string"){return"{}"}p=p.trim();let pp=rule.一级?rule.一级.split(";"):[];if(p.startsWith("js:")){const TYPE="home";var input=MY_URL;HOST=rule.host;eval(p.replace("js:",""));d=VODS}else{p=p.split(";");if(!homeVodObj.double&&p.length<5){return"{}"}else if(homeVodObj.double&&p.length<6){return"{}"}let p0=getPP(p,0,pp,0);let _ps=parseTags.getParse(p0);_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;let is_json=p0.startsWith("json:");p0=p0.replace(/^(jsp:|json:|jq:)/,"");let html=homeHtmlCache||getHtml(MY_URL);homeHtmlCache=undefined;if(is_json){html=dealJson(html)}try{console.log("double:"+homeVodObj.double);if(homeVodObj.double){let items=_pdfa(html,p0);let p1=getPP(p,1,pp,0);let p2=getPP(p,2,pp,1);let p3=getPP(p,3,pp,2);let p4=getPP(p,4,pp,3);let p5=getPP(p,5,pp,4);let p6=getPP(p,6,pp,5);for(let item of items){let items2=_pdfa(item,p1);for(let item2 of items2){try{let title=_pdfh(item2,p2);let img="";try{img=_pd(item2,p3)}catch(e){}let desc="";try{desc=_pdfh(item2,p4)}catch(e){}let links=[];for(let _p5 of p5.split("+")){let link=!homeVodObj.detailUrl?_pd(item2,_p5,MY_URL):_pdfh(item2,_p5);links.push(link)}let content;if(p.length>6&&p[6]){content=_pdfh(item2,p6)}else{content=""}let vid=links.join("$");if(rule.二级==="*"){vid=vid+"@@"+title+"@@"+img}let vod={vod_name:title,vod_pic:img,vod_remarks:desc,vod_content:content,vod_id:vid};d.push(vod)}catch(e){console.log(`首页列表双层定位处理发生错误:${e.message}`)}}}}else{let items=_pdfa(html,p0);let p1=getPP(p,1,pp,1);let p2=getPP(p,2,pp,2);let p3=getPP(p,3,pp,3);let p4=getPP(p,4,pp,4);let p5=getPP(p,5,pp,5);for(let item of items){try{let title=_pdfh(item,p1);let img="";try{img=_pd(item,p2,MY_URL)}catch(e){}let desc="";try{desc=_pdfh(item,p3)}catch(e){}let links=[];for(let _p5 of p4.split("+")){let link=!homeVodObj.detailUrl?_pd(item,_p5,MY_URL):_pdfh(item,_p5);links.push(link)}let content;if(p.length>5&&p[5]){content=_pdfh(item,p5)}else{content=""}let vid=links.join("$");if(rule.二级==="*"){vid=vid+"@@"+title+"@@"+img}let vod={vod_name:title,vod_pic:img,vod_remarks:desc,vod_content:content,vod_id:vid};d.push(vod)}catch(e){console.log(`首页列表单层定位处理发生错误:${e.message}`)}}}}catch(e){}}let t2=(new Date).getTime();console.log("加载首页推荐耗时:"+(t2-t1)+"毫秒");if(rule.图片替换){if(rule.图片替换.startsWith("js:")){d.forEach(it=>{try{var input=it.vod_pic;eval(rule.图片替换.trim().replace("js:",""));it.vod_pic=input}catch(e){log(`图片:${it.vod_pic}替换错误:${e.message}`)}})}else if(rule.图片替换.includes("=>")){let replace_from=rule.图片替换.split("=>")[0];let replace_to=rule.图片替换.split("=>")[1];d.forEach(it=>{if(it.vod_pic&&it.vod_pic.startsWith("http")){it.vod_pic=it.vod_pic.replace(replace_from,replace_to)}})}}if(rule.图片来源){d.forEach(it=>{if(it.vod_pic&&it.vod_pic.startsWith("http")){it.vod_pic=it.vod_pic+rule.图片来源}})}if(d.length>0){print(d.slice(0,2))}return JSON.stringify({list:d})}function categoryParse(cateObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let p=cateObj.一级;if(!p||typeof p!=="string"){return"{}"}let d=[];let url=cateObj.url.replaceAll("fyclass",cateObj.tid);if(cateObj.pg===1&&url.includes("[")&&url.includes("]")){url=url.split("[")[1].split("]")[0]}else if(cateObj.pg>1&&url.includes("[")&&url.includes("]")){url=url.split("[")[0]}if(rule.filter_url){if(!/fyfilter/.test(url)){if(!url.endsWith("&")&&!rule.filter_url.startsWith("&")){url+="&"}url+=rule.filter_url}else{url=url.replace("fyfilter",rule.filter_url)}url=url.replaceAll("fyclass",cateObj.tid);let fl=cateObj.filter?cateObj.extend:{};if(rule.filter_def&&typeof rule.filter_def==="object"){try{if(Object.keys(rule.filter_def).length>0&&rule.filter_def.hasOwnProperty(cateObj.tid)){let self_fl_def=rule.filter_def[cateObj.tid];if(self_fl_def&&typeof self_fl_def==="object"){let fl_def=JSON.parse(JSON.stringify(self_fl_def));fl=Object.assign(fl_def,fl)}}}catch(e){print(`合并不同分类对应的默认筛选出错:${e.message}`)}}let new_url;new_url=cheerio.jinja2(url,{fl:fl,fyclass:cateObj.tid});url=new_url}if(/fypage/.test(url)){if(url.includes("(")&&url.includes(")")){let url_rep=url.match(/.*?\((.*)\)/)[1];let cnt_page=url_rep.replaceAll("fypage",cateObj.pg);let cnt_pg=eval(cnt_page);url=url.replaceAll(url_rep,cnt_pg).replaceAll("(","").replaceAll(")","")}else{url=url.replaceAll("fypage",cateObj.pg)}}MY_URL=url;console.log(MY_URL);p=p.trim();const MY_CATE=cateObj.tid;if(p.startsWith("js:")){var MY_FL=cateObj.extend;const TYPE="cate";var input=MY_URL;const MY_PAGE=cateObj.pg;var desc="";eval(p.trim().replace("js:",""));d=VODS}else{p=p.split(";");if(p.length<5){return"{}"}let _ps=parseTags.getParse(p[0]);_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;let is_json=p[0].startsWith("json:");p[0]=p[0].replace(/^(jsp:|json:|jq:)/,"");try{let html=getHtml(MY_URL);if(html){if(is_json){html=dealJson(html)}let list=_pdfa(html,p[0]);list.forEach(it=>{let links=p[4].split("+").map(p4=>{return!rule.detailUrl?_pd(it,p4,MY_URL):_pdfh(it,p4)});let link=links.join("$");let vod_id=rule.detailUrl?MY_CATE+"$"+link:link;let vod_name=_pdfh(it,p[1]).replace(/\n|\t/g,"").trim();let vod_pic=_pd(it,p[2],MY_URL);if(rule.二级==="*"){vod_id=vod_id+"@@"+vod_name+"@@"+vod_pic}d.push({vod_id:vod_id,vod_name:vod_name,vod_pic:vod_pic,vod_remarks:_pdfh(it,p[3]).replace(/\n|\t/g,"").trim()})})}}catch(e){console.log(e.message)}}if(rule.图片替换){if(rule.图片替换.startsWith("js:")){d.forEach(it=>{try{var input=it.vod_pic;eval(rule.图片替换.trim().replace("js:",""));it.vod_pic=input}catch(e){log(`图片:${it.vod_pic}替换错误:${e.message}`)}})}else if(rule.图片替换.includes("=>")){let replace_from=rule.图片替换.split("=>")[0];let replace_to=rule.图片替换.split("=>")[1];d.forEach(it=>{if(it.vod_pic&&it.vod_pic.startsWith("http")){it.vod_pic=it.vod_pic.replace(replace_from,replace_to)}})}}if(rule.图片来源){d.forEach(it=>{if(it.vod_pic&&it.vod_pic.startsWith("http")){it.vod_pic=it.vod_pic+rule.图片来源}})}if(d.length>0){print(d.slice(0,2))}let pagecount=0;if(rule.pagecount&&typeof rule.pagecount==="object"&&rule.pagecount.hasOwnProperty(MY_CATE)){print(`MY_CATE:${MY_CATE},pagecount:${JSON.stringify(rule.pagecount)}`);pagecount=parseInt(rule.pagecount[MY_CATE])}let nodata={list:[{vod_name:"无数据,防无限请求",vod_id:"no_data",vod_remarks:"不要点,会崩的",vod_pic:"https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/404.jpg"}],total:1,pagecount:1,page:1,limit:1};let vod=d.length<1?JSON.stringify(nodata):JSON.stringify({page:parseInt(cateObj.pg),pagecount:pagecount||999,limit:20,total:999,list:d});return vod}function searchParse(searchObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let d=[];if(!searchObj.searchUrl){return"{}"}let p=searchObj.搜索==="*"&&rule.一级?rule.一级:searchObj.搜索;if(!p||typeof p!=="string"){return"{}"}p=p.trim();let pp=rule.一级?rule.一级.split(";"):[];let url=searchObj.searchUrl.replaceAll("**",searchObj.wd);if(searchObj.pg===1&&url.includes("[")&&url.includes("]")&&!url.includes("#")){url=url.split("[")[1].split("]")[0]}else if(searchObj.pg>1&&url.includes("[")&&url.includes("]")&&!url.includes("#")){url=url.split("[")[0]}if(/fypage/.test(url)){if(url.includes("(")&&url.includes(")")){let url_rep=url.match(/.*?\((.*)\)/)[1];let cnt_page=url_rep.replaceAll("fypage",searchObj.pg);let cnt_pg=eval(cnt_page);url=url.replaceAll(url_rep,cnt_pg).replaceAll("(","").replaceAll(")","")}else{url=url.replaceAll("fypage",searchObj.pg)}}MY_URL=url;console.log(MY_URL);if(p.startsWith("js:")){const TYPE="search";const MY_PAGE=searchObj.pg;const KEY=searchObj.wd;var input=MY_URL;var detailUrl=rule.detailUrl||"";eval(p.trim().replace("js:",""));d=VODS}else{p=p.split(";");if(p.length<5){return"{}"}let p0=getPP(p,0,pp,0);let _ps=parseTags.getParse(p0);_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;let is_json=p0.startsWith("json:");p0=p0.replace(/^(jsp:|json:|jq:)/,"");try{let req_method=MY_URL.split(";").length>1?MY_URL.split(";")[1].toLowerCase():"get";let html;if(req_method==="post"){let rurls=MY_URL.split(";")[0].split("#");let rurl=rurls[0];let params=rurls.length>1?rurls[1]:"";print(`post=》rurl:${rurl},params:${params}`);let _fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let postData={body:params};Object.assign(_fetch_params,postData);html=post(rurl,_fetch_params)}else if(req_method==="postjson"){let rurls=MY_URL.split(";")[0].split("#");let rurl=rurls[0];let params=rurls.length>1?rurls[1]:"";print(`postjson-》rurl:${rurl},params:${params}`);try{params=JSON.parse(params)}catch(e){params="{}"}let _fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let postData={body:params};Object.assign(_fetch_params,postData);html=post(rurl,_fetch_params)}else{html=getHtml(MY_URL)}if(html){if(/系统安全验证|输入验证码/.test(html)){let cookie=verifyCode(MY_URL);if(cookie){console.log(`本次成功过验证,cookie:${cookie}`);setItem(RULE_CK,cookie)}else{console.log(`本次自动过搜索验证失败,cookie:${cookie}`)}html=getHtml(MY_URL)}if(!html.includes(searchObj.wd)){console.log("搜索结果源码未包含关键字,疑似搜索失败,正为您打印结果源码");console.log(html)}if(is_json){html=dealJson(html)}let list=_pdfa(html,p0);let p1=getPP(p,1,pp,1);let p2=getPP(p,2,pp,2);let p3=getPP(p,3,pp,3);let p4=getPP(p,4,pp,4);let p5=getPP(p,5,pp,5);list.forEach(it=>{let links=p4.split("+").map(_p4=>{return!rule.detailUrl?_pd(it,_p4,MY_URL):_pdfh(it,_p4)});let link=links.join("$");let content;if(p.length>5&&p[5]){content=_pdfh(it,p5)}else{content=""}let vod_id=link;let vod_name=_pdfh(it,p1).replace(/\n|\t/g,"").trim();let vod_pic=_pd(it,p2,MY_URL);if(rule.二级==="*"){vod_id=vod_id+"@@"+vod_name+"@@"+vod_pic}let ob={vod_id:vod_id,vod_name:vod_name,vod_pic:vod_pic,vod_remarks:_pdfh(it,p3).replace(/\n|\t/g,"").trim(),vod_content:content.replace(/\n|\t/g,"").trim()};d.push(ob)})}}catch(e){print(`搜索发生错误:${e.message}`);return"{}"}}if(rule.图片替换){if(rule.图片替换.startsWith("js:")){d.forEach(it=>{try{var input=it.vod_pic;eval(rule.图片替换.trim().replace("js:",""));it.vod_pic=input}catch(e){log(`图片:${it.vod_pic}替换错误:${e.message}`)}})}else if(rule.图片替换.includes("=>")){let replace_from=rule.图片替换.split("=>")[0];let replace_to=rule.图片替换.split("=>")[1];d.forEach(it=>{if(it.vod_pic&&it.vod_pic.startsWith("http")){it.vod_pic=it.vod_pic.replace(replace_from,replace_to)}})}}if(rule.图片来源){d.forEach(it=>{if(it.vod_pic&&it.vod_pic.startsWith("http")){it.vod_pic=it.vod_pic+rule.图片来源}})}return JSON.stringify({page:parseInt(searchObj.pg),pagecount:10,limit:20,total:100,list:d})}function detailParse(detailObj){let t1=(new Date).getTime();fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let orId=detailObj.orId;let vod_name="片名";let vod_pic="";let vod_id=orId;if(rule.二级==="*"){let extra=orId.split("@@");vod_name=extra.length>1?extra[1]:vod_name;vod_pic=extra.length>2?extra[2]:vod_pic}let vod={vod_id:vod_id,vod_name:vod_name,vod_pic:vod_pic,type_name:"类型",vod_year:"年份",vod_area:"地区",vod_remarks:"更新信息",vod_actor:"主演",vod_director:"导演",vod_content:"简介"};let p=detailObj.二级;let url=detailObj.url;let detailUrl=detailObj.detailUrl;let fyclass=detailObj.fyclass;let tab_exclude=detailObj.tab_exclude;let html=detailObj.html||"";MY_URL=url;if(detailObj.二级访问前){try{print(`尝试在二级访问前执行代码:${detailObj.二级访问前}`);eval(detailObj.二级访问前.trim().replace("js:",""))}catch(e){print(`二级访问前执行代码出现错误:${e.message}`)}}if(p==="*"){vod.vod_play_from="免费分享";vod.vod_remarks=detailUrl;vod.vod_actor="没有二级,只有一级链接直接嗅探播放";vod.vod_content=MY_URL;vod.vod_play_url="嗅探播放$"+MY_URL.split("@@")[0]}else if(typeof p==="string"&&p.trim().startsWith("js:")){const TYPE="detail";var input=MY_URL;var play_url="";eval(p.trim().replace("js:",""));vod=VOD;console.log(JSON.stringify(vod))}else if(p&&typeof p==="object"){let tt1=(new Date).getTime();if(!html){html=getHtml(MY_URL)}print(`二级${MY_URL}仅获取源码耗时:${(new Date).getTime()-tt1}毫秒`);let _ps;if(p.is_json){print("二级是json");_ps=parseTags.json;html=dealJson(html)}else if(p.is_jsp){print("二级是jsp");_ps=parseTags.jsp}else if(p.is_jq){print("二级是jq");_ps=parseTags.jq}else{print("二级默认jq");_ps=parseTags.jq}let tt2=(new Date).getTime();print(`二级${MY_URL}获取并装载源码耗时:${tt2-tt1}毫秒`);_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;if(p.title){let p1=p.title.split(";");vod.vod_name=_pdfh(html,p1[0]).replace(/\n|\t/g,"").trim();let type_name=p1.length>1?_pdfh(html,p1[1]).replace(/\n|\t/g,"").replace(/ /g,"").trim():"";vod.type_name=type_name||vod.type_name}if(p.desc){try{let p1=p.desc.split(";");vod.vod_remarks=_pdfh(html,p1[0]).replace(/\n|\t/g,"").trim();vod.vod_year=p1.length>1?_pdfh(html,p1[1]).replace(/\n|\t/g,"").trim():"";vod.vod_area=p1.length>2?_pdfh(html,p1[2]).replace(/\n|\t/g,"").trim():"";vod.vod_actor=p1.length>3?_pdfh(html,p1[3]).replace(/\n|\t/g,"").trim():"";vod.vod_director=p1.length>4?_pdfh(html,p1[4]).replace(/\n|\t/g,"").trim():""}catch(e){}}if(p.content){try{let p1=p.content.split(";");vod.vod_content=_pdfh(html,p1[0]).replace(/\n|\t/g,"").trim()}catch(e){}}if(p.img){try{let p1=p.img.split(";");vod.vod_pic=_pd(html,p1[0],MY_URL)}catch(e){}}let vod_play_from="$$$";let playFrom=[];if(p.重定向&&p.重定向.startsWith("js:")){print("开始执行重定向代码:"+p.重定向);html=eval(p.重定向.replace("js:",""))}if(p.tabs){if(p.tabs.startsWith("js:")){print("开始执行tabs代码:"+p.tabs);var input=MY_URL;eval(p.tabs.replace("js:",""));playFrom=TABS}else{let p_tab=p.tabs.split(";")[0];let vHeader=_pdfa(html,p_tab);console.log(vHeader.length);let tab_text=p.tab_text||"body&&Text";let new_map={};for(let v of vHeader){let v_title=_pdfh(v,tab_text).trim();if(!v_title){v_title="线路空"}console.log(v_title);if(tab_exclude&&new RegExp(tab_exclude).test(v_title)){continue}if(!new_map.hasOwnProperty(v_title)){new_map[v_title]=1}else{new_map[v_title]+=1}if(new_map[v_title]>1){v_title+=Number(new_map[v_title]-1)}playFrom.push(v_title)}}console.log(JSON.stringify(playFrom))}else{playFrom=["免费分享"]}vod.vod_play_from=playFrom.join(vod_play_from);let vod_play_url="$$$";let vod_tab_list=[];if(p.lists){if(p.lists.startsWith("js:")){print("开始执行lists代码:"+p.lists);try{var input=MY_URL;var play_url="";eval(p.lists.replace("js:",""));for(let i in LISTS){if(LISTS.hasOwnProperty(i)){try{LISTS[i]=LISTS[i].map(it=>it.split("$").slice(0,2).join("$"))}catch(e){print(`格式化LISTS发生错误:${e.message}`)}}}vod_play_url=LISTS.map(it=>it.join("#")).join(vod_play_url)}catch(e){print(`js执行lists: 发生错误:${e.message}`)}}else{let list_text=p.list_text||"body&&Text";let list_url=p.list_url||"a&&href";let list_url_prefix=p.list_url_prefix||"";let is_tab_js=p.tabs.trim().startsWith("js:");for(let i=0;i1&&!is_tab_js?p.tabs.split(";")[1]:"";let p1=p.lists.replaceAll("#idv",tab_name).replaceAll("#id",i);tab_ext=tab_ext.replaceAll("#idv",tab_name).replaceAll("#id",i);let tabName=tab_ext?_pdfh(html,tab_ext):tab_name;console.log(tabName);let new_vod_list=[];let tt1=(new Date).getTime();if(typeof pdfl==="function"){new_vod_list=pdfl(html,p1,list_text,list_url,MY_URL);if(list_url_prefix){new_vod_list=new_vod_list.map(it=>it.split("$")[0]+"$"+list_url_prefix+it.split("$").slice(1).join("$"))}}else{let vodList=[];try{vodList=_pdfa(html,p1);console.log("len(vodList):"+vodList.length)}catch(e){}for(let i=0;i0){new_vod_list=forceOrder(new_vod_list,"",x=>x.split("$")[0]);console.log(`drpy影响性能代码共计列表数循环次数:${new_vod_list.length},耗时:${(new Date).getTime()-tt1}毫秒`)}let vlist=new_vod_list.join("#");vod_tab_list.push(vlist)}vod_play_url=vod_tab_list.join(vod_play_url)}}vod.vod_play_url=vod_play_url}if(rule.图片替换&&rule.图片替换.includes("=>")){let replace_from=rule.图片替换.split("=>")[0];let replace_to=rule.图片替换.split("=>")[1];vod.vod_pic=vod.vod_pic.replace(replace_from,replace_to)}if(rule.图片来源&&vod.vod_pic&&vod.vod_pic.startsWith("http")){vod.vod_pic=vod.vod_pic+rule.图片来源}if(!vod.vod_id||vod_id.includes("$")&&vod.vod_id!==vod_id){vod.vod_id=vod_id}let t2=(new Date).getTime();console.log(`加载二级界面${MY_URL}耗时:${t2-t1}毫秒`);try{vod=vodDeal(vod)}catch(e){console.log(`vodDeal发生错误:${e.message}`)}return JSON.stringify({list:[vod]})}function get_tab_index(vod){let obj={};vod.vod_play_from.split("$$$").forEach((it,index)=>{obj[it]=index});return obj}function vodDeal(vod){let vod_play_from=vod.vod_play_from.split("$$$");let vod_play_url=vod.vod_play_url.split("$$$");let tab_removed_list=vod_play_from;let tab_ordered_list=vod_play_from;let tab_renamed_list=vod_play_from;let tab_list=vod_play_from;let play_ordered_list=vod_play_url;if(rule.tab_remove&&rule.tab_remove.length>0||rule.tab_order&&rule.tab_order.length>0){let tab_index_dict=get_tab_index(vod);if(rule.tab_remove&&rule.tab_remove.length>0){tab_removed_list=vod_play_from.filter(it=>!rule.tab_remove.includes(it));tab_list=tab_removed_list}if(rule.tab_order&&rule.tab_order.length>0){let tab_order=rule.tab_order;tab_ordered_list=tab_removed_list.sort((a,b)=>{return(tab_order.indexOf(a)===-1?9999:tab_order.indexOf(a))-(tab_order.indexOf(b)===-1?9999:tab_order.indexOf(b))});tab_list=tab_ordered_list}play_ordered_list=tab_list.map(it=>vod_play_url[tab_index_dict[it]])}if(rule.tab_rename&&typeof rule.tab_rename==="object"&Object.keys(rule.tab_rename).length>0){tab_renamed_list=tab_list.map(it=>rule.tab_rename[it]||it);tab_list=tab_renamed_list}vod.vod_play_from=tab_list.join("$$$");vod.vod_play_url=play_ordered_list.join("$$$");return vod}function tellIsJx(url){try{let is_vip=!/\.(m3u8|mp4|m4a)$/.test(url.split("?")[0])&&是否正版(url);return is_vip?1:0}catch(e){return 1}}function playParse(playObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));MY_URL=playObj.url;var MY_FLAG=playObj.flag;if(!/http/.test(MY_URL)){try{MY_URL=base64Decode(MY_URL)}catch(e){}}MY_URL=decodeURIComponent(MY_URL);var input=MY_URL;var flag=MY_FLAG;let common_play={parse:SPECIAL_URL.test(input)||/^(push:)/.test(input)?0:1,url:input,flag:flag,jx:tellIsJx(input)};let lazy_play;if(!rule.play_parse||!rule.lazy){lazy_play=common_play}else if(rule.play_parse&&rule.lazy&&typeof rule.lazy==="string"){try{let lazy_code=rule.lazy.trim();if(lazy_code.startsWith("js:")){lazy_code=lazy_code.replace("js:","").trim()}print("开始执行js免嗅=>"+lazy_code);eval(lazy_code);lazy_play=typeof input==="object"?input:{parse:SPECIAL_URL.test(input)||/^(push:)/.test(input)?0:1,jx:tellIsJx(input),url:input}}catch(e){print(`js免嗅错误:${e.message}`);lazy_play=common_play}}else{lazy_play=common_play}if(Array.isArray(rule.play_json)&&rule.play_json.length>0){let web_url=lazy_play.url;for(let pjson of rule.play_json){if(pjson.re&&(pjson.re==="*"||web_url.match(new RegExp(pjson.re)))){if(pjson.json&&typeof pjson.json==="object"){let base_json=pjson.json;lazy_play=Object.assign(lazy_play,base_json);break}}}}else if(rule.play_json&&!Array.isArray(rule.play_json)){let base_json={jx:1,parse:1};lazy_play=Object.assign(lazy_play,base_json)}else if(!rule.play_json){let base_json={jx:0,parse:1};lazy_play=Object.assign(lazy_play,base_json)}console.log(JSON.stringify(lazy_play));return JSON.stringify(lazy_play)}function proxyParse(proxyObj){var input=proxyObj.params;if(proxyObj.proxy_rule){log("准备执行本地代理规则:\n"+proxyObj.proxy_rule);try{eval(proxyObj.proxy_rule);if(input&&input!==proxyObj.params&&Array.isArray(input)&&input.length>=3){return input}else{return[404,"text/plain","Not Found"]}}catch(e){return[500,"text/plain","代理规则错误:"+e.message]}}else{return[404,"text/plain","Not Found"]}}function isVideoParse(isVideoObj){var input=isVideoObj.url;if(!isVideoObj.t){let re_matcher=new RegExp(isVideoObj.isVideo,"i");return re_matcher.test(input)}else{try{eval(isVideoObj.isVideo);if(typeof input==="boolean"){return input}else{return false}}catch(e){log(`执行嗅探规则发生错误:${e.message}`);return false}}}function getOriginalJs(js_code){let current_match=/var rule|[\u4E00-\u9FA5]+|function|let |var |const |\(|\)|"|'/;if(current_match.test(js_code)){return js_code}let rsa_private_key="MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCqin/jUpqM6+fgYP/oMqj9zcdHMM0mEZXLeTyixIJWP53lzJV2N2E3OP6BBpUmq2O1a9aLnTIbADBaTulTNiOnVGoNG58umBnupnbmmF8iARbDp2mTzdMMeEgLdrfXS6Y3VvazKYALP8EhEQykQVarexR78vRq7ltY3quXx7cgI0ROfZz5Sw3UOLQJ+VoWmwIxu9AMEZLVzFDQN93hzuzs3tNyHK6xspBGB7zGbwCg+TKi0JeqPDrXxYUpAz1cQ/MO+Da0WgvkXnvrry8NQROHejdLVOAslgr6vYthH9bKbsGyNY3H+P12kcxo9RAcVveONnZbcMyxjtF5dWblaernAgMBAAECggEAGdEHlSEPFmAr5PKqKrtoi6tYDHXdyHKHC5tZy4YV+Pp+a6gxxAiUJejx1hRqBcWSPYeKne35BM9dgn5JofgjI5SKzVsuGL6bxl3ayAOu+xXRHWM9f0t8NHoM5fdd0zC3g88dX3fb01geY2QSVtcxSJpEOpNH3twgZe6naT2pgiq1S4okpkpldJPo5GYWGKMCHSLnKGyhwS76gF8bTPLoay9Jxk70uv6BDUMlA4ICENjmsYtd3oirWwLwYMEJbSFMlyJvB7hjOjR/4RpT4FPnlSsIpuRtkCYXD4jdhxGlvpXREw97UF2wwnEUnfgiZJ2FT/MWmvGGoaV/CfboLsLZuQKBgQDTNZdJrs8dbijynHZuuRwvXvwC03GDpEJO6c1tbZ1s9wjRyOZjBbQFRjDgFeWs9/T1aNBLUrgsQL9c9nzgUziXjr1Nmu52I0Mwxi13Km/q3mT+aQfdgNdu6ojsI5apQQHnN/9yMhF6sNHg63YOpH+b+1bGRCtr1XubuLlumKKscwKBgQDOtQ2lQjMtwsqJmyiyRLiUOChtvQ5XI7B2mhKCGi8kZ+WEAbNQcmThPesVzW+puER6D4Ar4hgsh9gCeuTaOzbRfZ+RLn3Aksu2WJEzfs6UrGvm6DU1INn0z/tPYRAwPX7sxoZZGxqML/z+/yQdf2DREoPdClcDa2Lmf1KpHdB+vQKBgBXFCVHz7a8n4pqXG/HvrIMJdEpKRwH9lUQS/zSPPtGzaLpOzchZFyQQBwuh1imM6Te+VPHeldMh3VeUpGxux39/m+160adlnRBS7O7CdgSsZZZ/dusS06HAFNraFDZf1/VgJTk9BeYygX+AZYu+0tReBKSs9BjKSVJUqPBIVUQXAoGBAJcZ7J6oVMcXxHxwqoAeEhtvLcaCU9BJK36XQ/5M67ceJ72mjJC6/plUbNukMAMNyyi62gO6I9exearecRpB/OGIhjNXm99Ar59dAM9228X8gGfryLFMkWcO/fNZzb6lxXmJ6b2LPY3KqpMwqRLTAU/zy+ax30eFoWdDHYa4X6e1AoGAfa8asVGOJ8GL9dlWufEeFkDEDKO9ww5GdnpN+wqLwePWqeJhWCHad7bge6SnlylJp5aZXl1+YaBTtOskC4Whq9TP2J+dNIgxsaF5EFZQJr8Xv+lY9lu0CruYOh9nTNF9x3nubxJgaSid/7yRPfAGnsJRiknB5bsrCvgsFQFjJVs=";let decode_content="";function aes_decrypt(data){let key=CryptoJS.enc.Hex.parse("686A64686E780A0A0A0A0A0A0A0A0A0A");let iv=CryptoJS.enc.Hex.parse("647A797964730A0A0A0A0A0A0A0A0A0A");let encrypted=CryptoJS.AES.decrypt({ciphertext:CryptoJS.enc.Base64.parse(data)},key,{iv:iv,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8);return encrypted}let error_log=false;function logger(text){if(error_log){log(text)}}let decode_funcs=[text=>{try{return ungzip(text)}catch(e){logger("非gzip加密");return""}},text=>{try{return base64Decode(text)}catch(e){logger("非b64加密");return""}},text=>{try{return aes_decrypt(text)}catch(e){logger("非aes加密");return""}},text=>{try{return RSA.decode(text,rsa_private_key,null)}catch(e){logger("非rsa加密");return""}}];let func_index=0;while(!current_match.test(decode_content)){decode_content=decode_funcs[func_index](js_code);func_index++;if(func_index>=decode_funcs.length){break}}return decode_content}function runMain(main_func_code,arg){let mainFunc=function(){return""};try{eval(main_func_code+"\nmainFunc=main;");return mainFunc(arg)}catch(e){log(`执行main_funct发生了错误:${e.message}`);return""}}function init(ext){console.log("init");rule={};rule_fetch_params={};fetch_params=null;try{let muban=模板.getMubans();if(typeof ext=="object"){rule=ext}else if(typeof ext=="string"){if(ext.startsWith("http")||ext.startsWith("file://")){let query=getQuery(ext);let js=request(ext,{method:"GET"});if(js){js=getOriginalJs(js);eval("(function(){"+js.replace("var rule","rule")+"})()")}if(query.type==="url"&&query.params){rule.params=urljoin(ext,query.params)}else if(query.params){rule.params=query.params}}else{ext=getOriginalJs(ext);eval("(function(){"+ext.replace("var rule","rule")+"})()")}}else{console.log(`规则加载失败,不支持的规则类型:${typeof ext}`);return}rule.host=(rule.host||"").rstrip("/");HOST=rule.host;if(rule.hostJs){console.log(`检测到hostJs,准备执行...`);try{eval(rule.hostJs);rule.host=HOST.rstrip("/")}catch(e){console.log(`执行${rule.hostJs}获取host发生错误:${e.message}`)}}if(rule["模板"]==="自动"){try{let host_headers=rule["headers"]||{};let host_html=getCode(HOST,{headers:host_headers});let match_muban="";let muban_keys=Object.keys(muban).filter(it=>!/默认|短视2|采集1/.test(it));for(let muban_key of muban_keys){try{let host_data=JSON.parse(home({},host_html,muban[muban_key].class_parse));if(host_data.class&&host_data.class.length>0){match_muban=muban_key;console.log(`自动匹配模板:【${muban_key}】`);break}}catch(e){console.log(`自动匹配模板:【${muban_key}】错误:${e.message}`)}}if(match_muban){muban["自动"]=muban[match_muban];if(rule["模板修改"]&&rule["模板修改"].startsWith("js:")){eval(rule["模板修改"].replace("js:","").trim())}}else{delete rule["模板"]}}catch(e){delete rule["模板"]}}if(rule.模板&&muban.hasOwnProperty(rule.模板)){print("继承模板:"+rule.模板);rule=Object.assign(muban[rule.模板],rule)}let rule_cate_excludes=(rule.cate_exclude||"").split("|").filter(it=>it.trim());let rule_tab_excludes=(rule.tab_exclude||"").split("|").filter(it=>it.trim());rule_cate_excludes=rule_cate_excludes.concat(CATE_EXCLUDE.split("|").filter(it=>it.trim()));rule_tab_excludes=rule_tab_excludes.concat(TAB_EXCLUDE.split("|").filter(it=>it.trim()));rule.cate_exclude=rule_cate_excludes.join("|");rule.tab_exclude=rule_tab_excludes.join("|");rule.类型=rule.类型||"影视";rule.url=rule.url||"";rule.double=rule.double||false;rule.homeUrl=rule.homeUrl||"";rule.detailUrl=rule.detailUrl||"";rule.searchUrl=rule.searchUrl||"";rule.homeUrl=rule.host&&rule.homeUrl?urljoin(rule.host,rule.homeUrl):rule.homeUrl||rule.host;rule.homeUrl=cheerio.jinja2(rule.homeUrl,{rule:rule});rule.detailUrl=rule.host&&rule.detailUrl?urljoin(rule.host,rule.detailUrl):rule.detailUrl;rule.二级访问前=rule.二级访问前||"";if(rule.url.includes("[")&&rule.url.includes("]")){let u1=rule.url.split("[")[0];let u2=rule.url.split("[")[1].split("]")[0];rule.url=rule.host&&rule.url?urljoin(rule.host,u1)+"["+urljoin(rule.host,u2)+"]":rule.url}else{rule.url=rule.host&&rule.url?urljoin(rule.host,rule.url):rule.url}if(rule.searchUrl.includes("[")&&rule.searchUrl.includes("]")&&!rule.searchUrl.includes("#")){let u1=rule.searchUrl.split("[")[0];let u2=rule.searchUrl.split("[")[1].split("]")[0];rule.searchUrl=rule.host&&rule.searchUrl?urljoin(rule.host,u1)+"["+urljoin(rule.host,u2)+"]":rule.searchUrl}else{rule.searchUrl=rule.host&&rule.searchUrl?urljoin(rule.host,rule.searchUrl):rule.searchUrl}rule.timeout=rule.timeout||5e3;rule.encoding=rule.编码||rule.encoding||"utf-8";rule.search_encoding=rule.搜索编码||rule.search_encoding||"";rule.图片来源=rule.图片来源||"";rule.图片替换=rule.图片替换||"";rule.play_json=rule.hasOwnProperty("play_json")?rule.play_json:[];rule.pagecount=rule.hasOwnProperty("pagecount")?rule.pagecount:{};rule.proxy_rule=rule.hasOwnProperty("proxy_rule")?rule.proxy_rule:"";if(!rule.hasOwnProperty("sniffer")){rule.sniffer=false}rule.sniffer=rule.hasOwnProperty("sniffer")?rule.sniffer:"";rule.sniffer=!!(rule.sniffer&&rule.sniffer!=="0"&&rule.sniffer!=="false");rule.isVideo=rule.hasOwnProperty("isVideo")?rule.isVideo:"";if(rule.sniffer&&!rule.isVideo){rule.isVideo="http((?!http).){12,}?\\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg|m4a|mp3)\\?.*|http((?!http).){12,}\\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg|m4a|mp3)|http((?!http).)*?video/tos*|http((?!http).)*?obj/tos*"}rule.tab_remove=rule.hasOwnProperty("tab_remove")?rule.tab_remove:[];rule.tab_order=rule.hasOwnProperty("tab_order")?rule.tab_order:[];rule.tab_rename=rule.hasOwnProperty("tab_rename")?rule.tab_rename:{};if(rule.headers&&typeof rule.headers==="object"){try{let header_keys=Object.keys(rule.headers);for(let k of header_keys){if(k.toLowerCase()==="user-agent"){let v=rule.headers[k];console.log(v);if(["MOBILE_UA","PC_UA","UC_UA","IOS_UA","UA"].includes(v)){rule.headers[k]=eval(v)}}else if(k.toLowerCase()==="cookie"){let v=rule.headers[k];if(v&&v.startsWith("http")){console.log(v);try{v=fetch(v);console.log(v);rule.headers[k]=v}catch(e){console.log(`从${v}获取cookie发生错误:${e.message}`)}}}}}catch(e){console.log(`处理headers发生错误:${e.message}`)}}rule_fetch_params={headers:rule.headers||false,timeout:rule.timeout,encoding:rule.encoding};oheaders=rule.headers||{};RKEY=typeof key!=="undefined"&&key?key:"drpy_"+(rule.title||rule.host);pre();init_test()}catch(e){console.log(`init_test发生错误:${e.message}`)}}let homeHtmlCache=undefined;function home(filter,home_html,class_parse){console.log("home");home_html=home_html||"";class_parse=class_parse||"";if(typeof rule.filter==="string"&&rule.filter.trim().length>0){try{let filter_json=ungzip(rule.filter.trim());rule.filter=JSON.parse(filter_json)}catch(e){rule.filter={}}}let homeObj={filter:rule.filter||false,MY_URL:rule.homeUrl,class_name:rule.class_name||"",class_url:rule.class_url||"",class_parse:class_parse||rule.class_parse||"",cate_exclude:rule.cate_exclude,home_html:home_html};return homeParse(homeObj)}function homeVod(params){console.log("homeVod");let homeVodObj={"推荐":rule.推荐,double:rule.double,homeUrl:rule.homeUrl,detailUrl:rule.detailUrl};return homeVodParse(homeVodObj)}function category(tid,pg,filter,extend){let cateObj={url:rule.url,"一级":rule.一级,tid:tid,pg:parseInt(pg),filter:filter,extend:extend};return categoryParse(cateObj)}function detail(vod_url){let orId=vod_url;let fyclass="";log("orId:"+orId);if(vod_url.indexOf("$")>-1){let tmp=vod_url.split("$");fyclass=tmp[0];vod_url=tmp[1]}let detailUrl=vod_url.split("@@")[0];let url;if(!detailUrl.startsWith("http")&&!detailUrl.includes("/")){url=rule.detailUrl.replaceAll("fyid",detailUrl).replaceAll("fyclass",fyclass)}else if(detailUrl.includes("/")){url=urljoin(rule.homeUrl,detailUrl)}else{url=detailUrl}let detailObj={orId:orId,url:url,"二级":rule.二级,"二级访问前":rule.二级访问前,detailUrl:detailUrl,fyclass:fyclass,tab_exclude:rule.tab_exclude};return detailParse(detailObj)}function play(flag,id,flags){let playObj={url:id,flag:flag,flags:flags};return playParse(playObj)}function search(wd,quick,pg){if(rule.search_encoding){if(rule.search_encoding.toLowerCase()!=="utf-8"){wd=encodeStr(wd,rule.search_encoding)}}else if(rule.encoding&&rule.encoding.toLowerCase()!=="utf-8"){wd=encodeStr(wd,rule.encoding)}let searchObj={searchUrl:rule.searchUrl,"搜索":rule.搜索,wd:wd,pg:pg||1,quick:quick};return searchParse(searchObj)}function proxy(params){if(rule.proxy_rule&&rule.proxy_rule.trim()){rule.proxy_rule=rule.proxy_rule.trim()}if(rule.proxy_rule.startsWith("js:")){rule.proxy_rule=rule.proxy_rule.replace("js:","")}let proxyObj={params:params,proxy_rule:rule.proxy_rule};return proxyParse(proxyObj)}function sniffer(){let enable_sniffer=rule.sniffer||false;if(enable_sniffer){log("开始执行辅助嗅探代理规则...")}return enable_sniffer}function isVideo(url){let t=0;let is_video;if(rule.isVideo&&rule.isVideo.trim()){is_video=rule.isVideo.trim()}if(is_video.startsWith("js:")){is_video=is_video.replace("js:","");t=1}let isVideoObj={url:url,isVideo:is_video,t:t};let result=isVideoParse(isVideoObj);if(result){log("成功执行辅助嗅探规则并检测到视频地址:\n"+rule.isVideo)}return result}function getRule(key){return key?rule[key]||"":rule}function DRPY(){return{runMain:runMain,getRule:getRule,init:init,home:home,homeVod:homeVod,category:category,detail:detail,play:play,search:search,proxy:proxy,sniffer:sniffer,isVideo:isVideo,fixAdM3u8Ai:fixAdM3u8Ai}}export default{runMain:runMain,getRule:getRule,init:init,home:home,homeVod:homeVod,category:category,detail:detail,play:play,search:search,proxy:proxy,sniffer:sniffer,isVideo:isVideo,fixAdM3u8Ai:fixAdM3u8Ai,DRPY:DRPY}; diff --git a/lib/duboku.json b/lib/duboku.json new file mode 100644 index 0000000..5a63c27 --- /dev/null +++ b/lib/duboku.json @@ -0,0 +1,773 @@ +{ + "author": "takagen99", + "ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36", + "homeUrl": "https://www.duboku.tv/", + "dcVipFlag": "true", + "dcPlayUrl": "true", + "cateNode": "//ul[contains(@class,'nav-menu')]/li/a[contains(@href, 'vodtype')]", + "cateName": "/text()", + "cateId": "/@href", + "cateIdR": "/vodtype/(\\w+).html", + "cateManual": { + "陆剧": "13", + "日韩剧": "15", + "短剧": "21", + "英美剧": "16", + "台泰剧": "14", + "港剧": "20", + "综艺": "3", + "动漫": "4" + }, + "homeVodNode": "//ul[contains(@class,'myui-vodlist')]/li/div/a", + "homeVodName": "/@title", + "homeVodId": "/@href", + "homeVodIdR": "/voddetail/(\\w+).html", + "homeVodImg": "/@data-original", + "homeVodImgR": "\\S+(http\\S+)", + "homeVodMark": "//span[contains(@class,'pic-text')]/text()", + "cateUrl": "https://www.duboku.tv/vodshow/{cateId}-{area}-{by}------{catePg}---{year}.html", + "cateVodNode": "//ul[contains(@class,'myui-vodlist')]/li/div/a", + "cateVodName": "/@title", + "cateVodId": "/@href", + "cateVodIdR": "/voddetail/(\\w+).html", + "cateVodImg": "/@data-original", + "cateVodImgR": "\\S+(http\\S+)", + "cateVodMark": "//span[contains(@class,'pic-text')]/text()", + "dtUrl": "https://w.duboku.io/voddetail/{vid}.html", + "dtNode": "//body", + "dtName": "//div[contains(@class,'myui-content__thumb')]/a/@title", + "dtNameR": "", + "dtImg": "//div[contains(@class,'myui-content__thumb')]/a/img/@data-original", + "dtImgR": "", + "dtCate": "//div[contains(@class,'myui-content__detail')]/p/span[contains(text(), '分类')]/following-sibling::a/text()", + "dtYear": "//div[contains(@class,'myui-content__detail')]/p/span[contains(text(), '年份')]/following-sibling::a/text()", + "dtArea": "//div[contains(@class,'myui-content__detail')]/p/span[contains(text(), '地区')]/following-sibling::a/text()", + "dtMark": "//div[contains(@class,'myui-content__detail')]/p/span[contains(text(), '更新')]/following-sibling::a/text()", + "dtDirector": "//div[contains(@class,'myui-content__detail')]/p/span[contains(text(), '导演')]/following-sibling::a/text()", + "dtActor": "//div[contains(@class,'myui-content__detail')]/p/span[contains(text(), '主演')]/following-sibling::a/text()", + "dtDesc": "//div[contains(@class,'myui-content__detail')]/p/span[contains(text(), '简介')]/following-sibling::a/text()", + "dtFromNode": "//ul[contains(@class,'nav-tabs')]/li/a", + "dtFromName": "/text()", + "dtFromNameR": "", + "dtUrlNode": "//ul[contains(@class,'myui-content__list')]", + "dtUrlSubNode": "/li/a", + "dtUrlId": "/@href", + "dtUrlIdR": "/vodplay/(\\S+).html", + "dtUrlName": "/text()", + "dtUrlNameR": "", + + "playUrl": "https://w.duboku.io/vodplay/{playUrl}.html", + "playUa": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36", + "playReferer": "https://w.duboku.io/", + "searchUrl": "https://w.duboku.io/index.php/ajax/suggest?mid=1&wd={wd}&limit=10", + "scVodNode": "json:list", + "scVodName": "name", + "scVodId": "id", + "scVodIdR": "", + "scVodImg": "pic", + "scVodMark": "", + "filter": { + "13": [ + { + "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" + } + ] + }, + { + "key": "by", + "name": "排序", + "value": [ + { + "n": "排序", + "v": "" + }, + { + "n": "时间", + "v": "time" + }, + { + "n": "人气", + "v": "hits" + }, + { + "n": "评分", + "v": "score" + } + ] + } + ], + "14": [ + { + "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" + } + ] + }, + { + "key": "by", + "name": "排序", + "value": [ + { + "n": "排序", + "v": "" + }, + { + "n": "时间", + "v": "time" + }, + { + "n": "人气", + "v": "hits" + }, + { + "n": "评分", + "v": "score" + } + ] + } + ], + "16": [ + { + "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" + } + ] + }, + { + "key": "by", + "name": "排序", + "value": [ + { + "n": "排序", + "v": "" + }, + { + "n": "时间", + "v": "time" + }, + { + "n": "人气", + "v": "hits" + }, + { + "n": "评分", + "v": "score" + } + ] + } + ], + "15": [ + { + "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" + } + ] + }, + { + "key": "by", + "name": "排序", + "value": [ + { + "n": "排序", + "v": "" + }, + { + "n": "时间", + "v": "time" + }, + { + "n": "人气", + "v": "hits" + }, + { + "n": "评分", + "v": "score" + } + ] + } + ], + "2": [ + { + "key": "cateId", + "name": "类型", + "value": [ + { + "n": "全部", + "v": "" + }, + { + "n": "陆剧", + "v": "13" + }, + { + "n": "日韩剧", + "v": "15" + }, + { + "n": "英美剧", + "v": "16" + }, + { + "n": "台泰剧", + "v": "14" + }, + { + "n": "港剧", + "v": "20" + } + ] + }, + { + "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": "荷兰" + } + ] + }, + { + "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" + } + ] + }, + { + "key": "by", + "name": "排序", + "value": [ + { + "n": "排序", + "v": "" + }, + { + "n": "时间", + "v": "time" + }, + { + "n": "人气", + "v": "hits" + }, + { + "n": "评分", + "v": "score" + } + ] + } + ], + "3": [ + { + "key": "area", + "name": "地区", + "value": [ + { + "n": "全部", + "v": "" + }, + { + "n": "内地", + "v": "内地" + }, + { + "n": "香港", + "v": "香港" + }, + { + "n": "台湾", + "v": "台湾" + }, + { + "n": "韩国", + "v": "韩国" + }, + { + "n": "美国", + "v": "美国" + } + ] + }, + { + "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" + } + ] + }, + { + "key": "by", + "name": "排序", + "value": [ + { + "n": "排序", + "v": "" + }, + { + "n": "时间", + "v": "time" + }, + { + "n": "人气", + "v": "hits" + }, + { + "n": "评分", + "v": "score" + } + ] + } + ], + "4": [ + { + "key": "area", + "name": "地区", + "value": [ + { + "n": "全部", + "v": "" + }, + { + "n": "国产", + "v": "国产" + }, + { + "n": "日本", + "v": "日本" + }, + { + "n": "美国", + "v": "美国" + }, + { + "n": "法国", + "v": "法国" + }, + { + "n": "其他", + "v": "其他" + } + ] + }, + { + "key": "year", + "name": "年份", + "value": [ + { + "n": "全部", + "v": "" + }, + { + "n": "2023", + "v": "2023" + }, + { + "n": "2022", + "v": "2022" + }, + { + "n": "2021", + "v": "2021" + }, + { + "n": "2020", + "v": "2020" + }, + { + "n": "2019", + "v": "2019" + }, + { + "n": "2018", + "v": "2018" + }, + { + "n": "2017", + "v": "2017" + } + ] + }, + { + "key": "by", + "name": "排序", + "value": [ + { + "n": "排序", + "v": "" + }, + { + "n": "时间", + "v": "time" + }, + { + "n": "人气", + "v": "hits" + }, + { + "n": "评分", + "v": "score" + } + ] + } + ], + "20": [ + { + "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" + } + ] + }, + { + "key": "by", + "name": "排序", + "value": [ + { + "n": "排序", + "v": "" + }, + { + "n": "时间", + "v": "time" + }, + { + "n": "人气", + "v": "hits" + }, + { + "n": "评分", + "v": "score" + } + ] + } + ], + "21": [ + { + "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" + } + ] + }, + { + "key": "by", + "name": "排序", + "value": [ + { + "n": "排序", + "v": "" + }, + { + "n": "时间", + "v": "time" + }, + { + "n": "人气", + "v": "hits" + }, + { + "n": "评分", + "v": "score" + } + ] + } + ] + } +} diff --git a/lib/feimaolive.json b/lib/feimaolive.json new file mode 100644 index 0000000..3d881ff --- /dev/null +++ b/lib/feimaolive.json @@ -0,0 +1,17 @@ +[ + + {"name":"范明明IPV6","url":"http://127.0.0.1:10079/c/3600/proxy/https://raw.githubusercontent.com/fanmingming/live/refs/heads/main/tv/m3u/ipv6.m3u"}, + {"name":"最强国内直播","url":"http://127.0.0.1:10079/c/3600/null/http://127.0.0.1:35456/tv.m3u"}, + {"name":"PandaGo投屏直播接收记录","url":"http://127.0.0.1:10079/dlnam3u/tv.m3u"}, + {"name":"肥羊咪咕直播","url":"http://127.0.0.1:10079/c/3600/null/http://127.0.0.1:35456/migu.m3u"}, + {"name":"肥羊B站直播","url":"http://127.0.0.1:10079/c/3600/null/http://127.0.0.1:35456/bililive.m3u"}, + {"name":"肥羊虎牙一起看","url":"http://127.0.0.1:10079/c/3600/null/http://127.0.0.1:35456/huyayqk.m3u"}, + {"name":"肥羊斗鱼一起看","url":"http://127.0.0.1:10079/c/3600/null/http://127.0.0.1:35456/douyuyqk.m3u"}, + {"name":"肥羊YY轮播","url":"http://127.0.0.1:10079/c/3600/null/http://127.0.0.1:35456/yylunbo.m3u"}, + {"name":"Gather.电视直播","url":"https://tv.iill.top/m3u/Gather"}, + {"name":"Gather.网络直播","url":"https://tv.iill.top/m3u/Live"}, + {"name":"Gather.MyTV","url":"http://127.0.0.1:10079/c/60/proxy/https://tv.iill.top/m3u/MyTV"}, + {"name":"范明明OfficalSite","url":"http://127.0.0.1:10079/p/0/proxy/https://live.fanmingming.com/tv/m3u/global.m3u"}, + {"name":"范明明GitHub","url":"http://127.0.0.1:10079/c/3600/proxy/https://mirror.ghproxy.com/raw.githubusercontent.com/fanmingming/live/main/tv/m3u/global.m3u"}, + {"name":"范明明IPV6","url":"http://127.0.0.1:10079/c/3600/proxy/https://raw.githubusercontent.com/fanmingming/live/refs/heads/main/tv/m3u/ipv6.m3u"} +] diff --git a/lib/ffmpeg.dyn.tar.xz b/lib/ffmpeg.dyn.tar.xz new file mode 100644 index 0000000..e6b8818 Binary files /dev/null and b/lib/ffmpeg.dyn.tar.xz differ diff --git a/lib/ffmpeg.dyn.tar.xz.md5 b/lib/ffmpeg.dyn.tar.xz.md5 new file mode 100644 index 0000000..cbf0dcc --- /dev/null +++ b/lib/ffmpeg.dyn.tar.xz.md5 @@ -0,0 +1 @@ +c4c4d00a398087706a6bbfd3de84531c diff --git a/lib/gbk.js b/lib/gbk.js new file mode 100644 index 0000000..796d53a --- /dev/null +++ b/lib/gbk.js @@ -0,0 +1,68 @@ +/*** + * gbk编码解码函数 + * strTool = gbkTool() strTool.encode(key) + * @returns {{encode: (function(*): *), decode: (function(*): *)}} + */ +export function gbkTool(){ + 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=0x81;i<=0xfe;i++){ + for(var j=0x40;j<=0xFE;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 == 0x20AC) || (unicode <= 0x007F && unicode >= 0x0000)); + } + 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); + + }); + } + }; +} \ No newline at end of file diff --git a/lib/geoip.dat.gz b/lib/geoip.dat.gz new file mode 100644 index 0000000..de0f65f Binary files /dev/null and b/lib/geoip.dat.gz differ diff --git a/lib/getsearchtxt.py b/lib/getsearchtxt.py new file mode 100644 index 0000000..444f02e --- /dev/null +++ b/lib/getsearchtxt.py @@ -0,0 +1,118 @@ +#!/usr/bin/env python3 + +import sys +import re +import json +import requests +import time +import traceback +import gzip + +p=re.compile(r'.*/s/(.*)') +skipp = re.compile(r'.*(cover|screen|频道).*',re.IGNORECASE) +reqcount=1 +sharedict=set() + +def getlist(w,shareid, fileid,morepage): + global p + global skipp + global reqcount + global sharedict + + reqcount += 1 + if reqcount % 5 == 0: + print(f"reqcount:{reqcount} shareid:{shareid} fileid:{fileid}",file=sys.stderr) + #time.sleep(1) + url = f'http://192.168.101.188:9978/proxy?do=pikpak&type=list&share_id={shareid}&file_id={fileid}&pass_code=&morepage={morepage}' + print(f"url: {url}",file=sys.stderr) + resp = requests.get(url) + content = resp.content.decode('utf-8') + lines = content.split("\n") + if "folder" not in content and len(lines)<=4: + return + isfirst=True + for line in lines: + if isfirst: + isfirst=False + print(f"first line:{line}",file=sys.stderr) + if skipp.match(line): + continue + linearr = line.split('\t') + if len(linearr)>2: + m = p.match(linearr[0]) + if m: + arr = m.group(1).split("/") + else: + arr = linearr[0].split("/") + shareid=arr[0] + fileid=arr[1] if len(arr)>1 else "" + if shareid+"/"+fileid in sharedict: + print(f"skip shareid{shareid} fileid:{fileid}", file=sys.stderr) + continue + w.write(line+"\n") + w.flush() + if linearr[2] == "folder": + getlist(w,shareid,fileid,False) + + if len(lines)>0: + getlist(w,shareid,fileid,True) + +def main(): + try: + f = gzip.open(sys.argv[1]+".raw.gz",mode="rt",encoding="utf-8") + if f is not None: + print(f"found gz raw file:{sys.argv[1]}.raw.gz, extract it",file=sys.stderr) + with(open(sys.argv[1]+".raw","w",encoding="utf-8")) as w: + while(True): + lines = f.readlines() + if len(lines)<=0: + break + for line in lines: + line=line.strip() + w.write(line+"\n") + f.seek(0) + except: + traceback.print_exc() + try: + f = open(sys.argv[1]+".raw","r",encoding="utf-8") + except: + f = None + if f is not None: + print("found old raw file") + while True: + lines = f.readlines() + if len(lines)<=0: + break + for line in lines: + linearr = line.split("\t") + m = p.match(linearr[0]) + if m: + arr = m.group(1).split("/") + else: + arr = linearr[0].split("/") + if len(arr)>1: + shareid = arr[0] + fileid = arr[1] + sharedict.add(shareid+"/"+fileid) + f.close() + print(f"old raw file record:{len(sharedict)}") + else: + print("no old raw file") + with(open(sys.argv[1]+".raw","a+",encoding="utf-8")) as w: + with(open(sys.argv[1],"r",encoding="utf-8")) as f: + j = json.load(f) + for c in j: + shareid=c.get("type_id") + fileid="" + m = p.match(shareid) + if m: + arr = m.group(1).split("/") + else: + arr = shareid.split("/") + shareid=arr[0] + fileid=arr[1] if len(arr)>1 else "" + if shareid+"/"+fileid in sharedict: + continue + getlist(w,shareid,fileid,False) + +main() diff --git a/lib/iptv.m3u b/lib/iptv.m3u new file mode 100644 index 0000000..b13a199 --- /dev/null +++ b/lib/iptv.m3u @@ -0,0 +1,9000 @@ +#EXTINF:-1 tvg-id="1" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://112.27.235.94:8000/hls/1/index.m3u8$LR•IPV4•53『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://zzssw01.55555.io:9901/tsfile/live/0001_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•53『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://112.27.235.94:8000/hls/1/index.m3u8$LR•IPV4•53『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://zzssw01.55555.io:9901/tsfile/live/0001_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•53『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://101.74.28.84:9901/tsfile/live/0001_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•53『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://61.156.228.12:8154/tsfile/live/0001_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•53『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://101.66.198.42:9901/tsfile/live/0001_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•53『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://123.163.21.101:9901/tsfile/live/0001_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•53『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://106.118.70.125:9901/tsfile/live/0001_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•53『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://1.195.131.143:9901/tsfile/live/1000_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•53『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://php.jdshipin.com:8880/TVOD/iptv.php?id=rthk33$LR•IPV4•53『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://iptv.huuc.edu.cn/hls/cctv1hd.m3u8$LR•IPV4•53『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +https://www.freetv.top/migu/608807420.m3u8?migutoken=5b04cf0d91179ab2d3d71703f0a8bc3d32dd02f7d8fb55ee70e05c216b8a9d1a73d911fbde798459fb66d94934157c996f8306c0dd37917775f2ed73dcc22cf84b25ca500bff5c636ff48d6344$LR•IPV4•53『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +https://smart.pendy.dpdns.org/Smart.php?id=cctv1$LR•IPV4•53『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://yc.myds.me:35455/gaoma/cctv1.m3u8$LR•IPV4•53『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://nas.suntao.online:35455/itv/6000000001000029752.m3u8?cdn=wasusyt$LR•IPV4•53『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://183.94.1.118:8801/tsfile/live/0001_1.m3u8$LR•IPV4•53『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://120.192.226.35:8009/hls/501/index.m3u8$LR•IPV4•53『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +https://rthktv33-live.akamaized.net/hls/live/2101641/RTHKTV33/stream05/streamPlaylist.m3u8?$LR•IPV4•53『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://123.182.60.29:9002/hls/1/index.m3u8$LR•IPV4•53『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://112.123.206.32:808/hls/1/index.m3u8$LR•IPV4•53『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://61.138.128.226:19901/tsfile/live/0001_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•53『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://36.105.100.208:35455/gaoma/cctv1.m3u8$LR•IPV4•53『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://iptv.0564.org:35455/itv/1000000005000265001.m3u8?cdn=ystenlive$LR•IPV4•53『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://mh0.asia:35455/itv/1000000005000265001.m3u8?cdn=ystenlive$LR•IPV4•53『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://3501776.xyz:35455/gaoma/cctv1.m3u8$LR•IPV4•53『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://fm1077.serv00.net/Smart.php?id=cctv1$LR•IPV4•53『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://[2409:8087:1:20:20::29]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226895/1.m3u8?servicetype=1&accountinfo=%7E%7EV2.0%7EI0Rkc6neBYgfpoJ1yud8Fw%7EPepnxHHB2d6Hk2dZWM77MyFlBN5q1KnYLvimM9pqT7Epd7QgO4HFWH0z34SUb2Vs%7EExtInfo9bj61dxzlMXrsixrqcFYPg%3A20240420192714%2C%2C%2C20240420192714%2C%2C10001000275495%2C-1%2C0%2C1%2C-1%2C%2C2%2C2201300%2C%2C%2C2%2C%2C%2CEND&GuardEncType=2$LR•IPV6•53『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226016/index.m3u8$LR•IPV6•53『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226338/1.m3u8$LR•IPV6•53『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226559/index.m3u8$LR•IPV6•53『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://101.35.240.114:88/live.php?id=CCTV1$LR•IPV4•53『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://218.13.14.6:60050/tsfile/live/1001_1.m3u8$LR•IPV4•53『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://58.57.40.22:9901/tsfile/live/0001_1.m3u8$LR•IPV4•53『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +https://cc06.tv12.xyz/1.m3u8$LR•IPV4•53『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://iptv.huuc.edu.cn/hls/cctv1hd.m3u8$LR•IPV4•53『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://ygbh.site/php/bfgd.php?id=488$LR•IPV4•53『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +https://cc06.tv12.xyz/1.m3u8$LR•IPV4•53『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://112.27.235.94:8000/hls/1/index.m3u8$LR•IPV4•53『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://39.135.133.132/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226016/index.m3u8$LR•IPV4•53『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://t.061899.xyz/tl/dq.php?id=cctv1$LR•IPV4•53『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +https://zby.130519.xyz/PLTV/11/224/3221225673/index.m3u8$LR•IPV4•53『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://148.135.93.213:81/live.php?id=CCTV1$LR•IPV4•53『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://php.jdshipin.com:8880/TVOD/iptv.php?id=rthk33$LR•IPV4•53『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://iptv.huuc.edu.cn/hls/cctv1hd.m3u8$LR•IPV4•53『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +https://www.freetv.top/migu/608807420.m3u8?migutoken=5b04cf0d91179ab2d3d71703f0a8bc3d32dd02f7d8fb55ee70e05c216b8a9d1a73d911fbde798459fb66d94934157c996f8306c0dd37917775f2ed73dcc22cf84b25ca500bff5c636ff48d6344$LR•IPV4•53『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +https://smart.pendy.dpdns.org/Smart.php?id=cctv1$LR•IPV4•53『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://[2409:8087:1:20:20::29]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226895/1.m3u8?servicetype=1&accountinfo=%7E%7EV2.0%7EI0Rkc6neBYgfpoJ1yud8Fw%7EPepnxHHB2d6Hk2dZWM77MyFlBN5q1KnYLvimM9pqT7Epd7QgO4HFWH0z34SUb2Vs%7EExtInfo9bj61dxzlMXrsixrqcFYPg%3A20240420192714%2C%2C%2C20240420192714%2C%2C10001000275495%2C-1%2C0%2C1%2C-1%2C%2C2%2C2201300%2C%2C%2C2%2C%2C%2CEND&GuardEncType=2$LR•IPV6•53『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226016/index.m3u8$LR•IPV6•53『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226338/1.m3u8$LR•IPV6•53『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226559/index.m3u8$LR•IPV6•53『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://yc.myds.me:35455/gaoma/cctv1.m3u8$LR•IPV4•53『线路52』 +#EXTINF:-1 tvg-id="53" tvg-name="CCTV1综合" group-title="央视频道",CCTV1综合 +http://nas.suntao.online:35455/itv/6000000001000029752.m3u8?cdn=wasusyt$LR•IPV4•53『线路53』 +#EXTINF:-1 tvg-id="1" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://112.27.235.94:8000/hls/2/index.m3u8$LR•IPV4•56『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://cdn6.bkpcp.top/tl/tuiliu.php?id=cctv2$LR•IPV4•56『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://183.215.134.239:19901/tsfile/live/0002_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•56『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://zzssw01.55555.io:9901/tsfile/live/0002_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•56『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://112.27.235.94:8000/hls/2/index.m3u8$LR•IPV4•56『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://cdn6.bkpcp.top/tl/tuiliu.php?id=cctv2$LR•IPV4•56『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://183.215.134.239:19901/tsfile/live/0002_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•56『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://zzssw01.55555.io:9901/tsfile/live/0002_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•56『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://61.156.228.12:8154/tsfile/live/0002_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•56『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://101.66.198.42:9901/tsfile/live/0002_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•56『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://123.163.21.101:9901/tsfile/live/0002_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•56『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://106.118.70.125:9901/tsfile/live/0002_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•56『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://101.74.28.84:9901/tsfile/live/0002_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•56『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221225588$LR•IPV4•56『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://goo.bkpcp.top/mg/CCTV2$LR•IPV4•56『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://iptv.huuc.edu.cn/hls/cctv2hd.m3u8$LR•IPV4•56『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +https://smart.pendy.dpdns.org/Smart.php?id=cctv2$LR•IPV4•56『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226540/index.m3u8$LR•IPV4•56『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://yc.myds.me:35455/gaoma/cctv2.m3u8$LR•IPV4•56『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227165/index.m3u8$LR•IPV4•56『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://183.94.1.118:8801/tsfile/live/0002_1.m3u8$LR•IPV4•56『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://120.192.226.35:8009/hls/502/index.m3u8$LR•IPV4•56『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://123.182.60.29:9002/hls/2/index.m3u8$LR•IPV4•56『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://112.123.206.32:808/hls/2/index.m3u8$LR•IPV4•56『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://61.138.128.226:19901/tsfile/live/0002_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•56『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://36.105.100.208:35455/gaoma/cctv2.m3u8$LR•IPV4•56『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://iptv.0564.org:35455/itv/1000000001000023315.m3u8?cdn=ystenlive$LR•IPV4•56『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://mh0.asia:35455/itv/1000000001000023315.m3u8?cdn=ystenlive$LR•IPV4•56『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://3501776.xyz:35455/gaoma/cctv2.m3u8$LR•IPV4•56『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +https://api.olelive.com/dis/live/CCTV2HD/hls.m3u8$LR•IPV4•56『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://fm1077.serv00.net/Smart.php?id=cctv2$LR•IPV4•56『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://[2409:8087:1a01:df::406f]:80/wh7f454c46tw1241164675_1575082505/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226540/index.m3u8?icpid=88888888&RTS=1713968070&from=4&hms_devid=692&prioritypopid=4&online=1713968070&vqe=3$LR•IPV6•56『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226230/1.m3u8$LR•IPV6•56『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225588/index.m3u8$LR•IPV6•56『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://148.135.93.213/live.php?id=CCTV2$LR•IPV4•56『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://218.13.14.6:60050/tsfile/live/1002_1.m3u8$LR•IPV4•56『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://39.164.160.249:9901/tsfile/live/0002_1.m3u8$LR•IPV4•56『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +https://cc06.tv12.xyz/2.m3u8$LR•IPV4•56『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://iptv.huuc.edu.cn/hls/cctv2hd.m3u8$LR•IPV4•56『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://ygbh.site/php/bfgd.php?id=061$LR•IPV4•56『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +https://cc06.tv12.xyz/2.m3u8$LR•IPV4•56『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://112.27.235.94:8000/hls/2/index.m3u8$LR•IPV4•56『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://39.135.133.177/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225588/index.m3u8$LR•IPV4•56『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://t.061899.xyz/tl/dq.php?id=cctv2$LR•IPV4•56『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +https://zby.130519.xyz/PLTV/11/224/3221226122/index.m3u8$LR•IPV4•56『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://148.135.93.213:81/live.php?id=CCTV2$LR•IPV4•56『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221225588$LR•IPV4•56『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://goo.bkpcp.top/mg/CCTV2$LR•IPV4•56『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://iptv.huuc.edu.cn/hls/cctv2hd.m3u8$LR•IPV4•56『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +https://smart.pendy.dpdns.org/Smart.php?id=cctv2$LR•IPV4•56『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://[2409:8087:1a01:df::406f]:80/wh7f454c46tw1241164675_1575082505/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226540/index.m3u8?icpid=88888888&RTS=1713968070&from=4&hms_devid=692&prioritypopid=4&online=1713968070&vqe=3$LR•IPV6•56『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226230/1.m3u8$LR•IPV6•56『线路52』 +#EXTINF:-1 tvg-id="53" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225588/index.m3u8$LR•IPV6•56『线路53』 +#EXTINF:-1 tvg-id="54" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226540/index.m3u8$LR•IPV4•56『线路54』 +#EXTINF:-1 tvg-id="55" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://yc.myds.me:35455/gaoma/cctv2.m3u8$LR•IPV4•56『线路55』 +#EXTINF:-1 tvg-id="56" tvg-name="CCTV2财经" group-title="央视频道",CCTV2财经 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227165/index.m3u8$LR•IPV4•56『线路56』 +#EXTINF:-1 tvg-id="1" tvg-name="CCTV3综艺" group-title="央视频道",CCTV3综艺 +http://112.27.235.94:8000/hls/3/index.m3u8$LR•IPV4•33『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="CCTV3综艺" group-title="央视频道",CCTV3综艺 +http://221.2.148.205:8154/tsfile/live/0003_1.m3u8$LR•IPV4•33『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="CCTV3综艺" group-title="央视频道",CCTV3综艺 +http://183.215.134.239:19901/tsfile/live/0003_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•33『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="CCTV3综艺" group-title="央视频道",CCTV3综艺 +http://61.156.228.12:8154/tsfile/live/0003_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•33『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="CCTV3综艺" group-title="央视频道",CCTV3综艺 +http://221.2.148.205:8154/tsfile/live/0003_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•33『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="CCTV3综艺" group-title="央视频道",CCTV3综艺 +http://zzssw01.55555.io:9901/tsfile/live/0003_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•33『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="CCTV3综艺" group-title="央视频道",CCTV3综艺 +http://genglei.8866.org:9901/tsfile/live/0003_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•33『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="CCTV3综艺" group-title="央视频道",CCTV3综艺 +http://cdn6.bkpcp.top/tl/tuiliu.php?id=cctv3$LR•IPV4•33『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="CCTV3综艺" group-title="央视频道",CCTV3综艺 +http://112.27.235.94:8000/hls/3/index.m3u8$LR•IPV4•33『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="CCTV3综艺" group-title="央视频道",CCTV3综艺 +http://221.2.148.205:8154/tsfile/live/0003_1.m3u8$LR•IPV4•33『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="CCTV3综艺" group-title="央视频道",CCTV3综艺 +http://183.215.134.239:19901/tsfile/live/0003_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•33『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="CCTV3综艺" group-title="央视频道",CCTV3综艺 +http://61.156.228.12:8154/tsfile/live/0003_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•33『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="CCTV3综艺" group-title="央视频道",CCTV3综艺 +http://221.2.148.205:8154/tsfile/live/0003_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•33『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="CCTV3综艺" group-title="央视频道",CCTV3综艺 +http://zzssw01.55555.io:9901/tsfile/live/0003_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•33『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="CCTV3综艺" group-title="央视频道",CCTV3综艺 +http://genglei.8866.org:9901/tsfile/live/0003_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•33『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="CCTV3综艺" group-title="央视频道",CCTV3综艺 +http://cdn6.bkpcp.top/tl/tuiliu.php?id=cctv3$LR•IPV4•33『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="CCTV3综艺" group-title="央视频道",CCTV3综艺 +http://1.195.131.143:9901/tsfile/live/1002_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•33『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="CCTV3综艺" group-title="央视频道",CCTV3综艺 +http://101.66.198.42:9901/tsfile/live/0003_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•33『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="CCTV3综艺" group-title="央视频道",CCTV3综艺 +http://123.163.21.101:9901/tsfile/live/1000_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•33『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="CCTV3综艺" group-title="央视频道",CCTV3综艺 +http://101.74.28.84:9901/tsfile/live/0003_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•33『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="CCTV3综艺" group-title="央视频道",CCTV3综艺 +http://ha.wheel.duolebo.com/live.m3u8?p=bea7cd5b-d4cd-4d5f-9408-eb6df9ce08f3&c=1857461344&m3u8=true$LR•IPV4•33『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="CCTV3综艺" group-title="央视频道",CCTV3综艺 +http://101.35.240.114:88/live.php?id=CCTV3$LR•IPV4•33『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="CCTV3综艺" group-title="央视频道",CCTV3综艺 +http://218.13.14.6:60050/tsfile/live/1003_1.m3u8$LR•IPV4•33『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="CCTV3综艺" group-title="央视频道",CCTV3综艺 +http://ha.wheel.duolebo.com/live.m3u8?p=bea7cd5b-d4cd-4d5f-9408-eb6df9ce08f3&c=1857461344&m3u8=true$LR•IPV4•33『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="CCTV3综艺" group-title="央视频道",CCTV3综艺 +http://221.2.148.205:8154/tsfile/live/0003_1.m3u8$LR•IPV4•33『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="CCTV3综艺" group-title="央视频道",CCTV3综艺 +https://cc06.tv12.xyz/3.m3u8$LR•IPV4•33『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="CCTV3综艺" group-title="央视频道",CCTV3综艺 +http://iptv.huuc.edu.cn/hls/cctv3hd.m3u8$LR•IPV4•33『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="CCTV3综艺" group-title="央视频道",CCTV3综艺 +http://ygbh.site/php/bfgd.php?id=062$LR•IPV4•33『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="CCTV3综艺" group-title="央视频道",CCTV3综艺 +https://cc06.tv12.xyz/3.m3u8$LR•IPV4•33『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="CCTV3综艺" group-title="央视频道",CCTV3综艺 +http://112.27.235.94:8000/hls/3/index.m3u8$LR•IPV4•33『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="CCTV3综艺" group-title="央视频道",CCTV3综艺 +http://39.135.135.41/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226021/index.m3u8$LR•IPV4•33『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="CCTV3综艺" group-title="央视频道",CCTV3综艺 +http://t.061899.xyz/tl/dq.php?id=cctv3$LR•IPV4•33『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="CCTV3综艺" group-title="央视频道",CCTV3综艺 +http://148.135.93.213:81/live.php?id=CCTV3$LR•IPV4•33『线路33』 +#EXTINF:-1 tvg-id="1" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://zzssw01.55555.io:9901/tsfile/live/1000_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•54『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://cdn6.bkpcp.top/tl/tuiliu.php?id=cctv4$LR•IPV4•54『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://zzssw01.55555.io:9901/tsfile/live/1000_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•54『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://cdn6.bkpcp.top/tl/tuiliu.php?id=cctv4$LR•IPV4•54『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://1.195.131.143:9901/tsfile/live/1003_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•54『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://61.156.228.12:8154/tsfile/live/0004_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•54『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://101.66.198.42:9901/tsfile/live/0004_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•54『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://123.163.21.101:9901/tsfile/live/1001_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•54『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://106.118.70.125:9901/tsfile/live/0004_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•54『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://101.74.28.84:9901/tsfile/live/0004_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•54『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226428$LR•IPV4•54『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://z.b.bkpcp.top/m.php?id=CCTV-4国际$LR•IPV4•54『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://iptv.huuc.edu.cn/hls/cctv4hd.m3u8$LR•IPV4•54『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +https://www.freetv.top/migu/631780421.m3u8?migutoken=fefc6a44400a0dd448699ae0ce3d6e2c5a0f49b8d48adb36e747c4fbab039337eb3244f9951acbddaf26b7bf51597a7d1b43c8845e67fd5914ece875dcad325bb388200bc0f12fdff727d03e2d$LR•IPV4•54『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +https://smart.pendy.dpdns.org/Smart.php?id=cctv4$LR•IPV4•54『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://goo.bkpcp.top/mg/cctv4o$LR•IPV4•54『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://183.94.1.118:8801/tsfile/live/0004_1.m3u8$LR•IPV4•54『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://120.192.226.35:8009/hls/4/index.m3u8$LR•IPV4•54『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://123.182.60.29:9002/hls/4/index.m3u8$LR•IPV4•54『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://61.138.128.226:19901/tsfile/live/0004_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•54『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://36.105.100.208:35455/gaoma/cctv4k.m3u8$LR•IPV4•54『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://iptv.0564.org:35455/itv/1000000005000265004.m3u8?cdn=ystenlive$LR•IPV4•54『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://mh0.asia:35455/itv/1000000005000265004.m3u8?cdn=ystenlive$LR•IPV4•54『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://3501776.xyz:35455/itv/1000000005000265004.m3u8?cdn=ystenlive$LR•IPV4•54『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +https://api.olelive.com/dis/live/CCTV4HD/hls.m3u8$LR•IPV4•54『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://60.29.124.66:6080/hls/15/index.m3u8$LR•IPV4•54『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://fm1077.serv00.net/Smart.php?id=cctv4$LR•IPV4•54『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://fm1077.serv00.net/Smart.php?id=Cctv4$LR•IPV4•54『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226007/index.m3u8$LR•IPV6•54『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://[2409:8087:1:20:20::29]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226335/1.m3u8?servicetype=1&accountinfo=%7E%7EV2.0%7EBFJ5gRpm8ntK8JEFPZOhLQ%7EPepnxHHB2d6Hk2dZWM77MyFlBN5q1KnYLvimM9pqT7EfCf-e5nKehMQzrOBwWduf%7EExtInfo9bj61dxzlMXrsixrqcFYPg%3A20240420192542%2C%2C%2C20240420192542%2C%2C10001000275495%2C-1%2C0%2C1%2C-1%2C%2C2%2C2201300%2C%2C%2C2%2C%2C%2CEND&GuardEncType=2$LR•IPV6•54『线路30』 +#EXTINF:-1 tvg-id="31" 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•54『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226428/index.m3u8$LR•IPV6•54『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://148.135.93.213/live.php?id=CCTV4$LR•IPV4•54『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://218.13.14.6:60050/tsfile/live/1004_1.m3u8$LR•IPV4•54『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://58.57.40.22:9901/tsfile/live/1003_1.m3u8$LR•IPV4•54『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +https://cc06.tv12.xyz/4.m3u8$LR•IPV4•54『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://iptv.huuc.edu.cn/hls/cctv4hd.m3u8$LR•IPV4•54『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://ygbh.site/php/bfgd.php?id=063$LR•IPV4•54『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +https://cc06.tv12.xyz/4.m3u8$LR•IPV4•54『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://112.27.235.94:8000/hls/4/index.m3u8$LR•IPV4•54『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://39.135.135.50/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226007/index.m3u8$LR•IPV4•54『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://t.061899.xyz/tl/dq.php?id=cctv4$LR•IPV4•54『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +https://zby.130519.xyz/PLTV/11/224/3221226124/index.m3u8$LR•IPV4•54『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://148.135.93.213:81/live.php?id=CCTV4$LR•IPV4•54『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226428$LR•IPV4•54『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://z.b.bkpcp.top/m.php?id=CCTV-4国际$LR•IPV4•54『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://iptv.huuc.edu.cn/hls/cctv4hd.m3u8$LR•IPV4•54『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +https://www.freetv.top/migu/631780421.m3u8?migutoken=fefc6a44400a0dd448699ae0ce3d6e2c5a0f49b8d48adb36e747c4fbab039337eb3244f9951acbddaf26b7bf51597a7d1b43c8845e67fd5914ece875dcad325bb388200bc0f12fdff727d03e2d$LR•IPV4•54『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +https://smart.pendy.dpdns.org/Smart.php?id=cctv4$LR•IPV4•54『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://goo.bkpcp.top/mg/cctv4o$LR•IPV4•54『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226007/index.m3u8$LR•IPV6•54『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://[2409:8087:1:20:20::29]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226335/1.m3u8?servicetype=1&accountinfo=%7E%7EV2.0%7EBFJ5gRpm8ntK8JEFPZOhLQ%7EPepnxHHB2d6Hk2dZWM77MyFlBN5q1KnYLvimM9pqT7EfCf-e5nKehMQzrOBwWduf%7EExtInfo9bj61dxzlMXrsixrqcFYPg%3A20240420192542%2C%2C%2C20240420192542%2C%2C10001000275495%2C-1%2C0%2C1%2C-1%2C%2C2%2C2201300%2C%2C%2C2%2C%2C%2CEND&GuardEncType=2$LR•IPV6•54『线路52』 +#EXTINF:-1 tvg-id="53" 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•54『线路53』 +#EXTINF:-1 tvg-id="54" tvg-name="CCTV4中文国际" group-title="央视频道",CCTV4中文国际 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226428/index.m3u8$LR•IPV6•54『线路54』 +#EXTINF:-1 tvg-id="1" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://112.27.235.94:8000/hls/5/index.m3u8$LR•IPV4•69『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://113.26.202.52:1299/tsfile/live/0005_1.m3u8$LR•IPV4•69『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://zzssw01.55555.io:9901/tsfile/live/1001_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•69『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://genglei.8866.org:9901/tsfile/live/0005_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•69『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://cdn6.bkpcp.top/tl/tuiliu.php?id=cctv5$LR•IPV4•69『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://112.27.235.94:8000/hls/5/index.m3u8$LR•IPV4•69『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://113.26.202.52:1299/tsfile/live/0005_1.m3u8$LR•IPV4•69『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://zzssw01.55555.io:9901/tsfile/live/1001_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•69『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://genglei.8866.org:9901/tsfile/live/0005_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•69『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://cdn6.bkpcp.top/tl/tuiliu.php?id=cctv5$LR•IPV4•69『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://101.74.28.84:9901/tsfile/live/0005_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•69『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://1.195.131.143:9901/tsfile/live/1004_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•69『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://61.156.228.12:8154/tsfile/live/0005_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•69『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://101.66.198.42:9901/tsfile/live/0005_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•69『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://123.163.21.101:9901/tsfile/live/1002_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•69『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://106.118.70.125:9901/tsfile/live/0005_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•69『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +https://ldcctvwbcdks.v.kcdnvip.com/ldcctvwbcd/cdrmldcctv5plus_1/index.m3u8?b=200-2100$LR•IPV4•69『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226019$LR•IPV4•69『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://iptv.huuc.edu.cn/hls/cctv5hd.m3u8$LR•IPV4•69『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +https://www.freetv.top/migu/641886683.m3u8?migutoken=3e5c01f93922de8d1c940fe15bb47349b27e8f7a2e624dde1a83dff3b2a80f58b7624151a3a4d00488edee34f202818557340903382fae02bb754084eb942bd50e59061df36fab62fb5b908903$LR•IPV4•69『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +https://smart.pendy.dpdns.org/Smart.php?id=cctv5$LR•IPV4•69『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://www.freetv.top/migu/641886683.m3u8?migutoken=cea30189b17e30fb3b4876609eb6e3128f840f8ab5db6f9643403213dc9980613938be69b13fe0290d2c44f0052b78d90c669a2f92e28951f92da861b7cba070b55ec1b4fe1a92a2c133c43c4c$LR•IPV4•69『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://yc.myds.me:35455/gaoma/cctv5.m3u8$LR•IPV4•69『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://nas.suntao.online:35455/itv/1000000005000265005.m3u8?cdn=ystenlive$LR•IPV4•69『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://183.94.1.118:8801/tsfile/live/0005_1.m3u8$LR•IPV4•69『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://120.192.226.35:8009/hls/503/index.m3u8$LR•IPV4•69『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://123.182.60.29:9002/hls/7/index.m3u8$LR•IPV4•69『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://58.17.48.228:808/hls/5/index.m3u8$LR•IPV4•69『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://61.138.128.226:19901/tsfile/live/0005_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•69『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://36.105.100.208:35455/gaoma/cctv5.m3u8$LR•IPV4•69『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://iptv.0564.org:35455/itv/1000000005000265005.m3u8?cdn=ystenlive$LR•IPV4•69『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://mh0.asia:35455/itv/1000000005000265005.m3u8?cdn=ystenlive$LR•IPV4•69『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://3501776.xyz:35455/gaoma/cctv5.m3u8$LR•IPV4•69『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +https://api.olelive.com/dis/live/CCTV5HD/hls.m3u8$LR•IPV4•69『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://fm1077.serv00.net/Smart.php?id=cctv5$LR•IPV4•69『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/yinhe/88888888/224/3221226019/index.m3u8$LR•IPV6•69『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226019/index.m3u8$LR•IPV6•69『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://101.35.240.114:88/live.php?id=CCTV5$LR•IPV4•69『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://218.13.14.6:60050/tsfile/live/1005_1.m3u8$LR•IPV4•69『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://58.57.40.22:9901/tsfile/live/1004_1.m3u8$LR•IPV4•69『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +https://cc06.tv12.xyz/5.m3u8$LR•IPV4•69『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://iptv.huuc.edu.cn/hls/cctv5hd.m3u8$LR•IPV4•69『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://ygbh.site/php/bfgd.php?id=064$LR•IPV4•69『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +https://cc06.tv12.xyz/5.m3u8$LR•IPV4•69『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://112.27.235.94:8000/hls/5/index.m3u8$LR•IPV4•69『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://39.135.133.134/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226019/index.m3u8$LR•IPV4•69『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://t.061899.xyz/tl/dq.php?id=cctv5$LR•IPV4•69『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +https://zby.130519.xyz/PLTV/11/224/3221225734/index.m3u8$LR•IPV4•69『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://148.135.93.213:81/live.php?id=CCTV5$LR•IPV4•69『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226019$LR•IPV4•69『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://iptv.huuc.edu.cn/hls/cctv5hd.m3u8$LR•IPV4•69『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +https://www.freetv.top/migu/641886683.m3u8?migutoken=3e5c01f93922de8d1c940fe15bb47349b27e8f7a2e624dde1a83dff3b2a80f58b7624151a3a4d00488edee34f202818557340903382fae02bb754084eb942bd50e59061df36fab62fb5b908903$LR•IPV4•69『线路52』 +#EXTINF:-1 tvg-id="53" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +https://smart.pendy.dpdns.org/Smart.php?id=cctv5$LR•IPV4•69『线路53』 +#EXTINF:-1 tvg-id="54" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +https://ldcctvwbcdks.v.kcdnvip.com/ldcctvwbcd/cdrmldcctv5plus_1/index.m3u8?b=200-2100$LR•IPV4•69『线路54』 +#EXTINF:-1 tvg-id="55" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/yinhe/88888888/224/3221226019/index.m3u8$LR•IPV6•69『线路55』 +#EXTINF:-1 tvg-id="56" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226019/index.m3u8$LR•IPV6•69『线路56』 +#EXTINF:-1 tvg-id="57" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://www.freetv.top/migu/641886683.m3u8?migutoken=cea30189b17e30fb3b4876609eb6e3128f840f8ab5db6f9643403213dc9980613938be69b13fe0290d2c44f0052b78d90c669a2f92e28951f92da861b7cba070b55ec1b4fe1a92a2c133c43c4c$LR•IPV4•69『线路57』 +#EXTINF:-1 tvg-id="58" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://yc.myds.me:35455/gaoma/cctv5.m3u8$LR•IPV4•69『线路58』 +#EXTINF:-1 tvg-id="59" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://nas.suntao.online:35455/itv/1000000005000265005.m3u8?cdn=ystenlive$LR•IPV4•69『线路59』 +#EXTINF:-1 tvg-id="60" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226019$LR•IPV4•69『线路60』 +#EXTINF:-1 tvg-id="61" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://iptv.huuc.edu.cn/hls/cctv5hd.m3u8$LR•IPV4•69『线路61』 +#EXTINF:-1 tvg-id="62" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +https://www.freetv.top/migu/641886683.m3u8?migutoken=3e5c01f93922de8d1c940fe15bb47349b27e8f7a2e624dde1a83dff3b2a80f58b7624151a3a4d00488edee34f202818557340903382fae02bb754084eb942bd50e59061df36fab62fb5b908903$LR•IPV4•69『线路62』 +#EXTINF:-1 tvg-id="63" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +https://smart.pendy.dpdns.org/Smart.php?id=cctv5$LR•IPV4•69『线路63』 +#EXTINF:-1 tvg-id="64" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +https://ldcctvwbcdks.v.kcdnvip.com/ldcctvwbcd/cdrmldcctv5plus_1/index.m3u8?b=200-2100$LR•IPV4•69『线路64』 +#EXTINF:-1 tvg-id="65" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/yinhe/88888888/224/3221226019/index.m3u8$LR•IPV6•69『线路65』 +#EXTINF:-1 tvg-id="66" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226019/index.m3u8$LR•IPV6•69『线路66』 +#EXTINF:-1 tvg-id="67" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://www.freetv.top/migu/641886683.m3u8?migutoken=cea30189b17e30fb3b4876609eb6e3128f840f8ab5db6f9643403213dc9980613938be69b13fe0290d2c44f0052b78d90c669a2f92e28951f92da861b7cba070b55ec1b4fe1a92a2c133c43c4c$LR•IPV4•69『线路67』 +#EXTINF:-1 tvg-id="68" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://yc.myds.me:35455/gaoma/cctv5.m3u8$LR•IPV4•69『线路68』 +#EXTINF:-1 tvg-id="69" tvg-name="CCTV5体育" group-title="央视频道",CCTV5体育 +http://nas.suntao.online:35455/itv/1000000005000265005.m3u8?cdn=ystenlive$LR•IPV4•69『线路69』 +#EXTINF:-1 tvg-id="1" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://120.76.248.139/live/bfgd/4200000246.m3u8$LR•IPV4•58『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://112.27.235.94:8000/hls/6/index.m3u8$LR•IPV4•58『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://183.215.134.239:19901/tsfile/live/0005_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://120.76.248.139/live/bfgd/4200000246.m3u8$LR•IPV4•58『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://112.27.235.94:8000/hls/6/index.m3u8$LR•IPV4•58『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://183.215.134.239:19901/tsfile/live/0005_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://61.156.228.12:8154/tsfile/live/0016_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221225603$LR•IPV4•58『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +https://www.freetv.top/migu/641886773.m3u8?migutoken=03a1b82e35e58cd89a95034ecb29e77e50493397000ec2b1e4d1ce59af01e6420d6dbc068c8230ec03be3a35a20eed8714e0959e3570a08713a7a2e8d86085eabf8f1aa85744c80c38343988b2$LR•IPV4•58『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +https://smart.pendy.dpdns.org/Smart.php?id=cctv5plus$LR•IPV4•58『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227348/index.m3u8$LR•IPV4•58『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://yc.myds.me:35455/gaoma/cctv5p.m3u8$LR•IPV4•58『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://nas.suntao.online:35455/itv/6000000001000015875.m3u8?cdn=wasusyt$LR•IPV4•58『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://hwrr.jx.chinamobile.com:8080/PLTV/88888888/224/3221225649/index.m3u8$LR•IPV4•58『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +https://stream1.freetv.fun/88ee08d5c5e75e963f46cba8142888798dde687981709eda707a0b192da8ad4d.ctv$LR•IPV4•58『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://123.182.60.29:9002/hls/17/index.m3u8$LR•IPV4•58『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://www.douzhicloud.site:35455/gaoma/cctv5p.m3u8$LR•IPV4•58『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://61.138.128.226:19901/tsfile/live/1006_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://36.105.100.208:35455/gaoma/cctv5p.m3u8$LR•IPV4•58『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://iptv.0564.org:35455/itv/1000000005000265016.m3u8?cdn=ystenlive$LR•IPV4•58『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://mh0.asia:35455/itv/1000000005000265016.m3u8?cdn=ystenlive$LR•IPV4•58『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://3501776.xyz:35455/itv/1000000005000265016.m3u8?cdn=ystenlive$LR•IPV4•58『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +https://api.olelive.com/dis/live/CCTV5PHD/hls.m3u8$LR•IPV4•58『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://116.77.32.59:8277/streams/d/cctv5a/playlist.m3u8$LR•IPV4•58『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://175.171.30.26:5111/hls/441492211/index.m3u8$LR•IPV4•58『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://fm1077.serv00.net/Smart.php?id=cctv5plus$LR•IPV4•58『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225603/index.m3u8$LR•IPV6•58『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226349/1.m3u8$LR•IPV6•58『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://148.135.93.213/live.php?id=CCTV5p$LR•IPV4•58『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://tv.20191209.xyz:37377/migu/641886773.m3u8?migutoken=dfc218ce4c1ff00475c0aef03e0b883bf8a277b36671d5ca1eb7cc5f7ce7919d01ee050351170891d6e103aa7adea25827c13c901ccf6cdf4a8a370e7fd90c8b198dcb1e8814bbf2ed4fb0c8$LR•IPV4•58『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://58.57.40.22:9901/tsfile/live/1005_1.m3u8$LR•IPV4•58『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +https://cc06.tv12.xyz/6.m3u8$LR•IPV4•58『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://ygbh.site/php/bfgd.php?id=246$LR•IPV4•58『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +https://cc06.tv12.xyz/6.m3u8$LR•IPV4•58『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://112.27.235.94:8000/hls/6/index.m3u8$LR•IPV4•58『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://39.134.65.71/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225603/index.m3u8$LR•IPV4•58『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://t.061899.xyz/tl/dq.php?id=cctv5p$LR•IPV4•58『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://148.135.93.213:81/live.php?id=CCTV5p$LR•IPV4•58『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221225603$LR•IPV4•58『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +https://www.freetv.top/migu/641886773.m3u8?migutoken=03a1b82e35e58cd89a95034ecb29e77e50493397000ec2b1e4d1ce59af01e6420d6dbc068c8230ec03be3a35a20eed8714e0959e3570a08713a7a2e8d86085eabf8f1aa85744c80c38343988b2$LR•IPV4•58『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +https://smart.pendy.dpdns.org/Smart.php?id=cctv5plus$LR•IPV4•58『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225603/index.m3u8$LR•IPV6•58『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226349/1.m3u8$LR•IPV6•58『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227348/index.m3u8$LR•IPV4•58『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://yc.myds.me:35455/gaoma/cctv5p.m3u8$LR•IPV4•58『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://nas.suntao.online:35455/itv/6000000001000015875.m3u8?cdn=wasusyt$LR•IPV4•58『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://hwrr.jx.chinamobile.com:8080/PLTV/88888888/224/3221225649/index.m3u8$LR•IPV4•58『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +https://stream1.freetv.fun/88ee08d5c5e75e963f46cba8142888798dde687981709eda707a0b192da8ad4d.ctv$LR•IPV4•58『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221225603$LR•IPV4•58『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +https://www.freetv.top/migu/641886773.m3u8?migutoken=03a1b82e35e58cd89a95034ecb29e77e50493397000ec2b1e4d1ce59af01e6420d6dbc068c8230ec03be3a35a20eed8714e0959e3570a08713a7a2e8d86085eabf8f1aa85744c80c38343988b2$LR•IPV4•58『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +https://smart.pendy.dpdns.org/Smart.php?id=cctv5plus$LR•IPV4•58『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225603/index.m3u8$LR•IPV6•58『线路52』 +#EXTINF:-1 tvg-id="53" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226349/1.m3u8$LR•IPV6•58『线路53』 +#EXTINF:-1 tvg-id="54" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227348/index.m3u8$LR•IPV4•58『线路54』 +#EXTINF:-1 tvg-id="55" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://yc.myds.me:35455/gaoma/cctv5p.m3u8$LR•IPV4•58『线路55』 +#EXTINF:-1 tvg-id="56" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://nas.suntao.online:35455/itv/6000000001000015875.m3u8?cdn=wasusyt$LR•IPV4•58『线路56』 +#EXTINF:-1 tvg-id="57" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +http://hwrr.jx.chinamobile.com:8080/PLTV/88888888/224/3221225649/index.m3u8$LR•IPV4•58『线路57』 +#EXTINF:-1 tvg-id="58" tvg-name="CCTV5+体育赛事" group-title="央视频道",CCTV5+体育赛事 +https://stream1.freetv.fun/88ee08d5c5e75e963f46cba8142888798dde687981709eda707a0b192da8ad4d.ctv$LR•IPV4•58『线路58』 +#EXTINF:-1 tvg-id="1" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://zzssw01.55555.io:9901/tsfile/live/0006_1.m3u8$LR•IPV4•64『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://120.76.248.139/live/bfgd/4200000065.m3u8$LR•IPV4•64『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://112.27.235.94:8000/hls/7/index.m3u8$LR•IPV4•64『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://221.2.148.205:8154/tsfile/live/0006_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•64『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://113.26.202.52:1299/tsfile/live/0006_1.m3u8$LR•IPV4•64『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://61.156.228.12:8154/tsfile/live/0006_1.m3u8$LR•IPV4•64『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://zzssw01.55555.io:9901/tsfile/live/0006_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•64『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://genglei.8866.org:9901/tsfile/live/0006_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•64『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://zzssw01.55555.io:9901/tsfile/live/0006_1.m3u8$LR•IPV4•64『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://120.76.248.139/live/bfgd/4200000065.m3u8$LR•IPV4•64『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://112.27.235.94:8000/hls/7/index.m3u8$LR•IPV4•64『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://221.2.148.205:8154/tsfile/live/0006_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•64『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://113.26.202.52:1299/tsfile/live/0006_1.m3u8$LR•IPV4•64『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://61.156.228.12:8154/tsfile/live/0006_1.m3u8$LR•IPV4•64『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://zzssw01.55555.io:9901/tsfile/live/0006_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•64『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://genglei.8866.org:9901/tsfile/live/0006_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•64『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://61.156.228.12:8154/tsfile/live/0006_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•64『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://101.74.28.84:9901/tsfile/live/0006_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•64『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://1.195.131.143:9901/tsfile/live/0006_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•64『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://101.66.198.42:9901/tsfile/live/0006_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•64『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://123.163.21.101:9901/tsfile/live/0006_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•64『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226010$LR•IPV4•64『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://iptv.huuc.edu.cn/hls/cctv6hd.m3u8$LR•IPV4•64『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +https://smart.pendy.dpdns.org/Smart.php?id=cctv6$LR•IPV4•64『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +https://www.freetv.top/migu/624878396.m3u8?migutoken=ee6c3d925888b2938ca61a2c94d84986ff15ec0fedd3e1e35bcf4ffada20fbeead007033b33efc350632bb959d9bee9da36bac91ec304513f63032fb12e8f570416fc533ede1c4ef94197eb07c$LR•IPV4•64『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://www.freetv.top/migu/624878396.m3u8?migutoken=3adcad950884d4ecc6c6967edee9c162189a1e09480eb5c29b369864aeedaed43c3f951d7eb6c32d86baac49792aacb3264b8f074e746477064fd7b1f172f00a9d84373825617d4366e8c54f0c$LR•IPV4•64『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://yc.myds.me:35455/itv/6000000001000004574.m3u8?cdn=wasusyt$LR•IPV4•64『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://nas.suntao.online:35455/itv/1000000005000265006.m3u8?cdn=ystenlive$LR•IPV4•64『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227325/index.m3u8$LR•IPV4•64『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://183.94.1.118:8801/tsfile/live/0006_1.m3u8$LR•IPV4•64『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://120.192.226.35:8009/hls/6/index.m3u8$LR•IPV4•64『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://123.182.60.29:9002/hls/6/index.m3u8$LR•IPV4•64『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://58.17.48.228:808/hls/6/index.m3u8$LR•IPV4•64『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://61.138.128.226:19901/tsfile/live/0006_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•64『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://36.105.100.208:35455/gaoma/cctv6.m3u8$LR•IPV4•64『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://iptv.0564.org:35455/itv/1000000005000265006.m3u8?cdn=ystenlive$LR•IPV4•64『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://mh0.asia:35455/itv/1000000005000265006.m3u8?cdn=ystenlive$LR•IPV4•64『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +https://api.olelive.com/dis/live/CCTV6HD/hls.m3u8$LR•IPV4•64『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://116.77.32.59:8277/streams/d/cctv6/playlist.m3u8$LR•IPV4•64『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://fm1077.serv00.net/Smart.php?id=cctv6$LR•IPV4•64『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226010/1.m3u8?icpid=88888888&from=1&hms_devid=1012&vqe=3$LR•IPV6•64『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226010/index.m3u8$LR•IPV6•64『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://101.35.240.114:88/live.php?id=CCTV6$LR•IPV4•64『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://218.13.14.6:60050/tsfile/live/1006_1.m3u8$LR•IPV4•64『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://58.57.40.22:9901/tsfile/live/1006_1.m3u8$LR•IPV4•64『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +https://cc06.tv12.xyz/7.m3u8$LR•IPV4•64『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://iptv.huuc.edu.cn/hls/cctv6hd.m3u8$LR•IPV4•64『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://ygbh.site/php/bfgd.php?id=065$LR•IPV4•64『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +https://cc06.tv12.xyz/7.m3u8$LR•IPV4•64『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://112.27.235.94:8000/hls/7/index.m3u8$LR•IPV4•64『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://39.135.135.50/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226010/index.m3u8$LR•IPV4•64『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://t.061899.xyz/tl/dq.php?id=cctv6$LR•IPV4•64『线路52』 +#EXTINF:-1 tvg-id="53" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +https://zby.130519.xyz/PLTV/11/224/3221225741/index.m3u8$LR•IPV4•64『线路53』 +#EXTINF:-1 tvg-id="54" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://148.135.93.213:81/live.php?id=CCTV6$LR•IPV4•64『线路54』 +#EXTINF:-1 tvg-id="55" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226010$LR•IPV4•64『线路55』 +#EXTINF:-1 tvg-id="56" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://iptv.huuc.edu.cn/hls/cctv6hd.m3u8$LR•IPV4•64『线路56』 +#EXTINF:-1 tvg-id="57" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +https://smart.pendy.dpdns.org/Smart.php?id=cctv6$LR•IPV4•64『线路57』 +#EXTINF:-1 tvg-id="58" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226010/1.m3u8?icpid=88888888&from=1&hms_devid=1012&vqe=3$LR•IPV6•64『线路58』 +#EXTINF:-1 tvg-id="59" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226010/index.m3u8$LR•IPV6•64『线路59』 +#EXTINF:-1 tvg-id="60" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +https://www.freetv.top/migu/624878396.m3u8?migutoken=ee6c3d925888b2938ca61a2c94d84986ff15ec0fedd3e1e35bcf4ffada20fbeead007033b33efc350632bb959d9bee9da36bac91ec304513f63032fb12e8f570416fc533ede1c4ef94197eb07c$LR•IPV4•64『线路60』 +#EXTINF:-1 tvg-id="61" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://www.freetv.top/migu/624878396.m3u8?migutoken=3adcad950884d4ecc6c6967edee9c162189a1e09480eb5c29b369864aeedaed43c3f951d7eb6c32d86baac49792aacb3264b8f074e746477064fd7b1f172f00a9d84373825617d4366e8c54f0c$LR•IPV4•64『线路61』 +#EXTINF:-1 tvg-id="62" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://yc.myds.me:35455/itv/6000000001000004574.m3u8?cdn=wasusyt$LR•IPV4•64『线路62』 +#EXTINF:-1 tvg-id="63" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://nas.suntao.online:35455/itv/1000000005000265006.m3u8?cdn=ystenlive$LR•IPV4•64『线路63』 +#EXTINF:-1 tvg-id="64" tvg-name="CCTV6电影" group-title="央视频道",CCTV6电影 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227325/index.m3u8$LR•IPV4•64『线路64』 +#EXTINF:-1 tvg-id="1" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://112.27.235.94:8000/hls/8/index.m3u8$LR•IPV4•53『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://zzssw01.55555.io:9901/tsfile/live/0007_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•53『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://112.27.235.94:8000/hls/8/index.m3u8$LR•IPV4•53『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://zzssw01.55555.io:9901/tsfile/live/0007_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•53『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://1.195.131.143:9901/tsfile/live/0007_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•53『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://101.74.28.84:9901/tsfile/live/0007_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•53『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://101.66.198.42:9901/tsfile/live/0007_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•53『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://123.163.21.101:9901/tsfile/live/0007_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•53『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://106.118.70.125:9901/tsfile/live/0007_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•53『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://61.156.228.12:8154/tsfile/live/0007_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•53『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221225733$LR•IPV4•53『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://goo.bkpcp.top/mg/CCTV7$LR•IPV4•53『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://iptv.huuc.edu.cn/hls/cctv7hd.m3u8$LR•IPV4•53『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +https://smart.pendy.dpdns.org/Smart.php?id=cctv7$LR•IPV4•53『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227180/index.m3u8$LR•IPV4•53『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +https://www.freetv.top/migu/673168121.m3u8?migutoken=44446ab398991313e6a822efdaec82f3b845a2e8f141c172aa857c477255724bbb28fc01d33f764c51106c446af1c57e8815b58822075b194f4cf55cde28fe55f54330d4586c92e75e8aa50a48$LR•IPV4•53『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://www.freetv.top/migu/673168121.m3u8?migutoken=bea4d574a7f96c7e95fb2000e191d57743cfdadfa9a4819385a46bf2bf269d9cf13b9bcc1494158b5bc16ce7d6751825800030253b91daf31a298122a2511f45821009cbeca64d12349bc0227d$LR•IPV4•53『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://yc.myds.me:35455/gaoma/cctv7.m3u8$LR•IPV4•53『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://183.94.1.118:8801/tsfile/live/0007_1.m3u8$LR•IPV4•53『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://120.192.226.35:8009/hls/504/index.m3u8$LR•IPV4•53『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://123.182.60.29:9002/hls/9/index.m3u8$LR•IPV4•53『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://61.138.128.226:19901/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•53『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://36.105.100.208:35455/gaoma/cctv7.m3u8$LR•IPV4•53『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://iptv.0564.org:35455/itv/1000000005000265007.m3u8?cdn=ystenlive$LR•IPV4•53『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://mh0.asia:35455/itv/1000000005000265007.m3u8?cdn=ystenlive$LR•IPV4•53『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +https://api.olelive.com/dis/live/CCTV7HD/hls.m3u8$LR•IPV4•53『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://60.29.124.66:6080/hls/18/index.m3u8$LR•IPV4•53『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://175.171.30.26:5111/hls/337212636/index.m3u8$LR•IPV4•53『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://fm1077.serv00.net/Smart.php?id=cctv7$LR•IPV4•53『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225733/index.m3u8$LR•IPV6•53『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226234/1.m3u8$LR•IPV6•53『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://148.135.93.213/live.php?id=CCTV7$LR•IPV4•53『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://218.13.14.6:60050/tsfile/live/1007_1.m3u8$LR•IPV4•53『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://58.57.40.22:9901/tsfile/live/1007_1.m3u8$LR•IPV4•53『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +https://cc06.tv12.xyz/8.m3u8$LR•IPV4•53『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://iptv.huuc.edu.cn/hls/cctv7hd.m3u8$LR•IPV4•53『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://ygbh.site/php/bfgd.php?id=127$LR•IPV4•53『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +https://cc06.tv12.xyz/8.m3u8$LR•IPV4•53『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://112.27.235.94:8000/hls/8/index.m3u8$LR•IPV4•53『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://39.135.135.87/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225733/index.m3u8$LR•IPV4•53『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://t.061899.xyz/tl/dq.php?id=cctv7$LR•IPV4•53『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +https://zby.130519.xyz/PLTV/11/224/3221225701/index.m3u8$LR•IPV4•53『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://148.135.93.213:81/live.php?id=CCTV7$LR•IPV4•53『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221225733$LR•IPV4•53『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://goo.bkpcp.top/mg/CCTV7$LR•IPV4•53『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://iptv.huuc.edu.cn/hls/cctv7hd.m3u8$LR•IPV4•53『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +https://smart.pendy.dpdns.org/Smart.php?id=cctv7$LR•IPV4•53『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225733/index.m3u8$LR•IPV6•53『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226234/1.m3u8$LR•IPV6•53『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227180/index.m3u8$LR•IPV4•53『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +https://www.freetv.top/migu/673168121.m3u8?migutoken=44446ab398991313e6a822efdaec82f3b845a2e8f141c172aa857c477255724bbb28fc01d33f764c51106c446af1c57e8815b58822075b194f4cf55cde28fe55f54330d4586c92e75e8aa50a48$LR•IPV4•53『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://www.freetv.top/migu/673168121.m3u8?migutoken=bea4d574a7f96c7e95fb2000e191d57743cfdadfa9a4819385a46bf2bf269d9cf13b9bcc1494158b5bc16ce7d6751825800030253b91daf31a298122a2511f45821009cbeca64d12349bc0227d$LR•IPV4•53『线路52』 +#EXTINF:-1 tvg-id="53" tvg-name="CCTV7国防军事" group-title="央视频道",CCTV7国防军事 +http://yc.myds.me:35455/gaoma/cctv7.m3u8$LR•IPV4•53『线路53』 +#EXTINF:-1 tvg-id="1" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://zzssw01.55555.io:9901/tsfile/live/0008_1.m3u8$LR•IPV4•66『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://124.165.251.82:85/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://183.215.134.239:19901/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://61.156.228.12:8154/tsfile/live/0008_1.m3u8$LR•IPV4•66『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://221.2.148.205:8154/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://112.27.235.94:8000/hls/9/index.m3u8$LR•IPV4•66『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://zzssw01.55555.io:9901/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://genglei.8866.org:9901/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://zzssw01.55555.io:9901/tsfile/live/0008_1.m3u8$LR•IPV4•66『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://124.165.251.82:85/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://183.215.134.239:19901/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://61.156.228.12:8154/tsfile/live/0008_1.m3u8$LR•IPV4•66『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://221.2.148.205:8154/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://112.27.235.94:8000/hls/9/index.m3u8$LR•IPV4•66『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://zzssw01.55555.io:9901/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://genglei.8866.org:9901/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://101.74.28.84:9901/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://1.195.131.143:9901/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://101.66.198.42:9901/tsfile/live/0008_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•66『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://123.163.21.101:9901/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://106.118.70.125:9901/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://61.156.228.12:8154/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226008$LR•IPV4•66『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://goo.bkpcp.top/mg/cctv8$LR•IPV4•66『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://iptv.huuc.edu.cn/hls/cctv8hd.m3u8$LR•IPV4•66『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +https://www.freetv.top/migu/624878356.m3u8?migutoken=170b73b07e0cf0d307afea3545da5b9609d7c15461a2f4ac0f43634101df9baf391a446b91e5f84446b6a3b0934bb4730e2f3c4a32a565f904f22c8ff745a094d45dfd49c54f31b0b78156a080$LR•IPV4•66『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +https://smart.pendy.dpdns.org/Smart.php?id=cctv8hd$LR•IPV4•66『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://yc.myds.me:35455/gaoma/cctv8.m3u8$LR•IPV4•66『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://183.94.1.118:8801/tsfile/live/0008_1.m3u8$LR•IPV4•66『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://120.192.226.35:8009/hls/8/index.m3u8$LR•IPV4•66『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://123.182.60.29:9002/hls/8/index.m3u8$LR•IPV4•66『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://58.17.48.228:808/hls/8/index.m3u8$LR•IPV4•66『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://61.138.128.226:19901/tsfile/live/0009_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://36.105.100.208:35455/gaoma/cctv8k_36m.m3u8$LR•IPV4•66『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://iptv.0564.org:35455/itv/1000000005000265008.m3u8?cdn=ystenlive$LR•IPV4•66『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://mh0.asia:35455/itv/1000000005000265008.m3u8?cdn=ystenlive$LR•IPV4•66『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://3501776.xyz:35455/gaoma/cctv8.m3u8$LR•IPV4•66『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +https://api.olelive.com/dis/live/CCTV8HD/hls.m3u8$LR•IPV4•66『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://fm1077.serv00.net/Smart.php?id=cctv8hd$LR•IPV4•66『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://[2409:8087:1a01:df::4051]:80/TVOD/88888888/224/3221225795/main.m3u8$LR•IPV6•66『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226008/index.m3u8$LR•IPV6•66『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226451/1.m3u8$LR•IPV6•66『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226008/index.m3u8$LR•IPV6•66『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://101.35.240.114:88/live.php?id=CCTV8$LR•IPV4•66『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://218.13.14.6:60050/tsfile/live/1008_1.m3u8$LR•IPV4•66『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://58.57.40.22:9901/tsfile/live/1008_1.m3u8$LR•IPV4•66『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +https://cc06.tv12.xyz/9.m3u8$LR•IPV4•66『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://183.196.25.171:808/hls/77/index.m3u8$LR•IPV4•66『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://iptv.huuc.edu.cn/hls/cctv8hd.m3u8$LR•IPV4•66『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://ygbh.site/php/bfgd.php?id=066$LR•IPV4•66『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +https://cc06.tv12.xyz/9.m3u8$LR•IPV4•66『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://112.27.235.94:8000/hls/9/index.m3u8$LR•IPV4•66『线路52』 +#EXTINF:-1 tvg-id="53" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://39.135.135.89/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226008/index.m3u8$LR•IPV4•66『线路53』 +#EXTINF:-1 tvg-id="54" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://t.061899.xyz/tl/dq.php?id=cctv8$LR•IPV4•66『线路54』 +#EXTINF:-1 tvg-id="55" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +https://zby.130519.xyz/PLTV/11/224/3221225736/index.m3u8$LR•IPV4•66『线路55』 +#EXTINF:-1 tvg-id="56" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://148.135.93.213:81/live.php?id=CCTV8$LR•IPV4•66『线路56』 +#EXTINF:-1 tvg-id="57" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226008$LR•IPV4•66『线路57』 +#EXTINF:-1 tvg-id="58" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://goo.bkpcp.top/mg/cctv8$LR•IPV4•66『线路58』 +#EXTINF:-1 tvg-id="59" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://iptv.huuc.edu.cn/hls/cctv8hd.m3u8$LR•IPV4•66『线路59』 +#EXTINF:-1 tvg-id="60" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +https://www.freetv.top/migu/624878356.m3u8?migutoken=170b73b07e0cf0d307afea3545da5b9609d7c15461a2f4ac0f43634101df9baf391a446b91e5f84446b6a3b0934bb4730e2f3c4a32a565f904f22c8ff745a094d45dfd49c54f31b0b78156a080$LR•IPV4•66『线路60』 +#EXTINF:-1 tvg-id="61" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://[2409:8087:1a01:df::4051]:80/TVOD/88888888/224/3221225795/main.m3u8$LR•IPV6•66『线路61』 +#EXTINF:-1 tvg-id="62" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +https://smart.pendy.dpdns.org/Smart.php?id=cctv8hd$LR•IPV4•66『线路62』 +#EXTINF:-1 tvg-id="63" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226008/index.m3u8$LR•IPV6•66『线路63』 +#EXTINF:-1 tvg-id="64" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226451/1.m3u8$LR•IPV6•66『线路64』 +#EXTINF:-1 tvg-id="65" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226008/index.m3u8$LR•IPV6•66『线路65』 +#EXTINF:-1 tvg-id="66" tvg-name="CCTV8电视剧" group-title="央视频道",CCTV8电视剧 +http://yc.myds.me:35455/gaoma/cctv8.m3u8$LR•IPV4•66『线路66』 +#EXTINF:-1 tvg-id="1" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://112.27.235.94:8000/hls/10/index.m3u8$LR•IPV4•55『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://60.16.0.216:5757/hls/10/index.m3u8$LR•IPV4•55『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://zzssw01.55555.io:9901/tsfile/live/0009_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•55『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://112.27.235.94:8000/hls/10/index.m3u8$LR•IPV4•55『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://60.16.0.216:5757/hls/10/index.m3u8$LR•IPV4•55『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://zzssw01.55555.io:9901/tsfile/live/0009_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•55『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://1.195.131.143:9901/tsfile/live/1019_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•55『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://101.74.28.84:9901/tsfile/live/0009_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•55『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://101.66.198.42:9901/tsfile/live/0009_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•55『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://123.163.21.101:9901/tsfile/live/0009_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•55『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://106.118.70.125:9901/tsfile/live/0009_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•55『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://61.156.228.12:8154/tsfile/live/0009_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•55『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221225734$LR•IPV4•55『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://iptv.huuc.edu.cn/hls/cctv9hd.m3u8$LR•IPV4•55『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +https://www.freetv.top/migu/673168140.m3u8?migutoken=749c49cdc31bb395e0349adc81010adc8707f80e51e9d3491ad67bfa71388ad768f7b52c8064338a7ef45eb7ddb192fb4937b21681c82499a0c16653ad9a9bec98ff5ce6ab183e4029bbdf269e$LR•IPV4•55『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +https://smart.pendy.dpdns.org/Smart.php?id=cctv9hd$LR•IPV4•55『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://www.freetv.top/migu/673168140.m3u8?migutoken=b6b3dff09079aa89b4ea1988e02de40fa003df2db6f755979b0c414bdfffe3225adf1ec44edf5934481e00ada14c3b23dc6e93bb72f70ed2319f17002205dc998b6ce2dde3d00bf5701f8261ec$LR•IPV4•55『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://yc.myds.me:35455/gaoma/cctv9.m3u8$LR•IPV4•55『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://nas.suntao.online:35455/itv/1000000005000265009.m3u8?cdn=ystenlive$LR•IPV4•55『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://183.94.1.118:8801/tsfile/live/0009_1.m3u8$LR•IPV4•55『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://120.192.226.35:8009/hls/509/index.m3u8$LR•IPV4•55『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://123.182.60.29:9002/hls/51/index.m3u8$LR•IPV4•55『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://58.17.48.228:808/hls/9/index.m3u8$LR•IPV4•55『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://61.138.128.226:19901/tsfile/live/0009_2.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•55『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://36.105.100.208:35455/gaoma/cctv9.m3u8$LR•IPV4•55『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://iptv.0564.org:35455/itv/1000000005000265009.m3u8?cdn=ystenlive$LR•IPV4•55『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://mh0.asia:35455/itv/1000000005000265009.m3u8?cdn=ystenlive$LR•IPV4•55『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://3501776.xyz:35455/gaoma/cctv9.m3u8$LR•IPV4•55『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +https://api.olelive.com/dis/live/CCTV9HD/hls.m3u8$LR•IPV4•55『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://fm1077.serv00.net/Smart.php?id=cctv9hd$LR•IPV4•55『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225734/index.m3u8$LR•IPV6•55『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226236/1.m3u8$LR•IPV6•55『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225734/index.m3u8$LR•IPV6•55『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://148.135.93.213/live.php?id=CCTV9$LR•IPV4•55『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://218.13.14.6:60050/tsfile/live/1009_1.m3u8$LR•IPV4•55『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://58.57.40.22:9901/tsfile/live/1009_1.m3u8$LR•IPV4•55『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +https://cc06.tv12.xyz/10.m3u8$LR•IPV4•55『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://iptv.huuc.edu.cn/hls/cctv9hd.m3u8$LR•IPV4•55『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://ygbh.site/php/bfgd.php?id=128$LR•IPV4•55『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +https://cc06.tv12.xyz/10.m3u8$LR•IPV4•55『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://112.27.235.94:8000/hls/10/index.m3u8$LR•IPV4•55『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://39.135.135.38/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225734/index.m3u8$LR•IPV4•55『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://t.061899.xyz/tl/dq.php?id=cctv9$LR•IPV4•55『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://p.ytelc.com/169l/0/cctv.php?id=cctv9$LR•IPV4•55『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://148.135.93.213:81/live.php?id=CCTV9$LR•IPV4•55『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221225734$LR•IPV4•55『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://iptv.huuc.edu.cn/hls/cctv9hd.m3u8$LR•IPV4•55『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +https://www.freetv.top/migu/673168140.m3u8?migutoken=749c49cdc31bb395e0349adc81010adc8707f80e51e9d3491ad67bfa71388ad768f7b52c8064338a7ef45eb7ddb192fb4937b21681c82499a0c16653ad9a9bec98ff5ce6ab183e4029bbdf269e$LR•IPV4•55『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225734/index.m3u8$LR•IPV6•55『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +https://smart.pendy.dpdns.org/Smart.php?id=cctv9hd$LR•IPV4•55『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226236/1.m3u8$LR•IPV6•55『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225734/index.m3u8$LR•IPV6•55『线路52』 +#EXTINF:-1 tvg-id="53" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://www.freetv.top/migu/673168140.m3u8?migutoken=b6b3dff09079aa89b4ea1988e02de40fa003df2db6f755979b0c414bdfffe3225adf1ec44edf5934481e00ada14c3b23dc6e93bb72f70ed2319f17002205dc998b6ce2dde3d00bf5701f8261ec$LR•IPV4•55『线路53』 +#EXTINF:-1 tvg-id="54" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://yc.myds.me:35455/gaoma/cctv9.m3u8$LR•IPV4•55『线路54』 +#EXTINF:-1 tvg-id="55" tvg-name="CCTV9纪录" group-title="央视频道",CCTV9纪录 +http://nas.suntao.online:35455/itv/1000000005000265009.m3u8?cdn=ystenlive$LR•IPV4•55『线路55』 +#EXTINF:-1 tvg-id="1" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://112.27.235.94:8000/hls/11/index.m3u8$LR•IPV4•55『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +https://cc06.tv12.xyz/11.m3u8$LR•IPV4•55『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://zzssw01.55555.io:9901/tsfile/live/0010_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•55『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://112.27.235.94:8000/hls/11/index.m3u8$LR•IPV4•55『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +https://cc06.tv12.xyz/11.m3u8$LR•IPV4•55『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://zzssw01.55555.io:9901/tsfile/live/0010_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•55『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://101.74.28.84:9901/tsfile/live/0010_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•55『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://101.66.198.42:9901/tsfile/live/0010_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•55『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://123.163.21.101:9901/tsfile/live/0010_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•55『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://106.118.70.125:9901/tsfile/live/0010_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•55『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://1.195.131.143:9901/tsfile/live/1020_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•55『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://61.156.228.12:8154/tsfile/live/0010_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•55『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://z.b.bkpcp.top/m.php?id=CCTV-10科教科教$LR•IPV4•55『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://goo.bkpcp.top/mg/cctv10$LR•IPV4•55『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://iptv.huuc.edu.cn/hls/cctv10hd.m3u8$LR•IPV4•55『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +https://smart.pendy.dpdns.org/Smart.php?id=cctv10hd$LR•IPV4•55『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +https://www.freetv.top/migu/624878405.m3u8?migutoken=e7e8abe9ae322869a93e8450014e08c5949217331c53007abb9f6eee64b06cc42f81828befee8b129005bcdebf805a1bbd19f0949e8329cf7ff4ab9379e930cfb8185ddf66c83b972ea6481e86$LR•IPV4•55『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://www.freetv.top/migu/624878405.m3u8?migutoken=994dc87ce4767211215bbc02fa208301259959a2d995deb9996c41b650e244fc75c3d5bae41d623bed5ba96aa38c7ea483d856771c119f74e8bb93fb60dc8304e146d0bf46405e88554d84e414$LR•IPV4•55『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://yc.myds.me:35455/gaoma/cctv10.m3u8$LR•IPV4•55『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://183.94.1.118:8801/tsfile/live/0010_1.m3u8$LR•IPV4•55『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://120.192.226.35:8009/hls/506/index.m3u8$LR•IPV4•55『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://123.182.60.29:9002/hls/10/index.m3u8$LR•IPV4•55『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://58.17.48.228:808/hls/10/index.m3u8$LR•IPV4•55『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://61.138.128.226:19901/tsfile/live/0011_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•55『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://36.105.100.208:35455/gaoma/cctv10.m3u8$LR•IPV4•55『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://iptv.0564.org:35455/itv/1000000005000265010.m3u8?cdn=ystenlive$LR•IPV4•55『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://mh0.asia:35455/itv/1000000005000265010.m3u8?cdn=ystenlive$LR•IPV4•55『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://3501776.xyz:35455/gaoma/cctv10.m3u8$LR•IPV4•55『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +https://api.olelive.com/dis/live/CCTV10HD/hls.m3u8$LR•IPV4•55『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://fm1077.serv00.net/Smart.php?id=cctv10hd$LR•IPV4•55『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225730/index.m3u8$LR•IPV6•55『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226449/1.m3u8$LR•IPV6•55『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225730/index.m3u8$LR•IPV6•55『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://101.35.240.114:88/live.php?id=CCTV10$LR•IPV4•55『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://218.13.14.6:60050/tsfile/live/1010_1.m3u8$LR•IPV4•55『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://39.164.160.249:9901/tsfile/live/0010_1.m3u8$LR•IPV4•55『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +https://cc06.tv12.xyz/11.m3u8$LR•IPV4•55『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://iptv.huuc.edu.cn/hls/cctv10hd.m3u8$LR•IPV4•55『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://ygbh.site/php/bfgd.php?id=129$LR•IPV4•55『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +https://cc06.tv12.xyz/11.m3u8$LR•IPV4•55『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://112.27.235.94:8000/hls/11/index.m3u8$LR•IPV4•55『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://39.135.135.75/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225730/index.m3u8$LR•IPV4•55『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://t.061899.xyz/tl/dq.php?id=cctv10$LR•IPV4•55『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +https://zby.130519.xyz/PLTV/11/224/3221225743/index.m3u8$LR•IPV4•55『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://148.135.93.213:81/live.php?id=CCTV10$LR•IPV4•55『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://z.b.bkpcp.top/m.php?id=CCTV-10科教科教$LR•IPV4•55『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://goo.bkpcp.top/mg/cctv10$LR•IPV4•55『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://iptv.huuc.edu.cn/hls/cctv10hd.m3u8$LR•IPV4•55『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +https://smart.pendy.dpdns.org/Smart.php?id=cctv10hd$LR•IPV4•55『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225730/index.m3u8$LR•IPV6•55『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226449/1.m3u8$LR•IPV6•55『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225730/index.m3u8$LR•IPV6•55『线路52』 +#EXTINF:-1 tvg-id="53" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +https://www.freetv.top/migu/624878405.m3u8?migutoken=e7e8abe9ae322869a93e8450014e08c5949217331c53007abb9f6eee64b06cc42f81828befee8b129005bcdebf805a1bbd19f0949e8329cf7ff4ab9379e930cfb8185ddf66c83b972ea6481e86$LR•IPV4•55『线路53』 +#EXTINF:-1 tvg-id="54" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://www.freetv.top/migu/624878405.m3u8?migutoken=994dc87ce4767211215bbc02fa208301259959a2d995deb9996c41b650e244fc75c3d5bae41d623bed5ba96aa38c7ea483d856771c119f74e8bb93fb60dc8304e146d0bf46405e88554d84e414$LR•IPV4•55『线路54』 +#EXTINF:-1 tvg-id="55" tvg-name="CCTV10科教" group-title="央视频道",CCTV10科教 +http://yc.myds.me:35455/gaoma/cctv10.m3u8$LR•IPV4•55『线路55』 +#EXTINF:-1 tvg-id="1" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://120.76.248.139/live/bfgd/4200000130.m3u8$LR•IPV4•57『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://112.27.235.94:8000/hls/12/index.m3u8$LR•IPV4•57『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://60.16.0.216:5757/hls/12/index.m3u8$LR•IPV4•57『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://zzssw01.55555.io:9901/tsfile/live/0011_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•57『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://120.76.248.139/live/bfgd/4200000130.m3u8$LR•IPV4•57『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://112.27.235.94:8000/hls/12/index.m3u8$LR•IPV4•57『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://60.16.0.216:5757/hls/12/index.m3u8$LR•IPV4•57『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://zzssw01.55555.io:9901/tsfile/live/0011_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•57『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://101.74.28.84:9901/tsfile/live/0011_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•57『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://61.156.228.12:8154/tsfile/live/0011_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•57『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://101.66.198.42:9901/tsfile/live/0011_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•57『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://123.163.21.101:9901/tsfile/live/0011_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•57『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://1.195.131.143:9901/tsfile/live/1021_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•57『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://lu.wqwqwq.sbs/itv/1000000005000265011.m3u8?cdn=ystenlive$LR•IPV4•57『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226565$LR•IPV4•57『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://iptv.huuc.edu.cn/hls/cctv11hd.m3u8$LR•IPV4•57『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +https://smart.pendy.dpdns.org/Smart.php?id=cctv11$LR•IPV4•57『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227171/index.m3u8$LR•IPV4•57『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://yc.myds.me:35455/gaoma/cctv11.m3u8$LR•IPV4•57『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +https://stream1.freetv.fun/522d8760b9c0e8172aefbf6b1aac7030daf6f613fabce8b1d00a15416ad0b052.m3u8$LR•IPV4•57『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://183.94.1.118:8801/tsfile/live/0011_1.m3u8$LR•IPV4•57『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://120.192.226.35:8009/hls/11/index.m3u8$LR•IPV4•57『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://123.182.60.29:9002/hls/11/index.m3u8$LR•IPV4•57『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://61.138.128.226:19901/tsfile/live/0011_2.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•57『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://36.105.100.208:35455/gaoma/cctv11.m3u8$LR•IPV4•57『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://iptv.0564.org:35455/itv/1000000005000265011.m3u8?cdn=ystenlive$LR•IPV4•57『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://mh0.asia:35455/itv/1000000005000265011.m3u8?cdn=ystenlive$LR•IPV4•57『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://3501776.xyz:35455/itv/1000000005000265011.m3u8?cdn=ystenlive$LR•IPV4•57『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +https://api.olelive.com/dis/live/CCTV11HD/hls.m3u8$LR•IPV4•57『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://60.29.124.66:6080/hls/22/index.m3u8$LR•IPV4•57『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://fm1077.serv00.net/Smart.php?id=cctv11$LR•IPV4•57『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/yinhe/88888888/224/3221225597/index.m3u8$LR•IPV6•57『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225597/index.m3u8$LR•IPV6•57『线路33』 +#EXTINF:-1 tvg-id="34" 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•57『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://148.135.93.213/live.php?id=CCTV11$LR•IPV4•57『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://218.13.14.6:60050/tsfile/live/1011_1.m3u8$LR•IPV4•57『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://39.164.160.249:9901/tsfile/live/0011_1.m3u8$LR•IPV4•57『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +https://cc06.tv12.xyz/12.m3u8$LR•IPV4•57『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://183.196.25.171:808/hls/11/index.m3u8$LR•IPV4•57『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://iptv.huuc.edu.cn/hls/cctv11hd.m3u8$LR•IPV4•57『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://ygbh.site/php/bfgd.php?id=130$LR•IPV4•57『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +https://cc06.tv12.xyz/12.m3u8$LR•IPV4•57『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://112.27.235.94:8000/hls/12/index.m3u8$LR•IPV4•57『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://39.135.135.82/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225597/index.m3u8$LR•IPV4•57『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://t.061899.xyz/tl/dq.php?id=cctv11$LR•IPV4•57『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +https://zby.130519.xyz/PLTV/11/224/3221226101/index.m3u8$LR•IPV4•57『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://148.135.93.213:81/live.php?id=CCTV11$LR•IPV4•57『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226565$LR•IPV4•57『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://iptv.huuc.edu.cn/hls/cctv11hd.m3u8$LR•IPV4•57『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +https://smart.pendy.dpdns.org/Smart.php?id=cctv11$LR•IPV4•57『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/yinhe/88888888/224/3221225597/index.m3u8$LR•IPV6•57『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225597/index.m3u8$LR•IPV6•57『线路52』 +#EXTINF:-1 tvg-id="53" 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•57『线路53』 +#EXTINF:-1 tvg-id="54" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227171/index.m3u8$LR•IPV4•57『线路54』 +#EXTINF:-1 tvg-id="55" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://yc.myds.me:35455/gaoma/cctv11.m3u8$LR•IPV4•57『线路55』 +#EXTINF:-1 tvg-id="56" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +https://stream1.freetv.fun/522d8760b9c0e8172aefbf6b1aac7030daf6f613fabce8b1d00a15416ad0b052.m3u8$LR•IPV4•57『线路56』 +#EXTINF:-1 tvg-id="57" tvg-name="CCTV11戏曲" group-title="央视频道",CCTV11戏曲 +http://lu.wqwqwq.sbs/itv/1000000005000265011.m3u8?cdn=ystenlive$LR•IPV4•57『线路57』 +#EXTINF:-1 tvg-id="1" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://120.76.248.139/live/bfgd/4200000131.m3u8$LR•IPV4•60『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://124.165.251.82:85/tsfile/live/0012_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•60『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://112.27.235.94:8000/hls/13/index.m3u8$LR•IPV4•60『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +https://cc06.tv12.xyz/13.m3u8$LR•IPV4•60『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://60.16.0.216:5757/hls/13/index.m3u8$LR•IPV4•60『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://zzssw01.55555.io:9901/tsfile/live/0012_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•60『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://120.76.248.139/live/bfgd/4200000131.m3u8$LR•IPV4•60『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://124.165.251.82:85/tsfile/live/0012_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•60『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://112.27.235.94:8000/hls/13/index.m3u8$LR•IPV4•60『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +https://cc06.tv12.xyz/13.m3u8$LR•IPV4•60『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://60.16.0.216:5757/hls/13/index.m3u8$LR•IPV4•60『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://zzssw01.55555.io:9901/tsfile/live/0012_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•60『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://106.118.70.125:9901/tsfile/live/0012_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•60『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://101.66.198.42:9901/tsfile/live/0012_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•60『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://123.163.21.101:9901/tsfile/live/0012_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•60『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://1.195.131.143:9901/tsfile/live/1022_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•60『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://101.74.28.84:9901/tsfile/live/0012_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•60『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221225731$LR•IPV4•60『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://z.b.bkpcp.top/m.php?id=CCTV-12社会与法社会与法$LR•IPV4•60『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://iptv.huuc.edu.cn/hls/cctv12hd.m3u8$LR•IPV4•60『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +https://www.freetv.top/migu/673168185.m3u8?migutoken=37acadb43b1d7932b0a1e8a4f2d01a06b42a10c31f3ccb417bae200ac3028f30a8110509f2cd6cd130aee4b21c85693aa49817f3381e4d28e140d8db1a20b6fecea22fec17a70ff1341efe6081$LR•IPV4•60『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +https://smart.pendy.dpdns.org/Smart.php?id=cctv12$LR•IPV4•60『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://www.freetv.top/migu/673168185.m3u8?migutoken=21a3954b28c73a4240272889ec94c3318c23068f666c79e61379cb154a890e4e7e3c998a578b29a381972f128751898531cb713221ff95385afec91149321ad772e31489fa01e553c8223e976a$LR•IPV4•60『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://183.94.1.118:8801/tsfile/live/0012_1.m3u8$LR•IPV4•60『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://120.192.226.35:8009/hls/507/index.m3u8$LR•IPV4•60『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://123.182.60.29:9002/hls/12/index.m3u8$LR•IPV4•60『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://61.138.128.226:19901/tsfile/live/0013_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•60『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://36.105.100.208:35455/gaoma/cctv12.m3u8$LR•IPV4•60『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://iptv.0564.org:35455/itv/1000000005000265012.m3u8?cdn=ystenlive$LR•IPV4•60『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://mh0.asia:35455/itv/1000000005000265012.m3u8?cdn=ystenlive$LR•IPV4•60『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://3501776.xyz:35455/gaoma/cctv12.m3u8$LR•IPV4•60『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +https://api.olelive.com/dis/live/CCTV12HD/hls.m3u8$LR•IPV4•60『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://175.171.30.26:5111/hls/397332519/index.m3u8$LR•IPV4•60『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://fm1077.serv00.net/Smart.php?id=cctv12$LR•IPV4•60『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://[2409:8087:1:20:20::29]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226228/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E2knJCFLHz_HqfBZXNGeA1A%7E_eNUb$LR•IPV6•60『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225731/index.m3u8$LR•IPV6•60『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226228/1.m3u8$LR•IPV6•60『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225731/index.m3u8$LR•IPV6•60『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://101.35.240.114:88/live.php?id=CCTV12$LR•IPV4•60『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://218.13.14.6:60050/tsfile/live/1012_1.m3u8$LR•IPV4•60『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://58.57.40.22:9901/tsfile/live/1012_1.m3u8$LR•IPV4•60『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +https://cc06.tv12.xyz/13.m3u8$LR•IPV4•60『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://iptv.huuc.edu.cn/hls/cctv12hd.m3u8$LR•IPV4•60『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://ygbh.site/php/bfgd.php?id=131$LR•IPV4•60『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +https://cc06.tv12.xyz/13.m3u8$LR•IPV4•60『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://112.27.235.94:8000/hls/13/index.m3u8$LR•IPV4•60『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://39.135.135.11/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225731/index.m3u8$LR•IPV4•60『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://t.061899.xyz/tl/dq.php?id=cctv12$LR•IPV4•60『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +https://zby.130519.xyz/PLTV/11/224/3221226103/index.m3u8$LR•IPV4•60『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://148.135.93.213:81/live.php?id=CCTV12$LR•IPV4•60『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221225731$LR•IPV4•60『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://z.b.bkpcp.top/m.php?id=CCTV-12社会与法社会与法$LR•IPV4•60『线路52』 +#EXTINF:-1 tvg-id="53" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://iptv.huuc.edu.cn/hls/cctv12hd.m3u8$LR•IPV4•60『线路53』 +#EXTINF:-1 tvg-id="54" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +https://www.freetv.top/migu/673168185.m3u8?migutoken=37acadb43b1d7932b0a1e8a4f2d01a06b42a10c31f3ccb417bae200ac3028f30a8110509f2cd6cd130aee4b21c85693aa49817f3381e4d28e140d8db1a20b6fecea22fec17a70ff1341efe6081$LR•IPV4•60『线路54』 +#EXTINF:-1 tvg-id="55" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +https://smart.pendy.dpdns.org/Smart.php?id=cctv12$LR•IPV4•60『线路55』 +#EXTINF:-1 tvg-id="56" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://[2409:8087:1:20:20::29]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226228/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E2knJCFLHz_HqfBZXNGeA1A%7E_eNUb$LR•IPV6•60『线路56』 +#EXTINF:-1 tvg-id="57" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225731/index.m3u8$LR•IPV6•60『线路57』 +#EXTINF:-1 tvg-id="58" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226228/1.m3u8$LR•IPV6•60『线路58』 +#EXTINF:-1 tvg-id="59" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225731/index.m3u8$LR•IPV6•60『线路59』 +#EXTINF:-1 tvg-id="60" tvg-name="CCTV12社会与法" group-title="央视频道",CCTV12社会与法 +http://www.freetv.top/migu/673168185.m3u8?migutoken=21a3954b28c73a4240272889ec94c3318c23068f666c79e61379cb154a890e4e7e3c998a578b29a381972f128751898531cb713221ff95385afec91149321ad772e31489fa01e553c8223e976a$LR•IPV4•60『线路60』 +#EXTINF:-1 tvg-id="1" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://ali-m-l.cztv.com/channels/lantian/channel21/1080p.m3u8$LR•IPV4•61『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://112.27.235.94:8000/hls/14/index.m3u8$LR•IPV4•61『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +https://cc06.tv12.xyz/14.m3u8$LR•IPV4•61『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://183.215.134.239:19901/tsfile/live/0013_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +https://event.pull.hebtv.com/jishi/cp1.m3u8$LR•IPV4•61『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://zzssw01.55555.io:9901/tsfile/live/0013_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://60.16.0.216:5757/hls/14/index.m3u8$LR•IPV4•61『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://ali-m-l.cztv.com/channels/lantian/channel21/1080p.m3u8$LR•IPV4•61『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://112.27.235.94:8000/hls/14/index.m3u8$LR•IPV4•61『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +https://cc06.tv12.xyz/14.m3u8$LR•IPV4•61『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://183.215.134.239:19901/tsfile/live/0013_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +https://event.pull.hebtv.com/jishi/cp1.m3u8$LR•IPV4•61『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://zzssw01.55555.io:9901/tsfile/live/0013_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://60.16.0.216:5757/hls/14/index.m3u8$LR•IPV4•61『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://1.195.131.143:9901/tsfile/live/1023_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://61.156.228.12:8154/tsfile/live/0013_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://101.66.198.42:9901/tsfile/live/0013_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•61『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://123.163.21.101:9901/tsfile/live/0013_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://106.118.70.125:9901/tsfile/live/0013_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://101.74.28.84:9901/tsfile/live/0013_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://jwplay.hebyun.com.cn/live/cctv13/1500k/tzwj_video.m3u8$LR•IPV4•61『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +https://ldncctvwbcdcnc.v.wscdns.com/ldncctvwbcd/cdrmldcctv13_1/index.m3u8$LR•IPV4•61『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://z.b.bkpcp.top/m.php?id=cctv13$LR•IPV4•61『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://j.x.bkpcp.top/jx/CCTV13HD$LR•IPV4•61『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://iptv.huuc.edu.cn/hls/cctv13hd.m3u8$LR•IPV4•61『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +https://www.freetv.top/migu/608807423.m3u8?migutoken=ac19a58805588401a8e818b6dd00df9b327912af3611ba95f89235e7020821668a2b6dc65ccc3904967da59d0a9742565c56ea582baf8915d068035054818ef0f369dab64705a6a7f7120529ec$LR•IPV4•61『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +https://smart.pendy.dpdns.org/Smart.php?id=cctv13$LR•IPV4•61『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://183.94.1.118:8801/tsfile/live/0013_1.m3u8$LR•IPV4•61『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://120.192.226.35:8009/hls/13/index.m3u8$LR•IPV4•61『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://123.182.60.29:9002/hls/13/index.m3u8$LR•IPV4•61『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://61.163.181.78:9901/tsfile/live/0013_1.m3u8$LR•IPV4•61『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://61.138.128.226:19901/tsfile/live/0013_2.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://36.105.100.208:35455/gaoma/cctv13.m3u8$LR•IPV4•61『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://iptv.0564.org:35455/gaoma/cctv13.m3u8$LR•IPV4•61『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://3501776.xyz:35455/gaoma/cctv13.m3u8$LR•IPV4•61『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +https://api.olelive.com/dis/live/CCTV13HD/hls.m3u8$LR•IPV4•61『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://60.29.124.66:6080/hls/23/index.m3u8$LR•IPV4•61『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://fm1077.serv00.net/Smart.php?id=cctv13$LR•IPV4•61『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226011/index.m3u8$LR•IPV6•61『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://148.135.93.213/live.php?id=CCTV13$LR•IPV4•61『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://218.13.14.6:60050/tsfile/live/1013_1.m3u8$LR•IPV4•61『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://58.57.40.22:9901/tsfile/live/1013_1.m3u8$LR•IPV4•61『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +https://cc06.tv12.xyz/14.m3u8$LR•IPV4•61『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://iptv.huuc.edu.cn/hls/cctv13hd.m3u8$LR•IPV4•61『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://ygbh.site/php/bfgd.php?id=067$LR•IPV4•61『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +https://cc06.tv12.xyz/14.m3u8$LR•IPV4•61『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://112.27.235.94:8000/hls/14/index.m3u8$LR•IPV4•61『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://39.135.135.59/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226011/index.m3u8$LR•IPV4•61『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://t.061899.xyz/tl/dq.php?id=cctv13$LR•IPV4•61『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +https://zby.130519.xyz/PLTV/11/224/3221226128/index.m3u8$LR•IPV4•61『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://148.135.93.213:81/live.php?id=CCTV13$LR•IPV4•61『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +https://event.pull.hebtv.com/jishi/cp1.m3u8$LR•IPV4•61『线路52』 +#EXTINF:-1 tvg-id="53" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://z.b.bkpcp.top/m.php?id=cctv13$LR•IPV4•61『线路53』 +#EXTINF:-1 tvg-id="54" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://j.x.bkpcp.top/jx/CCTV13HD$LR•IPV4•61『线路54』 +#EXTINF:-1 tvg-id="55" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://ali-m-l.cztv.com/channels/lantian/channel21/1080p.m3u8$LR•IPV4•61『线路55』 +#EXTINF:-1 tvg-id="56" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://jwplay.hebyun.com.cn/live/cctv13/1500k/tzwj_video.m3u8$LR•IPV4•61『线路56』 +#EXTINF:-1 tvg-id="57" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +https://ldncctvwbcdcnc.v.wscdns.com/ldncctvwbcd/cdrmldcctv13_1/index.m3u8$LR•IPV4•61『线路57』 +#EXTINF:-1 tvg-id="58" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://iptv.huuc.edu.cn/hls/cctv13hd.m3u8$LR•IPV4•61『线路58』 +#EXTINF:-1 tvg-id="59" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +https://www.freetv.top/migu/608807423.m3u8?migutoken=ac19a58805588401a8e818b6dd00df9b327912af3611ba95f89235e7020821668a2b6dc65ccc3904967da59d0a9742565c56ea582baf8915d068035054818ef0f369dab64705a6a7f7120529ec$LR•IPV4•61『线路59』 +#EXTINF:-1 tvg-id="60" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +https://smart.pendy.dpdns.org/Smart.php?id=cctv13$LR•IPV4•61『线路60』 +#EXTINF:-1 tvg-id="61" tvg-name="CCTV13新闻" group-title="央视频道",CCTV13新闻 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226011/index.m3u8$LR•IPV6•61『线路61』 +#EXTINF:-1 tvg-id="1" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +https://event.pull.hebtv.com/jishi/cp2.m3u8$LR•IPV4•59『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://112.27.235.94:8000/hls/15/index.m3u8$LR•IPV4•59『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +https://cc06.tv12.xyz/15.m3u8$LR•IPV4•59『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://60.16.0.216:5757/hls/15/index.m3u8$LR•IPV4•59『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://zzssw01.55555.io:9901/tsfile/live/0014_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•59『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +https://event.pull.hebtv.com/jishi/cp2.m3u8$LR•IPV4•59『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://112.27.235.94:8000/hls/15/index.m3u8$LR•IPV4•59『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +https://cc06.tv12.xyz/15.m3u8$LR•IPV4•59『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://60.16.0.216:5757/hls/15/index.m3u8$LR•IPV4•59『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://zzssw01.55555.io:9901/tsfile/live/0014_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•59『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://106.118.70.125:9901/tsfile/live/0014_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•59『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://1.195.131.143:9901/tsfile/live/1024_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•59『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://61.156.228.12:8154/tsfile/live/0014_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•59『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://101.66.198.42:9901/tsfile/live/0014_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•59『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://123.163.21.101:9901/tsfile/live/0014_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•59『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://101.74.28.84:9901/tsfile/live/0014_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•59『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +rtsp://103.251.96.71/PLTV/88888888/224/3221225783/10000100000000060000000000726027_0.smil?icpid=SSPID&accounttype=1&limitflux=-1&limitdur=-1&accountinfo=:20240213104135$LR•IPV4•59『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221225732$LR•IPV4•59『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://iptv.huuc.edu.cn/hls/cctv14hd.m3u8$LR•IPV4•59『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +https://www.freetv.top/migu/624878440.m3u8?migutoken=239edad94ac0bbff14f123c7f8996ed7639110bd6cf64ec8ba8cf85842224956d452ec8b683385cb27f8a7685224a03e3aa4d914b8fe33249da9df699351b105c795452d03f2be0a1f1e39adb0$LR•IPV4•59『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +https://smart.pendy.dpdns.org/Smart.php?id=cctv14$LR•IPV4•59『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://www.freetv.top/migu/624878440.m3u8?migutoken=303d044cf07163e1e2e8e4ecc8b6696ed836301cf573b626d3c00ec50cd362cc5e6a93afc2fd102cb883155554597d14eaa697edc9b0a30e56fc0115f81d8fbb8b87129e5bedad7d2173178f03$LR•IPV4•59『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://yc.myds.me:35455/gaoma/cctv14.m3u8$LR•IPV4•59『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://183.94.1.118:8801/tsfile/live/0014_1.m3u8$LR•IPV4•59『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://113.56.95.69:53765/tsfile/live/0015_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•59『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://123.182.60.29:9002/hls/14/index.m3u8$LR•IPV4•59『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://58.17.48.228:808/hls/14/index.m3u8$LR•IPV4•59『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://61.138.128.226:19901/tsfile/live/0015_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•59『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://222.173.108.238:352/tsfile/live/0014_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•59『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://36.105.100.208:35455/gaoma/cctv14.m3u8$LR•IPV4•59『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://iptv.0564.org:35455/itv/1000000005000265013.m3u8?cdn=ystenlive$LR•IPV4•59『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://mh0.asia:35455/itv/1000000005000265013.m3u8?cdn=ystenlive$LR•IPV4•59『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://3501776.xyz:35455/gaoma/cctv14.m3u8$LR•IPV4•59『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://fm1077.serv00.net/Smart.php?id=cctv14$LR•IPV4•59『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225732/index.m3u8$LR•IPV6•59『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226229/1.m3u8$LR•IPV6•59『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225732/index.m3u8$LR•IPV6•59『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://101.35.240.114:88/live.php?id=CCTV14$LR•IPV4•59『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://218.13.14.6:60050/tsfile/live/1014_1.m3u8$LR•IPV4•59『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://39.164.160.249:9901/tsfile/live/0014_1.m3u8$LR•IPV4•59『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +https://cc06.tv12.xyz/15.m3u8$LR•IPV4•59『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://iptv.huuc.edu.cn/hls/cctv14hd.m3u8$LR•IPV4•59『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://ygbh.site/php/bfgd.php?id=132$LR•IPV4•59『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +https://cc06.tv12.xyz/15.m3u8$LR•IPV4•59『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://112.27.235.94:8000/hls/15/index.m3u8$LR•IPV4•59『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://39.135.133.173/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225732/index.m3u8$LR•IPV4•59『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://t.061899.xyz/tl/dq.php?id=cctv14$LR•IPV4•59『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +https://zby.130519.xyz/PLTV/11/224/3221225738/index.m3u8$LR•IPV4•59『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://148.135.93.213:81/live.php?id=CCTV14$LR•IPV4•59『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +https://event.pull.hebtv.com/jishi/cp2.m3u8#rtsp://103.251.96.71/PLTV/88888888/224/3221225783/10000100000000060000000000726027_0.smil?icpid=SSPID&accounttype=1&limitflux=-1&limitdur=-1&accountinfo=:20240213104135$LR•IPV4•59『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221225732$LR•IPV4•59『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://iptv.huuc.edu.cn/hls/cctv14hd.m3u8$LR•IPV4•59『线路52』 +#EXTINF:-1 tvg-id="53" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +https://www.freetv.top/migu/624878440.m3u8?migutoken=239edad94ac0bbff14f123c7f8996ed7639110bd6cf64ec8ba8cf85842224956d452ec8b683385cb27f8a7685224a03e3aa4d914b8fe33249da9df699351b105c795452d03f2be0a1f1e39adb0$LR•IPV4•59『线路53』 +#EXTINF:-1 tvg-id="54" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +https://smart.pendy.dpdns.org/Smart.php?id=cctv14$LR•IPV4•59『线路54』 +#EXTINF:-1 tvg-id="55" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225732/index.m3u8$LR•IPV6•59『线路55』 +#EXTINF:-1 tvg-id="56" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226229/1.m3u8$LR•IPV6•59『线路56』 +#EXTINF:-1 tvg-id="57" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225732/index.m3u8$LR•IPV6•59『线路57』 +#EXTINF:-1 tvg-id="58" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://www.freetv.top/migu/624878440.m3u8?migutoken=303d044cf07163e1e2e8e4ecc8b6696ed836301cf573b626d3c00ec50cd362cc5e6a93afc2fd102cb883155554597d14eaa697edc9b0a30e56fc0115f81d8fbb8b87129e5bedad7d2173178f03$LR•IPV4•59『线路58』 +#EXTINF:-1 tvg-id="59" tvg-name="CCTV14少儿" group-title="央视频道",CCTV14少儿 +http://yc.myds.me:35455/gaoma/cctv14.m3u8$LR•IPV4•59『线路59』 +#EXTINF:-1 tvg-id="1" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://120.76.248.139/live/bfgd/4200000133.m3u8$LR•IPV4•66『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://112.27.235.94:8000/hls/16/index.m3u8$LR•IPV4•66『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +https://cc06.tv12.xyz/16.m3u8$LR•IPV4•66『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://zzssw01.55555.io:9901/tsfile/live/0015_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://120.76.248.139/live/bfgd/4200000133.m3u8$LR•IPV4•66『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://112.27.235.94:8000/hls/16/index.m3u8$LR•IPV4•66『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +https://cc06.tv12.xyz/16.m3u8$LR•IPV4•66『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://zzssw01.55555.io:9901/tsfile/live/0015_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://101.74.28.84:9901/tsfile/live/0015_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://1.195.131.143:9901/tsfile/live/1025_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://61.156.228.12:8154/tsfile/live/0015_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://101.66.198.42:9901/tsfile/live/0015_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•66『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://123.163.21.101:9901/tsfile/live/0015_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://hwrr.jx.chinamobile.com:8080/PLTV/88888888/224/3221225641/index.m3u8$LR•IPV4•66『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +https://www.freetv.top/migu/673168223.m3u8?migutoken=4e8d5766579c6bef231494cabd07e5b49d965804790214280c9791e4c331fd90311cb62ea43d3a1899229bfa57be4afe5a567b32a6b78153fc9a9801e28a39435e078b48c211e71d6083519be4$LR•IPV4•66『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +https://smart.pendy.dpdns.org/Smart.php?id=cctv15$LR•IPV4•66『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227175/index.m3u8$LR•IPV4•66『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://yc.myds.me:35455/gaoma/cctv15.m3u8$LR•IPV4•66『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +https://stream1.freetv.fun/d8c678257099a8f24e3bb33a4f9059014ddf1de229ef366a1870f56c11b57c90.m3u8$LR•IPV4•66『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://lu.wqwqwq.sbs/itv/1000000005000265014.m3u8?cdn=ystenlive$LR•IPV4•66『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://183.94.1.118:8801/tsfile/live/0015_1.m3u8$LR•IPV4•66『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://120.192.226.35:8009/hls/15/index.m3u8$LR•IPV4•66『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://123.182.60.29:9002/hls/15/index.m3u8$LR•IPV4•66『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://61.138.128.226:19901/tsfile/live/0019_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://36.105.100.208:35455/gaoma/cctv15.m3u8$LR•IPV4•66『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://iptv.0564.org:35455/itv/1000000005000265014.m3u8?cdn=ystenlive$LR•IPV4•66『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://mh0.asia:35455/itv/1000000005000265014.m3u8?cdn=ystenlive$LR•IPV4•66『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://3501776.xyz:35455/itv/1000000005000265014.m3u8?cdn=ystenlive$LR•IPV4•66『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +https://api.olelive.com/dis/live/CCTV15HD/hls.m3u8$LR•IPV4•66『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://60.29.124.66:6080/hls/26/index.m3u8$LR•IPV4•66『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://fm1077.serv00.net/Smart.php?id=cctv15$LR•IPV4•66『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://[2409:8087:1a01:df::4033]:80/TVOD/88888888/224/3221226127/main.m3u8$LR•IPV6•66『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225601/index.m3u8$LR•IPV6•66『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226333/1.m3u8$LR•IPV6•66『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://148.135.93.213/live.php?id=CCTV15$LR•IPV4•66『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://218.13.14.6:60050/tsfile/live/1015_1.m3u8$LR•IPV4•66『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://39.164.160.249:9901/tsfile/live/0015_1.m3u8$LR•IPV4•66『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +https://cc06.tv12.xyz/16.m3u8$LR•IPV4•66『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://p.ytelc.com/169l/0/cctv.php?id=cctv15$LR•IPV4•66『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://ygbh.site/php/bfgd.php?id=133$LR•IPV4•66『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +https://cc06.tv12.xyz/16.m3u8$LR•IPV4•66『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://112.27.235.94:8000/hls/16/index.m3u8$LR•IPV4•66『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://39.134.65.87/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225601/index.m3u8$LR•IPV4•66『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://t.061899.xyz/tl/dq.php?id=cctv15$LR•IPV4•66『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +https://zby.130519.xyz/PLTV/11/224/3221226147/index.m3u8$LR•IPV4•66『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://148.135.93.213:81/live.php?id=CCTV15$LR•IPV4•66『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://hwrr.jx.chinamobile.com:8080/PLTV/88888888/224/3221225641/index.m3u8$LR•IPV4•66『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +https://www.freetv.top/migu/673168223.m3u8?migutoken=4e8d5766579c6bef231494cabd07e5b49d965804790214280c9791e4c331fd90311cb62ea43d3a1899229bfa57be4afe5a567b32a6b78153fc9a9801e28a39435e078b48c211e71d6083519be4$LR•IPV4•66『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +https://smart.pendy.dpdns.org/Smart.php?id=cctv15$LR•IPV4•66『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://[2409:8087:1a01:df::4033]:80/TVOD/88888888/224/3221226127/main.m3u8$LR•IPV6•66『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225601/index.m3u8$LR•IPV6•66『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226333/1.m3u8$LR•IPV6•66『线路52』 +#EXTINF:-1 tvg-id="53" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227175/index.m3u8$LR•IPV4•66『线路53』 +#EXTINF:-1 tvg-id="54" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://yc.myds.me:35455/gaoma/cctv15.m3u8$LR•IPV4•66『线路54』 +#EXTINF:-1 tvg-id="55" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +https://stream1.freetv.fun/d8c678257099a8f24e3bb33a4f9059014ddf1de229ef366a1870f56c11b57c90.m3u8$LR•IPV4•66『线路55』 +#EXTINF:-1 tvg-id="56" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://lu.wqwqwq.sbs/itv/1000000005000265014.m3u8?cdn=ystenlive$LR•IPV4•66『线路56』 +#EXTINF:-1 tvg-id="57" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://hwrr.jx.chinamobile.com:8080/PLTV/88888888/224/3221225641/index.m3u8$LR•IPV4•66『线路57』 +#EXTINF:-1 tvg-id="58" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +https://www.freetv.top/migu/673168223.m3u8?migutoken=4e8d5766579c6bef231494cabd07e5b49d965804790214280c9791e4c331fd90311cb62ea43d3a1899229bfa57be4afe5a567b32a6b78153fc9a9801e28a39435e078b48c211e71d6083519be4$LR•IPV4•66『线路58』 +#EXTINF:-1 tvg-id="59" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +https://smart.pendy.dpdns.org/Smart.php?id=cctv15$LR•IPV4•66『线路59』 +#EXTINF:-1 tvg-id="60" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://[2409:8087:1a01:df::4033]:80/TVOD/88888888/224/3221226127/main.m3u8$LR•IPV6•66『线路60』 +#EXTINF:-1 tvg-id="61" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225601/index.m3u8$LR•IPV6•66『线路61』 +#EXTINF:-1 tvg-id="62" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226333/1.m3u8$LR•IPV6•66『线路62』 +#EXTINF:-1 tvg-id="63" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227175/index.m3u8$LR•IPV4•66『线路63』 +#EXTINF:-1 tvg-id="64" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://yc.myds.me:35455/gaoma/cctv15.m3u8$LR•IPV4•66『线路64』 +#EXTINF:-1 tvg-id="65" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +https://stream1.freetv.fun/d8c678257099a8f24e3bb33a4f9059014ddf1de229ef366a1870f56c11b57c90.m3u8$LR•IPV4•66『线路65』 +#EXTINF:-1 tvg-id="66" tvg-name="CCTV15音乐" group-title="央视频道",CCTV15音乐 +http://lu.wqwqwq.sbs/itv/1000000005000265014.m3u8?cdn=ystenlive$LR•IPV4•66『线路66』 +#EXTINF:-1 tvg-id="1" tvg-name="CCTV16奥林匹克" group-title="央视频道",CCTV16奥林匹克 +http://livetv.wqwqwq.sbs/gaoma/cctv4k16.m3u8$LR•IPV4•42『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="CCTV16奥林匹克" group-title="央视频道",CCTV16奥林匹克 +http://zqh2333.top:2222/rtp/239.93.55.54:5140$LR•IPV4•42『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="CCTV16奥林匹克" group-title="央视频道",CCTV16奥林匹克 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226100$LR•IPV4•42『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="CCTV16奥林匹克" group-title="央视频道",CCTV16奥林匹克 +http://yc.myds.me:35455/gaoma/cctv16.m3u8$LR•IPV4•42『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="CCTV16奥林匹克" group-title="央视频道",CCTV16奥林匹克 +http://hwrr.jx.chinamobile.com:8080/PLTV/88888888/224/3221226233/index.m3u8$LR•IPV4•42『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="CCTV16奥林匹克" group-title="央视频道",CCTV16奥林匹克 +https://stream1.freetv.fun/87de3fae6db73a08904421488de7b0ba39e5eccf12a85ec47f8ccfb0985d2fa7.m3u8$LR•IPV4•42『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="CCTV16奥林匹克" group-title="央视频道",CCTV16奥林匹克 +http://58.17.48.228:808/hls/25/index.m3u8$LR•IPV4•42『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="CCTV16奥林匹克" group-title="央视频道",CCTV16奥林匹克 +http://36.105.100.208:35455/gaoma/cctv16.m3u8$LR•IPV4•42『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="CCTV16奥林匹克" group-title="央视频道",CCTV16奥林匹克 +http://iptv.0564.org:35455/itv/1000000006000233002.m3u8?cdn=ystenlive$LR•IPV4•42『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="CCTV16奥林匹克" group-title="央视频道",CCTV16奥林匹克 +http://mh0.asia:35455/itv/1000000006000233002.m3u8?cdn=ystenlive$LR•IPV4•42『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="CCTV16奥林匹克" group-title="央视频道",CCTV16奥林匹克 +http://xxx.504900.xyz:35455/itv/1000000006000233002.m3u8?cdn=ystenlive$LR•IPV4•42『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="CCTV16奥林匹克" group-title="央视频道",CCTV16奥林匹克 +https://api.olelive.com/dis/live/CCTV16HD/hls.m3u8$LR•IPV4•42『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="CCTV16奥林匹克" group-title="央视频道",CCTV16奥林匹克 +http://211.101.234.24:866/aishang/migu.php/migu.php?id=cctv16$LR•IPV4•42『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="CCTV16奥林匹克" group-title="央视频道",CCTV16奥林匹克 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=4332&tk=23a9aca1f79f$LR•IPV4•42『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="CCTV16奥林匹克" group-title="央视频道",CCTV16奥林匹克 +http://58.221.214.82:9901/tsfile/live/0002_2.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•42『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="CCTV16奥林匹克" group-title="央视频道",CCTV16奥林匹克 +http://219.135.180.210:18888/hls/31/index.m3u8$LR•IPV4•42『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="CCTV16奥林匹克" group-title="央视频道",CCTV16奥林匹克 +http://fm1077.serv00.net/Smart.php?id=cctv16$LR•IPV4•42『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="CCTV16奥林匹克" group-title="央视频道",CCTV16奥林匹克 +http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/yinhe/88888888/224/3221226100/index.m3u8$LR•IPV6•42『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="CCTV16奥林匹克" group-title="央视频道",CCTV16奥林匹克 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226887/1.m3u8$LR•IPV6•42『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="CCTV16奥林匹克" group-title="央视频道",CCTV16奥林匹克 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226100/index.m3u8$LR•IPV6•42『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="CCTV16奥林匹克" group-title="央视频道",CCTV16奥林匹克 +http://[2409:8087:74f0:22::4]:6410/270000001128/9900000016/index.m3u8$LR•IPV6•42『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="CCTV16奥林匹克" group-title="央视频道",CCTV16奥林匹克 +http://101.35.240.114:88/live.php?id=CCTV16$LR•IPV4•42『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="CCTV16奥林匹克" group-title="央视频道",CCTV16奥林匹克 +http://www.lizhinas.top:1009/rtp/239.252.220.237:5140$LR•IPV4•42『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="CCTV16奥林匹克" group-title="央视频道",CCTV16奥林匹克 +http://livetv.wqwqwq.sbs/gaoma/cctv4k16.m3u8$LR•IPV4•42『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="CCTV16奥林匹克" group-title="央视频道",CCTV16奥林匹克 +http://p.ytelc.com/169l/0/cctv.php?id=cctv16$LR•IPV4•42『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="CCTV16奥林匹克" group-title="央视频道",CCTV16奥林匹克 +http://p.ytelc.com/169l/0/cctv.php?id=cctv16$LR•IPV4•42『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="CCTV16奥林匹克" group-title="央视频道",CCTV16奥林匹克 +http://p.ytelc.com/169l/0/cctv.php?id=cctv16$LR•IPV4•42『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="CCTV16奥林匹克" group-title="央视频道",CCTV16奥林匹克 +http://39.135.133.139/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226100/index.m3u8$LR•IPV4•42『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="CCTV16奥林匹克" group-title="央视频道",CCTV16奥林匹克 +http://t.061899.xyz/tl/dq.php?id=cctv16$LR•IPV4•42『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="CCTV16奥林匹克" group-title="央视频道",CCTV16奥林匹克 +https://zby.130519.xyz/PLTV/11/224/3221226120/index.m3u8$LR•IPV4•42『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="CCTV16奥林匹克" group-title="央视频道",CCTV16奥林匹克 +http://148.135.93.213:81/live.php?id=CCTV16$LR•IPV4•42『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="CCTV16奥林匹克" group-title="央视频道",CCTV16奥林匹克 +http://zqh2333.top:2222/rtp/239.93.55.54:5140$LR•IPV4•42『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="CCTV16奥林匹克" group-title="央视频道",CCTV16奥林匹克 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226100$LR•IPV4•42『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="CCTV16奥林匹克" group-title="央视频道",CCTV16奥林匹克 +http://livetv.wqwqwq.sbs/gaoma/cctv4k16.m3u8$LR•IPV4•42『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="CCTV16奥林匹克" group-title="央视频道",CCTV16奥林匹克 +http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/yinhe/88888888/224/3221226100/index.m3u8$LR•IPV6•42『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="CCTV16奥林匹克" group-title="央视频道",CCTV16奥林匹克 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226887/1.m3u8$LR•IPV6•42『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="CCTV16奥林匹克" group-title="央视频道",CCTV16奥林匹克 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226100/index.m3u8$LR•IPV6•42『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="CCTV16奥林匹克" group-title="央视频道",CCTV16奥林匹克 +http://[2409:8087:74f0:22::4]:6410/270000001128/9900000016/index.m3u8$LR•IPV6•42『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="CCTV16奥林匹克" group-title="央视频道",CCTV16奥林匹克 +http://yc.myds.me:35455/gaoma/cctv16.m3u8$LR•IPV4•42『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="CCTV16奥林匹克" group-title="央视频道",CCTV16奥林匹克 +http://hwrr.jx.chinamobile.com:8080/PLTV/88888888/224/3221226233/index.m3u8$LR•IPV4•42『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="CCTV16奥林匹克" group-title="央视频道",CCTV16奥林匹克 +https://stream1.freetv.fun/87de3fae6db73a08904421488de7b0ba39e5eccf12a85ec47f8ccfb0985d2fa7.m3u8$LR•IPV4•42『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="CCTV16奥林匹克" group-title="央视频道",CCTV16奥林匹克 +http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226921/index.m3u8$LR•IPV4•42『线路42』 +#EXTINF:-1 tvg-id="1" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +http://120.76.248.139/live/bfgd/4200000204.m3u8$LR•IPV4•48『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +http://120.76.248.139/live/bfgd/4200000204.m3u8$LR•IPV4•48『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +http://61.156.228.12:8154/tsfile/live/0019_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•48『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +http://101.74.28.84:9901/tsfile/live/1009_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•48『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +http://zqh2333.top:2222/rtp/239.93.24.92:5140$LR•IPV4•48『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221225765$LR•IPV4•48『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +https://www.freetv.top/migu/673168256.m3u8?migutoken=e7dc493273bb331a8b7e0d3c475924ad4706b90f18fd4775c1c134103274e9ad9d59015289e02877b65420a149fcae4f793ded0177cc600ac79d9a95a234e4a8db198072e6973c4a14c05c9dc6$LR•IPV4•48『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +http://yc.myds.me:35455/gaoma/cctv17.m3u8$LR•IPV4•48『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +http://nas.suntao.online:35455/itv/1000000005000265015.m3u8?cdn=ystenlive$LR•IPV4•48『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227188/index.m3u8$LR•IPV4•48『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +http://36.105.100.208:35455/gaoma/cctv17.m3u8$LR•IPV4•48『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +http://iptv.0564.org:35455/itv/1000000005000265015.m3u8?cdn=ystenlive$LR•IPV4•48『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +http://mh0.asia:35455/itv/1000000005000265015.m3u8?cdn=ystenlive$LR•IPV4•48『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +http://3501776.xyz:35455/itv/1000000005000265015.m3u8?cdn=ystenlive$LR•IPV4•48『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +https://api.olelive.com/dis/live/CCTV17HD/hls.m3u8$LR•IPV4•48『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +http://113.118.15.210:808/hls/35/index.m3u8$LR•IPV4•48『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +http://211.101.234.24:866/aishang/migu.php/migu.php?id=cctv17$LR•IPV4•48『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=4821&tk=23a9aca1f79f$LR•IPV4•48『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +http://120.238.94.10:9901/tsfile/live/1048_1.m3u8$LR•IPV4•48『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +http://58.19.43.46:9901/tsfile/live/1047_1.m3u8$LR•IPV4•48『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +http://fm1077.serv00.net/Smart.php?id=cctv17$LR•IPV4•48『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +http://[2409:8087:1a01:df::4025]:80/TVOD/88888888/224/3221225708/main.m3u8$LR•IPV6•48『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225765/1.m3u8?icpid=88888888&from=1&hms_devid=1012&vqe=3$LR•IPV6•48『线路23』 +#EXTINF:-1 tvg-id="24" 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•48『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225765/index.m3u8$LR•IPV6•48『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +http://148.135.93.213/live.php?id=CCTV17$LR•IPV4•48『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +http://tv.20191209.xyz:37377/migu/673168256.m3u8?migutoken=eb3fbda758006d66837b5b6ef1b7ab6847a99f05f6b3303861d81e6e1335349499a40c8479d9a801327519db10547f9870398da6796159db51812e236c1b6c07d2c0f7e5bc32101c9cc222dc$LR•IPV4•48『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +http://58.57.40.22:9901/tsfile/live/0019_1.m3u8$LR•IPV4•48『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +https://cc06.tv12.xyz/17.m3u8$LR•IPV4•48『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +http://183.196.25.171:808/hls/93/index.m3u8$LR•IPV4•48『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +http://p.ytelc.com/169l/0/cctv.php?id=cctv17$LR•IPV4•48『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +http://ygbh.site/php/bfgd.php?id=204$LR•IPV4•48『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +https://cc06.tv12.xyz/17.m3u8$LR•IPV4•48『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +http://39.135.135.88/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225765/index.m3u8$LR•IPV4•48『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +http://t.061899.xyz/tl/dq.php?id=cctv17$LR•IPV4•48『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +http://p.ytelc.com/169l/0/cctv.php?id=cctv17$LR•IPV4•48『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +http://148.135.93.213:81/live.php?id=CCTV17$LR•IPV4•48『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +http://zqh2333.top:2222/rtp/239.93.24.92:5140$LR•IPV4•48『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221225765$LR•IPV4•48『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +http://[2409:8087:1a01:df::4025]:80/TVOD/88888888/224/3221225708/main.m3u8$LR•IPV6•48『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225765/1.m3u8?icpid=88888888&from=1&hms_devid=1012&vqe=3$LR•IPV6•48『线路41』 +#EXTINF:-1 tvg-id="42" 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•48『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225765/index.m3u8$LR•IPV6•48『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +https://www.freetv.top/migu/673168256.m3u8?migutoken=e7dc493273bb331a8b7e0d3c475924ad4706b90f18fd4775c1c134103274e9ad9d59015289e02877b65420a149fcae4f793ded0177cc600ac79d9a95a234e4a8db198072e6973c4a14c05c9dc6$LR•IPV4•48『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +http://yc.myds.me:35455/gaoma/cctv17.m3u8$LR•IPV4•48『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +http://nas.suntao.online:35455/itv/1000000005000265015.m3u8?cdn=ystenlive$LR•IPV4•48『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227188/index.m3u8$LR•IPV4•48『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="CCTV17农业农村" group-title="央视频道",CCTV17农业农村 +https://stream1.freetv.fun/b6866815f985fb51d1a8c195ef73afbd858d740c62358e35b9f665896b40dd91.m3u8$LR•IPV4•48『线路48』 +#EXTINF:-1 tvg-id="1" tvg-name="CCTV4K超高清" group-title="央视频道",CCTV4K超高清 +http://p.ytelc.com/169l/0/cctv.php?id=cctv4k$LR•IPV4 +#EXTINF:-1 tvg-id="1" tvg-name="CGTN英语" group-title="央视频道",CGTN英语 +https://0472.org/hls/cgtn.m3u8$LR•IPV4•11『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="CGTN英语" group-title="央视频道",CGTN英语 +https://0472.org/hls/cgtn.m3u8$LR•IPV4•11『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="CGTN英语" group-title="央视频道",CGTN英语 +http://fm1077.serv00.net/Smart.php?id=CGTN$LR•IPV4•11『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="CGTN英语" group-title="央视频道",CGTN英语 +https://live.mxdyeah.top/live.php?id=cgtnSD$LR•IPV4•11『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="CGTN英语" group-title="央视频道",CGTN英语 +http://english-livetx.cgtn.com/hls/yypdyyctzb_hd.m3u8$LR•IPV4•11『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="CGTN英语" group-title="央视频道",CGTN英语 +https://0472.org/hls/cgtn.m3u8$LR•IPV4•11『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="CGTN英语" group-title="央视频道",CGTN英语 +https://0472.org/hls/cgtn.m3u8$LR•IPV4•11『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="CGTN英语" group-title="央视频道",CGTN英语 +http://112.27.235.94:8000/hls/17/index.m3u8$LR•IPV4•11『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="CGTN英语" group-title="央视频道",CGTN英语 +http://mg.hmysapp.cn:177/ckmg/zb.php?id=cgtn$LR•IPV4•11『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="CGTN英语" group-title="央视频道",CGTN英语 +http://t.061899.xyz/tl/dq.php?id=cgtn$LR•IPV4•11『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="CGTN英语" group-title="央视频道",CGTN英语 +https://0472.org/hls/cgtn.m3u8$LR•IPV4•11『线路11』 +#EXTINF:-1 tvg-id="1" tvg-name="CGTN纪录" group-title="央视频道",CGTN纪录 +https://0472.org/hls/cgtnd.m3u8$LR•IPV4•5『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="CGTN纪录" group-title="央视频道",CGTN纪录 +https://0472.org/hls/cgtnd.m3u8$LR•IPV4•5『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="CGTN纪录" group-title="央视频道",CGTN纪录 +http://mg.hmysapp.cn:177/ckmg/zb.php?id=cgtnjl$LR•IPV4•5『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="CGTN纪录" group-title="央视频道",CGTN纪录 +http://t.061899.xyz/tl/dq.php?id=cgtnjl$LR•IPV4•5『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="CGTN纪录" group-title="央视频道",CGTN纪录 +https://0472.org/hls/cgtnd.m3u8$LR•IPV4•5『线路5』 +#EXTINF:-1 tvg-id="1" tvg-name="CGTN俄语" group-title="央视频道",CGTN俄语 +https://0472.org/hls/cgtne.m3u8$LR•IPV4•5『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="CGTN俄语" group-title="央视频道",CGTN俄语 +https://0472.org/hls/cgtne.m3u8$LR•IPV4•5『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="CGTN俄语" group-title="央视频道",CGTN俄语 +http://russian-livews.cgtn.com/hls/LSvexABhNipibK5KRuUkvHZ7220802LSTeze9o8tdFXMHsb1VosgoT220802cd.m3u8$LR•IPV4•5『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="CGTN俄语" group-title="央视频道",CGTN俄语 +https://0472.org/hls/cgtne.m3u8$LR•IPV4•5『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="CGTN俄语" group-title="央视频道",CGTN俄语 +https://0472.org/hls/cgtne.m3u8$LR•IPV4•5『线路5』 +#EXTINF:-1 tvg-id="1" tvg-name="CGTN法语" group-title="央视频道",CGTN法语 +https://0472.org/hls/cgtnf.m3u8$LR•IPV4•5『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="CGTN法语" group-title="央视频道",CGTN法语 +https://0472.org/hls/cgtnf.m3u8$LR•IPV4•5『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="CGTN法语" group-title="央视频道",CGTN法语 +http://espanol-liveali.cgtn.com/hls/LSveOGBaBw41Ea7ukkVAUdKQ220802LSTexu6xAuFH8VZNBLE1ZNEa220802cd.m3u8$LR•IPV4•5『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="CGTN法语" group-title="央视频道",CGTN法语 +https://0472.org/hls/cgtnf.m3u8$LR•IPV4•5『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="CGTN法语" group-title="央视频道",CGTN法语 +https://0472.org/hls/cgtnf.m3u8$LR•IPV4•5『线路5』 +#EXTINF:-1 tvg-id="1" tvg-name="CGTN西语" group-title="央视频道",CGTN西语 +https://0472.org/hls/cgtnx.m3u8$LR•IPV4•4『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="CGTN西语" group-title="央视频道",CGTN西语 +https://0472.org/hls/cgtnx.m3u8$LR•IPV4•4『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="CGTN西语" group-title="央视频道",CGTN西语 +https://0472.org/hls/cgtnx.m3u8$LR•IPV4•4『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="CGTN西语" group-title="央视频道",CGTN西语 +https://0472.org/hls/cgtnx.m3u8$LR•IPV4•4『线路4』 +#EXTINF:-1 tvg-id="1" tvg-name="CGTN阿语" group-title="央视频道",CGTN阿语 +https://0472.org/hls/cgtna.m3u8$LR•IPV4•4『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="CGTN阿语" group-title="央视频道",CGTN阿语 +https://0472.org/hls/cgtna.m3u8$LR•IPV4•4『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="CGTN阿语" group-title="央视频道",CGTN阿语 +https://0472.org/hls/cgtna.m3u8$LR•IPV4•4『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="CGTN阿语" group-title="央视频道",CGTN阿语 +https://0472.org/hls/cgtna.m3u8$LR•IPV4•4『线路4』 +#EXTINF:-1 tvg-id="1" 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•66『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://120.76.248.139/live/bfgd/4200000086.m3u8$LR•IPV4•66『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://61.163.181.78:85/tsfile/live/1045_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://183.215.134.239:19901/tsfile/live/0128_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://112.27.235.94:8000/hls/31/index.m3u8$LR•IPV4•66『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +https://cc06.tv12.xyz/57.m3u8$LR•IPV4•66『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://120.76.248.139/live/bfgd/4200000086.m3u8$LR•IPV4•66『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://61.163.181.78:85/tsfile/live/1045_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://183.215.134.239:19901/tsfile/live/0128_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://112.27.235.94:8000/hls/31/index.m3u8$LR•IPV4•66『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +https://cc06.tv12.xyz/57.m3u8$LR•IPV4•66『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://1.195.131.143:9901/tsfile/live/0128_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://101.74.28.84:9901/tsfile/live/0128_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010058$LR•IPV4•66『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://z.b.bkpcp.top/m.php?id=hunws$LR•IPV4•66『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://j.x.bkpcp.top/jx/HUNANHD$LR•IPV4•66『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://iptv.huuc.edu.cn/hls/hunanhd.m3u8$LR•IPV4•66『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003873458.m3u8$LR•IPV4•66『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://183.94.1.118:8801/tsfile/live/0128_1.m3u8$LR•IPV4•66『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://120.192.226.35:8009/hls/32/index.m3u8$LR•IPV4•66『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://175.31.21.146:4480/hls/36/index.m3u8$LR•IPV4•66『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://113.56.95.69:53765/tsfile/live/1004_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://58.17.48.228:808/hls/31/index.m3u8$LR•IPV4•66『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://61.138.128.226:19901/tsfile/live/0128_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://36.105.100.208:35455/itv/1000000005000265024.m3u8?cdn=ystenlive$LR•IPV4•66『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://iptv.0564.org:35455/itv/1000000005000265024.m3u8?cdn=ystenlive$LR•IPV4•66『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://mh0.asia:35455/itv/1000000005000265024.m3u8?cdn=ystenlive$LR•IPV4•66『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://xxx.504900.xyz:35455/itv/1000000005000265024.m3u8?cdn=ystenlive$LR•IPV4•66『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225610/index.m3u8$LR•IPV6•66『线路29』 +#EXTINF:-1 tvg-id="30" 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•66『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://[2409:8087:1e03:21::42]:6610/cms001/ch00000090990000001026/index.m3u8$LR•IPV6•66『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001026/index.m3u8$LR•IPV6•66『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://[2409:8087:4402:20:1:1216:401:3b]/iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226659/index.m3u8$LR•IPV6•66『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +https://live.mxdyeah.top/live.php?id=hunanHD$LR•IPV4•66『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225610/index.m3u8$LR•IPV4•66『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226307/index.m3u8$LR•IPV4•66『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://k.061899.xyz/m.php?id=hunws$LR•IPV4•66『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://t.061899.xyz/tl/tl.php?id=hunws$LR•IPV4•66『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://sh.lnott.top:880/dx31.m3u8$LR•IPV4•66『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://39.134.67.108/PLTV/88888888/224/3221226000/1.m3u8$LR•IPV4•66『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226307$LR•IPV4•66『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/hunanHD/__op/default/__f/index.m3u8$LR•IPV4•66『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/hunanHD/__op/default/__f/index.m3u8$LR•IPV4•66『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://101.35.240.114:88/live.php?id=湖南卫视$LR•IPV4•66『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://home.wwang.pw:35455/itv/1000000005000265024.m3u8?cdn=ystenlive$LR•IPV4•66『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://39.164.160.249:9901/tsfile/live/0128_1.m3u8$LR•IPV4•66『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://120.196.232.43:8088/rrs03.hw.gmcc.net/PLTV/651/224/3221226698/1.m3u8$LR•IPV4•66『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://iptv.huuc.edu.cn/hls/hunanhd.m3u8$LR•IPV4•66『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://ygbh.site/php/bfgd.php?id=086$LR•IPV4•66『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +https://cc06.tv12.xyz/57.m3u8$LR•IPV4•66『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://112.27.235.94:8000/hls/31/index.m3u8$LR•IPV4•66『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://39.134.65.71/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225610/index.m3u8$LR•IPV4•66『线路52』 +#EXTINF:-1 tvg-id="53" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://mg.hmysapp.cn:177/ckmg/zb.php?id=hunws$LR•IPV4•66『线路53』 +#EXTINF:-1 tvg-id="54" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://t.061899.xyz/tl/dq.php?id=hunws$LR•IPV4•66『线路54』 +#EXTINF:-1 tvg-id="55" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +https://zby.130519.xyz/PLTV/11/224/3221225726/index.m3u8$LR•IPV4•66『线路55』 +#EXTINF:-1 tvg-id="56" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://148.135.93.213:81/live.php?id=湖南卫视$LR•IPV4•66『线路56』 +#EXTINF:-1 tvg-id="57" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010058$LR•IPV4•66『线路57』 +#EXTINF:-1 tvg-id="58" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://z.b.bkpcp.top/m.php?id=hunws$LR•IPV4•66『线路58』 +#EXTINF:-1 tvg-id="59" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://j.x.bkpcp.top/jx/HUNANHD$LR•IPV4•66『线路59』 +#EXTINF:-1 tvg-id="60" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://iptv.huuc.edu.cn/hls/hunanhd.m3u8$LR•IPV4•66『线路60』 +#EXTINF:-1 tvg-id="61" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003873458.m3u8$LR•IPV4•66『线路61』 +#EXTINF:-1 tvg-id="62" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225610/index.m3u8$LR•IPV6•66『线路62』 +#EXTINF:-1 tvg-id="63" 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•66『线路63』 +#EXTINF:-1 tvg-id="64" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://[2409:8087:1e03:21::42]:6610/cms001/ch00000090990000001026/index.m3u8$LR•IPV6•66『线路64』 +#EXTINF:-1 tvg-id="65" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001026/index.m3u8$LR•IPV6•66『线路65』 +#EXTINF:-1 tvg-id="66" tvg-name="湖南卫视" group-title="卫视频道",湖南卫视 +http://[2409:8087:4402:20:1:1216:401:3b]/iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226659/index.m3u8$LR•IPV6•66『线路66』 +#EXTINF:-1 tvg-id="1" 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•85『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://ali-m-l.cztv.com:80/channels/lantian/channel001/1080p.m3u8$LR•IPV4•85『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +https://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8$LR•IPV4•85『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8$LR•IPV4•85『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://183.215.134.239:19901/tsfile/live/0124_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•85『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://ali-m-l.cztv.com/channels/lantian/channel01/1080p.m3u8$LR•IPV4•85『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8$LR•IPV4•85『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://ali-m-l.cztv.com:80/channels/lantian/channel001/1080p.m3u8$LR•IPV4•85『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://8.138.7.223/tv/zjws.m3u8$LR•IPV4•85『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +https://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8$LR•IPV4•85『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +https://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8?$LR•IPV4•85『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +https://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8?$LR•IPV4•85『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://183.215.134.239:19901/tsfile/live/0124_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•85『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://112.27.235.94:8000/hls/29/index.m3u8$LR•IPV4•85『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://zzssw01.55555.io:9901/tsfile/live/0124_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•85『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://ali-m-l.cztv.com:80/channels/lantian/channel001/1080p.m3u8$LR•IPV4•85『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +https://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8$LR•IPV4•85『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8$LR•IPV4•85『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://183.215.134.239:19901/tsfile/live/0124_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•85『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://ali-m-l.cztv.com/channels/lantian/channel01/1080p.m3u8$LR•IPV4•85『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8$LR•IPV4•85『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://ali-m-l.cztv.com:80/channels/lantian/channel001/1080p.m3u8$LR•IPV4•85『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://8.138.7.223/tv/zjws.m3u8$LR•IPV4•85『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +https://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8$LR•IPV4•85『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +https://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8?$LR•IPV4•85『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +https://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8?$LR•IPV4•85『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://183.215.134.239:19901/tsfile/live/0124_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•85『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://112.27.235.94:8000/hls/29/index.m3u8$LR•IPV4•85『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://zzssw01.55555.io:9901/tsfile/live/0124_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•85『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://101.66.198.42:9901/tsfile/live/0124_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•85『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://101.74.28.84:9901/tsfile/live/0124_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•85『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://l.cztvcloud.com/channels/lantian/SXpinghu3/720p.m3u8$LR•IPV4•85『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://ali-vl.cztv.com/channels/lantian/channel001/360p.m3u8$LR•IPV4•85『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://ali-m-l.cztv.com/channels/lantian/channel01/1080p.m3u8$LR•IPV4•85『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://zwebl02.cztv.com/live/channel011080P.m3u8?auth_key=2524708799-0-0-9a1229d8b9d311024ebea08c3fb1d63f$LR•IPV4•85『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://zhfivel02.cztv.com/channel01/1080p.m3u8?auth_key=2524708799-0-0-adde67b1b344fdd5e512f30a4ae31915$LR•IPV4•85『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010070$LR•IPV4•85『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://z.b.bkpcp.top/m.php?id=zjws$LR•IPV4•85『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://goo.bkpcp.top/mg/zjws$LR•IPV4•85『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://iptv.huuc.edu.cn/hls/zjhd.m3u8$LR•IPV4•85『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://ikuai.zlsip.top:4022/rtp/239.3.1.137:8036$LR•IPV4•85『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://183.94.1.118:8801/tsfile/live/0124_1.m3u8$LR•IPV4•85『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://120.192.226.35:8009/hls/34/index.m3u8$LR•IPV4•85『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://175.31.21.146:4480/hls/28/index.m3u8$LR•IPV4•85『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://113.56.95.69:53765/tsfile/live/1005_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•85『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://cssbyd.imwork.net:8082/hls/22/index.m3u8$LR•IPV4•85『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://58.17.48.228:808/hls/32/index.m3u8$LR•IPV4•85『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://61.138.128.226:19901/tsfile/live/1044_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•85『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://36.105.100.208:35455/itv/1000000005000265031.m3u8?cdn=ystenlive$LR•IPV4•85『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8$LR•IPV4•85『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +https://live.mxdyeah.top/live.php?id=zhejiangHD$LR•IPV4•85『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225612/index.m3u8$LR•IPV4•85『线路52』 +#EXTINF:-1 tvg-id="53" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226339/index.m3u8$LR•IPV4•85『线路53』 +#EXTINF:-1 tvg-id="54" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://k.061899.xyz/m.php?id=zjws$LR•IPV4•85『线路54』 +#EXTINF:-1 tvg-id="55" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://t.061899.xyz/tl/tl.php?id=zjws$LR•IPV4•85『线路55』 +#EXTINF:-1 tvg-id="56" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://sh.lnott.top:880/dx32.m3u8$LR•IPV4•85『线路56』 +#EXTINF:-1 tvg-id="57" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://39.134.67.108/PLTV/88888888/224/3221225959/1.m3u8$LR•IPV4•85『线路57』 +#EXTINF:-1 tvg-id="58" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226339$LR•IPV4•85『线路58』 +#EXTINF:-1 tvg-id="59" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/zhejiangHD/__op/default/__f/index.m3u8$LR•IPV4•85『线路59』 +#EXTINF:-1 tvg-id="60" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/zhejiangHD/__op/default/__f/index.m3u8$LR•IPV4•85『线路60』 +#EXTINF:-1 tvg-id="61" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8$LR•IPV4•85『线路61』 +#EXTINF:-1 tvg-id="62" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://101.35.240.114:88/live.php?id=浙江卫视$LR•IPV4•85『线路62』 +#EXTINF:-1 tvg-id="63" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8$LR•IPV4•85『线路63』 +#EXTINF:-1 tvg-id="64" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://home.wwang.pw:35455/itv/1000000005000265031.m3u8?cdn=ystenlive$LR•IPV4•85『线路64』 +#EXTINF:-1 tvg-id="65" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://58.57.40.22:9901/tsfile/live/1029_1.m3u8$LR•IPV4•85『线路65』 +#EXTINF:-1 tvg-id="66" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8$LR•IPV4•85『线路66』 +#EXTINF:-1 tvg-id="67" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://iptv.huuc.edu.cn/hls/zjhd.m3u8$LR•IPV4•85『线路67』 +#EXTINF:-1 tvg-id="68" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://ygbh.site/php/bfgd.php?id=094$LR•IPV4•85『线路68』 +#EXTINF:-1 tvg-id="69" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +https://cc06.tv12.xyz/117.m3u8$LR•IPV4•85『线路69』 +#EXTINF:-1 tvg-id="70" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://112.27.235.94:8000/hls/29/index.m3u8$LR•IPV4•85『线路70』 +#EXTINF:-1 tvg-id="71" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://39.134.65.71/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225612/index.m3u8$LR•IPV4•85『线路71』 +#EXTINF:-1 tvg-id="72" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://t.061899.xyz/tl/dq.php?id=zjws$LR•IPV4•85『线路72』 +#EXTINF:-1 tvg-id="73" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +https://zby.130519.xyz/PLTV/11/224/3221225727/index.m3u8$LR•IPV4•85『线路73』 +#EXTINF:-1 tvg-id="74" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://148.135.93.213:81/live.php?id=浙江卫视$LR•IPV4•85『线路74』 +#EXTINF:-1 tvg-id="75" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8$LR•IPV4•85『线路75』 +#EXTINF:-1 tvg-id="76" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://zwebl02.cztv.com/live/channel011080P.m3u8?auth_key=2524708799-0-0-9a1229d8b9d311024ebea08c3fb1d63f$LR•IPV4•85『线路76』 +#EXTINF:-1 tvg-id="77" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://zhfivel02.cztv.com/channel01/1080p.m3u8?auth_key=2524708799-0-0-adde67b1b344fdd5e512f30a4ae31915$LR•IPV4•85『线路77』 +#EXTINF:-1 tvg-id="78" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010070$LR•IPV4•85『线路78』 +#EXTINF:-1 tvg-id="79" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://z.b.bkpcp.top/m.php?id=zjws$LR•IPV4•85『线路79』 +#EXTINF:-1 tvg-id="80" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +https://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8$LR•IPV4•85『线路80』 +#EXTINF:-1 tvg-id="81" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://goo.bkpcp.top/mg/zjws$LR•IPV4•85『线路81』 +#EXTINF:-1 tvg-id="82" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://l.cztvcloud.com/channels/lantian/SXpinghu3/720p.m3u8$LR•IPV4•85『线路82』 +#EXTINF:-1 tvg-id="83" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://iptv.huuc.edu.cn/hls/zjhd.m3u8$LR•IPV4•85『线路83』 +#EXTINF:-1 tvg-id="84" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://ikuai.zlsip.top:4022/rtp/239.3.1.137:8036$LR•IPV4•85『线路84』 +#EXTINF:-1 tvg-id="85" tvg-name="浙江卫视" group-title="卫视频道",浙江卫视 +http://ali-vl.cztv.com/channels/lantian/channel001/360p.m3u8$LR•IPV4•85『线路85』 +#EXTINF:-1 tvg-id="1" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226898/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E0uh4lyjjBCCN7TCq21vSIQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•62『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://183.215.134.239:19901/tsfile/live/0107_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•62『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +https://cc06.tv12.xyz/37.m3u8$LR•IPV4•62『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://183.215.134.239:19901/tsfile/live/0107_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•62『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +https://cc06.tv12.xyz/37.m3u8$LR•IPV4•62『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://106.118.70.125:9901/tsfile/live/0107_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•62『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://101.74.28.84:9901/tsfile/live/0107_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•62『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://1.195.131.143:9901/tsfile/live/0107_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•62『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://101.66.198.42:9901/tsfile/live/0018_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•62『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://61.156.228.12:8154/tsfile/live/0107_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•62『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010054$LR•IPV4•62『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://z.b.bkpcp.top/m.php?id=dfws$LR•IPV4•62『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +rtsp://115.85.232.19/PLTV/88888910/224/3221225531/10000100000000060000000000107311_0.smil$LR•IPV4•62『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://goo.bkpcp.top/mg/dfws$LR•IPV4•62『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://iptv.huuc.edu.cn/hls/dfhd.m3u8$LR•IPV4•62『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +https://www.freetv.top/migu/651632648.m3u8?migutoken=67b4219a3e6acdcf288118ed6bf84d3197052966f0bc854079b6038b3fca6437744ca78bb0ea1fad6f61b4c73d0df57bd8b539ec247fd28ce16d1375716bbf774ea19c99e4585bb828fa3851c0$LR•IPV4•62『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003873462.m3u8$LR•IPV4•62『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +https://bp-cdn-ali.bestv.cn/enhance/bestvdfws_enhance.m3u8?auth_key=1746334807-ddb61092a75249868c8bd1834313f437-0-8a760296d281d86bc4612f5fc4f85247$LR•IPV4•62『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +https://live.lalifeier.eu.org/kankanews/dfws.m3u8?t=1746372302&key=04c79ed1fd72dbd3188040c54dc3858b$LR•IPV4•62『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://183.94.1.118:8801/tsfile/live/0107_1.m3u8$LR•IPV4•62『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://120.192.226.35:8009/hls/31/index.m3u8$LR•IPV4•62『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://113.56.95.69:53765/tsfile/live/1007_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•62『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://36.32.174.67:60080/newlive/live/hls/24/live.m3u8$LR•IPV4•62『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://61.138.128.226:19901/tsfile/live/0107_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•62『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://36.105.100.208:35455/itv/1000000005000265018.m3u8?cdn=ystenlive$LR•IPV4•62『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://iptv.0564.org:35455/itv/1000000005000265018.m3u8?cdn=ystenlive$LR•IPV4•62『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://mh0.asia:35455/itv/1000000005000265018.m3u8?cdn=ystenlive$LR•IPV4•62『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://3501776.xyz:35455/itv/1000000005000265018.m3u8?cdn=ystenlive$LR•IPV4•62『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://150.158.112.123/%E5%85%AC%E4%BC%97%E5%8F%B7~%E7%8E%89%E7%8E%89%E8%BD%AF%E4%BB%B6%E5%BA%93/mg.php?id=dfws$LR•IPV4•62『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/yinhe/88888888/224/3221226345/index.m3u8$LR•IPV6•62『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226345/index.m3u8$LR•IPV6•62『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +https://live.mxdyeah.top/live.php?id=shanghaiHD$LR•IPV4•62『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225735/index.m3u8$LR•IPV4•62『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226345/index.m3u8$LR•IPV4•62『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://k.061899.xyz/m.php?id=dfws$LR•IPV4•62『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://t.061899.xyz/tl/tl.php?id=dfws$LR•IPV4•62『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://39.134.67.108/PLTV/88888888/224/3221225942/1.m3u8$LR•IPV4•62『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://39.134.67.108/PLTV/88888888/224/3221225960/1.m3u8$LR•IPV4•62『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226345$LR•IPV4•62『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/shanghaiHD/__op/default/__f/index.m3u8$LR•IPV4•62『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/shanghaiHD/__op/default/__f/index.m3u8$LR•IPV4•62『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://101.35.240.114:88/live.php?id=东方卫视$LR•IPV4•62『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://home.wwang.pw:35455/itv/1000000005000265018.m3u8?cdn=ystenlive$LR•IPV4•62『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://39.164.160.249:9901/tsfile/live/0107_1.m3u8$LR•IPV4•62『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://39.164.160.249:9901/tsfile/live/0107_1.m3u8$LR•IPV4•62『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://iptv.huuc.edu.cn/hls/dfhd.m3u8$LR•IPV4•62『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://ygbh.site/php/bfgd.php?id=093$LR•IPV4•62『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +https://cc06.tv12.xyz/37.m3u8$LR•IPV4•62『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://mg.hmysapp.cn:177/ckmg/zb.php?id=dfws$LR•IPV4•62『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://t.061899.xyz/tl/dq.php?id=dfws$LR•IPV4•62『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +https://zby.130519.xyz/PLTV/11/224/3221225725/index.m3u8$LR•IPV4•62『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://148.135.93.213:81/live.php?id=东方卫视$LR•IPV4•62『线路52』 +#EXTINF:-1 tvg-id="53" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010054$LR•IPV4•62『线路53』 +#EXTINF:-1 tvg-id="54" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://z.b.bkpcp.top/m.php?id=dfws#rtsp://115.85.232.19/PLTV/88888910/224/3221225531/10000100000000060000000000107311_0.smil$LR•IPV4•62『线路54』 +#EXTINF:-1 tvg-id="55" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://goo.bkpcp.top/mg/dfws$LR•IPV4•62『线路55』 +#EXTINF:-1 tvg-id="56" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://iptv.huuc.edu.cn/hls/dfhd.m3u8$LR•IPV4•62『线路56』 +#EXTINF:-1 tvg-id="57" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +https://www.freetv.top/migu/651632648.m3u8?migutoken=67b4219a3e6acdcf288118ed6bf84d3197052966f0bc854079b6038b3fca6437744ca78bb0ea1fad6f61b4c73d0df57bd8b539ec247fd28ce16d1375716bbf774ea19c99e4585bb828fa3851c0$LR•IPV4•62『线路57』 +#EXTINF:-1 tvg-id="58" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003873462.m3u8$LR•IPV4•62『线路58』 +#EXTINF:-1 tvg-id="59" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +https://bp-cdn-ali.bestv.cn/enhance/bestvdfws_enhance.m3u8?auth_key=1746334807-ddb61092a75249868c8bd1834313f437-0-8a760296d281d86bc4612f5fc4f85247$LR•IPV4•62『线路59』 +#EXTINF:-1 tvg-id="60" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +https://live.lalifeier.eu.org/kankanews/dfws.m3u8?t=1746372302&key=04c79ed1fd72dbd3188040c54dc3858b$LR•IPV4•62『线路60』 +#EXTINF:-1 tvg-id="61" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/yinhe/88888888/224/3221226345/index.m3u8$LR•IPV6•62『线路61』 +#EXTINF:-1 tvg-id="62" tvg-name="东方卫视" group-title="卫视频道",东方卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226345/index.m3u8$LR•IPV6•62『线路62』 +#EXTINF:-1 tvg-id="1" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226900/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EcYPi33WFyhvd6SjmqUKhJg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•63『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://112.27.235.94:8000/hls/27/index.m3u8$LR•IPV4•63『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +https://cc06.tv12.xyz/27.m3u8$LR•IPV4•63『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://zzssw01.55555.io:9901/tsfile/live/0122_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•63『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://112.27.235.94:8000/hls/27/index.m3u8$LR•IPV4•63『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +https://cc06.tv12.xyz/27.m3u8$LR•IPV4•63『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://zzssw01.55555.io:9901/tsfile/live/0122_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•63『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://101.74.28.84:9901/tsfile/live/0122_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•63『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://61.156.228.12:8154/tsfile/live/0122_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•63『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://1.195.131.143:9901/tsfile/live/0122_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•63『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://106.118.70.125:9901/tsfile/live/0122_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•63『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://satellitepull.cnr.cn/live/wxbtv/playlist.m3u8$LR•IPV4•63『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010143$LR•IPV4•63『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://z.b.bkpcp.top/m.php?id=bjws$LR•IPV4•63『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://j.x.bkpcp.top/jx/BEIJHD$LR•IPV4•63『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://iptv.huuc.edu.cn/hls/btv1hd.m3u8$LR•IPV4•63『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +https://smart.pendy.dpdns.org/Smart.php?id=beijing$LR•IPV4•63『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003870776.m3u8$LR•IPV4•63『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://120.192.226.35:8009/hls/35/index.m3u8$LR•IPV4•63『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://36.32.174.67:60080/newlive/live/hls/25/live.m3u8$LR•IPV4•63『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://61.138.128.226:19901/tsfile/live/0122_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•63『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://36.105.100.208:35455/itv/1000000005000265027.m3u8?cdn=ystenlive$LR•IPV4•63『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://iptv.0564.org:35455/itv/1000000005000265027.m3u8?cdn=ystenlive$LR•IPV4•63『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://my.tmos.cn:15181/chs002.m3u8$LR•IPV4•63『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://mh0.asia:35455/itv/1000000005000265027.m3u8?cdn=ystenlive$LR•IPV4•63『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://xxx.504900.xyz:35455/itv/1000000005000265027.m3u8?cdn=ystenlive$LR•IPV4•63『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://3501776.xyz:35455/itv/1000000005000265027.m3u8?cdn=ystenlive$LR•IPV4•63『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://175.171.30.26:5111/hls/474822978/index.m3u8$LR•IPV4•63『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226436/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ElMQ3ov45VmhzipweN5VstQ%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNPg_yZ8DZHTaSU92MIl_o3b%2CEND$LR•IPV6•63『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226450/index.m3u8$LR•IPV6•63『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226450/index.m3u8$LR•IPV6•63『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +https://live.mxdyeah.top/live.php?id=beijingHD$LR•IPV4•63『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225728/index.m3u8$LR•IPV4•63『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226450/index.m3u8$LR•IPV4•63『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://k.061899.xyz/m.php?id=bjws$LR•IPV4•63『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://t.061899.xyz/tl/tl.php?id=bjws$LR•IPV4•63『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://39.134.67.108/PLTV/88888888/224/3221225927/1.m3u8$LR•IPV4•63『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://39.134.67.108/PLTV/88888888/224/3221225931/1.m3u8$LR•IPV4•63『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226450$LR•IPV4•63『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/beijingHD/__op/default/__f/index.m3u8$LR•IPV4•63『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/beijingHD/__op/default/__f/index.m3u8$LR•IPV4•63『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://101.35.240.114:88/live.php?id=北京卫视$LR•IPV4•63『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226436/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ElMQ3ov45VmhzipweN5VstQ%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNPg_yZ8DZHTaSU92MIl_o3b%2CEND$LR•IPV6•63『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://39.164.160.249:9901/tsfile/live/0122_1.m3u8$LR•IPV4•63『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://iptv.huuc.edu.cn/hls/btv1hd.m3u8$LR•IPV4•63『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://ygbh.site/php/bfgd.php?id=083$LR•IPV4•63『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +https://cc06.tv12.xyz/27.m3u8$LR•IPV4•63『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://112.27.235.94:8000/hls/27/index.m3u8$LR•IPV4•63『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://39.135.135.11/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225728/index.m3u8$LR•IPV4•63『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://t.061899.xyz/tl/dq.php?id=bjws$LR•IPV4•63『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +https://zby.130519.xyz/PLTV/11/224/3221225724/index.m3u8$LR•IPV4•63『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://148.135.93.213:81/live.php?id=北京卫视$LR•IPV4•63『线路52』 +#EXTINF:-1 tvg-id="53" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://satellitepull.cnr.cn/live/wxbtv/playlist.m3u8$LR•IPV4•63『线路53』 +#EXTINF:-1 tvg-id="54" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010143$LR•IPV4•63『线路54』 +#EXTINF:-1 tvg-id="55" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://z.b.bkpcp.top/m.php?id=bjws$LR•IPV4•63『线路55』 +#EXTINF:-1 tvg-id="56" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://j.x.bkpcp.top/jx/BEIJHD$LR•IPV4•63『线路56』 +#EXTINF:-1 tvg-id="57" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226436/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ElMQ3ov45VmhzipweN5VstQ%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNPg_yZ8DZHTaSU92MIl_o3b%2CEND$LR•IPV6•63『线路57』 +#EXTINF:-1 tvg-id="58" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://iptv.huuc.edu.cn/hls/btv1hd.m3u8$LR•IPV4•63『线路58』 +#EXTINF:-1 tvg-id="59" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +https://smart.pendy.dpdns.org/Smart.php?id=beijing$LR•IPV4•63『线路59』 +#EXTINF:-1 tvg-id="60" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003870776.m3u8$LR•IPV4•63『线路60』 +#EXTINF:-1 tvg-id="61" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226450/index.m3u8$LR•IPV6•63『线路61』 +#EXTINF:-1 tvg-id="62" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226450/index.m3u8$LR•IPV6•63『线路62』 +#EXTINF:-1 tvg-id="63" tvg-name="北京卫视" group-title="卫视频道",北京卫视 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227179/index.m3u8$LR•IPV4•63『线路63』 +#EXTINF:-1 tvg-id="1" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226897/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E0BmO6uHF7WFoTed__Xr3NQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•63『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://112.27.235.94:8000/hls/32/index.m3u8$LR•IPV4•63『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://120.76.248.139/live/bfgd/4200000085.m3u8$LR•IPV4•63『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://60.16.0.216:5757/hls/24/index.m3u8$LR•IPV4•63『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +https://cc06.tv12.xyz/61.m3u8$LR•IPV4•63『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://112.27.235.94:8000/hls/32/index.m3u8$LR•IPV4•63『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://120.76.248.139/live/bfgd/4200000085.m3u8$LR•IPV4•63『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://60.16.0.216:5757/hls/24/index.m3u8$LR•IPV4•63『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +https://cc06.tv12.xyz/61.m3u8$LR•IPV4•63『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://101.74.28.84:9901/tsfile/live/0127_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•63『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://1.195.131.143:9901/tsfile/live/0127_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•63『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010059$LR•IPV4•63『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://z.b.bkpcp.top/m.php?id=jsws$LR•IPV4•63『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://goo.bkpcp.top/mg/jsws$LR•IPV4•63『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://iptv.huuc.edu.cn/hls/jshd.m3u8$LR•IPV4•63『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003873461.m3u8$LR•IPV4•63『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227228/index.m3u8$LR•IPV4•63『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://183.94.1.118:8801/tsfile/live/0127_1.m3u8$LR•IPV4•63『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://120.192.226.35:8009/hls/33/index.m3u8$LR•IPV4•63『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://123.182.60.29:9002/hls/27/index.m3u8$LR•IPV4•63『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://61.138.128.226:19901/tsfile/live/0127_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•63『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://36.105.100.208:35455/itv/1000000005000265030.m3u8?cdn=ystenlive$LR•IPV4•63『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://iptv.0564.org:35455/itv/1000000005000265030.m3u8?cdn=ystenlive$LR•IPV4•63『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://my.tmos.cn:15181/chs003.m3u8$LR•IPV4•63『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://mh0.asia:35455/itv/1000000005000265030.m3u8?cdn=ystenlive$LR•IPV4•63『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://3501776.xyz:35455/itv/1000000005000265030.m3u8?cdn=ystenlive$LR•IPV4•63『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://150.158.112.123/%E5%85%AC%E4%BC%97%E5%8F%B7~%E7%8E%89%E7%8E%89%E8%BD%AF%E4%BB%B6%E5%BA%93/mg.php?id=jsws$LR•IPV4•63『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226310/index.m3u8$LR•IPV6•63『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226310/index.m3u8$LR•IPV6•63『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226897/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E0BmO6uHF7WFoTed__Xr3NQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•63『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://[2409:8087:2001:20:2800:0:df6e:eb17]:80/ott.mobaibox.com/PLTV/4/224/3221227552/index.m3u8$LR•IPV6•63『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +https://live.mxdyeah.top/live.php?id=jiangsuHD$LR•IPV4•63『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225613/index.m3u8$LR•IPV4•63『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226310/index.m3u8$LR•IPV4•63『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://k.061899.xyz/m.php?id=jsws$LR•IPV4•63『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://t.061899.xyz/tl/tl.php?id=jsws$LR•IPV4•63『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://39.134.67.108/PLTV/88888888/224/3221225929/1.m3u8$LR•IPV4•63『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://39.134.67.108/PLTV/88888888/224/3221225938/1.m3u8$LR•IPV4•63『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226310$LR•IPV4•63『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/jiangsuHD/__op/default/__f/index.m3u8$LR•IPV4•63『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/jiangsuHD/__op/default/__f/index.m3u8$LR•IPV4•63『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://101.35.240.114:88/live.php?id=江苏卫视$LR•IPV4•63『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://home.wwang.pw:35455/itv/1000000005000265030.m3u8?cdn=ystenlive$LR•IPV4•63『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://39.164.160.249:9901/tsfile/live/0127_1.m3u8$LR•IPV4•63『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://iptv.huuc.edu.cn/hls/jshd.m3u8$LR•IPV4•63『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://ygbh.site/php/bfgd.php?id=085$LR•IPV4•63『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +https://cc06.tv12.xyz/61.m3u8$LR•IPV4•63『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://112.27.235.94:8000/hls/32/index.m3u8$LR•IPV4•63『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://39.135.133.181/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226310/index.m3u8$LR•IPV4•63『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://mg.hmysapp.cn:177/ckmg/zb.php?id=jsws$LR•IPV4•63『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://t.061899.xyz/tl/dq.php?id=jsws$LR•IPV4•63『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +https://zby.130519.xyz/PLTV/11/224/3221225720/index.m3u8$LR•IPV4•63『线路52』 +#EXTINF:-1 tvg-id="53" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://148.135.93.213:81/live.php?id=江苏卫视$LR•IPV4•63『线路53』 +#EXTINF:-1 tvg-id="54" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010059$LR•IPV4•63『线路54』 +#EXTINF:-1 tvg-id="55" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://z.b.bkpcp.top/m.php?id=jsws$LR•IPV4•63『线路55』 +#EXTINF:-1 tvg-id="56" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://goo.bkpcp.top/mg/jsws$LR•IPV4•63『线路56』 +#EXTINF:-1 tvg-id="57" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://iptv.huuc.edu.cn/hls/jshd.m3u8$LR•IPV4•63『线路57』 +#EXTINF:-1 tvg-id="58" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003873461.m3u8$LR•IPV4•63『线路58』 +#EXTINF:-1 tvg-id="59" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226310/index.m3u8$LR•IPV6•63『线路59』 +#EXTINF:-1 tvg-id="60" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226310/index.m3u8$LR•IPV6•63『线路60』 +#EXTINF:-1 tvg-id="61" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226897/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E0BmO6uHF7WFoTed__Xr3NQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•63『线路61』 +#EXTINF:-1 tvg-id="62" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227228/index.m3u8$LR•IPV4•63『线路62』 +#EXTINF:-1 tvg-id="63" tvg-name="江苏卫视" group-title="卫视频道",江苏卫视 +http://[2409:8087:2001:20:2800:0:df6e:eb17]:80/ott.mobaibox.com/PLTV/4/224/3221227552/index.m3u8$LR•IPV6•63『线路63』 +#EXTINF:-1 tvg-id="1" 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•62『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://112.27.235.94:8000/hls/26/index.m3u8$LR•IPV4•62『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +https://cc06.tv12.xyz/26.m3u8$LR•IPV4•62『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://zzssw01.55555.io:9901/tsfile/live/0130_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•62『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://112.27.235.94:8000/hls/26/index.m3u8$LR•IPV4•62『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +https://cc06.tv12.xyz/26.m3u8$LR•IPV4•62『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://zzssw01.55555.io:9901/tsfile/live/0130_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•62『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://101.74.28.84:9901/tsfile/live/0130_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•62『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://1.195.131.143:9901/tsfile/live/0130_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•62『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://101.66.198.42:9901/tsfile/live/0130_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•62『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226391$LR•IPV4•62『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://j.x.bkpcp.top/jx/ANHUIHD$LR•IPV4•62『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://iptv.huuc.edu.cn/hls/ahhd.m3u8$LR•IPV4•62『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003873469.m3u8$LR•IPV4•62『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://z.b.bkpcp.top/m.php?id=ahws$LR•IPV4•62『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://yc.myds.me:35455/itv/6000000001000009954.m3u8?cdn=wasusyt$LR•IPV4•62『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://nas.suntao.online:35455/itv/1000000001000030159.m3u8?cdn=ystenlive$LR•IPV4•62『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://183.94.1.118:8801/tsfile/live/0130_1.m3u8$LR•IPV4•62『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://120.192.226.35:8009/hls/42/index.m3u8$LR•IPV4•62『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://123.182.60.29:9002/hls/28/index.m3u8$LR•IPV4•62『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://61.138.128.226:19901/tsfile/live/0130_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•62『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://36.105.100.208:35455/itv/1000000005000265025.m3u8?cdn=ystenlive$LR•IPV4•62『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://iptv.0564.org:35455/itv/1000000005000265025.m3u8?cdn=ystenlive$LR•IPV4•62『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://mh0.asia:35455/itv/1000000005000265025.m3u8?cdn=ystenlive$LR•IPV4•62『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://xxx.504900.xyz:35455/itv/1000000005000265025.m3u8?cdn=ystenlive$LR•IPV4•62『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://3501776.xyz:35455/itv/1000000005000265025.m3u8?cdn=ystenlive$LR•IPV4•62『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://175.171.30.26:5111/hls/627376969/index.m3u8$LR•IPV4•62『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226391/index.m3u8$LR•IPV6•62『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226498/index.m3u8$LR•IPV6•62『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://[2409:8087:2001:20:2800:0:df6e:eb12]/wh7f454c46tw2802330256_375747539/ott.mobaibox.com/PLTV/3/224/3221227558/index.m3u8?icpid=3&RTS=1668597596&from=40&popid=40&hms_devid=2112&prioritypopid=40&vqe=3$LR•IPV6•62『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +https://live.mxdyeah.top/live.php?id=anhuiSD$LR•IPV4•62『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226391/index.m3u8$LR•IPV4•62『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://k.061899.xyz/m.php?id=ahws$LR•IPV4•62『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://t.061899.xyz/tl/tl.php?id=ahws$LR•IPV4•62『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://sh.lnott.top:880/dx34.m3u8$LR•IPV4•62『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://39.134.67.108/PLTV/88888888/224/3221225923/1.m3u8$LR•IPV4•62『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://39.134.67.108/PLTV/88888888/224/3221225925/1.m3u8$LR•IPV4•62『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226391$LR•IPV4•62『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/anhuiSD/__op/default/__f/index.m3u8$LR•IPV4•62『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/anhuiSD/__op/default/__f/index.m3u8$LR•IPV4•62『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://159.75.166.157/php/ah.php?id=ahws$LR•IPV4•62『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://101.35.240.114:88/live.php?id=安徽卫视$LR•IPV4•62『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://home.wwang.pw:35455/itv/1000000005000265025.m3u8?cdn=ystenlive$LR•IPV4•62『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://39.164.160.249:9901/tsfile/live/0130_1.m3u8$LR•IPV4•62『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +https://piccpndks.v.kcdnvip.com/audio/anhui_2/index.m3u8$LR•IPV4•62『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://iptv.huuc.edu.cn/hls/ahhd.m3u8$LR•IPV4•62『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://ygbh.site/php/bfgd.php?id=096$LR•IPV4•62『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +https://cc06.tv12.xyz/26.m3u8$LR•IPV4•62『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://112.27.235.94:8000/hls/26/index.m3u8$LR•IPV4•62『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://39.135.133.159/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226391/index.m3u8$LR•IPV4•62『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +https://zby.130519.xyz/PLTV/11/224/3221225739/index.m3u8$LR•IPV4•62『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://148.135.93.213:81/live.php?id=安徽卫视$LR•IPV4•62『线路52』 +#EXTINF:-1 tvg-id="53" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226391$LR•IPV4•62『线路53』 +#EXTINF:-1 tvg-id="54" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://j.x.bkpcp.top/jx/ANHUIHD$LR•IPV4•62『线路54』 +#EXTINF:-1 tvg-id="55" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://iptv.huuc.edu.cn/hls/ahhd.m3u8$LR•IPV4•62『线路55』 +#EXTINF:-1 tvg-id="56" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003873469.m3u8$LR•IPV4•62『线路56』 +#EXTINF:-1 tvg-id="57" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://z.b.bkpcp.top/m.php?id=ahws$LR•IPV4•62『线路57』 +#EXTINF:-1 tvg-id="58" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226391/index.m3u8$LR•IPV6•62『线路58』 +#EXTINF:-1 tvg-id="59" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226498/index.m3u8$LR•IPV6•62『线路59』 +#EXTINF:-1 tvg-id="60" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://[2409:8087:2001:20:2800:0:df6e:eb12]/wh7f454c46tw2802330256_375747539/ott.mobaibox.com/PLTV/3/224/3221227558/index.m3u8?icpid=3&RTS=1668597596&from=40&popid=40&hms_devid=2112&prioritypopid=40&vqe=3$LR•IPV6•62『线路60』 +#EXTINF:-1 tvg-id="61" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://yc.myds.me:35455/itv/6000000001000009954.m3u8?cdn=wasusyt$LR•IPV4•62『线路61』 +#EXTINF:-1 tvg-id="62" tvg-name="安徽卫视" group-title="卫视频道",安徽卫视 +http://nas.suntao.online:35455/itv/1000000001000030159.m3u8?cdn=ystenlive$LR•IPV4•62『线路62』 +#EXTINF:-1 tvg-id="1" 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•65『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://60.16.0.216:5757/hls/36/index.m3u8$LR•IPV4•65『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://zzssw01.55555.io:9901/tsfile/live/0142_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•65『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://60.16.0.216:5757/hls/36/index.m3u8$LR•IPV4•65『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://zzssw01.55555.io:9901/tsfile/live/0142_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•65『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://106.118.70.125:9901/tsfile/live/0142_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•65『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://101.74.28.84:9901/tsfile/live/0142_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•65『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://101.66.198.42:9901/tsfile/live/0142_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•65『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://1.195.131.143:9901/tsfile/live/0142_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•65『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://61.156.228.12:8154/tsfile/live/0142_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•65『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010053$LR•IPV4•65『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://z.b.bkpcp.top/m.php?id=cqws$LR•IPV4•65『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://j.x.bkpcp.top/jx/CHONGQHD$LR•IPV4•65『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://iptv.huuc.edu.cn/hls/cqhd.m3u8$LR•IPV4•65『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000004796458.m3u8$LR•IPV4•65『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://183.94.1.118:8801/tsfile/live/0142_1.m3u8$LR•IPV4•65『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://120.192.226.35:8009/hls/43/index.m3u8$LR•IPV4•65『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://113.56.95.69:53765/tsfile/live/1017_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•65『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://123.182.60.29:9002/hls/42/index.m3u8$LR•IPV4•65『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://36.32.174.67:60080/newlive/live/hls/34/live.m3u8$LR•IPV4•65『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://61.138.128.226:19901/tsfile/live/0142_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•65『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://222.173.108.238:352/tsfile/live/1016_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•65『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://36.105.100.208:35455/itv/1000000005000265017.m3u8?cdn=ystenlive$LR•IPV4•65『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://iptv.0564.org:35455/itv/1000000005000265017.m3u8?cdn=ystenlive$LR•IPV4•65『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://mh0.asia:35455/itv/1000000005000265017.m3u8?cdn=ystenlive$LR•IPV4•65『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226409/index.m3u8$LR•IPV6•65『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226409/index.m3u8$LR•IPV6•65『线路27』 +#EXTINF:-1 tvg-id="28" 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•65『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001129/index.m3u8$LR•IPV6•65『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://[2409:8087:2001:20:2800:0:df6e:eb09]:80/ott.mobaibox.com/PLTV/4/224/3221228133/index.m3u8$LR•IPV6•65『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +https://live.mxdyeah.top/live.php?id=chongqingHD$LR•IPV4•65『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226409/index.m3u8$LR•IPV4•65『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225618/index.m3u8$LR•IPV4•65『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://k.061899.xyz/m.php?id=cqws$LR•IPV4•65『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://t.061899.xyz/tl/tl.php?id=cqws$LR•IPV4•65『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://sh.lnott.top:880/dx46.m3u8$LR•IPV4•65『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://39.134.67.108/PLTV/88888888/224/3221225963/1.m3u8$LR•IPV4•65『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://39.134.67.108/PLTV/88888888/224/3221226001/1.m3u8$LR•IPV4•65『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226409$LR•IPV4•65『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/chongqingHD/__op/default/__f/index.m3u8$LR•IPV4•65『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/chongqingHD/__op/default/__f/index.m3u8$LR•IPV4•65『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://148.135.93.213/live.php?id=重庆卫视$LR•IPV4•65『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://home.wwang.pw:35455/itv/1000000005000265017.m3u8?cdn=ystenlive$LR•IPV4•65『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +https://cc06.tv12.xyz/34.m3u8$LR•IPV4•65『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://220.192.12.20:8003/udp/225.0.4.187:7980?$LR•IPV4•65『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://p2.ytelc.com/videojs.php?id=https://sjlivecdn9.cbg.cn/202510062356/app_2/_definst_/ls_2.stream/chunklist.m3u8$LR•IPV4•65『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://iptv.huuc.edu.cn/hls/cqhd.m3u8$LR•IPV4•65『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://ygbh.site/php/bfgd.php?id=107$LR•IPV4•65『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +https://cc06.tv12.xyz/34.m3u8$LR•IPV4•65『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://112.27.235.94:8000/hls/36/index.m3u8$LR•IPV4•65『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://39.134.65.75/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225618/index.m3u8$LR•IPV4•65『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://mg.hmysapp.cn:177/ckmg/zb.php?id=cqws$LR•IPV4•65『线路52』 +#EXTINF:-1 tvg-id="53" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://t.061899.xyz/tl/dq.php?id=cqws$LR•IPV4•65『线路53』 +#EXTINF:-1 tvg-id="54" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +https://zby.130519.xyz/PLTV/11/224/3221226171/index.m3u8$LR•IPV4•65『线路54』 +#EXTINF:-1 tvg-id="55" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://148.135.93.213:81/live.php?id=重庆卫视$LR•IPV4•65『线路55』 +#EXTINF:-1 tvg-id="56" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010053$LR•IPV4•65『线路56』 +#EXTINF:-1 tvg-id="57" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://z.b.bkpcp.top/m.php?id=cqws$LR•IPV4•65『线路57』 +#EXTINF:-1 tvg-id="58" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://j.x.bkpcp.top/jx/CHONGQHD$LR•IPV4•65『线路58』 +#EXTINF:-1 tvg-id="59" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://iptv.huuc.edu.cn/hls/cqhd.m3u8$LR•IPV4•65『线路59』 +#EXTINF:-1 tvg-id="60" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000004796458.m3u8$LR•IPV4•65『线路60』 +#EXTINF:-1 tvg-id="61" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226409/index.m3u8$LR•IPV6•65『线路61』 +#EXTINF:-1 tvg-id="62" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226409/index.m3u8$LR•IPV6•65『线路62』 +#EXTINF:-1 tvg-id="63" 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•65『线路63』 +#EXTINF:-1 tvg-id="64" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001129/index.m3u8$LR•IPV6•65『线路64』 +#EXTINF:-1 tvg-id="65" tvg-name="重庆卫视" group-title="卫视频道",重庆卫视 +http://[2409:8087:2001:20:2800:0:df6e:eb09]:80/ott.mobaibox.com/PLTV/4/224/3221228133/index.m3u8$LR•IPV6•65『线路65』 +#EXTINF:-1 tvg-id="1" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226995/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EBQiz3wrGrpG0CUSRIJ-7Jg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•61『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://112.27.235.94:8000/hls/35/index.m3u8$LR•IPV4•61『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://60.16.0.216:5757/hls/30/index.m3u8$LR•IPV4•61『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://112.27.235.94:8000/hls/35/index.m3u8$LR•IPV4•61『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://60.16.0.216:5757/hls/30/index.m3u8$LR•IPV4•61『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://1.195.131.143:9901/tsfile/live/0123_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://101.66.198.42:9901/tsfile/live/0123_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•61『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://101.74.28.84:9901/tsfile/live/0123_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://61.156.228.12:8154/tsfile/live/0123_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://j.x.bkpcp.top/jx/SICHD$LR•IPV4•61『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226338$LR•IPV4•61『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://z.b.bkpcp.top/m.php?id=scws$LR•IPV4•61『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://iptv.huuc.edu.cn/hls/schd.m3u8$LR•IPV4•61『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003887274.m3u8$LR•IPV4•61『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://183.94.1.118:8801/tsfile/live/0123_1.m3u8$LR•IPV4•61『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://120.192.226.35:8009/hls/41/index.m3u8$LR•IPV4•61『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://113.56.95.69:53765/tsfile/live/1021_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://123.182.60.29:9002/hls/36/index.m3u8$LR•IPV4•61『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://36.32.174.67:60080/newlive/live/hls/29/live.m3u8$LR•IPV4•61『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://61.138.128.226:19901/tsfile/live/0123_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://36.105.100.208:35455/itv/5000000004000006119.m3u8?cdn=bestzb$LR•IPV4•61『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://175.171.30.26:5111/hls/585736572/index.m3u8$LR•IPV4•61『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://113.118.15.210:808/hls/50/index.m3u8$LR•IPV4•61『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://110.7.131.4:9901/tsfile/live/0123_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226338/index.m3u8$LR•IPV6•61『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226338/index.m3u8$LR•IPV6•61『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226995/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EBQiz3wrGrpG0CUSRIJ-7Jg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•61『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://[2409:8087:2001:20:2800:0:df6e:eb08]:80/ott.mobaibox.com/PLTV/4/224/3221228171/index.m3u8$LR•IPV6•61『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001130/index.m3u8$LR•IPV6•61『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +https://live.mxdyeah.top/live.php?id=sichuanHD$LR•IPV4•61『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226338/index.m3u8$LR•IPV4•61『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://k.061899.xyz/m.php?id=scws$LR•IPV4•61『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://t.061899.xyz/tl/tl.php?id=scws$LR•IPV4•61『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://sh.lnott.top:880/dx45.m3u8$LR•IPV4•61『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://39.134.67.108/PLTV/88888888/224/3221225970/1.m3u8$LR•IPV4•61『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://39.134.67.108/PLTV/88888888/224/3221226014/1.m3u8$LR•IPV4•61『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226338$LR•IPV4•61『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/cctv1HD/__op/default/__f/index.m3u8$LR•IPV4•61『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/cctv1HD/__op/default/__f/index.m3u8$LR•IPV4•61『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://148.135.93.213/live.php?id=四川卫视$LR•IPV4•61『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://home.wwang.pw:35455/itv/5000000004000006119.m3u8?cdn=bestzb$LR•IPV4•61『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +https://cc06.tv12.xyz/99.m3u8$LR•IPV4•61『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +https://piccpndks.v.kcdnvip.com/audio/sichuan_2/index.m3u8$LR•IPV4•61『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://iptv.huuc.edu.cn/hls/schd.m3u8$LR•IPV4•61『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://ygbh.site/php/bfgd.php?id=103$LR•IPV4•61『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +https://cc06.tv12.xyz/99.m3u8$LR•IPV4•61『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://112.27.235.94:8000/hls/35/index.m3u8$LR•IPV4•61『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://39.135.133.150/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226338/index.m3u8$LR•IPV4•61『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://t.061899.xyz/tl/dq.php?id=scws$LR•IPV4•61『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +https://zby.130519.xyz/PLTV/11/224/3221226152/index.m3u8$LR•IPV4•61『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://148.135.93.213:81/live.php?id=四川卫视$LR•IPV4•61『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226338$LR•IPV4•61『线路52』 +#EXTINF:-1 tvg-id="53" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://z.b.bkpcp.top/m.php?id=scws$LR•IPV4•61『线路53』 +#EXTINF:-1 tvg-id="54" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://j.x.bkpcp.top/jx/SICHD$LR•IPV4•61『线路54』 +#EXTINF:-1 tvg-id="55" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://iptv.huuc.edu.cn/hls/schd.m3u8$LR•IPV4•61『线路55』 +#EXTINF:-1 tvg-id="56" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003887274.m3u8$LR•IPV4•61『线路56』 +#EXTINF:-1 tvg-id="57" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226338/index.m3u8$LR•IPV6•61『线路57』 +#EXTINF:-1 tvg-id="58" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226338/index.m3u8$LR•IPV6•61『线路58』 +#EXTINF:-1 tvg-id="59" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226995/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EBQiz3wrGrpG0CUSRIJ-7Jg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•61『线路59』 +#EXTINF:-1 tvg-id="60" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://[2409:8087:2001:20:2800:0:df6e:eb08]:80/ott.mobaibox.com/PLTV/4/224/3221228171/index.m3u8$LR•IPV6•61『线路60』 +#EXTINF:-1 tvg-id="61" tvg-name="四川卫视" group-title="卫视频道",四川卫视 +http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001130/index.m3u8$LR•IPV6•61『线路61』 +#EXTINF:-1 tvg-id="1" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226991/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EQ6F5Mjgs0tJyEArWFL3vQA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•61『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://live.zohi.tv/video/s10001-fztv-3/index.m3u8$LR•IPV4•61『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +https://cc06.tv12.xyz/38.m3u8$LR•IPV4•61『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://120.76.248.139/live/bfgd/4200000483.m3u8$LR•IPV4•61『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://live.zohi.tv/video/s10001-fztv-3/index.m3u8$LR•IPV4•61『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +https://cc06.tv12.xyz/38.m3u8$LR•IPV4•61『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://120.76.248.139/live/bfgd/4200000483.m3u8$LR•IPV4•61『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://101.74.28.84:9901/tsfile/live/0137_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://101.66.198.42:9901/tsfile/live/0137_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•61『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010096$LR•IPV4•61『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://z.b.bkpcp.top/m.php?id=dnws$LR•IPV4•61『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://j.x.bkpcp.top/jx/DONGNHD$LR•IPV4•61『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://iptv.huuc.edu.cn/hls/dnhd.m3u8$LR•IPV4•61『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +https://smart.pendy.dpdns.org/Smart.php?id=fujian$LR•IPV4•61『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003873473.m3u8$LR•IPV4•61『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://183.94.1.118:8801/tsfile/live/0137_1.m3u8$LR•IPV4•61『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://120.192.226.35:8009/hls/45/index.m3u8$LR•IPV4•61『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://36.32.174.67:60080/newlive/live/hls/33/live.m3u8$LR•IPV4•61『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://61.138.128.226:19901/tsfile/live/1014_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://36.105.100.208:35455/itv/1000000005000265033.m3u8?cdn=ystenlive$LR•IPV4•61『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://iptv.0564.org:35455/itv/1000000005000265033.m3u8?cdn=ystenlive$LR•IPV4•61『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://mh0.asia:35455/itv/1000000005000265033.m3u8?cdn=ystenlive$LR•IPV4•61『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://xxx.504900.xyz:35455/itv/1000000005000265033.m3u8?cdn=ystenlive$LR•IPV4•61『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://3501776.xyz:35455/itv/1000000005000265033.m3u8?cdn=ystenlive$LR•IPV4•61『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://110.7.131.4:9901/tsfile/live/0137_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://[2409:8087:1a01:df::4035]:80/TVOD/88888888/224/3221225950/main.m3u8$LR•IPV6•61『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226341/index.m3u8$LR•IPV6•61『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226341/index.m3u8$LR•IPV6•61『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +https://live.mxdyeah.top/live.php?id=dongnanHD$LR•IPV4•61『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226341/index.m3u8$LR•IPV4•61『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225620/index.m3u8$LR•IPV4•61『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://k.061899.xyz/m.php?id=dnws$LR•IPV4•61『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://t.061899.xyz/tl/tl.php?id=dnws$LR•IPV4•61『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://39.134.67.108/PLTV/88888888/224/3221225950/1.m3u8$LR•IPV4•61『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://39.134.67.108/PLTV/88888888/224/3221226038/1.m3u8$LR•IPV4•61『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226341$LR•IPV4•61『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/dongnanHD/__op/default/__f/index.m3u8$LR•IPV4•61『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/dongnanHD/__op/default/__f/index.m3u8$LR•IPV4•61『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://148.135.93.213/live.php?id=东南卫视$LR•IPV4•61『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://home.wwang.pw:35455/itv/1000000005000265033.m3u8?cdn=ystenlive$LR•IPV4•61『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://58.57.40.22:9901/tsfile/live/1037_1.m3u8$LR•IPV4•61『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://iptv.huuc.edu.cn/hls/dnhd.m3u8$LR•IPV4•61『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://ygbh.site/php/bfgd.php?id=483$LR•IPV4•61『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +https://cc06.tv12.xyz/38.m3u8$LR•IPV4•61『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://112.27.235.94:8000/hls/38/index.m3u8$LR•IPV4•61『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://39.134.65.77/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225620/index.m3u8$LR•IPV4•61『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://mg.hmysapp.cn:177/ckmg/zb.php?id=dnws$LR•IPV4•61『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://t.061899.xyz/tl/dq.php?id=dnws$LR•IPV4•61『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +https://zby.130519.xyz/PLTV/11/224/3221225745/index.m3u8$LR•IPV4•61『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://8.138.7.223/tv/fjtv1.php?id=dnws$LR•IPV4•61『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://148.135.93.213:81/live.php?id=东南卫视$LR•IPV4•61『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010096$LR•IPV4•61『线路52』 +#EXTINF:-1 tvg-id="53" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://z.b.bkpcp.top/m.php?id=dnws$LR•IPV4•61『线路53』 +#EXTINF:-1 tvg-id="54" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://j.x.bkpcp.top/jx/DONGNHD$LR•IPV4•61『线路54』 +#EXTINF:-1 tvg-id="55" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://iptv.huuc.edu.cn/hls/dnhd.m3u8$LR•IPV4•61『线路55』 +#EXTINF:-1 tvg-id="56" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://live.zohi.tv/video/s10001-fztv-3/index.m3u8$LR•IPV4•61『线路56』 +#EXTINF:-1 tvg-id="57" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://[2409:8087:1a01:df::4035]:80/TVOD/88888888/224/3221225950/main.m3u8$LR•IPV6•61『线路57』 +#EXTINF:-1 tvg-id="58" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +https://smart.pendy.dpdns.org/Smart.php?id=fujian$LR•IPV4•61『线路58』 +#EXTINF:-1 tvg-id="59" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003873473.m3u8$LR•IPV4•61『线路59』 +#EXTINF:-1 tvg-id="60" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226341/index.m3u8$LR•IPV6•61『线路60』 +#EXTINF:-1 tvg-id="61" tvg-name="东南卫视" group-title="卫视频道",东南卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226341/index.m3u8$LR•IPV6•61『线路61』 +#EXTINF:-1 tvg-id="1" 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•76『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://112.27.235.94:8000/hls/33/index.m3u8$LR•IPV4•76『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://120.76.248.139/live/bfgd/4200000100.m3u8$LR•IPV4•76『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://183.215.134.239:19901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•76『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://60.16.0.216:5757/hls/19/index.m3u8$LR•IPV4•76『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://zzssw01.55555.io:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•76『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://113.26.202.52:1299/tsfile/live/0126_1.m3u8$LR•IPV4•76『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://112.27.235.94:8000/hls/33/index.m3u8$LR•IPV4•76『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://120.76.248.139/live/bfgd/4200000100.m3u8$LR•IPV4•76『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://183.215.134.239:19901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•76『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://60.16.0.216:5757/hls/19/index.m3u8$LR•IPV4•76『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://zzssw01.55555.io:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•76『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://113.26.202.52:1299/tsfile/live/0126_1.m3u8$LR•IPV4•76『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://1.195.131.143:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•76『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010068$LR•IPV4•76『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://iptv.huuc.edu.cn/hls/szhd.m3u8$LR•IPV4•76『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +https://smart.pendy.dpdns.org/Smart.php?id=shenzhen$LR•IPV4•76『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003873474.m3u8$LR•IPV4•76『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://z.b.bkpcp.top/m.php?id=szws$LR•IPV4•76『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://yc.myds.me:35455/itv/5000000004000007410.m3u8?cdn=bestzb$LR•IPV4•76『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://nas.suntao.online:35455/itv/5000000004000007410.m3u8?cdn=bestzb$LR•IPV4•76『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://38.64.72.148:80/hls/modn/list/4007/playlist.m3u8$LR•IPV4•76『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://120.192.226.35:8009/hls/37/index.m3u8$LR•IPV4•76『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://61.138.128.226:19901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•76『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://36.105.100.208:35455/itv/1000000005000265028.m3u8?cdn=ystenlive$LR•IPV4•76『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://iptv.0564.org:35455/itv/1000000005000265028.m3u8?cdn=ystenlive$LR•IPV4•76『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://mh0.asia:35455/itv/1000000005000265028.m3u8?cdn=ystenlive$LR•IPV4•76『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://xxx.504900.xyz:35455/itv/1000000005000265028.m3u8?cdn=ystenlive$LR•IPV4•76『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://3501776.xyz:35455/itv/1000000005000265028.m3u8?cdn=ystenlive$LR•IPV4•76『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://116.77.32.59:8277/streams/d/szws/playlist.m3u8$LR•IPV4•76『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://113.118.15.210:808/hls/45/index.m3u8$LR•IPV4•76『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226313/index.m3u8$LR•IPV6•76『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226313/index.m3u8$LR•IPV6•76『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://[2409:8087:2001:20:2800:0:df6e:eb11]:80/ott.mobaibox.com/PLTV/4/224/3221227555/index.m3u8$LR•IPV6•76『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +https://live.mxdyeah.top/live.php?id=shenzhenHD$LR•IPV4•76『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225739/index.m3u8$LR•IPV4•76『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226313/index.m3u8$LR•IPV4•76『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://k.061899.xyz/m.php?id=szws$LR•IPV4•76『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://t.061899.xyz/tl/tl.php?id=szws$LR•IPV4•76『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://sh.lnott.top:880/dx61.m3u8$LR•IPV4•76『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://39.134.67.108/PLTV/88888888/224/3221225943/1.m3u8$LR•IPV4•76『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://39.134.67.108/PLTV/88888888/224/3221225997/1.m3u8$LR•IPV4•76『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226313$LR•IPV4•76『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/shenzhenHD/__op/default/__f/index.m3u8$LR•IPV4•76『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/shenzhenHD/__op/default/__f/index.m3u8$LR•IPV4•76『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://101.35.240.114:88/live.php?id=深圳卫视$LR•IPV4•76『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://home.wwang.pw:35455/itv/1000000005000265028.m3u8?cdn=ystenlive$LR•IPV4•76『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://58.57.40.22:9901/tsfile/live/1036_1.m3u8$LR•IPV4•76『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://iptv.huuc.edu.cn/hls/szhd.m3u8$LR•IPV4•76『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://ygbh.site/php/bfgd.php?id=100$LR•IPV4•76『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +https://cc06.tv12.xyz/108.m3u8$LR•IPV4•76『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://112.27.235.94:8000/hls/33/index.m3u8$LR•IPV4•76『线路52』 +#EXTINF:-1 tvg-id="53" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://39.135.135.44/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225739/index.m3u8$LR•IPV4•76『线路53』 +#EXTINF:-1 tvg-id="54" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://t.061899.xyz/tl/dq.php?id=szws$LR•IPV4•76『线路54』 +#EXTINF:-1 tvg-id="55" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +https://zby.130519.xyz/PLTV/11/224/3221225728/index.m3u8$LR•IPV4•76『线路55』 +#EXTINF:-1 tvg-id="56" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010068$LR•IPV4•76『线路56』 +#EXTINF:-1 tvg-id="57" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://iptv.huuc.edu.cn/hls/szhd.m3u8$LR•IPV4•76『线路57』 +#EXTINF:-1 tvg-id="58" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +https://smart.pendy.dpdns.org/Smart.php?id=shenzhen$LR•IPV4•76『线路58』 +#EXTINF:-1 tvg-id="59" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003873474.m3u8$LR•IPV4•76『线路59』 +#EXTINF:-1 tvg-id="60" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://z.b.bkpcp.top/m.php?id=szws$LR•IPV4•76『线路60』 +#EXTINF:-1 tvg-id="61" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226313/index.m3u8$LR•IPV6•76『线路61』 +#EXTINF:-1 tvg-id="62" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226313/index.m3u8$LR•IPV6•76『线路62』 +#EXTINF:-1 tvg-id="63" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://[2409:8087:2001:20:2800:0:df6e:eb11]:80/ott.mobaibox.com/PLTV/4/224/3221227555/index.m3u8$LR•IPV6•76『线路63』 +#EXTINF:-1 tvg-id="64" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://yc.myds.me:35455/itv/5000000004000007410.m3u8?cdn=bestzb$LR•IPV4•76『线路64』 +#EXTINF:-1 tvg-id="65" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://nas.suntao.online:35455/itv/5000000004000007410.m3u8?cdn=bestzb$LR•IPV4•76『线路65』 +#EXTINF:-1 tvg-id="66" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://148.135.93.213:81/live.php?id=深圳卫视$LR•IPV4•76『线路66』 +#EXTINF:-1 tvg-id="67" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010068$LR•IPV4•76『线路67』 +#EXTINF:-1 tvg-id="68" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://iptv.huuc.edu.cn/hls/szhd.m3u8$LR•IPV4•76『线路68』 +#EXTINF:-1 tvg-id="69" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +https://smart.pendy.dpdns.org/Smart.php?id=shenzhen$LR•IPV4•76『线路69』 +#EXTINF:-1 tvg-id="70" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003873474.m3u8$LR•IPV4•76『线路70』 +#EXTINF:-1 tvg-id="71" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://z.b.bkpcp.top/m.php?id=szws$LR•IPV4•76『线路71』 +#EXTINF:-1 tvg-id="72" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226313/index.m3u8$LR•IPV6•76『线路72』 +#EXTINF:-1 tvg-id="73" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226313/index.m3u8$LR•IPV6•76『线路73』 +#EXTINF:-1 tvg-id="74" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://[2409:8087:2001:20:2800:0:df6e:eb11]:80/ott.mobaibox.com/PLTV/4/224/3221227555/index.m3u8$LR•IPV6•76『线路74』 +#EXTINF:-1 tvg-id="75" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://yc.myds.me:35455/itv/5000000004000007410.m3u8?cdn=bestzb$LR•IPV4•76『线路75』 +#EXTINF:-1 tvg-id="76" tvg-name="深圳卫视" group-title="卫视频道",深圳卫视 +http://nas.suntao.online:35455/itv/5000000004000007410.m3u8?cdn=bestzb$LR•IPV4•76『线路76』 +#EXTINF:-1 tvg-id="1" 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•76『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://120.76.248.139/live/bfgd/4200000092.m3u8$LR•IPV4•76『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://183.215.134.239:19901/tsfile/live/0125_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•76『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +https://cc06.tv12.xyz/43.m3u8$LR•IPV4•76『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://183.215.134.239:19901/tsfile/live/0125_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•76『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://120.76.248.139/live/bfgd/4200000092.m3u8$LR•IPV4•76『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://183.215.134.239:19901/tsfile/live/0125_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•76『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +https://cc06.tv12.xyz/43.m3u8$LR•IPV4•76『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://183.215.134.239:19901/tsfile/live/0125_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•76『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://101.74.28.84:9901/tsfile/live/0125_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•76『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://1.195.131.143:9901/tsfile/live/0125_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•76『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://101.66.198.42:9901/tsfile/live/0125_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•76『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://61.156.228.12:8154/tsfile/live/0125_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•76『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://php.jdshipin.com:8880/TVOD/gsyd.php?id=9900000520$LR•IPV4•76『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://z.b.bkpcp.top/m.php?id=gdws$LR•IPV4•76『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://j.x.bkpcp.top/jx/GUANGDHD$LR•IPV4•76『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://goo.bkpcp.top/mg/gdws$LR•IPV4•76『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://iptv.huuc.edu.cn/hls/gdhd.m3u8$LR•IPV4•76『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003873459.m3u8$LR•IPV4•76『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227201/index.m3u8$LR•IPV4•76『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://183.94.1.118:8801/tsfile/live/0125_1.m3u8$LR•IPV4•76『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://120.192.226.35:8009/hls/36/index.m3u8$LR•IPV4•76『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://61.138.128.226:19901/tsfile/live/0125_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•76『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://222.173.108.238:352/tsfile/live/0125_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•76『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://36.105.100.208:35455/itv/1000000005000265034.m3u8?cdn=ystenlive$LR•IPV4•76『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://iptv.0564.org:35455/itv/1000000005000265034.m3u8?cdn=ystenlive$LR•IPV4•76『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://my.tmos.cn:15181/chs006.m3u8$LR•IPV4•76『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://mh0.asia:35455/itv/1000000005000265034.m3u8?cdn=ystenlive$LR•IPV4•76『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://3501776.xyz:35455/itv/1000000005000265034.m3u8?cdn=ystenlive$LR•IPV4•76『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://150.158.112.123/%E5%85%AC%E4%BC%97%E5%8F%B7~%E7%8E%89%E7%8E%89%E8%BD%AF%E4%BB%B6%E5%BA%93/mg.php?id=gdws$LR•IPV4•76『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226248/index.m3u8$LR•IPV6•76『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226248/index.m3u8$LR•IPV6•76『线路32』 +#EXTINF:-1 tvg-id="33" 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•76『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +https://live.mxdyeah.top/live.php?id=guangdongHD$LR•IPV4•76『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226248/index.m3u8$LR•IPV4•76『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://k.061899.xyz/m.php?id=gdws$LR•IPV4•76『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://t.061899.xyz/tl/tl.php?id=gdws$LR•IPV4•76『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://sh.lnott.top:880/dx40.m3u8$LR•IPV4•76『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://39.134.67.108/PLTV/88888888/224/3221225962/1.m3u8$LR•IPV4•76『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://39.134.67.108/PLTV/88888888/224/3221225966/1.m3u8$LR•IPV4•76『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226248$LR•IPV4•76『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/guangdongHD/__op/default/__f/index.m3u8$LR•IPV4•76『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/guangdongHD/__op/default/__f/index.m3u8$LR•IPV4•76『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://101.35.240.114:88/live.php?id=广东卫视$LR•IPV4•76『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://home.wwang.pw:35455/itv/1000000005000265034.m3u8?cdn=ystenlive$LR•IPV4•76『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://39.164.160.249:9901/tsfile/live/0125_1.m3u8$LR•IPV4•76『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +https://piccpndks.v.kcdnvip.com/audio/guangdong_2/index.m3u8$LR•IPV4•76『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://iptv.huuc.edu.cn/hls/gdhd.m3u8$LR•IPV4•76『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://ygbh.site/php/bfgd.php?id=092$LR•IPV4•76『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +https://cc06.tv12.xyz/43.m3u8$LR•IPV4•76『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://112.27.235.94:8000/hls/30/index.m3u8$LR•IPV4•76『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://39.135.133.177/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226248/index.m3u8$LR•IPV4•76『线路52』 +#EXTINF:-1 tvg-id="53" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://mg.hmysapp.cn:177/ckmg/zb.php?id=gdws$LR•IPV4•76『线路53』 +#EXTINF:-1 tvg-id="54" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://t.061899.xyz/tl/dq.php?id=gdws$LR•IPV4•76『线路54』 +#EXTINF:-1 tvg-id="55" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +https://zby.130519.xyz/PLTV/11/224/3221225731/index.m3u8$LR•IPV4•76『线路55』 +#EXTINF:-1 tvg-id="56" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://php.jdshipin.com:8880/TVOD/gsyd.php?id=9900000520$LR•IPV4•76『线路56』 +#EXTINF:-1 tvg-id="57" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://z.b.bkpcp.top/m.php?id=gdws$LR•IPV4•76『线路57』 +#EXTINF:-1 tvg-id="58" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://j.x.bkpcp.top/jx/GUANGDHD$LR•IPV4•76『线路58』 +#EXTINF:-1 tvg-id="59" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://goo.bkpcp.top/mg/gdws$LR•IPV4•76『线路59』 +#EXTINF:-1 tvg-id="60" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://iptv.huuc.edu.cn/hls/gdhd.m3u8$LR•IPV4•76『线路60』 +#EXTINF:-1 tvg-id="61" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003873459.m3u8$LR•IPV4•76『线路61』 +#EXTINF:-1 tvg-id="62" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226248/index.m3u8$LR•IPV6•76『线路62』 +#EXTINF:-1 tvg-id="63" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226248/index.m3u8$LR•IPV6•76『线路63』 +#EXTINF:-1 tvg-id="64" 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•76『线路64』 +#EXTINF:-1 tvg-id="65" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227201/index.m3u8$LR•IPV4•76『线路65』 +#EXTINF:-1 tvg-id="66" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://148.135.93.213:81/live.php?id=广东卫视$LR•IPV4•76『线路66』 +#EXTINF:-1 tvg-id="67" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://php.jdshipin.com:8880/TVOD/gsyd.php?id=9900000520$LR•IPV4•76『线路67』 +#EXTINF:-1 tvg-id="68" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://z.b.bkpcp.top/m.php?id=gdws$LR•IPV4•76『线路68』 +#EXTINF:-1 tvg-id="69" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://j.x.bkpcp.top/jx/GUANGDHD$LR•IPV4•76『线路69』 +#EXTINF:-1 tvg-id="70" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://goo.bkpcp.top/mg/gdws$LR•IPV4•76『线路70』 +#EXTINF:-1 tvg-id="71" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://iptv.huuc.edu.cn/hls/gdhd.m3u8$LR•IPV4•76『线路71』 +#EXTINF:-1 tvg-id="72" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003873459.m3u8$LR•IPV4•76『线路72』 +#EXTINF:-1 tvg-id="73" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226248/index.m3u8$LR•IPV6•76『线路73』 +#EXTINF:-1 tvg-id="74" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226248/index.m3u8$LR•IPV6•76『线路74』 +#EXTINF:-1 tvg-id="75" 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•76『线路75』 +#EXTINF:-1 tvg-id="76" tvg-name="广东卫视" group-title="卫视频道",广东卫视 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227201/index.m3u8$LR•IPV4•76『线路76』 +#EXTINF:-1 tvg-id="1" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227010/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EkAhb-89sxdm9fz6-heXCuw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•58『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://221.2.148.205:8154/tsfile/live/0113_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://60.16.0.216:5757/hls/45/index.m3u8$LR•IPV4•58『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +https://cc06.tv12.xyz/46.m3u8$LR•IPV4•58『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://221.2.148.205:8154/tsfile/live/0113_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://60.16.0.216:5757/hls/45/index.m3u8$LR•IPV4•58『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +https://cc06.tv12.xyz/46.m3u8$LR•IPV4•58『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://1.195.131.143:9901/tsfile/live/0113_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://101.66.198.42:9901/tsfile/live/0113_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•58『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://101.74.28.84:9901/tsfile/live/0113_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +https://hlscdn.liangtv.cn/live/de0f97348eb84f62aa6b7d8cf0430770/dd505d87880c478f901f38560ca4d4e6.m3u8$LR•IPV4•58『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226549$LR•IPV4•58『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://z.b.bkpcp.top/m.php?id=gxws$LR•IPV4•58『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +https://mobilelive.gxtv.cn/live/gx_live1004/playlist.m3u8$LR•IPV4•58『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://goo.bkpcp.top/mg/gxws$LR•IPV4•58『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://live.cztv.cc:85/live/ggpd.m3u8$LR•IPV4•58『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +https://smart.pendy.dpdns.org/Smart.php?id=guangxi$LR•IPV4•58『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003887394.m3u8$LR•IPV4•58『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://120.192.226.35:8009/hls/53/index.m3u8$LR•IPV4•58『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://36.32.174.67:60080/newlive/live/hls/38/live.m3u8$LR•IPV4•58『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://cssbyd.imwork.net:8082/hls/33/index.m3u8$LR•IPV4•58『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://61.138.128.226:19901/tsfile/live/0113_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://36.105.100.208:35455/itv/5000000011000031118.m3u8?cdn=bestzb$LR•IPV4•58『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://116.9.204.242:9901/tsfile/live/0113_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://113.118.15.210:808/hls/56/index.m3u8$LR•IPV4•58『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://110.7.131.4:9901/tsfile/live/0113_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=6313&tk=23a9aca1f79f$LR•IPV4•58『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +https://www.yangshipin.cn/tv/home?pid=600002509$LR•IPV4•58『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://[2409:8087:1a01:df::4047]:80/TVOD/88888888/224/3221226091/main.m3u8$LR•IPV6•58『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226549/index.m3u8$LR•IPV6•58『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +https://live.mxdyeah.top/live.php?id=guangxiHD$LR•IPV4•58『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226549/index.m3u8$LR•IPV4•58『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://k.061899.xyz/m.php?id=gxws$LR•IPV4•58『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://t.061899.xyz/tl/tl.php?id=gxws$LR•IPV4•58『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://sh.lnott.top:880/dx41.m3u8$LR•IPV4•58『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://39.134.67.108/PLTV/88888888/224/3221226024/1.m3u8$LR•IPV4•58『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226549$LR•IPV4•58『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://live.gxrb.com.cn/tv/gxtvlive03/index.m3u8$LR•IPV4•58『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://148.135.93.213/live.php?id=广西卫视$LR•IPV4•58『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://home.wwang.pw:35455/itv/5000000011000031118.m3u8?cdn=bestzb$LR•IPV4•58『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +https://cc06.tv12.xyz/46.m3u8$LR•IPV4•58『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +https://piccpndks.v.kcdnvip.com/audio/guangxi_2/index.m3u8$LR•IPV4•58『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://ygbh.site/php/bfgd.php?id=116$LR•IPV4•58『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +https://cc06.tv12.xyz/46.m3u8$LR•IPV4•58『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://39.135.133.160/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226380/index.m3u8$LR•IPV4•58『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://mg.hmysapp.cn:177/ckmg/zb.php?id=gxws$LR•IPV4•58『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +https://zby.130519.xyz/PLTV/11/224/3221226084/index.m3u8$LR•IPV4•58『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://148.135.93.213:81/live.php?id=广西卫视$LR•IPV4•58『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226549$LR•IPV4•58『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://z.b.bkpcp.top/m.php?id=gxws$LR•IPV4•58『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +https://mobilelive.gxtv.cn/live/gx_live1004/playlist.m3u8$LR•IPV4•58『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://goo.bkpcp.top/mg/gxws$LR•IPV4•58『线路52』 +#EXTINF:-1 tvg-id="53" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://live.cztv.cc:85/live/ggpd.m3u8$LR•IPV4•58『线路53』 +#EXTINF:-1 tvg-id="54" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +https://hlscdn.liangtv.cn/live/de0f97348eb84f62aa6b7d8cf0430770/dd505d87880c478f901f38560ca4d4e6.m3u8$LR•IPV4•58『线路54』 +#EXTINF:-1 tvg-id="55" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://[2409:8087:1a01:df::4047]:80/TVOD/88888888/224/3221226091/main.m3u8$LR•IPV6•58『线路55』 +#EXTINF:-1 tvg-id="56" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +https://smart.pendy.dpdns.org/Smart.php?id=guangxi$LR•IPV4•58『线路56』 +#EXTINF:-1 tvg-id="57" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003887394.m3u8$LR•IPV4•58『线路57』 +#EXTINF:-1 tvg-id="58" tvg-name="广西卫视" group-title="卫视频道",广西卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226549/index.m3u8$LR•IPV6•58『线路58』 +#EXTINF:-1 tvg-id="1" tvg-name="厦门卫视" group-title="卫视频道",厦门卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003887454.m3u8$LR•IPV4•31『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="厦门卫视" group-title="卫视频道",厦门卫视 +http://goo.bkpcp.top/mg/xmws$LR•IPV4•31『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="厦门卫视" group-title="卫视频道",厦门卫视 +https://stream1.freetv.fun/cc2a1fdd054d0069e308a8c5358596fe1ba08562b102d8223a3b02e620082f96.m3u8$LR•IPV4•31『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="厦门卫视" group-title="卫视频道",厦门卫视 +http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226219/index.m3u8$LR•IPV4•31『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="厦门卫视" group-title="卫视频道",厦门卫视 +http://36.105.100.208:35455/itv/1000000005000266006.m3u8?cdn=ystenlive$LR•IPV4•31『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="厦门卫视" group-title="卫视频道",厦门卫视 +http://31182.hlsplay.aodianyun.com/lms_31182/tv_channel_175.m3u8?zfud$LR•IPV4•31『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="厦门卫视" group-title="卫视频道",厦门卫视 +http://113.118.15.210:808/hls/17/index.m3u8$LR•IPV4•31『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="厦门卫视" group-title="卫视频道",厦门卫视 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=1695&tk=23a9aca1f79f$LR•IPV4•31『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="厦门卫视" group-title="卫视频道",厦门卫视 +https://live1b.kxm.xmtv.cn/xmtvbf/tvzb/live.m3u8$LR•IPV4•31『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="厦门卫视" group-title="卫视频道",厦门卫视 +http://139.129.231.228:50060/rtp/239.21.2.6:5002$LR•IPV4•31『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="厦门卫视" group-title="卫视频道",厦门卫视 +http://183.11.239.36:808/hls/17/index.m3u8$LR•IPV4•31『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="厦门卫视" group-title="卫视频道",厦门卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226542/1.m3u8$LR•IPV6•31『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="厦门卫视" group-title="卫视频道",厦门卫视 +http://[2409:8087:74F1:0021::0008]/270000001128/9900000058/index.m3u8$LR•IPV6•31『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="厦门卫视" group-title="卫视频道",厦门卫视 +http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221226964/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•31『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="厦门卫视" group-title="卫视频道",厦门卫视 +http://[2409:8087:3428:20:500::1009]:6610/PLTV/88888888/224/3221226964/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•31『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="厦门卫视" group-title="卫视频道",厦门卫视 +http://[2409:8087:5e01:34::23]:6610/ZTE_CMS/00000001000000060000000000000193/index.m3u8$LR•IPV6•31『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="厦门卫视" group-title="卫视频道",厦门卫视 +http://e2.woc.iiiya.cn:28888/rtp/239.61.2.11:8060$LR•IPV4•31『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="厦门卫视" group-title="卫视频道",厦门卫视 +http://home.wwang.pw:35455/itv/1000000005000266006.m3u8?cdn=ystenlive$LR•IPV4•31『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="厦门卫视" group-title="卫视频道",厦门卫视 +http://183.11.239.36:808/hls/17/index.m3u8$LR•IPV4•31『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="厦门卫视" group-title="卫视频道",厦门卫视 +http://8.138.7.223/tv/fjtv1.php?id=xmws$LR•IPV4•31『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="厦门卫视" group-title="卫视频道",厦门卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003887454.m3u8$LR•IPV4•31『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="厦门卫视" group-title="卫视频道",厦门卫视 +http://goo.bkpcp.top/mg/xmws$LR•IPV4•31『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="厦门卫视" group-title="卫视频道",厦门卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226542/1.m3u8$LR•IPV6•31『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="厦门卫视" group-title="卫视频道",厦门卫视 +http://[2409:8087:74F1:0021::0008]/270000001128/9900000058/index.m3u8$LR•IPV6•31『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="厦门卫视" group-title="卫视频道",厦门卫视 +http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221226964/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•31『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="厦门卫视" group-title="卫视频道",厦门卫视 +http://[2409:8087:3428:20:500::1009]:6610/PLTV/88888888/224/3221226964/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•31『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="厦门卫视" group-title="卫视频道",厦门卫视 +http://[2409:8087:5e01:34::23]:6610/ZTE_CMS/00000001000000060000000000000193/index.m3u8$LR•IPV6•31『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="厦门卫视" group-title="卫视频道",厦门卫视 +https://stream1.freetv.fun/cc2a1fdd054d0069e308a8c5358596fe1ba08562b102d8223a3b02e620082f96.m3u8$LR•IPV4•31『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="厦门卫视" group-title="卫视频道",厦门卫视 +https://epg.pw/stream/aa65dd411565991ace44f9e5934bd018fdd52122e052d471a363b6ee839e1079.ctv$LR•IPV4•31『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="厦门卫视" group-title="卫视频道",厦门卫视 +http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226219/index.m3u8$LR•IPV4•31『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="厦门卫视" group-title="卫视频道",厦门卫视 +https://epg.pw/stream/aa65dd411565991ace44f9e5934bd018fdd52122e052d471a363b6ee839e1079.ctv$LR•IPV4•31『线路31』 +#EXTINF:-1 tvg-id="1" tvg-name="南方卫视" group-title="卫视频道",南方卫视 +http://60.16.0.216:5757/hls/28/index.m3u8$LR•IPV4•3『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="南方卫视" group-title="卫视频道",南方卫视 +http://60.16.0.216:5757/hls/28/index.m3u8$LR•IPV4•3『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="南方卫视" group-title="卫视频道",南方卫视 +http://60.16.0.216:5757/hls/28/index.m3u8$LR•IPV4•3『线路3』 +#EXTINF:-1 tvg-id="1" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227020/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Err-CLugPnTcUinEM8JeySg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•44『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +https://cc06.tv12.xyz/44.m3u8$LR•IPV4•44『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +https://cc06.tv12.xyz/44.m3u8$LR•IPV4•44『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +http://j.x.bkpcp.top/jx/GSWS$LR•IPV4•44『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010098$LR•IPV4•44『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +http://z.b.bkpcp.top/m.php?id=gsws$LR•IPV4•44『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +http://goo.bkpcp.top/mg/gsws$LR•IPV4•44『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003887450.m3u8$LR•IPV4•44『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +http://120.192.226.35:8009/hls/51/index.m3u8$LR•IPV4•44『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +http://cssbyd.imwork.net:8082/hls/48/index.m3u8$LR•IPV4•44『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +http://61.138.128.226:19901/tsfile/live/0141_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•44『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +http://36.105.100.208:35455/itv/5000000011000031121.m3u8?cdn=bestzb$LR•IPV4•44『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +http://113.118.15.210:808/hls/119/index.m3u8$LR•IPV4•44『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=9614&tk=23a9aca1f79f$LR•IPV4•44『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +http://120.238.94.10:9901/tsfile/live/1079_1.m3u8$LR•IPV4•44『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +http://139.129.231.228:50060/rtp/239.21.2.22:5002$LR•IPV4•44『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +http://111.61.236.247:9081/hls/54/index.m3u8$LR•IPV4•44『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +http://183.11.239.36:808/hls/119/index.m3u8$LR•IPV4•44『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227020/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Err-CLugPnTcUinEM8JeySg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•44『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +http://[2409:8c02:21c:60::2b]/live.rxip.sc96655.com/live/gsws_4000.m3u8$LR•IPV6•44『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221225845/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•44『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +http://[2409:8087:3428:20:500::1009]:6610/PLTV/88888888/224/3221225845/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•44『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +http://sh.lnott.top:880/dx56.m3u8$LR•IPV4•44『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221225633$LR•IPV4•44『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +https://hls.gstv.com.cn/49048r/6e1sy2.m3u8$LR•IPV4•44『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +http://148.135.93.213/live.php?id=甘肃卫视$LR•IPV4•44『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +http://home.wwang.pw:35455/itv/5000000011000031121.m3u8?cdn=bestzb$LR•IPV4•44『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +http://58.57.40.22:9901/tsfile/live/1056_1.m3u8$LR•IPV4•44『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +http://ygbh.site/php/bfgd.php?id=119$LR•IPV4•44『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +https://cc06.tv12.xyz/44.m3u8$LR•IPV4•44『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +http://39.134.65.67/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225633/index.m3u8$LR•IPV4•44『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +http://mg.hmysapp.cn:177/ckmg/zb.php?id=gsws$LR•IPV4•44『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +http://t.061899.xyz/tl/dq.php?id=gsws$LR•IPV4•44『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +https://zby.130519.xyz/PLTV/11/224/3221226090/index.m3u8$LR•IPV4•44『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +http://148.135.93.213:81/live.php?id=甘肃卫视$LR•IPV4•44『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010098$LR•IPV4•44『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +http://z.b.bkpcp.top/m.php?id=gsws$LR•IPV4•44『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +http://j.x.bkpcp.top/jx/GSWS$LR•IPV4•44『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +http://goo.bkpcp.top/mg/gsws$LR•IPV4•44『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003887450.m3u8$LR•IPV4•44『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227020/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Err-CLugPnTcUinEM8JeySg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•44『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +http://[2409:8c02:21c:60::2b]/live.rxip.sc96655.com/live/gsws_4000.m3u8$LR•IPV6•44『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221225845/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•44『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="甘肃卫视" group-title="卫视频道",甘肃卫视 +http://[2409:8087:3428:20:500::1009]:6610/PLTV/88888888/224/3221225845/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•44『线路44』 +#EXTINF:-1 tvg-id="1" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227012/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EnqBF03rFwPucF8ODtWxLQQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•62『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://zzssw01.55555.io:9901/tsfile/live/0120_1.m3u8$LR•IPV4•62『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://60.16.0.216:5757/hls/37/index.m3u8$LR•IPV4•62『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +https://cc06.tv12.xyz/48.m3u8$LR•IPV4•62『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://zzssw01.55555.io:9901/tsfile/live/0120_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•62『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://zzssw01.55555.io:9901/tsfile/live/0120_1.m3u8$LR•IPV4•62『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://60.16.0.216:5757/hls/37/index.m3u8$LR•IPV4•62『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +https://cc06.tv12.xyz/48.m3u8$LR•IPV4•62『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://zzssw01.55555.io:9901/tsfile/live/0120_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•62『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://101.74.28.84:9901/tsfile/live/0120_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•62『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://101.66.198.42:9901/tsfile/live/0120_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•62『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://1.195.131.143:9901/tsfile/live/0120_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•62『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226474$LR•IPV4•62『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://z.b.bkpcp.top/m.php?id=gzws$LR•IPV4•62『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://j.x.bkpcp.top/jx/GUIZHD$LR•IPV4•62『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://goo.bkpcp.top/mg/gzws$LR•IPV4•62『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003873471.m3u8$LR•IPV4•62『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://120.192.226.35:8009/hls/50/index.m3u8$LR•IPV4•62『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://113.56.95.69:53765/tsfile/live/1018_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•62『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://123.182.60.29:9002/hls/38/index.m3u8$LR•IPV4•62『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://cssbyd.imwork.net:8082/hls/39/index.m3u8$LR•IPV4•62『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://61.138.128.226:19901/tsfile/live/0120_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•62『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://36.105.100.208:35455/itv/5000000004000025843.m3u8?cdn=bestzb$LR•IPV4•62『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://113.118.15.210:808/hls/49/index.m3u8$LR•IPV4•62『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://110.7.131.4:9901/tsfile/live/0120_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•62『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=1716&tk=23a9aca1f79f$LR•IPV4•62『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +https://www.yangshipin.cn/tv/home?pid=600002490$LR•IPV4•62『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://[2409:8087:1a01:df::4030]:80/TVOD/88888888/224/3221225974/main.m3u8$LR•IPV6•62『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226474/index.m3u8$LR•IPV6•62『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226474/index.m3u8$LR•IPV6•62『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227012/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EnqBF03rFwPucF8ODtWxLQQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•62『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://[2409:8087:2001:20:2800:0:df6e:eb09]:80/ott.mobaibox.com/PLTV/4/224/3221228136/index.m3u8$LR•IPV6•62『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +https://live.mxdyeah.top/live.php?id=guizhouHD$LR•IPV4•62『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226474/index.m3u8$LR•IPV4•62『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://k.061899.xyz/m.php?id=gzws$LR•IPV4•62『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://t.061899.xyz/tl/tl.php?id=gzws$LR•IPV4•62『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://39.134.67.108/PLTV/88888888/224/3221225974/1.m3u8$LR•IPV4•62『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://39.134.67.108/PLTV/88888888/224/3221226030/1.m3u8$LR•IPV4•62『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226474$LR•IPV4•62『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/guizhouHD/__op/default/__f/index.m3u8$LR•IPV4•62『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/guizhouHD/__op/default/__f/index.m3u8$LR•IPV4•62『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://148.135.93.213/live.php?id=贵州卫视$LR•IPV4•62『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://home.wwang.pw:35455/itv/5000000004000025843.m3u8?cdn=bestzb$LR•IPV4•62『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://58.57.40.22:9901/tsfile/live/1042_1.m3u8$LR•IPV4•62『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://ygbh.site/php/bfgd.php?id=101$LR•IPV4•62『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +https://cc06.tv12.xyz/48.m3u8$LR•IPV4•62『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://112.27.235.94:8000/hls/46/index.m3u8$LR•IPV4•62『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://39.134.65.79/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225626/index.m3u8$LR•IPV4•62『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://mg.hmysapp.cn:177/ckmg/zb.php?id=gzws$LR•IPV4•62『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://t.061899.xyz/tl/dq.php?id=gzws$LR•IPV4•62『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +https://zby.130519.xyz/PLTV/11/224/3221226173/index.m3u8$LR•IPV4•62『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://148.135.93.213:81/live.php?id=贵州卫视$LR•IPV4•62『线路52』 +#EXTINF:-1 tvg-id="53" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226474$LR•IPV4•62『线路53』 +#EXTINF:-1 tvg-id="54" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://z.b.bkpcp.top/m.php?id=gzws$LR•IPV4•62『线路54』 +#EXTINF:-1 tvg-id="55" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://j.x.bkpcp.top/jx/GUIZHD$LR•IPV4•62『线路55』 +#EXTINF:-1 tvg-id="56" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://goo.bkpcp.top/mg/gzws$LR•IPV4•62『线路56』 +#EXTINF:-1 tvg-id="57" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://[2409:8087:1a01:df::4030]:80/TVOD/88888888/224/3221225974/main.m3u8$LR•IPV6•62『线路57』 +#EXTINF:-1 tvg-id="58" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003873471.m3u8$LR•IPV4•62『线路58』 +#EXTINF:-1 tvg-id="59" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226474/index.m3u8$LR•IPV6•62『线路59』 +#EXTINF:-1 tvg-id="60" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226474/index.m3u8$LR•IPV6•62『线路60』 +#EXTINF:-1 tvg-id="61" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227012/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EnqBF03rFwPucF8ODtWxLQQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•62『线路61』 +#EXTINF:-1 tvg-id="62" tvg-name="贵州卫视" group-title="卫视频道",贵州卫视 +http://[2409:8087:2001:20:2800:0:df6e:eb09]:80/ott.mobaibox.com/PLTV/4/224/3221228136/index.m3u8$LR•IPV6•62『线路62』 +#EXTINF:-1 tvg-id="1" 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•61『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +https://cc06.tv12.xyz/51.m3u8$LR•IPV4•61『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +https://cc06.tv12.xyz/51.m3u8$LR•IPV4•61『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://1.195.131.143:9901/tsfile/live/0117_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://106.118.70.125:9901/tsfile/live/0117_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://101.66.198.42:9901/tsfile/live/0117_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•61『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://101.74.28.84:9901/tsfile/live/0117_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://61.156.228.12:8154/tsfile/live/0117_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +https://jwplay.hebyun.com.cn/live/hbwstv/1500k/tzwj_video.m3u8$LR•IPV4•61『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010101$LR•IPV4•61『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://z.b.bkpcp.top/m.php?id=hbws$LR•IPV4•61『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://iptv.huuc.edu.cn/hls/hebhd.m3u8$LR•IPV4•61『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://tv.pull.hebtv.com/jishi/weishipindao.m3u8?t=2510710360&k=3d44740039027301acf8341d7361ab59$LR•IPV4•61『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003873460.m3u8$LR•IPV4•61『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +https://live.lalifeier.eu.org/hebtv/hbws.m3u8?t=1746372302&key=b89007ab1e7b4801eaa22ec0048feb91$LR•IPV4•61『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +https://tv.pull.hebtv.com/jishi/weishipindao.m3u8?t=1746316818&k=7e9b50f9b9b642ffd4ce1363bb6847ab$LR•IPV4•61『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://120.192.226.35:8009/hls/55/index.m3u8$LR•IPV4•61『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://113.56.95.69:53765/tsfile/live/1022_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://123.182.60.29:9002/hls/18/index.m3u8$LR•IPV4•61『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://36.32.174.67:60080/newlive/live/hls/36/live.m3u8$LR•IPV4•61『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://61.138.128.226:19901/tsfile/live/0117_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://222.173.108.238:352/tsfile/live/1013_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://36.105.100.208:35455/itv/5000000006000040016.m3u8?cdn=bestzb$LR•IPV4•61『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://113.118.15.210:808/hls/54/index.m3u8$LR•IPV4•61『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://110.7.131.4:9901/tsfile/live/0117_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=6178&tk=23a9aca1f79f$LR•IPV4•61『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226406/index.m3u8$LR•IPV6•61『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://[2409:8087:1a01:df::4035]:80/TVOD/88888888/224/3221225961/main.m3u8$LR•IPV6•61『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +https://live.mxdyeah.top/live.php?id=hebeiSD$LR•IPV4•61『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226406/index.m3u8$LR•IPV4•61『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://k.061899.xyz/m.php?id=hbws$LR•IPV4•61『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://t.061899.xyz/tl/tl.php?id=hbws$LR•IPV4•61『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://39.134.67.108/PLTV/88888888/224/3221225961/1.m3u8$LR•IPV4•61『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://39.134.67.108/PLTV/88888888/224/3221225991/1.m3u8$LR•IPV4•61『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226406$LR•IPV4•61『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/hebeiSD/__op/default/__f/index.m3u8$LR•IPV4•61『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/hebeiSD/__op/default/__f/index.m3u8$LR•IPV4•61『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://tv.pull.hebtv.com/jishi/weishipindao.m3u8?t=2510710360&k=f1b16a3a3866dafecb94ec2bb4160e58$LR•IPV4•61『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://148.135.93.213/live.php?id=河北卫视$LR•IPV4•61『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://120.76.248.139/live/bfgd/4200000108.m3u8$LR•IPV4•61『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://home.wwang.pw:35455/itv/5000000006000040016.m3u8?cdn=bestzb$LR•IPV4•61『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://58.57.40.22:9901/tsfile/live/1044_1.m3u8$LR•IPV4•61『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://iptv.huuc.edu.cn/hls/hebhd.m3u8$LR•IPV4•61『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://ygbh.site/php/bfgd.php?id=108$LR•IPV4•61『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +https://cc06.tv12.xyz/51.m3u8$LR•IPV4•61『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://112.27.235.94:8000/hls/39/index.m3u8$LR•IPV4•61『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://39.135.133.180/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226406/index.m3u8$LR•IPV4•61『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://t.061899.xyz/tl/dq.php?id=hbws$LR•IPV4•61『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +https://zby.130519.xyz/PLTV/11/224/3221226107/index.m3u8$LR•IPV4•61『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://tv.pull.hebtv.com/jishi/weishipindao.m3u8?t=2510710360&k=3d44740039027301acf8341d7361ab59$LR•IPV4•61『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://148.135.93.213:81/live.php?id=河北卫视$LR•IPV4•61『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010101$LR•IPV4•61『线路52』 +#EXTINF:-1 tvg-id="53" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://z.b.bkpcp.top/m.php?id=hbws$LR•IPV4•61『线路53』 +#EXTINF:-1 tvg-id="54" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +https://jwplay.hebyun.com.cn/live/hbwstv/1500k/tzwj_video.m3u8$LR•IPV4•61『线路54』 +#EXTINF:-1 tvg-id="55" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://iptv.huuc.edu.cn/hls/hebhd.m3u8$LR•IPV4•61『线路55』 +#EXTINF:-1 tvg-id="56" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226406/index.m3u8$LR•IPV6•61『线路56』 +#EXTINF:-1 tvg-id="57" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://tv.pull.hebtv.com/jishi/weishipindao.m3u8?t=2510710360&k=3d44740039027301acf8341d7361ab59$LR•IPV4•61『线路57』 +#EXTINF:-1 tvg-id="58" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://[2409:8087:1a01:df::4035]:80/TVOD/88888888/224/3221225961/main.m3u8$LR•IPV6•61『线路58』 +#EXTINF:-1 tvg-id="59" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003873460.m3u8$LR•IPV4•61『线路59』 +#EXTINF:-1 tvg-id="60" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +https://live.lalifeier.eu.org/hebtv/hbws.m3u8?t=1746372302&key=b89007ab1e7b4801eaa22ec0048feb91$LR•IPV4•61『线路60』 +#EXTINF:-1 tvg-id="61" tvg-name="河北卫视" group-title="卫视频道",河北卫视 +https://tv.pull.hebtv.com/jishi/weishipindao.m3u8?t=1746316818&k=7e9b50f9b9b642ffd4ce1363bb6847ab$LR•IPV4•61『线路61』 +#EXTINF:-1 tvg-id="1" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://tvpull.dxhmt.cn:9081/tv/11425-1.m3u8$LR•IPV4•67『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://1.94.31.214/php/hntv.php?id=hnws$LR•IPV4•67『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://lxajh.top/tv/hn.php?id=hnws$LR•IPV4•67『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +https://cc06.tv12.xyz/49.m3u8$LR•IPV4•67『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://60.16.0.216:5757/hls/42/index.m3u8$LR•IPV4•67『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://tvpull.dxhmt.cn:9081/tv/11425-1.m3u8$LR•IPV4•67『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://1.94.31.214/php/hntv.php?id=hnws$LR•IPV4•67『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://lxajh.top/tv/hn.php?id=hnws$LR•IPV4•67『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +https://cc06.tv12.xyz/49.m3u8$LR•IPV4•67『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://60.16.0.216:5757/hls/42/index.m3u8$LR•IPV4•67『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://61.156.228.12:8154/tsfile/live/0139_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•67『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://1.195.131.143:9901/tsfile/live/1026_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•67『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://101.66.198.42:9901/tsfile/live/0139_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•67『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://123.163.21.101:9901/tsfile/live/0139_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•67『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://101.74.28.84:9901/tsfile/live/0139_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•67『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://223.167.245.215:8001/rtp/239.45.0.3:5140$LR•IPV4•67『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226480$LR•IPV4•67『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://z.b.bkpcp.top/m.php?id=hnws$LR•IPV4•67『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://j.x.bkpcp.top/jx/HENHD$LR•IPV4•67『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://goo.bkpcp.top/mg/hnws$LR•IPV4•67『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://tvcdn.stream3.hndt.com/tv/65c4a6d5017e1000b2b6ea2500000000_transios/playlist.m3u8?wsSecret=7f59b59573ebfe76d91b35446bb207ad&wsTime=1746680128$LR•IPV4•67『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003887270.m3u8$LR•IPV4•67『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://183.94.1.118:8801/tsfile/live/1006_1.m3u8$LR•IPV4•67『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://120.192.226.35:8009/hls/46/index.m3u8$LR•IPV4•67『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://cssbyd.imwork.net:8082/hls/37/index.m3u8$LR•IPV4•67『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://61.138.128.226:19901/tsfile/live/0139_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•67『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://36.105.100.208:35455/itv/1000000002000027731.m3u8?cdn=ystenlive$LR•IPV4•67『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://150.158.112.123/%E5%85%AC%E4%BC%97%E5%8F%B7~%E7%8E%89%E7%8E%89%E8%BD%AF%E4%BB%B6%E5%BA%93/mg.php?id=hnws$LR•IPV4•67『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://113.118.15.210:808/hls/51/index.m3u8$LR•IPV4•67『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://110.7.131.4:9901/tsfile/live/0139_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•67『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://211.101.234.24:866/aishang/migu.php/migu.php?id=hnws$LR•IPV4•67『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=6209&tk=23a9aca1f79f$LR•IPV4•67『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226480/index.m3u8$LR•IPV6•67『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +https://live.mxdyeah.top/live.php?id=henanHD$LR•IPV4•67『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226480/index.m3u8$LR•IPV4•67『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://k.061899.xyz/m.php?id=hnws$LR•IPV4•67『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://t.061899.xyz/tl/tl.php?id=hnws$LR•IPV4•67『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://39.134.67.108/PLTV/88888888/224/3221226023/1.m3u8$LR•IPV4•67『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226480$LR•IPV4•67『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/henanHD/__op/default/__f/index.m3u8$LR•IPV4•67『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/henanHD/__op/default/__f/index.m3u8$LR•IPV4•67『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://148.135.93.213/live.php?id=河南卫视$LR•IPV4•67『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://home.wwang.pw:35455/itv/1000000002000027731.m3u8?cdn=ystenlive$LR•IPV4•67『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://58.57.40.22:9901/tsfile/live/1048_1.m3u8$LR•IPV4•67『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://tvcdn.stream3.hndt.com/tv/65c4a6d5017e1000b2b6ea2500000000_transios/playlist.m3u8?wsSecret=7503ba5613e0ca4a13046d6ab58862b4&wsTime=1759781478$LR•IPV4•67『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://ygbh.site/php/bfgd.php?id=104$LR•IPV4•67『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +https://cc06.tv12.xyz/49.m3u8$LR•IPV4•67『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://112.27.235.94:8000/hls/37/index.m3u8$LR•IPV4•67『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://39.135.133.163/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226480/index.m3u8$LR•IPV4•67『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://mg.hmysapp.cn:177/ckmg/zb.php?id=hnws$LR•IPV4•67『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://t.061899.xyz/tl/dq.php?id=hnws$LR•IPV4•67『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://lxajh.top/tv/hn.php?id=hnws$LR•IPV4•67『线路52』 +#EXTINF:-1 tvg-id="53" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +https://zby.130519.xyz/PLTV/11/224/3221226132/index.m3u8$LR•IPV4•67『线路53』 +#EXTINF:-1 tvg-id="54" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://1.94.31.214/php/hntv.php?id=hnws$LR•IPV4•67『线路54』 +#EXTINF:-1 tvg-id="55" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://148.135.93.213:81/live.php?id=河南卫视$LR•IPV4•67『线路55』 +#EXTINF:-1 tvg-id="56" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://1.94.31.214/php/hntv.php?id=hnws$LR•IPV4•67『线路56』 +#EXTINF:-1 tvg-id="57" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://223.167.245.215:8001/rtp/239.45.0.3:5140$LR•IPV4•67『线路57』 +#EXTINF:-1 tvg-id="58" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://tvpull.dxhmt.cn:9081/tv/11425-1.m3u8$LR•IPV4•67『线路58』 +#EXTINF:-1 tvg-id="59" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226480$LR•IPV4•67『线路59』 +#EXTINF:-1 tvg-id="60" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://z.b.bkpcp.top/m.php?id=hnws$LR•IPV4•67『线路60』 +#EXTINF:-1 tvg-id="61" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://j.x.bkpcp.top/jx/HENHD$LR•IPV4•67『线路61』 +#EXTINF:-1 tvg-id="62" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://goo.bkpcp.top/mg/hnws$LR•IPV4•67『线路62』 +#EXTINF:-1 tvg-id="63" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226480/index.m3u8$LR•IPV6•67『线路63』 +#EXTINF:-1 tvg-id="64" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://tvcdn.stream3.hndt.com/tv/65c4a6d5017e1000b2b6ea2500000000_transios/playlist.m3u8?wsSecret=7f59b59573ebfe76d91b35446bb207ad&wsTime=1746680128$LR•IPV4•67『线路64』 +#EXTINF:-1 tvg-id="65" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003887270.m3u8$LR•IPV4•67『线路65』 +#EXTINF:-1 tvg-id="66" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +https://live.lalifeier.eu.org/hntv/hnws.m3u8?t=1746393735&key=728f36a221b96bc109f1ef1914592447$LR•IPV4•67『线路66』 +#EXTINF:-1 tvg-id="67" tvg-name="河南卫视" group-title="卫视频道",河南卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226480/index.m3u8$LR•IPV6•67『线路67』 +#EXTINF:-1 tvg-id="1" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226965/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E7UiKL56-L86ihmTWaZ6csw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•66『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://112.27.235.94:8000/hls/48/index.m3u8$LR•IPV4•66『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +https://cc06.tv12.xyz/53.m3u8$LR•IPV4•66『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://112.27.235.94:8000/hls/48/index.m3u8$LR•IPV4•66『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +https://cc06.tv12.xyz/53.m3u8$LR•IPV4•66『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://1.195.131.143:9901/tsfile/live/0143_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://61.156.228.12:8154/tsfile/live/0143_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://101.66.198.42:9901/tsfile/live/0143_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•66『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://101.74.28.84:9901/tsfile/live/0143_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://l.cztvcloud.com/channels/lantian/SXyuyao3/720p.m3u8$LR•IPV4•66『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010056$LR•IPV4•66『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://j.x.bkpcp.top/jx/HEILJHD$LR•IPV4•66『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://iptv.huuc.edu.cn/hls/hljhd.m3u8$LR•IPV4•66『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003873470.m3u8$LR•IPV4•66『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://z.b.bkpcp.top/m.php?id=hljws$LR•IPV4•66『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://120.192.226.35:8009/hls/38/index.m3u8$LR•IPV4•66『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://61.138.128.226:19901/tsfile/live/0143_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://36.105.100.208:35455/itv/1000000005000265029.m3u8?cdn=ystenlive$LR•IPV4•66『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://my.tmos.cn:15181/chs005.m3u8$LR•IPV4•66『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://175.171.30.26:5111/hls/624121732/index.m3u8$LR•IPV4•66『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://113.118.15.210:808/hls/48/index.m3u8$LR•IPV4•66『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://110.7.131.4:9901/tsfile/live/0143_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=9197&tk=23a9aca1f79f$LR•IPV4•66『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +https://www.yangshipin.cn/tv/home?pid=600002498$LR•IPV4•66『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://58.19.43.46:9901/tsfile/live/1008_1.m3u8$LR•IPV4•66『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226327/index.m3u8$LR•IPV6•66『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://[2409:8087:1a01:df::4001]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226327/1.m3u8$LR•IPV6•66『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226327/index.m3u8$LR•IPV6•66『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226965/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E7UiKL56-L86ihmTWaZ6csw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•66『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +https://live.mxdyeah.top/live.php?id=heilongjiangHD$LR•IPV4•66『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226327/index.m3u8$LR•IPV4•66『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226467/index.m3u8$LR•IPV4•66『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226419/index.m3u8$LR•IPV4•66『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226582/index.m3u8$LR•IPV4•66『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226585/index.m3u8$LR•IPV4•66『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226532/index.m3u8$LR•IPV4•66『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226531/index.m3u8$LR•IPV4•66『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226525/index.m3u8$LR•IPV4•66『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://k.061899.xyz/m.php?id=hljws$LR•IPV4•66『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://t.061899.xyz/tl/tl.php?id=hljws$LR•IPV4•66『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://sh.lnott.top:880/dx36.m3u8$LR•IPV4•66『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://39.134.67.108/PLTV/88888888/224/3221226006/1.m3u8$LR•IPV4•66『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226585$LR•IPV4•66『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/heilongjiangHD/__op/default/__f/index.m3u8$LR•IPV4•66『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/heilongjiangHD/__op/default/__f/index.m3u8$LR•IPV4•66『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://148.135.93.213/live.php?id=黑龙江卫视$LR•IPV4•66『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://home.wwang.pw:35455/itv/1000000005000265029.m3u8?cdn=ystenlive$LR•IPV4•66『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://58.57.40.22:9901/tsfile/live/1040_1.m3u8$LR•IPV4•66『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://p2.ytelc.com/videojs.php?id=https://idclive.hljtv.com:4430/live/hljws_own.m3u8$LR•IPV4•66『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://iptv.huuc.edu.cn/hls/hljhd.m3u8$LR•IPV4•66『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://ygbh.site/php/bfgd.php?id=095$LR•IPV4•66『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +https://cc06.tv12.xyz/53.m3u8$LR•IPV4•66『线路52』 +#EXTINF:-1 tvg-id="53" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://112.27.235.94:8000/hls/48/index.m3u8$LR•IPV4•66『线路53』 +#EXTINF:-1 tvg-id="54" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://39.135.133.173/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226327/index.m3u8$LR•IPV4•66『线路54』 +#EXTINF:-1 tvg-id="55" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://t.061899.xyz/tl/dq.php?id=hljws$LR•IPV4•66『线路55』 +#EXTINF:-1 tvg-id="56" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://148.135.93.213:81/live.php?id=黑龙江卫视$LR•IPV4•66『线路56』 +#EXTINF:-1 tvg-id="57" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010056$LR•IPV4•66『线路57』 +#EXTINF:-1 tvg-id="58" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://j.x.bkpcp.top/jx/HEILJHD$LR•IPV4•66『线路58』 +#EXTINF:-1 tvg-id="59" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://l.cztvcloud.com/channels/lantian/SXyuyao3/720p.m3u8$LR•IPV4•66『线路59』 +#EXTINF:-1 tvg-id="60" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://iptv.huuc.edu.cn/hls/hljhd.m3u8$LR•IPV4•66『线路60』 +#EXTINF:-1 tvg-id="61" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003873470.m3u8$LR•IPV4•66『线路61』 +#EXTINF:-1 tvg-id="62" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://z.b.bkpcp.top/m.php?id=hljws$LR•IPV4•66『线路62』 +#EXTINF:-1 tvg-id="63" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226327/index.m3u8$LR•IPV6•66『线路63』 +#EXTINF:-1 tvg-id="64" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://[2409:8087:1a01:df::4001]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226327/1.m3u8$LR•IPV6•66『线路64』 +#EXTINF:-1 tvg-id="65" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226327/index.m3u8$LR•IPV6•66『线路65』 +#EXTINF:-1 tvg-id="66" tvg-name="黑龙江卫视" group-title="卫视频道",黑龙江卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226965/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E7UiKL56-L86ihmTWaZ6csw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•66『线路66』 +#EXTINF:-1 tvg-id="1" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226952/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EREB40lnZnCEwjRy7LZuhIQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•63『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://60.16.0.216:5757/hls/33/index.m3u8$LR•IPV4•63『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +https://cc06.tv12.xyz/50.m3u8$LR•IPV4•63『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://112.27.235.94:8000/hls/41/index.m3u8$LR•IPV4•63『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://60.16.0.216:5757/hls/33/index.m3u8$LR•IPV4•63『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +https://cc06.tv12.xyz/50.m3u8$LR•IPV4•63『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://112.27.235.94:8000/hls/41/index.m3u8$LR•IPV4•63『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://101.74.28.84:9901/tsfile/live/0132_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•63『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://1.195.131.143:9901/tsfile/live/0132_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•63『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://101.66.198.42:9901/tsfile/live/0132_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•63『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010057$LR•IPV4•63『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://z.b.bkpcp.top/m.php?id=hubws$LR•IPV4•63『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://j.x.bkpcp.top/jx/HUBEIHD$LR•IPV4•63『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://goo.bkpcp.top/mg/hubws$LR•IPV4•63『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://iptv.huuc.edu.cn/hls/hbhd.m3u8$LR•IPV4•63『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +https://www.freetv.top/migu/738906825.m3u8?migutoken=959fce041a0fecbe0bdf2b300a4d13c986661650b877856aabade568eaf9f549143a65c212325030ca99ac119635c6c4daa7c93ba8863508e6aeef100965a31ae4a8152b02337aea453f42988d$LR•IPV4•63『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +https://smart.pendy.dpdns.org/Smart.php?id=hubei$LR•IPV4•63『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003873465.m3u8$LR•IPV4•63『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://183.94.1.118:8801/tsfile/live/0132_1.m3u8$LR•IPV4•63『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://120.192.226.35:8009/hls/39/index.m3u8$LR•IPV4•63『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://113.56.95.69:53765/tsfile/live/0018_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•63『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://36.32.174.67:60080/newlive/live/hls/28/live.m3u8$LR•IPV4•63『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://61.138.128.226:19901/tsfile/live/0132_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•63『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://36.105.100.208:35455/itv/1000000005000265023.m3u8?cdn=ystenlive$LR•IPV4•63『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://iptv.0564.org:35455/itv/1000000005000265023.m3u8?cdn=ystenlive$LR•IPV4•63『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://mh0.asia:35455/itv/1000000005000265023.m3u8?cdn=ystenlive$LR•IPV4•63『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://xxx.504900.xyz:35455/itv/1000000005000265023.m3u8?cdn=ystenlive$LR•IPV4•63『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://3501776.xyz:35455/itv/1000000005000265023.m3u8?cdn=ystenlive$LR•IPV4•63『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226501/index.m3u8$LR•IPV6•63『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226952/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EREB40lnZnCEwjRy7LZuhIQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•63『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +https://live.mxdyeah.top/live.php?id=hubeiSD$LR•IPV4•63『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225627/index.m3u8$LR•IPV4•63『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226477/index.m3u8$LR•IPV4•63『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://k.061899.xyz/m.php?id=hubws$LR•IPV4•63『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://t.061899.xyz/tl/tl.php?id=hubws$LR•IPV4•63『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://sh.lnott.top:880/dx42.m3u8$LR•IPV4•63『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://39.134.67.108/PLTV/88888888/224/3221225975/1.m3u8$LR•IPV4•63『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://39.134.67.108/PLTV/88888888/224/3221226015/1.m3u8$LR•IPV4•63『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226477$LR•IPV4•63『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/hubeiSD/__op/default/__f/index.m3u8$LR•IPV4•63『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/hubeiSD/__op/default/__f/index.m3u8$LR•IPV4•63『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://101.35.240.114:88/live.php?id=湖北卫视$LR•IPV4•63『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://home.wwang.pw:35455/itv/1000000005000265023.m3u8?cdn=ystenlive$LR•IPV4•63『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://58.57.40.22:9901/tsfile/live/1038_1.m3u8$LR•IPV4•63『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://iptv.huuc.edu.cn/hls/hbhd.m3u8$LR•IPV4•63『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://ygbh.site/php/bfgd.php?id=102$LR•IPV4•63『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +https://cc06.tv12.xyz/50.m3u8$LR•IPV4•63『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://112.27.235.94:8000/hls/41/index.m3u8$LR•IPV4•63『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://39.134.65.70/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225627/index.m3u8$LR•IPV4•63『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://mg.hmysapp.cn:177/ckmg/zb.php?id=hubws$LR•IPV4•63『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://t.061899.xyz/tl/dq.php?id=hubws$LR•IPV4•63『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +https://zby.130519.xyz/PLTV/11/224/3221225729/index.m3u8$LR•IPV4•63『线路52』 +#EXTINF:-1 tvg-id="53" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://148.135.93.213:81/live.php?id=湖北卫视$LR•IPV4•63『线路53』 +#EXTINF:-1 tvg-id="54" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010057$LR•IPV4•63『线路54』 +#EXTINF:-1 tvg-id="55" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://z.b.bkpcp.top/m.php?id=hubws$LR•IPV4•63『线路55』 +#EXTINF:-1 tvg-id="56" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://j.x.bkpcp.top/jx/HUBEIHD$LR•IPV4•63『线路56』 +#EXTINF:-1 tvg-id="57" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://goo.bkpcp.top/mg/hubws$LR•IPV4•63『线路57』 +#EXTINF:-1 tvg-id="58" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://iptv.huuc.edu.cn/hls/hbhd.m3u8$LR•IPV4•63『线路58』 +#EXTINF:-1 tvg-id="59" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +https://www.freetv.top/migu/738906825.m3u8?migutoken=959fce041a0fecbe0bdf2b300a4d13c986661650b877856aabade568eaf9f549143a65c212325030ca99ac119635c6c4daa7c93ba8863508e6aeef100965a31ae4a8152b02337aea453f42988d$LR•IPV4•63『线路59』 +#EXTINF:-1 tvg-id="60" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +https://smart.pendy.dpdns.org/Smart.php?id=hubei$LR•IPV4•63『线路60』 +#EXTINF:-1 tvg-id="61" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003873465.m3u8$LR•IPV4•63『线路61』 +#EXTINF:-1 tvg-id="62" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226501/index.m3u8$LR•IPV6•63『线路62』 +#EXTINF:-1 tvg-id="63" tvg-name="湖北卫视" group-title="卫视频道",湖北卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226952/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EREB40lnZnCEwjRy7LZuhIQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•63『线路63』 +#EXTINF:-1 tvg-id="1" 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•58『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://183.215.134.239:19901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +https://cc06.tv12.xyz/62.m3u8$LR•IPV4•58『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://183.215.134.239:19901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +https://cc06.tv12.xyz/62.m3u8$LR•IPV4•58『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://101.66.198.42:9901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•58『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://1.195.131.143:9901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://101.74.28.84:9901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010060$LR•IPV4•58『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://z.b.bkpcp.top/m.php?id=jxws$LR•IPV4•58『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://goo.bkpcp.top/mg/jxws$LR•IPV4•58『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://iptv.huuc.edu.cn/hls/jxhd.m3u8$LR•IPV4•58『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +https://www.freetv.top/migu/783847495.m3u8?migutoken=fddcc05dc0245329d3208607a5b1f5a1980bc31a7ced510e345af6cc68f5b86d2d9178b45706a0b6a0ceddc82ce06e53375cfedbc96fd0b00c12195c7d77b6f23811a67970bcfeb47629aa5aa6$LR•IPV4•58『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000004796511.m3u8$LR•IPV4•58『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227226/index.m3u8$LR•IPV4•58『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://183.94.1.118:8801/tsfile/live/0138_1.m3u8$LR•IPV4•58『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://120.192.226.35:8009/hls/47/index.m3u8$LR•IPV4•58『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://113.56.95.69:53765/tsfile/live/1016_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://36.32.174.67:60080/newlive/live/hls/22/live.m3u8$LR•IPV4•58『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://58.17.48.228:808/hls/17/index.m3u8$LR•IPV4•58『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://61.138.128.226:19901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://222.173.108.238:352/tsfile/live/1010_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://36.105.100.208:35455/itv/1000000005000265032.m3u8?cdn=ystenlive$LR•IPV4•58『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://iptv.0564.org:35455/itv/1000000005000265032.m3u8?cdn=ystenlive$LR•IPV4•58『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://mh0.asia:35455/itv/1000000005000265032.m3u8?cdn=ystenlive$LR•IPV4•58『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://[2409:8087:1a01:df::4027]:80/TVOD/88888888/224/3221225935/main.m3u8$LR•IPV6•58『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226344/index.m3u8$LR•IPV6•58『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226504/index.m3u8$LR•IPV6•58『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +https://live.mxdyeah.top/live.php?id=jiangxiHD$LR•IPV4•58『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226344/index.m3u8$LR•IPV4•58『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://k.061899.xyz/m.php?id=jxws$LR•IPV4•58『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://t.061899.xyz/tl/tl.php?id=jxws$LR•IPV4•58『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://sh.lnott.top:880/dx43.m3u8$LR•IPV4•58『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://39.134.67.108/PLTV/88888888/224/3221225935/1.m3u8$LR•IPV4•58『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://39.134.67.108/PLTV/88888888/224/3221225995/1.m3u8$LR•IPV4•58『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226344$LR•IPV4•58『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://101.35.240.114:88/live.php?id=江西卫视$LR•IPV4•58『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://home.wwang.pw:35455/itv/1000000005000265032.m3u8?cdn=ystenlive$LR•IPV4•58『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://58.57.40.22:9901/tsfile/live/1043_1.m3u8$LR•IPV4•58『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://iptv.huuc.edu.cn/hls/jxhd.m3u8$LR•IPV4•58『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://ygbh.site/php/bfgd.php?id=098$LR•IPV4•58『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +https://cc06.tv12.xyz/62.m3u8$LR•IPV4•58『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://112.27.235.94:8000/hls/44/index.m3u8$LR•IPV4•58『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://39.135.133.175/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226344/index.m3u8$LR•IPV4•58『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://mg.hmysapp.cn:177/ckmg/zb.php?id=jxws$LR•IPV4•58『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://t.061899.xyz/tl/dq.php?id=jxws$LR•IPV4•58『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +https://zby.130519.xyz/PLTV/11/224/3221225740/index.m3u8$LR•IPV4•58『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://148.135.93.213:81/live.php?id=江西卫视$LR•IPV4•58『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010060$LR•IPV4•58『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://z.b.bkpcp.top/m.php?id=jxws$LR•IPV4•58『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://goo.bkpcp.top/mg/jxws$LR•IPV4•58『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://iptv.huuc.edu.cn/hls/jxhd.m3u8$LR•IPV4•58『线路52』 +#EXTINF:-1 tvg-id="53" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +https://www.freetv.top/migu/783847495.m3u8?migutoken=fddcc05dc0245329d3208607a5b1f5a1980bc31a7ced510e345af6cc68f5b86d2d9178b45706a0b6a0ceddc82ce06e53375cfedbc96fd0b00c12195c7d77b6f23811a67970bcfeb47629aa5aa6$LR•IPV4•58『线路53』 +#EXTINF:-1 tvg-id="54" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://[2409:8087:1a01:df::4027]:80/TVOD/88888888/224/3221225935/main.m3u8$LR•IPV6•58『线路54』 +#EXTINF:-1 tvg-id="55" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000004796511.m3u8$LR•IPV4•58『线路55』 +#EXTINF:-1 tvg-id="56" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226344/index.m3u8$LR•IPV6•58『线路56』 +#EXTINF:-1 tvg-id="57" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226504/index.m3u8$LR•IPV6•58『线路57』 +#EXTINF:-1 tvg-id="58" tvg-name="江西卫视" group-title="卫视频道",江西卫视 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227226/index.m3u8$LR•IPV4•58『线路58』 +#EXTINF:-1 tvg-id="1" 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•57『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://60.16.0.216:5757/hls/44/index.m3u8$LR•IPV4•57『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://60.16.0.216:5757/hls/44/index.m3u8$LR•IPV4•57『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://61.156.228.12:8154/tsfile/live/0116_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•57『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://101.66.198.42:9901/tsfile/live/0116_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•57『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://106.118.70.125:9901/tsfile/live/0116_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•57『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010075$LR•IPV4•57『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://z.b.bkpcp.top/m.php?id=jlws$LR•IPV4•57『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://j.x.bkpcp.top/jx/JILHD$LR•IPV4•57『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://goo.bkpcp.top/mg/jlws$LR•IPV4•57『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000004972569.m3u8$LR•IPV4•57『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227240/index.m3u8$LR•IPV4•57『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://120.192.226.35:8009/hls/48/index.m3u8$LR•IPV4•57『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://cssbyd.imwork.net:8082/hls/41/index.m3u8$LR•IPV4•57『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://61.138.128.226:19901/tsfile/live/1022_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•57『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://36.105.100.208:35455/itv/5000000011000031117.m3u8?cdn=bestzb$LR•IPV4•57『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +https://pulltv1.wanfudaluye.com/live/tv1.m3u8$LR•IPV4•57『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://175.171.30.26:5111/hls/595914941/index.m3u8$LR•IPV4•57『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://110.7.131.4:9901/tsfile/live/0116_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•57『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=3028&tk=23a9aca1f79f$LR•IPV4•57『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://58.19.43.46:9901/tsfile/live/1007_1.m3u8$LR•IPV4•57『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://58.221.214.82:9901/tsfile/live/0116_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•57『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226397/index.m3u8$LR•IPV6•57『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226397/index.m3u8$LR•IPV6•57『线路24』 +#EXTINF:-1 tvg-id="25" 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•57『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221227099/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•57『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +https://live.mxdyeah.top/live.php?id=jilinHD$LR•IPV4•57『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226397/index.m3u8$LR•IPV4•57『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://k.061899.xyz/m.php?id=jlws$LR•IPV4•57『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://t.061899.xyz/tl/tl.php?id=jlws$LR•IPV4•57『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://sh.lnott.top:880/dx37.m3u8$LR•IPV4•57『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://39.134.67.108/PLTV/88888888/224/3221226013/1.m3u8$LR•IPV4•57『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226397$LR•IPV4•57『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/jilinHD/__op/default/__f/index.m3u8$LR•IPV4•57『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/jilinHD/__op/default/__f/index.m3u8$LR•IPV4•57『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://hls1.avap.jilintv.cn/zqvk7vpj/channel/0533b55e42354f4f802bdec78e26b571/1.m3u8$LR•IPV4•57『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://148.135.93.213/live.php?id=吉林卫视$LR•IPV4•57『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://home.wwang.pw:35455/itv/5000000011000031117.m3u8?cdn=bestzb$LR•IPV4•57『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://58.57.40.22:9901/tsfile/live/1050_1.m3u8$LR•IPV4•57『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://ygbh.site/php/bfgd.php?id=097$LR•IPV4•57『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +https://cc06.tv12.xyz/60.m3u8$LR•IPV4•57『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://39.135.133.161/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226397/index.m3u8$LR•IPV4•57『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://mg.hmysapp.cn:177/ckmg/zb.php?id=jlws$LR•IPV4•57『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://t.061899.xyz/tl/dq.php?id=jlws$LR•IPV4•57『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://t.061899.xyz/tl/dq.php?id=jlws$LR•IPV4•57『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +https://zby.130519.xyz/PLTV/11/224/3221226149/index.m3u8$LR•IPV4•57『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://148.135.93.213:81/live.php?id=吉林卫视$LR•IPV4•57『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010075$LR•IPV4•57『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://z.b.bkpcp.top/m.php?id=jlws$LR•IPV4•57『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://j.x.bkpcp.top/jx/JILHD$LR•IPV4•57『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://goo.bkpcp.top/mg/jlws$LR•IPV4•57『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000004972569.m3u8$LR•IPV4•57『线路52』 +#EXTINF:-1 tvg-id="53" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226397/index.m3u8$LR•IPV6•57『线路53』 +#EXTINF:-1 tvg-id="54" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226397/index.m3u8$LR•IPV6•57『线路54』 +#EXTINF:-1 tvg-id="55" 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•57『线路55』 +#EXTINF:-1 tvg-id="56" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221227099/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•57『线路56』 +#EXTINF:-1 tvg-id="57" tvg-name="吉林卫视" group-title="卫视频道",吉林卫视 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227240/index.m3u8$LR•IPV4•57『线路57』 +#EXTINF:-1 tvg-id="1" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227018/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ErN_hoRDwApMKnJqiNHvn9w%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•57『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +https://ali-m-l.cztv.com/channels/lantian/channel007/1080p.m3u8$LR•IPV4•57『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +https://ali-m-l.cztv.com/channels/lantian/channel007/1080p.m3u8$LR•IPV4•57『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://60.16.0.216:5757/hls/41/index.m3u8$LR•IPV4•57『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +https://ali-m-l.cztv.com/channels/lantian/channel007/1080p.m3u8$LR•IPV4•57『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +https://ali-m-l.cztv.com/channels/lantian/channel007/1080p.m3u8$LR•IPV4•57『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://60.16.0.216:5757/hls/41/index.m3u8$LR•IPV4•57『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://1.195.131.143:9901/tsfile/live/0109_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•57『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221225634$LR•IPV4•57『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://z.b.bkpcp.top/m.php?id=nmws$LR•IPV4•57『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://j.x.bkpcp.top/jx/NMGWS$LR•IPV4•57『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://goo.bkpcp.top/mg/nmws$LR•IPV4•57『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225634/index.m3u8$LR•IPV4•57『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003887427.m3u8$LR•IPV4•57『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://120.192.226.35:8009/hls/60/index.m3u8$LR•IPV4•57『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://cssbyd.imwork.net:8082/hls/44/index.m3u8$LR•IPV4•57『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://61.138.128.226:19901/tsfile/live/0109_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•57『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://113.118.15.210:808/hls/60/index.m3u8$LR•IPV4•57『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=1348&tk=23a9aca1f79f$LR•IPV4•57『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://139.129.231.228:50060/rtp/239.21.1.41:5002$LR•IPV4•57『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://111.61.236.247:9081/hls/48/index.m3u8$LR•IPV4•57『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://139.196.151.191:2051/rtp/239.45.1.238:5140$LR•IPV4•57『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://113.195.45.95:9901/tsfile/live/0109_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•57『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://[2409:8087:1a01:df::401a]:80/wh7f454c46tw3029083262_-802204014/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225634/index.m3u8?icpid=88888888&RTS=1713969858&from=4&hms_devid=128&prioritypopid=4&online=1713969858&vqe=3$LR•IPV6•57『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225634/index.m3u8$LR•IPV6•57『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226389/index.m3u8$LR•IPV6•57『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227018/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ErN_hoRDwApMKnJqiNHvn9w%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•57『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +https://live.mxdyeah.top/live.php?id=neimengkuSD$LR•IPV4•57『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225634/index.m3u8$LR•IPV4•57『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226389/index.m3u8$LR•IPV4•57『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://39.134.67.108/PLTV/88888888/224/3221226017/1.m3u8$LR•IPV4•57『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/neimengkuSD/__op/default/__f/index.m3u8$LR•IPV4•57『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/neimengkuSD/__op/default/__f/index.m3u8$LR•IPV4•57『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +https://livestream-bt.nmtv.cn/nmtv/2314general.m3u8?txSecret=dc348a27bd36fe1bd63562af5e7269ea&txTime=771EF880$LR•IPV4•57『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://101.35.240.114:88/live.php?id=内蒙古卫视$LR•IPV4•57『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://120.76.248.139/live/bfgd/4200000110.m3u8$LR•IPV4•57『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +https://livestream-bt.nmtv.cn/nmtv/2314general.m3u8?txSecret=35f2dd39972cede5222c6bd2c0efe24b&txTime=77395680$LR•IPV4•57『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://120.76.248.139/live/bfgd/4200000110.m3u8$LR•IPV4•57『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://ygbh.site/php/bfgd.php?id=110$LR•IPV4•57『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +https://cc06.tv12.xyz/94.m3u8$LR•IPV4•57『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://112.27.235.94:8000/hls/49/index.m3u8$LR•IPV4•57『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://39.134.65.78/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225634/index.m3u8$LR•IPV4•57『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://mg.hmysapp.cn:177/ckmg/zb.php?id=nmws$LR•IPV4•57『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://t.061899.xyz/tl/dq.php?id=nmgws$LR•IPV4•57『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://8.138.7.223/tv/nmgws.m3u8$LR•IPV4•57『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://148.135.93.213:81/live.php?id=内蒙古卫视$LR•IPV4•57『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +https://livestream-bt.nmtv.cn/nmtv/2314general.m3u8?txSecret=35f2dd39972cede5222c6bd2c0efe24b&txTime=77395680$LR•IPV4•57『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221225634$LR•IPV4•57『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://z.b.bkpcp.top/m.php?id=nmws$LR•IPV4•57『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://j.x.bkpcp.top/jx/NMGWS$LR•IPV4•57『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://goo.bkpcp.top/mg/nmws$LR•IPV4•57『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225634/index.m3u8$LR•IPV4•57『线路52』 +#EXTINF:-1 tvg-id="53" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003887427.m3u8$LR•IPV4•57『线路53』 +#EXTINF:-1 tvg-id="54" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://[2409:8087:1a01:df::401a]:80/wh7f454c46tw3029083262_-802204014/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225634/index.m3u8?icpid=88888888&RTS=1713969858&from=4&hms_devid=128&prioritypopid=4&online=1713969858&vqe=3$LR•IPV6•57『线路54』 +#EXTINF:-1 tvg-id="55" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225634/index.m3u8$LR•IPV6•57『线路55』 +#EXTINF:-1 tvg-id="56" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226389/index.m3u8$LR•IPV6•57『线路56』 +#EXTINF:-1 tvg-id="57" tvg-name="内蒙古卫视" group-title="卫视频道",内蒙古卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227018/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ErN_hoRDwApMKnJqiNHvn9w%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•57『线路57』 +#EXTINF:-1 tvg-id="1" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226966/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E6qJH8Fd-zgCGx3P-Ce86cA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•57『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://60.16.0.216:5757/hls/32/index.m3u8$LR•IPV4•57『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://60.16.0.216:5757/hls/32/index.m3u8$LR•IPV4•57『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://101.74.28.84:9901/tsfile/live/0121_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•57『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://101.66.198.42:9901/tsfile/live/0121_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•57『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226546$LR•IPV4•57『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://z.b.bkpcp.top/m.php?id=lnws$LR•IPV4•57『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://j.x.bkpcp.top/jx/LIAONHD$LR•IPV4•57『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://iptv.huuc.edu.cn/hls/lnhd.m3u8$LR•IPV4•57『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003873468.m3u8$LR•IPV4•57『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://183.94.1.118:8801/tsfile/live/0121_1.m3u8$LR•IPV4•57『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://120.192.226.35:8009/hls/54/index.m3u8$LR•IPV4•57『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://61.138.128.226:19901/tsfile/live/0121_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•57『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://222.173.108.238:352/tsfile/live/1008_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•57『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://36.105.100.208:35455/itv/1000000005000265022.m3u8?cdn=ystenlive$LR•IPV4•57『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://iptv.0564.org:35455/itv/1000000005000265022.m3u8?cdn=ystenlive$LR•IPV4•57『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://mh0.asia:35455/itv/1000000005000265022.m3u8?cdn=ystenlive$LR•IPV4•57『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://xxx.504900.xyz:35455/itv/1000000005000265022.m3u8?cdn=ystenlive$LR•IPV4•57『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://3501776.xyz:35455/itv/1000000005000265022.m3u8?cdn=ystenlive$LR•IPV4•57『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://175.171.30.26:5111/hls/458537835/index.m3u8$LR•IPV4•57『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226546/index.m3u8$LR•IPV6•57『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226254/index.m3u8$LR•IPV6•57『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226966/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E6qJH8Fd-zgCGx3P-Ce86cA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•57『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221227141/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•57『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://[2409:8087:3428:20:500::1009]:6610/PLTV/88888888/224/3221227141/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•57『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +https://live.mxdyeah.top/live.php?id=liaoningHD$LR•IPV4•57『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226546/index.m3u8$LR•IPV4•57『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225619/index.m3u8$LR•IPV4•57『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://k.061899.xyz/m.php?id=lnws$LR•IPV4•57『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://t.061899.xyz/tl/tl.php?id=lnws$LR•IPV4•57『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://sh.lnott.top:880/dx19.m3u8$LR•IPV4•57『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://39.134.67.108/PLTV/88888888/224/3221225944/1.m3u8$LR•IPV4•57『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226546$LR•IPV4•57『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/liaoningHD/__op/default/__f/index.m3u8$LR•IPV4•57『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/liaoningHD/__op/default/__f/index.m3u8$LR•IPV4•57『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://148.135.93.213/live.php?id=辽宁卫视$LR•IPV4•57『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://home.wwang.pw:35455/itv/1000000005000265022.m3u8?cdn=ystenlive$LR•IPV4•57『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://58.57.40.22:9901/tsfile/live/1035_1.m3u8$LR•IPV4•57『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +https://piccpndks.v.kcdnvip.com/audio/liaoning_2/index.m3u8$LR•IPV4•57『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://iptv.huuc.edu.cn/hls/lnhd.m3u8$LR•IPV4•57『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://ygbh.site/php/bfgd.php?id=058$LR•IPV4•57『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +https://cc06.tv12.xyz/70.m3u8$LR•IPV4•57『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://112.27.235.94:8000/hls/47/index.m3u8$LR•IPV4•57『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://39.134.65.4/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225619/index.m3u8$LR•IPV4•57『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://mg.hmysapp.cn:177/ckmg/zb.php?id=lnws$LR•IPV4•57『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +https://zby.130519.xyz/PLTV/11/224/3221225747/index.m3u8$LR•IPV4•57『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://148.135.93.213:81/live.php?id=辽宁卫视$LR•IPV4•57『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226546$LR•IPV4•57『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://z.b.bkpcp.top/m.php?id=lnws$LR•IPV4•57『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://j.x.bkpcp.top/jx/LIAONHD$LR•IPV4•57『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://iptv.huuc.edu.cn/hls/lnhd.m3u8$LR•IPV4•57『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003873468.m3u8$LR•IPV4•57『线路52』 +#EXTINF:-1 tvg-id="53" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226546/index.m3u8$LR•IPV6•57『线路53』 +#EXTINF:-1 tvg-id="54" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226254/index.m3u8$LR•IPV6•57『线路54』 +#EXTINF:-1 tvg-id="55" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226966/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E6qJH8Fd-zgCGx3P-Ce86cA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•57『线路55』 +#EXTINF:-1 tvg-id="56" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221227141/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•57『线路56』 +#EXTINF:-1 tvg-id="57" tvg-name="辽宁卫视" group-title="卫视频道",辽宁卫视 +http://[2409:8087:3428:20:500::1009]:6610/PLTV/88888888/224/3221227141/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•57『线路57』 +#EXTINF:-1 tvg-id="1" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227003/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ESco1zinvdUYzleEkXYhIvA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•46『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://1.195.131.143:9901/tsfile/live/0112_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•46『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010110$LR•IPV4•46『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://z.b.bkpcp.top/m.php?id=nxws$LR•IPV4•46『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://j.x.bkpcp.top/jx/NXWS$LR•IPV4•46『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://goo.bkpcp.top/mg/nxws$LR•IPV4•46『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003887433.m3u8$LR•IPV4•46『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://120.192.226.35:8009/hls/52/index.m3u8$LR•IPV4•46『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://36.32.174.67:60080/newlive/live/hls/49/live.m3u8$LR•IPV4•46『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://cssbyd.imwork.net:8082/hls/45/index.m3u8$LR•IPV4•46『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://61.138.128.226:19901/tsfile/live/0112_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•46『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://36.105.100.208:35455/itv/1000000002000031451.m3u8?cdn=ystenlive$LR•IPV4•46『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://113.118.15.210:808/hls/106/index.m3u8$LR•IPV4•46『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://110.7.131.4:9901/tsfile/live/0112_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•46『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=6122&tk=23a9aca1f79f$LR•IPV4•46『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://58.19.43.46:9901/tsfile/live/1003_1.m3u8$LR•IPV4•46『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://116.117.105.51:8096/tsfile/live/0112_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•46『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/TVOD/88888888/8/3221226454/index.m3u8$LR•IPV6•46『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/8/3221226454/index.m3u8$LR•IPV6•46『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001074/index.m3u8$LR•IPV6•46『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221227254/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•46『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227003/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ESco1zinvdUYzleEkXYhIvA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•46『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +https://live.mxdyeah.top/live.php?id=ningxia$LR•IPV4•46『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225632/index.m3u8$LR•IPV4•46『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226454/index.m3u8$LR•IPV4•46『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://39.134.67.108/PLTV/88888888/224/3221226028/1.m3u8$LR•IPV4•46『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/ningxia/__op/default/__f/index.m3u8$LR•IPV4•46『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/ningxia/__op/default/__f/index.m3u8$LR•IPV4•46『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +https://hls.ningxiahuangheyun.com/live/nxws1M.m3u8"target='if'>$LR•IPV4•46『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://120.76.248.139/live/bfgd/4200000118.m3u8$LR•IPV4•46『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://home.wwang.pw:35455/itv/1000000002000031451.m3u8?cdn=ystenlive$LR•IPV4•46『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://58.57.40.22:9901/tsfile/live/1054_1.m3u8$LR•IPV4•46『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://ygbh.site/php/bfgd.php?id=118$LR•IPV4•46『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +https://cc06.tv12.xyz/96.m3u8$LR•IPV4•46『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://39.134.65.7/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225632/index.m3u8$LR•IPV4•46『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://mg.hmysapp.cn:177/ckmg/zb.php?id=nxws$LR•IPV4•46『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010110$LR•IPV4•46『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://z.b.bkpcp.top/m.php?id=nxws$LR•IPV4•46『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://j.x.bkpcp.top/jx/NXWS$LR•IPV4•46『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://goo.bkpcp.top/mg/nxws$LR•IPV4•46『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/TVOD/88888888/8/3221226454/index.m3u8$LR•IPV6•46『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003887433.m3u8$LR•IPV4•46『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/8/3221226454/index.m3u8$LR•IPV6•46『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001074/index.m3u8$LR•IPV6•46『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221227254/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•46『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="宁夏卫视" group-title="卫视频道",宁夏卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227003/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ESco1zinvdUYzleEkXYhIvA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•46『线路46』 +#EXTINF:-1 tvg-id="1" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227017/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EacviHy_ucMT27Ymf2iLtZA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•56『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://120.76.248.139/live/bfgd/4200000111.m3u8$LR•IPV4•56『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://60.16.0.216:5757/hls/43/index.m3u8$LR•IPV4•56『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://120.76.248.139/live/bfgd/4200000111.m3u8$LR•IPV4•56『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://60.16.0.216:5757/hls/43/index.m3u8$LR•IPV4•56『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://106.118.70.125:9901/tsfile/live/0140_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•56『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010111$LR•IPV4•56『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://z.b.bkpcp.top/m.php?id=qhws$LR•IPV4•56『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://j.x.bkpcp.top/jx/QHWS$LR•IPV4•56『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://goo.bkpcp.top/mg/qhws$LR•IPV4•56『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003887430.m3u8$LR•IPV4•56『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://120.192.226.35:8009/hls/58/index.m3u8$LR•IPV4•56『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://61.138.128.226:19901/tsfile/live/0140_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•56『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://36.105.100.208:35455/itv/5000000006000040015.m3u8?cdn=bestzb$LR•IPV4•56『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://iptv.0564.org:35455/itv/1000000002000013359.m3u8?cdn=ystenlive$LR•IPV4•56『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://mh0.asia:35455/itv/1000000002000013359.m3u8?cdn=ystenlive$LR•IPV4•56『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://3501776.xyz:35455/itv/1000000002000013359.m3u8?cdn=ystenlive$LR•IPV4•56『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://150.158.112.123/%E5%85%AC%E4%BC%97%E5%8F%B7~%E7%8E%89%E7%8E%89%E8%BD%AF%E4%BB%B6%E5%BA%93/mg.php?id=qhws$LR•IPV4•56『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://stream.qhbtv.com/qhws/sd/live.m3u8?_upt=f35a89681647856030$LR•IPV4•56『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://113.118.15.210:808/hls/61/index.m3u8$LR•IPV4•56『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=0872&tk=23a9aca1f79f$LR•IPV4•56『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225628/index.m3u8$LR•IPV6•56『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227017/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EacviHy_ucMT27Ymf2iLtZA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•56『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001082/index.m3u8$LR•IPV6•56『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221227119/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•56『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://[2409:8087:3428:20:500::1009]:6610/PLTV/88888888/224/3221227119/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•56『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +https://live.mxdyeah.top/live.php?id=qinghaiSD$LR•IPV4•56『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://k.061899.xyz/m.php?id=qhws$LR•IPV4•56『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://t.061899.xyz/tl/tl.php?id=qhws$LR•IPV4•56『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://39.134.67.108/PLTV/88888888/224/3221225948/1.m3u8$LR•IPV4•56『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/qinghaiSD/__op/default/__f/index.m3u8$LR•IPV4•56『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/qinghaiSD/__op/default/__f/index.m3u8$LR•IPV4•56『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://stream.qhbtv.com/qhws/sd/live.m3u8$LR•IPV4•56『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://stream.qhbtv.com/qhws/sd/live.m3u8$LR•IPV4•56『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://stream.qhbtv.com/qhws/sd/live.m3u8?_upt=63cf437e1591689484$LR•IPV4•56『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://stream.qhbtv.com/qhws/sd/live.m3u8?_upt=f35a89681647856030$LR•IPV4•56『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://148.135.93.213/live.php?id=青海卫视$LR•IPV4•56『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://home.wwang.pw:35455/itv/5000000006000040015.m3u8?cdn=bestzb$LR•IPV4•56『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://58.57.40.22:9901/tsfile/live/1057_1.m3u8$LR•IPV4•56『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://ygbh.site/php/bfgd.php?id=111$LR•IPV4•56『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +https://cc06.tv12.xyz/97.m3u8$LR•IPV4•56『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://39.134.65.76/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225628/index.m3u8$LR•IPV4•56『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://mg.hmysapp.cn:177/ckmg/zb.php?id=qhws$LR•IPV4•56『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://t.061899.xyz/tl/dq.php?id=qhws$LR•IPV4•56『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +https://zby.130519.xyz/PLTV/11/224/3221226105/index.m3u8$LR•IPV4•56『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://stream.qhbtv.com/qhws/sd/live.m3u8?_upt=f35a89681647856030$LR•IPV4•56『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010111$LR•IPV4•56『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://z.b.bkpcp.top/m.php?id=qhws$LR•IPV4•56『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://j.x.bkpcp.top/jx/QHWS$LR•IPV4•56『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://goo.bkpcp.top/mg/qhws$LR•IPV4•56『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003887430.m3u8$LR•IPV4•56『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225628/index.m3u8$LR•IPV6•56『线路52』 +#EXTINF:-1 tvg-id="53" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227017/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EacviHy_ucMT27Ymf2iLtZA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•56『线路53』 +#EXTINF:-1 tvg-id="54" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001082/index.m3u8$LR•IPV6•56『线路54』 +#EXTINF:-1 tvg-id="55" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221227119/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•56『线路55』 +#EXTINF:-1 tvg-id="56" tvg-name="青海卫视" group-title="卫视频道",青海卫视 +http://[2409:8087:3428:20:500::1009]:6610/PLTV/88888888/224/3221227119/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•56『线路56』 +#EXTINF:-1 tvg-id="1" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226957/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EjW26v5VaHGy1jQuIA-4EbA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•58『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +https://cc06.tv12.xyz/101.m3u8$LR•IPV4•58『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://zzssw01.55555.io:9901/tsfile/live/0131_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://112.27.235.94:8000/hls/34/index.m3u8$LR•IPV4•58『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +https://cc06.tv12.xyz/101.m3u8$LR•IPV4•58『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://zzssw01.55555.io:9901/tsfile/live/0131_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://112.27.235.94:8000/hls/34/index.m3u8$LR•IPV4•58『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://101.74.28.84:9901/tsfile/live/0131_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://1.195.131.143:9901/tsfile/live/0131_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://61.156.228.12:8154/tsfile/live/0131_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://l.cztvcloud.com/channels/lantian/SXshengzhou1/720p.m3u8$LR•IPV4•58『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010066$LR•IPV4•58『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://z.b.bkpcp.top/m.php?id=sdws$LR•IPV4•58『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://j.x.bkpcp.top/jx/SHANDHD$LR•IPV4•58『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://iptv.huuc.edu.cn/hls/sdhd.m3u8$LR•IPV4•58『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003873467.m3u8$LR•IPV4•58『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227234/index.m3u8$LR•IPV4•58『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://120.192.226.35:8009/hls/40/index.m3u8$LR•IPV4•58『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://61.138.128.226:19901/tsfile/live/0131_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://222.173.108.238:352/tsfile/live/0131_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://36.105.100.208:35455/itv/1000000005000265019.m3u8?cdn=ystenlive$LR•IPV4•58『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://iptv.0564.org:35455/itv/1000000005000265019.m3u8?cdn=ystenlive$LR•IPV4•58『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://mh0.asia:35455/itv/1000000005000265019.m3u8?cdn=ystenlive$LR•IPV4•58『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://xxx.504900.xyz:35455/itv/1000000005000265019.m3u8?cdn=ystenlive$LR•IPV4•58『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://3501776.xyz:35455/itv/1000000005000265019.m3u8?cdn=ystenlive$LR•IPV4•58『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://175.171.30.26:5111/hls/574828641/index.m3u8$LR•IPV4•58『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://113.118.15.210:808/hls/43/index.m3u8$LR•IPV4•58『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226456/index.m3u8$LR•IPV6•58『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226456/index.m3u8$LR•IPV6•58『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226957/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EjW26v5VaHGy1jQuIA-4EbA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•58『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226456/index.m3u8$LR•IPV4•58『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://k.061899.xyz/m.php?id=sdws$LR•IPV4•58『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://t.061899.xyz/tl/tl.php?id=sdws$LR•IPV4•58『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://39.134.67.108/PLTV/88888888/224/3221225952/1.m3u8$LR•IPV4•58『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://39.134.67.108/PLTV/88888888/224/3221226034/1.m3u8$LR•IPV4•58『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226456$LR•IPV4•58『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://148.135.93.213/live.php?id=山东卫视$LR•IPV4•58『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://home.wwang.pw:35455/itv/1000000005000265019.m3u8?cdn=ystenlive$LR•IPV4•58『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://223.105.252.8/PLTV/4/224/3221227448/index.m3u8$LR•IPV4•58『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://iptv.huuc.edu.cn/hls/sdhd.m3u8$LR•IPV4•58『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://ygbh.site/php/bfgd.php?id=099$LR•IPV4•58『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +https://cc06.tv12.xyz/101.m3u8$LR•IPV4•58『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://112.27.235.94:8000/hls/34/index.m3u8$LR•IPV4•58『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://39.135.133.144/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226456/index.m3u8$LR•IPV4•58『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://mg.hmysapp.cn:177/ckmg/zb.php?id=sdws$LR•IPV4•58『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://t.061899.xyz/tl/dq.php?id=sdws$LR•IPV4•58『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +https://zby.130519.xyz/PLTV/11/224/3221225733/index.m3u8$LR•IPV4•58『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://148.135.93.213:81/live.php?id=山东卫视$LR•IPV4•58『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010066$LR•IPV4•58『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://z.b.bkpcp.top/m.php?id=sdws$LR•IPV4•58『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://j.x.bkpcp.top/jx/SHANDHD$LR•IPV4•58『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://l.cztvcloud.com/channels/lantian/SXshengzhou1/720p.m3u8$LR•IPV4•58『线路52』 +#EXTINF:-1 tvg-id="53" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://iptv.huuc.edu.cn/hls/sdhd.m3u8$LR•IPV4•58『线路53』 +#EXTINF:-1 tvg-id="54" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003873467.m3u8$LR•IPV4•58『线路54』 +#EXTINF:-1 tvg-id="55" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226456/index.m3u8$LR•IPV6•58『线路55』 +#EXTINF:-1 tvg-id="56" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226456/index.m3u8$LR•IPV6•58『线路56』 +#EXTINF:-1 tvg-id="57" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226957/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EjW26v5VaHGy1jQuIA-4EbA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•58『线路57』 +#EXTINF:-1 tvg-id="58" tvg-name="山东卫视" group-title="卫视频道",山东卫视 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227234/index.m3u8$LR•IPV4•58『线路58』 +#EXTINF:-1 tvg-id="1" 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•69『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://112.27.235.94:8000/hls/42/index.m3u8$LR•IPV4•69『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://60.16.0.216:5757/hls/34/index.m3u8$LR•IPV4•69『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://112.27.235.94:8000/hls/42/index.m3u8$LR•IPV4•69『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://60.16.0.216:5757/hls/34/index.m3u8$LR•IPV4•69『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://101.74.28.84:9901/tsfile/live/0135_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•69『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://106.118.70.125:9901/tsfile/live/0135_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•69『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://61.156.228.12:8154/tsfile/live/0135_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•69『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226459$LR•IPV4•69『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://j.x.bkpcp.top/jx/TIANJHD$LR•IPV4•69『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://iptv.huuc.edu.cn/hls/tjhd.m3u8$LR•IPV4•69『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003873466.m3u8$LR•IPV4•69『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://yc.myds.me:35455/itv/5000000004000006827.m3u8?cdn=bestzb$LR•IPV4•69『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://120.192.226.35:8009/hls/44/index.m3u8$LR•IPV4•69『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://123.182.60.29:9002/hls/23/index.m3u8$LR•IPV4•69『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://36.32.174.67:60080/newlive/live/hls/26/live.m3u8$LR•IPV4•69『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://61.138.128.226:19901/tsfile/live/0135_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•69『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://222.173.108.238:352/tsfile/live/0135_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•69『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://36.105.100.208:35455/itv/1000000005000265026.m3u8?cdn=ystenlive$LR•IPV4•69『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://iptv.0564.org:35455/itv/1000000005000265026.m3u8?cdn=ystenlive$LR•IPV4•69『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://mh0.asia:35455/itv/1000000005000265026.m3u8?cdn=ystenlive$LR•IPV4•69『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://xxx.504900.xyz:35455/itv/1000000005000265026.m3u8?cdn=ystenlive$LR•IPV4•69『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://3501776.xyz:35455/itv/1000000005000265026.m3u8?cdn=ystenlive$LR•IPV4•69『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://[2409:8087:1a01:df::4030]:80/TVOD/88888888/224/3221225972/main.m3u8$LR•IPV6•69『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226459/index.m3u8$LR•IPV6•69『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226459/index.m3u8$LR•IPV6•69『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001036/index.m3u8$LR•IPV6•69『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://[2409:8087:2001:20:2800:0:df6e:eb11]:80/ott.mobaibox.com/PLTV/4/224/3221227488/index.m3u8$LR•IPV6•69『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +https://live.mxdyeah.top/live.php?id=tianjinHD$LR•IPV4•69『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225740/index.m3u8$LR•IPV4•69『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226459/index.m3u8$LR•IPV4•69『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://k.061899.xyz/m.php?id=tjws$LR•IPV4•69『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://t.061899.xyz/tl/tl.php?id=tjws$LR•IPV4•69『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://sh.lnott.top:880/dx30.m3u8$LR•IPV4•69『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://39.134.67.108/PLTV/88888888/224/3221225972/1.m3u8$LR•IPV4•69『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://39.134.67.108/PLTV/88888888/224/3221226003/1.m3u8$LR•IPV4•69『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226459$LR•IPV4•69『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/tianjinHD/__op/default/__f/index.m3u8$LR•IPV4•69『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/tianjinHD/__op/default/__f/index.m3u8$LR•IPV4•69『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://148.135.93.213/live.php?id=天津卫视$LR•IPV4•69『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://home.wwang.pw:35455/itv/1000000005000265026.m3u8?cdn=ystenlive$LR•IPV4•69『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://58.57.40.22:9901/tsfile/live/1034_1.m3u8$LR•IPV4•69『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +https://piccpndks.v.kcdnvip.com/audio/tianjin_2/index.m3u8$LR•IPV4•69『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://iptv.huuc.edu.cn/hls/tjhd.m3u8$LR•IPV4•69『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://ygbh.site/php/bfgd.php?id=084$LR•IPV4•69『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://112.27.235.94:8000/hls/42/index.m3u8$LR•IPV4•69『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://39.135.135.14/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225740/index.m3u8$LR•IPV4•69『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +https://zby.130519.xyz/PLTV/11/224/3221225742/index.m3u8$LR•IPV4•69『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://148.135.93.213:81/live.php?id=天津卫视$LR•IPV4•69『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226459$LR•IPV4•69『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://j.x.bkpcp.top/jx/TIANJHD$LR•IPV4•69『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://iptv.huuc.edu.cn/hls/tjhd.m3u8$LR•IPV4•69『线路52』 +#EXTINF:-1 tvg-id="53" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://[2409:8087:1a01:df::4030]:80/TVOD/88888888/224/3221225972/main.m3u8$LR•IPV6•69『线路53』 +#EXTINF:-1 tvg-id="54" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003873466.m3u8$LR•IPV4•69『线路54』 +#EXTINF:-1 tvg-id="55" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226459/index.m3u8$LR•IPV6•69『线路55』 +#EXTINF:-1 tvg-id="56" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226459/index.m3u8$LR•IPV6•69『线路56』 +#EXTINF:-1 tvg-id="57" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001036/index.m3u8$LR•IPV6•69『线路57』 +#EXTINF:-1 tvg-id="58" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://[2409:8087:2001:20:2800:0:df6e:eb11]:80/ott.mobaibox.com/PLTV/4/224/3221227488/index.m3u8$LR•IPV6•69『线路58』 +#EXTINF:-1 tvg-id="59" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://yc.myds.me:35455/itv/5000000004000006827.m3u8?cdn=bestzb$LR•IPV4•69『线路59』 +#EXTINF:-1 tvg-id="60" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226459$LR•IPV4•69『线路60』 +#EXTINF:-1 tvg-id="61" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://j.x.bkpcp.top/jx/TIANJHD$LR•IPV4•69『线路61』 +#EXTINF:-1 tvg-id="62" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://iptv.huuc.edu.cn/hls/tjhd.m3u8$LR•IPV4•69『线路62』 +#EXTINF:-1 tvg-id="63" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://[2409:8087:1a01:df::4030]:80/TVOD/88888888/224/3221225972/main.m3u8$LR•IPV6•69『线路63』 +#EXTINF:-1 tvg-id="64" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003873466.m3u8$LR•IPV4•69『线路64』 +#EXTINF:-1 tvg-id="65" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226459/index.m3u8$LR•IPV6•69『线路65』 +#EXTINF:-1 tvg-id="66" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226459/index.m3u8$LR•IPV6•69『线路66』 +#EXTINF:-1 tvg-id="67" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001036/index.m3u8$LR•IPV6•69『线路67』 +#EXTINF:-1 tvg-id="68" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://[2409:8087:2001:20:2800:0:df6e:eb11]:80/ott.mobaibox.com/PLTV/4/224/3221227488/index.m3u8$LR•IPV6•69『线路68』 +#EXTINF:-1 tvg-id="69" tvg-name="天津卫视" group-title="卫视频道",天津卫视 +http://yc.myds.me:35455/itv/5000000004000006827.m3u8?cdn=bestzb$LR•IPV4•69『线路69』 +#EXTINF:-1 tvg-id="1" 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•63『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://120.76.248.139/live/bfgd/4200000473.m3u8$LR•IPV4•63『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://nn.7x9d.cn/地方台8563/海南.php?id=hnws$LR•IPV4•63『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://nn.7x9d.cn/地方台8563/海南.php?id=hnws&?key=txiptv$LR•IPV4•63『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://genglei.8866.org:9901/tsfile/live/1026_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•63『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://120.76.248.139/live/bfgd/4200000473.m3u8$LR•IPV4•63『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://nn.7x9d.cn/地方台8563/海南.php?id=hnws$LR•IPV4•63『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://nn.7x9d.cn/地方台8563/海南.php?id=hnws&?key=txiptv$LR•IPV4•63『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://genglei.8866.org:9901/tsfile/live/1026_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•63『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://106.118.70.125:9901/tsfile/live/1019_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•63『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010083$LR•IPV4•63『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://z.b.bkpcp.top/m.php?id=hinws$LR•IPV4•63『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://j.x.bkpcp.top/jx/HAINHD$LR•IPV4•63『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://goo.bkpcp.top/mg/hinws$LR•IPV4•63『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000004796877.m3u8$LR•IPV4•63『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://113.56.95.69:53765/tsfile/live/1019_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•63『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://36.32.174.67:60080/newlive/live/hls/46/live.m3u8$LR•IPV4•63『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://cssbyd.imwork.net:8082/hls/31/index.m3u8$LR•IPV4•63『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://61.138.128.226:19901/tsfile/live/1015_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•63『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://36.105.100.208:35455/itv/5000000004000006211.m3u8?cdn=bestzb$LR•IPV4•63『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://113.118.15.210:808/hls/124/index.m3u8$LR•IPV4•63『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=4960&tk=23a9aca1f79f$LR•IPV4•63『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +https://www.yangshipin.cn/tv/home?pid=600002506$LR•IPV4•63『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://58.221.214.82:9901/tsfile/live/0016_2.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•63『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://139.129.231.228/rtp/239.21.2.14:5002$LR•IPV4•63『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226465/index.m3u8$LR•IPV6•63『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226465/index.m3u8$LR•IPV6•63『线路27』 +#EXTINF:-1 tvg-id="28" 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•63『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://[2409:8087:2001:20:2800:0:df6e:eb09]:80/ott.mobaibox.com/PLTV/4/224/3221228139/index.m3u8$LR•IPV6•63『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001183/index.m3u8$LR•IPV6•63『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +https://live.mxdyeah.top/live.php?id=hainanSD$LR•IPV4•63『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226465/index.m3u8$LR•IPV4•63『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://k.061899.xyz/m.php?id=hinws$LR•IPV4•63『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://t.061899.xyz/tl/tl.php?id=hinws$LR•IPV4•63『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://sh.lnott.top:880/dx58.m3u8$LR•IPV4•63『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://39.134.67.108/PLTV/88888888/224/3221226026/1.m3u8$LR•IPV4•63『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226465$LR•IPV4•63『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/hainanSD/__op/default/__f/index.m3u8$LR•IPV4•63『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/hainanSD/__op/default/__f/index.m3u8$LR•IPV4•63『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +https://live3.hnntv.cn/srs/tv/lywsgq.m3u8$LR•IPV4•63『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://148.135.93.213/live.php?id=海南卫视$LR•IPV4•63『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://120.76.248.139/live/bfgd/4200000473.m3u8$LR•IPV4•63『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://nn.7x9d.cn/地方台8563/海南.php?id=hnws$LR•IPV4•63『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://home.wwang.pw:35455/itv/5000000004000006211.m3u8?cdn=bestzb$LR•IPV4•63『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://58.57.40.22:9901/tsfile/live/1000_1.m3u8$LR•IPV4•63『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://ygbh.site/php/bfgd.php?id=473$LR•IPV4•63『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +https://cc06.tv12.xyz/93.m3u8$LR•IPV4•63『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://39.134.65.75/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225639/index.m3u8$LR•IPV4•63『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://mg.hmysapp.cn:177/ckmg/zb.php?id=hinws$LR•IPV4•63『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://t.061899.xyz/tl/dq.php?id=hinws$LR•IPV4•63『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +https://zby.130519.xyz/PLTV/11/224/3221226154/index.m3u8$LR•IPV4•63『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://nn.7x9d.cn/地方台8563/海南.php?id=hnws$LR•IPV4•63『线路52』 +#EXTINF:-1 tvg-id="53" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://148.135.93.213:81/live.php?id=海南卫视$LR•IPV4•63『线路53』 +#EXTINF:-1 tvg-id="54" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010083$LR•IPV4•63『线路54』 +#EXTINF:-1 tvg-id="55" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://z.b.bkpcp.top/m.php?id=hinws$LR•IPV4•63『线路55』 +#EXTINF:-1 tvg-id="56" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://j.x.bkpcp.top/jx/HAINHD$LR•IPV4•63『线路56』 +#EXTINF:-1 tvg-id="57" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://goo.bkpcp.top/mg/hinws$LR•IPV4•63『线路57』 +#EXTINF:-1 tvg-id="58" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000004796877.m3u8$LR•IPV4•63『线路58』 +#EXTINF:-1 tvg-id="59" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226465/index.m3u8$LR•IPV6•63『线路59』 +#EXTINF:-1 tvg-id="60" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226465/index.m3u8$LR•IPV6•63『线路60』 +#EXTINF:-1 tvg-id="61" 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•63『线路61』 +#EXTINF:-1 tvg-id="62" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://[2409:8087:2001:20:2800:0:df6e:eb09]:80/ott.mobaibox.com/PLTV/4/224/3221228139/index.m3u8$LR•IPV6•63『线路62』 +#EXTINF:-1 tvg-id="63" tvg-name="海南卫视" group-title="卫视频道",海南卫视 +http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001183/index.m3u8$LR•IPV6•63『线路63』 +#EXTINF:-1 tvg-id="1" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227011/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ExAUu61iVvo_xYbANWJhgXw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•56『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://218.84.12.186:8001/hls/main/playlist.m3u8?zxinjd;http://218.84.12.186:8001/hls/main/playlist.m3u8zxinjd$LR•IPV4•56『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://218.84.12.186:8001/hls/main/playlist.m3u8?zxinjd;http://218.84.12.186:8001/hls/main/playlist.m3u8zxinjd$LR•IPV4•56『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://1.195.131.143:9901/tsfile/live/0110_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•56『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221225635$LR•IPV4•56『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://z.b.bkpcp.top/m.php?id=xjws$LR•IPV4•56『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://j.x.bkpcp.top/jx/XJWS$LR•IPV4•56『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://goo.bkpcp.top/mg/xjws$LR•IPV4•56『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003887448.m3u8$LR•IPV4•56『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://120.192.226.35:8009/hls/61/index.m3u8$LR•IPV4•56『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://36.32.174.67:60080/newlive/live/hls/47/live.m3u8$LR•IPV4•56『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://61.138.128.226:19901/tsfile/live/0110_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•56『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://36.105.100.208:35455/itv/1000000002000029441.m3u8?cdn=ystenlive$LR•IPV4•56『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://113.118.15.210:808/hls/65/index.m3u8$LR•IPV4•56『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://110.7.131.4:9901/tsfile/live/0110_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•56『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=9483&tk=23a9aca1f79f$LR•IPV4•56『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://139.129.231.228:50060/rtp/239.21.1.45:5002$LR•IPV4•56『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://111.61.236.247:9081/hls/53/index.m3u8$LR•IPV4•56『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://139.196.151.191:2051/rtp/239.45.1.116:5140$LR•IPV4•56『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225635/index.m3u8$LR•IPV6•56『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://[2409:8087:2001:20:2800:0:df6e:eb0b]/wh7f454c46tw993550557_162751766/ott.mobaibox.com/PLTV/3/224/3221228290/index.m3u8?icpid=3&RTS=1668604377&from=40&popid=40&hms_devid=2038&prioritypopid=40&vqe=3$LR•IPV6•56『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226460/index.m3u8$LR•IPV6•56『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001065/index.m3u8$LR•IPV6•56『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221227248/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•56『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://39.134.67.108/PLTV/88888888/224/3221225999/1.m3u8$LR•IPV4•56『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221225635$LR•IPV4•56『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://101.35.240.114:88/live.php?id=新疆卫视$LR•IPV4•56『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://home.wwang.pw:35455/itv/1000000002000029441.m3u8?cdn=ystenlive$LR•IPV4•56『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://58.57.40.22:9901/tsfile/live/1055_1.m3u8$LR•IPV4•56『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://ygbh.site/php/bfgd.php?id=150$LR•IPV4•56『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +https://cc06.tv12.xyz/109.m3u8$LR•IPV4•56『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://39.135.133.147/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226460/index.m3u8$LR•IPV4•56『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://mg.hmysapp.cn:177/ckmg/zb.php?id=xjws$LR•IPV4•56『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://t.061899.xyz/tl/dq.php?id=xjws$LR•IPV4•56『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://cc2022.ifengli.com:2000/live/xjws-sd/1500.m3u8?innersid=2025$LR•IPV4•56『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://218.84.12.186:8001/hls/main/playlist.m3u8?zxinjd;http://218.84.12.186:8001/hls/main/playlist.m3u8zxinjd$LR•IPV4•56『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221225635$LR•IPV4•56『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://z.b.bkpcp.top/m.php?id=xjws$LR•IPV4•56『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://j.x.bkpcp.top/jx/XJWS$LR•IPV4•56『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://goo.bkpcp.top/mg/xjws$LR•IPV4•56『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003887448.m3u8$LR•IPV4•56『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225635/index.m3u8$LR•IPV6•56『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://[2409:8087:2001:20:2800:0:df6e:eb0b]/wh7f454c46tw993550557_162751766/ott.mobaibox.com/PLTV/3/224/3221228290/index.m3u8?icpid=3&RTS=1668604377&from=40&popid=40&hms_devid=2038&prioritypopid=40&vqe=3$LR•IPV6•56『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226460/index.m3u8$LR•IPV6•56『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001065/index.m3u8$LR•IPV6•56『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221227248/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•56『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221225635$LR•IPV4•56『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://z.b.bkpcp.top/m.php?id=xjws$LR•IPV4•56『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://j.x.bkpcp.top/jx/XJWS$LR•IPV4•56『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://goo.bkpcp.top/mg/xjws$LR•IPV4•56『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003887448.m3u8$LR•IPV4•56『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225635/index.m3u8$LR•IPV6•56『线路52』 +#EXTINF:-1 tvg-id="53" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://[2409:8087:2001:20:2800:0:df6e:eb0b]/wh7f454c46tw993550557_162751766/ott.mobaibox.com/PLTV/3/224/3221228290/index.m3u8?icpid=3&RTS=1668604377&from=40&popid=40&hms_devid=2038&prioritypopid=40&vqe=3$LR•IPV6•56『线路53』 +#EXTINF:-1 tvg-id="54" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226460/index.m3u8$LR•IPV6•56『线路54』 +#EXTINF:-1 tvg-id="55" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001065/index.m3u8$LR•IPV6•56『线路55』 +#EXTINF:-1 tvg-id="56" tvg-name="新疆卫视" group-title="卫视频道",新疆卫视 +http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221227248/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•56『线路56』 +#EXTINF:-1 tvg-id="1" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227028/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EGfQPqRNVeBjTMsZ48qu0SA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•56『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +https://cc06.tv12.xyz/114.m3u8$LR•IPV4•56『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://112.27.235.94:8000/hls/40/index.m3u8$LR•IPV4•56『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +https://cc06.tv12.xyz/114.m3u8$LR•IPV4•56『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://112.27.235.94:8000/hls/40/index.m3u8$LR•IPV4•56『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://1.195.131.143:9901/tsfile/live/0119_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•56『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://101.66.198.42:9901/tsfile/live/0119_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•56『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://223.167.245.215:8001/rtp/239.45.0.4:5140$LR•IPV4•56『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226444$LR•IPV4•56『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://z.b.bkpcp.top/m.php?id=ynws$LR•IPV4•56『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://goo.bkpcp.top/mg/ynws$LR•IPV4•56『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003887453.m3u8$LR•IPV4•56『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://120.192.226.35:8009/hls/56/index.m3u8$LR•IPV4•56『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://123.182.60.29:9002/hls/33/index.m3u8$LR•IPV4•56『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://36.32.174.67:60080/newlive/live/hls/45/live.m3u8$LR•IPV4•56『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://cssbyd.imwork.net:8082/hls/36/index.m3u8$LR•IPV4•56『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://61.138.128.226:19901/tsfile/live/0119_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•56『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://36.105.100.208:35455/itv/5000000011000031120.m3u8?cdn=bestzb$LR•IPV4•56『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://113.118.15.210:808/hls/52/index.m3u8$LR•IPV4•56『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://110.7.131.4:9901/tsfile/live/0119_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•56『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=2067&tk=23a9aca1f79f$LR•IPV4•56『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://116.117.105.51:8096/tsfile/live/0119_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•56『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226444/index.m3u8$LR•IPV6•56『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227028/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EGfQPqRNVeBjTMsZ48qu0SA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•56『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001223/index.m3u8$LR•IPV6•56『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://[2409:8087:4402:20:1:1216:401:14]/iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226660/index.m3u8$LR•IPV6•56『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221227181/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•56『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +https://live.mxdyeah.top/live.php?id=yunnanSD$LR•IPV4•56『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://39.134.67.108/PLTV/88888888/224/3221225957/1.m3u8$LR•IPV4•56『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/yunnanSD/__op/default/__f/index.m3u8$LR•IPV4•56『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/yunnanSD/__op/default/__f/index.m3u8$LR•IPV4•56『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://tvlive.ynradio.com/live/yunnanweishi/chunks.m3u8$LR•IPV4•56『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://tvlive.ynradio.com/live/yunnanweishi/chunks.m3u8$LR•IPV4•56『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://nn.7x9d.cn/xzc2.php?ua=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNi4xOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTA2LjAuMC4wIFNhZmFyaS81MzcuMzY=&hls=aHR0cDovL3d3dy5kc2suY2MvcGhwL3N4Z2QucGhwP2lkPXlud3M=$LR•IPV4•56『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://home.wwang.pw:35455/itv/5000000011000031120.m3u8?cdn=bestzb$LR•IPV4•56『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://58.57.40.22:9901/tsfile/live/1047_1.m3u8$LR•IPV4•56『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://p2.ytelc.com/xgplayer.php?id=https://hwapi.yntv.net/ew265l/z1z6s5.m3u8$LR•IPV4•56『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://ygbh.site/php/bfgd.php?id=115$LR•IPV4•56『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +https://cc06.tv12.xyz/114.m3u8$LR•IPV4•56『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://112.27.235.94:8000/hls/40/index.m3u8$LR•IPV4•56『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://39.135.133.180/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226444/index.m3u8$LR•IPV4•56『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://mg.hmysapp.cn:177/ckmg/zb.php?id=ynws$LR•IPV4•56『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://t.061899.xyz/tl/dq.php?id=ynws$LR•IPV4•56『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +https://zby.130519.xyz/PLTV/11/224/3221226109/index.m3u8$LR•IPV4•56『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://cc2022.ifengli.com:2000/live/ynws-hd/2500.m3u8?innersid=2025$LR•IPV4•56『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://223.167.245.215:8001/rtp/239.45.0.4:5140$LR•IPV4•56『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226444$LR•IPV4•56『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://z.b.bkpcp.top/m.php?id=ynws$LR•IPV4•56『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://goo.bkpcp.top/mg/ynws$LR•IPV4•56『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003887453.m3u8$LR•IPV4•56『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226444/index.m3u8$LR•IPV6•56『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227028/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EGfQPqRNVeBjTMsZ48qu0SA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•56『线路52』 +#EXTINF:-1 tvg-id="53" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001223/index.m3u8$LR•IPV6•56『线路53』 +#EXTINF:-1 tvg-id="54" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://[2409:8087:4402:20:1:1216:401:14]/iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226660/index.m3u8$LR•IPV6•56『线路54』 +#EXTINF:-1 tvg-id="55" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221227181/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•56『线路55』 +#EXTINF:-1 tvg-id="56" tvg-name="云南卫视" group-title="卫视频道",云南卫视 +http://[2409:8087:3428:20:500::1009]:6610/PLTV/88888888/224/3221225853/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•56『线路56』 +#EXTINF:-1 tvg-id="1" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227033/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EdeTB7OZ9G_VNJk5C3t96fQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•54『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://php.jdshipin.com/xztv.php?id=ws$LR•IPV4•54『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://php.jdshipin.com:8880/xztv.php?id=ws$LR•IPV4•54『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://php.jdshipin.com/xztv.php?id=ws$LR•IPV4•54『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://php.jdshipin.com:8880/xztv.php?id=ws$LR•IPV4•54『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221225638$LR•IPV4•54『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://z.b.bkpcp.top/m.php?id=xzws$LR•IPV4•54『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://goo.bkpcp.top/mg/xzws$LR•IPV4•54『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003887434.m3u8$LR•IPV4•54『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +https://tv.vtibet.cn/live/h701F9MpxzPDyE.m3u8?secret=4eca0fb428c7390f0e7cdee6a0044c78&time=6817e4bb$LR•IPV4•54『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226212/1.m3u8$LR•IPV4•54『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://120.192.226.35:8009/hls/59/index.m3u8$LR•IPV4•54『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://36.32.174.67:60080/newlive/live/hls/48/live.m3u8$LR•IPV4•54『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://cssbyd.imwork.net:8082/hls/46/index.m3u8$LR•IPV4•54『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://61.138.128.226:19901/tsfile/live/0111_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•54『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://36.105.100.208:35455/itv/6603041244077933770.m3u8?cdn=ystenlive$LR•IPV4•54『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://113.118.15.210:808/hls/64/index.m3u8$LR•IPV4•54『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=0854&tk=23a9aca1f79f$LR•IPV4•54『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://120.238.94.10:9901/tsfile/live/1077_1.m3u8$LR•IPV4•54『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://139.129.231.228:50060/rtp/239.21.1.46:5002$LR•IPV4•54『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://111.61.236.247:9081/hls/52/index.m3u8$LR•IPV4•54『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001072/index.m3u8$LR•IPV6•54『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221226847/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•54『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://[2409:8087:3428:20:500::1009]:6610/PLTV/88888888/224/3221226847/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•54『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227033/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EdeTB7OZ9G_VNJk5C3t96fQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•54『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +https://live.mxdyeah.top/live.php?id=xizangSD$LR•IPV4•54『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225638/index.m3u8$LR•IPV4•54『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226433/index.m3u8$LR•IPV4•54『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://k.061899.xyz/m.php?id=xzws$LR•IPV4•54『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://t.061899.xyz/tl/tl.php?id=xzws$LR•IPV4•54『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://39.134.67.108/PLTV/88888888/224/3221225951/1.m3u8$LR•IPV4•54『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221225638$LR•IPV4•54『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/xizangSD/__op/default/__f/index.m3u8$LR•IPV4•54『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/xizangSD/__op/default/__f/index.m3u8$LR•IPV4•54『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://101.35.240.114:88/live.php?id=西藏卫视$LR•IPV4•54『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://home.wwang.pw:35455/itv/6603041244077933770.m3u8?cdn=ystenlive$LR•IPV4•54『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +https://cc06.tv12.xyz/112.m3u8$LR•IPV4•54『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://ygbh.site/php/bfgd.php?id=121$LR•IPV4•54『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +https://cc06.tv12.xyz/112.m3u8$LR•IPV4•54『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://39.134.65.72/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225638/index.m3u8$LR•IPV4•54『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://mg.hmysapp.cn:177/ckmg/zb.php?id=xzws$LR•IPV4•54『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://t.061899.xyz/tl/dq.php?id=xzws$LR•IPV4•54『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://php.jdshipin.com:8880/xztv.php?id=ws$LR•IPV4•54『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://148.135.93.213:81/live.php?id=西藏卫视$LR•IPV4•54『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221225638$LR•IPV4•54『线路45』 +#EXTINF:-1 tvg-id="46" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://z.b.bkpcp.top/m.php?id=xzws$LR•IPV4•54『线路46』 +#EXTINF:-1 tvg-id="47" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://goo.bkpcp.top/mg/xzws$LR•IPV4•54『线路47』 +#EXTINF:-1 tvg-id="48" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003887434.m3u8$LR•IPV4•54『线路48』 +#EXTINF:-1 tvg-id="49" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +https://tv.vtibet.cn/live/h701F9MpxzPDyE.m3u8?secret=4eca0fb428c7390f0e7cdee6a0044c78&time=6817e4bb$LR•IPV4•54『线路49』 +#EXTINF:-1 tvg-id="50" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001072/index.m3u8$LR•IPV6•54『线路50』 +#EXTINF:-1 tvg-id="51" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221226847/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•54『线路51』 +#EXTINF:-1 tvg-id="52" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://[2409:8087:3428:20:500::1009]:6610/PLTV/88888888/224/3221226847/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•54『线路52』 +#EXTINF:-1 tvg-id="53" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227033/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EdeTB7OZ9G_VNJk5C3t96fQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•54『线路53』 +#EXTINF:-1 tvg-id="54" tvg-name="西藏卫视" group-title="卫视频道",西藏卫视 +http://dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226212/1.m3u8$LR•IPV4•54『线路54』 +#EXTINF:-1 tvg-id="1" tvg-name="海峡卫视" group-title="卫视频道",海峡卫视 +http://8.138.7.223/tv/hxws.m3u8$LR•IPV4•5『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="海峡卫视" group-title="卫视频道",海峡卫视 +http://8.138.7.223/tv/hxws.m3u8$LR•IPV4•5『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="海峡卫视" group-title="卫视频道",海峡卫视 +http://mg.hmysapp.cn:177/ckmg/zb.php?id=hxws$LR•IPV4•5『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="海峡卫视" group-title="卫视频道",海峡卫视 +http://t.061899.xyz/tl/dq.php?id=hxws$LR•IPV4•5『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="海峡卫视" group-title="卫视频道",海峡卫视 +http://8.138.7.223/tv/hxws.m3u8$LR•IPV4•5『线路5』 +#EXTINF:-1 tvg-id="1" tvg-name="兵团卫视" group-title="卫视频道",兵团卫视 +http://liveout.btzx.com.cn/62ds9e/yil08g.m3u8$LR•IPV4•25『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="兵团卫视" group-title="卫视频道",兵团卫视 +http://liveout.btzx.com.cn/62ds9e/yil08g.m3u8?mkey=txiptv$LR•IPV4•25『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="兵团卫视" group-title="卫视频道",兵团卫视 +http://8.138.7.223/tv/btws.m3u8$LR•IPV4•25『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="兵团卫视" group-title="卫视频道",兵团卫视 +http://liveout.btzx.com.cn/62ds9e/yil08g.m3u8?u8key=txiptv$LR•IPV4•25『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="兵团卫视" group-title="卫视频道",兵团卫视 +https://liveout.btzx.com.cn/62ds9e/yil08g.m3u8$LR•IPV4•25『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="兵团卫视" group-title="卫视频道",兵团卫视 +http://liveout.btzx.com.cn/62ds9e/yil08g.m3u8$LR•IPV4•25『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="兵团卫视" group-title="卫视频道",兵团卫视 +http://liveout.btzx.com.cn/62ds9e/yil08g.m3u8?mkey=txiptv$LR•IPV4•25『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="兵团卫视" group-title="卫视频道",兵团卫视 +http://8.138.7.223/tv/btws.m3u8$LR•IPV4•25『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="兵团卫视" group-title="卫视频道",兵团卫视 +http://liveout.btzx.com.cn/62ds9e/yil08g.m3u8?u8key=txiptv$LR•IPV4•25『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="兵团卫视" group-title="卫视频道",兵团卫视 +https://liveout.btzx.com.cn/62ds9e/yil08g.m3u8$LR•IPV4•25『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="兵团卫视" group-title="卫视频道",兵团卫视 +https://live.mxdyeah.top/live.php?id=bingtuanSD$LR•IPV4•25『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="兵团卫视" group-title="卫视频道",兵团卫视 +http://k.061899.xyz/m.php?id=btws$LR•IPV4•25『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="兵团卫视" group-title="卫视频道",兵团卫视 +http://t.061899.xyz/tl/tl.php?id=btws$LR•IPV4•25『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="兵团卫视" group-title="卫视频道",兵团卫视 +http://39.134.67.108/PLTV/88888888/224/3221226005/1.m3u8$LR•IPV4•25『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="兵团卫视" group-title="卫视频道",兵团卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221226439$LR•IPV4•25『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="兵团卫视" group-title="卫视频道",兵团卫视 +http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/bingtuanSD/__op/default/__f/index.m3u8$LR•IPV4•25『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="兵团卫视" group-title="卫视频道",兵团卫视 +http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/bingtuanSD/__op/default/__f/index.m3u8$LR•IPV4•25『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="兵团卫视" group-title="卫视频道",兵团卫视 +http://mobilelive-ds.ysp.cctv.cn/ysp/2022606701.m3u8$LR•IPV4•25『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="兵团卫视" group-title="卫视频道",兵团卫视 +http://liveout.btzx.com.cn/62ds9e/yil08g.m3u8$LR•IPV4•25『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="兵团卫视" group-title="卫视频道",兵团卫视 +http://home.wwang.pw:35455/itv/1000000005000266005.m3u8?cdn=ystenlive$LR•IPV4•25『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="兵团卫视" group-title="卫视频道",兵团卫视 +http://liveout.btzx.com.cn/62ds9e/yil08g.m3u8$LR•IPV4•25『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="兵团卫视" group-title="卫视频道",兵团卫视 +http://ygbh.site/php/bfgd.php?id=124$LR•IPV4•25『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="兵团卫视" group-title="卫视频道",兵团卫视 +https://cc06.tv12.xyz/30.m3u8$LR•IPV4•25『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="兵团卫视" group-title="卫视频道",兵团卫视 +http://39.135.133.178/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226439/index.m3u8$LR•IPV4•25『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="兵团卫视" group-title="卫视频道",兵团卫视 +https://liveout.btzx.com.cn/62ds9e/yil08g.m3u8$LR•IPV4•25『线路25』 +#EXTINF:-1 tvg-id="1" tvg-name="黄河卫视" group-title="卫视频道",黄河卫视 +http://liveflash.sxrtv.com/live/huanghe.m3u8?sub_m3u8=true&edge_slice=true$LR•IPV4 +#EXTINF:-1 tvg-id="1" tvg-name="安多卫视" group-title="卫视频道",安多卫视 +https://liveout.xntv.tv/a65jur/90p2i1.m3u8?zqinghd$LR•IPV4•22『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="安多卫视" group-title="卫视频道",安多卫视 +https://liveout.xntv.tv/a65jur/96iln2.m3u8$LR•IPV4•22『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="安多卫视" group-title="卫视频道",安多卫视 +https://liveout.xntv.tv/a65jur/90p2i1.m3u8?zqinghd$LR•IPV4•22『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="安多卫视" group-title="卫视频道",安多卫视 +https://liveout.xntv.tv/a65jur/96iln2.m3u8$LR•IPV4•22『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="安多卫视" group-title="卫视频道",安多卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221225659$LR•IPV4•22『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="安多卫视" group-title="卫视频道",安多卫视 +rtmp://liveout.xntv.tv/a65jur/96iln2$LR•IPV4•22『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="安多卫视" group-title="卫视频道",安多卫视 +https://stream1.freetv.fun/52d0df257c5c3cec42f2ae19268dbbc261256ff391b27bd83553bea941d0c186.m3u8$LR•IPV4•22『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="安多卫视" group-title="卫视频道",安多卫视 +http://36.105.100.208:35455/itv/1000000005000266001.m3u8?cdn=ystenlive$LR•IPV4•22『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="安多卫视" group-title="卫视频道",安多卫视 +http://stream.qhbtv.com/adws/playlist.m3u8?_upt=d60823ce1718441050$LR•IPV4•22『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="安多卫视" group-title="卫视频道",安多卫视 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=8105&tk=2aca1ad9a849$LR•IPV4•22『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="安多卫视" group-title="卫视频道",安多卫视 +http://[2409:8087:1a0b:df::4007]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225659/index.m3u8$LR•IPV6•22『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="安多卫视" group-title="卫视频道",安多卫视 +http://stream.qhbtv.com/adws/sd/live.m3u8$LR•IPV4•22『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="安多卫视" group-title="卫视频道",安多卫视 +http://home.wwang.pw:35455/itv/1000000005000266001.m3u8?cdn=ystenlive$LR•IPV4•22『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="安多卫视" group-title="卫视频道",安多卫视 +https://liveout.xntv.tv/a65jur/96iln2.m3u8$LR•IPV4•22『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="安多卫视" group-title="卫视频道",安多卫视 +http://39.134.65.78/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225659/index.m3u8$LR•IPV4•22『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="安多卫视" group-title="卫视频道",安多卫视 +https://liveout.xntv.tv/a65jur/90p2i1.m3u8?zqinghd$LR•IPV4•22『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="安多卫视" group-title="卫视频道",安多卫视 +http://stream.qhbtv.com/adws/playlist.m3u8?_upt=d60823ce1718441050$LR•IPV4•22『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="安多卫视" group-title="卫视频道",安多卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221225659$LR•IPV4•22『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="安多卫视" group-title="卫视频道",安多卫视 +https://liveout.xntv.tv/a65jur/90p2i1.m3u8?zqinghd$LR•IPV4•22『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="安多卫视" group-title="卫视频道",安多卫视 +rtmp://liveout.xntv.tv/a65jur/96iln2$LR•IPV4•22『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="安多卫视" group-title="卫视频道",安多卫视 +https://stream1.freetv.fun/52d0df257c5c3cec42f2ae19268dbbc261256ff391b27bd83553bea941d0c186.m3u8$LR•IPV4•22『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="安多卫视" group-title="卫视频道",安多卫视 +http://[2409:8087:1a0b:df::4007]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225659/index.m3u8$LR•IPV6•22『线路22』 +#EXTINF:-1 tvg-id="1" tvg-name="康巴卫视" group-title="卫视频道",康巴卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227027/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EkHMvBpWz4rccMxNvSRekpQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•24『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="康巴卫视" group-title="卫视频道",康巴卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221225660$LR•IPV4•24『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="康巴卫视" group-title="卫视频道",康巴卫视 +https://stream1.freetv.fun/b3baba1d904b40b2d929ec8cbdfa40800abc7cb6d1c18efed0d6d91d97bce5b3.ctv$LR•IPV4•24『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="康巴卫视" group-title="卫视频道",康巴卫视 +http://36.105.100.208:35455/itv/1000000005000266002.m3u8?cdn=ystenlive$LR•IPV4•24『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="康巴卫视" group-title="卫视频道",康巴卫视 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=7174&tk=f6cc1e0a0e1a$LR•IPV4•24『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="康巴卫视" group-title="卫视频道",康巴卫视 +http://139.196.151.191:2051/rtp/239.45.1.251:5140$LR•IPV4•24『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="康巴卫视" group-title="卫视频道",康巴卫视 +http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221225856/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•24『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="康巴卫视" group-title="卫视频道",康巴卫视 +http://[2409:8087:3428:20:500::1009]:6610/PLTV/88888888/224/3221225856/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•24『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="康巴卫视" group-title="卫视频道",康巴卫视 +http://[2409:8087:2001:20:2800:0:df6e:eb10]:80/wh7f454c46tw3423902933_-437655574/ott.mobaibox.com/PLTV/3/224/3221227645/index.m3u8$LR•IPV6•24『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="康巴卫视" group-title="卫视频道",康巴卫视 +http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225660/index.m3u8$LR•IPV6•24『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="康巴卫视" group-title="卫视频道",康巴卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227027/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EkHMvBpWz4rccMxNvSRekpQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•24『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="康巴卫视" group-title="卫视频道",康巴卫视 +http://[2409:8087:1a15:10d1::38]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225660/index.m3u8$LR•IPV6•24『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="康巴卫视" group-title="卫视频道",康巴卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221225660$LR•IPV4•24『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="康巴卫视" group-title="卫视频道",康巴卫视 +http://home.wwang.pw:35455/itv/1000000005000266002.m3u8?cdn=ystenlive$LR•IPV4•24『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="康巴卫视" group-title="卫视频道",康巴卫视 +http://111.202.12.159:8080/kYGHWzA/1000/live.m3u8$LR•IPV4•24『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="康巴卫视" group-title="卫视频道",康巴卫视 +http://39.134.65.65/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225660/index.m3u8$LR•IPV4•24『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="康巴卫视" group-title="卫视频道",康巴卫视 +http://php.jdshipin.com/TVOD/hljyd.php?id=3221225660$LR•IPV4•24『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="康巴卫视" group-title="卫视频道",康巴卫视 +http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221225856/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•24『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="康巴卫视" group-title="卫视频道",康巴卫视 +http://[2409:8087:3428:20:500::1009]:6610/PLTV/88888888/224/3221225856/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•24『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="康巴卫视" group-title="卫视频道",康巴卫视 +http://[2409:8087:2001:20:2800:0:df6e:eb10]:80/wh7f454c46tw3423902933_-437655574/ott.mobaibox.com/PLTV/3/224/3221227645/index.m3u8$LR•IPV6•24『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="康巴卫视" group-title="卫视频道",康巴卫视 +https://stream1.freetv.fun/b3baba1d904b40b2d929ec8cbdfa40800abc7cb6d1c18efed0d6d91d97bce5b3.ctv$LR•IPV4•24『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="康巴卫视" group-title="卫视频道",康巴卫视 +http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225660/index.m3u8$LR•IPV6•24『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="康巴卫视" group-title="卫视频道",康巴卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227027/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EkHMvBpWz4rccMxNvSRekpQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•24『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="康巴卫视" group-title="卫视频道",康巴卫视 +http://[2409:8087:1a15:10d1::38]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225660/index.m3u8$LR•IPV6•24『线路24』 +#EXTINF:-1 tvg-id="1" tvg-name="农林卫视" group-title="卫视频道",农林卫视 +http://120.76.248.139/live/bfgd/4200000122.m3u8$LR•IPV4•5『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="农林卫视" group-title="卫视频道",农林卫视 +http://home.wwang.pw:35455/itv/1000000005000266003.m3u8?cdn=ystenlive$LR•IPV4•5『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="农林卫视" group-title="卫视频道",农林卫视 +http://120.76.248.139/live/bfgd/4200000122.m3u8$LR•IPV4•5『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="农林卫视" group-title="卫视频道",农林卫视 +http://ygbh.site/php/bfgd.php?id=122$LR•IPV4•5『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="农林卫视" group-title="卫视频道",农林卫视 +https://cc06.tv12.xyz/105.m3u8$LR•IPV4•5『线路5』 +#EXTINF:-1 tvg-id="1" tvg-name="三沙卫视" group-title="卫视频道",三沙卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003887452.m3u8$LR•IPV4•31『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="三沙卫视" group-title="卫视频道",三沙卫视 +https://stream1.freetv.fun/8bd6b69c423ac31e71c2311ad33f4f291e1314c69005ffb7b3b7defc2944adb2.m3u8$LR•IPV4•31『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="三沙卫视" group-title="卫视频道",三沙卫视 +http://61.138.128.226:19901/tsfile/live/1020_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•31『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="三沙卫视" group-title="卫视频道",三沙卫视 +http://36.105.100.208:35455/itv/5000000011000288016.m3u8?cdn=bestzb$LR•IPV4•31『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="三沙卫视" group-title="卫视频道",三沙卫视 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=0161&tk=f6cc1e0a0e1a$LR•IPV4•31『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="三沙卫视" group-title="卫视频道",三沙卫视 +http://139.129.231.228:50060/rtp/239.21.2.9:5002$LR•IPV4•31『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="三沙卫视" group-title="卫视频道",三沙卫视 +http://139.196.151.191:2051/rtp/239.45.1.82:5140$LR•IPV4•31『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="三沙卫视" group-title="卫视频道",三沙卫视 +http://[2409:8087:2001:20:2800:0:df6e:eb21]:80/ott.mobaibox.com/PLTV/4/224/3221228626/index.m3u8$LR•IPV6•31『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="三沙卫视" group-title="卫视频道",三沙卫视 +http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001185/index.m3u8$LR•IPV6•31『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="三沙卫视" group-title="卫视频道",三沙卫视 +http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221227172/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•31『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="三沙卫视" group-title="卫视频道",三沙卫视 +http://[2409:8087:3428:20:500::1009]:6610/PLTV/88888888/224/3221227172/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•31『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="三沙卫视" group-title="卫视频道",三沙卫视 +http://[2409:8087:5e01:34::20]:6610/ZTE_CMS/08984400000000060000000000000319/index.m3u8?IAS$LR•IPV6•31『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="三沙卫视" group-title="卫视频道",三沙卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226544/1.m3u8$LR•IPV6•31『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="三沙卫视" group-title="卫视频道",三沙卫视 +http://[2409:8087:5e01:34::21]:6610/ZTE_CMS/08984400000000060000000000000319/index.m3u8$LR•IPV6•31『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="三沙卫视" group-title="卫视频道",三沙卫视 +http://[2409:8087:5e00:24::1e]:6060/000000001000/4600001000000000117/1.m3u8$LR•IPV6•31『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="三沙卫视" group-title="卫视频道",三沙卫视 +https://live.mxdyeah.top/live.php?id=sanshaSD$LR•IPV4•31『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="三沙卫视" group-title="卫视频道",三沙卫视 +http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/sanshaSD/__op/default/__f/index.m3u8$LR•IPV4•31『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="三沙卫视" group-title="卫视频道",三沙卫视 +http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/sanshaSD/__op/default/__f/index.m3u8$LR•IPV4•31『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="三沙卫视" group-title="卫视频道",三沙卫视 +https://live3.hnntv.cn/srs/tv/ssws.m3u8$LR•IPV4•31『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="三沙卫视" group-title="卫视频道",三沙卫视 +http://home.wwang.pw:35455/itv/5000000011000288016.m3u8?cdn=bestzb$LR•IPV4•31『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="三沙卫视" group-title="卫视频道",三沙卫视 +http://nn.7x9d.cn/地方台8563/海南.php?id=ssws$LR•IPV4•31『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="三沙卫视" group-title="卫视频道",三沙卫视 +http://dsj.motem.top:8880/bptv/10000100000000050000000003887452.m3u8$LR•IPV4•31『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="三沙卫视" group-title="卫视频道",三沙卫视 +http://[2409:8087:2001:20:2800:0:df6e:eb21]:80/ott.mobaibox.com/PLTV/4/224/3221228626/index.m3u8$LR•IPV6•31『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="三沙卫视" group-title="卫视频道",三沙卫视 +http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001185/index.m3u8$LR•IPV6•31『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="三沙卫视" group-title="卫视频道",三沙卫视 +http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221227172/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•31『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="三沙卫视" group-title="卫视频道",三沙卫视 +http://[2409:8087:3428:20:500::1009]:6610/PLTV/88888888/224/3221227172/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•31『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="三沙卫视" group-title="卫视频道",三沙卫视 +http://[2409:8087:5e01:34::20]:6610/ZTE_CMS/08984400000000060000000000000319/index.m3u8?IAS$LR•IPV6•31『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="三沙卫视" group-title="卫视频道",三沙卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226544/1.m3u8$LR•IPV6•31『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="三沙卫视" group-title="卫视频道",三沙卫视 +http://[2409:8087:5e01:34::21]:6610/ZTE_CMS/08984400000000060000000000000319/index.m3u8$LR•IPV6•31『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="三沙卫视" group-title="卫视频道",三沙卫视 +https://stream1.freetv.fun/8bd6b69c423ac31e71c2311ad33f4f291e1314c69005ffb7b3b7defc2944adb2.m3u8$LR•IPV4•31『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="三沙卫视" group-title="卫视频道",三沙卫视 +http://[2409:8087:5e00:24::1e]:6060/000000001000/4600001000000000117/1.m3u8$LR•IPV6•31『线路31』 +#EXTINF:-1 tvg-id="1" tvg-name="延边卫视" group-title="卫视频道",延边卫视 +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•37『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="延边卫视" group-title="卫视频道",延边卫视 +http://l.cztvcloud.com/channels/lantian/SXxinchang2/720p.m3u8#$LR•IPV4•37『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="延边卫视" group-title="卫视频道",延边卫视 +http://l.cztvcloud.com/channels/lantian/SXxinchang2/720p.m3u8$LR•IPV4•37『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="延边卫视" group-title="卫视频道",延边卫视 +http://l.cztvcloud.com/channels/lantian/SXxinchang2/720p.m3u8#$LR•IPV4•37『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="延边卫视" group-title="卫视频道",延边卫视 +http://l.cztvcloud.com/channels/lantian/SXxinchang2/720p.m3u8$LR•IPV4•37『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="延边卫视" group-title="卫视频道",延边卫视 +https://cc06.tv12.xyz/113.m3u8$LR•IPV4•37『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="延边卫视" group-title="卫视频道",延边卫视 +https://stream1.freetv.fun/yan-bian-wei-shi-16.m3u8$LR•IPV4•37『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="延边卫视" group-title="卫视频道",延边卫视 +http://61.138.128.226:19901/tsfile/live/1008_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•37『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="延边卫视" group-title="卫视频道",延边卫视 +http://36.105.100.208:35455/itv/1000000005000266008.m3u8?cdn=ystenlive$LR•IPV4•37『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="延边卫视" group-title="卫视频道",延边卫视 +https://live.ybtvyun.com/video/s10006-2f92b9e0b123/index.m3u8$LR•IPV4•37『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="延边卫视" group-title="卫视频道",延边卫视 +http://live.ybtvyun.com/video/s10006-44f040627ca1/index.m3u8?zjild$LR•IPV4•37『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="延边卫视" group-title="卫视频道",延边卫视 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=3050&tk=23a9aca1f79f$LR•IPV4•37『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="延边卫视" group-title="卫视频道",延边卫视 +http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001470/index.m3u8$LR•IPV6•37『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="延边卫视" group-title="卫视频道",延边卫视 +http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226516/index.m3u8$LR•IPV6•37『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="延边卫视" group-title="卫视频道",延边卫视 +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•37『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="延边卫视" group-title="卫视频道",延边卫视 +http://[2409:8087:1a15:10d1::39]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226516/index.m3u8$LR•IPV6•37『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="延边卫视" group-title="卫视频道",延边卫视 +http://39.134.67.108/PLTV/88888888/224/3221226040/1.m3u8$LR•IPV4•37『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="延边卫视" group-title="卫视频道",延边卫视 +http://live.ybtvyun.com/video/s10006-44f040627ca1/index.m3u8$LR•IPV4•37『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="延边卫视" group-title="卫视频道",延边卫视 +http://live.ybtvyun.com/video/s10006-28bc40431485/index.m3u8$LR•IPV4•37『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="延边卫视" group-title="卫视频道",延边卫视 +http://live.ybtvyun.com/video/s10006-44f040627ca1/index.m3u8$LR•IPV4•37『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="延边卫视" group-title="卫视频道",延边卫视 +http://live.ybtvyun.com/video/s10016-7e5f23de35df/index.m3u8$LR•IPV4•37『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="延边卫视" group-title="卫视频道",延边卫视 +http://live.ybtvyun.com/video/s10006-90fe76c52091/index.m3u8$LR•IPV4•37『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="延边卫视" group-title="卫视频道",延边卫视 +http://120.76.248.139/live/bfgd/4200000117.m3u8$LR•IPV4•37『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="延边卫视" group-title="卫视频道",延边卫视 +http://home.wwang.pw:35455/itv/1000000005000266008.m3u8?cdn=ystenlive$LR•IPV4•37『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="延边卫视" group-title="卫视频道",延边卫视 +http://120.76.248.139/live/bfgd/4200000117.m3u8$LR•IPV4•37『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="延边卫视" group-title="卫视频道",延边卫视 +http://ygbh.site/php/bfgd.php?id=117$LR•IPV4•37『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="延边卫视" group-title="卫视频道",延边卫视 +https://cc06.tv12.xyz/113.m3u8$LR•IPV4•37『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="延边卫视" group-title="卫视频道",延边卫视 +http://39.135.133.159/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226516/index.m3u8$LR•IPV4•37『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="延边卫视" group-title="卫视频道",延边卫视 +http://l.cztvcloud.com/channels/lantian/SXxinchang2/720p.m3u8#$LR•IPV4•37『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="延边卫视" group-title="卫视频道",延边卫视 +https://live.ybtvyun.com/video/s10006-2f92b9e0b123/index.m3u8$LR•IPV4•37『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="延边卫视" group-title="卫视频道",延边卫视 +http://l.cztvcloud.com/channels/lantian/SXxinchang2/720p.m3u8$LR•IPV4•37『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="延边卫视" group-title="卫视频道",延边卫视 +http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001470/index.m3u8$LR•IPV6•37『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="延边卫视" group-title="卫视频道",延边卫视 +https://stream1.freetv.fun/yan-bian-wei-shi-16.m3u8$LR•IPV4•37『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="延边卫视" group-title="卫视频道",延边卫视 +http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226516/index.m3u8$LR•IPV6•37『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="延边卫视" group-title="卫视频道",延边卫视 +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•37『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="延边卫视" group-title="卫视频道",延边卫视 +http://[2409:8087:1a15:10d1::39]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226516/index.m3u8$LR•IPV6•37『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="延边卫视" group-title="卫视频道",延边卫视 +https://cc06.tv12.xyz/113.m3u8$LR•IPV4•37『线路37』 +#EXTINF:-1 tvg-id="1" tvg-name="CETV1" group-title="卫视频道",CETV1 +https://cc06.tv12.xyz/23.m3u8$LR•IPV4•24『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="CETV1" group-title="卫视频道",CETV1 +https://cc06.tv12.xyz/23.m3u8$LR•IPV4•24『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="CETV1" group-title="卫视频道",CETV1 +http://117.174.25.254:8188/rtp/239.0.0.51:5140$LR•IPV4•24『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="CETV1" group-title="卫视频道",CETV1 +http://223.167.245.215:8001/rtp/239.45.1.125:5140$LR•IPV4•24『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="CETV1" group-title="卫视频道",CETV1 +http://rrs01.hw.gmcc.net:8088/PLTV/81/224/3221226673/1.m3u8$LR•IPV4•24『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="CETV1" group-title="卫视频道",CETV1 +https://migu.188766.xyz/?migutoken=a55dadc35d37e3e168faf8268cc6fa97&id=CETV1&type=yy$LR•IPV4•24『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="CETV1" group-title="卫视频道",CETV1 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227190/index.m3u8$LR•IPV4•24『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="CETV1" group-title="卫视频道",CETV1 +http://139.129.231.228/rtp/239.21.2.7:5002$LR•IPV4•24『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="CETV1" group-title="卫视频道",CETV1 +http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225652/index.m3u8$LR•IPV6•24『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="CETV1" group-title="卫视频道",CETV1 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226494/1.m3u8$LR•IPV6•24『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="CETV1" group-title="卫视频道",CETV1 +http://[2409:8087:1a0a:df::4031]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225652/index.m3u8$LR•IPV6•24『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="CETV1" group-title="卫视频道",CETV1 +http://[2409:8087:1a15:10d1::34]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225652/index.m3u8$LR•IPV6•24『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="CETV1" group-title="卫视频道",CETV1 +http://117.174.25.254:8188/rtp/239.0.0.51:5140$LR•IPV4•24『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="CETV1" group-title="卫视频道",CETV1 +http://223.167.245.215:8001/rtp/239.45.1.125:5140$LR•IPV4•24『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="CETV1" group-title="卫视频道",CETV1 +http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225652/index.m3u8$LR•IPV6•24『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="CETV1" group-title="卫视频道",CETV1 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226494/1.m3u8$LR•IPV6•24『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="CETV1" group-title="卫视频道",CETV1 +http://rrs01.hw.gmcc.net:8088/PLTV/81/224/3221226673/1.m3u8$LR•IPV4•24『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="CETV1" group-title="卫视频道",CETV1 +https://migu.188766.xyz/?migutoken=a55dadc35d37e3e168faf8268cc6fa97&id=CETV1&type=yy$LR•IPV4•24『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="CETV1" group-title="卫视频道",CETV1 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227190/index.m3u8$LR•IPV4•24『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="CETV1" group-title="卫视频道",CETV1 +https://cc06.tv12.xyz/23.m3u8$LR•IPV4•24『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="CETV1" group-title="卫视频道",CETV1 +http://[2409:8087:1a0a:df::4031]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225652/index.m3u8$LR•IPV6•24『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="CETV1" group-title="卫视频道",CETV1 +http://[2409:8087:1a15:10d1::34]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225652/index.m3u8$LR•IPV6•24『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="CETV1" group-title="卫视频道",CETV1 +http://[2409:8087:1a15:10d1::35]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225652/index.m3u8$LR•IPV6•24『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="CETV1" group-title="卫视频道",CETV1 +https://stream1.freetv.fun/ipv6-cetv1-7.m3u8$LR•IPV4•24『线路24』 +#EXTINF:-1 tvg-id="1" tvg-name="CETV2" group-title="卫视频道",CETV2 +https://cc06.tv12.xyz/24.m3u8$LR•IPV4•22『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="CETV2" group-title="卫视频道",CETV2 +https://cc06.tv12.xyz/24.m3u8$LR•IPV4•22『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="CETV2" group-title="卫视频道",CETV2 +http://gslbmgsplive.miguvideo.com/migu/kailu/cetv2/50/20240709/index.m3u8?msisdn=20250903090033bf55eab2bb984fe0b4ac863e60d28ac6&mdspid=&spid=699004&netType=0&sid=5910022152&pid=2028597139×tamp=20250903090033&Channel_ID=0116_2600037000-99000-200300220100002&ProgramID=923287211&ParentNodeID=-99&assertID=5910022152&client_ip=106.13.250.83&SecurityKey=20250903090033&promotionId=&mvid=5900006638&mcid=500020&playurlVersion=WX-A1-8.8.1-RELEASE&userid=&jmhm=&videocodec=h264&bean=mgspad&tid=android&conFee=0&puData=ebfbdc6c83654112720d2b5599373223&ddCalcu=3e2bv2fa3ba7da3c969c5853b625d4012172&sv=10004&ct=android$LR•IPV4•22『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="CETV2" group-title="卫视频道",CETV2 +http://rrs01.hw.gmcc.net:8088/PLTV/81/224/3221226718/1.m3u8$LR•IPV4•22『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="CETV2" group-title="卫视频道",CETV2 +https://mursor.ottiptv.cc/migu/923287211.m3u8?migutoken=58dbb8ad5ad539c0da365c819615222219346bbe2fa8d6e4231da9ad89c4faf34adbae451bebfa99d9b8c9eda32e04a0066231dfd40496610efa4bee9ad5f110baee36b6f4098850d6b507505f$LR•IPV4•22『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="CETV2" group-title="卫视频道",CETV2 +https://migu.188766.xyz/?migutoken=98daa3ba4c81372351b73d9075023b9b&id=CETV2&type=yy$LR•IPV4•22『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="CETV2" group-title="卫视频道",CETV2 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227329/index.m3u8$LR•IPV4•22『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="CETV2" group-title="卫视频道",CETV2 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226425/index.m3u8$LR•IPV4•22『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="CETV2" group-title="卫视频道",CETV2 +http://139.129.231.228/rtp/239.21.2.8:5002$LR•IPV4•22『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="CETV2" group-title="卫视频道",CETV2 +http://[2409:8087:1a0b:df::4013]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226425/index.m3u8$LR•IPV6•22『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="CETV2" group-title="卫视频道",CETV2 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226537/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E7AxXs4eTU2oiWrhopr9sHw%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNNxsM0Bor098BJglrhfEQTl%2CEND$LR•IPV6•22『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="CETV2" group-title="卫视频道",CETV2 +http://[2409:8087:1a0a:df::4031]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226425/index.m3u8$LR•IPV6•22『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="CETV2" group-title="卫视频道",CETV2 +http://[2409:8087:1a0b:df::4013]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226425/index.m3u8$LR•IPV6•22『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="CETV2" group-title="卫视频道",CETV2 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226537/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E7AxXs4eTU2oiWrhopr9sHw%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNNxsM0Bor098BJglrhfEQTl%2CEND$LR•IPV6•22『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="CETV2" group-title="卫视频道",CETV2 +http://rrs01.hw.gmcc.net:8088/PLTV/81/224/3221226718/1.m3u8$LR•IPV4•22『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="CETV2" group-title="卫视频道",CETV2 +https://mursor.ottiptv.cc/migu/923287211.m3u8?migutoken=58dbb8ad5ad539c0da365c819615222219346bbe2fa8d6e4231da9ad89c4faf34adbae451bebfa99d9b8c9eda32e04a0066231dfd40496610efa4bee9ad5f110baee36b6f4098850d6b507505f$LR•IPV4•22『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="CETV2" group-title="卫视频道",CETV2 +https://migu.188766.xyz/?migutoken=98daa3ba4c81372351b73d9075023b9b&id=CETV2&type=yy$LR•IPV4•22『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="CETV2" group-title="卫视频道",CETV2 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227329/index.m3u8$LR•IPV4•22『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="CETV2" group-title="卫视频道",CETV2 +https://cc06.tv12.xyz/24.m3u8$LR•IPV4•22『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="CETV2" group-title="卫视频道",CETV2 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226425/index.m3u8$LR•IPV4•22『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="CETV2" group-title="卫视频道",CETV2 +http://[2409:8087:1a0a:df::4031]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226425/index.m3u8$LR•IPV6•22『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="CETV2" group-title="卫视频道",CETV2 +http://gslbmgsplive.miguvideo.com/migu/kailu/cetv2/50/20240709/index.m3u8?msisdn=20250903090033bf55eab2bb984fe0b4ac863e60d28ac6&mdspid=&spid=699004&netType=0&sid=5910022152&pid=2028597139×tamp=20250903090033&Channel_ID=0116_2600037000-99000-200300220100002&ProgramID=923287211&ParentNodeID=-99&assertID=5910022152&client_ip=106.13.250.83&SecurityKey=20250903090033&promotionId=&mvid=5900006638&mcid=500020&playurlVersion=WX-A1-8.8.1-RELEASE&userid=&jmhm=&videocodec=h264&bean=mgspad&tid=android&conFee=0&puData=ebfbdc6c83654112720d2b5599373223&ddCalcu=3e2bv2fa3ba7da3c969c5853b625d4012172&sv=10004&ct=android$LR•IPV4•22『线路22』 +#EXTINF:-1 tvg-id="1" tvg-name="CETV4" group-title="卫视频道",CETV4 +http://221.10.226.195:5000/rtp/239.0.0.98:5140$LR•IPV4•23『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="CETV4" group-title="卫视频道",CETV4 +http://117.174.25.254:8188/rtp/239.0.0.98:5140$LR•IPV4•23『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="CETV4" group-title="卫视频道",CETV4 +http://rrs01.hw.gmcc.net:8088/PLTV/81/224/3221226724/1.m3u8$LR•IPV4•23『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="CETV4" group-title="卫视频道",CETV4 +https://mursor.ottiptv.cc/migu/923287339.m3u8?migutoken=165b545b4402eaba61cdc31defb6548a443d9b5eebb1d99392852bd799c553e8817e85eb324c512581ca9a1ed8e56e530144f79606cf44fe5b2d5e97b6da577e0f2adae2a90c2a55089c95880b$LR•IPV4•23『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="CETV4" group-title="卫视频道",CETV4 +https://migu.188766.xyz/?migutoken=d5d19d868e1df41e984866fc7ca15071&id=CETV4&type=yy$LR•IPV4•23『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="CETV4" group-title="卫视频道",CETV4 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227331/index.m3u8$LR•IPV4•23『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="CETV4" group-title="卫视频道",CETV4 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225783/index.m3u8$LR•IPV4•23『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="CETV4" group-title="卫视频道",CETV4 +http://139.129.231.228/rtp/239.21.1.222:5002$LR•IPV4•23『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="CETV4" group-title="卫视频道",CETV4 +http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225783/index.m3u8$LR•IPV6•23『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="CETV4" group-title="卫视频道",CETV4 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226997/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EAw_OvjRgJVjtlaOa0dcgzg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•23『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="CETV4" group-title="卫视频道",CETV4 +http://[2409:8087:1a0a:df::4031]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225783/index.m3u8$LR•IPV6•23『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="CETV4" group-title="卫视频道",CETV4 +http://221.10.226.195:5000/rtp/239.0.0.98:5140$LR•IPV4•23『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="CETV4" group-title="卫视频道",CETV4 +http://117.174.25.254:8188/rtp/239.0.0.98:5140$LR•IPV4•23『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="CETV4" group-title="卫视频道",CETV4 +http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225783/index.m3u8$LR•IPV6•23『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="CETV4" group-title="卫视频道",CETV4 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226997/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EAw_OvjRgJVjtlaOa0dcgzg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•23『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="CETV4" group-title="卫视频道",CETV4 +http://rrs01.hw.gmcc.net:8088/PLTV/81/224/3221226724/1.m3u8$LR•IPV4•23『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="CETV4" group-title="卫视频道",CETV4 +https://mursor.ottiptv.cc/migu/923287339.m3u8?migutoken=165b545b4402eaba61cdc31defb6548a443d9b5eebb1d99392852bd799c553e8817e85eb324c512581ca9a1ed8e56e530144f79606cf44fe5b2d5e97b6da577e0f2adae2a90c2a55089c95880b$LR•IPV4•23『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="CETV4" group-title="卫视频道",CETV4 +https://migu.188766.xyz/?migutoken=d5d19d868e1df41e984866fc7ca15071&id=CETV4&type=yy$LR•IPV4•23『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="CETV4" group-title="卫视频道",CETV4 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227331/index.m3u8$LR•IPV4•23『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="CETV4" group-title="卫视频道",CETV4 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225783/index.m3u8$LR•IPV4•23『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="CETV4" group-title="卫视频道",CETV4 +http://[2409:8087:1a0a:df::4031]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225783/index.m3u8$LR•IPV6•23『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="CETV4" group-title="卫视频道",CETV4 +http://sxydajtvlive.sx.chinamobile.com/PLTV/-/224/3221225748/1.m3u8$LR•IPV4•23『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="CETV4" group-title="卫视频道",CETV4 +http://gslbmgsplive.miguvideo.com/migu/kailu/cetv4/50/20240709/index.m3u8?msisdn=2025090309003329cd481a5313461999ea66e0b5c14a1b&mdspid=&spid=699004&netType=0&sid=5910022154&pid=2028597139×tamp=20250903090033&Channel_ID=0116_2600037000-99000-200300220100002&ProgramID=923287339&ParentNodeID=-99&assertID=5910022154&client_ip=106.13.250.83&SecurityKey=20250903090033&promotionId=&mvid=5900006640&mcid=500020&playurlVersion=WX-A1-8.8.1-RELEASE&userid=&jmhm=&videocodec=h264&bean=mgspad&tid=android&conFee=0&puData=a0dd23e241f091b5c99903fbe22f27e3&ddCalcu=3ae0v7da2dbf2a232ee2b4f13f0099919bc5&sv=10004&ct=android$LR•IPV4•23『线路23』 +#EXTINF:-1 tvg-id="1" tvg-name="汕头新闻综合" group-title="广东频道",汕头新闻综合 +https://stream1.freetv.fun/shan-tou-zong-he-5.ctv$LR•IPV4•3『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="汕头新闻综合" group-title="广东频道",汕头新闻综合 +http://120.77.205.62:8087/rtp/239.253.43.30:5146$LR•IPV4•3『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="汕头新闻综合" group-title="广东频道",汕头新闻综合 +https://stream1.freetv.fun/shan-tou-zong-he-5.ctv$LR•IPV4•3『线路3』 +#EXTINF:-1 tvg-id="1" tvg-name="汕头经济生活" group-title="广东频道",汕头经济生活 +https://stream1.freetv.fun/shan-tou-jing-ji-1.ctv$LR•IPV4•3『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="汕头经济生活" group-title="广东频道",汕头经济生活 +http://120.77.205.62:8087/rtp/239.253.43.43:5146$LR•IPV4•3『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="汕头经济生活" group-title="广东频道",汕头经济生活 +https://stream1.freetv.fun/shan-tou-jing-ji-1.ctv$LR•IPV4•3『线路3』 +#EXTINF:-1 tvg-id="1" tvg-name="汕头文旅体育" group-title="广东频道",汕头文旅体育 +http://120.77.205.62:8087/rtp/239.253.43.47:5146$LR•IPV4 +#EXTINF:-1 tvg-id="1" tvg-name="广东珠江" group-title="广东频道",广东珠江 +http://120.238.94.10:9901/tsfile/live/1009_1.m3u8$LR•IPV4•30『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="广东珠江" group-title="广东频道",广东珠江 +http://lu.wqwqwq.sbs/itv/2000000003000000033.m3u8?cdn=hnbblive$LR•IPV4•30『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="广东珠江" group-title="广东频道",广东珠江 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010091$LR•IPV4•30『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="广东珠江" group-title="广东频道",广东珠江 +http://cdn2.163189.xyz/live/gdzj/stream.m3u8$LR•IPV4•30『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="广东珠江" group-title="广东频道",广东珠江 +https://tv.cdn.com.mp/live/gdzj/stream.m3u8$LR•IPV4•30『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="广东珠江" group-title="广东频道",广东珠江 +https://smart.pendy.dpdns.org/Smart.php?id=zhujiang$LR•IPV4•30『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="广东珠江" group-title="广东频道",广东珠江 +https://php.17186.eu.org/gdtv/web/gdzj.m3u8$LR•IPV4•30『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="广东珠江" group-title="广东频道",广东珠江 +http://cdn2.132.us.kg/live/gdzj/stream.m3u8$LR•IPV4•30『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="广东珠江" group-title="广东频道",广东珠江 +http://36.105.100.208:35455/itv/2000000003000000033.m3u8?cdn=hnbblive$LR•IPV4•30『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="广东珠江" group-title="广东频道",广东珠江 +http://mh0.asia:35455/itv/1000000004000011655.m3u8?cdn=ystenlive$LR•IPV4•30『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="广东珠江" group-title="广东频道",广东珠江 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=6340&tk=f6cc1e0a0e1a$LR•IPV4•30『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="广东珠江" group-title="广东频道",广东珠江 +http://mzitv.cn:32/tsfile/live/1006_1.m3u8$LR•IPV4•30『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="广东珠江" group-title="广东频道",广东珠江 +http://120.77.205.62:8087/rtp/239.77.0.1:5146$LR•IPV4•30『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="广东珠江" group-title="广东频道",广东珠江 +http://183.11.239.36:808/hls/83/index.m3u8$LR•IPV4•30『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="广东珠江" group-title="广东频道",广东珠江 +http://[2409:8087:5e08:24::d]:6610/000000001000/1/2000000003000000033/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000003000000033&yang-1989$LR•IPV6•30『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="广东珠江" group-title="广东频道",广东珠江 +http://[2409:8087:5e00:24::10]:6060/200000001898/460000089800010091/0.m3u8$LR•IPV6•30『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="广东珠江" group-title="广东频道",广东珠江 +http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010091/1.m3u8$LR•IPV6•30『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="广东珠江" group-title="广东频道",广东珠江 +http://bxtv.3a.ink/api.php?id=gdzj$LR•IPV4•30『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="广东珠江" group-title="广东频道",广东珠江 +http://cdn2.163189.xyz/live/gdzj/stream.m3u8$LR•IPV4•30『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="广东珠江" group-title="广东频道",广东珠江 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010091$LR•IPV4•30『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="广东珠江" group-title="广东频道",广东珠江 +http://cdn2.163189.xyz/live/gdzj/stream.m3u8$LR•IPV4•30『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="广东珠江" group-title="广东频道",广东珠江 +https://tv.cdn.com.mp/live/gdzj/stream.m3u8$LR•IPV4•30『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="广东珠江" group-title="广东频道",广东珠江 +http://lu.wqwqwq.sbs/itv/2000000003000000033.m3u8?cdn=hnbblive$LR•IPV4•30『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="广东珠江" group-title="广东频道",广东珠江 +https://smart.pendy.dpdns.org/Smart.php?id=zhujiang$LR•IPV4•30『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="广东珠江" group-title="广东频道",广东珠江 +https://php.17186.eu.org/gdtv/web/gdzj.m3u8$LR•IPV4•30『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="广东珠江" group-title="广东频道",广东珠江 +http://[2409:8087:5e08:24::d]:6610/000000001000/1/2000000003000000033/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000003000000033&yang-1989$LR•IPV6•30『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="广东珠江" group-title="广东频道",广东珠江 +http://[2409:8087:5e00:24::10]:6060/200000001898/460000089800010091/0.m3u8$LR•IPV6•30『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="广东珠江" group-title="广东频道",广东珠江 +http://cdn2.132.us.kg/live/gdzj/stream.m3u8$LR•IPV4•30『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="广东珠江" group-title="广东频道",广东珠江 +http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010091/1.m3u8$LR•IPV6•30『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="广东珠江" group-title="广东频道",广东珠江 +http://120.238.94.10:9901/tsfile/live/1009_1.m3u8$LR•IPV4•30『线路30』 +#EXTINF:-1 tvg-id="1" tvg-name="广东体育" group-title="广东频道",广东体育 +http://cdn2.163189.xyz/live/gdty/stream.m3u8$LR•IPV4•31『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="广东体育" group-title="广东频道",广东体育 +http://php.jdshipin.com/PLTV/iptv.php?id=gdty$LR•IPV4•31『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="广东体育" group-title="广东频道",广东体育 +https://stream1.freetv.fun/yan-dong-ti-yu-3.m3u8$LR•IPV4•31『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="广东体育" group-title="广东频道",广东体育 +http://cdn2.132.us.kg/live/gdty/stream.m3u8$LR•IPV4•31『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="广东体育" group-title="广东频道",广东体育 +https://hls-gateway.vpstv.net/streams/476954.m3u8$LR•IPV4•31『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="广东体育" group-title="广东频道",广东体育 +http://bxtv.3a.ink/api.php?id=gdty$LR•IPV4•31『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="广东体育" group-title="广东频道",广东体育 +https://cdn2.163189.xyz/live/gdty/stream.m3u8$LR•IPV4•31『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="广东体育" group-title="广东频道",广东体育 +http://120.238.94.10:9901/tsfile/live/1012_1.m3u8$LR•IPV4•31『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="广东体育" group-title="广东频道",广东体育 +http://mzitv.cn:32/tsfile/live/1008_1.m3u8$LR•IPV4•31『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="广东体育" group-title="广东频道",广东体育 +http://120.77.205.62:8087/rtp/239.77.0.112:5146$LR•IPV4•31『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="广东体育" group-title="广东频道",广东体育 +http://183.11.239.36:808/hls/2/index.m3u8$LR•IPV4•31『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="广东体育" group-title="广东频道",广东体育 +http://bxtv.3a.ink/api.php?id=gdty$LR•IPV4•31『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="广东体育" group-title="广东频道",广东体育 +http://cdn2.163189.xyz/live/gdty/stream.m3u8$LR•IPV4•31『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="广东体育" group-title="广东频道",广东体育 +https://epg.pw/stream/7b470f9fc5c305db0c8622117b7b25ca00eb35ba3e93e865cf0ff9df5c736681.m3u8$LR•IPV4•31『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="广东体育" group-title="广东频道",广东体育 +http://cdn2.163189.xyz/live/gdty/stream.m3u8$LR•IPV4•31『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="广东体育" group-title="广东频道",广东体育 +http://php.jdshipin.com/PLTV/iptv.php?id=gdty$LR•IPV4•31『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="广东体育" group-title="广东频道",广东体育 +https://stream1.freetv.fun/yan-dong-ti-yu-3.m3u8$LR•IPV4•31『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="广东体育" group-title="广东频道",广东体育 +http://cdn2.132.us.kg/live/gdty/stream.m3u8$LR•IPV4•31『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="广东体育" group-title="广东频道",广东体育 +https://hls-gateway.vpstv.net/streams/476954.m3u8$LR•IPV4•31『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="广东体育" group-title="广东频道",广东体育 +http://bxtv.3a.ink/api.php?id=gdty$LR•IPV4•31『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="广东体育" group-title="广东频道",广东体育 +https://cdn2.163189.xyz/live/gdty/stream.m3u8$LR•IPV4•31『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="广东体育" group-title="广东频道",广东体育 +http://120.238.94.10:9901/tsfile/live/1012_1.m3u8$LR•IPV4•31『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="广东体育" group-title="广东频道",广东体育 +http://120.238.94.10:9901/tsfile/live/1012_1.m3u8$LR•IPV4•31『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="广东体育" group-title="广东频道",广东体育 +https://epg.pw/stream/7b470f9fc5c305db0c8622117b7b25ca00eb35ba3e93e865cf0ff9df5c736681.m3u8$LR•IPV4•31『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="广东体育" group-title="广东频道",广东体育 +http://cdn2.163189.xyz/live/gdty/stream.m3u8$LR•IPV4•31『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="广东体育" group-title="广东频道",广东体育 +http://php.jdshipin.com/PLTV/iptv.php?id=gdty$LR•IPV4•31『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="广东体育" group-title="广东频道",广东体育 +https://stream1.freetv.fun/yan-dong-ti-yu-3.m3u8$LR•IPV4•31『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="广东体育" group-title="广东频道",广东体育 +http://cdn2.132.us.kg/live/gdty/stream.m3u8$LR•IPV4•31『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="广东体育" group-title="广东频道",广东体育 +https://hls-gateway.vpstv.net/streams/476954.m3u8$LR•IPV4•31『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="广东体育" group-title="广东频道",广东体育 +http://bxtv.3a.ink/api.php?id=gdty$LR•IPV4•31『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="广东体育" group-title="广东频道",广东体育 +https://cdn2.163189.xyz/live/gdty/stream.m3u8$LR•IPV4•31『线路31』 +#EXTINF:-1 tvg-id="1" tvg-name="广东民生" group-title="广东频道",广东民生 +http://183.11.239.36:808/hls/18/index.m3u8$LR•IPV4•5『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="广东民生" group-title="广东频道",广东民生 +http://mzitv.cn:32/tsfile/live/1009_1.m3u8$LR•IPV4•5『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="广东民生" group-title="广东频道",广东民生 +http://120.77.205.62:8087/rtp/239.77.0.225:5146$LR•IPV4•5『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="广东民生" group-title="广东频道",广东民生 +http://119.32.12.17:2901/udp/224.1.100.4:11111$LR•IPV4•5『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="广东民生" group-title="广东频道",广东民生 +http://183.11.239.36:808/hls/18/index.m3u8$LR•IPV4•5『线路5』 +#EXTINF:-1 tvg-id="1" tvg-name="广东少儿" group-title="广东频道",广东少儿 +http://119.32.12.17:2901/udp/224.1.100.9:11111$LR•IPV4 +#EXTINF:-1 tvg-id="1" tvg-name="广东影视" group-title="广东频道",广东影视 +http://mg.hmysapp.cn:177/ckmg/zb.php?id=gdys$LR•IPV4•2『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="广东影视" group-title="广东频道",广东影视 +http://119.32.12.17:2901/udp/224.1.100.11:11111$LR•IPV4•2『线路2』 +#EXTINF:-1 tvg-id="1" tvg-name="大湾区卫视" group-title="广东频道",大湾区卫视 +http://222.128.55.152:9080/live/dwq.m3u8$LR•IPV4•39『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="大湾区卫视" group-title="广东频道",大湾区卫视 +http://148.135.93.213/live.php?id=大湾区卫视$LR•IPV4•39『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="大湾区卫视" group-title="广东频道",大湾区卫视 +http://ali.hlspull.yximgs.com/live/b027460e580a463cb7e44eebexcvhnddggdfsdg.flv$LR•IPV4•39『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="大湾区卫视" group-title="广东频道",大湾区卫视 +http://home.wwang.pw:35455/itv/2000000003000000045.m3u8?cdn=hnbblive$LR•IPV4•39『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="大湾区卫视" group-title="广东频道",大湾区卫视 +http://222.128.55.152:9080/live/dwq.m3u8$LR•IPV4•39『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="大湾区卫视" group-title="广东频道",大湾区卫视 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010108$LR•IPV4•39『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="大湾区卫视" group-title="广东频道",大湾区卫视 +http://z.b.bkpcp.top/m.php?id=dwqws$LR•IPV4•39『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="大湾区卫视" group-title="广东频道",大湾区卫视 +http://goo.bkpcp.top/mg/dwqws$LR•IPV4•39『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="大湾区卫视" group-title="广东频道",大湾区卫视 +http://jp1.jdiptv.cc/live/nfws.m3u8?kdstime=$LR•IPV4•39『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="大湾区卫视" group-title="广东频道",大湾区卫视 +https://www.freetv.top/migu/608917627.m3u8?migutoken=913ec7608066b2e139e10a729ed6e0b277096bf7d1577f04dec2f036a15f6db88631747d218643efc7515ff520286e2a56bc4f2231e6d692da49f8d555d3291bbba71e8f2993d5487b41afa6bf$LR•IPV4•39『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="大湾区卫视" group-title="广东频道",大湾区卫视 +https://stream1.freetv.fun/9e44565ab6186689007a295d8b94b2a970fafde637068b0e3837e5f84689a8f3.m3u8$LR•IPV4•39『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="大湾区卫视" group-title="广东频道",大湾区卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226442/index.m3u8$LR•IPV4•39『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="大湾区卫视" group-title="广东频道",大湾区卫视 +http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226218/index.m3u8$LR•IPV4•39『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="大湾区卫视" group-title="广东频道",大湾区卫视 +http://38.64.72.148/hls/modn/list/4011/chunklist0.m3u8$LR•IPV4•39『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="大湾区卫视" group-title="广东频道",大湾区卫视 +http://36.105.100.208:35455/itv/1000000002000011619.m3u8?cdn=ystenlive$LR•IPV4•39『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="大湾区卫视" group-title="广东频道",大湾区卫视 +http://150.158.112.123/%E5%85%AC%E4%BC%97%E5%8F%B7~%E7%8E%89%E7%8E%89%E8%BD%AF%E4%BB%B6%E5%BA%93/mg.php?id=dwqws$LR•IPV4•39『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="大湾区卫视" group-title="广东频道",大湾区卫视 +http://211.101.234.24:866/aishang/migu.php/migu.php?id=dwqws$LR•IPV4•39『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="大湾区卫视" group-title="广东频道",大湾区卫视 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=5406&tk=23a9aca1f79f$LR•IPV4•39『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="大湾区卫视" group-title="广东频道",大湾区卫视 +http://mzitv.cn:32/tsfile/live/1012_1.m3u8$LR•IPV4•39『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="大湾区卫视" group-title="广东频道",大湾区卫视 +http://120.77.205.62:8087/rtp/239.77.0.215:5146$LR•IPV4•39『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="大湾区卫视" group-title="广东频道",大湾区卫视 +http://183.11.239.36:808/hls/132/index.m3u8$LR•IPV4•39『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="大湾区卫视" group-title="广东频道",大湾区卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226540/1.m3u8$LR•IPV6•39『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="大湾区卫视" group-title="广东频道",大湾区卫视 +http://[2409:8087:5e08:25::16]:6610/200000001898/460000089800010108/1.m3u8$LR•IPV6•39『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="大湾区卫视" group-title="广东频道",大湾区卫视 +http://39.135.133.153/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226442/index.m3u8$LR•IPV4•39『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="大湾区卫视" group-title="广东频道",大湾区卫视 +http://mg.hmysapp.cn:177/ckmg/zb.php?id=dwqws$LR•IPV4•39『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="大湾区卫视" group-title="广东频道",大湾区卫视 +http://t.061899.xyz/tl/dq.php?id=dwqws$LR•IPV4•39『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="大湾区卫视" group-title="广东频道",大湾区卫视 +http://t.061899.xyz/tl/dq.php?id=dwqws$LR•IPV4•39『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="大湾区卫视" group-title="广东频道",大湾区卫视 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010108$LR•IPV4•39『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="大湾区卫视" group-title="广东频道",大湾区卫视 +http://z.b.bkpcp.top/m.php?id=dwqws$LR•IPV4•39『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="大湾区卫视" group-title="广东频道",大湾区卫视 +http://goo.bkpcp.top/mg/dwqws$LR•IPV4•39『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="大湾区卫视" group-title="广东频道",大湾区卫视 +http://jp1.jdiptv.cc/live/nfws.m3u8?kdstime=$LR•IPV4•39『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="大湾区卫视" group-title="广东频道",大湾区卫视 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226540/1.m3u8$LR•IPV6•39『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="大湾区卫视" group-title="广东频道",大湾区卫视 +https://www.freetv.top/migu/608917627.m3u8?migutoken=913ec7608066b2e139e10a729ed6e0b277096bf7d1577f04dec2f036a15f6db88631747d218643efc7515ff520286e2a56bc4f2231e6d692da49f8d555d3291bbba71e8f2993d5487b41afa6bf$LR•IPV4•39『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="大湾区卫视" group-title="广东频道",大湾区卫视 +https://stream1.freetv.fun/9e44565ab6186689007a295d8b94b2a970fafde637068b0e3837e5f84689a8f3.m3u8$LR•IPV4•39『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="大湾区卫视" group-title="广东频道",大湾区卫视 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226442/index.m3u8$LR•IPV4•39『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="大湾区卫视" group-title="广东频道",大湾区卫视 +http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226218/index.m3u8$LR•IPV4•39『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="大湾区卫视" group-title="广东频道",大湾区卫视 +http://[2409:8087:5e08:25::16]:6610/200000001898/460000089800010108/1.m3u8$LR•IPV6•39『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="大湾区卫视" group-title="广东频道",大湾区卫视 +http://222.128.55.152:9080/live/dwq.m3u8$LR•IPV4•39『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="大湾区卫视" group-title="广东频道",大湾区卫视 +http://148.135.93.213:81/live.php?id=大湾区卫视$LR•IPV4•39『线路39』 +#EXTINF:-1 tvg-id="1" tvg-name="广州综合" group-title="广东频道",广州综合 +http://tencentplay.gztv.com/live/zonghes.m3u8?txSecret=c8dbe86d6f86eb1a21999ab479fd5667&txTime=18d3c4690e8$LR•IPV4•13『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="广州综合" group-title="广东频道",广州综合 +http://php.jdshipin.com:8880/gztv.php?id=zhonghe$LR•IPV4•13『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="广州综合" group-title="广东频道",广州综合 +https://live.lalifeier.eu.org/gztv/zhonghe.m3u8?t=1746292937&key=20079a0c421e334c8ff6f63f230b8038$LR•IPV4•13『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="广州综合" group-title="广东频道",广州综合 +https://live.iill.top/gztv/zhonghe$LR•IPV4•13『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="广州综合" group-title="广东频道",广州综合 +https://tv.iill.top/gztv/zhonghe$LR•IPV4•13『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="广州综合" group-title="广东频道",广州综合 +http://120.77.205.62:8087/rtp/239.253.43.71:5146$LR•IPV4•13『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="广州综合" group-title="广东频道",广州综合 +http://tencentplay.gztv.com/live/zonghes.m3u8?txSecret=c8dbe86d6f86eb1a21999ab479fd5667&txTime=18d3c4690e8$LR•IPV4•13『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="广州综合" group-title="广东频道",广州综合 +http://php.jdshipin.com:8880/gztv.php?id=zhonghe$LR•IPV4•13『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="广州综合" group-title="广东频道",广州综合 +https://live.lalifeier.eu.org/gztv/zhonghe.m3u8?t=1746292937&key=20079a0c421e334c8ff6f63f230b8038$LR•IPV4•13『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="广州综合" group-title="广东频道",广州综合 +https://live.iill.top/gztv/zhonghe$LR•IPV4•13『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="广州综合" group-title="广东频道",广州综合 +https://tv.iill.top/gztv/zhonghe$LR•IPV4•13『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="广州综合" group-title="广东频道",广州综合 +http://tencentplay.gztv.com/live/zonghes.m3u8?txSecret=c8dbe86d6f86eb1a21999ab479fd5667&txTime=18d3c4690e8$LR•IPV4•13『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="广州综合" group-title="广东频道",广州综合 +http://tencentplay.gztv.com/live/zonghes.m3u8?txSecret=c8dbe86d6f86eb1a21999ab479fd5667&txTime=18d3c4690e8$LR•IPV4•13『线路13』 +#EXTINF:-1 tvg-id="1" tvg-name="广州新闻" group-title="广东频道",广州新闻 +http://tencentplay.gztv.com/live/xinwen.m3u8?txSecret=d2c2db0b598c02ec1b5623728434d367&txTime=18d57929bd3$LR•IPV4•4『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="广州新闻" group-title="广东频道",广州新闻 +http://tencentplay.gztv.com/live/xinwen.m3u8?txSecret=d2c2db0b598c02ec1b5623728434d367&txTime=18d57929bd3$LR•IPV4•4『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="广州新闻" group-title="广东频道",广州新闻 +http://tencentplay.gztv.com/live/xinwen.m3u8?txSecret=d2c2db0b598c02ec1b5623728434d367&txTime=18d57929bd3$LR•IPV4•4『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="广州新闻" group-title="广东频道",广州新闻 +http://tencentplay.gztv.com/live/xinwen.m3u8?txSecret=d2c2db0b598c02ec1b5623728434d367&txTime=18d57929bd3$LR•IPV4•4『线路4』 +#EXTINF:-1 tvg-id="1" tvg-name="广州影视" group-title="广东频道",广州影视 +http://php.jdshipin.com:8880/gztv.php?id=yingshi$LR•IPV4•12『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="广州影视" group-title="广东频道",广州影视 +https://tencentplay.gztv.com/live/yingshi.m3u8?txSecret=7e9bddad7c8911626ed1d2c09fc605d9&txTime=18d00acf487$LR•IPV4•12『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="广州影视" group-title="广东频道",广州影视 +https://live.lalifeier.eu.org/gztv/yingshi.m3u8?t=1746292937&key=a30a89b429981379ff7c586fdb54ac86$LR•IPV4•12『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="广州影视" group-title="广东频道",广州影视 +https://stream1.freetv.fun/yan-zhou-ying-shi-25.m3u8$LR•IPV4•12『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="广州影视" group-title="广东频道",广州影视 +https://tv.iill.top/gztv/yingshi$LR•IPV4•12『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="广州影视" group-title="广东频道",广州影视 +http://120.77.205.62:8087/rtp/239.253.43.68:5146$LR•IPV4•12『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="广州影视" group-title="广东频道",广州影视 +http://tencentplay.gztv.com/live/yingshi.m3u8?txSecret=1bd3a1082ab5b89f48c1bff9a3760da4&txTime=18d57929bd4$LR•IPV4•12『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="广州影视" group-title="广东频道",广州影视 +http://php.jdshipin.com:8880/gztv.php?id=yingshi#https://tencentplay.gztv.com/live/yingshi.m3u8?txSecret=7e9bddad7c8911626ed1d2c09fc605d9&txTime=18d00acf487$LR•IPV4•12『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="广州影视" group-title="广东频道",广州影视 +https://live.lalifeier.eu.org/gztv/yingshi.m3u8?t=1746292937&key=a30a89b429981379ff7c586fdb54ac86$LR•IPV4•12『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="广州影视" group-title="广东频道",广州影视 +https://stream1.freetv.fun/yan-zhou-ying-shi-25.m3u8$LR•IPV4•12『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="广州影视" group-title="广东频道",广州影视 +https://tv.iill.top/gztv/yingshi$LR•IPV4•12『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="广州影视" group-title="广东频道",广州影视 +http://tencentplay.gztv.com/live/yingshi.m3u8?txSecret=1bd3a1082ab5b89f48c1bff9a3760da4&txTime=18d57929bd4$LR•IPV4•12『线路12』 +#EXTINF:-1 tvg-id="1" tvg-name="广州法治" group-title="广东频道",广州法治 +http://tencentplay.gztv.com/live/fazhi.m3u8?txSecret=3e84cd8eba844b5dc2150612295c7a52&txTime=18d578f4493$LR•IPV4•4『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="广州法治" group-title="广东频道",广州法治 +http://tencentplay.gztv.com/live/fazhi.m3u8?txSecret=3e84cd8eba844b5dc2150612295c7a52&txTime=18d578f4493$LR•IPV4•4『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="广州法治" group-title="广东频道",广州法治 +http://tencentplay.gztv.com/live/fazhi.m3u8?txSecret=3e84cd8eba844b5dc2150612295c7a52&txTime=18d578f4493$LR•IPV4•4『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="广州法治" group-title="广东频道",广州法治 +http://tencentplay.gztv.com/live/fazhi.m3u8?txSecret=3e84cd8eba844b5dc2150612295c7a52&txTime=18d578f4493$LR•IPV4•4『线路4』 +#EXTINF:-1 tvg-id="1" tvg-name="广州竞赛" group-title="广东频道",广州竞赛 +http://8.138.7.223/tv/gzjs.m3u8$LR•IPV4•14『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="广州竞赛" group-title="广东频道",广州竞赛 +http://php.jdshipin.com:8880/gztv.php?id=jingsai$LR•IPV4•14『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="广州竞赛" group-title="广东频道",广州竞赛 +https://tencentplay.gztv.com/live/jingsai.m3u8?txSecret=49c8041461997c7a97dbcc3c7fd11b4f&txTime=18d00acf487$LR•IPV4•14『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="广州竞赛" group-title="广东频道",广州竞赛 +https://stream1.freetv.fun/yan-zhou-jing-sai-2.m3u8$LR•IPV4•14『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="广州竞赛" group-title="广东频道",广州竞赛 +https://live.lalifeier.eu.org/gztv/jingsai.m3u8?t=1746307365&key=a9871a8d340d71198cae366f791f73b6$LR•IPV4•14『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="广州竞赛" group-title="广东频道",广州竞赛 +http://8.138.7.223/tv/gzjs.m3u8$LR•IPV4•14『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="广州竞赛" group-title="广东频道",广州竞赛 +http://php.jdshipin.com:8880/gztv.php?id=jingsai#https://tencentplay.gztv.com/live/jingsai.m3u8?txSecret=49c8041461997c7a97dbcc3c7fd11b4f&txTime=18d00acf487$LR•IPV4•14『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="广州竞赛" group-title="广东频道",广州竞赛 +https://stream1.freetv.fun/yan-zhou-jing-sai-2.m3u8$LR•IPV4•14『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="广州竞赛" group-title="广东频道",广州竞赛 +https://live.lalifeier.eu.org/gztv/jingsai.m3u8?t=1746307365&key=a9871a8d340d71198cae366f791f73b6$LR•IPV4•14『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="广州竞赛" group-title="广东频道",广州竞赛 +https://tencentplay.gztv.com/live/jingsai.m3u8?txSecret=a4d04c27d0d1d8b7efef2ed7ff1c3eae&txTime=191b60cc9ca$LR•IPV4•14『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="广州竞赛" group-title="广东频道",广州竞赛 +http://8.138.7.223/tv/gzjs.m3u8$LR•IPV4•14『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="广州竞赛" group-title="广东频道",广州竞赛 +http://php.jdshipin.com:8880/gztv.php?id=jingsai#https://tencentplay.gztv.com/live/jingsai.m3u8?txSecret=49c8041461997c7a97dbcc3c7fd11b4f&txTime=18d00acf487$LR•IPV4•14『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="广州竞赛" group-title="广东频道",广州竞赛 +https://stream1.freetv.fun/yan-zhou-jing-sai-2.m3u8$LR•IPV4•14『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="广州竞赛" group-title="广东频道",广州竞赛 +https://live.lalifeier.eu.org/gztv/jingsai.m3u8?t=1746307365&key=a9871a8d340d71198cae366f791f73b6$LR•IPV4•14『线路14』 +#EXTINF:-1 tvg-id="1" tvg-name="江门综合" group-title="广东频道",江门综合 +https://stream1.freetv.fun/jiang-men-zong-he-8.ctv$LR•IPV4•5『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="江门综合" group-title="广东频道",江门综合 +http://dslive.grtn.cn/jmzh/sd/live.m3u8$LR•IPV4•5『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="江门综合" group-title="广东频道",江门综合 +http://120.77.205.62:8087/rtp/239.77.0.195:5146$LR•IPV4•5『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="江门综合" group-title="广东频道",江门综合 +https://stream1.freetv.fun/jiang-men-zong-he-8.ctv$LR•IPV4•5『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="江门综合" group-title="广东频道",江门综合 +http://dslive.grtn.cn/jmzh/sd/live.m3u8$LR•IPV4•5『线路5』 +#EXTINF:-1 tvg-id="1" tvg-name="江门侨乡生活" group-title="广东频道",江门侨乡生活 +http://120.77.205.62:8087/rtp/239.77.0.202:5146$LR•IPV4 +#EXTINF:-1 tvg-id="1" tvg-name="河源综合" group-title="广东频道",河源综合 +http://tmpstream.hyrtv.cn/xwzh/sd/live.m3u8$LR•IPV4 +#EXTINF:-1 tvg-id="1" tvg-name="河源公共" group-title="广东频道",河源公共 +http://tmpstream.hyrtv.cn/hygg/sd/live.m3u8$LR•IPV4 +#EXTINF:-1 tvg-id="1" tvg-name="茂名综合" group-title="广东频道",茂名综合 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=9728&tk=a0c4f6cfaba3$LR•IPV4•3『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="茂名综合" group-title="广东频道",茂名综合 +http://120.77.205.62:8087/rtp/239.77.0.206:5146$LR•IPV4•3『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="茂名综合" group-title="广东频道",茂名综合 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=9728&tk=a0c4f6cfaba3$LR•IPV4•3『线路3』 +#EXTINF:-1 tvg-id="1" tvg-name="茂名公共" group-title="广东频道",茂名公共 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=7418&tk=a0c4f6cfaba3$LR•IPV4•3『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="茂名公共" group-title="广东频道",茂名公共 +http://120.77.205.62:8087/rtp/239.77.0.207:5146$LR•IPV4•3『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="茂名公共" group-title="广东频道",茂名公共 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=7418&tk=a0c4f6cfaba3$LR•IPV4•3『线路3』 +#EXTINF:-1 tvg-id="1" tvg-name="佛山综合" group-title="广东频道",佛山综合 +http://php.jdshipin.com:8880/fstv.php?id=fszh$LR•IPV4•7『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="佛山综合" group-title="广东频道",佛山综合 +https://live.lalifeier.eu.org/fstv/fszh.m3u8?t=1746307365&key=776c844ec448f3aca62132b212878ee5$LR•IPV4•7『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="佛山综合" group-title="广东频道",佛山综合 +http://dslive.grtn.cn/fszh/sd/live.m3u8$LR•IPV4•7『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="佛山综合" group-title="广东频道",佛山综合 +http://120.77.205.62:8087/rtp/239.253.43.52:5146$LR•IPV4•7『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="佛山综合" group-title="广东频道",佛山综合 +http://php.jdshipin.com:8880/fstv.php?id=fszh$LR•IPV4•7『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="佛山综合" group-title="广东频道",佛山综合 +https://live.lalifeier.eu.org/fstv/fszh.m3u8?t=1746307365&key=776c844ec448f3aca62132b212878ee5$LR•IPV4•7『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="佛山综合" group-title="广东频道",佛山综合 +http://dslive.grtn.cn/fszh/sd/live.m3u8$LR•IPV4•7『线路7』 +#EXTINF:-1 tvg-id="1" tvg-name="东莞新闻综合" group-title="广东频道",东莞新闻综合 +https://stream.sun0769.com/dgrtv1/mp4tv1_800/index.m3u8$LR•IPV4•3『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="东莞新闻综合" group-title="广东频道",东莞新闻综合 +https://stream.sun0769.com/dgrtv1/mp4tv1_800/index.m3u8$LR•IPV4•3『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="东莞新闻综合" group-title="广东频道",东莞新闻综合 +https://stream.sun0769.com/dgrtv1/mp4tv1_800/index.m3u8$LR•IPV4•3『线路3』 +#EXTINF:-1 tvg-id="1" tvg-name="东莞生活资讯" group-title="广东频道",东莞生活资讯 +https://stream.sun0769.com/dgrtv1/mp4tv2_800/index.m3u8$LR•IPV4•3『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="东莞生活资讯" group-title="广东频道",东莞生活资讯 +https://stream.sun0769.com/dgrtv1/mp4tv2_800/index.m3u8$LR•IPV4•3『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="东莞生活资讯" group-title="广东频道",东莞生活资讯 +https://stream.sun0769.com/dgrtv1/mp4tv2_800/index.m3u8$LR•IPV4•3『线路3』 +#EXTINF:-1 tvg-id="1" tvg-name="CHC影迷电影" group-title="数字频道",CHC影迷电影 +http://183.237.95.108:9901/tsfile/live/1008_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•19『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="CHC影迷电影" group-title="数字频道",CHC影迷电影 +http://120.198.101.106:9901/tsfile/live/1053_1.m3u8?key=txiptv$LR•IPV4•19『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="CHC影迷电影" group-title="数字频道",CHC影迷电影 +http://218.15.183.23:9901/tsfile/live/23044_1.m3u8$LR•IPV4•19『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="CHC影迷电影" group-title="数字频道",CHC影迷电影 +http://120.198.95.220:9901/tsfile/live/1038_1.m3u8?key=txiptv$LR•IPV4•19『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="CHC影迷电影" group-title="数字频道",CHC影迷电影 +http://dassby.qqff.top:99/live/CHC高清/index.m3u8$LR•IPV4•19『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="CHC影迷电影" group-title="数字频道",CHC影迷电影 +rtsp://115.153.247.80/PLTV/88888888/224/3221226990/86128784.smil$LR•IPV4•19『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="CHC影迷电影" group-title="数字频道",CHC影迷电影 +rtsp://115.153.230.145/PLTV/88888888/224/3221226990/86128784.smil$LR•IPV4•19『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="CHC影迷电影" group-title="数字频道",CHC影迷电影 +rtsp://115.153.222.112:554/PLTV/88888888/224/3221226990/86128784.smil$LR•IPV4•19『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="CHC影迷电影" group-title="数字频道",CHC影迷电影 +http://58.19.38.162:9901/tsfile/live/1004_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•19『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="CHC影迷电影" group-title="数字频道",CHC影迷电影 +http://58.19.38.162:9901/tsfile/live/1004_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•19『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="CHC影迷电影" group-title="数字频道",CHC影迷电影 +http://148.135.93.213/live.php?id=CHC影迷电影$LR•IPV4•19『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="CHC影迷电影" group-title="数字频道",CHC影迷电影 +http://183.237.95.108:9901/tsfile/live/1008_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•19『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="CHC影迷电影" group-title="数字频道",CHC影迷电影 +http://120.198.101.106:9901/tsfile/live/1053_1.m3u8?key=txiptv$LR•IPV4•19『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="CHC影迷电影" group-title="数字频道",CHC影迷电影 +http://218.15.183.23:9901/tsfile/live/23044_1.m3u8$LR•IPV4•19『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="CHC影迷电影" group-title="数字频道",CHC影迷电影 +http://120.198.95.220:9901/tsfile/live/1038_1.m3u8?key=txiptv$LR•IPV4•19『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="CHC影迷电影" group-title="数字频道",CHC影迷电影 +http://dassby.qqff.top:99/live/CHC高清/index.m3u8$LR•IPV4•19『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="CHC影迷电影" group-title="数字频道",CHC影迷电影 +rtsp://115.153.247.80/PLTV/88888888/224/3221226990/86128784.smil$LR•IPV4•19『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="CHC影迷电影" group-title="数字频道",CHC影迷电影 +rtsp://115.153.230.145/PLTV/88888888/224/3221226990/86128784.smil$LR•IPV4•19『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="CHC影迷电影" group-title="数字频道",CHC影迷电影 +rtsp://115.153.222.112:554/PLTV/88888888/224/3221226990/86128784.smil$LR•IPV4•19『线路19』 +#EXTINF:-1 tvg-id="1" tvg-name="CHC动作电影" group-title="数字频道",CHC动作电影 +http://113.195.172.192:808/hls/114/index.m3u8$LR•IPV4•30『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="CHC动作电影" group-title="数字频道",CHC动作电影 +http://goo.bkpcp.top/mg/dzdy$LR•IPV4•30『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="CHC动作电影" group-title="数字频道",CHC动作电影 +http://data.3g.yy.com/live/hls/1382735573/1382735573$LR•IPV4•30『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="CHC动作电影" group-title="数字频道",CHC动作电影 +https://www.freetv.top/migu/644368714.m3u8?migutoken=2e48d18419793654f347e8ca29e0028ce9f3eaaa7a108b006304178b8f790f34908f8a09bbb8f4b8b8abcf36e2341f1043dde8719cf4927fcd0dcde4667f8b91e68e820314791d9b70452862c9$LR•IPV4•30『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="CHC动作电影" group-title="数字频道",CHC动作电影 +https://stream1.freetv.fun/chcdong-zuo-dian-ying-4.ctv$LR•IPV4•30『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="CHC动作电影" group-title="数字频道",CHC动作电影 +https://stream.freetv.fun/2f2e29b8759a2458730dc1f3686024472691952a50e787fe075944d0cb17f36e.ctv$LR•IPV4•30『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="CHC动作电影" group-title="数字频道",CHC动作电影 +http://eastscreen.tv/ooooo.php$LR•IPV4•30『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="CHC动作电影" group-title="数字频道",CHC动作电影 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=4654&tk=23a9aca1f79f$LR•IPV4•30『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="CHC动作电影" group-title="数字频道",CHC动作电影 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226329/1.m3u8$LR•IPV6•30『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="CHC动作电影" group-title="数字频道",CHC动作电影 +http://[2409:8087:1a01:df::4021]:80/TVOD/88888888/224/3221225555/main.m3u8$LR•IPV6•30『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="CHC动作电影" group-title="数字频道",CHC动作电影 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6380763222d00/index.m3u8?m3u8_level=2$LR•IPV6•30『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="CHC动作电影" group-title="数字频道",CHC动作电影 +http://[2409:8087:3c02:0021:0000:0001:0000:100a]:6410/shandong_cabletv.live.zte.com////CHANNEL00002030/index.m3u8?IASHttpSessionId=$LR•IPV6•30『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="CHC动作电影" group-title="数字频道",CHC动作电影 +http://58.19.38.162:9901/tsfile/live/1005_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•30『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="CHC动作电影" group-title="数字频道",CHC动作电影 +http://58.19.38.162:9901/tsfile/live/1005_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•30『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="CHC动作电影" group-title="数字频道",CHC动作电影 +http://z.b.bkpcp.top/m.php?id=dzdy$LR•IPV4•30『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="CHC动作电影" group-title="数字频道",CHC动作电影 +http://mg.hmysapp.cn:177/ckmg/zb.php?id=chcdzdy$LR•IPV4•30『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="CHC动作电影" group-title="数字频道",CHC动作电影 +http://t.061899.xyz/tl/dq.php?id=chcdzdy$LR•IPV4•30『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="CHC动作电影" group-title="数字频道",CHC动作电影 +http://101.35.240.114:88/live.php?id=CHC动作电影$LR•IPV4•30『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="CHC动作电影" group-title="数字频道",CHC动作电影 +http://113.195.172.192:808/hls/114/index.m3u8$LR•IPV4•30『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="CHC动作电影" group-title="数字频道",CHC动作电影 +http://148.135.93.213:81/live.php?id=CHC动作电影$LR•IPV4•30『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="CHC动作电影" group-title="数字频道",CHC动作电影 +http://goo.bkpcp.top/mg/dzdy$LR•IPV4•30『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="CHC动作电影" group-title="数字频道",CHC动作电影 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226329/1.m3u8$LR•IPV6•30『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="CHC动作电影" group-title="数字频道",CHC动作电影 +http://[2409:8087:1a01:df::4021]:80/TVOD/88888888/224/3221225555/main.m3u8$LR•IPV6•30『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="CHC动作电影" group-title="数字频道",CHC动作电影 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6380763222d00/index.m3u8?m3u8_level=2$LR•IPV6•30『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="CHC动作电影" group-title="数字频道",CHC动作电影 +http://[2409:8087:3c02:0021:0000:0001:0000:100a]:6410/shandong_cabletv.live.zte.com////CHANNEL00002030/index.m3u8?IASHttpSessionId=$LR•IPV6•30『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="CHC动作电影" group-title="数字频道",CHC动作电影 +http://data.3g.yy.com/live/hls/1382735573/1382735573$LR•IPV4•30『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="CHC动作电影" group-title="数字频道",CHC动作电影 +https://www.freetv.top/migu/644368714.m3u8?migutoken=2e48d18419793654f347e8ca29e0028ce9f3eaaa7a108b006304178b8f790f34908f8a09bbb8f4b8b8abcf36e2341f1043dde8719cf4927fcd0dcde4667f8b91e68e820314791d9b70452862c9$LR•IPV4•30『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="CHC动作电影" group-title="数字频道",CHC动作电影 +https://stream1.freetv.fun/chcdong-zuo-dian-ying-4.ctv$LR•IPV4•30『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="CHC动作电影" group-title="数字频道",CHC动作电影 +https://stream.freetv.fun/2f2e29b8759a2458730dc1f3686024472691952a50e787fe075944d0cb17f36e.ctv$LR•IPV4•30『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="CHC动作电影" group-title="数字频道",CHC动作电影 +http://eastscreen.tv/ooooo.php$LR•IPV4•30『线路30』 +#EXTINF:-1 tvg-id="1" tvg-name="CHC家庭影院" group-title="数字频道",CHC家庭影院 +http://113.195.172.192:808/hls/113/index.m3u8$LR•IPV4•29『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="CHC家庭影院" group-title="数字频道",CHC家庭影院 +http://sport.pendy.dpdns.org/migu/644368373?token=BCDxUPC2aE0y0iz8JYzYhWA21b8DBPXm4Tw9nHe0T-ftD1MRmsBCXZPPiHXeDz7cNybVmmXGazeeaHKpxyYgEA$LR•IPV4•29『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="CHC家庭影院" group-title="数字频道",CHC家庭影院 +https://mgtv.ottiptv.cc/migu/644368373.m3u8?migutoken=02f6073a65cfa4b76b8198be1bbc271ad8399a5a7eba28b6d2b5a1fd269162f4e5d78202d5515f6a21832743887f1e19f9c93e34c348532e77d8b083727e41097fb2ee9c27f1606dea802ad3d5$LR•IPV4•29『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="CHC家庭影院" group-title="数字频道",CHC家庭影院 +http://z.b.bkpcp.top/m.php?id=chcjtyy$LR•IPV4•29『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="CHC家庭影院" group-title="数字频道",CHC家庭影院 +http://gat.bkpcp.top/ymg.php?id=jtyy$LR•IPV4•29『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="CHC家庭影院" group-title="数字频道",CHC家庭影院 +http://goo.bkpcp.top/mg/jtyy$LR•IPV4•29『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="CHC家庭影院" group-title="数字频道",CHC家庭影院 +https://www.freetv.top/migu/644368373.m3u8?migutoken=b9d9d0ba0208e949cf0736455b86290b2d1d2ff4727f523b7117dde6eb883cb4582c5ce1519685e57d54bfb562057c10a00dde58bb674d8600fd2d918b8cb440294e083e7b8f19e0dbcc9250d8$LR•IPV4•29『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="CHC家庭影院" group-title="数字频道",CHC家庭影院 +https://stream1.freetv.fun/chcjia-ting-ying-yuan-1.ctv$LR•IPV4•29『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="CHC家庭影院" group-title="数字频道",CHC家庭影院 +https://migu.188766.xyz/?migutoken=2e013b8093cbb8e2f8f262307962476b&id=CHC%E5%AE%B6%E5%BA%AD%E5%BD%B1%E9%99%A2&type=yy$LR•IPV4•29『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="CHC家庭影院" group-title="数字频道",CHC家庭影院 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=3027&tk=23a9aca1f79f$LR•IPV4•29『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="CHC家庭影院" group-title="数字频道",CHC家庭影院 +http://61.162.52.6:8088/newlive/live/hls/60/live.m3u8$LR•IPV4•29『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="CHC家庭影院" group-title="数字频道",CHC家庭影院 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63807601b19dd/index.m3u8?m3u8_level=2$LR•IPV6•29『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="CHC家庭影院" group-title="数字频道",CHC家庭影院 +http://58.19.38.162:9901/tsfile/live/1006_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•29『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="CHC家庭影院" group-title="数字频道",CHC家庭影院 +http://58.19.38.162:9901/tsfile/live/1006_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•29『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="CHC家庭影院" group-title="数字频道",CHC家庭影院 +http://z.b.bkpcp.top/m.php?id=jtyy$LR•IPV4•29『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="CHC家庭影院" group-title="数字频道",CHC家庭影院 +http://mg.hmysapp.cn:177/ckmg/zb.php?id=chcjtdy$LR•IPV4•29『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="CHC家庭影院" group-title="数字频道",CHC家庭影院 +http://t.061899.xyz/tl/dq.php?id=chcjtdy$LR•IPV4•29『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="CHC家庭影院" group-title="数字频道",CHC家庭影院 +http://148.135.93.213/live.php?id=CHC家庭影院$LR•IPV4•29『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="CHC家庭影院" group-title="数字频道",CHC家庭影院 +http://113.195.172.192:808/hls/113/index.m3u8$LR•IPV4•29『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="CHC家庭影院" group-title="数字频道",CHC家庭影院 +http://148.135.93.213:81/live.php?id=CHC家庭影院$LR•IPV4•29『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="CHC家庭影院" group-title="数字频道",CHC家庭影院 +http://z.b.bkpcp.top/m.php?id=chcjtyy$LR•IPV4•29『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="CHC家庭影院" group-title="数字频道",CHC家庭影院 +http://gat.bkpcp.top/ymg.php?id=jtyy$LR•IPV4•29『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="CHC家庭影院" group-title="数字频道",CHC家庭影院 +http://goo.bkpcp.top/mg/jtyy$LR•IPV4•29『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="CHC家庭影院" group-title="数字频道",CHC家庭影院 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63807601b19dd/index.m3u8?m3u8_level=2$LR•IPV6•29『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="CHC家庭影院" group-title="数字频道",CHC家庭影院 +https://www.freetv.top/migu/644368373.m3u8?migutoken=b9d9d0ba0208e949cf0736455b86290b2d1d2ff4727f523b7117dde6eb883cb4582c5ce1519685e57d54bfb562057c10a00dde58bb674d8600fd2d918b8cb440294e083e7b8f19e0dbcc9250d8$LR•IPV4•29『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="CHC家庭影院" group-title="数字频道",CHC家庭影院 +https://stream1.freetv.fun/chcjia-ting-ying-yuan-1.ctv$LR•IPV4•29『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="CHC家庭影院" group-title="数字频道",CHC家庭影院 +http://sport.pendy.dpdns.org/migu/644368373?token=BCDxUPC2aE0y0iz8JYzYhWA21b8DBPXm4Tw9nHe0T-ftD1MRmsBCXZPPiHXeDz7cNybVmmXGazeeaHKpxyYgEA$LR•IPV4•29『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="CHC家庭影院" group-title="数字频道",CHC家庭影院 +https://mgtv.ottiptv.cc/migu/644368373.m3u8?migutoken=02f6073a65cfa4b76b8198be1bbc271ad8399a5a7eba28b6d2b5a1fd269162f4e5d78202d5515f6a21832743887f1e19f9c93e34c348532e77d8b083727e41097fb2ee9c27f1606dea802ad3d5$LR•IPV4•29『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="CHC家庭影院" group-title="数字频道",CHC家庭影院 +https://migu.188766.xyz/?migutoken=2e013b8093cbb8e2f8f262307962476b&id=CHC%E5%AE%B6%E5%BA%AD%E5%BD%B1%E9%99%A2&type=yy$LR•IPV4•29『线路29』 +#EXTINF:-1 tvg-id="1" tvg-name="黑莓电影" group-title="数字频道",黑莓电影 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010073$LR•IPV4•24『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="黑莓电影" group-title="数字频道",黑莓电影 +https://fenghuang.tv12.xyz/29.m3u8$LR•IPV4•24『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="黑莓电影" group-title="数字频道",黑莓电影 +http://36.105.100.208:35455/itv/1000000004000019624.m3u8?cdn=ystenlive$LR•IPV4•24『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="黑莓电影" group-title="数字频道",黑莓电影 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=0688&tk=23a9aca1f79f$LR•IPV4•24『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="黑莓电影" group-title="数字频道",黑莓电影 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226939/1.m3u8$LR•IPV6•24『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="黑莓电影" group-title="数字频道",黑莓电影 +http://[2409:8087:1a01:df::4001]:80/TVOD/88888888/224/3221225681/main.m3u8$LR•IPV6•24『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="黑莓电影" group-title="数字频道",黑莓电影 +http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225666/index.m3u8$LR•IPV6•24『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="黑莓电影" group-title="数字频道",黑莓电影 +http://[2409:8087:2001:20:2800:0:df6e:eb08]/ott.mobaibox.com/PLTV/3/224/3221227520/index.m3u8$LR•IPV6•24『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="黑莓电影" group-title="数字频道",黑莓电影 +http://[2409:8087:1:20:20::27]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226939/1.m3u8$LR•IPV6•24『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="黑莓电影" group-title="数字频道",黑莓电影 +http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225764/2/index.m3u8$LR•IPV6•24『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="黑莓电影" group-title="数字频道",黑莓电影 +http://[2409:8087:1a15:10d1::36]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225743/index.m3u8$LR•IPV6•24『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="黑莓电影" group-title="数字频道",黑莓电影 +http://[2409:8087:74d9:21::6]:80/270000001128/9900000095/index.m3u8$LR•IPV6•24『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="黑莓电影" group-title="数字频道",黑莓电影 +http://home.wwang.pw:35455/itv/1000000004000019624.m3u8?cdn=ystenlive$LR•IPV4•24『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="黑莓电影" group-title="数字频道",黑莓电影 +http://39.135.133.138/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225743/index.m3u8$LR•IPV4•24『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="黑莓电影" group-title="数字频道",黑莓电影 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010073$LR•IPV4•24『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="黑莓电影" group-title="数字频道",黑莓电影 +https://epg.pw/stream/ffcb6572863f0745a7369fbd9d901f1dfd0ab8fab8bad8bebb4e01c90b303c47.m3u8$LR•IPV4•24『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="黑莓电影" group-title="数字频道",黑莓电影 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226939/1.m3u8$LR•IPV6•24『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="黑莓电影" group-title="数字频道",黑莓电影 +http://[2409:8087:1a01:df::4001]:80/TVOD/88888888/224/3221225681/main.m3u8$LR•IPV6•24『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="黑莓电影" group-title="数字频道",黑莓电影 +http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225666/index.m3u8$LR•IPV6•24『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="黑莓电影" group-title="数字频道",黑莓电影 +http://[2409:8087:2001:20:2800:0:df6e:eb08]/ott.mobaibox.com/PLTV/3/224/3221227520/index.m3u8$LR•IPV6•24『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="黑莓电影" group-title="数字频道",黑莓电影 +http://[2409:8087:1:20:20::27]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226939/1.m3u8$LR•IPV6•24『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="黑莓电影" group-title="数字频道",黑莓电影 +http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225764/2/index.m3u8$LR•IPV6•24『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="黑莓电影" group-title="数字频道",黑莓电影 +https://fenghuang.tv12.xyz/29.m3u8$LR•IPV4•24『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="黑莓电影" group-title="数字频道",黑莓电影 +http://[2409:8087:1a15:10d1::36]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225743/index.m3u8$LR•IPV6•24『线路24』 +#EXTINF:-1 tvg-id="1" tvg-name="黑莓动画" group-title="数字频道",黑莓动画 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010002$LR•IPV4•21『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="黑莓动画" group-title="数字频道",黑莓动画 +http://otttv.bj.chinamobile.com/PLTV/88888888/224/3221226935/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EUc618y1E09GbQwwuOzEKaQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV4•21『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="黑莓动画" group-title="数字频道",黑莓动画 +http://ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225662/index.m3u8$LR•IPV4•21『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="黑莓动画" group-title="数字频道",黑莓动画 +http://36.105.100.208:35455/itv/1000000004000021734.m3u8?cdn=ystenlive$LR•IPV4•21『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="黑莓动画" group-title="数字频道",黑莓动画 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=2912&tk=e503191f8e20$LR•IPV4•21『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="黑莓动画" group-title="数字频道",黑莓动画 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226935/1.m3u8$LR•IPV6•21『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="黑莓动画" group-title="数字频道",黑莓动画 +http://[2409:8087:1a01:df::4007]:80/TVOD/88888888/224/3221225529/main.m3u8$LR•IPV6•21『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="黑莓动画" group-title="数字频道",黑莓动画 +http://[2409:8087:1a0b:df::4006]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225662/index.m3u8$LR•IPV6•21『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="黑莓动画" group-title="数字频道",黑莓动画 +http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010002/1.m3u8$LR•IPV6•21『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="黑莓动画" group-title="数字频道",黑莓动画 +http://[2409:8087:5e08:25::16]:6610/200000001898/460000089800010002/1.m3u8$LR•IPV6•21『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="黑莓动画" group-title="数字频道",黑莓动画 +http://[2409:8087:74d9:21::6]:80/270000001128/9900000096/index.m3u8$LR•IPV6•21『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="黑莓动画" group-title="数字频道",黑莓动画 +http://home.wwang.pw:35455/itv/1000000004000021734.m3u8?cdn=ystenlive$LR•IPV4•21『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="黑莓动画" group-title="数字频道",黑莓动画 +http://home.wwang.pw:35455/itv/1000000004000021734.m3u8?cdn=ystenlive$LR•IPV4•21『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="黑莓动画" group-title="数字频道",黑莓动画 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010002$LR•IPV4•21『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="黑莓动画" group-title="数字频道",黑莓动画 +http://otttv.bj.chinamobile.com/PLTV/88888888/224/3221226935/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EUc618y1E09GbQwwuOzEKaQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV4•21『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="黑莓动画" group-title="数字频道",黑莓动画 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226935/1.m3u8$LR•IPV6•21『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="黑莓动画" group-title="数字频道",黑莓动画 +http://[2409:8087:1a01:df::4007]:80/TVOD/88888888/224/3221225529/main.m3u8$LR•IPV6•21『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="黑莓动画" group-title="数字频道",黑莓动画 +http://ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225662/index.m3u8$LR•IPV4•21『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="黑莓动画" group-title="数字频道",黑莓动画 +http://[2409:8087:1a0b:df::4006]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225662/index.m3u8$LR•IPV6•21『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="黑莓动画" group-title="数字频道",黑莓动画 +http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010002/1.m3u8$LR•IPV6•21『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="黑莓动画" group-title="数字频道",黑莓动画 +http://[2409:8087:5e08:25::16]:6610/200000001898/460000089800010002/1.m3u8$LR•IPV6•21『线路21』 +#EXTINF:-1 tvg-id="1" tvg-name="卡酷少儿" group-title="数字频道",卡酷少儿 +https://live.mxdyeah.top/live.php?id=bjkakuSD$LR•IPV4•16『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="卡酷少儿" group-title="数字频道",卡酷少儿 +https://migu.188766.xyz/?migutoken=1023983db6b5249e61d4950c1654cd84&id=%E5%8C%97%E4%BA%AC%E5%8D%A1%E9%85%B7%E5%B0%91%E5%84%BF&type=yy$LR•IPV4•16『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="卡酷少儿" group-title="数字频道",卡酷少儿 +https://cc06.tv12.xyz/29.m3u8$LR•IPV4•16『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="卡酷少儿" group-title="数字频道",卡酷少儿 +http://[2409:8087:1a15:10d1::33]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225654/index.m3u8$LR•IPV6•16『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="卡酷少儿" group-title="数字频道",卡酷少儿 +http://[2409:8087:5e08:25::16]:6610/200000001898/460000089800010081/1.m3u8$LR•IPV6•16『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="卡酷少儿" group-title="数字频道",卡酷少儿 +http://[2409:8087:74d9:21::6]:80/270000001128/9900000040/index.m3u8$LR•IPV6•16『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="卡酷少儿" group-title="数字频道",卡酷少儿 +http://ygbh.site/php/bfgd.php?id=106$LR•IPV4•16『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="卡酷少儿" group-title="数字频道",卡酷少儿 +https://cc06.tv12.xyz/29.m3u8$LR•IPV4•16『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="卡酷少儿" group-title="数字频道",卡酷少儿 +https://zby.130519.xyz/PLTV/11/224/3221226019/index.m3u8$LR•IPV4•16『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="卡酷少儿" group-title="数字频道",卡酷少儿 +http://home.wwang.pw:35455/itv/5000000011000265008.m3u8?cdn=bestzb$LR•IPV4•16『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="卡酷少儿" group-title="数字频道",卡酷少儿 +http://rrs01.hw.gmcc.net:8088/PLTV/81/224/3221226677/1.m3u8$LR•IPV4•16『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="卡酷少儿" group-title="数字频道",卡酷少儿 +http://[2409:8087:1a15:10d1::33]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225654/index.m3u8$LR•IPV6•16『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="卡酷少儿" group-title="数字频道",卡酷少儿 +http://[2409:8087:5e08:25::16]:6610/200000001898/460000089800010081/1.m3u8$LR•IPV6•16『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="卡酷少儿" group-title="数字频道",卡酷少儿 +https://migu.188766.xyz/?migutoken=1023983db6b5249e61d4950c1654cd84&id=%E5%8C%97%E4%BA%AC%E5%8D%A1%E9%85%B7%E5%B0%91%E5%84%BF&type=yy$LR•IPV4•16『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="卡酷少儿" group-title="数字频道",卡酷少儿 +https://cc06.tv12.xyz/29.m3u8$LR•IPV4•16『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="卡酷少儿" group-title="数字频道",卡酷少儿 +http://58.57.40.22:9901/tsfile/live/1060_1.m3u8$LR•IPV4•16『线路16』 +#EXTINF:-1 tvg-id="1" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +http://106.118.70.125:9901/tsfile/live/1013_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•44『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010118$LR•IPV4•44『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +http://z.b.bkpcp.top/m.php?id=ymkt$LR•IPV4•44『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +https://live.lalifeier.eu.org/jstv/ymkt.m3u8?t=1745796321&key=a52fbb40a8c25dfa0feef5a1b4b5910d$LR•IPV4•44『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +https://www.freetv.top/migu/626064703.m3u8?migutoken=deac6c5275081b54ad412a195e499b7c0cb8f04446b6c80aaa9d3eb1063d620261c68202d59aea05060007b58a62d5d208f16379d861d6f1627c10c9dd894f0bf7e3ca97b04696255e193e871c$LR•IPV4•44『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +https://stream1.freetv.fun/you-man-qia-tong-11.m3u8$LR•IPV4•44『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226406/index.m3u8$LR•IPV4•44『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +http://goo.bkpcp.top/mg/ymkt$LR•IPV4•44『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +http://36.105.100.208:35455/itv/1000000002000010063.m3u8?cdn=ystenlive$LR•IPV4•44『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=4218&tk=2aca1ad9a849$LR•IPV4•44『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +http://58.221.214.82:9901/tsfile/live/0008_2.m3u8$LR•IPV4•44『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +http://139.129.231.228:50060/rtp/239.21.1.50:5002$LR•IPV4•44『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +http://110.53.218.182:9902/tsfile/live/1006_1.m3u8$LR•IPV4•44『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/2/224/3221225656/2.m3u8$LR•IPV6•44『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226932/1.m3u8$LR•IPV6•44『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225656/index.m3u8$LR•IPV6•44『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +http://[2409:8087:74d9:21::6]:80/270000001128/9900000070/index.m3u8$LR•IPV6•44『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225656/index.m3u8$LR•IPV4•44『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +https://epg.pw/stream/57e3fc6914792be5173e3d60559c5e54f9adc80cccf70eaf6994660d3b10297c.m3u8$LR•IPV4•44『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +http://mg.hmysapp.cn:177/ckmg/zb.php?id=ymkt$LR•IPV4•44『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +http://t.061899.xyz/tl/dq.php?id=ymkt$LR•IPV4•44『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +http://home.wwang.pw:35455/itv/1000000002000010063.m3u8?cdn=ystenlive$LR•IPV4•44『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +http://106.118.70.125:9901/tsfile/live/1013_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•44『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010118$LR•IPV4•44『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +http://z.b.bkpcp.top/m.php?id=ymkt$LR•IPV4•44『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/2/224/3221225656/2.m3u8$LR•IPV6•44『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +https://live.lalifeier.eu.org/jstv/ymkt.m3u8?t=1745796321&key=a52fbb40a8c25dfa0feef5a1b4b5910d$LR•IPV4•44『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +https://www.freetv.top/migu/626064703.m3u8?migutoken=deac6c5275081b54ad412a195e499b7c0cb8f04446b6c80aaa9d3eb1063d620261c68202d59aea05060007b58a62d5d208f16379d861d6f1627c10c9dd894f0bf7e3ca97b04696255e193e871c$LR•IPV4•44『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +https://stream1.freetv.fun/you-man-qia-tong-11.m3u8$LR•IPV4•44『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226932/1.m3u8$LR•IPV6•44『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226406/index.m3u8$LR•IPV4•44『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +http://goo.bkpcp.top/mg/ymkt$LR•IPV4•44『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225656/index.m3u8$LR•IPV6•44『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +http://106.118.70.125:9901/tsfile/live/1013_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•44『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010118$LR•IPV4•44『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +http://z.b.bkpcp.top/m.php?id=ymkt$LR•IPV4•44『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/2/224/3221225656/2.m3u8$LR•IPV6•44『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +https://live.lalifeier.eu.org/jstv/ymkt.m3u8?t=1745796321&key=a52fbb40a8c25dfa0feef5a1b4b5910d$LR•IPV4•44『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +https://www.freetv.top/migu/626064703.m3u8?migutoken=deac6c5275081b54ad412a195e499b7c0cb8f04446b6c80aaa9d3eb1063d620261c68202d59aea05060007b58a62d5d208f16379d861d6f1627c10c9dd894f0bf7e3ca97b04696255e193e871c$LR•IPV4•44『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +https://stream1.freetv.fun/you-man-qia-tong-11.m3u8$LR•IPV4•44『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226932/1.m3u8$LR•IPV6•44『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226406/index.m3u8$LR•IPV4•44『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +http://goo.bkpcp.top/mg/ymkt$LR•IPV4•44『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="优漫卡通" group-title="数字频道",优漫卡通 +http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225656/index.m3u8$LR•IPV6•44『线路44』 +#EXTINF:-1 tvg-id="1" tvg-name="哈哈炫动" group-title="数字频道",哈哈炫动 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010117$LR•IPV4•38『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="哈哈炫动" group-title="数字频道",哈哈炫动 +https://live.lalifeier.eu.org/kankanews/hhxd.m3u8?t=1746292937&key=b5431ae4fa8b2429332dae8604165c95$LR•IPV4•38『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="哈哈炫动" group-title="数字频道",哈哈炫动 +http://rrs01.hw.gmcc.net:8088/PLTV/81/224/3221226703/1.m3u8$LR•IPV4•38『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="哈哈炫动" group-title="数字频道",哈哈炫动 +http://61.138.128.226:19901/tsfile/live/1016_1.m3u8$LR•IPV4•38『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="哈哈炫动" group-title="数字频道",哈哈炫动 +http://36.105.100.208:35455/itv/5000000011000031123.m3u8?cdn=bestzb$LR•IPV4•38『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="哈哈炫动" group-title="数字频道",哈哈炫动 +http://60.29.124.66:6080/hls/62/index.m3u8$LR•IPV4•38『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="哈哈炫动" group-title="数字频道",哈哈炫动 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=7248&tk=23a9aca1f79f$LR•IPV4•38『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="哈哈炫动" group-title="数字频道",哈哈炫动 +http://120.238.94.10:9901/tsfile/live/1037_1.m3u8$LR•IPV4•38『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="哈哈炫动" group-title="数字频道",哈哈炫动 +http://139.129.231.228:50060/rtp/239.21.1.51:5002$LR•IPV4•38『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="哈哈炫动" group-title="数字频道",哈哈炫动 +http://120.55.49.231:3095/rtp/233.50.201.74:5140$LR•IPV4•38『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="哈哈炫动" group-title="数字频道",哈哈炫动 +http://139.196.151.191/rtp/239.45.1.55:5140$LR•IPV4•38『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="哈哈炫动" group-title="数字频道",哈哈炫动 +https://stream1.freetv.fun/ipv6-ha-ha-xuan-dong-10.m3u8$LR•IPV4•38『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="哈哈炫动" group-title="数字频道",哈哈炫动 +http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/2/224/3221225657/2.m3u8$LR•IPV6•38『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="哈哈炫动" group-title="数字频道",哈哈炫动 +http://[2409:8087:74d9:21::6]/000000001000PLTV/88888888/224/3221226618/index.m3u8$LR•IPV6•38『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="哈哈炫动" group-title="数字频道",哈哈炫动 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226931/1.m3u8$LR•IPV6•38『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="哈哈炫动" group-title="数字频道",哈哈炫动 +http://[2409:8087:1a0b:df::4001]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225657/index.m3u8$LR•IPV6•38『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="哈哈炫动" group-title="数字频道",哈哈炫动 +http://[2409:8087:1a15:10d1::39]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225657/index.m3u8$LR•IPV6•38『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="哈哈炫动" group-title="数字频道",哈哈炫动 +http://[2409:8087:5e08:25::16]:6610/200000001898/460000089800010117/1.m3u8$LR•IPV6•38『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="哈哈炫动" group-title="数字频道",哈哈炫动 +http://[2409:8087:74d9:21::6]:80/270000001128/9900000069/index.m3u8$LR•IPV6•38『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="哈哈炫动" group-title="数字频道",哈哈炫动 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225657/index.m3u8$LR•IPV4•38『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="哈哈炫动" group-title="数字频道",哈哈炫动 +https://zby.130519.xyz/PLTV/11/224/3221226161/index.m3u8$LR•IPV4•38『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="哈哈炫动" group-title="数字频道",哈哈炫动 +http://home.wwang.pw:35455/itv/5000000011000031123.m3u8?cdn=bestzb$LR•IPV4•38『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="哈哈炫动" group-title="数字频道",哈哈炫动 +http://111.22.153.159:35455/itv/5000000011000031123.m3u8?cdn=bestzb$LR•IPV4•38『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="哈哈炫动" group-title="数字频道",哈哈炫动 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010117$LR•IPV4•38『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="哈哈炫动" group-title="数字频道",哈哈炫动 +http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/2/224/3221225657/2.m3u8$LR•IPV6•38『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="哈哈炫动" group-title="数字频道",哈哈炫动 +http://[2409:8087:74d9:21::6]/000000001000PLTV/88888888/224/3221226618/index.m3u8$LR•IPV6•38『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="哈哈炫动" group-title="数字频道",哈哈炫动 +https://live.lalifeier.eu.org/kankanews/hhxd.m3u8?t=1746292937&key=b5431ae4fa8b2429332dae8604165c95$LR•IPV4•38『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="哈哈炫动" group-title="数字频道",哈哈炫动 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226931/1.m3u8$LR•IPV6•38『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="哈哈炫动" group-title="数字频道",哈哈炫动 +http://[2409:8087:1a0b:df::4001]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225657/index.m3u8$LR•IPV6•38『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="哈哈炫动" group-title="数字频道",哈哈炫动 +http://rrs01.hw.gmcc.net:8088/PLTV/81/224/3221226703/1.m3u8$LR•IPV4•38『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="哈哈炫动" group-title="数字频道",哈哈炫动 +http://[2409:8087:1a15:10d1::39]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225657/index.m3u8$LR•IPV6•38『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="哈哈炫动" group-title="数字频道",哈哈炫动 +http://[2409:8087:5e08:25::16]:6610/200000001898/460000089800010117/1.m3u8$LR•IPV6•38『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="哈哈炫动" group-title="数字频道",哈哈炫动 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010117$LR•IPV4•38『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="哈哈炫动" group-title="数字频道",哈哈炫动 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226931/1.m3u8$LR•IPV6•38『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="哈哈炫动" group-title="数字频道",哈哈炫动 +https://stream1.freetv.fun/ipv6-ha-ha-xuan-dong-10.m3u8$LR•IPV4•38『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="哈哈炫动" group-title="数字频道",哈哈炫动 +http://[2409:8087:1a15:10d1::39]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225657/index.m3u8$LR•IPV6•38『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="哈哈炫动" group-title="数字频道",哈哈炫动 +http://[2409:8087:5e08:25::16]:6610/200000001898/460000089800010117/1.m3u8$LR•IPV6•38『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="哈哈炫动" group-title="数字频道",哈哈炫动 +http://120.238.94.10:9901/tsfile/live/1037_1.m3u8$LR•IPV4•38『线路38』 +#EXTINF:-1 tvg-id="1" tvg-name="嘉佳卡通" group-title="数字频道",嘉佳卡通 +http://[2409:8087:5e00:24::1e]:6060/000000001000/1000000002000025964/1.m3u8$LR•IPV6•2『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="嘉佳卡通" group-title="数字频道",嘉佳卡通 +http://home.wwang.pw:35455/itv/1000000002000025964.m3u8?cdn=ystenlive$LR•IPV4•2『线路2』 +#EXTINF:-1 tvg-id="1" tvg-name="动漫秀场" group-title="数字频道",动漫秀场 +http://sh.lnott.top:880/dx110.m3u8$LR•IPV4•28『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="动漫秀场" group-title="数字频道",动漫秀场 +http://php.jdshipin.com/itv6.php?cid=bestzb&id=5000000011000031113$LR•IPV4•28『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="动漫秀场" group-title="数字频道",动漫秀场 +https://stream1.freetv.fun/ipv6-dong-man-xiu-chang-11.m3u8$LR•IPV4•28『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="动漫秀场" group-title="数字频道",动漫秀场 +https://live.v1.mk/api/bestv.php?id=dmxc8m/8000000$LR•IPV4•28『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="动漫秀场" group-title="数字频道",动漫秀场 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226608/index.m3u8$LR•IPV4•28『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="动漫秀场" group-title="数字频道",动漫秀场 +https://hls-gateway.vpstv.net/streams/708843.m3u8$LR•IPV4•28『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="动漫秀场" group-title="数字频道",动漫秀场 +http://36.105.100.208:35455/itv/5000000011000031113.m3u8?cdn=bestzb$LR•IPV4•28『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="动漫秀场" group-title="数字频道",动漫秀场 +http://120.55.49.231:3095/rtp/233.50.201.184:5140$LR•IPV4•28『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="动漫秀场" group-title="数字频道",动漫秀场 +http://139.196.151.191/rtp/239.45.3.134:5140$LR•IPV4•28『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="动漫秀场" group-title="数字频道",动漫秀场 +http://[2409:8087:74d9:21::6]/000000001000PLTV/88888888/224/3221226197/index.m3u8$LR•IPV6•28『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="动漫秀场" group-title="数字频道",动漫秀场 +http://[2409:8087:5e00:24::1e]:6060/000000001000/5000000011000031113/1.m3u8$LR•IPV6•28『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="动漫秀场" group-title="数字频道",动漫秀场 +http://111.22.153.159:35455/itv/5000000011000031113.m3u8?cdn=bestzb$LR•IPV4•28『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="动漫秀场" group-title="数字频道",动漫秀场 +http://home.wwang.pw:35455/itv/5000000011000031113.m3u8?cdn=bestzb$LR•IPV4•28『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="动漫秀场" group-title="数字频道",动漫秀场 +https://zby.130519.xyz/PLTV/11/224/3221225764/index.m3u8$LR•IPV4•28『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="动漫秀场" group-title="数字频道",动漫秀场 +http://36.129.204.117:9003//hls/67/index.m3u8$LR•IPV4•28『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="动漫秀场" group-title="数字频道",动漫秀场 +http://home.wwang.pw:35455/itv/5000000011000031113.m3u8?cdn=bestzb$LR•IPV4•28『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="动漫秀场" group-title="数字频道",动漫秀场 +http://php.jdshipin.com/itv6.php?cid=bestzb&id=5000000011000031113$LR•IPV4•28『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="动漫秀场" group-title="数字频道",动漫秀场 +http://[2409:8087:74d9:21::6]/000000001000PLTV/88888888/224/3221226197/index.m3u8$LR•IPV6•28『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="动漫秀场" group-title="数字频道",动漫秀场 +https://stream1.freetv.fun/ipv6-dong-man-xiu-chang-11.m3u8$LR•IPV4•28『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="动漫秀场" group-title="数字频道",动漫秀场 +https://live.v1.mk/api/bestv.php?id=dmxc8m/8000000$LR•IPV4•28『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="动漫秀场" group-title="数字频道",动漫秀场 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226608/index.m3u8$LR•IPV4•28『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="动漫秀场" group-title="数字频道",动漫秀场 +https://hls-gateway.vpstv.net/streams/708843.m3u8$LR•IPV4•28『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="动漫秀场" group-title="数字频道",动漫秀场 +http://php.jdshipin.com/itv6.php?cid=bestzb&id=5000000011000031113$LR•IPV4•28『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="动漫秀场" group-title="数字频道",动漫秀场 +http://[2409:8087:74d9:21::6]/000000001000PLTV/88888888/224/3221226197/index.m3u8$LR•IPV6•28『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="动漫秀场" group-title="数字频道",动漫秀场 +https://stream1.freetv.fun/ipv6-dong-man-xiu-chang-11.m3u8$LR•IPV4•28『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="动漫秀场" group-title="数字频道",动漫秀场 +https://live.v1.mk/api/bestv.php?id=dmxc8m/8000000$LR•IPV4•28『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="动漫秀场" group-title="数字频道",动漫秀场 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226608/index.m3u8$LR•IPV4•28『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="动漫秀场" group-title="数字频道",动漫秀场 +https://hls-gateway.vpstv.net/streams/708843.m3u8$LR•IPV4•28『线路28』 +#EXTINF:-1 tvg-id="1" tvg-name="新动漫" group-title="数字频道",新动漫 +http://sh.lnott.top:880/dx87.m3u8$LR•IPV4•22『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="新动漫" group-title="数字频道",新动漫 +http://nas.hssvm.com:8888/udp/225.1.1.216:5002$LR•IPV4•22『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="新动漫" group-title="数字频道",新动漫 +http://dassby.qqff.top:99/live/新动漫/index.m3u8$LR•IPV4•22『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="新动漫" group-title="数字频道",新动漫 +rtsp://115.153.245.70/PLTV/88888888/224/3221226973/86129004.smil$LR•IPV4•22『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="新动漫" group-title="数字频道",新动漫 +rtsp://115.153.254.81/PLTV/88888888/224/3221226973/86129004.smil$LR•IPV4•22『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="新动漫" group-title="数字频道",新动漫 +rtsp://115.153.240.228:554/PLTV/88888888/224/3221226973/86129004.smil$LR•IPV4•22『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="新动漫" group-title="数字频道",新动漫 +rtsp://115.153.212.72/PLTV/88888888/224/3221226973/86129004.smil$LR•IPV4•22『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="新动漫" group-title="数字频道",新动漫 +rtsp://115.153.230.145/PLTV/88888888/224/3221226973/86129004.smil$LR•IPV4•22『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="新动漫" group-title="数字频道",新动漫 +rtsp://115.153.247.80/PLTV/88888888/224/3221226973/86129004.smil$LR•IPV4•22『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="新动漫" group-title="数字频道",新动漫 +rtsp://115.153.222.112:554/PLTV/88888888/224/3221226973/86129004.smil$LR•IPV4•22『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="新动漫" group-title="数字频道",新动漫 +rtsp://115.153.233.154/PLTV/88888888/224/3221226973/86129004.smil$LR•IPV4•22『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="新动漫" group-title="数字频道",新动漫 +http://nas.hssvm.com:8888/udp/225.1.1.216:5002$LR•IPV4•22『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="新动漫" group-title="数字频道",新动漫 +http://dassby.qqff.top:99/live/新动漫/index.m3u8$LR•IPV4•22『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="新动漫" group-title="数字频道",新动漫 +rtsp://115.153.245.70/PLTV/88888888/224/3221226973/86129004.smil$LR•IPV4•22『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="新动漫" group-title="数字频道",新动漫 +rtsp://115.153.254.81/PLTV/88888888/224/3221226973/86129004.smil$LR•IPV4•22『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="新动漫" group-title="数字频道",新动漫 +rtsp://115.153.240.228:554/PLTV/88888888/224/3221226973/86129004.smil$LR•IPV4•22『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="新动漫" group-title="数字频道",新动漫 +rtsp://115.153.212.72/PLTV/88888888/224/3221226973/86129004.smil$LR•IPV4•22『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="新动漫" group-title="数字频道",新动漫 +rtsp://115.153.230.145/PLTV/88888888/224/3221226973/86129004.smil$LR•IPV4•22『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="新动漫" group-title="数字频道",新动漫 +rtsp://115.153.247.80/PLTV/88888888/224/3221226973/86129004.smil$LR•IPV4•22『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="新动漫" group-title="数字频道",新动漫 +rtsp://115.153.222.112:554/PLTV/88888888/224/3221226973/86129004.smil$LR•IPV4•22『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="新动漫" group-title="数字频道",新动漫 +rtsp://115.153.233.154/PLTV/88888888/224/3221226973/86129004.smil$LR•IPV4•22『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="新动漫" group-title="数字频道",新动漫 +http://nas.hssvm.com:8888/udp/225.1.1.216:5002$LR•IPV4•22『线路22』 +#EXTINF:-1 tvg-id="1" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +https://live.mxdyeah.top/live.php?id=jinyingSD$LR•IPV4•45『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +https://cc06.tv12.xyz/55.m3u8$LR•IPV4•45『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +http://106.118.70.125:9901/tsfile/live/1011_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•45『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +http://1.195.131.143:9901/tsfile/live/1005_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•45『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +http://nas.suntao.online:35455/bptv/10000100000000050000000004796942.m3u8$LR•IPV4•45『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +http://dsj.motem.top:8880/bptv/10000100000000050000000004796942.m3u8$LR•IPV4•45『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226624/index.m3u8$LR•IPV4•45『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221225744/index.m3u8$LR•IPV4•45『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +http://rrs01.hw.gmcc.net:8088/PLTV/81/224/3221226674/1.m3u8$LR•IPV4•45『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +https://cc06.tv12.xyz/55.m3u8$LR•IPV4•45『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +http://183.94.1.118:8801/tsfile/live/1000_1.m3u8$LR•IPV4•45『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +http://120.192.226.35:8009/hls/67/index.m3u8$LR•IPV4•45『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +http://61.138.128.226:19901/tsfile/live/1018_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•45『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +http://36.105.100.208:35455/itv/5000000006000040024.m3u8?cdn=bestzb$LR•IPV4•45『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=3187&tk=e503191f8e20$LR•IPV4•45『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +http://58.19.43.46:9901/tsfile/live/1000_1.m3u8$LR•IPV4•45『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +http://139.129.231.228:50060/rtp/239.21.1.48:5002$LR•IPV4•45『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +http://220.170.241.204:9901/tsfile/live/1005_1.m3u8$LR•IPV4•45『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +http://139.196.151.191:2051/rtp/239.45.3.118:5140$LR•IPV4•45『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +http://183.11.239.36:808/hls/69/index.m3u8$LR•IPV4•45『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/2/224/3221225653/2.m3u8$LR•IPV6•45『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226576/1.m3u8$LR•IPV6•45『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +http://[2409:8087:1a0b:df::4008]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225653/index.m3u8$LR•IPV6•45『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +http://[2409:8087:5e08:25::16]:6610/200000001898/460000089800010107/1.m3u8$LR•IPV6•45『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +http://[2409:8087:74d9:21::6]:80/270000001128/9900000039/index.m3u8$LR•IPV6•45『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +https://epg.pw/stream/c63a5626286e9017c57efde96337b54a1cb81a6626bb93f486fcbc1caadc7948.m3u8$LR•IPV4•45『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +https://epg.pw/stream/33c44b3d14a45ab0fbe06d98b6608a0067dd068ebb6bd8e4a931cb2e600f8548.m3u8$LR•IPV4•45『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +http://phoneqq.qing.mgtv.com/nn_live/nn_x64/dWlwPTEwNi4xNC4zOC41NSZ0ZXJtPTUmcWlkPSZjZG5leF9pZD1xcV9waG9uZV9saXZlJmNocz0mZGVmPTEmcz00YTI3ZDQ3OTcwOGU0OGFiOTgwYTY5M2FhY2VjMjA0MiZ1aWQ9JnV1aWQ9ZjI4MDY1ZGY2Mjk1MjBmOTVjNTE0MGFjZDRjZDJiN2MtNmEwZTI2Mzcmdj0yJmFzPTAmZXM9MTc1OTc4MDYyNw,,/JYKTMPP360.m3u8$LR•IPV4•45『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +http://ygbh.site/php/bfgd.php?id=105$LR•IPV4•45『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +https://cc06.tv12.xyz/55.m3u8$LR•IPV4•45『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +https://zby.130519.xyz/PLTV/11/224/3221226094/index.m3u8$LR•IPV4•45『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +http://itv.iptv1688.top:2016/itv.php?id=金鹰卡通$LR•IPV4•45『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +http://home.wwang.pw:35455/itv/5000000006000040024.m3u8?cdn=bestzb$LR•IPV4•45『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +http://tvbox6.icu/tv/mgtv.php?id=287$LR•IPV4•45『线路34』 +#EXTINF:-1 tvg-id="35" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/2/224/3221225653/2.m3u8$LR•IPV6•45『线路35』 +#EXTINF:-1 tvg-id="36" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +http://nas.suntao.online:35455/bptv/10000100000000050000000004796942.m3u8$LR•IPV4•45『线路36』 +#EXTINF:-1 tvg-id="37" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +http://dsj.motem.top:8880/bptv/10000100000000050000000004796942.m3u8$LR•IPV4•45『线路37』 +#EXTINF:-1 tvg-id="38" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226576/1.m3u8$LR•IPV6•45『线路38』 +#EXTINF:-1 tvg-id="39" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226624/index.m3u8$LR•IPV4•45『线路39』 +#EXTINF:-1 tvg-id="40" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221225744/index.m3u8$LR•IPV4•45『线路40』 +#EXTINF:-1 tvg-id="41" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +http://[2409:8087:1a0b:df::4008]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225653/index.m3u8$LR•IPV6•45『线路41』 +#EXTINF:-1 tvg-id="42" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +http://rrs01.hw.gmcc.net:8088/PLTV/81/224/3221226674/1.m3u8$LR•IPV4•45『线路42』 +#EXTINF:-1 tvg-id="43" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +http://[2409:8087:5e08:25::16]:6610/200000001898/460000089800010107/1.m3u8$LR•IPV6•45『线路43』 +#EXTINF:-1 tvg-id="44" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +https://cc06.tv12.xyz/55.m3u8$LR•IPV4•45『线路44』 +#EXTINF:-1 tvg-id="45" tvg-name="金鹰卡通" group-title="数字频道",金鹰卡通 +http://58.57.40.22:9901/tsfile/live/1059_1.m3u8$LR•IPV4•45『线路45』 +#EXTINF:-1 tvg-id="1" tvg-name="金鹰纪实" group-title="数字频道",金鹰纪实 +http://sh.lnott.top:880/dx96.m3u8$LR•IPV4•34『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="金鹰纪实" group-title="数字频道",金鹰纪实 +http://iptv.huuc.edu.cn/hls/gedocu.m3u8$LR•IPV4•34『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="金鹰纪实" group-title="数字频道",金鹰纪实 +https://stream1.freetv.fun/jin-ying-ji-shi-1.ctv$LR•IPV4•34『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="金鹰纪实" group-title="数字频道",金鹰纪实 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226668/index.m3u8$LR•IPV4•34『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="金鹰纪实" group-title="数字频道",金鹰纪实 +http://rrs01.hw.gmcc.net:8088/PLTV/81/224/3221226667/1.m3u8$LR•IPV4•34『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="金鹰纪实" group-title="数字频道",金鹰纪实 +https://hls-gateway.vpstv.net/streams/708834.m3u8$LR•IPV4•34『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="金鹰纪实" group-title="数字频道",金鹰纪实 +http://36.105.100.208:35455/itv/5000000011000031203.m3u8?cdn=bestzb$LR•IPV4•34『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="金鹰纪实" group-title="数字频道",金鹰纪实 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=4197&tk=f6cc1e0a0e1a$LR•IPV4•34『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="金鹰纪实" group-title="数字频道",金鹰纪实 +http://120.238.94.10:9901/tsfile/live/1059_1.m3u8$LR•IPV4•34『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="金鹰纪实" group-title="数字频道",金鹰纪实 +http://139.129.231.228:50060/rtp/239.21.1.170:5002$LR•IPV4•34『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="金鹰纪实" group-title="数字频道",金鹰纪实 +http://183.11.239.36:808/hls/171/index.m3u8$LR•IPV4•34『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="金鹰纪实" group-title="数字频道",金鹰纪实 +http://116.128.242.83:9901/tsfile/live/1001_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•34『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="金鹰纪实" group-title="数字频道",金鹰纪实 +http://139.196.151.191/rtp/239.45.1.45:5140$LR•IPV4•34『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="金鹰纪实" group-title="数字频道",金鹰纪实 +http://121.19.134.222:808/tsfile/live/1037_1.m3u8$LR•IPV4•34『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="金鹰纪实" group-title="数字频道",金鹰纪实 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226572/1.m3u8$LR•IPV6•34『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="金鹰纪实" group-title="数字频道",金鹰纪实 +http://[2409:8087:3c02:0021:0000:0001:0000:100a]:6410/shandong_cabletv.live.zte.com////CHANNEL00000334/index.m3u8?IASHttpSessionId=$LR•IPV6•34『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="金鹰纪实" group-title="数字频道",金鹰纪实 +http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888910/224/3221225595/index.m3u8?fmt=ts2hls$LR•IPV6•34『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="金鹰纪实" group-title="数字频道",金鹰纪实 +http://[2409:8087:5e08:25::16]:6610/200000001898/460000089800010106/1.m3u8$LR•IPV6•34『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="金鹰纪实" group-title="数字频道",金鹰纪实 +http://[2409:8087:5e00:24::1e]:6060/000000001000/5000000011000031203/1.m3u8$LR•IPV6•34『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="金鹰纪实" group-title="数字频道",金鹰纪实 +https://epg.pw/stream/bff1174f45465dde57e23d7f6a931dd08a6673961ffda6a7590b07e46e2afb7a.m3u8$LR•IPV4•34『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="金鹰纪实" group-title="数字频道",金鹰纪实 +https://epg.pw/stream/b460daa1c23bd0e46e0c55da4fd13bec726945cd2ddd2521a39cb491daa60134.m3u8$LR•IPV4•34『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="金鹰纪实" group-title="数字频道",金鹰纪实 +http://rrs01.hw.gmcc.net:8088/PLTV/81/224/3221226667/1.m3u8$LR•IPV4•34『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="金鹰纪实" group-title="数字频道",金鹰纪实 +http://home.wwang.pw:35455/itv/5000000011000031203.m3u8?cdn=bestzb$LR•IPV4•34『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="金鹰纪实" group-title="数字频道",金鹰纪实 +http://iptv.huuc.edu.cn/hls/gedocu.m3u8$LR•IPV4•34『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="金鹰纪实" group-title="数字频道",金鹰纪实 +http://tvbox6.icu/tv/mgtv.php?id=316$LR•IPV4•34『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="金鹰纪实" group-title="数字频道",金鹰纪实 +http://iptv.huuc.edu.cn/hls/gedocu.m3u8$LR•IPV4•34『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="金鹰纪实" group-title="数字频道",金鹰纪实 +https://stream1.freetv.fun/jin-ying-ji-shi-1.ctv$LR•IPV4•34『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="金鹰纪实" group-title="数字频道",金鹰纪实 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226572/1.m3u8$LR•IPV6•34『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="金鹰纪实" group-title="数字频道",金鹰纪实 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226668/index.m3u8$LR•IPV4•34『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="金鹰纪实" group-title="数字频道",金鹰纪实 +http://[2409:8087:3c02:0021:0000:0001:0000:100a]:6410/shandong_cabletv.live.zte.com////CHANNEL00000334/index.m3u8?IASHttpSessionId=$LR•IPV6•34『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="金鹰纪实" group-title="数字频道",金鹰纪实 +http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888910/224/3221225595/index.m3u8?fmt=ts2hls$LR•IPV6•34『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="金鹰纪实" group-title="数字频道",金鹰纪实 +http://rrs01.hw.gmcc.net:8088/PLTV/81/224/3221226667/1.m3u8$LR•IPV4•34『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="金鹰纪实" group-title="数字频道",金鹰纪实 +https://hls-gateway.vpstv.net/streams/708834.m3u8$LR•IPV4•34『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="金鹰纪实" group-title="数字频道",金鹰纪实 +http://[2409:8087:5e08:25::16]:6610/200000001898/460000089800010106/1.m3u8$LR•IPV6•34『线路34』 +#EXTINF:-1 tvg-id="1" tvg-name="梨园频道" group-title="数字频道",梨园频道 +http://www.lizhinas.top:1009/rtp/239.252.220.179:5140$LR•IPV4 +#EXTINF:-1 tvg-id="1" tvg-name="欢笑剧场" group-title="数字频道",欢笑剧场 +http://sh.lnott.top:880/hx.m3u8$LR•IPV4•26『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="欢笑剧场" group-title="数字频道",欢笑剧场 +http://223.167.245.215:8001/rtp/239.45.3.196:5140$LR•IPV4•26『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="欢笑剧场" group-title="数字频道",欢笑剧场 +http://z.b.bkpcp.top/m.php?id=hxjc$LR•IPV4•26『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="欢笑剧场" group-title="数字频道",欢笑剧场 +http://gat.bkpcp.top/ymg.php?id=hxjc$LR•IPV4•26『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="欢笑剧场" group-title="数字频道",欢笑剧场 +http://goo.bkpcp.top/mg/hxjc$LR•IPV4•26『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="欢笑剧场" group-title="数字频道",欢笑剧场 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226704/index.m3u8$LR•IPV4•26『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="欢笑剧场" group-title="数字频道",欢笑剧场 +http://36.105.100.208:35455/itv/5000000002000009455.m3u8?cdn=bestzb$LR•IPV4•26『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="欢笑剧场" group-title="数字频道",欢笑剧场 +http://139.196.151.191/rtp/239.45.3.196:5140$LR•IPV4•26『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="欢笑剧场" group-title="数字频道",欢笑剧场 +http://[2409:8087:5e00:24::1e]:6060/000000001000/5000000002000009455/1.m3u8$LR•IPV6•26『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="欢笑剧场" group-title="数字频道",欢笑剧场 +http://[2409:8087:1e01:20::3]:80/PLTV/11/224/3221225771/index.m3u8$LR•IPV6•26『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="欢笑剧场" group-title="数字频道",欢笑剧场 +http://[2409:8087:74d9:21::6]:80/000000001000PLTV/88888888/224/3221226203/index.m3u8$LR•IPV6•26『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="欢笑剧场" group-title="数字频道",欢笑剧场 +https://epg.pw/stream/c26de373680830b38e7b3f0da2f920353f298e3369addfe68b8e4a2e3811a12b.m3u8$LR•IPV4•26『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="欢笑剧场" group-title="数字频道",欢笑剧场 +https://epg.pw/stream/631786a4e9509776045a3b475c48a97e1c9a69b08e45e07227e3c5d61a32b515.m3u8$LR•IPV4•26『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="欢笑剧场" group-title="数字频道",欢笑剧场 +http://111.22.153.159:35455/itv/5000000002000009455.m3u8?cdn=bestzb$LR•IPV4•26『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="欢笑剧场" group-title="数字频道",欢笑剧场 +http://home.wwang.pw:35455/itv/5000000002000009455.m3u8?cdn=bestzb$LR•IPV4•26『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="欢笑剧场" group-title="数字频道",欢笑剧场 +http://mg.hmysapp.cn:177/ckmg/zb.php?id=hxjc$LR•IPV4•26『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="欢笑剧场" group-title="数字频道",欢笑剧场 +http://t.061899.xyz/tl/dq.php?id=hxjc$LR•IPV4•26『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="欢笑剧场" group-title="数字频道",欢笑剧场 +https://zby.130519.xyz/PLTV/11/224/3221225771/index.m3u8$LR•IPV4•26『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="欢笑剧场" group-title="数字频道",欢笑剧场 +http://223.167.245.215:8001/rtp/239.45.3.196:5140$LR•IPV4•26『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="欢笑剧场" group-title="数字频道",欢笑剧场 +http://z.b.bkpcp.top/m.php?id=hxjc$LR•IPV4•26『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="欢笑剧场" group-title="数字频道",欢笑剧场 +http://gat.bkpcp.top/ymg.php?id=hxjc$LR•IPV4•26『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="欢笑剧场" group-title="数字频道",欢笑剧场 +http://goo.bkpcp.top/mg/hxjc$LR•IPV4•26『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="欢笑剧场" group-title="数字频道",欢笑剧场 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226704/index.m3u8$LR•IPV4•26『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="欢笑剧场" group-title="数字频道",欢笑剧场 +http://[2409:8087:5e00:24::1e]:6060/000000001000/5000000002000009455/1.m3u8$LR•IPV6•26『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="欢笑剧场" group-title="数字频道",欢笑剧场 +http://[2409:8087:1e01:20::3]:80/PLTV/11/224/3221225771/index.m3u8$LR•IPV6•26『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="欢笑剧场" group-title="数字频道",欢笑剧场 +http://[2409:8087:1e01:20::3]:80/PLTV/11/224/3221225771/index.m3u8$LR•IPV6•26『线路26』 +#EXTINF:-1 tvg-id="1" tvg-name="都市剧场" group-title="数字频道",都市剧场 +http://sh.lnott.top:880/dx107.m3u8$LR•IPV4•26『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="都市剧场" group-title="数字频道",都市剧场 +https://satellitepull.cnr.cn/live/wxcqxwgb/playlist.m3u8$LR•IPV4•26『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="都市剧场" group-title="数字频道",都市剧场 +http://223.167.245.215:8001/rtp/239.45.3.136:5140$LR•IPV4•26『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="都市剧场" group-title="数字频道",都市剧场 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226694/index.m3u8$LR•IPV4•26『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="都市剧场" group-title="数字频道",都市剧场 +https://hls-gateway.vpstv.net/streams/708845.m3u8$LR•IPV4•26『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="都市剧场" group-title="数字频道",都市剧场 +http://36.105.100.208:35455/itv/5000000011000031111.m3u8?cdn=bestzb$LR•IPV4•26『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="都市剧场" group-title="数字频道",都市剧场 +http://139.196.151.191/rtp/239.45.3.136:5140$LR•IPV4•26『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="都市剧场" group-title="数字频道",都市剧场 +http://[2409:8087:5e00:24::1e]:6060/000000001000/5000000011000031111/1.m3u8$LR•IPV6•26『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="都市剧场" group-title="数字频道",都市剧场 +http://[2409:8087:5e08:25::4]:6610/000000001000/5000000011000031111/index.m3u8?channel-id=bestzb&Contentid=5000000011000031111&Ace$LR•IPV6•26『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="都市剧场" group-title="数字频道",都市剧场 +http://[2409:8087:1e01:20::3]:80/PLTV/11/224/3221225762/index.m3u8$LR•IPV6•26『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="都市剧场" group-title="数字频道",都市剧场 +http://[2409:8087:74d9:21::6]:80/000000001000PLTV/88888888/224/3221226176/index.m3u8$LR•IPV6•26『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="都市剧场" group-title="数字频道",都市剧场 +https://epg.pw/stream/3ebdb0468d20c9605d2d4e762eb9df466a987323499cc64a71f30e6f020ba7ef.m3u8$LR•IPV4•26『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="都市剧场" group-title="数字频道",都市剧场 +https://epg.pw/stream/8df8ea3eca16380868129d08a1117f10d39dbd1bcf621e1963c57b2c756414ac.m3u8$LR•IPV4•26『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="都市剧场" group-title="数字频道",都市剧场 +http://112.46.105.20:8009/hls/72/index.m3u8$LR•IPV4•26『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="都市剧场" group-title="数字频道",都市剧场 +http://home.wwang.pw:35455/itv/5000000011000031111.m3u8?cdn=bestzb$LR•IPV4•26『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="都市剧场" group-title="数字频道",都市剧场 +http://112.46.105.20:8009/hls/72/index.m3u8$LR•IPV4•26『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="都市剧场" group-title="数字频道",都市剧场 +https://zby.130519.xyz/PLTV/11/224/3221225762/index.m3u8$LR•IPV4•26『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="都市剧场" group-title="数字频道",都市剧场 +https://satellitepull.cnr.cn/live/wxcqxwgb/playlist.m3u8$LR•IPV4•26『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="都市剧场" group-title="数字频道",都市剧场 +http://223.167.245.215:8001/rtp/239.45.3.136:5140$LR•IPV4•26『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="都市剧场" group-title="数字频道",都市剧场 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226694/index.m3u8$LR•IPV4•26『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="都市剧场" group-title="数字频道",都市剧场 +https://hls-gateway.vpstv.net/streams/708845.m3u8$LR•IPV4•26『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="都市剧场" group-title="数字频道",都市剧场 +http://[2409:8087:5e00:24::1e]:6060/000000001000/5000000011000031111/1.m3u8$LR•IPV6•26『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="都市剧场" group-title="数字频道",都市剧场 +http://[2409:8087:5e08:25::4]:6610/000000001000/5000000011000031111/index.m3u8?channel-id=bestzb&Contentid=5000000011000031111&Ace$LR•IPV6•26『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="都市剧场" group-title="数字频道",都市剧场 +http://[2409:8087:1e01:20::3]:80/PLTV/11/224/3221225762/index.m3u8$LR•IPV6•26『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="都市剧场" group-title="数字频道",都市剧场 +https://satellitepull.cnr.cn/live/wxcqxwgb/playlist.m3u8$LR•IPV4•26『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="都市剧场" group-title="数字频道",都市剧场 +http://[2409:8087:1e01:20::3]:80/PLTV/11/224/3221225762/index.m3u8$LR•IPV6•26『线路26』 +#EXTINF:-1 tvg-id="1" tvg-name="金色学堂" group-title="数字频道",金色学堂 +http://sh.lnott.top:880/dx109.m3u8$LR•IPV4•10『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="金色学堂" group-title="数字频道",金色学堂 +http://[2409:8087:5e00:24::1e]:6060/000000001000/5000000010000026105/1.m3u8$LR•IPV6•10『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="金色学堂" group-title="数字频道",金色学堂 +https://epg.pw/stream/303d79304fb4c6e23c320315de037e71f67a6ee8866d45e994b896d07eede2bb.m3u8$LR•IPV4•10『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="金色学堂" group-title="数字频道",金色学堂 +https://epg.pw/stream/0950e74a535638b0f24f31958edbfd892de9effddfedd476cdbcfcbb90d3749a.ctv$LR•IPV4•10『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="金色学堂" group-title="数字频道",金色学堂 +https://epg.pw/stream/2d0821904f2113c3a5a2ba405ae14a0749b87cd7e8a0c9b2144bc2be29d8108c.m3u8$LR•IPV4•10『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="金色学堂" group-title="数字频道",金色学堂 +https://epg.pw/stream/0bae0bc58ebf59cfd9f8ffbef95c9fba646ca2aa003db76b8b27633a02a8f3e8.m3u8$LR•IPV4•10『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="金色学堂" group-title="数字频道",金色学堂 +https://epg.pw/stream/1c2b7c251affe50420e4c01f03d85ca7fb86e91234deadf6405fd0acdd228d2c.m3u8$LR•IPV4•10『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="金色学堂" group-title="数字频道",金色学堂 +http://111.22.153.159:35455/itv/5000000010000026105.m3u8?cdn=bestzb$LR•IPV4•10『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="金色学堂" group-title="数字频道",金色学堂 +http://home.wwang.pw:35455/itv/5000000010000026105.m3u8?cdn=bestzb$LR•IPV4•10『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="金色学堂" group-title="数字频道",金色学堂 +https://zby.130519.xyz/PLTV/11/224/3221225748/index.m3u8$LR•IPV4•10『线路10』 +#EXTINF:-1 tvg-id="1" tvg-name="爱上4K" group-title="数字频道",爱上4K +http://wouu.net:9977/udp/239.93.0.97:5140$LR•IPV4•2『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="爱上4K" group-title="数字频道",爱上4K +http://wouu.net:9977/udp/239.93.0.97:5140$LR•IPV4•2『线路2』 +#EXTINF:-1 tvg-id="1" tvg-name="劲爆体育" group-title="数字频道",劲爆体育 +http://php.jdshipin.com/itv6s.php?cid=hnbblive&id=2000000002000000008$LR•IPV4•21『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="劲爆体育" group-title="数字频道",劲爆体育 +http://z.b.bkpcp.top/m.php?id=jbty$LR•IPV4•21『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="劲爆体育" group-title="数字频道",劲爆体育 +http://goo.bkpcp.top/mg/jbty$LR•IPV4•21『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="劲爆体育" group-title="数字频道",劲爆体育 +https://www.freetv.top/migu/796071336.m3u8?migutoken=1cc947d86cb584c31c31c88c005d55965238dbfff7ed75fca8451aed0b564786fde7e4b327e93b92dc96ef57e64e3bb56e8a9e921338080cdae817cb6125d8450b687659ecfee06be9c5d53ac6$LR•IPV4•21『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="劲爆体育" group-title="数字频道",劲爆体育 +https://live.v1.mk/api/ghyx.php?id=JinBaoTiYuHD_6000$LR•IPV4•21『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="劲爆体育" group-title="数字频道",劲爆体育 +http://36.105.100.208:35455/itv/5000000002000029972.m3u8?cdn=bestzb$LR•IPV4•21『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="劲爆体育" group-title="数字频道",劲爆体育 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=0525&tk=23a9aca1f79f$LR•IPV4•21『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="劲爆体育" group-title="数字频道",劲爆体育 +http://[2409:8087:5e01:24::16]:6610/000000001000/2000000002000000008/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000008&IASHttpSessionId=OTT19019320240419154124000281$LR•IPV6•21『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="劲爆体育" group-title="数字频道",劲爆体育 +https://epg.pw/stream/5c9f8deb5d2b8a259adb635f16239674f23d6075bb3713aa4795a8a7ecb34f52.m3u8$LR•IPV4•21『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="劲爆体育" group-title="数字频道",劲爆体育 +https://epg.pw/stream/eca08353703a7bb2190c942daa20bd25b03c25b7d2662afdc120864a17d8a94c.m3u8$LR•IPV4•21『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="劲爆体育" group-title="数字频道",劲爆体育 +https://epg.pw/stream/025b9a77daa84361d1c77d49c7136339ff3f9e3b2da922f09fb9468c026e4867.m3u8$LR•IPV4•21『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="劲爆体育" group-title="数字频道",劲爆体育 +http://111.22.153.159:35455/itv/5000000002000029972.m3u8?cdn=bestzb$LR•IPV4•21『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="劲爆体育" group-title="数字频道",劲爆体育 +http://home.wwang.pw:35455/itv/5000000002000029972.m3u8?cdn=bestzb$LR•IPV4•21『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="劲爆体育" group-title="数字频道",劲爆体育 +http://mg.hmysapp.cn:177/ckmg/zb.php?id=jbty$LR•IPV4•21『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="劲爆体育" group-title="数字频道",劲爆体育 +http://t.061899.xyz/tl/dq.php?id=jbty$LR•IPV4•21『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="劲爆体育" group-title="数字频道",劲爆体育 +http://php.jdshipin.com/itv6s.php?cid=hnbblive&id=2000000002000000008$LR•IPV4•21『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="劲爆体育" group-title="数字频道",劲爆体育 +http://z.b.bkpcp.top/m.php?id=jbty$LR•IPV4•21『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="劲爆体育" group-title="数字频道",劲爆体育 +http://goo.bkpcp.top/mg/jbty$LR•IPV4•21『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="劲爆体育" group-title="数字频道",劲爆体育 +https://www.freetv.top/migu/796071336.m3u8?migutoken=1cc947d86cb584c31c31c88c005d55965238dbfff7ed75fca8451aed0b564786fde7e4b327e93b92dc96ef57e64e3bb56e8a9e921338080cdae817cb6125d8450b687659ecfee06be9c5d53ac6$LR•IPV4•21『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="劲爆体育" group-title="数字频道",劲爆体育 +https://live.goodiptv.club/api/yqgd.php?id=jbtyhd$LR•IPV4•21『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="劲爆体育" group-title="数字频道",劲爆体育 +https://live.v1.mk/api/ghyx.php?id=JinBaoTiYuHD_6000$LR•IPV4•21『线路21』 +#EXTINF:-1 tvg-id="1" tvg-name="哒啵赛事" group-title="数字频道",哒啵赛事 +http://[2409:8087:74d9:21::6]:80/270000001128/9900000097/index.m3u8$LR•IPV6•2『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="哒啵赛事" group-title="数字频道",哒啵赛事 +http://home.wwang.pw:35455/itv/1000000001000003775.m3u8?cdn=ystenlive$LR•IPV4•2『线路2』 +#EXTINF:-1 tvg-id="1" tvg-name="哒啵电竞" group-title="数字频道",哒啵电竞 +http://[2409:8087:5e01:24::16]:6610/000000001000/2000000003000000066/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000003000000066&IASHttpSessionId=OTT19019320240419154124000281$LR•IPV6•3『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="哒啵电竞" group-title="数字频道",哒啵电竞 +http://111.22.153.159:35455/itv/1000000006000032327.m3u8?cdn=ystenlive$LR•IPV4•3『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="哒啵电竞" group-title="数字频道",哒啵电竞 +http://home.wwang.pw:35455/itv/1000000006000032327.m3u8?cdn=ystenlive$LR•IPV4•3『线路3』 +#EXTINF:-1 tvg-id="1" tvg-name="乐游" group-title="数字频道",乐游 +http://[2409:8087:5e00:24::1e]:6060/000000001000/5000000011000031112/1.m3u8$LR•IPV6•6『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="乐游" group-title="数字频道",乐游 +http://8.138.7.223/tv/shtv.php?id=ly$LR•IPV4•6『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="乐游" group-title="数字频道",乐游 +http://home.wwang.pw:35455/itv/5000000011000031112.m3u8?cdn=bestzb$LR•IPV4•6『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="乐游" group-title="数字频道",乐游 +http://mg.hmysapp.cn:177/ckmg/zb.php?id=ly$LR•IPV4•6『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="乐游" group-title="数字频道",乐游 +http://t.061899.xyz/tl/dq.php?id=ly$LR•IPV4•6『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="乐游" group-title="数字频道",乐游 +https://zby.130519.xyz/PLTV/11/224/3221226157/index.m3u8$LR•IPV4•6『线路6』 +#EXTINF:-1 tvg-id="1" tvg-name="快乐垂钓" group-title="数字频道",快乐垂钓 +http://sh.lnott.top:880/dx203.m3u8$LR•IPV4•17『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="快乐垂钓" group-title="数字频道",快乐垂钓 +https://cc06.tv12.xyz/56.m3u8$LR•IPV4•17『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="快乐垂钓" group-title="数字频道",快乐垂钓 +http://drive.mxmy.net:8888/udp/239.3.1.164:8001$LR•IPV4•17『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="快乐垂钓" group-title="数字频道",快乐垂钓 +https://cc06.tv12.xyz/56.m3u8$LR•IPV4•17『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="快乐垂钓" group-title="数字频道",快乐垂钓 +http://php.jdshipin.com/itv6.php?cid=bestzb&id=5000000011000031206$LR•IPV4•17『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="快乐垂钓" group-title="数字频道",快乐垂钓 +https://hls-gateway.vpstv.net/streams/708835.m3u8$LR•IPV4•17『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="快乐垂钓" group-title="数字频道",快乐垂钓 +http://36.105.100.208:35455/itv/5000000011000031206.m3u8?cdn=bestzb$LR•IPV4•17『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="快乐垂钓" group-title="数字频道",快乐垂钓 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=8968&tk=e640d0a1bf70$LR•IPV4•17『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="快乐垂钓" group-title="数字频道",快乐垂钓 +http://120.55.49.231:3095/rtp/233.50.201.109:5140$LR•IPV4•17『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="快乐垂钓" group-title="数字频道",快乐垂钓 +http://[2409:8087:5e08:24::11]:6610/000000001000/5000000011000031206/index.m3u8?channel-id=bestzb&Contentid=5000000011000031206&livemode=1&stbId=3$LR•IPV6•17『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="快乐垂钓" group-title="数字频道",快乐垂钓 +https://epg.pw/stream/f985e0b6d1331e8a6ebe2cd52fc775e56778a8c59df71272881179c511e256cb.m3u8$LR•IPV4•17『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="快乐垂钓" group-title="数字频道",快乐垂钓 +http://home.wwang.pw:35455/itv/5000000011000031206.m3u8?cdn=bestzb$LR•IPV4•17『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="快乐垂钓" group-title="数字频道",快乐垂钓 +https://cc06.tv12.xyz/56.m3u8$LR•IPV4•17『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="快乐垂钓" group-title="数字频道",快乐垂钓 +http://drive.mxmy.net:8888/udp/239.3.1.164:8001$LR•IPV4•17『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="快乐垂钓" group-title="数字频道",快乐垂钓 +http://php.jdshipin.com/itv6.php?cid=bestzb&id=5000000011000031206$LR•IPV4•17『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="快乐垂钓" group-title="数字频道",快乐垂钓 +https://hls-gateway.vpstv.net/streams/708835.m3u8$LR•IPV4•17『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="快乐垂钓" group-title="数字频道",快乐垂钓 +https://cc06.tv12.xyz/56.m3u8$LR•IPV4•17『线路17』 +#EXTINF:-1 tvg-id="1" tvg-name="纪实人文" group-title="数字频道",纪实人文 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225738/index.m3u8$LR•IPV4•16『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="纪实人文" group-title="数字频道",纪实人文 +https://stream1.freetv.fun/ipv6-ji-shi-ren-wen-12.m3u8$LR•IPV4•16『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="纪实人文" group-title="数字频道",纪实人文 +http://36.105.100.208:35455/itv/5000000004000010282.m3u8?cdn=bestzb$LR•IPV4•16『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="纪实人文" group-title="数字频道",纪实人文 +http://139.129.231.228/rtp/239.21.1.195:5002$LR•IPV4•16『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="纪实人文" group-title="数字频道",纪实人文 +http://139.196.151.191/rtp/239.45.3.212:5140$LR•IPV4•16『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="纪实人文" group-title="数字频道",纪实人文 +http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010067/1.m3u8$LR•IPV6•16『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="纪实人文" group-title="数字频道",纪实人文 +http://[2409:8087:74d9:21::6]:80/270000001128/9900000528/index.m3u8$LR•IPV6•16『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="纪实人文" group-title="数字频道",纪实人文 +http://58.248.112.205:8006/GD_CUCC/G_SHANGHAIJS-HD.m3u8?Authinfo=F8UQ%2BEevMmd%2FnekE5YOOKj2XjEQPCgsjHTwYM82OKTALPIQT5K8kr81olsEefKQX$LR•IPV4•16『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="纪实人文" group-title="数字频道",纪实人文 +http://[2001:250:5800:1005::155]:80/liverespath/98a578339579ce91ec2443bfbd1fc3af10ee02bd/90b63ff064-0-0-1b1b65981838b98d8f98036b839cbc79/index.m3u8$LR•IPV6•16『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="纪实人文" group-title="数字频道",纪实人文 +https://epg.pw/stream/fd2a1d3bbc8e8cd4a88812023fdc1471e8046fe3e85a1d07721f6dfd26fce8b6.m3u8$LR•IPV4•16『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="纪实人文" group-title="数字频道",纪实人文 +http://8.138.7.223/tv/shtv.php?id=xjs$LR•IPV4•16『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="纪实人文" group-title="数字频道",纪实人文 +http://home.wwang.pw:35455/itv/5000000004000010282.m3u8?cdn=bestzb$LR•IPV4•16『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="纪实人文" group-title="数字频道",纪实人文 +http://8.138.7.223/tv/shtv.php?id=xjs$LR•IPV4•16『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="纪实人文" group-title="数字频道",纪实人文 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225738/index.m3u8$LR•IPV4•16『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="纪实人文" group-title="数字频道",纪实人文 +http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010067/1.m3u8$LR•IPV6•16『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="纪实人文" group-title="数字频道",纪实人文 +https://stream1.freetv.fun/ipv6-ji-shi-ren-wen-12.m3u8$LR•IPV4•16『线路16』 +#EXTINF:-1 tvg-id="1" tvg-name="纪实科教" group-title="数字频道",纪实科教 +http://[2409:8087:74d9:21::6]:80/270000001128/9900000515/index.m3u8$LR•IPV6•5『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="纪实科教" group-title="数字频道",纪实科教 +http://58.248.112.205:8006/GD_CUCC/G_BEIJINGJS-CQ.m3u8?Authinfo=F8UQ%2BEevMmd%2FnekE5YOOKlqqd8HLKWN9yv5NoaCSBtwn5c8oDbwHIxF8FZNpmYbI$LR•IPV4•5『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="纪实科教" group-title="数字频道",纪实科教 +http://120.76.248.139/live/bfgd/4200000113.m3u8$LR•IPV4•5『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="纪实科教" group-title="数字频道",纪实科教 +http://home.wwang.pw:35455/itv/1000000001000001910.m3u8?cdn=ystenlive$LR•IPV4•5『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="纪实科教" group-title="数字频道",纪实科教 +http://120.76.248.139/live/bfgd/4200000113.m3u8$LR•IPV4•5『线路5』 +#EXTINF:-1 tvg-id="1" tvg-name="求索动物" group-title="数字频道",求索动物 +http://[2409:8087:5e01:24::16]:6610/000000001000/2000000004000000009/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000009&IASHttpSessionId=OTT19019320240419154124000281$LR•IPV6•4『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="求索动物" group-title="数字频道",求索动物 +http://111.22.153.159:35455/itv/2000000004000000009.m3u8?cdn=hnbblive$LR•IPV4•4『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="求索动物" group-title="数字频道",求索动物 +http://home.wwang.pw:35455/itv/2000000004000000009.m3u8?cdn=hnbblive$LR•IPV4•4『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="求索动物" group-title="数字频道",求索动物 +http://ygbh.site/php/bfgd.php?id=287$LR•IPV4•4『线路4』 +#EXTINF:-1 tvg-id="1" tvg-name="求索科学" group-title="数字频道",求索科学 +http://[2409:8087:5e01:24::16]:6610/000000001000/2000000004000000011/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000011&IASHttpSessionId=OTT19019320240419154124000281$LR•IPV6•4『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="求索科学" group-title="数字频道",求索科学 +http://111.22.153.159:35455/itv/2000000004000000011.m3u8?cdn=hnbblive$LR•IPV4•4『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="求索科学" group-title="数字频道",求索科学 +http://home.wwang.pw:35455/itv/2000000004000000011.m3u8?cdn=hnbblive$LR•IPV4•4『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="求索科学" group-title="数字频道",求索科学 +http://ygbh.site/php/bfgd.php?id=286$LR•IPV4•4『线路4』 +#EXTINF:-1 tvg-id="1" tvg-name="求索生活" group-title="数字频道",求索生活 +http://[2409:8087:5e01:24::16]:6610/000000001000/2000000004000000008/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000008&IASHttpSessionId=OTT19019320240419154124000281$LR•IPV6•4『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="求索生活" group-title="数字频道",求索生活 +http://111.22.153.159:35455/itv/2000000004000000008.m3u8?cdn=hnbblive$LR•IPV4•4『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="求索生活" group-title="数字频道",求索生活 +http://home.wwang.pw:35455/itv/2000000004000000008.m3u8?cdn=hnbblive$LR•IPV4•4『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="求索生活" group-title="数字频道",求索生活 +http://ygbh.site/php/bfgd.php?id=288$LR•IPV4•4『线路4』 +#EXTINF:-1 tvg-id="1" tvg-name="超级体育" group-title="数字频道",超级体育 +http://yc.myds.me:35455/itv/1000000001000009601.m3u8?cdn=ystenlive$LR•IPV4•15『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="超级体育" group-title="数字频道",超级体育 +http://36.105.100.208:35455/itv/1000000001000009601.m3u8?cdn=ystenlive$LR•IPV4•15『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="超级体育" group-title="数字频道",超级体育 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=3188&tk=23a9aca1f79f$LR•IPV4•15『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="超级体育" group-title="数字频道",超级体育 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226232/1.m3u8$LR•IPV6•15『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="超级体育" group-title="数字频道",超级体育 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225715/index.m3u8$LR•IPV6•15『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="超级体育" group-title="数字频道",超级体育 +http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225622/2/index.m3u8$LR•IPV6•15『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="超级体育" group-title="数字频道",超级体育 +http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010063/1.m3u8$LR•IPV6•15『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="超级体育" group-title="数字频道",超级体育 +http://[2409:8087:74d9:21::6]:80/270000001128/9900000020/index.m3u8$LR•IPV6•15『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="超级体育" group-title="数字频道",超级体育 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225715/index.m3u8$LR•IPV4•15『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="超级体育" group-title="数字频道",超级体育 +http://39.134.65.66/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225715/index.m3u8$LR•IPV4•15『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="超级体育" group-title="数字频道",超级体育 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226232/1.m3u8$LR•IPV6•15『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="超级体育" group-title="数字频道",超级体育 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225715/index.m3u8$LR•IPV6•15『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="超级体育" group-title="数字频道",超级体育 +http://yc.myds.me:35455/itv/1000000001000009601.m3u8?cdn=ystenlive$LR•IPV4•15『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="超级体育" group-title="数字频道",超级体育 +http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225622/2/index.m3u8$LR•IPV6•15『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="超级体育" group-title="数字频道",超级体育 +http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010063/1.m3u8$LR•IPV6•15『线路15』 +#EXTINF:-1 tvg-id="1" tvg-name="超级电影" group-title="数字频道",超级电影 +http://[2409:8087:74d9:21::6]:80/270000001128/9900000021/index.m3u8$LR•IPV6•3『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="超级电影" group-title="数字频道",超级电影 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225717/index.m3u8$LR•IPV4•3『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="超级电影" group-title="数字频道",超级电影 +http://39.134.65.3/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225717/index.m3u8$LR•IPV4•3『线路3』 +#EXTINF:-1 tvg-id="1" tvg-name="超级电视剧" group-title="数字频道",超级电视剧 +http://[2409:8087:74d9:21::6]:80/270000001128/9900000022/index.m3u8$LR•IPV6•3『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="超级电视剧" group-title="数字频道",超级电视剧 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225716/index.m3u8$LR•IPV4•3『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="超级电视剧" group-title="数字频道",超级电视剧 +http://39.135.133.156/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225716/index.m3u8$LR•IPV4•3『线路3』 +#EXTINF:-1 tvg-id="1" tvg-name="东北热剧" group-title="数字频道",东北热剧 +http://[2409:8087:74d9:21::6]:80/270000001128/9900000092/index.m3u8$LR•IPV6•3『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="东北热剧" group-title="数字频道",东北热剧 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225741/index.m3u8$LR•IPV4•3『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="东北热剧" group-title="数字频道",东北热剧 +http://39.134.65.74/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225741/index.m3u8$LR•IPV4•3『线路3』 +#EXTINF:-1 tvg-id="1" tvg-name="海外剧场" group-title="数字频道",海外剧场 +http://[2409:8087:74d9:21::6]:80/270000001128/9900000115/index.m3u8$LR•IPV6•2『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="海外剧场" group-title="数字频道",海外剧场 +https://epg.pw/stream/05e222355206698d11ab0e237cce2cc951137cf30d5d9fa0a5836144301a9938.m3u8$LR•IPV4•2『线路2』 +#EXTINF:-1 tvg-id="1" tvg-name="古装剧场" group-title="数字频道",古装剧场 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225663/index.m3u8$LR•IPV4•2『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="古装剧场" group-title="数字频道",古装剧场 +http://39.134.65.73/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225663/index.m3u8$LR•IPV4•2『线路2』 +#EXTINF:-1 tvg-id="1" tvg-name="中国功夫" group-title="数字频道",中国功夫 +http://[2409:8087:74d9:21::6]:80/270000001128/9900000101/index.m3u8$LR•IPV6•3『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="中国功夫" group-title="数字频道",中国功夫 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225681/index.m3u8$LR•IPV4•3『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="中国功夫" group-title="数字频道",中国功夫 +http://39.134.65.62/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225681/index.m3u8$LR•IPV4•3『线路3』 +#EXTINF:-1 tvg-id="1" tvg-name="军旅剧场" group-title="数字频道",军旅剧场 +http://[2409:8087:74d9:21::6]:80/270000001128/9900000107/index.m3u8$LR•IPV6•4『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="军旅剧场" group-title="数字频道",军旅剧场 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225676/index.m3u8$LR•IPV4•4『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="军旅剧场" group-title="数字频道",军旅剧场 +https://epg.pw/stream/039ce88ed853e0843ddd582b05a4b05caad6c6c97ed78f541e5ce97cbd943ba9.m3u8$LR•IPV4•4『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="军旅剧场" group-title="数字频道",军旅剧场 +http://39.134.65.76/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225676/index.m3u8$LR•IPV4•4『线路4』 +#EXTINF:-1 tvg-id="1" tvg-name="动作电影" group-title="数字频道",动作电影 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010003$LR•IPV4•5『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="动作电影" group-title="数字频道",动作电影 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225661/index.m3u8$LR•IPV4•5『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="动作电影" group-title="数字频道",动作电影 +https://epg.pw/stream/f224aa36d3d9bd7a3485f639162c3a0c330d7789880e8fca795d20ea9bbc58e4.m3u8$LR•IPV4•5『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="动作电影" group-title="数字频道",动作电影 +http://39.135.133.167/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225661/index.m3u8$LR•IPV4•5『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="动作电影" group-title="数字频道",动作电影 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010003$LR•IPV4•5『线路5』 +#EXTINF:-1 tvg-id="1" tvg-name="惊悚悬疑" group-title="数字频道",惊悚悬疑 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010077$LR•IPV4•5『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="惊悚悬疑" group-title="数字频道",惊悚悬疑 +http://[2409:8087:74d9:21::6]:80/270000001128/9900000113/index.m3u8$LR•IPV6•5『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="惊悚悬疑" group-title="数字频道",惊悚悬疑 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225665/index.m3u8$LR•IPV4•5『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="惊悚悬疑" group-title="数字频道",惊悚悬疑 +http://39.134.65.89/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225665/index.m3u8$LR•IPV4•5『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="惊悚悬疑" group-title="数字频道",惊悚悬疑 +http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010077$LR•IPV4•5『线路5』 +#EXTINF:-1 tvg-id="1" tvg-name="潮妈辣婆" group-title="数字频道",潮妈辣婆 +http://[2409:8087:74d9:21::6]:80/270000001128/9900000099/index.m3u8$LR•IPV6•3『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="潮妈辣婆" group-title="数字频道",潮妈辣婆 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225685/index.m3u8$LR•IPV4•3『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="潮妈辣婆" group-title="数字频道",潮妈辣婆 +https://epg.pw/stream/b8b258c3f487a0ca6e3485c53298c0c86cba21b9603aecc6b36a1fec95e6db85.m3u8$LR•IPV4•3『线路3』 +#EXTINF:-1 tvg-id="1" tvg-name="精品体育" group-title="数字频道",精品体育 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=5739&tk=23a9aca1f79f$LR•IPV4•13『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="精品体育" group-title="数字频道",精品体育 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226328/1.m3u8$LR•IPV6•13『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="精品体育" group-title="数字频道",精品体育 +http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225709/2/index.m3u8$LR•IPV6•13『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="精品体育" group-title="数字频道",精品体育 +http://[2409:8087:1a15:10d1::38]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225674/index.m3u8$LR•IPV6•13『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="精品体育" group-title="数字频道",精品体育 +http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010078/1.m3u8$LR•IPV6•13『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="精品体育" group-title="数字频道",精品体育 +http://[2409:8087:74d9:21::6]:80/270000001128/9900000102/index.m3u8$LR•IPV6•13『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="精品体育" group-title="数字频道",精品体育 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225674/index.m3u8$LR•IPV4•13『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="精品体育" group-title="数字频道",精品体育 +https://epg.pw/stream/f7556eccd4ae06b0c2991fdc7a4f8388496559f728cc82459a8e50346040e226.m3u8$LR•IPV4•13『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="精品体育" group-title="数字频道",精品体育 +http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226328/1.m3u8$LR•IPV6•13『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="精品体育" group-title="数字频道",精品体育 +http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225709/2/index.m3u8$LR•IPV6•13『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="精品体育" group-title="数字频道",精品体育 +http://[2409:8087:1a15:10d1::38]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225674/index.m3u8$LR•IPV6•13『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="精品体育" group-title="数字频道",精品体育 +http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010078/1.m3u8$LR•IPV6•13『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="精品体育" group-title="数字频道",精品体育 +https://epg.pw/stream/f7556eccd4ae06b0c2991fdc7a4f8388496559f728cc82459a8e50346040e226.m3u8$LR•IPV4•13『线路13』 +#EXTINF:-1 tvg-id="1" tvg-name="精品纪录" group-title="数字频道",精品纪录 +http://[2409:8087:74d9:21::6]:80/270000001128/9900000109/index.m3u8$LR•IPV6•3『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="精品纪录" group-title="数字频道",精品纪录 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225672/index.m3u8$LR•IPV4•3『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="精品纪录" group-title="数字频道",精品纪录 +https://epg.pw/stream/dfb24b21e956eeba85df1d10904bcb4155427d5fd8aa208244a7f25acd180061.m3u8$LR•IPV4•3『线路3』 +#EXTINF:-1 tvg-id="1" tvg-name="家庭剧场" group-title="数字频道",家庭剧场 +http://[2409:8087:74d9:21::6]:80/270000001128/9900000108/index.m3u8$LR•IPV6•3『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="家庭剧场" group-title="数字频道",家庭剧场 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225677/index.m3u8$LR•IPV4•3『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="家庭剧场" group-title="数字频道",家庭剧场 +http://39.134.65.3/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225677/index.m3u8$LR•IPV4•3『线路3』 +#EXTINF:-1 tvg-id="1" tvg-name="精品大剧" group-title="数字频道",精品大剧 +http://[2409:8087:74d9:21::6]:80/270000001128/9900000100/index.m3u8$LR•IPV6•2『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="精品大剧" group-title="数字频道",精品大剧 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225670/index.m3u8$LR•IPV4•2『线路2』 +#EXTINF:-1 tvg-id="1" tvg-name="军事评论" group-title="数字频道",军事评论 +http://[2409:8087:74d9:21::6]:80/270000001128/9900000110/index.m3u8$LR•IPV6 +#EXTINF:-1 tvg-id="1" tvg-name="明星大片" group-title="数字频道",明星大片 +http://[2409:8087:74d9:21::6]:80/270000001128/9900000116/index.m3u8$LR•IPV6 +#EXTINF:-1 tvg-id="1" tvg-name="欢乐剧场" group-title="数字频道",欢乐剧场 +http://[2409:8087:74d9:21::6]:80/270000001128/9900000091/index.m3u8$LR•IPV6•3『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="欢乐剧场" group-title="数字频道",欢乐剧场 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225742/index.m3u8$LR•IPV4•3『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="欢乐剧场" group-title="数字频道",欢乐剧场 +http://39.135.135.28/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225742/index.m3u8$LR•IPV4•3『线路3』 +#EXTINF:-1 tvg-id="1" tvg-name="精品萌宠" group-title="数字频道",精品萌宠 +http://[2409:8087:74d9:21::6]:80/270000001128/9900000122/index.m3u8$LR•IPV6 +#EXTINF:-1 tvg-id="1" tvg-name="超级综艺" group-title="数字频道",超级综艺 +http://[2409:8087:74d9:21::6]:80/270000001128/9900000019/index.m3u8$LR•IPV6•3『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="超级综艺" group-title="数字频道",超级综艺 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225714/index.m3u8$LR•IPV4•3『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="超级综艺" group-title="数字频道",超级综艺 +http://39.134.65.4/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225714/index.m3u8$LR•IPV4•3『线路3』 +#EXTINF:-1 tvg-id="1" tvg-name="金牌综艺" group-title="数字频道",金牌综艺 +http://[2409:8087:74d9:21::6]:80/270000001128/9900000112/index.m3u8$LR•IPV6•3『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="金牌综艺" group-title="数字频道",金牌综艺 +http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225666/index.m3u8$LR•IPV4•3『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="金牌综艺" group-title="数字频道",金牌综艺 +http://39.135.135.24/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225666/index.m3u8$LR•IPV4•3『线路3』 +#EXTINF:-1 tvg-id="1" tvg-name="爱动漫" group-title="数字频道",爱动漫 +http://php.jdshipin.com:8880/itv6s.php?cid=wasusyt&id=6000000006000280630$LR•IPV4•9『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="爱动漫" group-title="数字频道",爱动漫 +http://[2409:8087:5e08:24::17]:6610/000000001000/2000000004000000059/index.m3u8$LR•IPV6•9『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="爱动漫" group-title="数字频道",爱动漫 +http://[2409:8087:5e08:24::11]:6610/000000001000/2000000004000000059/index.m3u8$LR•IPV6•9『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="爱动漫" group-title="数字频道",爱动漫 +http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000000/index.m3u8$LR•IPV6•9『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="爱动漫" group-title="数字频道",爱动漫 +http://home.wwang.pw:35455/itv/2000000004000000059.m3u8?cdn=hnbblive$LR•IPV4•9『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="爱动漫" group-title="数字频道",爱动漫 +http://php.jdshipin.com:8880/itv6s.php?cid=wasusyt&id=6000000006000280630$LR•IPV4•9『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="爱动漫" group-title="数字频道",爱动漫 +http://[2409:8087:5e08:24::17]:6610/000000001000/2000000004000000059/index.m3u8$LR•IPV6•9『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="爱动漫" group-title="数字频道",爱动漫 +http://[2409:8087:5e08:24::11]:6610/000000001000/2000000004000000059/index.m3u8$LR•IPV6•9『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="爱动漫" group-title="数字频道",爱动漫 +http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000000/index.m3u8$LR•IPV6•9『线路9』 +#EXTINF:-1 tvg-id="1" tvg-name="上海新闻" group-title="上海频道",上海新闻 +http://8.138.7.223/tv/shtv.php?id=xwzh$LR•IPV4•2『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="上海新闻" group-title="上海频道",上海新闻 +http://61.173.144.157:9901/tsfile/live/1000_1.m3u8$LR•IPV4•2『线路2』 +#EXTINF:-1 tvg-id="1" tvg-name="上海都市" group-title="上海频道",上海都市 +http://yc.myds.me:35455/itv/5000000010000018926.m3u8?cdn=bestzb$LR•IPV4•10『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="上海都市" group-title="上海频道",上海都市 +https://live.lalifeier.eu.org/kankanews/shds.m3u8?t=1746292937&key=3725d08baa89daf1e05599a00bdac978$LR•IPV4•10『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="上海都市" group-title="上海频道",上海都市 +https://migu.188766.xyz/?migutoken=2f874035df0c1212db90a024f4670dce&id=ds&type=sz$LR•IPV4•10『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="上海都市" group-title="上海频道",上海都市 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=6990&tk=23a9aca1f79f$LR•IPV4•10『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="上海都市" group-title="上海频道",上海都市 +https://zby.130519.xyz/PLTV/11/224/3221225749/index.m3u8$LR•IPV4•10『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="上海都市" group-title="上海频道",上海都市 +http://8.138.7.223/tv/shtv.php?id=ds$LR•IPV4•10『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="上海都市" group-title="上海频道",上海都市 +http://yc.myds.me:35455/itv/5000000010000018926.m3u8?cdn=bestzb$LR•IPV4•10『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="上海都市" group-title="上海频道",上海都市 +https://live.lalifeier.eu.org/kankanews/shds.m3u8?t=1746292937&key=3725d08baa89daf1e05599a00bdac978$LR•IPV4•10『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="上海都市" group-title="上海频道",上海都市 +https://migu.188766.xyz/?migutoken=2f874035df0c1212db90a024f4670dce&id=ds&type=sz$LR•IPV4•10『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="上海都市" group-title="上海频道",上海都市 +http://61.173.144.157:9901/tsfile/live/1001_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•10『线路10』 +#EXTINF:-1 tvg-id="1" tvg-name="上海外语" group-title="上海频道",上海外语 +http://z.b.bkpcp.top/m.php?id=shics$LR•IPV4•12『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="上海外语" group-title="上海频道",上海外语 +https://live.lalifeier.eu.org/kankanews/shics.m3u8?t=1746307365&key=5923d8473fb7e7c254f421fd5c26ed51$LR•IPV4•12『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="上海外语" group-title="上海频道",上海外语 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=2446&tk=e640d0a1bf70$LR•IPV4•12『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="上海外语" group-title="上海频道",上海外语 +http://139.196.151.191:2051/rtp/239.45.1.127:5140$LR•IPV4•12『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="上海外语" group-title="上海频道",上海外语 +http://[2409:8087:5e00:24::029]:6610/000000001000/2000000002000000001/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000001&IASHttpSessionId=OTT19019320240419154124000281$LR•IPV6•12『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="上海外语" group-title="上海频道",上海外语 +http://mg.hmysapp.cn:177/ckmg/zb.php?id=shics$LR•IPV4•12『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="上海外语" group-title="上海频道",上海外语 +http://t.061899.xyz/tl/dq.php?id=shics$LR•IPV4•12『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="上海外语" group-title="上海频道",上海外语 +http://111.22.153.159:35455/itv/2000000002000000001.m3u8?cdn=hnbblive$LR•IPV4•12『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="上海外语" group-title="上海频道",上海外语 +http://z.b.bkpcp.top/m.php?id=shics$LR•IPV4•12『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="上海外语" group-title="上海频道",上海外语 +http://[2409:8087:5e00:24::029]:6610/000000001000/2000000002000000001/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000001&IASHttpSessionId=OTT19019320240419154124000281$LR•IPV6•12『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="上海外语" group-title="上海频道",上海外语 +https://live.lalifeier.eu.org/kankanews/shics.m3u8?t=1746307365&key=5923d8473fb7e7c254f421fd5c26ed51$LR•IPV4•12『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="上海外语" group-title="上海频道",上海外语 +http://[2409:8087:5e00:24::029]:6610/000000001000/2000000002000000001/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000001&IASHttpSessionId=OTT19019320240419154124000281$LR•IPV6•12『线路12』 +#EXTINF:-1 tvg-id="1" tvg-name="七彩戏剧" group-title="上海频道",七彩戏剧 +http://111.22.153.159:35455/itv/5000000011000031116.m3u8?cdn=bestzb$LR•IPV4•11『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="七彩戏剧" group-title="上海频道",七彩戏剧 +http://home.wwang.pw:35455/itv/5000000011000031116.m3u8?cdn=bestzb$LR•IPV4•11『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="七彩戏剧" group-title="上海频道",七彩戏剧 +http://php.jdshipin.com/itv6s.php?cid=bestzb&id=5000000011000031116$LR•IPV4•11『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="七彩戏剧" group-title="上海频道",七彩戏剧 +http://z.b.bkpcp.top/m.php?id=qcxj$LR•IPV4•11『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="七彩戏剧" group-title="上海频道",七彩戏剧 +http://36.105.100.208:35455/itv/5000000011000031116.m3u8?cdn=bestzb$LR•IPV4•11『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="七彩戏剧" group-title="上海频道",七彩戏剧 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=3074&tk=b53028476470$LR•IPV4•11『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="七彩戏剧" group-title="上海频道",七彩戏剧 +http://139.196.151.191:2051/rtp/239.45.3.61:5140$LR•IPV4•11『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="七彩戏剧" group-title="上海频道",七彩戏剧 +http://mg.hmysapp.cn:177/ckmg/zb.php?id=qcxj$LR•IPV4•11『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="七彩戏剧" group-title="上海频道",七彩戏剧 +http://t.061899.xyz/tl/dq.php?id=qcxj$LR•IPV4•11『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="七彩戏剧" group-title="上海频道",七彩戏剧 +http://php.jdshipin.com/itv6s.php?cid=bestzb&id=5000000011000031116$LR•IPV4•11『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="七彩戏剧" group-title="上海频道",七彩戏剧 +http://z.b.bkpcp.top/m.php?id=qcxj$LR•IPV4•11『线路11』 +#EXTINF:-1 tvg-id="1" tvg-name="五星体育" group-title="上海频道",五星体育 +https://epg.pw/stream/031acdbb137226f0c022242be1f31a039d40acf487f2c4b6fa6b40d6eb55f3f4.m3u8$LR•IPV4•29『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="五星体育" group-title="上海频道",五星体育 +https://epg.pw/stream/245d1072476eeab5f81d1de6ad86becda334c7305fcc8ecd462b3a05cca4e7a3.m3u8$LR•IPV4•29『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="五星体育" group-title="上海频道",五星体育 +https://epg.pw/stream/8bcb65dddb82fc01cc617f6c5e2aa3f7d98fba152b5423fe17b4caa9bbed79b2.m3u8$LR•IPV4•29『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="五星体育" group-title="上海频道",五星体育 +https://epg.pw/stream/3cc797641112e5b2e7700c9a2264e3ede2a5a87391c5ded3e50d903458d2708f.m3u8$LR•IPV4•29『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="五星体育" group-title="上海频道",五星体育 +http://cf.21534450.xyz:9988/rtp/239.45.3.210:5140$LR•IPV4•29『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="五星体育" group-title="上海频道",五星体育 +http://zjbuv52.live.bestvcdn.com.cn/D_bestvfreekey-showto_D/live/program/live/wxtyhd8m/8000000/mnf.m3u8$LR•IPV4•29『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="五星体育" group-title="上海频道",五星体育 +http://8.138.7.223/tv/shtv.php?id=wxty$LR•IPV4•29『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="五星体育" group-title="上海频道",五星体育 +http://home.wwang.pw:35455/itv/5000000010000017540.m3u8?cdn=bestzb$LR•IPV4•29『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="五星体育" group-title="上海频道",五星体育 +https://other.ottiptv.cc/wxty.m3u8$LR•IPV4•29『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="五星体育" group-title="上海频道",五星体育 +https://stream1.freetv.fun/ipv6-wu-xing-ti-yu-10.m3u8$LR•IPV4•29『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="五星体育" group-title="上海频道",五星体育 +https://live.v1.mk/api/bestv.php?id=wxtyhd8m/8000000$LR•IPV4•29『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="五星体育" group-title="上海频道",五星体育 +https://hls-gateway.vpstv.net/streams/636980.m3u8$LR•IPV4•29『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="五星体育" group-title="上海频道",五星体育 +https://migu.188766.xyz/?migutoken=71ffa78ec0f711ac9ea667fb3b8b2c9c&id=%E4%BA%94%E6%98%9F%E4%BD%93%E8%82%B2&pp=1$LR•IPV4•29『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="五星体育" group-title="上海频道",五星体育 +http://36.105.100.208:35455/itv/5000000010000017540.m3u8?cdn=bestzb$LR•IPV4•29『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="五星体育" group-title="上海频道",五星体育 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=4759&tk=7d4ad8f156e3$LR•IPV4•29『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="五星体育" group-title="上海频道",五星体育 +http://139.196.151.191:2051/rtp/239.45.3.210:5140$LR•IPV4•29『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="五星体育" group-title="上海频道",五星体育 +http://[2409:8087:1e03:21::42]:6610/cms001/ch00000090990000001018/index.m3u8$LR•IPV6•29『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="五星体育" group-title="上海频道",五星体育 +https://zby.130519.xyz/PLTV/11/224/3221225732/index.m3u8$LR•IPV4•29『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="五星体育" group-title="上海频道",五星体育 +http://101.35.240.114:88/live.php?id=五星体育$LR•IPV4•29『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="五星体育" group-title="上海频道",五星体育 +http://8.138.7.223/tv/shtv.php?id=wxty$LR•IPV4•29『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="五星体育" group-title="上海频道",五星体育 +http://148.135.93.213:81/live.php?id=五星体育$LR•IPV4•29『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="五星体育" group-title="上海频道",五星体育 +http://[2409:8087:1e03:21::42]:6610/cms001/ch00000090990000001018/index.m3u8$LR•IPV6•29『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="五星体育" group-title="上海频道",五星体育 +https://stream1.freetv.fun/ipv6-wu-xing-ti-yu-10.m3u8$LR•IPV4•29『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="五星体育" group-title="上海频道",五星体育 +https://live.v1.mk/api/bestv.php?id=wxtyhd8m/8000000$LR•IPV4•29『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="五星体育" group-title="上海频道",五星体育 +https://hls-gateway.vpstv.net/streams/636980.m3u8$LR•IPV4•29『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="五星体育" group-title="上海频道",五星体育 +https://migu.188766.xyz/?migutoken=71ffa78ec0f711ac9ea667fb3b8b2c9c&id=%E4%BA%94%E6%98%9F%E4%BD%93%E8%82%B2&pp=1$LR•IPV4•29『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="五星体育" group-title="上海频道",五星体育 +https://other.ottiptv.cc/wxty.m3u8$LR•IPV4•29『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="五星体育" group-title="上海频道",五星体育 +https://other.ottiptv.cc/wxty.m3u8$LR•IPV4•29『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="五星体育" group-title="上海频道",五星体育 +https://other.ottiptv.cc/wxty.m3u8$LR•IPV4•29『线路29』 +#EXTINF:-1 tvg-id="1" tvg-name="东方影视" group-title="上海频道",东方影视 +http://php.jdshipin.com:8880/itv6.php?cid=bestzb&id=5000000010000032212$LR•IPV4•19『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="东方影视" group-title="上海频道",东方影视 +http://z.b.bkpcp.top/m.php?id=shys$LR•IPV4•19『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="东方影视" group-title="上海频道",东方影视 +http://gat.bkpcp.top/ymg.php?id=shys$LR•IPV4•19『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="东方影视" group-title="上海频道",东方影视 +https://www.freetv.top/migu/617290047.m3u8?migutoken=86c02ad0875d5cc49d77bcc8bdb628f2c9d508ffc323b964a03c8f92dde4afafa0345cf5a8fefbdf915c748e3d11c6c18e27ae1e21a609cec31a45e6c437db26a7a243625f9cf35c271171a22c$LR•IPV4•19『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="东方影视" group-title="上海频道",东方影视 +https://stream1.freetv.fun/ipv6-dong-fang-ying-shi-8.m3u8$LR•IPV4•19『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="东方影视" group-title="上海频道",东方影视 +https://migu.188766.xyz/?migutoken=6c5b70858d0091ce20ea7fe815cabafe&id=%E4%B8%8A%E8%A7%86%E4%B8%9C%E6%96%B9%E5%BD%B1%E8%A7%86&type=yy$LR•IPV4•19『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="东方影视" group-title="上海频道",东方影视 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=1285&tk=2aca1ad9a849$LR•IPV4•19『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="东方影视" group-title="上海频道",东方影视 +http://139.196.151.191:2051/rtp/239.45.3.237:5140$LR•IPV4•19『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="东方影视" group-title="上海频道",东方影视 +http://mg.hmysapp.cn:177/ckmg/zb.php?id=dfys$LR•IPV4•19『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="东方影视" group-title="上海频道",东方影视 +http://t.061899.xyz/tl/dq.php?id=dfys$LR•IPV4•19『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="东方影视" group-title="上海频道",东方影视 +https://zby.130519.xyz/PLTV/11/224/3221225744/index.m3u8$LR•IPV4•19『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="东方影视" group-title="上海频道",东方影视 +http://111.22.153.159:35455/itv/5000000010000032212.m3u8?cdn=bestzb$LR•IPV4•19『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="东方影视" group-title="上海频道",东方影视 +http://php.jdshipin.com:8880/itv6.php?cid=bestzb&id=5000000010000032212$LR•IPV4•19『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="东方影视" group-title="上海频道",东方影视 +http://z.b.bkpcp.top/m.php?id=shys$LR•IPV4•19『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="东方影视" group-title="上海频道",东方影视 +http://gat.bkpcp.top/ymg.php?id=shys$LR•IPV4•19『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="东方影视" group-title="上海频道",东方影视 +https://www.freetv.top/migu/617290047.m3u8?migutoken=86c02ad0875d5cc49d77bcc8bdb628f2c9d508ffc323b964a03c8f92dde4afafa0345cf5a8fefbdf915c748e3d11c6c18e27ae1e21a609cec31a45e6c437db26a7a243625f9cf35c271171a22c$LR•IPV4•19『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="东方影视" group-title="上海频道",东方影视 +https://stream1.freetv.fun/ipv6-dong-fang-ying-shi-8.m3u8$LR•IPV4•19『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="东方影视" group-title="上海频道",东方影视 +https://migu.188766.xyz/?migutoken=6c5b70858d0091ce20ea7fe815cabafe&id=%E4%B8%8A%E8%A7%86%E4%B8%9C%E6%96%B9%E5%BD%B1%E8%A7%86&type=yy$LR•IPV4•19『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="东方影视" group-title="上海频道",东方影视 +http://61.173.144.157:9901/tsfile/live/1013_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•19『线路19』 +#EXTINF:-1 tvg-id="1" tvg-name="东方财经" group-title="上海频道",东方财经 +https://epg.pw/stream/3c894080faf1f4692884e744dd558fd0cdcdaac96ced06509693bc8cf5968a1d.m3u8$LR•IPV4•10『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="东方财经" group-title="上海频道",东方财经 +http://yc.myds.me:35455/itv/5000000007000010003.m3u8?cdn=bestzb$LR•IPV4•10『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="东方财经" group-title="上海频道",东方财经 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=4946&tk=97475bb89d45$LR•IPV4•10『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="东方财经" group-title="上海频道",东方财经 +http://139.196.151.191:2051/rtp/239.45.1.119:5140$LR•IPV4•10『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="东方财经" group-title="上海频道",东方财经 +http://[2409:8087:5e00:24::2d]:6610/000000001000/1/5000000007000010003/index.m3u8?channel-id=bestzb&Contentid=5000000007000010003&livemode=1&stbId=3$LR•IPV6•10『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="东方财经" group-title="上海频道",东方财经 +https://zby.130519.xyz/PLTV/11/224/3221226134/index.m3u8$LR•IPV4•10『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="东方财经" group-title="上海频道",东方财经 +http://111.22.153.159:35455/itv/5000000007000010003.m3u8?cdn=bestzb$LR•IPV4•10『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="东方财经" group-title="上海频道",东方财经 +http://[2409:8087:5e00:24::2d]:6610/000000001000/1/5000000007000010003/index.m3u8?channel-id=bestzb&Contentid=5000000007000010003&livemode=1&stbId=3$LR•IPV6•10『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="东方财经" group-title="上海频道",东方财经 +http://yc.myds.me:35455/itv/5000000007000010003.m3u8?cdn=bestzb$LR•IPV4•10『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="东方财经" group-title="上海频道",东方财经 +http://[2409:8087:5e00:24::2d]:6610/000000001000/1/5000000007000010003/index.m3u8?channel-id=bestzb&Contentid=5000000007000010003&livemode=1&stbId=3$LR•IPV6•10『线路10』 +#EXTINF:-1 tvg-id="1" tvg-name="法治天地" group-title="上海频道",法治天地 +http://sh.lnott.top:880/dx108.m3u8$LR•IPV4•27『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="法治天地" group-title="上海频道",法治天地 +http://111.22.153.159:35455/itv/2000000002000000014.m3u8?cdn=hnbblive$LR•IPV4•27『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="法治天地" group-title="上海频道",法治天地 +http://home.wwang.pw:35455/itv/2000000002000000014.m3u8?cdn=hnbblive$LR•IPV4•27『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="法治天地" group-title="上海频道",法治天地 +https://cc06.tv12.xyz/42.m3u8$LR•IPV4•27『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="法治天地" group-title="上海频道",法治天地 +http://223.167.245.215:8001/rtp/239.45.1.46:5140$LR•IPV4•27『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="法治天地" group-title="上海频道",法治天地 +http://php.jdshipin.com/itv6.php?cid=bestzb&id=9001547084732463424$LR•IPV4•27『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="法治天地" group-title="上海频道",法治天地 +http://z.b.bkpcp.top/m.php?id=fztd$LR•IPV4•27『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="法治天地" group-title="上海频道",法治天地 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226655/index.m3u8$LR•IPV4•27『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="法治天地" group-title="上海频道",法治天地 +http://36.105.100.208:35455/itv/2000000002000000014.m3u8?cdn=hnbblive$LR•IPV4•27『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="法治天地" group-title="上海频道",法治天地 +http://139.196.151.191/rtp/239.45.1.46:5140$LR•IPV4•27『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="法治天地" group-title="上海频道",法治天地 +http://[2409:8087:1e01:20::3]:80/PLTV/11/224/3221225994/index.m3u8$LR•IPV6•27『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="法治天地" group-title="上海频道",法治天地 +http://[2409:8087:5e01:24::16]:6610/000000001000/2000000002000000014/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000014&IASHttpSessionId=OTT19019320240419154124000281$LR•IPV6•27『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="法治天地" group-title="上海频道",法治天地 +http://[2409:8087:5e08:25::4]:6610/000000001000/9001547084732463424/index.m3u8?channel-id=bestzb&Contentid=9001547084732463424&Ace$LR•IPV6•27『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="法治天地" group-title="上海频道",法治天地 +http://[2409:8087:1e01:20::3]/PLTV/11/224/3221225994/index.m3u8$LR•IPV6•27『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="法治天地" group-title="上海频道",法治天地 +http://mg.hmysapp.cn:177/ckmg/zb.php?id=fztd$LR•IPV4•27『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="法治天地" group-title="上海频道",法治天地 +http://t.061899.xyz/tl/dq.php?id=fztd$LR•IPV4•27『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="法治天地" group-title="上海频道",法治天地 +https://zby.130519.xyz/PLTV/11/224/3221225994/index.m3u8$LR•IPV4•27『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="法治天地" group-title="上海频道",法治天地 +http://223.167.245.215:8001/rtp/239.45.1.46:5140$LR•IPV4•27『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="法治天地" group-title="上海频道",法治天地 +http://php.jdshipin.com/itv6.php?cid=bestzb&id=9001547084732463424$LR•IPV4•27『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="法治天地" group-title="上海频道",法治天地 +http://z.b.bkpcp.top/m.php?id=fztd$LR•IPV4•27『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="法治天地" group-title="上海频道",法治天地 +http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226655/index.m3u8$LR•IPV4•27『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="法治天地" group-title="上海频道",法治天地 +https://cc06.tv12.xyz/42.m3u8$LR•IPV4•27『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="法治天地" group-title="上海频道",法治天地 +http://[2409:8087:5e01:24::16]:6610/000000001000/2000000002000000014/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000014&IASHttpSessionId=OTT19019320240419154124000281$LR•IPV6•27『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="法治天地" group-title="上海频道",法治天地 +http://[2409:8087:5e08:25::4]:6610/000000001000/9001547084732463424/index.m3u8?channel-id=bestzb&Contentid=9001547084732463424&Ace$LR•IPV6•27『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="法治天地" group-title="上海频道",法治天地 +http://[2409:8087:1e01:20::3]/PLTV/11/224/3221225994/index.m3u8$LR•IPV6•27『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="法治天地" group-title="上海频道",法治天地 +https://cc06.tv12.xyz/42.m3u8$LR•IPV4•27『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="法治天地" group-title="上海频道",法治天地 +http://[2409:8087:1e01:20::3]:80/PLTV/11/224/3221225994/index.m3u8$LR•IPV6•27『线路27』 +#EXTINF:-1 tvg-id="1" tvg-name="第一财经" group-title="上海频道",第一财经 +https://epg.pw/stream/34bf6946fa5dc33632ff8bbd45ea1356adb3fb17ddd977b85c7cdf6073a0196a.m3u8$LR•IPV4•27『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="第一财经" group-title="上海频道",第一财经 +https://epg.pw/stream/382ae49346c9d58fbd548b9b0013664d5c6d4bc6da1cb6cecf4eef5e535bc206.m3u8$LR•IPV4•27『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="第一财经" group-title="上海频道",第一财经 +https://epg.pw/stream/8f5f5b037e4f5be88499735028bbba80eb375ef3d92a994a328a821bf66a33ff.m3u8$LR•IPV4•27『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="第一财经" group-title="上海频道",第一财经 +http://8.138.7.223/tv/shtv.php?id=dycj$LR•IPV4•27『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="第一财经" group-title="上海频道",第一财经 +http://home.wwang.pw:35455/itv/5000000010000027146.m3u8?cdn=bestzb$LR•IPV4•27『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="第一财经" group-title="上海频道",第一财经 +http://satellitepull.cnr.cn/live/wx32dycjgb/playlist.m3u8$LR•IPV4•27『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="第一财经" group-title="上海频道",第一财经 +http://a1live.livecdn.yicai.com/live/radio_tv.m3u8$LR•IPV4•27『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="第一财经" group-title="上海频道",第一财经 +http://ls.qingting.fm/live/276.m3u8$LR•IPV4•27『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="第一财经" group-title="上海频道",第一财经 +http://yc.myds.me:35455/itv/5000000010000027146.m3u8?cdn=bestzb$LR•IPV4•27『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="第一财经" group-title="上海频道",第一财经 +https://live.lalifeier.eu.org/kankanews/dycj.m3u8?t=1746393735&key=7b164ddded8a7d9ea3ba4a8d86999077$LR•IPV4•27『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="第一财经" group-title="上海频道",第一财经 +https://www.freetv.top/migu/608780988.m3u8?migutoken=62e21890acbd9928d0be0b4eae9f5e32e1879604b785ee7ce8751d5001a9ff431d7714025aa03d48a2b190ff214e5115dcb6ba455c3d26b1db0f5b3cb49c5967429ff3b1fe8e96e87cc6146543$LR•IPV4•27『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="第一财经" group-title="上海频道",第一财经 +http://36.105.100.208:35455/itv/5000000010000027146.m3u8?cdn=bestzb$LR•IPV4•27『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="第一财经" group-title="上海频道",第一财经 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=4810&tk=23a9aca1f79f$LR•IPV4•27『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="第一财经" group-title="上海频道",第一财经 +http://139.196.151.191:2051/rtp/239.45.3.211:5140$LR•IPV4•27『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="第一财经" group-title="上海频道",第一财经 +http://120.55.49.231:3095/rtp/233.50.200.125:5140$LR•IPV4•27『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="第一财经" group-title="上海频道",第一财经 +http://[2409:8087:5e00:24::2d]:6610/000000001000/1/5000000010000027146/index.m3u8?channel-id=bestzb&Contentid=5000000010000027146&livemode=1&stbId=3$LR•IPV6•27『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="第一财经" group-title="上海频道",第一财经 +https://zby.130519.xyz/PLTV/11/224/3221225737/index.m3u8$LR•IPV4•27『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="第一财经" group-title="上海频道",第一财经 +http://8.138.7.223/tv/shtv.php?id=dycj$LR•IPV4•27『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="第一财经" group-title="上海频道",第一财经 +http://satellitepull.cnr.cn/live/wx32dycjgb/playlist.m3u8$LR•IPV4•27『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="第一财经" group-title="上海频道",第一财经 +http://a1live.livecdn.yicai.com/live/radio_tv.m3u8$LR•IPV4•27『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="第一财经" group-title="上海频道",第一财经 +http://[2409:8087:5e00:24::2d]:6610/000000001000/1/5000000010000027146/index.m3u8?channel-id=bestzb&Contentid=5000000010000027146&livemode=1&stbId=3$LR•IPV6•27『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="第一财经" group-title="上海频道",第一财经 +http://ls.qingting.fm/live/276.m3u8$LR•IPV4•27『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="第一财经" group-title="上海频道",第一财经 +http://yc.myds.me:35455/itv/5000000010000027146.m3u8?cdn=bestzb$LR•IPV4•27『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="第一财经" group-title="上海频道",第一财经 +https://live.lalifeier.eu.org/kankanews/dycj.m3u8?t=1746393735&key=7b164ddded8a7d9ea3ba4a8d86999077$LR•IPV4•27『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="第一财经" group-title="上海频道",第一财经 +https://www.freetv.top/migu/608780988.m3u8?migutoken=62e21890acbd9928d0be0b4eae9f5e32e1879604b785ee7ce8751d5001a9ff431d7714025aa03d48a2b190ff214e5115dcb6ba455c3d26b1db0f5b3cb49c5967429ff3b1fe8e96e87cc6146543$LR•IPV4•27『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="第一财经" group-title="上海频道",第一财经 +http://[2409:8087:5e00:24::2d]:6610/000000001000/1/5000000010000027146/index.m3u8?channel-id=bestzb&Contentid=5000000010000027146&livemode=1&stbId=3$LR•IPV6•27『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="第一财经" group-title="上海频道",第一财经 +http://satellitepull.cnr.cn/live/wx32dycjgb/playlist.m3u8$LR•IPV4•27『线路27』 +#EXTINF:-1 tvg-id="1" tvg-name="浙江新闻" group-title="浙江频道",浙江新闻 +http://101.66.198.42:9901/tsfile/live/1005_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•15『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="浙江新闻" group-title="浙江频道",浙江新闻 +http://ali-vl.cztv.com/channels/lantian/channel007/360p.m3u8$LR•IPV4•15『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="浙江新闻" group-title="浙江频道",浙江新闻 +http://ali-m-l.cztv.com/channels/lantian/channel07/720p.m3u8$LR•IPV4•15『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="浙江新闻" group-title="浙江频道",浙江新闻 +https://ali-m-l.cztv.com/channels/lantian/channel07/720p.m3u8$LR•IPV4•15『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="浙江新闻" group-title="浙江频道",浙江新闻 +http://zwebl02.cztv.com/live/channel071080P.m3u8?auth_key=2524708799-0-0-e3b50ca59d2c0883d5386d8bc4cdefbc$LR•IPV4•15『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="浙江新闻" group-title="浙江频道",浙江新闻 +http://zhfivel02.cztv.com/channel07/1080p.m3u8?auth_key=2524708799-0-0-4af48ba83e791a300595dd0b2bb30e6e$LR•IPV4•15『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="浙江新闻" group-title="浙江频道",浙江新闻 +https://ali-m-l.cztv.com/channels/lantian/channel007/1080p.m3u8?$LR•IPV4•15『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="浙江新闻" group-title="浙江频道",浙江新闻 +http://ali-m-l.cztv.com/channels/lantian/channel007/1080p.m3u8$LR•IPV4•15『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="浙江新闻" group-title="浙江频道",浙江新闻 +http://120.55.49.231:3095/rtp/233.50.201.137:5140$LR•IPV4•15『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="浙江新闻" group-title="浙江频道",浙江新闻 +http://ali-m-l.cztv.com/channels/lantian/channel007/1080p.m3u8$LR•IPV4•15『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="浙江新闻" group-title="浙江频道",浙江新闻 +http://zwebl02.cztv.com/live/channel071080P.m3u8?auth_key=2524708799-0-0-e3b50ca59d2c0883d5386d8bc4cdefbc$LR•IPV4•15『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="浙江新闻" group-title="浙江频道",浙江新闻 +http://zhfivel02.cztv.com/channel07/1080p.m3u8?auth_key=2524708799-0-0-4af48ba83e791a300595dd0b2bb30e6e$LR•IPV4•15『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="浙江新闻" group-title="浙江频道",浙江新闻 +http://ali-vl.cztv.com/channels/lantian/channel007/360p.m3u8$LR•IPV4•15『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="浙江新闻" group-title="浙江频道",浙江新闻 +http://ali-m-l.cztv.com/channels/lantian/channel07/720p.m3u8$LR•IPV4•15『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="浙江新闻" group-title="浙江频道",浙江新闻 +https://ali-m-l.cztv.com/channels/lantian/channel07/720p.m3u8$LR•IPV4•15『线路15』 +#EXTINF:-1 tvg-id="1" tvg-name="浙江国际" group-title="浙江频道",浙江国际 +https://ali-m-l.cztv.com/channels/lantian/channel010/1080p.m3u8$LR•IPV4•23『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="浙江国际" group-title="浙江频道",浙江国际 +https://ali-m-l.cztv.com/channels/lantian/channel010/1080p.m3u8$LR•IPV4•23『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="浙江国际" group-title="浙江频道",浙江国际 +http://ali-vl.cztv.com/channels/lantian/channel010/360p.m3u8$LR•IPV4•23『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="浙江国际" group-title="浙江频道",浙江国际 +http://ali-m-l.cztv.com/channels/lantian/channel010/720p.m3u8$LR•IPV4•23『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="浙江国际" group-title="浙江频道",浙江国际 +http://zwebl02.cztv.com/live/channel101080P.m3u8?auth_key=2524708799-0-0-c9473fea1da3eff0f29f4c9cf2b36519$LR•IPV4•23『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="浙江国际" group-title="浙江频道",浙江国际 +http://zhfivel02.cztv.com/channel10/1080p.m3u8?auth_key=2524708799-0-0-646cad31c1d94b002a325cd75475d30f$LR•IPV4•23『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="浙江国际" group-title="浙江频道",浙江国际 +https://ct-m-l.cztv.com/channels/lantian/channel010/1080p.m3u8$LR•IPV4•23『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="浙江国际" group-title="浙江频道",浙江国际 +https://qiniup-m-l.cztv.com/channels/lantian/channel010/1080p.m3u8$LR•IPV4•23『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="浙江国际" group-title="浙江频道",浙江国际 +https://stream1.freetv.fun/zhe-jiang-guo-ji-3.ctv$LR•IPV4•23『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="浙江国际" group-title="浙江频道",浙江国际 +https://ali-m-l.cztv.com/channels/lantian/channel010/1080p.m3u8?$LR•IPV4•23『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="浙江国际" group-title="浙江频道",浙江国际 +http://ali-m-l.cztv.com/channels/lantian/channel010/1080p.m3u8$LR•IPV4•23『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="浙江国际" group-title="浙江频道",浙江国际 +http://ali-m-l.cztv.com/channels/lantian/channel010/1080p.m3u8$LR•IPV4•23『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="浙江国际" group-title="浙江频道",浙江国际 +https://ali-m-l.cztv.com/channels/lantian/channel010/1080p.m3u8$LR•IPV4•23『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="浙江国际" group-title="浙江频道",浙江国际 +http://zwebl02.cztv.com/live/channel101080P.m3u8?auth_key=2524708799-0-0-c9473fea1da3eff0f29f4c9cf2b36519$LR•IPV4•23『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="浙江国际" group-title="浙江频道",浙江国际 +http://zhfivel02.cztv.com/channel10/1080p.m3u8?auth_key=2524708799-0-0-646cad31c1d94b002a325cd75475d30f$LR•IPV4•23『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="浙江国际" group-title="浙江频道",浙江国际 +https://ct-m-l.cztv.com/channels/lantian/channel010/1080p.m3u8$LR•IPV4•23『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="浙江国际" group-title="浙江频道",浙江国际 +https://qiniup-m-l.cztv.com/channels/lantian/channel010/1080p.m3u8$LR•IPV4•23『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="浙江国际" group-title="浙江频道",浙江国际 +https://ali-m-l.cztv.com/channels/lantian/channel010/1080p.m3u8$LR•IPV4•23『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="浙江国际" group-title="浙江频道",浙江国际 +https://stream1.freetv.fun/zhe-jiang-guo-ji-3.ctv$LR•IPV4•23『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="浙江国际" group-title="浙江频道",浙江国际 +http://ali-vl.cztv.com/channels/lantian/channel010/360p.m3u8$LR•IPV4•23『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="浙江国际" group-title="浙江频道",浙江国际 +http://ali-m-l.cztv.com/channels/lantian/channel010/720p.m3u8$LR•IPV4•23『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="浙江国际" group-title="浙江频道",浙江国际 +https://ali-m-l.cztv.com/channels/lantian/channel010/1080p.m3u8$LR•IPV4•23『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="浙江国际" group-title="浙江频道",浙江国际 +https://ali-m-l.cztv.com/channels/lantian/channel010/1080p.m3u8$LR•IPV4•23『线路23』 +#EXTINF:-1 tvg-id="1" tvg-name="浙江少儿" group-title="浙江频道",浙江少儿 +https://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8$LR•IPV4•27『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="浙江少儿" group-title="浙江频道",浙江少儿 +https://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8$LR•IPV4•27『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="浙江少儿" group-title="浙江频道",浙江少儿 +http://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8$LR•IPV4•27『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="浙江少儿" group-title="浙江频道",浙江少儿 +http://ali-vl.cztv.com/channels/lantian/channel008/360p.m3u8$LR•IPV4•27『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="浙江少儿" group-title="浙江频道",浙江少儿 +https://qiniup-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8$LR•IPV4•27『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="浙江少儿" group-title="浙江频道",浙江少儿 +https://ct-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8$LR•IPV4•27『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="浙江少儿" group-title="浙江频道",浙江少儿 +https://stream1.freetv.fun/zhe-jiang-shao-er-4.ctv$LR•IPV4•27『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="浙江少儿" group-title="浙江频道",浙江少儿 +https://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8?$LR•IPV4•27『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="浙江少儿" group-title="浙江频道",浙江少儿 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=6980&tk=e640d0a1bf70$LR•IPV4•27『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="浙江少儿" group-title="浙江频道",浙江少儿 +http://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8$LR•IPV4•27『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="浙江少儿" group-title="浙江频道",浙江少儿 +https://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8$LR•IPV4•27『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="浙江少儿" group-title="浙江频道",浙江少儿 +https://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8$LR•IPV4•27『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="浙江少儿" group-title="浙江频道",浙江少儿 +https://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8$LR•IPV4•27『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="浙江少儿" group-title="浙江频道",浙江少儿 +https://qiniup-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8$LR•IPV4•27『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="浙江少儿" group-title="浙江频道",浙江少儿 +https://ct-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8$LR•IPV4•27『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="浙江少儿" group-title="浙江频道",浙江少儿 +https://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8$LR•IPV4•27『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="浙江少儿" group-title="浙江频道",浙江少儿 +http://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8$LR•IPV4•27『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="浙江少儿" group-title="浙江频道",浙江少儿 +http://ali-vl.cztv.com/channels/lantian/channel008/360p.m3u8$LR•IPV4•27『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="浙江少儿" group-title="浙江频道",浙江少儿 +https://stream1.freetv.fun/zhe-jiang-shao-er-4.ctv$LR•IPV4•27『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="浙江少儿" group-title="浙江频道",浙江少儿 +https://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8$LR•IPV4•27『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="浙江少儿" group-title="浙江频道",浙江少儿 +https://qiniup-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8$LR•IPV4•27『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="浙江少儿" group-title="浙江频道",浙江少儿 +https://ct-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8$LR•IPV4•27『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="浙江少儿" group-title="浙江频道",浙江少儿 +https://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8$LR•IPV4•27『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="浙江少儿" group-title="浙江频道",浙江少儿 +http://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8$LR•IPV4•27『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="浙江少儿" group-title="浙江频道",浙江少儿 +http://ali-vl.cztv.com/channels/lantian/channel008/360p.m3u8$LR•IPV4•27『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="浙江少儿" group-title="浙江频道",浙江少儿 +https://stream1.freetv.fun/zhe-jiang-shao-er-4.ctv$LR•IPV4•27『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="浙江少儿" group-title="浙江频道",浙江少儿 +https://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8$LR•IPV4•27『线路27』 +#EXTINF:-1 tvg-id="1" tvg-name="浙江教科" group-title="浙江频道",浙江教科 +https://ali-m-l.cztv.com/channels/lantian/channel004/1080p.m3u8$LR•IPV4•10『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="浙江教科" group-title="浙江频道",浙江教科 +http://ali-m-l.cztv.com/channels/lantian/channel004/1080p.m3u8$LR•IPV4•10『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="浙江教科" group-title="浙江频道",浙江教科 +https://ali-m-l.cztv.com/channels/lantian/channel004/1080p.m3u8$LR•IPV4•10『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="浙江教科" group-title="浙江频道",浙江教科 +http://zwebl02.cztv.com/live/channel041080P.m3u8?auth_key=2524708799-0-0-f195b808217db133bfd648edc01e91fa$LR•IPV4•10『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="浙江教科" group-title="浙江频道",浙江教科 +https://ali-m-l.cztv.com/channels/lantian/channel004/1080p.m3u8$LR•IPV4•10『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="浙江教科" group-title="浙江频道",浙江教科 +http://ali-m-l.cztv.com/channels/lantian/channel004/1080p.m3u8$LR•IPV4•10『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="浙江教科" group-title="浙江频道",浙江教科 +https://ali-m-l.cztv.com/channels/lantian/channel004/1080p.m3u8$LR•IPV4•10『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="浙江教科" group-title="浙江频道",浙江教科 +http://zwebl02.cztv.com/live/channel041080P.m3u8?auth_key=2524708799-0-0-f195b808217db133bfd648edc01e91fa$LR•IPV4•10『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="浙江教科" group-title="浙江频道",浙江教科 +https://ali-m-l.cztv.com/channels/lantian/channel004/1080p.m3u8$LR•IPV4•10『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="浙江教科" group-title="浙江频道",浙江教科 +http://ali-m-l.cztv.com/channels/lantian/channel004/1080p.m3u8$LR•IPV4•10『线路10』 +#EXTINF:-1 tvg-id="1" tvg-name="之江纪录" group-title="浙江频道",之江纪录 +https://ali-m-l.cztv.com/channels/lantian/channel012/1080p.m3u8$LR•IPV4•15『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="之江纪录" group-title="浙江频道",之江纪录 +https://ali-m-l.cztv.com/channels/lantian/channel012/1080p.m3u8$LR•IPV4•15『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="之江纪录" group-title="浙江频道",之江纪录 +http://ali-m-l.cztv.com/channels/lantian/channel12/1080p.m3u8$LR•IPV4•15『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="之江纪录" group-title="浙江频道",之江纪录 +https://ali-m-l.cztv.com/channels/lantian/channel12/720p.m3u8$LR•IPV4•15『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="之江纪录" group-title="浙江频道",之江纪录 +http://zwebl02.cztv.com/live/channel121080P.m3u8?auth_key=2524708799-0-0-c33efdd495bcdd2ddc42e7c408405037$LR•IPV4•15『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="之江纪录" group-title="浙江频道",之江纪录 +http://goo.bkpcp.top/mg/zjjl$LR•IPV4•15『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="之江纪录" group-title="浙江频道",之江纪录 +http://ali-m-l.cztv.com/channels/lantian/channel012/1080p.m3u8$LR•IPV4•15『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="之江纪录" group-title="浙江频道",之江纪录 +http://120.55.49.231:3095/rtp/233.50.202.25:5140$LR•IPV4•15『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="之江纪录" group-title="浙江频道",之江纪录 +https://ali-m-l.cztv.com/channels/lantian/channel012/1080p.m3u8$LR•IPV4•15『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="之江纪录" group-title="浙江频道",之江纪录 +http://zwebl02.cztv.com/live/channel121080P.m3u8?auth_key=2524708799-0-0-c33efdd495bcdd2ddc42e7c408405037$LR•IPV4•15『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="之江纪录" group-title="浙江频道",之江纪录 +http://ali-m-l.cztv.com/channels/lantian/channel12/1080p.m3u8$LR•IPV4•15『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="之江纪录" group-title="浙江频道",之江纪录 +http://goo.bkpcp.top/mg/zjjl$LR•IPV4•15『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="之江纪录" group-title="浙江频道",之江纪录 +https://ali-m-l.cztv.com/channels/lantian/channel12/720p.m3u8$LR•IPV4•15『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="之江纪录" group-title="浙江频道",之江纪录 +https://ali-m-l.cztv.com/channels/lantian/channel012/1080p.m3u8$LR•IPV4•15『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="之江纪录" group-title="浙江频道",之江纪录 +https://ali-m-l.cztv.com/channels/lantian/channel012/1080p.m3u8$LR•IPV4•15『线路15』 +#EXTINF:-1 tvg-id="1" tvg-name="浙江民生" group-title="浙江频道",浙江民生 +https://ali-m-l.cztv.com/channels/lantian/channel006/1080p.m3u8$LR•IPV4•10『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="浙江民生" group-title="浙江频道",浙江民生 +http://ali-m-l.cztv.com/channels/lantian/channel006/1080p.m3u8$LR•IPV4•10『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="浙江民生" group-title="浙江频道",浙江民生 +https://ali-m-l.cztv.com/channels/lantian/channel006/1080p.m3u8$LR•IPV4•10『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="浙江民生" group-title="浙江频道",浙江民生 +https://stream1.freetv.fun/zhe-jiang-min-sheng-9.m3u8$LR•IPV4•10『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="浙江民生" group-title="浙江频道",浙江民生 +http://ali-m-l.cztv.com/channels/lantian/channel06/1080p.m3u8$LR•IPV4•10『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="浙江民生" group-title="浙江频道",浙江民生 +https://ali-m-l.cztv.com/channels/lantian/channel006/1080p.m3u8$LR•IPV4•10『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="浙江民生" group-title="浙江频道",浙江民生 +https://ali-m-l.cztv.com/channels/lantian/channel006/1080p.m3u8$LR•IPV4•10『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="浙江民生" group-title="浙江频道",浙江民生 +https://stream1.freetv.fun/zhe-jiang-min-sheng-9.m3u8$LR•IPV4•10『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="浙江民生" group-title="浙江频道",浙江民生 +https://ali-m-l.cztv.com/channels/lantian/channel006/1080p.m3u8$LR•IPV4•10『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="浙江民生" group-title="浙江频道",浙江民生 +http://ali-m-l.cztv.com/channels/lantian/channel006/1080p.m3u8$LR•IPV4•10『线路10』 +#EXTINF:-1 tvg-id="1" tvg-name="浙江经济" group-title="浙江频道",浙江经济 +https://ali-m-l.cztv.com/channels/lantian/channel003/1080p.m3u8$LR•IPV4•9『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="浙江经济" group-title="浙江频道",浙江经济 +http://ali-m-l.cztv.com/channels/lantian/channel003/1080p.m3u8$LR•IPV4•9『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="浙江经济" group-title="浙江频道",浙江经济 +http://zwebl02.cztv.com/live/channel031080P.m3u8?auth_key=2524708799-0-0-cc09266f8e043a6df28eb148cb488d37$LR•IPV4•9『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="浙江经济" group-title="浙江频道",浙江经济 +https://ali-m-l.cztv.com/channels/lantian/channel003/1080p.m3u8$LR•IPV4•9『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="浙江经济" group-title="浙江频道",浙江经济 +https://ali-m-l.cztv.com/channels/lantian/channel003/1080p.m3u8$LR•IPV4•9『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="浙江经济" group-title="浙江频道",浙江经济 +http://zwebl02.cztv.com/live/channel031080P.m3u8?auth_key=2524708799-0-0-cc09266f8e043a6df28eb148cb488d37$LR•IPV4•9『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="浙江经济" group-title="浙江频道",浙江经济 +https://ali-m-l.cztv.com/channels/lantian/channel003/1080p.m3u8$LR•IPV4•9『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="浙江经济" group-title="浙江频道",浙江经济 +https://ali-m-l.cztv.com/channels/lantian/channel003/1080p.m3u8$LR•IPV4•9『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="浙江经济" group-title="浙江频道",浙江经济 +http://ali-m-l.cztv.com/channels/lantian/channel003/1080p.m3u8$LR•IPV4•9『线路9』 +#EXTINF:-1 tvg-id="1" tvg-name="浙江钱江" group-title="浙江频道",浙江钱江 +https://ali-m-l.cztv.com/channels/lantian/channel002/1080p.m3u8$LR•IPV4•16『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="浙江钱江" group-title="浙江频道",浙江钱江 +http://l.cztvcloud.com/channels/lantian/SXyuyao2/720p.m3u8$LR•IPV4•16『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="浙江钱江" group-title="浙江频道",浙江钱江 +http://ali-m-l.cztv.com/channels/lantian/channel002/1080p.m3u8?zzhed$LR•IPV4•16『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="浙江钱江" group-title="浙江频道",浙江钱江 +https://ali-m-l.cztv.com/channels/lantian/channel002/1080p.m3u8$LR•IPV4•16『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="浙江钱江" group-title="浙江频道",浙江钱江 +http://zhfivel02.cztv.com/channel02/1080p.m3u8?auth_key=2524708799-0-0-2f7bb420bfd1d218b9c7b07c0ac1ba2f$LR•IPV4•16『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="浙江钱江" group-title="浙江频道",浙江钱江 +http://zwebl02.cztv.com/live/channel021080P.m3u8?auth_key=2524708799-0-0-43f14b8147c890428975655007afb4cc$LR•IPV4•16『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="浙江钱江" group-title="浙江频道",浙江钱江 +http://ali-m-l.cztv.com/channels/lantian/channel002/1080p.m3u8$LR•IPV4•16『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="浙江钱江" group-title="浙江频道",浙江钱江 +http://120.55.49.231:3095/rtp/233.50.201.132:5140$LR•IPV4•16『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="浙江钱江" group-title="浙江频道",浙江钱江 +https://ali-m-l.cztv.com/channels/lantian/channel002/1080p.m3u8$LR•IPV4•16『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="浙江钱江" group-title="浙江频道",浙江钱江 +http://ali-m-l.cztv.com/channels/lantian/channel002/1080p.m3u8?zzhed$LR•IPV4•16『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="浙江钱江" group-title="浙江频道",浙江钱江 +https://ali-m-l.cztv.com/channels/lantian/channel002/1080p.m3u8$LR•IPV4•16『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="浙江钱江" group-title="浙江频道",浙江钱江 +http://l.cztvcloud.com/channels/lantian/SXyuyao2/720p.m3u8$LR•IPV4•16『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="浙江钱江" group-title="浙江频道",浙江钱江 +http://zhfivel02.cztv.com/channel02/1080p.m3u8?auth_key=2524708799-0-0-2f7bb420bfd1d218b9c7b07c0ac1ba2f$LR•IPV4•16『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="浙江钱江" group-title="浙江频道",浙江钱江 +http://zwebl02.cztv.com/live/channel021080P.m3u8?auth_key=2524708799-0-0-43f14b8147c890428975655007afb4cc$LR•IPV4•16『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="浙江钱江" group-title="浙江频道",浙江钱江 +https://ali-m-l.cztv.com/channels/lantian/channel002/1080p.m3u8$LR•IPV4•16『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="浙江钱江" group-title="浙江频道",浙江钱江 +http://l.cztvcloud.com/channels/lantian/SXyuyao2/720p.m3u8$LR•IPV4•16『线路16』 +#EXTINF:-1 tvg-id="1" tvg-name="凤凰中文" group-title="港·澳·台",凤凰中文 +http://play-flive.ifeng.com/live/06OLEGEGM4G.m3u8$LR•IPV4•34『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="凤凰中文" group-title="港·澳·台",凤凰中文 +https://cdn.iptv8k.top/dl/jrys.php?id=19&time=20240926215313&ip=111.229.253.40$LR•IPV4•34『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="凤凰中文" group-title="港·澳·台",凤凰中文 +http://58.19.180.108:9981/stream/channelid/1749482778?profile=pass$LR•IPV4•34『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="凤凰中文" group-title="港·澳·台",凤凰中文 +http://playtv-live.ifeng.com/live/06OLEGEGM4G_audio.m3u8$LR•IPV4•34『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="凤凰中文" group-title="港·澳·台",凤凰中文 +http://zqh2333.top:2222/rtp/239.93.24.9:2192$LR•IPV4•34『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="凤凰中文" group-title="港·澳·台",凤凰中文 +http://php.jdshipin.com:8880/TVOD/iptv.php?id=fhzw$LR•IPV4•34『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="凤凰中文" group-title="港·澳·台",凤凰中文 +https://k44991.kylintv.tv/live/pxna_iphone.m3u8$LR•IPV4•34『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="凤凰中文" group-title="港·澳·台",凤凰中文 +https://cdn.163189.xyz/live/fhzw/stream.m3u8$LR•IPV4•34『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="凤凰中文" group-title="港·澳·台",凤凰中文 +http://cdn.163.dedyn.io/live/fhzw/stream.m3u8$LR•IPV4•34『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="凤凰中文" group-title="港·澳·台",凤凰中文 +http://cdn.163189.xyz/live/fhzw/stream.m3u8$LR•IPV4•34『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="凤凰中文" group-title="港·澳·台",凤凰中文 +https://stream1.freetv.fun/2b657a181daa345025199e7d6b8de95a1a87b19abceafbd16e2499a49da33c6f.m3u8$LR•IPV4•34『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="凤凰中文" group-title="港·澳·台",凤凰中文 +http://122.117.71.103:8574/http/61.222.53.250:8078/hls/21/80/phoenixch.m3u8$LR•IPV4•34『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="凤凰中文" group-title="港·澳·台",凤凰中文 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=8654&tk=e503191f8e20$LR•IPV4•34『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="凤凰中文" group-title="港·澳·台",凤凰中文 +http://120.55.49.231:3095/rtp/233.50.200.191:5140$LR•IPV4•34『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="凤凰中文" group-title="港·澳·台",凤凰中文 +http://php.jdshipin.com/TVOD/iptv.php?id=fhzw$LR•IPV4•34『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="凤凰中文" group-title="港·澳·台",凤凰中文 +http://api.mytv666.top/api/hk.php?id=3635353536383939393264346132646363626433646461373332353365633339267469643d74762669643d3230$LR•IPV4•34『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="凤凰中文" group-title="港·澳·台",凤凰中文 +http://api.mg.itv888.cn:8080/hls/2f80047f91e/index.m3u8$LR•IPV4•34『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="凤凰中文" group-title="港·澳·台",凤凰中文 +http://203.205.191.53/qctv.fengshows.cn/live/0701pcc72.m3u8$LR•IPV4•34『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="凤凰中文" group-title="港·澳·台",凤凰中文 +http://wouu.net:9977/rtp/239.93.0.162:2192?Cf=cfss.cc$LR•IPV4•34『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="凤凰中文" group-title="港·澳·台",凤凰中文 +http://148.135.93.213:81/phenix.php?id=fhzw$LR•IPV4•34『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="凤凰中文" group-title="港·澳·台",凤凰中文 +https://cdn.iptv8k.top/dl/jrys.php?id=19&time=20240926215313&ip=111.229.253.40$LR•IPV4•34『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="凤凰中文" group-title="港·澳·台",凤凰中文 +http://58.19.180.108:9981/stream/channelid/1749482778?profile=pass$LR•IPV4•34『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="凤凰中文" group-title="港·澳·台",凤凰中文 +http://playtv-live.ifeng.com/live/06OLEGEGM4G_audio.m3u8$LR•IPV4•34『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="凤凰中文" group-title="港·澳·台",凤凰中文 +http://zqh2333.top:2222/rtp/239.93.24.9:2192$LR•IPV4•34『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="凤凰中文" group-title="港·澳·台",凤凰中文 +http://php.jdshipin.com:8880/TVOD/iptv.php?id=fhzw$LR•IPV4•34『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="凤凰中文" group-title="港·澳·台",凤凰中文 +https://k44991.kylintv.tv/live/pxna_iphone.m3u8$LR•IPV4•34『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="凤凰中文" group-title="港·澳·台",凤凰中文 +https://cdn.163189.xyz/live/fhzw/stream.m3u8$LR•IPV4•34『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="凤凰中文" group-title="港·澳·台",凤凰中文 +http://cdn.163.dedyn.io/live/fhzw/stream.m3u8$LR•IPV4•34『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="凤凰中文" group-title="港·澳·台",凤凰中文 +http://cdn.163189.xyz/live/fhzw/stream.m3u8$LR•IPV4•34『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="凤凰中文" group-title="港·澳·台",凤凰中文 +https://stream1.freetv.fun/2b657a181daa345025199e7d6b8de95a1a87b19abceafbd16e2499a49da33c6f.m3u8$LR•IPV4•34『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="凤凰中文" group-title="港·澳·台",凤凰中文 +http://cdn5.1678520.xyz:80/live/live2.1.php?id=fhzw$LR•IPV4•34『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="凤凰中文" group-title="港·澳·台",凤凰中文 +http://www.terrykang.cn:5678/sxg.php?id=test1_4000$LR•IPV4•34『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="凤凰中文" group-title="港·澳·台",凤凰中文 +http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226547/index.m3u8$LR•IPV4•34『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="凤凰中文" group-title="港·澳·台",凤凰中文 +http://php.17186.eu.org/phtv/fhzw.m3u8$LR•IPV4•34『线路34』 +#EXTINF:-1 tvg-id="1" tvg-name="凤凰资讯" group-title="港·澳·台",凤凰资讯 +http://play-flive.ifeng.com/live/06OLEEWQKN4.m3u8$LR•IPV4•34『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="凤凰资讯" group-title="港·澳·台",凤凰资讯 +http://playtv-live.ifeng.com/live/06OLEEWQKN4_audio.m3u8$LR•IPV4•34『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="凤凰资讯" group-title="港·澳·台",凤凰资讯 +http://58.19.180.108:9981/stream/channelid/708272803?profile=pass$LR•IPV4•34『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="凤凰资讯" group-title="港·澳·台",凤凰资讯 +http://zqh2333.top:2222/rtp/239.93.24.4:2191$LR•IPV4•34『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="凤凰资讯" group-title="港·澳·台",凤凰资讯 +https://cdn6.163189.xyz/live/fhzx/stream.m3u8$LR•IPV4•34『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="凤凰资讯" group-title="港·澳·台",凤凰资讯 +https://smart.pendy.dpdns.org/Smart.php?id=phoenixinfo_hd$LR•IPV4•34『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="凤凰资讯" group-title="港·澳·台",凤凰资讯 +http://cdn3.163189.xyz/live/fhzx/stream.m3u8$LR•IPV4•34『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="凤凰资讯" group-title="港·澳·台",凤凰资讯 +https://cdn3.163189.xyz/live/fhzx/stream.m3u8$LR•IPV4•34『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="凤凰资讯" group-title="港·澳·台",凤凰资讯 +https://stream1.freetv.fun/a5857ad51b58a0f7a8c9cbdf291571692b0eed9f5ab2cfce97a211260533c0d8.m3u8$LR•IPV4•34『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="凤凰资讯" group-title="港·澳·台",凤凰资讯 +http://cdn5.1678520.xyz:80/live/live2.1.php?id=fhzx$LR•IPV4•34『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="凤凰资讯" group-title="港·澳·台",凤凰资讯 +http://www.terrykang.cn:5678/sxg.php?id=test2_4000$LR•IPV4•34『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="凤凰资讯" group-title="港·澳·台",凤凰资讯 +http://122.117.71.103:8573/http/61.222.53.250:8078/hls/20/80/phoenixif.m3u8$LR•IPV4•34『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="凤凰资讯" group-title="港·澳·台",凤凰资讯 +http://61.221.215.25:8800/hls/47/index.m3u8$LR•IPV4•34『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="凤凰资讯" group-title="港·澳·台",凤凰资讯 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=5282&tk=2aca1ad9a849$LR•IPV4•34『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="凤凰资讯" group-title="港·澳·台",凤凰资讯 +http://120.55.49.231:3095/rtp/233.50.200.192:5140$LR•IPV4•34『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="凤凰资讯" group-title="港·澳·台",凤凰资讯 +http://php.jdshipin.com/TVOD/iptv.php?id=fhzx$LR•IPV4•34『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="凤凰资讯" group-title="港·澳·台",凤凰资讯 +http://api.mytv666.top/api/hk.php?id=3639313932626236616366636537633734323039313738383137613037633739267469643d74762669643d3231$LR•IPV4•34『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="凤凰资讯" group-title="港·澳·台",凤凰资讯 +http://api.mg.itv888.cn:8080/hls/11ef1dc70d8/index.m3u8$LR•IPV4•34『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="凤凰资讯" group-title="港·澳·台",凤凰资讯 +http://203.205.191.53/qctv.fengshows.cn/live/0701pin72.m3u8$LR•IPV4•34『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="凤凰资讯" group-title="港·澳·台",凤凰资讯 +http://wouu.net:9977/rtp/239.93.0.118:2191?Cf=cfss.cc$LR•IPV4•34『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="凤凰资讯" group-title="港·澳·台",凤凰资讯 +http://148.135.93.213:81/phenix.php?id=fhzx$LR•IPV4•34『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="凤凰资讯" group-title="港·澳·台",凤凰资讯 +http://playtv-live.ifeng.com/live/06OLEEWQKN4_audio.m3u8$LR•IPV4•34『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="凤凰资讯" group-title="港·澳·台",凤凰资讯 +http://58.19.180.108:9981/stream/channelid/708272803?profile=pass$LR•IPV4•34『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="凤凰资讯" group-title="港·澳·台",凤凰资讯 +http://zqh2333.top:2222/rtp/239.93.24.4:2191$LR•IPV4•34『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="凤凰资讯" group-title="港·澳·台",凤凰资讯 +https://cdn6.163189.xyz/live/fhzx/stream.m3u8$LR•IPV4•34『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="凤凰资讯" group-title="港·澳·台",凤凰资讯 +https://smart.pendy.dpdns.org/Smart.php?id=phoenixinfo_hd$LR•IPV4•34『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="凤凰资讯" group-title="港·澳·台",凤凰资讯 +http://cdn3.163189.xyz/live/fhzx/stream.m3u8$LR•IPV4•34『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="凤凰资讯" group-title="港·澳·台",凤凰资讯 +https://cdn3.163189.xyz/live/fhzx/stream.m3u8$LR•IPV4•34『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="凤凰资讯" group-title="港·澳·台",凤凰资讯 +https://stream1.freetv.fun/a5857ad51b58a0f7a8c9cbdf291571692b0eed9f5ab2cfce97a211260533c0d8.m3u8$LR•IPV4•34『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="凤凰资讯" group-title="港·澳·台",凤凰资讯 +http://cdn5.1678520.xyz:80/live/live2.1.php?id=fhzx$LR•IPV4•34『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="凤凰资讯" group-title="港·澳·台",凤凰资讯 +http://www.terrykang.cn:5678/sxg.php?id=test2_4000$LR•IPV4•34『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="凤凰资讯" group-title="港·澳·台",凤凰资讯 +https://k44991.kylintv.tv/live/pxinhd_iphone.m3u8$LR•IPV4•34『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="凤凰资讯" group-title="港·澳·台",凤凰资讯 +http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226546/index.m3u8$LR•IPV4•34『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="凤凰资讯" group-title="港·澳·台",凤凰资讯 +http://hwrr.jx.chinamobile.com:8080/PLTV/88888888/224/3221226274/index.m3u8$LR•IPV4•34『线路34』 +#EXTINF:-1 tvg-id="1" tvg-name="凤凰香港" group-title="港·澳·台",凤凰香港 +https://cdn.iptv8k.top/dl/jrys.php?id=18&time=20240926215313&ip=111.229.253.40$LR•IPV4•26『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="凤凰香港" group-title="港·澳·台",凤凰香港 +http://tri-metal.dsmynas.net:8001/bysid/85.m3u8$LR•IPV4•26『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="凤凰香港" group-title="港·澳·台",凤凰香港 +https://cdn6.163189.xyz/live/fhhk/stream.m3u8$LR•IPV4•26『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="凤凰香港" group-title="港·澳·台",凤凰香港 +http://cdn3.132.us.kg/live/fhhk/stream.m3u8$LR•IPV4•26『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="凤凰香港" group-title="港·澳·台",凤凰香港 +https://smart.pendy.dpdns.org/Smart.php?id=hkphoenix_twn$LR•IPV4•26『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="凤凰香港" group-title="港·澳·台",凤凰香港 +http://php.17186.eu.org/phtv/fhhk.m3u8$LR•IPV4•26『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="凤凰香港" group-title="港·澳·台",凤凰香港 +http://api.mg.itv888.cn:8080/hls/e9660dce9a6/index.m3u8$LR•IPV4•26『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="凤凰香港" group-title="港·澳·台",凤凰香港 +https://live.tvfix.org/live/fwxg/index.m3u8$LR•IPV4•26『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="凤凰香港" group-title="港·澳·台",凤凰香港 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=3523&tk=7877e7cc41c7$LR•IPV4•26『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="凤凰香港" group-title="港·澳·台",凤凰香港 +http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888910/224/3221226251/index.m3u8$LR•IPV6•26『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="凤凰香港" group-title="港·澳·台",凤凰香港 +http://php.jdshipin.com/TVOD/iptv.php?id=fhhk$LR•IPV4•26『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="凤凰香港" group-title="港·澳·台",凤凰香港 +http://api.mytv666.top/api/hk.php?id=6366393933363838303835353235313030313837656130343336356238356364267469643d74762669643d3232$LR•IPV4•26『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="凤凰香港" group-title="港·澳·台",凤凰香港 +http://203.205.191.53/qctv.fengshows.cn/live/0701phk72.m3u8$LR•IPV4•26『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="凤凰香港" group-title="港·澳·台",凤凰香港 +http://ttkx.cc:1380/653哈哈/fh.php?id=fhhk$LR•IPV4•26『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="凤凰香港" group-title="港·澳·台",凤凰香港 +http://148.135.93.213:81/phenix.php?id=fhhk$LR•IPV4•26『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="凤凰香港" group-title="港·澳·台",凤凰香港 +https://cdn.iptv8k.top/dl/jrys.php?id=18&time=20240926215313&ip=111.229.253.40$LR•IPV4•26『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="凤凰香港" group-title="港·澳·台",凤凰香港 +http://tri-metal.dsmynas.net:8001/bysid/85.m3u8$LR•IPV4•26『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="凤凰香港" group-title="港·澳·台",凤凰香港 +https://cdn6.163189.xyz/live/fhhk/stream.m3u8$LR•IPV4•26『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="凤凰香港" group-title="港·澳·台",凤凰香港 +http://cdn3.132.us.kg/live/fhhk/stream.m3u8$LR•IPV4•26『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="凤凰香港" group-title="港·澳·台",凤凰香港 +https://smart.pendy.dpdns.org/Smart.php?id=hkphoenix_twn$LR•IPV4•26『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="凤凰香港" group-title="港·澳·台",凤凰香港 +https://epg.pw/stream/8770e89223a086eb1b8a0c931e42296d772a8069ad3eb72540e0c434e7cb3e93.m3u8$LR•IPV4•26『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="凤凰香港" group-title="港·澳·台",凤凰香港 +http://php.17186.eu.org/phtv/fhhk.m3u8$LR•IPV4•26『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="凤凰香港" group-title="港·澳·台",凤凰香港 +http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888910/224/3221226251/index.m3u8$LR•IPV6•26『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="凤凰香港" group-title="港·澳·台",凤凰香港 +http://api.mg.itv888.cn:8080/hls/e9660dce9a6/index.m3u8$LR•IPV4•26『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="凤凰香港" group-title="港·澳·台",凤凰香港 +https://live.tvfix.org/live/fwxg/index.m3u8$LR•IPV4•26『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="凤凰香港" group-title="港·澳·台",凤凰香港 +https://migu.188766.xyz/?migutoken=9ecafb73d10bfcb8654557f74c044d85&id=fhhk&pp=1$LR•IPV4•26『线路26』 +#EXTINF:-1 tvg-id="1" tvg-name="香港卫视" group-title="港·澳·台",香港卫视 +http://zhibo.hkstv.tv/livestream/mutfysrq/playlist.m3u8$LR•IPV4•19『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="香港卫视" group-title="港·澳·台",香港卫视 +http://zhibo.hkstv.tv/livestream/mutfysrq/playlist.m3u8$LR•IPV4•19『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="香港卫视" group-title="港·澳·台",香港卫视 +http://zhibo.hkstv.tv/livestream/mutfysrq/playlist.m3u8$LR•IPV4•19『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="香港卫视" group-title="港·澳·台",香港卫视 +http://cctvtxyh5c.liveplay.myqcloud.com/cstv/xianggangweishi_2/index.m3u8$LR•IPV4•19『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="香港卫视" group-title="港·澳·台",香港卫视 +https://stream1.freetv.fun/5335c88a9a7d8b74173b491f480d4f94e8d3bd596af54478106aa2399e6c7917.m3u8$LR•IPV4•19『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="香港卫视" group-title="港·澳·台",香港卫视 +https://yvxymm.tv12.xyz/175.m3u8$LR•IPV4•19『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="香港卫视" group-title="港·澳·台",香港卫视 +https://migu.188766.xyz/?migutoken=71c1dbe4568d6c43573e0f04671d588f&id=%E9%A6%99%E6%B8%AF%E5%8D%AB%E8%A7%86&pp=1$LR•IPV4•19『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="香港卫视" group-title="港·澳·台",香港卫视 +http://zhibo.hkstv.tv/livestream/mutfysrq/playlist.m3u8?wsSession=8ee59707fee3ef96c922e680-167055218938751&wsIPSercert=d24f6d7c9d3646d9533d492d5209384b&wsMonitor=0$LR•IPV4•19『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="香港卫视" group-title="港·澳·台",香港卫视 +http://101.35.240.114:88/live.php?id=香港卫视$LR•IPV4•19『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="香港卫视" group-title="港·澳·台",香港卫视 +http://zhibo.hkstv.tv/livestream/mutfysrq/playlist.m3u8$LR•IPV4•19『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="香港卫视" group-title="港·澳·台",香港卫视 +http://zhibo.hkstv.tv/livestream/mutfysrq/playlist.m3u8$LR•IPV4•19『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="香港卫视" group-title="港·澳·台",香港卫视 +http://cctvtxyh5c.liveplay.myqcloud.com/cstv/xianggangweishi_2/index.m3u8$LR•IPV4•19『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="香港卫视" group-title="港·澳·台",香港卫视 +https://stream1.freetv.fun/5335c88a9a7d8b74173b491f480d4f94e8d3bd596af54478106aa2399e6c7917.m3u8$LR•IPV4•19『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="香港卫视" group-title="港·澳·台",香港卫视 +https://yvxymm.tv12.xyz/175.m3u8$LR•IPV4•19『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="香港卫视" group-title="港·澳·台",香港卫视 +https://migu.188766.xyz/?migutoken=71c1dbe4568d6c43573e0f04671d588f&id=%E9%A6%99%E6%B8%AF%E5%8D%AB%E8%A7%86&pp=1$LR•IPV4•19『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="香港卫视" group-title="港·澳·台",香港卫视 +http://cctvtxyh5c.liveplay.myqcloud.com/cstv/xianggangweishi_2/index.m3u8$LR•IPV4•19『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="香港卫视" group-title="港·澳·台",香港卫视 +https://stream1.freetv.fun/5335c88a9a7d8b74173b491f480d4f94e8d3bd596af54478106aa2399e6c7917.m3u8$LR•IPV4•19『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="香港卫视" group-title="港·澳·台",香港卫视 +https://yvxymm.tv12.xyz/175.m3u8$LR•IPV4•19『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="香港卫视" group-title="港·澳·台",香港卫视 +https://migu.188766.xyz/?migutoken=71c1dbe4568d6c43573e0f04671d588f&id=%E9%A6%99%E6%B8%AF%E5%8D%AB%E8%A7%86&pp=1$LR•IPV4•19『线路19』 +#EXTINF:-1 tvg-id="1" tvg-name="翡翠" group-title="港·澳·台",翡翠 +https://cdn.iptv8k.top/dl/jrys.php?id=3&time=20240926215313&ip=111.229.253.40『线路08』$LR•IPV4•34『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="翡翠" group-title="港·澳·台",翡翠 +http://8.138.7.223/tv/hot.php?id=68$LR•IPV4•34『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="翡翠" group-title="港·澳·台",翡翠 +http://php.jdshipin.com:8880/TVOD/iptv.php?id=fct3&token=512df05ba47edb46400575c93e179adb7981226d414516400ed1d382cb126adc517715d4ccd3a2276bf3c7b72d52f58905225cf0b1cc461b7888443f$LR•IPV4•34『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="翡翠" group-title="港·澳·台",翡翠 +http://cdn9.163189.xyz/smt1.1.php?id=jade_twn$LR•IPV4•34『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="翡翠" group-title="港·澳·台",翡翠 +http://v2h.jdshipin.com:80/jade2/jade.stream/chunklist_w100.m3u8$LR•IPV4•34『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="翡翠" group-title="港·澳·台",翡翠 +https://stream1.freetv.fun/fei-cui-6.ctv$LR•IPV4•34『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="翡翠" group-title="港·澳·台",翡翠 +https://cdn3.163189.xyz/live/fct/stream.m3u8$LR•IPV4•34『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="翡翠" group-title="港·澳·台",翡翠 +https://cdn5.1678520.xyz/live/live2.1.php?id=j1$LR•IPV4•34『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="翡翠" group-title="港·澳·台",翡翠 +https://cdn.163189.xyz/live/fct4k/stream.m3u8$LR•IPV4•34『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="翡翠" group-title="港·澳·台",翡翠 +http://cdn5.1678520.xyz/live/?id=fct$LR•IPV4•34『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="翡翠" group-title="港·澳·台",翡翠 +https://cdn.iptv8k.top/dl/jrys.php?id=3&time=20240926215313&ip=111.229.253.40$LR•IPV4•34『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="翡翠" group-title="港·澳·台",翡翠 +http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=0401&tk=2aca1ad9a849$LR•IPV4•34『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="翡翠" group-title="港·澳·台",翡翠 +http://122.152.202.33/s/81a8a44f/index.m3u8?id=53$LR•IPV4•34『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="翡翠" group-title="港·澳·台",翡翠 +http://mzitv.cn:32/tsfile/live/1016_1.m3u8$LR•IPV4•34『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="翡翠" group-title="港·澳·台",翡翠 +http://185.243.7.13:80/play/live.php?mac=00:1A:79:45:5E:9A&stream=941619&extension=ts&play_token=p2yEuU1aFS$LR•IPV4•34『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="翡翠" group-title="港·澳·台",翡翠 +http://fm1077.serv00.net/Smart.php?id=jade_twn$LR•IPV4•34『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="翡翠" group-title="港·澳·台",翡翠 +http://101.35.240.114:88/live.php?id=翡翠台$LR•IPV4•34『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="翡翠" group-title="港·澳·台",翡翠 +http://bxtv.3a.ink/api.php?id=fct$LR•IPV4•34『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="翡翠" group-title="港·澳·台",翡翠 +http://cdn9.163189.xyz/smt1.1.php?id=jade_twn$LR•IPV4•34『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="翡翠" group-title="港·澳·台",翡翠 +http://php.jdshipin.com:8880/smt.php?id=jade_twn$LR•IPV4•34『线路20』 +#EXTINF:-1 tvg-id="21" tvg-name="翡翠" group-title="港·澳·台",翡翠 +http://php.jdshipin.com:8880/TVOD/iptv.php?id=fct4$LR•IPV4•34『线路21』 +#EXTINF:-1 tvg-id="22" tvg-name="翡翠" group-title="港·澳·台",翡翠 +http://aktv-stream.m16tv.cfd/stream/aktv/null/AKTV.m3u8$LR•IPV4•34『线路22』 +#EXTINF:-1 tvg-id="23" tvg-name="翡翠" group-title="港·澳·台",翡翠 +https://cdn.iptv8k.top/dl/jrys.php?id=3&time=20240926215313&ip=111.229.253.40『线路08』$LR•IPV4•34『线路23』 +#EXTINF:-1 tvg-id="24" tvg-name="翡翠" group-title="港·澳·台",翡翠 +http://8.138.7.223/tv/hot.php?id=68$LR•IPV4•34『线路24』 +#EXTINF:-1 tvg-id="25" tvg-name="翡翠" group-title="港·澳·台",翡翠 +http://php.jdshipin.com:8880/TVOD/iptv.php?id=fct3&token=512df05ba47edb46400575c93e179adb7981226d414516400ed1d382cb126adc517715d4ccd3a2276bf3c7b72d52f58905225cf0b1cc461b7888443f$LR•IPV4•34『线路25』 +#EXTINF:-1 tvg-id="26" tvg-name="翡翠" group-title="港·澳·台",翡翠 +http://cdn9.163189.xyz/smt1.1.php?id=jade_twn$LR•IPV4•34『线路26』 +#EXTINF:-1 tvg-id="27" tvg-name="翡翠" group-title="港·澳·台",翡翠 +http://v2h.jdshipin.com:80/jade2/jade.stream/chunklist_w100.m3u8$LR•IPV4•34『线路27』 +#EXTINF:-1 tvg-id="28" tvg-name="翡翠" group-title="港·澳·台",翡翠 +https://stream1.freetv.fun/fei-cui-6.ctv$LR•IPV4•34『线路28』 +#EXTINF:-1 tvg-id="29" tvg-name="翡翠" group-title="港·澳·台",翡翠 +https://cdn3.163189.xyz/live/fct/stream.m3u8$LR•IPV4•34『线路29』 +#EXTINF:-1 tvg-id="30" tvg-name="翡翠" group-title="港·澳·台",翡翠 +https://cdn5.1678520.xyz/live/live2.1.php?id=j1$LR•IPV4•34『线路30』 +#EXTINF:-1 tvg-id="31" tvg-name="翡翠" group-title="港·澳·台",翡翠 +https://cdn.163189.xyz/live/fct4k/stream.m3u8$LR•IPV4•34『线路31』 +#EXTINF:-1 tvg-id="32" tvg-name="翡翠" group-title="港·澳·台",翡翠 +http://cdn5.1678520.xyz/live/?id=fct$LR•IPV4•34『线路32』 +#EXTINF:-1 tvg-id="33" tvg-name="翡翠" group-title="港·澳·台",翡翠 +http://api.mg.itv888.cn:8080/hls/4bb8922027c/index.m3u8$LR•IPV4•34『线路33』 +#EXTINF:-1 tvg-id="34" tvg-name="翡翠" group-title="港·澳·台",翡翠 +http://s1.an94tv.cfd/aktv/CH-0/AKTV.m3u8$LR•IPV4•34『线路34』 +#EXTINF:-1 tvg-id="1" tvg-name="明珠" group-title="港·澳·台",明珠 +http://cdn9.163189.xyz/smt1.1.php?id=pearl_twn$LR•IPV4•20『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="明珠" group-title="港·澳·台",明珠 +http://php.jdshipin.com:8880/smt.php?id=pearl_twn$LR•IPV4•20『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="明珠" group-title="港·澳·台",明珠 +http://s1.an94tv.cfd/aktv/CH-2/AKTV.m3u8$LR•IPV4•20『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="明珠" group-title="港·澳·台",明珠 +https://stream1.freetv.fun/ming-zhu-10.m3u8$LR•IPV4•20『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="明珠" group-title="港·澳·台",明珠 +https://live.tvfix.org/live/pearl/1/v4000000/index.m3u8$LR•IPV4•20『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="明珠" group-title="港·澳·台",明珠 +http://bxtv.3a.ink/api.php?id=mz$LR•IPV4•20『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="明珠" group-title="港·澳·台",明珠 +https://migu.188766.xyz/?migutoken=7587aa81b1dcc4ed3adff2166ecdaf82&id=pearl_twn&type=dy$LR•IPV4•20『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="明珠" group-title="港·澳·台",明珠 +https://mytv.cdn.loc.cc/o12.php?id=mzt$LR•IPV4•20『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="明珠" group-title="港·澳·台",明珠 +http://bxtv.3a.ink/api.php?id=mz$LR•IPV4•20『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="明珠" group-title="港·澳·台",明珠 +http://cdn9.163189.xyz/smt1.1.php?id=pearl_twn$LR•IPV4•20『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="明珠" group-title="港·澳·台",明珠 +http://php.jdshipin.com/TVOD/iptv.php?id=mzt$LR•IPV4•20『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="明珠" group-title="港·澳·台",明珠 +http://aktv-stream.m16tv.cfd/stream/aktv/null-2/AKTV.m3u8$LR•IPV4•20『线路12』 +#EXTINF:-1 tvg-id="13" tvg-name="明珠" group-title="港·澳·台",明珠 +http://cdn9.163189.xyz/smt1.1.php?id=pearl_twn$LR•IPV4•20『线路13』 +#EXTINF:-1 tvg-id="14" tvg-name="明珠" group-title="港·澳·台",明珠 +http://php.jdshipin.com:8880/smt.php?id=pearl_twn$LR•IPV4•20『线路14』 +#EXTINF:-1 tvg-id="15" tvg-name="明珠" group-title="港·澳·台",明珠 +http://s1.an94tv.cfd/aktv/CH-2/AKTV.m3u8$LR•IPV4•20『线路15』 +#EXTINF:-1 tvg-id="16" tvg-name="明珠" group-title="港·澳·台",明珠 +https://stream1.freetv.fun/ming-zhu-10.m3u8$LR•IPV4•20『线路16』 +#EXTINF:-1 tvg-id="17" tvg-name="明珠" group-title="港·澳·台",明珠 +https://live.tvfix.org/live/pearl/1/v4000000/index.m3u8$LR•IPV4•20『线路17』 +#EXTINF:-1 tvg-id="18" tvg-name="明珠" group-title="港·澳·台",明珠 +http://bxtv.3a.ink/api.php?id=mz$LR•IPV4•20『线路18』 +#EXTINF:-1 tvg-id="19" tvg-name="明珠" group-title="港·澳·台",明珠 +https://migu.188766.xyz/?migutoken=7587aa81b1dcc4ed3adff2166ecdaf82&id=pearl_twn&type=dy$LR•IPV4•20『线路19』 +#EXTINF:-1 tvg-id="20" tvg-name="明珠" group-title="港·澳·台",明珠 +https://mytv.cdn.loc.cc/o12.php?id=mzt$LR•IPV4•20『线路20』 +#EXTINF:-1 tvg-id="1" tvg-name="无线新闻" group-title="港·澳·台",无线新闻 +http://php.jdshipin.com:8880/TVOD/iptv.php?id=tvbxw$LR•IPV4•11『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="无线新闻" group-title="港·澳·台",无线新闻 +https://cdn9.163189.xyz/smt3.1.1.php?id=inews_twn$LR•IPV4•11『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="无线新闻" group-title="港·澳·台",无线新闻 +http://cdn9.163189.xyz/smt1.1.php?id=inews_twn$LR•IPV4•11『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="无线新闻" group-title="港·澳·台",无线新闻 +https://v2hcdn.jdshipin.com/news/news.stream/chunklist_w105.m3u8$LR•IPV4•11『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="无线新闻" group-title="港·澳·台",无线新闻 +http://v2hcdn.jdshipin.com/news/news.stream/chunklist_w1005.m3u8$LR•IPV4•11『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="无线新闻" group-title="港·澳·台",无线新闻 +http://api.mytv666.top/api/hk.php?id=3437643561316430306564303532666566613235653961373961303464386662267469643d74762669643d3235$LR•IPV4•11『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="无线新闻" group-title="港·澳·台",无线新闻 +http://php.jdshipin.com:8880/TVOD/iptv.php?id=tvbxw$LR•IPV4•11『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="无线新闻" group-title="港·澳·台",无线新闻 +https://cdn9.163189.xyz/smt3.1.1.php?id=inews_twn$LR•IPV4•11『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="无线新闻" group-title="港·澳·台",无线新闻 +http://cdn9.163189.xyz/smt1.1.php?id=inews_twn$LR•IPV4•11『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="无线新闻" group-title="港·澳·台",无线新闻 +https://v2hcdn.jdshipin.com/news/news.stream/chunklist_w105.m3u8$LR•IPV4•11『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="无线新闻" group-title="港·澳·台",无线新闻 +http://v2hcdn.jdshipin.com/news/news.stream/chunklist_w1005.m3u8$LR•IPV4•11『线路11』 +#EXTINF:-1 tvg-id="1" tvg-name="J2" group-title="港·澳·台",J2 +http://php.jdshipin.com:8880/PLTV/iptv.php?id=j2$LR•IPV4•3『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="J2" group-title="港·澳·台",J2 +http://fm1077.serv00.net/Smart.php?id=j2_twn$LR•IPV4•3『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="J2" group-title="港·澳·台",J2 +http://php.jdshipin.com:8880/PLTV/iptv.php?id=j2$LR•IPV4•3『线路3』 +#EXTINF:-1 tvg-id="1" tvg-name="台视" group-title="港·澳·台",台视 +http://fm1077.serv00.net/Smart.php?id=ttv_taiwan$LR•IPV4•4『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="台视" group-title="港·澳·台",台视 +rtmp://f13h.mine.nu/sat/tv071$LR•IPV4•4『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="台视" group-title="港·澳·台",台视 +rtmp://f13h.mine.nu/sat/tv071$LR•IPV4•4『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="台视" group-title="港·澳·台",台视 +http://aktv-stream.m16tv.cfd/stream/taiwan/null-3/AKTV.m3u8$LR•IPV4•4『线路4』 +#EXTINF:-1 tvg-id="1" tvg-name="台视新闻" group-title="港·澳·台",台视新闻 +https://live.catvod.com/catvod_com.php?id=ttvnews_twn$LR•IPV4•6『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="台视新闻" group-title="港·澳·台",台视新闻 +http://api.mytv666.top/api/hk.php?id=3532663033343761633136633334333932346565303765616636633239323362267469643d74762669643d3533$LR•IPV4•6『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="台视新闻" group-title="港·澳·台",台视新闻 +http://api.mytv666.top/api/hk.php?id=3663373532323635333633666462356635623632313130333233393162303838267469643d74762669643d313031$LR•IPV4•6『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="台视新闻" group-title="港·澳·台",台视新闻 +http://38.64.72.148/hls/modn/list/4013/chunklist1.m3u8$LR•IPV4•6『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="台视新闻" group-title="港·澳·台",台视新闻 +http://222.128.55.152:9080/live/ts.m3u8$LR•IPV4•6『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="台视新闻" group-title="港·澳·台",台视新闻 +http://aktv-stream.m16tv.cfd/stream/taiwan/null-15/AKTV.m3u8$LR•IPV4•6『线路6』 +#EXTINF:-1 tvg-id="1" tvg-name="民视" group-title="港·澳·台",民视 +http://fm1077.serv00.net/Smart.php?id=ftvhd_taiwan$LR•IPV4•3『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="民视" group-title="港·澳·台",民视 +rtmp://f13h.mine.nu/sat/tv051$LR•IPV4•3『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="民视" group-title="港·澳·台",民视 +rtmp://f13h.mine.nu/sat/tv051$LR•IPV4•3『线路3』 +#EXTINF:-1 tvg-id="1" tvg-name="民视新闻" group-title="港·澳·台",民视新闻 +http://fm1077.serv00.net/Smart.php?id=ftvnew_taiwan$LR•IPV4•6『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="民视新闻" group-title="港·澳·台",民视新闻 +https://live.catvod.com/catvod_com.php?id=ftvnew_taiwan$LR•IPV4•6『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="民视新闻" group-title="港·澳·台",民视新闻 +http://api.mytv666.top/api/hk.php?id=6133333434353635663133373938343030353333343563353132326433396230267469643d74762669643d3536$LR•IPV4•6『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="民视新闻" group-title="港·澳·台",民视新闻 +http://api.mytv666.top/api/hk.php?id=6333356235396430353565313132653234663436373463386363396139623936267469643d74762669643d313130$LR•IPV4•6『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="民视新闻" group-title="港·澳·台",民视新闻 +http://live4play.uk/livehttpplay?channel_id=20097$LR•IPV4•6『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="民视新闻" group-title="港·澳·台",民视新闻 +http://38.64.72.148:80/hls/modn/list/4012/chunklist1.m3u8$LR•IPV4•6『线路6』 +#EXTINF:-1 tvg-id="1" tvg-name="澳亚卫视" group-title="港·澳·台",澳亚卫视 +http://cdn9.163189.xyz/live/as/stream.m3u8$LR•IPV4•2『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="澳亚卫视" group-title="港·澳·台",澳亚卫视 +https://stream1.freetv.fun/ao-ya-wei-shi-1.ctv$LR•IPV4•2『线路2』 +#EXTINF:-1 tvg-id="1" tvg-name="甄子丹" group-title="电影轮播",甄子丹 +http://iptv.jxpan.vip:18888/aio/huya/11352935$LR•IPV4•3『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="甄子丹" group-title="电影轮播",甄子丹 +http://1.94.31.214:35455/huya/11352935$LR•IPV4•3『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="甄子丹" group-title="电影轮播",甄子丹 +http://iptv.jxpan.vip:18888/aio/huya/11352935$LR•IPV4•3『线路3』 +#EXTINF:-1 tvg-id="1" tvg-name="邵氏影院" group-title="电影轮播",邵氏影院 +http://iptv.jxpan.vip:18888/aio/douyu/4246519$LR•IPV4•3『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="邵氏影院" group-title="电影轮播",邵氏影院 +http://1.94.31.214:35455/douyu/4246519$LR•IPV4•3『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="邵氏影院" group-title="电影轮播",邵氏影院 +http://iptv.jxpan.vip:18888/aio/douyu/4246519$LR•IPV4•3『线路3』 +#EXTINF:-1 tvg-id="1" tvg-name="狂飙" group-title="剧集轮播",狂飙 +http://luobo.bkpcp.top/yy/1355142167$LR•IPV4•2『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="狂飙" group-title="剧集轮播",狂飙 +http://1.94.31.214:35455/yy/1355142167$LR•IPV4•2『线路2』 +#EXTINF:-1 tvg-id="1" tvg-name="水浒传" group-title="剧集轮播",水浒传 +http://www.clmy.cc:35455/yy/1353873252$LR•IPV4•2『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="水浒传" group-title="剧集轮播",水浒传 +http://www.clmy.cc:35455/yy/1353873252$LR•IPV4•2『线路2』 +#EXTINF:-1 tvg-id="1" tvg-name="庆余年" group-title="剧集轮播",庆余年 +http://iptv.jxpan.vip:18888/aio/huya/11352960$LR•IPV4•2『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="庆余年" group-title="剧集轮播",庆余年 +http://1.94.31.214:35455/huya/11352960$LR•IPV4•2『线路2』 +#EXTINF:-1 tvg-id="1" tvg-name="琅琊榜" group-title="剧集轮播",琅琊榜 +http://zby.xjqxz.top/lyb/live.m3u8$LR•IPV4 +#EXTINF:-1 tvg-id="1" tvg-name="芈月传" group-title="剧集轮播",芈月传 +http://iptv.jxpan.vip:18888/aio/huya/11352975$LR•IPV4 +#EXTINF:-1 tvg-id="1" tvg-name="康熙微服私访记" group-title="剧集轮播",康熙微服私访记 +http://iptv.jxpan.vip:18888/aio/huya/11342418$LR•IPV4 +#EXTINF:-1 tvg-id="1" tvg-name="三国演义" group-title="剧集轮播",三国演义 +https://live.iill.top/huya/11602081$LR•IPV4•9『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="三国演义" group-title="剧集轮播",三国演义 +http://live.iill.top/yy.php?id=1354936241$LR•IPV4•9『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="三国演义" group-title="剧集轮播",三国演义 +http://rihou.cc:555/huyad.php?id=11602081$LR•IPV4•9『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="三国演义" group-title="剧集轮播",三国演义 +https://lunbo.freetv.top/yy/1354930932$LR•IPV4•9『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="三国演义" group-title="剧集轮播",三国演义 +http://1.94.31.214:35455/huya/11602081$LR•IPV4•9『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="三国演义" group-title="剧集轮播",三国演义 +http://iptv.jxpan.vip:18888/aio/huya/11602081$LR•IPV4•9『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="三国演义" group-title="剧集轮播",三国演义 +http://1.94.31.214:35455/huya/11602081$LR•IPV4•9『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="三国演义" group-title="剧集轮播",三国演义 +https://live.iill.top/huya/11602081$LR•IPV4•9『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="三国演义" group-title="剧集轮播",三国演义 +http://live.iill.top/yy.php?id=1354936241$LR•IPV4•9『线路9』 +#EXTINF:-1 tvg-id="1" tvg-name="猫和老鼠" group-title="剧集轮播",猫和老鼠 +https://live.iill.top/huya/11352879$LR•IPV4•7『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="猫和老鼠" group-title="剧集轮播",猫和老鼠 +http://live.iill.top/huya.php?id=11352879$LR•IPV4•7『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="猫和老鼠" group-title="剧集轮播",猫和老鼠 +http://iptv.jxpan.vip:18888/aio/huya/11352879$LR•IPV4•7『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="猫和老鼠" group-title="剧集轮播",猫和老鼠 +http://182.40.120.180/test-txdwk.flv.huya.com/src/1423782038-1423782038-6115097289842229248-2847687532-10057-A-0-1.m3u8$LR•IPV4•7『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="猫和老鼠" group-title="剧集轮播",猫和老鼠 +https://live.iill.top/huya/11352879$LR•IPV4•7『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="猫和老鼠" group-title="剧集轮播",猫和老鼠 +http://live.iill.top/huya.php?id=11352879$LR•IPV4•7『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="猫和老鼠" group-title="剧集轮播",猫和老鼠 +http://iptv.jxpan.vip:18888/aio/huya/11352879$LR•IPV4•7『线路7』 +#EXTINF:-1 tvg-id="1" tvg-name="刑事侦缉档案" group-title="剧集轮播",刑事侦缉档案 +http://iptv.jxpan.vip:18888/aio/huya/29465856$LR•IPV4•4『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="刑事侦缉档案" group-title="剧集轮播",刑事侦缉档案 +http://iptv.jxpan.vip:18888/aio/huya/29465856$LR•IPV4•4『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="刑事侦缉档案" group-title="剧集轮播",刑事侦缉档案 +http://iptv.jxpan.vip:18888/aio/huya/29465856$LR•IPV4•4『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="刑事侦缉档案" group-title="剧集轮播",刑事侦缉档案 +http://1.94.31.214:35455/huya/29465856$LR•IPV4•4『线路4』 +#EXTINF:-1 tvg-id="1" tvg-name="寻秦记" group-title="剧集轮播",寻秦记 +http://iptv.jxpan.vip:18888/aio/huya/29465848$LR•IPV4•3『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="寻秦记" group-title="剧集轮播",寻秦记 +http://iptv.jxpan.vip:18888/aio/huya/29465848$LR•IPV4•3『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="寻秦记" group-title="剧集轮播",寻秦记 +http://1.94.31.214:35455/huya/29465848$LR•IPV4•3『线路3』 +#EXTINF:-1 tvg-id="1" tvg-name="陀枪师姐" group-title="剧集轮播",陀枪师姐 +http://iptv.jxpan.vip:18888/aio/huya/29465857$LR•IPV4•4『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="陀枪师姐" group-title="剧集轮播",陀枪师姐 +http://iptv.jxpan.vip:18888/aio/huya/29465857$LR•IPV4•4『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="陀枪师姐" group-title="剧集轮播",陀枪师姐 +http://iptv.jxpan.vip:18888/aio/huya/29465857$LR•IPV4•4『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="陀枪师姐" group-title="剧集轮播",陀枪师姐 +http://1.94.31.214:35455/huya/29465857$LR•IPV4•4『线路4』 +#EXTINF:-1 tvg-id="1" tvg-name="笑傲江湖" group-title="剧集轮播",笑傲江湖 +http://lu.wqwqwq.sbs/yy/1354930909$LR•IPV4•12『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="笑傲江湖" group-title="剧集轮播",笑傲江湖 +https://live.iill.top/huya/23865142$LR•IPV4•12『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="笑傲江湖" group-title="剧集轮播",笑傲江湖 +http://live.iill.top/yy.php?id=1354282410$LR•IPV4•12『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="笑傲江湖" group-title="剧集轮播",笑傲江湖 +http://rihou.cc:555/huyad.php?id=23865142$LR•IPV4•12『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="笑傲江湖" group-title="剧集轮播",笑傲江湖 +http://1.94.31.214:35455/huya/26355790$LR•IPV4•12『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="笑傲江湖" group-title="剧集轮播",笑傲江湖 +http://iptv.jxpan.vip:18888/aio/huya/26355790$LR•IPV4•12『线路6』 +#EXTINF:-1 tvg-id="7" tvg-name="笑傲江湖" group-title="剧集轮播",笑傲江湖 +http://1.94.31.214:35455/huya/26355790$LR•IPV4•12『线路7』 +#EXTINF:-1 tvg-id="8" tvg-name="笑傲江湖" group-title="剧集轮播",笑傲江湖 +http://iptv.jxpan.vip:18888/aio/huya/23865142$LR•IPV4•12『线路8』 +#EXTINF:-1 tvg-id="9" tvg-name="笑傲江湖" group-title="剧集轮播",笑傲江湖 +http://1.94.31.214:35455/huya/23865142$LR•IPV4•12『线路9』 +#EXTINF:-1 tvg-id="10" tvg-name="笑傲江湖" group-title="剧集轮播",笑傲江湖 +http://lu.wqwqwq.sbs/yy/1354930909$LR•IPV4•12『线路10』 +#EXTINF:-1 tvg-id="11" tvg-name="笑傲江湖" group-title="剧集轮播",笑傲江湖 +https://live.iill.top/huya/23865142$LR•IPV4•12『线路11』 +#EXTINF:-1 tvg-id="12" tvg-name="笑傲江湖" group-title="剧集轮播",笑傲江湖 +http://live.iill.top/yy.php?id=1354282410$LR•IPV4•12『线路12』 +#EXTINF:-1 tvg-id="1" tvg-name="洗冤录" group-title="剧集轮播",洗冤录 +http://iptv.jxpan.vip:18888/aio/huya/29465851$LR•IPV4•4『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="洗冤录" group-title="剧集轮播",洗冤录 +http://iptv.jxpan.vip:18888/aio/huya/29465851$LR•IPV4•4『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="洗冤录" group-title="剧集轮播",洗冤录 +http://iptv.jxpan.vip:18888/aio/huya/29465851$LR•IPV4•4『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="洗冤录" group-title="剧集轮播",洗冤录 +http://1.94.31.214:35455/huya/29465851$LR•IPV4•4『线路4』 +#EXTINF:-1 tvg-id="1" tvg-name="倚天屠龙记" group-title="剧集轮播",倚天屠龙记 +http://iptv.jxpan.vip:18888/aio/huya/23734246$LR•IPV4•5『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="倚天屠龙记" group-title="剧集轮播",倚天屠龙记 +http://iptv.jxpan.vip:18888/aio/huya/11342403$LR•IPV4•5『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="倚天屠龙记" group-title="剧集轮播",倚天屠龙记 +http://1.94.31.214:35455/huya/11342403$LR•IPV4•5『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="倚天屠龙记" group-title="剧集轮播",倚天屠龙记 +http://iptv.jxpan.vip:18888/aio/huya/23734246$LR•IPV4•5『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="倚天屠龙记" group-title="剧集轮播",倚天屠龙记 +http://1.94.31.214:35455/huya/23734246$LR•IPV4•5『线路5』 +#EXTINF:-1 tvg-id="1" tvg-name="神雕侠侣" group-title="剧集轮播",神雕侠侣 +http://iptv.jxpan.vip:18888/aio/huya/23865171$LR•IPV4•6『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="神雕侠侣" group-title="剧集轮播",神雕侠侣 +http://iptv.jxpan.vip:18888/aio/huya/23865171$LR•IPV4•6『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="神雕侠侣" group-title="剧集轮播",神雕侠侣 +http://iptv.jxpan.vip:18888/aio/huya/11352964$LR•IPV4•6『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="神雕侠侣" group-title="剧集轮播",神雕侠侣 +http://1.94.31.214:35455/huya/11352964$LR•IPV4•6『线路4』 +#EXTINF:-1 tvg-id="5" tvg-name="神雕侠侣" group-title="剧集轮播",神雕侠侣 +http://iptv.jxpan.vip:18888/aio/huya/23865171$LR•IPV4•6『线路5』 +#EXTINF:-1 tvg-id="6" tvg-name="神雕侠侣" group-title="剧集轮播",神雕侠侣 +http://1.94.31.214:35455/huya/23865171$LR•IPV4•6『线路6』 +#EXTINF:-1 tvg-id="1" tvg-name="鉴证实录" group-title="剧集轮播",鉴证实录 +http://iptv.jxpan.vip:18888/aio/huya/23903183$LR•IPV4•4『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="鉴证实录" group-title="剧集轮播",鉴证实录 +http://iptv.jxpan.vip:18888/aio/huya/23903183$LR•IPV4•4『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="鉴证实录" group-title="剧集轮播",鉴证实录 +http://iptv.jxpan.vip:18888/aio/huya/23903183$LR•IPV4•4『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="鉴证实录" group-title="剧集轮播",鉴证实录 +http://1.94.31.214:35455/huya/23903183$LR•IPV4•4『线路4』 +#EXTINF:-1 tvg-id="1" tvg-name="创世纪" group-title="剧集轮播",创世纪 +http://iptv.jxpan.vip:18888/aio/huya/29465852$LR•IPV4•4『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="创世纪" group-title="剧集轮播",创世纪 +http://iptv.jxpan.vip:18888/aio/huya/29465852$LR•IPV4•4『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="创世纪" group-title="剧集轮播",创世纪 +http://iptv.jxpan.vip:18888/aio/huya/29465852$LR•IPV4•4『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="创世纪" group-title="剧集轮播",创世纪 +http://1.94.31.214:35455/huya/29465852$LR•IPV4•4『线路4』 +#EXTINF:-1 tvg-id="1" tvg-name="使徒行者" group-title="剧集轮播",使徒行者 +http://iptv.jxpan.vip:18888/aio/huya/23734256$LR•IPV4•3『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="使徒行者" group-title="剧集轮播",使徒行者 +http://iptv.jxpan.vip:18888/aio/huya/23734256$LR•IPV4•3『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="使徒行者" group-title="剧集轮播",使徒行者 +http://1.94.31.214:35455/huya/23734256$LR•IPV4•3『线路3』 +#EXTINF:-1 tvg-id="1" tvg-name="金枝欲孽" group-title="剧集轮播",金枝欲孽 +http://iptv.jxpan.vip:18888/aio/huya/29465847$LR•IPV4•4『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="金枝欲孽" group-title="剧集轮播",金枝欲孽 +http://iptv.jxpan.vip:18888/aio/huya/29465847$LR•IPV4•4『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="金枝欲孽" group-title="剧集轮播",金枝欲孽 +http://iptv.jxpan.vip:18888/aio/huya/29465847$LR•IPV4•4『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="金枝欲孽" group-title="剧集轮播",金枝欲孽 +http://1.94.31.214:35455/huya/23865036$LR•IPV4•4『线路4』 +#EXTINF:-1 tvg-id="1" tvg-name="大唐双龙传" group-title="剧集轮播",大唐双龙传 +http://iptv.jxpan.vip:18888/aio/huya/29465850$LR•IPV4•4『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="大唐双龙传" group-title="剧集轮播",大唐双龙传 +http://iptv.jxpan.vip:18888/aio/huya/29465850$LR•IPV4•4『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="大唐双龙传" group-title="剧集轮播",大唐双龙传 +http://iptv.jxpan.vip:18888/aio/huya/29465850$LR•IPV4•4『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="大唐双龙传" group-title="剧集轮播",大唐双龙传 +http://1.94.31.214:35455/huya/23728674$LR•IPV4•4『线路4』 +#EXTINF:-1 tvg-id="1" tvg-name="妙手仁心" group-title="剧集轮播",妙手仁心 +http://iptv.jxpan.vip:18888/aio/huya/29465853$LR•IPV4•4『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="妙手仁心" group-title="剧集轮播",妙手仁心 +http://iptv.jxpan.vip:18888/aio/huya/29465853$LR•IPV4•4『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="妙手仁心" group-title="剧集轮播",妙手仁心 +http://iptv.jxpan.vip:18888/aio/huya/29465853$LR•IPV4•4『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="妙手仁心" group-title="剧集轮播",妙手仁心 +http://1.94.31.214:35455/huya/29465853$LR•IPV4•4『线路4』 +#EXTINF:-1 tvg-id="1" tvg-name="扫黄先锋" group-title="剧集轮播",扫黄先锋 +http://iptv.jxpan.vip:18888/aio/huya/29465855$LR•IPV4•4『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="扫黄先锋" group-title="剧集轮播",扫黄先锋 +http://iptv.jxpan.vip:18888/aio/huya/29465855$LR•IPV4•4『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="扫黄先锋" group-title="剧集轮播",扫黄先锋 +http://iptv.jxpan.vip:18888/aio/huya/29465855$LR•IPV4•4『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="扫黄先锋" group-title="剧集轮播",扫黄先锋 +http://1.94.31.214:35455/huya/29465855$LR•IPV4•4『线路4』 +#EXTINF:-1 tvg-id="1" tvg-name="笑看风云" group-title="剧集轮播",笑看风云 +http://iptv.jxpan.vip:18888/aio/huya/29465858$LR•IPV4•4『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="笑看风云" group-title="剧集轮播",笑看风云 +http://iptv.jxpan.vip:18888/aio/huya/29465858$LR•IPV4•4『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="笑看风云" group-title="剧集轮播",笑看风云 +http://1.94.31.214:35455/huya/29465858$LR•IPV4•4『线路3』 +#EXTINF:-1 tvg-id="4" tvg-name="笑看风云" group-title="剧集轮播",笑看风云 +http://iptv.jxpan.vip:18888/aio/huya/29465858$LR•IPV4•4『线路4』 +#EXTINF:-1 tvg-id="1" tvg-name="大时代" group-title="剧集轮播",大时代 +http://iptv.jxpan.vip:18888/aio/huya/23865161$LR•IPV4•3『线路1』 +#EXTINF:-1 tvg-id="2" tvg-name="大时代" group-title="剧集轮播",大时代 +http://iptv.jxpan.vip:18888/aio/huya/23865161$LR•IPV4•3『线路2』 +#EXTINF:-1 tvg-id="3" tvg-name="大时代" group-title="剧集轮播",大时代 +http://1.94.31.214:35455/huya/23865161$LR•IPV4•3『线路3』 diff --git a/lib/iptv.txt b/lib/iptv.txt new file mode 100644 index 0000000..0182641 --- /dev/null +++ b/lib/iptv.txt @@ -0,0 +1,4518 @@ + +央视频道,#genre# +CCTV1综合,http://112.27.235.94:8000/hls/1/index.m3u8$LR•IPV4•53『线路1』 +CCTV1综合,http://zzssw01.55555.io:9901/tsfile/live/0001_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•53『线路2』 +CCTV1综合,http://112.27.235.94:8000/hls/1/index.m3u8$LR•IPV4•53『线路3』 +CCTV1综合,http://zzssw01.55555.io:9901/tsfile/live/0001_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•53『线路4』 +CCTV1综合,http://101.74.28.84:9901/tsfile/live/0001_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•53『线路5』 +CCTV1综合,http://61.156.228.12:8154/tsfile/live/0001_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•53『线路6』 +CCTV1综合,http://101.66.198.42:9901/tsfile/live/0001_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•53『线路7』 +CCTV1综合,http://123.163.21.101:9901/tsfile/live/0001_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•53『线路8』 +CCTV1综合,http://106.118.70.125:9901/tsfile/live/0001_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•53『线路9』 +CCTV1综合,http://1.195.131.143:9901/tsfile/live/1000_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•53『线路10』 +CCTV1综合,http://php.jdshipin.com:8880/TVOD/iptv.php?id=rthk33$LR•IPV4•53『线路11』 +CCTV1综合,http://iptv.huuc.edu.cn/hls/cctv1hd.m3u8$LR•IPV4•53『线路12』 +CCTV1综合,https://www.freetv.top/migu/608807420.m3u8?migutoken=5b04cf0d91179ab2d3d71703f0a8bc3d32dd02f7d8fb55ee70e05c216b8a9d1a73d911fbde798459fb66d94934157c996f8306c0dd37917775f2ed73dcc22cf84b25ca500bff5c636ff48d6344$LR•IPV4•53『线路13』 +CCTV1综合,https://smart.pendy.dpdns.org/Smart.php?id=cctv1$LR•IPV4•53『线路14』 +CCTV1综合,http://yc.myds.me:35455/gaoma/cctv1.m3u8$LR•IPV4•53『线路15』 +CCTV1综合,http://nas.suntao.online:35455/itv/6000000001000029752.m3u8?cdn=wasusyt$LR•IPV4•53『线路16』 +CCTV1综合,http://183.94.1.118:8801/tsfile/live/0001_1.m3u8$LR•IPV4•53『线路17』 +CCTV1综合,http://120.192.226.35:8009/hls/501/index.m3u8$LR•IPV4•53『线路18』 +CCTV1综合,https://rthktv33-live.akamaized.net/hls/live/2101641/RTHKTV33/stream05/streamPlaylist.m3u8?$LR•IPV4•53『线路19』 +CCTV1综合,http://123.182.60.29:9002/hls/1/index.m3u8$LR•IPV4•53『线路20』 +CCTV1综合,http://112.123.206.32:808/hls/1/index.m3u8$LR•IPV4•53『线路21』 +CCTV1综合,http://61.138.128.226:19901/tsfile/live/0001_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•53『线路22』 +CCTV1综合,http://36.105.100.208:35455/gaoma/cctv1.m3u8$LR•IPV4•53『线路23』 +CCTV1综合,http://iptv.0564.org:35455/itv/1000000005000265001.m3u8?cdn=ystenlive$LR•IPV4•53『线路24』 +CCTV1综合,http://mh0.asia:35455/itv/1000000005000265001.m3u8?cdn=ystenlive$LR•IPV4•53『线路25』 +CCTV1综合,http://3501776.xyz:35455/gaoma/cctv1.m3u8$LR•IPV4•53『线路26』 +CCTV1综合,http://fm1077.serv00.net/Smart.php?id=cctv1$LR•IPV4•53『线路27』 +CCTV1综合,http://[2409:8087:1:20:20::29]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226895/1.m3u8?servicetype=1&accountinfo=%7E%7EV2.0%7EI0Rkc6neBYgfpoJ1yud8Fw%7EPepnxHHB2d6Hk2dZWM77MyFlBN5q1KnYLvimM9pqT7Epd7QgO4HFWH0z34SUb2Vs%7EExtInfo9bj61dxzlMXrsixrqcFYPg%3A20240420192714%2C%2C%2C20240420192714%2C%2C10001000275495%2C-1%2C0%2C1%2C-1%2C%2C2%2C2201300%2C%2C%2C2%2C%2C%2CEND&GuardEncType=2$LR•IPV6•53『线路28』 +CCTV1综合,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226016/index.m3u8$LR•IPV6•53『线路29』 +CCTV1综合,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226338/1.m3u8$LR•IPV6•53『线路30』 +CCTV1综合,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226559/index.m3u8$LR•IPV6•53『线路31』 +CCTV1综合,http://101.35.240.114:88/live.php?id=CCTV1$LR•IPV4•53『线路32』 +CCTV1综合,http://218.13.14.6:60050/tsfile/live/1001_1.m3u8$LR•IPV4•53『线路33』 +CCTV1综合,http://58.57.40.22:9901/tsfile/live/0001_1.m3u8$LR•IPV4•53『线路34』 +CCTV1综合,https://cc06.tv12.xyz/1.m3u8$LR•IPV4•53『线路35』 +CCTV1综合,http://iptv.huuc.edu.cn/hls/cctv1hd.m3u8$LR•IPV4•53『线路36』 +CCTV1综合,http://ygbh.site/php/bfgd.php?id=488$LR•IPV4•53『线路37』 +CCTV1综合,https://cc06.tv12.xyz/1.m3u8$LR•IPV4•53『线路38』 +CCTV1综合,http://112.27.235.94:8000/hls/1/index.m3u8$LR•IPV4•53『线路39』 +CCTV1综合,http://39.135.133.132/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226016/index.m3u8$LR•IPV4•53『线路40』 +CCTV1综合,http://t.061899.xyz/tl/dq.php?id=cctv1$LR•IPV4•53『线路41』 +CCTV1综合,https://zby.130519.xyz/PLTV/11/224/3221225673/index.m3u8$LR•IPV4•53『线路42』 +CCTV1综合,http://148.135.93.213:81/live.php?id=CCTV1$LR•IPV4•53『线路43』 +CCTV1综合,http://php.jdshipin.com:8880/TVOD/iptv.php?id=rthk33$LR•IPV4•53『线路44』 +CCTV1综合,http://iptv.huuc.edu.cn/hls/cctv1hd.m3u8$LR•IPV4•53『线路45』 +CCTV1综合,https://www.freetv.top/migu/608807420.m3u8?migutoken=5b04cf0d91179ab2d3d71703f0a8bc3d32dd02f7d8fb55ee70e05c216b8a9d1a73d911fbde798459fb66d94934157c996f8306c0dd37917775f2ed73dcc22cf84b25ca500bff5c636ff48d6344$LR•IPV4•53『线路46』 +CCTV1综合,https://smart.pendy.dpdns.org/Smart.php?id=cctv1$LR•IPV4•53『线路47』 +CCTV1综合,http://[2409:8087:1:20:20::29]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226895/1.m3u8?servicetype=1&accountinfo=%7E%7EV2.0%7EI0Rkc6neBYgfpoJ1yud8Fw%7EPepnxHHB2d6Hk2dZWM77MyFlBN5q1KnYLvimM9pqT7Epd7QgO4HFWH0z34SUb2Vs%7EExtInfo9bj61dxzlMXrsixrqcFYPg%3A20240420192714%2C%2C%2C20240420192714%2C%2C10001000275495%2C-1%2C0%2C1%2C-1%2C%2C2%2C2201300%2C%2C%2C2%2C%2C%2CEND&GuardEncType=2$LR•IPV6•53『线路48』 +CCTV1综合,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226016/index.m3u8$LR•IPV6•53『线路49』 +CCTV1综合,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226338/1.m3u8$LR•IPV6•53『线路50』 +CCTV1综合,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226559/index.m3u8$LR•IPV6•53『线路51』 +CCTV1综合,http://yc.myds.me:35455/gaoma/cctv1.m3u8$LR•IPV4•53『线路52』 +CCTV1综合,http://nas.suntao.online:35455/itv/6000000001000029752.m3u8?cdn=wasusyt$LR•IPV4•53『线路53』 +CCTV2财经,http://112.27.235.94:8000/hls/2/index.m3u8$LR•IPV4•56『线路1』 +CCTV2财经,http://cdn6.bkpcp.top/tl/tuiliu.php?id=cctv2$LR•IPV4•56『线路2』 +CCTV2财经,http://183.215.134.239:19901/tsfile/live/0002_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•56『线路3』 +CCTV2财经,http://zzssw01.55555.io:9901/tsfile/live/0002_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•56『线路4』 +CCTV2财经,http://112.27.235.94:8000/hls/2/index.m3u8$LR•IPV4•56『线路5』 +CCTV2财经,http://cdn6.bkpcp.top/tl/tuiliu.php?id=cctv2$LR•IPV4•56『线路6』 +CCTV2财经,http://183.215.134.239:19901/tsfile/live/0002_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•56『线路7』 +CCTV2财经,http://zzssw01.55555.io:9901/tsfile/live/0002_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•56『线路8』 +CCTV2财经,http://61.156.228.12:8154/tsfile/live/0002_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•56『线路9』 +CCTV2财经,http://101.66.198.42:9901/tsfile/live/0002_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•56『线路10』 +CCTV2财经,http://123.163.21.101:9901/tsfile/live/0002_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•56『线路11』 +CCTV2财经,http://106.118.70.125:9901/tsfile/live/0002_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•56『线路12』 +CCTV2财经,http://101.74.28.84:9901/tsfile/live/0002_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•56『线路13』 +CCTV2财经,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225588$LR•IPV4•56『线路14』 +CCTV2财经,http://goo.bkpcp.top/mg/CCTV2$LR•IPV4•56『线路15』 +CCTV2财经,http://iptv.huuc.edu.cn/hls/cctv2hd.m3u8$LR•IPV4•56『线路16』 +CCTV2财经,https://smart.pendy.dpdns.org/Smart.php?id=cctv2$LR•IPV4•56『线路17』 +CCTV2财经,http://ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226540/index.m3u8$LR•IPV4•56『线路18』 +CCTV2财经,http://yc.myds.me:35455/gaoma/cctv2.m3u8$LR•IPV4•56『线路19』 +CCTV2财经,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227165/index.m3u8$LR•IPV4•56『线路20』 +CCTV2财经,http://183.94.1.118:8801/tsfile/live/0002_1.m3u8$LR•IPV4•56『线路21』 +CCTV2财经,http://120.192.226.35:8009/hls/502/index.m3u8$LR•IPV4•56『线路22』 +CCTV2财经,http://123.182.60.29:9002/hls/2/index.m3u8$LR•IPV4•56『线路23』 +CCTV2财经,http://112.123.206.32:808/hls/2/index.m3u8$LR•IPV4•56『线路24』 +CCTV2财经,http://61.138.128.226:19901/tsfile/live/0002_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•56『线路25』 +CCTV2财经,http://36.105.100.208:35455/gaoma/cctv2.m3u8$LR•IPV4•56『线路26』 +CCTV2财经,http://iptv.0564.org:35455/itv/1000000001000023315.m3u8?cdn=ystenlive$LR•IPV4•56『线路27』 +CCTV2财经,http://mh0.asia:35455/itv/1000000001000023315.m3u8?cdn=ystenlive$LR•IPV4•56『线路28』 +CCTV2财经,http://3501776.xyz:35455/gaoma/cctv2.m3u8$LR•IPV4•56『线路29』 +CCTV2财经,https://api.olelive.com/dis/live/CCTV2HD/hls.m3u8$LR•IPV4•56『线路30』 +CCTV2财经,http://fm1077.serv00.net/Smart.php?id=cctv2$LR•IPV4•56『线路31』 +CCTV2财经,http://[2409:8087:1a01:df::406f]:80/wh7f454c46tw1241164675_1575082505/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226540/index.m3u8?icpid=88888888&RTS=1713968070&from=4&hms_devid=692&prioritypopid=4&online=1713968070&vqe=3$LR•IPV6•56『线路32』 +CCTV2财经,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226230/1.m3u8$LR•IPV6•56『线路33』 +CCTV2财经,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225588/index.m3u8$LR•IPV6•56『线路34』 +CCTV2财经,http://148.135.93.213/live.php?id=CCTV2$LR•IPV4•56『线路35』 +CCTV2财经,http://218.13.14.6:60050/tsfile/live/1002_1.m3u8$LR•IPV4•56『线路36』 +CCTV2财经,http://39.164.160.249:9901/tsfile/live/0002_1.m3u8$LR•IPV4•56『线路37』 +CCTV2财经,https://cc06.tv12.xyz/2.m3u8$LR•IPV4•56『线路38』 +CCTV2财经,http://iptv.huuc.edu.cn/hls/cctv2hd.m3u8$LR•IPV4•56『线路39』 +CCTV2财经,http://ygbh.site/php/bfgd.php?id=061$LR•IPV4•56『线路40』 +CCTV2财经,https://cc06.tv12.xyz/2.m3u8$LR•IPV4•56『线路41』 +CCTV2财经,http://112.27.235.94:8000/hls/2/index.m3u8$LR•IPV4•56『线路42』 +CCTV2财经,http://39.135.133.177/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225588/index.m3u8$LR•IPV4•56『线路43』 +CCTV2财经,http://t.061899.xyz/tl/dq.php?id=cctv2$LR•IPV4•56『线路44』 +CCTV2财经,https://zby.130519.xyz/PLTV/11/224/3221226122/index.m3u8$LR•IPV4•56『线路45』 +CCTV2财经,http://148.135.93.213:81/live.php?id=CCTV2$LR•IPV4•56『线路46』 +CCTV2财经,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225588$LR•IPV4•56『线路47』 +CCTV2财经,http://goo.bkpcp.top/mg/CCTV2$LR•IPV4•56『线路48』 +CCTV2财经,http://iptv.huuc.edu.cn/hls/cctv2hd.m3u8$LR•IPV4•56『线路49』 +CCTV2财经,https://smart.pendy.dpdns.org/Smart.php?id=cctv2$LR•IPV4•56『线路50』 +CCTV2财经,http://[2409:8087:1a01:df::406f]:80/wh7f454c46tw1241164675_1575082505/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226540/index.m3u8?icpid=88888888&RTS=1713968070&from=4&hms_devid=692&prioritypopid=4&online=1713968070&vqe=3$LR•IPV6•56『线路51』 +CCTV2财经,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226230/1.m3u8$LR•IPV6•56『线路52』 +CCTV2财经,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225588/index.m3u8$LR•IPV6•56『线路53』 +CCTV2财经,http://ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226540/index.m3u8$LR•IPV4•56『线路54』 +CCTV2财经,http://yc.myds.me:35455/gaoma/cctv2.m3u8$LR•IPV4•56『线路55』 +CCTV2财经,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227165/index.m3u8$LR•IPV4•56『线路56』 +CCTV3综艺,http://112.27.235.94:8000/hls/3/index.m3u8$LR•IPV4•33『线路1』 +CCTV3综艺,http://221.2.148.205:8154/tsfile/live/0003_1.m3u8$LR•IPV4•33『线路2』 +CCTV3综艺,http://183.215.134.239:19901/tsfile/live/0003_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•33『线路3』 +CCTV3综艺,http://61.156.228.12:8154/tsfile/live/0003_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•33『线路4』 +CCTV3综艺,http://221.2.148.205:8154/tsfile/live/0003_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•33『线路5』 +CCTV3综艺,http://zzssw01.55555.io:9901/tsfile/live/0003_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•33『线路6』 +CCTV3综艺,http://genglei.8866.org:9901/tsfile/live/0003_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•33『线路7』 +CCTV3综艺,http://cdn6.bkpcp.top/tl/tuiliu.php?id=cctv3$LR•IPV4•33『线路8』 +CCTV3综艺,http://112.27.235.94:8000/hls/3/index.m3u8$LR•IPV4•33『线路9』 +CCTV3综艺,http://221.2.148.205:8154/tsfile/live/0003_1.m3u8$LR•IPV4•33『线路10』 +CCTV3综艺,http://183.215.134.239:19901/tsfile/live/0003_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•33『线路11』 +CCTV3综艺,http://61.156.228.12:8154/tsfile/live/0003_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•33『线路12』 +CCTV3综艺,http://221.2.148.205:8154/tsfile/live/0003_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•33『线路13』 +CCTV3综艺,http://zzssw01.55555.io:9901/tsfile/live/0003_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•33『线路14』 +CCTV3综艺,http://genglei.8866.org:9901/tsfile/live/0003_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•33『线路15』 +CCTV3综艺,http://cdn6.bkpcp.top/tl/tuiliu.php?id=cctv3$LR•IPV4•33『线路16』 +CCTV3综艺,http://1.195.131.143:9901/tsfile/live/1002_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•33『线路17』 +CCTV3综艺,http://101.66.198.42:9901/tsfile/live/0003_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•33『线路18』 +CCTV3综艺,http://123.163.21.101:9901/tsfile/live/1000_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•33『线路19』 +CCTV3综艺,http://101.74.28.84:9901/tsfile/live/0003_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•33『线路20』 +CCTV3综艺,http://ha.wheel.duolebo.com/live.m3u8?p=bea7cd5b-d4cd-4d5f-9408-eb6df9ce08f3&c=1857461344&m3u8=true$LR•IPV4•33『线路21』 +CCTV3综艺,http://101.35.240.114:88/live.php?id=CCTV3$LR•IPV4•33『线路22』 +CCTV3综艺,http://218.13.14.6:60050/tsfile/live/1003_1.m3u8$LR•IPV4•33『线路23』 +CCTV3综艺,http://ha.wheel.duolebo.com/live.m3u8?p=bea7cd5b-d4cd-4d5f-9408-eb6df9ce08f3&c=1857461344&m3u8=true$LR•IPV4•33『线路24』 +CCTV3综艺,http://221.2.148.205:8154/tsfile/live/0003_1.m3u8$LR•IPV4•33『线路25』 +CCTV3综艺,https://cc06.tv12.xyz/3.m3u8$LR•IPV4•33『线路26』 +CCTV3综艺,http://iptv.huuc.edu.cn/hls/cctv3hd.m3u8$LR•IPV4•33『线路27』 +CCTV3综艺,http://ygbh.site/php/bfgd.php?id=062$LR•IPV4•33『线路28』 +CCTV3综艺,https://cc06.tv12.xyz/3.m3u8$LR•IPV4•33『线路29』 +CCTV3综艺,http://112.27.235.94:8000/hls/3/index.m3u8$LR•IPV4•33『线路30』 +CCTV3综艺,http://39.135.135.41/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226021/index.m3u8$LR•IPV4•33『线路31』 +CCTV3综艺,http://t.061899.xyz/tl/dq.php?id=cctv3$LR•IPV4•33『线路32』 +CCTV3综艺,http://148.135.93.213:81/live.php?id=CCTV3$LR•IPV4•33『线路33』 +CCTV4中文国际,http://zzssw01.55555.io:9901/tsfile/live/1000_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•54『线路1』 +CCTV4中文国际,http://cdn6.bkpcp.top/tl/tuiliu.php?id=cctv4$LR•IPV4•54『线路2』 +CCTV4中文国际,http://zzssw01.55555.io:9901/tsfile/live/1000_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•54『线路3』 +CCTV4中文国际,http://cdn6.bkpcp.top/tl/tuiliu.php?id=cctv4$LR•IPV4•54『线路4』 +CCTV4中文国际,http://1.195.131.143:9901/tsfile/live/1003_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•54『线路5』 +CCTV4中文国际,http://61.156.228.12:8154/tsfile/live/0004_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•54『线路6』 +CCTV4中文国际,http://101.66.198.42:9901/tsfile/live/0004_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•54『线路7』 +CCTV4中文国际,http://123.163.21.101:9901/tsfile/live/1001_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•54『线路8』 +CCTV4中文国际,http://106.118.70.125:9901/tsfile/live/0004_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•54『线路9』 +CCTV4中文国际,http://101.74.28.84:9901/tsfile/live/0004_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•54『线路10』 +CCTV4中文国际,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226428$LR•IPV4•54『线路11』 +CCTV4中文国际,http://z.b.bkpcp.top/m.php?id=CCTV-4国际$LR•IPV4•54『线路12』 +CCTV4中文国际,http://iptv.huuc.edu.cn/hls/cctv4hd.m3u8$LR•IPV4•54『线路13』 +CCTV4中文国际,https://www.freetv.top/migu/631780421.m3u8?migutoken=fefc6a44400a0dd448699ae0ce3d6e2c5a0f49b8d48adb36e747c4fbab039337eb3244f9951acbddaf26b7bf51597a7d1b43c8845e67fd5914ece875dcad325bb388200bc0f12fdff727d03e2d$LR•IPV4•54『线路14』 +CCTV4中文国际,https://smart.pendy.dpdns.org/Smart.php?id=cctv4$LR•IPV4•54『线路15』 +CCTV4中文国际,http://goo.bkpcp.top/mg/cctv4o$LR•IPV4•54『线路16』 +CCTV4中文国际,http://183.94.1.118:8801/tsfile/live/0004_1.m3u8$LR•IPV4•54『线路17』 +CCTV4中文国际,http://120.192.226.35:8009/hls/4/index.m3u8$LR•IPV4•54『线路18』 +CCTV4中文国际,http://123.182.60.29:9002/hls/4/index.m3u8$LR•IPV4•54『线路19』 +CCTV4中文国际,http://61.138.128.226:19901/tsfile/live/0004_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•54『线路20』 +CCTV4中文国际,http://36.105.100.208:35455/gaoma/cctv4k.m3u8$LR•IPV4•54『线路21』 +CCTV4中文国际,http://iptv.0564.org:35455/itv/1000000005000265004.m3u8?cdn=ystenlive$LR•IPV4•54『线路22』 +CCTV4中文国际,http://mh0.asia:35455/itv/1000000005000265004.m3u8?cdn=ystenlive$LR•IPV4•54『线路23』 +CCTV4中文国际,http://3501776.xyz:35455/itv/1000000005000265004.m3u8?cdn=ystenlive$LR•IPV4•54『线路24』 +CCTV4中文国际,https://api.olelive.com/dis/live/CCTV4HD/hls.m3u8$LR•IPV4•54『线路25』 +CCTV4中文国际,http://60.29.124.66:6080/hls/15/index.m3u8$LR•IPV4•54『线路26』 +CCTV4中文国际,http://fm1077.serv00.net/Smart.php?id=cctv4$LR•IPV4•54『线路27』 +CCTV4中文国际,http://fm1077.serv00.net/Smart.php?id=Cctv4$LR•IPV4•54『线路28』 +CCTV4中文国际,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226007/index.m3u8$LR•IPV6•54『线路29』 +CCTV4中文国际,http://[2409:8087:1:20:20::29]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226335/1.m3u8?servicetype=1&accountinfo=%7E%7EV2.0%7EBFJ5gRpm8ntK8JEFPZOhLQ%7EPepnxHHB2d6Hk2dZWM77MyFlBN5q1KnYLvimM9pqT7EfCf-e5nKehMQzrOBwWduf%7EExtInfo9bj61dxzlMXrsixrqcFYPg%3A20240420192542%2C%2C%2C20240420192542%2C%2C10001000275495%2C-1%2C0%2C1%2C-1%2C%2C2%2C2201300%2C%2C%2C2%2C%2C%2CEND&GuardEncType=2$LR•IPV6•54『线路30』 +CCTV4中文国际,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226335/1.m3u8$LR•IPV6•54『线路31』 +CCTV4中文国际,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226428/index.m3u8$LR•IPV6•54『线路32』 +CCTV4中文国际,http://148.135.93.213/live.php?id=CCTV4$LR•IPV4•54『线路33』 +CCTV4中文国际,http://218.13.14.6:60050/tsfile/live/1004_1.m3u8$LR•IPV4•54『线路34』 +CCTV4中文国际,http://58.57.40.22:9901/tsfile/live/1003_1.m3u8$LR•IPV4•54『线路35』 +CCTV4中文国际,https://cc06.tv12.xyz/4.m3u8$LR•IPV4•54『线路36』 +CCTV4中文国际,http://iptv.huuc.edu.cn/hls/cctv4hd.m3u8$LR•IPV4•54『线路37』 +CCTV4中文国际,http://ygbh.site/php/bfgd.php?id=063$LR•IPV4•54『线路38』 +CCTV4中文国际,https://cc06.tv12.xyz/4.m3u8$LR•IPV4•54『线路39』 +CCTV4中文国际,http://112.27.235.94:8000/hls/4/index.m3u8$LR•IPV4•54『线路40』 +CCTV4中文国际,http://39.135.135.50/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226007/index.m3u8$LR•IPV4•54『线路41』 +CCTV4中文国际,http://t.061899.xyz/tl/dq.php?id=cctv4$LR•IPV4•54『线路42』 +CCTV4中文国际,https://zby.130519.xyz/PLTV/11/224/3221226124/index.m3u8$LR•IPV4•54『线路43』 +CCTV4中文国际,http://148.135.93.213:81/live.php?id=CCTV4$LR•IPV4•54『线路44』 +CCTV4中文国际,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226428$LR•IPV4•54『线路45』 +CCTV4中文国际,http://z.b.bkpcp.top/m.php?id=CCTV-4国际$LR•IPV4•54『线路46』 +CCTV4中文国际,http://iptv.huuc.edu.cn/hls/cctv4hd.m3u8$LR•IPV4•54『线路47』 +CCTV4中文国际,https://www.freetv.top/migu/631780421.m3u8?migutoken=fefc6a44400a0dd448699ae0ce3d6e2c5a0f49b8d48adb36e747c4fbab039337eb3244f9951acbddaf26b7bf51597a7d1b43c8845e67fd5914ece875dcad325bb388200bc0f12fdff727d03e2d$LR•IPV4•54『线路48』 +CCTV4中文国际,https://smart.pendy.dpdns.org/Smart.php?id=cctv4$LR•IPV4•54『线路49』 +CCTV4中文国际,http://goo.bkpcp.top/mg/cctv4o$LR•IPV4•54『线路50』 +CCTV4中文国际,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226007/index.m3u8$LR•IPV6•54『线路51』 +CCTV4中文国际,http://[2409:8087:1:20:20::29]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226335/1.m3u8?servicetype=1&accountinfo=%7E%7EV2.0%7EBFJ5gRpm8ntK8JEFPZOhLQ%7EPepnxHHB2d6Hk2dZWM77MyFlBN5q1KnYLvimM9pqT7EfCf-e5nKehMQzrOBwWduf%7EExtInfo9bj61dxzlMXrsixrqcFYPg%3A20240420192542%2C%2C%2C20240420192542%2C%2C10001000275495%2C-1%2C0%2C1%2C-1%2C%2C2%2C2201300%2C%2C%2C2%2C%2C%2CEND&GuardEncType=2$LR•IPV6•54『线路52』 +CCTV4中文国际,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226335/1.m3u8$LR•IPV6•54『线路53』 +CCTV4中文国际,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226428/index.m3u8$LR•IPV6•54『线路54』 +CCTV5体育,http://112.27.235.94:8000/hls/5/index.m3u8$LR•IPV4•69『线路1』 +CCTV5体育,http://113.26.202.52:1299/tsfile/live/0005_1.m3u8$LR•IPV4•69『线路2』 +CCTV5体育,http://zzssw01.55555.io:9901/tsfile/live/1001_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•69『线路3』 +CCTV5体育,http://genglei.8866.org:9901/tsfile/live/0005_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•69『线路4』 +CCTV5体育,http://cdn6.bkpcp.top/tl/tuiliu.php?id=cctv5$LR•IPV4•69『线路5』 +CCTV5体育,http://112.27.235.94:8000/hls/5/index.m3u8$LR•IPV4•69『线路6』 +CCTV5体育,http://113.26.202.52:1299/tsfile/live/0005_1.m3u8$LR•IPV4•69『线路7』 +CCTV5体育,http://zzssw01.55555.io:9901/tsfile/live/1001_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•69『线路8』 +CCTV5体育,http://genglei.8866.org:9901/tsfile/live/0005_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•69『线路9』 +CCTV5体育,http://cdn6.bkpcp.top/tl/tuiliu.php?id=cctv5$LR•IPV4•69『线路10』 +CCTV5体育,http://101.74.28.84:9901/tsfile/live/0005_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•69『线路11』 +CCTV5体育,http://1.195.131.143:9901/tsfile/live/1004_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•69『线路12』 +CCTV5体育,http://61.156.228.12:8154/tsfile/live/0005_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•69『线路13』 +CCTV5体育,http://101.66.198.42:9901/tsfile/live/0005_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•69『线路14』 +CCTV5体育,http://123.163.21.101:9901/tsfile/live/1002_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•69『线路15』 +CCTV5体育,http://106.118.70.125:9901/tsfile/live/0005_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•69『线路16』 +CCTV5体育,https://ldcctvwbcdks.v.kcdnvip.com/ldcctvwbcd/cdrmldcctv5plus_1/index.m3u8?b=200-2100$LR•IPV4•69『线路17』 +CCTV5体育,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226019$LR•IPV4•69『线路18』 +CCTV5体育,http://iptv.huuc.edu.cn/hls/cctv5hd.m3u8$LR•IPV4•69『线路19』 +CCTV5体育,https://www.freetv.top/migu/641886683.m3u8?migutoken=3e5c01f93922de8d1c940fe15bb47349b27e8f7a2e624dde1a83dff3b2a80f58b7624151a3a4d00488edee34f202818557340903382fae02bb754084eb942bd50e59061df36fab62fb5b908903$LR•IPV4•69『线路20』 +CCTV5体育,https://smart.pendy.dpdns.org/Smart.php?id=cctv5$LR•IPV4•69『线路21』 +CCTV5体育,http://www.freetv.top/migu/641886683.m3u8?migutoken=cea30189b17e30fb3b4876609eb6e3128f840f8ab5db6f9643403213dc9980613938be69b13fe0290d2c44f0052b78d90c669a2f92e28951f92da861b7cba070b55ec1b4fe1a92a2c133c43c4c$LR•IPV4•69『线路22』 +CCTV5体育,http://yc.myds.me:35455/gaoma/cctv5.m3u8$LR•IPV4•69『线路23』 +CCTV5体育,http://nas.suntao.online:35455/itv/1000000005000265005.m3u8?cdn=ystenlive$LR•IPV4•69『线路24』 +CCTV5体育,http://183.94.1.118:8801/tsfile/live/0005_1.m3u8$LR•IPV4•69『线路25』 +CCTV5体育,http://120.192.226.35:8009/hls/503/index.m3u8$LR•IPV4•69『线路26』 +CCTV5体育,http://123.182.60.29:9002/hls/7/index.m3u8$LR•IPV4•69『线路27』 +CCTV5体育,http://58.17.48.228:808/hls/5/index.m3u8$LR•IPV4•69『线路28』 +CCTV5体育,http://61.138.128.226:19901/tsfile/live/0005_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•69『线路29』 +CCTV5体育,http://36.105.100.208:35455/gaoma/cctv5.m3u8$LR•IPV4•69『线路30』 +CCTV5体育,http://iptv.0564.org:35455/itv/1000000005000265005.m3u8?cdn=ystenlive$LR•IPV4•69『线路31』 +CCTV5体育,http://mh0.asia:35455/itv/1000000005000265005.m3u8?cdn=ystenlive$LR•IPV4•69『线路32』 +CCTV5体育,http://3501776.xyz:35455/gaoma/cctv5.m3u8$LR•IPV4•69『线路33』 +CCTV5体育,https://api.olelive.com/dis/live/CCTV5HD/hls.m3u8$LR•IPV4•69『线路34』 +CCTV5体育,http://fm1077.serv00.net/Smart.php?id=cctv5$LR•IPV4•69『线路35』 +CCTV5体育,http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/yinhe/88888888/224/3221226019/index.m3u8$LR•IPV6•69『线路36』 +CCTV5体育,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226019/index.m3u8$LR•IPV6•69『线路37』 +CCTV5体育,http://101.35.240.114:88/live.php?id=CCTV5$LR•IPV4•69『线路38』 +CCTV5体育,http://218.13.14.6:60050/tsfile/live/1005_1.m3u8$LR•IPV4•69『线路39』 +CCTV5体育,http://58.57.40.22:9901/tsfile/live/1004_1.m3u8$LR•IPV4•69『线路40』 +CCTV5体育,https://cc06.tv12.xyz/5.m3u8$LR•IPV4•69『线路41』 +CCTV5体育,http://iptv.huuc.edu.cn/hls/cctv5hd.m3u8$LR•IPV4•69『线路42』 +CCTV5体育,http://ygbh.site/php/bfgd.php?id=064$LR•IPV4•69『线路43』 +CCTV5体育,https://cc06.tv12.xyz/5.m3u8$LR•IPV4•69『线路44』 +CCTV5体育,http://112.27.235.94:8000/hls/5/index.m3u8$LR•IPV4•69『线路45』 +CCTV5体育,http://39.135.133.134/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226019/index.m3u8$LR•IPV4•69『线路46』 +CCTV5体育,http://t.061899.xyz/tl/dq.php?id=cctv5$LR•IPV4•69『线路47』 +CCTV5体育,https://zby.130519.xyz/PLTV/11/224/3221225734/index.m3u8$LR•IPV4•69『线路48』 +CCTV5体育,http://148.135.93.213:81/live.php?id=CCTV5$LR•IPV4•69『线路49』 +CCTV5体育,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226019$LR•IPV4•69『线路50』 +CCTV5体育,http://iptv.huuc.edu.cn/hls/cctv5hd.m3u8$LR•IPV4•69『线路51』 +CCTV5体育,https://www.freetv.top/migu/641886683.m3u8?migutoken=3e5c01f93922de8d1c940fe15bb47349b27e8f7a2e624dde1a83dff3b2a80f58b7624151a3a4d00488edee34f202818557340903382fae02bb754084eb942bd50e59061df36fab62fb5b908903$LR•IPV4•69『线路52』 +CCTV5体育,https://smart.pendy.dpdns.org/Smart.php?id=cctv5$LR•IPV4•69『线路53』 +CCTV5体育,https://ldcctvwbcdks.v.kcdnvip.com/ldcctvwbcd/cdrmldcctv5plus_1/index.m3u8?b=200-2100$LR•IPV4•69『线路54』 +CCTV5体育,http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/yinhe/88888888/224/3221226019/index.m3u8$LR•IPV6•69『线路55』 +CCTV5体育,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226019/index.m3u8$LR•IPV6•69『线路56』 +CCTV5体育,http://www.freetv.top/migu/641886683.m3u8?migutoken=cea30189b17e30fb3b4876609eb6e3128f840f8ab5db6f9643403213dc9980613938be69b13fe0290d2c44f0052b78d90c669a2f92e28951f92da861b7cba070b55ec1b4fe1a92a2c133c43c4c$LR•IPV4•69『线路57』 +CCTV5体育,http://yc.myds.me:35455/gaoma/cctv5.m3u8$LR•IPV4•69『线路58』 +CCTV5体育,http://nas.suntao.online:35455/itv/1000000005000265005.m3u8?cdn=ystenlive$LR•IPV4•69『线路59』 +CCTV5体育,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226019$LR•IPV4•69『线路60』 +CCTV5体育,http://iptv.huuc.edu.cn/hls/cctv5hd.m3u8$LR•IPV4•69『线路61』 +CCTV5体育,https://www.freetv.top/migu/641886683.m3u8?migutoken=3e5c01f93922de8d1c940fe15bb47349b27e8f7a2e624dde1a83dff3b2a80f58b7624151a3a4d00488edee34f202818557340903382fae02bb754084eb942bd50e59061df36fab62fb5b908903$LR•IPV4•69『线路62』 +CCTV5体育,https://smart.pendy.dpdns.org/Smart.php?id=cctv5$LR•IPV4•69『线路63』 +CCTV5体育,https://ldcctvwbcdks.v.kcdnvip.com/ldcctvwbcd/cdrmldcctv5plus_1/index.m3u8?b=200-2100$LR•IPV4•69『线路64』 +CCTV5体育,http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/yinhe/88888888/224/3221226019/index.m3u8$LR•IPV6•69『线路65』 +CCTV5体育,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226019/index.m3u8$LR•IPV6•69『线路66』 +CCTV5体育,http://www.freetv.top/migu/641886683.m3u8?migutoken=cea30189b17e30fb3b4876609eb6e3128f840f8ab5db6f9643403213dc9980613938be69b13fe0290d2c44f0052b78d90c669a2f92e28951f92da861b7cba070b55ec1b4fe1a92a2c133c43c4c$LR•IPV4•69『线路67』 +CCTV5体育,http://yc.myds.me:35455/gaoma/cctv5.m3u8$LR•IPV4•69『线路68』 +CCTV5体育,http://nas.suntao.online:35455/itv/1000000005000265005.m3u8?cdn=ystenlive$LR•IPV4•69『线路69』 +CCTV5+体育赛事,http://120.76.248.139/live/bfgd/4200000246.m3u8$LR•IPV4•58『线路1』 +CCTV5+体育赛事,http://112.27.235.94:8000/hls/6/index.m3u8$LR•IPV4•58『线路2』 +CCTV5+体育赛事,http://183.215.134.239:19901/tsfile/live/0005_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路3』 +CCTV5+体育赛事,http://120.76.248.139/live/bfgd/4200000246.m3u8$LR•IPV4•58『线路4』 +CCTV5+体育赛事,http://112.27.235.94:8000/hls/6/index.m3u8$LR•IPV4•58『线路5』 +CCTV5+体育赛事,http://183.215.134.239:19901/tsfile/live/0005_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路6』 +CCTV5+体育赛事,http://61.156.228.12:8154/tsfile/live/0016_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路7』 +CCTV5+体育赛事,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225603$LR•IPV4•58『线路8』 +CCTV5+体育赛事,https://www.freetv.top/migu/641886773.m3u8?migutoken=03a1b82e35e58cd89a95034ecb29e77e50493397000ec2b1e4d1ce59af01e6420d6dbc068c8230ec03be3a35a20eed8714e0959e3570a08713a7a2e8d86085eabf8f1aa85744c80c38343988b2$LR•IPV4•58『线路9』 +CCTV5+体育赛事,https://smart.pendy.dpdns.org/Smart.php?id=cctv5plus$LR•IPV4•58『线路10』 +CCTV5+体育赛事,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227348/index.m3u8$LR•IPV4•58『线路11』 +CCTV5+体育赛事,http://yc.myds.me:35455/gaoma/cctv5p.m3u8$LR•IPV4•58『线路12』 +CCTV5+体育赛事,http://nas.suntao.online:35455/itv/6000000001000015875.m3u8?cdn=wasusyt$LR•IPV4•58『线路13』 +CCTV5+体育赛事,http://hwrr.jx.chinamobile.com:8080/PLTV/88888888/224/3221225649/index.m3u8$LR•IPV4•58『线路14』 +CCTV5+体育赛事,https://stream1.freetv.fun/88ee08d5c5e75e963f46cba8142888798dde687981709eda707a0b192da8ad4d.ctv$LR•IPV4•58『线路15』 +CCTV5+体育赛事,http://123.182.60.29:9002/hls/17/index.m3u8$LR•IPV4•58『线路16』 +CCTV5+体育赛事,http://www.douzhicloud.site:35455/gaoma/cctv5p.m3u8$LR•IPV4•58『线路17』 +CCTV5+体育赛事,http://61.138.128.226:19901/tsfile/live/1006_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路18』 +CCTV5+体育赛事,http://36.105.100.208:35455/gaoma/cctv5p.m3u8$LR•IPV4•58『线路19』 +CCTV5+体育赛事,http://iptv.0564.org:35455/itv/1000000005000265016.m3u8?cdn=ystenlive$LR•IPV4•58『线路20』 +CCTV5+体育赛事,http://mh0.asia:35455/itv/1000000005000265016.m3u8?cdn=ystenlive$LR•IPV4•58『线路21』 +CCTV5+体育赛事,http://3501776.xyz:35455/itv/1000000005000265016.m3u8?cdn=ystenlive$LR•IPV4•58『线路22』 +CCTV5+体育赛事,https://api.olelive.com/dis/live/CCTV5PHD/hls.m3u8$LR•IPV4•58『线路23』 +CCTV5+体育赛事,http://116.77.32.59:8277/streams/d/cctv5a/playlist.m3u8$LR•IPV4•58『线路24』 +CCTV5+体育赛事,http://175.171.30.26:5111/hls/441492211/index.m3u8$LR•IPV4•58『线路25』 +CCTV5+体育赛事,http://fm1077.serv00.net/Smart.php?id=cctv5plus$LR•IPV4•58『线路26』 +CCTV5+体育赛事,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225603/index.m3u8$LR•IPV6•58『线路27』 +CCTV5+体育赛事,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226349/1.m3u8$LR•IPV6•58『线路28』 +CCTV5+体育赛事,http://148.135.93.213/live.php?id=CCTV5p$LR•IPV4•58『线路29』 +CCTV5+体育赛事,http://tv.20191209.xyz:37377/migu/641886773.m3u8?migutoken=dfc218ce4c1ff00475c0aef03e0b883bf8a277b36671d5ca1eb7cc5f7ce7919d01ee050351170891d6e103aa7adea25827c13c901ccf6cdf4a8a370e7fd90c8b198dcb1e8814bbf2ed4fb0c8$LR•IPV4•58『线路30』 +CCTV5+体育赛事,http://58.57.40.22:9901/tsfile/live/1005_1.m3u8$LR•IPV4•58『线路31』 +CCTV5+体育赛事,https://cc06.tv12.xyz/6.m3u8$LR•IPV4•58『线路32』 +CCTV5+体育赛事,http://ygbh.site/php/bfgd.php?id=246$LR•IPV4•58『线路33』 +CCTV5+体育赛事,https://cc06.tv12.xyz/6.m3u8$LR•IPV4•58『线路34』 +CCTV5+体育赛事,http://112.27.235.94:8000/hls/6/index.m3u8$LR•IPV4•58『线路35』 +CCTV5+体育赛事,http://39.134.65.71/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225603/index.m3u8$LR•IPV4•58『线路36』 +CCTV5+体育赛事,http://t.061899.xyz/tl/dq.php?id=cctv5p$LR•IPV4•58『线路37』 +CCTV5+体育赛事,http://148.135.93.213:81/live.php?id=CCTV5p$LR•IPV4•58『线路38』 +CCTV5+体育赛事,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225603$LR•IPV4•58『线路39』 +CCTV5+体育赛事,https://www.freetv.top/migu/641886773.m3u8?migutoken=03a1b82e35e58cd89a95034ecb29e77e50493397000ec2b1e4d1ce59af01e6420d6dbc068c8230ec03be3a35a20eed8714e0959e3570a08713a7a2e8d86085eabf8f1aa85744c80c38343988b2$LR•IPV4•58『线路40』 +CCTV5+体育赛事,https://smart.pendy.dpdns.org/Smart.php?id=cctv5plus$LR•IPV4•58『线路41』 +CCTV5+体育赛事,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225603/index.m3u8$LR•IPV6•58『线路42』 +CCTV5+体育赛事,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226349/1.m3u8$LR•IPV6•58『线路43』 +CCTV5+体育赛事,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227348/index.m3u8$LR•IPV4•58『线路44』 +CCTV5+体育赛事,http://yc.myds.me:35455/gaoma/cctv5p.m3u8$LR•IPV4•58『线路45』 +CCTV5+体育赛事,http://nas.suntao.online:35455/itv/6000000001000015875.m3u8?cdn=wasusyt$LR•IPV4•58『线路46』 +CCTV5+体育赛事,http://hwrr.jx.chinamobile.com:8080/PLTV/88888888/224/3221225649/index.m3u8$LR•IPV4•58『线路47』 +CCTV5+体育赛事,https://stream1.freetv.fun/88ee08d5c5e75e963f46cba8142888798dde687981709eda707a0b192da8ad4d.ctv$LR•IPV4•58『线路48』 +CCTV5+体育赛事,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225603$LR•IPV4•58『线路49』 +CCTV5+体育赛事,https://www.freetv.top/migu/641886773.m3u8?migutoken=03a1b82e35e58cd89a95034ecb29e77e50493397000ec2b1e4d1ce59af01e6420d6dbc068c8230ec03be3a35a20eed8714e0959e3570a08713a7a2e8d86085eabf8f1aa85744c80c38343988b2$LR•IPV4•58『线路50』 +CCTV5+体育赛事,https://smart.pendy.dpdns.org/Smart.php?id=cctv5plus$LR•IPV4•58『线路51』 +CCTV5+体育赛事,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225603/index.m3u8$LR•IPV6•58『线路52』 +CCTV5+体育赛事,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226349/1.m3u8$LR•IPV6•58『线路53』 +CCTV5+体育赛事,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227348/index.m3u8$LR•IPV4•58『线路54』 +CCTV5+体育赛事,http://yc.myds.me:35455/gaoma/cctv5p.m3u8$LR•IPV4•58『线路55』 +CCTV5+体育赛事,http://nas.suntao.online:35455/itv/6000000001000015875.m3u8?cdn=wasusyt$LR•IPV4•58『线路56』 +CCTV5+体育赛事,http://hwrr.jx.chinamobile.com:8080/PLTV/88888888/224/3221225649/index.m3u8$LR•IPV4•58『线路57』 +CCTV5+体育赛事,https://stream1.freetv.fun/88ee08d5c5e75e963f46cba8142888798dde687981709eda707a0b192da8ad4d.ctv$LR•IPV4•58『线路58』 +CCTV6电影,http://zzssw01.55555.io:9901/tsfile/live/0006_1.m3u8$LR•IPV4•64『线路1』 +CCTV6电影,http://120.76.248.139/live/bfgd/4200000065.m3u8$LR•IPV4•64『线路2』 +CCTV6电影,http://112.27.235.94:8000/hls/7/index.m3u8$LR•IPV4•64『线路3』 +CCTV6电影,http://221.2.148.205:8154/tsfile/live/0006_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•64『线路4』 +CCTV6电影,http://113.26.202.52:1299/tsfile/live/0006_1.m3u8$LR•IPV4•64『线路5』 +CCTV6电影,http://61.156.228.12:8154/tsfile/live/0006_1.m3u8$LR•IPV4•64『线路6』 +CCTV6电影,http://zzssw01.55555.io:9901/tsfile/live/0006_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•64『线路7』 +CCTV6电影,http://genglei.8866.org:9901/tsfile/live/0006_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•64『线路8』 +CCTV6电影,http://zzssw01.55555.io:9901/tsfile/live/0006_1.m3u8$LR•IPV4•64『线路9』 +CCTV6电影,http://120.76.248.139/live/bfgd/4200000065.m3u8$LR•IPV4•64『线路10』 +CCTV6电影,http://112.27.235.94:8000/hls/7/index.m3u8$LR•IPV4•64『线路11』 +CCTV6电影,http://221.2.148.205:8154/tsfile/live/0006_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•64『线路12』 +CCTV6电影,http://113.26.202.52:1299/tsfile/live/0006_1.m3u8$LR•IPV4•64『线路13』 +CCTV6电影,http://61.156.228.12:8154/tsfile/live/0006_1.m3u8$LR•IPV4•64『线路14』 +CCTV6电影,http://zzssw01.55555.io:9901/tsfile/live/0006_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•64『线路15』 +CCTV6电影,http://genglei.8866.org:9901/tsfile/live/0006_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•64『线路16』 +CCTV6电影,http://61.156.228.12:8154/tsfile/live/0006_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•64『线路17』 +CCTV6电影,http://101.74.28.84:9901/tsfile/live/0006_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•64『线路18』 +CCTV6电影,http://1.195.131.143:9901/tsfile/live/0006_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•64『线路19』 +CCTV6电影,http://101.66.198.42:9901/tsfile/live/0006_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•64『线路20』 +CCTV6电影,http://123.163.21.101:9901/tsfile/live/0006_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•64『线路21』 +CCTV6电影,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226010$LR•IPV4•64『线路22』 +CCTV6电影,http://iptv.huuc.edu.cn/hls/cctv6hd.m3u8$LR•IPV4•64『线路23』 +CCTV6电影,https://smart.pendy.dpdns.org/Smart.php?id=cctv6$LR•IPV4•64『线路24』 +CCTV6电影,https://www.freetv.top/migu/624878396.m3u8?migutoken=ee6c3d925888b2938ca61a2c94d84986ff15ec0fedd3e1e35bcf4ffada20fbeead007033b33efc350632bb959d9bee9da36bac91ec304513f63032fb12e8f570416fc533ede1c4ef94197eb07c$LR•IPV4•64『线路25』 +CCTV6电影,http://www.freetv.top/migu/624878396.m3u8?migutoken=3adcad950884d4ecc6c6967edee9c162189a1e09480eb5c29b369864aeedaed43c3f951d7eb6c32d86baac49792aacb3264b8f074e746477064fd7b1f172f00a9d84373825617d4366e8c54f0c$LR•IPV4•64『线路26』 +CCTV6电影,http://yc.myds.me:35455/itv/6000000001000004574.m3u8?cdn=wasusyt$LR•IPV4•64『线路27』 +CCTV6电影,http://nas.suntao.online:35455/itv/1000000005000265006.m3u8?cdn=ystenlive$LR•IPV4•64『线路28』 +CCTV6电影,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227325/index.m3u8$LR•IPV4•64『线路29』 +CCTV6电影,http://183.94.1.118:8801/tsfile/live/0006_1.m3u8$LR•IPV4•64『线路30』 +CCTV6电影,http://120.192.226.35:8009/hls/6/index.m3u8$LR•IPV4•64『线路31』 +CCTV6电影,http://123.182.60.29:9002/hls/6/index.m3u8$LR•IPV4•64『线路32』 +CCTV6电影,http://58.17.48.228:808/hls/6/index.m3u8$LR•IPV4•64『线路33』 +CCTV6电影,http://61.138.128.226:19901/tsfile/live/0006_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•64『线路34』 +CCTV6电影,http://36.105.100.208:35455/gaoma/cctv6.m3u8$LR•IPV4•64『线路35』 +CCTV6电影,http://iptv.0564.org:35455/itv/1000000005000265006.m3u8?cdn=ystenlive$LR•IPV4•64『线路36』 +CCTV6电影,http://mh0.asia:35455/itv/1000000005000265006.m3u8?cdn=ystenlive$LR•IPV4•64『线路37』 +CCTV6电影,https://api.olelive.com/dis/live/CCTV6HD/hls.m3u8$LR•IPV4•64『线路38』 +CCTV6电影,http://116.77.32.59:8277/streams/d/cctv6/playlist.m3u8$LR•IPV4•64『线路39』 +CCTV6电影,http://fm1077.serv00.net/Smart.php?id=cctv6$LR•IPV4•64『线路40』 +CCTV6电影,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226010/1.m3u8?icpid=88888888&from=1&hms_devid=1012&vqe=3$LR•IPV6•64『线路41』 +CCTV6电影,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226010/index.m3u8$LR•IPV6•64『线路42』 +CCTV6电影,http://101.35.240.114:88/live.php?id=CCTV6$LR•IPV4•64『线路43』 +CCTV6电影,http://218.13.14.6:60050/tsfile/live/1006_1.m3u8$LR•IPV4•64『线路44』 +CCTV6电影,http://58.57.40.22:9901/tsfile/live/1006_1.m3u8$LR•IPV4•64『线路45』 +CCTV6电影,https://cc06.tv12.xyz/7.m3u8$LR•IPV4•64『线路46』 +CCTV6电影,http://iptv.huuc.edu.cn/hls/cctv6hd.m3u8$LR•IPV4•64『线路47』 +CCTV6电影,http://ygbh.site/php/bfgd.php?id=065$LR•IPV4•64『线路48』 +CCTV6电影,https://cc06.tv12.xyz/7.m3u8$LR•IPV4•64『线路49』 +CCTV6电影,http://112.27.235.94:8000/hls/7/index.m3u8$LR•IPV4•64『线路50』 +CCTV6电影,http://39.135.135.50/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226010/index.m3u8$LR•IPV4•64『线路51』 +CCTV6电影,http://t.061899.xyz/tl/dq.php?id=cctv6$LR•IPV4•64『线路52』 +CCTV6电影,https://zby.130519.xyz/PLTV/11/224/3221225741/index.m3u8$LR•IPV4•64『线路53』 +CCTV6电影,http://148.135.93.213:81/live.php?id=CCTV6$LR•IPV4•64『线路54』 +CCTV6电影,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226010$LR•IPV4•64『线路55』 +CCTV6电影,http://iptv.huuc.edu.cn/hls/cctv6hd.m3u8$LR•IPV4•64『线路56』 +CCTV6电影,https://smart.pendy.dpdns.org/Smart.php?id=cctv6$LR•IPV4•64『线路57』 +CCTV6电影,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226010/1.m3u8?icpid=88888888&from=1&hms_devid=1012&vqe=3$LR•IPV6•64『线路58』 +CCTV6电影,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226010/index.m3u8$LR•IPV6•64『线路59』 +CCTV6电影,https://www.freetv.top/migu/624878396.m3u8?migutoken=ee6c3d925888b2938ca61a2c94d84986ff15ec0fedd3e1e35bcf4ffada20fbeead007033b33efc350632bb959d9bee9da36bac91ec304513f63032fb12e8f570416fc533ede1c4ef94197eb07c$LR•IPV4•64『线路60』 +CCTV6电影,http://www.freetv.top/migu/624878396.m3u8?migutoken=3adcad950884d4ecc6c6967edee9c162189a1e09480eb5c29b369864aeedaed43c3f951d7eb6c32d86baac49792aacb3264b8f074e746477064fd7b1f172f00a9d84373825617d4366e8c54f0c$LR•IPV4•64『线路61』 +CCTV6电影,http://yc.myds.me:35455/itv/6000000001000004574.m3u8?cdn=wasusyt$LR•IPV4•64『线路62』 +CCTV6电影,http://nas.suntao.online:35455/itv/1000000005000265006.m3u8?cdn=ystenlive$LR•IPV4•64『线路63』 +CCTV6电影,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227325/index.m3u8$LR•IPV4•64『线路64』 +CCTV7国防军事,http://112.27.235.94:8000/hls/8/index.m3u8$LR•IPV4•53『线路1』 +CCTV7国防军事,http://zzssw01.55555.io:9901/tsfile/live/0007_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•53『线路2』 +CCTV7国防军事,http://112.27.235.94:8000/hls/8/index.m3u8$LR•IPV4•53『线路3』 +CCTV7国防军事,http://zzssw01.55555.io:9901/tsfile/live/0007_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•53『线路4』 +CCTV7国防军事,http://1.195.131.143:9901/tsfile/live/0007_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•53『线路5』 +CCTV7国防军事,http://101.74.28.84:9901/tsfile/live/0007_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•53『线路6』 +CCTV7国防军事,http://101.66.198.42:9901/tsfile/live/0007_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•53『线路7』 +CCTV7国防军事,http://123.163.21.101:9901/tsfile/live/0007_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•53『线路8』 +CCTV7国防军事,http://106.118.70.125:9901/tsfile/live/0007_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•53『线路9』 +CCTV7国防军事,http://61.156.228.12:8154/tsfile/live/0007_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•53『线路10』 +CCTV7国防军事,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225733$LR•IPV4•53『线路11』 +CCTV7国防军事,http://goo.bkpcp.top/mg/CCTV7$LR•IPV4•53『线路12』 +CCTV7国防军事,http://iptv.huuc.edu.cn/hls/cctv7hd.m3u8$LR•IPV4•53『线路13』 +CCTV7国防军事,https://smart.pendy.dpdns.org/Smart.php?id=cctv7$LR•IPV4•53『线路14』 +CCTV7国防军事,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227180/index.m3u8$LR•IPV4•53『线路15』 +CCTV7国防军事,https://www.freetv.top/migu/673168121.m3u8?migutoken=44446ab398991313e6a822efdaec82f3b845a2e8f141c172aa857c477255724bbb28fc01d33f764c51106c446af1c57e8815b58822075b194f4cf55cde28fe55f54330d4586c92e75e8aa50a48$LR•IPV4•53『线路16』 +CCTV7国防军事,http://www.freetv.top/migu/673168121.m3u8?migutoken=bea4d574a7f96c7e95fb2000e191d57743cfdadfa9a4819385a46bf2bf269d9cf13b9bcc1494158b5bc16ce7d6751825800030253b91daf31a298122a2511f45821009cbeca64d12349bc0227d$LR•IPV4•53『线路17』 +CCTV7国防军事,http://yc.myds.me:35455/gaoma/cctv7.m3u8$LR•IPV4•53『线路18』 +CCTV7国防军事,http://183.94.1.118:8801/tsfile/live/0007_1.m3u8$LR•IPV4•53『线路19』 +CCTV7国防军事,http://120.192.226.35:8009/hls/504/index.m3u8$LR•IPV4•53『线路20』 +CCTV7国防军事,http://123.182.60.29:9002/hls/9/index.m3u8$LR•IPV4•53『线路21』 +CCTV7国防军事,http://61.138.128.226:19901/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•53『线路22』 +CCTV7国防军事,http://36.105.100.208:35455/gaoma/cctv7.m3u8$LR•IPV4•53『线路23』 +CCTV7国防军事,http://iptv.0564.org:35455/itv/1000000005000265007.m3u8?cdn=ystenlive$LR•IPV4•53『线路24』 +CCTV7国防军事,http://mh0.asia:35455/itv/1000000005000265007.m3u8?cdn=ystenlive$LR•IPV4•53『线路25』 +CCTV7国防军事,https://api.olelive.com/dis/live/CCTV7HD/hls.m3u8$LR•IPV4•53『线路26』 +CCTV7国防军事,http://60.29.124.66:6080/hls/18/index.m3u8$LR•IPV4•53『线路27』 +CCTV7国防军事,http://175.171.30.26:5111/hls/337212636/index.m3u8$LR•IPV4•53『线路28』 +CCTV7国防军事,http://fm1077.serv00.net/Smart.php?id=cctv7$LR•IPV4•53『线路29』 +CCTV7国防军事,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225733/index.m3u8$LR•IPV6•53『线路30』 +CCTV7国防军事,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226234/1.m3u8$LR•IPV6•53『线路31』 +CCTV7国防军事,http://148.135.93.213/live.php?id=CCTV7$LR•IPV4•53『线路32』 +CCTV7国防军事,http://218.13.14.6:60050/tsfile/live/1007_1.m3u8$LR•IPV4•53『线路33』 +CCTV7国防军事,http://58.57.40.22:9901/tsfile/live/1007_1.m3u8$LR•IPV4•53『线路34』 +CCTV7国防军事,https://cc06.tv12.xyz/8.m3u8$LR•IPV4•53『线路35』 +CCTV7国防军事,http://iptv.huuc.edu.cn/hls/cctv7hd.m3u8$LR•IPV4•53『线路36』 +CCTV7国防军事,http://ygbh.site/php/bfgd.php?id=127$LR•IPV4•53『线路37』 +CCTV7国防军事,https://cc06.tv12.xyz/8.m3u8$LR•IPV4•53『线路38』 +CCTV7国防军事,http://112.27.235.94:8000/hls/8/index.m3u8$LR•IPV4•53『线路39』 +CCTV7国防军事,http://39.135.135.87/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225733/index.m3u8$LR•IPV4•53『线路40』 +CCTV7国防军事,http://t.061899.xyz/tl/dq.php?id=cctv7$LR•IPV4•53『线路41』 +CCTV7国防军事,https://zby.130519.xyz/PLTV/11/224/3221225701/index.m3u8$LR•IPV4•53『线路42』 +CCTV7国防军事,http://148.135.93.213:81/live.php?id=CCTV7$LR•IPV4•53『线路43』 +CCTV7国防军事,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225733$LR•IPV4•53『线路44』 +CCTV7国防军事,http://goo.bkpcp.top/mg/CCTV7$LR•IPV4•53『线路45』 +CCTV7国防军事,http://iptv.huuc.edu.cn/hls/cctv7hd.m3u8$LR•IPV4•53『线路46』 +CCTV7国防军事,https://smart.pendy.dpdns.org/Smart.php?id=cctv7$LR•IPV4•53『线路47』 +CCTV7国防军事,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225733/index.m3u8$LR•IPV6•53『线路48』 +CCTV7国防军事,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226234/1.m3u8$LR•IPV6•53『线路49』 +CCTV7国防军事,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227180/index.m3u8$LR•IPV4•53『线路50』 +CCTV7国防军事,https://www.freetv.top/migu/673168121.m3u8?migutoken=44446ab398991313e6a822efdaec82f3b845a2e8f141c172aa857c477255724bbb28fc01d33f764c51106c446af1c57e8815b58822075b194f4cf55cde28fe55f54330d4586c92e75e8aa50a48$LR•IPV4•53『线路51』 +CCTV7国防军事,http://www.freetv.top/migu/673168121.m3u8?migutoken=bea4d574a7f96c7e95fb2000e191d57743cfdadfa9a4819385a46bf2bf269d9cf13b9bcc1494158b5bc16ce7d6751825800030253b91daf31a298122a2511f45821009cbeca64d12349bc0227d$LR•IPV4•53『线路52』 +CCTV7国防军事,http://yc.myds.me:35455/gaoma/cctv7.m3u8$LR•IPV4•53『线路53』 +CCTV8电视剧,http://zzssw01.55555.io:9901/tsfile/live/0008_1.m3u8$LR•IPV4•66『线路1』 +CCTV8电视剧,http://124.165.251.82:85/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路2』 +CCTV8电视剧,http://183.215.134.239:19901/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路3』 +CCTV8电视剧,http://61.156.228.12:8154/tsfile/live/0008_1.m3u8$LR•IPV4•66『线路4』 +CCTV8电视剧,http://221.2.148.205:8154/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路5』 +CCTV8电视剧,http://112.27.235.94:8000/hls/9/index.m3u8$LR•IPV4•66『线路6』 +CCTV8电视剧,http://zzssw01.55555.io:9901/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路7』 +CCTV8电视剧,http://genglei.8866.org:9901/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路8』 +CCTV8电视剧,http://zzssw01.55555.io:9901/tsfile/live/0008_1.m3u8$LR•IPV4•66『线路9』 +CCTV8电视剧,http://124.165.251.82:85/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路10』 +CCTV8电视剧,http://183.215.134.239:19901/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路11』 +CCTV8电视剧,http://61.156.228.12:8154/tsfile/live/0008_1.m3u8$LR•IPV4•66『线路12』 +CCTV8电视剧,http://221.2.148.205:8154/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路13』 +CCTV8电视剧,http://112.27.235.94:8000/hls/9/index.m3u8$LR•IPV4•66『线路14』 +CCTV8电视剧,http://zzssw01.55555.io:9901/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路15』 +CCTV8电视剧,http://genglei.8866.org:9901/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路16』 +CCTV8电视剧,http://101.74.28.84:9901/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路17』 +CCTV8电视剧,http://1.195.131.143:9901/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路18』 +CCTV8电视剧,http://101.66.198.42:9901/tsfile/live/0008_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•66『线路19』 +CCTV8电视剧,http://123.163.21.101:9901/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路20』 +CCTV8电视剧,http://106.118.70.125:9901/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路21』 +CCTV8电视剧,http://61.156.228.12:8154/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路22』 +CCTV8电视剧,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226008$LR•IPV4•66『线路23』 +CCTV8电视剧,http://goo.bkpcp.top/mg/cctv8$LR•IPV4•66『线路24』 +CCTV8电视剧,http://iptv.huuc.edu.cn/hls/cctv8hd.m3u8$LR•IPV4•66『线路25』 +CCTV8电视剧,https://www.freetv.top/migu/624878356.m3u8?migutoken=170b73b07e0cf0d307afea3545da5b9609d7c15461a2f4ac0f43634101df9baf391a446b91e5f84446b6a3b0934bb4730e2f3c4a32a565f904f22c8ff745a094d45dfd49c54f31b0b78156a080$LR•IPV4•66『线路26』 +CCTV8电视剧,https://smart.pendy.dpdns.org/Smart.php?id=cctv8hd$LR•IPV4•66『线路27』 +CCTV8电视剧,http://yc.myds.me:35455/gaoma/cctv8.m3u8$LR•IPV4•66『线路28』 +CCTV8电视剧,http://183.94.1.118:8801/tsfile/live/0008_1.m3u8$LR•IPV4•66『线路29』 +CCTV8电视剧,http://120.192.226.35:8009/hls/8/index.m3u8$LR•IPV4•66『线路30』 +CCTV8电视剧,http://123.182.60.29:9002/hls/8/index.m3u8$LR•IPV4•66『线路31』 +CCTV8电视剧,http://58.17.48.228:808/hls/8/index.m3u8$LR•IPV4•66『线路32』 +CCTV8电视剧,http://61.138.128.226:19901/tsfile/live/0009_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路33』 +CCTV8电视剧,http://36.105.100.208:35455/gaoma/cctv8k_36m.m3u8$LR•IPV4•66『线路34』 +CCTV8电视剧,http://iptv.0564.org:35455/itv/1000000005000265008.m3u8?cdn=ystenlive$LR•IPV4•66『线路35』 +CCTV8电视剧,http://mh0.asia:35455/itv/1000000005000265008.m3u8?cdn=ystenlive$LR•IPV4•66『线路36』 +CCTV8电视剧,http://3501776.xyz:35455/gaoma/cctv8.m3u8$LR•IPV4•66『线路37』 +CCTV8电视剧,https://api.olelive.com/dis/live/CCTV8HD/hls.m3u8$LR•IPV4•66『线路38』 +CCTV8电视剧,http://fm1077.serv00.net/Smart.php?id=cctv8hd$LR•IPV4•66『线路39』 +CCTV8电视剧,http://[2409:8087:1a01:df::4051]:80/TVOD/88888888/224/3221225795/main.m3u8$LR•IPV6•66『线路40』 +CCTV8电视剧,http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226008/index.m3u8$LR•IPV6•66『线路41』 +CCTV8电视剧,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226451/1.m3u8$LR•IPV6•66『线路42』 +CCTV8电视剧,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226008/index.m3u8$LR•IPV6•66『线路43』 +CCTV8电视剧,http://101.35.240.114:88/live.php?id=CCTV8$LR•IPV4•66『线路44』 +CCTV8电视剧,http://218.13.14.6:60050/tsfile/live/1008_1.m3u8$LR•IPV4•66『线路45』 +CCTV8电视剧,http://58.57.40.22:9901/tsfile/live/1008_1.m3u8$LR•IPV4•66『线路46』 +CCTV8电视剧,https://cc06.tv12.xyz/9.m3u8$LR•IPV4•66『线路47』 +CCTV8电视剧,http://183.196.25.171:808/hls/77/index.m3u8$LR•IPV4•66『线路48』 +CCTV8电视剧,http://iptv.huuc.edu.cn/hls/cctv8hd.m3u8$LR•IPV4•66『线路49』 +CCTV8电视剧,http://ygbh.site/php/bfgd.php?id=066$LR•IPV4•66『线路50』 +CCTV8电视剧,https://cc06.tv12.xyz/9.m3u8$LR•IPV4•66『线路51』 +CCTV8电视剧,http://112.27.235.94:8000/hls/9/index.m3u8$LR•IPV4•66『线路52』 +CCTV8电视剧,http://39.135.135.89/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226008/index.m3u8$LR•IPV4•66『线路53』 +CCTV8电视剧,http://t.061899.xyz/tl/dq.php?id=cctv8$LR•IPV4•66『线路54』 +CCTV8电视剧,https://zby.130519.xyz/PLTV/11/224/3221225736/index.m3u8$LR•IPV4•66『线路55』 +CCTV8电视剧,http://148.135.93.213:81/live.php?id=CCTV8$LR•IPV4•66『线路56』 +CCTV8电视剧,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226008$LR•IPV4•66『线路57』 +CCTV8电视剧,http://goo.bkpcp.top/mg/cctv8$LR•IPV4•66『线路58』 +CCTV8电视剧,http://iptv.huuc.edu.cn/hls/cctv8hd.m3u8$LR•IPV4•66『线路59』 +CCTV8电视剧,https://www.freetv.top/migu/624878356.m3u8?migutoken=170b73b07e0cf0d307afea3545da5b9609d7c15461a2f4ac0f43634101df9baf391a446b91e5f84446b6a3b0934bb4730e2f3c4a32a565f904f22c8ff745a094d45dfd49c54f31b0b78156a080$LR•IPV4•66『线路60』 +CCTV8电视剧,http://[2409:8087:1a01:df::4051]:80/TVOD/88888888/224/3221225795/main.m3u8$LR•IPV6•66『线路61』 +CCTV8电视剧,https://smart.pendy.dpdns.org/Smart.php?id=cctv8hd$LR•IPV4•66『线路62』 +CCTV8电视剧,http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226008/index.m3u8$LR•IPV6•66『线路63』 +CCTV8电视剧,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226451/1.m3u8$LR•IPV6•66『线路64』 +CCTV8电视剧,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226008/index.m3u8$LR•IPV6•66『线路65』 +CCTV8电视剧,http://yc.myds.me:35455/gaoma/cctv8.m3u8$LR•IPV4•66『线路66』 +CCTV9纪录,http://112.27.235.94:8000/hls/10/index.m3u8$LR•IPV4•55『线路1』 +CCTV9纪录,http://60.16.0.216:5757/hls/10/index.m3u8$LR•IPV4•55『线路2』 +CCTV9纪录,http://zzssw01.55555.io:9901/tsfile/live/0009_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•55『线路3』 +CCTV9纪录,http://112.27.235.94:8000/hls/10/index.m3u8$LR•IPV4•55『线路4』 +CCTV9纪录,http://60.16.0.216:5757/hls/10/index.m3u8$LR•IPV4•55『线路5』 +CCTV9纪录,http://zzssw01.55555.io:9901/tsfile/live/0009_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•55『线路6』 +CCTV9纪录,http://1.195.131.143:9901/tsfile/live/1019_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•55『线路7』 +CCTV9纪录,http://101.74.28.84:9901/tsfile/live/0009_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•55『线路8』 +CCTV9纪录,http://101.66.198.42:9901/tsfile/live/0009_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•55『线路9』 +CCTV9纪录,http://123.163.21.101:9901/tsfile/live/0009_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•55『线路10』 +CCTV9纪录,http://106.118.70.125:9901/tsfile/live/0009_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•55『线路11』 +CCTV9纪录,http://61.156.228.12:8154/tsfile/live/0009_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•55『线路12』 +CCTV9纪录,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225734$LR•IPV4•55『线路13』 +CCTV9纪录,http://iptv.huuc.edu.cn/hls/cctv9hd.m3u8$LR•IPV4•55『线路14』 +CCTV9纪录,https://www.freetv.top/migu/673168140.m3u8?migutoken=749c49cdc31bb395e0349adc81010adc8707f80e51e9d3491ad67bfa71388ad768f7b52c8064338a7ef45eb7ddb192fb4937b21681c82499a0c16653ad9a9bec98ff5ce6ab183e4029bbdf269e$LR•IPV4•55『线路15』 +CCTV9纪录,https://smart.pendy.dpdns.org/Smart.php?id=cctv9hd$LR•IPV4•55『线路16』 +CCTV9纪录,http://www.freetv.top/migu/673168140.m3u8?migutoken=b6b3dff09079aa89b4ea1988e02de40fa003df2db6f755979b0c414bdfffe3225adf1ec44edf5934481e00ada14c3b23dc6e93bb72f70ed2319f17002205dc998b6ce2dde3d00bf5701f8261ec$LR•IPV4•55『线路17』 +CCTV9纪录,http://yc.myds.me:35455/gaoma/cctv9.m3u8$LR•IPV4•55『线路18』 +CCTV9纪录,http://nas.suntao.online:35455/itv/1000000005000265009.m3u8?cdn=ystenlive$LR•IPV4•55『线路19』 +CCTV9纪录,http://183.94.1.118:8801/tsfile/live/0009_1.m3u8$LR•IPV4•55『线路20』 +CCTV9纪录,http://120.192.226.35:8009/hls/509/index.m3u8$LR•IPV4•55『线路21』 +CCTV9纪录,http://123.182.60.29:9002/hls/51/index.m3u8$LR•IPV4•55『线路22』 +CCTV9纪录,http://58.17.48.228:808/hls/9/index.m3u8$LR•IPV4•55『线路23』 +CCTV9纪录,http://61.138.128.226:19901/tsfile/live/0009_2.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•55『线路24』 +CCTV9纪录,http://36.105.100.208:35455/gaoma/cctv9.m3u8$LR•IPV4•55『线路25』 +CCTV9纪录,http://iptv.0564.org:35455/itv/1000000005000265009.m3u8?cdn=ystenlive$LR•IPV4•55『线路26』 +CCTV9纪录,http://mh0.asia:35455/itv/1000000005000265009.m3u8?cdn=ystenlive$LR•IPV4•55『线路27』 +CCTV9纪录,http://3501776.xyz:35455/gaoma/cctv9.m3u8$LR•IPV4•55『线路28』 +CCTV9纪录,https://api.olelive.com/dis/live/CCTV9HD/hls.m3u8$LR•IPV4•55『线路29』 +CCTV9纪录,http://fm1077.serv00.net/Smart.php?id=cctv9hd$LR•IPV4•55『线路30』 +CCTV9纪录,http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225734/index.m3u8$LR•IPV6•55『线路31』 +CCTV9纪录,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226236/1.m3u8$LR•IPV6•55『线路32』 +CCTV9纪录,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225734/index.m3u8$LR•IPV6•55『线路33』 +CCTV9纪录,http://148.135.93.213/live.php?id=CCTV9$LR•IPV4•55『线路34』 +CCTV9纪录,http://218.13.14.6:60050/tsfile/live/1009_1.m3u8$LR•IPV4•55『线路35』 +CCTV9纪录,http://58.57.40.22:9901/tsfile/live/1009_1.m3u8$LR•IPV4•55『线路36』 +CCTV9纪录,https://cc06.tv12.xyz/10.m3u8$LR•IPV4•55『线路37』 +CCTV9纪录,http://iptv.huuc.edu.cn/hls/cctv9hd.m3u8$LR•IPV4•55『线路38』 +CCTV9纪录,http://ygbh.site/php/bfgd.php?id=128$LR•IPV4•55『线路39』 +CCTV9纪录,https://cc06.tv12.xyz/10.m3u8$LR•IPV4•55『线路40』 +CCTV9纪录,http://112.27.235.94:8000/hls/10/index.m3u8$LR•IPV4•55『线路41』 +CCTV9纪录,http://39.135.135.38/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225734/index.m3u8$LR•IPV4•55『线路42』 +CCTV9纪录,http://t.061899.xyz/tl/dq.php?id=cctv9$LR•IPV4•55『线路43』 +CCTV9纪录,http://p.ytelc.com/169l/0/cctv.php?id=cctv9$LR•IPV4•55『线路44』 +CCTV9纪录,http://148.135.93.213:81/live.php?id=CCTV9$LR•IPV4•55『线路45』 +CCTV9纪录,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225734$LR•IPV4•55『线路46』 +CCTV9纪录,http://iptv.huuc.edu.cn/hls/cctv9hd.m3u8$LR•IPV4•55『线路47』 +CCTV9纪录,https://www.freetv.top/migu/673168140.m3u8?migutoken=749c49cdc31bb395e0349adc81010adc8707f80e51e9d3491ad67bfa71388ad768f7b52c8064338a7ef45eb7ddb192fb4937b21681c82499a0c16653ad9a9bec98ff5ce6ab183e4029bbdf269e$LR•IPV4•55『线路48』 +CCTV9纪录,http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225734/index.m3u8$LR•IPV6•55『线路49』 +CCTV9纪录,https://smart.pendy.dpdns.org/Smart.php?id=cctv9hd$LR•IPV4•55『线路50』 +CCTV9纪录,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226236/1.m3u8$LR•IPV6•55『线路51』 +CCTV9纪录,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225734/index.m3u8$LR•IPV6•55『线路52』 +CCTV9纪录,http://www.freetv.top/migu/673168140.m3u8?migutoken=b6b3dff09079aa89b4ea1988e02de40fa003df2db6f755979b0c414bdfffe3225adf1ec44edf5934481e00ada14c3b23dc6e93bb72f70ed2319f17002205dc998b6ce2dde3d00bf5701f8261ec$LR•IPV4•55『线路53』 +CCTV9纪录,http://yc.myds.me:35455/gaoma/cctv9.m3u8$LR•IPV4•55『线路54』 +CCTV9纪录,http://nas.suntao.online:35455/itv/1000000005000265009.m3u8?cdn=ystenlive$LR•IPV4•55『线路55』 +CCTV10科教,http://112.27.235.94:8000/hls/11/index.m3u8$LR•IPV4•55『线路1』 +CCTV10科教,https://cc06.tv12.xyz/11.m3u8$LR•IPV4•55『线路2』 +CCTV10科教,http://zzssw01.55555.io:9901/tsfile/live/0010_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•55『线路3』 +CCTV10科教,http://112.27.235.94:8000/hls/11/index.m3u8$LR•IPV4•55『线路4』 +CCTV10科教,https://cc06.tv12.xyz/11.m3u8$LR•IPV4•55『线路5』 +CCTV10科教,http://zzssw01.55555.io:9901/tsfile/live/0010_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•55『线路6』 +CCTV10科教,http://101.74.28.84:9901/tsfile/live/0010_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•55『线路7』 +CCTV10科教,http://101.66.198.42:9901/tsfile/live/0010_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•55『线路8』 +CCTV10科教,http://123.163.21.101:9901/tsfile/live/0010_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•55『线路9』 +CCTV10科教,http://106.118.70.125:9901/tsfile/live/0010_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•55『线路10』 +CCTV10科教,http://1.195.131.143:9901/tsfile/live/1020_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•55『线路11』 +CCTV10科教,http://61.156.228.12:8154/tsfile/live/0010_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•55『线路12』 +CCTV10科教,http://z.b.bkpcp.top/m.php?id=CCTV-10科教科教$LR•IPV4•55『线路13』 +CCTV10科教,http://goo.bkpcp.top/mg/cctv10$LR•IPV4•55『线路14』 +CCTV10科教,http://iptv.huuc.edu.cn/hls/cctv10hd.m3u8$LR•IPV4•55『线路15』 +CCTV10科教,https://smart.pendy.dpdns.org/Smart.php?id=cctv10hd$LR•IPV4•55『线路16』 +CCTV10科教,https://www.freetv.top/migu/624878405.m3u8?migutoken=e7e8abe9ae322869a93e8450014e08c5949217331c53007abb9f6eee64b06cc42f81828befee8b129005bcdebf805a1bbd19f0949e8329cf7ff4ab9379e930cfb8185ddf66c83b972ea6481e86$LR•IPV4•55『线路17』 +CCTV10科教,http://www.freetv.top/migu/624878405.m3u8?migutoken=994dc87ce4767211215bbc02fa208301259959a2d995deb9996c41b650e244fc75c3d5bae41d623bed5ba96aa38c7ea483d856771c119f74e8bb93fb60dc8304e146d0bf46405e88554d84e414$LR•IPV4•55『线路18』 +CCTV10科教,http://yc.myds.me:35455/gaoma/cctv10.m3u8$LR•IPV4•55『线路19』 +CCTV10科教,http://183.94.1.118:8801/tsfile/live/0010_1.m3u8$LR•IPV4•55『线路20』 +CCTV10科教,http://120.192.226.35:8009/hls/506/index.m3u8$LR•IPV4•55『线路21』 +CCTV10科教,http://123.182.60.29:9002/hls/10/index.m3u8$LR•IPV4•55『线路22』 +CCTV10科教,http://58.17.48.228:808/hls/10/index.m3u8$LR•IPV4•55『线路23』 +CCTV10科教,http://61.138.128.226:19901/tsfile/live/0011_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•55『线路24』 +CCTV10科教,http://36.105.100.208:35455/gaoma/cctv10.m3u8$LR•IPV4•55『线路25』 +CCTV10科教,http://iptv.0564.org:35455/itv/1000000005000265010.m3u8?cdn=ystenlive$LR•IPV4•55『线路26』 +CCTV10科教,http://mh0.asia:35455/itv/1000000005000265010.m3u8?cdn=ystenlive$LR•IPV4•55『线路27』 +CCTV10科教,http://3501776.xyz:35455/gaoma/cctv10.m3u8$LR•IPV4•55『线路28』 +CCTV10科教,https://api.olelive.com/dis/live/CCTV10HD/hls.m3u8$LR•IPV4•55『线路29』 +CCTV10科教,http://fm1077.serv00.net/Smart.php?id=cctv10hd$LR•IPV4•55『线路30』 +CCTV10科教,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225730/index.m3u8$LR•IPV6•55『线路31』 +CCTV10科教,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226449/1.m3u8$LR•IPV6•55『线路32』 +CCTV10科教,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225730/index.m3u8$LR•IPV6•55『线路33』 +CCTV10科教,http://101.35.240.114:88/live.php?id=CCTV10$LR•IPV4•55『线路34』 +CCTV10科教,http://218.13.14.6:60050/tsfile/live/1010_1.m3u8$LR•IPV4•55『线路35』 +CCTV10科教,http://39.164.160.249:9901/tsfile/live/0010_1.m3u8$LR•IPV4•55『线路36』 +CCTV10科教,https://cc06.tv12.xyz/11.m3u8$LR•IPV4•55『线路37』 +CCTV10科教,http://iptv.huuc.edu.cn/hls/cctv10hd.m3u8$LR•IPV4•55『线路38』 +CCTV10科教,http://ygbh.site/php/bfgd.php?id=129$LR•IPV4•55『线路39』 +CCTV10科教,https://cc06.tv12.xyz/11.m3u8$LR•IPV4•55『线路40』 +CCTV10科教,http://112.27.235.94:8000/hls/11/index.m3u8$LR•IPV4•55『线路41』 +CCTV10科教,http://39.135.135.75/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225730/index.m3u8$LR•IPV4•55『线路42』 +CCTV10科教,http://t.061899.xyz/tl/dq.php?id=cctv10$LR•IPV4•55『线路43』 +CCTV10科教,https://zby.130519.xyz/PLTV/11/224/3221225743/index.m3u8$LR•IPV4•55『线路44』 +CCTV10科教,http://148.135.93.213:81/live.php?id=CCTV10$LR•IPV4•55『线路45』 +CCTV10科教,http://z.b.bkpcp.top/m.php?id=CCTV-10科教科教$LR•IPV4•55『线路46』 +CCTV10科教,http://goo.bkpcp.top/mg/cctv10$LR•IPV4•55『线路47』 +CCTV10科教,http://iptv.huuc.edu.cn/hls/cctv10hd.m3u8$LR•IPV4•55『线路48』 +CCTV10科教,https://smart.pendy.dpdns.org/Smart.php?id=cctv10hd$LR•IPV4•55『线路49』 +CCTV10科教,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225730/index.m3u8$LR•IPV6•55『线路50』 +CCTV10科教,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226449/1.m3u8$LR•IPV6•55『线路51』 +CCTV10科教,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225730/index.m3u8$LR•IPV6•55『线路52』 +CCTV10科教,https://www.freetv.top/migu/624878405.m3u8?migutoken=e7e8abe9ae322869a93e8450014e08c5949217331c53007abb9f6eee64b06cc42f81828befee8b129005bcdebf805a1bbd19f0949e8329cf7ff4ab9379e930cfb8185ddf66c83b972ea6481e86$LR•IPV4•55『线路53』 +CCTV10科教,http://www.freetv.top/migu/624878405.m3u8?migutoken=994dc87ce4767211215bbc02fa208301259959a2d995deb9996c41b650e244fc75c3d5bae41d623bed5ba96aa38c7ea483d856771c119f74e8bb93fb60dc8304e146d0bf46405e88554d84e414$LR•IPV4•55『线路54』 +CCTV10科教,http://yc.myds.me:35455/gaoma/cctv10.m3u8$LR•IPV4•55『线路55』 +CCTV11戏曲,http://120.76.248.139/live/bfgd/4200000130.m3u8$LR•IPV4•57『线路1』 +CCTV11戏曲,http://112.27.235.94:8000/hls/12/index.m3u8$LR•IPV4•57『线路2』 +CCTV11戏曲,http://60.16.0.216:5757/hls/12/index.m3u8$LR•IPV4•57『线路3』 +CCTV11戏曲,http://zzssw01.55555.io:9901/tsfile/live/0011_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•57『线路4』 +CCTV11戏曲,http://120.76.248.139/live/bfgd/4200000130.m3u8$LR•IPV4•57『线路5』 +CCTV11戏曲,http://112.27.235.94:8000/hls/12/index.m3u8$LR•IPV4•57『线路6』 +CCTV11戏曲,http://60.16.0.216:5757/hls/12/index.m3u8$LR•IPV4•57『线路7』 +CCTV11戏曲,http://zzssw01.55555.io:9901/tsfile/live/0011_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•57『线路8』 +CCTV11戏曲,http://101.74.28.84:9901/tsfile/live/0011_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•57『线路9』 +CCTV11戏曲,http://61.156.228.12:8154/tsfile/live/0011_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•57『线路10』 +CCTV11戏曲,http://101.66.198.42:9901/tsfile/live/0011_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•57『线路11』 +CCTV11戏曲,http://123.163.21.101:9901/tsfile/live/0011_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•57『线路12』 +CCTV11戏曲,http://1.195.131.143:9901/tsfile/live/1021_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•57『线路13』 +CCTV11戏曲,http://lu.wqwqwq.sbs/itv/1000000005000265011.m3u8?cdn=ystenlive$LR•IPV4•57『线路14』 +CCTV11戏曲,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226565$LR•IPV4•57『线路15』 +CCTV11戏曲,http://iptv.huuc.edu.cn/hls/cctv11hd.m3u8$LR•IPV4•57『线路16』 +CCTV11戏曲,https://smart.pendy.dpdns.org/Smart.php?id=cctv11$LR•IPV4•57『线路17』 +CCTV11戏曲,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227171/index.m3u8$LR•IPV4•57『线路18』 +CCTV11戏曲,http://yc.myds.me:35455/gaoma/cctv11.m3u8$LR•IPV4•57『线路19』 +CCTV11戏曲,https://stream1.freetv.fun/522d8760b9c0e8172aefbf6b1aac7030daf6f613fabce8b1d00a15416ad0b052.m3u8$LR•IPV4•57『线路20』 +CCTV11戏曲,http://183.94.1.118:8801/tsfile/live/0011_1.m3u8$LR•IPV4•57『线路21』 +CCTV11戏曲,http://120.192.226.35:8009/hls/11/index.m3u8$LR•IPV4•57『线路22』 +CCTV11戏曲,http://123.182.60.29:9002/hls/11/index.m3u8$LR•IPV4•57『线路23』 +CCTV11戏曲,http://61.138.128.226:19901/tsfile/live/0011_2.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•57『线路24』 +CCTV11戏曲,http://36.105.100.208:35455/gaoma/cctv11.m3u8$LR•IPV4•57『线路25』 +CCTV11戏曲,http://iptv.0564.org:35455/itv/1000000005000265011.m3u8?cdn=ystenlive$LR•IPV4•57『线路26』 +CCTV11戏曲,http://mh0.asia:35455/itv/1000000005000265011.m3u8?cdn=ystenlive$LR•IPV4•57『线路27』 +CCTV11戏曲,http://3501776.xyz:35455/itv/1000000005000265011.m3u8?cdn=ystenlive$LR•IPV4•57『线路28』 +CCTV11戏曲,https://api.olelive.com/dis/live/CCTV11HD/hls.m3u8$LR•IPV4•57『线路29』 +CCTV11戏曲,http://60.29.124.66:6080/hls/22/index.m3u8$LR•IPV4•57『线路30』 +CCTV11戏曲,http://fm1077.serv00.net/Smart.php?id=cctv11$LR•IPV4•57『线路31』 +CCTV11戏曲,http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/yinhe/88888888/224/3221225597/index.m3u8$LR•IPV6•57『线路32』 +CCTV11戏曲,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225597/index.m3u8$LR•IPV6•57『线路33』 +CCTV11戏曲,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226334/1.m3u8$LR•IPV6•57『线路34』 +CCTV11戏曲,http://148.135.93.213/live.php?id=CCTV11$LR•IPV4•57『线路35』 +CCTV11戏曲,http://218.13.14.6:60050/tsfile/live/1011_1.m3u8$LR•IPV4•57『线路36』 +CCTV11戏曲,http://39.164.160.249:9901/tsfile/live/0011_1.m3u8$LR•IPV4•57『线路37』 +CCTV11戏曲,https://cc06.tv12.xyz/12.m3u8$LR•IPV4•57『线路38』 +CCTV11戏曲,http://183.196.25.171:808/hls/11/index.m3u8$LR•IPV4•57『线路39』 +CCTV11戏曲,http://iptv.huuc.edu.cn/hls/cctv11hd.m3u8$LR•IPV4•57『线路40』 +CCTV11戏曲,http://ygbh.site/php/bfgd.php?id=130$LR•IPV4•57『线路41』 +CCTV11戏曲,https://cc06.tv12.xyz/12.m3u8$LR•IPV4•57『线路42』 +CCTV11戏曲,http://112.27.235.94:8000/hls/12/index.m3u8$LR•IPV4•57『线路43』 +CCTV11戏曲,http://39.135.135.82/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225597/index.m3u8$LR•IPV4•57『线路44』 +CCTV11戏曲,http://t.061899.xyz/tl/dq.php?id=cctv11$LR•IPV4•57『线路45』 +CCTV11戏曲,https://zby.130519.xyz/PLTV/11/224/3221226101/index.m3u8$LR•IPV4•57『线路46』 +CCTV11戏曲,http://148.135.93.213:81/live.php?id=CCTV11$LR•IPV4•57『线路47』 +CCTV11戏曲,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226565$LR•IPV4•57『线路48』 +CCTV11戏曲,http://iptv.huuc.edu.cn/hls/cctv11hd.m3u8$LR•IPV4•57『线路49』 +CCTV11戏曲,https://smart.pendy.dpdns.org/Smart.php?id=cctv11$LR•IPV4•57『线路50』 +CCTV11戏曲,http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/yinhe/88888888/224/3221225597/index.m3u8$LR•IPV6•57『线路51』 +CCTV11戏曲,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225597/index.m3u8$LR•IPV6•57『线路52』 +CCTV11戏曲,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226334/1.m3u8$LR•IPV6•57『线路53』 +CCTV11戏曲,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227171/index.m3u8$LR•IPV4•57『线路54』 +CCTV11戏曲,http://yc.myds.me:35455/gaoma/cctv11.m3u8$LR•IPV4•57『线路55』 +CCTV11戏曲,https://stream1.freetv.fun/522d8760b9c0e8172aefbf6b1aac7030daf6f613fabce8b1d00a15416ad0b052.m3u8$LR•IPV4•57『线路56』 +CCTV11戏曲,http://lu.wqwqwq.sbs/itv/1000000005000265011.m3u8?cdn=ystenlive$LR•IPV4•57『线路57』 +CCTV12社会与法,http://120.76.248.139/live/bfgd/4200000131.m3u8$LR•IPV4•60『线路1』 +CCTV12社会与法,http://124.165.251.82:85/tsfile/live/0012_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•60『线路2』 +CCTV12社会与法,http://112.27.235.94:8000/hls/13/index.m3u8$LR•IPV4•60『线路3』 +CCTV12社会与法,https://cc06.tv12.xyz/13.m3u8$LR•IPV4•60『线路4』 +CCTV12社会与法,http://60.16.0.216:5757/hls/13/index.m3u8$LR•IPV4•60『线路5』 +CCTV12社会与法,http://zzssw01.55555.io:9901/tsfile/live/0012_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•60『线路6』 +CCTV12社会与法,http://120.76.248.139/live/bfgd/4200000131.m3u8$LR•IPV4•60『线路7』 +CCTV12社会与法,http://124.165.251.82:85/tsfile/live/0012_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•60『线路8』 +CCTV12社会与法,http://112.27.235.94:8000/hls/13/index.m3u8$LR•IPV4•60『线路9』 +CCTV12社会与法,https://cc06.tv12.xyz/13.m3u8$LR•IPV4•60『线路10』 +CCTV12社会与法,http://60.16.0.216:5757/hls/13/index.m3u8$LR•IPV4•60『线路11』 +CCTV12社会与法,http://zzssw01.55555.io:9901/tsfile/live/0012_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•60『线路12』 +CCTV12社会与法,http://106.118.70.125:9901/tsfile/live/0012_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•60『线路13』 +CCTV12社会与法,http://101.66.198.42:9901/tsfile/live/0012_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•60『线路14』 +CCTV12社会与法,http://123.163.21.101:9901/tsfile/live/0012_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•60『线路15』 +CCTV12社会与法,http://1.195.131.143:9901/tsfile/live/1022_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•60『线路16』 +CCTV12社会与法,http://101.74.28.84:9901/tsfile/live/0012_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•60『线路17』 +CCTV12社会与法,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225731$LR•IPV4•60『线路18』 +CCTV12社会与法,http://z.b.bkpcp.top/m.php?id=CCTV-12社会与法社会与法$LR•IPV4•60『线路19』 +CCTV12社会与法,http://iptv.huuc.edu.cn/hls/cctv12hd.m3u8$LR•IPV4•60『线路20』 +CCTV12社会与法,https://www.freetv.top/migu/673168185.m3u8?migutoken=37acadb43b1d7932b0a1e8a4f2d01a06b42a10c31f3ccb417bae200ac3028f30a8110509f2cd6cd130aee4b21c85693aa49817f3381e4d28e140d8db1a20b6fecea22fec17a70ff1341efe6081$LR•IPV4•60『线路21』 +CCTV12社会与法,https://smart.pendy.dpdns.org/Smart.php?id=cctv12$LR•IPV4•60『线路22』 +CCTV12社会与法,http://www.freetv.top/migu/673168185.m3u8?migutoken=21a3954b28c73a4240272889ec94c3318c23068f666c79e61379cb154a890e4e7e3c998a578b29a381972f128751898531cb713221ff95385afec91149321ad772e31489fa01e553c8223e976a$LR•IPV4•60『线路23』 +CCTV12社会与法,http://183.94.1.118:8801/tsfile/live/0012_1.m3u8$LR•IPV4•60『线路24』 +CCTV12社会与法,http://120.192.226.35:8009/hls/507/index.m3u8$LR•IPV4•60『线路25』 +CCTV12社会与法,http://123.182.60.29:9002/hls/12/index.m3u8$LR•IPV4•60『线路26』 +CCTV12社会与法,http://61.138.128.226:19901/tsfile/live/0013_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•60『线路27』 +CCTV12社会与法,http://36.105.100.208:35455/gaoma/cctv12.m3u8$LR•IPV4•60『线路28』 +CCTV12社会与法,http://iptv.0564.org:35455/itv/1000000005000265012.m3u8?cdn=ystenlive$LR•IPV4•60『线路29』 +CCTV12社会与法,http://mh0.asia:35455/itv/1000000005000265012.m3u8?cdn=ystenlive$LR•IPV4•60『线路30』 +CCTV12社会与法,http://3501776.xyz:35455/gaoma/cctv12.m3u8$LR•IPV4•60『线路31』 +CCTV12社会与法,https://api.olelive.com/dis/live/CCTV12HD/hls.m3u8$LR•IPV4•60『线路32』 +CCTV12社会与法,http://175.171.30.26:5111/hls/397332519/index.m3u8$LR•IPV4•60『线路33』 +CCTV12社会与法,http://fm1077.serv00.net/Smart.php?id=cctv12$LR•IPV4•60『线路34』 +CCTV12社会与法,http://[2409:8087:1:20:20::29]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226228/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E2knJCFLHz_HqfBZXNGeA1A%7E_eNUb$LR•IPV6•60『线路35』 +CCTV12社会与法,http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225731/index.m3u8$LR•IPV6•60『线路36』 +CCTV12社会与法,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226228/1.m3u8$LR•IPV6•60『线路37』 +CCTV12社会与法,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225731/index.m3u8$LR•IPV6•60『线路38』 +CCTV12社会与法,http://101.35.240.114:88/live.php?id=CCTV12$LR•IPV4•60『线路39』 +CCTV12社会与法,http://218.13.14.6:60050/tsfile/live/1012_1.m3u8$LR•IPV4•60『线路40』 +CCTV12社会与法,http://58.57.40.22:9901/tsfile/live/1012_1.m3u8$LR•IPV4•60『线路41』 +CCTV12社会与法,https://cc06.tv12.xyz/13.m3u8$LR•IPV4•60『线路42』 +CCTV12社会与法,http://iptv.huuc.edu.cn/hls/cctv12hd.m3u8$LR•IPV4•60『线路43』 +CCTV12社会与法,http://ygbh.site/php/bfgd.php?id=131$LR•IPV4•60『线路44』 +CCTV12社会与法,https://cc06.tv12.xyz/13.m3u8$LR•IPV4•60『线路45』 +CCTV12社会与法,http://112.27.235.94:8000/hls/13/index.m3u8$LR•IPV4•60『线路46』 +CCTV12社会与法,http://39.135.135.11/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225731/index.m3u8$LR•IPV4•60『线路47』 +CCTV12社会与法,http://t.061899.xyz/tl/dq.php?id=cctv12$LR•IPV4•60『线路48』 +CCTV12社会与法,https://zby.130519.xyz/PLTV/11/224/3221226103/index.m3u8$LR•IPV4•60『线路49』 +CCTV12社会与法,http://148.135.93.213:81/live.php?id=CCTV12$LR•IPV4•60『线路50』 +CCTV12社会与法,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225731$LR•IPV4•60『线路51』 +CCTV12社会与法,http://z.b.bkpcp.top/m.php?id=CCTV-12社会与法社会与法$LR•IPV4•60『线路52』 +CCTV12社会与法,http://iptv.huuc.edu.cn/hls/cctv12hd.m3u8$LR•IPV4•60『线路53』 +CCTV12社会与法,https://www.freetv.top/migu/673168185.m3u8?migutoken=37acadb43b1d7932b0a1e8a4f2d01a06b42a10c31f3ccb417bae200ac3028f30a8110509f2cd6cd130aee4b21c85693aa49817f3381e4d28e140d8db1a20b6fecea22fec17a70ff1341efe6081$LR•IPV4•60『线路54』 +CCTV12社会与法,https://smart.pendy.dpdns.org/Smart.php?id=cctv12$LR•IPV4•60『线路55』 +CCTV12社会与法,http://[2409:8087:1:20:20::29]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226228/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E2knJCFLHz_HqfBZXNGeA1A%7E_eNUb$LR•IPV6•60『线路56』 +CCTV12社会与法,http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225731/index.m3u8$LR•IPV6•60『线路57』 +CCTV12社会与法,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226228/1.m3u8$LR•IPV6•60『线路58』 +CCTV12社会与法,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225731/index.m3u8$LR•IPV6•60『线路59』 +CCTV12社会与法,http://www.freetv.top/migu/673168185.m3u8?migutoken=21a3954b28c73a4240272889ec94c3318c23068f666c79e61379cb154a890e4e7e3c998a578b29a381972f128751898531cb713221ff95385afec91149321ad772e31489fa01e553c8223e976a$LR•IPV4•60『线路60』 +CCTV13新闻,http://ali-m-l.cztv.com/channels/lantian/channel21/1080p.m3u8$LR•IPV4•61『线路1』 +CCTV13新闻,http://112.27.235.94:8000/hls/14/index.m3u8$LR•IPV4•61『线路2』 +CCTV13新闻,https://cc06.tv12.xyz/14.m3u8$LR•IPV4•61『线路3』 +CCTV13新闻,http://183.215.134.239:19901/tsfile/live/0013_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路4』 +CCTV13新闻,https://event.pull.hebtv.com/jishi/cp1.m3u8$LR•IPV4•61『线路5』 +CCTV13新闻,http://zzssw01.55555.io:9901/tsfile/live/0013_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路6』 +CCTV13新闻,http://60.16.0.216:5757/hls/14/index.m3u8$LR•IPV4•61『线路7』 +CCTV13新闻,http://ali-m-l.cztv.com/channels/lantian/channel21/1080p.m3u8$LR•IPV4•61『线路8』 +CCTV13新闻,http://112.27.235.94:8000/hls/14/index.m3u8$LR•IPV4•61『线路9』 +CCTV13新闻,https://cc06.tv12.xyz/14.m3u8$LR•IPV4•61『线路10』 +CCTV13新闻,http://183.215.134.239:19901/tsfile/live/0013_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路11』 +CCTV13新闻,https://event.pull.hebtv.com/jishi/cp1.m3u8$LR•IPV4•61『线路12』 +CCTV13新闻,http://zzssw01.55555.io:9901/tsfile/live/0013_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路13』 +CCTV13新闻,http://60.16.0.216:5757/hls/14/index.m3u8$LR•IPV4•61『线路14』 +CCTV13新闻,http://1.195.131.143:9901/tsfile/live/1023_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路15』 +CCTV13新闻,http://61.156.228.12:8154/tsfile/live/0013_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路16』 +CCTV13新闻,http://101.66.198.42:9901/tsfile/live/0013_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•61『线路17』 +CCTV13新闻,http://123.163.21.101:9901/tsfile/live/0013_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路18』 +CCTV13新闻,http://106.118.70.125:9901/tsfile/live/0013_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路19』 +CCTV13新闻,http://101.74.28.84:9901/tsfile/live/0013_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路20』 +CCTV13新闻,http://jwplay.hebyun.com.cn/live/cctv13/1500k/tzwj_video.m3u8$LR•IPV4•61『线路21』 +CCTV13新闻,https://ldncctvwbcdcnc.v.wscdns.com/ldncctvwbcd/cdrmldcctv13_1/index.m3u8$LR•IPV4•61『线路22』 +CCTV13新闻,http://z.b.bkpcp.top/m.php?id=cctv13$LR•IPV4•61『线路23』 +CCTV13新闻,http://j.x.bkpcp.top/jx/CCTV13HD$LR•IPV4•61『线路24』 +CCTV13新闻,http://iptv.huuc.edu.cn/hls/cctv13hd.m3u8$LR•IPV4•61『线路25』 +CCTV13新闻,https://www.freetv.top/migu/608807423.m3u8?migutoken=ac19a58805588401a8e818b6dd00df9b327912af3611ba95f89235e7020821668a2b6dc65ccc3904967da59d0a9742565c56ea582baf8915d068035054818ef0f369dab64705a6a7f7120529ec$LR•IPV4•61『线路26』 +CCTV13新闻,https://smart.pendy.dpdns.org/Smart.php?id=cctv13$LR•IPV4•61『线路27』 +CCTV13新闻,http://183.94.1.118:8801/tsfile/live/0013_1.m3u8$LR•IPV4•61『线路28』 +CCTV13新闻,http://120.192.226.35:8009/hls/13/index.m3u8$LR•IPV4•61『线路29』 +CCTV13新闻,http://123.182.60.29:9002/hls/13/index.m3u8$LR•IPV4•61『线路30』 +CCTV13新闻,http://61.163.181.78:9901/tsfile/live/0013_1.m3u8$LR•IPV4•61『线路31』 +CCTV13新闻,http://61.138.128.226:19901/tsfile/live/0013_2.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路32』 +CCTV13新闻,http://36.105.100.208:35455/gaoma/cctv13.m3u8$LR•IPV4•61『线路33』 +CCTV13新闻,http://iptv.0564.org:35455/gaoma/cctv13.m3u8$LR•IPV4•61『线路34』 +CCTV13新闻,http://3501776.xyz:35455/gaoma/cctv13.m3u8$LR•IPV4•61『线路35』 +CCTV13新闻,https://api.olelive.com/dis/live/CCTV13HD/hls.m3u8$LR•IPV4•61『线路36』 +CCTV13新闻,http://60.29.124.66:6080/hls/23/index.m3u8$LR•IPV4•61『线路37』 +CCTV13新闻,http://fm1077.serv00.net/Smart.php?id=cctv13$LR•IPV4•61『线路38』 +CCTV13新闻,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226011/index.m3u8$LR•IPV6•61『线路39』 +CCTV13新闻,http://148.135.93.213/live.php?id=CCTV13$LR•IPV4•61『线路40』 +CCTV13新闻,http://218.13.14.6:60050/tsfile/live/1013_1.m3u8$LR•IPV4•61『线路41』 +CCTV13新闻,http://58.57.40.22:9901/tsfile/live/1013_1.m3u8$LR•IPV4•61『线路42』 +CCTV13新闻,https://cc06.tv12.xyz/14.m3u8$LR•IPV4•61『线路43』 +CCTV13新闻,http://iptv.huuc.edu.cn/hls/cctv13hd.m3u8$LR•IPV4•61『线路44』 +CCTV13新闻,http://ygbh.site/php/bfgd.php?id=067$LR•IPV4•61『线路45』 +CCTV13新闻,https://cc06.tv12.xyz/14.m3u8$LR•IPV4•61『线路46』 +CCTV13新闻,http://112.27.235.94:8000/hls/14/index.m3u8$LR•IPV4•61『线路47』 +CCTV13新闻,http://39.135.135.59/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226011/index.m3u8$LR•IPV4•61『线路48』 +CCTV13新闻,http://t.061899.xyz/tl/dq.php?id=cctv13$LR•IPV4•61『线路49』 +CCTV13新闻,https://zby.130519.xyz/PLTV/11/224/3221226128/index.m3u8$LR•IPV4•61『线路50』 +CCTV13新闻,http://148.135.93.213:81/live.php?id=CCTV13$LR•IPV4•61『线路51』 +CCTV13新闻,https://event.pull.hebtv.com/jishi/cp1.m3u8$LR•IPV4•61『线路52』 +CCTV13新闻,http://z.b.bkpcp.top/m.php?id=cctv13$LR•IPV4•61『线路53』 +CCTV13新闻,http://j.x.bkpcp.top/jx/CCTV13HD$LR•IPV4•61『线路54』 +CCTV13新闻,http://ali-m-l.cztv.com/channels/lantian/channel21/1080p.m3u8$LR•IPV4•61『线路55』 +CCTV13新闻,http://jwplay.hebyun.com.cn/live/cctv13/1500k/tzwj_video.m3u8$LR•IPV4•61『线路56』 +CCTV13新闻,https://ldncctvwbcdcnc.v.wscdns.com/ldncctvwbcd/cdrmldcctv13_1/index.m3u8$LR•IPV4•61『线路57』 +CCTV13新闻,http://iptv.huuc.edu.cn/hls/cctv13hd.m3u8$LR•IPV4•61『线路58』 +CCTV13新闻,https://www.freetv.top/migu/608807423.m3u8?migutoken=ac19a58805588401a8e818b6dd00df9b327912af3611ba95f89235e7020821668a2b6dc65ccc3904967da59d0a9742565c56ea582baf8915d068035054818ef0f369dab64705a6a7f7120529ec$LR•IPV4•61『线路59』 +CCTV13新闻,https://smart.pendy.dpdns.org/Smart.php?id=cctv13$LR•IPV4•61『线路60』 +CCTV13新闻,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226011/index.m3u8$LR•IPV6•61『线路61』 +CCTV14少儿,https://event.pull.hebtv.com/jishi/cp2.m3u8$LR•IPV4•59『线路1』 +CCTV14少儿,http://112.27.235.94:8000/hls/15/index.m3u8$LR•IPV4•59『线路2』 +CCTV14少儿,https://cc06.tv12.xyz/15.m3u8$LR•IPV4•59『线路3』 +CCTV14少儿,http://60.16.0.216:5757/hls/15/index.m3u8$LR•IPV4•59『线路4』 +CCTV14少儿,http://zzssw01.55555.io:9901/tsfile/live/0014_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•59『线路5』 +CCTV14少儿,https://event.pull.hebtv.com/jishi/cp2.m3u8$LR•IPV4•59『线路6』 +CCTV14少儿,http://112.27.235.94:8000/hls/15/index.m3u8$LR•IPV4•59『线路7』 +CCTV14少儿,https://cc06.tv12.xyz/15.m3u8$LR•IPV4•59『线路8』 +CCTV14少儿,http://60.16.0.216:5757/hls/15/index.m3u8$LR•IPV4•59『线路9』 +CCTV14少儿,http://zzssw01.55555.io:9901/tsfile/live/0014_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•59『线路10』 +CCTV14少儿,http://106.118.70.125:9901/tsfile/live/0014_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•59『线路11』 +CCTV14少儿,http://1.195.131.143:9901/tsfile/live/1024_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•59『线路12』 +CCTV14少儿,http://61.156.228.12:8154/tsfile/live/0014_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•59『线路13』 +CCTV14少儿,http://101.66.198.42:9901/tsfile/live/0014_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•59『线路14』 +CCTV14少儿,http://123.163.21.101:9901/tsfile/live/0014_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•59『线路15』 +CCTV14少儿,http://101.74.28.84:9901/tsfile/live/0014_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•59『线路16』 +CCTV14少儿,rtsp://103.251.96.71/PLTV/88888888/224/3221225783/10000100000000060000000000726027_0.smil?icpid=SSPID&accounttype=1&limitflux=-1&limitdur=-1&accountinfo=:20240213104135$LR•IPV4•59『线路17』 +CCTV14少儿,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225732$LR•IPV4•59『线路18』 +CCTV14少儿,http://iptv.huuc.edu.cn/hls/cctv14hd.m3u8$LR•IPV4•59『线路19』 +CCTV14少儿,https://www.freetv.top/migu/624878440.m3u8?migutoken=239edad94ac0bbff14f123c7f8996ed7639110bd6cf64ec8ba8cf85842224956d452ec8b683385cb27f8a7685224a03e3aa4d914b8fe33249da9df699351b105c795452d03f2be0a1f1e39adb0$LR•IPV4•59『线路20』 +CCTV14少儿,https://smart.pendy.dpdns.org/Smart.php?id=cctv14$LR•IPV4•59『线路21』 +CCTV14少儿,http://www.freetv.top/migu/624878440.m3u8?migutoken=303d044cf07163e1e2e8e4ecc8b6696ed836301cf573b626d3c00ec50cd362cc5e6a93afc2fd102cb883155554597d14eaa697edc9b0a30e56fc0115f81d8fbb8b87129e5bedad7d2173178f03$LR•IPV4•59『线路22』 +CCTV14少儿,http://yc.myds.me:35455/gaoma/cctv14.m3u8$LR•IPV4•59『线路23』 +CCTV14少儿,http://183.94.1.118:8801/tsfile/live/0014_1.m3u8$LR•IPV4•59『线路24』 +CCTV14少儿,http://113.56.95.69:53765/tsfile/live/0015_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•59『线路25』 +CCTV14少儿,http://123.182.60.29:9002/hls/14/index.m3u8$LR•IPV4•59『线路26』 +CCTV14少儿,http://58.17.48.228:808/hls/14/index.m3u8$LR•IPV4•59『线路27』 +CCTV14少儿,http://61.138.128.226:19901/tsfile/live/0015_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•59『线路28』 +CCTV14少儿,http://222.173.108.238:352/tsfile/live/0014_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•59『线路29』 +CCTV14少儿,http://36.105.100.208:35455/gaoma/cctv14.m3u8$LR•IPV4•59『线路30』 +CCTV14少儿,http://iptv.0564.org:35455/itv/1000000005000265013.m3u8?cdn=ystenlive$LR•IPV4•59『线路31』 +CCTV14少儿,http://mh0.asia:35455/itv/1000000005000265013.m3u8?cdn=ystenlive$LR•IPV4•59『线路32』 +CCTV14少儿,http://3501776.xyz:35455/gaoma/cctv14.m3u8$LR•IPV4•59『线路33』 +CCTV14少儿,http://fm1077.serv00.net/Smart.php?id=cctv14$LR•IPV4•59『线路34』 +CCTV14少儿,http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225732/index.m3u8$LR•IPV6•59『线路35』 +CCTV14少儿,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226229/1.m3u8$LR•IPV6•59『线路36』 +CCTV14少儿,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225732/index.m3u8$LR•IPV6•59『线路37』 +CCTV14少儿,http://101.35.240.114:88/live.php?id=CCTV14$LR•IPV4•59『线路38』 +CCTV14少儿,http://218.13.14.6:60050/tsfile/live/1014_1.m3u8$LR•IPV4•59『线路39』 +CCTV14少儿,http://39.164.160.249:9901/tsfile/live/0014_1.m3u8$LR•IPV4•59『线路40』 +CCTV14少儿,https://cc06.tv12.xyz/15.m3u8$LR•IPV4•59『线路41』 +CCTV14少儿,http://iptv.huuc.edu.cn/hls/cctv14hd.m3u8$LR•IPV4•59『线路42』 +CCTV14少儿,http://ygbh.site/php/bfgd.php?id=132$LR•IPV4•59『线路43』 +CCTV14少儿,https://cc06.tv12.xyz/15.m3u8$LR•IPV4•59『线路44』 +CCTV14少儿,http://112.27.235.94:8000/hls/15/index.m3u8$LR•IPV4•59『线路45』 +CCTV14少儿,http://39.135.133.173/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225732/index.m3u8$LR•IPV4•59『线路46』 +CCTV14少儿,http://t.061899.xyz/tl/dq.php?id=cctv14$LR•IPV4•59『线路47』 +CCTV14少儿,https://zby.130519.xyz/PLTV/11/224/3221225738/index.m3u8$LR•IPV4•59『线路48』 +CCTV14少儿,http://148.135.93.213:81/live.php?id=CCTV14$LR•IPV4•59『线路49』 +CCTV14少儿,https://event.pull.hebtv.com/jishi/cp2.m3u8#rtsp://103.251.96.71/PLTV/88888888/224/3221225783/10000100000000060000000000726027_0.smil?icpid=SSPID&accounttype=1&limitflux=-1&limitdur=-1&accountinfo=:20240213104135$LR•IPV4•59『线路50』 +CCTV14少儿,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225732$LR•IPV4•59『线路51』 +CCTV14少儿,http://iptv.huuc.edu.cn/hls/cctv14hd.m3u8$LR•IPV4•59『线路52』 +CCTV14少儿,https://www.freetv.top/migu/624878440.m3u8?migutoken=239edad94ac0bbff14f123c7f8996ed7639110bd6cf64ec8ba8cf85842224956d452ec8b683385cb27f8a7685224a03e3aa4d914b8fe33249da9df699351b105c795452d03f2be0a1f1e39adb0$LR•IPV4•59『线路53』 +CCTV14少儿,https://smart.pendy.dpdns.org/Smart.php?id=cctv14$LR•IPV4•59『线路54』 +CCTV14少儿,http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225732/index.m3u8$LR•IPV6•59『线路55』 +CCTV14少儿,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226229/1.m3u8$LR•IPV6•59『线路56』 +CCTV14少儿,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225732/index.m3u8$LR•IPV6•59『线路57』 +CCTV14少儿,http://www.freetv.top/migu/624878440.m3u8?migutoken=303d044cf07163e1e2e8e4ecc8b6696ed836301cf573b626d3c00ec50cd362cc5e6a93afc2fd102cb883155554597d14eaa697edc9b0a30e56fc0115f81d8fbb8b87129e5bedad7d2173178f03$LR•IPV4•59『线路58』 +CCTV14少儿,http://yc.myds.me:35455/gaoma/cctv14.m3u8$LR•IPV4•59『线路59』 +CCTV15音乐,http://120.76.248.139/live/bfgd/4200000133.m3u8$LR•IPV4•66『线路1』 +CCTV15音乐,http://112.27.235.94:8000/hls/16/index.m3u8$LR•IPV4•66『线路2』 +CCTV15音乐,https://cc06.tv12.xyz/16.m3u8$LR•IPV4•66『线路3』 +CCTV15音乐,http://zzssw01.55555.io:9901/tsfile/live/0015_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路4』 +CCTV15音乐,http://120.76.248.139/live/bfgd/4200000133.m3u8$LR•IPV4•66『线路5』 +CCTV15音乐,http://112.27.235.94:8000/hls/16/index.m3u8$LR•IPV4•66『线路6』 +CCTV15音乐,https://cc06.tv12.xyz/16.m3u8$LR•IPV4•66『线路7』 +CCTV15音乐,http://zzssw01.55555.io:9901/tsfile/live/0015_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路8』 +CCTV15音乐,http://101.74.28.84:9901/tsfile/live/0015_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路9』 +CCTV15音乐,http://1.195.131.143:9901/tsfile/live/1025_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路10』 +CCTV15音乐,http://61.156.228.12:8154/tsfile/live/0015_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路11』 +CCTV15音乐,http://101.66.198.42:9901/tsfile/live/0015_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•66『线路12』 +CCTV15音乐,http://123.163.21.101:9901/tsfile/live/0015_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路13』 +CCTV15音乐,http://hwrr.jx.chinamobile.com:8080/PLTV/88888888/224/3221225641/index.m3u8$LR•IPV4•66『线路14』 +CCTV15音乐,https://www.freetv.top/migu/673168223.m3u8?migutoken=4e8d5766579c6bef231494cabd07e5b49d965804790214280c9791e4c331fd90311cb62ea43d3a1899229bfa57be4afe5a567b32a6b78153fc9a9801e28a39435e078b48c211e71d6083519be4$LR•IPV4•66『线路15』 +CCTV15音乐,https://smart.pendy.dpdns.org/Smart.php?id=cctv15$LR•IPV4•66『线路16』 +CCTV15音乐,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227175/index.m3u8$LR•IPV4•66『线路17』 +CCTV15音乐,http://yc.myds.me:35455/gaoma/cctv15.m3u8$LR•IPV4•66『线路18』 +CCTV15音乐,https://stream1.freetv.fun/d8c678257099a8f24e3bb33a4f9059014ddf1de229ef366a1870f56c11b57c90.m3u8$LR•IPV4•66『线路19』 +CCTV15音乐,http://lu.wqwqwq.sbs/itv/1000000005000265014.m3u8?cdn=ystenlive$LR•IPV4•66『线路20』 +CCTV15音乐,http://183.94.1.118:8801/tsfile/live/0015_1.m3u8$LR•IPV4•66『线路21』 +CCTV15音乐,http://120.192.226.35:8009/hls/15/index.m3u8$LR•IPV4•66『线路22』 +CCTV15音乐,http://123.182.60.29:9002/hls/15/index.m3u8$LR•IPV4•66『线路23』 +CCTV15音乐,http://61.138.128.226:19901/tsfile/live/0019_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路24』 +CCTV15音乐,http://36.105.100.208:35455/gaoma/cctv15.m3u8$LR•IPV4•66『线路25』 +CCTV15音乐,http://iptv.0564.org:35455/itv/1000000005000265014.m3u8?cdn=ystenlive$LR•IPV4•66『线路26』 +CCTV15音乐,http://mh0.asia:35455/itv/1000000005000265014.m3u8?cdn=ystenlive$LR•IPV4•66『线路27』 +CCTV15音乐,http://3501776.xyz:35455/itv/1000000005000265014.m3u8?cdn=ystenlive$LR•IPV4•66『线路28』 +CCTV15音乐,https://api.olelive.com/dis/live/CCTV15HD/hls.m3u8$LR•IPV4•66『线路29』 +CCTV15音乐,http://60.29.124.66:6080/hls/26/index.m3u8$LR•IPV4•66『线路30』 +CCTV15音乐,http://fm1077.serv00.net/Smart.php?id=cctv15$LR•IPV4•66『线路31』 +CCTV15音乐,http://[2409:8087:1a01:df::4033]:80/TVOD/88888888/224/3221226127/main.m3u8$LR•IPV6•66『线路32』 +CCTV15音乐,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225601/index.m3u8$LR•IPV6•66『线路33』 +CCTV15音乐,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226333/1.m3u8$LR•IPV6•66『线路34』 +CCTV15音乐,http://148.135.93.213/live.php?id=CCTV15$LR•IPV4•66『线路35』 +CCTV15音乐,http://218.13.14.6:60050/tsfile/live/1015_1.m3u8$LR•IPV4•66『线路36』 +CCTV15音乐,http://39.164.160.249:9901/tsfile/live/0015_1.m3u8$LR•IPV4•66『线路37』 +CCTV15音乐,https://cc06.tv12.xyz/16.m3u8$LR•IPV4•66『线路38』 +CCTV15音乐,http://p.ytelc.com/169l/0/cctv.php?id=cctv15$LR•IPV4•66『线路39』 +CCTV15音乐,http://ygbh.site/php/bfgd.php?id=133$LR•IPV4•66『线路40』 +CCTV15音乐,https://cc06.tv12.xyz/16.m3u8$LR•IPV4•66『线路41』 +CCTV15音乐,http://112.27.235.94:8000/hls/16/index.m3u8$LR•IPV4•66『线路42』 +CCTV15音乐,http://39.134.65.87/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225601/index.m3u8$LR•IPV4•66『线路43』 +CCTV15音乐,http://t.061899.xyz/tl/dq.php?id=cctv15$LR•IPV4•66『线路44』 +CCTV15音乐,https://zby.130519.xyz/PLTV/11/224/3221226147/index.m3u8$LR•IPV4•66『线路45』 +CCTV15音乐,http://148.135.93.213:81/live.php?id=CCTV15$LR•IPV4•66『线路46』 +CCTV15音乐,http://hwrr.jx.chinamobile.com:8080/PLTV/88888888/224/3221225641/index.m3u8$LR•IPV4•66『线路47』 +CCTV15音乐,https://www.freetv.top/migu/673168223.m3u8?migutoken=4e8d5766579c6bef231494cabd07e5b49d965804790214280c9791e4c331fd90311cb62ea43d3a1899229bfa57be4afe5a567b32a6b78153fc9a9801e28a39435e078b48c211e71d6083519be4$LR•IPV4•66『线路48』 +CCTV15音乐,https://smart.pendy.dpdns.org/Smart.php?id=cctv15$LR•IPV4•66『线路49』 +CCTV15音乐,http://[2409:8087:1a01:df::4033]:80/TVOD/88888888/224/3221226127/main.m3u8$LR•IPV6•66『线路50』 +CCTV15音乐,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225601/index.m3u8$LR•IPV6•66『线路51』 +CCTV15音乐,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226333/1.m3u8$LR•IPV6•66『线路52』 +CCTV15音乐,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227175/index.m3u8$LR•IPV4•66『线路53』 +CCTV15音乐,http://yc.myds.me:35455/gaoma/cctv15.m3u8$LR•IPV4•66『线路54』 +CCTV15音乐,https://stream1.freetv.fun/d8c678257099a8f24e3bb33a4f9059014ddf1de229ef366a1870f56c11b57c90.m3u8$LR•IPV4•66『线路55』 +CCTV15音乐,http://lu.wqwqwq.sbs/itv/1000000005000265014.m3u8?cdn=ystenlive$LR•IPV4•66『线路56』 +CCTV15音乐,http://hwrr.jx.chinamobile.com:8080/PLTV/88888888/224/3221225641/index.m3u8$LR•IPV4•66『线路57』 +CCTV15音乐,https://www.freetv.top/migu/673168223.m3u8?migutoken=4e8d5766579c6bef231494cabd07e5b49d965804790214280c9791e4c331fd90311cb62ea43d3a1899229bfa57be4afe5a567b32a6b78153fc9a9801e28a39435e078b48c211e71d6083519be4$LR•IPV4•66『线路58』 +CCTV15音乐,https://smart.pendy.dpdns.org/Smart.php?id=cctv15$LR•IPV4•66『线路59』 +CCTV15音乐,http://[2409:8087:1a01:df::4033]:80/TVOD/88888888/224/3221226127/main.m3u8$LR•IPV6•66『线路60』 +CCTV15音乐,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225601/index.m3u8$LR•IPV6•66『线路61』 +CCTV15音乐,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226333/1.m3u8$LR•IPV6•66『线路62』 +CCTV15音乐,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227175/index.m3u8$LR•IPV4•66『线路63』 +CCTV15音乐,http://yc.myds.me:35455/gaoma/cctv15.m3u8$LR•IPV4•66『线路64』 +CCTV15音乐,https://stream1.freetv.fun/d8c678257099a8f24e3bb33a4f9059014ddf1de229ef366a1870f56c11b57c90.m3u8$LR•IPV4•66『线路65』 +CCTV15音乐,http://lu.wqwqwq.sbs/itv/1000000005000265014.m3u8?cdn=ystenlive$LR•IPV4•66『线路66』 +CCTV16奥林匹克,http://livetv.wqwqwq.sbs/gaoma/cctv4k16.m3u8$LR•IPV4•42『线路1』 +CCTV16奥林匹克,http://zqh2333.top:2222/rtp/239.93.55.54:5140$LR•IPV4•42『线路2』 +CCTV16奥林匹克,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226100$LR•IPV4•42『线路3』 +CCTV16奥林匹克,http://yc.myds.me:35455/gaoma/cctv16.m3u8$LR•IPV4•42『线路4』 +CCTV16奥林匹克,http://hwrr.jx.chinamobile.com:8080/PLTV/88888888/224/3221226233/index.m3u8$LR•IPV4•42『线路5』 +CCTV16奥林匹克,https://stream1.freetv.fun/87de3fae6db73a08904421488de7b0ba39e5eccf12a85ec47f8ccfb0985d2fa7.m3u8$LR•IPV4•42『线路6』 +CCTV16奥林匹克,http://58.17.48.228:808/hls/25/index.m3u8$LR•IPV4•42『线路7』 +CCTV16奥林匹克,http://36.105.100.208:35455/gaoma/cctv16.m3u8$LR•IPV4•42『线路8』 +CCTV16奥林匹克,http://iptv.0564.org:35455/itv/1000000006000233002.m3u8?cdn=ystenlive$LR•IPV4•42『线路9』 +CCTV16奥林匹克,http://mh0.asia:35455/itv/1000000006000233002.m3u8?cdn=ystenlive$LR•IPV4•42『线路10』 +CCTV16奥林匹克,http://xxx.504900.xyz:35455/itv/1000000006000233002.m3u8?cdn=ystenlive$LR•IPV4•42『线路11』 +CCTV16奥林匹克,https://api.olelive.com/dis/live/CCTV16HD/hls.m3u8$LR•IPV4•42『线路12』 +CCTV16奥林匹克,http://211.101.234.24:866/aishang/migu.php/migu.php?id=cctv16$LR•IPV4•42『线路13』 +CCTV16奥林匹克,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=4332&tk=23a9aca1f79f$LR•IPV4•42『线路14』 +CCTV16奥林匹克,http://58.221.214.82:9901/tsfile/live/0002_2.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•42『线路15』 +CCTV16奥林匹克,http://219.135.180.210:18888/hls/31/index.m3u8$LR•IPV4•42『线路16』 +CCTV16奥林匹克,http://fm1077.serv00.net/Smart.php?id=cctv16$LR•IPV4•42『线路17』 +CCTV16奥林匹克,http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/yinhe/88888888/224/3221226100/index.m3u8$LR•IPV6•42『线路18』 +CCTV16奥林匹克,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226887/1.m3u8$LR•IPV6•42『线路19』 +CCTV16奥林匹克,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226100/index.m3u8$LR•IPV6•42『线路20』 +CCTV16奥林匹克,http://[2409:8087:74f0:22::4]:6410/270000001128/9900000016/index.m3u8$LR•IPV6•42『线路21』 +CCTV16奥林匹克,http://101.35.240.114:88/live.php?id=CCTV16$LR•IPV4•42『线路22』 +CCTV16奥林匹克,http://www.lizhinas.top:1009/rtp/239.252.220.237:5140$LR•IPV4•42『线路23』 +CCTV16奥林匹克,http://livetv.wqwqwq.sbs/gaoma/cctv4k16.m3u8$LR•IPV4•42『线路24』 +CCTV16奥林匹克,http://p.ytelc.com/169l/0/cctv.php?id=cctv16$LR•IPV4•42『线路25』 +CCTV16奥林匹克,http://p.ytelc.com/169l/0/cctv.php?id=cctv16$LR•IPV4•42『线路26』 +CCTV16奥林匹克,http://p.ytelc.com/169l/0/cctv.php?id=cctv16$LR•IPV4•42『线路27』 +CCTV16奥林匹克,http://39.135.133.139/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226100/index.m3u8$LR•IPV4•42『线路28』 +CCTV16奥林匹克,http://t.061899.xyz/tl/dq.php?id=cctv16$LR•IPV4•42『线路29』 +CCTV16奥林匹克,https://zby.130519.xyz/PLTV/11/224/3221226120/index.m3u8$LR•IPV4•42『线路30』 +CCTV16奥林匹克,http://148.135.93.213:81/live.php?id=CCTV16$LR•IPV4•42『线路31』 +CCTV16奥林匹克,http://zqh2333.top:2222/rtp/239.93.55.54:5140$LR•IPV4•42『线路32』 +CCTV16奥林匹克,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226100$LR•IPV4•42『线路33』 +CCTV16奥林匹克,http://livetv.wqwqwq.sbs/gaoma/cctv4k16.m3u8$LR•IPV4•42『线路34』 +CCTV16奥林匹克,http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/yinhe/88888888/224/3221226100/index.m3u8$LR•IPV6•42『线路35』 +CCTV16奥林匹克,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226887/1.m3u8$LR•IPV6•42『线路36』 +CCTV16奥林匹克,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226100/index.m3u8$LR•IPV6•42『线路37』 +CCTV16奥林匹克,http://[2409:8087:74f0:22::4]:6410/270000001128/9900000016/index.m3u8$LR•IPV6•42『线路38』 +CCTV16奥林匹克,http://yc.myds.me:35455/gaoma/cctv16.m3u8$LR•IPV4•42『线路39』 +CCTV16奥林匹克,http://hwrr.jx.chinamobile.com:8080/PLTV/88888888/224/3221226233/index.m3u8$LR•IPV4•42『线路40』 +CCTV16奥林匹克,https://stream1.freetv.fun/87de3fae6db73a08904421488de7b0ba39e5eccf12a85ec47f8ccfb0985d2fa7.m3u8$LR•IPV4•42『线路41』 +CCTV16奥林匹克,http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226921/index.m3u8$LR•IPV4•42『线路42』 +CCTV17农业农村,http://120.76.248.139/live/bfgd/4200000204.m3u8$LR•IPV4•48『线路1』 +CCTV17农业农村,http://120.76.248.139/live/bfgd/4200000204.m3u8$LR•IPV4•48『线路2』 +CCTV17农业农村,http://61.156.228.12:8154/tsfile/live/0019_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•48『线路3』 +CCTV17农业农村,http://101.74.28.84:9901/tsfile/live/1009_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•48『线路4』 +CCTV17农业农村,http://zqh2333.top:2222/rtp/239.93.24.92:5140$LR•IPV4•48『线路5』 +CCTV17农业农村,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225765$LR•IPV4•48『线路6』 +CCTV17农业农村,https://www.freetv.top/migu/673168256.m3u8?migutoken=e7dc493273bb331a8b7e0d3c475924ad4706b90f18fd4775c1c134103274e9ad9d59015289e02877b65420a149fcae4f793ded0177cc600ac79d9a95a234e4a8db198072e6973c4a14c05c9dc6$LR•IPV4•48『线路7』 +CCTV17农业农村,http://yc.myds.me:35455/gaoma/cctv17.m3u8$LR•IPV4•48『线路8』 +CCTV17农业农村,http://nas.suntao.online:35455/itv/1000000005000265015.m3u8?cdn=ystenlive$LR•IPV4•48『线路9』 +CCTV17农业农村,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227188/index.m3u8$LR•IPV4•48『线路10』 +CCTV17农业农村,http://36.105.100.208:35455/gaoma/cctv17.m3u8$LR•IPV4•48『线路11』 +CCTV17农业农村,http://iptv.0564.org:35455/itv/1000000005000265015.m3u8?cdn=ystenlive$LR•IPV4•48『线路12』 +CCTV17农业农村,http://mh0.asia:35455/itv/1000000005000265015.m3u8?cdn=ystenlive$LR•IPV4•48『线路13』 +CCTV17农业农村,http://3501776.xyz:35455/itv/1000000005000265015.m3u8?cdn=ystenlive$LR•IPV4•48『线路14』 +CCTV17农业农村,https://api.olelive.com/dis/live/CCTV17HD/hls.m3u8$LR•IPV4•48『线路15』 +CCTV17农业农村,http://113.118.15.210:808/hls/35/index.m3u8$LR•IPV4•48『线路16』 +CCTV17农业农村,http://211.101.234.24:866/aishang/migu.php/migu.php?id=cctv17$LR•IPV4•48『线路17』 +CCTV17农业农村,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=4821&tk=23a9aca1f79f$LR•IPV4•48『线路18』 +CCTV17农业农村,http://120.238.94.10:9901/tsfile/live/1048_1.m3u8$LR•IPV4•48『线路19』 +CCTV17农业农村,http://58.19.43.46:9901/tsfile/live/1047_1.m3u8$LR•IPV4•48『线路20』 +CCTV17农业农村,http://fm1077.serv00.net/Smart.php?id=cctv17$LR•IPV4•48『线路21』 +CCTV17农业农村,http://[2409:8087:1a01:df::4025]:80/TVOD/88888888/224/3221225708/main.m3u8$LR•IPV6•48『线路22』 +CCTV17农业农村,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225765/1.m3u8?icpid=88888888&from=1&hms_devid=1012&vqe=3$LR•IPV6•48『线路23』 +CCTV17农业农村,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226318/1.m3u8$LR•IPV6•48『线路24』 +CCTV17农业农村,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225765/index.m3u8$LR•IPV6•48『线路25』 +CCTV17农业农村,http://148.135.93.213/live.php?id=CCTV17$LR•IPV4•48『线路26』 +CCTV17农业农村,http://tv.20191209.xyz:37377/migu/673168256.m3u8?migutoken=eb3fbda758006d66837b5b6ef1b7ab6847a99f05f6b3303861d81e6e1335349499a40c8479d9a801327519db10547f9870398da6796159db51812e236c1b6c07d2c0f7e5bc32101c9cc222dc$LR•IPV4•48『线路27』 +CCTV17农业农村,http://58.57.40.22:9901/tsfile/live/0019_1.m3u8$LR•IPV4•48『线路28』 +CCTV17农业农村,https://cc06.tv12.xyz/17.m3u8$LR•IPV4•48『线路29』 +CCTV17农业农村,http://183.196.25.171:808/hls/93/index.m3u8$LR•IPV4•48『线路30』 +CCTV17农业农村,http://p.ytelc.com/169l/0/cctv.php?id=cctv17$LR•IPV4•48『线路31』 +CCTV17农业农村,http://ygbh.site/php/bfgd.php?id=204$LR•IPV4•48『线路32』 +CCTV17农业农村,https://cc06.tv12.xyz/17.m3u8$LR•IPV4•48『线路33』 +CCTV17农业农村,http://39.135.135.88/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225765/index.m3u8$LR•IPV4•48『线路34』 +CCTV17农业农村,http://t.061899.xyz/tl/dq.php?id=cctv17$LR•IPV4•48『线路35』 +CCTV17农业农村,http://p.ytelc.com/169l/0/cctv.php?id=cctv17$LR•IPV4•48『线路36』 +CCTV17农业农村,http://148.135.93.213:81/live.php?id=CCTV17$LR•IPV4•48『线路37』 +CCTV17农业农村,http://zqh2333.top:2222/rtp/239.93.24.92:5140$LR•IPV4•48『线路38』 +CCTV17农业农村,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225765$LR•IPV4•48『线路39』 +CCTV17农业农村,http://[2409:8087:1a01:df::4025]:80/TVOD/88888888/224/3221225708/main.m3u8$LR•IPV6•48『线路40』 +CCTV17农业农村,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225765/1.m3u8?icpid=88888888&from=1&hms_devid=1012&vqe=3$LR•IPV6•48『线路41』 +CCTV17农业农村,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226318/1.m3u8$LR•IPV6•48『线路42』 +CCTV17农业农村,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225765/index.m3u8$LR•IPV6•48『线路43』 +CCTV17农业农村,https://www.freetv.top/migu/673168256.m3u8?migutoken=e7dc493273bb331a8b7e0d3c475924ad4706b90f18fd4775c1c134103274e9ad9d59015289e02877b65420a149fcae4f793ded0177cc600ac79d9a95a234e4a8db198072e6973c4a14c05c9dc6$LR•IPV4•48『线路44』 +CCTV17农业农村,http://yc.myds.me:35455/gaoma/cctv17.m3u8$LR•IPV4•48『线路45』 +CCTV17农业农村,http://nas.suntao.online:35455/itv/1000000005000265015.m3u8?cdn=ystenlive$LR•IPV4•48『线路46』 +CCTV17农业农村,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227188/index.m3u8$LR•IPV4•48『线路47』 +CCTV17农业农村,https://stream1.freetv.fun/b6866815f985fb51d1a8c195ef73afbd858d740c62358e35b9f665896b40dd91.m3u8$LR•IPV4•48『线路48』 +CCTV4K超高清,http://p.ytelc.com/169l/0/cctv.php?id=cctv4k$LR•IPV4 +CGTN英语,https://0472.org/hls/cgtn.m3u8$LR•IPV4•11『线路1』 +CGTN英语,https://0472.org/hls/cgtn.m3u8$LR•IPV4•11『线路2』 +CGTN英语,http://fm1077.serv00.net/Smart.php?id=CGTN$LR•IPV4•11『线路3』 +CGTN英语,https://live.mxdyeah.top/live.php?id=cgtnSD$LR•IPV4•11『线路4』 +CGTN英语,http://english-livetx.cgtn.com/hls/yypdyyctzb_hd.m3u8$LR•IPV4•11『线路5』 +CGTN英语,https://0472.org/hls/cgtn.m3u8$LR•IPV4•11『线路6』 +CGTN英语,https://0472.org/hls/cgtn.m3u8$LR•IPV4•11『线路7』 +CGTN英语,http://112.27.235.94:8000/hls/17/index.m3u8$LR•IPV4•11『线路8』 +CGTN英语,http://mg.hmysapp.cn:177/ckmg/zb.php?id=cgtn$LR•IPV4•11『线路9』 +CGTN英语,http://t.061899.xyz/tl/dq.php?id=cgtn$LR•IPV4•11『线路10』 +CGTN英语,https://0472.org/hls/cgtn.m3u8$LR•IPV4•11『线路11』 +CGTN纪录,https://0472.org/hls/cgtnd.m3u8$LR•IPV4•5『线路1』 +CGTN纪录,https://0472.org/hls/cgtnd.m3u8$LR•IPV4•5『线路2』 +CGTN纪录,http://mg.hmysapp.cn:177/ckmg/zb.php?id=cgtnjl$LR•IPV4•5『线路3』 +CGTN纪录,http://t.061899.xyz/tl/dq.php?id=cgtnjl$LR•IPV4•5『线路4』 +CGTN纪录,https://0472.org/hls/cgtnd.m3u8$LR•IPV4•5『线路5』 +CGTN俄语,https://0472.org/hls/cgtne.m3u8$LR•IPV4•5『线路1』 +CGTN俄语,https://0472.org/hls/cgtne.m3u8$LR•IPV4•5『线路2』 +CGTN俄语,http://russian-livews.cgtn.com/hls/LSvexABhNipibK5KRuUkvHZ7220802LSTeze9o8tdFXMHsb1VosgoT220802cd.m3u8$LR•IPV4•5『线路3』 +CGTN俄语,https://0472.org/hls/cgtne.m3u8$LR•IPV4•5『线路4』 +CGTN俄语,https://0472.org/hls/cgtne.m3u8$LR•IPV4•5『线路5』 +CGTN法语,https://0472.org/hls/cgtnf.m3u8$LR•IPV4•5『线路1』 +CGTN法语,https://0472.org/hls/cgtnf.m3u8$LR•IPV4•5『线路2』 +CGTN法语,http://espanol-liveali.cgtn.com/hls/LSveOGBaBw41Ea7ukkVAUdKQ220802LSTexu6xAuFH8VZNBLE1ZNEa220802cd.m3u8$LR•IPV4•5『线路3』 +CGTN法语,https://0472.org/hls/cgtnf.m3u8$LR•IPV4•5『线路4』 +CGTN法语,https://0472.org/hls/cgtnf.m3u8$LR•IPV4•5『线路5』 +CGTN西语,https://0472.org/hls/cgtnx.m3u8$LR•IPV4•4『线路1』 +CGTN西语,https://0472.org/hls/cgtnx.m3u8$LR•IPV4•4『线路2』 +CGTN西语,https://0472.org/hls/cgtnx.m3u8$LR•IPV4•4『线路3』 +CGTN西语,https://0472.org/hls/cgtnx.m3u8$LR•IPV4•4『线路4』 +CGTN阿语,https://0472.org/hls/cgtna.m3u8$LR•IPV4•4『线路1』 +CGTN阿语,https://0472.org/hls/cgtna.m3u8$LR•IPV4•4『线路2』 +CGTN阿语,https://0472.org/hls/cgtna.m3u8$LR•IPV4•4『线路3』 +CGTN阿语,https://0472.org/hls/cgtna.m3u8$LR•IPV4•4『线路4』 + +卫视频道,#genre# +湖南卫视,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•66『线路1』 +湖南卫视,http://120.76.248.139/live/bfgd/4200000086.m3u8$LR•IPV4•66『线路2』 +湖南卫视,http://61.163.181.78:85/tsfile/live/1045_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路3』 +湖南卫视,http://183.215.134.239:19901/tsfile/live/0128_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路4』 +湖南卫视,http://112.27.235.94:8000/hls/31/index.m3u8$LR•IPV4•66『线路5』 +湖南卫视,https://cc06.tv12.xyz/57.m3u8$LR•IPV4•66『线路6』 +湖南卫视,http://120.76.248.139/live/bfgd/4200000086.m3u8$LR•IPV4•66『线路7』 +湖南卫视,http://61.163.181.78:85/tsfile/live/1045_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路8』 +湖南卫视,http://183.215.134.239:19901/tsfile/live/0128_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路9』 +湖南卫视,http://112.27.235.94:8000/hls/31/index.m3u8$LR•IPV4•66『线路10』 +湖南卫视,https://cc06.tv12.xyz/57.m3u8$LR•IPV4•66『线路11』 +湖南卫视,http://1.195.131.143:9901/tsfile/live/0128_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路12』 +湖南卫视,http://101.74.28.84:9901/tsfile/live/0128_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路13』 +湖南卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010058$LR•IPV4•66『线路14』 +湖南卫视,http://z.b.bkpcp.top/m.php?id=hunws$LR•IPV4•66『线路15』 +湖南卫视,http://j.x.bkpcp.top/jx/HUNANHD$LR•IPV4•66『线路16』 +湖南卫视,http://iptv.huuc.edu.cn/hls/hunanhd.m3u8$LR•IPV4•66『线路17』 +湖南卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003873458.m3u8$LR•IPV4•66『线路18』 +湖南卫视,http://183.94.1.118:8801/tsfile/live/0128_1.m3u8$LR•IPV4•66『线路19』 +湖南卫视,http://120.192.226.35:8009/hls/32/index.m3u8$LR•IPV4•66『线路20』 +湖南卫视,http://175.31.21.146:4480/hls/36/index.m3u8$LR•IPV4•66『线路21』 +湖南卫视,http://113.56.95.69:53765/tsfile/live/1004_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路22』 +湖南卫视,http://58.17.48.228:808/hls/31/index.m3u8$LR•IPV4•66『线路23』 +湖南卫视,http://61.138.128.226:19901/tsfile/live/0128_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路24』 +湖南卫视,http://36.105.100.208:35455/itv/1000000005000265024.m3u8?cdn=ystenlive$LR•IPV4•66『线路25』 +湖南卫视,http://iptv.0564.org:35455/itv/1000000005000265024.m3u8?cdn=ystenlive$LR•IPV4•66『线路26』 +湖南卫视,http://mh0.asia:35455/itv/1000000005000265024.m3u8?cdn=ystenlive$LR•IPV4•66『线路27』 +湖南卫视,http://xxx.504900.xyz:35455/itv/1000000005000265024.m3u8?cdn=ystenlive$LR•IPV4•66『线路28』 +湖南卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225610/index.m3u8$LR•IPV6•66『线路29』 +湖南卫视,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•66『线路30』 +湖南卫视,http://[2409:8087:1e03:21::42]:6610/cms001/ch00000090990000001026/index.m3u8$LR•IPV6•66『线路31』 +湖南卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001026/index.m3u8$LR•IPV6•66『线路32』 +湖南卫视,http://[2409:8087:4402:20:1:1216:401:3b]/iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226659/index.m3u8$LR•IPV6•66『线路33』 +湖南卫视,https://live.mxdyeah.top/live.php?id=hunanHD$LR•IPV4•66『线路34』 +湖南卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225610/index.m3u8$LR•IPV4•66『线路35』 +湖南卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226307/index.m3u8$LR•IPV4•66『线路36』 +湖南卫视,http://k.061899.xyz/m.php?id=hunws$LR•IPV4•66『线路37』 +湖南卫视,http://t.061899.xyz/tl/tl.php?id=hunws$LR•IPV4•66『线路38』 +湖南卫视,http://sh.lnott.top:880/dx31.m3u8$LR•IPV4•66『线路39』 +湖南卫视,http://39.134.67.108/PLTV/88888888/224/3221226000/1.m3u8$LR•IPV4•66『线路40』 +湖南卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226307$LR•IPV4•66『线路41』 +湖南卫视,http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/hunanHD/__op/default/__f/index.m3u8$LR•IPV4•66『线路42』 +湖南卫视,http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/hunanHD/__op/default/__f/index.m3u8$LR•IPV4•66『线路43』 +湖南卫视,http://101.35.240.114:88/live.php?id=湖南卫视$LR•IPV4•66『线路44』 +湖南卫视,http://home.wwang.pw:35455/itv/1000000005000265024.m3u8?cdn=ystenlive$LR•IPV4•66『线路45』 +湖南卫视,http://39.164.160.249:9901/tsfile/live/0128_1.m3u8$LR•IPV4•66『线路46』 +湖南卫视,http://120.196.232.43:8088/rrs03.hw.gmcc.net/PLTV/651/224/3221226698/1.m3u8$LR•IPV4•66『线路47』 +湖南卫视,http://iptv.huuc.edu.cn/hls/hunanhd.m3u8$LR•IPV4•66『线路48』 +湖南卫视,http://ygbh.site/php/bfgd.php?id=086$LR•IPV4•66『线路49』 +湖南卫视,https://cc06.tv12.xyz/57.m3u8$LR•IPV4•66『线路50』 +湖南卫视,http://112.27.235.94:8000/hls/31/index.m3u8$LR•IPV4•66『线路51』 +湖南卫视,http://39.134.65.71/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225610/index.m3u8$LR•IPV4•66『线路52』 +湖南卫视,http://mg.hmysapp.cn:177/ckmg/zb.php?id=hunws$LR•IPV4•66『线路53』 +湖南卫视,http://t.061899.xyz/tl/dq.php?id=hunws$LR•IPV4•66『线路54』 +湖南卫视,https://zby.130519.xyz/PLTV/11/224/3221225726/index.m3u8$LR•IPV4•66『线路55』 +湖南卫视,http://148.135.93.213:81/live.php?id=湖南卫视$LR•IPV4•66『线路56』 +湖南卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010058$LR•IPV4•66『线路57』 +湖南卫视,http://z.b.bkpcp.top/m.php?id=hunws$LR•IPV4•66『线路58』 +湖南卫视,http://j.x.bkpcp.top/jx/HUNANHD$LR•IPV4•66『线路59』 +湖南卫视,http://iptv.huuc.edu.cn/hls/hunanhd.m3u8$LR•IPV4•66『线路60』 +湖南卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003873458.m3u8$LR•IPV4•66『线路61』 +湖南卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225610/index.m3u8$LR•IPV6•66『线路62』 +湖南卫视,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•66『线路63』 +湖南卫视,http://[2409:8087:1e03:21::42]:6610/cms001/ch00000090990000001026/index.m3u8$LR•IPV6•66『线路64』 +湖南卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001026/index.m3u8$LR•IPV6•66『线路65』 +湖南卫视,http://[2409:8087:4402:20:1:1216:401:3b]/iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226659/index.m3u8$LR•IPV6•66『线路66』 +浙江卫视,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•85『线路1』 +浙江卫视,http://ali-m-l.cztv.com:80/channels/lantian/channel001/1080p.m3u8$LR•IPV4•85『线路2』 +浙江卫视,https://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8$LR•IPV4•85『线路3』 +浙江卫视,http://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8$LR•IPV4•85『线路4』 +浙江卫视,http://183.215.134.239:19901/tsfile/live/0124_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•85『线路5』 +浙江卫视,http://ali-m-l.cztv.com/channels/lantian/channel01/1080p.m3u8$LR•IPV4•85『线路6』 +浙江卫视,http://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8$LR•IPV4•85『线路7』 +浙江卫视,http://ali-m-l.cztv.com:80/channels/lantian/channel001/1080p.m3u8$LR•IPV4•85『线路8』 +浙江卫视,http://8.138.7.223/tv/zjws.m3u8$LR•IPV4•85『线路9』 +浙江卫视,https://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8$LR•IPV4•85『线路10』 +浙江卫视,https://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8?$LR•IPV4•85『线路11』 +浙江卫视,https://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8?$LR•IPV4•85『线路12』 +浙江卫视,http://183.215.134.239:19901/tsfile/live/0124_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•85『线路13』 +浙江卫视,http://112.27.235.94:8000/hls/29/index.m3u8$LR•IPV4•85『线路14』 +浙江卫视,http://zzssw01.55555.io:9901/tsfile/live/0124_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•85『线路15』 +浙江卫视,http://ali-m-l.cztv.com:80/channels/lantian/channel001/1080p.m3u8$LR•IPV4•85『线路16』 +浙江卫视,https://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8$LR•IPV4•85『线路17』 +浙江卫视,http://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8$LR•IPV4•85『线路18』 +浙江卫视,http://183.215.134.239:19901/tsfile/live/0124_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•85『线路19』 +浙江卫视,http://ali-m-l.cztv.com/channels/lantian/channel01/1080p.m3u8$LR•IPV4•85『线路20』 +浙江卫视,http://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8$LR•IPV4•85『线路21』 +浙江卫视,http://ali-m-l.cztv.com:80/channels/lantian/channel001/1080p.m3u8$LR•IPV4•85『线路22』 +浙江卫视,http://8.138.7.223/tv/zjws.m3u8$LR•IPV4•85『线路23』 +浙江卫视,https://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8$LR•IPV4•85『线路24』 +浙江卫视,https://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8?$LR•IPV4•85『线路25』 +浙江卫视,https://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8?$LR•IPV4•85『线路26』 +浙江卫视,http://183.215.134.239:19901/tsfile/live/0124_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•85『线路27』 +浙江卫视,http://112.27.235.94:8000/hls/29/index.m3u8$LR•IPV4•85『线路28』 +浙江卫视,http://zzssw01.55555.io:9901/tsfile/live/0124_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•85『线路29』 +浙江卫视,http://101.66.198.42:9901/tsfile/live/0124_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•85『线路30』 +浙江卫视,http://101.74.28.84:9901/tsfile/live/0124_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•85『线路31』 +浙江卫视,http://l.cztvcloud.com/channels/lantian/SXpinghu3/720p.m3u8$LR•IPV4•85『线路32』 +浙江卫视,http://ali-vl.cztv.com/channels/lantian/channel001/360p.m3u8$LR•IPV4•85『线路33』 +浙江卫视,http://ali-m-l.cztv.com/channels/lantian/channel01/1080p.m3u8$LR•IPV4•85『线路34』 +浙江卫视,http://zwebl02.cztv.com/live/channel011080P.m3u8?auth_key=2524708799-0-0-9a1229d8b9d311024ebea08c3fb1d63f$LR•IPV4•85『线路35』 +浙江卫视,http://zhfivel02.cztv.com/channel01/1080p.m3u8?auth_key=2524708799-0-0-adde67b1b344fdd5e512f30a4ae31915$LR•IPV4•85『线路36』 +浙江卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010070$LR•IPV4•85『线路37』 +浙江卫视,http://z.b.bkpcp.top/m.php?id=zjws$LR•IPV4•85『线路38』 +浙江卫视,http://goo.bkpcp.top/mg/zjws$LR•IPV4•85『线路39』 +浙江卫视,http://iptv.huuc.edu.cn/hls/zjhd.m3u8$LR•IPV4•85『线路40』 +浙江卫视,http://ikuai.zlsip.top:4022/rtp/239.3.1.137:8036$LR•IPV4•85『线路41』 +浙江卫视,http://183.94.1.118:8801/tsfile/live/0124_1.m3u8$LR•IPV4•85『线路42』 +浙江卫视,http://120.192.226.35:8009/hls/34/index.m3u8$LR•IPV4•85『线路43』 +浙江卫视,http://175.31.21.146:4480/hls/28/index.m3u8$LR•IPV4•85『线路44』 +浙江卫视,http://113.56.95.69:53765/tsfile/live/1005_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•85『线路45』 +浙江卫视,http://cssbyd.imwork.net:8082/hls/22/index.m3u8$LR•IPV4•85『线路46』 +浙江卫视,http://58.17.48.228:808/hls/32/index.m3u8$LR•IPV4•85『线路47』 +浙江卫视,http://61.138.128.226:19901/tsfile/live/1044_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•85『线路48』 +浙江卫视,http://36.105.100.208:35455/itv/1000000005000265031.m3u8?cdn=ystenlive$LR•IPV4•85『线路49』 +浙江卫视,http://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8$LR•IPV4•85『线路50』 +浙江卫视,https://live.mxdyeah.top/live.php?id=zhejiangHD$LR•IPV4•85『线路51』 +浙江卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225612/index.m3u8$LR•IPV4•85『线路52』 +浙江卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226339/index.m3u8$LR•IPV4•85『线路53』 +浙江卫视,http://k.061899.xyz/m.php?id=zjws$LR•IPV4•85『线路54』 +浙江卫视,http://t.061899.xyz/tl/tl.php?id=zjws$LR•IPV4•85『线路55』 +浙江卫视,http://sh.lnott.top:880/dx32.m3u8$LR•IPV4•85『线路56』 +浙江卫视,http://39.134.67.108/PLTV/88888888/224/3221225959/1.m3u8$LR•IPV4•85『线路57』 +浙江卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226339$LR•IPV4•85『线路58』 +浙江卫视,http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/zhejiangHD/__op/default/__f/index.m3u8$LR•IPV4•85『线路59』 +浙江卫视,http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/zhejiangHD/__op/default/__f/index.m3u8$LR•IPV4•85『线路60』 +浙江卫视,http://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8$LR•IPV4•85『线路61』 +浙江卫视,http://101.35.240.114:88/live.php?id=浙江卫视$LR•IPV4•85『线路62』 +浙江卫视,http://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8$LR•IPV4•85『线路63』 +浙江卫视,http://home.wwang.pw:35455/itv/1000000005000265031.m3u8?cdn=ystenlive$LR•IPV4•85『线路64』 +浙江卫视,http://58.57.40.22:9901/tsfile/live/1029_1.m3u8$LR•IPV4•85『线路65』 +浙江卫视,http://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8$LR•IPV4•85『线路66』 +浙江卫视,http://iptv.huuc.edu.cn/hls/zjhd.m3u8$LR•IPV4•85『线路67』 +浙江卫视,http://ygbh.site/php/bfgd.php?id=094$LR•IPV4•85『线路68』 +浙江卫视,https://cc06.tv12.xyz/117.m3u8$LR•IPV4•85『线路69』 +浙江卫视,http://112.27.235.94:8000/hls/29/index.m3u8$LR•IPV4•85『线路70』 +浙江卫视,http://39.134.65.71/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225612/index.m3u8$LR•IPV4•85『线路71』 +浙江卫视,http://t.061899.xyz/tl/dq.php?id=zjws$LR•IPV4•85『线路72』 +浙江卫视,https://zby.130519.xyz/PLTV/11/224/3221225727/index.m3u8$LR•IPV4•85『线路73』 +浙江卫视,http://148.135.93.213:81/live.php?id=浙江卫视$LR•IPV4•85『线路74』 +浙江卫视,http://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8$LR•IPV4•85『线路75』 +浙江卫视,http://zwebl02.cztv.com/live/channel011080P.m3u8?auth_key=2524708799-0-0-9a1229d8b9d311024ebea08c3fb1d63f$LR•IPV4•85『线路76』 +浙江卫视,http://zhfivel02.cztv.com/channel01/1080p.m3u8?auth_key=2524708799-0-0-adde67b1b344fdd5e512f30a4ae31915$LR•IPV4•85『线路77』 +浙江卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010070$LR•IPV4•85『线路78』 +浙江卫视,http://z.b.bkpcp.top/m.php?id=zjws$LR•IPV4•85『线路79』 +浙江卫视,https://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8$LR•IPV4•85『线路80』 +浙江卫视,http://goo.bkpcp.top/mg/zjws$LR•IPV4•85『线路81』 +浙江卫视,http://l.cztvcloud.com/channels/lantian/SXpinghu3/720p.m3u8$LR•IPV4•85『线路82』 +浙江卫视,http://iptv.huuc.edu.cn/hls/zjhd.m3u8$LR•IPV4•85『线路83』 +浙江卫视,http://ikuai.zlsip.top:4022/rtp/239.3.1.137:8036$LR•IPV4•85『线路84』 +浙江卫视,http://ali-vl.cztv.com/channels/lantian/channel001/360p.m3u8$LR•IPV4•85『线路85』 +东方卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226898/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E0uh4lyjjBCCN7TCq21vSIQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•62『线路1』 +东方卫视,http://183.215.134.239:19901/tsfile/live/0107_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•62『线路2』 +东方卫视,https://cc06.tv12.xyz/37.m3u8$LR•IPV4•62『线路3』 +东方卫视,http://183.215.134.239:19901/tsfile/live/0107_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•62『线路4』 +东方卫视,https://cc06.tv12.xyz/37.m3u8$LR•IPV4•62『线路5』 +东方卫视,http://106.118.70.125:9901/tsfile/live/0107_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•62『线路6』 +东方卫视,http://101.74.28.84:9901/tsfile/live/0107_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•62『线路7』 +东方卫视,http://1.195.131.143:9901/tsfile/live/0107_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•62『线路8』 +东方卫视,http://101.66.198.42:9901/tsfile/live/0018_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•62『线路9』 +东方卫视,http://61.156.228.12:8154/tsfile/live/0107_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•62『线路10』 +东方卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010054$LR•IPV4•62『线路11』 +东方卫视,http://z.b.bkpcp.top/m.php?id=dfws$LR•IPV4•62『线路12』 +东方卫视,rtsp://115.85.232.19/PLTV/88888910/224/3221225531/10000100000000060000000000107311_0.smil$LR•IPV4•62『线路13』 +东方卫视,http://goo.bkpcp.top/mg/dfws$LR•IPV4•62『线路14』 +东方卫视,http://iptv.huuc.edu.cn/hls/dfhd.m3u8$LR•IPV4•62『线路15』 +东方卫视,https://www.freetv.top/migu/651632648.m3u8?migutoken=67b4219a3e6acdcf288118ed6bf84d3197052966f0bc854079b6038b3fca6437744ca78bb0ea1fad6f61b4c73d0df57bd8b539ec247fd28ce16d1375716bbf774ea19c99e4585bb828fa3851c0$LR•IPV4•62『线路16』 +东方卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003873462.m3u8$LR•IPV4•62『线路17』 +东方卫视,https://bp-cdn-ali.bestv.cn/enhance/bestvdfws_enhance.m3u8?auth_key=1746334807-ddb61092a75249868c8bd1834313f437-0-8a760296d281d86bc4612f5fc4f85247$LR•IPV4•62『线路18』 +东方卫视,https://live.lalifeier.eu.org/kankanews/dfws.m3u8?t=1746372302&key=04c79ed1fd72dbd3188040c54dc3858b$LR•IPV4•62『线路19』 +东方卫视,http://183.94.1.118:8801/tsfile/live/0107_1.m3u8$LR•IPV4•62『线路20』 +东方卫视,http://120.192.226.35:8009/hls/31/index.m3u8$LR•IPV4•62『线路21』 +东方卫视,http://113.56.95.69:53765/tsfile/live/1007_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•62『线路22』 +东方卫视,http://36.32.174.67:60080/newlive/live/hls/24/live.m3u8$LR•IPV4•62『线路23』 +东方卫视,http://61.138.128.226:19901/tsfile/live/0107_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•62『线路24』 +东方卫视,http://36.105.100.208:35455/itv/1000000005000265018.m3u8?cdn=ystenlive$LR•IPV4•62『线路25』 +东方卫视,http://iptv.0564.org:35455/itv/1000000005000265018.m3u8?cdn=ystenlive$LR•IPV4•62『线路26』 +东方卫视,http://mh0.asia:35455/itv/1000000005000265018.m3u8?cdn=ystenlive$LR•IPV4•62『线路27』 +东方卫视,http://3501776.xyz:35455/itv/1000000005000265018.m3u8?cdn=ystenlive$LR•IPV4•62『线路28』 +东方卫视,http://150.158.112.123/%E5%85%AC%E4%BC%97%E5%8F%B7~%E7%8E%89%E7%8E%89%E8%BD%AF%E4%BB%B6%E5%BA%93/mg.php?id=dfws$LR•IPV4•62『线路29』 +东方卫视,http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/yinhe/88888888/224/3221226345/index.m3u8$LR•IPV6•62『线路30』 +东方卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226345/index.m3u8$LR•IPV6•62『线路31』 +东方卫视,https://live.mxdyeah.top/live.php?id=shanghaiHD$LR•IPV4•62『线路32』 +东方卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225735/index.m3u8$LR•IPV4•62『线路33』 +东方卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226345/index.m3u8$LR•IPV4•62『线路34』 +东方卫视,http://k.061899.xyz/m.php?id=dfws$LR•IPV4•62『线路35』 +东方卫视,http://t.061899.xyz/tl/tl.php?id=dfws$LR•IPV4•62『线路36』 +东方卫视,http://39.134.67.108/PLTV/88888888/224/3221225942/1.m3u8$LR•IPV4•62『线路37』 +东方卫视,http://39.134.67.108/PLTV/88888888/224/3221225960/1.m3u8$LR•IPV4•62『线路38』 +东方卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226345$LR•IPV4•62『线路39』 +东方卫视,http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/shanghaiHD/__op/default/__f/index.m3u8$LR•IPV4•62『线路40』 +东方卫视,http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/shanghaiHD/__op/default/__f/index.m3u8$LR•IPV4•62『线路41』 +东方卫视,http://101.35.240.114:88/live.php?id=东方卫视$LR•IPV4•62『线路42』 +东方卫视,http://home.wwang.pw:35455/itv/1000000005000265018.m3u8?cdn=ystenlive$LR•IPV4•62『线路43』 +东方卫视,http://39.164.160.249:9901/tsfile/live/0107_1.m3u8$LR•IPV4•62『线路44』 +东方卫视,http://39.164.160.249:9901/tsfile/live/0107_1.m3u8$LR•IPV4•62『线路45』 +东方卫视,http://iptv.huuc.edu.cn/hls/dfhd.m3u8$LR•IPV4•62『线路46』 +东方卫视,http://ygbh.site/php/bfgd.php?id=093$LR•IPV4•62『线路47』 +东方卫视,https://cc06.tv12.xyz/37.m3u8$LR•IPV4•62『线路48』 +东方卫视,http://mg.hmysapp.cn:177/ckmg/zb.php?id=dfws$LR•IPV4•62『线路49』 +东方卫视,http://t.061899.xyz/tl/dq.php?id=dfws$LR•IPV4•62『线路50』 +东方卫视,https://zby.130519.xyz/PLTV/11/224/3221225725/index.m3u8$LR•IPV4•62『线路51』 +东方卫视,http://148.135.93.213:81/live.php?id=东方卫视$LR•IPV4•62『线路52』 +东方卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010054$LR•IPV4•62『线路53』 +东方卫视,http://z.b.bkpcp.top/m.php?id=dfws#rtsp://115.85.232.19/PLTV/88888910/224/3221225531/10000100000000060000000000107311_0.smil$LR•IPV4•62『线路54』 +东方卫视,http://goo.bkpcp.top/mg/dfws$LR•IPV4•62『线路55』 +东方卫视,http://iptv.huuc.edu.cn/hls/dfhd.m3u8$LR•IPV4•62『线路56』 +东方卫视,https://www.freetv.top/migu/651632648.m3u8?migutoken=67b4219a3e6acdcf288118ed6bf84d3197052966f0bc854079b6038b3fca6437744ca78bb0ea1fad6f61b4c73d0df57bd8b539ec247fd28ce16d1375716bbf774ea19c99e4585bb828fa3851c0$LR•IPV4•62『线路57』 +东方卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003873462.m3u8$LR•IPV4•62『线路58』 +东方卫视,https://bp-cdn-ali.bestv.cn/enhance/bestvdfws_enhance.m3u8?auth_key=1746334807-ddb61092a75249868c8bd1834313f437-0-8a760296d281d86bc4612f5fc4f85247$LR•IPV4•62『线路59』 +东方卫视,https://live.lalifeier.eu.org/kankanews/dfws.m3u8?t=1746372302&key=04c79ed1fd72dbd3188040c54dc3858b$LR•IPV4•62『线路60』 +东方卫视,http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/yinhe/88888888/224/3221226345/index.m3u8$LR•IPV6•62『线路61』 +东方卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226345/index.m3u8$LR•IPV6•62『线路62』 +北京卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226900/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EcYPi33WFyhvd6SjmqUKhJg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•63『线路1』 +北京卫视,http://112.27.235.94:8000/hls/27/index.m3u8$LR•IPV4•63『线路2』 +北京卫视,https://cc06.tv12.xyz/27.m3u8$LR•IPV4•63『线路3』 +北京卫视,http://zzssw01.55555.io:9901/tsfile/live/0122_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•63『线路4』 +北京卫视,http://112.27.235.94:8000/hls/27/index.m3u8$LR•IPV4•63『线路5』 +北京卫视,https://cc06.tv12.xyz/27.m3u8$LR•IPV4•63『线路6』 +北京卫视,http://zzssw01.55555.io:9901/tsfile/live/0122_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•63『线路7』 +北京卫视,http://101.74.28.84:9901/tsfile/live/0122_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•63『线路8』 +北京卫视,http://61.156.228.12:8154/tsfile/live/0122_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•63『线路9』 +北京卫视,http://1.195.131.143:9901/tsfile/live/0122_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•63『线路10』 +北京卫视,http://106.118.70.125:9901/tsfile/live/0122_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•63『线路11』 +北京卫视,http://satellitepull.cnr.cn/live/wxbtv/playlist.m3u8$LR•IPV4•63『线路12』 +北京卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010143$LR•IPV4•63『线路13』 +北京卫视,http://z.b.bkpcp.top/m.php?id=bjws$LR•IPV4•63『线路14』 +北京卫视,http://j.x.bkpcp.top/jx/BEIJHD$LR•IPV4•63『线路15』 +北京卫视,http://iptv.huuc.edu.cn/hls/btv1hd.m3u8$LR•IPV4•63『线路16』 +北京卫视,https://smart.pendy.dpdns.org/Smart.php?id=beijing$LR•IPV4•63『线路17』 +北京卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003870776.m3u8$LR•IPV4•63『线路18』 +北京卫视,http://120.192.226.35:8009/hls/35/index.m3u8$LR•IPV4•63『线路19』 +北京卫视,http://36.32.174.67:60080/newlive/live/hls/25/live.m3u8$LR•IPV4•63『线路20』 +北京卫视,http://61.138.128.226:19901/tsfile/live/0122_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•63『线路21』 +北京卫视,http://36.105.100.208:35455/itv/1000000005000265027.m3u8?cdn=ystenlive$LR•IPV4•63『线路22』 +北京卫视,http://iptv.0564.org:35455/itv/1000000005000265027.m3u8?cdn=ystenlive$LR•IPV4•63『线路23』 +北京卫视,http://my.tmos.cn:15181/chs002.m3u8$LR•IPV4•63『线路24』 +北京卫视,http://mh0.asia:35455/itv/1000000005000265027.m3u8?cdn=ystenlive$LR•IPV4•63『线路25』 +北京卫视,http://xxx.504900.xyz:35455/itv/1000000005000265027.m3u8?cdn=ystenlive$LR•IPV4•63『线路26』 +北京卫视,http://3501776.xyz:35455/itv/1000000005000265027.m3u8?cdn=ystenlive$LR•IPV4•63『线路27』 +北京卫视,http://175.171.30.26:5111/hls/474822978/index.m3u8$LR•IPV4•63『线路28』 +北京卫视,http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226436/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ElMQ3ov45VmhzipweN5VstQ%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNPg_yZ8DZHTaSU92MIl_o3b%2CEND$LR•IPV6•63『线路29』 +北京卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226450/index.m3u8$LR•IPV6•63『线路30』 +北京卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226450/index.m3u8$LR•IPV6•63『线路31』 +北京卫视,https://live.mxdyeah.top/live.php?id=beijingHD$LR•IPV4•63『线路32』 +北京卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225728/index.m3u8$LR•IPV4•63『线路33』 +北京卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226450/index.m3u8$LR•IPV4•63『线路34』 +北京卫视,http://k.061899.xyz/m.php?id=bjws$LR•IPV4•63『线路35』 +北京卫视,http://t.061899.xyz/tl/tl.php?id=bjws$LR•IPV4•63『线路36』 +北京卫视,http://39.134.67.108/PLTV/88888888/224/3221225927/1.m3u8$LR•IPV4•63『线路37』 +北京卫视,http://39.134.67.108/PLTV/88888888/224/3221225931/1.m3u8$LR•IPV4•63『线路38』 +北京卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226450$LR•IPV4•63『线路39』 +北京卫视,http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/beijingHD/__op/default/__f/index.m3u8$LR•IPV4•63『线路40』 +北京卫视,http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/beijingHD/__op/default/__f/index.m3u8$LR•IPV4•63『线路41』 +北京卫视,http://101.35.240.114:88/live.php?id=北京卫视$LR•IPV4•63『线路42』 +北京卫视,http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226436/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ElMQ3ov45VmhzipweN5VstQ%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNPg_yZ8DZHTaSU92MIl_o3b%2CEND$LR•IPV6•63『线路43』 +北京卫视,http://39.164.160.249:9901/tsfile/live/0122_1.m3u8$LR•IPV4•63『线路44』 +北京卫视,http://iptv.huuc.edu.cn/hls/btv1hd.m3u8$LR•IPV4•63『线路45』 +北京卫视,http://ygbh.site/php/bfgd.php?id=083$LR•IPV4•63『线路46』 +北京卫视,https://cc06.tv12.xyz/27.m3u8$LR•IPV4•63『线路47』 +北京卫视,http://112.27.235.94:8000/hls/27/index.m3u8$LR•IPV4•63『线路48』 +北京卫视,http://39.135.135.11/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225728/index.m3u8$LR•IPV4•63『线路49』 +北京卫视,http://t.061899.xyz/tl/dq.php?id=bjws$LR•IPV4•63『线路50』 +北京卫视,https://zby.130519.xyz/PLTV/11/224/3221225724/index.m3u8$LR•IPV4•63『线路51』 +北京卫视,http://148.135.93.213:81/live.php?id=北京卫视$LR•IPV4•63『线路52』 +北京卫视,http://satellitepull.cnr.cn/live/wxbtv/playlist.m3u8$LR•IPV4•63『线路53』 +北京卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010143$LR•IPV4•63『线路54』 +北京卫视,http://z.b.bkpcp.top/m.php?id=bjws$LR•IPV4•63『线路55』 +北京卫视,http://j.x.bkpcp.top/jx/BEIJHD$LR•IPV4•63『线路56』 +北京卫视,http://[2409:8087:1:20:20::2c]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226436/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ElMQ3ov45VmhzipweN5VstQ%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNPg_yZ8DZHTaSU92MIl_o3b%2CEND$LR•IPV6•63『线路57』 +北京卫视,http://iptv.huuc.edu.cn/hls/btv1hd.m3u8$LR•IPV4•63『线路58』 +北京卫视,https://smart.pendy.dpdns.org/Smart.php?id=beijing$LR•IPV4•63『线路59』 +北京卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003870776.m3u8$LR•IPV4•63『线路60』 +北京卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226450/index.m3u8$LR•IPV6•63『线路61』 +北京卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226450/index.m3u8$LR•IPV6•63『线路62』 +北京卫视,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227179/index.m3u8$LR•IPV4•63『线路63』 +江苏卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226897/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E0BmO6uHF7WFoTed__Xr3NQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•63『线路1』 +江苏卫视,http://112.27.235.94:8000/hls/32/index.m3u8$LR•IPV4•63『线路2』 +江苏卫视,http://120.76.248.139/live/bfgd/4200000085.m3u8$LR•IPV4•63『线路3』 +江苏卫视,http://60.16.0.216:5757/hls/24/index.m3u8$LR•IPV4•63『线路4』 +江苏卫视,https://cc06.tv12.xyz/61.m3u8$LR•IPV4•63『线路5』 +江苏卫视,http://112.27.235.94:8000/hls/32/index.m3u8$LR•IPV4•63『线路6』 +江苏卫视,http://120.76.248.139/live/bfgd/4200000085.m3u8$LR•IPV4•63『线路7』 +江苏卫视,http://60.16.0.216:5757/hls/24/index.m3u8$LR•IPV4•63『线路8』 +江苏卫视,https://cc06.tv12.xyz/61.m3u8$LR•IPV4•63『线路9』 +江苏卫视,http://101.74.28.84:9901/tsfile/live/0127_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•63『线路10』 +江苏卫视,http://1.195.131.143:9901/tsfile/live/0127_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•63『线路11』 +江苏卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010059$LR•IPV4•63『线路12』 +江苏卫视,http://z.b.bkpcp.top/m.php?id=jsws$LR•IPV4•63『线路13』 +江苏卫视,http://goo.bkpcp.top/mg/jsws$LR•IPV4•63『线路14』 +江苏卫视,http://iptv.huuc.edu.cn/hls/jshd.m3u8$LR•IPV4•63『线路15』 +江苏卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003873461.m3u8$LR•IPV4•63『线路16』 +江苏卫视,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227228/index.m3u8$LR•IPV4•63『线路17』 +江苏卫视,http://183.94.1.118:8801/tsfile/live/0127_1.m3u8$LR•IPV4•63『线路18』 +江苏卫视,http://120.192.226.35:8009/hls/33/index.m3u8$LR•IPV4•63『线路19』 +江苏卫视,http://123.182.60.29:9002/hls/27/index.m3u8$LR•IPV4•63『线路20』 +江苏卫视,http://61.138.128.226:19901/tsfile/live/0127_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•63『线路21』 +江苏卫视,http://36.105.100.208:35455/itv/1000000005000265030.m3u8?cdn=ystenlive$LR•IPV4•63『线路22』 +江苏卫视,http://iptv.0564.org:35455/itv/1000000005000265030.m3u8?cdn=ystenlive$LR•IPV4•63『线路23』 +江苏卫视,http://my.tmos.cn:15181/chs003.m3u8$LR•IPV4•63『线路24』 +江苏卫视,http://mh0.asia:35455/itv/1000000005000265030.m3u8?cdn=ystenlive$LR•IPV4•63『线路25』 +江苏卫视,http://3501776.xyz:35455/itv/1000000005000265030.m3u8?cdn=ystenlive$LR•IPV4•63『线路26』 +江苏卫视,http://150.158.112.123/%E5%85%AC%E4%BC%97%E5%8F%B7~%E7%8E%89%E7%8E%89%E8%BD%AF%E4%BB%B6%E5%BA%93/mg.php?id=jsws$LR•IPV4•63『线路27』 +江苏卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226310/index.m3u8$LR•IPV6•63『线路28』 +江苏卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226310/index.m3u8$LR•IPV6•63『线路29』 +江苏卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226897/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E0BmO6uHF7WFoTed__Xr3NQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•63『线路30』 +江苏卫视,http://[2409:8087:2001:20:2800:0:df6e:eb17]:80/ott.mobaibox.com/PLTV/4/224/3221227552/index.m3u8$LR•IPV6•63『线路31』 +江苏卫视,https://live.mxdyeah.top/live.php?id=jiangsuHD$LR•IPV4•63『线路32』 +江苏卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225613/index.m3u8$LR•IPV4•63『线路33』 +江苏卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226310/index.m3u8$LR•IPV4•63『线路34』 +江苏卫视,http://k.061899.xyz/m.php?id=jsws$LR•IPV4•63『线路35』 +江苏卫视,http://t.061899.xyz/tl/tl.php?id=jsws$LR•IPV4•63『线路36』 +江苏卫视,http://39.134.67.108/PLTV/88888888/224/3221225929/1.m3u8$LR•IPV4•63『线路37』 +江苏卫视,http://39.134.67.108/PLTV/88888888/224/3221225938/1.m3u8$LR•IPV4•63『线路38』 +江苏卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226310$LR•IPV4•63『线路39』 +江苏卫视,http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/jiangsuHD/__op/default/__f/index.m3u8$LR•IPV4•63『线路40』 +江苏卫视,http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/jiangsuHD/__op/default/__f/index.m3u8$LR•IPV4•63『线路41』 +江苏卫视,http://101.35.240.114:88/live.php?id=江苏卫视$LR•IPV4•63『线路42』 +江苏卫视,http://home.wwang.pw:35455/itv/1000000005000265030.m3u8?cdn=ystenlive$LR•IPV4•63『线路43』 +江苏卫视,http://39.164.160.249:9901/tsfile/live/0127_1.m3u8$LR•IPV4•63『线路44』 +江苏卫视,http://iptv.huuc.edu.cn/hls/jshd.m3u8$LR•IPV4•63『线路45』 +江苏卫视,http://ygbh.site/php/bfgd.php?id=085$LR•IPV4•63『线路46』 +江苏卫视,https://cc06.tv12.xyz/61.m3u8$LR•IPV4•63『线路47』 +江苏卫视,http://112.27.235.94:8000/hls/32/index.m3u8$LR•IPV4•63『线路48』 +江苏卫视,http://39.135.133.181/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226310/index.m3u8$LR•IPV4•63『线路49』 +江苏卫视,http://mg.hmysapp.cn:177/ckmg/zb.php?id=jsws$LR•IPV4•63『线路50』 +江苏卫视,http://t.061899.xyz/tl/dq.php?id=jsws$LR•IPV4•63『线路51』 +江苏卫视,https://zby.130519.xyz/PLTV/11/224/3221225720/index.m3u8$LR•IPV4•63『线路52』 +江苏卫视,http://148.135.93.213:81/live.php?id=江苏卫视$LR•IPV4•63『线路53』 +江苏卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010059$LR•IPV4•63『线路54』 +江苏卫视,http://z.b.bkpcp.top/m.php?id=jsws$LR•IPV4•63『线路55』 +江苏卫视,http://goo.bkpcp.top/mg/jsws$LR•IPV4•63『线路56』 +江苏卫视,http://iptv.huuc.edu.cn/hls/jshd.m3u8$LR•IPV4•63『线路57』 +江苏卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003873461.m3u8$LR•IPV4•63『线路58』 +江苏卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226310/index.m3u8$LR•IPV6•63『线路59』 +江苏卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226310/index.m3u8$LR•IPV6•63『线路60』 +江苏卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226897/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E0BmO6uHF7WFoTed__Xr3NQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•63『线路61』 +江苏卫视,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227228/index.m3u8$LR•IPV4•63『线路62』 +江苏卫视,http://[2409:8087:2001:20:2800:0:df6e:eb17]:80/ott.mobaibox.com/PLTV/4/224/3221227552/index.m3u8$LR•IPV6•63『线路63』 +安徽卫视,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•62『线路1』 +安徽卫视,http://112.27.235.94:8000/hls/26/index.m3u8$LR•IPV4•62『线路2』 +安徽卫视,https://cc06.tv12.xyz/26.m3u8$LR•IPV4•62『线路3』 +安徽卫视,http://zzssw01.55555.io:9901/tsfile/live/0130_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•62『线路4』 +安徽卫视,http://112.27.235.94:8000/hls/26/index.m3u8$LR•IPV4•62『线路5』 +安徽卫视,https://cc06.tv12.xyz/26.m3u8$LR•IPV4•62『线路6』 +安徽卫视,http://zzssw01.55555.io:9901/tsfile/live/0130_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•62『线路7』 +安徽卫视,http://101.74.28.84:9901/tsfile/live/0130_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•62『线路8』 +安徽卫视,http://1.195.131.143:9901/tsfile/live/0130_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•62『线路9』 +安徽卫视,http://101.66.198.42:9901/tsfile/live/0130_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•62『线路10』 +安徽卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226391$LR•IPV4•62『线路11』 +安徽卫视,http://j.x.bkpcp.top/jx/ANHUIHD$LR•IPV4•62『线路12』 +安徽卫视,http://iptv.huuc.edu.cn/hls/ahhd.m3u8$LR•IPV4•62『线路13』 +安徽卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003873469.m3u8$LR•IPV4•62『线路14』 +安徽卫视,http://z.b.bkpcp.top/m.php?id=ahws$LR•IPV4•62『线路15』 +安徽卫视,http://yc.myds.me:35455/itv/6000000001000009954.m3u8?cdn=wasusyt$LR•IPV4•62『线路16』 +安徽卫视,http://nas.suntao.online:35455/itv/1000000001000030159.m3u8?cdn=ystenlive$LR•IPV4•62『线路17』 +安徽卫视,http://183.94.1.118:8801/tsfile/live/0130_1.m3u8$LR•IPV4•62『线路18』 +安徽卫视,http://120.192.226.35:8009/hls/42/index.m3u8$LR•IPV4•62『线路19』 +安徽卫视,http://123.182.60.29:9002/hls/28/index.m3u8$LR•IPV4•62『线路20』 +安徽卫视,http://61.138.128.226:19901/tsfile/live/0130_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•62『线路21』 +安徽卫视,http://36.105.100.208:35455/itv/1000000005000265025.m3u8?cdn=ystenlive$LR•IPV4•62『线路22』 +安徽卫视,http://iptv.0564.org:35455/itv/1000000005000265025.m3u8?cdn=ystenlive$LR•IPV4•62『线路23』 +安徽卫视,http://mh0.asia:35455/itv/1000000005000265025.m3u8?cdn=ystenlive$LR•IPV4•62『线路24』 +安徽卫视,http://xxx.504900.xyz:35455/itv/1000000005000265025.m3u8?cdn=ystenlive$LR•IPV4•62『线路25』 +安徽卫视,http://3501776.xyz:35455/itv/1000000005000265025.m3u8?cdn=ystenlive$LR•IPV4•62『线路26』 +安徽卫视,http://175.171.30.26:5111/hls/627376969/index.m3u8$LR•IPV4•62『线路27』 +安徽卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226391/index.m3u8$LR•IPV6•62『线路28』 +安徽卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226498/index.m3u8$LR•IPV6•62『线路29』 +安徽卫视,http://[2409:8087:2001:20:2800:0:df6e:eb12]/wh7f454c46tw2802330256_375747539/ott.mobaibox.com/PLTV/3/224/3221227558/index.m3u8?icpid=3&RTS=1668597596&from=40&popid=40&hms_devid=2112&prioritypopid=40&vqe=3$LR•IPV6•62『线路30』 +安徽卫视,https://live.mxdyeah.top/live.php?id=anhuiSD$LR•IPV4•62『线路31』 +安徽卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226391/index.m3u8$LR•IPV4•62『线路32』 +安徽卫视,http://k.061899.xyz/m.php?id=ahws$LR•IPV4•62『线路33』 +安徽卫视,http://t.061899.xyz/tl/tl.php?id=ahws$LR•IPV4•62『线路34』 +安徽卫视,http://sh.lnott.top:880/dx34.m3u8$LR•IPV4•62『线路35』 +安徽卫视,http://39.134.67.108/PLTV/88888888/224/3221225923/1.m3u8$LR•IPV4•62『线路36』 +安徽卫视,http://39.134.67.108/PLTV/88888888/224/3221225925/1.m3u8$LR•IPV4•62『线路37』 +安徽卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226391$LR•IPV4•62『线路38』 +安徽卫视,http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/anhuiSD/__op/default/__f/index.m3u8$LR•IPV4•62『线路39』 +安徽卫视,http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/anhuiSD/__op/default/__f/index.m3u8$LR•IPV4•62『线路40』 +安徽卫视,http://159.75.166.157/php/ah.php?id=ahws$LR•IPV4•62『线路41』 +安徽卫视,http://101.35.240.114:88/live.php?id=安徽卫视$LR•IPV4•62『线路42』 +安徽卫视,http://home.wwang.pw:35455/itv/1000000005000265025.m3u8?cdn=ystenlive$LR•IPV4•62『线路43』 +安徽卫视,http://39.164.160.249:9901/tsfile/live/0130_1.m3u8$LR•IPV4•62『线路44』 +安徽卫视,https://piccpndks.v.kcdnvip.com/audio/anhui_2/index.m3u8$LR•IPV4•62『线路45』 +安徽卫视,http://iptv.huuc.edu.cn/hls/ahhd.m3u8$LR•IPV4•62『线路46』 +安徽卫视,http://ygbh.site/php/bfgd.php?id=096$LR•IPV4•62『线路47』 +安徽卫视,https://cc06.tv12.xyz/26.m3u8$LR•IPV4•62『线路48』 +安徽卫视,http://112.27.235.94:8000/hls/26/index.m3u8$LR•IPV4•62『线路49』 +安徽卫视,http://39.135.133.159/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226391/index.m3u8$LR•IPV4•62『线路50』 +安徽卫视,https://zby.130519.xyz/PLTV/11/224/3221225739/index.m3u8$LR•IPV4•62『线路51』 +安徽卫视,http://148.135.93.213:81/live.php?id=安徽卫视$LR•IPV4•62『线路52』 +安徽卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226391$LR•IPV4•62『线路53』 +安徽卫视,http://j.x.bkpcp.top/jx/ANHUIHD$LR•IPV4•62『线路54』 +安徽卫视,http://iptv.huuc.edu.cn/hls/ahhd.m3u8$LR•IPV4•62『线路55』 +安徽卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003873469.m3u8$LR•IPV4•62『线路56』 +安徽卫视,http://z.b.bkpcp.top/m.php?id=ahws$LR•IPV4•62『线路57』 +安徽卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226391/index.m3u8$LR•IPV6•62『线路58』 +安徽卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226498/index.m3u8$LR•IPV6•62『线路59』 +安徽卫视,http://[2409:8087:2001:20:2800:0:df6e:eb12]/wh7f454c46tw2802330256_375747539/ott.mobaibox.com/PLTV/3/224/3221227558/index.m3u8?icpid=3&RTS=1668597596&from=40&popid=40&hms_devid=2112&prioritypopid=40&vqe=3$LR•IPV6•62『线路60』 +安徽卫视,http://yc.myds.me:35455/itv/6000000001000009954.m3u8?cdn=wasusyt$LR•IPV4•62『线路61』 +安徽卫视,http://nas.suntao.online:35455/itv/1000000001000030159.m3u8?cdn=ystenlive$LR•IPV4•62『线路62』 +重庆卫视,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•65『线路1』 +重庆卫视,http://60.16.0.216:5757/hls/36/index.m3u8$LR•IPV4•65『线路2』 +重庆卫视,http://zzssw01.55555.io:9901/tsfile/live/0142_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•65『线路3』 +重庆卫视,http://60.16.0.216:5757/hls/36/index.m3u8$LR•IPV4•65『线路4』 +重庆卫视,http://zzssw01.55555.io:9901/tsfile/live/0142_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•65『线路5』 +重庆卫视,http://106.118.70.125:9901/tsfile/live/0142_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•65『线路6』 +重庆卫视,http://101.74.28.84:9901/tsfile/live/0142_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•65『线路7』 +重庆卫视,http://101.66.198.42:9901/tsfile/live/0142_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•65『线路8』 +重庆卫视,http://1.195.131.143:9901/tsfile/live/0142_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•65『线路9』 +重庆卫视,http://61.156.228.12:8154/tsfile/live/0142_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•65『线路10』 +重庆卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010053$LR•IPV4•65『线路11』 +重庆卫视,http://z.b.bkpcp.top/m.php?id=cqws$LR•IPV4•65『线路12』 +重庆卫视,http://j.x.bkpcp.top/jx/CHONGQHD$LR•IPV4•65『线路13』 +重庆卫视,http://iptv.huuc.edu.cn/hls/cqhd.m3u8$LR•IPV4•65『线路14』 +重庆卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000004796458.m3u8$LR•IPV4•65『线路15』 +重庆卫视,http://183.94.1.118:8801/tsfile/live/0142_1.m3u8$LR•IPV4•65『线路16』 +重庆卫视,http://120.192.226.35:8009/hls/43/index.m3u8$LR•IPV4•65『线路17』 +重庆卫视,http://113.56.95.69:53765/tsfile/live/1017_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•65『线路18』 +重庆卫视,http://123.182.60.29:9002/hls/42/index.m3u8$LR•IPV4•65『线路19』 +重庆卫视,http://36.32.174.67:60080/newlive/live/hls/34/live.m3u8$LR•IPV4•65『线路20』 +重庆卫视,http://61.138.128.226:19901/tsfile/live/0142_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•65『线路21』 +重庆卫视,http://222.173.108.238:352/tsfile/live/1016_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•65『线路22』 +重庆卫视,http://36.105.100.208:35455/itv/1000000005000265017.m3u8?cdn=ystenlive$LR•IPV4•65『线路23』 +重庆卫视,http://iptv.0564.org:35455/itv/1000000005000265017.m3u8?cdn=ystenlive$LR•IPV4•65『线路24』 +重庆卫视,http://mh0.asia:35455/itv/1000000005000265017.m3u8?cdn=ystenlive$LR•IPV4•65『线路25』 +重庆卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226409/index.m3u8$LR•IPV6•65『线路26』 +重庆卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226409/index.m3u8$LR•IPV6•65『线路27』 +重庆卫视,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•65『线路28』 +重庆卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001129/index.m3u8$LR•IPV6•65『线路29』 +重庆卫视,http://[2409:8087:2001:20:2800:0:df6e:eb09]:80/ott.mobaibox.com/PLTV/4/224/3221228133/index.m3u8$LR•IPV6•65『线路30』 +重庆卫视,https://live.mxdyeah.top/live.php?id=chongqingHD$LR•IPV4•65『线路31』 +重庆卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226409/index.m3u8$LR•IPV4•65『线路32』 +重庆卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225618/index.m3u8$LR•IPV4•65『线路33』 +重庆卫视,http://k.061899.xyz/m.php?id=cqws$LR•IPV4•65『线路34』 +重庆卫视,http://t.061899.xyz/tl/tl.php?id=cqws$LR•IPV4•65『线路35』 +重庆卫视,http://sh.lnott.top:880/dx46.m3u8$LR•IPV4•65『线路36』 +重庆卫视,http://39.134.67.108/PLTV/88888888/224/3221225963/1.m3u8$LR•IPV4•65『线路37』 +重庆卫视,http://39.134.67.108/PLTV/88888888/224/3221226001/1.m3u8$LR•IPV4•65『线路38』 +重庆卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226409$LR•IPV4•65『线路39』 +重庆卫视,http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/chongqingHD/__op/default/__f/index.m3u8$LR•IPV4•65『线路40』 +重庆卫视,http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/chongqingHD/__op/default/__f/index.m3u8$LR•IPV4•65『线路41』 +重庆卫视,http://148.135.93.213/live.php?id=重庆卫视$LR•IPV4•65『线路42』 +重庆卫视,http://home.wwang.pw:35455/itv/1000000005000265017.m3u8?cdn=ystenlive$LR•IPV4•65『线路43』 +重庆卫视,https://cc06.tv12.xyz/34.m3u8$LR•IPV4•65『线路44』 +重庆卫视,http://220.192.12.20:8003/udp/225.0.4.187:7980?$LR•IPV4•65『线路45』 +重庆卫视,http://p2.ytelc.com/videojs.php?id=https://sjlivecdn9.cbg.cn/202510062356/app_2/_definst_/ls_2.stream/chunklist.m3u8$LR•IPV4•65『线路46』 +重庆卫视,http://iptv.huuc.edu.cn/hls/cqhd.m3u8$LR•IPV4•65『线路47』 +重庆卫视,http://ygbh.site/php/bfgd.php?id=107$LR•IPV4•65『线路48』 +重庆卫视,https://cc06.tv12.xyz/34.m3u8$LR•IPV4•65『线路49』 +重庆卫视,http://112.27.235.94:8000/hls/36/index.m3u8$LR•IPV4•65『线路50』 +重庆卫视,http://39.134.65.75/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225618/index.m3u8$LR•IPV4•65『线路51』 +重庆卫视,http://mg.hmysapp.cn:177/ckmg/zb.php?id=cqws$LR•IPV4•65『线路52』 +重庆卫视,http://t.061899.xyz/tl/dq.php?id=cqws$LR•IPV4•65『线路53』 +重庆卫视,https://zby.130519.xyz/PLTV/11/224/3221226171/index.m3u8$LR•IPV4•65『线路54』 +重庆卫视,http://148.135.93.213:81/live.php?id=重庆卫视$LR•IPV4•65『线路55』 +重庆卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010053$LR•IPV4•65『线路56』 +重庆卫视,http://z.b.bkpcp.top/m.php?id=cqws$LR•IPV4•65『线路57』 +重庆卫视,http://j.x.bkpcp.top/jx/CHONGQHD$LR•IPV4•65『线路58』 +重庆卫视,http://iptv.huuc.edu.cn/hls/cqhd.m3u8$LR•IPV4•65『线路59』 +重庆卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000004796458.m3u8$LR•IPV4•65『线路60』 +重庆卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226409/index.m3u8$LR•IPV6•65『线路61』 +重庆卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226409/index.m3u8$LR•IPV6•65『线路62』 +重庆卫视,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•65『线路63』 +重庆卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001129/index.m3u8$LR•IPV6•65『线路64』 +重庆卫视,http://[2409:8087:2001:20:2800:0:df6e:eb09]:80/ott.mobaibox.com/PLTV/4/224/3221228133/index.m3u8$LR•IPV6•65『线路65』 +四川卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226995/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EBQiz3wrGrpG0CUSRIJ-7Jg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•61『线路1』 +四川卫视,http://112.27.235.94:8000/hls/35/index.m3u8$LR•IPV4•61『线路2』 +四川卫视,http://60.16.0.216:5757/hls/30/index.m3u8$LR•IPV4•61『线路3』 +四川卫视,http://112.27.235.94:8000/hls/35/index.m3u8$LR•IPV4•61『线路4』 +四川卫视,http://60.16.0.216:5757/hls/30/index.m3u8$LR•IPV4•61『线路5』 +四川卫视,http://1.195.131.143:9901/tsfile/live/0123_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路6』 +四川卫视,http://101.66.198.42:9901/tsfile/live/0123_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•61『线路7』 +四川卫视,http://101.74.28.84:9901/tsfile/live/0123_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路8』 +四川卫视,http://61.156.228.12:8154/tsfile/live/0123_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路9』 +四川卫视,http://j.x.bkpcp.top/jx/SICHD$LR•IPV4•61『线路10』 +四川卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226338$LR•IPV4•61『线路11』 +四川卫视,http://z.b.bkpcp.top/m.php?id=scws$LR•IPV4•61『线路12』 +四川卫视,http://iptv.huuc.edu.cn/hls/schd.m3u8$LR•IPV4•61『线路13』 +四川卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003887274.m3u8$LR•IPV4•61『线路14』 +四川卫视,http://183.94.1.118:8801/tsfile/live/0123_1.m3u8$LR•IPV4•61『线路15』 +四川卫视,http://120.192.226.35:8009/hls/41/index.m3u8$LR•IPV4•61『线路16』 +四川卫视,http://113.56.95.69:53765/tsfile/live/1021_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路17』 +四川卫视,http://123.182.60.29:9002/hls/36/index.m3u8$LR•IPV4•61『线路18』 +四川卫视,http://36.32.174.67:60080/newlive/live/hls/29/live.m3u8$LR•IPV4•61『线路19』 +四川卫视,http://61.138.128.226:19901/tsfile/live/0123_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路20』 +四川卫视,http://36.105.100.208:35455/itv/5000000004000006119.m3u8?cdn=bestzb$LR•IPV4•61『线路21』 +四川卫视,http://175.171.30.26:5111/hls/585736572/index.m3u8$LR•IPV4•61『线路22』 +四川卫视,http://113.118.15.210:808/hls/50/index.m3u8$LR•IPV4•61『线路23』 +四川卫视,http://110.7.131.4:9901/tsfile/live/0123_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路24』 +四川卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226338/index.m3u8$LR•IPV6•61『线路25』 +四川卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226338/index.m3u8$LR•IPV6•61『线路26』 +四川卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226995/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EBQiz3wrGrpG0CUSRIJ-7Jg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•61『线路27』 +四川卫视,http://[2409:8087:2001:20:2800:0:df6e:eb08]:80/ott.mobaibox.com/PLTV/4/224/3221228171/index.m3u8$LR•IPV6•61『线路28』 +四川卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001130/index.m3u8$LR•IPV6•61『线路29』 +四川卫视,https://live.mxdyeah.top/live.php?id=sichuanHD$LR•IPV4•61『线路30』 +四川卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226338/index.m3u8$LR•IPV4•61『线路31』 +四川卫视,http://k.061899.xyz/m.php?id=scws$LR•IPV4•61『线路32』 +四川卫视,http://t.061899.xyz/tl/tl.php?id=scws$LR•IPV4•61『线路33』 +四川卫视,http://sh.lnott.top:880/dx45.m3u8$LR•IPV4•61『线路34』 +四川卫视,http://39.134.67.108/PLTV/88888888/224/3221225970/1.m3u8$LR•IPV4•61『线路35』 +四川卫视,http://39.134.67.108/PLTV/88888888/224/3221226014/1.m3u8$LR•IPV4•61『线路36』 +四川卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226338$LR•IPV4•61『线路37』 +四川卫视,http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/cctv1HD/__op/default/__f/index.m3u8$LR•IPV4•61『线路38』 +四川卫视,http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/cctv1HD/__op/default/__f/index.m3u8$LR•IPV4•61『线路39』 +四川卫视,http://148.135.93.213/live.php?id=四川卫视$LR•IPV4•61『线路40』 +四川卫视,http://home.wwang.pw:35455/itv/5000000004000006119.m3u8?cdn=bestzb$LR•IPV4•61『线路41』 +四川卫视,https://cc06.tv12.xyz/99.m3u8$LR•IPV4•61『线路42』 +四川卫视,https://piccpndks.v.kcdnvip.com/audio/sichuan_2/index.m3u8$LR•IPV4•61『线路43』 +四川卫视,http://iptv.huuc.edu.cn/hls/schd.m3u8$LR•IPV4•61『线路44』 +四川卫视,http://ygbh.site/php/bfgd.php?id=103$LR•IPV4•61『线路45』 +四川卫视,https://cc06.tv12.xyz/99.m3u8$LR•IPV4•61『线路46』 +四川卫视,http://112.27.235.94:8000/hls/35/index.m3u8$LR•IPV4•61『线路47』 +四川卫视,http://39.135.133.150/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226338/index.m3u8$LR•IPV4•61『线路48』 +四川卫视,http://t.061899.xyz/tl/dq.php?id=scws$LR•IPV4•61『线路49』 +四川卫视,https://zby.130519.xyz/PLTV/11/224/3221226152/index.m3u8$LR•IPV4•61『线路50』 +四川卫视,http://148.135.93.213:81/live.php?id=四川卫视$LR•IPV4•61『线路51』 +四川卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226338$LR•IPV4•61『线路52』 +四川卫视,http://z.b.bkpcp.top/m.php?id=scws$LR•IPV4•61『线路53』 +四川卫视,http://j.x.bkpcp.top/jx/SICHD$LR•IPV4•61『线路54』 +四川卫视,http://iptv.huuc.edu.cn/hls/schd.m3u8$LR•IPV4•61『线路55』 +四川卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003887274.m3u8$LR•IPV4•61『线路56』 +四川卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226338/index.m3u8$LR•IPV6•61『线路57』 +四川卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226338/index.m3u8$LR•IPV6•61『线路58』 +四川卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226995/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EBQiz3wrGrpG0CUSRIJ-7Jg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•61『线路59』 +四川卫视,http://[2409:8087:2001:20:2800:0:df6e:eb08]:80/ott.mobaibox.com/PLTV/4/224/3221228171/index.m3u8$LR•IPV6•61『线路60』 +四川卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001130/index.m3u8$LR•IPV6•61『线路61』 +东南卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226991/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EQ6F5Mjgs0tJyEArWFL3vQA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•61『线路1』 +东南卫视,http://live.zohi.tv/video/s10001-fztv-3/index.m3u8$LR•IPV4•61『线路2』 +东南卫视,https://cc06.tv12.xyz/38.m3u8$LR•IPV4•61『线路3』 +东南卫视,http://120.76.248.139/live/bfgd/4200000483.m3u8$LR•IPV4•61『线路4』 +东南卫视,http://live.zohi.tv/video/s10001-fztv-3/index.m3u8$LR•IPV4•61『线路5』 +东南卫视,https://cc06.tv12.xyz/38.m3u8$LR•IPV4•61『线路6』 +东南卫视,http://120.76.248.139/live/bfgd/4200000483.m3u8$LR•IPV4•61『线路7』 +东南卫视,http://101.74.28.84:9901/tsfile/live/0137_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路8』 +东南卫视,http://101.66.198.42:9901/tsfile/live/0137_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•61『线路9』 +东南卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010096$LR•IPV4•61『线路10』 +东南卫视,http://z.b.bkpcp.top/m.php?id=dnws$LR•IPV4•61『线路11』 +东南卫视,http://j.x.bkpcp.top/jx/DONGNHD$LR•IPV4•61『线路12』 +东南卫视,http://iptv.huuc.edu.cn/hls/dnhd.m3u8$LR•IPV4•61『线路13』 +东南卫视,https://smart.pendy.dpdns.org/Smart.php?id=fujian$LR•IPV4•61『线路14』 +东南卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003873473.m3u8$LR•IPV4•61『线路15』 +东南卫视,http://183.94.1.118:8801/tsfile/live/0137_1.m3u8$LR•IPV4•61『线路16』 +东南卫视,http://120.192.226.35:8009/hls/45/index.m3u8$LR•IPV4•61『线路17』 +东南卫视,http://36.32.174.67:60080/newlive/live/hls/33/live.m3u8$LR•IPV4•61『线路18』 +东南卫视,http://61.138.128.226:19901/tsfile/live/1014_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路19』 +东南卫视,http://36.105.100.208:35455/itv/1000000005000265033.m3u8?cdn=ystenlive$LR•IPV4•61『线路20』 +东南卫视,http://iptv.0564.org:35455/itv/1000000005000265033.m3u8?cdn=ystenlive$LR•IPV4•61『线路21』 +东南卫视,http://mh0.asia:35455/itv/1000000005000265033.m3u8?cdn=ystenlive$LR•IPV4•61『线路22』 +东南卫视,http://xxx.504900.xyz:35455/itv/1000000005000265033.m3u8?cdn=ystenlive$LR•IPV4•61『线路23』 +东南卫视,http://3501776.xyz:35455/itv/1000000005000265033.m3u8?cdn=ystenlive$LR•IPV4•61『线路24』 +东南卫视,http://110.7.131.4:9901/tsfile/live/0137_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路25』 +东南卫视,http://[2409:8087:1a01:df::4035]:80/TVOD/88888888/224/3221225950/main.m3u8$LR•IPV6•61『线路26』 +东南卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226341/index.m3u8$LR•IPV6•61『线路27』 +东南卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226341/index.m3u8$LR•IPV6•61『线路28』 +东南卫视,https://live.mxdyeah.top/live.php?id=dongnanHD$LR•IPV4•61『线路29』 +东南卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226341/index.m3u8$LR•IPV4•61『线路30』 +东南卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225620/index.m3u8$LR•IPV4•61『线路31』 +东南卫视,http://k.061899.xyz/m.php?id=dnws$LR•IPV4•61『线路32』 +东南卫视,http://t.061899.xyz/tl/tl.php?id=dnws$LR•IPV4•61『线路33』 +东南卫视,http://39.134.67.108/PLTV/88888888/224/3221225950/1.m3u8$LR•IPV4•61『线路34』 +东南卫视,http://39.134.67.108/PLTV/88888888/224/3221226038/1.m3u8$LR•IPV4•61『线路35』 +东南卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226341$LR•IPV4•61『线路36』 +东南卫视,http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/dongnanHD/__op/default/__f/index.m3u8$LR•IPV4•61『线路37』 +东南卫视,http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/dongnanHD/__op/default/__f/index.m3u8$LR•IPV4•61『线路38』 +东南卫视,http://148.135.93.213/live.php?id=东南卫视$LR•IPV4•61『线路39』 +东南卫视,http://home.wwang.pw:35455/itv/1000000005000265033.m3u8?cdn=ystenlive$LR•IPV4•61『线路40』 +东南卫视,http://58.57.40.22:9901/tsfile/live/1037_1.m3u8$LR•IPV4•61『线路41』 +东南卫视,http://iptv.huuc.edu.cn/hls/dnhd.m3u8$LR•IPV4•61『线路42』 +东南卫视,http://ygbh.site/php/bfgd.php?id=483$LR•IPV4•61『线路43』 +东南卫视,https://cc06.tv12.xyz/38.m3u8$LR•IPV4•61『线路44』 +东南卫视,http://112.27.235.94:8000/hls/38/index.m3u8$LR•IPV4•61『线路45』 +东南卫视,http://39.134.65.77/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225620/index.m3u8$LR•IPV4•61『线路46』 +东南卫视,http://mg.hmysapp.cn:177/ckmg/zb.php?id=dnws$LR•IPV4•61『线路47』 +东南卫视,http://t.061899.xyz/tl/dq.php?id=dnws$LR•IPV4•61『线路48』 +东南卫视,https://zby.130519.xyz/PLTV/11/224/3221225745/index.m3u8$LR•IPV4•61『线路49』 +东南卫视,http://8.138.7.223/tv/fjtv1.php?id=dnws$LR•IPV4•61『线路50』 +东南卫视,http://148.135.93.213:81/live.php?id=东南卫视$LR•IPV4•61『线路51』 +东南卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010096$LR•IPV4•61『线路52』 +东南卫视,http://z.b.bkpcp.top/m.php?id=dnws$LR•IPV4•61『线路53』 +东南卫视,http://j.x.bkpcp.top/jx/DONGNHD$LR•IPV4•61『线路54』 +东南卫视,http://iptv.huuc.edu.cn/hls/dnhd.m3u8$LR•IPV4•61『线路55』 +东南卫视,http://live.zohi.tv/video/s10001-fztv-3/index.m3u8$LR•IPV4•61『线路56』 +东南卫视,http://[2409:8087:1a01:df::4035]:80/TVOD/88888888/224/3221225950/main.m3u8$LR•IPV6•61『线路57』 +东南卫视,https://smart.pendy.dpdns.org/Smart.php?id=fujian$LR•IPV4•61『线路58』 +东南卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003873473.m3u8$LR•IPV4•61『线路59』 +东南卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226341/index.m3u8$LR•IPV6•61『线路60』 +东南卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226341/index.m3u8$LR•IPV6•61『线路61』 +深圳卫视,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•76『线路1』 +深圳卫视,http://112.27.235.94:8000/hls/33/index.m3u8$LR•IPV4•76『线路2』 +深圳卫视,http://120.76.248.139/live/bfgd/4200000100.m3u8$LR•IPV4•76『线路3』 +深圳卫视,http://183.215.134.239:19901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•76『线路4』 +深圳卫视,http://60.16.0.216:5757/hls/19/index.m3u8$LR•IPV4•76『线路5』 +深圳卫视,http://zzssw01.55555.io:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•76『线路6』 +深圳卫视,http://113.26.202.52:1299/tsfile/live/0126_1.m3u8$LR•IPV4•76『线路7』 +深圳卫视,http://112.27.235.94:8000/hls/33/index.m3u8$LR•IPV4•76『线路8』 +深圳卫视,http://120.76.248.139/live/bfgd/4200000100.m3u8$LR•IPV4•76『线路9』 +深圳卫视,http://183.215.134.239:19901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•76『线路10』 +深圳卫视,http://60.16.0.216:5757/hls/19/index.m3u8$LR•IPV4•76『线路11』 +深圳卫视,http://zzssw01.55555.io:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•76『线路12』 +深圳卫视,http://113.26.202.52:1299/tsfile/live/0126_1.m3u8$LR•IPV4•76『线路13』 +深圳卫视,http://1.195.131.143:9901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•76『线路14』 +深圳卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010068$LR•IPV4•76『线路15』 +深圳卫视,http://iptv.huuc.edu.cn/hls/szhd.m3u8$LR•IPV4•76『线路16』 +深圳卫视,https://smart.pendy.dpdns.org/Smart.php?id=shenzhen$LR•IPV4•76『线路17』 +深圳卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003873474.m3u8$LR•IPV4•76『线路18』 +深圳卫视,http://z.b.bkpcp.top/m.php?id=szws$LR•IPV4•76『线路19』 +深圳卫视,http://yc.myds.me:35455/itv/5000000004000007410.m3u8?cdn=bestzb$LR•IPV4•76『线路20』 +深圳卫视,http://nas.suntao.online:35455/itv/5000000004000007410.m3u8?cdn=bestzb$LR•IPV4•76『线路21』 +深圳卫视,http://38.64.72.148:80/hls/modn/list/4007/playlist.m3u8$LR•IPV4•76『线路22』 +深圳卫视,http://120.192.226.35:8009/hls/37/index.m3u8$LR•IPV4•76『线路23』 +深圳卫视,http://61.138.128.226:19901/tsfile/live/0126_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•76『线路24』 +深圳卫视,http://36.105.100.208:35455/itv/1000000005000265028.m3u8?cdn=ystenlive$LR•IPV4•76『线路25』 +深圳卫视,http://iptv.0564.org:35455/itv/1000000005000265028.m3u8?cdn=ystenlive$LR•IPV4•76『线路26』 +深圳卫视,http://mh0.asia:35455/itv/1000000005000265028.m3u8?cdn=ystenlive$LR•IPV4•76『线路27』 +深圳卫视,http://xxx.504900.xyz:35455/itv/1000000005000265028.m3u8?cdn=ystenlive$LR•IPV4•76『线路28』 +深圳卫视,http://3501776.xyz:35455/itv/1000000005000265028.m3u8?cdn=ystenlive$LR•IPV4•76『线路29』 +深圳卫视,http://116.77.32.59:8277/streams/d/szws/playlist.m3u8$LR•IPV4•76『线路30』 +深圳卫视,http://113.118.15.210:808/hls/45/index.m3u8$LR•IPV4•76『线路31』 +深圳卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226313/index.m3u8$LR•IPV6•76『线路32』 +深圳卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226313/index.m3u8$LR•IPV6•76『线路33』 +深圳卫视,http://[2409:8087:2001:20:2800:0:df6e:eb11]:80/ott.mobaibox.com/PLTV/4/224/3221227555/index.m3u8$LR•IPV6•76『线路34』 +深圳卫视,https://live.mxdyeah.top/live.php?id=shenzhenHD$LR•IPV4•76『线路35』 +深圳卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225739/index.m3u8$LR•IPV4•76『线路36』 +深圳卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226313/index.m3u8$LR•IPV4•76『线路37』 +深圳卫视,http://k.061899.xyz/m.php?id=szws$LR•IPV4•76『线路38』 +深圳卫视,http://t.061899.xyz/tl/tl.php?id=szws$LR•IPV4•76『线路39』 +深圳卫视,http://sh.lnott.top:880/dx61.m3u8$LR•IPV4•76『线路40』 +深圳卫视,http://39.134.67.108/PLTV/88888888/224/3221225943/1.m3u8$LR•IPV4•76『线路41』 +深圳卫视,http://39.134.67.108/PLTV/88888888/224/3221225997/1.m3u8$LR•IPV4•76『线路42』 +深圳卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226313$LR•IPV4•76『线路43』 +深圳卫视,http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/shenzhenHD/__op/default/__f/index.m3u8$LR•IPV4•76『线路44』 +深圳卫视,http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/shenzhenHD/__op/default/__f/index.m3u8$LR•IPV4•76『线路45』 +深圳卫视,http://101.35.240.114:88/live.php?id=深圳卫视$LR•IPV4•76『线路46』 +深圳卫视,http://home.wwang.pw:35455/itv/1000000005000265028.m3u8?cdn=ystenlive$LR•IPV4•76『线路47』 +深圳卫视,http://58.57.40.22:9901/tsfile/live/1036_1.m3u8$LR•IPV4•76『线路48』 +深圳卫视,http://iptv.huuc.edu.cn/hls/szhd.m3u8$LR•IPV4•76『线路49』 +深圳卫视,http://ygbh.site/php/bfgd.php?id=100$LR•IPV4•76『线路50』 +深圳卫视,https://cc06.tv12.xyz/108.m3u8$LR•IPV4•76『线路51』 +深圳卫视,http://112.27.235.94:8000/hls/33/index.m3u8$LR•IPV4•76『线路52』 +深圳卫视,http://39.135.135.44/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225739/index.m3u8$LR•IPV4•76『线路53』 +深圳卫视,http://t.061899.xyz/tl/dq.php?id=szws$LR•IPV4•76『线路54』 +深圳卫视,https://zby.130519.xyz/PLTV/11/224/3221225728/index.m3u8$LR•IPV4•76『线路55』 +深圳卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010068$LR•IPV4•76『线路56』 +深圳卫视,http://iptv.huuc.edu.cn/hls/szhd.m3u8$LR•IPV4•76『线路57』 +深圳卫视,https://smart.pendy.dpdns.org/Smart.php?id=shenzhen$LR•IPV4•76『线路58』 +深圳卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003873474.m3u8$LR•IPV4•76『线路59』 +深圳卫视,http://z.b.bkpcp.top/m.php?id=szws$LR•IPV4•76『线路60』 +深圳卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226313/index.m3u8$LR•IPV6•76『线路61』 +深圳卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226313/index.m3u8$LR•IPV6•76『线路62』 +深圳卫视,http://[2409:8087:2001:20:2800:0:df6e:eb11]:80/ott.mobaibox.com/PLTV/4/224/3221227555/index.m3u8$LR•IPV6•76『线路63』 +深圳卫视,http://yc.myds.me:35455/itv/5000000004000007410.m3u8?cdn=bestzb$LR•IPV4•76『线路64』 +深圳卫视,http://nas.suntao.online:35455/itv/5000000004000007410.m3u8?cdn=bestzb$LR•IPV4•76『线路65』 +深圳卫视,http://148.135.93.213:81/live.php?id=深圳卫视$LR•IPV4•76『线路66』 +深圳卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010068$LR•IPV4•76『线路67』 +深圳卫视,http://iptv.huuc.edu.cn/hls/szhd.m3u8$LR•IPV4•76『线路68』 +深圳卫视,https://smart.pendy.dpdns.org/Smart.php?id=shenzhen$LR•IPV4•76『线路69』 +深圳卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003873474.m3u8$LR•IPV4•76『线路70』 +深圳卫视,http://z.b.bkpcp.top/m.php?id=szws$LR•IPV4•76『线路71』 +深圳卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226313/index.m3u8$LR•IPV6•76『线路72』 +深圳卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226313/index.m3u8$LR•IPV6•76『线路73』 +深圳卫视,http://[2409:8087:2001:20:2800:0:df6e:eb11]:80/ott.mobaibox.com/PLTV/4/224/3221227555/index.m3u8$LR•IPV6•76『线路74』 +深圳卫视,http://yc.myds.me:35455/itv/5000000004000007410.m3u8?cdn=bestzb$LR•IPV4•76『线路75』 +深圳卫视,http://nas.suntao.online:35455/itv/5000000004000007410.m3u8?cdn=bestzb$LR•IPV4•76『线路76』 +广东卫视,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•76『线路1』 +广东卫视,http://120.76.248.139/live/bfgd/4200000092.m3u8$LR•IPV4•76『线路2』 +广东卫视,http://183.215.134.239:19901/tsfile/live/0125_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•76『线路3』 +广东卫视,https://cc06.tv12.xyz/43.m3u8$LR•IPV4•76『线路4』 +广东卫视,http://183.215.134.239:19901/tsfile/live/0125_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•76『线路5』 +广东卫视,http://120.76.248.139/live/bfgd/4200000092.m3u8$LR•IPV4•76『线路6』 +广东卫视,http://183.215.134.239:19901/tsfile/live/0125_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•76『线路7』 +广东卫视,https://cc06.tv12.xyz/43.m3u8$LR•IPV4•76『线路8』 +广东卫视,http://183.215.134.239:19901/tsfile/live/0125_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•76『线路9』 +广东卫视,http://101.74.28.84:9901/tsfile/live/0125_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•76『线路10』 +广东卫视,http://1.195.131.143:9901/tsfile/live/0125_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•76『线路11』 +广东卫视,http://101.66.198.42:9901/tsfile/live/0125_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•76『线路12』 +广东卫视,http://61.156.228.12:8154/tsfile/live/0125_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•76『线路13』 +广东卫视,http://php.jdshipin.com:8880/TVOD/gsyd.php?id=9900000520$LR•IPV4•76『线路14』 +广东卫视,http://z.b.bkpcp.top/m.php?id=gdws$LR•IPV4•76『线路15』 +广东卫视,http://j.x.bkpcp.top/jx/GUANGDHD$LR•IPV4•76『线路16』 +广东卫视,http://goo.bkpcp.top/mg/gdws$LR•IPV4•76『线路17』 +广东卫视,http://iptv.huuc.edu.cn/hls/gdhd.m3u8$LR•IPV4•76『线路18』 +广东卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003873459.m3u8$LR•IPV4•76『线路19』 +广东卫视,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227201/index.m3u8$LR•IPV4•76『线路20』 +广东卫视,http://183.94.1.118:8801/tsfile/live/0125_1.m3u8$LR•IPV4•76『线路21』 +广东卫视,http://120.192.226.35:8009/hls/36/index.m3u8$LR•IPV4•76『线路22』 +广东卫视,http://61.138.128.226:19901/tsfile/live/0125_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•76『线路23』 +广东卫视,http://222.173.108.238:352/tsfile/live/0125_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•76『线路24』 +广东卫视,http://36.105.100.208:35455/itv/1000000005000265034.m3u8?cdn=ystenlive$LR•IPV4•76『线路25』 +广东卫视,http://iptv.0564.org:35455/itv/1000000005000265034.m3u8?cdn=ystenlive$LR•IPV4•76『线路26』 +广东卫视,http://my.tmos.cn:15181/chs006.m3u8$LR•IPV4•76『线路27』 +广东卫视,http://mh0.asia:35455/itv/1000000005000265034.m3u8?cdn=ystenlive$LR•IPV4•76『线路28』 +广东卫视,http://3501776.xyz:35455/itv/1000000005000265034.m3u8?cdn=ystenlive$LR•IPV4•76『线路29』 +广东卫视,http://150.158.112.123/%E5%85%AC%E4%BC%97%E5%8F%B7~%E7%8E%89%E7%8E%89%E8%BD%AF%E4%BB%B6%E5%BA%93/mg.php?id=gdws$LR•IPV4•76『线路30』 +广东卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226248/index.m3u8$LR•IPV6•76『线路31』 +广东卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226248/index.m3u8$LR•IPV6•76『线路32』 +广东卫视,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•76『线路33』 +广东卫视,https://live.mxdyeah.top/live.php?id=guangdongHD$LR•IPV4•76『线路34』 +广东卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226248/index.m3u8$LR•IPV4•76『线路35』 +广东卫视,http://k.061899.xyz/m.php?id=gdws$LR•IPV4•76『线路36』 +广东卫视,http://t.061899.xyz/tl/tl.php?id=gdws$LR•IPV4•76『线路37』 +广东卫视,http://sh.lnott.top:880/dx40.m3u8$LR•IPV4•76『线路38』 +广东卫视,http://39.134.67.108/PLTV/88888888/224/3221225962/1.m3u8$LR•IPV4•76『线路39』 +广东卫视,http://39.134.67.108/PLTV/88888888/224/3221225966/1.m3u8$LR•IPV4•76『线路40』 +广东卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226248$LR•IPV4•76『线路41』 +广东卫视,http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/guangdongHD/__op/default/__f/index.m3u8$LR•IPV4•76『线路42』 +广东卫视,http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/guangdongHD/__op/default/__f/index.m3u8$LR•IPV4•76『线路43』 +广东卫视,http://101.35.240.114:88/live.php?id=广东卫视$LR•IPV4•76『线路44』 +广东卫视,http://home.wwang.pw:35455/itv/1000000005000265034.m3u8?cdn=ystenlive$LR•IPV4•76『线路45』 +广东卫视,http://39.164.160.249:9901/tsfile/live/0125_1.m3u8$LR•IPV4•76『线路46』 +广东卫视,https://piccpndks.v.kcdnvip.com/audio/guangdong_2/index.m3u8$LR•IPV4•76『线路47』 +广东卫视,http://iptv.huuc.edu.cn/hls/gdhd.m3u8$LR•IPV4•76『线路48』 +广东卫视,http://ygbh.site/php/bfgd.php?id=092$LR•IPV4•76『线路49』 +广东卫视,https://cc06.tv12.xyz/43.m3u8$LR•IPV4•76『线路50』 +广东卫视,http://112.27.235.94:8000/hls/30/index.m3u8$LR•IPV4•76『线路51』 +广东卫视,http://39.135.133.177/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226248/index.m3u8$LR•IPV4•76『线路52』 +广东卫视,http://mg.hmysapp.cn:177/ckmg/zb.php?id=gdws$LR•IPV4•76『线路53』 +广东卫视,http://t.061899.xyz/tl/dq.php?id=gdws$LR•IPV4•76『线路54』 +广东卫视,https://zby.130519.xyz/PLTV/11/224/3221225731/index.m3u8$LR•IPV4•76『线路55』 +广东卫视,http://php.jdshipin.com:8880/TVOD/gsyd.php?id=9900000520$LR•IPV4•76『线路56』 +广东卫视,http://z.b.bkpcp.top/m.php?id=gdws$LR•IPV4•76『线路57』 +广东卫视,http://j.x.bkpcp.top/jx/GUANGDHD$LR•IPV4•76『线路58』 +广东卫视,http://goo.bkpcp.top/mg/gdws$LR•IPV4•76『线路59』 +广东卫视,http://iptv.huuc.edu.cn/hls/gdhd.m3u8$LR•IPV4•76『线路60』 +广东卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003873459.m3u8$LR•IPV4•76『线路61』 +广东卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226248/index.m3u8$LR•IPV6•76『线路62』 +广东卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226248/index.m3u8$LR•IPV6•76『线路63』 +广东卫视,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•76『线路64』 +广东卫视,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227201/index.m3u8$LR•IPV4•76『线路65』 +广东卫视,http://148.135.93.213:81/live.php?id=广东卫视$LR•IPV4•76『线路66』 +广东卫视,http://php.jdshipin.com:8880/TVOD/gsyd.php?id=9900000520$LR•IPV4•76『线路67』 +广东卫视,http://z.b.bkpcp.top/m.php?id=gdws$LR•IPV4•76『线路68』 +广东卫视,http://j.x.bkpcp.top/jx/GUANGDHD$LR•IPV4•76『线路69』 +广东卫视,http://goo.bkpcp.top/mg/gdws$LR•IPV4•76『线路70』 +广东卫视,http://iptv.huuc.edu.cn/hls/gdhd.m3u8$LR•IPV4•76『线路71』 +广东卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003873459.m3u8$LR•IPV4•76『线路72』 +广东卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226248/index.m3u8$LR•IPV6•76『线路73』 +广东卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226248/index.m3u8$LR•IPV6•76『线路74』 +广东卫视,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•76『线路75』 +广东卫视,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227201/index.m3u8$LR•IPV4•76『线路76』 +广西卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227010/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EkAhb-89sxdm9fz6-heXCuw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•58『线路1』 +广西卫视,http://221.2.148.205:8154/tsfile/live/0113_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路2』 +广西卫视,http://60.16.0.216:5757/hls/45/index.m3u8$LR•IPV4•58『线路3』 +广西卫视,https://cc06.tv12.xyz/46.m3u8$LR•IPV4•58『线路4』 +广西卫视,http://221.2.148.205:8154/tsfile/live/0113_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路5』 +广西卫视,http://60.16.0.216:5757/hls/45/index.m3u8$LR•IPV4•58『线路6』 +广西卫视,https://cc06.tv12.xyz/46.m3u8$LR•IPV4•58『线路7』 +广西卫视,http://1.195.131.143:9901/tsfile/live/0113_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路8』 +广西卫视,http://101.66.198.42:9901/tsfile/live/0113_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•58『线路9』 +广西卫视,http://101.74.28.84:9901/tsfile/live/0113_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路10』 +广西卫视,https://hlscdn.liangtv.cn/live/de0f97348eb84f62aa6b7d8cf0430770/dd505d87880c478f901f38560ca4d4e6.m3u8$LR•IPV4•58『线路11』 +广西卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226549$LR•IPV4•58『线路12』 +广西卫视,http://z.b.bkpcp.top/m.php?id=gxws$LR•IPV4•58『线路13』 +广西卫视,https://mobilelive.gxtv.cn/live/gx_live1004/playlist.m3u8$LR•IPV4•58『线路14』 +广西卫视,http://goo.bkpcp.top/mg/gxws$LR•IPV4•58『线路15』 +广西卫视,http://live.cztv.cc:85/live/ggpd.m3u8$LR•IPV4•58『线路16』 +广西卫视,https://smart.pendy.dpdns.org/Smart.php?id=guangxi$LR•IPV4•58『线路17』 +广西卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003887394.m3u8$LR•IPV4•58『线路18』 +广西卫视,http://120.192.226.35:8009/hls/53/index.m3u8$LR•IPV4•58『线路19』 +广西卫视,http://36.32.174.67:60080/newlive/live/hls/38/live.m3u8$LR•IPV4•58『线路20』 +广西卫视,http://cssbyd.imwork.net:8082/hls/33/index.m3u8$LR•IPV4•58『线路21』 +广西卫视,http://61.138.128.226:19901/tsfile/live/0113_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路22』 +广西卫视,http://36.105.100.208:35455/itv/5000000011000031118.m3u8?cdn=bestzb$LR•IPV4•58『线路23』 +广西卫视,http://116.9.204.242:9901/tsfile/live/0113_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路24』 +广西卫视,http://113.118.15.210:808/hls/56/index.m3u8$LR•IPV4•58『线路25』 +广西卫视,http://110.7.131.4:9901/tsfile/live/0113_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路26』 +广西卫视,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=6313&tk=23a9aca1f79f$LR•IPV4•58『线路27』 +广西卫视,https://www.yangshipin.cn/tv/home?pid=600002509$LR•IPV4•58『线路28』 +广西卫视,http://[2409:8087:1a01:df::4047]:80/TVOD/88888888/224/3221226091/main.m3u8$LR•IPV6•58『线路29』 +广西卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226549/index.m3u8$LR•IPV6•58『线路30』 +广西卫视,https://live.mxdyeah.top/live.php?id=guangxiHD$LR•IPV4•58『线路31』 +广西卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226549/index.m3u8$LR•IPV4•58『线路32』 +广西卫视,http://k.061899.xyz/m.php?id=gxws$LR•IPV4•58『线路33』 +广西卫视,http://t.061899.xyz/tl/tl.php?id=gxws$LR•IPV4•58『线路34』 +广西卫视,http://sh.lnott.top:880/dx41.m3u8$LR•IPV4•58『线路35』 +广西卫视,http://39.134.67.108/PLTV/88888888/224/3221226024/1.m3u8$LR•IPV4•58『线路36』 +广西卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226549$LR•IPV4•58『线路37』 +广西卫视,http://live.gxrb.com.cn/tv/gxtvlive03/index.m3u8$LR•IPV4•58『线路38』 +广西卫视,http://148.135.93.213/live.php?id=广西卫视$LR•IPV4•58『线路39』 +广西卫视,http://home.wwang.pw:35455/itv/5000000011000031118.m3u8?cdn=bestzb$LR•IPV4•58『线路40』 +广西卫视,https://cc06.tv12.xyz/46.m3u8$LR•IPV4•58『线路41』 +广西卫视,https://piccpndks.v.kcdnvip.com/audio/guangxi_2/index.m3u8$LR•IPV4•58『线路42』 +广西卫视,http://ygbh.site/php/bfgd.php?id=116$LR•IPV4•58『线路43』 +广西卫视,https://cc06.tv12.xyz/46.m3u8$LR•IPV4•58『线路44』 +广西卫视,http://39.135.133.160/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226380/index.m3u8$LR•IPV4•58『线路45』 +广西卫视,http://mg.hmysapp.cn:177/ckmg/zb.php?id=gxws$LR•IPV4•58『线路46』 +广西卫视,https://zby.130519.xyz/PLTV/11/224/3221226084/index.m3u8$LR•IPV4•58『线路47』 +广西卫视,http://148.135.93.213:81/live.php?id=广西卫视$LR•IPV4•58『线路48』 +广西卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226549$LR•IPV4•58『线路49』 +广西卫视,http://z.b.bkpcp.top/m.php?id=gxws$LR•IPV4•58『线路50』 +广西卫视,https://mobilelive.gxtv.cn/live/gx_live1004/playlist.m3u8$LR•IPV4•58『线路51』 +广西卫视,http://goo.bkpcp.top/mg/gxws$LR•IPV4•58『线路52』 +广西卫视,http://live.cztv.cc:85/live/ggpd.m3u8$LR•IPV4•58『线路53』 +广西卫视,https://hlscdn.liangtv.cn/live/de0f97348eb84f62aa6b7d8cf0430770/dd505d87880c478f901f38560ca4d4e6.m3u8$LR•IPV4•58『线路54』 +广西卫视,http://[2409:8087:1a01:df::4047]:80/TVOD/88888888/224/3221226091/main.m3u8$LR•IPV6•58『线路55』 +广西卫视,https://smart.pendy.dpdns.org/Smart.php?id=guangxi$LR•IPV4•58『线路56』 +广西卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003887394.m3u8$LR•IPV4•58『线路57』 +广西卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226549/index.m3u8$LR•IPV6•58『线路58』 +厦门卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003887454.m3u8$LR•IPV4•31『线路1』 +厦门卫视,http://goo.bkpcp.top/mg/xmws$LR•IPV4•31『线路2』 +厦门卫视,https://stream1.freetv.fun/cc2a1fdd054d0069e308a8c5358596fe1ba08562b102d8223a3b02e620082f96.m3u8$LR•IPV4•31『线路3』 +厦门卫视,http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226219/index.m3u8$LR•IPV4•31『线路4』 +厦门卫视,http://36.105.100.208:35455/itv/1000000005000266006.m3u8?cdn=ystenlive$LR•IPV4•31『线路5』 +厦门卫视,http://31182.hlsplay.aodianyun.com/lms_31182/tv_channel_175.m3u8?zfud$LR•IPV4•31『线路6』 +厦门卫视,http://113.118.15.210:808/hls/17/index.m3u8$LR•IPV4•31『线路7』 +厦门卫视,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=1695&tk=23a9aca1f79f$LR•IPV4•31『线路8』 +厦门卫视,https://live1b.kxm.xmtv.cn/xmtvbf/tvzb/live.m3u8$LR•IPV4•31『线路9』 +厦门卫视,http://139.129.231.228:50060/rtp/239.21.2.6:5002$LR•IPV4•31『线路10』 +厦门卫视,http://183.11.239.36:808/hls/17/index.m3u8$LR•IPV4•31『线路11』 +厦门卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226542/1.m3u8$LR•IPV6•31『线路12』 +厦门卫视,http://[2409:8087:74F1:0021::0008]/270000001128/9900000058/index.m3u8$LR•IPV6•31『线路13』 +厦门卫视,http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221226964/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•31『线路14』 +厦门卫视,http://[2409:8087:3428:20:500::1009]:6610/PLTV/88888888/224/3221226964/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•31『线路15』 +厦门卫视,http://[2409:8087:5e01:34::23]:6610/ZTE_CMS/00000001000000060000000000000193/index.m3u8$LR•IPV6•31『线路16』 +厦门卫视,http://e2.woc.iiiya.cn:28888/rtp/239.61.2.11:8060$LR•IPV4•31『线路17』 +厦门卫视,http://home.wwang.pw:35455/itv/1000000005000266006.m3u8?cdn=ystenlive$LR•IPV4•31『线路18』 +厦门卫视,http://183.11.239.36:808/hls/17/index.m3u8$LR•IPV4•31『线路19』 +厦门卫视,http://8.138.7.223/tv/fjtv1.php?id=xmws$LR•IPV4•31『线路20』 +厦门卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003887454.m3u8$LR•IPV4•31『线路21』 +厦门卫视,http://goo.bkpcp.top/mg/xmws$LR•IPV4•31『线路22』 +厦门卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226542/1.m3u8$LR•IPV6•31『线路23』 +厦门卫视,http://[2409:8087:74F1:0021::0008]/270000001128/9900000058/index.m3u8$LR•IPV6•31『线路24』 +厦门卫视,http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221226964/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•31『线路25』 +厦门卫视,http://[2409:8087:3428:20:500::1009]:6610/PLTV/88888888/224/3221226964/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•31『线路26』 +厦门卫视,http://[2409:8087:5e01:34::23]:6610/ZTE_CMS/00000001000000060000000000000193/index.m3u8$LR•IPV6•31『线路27』 +厦门卫视,https://stream1.freetv.fun/cc2a1fdd054d0069e308a8c5358596fe1ba08562b102d8223a3b02e620082f96.m3u8$LR•IPV4•31『线路28』 +厦门卫视,https://epg.pw/stream/aa65dd411565991ace44f9e5934bd018fdd52122e052d471a363b6ee839e1079.ctv$LR•IPV4•31『线路29』 +厦门卫视,http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226219/index.m3u8$LR•IPV4•31『线路30』 +厦门卫视,https://epg.pw/stream/aa65dd411565991ace44f9e5934bd018fdd52122e052d471a363b6ee839e1079.ctv$LR•IPV4•31『线路31』 +南方卫视,http://60.16.0.216:5757/hls/28/index.m3u8$LR•IPV4•3『线路1』 +南方卫视,http://60.16.0.216:5757/hls/28/index.m3u8$LR•IPV4•3『线路2』 +南方卫视,http://60.16.0.216:5757/hls/28/index.m3u8$LR•IPV4•3『线路3』 +甘肃卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227020/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Err-CLugPnTcUinEM8JeySg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•44『线路1』 +甘肃卫视,https://cc06.tv12.xyz/44.m3u8$LR•IPV4•44『线路2』 +甘肃卫视,https://cc06.tv12.xyz/44.m3u8$LR•IPV4•44『线路3』 +甘肃卫视,http://j.x.bkpcp.top/jx/GSWS$LR•IPV4•44『线路4』 +甘肃卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010098$LR•IPV4•44『线路5』 +甘肃卫视,http://z.b.bkpcp.top/m.php?id=gsws$LR•IPV4•44『线路6』 +甘肃卫视,http://goo.bkpcp.top/mg/gsws$LR•IPV4•44『线路7』 +甘肃卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003887450.m3u8$LR•IPV4•44『线路8』 +甘肃卫视,http://120.192.226.35:8009/hls/51/index.m3u8$LR•IPV4•44『线路9』 +甘肃卫视,http://cssbyd.imwork.net:8082/hls/48/index.m3u8$LR•IPV4•44『线路10』 +甘肃卫视,http://61.138.128.226:19901/tsfile/live/0141_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•44『线路11』 +甘肃卫视,http://36.105.100.208:35455/itv/5000000011000031121.m3u8?cdn=bestzb$LR•IPV4•44『线路12』 +甘肃卫视,http://113.118.15.210:808/hls/119/index.m3u8$LR•IPV4•44『线路13』 +甘肃卫视,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=9614&tk=23a9aca1f79f$LR•IPV4•44『线路14』 +甘肃卫视,http://120.238.94.10:9901/tsfile/live/1079_1.m3u8$LR•IPV4•44『线路15』 +甘肃卫视,http://139.129.231.228:50060/rtp/239.21.2.22:5002$LR•IPV4•44『线路16』 +甘肃卫视,http://111.61.236.247:9081/hls/54/index.m3u8$LR•IPV4•44『线路17』 +甘肃卫视,http://183.11.239.36:808/hls/119/index.m3u8$LR•IPV4•44『线路18』 +甘肃卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227020/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Err-CLugPnTcUinEM8JeySg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•44『线路19』 +甘肃卫视,http://[2409:8c02:21c:60::2b]/live.rxip.sc96655.com/live/gsws_4000.m3u8$LR•IPV6•44『线路20』 +甘肃卫视,http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221225845/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•44『线路21』 +甘肃卫视,http://[2409:8087:3428:20:500::1009]:6610/PLTV/88888888/224/3221225845/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•44『线路22』 +甘肃卫视,http://sh.lnott.top:880/dx56.m3u8$LR•IPV4•44『线路23』 +甘肃卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225633$LR•IPV4•44『线路24』 +甘肃卫视,https://hls.gstv.com.cn/49048r/6e1sy2.m3u8$LR•IPV4•44『线路25』 +甘肃卫视,http://148.135.93.213/live.php?id=甘肃卫视$LR•IPV4•44『线路26』 +甘肃卫视,http://home.wwang.pw:35455/itv/5000000011000031121.m3u8?cdn=bestzb$LR•IPV4•44『线路27』 +甘肃卫视,http://58.57.40.22:9901/tsfile/live/1056_1.m3u8$LR•IPV4•44『线路28』 +甘肃卫视,http://ygbh.site/php/bfgd.php?id=119$LR•IPV4•44『线路29』 +甘肃卫视,https://cc06.tv12.xyz/44.m3u8$LR•IPV4•44『线路30』 +甘肃卫视,http://39.134.65.67/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225633/index.m3u8$LR•IPV4•44『线路31』 +甘肃卫视,http://mg.hmysapp.cn:177/ckmg/zb.php?id=gsws$LR•IPV4•44『线路32』 +甘肃卫视,http://t.061899.xyz/tl/dq.php?id=gsws$LR•IPV4•44『线路33』 +甘肃卫视,https://zby.130519.xyz/PLTV/11/224/3221226090/index.m3u8$LR•IPV4•44『线路34』 +甘肃卫视,http://148.135.93.213:81/live.php?id=甘肃卫视$LR•IPV4•44『线路35』 +甘肃卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010098$LR•IPV4•44『线路36』 +甘肃卫视,http://z.b.bkpcp.top/m.php?id=gsws$LR•IPV4•44『线路37』 +甘肃卫视,http://j.x.bkpcp.top/jx/GSWS$LR•IPV4•44『线路38』 +甘肃卫视,http://goo.bkpcp.top/mg/gsws$LR•IPV4•44『线路39』 +甘肃卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003887450.m3u8$LR•IPV4•44『线路40』 +甘肃卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227020/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Err-CLugPnTcUinEM8JeySg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•44『线路41』 +甘肃卫视,http://[2409:8c02:21c:60::2b]/live.rxip.sc96655.com/live/gsws_4000.m3u8$LR•IPV6•44『线路42』 +甘肃卫视,http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221225845/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•44『线路43』 +甘肃卫视,http://[2409:8087:3428:20:500::1009]:6610/PLTV/88888888/224/3221225845/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•44『线路44』 +贵州卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227012/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EnqBF03rFwPucF8ODtWxLQQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•62『线路1』 +贵州卫视,http://zzssw01.55555.io:9901/tsfile/live/0120_1.m3u8$LR•IPV4•62『线路2』 +贵州卫视,http://60.16.0.216:5757/hls/37/index.m3u8$LR•IPV4•62『线路3』 +贵州卫视,https://cc06.tv12.xyz/48.m3u8$LR•IPV4•62『线路4』 +贵州卫视,http://zzssw01.55555.io:9901/tsfile/live/0120_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•62『线路5』 +贵州卫视,http://zzssw01.55555.io:9901/tsfile/live/0120_1.m3u8$LR•IPV4•62『线路6』 +贵州卫视,http://60.16.0.216:5757/hls/37/index.m3u8$LR•IPV4•62『线路7』 +贵州卫视,https://cc06.tv12.xyz/48.m3u8$LR•IPV4•62『线路8』 +贵州卫视,http://zzssw01.55555.io:9901/tsfile/live/0120_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•62『线路9』 +贵州卫视,http://101.74.28.84:9901/tsfile/live/0120_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•62『线路10』 +贵州卫视,http://101.66.198.42:9901/tsfile/live/0120_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•62『线路11』 +贵州卫视,http://1.195.131.143:9901/tsfile/live/0120_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•62『线路12』 +贵州卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226474$LR•IPV4•62『线路13』 +贵州卫视,http://z.b.bkpcp.top/m.php?id=gzws$LR•IPV4•62『线路14』 +贵州卫视,http://j.x.bkpcp.top/jx/GUIZHD$LR•IPV4•62『线路15』 +贵州卫视,http://goo.bkpcp.top/mg/gzws$LR•IPV4•62『线路16』 +贵州卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003873471.m3u8$LR•IPV4•62『线路17』 +贵州卫视,http://120.192.226.35:8009/hls/50/index.m3u8$LR•IPV4•62『线路18』 +贵州卫视,http://113.56.95.69:53765/tsfile/live/1018_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•62『线路19』 +贵州卫视,http://123.182.60.29:9002/hls/38/index.m3u8$LR•IPV4•62『线路20』 +贵州卫视,http://cssbyd.imwork.net:8082/hls/39/index.m3u8$LR•IPV4•62『线路21』 +贵州卫视,http://61.138.128.226:19901/tsfile/live/0120_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•62『线路22』 +贵州卫视,http://36.105.100.208:35455/itv/5000000004000025843.m3u8?cdn=bestzb$LR•IPV4•62『线路23』 +贵州卫视,http://113.118.15.210:808/hls/49/index.m3u8$LR•IPV4•62『线路24』 +贵州卫视,http://110.7.131.4:9901/tsfile/live/0120_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•62『线路25』 +贵州卫视,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=1716&tk=23a9aca1f79f$LR•IPV4•62『线路26』 +贵州卫视,https://www.yangshipin.cn/tv/home?pid=600002490$LR•IPV4•62『线路27』 +贵州卫视,http://[2409:8087:1a01:df::4030]:80/TVOD/88888888/224/3221225974/main.m3u8$LR•IPV6•62『线路28』 +贵州卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226474/index.m3u8$LR•IPV6•62『线路29』 +贵州卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226474/index.m3u8$LR•IPV6•62『线路30』 +贵州卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227012/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EnqBF03rFwPucF8ODtWxLQQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•62『线路31』 +贵州卫视,http://[2409:8087:2001:20:2800:0:df6e:eb09]:80/ott.mobaibox.com/PLTV/4/224/3221228136/index.m3u8$LR•IPV6•62『线路32』 +贵州卫视,https://live.mxdyeah.top/live.php?id=guizhouHD$LR•IPV4•62『线路33』 +贵州卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226474/index.m3u8$LR•IPV4•62『线路34』 +贵州卫视,http://k.061899.xyz/m.php?id=gzws$LR•IPV4•62『线路35』 +贵州卫视,http://t.061899.xyz/tl/tl.php?id=gzws$LR•IPV4•62『线路36』 +贵州卫视,http://39.134.67.108/PLTV/88888888/224/3221225974/1.m3u8$LR•IPV4•62『线路37』 +贵州卫视,http://39.134.67.108/PLTV/88888888/224/3221226030/1.m3u8$LR•IPV4•62『线路38』 +贵州卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226474$LR•IPV4•62『线路39』 +贵州卫视,http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/guizhouHD/__op/default/__f/index.m3u8$LR•IPV4•62『线路40』 +贵州卫视,http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/guizhouHD/__op/default/__f/index.m3u8$LR•IPV4•62『线路41』 +贵州卫视,http://148.135.93.213/live.php?id=贵州卫视$LR•IPV4•62『线路42』 +贵州卫视,http://home.wwang.pw:35455/itv/5000000004000025843.m3u8?cdn=bestzb$LR•IPV4•62『线路43』 +贵州卫视,http://58.57.40.22:9901/tsfile/live/1042_1.m3u8$LR•IPV4•62『线路44』 +贵州卫视,http://ygbh.site/php/bfgd.php?id=101$LR•IPV4•62『线路45』 +贵州卫视,https://cc06.tv12.xyz/48.m3u8$LR•IPV4•62『线路46』 +贵州卫视,http://112.27.235.94:8000/hls/46/index.m3u8$LR•IPV4•62『线路47』 +贵州卫视,http://39.134.65.79/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225626/index.m3u8$LR•IPV4•62『线路48』 +贵州卫视,http://mg.hmysapp.cn:177/ckmg/zb.php?id=gzws$LR•IPV4•62『线路49』 +贵州卫视,http://t.061899.xyz/tl/dq.php?id=gzws$LR•IPV4•62『线路50』 +贵州卫视,https://zby.130519.xyz/PLTV/11/224/3221226173/index.m3u8$LR•IPV4•62『线路51』 +贵州卫视,http://148.135.93.213:81/live.php?id=贵州卫视$LR•IPV4•62『线路52』 +贵州卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226474$LR•IPV4•62『线路53』 +贵州卫视,http://z.b.bkpcp.top/m.php?id=gzws$LR•IPV4•62『线路54』 +贵州卫视,http://j.x.bkpcp.top/jx/GUIZHD$LR•IPV4•62『线路55』 +贵州卫视,http://goo.bkpcp.top/mg/gzws$LR•IPV4•62『线路56』 +贵州卫视,http://[2409:8087:1a01:df::4030]:80/TVOD/88888888/224/3221225974/main.m3u8$LR•IPV6•62『线路57』 +贵州卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003873471.m3u8$LR•IPV4•62『线路58』 +贵州卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226474/index.m3u8$LR•IPV6•62『线路59』 +贵州卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226474/index.m3u8$LR•IPV6•62『线路60』 +贵州卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227012/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EnqBF03rFwPucF8ODtWxLQQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•62『线路61』 +贵州卫视,http://[2409:8087:2001:20:2800:0:df6e:eb09]:80/ott.mobaibox.com/PLTV/4/224/3221228136/index.m3u8$LR•IPV6•62『线路62』 +河北卫视,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•61『线路1』 +河北卫视,https://cc06.tv12.xyz/51.m3u8$LR•IPV4•61『线路2』 +河北卫视,https://cc06.tv12.xyz/51.m3u8$LR•IPV4•61『线路3』 +河北卫视,http://1.195.131.143:9901/tsfile/live/0117_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路4』 +河北卫视,http://106.118.70.125:9901/tsfile/live/0117_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路5』 +河北卫视,http://101.66.198.42:9901/tsfile/live/0117_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•61『线路6』 +河北卫视,http://101.74.28.84:9901/tsfile/live/0117_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路7』 +河北卫视,http://61.156.228.12:8154/tsfile/live/0117_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路8』 +河北卫视,https://jwplay.hebyun.com.cn/live/hbwstv/1500k/tzwj_video.m3u8$LR•IPV4•61『线路9』 +河北卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010101$LR•IPV4•61『线路10』 +河北卫视,http://z.b.bkpcp.top/m.php?id=hbws$LR•IPV4•61『线路11』 +河北卫视,http://iptv.huuc.edu.cn/hls/hebhd.m3u8$LR•IPV4•61『线路12』 +河北卫视,http://tv.pull.hebtv.com/jishi/weishipindao.m3u8?t=2510710360&k=3d44740039027301acf8341d7361ab59$LR•IPV4•61『线路13』 +河北卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003873460.m3u8$LR•IPV4•61『线路14』 +河北卫视,https://live.lalifeier.eu.org/hebtv/hbws.m3u8?t=1746372302&key=b89007ab1e7b4801eaa22ec0048feb91$LR•IPV4•61『线路15』 +河北卫视,https://tv.pull.hebtv.com/jishi/weishipindao.m3u8?t=1746316818&k=7e9b50f9b9b642ffd4ce1363bb6847ab$LR•IPV4•61『线路16』 +河北卫视,http://120.192.226.35:8009/hls/55/index.m3u8$LR•IPV4•61『线路17』 +河北卫视,http://113.56.95.69:53765/tsfile/live/1022_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路18』 +河北卫视,http://123.182.60.29:9002/hls/18/index.m3u8$LR•IPV4•61『线路19』 +河北卫视,http://36.32.174.67:60080/newlive/live/hls/36/live.m3u8$LR•IPV4•61『线路20』 +河北卫视,http://61.138.128.226:19901/tsfile/live/0117_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路21』 +河北卫视,http://222.173.108.238:352/tsfile/live/1013_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路22』 +河北卫视,http://36.105.100.208:35455/itv/5000000006000040016.m3u8?cdn=bestzb$LR•IPV4•61『线路23』 +河北卫视,http://113.118.15.210:808/hls/54/index.m3u8$LR•IPV4•61『线路24』 +河北卫视,http://110.7.131.4:9901/tsfile/live/0117_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•61『线路25』 +河北卫视,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=6178&tk=23a9aca1f79f$LR•IPV4•61『线路26』 +河北卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226406/index.m3u8$LR•IPV6•61『线路27』 +河北卫视,http://[2409:8087:1a01:df::4035]:80/TVOD/88888888/224/3221225961/main.m3u8$LR•IPV6•61『线路28』 +河北卫视,https://live.mxdyeah.top/live.php?id=hebeiSD$LR•IPV4•61『线路29』 +河北卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226406/index.m3u8$LR•IPV4•61『线路30』 +河北卫视,http://k.061899.xyz/m.php?id=hbws$LR•IPV4•61『线路31』 +河北卫视,http://t.061899.xyz/tl/tl.php?id=hbws$LR•IPV4•61『线路32』 +河北卫视,http://39.134.67.108/PLTV/88888888/224/3221225961/1.m3u8$LR•IPV4•61『线路33』 +河北卫视,http://39.134.67.108/PLTV/88888888/224/3221225991/1.m3u8$LR•IPV4•61『线路34』 +河北卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226406$LR•IPV4•61『线路35』 +河北卫视,http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/hebeiSD/__op/default/__f/index.m3u8$LR•IPV4•61『线路36』 +河北卫视,http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/hebeiSD/__op/default/__f/index.m3u8$LR•IPV4•61『线路37』 +河北卫视,http://tv.pull.hebtv.com/jishi/weishipindao.m3u8?t=2510710360&k=f1b16a3a3866dafecb94ec2bb4160e58$LR•IPV4•61『线路38』 +河北卫视,http://148.135.93.213/live.php?id=河北卫视$LR•IPV4•61『线路39』 +河北卫视,http://120.76.248.139/live/bfgd/4200000108.m3u8$LR•IPV4•61『线路40』 +河北卫视,http://home.wwang.pw:35455/itv/5000000006000040016.m3u8?cdn=bestzb$LR•IPV4•61『线路41』 +河北卫视,http://58.57.40.22:9901/tsfile/live/1044_1.m3u8$LR•IPV4•61『线路42』 +河北卫视,http://iptv.huuc.edu.cn/hls/hebhd.m3u8$LR•IPV4•61『线路43』 +河北卫视,http://ygbh.site/php/bfgd.php?id=108$LR•IPV4•61『线路44』 +河北卫视,https://cc06.tv12.xyz/51.m3u8$LR•IPV4•61『线路45』 +河北卫视,http://112.27.235.94:8000/hls/39/index.m3u8$LR•IPV4•61『线路46』 +河北卫视,http://39.135.133.180/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226406/index.m3u8$LR•IPV4•61『线路47』 +河北卫视,http://t.061899.xyz/tl/dq.php?id=hbws$LR•IPV4•61『线路48』 +河北卫视,https://zby.130519.xyz/PLTV/11/224/3221226107/index.m3u8$LR•IPV4•61『线路49』 +河北卫视,http://tv.pull.hebtv.com/jishi/weishipindao.m3u8?t=2510710360&k=3d44740039027301acf8341d7361ab59$LR•IPV4•61『线路50』 +河北卫视,http://148.135.93.213:81/live.php?id=河北卫视$LR•IPV4•61『线路51』 +河北卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010101$LR•IPV4•61『线路52』 +河北卫视,http://z.b.bkpcp.top/m.php?id=hbws$LR•IPV4•61『线路53』 +河北卫视,https://jwplay.hebyun.com.cn/live/hbwstv/1500k/tzwj_video.m3u8$LR•IPV4•61『线路54』 +河北卫视,http://iptv.huuc.edu.cn/hls/hebhd.m3u8$LR•IPV4•61『线路55』 +河北卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226406/index.m3u8$LR•IPV6•61『线路56』 +河北卫视,http://tv.pull.hebtv.com/jishi/weishipindao.m3u8?t=2510710360&k=3d44740039027301acf8341d7361ab59$LR•IPV4•61『线路57』 +河北卫视,http://[2409:8087:1a01:df::4035]:80/TVOD/88888888/224/3221225961/main.m3u8$LR•IPV6•61『线路58』 +河北卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003873460.m3u8$LR•IPV4•61『线路59』 +河北卫视,https://live.lalifeier.eu.org/hebtv/hbws.m3u8?t=1746372302&key=b89007ab1e7b4801eaa22ec0048feb91$LR•IPV4•61『线路60』 +河北卫视,https://tv.pull.hebtv.com/jishi/weishipindao.m3u8?t=1746316818&k=7e9b50f9b9b642ffd4ce1363bb6847ab$LR•IPV4•61『线路61』 +河南卫视,http://tvpull.dxhmt.cn:9081/tv/11425-1.m3u8$LR•IPV4•67『线路1』 +河南卫视,http://1.94.31.214/php/hntv.php?id=hnws$LR•IPV4•67『线路2』 +河南卫视,http://lxajh.top/tv/hn.php?id=hnws$LR•IPV4•67『线路3』 +河南卫视,https://cc06.tv12.xyz/49.m3u8$LR•IPV4•67『线路4』 +河南卫视,http://60.16.0.216:5757/hls/42/index.m3u8$LR•IPV4•67『线路5』 +河南卫视,http://tvpull.dxhmt.cn:9081/tv/11425-1.m3u8$LR•IPV4•67『线路6』 +河南卫视,http://1.94.31.214/php/hntv.php?id=hnws$LR•IPV4•67『线路7』 +河南卫视,http://lxajh.top/tv/hn.php?id=hnws$LR•IPV4•67『线路8』 +河南卫视,https://cc06.tv12.xyz/49.m3u8$LR•IPV4•67『线路9』 +河南卫视,http://60.16.0.216:5757/hls/42/index.m3u8$LR•IPV4•67『线路10』 +河南卫视,http://61.156.228.12:8154/tsfile/live/0139_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•67『线路11』 +河南卫视,http://1.195.131.143:9901/tsfile/live/1026_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•67『线路12』 +河南卫视,http://101.66.198.42:9901/tsfile/live/0139_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•67『线路13』 +河南卫视,http://123.163.21.101:9901/tsfile/live/0139_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•67『线路14』 +河南卫视,http://101.74.28.84:9901/tsfile/live/0139_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•67『线路15』 +河南卫视,http://223.167.245.215:8001/rtp/239.45.0.3:5140$LR•IPV4•67『线路16』 +河南卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226480$LR•IPV4•67『线路17』 +河南卫视,http://z.b.bkpcp.top/m.php?id=hnws$LR•IPV4•67『线路18』 +河南卫视,http://j.x.bkpcp.top/jx/HENHD$LR•IPV4•67『线路19』 +河南卫视,http://goo.bkpcp.top/mg/hnws$LR•IPV4•67『线路20』 +河南卫视,http://tvcdn.stream3.hndt.com/tv/65c4a6d5017e1000b2b6ea2500000000_transios/playlist.m3u8?wsSecret=7f59b59573ebfe76d91b35446bb207ad&wsTime=1746680128$LR•IPV4•67『线路21』 +河南卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003887270.m3u8$LR•IPV4•67『线路22』 +河南卫视,http://183.94.1.118:8801/tsfile/live/1006_1.m3u8$LR•IPV4•67『线路23』 +河南卫视,http://120.192.226.35:8009/hls/46/index.m3u8$LR•IPV4•67『线路24』 +河南卫视,http://cssbyd.imwork.net:8082/hls/37/index.m3u8$LR•IPV4•67『线路25』 +河南卫视,http://61.138.128.226:19901/tsfile/live/0139_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•67『线路26』 +河南卫视,http://36.105.100.208:35455/itv/1000000002000027731.m3u8?cdn=ystenlive$LR•IPV4•67『线路27』 +河南卫视,http://150.158.112.123/%E5%85%AC%E4%BC%97%E5%8F%B7~%E7%8E%89%E7%8E%89%E8%BD%AF%E4%BB%B6%E5%BA%93/mg.php?id=hnws$LR•IPV4•67『线路28』 +河南卫视,http://113.118.15.210:808/hls/51/index.m3u8$LR•IPV4•67『线路29』 +河南卫视,http://110.7.131.4:9901/tsfile/live/0139_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•67『线路30』 +河南卫视,http://211.101.234.24:866/aishang/migu.php/migu.php?id=hnws$LR•IPV4•67『线路31』 +河南卫视,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=6209&tk=23a9aca1f79f$LR•IPV4•67『线路32』 +河南卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226480/index.m3u8$LR•IPV6•67『线路33』 +河南卫视,https://live.mxdyeah.top/live.php?id=henanHD$LR•IPV4•67『线路34』 +河南卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226480/index.m3u8$LR•IPV4•67『线路35』 +河南卫视,http://k.061899.xyz/m.php?id=hnws$LR•IPV4•67『线路36』 +河南卫视,http://t.061899.xyz/tl/tl.php?id=hnws$LR•IPV4•67『线路37』 +河南卫视,http://39.134.67.108/PLTV/88888888/224/3221226023/1.m3u8$LR•IPV4•67『线路38』 +河南卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226480$LR•IPV4•67『线路39』 +河南卫视,http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/henanHD/__op/default/__f/index.m3u8$LR•IPV4•67『线路40』 +河南卫视,http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/henanHD/__op/default/__f/index.m3u8$LR•IPV4•67『线路41』 +河南卫视,http://148.135.93.213/live.php?id=河南卫视$LR•IPV4•67『线路42』 +河南卫视,http://home.wwang.pw:35455/itv/1000000002000027731.m3u8?cdn=ystenlive$LR•IPV4•67『线路43』 +河南卫视,http://58.57.40.22:9901/tsfile/live/1048_1.m3u8$LR•IPV4•67『线路44』 +河南卫视,http://tvcdn.stream3.hndt.com/tv/65c4a6d5017e1000b2b6ea2500000000_transios/playlist.m3u8?wsSecret=7503ba5613e0ca4a13046d6ab58862b4&wsTime=1759781478$LR•IPV4•67『线路45』 +河南卫视,http://ygbh.site/php/bfgd.php?id=104$LR•IPV4•67『线路46』 +河南卫视,https://cc06.tv12.xyz/49.m3u8$LR•IPV4•67『线路47』 +河南卫视,http://112.27.235.94:8000/hls/37/index.m3u8$LR•IPV4•67『线路48』 +河南卫视,http://39.135.133.163/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226480/index.m3u8$LR•IPV4•67『线路49』 +河南卫视,http://mg.hmysapp.cn:177/ckmg/zb.php?id=hnws$LR•IPV4•67『线路50』 +河南卫视,http://t.061899.xyz/tl/dq.php?id=hnws$LR•IPV4•67『线路51』 +河南卫视,http://lxajh.top/tv/hn.php?id=hnws$LR•IPV4•67『线路52』 +河南卫视,https://zby.130519.xyz/PLTV/11/224/3221226132/index.m3u8$LR•IPV4•67『线路53』 +河南卫视,http://1.94.31.214/php/hntv.php?id=hnws$LR•IPV4•67『线路54』 +河南卫视,http://148.135.93.213:81/live.php?id=河南卫视$LR•IPV4•67『线路55』 +河南卫视,http://1.94.31.214/php/hntv.php?id=hnws$LR•IPV4•67『线路56』 +河南卫视,http://223.167.245.215:8001/rtp/239.45.0.3:5140$LR•IPV4•67『线路57』 +河南卫视,http://tvpull.dxhmt.cn:9081/tv/11425-1.m3u8$LR•IPV4•67『线路58』 +河南卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226480$LR•IPV4•67『线路59』 +河南卫视,http://z.b.bkpcp.top/m.php?id=hnws$LR•IPV4•67『线路60』 +河南卫视,http://j.x.bkpcp.top/jx/HENHD$LR•IPV4•67『线路61』 +河南卫视,http://goo.bkpcp.top/mg/hnws$LR•IPV4•67『线路62』 +河南卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226480/index.m3u8$LR•IPV6•67『线路63』 +河南卫视,http://tvcdn.stream3.hndt.com/tv/65c4a6d5017e1000b2b6ea2500000000_transios/playlist.m3u8?wsSecret=7f59b59573ebfe76d91b35446bb207ad&wsTime=1746680128$LR•IPV4•67『线路64』 +河南卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003887270.m3u8$LR•IPV4•67『线路65』 +河南卫视,https://live.lalifeier.eu.org/hntv/hnws.m3u8?t=1746393735&key=728f36a221b96bc109f1ef1914592447$LR•IPV4•67『线路66』 +河南卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226480/index.m3u8$LR•IPV6•67『线路67』 +黑龙江卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226965/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E7UiKL56-L86ihmTWaZ6csw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•66『线路1』 +黑龙江卫视,http://112.27.235.94:8000/hls/48/index.m3u8$LR•IPV4•66『线路2』 +黑龙江卫视,https://cc06.tv12.xyz/53.m3u8$LR•IPV4•66『线路3』 +黑龙江卫视,http://112.27.235.94:8000/hls/48/index.m3u8$LR•IPV4•66『线路4』 +黑龙江卫视,https://cc06.tv12.xyz/53.m3u8$LR•IPV4•66『线路5』 +黑龙江卫视,http://1.195.131.143:9901/tsfile/live/0143_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路6』 +黑龙江卫视,http://61.156.228.12:8154/tsfile/live/0143_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路7』 +黑龙江卫视,http://101.66.198.42:9901/tsfile/live/0143_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•66『线路8』 +黑龙江卫视,http://101.74.28.84:9901/tsfile/live/0143_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路9』 +黑龙江卫视,http://l.cztvcloud.com/channels/lantian/SXyuyao3/720p.m3u8$LR•IPV4•66『线路10』 +黑龙江卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010056$LR•IPV4•66『线路11』 +黑龙江卫视,http://j.x.bkpcp.top/jx/HEILJHD$LR•IPV4•66『线路12』 +黑龙江卫视,http://iptv.huuc.edu.cn/hls/hljhd.m3u8$LR•IPV4•66『线路13』 +黑龙江卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003873470.m3u8$LR•IPV4•66『线路14』 +黑龙江卫视,http://z.b.bkpcp.top/m.php?id=hljws$LR•IPV4•66『线路15』 +黑龙江卫视,http://120.192.226.35:8009/hls/38/index.m3u8$LR•IPV4•66『线路16』 +黑龙江卫视,http://61.138.128.226:19901/tsfile/live/0143_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路17』 +黑龙江卫视,http://36.105.100.208:35455/itv/1000000005000265029.m3u8?cdn=ystenlive$LR•IPV4•66『线路18』 +黑龙江卫视,http://my.tmos.cn:15181/chs005.m3u8$LR•IPV4•66『线路19』 +黑龙江卫视,http://175.171.30.26:5111/hls/624121732/index.m3u8$LR•IPV4•66『线路20』 +黑龙江卫视,http://113.118.15.210:808/hls/48/index.m3u8$LR•IPV4•66『线路21』 +黑龙江卫视,http://110.7.131.4:9901/tsfile/live/0143_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•66『线路22』 +黑龙江卫视,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=9197&tk=23a9aca1f79f$LR•IPV4•66『线路23』 +黑龙江卫视,https://www.yangshipin.cn/tv/home?pid=600002498$LR•IPV4•66『线路24』 +黑龙江卫视,http://58.19.43.46:9901/tsfile/live/1008_1.m3u8$LR•IPV4•66『线路25』 +黑龙江卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226327/index.m3u8$LR•IPV6•66『线路26』 +黑龙江卫视,http://[2409:8087:1a01:df::4001]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226327/1.m3u8$LR•IPV6•66『线路27』 +黑龙江卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226327/index.m3u8$LR•IPV6•66『线路28』 +黑龙江卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226965/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E7UiKL56-L86ihmTWaZ6csw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•66『线路29』 +黑龙江卫视,https://live.mxdyeah.top/live.php?id=heilongjiangHD$LR•IPV4•66『线路30』 +黑龙江卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226327/index.m3u8$LR•IPV4•66『线路31』 +黑龙江卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226467/index.m3u8$LR•IPV4•66『线路32』 +黑龙江卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226419/index.m3u8$LR•IPV4•66『线路33』 +黑龙江卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226582/index.m3u8$LR•IPV4•66『线路34』 +黑龙江卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226585/index.m3u8$LR•IPV4•66『线路35』 +黑龙江卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226532/index.m3u8$LR•IPV4•66『线路36』 +黑龙江卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226531/index.m3u8$LR•IPV4•66『线路37』 +黑龙江卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226525/index.m3u8$LR•IPV4•66『线路38』 +黑龙江卫视,http://k.061899.xyz/m.php?id=hljws$LR•IPV4•66『线路39』 +黑龙江卫视,http://t.061899.xyz/tl/tl.php?id=hljws$LR•IPV4•66『线路40』 +黑龙江卫视,http://sh.lnott.top:880/dx36.m3u8$LR•IPV4•66『线路41』 +黑龙江卫视,http://39.134.67.108/PLTV/88888888/224/3221226006/1.m3u8$LR•IPV4•66『线路42』 +黑龙江卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226585$LR•IPV4•66『线路43』 +黑龙江卫视,http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/heilongjiangHD/__op/default/__f/index.m3u8$LR•IPV4•66『线路44』 +黑龙江卫视,http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/heilongjiangHD/__op/default/__f/index.m3u8$LR•IPV4•66『线路45』 +黑龙江卫视,http://148.135.93.213/live.php?id=黑龙江卫视$LR•IPV4•66『线路46』 +黑龙江卫视,http://home.wwang.pw:35455/itv/1000000005000265029.m3u8?cdn=ystenlive$LR•IPV4•66『线路47』 +黑龙江卫视,http://58.57.40.22:9901/tsfile/live/1040_1.m3u8$LR•IPV4•66『线路48』 +黑龙江卫视,http://p2.ytelc.com/videojs.php?id=https://idclive.hljtv.com:4430/live/hljws_own.m3u8$LR•IPV4•66『线路49』 +黑龙江卫视,http://iptv.huuc.edu.cn/hls/hljhd.m3u8$LR•IPV4•66『线路50』 +黑龙江卫视,http://ygbh.site/php/bfgd.php?id=095$LR•IPV4•66『线路51』 +黑龙江卫视,https://cc06.tv12.xyz/53.m3u8$LR•IPV4•66『线路52』 +黑龙江卫视,http://112.27.235.94:8000/hls/48/index.m3u8$LR•IPV4•66『线路53』 +黑龙江卫视,http://39.135.133.173/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226327/index.m3u8$LR•IPV4•66『线路54』 +黑龙江卫视,http://t.061899.xyz/tl/dq.php?id=hljws$LR•IPV4•66『线路55』 +黑龙江卫视,http://148.135.93.213:81/live.php?id=黑龙江卫视$LR•IPV4•66『线路56』 +黑龙江卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010056$LR•IPV4•66『线路57』 +黑龙江卫视,http://j.x.bkpcp.top/jx/HEILJHD$LR•IPV4•66『线路58』 +黑龙江卫视,http://l.cztvcloud.com/channels/lantian/SXyuyao3/720p.m3u8$LR•IPV4•66『线路59』 +黑龙江卫视,http://iptv.huuc.edu.cn/hls/hljhd.m3u8$LR•IPV4•66『线路60』 +黑龙江卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003873470.m3u8$LR•IPV4•66『线路61』 +黑龙江卫视,http://z.b.bkpcp.top/m.php?id=hljws$LR•IPV4•66『线路62』 +黑龙江卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226327/index.m3u8$LR•IPV6•66『线路63』 +黑龙江卫视,http://[2409:8087:1a01:df::4001]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226327/1.m3u8$LR•IPV6•66『线路64』 +黑龙江卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226327/index.m3u8$LR•IPV6•66『线路65』 +黑龙江卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226965/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E7UiKL56-L86ihmTWaZ6csw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•66『线路66』 +湖北卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226952/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EREB40lnZnCEwjRy7LZuhIQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•63『线路1』 +湖北卫视,http://60.16.0.216:5757/hls/33/index.m3u8$LR•IPV4•63『线路2』 +湖北卫视,https://cc06.tv12.xyz/50.m3u8$LR•IPV4•63『线路3』 +湖北卫视,http://112.27.235.94:8000/hls/41/index.m3u8$LR•IPV4•63『线路4』 +湖北卫视,http://60.16.0.216:5757/hls/33/index.m3u8$LR•IPV4•63『线路5』 +湖北卫视,https://cc06.tv12.xyz/50.m3u8$LR•IPV4•63『线路6』 +湖北卫视,http://112.27.235.94:8000/hls/41/index.m3u8$LR•IPV4•63『线路7』 +湖北卫视,http://101.74.28.84:9901/tsfile/live/0132_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•63『线路8』 +湖北卫视,http://1.195.131.143:9901/tsfile/live/0132_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•63『线路9』 +湖北卫视,http://101.66.198.42:9901/tsfile/live/0132_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•63『线路10』 +湖北卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010057$LR•IPV4•63『线路11』 +湖北卫视,http://z.b.bkpcp.top/m.php?id=hubws$LR•IPV4•63『线路12』 +湖北卫视,http://j.x.bkpcp.top/jx/HUBEIHD$LR•IPV4•63『线路13』 +湖北卫视,http://goo.bkpcp.top/mg/hubws$LR•IPV4•63『线路14』 +湖北卫视,http://iptv.huuc.edu.cn/hls/hbhd.m3u8$LR•IPV4•63『线路15』 +湖北卫视,https://www.freetv.top/migu/738906825.m3u8?migutoken=959fce041a0fecbe0bdf2b300a4d13c986661650b877856aabade568eaf9f549143a65c212325030ca99ac119635c6c4daa7c93ba8863508e6aeef100965a31ae4a8152b02337aea453f42988d$LR•IPV4•63『线路16』 +湖北卫视,https://smart.pendy.dpdns.org/Smart.php?id=hubei$LR•IPV4•63『线路17』 +湖北卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003873465.m3u8$LR•IPV4•63『线路18』 +湖北卫视,http://183.94.1.118:8801/tsfile/live/0132_1.m3u8$LR•IPV4•63『线路19』 +湖北卫视,http://120.192.226.35:8009/hls/39/index.m3u8$LR•IPV4•63『线路20』 +湖北卫视,http://113.56.95.69:53765/tsfile/live/0018_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•63『线路21』 +湖北卫视,http://36.32.174.67:60080/newlive/live/hls/28/live.m3u8$LR•IPV4•63『线路22』 +湖北卫视,http://61.138.128.226:19901/tsfile/live/0132_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•63『线路23』 +湖北卫视,http://36.105.100.208:35455/itv/1000000005000265023.m3u8?cdn=ystenlive$LR•IPV4•63『线路24』 +湖北卫视,http://iptv.0564.org:35455/itv/1000000005000265023.m3u8?cdn=ystenlive$LR•IPV4•63『线路25』 +湖北卫视,http://mh0.asia:35455/itv/1000000005000265023.m3u8?cdn=ystenlive$LR•IPV4•63『线路26』 +湖北卫视,http://xxx.504900.xyz:35455/itv/1000000005000265023.m3u8?cdn=ystenlive$LR•IPV4•63『线路27』 +湖北卫视,http://3501776.xyz:35455/itv/1000000005000265023.m3u8?cdn=ystenlive$LR•IPV4•63『线路28』 +湖北卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226501/index.m3u8$LR•IPV6•63『线路29』 +湖北卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226952/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EREB40lnZnCEwjRy7LZuhIQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•63『线路30』 +湖北卫视,https://live.mxdyeah.top/live.php?id=hubeiSD$LR•IPV4•63『线路31』 +湖北卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225627/index.m3u8$LR•IPV4•63『线路32』 +湖北卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226477/index.m3u8$LR•IPV4•63『线路33』 +湖北卫视,http://k.061899.xyz/m.php?id=hubws$LR•IPV4•63『线路34』 +湖北卫视,http://t.061899.xyz/tl/tl.php?id=hubws$LR•IPV4•63『线路35』 +湖北卫视,http://sh.lnott.top:880/dx42.m3u8$LR•IPV4•63『线路36』 +湖北卫视,http://39.134.67.108/PLTV/88888888/224/3221225975/1.m3u8$LR•IPV4•63『线路37』 +湖北卫视,http://39.134.67.108/PLTV/88888888/224/3221226015/1.m3u8$LR•IPV4•63『线路38』 +湖北卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226477$LR•IPV4•63『线路39』 +湖北卫视,http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/hubeiSD/__op/default/__f/index.m3u8$LR•IPV4•63『线路40』 +湖北卫视,http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/hubeiSD/__op/default/__f/index.m3u8$LR•IPV4•63『线路41』 +湖北卫视,http://101.35.240.114:88/live.php?id=湖北卫视$LR•IPV4•63『线路42』 +湖北卫视,http://home.wwang.pw:35455/itv/1000000005000265023.m3u8?cdn=ystenlive$LR•IPV4•63『线路43』 +湖北卫视,http://58.57.40.22:9901/tsfile/live/1038_1.m3u8$LR•IPV4•63『线路44』 +湖北卫视,http://iptv.huuc.edu.cn/hls/hbhd.m3u8$LR•IPV4•63『线路45』 +湖北卫视,http://ygbh.site/php/bfgd.php?id=102$LR•IPV4•63『线路46』 +湖北卫视,https://cc06.tv12.xyz/50.m3u8$LR•IPV4•63『线路47』 +湖北卫视,http://112.27.235.94:8000/hls/41/index.m3u8$LR•IPV4•63『线路48』 +湖北卫视,http://39.134.65.70/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225627/index.m3u8$LR•IPV4•63『线路49』 +湖北卫视,http://mg.hmysapp.cn:177/ckmg/zb.php?id=hubws$LR•IPV4•63『线路50』 +湖北卫视,http://t.061899.xyz/tl/dq.php?id=hubws$LR•IPV4•63『线路51』 +湖北卫视,https://zby.130519.xyz/PLTV/11/224/3221225729/index.m3u8$LR•IPV4•63『线路52』 +湖北卫视,http://148.135.93.213:81/live.php?id=湖北卫视$LR•IPV4•63『线路53』 +湖北卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010057$LR•IPV4•63『线路54』 +湖北卫视,http://z.b.bkpcp.top/m.php?id=hubws$LR•IPV4•63『线路55』 +湖北卫视,http://j.x.bkpcp.top/jx/HUBEIHD$LR•IPV4•63『线路56』 +湖北卫视,http://goo.bkpcp.top/mg/hubws$LR•IPV4•63『线路57』 +湖北卫视,http://iptv.huuc.edu.cn/hls/hbhd.m3u8$LR•IPV4•63『线路58』 +湖北卫视,https://www.freetv.top/migu/738906825.m3u8?migutoken=959fce041a0fecbe0bdf2b300a4d13c986661650b877856aabade568eaf9f549143a65c212325030ca99ac119635c6c4daa7c93ba8863508e6aeef100965a31ae4a8152b02337aea453f42988d$LR•IPV4•63『线路59』 +湖北卫视,https://smart.pendy.dpdns.org/Smart.php?id=hubei$LR•IPV4•63『线路60』 +湖北卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003873465.m3u8$LR•IPV4•63『线路61』 +湖北卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226501/index.m3u8$LR•IPV6•63『线路62』 +湖北卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226952/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EREB40lnZnCEwjRy7LZuhIQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•63『线路63』 +江西卫视,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•58『线路1』 +江西卫视,http://183.215.134.239:19901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路2』 +江西卫视,https://cc06.tv12.xyz/62.m3u8$LR•IPV4•58『线路3』 +江西卫视,http://183.215.134.239:19901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路4』 +江西卫视,https://cc06.tv12.xyz/62.m3u8$LR•IPV4•58『线路5』 +江西卫视,http://101.66.198.42:9901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•58『线路6』 +江西卫视,http://1.195.131.143:9901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路7』 +江西卫视,http://101.74.28.84:9901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路8』 +江西卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010060$LR•IPV4•58『线路9』 +江西卫视,http://z.b.bkpcp.top/m.php?id=jxws$LR•IPV4•58『线路10』 +江西卫视,http://goo.bkpcp.top/mg/jxws$LR•IPV4•58『线路11』 +江西卫视,http://iptv.huuc.edu.cn/hls/jxhd.m3u8$LR•IPV4•58『线路12』 +江西卫视,https://www.freetv.top/migu/783847495.m3u8?migutoken=fddcc05dc0245329d3208607a5b1f5a1980bc31a7ced510e345af6cc68f5b86d2d9178b45706a0b6a0ceddc82ce06e53375cfedbc96fd0b00c12195c7d77b6f23811a67970bcfeb47629aa5aa6$LR•IPV4•58『线路13』 +江西卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000004796511.m3u8$LR•IPV4•58『线路14』 +江西卫视,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227226/index.m3u8$LR•IPV4•58『线路15』 +江西卫视,http://183.94.1.118:8801/tsfile/live/0138_1.m3u8$LR•IPV4•58『线路16』 +江西卫视,http://120.192.226.35:8009/hls/47/index.m3u8$LR•IPV4•58『线路17』 +江西卫视,http://113.56.95.69:53765/tsfile/live/1016_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路18』 +江西卫视,http://36.32.174.67:60080/newlive/live/hls/22/live.m3u8$LR•IPV4•58『线路19』 +江西卫视,http://58.17.48.228:808/hls/17/index.m3u8$LR•IPV4•58『线路20』 +江西卫视,http://61.138.128.226:19901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路21』 +江西卫视,http://222.173.108.238:352/tsfile/live/1010_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路22』 +江西卫视,http://36.105.100.208:35455/itv/1000000005000265032.m3u8?cdn=ystenlive$LR•IPV4•58『线路23』 +江西卫视,http://iptv.0564.org:35455/itv/1000000005000265032.m3u8?cdn=ystenlive$LR•IPV4•58『线路24』 +江西卫视,http://mh0.asia:35455/itv/1000000005000265032.m3u8?cdn=ystenlive$LR•IPV4•58『线路25』 +江西卫视,http://[2409:8087:1a01:df::4027]:80/TVOD/88888888/224/3221225935/main.m3u8$LR•IPV6•58『线路26』 +江西卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226344/index.m3u8$LR•IPV6•58『线路27』 +江西卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226504/index.m3u8$LR•IPV6•58『线路28』 +江西卫视,https://live.mxdyeah.top/live.php?id=jiangxiHD$LR•IPV4•58『线路29』 +江西卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226344/index.m3u8$LR•IPV4•58『线路30』 +江西卫视,http://k.061899.xyz/m.php?id=jxws$LR•IPV4•58『线路31』 +江西卫视,http://t.061899.xyz/tl/tl.php?id=jxws$LR•IPV4•58『线路32』 +江西卫视,http://sh.lnott.top:880/dx43.m3u8$LR•IPV4•58『线路33』 +江西卫视,http://39.134.67.108/PLTV/88888888/224/3221225935/1.m3u8$LR•IPV4•58『线路34』 +江西卫视,http://39.134.67.108/PLTV/88888888/224/3221225995/1.m3u8$LR•IPV4•58『线路35』 +江西卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226344$LR•IPV4•58『线路36』 +江西卫视,http://101.35.240.114:88/live.php?id=江西卫视$LR•IPV4•58『线路37』 +江西卫视,http://home.wwang.pw:35455/itv/1000000005000265032.m3u8?cdn=ystenlive$LR•IPV4•58『线路38』 +江西卫视,http://58.57.40.22:9901/tsfile/live/1043_1.m3u8$LR•IPV4•58『线路39』 +江西卫视,http://iptv.huuc.edu.cn/hls/jxhd.m3u8$LR•IPV4•58『线路40』 +江西卫视,http://ygbh.site/php/bfgd.php?id=098$LR•IPV4•58『线路41』 +江西卫视,https://cc06.tv12.xyz/62.m3u8$LR•IPV4•58『线路42』 +江西卫视,http://112.27.235.94:8000/hls/44/index.m3u8$LR•IPV4•58『线路43』 +江西卫视,http://39.135.133.175/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226344/index.m3u8$LR•IPV4•58『线路44』 +江西卫视,http://mg.hmysapp.cn:177/ckmg/zb.php?id=jxws$LR•IPV4•58『线路45』 +江西卫视,http://t.061899.xyz/tl/dq.php?id=jxws$LR•IPV4•58『线路46』 +江西卫视,https://zby.130519.xyz/PLTV/11/224/3221225740/index.m3u8$LR•IPV4•58『线路47』 +江西卫视,http://148.135.93.213:81/live.php?id=江西卫视$LR•IPV4•58『线路48』 +江西卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010060$LR•IPV4•58『线路49』 +江西卫视,http://z.b.bkpcp.top/m.php?id=jxws$LR•IPV4•58『线路50』 +江西卫视,http://goo.bkpcp.top/mg/jxws$LR•IPV4•58『线路51』 +江西卫视,http://iptv.huuc.edu.cn/hls/jxhd.m3u8$LR•IPV4•58『线路52』 +江西卫视,https://www.freetv.top/migu/783847495.m3u8?migutoken=fddcc05dc0245329d3208607a5b1f5a1980bc31a7ced510e345af6cc68f5b86d2d9178b45706a0b6a0ceddc82ce06e53375cfedbc96fd0b00c12195c7d77b6f23811a67970bcfeb47629aa5aa6$LR•IPV4•58『线路53』 +江西卫视,http://[2409:8087:1a01:df::4027]:80/TVOD/88888888/224/3221225935/main.m3u8$LR•IPV6•58『线路54』 +江西卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000004796511.m3u8$LR•IPV4•58『线路55』 +江西卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226344/index.m3u8$LR•IPV6•58『线路56』 +江西卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226504/index.m3u8$LR•IPV6•58『线路57』 +江西卫视,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227226/index.m3u8$LR•IPV4•58『线路58』 +吉林卫视,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•57『线路1』 +吉林卫视,http://60.16.0.216:5757/hls/44/index.m3u8$LR•IPV4•57『线路2』 +吉林卫视,http://60.16.0.216:5757/hls/44/index.m3u8$LR•IPV4•57『线路3』 +吉林卫视,http://61.156.228.12:8154/tsfile/live/0116_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•57『线路4』 +吉林卫视,http://101.66.198.42:9901/tsfile/live/0116_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•57『线路5』 +吉林卫视,http://106.118.70.125:9901/tsfile/live/0116_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•57『线路6』 +吉林卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010075$LR•IPV4•57『线路7』 +吉林卫视,http://z.b.bkpcp.top/m.php?id=jlws$LR•IPV4•57『线路8』 +吉林卫视,http://j.x.bkpcp.top/jx/JILHD$LR•IPV4•57『线路9』 +吉林卫视,http://goo.bkpcp.top/mg/jlws$LR•IPV4•57『线路10』 +吉林卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000004972569.m3u8$LR•IPV4•57『线路11』 +吉林卫视,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227240/index.m3u8$LR•IPV4•57『线路12』 +吉林卫视,http://120.192.226.35:8009/hls/48/index.m3u8$LR•IPV4•57『线路13』 +吉林卫视,http://cssbyd.imwork.net:8082/hls/41/index.m3u8$LR•IPV4•57『线路14』 +吉林卫视,http://61.138.128.226:19901/tsfile/live/1022_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•57『线路15』 +吉林卫视,http://36.105.100.208:35455/itv/5000000011000031117.m3u8?cdn=bestzb$LR•IPV4•57『线路16』 +吉林卫视,https://pulltv1.wanfudaluye.com/live/tv1.m3u8$LR•IPV4•57『线路17』 +吉林卫视,http://175.171.30.26:5111/hls/595914941/index.m3u8$LR•IPV4•57『线路18』 +吉林卫视,http://110.7.131.4:9901/tsfile/live/0116_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•57『线路19』 +吉林卫视,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=3028&tk=23a9aca1f79f$LR•IPV4•57『线路20』 +吉林卫视,http://58.19.43.46:9901/tsfile/live/1007_1.m3u8$LR•IPV4•57『线路21』 +吉林卫视,http://58.221.214.82:9901/tsfile/live/0116_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•57『线路22』 +吉林卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226397/index.m3u8$LR•IPV6•57『线路23』 +吉林卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226397/index.m3u8$LR•IPV6•57『线路24』 +吉林卫视,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•57『线路25』 +吉林卫视,http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221227099/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•57『线路26』 +吉林卫视,https://live.mxdyeah.top/live.php?id=jilinHD$LR•IPV4•57『线路27』 +吉林卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226397/index.m3u8$LR•IPV4•57『线路28』 +吉林卫视,http://k.061899.xyz/m.php?id=jlws$LR•IPV4•57『线路29』 +吉林卫视,http://t.061899.xyz/tl/tl.php?id=jlws$LR•IPV4•57『线路30』 +吉林卫视,http://sh.lnott.top:880/dx37.m3u8$LR•IPV4•57『线路31』 +吉林卫视,http://39.134.67.108/PLTV/88888888/224/3221226013/1.m3u8$LR•IPV4•57『线路32』 +吉林卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226397$LR•IPV4•57『线路33』 +吉林卫视,http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/jilinHD/__op/default/__f/index.m3u8$LR•IPV4•57『线路34』 +吉林卫视,http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/jilinHD/__op/default/__f/index.m3u8$LR•IPV4•57『线路35』 +吉林卫视,http://hls1.avap.jilintv.cn/zqvk7vpj/channel/0533b55e42354f4f802bdec78e26b571/1.m3u8$LR•IPV4•57『线路36』 +吉林卫视,http://148.135.93.213/live.php?id=吉林卫视$LR•IPV4•57『线路37』 +吉林卫视,http://home.wwang.pw:35455/itv/5000000011000031117.m3u8?cdn=bestzb$LR•IPV4•57『线路38』 +吉林卫视,http://58.57.40.22:9901/tsfile/live/1050_1.m3u8$LR•IPV4•57『线路39』 +吉林卫视,http://ygbh.site/php/bfgd.php?id=097$LR•IPV4•57『线路40』 +吉林卫视,https://cc06.tv12.xyz/60.m3u8$LR•IPV4•57『线路41』 +吉林卫视,http://39.135.133.161/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226397/index.m3u8$LR•IPV4•57『线路42』 +吉林卫视,http://mg.hmysapp.cn:177/ckmg/zb.php?id=jlws$LR•IPV4•57『线路43』 +吉林卫视,http://t.061899.xyz/tl/dq.php?id=jlws$LR•IPV4•57『线路44』 +吉林卫视,http://t.061899.xyz/tl/dq.php?id=jlws$LR•IPV4•57『线路45』 +吉林卫视,https://zby.130519.xyz/PLTV/11/224/3221226149/index.m3u8$LR•IPV4•57『线路46』 +吉林卫视,http://148.135.93.213:81/live.php?id=吉林卫视$LR•IPV4•57『线路47』 +吉林卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010075$LR•IPV4•57『线路48』 +吉林卫视,http://z.b.bkpcp.top/m.php?id=jlws$LR•IPV4•57『线路49』 +吉林卫视,http://j.x.bkpcp.top/jx/JILHD$LR•IPV4•57『线路50』 +吉林卫视,http://goo.bkpcp.top/mg/jlws$LR•IPV4•57『线路51』 +吉林卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000004972569.m3u8$LR•IPV4•57『线路52』 +吉林卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226397/index.m3u8$LR•IPV6•57『线路53』 +吉林卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226397/index.m3u8$LR•IPV6•57『线路54』 +吉林卫视,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•57『线路55』 +吉林卫视,http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221227099/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•57『线路56』 +吉林卫视,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227240/index.m3u8$LR•IPV4•57『线路57』 +内蒙古卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227018/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ErN_hoRDwApMKnJqiNHvn9w%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•57『线路1』 +内蒙古卫视,https://ali-m-l.cztv.com/channels/lantian/channel007/1080p.m3u8$LR•IPV4•57『线路2』 +内蒙古卫视,https://ali-m-l.cztv.com/channels/lantian/channel007/1080p.m3u8$LR•IPV4•57『线路3』 +内蒙古卫视,http://60.16.0.216:5757/hls/41/index.m3u8$LR•IPV4•57『线路4』 +内蒙古卫视,https://ali-m-l.cztv.com/channels/lantian/channel007/1080p.m3u8$LR•IPV4•57『线路5』 +内蒙古卫视,https://ali-m-l.cztv.com/channels/lantian/channel007/1080p.m3u8$LR•IPV4•57『线路6』 +内蒙古卫视,http://60.16.0.216:5757/hls/41/index.m3u8$LR•IPV4•57『线路7』 +内蒙古卫视,http://1.195.131.143:9901/tsfile/live/0109_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•57『线路8』 +内蒙古卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225634$LR•IPV4•57『线路9』 +内蒙古卫视,http://z.b.bkpcp.top/m.php?id=nmws$LR•IPV4•57『线路10』 +内蒙古卫视,http://j.x.bkpcp.top/jx/NMGWS$LR•IPV4•57『线路11』 +内蒙古卫视,http://goo.bkpcp.top/mg/nmws$LR•IPV4•57『线路12』 +内蒙古卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225634/index.m3u8$LR•IPV4•57『线路13』 +内蒙古卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003887427.m3u8$LR•IPV4•57『线路14』 +内蒙古卫视,http://120.192.226.35:8009/hls/60/index.m3u8$LR•IPV4•57『线路15』 +内蒙古卫视,http://cssbyd.imwork.net:8082/hls/44/index.m3u8$LR•IPV4•57『线路16』 +内蒙古卫视,http://61.138.128.226:19901/tsfile/live/0109_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•57『线路17』 +内蒙古卫视,http://113.118.15.210:808/hls/60/index.m3u8$LR•IPV4•57『线路18』 +内蒙古卫视,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=1348&tk=23a9aca1f79f$LR•IPV4•57『线路19』 +内蒙古卫视,http://139.129.231.228:50060/rtp/239.21.1.41:5002$LR•IPV4•57『线路20』 +内蒙古卫视,http://111.61.236.247:9081/hls/48/index.m3u8$LR•IPV4•57『线路21』 +内蒙古卫视,http://139.196.151.191:2051/rtp/239.45.1.238:5140$LR•IPV4•57『线路22』 +内蒙古卫视,http://113.195.45.95:9901/tsfile/live/0109_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•57『线路23』 +内蒙古卫视,http://[2409:8087:1a01:df::401a]:80/wh7f454c46tw3029083262_-802204014/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225634/index.m3u8?icpid=88888888&RTS=1713969858&from=4&hms_devid=128&prioritypopid=4&online=1713969858&vqe=3$LR•IPV6•57『线路24』 +内蒙古卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225634/index.m3u8$LR•IPV6•57『线路25』 +内蒙古卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226389/index.m3u8$LR•IPV6•57『线路26』 +内蒙古卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227018/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ErN_hoRDwApMKnJqiNHvn9w%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•57『线路27』 +内蒙古卫视,https://live.mxdyeah.top/live.php?id=neimengkuSD$LR•IPV4•57『线路28』 +内蒙古卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225634/index.m3u8$LR•IPV4•57『线路29』 +内蒙古卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226389/index.m3u8$LR•IPV4•57『线路30』 +内蒙古卫视,http://39.134.67.108/PLTV/88888888/224/3221226017/1.m3u8$LR•IPV4•57『线路31』 +内蒙古卫视,http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/neimengkuSD/__op/default/__f/index.m3u8$LR•IPV4•57『线路32』 +内蒙古卫视,http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/neimengkuSD/__op/default/__f/index.m3u8$LR•IPV4•57『线路33』 +内蒙古卫视,https://livestream-bt.nmtv.cn/nmtv/2314general.m3u8?txSecret=dc348a27bd36fe1bd63562af5e7269ea&txTime=771EF880$LR•IPV4•57『线路34』 +内蒙古卫视,http://101.35.240.114:88/live.php?id=内蒙古卫视$LR•IPV4•57『线路35』 +内蒙古卫视,http://120.76.248.139/live/bfgd/4200000110.m3u8$LR•IPV4•57『线路36』 +内蒙古卫视,https://livestream-bt.nmtv.cn/nmtv/2314general.m3u8?txSecret=35f2dd39972cede5222c6bd2c0efe24b&txTime=77395680$LR•IPV4•57『线路37』 +内蒙古卫视,http://120.76.248.139/live/bfgd/4200000110.m3u8$LR•IPV4•57『线路38』 +内蒙古卫视,http://ygbh.site/php/bfgd.php?id=110$LR•IPV4•57『线路39』 +内蒙古卫视,https://cc06.tv12.xyz/94.m3u8$LR•IPV4•57『线路40』 +内蒙古卫视,http://112.27.235.94:8000/hls/49/index.m3u8$LR•IPV4•57『线路41』 +内蒙古卫视,http://39.134.65.78/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225634/index.m3u8$LR•IPV4•57『线路42』 +内蒙古卫视,http://mg.hmysapp.cn:177/ckmg/zb.php?id=nmws$LR•IPV4•57『线路43』 +内蒙古卫视,http://t.061899.xyz/tl/dq.php?id=nmgws$LR•IPV4•57『线路44』 +内蒙古卫视,http://8.138.7.223/tv/nmgws.m3u8$LR•IPV4•57『线路45』 +内蒙古卫视,http://148.135.93.213:81/live.php?id=内蒙古卫视$LR•IPV4•57『线路46』 +内蒙古卫视,https://livestream-bt.nmtv.cn/nmtv/2314general.m3u8?txSecret=35f2dd39972cede5222c6bd2c0efe24b&txTime=77395680$LR•IPV4•57『线路47』 +内蒙古卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225634$LR•IPV4•57『线路48』 +内蒙古卫视,http://z.b.bkpcp.top/m.php?id=nmws$LR•IPV4•57『线路49』 +内蒙古卫视,http://j.x.bkpcp.top/jx/NMGWS$LR•IPV4•57『线路50』 +内蒙古卫视,http://goo.bkpcp.top/mg/nmws$LR•IPV4•57『线路51』 +内蒙古卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225634/index.m3u8$LR•IPV4•57『线路52』 +内蒙古卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003887427.m3u8$LR•IPV4•57『线路53』 +内蒙古卫视,http://[2409:8087:1a01:df::401a]:80/wh7f454c46tw3029083262_-802204014/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225634/index.m3u8?icpid=88888888&RTS=1713969858&from=4&hms_devid=128&prioritypopid=4&online=1713969858&vqe=3$LR•IPV6•57『线路54』 +内蒙古卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225634/index.m3u8$LR•IPV6•57『线路55』 +内蒙古卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226389/index.m3u8$LR•IPV6•57『线路56』 +内蒙古卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227018/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ErN_hoRDwApMKnJqiNHvn9w%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•57『线路57』 +辽宁卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226966/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E6qJH8Fd-zgCGx3P-Ce86cA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•57『线路1』 +辽宁卫视,http://60.16.0.216:5757/hls/32/index.m3u8$LR•IPV4•57『线路2』 +辽宁卫视,http://60.16.0.216:5757/hls/32/index.m3u8$LR•IPV4•57『线路3』 +辽宁卫视,http://101.74.28.84:9901/tsfile/live/0121_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•57『线路4』 +辽宁卫视,http://101.66.198.42:9901/tsfile/live/0121_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•57『线路5』 +辽宁卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226546$LR•IPV4•57『线路6』 +辽宁卫视,http://z.b.bkpcp.top/m.php?id=lnws$LR•IPV4•57『线路7』 +辽宁卫视,http://j.x.bkpcp.top/jx/LIAONHD$LR•IPV4•57『线路8』 +辽宁卫视,http://iptv.huuc.edu.cn/hls/lnhd.m3u8$LR•IPV4•57『线路9』 +辽宁卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003873468.m3u8$LR•IPV4•57『线路10』 +辽宁卫视,http://183.94.1.118:8801/tsfile/live/0121_1.m3u8$LR•IPV4•57『线路11』 +辽宁卫视,http://120.192.226.35:8009/hls/54/index.m3u8$LR•IPV4•57『线路12』 +辽宁卫视,http://61.138.128.226:19901/tsfile/live/0121_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•57『线路13』 +辽宁卫视,http://222.173.108.238:352/tsfile/live/1008_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•57『线路14』 +辽宁卫视,http://36.105.100.208:35455/itv/1000000005000265022.m3u8?cdn=ystenlive$LR•IPV4•57『线路15』 +辽宁卫视,http://iptv.0564.org:35455/itv/1000000005000265022.m3u8?cdn=ystenlive$LR•IPV4•57『线路16』 +辽宁卫视,http://mh0.asia:35455/itv/1000000005000265022.m3u8?cdn=ystenlive$LR•IPV4•57『线路17』 +辽宁卫视,http://xxx.504900.xyz:35455/itv/1000000005000265022.m3u8?cdn=ystenlive$LR•IPV4•57『线路18』 +辽宁卫视,http://3501776.xyz:35455/itv/1000000005000265022.m3u8?cdn=ystenlive$LR•IPV4•57『线路19』 +辽宁卫视,http://175.171.30.26:5111/hls/458537835/index.m3u8$LR•IPV4•57『线路20』 +辽宁卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226546/index.m3u8$LR•IPV6•57『线路21』 +辽宁卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226254/index.m3u8$LR•IPV6•57『线路22』 +辽宁卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226966/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E6qJH8Fd-zgCGx3P-Ce86cA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•57『线路23』 +辽宁卫视,http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221227141/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•57『线路24』 +辽宁卫视,http://[2409:8087:3428:20:500::1009]:6610/PLTV/88888888/224/3221227141/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•57『线路25』 +辽宁卫视,https://live.mxdyeah.top/live.php?id=liaoningHD$LR•IPV4•57『线路26』 +辽宁卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226546/index.m3u8$LR•IPV4•57『线路27』 +辽宁卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225619/index.m3u8$LR•IPV4•57『线路28』 +辽宁卫视,http://k.061899.xyz/m.php?id=lnws$LR•IPV4•57『线路29』 +辽宁卫视,http://t.061899.xyz/tl/tl.php?id=lnws$LR•IPV4•57『线路30』 +辽宁卫视,http://sh.lnott.top:880/dx19.m3u8$LR•IPV4•57『线路31』 +辽宁卫视,http://39.134.67.108/PLTV/88888888/224/3221225944/1.m3u8$LR•IPV4•57『线路32』 +辽宁卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226546$LR•IPV4•57『线路33』 +辽宁卫视,http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/liaoningHD/__op/default/__f/index.m3u8$LR•IPV4•57『线路34』 +辽宁卫视,http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/liaoningHD/__op/default/__f/index.m3u8$LR•IPV4•57『线路35』 +辽宁卫视,http://148.135.93.213/live.php?id=辽宁卫视$LR•IPV4•57『线路36』 +辽宁卫视,http://home.wwang.pw:35455/itv/1000000005000265022.m3u8?cdn=ystenlive$LR•IPV4•57『线路37』 +辽宁卫视,http://58.57.40.22:9901/tsfile/live/1035_1.m3u8$LR•IPV4•57『线路38』 +辽宁卫视,https://piccpndks.v.kcdnvip.com/audio/liaoning_2/index.m3u8$LR•IPV4•57『线路39』 +辽宁卫视,http://iptv.huuc.edu.cn/hls/lnhd.m3u8$LR•IPV4•57『线路40』 +辽宁卫视,http://ygbh.site/php/bfgd.php?id=058$LR•IPV4•57『线路41』 +辽宁卫视,https://cc06.tv12.xyz/70.m3u8$LR•IPV4•57『线路42』 +辽宁卫视,http://112.27.235.94:8000/hls/47/index.m3u8$LR•IPV4•57『线路43』 +辽宁卫视,http://39.134.65.4/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225619/index.m3u8$LR•IPV4•57『线路44』 +辽宁卫视,http://mg.hmysapp.cn:177/ckmg/zb.php?id=lnws$LR•IPV4•57『线路45』 +辽宁卫视,https://zby.130519.xyz/PLTV/11/224/3221225747/index.m3u8$LR•IPV4•57『线路46』 +辽宁卫视,http://148.135.93.213:81/live.php?id=辽宁卫视$LR•IPV4•57『线路47』 +辽宁卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226546$LR•IPV4•57『线路48』 +辽宁卫视,http://z.b.bkpcp.top/m.php?id=lnws$LR•IPV4•57『线路49』 +辽宁卫视,http://j.x.bkpcp.top/jx/LIAONHD$LR•IPV4•57『线路50』 +辽宁卫视,http://iptv.huuc.edu.cn/hls/lnhd.m3u8$LR•IPV4•57『线路51』 +辽宁卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003873468.m3u8$LR•IPV4•57『线路52』 +辽宁卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226546/index.m3u8$LR•IPV6•57『线路53』 +辽宁卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226254/index.m3u8$LR•IPV6•57『线路54』 +辽宁卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226966/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E6qJH8Fd-zgCGx3P-Ce86cA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•57『线路55』 +辽宁卫视,http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221227141/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•57『线路56』 +辽宁卫视,http://[2409:8087:3428:20:500::1009]:6610/PLTV/88888888/224/3221227141/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•57『线路57』 +宁夏卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227003/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ESco1zinvdUYzleEkXYhIvA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•46『线路1』 +宁夏卫视,http://1.195.131.143:9901/tsfile/live/0112_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•46『线路2』 +宁夏卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010110$LR•IPV4•46『线路3』 +宁夏卫视,http://z.b.bkpcp.top/m.php?id=nxws$LR•IPV4•46『线路4』 +宁夏卫视,http://j.x.bkpcp.top/jx/NXWS$LR•IPV4•46『线路5』 +宁夏卫视,http://goo.bkpcp.top/mg/nxws$LR•IPV4•46『线路6』 +宁夏卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003887433.m3u8$LR•IPV4•46『线路7』 +宁夏卫视,http://120.192.226.35:8009/hls/52/index.m3u8$LR•IPV4•46『线路8』 +宁夏卫视,http://36.32.174.67:60080/newlive/live/hls/49/live.m3u8$LR•IPV4•46『线路9』 +宁夏卫视,http://cssbyd.imwork.net:8082/hls/45/index.m3u8$LR•IPV4•46『线路10』 +宁夏卫视,http://61.138.128.226:19901/tsfile/live/0112_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•46『线路11』 +宁夏卫视,http://36.105.100.208:35455/itv/1000000002000031451.m3u8?cdn=ystenlive$LR•IPV4•46『线路12』 +宁夏卫视,http://113.118.15.210:808/hls/106/index.m3u8$LR•IPV4•46『线路13』 +宁夏卫视,http://110.7.131.4:9901/tsfile/live/0112_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•46『线路14』 +宁夏卫视,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=6122&tk=23a9aca1f79f$LR•IPV4•46『线路15』 +宁夏卫视,http://58.19.43.46:9901/tsfile/live/1003_1.m3u8$LR•IPV4•46『线路16』 +宁夏卫视,http://116.117.105.51:8096/tsfile/live/0112_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•46『线路17』 +宁夏卫视,http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/TVOD/88888888/8/3221226454/index.m3u8$LR•IPV6•46『线路18』 +宁夏卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/8/3221226454/index.m3u8$LR•IPV6•46『线路19』 +宁夏卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001074/index.m3u8$LR•IPV6•46『线路20』 +宁夏卫视,http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221227254/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•46『线路21』 +宁夏卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227003/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ESco1zinvdUYzleEkXYhIvA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•46『线路22』 +宁夏卫视,https://live.mxdyeah.top/live.php?id=ningxia$LR•IPV4•46『线路23』 +宁夏卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225632/index.m3u8$LR•IPV4•46『线路24』 +宁夏卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226454/index.m3u8$LR•IPV4•46『线路25』 +宁夏卫视,http://39.134.67.108/PLTV/88888888/224/3221226028/1.m3u8$LR•IPV4•46『线路26』 +宁夏卫视,http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/ningxia/__op/default/__f/index.m3u8$LR•IPV4•46『线路27』 +宁夏卫视,http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/ningxia/__op/default/__f/index.m3u8$LR•IPV4•46『线路28』 +宁夏卫视,https://hls.ningxiahuangheyun.com/live/nxws1M.m3u8"target='if'>$LR•IPV4•46『线路29』 +宁夏卫视,http://120.76.248.139/live/bfgd/4200000118.m3u8$LR•IPV4•46『线路30』 +宁夏卫视,http://home.wwang.pw:35455/itv/1000000002000031451.m3u8?cdn=ystenlive$LR•IPV4•46『线路31』 +宁夏卫视,http://58.57.40.22:9901/tsfile/live/1054_1.m3u8$LR•IPV4•46『线路32』 +宁夏卫视,http://ygbh.site/php/bfgd.php?id=118$LR•IPV4•46『线路33』 +宁夏卫视,https://cc06.tv12.xyz/96.m3u8$LR•IPV4•46『线路34』 +宁夏卫视,http://39.134.65.7/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225632/index.m3u8$LR•IPV4•46『线路35』 +宁夏卫视,http://mg.hmysapp.cn:177/ckmg/zb.php?id=nxws$LR•IPV4•46『线路36』 +宁夏卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010110$LR•IPV4•46『线路37』 +宁夏卫视,http://z.b.bkpcp.top/m.php?id=nxws$LR•IPV4•46『线路38』 +宁夏卫视,http://j.x.bkpcp.top/jx/NXWS$LR•IPV4•46『线路39』 +宁夏卫视,http://goo.bkpcp.top/mg/nxws$LR•IPV4•46『线路40』 +宁夏卫视,http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/TVOD/88888888/8/3221226454/index.m3u8$LR•IPV6•46『线路41』 +宁夏卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003887433.m3u8$LR•IPV4•46『线路42』 +宁夏卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/8/3221226454/index.m3u8$LR•IPV6•46『线路43』 +宁夏卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001074/index.m3u8$LR•IPV6•46『线路44』 +宁夏卫视,http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221227254/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•46『线路45』 +宁夏卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227003/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ESco1zinvdUYzleEkXYhIvA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•46『线路46』 +青海卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227017/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EacviHy_ucMT27Ymf2iLtZA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•56『线路1』 +青海卫视,http://120.76.248.139/live/bfgd/4200000111.m3u8$LR•IPV4•56『线路2』 +青海卫视,http://60.16.0.216:5757/hls/43/index.m3u8$LR•IPV4•56『线路3』 +青海卫视,http://120.76.248.139/live/bfgd/4200000111.m3u8$LR•IPV4•56『线路4』 +青海卫视,http://60.16.0.216:5757/hls/43/index.m3u8$LR•IPV4•56『线路5』 +青海卫视,http://106.118.70.125:9901/tsfile/live/0140_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•56『线路6』 +青海卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010111$LR•IPV4•56『线路7』 +青海卫视,http://z.b.bkpcp.top/m.php?id=qhws$LR•IPV4•56『线路8』 +青海卫视,http://j.x.bkpcp.top/jx/QHWS$LR•IPV4•56『线路9』 +青海卫视,http://goo.bkpcp.top/mg/qhws$LR•IPV4•56『线路10』 +青海卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003887430.m3u8$LR•IPV4•56『线路11』 +青海卫视,http://120.192.226.35:8009/hls/58/index.m3u8$LR•IPV4•56『线路12』 +青海卫视,http://61.138.128.226:19901/tsfile/live/0140_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•56『线路13』 +青海卫视,http://36.105.100.208:35455/itv/5000000006000040015.m3u8?cdn=bestzb$LR•IPV4•56『线路14』 +青海卫视,http://iptv.0564.org:35455/itv/1000000002000013359.m3u8?cdn=ystenlive$LR•IPV4•56『线路15』 +青海卫视,http://mh0.asia:35455/itv/1000000002000013359.m3u8?cdn=ystenlive$LR•IPV4•56『线路16』 +青海卫视,http://3501776.xyz:35455/itv/1000000002000013359.m3u8?cdn=ystenlive$LR•IPV4•56『线路17』 +青海卫视,http://150.158.112.123/%E5%85%AC%E4%BC%97%E5%8F%B7~%E7%8E%89%E7%8E%89%E8%BD%AF%E4%BB%B6%E5%BA%93/mg.php?id=qhws$LR•IPV4•56『线路18』 +青海卫视,http://stream.qhbtv.com/qhws/sd/live.m3u8?_upt=f35a89681647856030$LR•IPV4•56『线路19』 +青海卫视,http://113.118.15.210:808/hls/61/index.m3u8$LR•IPV4•56『线路20』 +青海卫视,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=0872&tk=23a9aca1f79f$LR•IPV4•56『线路21』 +青海卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225628/index.m3u8$LR•IPV6•56『线路22』 +青海卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227017/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EacviHy_ucMT27Ymf2iLtZA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•56『线路23』 +青海卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001082/index.m3u8$LR•IPV6•56『线路24』 +青海卫视,http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221227119/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•56『线路25』 +青海卫视,http://[2409:8087:3428:20:500::1009]:6610/PLTV/88888888/224/3221227119/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•56『线路26』 +青海卫视,https://live.mxdyeah.top/live.php?id=qinghaiSD$LR•IPV4•56『线路27』 +青海卫视,http://k.061899.xyz/m.php?id=qhws$LR•IPV4•56『线路28』 +青海卫视,http://t.061899.xyz/tl/tl.php?id=qhws$LR•IPV4•56『线路29』 +青海卫视,http://39.134.67.108/PLTV/88888888/224/3221225948/1.m3u8$LR•IPV4•56『线路30』 +青海卫视,http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/qinghaiSD/__op/default/__f/index.m3u8$LR•IPV4•56『线路31』 +青海卫视,http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/qinghaiSD/__op/default/__f/index.m3u8$LR•IPV4•56『线路32』 +青海卫视,http://stream.qhbtv.com/qhws/sd/live.m3u8$LR•IPV4•56『线路33』 +青海卫视,http://stream.qhbtv.com/qhws/sd/live.m3u8$LR•IPV4•56『线路34』 +青海卫视,http://stream.qhbtv.com/qhws/sd/live.m3u8?_upt=63cf437e1591689484$LR•IPV4•56『线路35』 +青海卫视,http://stream.qhbtv.com/qhws/sd/live.m3u8?_upt=f35a89681647856030$LR•IPV4•56『线路36』 +青海卫视,http://148.135.93.213/live.php?id=青海卫视$LR•IPV4•56『线路37』 +青海卫视,http://home.wwang.pw:35455/itv/5000000006000040015.m3u8?cdn=bestzb$LR•IPV4•56『线路38』 +青海卫视,http://58.57.40.22:9901/tsfile/live/1057_1.m3u8$LR•IPV4•56『线路39』 +青海卫视,http://ygbh.site/php/bfgd.php?id=111$LR•IPV4•56『线路40』 +青海卫视,https://cc06.tv12.xyz/97.m3u8$LR•IPV4•56『线路41』 +青海卫视,http://39.134.65.76/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225628/index.m3u8$LR•IPV4•56『线路42』 +青海卫视,http://mg.hmysapp.cn:177/ckmg/zb.php?id=qhws$LR•IPV4•56『线路43』 +青海卫视,http://t.061899.xyz/tl/dq.php?id=qhws$LR•IPV4•56『线路44』 +青海卫视,https://zby.130519.xyz/PLTV/11/224/3221226105/index.m3u8$LR•IPV4•56『线路45』 +青海卫视,http://stream.qhbtv.com/qhws/sd/live.m3u8?_upt=f35a89681647856030$LR•IPV4•56『线路46』 +青海卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010111$LR•IPV4•56『线路47』 +青海卫视,http://z.b.bkpcp.top/m.php?id=qhws$LR•IPV4•56『线路48』 +青海卫视,http://j.x.bkpcp.top/jx/QHWS$LR•IPV4•56『线路49』 +青海卫视,http://goo.bkpcp.top/mg/qhws$LR•IPV4•56『线路50』 +青海卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003887430.m3u8$LR•IPV4•56『线路51』 +青海卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225628/index.m3u8$LR•IPV6•56『线路52』 +青海卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227017/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EacviHy_ucMT27Ymf2iLtZA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•56『线路53』 +青海卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001082/index.m3u8$LR•IPV6•56『线路54』 +青海卫视,http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221227119/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•56『线路55』 +青海卫视,http://[2409:8087:3428:20:500::1009]:6610/PLTV/88888888/224/3221227119/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•56『线路56』 +山东卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226957/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EjW26v5VaHGy1jQuIA-4EbA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•58『线路1』 +山东卫视,https://cc06.tv12.xyz/101.m3u8$LR•IPV4•58『线路2』 +山东卫视,http://zzssw01.55555.io:9901/tsfile/live/0131_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路3』 +山东卫视,http://112.27.235.94:8000/hls/34/index.m3u8$LR•IPV4•58『线路4』 +山东卫视,https://cc06.tv12.xyz/101.m3u8$LR•IPV4•58『线路5』 +山东卫视,http://zzssw01.55555.io:9901/tsfile/live/0131_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路6』 +山东卫视,http://112.27.235.94:8000/hls/34/index.m3u8$LR•IPV4•58『线路7』 +山东卫视,http://101.74.28.84:9901/tsfile/live/0131_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路8』 +山东卫视,http://1.195.131.143:9901/tsfile/live/0131_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路9』 +山东卫视,http://61.156.228.12:8154/tsfile/live/0131_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路10』 +山东卫视,http://l.cztvcloud.com/channels/lantian/SXshengzhou1/720p.m3u8$LR•IPV4•58『线路11』 +山东卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010066$LR•IPV4•58『线路12』 +山东卫视,http://z.b.bkpcp.top/m.php?id=sdws$LR•IPV4•58『线路13』 +山东卫视,http://j.x.bkpcp.top/jx/SHANDHD$LR•IPV4•58『线路14』 +山东卫视,http://iptv.huuc.edu.cn/hls/sdhd.m3u8$LR•IPV4•58『线路15』 +山东卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003873467.m3u8$LR•IPV4•58『线路16』 +山东卫视,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227234/index.m3u8$LR•IPV4•58『线路17』 +山东卫视,http://120.192.226.35:8009/hls/40/index.m3u8$LR•IPV4•58『线路18』 +山东卫视,http://61.138.128.226:19901/tsfile/live/0131_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路19』 +山东卫视,http://222.173.108.238:352/tsfile/live/0131_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•58『线路20』 +山东卫视,http://36.105.100.208:35455/itv/1000000005000265019.m3u8?cdn=ystenlive$LR•IPV4•58『线路21』 +山东卫视,http://iptv.0564.org:35455/itv/1000000005000265019.m3u8?cdn=ystenlive$LR•IPV4•58『线路22』 +山东卫视,http://mh0.asia:35455/itv/1000000005000265019.m3u8?cdn=ystenlive$LR•IPV4•58『线路23』 +山东卫视,http://xxx.504900.xyz:35455/itv/1000000005000265019.m3u8?cdn=ystenlive$LR•IPV4•58『线路24』 +山东卫视,http://3501776.xyz:35455/itv/1000000005000265019.m3u8?cdn=ystenlive$LR•IPV4•58『线路25』 +山东卫视,http://175.171.30.26:5111/hls/574828641/index.m3u8$LR•IPV4•58『线路26』 +山东卫视,http://113.118.15.210:808/hls/43/index.m3u8$LR•IPV4•58『线路27』 +山东卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226456/index.m3u8$LR•IPV6•58『线路28』 +山东卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226456/index.m3u8$LR•IPV6•58『线路29』 +山东卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226957/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EjW26v5VaHGy1jQuIA-4EbA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•58『线路30』 +山东卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226456/index.m3u8$LR•IPV4•58『线路31』 +山东卫视,http://k.061899.xyz/m.php?id=sdws$LR•IPV4•58『线路32』 +山东卫视,http://t.061899.xyz/tl/tl.php?id=sdws$LR•IPV4•58『线路33』 +山东卫视,http://39.134.67.108/PLTV/88888888/224/3221225952/1.m3u8$LR•IPV4•58『线路34』 +山东卫视,http://39.134.67.108/PLTV/88888888/224/3221226034/1.m3u8$LR•IPV4•58『线路35』 +山东卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226456$LR•IPV4•58『线路36』 +山东卫视,http://148.135.93.213/live.php?id=山东卫视$LR•IPV4•58『线路37』 +山东卫视,http://home.wwang.pw:35455/itv/1000000005000265019.m3u8?cdn=ystenlive$LR•IPV4•58『线路38』 +山东卫视,http://223.105.252.8/PLTV/4/224/3221227448/index.m3u8$LR•IPV4•58『线路39』 +山东卫视,http://iptv.huuc.edu.cn/hls/sdhd.m3u8$LR•IPV4•58『线路40』 +山东卫视,http://ygbh.site/php/bfgd.php?id=099$LR•IPV4•58『线路41』 +山东卫视,https://cc06.tv12.xyz/101.m3u8$LR•IPV4•58『线路42』 +山东卫视,http://112.27.235.94:8000/hls/34/index.m3u8$LR•IPV4•58『线路43』 +山东卫视,http://39.135.133.144/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226456/index.m3u8$LR•IPV4•58『线路44』 +山东卫视,http://mg.hmysapp.cn:177/ckmg/zb.php?id=sdws$LR•IPV4•58『线路45』 +山东卫视,http://t.061899.xyz/tl/dq.php?id=sdws$LR•IPV4•58『线路46』 +山东卫视,https://zby.130519.xyz/PLTV/11/224/3221225733/index.m3u8$LR•IPV4•58『线路47』 +山东卫视,http://148.135.93.213:81/live.php?id=山东卫视$LR•IPV4•58『线路48』 +山东卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010066$LR•IPV4•58『线路49』 +山东卫视,http://z.b.bkpcp.top/m.php?id=sdws$LR•IPV4•58『线路50』 +山东卫视,http://j.x.bkpcp.top/jx/SHANDHD$LR•IPV4•58『线路51』 +山东卫视,http://l.cztvcloud.com/channels/lantian/SXshengzhou1/720p.m3u8$LR•IPV4•58『线路52』 +山东卫视,http://iptv.huuc.edu.cn/hls/sdhd.m3u8$LR•IPV4•58『线路53』 +山东卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003873467.m3u8$LR•IPV4•58『线路54』 +山东卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226456/index.m3u8$LR•IPV6•58『线路55』 +山东卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226456/index.m3u8$LR•IPV6•58『线路56』 +山东卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226957/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EjW26v5VaHGy1jQuIA-4EbA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•58『线路57』 +山东卫视,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227234/index.m3u8$LR•IPV4•58『线路58』 +天津卫视,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•69『线路1』 +天津卫视,http://112.27.235.94:8000/hls/42/index.m3u8$LR•IPV4•69『线路2』 +天津卫视,http://60.16.0.216:5757/hls/34/index.m3u8$LR•IPV4•69『线路3』 +天津卫视,http://112.27.235.94:8000/hls/42/index.m3u8$LR•IPV4•69『线路4』 +天津卫视,http://60.16.0.216:5757/hls/34/index.m3u8$LR•IPV4•69『线路5』 +天津卫视,http://101.74.28.84:9901/tsfile/live/0135_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•69『线路6』 +天津卫视,http://106.118.70.125:9901/tsfile/live/0135_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•69『线路7』 +天津卫视,http://61.156.228.12:8154/tsfile/live/0135_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•69『线路8』 +天津卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226459$LR•IPV4•69『线路9』 +天津卫视,http://j.x.bkpcp.top/jx/TIANJHD$LR•IPV4•69『线路10』 +天津卫视,http://iptv.huuc.edu.cn/hls/tjhd.m3u8$LR•IPV4•69『线路11』 +天津卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003873466.m3u8$LR•IPV4•69『线路12』 +天津卫视,http://yc.myds.me:35455/itv/5000000004000006827.m3u8?cdn=bestzb$LR•IPV4•69『线路13』 +天津卫视,http://120.192.226.35:8009/hls/44/index.m3u8$LR•IPV4•69『线路14』 +天津卫视,http://123.182.60.29:9002/hls/23/index.m3u8$LR•IPV4•69『线路15』 +天津卫视,http://36.32.174.67:60080/newlive/live/hls/26/live.m3u8$LR•IPV4•69『线路16』 +天津卫视,http://61.138.128.226:19901/tsfile/live/0135_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•69『线路17』 +天津卫视,http://222.173.108.238:352/tsfile/live/0135_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•69『线路18』 +天津卫视,http://36.105.100.208:35455/itv/1000000005000265026.m3u8?cdn=ystenlive$LR•IPV4•69『线路19』 +天津卫视,http://iptv.0564.org:35455/itv/1000000005000265026.m3u8?cdn=ystenlive$LR•IPV4•69『线路20』 +天津卫视,http://mh0.asia:35455/itv/1000000005000265026.m3u8?cdn=ystenlive$LR•IPV4•69『线路21』 +天津卫视,http://xxx.504900.xyz:35455/itv/1000000005000265026.m3u8?cdn=ystenlive$LR•IPV4•69『线路22』 +天津卫视,http://3501776.xyz:35455/itv/1000000005000265026.m3u8?cdn=ystenlive$LR•IPV4•69『线路23』 +天津卫视,http://[2409:8087:1a01:df::4030]:80/TVOD/88888888/224/3221225972/main.m3u8$LR•IPV6•69『线路24』 +天津卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226459/index.m3u8$LR•IPV6•69『线路25』 +天津卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226459/index.m3u8$LR•IPV6•69『线路26』 +天津卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001036/index.m3u8$LR•IPV6•69『线路27』 +天津卫视,http://[2409:8087:2001:20:2800:0:df6e:eb11]:80/ott.mobaibox.com/PLTV/4/224/3221227488/index.m3u8$LR•IPV6•69『线路28』 +天津卫视,https://live.mxdyeah.top/live.php?id=tianjinHD$LR•IPV4•69『线路29』 +天津卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225740/index.m3u8$LR•IPV4•69『线路30』 +天津卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226459/index.m3u8$LR•IPV4•69『线路31』 +天津卫视,http://k.061899.xyz/m.php?id=tjws$LR•IPV4•69『线路32』 +天津卫视,http://t.061899.xyz/tl/tl.php?id=tjws$LR•IPV4•69『线路33』 +天津卫视,http://sh.lnott.top:880/dx30.m3u8$LR•IPV4•69『线路34』 +天津卫视,http://39.134.67.108/PLTV/88888888/224/3221225972/1.m3u8$LR•IPV4•69『线路35』 +天津卫视,http://39.134.67.108/PLTV/88888888/224/3221226003/1.m3u8$LR•IPV4•69『线路36』 +天津卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226459$LR•IPV4•69『线路37』 +天津卫视,http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/tianjinHD/__op/default/__f/index.m3u8$LR•IPV4•69『线路38』 +天津卫视,http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/tianjinHD/__op/default/__f/index.m3u8$LR•IPV4•69『线路39』 +天津卫视,http://148.135.93.213/live.php?id=天津卫视$LR•IPV4•69『线路40』 +天津卫视,http://home.wwang.pw:35455/itv/1000000005000265026.m3u8?cdn=ystenlive$LR•IPV4•69『线路41』 +天津卫视,http://58.57.40.22:9901/tsfile/live/1034_1.m3u8$LR•IPV4•69『线路42』 +天津卫视,https://piccpndks.v.kcdnvip.com/audio/tianjin_2/index.m3u8$LR•IPV4•69『线路43』 +天津卫视,http://iptv.huuc.edu.cn/hls/tjhd.m3u8$LR•IPV4•69『线路44』 +天津卫视,http://ygbh.site/php/bfgd.php?id=084$LR•IPV4•69『线路45』 +天津卫视,http://112.27.235.94:8000/hls/42/index.m3u8$LR•IPV4•69『线路46』 +天津卫视,http://39.135.135.14/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225740/index.m3u8$LR•IPV4•69『线路47』 +天津卫视,https://zby.130519.xyz/PLTV/11/224/3221225742/index.m3u8$LR•IPV4•69『线路48』 +天津卫视,http://148.135.93.213:81/live.php?id=天津卫视$LR•IPV4•69『线路49』 +天津卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226459$LR•IPV4•69『线路50』 +天津卫视,http://j.x.bkpcp.top/jx/TIANJHD$LR•IPV4•69『线路51』 +天津卫视,http://iptv.huuc.edu.cn/hls/tjhd.m3u8$LR•IPV4•69『线路52』 +天津卫视,http://[2409:8087:1a01:df::4030]:80/TVOD/88888888/224/3221225972/main.m3u8$LR•IPV6•69『线路53』 +天津卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003873466.m3u8$LR•IPV4•69『线路54』 +天津卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226459/index.m3u8$LR•IPV6•69『线路55』 +天津卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226459/index.m3u8$LR•IPV6•69『线路56』 +天津卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001036/index.m3u8$LR•IPV6•69『线路57』 +天津卫视,http://[2409:8087:2001:20:2800:0:df6e:eb11]:80/ott.mobaibox.com/PLTV/4/224/3221227488/index.m3u8$LR•IPV6•69『线路58』 +天津卫视,http://yc.myds.me:35455/itv/5000000004000006827.m3u8?cdn=bestzb$LR•IPV4•69『线路59』 +天津卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226459$LR•IPV4•69『线路60』 +天津卫视,http://j.x.bkpcp.top/jx/TIANJHD$LR•IPV4•69『线路61』 +天津卫视,http://iptv.huuc.edu.cn/hls/tjhd.m3u8$LR•IPV4•69『线路62』 +天津卫视,http://[2409:8087:1a01:df::4030]:80/TVOD/88888888/224/3221225972/main.m3u8$LR•IPV6•69『线路63』 +天津卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003873466.m3u8$LR•IPV4•69『线路64』 +天津卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226459/index.m3u8$LR•IPV6•69『线路65』 +天津卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226459/index.m3u8$LR•IPV6•69『线路66』 +天津卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001036/index.m3u8$LR•IPV6•69『线路67』 +天津卫视,http://[2409:8087:2001:20:2800:0:df6e:eb11]:80/ott.mobaibox.com/PLTV/4/224/3221227488/index.m3u8$LR•IPV6•69『线路68』 +天津卫视,http://yc.myds.me:35455/itv/5000000004000006827.m3u8?cdn=bestzb$LR•IPV4•69『线路69』 +海南卫视,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•63『线路1』 +海南卫视,http://120.76.248.139/live/bfgd/4200000473.m3u8$LR•IPV4•63『线路2』 +海南卫视,http://nn.7x9d.cn/地方台8563/海南.php?id=hnws$LR•IPV4•63『线路3』 +海南卫视,http://nn.7x9d.cn/地方台8563/海南.php?id=hnws&?key=txiptv$LR•IPV4•63『线路4』 +海南卫视,http://genglei.8866.org:9901/tsfile/live/1026_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•63『线路5』 +海南卫视,http://120.76.248.139/live/bfgd/4200000473.m3u8$LR•IPV4•63『线路6』 +海南卫视,http://nn.7x9d.cn/地方台8563/海南.php?id=hnws$LR•IPV4•63『线路7』 +海南卫视,http://nn.7x9d.cn/地方台8563/海南.php?id=hnws&?key=txiptv$LR•IPV4•63『线路8』 +海南卫视,http://genglei.8866.org:9901/tsfile/live/1026_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•63『线路9』 +海南卫视,http://106.118.70.125:9901/tsfile/live/1019_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•63『线路10』 +海南卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010083$LR•IPV4•63『线路11』 +海南卫视,http://z.b.bkpcp.top/m.php?id=hinws$LR•IPV4•63『线路12』 +海南卫视,http://j.x.bkpcp.top/jx/HAINHD$LR•IPV4•63『线路13』 +海南卫视,http://goo.bkpcp.top/mg/hinws$LR•IPV4•63『线路14』 +海南卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000004796877.m3u8$LR•IPV4•63『线路15』 +海南卫视,http://113.56.95.69:53765/tsfile/live/1019_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•63『线路16』 +海南卫视,http://36.32.174.67:60080/newlive/live/hls/46/live.m3u8$LR•IPV4•63『线路17』 +海南卫视,http://cssbyd.imwork.net:8082/hls/31/index.m3u8$LR•IPV4•63『线路18』 +海南卫视,http://61.138.128.226:19901/tsfile/live/1015_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•63『线路19』 +海南卫视,http://36.105.100.208:35455/itv/5000000004000006211.m3u8?cdn=bestzb$LR•IPV4•63『线路20』 +海南卫视,http://113.118.15.210:808/hls/124/index.m3u8$LR•IPV4•63『线路21』 +海南卫视,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=4960&tk=23a9aca1f79f$LR•IPV4•63『线路22』 +海南卫视,https://www.yangshipin.cn/tv/home?pid=600002506$LR•IPV4•63『线路23』 +海南卫视,http://58.221.214.82:9901/tsfile/live/0016_2.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•63『线路24』 +海南卫视,http://139.129.231.228/rtp/239.21.2.14:5002$LR•IPV4•63『线路25』 +海南卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226465/index.m3u8$LR•IPV6•63『线路26』 +海南卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226465/index.m3u8$LR•IPV6•63『线路27』 +海南卫视,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•63『线路28』 +海南卫视,http://[2409:8087:2001:20:2800:0:df6e:eb09]:80/ott.mobaibox.com/PLTV/4/224/3221228139/index.m3u8$LR•IPV6•63『线路29』 +海南卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001183/index.m3u8$LR•IPV6•63『线路30』 +海南卫视,https://live.mxdyeah.top/live.php?id=hainanSD$LR•IPV4•63『线路31』 +海南卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226465/index.m3u8$LR•IPV4•63『线路32』 +海南卫视,http://k.061899.xyz/m.php?id=hinws$LR•IPV4•63『线路33』 +海南卫视,http://t.061899.xyz/tl/tl.php?id=hinws$LR•IPV4•63『线路34』 +海南卫视,http://sh.lnott.top:880/dx58.m3u8$LR•IPV4•63『线路35』 +海南卫视,http://39.134.67.108/PLTV/88888888/224/3221226026/1.m3u8$LR•IPV4•63『线路36』 +海南卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226465$LR•IPV4•63『线路37』 +海南卫视,http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/hainanSD/__op/default/__f/index.m3u8$LR•IPV4•63『线路38』 +海南卫视,http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/hainanSD/__op/default/__f/index.m3u8$LR•IPV4•63『线路39』 +海南卫视,https://live3.hnntv.cn/srs/tv/lywsgq.m3u8$LR•IPV4•63『线路40』 +海南卫视,http://148.135.93.213/live.php?id=海南卫视$LR•IPV4•63『线路41』 +海南卫视,http://120.76.248.139/live/bfgd/4200000473.m3u8$LR•IPV4•63『线路42』 +海南卫视,http://nn.7x9d.cn/地方台8563/海南.php?id=hnws$LR•IPV4•63『线路43』 +海南卫视,http://home.wwang.pw:35455/itv/5000000004000006211.m3u8?cdn=bestzb$LR•IPV4•63『线路44』 +海南卫视,http://58.57.40.22:9901/tsfile/live/1000_1.m3u8$LR•IPV4•63『线路45』 +海南卫视,http://ygbh.site/php/bfgd.php?id=473$LR•IPV4•63『线路46』 +海南卫视,https://cc06.tv12.xyz/93.m3u8$LR•IPV4•63『线路47』 +海南卫视,http://39.134.65.75/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225639/index.m3u8$LR•IPV4•63『线路48』 +海南卫视,http://mg.hmysapp.cn:177/ckmg/zb.php?id=hinws$LR•IPV4•63『线路49』 +海南卫视,http://t.061899.xyz/tl/dq.php?id=hinws$LR•IPV4•63『线路50』 +海南卫视,https://zby.130519.xyz/PLTV/11/224/3221226154/index.m3u8$LR•IPV4•63『线路51』 +海南卫视,http://nn.7x9d.cn/地方台8563/海南.php?id=hnws$LR•IPV4•63『线路52』 +海南卫视,http://148.135.93.213:81/live.php?id=海南卫视$LR•IPV4•63『线路53』 +海南卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010083$LR•IPV4•63『线路54』 +海南卫视,http://z.b.bkpcp.top/m.php?id=hinws$LR•IPV4•63『线路55』 +海南卫视,http://j.x.bkpcp.top/jx/HAINHD$LR•IPV4•63『线路56』 +海南卫视,http://goo.bkpcp.top/mg/hinws$LR•IPV4•63『线路57』 +海南卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000004796877.m3u8$LR•IPV4•63『线路58』 +海南卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221226465/index.m3u8$LR•IPV6•63『线路59』 +海南卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226465/index.m3u8$LR•IPV6•63『线路60』 +海南卫视,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•63『线路61』 +海南卫视,http://[2409:8087:2001:20:2800:0:df6e:eb09]:80/ott.mobaibox.com/PLTV/4/224/3221228139/index.m3u8$LR•IPV6•63『线路62』 +海南卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001183/index.m3u8$LR•IPV6•63『线路63』 +新疆卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227011/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ExAUu61iVvo_xYbANWJhgXw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•56『线路1』 +新疆卫视,http://218.84.12.186:8001/hls/main/playlist.m3u8?zxinjd;http://218.84.12.186:8001/hls/main/playlist.m3u8zxinjd$LR•IPV4•56『线路2』 +新疆卫视,http://218.84.12.186:8001/hls/main/playlist.m3u8?zxinjd;http://218.84.12.186:8001/hls/main/playlist.m3u8zxinjd$LR•IPV4•56『线路3』 +新疆卫视,http://1.195.131.143:9901/tsfile/live/0110_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•56『线路4』 +新疆卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225635$LR•IPV4•56『线路5』 +新疆卫视,http://z.b.bkpcp.top/m.php?id=xjws$LR•IPV4•56『线路6』 +新疆卫视,http://j.x.bkpcp.top/jx/XJWS$LR•IPV4•56『线路7』 +新疆卫视,http://goo.bkpcp.top/mg/xjws$LR•IPV4•56『线路8』 +新疆卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003887448.m3u8$LR•IPV4•56『线路9』 +新疆卫视,http://120.192.226.35:8009/hls/61/index.m3u8$LR•IPV4•56『线路10』 +新疆卫视,http://36.32.174.67:60080/newlive/live/hls/47/live.m3u8$LR•IPV4•56『线路11』 +新疆卫视,http://61.138.128.226:19901/tsfile/live/0110_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•56『线路12』 +新疆卫视,http://36.105.100.208:35455/itv/1000000002000029441.m3u8?cdn=ystenlive$LR•IPV4•56『线路13』 +新疆卫视,http://113.118.15.210:808/hls/65/index.m3u8$LR•IPV4•56『线路14』 +新疆卫视,http://110.7.131.4:9901/tsfile/live/0110_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•56『线路15』 +新疆卫视,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=9483&tk=23a9aca1f79f$LR•IPV4•56『线路16』 +新疆卫视,http://139.129.231.228:50060/rtp/239.21.1.45:5002$LR•IPV4•56『线路17』 +新疆卫视,http://111.61.236.247:9081/hls/53/index.m3u8$LR•IPV4•56『线路18』 +新疆卫视,http://139.196.151.191:2051/rtp/239.45.1.116:5140$LR•IPV4•56『线路19』 +新疆卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225635/index.m3u8$LR•IPV6•56『线路20』 +新疆卫视,http://[2409:8087:2001:20:2800:0:df6e:eb0b]/wh7f454c46tw993550557_162751766/ott.mobaibox.com/PLTV/3/224/3221228290/index.m3u8?icpid=3&RTS=1668604377&from=40&popid=40&hms_devid=2038&prioritypopid=40&vqe=3$LR•IPV6•56『线路21』 +新疆卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226460/index.m3u8$LR•IPV6•56『线路22』 +新疆卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001065/index.m3u8$LR•IPV6•56『线路23』 +新疆卫视,http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221227248/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•56『线路24』 +新疆卫视,http://39.134.67.108/PLTV/88888888/224/3221225999/1.m3u8$LR•IPV4•56『线路25』 +新疆卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225635$LR•IPV4•56『线路26』 +新疆卫视,http://101.35.240.114:88/live.php?id=新疆卫视$LR•IPV4•56『线路27』 +新疆卫视,http://home.wwang.pw:35455/itv/1000000002000029441.m3u8?cdn=ystenlive$LR•IPV4•56『线路28』 +新疆卫视,http://58.57.40.22:9901/tsfile/live/1055_1.m3u8$LR•IPV4•56『线路29』 +新疆卫视,http://ygbh.site/php/bfgd.php?id=150$LR•IPV4•56『线路30』 +新疆卫视,https://cc06.tv12.xyz/109.m3u8$LR•IPV4•56『线路31』 +新疆卫视,http://39.135.133.147/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226460/index.m3u8$LR•IPV4•56『线路32』 +新疆卫视,http://mg.hmysapp.cn:177/ckmg/zb.php?id=xjws$LR•IPV4•56『线路33』 +新疆卫视,http://t.061899.xyz/tl/dq.php?id=xjws$LR•IPV4•56『线路34』 +新疆卫视,http://cc2022.ifengli.com:2000/live/xjws-sd/1500.m3u8?innersid=2025$LR•IPV4•56『线路35』 +新疆卫视,http://218.84.12.186:8001/hls/main/playlist.m3u8?zxinjd;http://218.84.12.186:8001/hls/main/playlist.m3u8zxinjd$LR•IPV4•56『线路36』 +新疆卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225635$LR•IPV4•56『线路37』 +新疆卫视,http://z.b.bkpcp.top/m.php?id=xjws$LR•IPV4•56『线路38』 +新疆卫视,http://j.x.bkpcp.top/jx/XJWS$LR•IPV4•56『线路39』 +新疆卫视,http://goo.bkpcp.top/mg/xjws$LR•IPV4•56『线路40』 +新疆卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003887448.m3u8$LR•IPV4•56『线路41』 +新疆卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225635/index.m3u8$LR•IPV6•56『线路42』 +新疆卫视,http://[2409:8087:2001:20:2800:0:df6e:eb0b]/wh7f454c46tw993550557_162751766/ott.mobaibox.com/PLTV/3/224/3221228290/index.m3u8?icpid=3&RTS=1668604377&from=40&popid=40&hms_devid=2038&prioritypopid=40&vqe=3$LR•IPV6•56『线路43』 +新疆卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226460/index.m3u8$LR•IPV6•56『线路44』 +新疆卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001065/index.m3u8$LR•IPV6•56『线路45』 +新疆卫视,http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221227248/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•56『线路46』 +新疆卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225635$LR•IPV4•56『线路47』 +新疆卫视,http://z.b.bkpcp.top/m.php?id=xjws$LR•IPV4•56『线路48』 +新疆卫视,http://j.x.bkpcp.top/jx/XJWS$LR•IPV4•56『线路49』 +新疆卫视,http://goo.bkpcp.top/mg/xjws$LR•IPV4•56『线路50』 +新疆卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003887448.m3u8$LR•IPV4•56『线路51』 +新疆卫视,http://[2409:8087:1a0a:df::404b]/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225635/index.m3u8$LR•IPV6•56『线路52』 +新疆卫视,http://[2409:8087:2001:20:2800:0:df6e:eb0b]/wh7f454c46tw993550557_162751766/ott.mobaibox.com/PLTV/3/224/3221228290/index.m3u8?icpid=3&RTS=1668604377&from=40&popid=40&hms_devid=2038&prioritypopid=40&vqe=3$LR•IPV6•56『线路53』 +新疆卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226460/index.m3u8$LR•IPV6•56『线路54』 +新疆卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001065/index.m3u8$LR•IPV6•56『线路55』 +新疆卫视,http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221227248/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•56『线路56』 +云南卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227028/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EGfQPqRNVeBjTMsZ48qu0SA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•56『线路1』 +云南卫视,https://cc06.tv12.xyz/114.m3u8$LR•IPV4•56『线路2』 +云南卫视,http://112.27.235.94:8000/hls/40/index.m3u8$LR•IPV4•56『线路3』 +云南卫视,https://cc06.tv12.xyz/114.m3u8$LR•IPV4•56『线路4』 +云南卫视,http://112.27.235.94:8000/hls/40/index.m3u8$LR•IPV4•56『线路5』 +云南卫视,http://1.195.131.143:9901/tsfile/live/0119_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•56『线路6』 +云南卫视,http://101.66.198.42:9901/tsfile/live/0119_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•56『线路7』 +云南卫视,http://223.167.245.215:8001/rtp/239.45.0.4:5140$LR•IPV4•56『线路8』 +云南卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226444$LR•IPV4•56『线路9』 +云南卫视,http://z.b.bkpcp.top/m.php?id=ynws$LR•IPV4•56『线路10』 +云南卫视,http://goo.bkpcp.top/mg/ynws$LR•IPV4•56『线路11』 +云南卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003887453.m3u8$LR•IPV4•56『线路12』 +云南卫视,http://120.192.226.35:8009/hls/56/index.m3u8$LR•IPV4•56『线路13』 +云南卫视,http://123.182.60.29:9002/hls/33/index.m3u8$LR•IPV4•56『线路14』 +云南卫视,http://36.32.174.67:60080/newlive/live/hls/45/live.m3u8$LR•IPV4•56『线路15』 +云南卫视,http://cssbyd.imwork.net:8082/hls/36/index.m3u8$LR•IPV4•56『线路16』 +云南卫视,http://61.138.128.226:19901/tsfile/live/0119_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•56『线路17』 +云南卫视,http://36.105.100.208:35455/itv/5000000011000031120.m3u8?cdn=bestzb$LR•IPV4•56『线路18』 +云南卫视,http://113.118.15.210:808/hls/52/index.m3u8$LR•IPV4•56『线路19』 +云南卫视,http://110.7.131.4:9901/tsfile/live/0119_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•56『线路20』 +云南卫视,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=2067&tk=23a9aca1f79f$LR•IPV4•56『线路21』 +云南卫视,http://116.117.105.51:8096/tsfile/live/0119_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•56『线路22』 +云南卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226444/index.m3u8$LR•IPV6•56『线路23』 +云南卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227028/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EGfQPqRNVeBjTMsZ48qu0SA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•56『线路24』 +云南卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001223/index.m3u8$LR•IPV6•56『线路25』 +云南卫视,http://[2409:8087:4402:20:1:1216:401:14]/iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226660/index.m3u8$LR•IPV6•56『线路26』 +云南卫视,http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221227181/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•56『线路27』 +云南卫视,https://live.mxdyeah.top/live.php?id=yunnanSD$LR•IPV4•56『线路28』 +云南卫视,http://39.134.67.108/PLTV/88888888/224/3221225957/1.m3u8$LR•IPV4•56『线路29』 +云南卫视,http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/yunnanSD/__op/default/__f/index.m3u8$LR•IPV4•56『线路30』 +云南卫视,http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/yunnanSD/__op/default/__f/index.m3u8$LR•IPV4•56『线路31』 +云南卫视,http://tvlive.ynradio.com/live/yunnanweishi/chunks.m3u8$LR•IPV4•56『线路32』 +云南卫视,http://tvlive.ynradio.com/live/yunnanweishi/chunks.m3u8$LR•IPV4•56『线路33』 +云南卫视,http://nn.7x9d.cn/xzc2.php?ua=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNi4xOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTA2LjAuMC4wIFNhZmFyaS81MzcuMzY=&hls=aHR0cDovL3d3dy5kc2suY2MvcGhwL3N4Z2QucGhwP2lkPXlud3M=$LR•IPV4•56『线路34』 +云南卫视,http://home.wwang.pw:35455/itv/5000000011000031120.m3u8?cdn=bestzb$LR•IPV4•56『线路35』 +云南卫视,http://58.57.40.22:9901/tsfile/live/1047_1.m3u8$LR•IPV4•56『线路36』 +云南卫视,http://p2.ytelc.com/xgplayer.php?id=https://hwapi.yntv.net/ew265l/z1z6s5.m3u8$LR•IPV4•56『线路37』 +云南卫视,http://ygbh.site/php/bfgd.php?id=115$LR•IPV4•56『线路38』 +云南卫视,https://cc06.tv12.xyz/114.m3u8$LR•IPV4•56『线路39』 +云南卫视,http://112.27.235.94:8000/hls/40/index.m3u8$LR•IPV4•56『线路40』 +云南卫视,http://39.135.133.180/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226444/index.m3u8$LR•IPV4•56『线路41』 +云南卫视,http://mg.hmysapp.cn:177/ckmg/zb.php?id=ynws$LR•IPV4•56『线路42』 +云南卫视,http://t.061899.xyz/tl/dq.php?id=ynws$LR•IPV4•56『线路43』 +云南卫视,https://zby.130519.xyz/PLTV/11/224/3221226109/index.m3u8$LR•IPV4•56『线路44』 +云南卫视,http://cc2022.ifengli.com:2000/live/ynws-hd/2500.m3u8?innersid=2025$LR•IPV4•56『线路45』 +云南卫视,http://223.167.245.215:8001/rtp/239.45.0.4:5140$LR•IPV4•56『线路46』 +云南卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226444$LR•IPV4•56『线路47』 +云南卫视,http://z.b.bkpcp.top/m.php?id=ynws$LR•IPV4•56『线路48』 +云南卫视,http://goo.bkpcp.top/mg/ynws$LR•IPV4•56『线路49』 +云南卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003887453.m3u8$LR•IPV4•56『线路50』 +云南卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226444/index.m3u8$LR•IPV6•56『线路51』 +云南卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227028/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EGfQPqRNVeBjTMsZ48qu0SA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•56『线路52』 +云南卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001223/index.m3u8$LR•IPV6•56『线路53』 +云南卫视,http://[2409:8087:4402:20:1:1216:401:14]/iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226660/index.m3u8$LR•IPV6•56『线路54』 +云南卫视,http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221227181/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•56『线路55』 +云南卫视,http://[2409:8087:3428:20:500::1009]:6610/PLTV/88888888/224/3221225853/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•56『线路56』 +西藏卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227033/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EdeTB7OZ9G_VNJk5C3t96fQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•54『线路1』 +西藏卫视,http://php.jdshipin.com/xztv.php?id=ws$LR•IPV4•54『线路2』 +西藏卫视,http://php.jdshipin.com:8880/xztv.php?id=ws$LR•IPV4•54『线路3』 +西藏卫视,http://php.jdshipin.com/xztv.php?id=ws$LR•IPV4•54『线路4』 +西藏卫视,http://php.jdshipin.com:8880/xztv.php?id=ws$LR•IPV4•54『线路5』 +西藏卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225638$LR•IPV4•54『线路6』 +西藏卫视,http://z.b.bkpcp.top/m.php?id=xzws$LR•IPV4•54『线路7』 +西藏卫视,http://goo.bkpcp.top/mg/xzws$LR•IPV4•54『线路8』 +西藏卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003887434.m3u8$LR•IPV4•54『线路9』 +西藏卫视,https://tv.vtibet.cn/live/h701F9MpxzPDyE.m3u8?secret=4eca0fb428c7390f0e7cdee6a0044c78&time=6817e4bb$LR•IPV4•54『线路10』 +西藏卫视,http://dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226212/1.m3u8$LR•IPV4•54『线路11』 +西藏卫视,http://120.192.226.35:8009/hls/59/index.m3u8$LR•IPV4•54『线路12』 +西藏卫视,http://36.32.174.67:60080/newlive/live/hls/48/live.m3u8$LR•IPV4•54『线路13』 +西藏卫视,http://cssbyd.imwork.net:8082/hls/46/index.m3u8$LR•IPV4•54『线路14』 +西藏卫视,http://61.138.128.226:19901/tsfile/live/0111_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•54『线路15』 +西藏卫视,http://36.105.100.208:35455/itv/6603041244077933770.m3u8?cdn=ystenlive$LR•IPV4•54『线路16』 +西藏卫视,http://113.118.15.210:808/hls/64/index.m3u8$LR•IPV4•54『线路17』 +西藏卫视,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=0854&tk=23a9aca1f79f$LR•IPV4•54『线路18』 +西藏卫视,http://120.238.94.10:9901/tsfile/live/1077_1.m3u8$LR•IPV4•54『线路19』 +西藏卫视,http://139.129.231.228:50060/rtp/239.21.1.46:5002$LR•IPV4•54『线路20』 +西藏卫视,http://111.61.236.247:9081/hls/52/index.m3u8$LR•IPV4•54『线路21』 +西藏卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001072/index.m3u8$LR•IPV6•54『线路22』 +西藏卫视,http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221226847/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•54『线路23』 +西藏卫视,http://[2409:8087:3428:20:500::1009]:6610/PLTV/88888888/224/3221226847/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•54『线路24』 +西藏卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227033/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EdeTB7OZ9G_VNJk5C3t96fQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•54『线路25』 +西藏卫视,https://live.mxdyeah.top/live.php?id=xizangSD$LR•IPV4•54『线路26』 +西藏卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225638/index.m3u8$LR•IPV4•54『线路27』 +西藏卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226433/index.m3u8$LR•IPV4•54『线路28』 +西藏卫视,http://k.061899.xyz/m.php?id=xzws$LR•IPV4•54『线路29』 +西藏卫视,http://t.061899.xyz/tl/tl.php?id=xzws$LR•IPV4•54『线路30』 +西藏卫视,http://39.134.67.108/PLTV/88888888/224/3221225951/1.m3u8$LR•IPV4•54『线路31』 +西藏卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225638$LR•IPV4•54『线路32』 +西藏卫视,http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/xizangSD/__op/default/__f/index.m3u8$LR•IPV4•54『线路33』 +西藏卫视,http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/xizangSD/__op/default/__f/index.m3u8$LR•IPV4•54『线路34』 +西藏卫视,http://101.35.240.114:88/live.php?id=西藏卫视$LR•IPV4•54『线路35』 +西藏卫视,http://home.wwang.pw:35455/itv/6603041244077933770.m3u8?cdn=ystenlive$LR•IPV4•54『线路36』 +西藏卫视,https://cc06.tv12.xyz/112.m3u8$LR•IPV4•54『线路37』 +西藏卫视,http://ygbh.site/php/bfgd.php?id=121$LR•IPV4•54『线路38』 +西藏卫视,https://cc06.tv12.xyz/112.m3u8$LR•IPV4•54『线路39』 +西藏卫视,http://39.134.65.72/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225638/index.m3u8$LR•IPV4•54『线路40』 +西藏卫视,http://mg.hmysapp.cn:177/ckmg/zb.php?id=xzws$LR•IPV4•54『线路41』 +西藏卫视,http://t.061899.xyz/tl/dq.php?id=xzws$LR•IPV4•54『线路42』 +西藏卫视,http://php.jdshipin.com:8880/xztv.php?id=ws$LR•IPV4•54『线路43』 +西藏卫视,http://148.135.93.213:81/live.php?id=西藏卫视$LR•IPV4•54『线路44』 +西藏卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225638$LR•IPV4•54『线路45』 +西藏卫视,http://z.b.bkpcp.top/m.php?id=xzws$LR•IPV4•54『线路46』 +西藏卫视,http://goo.bkpcp.top/mg/xzws$LR•IPV4•54『线路47』 +西藏卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003887434.m3u8$LR•IPV4•54『线路48』 +西藏卫视,https://tv.vtibet.cn/live/h701F9MpxzPDyE.m3u8?secret=4eca0fb428c7390f0e7cdee6a0044c78&time=6817e4bb$LR•IPV4•54『线路49』 +西藏卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001072/index.m3u8$LR•IPV6•54『线路50』 +西藏卫视,http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221226847/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•54『线路51』 +西藏卫视,http://[2409:8087:3428:20:500::1009]:6610/PLTV/88888888/224/3221226847/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•54『线路52』 +西藏卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227033/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EdeTB7OZ9G_VNJk5C3t96fQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•54『线路53』 +西藏卫视,http://dbiptv.sn.chinamobile.com/PLTV/88888888/224/3221226212/1.m3u8$LR•IPV4•54『线路54』 +海峡卫视,http://8.138.7.223/tv/hxws.m3u8$LR•IPV4•5『线路1』 +海峡卫视,http://8.138.7.223/tv/hxws.m3u8$LR•IPV4•5『线路2』 +海峡卫视,http://mg.hmysapp.cn:177/ckmg/zb.php?id=hxws$LR•IPV4•5『线路3』 +海峡卫视,http://t.061899.xyz/tl/dq.php?id=hxws$LR•IPV4•5『线路4』 +海峡卫视,http://8.138.7.223/tv/hxws.m3u8$LR•IPV4•5『线路5』 +兵团卫视,http://liveout.btzx.com.cn/62ds9e/yil08g.m3u8$LR•IPV4•25『线路1』 +兵团卫视,http://liveout.btzx.com.cn/62ds9e/yil08g.m3u8?mkey=txiptv$LR•IPV4•25『线路2』 +兵团卫视,http://8.138.7.223/tv/btws.m3u8$LR•IPV4•25『线路3』 +兵团卫视,http://liveout.btzx.com.cn/62ds9e/yil08g.m3u8?u8key=txiptv$LR•IPV4•25『线路4』 +兵团卫视,https://liveout.btzx.com.cn/62ds9e/yil08g.m3u8$LR•IPV4•25『线路5』 +兵团卫视,http://liveout.btzx.com.cn/62ds9e/yil08g.m3u8$LR•IPV4•25『线路6』 +兵团卫视,http://liveout.btzx.com.cn/62ds9e/yil08g.m3u8?mkey=txiptv$LR•IPV4•25『线路7』 +兵团卫视,http://8.138.7.223/tv/btws.m3u8$LR•IPV4•25『线路8』 +兵团卫视,http://liveout.btzx.com.cn/62ds9e/yil08g.m3u8?u8key=txiptv$LR•IPV4•25『线路9』 +兵团卫视,https://liveout.btzx.com.cn/62ds9e/yil08g.m3u8$LR•IPV4•25『线路10』 +兵团卫视,https://live.mxdyeah.top/live.php?id=bingtuanSD$LR•IPV4•25『线路11』 +兵团卫视,http://k.061899.xyz/m.php?id=btws$LR•IPV4•25『线路12』 +兵团卫视,http://t.061899.xyz/tl/tl.php?id=btws$LR•IPV4•25『线路13』 +兵团卫视,http://39.134.67.108/PLTV/88888888/224/3221226005/1.m3u8$LR•IPV4•25『线路14』 +兵团卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226439$LR•IPV4•25『线路15』 +兵团卫视,http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/bingtuanSD/__op/default/__f/index.m3u8$LR•IPV4•25『线路16』 +兵团卫视,http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/bingtuanSD/__op/default/__f/index.m3u8$LR•IPV4•25『线路17』 +兵团卫视,http://mobilelive-ds.ysp.cctv.cn/ysp/2022606701.m3u8$LR•IPV4•25『线路18』 +兵团卫视,http://liveout.btzx.com.cn/62ds9e/yil08g.m3u8$LR•IPV4•25『线路19』 +兵团卫视,http://home.wwang.pw:35455/itv/1000000005000266005.m3u8?cdn=ystenlive$LR•IPV4•25『线路20』 +兵团卫视,http://liveout.btzx.com.cn/62ds9e/yil08g.m3u8$LR•IPV4•25『线路21』 +兵团卫视,http://ygbh.site/php/bfgd.php?id=124$LR•IPV4•25『线路22』 +兵团卫视,https://cc06.tv12.xyz/30.m3u8$LR•IPV4•25『线路23』 +兵团卫视,http://39.135.133.178/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226439/index.m3u8$LR•IPV4•25『线路24』 +兵团卫视,https://liveout.btzx.com.cn/62ds9e/yil08g.m3u8$LR•IPV4•25『线路25』 +黄河卫视,http://liveflash.sxrtv.com/live/huanghe.m3u8?sub_m3u8=true&edge_slice=true$LR•IPV4 +安多卫视,https://liveout.xntv.tv/a65jur/90p2i1.m3u8?zqinghd$LR•IPV4•22『线路1』 +安多卫视,https://liveout.xntv.tv/a65jur/96iln2.m3u8$LR•IPV4•22『线路2』 +安多卫视,https://liveout.xntv.tv/a65jur/90p2i1.m3u8?zqinghd$LR•IPV4•22『线路3』 +安多卫视,https://liveout.xntv.tv/a65jur/96iln2.m3u8$LR•IPV4•22『线路4』 +安多卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225659$LR•IPV4•22『线路5』 +安多卫视,rtmp://liveout.xntv.tv/a65jur/96iln2$LR•IPV4•22『线路6』 +安多卫视,https://stream1.freetv.fun/52d0df257c5c3cec42f2ae19268dbbc261256ff391b27bd83553bea941d0c186.m3u8$LR•IPV4•22『线路7』 +安多卫视,http://36.105.100.208:35455/itv/1000000005000266001.m3u8?cdn=ystenlive$LR•IPV4•22『线路8』 +安多卫视,http://stream.qhbtv.com/adws/playlist.m3u8?_upt=d60823ce1718441050$LR•IPV4•22『线路9』 +安多卫视,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=8105&tk=2aca1ad9a849$LR•IPV4•22『线路10』 +安多卫视,http://[2409:8087:1a0b:df::4007]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225659/index.m3u8$LR•IPV6•22『线路11』 +安多卫视,http://stream.qhbtv.com/adws/sd/live.m3u8$LR•IPV4•22『线路12』 +安多卫视,http://home.wwang.pw:35455/itv/1000000005000266001.m3u8?cdn=ystenlive$LR•IPV4•22『线路13』 +安多卫视,https://liveout.xntv.tv/a65jur/96iln2.m3u8$LR•IPV4•22『线路14』 +安多卫视,http://39.134.65.78/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225659/index.m3u8$LR•IPV4•22『线路15』 +安多卫视,https://liveout.xntv.tv/a65jur/90p2i1.m3u8?zqinghd$LR•IPV4•22『线路16』 +安多卫视,http://stream.qhbtv.com/adws/playlist.m3u8?_upt=d60823ce1718441050$LR•IPV4•22『线路17』 +安多卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225659$LR•IPV4•22『线路18』 +安多卫视,https://liveout.xntv.tv/a65jur/90p2i1.m3u8?zqinghd$LR•IPV4•22『线路19』 +安多卫视,rtmp://liveout.xntv.tv/a65jur/96iln2$LR•IPV4•22『线路20』 +安多卫视,https://stream1.freetv.fun/52d0df257c5c3cec42f2ae19268dbbc261256ff391b27bd83553bea941d0c186.m3u8$LR•IPV4•22『线路21』 +安多卫视,http://[2409:8087:1a0b:df::4007]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225659/index.m3u8$LR•IPV6•22『线路22』 +康巴卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227027/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EkHMvBpWz4rccMxNvSRekpQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•24『线路1』 +康巴卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225660$LR•IPV4•24『线路2』 +康巴卫视,https://stream1.freetv.fun/b3baba1d904b40b2d929ec8cbdfa40800abc7cb6d1c18efed0d6d91d97bce5b3.ctv$LR•IPV4•24『线路3』 +康巴卫视,http://36.105.100.208:35455/itv/1000000005000266002.m3u8?cdn=ystenlive$LR•IPV4•24『线路4』 +康巴卫视,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=7174&tk=f6cc1e0a0e1a$LR•IPV4•24『线路5』 +康巴卫视,http://139.196.151.191:2051/rtp/239.45.1.251:5140$LR•IPV4•24『线路6』 +康巴卫视,http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221225856/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•24『线路7』 +康巴卫视,http://[2409:8087:3428:20:500::1009]:6610/PLTV/88888888/224/3221225856/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•24『线路8』 +康巴卫视,http://[2409:8087:2001:20:2800:0:df6e:eb10]:80/wh7f454c46tw3423902933_-437655574/ott.mobaibox.com/PLTV/3/224/3221227645/index.m3u8$LR•IPV6•24『线路9』 +康巴卫视,http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225660/index.m3u8$LR•IPV6•24『线路10』 +康巴卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227027/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EkHMvBpWz4rccMxNvSRekpQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•24『线路11』 +康巴卫视,http://[2409:8087:1a15:10d1::38]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225660/index.m3u8$LR•IPV6•24『线路12』 +康巴卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225660$LR•IPV4•24『线路13』 +康巴卫视,http://home.wwang.pw:35455/itv/1000000005000266002.m3u8?cdn=ystenlive$LR•IPV4•24『线路14』 +康巴卫视,http://111.202.12.159:8080/kYGHWzA/1000/live.m3u8$LR•IPV4•24『线路15』 +康巴卫视,http://39.134.65.65/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225660/index.m3u8$LR•IPV4•24『线路16』 +康巴卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225660$LR•IPV4•24『线路17』 +康巴卫视,http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221225856/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•24『线路18』 +康巴卫视,http://[2409:8087:3428:20:500::1009]:6610/PLTV/88888888/224/3221225856/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•24『线路19』 +康巴卫视,http://[2409:8087:2001:20:2800:0:df6e:eb10]:80/wh7f454c46tw3423902933_-437655574/ott.mobaibox.com/PLTV/3/224/3221227645/index.m3u8$LR•IPV6•24『线路20』 +康巴卫视,https://stream1.freetv.fun/b3baba1d904b40b2d929ec8cbdfa40800abc7cb6d1c18efed0d6d91d97bce5b3.ctv$LR•IPV4•24『线路21』 +康巴卫视,http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225660/index.m3u8$LR•IPV6•24『线路22』 +康巴卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227027/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EkHMvBpWz4rccMxNvSRekpQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•24『线路23』 +康巴卫视,http://[2409:8087:1a15:10d1::38]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225660/index.m3u8$LR•IPV6•24『线路24』 +农林卫视,http://120.76.248.139/live/bfgd/4200000122.m3u8$LR•IPV4•5『线路1』 +农林卫视,http://home.wwang.pw:35455/itv/1000000005000266003.m3u8?cdn=ystenlive$LR•IPV4•5『线路2』 +农林卫视,http://120.76.248.139/live/bfgd/4200000122.m3u8$LR•IPV4•5『线路3』 +农林卫视,http://ygbh.site/php/bfgd.php?id=122$LR•IPV4•5『线路4』 +农林卫视,https://cc06.tv12.xyz/105.m3u8$LR•IPV4•5『线路5』 +三沙卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003887452.m3u8$LR•IPV4•31『线路1』 +三沙卫视,https://stream1.freetv.fun/8bd6b69c423ac31e71c2311ad33f4f291e1314c69005ffb7b3b7defc2944adb2.m3u8$LR•IPV4•31『线路2』 +三沙卫视,http://61.138.128.226:19901/tsfile/live/1020_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•31『线路3』 +三沙卫视,http://36.105.100.208:35455/itv/5000000011000288016.m3u8?cdn=bestzb$LR•IPV4•31『线路4』 +三沙卫视,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=0161&tk=f6cc1e0a0e1a$LR•IPV4•31『线路5』 +三沙卫视,http://139.129.231.228:50060/rtp/239.21.2.9:5002$LR•IPV4•31『线路6』 +三沙卫视,http://139.196.151.191:2051/rtp/239.45.1.82:5140$LR•IPV4•31『线路7』 +三沙卫视,http://[2409:8087:2001:20:2800:0:df6e:eb21]:80/ott.mobaibox.com/PLTV/4/224/3221228626/index.m3u8$LR•IPV6•31『线路8』 +三沙卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001185/index.m3u8$LR•IPV6•31『线路9』 +三沙卫视,http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221227172/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•31『线路10』 +三沙卫视,http://[2409:8087:3428:20:500::1009]:6610/PLTV/88888888/224/3221227172/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•31『线路11』 +三沙卫视,http://[2409:8087:5e01:34::20]:6610/ZTE_CMS/08984400000000060000000000000319/index.m3u8?IAS$LR•IPV6•31『线路12』 +三沙卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226544/1.m3u8$LR•IPV6•31『线路13』 +三沙卫视,http://[2409:8087:5e01:34::21]:6610/ZTE_CMS/08984400000000060000000000000319/index.m3u8$LR•IPV6•31『线路14』 +三沙卫视,http://[2409:8087:5e00:24::1e]:6060/000000001000/4600001000000000117/1.m3u8$LR•IPV6•31『线路15』 +三沙卫视,https://live.mxdyeah.top/live.php?id=sanshaSD$LR•IPV4•31『线路16』 +三沙卫视,http://43.152.25.114:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/sanshaSD/__op/default/__f/index.m3u8$LR•IPV4•31『线路17』 +三沙卫视,http://43.152.25.217:80/tencent.live.cbncdn.cn/__cl/cg:live/__c/sanshaSD/__op/default/__f/index.m3u8$LR•IPV4•31『线路18』 +三沙卫视,https://live3.hnntv.cn/srs/tv/ssws.m3u8$LR•IPV4•31『线路19』 +三沙卫视,http://home.wwang.pw:35455/itv/5000000011000288016.m3u8?cdn=bestzb$LR•IPV4•31『线路20』 +三沙卫视,http://nn.7x9d.cn/地方台8563/海南.php?id=ssws$LR•IPV4•31『线路21』 +三沙卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003887452.m3u8$LR•IPV4•31『线路22』 +三沙卫视,http://[2409:8087:2001:20:2800:0:df6e:eb21]:80/ott.mobaibox.com/PLTV/4/224/3221228626/index.m3u8$LR•IPV6•31『线路23』 +三沙卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001185/index.m3u8$LR•IPV6•31『线路24』 +三沙卫视,http://[2409:8087:3428:20:500::100f]:6610/PLTV/88888888/224/3221227172/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•31『线路25』 +三沙卫视,http://[2409:8087:3428:20:500::1009]:6610/PLTV/88888888/224/3221227172/index.m3u8?servicetype=1&IASHttpSessionId=RR423820220409134714119178$LR•IPV6•31『线路26』 +三沙卫视,http://[2409:8087:5e01:34::20]:6610/ZTE_CMS/08984400000000060000000000000319/index.m3u8?IAS$LR•IPV6•31『线路27』 +三沙卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226544/1.m3u8$LR•IPV6•31『线路28』 +三沙卫视,http://[2409:8087:5e01:34::21]:6610/ZTE_CMS/08984400000000060000000000000319/index.m3u8$LR•IPV6•31『线路29』 +三沙卫视,https://stream1.freetv.fun/8bd6b69c423ac31e71c2311ad33f4f291e1314c69005ffb7b3b7defc2944adb2.m3u8$LR•IPV4•31『线路30』 +三沙卫视,http://[2409:8087:5e00:24::1e]:6060/000000001000/4600001000000000117/1.m3u8$LR•IPV6•31『线路31』 +延边卫视,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•37『线路1』 +延边卫视,http://l.cztvcloud.com/channels/lantian/SXxinchang2/720p.m3u8#$LR•IPV4•37『线路2』 +延边卫视,http://l.cztvcloud.com/channels/lantian/SXxinchang2/720p.m3u8$LR•IPV4•37『线路3』 +延边卫视,http://l.cztvcloud.com/channels/lantian/SXxinchang2/720p.m3u8#$LR•IPV4•37『线路4』 +延边卫视,http://l.cztvcloud.com/channels/lantian/SXxinchang2/720p.m3u8$LR•IPV4•37『线路5』 +延边卫视,https://cc06.tv12.xyz/113.m3u8$LR•IPV4•37『线路6』 +延边卫视,https://stream1.freetv.fun/yan-bian-wei-shi-16.m3u8$LR•IPV4•37『线路7』 +延边卫视,http://61.138.128.226:19901/tsfile/live/1008_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•37『线路8』 +延边卫视,http://36.105.100.208:35455/itv/1000000005000266008.m3u8?cdn=ystenlive$LR•IPV4•37『线路9』 +延边卫视,https://live.ybtvyun.com/video/s10006-2f92b9e0b123/index.m3u8$LR•IPV4•37『线路10』 +延边卫视,http://live.ybtvyun.com/video/s10006-44f040627ca1/index.m3u8?zjild$LR•IPV4•37『线路11』 +延边卫视,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=3050&tk=23a9aca1f79f$LR•IPV4•37『线路12』 +延边卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001470/index.m3u8$LR•IPV6•37『线路13』 +延边卫视,http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226516/index.m3u8$LR•IPV6•37『线路14』 +延边卫视,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•37『线路15』 +延边卫视,http://[2409:8087:1a15:10d1::39]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226516/index.m3u8$LR•IPV6•37『线路16』 +延边卫视,http://39.134.67.108/PLTV/88888888/224/3221226040/1.m3u8$LR•IPV4•37『线路17』 +延边卫视,http://live.ybtvyun.com/video/s10006-44f040627ca1/index.m3u8$LR•IPV4•37『线路18』 +延边卫视,http://live.ybtvyun.com/video/s10006-28bc40431485/index.m3u8$LR•IPV4•37『线路19』 +延边卫视,http://live.ybtvyun.com/video/s10006-44f040627ca1/index.m3u8$LR•IPV4•37『线路20』 +延边卫视,http://live.ybtvyun.com/video/s10016-7e5f23de35df/index.m3u8$LR•IPV4•37『线路21』 +延边卫视,http://live.ybtvyun.com/video/s10006-90fe76c52091/index.m3u8$LR•IPV4•37『线路22』 +延边卫视,http://120.76.248.139/live/bfgd/4200000117.m3u8$LR•IPV4•37『线路23』 +延边卫视,http://home.wwang.pw:35455/itv/1000000005000266008.m3u8?cdn=ystenlive$LR•IPV4•37『线路24』 +延边卫视,http://120.76.248.139/live/bfgd/4200000117.m3u8$LR•IPV4•37『线路25』 +延边卫视,http://ygbh.site/php/bfgd.php?id=117$LR•IPV4•37『线路26』 +延边卫视,https://cc06.tv12.xyz/113.m3u8$LR•IPV4•37『线路27』 +延边卫视,http://39.135.133.159/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226516/index.m3u8$LR•IPV4•37『线路28』 +延边卫视,http://l.cztvcloud.com/channels/lantian/SXxinchang2/720p.m3u8#$LR•IPV4•37『线路29』 +延边卫视,https://live.ybtvyun.com/video/s10006-2f92b9e0b123/index.m3u8$LR•IPV4•37『线路30』 +延边卫视,http://l.cztvcloud.com/channels/lantian/SXxinchang2/720p.m3u8$LR•IPV4•37『线路31』 +延边卫视,http://[2409:8087:1e03:21::2]:6060/cms001/ch00000090990000001470/index.m3u8$LR•IPV6•37『线路32』 +延边卫视,https://stream1.freetv.fun/yan-bian-wei-shi-16.m3u8$LR•IPV4•37『线路33』 +延边卫视,http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226516/index.m3u8$LR•IPV6•37『线路34』 +延边卫视,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•37『线路35』 +延边卫视,http://[2409:8087:1a15:10d1::39]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226516/index.m3u8$LR•IPV6•37『线路36』 +延边卫视,https://cc06.tv12.xyz/113.m3u8$LR•IPV4•37『线路37』 +CETV1,https://cc06.tv12.xyz/23.m3u8$LR•IPV4•24『线路1』 +CETV1,https://cc06.tv12.xyz/23.m3u8$LR•IPV4•24『线路2』 +CETV1,http://117.174.25.254:8188/rtp/239.0.0.51:5140$LR•IPV4•24『线路3』 +CETV1,http://223.167.245.215:8001/rtp/239.45.1.125:5140$LR•IPV4•24『线路4』 +CETV1,http://rrs01.hw.gmcc.net:8088/PLTV/81/224/3221226673/1.m3u8$LR•IPV4•24『线路5』 +CETV1,https://migu.188766.xyz/?migutoken=a55dadc35d37e3e168faf8268cc6fa97&id=CETV1&type=yy$LR•IPV4•24『线路6』 +CETV1,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227190/index.m3u8$LR•IPV4•24『线路7』 +CETV1,http://139.129.231.228/rtp/239.21.2.7:5002$LR•IPV4•24『线路8』 +CETV1,http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225652/index.m3u8$LR•IPV6•24『线路9』 +CETV1,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226494/1.m3u8$LR•IPV6•24『线路10』 +CETV1,http://[2409:8087:1a0a:df::4031]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225652/index.m3u8$LR•IPV6•24『线路11』 +CETV1,http://[2409:8087:1a15:10d1::34]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225652/index.m3u8$LR•IPV6•24『线路12』 +CETV1,http://117.174.25.254:8188/rtp/239.0.0.51:5140$LR•IPV4•24『线路13』 +CETV1,http://223.167.245.215:8001/rtp/239.45.1.125:5140$LR•IPV4•24『线路14』 +CETV1,http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225652/index.m3u8$LR•IPV6•24『线路15』 +CETV1,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226494/1.m3u8$LR•IPV6•24『线路16』 +CETV1,http://rrs01.hw.gmcc.net:8088/PLTV/81/224/3221226673/1.m3u8$LR•IPV4•24『线路17』 +CETV1,https://migu.188766.xyz/?migutoken=a55dadc35d37e3e168faf8268cc6fa97&id=CETV1&type=yy$LR•IPV4•24『线路18』 +CETV1,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227190/index.m3u8$LR•IPV4•24『线路19』 +CETV1,https://cc06.tv12.xyz/23.m3u8$LR•IPV4•24『线路20』 +CETV1,http://[2409:8087:1a0a:df::4031]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225652/index.m3u8$LR•IPV6•24『线路21』 +CETV1,http://[2409:8087:1a15:10d1::34]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225652/index.m3u8$LR•IPV6•24『线路22』 +CETV1,http://[2409:8087:1a15:10d1::35]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225652/index.m3u8$LR•IPV6•24『线路23』 +CETV1,https://stream1.freetv.fun/ipv6-cetv1-7.m3u8$LR•IPV4•24『线路24』 +CETV2,https://cc06.tv12.xyz/24.m3u8$LR•IPV4•22『线路1』 +CETV2,https://cc06.tv12.xyz/24.m3u8$LR•IPV4•22『线路2』 +CETV2,http://gslbmgsplive.miguvideo.com/migu/kailu/cetv2/50/20240709/index.m3u8?msisdn=20250903090033bf55eab2bb984fe0b4ac863e60d28ac6&mdspid=&spid=699004&netType=0&sid=5910022152&pid=2028597139×tamp=20250903090033&Channel_ID=0116_2600037000-99000-200300220100002&ProgramID=923287211&ParentNodeID=-99&assertID=5910022152&client_ip=106.13.250.83&SecurityKey=20250903090033&promotionId=&mvid=5900006638&mcid=500020&playurlVersion=WX-A1-8.8.1-RELEASE&userid=&jmhm=&videocodec=h264&bean=mgspad&tid=android&conFee=0&puData=ebfbdc6c83654112720d2b5599373223&ddCalcu=3e2bv2fa3ba7da3c969c5853b625d4012172&sv=10004&ct=android$LR•IPV4•22『线路3』 +CETV2,http://rrs01.hw.gmcc.net:8088/PLTV/81/224/3221226718/1.m3u8$LR•IPV4•22『线路4』 +CETV2,https://mursor.ottiptv.cc/migu/923287211.m3u8?migutoken=58dbb8ad5ad539c0da365c819615222219346bbe2fa8d6e4231da9ad89c4faf34adbae451bebfa99d9b8c9eda32e04a0066231dfd40496610efa4bee9ad5f110baee36b6f4098850d6b507505f$LR•IPV4•22『线路5』 +CETV2,https://migu.188766.xyz/?migutoken=98daa3ba4c81372351b73d9075023b9b&id=CETV2&type=yy$LR•IPV4•22『线路6』 +CETV2,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227329/index.m3u8$LR•IPV4•22『线路7』 +CETV2,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226425/index.m3u8$LR•IPV4•22『线路8』 +CETV2,http://139.129.231.228/rtp/239.21.2.8:5002$LR•IPV4•22『线路9』 +CETV2,http://[2409:8087:1a0b:df::4013]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226425/index.m3u8$LR•IPV6•22『线路10』 +CETV2,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226537/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E7AxXs4eTU2oiWrhopr9sHw%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNNxsM0Bor098BJglrhfEQTl%2CEND$LR•IPV6•22『线路11』 +CETV2,http://[2409:8087:1a0a:df::4031]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226425/index.m3u8$LR•IPV6•22『线路12』 +CETV2,http://[2409:8087:1a0b:df::4013]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226425/index.m3u8$LR•IPV6•22『线路13』 +CETV2,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226537/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E7AxXs4eTU2oiWrhopr9sHw%7E_eNUbgU9sJGUcVVduOMKhafLvQUgE_zlz_7pvDimJNNxsM0Bor098BJglrhfEQTl%2CEND$LR•IPV6•22『线路14』 +CETV2,http://rrs01.hw.gmcc.net:8088/PLTV/81/224/3221226718/1.m3u8$LR•IPV4•22『线路15』 +CETV2,https://mursor.ottiptv.cc/migu/923287211.m3u8?migutoken=58dbb8ad5ad539c0da365c819615222219346bbe2fa8d6e4231da9ad89c4faf34adbae451bebfa99d9b8c9eda32e04a0066231dfd40496610efa4bee9ad5f110baee36b6f4098850d6b507505f$LR•IPV4•22『线路16』 +CETV2,https://migu.188766.xyz/?migutoken=98daa3ba4c81372351b73d9075023b9b&id=CETV2&type=yy$LR•IPV4•22『线路17』 +CETV2,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227329/index.m3u8$LR•IPV4•22『线路18』 +CETV2,https://cc06.tv12.xyz/24.m3u8$LR•IPV4•22『线路19』 +CETV2,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226425/index.m3u8$LR•IPV4•22『线路20』 +CETV2,http://[2409:8087:1a0a:df::4031]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226425/index.m3u8$LR•IPV6•22『线路21』 +CETV2,http://gslbmgsplive.miguvideo.com/migu/kailu/cetv2/50/20240709/index.m3u8?msisdn=20250903090033bf55eab2bb984fe0b4ac863e60d28ac6&mdspid=&spid=699004&netType=0&sid=5910022152&pid=2028597139×tamp=20250903090033&Channel_ID=0116_2600037000-99000-200300220100002&ProgramID=923287211&ParentNodeID=-99&assertID=5910022152&client_ip=106.13.250.83&SecurityKey=20250903090033&promotionId=&mvid=5900006638&mcid=500020&playurlVersion=WX-A1-8.8.1-RELEASE&userid=&jmhm=&videocodec=h264&bean=mgspad&tid=android&conFee=0&puData=ebfbdc6c83654112720d2b5599373223&ddCalcu=3e2bv2fa3ba7da3c969c5853b625d4012172&sv=10004&ct=android$LR•IPV4•22『线路22』 +CETV4,http://221.10.226.195:5000/rtp/239.0.0.98:5140$LR•IPV4•23『线路1』 +CETV4,http://117.174.25.254:8188/rtp/239.0.0.98:5140$LR•IPV4•23『线路2』 +CETV4,http://rrs01.hw.gmcc.net:8088/PLTV/81/224/3221226724/1.m3u8$LR•IPV4•23『线路3』 +CETV4,https://mursor.ottiptv.cc/migu/923287339.m3u8?migutoken=165b545b4402eaba61cdc31defb6548a443d9b5eebb1d99392852bd799c553e8817e85eb324c512581ca9a1ed8e56e530144f79606cf44fe5b2d5e97b6da577e0f2adae2a90c2a55089c95880b$LR•IPV4•23『线路4』 +CETV4,https://migu.188766.xyz/?migutoken=d5d19d868e1df41e984866fc7ca15071&id=CETV4&type=yy$LR•IPV4•23『线路5』 +CETV4,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227331/index.m3u8$LR•IPV4•23『线路6』 +CETV4,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225783/index.m3u8$LR•IPV4•23『线路7』 +CETV4,http://139.129.231.228/rtp/239.21.1.222:5002$LR•IPV4•23『线路8』 +CETV4,http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225783/index.m3u8$LR•IPV6•23『线路9』 +CETV4,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226997/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EAw_OvjRgJVjtlaOa0dcgzg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•23『线路10』 +CETV4,http://[2409:8087:1a0a:df::4031]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225783/index.m3u8$LR•IPV6•23『线路11』 +CETV4,http://221.10.226.195:5000/rtp/239.0.0.98:5140$LR•IPV4•23『线路12』 +CETV4,http://117.174.25.254:8188/rtp/239.0.0.98:5140$LR•IPV4•23『线路13』 +CETV4,http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225783/index.m3u8$LR•IPV6•23『线路14』 +CETV4,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226997/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EAw_OvjRgJVjtlaOa0dcgzg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV6•23『线路15』 +CETV4,http://rrs01.hw.gmcc.net:8088/PLTV/81/224/3221226724/1.m3u8$LR•IPV4•23『线路16』 +CETV4,https://mursor.ottiptv.cc/migu/923287339.m3u8?migutoken=165b545b4402eaba61cdc31defb6548a443d9b5eebb1d99392852bd799c553e8817e85eb324c512581ca9a1ed8e56e530144f79606cf44fe5b2d5e97b6da577e0f2adae2a90c2a55089c95880b$LR•IPV4•23『线路17』 +CETV4,https://migu.188766.xyz/?migutoken=d5d19d868e1df41e984866fc7ca15071&id=CETV4&type=yy$LR•IPV4•23『线路18』 +CETV4,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221227331/index.m3u8$LR•IPV4•23『线路19』 +CETV4,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225783/index.m3u8$LR•IPV4•23『线路20』 +CETV4,http://[2409:8087:1a0a:df::4031]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225783/index.m3u8$LR•IPV6•23『线路21』 +CETV4,http://sxydajtvlive.sx.chinamobile.com/PLTV/-/224/3221225748/1.m3u8$LR•IPV4•23『线路22』 +CETV4,http://gslbmgsplive.miguvideo.com/migu/kailu/cetv4/50/20240709/index.m3u8?msisdn=2025090309003329cd481a5313461999ea66e0b5c14a1b&mdspid=&spid=699004&netType=0&sid=5910022154&pid=2028597139×tamp=20250903090033&Channel_ID=0116_2600037000-99000-200300220100002&ProgramID=923287339&ParentNodeID=-99&assertID=5910022154&client_ip=106.13.250.83&SecurityKey=20250903090033&promotionId=&mvid=5900006640&mcid=500020&playurlVersion=WX-A1-8.8.1-RELEASE&userid=&jmhm=&videocodec=h264&bean=mgspad&tid=android&conFee=0&puData=a0dd23e241f091b5c99903fbe22f27e3&ddCalcu=3ae0v7da2dbf2a232ee2b4f13f0099919bc5&sv=10004&ct=android$LR•IPV4•23『线路23』 + +广东频道,#genre# +汕头新闻综合,https://stream1.freetv.fun/shan-tou-zong-he-5.ctv$LR•IPV4•3『线路1』 +汕头新闻综合,http://120.77.205.62:8087/rtp/239.253.43.30:5146$LR•IPV4•3『线路2』 +汕头新闻综合,https://stream1.freetv.fun/shan-tou-zong-he-5.ctv$LR•IPV4•3『线路3』 +汕头经济生活,https://stream1.freetv.fun/shan-tou-jing-ji-1.ctv$LR•IPV4•3『线路1』 +汕头经济生活,http://120.77.205.62:8087/rtp/239.253.43.43:5146$LR•IPV4•3『线路2』 +汕头经济生活,https://stream1.freetv.fun/shan-tou-jing-ji-1.ctv$LR•IPV4•3『线路3』 +汕头文旅体育,http://120.77.205.62:8087/rtp/239.253.43.47:5146$LR•IPV4 +广东珠江,http://120.238.94.10:9901/tsfile/live/1009_1.m3u8$LR•IPV4•30『线路1』 +广东珠江,http://lu.wqwqwq.sbs/itv/2000000003000000033.m3u8?cdn=hnbblive$LR•IPV4•30『线路2』 +广东珠江,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010091$LR•IPV4•30『线路3』 +广东珠江,http://cdn2.163189.xyz/live/gdzj/stream.m3u8$LR•IPV4•30『线路4』 +广东珠江,https://tv.cdn.com.mp/live/gdzj/stream.m3u8$LR•IPV4•30『线路5』 +广东珠江,https://smart.pendy.dpdns.org/Smart.php?id=zhujiang$LR•IPV4•30『线路6』 +广东珠江,https://php.17186.eu.org/gdtv/web/gdzj.m3u8$LR•IPV4•30『线路7』 +广东珠江,http://cdn2.132.us.kg/live/gdzj/stream.m3u8$LR•IPV4•30『线路8』 +广东珠江,http://36.105.100.208:35455/itv/2000000003000000033.m3u8?cdn=hnbblive$LR•IPV4•30『线路9』 +广东珠江,http://mh0.asia:35455/itv/1000000004000011655.m3u8?cdn=ystenlive$LR•IPV4•30『线路10』 +广东珠江,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=6340&tk=f6cc1e0a0e1a$LR•IPV4•30『线路11』 +广东珠江,http://mzitv.cn:32/tsfile/live/1006_1.m3u8$LR•IPV4•30『线路12』 +广东珠江,http://120.77.205.62:8087/rtp/239.77.0.1:5146$LR•IPV4•30『线路13』 +广东珠江,http://183.11.239.36:808/hls/83/index.m3u8$LR•IPV4•30『线路14』 +广东珠江,http://[2409:8087:5e08:24::d]:6610/000000001000/1/2000000003000000033/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000003000000033&yang-1989$LR•IPV6•30『线路15』 +广东珠江,http://[2409:8087:5e00:24::10]:6060/200000001898/460000089800010091/0.m3u8$LR•IPV6•30『线路16』 +广东珠江,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010091/1.m3u8$LR•IPV6•30『线路17』 +广东珠江,http://bxtv.3a.ink/api.php?id=gdzj$LR•IPV4•30『线路18』 +广东珠江,http://cdn2.163189.xyz/live/gdzj/stream.m3u8$LR•IPV4•30『线路19』 +广东珠江,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010091$LR•IPV4•30『线路20』 +广东珠江,http://cdn2.163189.xyz/live/gdzj/stream.m3u8$LR•IPV4•30『线路21』 +广东珠江,https://tv.cdn.com.mp/live/gdzj/stream.m3u8$LR•IPV4•30『线路22』 +广东珠江,http://lu.wqwqwq.sbs/itv/2000000003000000033.m3u8?cdn=hnbblive$LR•IPV4•30『线路23』 +广东珠江,https://smart.pendy.dpdns.org/Smart.php?id=zhujiang$LR•IPV4•30『线路24』 +广东珠江,https://php.17186.eu.org/gdtv/web/gdzj.m3u8$LR•IPV4•30『线路25』 +广东珠江,http://[2409:8087:5e08:24::d]:6610/000000001000/1/2000000003000000033/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000003000000033&yang-1989$LR•IPV6•30『线路26』 +广东珠江,http://[2409:8087:5e00:24::10]:6060/200000001898/460000089800010091/0.m3u8$LR•IPV6•30『线路27』 +广东珠江,http://cdn2.132.us.kg/live/gdzj/stream.m3u8$LR•IPV4•30『线路28』 +广东珠江,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010091/1.m3u8$LR•IPV6•30『线路29』 +广东珠江,http://120.238.94.10:9901/tsfile/live/1009_1.m3u8$LR•IPV4•30『线路30』 +广东体育,http://cdn2.163189.xyz/live/gdty/stream.m3u8$LR•IPV4•31『线路1』 +广东体育,http://php.jdshipin.com/PLTV/iptv.php?id=gdty$LR•IPV4•31『线路2』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-3.m3u8$LR•IPV4•31『线路3』 +广东体育,http://cdn2.132.us.kg/live/gdty/stream.m3u8$LR•IPV4•31『线路4』 +广东体育,https://hls-gateway.vpstv.net/streams/476954.m3u8$LR•IPV4•31『线路5』 +广东体育,http://bxtv.3a.ink/api.php?id=gdty$LR•IPV4•31『线路6』 +广东体育,https://cdn2.163189.xyz/live/gdty/stream.m3u8$LR•IPV4•31『线路7』 +广东体育,http://120.238.94.10:9901/tsfile/live/1012_1.m3u8$LR•IPV4•31『线路8』 +广东体育,http://mzitv.cn:32/tsfile/live/1008_1.m3u8$LR•IPV4•31『线路9』 +广东体育,http://120.77.205.62:8087/rtp/239.77.0.112:5146$LR•IPV4•31『线路10』 +广东体育,http://183.11.239.36:808/hls/2/index.m3u8$LR•IPV4•31『线路11』 +广东体育,http://bxtv.3a.ink/api.php?id=gdty$LR•IPV4•31『线路12』 +广东体育,http://cdn2.163189.xyz/live/gdty/stream.m3u8$LR•IPV4•31『线路13』 +广东体育,https://epg.pw/stream/7b470f9fc5c305db0c8622117b7b25ca00eb35ba3e93e865cf0ff9df5c736681.m3u8$LR•IPV4•31『线路14』 +广东体育,http://cdn2.163189.xyz/live/gdty/stream.m3u8$LR•IPV4•31『线路15』 +广东体育,http://php.jdshipin.com/PLTV/iptv.php?id=gdty$LR•IPV4•31『线路16』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-3.m3u8$LR•IPV4•31『线路17』 +广东体育,http://cdn2.132.us.kg/live/gdty/stream.m3u8$LR•IPV4•31『线路18』 +广东体育,https://hls-gateway.vpstv.net/streams/476954.m3u8$LR•IPV4•31『线路19』 +广东体育,http://bxtv.3a.ink/api.php?id=gdty$LR•IPV4•31『线路20』 +广东体育,https://cdn2.163189.xyz/live/gdty/stream.m3u8$LR•IPV4•31『线路21』 +广东体育,http://120.238.94.10:9901/tsfile/live/1012_1.m3u8$LR•IPV4•31『线路22』 +广东体育,http://120.238.94.10:9901/tsfile/live/1012_1.m3u8$LR•IPV4•31『线路23』 +广东体育,https://epg.pw/stream/7b470f9fc5c305db0c8622117b7b25ca00eb35ba3e93e865cf0ff9df5c736681.m3u8$LR•IPV4•31『线路24』 +广东体育,http://cdn2.163189.xyz/live/gdty/stream.m3u8$LR•IPV4•31『线路25』 +广东体育,http://php.jdshipin.com/PLTV/iptv.php?id=gdty$LR•IPV4•31『线路26』 +广东体育,https://stream1.freetv.fun/yan-dong-ti-yu-3.m3u8$LR•IPV4•31『线路27』 +广东体育,http://cdn2.132.us.kg/live/gdty/stream.m3u8$LR•IPV4•31『线路28』 +广东体育,https://hls-gateway.vpstv.net/streams/476954.m3u8$LR•IPV4•31『线路29』 +广东体育,http://bxtv.3a.ink/api.php?id=gdty$LR•IPV4•31『线路30』 +广东体育,https://cdn2.163189.xyz/live/gdty/stream.m3u8$LR•IPV4•31『线路31』 +广东民生,http://183.11.239.36:808/hls/18/index.m3u8$LR•IPV4•5『线路1』 +广东民生,http://mzitv.cn:32/tsfile/live/1009_1.m3u8$LR•IPV4•5『线路2』 +广东民生,http://120.77.205.62:8087/rtp/239.77.0.225:5146$LR•IPV4•5『线路3』 +广东民生,http://119.32.12.17:2901/udp/224.1.100.4:11111$LR•IPV4•5『线路4』 +广东民生,http://183.11.239.36:808/hls/18/index.m3u8$LR•IPV4•5『线路5』 +广东少儿,http://119.32.12.17:2901/udp/224.1.100.9:11111$LR•IPV4 +广东影视,http://mg.hmysapp.cn:177/ckmg/zb.php?id=gdys$LR•IPV4•2『线路1』 +广东影视,http://119.32.12.17:2901/udp/224.1.100.11:11111$LR•IPV4•2『线路2』 +大湾区卫视,http://222.128.55.152:9080/live/dwq.m3u8$LR•IPV4•39『线路1』 +大湾区卫视,http://148.135.93.213/live.php?id=大湾区卫视$LR•IPV4•39『线路2』 +大湾区卫视,http://ali.hlspull.yximgs.com/live/b027460e580a463cb7e44eebexcvhnddggdfsdg.flv$LR•IPV4•39『线路3』 +大湾区卫视,http://home.wwang.pw:35455/itv/2000000003000000045.m3u8?cdn=hnbblive$LR•IPV4•39『线路4』 +大湾区卫视,http://222.128.55.152:9080/live/dwq.m3u8$LR•IPV4•39『线路5』 +大湾区卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010108$LR•IPV4•39『线路6』 +大湾区卫视,http://z.b.bkpcp.top/m.php?id=dwqws$LR•IPV4•39『线路7』 +大湾区卫视,http://goo.bkpcp.top/mg/dwqws$LR•IPV4•39『线路8』 +大湾区卫视,http://jp1.jdiptv.cc/live/nfws.m3u8?kdstime=$LR•IPV4•39『线路9』 +大湾区卫视,https://www.freetv.top/migu/608917627.m3u8?migutoken=913ec7608066b2e139e10a729ed6e0b277096bf7d1577f04dec2f036a15f6db88631747d218643efc7515ff520286e2a56bc4f2231e6d692da49f8d555d3291bbba71e8f2993d5487b41afa6bf$LR•IPV4•39『线路10』 +大湾区卫视,https://stream1.freetv.fun/9e44565ab6186689007a295d8b94b2a970fafde637068b0e3837e5f84689a8f3.m3u8$LR•IPV4•39『线路11』 +大湾区卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226442/index.m3u8$LR•IPV4•39『线路12』 +大湾区卫视,http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226218/index.m3u8$LR•IPV4•39『线路13』 +大湾区卫视,http://38.64.72.148/hls/modn/list/4011/chunklist0.m3u8$LR•IPV4•39『线路14』 +大湾区卫视,http://36.105.100.208:35455/itv/1000000002000011619.m3u8?cdn=ystenlive$LR•IPV4•39『线路15』 +大湾区卫视,http://150.158.112.123/%E5%85%AC%E4%BC%97%E5%8F%B7~%E7%8E%89%E7%8E%89%E8%BD%AF%E4%BB%B6%E5%BA%93/mg.php?id=dwqws$LR•IPV4•39『线路16』 +大湾区卫视,http://211.101.234.24:866/aishang/migu.php/migu.php?id=dwqws$LR•IPV4•39『线路17』 +大湾区卫视,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=5406&tk=23a9aca1f79f$LR•IPV4•39『线路18』 +大湾区卫视,http://mzitv.cn:32/tsfile/live/1012_1.m3u8$LR•IPV4•39『线路19』 +大湾区卫视,http://120.77.205.62:8087/rtp/239.77.0.215:5146$LR•IPV4•39『线路20』 +大湾区卫视,http://183.11.239.36:808/hls/132/index.m3u8$LR•IPV4•39『线路21』 +大湾区卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226540/1.m3u8$LR•IPV6•39『线路22』 +大湾区卫视,http://[2409:8087:5e08:25::16]:6610/200000001898/460000089800010108/1.m3u8$LR•IPV6•39『线路23』 +大湾区卫视,http://39.135.133.153/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226442/index.m3u8$LR•IPV4•39『线路24』 +大湾区卫视,http://mg.hmysapp.cn:177/ckmg/zb.php?id=dwqws$LR•IPV4•39『线路25』 +大湾区卫视,http://t.061899.xyz/tl/dq.php?id=dwqws$LR•IPV4•39『线路26』 +大湾区卫视,http://t.061899.xyz/tl/dq.php?id=dwqws$LR•IPV4•39『线路27』 +大湾区卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010108$LR•IPV4•39『线路28』 +大湾区卫视,http://z.b.bkpcp.top/m.php?id=dwqws$LR•IPV4•39『线路29』 +大湾区卫视,http://goo.bkpcp.top/mg/dwqws$LR•IPV4•39『线路30』 +大湾区卫视,http://jp1.jdiptv.cc/live/nfws.m3u8?kdstime=$LR•IPV4•39『线路31』 +大湾区卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226540/1.m3u8$LR•IPV6•39『线路32』 +大湾区卫视,https://www.freetv.top/migu/608917627.m3u8?migutoken=913ec7608066b2e139e10a729ed6e0b277096bf7d1577f04dec2f036a15f6db88631747d218643efc7515ff520286e2a56bc4f2231e6d692da49f8d555d3291bbba71e8f2993d5487b41afa6bf$LR•IPV4•39『线路33』 +大湾区卫视,https://stream1.freetv.fun/9e44565ab6186689007a295d8b94b2a970fafde637068b0e3837e5f84689a8f3.m3u8$LR•IPV4•39『线路34』 +大湾区卫视,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226442/index.m3u8$LR•IPV4•39『线路35』 +大湾区卫视,http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226218/index.m3u8$LR•IPV4•39『线路36』 +大湾区卫视,http://[2409:8087:5e08:25::16]:6610/200000001898/460000089800010108/1.m3u8$LR•IPV6•39『线路37』 +大湾区卫视,http://222.128.55.152:9080/live/dwq.m3u8$LR•IPV4•39『线路38』 +大湾区卫视,http://148.135.93.213:81/live.php?id=大湾区卫视$LR•IPV4•39『线路39』 +广州综合,http://tencentplay.gztv.com/live/zonghes.m3u8?txSecret=c8dbe86d6f86eb1a21999ab479fd5667&txTime=18d3c4690e8$LR•IPV4•13『线路1』 +广州综合,http://php.jdshipin.com:8880/gztv.php?id=zhonghe$LR•IPV4•13『线路2』 +广州综合,https://live.lalifeier.eu.org/gztv/zhonghe.m3u8?t=1746292937&key=20079a0c421e334c8ff6f63f230b8038$LR•IPV4•13『线路3』 +广州综合,https://live.iill.top/gztv/zhonghe$LR•IPV4•13『线路4』 +广州综合,https://tv.iill.top/gztv/zhonghe$LR•IPV4•13『线路5』 +广州综合,http://120.77.205.62:8087/rtp/239.253.43.71:5146$LR•IPV4•13『线路6』 +广州综合,http://tencentplay.gztv.com/live/zonghes.m3u8?txSecret=c8dbe86d6f86eb1a21999ab479fd5667&txTime=18d3c4690e8$LR•IPV4•13『线路7』 +广州综合,http://php.jdshipin.com:8880/gztv.php?id=zhonghe$LR•IPV4•13『线路8』 +广州综合,https://live.lalifeier.eu.org/gztv/zhonghe.m3u8?t=1746292937&key=20079a0c421e334c8ff6f63f230b8038$LR•IPV4•13『线路9』 +广州综合,https://live.iill.top/gztv/zhonghe$LR•IPV4•13『线路10』 +广州综合,https://tv.iill.top/gztv/zhonghe$LR•IPV4•13『线路11』 +广州综合,http://tencentplay.gztv.com/live/zonghes.m3u8?txSecret=c8dbe86d6f86eb1a21999ab479fd5667&txTime=18d3c4690e8$LR•IPV4•13『线路12』 +广州综合,http://tencentplay.gztv.com/live/zonghes.m3u8?txSecret=c8dbe86d6f86eb1a21999ab479fd5667&txTime=18d3c4690e8$LR•IPV4•13『线路13』 +广州新闻,http://tencentplay.gztv.com/live/xinwen.m3u8?txSecret=d2c2db0b598c02ec1b5623728434d367&txTime=18d57929bd3$LR•IPV4•4『线路1』 +广州新闻,http://tencentplay.gztv.com/live/xinwen.m3u8?txSecret=d2c2db0b598c02ec1b5623728434d367&txTime=18d57929bd3$LR•IPV4•4『线路2』 +广州新闻,http://tencentplay.gztv.com/live/xinwen.m3u8?txSecret=d2c2db0b598c02ec1b5623728434d367&txTime=18d57929bd3$LR•IPV4•4『线路3』 +广州新闻,http://tencentplay.gztv.com/live/xinwen.m3u8?txSecret=d2c2db0b598c02ec1b5623728434d367&txTime=18d57929bd3$LR•IPV4•4『线路4』 +广州影视,http://php.jdshipin.com:8880/gztv.php?id=yingshi$LR•IPV4•12『线路1』 +广州影视,https://tencentplay.gztv.com/live/yingshi.m3u8?txSecret=7e9bddad7c8911626ed1d2c09fc605d9&txTime=18d00acf487$LR•IPV4•12『线路2』 +广州影视,https://live.lalifeier.eu.org/gztv/yingshi.m3u8?t=1746292937&key=a30a89b429981379ff7c586fdb54ac86$LR•IPV4•12『线路3』 +广州影视,https://stream1.freetv.fun/yan-zhou-ying-shi-25.m3u8$LR•IPV4•12『线路4』 +广州影视,https://tv.iill.top/gztv/yingshi$LR•IPV4•12『线路5』 +广州影视,http://120.77.205.62:8087/rtp/239.253.43.68:5146$LR•IPV4•12『线路6』 +广州影视,http://tencentplay.gztv.com/live/yingshi.m3u8?txSecret=1bd3a1082ab5b89f48c1bff9a3760da4&txTime=18d57929bd4$LR•IPV4•12『线路7』 +广州影视,http://php.jdshipin.com:8880/gztv.php?id=yingshi#https://tencentplay.gztv.com/live/yingshi.m3u8?txSecret=7e9bddad7c8911626ed1d2c09fc605d9&txTime=18d00acf487$LR•IPV4•12『线路8』 +广州影视,https://live.lalifeier.eu.org/gztv/yingshi.m3u8?t=1746292937&key=a30a89b429981379ff7c586fdb54ac86$LR•IPV4•12『线路9』 +广州影视,https://stream1.freetv.fun/yan-zhou-ying-shi-25.m3u8$LR•IPV4•12『线路10』 +广州影视,https://tv.iill.top/gztv/yingshi$LR•IPV4•12『线路11』 +广州影视,http://tencentplay.gztv.com/live/yingshi.m3u8?txSecret=1bd3a1082ab5b89f48c1bff9a3760da4&txTime=18d57929bd4$LR•IPV4•12『线路12』 +广州法治,http://tencentplay.gztv.com/live/fazhi.m3u8?txSecret=3e84cd8eba844b5dc2150612295c7a52&txTime=18d578f4493$LR•IPV4•4『线路1』 +广州法治,http://tencentplay.gztv.com/live/fazhi.m3u8?txSecret=3e84cd8eba844b5dc2150612295c7a52&txTime=18d578f4493$LR•IPV4•4『线路2』 +广州法治,http://tencentplay.gztv.com/live/fazhi.m3u8?txSecret=3e84cd8eba844b5dc2150612295c7a52&txTime=18d578f4493$LR•IPV4•4『线路3』 +广州法治,http://tencentplay.gztv.com/live/fazhi.m3u8?txSecret=3e84cd8eba844b5dc2150612295c7a52&txTime=18d578f4493$LR•IPV4•4『线路4』 +广州竞赛,http://8.138.7.223/tv/gzjs.m3u8$LR•IPV4•14『线路1』 +广州竞赛,http://php.jdshipin.com:8880/gztv.php?id=jingsai$LR•IPV4•14『线路2』 +广州竞赛,https://tencentplay.gztv.com/live/jingsai.m3u8?txSecret=49c8041461997c7a97dbcc3c7fd11b4f&txTime=18d00acf487$LR•IPV4•14『线路3』 +广州竞赛,https://stream1.freetv.fun/yan-zhou-jing-sai-2.m3u8$LR•IPV4•14『线路4』 +广州竞赛,https://live.lalifeier.eu.org/gztv/jingsai.m3u8?t=1746307365&key=a9871a8d340d71198cae366f791f73b6$LR•IPV4•14『线路5』 +广州竞赛,http://8.138.7.223/tv/gzjs.m3u8$LR•IPV4•14『线路6』 +广州竞赛,http://php.jdshipin.com:8880/gztv.php?id=jingsai#https://tencentplay.gztv.com/live/jingsai.m3u8?txSecret=49c8041461997c7a97dbcc3c7fd11b4f&txTime=18d00acf487$LR•IPV4•14『线路7』 +广州竞赛,https://stream1.freetv.fun/yan-zhou-jing-sai-2.m3u8$LR•IPV4•14『线路8』 +广州竞赛,https://live.lalifeier.eu.org/gztv/jingsai.m3u8?t=1746307365&key=a9871a8d340d71198cae366f791f73b6$LR•IPV4•14『线路9』 +广州竞赛,https://tencentplay.gztv.com/live/jingsai.m3u8?txSecret=a4d04c27d0d1d8b7efef2ed7ff1c3eae&txTime=191b60cc9ca$LR•IPV4•14『线路10』 +广州竞赛,http://8.138.7.223/tv/gzjs.m3u8$LR•IPV4•14『线路11』 +广州竞赛,http://php.jdshipin.com:8880/gztv.php?id=jingsai#https://tencentplay.gztv.com/live/jingsai.m3u8?txSecret=49c8041461997c7a97dbcc3c7fd11b4f&txTime=18d00acf487$LR•IPV4•14『线路12』 +广州竞赛,https://stream1.freetv.fun/yan-zhou-jing-sai-2.m3u8$LR•IPV4•14『线路13』 +广州竞赛,https://live.lalifeier.eu.org/gztv/jingsai.m3u8?t=1746307365&key=a9871a8d340d71198cae366f791f73b6$LR•IPV4•14『线路14』 +江门综合,https://stream1.freetv.fun/jiang-men-zong-he-8.ctv$LR•IPV4•5『线路1』 +江门综合,http://dslive.grtn.cn/jmzh/sd/live.m3u8$LR•IPV4•5『线路2』 +江门综合,http://120.77.205.62:8087/rtp/239.77.0.195:5146$LR•IPV4•5『线路3』 +江门综合,https://stream1.freetv.fun/jiang-men-zong-he-8.ctv$LR•IPV4•5『线路4』 +江门综合,http://dslive.grtn.cn/jmzh/sd/live.m3u8$LR•IPV4•5『线路5』 +江门侨乡生活,http://120.77.205.62:8087/rtp/239.77.0.202:5146$LR•IPV4 +河源综合,http://tmpstream.hyrtv.cn/xwzh/sd/live.m3u8$LR•IPV4 +河源公共,http://tmpstream.hyrtv.cn/hygg/sd/live.m3u8$LR•IPV4 +茂名综合,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=9728&tk=a0c4f6cfaba3$LR•IPV4•3『线路1』 +茂名综合,http://120.77.205.62:8087/rtp/239.77.0.206:5146$LR•IPV4•3『线路2』 +茂名综合,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=9728&tk=a0c4f6cfaba3$LR•IPV4•3『线路3』 +茂名公共,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=7418&tk=a0c4f6cfaba3$LR•IPV4•3『线路1』 +茂名公共,http://120.77.205.62:8087/rtp/239.77.0.207:5146$LR•IPV4•3『线路2』 +茂名公共,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=7418&tk=a0c4f6cfaba3$LR•IPV4•3『线路3』 +佛山综合,http://php.jdshipin.com:8880/fstv.php?id=fszh$LR•IPV4•7『线路1』 +佛山综合,https://live.lalifeier.eu.org/fstv/fszh.m3u8?t=1746307365&key=776c844ec448f3aca62132b212878ee5$LR•IPV4•7『线路2』 +佛山综合,http://dslive.grtn.cn/fszh/sd/live.m3u8$LR•IPV4•7『线路3』 +佛山综合,http://120.77.205.62:8087/rtp/239.253.43.52:5146$LR•IPV4•7『线路4』 +佛山综合,http://php.jdshipin.com:8880/fstv.php?id=fszh$LR•IPV4•7『线路5』 +佛山综合,https://live.lalifeier.eu.org/fstv/fszh.m3u8?t=1746307365&key=776c844ec448f3aca62132b212878ee5$LR•IPV4•7『线路6』 +佛山综合,http://dslive.grtn.cn/fszh/sd/live.m3u8$LR•IPV4•7『线路7』 +东莞新闻综合,https://stream.sun0769.com/dgrtv1/mp4tv1_800/index.m3u8$LR•IPV4•3『线路1』 +东莞新闻综合,https://stream.sun0769.com/dgrtv1/mp4tv1_800/index.m3u8$LR•IPV4•3『线路2』 +东莞新闻综合,https://stream.sun0769.com/dgrtv1/mp4tv1_800/index.m3u8$LR•IPV4•3『线路3』 +东莞生活资讯,https://stream.sun0769.com/dgrtv1/mp4tv2_800/index.m3u8$LR•IPV4•3『线路1』 +东莞生活资讯,https://stream.sun0769.com/dgrtv1/mp4tv2_800/index.m3u8$LR•IPV4•3『线路2』 +东莞生活资讯,https://stream.sun0769.com/dgrtv1/mp4tv2_800/index.m3u8$LR•IPV4•3『线路3』 + +数字频道,#genre# +CHC影迷电影,http://183.237.95.108:9901/tsfile/live/1008_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•19『线路1』 +CHC影迷电影,http://120.198.101.106:9901/tsfile/live/1053_1.m3u8?key=txiptv$LR•IPV4•19『线路2』 +CHC影迷电影,http://218.15.183.23:9901/tsfile/live/23044_1.m3u8$LR•IPV4•19『线路3』 +CHC影迷电影,http://120.198.95.220:9901/tsfile/live/1038_1.m3u8?key=txiptv$LR•IPV4•19『线路4』 +CHC影迷电影,http://dassby.qqff.top:99/live/CHC高清/index.m3u8$LR•IPV4•19『线路5』 +CHC影迷电影,rtsp://115.153.247.80/PLTV/88888888/224/3221226990/86128784.smil$LR•IPV4•19『线路6』 +CHC影迷电影,rtsp://115.153.230.145/PLTV/88888888/224/3221226990/86128784.smil$LR•IPV4•19『线路7』 +CHC影迷电影,rtsp://115.153.222.112:554/PLTV/88888888/224/3221226990/86128784.smil$LR•IPV4•19『线路8』 +CHC影迷电影,http://58.19.38.162:9901/tsfile/live/1004_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•19『线路9』 +CHC影迷电影,http://58.19.38.162:9901/tsfile/live/1004_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•19『线路10』 +CHC影迷电影,http://148.135.93.213/live.php?id=CHC影迷电影$LR•IPV4•19『线路11』 +CHC影迷电影,http://183.237.95.108:9901/tsfile/live/1008_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•19『线路12』 +CHC影迷电影,http://120.198.101.106:9901/tsfile/live/1053_1.m3u8?key=txiptv$LR•IPV4•19『线路13』 +CHC影迷电影,http://218.15.183.23:9901/tsfile/live/23044_1.m3u8$LR•IPV4•19『线路14』 +CHC影迷电影,http://120.198.95.220:9901/tsfile/live/1038_1.m3u8?key=txiptv$LR•IPV4•19『线路15』 +CHC影迷电影,http://dassby.qqff.top:99/live/CHC高清/index.m3u8$LR•IPV4•19『线路16』 +CHC影迷电影,rtsp://115.153.247.80/PLTV/88888888/224/3221226990/86128784.smil$LR•IPV4•19『线路17』 +CHC影迷电影,rtsp://115.153.230.145/PLTV/88888888/224/3221226990/86128784.smil$LR•IPV4•19『线路18』 +CHC影迷电影,rtsp://115.153.222.112:554/PLTV/88888888/224/3221226990/86128784.smil$LR•IPV4•19『线路19』 +CHC动作电影,http://113.195.172.192:808/hls/114/index.m3u8$LR•IPV4•30『线路1』 +CHC动作电影,http://goo.bkpcp.top/mg/dzdy$LR•IPV4•30『线路2』 +CHC动作电影,http://data.3g.yy.com/live/hls/1382735573/1382735573$LR•IPV4•30『线路3』 +CHC动作电影,https://www.freetv.top/migu/644368714.m3u8?migutoken=2e48d18419793654f347e8ca29e0028ce9f3eaaa7a108b006304178b8f790f34908f8a09bbb8f4b8b8abcf36e2341f1043dde8719cf4927fcd0dcde4667f8b91e68e820314791d9b70452862c9$LR•IPV4•30『线路4』 +CHC动作电影,https://stream1.freetv.fun/chcdong-zuo-dian-ying-4.ctv$LR•IPV4•30『线路5』 +CHC动作电影,https://stream.freetv.fun/2f2e29b8759a2458730dc1f3686024472691952a50e787fe075944d0cb17f36e.ctv$LR•IPV4•30『线路6』 +CHC动作电影,http://eastscreen.tv/ooooo.php$LR•IPV4•30『线路7』 +CHC动作电影,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=4654&tk=23a9aca1f79f$LR•IPV4•30『线路8』 +CHC动作电影,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226329/1.m3u8$LR•IPV6•30『线路9』 +CHC动作电影,http://[2409:8087:1a01:df::4021]:80/TVOD/88888888/224/3221225555/main.m3u8$LR•IPV6•30『线路10』 +CHC动作电影,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6380763222d00/index.m3u8?m3u8_level=2$LR•IPV6•30『线路11』 +CHC动作电影,http://[2409:8087:3c02:0021:0000:0001:0000:100a]:6410/shandong_cabletv.live.zte.com////CHANNEL00002030/index.m3u8?IASHttpSessionId=$LR•IPV6•30『线路12』 +CHC动作电影,http://58.19.38.162:9901/tsfile/live/1005_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•30『线路13』 +CHC动作电影,http://58.19.38.162:9901/tsfile/live/1005_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•30『线路14』 +CHC动作电影,http://z.b.bkpcp.top/m.php?id=dzdy$LR•IPV4•30『线路15』 +CHC动作电影,http://mg.hmysapp.cn:177/ckmg/zb.php?id=chcdzdy$LR•IPV4•30『线路16』 +CHC动作电影,http://t.061899.xyz/tl/dq.php?id=chcdzdy$LR•IPV4•30『线路17』 +CHC动作电影,http://101.35.240.114:88/live.php?id=CHC动作电影$LR•IPV4•30『线路18』 +CHC动作电影,http://113.195.172.192:808/hls/114/index.m3u8$LR•IPV4•30『线路19』 +CHC动作电影,http://148.135.93.213:81/live.php?id=CHC动作电影$LR•IPV4•30『线路20』 +CHC动作电影,http://goo.bkpcp.top/mg/dzdy$LR•IPV4•30『线路21』 +CHC动作电影,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226329/1.m3u8$LR•IPV6•30『线路22』 +CHC动作电影,http://[2409:8087:1a01:df::4021]:80/TVOD/88888888/224/3221225555/main.m3u8$LR•IPV6•30『线路23』 +CHC动作电影,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6380763222d00/index.m3u8?m3u8_level=2$LR•IPV6•30『线路24』 +CHC动作电影,http://[2409:8087:3c02:0021:0000:0001:0000:100a]:6410/shandong_cabletv.live.zte.com////CHANNEL00002030/index.m3u8?IASHttpSessionId=$LR•IPV6•30『线路25』 +CHC动作电影,http://data.3g.yy.com/live/hls/1382735573/1382735573$LR•IPV4•30『线路26』 +CHC动作电影,https://www.freetv.top/migu/644368714.m3u8?migutoken=2e48d18419793654f347e8ca29e0028ce9f3eaaa7a108b006304178b8f790f34908f8a09bbb8f4b8b8abcf36e2341f1043dde8719cf4927fcd0dcde4667f8b91e68e820314791d9b70452862c9$LR•IPV4•30『线路27』 +CHC动作电影,https://stream1.freetv.fun/chcdong-zuo-dian-ying-4.ctv$LR•IPV4•30『线路28』 +CHC动作电影,https://stream.freetv.fun/2f2e29b8759a2458730dc1f3686024472691952a50e787fe075944d0cb17f36e.ctv$LR•IPV4•30『线路29』 +CHC动作电影,http://eastscreen.tv/ooooo.php$LR•IPV4•30『线路30』 +CHC家庭影院,http://113.195.172.192:808/hls/113/index.m3u8$LR•IPV4•29『线路1』 +CHC家庭影院,http://sport.pendy.dpdns.org/migu/644368373?token=BCDxUPC2aE0y0iz8JYzYhWA21b8DBPXm4Tw9nHe0T-ftD1MRmsBCXZPPiHXeDz7cNybVmmXGazeeaHKpxyYgEA$LR•IPV4•29『线路2』 +CHC家庭影院,https://mgtv.ottiptv.cc/migu/644368373.m3u8?migutoken=02f6073a65cfa4b76b8198be1bbc271ad8399a5a7eba28b6d2b5a1fd269162f4e5d78202d5515f6a21832743887f1e19f9c93e34c348532e77d8b083727e41097fb2ee9c27f1606dea802ad3d5$LR•IPV4•29『线路3』 +CHC家庭影院,http://z.b.bkpcp.top/m.php?id=chcjtyy$LR•IPV4•29『线路4』 +CHC家庭影院,http://gat.bkpcp.top/ymg.php?id=jtyy$LR•IPV4•29『线路5』 +CHC家庭影院,http://goo.bkpcp.top/mg/jtyy$LR•IPV4•29『线路6』 +CHC家庭影院,https://www.freetv.top/migu/644368373.m3u8?migutoken=b9d9d0ba0208e949cf0736455b86290b2d1d2ff4727f523b7117dde6eb883cb4582c5ce1519685e57d54bfb562057c10a00dde58bb674d8600fd2d918b8cb440294e083e7b8f19e0dbcc9250d8$LR•IPV4•29『线路7』 +CHC家庭影院,https://stream1.freetv.fun/chcjia-ting-ying-yuan-1.ctv$LR•IPV4•29『线路8』 +CHC家庭影院,https://migu.188766.xyz/?migutoken=2e013b8093cbb8e2f8f262307962476b&id=CHC%E5%AE%B6%E5%BA%AD%E5%BD%B1%E9%99%A2&type=yy$LR•IPV4•29『线路9』 +CHC家庭影院,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=3027&tk=23a9aca1f79f$LR•IPV4•29『线路10』 +CHC家庭影院,http://61.162.52.6:8088/newlive/live/hls/60/live.m3u8$LR•IPV4•29『线路11』 +CHC家庭影院,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63807601b19dd/index.m3u8?m3u8_level=2$LR•IPV6•29『线路12』 +CHC家庭影院,http://58.19.38.162:9901/tsfile/live/1006_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•29『线路13』 +CHC家庭影院,http://58.19.38.162:9901/tsfile/live/1006_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•29『线路14』 +CHC家庭影院,http://z.b.bkpcp.top/m.php?id=jtyy$LR•IPV4•29『线路15』 +CHC家庭影院,http://mg.hmysapp.cn:177/ckmg/zb.php?id=chcjtdy$LR•IPV4•29『线路16』 +CHC家庭影院,http://t.061899.xyz/tl/dq.php?id=chcjtdy$LR•IPV4•29『线路17』 +CHC家庭影院,http://148.135.93.213/live.php?id=CHC家庭影院$LR•IPV4•29『线路18』 +CHC家庭影院,http://113.195.172.192:808/hls/113/index.m3u8$LR•IPV4•29『线路19』 +CHC家庭影院,http://148.135.93.213:81/live.php?id=CHC家庭影院$LR•IPV4•29『线路20』 +CHC家庭影院,http://z.b.bkpcp.top/m.php?id=chcjtyy$LR•IPV4•29『线路21』 +CHC家庭影院,http://gat.bkpcp.top/ymg.php?id=jtyy$LR•IPV4•29『线路22』 +CHC家庭影院,http://goo.bkpcp.top/mg/jtyy$LR•IPV4•29『线路23』 +CHC家庭影院,http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63807601b19dd/index.m3u8?m3u8_level=2$LR•IPV6•29『线路24』 +CHC家庭影院,https://www.freetv.top/migu/644368373.m3u8?migutoken=b9d9d0ba0208e949cf0736455b86290b2d1d2ff4727f523b7117dde6eb883cb4582c5ce1519685e57d54bfb562057c10a00dde58bb674d8600fd2d918b8cb440294e083e7b8f19e0dbcc9250d8$LR•IPV4•29『线路25』 +CHC家庭影院,https://stream1.freetv.fun/chcjia-ting-ying-yuan-1.ctv$LR•IPV4•29『线路26』 +CHC家庭影院,http://sport.pendy.dpdns.org/migu/644368373?token=BCDxUPC2aE0y0iz8JYzYhWA21b8DBPXm4Tw9nHe0T-ftD1MRmsBCXZPPiHXeDz7cNybVmmXGazeeaHKpxyYgEA$LR•IPV4•29『线路27』 +CHC家庭影院,https://mgtv.ottiptv.cc/migu/644368373.m3u8?migutoken=02f6073a65cfa4b76b8198be1bbc271ad8399a5a7eba28b6d2b5a1fd269162f4e5d78202d5515f6a21832743887f1e19f9c93e34c348532e77d8b083727e41097fb2ee9c27f1606dea802ad3d5$LR•IPV4•29『线路28』 +CHC家庭影院,https://migu.188766.xyz/?migutoken=2e013b8093cbb8e2f8f262307962476b&id=CHC%E5%AE%B6%E5%BA%AD%E5%BD%B1%E9%99%A2&type=yy$LR•IPV4•29『线路29』 +黑莓电影,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010073$LR•IPV4•24『线路1』 +黑莓电影,https://fenghuang.tv12.xyz/29.m3u8$LR•IPV4•24『线路2』 +黑莓电影,http://36.105.100.208:35455/itv/1000000004000019624.m3u8?cdn=ystenlive$LR•IPV4•24『线路3』 +黑莓电影,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=0688&tk=23a9aca1f79f$LR•IPV4•24『线路4』 +黑莓电影,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226939/1.m3u8$LR•IPV6•24『线路5』 +黑莓电影,http://[2409:8087:1a01:df::4001]:80/TVOD/88888888/224/3221225681/main.m3u8$LR•IPV6•24『线路6』 +黑莓电影,http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225666/index.m3u8$LR•IPV6•24『线路7』 +黑莓电影,http://[2409:8087:2001:20:2800:0:df6e:eb08]/ott.mobaibox.com/PLTV/3/224/3221227520/index.m3u8$LR•IPV6•24『线路8』 +黑莓电影,http://[2409:8087:1:20:20::27]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226939/1.m3u8$LR•IPV6•24『线路9』 +黑莓电影,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225764/2/index.m3u8$LR•IPV6•24『线路10』 +黑莓电影,http://[2409:8087:1a15:10d1::36]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225743/index.m3u8$LR•IPV6•24『线路11』 +黑莓电影,http://[2409:8087:74d9:21::6]:80/270000001128/9900000095/index.m3u8$LR•IPV6•24『线路12』 +黑莓电影,http://home.wwang.pw:35455/itv/1000000004000019624.m3u8?cdn=ystenlive$LR•IPV4•24『线路13』 +黑莓电影,http://39.135.133.138/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225743/index.m3u8$LR•IPV4•24『线路14』 +黑莓电影,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010073$LR•IPV4•24『线路15』 +黑莓电影,https://epg.pw/stream/ffcb6572863f0745a7369fbd9d901f1dfd0ab8fab8bad8bebb4e01c90b303c47.m3u8$LR•IPV4•24『线路16』 +黑莓电影,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226939/1.m3u8$LR•IPV6•24『线路17』 +黑莓电影,http://[2409:8087:1a01:df::4001]:80/TVOD/88888888/224/3221225681/main.m3u8$LR•IPV6•24『线路18』 +黑莓电影,http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225666/index.m3u8$LR•IPV6•24『线路19』 +黑莓电影,http://[2409:8087:2001:20:2800:0:df6e:eb08]/ott.mobaibox.com/PLTV/3/224/3221227520/index.m3u8$LR•IPV6•24『线路20』 +黑莓电影,http://[2409:8087:1:20:20::27]/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226939/1.m3u8$LR•IPV6•24『线路21』 +黑莓电影,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225764/2/index.m3u8$LR•IPV6•24『线路22』 +黑莓电影,https://fenghuang.tv12.xyz/29.m3u8$LR•IPV4•24『线路23』 +黑莓电影,http://[2409:8087:1a15:10d1::36]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225743/index.m3u8$LR•IPV6•24『线路24』 +黑莓动画,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010002$LR•IPV4•21『线路1』 +黑莓动画,http://otttv.bj.chinamobile.com/PLTV/88888888/224/3221226935/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EUc618y1E09GbQwwuOzEKaQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV4•21『线路2』 +黑莓动画,http://ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225662/index.m3u8$LR•IPV4•21『线路3』 +黑莓动画,http://36.105.100.208:35455/itv/1000000004000021734.m3u8?cdn=ystenlive$LR•IPV4•21『线路4』 +黑莓动画,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=2912&tk=e503191f8e20$LR•IPV4•21『线路5』 +黑莓动画,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226935/1.m3u8$LR•IPV6•21『线路6』 +黑莓动画,http://[2409:8087:1a01:df::4007]:80/TVOD/88888888/224/3221225529/main.m3u8$LR•IPV6•21『线路7』 +黑莓动画,http://[2409:8087:1a0b:df::4006]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225662/index.m3u8$LR•IPV6•21『线路8』 +黑莓动画,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010002/1.m3u8$LR•IPV6•21『线路9』 +黑莓动画,http://[2409:8087:5e08:25::16]:6610/200000001898/460000089800010002/1.m3u8$LR•IPV6•21『线路10』 +黑莓动画,http://[2409:8087:74d9:21::6]:80/270000001128/9900000096/index.m3u8$LR•IPV6•21『线路11』 +黑莓动画,http://home.wwang.pw:35455/itv/1000000004000021734.m3u8?cdn=ystenlive$LR•IPV4•21『线路12』 +黑莓动画,http://home.wwang.pw:35455/itv/1000000004000021734.m3u8?cdn=ystenlive$LR•IPV4•21『线路13』 +黑莓动画,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010002$LR•IPV4•21『线路14』 +黑莓动画,http://otttv.bj.chinamobile.com/PLTV/88888888/224/3221226935/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EUc618y1E09GbQwwuOzEKaQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND$LR•IPV4•21『线路15』 +黑莓动画,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226935/1.m3u8$LR•IPV6•21『线路16』 +黑莓动画,http://[2409:8087:1a01:df::4007]:80/TVOD/88888888/224/3221225529/main.m3u8$LR•IPV6•21『线路17』 +黑莓动画,http://ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225662/index.m3u8$LR•IPV4•21『线路18』 +黑莓动画,http://[2409:8087:1a0b:df::4006]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225662/index.m3u8$LR•IPV6•21『线路19』 +黑莓动画,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010002/1.m3u8$LR•IPV6•21『线路20』 +黑莓动画,http://[2409:8087:5e08:25::16]:6610/200000001898/460000089800010002/1.m3u8$LR•IPV6•21『线路21』 +卡酷少儿,https://live.mxdyeah.top/live.php?id=bjkakuSD$LR•IPV4•16『线路1』 +卡酷少儿,https://migu.188766.xyz/?migutoken=1023983db6b5249e61d4950c1654cd84&id=%E5%8C%97%E4%BA%AC%E5%8D%A1%E9%85%B7%E5%B0%91%E5%84%BF&type=yy$LR•IPV4•16『线路2』 +卡酷少儿,https://cc06.tv12.xyz/29.m3u8$LR•IPV4•16『线路3』 +卡酷少儿,http://[2409:8087:1a15:10d1::33]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225654/index.m3u8$LR•IPV6•16『线路4』 +卡酷少儿,http://[2409:8087:5e08:25::16]:6610/200000001898/460000089800010081/1.m3u8$LR•IPV6•16『线路5』 +卡酷少儿,http://[2409:8087:74d9:21::6]:80/270000001128/9900000040/index.m3u8$LR•IPV6•16『线路6』 +卡酷少儿,http://ygbh.site/php/bfgd.php?id=106$LR•IPV4•16『线路7』 +卡酷少儿,https://cc06.tv12.xyz/29.m3u8$LR•IPV4•16『线路8』 +卡酷少儿,https://zby.130519.xyz/PLTV/11/224/3221226019/index.m3u8$LR•IPV4•16『线路9』 +卡酷少儿,http://home.wwang.pw:35455/itv/5000000011000265008.m3u8?cdn=bestzb$LR•IPV4•16『线路10』 +卡酷少儿,http://rrs01.hw.gmcc.net:8088/PLTV/81/224/3221226677/1.m3u8$LR•IPV4•16『线路11』 +卡酷少儿,http://[2409:8087:1a15:10d1::33]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225654/index.m3u8$LR•IPV6•16『线路12』 +卡酷少儿,http://[2409:8087:5e08:25::16]:6610/200000001898/460000089800010081/1.m3u8$LR•IPV6•16『线路13』 +卡酷少儿,https://migu.188766.xyz/?migutoken=1023983db6b5249e61d4950c1654cd84&id=%E5%8C%97%E4%BA%AC%E5%8D%A1%E9%85%B7%E5%B0%91%E5%84%BF&type=yy$LR•IPV4•16『线路14』 +卡酷少儿,https://cc06.tv12.xyz/29.m3u8$LR•IPV4•16『线路15』 +卡酷少儿,http://58.57.40.22:9901/tsfile/live/1060_1.m3u8$LR•IPV4•16『线路16』 +优漫卡通,http://106.118.70.125:9901/tsfile/live/1013_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•44『线路1』 +优漫卡通,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010118$LR•IPV4•44『线路2』 +优漫卡通,http://z.b.bkpcp.top/m.php?id=ymkt$LR•IPV4•44『线路3』 +优漫卡通,https://live.lalifeier.eu.org/jstv/ymkt.m3u8?t=1745796321&key=a52fbb40a8c25dfa0feef5a1b4b5910d$LR•IPV4•44『线路4』 +优漫卡通,https://www.freetv.top/migu/626064703.m3u8?migutoken=deac6c5275081b54ad412a195e499b7c0cb8f04446b6c80aaa9d3eb1063d620261c68202d59aea05060007b58a62d5d208f16379d861d6f1627c10c9dd894f0bf7e3ca97b04696255e193e871c$LR•IPV4•44『线路5』 +优漫卡通,https://stream1.freetv.fun/you-man-qia-tong-11.m3u8$LR•IPV4•44『线路6』 +优漫卡通,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226406/index.m3u8$LR•IPV4•44『线路7』 +优漫卡通,http://goo.bkpcp.top/mg/ymkt$LR•IPV4•44『线路8』 +优漫卡通,http://36.105.100.208:35455/itv/1000000002000010063.m3u8?cdn=ystenlive$LR•IPV4•44『线路9』 +优漫卡通,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=4218&tk=2aca1ad9a849$LR•IPV4•44『线路10』 +优漫卡通,http://58.221.214.82:9901/tsfile/live/0008_2.m3u8$LR•IPV4•44『线路11』 +优漫卡通,http://139.129.231.228:50060/rtp/239.21.1.50:5002$LR•IPV4•44『线路12』 +优漫卡通,http://110.53.218.182:9902/tsfile/live/1006_1.m3u8$LR•IPV4•44『线路13』 +优漫卡通,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/2/224/3221225656/2.m3u8$LR•IPV6•44『线路14』 +优漫卡通,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226932/1.m3u8$LR•IPV6•44『线路15』 +优漫卡通,http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225656/index.m3u8$LR•IPV6•44『线路16』 +优漫卡通,http://[2409:8087:74d9:21::6]:80/270000001128/9900000070/index.m3u8$LR•IPV6•44『线路17』 +优漫卡通,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225656/index.m3u8$LR•IPV4•44『线路18』 +优漫卡通,https://epg.pw/stream/57e3fc6914792be5173e3d60559c5e54f9adc80cccf70eaf6994660d3b10297c.m3u8$LR•IPV4•44『线路19』 +优漫卡通,http://mg.hmysapp.cn:177/ckmg/zb.php?id=ymkt$LR•IPV4•44『线路20』 +优漫卡通,http://t.061899.xyz/tl/dq.php?id=ymkt$LR•IPV4•44『线路21』 +优漫卡通,http://home.wwang.pw:35455/itv/1000000002000010063.m3u8?cdn=ystenlive$LR•IPV4•44『线路22』 +优漫卡通,http://106.118.70.125:9901/tsfile/live/1013_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•44『线路23』 +优漫卡通,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010118$LR•IPV4•44『线路24』 +优漫卡通,http://z.b.bkpcp.top/m.php?id=ymkt$LR•IPV4•44『线路25』 +优漫卡通,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/2/224/3221225656/2.m3u8$LR•IPV6•44『线路26』 +优漫卡通,https://live.lalifeier.eu.org/jstv/ymkt.m3u8?t=1745796321&key=a52fbb40a8c25dfa0feef5a1b4b5910d$LR•IPV4•44『线路27』 +优漫卡通,https://www.freetv.top/migu/626064703.m3u8?migutoken=deac6c5275081b54ad412a195e499b7c0cb8f04446b6c80aaa9d3eb1063d620261c68202d59aea05060007b58a62d5d208f16379d861d6f1627c10c9dd894f0bf7e3ca97b04696255e193e871c$LR•IPV4•44『线路28』 +优漫卡通,https://stream1.freetv.fun/you-man-qia-tong-11.m3u8$LR•IPV4•44『线路29』 +优漫卡通,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226932/1.m3u8$LR•IPV6•44『线路30』 +优漫卡通,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226406/index.m3u8$LR•IPV4•44『线路31』 +优漫卡通,http://goo.bkpcp.top/mg/ymkt$LR•IPV4•44『线路32』 +优漫卡通,http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225656/index.m3u8$LR•IPV6•44『线路33』 +优漫卡通,http://106.118.70.125:9901/tsfile/live/1013_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•44『线路34』 +优漫卡通,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010118$LR•IPV4•44『线路35』 +优漫卡通,http://z.b.bkpcp.top/m.php?id=ymkt$LR•IPV4•44『线路36』 +优漫卡通,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/2/224/3221225656/2.m3u8$LR•IPV6•44『线路37』 +优漫卡通,https://live.lalifeier.eu.org/jstv/ymkt.m3u8?t=1745796321&key=a52fbb40a8c25dfa0feef5a1b4b5910d$LR•IPV4•44『线路38』 +优漫卡通,https://www.freetv.top/migu/626064703.m3u8?migutoken=deac6c5275081b54ad412a195e499b7c0cb8f04446b6c80aaa9d3eb1063d620261c68202d59aea05060007b58a62d5d208f16379d861d6f1627c10c9dd894f0bf7e3ca97b04696255e193e871c$LR•IPV4•44『线路39』 +优漫卡通,https://stream1.freetv.fun/you-man-qia-tong-11.m3u8$LR•IPV4•44『线路40』 +优漫卡通,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226932/1.m3u8$LR•IPV6•44『线路41』 +优漫卡通,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226406/index.m3u8$LR•IPV4•44『线路42』 +优漫卡通,http://goo.bkpcp.top/mg/ymkt$LR•IPV4•44『线路43』 +优漫卡通,http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225656/index.m3u8$LR•IPV6•44『线路44』 +哈哈炫动,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010117$LR•IPV4•38『线路1』 +哈哈炫动,https://live.lalifeier.eu.org/kankanews/hhxd.m3u8?t=1746292937&key=b5431ae4fa8b2429332dae8604165c95$LR•IPV4•38『线路2』 +哈哈炫动,http://rrs01.hw.gmcc.net:8088/PLTV/81/224/3221226703/1.m3u8$LR•IPV4•38『线路3』 +哈哈炫动,http://61.138.128.226:19901/tsfile/live/1016_1.m3u8$LR•IPV4•38『线路4』 +哈哈炫动,http://36.105.100.208:35455/itv/5000000011000031123.m3u8?cdn=bestzb$LR•IPV4•38『线路5』 +哈哈炫动,http://60.29.124.66:6080/hls/62/index.m3u8$LR•IPV4•38『线路6』 +哈哈炫动,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=7248&tk=23a9aca1f79f$LR•IPV4•38『线路7』 +哈哈炫动,http://120.238.94.10:9901/tsfile/live/1037_1.m3u8$LR•IPV4•38『线路8』 +哈哈炫动,http://139.129.231.228:50060/rtp/239.21.1.51:5002$LR•IPV4•38『线路9』 +哈哈炫动,http://120.55.49.231:3095/rtp/233.50.201.74:5140$LR•IPV4•38『线路10』 +哈哈炫动,http://139.196.151.191/rtp/239.45.1.55:5140$LR•IPV4•38『线路11』 +哈哈炫动,https://stream1.freetv.fun/ipv6-ha-ha-xuan-dong-10.m3u8$LR•IPV4•38『线路12』 +哈哈炫动,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/2/224/3221225657/2.m3u8$LR•IPV6•38『线路13』 +哈哈炫动,http://[2409:8087:74d9:21::6]/000000001000PLTV/88888888/224/3221226618/index.m3u8$LR•IPV6•38『线路14』 +哈哈炫动,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226931/1.m3u8$LR•IPV6•38『线路15』 +哈哈炫动,http://[2409:8087:1a0b:df::4001]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225657/index.m3u8$LR•IPV6•38『线路16』 +哈哈炫动,http://[2409:8087:1a15:10d1::39]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225657/index.m3u8$LR•IPV6•38『线路17』 +哈哈炫动,http://[2409:8087:5e08:25::16]:6610/200000001898/460000089800010117/1.m3u8$LR•IPV6•38『线路18』 +哈哈炫动,http://[2409:8087:74d9:21::6]:80/270000001128/9900000069/index.m3u8$LR•IPV6•38『线路19』 +哈哈炫动,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225657/index.m3u8$LR•IPV4•38『线路20』 +哈哈炫动,https://zby.130519.xyz/PLTV/11/224/3221226161/index.m3u8$LR•IPV4•38『线路21』 +哈哈炫动,http://home.wwang.pw:35455/itv/5000000011000031123.m3u8?cdn=bestzb$LR•IPV4•38『线路22』 +哈哈炫动,http://111.22.153.159:35455/itv/5000000011000031123.m3u8?cdn=bestzb$LR•IPV4•38『线路23』 +哈哈炫动,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010117$LR•IPV4•38『线路24』 +哈哈炫动,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/2/224/3221225657/2.m3u8$LR•IPV6•38『线路25』 +哈哈炫动,http://[2409:8087:74d9:21::6]/000000001000PLTV/88888888/224/3221226618/index.m3u8$LR•IPV6•38『线路26』 +哈哈炫动,https://live.lalifeier.eu.org/kankanews/hhxd.m3u8?t=1746292937&key=b5431ae4fa8b2429332dae8604165c95$LR•IPV4•38『线路27』 +哈哈炫动,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226931/1.m3u8$LR•IPV6•38『线路28』 +哈哈炫动,http://[2409:8087:1a0b:df::4001]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225657/index.m3u8$LR•IPV6•38『线路29』 +哈哈炫动,http://rrs01.hw.gmcc.net:8088/PLTV/81/224/3221226703/1.m3u8$LR•IPV4•38『线路30』 +哈哈炫动,http://[2409:8087:1a15:10d1::39]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225657/index.m3u8$LR•IPV6•38『线路31』 +哈哈炫动,http://[2409:8087:5e08:25::16]:6610/200000001898/460000089800010117/1.m3u8$LR•IPV6•38『线路32』 +哈哈炫动,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010117$LR•IPV4•38『线路33』 +哈哈炫动,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226931/1.m3u8$LR•IPV6•38『线路34』 +哈哈炫动,https://stream1.freetv.fun/ipv6-ha-ha-xuan-dong-10.m3u8$LR•IPV4•38『线路35』 +哈哈炫动,http://[2409:8087:1a15:10d1::39]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225657/index.m3u8$LR•IPV6•38『线路36』 +哈哈炫动,http://[2409:8087:5e08:25::16]:6610/200000001898/460000089800010117/1.m3u8$LR•IPV6•38『线路37』 +哈哈炫动,http://120.238.94.10:9901/tsfile/live/1037_1.m3u8$LR•IPV4•38『线路38』 +嘉佳卡通,http://[2409:8087:5e00:24::1e]:6060/000000001000/1000000002000025964/1.m3u8$LR•IPV6•2『线路1』 +嘉佳卡通,http://home.wwang.pw:35455/itv/1000000002000025964.m3u8?cdn=ystenlive$LR•IPV4•2『线路2』 +动漫秀场,http://sh.lnott.top:880/dx110.m3u8$LR•IPV4•28『线路1』 +动漫秀场,http://php.jdshipin.com/itv6.php?cid=bestzb&id=5000000011000031113$LR•IPV4•28『线路2』 +动漫秀场,https://stream1.freetv.fun/ipv6-dong-man-xiu-chang-11.m3u8$LR•IPV4•28『线路3』 +动漫秀场,https://live.v1.mk/api/bestv.php?id=dmxc8m/8000000$LR•IPV4•28『线路4』 +动漫秀场,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226608/index.m3u8$LR•IPV4•28『线路5』 +动漫秀场,https://hls-gateway.vpstv.net/streams/708843.m3u8$LR•IPV4•28『线路6』 +动漫秀场,http://36.105.100.208:35455/itv/5000000011000031113.m3u8?cdn=bestzb$LR•IPV4•28『线路7』 +动漫秀场,http://120.55.49.231:3095/rtp/233.50.201.184:5140$LR•IPV4•28『线路8』 +动漫秀场,http://139.196.151.191/rtp/239.45.3.134:5140$LR•IPV4•28『线路9』 +动漫秀场,http://[2409:8087:74d9:21::6]/000000001000PLTV/88888888/224/3221226197/index.m3u8$LR•IPV6•28『线路10』 +动漫秀场,http://[2409:8087:5e00:24::1e]:6060/000000001000/5000000011000031113/1.m3u8$LR•IPV6•28『线路11』 +动漫秀场,http://111.22.153.159:35455/itv/5000000011000031113.m3u8?cdn=bestzb$LR•IPV4•28『线路12』 +动漫秀场,http://home.wwang.pw:35455/itv/5000000011000031113.m3u8?cdn=bestzb$LR•IPV4•28『线路13』 +动漫秀场,https://zby.130519.xyz/PLTV/11/224/3221225764/index.m3u8$LR•IPV4•28『线路14』 +动漫秀场,http://36.129.204.117:9003//hls/67/index.m3u8$LR•IPV4•28『线路15』 +动漫秀场,http://home.wwang.pw:35455/itv/5000000011000031113.m3u8?cdn=bestzb$LR•IPV4•28『线路16』 +动漫秀场,http://php.jdshipin.com/itv6.php?cid=bestzb&id=5000000011000031113$LR•IPV4•28『线路17』 +动漫秀场,http://[2409:8087:74d9:21::6]/000000001000PLTV/88888888/224/3221226197/index.m3u8$LR•IPV6•28『线路18』 +动漫秀场,https://stream1.freetv.fun/ipv6-dong-man-xiu-chang-11.m3u8$LR•IPV4•28『线路19』 +动漫秀场,https://live.v1.mk/api/bestv.php?id=dmxc8m/8000000$LR•IPV4•28『线路20』 +动漫秀场,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226608/index.m3u8$LR•IPV4•28『线路21』 +动漫秀场,https://hls-gateway.vpstv.net/streams/708843.m3u8$LR•IPV4•28『线路22』 +动漫秀场,http://php.jdshipin.com/itv6.php?cid=bestzb&id=5000000011000031113$LR•IPV4•28『线路23』 +动漫秀场,http://[2409:8087:74d9:21::6]/000000001000PLTV/88888888/224/3221226197/index.m3u8$LR•IPV6•28『线路24』 +动漫秀场,https://stream1.freetv.fun/ipv6-dong-man-xiu-chang-11.m3u8$LR•IPV4•28『线路25』 +动漫秀场,https://live.v1.mk/api/bestv.php?id=dmxc8m/8000000$LR•IPV4•28『线路26』 +动漫秀场,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226608/index.m3u8$LR•IPV4•28『线路27』 +动漫秀场,https://hls-gateway.vpstv.net/streams/708843.m3u8$LR•IPV4•28『线路28』 +新动漫,http://sh.lnott.top:880/dx87.m3u8$LR•IPV4•22『线路1』 +新动漫,http://nas.hssvm.com:8888/udp/225.1.1.216:5002$LR•IPV4•22『线路2』 +新动漫,http://dassby.qqff.top:99/live/新动漫/index.m3u8$LR•IPV4•22『线路3』 +新动漫,rtsp://115.153.245.70/PLTV/88888888/224/3221226973/86129004.smil$LR•IPV4•22『线路4』 +新动漫,rtsp://115.153.254.81/PLTV/88888888/224/3221226973/86129004.smil$LR•IPV4•22『线路5』 +新动漫,rtsp://115.153.240.228:554/PLTV/88888888/224/3221226973/86129004.smil$LR•IPV4•22『线路6』 +新动漫,rtsp://115.153.212.72/PLTV/88888888/224/3221226973/86129004.smil$LR•IPV4•22『线路7』 +新动漫,rtsp://115.153.230.145/PLTV/88888888/224/3221226973/86129004.smil$LR•IPV4•22『线路8』 +新动漫,rtsp://115.153.247.80/PLTV/88888888/224/3221226973/86129004.smil$LR•IPV4•22『线路9』 +新动漫,rtsp://115.153.222.112:554/PLTV/88888888/224/3221226973/86129004.smil$LR•IPV4•22『线路10』 +新动漫,rtsp://115.153.233.154/PLTV/88888888/224/3221226973/86129004.smil$LR•IPV4•22『线路11』 +新动漫,http://nas.hssvm.com:8888/udp/225.1.1.216:5002$LR•IPV4•22『线路12』 +新动漫,http://dassby.qqff.top:99/live/新动漫/index.m3u8$LR•IPV4•22『线路13』 +新动漫,rtsp://115.153.245.70/PLTV/88888888/224/3221226973/86129004.smil$LR•IPV4•22『线路14』 +新动漫,rtsp://115.153.254.81/PLTV/88888888/224/3221226973/86129004.smil$LR•IPV4•22『线路15』 +新动漫,rtsp://115.153.240.228:554/PLTV/88888888/224/3221226973/86129004.smil$LR•IPV4•22『线路16』 +新动漫,rtsp://115.153.212.72/PLTV/88888888/224/3221226973/86129004.smil$LR•IPV4•22『线路17』 +新动漫,rtsp://115.153.230.145/PLTV/88888888/224/3221226973/86129004.smil$LR•IPV4•22『线路18』 +新动漫,rtsp://115.153.247.80/PLTV/88888888/224/3221226973/86129004.smil$LR•IPV4•22『线路19』 +新动漫,rtsp://115.153.222.112:554/PLTV/88888888/224/3221226973/86129004.smil$LR•IPV4•22『线路20』 +新动漫,rtsp://115.153.233.154/PLTV/88888888/224/3221226973/86129004.smil$LR•IPV4•22『线路21』 +新动漫,http://nas.hssvm.com:8888/udp/225.1.1.216:5002$LR•IPV4•22『线路22』 +金鹰卡通,https://live.mxdyeah.top/live.php?id=jinyingSD$LR•IPV4•45『线路1』 +金鹰卡通,https://cc06.tv12.xyz/55.m3u8$LR•IPV4•45『线路2』 +金鹰卡通,http://106.118.70.125:9901/tsfile/live/1011_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•45『线路3』 +金鹰卡通,http://1.195.131.143:9901/tsfile/live/1005_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•45『线路4』 +金鹰卡通,http://nas.suntao.online:35455/bptv/10000100000000050000000004796942.m3u8$LR•IPV4•45『线路5』 +金鹰卡通,http://dsj.motem.top:8880/bptv/10000100000000050000000004796942.m3u8$LR•IPV4•45『线路6』 +金鹰卡通,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226624/index.m3u8$LR•IPV4•45『线路7』 +金鹰卡通,http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221225744/index.m3u8$LR•IPV4•45『线路8』 +金鹰卡通,http://rrs01.hw.gmcc.net:8088/PLTV/81/224/3221226674/1.m3u8$LR•IPV4•45『线路9』 +金鹰卡通,https://cc06.tv12.xyz/55.m3u8$LR•IPV4•45『线路10』 +金鹰卡通,http://183.94.1.118:8801/tsfile/live/1000_1.m3u8$LR•IPV4•45『线路11』 +金鹰卡通,http://120.192.226.35:8009/hls/67/index.m3u8$LR•IPV4•45『线路12』 +金鹰卡通,http://61.138.128.226:19901/tsfile/live/1018_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•45『线路13』 +金鹰卡通,http://36.105.100.208:35455/itv/5000000006000040024.m3u8?cdn=bestzb$LR•IPV4•45『线路14』 +金鹰卡通,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=3187&tk=e503191f8e20$LR•IPV4•45『线路15』 +金鹰卡通,http://58.19.43.46:9901/tsfile/live/1000_1.m3u8$LR•IPV4•45『线路16』 +金鹰卡通,http://139.129.231.228:50060/rtp/239.21.1.48:5002$LR•IPV4•45『线路17』 +金鹰卡通,http://220.170.241.204:9901/tsfile/live/1005_1.m3u8$LR•IPV4•45『线路18』 +金鹰卡通,http://139.196.151.191:2051/rtp/239.45.3.118:5140$LR•IPV4•45『线路19』 +金鹰卡通,http://183.11.239.36:808/hls/69/index.m3u8$LR•IPV4•45『线路20』 +金鹰卡通,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/2/224/3221225653/2.m3u8$LR•IPV6•45『线路21』 +金鹰卡通,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226576/1.m3u8$LR•IPV6•45『线路22』 +金鹰卡通,http://[2409:8087:1a0b:df::4008]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225653/index.m3u8$LR•IPV6•45『线路23』 +金鹰卡通,http://[2409:8087:5e08:25::16]:6610/200000001898/460000089800010107/1.m3u8$LR•IPV6•45『线路24』 +金鹰卡通,http://[2409:8087:74d9:21::6]:80/270000001128/9900000039/index.m3u8$LR•IPV6•45『线路25』 +金鹰卡通,https://epg.pw/stream/c63a5626286e9017c57efde96337b54a1cb81a6626bb93f486fcbc1caadc7948.m3u8$LR•IPV4•45『线路26』 +金鹰卡通,https://epg.pw/stream/33c44b3d14a45ab0fbe06d98b6608a0067dd068ebb6bd8e4a931cb2e600f8548.m3u8$LR•IPV4•45『线路27』 +金鹰卡通,http://phoneqq.qing.mgtv.com/nn_live/nn_x64/dWlwPTEwNi4xNC4zOC41NSZ0ZXJtPTUmcWlkPSZjZG5leF9pZD1xcV9waG9uZV9saXZlJmNocz0mZGVmPTEmcz00YTI3ZDQ3OTcwOGU0OGFiOTgwYTY5M2FhY2VjMjA0MiZ1aWQ9JnV1aWQ9ZjI4MDY1ZGY2Mjk1MjBmOTVjNTE0MGFjZDRjZDJiN2MtNmEwZTI2Mzcmdj0yJmFzPTAmZXM9MTc1OTc4MDYyNw,,/JYKTMPP360.m3u8$LR•IPV4•45『线路28』 +金鹰卡通,http://ygbh.site/php/bfgd.php?id=105$LR•IPV4•45『线路29』 +金鹰卡通,https://cc06.tv12.xyz/55.m3u8$LR•IPV4•45『线路30』 +金鹰卡通,https://zby.130519.xyz/PLTV/11/224/3221226094/index.m3u8$LR•IPV4•45『线路31』 +金鹰卡通,http://itv.iptv1688.top:2016/itv.php?id=金鹰卡通$LR•IPV4•45『线路32』 +金鹰卡通,http://home.wwang.pw:35455/itv/5000000006000040024.m3u8?cdn=bestzb$LR•IPV4•45『线路33』 +金鹰卡通,http://tvbox6.icu/tv/mgtv.php?id=287$LR•IPV4•45『线路34』 +金鹰卡通,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/2/224/3221225653/2.m3u8$LR•IPV6•45『线路35』 +金鹰卡通,http://nas.suntao.online:35455/bptv/10000100000000050000000004796942.m3u8$LR•IPV4•45『线路36』 +金鹰卡通,http://dsj.motem.top:8880/bptv/10000100000000050000000004796942.m3u8$LR•IPV4•45『线路37』 +金鹰卡通,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226576/1.m3u8$LR•IPV6•45『线路38』 +金鹰卡通,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226624/index.m3u8$LR•IPV4•45『线路39』 +金鹰卡通,http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221225744/index.m3u8$LR•IPV4•45『线路40』 +金鹰卡通,http://[2409:8087:1a0b:df::4008]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225653/index.m3u8$LR•IPV6•45『线路41』 +金鹰卡通,http://rrs01.hw.gmcc.net:8088/PLTV/81/224/3221226674/1.m3u8$LR•IPV4•45『线路42』 +金鹰卡通,http://[2409:8087:5e08:25::16]:6610/200000001898/460000089800010107/1.m3u8$LR•IPV6•45『线路43』 +金鹰卡通,https://cc06.tv12.xyz/55.m3u8$LR•IPV4•45『线路44』 +金鹰卡通,http://58.57.40.22:9901/tsfile/live/1059_1.m3u8$LR•IPV4•45『线路45』 +金鹰纪实,http://sh.lnott.top:880/dx96.m3u8$LR•IPV4•34『线路1』 +金鹰纪实,http://iptv.huuc.edu.cn/hls/gedocu.m3u8$LR•IPV4•34『线路2』 +金鹰纪实,https://stream1.freetv.fun/jin-ying-ji-shi-1.ctv$LR•IPV4•34『线路3』 +金鹰纪实,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226668/index.m3u8$LR•IPV4•34『线路4』 +金鹰纪实,http://rrs01.hw.gmcc.net:8088/PLTV/81/224/3221226667/1.m3u8$LR•IPV4•34『线路5』 +金鹰纪实,https://hls-gateway.vpstv.net/streams/708834.m3u8$LR•IPV4•34『线路6』 +金鹰纪实,http://36.105.100.208:35455/itv/5000000011000031203.m3u8?cdn=bestzb$LR•IPV4•34『线路7』 +金鹰纪实,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=4197&tk=f6cc1e0a0e1a$LR•IPV4•34『线路8』 +金鹰纪实,http://120.238.94.10:9901/tsfile/live/1059_1.m3u8$LR•IPV4•34『线路9』 +金鹰纪实,http://139.129.231.228:50060/rtp/239.21.1.170:5002$LR•IPV4•34『线路10』 +金鹰纪实,http://183.11.239.36:808/hls/171/index.m3u8$LR•IPV4•34『线路11』 +金鹰纪实,http://116.128.242.83:9901/tsfile/live/1001_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•34『线路12』 +金鹰纪实,http://139.196.151.191/rtp/239.45.1.45:5140$LR•IPV4•34『线路13』 +金鹰纪实,http://121.19.134.222:808/tsfile/live/1037_1.m3u8$LR•IPV4•34『线路14』 +金鹰纪实,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226572/1.m3u8$LR•IPV6•34『线路15』 +金鹰纪实,http://[2409:8087:3c02:0021:0000:0001:0000:100a]:6410/shandong_cabletv.live.zte.com////CHANNEL00000334/index.m3u8?IASHttpSessionId=$LR•IPV6•34『线路16』 +金鹰纪实,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888910/224/3221225595/index.m3u8?fmt=ts2hls$LR•IPV6•34『线路17』 +金鹰纪实,http://[2409:8087:5e08:25::16]:6610/200000001898/460000089800010106/1.m3u8$LR•IPV6•34『线路18』 +金鹰纪实,http://[2409:8087:5e00:24::1e]:6060/000000001000/5000000011000031203/1.m3u8$LR•IPV6•34『线路19』 +金鹰纪实,https://epg.pw/stream/bff1174f45465dde57e23d7f6a931dd08a6673961ffda6a7590b07e46e2afb7a.m3u8$LR•IPV4•34『线路20』 +金鹰纪实,https://epg.pw/stream/b460daa1c23bd0e46e0c55da4fd13bec726945cd2ddd2521a39cb491daa60134.m3u8$LR•IPV4•34『线路21』 +金鹰纪实,http://rrs01.hw.gmcc.net:8088/PLTV/81/224/3221226667/1.m3u8$LR•IPV4•34『线路22』 +金鹰纪实,http://home.wwang.pw:35455/itv/5000000011000031203.m3u8?cdn=bestzb$LR•IPV4•34『线路23』 +金鹰纪实,http://iptv.huuc.edu.cn/hls/gedocu.m3u8$LR•IPV4•34『线路24』 +金鹰纪实,http://tvbox6.icu/tv/mgtv.php?id=316$LR•IPV4•34『线路25』 +金鹰纪实,http://iptv.huuc.edu.cn/hls/gedocu.m3u8$LR•IPV4•34『线路26』 +金鹰纪实,https://stream1.freetv.fun/jin-ying-ji-shi-1.ctv$LR•IPV4•34『线路27』 +金鹰纪实,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226572/1.m3u8$LR•IPV6•34『线路28』 +金鹰纪实,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226668/index.m3u8$LR•IPV4•34『线路29』 +金鹰纪实,http://[2409:8087:3c02:0021:0000:0001:0000:100a]:6410/shandong_cabletv.live.zte.com////CHANNEL00000334/index.m3u8?IASHttpSessionId=$LR•IPV6•34『线路30』 +金鹰纪实,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888910/224/3221225595/index.m3u8?fmt=ts2hls$LR•IPV6•34『线路31』 +金鹰纪实,http://rrs01.hw.gmcc.net:8088/PLTV/81/224/3221226667/1.m3u8$LR•IPV4•34『线路32』 +金鹰纪实,https://hls-gateway.vpstv.net/streams/708834.m3u8$LR•IPV4•34『线路33』 +金鹰纪实,http://[2409:8087:5e08:25::16]:6610/200000001898/460000089800010106/1.m3u8$LR•IPV6•34『线路34』 +梨园频道,http://www.lizhinas.top:1009/rtp/239.252.220.179:5140$LR•IPV4 +欢笑剧场,http://sh.lnott.top:880/hx.m3u8$LR•IPV4•26『线路1』 +欢笑剧场,http://223.167.245.215:8001/rtp/239.45.3.196:5140$LR•IPV4•26『线路2』 +欢笑剧场,http://z.b.bkpcp.top/m.php?id=hxjc$LR•IPV4•26『线路3』 +欢笑剧场,http://gat.bkpcp.top/ymg.php?id=hxjc$LR•IPV4•26『线路4』 +欢笑剧场,http://goo.bkpcp.top/mg/hxjc$LR•IPV4•26『线路5』 +欢笑剧场,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226704/index.m3u8$LR•IPV4•26『线路6』 +欢笑剧场,http://36.105.100.208:35455/itv/5000000002000009455.m3u8?cdn=bestzb$LR•IPV4•26『线路7』 +欢笑剧场,http://139.196.151.191/rtp/239.45.3.196:5140$LR•IPV4•26『线路8』 +欢笑剧场,http://[2409:8087:5e00:24::1e]:6060/000000001000/5000000002000009455/1.m3u8$LR•IPV6•26『线路9』 +欢笑剧场,http://[2409:8087:1e01:20::3]:80/PLTV/11/224/3221225771/index.m3u8$LR•IPV6•26『线路10』 +欢笑剧场,http://[2409:8087:74d9:21::6]:80/000000001000PLTV/88888888/224/3221226203/index.m3u8$LR•IPV6•26『线路11』 +欢笑剧场,https://epg.pw/stream/c26de373680830b38e7b3f0da2f920353f298e3369addfe68b8e4a2e3811a12b.m3u8$LR•IPV4•26『线路12』 +欢笑剧场,https://epg.pw/stream/631786a4e9509776045a3b475c48a97e1c9a69b08e45e07227e3c5d61a32b515.m3u8$LR•IPV4•26『线路13』 +欢笑剧场,http://111.22.153.159:35455/itv/5000000002000009455.m3u8?cdn=bestzb$LR•IPV4•26『线路14』 +欢笑剧场,http://home.wwang.pw:35455/itv/5000000002000009455.m3u8?cdn=bestzb$LR•IPV4•26『线路15』 +欢笑剧场,http://mg.hmysapp.cn:177/ckmg/zb.php?id=hxjc$LR•IPV4•26『线路16』 +欢笑剧场,http://t.061899.xyz/tl/dq.php?id=hxjc$LR•IPV4•26『线路17』 +欢笑剧场,https://zby.130519.xyz/PLTV/11/224/3221225771/index.m3u8$LR•IPV4•26『线路18』 +欢笑剧场,http://223.167.245.215:8001/rtp/239.45.3.196:5140$LR•IPV4•26『线路19』 +欢笑剧场,http://z.b.bkpcp.top/m.php?id=hxjc$LR•IPV4•26『线路20』 +欢笑剧场,http://gat.bkpcp.top/ymg.php?id=hxjc$LR•IPV4•26『线路21』 +欢笑剧场,http://goo.bkpcp.top/mg/hxjc$LR•IPV4•26『线路22』 +欢笑剧场,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226704/index.m3u8$LR•IPV4•26『线路23』 +欢笑剧场,http://[2409:8087:5e00:24::1e]:6060/000000001000/5000000002000009455/1.m3u8$LR•IPV6•26『线路24』 +欢笑剧场,http://[2409:8087:1e01:20::3]:80/PLTV/11/224/3221225771/index.m3u8$LR•IPV6•26『线路25』 +欢笑剧场,http://[2409:8087:1e01:20::3]:80/PLTV/11/224/3221225771/index.m3u8$LR•IPV6•26『线路26』 +都市剧场,http://sh.lnott.top:880/dx107.m3u8$LR•IPV4•26『线路1』 +都市剧场,https://satellitepull.cnr.cn/live/wxcqxwgb/playlist.m3u8$LR•IPV4•26『线路2』 +都市剧场,http://223.167.245.215:8001/rtp/239.45.3.136:5140$LR•IPV4•26『线路3』 +都市剧场,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226694/index.m3u8$LR•IPV4•26『线路4』 +都市剧场,https://hls-gateway.vpstv.net/streams/708845.m3u8$LR•IPV4•26『线路5』 +都市剧场,http://36.105.100.208:35455/itv/5000000011000031111.m3u8?cdn=bestzb$LR•IPV4•26『线路6』 +都市剧场,http://139.196.151.191/rtp/239.45.3.136:5140$LR•IPV4•26『线路7』 +都市剧场,http://[2409:8087:5e00:24::1e]:6060/000000001000/5000000011000031111/1.m3u8$LR•IPV6•26『线路8』 +都市剧场,http://[2409:8087:5e08:25::4]:6610/000000001000/5000000011000031111/index.m3u8?channel-id=bestzb&Contentid=5000000011000031111&Ace$LR•IPV6•26『线路9』 +都市剧场,http://[2409:8087:1e01:20::3]:80/PLTV/11/224/3221225762/index.m3u8$LR•IPV6•26『线路10』 +都市剧场,http://[2409:8087:74d9:21::6]:80/000000001000PLTV/88888888/224/3221226176/index.m3u8$LR•IPV6•26『线路11』 +都市剧场,https://epg.pw/stream/3ebdb0468d20c9605d2d4e762eb9df466a987323499cc64a71f30e6f020ba7ef.m3u8$LR•IPV4•26『线路12』 +都市剧场,https://epg.pw/stream/8df8ea3eca16380868129d08a1117f10d39dbd1bcf621e1963c57b2c756414ac.m3u8$LR•IPV4•26『线路13』 +都市剧场,http://112.46.105.20:8009/hls/72/index.m3u8$LR•IPV4•26『线路14』 +都市剧场,http://home.wwang.pw:35455/itv/5000000011000031111.m3u8?cdn=bestzb$LR•IPV4•26『线路15』 +都市剧场,http://112.46.105.20:8009/hls/72/index.m3u8$LR•IPV4•26『线路16』 +都市剧场,https://zby.130519.xyz/PLTV/11/224/3221225762/index.m3u8$LR•IPV4•26『线路17』 +都市剧场,https://satellitepull.cnr.cn/live/wxcqxwgb/playlist.m3u8$LR•IPV4•26『线路18』 +都市剧场,http://223.167.245.215:8001/rtp/239.45.3.136:5140$LR•IPV4•26『线路19』 +都市剧场,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226694/index.m3u8$LR•IPV4•26『线路20』 +都市剧场,https://hls-gateway.vpstv.net/streams/708845.m3u8$LR•IPV4•26『线路21』 +都市剧场,http://[2409:8087:5e00:24::1e]:6060/000000001000/5000000011000031111/1.m3u8$LR•IPV6•26『线路22』 +都市剧场,http://[2409:8087:5e08:25::4]:6610/000000001000/5000000011000031111/index.m3u8?channel-id=bestzb&Contentid=5000000011000031111&Ace$LR•IPV6•26『线路23』 +都市剧场,http://[2409:8087:1e01:20::3]:80/PLTV/11/224/3221225762/index.m3u8$LR•IPV6•26『线路24』 +都市剧场,https://satellitepull.cnr.cn/live/wxcqxwgb/playlist.m3u8$LR•IPV4•26『线路25』 +都市剧场,http://[2409:8087:1e01:20::3]:80/PLTV/11/224/3221225762/index.m3u8$LR•IPV6•26『线路26』 +金色学堂,http://sh.lnott.top:880/dx109.m3u8$LR•IPV4•10『线路1』 +金色学堂,http://[2409:8087:5e00:24::1e]:6060/000000001000/5000000010000026105/1.m3u8$LR•IPV6•10『线路2』 +金色学堂,https://epg.pw/stream/303d79304fb4c6e23c320315de037e71f67a6ee8866d45e994b896d07eede2bb.m3u8$LR•IPV4•10『线路3』 +金色学堂,https://epg.pw/stream/0950e74a535638b0f24f31958edbfd892de9effddfedd476cdbcfcbb90d3749a.ctv$LR•IPV4•10『线路4』 +金色学堂,https://epg.pw/stream/2d0821904f2113c3a5a2ba405ae14a0749b87cd7e8a0c9b2144bc2be29d8108c.m3u8$LR•IPV4•10『线路5』 +金色学堂,https://epg.pw/stream/0bae0bc58ebf59cfd9f8ffbef95c9fba646ca2aa003db76b8b27633a02a8f3e8.m3u8$LR•IPV4•10『线路6』 +金色学堂,https://epg.pw/stream/1c2b7c251affe50420e4c01f03d85ca7fb86e91234deadf6405fd0acdd228d2c.m3u8$LR•IPV4•10『线路7』 +金色学堂,http://111.22.153.159:35455/itv/5000000010000026105.m3u8?cdn=bestzb$LR•IPV4•10『线路8』 +金色学堂,http://home.wwang.pw:35455/itv/5000000010000026105.m3u8?cdn=bestzb$LR•IPV4•10『线路9』 +金色学堂,https://zby.130519.xyz/PLTV/11/224/3221225748/index.m3u8$LR•IPV4•10『线路10』 +爱上4K,http://wouu.net:9977/udp/239.93.0.97:5140$LR•IPV4•2『线路1』 +爱上4K,http://wouu.net:9977/udp/239.93.0.97:5140$LR•IPV4•2『线路2』 +劲爆体育,http://php.jdshipin.com/itv6s.php?cid=hnbblive&id=2000000002000000008$LR•IPV4•21『线路1』 +劲爆体育,http://z.b.bkpcp.top/m.php?id=jbty$LR•IPV4•21『线路2』 +劲爆体育,http://goo.bkpcp.top/mg/jbty$LR•IPV4•21『线路3』 +劲爆体育,https://www.freetv.top/migu/796071336.m3u8?migutoken=1cc947d86cb584c31c31c88c005d55965238dbfff7ed75fca8451aed0b564786fde7e4b327e93b92dc96ef57e64e3bb56e8a9e921338080cdae817cb6125d8450b687659ecfee06be9c5d53ac6$LR•IPV4•21『线路4』 +劲爆体育,https://live.v1.mk/api/ghyx.php?id=JinBaoTiYuHD_6000$LR•IPV4•21『线路5』 +劲爆体育,http://36.105.100.208:35455/itv/5000000002000029972.m3u8?cdn=bestzb$LR•IPV4•21『线路6』 +劲爆体育,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=0525&tk=23a9aca1f79f$LR•IPV4•21『线路7』 +劲爆体育,http://[2409:8087:5e01:24::16]:6610/000000001000/2000000002000000008/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000008&IASHttpSessionId=OTT19019320240419154124000281$LR•IPV6•21『线路8』 +劲爆体育,https://epg.pw/stream/5c9f8deb5d2b8a259adb635f16239674f23d6075bb3713aa4795a8a7ecb34f52.m3u8$LR•IPV4•21『线路9』 +劲爆体育,https://epg.pw/stream/eca08353703a7bb2190c942daa20bd25b03c25b7d2662afdc120864a17d8a94c.m3u8$LR•IPV4•21『线路10』 +劲爆体育,https://epg.pw/stream/025b9a77daa84361d1c77d49c7136339ff3f9e3b2da922f09fb9468c026e4867.m3u8$LR•IPV4•21『线路11』 +劲爆体育,http://111.22.153.159:35455/itv/5000000002000029972.m3u8?cdn=bestzb$LR•IPV4•21『线路12』 +劲爆体育,http://home.wwang.pw:35455/itv/5000000002000029972.m3u8?cdn=bestzb$LR•IPV4•21『线路13』 +劲爆体育,http://mg.hmysapp.cn:177/ckmg/zb.php?id=jbty$LR•IPV4•21『线路14』 +劲爆体育,http://t.061899.xyz/tl/dq.php?id=jbty$LR•IPV4•21『线路15』 +劲爆体育,http://php.jdshipin.com/itv6s.php?cid=hnbblive&id=2000000002000000008$LR•IPV4•21『线路16』 +劲爆体育,http://z.b.bkpcp.top/m.php?id=jbty$LR•IPV4•21『线路17』 +劲爆体育,http://goo.bkpcp.top/mg/jbty$LR•IPV4•21『线路18』 +劲爆体育,https://www.freetv.top/migu/796071336.m3u8?migutoken=1cc947d86cb584c31c31c88c005d55965238dbfff7ed75fca8451aed0b564786fde7e4b327e93b92dc96ef57e64e3bb56e8a9e921338080cdae817cb6125d8450b687659ecfee06be9c5d53ac6$LR•IPV4•21『线路19』 +劲爆体育,https://live.goodiptv.club/api/yqgd.php?id=jbtyhd$LR•IPV4•21『线路20』 +劲爆体育,https://live.v1.mk/api/ghyx.php?id=JinBaoTiYuHD_6000$LR•IPV4•21『线路21』 +哒啵赛事,http://[2409:8087:74d9:21::6]:80/270000001128/9900000097/index.m3u8$LR•IPV6•2『线路1』 +哒啵赛事,http://home.wwang.pw:35455/itv/1000000001000003775.m3u8?cdn=ystenlive$LR•IPV4•2『线路2』 +哒啵电竞,http://[2409:8087:5e01:24::16]:6610/000000001000/2000000003000000066/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000003000000066&IASHttpSessionId=OTT19019320240419154124000281$LR•IPV6•3『线路1』 +哒啵电竞,http://111.22.153.159:35455/itv/1000000006000032327.m3u8?cdn=ystenlive$LR•IPV4•3『线路2』 +哒啵电竞,http://home.wwang.pw:35455/itv/1000000006000032327.m3u8?cdn=ystenlive$LR•IPV4•3『线路3』 +乐游,http://[2409:8087:5e00:24::1e]:6060/000000001000/5000000011000031112/1.m3u8$LR•IPV6•6『线路1』 +乐游,http://8.138.7.223/tv/shtv.php?id=ly$LR•IPV4•6『线路2』 +乐游,http://home.wwang.pw:35455/itv/5000000011000031112.m3u8?cdn=bestzb$LR•IPV4•6『线路3』 +乐游,http://mg.hmysapp.cn:177/ckmg/zb.php?id=ly$LR•IPV4•6『线路4』 +乐游,http://t.061899.xyz/tl/dq.php?id=ly$LR•IPV4•6『线路5』 +乐游,https://zby.130519.xyz/PLTV/11/224/3221226157/index.m3u8$LR•IPV4•6『线路6』 +快乐垂钓,http://sh.lnott.top:880/dx203.m3u8$LR•IPV4•17『线路1』 +快乐垂钓,https://cc06.tv12.xyz/56.m3u8$LR•IPV4•17『线路2』 +快乐垂钓,http://drive.mxmy.net:8888/udp/239.3.1.164:8001$LR•IPV4•17『线路3』 +快乐垂钓,https://cc06.tv12.xyz/56.m3u8$LR•IPV4•17『线路4』 +快乐垂钓,http://php.jdshipin.com/itv6.php?cid=bestzb&id=5000000011000031206$LR•IPV4•17『线路5』 +快乐垂钓,https://hls-gateway.vpstv.net/streams/708835.m3u8$LR•IPV4•17『线路6』 +快乐垂钓,http://36.105.100.208:35455/itv/5000000011000031206.m3u8?cdn=bestzb$LR•IPV4•17『线路7』 +快乐垂钓,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=8968&tk=e640d0a1bf70$LR•IPV4•17『线路8』 +快乐垂钓,http://120.55.49.231:3095/rtp/233.50.201.109:5140$LR•IPV4•17『线路9』 +快乐垂钓,http://[2409:8087:5e08:24::11]:6610/000000001000/5000000011000031206/index.m3u8?channel-id=bestzb&Contentid=5000000011000031206&livemode=1&stbId=3$LR•IPV6•17『线路10』 +快乐垂钓,https://epg.pw/stream/f985e0b6d1331e8a6ebe2cd52fc775e56778a8c59df71272881179c511e256cb.m3u8$LR•IPV4•17『线路11』 +快乐垂钓,http://home.wwang.pw:35455/itv/5000000011000031206.m3u8?cdn=bestzb$LR•IPV4•17『线路12』 +快乐垂钓,https://cc06.tv12.xyz/56.m3u8$LR•IPV4•17『线路13』 +快乐垂钓,http://drive.mxmy.net:8888/udp/239.3.1.164:8001$LR•IPV4•17『线路14』 +快乐垂钓,http://php.jdshipin.com/itv6.php?cid=bestzb&id=5000000011000031206$LR•IPV4•17『线路15』 +快乐垂钓,https://hls-gateway.vpstv.net/streams/708835.m3u8$LR•IPV4•17『线路16』 +快乐垂钓,https://cc06.tv12.xyz/56.m3u8$LR•IPV4•17『线路17』 +纪实人文,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225738/index.m3u8$LR•IPV4•16『线路1』 +纪实人文,https://stream1.freetv.fun/ipv6-ji-shi-ren-wen-12.m3u8$LR•IPV4•16『线路2』 +纪实人文,http://36.105.100.208:35455/itv/5000000004000010282.m3u8?cdn=bestzb$LR•IPV4•16『线路3』 +纪实人文,http://139.129.231.228/rtp/239.21.1.195:5002$LR•IPV4•16『线路4』 +纪实人文,http://139.196.151.191/rtp/239.45.3.212:5140$LR•IPV4•16『线路5』 +纪实人文,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010067/1.m3u8$LR•IPV6•16『线路6』 +纪实人文,http://[2409:8087:74d9:21::6]:80/270000001128/9900000528/index.m3u8$LR•IPV6•16『线路7』 +纪实人文,http://58.248.112.205:8006/GD_CUCC/G_SHANGHAIJS-HD.m3u8?Authinfo=F8UQ%2BEevMmd%2FnekE5YOOKj2XjEQPCgsjHTwYM82OKTALPIQT5K8kr81olsEefKQX$LR•IPV4•16『线路8』 +纪实人文,http://[2001:250:5800:1005::155]:80/liverespath/98a578339579ce91ec2443bfbd1fc3af10ee02bd/90b63ff064-0-0-1b1b65981838b98d8f98036b839cbc79/index.m3u8$LR•IPV6•16『线路9』 +纪实人文,https://epg.pw/stream/fd2a1d3bbc8e8cd4a88812023fdc1471e8046fe3e85a1d07721f6dfd26fce8b6.m3u8$LR•IPV4•16『线路10』 +纪实人文,http://8.138.7.223/tv/shtv.php?id=xjs$LR•IPV4•16『线路11』 +纪实人文,http://home.wwang.pw:35455/itv/5000000004000010282.m3u8?cdn=bestzb$LR•IPV4•16『线路12』 +纪实人文,http://8.138.7.223/tv/shtv.php?id=xjs$LR•IPV4•16『线路13』 +纪实人文,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225738/index.m3u8$LR•IPV4•16『线路14』 +纪实人文,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010067/1.m3u8$LR•IPV6•16『线路15』 +纪实人文,https://stream1.freetv.fun/ipv6-ji-shi-ren-wen-12.m3u8$LR•IPV4•16『线路16』 +纪实科教,http://[2409:8087:74d9:21::6]:80/270000001128/9900000515/index.m3u8$LR•IPV6•5『线路1』 +纪实科教,http://58.248.112.205:8006/GD_CUCC/G_BEIJINGJS-CQ.m3u8?Authinfo=F8UQ%2BEevMmd%2FnekE5YOOKlqqd8HLKWN9yv5NoaCSBtwn5c8oDbwHIxF8FZNpmYbI$LR•IPV4•5『线路2』 +纪实科教,http://120.76.248.139/live/bfgd/4200000113.m3u8$LR•IPV4•5『线路3』 +纪实科教,http://home.wwang.pw:35455/itv/1000000001000001910.m3u8?cdn=ystenlive$LR•IPV4•5『线路4』 +纪实科教,http://120.76.248.139/live/bfgd/4200000113.m3u8$LR•IPV4•5『线路5』 +求索动物,http://[2409:8087:5e01:24::16]:6610/000000001000/2000000004000000009/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000009&IASHttpSessionId=OTT19019320240419154124000281$LR•IPV6•4『线路1』 +求索动物,http://111.22.153.159:35455/itv/2000000004000000009.m3u8?cdn=hnbblive$LR•IPV4•4『线路2』 +求索动物,http://home.wwang.pw:35455/itv/2000000004000000009.m3u8?cdn=hnbblive$LR•IPV4•4『线路3』 +求索动物,http://ygbh.site/php/bfgd.php?id=287$LR•IPV4•4『线路4』 +求索科学,http://[2409:8087:5e01:24::16]:6610/000000001000/2000000004000000011/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000011&IASHttpSessionId=OTT19019320240419154124000281$LR•IPV6•4『线路1』 +求索科学,http://111.22.153.159:35455/itv/2000000004000000011.m3u8?cdn=hnbblive$LR•IPV4•4『线路2』 +求索科学,http://home.wwang.pw:35455/itv/2000000004000000011.m3u8?cdn=hnbblive$LR•IPV4•4『线路3』 +求索科学,http://ygbh.site/php/bfgd.php?id=286$LR•IPV4•4『线路4』 +求索生活,http://[2409:8087:5e01:24::16]:6610/000000001000/2000000004000000008/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000008&IASHttpSessionId=OTT19019320240419154124000281$LR•IPV6•4『线路1』 +求索生活,http://111.22.153.159:35455/itv/2000000004000000008.m3u8?cdn=hnbblive$LR•IPV4•4『线路2』 +求索生活,http://home.wwang.pw:35455/itv/2000000004000000008.m3u8?cdn=hnbblive$LR•IPV4•4『线路3』 +求索生活,http://ygbh.site/php/bfgd.php?id=288$LR•IPV4•4『线路4』 +超级体育,http://yc.myds.me:35455/itv/1000000001000009601.m3u8?cdn=ystenlive$LR•IPV4•15『线路1』 +超级体育,http://36.105.100.208:35455/itv/1000000001000009601.m3u8?cdn=ystenlive$LR•IPV4•15『线路2』 +超级体育,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=3188&tk=23a9aca1f79f$LR•IPV4•15『线路3』 +超级体育,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226232/1.m3u8$LR•IPV6•15『线路4』 +超级体育,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225715/index.m3u8$LR•IPV6•15『线路5』 +超级体育,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225622/2/index.m3u8$LR•IPV6•15『线路6』 +超级体育,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010063/1.m3u8$LR•IPV6•15『线路7』 +超级体育,http://[2409:8087:74d9:21::6]:80/270000001128/9900000020/index.m3u8$LR•IPV6•15『线路8』 +超级体育,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225715/index.m3u8$LR•IPV4•15『线路9』 +超级体育,http://39.134.65.66/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225715/index.m3u8$LR•IPV4•15『线路10』 +超级体育,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226232/1.m3u8$LR•IPV6•15『线路11』 +超级体育,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/TVOD/88888888/224/3221225715/index.m3u8$LR•IPV6•15『线路12』 +超级体育,http://yc.myds.me:35455/itv/1000000001000009601.m3u8?cdn=ystenlive$LR•IPV4•15『线路13』 +超级体育,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225622/2/index.m3u8$LR•IPV6•15『线路14』 +超级体育,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010063/1.m3u8$LR•IPV6•15『线路15』 +超级电影,http://[2409:8087:74d9:21::6]:80/270000001128/9900000021/index.m3u8$LR•IPV6•3『线路1』 +超级电影,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225717/index.m3u8$LR•IPV4•3『线路2』 +超级电影,http://39.134.65.3/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225717/index.m3u8$LR•IPV4•3『线路3』 +超级电视剧,http://[2409:8087:74d9:21::6]:80/270000001128/9900000022/index.m3u8$LR•IPV6•3『线路1』 +超级电视剧,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225716/index.m3u8$LR•IPV4•3『线路2』 +超级电视剧,http://39.135.133.156/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225716/index.m3u8$LR•IPV4•3『线路3』 +东北热剧,http://[2409:8087:74d9:21::6]:80/270000001128/9900000092/index.m3u8$LR•IPV6•3『线路1』 +东北热剧,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225741/index.m3u8$LR•IPV4•3『线路2』 +东北热剧,http://39.134.65.74/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225741/index.m3u8$LR•IPV4•3『线路3』 +海外剧场,http://[2409:8087:74d9:21::6]:80/270000001128/9900000115/index.m3u8$LR•IPV6•2『线路1』 +海外剧场,https://epg.pw/stream/05e222355206698d11ab0e237cce2cc951137cf30d5d9fa0a5836144301a9938.m3u8$LR•IPV4•2『线路2』 +古装剧场,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225663/index.m3u8$LR•IPV4•2『线路1』 +古装剧场,http://39.134.65.73/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225663/index.m3u8$LR•IPV4•2『线路2』 +中国功夫,http://[2409:8087:74d9:21::6]:80/270000001128/9900000101/index.m3u8$LR•IPV6•3『线路1』 +中国功夫,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225681/index.m3u8$LR•IPV4•3『线路2』 +中国功夫,http://39.134.65.62/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225681/index.m3u8$LR•IPV4•3『线路3』 +军旅剧场,http://[2409:8087:74d9:21::6]:80/270000001128/9900000107/index.m3u8$LR•IPV6•4『线路1』 +军旅剧场,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225676/index.m3u8$LR•IPV4•4『线路2』 +军旅剧场,https://epg.pw/stream/039ce88ed853e0843ddd582b05a4b05caad6c6c97ed78f541e5ce97cbd943ba9.m3u8$LR•IPV4•4『线路3』 +军旅剧场,http://39.134.65.76/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225676/index.m3u8$LR•IPV4•4『线路4』 +动作电影,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010003$LR•IPV4•5『线路1』 +动作电影,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225661/index.m3u8$LR•IPV4•5『线路2』 +动作电影,https://epg.pw/stream/f224aa36d3d9bd7a3485f639162c3a0c330d7789880e8fca795d20ea9bbc58e4.m3u8$LR•IPV4•5『线路3』 +动作电影,http://39.135.133.167/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225661/index.m3u8$LR•IPV4•5『线路4』 +动作电影,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010003$LR•IPV4•5『线路5』 +惊悚悬疑,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010077$LR•IPV4•5『线路1』 +惊悚悬疑,http://[2409:8087:74d9:21::6]:80/270000001128/9900000113/index.m3u8$LR•IPV6•5『线路2』 +惊悚悬疑,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225665/index.m3u8$LR•IPV4•5『线路3』 +惊悚悬疑,http://39.134.65.89/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225665/index.m3u8$LR•IPV4•5『线路4』 +惊悚悬疑,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010077$LR•IPV4•5『线路5』 +潮妈辣婆,http://[2409:8087:74d9:21::6]:80/270000001128/9900000099/index.m3u8$LR•IPV6•3『线路1』 +潮妈辣婆,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225685/index.m3u8$LR•IPV4•3『线路2』 +潮妈辣婆,https://epg.pw/stream/b8b258c3f487a0ca6e3485c53298c0c86cba21b9603aecc6b36a1fec95e6db85.m3u8$LR•IPV4•3『线路3』 +精品体育,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=5739&tk=23a9aca1f79f$LR•IPV4•13『线路1』 +精品体育,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226328/1.m3u8$LR•IPV6•13『线路2』 +精品体育,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225709/2/index.m3u8$LR•IPV6•13『线路3』 +精品体育,http://[2409:8087:1a15:10d1::38]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225674/index.m3u8$LR•IPV6•13『线路4』 +精品体育,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010078/1.m3u8$LR•IPV6•13『线路5』 +精品体育,http://[2409:8087:74d9:21::6]:80/270000001128/9900000102/index.m3u8$LR•IPV6•13『线路6』 +精品体育,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225674/index.m3u8$LR•IPV4•13『线路7』 +精品体育,https://epg.pw/stream/f7556eccd4ae06b0c2991fdc7a4f8388496559f728cc82459a8e50346040e226.m3u8$LR•IPV4•13『线路8』 +精品体育,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226328/1.m3u8$LR•IPV6•13『线路9』 +精品体育,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225709/2/index.m3u8$LR•IPV6•13『线路10』 +精品体育,http://[2409:8087:1a15:10d1::38]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225674/index.m3u8$LR•IPV6•13『线路11』 +精品体育,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010078/1.m3u8$LR•IPV6•13『线路12』 +精品体育,https://epg.pw/stream/f7556eccd4ae06b0c2991fdc7a4f8388496559f728cc82459a8e50346040e226.m3u8$LR•IPV4•13『线路13』 +精品纪录,http://[2409:8087:74d9:21::6]:80/270000001128/9900000109/index.m3u8$LR•IPV6•3『线路1』 +精品纪录,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225672/index.m3u8$LR•IPV4•3『线路2』 +精品纪录,https://epg.pw/stream/dfb24b21e956eeba85df1d10904bcb4155427d5fd8aa208244a7f25acd180061.m3u8$LR•IPV4•3『线路3』 +家庭剧场,http://[2409:8087:74d9:21::6]:80/270000001128/9900000108/index.m3u8$LR•IPV6•3『线路1』 +家庭剧场,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225677/index.m3u8$LR•IPV4•3『线路2』 +家庭剧场,http://39.134.65.3/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225677/index.m3u8$LR•IPV4•3『线路3』 +精品大剧,http://[2409:8087:74d9:21::6]:80/270000001128/9900000100/index.m3u8$LR•IPV6•2『线路1』 +精品大剧,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225670/index.m3u8$LR•IPV4•2『线路2』 +军事评论,http://[2409:8087:74d9:21::6]:80/270000001128/9900000110/index.m3u8$LR•IPV6 +明星大片,http://[2409:8087:74d9:21::6]:80/270000001128/9900000116/index.m3u8$LR•IPV6 +欢乐剧场,http://[2409:8087:74d9:21::6]:80/270000001128/9900000091/index.m3u8$LR•IPV6•3『线路1』 +欢乐剧场,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225742/index.m3u8$LR•IPV4•3『线路2』 +欢乐剧场,http://39.135.135.28/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225742/index.m3u8$LR•IPV4•3『线路3』 +精品萌宠,http://[2409:8087:74d9:21::6]:80/270000001128/9900000122/index.m3u8$LR•IPV6 +超级综艺,http://[2409:8087:74d9:21::6]:80/270000001128/9900000019/index.m3u8$LR•IPV6•3『线路1』 +超级综艺,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225714/index.m3u8$LR•IPV4•3『线路2』 +超级综艺,http://39.134.65.4/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225714/index.m3u8$LR•IPV4•3『线路3』 +金牌综艺,http://[2409:8087:74d9:21::6]:80/270000001128/9900000112/index.m3u8$LR•IPV6•3『线路1』 +金牌综艺,http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225666/index.m3u8$LR•IPV4•3『线路2』 +金牌综艺,http://39.135.135.24/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225666/index.m3u8$LR•IPV4•3『线路3』 +爱动漫,http://php.jdshipin.com:8880/itv6s.php?cid=wasusyt&id=6000000006000280630$LR•IPV4•9『线路1』 +爱动漫,http://[2409:8087:5e08:24::17]:6610/000000001000/2000000004000000059/index.m3u8$LR•IPV6•9『线路2』 +爱动漫,http://[2409:8087:5e08:24::11]:6610/000000001000/2000000004000000059/index.m3u8$LR•IPV6•9『线路3』 +爱动漫,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000000/index.m3u8$LR•IPV6•9『线路4』 +爱动漫,http://home.wwang.pw:35455/itv/2000000004000000059.m3u8?cdn=hnbblive$LR•IPV4•9『线路5』 +爱动漫,http://php.jdshipin.com:8880/itv6s.php?cid=wasusyt&id=6000000006000280630$LR•IPV4•9『线路6』 +爱动漫,http://[2409:8087:5e08:24::17]:6610/000000001000/2000000004000000059/index.m3u8$LR•IPV6•9『线路7』 +爱动漫,http://[2409:8087:5e08:24::11]:6610/000000001000/2000000004000000059/index.m3u8$LR•IPV6•9『线路8』 +爱动漫,http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000000/index.m3u8$LR•IPV6•9『线路9』 + +上海频道,#genre# +上海新闻,http://8.138.7.223/tv/shtv.php?id=xwzh$LR•IPV4•2『线路1』 +上海新闻,http://61.173.144.157:9901/tsfile/live/1000_1.m3u8$LR•IPV4•2『线路2』 +上海都市,http://yc.myds.me:35455/itv/5000000010000018926.m3u8?cdn=bestzb$LR•IPV4•10『线路1』 +上海都市,https://live.lalifeier.eu.org/kankanews/shds.m3u8?t=1746292937&key=3725d08baa89daf1e05599a00bdac978$LR•IPV4•10『线路2』 +上海都市,https://migu.188766.xyz/?migutoken=2f874035df0c1212db90a024f4670dce&id=ds&type=sz$LR•IPV4•10『线路3』 +上海都市,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=6990&tk=23a9aca1f79f$LR•IPV4•10『线路4』 +上海都市,https://zby.130519.xyz/PLTV/11/224/3221225749/index.m3u8$LR•IPV4•10『线路5』 +上海都市,http://8.138.7.223/tv/shtv.php?id=ds$LR•IPV4•10『线路6』 +上海都市,http://yc.myds.me:35455/itv/5000000010000018926.m3u8?cdn=bestzb$LR•IPV4•10『线路7』 +上海都市,https://live.lalifeier.eu.org/kankanews/shds.m3u8?t=1746292937&key=3725d08baa89daf1e05599a00bdac978$LR•IPV4•10『线路8』 +上海都市,https://migu.188766.xyz/?migutoken=2f874035df0c1212db90a024f4670dce&id=ds&type=sz$LR•IPV4•10『线路9』 +上海都市,http://61.173.144.157:9901/tsfile/live/1001_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•10『线路10』 +上海外语,http://z.b.bkpcp.top/m.php?id=shics$LR•IPV4•12『线路1』 +上海外语,https://live.lalifeier.eu.org/kankanews/shics.m3u8?t=1746307365&key=5923d8473fb7e7c254f421fd5c26ed51$LR•IPV4•12『线路2』 +上海外语,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=2446&tk=e640d0a1bf70$LR•IPV4•12『线路3』 +上海外语,http://139.196.151.191:2051/rtp/239.45.1.127:5140$LR•IPV4•12『线路4』 +上海外语,http://[2409:8087:5e00:24::029]:6610/000000001000/2000000002000000001/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000001&IASHttpSessionId=OTT19019320240419154124000281$LR•IPV6•12『线路5』 +上海外语,http://mg.hmysapp.cn:177/ckmg/zb.php?id=shics$LR•IPV4•12『线路6』 +上海外语,http://t.061899.xyz/tl/dq.php?id=shics$LR•IPV4•12『线路7』 +上海外语,http://111.22.153.159:35455/itv/2000000002000000001.m3u8?cdn=hnbblive$LR•IPV4•12『线路8』 +上海外语,http://z.b.bkpcp.top/m.php?id=shics$LR•IPV4•12『线路9』 +上海外语,http://[2409:8087:5e00:24::029]:6610/000000001000/2000000002000000001/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000001&IASHttpSessionId=OTT19019320240419154124000281$LR•IPV6•12『线路10』 +上海外语,https://live.lalifeier.eu.org/kankanews/shics.m3u8?t=1746307365&key=5923d8473fb7e7c254f421fd5c26ed51$LR•IPV4•12『线路11』 +上海外语,http://[2409:8087:5e00:24::029]:6610/000000001000/2000000002000000001/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000001&IASHttpSessionId=OTT19019320240419154124000281$LR•IPV6•12『线路12』 +七彩戏剧,http://111.22.153.159:35455/itv/5000000011000031116.m3u8?cdn=bestzb$LR•IPV4•11『线路1』 +七彩戏剧,http://home.wwang.pw:35455/itv/5000000011000031116.m3u8?cdn=bestzb$LR•IPV4•11『线路2』 +七彩戏剧,http://php.jdshipin.com/itv6s.php?cid=bestzb&id=5000000011000031116$LR•IPV4•11『线路3』 +七彩戏剧,http://z.b.bkpcp.top/m.php?id=qcxj$LR•IPV4•11『线路4』 +七彩戏剧,http://36.105.100.208:35455/itv/5000000011000031116.m3u8?cdn=bestzb$LR•IPV4•11『线路5』 +七彩戏剧,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=3074&tk=b53028476470$LR•IPV4•11『线路6』 +七彩戏剧,http://139.196.151.191:2051/rtp/239.45.3.61:5140$LR•IPV4•11『线路7』 +七彩戏剧,http://mg.hmysapp.cn:177/ckmg/zb.php?id=qcxj$LR•IPV4•11『线路8』 +七彩戏剧,http://t.061899.xyz/tl/dq.php?id=qcxj$LR•IPV4•11『线路9』 +七彩戏剧,http://php.jdshipin.com/itv6s.php?cid=bestzb&id=5000000011000031116$LR•IPV4•11『线路10』 +七彩戏剧,http://z.b.bkpcp.top/m.php?id=qcxj$LR•IPV4•11『线路11』 +五星体育,https://epg.pw/stream/031acdbb137226f0c022242be1f31a039d40acf487f2c4b6fa6b40d6eb55f3f4.m3u8$LR•IPV4•29『线路1』 +五星体育,https://epg.pw/stream/245d1072476eeab5f81d1de6ad86becda334c7305fcc8ecd462b3a05cca4e7a3.m3u8$LR•IPV4•29『线路2』 +五星体育,https://epg.pw/stream/8bcb65dddb82fc01cc617f6c5e2aa3f7d98fba152b5423fe17b4caa9bbed79b2.m3u8$LR•IPV4•29『线路3』 +五星体育,https://epg.pw/stream/3cc797641112e5b2e7700c9a2264e3ede2a5a87391c5ded3e50d903458d2708f.m3u8$LR•IPV4•29『线路4』 +五星体育,http://cf.21534450.xyz:9988/rtp/239.45.3.210:5140$LR•IPV4•29『线路5』 +五星体育,http://zjbuv52.live.bestvcdn.com.cn/D_bestvfreekey-showto_D/live/program/live/wxtyhd8m/8000000/mnf.m3u8$LR•IPV4•29『线路6』 +五星体育,http://8.138.7.223/tv/shtv.php?id=wxty$LR•IPV4•29『线路7』 +五星体育,http://home.wwang.pw:35455/itv/5000000010000017540.m3u8?cdn=bestzb$LR•IPV4•29『线路8』 +五星体育,https://other.ottiptv.cc/wxty.m3u8$LR•IPV4•29『线路9』 +五星体育,https://stream1.freetv.fun/ipv6-wu-xing-ti-yu-10.m3u8$LR•IPV4•29『线路10』 +五星体育,https://live.v1.mk/api/bestv.php?id=wxtyhd8m/8000000$LR•IPV4•29『线路11』 +五星体育,https://hls-gateway.vpstv.net/streams/636980.m3u8$LR•IPV4•29『线路12』 +五星体育,https://migu.188766.xyz/?migutoken=71ffa78ec0f711ac9ea667fb3b8b2c9c&id=%E4%BA%94%E6%98%9F%E4%BD%93%E8%82%B2&pp=1$LR•IPV4•29『线路13』 +五星体育,http://36.105.100.208:35455/itv/5000000010000017540.m3u8?cdn=bestzb$LR•IPV4•29『线路14』 +五星体育,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=4759&tk=7d4ad8f156e3$LR•IPV4•29『线路15』 +五星体育,http://139.196.151.191:2051/rtp/239.45.3.210:5140$LR•IPV4•29『线路16』 +五星体育,http://[2409:8087:1e03:21::42]:6610/cms001/ch00000090990000001018/index.m3u8$LR•IPV6•29『线路17』 +五星体育,https://zby.130519.xyz/PLTV/11/224/3221225732/index.m3u8$LR•IPV4•29『线路18』 +五星体育,http://101.35.240.114:88/live.php?id=五星体育$LR•IPV4•29『线路19』 +五星体育,http://8.138.7.223/tv/shtv.php?id=wxty$LR•IPV4•29『线路20』 +五星体育,http://148.135.93.213:81/live.php?id=五星体育$LR•IPV4•29『线路21』 +五星体育,http://[2409:8087:1e03:21::42]:6610/cms001/ch00000090990000001018/index.m3u8$LR•IPV6•29『线路22』 +五星体育,https://stream1.freetv.fun/ipv6-wu-xing-ti-yu-10.m3u8$LR•IPV4•29『线路23』 +五星体育,https://live.v1.mk/api/bestv.php?id=wxtyhd8m/8000000$LR•IPV4•29『线路24』 +五星体育,https://hls-gateway.vpstv.net/streams/636980.m3u8$LR•IPV4•29『线路25』 +五星体育,https://migu.188766.xyz/?migutoken=71ffa78ec0f711ac9ea667fb3b8b2c9c&id=%E4%BA%94%E6%98%9F%E4%BD%93%E8%82%B2&pp=1$LR•IPV4•29『线路26』 +五星体育,https://other.ottiptv.cc/wxty.m3u8$LR•IPV4•29『线路27』 +五星体育,https://other.ottiptv.cc/wxty.m3u8$LR•IPV4•29『线路28』 +五星体育,https://other.ottiptv.cc/wxty.m3u8$LR•IPV4•29『线路29』 +东方影视,http://php.jdshipin.com:8880/itv6.php?cid=bestzb&id=5000000010000032212$LR•IPV4•19『线路1』 +东方影视,http://z.b.bkpcp.top/m.php?id=shys$LR•IPV4•19『线路2』 +东方影视,http://gat.bkpcp.top/ymg.php?id=shys$LR•IPV4•19『线路3』 +东方影视,https://www.freetv.top/migu/617290047.m3u8?migutoken=86c02ad0875d5cc49d77bcc8bdb628f2c9d508ffc323b964a03c8f92dde4afafa0345cf5a8fefbdf915c748e3d11c6c18e27ae1e21a609cec31a45e6c437db26a7a243625f9cf35c271171a22c$LR•IPV4•19『线路4』 +东方影视,https://stream1.freetv.fun/ipv6-dong-fang-ying-shi-8.m3u8$LR•IPV4•19『线路5』 +东方影视,https://migu.188766.xyz/?migutoken=6c5b70858d0091ce20ea7fe815cabafe&id=%E4%B8%8A%E8%A7%86%E4%B8%9C%E6%96%B9%E5%BD%B1%E8%A7%86&type=yy$LR•IPV4•19『线路6』 +东方影视,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=1285&tk=2aca1ad9a849$LR•IPV4•19『线路7』 +东方影视,http://139.196.151.191:2051/rtp/239.45.3.237:5140$LR•IPV4•19『线路8』 +东方影视,http://mg.hmysapp.cn:177/ckmg/zb.php?id=dfys$LR•IPV4•19『线路9』 +东方影视,http://t.061899.xyz/tl/dq.php?id=dfys$LR•IPV4•19『线路10』 +东方影视,https://zby.130519.xyz/PLTV/11/224/3221225744/index.m3u8$LR•IPV4•19『线路11』 +东方影视,http://111.22.153.159:35455/itv/5000000010000032212.m3u8?cdn=bestzb$LR•IPV4•19『线路12』 +东方影视,http://php.jdshipin.com:8880/itv6.php?cid=bestzb&id=5000000010000032212$LR•IPV4•19『线路13』 +东方影视,http://z.b.bkpcp.top/m.php?id=shys$LR•IPV4•19『线路14』 +东方影视,http://gat.bkpcp.top/ymg.php?id=shys$LR•IPV4•19『线路15』 +东方影视,https://www.freetv.top/migu/617290047.m3u8?migutoken=86c02ad0875d5cc49d77bcc8bdb628f2c9d508ffc323b964a03c8f92dde4afafa0345cf5a8fefbdf915c748e3d11c6c18e27ae1e21a609cec31a45e6c437db26a7a243625f9cf35c271171a22c$LR•IPV4•19『线路16』 +东方影视,https://stream1.freetv.fun/ipv6-dong-fang-ying-shi-8.m3u8$LR•IPV4•19『线路17』 +东方影视,https://migu.188766.xyz/?migutoken=6c5b70858d0091ce20ea7fe815cabafe&id=%E4%B8%8A%E8%A7%86%E4%B8%9C%E6%96%B9%E5%BD%B1%E8%A7%86&type=yy$LR•IPV4•19『线路18』 +东方影视,http://61.173.144.157:9901/tsfile/live/1013_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4•19『线路19』 +东方财经,https://epg.pw/stream/3c894080faf1f4692884e744dd558fd0cdcdaac96ced06509693bc8cf5968a1d.m3u8$LR•IPV4•10『线路1』 +东方财经,http://yc.myds.me:35455/itv/5000000007000010003.m3u8?cdn=bestzb$LR•IPV4•10『线路2』 +东方财经,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=4946&tk=97475bb89d45$LR•IPV4•10『线路3』 +东方财经,http://139.196.151.191:2051/rtp/239.45.1.119:5140$LR•IPV4•10『线路4』 +东方财经,http://[2409:8087:5e00:24::2d]:6610/000000001000/1/5000000007000010003/index.m3u8?channel-id=bestzb&Contentid=5000000007000010003&livemode=1&stbId=3$LR•IPV6•10『线路5』 +东方财经,https://zby.130519.xyz/PLTV/11/224/3221226134/index.m3u8$LR•IPV4•10『线路6』 +东方财经,http://111.22.153.159:35455/itv/5000000007000010003.m3u8?cdn=bestzb$LR•IPV4•10『线路7』 +东方财经,http://[2409:8087:5e00:24::2d]:6610/000000001000/1/5000000007000010003/index.m3u8?channel-id=bestzb&Contentid=5000000007000010003&livemode=1&stbId=3$LR•IPV6•10『线路8』 +东方财经,http://yc.myds.me:35455/itv/5000000007000010003.m3u8?cdn=bestzb$LR•IPV4•10『线路9』 +东方财经,http://[2409:8087:5e00:24::2d]:6610/000000001000/1/5000000007000010003/index.m3u8?channel-id=bestzb&Contentid=5000000007000010003&livemode=1&stbId=3$LR•IPV6•10『线路10』 +法治天地,http://sh.lnott.top:880/dx108.m3u8$LR•IPV4•27『线路1』 +法治天地,http://111.22.153.159:35455/itv/2000000002000000014.m3u8?cdn=hnbblive$LR•IPV4•27『线路2』 +法治天地,http://home.wwang.pw:35455/itv/2000000002000000014.m3u8?cdn=hnbblive$LR•IPV4•27『线路3』 +法治天地,https://cc06.tv12.xyz/42.m3u8$LR•IPV4•27『线路4』 +法治天地,http://223.167.245.215:8001/rtp/239.45.1.46:5140$LR•IPV4•27『线路5』 +法治天地,http://php.jdshipin.com/itv6.php?cid=bestzb&id=9001547084732463424$LR•IPV4•27『线路6』 +法治天地,http://z.b.bkpcp.top/m.php?id=fztd$LR•IPV4•27『线路7』 +法治天地,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226655/index.m3u8$LR•IPV4•27『线路8』 +法治天地,http://36.105.100.208:35455/itv/2000000002000000014.m3u8?cdn=hnbblive$LR•IPV4•27『线路9』 +法治天地,http://139.196.151.191/rtp/239.45.1.46:5140$LR•IPV4•27『线路10』 +法治天地,http://[2409:8087:1e01:20::3]:80/PLTV/11/224/3221225994/index.m3u8$LR•IPV6•27『线路11』 +法治天地,http://[2409:8087:5e01:24::16]:6610/000000001000/2000000002000000014/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000014&IASHttpSessionId=OTT19019320240419154124000281$LR•IPV6•27『线路12』 +法治天地,http://[2409:8087:5e08:25::4]:6610/000000001000/9001547084732463424/index.m3u8?channel-id=bestzb&Contentid=9001547084732463424&Ace$LR•IPV6•27『线路13』 +法治天地,http://[2409:8087:1e01:20::3]/PLTV/11/224/3221225994/index.m3u8$LR•IPV6•27『线路14』 +法治天地,http://mg.hmysapp.cn:177/ckmg/zb.php?id=fztd$LR•IPV4•27『线路15』 +法治天地,http://t.061899.xyz/tl/dq.php?id=fztd$LR•IPV4•27『线路16』 +法治天地,https://zby.130519.xyz/PLTV/11/224/3221225994/index.m3u8$LR•IPV4•27『线路17』 +法治天地,http://223.167.245.215:8001/rtp/239.45.1.46:5140$LR•IPV4•27『线路18』 +法治天地,http://php.jdshipin.com/itv6.php?cid=bestzb&id=9001547084732463424$LR•IPV4•27『线路19』 +法治天地,http://z.b.bkpcp.top/m.php?id=fztd$LR•IPV4•27『线路20』 +法治天地,http://iptv.cdn.ha.chinamobile.com/PLTV/88888888/224/3221226655/index.m3u8$LR•IPV4•27『线路21』 +法治天地,https://cc06.tv12.xyz/42.m3u8$LR•IPV4•27『线路22』 +法治天地,http://[2409:8087:5e01:24::16]:6610/000000001000/2000000002000000014/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000014&IASHttpSessionId=OTT19019320240419154124000281$LR•IPV6•27『线路23』 +法治天地,http://[2409:8087:5e08:25::4]:6610/000000001000/9001547084732463424/index.m3u8?channel-id=bestzb&Contentid=9001547084732463424&Ace$LR•IPV6•27『线路24』 +法治天地,http://[2409:8087:1e01:20::3]/PLTV/11/224/3221225994/index.m3u8$LR•IPV6•27『线路25』 +法治天地,https://cc06.tv12.xyz/42.m3u8$LR•IPV4•27『线路26』 +法治天地,http://[2409:8087:1e01:20::3]:80/PLTV/11/224/3221225994/index.m3u8$LR•IPV6•27『线路27』 +第一财经,https://epg.pw/stream/34bf6946fa5dc33632ff8bbd45ea1356adb3fb17ddd977b85c7cdf6073a0196a.m3u8$LR•IPV4•27『线路1』 +第一财经,https://epg.pw/stream/382ae49346c9d58fbd548b9b0013664d5c6d4bc6da1cb6cecf4eef5e535bc206.m3u8$LR•IPV4•27『线路2』 +第一财经,https://epg.pw/stream/8f5f5b037e4f5be88499735028bbba80eb375ef3d92a994a328a821bf66a33ff.m3u8$LR•IPV4•27『线路3』 +第一财经,http://8.138.7.223/tv/shtv.php?id=dycj$LR•IPV4•27『线路4』 +第一财经,http://home.wwang.pw:35455/itv/5000000010000027146.m3u8?cdn=bestzb$LR•IPV4•27『线路5』 +第一财经,http://satellitepull.cnr.cn/live/wx32dycjgb/playlist.m3u8$LR•IPV4•27『线路6』 +第一财经,http://a1live.livecdn.yicai.com/live/radio_tv.m3u8$LR•IPV4•27『线路7』 +第一财经,http://ls.qingting.fm/live/276.m3u8$LR•IPV4•27『线路8』 +第一财经,http://yc.myds.me:35455/itv/5000000010000027146.m3u8?cdn=bestzb$LR•IPV4•27『线路9』 +第一财经,https://live.lalifeier.eu.org/kankanews/dycj.m3u8?t=1746393735&key=7b164ddded8a7d9ea3ba4a8d86999077$LR•IPV4•27『线路10』 +第一财经,https://www.freetv.top/migu/608780988.m3u8?migutoken=62e21890acbd9928d0be0b4eae9f5e32e1879604b785ee7ce8751d5001a9ff431d7714025aa03d48a2b190ff214e5115dcb6ba455c3d26b1db0f5b3cb49c5967429ff3b1fe8e96e87cc6146543$LR•IPV4•27『线路11』 +第一财经,http://36.105.100.208:35455/itv/5000000010000027146.m3u8?cdn=bestzb$LR•IPV4•27『线路12』 +第一财经,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=4810&tk=23a9aca1f79f$LR•IPV4•27『线路13』 +第一财经,http://139.196.151.191:2051/rtp/239.45.3.211:5140$LR•IPV4•27『线路14』 +第一财经,http://120.55.49.231:3095/rtp/233.50.200.125:5140$LR•IPV4•27『线路15』 +第一财经,http://[2409:8087:5e00:24::2d]:6610/000000001000/1/5000000010000027146/index.m3u8?channel-id=bestzb&Contentid=5000000010000027146&livemode=1&stbId=3$LR•IPV6•27『线路16』 +第一财经,https://zby.130519.xyz/PLTV/11/224/3221225737/index.m3u8$LR•IPV4•27『线路17』 +第一财经,http://8.138.7.223/tv/shtv.php?id=dycj$LR•IPV4•27『线路18』 +第一财经,http://satellitepull.cnr.cn/live/wx32dycjgb/playlist.m3u8$LR•IPV4•27『线路19』 +第一财经,http://a1live.livecdn.yicai.com/live/radio_tv.m3u8$LR•IPV4•27『线路20』 +第一财经,http://[2409:8087:5e00:24::2d]:6610/000000001000/1/5000000010000027146/index.m3u8?channel-id=bestzb&Contentid=5000000010000027146&livemode=1&stbId=3$LR•IPV6•27『线路21』 +第一财经,http://ls.qingting.fm/live/276.m3u8$LR•IPV4•27『线路22』 +第一财经,http://yc.myds.me:35455/itv/5000000010000027146.m3u8?cdn=bestzb$LR•IPV4•27『线路23』 +第一财经,https://live.lalifeier.eu.org/kankanews/dycj.m3u8?t=1746393735&key=7b164ddded8a7d9ea3ba4a8d86999077$LR•IPV4•27『线路24』 +第一财经,https://www.freetv.top/migu/608780988.m3u8?migutoken=62e21890acbd9928d0be0b4eae9f5e32e1879604b785ee7ce8751d5001a9ff431d7714025aa03d48a2b190ff214e5115dcb6ba455c3d26b1db0f5b3cb49c5967429ff3b1fe8e96e87cc6146543$LR•IPV4•27『线路25』 +第一财经,http://[2409:8087:5e00:24::2d]:6610/000000001000/1/5000000010000027146/index.m3u8?channel-id=bestzb&Contentid=5000000010000027146&livemode=1&stbId=3$LR•IPV6•27『线路26』 +第一财经,http://satellitepull.cnr.cn/live/wx32dycjgb/playlist.m3u8$LR•IPV4•27『线路27』 + +浙江频道,#genre# +浙江新闻,http://101.66.198.42:9901/tsfile/live/1005_1.m3u8?key=txiptv&playlive=0&authid=0$LR•IPV4•15『线路1』 +浙江新闻,http://ali-vl.cztv.com/channels/lantian/channel007/360p.m3u8$LR•IPV4•15『线路2』 +浙江新闻,http://ali-m-l.cztv.com/channels/lantian/channel07/720p.m3u8$LR•IPV4•15『线路3』 +浙江新闻,https://ali-m-l.cztv.com/channels/lantian/channel07/720p.m3u8$LR•IPV4•15『线路4』 +浙江新闻,http://zwebl02.cztv.com/live/channel071080P.m3u8?auth_key=2524708799-0-0-e3b50ca59d2c0883d5386d8bc4cdefbc$LR•IPV4•15『线路5』 +浙江新闻,http://zhfivel02.cztv.com/channel07/1080p.m3u8?auth_key=2524708799-0-0-4af48ba83e791a300595dd0b2bb30e6e$LR•IPV4•15『线路6』 +浙江新闻,https://ali-m-l.cztv.com/channels/lantian/channel007/1080p.m3u8?$LR•IPV4•15『线路7』 +浙江新闻,http://ali-m-l.cztv.com/channels/lantian/channel007/1080p.m3u8$LR•IPV4•15『线路8』 +浙江新闻,http://120.55.49.231:3095/rtp/233.50.201.137:5140$LR•IPV4•15『线路9』 +浙江新闻,http://ali-m-l.cztv.com/channels/lantian/channel007/1080p.m3u8$LR•IPV4•15『线路10』 +浙江新闻,http://zwebl02.cztv.com/live/channel071080P.m3u8?auth_key=2524708799-0-0-e3b50ca59d2c0883d5386d8bc4cdefbc$LR•IPV4•15『线路11』 +浙江新闻,http://zhfivel02.cztv.com/channel07/1080p.m3u8?auth_key=2524708799-0-0-4af48ba83e791a300595dd0b2bb30e6e$LR•IPV4•15『线路12』 +浙江新闻,http://ali-vl.cztv.com/channels/lantian/channel007/360p.m3u8$LR•IPV4•15『线路13』 +浙江新闻,http://ali-m-l.cztv.com/channels/lantian/channel07/720p.m3u8$LR•IPV4•15『线路14』 +浙江新闻,https://ali-m-l.cztv.com/channels/lantian/channel07/720p.m3u8$LR•IPV4•15『线路15』 +浙江国际,https://ali-m-l.cztv.com/channels/lantian/channel010/1080p.m3u8$LR•IPV4•23『线路1』 +浙江国际,https://ali-m-l.cztv.com/channels/lantian/channel010/1080p.m3u8$LR•IPV4•23『线路2』 +浙江国际,http://ali-vl.cztv.com/channels/lantian/channel010/360p.m3u8$LR•IPV4•23『线路3』 +浙江国际,http://ali-m-l.cztv.com/channels/lantian/channel010/720p.m3u8$LR•IPV4•23『线路4』 +浙江国际,http://zwebl02.cztv.com/live/channel101080P.m3u8?auth_key=2524708799-0-0-c9473fea1da3eff0f29f4c9cf2b36519$LR•IPV4•23『线路5』 +浙江国际,http://zhfivel02.cztv.com/channel10/1080p.m3u8?auth_key=2524708799-0-0-646cad31c1d94b002a325cd75475d30f$LR•IPV4•23『线路6』 +浙江国际,https://ct-m-l.cztv.com/channels/lantian/channel010/1080p.m3u8$LR•IPV4•23『线路7』 +浙江国际,https://qiniup-m-l.cztv.com/channels/lantian/channel010/1080p.m3u8$LR•IPV4•23『线路8』 +浙江国际,https://stream1.freetv.fun/zhe-jiang-guo-ji-3.ctv$LR•IPV4•23『线路9』 +浙江国际,https://ali-m-l.cztv.com/channels/lantian/channel010/1080p.m3u8?$LR•IPV4•23『线路10』 +浙江国际,http://ali-m-l.cztv.com/channels/lantian/channel010/1080p.m3u8$LR•IPV4•23『线路11』 +浙江国际,http://ali-m-l.cztv.com/channels/lantian/channel010/1080p.m3u8$LR•IPV4•23『线路12』 +浙江国际,https://ali-m-l.cztv.com/channels/lantian/channel010/1080p.m3u8$LR•IPV4•23『线路13』 +浙江国际,http://zwebl02.cztv.com/live/channel101080P.m3u8?auth_key=2524708799-0-0-c9473fea1da3eff0f29f4c9cf2b36519$LR•IPV4•23『线路14』 +浙江国际,http://zhfivel02.cztv.com/channel10/1080p.m3u8?auth_key=2524708799-0-0-646cad31c1d94b002a325cd75475d30f$LR•IPV4•23『线路15』 +浙江国际,https://ct-m-l.cztv.com/channels/lantian/channel010/1080p.m3u8$LR•IPV4•23『线路16』 +浙江国际,https://qiniup-m-l.cztv.com/channels/lantian/channel010/1080p.m3u8$LR•IPV4•23『线路17』 +浙江国际,https://ali-m-l.cztv.com/channels/lantian/channel010/1080p.m3u8$LR•IPV4•23『线路18』 +浙江国际,https://stream1.freetv.fun/zhe-jiang-guo-ji-3.ctv$LR•IPV4•23『线路19』 +浙江国际,http://ali-vl.cztv.com/channels/lantian/channel010/360p.m3u8$LR•IPV4•23『线路20』 +浙江国际,http://ali-m-l.cztv.com/channels/lantian/channel010/720p.m3u8$LR•IPV4•23『线路21』 +浙江国际,https://ali-m-l.cztv.com/channels/lantian/channel010/1080p.m3u8$LR•IPV4•23『线路22』 +浙江国际,https://ali-m-l.cztv.com/channels/lantian/channel010/1080p.m3u8$LR•IPV4•23『线路23』 +浙江少儿,https://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8$LR•IPV4•27『线路1』 +浙江少儿,https://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8$LR•IPV4•27『线路2』 +浙江少儿,http://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8$LR•IPV4•27『线路3』 +浙江少儿,http://ali-vl.cztv.com/channels/lantian/channel008/360p.m3u8$LR•IPV4•27『线路4』 +浙江少儿,https://qiniup-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8$LR•IPV4•27『线路5』 +浙江少儿,https://ct-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8$LR•IPV4•27『线路6』 +浙江少儿,https://stream1.freetv.fun/zhe-jiang-shao-er-4.ctv$LR•IPV4•27『线路7』 +浙江少儿,https://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8?$LR•IPV4•27『线路8』 +浙江少儿,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=6980&tk=e640d0a1bf70$LR•IPV4•27『线路9』 +浙江少儿,http://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8$LR•IPV4•27『线路10』 +浙江少儿,https://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8$LR•IPV4•27『线路11』 +浙江少儿,https://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8$LR•IPV4•27『线路12』 +浙江少儿,https://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8$LR•IPV4•27『线路13』 +浙江少儿,https://qiniup-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8$LR•IPV4•27『线路14』 +浙江少儿,https://ct-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8$LR•IPV4•27『线路15』 +浙江少儿,https://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8$LR•IPV4•27『线路16』 +浙江少儿,http://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8$LR•IPV4•27『线路17』 +浙江少儿,http://ali-vl.cztv.com/channels/lantian/channel008/360p.m3u8$LR•IPV4•27『线路18』 +浙江少儿,https://stream1.freetv.fun/zhe-jiang-shao-er-4.ctv$LR•IPV4•27『线路19』 +浙江少儿,https://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8$LR•IPV4•27『线路20』 +浙江少儿,https://qiniup-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8$LR•IPV4•27『线路21』 +浙江少儿,https://ct-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8$LR•IPV4•27『线路22』 +浙江少儿,https://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8$LR•IPV4•27『线路23』 +浙江少儿,http://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8$LR•IPV4•27『线路24』 +浙江少儿,http://ali-vl.cztv.com/channels/lantian/channel008/360p.m3u8$LR•IPV4•27『线路25』 +浙江少儿,https://stream1.freetv.fun/zhe-jiang-shao-er-4.ctv$LR•IPV4•27『线路26』 +浙江少儿,https://ali-m-l.cztv.com/channels/lantian/channel008/1080p.m3u8$LR•IPV4•27『线路27』 +浙江教科,https://ali-m-l.cztv.com/channels/lantian/channel004/1080p.m3u8$LR•IPV4•10『线路1』 +浙江教科,http://ali-m-l.cztv.com/channels/lantian/channel004/1080p.m3u8$LR•IPV4•10『线路2』 +浙江教科,https://ali-m-l.cztv.com/channels/lantian/channel004/1080p.m3u8$LR•IPV4•10『线路3』 +浙江教科,http://zwebl02.cztv.com/live/channel041080P.m3u8?auth_key=2524708799-0-0-f195b808217db133bfd648edc01e91fa$LR•IPV4•10『线路4』 +浙江教科,https://ali-m-l.cztv.com/channels/lantian/channel004/1080p.m3u8$LR•IPV4•10『线路5』 +浙江教科,http://ali-m-l.cztv.com/channels/lantian/channel004/1080p.m3u8$LR•IPV4•10『线路6』 +浙江教科,https://ali-m-l.cztv.com/channels/lantian/channel004/1080p.m3u8$LR•IPV4•10『线路7』 +浙江教科,http://zwebl02.cztv.com/live/channel041080P.m3u8?auth_key=2524708799-0-0-f195b808217db133bfd648edc01e91fa$LR•IPV4•10『线路8』 +浙江教科,https://ali-m-l.cztv.com/channels/lantian/channel004/1080p.m3u8$LR•IPV4•10『线路9』 +浙江教科,http://ali-m-l.cztv.com/channels/lantian/channel004/1080p.m3u8$LR•IPV4•10『线路10』 +之江纪录,https://ali-m-l.cztv.com/channels/lantian/channel012/1080p.m3u8$LR•IPV4•15『线路1』 +之江纪录,https://ali-m-l.cztv.com/channels/lantian/channel012/1080p.m3u8$LR•IPV4•15『线路2』 +之江纪录,http://ali-m-l.cztv.com/channels/lantian/channel12/1080p.m3u8$LR•IPV4•15『线路3』 +之江纪录,https://ali-m-l.cztv.com/channels/lantian/channel12/720p.m3u8$LR•IPV4•15『线路4』 +之江纪录,http://zwebl02.cztv.com/live/channel121080P.m3u8?auth_key=2524708799-0-0-c33efdd495bcdd2ddc42e7c408405037$LR•IPV4•15『线路5』 +之江纪录,http://goo.bkpcp.top/mg/zjjl$LR•IPV4•15『线路6』 +之江纪录,http://ali-m-l.cztv.com/channels/lantian/channel012/1080p.m3u8$LR•IPV4•15『线路7』 +之江纪录,http://120.55.49.231:3095/rtp/233.50.202.25:5140$LR•IPV4•15『线路8』 +之江纪录,https://ali-m-l.cztv.com/channels/lantian/channel012/1080p.m3u8$LR•IPV4•15『线路9』 +之江纪录,http://zwebl02.cztv.com/live/channel121080P.m3u8?auth_key=2524708799-0-0-c33efdd495bcdd2ddc42e7c408405037$LR•IPV4•15『线路10』 +之江纪录,http://ali-m-l.cztv.com/channels/lantian/channel12/1080p.m3u8$LR•IPV4•15『线路11』 +之江纪录,http://goo.bkpcp.top/mg/zjjl$LR•IPV4•15『线路12』 +之江纪录,https://ali-m-l.cztv.com/channels/lantian/channel12/720p.m3u8$LR•IPV4•15『线路13』 +之江纪录,https://ali-m-l.cztv.com/channels/lantian/channel012/1080p.m3u8$LR•IPV4•15『线路14』 +之江纪录,https://ali-m-l.cztv.com/channels/lantian/channel012/1080p.m3u8$LR•IPV4•15『线路15』 +浙江民生,https://ali-m-l.cztv.com/channels/lantian/channel006/1080p.m3u8$LR•IPV4•10『线路1』 +浙江民生,http://ali-m-l.cztv.com/channels/lantian/channel006/1080p.m3u8$LR•IPV4•10『线路2』 +浙江民生,https://ali-m-l.cztv.com/channels/lantian/channel006/1080p.m3u8$LR•IPV4•10『线路3』 +浙江民生,https://stream1.freetv.fun/zhe-jiang-min-sheng-9.m3u8$LR•IPV4•10『线路4』 +浙江民生,http://ali-m-l.cztv.com/channels/lantian/channel06/1080p.m3u8$LR•IPV4•10『线路5』 +浙江民生,https://ali-m-l.cztv.com/channels/lantian/channel006/1080p.m3u8$LR•IPV4•10『线路6』 +浙江民生,https://ali-m-l.cztv.com/channels/lantian/channel006/1080p.m3u8$LR•IPV4•10『线路7』 +浙江民生,https://stream1.freetv.fun/zhe-jiang-min-sheng-9.m3u8$LR•IPV4•10『线路8』 +浙江民生,https://ali-m-l.cztv.com/channels/lantian/channel006/1080p.m3u8$LR•IPV4•10『线路9』 +浙江民生,http://ali-m-l.cztv.com/channels/lantian/channel006/1080p.m3u8$LR•IPV4•10『线路10』 +浙江经济,https://ali-m-l.cztv.com/channels/lantian/channel003/1080p.m3u8$LR•IPV4•9『线路1』 +浙江经济,http://ali-m-l.cztv.com/channels/lantian/channel003/1080p.m3u8$LR•IPV4•9『线路2』 +浙江经济,http://zwebl02.cztv.com/live/channel031080P.m3u8?auth_key=2524708799-0-0-cc09266f8e043a6df28eb148cb488d37$LR•IPV4•9『线路3』 +浙江经济,https://ali-m-l.cztv.com/channels/lantian/channel003/1080p.m3u8$LR•IPV4•9『线路4』 +浙江经济,https://ali-m-l.cztv.com/channels/lantian/channel003/1080p.m3u8$LR•IPV4•9『线路5』 +浙江经济,http://zwebl02.cztv.com/live/channel031080P.m3u8?auth_key=2524708799-0-0-cc09266f8e043a6df28eb148cb488d37$LR•IPV4•9『线路6』 +浙江经济,https://ali-m-l.cztv.com/channels/lantian/channel003/1080p.m3u8$LR•IPV4•9『线路7』 +浙江经济,https://ali-m-l.cztv.com/channels/lantian/channel003/1080p.m3u8$LR•IPV4•9『线路8』 +浙江经济,http://ali-m-l.cztv.com/channels/lantian/channel003/1080p.m3u8$LR•IPV4•9『线路9』 +浙江钱江,https://ali-m-l.cztv.com/channels/lantian/channel002/1080p.m3u8$LR•IPV4•16『线路1』 +浙江钱江,http://l.cztvcloud.com/channels/lantian/SXyuyao2/720p.m3u8$LR•IPV4•16『线路2』 +浙江钱江,http://ali-m-l.cztv.com/channels/lantian/channel002/1080p.m3u8?zzhed$LR•IPV4•16『线路3』 +浙江钱江,https://ali-m-l.cztv.com/channels/lantian/channel002/1080p.m3u8$LR•IPV4•16『线路4』 +浙江钱江,http://zhfivel02.cztv.com/channel02/1080p.m3u8?auth_key=2524708799-0-0-2f7bb420bfd1d218b9c7b07c0ac1ba2f$LR•IPV4•16『线路5』 +浙江钱江,http://zwebl02.cztv.com/live/channel021080P.m3u8?auth_key=2524708799-0-0-43f14b8147c890428975655007afb4cc$LR•IPV4•16『线路6』 +浙江钱江,http://ali-m-l.cztv.com/channels/lantian/channel002/1080p.m3u8$LR•IPV4•16『线路7』 +浙江钱江,http://120.55.49.231:3095/rtp/233.50.201.132:5140$LR•IPV4•16『线路8』 +浙江钱江,https://ali-m-l.cztv.com/channels/lantian/channel002/1080p.m3u8$LR•IPV4•16『线路9』 +浙江钱江,http://ali-m-l.cztv.com/channels/lantian/channel002/1080p.m3u8?zzhed$LR•IPV4•16『线路10』 +浙江钱江,https://ali-m-l.cztv.com/channels/lantian/channel002/1080p.m3u8$LR•IPV4•16『线路11』 +浙江钱江,http://l.cztvcloud.com/channels/lantian/SXyuyao2/720p.m3u8$LR•IPV4•16『线路12』 +浙江钱江,http://zhfivel02.cztv.com/channel02/1080p.m3u8?auth_key=2524708799-0-0-2f7bb420bfd1d218b9c7b07c0ac1ba2f$LR•IPV4•16『线路13』 +浙江钱江,http://zwebl02.cztv.com/live/channel021080P.m3u8?auth_key=2524708799-0-0-43f14b8147c890428975655007afb4cc$LR•IPV4•16『线路14』 +浙江钱江,https://ali-m-l.cztv.com/channels/lantian/channel002/1080p.m3u8$LR•IPV4•16『线路15』 +浙江钱江,http://l.cztvcloud.com/channels/lantian/SXyuyao2/720p.m3u8$LR•IPV4•16『线路16』 + +港·澳·台,#genre# +凤凰中文,http://play-flive.ifeng.com/live/06OLEGEGM4G.m3u8$LR•IPV4•34『线路1』 +凤凰中文,https://cdn.iptv8k.top/dl/jrys.php?id=19&time=20240926215313&ip=111.229.253.40$LR•IPV4•34『线路2』 +凤凰中文,http://58.19.180.108:9981/stream/channelid/1749482778?profile=pass$LR•IPV4•34『线路3』 +凤凰中文,http://playtv-live.ifeng.com/live/06OLEGEGM4G_audio.m3u8$LR•IPV4•34『线路4』 +凤凰中文,http://zqh2333.top:2222/rtp/239.93.24.9:2192$LR•IPV4•34『线路5』 +凤凰中文,http://php.jdshipin.com:8880/TVOD/iptv.php?id=fhzw$LR•IPV4•34『线路6』 +凤凰中文,https://k44991.kylintv.tv/live/pxna_iphone.m3u8$LR•IPV4•34『线路7』 +凤凰中文,https://cdn.163189.xyz/live/fhzw/stream.m3u8$LR•IPV4•34『线路8』 +凤凰中文,http://cdn.163.dedyn.io/live/fhzw/stream.m3u8$LR•IPV4•34『线路9』 +凤凰中文,http://cdn.163189.xyz/live/fhzw/stream.m3u8$LR•IPV4•34『线路10』 +凤凰中文,https://stream1.freetv.fun/2b657a181daa345025199e7d6b8de95a1a87b19abceafbd16e2499a49da33c6f.m3u8$LR•IPV4•34『线路11』 +凤凰中文,http://122.117.71.103:8574/http/61.222.53.250:8078/hls/21/80/phoenixch.m3u8$LR•IPV4•34『线路12』 +凤凰中文,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=8654&tk=e503191f8e20$LR•IPV4•34『线路13』 +凤凰中文,http://120.55.49.231:3095/rtp/233.50.200.191:5140$LR•IPV4•34『线路14』 +凤凰中文,http://php.jdshipin.com/TVOD/iptv.php?id=fhzw$LR•IPV4•34『线路15』 +凤凰中文,http://api.mytv666.top/api/hk.php?id=3635353536383939393264346132646363626433646461373332353365633339267469643d74762669643d3230$LR•IPV4•34『线路16』 +凤凰中文,http://api.mg.itv888.cn:8080/hls/2f80047f91e/index.m3u8$LR•IPV4•34『线路17』 +凤凰中文,http://203.205.191.53/qctv.fengshows.cn/live/0701pcc72.m3u8$LR•IPV4•34『线路18』 +凤凰中文,http://wouu.net:9977/rtp/239.93.0.162:2192?Cf=cfss.cc$LR•IPV4•34『线路19』 +凤凰中文,http://148.135.93.213:81/phenix.php?id=fhzw$LR•IPV4•34『线路20』 +凤凰中文,https://cdn.iptv8k.top/dl/jrys.php?id=19&time=20240926215313&ip=111.229.253.40$LR•IPV4•34『线路21』 +凤凰中文,http://58.19.180.108:9981/stream/channelid/1749482778?profile=pass$LR•IPV4•34『线路22』 +凤凰中文,http://playtv-live.ifeng.com/live/06OLEGEGM4G_audio.m3u8$LR•IPV4•34『线路23』 +凤凰中文,http://zqh2333.top:2222/rtp/239.93.24.9:2192$LR•IPV4•34『线路24』 +凤凰中文,http://php.jdshipin.com:8880/TVOD/iptv.php?id=fhzw$LR•IPV4•34『线路25』 +凤凰中文,https://k44991.kylintv.tv/live/pxna_iphone.m3u8$LR•IPV4•34『线路26』 +凤凰中文,https://cdn.163189.xyz/live/fhzw/stream.m3u8$LR•IPV4•34『线路27』 +凤凰中文,http://cdn.163.dedyn.io/live/fhzw/stream.m3u8$LR•IPV4•34『线路28』 +凤凰中文,http://cdn.163189.xyz/live/fhzw/stream.m3u8$LR•IPV4•34『线路29』 +凤凰中文,https://stream1.freetv.fun/2b657a181daa345025199e7d6b8de95a1a87b19abceafbd16e2499a49da33c6f.m3u8$LR•IPV4•34『线路30』 +凤凰中文,http://cdn5.1678520.xyz:80/live/live2.1.php?id=fhzw$LR•IPV4•34『线路31』 +凤凰中文,http://www.terrykang.cn:5678/sxg.php?id=test1_4000$LR•IPV4•34『线路32』 +凤凰中文,http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226547/index.m3u8$LR•IPV4•34『线路33』 +凤凰中文,http://php.17186.eu.org/phtv/fhzw.m3u8$LR•IPV4•34『线路34』 +凤凰资讯,http://play-flive.ifeng.com/live/06OLEEWQKN4.m3u8$LR•IPV4•34『线路1』 +凤凰资讯,http://playtv-live.ifeng.com/live/06OLEEWQKN4_audio.m3u8$LR•IPV4•34『线路2』 +凤凰资讯,http://58.19.180.108:9981/stream/channelid/708272803?profile=pass$LR•IPV4•34『线路3』 +凤凰资讯,http://zqh2333.top:2222/rtp/239.93.24.4:2191$LR•IPV4•34『线路4』 +凤凰资讯,https://cdn6.163189.xyz/live/fhzx/stream.m3u8$LR•IPV4•34『线路5』 +凤凰资讯,https://smart.pendy.dpdns.org/Smart.php?id=phoenixinfo_hd$LR•IPV4•34『线路6』 +凤凰资讯,http://cdn3.163189.xyz/live/fhzx/stream.m3u8$LR•IPV4•34『线路7』 +凤凰资讯,https://cdn3.163189.xyz/live/fhzx/stream.m3u8$LR•IPV4•34『线路8』 +凤凰资讯,https://stream1.freetv.fun/a5857ad51b58a0f7a8c9cbdf291571692b0eed9f5ab2cfce97a211260533c0d8.m3u8$LR•IPV4•34『线路9』 +凤凰资讯,http://cdn5.1678520.xyz:80/live/live2.1.php?id=fhzx$LR•IPV4•34『线路10』 +凤凰资讯,http://www.terrykang.cn:5678/sxg.php?id=test2_4000$LR•IPV4•34『线路11』 +凤凰资讯,http://122.117.71.103:8573/http/61.222.53.250:8078/hls/20/80/phoenixif.m3u8$LR•IPV4•34『线路12』 +凤凰资讯,http://61.221.215.25:8800/hls/47/index.m3u8$LR•IPV4•34『线路13』 +凤凰资讯,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=5282&tk=2aca1ad9a849$LR•IPV4•34『线路14』 +凤凰资讯,http://120.55.49.231:3095/rtp/233.50.200.192:5140$LR•IPV4•34『线路15』 +凤凰资讯,http://php.jdshipin.com/TVOD/iptv.php?id=fhzx$LR•IPV4•34『线路16』 +凤凰资讯,http://api.mytv666.top/api/hk.php?id=3639313932626236616366636537633734323039313738383137613037633739267469643d74762669643d3231$LR•IPV4•34『线路17』 +凤凰资讯,http://api.mg.itv888.cn:8080/hls/11ef1dc70d8/index.m3u8$LR•IPV4•34『线路18』 +凤凰资讯,http://203.205.191.53/qctv.fengshows.cn/live/0701pin72.m3u8$LR•IPV4•34『线路19』 +凤凰资讯,http://wouu.net:9977/rtp/239.93.0.118:2191?Cf=cfss.cc$LR•IPV4•34『线路20』 +凤凰资讯,http://148.135.93.213:81/phenix.php?id=fhzx$LR•IPV4•34『线路21』 +凤凰资讯,http://playtv-live.ifeng.com/live/06OLEEWQKN4_audio.m3u8$LR•IPV4•34『线路22』 +凤凰资讯,http://58.19.180.108:9981/stream/channelid/708272803?profile=pass$LR•IPV4•34『线路23』 +凤凰资讯,http://zqh2333.top:2222/rtp/239.93.24.4:2191$LR•IPV4•34『线路24』 +凤凰资讯,https://cdn6.163189.xyz/live/fhzx/stream.m3u8$LR•IPV4•34『线路25』 +凤凰资讯,https://smart.pendy.dpdns.org/Smart.php?id=phoenixinfo_hd$LR•IPV4•34『线路26』 +凤凰资讯,http://cdn3.163189.xyz/live/fhzx/stream.m3u8$LR•IPV4•34『线路27』 +凤凰资讯,https://cdn3.163189.xyz/live/fhzx/stream.m3u8$LR•IPV4•34『线路28』 +凤凰资讯,https://stream1.freetv.fun/a5857ad51b58a0f7a8c9cbdf291571692b0eed9f5ab2cfce97a211260533c0d8.m3u8$LR•IPV4•34『线路29』 +凤凰资讯,http://cdn5.1678520.xyz:80/live/live2.1.php?id=fhzx$LR•IPV4•34『线路30』 +凤凰资讯,http://www.terrykang.cn:5678/sxg.php?id=test2_4000$LR•IPV4•34『线路31』 +凤凰资讯,https://k44991.kylintv.tv/live/pxinhd_iphone.m3u8$LR•IPV4•34『线路32』 +凤凰资讯,http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226546/index.m3u8$LR•IPV4•34『线路33』 +凤凰资讯,http://hwrr.jx.chinamobile.com:8080/PLTV/88888888/224/3221226274/index.m3u8$LR•IPV4•34『线路34』 +凤凰香港,https://cdn.iptv8k.top/dl/jrys.php?id=18&time=20240926215313&ip=111.229.253.40$LR•IPV4•26『线路1』 +凤凰香港,http://tri-metal.dsmynas.net:8001/bysid/85.m3u8$LR•IPV4•26『线路2』 +凤凰香港,https://cdn6.163189.xyz/live/fhhk/stream.m3u8$LR•IPV4•26『线路3』 +凤凰香港,http://cdn3.132.us.kg/live/fhhk/stream.m3u8$LR•IPV4•26『线路4』 +凤凰香港,https://smart.pendy.dpdns.org/Smart.php?id=hkphoenix_twn$LR•IPV4•26『线路5』 +凤凰香港,http://php.17186.eu.org/phtv/fhhk.m3u8$LR•IPV4•26『线路6』 +凤凰香港,http://api.mg.itv888.cn:8080/hls/e9660dce9a6/index.m3u8$LR•IPV4•26『线路7』 +凤凰香港,https://live.tvfix.org/live/fwxg/index.m3u8$LR•IPV4•26『线路8』 +凤凰香港,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=3523&tk=7877e7cc41c7$LR•IPV4•26『线路9』 +凤凰香港,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888910/224/3221226251/index.m3u8$LR•IPV6•26『线路10』 +凤凰香港,http://php.jdshipin.com/TVOD/iptv.php?id=fhhk$LR•IPV4•26『线路11』 +凤凰香港,http://api.mytv666.top/api/hk.php?id=6366393933363838303835353235313030313837656130343336356238356364267469643d74762669643d3232$LR•IPV4•26『线路12』 +凤凰香港,http://203.205.191.53/qctv.fengshows.cn/live/0701phk72.m3u8$LR•IPV4•26『线路13』 +凤凰香港,http://ttkx.cc:1380/653哈哈/fh.php?id=fhhk$LR•IPV4•26『线路14』 +凤凰香港,http://148.135.93.213:81/phenix.php?id=fhhk$LR•IPV4•26『线路15』 +凤凰香港,https://cdn.iptv8k.top/dl/jrys.php?id=18&time=20240926215313&ip=111.229.253.40$LR•IPV4•26『线路16』 +凤凰香港,http://tri-metal.dsmynas.net:8001/bysid/85.m3u8$LR•IPV4•26『线路17』 +凤凰香港,https://cdn6.163189.xyz/live/fhhk/stream.m3u8$LR•IPV4•26『线路18』 +凤凰香港,http://cdn3.132.us.kg/live/fhhk/stream.m3u8$LR•IPV4•26『线路19』 +凤凰香港,https://smart.pendy.dpdns.org/Smart.php?id=hkphoenix_twn$LR•IPV4•26『线路20』 +凤凰香港,https://epg.pw/stream/8770e89223a086eb1b8a0c931e42296d772a8069ad3eb72540e0c434e7cb3e93.m3u8$LR•IPV4•26『线路21』 +凤凰香港,http://php.17186.eu.org/phtv/fhhk.m3u8$LR•IPV4•26『线路22』 +凤凰香港,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888910/224/3221226251/index.m3u8$LR•IPV6•26『线路23』 +凤凰香港,http://api.mg.itv888.cn:8080/hls/e9660dce9a6/index.m3u8$LR•IPV4•26『线路24』 +凤凰香港,https://live.tvfix.org/live/fwxg/index.m3u8$LR•IPV4•26『线路25』 +凤凰香港,https://migu.188766.xyz/?migutoken=9ecafb73d10bfcb8654557f74c044d85&id=fhhk&pp=1$LR•IPV4•26『线路26』 +香港卫视,http://zhibo.hkstv.tv/livestream/mutfysrq/playlist.m3u8$LR•IPV4•19『线路1』 +香港卫视,http://zhibo.hkstv.tv/livestream/mutfysrq/playlist.m3u8$LR•IPV4•19『线路2』 +香港卫视,http://zhibo.hkstv.tv/livestream/mutfysrq/playlist.m3u8$LR•IPV4•19『线路3』 +香港卫视,http://cctvtxyh5c.liveplay.myqcloud.com/cstv/xianggangweishi_2/index.m3u8$LR•IPV4•19『线路4』 +香港卫视,https://stream1.freetv.fun/5335c88a9a7d8b74173b491f480d4f94e8d3bd596af54478106aa2399e6c7917.m3u8$LR•IPV4•19『线路5』 +香港卫视,https://yvxymm.tv12.xyz/175.m3u8$LR•IPV4•19『线路6』 +香港卫视,https://migu.188766.xyz/?migutoken=71c1dbe4568d6c43573e0f04671d588f&id=%E9%A6%99%E6%B8%AF%E5%8D%AB%E8%A7%86&pp=1$LR•IPV4•19『线路7』 +香港卫视,http://zhibo.hkstv.tv/livestream/mutfysrq/playlist.m3u8?wsSession=8ee59707fee3ef96c922e680-167055218938751&wsIPSercert=d24f6d7c9d3646d9533d492d5209384b&wsMonitor=0$LR•IPV4•19『线路8』 +香港卫视,http://101.35.240.114:88/live.php?id=香港卫视$LR•IPV4•19『线路9』 +香港卫视,http://zhibo.hkstv.tv/livestream/mutfysrq/playlist.m3u8$LR•IPV4•19『线路10』 +香港卫视,http://zhibo.hkstv.tv/livestream/mutfysrq/playlist.m3u8$LR•IPV4•19『线路11』 +香港卫视,http://cctvtxyh5c.liveplay.myqcloud.com/cstv/xianggangweishi_2/index.m3u8$LR•IPV4•19『线路12』 +香港卫视,https://stream1.freetv.fun/5335c88a9a7d8b74173b491f480d4f94e8d3bd596af54478106aa2399e6c7917.m3u8$LR•IPV4•19『线路13』 +香港卫视,https://yvxymm.tv12.xyz/175.m3u8$LR•IPV4•19『线路14』 +香港卫视,https://migu.188766.xyz/?migutoken=71c1dbe4568d6c43573e0f04671d588f&id=%E9%A6%99%E6%B8%AF%E5%8D%AB%E8%A7%86&pp=1$LR•IPV4•19『线路15』 +香港卫视,http://cctvtxyh5c.liveplay.myqcloud.com/cstv/xianggangweishi_2/index.m3u8$LR•IPV4•19『线路16』 +香港卫视,https://stream1.freetv.fun/5335c88a9a7d8b74173b491f480d4f94e8d3bd596af54478106aa2399e6c7917.m3u8$LR•IPV4•19『线路17』 +香港卫视,https://yvxymm.tv12.xyz/175.m3u8$LR•IPV4•19『线路18』 +香港卫视,https://migu.188766.xyz/?migutoken=71c1dbe4568d6c43573e0f04671d588f&id=%E9%A6%99%E6%B8%AF%E5%8D%AB%E8%A7%86&pp=1$LR•IPV4•19『线路19』 +翡翠,https://cdn.iptv8k.top/dl/jrys.php?id=3&time=20240926215313&ip=111.229.253.40『线路08』$LR•IPV4•34『线路1』 +翡翠,http://8.138.7.223/tv/hot.php?id=68$LR•IPV4•34『线路2』 +翡翠,http://php.jdshipin.com:8880/TVOD/iptv.php?id=fct3&token=512df05ba47edb46400575c93e179adb7981226d414516400ed1d382cb126adc517715d4ccd3a2276bf3c7b72d52f58905225cf0b1cc461b7888443f$LR•IPV4•34『线路3』 +翡翠,http://cdn9.163189.xyz/smt1.1.php?id=jade_twn$LR•IPV4•34『线路4』 +翡翠,http://v2h.jdshipin.com:80/jade2/jade.stream/chunklist_w100.m3u8$LR•IPV4•34『线路5』 +翡翠,https://stream1.freetv.fun/fei-cui-6.ctv$LR•IPV4•34『线路6』 +翡翠,https://cdn3.163189.xyz/live/fct/stream.m3u8$LR•IPV4•34『线路7』 +翡翠,https://cdn5.1678520.xyz/live/live2.1.php?id=j1$LR•IPV4•34『线路8』 +翡翠,https://cdn.163189.xyz/live/fct4k/stream.m3u8$LR•IPV4•34『线路9』 +翡翠,http://cdn5.1678520.xyz/live/?id=fct$LR•IPV4•34『线路10』 +翡翠,https://cdn.iptv8k.top/dl/jrys.php?id=3&time=20240926215313&ip=111.229.253.40$LR•IPV4•34『线路11』 +翡翠,http://kkk.jjjj.jiduo.me/api.php?n=tttt&id=0401&tk=2aca1ad9a849$LR•IPV4•34『线路12』 +翡翠,http://122.152.202.33/s/81a8a44f/index.m3u8?id=53$LR•IPV4•34『线路13』 +翡翠,http://mzitv.cn:32/tsfile/live/1016_1.m3u8$LR•IPV4•34『线路14』 +翡翠,http://185.243.7.13:80/play/live.php?mac=00:1A:79:45:5E:9A&stream=941619&extension=ts&play_token=p2yEuU1aFS$LR•IPV4•34『线路15』 +翡翠,http://fm1077.serv00.net/Smart.php?id=jade_twn$LR•IPV4•34『线路16』 +翡翠,http://101.35.240.114:88/live.php?id=翡翠台$LR•IPV4•34『线路17』 +翡翠,http://bxtv.3a.ink/api.php?id=fct$LR•IPV4•34『线路18』 +翡翠,http://cdn9.163189.xyz/smt1.1.php?id=jade_twn$LR•IPV4•34『线路19』 +翡翠,http://php.jdshipin.com:8880/smt.php?id=jade_twn$LR•IPV4•34『线路20』 +翡翠,http://php.jdshipin.com:8880/TVOD/iptv.php?id=fct4$LR•IPV4•34『线路21』 +翡翠,http://aktv-stream.m16tv.cfd/stream/aktv/null/AKTV.m3u8$LR•IPV4•34『线路22』 +翡翠,https://cdn.iptv8k.top/dl/jrys.php?id=3&time=20240926215313&ip=111.229.253.40『线路08』$LR•IPV4•34『线路23』 +翡翠,http://8.138.7.223/tv/hot.php?id=68$LR•IPV4•34『线路24』 +翡翠,http://php.jdshipin.com:8880/TVOD/iptv.php?id=fct3&token=512df05ba47edb46400575c93e179adb7981226d414516400ed1d382cb126adc517715d4ccd3a2276bf3c7b72d52f58905225cf0b1cc461b7888443f$LR•IPV4•34『线路25』 +翡翠,http://cdn9.163189.xyz/smt1.1.php?id=jade_twn$LR•IPV4•34『线路26』 +翡翠,http://v2h.jdshipin.com:80/jade2/jade.stream/chunklist_w100.m3u8$LR•IPV4•34『线路27』 +翡翠,https://stream1.freetv.fun/fei-cui-6.ctv$LR•IPV4•34『线路28』 +翡翠,https://cdn3.163189.xyz/live/fct/stream.m3u8$LR•IPV4•34『线路29』 +翡翠,https://cdn5.1678520.xyz/live/live2.1.php?id=j1$LR•IPV4•34『线路30』 +翡翠,https://cdn.163189.xyz/live/fct4k/stream.m3u8$LR•IPV4•34『线路31』 +翡翠,http://cdn5.1678520.xyz/live/?id=fct$LR•IPV4•34『线路32』 +翡翠,http://api.mg.itv888.cn:8080/hls/4bb8922027c/index.m3u8$LR•IPV4•34『线路33』 +翡翠,http://s1.an94tv.cfd/aktv/CH-0/AKTV.m3u8$LR•IPV4•34『线路34』 +明珠,http://cdn9.163189.xyz/smt1.1.php?id=pearl_twn$LR•IPV4•20『线路1』 +明珠,http://php.jdshipin.com:8880/smt.php?id=pearl_twn$LR•IPV4•20『线路2』 +明珠,http://s1.an94tv.cfd/aktv/CH-2/AKTV.m3u8$LR•IPV4•20『线路3』 +明珠,https://stream1.freetv.fun/ming-zhu-10.m3u8$LR•IPV4•20『线路4』 +明珠,https://live.tvfix.org/live/pearl/1/v4000000/index.m3u8$LR•IPV4•20『线路5』 +明珠,http://bxtv.3a.ink/api.php?id=mz$LR•IPV4•20『线路6』 +明珠,https://migu.188766.xyz/?migutoken=7587aa81b1dcc4ed3adff2166ecdaf82&id=pearl_twn&type=dy$LR•IPV4•20『线路7』 +明珠,https://mytv.cdn.loc.cc/o12.php?id=mzt$LR•IPV4•20『线路8』 +明珠,http://bxtv.3a.ink/api.php?id=mz$LR•IPV4•20『线路9』 +明珠,http://cdn9.163189.xyz/smt1.1.php?id=pearl_twn$LR•IPV4•20『线路10』 +明珠,http://php.jdshipin.com/TVOD/iptv.php?id=mzt$LR•IPV4•20『线路11』 +明珠,http://aktv-stream.m16tv.cfd/stream/aktv/null-2/AKTV.m3u8$LR•IPV4•20『线路12』 +明珠,http://cdn9.163189.xyz/smt1.1.php?id=pearl_twn$LR•IPV4•20『线路13』 +明珠,http://php.jdshipin.com:8880/smt.php?id=pearl_twn$LR•IPV4•20『线路14』 +明珠,http://s1.an94tv.cfd/aktv/CH-2/AKTV.m3u8$LR•IPV4•20『线路15』 +明珠,https://stream1.freetv.fun/ming-zhu-10.m3u8$LR•IPV4•20『线路16』 +明珠,https://live.tvfix.org/live/pearl/1/v4000000/index.m3u8$LR•IPV4•20『线路17』 +明珠,http://bxtv.3a.ink/api.php?id=mz$LR•IPV4•20『线路18』 +明珠,https://migu.188766.xyz/?migutoken=7587aa81b1dcc4ed3adff2166ecdaf82&id=pearl_twn&type=dy$LR•IPV4•20『线路19』 +明珠,https://mytv.cdn.loc.cc/o12.php?id=mzt$LR•IPV4•20『线路20』 +无线新闻,http://php.jdshipin.com:8880/TVOD/iptv.php?id=tvbxw$LR•IPV4•11『线路1』 +无线新闻,https://cdn9.163189.xyz/smt3.1.1.php?id=inews_twn$LR•IPV4•11『线路2』 +无线新闻,http://cdn9.163189.xyz/smt1.1.php?id=inews_twn$LR•IPV4•11『线路3』 +无线新闻,https://v2hcdn.jdshipin.com/news/news.stream/chunklist_w105.m3u8$LR•IPV4•11『线路4』 +无线新闻,http://v2hcdn.jdshipin.com/news/news.stream/chunklist_w1005.m3u8$LR•IPV4•11『线路5』 +无线新闻,http://api.mytv666.top/api/hk.php?id=3437643561316430306564303532666566613235653961373961303464386662267469643d74762669643d3235$LR•IPV4•11『线路6』 +无线新闻,http://php.jdshipin.com:8880/TVOD/iptv.php?id=tvbxw$LR•IPV4•11『线路7』 +无线新闻,https://cdn9.163189.xyz/smt3.1.1.php?id=inews_twn$LR•IPV4•11『线路8』 +无线新闻,http://cdn9.163189.xyz/smt1.1.php?id=inews_twn$LR•IPV4•11『线路9』 +无线新闻,https://v2hcdn.jdshipin.com/news/news.stream/chunklist_w105.m3u8$LR•IPV4•11『线路10』 +无线新闻,http://v2hcdn.jdshipin.com/news/news.stream/chunklist_w1005.m3u8$LR•IPV4•11『线路11』 +J2,http://php.jdshipin.com:8880/PLTV/iptv.php?id=j2$LR•IPV4•3『线路1』 +J2,http://fm1077.serv00.net/Smart.php?id=j2_twn$LR•IPV4•3『线路2』 +J2,http://php.jdshipin.com:8880/PLTV/iptv.php?id=j2$LR•IPV4•3『线路3』 +台视,http://fm1077.serv00.net/Smart.php?id=ttv_taiwan$LR•IPV4•4『线路1』 +台视,rtmp://f13h.mine.nu/sat/tv071$LR•IPV4•4『线路2』 +台视,rtmp://f13h.mine.nu/sat/tv071$LR•IPV4•4『线路3』 +台视,http://aktv-stream.m16tv.cfd/stream/taiwan/null-3/AKTV.m3u8$LR•IPV4•4『线路4』 +台视新闻,https://live.catvod.com/catvod_com.php?id=ttvnews_twn$LR•IPV4•6『线路1』 +台视新闻,http://api.mytv666.top/api/hk.php?id=3532663033343761633136633334333932346565303765616636633239323362267469643d74762669643d3533$LR•IPV4•6『线路2』 +台视新闻,http://api.mytv666.top/api/hk.php?id=3663373532323635333633666462356635623632313130333233393162303838267469643d74762669643d313031$LR•IPV4•6『线路3』 +台视新闻,http://38.64.72.148/hls/modn/list/4013/chunklist1.m3u8$LR•IPV4•6『线路4』 +台视新闻,http://222.128.55.152:9080/live/ts.m3u8$LR•IPV4•6『线路5』 +台视新闻,http://aktv-stream.m16tv.cfd/stream/taiwan/null-15/AKTV.m3u8$LR•IPV4•6『线路6』 +民视,http://fm1077.serv00.net/Smart.php?id=ftvhd_taiwan$LR•IPV4•3『线路1』 +民视,rtmp://f13h.mine.nu/sat/tv051$LR•IPV4•3『线路2』 +民视,rtmp://f13h.mine.nu/sat/tv051$LR•IPV4•3『线路3』 +民视新闻,http://fm1077.serv00.net/Smart.php?id=ftvnew_taiwan$LR•IPV4•6『线路1』 +民视新闻,https://live.catvod.com/catvod_com.php?id=ftvnew_taiwan$LR•IPV4•6『线路2』 +民视新闻,http://api.mytv666.top/api/hk.php?id=6133333434353635663133373938343030353333343563353132326433396230267469643d74762669643d3536$LR•IPV4•6『线路3』 +民视新闻,http://api.mytv666.top/api/hk.php?id=6333356235396430353565313132653234663436373463386363396139623936267469643d74762669643d313130$LR•IPV4•6『线路4』 +民视新闻,http://live4play.uk/livehttpplay?channel_id=20097$LR•IPV4•6『线路5』 +民视新闻,http://38.64.72.148:80/hls/modn/list/4012/chunklist1.m3u8$LR•IPV4•6『线路6』 +澳亚卫视,http://cdn9.163189.xyz/live/as/stream.m3u8$LR•IPV4•2『线路1』 +澳亚卫视,https://stream1.freetv.fun/ao-ya-wei-shi-1.ctv$LR•IPV4•2『线路2』 + +电影轮播,#genre# +甄子丹,http://iptv.jxpan.vip:18888/aio/huya/11352935$LR•IPV4•3『线路1』 +甄子丹,http://1.94.31.214:35455/huya/11352935$LR•IPV4•3『线路2』 +甄子丹,http://iptv.jxpan.vip:18888/aio/huya/11352935$LR•IPV4•3『线路3』 +邵氏影院,http://iptv.jxpan.vip:18888/aio/douyu/4246519$LR•IPV4•3『线路1』 +邵氏影院,http://1.94.31.214:35455/douyu/4246519$LR•IPV4•3『线路2』 +邵氏影院,http://iptv.jxpan.vip:18888/aio/douyu/4246519$LR•IPV4•3『线路3』 + +剧集轮播,#genre# +狂飙,http://luobo.bkpcp.top/yy/1355142167$LR•IPV4•2『线路1』 +狂飙,http://1.94.31.214:35455/yy/1355142167$LR•IPV4•2『线路2』 +水浒传,http://www.clmy.cc:35455/yy/1353873252$LR•IPV4•2『线路1』 +水浒传,http://www.clmy.cc:35455/yy/1353873252$LR•IPV4•2『线路2』 +庆余年,http://iptv.jxpan.vip:18888/aio/huya/11352960$LR•IPV4•2『线路1』 +庆余年,http://1.94.31.214:35455/huya/11352960$LR•IPV4•2『线路2』 +琅琊榜,http://zby.xjqxz.top/lyb/live.m3u8$LR•IPV4 +芈月传,http://iptv.jxpan.vip:18888/aio/huya/11352975$LR•IPV4 +康熙微服私访记,http://iptv.jxpan.vip:18888/aio/huya/11342418$LR•IPV4 +三国演义,https://live.iill.top/huya/11602081$LR•IPV4•9『线路1』 +三国演义,http://live.iill.top/yy.php?id=1354936241$LR•IPV4•9『线路2』 +三国演义,http://rihou.cc:555/huyad.php?id=11602081$LR•IPV4•9『线路3』 +三国演义,https://lunbo.freetv.top/yy/1354930932$LR•IPV4•9『线路4』 +三国演义,http://1.94.31.214:35455/huya/11602081$LR•IPV4•9『线路5』 +三国演义,http://iptv.jxpan.vip:18888/aio/huya/11602081$LR•IPV4•9『线路6』 +三国演义,http://1.94.31.214:35455/huya/11602081$LR•IPV4•9『线路7』 +三国演义,https://live.iill.top/huya/11602081$LR•IPV4•9『线路8』 +三国演义,http://live.iill.top/yy.php?id=1354936241$LR•IPV4•9『线路9』 +猫和老鼠,https://live.iill.top/huya/11352879$LR•IPV4•7『线路1』 +猫和老鼠,http://live.iill.top/huya.php?id=11352879$LR•IPV4•7『线路2』 +猫和老鼠,http://iptv.jxpan.vip:18888/aio/huya/11352879$LR•IPV4•7『线路3』 +猫和老鼠,http://182.40.120.180/test-txdwk.flv.huya.com/src/1423782038-1423782038-6115097289842229248-2847687532-10057-A-0-1.m3u8$LR•IPV4•7『线路4』 +猫和老鼠,https://live.iill.top/huya/11352879$LR•IPV4•7『线路5』 +猫和老鼠,http://live.iill.top/huya.php?id=11352879$LR•IPV4•7『线路6』 +猫和老鼠,http://iptv.jxpan.vip:18888/aio/huya/11352879$LR•IPV4•7『线路7』 +刑事侦缉档案,http://iptv.jxpan.vip:18888/aio/huya/29465856$LR•IPV4•4『线路1』 +刑事侦缉档案,http://iptv.jxpan.vip:18888/aio/huya/29465856$LR•IPV4•4『线路2』 +刑事侦缉档案,http://iptv.jxpan.vip:18888/aio/huya/29465856$LR•IPV4•4『线路3』 +刑事侦缉档案,http://1.94.31.214:35455/huya/29465856$LR•IPV4•4『线路4』 +寻秦记,http://iptv.jxpan.vip:18888/aio/huya/29465848$LR•IPV4•3『线路1』 +寻秦记,http://iptv.jxpan.vip:18888/aio/huya/29465848$LR•IPV4•3『线路2』 +寻秦记,http://1.94.31.214:35455/huya/29465848$LR•IPV4•3『线路3』 +陀枪师姐,http://iptv.jxpan.vip:18888/aio/huya/29465857$LR•IPV4•4『线路1』 +陀枪师姐,http://iptv.jxpan.vip:18888/aio/huya/29465857$LR•IPV4•4『线路2』 +陀枪师姐,http://iptv.jxpan.vip:18888/aio/huya/29465857$LR•IPV4•4『线路3』 +陀枪师姐,http://1.94.31.214:35455/huya/29465857$LR•IPV4•4『线路4』 +笑傲江湖,http://lu.wqwqwq.sbs/yy/1354930909$LR•IPV4•12『线路1』 +笑傲江湖,https://live.iill.top/huya/23865142$LR•IPV4•12『线路2』 +笑傲江湖,http://live.iill.top/yy.php?id=1354282410$LR•IPV4•12『线路3』 +笑傲江湖,http://rihou.cc:555/huyad.php?id=23865142$LR•IPV4•12『线路4』 +笑傲江湖,http://1.94.31.214:35455/huya/26355790$LR•IPV4•12『线路5』 +笑傲江湖,http://iptv.jxpan.vip:18888/aio/huya/26355790$LR•IPV4•12『线路6』 +笑傲江湖,http://1.94.31.214:35455/huya/26355790$LR•IPV4•12『线路7』 +笑傲江湖,http://iptv.jxpan.vip:18888/aio/huya/23865142$LR•IPV4•12『线路8』 +笑傲江湖,http://1.94.31.214:35455/huya/23865142$LR•IPV4•12『线路9』 +笑傲江湖,http://lu.wqwqwq.sbs/yy/1354930909$LR•IPV4•12『线路10』 +笑傲江湖,https://live.iill.top/huya/23865142$LR•IPV4•12『线路11』 +笑傲江湖,http://live.iill.top/yy.php?id=1354282410$LR•IPV4•12『线路12』 +洗冤录,http://iptv.jxpan.vip:18888/aio/huya/29465851$LR•IPV4•4『线路1』 +洗冤录,http://iptv.jxpan.vip:18888/aio/huya/29465851$LR•IPV4•4『线路2』 +洗冤录,http://iptv.jxpan.vip:18888/aio/huya/29465851$LR•IPV4•4『线路3』 +洗冤录,http://1.94.31.214:35455/huya/29465851$LR•IPV4•4『线路4』 +倚天屠龙记,http://iptv.jxpan.vip:18888/aio/huya/23734246$LR•IPV4•5『线路1』 +倚天屠龙记,http://iptv.jxpan.vip:18888/aio/huya/11342403$LR•IPV4•5『线路2』 +倚天屠龙记,http://1.94.31.214:35455/huya/11342403$LR•IPV4•5『线路3』 +倚天屠龙记,http://iptv.jxpan.vip:18888/aio/huya/23734246$LR•IPV4•5『线路4』 +倚天屠龙记,http://1.94.31.214:35455/huya/23734246$LR•IPV4•5『线路5』 +神雕侠侣,http://iptv.jxpan.vip:18888/aio/huya/23865171$LR•IPV4•6『线路1』 +神雕侠侣,http://iptv.jxpan.vip:18888/aio/huya/23865171$LR•IPV4•6『线路2』 +神雕侠侣,http://iptv.jxpan.vip:18888/aio/huya/11352964$LR•IPV4•6『线路3』 +神雕侠侣,http://1.94.31.214:35455/huya/11352964$LR•IPV4•6『线路4』 +神雕侠侣,http://iptv.jxpan.vip:18888/aio/huya/23865171$LR•IPV4•6『线路5』 +神雕侠侣,http://1.94.31.214:35455/huya/23865171$LR•IPV4•6『线路6』 +鉴证实录,http://iptv.jxpan.vip:18888/aio/huya/23903183$LR•IPV4•4『线路1』 +鉴证实录,http://iptv.jxpan.vip:18888/aio/huya/23903183$LR•IPV4•4『线路2』 +鉴证实录,http://iptv.jxpan.vip:18888/aio/huya/23903183$LR•IPV4•4『线路3』 +鉴证实录,http://1.94.31.214:35455/huya/23903183$LR•IPV4•4『线路4』 +创世纪,http://iptv.jxpan.vip:18888/aio/huya/29465852$LR•IPV4•4『线路1』 +创世纪,http://iptv.jxpan.vip:18888/aio/huya/29465852$LR•IPV4•4『线路2』 +创世纪,http://iptv.jxpan.vip:18888/aio/huya/29465852$LR•IPV4•4『线路3』 +创世纪,http://1.94.31.214:35455/huya/29465852$LR•IPV4•4『线路4』 +使徒行者,http://iptv.jxpan.vip:18888/aio/huya/23734256$LR•IPV4•3『线路1』 +使徒行者,http://iptv.jxpan.vip:18888/aio/huya/23734256$LR•IPV4•3『线路2』 +使徒行者,http://1.94.31.214:35455/huya/23734256$LR•IPV4•3『线路3』 +金枝欲孽,http://iptv.jxpan.vip:18888/aio/huya/29465847$LR•IPV4•4『线路1』 +金枝欲孽,http://iptv.jxpan.vip:18888/aio/huya/29465847$LR•IPV4•4『线路2』 +金枝欲孽,http://iptv.jxpan.vip:18888/aio/huya/29465847$LR•IPV4•4『线路3』 +金枝欲孽,http://1.94.31.214:35455/huya/23865036$LR•IPV4•4『线路4』 +大唐双龙传,http://iptv.jxpan.vip:18888/aio/huya/29465850$LR•IPV4•4『线路1』 +大唐双龙传,http://iptv.jxpan.vip:18888/aio/huya/29465850$LR•IPV4•4『线路2』 +大唐双龙传,http://iptv.jxpan.vip:18888/aio/huya/29465850$LR•IPV4•4『线路3』 +大唐双龙传,http://1.94.31.214:35455/huya/23728674$LR•IPV4•4『线路4』 +妙手仁心,http://iptv.jxpan.vip:18888/aio/huya/29465853$LR•IPV4•4『线路1』 +妙手仁心,http://iptv.jxpan.vip:18888/aio/huya/29465853$LR•IPV4•4『线路2』 +妙手仁心,http://iptv.jxpan.vip:18888/aio/huya/29465853$LR•IPV4•4『线路3』 +妙手仁心,http://1.94.31.214:35455/huya/29465853$LR•IPV4•4『线路4』 +扫黄先锋,http://iptv.jxpan.vip:18888/aio/huya/29465855$LR•IPV4•4『线路1』 +扫黄先锋,http://iptv.jxpan.vip:18888/aio/huya/29465855$LR•IPV4•4『线路2』 +扫黄先锋,http://iptv.jxpan.vip:18888/aio/huya/29465855$LR•IPV4•4『线路3』 +扫黄先锋,http://1.94.31.214:35455/huya/29465855$LR•IPV4•4『线路4』 +笑看风云,http://iptv.jxpan.vip:18888/aio/huya/29465858$LR•IPV4•4『线路1』 +笑看风云,http://iptv.jxpan.vip:18888/aio/huya/29465858$LR•IPV4•4『线路2』 +笑看风云,http://1.94.31.214:35455/huya/29465858$LR•IPV4•4『线路3』 +笑看风云,http://iptv.jxpan.vip:18888/aio/huya/29465858$LR•IPV4•4『线路4』 +大时代,http://iptv.jxpan.vip:18888/aio/huya/23865161$LR•IPV4•3『线路1』 +大时代,http://iptv.jxpan.vip:18888/aio/huya/23865161$LR•IPV4•3『线路2』 +大时代,http://1.94.31.214:35455/huya/23865161$LR•IPV4•3『线路3』 diff --git a/lib/jianpian.json b/lib/jianpian.json new file mode 100644 index 0000000..b92fd63 --- /dev/null +++ b/lib/jianpian.json @@ -0,0 +1,482 @@ +{ + "0": [ + { + "key": "area", + "name": "地區", + "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": "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": "排序", + "value": [ + { + "n": "热门", + "v": "hot" + }, + { + "n": "更新", + "v": "updata" + }, + { + "n": "评分", + "v": "rating" + } + ] + } + ], + "1": [ + { + "key": "area", + "name": "地區", + "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": "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": "排序", + "value": [ + { + "n": "热门", + "v": "hot" + }, + { + "n": "更新", + "v": "updata" + }, + { + "n": "评分", + "v": "rating" + } + ] + } + ], + "2": [ + { + "key": "area", + "name": "地區", + "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": "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": "排序", + "value": [ + { + "n": "热门", + "v": "hot" + }, + { + "n": "更新", + "v": "updata" + }, + { + "n": "评分", + "v": "rating" + } + ] + } + ], + "3": [ + { + "key": "area", + "name": "地區", + "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": "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": "排序", + "value": [ + { + "n": "热门", + "v": "hot" + }, + { + "n": "更新", + "v": "updata" + }, + { + "n": "评分", + "v": "rating" + } + ] + } + ], + "4": [ + { + "key": "area", + "name": "地區", + "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": "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": "排序", + "value": [ + { + "n": "热门", + "v": "hot" + }, + { + "n": "更新", + "v": "updata" + }, + { + "n": "评分", + "v": "rating" + } + ] + } + ] +} diff --git a/lib/jinja.js b/lib/jinja.js new file mode 100644 index 0000000..cc02357 --- /dev/null +++ b/lib/jinja.js @@ -0,0 +1,577 @@ +/*! + * Jinja Templating for JavaScript v0.1.8 + * https://github.com/sstur/jinja-js + * + * This is a slimmed-down Jinja2 implementation [http://jinja.pocoo.org/] + * + * In the interest of simplicity, it deviates from Jinja2 as follows: + * - Line statements, cycle, super, macro tags and block nesting are not implemented + * - auto escapes html by default (the filter is "html" not "e") + * - Only "html" and "safe" filters are built in + * - Filters are not valid in expressions; `foo|length > 1` is not valid + * - Expression Tests (`if num is odd`) not implemented (`is` translates to `==` and `isnot` to `!=`) + * + * Notes: + * - if property is not found, but method '_get' exists, it will be called with the property name (and cached) + * - `{% for n in obj %}` iterates the object's keys; get the value with `{% for n in obj %}{{ obj[n] }}{% endfor %}` + * - subscript notation `a[0]` takes literals or simple variables but not `a[item.key]` + * - `.2` is not a valid number literal; use `0.2` + * + */ +/*global require, exports, module, define */ + +(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+)?$/; + //non-primitive literals (array and object literals) + var NON_PRIMITIVES = /\[[@#~](,[@#~])*\]|\[\]|\{([@i]:[@#~])(,[@i]:[@#~])*\}|\{\}/g; + //bare identifiers such as variables and in object literals: {foo: 'value'} + var IDENTIFIERS = /[$_a-z][$\w]*/ig; + var VARIABLES = /i(\.i|\[[@#i]\])*/g; + var ACCESSOR = /(\.i|\[[@#i]\])/g; + var OPERATORS = /(===?|!==?|>=?|<=?|&&|\|\||[+\-\*\/%])/g; + //extended (english) operators + 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) { + //here we match the rest of the src against a regex for this tag + var match = src.slice(index + open.length).match(TAGS[open]); + match = (match ? match[0] : ''); + //here we sub out strings so we don't get false matches + var simplified = match.replace(STRINGS, '@'); + //if we don't have a close tag or there is a nested open tag + if (!match || ~simplified.indexOf(open)) { + return index + 1; + } + var inner = match.slice(0, 0 - open.length); + //check for white-space collapse syntax + if (inner.charAt(0) === '-') var wsCollapseLeft = true; + if (inner.slice(-1) === '-') var wsCollapseRight = true; + inner = inner.replace(/^-|-$/g, '').trim(); + //if we're in raw mode and we are not looking at an "endraw" tag, move along + 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 === '{{{') { + //liquid-style: make {{{x}}} => {{x|safe}} + 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, '@'); + //replace || operators with ~ + extracted.src = extracted.src.replace(/\|\|/g, '~').split('|'); + //put back || operators + 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]; + }; + + //replace complex literals without mistaking subscript notation with array literals + 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'); + }; + + //parse expression containing literals (including objects/arrays) and variables (including dot and subscript notation) + //valid expressions: `a + 1 > b.c or c == null`, `a and b[1] != c`, `(a < b) or (c < d and e)`, 'a || [1]` + Parser.prototype.parseExpr = function (src, opts) { + opts = opts || {}; + //extract string literals -> @ + var parsed1 = this.extractEnt(src, STRINGS, '@'); + //note: this will catch {not: 1} and a.is; could we replace temporarily and then check adjacent chars? + parsed1.src = parsed1.src.replace(EOPS, function (s, before, op, after) { + return (op in operators) ? before + operators[op] + after : s; + }); + //sub out non-string literals (numbers/true/false/null) -> # + // the distinction is necessary because @ can be object identifiers, # cannot + var parsed2 = this.extractEnt(parsed1.src, IDENTS_AND_NUMS, function (s) { + return (s in constants || NUMBER.test(s)) ? '#' : null; + }); + //sub out object/variable identifiers -> i + var parsed3 = this.extractEnt(parsed2.src, IDENTIFIERS, 'i'); + //remove white-space + parsed3.src = parsed3.src.replace(/\s+/g, ''); + + //the rest of this is simply to boil the expression down and check validity + var simplified = parsed3.src; + //sub out complex literals (objects/arrays) -> ~ + // the distinction is necessary because @ and # can be subscripts but ~ cannot + while (simplified !== (simplified = this.replaceComplex(simplified))) ; + //now @ represents strings, # represents other primitives and ~ represents non-primitives + //replace complex variables (those with dot/subscript accessors) -> v + while (simplified !== (simplified = simplified.replace(/i(\.i|\[[@#i]\])+/, 'v'))) ; + //empty subscript or complex variables in subscript, are not permitted + simplified = simplified.replace(/[iv]\[v?\]/g, 'x'); + //sub in "i" for @ and # and ~ and v (now "i" represents all literals, variables and identifiers) + simplified = simplified.replace(/[@#~v]/g, 'i'); + //sub out operators + simplified = simplified.replace(OPERATORS, '%'); + //allow 'not' unary operator + simplified = simplified.replace(/!+[i]/g, 'i'); + var terms = opts.terms ? simplified.split(',') : [simplified]; + terms.forEach(function (term) { + //simplify logical grouping + 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(); + //quote bare object identifiers (might be a reserved word like {while: 1}) + 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(',') + ')'; + }; + + //escapes a name to be used as a javascript identifier + 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 + '"'; + } + //todo: try/catch or deal with invalid characters (linebreaks, control characters) + return JSON.parse(str); + }; + + + //the context 'this' inside tagHandlers is the parser instance + 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; + //silence output until we enter a child block + this.isSilent = true; + }, + 'include': function (name) { + name = this.parseQuoted(name); + var incSrc = this.readTemplateFile(name); + this.isInclude = true; + this.tokenize(incSrc); + this.isInclude = false; + } + }; + + //liquid style + tagHandlers.assign = tagHandlers.set; + //python/django style + 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 < len; i++) { + var key = keys[i]; + dest[key] = src[key]; + } + return dest; + }; + //get a value, lexically, starting in current context; a.b -> get("a","b") + var get = function () { + var val, n = arguments[0], c = stack.length; + while (c--) { + val = stack[c][n]; + if (typeof val != 'undefined') break; + } + for (var i = 1, len = arguments.length; i < len; i++) { + if (val == null) continue; + n = arguments[i]; + val = (_hasOwnProperty.call(val, n)) ? val[n] : (typeof val._get == 'function' ? (val[n] = val._get(n)) : null); + } + return (val == null) ? '' : val; + }; + var set = function (n, val) { + stack[stack.length - 1][n] = val; + }; + var push = function (ctx) { + stack.push(ctx || {}); + }; + var pop = function () { + stack.pop(); + }; + var write = function (str) { + output.push(str); + }; + var filter = function (val) { + for (var i = 1, len = arguments.length; i < len; i++) { + var arr = arguments[i], name = arr[0], filter = filters[name]; + if (filter) { + arr[0] = val; + //now arr looks like [val, arg1, arg2] + val = filter.apply(data, arr); + } else { + throw new Error('Invalid filter: ' + name); + } + } + if (opts.autoEscape && name !== opts.autoEscape && name !== 'safe') { + //auto escape if not explicitly safe or already escaped + val = filters[opts.autoEscape].call(data, val); + } + output.push(val); + }; + var each = function (obj, loopvar, fn1, fn2) { + if (obj == null) return; + var arr = isArray(obj) ? obj : getKeys(obj), len = arr.length; + var ctx = {loop: {length: len, first: arr[0], last: arr[len - 1]}}; + push(ctx); + for (var i = 0; i < len; i++) { + extend(ctx.loop, {index: i + 1, index0: i}); + fn1(ctx[loopvar] = arr[i]); + } + if (len === 0 && fn2) fn2(); + pop(); + }; + var block = function (fn) { + push(); + fn(); + pop(); + }; + var render = function () { + return output.join(''); + }; + data = data || {}; + opts = extend(defaults, opts || {}); + var filters = extend({ + html: function (val) { + return toString(val) + .split('&').join('&') + .split('<').join('<') + .split('>').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; + }; + + + /*! + * Helpers + */ + + function trimLeft(str) { + return str.replace(LEADING_SPACE, ''); + } + + function trimRight(str) { + return str.replace(TRAILING_SPACE, ''); + } + + function matchAll(str, reg, fn) { + //copy as global + 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; + } + } + } +})); \ No newline at end of file diff --git a/lib/json5.js b/lib/json5.js new file mode 100644 index 0000000..10d7ab0 --- /dev/null +++ b/lib/json5.js @@ -0,0 +1,1737 @@ +(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) { + // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 + var global = module.exports = typeof window != 'undefined' && window.Math == Math + ? window : typeof self != 'undefined' && self.Math == Math ? self + // eslint-disable-next-line no-new-func + : Function('return this')(); + if (typeof __g == 'number') { __g = global; } // eslint-disable-line no-undef + }); + + var _core = createCommonjsModule(function (module) { + var core = module.exports = { version: '2.6.5' }; + if (typeof __e == 'number') { __e = core; } // eslint-disable-line no-undef + }); + 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; + } + }; + + // Thank's IE8 for his funny defineProperty + var _descriptors = !_fails(function () { + return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7; + }); + + var document = _global.document; + // typeof document.createElement is 'object' in old IE + 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; + }); + + // 7.1.1 ToPrimitive(input [, PreferredType]) + + // instead of the ES6 spec version, we didn't implement @@toPrimitive case + // and the second argument - flag - preferred type is a string + 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) { /* empty */ } } + 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); + } + // add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative + })(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; + }; + + // optional / simple context binding + + 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 (/* ...args */) { + 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) { + // contains in native + own = !IS_FORCED && target && target[key] !== undefined; + // export native or passed + out = (own ? target : source)[key]; + // bind timers to global for call from export context + exp = IS_BIND && own ? _ctx(out, _global) : IS_PROTO && typeof out == 'function' ? _ctx(Function.call, out) : out; + // extend global + if (target) { _redefine(target, key, out, type & $export.U); } + // export + if (exports[key] != out) { _hide(exports, key, exp); } + if (IS_PROTO && expProto[key] != out) { expProto[key] = out; } + } + }; + _global.core = _core; + // type bitmap + $export.F = 1; // forced + $export.G = 2; // global + $export.S = 4; // static + $export.P = 8; // proto + $export.B = 16; // bind + $export.W = 32; // wrap + $export.U = 64; // safe + $export.R = 128; // real proto method for `library` + var _export = $export; + + // 7.1.4 ToInteger + var ceil = Math.ceil; + var floor = Math.floor; + var _toInteger = function (it) { + return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); + }; + + // 7.2.1 RequireObjectCoercible(argument) + var _defined = function (it) { + if (it == undefined) { throw TypeError("Can't call method on " + it); } + return it; + }; + + // true -> String#at + // false -> String#codePointAt + 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 < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff + ? TO_STRING ? s.charAt(i) : a + : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000; + }; + }; + + var $at = _stringAt(false); + _export(_export.P, 'String', { + // 21.1.3.3 String.prototype.codePointAt(pos) + 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; + + // length should be 1, old FF problem + _export(_export.S + _export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', { + // 21.1.2.2 String.fromCodePoint(...codePoints) + fromCodePoint: function fromCodePoint(x) { + var arguments$1 = arguments; + // eslint-disable-line no-unused-vars + var res = []; + var aLen = arguments.length; + var i = 0; + var code; + while (aLen > i) { + code = +arguments$1[i++]; + if (_toAbsoluteIndex(code, 0x10ffff) !== code) { throw RangeError(code + ' is not a valid code point'); } + res.push(code < 0x10000 + ? fromCharCode(code) + : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00) + ); + } return res.join(''); + } + }); + + var fromCodePoint = _core.String.fromCodePoint; + + // This is a generated file. Do not edit. + 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 === '\u200C') || (c === '\u200D') || + 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(); + + // This code is unreachable. + // if (!parseStates[parseState]) { + // throw invalidParseState() + // } + + 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; i < value.length; i++) { + var key = String(i); + var replacement = internalize(value, key, reviver); + if (replacement === undefined) { + delete value[key]; + } else { + Object.defineProperty(value, key, { + value: replacement, + writable: true, + enumerable: true, + configurable: true, + }); + } + } + } else { + for (var key$1 in value) { + var replacement$1 = internalize(value, key$1, reviver); + if (replacement$1 === undefined) { + delete value[key$1]; + } else { + Object.defineProperty(value, key$1, { + value: replacement$1, + writable: true, + enumerable: true, + configurable: true, + }); + } + } + } + } + + return reviver.call(holder, name, value) + } + + var lexState; + var buffer; + var doubleQuote; + var sign; + var c; + + function lex () { + lexState = 'default'; + buffer = ''; + doubleQuote = false; + sign = 1; + + for (;;) { + c = peek(); + + // This code is unreachable. + // if (!lexStates[lexState]) { + // throw invalidLexState(lexState) + // } + + var token = lexStates[lexState](); + if (token) { + return token + } + } + } + + function peek () { + if (source[pos]) { + return String.fromCodePoint(source.codePointAt(pos)) + } + } + + function read () { + var c = peek(); + + if (c === '\n') { + line++; + column = 0; + } else if (c) { + column += c.length; + } else { + column++; + } + + if (c) { + pos += c.length; + } + + return c + } + + var lexStates = { + default: function default$1 () { + switch (c) { + case '\t': + case '\v': + case '\f': + case ' ': + case '\u00A0': + case '\uFEFF': + case '\n': + case '\r': + case '\u2028': + case '\u2029': + read(); + return + + case '/': + read(); + lexState = 'comment'; + return + + case undefined: + read(); + return newToken('eof') + } + + if (util.isSpaceSeparator(c)) { + read(); + return + } + + // This code is unreachable. + // if (!lexStates[parseState]) { + // throw invalidLexState(parseState) + // } + + return lexStates[parseState]() + }, + + comment: function comment () { + switch (c) { + case '*': + read(); + lexState = 'multiLineComment'; + return + + case '/': + read(); + lexState = 'singleLineComment'; + return + } + + throw invalidChar(read()) + }, + + multiLineComment: function multiLineComment () { + switch (c) { + case '*': + read(); + lexState = 'multiLineCommentAsterisk'; + return + + case undefined: + throw invalidChar(read()) + } + + read(); + }, + + multiLineCommentAsterisk: function multiLineCommentAsterisk () { + switch (c) { + case '*': + read(); + return + + case '/': + read(); + lexState = 'default'; + return + + case undefined: + throw invalidChar(read()) + } + + read(); + lexState = 'multiLineComment'; + }, + + singleLineComment: function singleLineComment () { + switch (c) { + case '\n': + case '\r': + case '\u2028': + case '\u2029': + read(); + lexState = 'default'; + return + + case undefined: + read(); + return newToken('eof') + } + + read(); + }, + + value: function value () { + switch (c) { + case '{': + case '[': + return newToken('punctuator', read()) + + case 'n': + read(); + literal('ull'); + return newToken('null', null) + + case 't': + read(); + literal('rue'); + return newToken('boolean', true) + + case 'f': + read(); + literal('alse'); + return newToken('boolean', false) + + case '-': + case '+': + if (read() === '-') { + sign = -1; + } + + lexState = 'sign'; + return + + case '.': + buffer = read(); + lexState = 'decimalPointLeading'; + return + + case '0': + buffer = read(); + lexState = 'zero'; + return + + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + buffer = read(); + lexState = 'decimalInteger'; + return + + case 'I': + read(); + literal('nfinity'); + return newToken('numeric', Infinity) + + case 'N': + read(); + literal('aN'); + return newToken('numeric', NaN) + + case '"': + case "'": + doubleQuote = (read() === '"'); + buffer = ''; + lexState = 'string'; + return + } + + throw invalidChar(read()) + }, + + identifierNameStartEscape: function identifierNameStartEscape () { + if (c !== 'u') { + throw invalidChar(read()) + } + + read(); + var u = unicodeEscape(); + switch (u) { + case '$': + case '_': + break + + default: + if (!util.isIdStartChar(u)) { + throw invalidIdentifier() + } + + break + } + + buffer += u; + lexState = 'identifierName'; + }, + + identifierName: function identifierName () { + switch (c) { + case '$': + case '_': + case '\u200C': + case '\u200D': + buffer += read(); + return + + case '\\': + read(); + lexState = 'identifierNameEscape'; + return + } + + if (util.isIdContinueChar(c)) { + buffer += read(); + return + } + + return newToken('identifier', buffer) + }, + + identifierNameEscape: function identifierNameEscape () { + if (c !== 'u') { + throw invalidChar(read()) + } + + read(); + var u = unicodeEscape(); + switch (u) { + case '$': + case '_': + case '\u200C': + case '\u200D': + break + + default: + if (!util.isIdContinueChar(u)) { + throw invalidIdentifier() + } + + break + } + + buffer += u; + lexState = 'identifierName'; + }, + + sign: function sign$1 () { + switch (c) { + case '.': + buffer = read(); + lexState = 'decimalPointLeading'; + return + + case '0': + buffer = read(); + lexState = 'zero'; + return + + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + buffer = read(); + lexState = 'decimalInteger'; + return + + case 'I': + read(); + literal('nfinity'); + return newToken('numeric', sign * Infinity) + + case 'N': + read(); + literal('aN'); + return newToken('numeric', NaN) + } + + throw invalidChar(read()) + }, + + zero: function zero () { + switch (c) { + case '.': + buffer += read(); + lexState = 'decimalPoint'; + return + + case 'e': + case 'E': + buffer += read(); + lexState = 'decimalExponent'; + return + + case 'x': + case 'X': + buffer += read(); + lexState = 'hexadecimal'; + return + } + + return newToken('numeric', sign * 0) + }, + + decimalInteger: function decimalInteger () { + switch (c) { + case '.': + buffer += read(); + lexState = 'decimalPoint'; + return + + case 'e': + case 'E': + buffer += read(); + lexState = 'decimalExponent'; + return + } + + if (util.isDigit(c)) { + buffer += read(); + return + } + + return newToken('numeric', sign * Number(buffer)) + }, + + decimalPointLeading: function decimalPointLeading () { + if (util.isDigit(c)) { + buffer += read(); + lexState = 'decimalFraction'; + return + } + + throw invalidChar(read()) + }, + + decimalPoint: function decimalPoint () { + switch (c) { + case 'e': + case 'E': + buffer += read(); + lexState = 'decimalExponent'; + return + } + + if (util.isDigit(c)) { + buffer += read(); + lexState = 'decimalFraction'; + return + } + + return newToken('numeric', sign * Number(buffer)) + }, + + decimalFraction: function decimalFraction () { + switch (c) { + case 'e': + case 'E': + buffer += read(); + lexState = 'decimalExponent'; + return + } + + if (util.isDigit(c)) { + buffer += read(); + return + } + + return newToken('numeric', sign * Number(buffer)) + }, + + decimalExponent: function decimalExponent () { + switch (c) { + case '+': + case '-': + buffer += read(); + lexState = 'decimalExponentSign'; + return + } + + if (util.isDigit(c)) { + buffer += read(); + lexState = 'decimalExponentInteger'; + return + } + + throw invalidChar(read()) + }, + + decimalExponentSign: function decimalExponentSign () { + if (util.isDigit(c)) { + buffer += read(); + lexState = 'decimalExponentInteger'; + return + } + + throw invalidChar(read()) + }, + + decimalExponentInteger: function decimalExponentInteger () { + if (util.isDigit(c)) { + buffer += read(); + return + } + + return newToken('numeric', sign * Number(buffer)) + }, + + hexadecimal: function hexadecimal () { + if (util.isHexDigit(c)) { + buffer += read(); + lexState = 'hexadecimalInteger'; + return + } + + throw invalidChar(read()) + }, + + hexadecimalInteger: function hexadecimalInteger () { + if (util.isHexDigit(c)) { + buffer += read(); + return + } + + return newToken('numeric', sign * Number(buffer)) + }, + + string: function string () { + switch (c) { + case '\\': + read(); + buffer += escape(); + return + + case '"': + if (doubleQuote) { + read(); + return newToken('string', buffer) + } + + buffer += read(); + return + + case "'": + if (!doubleQuote) { + read(); + return newToken('string', buffer) + } + + buffer += read(); + return + + case '\n': + case '\r': + throw invalidChar(read()) + + case '\u2028': + case '\u2029': + separatorChar(c); + break + + case undefined: + throw invalidChar(read()) + } + + buffer += read(); + }, + + start: function start () { + switch (c) { + case '{': + case '[': + return newToken('punctuator', read()) + + // This code is unreachable since the default lexState handles eof. + // case undefined: + // return newToken('eof') + } + + lexState = 'value'; + }, + + beforePropertyName: function beforePropertyName () { + switch (c) { + case '$': + case '_': + buffer = read(); + lexState = 'identifierName'; + return + + case '\\': + read(); + lexState = 'identifierNameStartEscape'; + return + + case '}': + return newToken('punctuator', read()) + + case '"': + case "'": + doubleQuote = (read() === '"'); + lexState = 'string'; + return + } + + if (util.isIdStartChar(c)) { + buffer += read(); + lexState = 'identifierName'; + return + } + + throw invalidChar(read()) + }, + + afterPropertyName: function afterPropertyName () { + if (c === ':') { + return newToken('punctuator', read()) + } + + throw invalidChar(read()) + }, + + beforePropertyValue: function beforePropertyValue () { + lexState = 'value'; + }, + + afterPropertyValue: function afterPropertyValue () { + switch (c) { + case ',': + case '}': + return newToken('punctuator', read()) + } + + throw invalidChar(read()) + }, + + beforeArrayValue: function beforeArrayValue () { + if (c === ']') { + return newToken('punctuator', read()) + } + + lexState = 'value'; + }, + + afterArrayValue: function afterArrayValue () { + switch (c) { + case ',': + case ']': + return newToken('punctuator', read()) + } + + throw invalidChar(read()) + }, + + end: function end () { + // This code is unreachable since it's handled by the default lexState. + // if (c === undefined) { + // read() + // return newToken('eof') + // } + + throw invalidChar(read()) + }, + }; + + function newToken (type, value) { + return { + type: type, + value: value, + line: line, + column: column, + } + } + + function literal (s) { + for (var i = 0, list = s; i < list.length; i += 1) { + var c = list[i]; + + var p = peek(); + + if (p !== c) { + throw invalidChar(read()) + } + + read(); + } + } + + function escape () { + var c = peek(); + switch (c) { + case 'b': + read(); + return '\b' + + case 'f': + read(); + return '\f' + + case 'n': + read(); + return '\n' + + case 'r': + read(); + return '\r' + + case 't': + read(); + return '\t' + + case 'v': + read(); + return '\v' + + case '0': + read(); + if (util.isDigit(peek())) { + throw invalidChar(read()) + } + + return '\0' + + case 'x': + read(); + return hexEscape() + + case 'u': + read(); + return unicodeEscape() + + case '\n': + case '\u2028': + case '\u2029': + read(); + return '' + + case '\r': + read(); + if (peek() === '\n') { + read(); + } + + return '' + + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + throw invalidChar(read()) + + case undefined: + throw invalidChar(read()) + } + + return read() + } + + function hexEscape () { + var buffer = ''; + var c = peek(); + + if (!util.isHexDigit(c)) { + throw invalidChar(read()) + } + + buffer += read(); + + c = peek(); + if (!util.isHexDigit(c)) { + throw invalidChar(read()) + } + + buffer += read(); + + return String.fromCodePoint(parseInt(buffer, 16)) + } + + function unicodeEscape () { + var buffer = ''; + var count = 4; + + while (count-- > 0) { + 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': + // This code is unreachable since it's handled by the lexState. + // if (token.value !== '}') { + // throw invalidToken() + // } + + pop(); + return + + case 'eof': + throw invalidEOF() + } + + // This code is unreachable since it's handled by the lexState. + // throw invalidToken() + }, + + afterPropertyName: function afterPropertyName () { + // This code is unreachable since it's handled by the lexState. + // if (token.type !== 'punctuator' || token.value !== ':') { + // throw invalidToken() + // } + + 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 () { + // This code is unreachable since it's handled by the lexState. + // if (token.type !== 'punctuator') { + // throw invalidToken() + // } + + if (token.type === 'eof') { + throw invalidEOF() + } + + switch (token.value) { + case ',': + parseState = 'beforePropertyName'; + return + + case '}': + pop(); + } + + // This code is unreachable since it's handled by the lexState. + // throw invalidToken() + }, + + afterArrayValue: function afterArrayValue () { + // This code is unreachable since it's handled by the lexState. + // if (token.type !== 'punctuator') { + // throw invalidToken() + // } + + if (token.type === 'eof') { + throw invalidEOF() + } + + switch (token.value) { + case ',': + parseState = 'beforeArrayValue'; + return + + case ']': + pop(); + } + + // This code is unreachable since it's handled by the lexState. + // throw invalidToken() + }, + + end: function end () { + // This code is unreachable since it's handled by the lexState. + // if (token.type !== 'eof') { + // throw invalidToken() + // } + }, + }; + + 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 + + // This code is unreachable. + // default: + // throw invalidToken() + } + + 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'; + } + } + + // This code is unreachable. + // function invalidParseState () { + // return new Error(`JSON5: invalid parse state '${parseState}'`) + // } + + // This code is unreachable. + // function invalidLexState (state) { + // return new Error(`JSON5: invalid lex state '${state}'`) + // } + + 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)) + } + + // This code is unreachable. + // function invalidToken () { + // if (token.type === 'eof') { + // return syntaxError(`JSON5: invalid end of input at ${line}:${column}`) + // } + + // const c = String.fromCodePoint(token.value.codePointAt(0)) + // return syntaxError(`JSON5: invalid character '${formatChar(c)}' 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; i < list.length; i += 1) { + var v = list[i]; + + var item = (void 0); + + if (typeof v === 'string') { + item = v; + } else if ( + typeof v === 'number' || + v instanceof String || + v instanceof Number + ) { + item = String(v); + } + + if (item !== undefined && propertyList.indexOf(item) < 0) { + propertyList.push(item); + } + } + } + + if (space instanceof Number) { + space = Number(space); + } else if (space instanceof String) { + space = String(space); + } + + if (typeof space === 'number') { + if (space > 0) { + 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 = { + "'": 0.1, + '"': 0.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 < value.length; i++) { + var c = value[i]; + switch (c) { + case "'": + case '"': + quotes[c]++; + product += c; + continue + + case '\0': + if (util.isDigit(value[i + 1])) { + product += '\\x00'; + continue + } + } + + if (replacements[c]) { + product += replacements[c]; + continue + } + + if (c < ' ') { + var hexString = c.charCodeAt(0).toString(16); + product += '\\x' + ('00' + hexString).substring(hexString.length); + continue + } + + product += c; + } + + var quoteChar = quote || Object.keys(quotes).reduce(function (a, b) { return (quotes[a] < quotes[b]) ? a : b; }); + + product = product.replace(new RegExp(quoteChar, 'g'), replacements[quoteChar]); + + return quoteChar + product + quoteChar + } + + function serializeObject (value) { + if (stack.indexOf(value) >= 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 < list.length; i += 1) { + var key = list[i]; + + var propertyString = serializeProperty(key, value); + if (propertyString !== undefined) { + var member = serializeKey(key) + ':'; + if (gap !== '') { + member += ' '; + } + member += propertyString; + partial.push(member); + } + } + + var final; + if (partial.length === 0) { + final = '{}'; + } else { + var properties; + if (gap === '') { + properties = partial.join(','); + final = '{' + properties + '}'; + } else { + var separator = ',\n' + indent; + properties = partial.join(separator); + final = '{\n' + indent + properties + ',\n' + stepback + '}'; + } + } + + stack.pop(); + indent = stepback; + return final + } + + function serializeKey (key) { + if (key.length === 0) { + return quoteString(key, true) + } + + var firstChar = String.fromCodePoint(key.codePointAt(0)); + if (!util.isIdStartChar(firstChar)) { + return quoteString(key, true) + } + + for (var i = firstChar.length; i < key.length; i++) { + if (!util.isIdContinueChar(String.fromCodePoint(key.codePointAt(i)))) { + return quoteString(key, true) + } + } + + return key + } + + function serializeArray (value) { + if (stack.indexOf(value) >= 0) { + throw TypeError('Converting circular structure to JSON5') + } + + stack.push(value); + + var stepback = indent; + indent = indent + gap; + + var partial = []; + for (var i = 0; i < value.length; i++) { + var propertyString = serializeProperty(String(i), value); + partial.push((propertyString !== undefined) ? propertyString : 'null'); + } + + var final; + if (partial.length === 0) { + final = '[]'; + } else { + if (gap === '') { + var properties = partial.join(','); + final = '[' + properties + ']'; + } else { + var separator = ',\n' + indent; + var properties$1 = partial.join(separator); + final = '[\n' + indent + properties$1 + ',\n' + stepback + ']'; + } + } + + stack.pop(); + indent = stepback; + return final + } + }; + + var JSON5 = { + parse: parse, + stringify: stringify, + }; + + var lib = JSON5; + + var es5 = lib; + + return es5; + +}))); diff --git a/lib/libxlsdk.tar.xz b/lib/libxlsdk.tar.xz new file mode 100644 index 0000000..680d480 Binary files /dev/null and b/lib/libxlsdk.tar.xz differ diff --git a/lib/libxlsdk.tar.xz.md5 b/lib/libxlsdk.tar.xz.md5 new file mode 100644 index 0000000..91b2ca8 --- /dev/null +++ b/lib/libxlsdk.tar.xz.md5 @@ -0,0 +1 @@ +bda1cf31fbe74ccaf16e3b5544eb9f9b diff --git a/lib/live2vod.js b/lib/live2vod.js new file mode 100644 index 0000000..4a45965 --- /dev/null +++ b/lib/live2vod.js @@ -0,0 +1 @@ +var iil='jsjiami.com.v6',iil_=['iil'],lIIIl1ll=[iil,'\x6f\x6b\x68\x74\x74\x70\x2f\x33\x2e\x31\x35','\x69\x6e\x64\x65\x78\x4f\x66','\x24\x24\x24','\x73\x70\x6c\x69\x74','\x74\x72\x69\x6d','\x26\x26\x26','\x3a\x2f\x2f','\x6c\x6f\x67','\x70\x69\x63\x55\x72\x6c\x3a\x20','\x72\x65\x70\x6c\x61\x63\x65','\x70\x75\x73\x68','\x2f\x66\x69\x6c\x65\x2f\x6c\x69\x76\x65\x73\x6f\x75\x72\x63\x65\x6c\x69\x73\x74','\x2f\x6c\x69\x76\x65\x73\x6f\x75\x72\x63\x65\x6c\x69\x73\x74','\x47\x45\x54','\x70\x61\x72\x73\x65','\x63\x6f\x6e\x74\x65\x6e\x74','\x73\x75\x62\x73\x74\x72\x69\x6e\x67','\x6c\x61\x73\x74\x49\x6e\x64\x65\x78\x4f\x66','\x6e\x61\x6d\x65','\x75\x72\x6c','\x3d\x3d\x3d\x3d\x20\x3e\x3e\x3e\x20','\x73\x74\x72\x69\x6e\x67\x69\x66\x79','\x65\x78\x65\x63','\x74\x65\x73\x74','\x6d\x61\x74\x63\x68','\x63\x68\x61\x6e\x6e\x65\x6c','\x2c\x23\x67\x65\x6e\x72\x65\x23\x0a','\x75\x72\x6c\x73','\x64\x61\x74\x61','\x64\x61\x74\x61\x6c\x69\x73\x74','\x70\x72\x6f\x76','\x6c\x69\x73\x74','\x2d\x2d\x2d','\x6c\x69\x6e\x65','\x77\x65\x62\x50\x69\x63\x55\x72\x6c\x3a\x20','\x23\x45\x58\x54\x4d\x33\x55','\x22\x63\x68\x61\x6e\x6e\x65\x6c\x22','\x22\x75\x72\x6c\x73\x22','\x22\x64\x61\x74\x61\x6c\x69\x73\x74\x22','\x6c\x65\x6e\x67\x74\x68','\x23\x67\x65\x6e\x72\x65\x23','\x7b\x6e\x61\x6d\x65\x7d','\x7b\x63\x61\x74\x65\x7d','\u76f4\u64ad\u5217\u8868','\x6e\x75\x6c\x6c','\x74\x79\x70\x65\x5f\x69\x64','\x76\x6f\x64\x5f\x70\x6c\x61\x79\x5f\x75\x72\x6c','\x68\x61\x73\x4f\x77\x6e\x50\x72\x6f\x70\x65\x72\x74\x79','\x6a\x6f\x69\x6e','\x76\x6f\x64\x5f\x70\x6c\x61\x79\x5f\x66\x72\x6f\x6d','\x6a\x43\x50\x73\x4e\x6a\x77\x69\x4a\x61\x51\x6d\x69\x2e\x63\x6f\x4e\x4f\x6d\x47\x72\x2e\x76\x56\x36\x41\x46\x67\x79\x74\x74\x3d\x3d'];function Ii1l1III(_0x3b13df,_0x346a54){_0x3b13df=~~'0x'['concat'](_0x3b13df['slice'](0x0));var _0x4db44b=lIIIl1ll[_0x3b13df];return _0x4db44b;};(function(_0x209161,_0x5eaa4a){var _0x42ecdf=0x0;for(_0x5eaa4a=_0x209161['shift'](_0x42ecdf>>0x2);_0x5eaa4a&&_0x5eaa4a!==(_0x209161['pop'](_0x42ecdf>>0x3)+'')['replace'](/[CPNwJQNOGrVAFgytt=]/g,'');_0x42ecdf++){_0x42ecdf=_0x42ecdf^0x127efd;}}(lIIIl1ll,Ii1l1III));let headers={'User-Agent':Ii1l1III('0')};let classes=[];let cates={};let picUrl='';let webPaths={};function init(IiIIi1i){let i1Ii11I1='';if(IiIIi1i[Ii1l1III('1')](Ii1l1III('2'))>0x0){i1Ii11I1=IiIIi1i[Ii1l1III('3')](Ii1l1III('2'))[0x0][Ii1l1III('4')]();IiIIi1i=IiIIi1i[Ii1l1III('3')](Ii1l1III('2'))[0x1][Ii1l1III('4')]();}if(IiIIi1i[Ii1l1III('1')](Ii1l1III('5'))>0x0){picUrl=IiIIi1i[Ii1l1III('3')](Ii1l1III('5'))[0x1][Ii1l1III('4')]();if(picUrl[Ii1l1III('1')](Ii1l1III('6'))<0x0){picUrl=i1Ii11I1+picUrl;}IiIIi1i=IiIIi1i[Ii1l1III('3')](Ii1l1III('5'))[0x0][Ii1l1III('4')]();}console[Ii1l1III('7')](Ii1l1III('8')+picUrl);let IIlIlI1I=IiIIi1i[Ii1l1III('3')]('\x23');for(const IlII1I1 of IIlIlI1I){if(IlII1I1[Ii1l1III('1')]('\x24')>0x0){let illIl111=IlII1I1;let Ill1iIi=IlII1I1[Ii1l1III('3')]('\x24')[0x0];if(illIl111[Ii1l1III('1')](Ii1l1III('6'))<0x0){illIl111=illIl111[Ii1l1III('9')]('\x24','\x24'+i1Ii11I1);}classes[Ii1l1III('a')]({'type_id':illIl111,'type_name':Ill1iIi[Ii1l1III('9')]('\x21\x21','')});}else{let II1lIlli=IlII1I1;if(II1lIlli[Ii1l1III('1')](Ii1l1III('6'))<0x0){II1lIlli=i1Ii11I1+II1lIlli;}II1lIlli=II1lIlli[Ii1l1III('9')](Ii1l1III('b'),Ii1l1III('c'));let Illi11ll=req(II1lIlli,{'\x6d\x65\x74\x68\x6f\x64':Ii1l1III('d'),'\x68\x65\x61\x64\x65\x72\x73':headers});try{let l1lIiill=JSON[Ii1l1III('e')](Illi11ll[Ii1l1III('f')]);let lillI11l=II1lIlli[Ii1l1III('10')](0x0,II1lIlli[Ii1l1III('11')]('\x2f')+0x1);for(const i1iilII1 of l1lIiill){let Iillil=i1iilII1[Ii1l1III('12')];let lI1iIl=i1iilII1[Ii1l1III('13')];let illIl111=Iillil+'\x24'+(lI1iIl[Ii1l1III('1')](Ii1l1III('6'))<0x0?lillI11l:'')+lI1iIl;classes[Ii1l1III('a')]({'type_id':illIl111,'type_name':Iillil[Ii1l1III('9')]('\x21\x21','')});webPaths[illIl111]=lillI11l;}}catch(Ii1Ii11){console[Ii1l1III('7')](Ii1l1III('14')+Ii1Ii11);}}}}function home(I1iiIiIl){return JSON[Ii1l1III('15')]({'class':classes,'filters':null});}function parseM3u(iIi1Ii1I,I1IlIIIi){let iI1iiIii={};let iiI11111=/(#EXTINF:.+?),([^,]+?)\s*\n(.+?)\s*\n/g;let ii1iilil=null;while((ii1iilil=iiI11111[Ii1l1III('16')](iIi1Ii1I))!=null){let lllli1iI=ii1iilil[0x1];let il1Ili1I=ii1iilil[0x2];let liIlll1l=ii1iilil[0x3];if(il1Ili1I==null||liIlll1l==null||il1Ili1I==''||liIlll1l==''){continue;}il1Ili1I=il1Ili1I[Ii1l1III('4')]();liIlll1l=liIlll1l[Ii1l1III('4')]();let IiI1lI1l=I1IlIIIi;let ilIl1i1i=/group-title="(.*?)"/;if(ilIl1i1i[Ii1l1III('17')](lllli1iI)){IiI1lI1l=lllli1iI[Ii1l1III('18')](ilIl1i1i)[0x1];}if(!iI1iiIii[IiI1lI1l]){iI1iiIii[IiI1lI1l]=[];}iI1iiIii[IiI1lI1l][Ii1l1III('a')](il1Ili1I+'\x2c'+liIlll1l);}let ll11III1='';for(const li1Ili in iI1iiIii){ll11III1+=li1Ili+'\x0a';let IlIil1ll=iI1iiIii[li1Ili];for(const li1iI11 of IlIil1ll){ll11III1+=li1iI11+'\x0a';}}return ll11III1;}function parseFm(IliiIl1I){let lliiI1i1='';let Iii1ll=JSON[Ii1l1III('e')](IliiIl1I);for(const i1lIlli1 of Iii1ll){let I111Il1l=i1lIlli1[Ii1l1III('12')];let ilI11li=i1lIlli1[Ii1l1III('19')];lliiI1i1+=I111Il1l+Ii1l1III('1a');for(const iiilI1iI of ilI11li){let I11111l1=iiilI1iI[Ii1l1III('12')];let IlI1l1I1=iiilI1iI[Ii1l1III('1b')];for(const l1II1lll of IlI1l1I1){lliiI1i1+=I11111l1+'\x2c'+l1II1lll+'\x0a';}}}return lliiI1i1;}function parseLu(iIliI1lI){let IIlilI1i='';let I11ilI1i=JSON[Ii1l1III('e')](iIliI1lI)[Ii1l1III('1c')];for(const i1Ii1l1 of I11ilI1i[Ii1l1III('1d')]){let I11111l=i1Ii1l1[Ii1l1III('1e')];let IiIiii1l=i1Ii1l1[Ii1l1III('1f')];IIlilI1i+=I11111l+Ii1l1III('1a');for(const l1111lI of IiIiii1l){let lIlI1iI=l1111lI[Ii1l1III('12')];let ll11i1II=l1111lI[Ii1l1III('1b')];for(const Iliilii of ll11i1II){IIlilI1i+=lIlI1iI+Ii1l1III('20')+Iliilii[Ii1l1III('21')]+'\x2c'+Iliilii[Ii1l1III('13')]+'\x0a';}}}return IIlilI1i;}function getCateData(IliI1i){let iI1I1I1I=picUrl;if(IliI1i[Ii1l1III('1')](Ii1l1III('5'))>0x0){iI1I1I1I=IliI1i[Ii1l1III('3')](Ii1l1III('5'))[0x1][Ii1l1III('4')]();if(iI1I1I1I[Ii1l1III('1')](Ii1l1III('6'))<0x0&&webPaths[IliI1i]){iI1I1I1I=webPaths[IliI1i]+iI1I1I1I;}IliI1i=IliI1i[Ii1l1III('3')](Ii1l1III('5'))[0x0][Ii1l1III('4')]();}console[Ii1l1III('7')](Ii1l1III('22')+iI1I1I1I);let ll1iIiiI=IliI1i[Ii1l1III('3')]('\x24')[0x1];let i1I1l1i=IliI1i[Ii1l1III('3')]('\x24')[0x0];if(!cates[IliI1i]){cates[IliI1i]=[];let iIl11Iii=headers;if(ll1iIiiI[Ii1l1III('1')]('\x7c')>0x0){let ii111I1I=decodeURIComponent(ll1iIiiI[Ii1l1III('3')]('\x7c')[0x1]);ll1iIiiI=ll1iIiiI[Ii1l1III('3')]('\x7c')[0x0];for(const II1Ii1l of ii111I1I[Ii1l1III('3')]('\x26')){if(II1Ii1l[Ii1l1III('1')]('\x3d')>0x0){let lI1lliii=II1Ii1l[Ii1l1III('3')]('\x3d')[0x0];let I11Iii1i=II1Ii1l[Ii1l1III('3')]('\x3d')[0x1];iIl11Iii[lI1lliii]=I11Iii1i;}}}let I111lilI=req(ll1iIiiI,{'\x6d\x65\x74\x68\x6f\x64':Ii1l1III('d'),'\x68\x65\x61\x64\x65\x72\x73':iIl11Iii});I111lilI=I111lilI[Ii1l1III('f')][Ii1l1III('4')]();if(I111lilI[Ii1l1III('1')](Ii1l1III('23'))>=0x0){I111lilI=parseM3u(I111lilI,i1I1l1i);}else if(I111lilI[Ii1l1III('1')](Ii1l1III('24'))>0x0&&I111lilI[Ii1l1III('1')](Ii1l1III('25'))>0x0){I111lilI=parseFm(I111lilI);}else if(I111lilI[Ii1l1III('1')](Ii1l1III('26'))>0x0&&I111lilI[Ii1l1III('1')](Ii1l1III('25'))>0x0){I111lilI=parseLu(I111lilI);}let li1IiiII=(i1I1l1i+'\x0a'+I111lilI[Ii1l1III('9')]('\x0d',''))[Ii1l1III('3')]('\x0a');let lli11iI=i1I1l1i;let IiiIIiIi=null;let iiiI1l='';for(let i1ii1IIl=0x0;i1ii1IIl0x0)){if(iiiI1l!=''){let ilIIIl=iI1I1I1I[Ii1l1III('9')](Ii1l1III('29'),encodeURIComponent(lli11iI))[Ii1l1III('9')](Ii1l1III('2a'),encodeURIComponent(i1I1l1i));let ilI1ilI=ilIIIl[Ii1l1III('1')]('\x3c');let iili1I1i=ilIIIl[Ii1l1III('11')]('\x3e');if(ilI1ilI>-0x1&&iili1I1i>ilI1ilI){let I11Ilili=ilIIIl[Ii1l1III('10')](ilI1ilI,iili1I1i+0x1);let I1liliII=new RegExp(I11Ilili[Ii1l1III('9')](/<|>/g,''));let lii11liI=lli11iI[Ii1l1III('9')](I1liliII,function(Ili1lIi1,iiliII1l){return iiliII1l;});ilIIIl=ilIIIl[Ii1l1III('9')](I11Ilili,lii11liI);console[Ii1l1III('7')](lli11iI+'\x2c\x20'+ilIIIl);}let IiiIIiIi={'vod_id':IliI1i+Ii1l1III('2')+cates[IliI1i][Ii1l1III('27')],'vod_name':lli11iI,'vod_pic':ilIIIl,'vod_remarks':'','type_name':Ii1l1III('2b'),'vod_year':'','vod_area':'','vod_actor':'','vod_director':'','vod_content':'','vod_play_from':i1I1l1i,'vod_play_url':iiiI1l};cates[IliI1i][Ii1l1III('a')](IiiIIiIi);}lli11iI=lIliIii[Ii1l1III('3')]('\x2c')[0x0][Ii1l1III('4')]();iiiI1l='';}else if(lIliIii[Ii1l1III('1')]('\x2c')>0x0&&/http|rtmp|rtsp|rsp/[Ii1l1III('17')](lIliIii)){let l1iiI1ii=lIliIii[Ii1l1III('3')]('\x2c');if(iiiI1l!=''){iiiI1l+='\x23';}iiiI1l+=l1iiI1ii[0x0][Ii1l1III('4')]()+'\x24'+l1iiI1ii[0x1][Ii1l1III('4')]();}}if(iiiI1l!=''){let II1Iliil=iI1I1I1I[Ii1l1III('9')](Ii1l1III('29'),encodeURIComponent(lli11iI))[Ii1l1III('9')](Ii1l1III('2a'),encodeURIComponent(i1I1l1i));let ilI1ilI=II1Iliil[Ii1l1III('1')]('\x3c');let iili1I1i=II1Iliil[Ii1l1III('11')]('\x3e');if(ilI1ilI>-0x1&&iili1I1i>ilI1ilI){let I11Ilili=II1Iliil[Ii1l1III('10')](ilI1ilI,iili1I1i+0x1);let I1liliII=new RegExp(I11Ilili[Ii1l1III('9')](/<|>/g,''));let lii11liI=I1liliII[Ii1l1III('17')](lli11iI)?lli11iI[Ii1l1III('18')](I1liliII)[0x1]:Ii1l1III('2c');II1Iliil=II1Iliil[Ii1l1III('9')](I11Ilili,lii11liI);}let IiiIIiIi={'vod_id':IliI1i+Ii1l1III('2')+cates[IliI1i][Ii1l1III('27')],'vod_name':lli11iI,'vod_pic':II1Iliil,'vod_remarks':'','type_name':Ii1l1III('2b'),'vod_year':'','vod_area':'','vod_actor':'','vod_director':'','vod_content':'','vod_play_from':i1I1l1i,'vod_play_url':iiiI1l};cates[IliI1i][Ii1l1III('a')](IiiIIiIi);}}return cates[IliI1i];}function homeVod(liIIlIl1){let iIl1IIii=getCateData(classes[0x0][Ii1l1III('2d')]);let I1l1iil=JSON[Ii1l1III('15')]({'list':iIl1IIii});return I1l1iil;}function category(I1l1i1Ii,l1IiiIli,IIi1Illi,lilIliIl){let IIi1i1ll=[];if(l1IiiIli==0x1){IIi1i1ll=getCateData(I1l1i1Ii);}let iIiiIi1i=JSON[Ii1l1III('15')]({'list':IIi1i1ll});return iIiiIi1i;}function detail(lIl11iii){let I1IIIil=lIl11iii[Ii1l1III('3')](Ii1l1III('2'));let liiiil1i=I1IIIil[0x0];let l1l111II=liiiil1i[Ii1l1III('3')]('\x24')[0x0];let Il1li11i=parseInt(I1IIIil[0x1]);let Iill11Ii=getCateData(liiiil1i)[Il1li11i];console[Ii1l1III('7')](JSON[Ii1l1III('15')](Iill11Ii));if(l1l111II[Ii1l1III('1')]('\x21\x21')>=0x0){l1l111II=l1l111II[Ii1l1III('9')]('\x21\x21','');const ii1l1iil=Iill11Ii[Ii1l1III('2e')][Ii1l1III('3')]('\x23');console[Ii1l1III('7')](JSON[Ii1l1III('15')](ii1l1iil));let i1Ili1I={};let IIIllli1={};for(const i1IiIlIl of ii1l1iil){let Ill1iii1=i1IiIlIl[Ii1l1III('3')]('\x24')[0x0];let IIiIII11=l1l111II;if(Ill1iii1[Ii1l1III('1')](Ii1l1III('20'))>0x0){IIiIII11=Ill1iii1[Ii1l1III('3')](Ii1l1III('20'))[0x1];Ill1iii1=Ill1iii1[Ii1l1III('3')](Ii1l1III('20'))[0x0];}if(!i1Ili1I[Ii1l1III('2f')](Ill1iii1)){i1Ili1I[Ill1iii1]=0x1;}else{i1Ili1I[Ill1iii1]++;}IIiIII11=l1l111II+(i1Ili1I[Ill1iii1]>0x1?'\x20'+i1Ili1I[Ill1iii1]:'');if(!IIIllli1[Ii1l1III('2f')](IIiIII11)){IIIllli1[IIiIII11]=[];}IIIllli1[IIiIII11][Ii1l1III('a')](Ill1iii1+'\x24'+i1IiIlIl[Ii1l1III('3')]('\x24')[0x1]);}let III1i1ii=[];let iii1lIIi=[];for(let iliI1I1i in IIIllli1){III1i1ii[Ii1l1III('a')](iliI1I1i);iii1lIIi[Ii1l1III('a')](IIIllli1[iliI1I1i][Ii1l1III('30')]('\x23'));}Iill11Ii[Ii1l1III('31')]=III1i1ii[Ii1l1III('30')](Ii1l1III('2'));Iill11Ii[Ii1l1III('2e')]=iii1lIIi[Ii1l1III('30')](Ii1l1III('2'));}return JSON[Ii1l1III('15')]({'list':[Iill11Ii]});}function play(l1llIIii,illiiIII,lIIIiIiI){return JSON[Ii1l1III('15')]({'parse':0x0,'url':illiiIII});}function search(I1lll,lI1iiIII){return null;}__JS_SPIDER__={'\x69\x6e\x69\x74':init,'\x68\x6f\x6d\x65':home,'\x68\x6f\x6d\x65\x56\x6f\x64':homeVod,'\x63\x61\x74\x65\x67\x6f\x72\x79':category,'\x64\x65\x74\x61\x69\x6c':detail,'\x70\x6c\x61\x79':play,'\x73\x65\x61\x72\x63\x68':search};;iil='jsjiami.com.v6'; \ No newline at end of file diff --git a/lib/mod.js b/lib/mod.js new file mode 100644 index 0000000..719f2b8 --- /dev/null +++ b/lib/mod.js @@ -0,0 +1,138 @@ +const peq = new Uint32Array(0x10000); +const myers_32 = (a, b) => { + const n = a.length; + const m = b.length; + const lst = 1 << (n - 1); + let pv = -1; + let mv = 0; + let sc = n; + let i = n; + while (i--) { + peq[a.charCodeAt(i)] |= 1 << i; + } + for (i = 0; i < m; i++) { + let eq = peq[b.charCodeAt(i)]; + const xv = eq | mv; + eq |= ((eq & pv) + pv) ^ pv; + mv |= ~(eq | pv); + pv &= eq; + if (mv & lst) { + sc++; + } + if (pv & lst) { + sc--; + } + mv = (mv << 1) | 1; + pv = (pv << 1) | ~(xv | mv); + mv &= xv; + } + i = n; + while (i--) { + peq[a.charCodeAt(i)] = 0; + } + return sc; +}; +const myers_x = (b, a) => { + const n = a.length; + const m = b.length; + const mhc = []; + const phc = []; + const hsize = Math.ceil(n / 32); + const vsize = Math.ceil(m / 32); + for (let i = 0; i < hsize; i++) { + phc[i] = -1; + mhc[i] = 0; + } + let j = 0; + for (; j < vsize - 1; j++) { + let mv = 0; + let pv = -1; + const start = j * 32; + const vlen = Math.min(32, m) + start; + for (let k = start; k < vlen; k++) { + peq[b.charCodeAt(k)] |= 1 << k; + } + for (let i = 0; i < n; i++) { + const eq = peq[a.charCodeAt(i)]; + const pb = (phc[(i / 32) | 0] >>> i) & 1; + const mb = (mhc[(i / 32) | 0] >>> i) & 1; + const xv = eq | mv; + const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb; + let ph = mv | ~(xh | pv); + let mh = pv & xh; + if ((ph >>> 31) ^ pb) { + phc[(i / 32) | 0] ^= 1 << i; + } + if ((mh >>> 31) ^ mb) { + mhc[(i / 32) | 0] ^= 1 << i; + } + ph = (ph << 1) | pb; + mh = (mh << 1) | mb; + pv = mh | ~(xv | ph); + mv = ph & xv; + } + for (let k = start; k < vlen; k++) { + peq[b.charCodeAt(k)] = 0; + } + } + let mv = 0; + let pv = -1; + const start = j * 32; + const vlen = Math.min(32, m - start) + start; + for (let k = start; k < vlen; k++) { + peq[b.charCodeAt(k)] |= 1 << k; + } + let score = m; + for (let i = 0; i < n; i++) { + const eq = peq[a.charCodeAt(i)]; + const pb = (phc[(i / 32) | 0] >>> i) & 1; + const mb = (mhc[(i / 32) | 0] >>> i) & 1; + const xv = eq | mv; + const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb; + let ph = mv | ~(xh | pv); + let mh = pv & xh; + score += (ph >>> (m - 1)) & 1; + score -= (mh >>> (m - 1)) & 1; + if ((ph >>> 31) ^ pb) { + phc[(i / 32) | 0] ^= 1 << i; + } + if ((mh >>> 31) ^ mb) { + mhc[(i / 32) | 0] ^= 1 << i; + } + ph = (ph << 1) | pb; + mh = (mh << 1) | mb; + pv = mh | ~(xv | ph); + mv = ph & xv; + } + for (let k = start; k < vlen; k++) { + peq[b.charCodeAt(k)] = 0; + } + return score; +}; +const distance = (a, b) => { + if (a.length < b.length) { + const tmp = b; + b = a; + a = tmp; + } + if (b.length === 0) { + return a.length; + } + if (a.length <= 32) { + return myers_32(a, b); + } + return myers_x(a, b); +}; +const closest = (str, arr) => { + let min_distance = Infinity; + let min_index = 0; + for (let i = 0; i < arr.length; i++) { + const dist = distance(str, arr[i]); + if (dist < min_distance) { + min_distance = dist; + min_index = i; + } + } + return arr[min_index]; +}; +export { closest, distance }; diff --git a/lib/moli.json b/lib/moli.json new file mode 100644 index 0000000..e28c716 --- /dev/null +++ b/lib/moli.json @@ -0,0 +1,764 @@ +{ + "1": [ + { + "key": "0", + "name": "类型", + "value": [ + { + "n": "全部", + "v": "1" + }, + { + "n": "动作", + "v": "5" + }, + { + "n": "爱情", + "v": "6" + }, + { + "n": "科幻", + "v": "7" + }, + { + "n": "恐怖", + "v": "8" + }, + { + "n": "战争", + "v": "9" + }, + { + "n": "喜剧", + "v": "10" + }, + { + "n": "纪录片", + "v": "11" + }, + { + "n": "剧情", + "v": "12" + }, + { + "n": "犯罪", + "v": "30" + }, + { + "n": "动画", + "v": "32" + } + ] + }, + { + "key": "1", + "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": "喜剧" + } + ] + }, + { + "key": "2", + "name": "地区", + "value": [ + { + "n": "全部", + "v": "" + }, + { + "n": "美国", + "v": "美国" + }, + { + "n": "韩国", + "v": "韩国" + }, + { + "n": "英国", + "v": "英国" + }, + { + "n": "日本", + "v": "日本" + }, + { + "n": "泰国", + "v": "泰国" + }, + { + "n": "中国", + "v": "中国" + }, + { + "n": "其他", + "v": "其他" + } + ] + }, + { + "key": "3", + "name": "年份", + "value": [ + { + "n": "全部", + "v": "" + }, + { + "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" + } + ] + }, + { + "key": "4", + "name": "状态", + "value": [ + { + "n": "全部", + "v": "" + }, + { + "n": "完结", + "v": "w" + }, + { + "n": "连载中", + "v": "l" + } + ] + }, + { + "key": "5", + "name": "排序", + "value": [ + { + "n": "时间", + "v": "time" + }, + { + "n": "评分", + "v": "douban" + } + ] + } + ], + "2": [ + { + "key": "0", + "name": "类型", + "value": [ + { + "n": "全部", + "v": "2" + }, + { + "n": "美剧", + "v": "15" + }, + { + "n": "韩剧", + "v": "16" + }, + { + "n": "日剧", + "v": "13" + }, + { + "n": "英剧", + "v": "34" + }, + { + "n": "中国", + "v": "14" + }, + { + "n": "泰剧", + "v": "29" + }, + { + "n": "综艺", + "v": "39" + }, + { + "n": "其他", + "v": "38" + } + ] + }, + { + "key": "1", + "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": "2", + "name": "地区", + "value": [ + { + "n": "全部", + "v": "" + }, + { + "n": "美国", + "v": "美国" + }, + { + "n": "韩国", + "v": "韩国" + }, + { + "n": "英国", + "v": "英国" + }, + { + "n": "日本", + "v": "日本" + }, + { + "n": "泰国", + "v": "泰国" + }, + { + "n": "中国", + "v": "中国" + }, + { + "n": "其他", + "v": "其他" + } + ] + }, + { + "key": "3", + "name": "年份", + "value": [ + { + "n": "全部", + "v": "" + }, + { + "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" + } + ] + }, + { + "key": "4", + "name": "状态", + "value": [ + { + "n": "全部", + "v": "" + }, + { + "n": "完结", + "v": "w" + }, + { + "n": "连载中", + "v": "l" + } + ] + }, + { + "key": "5", + "name": "排序", + "value": [ + { + "n": "时间", + "v": "time" + }, + { + "n": "评分", + "v": "douban" + } + ] + } + ], + "41": [ + { + "key": "0", + "name": "类型", + "value": [ + { + "n": "全部", + "v": "41" + }, + { + "n": "日本", + "v": "42" + }, + { + "n": "其他", + "v": "43" + } + ] + }, + { + "key": "1", + "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": "2", + "name": "地区", + "value": [ + { + "n": "全部", + "v": "" + }, + { + "n": "美国", + "v": "美国" + }, + { + "n": "韩国", + "v": "韩国" + }, + { + "n": "英国", + "v": "英国" + }, + { + "n": "日本", + "v": "日本" + }, + { + "n": "泰国", + "v": "泰国" + }, + { + "n": "中国", + "v": "中国" + }, + { + "n": "其他", + "v": "其他" + } + ] + }, + { + "key": "3", + "name": "年份", + "value": [ + { + "n": "全部", + "v": "" + }, + { + "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" + } + ] + }, + { + "key": "4", + "name": "状态", + "value": [ + { + "n": "全部", + "v": "" + }, + { + "n": "完结", + "v": "w" + }, + { + "n": "连载中", + "v": "l" + } + ] + }, + { + "key": "5", + "name": "排序", + "value": [ + { + "n": "时间", + "v": "time" + }, + { + "n": "评分", + "v": "douban" + } + ] + } + ] +} diff --git a/lib/node-rsa.js b/lib/node-rsa.js new file mode 100644 index 0000000..b5ca093 --- /dev/null +++ b/lib/node-rsa.js @@ -0,0 +1,2 @@ +/*! For license information please see node-rsa.bundle.js.LICENSE.txt */ +!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)})())); \ No newline at end of file diff --git a/lib/pako.min.js b/lib/pako.min.js new file mode 100644 index 0000000..05a54a2 --- /dev/null +++ b/lib/pako.min.js @@ -0,0 +1,2 @@ +/*! pako 2.1.0 https://github.com/nodeca/pako @license (MIT AND Zlib) */ +!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})})); \ No newline at end of file diff --git a/lib/pikpakclass.json b/lib/pikpakclass.json new file mode 100644 index 0000000..7779183 --- /dev/null +++ b/lib/pikpakclass.json @@ -0,0 +1,80 @@ +[ +{"type_id":"https://mypikpak.com/s/self", "type_name":"我的PikPak網盤", "version":"20240301"}, +{"type_id":"https://mypikpak.com/s/VNRT8Wr8BGyw1kt1HkijKR4Qo1","type_name":"高清劇集合集一二"}, +{"type_id":"https://mypikpak.com/s/VNThL9vJ7kj57e2Kr_dlOzc0o1","type_name":"每日更新" }, +{"type_id":"https://mypikpak.com/s/VNBG3CPruacfHy3KVrVR1Qbko1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧1"}, +{"type_id":"https://mypikpak.com/s/VNBXQHEBywwEP48SYNoLGhg-o1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧10"}, +{"type_id":"https://mypikpak.com/s/VNCKGMKeL4KQWxNSeNl-aNK8o1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧11"}, +{"type_id":"https://mypikpak.com/s/VNCKIgIdXbeMUnS27Hc7ifoho1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧12"}, +{"type_id":"https://mypikpak.com/s/VNCKK_lIL4KQWxNSeNl-b-Avo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧13"}, +{"type_id":"https://mypikpak.com/s/VNCPyF1ibAmUFsTwcgPpV2RPo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧14"}, +{"type_id":"https://mypikpak.com/s/VNCPyIV4bsikE1REQUzU3HAKo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧15"}, +{"type_id":"https://mypikpak.com/s/VNCPyLg-XbeMUnS27Hc8e-evo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧16"}, +{"type_id":"https://mypikpak.com/s/VNCPyOHZfY9FgjheL_s6tE0Eo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧17"}, +{"type_id":"https://mypikpak.com/s/VNCdGBWsTsU_1xrcd7arNGkyo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧18"}, +{"type_id":"https://mypikpak.com/s/VNCdGaN8bsik85HcYchTzGwpo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧19"}, +{"type_id":"https://mypikpak.com/s/VNCdGlQdbAmU3kIGsTh-INYQo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧20"}, +{"type_id":"https://mypikpak.com/s/VNCdGvg1QqH-jGYGfgcDoqWho1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧21"}, +{"type_id":"https://mypikpak.com/s/VNCdHOhJTsU_1xrcd7arNWAuo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧22"}, +{"type_id":"https://mypikpak.com/s/VNCdHU8Xbsik85HcYchTzRlwo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧23"}, +{"type_id":"https://mypikpak.com/s/VNDJ--9QP3sxqczyGV8n35pUo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧24"}, +{"type_id":"https://mypikpak.com/s/VNDJ-2f3xeTB-N74vaHopsB8o1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧25"}, +{"type_id":"https://mypikpak.com/s/VNDJ-6m_P3sxqczyGV8n37Lso1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧26"}, +{"type_id":"https://mypikpak.com/s/VNDJ-AxdxeTB-N74vaHoptVeo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧27"}, +{"type_id":"https://mypikpak.com/s/VNDJ-F3_OLXqy_gd7t0qYPsTo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧28"}, +{"type_id":"https://mypikpak.com/s/VNJ-KE7EDnDGgthutL8stFDco1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧29"}, +{"type_id":"https://mypikpak.com/s/VNBGhK25s795X1GmZKtAzarxo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧3"}, +{"type_id":"https://mypikpak.com/s/VNJ-KU-PpnUdNyThzczFHNY0o1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧30"}, +{"type_id":"https://mypikpak.com/s/VNKX8Tmvg-_M2ALfxiCXcfbOo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧31"}, +{"type_id":"https://mypikpak.com/s/VNKX8k1cDAay6DoGUEtaSmGjo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧32"}, +{"type_id":"https://mypikpak.com/s/VNLt5PTTTImas0d3tF0BaJ7Zo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧33"}, +{"type_id":"https://mypikpak.com/s/VNLt5dq-vYqkqbIuRJRjLoiso1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧34"}, +{"type_id":"https://mypikpak.com/s/VNLuwIBrvYqkY2pqZt625qhyo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧35"}, +{"type_id":"https://mypikpak.com/s/VNLuwKtrvYqkY2pqZt625r-eo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧36"}, +{"type_id":"https://mypikpak.com/s/VNLyAGr0Qwh14Yz40bSwR67do1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧37"}, +{"type_id":"https://mypikpak.com/s/VNLyAJDMZAcORH2HWUMhsvGWo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧38"}, +{"type_id":"https://mypikpak.com/s/VNLySlyJpr1J-y7W15G4N6xXo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧39"}, +{"type_id":"https://mypikpak.com/s/VNBGjxzm-8JG74imIZI6qg8Do1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧4"}, +{"type_id":"https://mypikpak.com/s/VNLySocLsRCm72XnqKv7pueto1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧40"}, +{"type_id":"https://mypikpak.com/s/VNLyXhUKwRiUO2berP7_qFoao1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧41"}, +{"type_id":"https://mypikpak.com/s/VNBH3M6lJXuc4t0v-pqB0dFQo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧5"}, +{"type_id":"https://mypikpak.com/s/VNBHRToB_DHT_nmBnwoud8QJo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧6"}, +{"type_id":"https://mypikpak.com/s/VNBHSrWiCjrm4NxyIs_56cHpo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧7"}, +{"type_id":"https://mypikpak.com/s/VNBXPhSLJktjoBJJe8ptXNbco1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧8"}, +{"type_id":"https://mypikpak.com/s/VNBXPwl3bA6kG0eqiyJI3ulOo1","type_name":"/🕸️我的PikPak分享/电视剧140T/电视剧9"}, +{"type_id":"https://mypikpak.com/s/VNDb64cFhcn-yqNU5EWDgRZno1","type_name":"/🕸️我的PikPak分享/电影75T/电影1"}, +{"type_id":"https://mypikpak.com/s/VNM8-8Xlpr1JhKCjzr3hvs2Vo1","type_name":"/🕸️我的PikPak分享/电影75T/电影10"}, +{"type_id":"https://mypikpak.com/s/VNDb67b3hcn-yqNU5EWDgUDWo1","type_name":"/🕸️我的PikPak分享/电影75T/电影2"}, +{"type_id":"https://mypikpak.com/s/VNDca2W6hcn-yqNU5EWE-PLOo1","type_name":"/🕸️我的PikPak分享/电影75T/电影3"}, +{"type_id":"https://mypikpak.com/s/VNE5x-MGTKDwgZ2rSxM1xhrNo1","type_name":"/🕸️我的PikPak分享/电影75T/电影4"}, +{"type_id":"https://mypikpak.com/s/VNEdL2CecnVliWDE0AMdROMzo1","type_name":"/🕸️我的PikPak分享/电影75T/电影5"}, +{"type_id":"https://mypikpak.com/s/VNF8bBfoU5Warn8hY_LZYs3Xo1","type_name":"/🕸️我的PikPak分享/电影75T/电影6"}, +{"type_id":"https://mypikpak.com/s/VNGGxkU4AYqxeOi-Ts-R_4koo1","type_name":"/🕸️我的PikPak分享/电影75T/电影7"}, +{"type_id":"https://mypikpak.com/s/VNGHC0J31cRSfFQDubOJoLCAo1","type_name":"/🕸️我的PikPak分享/电影75T/电影8"}, +{"type_id":"https://mypikpak.com/s/VNM7V9gdpr1JgySnCF-P07aJo1","type_name":"/🕸️我的PikPak分享/电影75T/电影9"}, +{"type_id":"https://mypikpak.com/s/VNRnagBUCfOipBFoWCX8EGSdo1","type_name":"/🕸️我的PikPak分享/高清电影/合集10"}, +{"type_id":"https://mypikpak.com/s/VNRR1cc0LmyyGDe21AoK6Ulho1","type_name":"/🕸️我的PikPak分享/高清电影/合集11"}, +{"type_id":"https://mypikpak.com/s/VNRlVwQYQgqv395kxGBhPmDoo1","type_name":"/🕸️我的PikPak分享/高清电影/合集2"}, +{"type_id":"https://mypikpak.com/s/VNRm3yZtBGywKa118vzvgAg6o1","type_name":"/🕸️我的PikPak分享/高清电影/合集3"}, +{"type_id":"https://mypikpak.com/s/VNRmWOmQBGywKa118vzvlRiZo1","type_name":"/🕸️我的PikPak分享/高清电影/合集4"}, +{"type_id":"https://mypikpak.com/s/VNRmoFmoroRROhEkho_8kY_1o1","type_name":"/🕸️我的PikPak分享/高清电影/合集5"}, +{"type_id":"https://mypikpak.com/s/VNRn6HqiBGywKa118vzvuqFqo1","type_name":"/🕸️我的PikPak分享/高清电影/合集6"}, +{"type_id":"https://mypikpak.com/s/VNRnJASUroRROhEkho_8tpGfo1","type_name":"/🕸️我的PikPak分享/高清电影/合集7"}, +{"type_id":"https://mypikpak.com/s/VNRlg0pS7aWN3HWJGVGp2pZTo1","type_name":"/🕸️我的PikPak分享/高清电影/合集8"}, +{"type_id":"https://mypikpak.com/s/VNRnQbMN7aWN3HWJGVGpSkxFo1","type_name":"/🕸️我的PikPak分享/高清电影/合集9"}, +{"type_id":"https://mypikpak.com/s/VNRTAMNvBGyw1kt1HkijL-n0o1","type_name":"/🕸️我的PikPak分享/高清剧集A/合集11"}, +{"type_id":"https://mypikpak.com/s/VNRTAhOZLmyyX7yiCb6t1jTuo1","type_name":"/🕸️我的PikPak分享/高清剧集A/合集14"}, +{"type_id":"https://mypikpak.com/s/VNRTBCKPLmyyX7yiCb6t1qEKo1","type_name":"/🕸️我的PikPak分享/高清剧集A/合集18"}, +{"type_id":"https://mypikpak.com/s/VNRT8zZXg3b_VYsn0bCwlVh5o1","type_name":"/🕸️我的PikPak分享/高清剧集A/合集3"}, +{"type_id":"https://mypikpak.com/s/VNRT9eYeBGyw1kt1HkijKmL_o1","type_name":"/🕸️我的PikPak分享/高清剧集A/合集5"}, +{"type_id":"https://mypikpak.com/s/VNRTA2HOg3b_VYsn0bCwlhKyo1","type_name":"/🕸️我的PikPak分享/高清剧集A/合集8"}, +{"type_id":"https://mypikpak.com/s/VNRTCK4Lg3b_VYsn0bCwmeWXo1","type_name":"/🕸️我的PikPak分享/高清剧集B/合集24"}, +{"type_id":"https://mypikpak.com/s/VNRTCmbnCfOi1Zl2Ft25Sjw8o1","type_name":"/🕸️我的PikPak分享/高清剧集B/合集30"}, +{"type_id":"https://mypikpak.com/s/VNRTD2ceyM2NQYlKo78MEzY0o1","type_name":"/🕸️我的PikPak分享/高清剧集B/合集32"}, +{"type_id":"https://mypikpak.com/s/VNRTDH_KBGyw1kt1HkijMHG5o1","type_name":"/🕸️我的PikPak分享/高清剧集B/合集34"}, +{"type_id":"https://mypikpak.com/s/VNRTDh9fQgqv_6lSY5Z75Z5Yo1","type_name":"/🕸️我的PikPak分享/高清剧集B/合集35"}, +{"type_id":"https://mypikpak.com/s/VNRTDyshQgqv_6lSY5Z75a42o1","type_name":"/🕸️我的PikPak分享/高清剧集B/合集37"}, +{"type_id":"https://mypikpak.com/s/VNRTEG11roRROhEkho_4qFPYo1","type_name":"/🕸️我的PikPak分享/高清剧集B/合集39"}, +{"type_id":"https://mypikpak.com/s/VNRTFVbPBGyw1kt1HkijMoBko1","type_name":"/🕸️我的PikPak分享/高清剧集B/合集41"} + +] diff --git a/lib/pikpakclass.json.db.gz b/lib/pikpakclass.json.db.gz new file mode 100644 index 0000000..7b6a688 Binary files /dev/null and b/lib/pikpakclass.json.db.gz differ diff --git a/lib/pikpakclass.template.json b/lib/pikpakclass.template.json new file mode 100644 index 0000000..d3e9007 --- /dev/null +++ b/lib/pikpakclass.template.json @@ -0,0 +1,10 @@ +[ +{ +"type_id":"pikpak分享地址1", +"type_name":"分享名稱1" +}, +{ +"type_id":"pikpak分享地址2", +"type_name":"分享名稱2" +} +] diff --git a/lib/pushshare.txt b/lib/pushshare.txt new file mode 100644 index 0000000..827a505 --- /dev/null +++ b/lib/pushshare.txt @@ -0,0 +1,15 @@ +https://www.alipan.com/s/self 我的阿里云盘 +https://pan.quark.cn/s/self 我的夸克云盘 +https://drive.uc.cn/s/self 我的UC云盘 +https://115.com/s/self 我的115云盘 +https://www.123pan.com/s/self 我的123云盘 +https://cloud.189.cn/s/self 我的189云盘 +https://pan.xunlei.com/s/self 我的迅雷云盘 +https://mypikpak.com/s/self 我的PikPak云盘 +https://docs.qq.com/sheet/DVXp5Q2dRTVRXb2VS?tab=ith4wt 阿里云资源每天更新 +https://docs.qq.com/sheet/DVHpJVmRhT3ViV09Q?tab=ppx5bp 资源大全3 +https://docs.qq.com/sheet/DVHpJVmRhT3ViV09Q?tab=qvnx1e 星火阿里云盘 +https://docs.qq.com/sheet/DVXFYSURJRG9qbWJi?tab=BB08J2 短剧更新1 +https://docs.qq.com/sheet/DVXFYSURJRG9qbWJi?tab=x5a2cy 短剧更新2 +magnet:?xt=urn:btih:448aa6f77f1c1a14eb233b1f06b614a8d3193c51 绝命毒师1-5季 pushset1 +magnet:?xt=urn:btih:6EF000064DC6402E00E65F3B2029226196CD55C1 权力的游戏第八季 pushset2 diff --git a/lib/pvideo-arm64-v8a b/lib/pvideo-arm64-v8a new file mode 100644 index 0000000..43cc578 Binary files /dev/null and b/lib/pvideo-arm64-v8a differ diff --git a/lib/pvideo-arm64-v8a.md5 b/lib/pvideo-arm64-v8a.md5 new file mode 100644 index 0000000..ea22286 --- /dev/null +++ b/lib/pvideo-arm64-v8a.md5 @@ -0,0 +1 @@ +EBB46FE68799E60C791A9483B96243A9 diff --git a/lib/pvideo-armeabi-v7a b/lib/pvideo-armeabi-v7a new file mode 100644 index 0000000..74ea01c Binary files /dev/null and b/lib/pvideo-armeabi-v7a differ diff --git a/lib/pvideo-armeabi-v7a.md5 b/lib/pvideo-armeabi-v7a.md5 new file mode 100644 index 0000000..979a608 --- /dev/null +++ b/lib/pvideo-armeabi-v7a.md5 @@ -0,0 +1 @@ +7A4A03FDD48A3950A928D8408C636E00 diff --git a/lib/quarkshare.txt b/lib/quarkshare.txt new file mode 100644 index 0000000..ab1a1c4 --- /dev/null +++ b/lib/quarkshare.txt @@ -0,0 +1,38 @@ +self 我的夸克网盘 +a632967760cf 电影|合集|以ABCD开头合集 +2f59bb5d96b9 电影|合集|以EFGH开头合集 +50828c368def 电影|合集|以IJKL开头合集 +e07e26aecc08 电影|合集|以MNOP开头合集 +0536a38a356e 电影|合集|以QRST开头合集 +e273ef697403 电影|合集|以UVWX开头合集 +c8ac6c88e5d8 电影|合集|以YZ开头合集 +49ab75d52e00 电影|合集|以数字开头合集 +8f1b4b7dc69e 电影|精选高画质高分电影 +5432beae4f1a 电影|韩国R级 +085212df385d 电视剧|TVB、ATV亚视 +cd4c5ac7e830 电视剧|已完结|数字开头 +d19c4ebe1ff7 电视剧|已完结|豆瓣评分9.0以上国产剧 +e1b2ba8b6d6c 电视剧|已完结|首字母ABCD +166fa0a7ca6f 电视剧|已完结|首字母EFGH +37a92c0b7f10 电视剧|已完结|首字母IJKL +fb3386e42af2 电视剧|已完结|首字母NMOP +46ce214f4ed7 电视剧|已完结|首字母QRST +fe4681d7fb43 电视剧|已完结|首字母UVWX +8d65e885b059 电视剧|已完结|首字母YZ +d2dfa32647f6 音乐|书香音乐世纪典藏 +2b4978213b29 音乐|古典音乐精选合集 +651e5fa93057 音乐|大自然音乐系列合集 +12848381dce1 音乐|纯音乐合集 +805d76a08063 音乐|车载无损环绕音效音乐合集 +d1a0b7046b20 音乐|震撼心灵的史诗音乐合集 +6b795218342d 动漫 +ece52d63b698 小品相声|2024德云社 +e827264ea453 小品相声|小品大合集 +d8b4a584fd1a 小品相声|小品纯享合集 +885fd4ba2d92 每日短剧更新 +432b5cd3a225 短剧162g +c54a8e47f82f 短剧114g +047991d5955e 经典剧集 +ecdf7d6ffaaa 经典港剧合集1 +187062318ebc 经典港剧合集2 +9ebb62b93194 2023-2024跨年晚会合集 diff --git a/lib/sambashare.template.txt b/lib/sambashare.template.txt new file mode 100644 index 0000000..ddbc51b --- /dev/null +++ b/lib/sambashare.template.txt @@ -0,0 +1 @@ +user:pass@192.168.1.1/share Samba分享 0 updated_at DESC diff --git a/lib/sing-box.tar.xz b/lib/sing-box.tar.xz new file mode 100644 index 0000000..0d77f14 Binary files /dev/null and b/lib/sing-box.tar.xz differ diff --git a/lib/sing-box.tar.xz.md5 b/lib/sing-box.tar.xz.md5 new file mode 100644 index 0000000..6c5c0a8 --- /dev/null +++ b/lib/sing-box.tar.xz.md5 @@ -0,0 +1 @@ +42df056144fa4e08ea39b624be4cd477 diff --git a/lib/singbox.json b/lib/singbox.json new file mode 100644 index 0000000..f1598bd --- /dev/null +++ b/lib/singbox.json @@ -0,0 +1,200 @@ +{ + "log": { + "level": "debug", + "timestamp": true + }, + "dns": { + "servers": [ + { + "tag": "remote", + "address": "https://8.8.8.8/dns-query", + "strategy": "prefer_ipv4", + "detour": "select" + }, + { + "tag": "local", + "address": "https://223.5.5.5/dns-query", + "strategy": "prefer_ipv4", + "detour": "direct" + }, + { + "tag": "block", + "address": "rcode://success" + }, + { + "tag": "fakeip", + "address": "fakeip" + } + ], + "rules": [ + { + "outbound": ["any"], + "server": "local" + }, + { + "clash_mode": "Global", + "server": "remote" + }, + { + "clash_mode": "Direct", + "server": "local" + } + ], + "fakeip": { + "enabled": true, + "inet4_range": "198.18.0.0/15", + "inet6_range": "fc00::/18" + }, + "strategy": "prefer_ipv4", + "independent_cache": true, + "reverse_mapping": true + }, + "inbounds": [ + { + "type": "mixed", + "tag": "mixed-in", + "listen": "0.0.0.0", + "listen_port": 10172, + "tcp_fast_open":true, + "sniff": false, + "sniff_override_destination": false, + "domain_strategy": "prefer_ipv4", + "set_system_proxy": false + }, + { + "type": "socks", + "tag": "socks-in", + "listen": "0.0.0.0", + "listen_port": 10173, + "tcp_fast_open":true, + "sniff": false, + "sniff_override_destination": false, + "domain_strategy": "prefer_ipv4" + }, + { + "type": "mixed", + "tag": "mixed-in2", + "listen": "0.0.0.0", + "listen_port": 10174, + "tcp_fast_open":true, + "sniff": false, + "sniff_override_destination": false, + "domain_strategy": "prefer_ipv4", + "set_system_proxy": false + }, + { + "type": "mixed", + "tag": "mixed-in3", + "listen": "0.0.0.0", + "listen_port": 10175, + "tcp_fast_open":true, + "sniff": false, + "sniff_override_destination": false, + "domain_strategy": "prefer_ipv4", + "set_system_proxy": false + } + ], + "outbounds": [ + { + "type": "selector", + "tag": "select", + "outbounds": [ + "urltest" + ], + "default": "urltest" + }, + { + "type": "urltest", + "tag": "urltest", + "interval": "30m", + "idle_timeout": "60m", + "interrupt_exist_connections": false, + "outbounds": null + }, + { + "type": "direct", + "tag": "direct" + }, + { + "type": "block", + "tag": "block" + }, + { + "type": "dns", + "tag": "dns-out" + } + ], + "route": { + "rules": [ + { + "type": "logical", + "mode": "or", + "rules": [ + { + "protocol": "dns" + }, + { + "port": 53 + } + ], + "outbound": "dns-out" + }, + { + "ip_is_private": true, + "outbound": "direct" + }, + { + "inbound":[ + "mixed-in2" + ], + "outbound":"select2" + }, + { + "inbound":[ + "mixed-in3" + ], + "outbound":"select3" + }, + { + "clash_mode": "Direct", + "outbound": "direct" + }, + { + "clash_mode": "Global", + "outbound": "select" + }, + { + "type": "logical", + "mode": "or", + "rules": [ + { + "port": 853 + }, + { + "network": "udp", + "port": 443 + }, + { + "protocol": "stun" + } + ], + "outbound": "block" + } + ], + "auto_detect_interface": false + }, + "experimental": { + "cache_file": { + "enabled": true, + "store_rdrc": true + }, + "clash_api": { + "external_controller": "0.0.0.0:19090", + "external_ui": "ui", + "external_ui_download_url": "https://github.com/MetaCubeX/metacubexd/archive/refs/heads/gh-pages.zip", + "external_ui_download_detour": "select", + "default_mode": "Rule" + } + } +} + diff --git a/lib/sortName.js b/lib/sortName.js new file mode 100644 index 0000000..b072933 --- /dev/null +++ b/lib/sortName.js @@ -0,0 +1,178 @@ +var strChineseFirstPY = "YDYQSXMWZSSXJBYMGCCZQPSSQBYCDSCDQLDYLYBSSJGYZZJJFKCCLZDHWDWZJLJPFYYNWJJTMYHZWZHFLZPPQHGSCYYYNJQYXXGJHHSDSJNKKTMOMLCRXYPSNQSECCQZGGLLYJLMYZZSECYKYYHQWJSSGGYXYZYJWWKDJHYCHMYXJTLXJYQBYXZLDWRDJRWYSRLDZJPCBZJJBRCFTLECZSTZFXXZHTRQHYBDLYCZSSYMMRFMYQZPWWJJYFCRWFDFZQPYDDWYXKYJAWJFFXYPSFTZYHHYZYSWCJYXSCLCXXWZZXNBGNNXBXLZSZSBSGPYSYZDHMDZBQBZCWDZZYYTZHBTSYYBZGNTNXQYWQSKBPHHLXGYBFMJEBJHHGQTJCYSXSTKZHLYCKGLYSMZXYALMELDCCXGZYRJXSDLTYZCQKCNNJWHJTZZCQLJSTSTBNXBTYXCEQXGKWJYFLZQLYHYXSPSFXLMPBYSXXXYDJCZYLLLSJXFHJXPJBTFFYABYXBHZZBJYZLWLCZGGBTSSMDTJZXPTHYQTGLJSCQFZKJZJQNLZWLSLHDZBWJNCJZYZSQQYCQYRZCJJWYBRTWPYFTWEXCSKDZCTBZHYZZYYJXZCFFZZMJYXXSDZZOTTBZLQWFCKSZSXFYRLNYJMBDTHJXSQQCCSBXYYTSYFBXDZTGBCNSLCYZZPSAZYZZSCJCSHZQYDXLBPJLLMQXTYDZXSQJTZPXLCGLQTZWJBHCTSYJSFXYEJJTLBGXSXJMYJQQPFZASYJNTYDJXKJCDJSZCBARTDCLYJQMWNQNCLLLKBYBZZSYHQQLTWLCCXTXLLZNTYLNEWYZYXCZXXGRKRMTCNDNJTSYYSSDQDGHSDBJGHRWRQLYBGLXHLGTGXBQJDZPYJSJYJCTMRNYMGRZJCZGJMZMGXMPRYXKJNYMSGMZJYMKMFXMLDTGFBHCJHKYLPFMDXLQJJSMTQGZSJLQDLDGJYCALCMZCSDJLLNXDJFFFFJCZFMZFFPFKHKGDPSXKTACJDHHZDDCRRCFQYJKQCCWJDXHWJLYLLZGCFCQDSMLZPBJJPLSBCJGGDCKKDEZSQCCKJGCGKDJTJDLZYCXKLQSCGJCLTFPCQCZGWPJDQYZJJBYJHSJDZWGFSJGZKQCCZLLPSPKJGQJHZZLJPLGJGJJTHJJYJZCZMLZLYQBGJWMLJKXZDZNJQSYZMLJLLJKYWXMKJLHSKJGBMCLYYMKXJQLBMLLKMDXXKWYXYSLMLPSJQQJQXYXFJTJDXMXXLLCXQBSYJBGWYMBGGBCYXPJYGPEPFGDJGBHBNSQJYZJKJKHXQFGQZKFHYGKHDKLLSDJQXPQYKYBNQSXQNSZSWHBSXWHXWBZZXDMNSJBSBKBBZKLYLXGWXDRWYQZMYWSJQLCJXXJXKJEQXSCYETLZHLYYYSDZPAQYZCMTLSHTZCFYZYXYLJSDCJQAGYSLCQLYYYSHMRQQKLDXZSCSSSYDYCJYSFSJBFRSSZQSBXXPXJYSDRCKGJLGDKZJZBDKTCSYQPYHSTCLDJDHMXMCGXYZHJDDTMHLTXZXYLYMOHYJCLTYFBQQXPFBDFHHTKSQHZYYWCNXXCRWHOWGYJLEGWDQCWGFJYCSNTMYTOLBYGWQWESJPWNMLRYDZSZTXYQPZGCWXHNGPYXSHMYQJXZTDPPBFYHZHTJYFDZWKGKZBLDNTSXHQEEGZZYLZMMZYJZGXZXKHKSTXNXXWYLYAPSTHXDWHZYMPXAGKYDXBHNHXKDPJNMYHYLPMGOCSLNZHKXXLPZZLBMLSFBHHGYGYYGGBHSCYAQTYWLXTZQCEZYDQDQMMHTKLLSZHLSJZWFYHQSWSCWLQAZYNYTLSXTHAZNKZZSZZLAXXZWWCTGQQTDDYZTCCHYQZFLXPSLZYGPZSZNGLNDQTBDLXGTCTAJDKYWNSYZLJHHZZCWNYYZYWMHYCHHYXHJKZWSXHZYXLYSKQYSPSLYZWMYPPKBYGLKZHTYXAXQSYSHXASMCHKDSCRSWJPWXSGZJLWWSCHSJHSQNHCSEGNDAQTBAALZZMSSTDQJCJKTSCJAXPLGGXHHGXXZCXPDMMHLDGTYBYSJMXHMRCPXXJZCKZXSHMLQXXTTHXWZFKHCCZDYTCJYXQHLXDHYPJQXYLSYYDZOZJNYXQEZYSQYAYXWYPDGXDDXSPPYZNDLTWRHXYDXZZJHTCXMCZLHPYYYYMHZLLHNXMYLLLMDCPPXHMXDKYCYRDLTXJCHHZZXZLCCLYLNZSHZJZZLNNRLWHYQSNJHXYNTTTKYJPYCHHYEGKCTTWLGQRLGGTGTYGYHPYHYLQYQGCWYQKPYYYTTTTLHYHLLTYTTSPLKYZXGZWGPYDSSZZDQXSKCQNMJJZZBXYQMJRTFFBTKHZKBXLJJKDXJTLBWFZPPTKQTZTGPDGNTPJYFALQMKGXBDCLZFHZCLLLLADPMXDJHLCCLGYHDZFGYDDGCYYFGYDXKSSEBDHYKDKDKHNAXXYBPBYYHXZQGAFFQYJXDMLJCSQZLLPCHBSXGJYNDYBYQSPZWJLZKSDDTACTBXZDYZYPJZQSJNKKTKNJDJGYYPGTLFYQKASDNTCYHBLWDZHBBYDWJRYGKZYHEYYFJMSDTYFZJJHGCXPLXHLDWXXJKYTCYKSSSMTWCTTQZLPBSZDZWZXGZAGYKTYWXLHLSPBCLLOQMMZSSLCMBJCSZZKYDCZJGQQDSMCYTZQQLWZQZXSSFPTTFQMDDZDSHDTDWFHTDYZJYQJQKYPBDJYYXTLJHDRQXXXHAYDHRJLKLYTWHLLRLLRCXYLBWSRSZZSYMKZZHHKYHXKSMDSYDYCJPBZBSQLFCXXXNXKXWYWSDZYQOGGQMMYHCDZTTFJYYBGSTTTYBYKJDHKYXBELHTYPJQNFXFDYKZHQKZBYJTZBXHFDXKDASWTAWAJLDYJSFHBLDNNTNQJTJNCHXFJSRFWHZFMDRYJYJWZPDJKZYJYMPCYZNYNXFBYTFYFWYGDBNZZZDNYTXZEMMQBSQEHXFZMBMFLZZSRXYMJGSXWZJSPRYDJSJGXHJJGLJJYNZZJXHGXKYMLPYYYCXYTWQZSWHWLYRJLPXSLSXMFSWWKLCTNXNYNPSJSZHDZEPTXMYYWXYYSYWLXJQZQXZDCLEEELMCPJPCLWBXSQHFWWTFFJTNQJHJQDXHWLBYZNFJLALKYYJLDXHHYCSTYYWNRJYXYWTRMDRQHWQCMFJDYZMHMYYXJWMYZQZXTLMRSPWWCHAQBXYGZYPXYYRRCLMPYMGKSJSZYSRMYJSNXTPLNBAPPYPYLXYYZKYNLDZYJZCZNNLMZHHARQMPGWQTZMXXMLLHGDZXYHXKYXYCJMFFYYHJFSBSSQLXXNDYCANNMTCJCYPRRNYTYQNYYMBMSXNDLYLYSLJRLXYSXQMLLYZLZJJJKYZZCSFBZXXMSTBJGNXYZHLXNMCWSCYZYFZLXBRNNNYLBNRTGZQYSATSWRYHYJZMZDHZGZDWYBSSCSKXSYHYTXXGCQGXZZSHYXJSCRHMKKBXCZJYJYMKQHZJFNBHMQHYSNJNZYBKNQMCLGQHWLZNZSWXKHLJHYYBQLBFCDSXDLDSPFZPSKJYZWZXZDDXJSMMEGJSCSSMGCLXXKYYYLNYPWWWGYDKZJGGGZGGSYCKNJWNJPCXBJJTQTJWDSSPJXZXNZXUMELPXFSXTLLXCLJXJJLJZXCTPSWXLYDHLYQRWHSYCSQYYBYAYWJJJQFWQCQQCJQGXALDBZZYJGKGXPLTZYFXJLTPADKYQHPMATLCPDCKBMTXYBHKLENXDLEEGQDYMSAWHZMLJTWYGXLYQZLJEEYYBQQFFNLYXRDSCTGJGXYYNKLLYQKCCTLHJLQMKKZGCYYGLLLJDZGYDHZWXPYSJBZKDZGYZZHYWYFQYTYZSZYEZZLYMHJJHTSMQWYZLKYYWZCSRKQYTLTDXWCTYJKLWSQZWBDCQYNCJSRSZJLKCDCDTLZZZACQQZZDDXYPLXZBQJYLZLLLQDDZQJYJYJZYXNYYYNYJXKXDAZWYRDLJYYYRJLXLLDYXJCYWYWNQCCLDDNYYYNYCKCZHXXCCLGZQJGKWPPCQQJYSBZZXYJSQPXJPZBSBDSFNSFPZXHDWZTDWPPTFLZZBZDMYYPQJRSDZSQZSQXBDGCPZSWDWCSQZGMDHZXMWWFYBPDGPHTMJTHZSMMBGZMBZJCFZWFZBBZMQCFMBDMCJXLGPNJBBXGYHYYJGPTZGZMQBQTCGYXJXLWZKYDPDYMGCFTPFXYZTZXDZXTGKMTYBBCLBJASKYTSSQYYMSZXFJEWLXLLSZBQJJJAKLYLXLYCCTSXMCWFKKKBSXLLLLJYXTYLTJYYTDPJHNHNNKBYQNFQYYZBYYESSESSGDYHFHWTCJBSDZZTFDMXHCNJZYMQWSRYJDZJQPDQBBSTJGGFBKJBXTGQHNGWJXJGDLLTHZHHYYYYYYSXWTYYYCCBDBPYPZYCCZYJPZYWCBDLFWZCWJDXXHYHLHWZZXJTCZLCDPXUJCZZZLYXJJTXPHFXWPYWXZPTDZZBDZCYHJHMLXBQXSBYLRDTGJRRCTTTHYTCZWMXFYTWWZCWJWXJYWCSKYBZSCCTZQNHXNWXXKHKFHTSWOCCJYBCMPZZYKBNNZPBZHHZDLSYDDYTYFJPXYNGFXBYQXCBHXCPSXTYZDMKYSNXSXLHKMZXLYHDHKWHXXSSKQYHHCJYXGLHZXCSNHEKDTGZXQYPKDHEXTYKCNYMYYYPKQYYYKXZLTHJQTBYQHXBMYHSQCKWWYLLHCYYLNNEQXQWMCFBDCCMLJGGXDQKTLXKGNQCDGZJWYJJLYHHQTTTNWCHMXCXWHWSZJYDJCCDBQCDGDNYXZTHCQRXCBHZTQCBXWGQWYYBXHMBYMYQTYEXMQKYAQYRGYZSLFYKKQHYSSQYSHJGJCNXKZYCXSBXYXHYYLSTYCXQTHYSMGSCPMMGCCCCCMTZTASMGQZJHKLOSQYLSWTMXSYQKDZLJQQYPLSYCZTCQQPBBQJZCLPKHQZYYXXDTDDTSJCXFFLLCHQXMJLWCJCXTSPYCXNDTJSHJWXDQQJSKXYAMYLSJHMLALYKXCYYDMNMDQMXMCZNNCYBZKKYFLMCHCMLHXRCJJHSYLNMTJZGZGYWJXSRXCWJGJQHQZDQJDCJJZKJKGDZQGJJYJYLXZXXCDQHHHEYTMHLFSBDJSYYSHFYSTCZQLPBDRFRZTZYKYWHSZYQKWDQZRKMSYNBCRXQBJYFAZPZZEDZCJYWBCJWHYJBQSZYWRYSZPTDKZPFPBNZTKLQYHBBZPNPPTYZZYBQNYDCPJMMCYCQMCYFZZDCMNLFPBPLNGQJTBTTNJZPZBBZNJKLJQYLNBZQHKSJZNGGQSZZKYXSHPZSNBCGZKDDZQANZHJKDRTLZLSWJLJZLYWTJNDJZJHXYAYNCBGTZCSSQMNJPJYTYSWXZFKWJQTKHTZPLBHSNJZSYZBWZZZZLSYLSBJHDWWQPSLMMFBJDWAQYZTCJTBNNWZXQXCDSLQGDSDPDZHJTQQPSWLYYJZLGYXYZLCTCBJTKTYCZJTQKBSJLGMGZDMCSGPYNJZYQYYKNXRPWSZXMTNCSZZYXYBYHYZAXYWQCJTLLCKJJTJHGDXDXYQYZZBYWDLWQCGLZGJGQRQZCZSSBCRPCSKYDZNXJSQGXSSJMYDNSTZTPBDLTKZWXQWQTZEXNQCZGWEZKSSBYBRTSSSLCCGBPSZQSZLCCGLLLZXHZQTHCZMQGYZQZNMCOCSZJMMZSQPJYGQLJYJPPLDXRGZYXCCSXHSHGTZNLZWZKJCXTCFCJXLBMQBCZZWPQDNHXLJCTHYZLGYLNLSZZPCXDSCQQHJQKSXZPBAJYEMSMJTZDXLCJYRYYNWJBNGZZTMJXLTBSLYRZPYLSSCNXPHLLHYLLQQZQLXYMRSYCXZLMMCZLTZSDWTJJLLNZGGQXPFSKYGYGHBFZPDKMWGHCXMSGDXJMCJZDYCABXJDLNBCDQYGSKYDQTXDJJYXMSZQAZDZFSLQXYJSJZYLBTXXWXQQZBJZUFBBLYLWDSLJHXJYZJWTDJCZFQZQZZDZSXZZQLZCDZFJHYSPYMPQZMLPPLFFXJJNZZYLSJEYQZFPFZKSYWJJJHRDJZZXTXXGLGHYDXCSKYSWMMZCWYBAZBJKSHFHJCXMHFQHYXXYZFTSJYZFXYXPZLCHMZMBXHZZSXYFYMNCWDABAZLXKTCSHHXKXJJZJSTHYGXSXYYHHHJWXKZXSSBZZWHHHCWTZZZPJXSNXQQJGZYZYWLLCWXZFXXYXYHXMKYYSWSQMNLNAYCYSPMJKHWCQHYLAJJMZXHMMCNZHBHXCLXTJPLTXYJHDYYLTTXFSZHYXXSJBJYAYRSMXYPLCKDUYHLXRLNLLSTYZYYQYGYHHSCCSMZCTZQXKYQFPYYRPFFLKQUNTSZLLZMWWTCQQYZWTLLMLMPWMBZSSTZRBPDDTLQJJBXZCSRZQQYGWCSXFWZLXCCRSZDZMCYGGDZQSGTJSWLJMYMMZYHFBJDGYXCCPSHXNZCSBSJYJGJMPPWAFFYFNXHYZXZYLREMZGZCYZSSZDLLJCSQFNXZKPTXZGXJJGFMYYYSNBTYLBNLHPFZDCYFBMGQRRSSSZXYSGTZRNYDZZCDGPJAFJFZKNZBLCZSZPSGCYCJSZLMLRSZBZZLDLSLLYSXSQZQLYXZLSKKBRXBRBZCYCXZZZEEYFGKLZLYYHGZSGZLFJHGTGWKRAAJYZKZQTSSHJJXDCYZUYJLZYRZDQQHGJZXSSZBYKJPBFRTJXLLFQWJHYLQTYMBLPZDXTZYGBDHZZRBGXHWNJTJXLKSCFSMWLSDQYSJTXKZSCFWJLBXFTZLLJZLLQBLSQMQQCGCZFPBPHZCZJLPYYGGDTGWDCFCZQYYYQYSSCLXZSKLZZZGFFCQNWGLHQYZJJCZLQZZYJPJZZBPDCCMHJGXDQDGDLZQMFGPSYTSDYFWWDJZJYSXYYCZCYHZWPBYKXRYLYBHKJKSFXTZJMMCKHLLTNYYMSYXYZPYJQYCSYCWMTJJKQYRHLLQXPSGTLYYCLJSCPXJYZFNMLRGJJTYZBXYZMSJYJHHFZQMSYXRSZCWTLRTQZSSTKXGQKGSPTGCZNJSJCQCXHMXGGZTQYDJKZDLBZSXJLHYQGGGTHQSZPYHJHHGYYGKGGCWJZZYLCZLXQSFTGZSLLLMLJSKCTBLLZZSZMMNYTPZSXQHJCJYQXYZXZQZCPSHKZZYSXCDFGMWQRLLQXRFZTLYSTCTMJCXJJXHJNXTNRZTZFQYHQGLLGCXSZSJDJLJCYDSJTLNYXHSZXCGJZYQPYLFHDJSBPCCZHJJJQZJQDYBSSLLCMYTTMQTBHJQNNYGKYRQYQMZGCJKPDCGMYZHQLLSLLCLMHOLZGDYYFZSLJCQZLYLZQJESHNYLLJXGJXLYSYYYXNBZLJSSZCQQCJYLLZLTJYLLZLLBNYLGQCHXYYXOXCXQKYJXXXYKLXSXXYQXCYKQXQCSGYXXYQXYGYTQOHXHXPYXXXULCYEYCHZZCBWQBBWJQZSCSZSSLZYLKDESJZWMYMCYTSDSXXSCJPQQSQYLYYZYCMDJDZYWCBTJSYDJKCYDDJLBDJJSODZYSYXQQYXDHHGQQYQHDYXWGMMMAJDYBBBPPBCMUUPLJZSMTXERXJMHQNUTPJDCBSSMSSSTKJTSSMMTRCPLZSZMLQDSDMJMQPNQDXCFYNBFSDQXYXHYAYKQYDDLQYYYSSZBYDSLNTFQTZQPZMCHDHCZCWFDXTMYQSPHQYYXSRGJCWTJTZZQMGWJJTJHTQJBBHWZPXXHYQFXXQYWYYHYSCDYDHHQMNMTMWCPBSZPPZZGLMZFOLLCFWHMMSJZTTDHZZYFFYTZZGZYSKYJXQYJZQBHMBZZLYGHGFMSHPZFZSNCLPBQSNJXZSLXXFPMTYJYGBXLLDLXPZJYZJYHHZCYWHJYLSJEXFSZZYWXKZJLUYDTMLYMQJPWXYHXSKTQJEZRPXXZHHMHWQPWQLYJJQJJZSZCPHJLCHHNXJLQWZJHBMZYXBDHHYPZLHLHLGFWLCHYYTLHJXCJMSCPXSTKPNHQXSRTYXXTESYJCTLSSLSTDLLLWWYHDHRJZSFGXTSYCZYNYHTDHWJSLHTZDQDJZXXQHGYLTZPHCSQFCLNJTCLZPFSTPDYNYLGMJLLYCQHYSSHCHYLHQYQTMZYPBYWRFQYKQSYSLZDQJMPXYYSSRHZJNYWTQDFZBWWTWWRXCWHGYHXMKMYYYQMSMZHNGCEPMLQQMTCWCTMMPXJPJJHFXYYZSXZHTYBMSTSYJTTQQQYYLHYNPYQZLCYZHZWSMYLKFJXLWGXYPJYTYSYXYMZCKTTWLKSMZSYLMPWLZWXWQZSSAQSYXYRHSSNTSRAPXCPWCMGDXHXZDZYFJHGZTTSBJHGYZSZYSMYCLLLXBTYXHBBZJKSSDMALXHYCFYGMQYPJYCQXJLLLJGSLZGQLYCJCCZOTYXMTMTTLLWTGPXYMZMKLPSZZZXHKQYSXCTYJZYHXSHYXZKXLZWPSQPYHJWPJPWXQQYLXSDHMRSLZZYZWTTCYXYSZZSHBSCCSTPLWSSCJCHNLCGCHSSPHYLHFHHXJSXYLLNYLSZDHZXYLSXLWZYKCLDYAXZCMDDYSPJTQJZLNWQPSSSWCTSTSZLBLNXSMNYYMJQBQHRZWTYYDCHQLXKPZWBGQYBKFCMZWPZLLYYLSZYDWHXPSBCMLJBSCGBHXLQHYRLJXYSWXWXZSLDFHLSLYNJLZYFLYJYCDRJLFSYZFSLLCQYQFGJYHYXZLYLMSTDJCYHBZLLNWLXXYGYYHSMGDHXXHHLZZJZXCZZZCYQZFNGWPYLCPKPYYPMCLQKDGXZGGWQBDXZZKZFBXXLZXJTPJPTTBYTSZZDWSLCHZHSLTYXHQLHYXXXYYZYSWTXZKHLXZXZPYHGCHKCFSYHUTJRLXFJXPTZTWHPLYXFCRHXSHXKYXXYHZQDXQWULHYHMJTBFLKHTXCWHJFWJCFPQRYQXCYYYQYGRPYWSGSUNGWCHKZDXYFLXXHJJBYZWTSXXNCYJJYMSWZJQRMHXZWFQSYLZJZGBHYNSLBGTTCSYBYXXWXYHXYYXNSQYXMQYWRGYQLXBBZLJSYLPSYTJZYHYZAWLRORJMKSCZJXXXYXCHDYXRYXXJDTSQFXLYLTSFFYXLMTYJMJUYYYXLTZCSXQZQHZXLYYXZHDNBRXXXJCTYHLBRLMBRLLAXKYLLLJLYXXLYCRYLCJTGJCMTLZLLCYZZPZPCYAWHJJFYBDYYZSMPCKZDQYQPBPCJPDCYZMDPBCYYDYCNNPLMTMLRMFMMGWYZBSJGYGSMZQQQZTXMKQWGXLLPJGZBQCDJJJFPKJKCXBLJMSWMDTQJXLDLPPBXCWRCQFBFQJCZAHZGMYKPHYYHZYKNDKZMBPJYXPXYHLFPNYYGXJDBKXNXHJMZJXSTRSTLDXSKZYSYBZXJLXYSLBZYSLHXJPFXPQNBYLLJQKYGZMCYZZYMCCSLCLHZFWFWYXZMWSXTYNXJHPYYMCYSPMHYSMYDYSHQYZCHMJJMZCAAGCFJBBHPLYZYLXXSDJGXDHKXXTXXNBHRMLYJSLTXMRHNLXQJXYZLLYSWQGDLBJHDCGJYQYCMHWFMJYBMBYJYJWYMDPWHXQLDYGPDFXXBCGJSPCKRSSYZJMSLBZZJFLJJJLGXZGYXYXLSZQYXBEXYXHGCXBPLDYHWETTWWCJMBTXCHXYQXLLXFLYXLLJLSSFWDPZSMYJCLMWYTCZPCHQEKCQBWLCQYDPLQPPQZQFJQDJHYMMCXTXDRMJWRHXCJZYLQXDYYNHYYHRSLSRSYWWZJYMTLTLLGTQCJZYABTCKZCJYCCQLJZQXALMZYHYWLWDXZXQDLLQSHGPJFJLJHJABCQZDJGTKHSSTCYJLPSWZLXZXRWGLDLZRLZXTGSLLLLZLYXXWGDZYGBDPHZPBRLWSXQBPFDWOFMWHLYPCBJCCLDMBZPBZZLCYQXLDOMZBLZWPDWYYGDSTTHCSQSCCRSSSYSLFYBFNTYJSZDFNDPDHDZZMBBLSLCMYFFGTJJQWFTMTPJWFNLBZCMMJTGBDZLQLPYFHYYMJYLSDCHDZJWJCCTLJCLDTLJJCPDDSQDSSZYBNDBJLGGJZXSXNLYCYBJXQYCBYLZCFZPPGKCXZDZFZTJJFJSJXZBNZYJQTTYJYHTYCZHYMDJXTTMPXSPLZCDWSLSHXYPZGTFMLCJTYCBPMGDKWYCYZCDSZZYHFLYCTYGWHKJYYLSJCXGYWJCBLLCSNDDBTZBSCLYZCZZSSQDLLMQYYHFSLQLLXFTYHABXGWNYWYYPLLSDLDLLBJCYXJZMLHLJDXYYQYTDLLLBUGBFDFBBQJZZMDPJHGCLGMJJPGAEHHBWCQXAXHHHZCHXYPHJAXHLPHJPGPZJQCQZGJJZZUZDMQYYBZZPHYHYBWHAZYJHYKFGDPFQSDLZMLJXKXGALXZDAGLMDGXMWZQYXXDXXPFDMMSSYMPFMDMMKXKSYZYSHDZKXSYSMMZZZMSYDNZZCZXFPLSTMZDNMXCKJMZTYYMZMZZMSXHHDCZJEMXXKLJSTLWLSQLYJZLLZJSSDPPMHNLZJCZYHMXXHGZCJMDHXTKGRMXFWMCGMWKDTKSXQMMMFZZYDKMSCLCMPCGMHSPXQPZDSSLCXKYXTWLWJYAHZJGZQMCSNXYYMMPMLKJXMHLMLQMXCTKZMJQYSZJSYSZHSYJZJCDAJZYBSDQJZGWZQQXFKDMSDJLFWEHKZQKJPEYPZYSZCDWYJFFMZZYLTTDZZEFMZLBNPPLPLPEPSZALLTYLKCKQZKGENQLWAGYXYDPXLHSXQQWQCQXQCLHYXXMLYCCWLYMQYSKGCHLCJNSZKPYZKCQZQLJPDMDZHLASXLBYDWQLWDNBQCRYDDZTJYBKBWSZDXDTNPJDTCTQDFXQQMGNXECLTTBKPWSLCTYQLPWYZZKLPYGZCQQPLLKCCYLPQMZCZQCLJSLQZDJXLDDHPZQDLJJXZQDXYZQKZLJCYQDYJPPYPQYKJYRMPCBYMCXKLLZLLFQPYLLLMBSGLCYSSLRSYSQTMXYXZQZFDZUYSYZTFFMZZSMZQHZSSCCMLYXWTPZGXZJGZGSJSGKDDHTQGGZLLBJDZLCBCHYXYZHZFYWXYZYMSDBZZYJGTSMTFXQYXQSTDGSLNXDLRYZZLRYYLXQHTXSRTZNGZXBNQQZFMYKMZJBZYMKBPNLYZPBLMCNQYZZZSJZHJCTZKHYZZJRDYZHNPXGLFZTLKGJTCTSSYLLGZRZBBQZZKLPKLCZYSSUYXBJFPNJZZXCDWXZYJXZZDJJKGGRSRJKMSMZJLSJYWQSKYHQJSXPJZZZLSNSHRNYPZTWCHKLPSRZLZXYJQXQKYSJYCZTLQZYBBYBWZPQDWWYZCYTJCJXCKCWDKKZXSGKDZXWWYYJQYYTCYTDLLXWKCZKKLCCLZCQQDZLQLCSFQCHQHSFSMQZZLNBJJZBSJHTSZDYSJQJPDLZCDCWJKJZZLPYCGMZWDJJBSJQZSYZYHHXJPBJYDSSXDZNCGLQMBTSFSBPDZDLZNFGFJGFSMPXJQLMBLGQCYYXBQKDJJQYRFKZTJDHCZKLBSDZCFJTPLLJGXHYXZCSSZZXSTJYGKGCKGYOQXJPLZPBPGTGYJZGHZQZZLBJLSQFZGKQQJZGYCZBZQTLDXRJXBSXXPZXHYZYCLWDXJJHXMFDZPFZHQHQMQGKSLYHTYCGFRZGNQXCLPDLBZCSCZQLLJBLHBZCYPZZPPDYMZZSGYHCKCPZJGSLJLNSCDSLDLXBMSTLDDFJMKDJDHZLZXLSZQPQPGJLLYBDSZGQLBZLSLKYYHZTTNTJYQTZZPSZQZTLLJTYYLLQLLQYZQLBDZLSLYYZYMDFSZSNHLXZNCZQZPBWSKRFBSYZMTHBLGJPMCZZLSTLXSHTCSYZLZBLFEQHLXFLCJLYLJQCBZLZJHHSSTBRMHXZHJZCLXFNBGXGTQJCZTMSFZKJMSSNXLJKBHSJXNTNLZDNTLMSJXGZJYJCZXYJYJWRWWQNZTNFJSZPZSHZJFYRDJSFSZJZBJFZQZZHZLXFYSBZQLZSGYFTZDCSZXZJBQMSZKJRHYJZCKMJKHCHGTXKXQGLXPXFXTRTYLXJXHDTSJXHJZJXZWZLCQSBTXWXGXTXXHXFTSDKFJHZYJFJXRZSDLLLTQSQQZQWZXSYQTWGWBZCGZLLYZBCLMQQTZHZXZXLJFRMYZFLXYSQXXJKXRMQDZDMMYYBSQBHGZMWFWXGMXLZPYYTGZYCCDXYZXYWGSYJYZNBHPZJSQSYXSXRTFYZGRHZTXSZZTHCBFCLSYXZLZQMZLMPLMXZJXSFLBYZMYQHXJSXRXSQZZZSSLYFRCZJRCRXHHZXQYDYHXSJJHZCXZBTYNSYSXJBQLPXZQPYMLXZKYXLXCJLCYSXXZZLXDLLLJJYHZXGYJWKJRWYHCPSGNRZLFZWFZZNSXGXFLZSXZZZBFCSYJDBRJKRDHHGXJLJJTGXJXXSTJTJXLYXQFCSGSWMSBCTLQZZWLZZKXJMLTMJYHSDDBXGZHDLBMYJFRZFSGCLYJBPMLYSMSXLSZJQQHJZFXGFQFQBPXZGYYQXGZTCQWYLTLGWSGWHRLFSFGZJMGMGBGTJFSYZZGZYZAFLSSPMLPFLCWBJZCLJJMZLPJJLYMQDMYYYFBGYGYZMLYZDXQYXRQQQHSYYYQXYLJTYXFSFSLLGNQCYHYCWFHCCCFXPYLYPLLZYXXXXXKQHHXSHJZCFZSCZJXCPZWHHHHHAPYLQALPQAFYHXDYLUKMZQGGGDDESRNNZLTZGCHYPPYSQJJHCLLJTOLNJPZLJLHYMHEYDYDSQYCDDHGZUNDZCLZYZLLZNTNYZGSLHSLPJJBDGWXPCDUTJCKLKCLWKLLCASSTKZZDNQNTTLYYZSSYSSZZRYLJQKCQDHHCRXRZYDGRGCWCGZQFFFPPJFZYNAKRGYWYQPQXXFKJTSZZXSWZDDFBBXTBGTZKZNPZZPZXZPJSZBMQHKCYXYLDKLJNYPKYGHGDZJXXEAHPNZKZTZCMXCXMMJXNKSZQNMNLWBWWXJKYHCPSTMCSQTZJYXTPCTPDTNNPGLLLZSJLSPBLPLQHDTNJNLYYRSZFFJFQWDPHZDWMRZCCLODAXNSSNYZRESTYJWJYJDBCFXNMWTTBYLWSTSZGYBLJPXGLBOCLHPCBJLTMXZLJYLZXCLTPNCLCKXTPZJSWCYXSFYSZDKNTLBYJCYJLLSTGQCBXRYZXBXKLYLHZLQZLNZCXWJZLJZJNCJHXMNZZGJZZXTZJXYCYYCXXJYYXJJXSSSJSTSSTTPPGQTCSXWZDCSYFPTFBFHFBBLZJCLZZDBXGCXLQPXKFZFLSYLTUWBMQJHSZBMDDBCYSCCLDXYCDDQLYJJWMQLLCSGLJJSYFPYYCCYLTJANTJJPWYCMMGQYYSXDXQMZHSZXPFTWWZQSWQRFKJLZJQQYFBRXJHHFWJJZYQAZMYFRHCYYBYQWLPEXCCZSTYRLTTDMQLYKMBBGMYYJPRKZNPBSXYXBHYZDJDNGHPMFSGMWFZMFQMMBCMZZCJJLCNUXYQLMLRYGQZCYXZLWJGCJCGGMCJNFYZZJHYCPRRCMTZQZXHFQGTJXCCJEAQCRJYHPLQLSZDJRBCQHQDYRHYLYXJSYMHZYDWLDFRYHBPYDTSSCNWBXGLPZMLZZTQSSCPJMXXYCSJYTYCGHYCJWYRXXLFEMWJNMKLLSWTXHYYYNCMMCWJDQDJZGLLJWJRKHPZGGFLCCSCZMCBLTBHBQJXQDSPDJZZGKGLFQYWBZYZJLTSTDHQHCTCBCHFLQMPWDSHYYTQWCNZZJTLBYMBPDYYYXSQKXWYYFLXXNCWCXYPMAELYKKJMZZZBRXYYQJFLJPFHHHYTZZXSGQQMHSPGDZQWBWPJHZJDYSCQWZKTXXSQLZYYMYSDZGRXCKKUJLWPYSYSCSYZLRMLQSYLJXBCXTLWDQZPCYCYKPPPNSXFYZJJRCEMHSZMSXLXGLRWGCSTLRSXBZGBZGZTCPLUJLSLYLYMTXMTZPALZXPXJTJWTCYYZLBLXBZLQMYLXPGHDSLSSDMXMBDZZSXWHAMLCZCPJMCNHJYSNSYGCHSKQMZZQDLLKABLWJXSFMOCDXJRRLYQZKJMYBYQLYHETFJZFRFKSRYXFJTWDSXXSYSQJYSLYXWJHSNLXYYXHBHAWHHJZXWMYLJCSSLKYDZTXBZSYFDXGXZJKHSXXYBSSXDPYNZWRPTQZCZENYGCXQFJYKJBZMLJCMQQXUOXSLYXXLYLLJDZBTYMHPFSTTQQWLHOKYBLZZALZXQLHZWRRQHLSTMYPYXJJXMQSJFNBXYXYJXXYQYLTHYLQYFMLKLJTMLLHSZWKZHLJMLHLJKLJSTLQXYLMBHHLNLZXQJHXCFXXLHYHJJGBYZZKBXSCQDJQDSUJZYYHZHHMGSXCSYMXFEBCQWWRBPYYJQTYZCYQYQQZYHMWFFHGZFRJFCDPXNTQYZPDYKHJLFRZXPPXZDBBGZQSTLGDGYLCQMLCHHMFYWLZYXKJLYPQHSYWMQQGQZMLZJNSQXJQSYJYCBEHSXFSZPXZWFLLBCYYJDYTDTHWZSFJMQQYJLMQXXLLDTTKHHYBFPWTYYSQQWNQWLGWDEBZWCMYGCULKJXTMXMYJSXHYBRWFYMWFRXYQMXYSZTZZTFYKMLDHQDXWYYNLCRYJBLPSXCXYWLSPRRJWXHQYPHTYDNXHHMMYWYTZCSQMTSSCCDALWZTCPQPYJLLQZYJSWXMZZMMYLMXCLMXCZMXMZSQTZPPQQBLPGXQZHFLJJHYTJSRXWZXSCCDLXTYJDCQJXSLQYCLZXLZZXMXQRJMHRHZJBHMFLJLMLCLQNLDXZLLLPYPSYJYSXCQQDCMQJZZXHNPNXZMEKMXHYKYQLXSXTXJYYHWDCWDZHQYYBGYBCYSCFGPSJNZDYZZJZXRZRQJJYMCANYRJTLDPPYZBSTJKXXZYPFDWFGZZRPYMTNGXZQBYXNBUFNQKRJQZMJEGRZGYCLKXZDSKKNSXKCLJSPJYYZLQQJYBZSSQLLLKJXTBKTYLCCDDBLSPPFYLGYDTZJYQGGKQTTFZXBDKTYYHYBBFYTYYBCLPDYTGDHRYRNJSPTCSNYJQHKLLLZSLYDXXWBCJQSPXBPJZJCJDZFFXXBRMLAZHCSNDLBJDSZBLPRZTSWSBXBCLLXXLZDJZSJPYLYXXYFTFFFBHJJXGBYXJPMMMPSSJZJMTLYZJXSWXTYLEDQPJMYGQZJGDJLQJWJQLLSJGJGYGMSCLJJXDTYGJQJQJCJZCJGDZZSXQGSJGGCXHQXSNQLZZBXHSGZXCXYLJXYXYYDFQQJHJFXDHCTXJYRXYSQTJXYEFYYSSYYJXNCYZXFXMSYSZXYYSCHSHXZZZGZZZGFJDLTYLNPZGYJYZYYQZPBXQBDZTZCZYXXYHHSQXSHDHGQHJHGYWSZTMZMLHYXGEBTYLZKQWYTJZRCLEKYSTDBCYKQQSAYXCJXWWGSBHJYZYDHCSJKQCXSWXFLTYNYZPZCCZJQTZWJQDZZZQZLJJXLSBHPYXXPSXSHHEZTXFPTLQYZZXHYTXNCFZYYHXGNXMYWXTZSJPTHHGYMXMXQZXTSBCZYJYXXTYYZYPCQLMMSZMJZZLLZXGXZAAJZYXJMZXWDXZSXZDZXLEYJJZQBHZWZZZQTZPSXZTDSXJJJZNYAZPHXYYSRNQDTHZHYYKYJHDZXZLSWCLYBZYECWCYCRYLCXNHZYDZYDYJDFRJJHTRSQTXYXJRJHOJYNXELXSFSFJZGHPZSXZSZDZCQZBYYKLSGSJHCZSHDGQGXYZGXCHXZJWYQWGYHKSSEQZZNDZFKWYSSTCLZSTSYMCDHJXXYWEYXCZAYDMPXMDSXYBSQMJMZJMTZQLPJYQZCGQHXJHHLXXHLHDLDJQCLDWBSXFZZYYSCHTYTYYBHECXHYKGJPXHHYZJFXHWHBDZFYZBCAPNPGNYDMSXHMMMMAMYNBYJTMPXYYMCTHJBZYFCGTYHWPHFTWZZEZSBZEGPFMTSKFTYCMHFLLHGPZJXZJGZJYXZSBBQSCZZLZCCSTPGXMJSFTCCZJZDJXCYBZLFCJSYZFGSZLYBCWZZBYZDZYPSWYJZXZBDSYUXLZZBZFYGCZXBZHZFTPBGZGEJBSTGKDMFHYZZJHZLLZZGJQZLSFDJSSCBZGPDLFZFZSZYZYZSYGCXSNXXCHCZXTZZLJFZGQSQYXZJQDCCZTQCDXZJYQJQCHXZTDLGSCXZSYQJQTZWLQDQZTQCHQQJZYEZZZPBWKDJFCJPZTYPQYQTTYNLMBDKTJZPQZQZZFPZSBNJLGYJDXJDZZKZGQKXDLPZJTCJDQBXDJQJSTCKNXBXZMSLYJCQMTJQWWCJQNJNLLLHJCWQTBZQYDZCZPZZDZYDDCYZZZCCJTTJFZDPRRTZTJDCQTQZDTJNPLZBCLLCTZSXKJZQZPZLBZRBTJDCXFCZDBCCJJLTQQPLDCGZDBBZJCQDCJWYNLLZYZCCDWLLXWZLXRXNTQQCZXKQLSGDFQTDDGLRLAJJTKUYMKQLLTZYTDYYCZGJWYXDXFRSKSTQTENQMRKQZHHQKDLDAZFKYPBGGPZREBZZYKZZSPEGJXGYKQZZZSLYSYYYZWFQZYLZZLZHWCHKYPQGNPGBLPLRRJYXCCSYYHSFZFYBZYYTGZXYLXCZWXXZJZBLFFLGSKHYJZEYJHLPLLLLCZGXDRZELRHGKLZZYHZLYQSZZJZQLJZFLNBHGWLCZCFJYSPYXZLZLXGCCPZBLLCYBBBBUBBCBPCRNNZCZYRBFSRLDCGQYYQXYGMQZWTZYTYJXYFWTEHZZJYWLCCNTZYJJZDEDPZDZTSYQJHDYMBJNYJZLXTSSTPHNDJXXBYXQTZQDDTJTDYYTGWSCSZQFLSHLGLBCZPHDLYZJYCKWTYTYLBNYTSDSYCCTYSZYYEBHEXHQDTWNYGYCLXTSZYSTQMYGZAZCCSZZDSLZCLZRQXYYELJSBYMXSXZTEMBBLLYYLLYTDQYSHYMRQWKFKBFXNXSBYCHXBWJYHTQBPBSBWDZYLKGZSKYHXQZJXHXJXGNLJKZLYYCDXLFYFGHLJGJYBXQLYBXQPQGZTZPLNCYPXDJYQYDYMRBESJYYHKXXSTMXRCZZYWXYQYBMCLLYZHQYZWQXDBXBZWZMSLPDMYSKFMZKLZCYQYCZLQXFZZYDQZPZYGYJYZMZXDZFYFYTTQTZHGSPCZMLCCYTZXJCYTJMKSLPZHYSNZLLYTPZCTZZCKTXDHXXTQCYFKSMQCCYYAZHTJPCYLZLYJBJXTPNYLJYYNRXSYLMMNXJSMYBCSYSYLZYLXJJQYLDZLPQBFZZBLFNDXQKCZFYWHGQMRDSXYCYTXNQQJZYYPFZXDYZFPRXEJDGYQBXRCNFYYQPGHYJDYZXGRHTKYLNWDZNTSMPKLBTHBPYSZBZTJZSZZJTYYXZPHSSZZBZCZPTQFZMYFLYPYBBJQXZMXXDJMTSYSKKBJZXHJCKLPSMKYJZCXTMLJYXRZZQSLXXQPYZXMKYXXXJCLJPRMYYGADYSKQLSNDHYZKQXZYZTCGHZTLMLWZYBWSYCTBHJHJFCWZTXWYTKZLXQSHLYJZJXTMPLPYCGLTBZZTLZJCYJGDTCLKLPLLQPJMZPAPXYZLKKTKDZCZZBNZDYDYQZJYJGMCTXLTGXSZLMLHBGLKFWNWZHDXUHLFMKYSLGXDTWWFRJEJZTZHYDXYKSHWFZCQSHKTMQQHTZHYMJDJSKHXZJZBZZXYMPAGQMSTPXLSKLZYNWRTSQLSZBPSPSGZWYHTLKSSSWHZZLYYTNXJGMJSZSUFWNLSOZTXGXLSAMMLBWLDSZYLAKQCQCTMYCFJBSLXCLZZCLXXKSBZQCLHJPSQPLSXXCKSLNHPSFQQYTXYJZLQLDXZQJZDYYDJNZPTUZDSKJFSLJHYLZSQZLBTXYDGTQFDBYAZXDZHZJNHHQBYKNXJJQCZMLLJZKSPLDYCLBBLXKLELXJLBQYCXJXGCNLCQPLZLZYJTZLJGYZDZPLTQCSXFDMNYCXGBTJDCZNBGBQYQJWGKFHTNPYQZQGBKPBBYZMTJDYTBLSQMPSXTBNPDXKLEMYYCJYNZCTLDYKZZXDDXHQSHDGMZSJYCCTAYRZLPYLTLKXSLZCGGEXCLFXLKJRTLQJAQZNCMBYDKKCXGLCZJZXJHPTDJJMZQYKQSECQZDSHHADMLZFMMZBGNTJNNLGBYJBRBTMLBYJDZXLCJLPLDLPCQDHLXZLYCBLCXZZJADJLNZMMSSSMYBHBSQKBHRSXXJMXSDZNZPXLGBRHWGGFCXGMSKLLTSJYYCQLTSKYWYYHYWXBXQYWPYWYKQLSQPTNTKHQCWDQKTWPXXHCPTHTWUMSSYHBWCRWXHJMKMZNGWTMLKFGHKJYLSYYCXWHYECLQHKQHTTQKHFZLDXQWYZYYDESBPKYRZPJFYYZJCEQDZZDLATZBBFJLLCXDLMJSSXEGYGSJQXCWBXSSZPDYZCXDNYXPPZYDLYJCZPLTXLSXYZYRXCYYYDYLWWNZSAHJSYQYHGYWWAXTJZDAXYSRLTDPSSYYFNEJDXYZHLXLLLZQZSJNYQYQQXYJGHZGZCYJCHZLYCDSHWSHJZYJXCLLNXZJJYYXNFXMWFPYLCYLLABWDDHWDXJMCXZTZPMLQZHSFHZYNZTLLDYWLSLXHYMMYLMBWWKYXYADTXYLLDJPYBPWUXJMWMLLSAFDLLYFLBHHHBQQLTZJCQJLDJTFFKMMMBYTHYGDCQRDDWRQJXNBYSNWZDBYYTBJHPYBYTTJXAAHGQDQTMYSTQXKBTZPKJLZRBEQQSSMJJBDJOTGTBXPGBKTLHQXJJJCTHXQDWJLWRFWQGWSHCKRYSWGFTGYGBXSDWDWRFHWYTJJXXXJYZYSLPYYYPAYXHYDQKXSHXYXGSKQHYWFDDDPPLCJLQQEEWXKSYYKDYPLTJTHKJLTCYYHHJTTPLTZZCDLTHQKZXQYSTEEYWYYZYXXYYSTTJKLLPZMCYHQGXYHSRMBXPLLNQYDQHXSXXWGDQBSHYLLPJJJTHYJKYPPTHYYKTYEZYENMDSHLCRPQFDGFXZPSFTLJXXJBSWYYSKSFLXLPPLBBBLBSFXFYZBSJSSYLPBBFFFFSSCJDSTZSXZRYYSYFFSYZYZBJTBCTSBSDHRTJJBYTCXYJEYLXCBNEBJDSYXYKGSJZBXBYTFZWGENYHHTHZHHXFWGCSTBGXKLSXYWMTMBYXJSTZSCDYQRCYTWXZFHMYMCXLZNSDJTTTXRYCFYJSBSDYERXJLJXBBDEYNJGHXGCKGSCYMBLXJMSZNSKGXFBNBPTHFJAAFXYXFPXMYPQDTZCXZZPXRSYWZDLYBBKTYQPQJPZYPZJZNJPZJLZZFYSBTTSLMPTZRTDXQSJEHBZYLZDHLJSQMLHTXTJECXSLZZSPKTLZKQQYFSYGYWPCPQFHQHYTQXZKRSGTTSQCZLPTXCDYYZXSQZSLXLZMYCPCQBZYXHBSXLZDLTCDXTYLZJYYZPZYZLTXJSJXHLPMYTXCQRBLZSSFJZZTNJYTXMYJHLHPPLCYXQJQQKZZSCPZKSWALQSBLCCZJSXGWWWYGYKTJBBZTDKHXHKGTGPBKQYSLPXPJCKBMLLXDZSTBKLGGQKQLSBKKTFXRMDKBFTPZFRTBBRFERQGXYJPZSSTLBZTPSZQZSJDHLJQLZBPMSMMSXLQQNHKNBLRDDNXXDHDDJCYYGYLXGZLXSYGMQQGKHBPMXYXLYTQWLWGCPBMQXCYZYDRJBHTDJYHQSHTMJSBYPLWHLZFFNYPMHXXHPLTBQPFBJWQDBYGPNZTPFZJGSDDTQSHZEAWZZYLLTYYBWJKXXGHLFKXDJTMSZSQYNZGGSWQSPHTLSSKMCLZXYSZQZXNCJDQGZDLFNYKLJCJLLZLMZZNHYDSSHTHZZLZZBBHQZWWYCRZHLYQQJBEYFXXXWHSRXWQHWPSLMSSKZTTYGYQQWRSLALHMJTQJSMXQBJJZJXZYZKXBYQXBJXSHZTSFJLXMXZXFGHKZSZGGYLCLSARJYHSLLLMZXELGLXYDJYTLFBHBPNLYZFBBHPTGJKWETZHKJJXZXXGLLJLSTGSHJJYQLQZFKCGNNDJSSZFDBCTWWSEQFHQJBSAQTGYPQLBXBMMYWXGSLZHGLZGQYFLZBYFZJFRYSFMBYZHQGFWZSYFYJJPHZBYYZFFWODGRLMFTWLBZGYCQXCDJYGZYYYYTYTYDWEGAZYHXJLZYYHLRMGRXXZCLHNELJJTJTPWJYBJJBXJJTJTEEKHWSLJPLPSFYZPQQBDLQJJTYYQLYZKDKSQJYYQZLDQTGJQYZJSUCMRYQTHTEJMFCTYHYPKMHYZWJDQFHYYXWSHCTXRLJHQXHCCYYYJLTKTTYTMXGTCJTZAYYOCZLYLBSZYWJYTSJYHBYSHFJLYGJXXTMZYYLTXXYPZLXYJZYZYYPNHMYMDYYLBLHLSYYQQLLNJJYMSOYQBZGDLYXYLCQYXTSZEGXHZGLHWBLJHEYXTWQMAKBPQCGYSHHEGQCMWYYWLJYJHYYZLLJJYLHZYHMGSLJLJXCJJYCLYCJPCPZJZJMMYLCQLNQLJQJSXYJMLSZLJQLYCMMHCFMMFPQQMFYLQMCFFQMMMMHMZNFHHJGTTHHKHSLNCHHYQDXTMMQDCYZYXYQMYQYLTDCYYYZAZZCYMZYDLZFFFMMYCQZWZZMABTBYZTDMNZZGGDFTYPCGQYTTSSFFWFDTZQSSYSTWXJHXYTSXXYLBYQHWWKXHZXWZNNZZJZJJQJCCCHYYXBZXZCYZTLLCQXYNJYCYYCYNZZQYYYEWYCZDCJYCCHYJLBTZYYCQWMPWPYMLGKDLDLGKQQBGYCHJXY"; +//此处收录了375个多音字 +var oMultiDiff = { "19969": "DZ", "19975": "WM", "19988": "QJ", "20048": "YL", "20056": "SC", "20060": "NM", "20094": "QG", "20127": "QJ", "20167": "QC", "20193": "YG", "20250": "KH", "20256": "ZC", "20282": "SC", "20285": "QJG", "20291": "TD", "20314": "YD", "20340": "NE", "20375": "TD", "20389": "YJ", "20391": "CZ", "20415": "PB", "20446": "YS", "20447": "SQ", "20504": "TC", "20608": "KG", "20854": "QJ", "20857": "ZC", "20911": "PF", "20504": "TC", "20608": "KG", "20854": "QJ", "20857": "ZC", "20911": "PF", "20985": "AW", "21032": "PB", "21048": "XQ", "21049": "SC", "21089": "YS", "21119": "JC", "21242": "SB", "21273": "SC", "21305": "YP", "21306": "QO", "21330": "ZC", "21333": "SDC", "21345": "QK", "21378": "CA", "21397": "SC", "21414": "XS", "21442": "SC", "21477": "JG", "21480": "TD", "21484": "ZS", "21494": "YX", "21505": "YX", "21512": "HG", "21523": "XH", "21537": "PB", "21542": "PF", "21549": "KH", "21571": "E", "21574": "DA", "21588": "TD", "21589": "O", "21618": "ZC", "21621": "KHA", "21632": "ZJ", "21654": "KG", "21679": "LKG", "21683": "KH", "21710": "A", "21719": "YH", "21734": "WOE", "21769": "A", "21780": "WN", "21804": "XH", "21834": "A", "21899": "ZD", "21903": "RN", "21908": "WO", "21939": "ZC", "21956": "SA", "21964": "YA", "21970": "TD", "22003": "A", "22031": "JG", "22040": "XS", "22060": "ZC", "22066": "ZC", "22079": "MH", "22129": "XJ", "22179": "XA", "22237": "NJ", "22244": "TD", "22280": "JQ", "22300": "YH", "22313": "XW", "22331": "YQ", "22343": "YJ", "22351": "PH", "22395": "DC", "22412": "TD", "22484": "PB", "22500": "PB", "22534": "ZD", "22549": "DH", "22561": "PB", "22612": "TD", "22771": "KQ", "22831": "HB", "22841": "JG", "22855": "QJ", "22865": "XQ", "23013": "ML", "23081": "WM", "23487": "SX", "23558": "QJ", "23561": "YW", "23586": "YW", "23614": "YW", "23615": "SN", "23631": "PB", "23646": "ZS", "23663": "ZT", "23673": "YG", "23762": "TD", "23769": "ZS", "23780": "QJ", "23884": "QK", "24055": "XH", "24113": "DC", "24162": "ZC", "24191": "GA", "24273": "QJ", "24324": "NL", "24377": "TD", "24378": "QJ", "24439": "PF", "24554": "ZS", "24683": "TD", "24694": "WE", "24733": "LK", "24925": "TN", "25094": "ZG", "25100": "XQ", "25103": "XH", "25153": "PB", "25170": "PB", "25179": "KG", "25203": "PB", "25240": "ZS", "25282": "FB", "25303": "NA", "25324": "KG", "25341": "ZY", "25373": "WZ", "25375": "XJ", "25384": "A", "25457": "A", "25528": "SD", "25530": "SC", "25552": "TD", "25774": "ZC", "25874": "ZC", "26044": "YW", "26080": "WM", "26292": "PB", "26333": "PB", "26355": "ZY", "26366": "CZ", "26397": "ZC", "26399": "QJ", "26415": "ZS", "26451": "SB", "26526": "ZC", "26552": "JG", "26561": "TD", "26588": "JG", "26597": "CZ", "26629": "ZS", "26638": "YL", "26646": "XQ", "26653": "KG", "26657": "XJ", "26727": "HG", "26894": "ZC", "26937": "ZS", "26946": "ZC", "26999": "KJ", "27099": "KJ", "27449": "YQ", "27481": "XS", "27542": "ZS", "27663": "ZS", "27748": "TS", "27784": "SC", "27788": "ZD", "27795": "TD", "27812": "O", "27850": "PB", "27852": "MB", "27895": "SL", "27898": "PL", "27973": "QJ", "27981": "KH", "27986": "HX", "27994": "XJ", "28044": "YC", "28065": "WG", "28177": "SM", "28267": "QJ", "28291": "KH", "28337": "ZQ", "28463": "TL", "28548": "DC", "28601": "TD", "28689": "PB", "28805": "JG", "28820": "QG", "28846": "PB", "28952": "TD", "28975": "ZC", "29100": "A", "29325": "QJ", "29575": "SL", "29602": "FB", "30010": "TD", "30044": "CX", "30058": "PF", "30091": "YSP", "30111": "YN", "30229": "XJ", "30427": "SC", "30465": "SX", "30631": "YQ", "30655": "QJ", "30684": "QJG", "30707": "SD", "30729": "XH", "30796": "LG", "30917": "PB", "31074": "NM", "31085": "JZ", "31109": "SC", "31181": "ZC", "31192": "MLB", "31293": "JQ", "31400": "YX", "31584": "YJ", "31896": "ZN", "31909": "ZY", "31995": "XJ", "32321": "PF", "32327": "ZY", "32418": "HG", "32420": "XQ", "32421": "HG", "32438": "LG", "32473": "GJ", "32488": "TD", "32521": "QJ", "32527": "PB", "32562": "ZSQ", "32564": "JZ", "32735": "ZD", "32793": "PB", "33071": "PF", "33098": "XL", "33100": "YA", "33152": "PB", "33261": "CX", "33324": "BP", "33333": "TD", "33406": "YA", "33426": "WM", "33432": "PB", "33445": "JG", "33486": "ZN", "33493": "TS", "33507": "QJ", "33540": "QJ", "33544": "ZC", "33564": "XQ", "33617": "YT", "33632": "QJ", "33636": "XH", "33637": "YX", "33694": "WG", "33705": "PF", "33728": "YW", "33882": "SR", "34067": "WM", "34074": "YW", "34121": "QJ", "34255": "ZC", "34259": "XL", "34425": "JH", "34430": "XH", "34485": "KH", "34503": "YS", "34532": "HG", "34552": "XS", "34558": "YE", "34593": "ZL", "34660": "YQ", "34892": "XH", "34928": "SC", "34999": "QJ", "35048": "PB", "35059": "SC", "35098": "ZC", "35203": "TQ", "35265": "JX", "35299": "JX", "35782": "SZ", "35828": "YS", "35830": "E", "35843": "TD", "35895": "YG", "35977": "MH", "36158": "JG", "36228": "QJ", "36426": "XQ", "36466": "DC", "36710": "JC", "36711": "ZYG", "36767": "PB", "36866": "SK", "36951": "YW", "37034": "YX", "37063": "XH", "37218": "ZC", "37325": "ZC", "38063": "PB", "38079": "TD", "38085": "QY", "38107": "DC", "38116": "TD", "38123": "YD", "38224": "HG", "38241": "XTC", "38271": "ZC", "38415": "YE", "38426": "KH", "38461": "YD", "38463": "AE", "38466": "PB", "38477": "XJ", "38518": "YT", "38551": "WK", "38585": "ZC", "38704": "XS", "38739": "LJ", "38761": "GJ", "38808": "SQ", "39048": "JG", "39049": "XJ", "39052": "HG", "39076": "CZ", "39271": "XT", "39534": "TD", "39552": "TD", "39584": "PB", "39647": "SB", "39730": "LG", "39748": "TPB", "40109": "ZQ", "40479": "ND", "40516": "HG", "40536": "HG", "40583": "QJ", "40765": "YQ", "40784": "QJ", "40840": "YK", "40863": "QJG" }; + + +function checkCh(ch) { + var uni = ch.charCodeAt(0); + //如果不在汉字处理范围之内,返回原字符,也可以调用自己的处理函数 + if (uni > 40869 || uni < 19968) + return ch; //dealWithOthers(ch); + //检查是否是多音字,是按多音字处理,不是就直接在strChineseFirstPY字符串中找对应的首字母 + return (oMultiDiff[uni] ? oMultiDiff[uni] : (strChineseFirstPY.charAt(uni - 19968))); +} + +function mkRslt(arr) { + var arrRslt = [""]; + for (var i = 0, len = arr.length; i < len; i++) { + var str = arr[i]; + var strlen = str.length; + if (strlen == 1) { + for (var k = 0; k < arrRslt.length; k++) { + arrRslt[k] += str; + } + } else { + var tmpArr = arrRslt.slice(0); + arrRslt = []; + for (k = 0; k < strlen; k++) { + //复制一个相同的arrRslt + var tmp = tmpArr.slice(0); + //把当前字符str[k]添加到每个元素末尾 + for (var j = 0; j < tmp.length; j++) { + tmp[j] += str.charAt(k); + } + //把复制并修改后的数组连接到arrRslt上 + arrRslt = arrRslt.concat(tmp); + } + } + } + return arrRslt; +} +//两端去空格函数 +String.prototype.trim = function() { return this.replace(/(^\s*)|(\s*$)/g, ""); } + +//参数——中文字符串 +//返回值——拼音首字母串数组 +export function getFirstLetterList(str) { + if (typeof(str) != "string") + throw new Error(-1, "请传入字符串类型的参数!"); + var arrResult = new Array(); //保存中间结果的数组 + for (var i = 0, len = str.length; i < len; i++) { + //获得unicode码 + var ch = str.charAt(i); + //检查该unicode码是否在处理范围之内,在则返回该码对映汉字的拼音首字母,不在则调用其它函数处理 + arrResult.push(checkCh(ch)); + } + //处理arrResult,返回所有可能的拼音首字母串数组 + return mkRslt(arrResult); +} + +// 判断字符串是否全是中文 +function isAllChinese(str) { + return /^[\u4E00-\u9FA5]+$/.test(str); +} + +// 判断字符是否为中文 +function isChinese(char) { + return /^[\u4E00-\u9FA5]$/.test(char); +} + +// 中文拼音名称排序 +export const sortListByCN = (vodList,key,order) => { + if(!key){ + return vodList + } + order = order||'asc'; // 默认正序 + let ASCarr = vodList.sort((a, b) => { + a = a[key]; + b = b[key]; + // 数字排在字符串前面 + if (typeof a === 'number' && typeof b === 'string') { + return -1; + } + + if (typeof a === 'string' && typeof b === 'number') { + return 1; + } + + // 当存在非数字时 + if (isNaN(a) || isNaN(b)) { + + // 全汉字的排在非全汉字的后面 + if (isAllChinese(a) && !isAllChinese(b)) { + return 1; + } + + if (!isAllChinese(a) && isAllChinese(b)) { + return -1; + } + + // 存在非数字的数据时,都转为字符串进行比较 + a = a.toString(); + b = b.toString(); + + let result = 0; + + // 依次比较两个字符串的各项字符 + for (let index = 0; index < ((a.length - b.length) ? b.length : a.length); index++) { + + // 汉字排在非汉字的后面 + if (!isChinese(a[index]) && isChinese(b[index])) { + result = -1; + } + + if (isChinese(a[index]) && !isChinese(b[index])) { + result = 1; + } + + // 若两个汉字进行比较,则比较他们的拼音首字母 + if (isChinese(a[index]) && isChinese(b[index])) { + let pinyinA = getFirstLetterList(a[index]).toString(); + let pinyinB = getFirstLetterList(b[index]).toString(); + + result = pinyinA.localeCompare(pinyinB, 'zh-Hans-CN', { sensitivity: 'accent' }); + } + + // 若已经比较出结果,则跳出循环,不再继续比较剩余字符 + if (result !== 0) { + break + } + } + + // 只要有一个无法转换为数字——转换为字符串进行比较——先按字符排序,然后按照数字排序 + return result || a.toString().localeCompare(b.toString(), 'zh-Hans-CN', { sensitivity: 'accent' }); + } else { + // 都能转换为数字——转换为数字进行比较——从小到大排序 + return Number(a) - Number(b); + } + }); + if(order==='desc'){ + ASCarr.reverse(); + } + return ASCarr +}; + +// 首字母开头排序 +export const sortListByFirst = (vodList,key) => { + key = key||'vod_name'; + // 名字以特殊符号开头的应用列表 + const symbol_list = []; + // 名字以中文开头的应用列表 + const cn_list = []; + // 名字以英文开头的应用列表 + const en_list = []; + // 名字以数字开头的应用列表 + const num_list = []; + + vodList.forEach((vod) => { + const { vod_name } = vod; + //通过正则进行数据分类 + if (/[\u4e00-\u9fa5]/.test(vod_name[0])) { + cn_list.push(vod); + } else if (/[a-zA-Z]/.test(vod_name[0])) { + en_list.push(vod); + } else if (/[\d]/.test(vod_name[0])) { + num_list.push(vod); + } else { + symbol_list.push(vod); + } + }); + //按照要求的方式进行数据排序重组 + const newList = [ + ...cn_list.sort((a, b) => a.vod_name[0]?.localeCompare(b.vod_name[0])), + ...en_list.sort((a, b) => a.vod_name[0].localeCompare(b.vod_name[0])),//localeCompare可以不区分大小写的进行排序 + ...num_list.sort((a, b) => a.vod_name[0] - b.vod_name[0]), + ...symbol_list.sort((a, b) => a.vod_name[0] - b.vod_name[0]) + ]; + return newList +}; \ No newline at end of file diff --git a/lib/tgsearch.json b/lib/tgsearch.json new file mode 100644 index 0000000..33d84bf --- /dev/null +++ b/lib/tgsearch.json @@ -0,0 +1,59 @@ +{ + "recommend":"名称", + "class":[ + { + "type_id":"名称", + "type_name":"名称" + }, + { + "type_id":"片名", + "type_name":"片名" + }, + { + "type_id":"LIST:iso,原盘", + "type_name":"ISO,原盘" + }, + { + "type_id":"ali", + "type_name":"阿里" + }, + { + "type_id":"quark", + "type_name":"夸克" + }, + { + "type_id":"uc.cn", + "type_name":"UC" + }, + { + "type_id":"123", + "type_name":"123" + }, + { + "type_id":"189", + "type_name":"189" + }, + { + "type_id":"LIST:115,anxia", + "type_name":"115" + }, + { + "type_id":"pikpak", + "type_name":"PikPak" + }, + { + "type_id":"xunlei", + "type_name":"迅雷" + }, + { + "type_id":"mp4", + "type_name":"MP4" + }, + { + "type_id":"LIST:测试1,测试2", + "type_name":"测试" + } + ], + "jx":0, + "parse":0 +} diff --git a/lib/thundershare.txt b/lib/thundershare.txt new file mode 100644 index 0000000..f287420 --- /dev/null +++ b/lib/thundershare.txt @@ -0,0 +1,15 @@ +self 我的迅雷雲盤 +VNg6eg34ncoRGHp98SBeYRUmA1?pwd=ywp2 刘德华高清电影电视剧全集 +VNg6YRPKiFWtWRrEfTcmpo4nA1?pwd=3dk6 李连杰电影合集 +VNg6af5Yu4IVpCplLZEXpTCHA1?pwd=e3tk 周星驰电影合集 +VNg6ZDjEu4IVpCplLZEXovZMA1?pwd=i83r 成龙电影合集 +VNg6aYN6S67q560x6uBmiTxGA1?pwd=vcff 金庸武侠作品电视剧版合集 +VNgOl6jLwFWEAL3PSyCmyc9vA1?pwd=z3jn 邵氏电影合集中文字幕 +VNfYsaHU3GXpR3Wc6X2vLDRXA1?pwd=k327 1962-2015[欧美][动作][007系列4K][24部][409GB] +VNgOliKdkJeHX8To1KuRhkabA1?pwd=8dfq 中国大陆老电影合集 +VNgOnbo2VGbPDhR48Bgvh0GMA1?pwd=n59u TVB香港电视剧 +VNgOkmDE9KxEdCnfuqBq-nh6A1?pwd=nr2b 豆瓣top电影合集 +VNfGhoL9ptGD3gtENXxflDZ6A1?pwd=4a3t 5TB精选迅雷云盘资源 +VNgOlIg5E5iq61_VnPABvO3BA1?pwd=bxix 港台大陆三级影片 +VNg9Y19oPimZP2d2xRhFUkQ6A1?pwd=nr2c 中国电视剧合集 +VNjwyIJVrUPzmOwSA07z6EP1A1?pwd=a84q 抖音短剧合集 diff --git a/lib/tokenm.json b/lib/tokenm.json new file mode 100644 index 0000000..96094fc --- /dev/null +++ b/lib/tokenm.json @@ -0,0 +1,97 @@ +{ +"token":"", +"open_token":"", +"open_api_url":"postparam|http://api.extscreen.com/aliyundrive/token", +"oauth_client_id":"", +"oauth_client_secret":"", +"oauth_auth_url":"", +"oauth_refresh_url":"", +"is_vip":true, +"vip_thread_limit":32, +"vip_thread_limit_night":"19-23=10", +"vod_flags":"4kz|auto", +"quark_thread_limit":32, +"quark_thread_limit_night":"19-23=16", +"quark_is_guest":false, +"quark_vip_thread_limit":32, +"quark_vip_thread_limit_night":"19-23=16", +"quark_flags":"4kz|auto", +"uc_thread_limit":10, +"uc_is_vip":false, +"uc_vip_thread_limit":10, +"uc_flags":"4kz|auto", +"uc_thread_limit_night":"19-23=8", +"uc_vip_thread_limit_night":"19-23=8", +"thunder_thread_limit":2, +"thunder_is_vip":false, +"thunder_vip_thread_limit":2, +"thunder_flags":"4kz", +"aliproxy":"", +"aliproxy_url":"./aliproxy.tar.xz", +"proxy":"", +"danmu":true, +"quark_danmu":true, +"quark_cookie":"", +"uc_cookie":"", +"thunder_username":"", +"thunder_password":"", +"thunder_captchatoken":"", +"yd_auth":"", +"yd_thread_limit":4, +"yd_flags":"auto|4kz", +"yd_danmu":true, +"pikpak_username":"", +"pikpak_password":"", +"pikpak_flags":"4kz", +"pikpak_thread_limit":2, +"pikpak_vip_thread_limit":2, +"pikpak_proxy":"proxy", +"pikpak_proxy_onlyapi":false, +"pikpak_danmu":true, +"wgcf_key":"", +"wgcf_key2":"", +"wgcf_ipport":"", +"wgcf_xray_url":"./xray.gz", +"wgcf_geoip_url":"./geoip.dat.gz", +"wgcf_json_url":"./wgcf.json", +"wgcf_vless_id":"", +"wgcf_vless_optname":"singapore.com:443", +"wgcf_vless_worker":"", +"wgcf_vless_path":"/?ed=2048", +"wgcf_vless_protocol":"vless", +"wgcf_vless_network":"ws", +"wgcf_vless_tls":false, +"libxl_url":"./libxlsdk.tar.xz", +"youtube_proxy":"proxy", +"singbox_url":"./sing-box.tar.xz", +"singbox_subscribe_url":"", +"singbox_clash2singbox_url":"./clash2singbox.tar.xz", +"singbox_template_url":"./singbox.json", +"singbox_wgcf_json_url":"./wgcf2singbox.json", +"pan115_cookie":"", +"pan115_thread_limit":0, +"pan115_vip_thread_limit":0, +"pan115_is_vip":false, +"pan115_flags":"4kz", +"pan115_speed_limit":0, +"pan115_speed_limit_mobile":10485760, +"pan115_auto_delete":true, +"pan115_delete_code":"", +"tgsearch_url":"./tgsearch.tar.xz", +"tgsearch_api_id":"", +"tgsearch_api_hash":"", +"tgsearch_api_session":"", +"tgsearch_api_session_v1":"", +"tgsearch_api_proxy":"proxy", +"tgsearch_api_url":"http://127.0.0.1:10199/", +"tgsearch_media_url":"http://127.0.0.1:10199/", +"allinone_url":"./allinone.tar.xz", +"pan_order":"ali|quark|uc|123|189|115|yd|thunder|pikpak", +"pan123_username":"", +"pan123_password":"", +"pan123_flags":"4kz", +"pan189_username":"", +"pan189_password":"", +"pan189_flags":"4kz", +"uc_ut":"" +} diff --git a/lib/tokentemplate.json b/lib/tokentemplate.json new file mode 100644 index 0000000..96094fc --- /dev/null +++ b/lib/tokentemplate.json @@ -0,0 +1,97 @@ +{ +"token":"", +"open_token":"", +"open_api_url":"postparam|http://api.extscreen.com/aliyundrive/token", +"oauth_client_id":"", +"oauth_client_secret":"", +"oauth_auth_url":"", +"oauth_refresh_url":"", +"is_vip":true, +"vip_thread_limit":32, +"vip_thread_limit_night":"19-23=10", +"vod_flags":"4kz|auto", +"quark_thread_limit":32, +"quark_thread_limit_night":"19-23=16", +"quark_is_guest":false, +"quark_vip_thread_limit":32, +"quark_vip_thread_limit_night":"19-23=16", +"quark_flags":"4kz|auto", +"uc_thread_limit":10, +"uc_is_vip":false, +"uc_vip_thread_limit":10, +"uc_flags":"4kz|auto", +"uc_thread_limit_night":"19-23=8", +"uc_vip_thread_limit_night":"19-23=8", +"thunder_thread_limit":2, +"thunder_is_vip":false, +"thunder_vip_thread_limit":2, +"thunder_flags":"4kz", +"aliproxy":"", +"aliproxy_url":"./aliproxy.tar.xz", +"proxy":"", +"danmu":true, +"quark_danmu":true, +"quark_cookie":"", +"uc_cookie":"", +"thunder_username":"", +"thunder_password":"", +"thunder_captchatoken":"", +"yd_auth":"", +"yd_thread_limit":4, +"yd_flags":"auto|4kz", +"yd_danmu":true, +"pikpak_username":"", +"pikpak_password":"", +"pikpak_flags":"4kz", +"pikpak_thread_limit":2, +"pikpak_vip_thread_limit":2, +"pikpak_proxy":"proxy", +"pikpak_proxy_onlyapi":false, +"pikpak_danmu":true, +"wgcf_key":"", +"wgcf_key2":"", +"wgcf_ipport":"", +"wgcf_xray_url":"./xray.gz", +"wgcf_geoip_url":"./geoip.dat.gz", +"wgcf_json_url":"./wgcf.json", +"wgcf_vless_id":"", +"wgcf_vless_optname":"singapore.com:443", +"wgcf_vless_worker":"", +"wgcf_vless_path":"/?ed=2048", +"wgcf_vless_protocol":"vless", +"wgcf_vless_network":"ws", +"wgcf_vless_tls":false, +"libxl_url":"./libxlsdk.tar.xz", +"youtube_proxy":"proxy", +"singbox_url":"./sing-box.tar.xz", +"singbox_subscribe_url":"", +"singbox_clash2singbox_url":"./clash2singbox.tar.xz", +"singbox_template_url":"./singbox.json", +"singbox_wgcf_json_url":"./wgcf2singbox.json", +"pan115_cookie":"", +"pan115_thread_limit":0, +"pan115_vip_thread_limit":0, +"pan115_is_vip":false, +"pan115_flags":"4kz", +"pan115_speed_limit":0, +"pan115_speed_limit_mobile":10485760, +"pan115_auto_delete":true, +"pan115_delete_code":"", +"tgsearch_url":"./tgsearch.tar.xz", +"tgsearch_api_id":"", +"tgsearch_api_hash":"", +"tgsearch_api_session":"", +"tgsearch_api_session_v1":"", +"tgsearch_api_proxy":"proxy", +"tgsearch_api_url":"http://127.0.0.1:10199/", +"tgsearch_media_url":"http://127.0.0.1:10199/", +"allinone_url":"./allinone.tar.xz", +"pan_order":"ali|quark|uc|123|189|115|yd|thunder|pikpak", +"pan123_username":"", +"pan123_password":"", +"pan123_flags":"4kz", +"pan189_username":"", +"pan189_password":"", +"pan189_flags":"4kz", +"uc_ut":"" +} diff --git a/lib/ucshare.txt b/lib/ucshare.txt new file mode 100644 index 0000000..e292109 --- /dev/null +++ b/lib/ucshare.txt @@ -0,0 +1,13 @@ +self 我的UC网盘 +10b31a7c5f844 资源分享 +42e08284433b4?pwd=NZQb 影视ziyuan每日更新 +c0503fdee6644 2024最新精整豆瓣TOP250部 +391b86c09cd24 2023日剧 +21f04a22052f4 2023韩剧 +369e30038dae4 音乐 +5e0c900955654 完美世界 +d695231313ba4 沧元图-东宁府番外篇(2024) +db80b739256e4 诛仙2 +cdbc974cf3c14 斗罗大陆2-绝世唐门4K +714a0d7f921b4 七夕之国-2024 +9cca54e72e7e4 遮天4K diff --git a/lib/webdav.example.json b/lib/webdav.example.json new file mode 100644 index 0000000..d234006 --- /dev/null +++ b/lib/webdav.example.json @@ -0,0 +1,13 @@ +{ + "drives": [ + { + "name": "webdav.router", + "search": true, + "searchable": true, + "server": "http://192.168.1.1:5678", + "path": "/dav", + "user": "guest", + "pass": "guest_Api789" + } + ] +} diff --git a/lib/wgcf.json b/lib/wgcf.json new file mode 100644 index 0000000..2428601 --- /dev/null +++ b/lib/wgcf.json @@ -0,0 +1,262 @@ +{ + "log": { + "loglevel": "debug" + }, + "dns": { + "disableFallbackIfMatch": true, + "hosts": {}, + "queryStrategy": "UseIP", + "servers": [ + { + "address": "tcp://1.1.1.1", + "concurrency": true + }, + { + "address": "tcp+local://223.5.5.5:53", + "concurrency": true, + "domains": [ + "full:cdn-all.xn--b6gac.eu.org" + ], + "skipFallback": true + } + ] + }, + "outbounds": [ + { + "settings": { + "secretKey": "KEY", + "mtu": 1400, + "peers": [ + { + "publicKey": "bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=", + "endpoint" : "engage.cloudflareclient.com:2408", + "keepAlive": 30 + } + ], + "address": [ + "172.16.0.2/32", + "2606:4700:110:893c:845c:536b:5565:8106/128" + ], + "kernelMode": false, + "worker":16 + }, + "protocol": "wireguard", + "streamSettings": { + "network": "tcp" + }, + "tag":"directwarp" + }, + { + "settings": { + "secretKey": "KEY", + "mtu": 1280, + "peers": [ + { + "publicKey": "bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=", + "endpoint" : "engage.cloudflareclient.com:2408", + "keepAlive": 30 + } + ], + "address": [ + "172.16.0.2/32", + "2606:4700:110:893c:845c:536b:5565:8106/128" + ], + "kernelMode": false, + "worker":16 + }, + "protocol": "wireguard", + "streamSettings": { + "network": "tcp" + }, + "tag":"warpoverwarp", + "proxySettings": { + "tag": "directwarp", + "transportLayer": true + } + }, + { + "protocol": "vless", + "settings": { + "vnext": [ + { + "address": "cdn-all.xn--b6gac.eu.org", + "port": 443, + "users": [ + { + "id": "VLESSID", + "encryption": "none", + "level":0 + } + ] + } + ] + }, + "streamSettings": { + "network": "ws", + "security": "tls", + "tlsSettings": { + "serverName": "VLESSCFWORKERNAME", + "allowInsecure": true + }, + "wsSettings": { + "headers": { + "Host": "VLESSCFWORKERNAME" + }, + "path": "/?ed=2048" + } + }, + "tag":"vlesscf", + "proxySettings": { + "tag": "directfragment", + "transportLayer": true + } + }, + { + "protocol": "vless", + "settings": { + "vnext": [ + { + "address": "cdn-all.xn--b6gac.eu.org", + "port": 443, + "users": [ + { + "id": "VLESSID", + "encryption": "none", + "level":0 + } + ] + } + ] + }, + "streamSettings": { + "network": "ws", + "security": "tls", + "tlsSettings": { + "serverName": "VLESSCFWORKERNAME", + "allowInsecure": true + }, + "wsSettings": { + "headers": { + "Host": "VLESSCFWORKERNAME" + }, + "path": "/?ed=2048" + } + }, + "tag":"vlesscfoverwarp", + "proxySettings": { + "tag": "directwarp", + "transportLayer": true + } + }, + { + "protocol": "freedom", + "tag": "direct" + }, + { + "protocol": "freedom", + "settings":{ + "fragment": { + "packets": "tlshello", + "length": "40-60", + "interval": "30-50" + } + }, + "tag": "directfragment" + } + ] + , + "inbounds":[ + { + "listen": "0.0.0.0", + "port": 10070, + "protocol": "http", + "settings": { + "allowTransparent": true + }, + "tag": "http" + }, + { + "port": 10071, + "protocol": "socks", + "settings": { + "udp": true, + "auth": "noauth" + }, + "tag":"socks5" + }, + { + "port": 10072, + "protocol": "socks", + "settings": { + "udp": true, + "auth": "noauth" + }, + "tag":"socks5overvless" + }, + { + "port": 10073, + "protocol": "socks", + "settings": { + "udp": true, + "auth": "noauth" + }, + "tag":"socks5overwarpoverwarp" + }, + { + "port": 10074, + "protocol": "socks", + "settings": { + "udp": true, + "auth": "noauth" + }, + "tag":"socks5overvlessoverwarp" + } + ], + "routing": { + "domainStrategy": "AsIs", + "rules": [ + { + "type": "field", + "ip": [ + "127.0.0.1" + ], + "outboundTag": "direct" + }, + { + "type": "field", + "inboundTag": [ + "socks5" + ], + "outboundTag": "directwarp" + }, + { + "type": "field", + "inboundTag": [ + "socks5overvless" + ], + "outboundTag": "vlesscf" + }, + { + "type": "field", + "inboundTag": [ + "http" + ], + "outboundTag": "vlesscf" + }, + { + "type": "field", + "inboundTag": [ + "socks5overwarpoverwarp" + ], + "outboundTag": "warpoverwarp" + }, + { + "type": "field", + "inboundTag": [ + "socks5overvlessoverwarp" + ], + "outboundTag": "vlesscfoverwarp" + } + ] + } +} diff --git a/lib/wogg.json b/lib/wogg.json new file mode 100644 index 0000000..eaaa16d --- /dev/null +++ b/lib/wogg.json @@ -0,0 +1,1574 @@ +{ + "1": [ + { + "key": "3", + "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": "微电影" + } + ] + }, + { + "key": "1", + "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": "11", + "name": "年份", + "value": [ + { + "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" + } + ] + }, + { + "key": "5", + "name": "字母", + "value": [ + { + "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": "2", + "name": "排序", + "value": [ + { + "n": "时间", + "v": "time" + }, + { + "n": "人气", + "v": "hits" + }, + { + "n": "评分", + "v": "score" + } + ] + } + ], + "2": [ + { + "key": "1", + "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": "4", + "name": "语言", + "value": [ + { + "n": "国语", + "v": "国语" + }, + { + "n": "英语", + "v": "英语" + }, + { + "n": "粤语", + "v": "粤语" + }, + { + "n": "闽南语", + "v": "闽南语" + }, + { + "n": "韩语", + "v": "韩语" + }, + { + "n": "日语", + "v": "日语" + }, + { + "n": "法语", + "v": "法语" + }, + { + "n": "德语", + "v": "德语" + }, + { + "n": "其它", + "v": "其它" + } + ] + }, + { + "key": "11", + "name": "年份", + "value": [ + { + "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" + } + ] + }, + { + "key": "5", + "name": "字母", + "value": [ + { + "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": "2", + "name": "排序", + "value": [ + { + "n": "时间", + "v": "time" + }, + { + "n": "人气", + "v": "hits" + }, + { + "n": "评分", + "v": "score" + } + ] + } + ], + "3": [ + { + "key": "1", + "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": "4", + "name": "语言", + "value": [ + { + "n": "国语", + "v": "国语" + }, + { + "n": "英语", + "v": "英语" + }, + { + "n": "粤语", + "v": "粤语" + }, + { + "n": "闽南语", + "v": "闽南语" + }, + { + "n": "韩语", + "v": "韩语" + }, + { + "n": "日语", + "v": "日语" + }, + { + "n": "法语", + "v": "法语" + }, + { + "n": "德语", + "v": "德语" + }, + { + "n": "其它", + "v": "其它" + } + ] + }, + { + "key": "11", + "name": "年份", + "value": [ + { + "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" + } + ] + }, + { + "key": "5", + "name": "字母", + "value": [ + { + "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": "2", + "name": "排序", + "value": [ + { + "n": "时间", + "v": "time" + }, + { + "n": "人气", + "v": "hits" + }, + { + "n": "评分", + "v": "score" + } + ] + } + ], + "4": [ + { + "key": "1", + "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": "4", + "name": "语言", + "value": [ + { + "n": "国语", + "v": "国语" + }, + { + "n": "英语", + "v": "英语" + }, + { + "n": "粤语", + "v": "粤语" + }, + { + "n": "闽南语", + "v": "闽南语" + }, + { + "n": "韩语", + "v": "韩语" + }, + { + "n": "日语", + "v": "日语" + }, + { + "n": "法语", + "v": "法语" + }, + { + "n": "德语", + "v": "德语" + }, + { + "n": "其它", + "v": "其它" + } + ] + }, + { + "key": "11", + "name": "年份", + "value": [ + { + "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" + } + ] + }, + { + "key": "5", + "name": "字母", + "value": [ + { + "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": "2", + "name": "排序", + "value": [ + { + "n": "时间", + "v": "time" + }, + { + "n": "人气", + "v": "hits" + }, + { + "n": "评分", + "v": "score" + } + ] + } + ], + "5": [ + { + "key": "5", + "name": "字母", + "value": [ + { + "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": "2", + "name": "排序", + "value": [ + { + "n": "时间", + "v": "time" + }, + { + "n": "人气", + "v": "hits" + }, + { + "n": "评分", + "v": "score" + } + ] + } + ], + "6": [ + { + "key": "5", + "name": "字母", + "value": [ + { + "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": "2", + "name": "排序", + "value": [ + { + "n": "时间", + "v": "time" + }, + { + "n": "人气", + "v": "hits" + }, + { + "n": "评分", + "v": "score" + } + ] + } + ] +} diff --git a/lib/yo21.txt b/lib/yo21.txt new file mode 100644 index 0000000..a805547 --- /dev/null +++ b/lib/yo21.txt @@ -0,0 +1,42 @@ +鳳凰資訊,http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=http://www.youtube.com/watch?v=if6yQq_JJyY +凤凰卫视,http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=http://www.youtube.com/watch?v=dmDg7NfUoSw +寰宇新聞, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=B7Zp3d6xXWw +鏡新聞, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=5n0y6b0Q25o +東森Live, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=R2iMq5LKXco +中天新聞, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=oIgbl7t0S_w +中天新聞, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/live/oIgbl7t0S_w?feature=share +中天新聞2, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=WPfPjbOLNfE +三立live, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=FoBfXvlOR6I +三立inews, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=CKjSm5ZeehE +三立NEWS+, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=oZdzzvxTfUY + +TVBS新聞, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=2mCSYvcfhtc +TVBS NEWS LIVE, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=m_dhMSvUCIc +民視新聞, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=ylYJSBUgaMA +華視新聞, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=wM0g8EoUZ_E +中視新聞, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=TCnaIE_SAtM +台視新聞, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=xL0ch83RAK8 + +EBC東森財經, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=WHEPzbFA3hw +三立財經, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=CKjSm5ZeehE +NHK WORLD, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=f0lYkdA-Gtw +NHK WORLD,https://nhkwlive-xjp.akamaized.net/hls/live/2003458/nhkwlive-xjp-en/index_1M.m3u8?zshijd + +Sky News, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=9Auq9mYxFEE +FRANCE 24, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=h3MuIUNCCzI +ABC News, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=w_Ma8oQLmSM +Euronews English, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=pykpO5kQJ98 +DW, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=pqabxBKzZ6M +ANN News, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=coYw-eVU0Ks +KBS KOREA, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=HnfpTMtfFk8 + +NBC NEW, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=0IUbD_4ytuo +鳳凰資訊, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=sUISafvOieY +凤凰卫视, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=dmDg7NfUoSw +CCTV中文国际, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=9sE12tg3CmA +东森财经股市, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=LbS-xQ67fos +公視直播, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=4Uc00FPs27M +KOMPASTV, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=4rmf-lk3ito +东京新宿, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=DjdUEyjx8GM +台灣地震監視, http://127.0.0.1:9978/proxy?do=yt&proxy=proxy&url=https://www.youtube.com/watch?v=Owke6Quk7T0 + diff --git a/lib/youtube.json b/lib/youtube.json new file mode 100644 index 0000000..0e83ec5 --- /dev/null +++ b/lib/youtube.json @@ -0,0 +1,1248 @@ +{ + "recommend":"LIST:最新|推薦,官方頻道", + "class":[ + { + "type_id":"GETTRENDS", + "type_name":"Youtube Trends" + }, + { + "type_id":"LIST:自媒體 We Media,老高與小茉 @laogao,脑洞乌托邦 @NDWTB,自说自话的总裁 @STBoss,纪实说 @C-Documentary,老肉雜談 @老肉雜談,李永樂老師 @TchLiyongle,滇西小哥 @dianxixiaoge,李子柒 Liziqi @cnliziqi,老饭骨 @LaoFanGu,小高姐的 Magic Ingredients @MagicIngredients,小穎美食 @XiaoYingFood,primitivetechnology9550 @primitivetechnology9550,Mr Beast@MrBeast,Airforceproud95 @Airforceproud95,TheGreatWar @TheGreatWar,Mark Rober @MarkRober,不良林,涌哥侃侃 @ygkkk,悟空的日常", + "type_name":"自媒體" + }, + { + "type_id":"LIST:HDR,Girls HDR,Landscape HDR,Walk HDR", + "type_name":"HDR" + }, + { + "type_id":"LIST:华语音乐,华语MV,点击率最高", + "type_name":"音樂" + }, + { + "type_id":"LIST:综艺,芒果综艺,腾讯综艺,爱奇艺综艺,优酷综艺,卫视综艺", + "type_name":"綜藝" + }, + { + "type_id":"LIST:紀錄片,历史纪录片,自然纪录片,宇宙纪录片", + "type_name":"紀錄片" + }, + { + "type_id":"LIST:新闻 Live,体育直播,赛事直播", + "type_name":"新聞直播" + }, + { + "type_id":"短劇", + "type_name":"短劇" + }, + { + "type_id":"LIST:剧集,腾讯剧集,爱奇艺剧集,优酷剧集,芒果剧集,TVB", + "type_name":"劇集" + }, + { + "type_id":"電影", + "type_name":"電影" + }, + { + "type_id":"體育", + "type_name":"體育" + }, + { + "type_id":"時尚潮流", + "type_name":"時尚潮流" + }, + { + "type_id":"放松", + "type_name":"放松" + }, + { + "type_id":"4K", + "type_name":"4K" + }, + { + "type_id":"宇宙", + "type_name":"科普知識" + }, + { + "type_id":"科技", + "type_name":"科技" + }, + { + "type_id":"解說", + "type_name":"解說" + }, + { + "type_id":"神秘", + "type_name":"神秘" + }, + { + "type_id":"动画片", + "type_name":"动画片" + } + ], + "filters":{ + "短劇":[ + { + "key":"time", + "name":"時間", + "value":[ + {"n":"時間全選","v":""}, + {"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"}, + {"n":"1979","v":"1979"}, + {"n":"1978","v":"1978"}, + {"n":"1977","v":"1977"}, + {"n":"1976","v":"1976"}, + {"n":"1975","v":"1975"}, + {"n":"1974","v":"1974"}, + {"n":"1973","v":"1973"}, + {"n":"1972","v":"1972"}, + {"n":"1971","v":"1971"}, + {"n":"1970","v":"1970"}, + {"n":"1969","v":"1969"}, + {"n":"1968","v":"1968"}, + {"n":"1967","v":"1967"}, + {"n":"1966","v":"1966"}, + {"n":"1965","v":"1965"}, + {"n":"1964","v":"1964"}, + {"n":"1963","v":"1963"}, + {"n":"1962","v":"1962"}, + {"n":"1961","v":"1961"}, + {"n":"1960","v":"1960"}, + {"n":"1959","v":"1959"}, + {"n":"1958","v":"1958"} + ] + }, + { + "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":"芒果TV 短剧"}, + {"n":"搜狐","v":"搜狐 短剧"} + ] + }, + { + "key":"tid", + "name":"短劇", + "value":[ + {"n":"都市","v":"@Urbanshort-TV 都市 短劇"}, + {"n":"爱情","v":"爱情 短劇"}, + {"n":"复仇","v":"复仇 短劇"}, + {"n":"穿越","v":"穿越 短劇"}, + {"n":"喜剧","v":"喜剧 短劇"}, + {"n":"奇幻","v":"奇幻 短劇"}, + {"n":"九酱爱追剧","v":"@NineSauceDramaTV"}, + {"n":"百万好剧场","v":"@1-pw5ox"}, + {"n":"咖啡追剧","v":"@@coffeedrama605"}, + {"n":"斗罗短剧","v":"@DouluoDrama123 斗羅短劇"}, + {"n":"嘟嘟剧场","v":"@DUDUJUCHANG"}, + {"n":"牛牛短剧","v":"@niuniuduanju"} + ] + } + ], + "動畫片":[ + { + "key":"time", + "name":"時間", + "value":[ + {"n":"時間全選","v":""}, + {"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"}, + {"n":"1979","v":"1979"}, + {"n":"1978","v":"1978"}, + {"n":"1977","v":"1977"}, + {"n":"1976","v":"1976"}, + {"n":"1975","v":"1975"}, + {"n":"1974","v":"1974"}, + {"n":"1973","v":"1973"}, + {"n":"1972","v":"1972"}, + {"n":"1971","v":"1971"}, + {"n":"1970","v":"1970"}, + {"n":"1969","v":"1969"}, + {"n":"1968","v":"1968"}, + {"n":"1967","v":"1967"}, + {"n":"1966","v":"1966"}, + {"n":"1965","v":"1965"}, + {"n":"1964","v":"1964"}, + {"n":"1963","v":"1963"}, + {"n":"1962","v":"1962"}, + {"n":"1961","v":"1961"}, + {"n":"1960","v":"1960"}, + {"n":"1959","v":"1959"}, + {"n":"1958","v":"1958"} + ] + }, + { + "key":"tid", + "name":"中文", + "value":[ + {"n":"默认中文国漫","v":"國漫 劇集 3D"}, + {"n":"默认","v":"animation"}, + {"n":"儿童早教","v":"儿童早教"}, + {"n":"儿童歌曲","v":"儿童歌曲"}, + {"n":"儿童音乐","v":"儿童音乐"}, + {"n":"儿童绘画","v":"儿童绘画"}, + {"n":"宝宝巴士","v":"宝宝巴士"}, + {"n":"儿歌多多","v":"儿歌多多"}, + {"n":"儿童英语启蒙","v":"儿童英语启蒙"}, + {"n":"儿童启蒙故事","v":"儿童启蒙故事"}, + {"n":"儿童安全教育","v":"儿童安全教育"} + ] + }, + { + "key":"tid", + "name":"English", + "value":[ + {"n":"默认英文国漫","v":"3D Chinese cartoon"}, + {"n":"小猪佩奇","v":"@PeppaPigChineseOfficial 小猪佩奇 中文官方 - Peppa Pig"}, + {"n":"CoComelon","v":"@CoComelon"}, + {"n":"合集","v":"Anime ENG SUB 合集"}, + {"n":"国漫社","v":"@Animation 次元 苍穹动漫 PP看动漫 公馆"}, + {"n":"国漫工厂","v":"@3DGuoman SUB"}, + {"n":"阅文动漫","v":"@yuewenanimation SUB"}, + {"n":"哔哩","v":"@madebybilibili 哔哩动漫"}, + {"n":"腾讯","v":"@TencentVideoAnimation SUB"}, + {"n":"优酷","v":"@youkuanimation 优酷动漫"}, + {"n":"爱奇艺","v":"@iQIYIAnime 爱奇艺动漫"} + ] + } + ], + "LIST:新闻 Live,体育直播,赛事直播":[ + { + "key":"tid", + "name":"中文", + "value":[ + {"n":"默认","v":"fully YouTube 新聞 Live"}, + {"n":"赛事","v":"直播 赛事"}, + {"n":"CCTV","v":"直播 CCTV"}, + {"n":"港台","v":"直播 港台"} + ] + }, + { + "key":"tid", + "name":"English", + "value":[ + {"n":"Live","v":"live"}, + {"n":"CNN","v":"live CNN"}, + {"n":"BBC","v":"live BBC"}, + {"n":"games","v":"live games"}, + {"n":"印度電視台","v":"@SETIndia"} + ] + }, + { + "key":"tid", + "name":"中文", + "value":[ + {"n":"默认","v":"News"}, + {"n":"时政","v":"时政 新闻"}, + {"n":"体育","v":"体育 新闻"}, + {"n":"娱乐","v":"娱乐 新闻"}, + {"n":"大陆","v":"大陆 新闻"}, + {"n":"港台","v":"港台 新闻"} + ] + }, + { + "key":"tid", + "name":"English", + "value":[ + {"n":"科技與發展","v":"閱兵 奧運會 航母 航空母艦 潛水艇 核武器 坦克 武器 卫星 火箭 輪船 飛機 飛碟"}, + {"n":"法治与社会","v":"法治 法制 社会 卖淫 淫秽 污蔑 赌博 毒品 裸聊 诈骗 拐卖 强奸 勒索"}, + {"n":"News","v":"News"}, + {"n":"CNN","v":"CNN news"}, + {"n":"BBC","v":"BBC news"} + ] + } + ], + "LIST:剧集,腾讯剧集,爱奇艺剧集,优酷剧集,芒果剧集,TVB":[ + { + "key":"time", + "name":"時間", + "value":[ + {"n":"時間全選","v":""}, + {"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"}, + {"n":"1979","v":"1979"}, + {"n":"1978","v":"1978"}, + {"n":"1977","v":"1977"}, + {"n":"1976","v":"1976"}, + {"n":"1975","v":"1975"}, + {"n":"1974","v":"1974"}, + {"n":"1973","v":"1973"}, + {"n":"1972","v":"1972"}, + {"n":"1971","v":"1971"}, + {"n":"1970","v":"1970"}, + {"n":"1969","v":"1969"}, + {"n":"1968","v":"1968"}, + {"n":"1967","v":"1967"}, + {"n":"1966","v":"1966"}, + {"n":"1965","v":"1965"}, + {"n":"1964","v":"1964"}, + {"n":"1963","v":"1963"}, + {"n":"1962","v":"1962"}, + {"n":"1961","v":"1961"}, + {"n":"1960","v":"1960"}, + {"n":"1959","v":"1959"}, + {"n":"1958","v":"1958"} + ] + }, + { + "key":"tid", + "name":"中文", + "value":[ + {"n":"默認","v":""}, + {"n":"華語熱播電視劇官方頻道","v":"華語熱播電視劇官方頻道"}, + {"n":"粵劇","v":"粵劇 劇集"}, + {"n":"TVB","v":"@TVB"}, + {"n":"国剧放映社","v":"国剧放映社"}, + {"n":"大陆","v":"大陆 剧集"}, + {"n":"腾讯","v":"腾讯 剧集"}, + {"n":"爱奇艺","v":"爱奇艺 剧集"}, + {"n":"优酷","v":"优酷 剧集"}, + {"n":"芒果","v":"芒果TV 剧集"}, + {"n":"搜狐","v":"搜狐 剧集"}, + {"n":"华数","v":"华数 剧集"}, + {"n":"港台","v":"港台 剧集"}, + {"n":"美国","v":"美国 Full Episode 完整剧集"}, + {"n":"Netflix","v":"Netflix Full Episode 完整剧集"}, + {"n":"Disney","v":"disney Full Episode 完整剧集"}, + {"n":"Apple","v":"apple Full Episode 完整剧集"}, + {"n":"Amazon","v":"amazon Full Episode 完整剧集"}, + {"n":"HBO","v":"hbo Full Episode 完整剧集"}, + {"n":"韩国","v":"韩国 剧集"}, + {"n":"日本","v":"日本 剧集"}, + {"n":"英国","v":"英国 Full Episode 完整剧集"} + ] + }, + { + "key":"tid", + "name":"English", + "value":[ + {"n":"Drama","v":"Full Episode drama"}, + {"n":"US","v":"drama Full Episode US"}, + {"n":"Netflix","v":"netflix Full Episode drama"}, + {"n":"Disney","v":"disney Full Episode drama"}, + {"n":"Apple","v":"apple Full Episode drama"}, + {"n":"Amazon","v":"amazon Full Episode drama"}, + {"n":"HBO","v":"hbo Full Episode drama"}, + {"n":"Korea","v":"korea Full Episode drama"}, + {"n":"Japan","v":"japan Full Episode drama"}, + {"n":"UK","v":"uk Full Episode drama"} + ] + } + ], + "電影":[ + { + "key":"time", + "name":"時間", + "value":[ + {"n":"時間全選","v":""}, + {"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"}, + {"n":"1979","v":"1979"}, + {"n":"1978","v":"1978"}, + {"n":"1977","v":"1977"}, + {"n":"1976","v":"1976"}, + {"n":"1975","v":"1975"}, + {"n":"1974","v":"1974"}, + {"n":"1973","v":"1973"}, + {"n":"1972","v":"1972"}, + {"n":"1971","v":"1971"}, + {"n":"1970","v":"1970"}, + {"n":"1969","v":"1969"}, + {"n":"1968","v":"1968"}, + {"n":"1967","v":"1967"}, + {"n":"1966","v":"1966"}, + {"n":"1965","v":"1965"}, + {"n":"1964","v":"1964"}, + {"n":"1963","v":"1963"}, + {"n":"1962","v":"1962"}, + {"n":"1961","v":"1961"}, + {"n":"1960","v":"1960"}, + {"n":"1959","v":"1959"}, + {"n":"1958","v":"1958"} + ] + }, + { + "key":"tid", + "name":"中文", + "value":[ + {"n":"默認","v":""}, + {"n":"大陆","v":"大陆 电影"}, + {"n":"腾讯","v":"腾讯 电影"}, + {"n":"爱奇艺","v":"爱奇艺 电影"}, + {"n":"优酷","v":"优酷 电影"}, + {"n":"芒果","v":"芒果TV 电影"}, + {"n":"搜狐","v":"搜狐 电影"}, + {"n":"港台","v":"港台 电影"}, + {"n":"美国","v":"美国 电影"}, + {"n":"Netflix","v":"netflix Full movie 电影"}, + {"n":"Disney","v":"disney Full movie 电影"}, + {"n":"Apple","v":"apple Full movie 电影"}, + {"n":"Amazon","v":"amazon Full movie 电影"}, + {"n":"HBO","v":"hbo Full movie 电影"}, + {"n":"韩国","v":"韩国 Full movie 电影"}, + {"n":"日本","v":"日本 Full movie 电影"}, + {"n":"英国","v":"英国 Full movie 电影"} + ] + }, + { + "key":"tid", + "name":"English", + "value":[ + {"n":"movie","v":"youtube movies Full movie"}, + {"n":"US","v":"us Full movie movie"}, + {"n":"Netflix movie","v":"netflix Full movie movie"}, + {"n":"Disney","v":"disney Full movie movie"}, + {"n":"Apple","v":"apple Full movie movie"}, + {"n":"Amazon","v":"amazon Full movie movie"}, + {"n":"HBO","v":"hbo Full movie movie"}, + {"n":"Koera","v":"korea Full movie movie"}, + {"n":"Japan","v":"japan Full movie movie"}, + {"n":"UK","v":"uk Full movie movie"} + ] + } + ], + "LIST:综艺,芒果综艺,腾讯综艺,爱奇艺综艺,优酷综艺,卫视综艺":[ + { + "key":"time", + "name":"時間", + "value":[ + {"n":"時間全選","v":""}, + {"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"}, + {"n":"1979","v":"1979"}, + {"n":"1978","v":"1978"}, + {"n":"1977","v":"1977"}, + {"n":"1976","v":"1976"}, + {"n":"1975","v":"1975"}, + {"n":"1974","v":"1974"}, + {"n":"1973","v":"1973"}, + {"n":"1972","v":"1972"}, + {"n":"1971","v":"1971"}, + {"n":"1970","v":"1970"}, + {"n":"1969","v":"1969"}, + {"n":"1968","v":"1968"}, + {"n":"1967","v":"1967"}, + {"n":"1966","v":"1966"}, + {"n":"1965","v":"1965"}, + {"n":"1964","v":"1964"}, + {"n":"1963","v":"1963"}, + {"n":"1962","v":"1962"}, + {"n":"1961","v":"1961"}, + {"n":"1960","v":"1960"}, + {"n":"1959","v":"1959"}, + {"n":"1958","v":"1958"} + ] + }, + { + "key":"tid", + "name":"中文", + "value":[ + {"n":"默认","v":"Variety show"}, + {"n":"大陆","v":"大陆 综艺"}, + {"n":"芒果","v":"芒果 综艺"}, + {"n":"腾讯","v":"腾讯 综艺"}, + {"n":"爱奇艺","v":"爱奇艺 综艺"}, + {"n":"优酷","v":"优酷 综艺"}, + {"n":"港台","v":"港台 综艺"}, + {"n":"美国","v":"美国 综艺"}, + {"n":"Netflix","v":"Netflix 综艺"}, + {"n":"韩国","v":"CRAVITY on Variety Shows 韩国 综艺"}, + {"n":"日本","v":"日本 综艺"}, + {"n":"英国","v":"英国 综艺"} + ] + }, + { + "key":"tid", + "name":"English", + "value":[ + {"n":"Variety","v":"variety"}, + {"n":"Netflix variety","v":"netflix variety"}, + {"n":"Korea","v":"korea variety"}, + {"n":"Japan","v":"japan variety"}, + {"n":"UK","v":"uk variety"} + ] + }, + { + "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":"文松"} + ] + } + ], + "LIST:紀錄片,历史纪录片,自然纪录片,宇宙纪录片":[ + { + "key":"time", + "name":"時間", + "value":[ + {"n":"時間全選","v":""}, + {"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"}, + {"n":"1979","v":"1979"}, + {"n":"1978","v":"1978"}, + {"n":"1977","v":"1977"}, + {"n":"1976","v":"1976"}, + {"n":"1975","v":"1975"}, + {"n":"1974","v":"1974"}, + {"n":"1973","v":"1973"}, + {"n":"1972","v":"1972"}, + {"n":"1971","v":"1971"}, + {"n":"1970","v":"1970"}, + {"n":"1969","v":"1969"}, + {"n":"1968","v":"1968"}, + {"n":"1967","v":"1967"}, + {"n":"1966","v":"1966"}, + {"n":"1965","v":"1965"}, + {"n":"1964","v":"1964"}, + {"n":"1963","v":"1963"}, + {"n":"1962","v":"1962"}, + {"n":"1961","v":"1961"}, + {"n":"1960","v":"1960"}, + {"n":"1959","v":"1959"}, + {"n":"1958","v":"1958"} + ] + }, + { + "key":"tid", + "name":"中文", + "value":[ + {"n":"地區🎶排序","v":"歷史記錄片 地球記錄片 宇宙記錄片 海洋記錄片 戰爭記錄片 大自然生存記錄片"}, + {"n":"默认","v":"documentary"}, + {"n":"CCTV纪录片","v":"CCTV 纪录片"}, + {"n":"BBC纪录片","v":"BBC 纪录片"}, + {"n":"国家地理","v":"国家地理 纪录片"}, + {"n":"Netflix纪录片","v":"netflix 纪录片"}, + {"n":"BBC","v":"BBC documentary"}, + {"n":"National Geographic","v":"National Geographic documentary"}, + {"n":"Netflix","v":"netflix documentary"}, + {"n":"历史","v":"历史 纪录片"}, + {"n":"野性","v":"野性 纪录片"}, + {"n":"地球","v":"地球 纪录片"}, + {"n":"宇宙","v":"宇宙 纪录片"}, + {"n":"海洋","v":"海洋 纪录片"}, + {"n":"人文","v":"人文 纪录片"}, + {"n":"战争","v":"战争 纪录片"} + ] + }, + { + "key":"tid", + "name":"English", + "value":[ + {"n":"History","v":"Full history documentary"}, + {"n":"WILD","v":"Full wild documentary"}, + {"n":"Earch","v":"Full earth documentary"}, + {"n":"Universe","v":"Full universe documentary"}, + {"n":"Oceans","v":"Full oceans documentary"}, + {"n":"Humanism","v":"Full humanism documentary"}, + {"n":"Wars","v":"Full war documentary"} + ] + } + ], + "LIST:华语音乐,华语MV,点击率最高":[ + { + "key":"time", + "name":"時間", + "value":[ + {"n":"時間全選","v":""}, + {"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"}, + {"n":"1979","v":"1979"}, + {"n":"1978","v":"1978"}, + {"n":"1977","v":"1977"}, + {"n":"1976","v":"1976"}, + {"n":"1975","v":"1975"}, + {"n":"1974","v":"1974"}, + {"n":"1973","v":"1973"}, + {"n":"1972","v":"1972"}, + {"n":"1971","v":"1971"}, + {"n":"1970","v":"1970"}, + {"n":"1969","v":"1969"}, + {"n":"1968","v":"1968"}, + {"n":"1967","v":"1967"}, + {"n":"1966","v":"1966"}, + {"n":"1965","v":"1965"}, + {"n":"1964","v":"1964"}, + {"n":"1963","v":"1963"}, + {"n":"1962","v":"1962"}, + {"n":"1961","v":"1961"}, + {"n":"1960","v":"1960"}, + {"n":"1959","v":"1959"}, + {"n":"1958","v":"1958"} + ] + }, + { + "key":"tid", + "name":"地區", + "value":[ + {"n":"華語音樂","v":"華語音樂"}, + {"n":"華語MV","v":"華語MV"}, + {"n":"环球视听","v":"环球视听1980 @RippleOfficialEvent"}, + {"n":"YouTube 點閱率最高","v":"YouTube 點閱率最高觀看次數最多華語歌曲"}, + {"n":"海外抖音","v":"TikTok 翻唱 抖音 音樂"}, + {"n":"粵語","v":"粵語 音樂"}, + {"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":"tid", + "name":"愛好", + "value":[ + {"n":"舞曲","v":"慢搖 夜店 低音 女聲 "}, + {"n":"80-90","v":"80 90 音樂"}, + {"n":"人聲","v":"人聲 音樂"}, + {"n":"A8製造","v":"A8製造 工體音樂"}, + {"n":"硬歌","v":"深水炸彈 音樂"}, + {"n":"失傳已久","v":"嗨音雷虎 失傳 嗨音會所 音樂"}, + {"n":"重低音DJ","v":"3D 8D 慢搖 重低音 音樂"}, + {"n":"車載舞曲","v":"車載慢搖DJ歌曲串燒 深水炸彈DJ歌曲串燒 越南鼓DJ歌曲串燒 音樂"}, + {"n":"超級女聲","v":"超級女聲"}, + {"n":"tseries","v":"@tseries"} + ] + }, + { + "key":"tid", + "name":"歌手", + "value":[ + {"n":"邁克爾傑克遜","v":"邁克爾傑克遜 演唱會,巡演 音樂"}, + {"n":"張瑋伽","v":"張瑋伽 演唱會 巡演 音樂"}, + {"n":"孫露","v":"孫露 演唱會 巡演 音樂"}, + {"n":"鳳凰傳奇","v":"鳳凰傳奇 演 巡演 音樂"}, + {"n":"龍梅子","v":"龍梅子 演唱會 巡演 音樂"}, + {"n":"刀郎","v":"刀郎 演唱會 巡演 音樂"}, + {"n":"S.H.E","v":"S.H.E 演唱會 巡演 音樂"}, + {"n":"慕容曉曉","v":"慕容曉曉 演唱會 巡演 音樂"}, + {"n":"東方紅豔","v":"東方紅豔 演唱會 巡演 音樂"}, + {"n":"孟庭葦","v":"孟庭葦 演唱會 巡演 音樂"}, + {"n":"斯琴高麗","v":"斯琴高麗 演唱會 巡演 音樂"}, + {"n":"程響","v":"程響 演唱會 巡演 音樂"}, + {"n":"蔣雪兒","v":"蔣雪兒 演唱會 巡演 音樂"} + ] + } + ], + "體育":[ + { + "key":"time", + "name":"時間", + "value":[ + {"n":"時間全選","v":""}, + {"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"}, + {"n":"1979","v":"1979"}, + {"n":"1978","v":"1978"}, + {"n":"1977","v":"1977"}, + {"n":"1976","v":"1976"}, + {"n":"1975","v":"1975"}, + {"n":"1974","v":"1974"}, + {"n":"1973","v":"1973"}, + {"n":"1972","v":"1972"}, + {"n":"1971","v":"1971"}, + {"n":"1970","v":"1970"}, + {"n":"1969","v":"1969"}, + {"n":"1968","v":"1968"}, + {"n":"1967","v":"1967"}, + {"n":"1966","v":"1966"}, + {"n":"1965","v":"1965"}, + {"n":"1964","v":"1964"}, + {"n":"1963","v":"1963"}, + {"n":"1962","v":"1962"}, + {"n":"1961","v":"1961"}, + {"n":"1960","v":"1960"}, + {"n":"1959","v":"1959"}, + {"n":"1958","v":"1958"} + ] + }, + { + "key":"tid", + "name":"中文", + "value":[ + {"n":"默认","v":""}, + {"n":"體育直播","v":"体育直播"}, + {"n":"體育赛事","v":"体育赛事"}, + {"n":"足球比賽","v":"足球賽事"}, + {"n":"篮球比賽","v":"篮球賽事"}, + {"n":"极限運動","v":"极限運動"}, + {"n":"室内運動","v":"室内运动"}, + {"n":"户外運動","v":"户外运动"}, + {"n":"健身運動","v":"健身運動"} + ] + }, + { + "key":"tid", + "name":"English", + "value":[ + {"n":"Live","v":"live sports"}, + {"n":"Games","v":"live games"}, + {"n":"Soccer","v":"live soccer"}, + {"n":"NBA","v":"NBA"}, + {"n":"Extreme","v":"extreme sports"}, + {"n":"InDoor","v":"indoor sports"}, + {"n":"OutDoor","v":"outdoor sports"}, + {"n":"Workout","v":"workout"} + ] + }, + { + "key":"tid", + "name":"體育", + "value":[ + {"n":"女足港場","v":"女足港場 @Hong KongWomensStadium"}, + {"n":"全國校運動會","v":"全國大專 校院運動會 全中運 女子組賽事 全國中等 學校運動會"}, + {"n":"女中儀隊","v":"北一女中樂儀旗隊永續發展協會 北一女中家長會樂儀旗家長後援會 北一女中儀隊校友隊 台灣 学校运动会 景美女中儀隊 北一女樂儀旗隊 full樂儀隊 "}, + {"n":"校園熱舞","v":"full 校園熱舞 開南熱無 開南大學課外活動組 女生熱舞社 南寶熱舞社 寶踐熱舞社 NTDC 熱舞社 STUST"}, + {"n":"红星体育官方频道","v":"红星体育官方频道【高清直播】"}, + {"n":"中國體育比賽傳奇","v":"中國體育比賽傳奇"}, + {"n":"愛爾達體育家族","v":"愛爾達體育家族 ELTA Sports"}, + {"n":"公視體育","v":"公視體育"}, + {"n":"體育之光","v":"體育之光"}, + {"n":"偶然體育賽事","v":"偶然體育賽事"} + ] + } + ], + "時尚潮流":[ + { + "key":"tid", + "name":"時裝秀", + "value":[ + {"n":"街舞","v":"脫衣舞 丁字褲 街舞 太空步 機械舞 舞 裸體舞蹈 霹靂舞 魔性舞蹈 鬼步舞 木偶舞 女性藝術舞蹈"}, + {"n":"時尚走秀","v":"T台走秀 lingerie show"}, + {"n":"時裝秀","v":"hdr ASM lingerieTV 東京ファッションショー 下着ショー"}, + {"n":"潮流秀","v":"FASHION IN UHD"}, + {"n":"時裝模特","v":"FASHION Runway"}, + {"n":"模特","v":"比基尼 泳裝 頂級車模 空姐 寫真 Car model Stewardess Portrait"}, + {"n":"裸体秀","v":"hdr 人體藝術 裸体秀 Nude show"}, + {"n":"無限亂鬥","v":"hdr 廟會秀 無限HD 公廟 鋼管舞 脫衣舞 舞女 清純 寫真"} + ] + }, + { + "key":"tid", + "name":"小姐姐", + "value":[ + {"n":"小姐姐超清","v":"小姐姐超清"}, + {"n":"国内小姐姐","v":"快手模特 抖音模特 国内小姐姐"}, + {"n":"韩国小姐姐","v":"韩国小姐姐"}, + {"n":"日本小姐姐","v":"日本小姐姐"}, + {"n":"俄罗斯小姐姐","v":"俄罗斯小姐姐"}, + {"n":"混血小姐姐","v":"混血小姐姐"}, + {"n":"越南小姐姐","v":"越南小姐姐"}, + {"n":"Al小姐姐","v":"Al美女超清"}, + {"n":"抖音热门小姐姐","v":"抖音热门小姐姐"}, + {"n":"快手热门美女","v":"快手热门美女"}, + {"n":"打碟小姐姐","v":"打碟小姐姐"}, + {"n":"冲浪小姐姐","v":"冲浪小姐姐"}, + {"n":"蹦迪小姐姐","v":"蹦迪小姐姐"}, + {"n":"艺校小姐姐","v":"艺校小姐姐"}, + {"n":"环球小姐","v":"环球小姐"}, + {"n":"泰国人妖","v":"泰国人妖"}, + {"n":"人间胸器","v":"人间胸器"} + ] + }, + { + "key":"tid", + "name":"English", + "value":[ + {"n":"sexy Miss","v":"sexy Miss"}, + {"n":"Hot sexy Girl","v":"Hot sexy Girl"}, + {"n":"Korean Girl","v":"Korean sexy Girl"}, + {"n":"Japanese Girl","v":"Japanese sexy Girl"}, + {"n":"Russian Girl","v":"Russian sexy Girl"}, + {"n":"Vietnamese Girl","v":"Vietnamese sexy Girl"}, + {"n":"AI Girl","v":"AI Girl"}, + {"n":"TikTok Hot Siste","v":"TikTok Hot sexy Girl"}, + {"n":"Cute Girl","v":"sexy Cute Girl"}, + {"n":"Girl Dj","v":"sexy Girl Dj"}, + {"n":"Girl Surfer","v":"sexy Girl Surfer"}, + {"n":"Dance Girl","v":"Dance sexy Girl"}, + {"n":"Miss Universe","v":"Miss Universe"}, + {"n":"Thai Shemale","v":"Thai Shemale"} + ] + } + ], + "解說":[ + { + "key":"tid", + "name":"頻道主", + "value":[ + {"n":"宇哥侃故事","v":"@yuge"}, + {"n":"零度解说","v":"@lingdujieshuo"} + ] + } + ], + "LIST:HDR,Girls HDR,Landscape HDR,Walk HDR":[ + { + "key":"tid", + "name":"風景", + "value":[ + {"n":"運動","v":"GoPro 女翼裝飛行 極限自行車運動"}, + {"n":"風景","v":"hdr 大自然"}, + {"n":"Links TV頻道主","v":"@linksphotograph Links TV hdr"}, + {"n":"放鬆","v":"hdr 放鬆"}, + {"n":"動物世界","v":"hdr Carnivorous Animals 動物世界"}, + {"n":"深海世界","v":"hdr Invertebrate Fish 深海世界"}, + {"n":"飛禽走獸","v":"hdr Birds of Prey Columbiform Birds Passerine Birds"}, + {"n":"生物世界","v":"hdr Amphibians Reptiles 生物世界"} + ] + } + ], + "Full YouTube":[ + { + "key":"tid", + "name":"頻道主", + "value":[ + {"n":"李子柒","v":"李子柒 Liziqi @cnliziqi"}, + {"n":"滇西小哥","v":"滇西小哥 @dianxixiaoge"}, + {"n":"老高與小茉","v":"老高與小茉 @laogao"}, + {"n":"李永樂老師","v":"李永樂老師 @TchLiyongle"} + ] + }, + { + "key":"tid", + "name":"美食頻道主", + "value":[ + {"n":"美食作家王刚","v":"美食作家王刚 @chefwang"}, + {"n":"小高姐的 Magic Ingredients","v":"小高姐的 Magic Ingredients @MagicIngredients"}, + {"n":"小穎美食","v":"小穎美食 @XiaoYingFood"} + ] + }, + { + "key":"tid", + "name":"野外頻道主", + "value":[ + {"n":"野外求生","v":"primitivetechnology9550 @primitivetechnology9550"} + ] + }, + { + "key":"tid", + "name":"科普頻道主", + "value":[ + {"n":"科普","v":"Mr Beast@MrBeast"}, + {"n":"航天大學","v":"Airforceproud95 @Airforceproud95"}, + {"n":"世界大戰","v":"TheGreatWar @TheGreatWar"}, + {"n":"MarkRober","v":"Mark Rober @MarkRober"} + ] + }, + { + "key":"tid", + "name":"教材", + "value":[ + {"n":"不良林","v":"不良林"}, + {"n":"涌哥侃侃","v":"涌哥侃侃 @ygkkk"}, + {"n":"悟空的日常","v":"悟空的日常"} + ] + } + ], + "宇宙":[ + { + "key":"tid", + "name":"科普知識", + "value":[ + {"n":"宇宙","v":"光年 黑洞 銀河系 空間站 太空技術"}, + {"n":"粒子","v":"空間粒子 宇宙磁場 四維空間 元素 量子 光波 光源 靈魂"}, + {"n":"靠蒙","v":"microorganism"} + ] + }, + { + "key":"tid", + "name":"歷史科普", + "value":[ + {"n":"世界大戰","v":"世界大戰 二戰 日侵 八國聯軍"}, + {"n":"人物","v":"古代名人 歷史名人 歷代祖先"}, + {"n":"生物進化史","v":"人類進化 微生物進化 動物進化 地球進化"}, + {"n":"靠蒙","v":"歷史 History"} + ] + } + ] + }, + "jx":0, + "parse":0 +} diff --git a/lib/yt.json b/lib/yt.json new file mode 100644 index 0000000..546ae18 --- /dev/null +++ b/lib/yt.json @@ -0,0 +1 @@ +{"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": "农村"}]}, {"key": "area","name": "地区","value": [{"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": "其他"}]}, {"key": "year","name": "年份","value": [{"n": "全部","v": ""},{"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"}]}],"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": "其他"}]}, {"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": "韩语"}, {"n": "日语","v": "日语"},{"n": "其他","v": "其他"}]}, {"key": "year","name": "年份","value": [{"n": "全部","v": ""}, {"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"}]}],"47": [{"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": "area","name": "地区","value": [{"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": "其他"}]}, {"key": "year","name": "年份","value": [{"n": "全部","v": ""},{"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"}]}],"48": [{"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": "area","name": "地区","value": [{"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": "其他"}]}, {"key": "year","name": "年份","value": [{"n": "全部","v": ""},{"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"}]}],"58": [{"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": "其他"}]}, {"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": "韩语"}, {"n": "日语","v": "日语"},{"n": "其他","v": "其他"}]}, {"key": "year","name": "年份","value": [{"n": "全部","v": ""}, {"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"}]}],"46": [{"key": "class","name": "剧情","value": [{"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": "大陆"}]}, {"key": "lang","name": "语言","value": [{"n": "全部","v": ""}, {"n": "国语","v": "国语"}]}, {"key": "year","name": "年份","value": [{"n": "全部","v": ""}, {"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"}]}],"53": [{"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": "其他"}]}, {"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": "韩语"}, {"n": "日语","v": "日语"},{"n": "其他","v": "其他"}]}, {"key": "year","name": "年份","value": [{"n": "全部","v": ""}, {"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"}]}],"5": [{"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": "area","name": "地区","value": [{"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": "其他"}]}, {"key": "year","name": "年份","value": [{"n": "全部","v": ""},{"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"}]}],"51": [{"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": "area","name": "地区","value": [{"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": "其他"}]}, {"key": "year","name": "年份","value": [{"n": "全部","v": ""},{"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"}]}],"45": [{"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": "area","name": "地区","value": [{"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": "其他"}]}, {"key": "year","name": "年份","value": [{"n": "全部","v": ""},{"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"}]}]} diff --git a/pg.jar b/pg.jar new file mode 100644 index 0000000..7e8a9fa Binary files /dev/null and b/pg.jar differ diff --git a/pg.jar.md5 b/pg.jar.md5 new file mode 100644 index 0000000..22c9bc5 --- /dev/null +++ b/pg.jar.md5 @@ -0,0 +1 @@ +6779e060c142f839f152bc537bdbb2a9 \ No newline at end of file diff --git a/py/4KAV.py b/py/4KAV.py new file mode 100644 index 0000000..7db14f7 --- /dev/null +++ b/py/4KAV.py @@ -0,0 +1,130 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import sys +from pyquery import PyQuery as pq +sys.path.append('..') +from base.spider import Spider + + +class Spider(Spider): + + def init(self, extend=""): + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + 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-CN,zh;q=0.9,en;q=0.8', + 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="134", "Google Chrome";v="134"', + 'sec-ch-ua-platform': '"macOS"', + 'sec-fetch-dest': 'document', + 'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.8 Mobile/15E148 Safari/604.1' + } + + host = "https://4k-av.com" + + def homeContent(self, filter): + data=self.getpq() + result = {} + classes = [] + for k in list(data('#category ul li').items())[:-1]: + classes.append({ + 'type_name': k.text(), + 'type_id': k('a').attr('href') + }) + result['class'] = classes + result['list'] = self.getlist(data('#MainContent_scrollul ul li'),'.poster span') + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, tid, pg, filter, extend): + data=self.getpq(f"{tid}page-{pg}.html") + result = {} + result['list'] = self.getlist(data('#MainContent_newestlist .virow .NTMitem')) + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + data = self.getpq(ids[0]) + v = data('#videoinfo') + vod = { + 'vod_name': data('#tophead h1').text().split(' ')[0], + 'type_name': v('#MainContent_tags.tags a').text(), + 'vod_year': v('#MainContent_videodetail.videodetail a').text(), + 'vod_remarks': v('#MainContent_titleh12 h2').text(), + 'vod_content': v('p.cnline').text(), + 'vod_play_from': '4KAV', + 'vod_play_url': '' + } + vlist = data('#rtlist li') + jn = f"{vod['vod_name']}_" if 'EP0' in vlist.eq(0)('span').text() else '' + if vlist: + c = [f"{jn}{i('span').text()}${i('a').attr('href')}" for i in list(vlist.items())[1:]] + c.insert(0, f"{jn}{vlist.eq(0)('span').text()}${ids[0]}") + vod['vod_play_url'] = '#'.join(c) + else: + vod['vod_play_url'] = f"{vod['vod_name']}${ids[0]}" + return {'list': [vod]} + + def searchContent(self, key, quick, pg="1"): + data=self.getpq(f"/s?k={key}") + return {'list':self.getlist(data('#MainContent_newestlist .virow.search .NTMitem.Main'))} + + def playerContent(self, flag, id, vipFlags): + try: + data=self.getpq(id) + p,url=0,data('#MainContent_videowindow source').attr('src') + if not url:raise Exception("未找到播放地址") + except Exception as e: + p,url=1,f"{self.host}{id}" + headers = { + 'origin': self.host, + 'referer': f'{self.host}/', + 'sec-ch-ua-platform': '"macOS"', + 'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.8 Mobile/15E148 Safari/604.1', + } + return {'parse': p, 'url': url, 'header': headers} + + def localProxy(self, param): + pass + + def liveContent(self, url): + pass + + def getlist(self,data,y='.resyear label[title="分辨率"]'): + videos = [] + for i in data.items(): + ns = i('.title h2').text().split(' ') + videos.append({ + 'vod_id': i('.title a').attr('href'), + 'vod_name': ns[0], + 'vod_pic': i('.poster img').attr('src'), + 'vod_remarks': ns[-1] if len(ns) > 1 else '', + 'vod_year': i(y).text() + }) + return videos + + def getpq(self, path=''): + url=f"{self.host}{path}" + data=self.fetch(url,headers=self.headers).text + try: + return pq(data) + except Exception as e: + print(f"{str(e)}") + return pq(data.encode('utf-8')) \ No newline at end of file diff --git a/py/4K影院.py b/py/4K影院.py new file mode 100644 index 0000000..ef40397 --- /dev/null +++ b/py/4K影院.py @@ -0,0 +1,473 @@ +# 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://www.4kvm.net" + +headerx = { + 'User-Agent': 'Mozilla/5.0 (Linux; U; Android 8.0.0; zh-cn; Mi Note 2 Build/OPR1.170623.032) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/61.0.3163.128 Mobile Safari/537.36 XiaoMi/MiuiBrowser/10.1.1' + } + +class Spider(Spider): + global xurl + 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 = {"class": []} + + detail = requests.get(url=xurl, headers=headerx) + detail.encoding = "utf-8" + res = detail.text + doc = BeautifulSoup(res, "lxml") + soups = doc.find_all('ul', class_="main-header") + + for soup in soups: + vods = soup.find_all('li') + + for vod in vods: + + name = vod.text.strip() + + if any(keyword in name for keyword in ["首页", "电视剧", "高分电影", "影片下载", "热门播放"]): + continue + + id = vod.find('a')['href'] + if 'http' not in id: + id = xurl + id + + result["class"].append({"type_id": id, "type_name": name}) + + return result + + def homeVideoContent(self): + videos = [] + + detail = requests.get(url=xurl, headers=headerx) + detail.encoding = "utf-8" + res = detail.text + doc = BeautifulSoup(res, "lxml") + + soups = doc.find_all('article', class_="item movies") + + for vod in soups: + + name = vod.find('img')['alt'] + + ids = vod.find('div', class_="poster") + id = ids.find('a')['href'] + + pic = vod.find('img')['src'] + + remarks = vod.find('div', class_="rating") + remark = remarks.text.strip() + + video = { + "vod_id": id, + "vod_name": name, + "vod_pic": pic, + "vod_remarks": remark + } + videos.append(video) + + result = {'list': videos} + return result + + def categoryContent(self, cid, pg, filter, ext): + result = {} + videos = [] + + if 'movies' not in cid: + + if '@' in cid: + fenge = cid.split("@") + detail = requests.get(url=fenge[0], headers=headerx) + detail.encoding = "utf-8" + res = detail.text + doc = BeautifulSoup(res, "lxml") + + soups = doc.find_all('div', class_="se-c") + + for vod in soups: + + name = vod.text.strip() + + id = vod.find('a')['href'] + + pic = self.extract_middle_text(str(res), ' 1 else '', + 'vod_year': i(y).text() + }) + return videos + + def getpq(self, path=''): + url=f"{self.host}{path}" + data=self.fetch(url,headers=self.headers).text + try: + return pq(data) + except Exception as e: + print(f"{str(e)}") + return pq(data.encode('utf-8')) \ No newline at end of file diff --git a/py/CliCli动漫.py b/py/CliCli动漫.py new file mode 100644 index 0000000..e373780 --- /dev/null +++ b/py/CliCli动漫.py @@ -0,0 +1,254 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import base64 +import json +import sys +import time +from base64 import b64decode, b64encode +from Crypto.Cipher import AES, PKCS1_v1_5 +from Crypto.Hash import MD5 +from Crypto.PublicKey import RSA +from Crypto.Util.Padding import unpad, pad +sys.path.append('..') +from base.spider import Spider + + +class Spider(Spider): + + def init(self, extend=""): + self.did=self.getdid() + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + host='http://60.204.242.79:8091' + + def homeContent(self, filter): + res = self.fetch(f'{self.host}/app/channel?top-level=true', headers=self.getheaders()).text + data = self.getdata(res) + result = {} + classes = [] + filters = {} + sortsn = ['最新','最热','高分'] + for k in data['data']: + classes.append({ + 'type_name': k['name'], + 'type_id': k['id'] + }) + filters[k['id']] = [] + k['sorts']=['addtime','hits','gold'] + for key,value in k.items(): + if type(value) == list: + filters[k['id']].append({ + 'name': key, + 'key': key, + 'value': [{'v': x,'n': x if key !='sorts' else sortsn[i]} for i,x in enumerate(value) if x] + }) + result['class'] = classes + result['filters'] = filters + return result + + def homeVideoContent(self): + res=self.fetch(f'{self.host}/app/banners/0',headers=self.getheaders()).text + data=self.getdata(res) + videos=[] + for i in data['data']: + videos.append({ + 'vod_id': i['vid'], + 'vod_name': i['vname'], + 'vod_pic': i['img'], + 'vod_remarks': i['continu'] + }) + return {'list':videos} + + def categoryContent(self, tid, pg, filter, extend): + params={'channel':tid,'type':extend.get('types',''),'area':extend.get('areas',''),'year':extend.get('years',''),'sort':extend.get('sorts','addtime'),'limit':'30','page':pg} + data=self.fetch(f'{self.host}/app/video/list',params=params,headers=self.getheaders()).text + data=self.getdata(data) + videos=[] + for i in data['data']['items']: + videos.append({ + 'vod_id': i.get('id'), + 'vod_name': i.get('name'), + 'vod_pic': i.get('pic'), + 'vod_year': i.get('year'), + 'vod_remarks': i.get('continu') + }) + result = {} + result['list'] = videos + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + data=self.fetch(f'{self.host}/app/video/detail?id={ids[0]}',headers=self.getheaders()).text + data=self.getdata(data) + v=data['data'] + vod = { + 'type_name': v.get('type'), + 'vod_year': v.get('year'), + 'vod_area': v.get('area'), + 'vod_remarks': v.get('continu'), + 'vod_actor': v.get('actor'), + 'vod_director': v.get('director'), + 'vod_content': v.get('content'), + 'vod_play_from': '', + 'vod_play_url': '' + } + parts,names = [],[] + for i in v['parts']: + names.append(i['play_zh']) + p=[] + for j,x in enumerate(i['part']): + params={'id':ids[0],'play':i['play'],'part':x} + p.append(f'{x}${self.e64(json.dumps(params))}') + parts.append('#'.join(p)) + vod['vod_play_from'] = '$$$'.join(names) + vod['vod_play_url'] = '$$$'.join(parts) + return {'list':[vod]} + + def searchContent(self, key, quick, pg="1"): + params={'key':key,'limit':'25','page':pg} + data=self.fetch(f'{self.host}/app/video/search',params=params,headers=self.getheaders()).text + data=self.getdata(data) + videos = [] + for i in data['data']['items']: + videos.append({ + 'vod_id': i.get('id'), + 'vod_name': i.get('name'), + 'vod_pic': i.get('pic'), + 'vod_year': i.get('year'), + 'vod_remarks': i.get('continu') + }) + return {'list':videos,'page':pg} + + def playerContent(self, flag, id, vipFlags): + params= json.loads(self.d64(id)) + data=self.fetch(f'{self.host}/app/video/play',params=params,headers=self.getheaders()).text + data=self.getdata(data) + urls=[] + for i in data['data']: + if i.get('url'):urls.extend([i['resolution'],i['url']]) + return {'parse': 0, 'url': urls, 'header': {'User-Agent': 'Dart/3.6 (dart:io)'}} + + def liveContent(self, url): + pass + + def localProxy(self, param): + pass + + def getheaders(self): + t=str(int(time.time() * 1000)) + stinf=f"3.0.0.2-{t}-Android-1.0.4.5-{self.did}" + authentication=self.aes_encrypt(self.e64(stinf)) + headers = { + 'User-Agent': 'Dart/3.6 (dart:io)', + 'x-version': '2020-09-17', + 'appid': '4150439554430614', + 'ts': t, + 'authentication': authentication, + 'content-type': 'application/json; charset=utf-8', + } + return headers + + def aes_encrypt(self, text): + key = b'ziISjqkXPsGUMRNGyWigxDGtJbfTdcGv' + iv = b'WonrnVkxeIxDcFbv' + cipher = AES.new(key, AES.MODE_CBC, iv) + ct_bytes = cipher.encrypt(pad(text.encode("utf-8"), AES.block_size)) + ct = b64encode(ct_bytes).decode("utf-8") + return ct + + def aes_decrypt(self, key,text): + iv=key[::-1].encode("utf-8") + key=key.encode("utf-8") + cipher = AES.new(key, AES.MODE_CBC, iv) + pt = unpad(cipher.decrypt(b64decode(text)), AES.block_size) + return json.loads(pt.decode("utf-8")) + + def rsa_decrypt(self, encrypted_data): + try: + private_key_string = '''-----BEGIN RSA PRIVATE KEY----- + MIIEpAIBAAKCAQEA5xpfniKIMYdjTytUBu5rsLbMtcCRW9B9DB78QEdf4wW5jO8r + Mw7j+/mYk3ghi0xrxpjtHm1R2KgNT1b0akJCExTH7gBVcjVywpmXdNXbcuCGfVCK + S6vYfMypmj5lNBgalCHe5AVc0ghhP3FG5j8Q5B7q00+tk4nT9nFsTmTeNcAKSH9h + aM6a0fbiJ3eXbxEr2o8raAjck10act35t/MIUOkcrQjHx5E9Yvqgs3qbq4yDakaG + 4qfMAV4DAkkmdZ8N3fdEQ+rFJ67Spd4zzowj81+YO9wMUP2hNgfXmLOGLS5Lyi+x + vrwwWZXAIRUkhdQEAYQlhGs8wV9P4bJnTzplewIDAQABAoIBAEnRzNUwZpybiIdT + acXFBrUtzvoHhubzE955T04g/mn//CMeiogGq6BjO+9vIhfi01Jequ9bMBeqpoW/ + WtdOTtjVfH9zr9eJZxzt/skdPrnVKmCBB4vgWoiSv2I7qAwZ3vOOVioz5FBayOWB + A4qsfnK/xXa2LtW/4usHk/b+lVRJZhHl3eKio2CnVBrgRb2DTx1GAwpvaRXp0oHm + LXDEtngxN4/rh2irPKgaG/lgrCBISKUHtwtgytcpltsHMASMXIKAjZjNgCA98fA3 + te96U58wGHzQBQ5XtwTf0PiFEfJ7yOhgNRgCtiwsjGOhJFJFiiXYKzTef1GnVxPa + wuPc0TECgYEA+KCts3ArkWLqWbi4bVDpekP71geEnQIklSAk3RRZ0eiC1pmmkuTh + +q/4jOfoQHGuYCc8GvJqxQ8Y+aspPptbsAeRMSVovjQUvpRMqD0SWT8o3W2xGfqd + 0W4p14CIF7oXjMqQVeY468AYzxUdNsaulrp9Wnpa5njzE5D5WGDu0IcCgYEA7fSq + kvz1oXjlljlskBwJ8gDB8j53PhuqV6Ori71G/qIGpYuOVjHSfPD/04a9T3M9olpk + vlLOLn7GS7xa4pjugmp0EDdxBIJJtTHbbi4NL4ZoYg+vHkiemkjGLis4x5qRKjg6 + jNUEhnpksm68IUMSyO2toasfR0nVUmkb+ylKhG0CgYEAqNDZAJSyUHZcb21YdIlS + 7rzIe2wBZGZ3FnaL8T0HO9rnM/WCQA1/Tys61doFPfSylQEu85EUZBc7OxM33xW3 + 7M9Gi5s+Ap/0Ue76GeXV1plnEuqPLPeZPwHREU1pmsq1gNhtppW6ooB9l+ZbPr0r + AJdB1DRuEj2ftvJiC9tNbHMCgYEAvHaliply6hrYq6x7gX/TmKpk8bnrs3Mx7Qui + WKDm09H8Na1cZIQ9U9uEo0H6OizpyeaSF/N5fXXHFEDwMrwxW3V4y0c96fZO7oW4 + Z4FtzBBGKDSH3BJkG4o7/GEbLWwMQUYbiWNFnETf8DqoIif/fshQVtUzhsDBhe3d + zYUckdkCgYAJlTYhJz0qXcO8a5KsQ20/hEGRtOcq+mfPOdGYBOv6LB2ThuDKunbY + WsmAvqSo1qoJONnhQVMSpzKWEjCYV6hcifV9aeFofD4kNmG1gWC18QIYfrihLyOU + E4GDW7QN8HO2YiQpopGP/muKsIlCmxKP6DasgCCO36xs87Wi8gu1DA== + -----END RSA PRIVATE KEY-----''' + private_key = RSA.import_key(private_key_string) + cipher = PKCS1_v1_5.new(private_key) + encrypted_bytes = base64.b64decode(encrypted_data) + decrypted_bytes = cipher.decrypt(encrypted_bytes, None) + return decrypted_bytes.decode('utf-8') + except: + return "" + + def getdata(self, data): + ds=data.split('.') + key=self.rsa_decrypt(ds[0]) + result=self.aes_decrypt(key,ds[1]) + return result + + def getdid(self): + did=self.getCache('did') + if not did: + t = str(int(time.time())) + did = self.md5(t) + self.setCache('did', did) + return did + + 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() + diff --git a/py/LIVES.py b/py/LIVES.py new file mode 100644 index 0000000..5fbeeaa --- /dev/null +++ b/py/LIVES.py @@ -0,0 +1,768 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import json +import re +import sys +import time +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=""): + tid = 'douyin' + headers = self.gethr(0, tid) + response = requests.head(self.hosts[tid], headers=headers) + ttwid = response.cookies.get('ttwid') + headers.update({ + 'authority': self.hosts[tid].split('//')[-1], + 'cookie': f'ttwid={ttwid}' if ttwid else '' + }) + self.dyheaders = headers + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + 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 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"], + "douyin": "https://live.douyin.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", + "douyin": "https://live.douyin.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': referers['bili'], + 'user-agent': headers[0]['User-Agent'] + }, + 'douyin': { + 'User-Agent': 'libmpv', + 'Icy-MetaData': '1' + }, + 'huya': { + 'User-Agent': 'ExoPlayer', + 'Connection': 'Keep-Alive', + 'Icy-MetaData': '1' + }, + 'douyu': { + 'User-Agent': 'libmpv', + 'Icy-MetaData': '1' + } + } + + def process_bili(self): + try: + self.blfdata = self.fetch( + f'{self.hosts["bili"][0]}/room/v1/Area/getList?need_entrance=1&parent_id=0', + headers=self.gethr(0, 'bili') + ).json() + return ('bili', [{'key': 'cate', 'name': '分类', + 'value': [{'n': i['name'], 'v': str(i['id'])} + for i in self.blfdata['data']]}]) + except Exception as e: + print(f"bili处理错误: {e}") + return 'bili', None + + def process_douyin(self): + try: + data = self.getpq(self.hosts['douyin'], headers=self.dyheaders)('script') + for i in data.items(): + if 'categoryData' in i.text(): + content = i.text() + start = content.find('{') + end = content.rfind('}') + 1 + if start != -1 and end != -1: + json_str = content[start:end] + json_str = json_str.replace('\\"', '"') + try: + self.dyifdata = json.loads(json_str) + return ('douyin', [{'key': 'cate', 'name': '分类', + 'value': [{'n': i['partition']['title'], + 'v': f"{i['partition']['id_str']}@@{i['partition']['title']}"} + for i in self.dyifdata['categoryData']]}]) + except json.JSONDecodeError as e: + print(f"douyin解析错误: {e}") + return 'douyin', None + except Exception as e: + print(f"douyin请求或处理错误: {e}") + return 'douyin', None + + 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", + "哔哩": "bili", + "抖音": "douyin", + "斗鱼": "douyu", + "网易": "wangyi" + } + classes = [] + filters = { + 'huya': [{'key': 'cate', 'name': '分类', + 'value': [{'n': '网游', 'v': '1'}, {'n': '单机', 'v': '2'}, + {'n': '娱乐', 'v': '8'}, {'n': '手游', 'v': '3'}]}] + } + + with ThreadPoolExecutor(max_workers=3) as executor: + futures = { + executor.submit(self.process_bili): 'bili', + executor.submit(self.process_douyin): 'douyin', + 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 'douyin' in tid: + vdata, pagecount = self.douyinContent(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): + if extend.get('cate') and pg == '1' and 'click' not in tid: + for i in self.blfdata['data']: + if str(i['id']) == extend['cate']: + for j in i['list']: + v = self.buildvod( + vod_id=f"click_{tid}@@{i['id']}@@{j['id']}", + vod_name=j.get('name'), + vod_pic=j.get('pic'), + vod_tag=1, + style={"type": "oval", "ratio": 1} + ) + vdata.append(v) + return vdata, 1 + else: + path = f'/xlive/web-interface/v1/second/getListByArea?platform=web&sort=online&page_size=30&page={pg}' + if 'click' in tid: + ids = tid.split('_')[1].split('@@') + tid = ids[0] + path = f'/xlive/web-interface/v1/second/getList?platform=web&parent_area_id={ids[1]}&area_id={ids[-1]}&sort_type=&page={pg}' + data = self.fetch(f'{self.hosts[tid][0]}{path}', headers=self.gethr(0, tid)).json() + for i in data['data']['list']: + if i.get('roomid'): + data = self.buildvod( + f"{tid}@@{i['roomid']}", + i.get('title'), + i.get('cover'), + i.get('watched_show', {}).get('text_large'), + 0, + i.get('uname'), + style={"type": "rect", "ratio": 1.33} + ) + vdata.append(data) + return vdata, 9999 + + 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 douyinContent(self, tid, pg, filter, extend, vdata): + if extend.get('cate') and pg == '1' and 'click' not in tid: + ids = extend.get('cate').split('@@') + for i in self.dyifdata['categoryData']: + c = i['partition'] + if c['id_str'] == ids[0] and c['title'] == ids[1]: + vlist = i['sub_partition'].copy() + vlist.insert(0, {'partition': c}) + for j in vlist: + j = j['partition'] + v = self.buildvod( + vod_id=f"click_{tid}@@{j['id_str']}@@{j['type']}", + vod_name=j.get('title'), + vod_pic='https://p3-pc-weboff.byteimg.com/tos-cn-i-9r5gewecjs/pwa_v3/512x512-1.png', + vod_tag=1, + style={"type": "oval", "ratio": 1} + ) + vdata.append(v) + return vdata, 1 + else: + path = f'/webcast/web/partition/detail/room/?aid=6383&app_name=douyin_web&live_id=1&device_platform=web&count=15&offset={(int(pg) - 1) * 15}&partition=720&partition_type=1' + if 'click' in tid: + ids = tid.split('_')[1].split('@@') + tid = ids[0] + path = f'/webcast/web/partition/detail/room/?aid=6383&app_name=douyin_web&live_id=1&device_platform=web&count=15&offset={(int(pg) - 1) * 15}&partition={ids[1]}&partition_type={ids[-1]}&req_from=2' + data = self.fetch(f'{self.hosts[tid]}{path}', headers=self.dyheaders).json() + for i in data['data']['data']: + v = self.buildvod( + vod_id=f"{tid}@@{i['web_rid']}", + vod_name=i['room'].get('title'), + vod_pic=i['room']['cover'].get('url_list')[0], + vod_year=i.get('user_count_str'), + vod_remarks=i['room']['owner'].get('nickname'), + 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] == 'douyin': + vod = self.douyinDetail(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): + try: + vdata = self.fetch( + f'{self.hosts[ids[0]][0]}/xlive/web-room/v1/index/getInfoByRoom?room_id={ids[1]}&wts={int(time.time())}', + headers=self.gethr(0, ids[0])).json() + v = vdata['data']['room_info'] + vod = self.buildvod( + vod_name=v.get('title'), + type_name=v.get('parent_area_name') + '/' + v.get('area_name'), + vod_remarks=v.get('tags'), + vod_play_from=v.get('title'), + ) + data = self.fetch( + f'{self.hosts[ids[0]][0]}/xlive/web-room/v2/index/getRoomPlayInfo?room_id={ids[1]}&protocol=0%2C1&format=0%2C1%2C2&codec=0%2C1&platform=web', + headers=self.gethr(0, ids[0])).json() + vdnams = data['data']['playurl_info']['playurl']['g_qn_desc'] + all_accept_qns = [] + streams = data['data']['playurl_info']['playurl']['stream'] + for stream in streams: + for format_item in stream['format']: + for codec in format_item['codec']: + if 'accept_qn' in codec: + all_accept_qns.append(codec['accept_qn']) + max_accept_qn = max(all_accept_qns, key=len) if all_accept_qns else [] + quality_map = { + item['qn']: item['desc'] + for item in vdnams + } + quality_names = [f"{quality_map.get(qn)}${ids[0]}@@{ids[1]}@@{qn}" for qn in max_accept_qn] + vod['vod_play_url'] = "#".join(quality_names) + return vod + except Exception as e: + return self.handle_exception(e) + + def huyaDetail(self, ids): + try: + vdata = self.fetch(f'{self.hosts[ids[0]][1]}/cache.php?m=Live&do=profileRoom&roomid={ids[1]}', + headers=self.headers[0]).json() + v = vdata['data']['liveData'] + vod = self.buildvod( + vod_name=v.get('introduction'), + type_name=v.get('gameFullName'), + vod_director=v.get('nick'), + vod_remarks=v.get('contentIntro'), + ) + data = dict(reversed(list(vdata['data']['stream'].items()))) + names = [] + plist = [] + + for stream_type, stream_data in data.items(): + if isinstance(stream_data, dict) and 'multiLine' in stream_data and 'rateArray' in stream_data: + names.append(f"线路{len(names) + 1}") + qualities = sorted( + stream_data['rateArray'], + key=lambda x: (x['iBitRate'], x['sDisplayName']), + reverse=True + ) + cdn_urls = [] + for cdn in stream_data['multiLine']: + quality_urls = [] + for quality in qualities: + quality_name = quality['sDisplayName'] + bit_rate = quality['iBitRate'] + base_url = cdn['url'] + if bit_rate > 0: + if '.m3u8' in base_url: + new_url = base_url.replace( + 'ratio=2000', + f'ratio={bit_rate}' + ) + else: + new_url = base_url.replace( + 'imgplus.flv', + f'imgplus_{bit_rate}.flv' + ) + else: + new_url = base_url + quality_urls.extend([quality_name, new_url]) + encoded_urls = self.e64(json.dumps(quality_urls)) + cdn_urls.append(f"{cdn['cdnType']}${ids[0]}@@{encoded_urls}") + + if cdn_urls: + plist.append('#'.join(cdn_urls)) + vod['vod_play_from'] = "$$$".join(names) + vod['vod_play_url'] = "$$$".join(plist) + return vod + except Exception as e: + return self.handle_exception(e) + + def douyinDetail(self, ids): + url = f'{self.hosts[ids[0]]}/webcast/room/web/enter/?aid=6383&app_name=douyin_web&live_id=1&device_platform=web&enter_from=web_live&web_rid={ids[1]}&room_id_str=&enter_source=&Room-Enter-User-Login-Ab=0&is_need_double_stream=false&cookie_enabled=true&screen_width=1980&screen_height=1080&browser_language=zh-CN&browser_platform=Win32&browser_name=Edge&browser_version=125.0.0.0' + data = self.fetch(url, headers=self.dyheaders).json() + try: + vdata = data['data']['data'][0] + vod = self.buildvod( + vod_name=vdata['title'], + vod_remarks=vdata['user_count_str'], + ) + resolution_data = vdata['stream_url']['live_core_sdk_data']['pull_data']['options']['qualities'] + stream_json = vdata['stream_url']['live_core_sdk_data']['pull_data']['stream_data'] + stream_json = json.loads(stream_json) + available_types = [] + if any(sdk_key in stream_json['data'] and 'main' in stream_json['data'][sdk_key] for sdk_key in + stream_json['data']): + available_types.append('main') + if any(sdk_key in stream_json['data'] and 'backup' in stream_json['data'][sdk_key] for sdk_key in + stream_json['data']): + available_types.append('backup') + plist = [] + for line_type in available_types: + format_arrays = {'flv': [], 'hls': [], 'lls': []} + qualities = sorted(resolution_data, key=lambda x: x['level'], reverse=True) + for quality in qualities: + sdk_key = quality['sdk_key'] + if sdk_key in stream_json['data'] and line_type in stream_json['data'][sdk_key]: + stream_info = stream_json['data'][sdk_key][line_type] + if stream_info.get('flv'): + format_arrays['flv'].extend([quality['name'], stream_info['flv']]) + if stream_info.get('hls'): + format_arrays['hls'].extend([quality['name'], stream_info['hls']]) + if stream_info.get('lls'): + format_arrays['lls'].extend([quality['name'], stream_info['lls']]) + format_urls = [] + for format_name, url_array in format_arrays.items(): + if url_array: + encoded_urls = self.e64(json.dumps(url_array)) + format_urls.append(f"{format_name}${ids[0]}@@{encoded_urls}") + + if format_urls: + plist.append('#'.join(format_urls)) + + names = ['线路1', '线路2'][:len(plist)] + vod['vod_play_from'] = "$$$".join(names) + vod['vod_play_url'] = "$$$".join(plist) + return vod + + except Exception as e: + return self.handle_exception(e) + + def douyuDetail(self, ids): + headers = self.gethr(0, zr=f'{self.hosts[ids[0]]}/{ids[1]}') + try: + data = self.fetch(f'{self.hosts[ids[0]]}/betard/{ids[1]}', headers=headers).json() + vname = data['room']['room_name'] + vod = self.buildvod( + vod_name=vname, + vod_remarks=data['room'].get('second_lvl_name'), + vod_director=data['room'].get('nickname'), + ) + vdata = self.fetch(f'{self.hosts[ids[0]]}/swf_api/homeH5Enc?rids={ids[1]}', headers=headers).json() + json_body = vdata['data'] + json_body = {"html": self.douyu_text(json_body[f'room{ids[1]}']), "rid": ids[1]} + sign = self.post('http://alive.nsapps.cn/api/AllLive/DouyuSign', json=json_body, headers=self.headers[1]).json()['data'] + body = f'{sign}&cdn=&rate=-1&ver=Douyu_223061205&iar=1&ive=1&hevc=0&fa=0' + body=self.params_to_json(body) + nubdata = self.post(f'{self.hosts[ids[0]]}/lapi/live/getH5Play/{ids[1]}', data=body, headers=headers).json() + plist = [] + names = [] + for i,x in enumerate(nubdata['data']['cdnsWithName']): + names.append(f'线路{i+1}') + d = {'sign': sign, 'cdn': x['cdn'], 'id': ids[1]} + plist.append( + f'{vname}${ids[0]}@@{self.e64(json.dumps(d))}@@{self.e64(json.dumps(nubdata["data"]["multirates"]))}') + vod['vod_play_from'] = "$$$".join(names) + vod['vod_play_url'] = "$$$".join(plist) + return vod + except Exception as e: + return self.handle_exception(e) + + def douyu_text(self, text): + function_positions = [m.start() for m in re.finditer('function', text)] + total_functions = len(function_positions) + if total_functions % 2 == 0: + target_index = total_functions // 2 + 1 + else: + target_index = (total_functions - 1) // 2 + 1 + if total_functions >= target_index: + cut_position = function_positions[target_index - 1] + ctext = text[4:cut_position] + return re.sub(r'eval\(strc\)\([\w\d,]+\)', 'strc', ctext) + return text + + 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', 'douyin','huya']: + p, url = 0, json.loads(self.d64(ids[1])) + elif ids[0] == 'bili': + p, url = self.biliplay(ids) + elif ids[0] == 'huya': + p, url = 0, json.loads(self.d64(ids[1])) + 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): + try: + data = self.fetch( + f'{self.hosts[ids[0]][0]}/xlive/web-room/v2/index/getRoomPlayInfo?room_id={ids[1]}&protocol=0,1&format=0,2&codec=0&platform=web&qn={ids[2]}', + headers=self.gethr(0, ids[0])).json() + urls = [] + line_index = 1 + for stream in data['data']['playurl_info']['playurl']['stream']: + for format_item in stream['format']: + for codec in format_item['codec']: + for url_info in codec['url_info']: + full_url = f"{url_info['host']}/{codec['base_url'].lstrip('/')}{url_info['extra']}" + urls.extend([f"线路{line_index}", full_url]) + line_index += 1 + return 0, urls + except Exception as e: + return 1, self.excepturl + + def douyuplay(self, ids): + try: + sdata = json.loads(self.d64(ids[1])) + headers = self.gethr(0, zr=f'{self.hosts[ids[0]]}/{sdata["id"]}') + ldata = json.loads(self.d64(ids[2])) + result_obj = {} + with ThreadPoolExecutor(max_workers=len(ldata)) as executor: + futures = [ + executor.submit( + self.douyufp, + sdata, + quality, + headers, + self.hosts[ids[0]], + result_obj + ) for quality in ldata + ] + for future in futures: + future.result() + + result = [] + for bit in sorted(result_obj.keys(), reverse=True): + result.extend(result_obj[bit]) + + if result: + return 0, result + return 1, self.excepturl + + except Exception as e: + return 1, self.excepturl + + def douyufp(self, sdata, quality, headers, host, result_obj): + try: + body = f'{sdata["sign"]}&cdn={sdata["cdn"]}&rate={quality["rate"]}' + body=self.params_to_json(body) + data = self.post(f'{host}/lapi/live/getH5Play/{sdata["id"]}', + data=body, headers=headers).json() + if data.get('data'): + play_url = data['data']['rtmp_url'] + '/' + data['data']['rtmp_live'] + bit = quality.get('bit', 0) + if bit not in result_obj: + result_obj[bit] = [] + result_obj[bit].extend([quality['name'], play_url]) + except Exception as e: + print(f"Error fetching {quality['name']}: {str(e)}") + + 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}'} + diff --git a/py/LREEOK.py b/py/LREEOK.py new file mode 100644 index 0000000..d758eeb --- /dev/null +++ b/py/LREEOK.py @@ -0,0 +1,159 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +# 温馨提示:官方APP数据是错误的,你们可以给官方反馈,然后就可以写APP +import re +import sys +from Crypto.Hash import MD5 +sys.path.append("..") +import json +import time +from pyquery import PyQuery as pq +from base.spider import Spider + + +class Spider(Spider): + + def init(self, extend=""): + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def action(self, action): + pass + + def destroy(self): + pass + + host = 'https://www.lreeok.vip' + + headers = { + 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36', + 'Accept': 'application/json, text/javascript, */*; q=0.01', + 'sec-ch-ua-platform': '"macOS"', + 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="134", "Google Chrome";v="134"', + 'Origin': host, + 'Referer': f"{host}/", + } + + def homeContent(self, filter): + data = self.getpq(self.fetch(self.host, headers=self.headers).text) + result = {} + classes = [] + for k in data('.head-more.box a').items(): + i = k.attr('href') + if i and '/vod' in i: + classes.append({ + 'type_name': k.text(), + 'type_id': re.search(r'\d+', i).group(0) + }) + result['class'] = classes + result['list'] = self.getlist(data('.border-box.diy-center .public-list-div')) + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, tid, pg, filter, extend): + body = {'type': tid, 'class': '', 'area': '', 'lang': '', 'version': '', 'state': '', 'letter': '', 'page': pg} + data = self.post(f"{self.host}/index.php/api/vod", headers=self.headers, data=self.getbody(body)).json() + result = {} + result['list'] = data['list'] + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + data = self.getpq(self.fetch(f"{self.host}/voddetail/{ids[0]}.html", headers=self.headers).text) + v = data('.detail-info.lightSpeedIn .slide-info') + vod = { + 'vod_year': v.eq(-1).text(), + 'vod_remarks': v.eq(0).text(), + 'vod_actor': v.eq(3).text(), + 'vod_director': v.eq(2).text(), + 'vod_content': data('.switch-box #height_limit').text() + } + np = data('.anthology.wow.fadeInUp') + ndata = np('.anthology-tab .swiper-wrapper .swiper-slide') + pdata = np('.anthology-list .anthology-list-box ul') + play, names = [], [] + for i in range(len(ndata)): + n = ndata.eq(i)('a') + n('span').remove() + names.append(n.text()) + vs = [] + for v in pdata.eq(i)('li').items(): + vs.append(f"{v.text()}${v('a').attr('href')}") + play.append('#'.join(vs)) + vod["vod_play_from"] = "$$$".join(names) + vod["vod_play_url"] = "$$$".join(play) + result = {"list": [vod]} + return result + + def searchContent(self, key, quick, pg="1"): + data = self.getpq(self.fetch(f"{self.host}/vodsearch/{key}----------{pg}---.html", headers=self.headers).text) + return {'list': self.getlist(data('.row-right .search-box .public-list-bj')), 'page': pg} + + def playerContent(self, flag, id, vipFlags): + h, p = {"User-Agent": "okhttp/3.14.9"}, 1 + url = f"{self.host}{id}" + data = self.getpq(self.fetch(url, headers=self.headers).text) + try: + jstr = data('.player .player-left script').eq(0).text() + jsdata = json.loads(jstr.split('aaa=')[-1]) + body = {'url': jsdata['url']} + if not re.search(r'\.m3u8|\.mp4', body['url']): + data = self.post(f"{self.host}/okplay/api_config.php", headers=self.headers, + data=self.getbody(body)).json() + url = data.get('url') or data.get('data', {}).get('url') + p = 0 + except Exception as e: + print('错误信息:', e) + pass + result = {} + result["parse"] = p + result["url"] = url + result["header"] = h + return result + + def localProxy(self, param): + pass + + def getbody(self, params): + t = int(time.time()) + h = MD5.new() + h.update(f"DS{t}DCC147D11943AF75".encode('utf-8')) + key = h.hexdigest() + params.update({'time': t, 'key': key}) + return params + + def getlist(self, data): + videos = [] + for i in data.items(): + id = i('a').attr('href') + if id: + id = re.search(r'\d+', id).group(0) + img = i('img').attr('data-src') + if img and 'url=' in img: img = f'{self.host}{img}' + videos.append({ + 'vod_id': id, + 'vod_name': i('img').attr('alt'), + 'vod_pic': img, + 'vod_remarks': i('.public-prt').text() or i('.public-list-prb').text() + }) + return videos + + def getpq(self, data): + try: + return pq(data) + except Exception as e: + print(f"{str(e)}") + return pq(data.encode('utf-8')) diff --git a/py/Mang.py b/py/Mang.py new file mode 100644 index 0000000..6ba8e34 --- /dev/null +++ b/py/Mang.py @@ -0,0 +1,205 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import sys +import time +from concurrent.futures import ThreadPoolExecutor, as_completed +sys.path.append('..') +from base.spider import Spider + +class Spider(Spider): + + def init(self, extend=""): + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + rhost='https://www.mgtv.com' + + host='https://pianku.api.mgtv.com' + + vhost='https://pcweb.api.mgtv.com' + + mhost='https://dc.bz.mgtv.com' + + shost='https://mobileso.bz.mgtv.com' + + 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', + 'origin': rhost, + 'referer': f'{rhost}/' + } + + def homeContent(self, filter): + result = {} + cateManual = { + "电影": "3", + "电视剧": "2", + "综艺": "1", + "动画": "50", + "少儿": "10", + "纪录片": "51", + "教育": "115" + } + classes = [] + filters = {} + for k in cateManual: + classes.append({ + 'type_name': k, + 'type_id': cateManual[k] + }) + 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 + return result + + def homeVideoContent(self): + data=self.fetch(f'{self.mhost}/dynamic/v1/channel/index/0/0/0/1000000/0/0/17/1354?type=17&version=5.0&t={str(int(time.time()*1000))}&_support=10000000', headers=self.headers).json() + videoList = [] + for i in data['data']: + if i.get('DSLList') and len(i['DSLList']): + for j in i['DSLList']: + if j.get('data') and j['data'].get('items') and len(j['data']['items']): + for k in j['data']['items']: + videoList.append({ + 'vod_id': k["videoId"], + 'vod_name': k['videoName'], + 'vod_pic': k['img'], + 'vod_year': k.get('cornerTitle'), + 'vod_remarks': k.get('time') or k.get('desc'), + }) + return {'list':videoList} + + def categoryContent(self, tid, pg, filter, extend): + body={ + 'allowedRC': '1', + 'platform': 'pcweb', + 'channelId': tid, + 'pn': pg, + 'pc': '80', + 'hudong': '1', + '_support': '10000000' + } + body.update(extend) + data=self.fetch(f'{self.host}/rider/list/pcweb/v3', params=body, headers=self.headers).json() + videoList = [] + for i in data['data']['hitDocs']: + videoList.append({ + 'vod_id': i["playPartId"], + 'vod_name': i['title'], + 'vod_pic': i['img'], + 'vod_year': (i.get('rightCorner',{}) or {}).get('text') or i.get('year'), + 'vod_remarks': i['updateInfo'] + }) + result = {} + result['list'] = videoList + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + vbody={'allowedRC': '1', 'vid': ids[0], 'type': 'b', '_support': '10000000'} + vdata=self.fetch(f'{self.vhost}/video/info', params=vbody, headers=self.headers).json() + d=vdata['data']['info']['detail'] + vod = { + 'vod_name': vdata['data']['info']['title'], + 'type_name': d.get('kind'), + 'vod_year': d.get('releaseTime'), + 'vod_area': d.get('area'), + 'vod_lang': d.get('language'), + 'vod_remarks': d.get('updateInfo'), + 'vod_actor': d.get('leader'), + 'vod_director': d.get('director'), + 'vod_content': d.get('story'), + 'vod_play_from': '芒果TV', + 'vod_play_url': '' + } + data,pdata=self.fetch_page_data('1', ids[0],True) + pagecount=data['data'].get('total_page') or 1 + if int(pagecount)>1: + pages = list(range(2, pagecount+1)) + page_results = {} + with ThreadPoolExecutor(max_workers=10) as executor: + future_to_page = { + executor.submit(self.fetch_page_data, page, ids[0]): page + for page in pages + } + for future in as_completed(future_to_page): + page = future_to_page[future] + try: + result = future.result() + page_results[page] = result + except Exception as e: + print(f"Error fetching page {page}: {e}") + for page in sorted(page_results.keys()): + pdata.extend(page_results[page]) + vod['vod_play_url'] = '#'.join(pdata) + return {'list':[vod]} + + def searchContent(self, key, quick, pg="1"): + data=self.fetch(f'{self.shost}/applet/search/v1?channelCode=mobile-wxap&q={key}&pn={pg}&pc=10&_support=10000000', headers=self.headers).json() + videoList = [] + for i in data['data']['contents']: + if i.get('data') and len(i['data']): + k = i['data'][0] + if k.get('vid') and k.get('img'): + try: + videoList.append({ + 'vod_id': k['vid'], + 'vod_name': k['title'], + 'vod_pic': k['img'], + 'vod_year': (i.get('rightTopCorner',{}) or {}).get('text') or i.get('year'), + 'vod_remarks': '/'.join(i.get('desc',[])), + }) + except: + print(k) + return {'list':videoList,'page':pg} + + def playerContent(self, flag, id, vipFlags): + id=f'{self.rhost}{id}' + return {'jx':1,'parse': 1, 'url': id, 'header': ''} + + def localProxy(self, param): + pass + + def getf(self, body): + params = { + 'allowedRC': '1', + 'channelId': body['type_id'], + 'platform': 'pcweb', + '_support': '10000000', + } + data = self.fetch(f'{self.host}/rider/config/channel/v1', params=params, headers=self.headers).json() + ft = [] + for i in data['data']['listItems']: + try: + value_array = [{"n": value['tagName'], "v": value['tagId']} for value in i['items'] if + value.get('tagName')] + ft.append({"key": i['eName'], "name": i['typeName'], "value": value_array}) + except: + print(i) + return body['type_id'], ft + + def fetch_page_data(self, page, id, b=False): + body = {'version': '5.5.35', 'video_id': id, 'page': page, 'size': '30', + 'platform': '4', 'src': 'mgtv', 'allowedRC': '1', '_support': '10000000'} + data = self.fetch(f'{self.vhost}/episode/list', params=body, headers=self.headers).json() + ldata = [f'{i["t3"]}${i["url"]}' for i in data['data']['list']] + if b: + return data, ldata + else: + return ldata diff --git a/py/MiFunP.py b/py/MiFunP.py new file mode 100644 index 0000000..be827d8 --- /dev/null +++ b/py/MiFunP.py @@ -0,0 +1,249 @@ +import re +import sys +import threading +import requests +from Crypto.Hash import MD5 +sys.path.append("..") +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad, unpad +from urllib.parse import quote, urlparse +from base64 import b64encode, b64decode +import json +import time +from base.spider import Spider + + +class Spider(Spider): + + def init(self, extend=""): + self.host = self.gethost() + self.did=self.getdid() + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def action(self, action): + pass + + def destroy(self): + pass + + def homeContent(self, filter): + data = self.getdata("/api.php/getappapi.index/initV119") + dy = {"class": "类型", "area": "地区", "lang": "语言", "year": "年份", "letter": "字母", "by": "排序", + "sort": "排序"} + filters = {} + classes = [] + json_data = data["type_list"] + homedata = data["banner_list"][8:] + for item in json_data: + if item["type_name"] == "全部": + continue + has_non_empty_field = False + jsontype_extend = json.loads(item["type_extend"]) + homedata.extend(item["recommend_list"]) + jsontype_extend["sort"] = "最新,最热,最赞" + classes.append({"type_name": item["type_name"], "type_id": item["type_id"]}) + for key in dy: + if key in jsontype_extend and jsontype_extend[key].strip() != "": + has_non_empty_field = True + break + if has_non_empty_field: + filters[str(item["type_id"])] = [] + for dkey in jsontype_extend: + if dkey in dy and jsontype_extend[dkey].strip() != "": + values = jsontype_extend[dkey].split(",") + value_array = [{"n": value.strip(), "v": value.strip()} for value in values if + value.strip() != ""] + filters[str(item["type_id"])].append({"key": dkey, "name": dy[dkey], "value": value_array}) + result = {} + result["class"] = classes + result["filters"] = filters + result["list"] = homedata[1:] + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, tid, pg, filter, extend): + body = {"area": extend.get('area', '全部'), "year": extend.get('year', '全部'), "type_id": tid, "page": pg, + "sort": extend.get('sort', '最新'), "lang": extend.get('lang', '全部'), + "class": extend.get('class', '全部')} + result = {} + data = self.getdata("/api.php/getappapi.index/typeFilterVodList", body) + result["list"] = data["recommend_list"] + result["page"] = pg + result["pagecount"] = 9999 + result["limit"] = 90 + result["total"] = 999999 + return result + + def detailContent(self, ids): + body = f"vod_id={ids[0]}" + data = self.getdata("/api.php/getappapi.index/vodDetail", body) + vod = data["vod"] + play = [] + names = [] + for itt in data["vod_play_list"]: + a = [] + names.append(itt["player_info"]["show"]) + for it in itt['urls']: + it['user_agent'] = itt["player_info"].get("user_agent") + it["parse"] = itt["player_info"].get("parse") + a.append(f"{it['name']}${self.e64(json.dumps(it))}") + play.append("#".join(a)) + vod["vod_play_from"] = "$$$".join(names) + vod["vod_play_url"] = "$$$".join(play) + result = {"list": [vod]} + return result + + def searchContent(self, key, quick, pg="1"): + body = f"keywords={key}&type_id=0&page={pg}" + data = self.getdata("/api.php/getappapi.index/searchList", body) + result = {"list": data["search_list"], "page": pg} + return result + + def playerContent(self, flag, id, vipFlags): + ids = json.loads(self.d64(id)) + h = {"User-Agent": (ids['user_agent'] or "okhttp/3.14.9")} + try: + if re.search(r'url=', ids['parse_api_url']): + data = self.fetch(ids['parse_api_url'], headers=h, timeout=10).json() + url = data.get('url') or data['data'].get('url') + else: + body = f"parse_api={ids.get('parse') or ids['parse_api_url'].replace(ids['url'], '')}&url={quote(self.aes(ids['url'], True))}&token={ids.get('token')}" + b = self.getdata("/api.php/getappapi.index/vodParse", body)['json'] + url = json.loads(b)['url'] + if 'error' in url: raise ValueError(f"解析失败: {url}") + p = 0 + except Exception as e: + print('错误信息:', e) + url, p = ids['url'], 1 + + if re.search(r'\.jpg|\.png|\.jpeg', url): + url = self.Mproxy(url) + result = {} + result["parse"] = p + result["url"] = url + result["header"] = h + return result + + def localProxy(self, param): + return self.Mlocal(param) + + def gethost(self): + headers = { + 'User-Agent': 'okhttp/3.14.9' + } + response = self.fetch('https://miget-1313189639.cos.ap-guangzhou.myqcloud.com/mifun.txt',headers=headers).text + return self.host_late(response.split('\n')) + + 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: + url = url.strip() + 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 getdid(self): + did=self.getCache('did') + if not did: + t = str(int(time.time())) + did = self.md5(t) + self.setCache('did', did) + return did + + def aes(self, text, b=None): + key = b"GETMIFUNGEIMIFUN" + cipher = AES.new(key, AES.MODE_CBC, key) + if b: + ct_bytes = cipher.encrypt(pad(text.encode("utf-8"), AES.block_size)) + ct = b64encode(ct_bytes).decode("utf-8") + return ct + else: + pt = unpad(cipher.decrypt(b64decode(text)), AES.block_size) + return pt.decode("utf-8") + + def header(self): + t = str(int(time.time())) + header = {"Referer": self.host, + "User-Agent": "okhttp/3.14.9", "app-version-code": "516", "app-ui-mode": "light", + "app-api-verify-time": t, "app-user-device-id": self.did, + "app-api-verify-sign": self.aes(t, True), + "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"} + return header + + def getdata(self, path, data=None): + vdata = self.post(f"{self.host}{path}", headers=self.header(), data=data, timeout=10).json()['data'] + data1 = self.aes(vdata) + return json.loads(data1) + + def Mproxy(self, url): + return f"{self.getProxyUrl()}&url={self.e64(url)}&type=m3u8" + + def Mlocal(self, param, header=None): + url = self.d64(param["url"]) + ydata = self.fetch(url, headers=header, allow_redirects=False) + data = ydata.content.decode('utf-8') + if ydata.headers.get('Location'): + url = ydata.headers['Location'] + data = self.fetch(url, headers=header).content.decode('utf-8') + parsed_url = urlparse(url) + durl = parsed_url.scheme + "://" + parsed_url.netloc + lines = data.strip().split('\n') + for index, string in enumerate(lines): + if '#EXT' not in string and 'http' not in string: + last_slash_index = string.rfind('/') + lpath = string[:last_slash_index + 1] + lines[index] = durl + ('' if lpath.startswith('/') else '/') + lpath + data = '\n'.join(lines) + return [200, "application/vnd.apple.mpegur", data] + + 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() + diff --git a/py/Phb.py b/py/Phb.py new file mode 100644 index 0000000..197f92d --- /dev/null +++ b/py/Phb.py @@ -0,0 +1,268 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import json +import re +import sys +from pyquery import PyQuery as pq +from base64 import b64decode, b64encode +from requests import Session +sys.path.append('..') +from base.spider import Spider + + +class Spider(Spider): + + def init(self, extend=""): + self.host=self.gethost() + self.headers['referer']=f'{self.host}/' + self.session = Session() + self.session.headers.update(self.headers) + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + headers = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.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,application/signed-exchange;v=b3;q=0.7', + 'sec-ch-ua': '"Not(A:Brand";v="99", "Google Chrome";v="133", "Chromium";v="133"', + 'sec-ch-ua-mobile': '?0', + 'sec-ch-ua-full-version': '"133.0.6943.98"', + 'sec-ch-ua-arch': '"x86"', + 'sec-ch-ua-platform': '"Windows"', + 'sec-ch-ua-platform-version': '"19.0.0"', + 'sec-ch-ua-model': '""', + 'sec-ch-ua-full-version-list': '"Not(A:Brand";v="99.0.0.0", "Google Chrome";v="133.0.6943.98", "Chromium";v="133.0.6943.98"', + 'dnt': '1', + 'upgrade-insecure-requests': '1', + 'sec-fetch-site': 'none', + 'sec-fetch-mode': 'navigate', + 'sec-fetch-user': '?1', + 'sec-fetch-dest': 'document', + 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', + 'priority': 'u=0, i' + } + + def homeContent(self, filter): + result = {} + cateManual = { + "视频": "/video", + "片单": "/playlists", + "频道": "/channels", + "分类": "/categories", + "明星": "/pornstars" + } + classes = [] + filters = {} + for k in cateManual: + classes.append({ + 'type_name': k, + 'type_id': cateManual[k] + }) + result['class'] = classes + result['filters'] = filters + return result + + def homeVideoContent(self): + data = self.getpq('/recommended') + vhtml = data("#recommendedListings .pcVideoListItem .phimage") + return {'list':self.getlist(vhtml)} + + def categoryContent(self, tid, pg, filter, extend): + vdata = [] + result = {} + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + if tid=='/video' or '_this_video' in tid: + pagestr = f'&' if '?' in tid else f'?' + tid=tid.split('_this_video')[0] + data=self.getpq(f'{tid}{pagestr}page={pg}') + vdata=self.getlist(data('#videoCategory .pcVideoListItem')) + elif tid == '/playlists': + data=self.getpq(f'{tid}?page={pg}') + vhtml=data('#playListSection li') + vdata = [] + for i in vhtml.items(): + vdata.append({ + 'vod_id': 'playlists_click_' + i('.thumbnail-info-wrapper .display-block a').attr('href'), + 'vod_name': i('.thumbnail-info-wrapper .display-block a').attr('title'), + 'vod_pic': i('.largeThumb').attr('src'), + 'vod_tag': 'folder', + 'vod_remarks': i('.playlist-videos .number').text(), + 'style': {"type": "rect", "ratio": 1.33} + }) + elif tid=='/channels': + data=self.getpq(f'{tid}?o=rk&page={pg}') + vhtml=data('#filterChannelsSection li .description') + vdata=[] + for i in vhtml.items(): + vdata.append({ + 'vod_id': 'director_click_'+i('.avatar a').attr('href'), + 'vod_name': i('.avatar img').attr('alt'), + 'vod_pic': i('.avatar img').attr('src'), + 'vod_tag':'folder', + 'vod_remarks': i('.descriptionContainer ul li').eq(-1).text(), + 'style':{"type": "rect", "ratio": 1.33} + }) + elif tid=='/categories' and pg=='1': + result['pagecount'] = 1 + data=self.getpq(f'{tid}') + vhtml=data('.categoriesListSection li .relativeWrapper') + vdata=[] + for i in vhtml.items(): + vdata.append({ + 'vod_id': i('a').attr('href')+'_this_video', + 'vod_name': i('a').attr('alt'), + 'vod_pic': i('a img').attr('src'), + 'vod_tag':'folder', + 'style':{"type": "rect", "ratio": 1.33} + }) + elif tid=='/pornstars': + data=self.getpq(f'{tid}?o=t&page={pg}') + vhtml=data('#popularPornstars .performerCard .wrap') + vdata=[] + for i in vhtml.items(): + vdata.append({ + 'vod_id': 'pornstars_click_'+i('a').attr('href'), + 'vod_name': i('.performerCardName').text(), + 'vod_pic': i('a img').attr('src'), + 'vod_tag':'folder', + 'vod_year':i('.performerVideosViewsCount span').eq(0).text(), + 'vod_remarks': i('.performerVideosViewsCount span').eq(-1).text(), + 'style':{"type": "rect", "ratio": 1.33} + }) + elif 'playlists_click' in tid: + tid=tid.split('click_')[-1] + if pg=='1': + hdata=self.getpq(tid) + self.token=hdata('#searchInput').attr('data-token') + vdata = self.getlist(hdata('#videoPlaylist .pcVideoListItem .phimage')) + else: + tid=tid.split('playlist/')[-1] + data=self.getpq(f'/playlist/viewChunked?id={tid}&token={self.token}&page={pg}') + vdata=self.getlist(data('.pcVideoListItem .phimage')) + elif 'director_click' in tid: + tid=tid.split('click_')[-1] + data=self.getpq(f'{tid}/videos?page={pg}') + vdata=self.getlist(data('#showAllChanelVideos .pcVideoListItem .phimage')) + elif 'pornstars_click' in tid: + tid=tid.split('click_')[-1] + data=self.getpq(f'{tid}/videos?page={pg}') + vdata=self.getlist(data('#mostRecentVideosSection .pcVideoListItem .phimage')) + result['list'] = vdata + return result + + def detailContent(self, ids): + url = f"{self.host}{ids[0]}" + data = self.getpq(ids[0]) + vn=data('meta[property="og:title"]').attr('content') + dtext=data('.userInfo .usernameWrap a') + pdtitle = '[a=cr:' + json.dumps({'id': 'director_click_'+dtext.attr('href'), 'name': dtext.text()}) + '/]' + dtext.text() + '[/a]' + vod = { + 'vod_name': vn, + 'vod_director':pdtitle, + 'vod_remarks': (data('.userInfo').text()+' / '+data('.ratingInfo').text()).replace('\n',' / '), + 'vod_play_from': 'Pornhub', + 'vod_play_url': '' + } + js_content = data("#player script").eq(0).text() + plist = [f"{vn}${self.e64(f'{1}@@@@{url}')}"] + try: + pattern = r'"mediaDefinitions":\s*(\[.*?\]),\s*"isVertical"' + match = re.search(pattern, js_content, re.DOTALL) + if match: + json_str = match.group(1) + udata = json.loads(json_str) + plist = [ + f"{media['height']}${self.e64(f'{0}@@@@{url}')}" + for media in udata[:-1] + if (url := media.get('videoUrl')) + ] + except Exception as e: + print(f"提取mediaDefinitions失败: {str(e)}") + vod['vod_play_url'] = '#'.join(plist) + return {'list':[vod]} + + def searchContent(self, key, quick, pg="1"): + data=self.getpq(f'/video/search?search={key}&page={pg}') + return {'list':self.getlist(data('#videoSearchResult .pcVideoListItem .phimage'))} + + def playerContent(self, flag, id, vipFlags): + headers = { + 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.5410.0 Safari/537.36', + 'pragma': 'no-cache', + 'cache-control': 'no-cache', + 'sec-ch-ua-platform': '"Windows"', + 'sec-ch-ua': '"Not(A:Brand";v="99", "Google Chrome";v="133", "Chromium";v="133"', + 'dnt': '1', + 'sec-ch-ua-mobile': '?0', + 'origin': self.host, + 'sec-fetch-site': 'cross-site', + 'sec-fetch-mode': 'cors', + 'sec-fetch-dest': 'empty', + 'referer': f'{self.host}/', + 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', + 'priority': 'u=1, i', + } + ids=self.d64(id).split('@@@@') + return {'parse': int(ids[0]), 'url': ids[1], 'header': headers} + + def localProxy(self, param): + pass + + def gethost(self): + try: + response = self.fetch('https://www.pornhub.com',headers=self.headers,allow_redirects=False) + return response.headers['Location'][:-1] + except Exception as e: + print(f"获取主页失败: {str(e)}") + return "https://www.pornhub.com" + + 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 getlist(self, data): + vlist=[] + for i in data.items(): + vlist.append({ + 'vod_id': i('a').attr('href'), + 'vod_name': i('a').attr('title'), + 'vod_pic': i('img').attr('src'), + 'vod_remarks': i('.bgShadeEffect').text() or i('.duration').text(), + 'style': {'ratio': 1.33, 'type': 'rect'} + }) + return vlist + + def getpq(self, path): + try: + response = self.session.get(f'{self.host}{path}').text + return pq(response.encode('utf-8')) + except Exception as e: + print(f"请求失败: , {str(e)}") + return None diff --git a/py/Teng.py b/py/Teng.py new file mode 100644 index 0000000..7a5218f --- /dev/null +++ b/py/Teng.py @@ -0,0 +1,323 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import json +import sys +import uuid +import copy +sys.path.append('..') +from base.spider import Spider +from concurrent.futures import ThreadPoolExecutor, as_completed + + +class Spider(Spider): + + def init(self, extend=""): + self.dbody = { + "page_params": { + "channel_id": "", + "filter_params": "sort=75", + "page_type": "channel_operation", + "page_id": "channel_list_second_page" + } + } + self.body = self.dbody + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + host = 'https://v.qq.com' + + apihost = 'https://pbaccess.video.qq.com' + + headers = { + 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.5410.0 Safari/537.36', + 'origin': host, + 'referer': f'{host}/' + } + + def homeContent(self, filter): + cdata = { + "电视剧": "100113", + "电影": "100173", + "综艺": "100109", + "纪录片": "100105", + "动漫": "100119", + "少儿": "100150", + "短剧": "110755" + } + result = {} + classes = [] + filters = {} + for k in cdata: + classes.append({ + 'type_name': k, + 'type_id': cdata[k] + }) + with ThreadPoolExecutor(max_workers=len(classes)) as executor: + futures = [executor.submit(self.get_filter_data, item['type_id']) for item in classes] + for future in futures: + cid, data = future.result() + if not data.get('data', {}).get('module_list_datas'): + continue + filter_dict = {} + try: + items = data['data']['module_list_datas'][-1]['module_datas'][-1]['item_data_lists']['item_datas'] + for item in items: + if not item.get('item_params', {}).get('index_item_key'): + continue + params = item['item_params'] + filter_key = params['index_item_key'] + if filter_key not in filter_dict: + filter_dict[filter_key] = { + 'key': filter_key, + 'name': params['index_name'], + 'value': [] + } + filter_dict[filter_key]['value'].append({ + 'n': params['option_name'], + 'v': params['option_value'] + }) + except (IndexError, KeyError): + continue + filters[cid] = list(filter_dict.values()) + result['class'] = classes + result['filters'] = filters + return result + + def homeVideoContent(self): + json_data = {'page_context':None,'page_params':{'page_id':'100101','page_type':'channel','skip_privacy_types':'0','support_click_scan':'1','new_mark_label_enabled':'1','ams_cookies':'',},'page_bypass_params':{'params':{'caller_id':'','data_mode':'default','page_id':'','page_type':'channel','platform_id':'2','user_mode':'default',},'scene':'channel','abtest_bypass_id':'',}} + data = self.post(f'{self.apihost}/trpc.vector_layout.page_view.PageService/getPage',headers=self.headers, json=json_data).json() + vlist = [] + for it in data['data']['CardList'][0]['children_list']['list']['cards']: + if it.get('params'): + p = it['params'] + tag = json.loads(p.get('uni_imgtag', '{}') or p.get('imgtag', '{}') or '{}') + id = it.get('id') or p.get('cid') + name = p.get('mz_title') or p.get('title') + if name and 'http' not in id: + vlist.append({ + 'vod_id': id, + 'vod_name': name, + 'vod_pic': p.get('image_url'), + 'vod_year': tag.get('tag_2', {}).get('text'), + 'vod_remarks': tag.get('tag_4', {}).get('text') + }) + return {'list': vlist} + + def categoryContent(self, tid, pg, filter, extend): + result = {} + params = { + "sort": extend.get('sort', '75'), + "attr": extend.get('attr', '-1'), + "itype": extend.get('itype', '-1'), + "ipay": extend.get('ipay', '-1'), + "iarea": extend.get('iarea', '-1'), + "iyear": extend.get('iyear', '-1'), + "theater": extend.get('theater', '-1'), + "award": extend.get('award', '-1'), + "recommend": extend.get('recommend', '-1') + } + if pg == '1': + self.body = self.dbody.copy() + self.body['page_params']['channel_id'] = tid + self.body['page_params']['filter_params'] = self.josn_to_params(params) + data = self.post( + f'{self.apihost}/trpc.universal_backend_service.page_server_rpc.PageServer/GetPageData?video_appid=1000005&vplatform=2&vversion_name=8.9.10&new_mark_label_enabled=1', + json=self.body, headers=self.headers).json() + ndata = data['data'] + if ndata['has_next_page']: + result['pagecount'] = 9999 + self.body['page_context'] = ndata['next_page_context'] + else: + result['pagecount'] = int(pg) + vlist = [] + for its in ndata['module_list_datas'][-1]['module_datas'][-1]['item_data_lists']['item_datas']: + id = its.get('item_params', {}).get('cid') + if id: + p = its['item_params'] + tag = json.loads(p.get('uni_imgtag', '{}') or p.get('imgtag', '{}') or '{}') + name = p.get('mz_title') or p.get('title') + pic = p.get('new_pic_hz') or p.get('new_pic_vt') + vlist.append({ + 'vod_id': id, + 'vod_name': name, + 'vod_pic': pic, + 'vod_year': tag.get('tag_2', {}).get('text'), + 'vod_remarks': tag.get('tag_4', {}).get('text') + }) + result['list'] = vlist + result['page'] = pg + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + vbody = {"page_params":{"req_from":"web","cid":ids[0],"vid":"","lid":"","page_type":"detail_operation","page_id":"detail_page_introduction"},"has_cache":1} + body = {"page_params":{"req_from":"web_vsite","page_id":"vsite_episode_list","page_type":"detail_operation","id_type":"1","page_size":"","cid":ids[0],"vid":"","lid":"","page_num":"","page_context":"","detail_page_type":"1"},"has_cache":1} + with ThreadPoolExecutor(max_workers=2) as executor: + future_detail = executor.submit(self.get_vdata, vbody) + future_episodes = executor.submit(self.get_vdata, body) + vdata = future_detail.result() + data = future_episodes.result() + + pdata = self.process_tabs(data, body, ids) + if not pdata: + return self.handle_exception(None, "No pdata available") + + try: + star_list = vdata['data']['module_list_datas'][0]['module_datas'][0]['item_data_lists']['item_datas'][ + 0].get('sub_items', {}).get('star_list', {}).get('item_datas', []) + actors = [star['item_params']['name'] for star in star_list] + names = ['腾讯视频', '预告片'] + plist, ylist = self.process_pdata(pdata, ids) + if not plist: + del names[0] + if not ylist: + del names[1] + vod = self.build_vod(vdata, actors, plist, ylist, names) + return {'list': [vod]} + except Exception as e: + return self.handle_exception(e, "Error processing detail") + + def searchContent(self, key, quick, pg="1"): + headers = self.headers.copy() + headers.update({'Content-Type': 'application/json'}) + body = {'version':'25021101','clientType':1,'filterValue':'','uuid':str(uuid.uuid4()),'retry':0,'query':key,'pagenum':int(pg)-1,'pagesize':30,'queryFrom':0,'searchDatakey':'','transInfo':'','isneedQc':True,'preQid':'','adClientInfo':'','extraInfo':{'isNewMarkLabel':'1','multi_terminal_pc':'1','themeType':'1',},} + data = self.post(f'{self.apihost}/trpc.videosearch.mobile_search.MultiTerminalSearch/MbSearch?vplatform=2', + json=body, headers=headers).json() + vlist = [] + vname=["电视剧", "电影", "综艺", "纪录片", "动漫", "少儿", "短剧"] + v=data['data']['normalList']['itemList'] + d=data['data']['areaBoxList'][0]['itemList'] + q=v+d + if v[0].get('doc') and v[0]['doc'].get('id') =='MainNeed':q=d+v + for k in q: + if k.get('doc') and k.get('videoInfo') and k['doc'].get('id') and '外站' not in k['videoInfo'].get('subTitle') and k['videoInfo'].get('title') and k['videoInfo'].get('typeName') in vname: + img_tag = k.get('videoInfo', {}).get('imgTag') + if img_tag is not None and isinstance(img_tag, str): + try: + tag = json.loads(img_tag) + except json.JSONDecodeError as e: + tag = {} + else: + tag = {} + pic = k.get('videoInfo', {}).get('imgUrl') + vlist.append({ + 'vod_id': k['doc']['id'], + 'vod_name': self.removeHtmlTags(k['videoInfo']['title']), + 'vod_pic': pic, + 'vod_year': k['videoInfo'].get('typeName') +' '+ tag.get('tag_2', {}).get('text', ''), + 'vod_remarks': tag.get('tag_4', {}).get('text', '') + }) + return {'list': vlist, 'page': pg} + + def playerContent(self, flag, id, vipFlags): + ids = id.split('@') + url = f"{self.host}/x/cover/{ids[0]}/{ids[1]}.html" + return {'jx':1,'parse': 1, 'url': url, 'header': ''} + + def localProxy(self, param): + pass + + def get_filter_data(self, cid): + hbody = self.dbody.copy() + hbody['page_params']['channel_id'] = cid + data = self.post( + f'{self.apihost}/trpc.universal_backend_service.page_server_rpc.PageServer/GetPageData?video_appid=1000005&vplatform=2&vversion_name=8.9.10&new_mark_label_enabled=1', + json=hbody, headers=self.headers).json() + return cid, data + + def get_vdata(self, body): + try: + vdata = self.post( + f'{self.apihost}/trpc.universal_backend_service.page_server_rpc.PageServer/GetPageData?video_appid=3000010&vplatform=2&vversion_name=8.2.96', + json=body, headers=self.headers + ).json() + return vdata + except Exception as e: + print(f"Error in get_vdata: {str(e)}") + return {'data': {'module_list_datas': []}} + + def process_pdata(self, pdata, ids): + plist = [] + ylist = [] + for k in pdata: + if k.get('item_id'): + pid = f"{k['item_params']['union_title']}${ids[0]}@{k['item_id']}" + if '预告' in k['item_params']['union_title']: + ylist.append(pid) + else: + plist.append(pid) + return plist, ylist + + def build_vod(self, vdata, actors, plist, ylist, names): + d = vdata['data']['module_list_datas'][0]['module_datas'][0]['item_data_lists']['item_datas'][0]['item_params'] + urls = [] + if plist: + urls.append('#'.join(plist)) + if ylist: + urls.append('#'.join(ylist)) + vod = { + 'type_name': d.get('sub_genre', ''), + 'vod_name': d.get('title', ''), + 'vod_year': d.get('year', ''), + 'vod_area': d.get('area_name', ''), + 'vod_remarks': d.get('holly_online_time', '') or d.get('hotval', ''), + 'vod_actor': ','.join(actors), + 'vod_content': d.get('cover_description', ''), + 'vod_play_from': '$$$'.join(names), + 'vod_play_url': '$$$'.join(urls) + } + return vod + + def handle_exception(self, e, message): + print(f"{message}: {str(e)}") + return {'list': [{'vod_play_from': '哎呀翻车啦', 'vod_play_url': '翻车啦#555'}]} + + def process_tabs(self, data, body, ids): + try: + pdata = data['data']['module_list_datas'][-1]['module_datas'][-1]['item_data_lists']['item_datas'] + tabs = data['data']['module_list_datas'][-1]['module_datas'][-1]['module_params'].get('tabs') + if tabs and len(json.loads(tabs)): + tabs = json.loads(tabs) + remaining_tabs = tabs[1:] + task_queue = [] + for tab in remaining_tabs: + nbody = copy.deepcopy(body) + nbody['page_params']['page_context'] = tab['page_context'] + task_queue.append(nbody) + with ThreadPoolExecutor(max_workers=10) as executor: + future_map = {executor.submit(self.get_vdata, task): idx for idx, task in enumerate(task_queue)} + results = [None] * len(task_queue) + for future in as_completed(future_map.keys()): + idx = future_map[future] + results[idx] = future.result() + for result in results: + if result: + page_data = result['data']['module_list_datas'][-1]['module_datas'][-1]['item_data_lists'][ + 'item_datas'] + pdata.extend(page_data) + return pdata + except Exception as e: + print(f"Error processing episodes: {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) + + diff --git a/py/Xhm.py b/py/Xhm.py new file mode 100644 index 0000000..218db26 --- /dev/null +++ b/py/Xhm.py @@ -0,0 +1,270 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import json +import sys +from base64 import b64decode, b64encode +from pyquery import PyQuery as pq +from requests import Session +sys.path.append('..') +from base.spider import Spider + + +class Spider(Spider): + + def init(self, extend=""): + self.host = self.gethost() + self.headers['referer'] = f'{self.host}/' + self.session = Session() + self.session.headers.update(self.headers) + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + headers = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.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,application/signed-exchange;v=b3;q=0.7', + 'sec-ch-ua': '"Not(A:Brand";v="99", "Google Chrome";v="133", "Chromium";v="133"', + 'sec-ch-ua-mobile': '?0', + 'sec-ch-ua-full-version': '"133.0.6943.98"', + 'sec-ch-ua-arch': '"x86"', + 'sec-ch-ua-platform': '"Windows"', + 'sec-ch-ua-platform-version': '"19.0.0"', + 'sec-ch-ua-model': '""', + 'sec-ch-ua-full-version-list': '"Not(A:Brand";v="99.0.0.0", "Google Chrome";v="133.0.6943.98", "Chromium";v="133.0.6943.98"', + 'dnt': '1', + 'upgrade-insecure-requests': '1', + 'sec-fetch-site': 'none', + 'sec-fetch-mode': 'navigate', + 'sec-fetch-user': '?1', + 'sec-fetch-dest': 'document', + 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', + 'priority': 'u=0, i' + } + + def homeContent(self, filter): + result = {} + cateManual = { + "4K": "/4k", + "国产": "two_click_/categories/chinese", + "最新": "/newest", + "最佳": "/best", + "频道": "/channels", + "类别": "/categories", + "明星": "/pornstars" + } + classes = [] + filters = {} + for k in cateManual: + classes.append({ + 'type_name': k, + 'type_id': cateManual[k] + }) + if k !='4K':filters[cateManual[k]]=[{'key':'type','name':'类型','value':[{'n':'4K','v':'/4k'}]}] + result['class'] = classes + result['filters'] = filters + return result + + def homeVideoContent(self): + data = self.getpq() + return {'list': self.getlist(data(".thumb-list--sidebar .thumb-list__item"))} + + def categoryContent(self, tid, pg, filter, extend): + vdata = [] + result = {} + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + if tid in ['/4k', '/newest', '/best'] or 'two_click_' in tid: + if 'two_click_' in tid: tid = tid.split('click_')[-1] + data = self.getpq(f'{tid}{extend.get("type","")}/{pg}') + vdata = self.getlist(data(".thumb-list--sidebar .thumb-list__item")) + elif tid == '/channels': + data = self.getpq(f'{tid}/{pg}') + jsdata = self.getjsdata(data) + for i in jsdata['channels']: + vdata.append({ + 'vod_id': f"two_click_" + i.get('channelURL'), + 'vod_name': i.get('channelName'), + 'vod_pic': i.get('siteLogoURL'), + 'vod_year': f'videos:{i.get("videoCount")}', + 'vod_tag': 'folder', + 'vod_remarks': f'subscribers:{i["subscriptionModel"].get("subscribers")}', + 'style': {'ratio': 1.33, 'type': 'rect'} + }) + elif tid == '/categories': + result['pagecount'] = pg + data = self.getpq(tid) + self.cdata = self.getjsdata(data) + for i in self.cdata['layoutPage']['store']['popular']['assignable']: + vdata.append({ + 'vod_id': "one_click_" + i.get('id'), + 'vod_name': i.get('name'), + 'vod_pic': '', + 'vod_tag': 'folder', + 'style': {'ratio': 1.33, 'type': 'rect'} + }) + elif tid == '/pornstars': + data = self.getpq(f'{tid}/{pg}') + pdata = self.getjsdata(data) + for i in pdata['pagesPornstarsComponent']['pornstarListProps']['pornstars']: + vdata.append({ + 'vod_id': f"two_click_" + i.get('pageURL'), + 'vod_name': i.get('name'), + 'vod_pic': i.get('imageThumbUrl'), + 'vod_remarks': i.get('translatedCountryName'), + 'vod_tag': 'folder', + 'style': {'ratio': 1.33, 'type': 'rect'} + }) + elif 'one_click' in tid: + result['pagecount'] = pg + tid = tid.split('click_')[-1] + for i in self.cdata['layoutPage']['store']['popular']['assignable']: + if i.get('id') == tid: + for j in i['items']: + vdata.append({ + 'vod_id': f"two_click_" + j.get('url'), + 'vod_name': j.get('name'), + 'vod_pic': j.get('thumb'), + 'vod_tag': 'folder', + 'style': {'ratio': 1.33, 'type': 'rect'} + }) + result['list'] = vdata + return result + + def detailContent(self, ids): + data = self.getpq(ids[0]) + djs = self.getjsdata(data) + vn = data('meta[property="og:title"]').attr('content') + dtext = data('#video-tags-list-container') + href = dtext('a').attr('href') + title = dtext('span[class*="body-bold-"]').eq(0).text() + pdtitle = '' + if href: + pdtitle = '[a=cr:' + json.dumps({'id': 'two_click_' + href, 'name': title}) + '/]' + title + '[/a]' + vod = { + 'vod_name': vn, + 'vod_director': pdtitle, + 'vod_remarks': data('.rb-new__info').text(), + 'vod_play_from': 'Xhamster', + 'vod_play_url': '' + } + try: + plist = [] + d = djs['xplayerSettings']['sources'] + f = d.get('standard') + def custom_sort_key(url): + quality = url.split('$')[0] + number = ''.join(filter(str.isdigit, quality)) + number = int(number) if number else 0 + return -number, quality + + if f: + for key, value in f.items(): + if isinstance(value, list): + for info in value: + id = self.e64(f'{0}@@@@{info.get("url") or info.get("fallback")}') + plist.append(f"{info.get('label') or info.get('quality')}${id}") + plist.sort(key=custom_sort_key) + if d.get('hls'): + for format_type, info in d['hls'].items(): + if url := info.get('url'): + encoded = self.e64(f'{0}@@@@{url}') + plist.append(f"{format_type}${encoded}") + + except Exception as e: + plist = [f"{vn}${self.e64(f'{1}@@@@{ids[0]}')}"] + print(f"获取视频信息失败: {str(e)}") + vod['vod_play_url'] = '#'.join(plist) + return {'list': [vod]} + + def searchContent(self, key, quick, pg="1"): + data = self.getpq(f'/search/{key}?page={pg}') + return {'list': self.getlist(data(".thumb-list--sidebar .thumb-list__item")), 'page': pg} + + def playerContent(self, flag, id, vipFlags): + headers = { + 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.5410.0 Safari/537.36', + 'pragma': 'no-cache', + 'cache-control': 'no-cache', + 'sec-ch-ua-platform': '"Windows"', + 'sec-ch-ua': '"Not(A:Brand";v="99", "Google Chrome";v="133", "Chromium";v="133"', + 'dnt': '1', + 'sec-ch-ua-mobile': '?0', + 'origin': self.host, + 'sec-fetch-site': 'cross-site', + 'sec-fetch-mode': 'cors', + 'sec-fetch-dest': 'empty', + 'referer': f'{self.host}/', + 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', + 'priority': 'u=1, i', + } + ids = self.d64(id).split('@@@@') + return {'parse': int(ids[0]), 'url': ids[1], 'header': headers} + + def localProxy(self, param): + pass + + def gethost(self): + try: + response = self.fetch('https://xhamster.com', headers=self.headers, allow_redirects=False) + return response.headers['Location'] + except Exception as e: + print(f"获取主页失败: {str(e)}") + return "https://zn.xhamster.com" + + 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 getlist(self, data): + vlist = [] + for i in data.items(): + vlist.append({ + 'vod_id': i('.role-pop').attr('href'), + 'vod_name': i('.video-thumb-info a').text(), + 'vod_pic': i('.role-pop img').attr('src'), + 'vod_year': i('.video-thumb-info .video-thumb-views').text().split(' ')[0], + 'vod_remarks': i('.role-pop div[data-role="video-duration"]').text(), + 'style': {'ratio': 1.33, 'type': 'rect'} + }) + return vlist + + def getpq(self, path=''): + h = '' if path.startswith('http') else self.host + response = self.session.get(f'{h}{path}').text + try: + return pq(response) + except Exception as e: + print(f"{str(e)}") + return pq(response.encode('utf-8')) + + def getjsdata(self, data): + vhtml = data("script[id='initials-script']").text() + jst = json.loads(vhtml.split('initials=')[-1][:-1]) + return jst + diff --git a/py/Xvd.py b/py/Xvd.py new file mode 100644 index 0000000..49514c9 --- /dev/null +++ b/py/Xvd.py @@ -0,0 +1,260 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import json +import re +import sys +from pyquery import PyQuery as pq +from base64 import b64decode, b64encode +from requests import Session +sys.path.append('..') +from base.spider import Spider + + +class Spider(Spider): + def init(self, extend=""): + self.headers['referer']=f'{self.host}/' + self.session = Session() + self.session.headers.update(self.headers) + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + host = "https://www.xvideos.com" + + headers = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.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,application/signed-exchange;v=b3;q=0.7', + 'sec-ch-ua': '"Not(A:Brand";v="99", "Google Chrome";v="133", "Chromium";v="133"', + 'sec-ch-ua-mobile': '?0', + 'sec-ch-ua-full-version': '"133.0.6943.98"', + 'sec-ch-ua-arch': '"x86"', + 'sec-ch-ua-platform': '"Windows"', + 'sec-ch-ua-platform-version': '"19.0.0"', + 'sec-ch-ua-model': '""', + 'sec-ch-ua-full-version-list': '"Not(A:Brand";v="99.0.0.0", "Google Chrome";v="133.0.6943.98", "Chromium";v="133.0.6943.98"', + 'dnt': '1', + 'upgrade-insecure-requests': '1', + 'sec-fetch-site': 'none', + 'sec-fetch-mode': 'navigate', + 'sec-fetch-user': '?1', + 'sec-fetch-dest': 'document', + 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', + 'priority': 'u=0, i' + } + + def homeContent(self, filter): + result = {} + cateManual = { + "最新": "/new", + "最佳": "/best", + "频道": "/channels-index", + "标签": "/tags", + "明星": "/pornstars-index" + } + classes = [] + for k in cateManual: + classes.append({ + 'type_name': k, + 'type_id': cateManual[k] + }) + result['class'] = classes + return result + + def homeVideoContent(self): + data = self.getpq() + return {'list':self.getlist(data(".mozaique .frame-block"))} + + def categoryContent(self, tid, pg, filter, extend): + vdata = [] + result = {} + page = f"/{int(pg) - 1}" if pg != '1' else '' + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + if tid=='/new' or 'tags_click' in tid: + if 'tags_click' in tid:tid=tid.split('click_')[-1] + data=self.getpq(f'{tid}/{pg}') + vdata=self.getlist(data(".mozaique .frame-block")) + elif tid=='/best': + if pg=='1': + self.path=self.session.get(f'{self.host}{tid}',headers=self.headers,allow_redirects=False).headers['Location'] + data=self.getpq(f'{self.path}{page}') + vdata=self.getlist(data(".mozaique .frame-block")) + elif tid=='/channels-index' or tid=='/pornstars-index': + data = self.getpq(f'{tid}{page}') + vhtml=data(".mozaique .thumb-block") + for i in vhtml.items(): + a = i('.thumb-inside .thumb a') + match = re.search(r'src="([^"]+)"', a('script').text()) + img='' + if match: + img = match.group(1).strip() + vdata.append({ + 'vod_id': f"channels_click_{'/channels'if tid=='/channels-index' else ''}"+a.attr('href'), + 'vod_name': a('.profile-name').text() or i('.profile-name').text().replace('\xa0','/'), + 'vod_pic': img, + 'vod_tag': 'folder', + 'vod_remarks': i('.thumb-under .profile-counts').text(), + 'style': {'ratio': 1.33, 'type': 'rect'} + }) + elif tid=='/tags': + result['pagecount'] = pg + vhtml = self.getpq(tid) + vhtml = vhtml('.tags-list') + for d in vhtml.items(): + for i in d('li a').items(): + vdata.append({ + 'vod_id': "tags_click_"+i.attr('href'), + 'vod_name': i.attr('title') or i('b').text(), + 'vod_pic': '', + 'vod_tag': 'folder', + 'vod_remarks': i('.navbadge').text(), + 'style': {'ratio': 1.33, 'type': 'rect'} + }) + elif 'channels_click' in tid: + tid=tid.split('click_')[-1] + headers=self.session.headers.copy() + headers.update({'Accept': 'application/json, text/javascript, */*; q=0.01'}) + vhtml=self.post(f'{self.host}{tid}/videos/best/{int(pg)-1}',headers=headers).json() + for i in vhtml['videos']: + vdata.append({ + 'vod_id': i.get('u'), + 'vod_name': i.get('tf'), + 'vod_pic': i.get('il'), + 'vod_year': i.get('n'), + 'vod_remarks': i.get('d'), + 'style': {'ratio': 1.33, 'type': 'rect'} + }) + result['list'] = vdata + return result + + def detailContent(self, ids): + url = f"{self.host}{ids[0]}" + data = self.getpq(ids[0]) + vn=data('meta[property="og:title"]').attr('content') + dtext=data('.main-uploader a') + href=dtext.attr('href') + pdtitle='' + if href and href.count('/') < 2: + href=f'/channels{href}' + pdtitle = '[a=cr:' + json.dumps({'id': 'channels_click_'+href, 'name': dtext('.name').text()}) + '/]' + dtext('.name').text() + '[/a]' + vod = { + 'vod_name': vn, + 'vod_director':pdtitle, + 'vod_remarks': data('.page-title').text().replace(vn,''), + 'vod_play_from': 'Xvideos', + 'vod_play_url': '' + } + js_content = data("#video-player-bg script") + jstr='' + for script in js_content.items(): + content = script.text() + if 'setVideoUrlLow' in content and 'html5player' in content: + jstr = content + break + plist = [f"{vn}${self.e64(f'{1}@@@@{url}')}"] + def extract_video_urls(js_content): + try: + low = re.search(r'setVideoUrlLow\([\'"]([^\'"]+)[\'"]\)', js_content) + high = re.search(r'setVideoUrlHigh\([\'"]([^\'"]+)[\'"]\)', js_content) + hls = re.search(r'setVideoHLS\([\'"]([^\'"]+)[\'"]\)', js_content) + + return { + 'hls': hls.group(1) if hls else None, + 'high': high.group(1) if high else None, + 'low': low.group(1) if low else None + } + except Exception as e: + print(f"提取视频URL失败: {str(e)}") + return {} + if jstr: + try: + urls = extract_video_urls(jstr) + plist = [ + f"{quality}${self.e64(f'{0}@@@@{url}')}" + for quality, url in urls.items() + if url + ] + except Exception as e: + print(f"提取url失败: {str(e)}") + vod['vod_play_url'] = '#'.join(plist) + return {'list':[vod]} + + def searchContent(self, key, quick, pg="1"): + data=self.getpq(f'/?k={key}&p={int(pg)-1}') + return {'list':self.getlist(data(".mozaique .frame-block")),'page':pg} + + def playerContent(self, flag, id, vipFlags): + headers = { + 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.5410.0 Safari/537.36', + 'pragma': 'no-cache', + 'cache-control': 'no-cache', + 'sec-ch-ua-platform': '"Windows"', + 'sec-ch-ua': '"Not(A:Brand";v="99", "Google Chrome";v="133", "Chromium";v="133"', + 'dnt': '1', + 'sec-ch-ua-mobile': '?0', + 'origin': self.host, + 'sec-fetch-site': 'cross-site', + 'sec-fetch-mode': 'cors', + 'sec-fetch-dest': 'empty', + 'referer': f'{self.host}/', + 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', + 'priority': 'u=1, i', + } + ids=self.d64(id).split('@@@@') + return {'parse': int(ids[0]), 'url': ids[1], 'header': headers} + + 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 getlist(self, data): + vlist=[] + for i in data.items(): + a=i('.thumb-inside .thumb a') + b=i('.thumb-under .title a') + vlist.append({ + 'vod_id': a.attr('href'), + 'vod_name': b('a').attr('title'), + 'vod_pic': a('img').attr('data-src'), + 'vod_year': a('.video-hd-mark').text(), + 'vod_remarks': b('.duration').text(), + 'style': {'ratio': 1.33, 'type': 'rect'} + }) + return vlist + + def getpq(self, path=''): + response = self.session.get(f'{self.host}{path}').text + try: + return pq(response) + except Exception as e: + print(f"{str(e)}") + return pq(response.encode('utf-8')) diff --git a/py/YYMP3音乐网.py b/py/YYMP3音乐网.py new file mode 100644 index 0000000..064f0a1 --- /dev/null +++ b/py/YYMP3音乐网.py @@ -0,0 +1,383 @@ +# 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://www.yymp3.com" + +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' + } + +class Spider(Spider): + global xurl + 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 = {"class": []} + + detail = requests.get(url=xurl, headers=headerx) + detail.encoding = "utf-8" + res = detail.text + doc = BeautifulSoup(res, "lxml") + + soups = doc.find_all('div', id="nav_box") + + for soup in soups: + vods = soup.find_all('a') + + for vod in vods: + name = vod.text.strip() + skip_keywords = ["首页", "动漫"] + if any(keyword in name for keyword in skip_keywords): + continue + + id = vod['href'] + if 'http' not in id: + id = xurl + id + + result["class"].append({"type_id": id, "type_name": name}) + + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, cid, pg, filter, ext): + result = {} + videos = [] + + if '@' in cid: + fenge = cid.split("@") + + detail = requests.get(url=xurl + fenge[0], headers=headerx) + detail.encoding = "utf-8" + res = detail.text + doc = BeautifulSoup(res, "lxml") + + soups = doc.find_all('dl', class_="albumlist c") + + for vod in soups: + names = vod.find('a', class_="A_name") + name = names.text.strip() + + ids = vod.find('dd', class_="A_details") + id = ids.find('a')['href'] + + pic = vod.find('img')['src'] + + if 'http' not in pic: + pic = "https:" + pic + + remark = "推荐" + + video = { + "vod_id": id, + "vod_name": name, + "vod_pic": pic, + "vod_remarks": remark + } + videos.append(video) + + else: + detail = requests.get(url=cid, headers=headerx) + detail.encoding = "utf-8" + res = detail.text + doc = BeautifulSoup(res, "lxml") + soups = doc.find_all('ul', class_="Cate_slist c") + + for soup in soups: + vods = soup.find_all('a') + + for vod in vods: + + name = vod.text.strip() + + id = vod['href'] + + pic = "https://fs-im-kefu.7moor-fs1.com/ly/4d2c3f00-7d4c-11e5-af15-41bf63ae4ea0/af3a1f95d591c34d/1755975256375.png" + + remark = "推荐" + + video = { + "vod_id": id+'@'+name, + "vod_name": name, + "vod_pic": pic, + "vod_tag": "folder", + "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 = '' + + if 'Play' in did: + if 'http' not in did: + bofang = xurl + did + + xianlu = '搜索专线' + + videos.append({ + "vod_id": did, + "vod_play_from": xianlu, + "vod_play_url": bofang + }) + + else: + if 'http' not in did: + did = xurl + did + + res = requests.get(url=did, headers=headerx) + res.encoding = "utf-8" + res = res.text + doc = BeautifulSoup(res, "lxml") + + content = self.extract_middle_text(res,'style="height:93px;">','

    ', 0) + content = content.replace('
    ', '').replace('
    ', '').replace(' ', '') + + director = self.extract_middle_text(res,'公司:','',1,'href=.*?>(.*?)') + + year = self.extract_middle_text(res, '时间:', '<', 0) + + area = self.extract_middle_text(res, '语种:', '<', 0) + + soups = doc.find_all('ul', class_="A_list4") + + for item in soups: + vods = item.find_all('li') + + for sou in vods: + + ids = sou.find('div', class_="td1_l") + id = ids.find('a')['href'] + + if 'http' not in id: + id = xurl + id + + names = sou.find('div', class_="td1_l") + name = names.text.strip() + + bofang = bofang + name + '$' + id + '#' + + bofang = bofang[:-1] + + xianlu = '音乐专线' + + videos.append({ + "vod_id": did, + "vod_director": director, + "vod_actor": actor, + "vod_year": year, + "vod_area": area, + "vod_content": content, + "vod_play_from": xianlu, + "vod_play_url": bofang + }) + + result['list'] = videos + return result + + def playerContent(self, flag, id, vipFlags): + + res = requests.get(url=id, headers=headerx) + res.encoding = "utf-8" + res = res.text + + year = self.extract_middle_text(res, '$song_data[0]', ';', 0) + fenge = year.split('|') + + url = "https://ting8.yymp3.com/" + fenge[4] + url = url.replace('wma', 'mp3') + + result = {} + result["parse"] = 0 + result["playUrl"] = '' + result["url"] = url + result["header"] = headerx + return result + + def searchContentPage(self, key, quick, pg): + result = {} + videos = [] + + if pg: + page = int(pg) + else: + page = 1 + + url = f'{xurl}/search/?page={str(page)}&key={key}&tp=1' + detail = requests.get(url=url, headers=headerx) + detail.encoding = "utf-8" + res = detail.text + doc = BeautifulSoup(res, "lxml") + + soups = doc.find_all('ul', class_="searchResult c") + + for item in soups: + vods = item.find_all('li') + + for vod in vods[1:]: + + names = vod.find('div', class_="p3") + name1 = names.text.strip() + + name2s = vod.find('div', class_="p2") + name2 = name2s.text.strip() + + name = name1 + ' ' + name2 + + id = names.find('a')['href'] + + pic = "https://fs-im-kefu.7moor-fs1.com/ly/4d2c3f00-7d4c-11e5-af15-41bf63ae4ea0/af3a1f95d591c34d/1755975256375.png" + + remark = "推荐" + + 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/py/actor.py b/py/actor.py new file mode 100644 index 0000000..399d0db --- /dev/null +++ b/py/actor.py @@ -0,0 +1,301 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import json +import sys +import time +from concurrent.futures import ThreadPoolExecutor, as_completed +from urllib.parse import quote +from Crypto.Hash import MD5 +import requests +sys.path.append('..') +from base.spider import Spider + + +class Spider(Spider): + + def init(self, extend=""): + self.session = requests.Session() + self.session.headers.update(self.headers) + self.session.cookies.update(self.cookie) + self.get_ctoken() + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + host='https://www.youku.com' + + shost='https://search.youku.com' + + h5host='https://acs.youku.com' + + ihost='https://v.youku.com' + + headers = { + 'User-Agent': 'Mozilla/5.0 (; Windows 10.0.26100.3194_64 ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Electron/14.2.0 Safari/537.36 Node/14.17.0 YoukuDesktop/9.2.60 UOSYouku (2.0.1)-Electron(UTDID ZYmGMAAAACkDAMU8hbiMmYdd;CHANNEL official;ZREAL 0;BTYPE TM2013;BRAND TIMI;BUILDVER 9.2.60.1001)', + 'Referer': f'{host}/' + } + + cookie={ + "__ysuid": "17416134165380iB", + "__aysid": "1741613416541WbD", + "xlly_s": "1", + "isI18n": "false", + "cna": "bNdVIKmmsHgCAXW9W6yrQ1/s", + "__ayft": "1741672162330", + "__arpvid": "1741672162331FBKgrn-1741672162342", + "__ayscnt": "1", + "__aypstp": "1", + "__ayspstp": "3", + "tfstk": "gZbiib4JpG-6DqW-B98_2rwPuFrd1fTXQt3vHEp4YpJIBA3OgrWcwOi90RTOo9XVQ5tAM5NcK_CP6Ep97K2ce1XDc59v3KXAgGFLyzC11ET2n8U8yoyib67M3xL25e8gS8pbyzC1_ET4e8URWTsSnHv2uh8VTeJBgEuN3d-ELQAWuKWV36PHGpJ2uEWVTxvicLX1ewyUXYSekxMf-CxMEqpnoqVvshvP_pABOwvXjL5wKqeulm52np_zpkfCDGW9Ot4uKFIRwZtP7vP9_gfAr3KEpDWXSIfWRay-DHIc_Z-hAzkD1i5Ooi5LZ0O5YO_1mUc476YMI3R6xzucUnRlNe_zemKdm172xMwr2L7CTgIkbvndhFAVh3_YFV9Ng__52U4SQKIdZZjc4diE4EUxlFrfKmiXbBOHeP72v7sAahuTtWm78hRB1yV3tmg9bBOEhWVnq5KwOBL5." + } + + def homeContent(self, filter): + result = {} + categories = ["电视剧", "电影", "综艺", "动漫", "少儿", "纪录片", "文化", "亲子", "教育", "搞笑", "生活", + "体育", "音乐", "游戏"] + classes = [{'type_name': category, 'type_id': category} for category in categories] + filters = {} + self.typeid = {} + with ThreadPoolExecutor(max_workers=len(categories)) as executor: + tasks = { + executor.submit(self.cf, {'type': category}, True): category + for category in categories + } + + for future in as_completed(tasks): + try: + category = tasks[future] + session, ft = future.result() + filters[category] = ft + self.typeid[category] = session + except Exception as e: + print(f"处理分类 {tasks[future]} 时出错: {str(e)}") + + result['class'] = classes + result['filters'] = filters + return result + + def homeVideoContent(self): + try: + vlist = [] + params={"ms_codes":"2019061000","params":"{\"debug\":0,\"gray\":0,\"pageNo\":1,\"utdid\":\"ZYmGMAAAACkDAMU8hbiMmYdd\",\"userId\":\"\",\"bizKey\":\"YOUKU_WEB\",\"appPackageKey\":\"com.youku.YouKu\",\"showNodeList\":0,\"reqSubNode\":0,\"nodeKey\":\"WEBHOME\",\"bizContext\":\"{\\\"spmA\\\":\\\"a2hja\\\"}\"}","system_info":"{\"device\":\"pcweb\",\"os\":\"pcweb\",\"ver\":\"1.0.0.0\",\"userAgent\":\"Mozilla/5.0 (; Windows 10.0.26100.3194_64 ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Electron/14.2.0 Safari/537.36 Node/14.17.0 YoukuDesktop/9.2.60 UOSYouku (2.0.1)-Electron(UTDID ZYmGMAAAACkDAMU8hbiMmYdd;CHANNEL official;ZREAL 0;BTYPE TM2013;BRAND TIMI;BUILDVER 9.2.60.1001)\",\"guid\":\"1590141704165YXe\",\"appPackageKey\":\"com.youku.pcweb\",\"young\":0,\"brand\":\"\",\"network\":\"\",\"ouid\":\"\",\"idfa\":\"\",\"scale\":\"\",\"operator\":\"\",\"resolution\":\"\",\"pid\":\"\",\"childGender\":0,\"zx\":0}"} + data=self.getdata(f'{self.h5host}/h5/mtop.youku.columbus.home.query/1.0/',params) + okey=list(data['data'].keys())[0] + for i in data['data'][okey]['data']['nodes'][0]['nodes'][-1]['nodes'][0]['nodes']: + if i.get('nodes') and i['nodes'][0].get('data'): + i=i['nodes'][0]['data'] + if i.get('assignId'): + vlist.append({ + 'vod_id': i['assignId'], + 'vod_name': i.get('title'), + 'vod_pic': i.get('vImg') or i.get('img'), + 'vod_year': i.get('mark',{}).get('data',{}).get('text'), + 'vod_remarks': i.get('summary') + }) + return {'list': vlist} + except Exception as e: + print(f"处理主页视频数据时出错: {str(e)}") + return {'list': []} + + def categoryContent(self, tid, pg, filter, extend): + result = {} + vlist = [] + result['page'] = pg + result['limit'] = 90 + result['total'] = 999999 + pagecount = 9999 + params = {'type': tid} + id = self.typeid[tid] + params.update(extend) + if pg == '1': + id=self.cf(params) + data=self.session.get(f'{self.host}/category/data?session={id}¶ms={quote(json.dumps(params))}&pageNo={pg}').json() + try: + data=data['data']['filterData'] + for i in data['listData']: + if i.get('videoLink') and 's=' in i['videoLink']: + vlist.append({ + 'vod_id': i.get('videoLink').split('s=')[-1], + 'vod_name': i.get('title'), + 'vod_pic': i.get('img'), + 'vod_year': i.get('rightTagText'), + 'vod_remarks': i.get('summary') + }) + self.typeid[tid]=quote(json.dumps(data['session'])) + except: + pagecount=pg + result['list'] = vlist + result['pagecount'] = pagecount + return result + + def detailContent(self, ids): + try: + data=self.session.get(f'{self.ihost}/v_getvideo_info/?showId={ids[0]}').json() + v=data['data'] + vod = { + 'type_name': v.get('showVideotype'), + 'vod_year': v.get('lastUpdate'), + 'vod_remarks': v.get('rc_title'), + 'vod_actor': v.get('_personNameStr'), + 'vod_content': v.get('showdesc'), + 'vod_play_from': '优酷', + 'vod_play_url': '' + } + params={"biz":"new_detail_web2","videoId":v.get('vid'),"scene":"web_page","componentVersion":"3","ip":data.get('ip'),"debug":0,"utdid":"ZYmGMAAAACkDAMU8hbiMmYdd","userId":0,"platform":"pc","nextSession":"","gray":0,"source":"pcNoPrev","showId":ids[0]} + sdata,index=self.getinfo(params) + pdata=sdata['nodes'] + if index > len(pdata): + batch_size = len(pdata) + total_batches = ((index + batch_size - 1) // batch_size) - 1 + ssj = json.loads(sdata['data']['session']) + with ThreadPoolExecutor(max_workers=total_batches) as executor: + futures = [] + for batch in range(total_batches): + start = batch_size + 1 + (batch * batch_size) + end = start + batch_size - 1 + next_session = ssj.copy() + next_session.update({ + "itemStartStage": start, + "itemEndStage": min(end, index) + }) + current_params = params.copy() + current_params['nextSession'] = json.dumps(next_session) + futures.append((start, executor.submit(self.getvinfo, current_params))) + futures.sort(key=lambda x: x[0]) + + for _, future in futures: + try: + result = future.result() + pdata.extend(result['nodes']) + except Exception as e: + print(f"Error fetching data: {str(e)}") + vod['vod_play_url'] = '#'.join([f"{i['data'].get('title')}${i['data']['action'].get('value')}" for i in pdata]) + return {'list': [vod]} + except Exception as e: + print(e) + return {'list': [{'vod_play_from': '哎呀翻车啦', 'vod_play_url': f'呜呜呜${self.host}'}]} + + def searchContent(self, key, quick, pg="1"): + data=self.session.get(f'{self.shost}/api/search?pg={pg}&keyword={key}').json() + vlist = [] + for i in data['pageComponentList']: + if i.get('commonData') and (i['commonData'].get('showId') or i['commonData'].get('realShowId')): + i=i['commonData'] + vlist.append({ + 'vod_id': i.get('showId') or i.get('realShowId'), + 'vod_name': i['titleDTO'].get('displayName'), + 'vod_pic': i['posterDTO'].get('vThumbUrl'), + 'vod_year': i.get('feature'), + 'vod_remarks': i.get('updateNotice') + }) + return {'list': vlist, 'page': pg} + + def playerContent(self, flag, id, vipFlags): + return {'jx':1,'parse': 1, 'url': f"{self.ihost}/video?vid={id}", 'header': ''} + + def localProxy(self, param): + pass + + def cf(self,params,b=False): + response = self.session.get(f'{self.host}/category/data?params={quote(json.dumps(params))}&optionRefresh=1&pageNo=1').json() + data=response['data']['filterData'] + session=quote(json.dumps(data['session'])) + if b: + return session,self.get_filter_data(data['filter']['filterData'][1:]) + return session + + def process_key(self, key): + if '_' not in key: + return key + parts = key.split('_') + result = parts[0] + for part in parts[1:]: + if part: + result += part[0].upper() + part[1:] + return result + + def get_filter_data(self, data): + result = [] + try: + for item in data: + if not item.get('subFilter'): + continue + first_sub = item['subFilter'][0] + if not first_sub.get('filterType'): + continue + filter_item = { + 'key': self.process_key(first_sub['filterType']), + 'name': first_sub['title'], + 'value': [] + } + for sub in item['subFilter']: + if 'value' in sub: + filter_item['value'].append({ + 'n': sub['title'], + 'v': sub['value'] + }) + if filter_item['value']: + result.append(filter_item) + + except Exception as e: + print(f"处理筛选数据时出错: {str(e)}") + + return result + + def get_ctoken(self): + data=self.session.get(f'{self.h5host}/h5/mtop.ykrec.recommendservice.recommend/1.0/?jsv=2.6.1&appKey=24679788') + + def md5(self,t,text): + h = MD5.new() + token=self.session.cookies.get('_m_h5_tk').split('_')[0] + data=f"{token}&{t}&24679788&{text}" + h.update(data.encode('utf-8')) + return h.hexdigest() + + def getdata(self, url, params, recursion_count=0, max_recursion=3): + data = json.dumps(params) + t = int(time.time() * 1000) + jsdata = { + 'appKey': '24679788', + 't': t, + 'sign': self.md5(t, data), + 'data': data + } + response = self.session.get(url, params=jsdata) + if '令牌过期' in response.text: + if recursion_count >= max_recursion: + raise Exception("达到最大递归次数,无法继续请求") + self.get_ctoken() + return self.getdata(url, params, recursion_count + 1, max_recursion) + else: + return response.json() + + def getvinfo(self,params): + body = { + "ms_codes": "2019030100", + "params": json.dumps(params), + "system_info": "{\"os\":\"iku\",\"device\":\"iku\",\"ver\":\"9.2.9\",\"appPackageKey\":\"com.youku.iku\",\"appPackageId\":\"pcweb\"}" + } + data = self.getdata(f'{self.h5host}/h5/mtop.youku.columbus.gateway.new.execute/1.0/', body) + okey = list(data['data'].keys())[0] + i = data['data'][okey]['data'] + return i + + def getinfo(self,params): + i = self.getvinfo(params) + jdata=i['nodes'][0]['nodes'][3] + info=i['data']['extra']['episodeTotal'] + if i['data']['extra']['showCategory'] in ['电影','游戏']: + jdata = i['nodes'][0]['nodes'][4] + return jdata,info + diff --git a/py/config/iptv.txt b/py/config/iptv.txt new file mode 100644 index 0000000..9db446b --- /dev/null +++ b/py/config/iptv.txt @@ -0,0 +1,400 @@ +央视频道,#genre# +CCTV1综合|CCTV-1 综合|CCTV1|CCTV-1, +CCTV2财经|CCTV-2 财经|CCTV2|CCTV-2, +CCTV3综艺|CCTV-3 综艺|CCTV3|CCTV-2, +CCTV4中文国际|CCTV-4 中文国际|CCTV4|CCTV-4, +CCTV5体育|CCTV-5 体育|CCTV5|CCTV-5, +CCTV5+体育赛事|CCTV-5+ 体育赛事|CCTV5+|CCTV-5+, +CCTV6电影|CCTV-6 电影|CCTV6|CCTV-6, +CCTV7国防军事|CCTV-7 国防军事|CCTV7|CCTV-7, +CCTV8电视剧|CCTV-8 电视剧|CCTV8|CCTV-8, +CCTV9纪录|CCTV-9 纪录|CCTV9|CCTV-9, +CCTV10科教|CCTV-10 科教|CCTV10|CCTV-10, +CCTV11戏曲|CCTV-11 戏曲|CCTV11|CCTV-11, +CCTV12社会与法|CCTV-12 社会与法|CCTV12|CCTV-12, +CCTV13新闻|CCTV-13 新闻|CCTV13|CCTV-13, +CCTV14少儿|CCTV-14 少儿|CCTV14|CCTV-14, +CCTV15音乐|CCTV-15 音乐|CCTV15|CCTV-15, +CCTV16奥林匹克|CCTV-16 奥林匹克|CCTV16|CCTV-16, +CCTV17农业农村|CCTV-17 农业农村|CCTV17|CCTV-17, +CCTV4K超高清|CCTV-4K 超高清|CCTV4K|CCTV-4K 1080P, +CGTN英语|CGTN, +CGTN纪录, +CGTN俄语, +CGTN法语, +CGTN西语, +CGTN阿语, + +卫视频道,#genre# +湖南卫视, +浙江卫视, +东方卫视, +北京卫视, +江苏卫视, +安徽卫视, +重庆卫视, +四川卫视, +东南卫视, +深圳卫视, +广东卫视, +广西卫视, +厦门卫视, +南方卫视, +甘肃卫视, +贵州卫视, +河北卫视, +河南卫视, +黑龙江卫视, +湖北卫视, +江西卫视, +吉林卫视, +内蒙古卫视, +辽宁卫视, +宁夏卫视, +青海卫视, +山东卫视, +天津卫视, +海南卫视, +新疆卫视, +云南卫视, +西藏卫视, +海峡卫视, +兵团卫视, +黄河卫视, +安多卫视, +康巴卫视, +农林卫视, +三沙卫视, +延边卫视, +CETV1|CETV-1, +CETV2|CETV-2, +CETV4|CETV-4, + +广东频道,#genre# +汕头新闻综合|汕头综合|汕头综合高清|「移动1」汕头综合HD, +汕头经济生活|汕头经济|汕头经济生活高清|「移动1」汕头生活HD, +汕头文旅体育|汕头文旅|汕头文旅体育高清|「移动1」汕头体育HD, +广东珠江, +广东体育, +广东民生, +广东少儿|广东少儿高清, +广东综艺, +广东影视, +经济科教, +岭南戏曲, +现代教育, +大湾区卫视, +广州综合, +广州新闻, +广州影视, +广州法治, +广州竞赛, +深圳卫视, +深圳都市频道, +深圳电视剧频道, +深圳财经生活, +深圳娱乐频道, +深圳体育健康, +深圳少儿频道, +深圳公共频道, +深圳宝安频道, +深圳龙岗频道, +深圳东部频道, +深圳众创TV, +韶关新闻综合, +韶关绿色生活, +湛江新闻综合, +湛江公共, +揭阳综合, +揭阳生活, +汕尾新闻综合, +汕尾文化生活, +江门综合, +江门侨乡生活, +江门教育, +HZTV-1, +HZTV-2, +珠海-1, +珠海-2, +肇庆综合, +肇庆生活服务, +河源综合, +河源公共, +清远新闻综合, +清远文旅生活, +云浮综合, +云浮文旅, +茂名综合, +茂名公共, +佛山公共, +佛山南海, +佛山顺德, +佛山影视, +佛山综合, +东莞新闻综合, +东莞生活资讯, +中山综合, +香山文化, +中山教育, +徐闻综合, + +数字频道,#genre# +CHC影迷电影|CHC高清电影, +CHC动作电影, +CHC家庭影院, +黑莓电影|NewTV_黑莓电影「IPV6」, +黑莓动画|NewTV_黑莓动画「IPV6」, +卡酷少儿|卡酷动画|BRTV卡酷少儿, +优漫卡通, +哈哈炫动|炫动卡通, +嘉佳卡通|嘉佳卡通高清|佳嘉卡通, +动漫秀场, +少儿动画, +新动漫, +金鹰卡通|湖南金鹰卡通|金鹰卡通高清, +金鹰纪实, +梨园频道, +欢笑剧场, +都市剧场, +金色学堂, +爱上4K, +劲爆体育, +哒啵赛事|NewTV_哒啵赛事「IPV6」, +哒啵电竞, +乐游|乐游频道, +快乐垂钓, +纪实人文, +纪实科教, +求索记录, +求索动物, +求索科学, +求索生活, +超级体育|NewTV超级体育|NewTV超级体育 4M1080|NewTV_超级体育「IPV6」, +超级电影|NewTV超级电影|NewTV超级电影 4M1080|NewTV_超级电影「IPV6」, +超级电视剧|NewTV超级电视剧|NewTV超级电视剧 4M1080|超级视剧|NewTV_超级电视剧「IPV6」, +东北热剧|NewTV东北热剧|NewTV东北热剧 4M1080|NewTV_东北热剧「IPV6」, +海外剧场|NewTV海外剧场|NewTV海外剧场 2.5M1080, +古装剧场|NewTV古装剧场|古装剧场 8M1080|NewTV_古装剧场「IPV6」, +中国功夫|NewTV中国功夫|NewTV中国功夫 2.5M1080|NewTV_中国功夫「IPV6」, +军旅剧场|NewTV军旅剧场|NewTV军旅剧场 2.5M1080|NewTV_军旅剧场「IPV6」, +动作电影|NewTV动作电影|NewTV动作电影 2.5M1080|NewTV_动作电影「IPV6」, +惊悚悬疑|NewTV惊悚悬疑|NewTV惊悚悬疑 2.5M1080|NewTV_惊悚悬疑「IPV6」, +潮妈辣婆|NewTV潮妈辣婆|NewTV潮妈辣婆 4M1080|NewTV_潮妈辣婆「IPV6」, +精品体育|NewTV精品体育|NewTV精品体育 4M1080|NewTV_精品体育「IPV6」, +精品纪录|NewTV精品纪录|NewTV精品纪录 2.5M1080, +家庭剧场|NewTV家庭剧场|NewTV家庭剧场 2.5M1080|NewTV_家庭剧场「IPV6」, +精品大剧|NewTV精品大剧|NewTV精品大剧 2.5M1080, +军事评论|NewTV军事评论|NewTV军事评论 2.5M1080|NewTV_军事评论「IPV6」, +明星大片|NewTV明星大片|NewTV明星大片 2.5M1080, +欢乐剧场|NewTV欢乐剧场|NewTV欢乐剧场 4M1080|NewTV_欢乐剧场「IPV6」, +精品萌宠|NewTV精品萌宠|NewTV精品萌宠 4M1080|NewTV_精品萌宠「IPV6」, +超级综艺|NewTV超级综艺|NewTV超级综艺 4M1080|NewTV_超级综艺「IPV6」, +金牌综艺|NewTV金牌综艺|NewTV金牌综艺 2.5M1080|NewTV_金牌综艺「IPV6」, +爱院线|iHOT爱院线, +爱科幻|iHOT爱科幻, +爱浪漫|iHOT爱浪漫, +爱喜剧|iHOT爱喜剧, +爱悬疑|iHOT爱悬疑, +爱赛车|iHOT爱赛车, +爱奇谈|iHOT爱奇谈, +爱玩具|iHOT爱玩具, +爱旅行|iHOT爱旅行, +爱幼教|iHOT爱幼教, +爱谍战|iHOT爱谍战, +爱历史|iHOT爱历史, +爱科学|iHOT爱科学, +爱动漫|iHOT爱动漫, + + +上海频道,#genre# +上海新闻, +上海都市, +上海外语, +七彩戏剧, +五星体育, +东方影视, +东方财经, +法治天地, +第一财经, + +浙江频道,#genre# +浙江新闻, +浙江国际, +浙江少儿, +浙江教科, +之江纪录, +浙江民生, +浙江经济, +浙江钱江, + +港·澳·台,#genre# +凤凰中文, +凤凰资讯, +凤凰香港, +香港卫视, +翡翠|翡翠台|香港翡翠|TVB翡翠|TVB翡翠2|TVB翡翠台|TVB翡翠台 4K, +明珠|明珠台|TVB明珠台, +星河|星河台|TVB星河, +无线新闻|无线新闻台|无线 新闻|TVB无线新闻台, +J2|TVB J2台|TVB-Plus, +台视|台視, +台视新闻|台視新聞|TW台视新闻, +民视|民視, +民视新闻|民視新聞台|民视新闻台|民視新聞, +澳亚卫视, + +电影轮播,#genre# +周星驰专辑轮播, +成龙专辑轮播, +李连杰专辑轮播, +邱淑贞, +五福星, +许冠英, +徐峥, +古天乐, +甄子丹|甄子丹电影, +港片1轮播, +港片2轮播, +香港恐怖, +邵氏影院, +4K影院, +好莱坞大片1, +赌片, +古墓系列, +灾难电影, +女神系列|徐克, +经典女神, +贺岁片, +香港贺岁, +粤语经典喜剧, +国产喜剧电影, +中外经典喜剧轮播, +电影_星爷, +电影_英叔, +电影_发哥|周润发, +电影_成龙|成龙, +电影_王晶, +电影_沈腾|沈腾, +电影_黄渤|黄渤, +电影_强森, +电影_周星星, +电影_李连杰|李连杰, +电影_洪金宝|洪金宝, +电影_梁家辉, +电影_刘德华|刘德华, +电影_斯坦森, +电影_漫威, +电影_宇宙, +电影_怪兽, +电影_武侠, +电影_警匪, +电影_罪犯, +电影_枪战, +电影_海盗, +电影_赛车, +电影_推荐, +电影_救援, +电影_热血, +电影_盗墓, +电影_贺岁, +电影_玄幻, +电影_谍战, +电影_战争, +电影_喜剧, +电影_港片, +电影_国产, +电影_小鬼头, +电影_八点档, +电影_蜘蛛侠, +电影_贺岁片, +电影_功夫片, +电影_黑帮片, +电影_丧尸片, +电影_灾难片, +电影_谍战片, +电影_战争片, +电影_犯罪片, +电影_古装片, +电影_高分动作, +电影_动作电影, +电影_搞笑喜剧, +电影_喜剧专场, +电影_欢笑影院, +电影_不挤影院, +电影_国产悬疑, +电影_快意江湖, +电影_黑帮斗争, +电影_嫣然影厅, +电影_许氏三杰|许氏三杰, +电影_经典港片, +电影_镖行天下, +电影_高能反转, +电影_喜乐影院, +电影_蘑菇影厅, +电影_搞笑恐怖, +电影_死神来了, +电影_变形金刚, +电影_怪兽系列, + +剧集轮播,#genre# +风雨送春归, +人世间, +长安十二时辰, +三生三世枕上书, +狂飙, +水浒传, +庆余年, +星汉灿烂.月升沧海, +琅琊榜, +警察荣誉, +雪中悍刀行, +后宫·甄嬛传, +芈月传, +武林外传, +繁花, +风吹半夏, +幸福到万家, +梦华录, +云襄传, +去有风的地方, +大博弈, +唐朝诡事录, +潜伏在黎明之前, +少年歌行, +三体, +卿卿日常, +女士的品格, +向风而行, +天下长河, +大秦帝国之裂变, +我们的日子, +康熙微服私访记, +隋唐英雄, +三国演义, +猫和老鼠, +神医喜来乐, +热血女子摔跤, +相声小品, +新还珠格格, +回家的诱惑, +剃刀边缘, +鹿鼎记小春版, +梁朝伟版鹿鼎记, +天龙八部97版, +刑事侦缉档案, +寻秦记, +法证先锋, +陀枪师姐, +笑傲江湖, +洗冤录, +倚天屠龙记, +神雕侠侣, +鉴证实录, +创世纪, +使徒行者, +金枝欲孽, +大唐双龙传, +妙手仁心, +扫黄先锋, +笑看风云, +大时代, \ No newline at end of file diff --git a/py/get_iptv.py b/py/get_iptv.py new file mode 100644 index 0000000..82943e3 --- /dev/null +++ b/py/get_iptv.py @@ -0,0 +1,175 @@ +import re +import requests +from collections import OrderedDict +from datetime import datetime +from concurrent.futures import ThreadPoolExecutor, as_completed + +tv_urls = [ + "https://qu.ax/vUBde.txt", + "http://bxtv.3a.ink/live.m3u", + "http://live.nctv.top/x.txt", + "https://aktv.space/live.m3u", + "http://tot.totalh.net/tttt.txt", + "https://m3u.ibert.me/fmml_ipv6.m3u", + "https://json.doube.eu.org/XingHuo.txt", + "https://raw.githubusercontent.com/zwc456baby/iptv_alive/master/live.txt", + "https://raw.githubusercontent.com/zwc456baby/iptv_alive/master/live.m3u", + "https://raw.githubusercontent.com/BurningC4/Chinese-IPTV/master/TV-IPV4.m3u", + "https://raw.githubusercontent.com/YueChan/Live/refs/heads/main/APTV.m3u", + "https://raw.githubusercontent.com/Wirili/IPTV/refs/heads/main/live.m3u", + "https://raw.githubusercontent.com/wwb521/live/refs/heads/main/tv.m3u", + "https://raw.githubusercontent.com/Kimentanm/aptv/master/m3u/iptv.m3u", + "https://raw.githubusercontent.com/Ftindy/IPTV-URL/main/IPV6.m3u", + "https://live.zbds.top/tv/iptv4.m3u", + "https://live.zbds.top/tv/iptv6.m3u", + "https://raw.githubusercontent.com/wind005/TVlive/refs/heads/main/m3u/%E6%B9%96%E5%8D%97%E7%A7%BB%E5%8A%A8.m3u", + "https://raw.githubusercontent.com/hanhan8127/TVBox/refs/heads/main/live.txt", + "https://raw.githubusercontent.com/hujingguang/ChinaIPTV/main/cnTV_AutoUpdate.m3u8", + "https://raw.githubusercontent.com/suxuang/myIPTV/refs/heads/main/ipv4.m3u", + "https://raw.githubusercontent.com/suxuang/myIPTV/refs/heads/main/ipv6.m3u", + "https://raw.githubusercontent.com/Guovin/iptv-api/gd/output/ipv4/result.m3u", + "https://raw.githubusercontent.com/Guovin/iptv-api/gd/output/ipv6/result.m3u", +] + +def parse_template(template_file): + template_channels = OrderedDict() + current_category = None + with open(template_file, "r", encoding="utf-8") as f: + for line in f: + line = line.strip() + if line and not line.startswith("#"): + if "#genre#" in line: + current_category = line.split(",")[0].strip() + template_channels[current_category] = [] + elif current_category: + channel_name = line.split(",")[0].strip() + template_channels[current_category].append(channel_name) + return template_channels + +def fetch_channels(url): + channels = OrderedDict() + try: + response = requests.get(url, timeout=120) + response.raise_for_status() + response.encoding = "utf-8" + lines = response.text.split("\n") + + is_m3u = any("#EXTINF" in line for line in lines[:5]) + current_category = None + + if is_m3u: + channel_name = "" + for line in lines: + line = line.strip() + if line.startswith("#EXTINF"): + match = re.search(r'group-title="(.*?)",(.*)', line) + if match: + current_category = match.group(1).strip() + channel_name = match.group(2).strip() + if current_category not in channels: + channels[current_category] = [] + elif line and not line.startswith("#"): + if current_category and channel_name: + channels[current_category].append((channel_name, line)) + channel_name = "" + else: + for line in lines: + line = line.strip() + if "#genre#" in line: + current_category = line.split(",")[0].strip() + channels[current_category] = [] + elif current_category and line: + parts = line.split(",", 1) + if len(parts) == 2: + name, url = parts + channels[current_category].append((name.strip(), url.strip())) + return channels + + except Exception as e: + print(f"Error fetching {url}: {str(e)}") + return OrderedDict() + +def match_channels(template_channels, all_channels): + matched = OrderedDict() + for category, names in template_channels.items(): + matched[category] = OrderedDict() + for name in names: + primary_name = name.split("|")[0] + for src_category, channels in all_channels.items(): + for chan_name, chan_url in channels: + if chan_name in name.split("|"): + matched[category].setdefault(primary_name, []).append(chan_url) + return matched + +def is_ipv6(url): + return re.match(r"^http:\/\/\[[0-9a-fA-F:]+\]", url) is not None + +def generate_outputs(channels, template_channels): + written_urls = set() + current_date = datetime.now().strftime("%Y-%m-%d") + + with open("lib/iptv.m3u", "w", encoding="utf-8") as m3u, \ + open("lib/iptv.txt", "w", encoding="utf-8") as txt: + + # Write channel list + total_count = 0 + for category in template_channels: + if category not in channels: + continue + + txt.write(f"\n{category},#genre#\n") + for name in template_channels[category]: + primary_name = name.split("|")[0] + urls = channels[category].get(primary_name, []) + + # URL filtering and sorting + filtered = [ + url for url in urls + if url and url not in written_urls + # and not any(b in url for b in config.url_blacklist) + ] + if not filtered: + continue + + # IP version priority sorting + # filtered.sort(key=lambda x: is_ipv6(x) != (config.ip_version_priority == "ipv6")) + + # Format URLs + total = len(filtered) + for idx, url in enumerate(filtered, 1): + base_url = url.split("$")[0] + suffix = "$LR•" + ("IPV6" if is_ipv6(url) else "IPV4") + if total > 1: + suffix += f"•{total}『线路{idx}』" + final_url = f"{base_url}{suffix}" + + m3u.write(f'#EXTINF:-1 tvg-id="{idx}" tvg-name="{primary_name}" ' + #f'tvg-logo="https://example.com/logo/{primary_name}.png" ' + f'group-title="{category}",{primary_name}\n') + m3u.write(f"{final_url}\n") + txt.write(f"{primary_name},{final_url}\n") + written_urls.add(url) + total_count += 1 + + print(f"频道处理完成,总计有效频道数:{total_count}") + +def filter_sources(template_file): + template = parse_template(template_file) + all_channels = OrderedDict() + + with ThreadPoolExecutor(max_workers=5) as executor: + futures = {executor.submit(fetch_channels, url): url for url in tv_urls} + for future in as_completed(futures): + url = futures[future] + try: + result = future.result() + for cat, chans in result.items(): + all_channels.setdefault(cat, []).extend(chans) + except Exception as e: + print(f"处理源 {url} 时出错: {str(e)}") + + return match_channels(template, all_channels), template + +if __name__ == "__main__": + matched_channels, template = filter_sources("py/config/iptv.txt") + generate_outputs(matched_channels, template) \ No newline at end of file diff --git a/py/hitvAPP.py b/py/hitvAPP.py new file mode 100644 index 0000000..ae501ac --- /dev/null +++ b/py/hitvAPP.py @@ -0,0 +1,146 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import sys +sys.path.append('..') +from base.spider import Spider +import requests + + +class Spider(Spider): + + def init(self, extend=""): + pass + + def getName(self): + return "hitv" + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + def homeContent(self, filter): + result = {} + cateManual = { + # "直播": "live", + '排行榜': 'rank', + "电影": "1", + "剧集": "2", + "综艺": "3", + "动画": "4", + "短片": "5" + } + classes = [] + for k in cateManual: + classes.append({ + 'type_name': k, + 'type_id': cateManual[k] + }) + result['class'] = classes + return result + + host = "https://wys.upfuhn.com" + headers = { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) " + "Chrome/80.0.3987.149 Safari/537.36" + } + + def list(self, list): + videos = [] + for it in list: + videos.append({ + "vod_id": it['video_site_id'], + "vod_name": it['video_name'], + "vod_pic": it['video_horizontal_url'] or it['video_vertical_url'], + "vod_remarks": it['newest_series_num'], + "vod_year": it['years'], + }) + return videos + + def homeVideoContent(self): + url = f'{self.host}/v1/ys_video_sites/hot?t=1' + data = requests.get(url, headers=self.headers).json() + videos = self.list(data['data']['data']) + result = {'list': videos} + return result + + def categoryContent(self, tid, pg, filter, extend): + path = f'/v1/ys_video_sites?t={tid}&s_t=0&a&y&o=0&ps=21&pn={pg}' + rank = False + if tid == 'rank': + if pg == 1: + path = f'/v1/ys_video_sites/ranking' + rank = True + else: + path = '' + # elif tid == 'live' and pg == 1: + # path = f'/v1/ys_live_tvs' + videos = [] + result = {} + try: + data = requests.get(self.host + path, headers=self.headers).json() + if rank: + for video in data['data']: + videos.extend(data['data'][video]) + else: + videos = data['data']['data'] + result = {} + result['list'] = self.list(videos) + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + except: + result['list'] = [] + return result + + def detailContent(self, ids): + tid = ids[0] + url = f'{self.host}/v1/ys_video_series/by_vid/{tid}' + data = requests.get(url, headers=self.headers).json() + data1 = data['data']['ys_video_site'] + urls = [] + for it in data['data']['data']: + urls.append(it['series_num'] + '$' + it['video_url']) + vod = { + 'vod_name': data1['video_name'], + 'type_name': data1['tag'], + 'vod_year': data1['years'], + 'vod_area': data1['area'], + 'vod_director': data1['main_actor'], + 'vod_content': data1['video_desc'], + 'vod_play_from': '嗷呜在线', + 'vod_play_url': '#'.join(urls), + } + result = { + 'list': [ + vod + ] + } + return result + + def searchContent(self, key, quick, pg=1): + url = f'{self.host}/v1/ys_video_sites/search?s={key}&o=0&ps=200&pn={pg}' + data = requests.get(url, headers=self.headers).json() + videos = data['data']['video_sites'] + if data['data']['first_video_series'] is not None: + videos = [data['data']['first_video_series']] + videos + result = {} + result['list'] = self.list(videos) + result['page'] = pg + return result + + def playerContent(self, flag, id, vipFlags): + result = { + 'url': id, + 'parse': 0, + 'header': self.headers + } + return result + + def localProxy(self, param): + pass diff --git a/py/lavAPP.py b/py/lavAPP.py new file mode 100644 index 0000000..3ecc807 --- /dev/null +++ b/py/lavAPP.py @@ -0,0 +1,212 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import sys +from base64 import b64encode, b64decode +from Crypto.Hash import MD5, SHA256 +sys.path.append('..') +from base.spider import Spider +from Crypto.Cipher import AES +import json +import time + + +class Spider(Spider): + + def getName(self): + return "lav" + + def init(self, extend=""): + self.id = self.ms(str(int(time.time() * 1000)))[:16] + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def action(self, action): + pass + + def destroy(self): + pass + + host = "http://sir_new.tiansexyl.tv" + t = str(int(time.time() * 1000)) + headers = {'User-Agent': 'okhttp-okgo/jeasonlzy', 'Connection': 'Keep-Alive', + 'Content-Type': 'application/x-www-form-urlencoded'} + + def homeContent(self, filter): + cateManual = {"演员": "actor", "分类": "avsearch", } + classes = [] + for k in cateManual: + classes.append({'type_name': k, 'type_id': cateManual[k]}) + j = {'code': 'homePage', 'mod': 'down', 'channel': 'self', 'via': 'agent', 'bundleId': 'com.tvlutv', + 'app_type': 'rn', 'os_version': '12.0.5', 'version': '3.2.3', 'oauth_type': 'android_rn', + 'oauth_id': self.id} + + body = self.aes(j) + data = self.post(f'{self.host}/api.php?t={str(int(time.time() * 1000))}', data=body, headers=self.headers).json()['data'] + data1 = self.aes(data, False)['data'] + self.r = data1['r'] + for i, d in enumerate(data1['avTag']): + # if i == 4: + # break + classes.append({'type_name': d['name'], 'type_id': d['tag']}) + resutl = {} + resutl["class"] = classes + return resutl + + def homeVideoContent(self): + pass + + def categoryContent(self, tid, pg, filter, extend): + id = tid.split("@@") + result = {} + result["page"] = pg + result["pagecount"] = 9999 + result["limit"] = 90 + result["total"] = 999999 + if id[0] == 'avsearch': + if pg == '1': + j = {'code': 'avsearch', 'mod': 'search', 'channel': 'self', 'via': 'agent', 'bundleId': 'com.tvlutv', + 'app_type': 'rn', 'os_version': '12.0.5', 'version': '3.2.3', 'oauth_type': 'android_rn', + 'oauth_id': self.id} + if len(id) > 1: + j = {'code': 'find', 'mod': 'tag', 'channel': 'self', 'via': 'agent', 'bundleId': 'com.tvlutv', + 'app_type': 'rn', 'os_version': '12.0.5', 'version': '3.2.3', 'oauth_type': 'android_rn', + 'oauth_id': self.id, 'type': 'av', 'dis': 'new', 'page': str(pg), 'tag': id[1]} + elif id[0] == 'actor': + j = {'mod': 'actor', 'channel': 'self', 'via': 'agent', 'bundleId': 'com.tvlutv', 'app_type': 'rn', + 'os_version': '12.0.5', 'version': '3.2.3', 'oauth_type': 'android_rn', 'oauth_id': self.id, + 'page': str(pg), 'filter': ''} + if len(id) > 1: + j = {'code': 'eq', 'mod': 'actor', 'channel': 'self', 'via': 'agent', 'bundleId': 'com.tvlutv', + 'app_type': 'rn', 'os_version': '12.0.5', 'version': '3.2.3', 'oauth_type': 'android_rn', + 'oauth_id': self.id, 'page': str(pg), 'id': id[1], 'actor': id[2]} + else: + j = {'code': 'search', 'mod': 'av', 'channel': 'self', 'via': 'agent', 'bundleId': 'com.tvlutv', + 'app_type': 'rn', 'os_version': '12.0.5', 'version': '3.2.3', 'oauth_type': 'android_rn', + 'oauth_id': self.id, 'page': str(pg), 'tag': id[0]} + + body = self.aes(j) + data = self.post(f'{self.host}/api.php?t={str(int(time.time() * 1000))}', data=body, headers=self.headers).json()['data'] + data1 = self.aes(data, False)['data'] + videos = [] + if tid == 'avsearch' and len(id) == 1: + for item in data1: + videos.append({"vod_id": id[0] + "@@" + str(item.get('tags')), 'vod_name': item.get('name'), + 'vod_pic': self.imgs(item.get('ico')), 'vod_tag': 'folder', + 'style': {"type": "rect", "ratio": 1.33}}) + elif tid == 'actor' and len(id) == 1: + for item in data1: + videos.append({"vod_id": id[0] + "@@" + str(item.get('id')) + "@@" + item.get('name'), + 'vod_name': item.get('name'), 'vod_pic': self.imgs(item.get('cover')), + 'vod_tag': 'folder', 'style': {"type": "oval"}}) + else: + for item in data1: + if item.get('_id'): + videos.append({"vod_id": str(item.get('id')), 'vod_name': item.get('title'), + 'vod_pic': self.imgs(item.get('cover_thumb') or item.get('cover_full')), + 'vod_remarks': item.get('good'), 'style': {"type": "rect", "ratio": 1.33}}) + result["list"] = videos + return result + + def detailContent(self, ids): + id = ids[0] + j = {'code': 'detail', 'mod': 'av', 'channel': 'self', 'via': 'agent', 'bundleId': 'com.tvlutv', + 'app_type': 'rn', 'os_version': '12.0.5', 'version': '3.2.3', 'oauth_type': 'android_rn', + 'oauth_id': self.id, 'id': id} + body = self.aes(j) + data = self.post(f'{self.host}/api.php?t={str(int(time.time() * 1000))}', data=body, headers=self.headers).json()['data'] + data1 = self.aes(data, False)['line'] + vod = {} + play = [] + for itt in data1: + a = itt['line'].get('s720') + if a: + b = a.split('.') + b[0] = 'https://m3u8' + a = '.'.join(b) + play.append(itt['info']['tips'] + "$" + a) + break + vod["vod_play_from"] = 'LAV' + vod["vod_play_url"] = "#".join(play) + result = {"list": [vod]} + return result + + def searchContent(self, key, quick, pg="1"): + pass + + def playerContent(self, flag, id, vipFlags): + url = self.getProxyUrl() + "&url=" + b64encode(id.encode('utf-8')).decode('utf-8') + "&type=m3u8" + self.hh = {'User-Agent': 'dd', 'Connection': 'Keep-Alive', 'Referer': self.r} + result = {} + result["parse"] = 0 + result["url"] = url + result["header"] = self.hh + return result + + def localProxy(self, param): + url = param["url"] + if param.get('type') == "m3u8": + return self.vod(b64decode(url).decode('utf-8')) + else: + return self.img(url) + + def vod(self, url): + data = self.fetch(url, headers=self.hh).text + key = bytes.fromhex("13d47399bda541b85e55830528d4e66f1791585b2d2216f23215c4c63ebace31") + iv = bytes.fromhex(data[:32]) + data = data[32:] + cipher = AES.new(key, AES.MODE_CFB, iv, segment_size=128) + data_bytes = bytes.fromhex(data) + decrypted = cipher.decrypt(data_bytes) + encoded = decrypted.decode("utf-8").replace("\x08", "") + return [200, "application/vnd.apple.mpegur", encoded] + + def imgs(self, url): + return self.getProxyUrl() + '&url=' + url + + def img(self, url): + type = url.split('.')[-1] + data = self.fetch(url).text + key = bytes.fromhex("ba78f184208d775e1553550f2037f4af22cdcf1d263a65b4d5c74536f084a4b2") + iv = bytes.fromhex(data[:32]) + data = data[32:] + cipher = AES.new(key, AES.MODE_CFB, iv, segment_size=128) + data_bytes = bytes.fromhex(data) + decrypted = cipher.decrypt(data_bytes) + return [200, f"image/{type}", decrypted] + + def ms(self, data, m=False): + h = MD5.new() + if m: + h = SHA256.new() + h.update(data.encode('utf-8')) + return h.hexdigest() + + def aes(self, data, operation=True): + key = bytes.fromhex("620f15cfdb5c79c34b3940537b21eda072e22f5d7151456dec3932d7a2b22c53") + t = str(int(time.time())) + ivt = self.ms(t) + if operation: + data = json.dumps(data, separators=(',', ':')) + iv = bytes.fromhex(ivt) + else: + iv = bytes.fromhex(data[:32]) + data = data[32:] + cipher = AES.new(key, AES.MODE_CFB, iv, segment_size=128) + if operation: + data_bytes = data.encode('utf-8') + encrypted = cipher.encrypt(data_bytes) + ep = f'{ivt}{encrypted.hex()}' + edata = f"data={ep}×tamp={t}0d27dfacef1338483561a46b246bf36d" + sign = self.ms(self.ms(edata, True)) + edata = f"timestamp={t}&data={ep}&sign={sign}" + return edata + else: + data_bytes = bytes.fromhex(data) + decrypted = cipher.decrypt(data_bytes) + return json.loads(decrypted.decode('utf-8')) + diff --git a/py/like.py b/py/like.py new file mode 100644 index 0000000..2b0af3d --- /dev/null +++ b/py/like.py @@ -0,0 +1,248 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import random +import sys +from base64 import b64encode, b64decode +from concurrent.futures import ThreadPoolExecutor, as_completed +from urllib.parse import urlencode +sys.path.append('..') +from base.spider import Spider + + +class Spider(Spider): + + def init(self, extend=""): + self.did = self.random_str(32) + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + rhost = 'https://www.iqiyi.com' + + hhost='https://mesh.if.iqiyi.com' + + dhost='https://miniapp.iqiyi.com' + + headers = { + 'Origin': rhost, + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36', + 'Referer': f'{rhost}/', + } + + def homeContent(self, filter): + result = {} + cateManual = { + "全部": "1009", + "电影": "1", + "剧集": "2", + "综艺": "6", + "动漫": "4", + "儿童": "15", + "微剧": "35", + "纪录片": "3" + } + classes = [] + filters = {} + for k in cateManual: + classes.append({ + 'type_name': k, + 'type_id': cateManual[k] + }) + 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 + return result + + def homeVideoContent(self): + data=self.fetch(f'{self.hhost}/portal/lw/v5/channel/recommend?v=13.014.21150', headers=self.headers).json() + vlist = [] + for i in data['items'][1:]: + for j in i['video'][0]['data']: + id = j.get('firstId') + pic=j.get('prevue',{}).get('image_url') or j.get('album_image_url_hover') + if id and pic: + pu=j.get('prevue',{}).get('page_url') or j.get('page_url').split('?')[0] + id = f'{id}@{self.e64(pu)}' + vlist.append({ + 'vod_id': id, + 'vod_name': j.get('display_name'), + 'vod_pic': pic, + 'vod_year': j.get('sns_score'), + 'vod_remarks': j.get('dq_updatestatus') or j.get('rank_prefix') + }) + return {'list':vlist} + + def categoryContent(self, tid, pg, filter, extend): + if pg == "1": + self.sid = '' + new_data = {'mode':'24'} + for key, value in extend.items(): + if value: + key_value_pairs = self.d64(value).split(',') + for pair in key_value_pairs: + k, v = pair.split('=') + if k in new_data: + new_data[k] += "," + v + else: + new_data[k] = v + path=f'/portal/lw/videolib/data?uid=&passport_id=&ret_num=60&version=13.014.21150&device_id={self.did}&channel_id={tid}&page_id={pg}&session={self.sid}&os=&conduit_id=&vip=0&auth&recent_selected_tag=&ad=%5B%7B%22lm%22:%225%22,%22ai%22:%225%22,%22fp%22:%226%22,%22sei%22:%22Sa867aa9d326e2bd8654d8c2a8636055e%22,%22position%22:%22library%22%7D%5D&adExt=%7B%22r%22:%221.2.1-ares6-pure%22%7D&dfp=a12f96215b2f7842a98c082799ca0c3d9236be00946701b106829754d8ece3aaf8&filter={urlencode(new_data)}' + data=self.fetch(f'{self.hhost}{path}', headers=self.headers).json() + self.sid = data['session'] + videos = [] + for i in data['data']: + id = i.get('firstId') or i.get('tv_id') + if not id: + id=i.get('play_url').split(';')[0].split('=')[-1] + if id and not i.get('h'): + id=f'{id}@{self.e64(i.get("page_url"))}' + videos.append({ + 'vod_id': id, + 'vod_name': i.get('display_name'), + 'vod_pic': i.get('album_image_url_hover'), + 'vod_year': i.get('sns_score'), + 'vod_remarks': i.get('dq_updatestatus') or i.get('pay_mark') + }) + result = {} + result['list'] = videos + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + ids = ids[0].split('@') + ids[-1] = self.d64(ids[-1]) + data = self.fetch(f'{self.dhost}/h5/mina/baidu/play/body/v1/{ids[0]}/', headers=self.headers).json() + v=data['data']['playInfo'] + vod = { + 'vod_name': v.get('albumName'), + 'type_name': v.get('tags'), + 'vod_year': v.get('albumYear'), + 'vod_remarks': v.get('updateStrategy'), + 'vod_actor': v.get('mainActors'), + 'vod_director': v.get('directors'), + 'vod_content': v.get('albumDesc'), + 'vod_play_from': '爱奇艺', + 'vod_play_url': '' + } + if data.get('data') and data['data'].get('videoList') and data['data']['videoList'].get('videos'): + purl=[f'{i["shortTitle"]}${i["pageUrl"]}' for i in data['data']['videoList']['videos']] + pg=data['data']['videoList'].get('totalPages') + if pg and pg > 1: + id = v['albumId'] + pages = list(range(2, pg + 1)) + page_results = {} + with ThreadPoolExecutor(max_workers=10) as executor: + future_to_page = { + executor.submit(self.fetch_page_data, page, id): page + for page in pages + } + for future in as_completed(future_to_page): + page = future_to_page[future] + try: + result = future.result() + page_results[page] = result + except Exception as e: + print(f"Error fetching page {page}: {e}") + for page in sorted(page_results.keys()): + purl.extend(page_results[page]) + vod['vod_play_url'] = '#'.join(purl) + else: + vdata=self.fetch(f'{self.dhost}/h5/mina/baidu/play/head/v1/{ids[0]}/', headers=self.headers).json() + v=vdata['data']['playInfo'] + vod = { + 'vod_name': v.get('shortTitle'), + 'type_name': v.get('channelName'), + 'vod_year': v.get('year'), + 'vod_remarks': v.get('focus'), + 'vod_actor': v.get('mainActors'), + 'vod_director': v.get('directors'), + 'vod_content': v.get('desc'), + 'vod_play_from': '爱奇艺', + 'vod_play_url': f'{v.get("shortTitle")}${ids[-1]}' + } + return {'list':[vod]} + + def searchContent(self, key, quick, pg="1"): + data=self.fetch(f'{self.hhost}/portal/lw/search/homePageV3?key={key}¤t_page={pg}&mode=1&source=input&suggest=&version=13.014.21150&pageNum={pg}&pageSize=25&pu=&u={self.did}&scale=150&token=&userVip=0&conduit=&vipType=-1&os=&osShortName=win10&dataType=&appMode=', headers=self.headers).json() + videos = [] + vdata=data['data']['templates'] + for i in data['data']['templates']: + if i.get('intentAlbumInfos'): + vdata=[{'albumInfo': c} for c in i['intentAlbumInfos']]+vdata + + for i in vdata: + if i.get('albumInfo') and (i['albumInfo'].get('playQipuId','') or i['albumInfo'].get('qipuId')) and i['albumInfo'].get('pageUrl'): + b=i['albumInfo'] + id=f"{(b.get('playQipuId','') or b.get('qipuId'))}@{self.e64(b.get('pageUrl'))}" + videos.append({ + 'vod_id': id, + 'vod_name': b.get('title'), + 'vod_pic': b.get('img'), + 'vod_year': (b.get('year',{}) or {}).get('value'), + 'vod_remarks': b.get('subscriptContent') or b.get('channel') or b.get('vipTips') + }) + return {'list':videos,'page':pg} + + def playerContent(self, flag, id, vipFlags): + return {'jx':1,'parse': 1, 'url': id, 'header': ''} + + def localProxy(self, param): + pass + + def fetch_page_data(self, page, id): + try: + url = f'{self.dhost}/h5/mina/avlist/{page}/{id}/' + data = self.fetch(url, headers=self.headers).json() + return [f'{i["shortTitle"]}${i["pageUrl"]}' for i in data['data']['videoList']['videos']] + except: + return [] + + def getf(self,body): + data=self.fetch(f'{self.hhost}/portal/lw/videolib/tag?channel_id={body["type_id"]}&tagAdd=&selected_tag_name=&version=13.014.21150&device={self.did}&uid=', headers=self.headers).json() + ft = [] + # for i in data[:-1]: + for i in data: + try: + value_array = [{"n": value['text'], "v": self.e64(value['tag_param'])} for value in i['tags'] if + value.get('tag_param')] + ft.append({"key": i['group'], "name": i['group'], "value": value_array}) + except: + print(i) + return (body['type_id'], ft) + + 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: str): + 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 random_str(self,length=16): + hex_chars = '0123456789abcdef' + return ''.join(random.choice(hex_chars) for _ in range(length)) diff --git a/py/live_smt.py b/py/live_smt.py new file mode 100644 index 0000000..9f6cee5 --- /dev/null +++ b/py/live_smt.py @@ -0,0 +1,133 @@ +# -*- coding: utf-8 -*- +# @Author : Doubebly +# @Time : 2025/4/6 21:04 + +import json +import re +import sys +import time +import hashlib +import requests +import base64 +from urllib.parse import urlencode +sys.path.append('..') +from base.spider import Spider + + +class Spider(Spider): + def getName(self): + return "SMT" + + def init(self, extend): + self.d = "W3sidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIummmea4ryIsICJuYW1lIjogIue/oee/oOWPsCIsICJmdW4iOiAic210IiwgInBpZCI6ICJqYWRlX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpppnmuK8iLCAibmFtZSI6ICLnv6Hnv6Dlj7AgYmFja3VwIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkphZGVfeHVlIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIummmea4ryIsICJuYW1lIjogImlOZXdzIOaWsOmXu+WPsCIsICJmdW4iOiAic210IiwgInBpZCI6ICJpbmV3c190d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6aaZ5rivIiwgIm5hbWUiOiAiSiAyIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImoyX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpppnmuK8iLCAibmFtZSI6ICLnj43nj6Dlj7AiLCAiZnVuIjogInNtdCIsICJwaWQiOiAicGVhcmxfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIummmea4ryIsICJuYW1lIjogIuWHpOWHsOmmmea4ryIsICJmdW4iOiAic210IiwgInBpZCI6ICJoa3Bob2VuaXhfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIummmea4ryIsICJuYW1lIjogIkhPWei1hOiur+WPsCIsICJmdW4iOiAic210IiwgInBpZCI6ICJob3ljYWlqaW5nX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpppnmuK8iLCAibmFtZSI6ICJSSEsgMzEiLCAiZnVuIjogInNtdCIsICJwaWQiOiAicmhrMzFfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIummmea4ryIsICJuYW1lIjogIlZJVVRWMSIsICJmdW4iOiAic210IiwgInBpZCI6ICJ2aXUxX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpppnmuK8iLCAibmFtZSI6ICJSSEsgMzIiLCAiZnVuIjogInNtdCIsICJwaWQiOiAicmhrMzJfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIummmea4ryIsICJuYW1lIjogIuWHpOWHsOWNq+inhiIsICJmdW4iOiAic210IiwgInBpZCI6ICJwaG9lbml4dHZfaGQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6aaZ5rivIiwgIm5hbWUiOiAi5Yek5Yew6LWE6K6vIiwgImZ1biI6ICJzbXQiLCAicGlkIjogInBob2VuaXhpbmZvX2hkIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIummmea4ryIsICJuYW1lIjogIlZpdTYiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidml1c2l4X3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkuK3lm70iLCAibmFtZSI6ICJDQ1RWLTEg57u85ZCIIEhEIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImNjdHYxIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS4reWbvSIsICJuYW1lIjogIkNDVFYtMiDotKLnu48iLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY2N0djIifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Lit5Zu9IiwgIm5hbWUiOiAiQ0NUVi0zIOe7vOiJuiBIRCIsICJmdW4iOiAic210IiwgInBpZCI6ICJjY3R2MyJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkuK3lm70iLCAibmFtZSI6ICJDQ1RWLTQg5Lit5paH5Zu96ZmFIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImNjdHY0In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS4reWbvSIsICJuYW1lIjogIkNDVFY0IOaWsOmXu+WPsCIsICJmdW4iOiAic210IiwgInBpZCI6ICJDY3R2NCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkuK3lm70iLCAibmFtZSI6ICJDQ1RWLTcg5Yab5LqL5Yac5LiaIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImNjdHY3In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS4reWbvSIsICJuYW1lIjogIkNDVFYtOCDnlLXop4bliacgSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY2N0djhoZCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkuK3lm70iLCAibmFtZSI6ICJDQ1RWLTkg6K6w5b2VIEhEIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImNjdHY5aGQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Lit5Zu9IiwgIm5hbWUiOiAiQ0NUVi0xMCDnp5HmlZkgSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY2N0djEwaGQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Lit5Zu9IiwgIm5hbWUiOiAiQ0NUVi0xMSDmiI/mm7IiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY2N0djExIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS4reWbvSIsICJuYW1lIjogIkNDVFYtMTIg56S+5Lya5LiO5rOVIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImNjdHYxMiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkuK3lm70iLCAibmFtZSI6ICJDQ1RWLTEzIOaWsOmXu+mikemBkyIsICJmdW4iOiAic210IiwgInBpZCI6ICJjY3R2MTMifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Lit5Zu9IiwgIm5hbWUiOiAiQ0NUVi0xNCDlsJHlhL8iLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY2N0djE0In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS4reWbvSIsICJuYW1lIjogIkNDVFYtNiIsICJmdW4iOiAic210IiwgInBpZCI6ICJjY3R2NiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkuK3lm70iLCAibmFtZSI6ICJDQ1RWLTE1IOmfs+S5kCIsICJmdW4iOiAic210IiwgInBpZCI6ICJjY3R2MTUifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Lit5Zu9IiwgIm5hbWUiOiAi5rmW5Y2X5Y2r6KeGIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImh1bmFuX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkuK3lm70iLCAibmFtZSI6ICLmtZnmsZ/ljavop4YiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiemhlamlhbmdfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS4reWbvSIsICJuYW1lIjogIuaxn+iLj+WNq+inhiIsICJmdW4iOiAic210IiwgInBpZCI6ICJqaWFuZ3N1X3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkuK3lm70iLCAibmFtZSI6ICLmt7HlnLPljavop4YiLCAiZnVuIjogInNtdCIsICJwaWQiOiAic2hlbnpoZW4ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Lit5Zu9IiwgIm5hbWUiOiAi56aP5bu65Lic5Y2X5Y2r6KeGIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImZ1amlhbiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkuK3lm70iLCAibmFtZSI6ICLlub/kuJzljZfmlrnljavop4YiLCAiZnVuIjogInNtdCIsICJwaWQiOiAibmFuZmFuZ190d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Lit5Zu9IiwgIm5hbWUiOiAi5bm/5Lic5Y2r6KeGIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImd1YW5nZG9uZ3dlaXNoaV90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Lit5Zu9IiwgIm5hbWUiOiAi5YyX5Lqs5Y2r6KeGIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImJlaWppbmcifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Lit5Zu9IiwgIm5hbWUiOiAi54+g5rGf5Y+wIiwgImZ1biI6ICJzbXQiLCAicGlkIjogInpodWppYW5nIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS4reWbvSIsICJuYW1lIjogIuW5v+ilv+WNq+inhiIsICJmdW4iOiAic210IiwgInBpZCI6ICJndWFuZ3hpIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS4reWbvSIsICJuYW1lIjogIua5luWMl+WNq+inhiIsICJmdW4iOiAic210IiwgInBpZCI6ICJodWJlaSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkuK3lm70iLCAibmFtZSI6ICLlm5vlt53ljavop4YiLCAiZnVuIjogInNtdCIsICJwaWQiOiAic2ljaHVhbl90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Lit5Zu9IiwgIm5hbWUiOiAi5Lic5pa55Y2r6KeGIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImRvbmdmYW5nd2Vpc2hpX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkuK3lm70iLCAibmFtZSI6ICJDR1ROIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkNHVE4ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Lit5Zu9IiwgIm5hbWUiOiAi5Yek5Yew5Y2r6KeGIiwgImZ1biI6ICJzbXQiLCAicGlkIjogInBob2VuaXh0dl9oZCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkuK3lm70iLCAibmFtZSI6ICLlh6Tlh7DotYTorq8iLCAiZnVuIjogInNtdCIsICJwaWQiOiAicGhvZW5peGluZm9faGQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Lit5Zu9IiwgIm5hbWUiOiAiQ0NUVi01IOS9k+iCsumikemBkyIsICJmdW4iOiAic210IiwgInBpZCI6ICJjY3R2NSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkuK3lm70iLCAibmFtZSI6ICJDQ1RWLTUrIOS9k+iCsui1m+S6iyBIRCIsICJmdW4iOiAic210IiwgInBpZCI6ICJjY3R2NXBsdXMifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5L2T6IKy6aKR6YGTIiwgIm5hbWUiOiAiQXN0cm8gUHJlbWllciBMZWFndWUgMSIsICJmdW4iOiAic210IiwgInBpZCI6ICJnb19hc3NwMSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkvZPogrLpopHpgZMiLCAibmFtZSI6ICJBc3RybyBFUEwgMSBiYWNrdXAiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiZ29fYXNzcDF4In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS9k+iCsumikemBkyIsICJuYW1lIjogIkFzdHJvIFByZW1pZXIgTGVhZ3VlIDIiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiZ29fYXNzcDIifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5L2T6IKy6aKR6YGTIiwgIm5hbWUiOiAiQXN0cm8gR3JhbmRzdGFuZCIsICJmdW4iOiAic210IiwgInBpZCI6ICJnb19hc3NwMyJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkvZPogrLpopHpgZMiLCAibmFtZSI6ICJBc3RybyBGb290YmFsbCIsICJmdW4iOiAic210IiwgInBpZCI6ICJnb19hc3NwNCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkvZPogrLpopHpgZMiLCAibmFtZSI6ICJBc3RybyBTcG9ydHMgUGx1cyIsICJmdW4iOiAic210IiwgInBpZCI6ICJnb19zcG9ydHNwbHVzIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS9k+iCsumikemBkyIsICJuYW1lIjogIkFzdHJvIEJhZG1pbnRvbiAxIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImdvX2JhZG1pbnRvbjEifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5L2T6IKy6aKR6YGTIiwgIm5hbWUiOiAiQXN0cm8gQmFkbWludG9uIDIiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiZ29fYmFkbWludG9uMiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkvZPogrLpopHpgZMiLCAibmFtZSI6ICJBc3RybyBXLVNwb3J0cyIsICJmdW4iOiAic210IiwgInBpZCI6ICJnb19hc3NwNSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkvZPogrLpopHpgZMiLCAibmFtZSI6ICJTdXBlcnNwb3J0cyAxIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkFzc3AxIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS9k+iCsumikemBkyIsICJuYW1lIjogIlN1cGVyc3BvcnRzIDIiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQXNzcDIifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5L2T6IKy6aKR6YGTIiwgIm5hbWUiOiAiU3VwZXJzcG9ydHMgMyIsICJmdW4iOiAic210IiwgInBpZCI6ICJBc3NwMyJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkvZPogrLpopHpgZMiLCAibmFtZSI6ICJTdXBlcnNwb3J0cyA0IiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkFzc3A0In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS9k+iCsumikemBkyIsICJuYW1lIjogIldXRSIsICJmdW4iOiAic210IiwgInBpZCI6ICJXd2UifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5L2T6IKy6aKR6YGTIiwgIm5hbWUiOiAiRmlnaHQgU3BvcnRzIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkZzIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS9k+iCsumikemBkyIsICJuYW1lIjogIk5CQSBUViIsICJmdW4iOiAic210IiwgInBpZCI6ICJOYmEifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5L2T6IKy6aKR6YGTIiwgIm5hbWUiOiAiQXN0cm8gQ3JpY2tldCIsICJmdW4iOiAic210IiwgInBpZCI6ICJBY3JpY2tldCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkvZPogrLpopHpgZMiLCAibmFtZSI6ICJBc3RybyBHb2xmIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkFnb2xmIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS9k+iCsumikemBkyIsICJuYW1lIjogIlRudCBTcG9ydHMgMSIsICJmdW4iOiAic210IiwgInBpZCI6ICI2ZmFjMGFhZWFkIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS9k+iCsumikemBkyIsICJuYW1lIjogIlROVCBTcG9ydHMgMiIsICJmdW4iOiAic210IiwgInBpZCI6ICJkOWE3NmE3OWNjIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS9k+iCsumikemBkyIsICJuYW1lIjogIlROVCBTcG9ydHMgMyIsICJmdW4iOiAic210IiwgInBpZCI6ICI1ZmVhNGQ3M2RiIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS9k+iCsumikemBkyIsICJuYW1lIjogIlROVCBTcG9ydHMgNCIsICJmdW4iOiAic210IiwgInBpZCI6ICJ0bnRzcG9ydDQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5L2T6IKy6aKR6YGTIiwgIm5hbWUiOiAiU29ueSBUZW4gMSIsICJmdW4iOiAic210IiwgInBpZCI6ICJ0ZW4xX3JhaiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkvZPogrLpopHpgZMiLCAibmFtZSI6ICJTb255IFRlbiAyIiwgImZ1biI6ICJzbXQiLCAicGlkIjogInRlbjJfcmFqIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS9k+iCsumikemBkyIsICJuYW1lIjogIlNvbnkgVGVuIDMiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidGVuM19yYWoifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5L2T6IKy6aKR6YGTIiwgIm5hbWUiOiAiU1BPVFYgMSBIRCIsICJmdW4iOiAic210IiwgInBpZCI6ICJnb19zcG90diJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkvZPogrLpopHpgZMiLCAibmFtZSI6ICJTUE8gVFYgMiIsICJmdW4iOiAic210IiwgInBpZCI6ICJnb19zcG90djIifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5L2T6IKy6aKR6YGTIiwgIm5hbWUiOiAiU2t5c3BvcnRzIEYxIiwgImZ1biI6ICJzbXQiLCAicGlkIjogInRpYW5rb25nZjEifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5L2T6IKy6aKR6YGTIiwgIm5hbWUiOiAiU2t5c3BvcnRzIENyaWNrZXQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidGlhbmtvbmdjcmlja2V0In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS9k+iCsumikemBkyIsICJuYW1lIjogIlNreXNwb3J0cyBFUEwiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidGlhbmtvbmdlcGwifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5L2T6IKy6aKR6YGTIiwgIm5hbWUiOiAiU2t5c3BvcnRzIE1haW4gRXZlbnQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidGlhbmtvbmdtYWluIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS9k+iCsumikemBkyIsICJuYW1lIjogIlNreXNwb3J0cyBOZXdzIiwgImZ1biI6ICJzbXQiLCAicGlkIjogInRpYW5rb25nbmV3cyJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkvZPogrLpopHpgZMiLCAibmFtZSI6ICJTa3lzcG9ydHMgTWl4IiwgImZ1biI6ICJzbXQiLCAicGlkIjogInRpYW5rb25nbWl4In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS9k+iCsumikemBkyIsICJuYW1lIjogIkNDVFYtNSDkvZPogrLpopHpgZMiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY2N0djUifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5L2T6IKy6aKR6YGTIiwgIm5hbWUiOiAiQ0NUVi01KyDkvZPogrLotZvkuosgSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY2N0djVwbHVzIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS9k+iCsumikemBkyIsICJuYW1lIjogIueIseWwlOi+vuS9k+iCsjLlj7AiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiZWx0YXNwb3J0Ml90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5L2T6IKy6aKR6YGTIiwgIm5hbWUiOiAi54ix5bCU6L6+5L2T6IKyM+WPsCIsICJmdW4iOiAic210IiwgInBpZCI6ICJlbHRhc3BvcnQzX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkvZPogrLpopHpgZMiLCAibmFtZSI6ICJSdWdieSBQYXNzIFRWIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlJ1Z2J5cGFzc3R2In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS9k+iCsumikemBkyIsICJuYW1lIjogIlJUTSBTcG9ydHMgSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiUnRtc3BvcnQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5L2T6IKy6aKR6YGTIiwgIm5hbWUiOiAiQXJlbmEiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQXJlbmEifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5L2T6IKy6aKR6YGTIiwgIm5hbWUiOiAiQXJlbmEgMiIsICJmdW4iOiAic210IiwgInBpZCI6ICJBcmVuYTIifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5L2T6IKy6aKR6YGTIiwgIm5hbWUiOiAiQm9sYUFyZW5hIDEiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQm9sYWFyZW5hMSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkvZPogrLpopHpgZMiLCAibmFtZSI6ICJCb2xhQXJlbmEgMiIsICJmdW4iOiAic210IiwgInBpZCI6ICJCb2xhYXJlbmEyIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS9k+iCsumikemBkyIsICJuYW1lIjogIkFzdHJvIEJlaW5zcG9ydHMgMSIsICJmdW4iOiAic210IiwgInBpZCI6ICJBc3Ryb2JlaW4xIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS9k+iCsumikemBkyIsICJuYW1lIjogIkFzdHJvIEJlaW5zcG9ydHMgMiIsICJmdW4iOiAic210IiwgInBpZCI6ICJBc3Ryb2JlaW4yIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS9k+iCsumikemBkyIsICJuYW1lIjogIkFzdHJvIEJlaW5zcG9ydHMgMyIsICJmdW4iOiAic210IiwgInBpZCI6ICJBc3Ryb2JlaW4zIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIlRWQlMgTmV3cyDmlrDpl7vlj7AiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidHZic19uIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIlRWQlMg5qyi5LmQ5Y+wIO+8iOWkh+S7ve+8iSIsICJmdW4iOiAic210IiwgInBpZCI6ICJ0dmJzaHVhbmxlX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICJUVkJTIEhEIiwgImZ1biI6ICJzbXQiLCAicGlkIjogInR2YnMifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi5Lit5aSp5paw6Ze7IEhEIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImN0aW5ld3MifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi5Lit5aSp5aix5LmQIENUSSBFbnRlcnRhaW1lbnQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY3RpZW50In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIuS4reWkqee7vOWQiCBDVEkgTWV0cm8iLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY3RpemhvbmdoZSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLkuK3lpKnkuprmtLLlj7AiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY3RpYXNpYV90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi5Y+w6KeGIFRUViBIRCIsICJmdW4iOiAic210IiwgInBpZCI6ICJ0dHZfdGFpd2FuIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIuWPsOinhuaWsOmXu+WPsCIsICJmdW4iOiAic210IiwgInBpZCI6ICJ0dHZuZXdzX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLlj7Dop4bnu7zlkIjlj7AiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidHR2emhvbmdoZSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLkuK3op4YgSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiemhvbmdzaGloZF90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi5Lit6KeG5paw6Ze75Y+wIiwgImZ1biI6ICJzbXQiLCAicGlkIjogInpob25nc2hpbmV3c190d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi5rCR6KeGIEhEIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImZ0dmhkX3RhaXdhbiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLmsJHop4bmlrDpl7vlj7AgRlRWIE5ld3MiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiZnR2bmV3X3RhaXdhbiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLmsJHop4blj7Dmub7lj7AiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiZnR2dGFpd2FuX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLljY7op4YgQ1RTIEhEIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImN0c2hkX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLlhazop4YgQ1RWIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImN0djE4X3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLlhavlpKfnrKzkuIAgR1RWIEZpcnN0IiwgImZ1biI6ICJzbXQiLCAicGlkIjogImJhZGFmaXJzdCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLlhavlpKfnu7zlkIggR1RWIE1ldHJvIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImJhZGF6aG9uZ2hlIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIuWFq+Wkp+aIj+WJpyBHVFYgRHJhbWEiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiYmFkYWRyYW1hIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIuWFq+Wkp+WoseS5kCBHVFYgRW50ZXJ0YWlubWVudCIsICJmdW4iOiAic210IiwgInBpZCI6ICJiYWRhZW50ZXJ0YWluIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIkhCT19IRCIsICJmdW4iOiAic210IiwgInBpZCI6ICJoYm9oZF90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAiSEJPX0hJVFMiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiaGJvaGl0X3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICJIb2xseXdvb2QgTW92aWVzIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImhvbGx5d29vZG1vdmllc190d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi5LiJ56uL5Y+w5rm+IFNhbmxpIFRhaXdhbiIsICJmdW4iOiAic210IiwgInBpZCI6ICJzYW5saXRhaXdhbiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLkuInnq4vmiI/liaflj7AiLCAiZnVuIjogInNtdCIsICJwaWQiOiAic2FubGl4aWp1X3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLkuInnq4vnu7zlkIggU2FubGkgTWV0cm8iLCAiZnVuIjogInNtdCIsICJwaWQiOiAic2FubGl6aG9uZ2hlIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIuS4ieeri+mDveS8muWPsCIsICJmdW4iOiAic210IiwgInBpZCI6ICJzYW5saWRvdWh1aSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLkuJzmo67mlrDpl7sgRVRUViBOZXdzIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImV0dHZuZXdzIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIkNJTkVNQVgiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY2luZW1heF90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi5Lic5qOu57u85ZCIIEVUVFYgTWV0cm8iLCAiZnVuIjogInNtdCIsICJwaWQiOiAiZXR0dnpob25naGUifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi5Lic5qOu5oiP5YmnIEVUVFYgRHJhbWEiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiZXR0dmRyYW1hIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIuS4nOajrui2heinhiIsICJmdW4iOiAic210IiwgInBpZCI6ICJldHR2c3VwZXIifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi5Lic5qOu6LSi57uP5paw6Ze7IEVUVFYgQnVzaW5lc3MiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiZXR0dmNhaWppbmdfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIuWvsOWuh+i0oue7jyIsICJmdW4iOiAic210IiwgInBpZCI6ICJodWFueXV0YWl3YW5fdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIuWvsOWuh+aWsOmXu+WPsCIsICJmdW4iOiAic210IiwgInBpZCI6ICJodWFueXV4aW53ZW5fdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIuWFrOinhjIiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY3R2Ml90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi5aSn54ixMeWPsCIsICJmdW4iOiAic210IiwgInBpZCI6ICJkYWFpX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLpnZ7lh6HmlrDpl7vlj7AiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiZmVpZmFubmV3c190d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi6b6Z5Y2O5oiP5YmnIEx1bmdodWEgRHJhbWEiLCAiZnVuIjogInNtdCIsICJwaWQiOiAibHVuZ2h1YXhpanVfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIum+meWNjue7j+WFuOWPsCIsICJmdW4iOiAic210IiwgInBpZCI6ICJsdW5naHVhamluZ2RpYW5fdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIum+meWNjuWBtuWDjyIsICJmdW4iOiAic210IiwgInBpZCI6ICJsdW5naHVhaWRvbF90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAiQVhOIFRhaXdhbiIsICJmdW4iOiAic210IiwgInBpZCI6ICJheG5fdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIumdluWkqeWbvemZheWPsCIsICJmdW4iOiAic210IiwgInBpZCI6ICJqaW5ndGlhbmludGxfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIuW5tOS7o+aWsOmXuyIsICJmdW4iOiAic210IiwgInBpZCI6ICJuaWFuZGFpbmV3c190d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi57qs5p2l5pel5pys5Y+wIiwgImZ1biI6ICJzbXQiLCAicGlkIjogInZpZGVvbGFuZGphcGFuIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIue6rOadpeeUteW9seWPsCIsICJmdW4iOiAic210IiwgInBpZCI6ICJ2aWRlb2xhbmRtb3ZpZSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLnuqzmnaXkvZPogrLlj7AiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidmlkZW9sYW5kc3BvcnQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi57qs5p2l57u85ZCI5Y+wIiwgImZ1biI6ICJzbXQiLCAicGlkIjogInZpZGVvbGFuZHpvbmdoZSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLnuqzmnaXogrLkuZAiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidmlkZW9sYW5keXVsZSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLnuqzmnaXnsr7lvakiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidmlkZW9sYW5kc3BlY2lhbF90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi5aW95raI5oGvIDIiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiZ29vZDJfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIuWkp+eIsTLlj7AiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiZGFhaTJfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIuS6mua0sue+jumjnyIsICJmdW4iOiAic210IiwgInBpZCI6ICJhZmNfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIue+jumjn+aYn+eQgyIsICJmdW4iOiAic210IiwgInBpZCI6ICJmb29kcGxhbmV0X3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLkuprmtLLml4XmuLggVExDIEFzaWEiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidGxjX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLkuJzmo67nlLXlvbEgRVRUViBNb3ZpZSIsICJmdW4iOiAic210IiwgInBpZCI6ICJldHR2bW92aWUifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi6Zi/6YeM6YOOIEFyaXJhbmciLCAiZnVuIjogInNtdCIsICJwaWQiOiAiYXJpcmFuZ190d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi5Y2a5pav6L+Q5YqoIDEiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiYm9zaXNwb3J0MV90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi5Y2a5pav6L+Q5YqoIDIiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiYm9zaXNwb3J0Ml90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi5Y2a5pav6auY55CDMiBIRCIsICJmdW4iOiAic210IiwgInBpZCI6ICJib3NpZ29sZjJfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIuWNmuaWr+e9keeQgyBIRCIsICJmdW4iOiAic210IiwgInBpZCI6ICJib3NpdGVubmlzX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLkuJzmo67mtIvniYcgRVRUViBXZXN0ZXJuIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImV0dHZ3ZXN0ZXJuIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIum+meWNjua0i+eJhyBMdW5naHVhIFdlc3Rlcm4iLCAiZnVuIjogInNtdCIsICJwaWQiOiAibHVuZ2h1YXdlc3Rlcm5fdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIuWNmuaWr+aXoOmZkCIsICJmdW4iOiAic210IiwgInBpZCI6ICJib3NpdW5saW1pdGVkX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICJNVFYgTGl2ZSIsICJmdW4iOiAic210IiwgInBpZCI6ICJtdHZoZF90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi6b6Z6K+m5pe25LujIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImx1bmd4aWFuZ3RpbWVfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIkVZRVRWIOaXhea4uCIsICJmdW4iOiAic210IiwgInBpZCI6ICJleWV0dnRyYXZlbF90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi6Z2W5aSp5Y2h6YCa5Y+wIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImppbmd0aWFuY2FydG9vbl90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAiRVlFVFYg5oiP5YmnIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImV5ZXR2eGlqdV90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi5Y2r6KeG5Lit5paH5Y+wIFN0YXIgTW92aWVzIENoaW5lc2UiLCAiZnVuIjogInNtdCIsICJwaWQiOiAid2Vpc2hpY2hpbmVzZV90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi5Lic5qOu5bm85bm8IFlveW8gVFYiLCAiZnVuIjogInNtdCIsICJwaWQiOiAieW95b190d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi5Y2r6KeG55S15b2x5Y+wIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIndlaXNoaW1vdmllX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLnvo7kuprnlLXlvbEiLCAiZnVuIjogInNtdCIsICJwaWQiOiAibWVpeWFtb3ZpZV90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi54ix5bCU6L6+5b2x5Ymn5Y+wIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImVsdGF5aW5nanVfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIueIseWwlOi+vue7vOWQiOWPsCIsICJmdW4iOiAic210IiwgInBpZCI6ICJlbHRhem9uZ2hlX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLmmJ/ljavnlLXlvbEiLCAiZnVuIjogInNtdCIsICJwaWQiOiAieGluZ3dlaV9tb3ZpZSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLniLHlsJTovr7lvbHliaciLCAiZnVuIjogInNtdCIsICJwaWQiOiAiZWx0YXlpbmdqdV90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAiQUZDIOS6mua0suaXhea4uOWPsCIsICJmdW4iOiAic210IiwgInBpZCI6ICJhc2lhdHJhdmVsX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLniLHlsJTovr7kvZPogrIy5Y+wIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImVsdGFzcG9ydDJfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIueIseWwlOi+vuS9k+iCsjPlj7AiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiZWx0YXNwb3J0M190d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi55S15b2x6aKR6YGTIiwgIm5hbWUiOiAiSEJPX0hEIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImhib2hkX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLnlLXlvbHpopHpgZMiLCAibmFtZSI6ICJIQk9fSElUUyIsICJmdW4iOiAic210IiwgInBpZCI6ICJoYm9oaXRfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIueUteW9semikemBkyIsICJuYW1lIjogIkhvbGx5d29vZCBNb3ZpZXMiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiaG9sbHl3b29kbW92aWVzX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLnlLXlvbHpopHpgZMiLCAibmFtZSI6ICJDQ1RWLTYiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY2N0djYifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi55S15b2x6aKR6YGTIiwgIm5hbWUiOiAiQ0lORU1BWCIsICJmdW4iOiAic210IiwgInBpZCI6ICJjaW5lbWF4X3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLnlLXlvbHpopHpgZMiLCAibmFtZSI6ICJDaW5lbWF4IiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkNpbmVtYXgifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi55S15b2x6aKR6YGTIiwgIm5hbWUiOiAiQVhOIFRhaXdhbiIsICJmdW4iOiAic210IiwgInBpZCI6ICJheG5fdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIueUteW9semikemBkyIsICJuYW1lIjogIuWkp+eIsTLlj7AiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiZGFhaTJfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIueUteW9semikemBkyIsICJuYW1lIjogIuS4nOajrueUteW9sSBFVFRWIE1vdmllIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImV0dHZtb3ZpZSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLnlLXlvbHpopHpgZMiLCAibmFtZSI6ICLkuJzmo67mtIvniYcgRVRUViBXZXN0ZXJuIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImV0dHZ3ZXN0ZXJuIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIueUteW9semikemBkyIsICJuYW1lIjogIum+meWNjua0i+eJhyBMdW5naHVhIFdlc3Rlcm4iLCAiZnVuIjogInNtdCIsICJwaWQiOiAibHVuZ2h1YXdlc3Rlcm5fdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIueUteW9semikemBkyIsICJuYW1lIjogIkFuaW1heCIsICJmdW4iOiAic210IiwgInBpZCI6ICJBbmltYXgifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi55S15b2x6aKR6YGTIiwgIm5hbWUiOiAi6b6Z6K+m5pe25LujIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImx1bmd4aWFuZ3RpbWVfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIueUteW9semikemBkyIsICJuYW1lIjogIk1vdmllcyBOb3cgSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAibW92aWVzbm93X3JhaiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLnlLXlvbHpopHpgZMiLCAibmFtZSI6ICJTdGFyIE1vdmllcyBIRCIsICJmdW4iOiAic210IiwgInBpZCI6ICJzdGFybW92aWVzX3JhaiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLnlLXlvbHpopHpgZMiLCAibmFtZSI6ICLljavop4bkuK3mloflj7AgU3RhciBNb3ZpZXMgQ2hpbmVzZSIsICJmdW4iOiAic210IiwgInBpZCI6ICJ3ZWlzaGljaGluZXNlX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLnlLXlvbHpopHpgZMiLCAibmFtZSI6ICJIQk8gRmFtaWx5IiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkhib2ZhbWlseSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLnlLXlvbHpopHpgZMiLCAibmFtZSI6ICJIaXRzIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkhpdHMifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi55S15b2x6aKR6YGTIiwgIm5hbWUiOiAiV2FybmVyIFRWIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIldhcm5lclRWIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIueUteW9semikemBkyIsICJuYW1lIjogIuWNq+inhueUteW9seWPsCIsICJmdW4iOiAic210IiwgInBpZCI6ICJ3ZWlzaGltb3ZpZV90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi55S15b2x6aKR6YGTIiwgIm5hbWUiOiAiSEJPIEhEIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkhibyJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLnlLXlvbHpopHpgZMiLCAibmFtZSI6ICLnvo7kuprnlLXlvbEiLCAiZnVuIjogInNtdCIsICJwaWQiOiAibWVpeWFtb3ZpZV90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi55S15b2x6aKR6YGTIiwgIm5hbWUiOiAiSEJPIFNpZ25hdHVyZSIsICJmdW4iOiAic210IiwgInBpZCI6ICJIYm9zaWduYXR1cmUifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi55S15b2x6aKR6YGTIiwgIm5hbWUiOiAiSEJPIEhpdHMiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiSGJvaGl0c2hkIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIueUteW9semikemBkyIsICJuYW1lIjogIuaYn+WNq+eUteW9sSIsICJmdW4iOiAic210IiwgInBpZCI6ICJ4aW5nd2VpX21vdmllIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIueUteW9semikemBkyIsICJuYW1lIjogIlNDTSIsICJmdW4iOiAic210IiwgInBpZCI6ICJXZWlzaGltb3ZpZSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLnlLXlvbHpopHpgZMiLCAibmFtZSI6ICJEcmVhbXdvcmtzIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkRyZWFtd29ya3MifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi55S15b2x6aKR6YGTIiwgIm5hbWUiOiAiVGhyaWxsIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlRocmlsbCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLnlLXlvbHpopHpgZMiLCAibmFtZSI6ICJIaXRzIE1vdmllIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkhpdHNtb3ZpZSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLnlLXlvbHpopHpgZMiLCAibmFtZSI6ICJPbmUiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiT25lIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIueUteW9semikemBkyIsICJuYW1lIjogInR2TiBNb3ZpZSIsICJmdW4iOiAic210IiwgInBpZCI6ICJUdm5tb3ZpZSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLnlLXlvbHpopHpgZMiLCAibmFtZSI6ICJDZWxlc3RpYWwgQ2xhc3NpYyIsICJmdW4iOiAic210IiwgInBpZCI6ICJDZWxlc3RpYWwyIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIueUteW9semikemBkyIsICJuYW1lIjogIkNlbGVzdGlhbCBNb3ZpZXMgSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQ2VsZXN0aWFsaW5kbyJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLnlLXlvbHpopHpgZMiLCAibmFtZSI6ICJBeG4gSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQXhuIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIueUteW9semikemBkyIsICJuYW1lIjogIlBhcmFtb3VudCBOZXR3b3JrIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlBhcmFtb3VudG5ldHdvcmsifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi55S15b2x6aKR6YGTIiwgIm5hbWUiOiAiQXN0cm9sIEtwbHVzIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIktwbHVzIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIueUteW9semikemBkyIsICJuYW1lIjogIlJvY2sgQWN0aW9ucyIsICJmdW4iOiAic210IiwgInBpZCI6ICJSb2NrYWN0aW9uIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIueUteW9semikemBkyIsICJuYW1lIjogIlJvY2sgRW50ZXJ0YWlubWVudCIsICJmdW4iOiAic210IiwgInBpZCI6ICJSb2NrZW50ZXJ0YWluIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIue6quW9lemikemBkyIsICJuYW1lIjogIk5hdGdlb19IRCIsICJmdW4iOiAic210IiwgInBpZCI6ICJuYXRnZW9oZF90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi57qq5b2V6aKR6YGTIiwgIm5hbWUiOiAiTmF0R2VvX1dpbGQgSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAibmF0Z2Vvd2lsZF90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi57qq5b2V6aKR6YGTIiwgIm5hbWUiOiAiQW5pbWFsX1BsYW5ldCIsICJmdW4iOiAic210IiwgInBpZCI6ICJhbmltYWxwbGFuZXRfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIue6quW9lemikemBkyIsICJuYW1lIjogIkRpc2NvdmVyeSBBc2lhIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImRpc2NvdmVyeXR3bl90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi57qq5b2V6aKR6YGTIiwgIm5hbWUiOiAiQ0kiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY2lfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIue6quW9lemikemBkyIsICJuYW1lIjogIkFzaWEgVHJhdmVsIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImFzaWF0cmF2ZWxfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIue6quW9lemikemBkyIsICJuYW1lIjogIkRpc2NvdmVyeSBIRCIsICJmdW4iOiAic210IiwgInBpZCI6ICJkaXNjb3ZlcnloZF90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi57qq5b2V6aKR6YGTIiwgIm5hbWUiOiAi5Lqa5rSy576O6aOfIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImFmY190d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi57qq5b2V6aKR6YGTIiwgIm5hbWUiOiAi576O6aOf5pif55CDIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImZvb2RwbGFuZXRfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIue6quW9lemikemBkyIsICJuYW1lIjogIuS6mua0suaXhea4uCBUTEMgQXNpYSIsICJmdW4iOiAic210IiwgInBpZCI6ICJ0bGNfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIue6quW9lemikemBkyIsICJuYW1lIjogIk5hdEdlbyBIRCIsICJmdW4iOiAic210IiwgInBpZCI6ICJOYXRnZW8ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi57qq5b2V6aKR6YGTIiwgIm5hbWUiOiAiRmFzaGlvbiBUViIsICJmdW4iOiAic210IiwgInBpZCI6ICJmYXNoaW9udHZfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIue6quW9lemikemBkyIsICJuYW1lIjogIkhpc3RvcnkiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiSGlzdG9yeSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLnuqrlvZXpopHpgZMiLCAibmFtZSI6ICJCQkMgRWFydGggSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiYmJjZWFydGhfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIue6quW9lemikemBkyIsICJuYW1lIjogIkJCQyBFYXJ0aCBMaWZlc3R5bGUiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiYmJjbGlmZXN0eWxlX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLnuqrlvZXpopHpgZMiLCAibmFtZSI6ICJNVFYgTGl2ZSIsICJmdW4iOiAic210IiwgInBpZCI6ICJtdHZoZF90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi57qq5b2V6aKR6YGTIiwgIm5hbWUiOiAiTmF0R2VvIFdpbGQgSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiTmF0Z2Vvd2lsZCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLnuqrlvZXpopHpgZMiLCAibmFtZSI6ICJBbmltYWwgUGxhbmV0IChFbmcpIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkFuaW1hbFBsYW5ldCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLnuqrlvZXpopHpgZMiLCAibmFtZSI6ICJUTEMiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiVGxjIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIue6quW9lemikemBkyIsICJuYW1lIjogIkZvb2RuZXR3b3JrIEhkIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkZvb2RuZXR3b3JrIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIue6quW9lemikemBkyIsICJuYW1lIjogIkhHVFYiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiSEdUViJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLnuqrlvZXpopHpgZMiLCAibmFtZSI6ICJBRkMg5Lqa5rSy5peF5ri45Y+wIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImFzaWF0cmF2ZWxfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuaWsOmXu+mikemBkyIsICJuYW1lIjogIlNreW5ld3MiLCAiZnVuIjogInNtdCIsICJwaWQiOiAic2t5bmV3c190d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5paw6Ze76aKR6YGTIiwgIm5hbWUiOiAiQUJDIE5ld3MiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiYWJjbmV3c19nbG8ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5paw6Ze76aKR6YGTIiwgIm5hbWUiOiAi5Lic5qOu6LSi57uP5paw6Ze7IEVUVFYgQnVzaW5lc3MiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiZXR0dmNhaWppbmdfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuaWsOmXu+mikemBkyIsICJuYW1lIjogIkNCUyBIRCIsICJmdW4iOiAic210IiwgInBpZCI6ICJjYnNoZF9nbG8ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5paw6Ze76aKR6YGTIiwgIm5hbWUiOiAiQ0JTTiBIRCIsICJmdW4iOiAic210IiwgInBpZCI6ICJjYnNuX2dsbyJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLmlrDpl7vpopHpgZMiLCAibmFtZSI6ICJGcmFuY2UgMjQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiZnJhbmNlMjRfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuaWsOmXu+mikemBkyIsICJuYW1lIjogIkRXIChEZXV0c2NoKSIsICJmdW4iOiAic210IiwgInBpZCI6ICJkd190d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5paw6Ze76aKR6YGTIiwgIm5hbWUiOiAiTkhLIFdvcmxkIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIm5oa3dvcmxkX2phcGFuIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuaWsOmXu+mikemBkyIsICJuYW1lIjogIkZveCBOZXdzIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImZveG5ld3NfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuaWsOmXu+mikemBkyIsICJuYW1lIjogIkNHVE4iLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQ0dUTiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLmlrDpl7vpopHpgZMiLCAibmFtZSI6ICJDTk4gSW50ZXJuYXRpb25hbCIsICJmdW4iOiAic210IiwgInBpZCI6ICJDbm4ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5paw6Ze76aKR6YGTIiwgIm5hbWUiOiAiQ05OIGJhY2t1cCIsICJmdW4iOiAic210IiwgInBpZCI6ICJjbm5fdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuaWsOmXu+mikemBkyIsICJuYW1lIjogIkNOQkMiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY25iY190d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5paw6Ze76aKR6YGTIiwgIm5hbWUiOiAiQ05BIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImNuYSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLmlrDpl7vpopHpgZMiLCAibmFtZSI6ICJCQkMgV29ybGQgTmV3cyIsICJmdW4iOiAic210IiwgInBpZCI6ICJiYmNuZXdzX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLmlrDpl7vpopHpgZMiLCAibmFtZSI6ICJCQkMgV29ybGQgTmV3cyIsICJmdW4iOiAic210IiwgInBpZCI6ICJCYmNuZXdzIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuaWsOmXu+mikemBkyIsICJuYW1lIjogIkJsb29tYmVyZyBOZXdzIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImJsb29tYmVyZ190d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5paw6Ze76aKR6YGTIiwgIm5hbWUiOiAiQWwtSmF6ZWVyYSIsICJmdW4iOiAic210IiwgInBpZCI6ICJhbGphemVlcmFfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWEv+erpemikemBkyIsICJuYW1lIjogIkJhYnkgVFYgRW5nIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkJhYnl0diJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlhL/nq6XpopHpgZMiLCAibmFtZSI6ICJDQmVlYmllcyIsICJmdW4iOiAic210IiwgInBpZCI6ICJDYmVlYmllcyJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlhL/nq6XpopHpgZMiLCAibmFtZSI6ICJLaWRzIFRWIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIktpZHNUViJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlhL/nq6XpopHpgZMiLCAibmFtZSI6ICJNb21vIFRWIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIm1vbW8xX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlhL/nq6XpopHpgZMiLCAibmFtZSI6ICJBbmltYXgiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQW5pbWF4In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWEv+erpemikemBkyIsICJuYW1lIjogIkJhYnkgVFYiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiYmFieXR2X3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlhL/nq6XpopHpgZMiLCAibmFtZSI6ICJNaWFvTWkiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiTWlhb01pIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWEv+erpemikemBkyIsICJuYW1lIjogIumdluWkqeWNoemAmuWPsCIsICJmdW4iOiAic210IiwgInBpZCI6ICJqaW5ndGlhbmNhcnRvb25fdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWEv+erpemikemBkyIsICJuYW1lIjogIuS4nOajruW5vOW5vCBZb3lvIFRWIiwgImZ1biI6ICJzbXQiLCAicGlkIjogInlveW9fdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWEv+erpemikemBkyIsICJuYW1lIjogIkNhcnRvb24gTmV0d29yayIsICJmdW4iOiAic210IiwgInBpZCI6ICJDbiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlhL/nq6XpopHpgZMiLCAibmFtZSI6ICJOaWNrZWxvZGVvbiIsICJmdW4iOiAic210IiwgInBpZCI6ICJOaWNrZWxvZGVvbiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlhL/nq6XpopHpgZMiLCAibmFtZSI6ICJOaWNrIEpyIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIk5pY2tqciJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLmlrDliqDlnaEiLCAibmFtZSI6ICJDaGFubmVsIDUiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQ2hhbm5lbDVIRCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLmlrDliqDlnaEiLCAibmFtZSI6ICJDaGFubmVsIDgiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQ2hhbm5lbDhIRCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLmlrDliqDlnaEiLCAibmFtZSI6ICJTdXJpYSIsICJmdW4iOiAic210IiwgInBpZCI6ICJTdXJpYSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLmlrDliqDlnaEiLCAibmFtZSI6ICJDaGFubmVsIFUiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQ2hhbm5lbFUifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5paw5Yqg5Z2hIiwgIm5hbWUiOiAiVmFzYW50aGFtIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlZhc2FudGhhbSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLmlrDliqDlnaEiLCAibmFtZSI6ICJDTkEiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY25hIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuaWsOWKoOWdoSIsICJuYW1lIjogIkNOQSBiYWNrdXAiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY25hX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLmlrDliqDlnaEiLCAibmFtZSI6ICJNZVdhdGNoIENoIDUiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiTWV3YXRjaF9jaDUifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5paw5Yqg5Z2hIiwgIm5hbWUiOiAiTWVXYXRjaCBDaCA4IiwgImZ1biI6ICJzbXQiLCAicGlkIjogIk1ld2F0Y2hfY2g4In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuaWsOWKoOWdoSIsICJuYW1lIjogIk1lV2F0Y2ggQ2ggVSIsICJmdW4iOiAic210IiwgInBpZCI6ICJNZXdhdGNoX2NoVSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLmlrDliqDlnaEiLCAibmFtZSI6ICJNZVdhdGNoIFN1cmlhIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIk1ld2F0Y2hfU3VyaWEifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5paw5Yqg5Z2hIiwgIm5hbWUiOiAiTWVXYXRjaCBWYXNhbnRoYW0iLCAiZnVuIjogInNtdCIsICJwaWQiOiAiTWV3YXRjaF9WYXNhbnRoYW0ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5paw5Yqg5Z2hIiwgIm5hbWUiOiAiTWVXYXRjaCBDTkEiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiTWV3YXRjaF9jbmEifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiVFYxIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlRWMSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJUVjEgYmFja3VwIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlRWMV9iYWNrdXAifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiVFYyIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlRWMiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJUVjMiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiVFYzIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIlRWMyBTRCIsICJmdW4iOiAic210IiwgInBpZCI6ICJUVjNfbWVnYSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJOVFY3IiwgImZ1biI6ICJzbXQiLCAicGlkIjogIk5UVjcifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiVFY4IiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlRWOCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJUVjkiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiVFY5In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIlJpYSIsICJmdW4iOiAic210IiwgInBpZCI6ICJSaWEtMCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJSaWEtMyIsICJmdW4iOiAic210IiwgInBpZCI6ICJSaWFfYmFja3VwIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIkFsLUhpanJhaCIsICJmdW4iOiAic210IiwgInBpZCI6ICJBbGhpanJhaCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJBbC1IaWpyYWggYmFja3VwIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkFsaGlqcmFoX2JhY2t1cCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJBd2FuaSIsICJmdW4iOiAic210IiwgInBpZCI6ICJBd2FuaSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJCZXJuYW1hIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkJlcm5hbWEifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiUHJpbWEiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiUHJpbWEtMCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJQcmltYSBiYWNrdXAiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQUFwcmltYTEifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiUHJpbWEgYmFja3VwIDIiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQUFwcmltYSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJDZXJpYSIsICJmdW4iOiAic210IiwgInBpZCI6ICJDZXJpYSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJBc3RybyBNVFYiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQXN0cm9NVFYifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiTWVjY2EgTGl2ZSBIRCIsICJmdW4iOiAic210IiwgInBpZCI6ICJxdXJhbl9taWRvIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIk1hZGluYWggSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAic3VubmFoX21pZG8ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiT2FzaXMiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiT2FzaXMifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiSEJPIEhEIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkhibyJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJIQk8gU2lnbmF0dXJlIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkhib3NpZ25hdHVyZSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJIQk8gSGl0cyIsICJmdW4iOiAic210IiwgInBpZCI6ICJIYm9oaXRzaGQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiTmF0R2VvIFdpbGQgSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiTmF0Z2Vvd2lsZCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJDYXJ0b29uIE5ldHdvcmsiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQ24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiTmlja2Vsb2Rlb24iLCAiZnVuIjogInNtdCIsICJwaWQiOiAiTmlja2Vsb2Rlb24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiTmljayBKciIsICJmdW4iOiAic210IiwgInBpZCI6ICJOaWNranIifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiRHJlYW13b3JrcyIsICJmdW4iOiAic210IiwgInBpZCI6ICJEcmVhbXdvcmtzIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIlNpYXIiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiU2lhciJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJDaXRyYSIsICJmdW4iOiAic210IiwgInBpZCI6ICJBQWNpdHJhIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIkNpdHJhIGJhY2t1cCIsICJmdW4iOiAic210IiwgInBpZCI6ICJBQWNpdHJhMSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJTZW5zYXNpIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlNlbnNhc2kifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiQXVyYSIsICJmdW4iOiAic210IiwgInBpZCI6ICJBdXJhIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIlJhbmlhIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlJhbmlhIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIktCUyBXb3JsZCIsICJmdW4iOiAic210IiwgInBpZCI6ICJLQlMifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiQm9vIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkJvbyJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJBd2Vzb21lIFRWIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkRzYW5nYXQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiQXN0cm8gU29ueXBpeCIsICJmdW4iOiAic210IiwgInBpZCI6ICJBc29ueXBpeCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJTb255IEhEIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlNldE9uZSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJUdk4iLCAiZnVuIjogInNtdCIsICJwaWQiOiAiVFZOIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIkFFQyIsICJmdW4iOiAic210IiwgInBpZCI6ICJBRUMifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAi5Y2O5Li95Y+wIEhEIO+8iFdhaCBMYWkgVG9p77yJIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIldsdCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICLmrKLllpzlj7AgSEQg77yISHVhIEhlZSBUYWnvvIkiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiSHVhaGVlIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIkFzdHJvIFFKIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlF1YW5qaWEifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiVFZCIEphZGUiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiVHZiamFkZSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJUVkIgQXNpYSIsICJmdW4iOiAic210IiwgInBpZCI6ICJUdmJhc2lhIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIlRWQiBFbnRlcnRhaW5tZW50IiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlR2YmVudGVydGFpbm1lbnQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiVFZCIENsYXNzaWMiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiVHZiY2xhc3NpYyJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJBT0QiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQW9kaGQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiT25lIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIk9uZSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJUVkIg5pif5rKz5Y+wIFhpbmcgSGUiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiWGluaGUifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAi54ix5aWH6Im6IGlRaXlpIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlFpeWkifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiQW5pbWFsIFBsYW5ldCAoRW5nKSIsICJmdW4iOiAic210IiwgInBpZCI6ICJBbmltYWxQbGFuZXQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAidHZOIE1vdmllIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlR2bm1vdmllIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIkNOTiBiYWNrdXAiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY25uX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJDZWxlc3RpYWwgQ2xhc3NpYyIsICJmdW4iOiAic210IiwgInBpZCI6ICJDZWxlc3RpYWwyIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIkNOQkMiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY25iY190d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiVExDIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlRsYyJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJDTkEiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY25hIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIkJCQyBXb3JsZCBOZXdzIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImJiY25ld3NfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIkZvb2RuZXR3b3JrIEhkIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkZvb2RuZXR3b3JrIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIkhHVFYiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiSEdUViJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJHb3Nob3AiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiR29zaG9wIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIkNlbGVzdGlhbCBNb3ZpZXMgSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQ2VsZXN0aWFsIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIkF4biBIRCIsICJmdW4iOiAic210IiwgInBpZCI6ICJBeG4ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiUGFyYW1vdW50IE5ldHdvcmsiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiUGFyYW1vdW50bmV0d29yayJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJBc3Ryb2wgS3BsdXMiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiS3BsdXMifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiQUZDIOS6mua0suaXhea4uOWPsCIsICJmdW4iOiAic210IiwgInBpZCI6ICJhc2lhdHJhdmVsX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJSb2NrIEFjdGlvbnMiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiUm9ja2FjdGlvbiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJCbG9vbWJlcmcgTmV3cyIsICJmdW4iOiAic210IiwgInBpZCI6ICJibG9vbWJlcmdfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIkFsLUphemVlcmEiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiYWxqYXplZXJhX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJSb2NrIEVudGVydGFpbm1lbnQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiUm9ja2VudGVydGFpbiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJSVE0gU3BvcnRzIEhEIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlJ0bXNwb3J0In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIkFyZW5hIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkFyZW5hIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIkFyZW5hIDIiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQXJlbmEyIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIkJvbGFBcmVuYSAxIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkJvbGFhcmVuYTEifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiQm9sYUFyZW5hIDIiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQm9sYWFyZW5hMiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJBc3RybyBMT0wiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQXN0cm9fbG9sIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIkFzdHJvIFJ1c2kiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiUnVzaSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJXSU9OIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIldpb24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiUlRNIEFzZWFuIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlJ0bWFzZWFuIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6puWwvOilv+S6miIsICJuYW1lIjogIlRWUkkgTmF0aW9uYWwiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiVFZSSSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqblsLzopb/kupoiLCAibmFtZSI6ICJSQ1RJIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlJjdGkifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqm5bC86KW/5LqaIiwgIm5hbWUiOiAiS29tcGFzcyBUViIsICJmdW4iOiAic210IiwgInBpZCI6ICJLb21wYXNzIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6puWwvOilv+S6miIsICJuYW1lIjogIkJlcml0YSBTYXR1IiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkJlcml0YVNhdHVfZWtvIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6puWwvOilv+S6miIsICJuYW1lIjogIkluZG9zaWFyIEhEIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkluZG9zaWFyIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6puWwvOilv+S6miIsICJuYW1lIjogIkFuVFYiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQW50diJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqblsLzopb/kupoiLCAibmFtZSI6ICJNTkMgVFYiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiTW5jdHYifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqm5bC86KW/5LqaIiwgIm5hbWUiOiAiVHJhbnMgNyIsICJmdW4iOiAic210IiwgInBpZCI6ICJUcmFuczdfZWtvIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6puWwvOilv+S6miIsICJuYW1lIjogIlRyYW5zdHYiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiVHJhbnN0diJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqblsLzopb/kupoiLCAibmFtZSI6ICJKVFYiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiSlRWX2VrbyJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqblsLzopb/kupoiLCAibmFtZSI6ICJNZXRybyBUViIsICJmdW4iOiAic210IiwgInBpZCI6ICJtZXRyb3R2X2VrbyJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqblsLzopb/kupoiLCAibmFtZSI6ICJDaW5lbWF4IiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkNpbmVtYXgifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqm5bC86KW/5LqaIiwgIm5hbWUiOiAiU0NUViIsICJmdW4iOiAic210IiwgInBpZCI6ICJTQ1RWIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6puWwvOilv+S6miIsICJuYW1lIjogIlR2b25lIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlR2b25lIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6puWwvOilv+S6miIsICJuYW1lIjogIlRWTVUiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiVFZNVV9la28ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqm5bC86KW/5LqaIiwgIm5hbWUiOiAiR1RWIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkd0diJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqblsLzopb/kupoiLCAibmFtZSI6ICJSVFYiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiUnR2In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6puWwvOilv+S6miIsICJuYW1lIjogIkphayBUViIsICJmdW4iOiAic210IiwgInBpZCI6ICJKYWtUViJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqblsLzopb/kupoiLCAibmFtZSI6ICJpTmV3cyBUViIsICJmdW4iOiAic210IiwgInBpZCI6ICJJbmV3c3R2In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6puWwvOilv+S6miIsICJuYW1lIjogIkRhYWkgVFYiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiRGFhaVRWIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6puWwvOilv+S6miIsICJuYW1lIjogIk5ldCBUViIsICJmdW4iOiAic210IiwgInBpZCI6ICJOZXRUViJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqblsLzopb/kupoiLCAibmFtZSI6ICJBbmltYXgiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQW5pbWF4In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6puWwvOilv+S6miIsICJuYW1lIjogIkVXVE4iLCAiZnVuIjogInNtdCIsICJwaWQiOiAiRXd0biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqblsLzopb/kupoiLCAibmFtZSI6ICJBbFF1cmFuIEFsS2FyZWVtIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkFsUXVyYW4ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqm5bC86KW/5LqaIiwgIm5hbWUiOiAiVGF3YWYgVFYiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiVGF3YWZUViJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqblsLzopb/kupoiLCAibmFtZSI6ICJWaXNpb24gUHJpbWUiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiVmlzaW9uUHJpbWUifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqm5bC86KW/5LqaIiwgIm5hbWUiOiAiTXVzbGltIFRWIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIk11c2xpbVRWIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6puWwvOilv+S6miIsICJuYW1lIjogIk11c2ljIFRWIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIk11c2ljVFYifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqm5bC86KW/5LqaIiwgIm5hbWUiOiAiTGlmZXN0eWxlJkZhc2hpb24iLCAiZnVuIjogInNtdCIsICJwaWQiOiAiTGlmZXN0eWxlIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6puWwvOilv+S6miIsICJuYW1lIjogIkVudGVydGFpbiIsICJmdW4iOiAic210IiwgInBpZCI6ICJFbnRlcnRhaW4ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqm5bC86KW/5LqaIiwgIm5hbWUiOiAiSGl0cyIsICJmdW4iOiAic210IiwgInBpZCI6ICJIaXRzIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6puWwvOilv+S6miIsICJuYW1lIjogIldhcm5lciBUViIsICJmdW4iOiAic210IiwgInBpZCI6ICJXYXJuZXJUViJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqblsLzopb/kupoiLCAibmFtZSI6ICJTQ00iLCAiZnVuIjogInNtdCIsICJwaWQiOiAiV2Vpc2hpbW92aWUifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqm5bC86KW/5LqaIiwgIm5hbWUiOiAiVGhyaWxsIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlRocmlsbCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqblsLzopb/kupoiLCAibmFtZSI6ICJGaWdodCBTcG9ydHMiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiRnMifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqm5bC86KW/5LqaIiwgIm5hbWUiOiAiSGl0cyBNb3ZpZSIsICJmdW4iOiAic210IiwgInBpZCI6ICJIaXRzbW92aWUifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqm5bC86KW/5LqaIiwgIm5hbWUiOiAiT25lIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIk9uZSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqblsLzopb/kupoiLCAibmFtZSI6ICJ0dk4gTW92aWUiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiVHZubW92aWUifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqm5bC86KW/5LqaIiwgIm5hbWUiOiAiQ2VsZXN0aWFsIE1vdmllcyBIRCIsICJmdW4iOiAic210IiwgInBpZCI6ICJDZWxlc3RpYWxpbmRvIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6puWwvOilv+S6miIsICJuYW1lIjogIlJvY2sgQWN0aW9ucyIsICJmdW4iOiAic210IiwgInBpZCI6ICJSb2NrYWN0aW9uIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6puWwvOilv+S6miIsICJuYW1lIjogIlJvY2sgRW50ZXJ0YWlubWVudCIsICJmdW4iOiAic210IiwgInBpZCI6ICJSb2NrZW50ZXJ0YWluIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6piIsICJuYW1lIjogIlN1biBUViBIRCIsICJmdW4iOiAic210IiwgInBpZCI6ICJTdW50diJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqYiLCAibmFtZSI6ICJTdGFyIFZpamF5IiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlN0YXJ2aWpheSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqYiLCAibmFtZSI6ICJDb2xvcnMgVGFtaWwiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQ29sb3JzdGFtIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6piIsICJuYW1lIjogIlN1biBNdXNpYyIsICJmdW4iOiAic210IiwgInBpZCI6ICJTdW5tdXNpYyJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqYiLCAibmFtZSI6ICJBc3RybyBTdW5saWZlIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlN1bmxpZmUifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqmIiwgIm5hbWUiOiAiQXN0cm8gVmFhbmF2aWwiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiVmFhbmF2aWwifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqmIiwgIm5hbWUiOiAiWmVlIFRhbWlsIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlplZXRhbWlsIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6piIsICJuYW1lIjogIlplZSBCdXNpbmVzcyIsICJmdW4iOiAic210IiwgInBpZCI6ICJaZWVidXNpbmVzcyJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqYiLCAibmFtZSI6ICJOZXdzIDE4IFRhbWlsIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIm5ld3MxOHRhbWlsX3JhaiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqYiLCAibmFtZSI6ICJBZGl0aHlhIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkFkaXRoeWEifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqmIiwgIm5hbWUiOiAiTWFra2FsIFRWIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIk1ha2thbHR2In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6piIsICJuYW1lIjogIlplZSBBY3Rpb24iLCAiZnVuIjogInNtdCIsICJwaWQiOiAiWmVlYWN0aW9uIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6piIsICJuYW1lIjogIkFzdHJvIEtUViIsICJmdW4iOiAic210IiwgInBpZCI6ICJBc3Ryb2t0diJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqYiLCAibmFtZSI6ICJaZWUgVFYgSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiWmVldHZoZCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqYiLCAibmFtZSI6ICJaZWUgQ2luZW1hIEhEIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlplZWNpbmVtYWhkIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6piIsICJuYW1lIjogIkNvbG9yIEhEIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkNvbG9yaGQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqmIiwgIm5hbWUiOiAiU3RhcnBsdXMgSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiU3RhcnBsdXNoZCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqYiLCAibmFtZSI6ICJQaWN0dXJlIEhEIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIk5waWN0dXJlIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6piIsICJuYW1lIjogIlplZSBOZXdzIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlplZW5ld3MifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqmIiwgIm5hbWUiOiAiQXNpYW5ldCIsICJmdW4iOiAic210IiwgInBpZCI6ICJhc2lhbmV0X3JhaiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqYiLCAibmFtZSI6ICJBc2lhbmV0IE5ld3MiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiYXNpYW5ldG5ld3NfcmFqIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6piIsICJuYW1lIjogIkRpc2NvdmVyeSBXb3JsZCBUYW1pbCIsICJmdW4iOiAic210IiwgInBpZCI6ICJkaXNjb3Zlcnl3b3JsZHRhbV9yYWoifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqmIiwgIm5hbWUiOiAiSGlzdG9yeSBUYW1pbCIsICJmdW4iOiAic210IiwgInBpZCI6ICJoaXN0b3J5dGFtX3JhaiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqYiLCAibmFtZSI6ICJOYXRHZW8gVGFtaWwiLCAiZnVuIjogInNtdCIsICJwaWQiOiAibmF0Z2VvdGFtaWxfcmFqIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6piIsICJuYW1lIjogIk5hdGdlbyBXaWxkIFRhbWlsIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIm5hdGdlb3dpbGR0YW1pbF9yYWoifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqmIiwgIm5hbWUiOiAiQXN0cm8gU29ueXBpeCIsICJmdW4iOiAic210IiwgInBpZCI6ICJBc29ueXBpeCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqYiLCAibmFtZSI6ICJEaXNjb3ZlcnkgS2lkcyBUYW1pbCIsICJmdW4iOiAic210IiwgInBpZCI6ICJkaXNjb3ZlcnlraWR0YW1pbF9yYWoifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqmIiwgIm5hbWUiOiAiRGlzY292ZXJ5IFRhbWlsIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImRpc2NvdmVyeXRhbWlsX3JhaiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqYiLCAibmFtZSI6ICJTb255IFlheSBUYW1pbCIsICJmdW4iOiAic210IiwgInBpZCI6ICJzb255eWF5dGFtX3JhaiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqYiLCAibmFtZSI6ICJTdW4gVFYgSW5kaWEiLCAiZnVuIjogInNtdCIsICJwaWQiOiAic3VudHZfcmFqIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6piIsICJuYW1lIjogIlN0YXJtYWEgSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAic3Rhcm1hYV9yYWoifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqmIiwgIm5hbWUiOiAiU3Rhcm1hYSBNb3ZpZXMgSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAic3Rhcm1hYW1vdmllc19yYWoifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqmIiwgIm5hbWUiOiAiQm9sbHlvbmUiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQm9sbHlvbmUifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqmIiwgIm5hbWUiOiAiQXN0cm8gU3VubXVzaWMiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiU3VubXVzaWMifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqmIiwgIm5hbWUiOiAiVmlqYXkgU3VwZXIiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidmlqYXlzdXBlcl9yYWoifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqmIiwgIm5hbWUiOiAiVmVsbGl0aGlyYWkiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiVmVsbGl0aGlyYWkifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5rOw5Zu9IiwgIm5hbWUiOiAiQ2hhbm5lbCAzIFRoYWlsYW5kIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImNoM19wYXQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5rOw5Zu9IiwgIm5hbWUiOiAiQ2hhbm5lbCA1IFRoYWlsYW5kIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImNoNV9wYXQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5rOw5Zu9IiwgIm5hbWUiOiAiQ2hhbm5lbCA3IFRoYWlsYW5kIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImNoN19wYXQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5rOw5Zu9IiwgIm5hbWUiOiAiTUNPVCBIRCBUaGFpbGFuZC0xIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIm1jb3RfcGF0In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuazsOWbvSIsICJuYW1lIjogIlBQVFYgVGhhaWxhbmQxIiwgImZ1biI6ICJzbXQiLCAicGlkIjogInBwdHZfcGF0In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuazsOWbvSIsICJuYW1lIjogIlRoYWkgVGhhaSIsICJmdW4iOiAic210IiwgInBpZCI6ICJ0aGFpdGhhaV9wYXQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5rOw5Zu9IiwgIm5hbWUiOiAiQW1hcmluIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImFtYXJpbl9wYXQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5rOw5Zu9IiwgIm5hbWUiOiAiQ2ggOCIsICJmdW4iOiAic210IiwgInBpZCI6ICJjaDhfcGF0In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuazsOWbvSIsICJuYW1lIjogIkdtbU9uZSIsICJmdW4iOiAic210IiwgInBpZCI6ICJnbW1vbmVfcGF0In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuazsOWbvSIsICJuYW1lIjogIk1vbm8iLCAiZnVuIjogInNtdCIsICJwaWQiOiAibW9ub19wYXQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5rOw5Zu9IiwgIm5hbWUiOiAiVGhhaXJhdGgiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidGhhaXJhdGhfcGF0In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuazsOWbvSIsICJuYW1lIjogInRwYnMiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidHBic19wYXQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5rOw5Zu9IiwgIm5hbWUiOiAiV29ya3BvaW50IiwgImZ1biI6ICJzbXQiLCAicGlkIjogIndvcmtwb2ludF9wYXQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5rOw5Zu9IiwgIm5hbWUiOiAiR21tIENoYW5uZWwiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiZ21tY2hhbm5lbF9wYXQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5rOw5Zu9IiwgIm5hbWUiOiAiTmF0aW9uIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIm5hdGlvbl9wYXQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5rOw5Zu9IiwgIm5hbWUiOiAiVG5uMjQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidG5uMjRfcGF0In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuazsOWbvSIsICJuYW1lIjogIk5idCIsICJmdW4iOiAic210IiwgInBpZCI6ICJuYnRfcGF0In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuazsOWbvSIsICJuYW1lIjogIk5ldyIsICJmdW4iOiAic210IiwgInBpZCI6ICJuZXdfcGF0In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuazsOWbvSIsICJuYW1lIjogIlRQVFYiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidHB0dl9wYXQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Iux5Zu9IiwgIm5hbWUiOiAiQkJDIDEiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiYmJjMV9hbnRpayJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLoi7Hlm70iLCAibmFtZSI6ICJCQkMgMiIsICJmdW4iOiAic210IiwgInBpZCI6ICJiYmMyX2FudGlrIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuiLseWbvSIsICJuYW1lIjogIkNCQkMiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY2JiY19hbnRpayJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLoi7Hlm70iLCAibmFtZSI6ICJNb3JlNCIsICJmdW4iOiAic210IiwgInBpZCI6ICJtb3JlNF9hbnRpayJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLoi7Hlm70iLCAibmFtZSI6ICJGcmVlc3BvcnRzIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImZyZWVzcG9ydHNfYW50aWsifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Iux5Zu9IiwgIm5hbWUiOiAiU2t5bmV3cyIsICJmdW4iOiAic210IiwgInBpZCI6ICJza3luZXdzX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLoi7Hlm70iLCAibmFtZSI6ICJQaWNrIFRWIiwgImZ1biI6ICJzbXQiLCAicGlkIjogInBpY2t0dl9hbnRpayJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLoi7Hlm70iLCAibmFtZSI6ICJpdHYgMSIsICJmdW4iOiAic210IiwgInBpZCI6ICJpdHYxX2FudGlrIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuiLseWbvSIsICJuYW1lIjogIml0diAyIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIml0djJfYW50aWsifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Iux5Zu9IiwgIm5hbWUiOiAiRXVyb25ld3MiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiZXVyb25ld3NfYW50aWsifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Iux5Zu9IiwgIm5hbWUiOiAiQ2hhbm5lbCA0IiwgImZ1biI6ICJzbXQiLCAicGlkIjogImNoYW5uZWw0X2FudGlrIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuiLseWbvSIsICJuYW1lIjogIk5hdEdlbyBIRCIsICJmdW4iOiAic210IiwgInBpZCI6ICJOYXRnZW8ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Iux5Zu9IiwgIm5hbWUiOiAiQ0JlZWJpZXMiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQ2JlZWJpZXMifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Iux5Zu9IiwgIm5hbWUiOiAiSGlzdG9yeSIsICJmdW4iOiAic210IiwgInBpZCI6ICJIaXN0b3J5In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuiLseWbvSIsICJuYW1lIjogIktpZHMgVFYiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiS2lkc1RWIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuiLseWbvSIsICJuYW1lIjogIkZyYW5jZSAyNCIsICJmdW4iOiAic210IiwgInBpZCI6ICJmcmFuY2UyNF90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Iux5Zu9IiwgIm5hbWUiOiAiRFcgKERldXRzY2gpIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImR3X3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLoi7Hlm70iLCAibmFtZSI6ICJCQkMgRWFydGggSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiYmJjZWFydGhfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuiLseWbvSIsICJuYW1lIjogIkJCQyBFYXJ0aCBMaWZlc3R5bGUiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiYmJjbGlmZXN0eWxlX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLoi7Hlm70iLCAibmFtZSI6ICJNVFYgTGl2ZSIsICJmdW4iOiAic210IiwgInBpZCI6ICJtdHZoZF90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Iux5Zu9IiwgIm5hbWUiOiAiU3RhciBNb3ZpZXMgSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAic3Rhcm1vdmllc19yYWoifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Iux5Zu9IiwgIm5hbWUiOiAiTkhLIFdvcmxkIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIm5oa3dvcmxkX2phcGFuIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuiLseWbvSIsICJuYW1lIjogIldhcm5lciBUViIsICJmdW4iOiAic210IiwgInBpZCI6ICJXYXJuZXJUViJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLoi7Hlm70iLCAibmFtZSI6ICJIQk8gSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiSGJvIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuiLseWbvSIsICJuYW1lIjogIk5hdEdlbyBXaWxkIEhEIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIk5hdGdlb3dpbGQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Iux5Zu9IiwgIm5hbWUiOiAiTmlja2Vsb2Rlb24iLCAiZnVuIjogInNtdCIsICJwaWQiOiAiTmlja2Vsb2Rlb24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Iux5Zu9IiwgIm5hbWUiOiAiTmljayBKciIsICJmdW4iOiAic210IiwgInBpZCI6ICJOaWNranIifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Iux5Zu9IiwgIm5hbWUiOiAiVGhyaWxsIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlRocmlsbCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLoi7Hlm70iLCAibmFtZSI6ICJDR1ROIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkNHVE4ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Iux5Zu9IiwgIm5hbWUiOiAiSGl0cyBNb3ZpZSIsICJmdW4iOiAic210IiwgInBpZCI6ICJIaXRzbW92aWUifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Iux5Zu9IiwgIm5hbWUiOiAiQW5pbWFsIFBsYW5ldCAoRW5nKSIsICJmdW4iOiAic210IiwgInBpZCI6ICJBbmltYWxQbGFuZXQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Iux5Zu9IiwgIm5hbWUiOiAiQ05CQyIsICJmdW4iOiAic210IiwgInBpZCI6ICJjbmJjX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLoi7Hlm70iLCAibmFtZSI6ICJUTEMiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiVGxjIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuiLseWbvSIsICJuYW1lIjogIkJCQyBXb3JsZCBOZXdzIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImJiY3dvcmxkbmV3c19hbnRpayJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLoi7Hlm70iLCAibmFtZSI6ICJIR1RWIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkhHVFYifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Iux5Zu9IiwgIm5hbWUiOiAiQXhuIEhEIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkF4biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLoi7Hlm70iLCAibmFtZSI6ICJTa3lzcG9ydHMgRjEiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidGlhbmtvbmdmMSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLoi7Hlm70iLCAibmFtZSI6ICJTa3lzcG9ydHMgQ3JpY2tldCIsICJmdW4iOiAic210IiwgInBpZCI6ICJ0aWFua29uZ2NyaWNrZXQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Iux5Zu9IiwgIm5hbWUiOiAiQmxvb21iZXJnIE5ld3MiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiYmxvb21iZXJnX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLoi7Hlm70iLCAibmFtZSI6ICJTa3lzcG9ydHMgRVBMIiwgImZ1biI6ICJzbXQiLCAicGlkIjogInRpYW5rb25nZXBsIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuiLseWbvSIsICJuYW1lIjogIlNreXNwb3J0cyBNYWluIEV2ZW50IiwgImZ1biI6ICJzbXQiLCAicGlkIjogInRpYW5rb25nbWFpbiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLoi7Hlm70iLCAibmFtZSI6ICJTa3lzcG9ydHMgTmV3cyIsICJmdW4iOiAic210IiwgInBpZCI6ICJ0aWFua29uZ25ld3MifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Iux5Zu9IiwgIm5hbWUiOiAiQWwtSmF6ZWVyYSIsICJmdW4iOiAic210IiwgInBpZCI6ICJhbGphemVlcmFfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIui2iuWNlyIsICJuYW1lIjogIkFOVFYiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidmlldF9hbnR2In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIui2iuWNlyIsICJuYW1lIjogIlZUViAxIiwgImZ1biI6ICJzbXQiLCAicGlkIjogInZpZXRfdnR2MSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLotorljZciLCAibmFtZSI6ICJWVFYgNyIsICJmdW4iOiAic210IiwgInBpZCI6ICJ2aWV0X3Z0djcifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6LaK5Y2XIiwgIm5hbWUiOiAiSFRWIDciLCAiZnVuIjogInNtdCIsICJwaWQiOiAidmlldF9odHY3In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIui2iuWNlyIsICJuYW1lIjogIkhUViA5IiwgImZ1biI6ICJzbXQiLCAicGlkIjogInZpZXRfaHR2OSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLotorljZciLCAibmFtZSI6ICJCUFRWIDIiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidmlldF9icHR2MiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLotorljZciLCAibmFtZSI6ICJCUlQgSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidmlldF9icnQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6LaK5Y2XIiwgIm5hbWUiOiAiQ2EgTWF1IFRWIiwgImZ1biI6ICJzbXQiLCAicGlkIjogInZpZXRfY2FtYXV0diJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLotorljZciLCAibmFtZSI6ICJEYW5hbmcgVFYxIEhEIiwgImZ1biI6ICJzbXQiLCAicGlkIjogInZpZXRfZGFuYW5ndHYxIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIui2iuWNlyIsICJuYW1lIjogIkRhbmFuZyBUVjIgSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidmlldF9kYW5hbmd0djIifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6LaK5Y2XIiwgIm5hbWUiOiAiSEJUViBIRCIsICJmdW4iOiAic210IiwgInBpZCI6ICJ2aWV0X2hidHYifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6LaK5Y2XIiwgIm5hbWUiOiAiUFRUSCAxIiwgImZ1biI6ICJzbXQiLCAicGlkIjogInZpZXRfcHR0aDEifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Z+p5Zu9IiwgIm5hbWUiOiAiQXJpcmFuZyBIRCIsICJmdW4iOiAic210IiwgInBpZCI6ICJhcmlyYW5nX2tvcmVhIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumfqeWbvSIsICJuYW1lIjogIllvbmhhcCBOZXdzIiwgImZ1biI6ICJzbXQiLCAicGlkIjogInlvbmhhcG5ld3Nfa29yZWEifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Z+p5Zu9IiwgIm5hbWUiOiAiQ0JTIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImNic19rb3JlYSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpn6nlm70iLCAibmFtZSI6ICJFQlMgMSIsICJmdW4iOiAic210IiwgInBpZCI6ICJlYnMxX2tvcmVhIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumfqeWbvSIsICJuYW1lIjogIkVCUzIiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiZWJzMl9rb3JlYSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpn6nlm70iLCAibmFtZSI6ICJFQlMgUGx1czIiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiZWJzcGx1czJfa29yZWEifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Z+p5Zu9IiwgIm5hbWUiOiAiU0JTIFBsdXMiLCAiZnVuIjogInNtdCIsICJwaWQiOiAic2JzcGx1c19rb3JlYSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpn6nlm70iLCAibmFtZSI6ICJZVE4iLCAiZnVuIjogInNtdCIsICJwaWQiOiAieXRuX2tvcmVhIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumfqeWbvSIsICJuYW1lIjogIktCUyBXb3JsZCAyNCIsICJmdW4iOiAic210IiwgInBpZCI6ICJrYnN3b3JsZDI0X2tvcmVhIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumfqeWbvSIsICJuYW1lIjogIllUTiBTY2llbmNlIiwgImZ1biI6ICJzbXQiLCAicGlkIjogInl0bnNjaWVuY2Vfa29yZWEifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Z+p5Zu9IiwgIm5hbWUiOiAiWVROIEtvcmVhbiIsICJmdW4iOiAic210IiwgInBpZCI6ICJ5dG5rb3JlYW5fa29yZWEifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Z+p5Zu9IiwgIm5hbWUiOiAiWVROIERNQiIsICJmdW4iOiAic210IiwgInBpZCI6ICJ5dG5kbWJfa29yZWEifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Z+p5Zu9IiwgIm5hbWUiOiAiQXBwcyBUViIsICJmdW4iOiAic210IiwgInBpZCI6ICJhcHBvbmdvb2dsZV9rb3JlYSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpn6nlm70iLCAibmFtZSI6ICJBbGwgdGhlIEtwb3AiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiYWxsdGhla3BvcF9rb3JlYSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpn6nlm70iLCAibmFtZSI6ICJKIHRoZSBLcG9wIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImp0aGVrcG9wX2tvcmVhIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumfqeWbvSIsICJuYW1lIjogIkVCUyBLaWRzIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImVic2tpZHNfa29yZWEifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Z+p5Zu9IiwgIm5hbWUiOiAiQ0dOVFYiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY2dudHZfa29yZWEifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5pel5pysIiwgIm5hbWUiOiAiTkhLLee3j+WQiC0yIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIm5oa2dfamFwYW4ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5pel5pysIiwgIm5hbWUiOiAiTkhLLUUiLCAiZnVuIjogInNtdCIsICJwaWQiOiAibmhrZV9qYXBhbiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLml6XmnKwiLCAibmFtZSI6ICLjg4bjg6zjg5PmnJ3ml6UgQXNhaGkgVFYiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiYXNhaGl0dl9qYXBhbiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLml6XmnKwiLCAibmFtZSI6ICJKRVQg57ac5ZCIIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImpldHR2X2phcGFuIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuaXpeacrCIsICJuYW1lIjogIuODhuODrOODk+adseS6rCBUb2t5byBUViIsICJmdW4iOiAic210IiwgInBpZCI6ICJ0b2t5b3R2X2phcGFuIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuaXpeacrCIsICJuYW1lIjogIlRPS1lPTVgiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidG9reW9teF9qYXBhbiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLml6XmnKwiLCAibmFtZSI6ICJOSEtCUzEiLCAiZnVuIjogInNtdCIsICJwaWQiOiAibmhrYnMxX2phcGFuIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuaXpeacrCIsICJuYW1lIjogIk5IS0JT44OX44Os44Of44KiIFByZW1pdW0iLCAiZnVuIjogInNtdCIsICJwaWQiOiAibmhrcHJlbWl1bV9qYXBhbiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLml6XmnKwiLCAibmFtZSI6ICJCU+OCuOODo+ODkeODsyAxODEiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiYnMxODFfamFwYW4ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5pel5pysIiwgIm5hbWUiOiAiQlPjg5XjgrggQlMgRnVqaSIsICJmdW4iOiAic210IiwgInBpZCI6ICJic2Z1amlfamFwYW4ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5pel5pysIiwgIm5hbWUiOiAiQ05BIEphcGFuIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImNuYV9qYXBhbiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLml6XmnKwiLCAibmFtZSI6ICJCUy1UQlMiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiYnN0YnNfamFwYW4ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5pel5pysIiwgIm5hbWUiOiAiTkhLIE9hc2thIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIm5oa29zYWthX2phcGFuIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuaXpeacrCIsICJuYW1lIjogIk5ISyBXb3JsZCIsICJmdW4iOiAic210IiwgInBpZCI6ICJuaGt3b3JsZF9qYXBhbiJ9XQ0K" + self.headers = {'User-Agent': 'Mozilla/5.0','CLIENT-IP': '127.0.0.1','X-FORWARDED-FOR': '127.0.0.1'} + pass + + def getDependence(self): + return [] + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + + def liveContent(self, url): + data_list = json.loads(self.b64decode(self.d)) + tv_list = ['#EXTM3U'] + for i in data_list: + tvg_id = i['tvg-id'] + tvg_name = i['tvg-name'] + tvg_logo = i['tvg-logo'] + group_name = i['group-title'] + name = i['name'] + fun = i['fun'] + pid = i['pid'] + tv_list.append(f'#EXTINF:-1 tvg-id="{tvg_id}" tvg-name="{tvg_name}" tvg-logo="{tvg_logo}" group-title="{group_name}",{name}') + tv_list.append(f'{self.getProxyUrl()}&fun={fun}&pid={pid}') + return '\n'.join(tv_list) + + 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): + + _fun = params.get('fun', None) + _type = params.get('type', None) + + if _fun is not None: + fun = getattr(self, f'fun_{_fun}') + return fun(params) + + if _type is not None: + if params['type'] == "m3u8": + return self.get_m3u8_text(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 fun_smt(self, params): + pid = params['pid'] + url = f'http://50.7.234.10:8278/{pid}/playlist.m3u8' + t = str(int(time.time() / 150)) + p = { + 'tid': 'mc42afe745533', + 'ct': t, + 'tsum': hashlib.md5(f'tvata nginx auth module/{pid}/playlist.m3u8mc42afe745533{t}'.encode('utf-8')).hexdigest() + } + play_url = self.b64encode(url + '?' + urlencode(p)) + url = f'{self.getProxyUrl()}&type=m3u8&url={play_url}' + return [302, "text/plain", None, {'Location': url}] + + + def get_m3u8_text(self,params): + url = self.b64decode(params['url']) + headers = self.headers + home_url = url.replace(url.split('/')[-1], '') + + def callback_function(match): + uri = home_url + match.group(1) + a = self.b64encode(uri) + # h = params['headers'] + return f"{self.getProxyUrl()}&type=ts&url={a}" + response = requests.get(url, headers=headers) + m3u8_text = re.sub(r'(.*\.ts.*)', callback_function, response.text) + return [200, "application/vnd.apple.mpegurl", m3u8_text] + + def get_ts(self, params): + url = self.b64decode(params['url']) + headers = self.headers + response = requests.get(url, headers=headers, stream=True) + 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 diff --git a/py/live_smt_proxy_001.py b/py/live_smt_proxy_001.py new file mode 100644 index 0000000..b988821 --- /dev/null +++ b/py/live_smt_proxy_001.py @@ -0,0 +1,150 @@ +# -*- coding: utf-8 -*- +# @Author : Doubebly +# @Time : 2025/4/6 21:04 + +import json +import re +import sys +import time +import hashlib +import requests +import base64 +from urllib.parse import urlencode +sys.path.append('..') +from base.spider import Spider + + +class Spider(Spider): + def getName(self): + return "SMT" + + def init(self, 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 + self.d = "W3sidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIummmea4ryIsICJuYW1lIjogIue/oee/oOWPsCIsICJmdW4iOiAic210IiwgInBpZCI6ICJqYWRlX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpppnmuK8iLCAibmFtZSI6ICLnv6Hnv6Dlj7AgYmFja3VwIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkphZGVfeHVlIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIummmea4ryIsICJuYW1lIjogImlOZXdzIOaWsOmXu+WPsCIsICJmdW4iOiAic210IiwgInBpZCI6ICJpbmV3c190d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6aaZ5rivIiwgIm5hbWUiOiAiSiAyIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImoyX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpppnmuK8iLCAibmFtZSI6ICLnj43nj6Dlj7AiLCAiZnVuIjogInNtdCIsICJwaWQiOiAicGVhcmxfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIummmea4ryIsICJuYW1lIjogIuWHpOWHsOmmmea4ryIsICJmdW4iOiAic210IiwgInBpZCI6ICJoa3Bob2VuaXhfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIummmea4ryIsICJuYW1lIjogIkhPWei1hOiur+WPsCIsICJmdW4iOiAic210IiwgInBpZCI6ICJob3ljYWlqaW5nX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpppnmuK8iLCAibmFtZSI6ICJSSEsgMzEiLCAiZnVuIjogInNtdCIsICJwaWQiOiAicmhrMzFfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIummmea4ryIsICJuYW1lIjogIlZJVVRWMSIsICJmdW4iOiAic210IiwgInBpZCI6ICJ2aXUxX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpppnmuK8iLCAibmFtZSI6ICJSSEsgMzIiLCAiZnVuIjogInNtdCIsICJwaWQiOiAicmhrMzJfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIummmea4ryIsICJuYW1lIjogIuWHpOWHsOWNq+inhiIsICJmdW4iOiAic210IiwgInBpZCI6ICJwaG9lbml4dHZfaGQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6aaZ5rivIiwgIm5hbWUiOiAi5Yek5Yew6LWE6K6vIiwgImZ1biI6ICJzbXQiLCAicGlkIjogInBob2VuaXhpbmZvX2hkIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIummmea4ryIsICJuYW1lIjogIlZpdTYiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidml1c2l4X3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkuK3lm70iLCAibmFtZSI6ICJDQ1RWLTEg57u85ZCIIEhEIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImNjdHYxIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS4reWbvSIsICJuYW1lIjogIkNDVFYtMiDotKLnu48iLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY2N0djIifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Lit5Zu9IiwgIm5hbWUiOiAiQ0NUVi0zIOe7vOiJuiBIRCIsICJmdW4iOiAic210IiwgInBpZCI6ICJjY3R2MyJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkuK3lm70iLCAibmFtZSI6ICJDQ1RWLTQg5Lit5paH5Zu96ZmFIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImNjdHY0In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS4reWbvSIsICJuYW1lIjogIkNDVFY0IOaWsOmXu+WPsCIsICJmdW4iOiAic210IiwgInBpZCI6ICJDY3R2NCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkuK3lm70iLCAibmFtZSI6ICJDQ1RWLTcg5Yab5LqL5Yac5LiaIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImNjdHY3In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS4reWbvSIsICJuYW1lIjogIkNDVFYtOCDnlLXop4bliacgSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY2N0djhoZCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkuK3lm70iLCAibmFtZSI6ICJDQ1RWLTkg6K6w5b2VIEhEIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImNjdHY5aGQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Lit5Zu9IiwgIm5hbWUiOiAiQ0NUVi0xMCDnp5HmlZkgSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY2N0djEwaGQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Lit5Zu9IiwgIm5hbWUiOiAiQ0NUVi0xMSDmiI/mm7IiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY2N0djExIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS4reWbvSIsICJuYW1lIjogIkNDVFYtMTIg56S+5Lya5LiO5rOVIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImNjdHYxMiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkuK3lm70iLCAibmFtZSI6ICJDQ1RWLTEzIOaWsOmXu+mikemBkyIsICJmdW4iOiAic210IiwgInBpZCI6ICJjY3R2MTMifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Lit5Zu9IiwgIm5hbWUiOiAiQ0NUVi0xNCDlsJHlhL8iLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY2N0djE0In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS4reWbvSIsICJuYW1lIjogIkNDVFYtNiIsICJmdW4iOiAic210IiwgInBpZCI6ICJjY3R2NiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkuK3lm70iLCAibmFtZSI6ICJDQ1RWLTE1IOmfs+S5kCIsICJmdW4iOiAic210IiwgInBpZCI6ICJjY3R2MTUifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Lit5Zu9IiwgIm5hbWUiOiAi5rmW5Y2X5Y2r6KeGIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImh1bmFuX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkuK3lm70iLCAibmFtZSI6ICLmtZnmsZ/ljavop4YiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiemhlamlhbmdfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS4reWbvSIsICJuYW1lIjogIuaxn+iLj+WNq+inhiIsICJmdW4iOiAic210IiwgInBpZCI6ICJqaWFuZ3N1X3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkuK3lm70iLCAibmFtZSI6ICLmt7HlnLPljavop4YiLCAiZnVuIjogInNtdCIsICJwaWQiOiAic2hlbnpoZW4ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Lit5Zu9IiwgIm5hbWUiOiAi56aP5bu65Lic5Y2X5Y2r6KeGIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImZ1amlhbiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkuK3lm70iLCAibmFtZSI6ICLlub/kuJzljZfmlrnljavop4YiLCAiZnVuIjogInNtdCIsICJwaWQiOiAibmFuZmFuZ190d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Lit5Zu9IiwgIm5hbWUiOiAi5bm/5Lic5Y2r6KeGIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImd1YW5nZG9uZ3dlaXNoaV90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Lit5Zu9IiwgIm5hbWUiOiAi5YyX5Lqs5Y2r6KeGIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImJlaWppbmcifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Lit5Zu9IiwgIm5hbWUiOiAi54+g5rGf5Y+wIiwgImZ1biI6ICJzbXQiLCAicGlkIjogInpodWppYW5nIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS4reWbvSIsICJuYW1lIjogIuW5v+ilv+WNq+inhiIsICJmdW4iOiAic210IiwgInBpZCI6ICJndWFuZ3hpIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS4reWbvSIsICJuYW1lIjogIua5luWMl+WNq+inhiIsICJmdW4iOiAic210IiwgInBpZCI6ICJodWJlaSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkuK3lm70iLCAibmFtZSI6ICLlm5vlt53ljavop4YiLCAiZnVuIjogInNtdCIsICJwaWQiOiAic2ljaHVhbl90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Lit5Zu9IiwgIm5hbWUiOiAi5Lic5pa55Y2r6KeGIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImRvbmdmYW5nd2Vpc2hpX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkuK3lm70iLCAibmFtZSI6ICJDR1ROIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkNHVE4ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Lit5Zu9IiwgIm5hbWUiOiAi5Yek5Yew5Y2r6KeGIiwgImZ1biI6ICJzbXQiLCAicGlkIjogInBob2VuaXh0dl9oZCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkuK3lm70iLCAibmFtZSI6ICLlh6Tlh7DotYTorq8iLCAiZnVuIjogInNtdCIsICJwaWQiOiAicGhvZW5peGluZm9faGQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Lit5Zu9IiwgIm5hbWUiOiAiQ0NUVi01IOS9k+iCsumikemBkyIsICJmdW4iOiAic210IiwgInBpZCI6ICJjY3R2NSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkuK3lm70iLCAibmFtZSI6ICJDQ1RWLTUrIOS9k+iCsui1m+S6iyBIRCIsICJmdW4iOiAic210IiwgInBpZCI6ICJjY3R2NXBsdXMifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5L2T6IKy6aKR6YGTIiwgIm5hbWUiOiAiQXN0cm8gUHJlbWllciBMZWFndWUgMSIsICJmdW4iOiAic210IiwgInBpZCI6ICJnb19hc3NwMSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkvZPogrLpopHpgZMiLCAibmFtZSI6ICJBc3RybyBFUEwgMSBiYWNrdXAiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiZ29fYXNzcDF4In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS9k+iCsumikemBkyIsICJuYW1lIjogIkFzdHJvIFByZW1pZXIgTGVhZ3VlIDIiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiZ29fYXNzcDIifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5L2T6IKy6aKR6YGTIiwgIm5hbWUiOiAiQXN0cm8gR3JhbmRzdGFuZCIsICJmdW4iOiAic210IiwgInBpZCI6ICJnb19hc3NwMyJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkvZPogrLpopHpgZMiLCAibmFtZSI6ICJBc3RybyBGb290YmFsbCIsICJmdW4iOiAic210IiwgInBpZCI6ICJnb19hc3NwNCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkvZPogrLpopHpgZMiLCAibmFtZSI6ICJBc3RybyBTcG9ydHMgUGx1cyIsICJmdW4iOiAic210IiwgInBpZCI6ICJnb19zcG9ydHNwbHVzIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS9k+iCsumikemBkyIsICJuYW1lIjogIkFzdHJvIEJhZG1pbnRvbiAxIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImdvX2JhZG1pbnRvbjEifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5L2T6IKy6aKR6YGTIiwgIm5hbWUiOiAiQXN0cm8gQmFkbWludG9uIDIiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiZ29fYmFkbWludG9uMiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkvZPogrLpopHpgZMiLCAibmFtZSI6ICJBc3RybyBXLVNwb3J0cyIsICJmdW4iOiAic210IiwgInBpZCI6ICJnb19hc3NwNSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkvZPogrLpopHpgZMiLCAibmFtZSI6ICJTdXBlcnNwb3J0cyAxIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkFzc3AxIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS9k+iCsumikemBkyIsICJuYW1lIjogIlN1cGVyc3BvcnRzIDIiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQXNzcDIifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5L2T6IKy6aKR6YGTIiwgIm5hbWUiOiAiU3VwZXJzcG9ydHMgMyIsICJmdW4iOiAic210IiwgInBpZCI6ICJBc3NwMyJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkvZPogrLpopHpgZMiLCAibmFtZSI6ICJTdXBlcnNwb3J0cyA0IiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkFzc3A0In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS9k+iCsumikemBkyIsICJuYW1lIjogIldXRSIsICJmdW4iOiAic210IiwgInBpZCI6ICJXd2UifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5L2T6IKy6aKR6YGTIiwgIm5hbWUiOiAiRmlnaHQgU3BvcnRzIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkZzIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS9k+iCsumikemBkyIsICJuYW1lIjogIk5CQSBUViIsICJmdW4iOiAic210IiwgInBpZCI6ICJOYmEifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5L2T6IKy6aKR6YGTIiwgIm5hbWUiOiAiQXN0cm8gQ3JpY2tldCIsICJmdW4iOiAic210IiwgInBpZCI6ICJBY3JpY2tldCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkvZPogrLpopHpgZMiLCAibmFtZSI6ICJBc3RybyBHb2xmIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkFnb2xmIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS9k+iCsumikemBkyIsICJuYW1lIjogIlRudCBTcG9ydHMgMSIsICJmdW4iOiAic210IiwgInBpZCI6ICI2ZmFjMGFhZWFkIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS9k+iCsumikemBkyIsICJuYW1lIjogIlROVCBTcG9ydHMgMiIsICJmdW4iOiAic210IiwgInBpZCI6ICJkOWE3NmE3OWNjIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS9k+iCsumikemBkyIsICJuYW1lIjogIlROVCBTcG9ydHMgMyIsICJmdW4iOiAic210IiwgInBpZCI6ICI1ZmVhNGQ3M2RiIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS9k+iCsumikemBkyIsICJuYW1lIjogIlROVCBTcG9ydHMgNCIsICJmdW4iOiAic210IiwgInBpZCI6ICJ0bnRzcG9ydDQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5L2T6IKy6aKR6YGTIiwgIm5hbWUiOiAiU29ueSBUZW4gMSIsICJmdW4iOiAic210IiwgInBpZCI6ICJ0ZW4xX3JhaiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkvZPogrLpopHpgZMiLCAibmFtZSI6ICJTb255IFRlbiAyIiwgImZ1biI6ICJzbXQiLCAicGlkIjogInRlbjJfcmFqIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS9k+iCsumikemBkyIsICJuYW1lIjogIlNvbnkgVGVuIDMiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidGVuM19yYWoifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5L2T6IKy6aKR6YGTIiwgIm5hbWUiOiAiU1BPVFYgMSBIRCIsICJmdW4iOiAic210IiwgInBpZCI6ICJnb19zcG90diJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkvZPogrLpopHpgZMiLCAibmFtZSI6ICJTUE8gVFYgMiIsICJmdW4iOiAic210IiwgInBpZCI6ICJnb19zcG90djIifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5L2T6IKy6aKR6YGTIiwgIm5hbWUiOiAiU2t5c3BvcnRzIEYxIiwgImZ1biI6ICJzbXQiLCAicGlkIjogInRpYW5rb25nZjEifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5L2T6IKy6aKR6YGTIiwgIm5hbWUiOiAiU2t5c3BvcnRzIENyaWNrZXQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidGlhbmtvbmdjcmlja2V0In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS9k+iCsumikemBkyIsICJuYW1lIjogIlNreXNwb3J0cyBFUEwiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidGlhbmtvbmdlcGwifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5L2T6IKy6aKR6YGTIiwgIm5hbWUiOiAiU2t5c3BvcnRzIE1haW4gRXZlbnQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidGlhbmtvbmdtYWluIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS9k+iCsumikemBkyIsICJuYW1lIjogIlNreXNwb3J0cyBOZXdzIiwgImZ1biI6ICJzbXQiLCAicGlkIjogInRpYW5rb25nbmV3cyJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkvZPogrLpopHpgZMiLCAibmFtZSI6ICJTa3lzcG9ydHMgTWl4IiwgImZ1biI6ICJzbXQiLCAicGlkIjogInRpYW5rb25nbWl4In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS9k+iCsumikemBkyIsICJuYW1lIjogIkNDVFYtNSDkvZPogrLpopHpgZMiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY2N0djUifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5L2T6IKy6aKR6YGTIiwgIm5hbWUiOiAiQ0NUVi01KyDkvZPogrLotZvkuosgSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY2N0djVwbHVzIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS9k+iCsumikemBkyIsICJuYW1lIjogIueIseWwlOi+vuS9k+iCsjLlj7AiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiZWx0YXNwb3J0Ml90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5L2T6IKy6aKR6YGTIiwgIm5hbWUiOiAi54ix5bCU6L6+5L2T6IKyM+WPsCIsICJmdW4iOiAic210IiwgInBpZCI6ICJlbHRhc3BvcnQzX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkvZPogrLpopHpgZMiLCAibmFtZSI6ICJSdWdieSBQYXNzIFRWIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlJ1Z2J5cGFzc3R2In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS9k+iCsumikemBkyIsICJuYW1lIjogIlJUTSBTcG9ydHMgSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiUnRtc3BvcnQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5L2T6IKy6aKR6YGTIiwgIm5hbWUiOiAiQXJlbmEiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQXJlbmEifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5L2T6IKy6aKR6YGTIiwgIm5hbWUiOiAiQXJlbmEgMiIsICJmdW4iOiAic210IiwgInBpZCI6ICJBcmVuYTIifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5L2T6IKy6aKR6YGTIiwgIm5hbWUiOiAiQm9sYUFyZW5hIDEiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQm9sYWFyZW5hMSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLkvZPogrLpopHpgZMiLCAibmFtZSI6ICJCb2xhQXJlbmEgMiIsICJmdW4iOiAic210IiwgInBpZCI6ICJCb2xhYXJlbmEyIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS9k+iCsumikemBkyIsICJuYW1lIjogIkFzdHJvIEJlaW5zcG9ydHMgMSIsICJmdW4iOiAic210IiwgInBpZCI6ICJBc3Ryb2JlaW4xIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS9k+iCsumikemBkyIsICJuYW1lIjogIkFzdHJvIEJlaW5zcG9ydHMgMiIsICJmdW4iOiAic210IiwgInBpZCI6ICJBc3Ryb2JlaW4yIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuS9k+iCsumikemBkyIsICJuYW1lIjogIkFzdHJvIEJlaW5zcG9ydHMgMyIsICJmdW4iOiAic210IiwgInBpZCI6ICJBc3Ryb2JlaW4zIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIlRWQlMgTmV3cyDmlrDpl7vlj7AiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidHZic19uIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIlRWQlMg5qyi5LmQ5Y+wIO+8iOWkh+S7ve+8iSIsICJmdW4iOiAic210IiwgInBpZCI6ICJ0dmJzaHVhbmxlX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICJUVkJTIEhEIiwgImZ1biI6ICJzbXQiLCAicGlkIjogInR2YnMifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi5Lit5aSp5paw6Ze7IEhEIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImN0aW5ld3MifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi5Lit5aSp5aix5LmQIENUSSBFbnRlcnRhaW1lbnQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY3RpZW50In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIuS4reWkqee7vOWQiCBDVEkgTWV0cm8iLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY3RpemhvbmdoZSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLkuK3lpKnkuprmtLLlj7AiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY3RpYXNpYV90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi5Y+w6KeGIFRUViBIRCIsICJmdW4iOiAic210IiwgInBpZCI6ICJ0dHZfdGFpd2FuIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIuWPsOinhuaWsOmXu+WPsCIsICJmdW4iOiAic210IiwgInBpZCI6ICJ0dHZuZXdzX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLlj7Dop4bnu7zlkIjlj7AiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidHR2emhvbmdoZSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLkuK3op4YgSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiemhvbmdzaGloZF90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi5Lit6KeG5paw6Ze75Y+wIiwgImZ1biI6ICJzbXQiLCAicGlkIjogInpob25nc2hpbmV3c190d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi5rCR6KeGIEhEIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImZ0dmhkX3RhaXdhbiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLmsJHop4bmlrDpl7vlj7AgRlRWIE5ld3MiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiZnR2bmV3X3RhaXdhbiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLmsJHop4blj7Dmub7lj7AiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiZnR2dGFpd2FuX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLljY7op4YgQ1RTIEhEIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImN0c2hkX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLlhazop4YgQ1RWIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImN0djE4X3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLlhavlpKfnrKzkuIAgR1RWIEZpcnN0IiwgImZ1biI6ICJzbXQiLCAicGlkIjogImJhZGFmaXJzdCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLlhavlpKfnu7zlkIggR1RWIE1ldHJvIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImJhZGF6aG9uZ2hlIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIuWFq+Wkp+aIj+WJpyBHVFYgRHJhbWEiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiYmFkYWRyYW1hIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIuWFq+Wkp+WoseS5kCBHVFYgRW50ZXJ0YWlubWVudCIsICJmdW4iOiAic210IiwgInBpZCI6ICJiYWRhZW50ZXJ0YWluIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIkhCT19IRCIsICJmdW4iOiAic210IiwgInBpZCI6ICJoYm9oZF90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAiSEJPX0hJVFMiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiaGJvaGl0X3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICJIb2xseXdvb2QgTW92aWVzIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImhvbGx5d29vZG1vdmllc190d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi5LiJ56uL5Y+w5rm+IFNhbmxpIFRhaXdhbiIsICJmdW4iOiAic210IiwgInBpZCI6ICJzYW5saXRhaXdhbiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLkuInnq4vmiI/liaflj7AiLCAiZnVuIjogInNtdCIsICJwaWQiOiAic2FubGl4aWp1X3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLkuInnq4vnu7zlkIggU2FubGkgTWV0cm8iLCAiZnVuIjogInNtdCIsICJwaWQiOiAic2FubGl6aG9uZ2hlIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIuS4ieeri+mDveS8muWPsCIsICJmdW4iOiAic210IiwgInBpZCI6ICJzYW5saWRvdWh1aSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLkuJzmo67mlrDpl7sgRVRUViBOZXdzIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImV0dHZuZXdzIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIkNJTkVNQVgiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY2luZW1heF90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi5Lic5qOu57u85ZCIIEVUVFYgTWV0cm8iLCAiZnVuIjogInNtdCIsICJwaWQiOiAiZXR0dnpob25naGUifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi5Lic5qOu5oiP5YmnIEVUVFYgRHJhbWEiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiZXR0dmRyYW1hIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIuS4nOajrui2heinhiIsICJmdW4iOiAic210IiwgInBpZCI6ICJldHR2c3VwZXIifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi5Lic5qOu6LSi57uP5paw6Ze7IEVUVFYgQnVzaW5lc3MiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiZXR0dmNhaWppbmdfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIuWvsOWuh+i0oue7jyIsICJmdW4iOiAic210IiwgInBpZCI6ICJodWFueXV0YWl3YW5fdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIuWvsOWuh+aWsOmXu+WPsCIsICJmdW4iOiAic210IiwgInBpZCI6ICJodWFueXV4aW53ZW5fdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIuWFrOinhjIiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY3R2Ml90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi5aSn54ixMeWPsCIsICJmdW4iOiAic210IiwgInBpZCI6ICJkYWFpX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLpnZ7lh6HmlrDpl7vlj7AiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiZmVpZmFubmV3c190d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi6b6Z5Y2O5oiP5YmnIEx1bmdodWEgRHJhbWEiLCAiZnVuIjogInNtdCIsICJwaWQiOiAibHVuZ2h1YXhpanVfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIum+meWNjue7j+WFuOWPsCIsICJmdW4iOiAic210IiwgInBpZCI6ICJsdW5naHVhamluZ2RpYW5fdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIum+meWNjuWBtuWDjyIsICJmdW4iOiAic210IiwgInBpZCI6ICJsdW5naHVhaWRvbF90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAiQVhOIFRhaXdhbiIsICJmdW4iOiAic210IiwgInBpZCI6ICJheG5fdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIumdluWkqeWbvemZheWPsCIsICJmdW4iOiAic210IiwgInBpZCI6ICJqaW5ndGlhbmludGxfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIuW5tOS7o+aWsOmXuyIsICJmdW4iOiAic210IiwgInBpZCI6ICJuaWFuZGFpbmV3c190d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi57qs5p2l5pel5pys5Y+wIiwgImZ1biI6ICJzbXQiLCAicGlkIjogInZpZGVvbGFuZGphcGFuIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIue6rOadpeeUteW9seWPsCIsICJmdW4iOiAic210IiwgInBpZCI6ICJ2aWRlb2xhbmRtb3ZpZSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLnuqzmnaXkvZPogrLlj7AiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidmlkZW9sYW5kc3BvcnQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi57qs5p2l57u85ZCI5Y+wIiwgImZ1biI6ICJzbXQiLCAicGlkIjogInZpZGVvbGFuZHpvbmdoZSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLnuqzmnaXogrLkuZAiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidmlkZW9sYW5keXVsZSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLnuqzmnaXnsr7lvakiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidmlkZW9sYW5kc3BlY2lhbF90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi5aW95raI5oGvIDIiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiZ29vZDJfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIuWkp+eIsTLlj7AiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiZGFhaTJfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIuS6mua0sue+jumjnyIsICJmdW4iOiAic210IiwgInBpZCI6ICJhZmNfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIue+jumjn+aYn+eQgyIsICJmdW4iOiAic210IiwgInBpZCI6ICJmb29kcGxhbmV0X3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLkuprmtLLml4XmuLggVExDIEFzaWEiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidGxjX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLkuJzmo67nlLXlvbEgRVRUViBNb3ZpZSIsICJmdW4iOiAic210IiwgInBpZCI6ICJldHR2bW92aWUifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi6Zi/6YeM6YOOIEFyaXJhbmciLCAiZnVuIjogInNtdCIsICJwaWQiOiAiYXJpcmFuZ190d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi5Y2a5pav6L+Q5YqoIDEiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiYm9zaXNwb3J0MV90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi5Y2a5pav6L+Q5YqoIDIiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiYm9zaXNwb3J0Ml90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi5Y2a5pav6auY55CDMiBIRCIsICJmdW4iOiAic210IiwgInBpZCI6ICJib3NpZ29sZjJfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIuWNmuaWr+e9keeQgyBIRCIsICJmdW4iOiAic210IiwgInBpZCI6ICJib3NpdGVubmlzX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLkuJzmo67mtIvniYcgRVRUViBXZXN0ZXJuIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImV0dHZ3ZXN0ZXJuIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIum+meWNjua0i+eJhyBMdW5naHVhIFdlc3Rlcm4iLCAiZnVuIjogInNtdCIsICJwaWQiOiAibHVuZ2h1YXdlc3Rlcm5fdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIuWNmuaWr+aXoOmZkCIsICJmdW4iOiAic210IiwgInBpZCI6ICJib3NpdW5saW1pdGVkX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICJNVFYgTGl2ZSIsICJmdW4iOiAic210IiwgInBpZCI6ICJtdHZoZF90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi6b6Z6K+m5pe25LujIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImx1bmd4aWFuZ3RpbWVfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIkVZRVRWIOaXhea4uCIsICJmdW4iOiAic210IiwgInBpZCI6ICJleWV0dnRyYXZlbF90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi6Z2W5aSp5Y2h6YCa5Y+wIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImppbmd0aWFuY2FydG9vbl90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAiRVlFVFYg5oiP5YmnIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImV5ZXR2eGlqdV90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi5Y2r6KeG5Lit5paH5Y+wIFN0YXIgTW92aWVzIENoaW5lc2UiLCAiZnVuIjogInNtdCIsICJwaWQiOiAid2Vpc2hpY2hpbmVzZV90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi5Lic5qOu5bm85bm8IFlveW8gVFYiLCAiZnVuIjogInNtdCIsICJwaWQiOiAieW95b190d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi5Y2r6KeG55S15b2x5Y+wIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIndlaXNoaW1vdmllX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLnvo7kuprnlLXlvbEiLCAiZnVuIjogInNtdCIsICJwaWQiOiAibWVpeWFtb3ZpZV90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAi54ix5bCU6L6+5b2x5Ymn5Y+wIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImVsdGF5aW5nanVfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIueIseWwlOi+vue7vOWQiOWPsCIsICJmdW4iOiAic210IiwgInBpZCI6ICJlbHRhem9uZ2hlX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLmmJ/ljavnlLXlvbEiLCAiZnVuIjogInNtdCIsICJwaWQiOiAieGluZ3dlaV9tb3ZpZSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLniLHlsJTovr7lvbHliaciLCAiZnVuIjogInNtdCIsICJwaWQiOiAiZWx0YXlpbmdqdV90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y+w5rm+IiwgIm5hbWUiOiAiQUZDIOS6mua0suaXhea4uOWPsCIsICJmdW4iOiAic210IiwgInBpZCI6ICJhc2lhdHJhdmVsX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlj7Dmub4iLCAibmFtZSI6ICLniLHlsJTovr7kvZPogrIy5Y+wIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImVsdGFzcG9ydDJfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWPsOa5viIsICJuYW1lIjogIueIseWwlOi+vuS9k+iCsjPlj7AiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiZWx0YXNwb3J0M190d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi55S15b2x6aKR6YGTIiwgIm5hbWUiOiAiSEJPX0hEIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImhib2hkX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLnlLXlvbHpopHpgZMiLCAibmFtZSI6ICJIQk9fSElUUyIsICJmdW4iOiAic210IiwgInBpZCI6ICJoYm9oaXRfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIueUteW9semikemBkyIsICJuYW1lIjogIkhvbGx5d29vZCBNb3ZpZXMiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiaG9sbHl3b29kbW92aWVzX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLnlLXlvbHpopHpgZMiLCAibmFtZSI6ICJDQ1RWLTYiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY2N0djYifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi55S15b2x6aKR6YGTIiwgIm5hbWUiOiAiQ0lORU1BWCIsICJmdW4iOiAic210IiwgInBpZCI6ICJjaW5lbWF4X3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLnlLXlvbHpopHpgZMiLCAibmFtZSI6ICJDaW5lbWF4IiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkNpbmVtYXgifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi55S15b2x6aKR6YGTIiwgIm5hbWUiOiAiQVhOIFRhaXdhbiIsICJmdW4iOiAic210IiwgInBpZCI6ICJheG5fdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIueUteW9semikemBkyIsICJuYW1lIjogIuWkp+eIsTLlj7AiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiZGFhaTJfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIueUteW9semikemBkyIsICJuYW1lIjogIuS4nOajrueUteW9sSBFVFRWIE1vdmllIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImV0dHZtb3ZpZSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLnlLXlvbHpopHpgZMiLCAibmFtZSI6ICLkuJzmo67mtIvniYcgRVRUViBXZXN0ZXJuIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImV0dHZ3ZXN0ZXJuIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIueUteW9semikemBkyIsICJuYW1lIjogIum+meWNjua0i+eJhyBMdW5naHVhIFdlc3Rlcm4iLCAiZnVuIjogInNtdCIsICJwaWQiOiAibHVuZ2h1YXdlc3Rlcm5fdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIueUteW9semikemBkyIsICJuYW1lIjogIkFuaW1heCIsICJmdW4iOiAic210IiwgInBpZCI6ICJBbmltYXgifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi55S15b2x6aKR6YGTIiwgIm5hbWUiOiAi6b6Z6K+m5pe25LujIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImx1bmd4aWFuZ3RpbWVfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIueUteW9semikemBkyIsICJuYW1lIjogIk1vdmllcyBOb3cgSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAibW92aWVzbm93X3JhaiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLnlLXlvbHpopHpgZMiLCAibmFtZSI6ICJTdGFyIE1vdmllcyBIRCIsICJmdW4iOiAic210IiwgInBpZCI6ICJzdGFybW92aWVzX3JhaiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLnlLXlvbHpopHpgZMiLCAibmFtZSI6ICLljavop4bkuK3mloflj7AgU3RhciBNb3ZpZXMgQ2hpbmVzZSIsICJmdW4iOiAic210IiwgInBpZCI6ICJ3ZWlzaGljaGluZXNlX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLnlLXlvbHpopHpgZMiLCAibmFtZSI6ICJIQk8gRmFtaWx5IiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkhib2ZhbWlseSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLnlLXlvbHpopHpgZMiLCAibmFtZSI6ICJIaXRzIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkhpdHMifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi55S15b2x6aKR6YGTIiwgIm5hbWUiOiAiV2FybmVyIFRWIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIldhcm5lclRWIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIueUteW9semikemBkyIsICJuYW1lIjogIuWNq+inhueUteW9seWPsCIsICJmdW4iOiAic210IiwgInBpZCI6ICJ3ZWlzaGltb3ZpZV90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi55S15b2x6aKR6YGTIiwgIm5hbWUiOiAiSEJPIEhEIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkhibyJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLnlLXlvbHpopHpgZMiLCAibmFtZSI6ICLnvo7kuprnlLXlvbEiLCAiZnVuIjogInNtdCIsICJwaWQiOiAibWVpeWFtb3ZpZV90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi55S15b2x6aKR6YGTIiwgIm5hbWUiOiAiSEJPIFNpZ25hdHVyZSIsICJmdW4iOiAic210IiwgInBpZCI6ICJIYm9zaWduYXR1cmUifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi55S15b2x6aKR6YGTIiwgIm5hbWUiOiAiSEJPIEhpdHMiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiSGJvaGl0c2hkIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIueUteW9semikemBkyIsICJuYW1lIjogIuaYn+WNq+eUteW9sSIsICJmdW4iOiAic210IiwgInBpZCI6ICJ4aW5nd2VpX21vdmllIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIueUteW9semikemBkyIsICJuYW1lIjogIlNDTSIsICJmdW4iOiAic210IiwgInBpZCI6ICJXZWlzaGltb3ZpZSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLnlLXlvbHpopHpgZMiLCAibmFtZSI6ICJEcmVhbXdvcmtzIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkRyZWFtd29ya3MifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi55S15b2x6aKR6YGTIiwgIm5hbWUiOiAiVGhyaWxsIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlRocmlsbCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLnlLXlvbHpopHpgZMiLCAibmFtZSI6ICJIaXRzIE1vdmllIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkhpdHNtb3ZpZSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLnlLXlvbHpopHpgZMiLCAibmFtZSI6ICJPbmUiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiT25lIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIueUteW9semikemBkyIsICJuYW1lIjogInR2TiBNb3ZpZSIsICJmdW4iOiAic210IiwgInBpZCI6ICJUdm5tb3ZpZSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLnlLXlvbHpopHpgZMiLCAibmFtZSI6ICJDZWxlc3RpYWwgQ2xhc3NpYyIsICJmdW4iOiAic210IiwgInBpZCI6ICJDZWxlc3RpYWwyIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIueUteW9semikemBkyIsICJuYW1lIjogIkNlbGVzdGlhbCBNb3ZpZXMgSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQ2VsZXN0aWFsaW5kbyJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLnlLXlvbHpopHpgZMiLCAibmFtZSI6ICJBeG4gSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQXhuIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIueUteW9semikemBkyIsICJuYW1lIjogIlBhcmFtb3VudCBOZXR3b3JrIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlBhcmFtb3VudG5ldHdvcmsifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi55S15b2x6aKR6YGTIiwgIm5hbWUiOiAiQXN0cm9sIEtwbHVzIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIktwbHVzIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIueUteW9semikemBkyIsICJuYW1lIjogIlJvY2sgQWN0aW9ucyIsICJmdW4iOiAic210IiwgInBpZCI6ICJSb2NrYWN0aW9uIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIueUteW9semikemBkyIsICJuYW1lIjogIlJvY2sgRW50ZXJ0YWlubWVudCIsICJmdW4iOiAic210IiwgInBpZCI6ICJSb2NrZW50ZXJ0YWluIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIue6quW9lemikemBkyIsICJuYW1lIjogIk5hdGdlb19IRCIsICJmdW4iOiAic210IiwgInBpZCI6ICJuYXRnZW9oZF90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi57qq5b2V6aKR6YGTIiwgIm5hbWUiOiAiTmF0R2VvX1dpbGQgSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAibmF0Z2Vvd2lsZF90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi57qq5b2V6aKR6YGTIiwgIm5hbWUiOiAiQW5pbWFsX1BsYW5ldCIsICJmdW4iOiAic210IiwgInBpZCI6ICJhbmltYWxwbGFuZXRfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIue6quW9lemikemBkyIsICJuYW1lIjogIkRpc2NvdmVyeSBBc2lhIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImRpc2NvdmVyeXR3bl90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi57qq5b2V6aKR6YGTIiwgIm5hbWUiOiAiQ0kiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY2lfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIue6quW9lemikemBkyIsICJuYW1lIjogIkFzaWEgVHJhdmVsIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImFzaWF0cmF2ZWxfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIue6quW9lemikemBkyIsICJuYW1lIjogIkRpc2NvdmVyeSBIRCIsICJmdW4iOiAic210IiwgInBpZCI6ICJkaXNjb3ZlcnloZF90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi57qq5b2V6aKR6YGTIiwgIm5hbWUiOiAi5Lqa5rSy576O6aOfIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImFmY190d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi57qq5b2V6aKR6YGTIiwgIm5hbWUiOiAi576O6aOf5pif55CDIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImZvb2RwbGFuZXRfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIue6quW9lemikemBkyIsICJuYW1lIjogIuS6mua0suaXhea4uCBUTEMgQXNpYSIsICJmdW4iOiAic210IiwgInBpZCI6ICJ0bGNfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIue6quW9lemikemBkyIsICJuYW1lIjogIk5hdEdlbyBIRCIsICJmdW4iOiAic210IiwgInBpZCI6ICJOYXRnZW8ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi57qq5b2V6aKR6YGTIiwgIm5hbWUiOiAiRmFzaGlvbiBUViIsICJmdW4iOiAic210IiwgInBpZCI6ICJmYXNoaW9udHZfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIue6quW9lemikemBkyIsICJuYW1lIjogIkhpc3RvcnkiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiSGlzdG9yeSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLnuqrlvZXpopHpgZMiLCAibmFtZSI6ICJCQkMgRWFydGggSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiYmJjZWFydGhfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIue6quW9lemikemBkyIsICJuYW1lIjogIkJCQyBFYXJ0aCBMaWZlc3R5bGUiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiYmJjbGlmZXN0eWxlX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLnuqrlvZXpopHpgZMiLCAibmFtZSI6ICJNVFYgTGl2ZSIsICJmdW4iOiAic210IiwgInBpZCI6ICJtdHZoZF90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi57qq5b2V6aKR6YGTIiwgIm5hbWUiOiAiTmF0R2VvIFdpbGQgSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiTmF0Z2Vvd2lsZCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLnuqrlvZXpopHpgZMiLCAibmFtZSI6ICJBbmltYWwgUGxhbmV0IChFbmcpIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkFuaW1hbFBsYW5ldCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLnuqrlvZXpopHpgZMiLCAibmFtZSI6ICJUTEMiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiVGxjIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIue6quW9lemikemBkyIsICJuYW1lIjogIkZvb2RuZXR3b3JrIEhkIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkZvb2RuZXR3b3JrIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIue6quW9lemikemBkyIsICJuYW1lIjogIkhHVFYiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiSEdUViJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLnuqrlvZXpopHpgZMiLCAibmFtZSI6ICJBRkMg5Lqa5rSy5peF5ri45Y+wIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImFzaWF0cmF2ZWxfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuaWsOmXu+mikemBkyIsICJuYW1lIjogIlNreW5ld3MiLCAiZnVuIjogInNtdCIsICJwaWQiOiAic2t5bmV3c190d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5paw6Ze76aKR6YGTIiwgIm5hbWUiOiAiQUJDIE5ld3MiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiYWJjbmV3c19nbG8ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5paw6Ze76aKR6YGTIiwgIm5hbWUiOiAi5Lic5qOu6LSi57uP5paw6Ze7IEVUVFYgQnVzaW5lc3MiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiZXR0dmNhaWppbmdfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuaWsOmXu+mikemBkyIsICJuYW1lIjogIkNCUyBIRCIsICJmdW4iOiAic210IiwgInBpZCI6ICJjYnNoZF9nbG8ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5paw6Ze76aKR6YGTIiwgIm5hbWUiOiAiQ0JTTiBIRCIsICJmdW4iOiAic210IiwgInBpZCI6ICJjYnNuX2dsbyJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLmlrDpl7vpopHpgZMiLCAibmFtZSI6ICJGcmFuY2UgMjQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiZnJhbmNlMjRfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuaWsOmXu+mikemBkyIsICJuYW1lIjogIkRXIChEZXV0c2NoKSIsICJmdW4iOiAic210IiwgInBpZCI6ICJkd190d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5paw6Ze76aKR6YGTIiwgIm5hbWUiOiAiTkhLIFdvcmxkIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIm5oa3dvcmxkX2phcGFuIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuaWsOmXu+mikemBkyIsICJuYW1lIjogIkZveCBOZXdzIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImZveG5ld3NfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuaWsOmXu+mikemBkyIsICJuYW1lIjogIkNHVE4iLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQ0dUTiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLmlrDpl7vpopHpgZMiLCAibmFtZSI6ICJDTk4gSW50ZXJuYXRpb25hbCIsICJmdW4iOiAic210IiwgInBpZCI6ICJDbm4ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5paw6Ze76aKR6YGTIiwgIm5hbWUiOiAiQ05OIGJhY2t1cCIsICJmdW4iOiAic210IiwgInBpZCI6ICJjbm5fdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuaWsOmXu+mikemBkyIsICJuYW1lIjogIkNOQkMiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY25iY190d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5paw6Ze76aKR6YGTIiwgIm5hbWUiOiAiQ05BIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImNuYSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLmlrDpl7vpopHpgZMiLCAibmFtZSI6ICJCQkMgV29ybGQgTmV3cyIsICJmdW4iOiAic210IiwgInBpZCI6ICJiYmNuZXdzX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLmlrDpl7vpopHpgZMiLCAibmFtZSI6ICJCQkMgV29ybGQgTmV3cyIsICJmdW4iOiAic210IiwgInBpZCI6ICJCYmNuZXdzIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuaWsOmXu+mikemBkyIsICJuYW1lIjogIkJsb29tYmVyZyBOZXdzIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImJsb29tYmVyZ190d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5paw6Ze76aKR6YGTIiwgIm5hbWUiOiAiQWwtSmF6ZWVyYSIsICJmdW4iOiAic210IiwgInBpZCI6ICJhbGphemVlcmFfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWEv+erpemikemBkyIsICJuYW1lIjogIkJhYnkgVFYgRW5nIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkJhYnl0diJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlhL/nq6XpopHpgZMiLCAibmFtZSI6ICJDQmVlYmllcyIsICJmdW4iOiAic210IiwgInBpZCI6ICJDYmVlYmllcyJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlhL/nq6XpopHpgZMiLCAibmFtZSI6ICJLaWRzIFRWIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIktpZHNUViJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlhL/nq6XpopHpgZMiLCAibmFtZSI6ICJNb21vIFRWIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIm1vbW8xX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlhL/nq6XpopHpgZMiLCAibmFtZSI6ICJBbmltYXgiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQW5pbWF4In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWEv+erpemikemBkyIsICJuYW1lIjogIkJhYnkgVFYiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiYmFieXR2X3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlhL/nq6XpopHpgZMiLCAibmFtZSI6ICJNaWFvTWkiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiTWlhb01pIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWEv+erpemikemBkyIsICJuYW1lIjogIumdluWkqeWNoemAmuWPsCIsICJmdW4iOiAic210IiwgInBpZCI6ICJqaW5ndGlhbmNhcnRvb25fdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWEv+erpemikemBkyIsICJuYW1lIjogIuS4nOajruW5vOW5vCBZb3lvIFRWIiwgImZ1biI6ICJzbXQiLCAicGlkIjogInlveW9fdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWEv+erpemikemBkyIsICJuYW1lIjogIkNhcnRvb24gTmV0d29yayIsICJmdW4iOiAic210IiwgInBpZCI6ICJDbiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlhL/nq6XpopHpgZMiLCAibmFtZSI6ICJOaWNrZWxvZGVvbiIsICJmdW4iOiAic210IiwgInBpZCI6ICJOaWNrZWxvZGVvbiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLlhL/nq6XpopHpgZMiLCAibmFtZSI6ICJOaWNrIEpyIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIk5pY2tqciJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLmlrDliqDlnaEiLCAibmFtZSI6ICJDaGFubmVsIDUiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQ2hhbm5lbDVIRCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLmlrDliqDlnaEiLCAibmFtZSI6ICJDaGFubmVsIDgiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQ2hhbm5lbDhIRCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLmlrDliqDlnaEiLCAibmFtZSI6ICJTdXJpYSIsICJmdW4iOiAic210IiwgInBpZCI6ICJTdXJpYSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLmlrDliqDlnaEiLCAibmFtZSI6ICJDaGFubmVsIFUiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQ2hhbm5lbFUifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5paw5Yqg5Z2hIiwgIm5hbWUiOiAiVmFzYW50aGFtIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlZhc2FudGhhbSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLmlrDliqDlnaEiLCAibmFtZSI6ICJDTkEiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY25hIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuaWsOWKoOWdoSIsICJuYW1lIjogIkNOQSBiYWNrdXAiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY25hX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLmlrDliqDlnaEiLCAibmFtZSI6ICJNZVdhdGNoIENoIDUiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiTWV3YXRjaF9jaDUifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5paw5Yqg5Z2hIiwgIm5hbWUiOiAiTWVXYXRjaCBDaCA4IiwgImZ1biI6ICJzbXQiLCAicGlkIjogIk1ld2F0Y2hfY2g4In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuaWsOWKoOWdoSIsICJuYW1lIjogIk1lV2F0Y2ggQ2ggVSIsICJmdW4iOiAic210IiwgInBpZCI6ICJNZXdhdGNoX2NoVSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLmlrDliqDlnaEiLCAibmFtZSI6ICJNZVdhdGNoIFN1cmlhIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIk1ld2F0Y2hfU3VyaWEifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5paw5Yqg5Z2hIiwgIm5hbWUiOiAiTWVXYXRjaCBWYXNhbnRoYW0iLCAiZnVuIjogInNtdCIsICJwaWQiOiAiTWV3YXRjaF9WYXNhbnRoYW0ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5paw5Yqg5Z2hIiwgIm5hbWUiOiAiTWVXYXRjaCBDTkEiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiTWV3YXRjaF9jbmEifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiVFYxIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlRWMSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJUVjEgYmFja3VwIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlRWMV9iYWNrdXAifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiVFYyIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlRWMiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJUVjMiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiVFYzIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIlRWMyBTRCIsICJmdW4iOiAic210IiwgInBpZCI6ICJUVjNfbWVnYSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJOVFY3IiwgImZ1biI6ICJzbXQiLCAicGlkIjogIk5UVjcifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiVFY4IiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlRWOCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJUVjkiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiVFY5In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIlJpYSIsICJmdW4iOiAic210IiwgInBpZCI6ICJSaWEtMCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJSaWEtMyIsICJmdW4iOiAic210IiwgInBpZCI6ICJSaWFfYmFja3VwIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIkFsLUhpanJhaCIsICJmdW4iOiAic210IiwgInBpZCI6ICJBbGhpanJhaCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJBbC1IaWpyYWggYmFja3VwIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkFsaGlqcmFoX2JhY2t1cCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJBd2FuaSIsICJmdW4iOiAic210IiwgInBpZCI6ICJBd2FuaSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJCZXJuYW1hIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkJlcm5hbWEifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiUHJpbWEiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiUHJpbWEtMCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJQcmltYSBiYWNrdXAiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQUFwcmltYTEifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiUHJpbWEgYmFja3VwIDIiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQUFwcmltYSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJDZXJpYSIsICJmdW4iOiAic210IiwgInBpZCI6ICJDZXJpYSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJBc3RybyBNVFYiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQXN0cm9NVFYifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiTWVjY2EgTGl2ZSBIRCIsICJmdW4iOiAic210IiwgInBpZCI6ICJxdXJhbl9taWRvIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIk1hZGluYWggSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAic3VubmFoX21pZG8ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiT2FzaXMiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiT2FzaXMifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiSEJPIEhEIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkhibyJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJIQk8gU2lnbmF0dXJlIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkhib3NpZ25hdHVyZSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJIQk8gSGl0cyIsICJmdW4iOiAic210IiwgInBpZCI6ICJIYm9oaXRzaGQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiTmF0R2VvIFdpbGQgSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiTmF0Z2Vvd2lsZCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJDYXJ0b29uIE5ldHdvcmsiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQ24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiTmlja2Vsb2Rlb24iLCAiZnVuIjogInNtdCIsICJwaWQiOiAiTmlja2Vsb2Rlb24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiTmljayBKciIsICJmdW4iOiAic210IiwgInBpZCI6ICJOaWNranIifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiRHJlYW13b3JrcyIsICJmdW4iOiAic210IiwgInBpZCI6ICJEcmVhbXdvcmtzIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIlNpYXIiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiU2lhciJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJDaXRyYSIsICJmdW4iOiAic210IiwgInBpZCI6ICJBQWNpdHJhIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIkNpdHJhIGJhY2t1cCIsICJmdW4iOiAic210IiwgInBpZCI6ICJBQWNpdHJhMSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJTZW5zYXNpIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlNlbnNhc2kifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiQXVyYSIsICJmdW4iOiAic210IiwgInBpZCI6ICJBdXJhIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIlJhbmlhIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlJhbmlhIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIktCUyBXb3JsZCIsICJmdW4iOiAic210IiwgInBpZCI6ICJLQlMifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiQm9vIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkJvbyJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJBd2Vzb21lIFRWIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkRzYW5nYXQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiQXN0cm8gU29ueXBpeCIsICJmdW4iOiAic210IiwgInBpZCI6ICJBc29ueXBpeCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJTb255IEhEIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlNldE9uZSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJUdk4iLCAiZnVuIjogInNtdCIsICJwaWQiOiAiVFZOIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIkFFQyIsICJmdW4iOiAic210IiwgInBpZCI6ICJBRUMifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAi5Y2O5Li95Y+wIEhEIO+8iFdhaCBMYWkgVG9p77yJIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIldsdCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICLmrKLllpzlj7AgSEQg77yISHVhIEhlZSBUYWnvvIkiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiSHVhaGVlIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIkFzdHJvIFFKIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlF1YW5qaWEifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiVFZCIEphZGUiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiVHZiamFkZSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJUVkIgQXNpYSIsICJmdW4iOiAic210IiwgInBpZCI6ICJUdmJhc2lhIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIlRWQiBFbnRlcnRhaW5tZW50IiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlR2YmVudGVydGFpbm1lbnQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiVFZCIENsYXNzaWMiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiVHZiY2xhc3NpYyJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJBT0QiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQW9kaGQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiT25lIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIk9uZSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJUVkIg5pif5rKz5Y+wIFhpbmcgSGUiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiWGluaGUifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAi54ix5aWH6Im6IGlRaXlpIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlFpeWkifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiQW5pbWFsIFBsYW5ldCAoRW5nKSIsICJmdW4iOiAic210IiwgInBpZCI6ICJBbmltYWxQbGFuZXQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAidHZOIE1vdmllIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlR2bm1vdmllIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIkNOTiBiYWNrdXAiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY25uX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJDZWxlc3RpYWwgQ2xhc3NpYyIsICJmdW4iOiAic210IiwgInBpZCI6ICJDZWxlc3RpYWwyIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIkNOQkMiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY25iY190d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiVExDIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlRsYyJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJDTkEiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY25hIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIkJCQyBXb3JsZCBOZXdzIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImJiY25ld3NfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIkZvb2RuZXR3b3JrIEhkIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkZvb2RuZXR3b3JrIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIkhHVFYiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiSEdUViJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJHb3Nob3AiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiR29zaG9wIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIkNlbGVzdGlhbCBNb3ZpZXMgSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQ2VsZXN0aWFsIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIkF4biBIRCIsICJmdW4iOiAic210IiwgInBpZCI6ICJBeG4ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiUGFyYW1vdW50IE5ldHdvcmsiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiUGFyYW1vdW50bmV0d29yayJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJBc3Ryb2wgS3BsdXMiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiS3BsdXMifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiQUZDIOS6mua0suaXhea4uOWPsCIsICJmdW4iOiAic210IiwgInBpZCI6ICJhc2lhdHJhdmVsX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJSb2NrIEFjdGlvbnMiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiUm9ja2FjdGlvbiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJCbG9vbWJlcmcgTmV3cyIsICJmdW4iOiAic210IiwgInBpZCI6ICJibG9vbWJlcmdfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIkFsLUphemVlcmEiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiYWxqYXplZXJhX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJSb2NrIEVudGVydGFpbm1lbnQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiUm9ja2VudGVydGFpbiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJSVE0gU3BvcnRzIEhEIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlJ0bXNwb3J0In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIkFyZW5hIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkFyZW5hIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIkFyZW5hIDIiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQXJlbmEyIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIkJvbGFBcmVuYSAxIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkJvbGFhcmVuYTEifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiQm9sYUFyZW5hIDIiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQm9sYWFyZW5hMiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJBc3RybyBMT0wiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQXN0cm9fbG9sIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumprOadpeilv+S6miIsICJuYW1lIjogIkFzdHJvIFJ1c2kiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiUnVzaSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpqazmnaXopb/kupoiLCAibmFtZSI6ICJXSU9OIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIldpb24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6ams5p2l6KW/5LqaIiwgIm5hbWUiOiAiUlRNIEFzZWFuIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlJ0bWFzZWFuIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6puWwvOilv+S6miIsICJuYW1lIjogIlRWUkkgTmF0aW9uYWwiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiVFZSSSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqblsLzopb/kupoiLCAibmFtZSI6ICJSQ1RJIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlJjdGkifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqm5bC86KW/5LqaIiwgIm5hbWUiOiAiS29tcGFzcyBUViIsICJmdW4iOiAic210IiwgInBpZCI6ICJLb21wYXNzIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6puWwvOilv+S6miIsICJuYW1lIjogIkJlcml0YSBTYXR1IiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkJlcml0YVNhdHVfZWtvIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6puWwvOilv+S6miIsICJuYW1lIjogIkluZG9zaWFyIEhEIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkluZG9zaWFyIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6puWwvOilv+S6miIsICJuYW1lIjogIkFuVFYiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQW50diJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqblsLzopb/kupoiLCAibmFtZSI6ICJNTkMgVFYiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiTW5jdHYifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqm5bC86KW/5LqaIiwgIm5hbWUiOiAiVHJhbnMgNyIsICJmdW4iOiAic210IiwgInBpZCI6ICJUcmFuczdfZWtvIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6puWwvOilv+S6miIsICJuYW1lIjogIlRyYW5zdHYiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiVHJhbnN0diJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqblsLzopb/kupoiLCAibmFtZSI6ICJKVFYiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiSlRWX2VrbyJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqblsLzopb/kupoiLCAibmFtZSI6ICJNZXRybyBUViIsICJmdW4iOiAic210IiwgInBpZCI6ICJtZXRyb3R2X2VrbyJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqblsLzopb/kupoiLCAibmFtZSI6ICJDaW5lbWF4IiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkNpbmVtYXgifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqm5bC86KW/5LqaIiwgIm5hbWUiOiAiU0NUViIsICJmdW4iOiAic210IiwgInBpZCI6ICJTQ1RWIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6puWwvOilv+S6miIsICJuYW1lIjogIlR2b25lIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlR2b25lIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6puWwvOilv+S6miIsICJuYW1lIjogIlRWTVUiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiVFZNVV9la28ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqm5bC86KW/5LqaIiwgIm5hbWUiOiAiR1RWIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkd0diJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqblsLzopb/kupoiLCAibmFtZSI6ICJSVFYiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiUnR2In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6puWwvOilv+S6miIsICJuYW1lIjogIkphayBUViIsICJmdW4iOiAic210IiwgInBpZCI6ICJKYWtUViJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqblsLzopb/kupoiLCAibmFtZSI6ICJpTmV3cyBUViIsICJmdW4iOiAic210IiwgInBpZCI6ICJJbmV3c3R2In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6puWwvOilv+S6miIsICJuYW1lIjogIkRhYWkgVFYiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiRGFhaVRWIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6puWwvOilv+S6miIsICJuYW1lIjogIk5ldCBUViIsICJmdW4iOiAic210IiwgInBpZCI6ICJOZXRUViJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqblsLzopb/kupoiLCAibmFtZSI6ICJBbmltYXgiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQW5pbWF4In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6puWwvOilv+S6miIsICJuYW1lIjogIkVXVE4iLCAiZnVuIjogInNtdCIsICJwaWQiOiAiRXd0biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqblsLzopb/kupoiLCAibmFtZSI6ICJBbFF1cmFuIEFsS2FyZWVtIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkFsUXVyYW4ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqm5bC86KW/5LqaIiwgIm5hbWUiOiAiVGF3YWYgVFYiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiVGF3YWZUViJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqblsLzopb/kupoiLCAibmFtZSI6ICJWaXNpb24gUHJpbWUiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiVmlzaW9uUHJpbWUifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqm5bC86KW/5LqaIiwgIm5hbWUiOiAiTXVzbGltIFRWIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIk11c2xpbVRWIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6puWwvOilv+S6miIsICJuYW1lIjogIk11c2ljIFRWIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIk11c2ljVFYifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqm5bC86KW/5LqaIiwgIm5hbWUiOiAiTGlmZXN0eWxlJkZhc2hpb24iLCAiZnVuIjogInNtdCIsICJwaWQiOiAiTGlmZXN0eWxlIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6puWwvOilv+S6miIsICJuYW1lIjogIkVudGVydGFpbiIsICJmdW4iOiAic210IiwgInBpZCI6ICJFbnRlcnRhaW4ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqm5bC86KW/5LqaIiwgIm5hbWUiOiAiSGl0cyIsICJmdW4iOiAic210IiwgInBpZCI6ICJIaXRzIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6puWwvOilv+S6miIsICJuYW1lIjogIldhcm5lciBUViIsICJmdW4iOiAic210IiwgInBpZCI6ICJXYXJuZXJUViJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqblsLzopb/kupoiLCAibmFtZSI6ICJTQ00iLCAiZnVuIjogInNtdCIsICJwaWQiOiAiV2Vpc2hpbW92aWUifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqm5bC86KW/5LqaIiwgIm5hbWUiOiAiVGhyaWxsIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlRocmlsbCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqblsLzopb/kupoiLCAibmFtZSI6ICJGaWdodCBTcG9ydHMiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiRnMifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqm5bC86KW/5LqaIiwgIm5hbWUiOiAiSGl0cyBNb3ZpZSIsICJmdW4iOiAic210IiwgInBpZCI6ICJIaXRzbW92aWUifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqm5bC86KW/5LqaIiwgIm5hbWUiOiAiT25lIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIk9uZSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqblsLzopb/kupoiLCAibmFtZSI6ICJ0dk4gTW92aWUiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiVHZubW92aWUifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqm5bC86KW/5LqaIiwgIm5hbWUiOiAiQ2VsZXN0aWFsIE1vdmllcyBIRCIsICJmdW4iOiAic210IiwgInBpZCI6ICJDZWxlc3RpYWxpbmRvIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6puWwvOilv+S6miIsICJuYW1lIjogIlJvY2sgQWN0aW9ucyIsICJmdW4iOiAic210IiwgInBpZCI6ICJSb2NrYWN0aW9uIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6puWwvOilv+S6miIsICJuYW1lIjogIlJvY2sgRW50ZXJ0YWlubWVudCIsICJmdW4iOiAic210IiwgInBpZCI6ICJSb2NrZW50ZXJ0YWluIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6piIsICJuYW1lIjogIlN1biBUViBIRCIsICJmdW4iOiAic210IiwgInBpZCI6ICJTdW50diJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqYiLCAibmFtZSI6ICJTdGFyIFZpamF5IiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlN0YXJ2aWpheSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqYiLCAibmFtZSI6ICJDb2xvcnMgVGFtaWwiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQ29sb3JzdGFtIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6piIsICJuYW1lIjogIlN1biBNdXNpYyIsICJmdW4iOiAic210IiwgInBpZCI6ICJTdW5tdXNpYyJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqYiLCAibmFtZSI6ICJBc3RybyBTdW5saWZlIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlN1bmxpZmUifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqmIiwgIm5hbWUiOiAiQXN0cm8gVmFhbmF2aWwiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiVmFhbmF2aWwifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqmIiwgIm5hbWUiOiAiWmVlIFRhbWlsIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlplZXRhbWlsIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6piIsICJuYW1lIjogIlplZSBCdXNpbmVzcyIsICJmdW4iOiAic210IiwgInBpZCI6ICJaZWVidXNpbmVzcyJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqYiLCAibmFtZSI6ICJOZXdzIDE4IFRhbWlsIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIm5ld3MxOHRhbWlsX3JhaiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqYiLCAibmFtZSI6ICJBZGl0aHlhIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkFkaXRoeWEifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqmIiwgIm5hbWUiOiAiTWFra2FsIFRWIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIk1ha2thbHR2In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6piIsICJuYW1lIjogIlplZSBBY3Rpb24iLCAiZnVuIjogInNtdCIsICJwaWQiOiAiWmVlYWN0aW9uIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6piIsICJuYW1lIjogIkFzdHJvIEtUViIsICJmdW4iOiAic210IiwgInBpZCI6ICJBc3Ryb2t0diJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqYiLCAibmFtZSI6ICJaZWUgVFYgSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiWmVldHZoZCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqYiLCAibmFtZSI6ICJaZWUgQ2luZW1hIEhEIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlplZWNpbmVtYWhkIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6piIsICJuYW1lIjogIkNvbG9yIEhEIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkNvbG9yaGQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqmIiwgIm5hbWUiOiAiU3RhcnBsdXMgSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiU3RhcnBsdXNoZCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqYiLCAibmFtZSI6ICJQaWN0dXJlIEhEIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIk5waWN0dXJlIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6piIsICJuYW1lIjogIlplZSBOZXdzIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlplZW5ld3MifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqmIiwgIm5hbWUiOiAiQXNpYW5ldCIsICJmdW4iOiAic210IiwgInBpZCI6ICJhc2lhbmV0X3JhaiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqYiLCAibmFtZSI6ICJBc2lhbmV0IE5ld3MiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiYXNpYW5ldG5ld3NfcmFqIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6piIsICJuYW1lIjogIkRpc2NvdmVyeSBXb3JsZCBUYW1pbCIsICJmdW4iOiAic210IiwgInBpZCI6ICJkaXNjb3Zlcnl3b3JsZHRhbV9yYWoifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqmIiwgIm5hbWUiOiAiSGlzdG9yeSBUYW1pbCIsICJmdW4iOiAic210IiwgInBpZCI6ICJoaXN0b3J5dGFtX3JhaiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqYiLCAibmFtZSI6ICJOYXRHZW8gVGFtaWwiLCAiZnVuIjogInNtdCIsICJwaWQiOiAibmF0Z2VvdGFtaWxfcmFqIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6piIsICJuYW1lIjogIk5hdGdlbyBXaWxkIFRhbWlsIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIm5hdGdlb3dpbGR0YW1pbF9yYWoifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqmIiwgIm5hbWUiOiAiQXN0cm8gU29ueXBpeCIsICJmdW4iOiAic210IiwgInBpZCI6ICJBc29ueXBpeCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqYiLCAibmFtZSI6ICJEaXNjb3ZlcnkgS2lkcyBUYW1pbCIsICJmdW4iOiAic210IiwgInBpZCI6ICJkaXNjb3ZlcnlraWR0YW1pbF9yYWoifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqmIiwgIm5hbWUiOiAiRGlzY292ZXJ5IFRhbWlsIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImRpc2NvdmVyeXRhbWlsX3JhaiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqYiLCAibmFtZSI6ICJTb255IFlheSBUYW1pbCIsICJmdW4iOiAic210IiwgInBpZCI6ICJzb255eWF5dGFtX3JhaiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLljbDluqYiLCAibmFtZSI6ICJTdW4gVFYgSW5kaWEiLCAiZnVuIjogInNtdCIsICJwaWQiOiAic3VudHZfcmFqIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuWNsOW6piIsICJuYW1lIjogIlN0YXJtYWEgSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAic3Rhcm1hYV9yYWoifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqmIiwgIm5hbWUiOiAiU3Rhcm1hYSBNb3ZpZXMgSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAic3Rhcm1hYW1vdmllc19yYWoifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqmIiwgIm5hbWUiOiAiQm9sbHlvbmUiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQm9sbHlvbmUifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqmIiwgIm5hbWUiOiAiQXN0cm8gU3VubXVzaWMiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiU3VubXVzaWMifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqmIiwgIm5hbWUiOiAiVmlqYXkgU3VwZXIiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidmlqYXlzdXBlcl9yYWoifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5Y2w5bqmIiwgIm5hbWUiOiAiVmVsbGl0aGlyYWkiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiVmVsbGl0aGlyYWkifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5rOw5Zu9IiwgIm5hbWUiOiAiQ2hhbm5lbCAzIFRoYWlsYW5kIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImNoM19wYXQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5rOw5Zu9IiwgIm5hbWUiOiAiQ2hhbm5lbCA1IFRoYWlsYW5kIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImNoNV9wYXQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5rOw5Zu9IiwgIm5hbWUiOiAiQ2hhbm5lbCA3IFRoYWlsYW5kIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImNoN19wYXQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5rOw5Zu9IiwgIm5hbWUiOiAiTUNPVCBIRCBUaGFpbGFuZC0xIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIm1jb3RfcGF0In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuazsOWbvSIsICJuYW1lIjogIlBQVFYgVGhhaWxhbmQxIiwgImZ1biI6ICJzbXQiLCAicGlkIjogInBwdHZfcGF0In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuazsOWbvSIsICJuYW1lIjogIlRoYWkgVGhhaSIsICJmdW4iOiAic210IiwgInBpZCI6ICJ0aGFpdGhhaV9wYXQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5rOw5Zu9IiwgIm5hbWUiOiAiQW1hcmluIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImFtYXJpbl9wYXQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5rOw5Zu9IiwgIm5hbWUiOiAiQ2ggOCIsICJmdW4iOiAic210IiwgInBpZCI6ICJjaDhfcGF0In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuazsOWbvSIsICJuYW1lIjogIkdtbU9uZSIsICJmdW4iOiAic210IiwgInBpZCI6ICJnbW1vbmVfcGF0In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuazsOWbvSIsICJuYW1lIjogIk1vbm8iLCAiZnVuIjogInNtdCIsICJwaWQiOiAibW9ub19wYXQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5rOw5Zu9IiwgIm5hbWUiOiAiVGhhaXJhdGgiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidGhhaXJhdGhfcGF0In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuazsOWbvSIsICJuYW1lIjogInRwYnMiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidHBic19wYXQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5rOw5Zu9IiwgIm5hbWUiOiAiV29ya3BvaW50IiwgImZ1biI6ICJzbXQiLCAicGlkIjogIndvcmtwb2ludF9wYXQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5rOw5Zu9IiwgIm5hbWUiOiAiR21tIENoYW5uZWwiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiZ21tY2hhbm5lbF9wYXQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5rOw5Zu9IiwgIm5hbWUiOiAiTmF0aW9uIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIm5hdGlvbl9wYXQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5rOw5Zu9IiwgIm5hbWUiOiAiVG5uMjQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidG5uMjRfcGF0In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuazsOWbvSIsICJuYW1lIjogIk5idCIsICJmdW4iOiAic210IiwgInBpZCI6ICJuYnRfcGF0In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuazsOWbvSIsICJuYW1lIjogIk5ldyIsICJmdW4iOiAic210IiwgInBpZCI6ICJuZXdfcGF0In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuazsOWbvSIsICJuYW1lIjogIlRQVFYiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidHB0dl9wYXQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Iux5Zu9IiwgIm5hbWUiOiAiQkJDIDEiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiYmJjMV9hbnRpayJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLoi7Hlm70iLCAibmFtZSI6ICJCQkMgMiIsICJmdW4iOiAic210IiwgInBpZCI6ICJiYmMyX2FudGlrIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuiLseWbvSIsICJuYW1lIjogIkNCQkMiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY2JiY19hbnRpayJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLoi7Hlm70iLCAibmFtZSI6ICJNb3JlNCIsICJmdW4iOiAic210IiwgInBpZCI6ICJtb3JlNF9hbnRpayJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLoi7Hlm70iLCAibmFtZSI6ICJGcmVlc3BvcnRzIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImZyZWVzcG9ydHNfYW50aWsifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Iux5Zu9IiwgIm5hbWUiOiAiU2t5bmV3cyIsICJmdW4iOiAic210IiwgInBpZCI6ICJza3luZXdzX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLoi7Hlm70iLCAibmFtZSI6ICJQaWNrIFRWIiwgImZ1biI6ICJzbXQiLCAicGlkIjogInBpY2t0dl9hbnRpayJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLoi7Hlm70iLCAibmFtZSI6ICJpdHYgMSIsICJmdW4iOiAic210IiwgInBpZCI6ICJpdHYxX2FudGlrIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuiLseWbvSIsICJuYW1lIjogIml0diAyIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIml0djJfYW50aWsifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Iux5Zu9IiwgIm5hbWUiOiAiRXVyb25ld3MiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiZXVyb25ld3NfYW50aWsifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Iux5Zu9IiwgIm5hbWUiOiAiQ2hhbm5lbCA0IiwgImZ1biI6ICJzbXQiLCAicGlkIjogImNoYW5uZWw0X2FudGlrIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuiLseWbvSIsICJuYW1lIjogIk5hdEdlbyBIRCIsICJmdW4iOiAic210IiwgInBpZCI6ICJOYXRnZW8ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Iux5Zu9IiwgIm5hbWUiOiAiQ0JlZWJpZXMiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiQ2JlZWJpZXMifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Iux5Zu9IiwgIm5hbWUiOiAiSGlzdG9yeSIsICJmdW4iOiAic210IiwgInBpZCI6ICJIaXN0b3J5In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuiLseWbvSIsICJuYW1lIjogIktpZHMgVFYiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiS2lkc1RWIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuiLseWbvSIsICJuYW1lIjogIkZyYW5jZSAyNCIsICJmdW4iOiAic210IiwgInBpZCI6ICJmcmFuY2UyNF90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Iux5Zu9IiwgIm5hbWUiOiAiRFcgKERldXRzY2gpIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImR3X3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLoi7Hlm70iLCAibmFtZSI6ICJCQkMgRWFydGggSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiYmJjZWFydGhfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuiLseWbvSIsICJuYW1lIjogIkJCQyBFYXJ0aCBMaWZlc3R5bGUiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiYmJjbGlmZXN0eWxlX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLoi7Hlm70iLCAibmFtZSI6ICJNVFYgTGl2ZSIsICJmdW4iOiAic210IiwgInBpZCI6ICJtdHZoZF90d24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Iux5Zu9IiwgIm5hbWUiOiAiU3RhciBNb3ZpZXMgSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAic3Rhcm1vdmllc19yYWoifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Iux5Zu9IiwgIm5hbWUiOiAiTkhLIFdvcmxkIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIm5oa3dvcmxkX2phcGFuIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuiLseWbvSIsICJuYW1lIjogIldhcm5lciBUViIsICJmdW4iOiAic210IiwgInBpZCI6ICJXYXJuZXJUViJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLoi7Hlm70iLCAibmFtZSI6ICJIQk8gSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiSGJvIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuiLseWbvSIsICJuYW1lIjogIk5hdEdlbyBXaWxkIEhEIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIk5hdGdlb3dpbGQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Iux5Zu9IiwgIm5hbWUiOiAiTmlja2Vsb2Rlb24iLCAiZnVuIjogInNtdCIsICJwaWQiOiAiTmlja2Vsb2Rlb24ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Iux5Zu9IiwgIm5hbWUiOiAiTmljayBKciIsICJmdW4iOiAic210IiwgInBpZCI6ICJOaWNranIifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Iux5Zu9IiwgIm5hbWUiOiAiVGhyaWxsIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIlRocmlsbCJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLoi7Hlm70iLCAibmFtZSI6ICJDR1ROIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkNHVE4ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Iux5Zu9IiwgIm5hbWUiOiAiSGl0cyBNb3ZpZSIsICJmdW4iOiAic210IiwgInBpZCI6ICJIaXRzbW92aWUifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Iux5Zu9IiwgIm5hbWUiOiAiQW5pbWFsIFBsYW5ldCAoRW5nKSIsICJmdW4iOiAic210IiwgInBpZCI6ICJBbmltYWxQbGFuZXQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Iux5Zu9IiwgIm5hbWUiOiAiQ05CQyIsICJmdW4iOiAic210IiwgInBpZCI6ICJjbmJjX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLoi7Hlm70iLCAibmFtZSI6ICJUTEMiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiVGxjIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuiLseWbvSIsICJuYW1lIjogIkJCQyBXb3JsZCBOZXdzIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImJiY3dvcmxkbmV3c19hbnRpayJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLoi7Hlm70iLCAibmFtZSI6ICJIR1RWIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkhHVFYifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Iux5Zu9IiwgIm5hbWUiOiAiQXhuIEhEIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIkF4biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLoi7Hlm70iLCAibmFtZSI6ICJTa3lzcG9ydHMgRjEiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidGlhbmtvbmdmMSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLoi7Hlm70iLCAibmFtZSI6ICJTa3lzcG9ydHMgQ3JpY2tldCIsICJmdW4iOiAic210IiwgInBpZCI6ICJ0aWFua29uZ2NyaWNrZXQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Iux5Zu9IiwgIm5hbWUiOiAiQmxvb21iZXJnIE5ld3MiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiYmxvb21iZXJnX3R3biJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLoi7Hlm70iLCAibmFtZSI6ICJTa3lzcG9ydHMgRVBMIiwgImZ1biI6ICJzbXQiLCAicGlkIjogInRpYW5rb25nZXBsIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuiLseWbvSIsICJuYW1lIjogIlNreXNwb3J0cyBNYWluIEV2ZW50IiwgImZ1biI6ICJzbXQiLCAicGlkIjogInRpYW5rb25nbWFpbiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLoi7Hlm70iLCAibmFtZSI6ICJTa3lzcG9ydHMgTmV3cyIsICJmdW4iOiAic210IiwgInBpZCI6ICJ0aWFua29uZ25ld3MifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Iux5Zu9IiwgIm5hbWUiOiAiQWwtSmF6ZWVyYSIsICJmdW4iOiAic210IiwgInBpZCI6ICJhbGphemVlcmFfdHduIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIui2iuWNlyIsICJuYW1lIjogIkFOVFYiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidmlldF9hbnR2In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIui2iuWNlyIsICJuYW1lIjogIlZUViAxIiwgImZ1biI6ICJzbXQiLCAicGlkIjogInZpZXRfdnR2MSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLotorljZciLCAibmFtZSI6ICJWVFYgNyIsICJmdW4iOiAic210IiwgInBpZCI6ICJ2aWV0X3Z0djcifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6LaK5Y2XIiwgIm5hbWUiOiAiSFRWIDciLCAiZnVuIjogInNtdCIsICJwaWQiOiAidmlldF9odHY3In0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIui2iuWNlyIsICJuYW1lIjogIkhUViA5IiwgImZ1biI6ICJzbXQiLCAicGlkIjogInZpZXRfaHR2OSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLotorljZciLCAibmFtZSI6ICJCUFRWIDIiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidmlldF9icHR2MiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLotorljZciLCAibmFtZSI6ICJCUlQgSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidmlldF9icnQifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6LaK5Y2XIiwgIm5hbWUiOiAiQ2EgTWF1IFRWIiwgImZ1biI6ICJzbXQiLCAicGlkIjogInZpZXRfY2FtYXV0diJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLotorljZciLCAibmFtZSI6ICJEYW5hbmcgVFYxIEhEIiwgImZ1biI6ICJzbXQiLCAicGlkIjogInZpZXRfZGFuYW5ndHYxIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIui2iuWNlyIsICJuYW1lIjogIkRhbmFuZyBUVjIgSEQiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidmlldF9kYW5hbmd0djIifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6LaK5Y2XIiwgIm5hbWUiOiAiSEJUViBIRCIsICJmdW4iOiAic210IiwgInBpZCI6ICJ2aWV0X2hidHYifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6LaK5Y2XIiwgIm5hbWUiOiAiUFRUSCAxIiwgImZ1biI6ICJzbXQiLCAicGlkIjogInZpZXRfcHR0aDEifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Z+p5Zu9IiwgIm5hbWUiOiAiQXJpcmFuZyBIRCIsICJmdW4iOiAic210IiwgInBpZCI6ICJhcmlyYW5nX2tvcmVhIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumfqeWbvSIsICJuYW1lIjogIllvbmhhcCBOZXdzIiwgImZ1biI6ICJzbXQiLCAicGlkIjogInlvbmhhcG5ld3Nfa29yZWEifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Z+p5Zu9IiwgIm5hbWUiOiAiQ0JTIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImNic19rb3JlYSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpn6nlm70iLCAibmFtZSI6ICJFQlMgMSIsICJmdW4iOiAic210IiwgInBpZCI6ICJlYnMxX2tvcmVhIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumfqeWbvSIsICJuYW1lIjogIkVCUzIiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiZWJzMl9rb3JlYSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpn6nlm70iLCAibmFtZSI6ICJFQlMgUGx1czIiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiZWJzcGx1czJfa29yZWEifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Z+p5Zu9IiwgIm5hbWUiOiAiU0JTIFBsdXMiLCAiZnVuIjogInNtdCIsICJwaWQiOiAic2JzcGx1c19rb3JlYSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpn6nlm70iLCAibmFtZSI6ICJZVE4iLCAiZnVuIjogInNtdCIsICJwaWQiOiAieXRuX2tvcmVhIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumfqeWbvSIsICJuYW1lIjogIktCUyBXb3JsZCAyNCIsICJmdW4iOiAic210IiwgInBpZCI6ICJrYnN3b3JsZDI0X2tvcmVhIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumfqeWbvSIsICJuYW1lIjogIllUTiBTY2llbmNlIiwgImZ1biI6ICJzbXQiLCAicGlkIjogInl0bnNjaWVuY2Vfa29yZWEifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Z+p5Zu9IiwgIm5hbWUiOiAiWVROIEtvcmVhbiIsICJmdW4iOiAic210IiwgInBpZCI6ICJ5dG5rb3JlYW5fa29yZWEifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Z+p5Zu9IiwgIm5hbWUiOiAiWVROIERNQiIsICJmdW4iOiAic210IiwgInBpZCI6ICJ5dG5kbWJfa29yZWEifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Z+p5Zu9IiwgIm5hbWUiOiAiQXBwcyBUViIsICJmdW4iOiAic210IiwgInBpZCI6ICJhcHBvbmdvb2dsZV9rb3JlYSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpn6nlm70iLCAibmFtZSI6ICJBbGwgdGhlIEtwb3AiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiYWxsdGhla3BvcF9rb3JlYSJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLpn6nlm70iLCAibmFtZSI6ICJKIHRoZSBLcG9wIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImp0aGVrcG9wX2tvcmVhIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIumfqeWbvSIsICJuYW1lIjogIkVCUyBLaWRzIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImVic2tpZHNfa29yZWEifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi6Z+p5Zu9IiwgIm5hbWUiOiAiQ0dOVFYiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiY2dudHZfa29yZWEifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5pel5pysIiwgIm5hbWUiOiAiTkhLLee3j+WQiC0yIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIm5oa2dfamFwYW4ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5pel5pysIiwgIm5hbWUiOiAiTkhLLUUiLCAiZnVuIjogInNtdCIsICJwaWQiOiAibmhrZV9qYXBhbiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLml6XmnKwiLCAibmFtZSI6ICLjg4bjg6zjg5PmnJ3ml6UgQXNhaGkgVFYiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiYXNhaGl0dl9qYXBhbiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLml6XmnKwiLCAibmFtZSI6ICJKRVQg57ac5ZCIIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImpldHR2X2phcGFuIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuaXpeacrCIsICJuYW1lIjogIuODhuODrOODk+adseS6rCBUb2t5byBUViIsICJmdW4iOiAic210IiwgInBpZCI6ICJ0b2t5b3R2X2phcGFuIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuaXpeacrCIsICJuYW1lIjogIlRPS1lPTVgiLCAiZnVuIjogInNtdCIsICJwaWQiOiAidG9reW9teF9qYXBhbiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLml6XmnKwiLCAibmFtZSI6ICJOSEtCUzEiLCAiZnVuIjogInNtdCIsICJwaWQiOiAibmhrYnMxX2phcGFuIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuaXpeacrCIsICJuYW1lIjogIk5IS0JT44OX44Os44Of44KiIFByZW1pdW0iLCAiZnVuIjogInNtdCIsICJwaWQiOiAibmhrcHJlbWl1bV9qYXBhbiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLml6XmnKwiLCAibmFtZSI6ICJCU+OCuOODo+ODkeODsyAxODEiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiYnMxODFfamFwYW4ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5pel5pysIiwgIm5hbWUiOiAiQlPjg5XjgrggQlMgRnVqaSIsICJmdW4iOiAic210IiwgInBpZCI6ICJic2Z1amlfamFwYW4ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5pel5pysIiwgIm5hbWUiOiAiQ05BIEphcGFuIiwgImZ1biI6ICJzbXQiLCAicGlkIjogImNuYV9qYXBhbiJ9LCB7InR2Zy1pZCI6ICIiLCAidHZnLW5hbWUiOiAiIiwgInR2Zy1sb2dvIjogIiIsICJncm91cC10aXRsZSI6ICLml6XmnKwiLCAibmFtZSI6ICJCUy1UQlMiLCAiZnVuIjogInNtdCIsICJwaWQiOiAiYnN0YnNfamFwYW4ifSwgeyJ0dmctaWQiOiAiIiwgInR2Zy1uYW1lIjogIiIsICJ0dmctbG9nbyI6ICIiLCAiZ3JvdXAtdGl0bGUiOiAi5pel5pysIiwgIm5hbWUiOiAiTkhLIE9hc2thIiwgImZ1biI6ICJzbXQiLCAicGlkIjogIm5oa29zYWthX2phcGFuIn0sIHsidHZnLWlkIjogIiIsICJ0dmctbmFtZSI6ICIiLCAidHZnLWxvZ28iOiAiIiwgImdyb3VwLXRpdGxlIjogIuaXpeacrCIsICJuYW1lIjogIk5ISyBXb3JsZCIsICJmdW4iOiAic210IiwgInBpZCI6ICJuaGt3b3JsZF9qYXBhbiJ9XQ0K" + self.headers = {'User-Agent': 'Mozilla/5.0','CLIENT-IP': '127.0.0.1','X-FORWARDED-FOR': '127.0.0.1'} + pass + + def getDependence(self): + return [] + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + + def liveContent(self, url): + data_list = json.loads(self.b64decode(self.d)) + tv_list = ['#EXTM3U'] + for i in data_list: + tvg_id = i['tvg-id'] + tvg_name = i['tvg-name'] + tvg_logo = i['tvg-logo'] + group_name = i['group-title'] + name = i['name'] + fun = i['fun'] + pid = i['pid'] + tv_list.append(f'#EXTINF:-1 tvg-id="{tvg_id}" tvg-name="{tvg_name}" tvg-logo="{tvg_logo}" group-title="{group_name}",{name}') + tv_list.append(f'{self.getProxyUrl()}&fun={fun}&pid={pid}') + return '\n'.join(tv_list) + + 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): + + _fun = params.get('fun', None) + _type = params.get('type', None) + + if _fun is not None: + fun = getattr(self, f'fun_{_fun}') + return fun(params) + + if _type is not None: + if params['type'] == "m3u8": + return self.get_m3u8_text(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 fun_smt(self, params): + pid = params['pid'] + url = f'http://50.7.234.10:8278/{pid}/playlist.m3u8' + t = str(int(time.time() / 150)) + p = { + 'tid': 'mc42afe745533', + 'ct': t, + 'tsum': hashlib.md5(f'tvata nginx auth module/{pid}/playlist.m3u8mc42afe745533{t}'.encode('utf-8')).hexdigest() + } + play_url = self.b64encode(url + '?' + urlencode(p)) + url = f'{self.getProxyUrl()}&type=m3u8&url={play_url}' + return [302, "text/plain", None, {'Location': url}] + + + def get_m3u8_text(self,params): + url = self.b64decode(params['url']) + headers = self.headers + home_url = url.replace(url.split('/')[-1], '') + + def callback_function(match): + uri = home_url + match.group(1) + a = self.b64encode(uri) + # h = params['headers'] + return f"{self.getProxyUrl()}&type=ts&url={a}" + if self.is_proxy: + response = requests.get(url, headers=headers, proxies=self.proxy) + else: + response = requests.get(url, headers=headers) + m3u8_text = re.sub(r'(.*\.ts.*)', callback_function, response.text) + return [200, "application/vnd.apple.mpegurl", m3u8_text] + + def get_ts(self, params): + url = self.b64decode(params['url']) + headers = self.headers + if self.is_proxy: + response = requests.get(url, headers=headers, proxies=self.proxy) + else: + response = requests.get(url, headers=headers) + 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 diff --git a/py/mioaying影视.py b/py/mioaying影视.py new file mode 100644 index 0000000..ae59e5b --- /dev/null +++ b/py/mioaying影视.py @@ -0,0 +1,224 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import json +import random +import sys +from base64 import b64encode, b64decode +from concurrent.futures import ThreadPoolExecutor +sys.path.append('..') +from base.spider import Spider + +class Spider(Spider): + + def init(self, extend=""): + did=self.getdid() + self.headers.update({'deviceId': did}) + token=self.gettk() + self.headers.update({'token': token}) + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + host='http://zero.mitotv.com' + + headers = { + 'User-Agent': 'okhttp/4.12.0', + 'client': 'app', + 'deviceType': 'Android' + } + + def homeContent(self, filter): + data=self.post(f"{self.host}/api/v1/app/screen/screenType", headers=self.headers).json() + result = {} + cate = { + "类型": "classify", + "地区": "region", + "年份": "year" + } + sort={ + 'key':'sreecnTypeEnum', + 'name': '排序', + 'value':[{'n':'人气','v':'POPULARITY'},{'n':'评分','v':'COLLECT'},{'n':'热搜','v':'HOT'}] + } + classes = [] + filters = {} + for k in data['data']: + classes.append({ + 'type_name': k['name'], + 'type_id': k['id'] + }) + filters[k['id']] = [ + { + 'name': v['name'], + 'key': cate[v['name']], + 'value': [ + {'n': i['name'], 'v': i['name']} + for i in v['children'] + ] + } + for v in k['children'] + ] + filters[k['id']].append(sort) + result['class'] = classes + result['filters'] = filters + return result + + def homeVideoContent(self): + jdata={"condition":64,"pageNum":1,"pageSize":40} + data=self.post(f"{self.host}/api/v1/app/recommend/recommendSubList", headers=self.headers, json=jdata).json() + return {'list':self.getlist(data['data']['records'])} + + def categoryContent(self, tid, pg, filter, extend): + jdata = { + 'condition': { + 'sreecnTypeEnum': 'NEWEST', + 'typeId': tid, + }, + 'pageNum': int(pg), + 'pageSize': 40, + } + jdata['condition'].update(extend) + data = self.post(f"{self.host}/api/v1/app/screen/screenMovie", headers=self.headers, json=jdata).json() + result = {} + result['list'] = self.getlist(data['data']['records']) + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + ids = ids[0].split('@@') + jdata = {"id": int(ids[0]), "typeId": ids[-1]} + v = self.post(f"{self.host}/api/v1/app/play/movieDesc", headers=self.headers, json=jdata).json() + v = v['data'] + vod = { + 'type_name': v.get('classify'), + 'vod_year': v.get('year'), + 'vod_area': v.get('area'), + 'vod_actor': v.get('star'), + 'vod_director': v.get('director'), + 'vod_content': v.get('introduce'), + 'vod_play_from': '', + 'vod_play_url': '' + } + c = self.post(f"{self.host}/api/v1/app/play/movieDetails", headers=self.headers, json=jdata).json() + l = c['data']['moviePlayerList'] + n = {str(i['id']): i['moviePlayerName'] for i in l} + m = jdata.copy() + m.update({'playerId': str(l[0]['id'])}) + pd = self.getv(m, c['data']['episodeList']) + if len(l)-1: + with ThreadPoolExecutor(max_workers=len(l)-1) as executor: + future_to_player = {executor.submit(self.getd, jdata, player): player for player in l[1:]} + for future in future_to_player: + try: + o,p = future.result() + pd.update(self.getv(o,p)) + except Exception as e: + print(f"请求失败: {e}") + w, e = [],[] + for i, x in pd.items(): + if x: + w.append(n[i]) + e.append(x) + vod['vod_play_from'] = '$$$'.join(w) + vod['vod_play_url'] = '$$$'.join(e) + return {'list': [vod]} + + def searchContent(self, key, quick, pg="1"): + jdata={ + "condition": { + "value": key + }, + "pageNum": int(pg), + "pageSize": 40 + } + data=self.post(f"{self.host}/api/v1/app/search/searchMovie", headers=self.headers, json=jdata).json() + return {'list':self.getlist(data['data']['records']),'page':pg} + + def playerContent(self, flag, id, vipFlags): + jdata=json.loads(self.d64(id)) + data = self.post(f"{self.host}/api/v1/app/play/movieDetails", headers=self.headers, json=jdata).json() + try: + params={'playerUrl':data['data']['url'],'playerId':jdata['playerId']} + pd=self.fetch(f"{self.host}/api/v1/app/play/analysisMovieUrl", headers=self.headers, params=params).json() + url,p=pd['data'],0 + except Exception as e: + print(f"请求失败: {e}") + url,p=data['data']['url'],0 + return {'parse': p, 'url': url, 'header': {'User-Agent': 'okhttp/4.12.0'}} + + def localProxy(self, param): + pass + + def liveContent(self, url): + pass + + def gettk(self): + data=self.fetch(f"{self.host}/api/v1/app/user/visitorInfo", headers=self.headers).json() + return data['data']['token'] + + def getdid(self): + did=self.getCache('ldid') + if not did: + hex_chars = '0123456789abcdef' + did =''.join(random.choice(hex_chars) for _ in range(16)) + self.setCache('ldid',did) + return did + + def getd(self,jdata,player): + x = jdata.copy() + x.update({'playerId': str(player['id'])}) + response = self.post(f"{self.host}/api/v1/app/play/movieDetails", headers=self.headers, json=x).json() + return x, response['data']['episodeList'] + + def getv(self,d,c): + f={d['playerId']:''} + g=[] + for i in c: + j=d.copy() + j.update({'episodeId':str(i['id'])}) + g.append(f"{i['episode']}${self.e64(json.dumps(j))}") + f[d['playerId']]='#'.join(g) + return f + + def getlist(self,data): + videos = [] + for i in data: + videos.append({ + 'vod_id': f"{i['id']}@@{i['typeId']}", + 'vod_name': i.get('name'), + 'vod_pic': i.get('cover'), + 'vod_year': i.get('year'), + 'vod_remarks': i.get('totalEpisode') + }) + return videos + + 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 "" \ No newline at end of file diff --git a/py/py_aigua.py b/py/py_aigua.py new file mode 100644 index 0000000..52b0a28 --- /dev/null +++ b/py/py_aigua.py @@ -0,0 +1,536 @@ +# -*- coding: utf-8 -*- +# @Author : Doubebly +# @Time : 2025/3/22 21:03 +import json +import sys +import requests +from lxml import etree, html +import re +sys.path.append('..') +from base.spider import Spider + + +class Spider(Spider): + def getName(self): + return "爱瓜TV" + + def init(self, extend): + self.home_url = 'https://aigua1.com' + self.headers = { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36", + "Referer": "https://aigua1.com/", + } + self.image_domain = "https://vres.wbadl.cn" # 圖片域名 + + self.default_play_url = 'https://sf1-cdn-tos.huoshanstatic.com/obj/media-fe/xgplayer_doc_video/mp4/xgplayer-demo-720p.mp4' + + def getDependence(self): + return [] + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def homeContent(self, filter): + result = { + 'class': [ + {'type_id': '2', 'type_name': '电视剧'}, + {'type_id': '1', 'type_name': '电影'}, + {'type_id': '3', 'type_name': '综艺'}, + {'type_id': '4', 'type_name': '动漫'}, + {'type_id': '32', 'type_name': '纪录片'} + ], + 'filters': { + '1': [ # 电影筛选条件 + {'name': '剧情', 'key': 'class', 'value': [ + {'n': '全部', 'v': '0'}, + {'n': '魔幻', 'v': '179'}, + {'n': '动作', 'v': '154'}, + {'n': '科幻', 'v': '159'}, + {'n': '惊悚', 'v': '156'}, + {'n': '犯罪', 'v': '157'}, + {'n': '剧情', 'v': '161'}, + {'n': '悬疑', 'v': '160'}, + {'n': '奇幻', 'v': '226'}, + {'n': '爱情', 'v': '155'}, + {'n': '战争', 'v': '164'}, + {'n': '恐怖', 'v': '169'}, + {'n': '喜剧', 'v': '153'}, + {'n': '冒险', 'v': '280'}, + {'n': '灾难', 'v': '281'}, + {'n': '歌舞', 'v': '282'}, + {'n': '动画', 'v': '283'}, + {'n': '经典', 'v': '284'}, + {'n': '同性', 'v': '285'}, + {'n': '网络电影', 'v': '286'}, + {'n': '其他', 'v': '178'} + ]}, + {'name': '地区', 'key': 'area', 'value': [ + {'n': '全部', 'v': '0'}, + {'n': '大陆', 'v': '18'}, + {'n': '日本', 'v': '24'}, + {'n': '香港', 'v': '20'}, + {'n': '韩国', 'v': '21'}, + {'n': '台湾', 'v': '23'}, + {'n': '英国', 'v': '22'}, + {'n': '东南亚', 'v': '29'}, + {'n': '欧美', 'v': '19'}, + {'n': '其它', 'v': '30'} + ]}, + {'name': '年份', 'key': 'year', 'value': [ + {'n': '全部', 'v': '0'}, + {'n': '2025', 'v': '131'}, + {'n': '2024', 'v': '130'}, + {'n': '2023', 'v': '129'}, + {'n': '2022', 'v': '21'}, + {'n': '2021', 'v': '22'}, + {'n': '2020', 'v': '23'}, + {'n': '2019', 'v': '24'}, + {'n': '2018', 'v': '25'}, + {'n': '2017', 'v': '26'}, + {'n': '2016', 'v': '27'}, + {'n': '2015', 'v': '28'}, + {'n': '2014', 'v': '29'}, + {'n': '2013', 'v': '30'}, + {'n': '2012', 'v': '31'}, + {'n': '2011', 'v': '32'}, + {'n': '2010', 'v': '33'}, + {'n': '2009', 'v': '34'}, + {'n': '2008', 'v': '35'}, + {'n': '更早', 'v': '127'} + ]}, + {'name': '状态', 'key': 'status', 'value': [ + {'n': '全部', 'v': '0'}, + {'n': '完结', 'v': '1'}, + {'n': '更新中', 'v': '2'} + ]}, + {'name': '排序', 'key': 'by', 'value': [ + {'n': '添加时间', 'v': 'new'}, + {'n': '人气高低', 'v': 'hot'}, + {'n': '评分高低', 'v': 'score'} + ]} + ], + '2': [ # 电视剧筛选条件 + {'name': '剧情', 'key': 'class', 'value': [ + {'n': '全部', 'v': '0'}, + {'n': '短剧', 'v': '364'}, + {'n': '偶像', 'v': '251'}, + {'n': '爱情', 'v': '252'}, + {'n': '言情', 'v': '253'}, + {'n': '古装', 'v': '254'}, + {'n': '历史', 'v': '255'}, + {'n': '玄幻', 'v': '256'}, + {'n': '谍战', 'v': '257'}, + {'n': '历险', 'v': '258'}, + {'n': '都市', 'v': '259'}, + {'n': '科幻', 'v': '260'}, + {'n': '军旅', 'v': '261'}, + {'n': '喜剧', 'v': '262'}, + {'n': '武侠', 'v': '263'}, + {'n': '江湖', 'v': '264'}, + {'n': '罪案', 'v': '265'}, + {'n': '青春', 'v': '266'}, + {'n': '家庭', 'v': '267'}, + {'n': '战争', 'v': '268'}, + {'n': '悬疑', 'v': '269'}, + {'n': '穿越', 'v': '270'}, + {'n': '宫廷', 'v': '271'}, + {'n': '神话', 'v': '272'}, + {'n': '商战', 'v': '273'}, + {'n': '警匪', 'v': '274'}, + {'n': '动作', 'v': '275'}, + {'n': '惊悚', 'v': '276'}, + {'n': '剧情', 'v': '277'}, + {'n': '同性', 'v': '278'}, + {'n': '奇幻', 'v': '279'}, + {'n': '其他', 'v': '231'} + ]}, + {'name': '地区', 'key': 'area', 'value': [ + {'n': '全部', 'v': '0'}, + {'n': '大陆', 'v': '18'}, + {'n': '日本', 'v': '24'}, + {'n': '香港', 'v': '20'}, + {'n': '韩国', 'v': '21'}, + {'n': '台湾', 'v': '23'}, + {'n': '英国', 'v': '22'}, + {'n': '东南亚', 'v': '29'}, + {'n': '欧美', 'v': '19'}, + {'n': '其它', 'v': '30'} + ]}, + {'name': '年份', 'key': 'year', 'value': [ + {'n': '全部', 'v': '0'}, + {'n': '2025', 'v': '131'}, + {'n': '2024', 'v': '130'}, + {'n': '2023', 'v': '129'}, + {'n': '2022', 'v': '21'}, + {'n': '2021', 'v': '22'}, + {'n': '2020', 'v': '23'}, + {'n': '2019', 'v': '24'}, + {'n': '2018', 'v': '25'}, + {'n': '2017', 'v': '26'}, + {'n': '2016', 'v': '27'}, + {'n': '2015', 'v': '28'}, + {'n': '2014', 'v': '29'}, + {'n': '2013', 'v': '30'}, + {'n': '2012', 'v': '31'}, + {'n': '2011', 'v': '32'}, + {'n': '2010', 'v': '33'}, + {'n': '2009', 'v': '34'}, + {'n': '2008', 'v': '35'}, + {'n': '更早', 'v': '127'} + ]}, + {'name': '状态', 'key': 'status', 'value': [ + {'n': '全部', 'v': '0'}, + {'n': '完结', 'v': '1'}, + {'n': '更新中', 'v': '2'} + ]}, + {'name': '排序', 'key': 'by', 'value': [ + {'n': '添加时间', 'v': 'new'}, + {'n': '人气高低', 'v': 'hot'}, + {'n': '评分高低', 'v': 'score'} + ]} + ], + '3': [ # 综艺筛选条件 + {'name': '类型', 'key': 'class', 'value': [ + {'n': '全部', 'v': '0'}, + {'n': '生活', 'v': '229'}, + {'n': '脱口秀', 'v': '228'}, + {'n': '真人秀', 'v': '227'}, + {'n': '访谈', 'v': '168'}, + {'n': '选秀', 'v': '287'}, + {'n': '网综', 'v': '288'}, + {'n': '搞笑', 'v': '289'}, + {'n': '竞技', 'v': '290'}, + {'n': '情感', 'v': '291'}, + {'n': '演唱会', 'v': '292'}, + {'n': '晚会', 'v': '293'}, + {'n': '其他', 'v': '232'} + ]}, + {'name': '地区', 'key': 'area', 'value': [ + {'n': '全部', 'v': '0'}, + {'n': '大陆', 'v': '18'}, + {'n': '日本', 'v': '24'}, + {'n': '香港', 'v': '20'}, + {'n': '韩国', 'v': '21'}, + {'n': '台湾', 'v': '23'}, + {'n': '东南亚', 'v': '29'}, + {'n': '欧美', 'v': '19'}, + {'n': '其它', 'v': '30'} + ]}, + {'name': '年份', 'key': 'year', 'value': [ + {'n': '全部', 'v': '0'}, + {'n': '2025', 'v': '131'}, + {'n': '2024', 'v': '130'}, + {'n': '2023', 'v': '129'}, + {'n': '2022', 'v': '21'}, + {'n': '2021', 'v': '22'}, + {'n': '2020', 'v': '23'}, + {'n': '2019', 'v': '24'}, + {'n': '2018', 'v': '25'}, + {'n': '2017', 'v': '26'}, + {'n': '2016', 'v': '27'}, + {'n': '2015', 'v': '28'}, + {'n': '2014', 'v': '29'}, + {'n': '2013', 'v': '30'}, + {'n': '2012', 'v': '31'}, + {'n': '2011', 'v': '32'}, + {'n': '2010', 'v': '33'}, + {'n': '2009', 'v': '34'}, + {'n': '2008', 'v': '35'}, + {'n': '更早', 'v': '127'} + ]}, + {'name': '状态', 'key': 'status', 'value': [ + {'n': '全部', 'v': '0'}, + {'n': '完结', 'v': '1'}, + {'n': '更新中', 'v': '2'} + ]}, + {'name': '排序', 'key': 'by', 'value': [ + {'n': '添加时间', 'v': 'new'}, + {'n': '人气高低', 'v': 'hot'}, + {'n': '评分高低', 'v': 'score'} + ]} + ], + '4': [ # 动漫筛选条件 + {'name': '类型', 'key': 'class', 'value': [ + {'n': '全部', 'v': '0'}, + {'n': '儿童', 'v': '363'}, + {'n': '格斗', 'v': '167'}, + {'n': '热血', 'v': '165'}, + {'n': '机战', 'v': '166'}, + {'n': '少女', 'v': '294'}, + {'n': '竞技', 'v': '295'}, + {'n': '科幻', 'v': '296'}, + {'n': '爆笑', 'v': '297'}, + {'n': '推理', 'v': '298'}, + {'n': '魔幻', 'v': '299'}, + {'n': '冒险', 'v': '300'}, + {'n': '恋爱', 'v': '301'}, + {'n': '校园', 'v': '302'}, + {'n': '治愈', 'v': '303'}, + {'n': '泡面', 'v': '304'}, + {'n': '穿越', 'v': '305'}, + {'n': '灵异', 'v': '306'}, + {'n': '耽美', 'v': '307'}, + {'n': '剧场版', 'v': '308'}, + {'n': '其他', 'v': '170'} + ]}, + {'name': '地区', 'key': 'area', 'value': [ + {'n': '全部', 'v': '0'}, + {'n': '大陆', 'v': '18'}, + {'n': '日本', 'v': '24'}, + {'n': '香港', 'v': '20'}, + {'n': '韩国', 'v': '21'}, + {'n': '台湾', 'v': '23'}, + {'n': '英国', 'v': '22'}, + {'n': '东南亚', 'v': '29'}, + {'n': '欧美', 'v': '19'}, + {'n': '其它', 'v': '30'} + ]}, + {'name': '年份', 'key': 'year', 'value': [ + {'n': '全部', 'v': '0'}, + {'n': '2025', 'v': '131'}, + {'n': '2024', 'v': '130'}, + {'n': '2023', 'v': '129'}, + {'n': '2022', 'v': '21'}, + {'n': '2021', 'v': '22'}, + {'n': '2020', 'v': '23'}, + {'n': '2019', 'v': '24'}, + {'n': '2018', 'v': '25'}, + {'n': '2017', 'v': '26'}, + {'n': '2016', 'v': '27'}, + {'n': '2015', 'v': '28'}, + {'n': '2014', 'v': '29'}, + {'n': '2013', 'v': '30'}, + {'n': '2012', 'v': '31'}, + {'n': '2011', 'v': '32'}, + {'n': '2010', 'v': '33'}, + {'n': '2009', 'v': '34'}, + {'n': '2008', 'v': '35'}, + {'n': '更早', 'v': '127'} + ]}, + {'name': '状态', 'key': 'status', 'value': [ + {'n': '全部', 'v': '0'}, + {'n': '完结', 'v': '1'}, + {'n': '更新中', 'v': '2'} + ]}, + {'name': '排序', 'key': 'by', 'value': [ + {'n': '添加时间', 'v': 'new'}, + {'n': '人气高低', 'v': 'hot'}, + {'n': '评分高低', 'v': 'score'} + ]} + ], + '32': [ # 纪录片筛选条件 + {'name': '类型', 'key': 'class', 'value': [ + {'n': '全部', 'v': '0'} # HTML未提供具体类型,仅保留“全部” + ]}, + {'name': '地区', 'key': 'area', 'value': [ + {'n': '全部', 'v': '0'} # HTML未提供具体地区,仅保留“全部” + ]}, + {'name': '年份', 'key': 'year', 'value': [ + {'n': '全部', 'v': '0'}, + {'n': '2025', 'v': '131'}, + {'n': '2024', 'v': '130'}, + {'n': '2023', 'v': '129'}, + {'n': '2022', 'v': '21'}, + {'n': '2021', 'v': '22'}, + {'n': '2020', 'v': '23'}, + {'n': '2019', 'v': '24'}, + {'n': '2018', 'v': '25'}, + {'n': '2017', 'v': '26'}, + {'n': '2016', 'v': '27'}, + {'n': '2015', 'v': '28'}, + {'n': '2014', 'v': '29'}, + {'n': '2013', 'v': '30'}, + {'n': '2012', 'v': '31'}, + {'n': '2011', 'v': '32'}, + {'n': '2010', 'v': '33'}, + {'n': '2009', 'v': '34'}, + {'n': '2008', 'v': '35'}, + {'n': '更早', 'v': '127'} + ]}, + {'name': '状态', 'key': 'status', 'value': [ + {'n': '全部', 'v': '0'}, + {'n': '完结', 'v': '1'}, + {'n': '更新中', 'v': '2'} + ]}, + {'name': '排序', 'key': 'by', 'value': [ + {'n': '添加时间', 'v': 'new'}, + {'n': '人气高低', 'v': 'hot'}, + {'n': '评分高低', 'v': 'score'} + ]} + ] + } + } + # print(f"Debug homeContent: {result}") + return result + + def homeVideoContent(self): + d = [] + try: + res = requests.get(self.home_url, headers=self.headers) + res.encoding = 'utf-8' # 根据实际情况设置编码 + root = etree.HTML(res.text.encode('utf-8')) + data_list = root.xpath('//div[@class="video-box-new"]/div[@class="Movie-list"]') + for i in data_list: + d.append( + { + 'vod_id': i.xpath('./a[@class="Movie movie-height"]/@href')[0].split('=')[-1], + 'vod_name': i.xpath('./a[2]/text()')[0].strip(), + 'vod_pic': i.xpath('./a[1]/img/@originalsrc')[0], + 'vod_remarks': i.xpath('./div[@class="Movie-type02"]/div[2]/text()')[0].strip() + } + ) + return {'list': d, 'parse': 0, 'jx': 0} + except Exception as e: + print(e) + return {'list': d, 'parse': 0, 'jx': 0} + + def categoryContent(self, cid, page, filter, ext): + _class = ext.get('class', '0') # 剧情/类型 + _area = ext.get('area', '0') # 地区 + _year = ext.get('year', '0') # 年份 + _status = ext.get('status', '0') # 状态 + _by = ext.get('by', 'new') # 排序 + + url = self.home_url + f'/video/refresh-cate?page_num={page}&sorttype=desc&channel_id={cid}&tag={_class}&area={_area}&year={_year}&status={_status}&sort={_by}&page_size=28' + d = [] + try: + res = requests.get(url, headers=self.headers) + data_list = res.json()['data']['list'] + for i in data_list: + d.append( + { + 'vod_id': i['video_id'], + 'vod_name': i['video_name'], + 'vod_pic': i['cover'], + 'vod_remarks': i['flag'], + } + ) + return {'list': d, 'parse': 0, 'jx': 0} + except Exception as e: + print(e) + return {'list': d, 'parse': 0, 'jx': 0} + + def detailContent(self, did): + ids = did[0] + video_list = [] + url = self.home_url + f'/video/detail?video_id={ids}' + try: + res = requests.get(url, headers=self.headers) + root = etree.HTML(res.text.encode('utf-8')) + # vod_play_from_list = root.xpath('//span[@class="source-item-label"]/text()') + vod_play_from = '$$$'.join(['线路一', '线路二', '线路三']) + # 电视剧 + play_list1 = root.xpath('//ul[contains(@class, "qy-episode-num")]') + # print(play_list1) + # 电影 + # play_list2 = root.xpath('//ul[contains(@class, "qy-play-list")]') + play_list2 = root.xpath('//ul[@id="srctab-1"]') + # print(play_list2) + vod_play_url_list = [] + if len(play_list1) > 0: + play_list = play_list1[:-1] + # print(play_list) + + elif len(play_list2) > 0: + play_list = play_list2 + # print(play_list) + else: + play_list = [] + + for i in play_list: + name_list1 = i.xpath('.//div[@class="select-link"]/text()') + name_list2 = i.xpath('.//span[@class="title-link"]/text()') + name_list3 = i.xpath('./li/text()') + # print(name_list1) + # print(name_list2) + # print(name_list3) + # print(name_list1 + name_list2 + name_list3) + name_list = name_list1 + name_list2 + name_list3 + url_list = i.xpath('./li/@data-chapter-id') + vod_play_url_list.append( + '#'.join([_name.strip() + '$' + f'{ids}-{_url}' for _name, _url in zip(name_list, url_list)]) + ) + + + # print(vod_play_url_list*3) + vod_play_url = '$$$'.join(vod_play_url_list*3) + # print(vod_play_url_list) + video_list.append({ + 'type_name': '', + 'vod_id': ids, + 'vod_name': '', + 'vod_remarks': '', + 'vod_year': '', + 'vod_area': '', + 'vod_actor': '', + 'vod_director': '', + 'vod_content': '', + 'vod_play_from': vod_play_from, + 'vod_play_url': vod_play_url + }) + return {"list": video_list, 'parse': 0, 'jx': 0} + + except Exception as e: + print(f"Error in detailContent: {e}") + return {'list': [], 'msg': str(e)} + + def searchContent(self, key, quick, page='1'): + if str(page) != '1': + return {'list': [], 'parse': 0, 'jx': 0} + url = f'{self.home_url}/video/refresh-video?page_num=1&sorttype=desc&page_size=28&tvNum=7&sort=new&keyword={key}' + d = [] + try: + res = requests.get(url, headers=self.headers) + res.encoding = 'utf-8' + root = etree.HTML(res.text) + data_list = root.xpath('//div[@class="SSbox"]') + for i in data_list: + d.append( + { + 'vod_id': i.xpath('./a/@href')[0].split('=')[-1], + 'vod_name': ''.join(i.xpath('.//span/text()')), + 'vod_pic': i.xpath('./a/img/@originalsrc')[0], + 'vod_remarks': i.xpath('.//div[@class="SSjgTitle"]/text()')[0], + } + ) + return {'list': d, 'parse': 0, 'jx': 0} + except Exception as e: + print(f"Error in searchContent: {e}") + return {'list': [], 'parse': 0, 'jx': 0} + + def playerContent(self, flag, pid, vipFlags): + url = 'https://aigua1.com/video/play-url?videoId=230907&sourceId=0&citycode=HKG&chapterId=2916522' + a = pid.split('-') + videoId = a[0] + chapterId = a[1] + url = self.home_url + f'/video/play-url?videoId={videoId}&sourceId=0&citycode=HKG&chapterId={chapterId}' + try: + res = requests.get(url, headers=self.headers) + play_url_list = res.json()['data']['urlinfo']['resource_url'] + if flag == '线路一': + play_url = play_url_list['1'] + pass + elif flag == '线路二': + play_url = play_url_list['16'] + else: + play_url = play_url_list['21'] + return {'url': play_url, 'parse': 0, 'jx': 0, 'header': self.headers} + except Exception as e: + print(f"Error in playerContent: {e}") + return {'url': self.default_play_url, 'parse': 0, 'jx': 0} + + def localProxy(self, params): + pass + + def destroy(self): + return '正在Destroy' + + def get_data(self): + url = self.home_url + 'https://aigua1.com/video/refresh-cate?page_num=1&sorttype=desc&channel_id=0&tag=0&area=0&year=0&page_size=28&sort=new' + pass + +if __name__ == '__main__': + pass diff --git a/py/py_guowaiju.py b/py/py_guowaiju.py new file mode 100644 index 0000000..eae5fc7 --- /dev/null +++ b/py/py_guowaiju.py @@ -0,0 +1,216 @@ +import re +import sys +from Crypto.Hash import MD5 +sys.path.append("..") +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad, unpad +from urllib.parse import quote, urlparse +from base64 import b64encode, b64decode +import json +import time +from base.spider import Spider + + +class Spider(Spider): + + def init(self, extend=""): + self.host = 'https://guowaiju.com' + self.did=self.getdid() + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def action(self, action): + pass + + def destroy(self): + pass + + def homeContent(self, filter): + data = self.getdata("/api.php/getappapi.index/initV119") + dy = {"class": "类型", "area": "地区", "lang": "语言", "year": "年份", "letter": "字母", "by": "排序", + "sort": "排序"} + filters = {} + classes = [] + json_data = data["type_list"] + homedata = data["banner_list"][8:] + for item in json_data: + if item["type_name"] == "全部": + continue + has_non_empty_field = False + jsontype_extend = json.loads(item["type_extend"]) + homedata.extend(item["recommend_list"]) + jsontype_extend["sort"] = "最新,最热,最赞" + classes.append({"type_name": item["type_name"], "type_id": item["type_id"]}) + for key in dy: + if key in jsontype_extend and jsontype_extend[key].strip() != "": + has_non_empty_field = True + break + if has_non_empty_field: + filters[str(item["type_id"])] = [] + for dkey in jsontype_extend: + if dkey in dy and jsontype_extend[dkey].strip() != "": + values = jsontype_extend[dkey].split(",") + value_array = [{"n": value.strip(), "v": value.strip()} for value in values if + value.strip() != ""] + filters[str(item["type_id"])].append({"key": dkey, "name": dy[dkey], "value": value_array}) + result = {} + result["class"] = classes + result["filters"] = filters + result["list"] = homedata[1:] + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, tid, pg, filter, extend): + body = {"area": extend.get('area', '全部'), "year": extend.get('year', '全部'), "type_id": tid, "page": pg, + "sort": extend.get('sort', '最新'), "lang": extend.get('lang', '全部'), + "class": extend.get('class', '全部')} + result = {} + data = self.getdata("/api.php/getappapi.index/typeFilterVodList", body) + result["list"] = data["recommend_list"] + result["page"] = pg + result["pagecount"] = 9999 + result["limit"] = 90 + result["total"] = 999999 + return result + + def detailContent(self, ids): + body = f"vod_id={ids[0]}" + data = self.getdata("/api.php/getappapi.index/vodDetail", body) + vod = data["vod"] + play = [] + names = [] + for itt in reversed(data["vod_play_list"]): + a = [] + names.append(itt["player_info"]["show"]) + for it in itt['urls']: + it['user_agent'] = itt["player_info"].get("user_agent") + it["parse"] = itt["player_info"].get("parse") + a.append(f"{it['name']}${self.e64(json.dumps(it))}") + play.append("#".join(a)) + vod["vod_play_from"] = "$$$".join(names) + vod["vod_play_url"] = "$$$".join(play) + result = {"list": [vod]} + return result + + def searchContent(self, key, quick, pg="1"): + body = f"keywords={key}&type_id=0&page={pg}" + data = self.getdata("/api.php/getappapi.index/searchList", body) + result = {"list": data["search_list"], "page": pg} + return result + + def playerContent(self, flag, id, vipFlags): + ids = json.loads(self.d64(id)) + h = {"User-Agent": (ids['user_agent'] or "okhttp/3.14.9")} + try: + if re.search(r'url=', ids['parse_api_url']): + data = self.fetch(ids['parse_api_url'], headers=h, timeout=10).json() + url = data.get('url') or data['data'].get('url') + else: + body = f"parse_api={ids.get('parse') or ids['parse_api_url'].replace(ids['url'], '')}&url={quote(self.aes(ids['url'], True))}&token={ids.get('token')}" + b = self.getdata("/api.php/getappapi.index/vodParse", body)['json'] + url = json.loads(b)['url'] + if 'error' in url: raise ValueError(f"解析失败: {url}") + p = 0 + except Exception as e: + print('错误信息:', e) + url, p = ids['url'], 1 + + if re.search(r'\.jpg|\.png|\.jpeg', url): + url = self.Mproxy(url) + result = {} + result["parse"] = p + result["url"] = url + result["header"] = h + return result + + def localProxy(self, param): + headers = {"User-Agent": "okhttp/3.14.9"} + url = self.d64(param['url']) + ydata = self.fetch(url, headers=headers, allow_redirects=False) + data = ydata.content.decode('utf-8') + if ydata.headers.get('Location'): + url = ydata.headers['Location'] + data = self.fetch(url, headers=headers).content.decode('utf-8') + lines = data.strip().split('\n') + last_r = url[:url.rfind('/')] + parsed_url = urlparse(url) + durl = parsed_url.scheme + "://" + parsed_url.netloc + for index, string in enumerate(lines): + if '#EXT' not in string: + if 'http' not in string: + domain = last_r if string.count('/') < 2 else durl + string = domain + ('' if string.startswith('/') else '/') + string + if string.split('.')[-1].split('?')[0] == 'm3u8': + string = self.Mproxy(string) + lines[index] = string + data = '\n'.join(lines) + return [200, "application/vnd.apple.mpegur", data] + + def getdid(self): + did=self.getCache('did') + if not did: + t = str(int(time.time())) + did = self.md5(t) + self.setCache('did', did) + return did + + def aes(self, text, b=None): + key = b"7xv16h7qgkrs9b1p" + cipher = AES.new(key, AES.MODE_CBC, key) + if b: + ct_bytes = cipher.encrypt(pad(text.encode("utf-8"), AES.block_size)) + ct = b64encode(ct_bytes).decode("utf-8") + return ct + else: + pt = unpad(cipher.decrypt(b64decode(text)), AES.block_size) + return pt.decode("utf-8") + + def header(self): + t = str(int(time.time())) + header = { + "User-Agent": "okhttp/3.14.9", "app-version-code": "110", "app-ui-mode": "light", + "app-api-verify-time": t, "app-user-device-id": self.did, + "app-api-verify-sign": self.aes(t, True), + "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8" + } + return header + + def getdata(self, path, data=None): + vdata = self.post(f"{self.host}{path}", headers=self.header(), data=data, timeout=10).json()['data'] + data1 = self.aes(vdata) + return json.loads(data1) + + def Mproxy(self, url): + return f"{self.getProxyUrl()}&url={self.e64(url)}&type=m3u8" + + 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() + + diff --git a/py/py_jianpian.py b/py/py_jianpian.py new file mode 100644 index 0000000..5215f39 --- /dev/null +++ b/py/py_jianpian.py @@ -0,0 +1,202 @@ +# -*- coding: utf-8 -*- +import json +import sys +sys.path.append('..') +from base.spider import Spider +import requests + +class Spider(Spider): + def init(self, extend=""): + self.host = 'https://ev5356.970xw.com' + self.headers = { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 9; V2196A Build/PQ3A.190705.08211809; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/91.0.4472.114 Mobile Safari/537.36;webank/h5face;webank/1.0;netType:NETWORK_WIFI;appVersion:416;packageName:com.jp3.xg3', + 'Referer': self.host + } + self.ihost = self.imgsite() + self.skey = '' + self.stype = '3' + + def getName(self): + return "JianPian" + + def imgsite(self): + data = requests.get(f"{self.host}/api/appAuthConfig", headers=self.headers).json() + host = data['data']['imgDomain'] + return f"https://{host}" if not host.startswith('http') else host + + def homeContent(self, filter): + classes = [ + {'type_id': '1', 'type_name': '电影'}, + {'type_id': '2', 'type_name': '电视剧'}, + {'type_id': '3', 'type_name': '动漫'}, + {'type_id': '4', 'type_name': '综艺'} + ] + filterObj = { + "1": [ + {"key": "cateId", "name": "分类", "value": [ + {"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": "1", "n": "国产"}, {"v": "3", "n": "香港"}, {"v": "6", "n": "台湾"}, + {"v": "5", "n": "美国"}, {"v": "18", "n": "韩国"}, {"v": "2", "n": "日本"} + ]}, + {"key": "year", "name": "年代", "value": [ + {"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": "评分"} + ]} + ], + "2": [ + {"key": "area", "name": "地區", "value": [ + {"v": "1", "n": "国产"}, {"v": "3", "n": "香港"}, {"v": "6", "n": "台湾"}, + {"v": "5", "n": "美国"}, {"v": "18", "n": "韩国"}, {"v": "2", "n": "日本"} + ]}, + {"key": "year", "name": "年代", "value": [ + {"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": "评分"} + ]} + ], + "3": [ + {"key": "area", "name": "地區", "value": [ + {"v": "1", "n": "国产"}, {"v": "3", "n": "香港"}, {"v": "6", "n": "台湾"}, + {"v": "5", "n": "美国"}, {"v": "18", "n": "韩国"}, {"v": "2", "n": "日本"} + ]}, + {"key": "year", "name": "年代", "value": [ + {"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": "评分"} + ]} + ], + "4": [ + {"key": "area", "name": "地區", "value": [ + {"v": "1", "n": "国产"}, {"v": "3", "n": "香港"}, {"v": "6", "n": "台湾"}, + {"v": "5", "n": "美国"}, {"v": "18", "n": "韩国"}, {"v": "2", "n": "日本"} + ]}, + {"key": "year", "name": "年代", "value": [ + {"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": "评分"} + ]} + ] + } + return { + 'class': classes, + 'filters': filterObj + } + + def homeVideoContent(self): + url = f"{self.host}/api/slide/list?pos_id=88" + data = requests.get(url, headers=self.headers).json() + videos = [{ + 'vod_id': item['jump_id'], + 'vod_name': item['title'], + 'vod_pic': f"{self.ihost}{item['thumbnail']}", + 'vod_remarks': "", + 'style': json.dumps({"type": "rect", "ratio": 1.33}) + } for item in data['data']] + return {'list': videos} + + def categoryContent(self, tid, pg, filter, extend): + params = { + 'fcate_pid': tid, + 'page': pg, + 'category_id': extend.get('cateId', ''), + 'area': extend.get('area', ''), + 'year': extend.get('year', ''), + 'type': extend.get('cateId', ''), + 'sort': extend.get('sort', '') + } + url = f"{self.host}/api/crumb/list" + data = requests.get(url, params=params, headers=self.headers).json() + videos = [{ + 'vod_id': item['id'], + 'vod_name': item['title'], + 'vod_pic': f"{self.ihost}{item['path']}", + 'vod_remarks': item['mask'], + 'vod_year': "" + } for item in data['data']] + return { + 'list': videos, + 'page': pg, + 'pagecount': 99999, + 'limit': 15, + 'total': 99999 + } + + def detailContent(self, ids): + id = ids[0] + url = f"{self.host}/api/video/detailv2?id={id}" + data = requests.get(url, headers=self.headers).json() + res = data['data'] + + play_from = ['边下边播'] + play_url = [] + + # 寻找并处理“常规线路” + for source in res.get('source_list_source', []): + if source['name'] == '常规线路': + parts = [f"{part.get('source_name', part.get('weight', ''))}${part['url']}" for part in source.get('source_list', [])] + play_url.append('#'.join(parts)) + break # 找到后立即退出循环 + + vod = { + 'vod_id': id, + 'type_name': '/'.join([t['name'] for t in res.get('types', [])]), + 'vod_year': res.get('year', ''), + 'vod_area': res.get('area', ''), + 'vod_remarks': res.get('mask', ''), + 'vod_content': res.get('description', ''), + 'vod_play_from': '$$$'.join(play_from), + 'vod_play_url': '$$$'.join(play_url) + } + return {'list': [vod]} + + def playerContent(self, flag, id, vipFlags): + if ".m3u8" in id: + return {'parse': 0, 'url': id} + else: + return {'parse': 0, 'url': f"tvbox-xg:{id}"} + + def searchContent(self, key, quick, pg="1"): + url = f"{self.host}/api/v2/search/videoV2" + params = {'key': key, 'category_id': 88, 'page': pg, 'pageSize': 20} + data = requests.get(url, params=params, headers=self.headers).json() + videos = [{ + 'vod_id': item['id'], + 'vod_name': item['title'], + 'vod_pic': f"{self.ihost}{item['thumbnail']}", + 'vod_remarks': item.get('mask', ''), + 'vod_year': "" + } for item in data['data']] + return { + 'list': videos, + 'limit': 20 + } + + def isVideoFormat(self, url): pass + def manualVideoCheck(self): pass + def destroy(self): pass + def localProxy(self, param): pass + def liveContent(self, url): pass \ No newline at end of file diff --git a/py/py_jieyingshi.py b/py/py_jieyingshi.py new file mode 100644 index 0000000..e4820bf --- /dev/null +++ b/py/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/py/py_电影猎手.py b/py/py_电影猎手.py new file mode 100644 index 0000000..1a6a4d7 --- /dev/null +++ b/py/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/py/sync-pg.py b/py/sync-pg.py new file mode 100644 index 0000000..4828b6a --- /dev/null +++ b/py/sync-pg.py @@ -0,0 +1,660 @@ +# -*- coding:utf-8 -*- +from asyncio import CancelledError +from telethon.errors import FileReferenceExpiredError +from telethon.tl.types import MessageMediaDocument +from telethon import TelegramClient +from typing import Union +import os +import re +import sys +import git +import json +import requests +import subprocess +import platform +import demoji +from tqdm import tqdm +import ssl + +# API 密钥 +PHONE = os.environ["PHONE"] +API_ID = os.environ["API_ID"] +API_HASH = os.environ["API_HASH"] +GIT_TOKEN = os.environ["GIT_TOKEN"] + +ssl._create_default_https_context = ssl._create_unverified_context + +keep = ['TG豆瓣', '网盘及彈幕配置', '荐片', '🐼️┃电视┃直播', '115云盘分享', '南瓜', 'TG频道搜索', 'TG群组搜索', '蜡笔|网盘', '小米UC网盘', '小米|网盘', '玩偶哥哥|网盘', '网盘分享合集', '阿里云盘影视分享', '夸克云盘分享', 'UC云盘分享', 'lf_p2p'] + +class TqdmUpTo(tqdm): + total = None + now_size = 0 + bar_format = '{l_bar}{bar}| {n_fmt}/{total_fmt} [已用时:{elapsed}预计剩余:{remaining}, {rate_fmt}{postfix}]' + + def __init__(self, **kwargs): + super().__init__(**kwargs) + self.unit = 'B' + self.unit_scale = True + self.unit_divisor = 1024 + self.bar_format = TqdmUpTo.bar_format + + def update_to(self, current, total): + """更新进度条 + :param current: 已传输 + :param total: 总大小 + :return: + """ + self.total = total + if current != 0: + self.update(current - self.now_size) + self.now_size = current +async def GetChatTitle(client: TelegramClient, chat_id: int) -> Union[str, None]: + entity = await client.get_entity(chat_id) + return entity.title +async def getHistoryMessage(client: TelegramClient, chat_id: int, from_user=None, limit=10): + channel_title = await GetChatTitle(client, chat_id) + if from_user is not None and from_user.isdecimal(): + from_user = int(from_user) + # 取最近2条消息 + messages = client.iter_messages(chat_id, from_user=from_user, limit=limit) + return channel_title, messages +async def GetChatId(client: TelegramClient, chat_id: str) -> int: + # 检测chat_id是id还是昵称 + isId = re.match(r'-?[1-9][0-9]{4,}', chat_id) + if isId is None: + entity = await client.get_entity(chat_id) + chat_id = entity.id + else: + chat_id = int(chat_id) + return chat_id +def shorten_filename(filename, limit=50): + filename = filename.replace('\n', ' ') + """返回合适长度文件名,中间用...显示""" + if len(filename) <= limit: + return filename + else: + return filename[:int(limit / 2) - 3] + '...' + filename[len(filename) - int(limit / 2):] +def GetFileId(message) -> str: + _id = 'unknown' + if hasattr(message.media, 'document'): + _id = message.media.document.id + elif hasattr(message.media, 'photo'): + _id = message.media.photo.id + return str(_id) +def GetFileName(message) -> str: + # 取名优先级,文件名>描述>ID + if message.file.name: + return message.file.name + file_ext = '.jpg' if message.file.ext in ['.jpe','jpeg'] else message.file.ext + if len(message.message) != 0: + sName = shorten_filename(demoji.replace(message.message, '[emoji]')) + return re.sub(r'[\\/:*?"<>|]', '_', sName) + file_ext + return GetFileId(message) + file_ext +# fileExist 检查文件是否存在(文件名和大小都相等),如果不存在重名文件加序号 +def fileExist(file_path: str, file_size): + i = 2 + ix = file_path.rfind('.', 1) + fileName = file_path[:ix] + fileType = file_path[ix:] + temp = file_path + while os.path.exists(temp): + if os.path.getsize(temp) == file_size: + return True, temp + temp = f'{fileName}({i}){fileType}' + i += 1 + return False, temp +def GetFileSuffix(message) -> list: + mime_type = 'unknown/unknown' + if hasattr(message.media, 'document'): + mime_type = message.media.document.mime_type + elif hasattr(message.media, 'photo'): + mime_type = 'image/jpg' + return mime_type.split('/') +async def download_file(client: TelegramClient, channel_title, channel_id, message, old=False, output='PG'): + file_name = GetFileName(message) + file_path = f'{output}/{file_name}' + file_size = message.file.size + ret, file_path = fileExist(file_path, file_size) + if not ret: + # 已经判断文件不存在,并且保证了文件名不重复 + download_path = file_path + '.downloading' + print(f"开始下载:{file_name}") + try: + with TqdmUpTo(total=file_size, bar_format=TqdmUpTo.bar_format, desc=file_name[:10]) as bar: + await message.download_media(download_path, progress_callback=bar.update_to) + except CancelledError: + print("取消下载") + os.remove(download_path) + sys.exit() + except FileReferenceExpiredError: + if old: + print('重试失败,退出下载') + exit(1) + print('下载超时,重试中') + channelData = await client.get_entity(int(channel_id)) + newMessages = client.iter_messages(entity=channelData, ids=message.id) + async for newMessage in newMessages: + await download_file(client, channel_title, channel_id, newMessage, old=True) + except Exception as e: + print("下载出错", e.__class__.__name__) + os.remove(download_path) + else: + os.rename(download_path, file_path) + else: + print(f"文件已存在:{file_path}") + + +class TGDown: + def __init__(self,api_id,api_hash,phone,username,repo,token,filter,filter2,local_target=None,channel=None,tdl=False,tip=None): + self.client = TelegramClient('TG', api_id, api_hash) + self.phone = phone + self.registry = 'github.com' + self.username = username + self.repo = repo + self.token = token + self.branch = 'main' + self.local_target = local_target + self.filter = filter + self.filter2 = filter2 + self.channel = channel + self.tdl = tdl # 加速下载工具 docs.iyear.me/tdl 先tdl login -T code + self.tip = tip # 替换set_version里的newname + self.gh = [ + 'https://gh.clun.top/raw.githubusercontent.com', + ] + + def in_git_exist(self,file): + is_exist = False + file_url = f'https://gh.clun.top/raw.githubusercontent.com/{self.username}/{self.repo}/{self.branch}/{file}' + # 发送 HEAD 请求 + response = requests.head(file_url) + # 检查响应状态码 + if response.status_code == 200: + is_exist = True + return is_exist + def git_clone(self): + self.domain = f'https://{self.token}@{self.registry}/{self.username}/{self.repo}.git' + if os.path.exists(self.repo): + subprocess.call(['rm', '-rf', self.repo]) + try: + print(f'开始克隆:git clone https://{self.registry}/{self.username}/{self.repo}.git') + git.Repo.clone_from(self.domain, to_path=self.repo, depth=1) + except Exception as e: + try: + self.registry = 'https://gh.clun.top/' + self.domain = f'https://{self.token}@{self.registry}/https://github.com/{self.username}/{self.repo}.git' + if os.path.exists(self.repo): + subprocess.call(['rm', '-rf', self.repo]) + repo = git.Repo.clone_from(self.domain, to_path=self.repo, depth=1) + except Exception as e: + print(222222, e) + def get_local_repo(self): + # 打开本地仓库,读取仓库信息 + repo = git.Repo(self.repo) + config_writer = repo.config_writer() + config_writer.set_value('user', 'name', self.username) + config_writer.set_value('user', 'email', self.username) + # 设置 http.postBuffer + config_writer.set_value('http', 'postBuffer', '104857600') + config_writer.release() + # 获取远程仓库的引用 + remote = repo.remote(name='origin') + # 获取远程分支列表 + remote_branches = remote.refs + # 遍历远程分支,查找主分支 + for branch in remote_branches: + if branch.name == 'origin/master' or branch.name == 'origin/main': + self.branch = branch.name.split('/')[-1] + break + # print(f"仓库{self.repo} 主分支为: {self.main_branch}") + return repo + def reset_commit(self,repo): + # 重置commit + try: + os.chdir(self.repo) + # print('开始清理git',os.getcwd()) + repo.git.checkout('--orphan', 'tmp_branch') + repo.git.add(A=True) + repo.git.commit(m="update") + repo.git.execute(['git', 'branch', '-D', self.branch]) + repo.git.execute(['git', 'branch', '-m', self.branch]) + repo.git.execute(['git', 'push', '-f', 'origin', self.branch]) + except Exception as e: + print('git清理异常', e) + def git_push(self,repo): + # 推送并重置commit计数 + print(f'开始推送:git push https://{self.registry}/{self.username}/{self.repo}.git') + try: + repo.git.add(A=True) + repo.git.commit(m="update") + repo.git.push() + self.reset_commit(repo) + except Exception as e: + try: + repo.git.execute(['git', 'push', '--set-upstream', 'origin', self.branch]) + self.reset_commit(repo) + except Exception as e: + print('git推送异常', e) + def set_version(self,filename,targetjson): + newname = self.tip + if not newname: + # 去掉前缀 'pg.' 和后缀 '-.zip',然后替换中间的 '-' 为 '' + match = re.match(self.filter, filename) + if match: + newname = f"{match.group(1)}{match.group(2)}" + # 载入jsm.json文件 + with open(f'{self.local_target}/{targetjson}', 'r', encoding='utf-8') as file: + data = json.load(file) + # logo + data["logo"] = "https://gh.clun.top/raw.githubusercontent.com/fish2018/lib/refs/heads/main/imgs/pg.gif" + # 配置parses解析器 + data["parses"] = [ + { + "name": "聚合", + "type": 3, + "url": "Demo" + }, + { + "name": "web", + "type": 3, + "url": "Web" + }, + { + "name": "看看", + "type": 0, + "url": "https://jx.m3u8.pw/?url=", + "ext": { + "flag": [ + "qq", + "腾讯", + "qiyi", + "爱奇艺", + "奇艺", + "youku", + "优酷", + "mgtv", + "芒果", + "imgo", + "letv", + "乐视", + "pptv", + "PPTV", + "sohu", + "bilibili", + "哔哩哔哩", + "哔哩" + ], + "header": { + "User-Agent": "okhttp/4.1.0" + } + } + }, + { + "name": "FreeOK", + "type": 0, + "url": "https://play.86516.tk/OKPlayer/?url=", + "ext": { + "flag": [ + "qq", + "腾讯", + "qiyi", + "爱奇艺", + "奇艺", + "youku", + "优酷", + "mgtv", + "芒果", + "imgo", + "letv", + "乐视", + "pptv", + "PPTV", + "sohu", + "bilibili", + "哔哩哔哩", + "哔哩" + ], + "header": { + "User-Agent": "okhttp/4.1.0" + } + } + }, + { + "name": "free", + "type": 0, + "url": "https://h5.freejson.xyz/player/?url=", + "ext": { + "flag": [ + "qq", + "腾讯", + "qiyi", + "爱奇艺", + "奇艺", + "youku", + "优酷", + "mgtv", + "芒果", + "imgo", + "letv", + "乐视", + "pptv", + "PPTV", + "sohu", + "bilibili", + "哔哩哔哩", + "哔哩" + ], + "header": { + "User-Agent": "okhttp/4.1.0" + } + } + } + ] + # 配置rules,添加域名 + hosts = ["content.stream-link.org"] + data["rules"][0]["hosts"].extend(hosts) + # 配置lives直播 + lives_extend = [ + { + "name": "stream直播", + "url": "http://127.0.0.1:10079/p/0/proxy/https://www.stream-link.org/stream-link.m3u", + "type": 0, + "ua": "okhttp/3.15", + "epg": "http://127.0.0.1:10079/p/0/proxy/http://content.stream-link.org/epg/guide.xml/?ch={name}&date={date}", + "logo": "http://127.0.0.1:10079/p/0/proxy/http://content.stream-link.org/epg/guide.xml/logo/{name}.png" + }] + data["lives"] = data["lives"]+lives_extend + # 查找直播转点播 + live2vod_index = next((index for (index, d) in enumerate(data["sites"]) if d["key"] == "直播转点播"), None) + if live2vod_index is not None: + data["sites"][live2vod_index]["ext"] = "../feimaolive.json" + # 查找115Share + share115_index = next((index for (index, d) in enumerate(data["sites"]) if d["key"] == "115Share"), None) + if share115_index is not None: + data["sites"][share115_index]["ext"] = "./lib/tokenm.json$$$https://ghp.ci/https://raw.githubusercontent.com/fish2018/lib/refs/heads/main/txt/115share.txt$$$db$$$1" + # 查找 "南瓜" 对象并替换 + nangua_index = next((index for (index, d) in enumerate(data["sites"]) if d["key"] == "NanGua"), None) + if nangua_index is not None: + item = { + "key": "nangua", + "name": "南瓜", + "type": 3, + "playerType": "2", + "api": "http://js.xn--z7x900a.com/js/ng_open.js" + } + data["sites"][nangua_index] = item + # 查找 "豆瓣" 对象并追加新的对象 + douban_index = next((index for (index, d) in enumerate(data["sites"]) if d["key"] == "豆瓣"), None) + if douban_index is not None: + item = { + "key": "https://github.com/fish2018/PG", + "name": newname, + "type": 3, + "api": "csp_Douban", + "searchable": 1, + "changeable": 1, + "indexs": 1, + "ext": "./lib/douban.json" + } + data["sites"].insert(douban_index + 1, item) + # 查找"TG豆瓣" 对象并更新 "ext" + TGDouban_index = next((index for (index, d) in enumerate(data["sites"]) if d["key"] == "TGDouban"), None) + if TGDouban_index is not None: + data["sites"][TGDouban_index]["ext"] = { + "token":"./lib/tokenm.json", + "json":"./lib/tgsearch.json", + "keywords":"名称,片名,推荐", + "tgsearch_url":"http://127.0.0.1:10199", + "tgsearch_media_url":"http://127.0.0.1:10199", + "channellist":"alypzyhzq|1000,Mbox115|1000,shares_115|1000,Quark_Share_Channel|1000,Aliyundrive_Share_Channel|1000,wanwansubchat|1000,tgsearchers", + "proxy":"noproxy", + "douban":"./lib/douban.json", + "danmu":False + } + # 查找 "TG搜索Local" 对象并更新 "ext" + tg_localsearch_index = next((index for (index, d) in enumerate(data["sites"]) if d["key"] == "TGYunPanLocal"),None) + if tg_localsearch_index is not None: + data["sites"][tg_localsearch_index]["ext"] = { + "token":"./lib/tokenm.json", + "json":"./lib/tgsearch.json", + "keywords":"名称,片名,推荐", + "tgsearch_url":"http://127.0.0.1:10199", + "tgsearch_media_url":"http://127.0.0.1:10199", + "channellist":"guaguale115,dianyingshare,XiangxiuNB,kuakeyun", + "proxy":"proxy", + "danmu": True + } + # 查找 "TG网盘搜索" 对象并更新 "ext" + tg_search_index = next((index for (index, d) in enumerate(data["sites"]) if d["key"] == "TGYunPan"), None) + if tg_search_index is not None: + data["sites"][tg_search_index]["ext"] = { + "token":"./lib/tokenm.json", + "json":"./lib/tgsearch.json", + "keywords":"名称,片名,推荐", + "tgsearch_url":"http://127.0.0.1:10199", + "tgsearch_media_url":"http://127.0.0.1:10199", + "channellist":"XiangxiuNB|1000,Aliyundrive_Share_Channel|1000,Quark_Share_Channel|1000,yunpanshare|1000,Aliyun_4K_Movies|1000,hao115|1000,alyp_4K_Movies|1000", + "proxy":"noproxy", + "danmu": True + } + with open(f'{self.local_target}/{targetjson}', 'w', encoding='utf-8') as file: + json.dump(data, file, indent=4, ensure_ascii=False) + items = [ + { + "key": "lf_js_p2p", + "name": "lf_p2p", + "type": 3, + "searchable": 1, + "changeable": 1, + "quickSearch": 1, + "filterable": 1, + "api": "https://ghp.ci/https://raw.githubusercontent.com/fish2018/lib/refs/heads/main/js/lf_p2p2_min.js", + "ext": "18+" + }, + { + "key": "小米UC", + "name": "小米UC网盘", + "type": 3, + "api": "csp_Wobg", + "quickSearch": 1, + "changeable": 1, + "filterable": 1, + "timeout": 60, + "ext": "./lib/tokenm.json$$$http://www.mucpan.cc/$$$noproxy$$$1$$$./lib/wogg.json$$$" + } + ] + for item in items: + data["sites"].insert(tg_search_index + 1, item) + # 精简排序 + # 用于存放筛选后的结果 + items = data["sites"] + filtered_items = [] + # 保留第二个元素 + second_item = items[1] + # 遍历 keep 列表,并根据其中的元素筛选 items 中的数据 + for name in keep: + for item in items: + if item['name'] == name: + filtered_items.append(item) + break + # 将第二个元素始终放在第二个位置 + if second_item in filtered_items: + filtered_items.remove(second_item) + # 在第二个位置插入第二个元素 + filtered_items.insert(1, second_item) + # 输出最终结果 + data["sites"] = filtered_items + # 替换壁纸 + data["wallpaper"] = "https://jiduo.serv00.net/image" + # 将更新后的数据写回jsm.json文件 + with open(f'{self.local_target}/{targetjson}-custom', 'w', encoding='utf-8') as file: + json.dump(data, file, indent=4, ensure_ascii=False) + def readme(self,pg_zip_name='',tgsearch_zip_name='',pg_message='',tgsearch_message=''): + readme = f'{self.repo}/README.md' + # 读取 README.md 文件内容 + with open(readme, 'r') as file: + content = file.read() + + if pg_zip_name: + # 替换PG包下载链接 + def replace_urls(match): + new_urls = [f"{gh_base}/{self.username}/{self.repo}/{self.branch}/{pg_zip_name}" for gh_base in self.gh] + return '```bash\n' + '\n'.join(new_urls) + '\n```' + content = re.sub( + r'```bash\s*\n(.*?)\s*```', + replace_urls, + content, + flags=re.DOTALL + ) + # 替换PG包更新说明 + def replace_pg_message(match): + return f"{match.group(1)}{pg_message}{match.group(3)}" + content = re.sub( + r'(```text\s*\n)(.*?)(\s*\n```)', + replace_pg_message, + content, + flags=re.DOTALL + ) + + if tgsearch_zip_name: + # 替换tgsearch包 + def replace_urls(match): + new_urls = [f"{gh_base}/{self.username}/{self.repo}/{self.branch}/{tgsearch_zip_name}" for gh_base in self.gh] + return '```shell\n' + '\n'.join(new_urls) + '\n```' + content = re.sub( + r'```shell\s*\n(.*?)\s*```', + replace_urls, + content, + flags=re.DOTALL + ) + # 替换tgsearch包更新说明 + def replace_tgsearch_message(match): + return f"{match.group(1)}{tgsearch_message}{match.group(3)}" + content = re.sub( + r'(```yaml\s*\n)(.*?)(\s*\n```)', + replace_tgsearch_message, + content, + flags=re.DOTALL + ) + + # 写回新的 README.md 文件内容 + with open(readme, 'w') as file: + file.write(content) + + async def down_group(self, client: TelegramClient, chat_id, from_user=None): + chat_id = await GetChatId(client, chat_id) + channel_title, messages = await getHistoryMessage(client, chat_id, from_user=from_user) + # 正则表达式 + has_clone = False + pg_hit = False + tgsearch_hit = False + pg_zip_name='' + tgsearch_zip_name='' + pg_message='' + tgsearch_message='' + has_update = False + async for message in messages: + if message is None: + continue + # 判定消息中是否存在媒体内容 MessageMediaDocument:文件 + if not isinstance(message.media, (MessageMediaDocument)): + continue + # 匹配zip,如果是pg,如果是tgsearch,下载 + for pattern in [self.filter,self.filter2]: + match = re.match(pattern, message.file.name) + if match: + # hit说明已经更新过 + if (message.file.name.split(".")[0] == 'pg' and pg_hit) or (message.file.name.split(".")[0] == 'tgsearchpack' and tgsearch_hit): + print(f'忽略老版本包: {message.file.name}') + continue + # 检测github上是否已经存在该包 + is_exist = self.in_git_exist(message.file.name) + if is_exist: + print(f'{message.file.name} 已经是最新包') + # 已经更新过的包标记hit + if message.file.name.split(".")[0] == 'pg': + pg_hit = True + elif message.file.name.split(".")[0] == 'tgsearchpack': + tgsearch_hit = True + else: + print(f'发现更新包:{message.file.name}') + has_update = True + if not has_clone: + self.git_clone() + if os.path.exists(self.repo): + has_clone = True + subprocess.call(f'rm -rf {self.repo}/{message.file.name.split(".")[0]}*.zip', shell=True) + if self.tdl: + cmd = f'tdl dl -i zip -u https://t.me/{self.channel.split("/")[-1]}/{message.id} -d {self.repo} --template "{{{{ .FileName }}}}"' + print(cmd) + subprocess.call(f'{cmd}', shell=True) + else: + await download_file(client, channel_title, chat_id, message, self.repo) + print(f'TG群组({channel_title}) - 本地包{message.file.name}下载完成') + # 更新本地目录中的pg包并解压 + if message.file.name.split(".")[0] == 'pg': + pg_zip_name = message.file.name + pg_message=message.message + pg_hit = True + if self.local_target: + try: + print(f'开始更新{self.local_target}目录PG在线接口到最新版本') + # 修改配置 + sed_command = f'sed -i "" "s@http://127.0.0.1:10199/@http://tg.fish2018.us.kg/@g" lib/tokenm.json' if platform.system() == "Darwin" else f'sed -i "s@http://127.0.0.1:10199/@http://tg.fish2018.us.kg/@g" lib/tokenm.json' + subprocess.call( + f'rm -rf {self.local_target}/* && ' + f'cp -a {self.repo}/{message.file.name} {self.local_target}/ && ' + f'cd {self.local_target} && ' + f'unzip -o -q {message.file.name} && ' + f'cp -a lib/tokentemplate.json lib/tokenm.json && ' + f'rm -rf {message.file.name} && ' + f'{sed_command}', + shell=True + ) + # 在jsm.json中加入版本号 + self.set_version(filename=message.file.name, targetjson='jsm.json') + except Exception as e: + print(e) + elif message.file.name.split(".")[0] == 'tgsearchpack': + tgsearch_zip_name = message.file.name + tgsearch_message = message.message + tgsearch_hit = True + # 更新服务器tgsearch二进制包 + print(f'更新tgsearch二进制包,重启supervisor') + subprocess.call( + f'supervisorctl stop tg && ' + f'cp -a {self.repo}/{tgsearch_zip_name} ./ && ' + f'unzip -o {tgsearch_zip_name} && ' + f'rm -rf runtgsearch.sh tgsearch.arm32v7 tgsearch.arm64v8 tgsearch.exe && ' + f'chmod +x tgsearch.x86_64 && ' + f'supervisorctl start tg &&' + f'rm -rf {tgsearch_zip_name}', + shell=True + ) + + if has_update: + # 更新README.md + self.readme(pg_zip_name, tgsearch_zip_name, pg_message, tgsearch_message) + # 推送 + repo = self.get_local_repo() + self.git_push(repo) + + def run(self): + with self.client.start(phone=self.phone): + self.client.loop.run_until_complete(self.down_group(self.client, self.channel)) + + +if __name__ == '__main__': + api_id = {API_ID} + api_hash = '{API_HASH}' + phone = '{PHONE}' + channel = 'https://t.me/PandaGroovePG' + username = 'cluntop' # github username + repo = 'cluntop.github.io' # github repo + token = '{GIT_TOKEN}' # github token + local_target = './' # zip解压提供在线接口的目录 + filter = r"pg\.(\d{8})-(\d{4})\.zip" + filter2 = r'tgsearchpack\.(\d{8})-(\d{4})\.zip' + tdl = False # 加速TG文件下载的工具 + tip = None + TGDown(api_id,api_hash,phone,username,repo,token,filter,filter2,local_target,channel,tdl,tip).run() diff --git a/py/三号动漫APP.py b/py/三号动漫APP.py new file mode 100644 index 0000000..ded29cb --- /dev/null +++ b/py/三号动漫APP.py @@ -0,0 +1,175 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import json +import sys +from base64 import b64decode, b64encode +from Crypto.Cipher import AES +from Crypto.Util.Padding import unpad, pad +from concurrent.futures import ThreadPoolExecutor +sys.path.append('..') +from base.spider import Spider + + +class Spider(Spider): + + def init(self, extend=""): + self.host = self.gethost() + self.hkey,self.playerinfos=self.getinfo() + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + headers = { + 'User-Agent': 'Dalvik/1.4.0 (Linux; U; Android 11; Redmi Build/M2012K10C)', + 'version': '1.4.0' + } + + keys=['rectangleadsadxa','aassddwwxxllsx1x'] + + def homeContent(self, filter): + cdata=self.getdata('/api.php/v1.home/types') + result = {} + classes = [] + filters = {} + for i in cdata['data']['types'][1:]: + classes.append({ + 'type_id': i['type_id'], + 'type_name': i['type_name'] + }) + with ThreadPoolExecutor(max_workers=len(classes)) as executor: + futures = [executor.submit(self.getf, i['type_id']) + for i in classes] + for future in futures: + try: + type_id, filter_data = future.result() + if len(filter_data):filters[type_id] = filter_data + except Exception as e: + print(f'处理筛选数据失败: {e}') + result['class'] = classes + result['filters'] = filters + return result + + def homeVideoContent(self): + data=self.getdata('/api.php/v1.home/data?type_id=26') + return {'list':data['data']['banners']} + + def categoryContent(self, tid, pg, filter, extend): + json_data = { + 'area': extend.get('area', '全部地区'), + 'lang': extend.get('lang', '全部语言'), + 'rank': extend.get('rank', '最新'), + 'type': extend.get('type', '全部类型'), + 'type_id': int(tid), + 'year': extend.get('year', '全部年代'), + } + data=self.getdata(f'/api.php/v1.classify/content?page={pg}',method=False,json_data=json_data) + result = {} + result['list'] = data['data']['video_list'] + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + data=self.getdata(f'/api.php/v1.player/details?vod_id={ids[0]}') + vod = data['data']['detail'] + plist,names = [],[] + for i in vod['play_url_list']: + names.append(i['show']) + plist.append('#'.join([f"{j['name']}${i['from']}@@{j['url']}" for j in i['urls']])) + vod.pop('play_url_list', None) + vod.update({'vod_play_from': '$$$'.join(names), 'vod_play_url': '$$$'.join(plist)}) + return {'list':[vod]} + + def searchContent(self, key, quick, pg="1"): + data=self.getdata(f'/api.php/v1.search/data?wd={key}&type_id=0&page={pg}') + return {'list': data['data']['search_data'], 'page': pg} + + def playerContent(self, flag, id, vipFlags): + ids=id.split('@@') + try: + body={'parse':self.getparse(ids[0]),'url':ids[-1],'matching':''} + data=self.getdata(f'/shark/api.php?action=parsevod',method=False,data=body) + url=data.get('url') or data['data'].get('url') + if not url: + raise ValueError("解析失败") + p=0 + except: + p,url = 1,ids[-1] + return {'parse': p, 'url': url, 'header': {'User-Agent':'aliplayer(appv=1.4.0&av=6.16.0&av2=6.16.0_40316683&os=android&ov=11&dm=M2012K10C)'}} + + def localProxy(self, param): + pass + + def getparse(self,id): + for i in self.playerinfos: + if i['playername']==id: + j= i['playerjiekou'] + return self.aes(j,self.hkey) + return '' + + def gethost(self): + headers = { + 'User-Agent': 'okhttp/4.11.0', + 'Connection': 'Keep-Alive' + } + response = self.fetch('https://shopv1.oss-accelerate.aliyuncs.com/api.txt', headers=headers).text + host=json.loads(self.aes(response.strip(),self.keys[0]))[0] + return host + + def getinfo(self): + data=self.post(f'{self.host}/shark/api.php?action=configs',headers=self.headers,data={'username':'','token':''}).text + datas=json.loads(self.aes(data)) + hkey = datas['config']['hulue'].split('&')[0] + playerinfos = datas['playerinfos'] + return hkey,playerinfos + + def getdata(self,parh,method=True,data=None,json_data=None): + url = f'{self.host}{parh}' + if method: + response = self.fetch(url, headers=self.headers).text + else: + response = self.post(url, headers=self.headers, data=data, json=json_data).text + return json.loads(self.aes(response)) + + def getf(self, type_id): + try: + fdata = self.getdata(f'/api.php/v1.classify/types?type_id={type_id}') + filter_list = [] + for key, value in fdata['data'].items(): + if len(value): + filter_list.append({ + 'key': key.split('_')[0], + 'name': key.split('_')[0], + 'value': [{'n': j['type_name'], 'v': j['type_name']} for j in value if j.get('type_name')] + }) + return type_id, filter_list + except Exception as e: + print(f'获取type_id={type_id}的筛选数据失败: {e}') + return type_id, [] + + def aes(self, word,key=None, b=True): + if not key:key=self.keys[1] + cipher = AES.new(key.encode(), AES.MODE_ECB) + word = word.encode('utf-8-sig').decode('ascii', errors='ignore') + if b: + word = b64decode(word) + decrypted = cipher.decrypt(word) + word = unpad(decrypted, AES.block_size).decode() + else: + padded = pad(word.encode(), AES.block_size) + encrypted = cipher.encrypt(padded) + word = b64encode(encrypted).decode() + return word + diff --git a/py/两个BT.py b/py/两个BT.py new file mode 100644 index 0000000..1d76f12 --- /dev/null +++ b/py/两个BT.py @@ -0,0 +1,599 @@ +# coding=utf-8 +# !/usr/bin/python +import sys +sys.path.append('..') +from base.spider import Spider +import json +import time +import urllib.parse +import re +import base64 + +class Spider(Spider): + + def getName(self): + return "两个BT" + + def init(self, extend=""): + self.host = "https://www.bttwoo.com" + self.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', + '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', + 'Connection': 'keep-alive', + 'Referer': self.host + } + self.log(f"两个BT爬虫初始化完成,主站: {self.host}") + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def homeContent(self, filter): + """首页内容 - TVBox标准实现""" + result = {} + + # 1. 定义分类 - 基于实际网站结构 + classes = [ + {'type_id': 'movie_bt_tags/xiju', 'type_name': '喜剧'}, + {'type_id': 'movie_bt_tags/aiqing', 'type_name': '爱情'}, + {'type_id': 'movie_bt_tags/adt', 'type_name': '冒险'}, + {'type_id': 'movie_bt_tags/at', 'type_name': '动作'}, + {'type_id': 'movie_bt_tags/donghua', 'type_name': '动画'}, + {'type_id': 'movie_bt_tags/qihuan', 'type_name': '奇幻'}, + {'type_id': 'movie_bt_tags/xuanni', 'type_name': '悬疑'}, + {'type_id': 'movie_bt_tags/kehuan', 'type_name': '科幻'}, + {'type_id': 'movie_bt_tags/juqing', 'type_name': '剧情'}, + {'type_id': 'movie_bt_tags/kongbu', 'type_name': '恐怖'}, + {'type_id': 'meiju', 'type_name': '美剧'}, + {'type_id': 'gf', 'type_name': '高分电影'} + ] + result['class'] = classes + + # 2. 添加筛选配置 + result['filters'] = self._get_filters() + + # 3. 获取首页推荐内容 + try: + rsp = self.fetch(self.host, headers=self.headers) + doc = self.html(rsp.text) + videos = self._get_videos(doc, limit=50) + result['list'] = videos + except Exception as e: + self.log(f"首页获取出错: {str(e)}") + result['list'] = [] + + return result + + def homeVideoContent(self): + """兼容性方法 - 提供分类定义""" + return { + 'class': [ + {'type_id': 'movie_bt_tags/xiju', 'type_name': '喜剧'}, + {'type_id': 'movie_bt_tags/aiqing', 'type_name': '爱情'}, + {'type_id': 'movie_bt_tags/adt', 'type_name': '冒险'}, + {'type_id': 'movie_bt_tags/at', 'type_name': '动作'}, + {'type_id': 'movie_bt_tags/donghua', 'type_name': '动画'}, + {'type_id': 'movie_bt_tags/qihuan', 'type_name': '奇幻'}, + {'type_id': 'movie_bt_tags/xuanni', 'type_name': '悬疑'}, + {'type_id': 'movie_bt_tags/kehuan', 'type_name': '科幻'}, + {'type_id': 'movie_bt_tags/juqing', 'type_name': '剧情'}, + {'type_id': 'movie_bt_tags/kongbu', 'type_name': '恐怖'}, + {'type_id': 'meiju', 'type_name': '美剧'}, + {'type_id': 'gf', 'type_name': '高分电影'} + ], + 'filters': self._get_filters() + } + + def categoryContent(self, tid, pg, filter, extend): + """分类内容 - 支持筛选功能""" + try: + # 合并filter和extend参数 + if filter and isinstance(filter, dict): + if not extend: + extend = {} + extend.update(filter) + + self.log(f"分类请求: tid={tid}, pg={pg}, extend={extend}") + + url = self._build_url(tid, pg, extend) + if not url: + return {'list': []} + + rsp = self.fetch(url, headers=self.headers) + doc = self.html(rsp.text) + videos = self._get_videos(doc, limit=20) + + return { + 'list': videos, + 'page': int(pg), + 'pagecount': 999, + 'limit': 20, + 'total': 19980 + } + except Exception as e: + self.log(f"分类内容获取出错: {str(e)}") + return {'list': []} + + def searchContent(self, key, quick, pg="1"): + """搜索功能 - 智能过滤""" + try: + search_url = f"{self.host}/xssssearch?q={urllib.parse.quote(key)}" + if pg and pg != "1": + search_url += f"&p={pg}" + + self.log(f"搜索URL: {search_url}") + rsp = self.fetch(search_url, headers=self.headers) + doc = self.html(rsp.text) + + videos = [] + seen_ids = set() + + # 搜索结果选择器 + elements = doc.xpath('//li[contains(@class,"") and .//a[contains(@href,"/movie/")]]') + self.log(f"找到 {len(elements)} 个搜索结果元素") + + for elem in elements: + video = self._extract_video_info(elem, is_search=True) + if video and video['vod_id'] not in seen_ids: + # 添加相关性检查 + if self._is_relevant_search_result(video['vod_name'], key): + videos.append(video) + seen_ids.add(video['vod_id']) + self.log(f"✅ 相关视频: {video['vod_name']} (ID: {video['vod_id']})") + else: + self.log(f"❌ 过滤无关: {video['vod_name']} (搜索: {key})") + + self.log(f"最终搜索结果: {len(videos)} 个视频") + return {'list': videos} + except Exception as e: + self.log(f"搜索出错: {str(e)}") + return {'list': []} + + def detailContent(self, ids): + """详情页面""" + try: + vid = ids[0] + detail_url = f"{self.host}/movie/{vid}.html" + rsp = self.fetch(detail_url, headers=self.headers) + doc = self.html(rsp.text) + + video_info = self._get_detail(doc, vid) + return {'list': [video_info]} if video_info else {'list': []} + except Exception as e: + self.log(f"详情获取出错: {str(e)}") + return {'list': []} + + def playerContent(self, flag, id, vipFlags): + """播放链接""" + try: + self.log(f"获取播放链接: flag={flag}, id={id}") + + # 解码Base64播放ID + try: + decoded_id = base64.b64decode(id).decode('utf-8') + self.log(f"解码播放ID: {decoded_id}") + except: + decoded_id = id + + play_url = f"{self.host}/v_play/{id}.html" + + # 返回播放页面URL,让播放器处理 + return {'parse': 1, 'playUrl': '', 'url': play_url} + except Exception as e: + self.log(f"播放链接获取出错: {str(e)}") + return {'parse': 1, 'playUrl': '', 'url': f"{self.host}/v_play/{id}.html"} + + # ========== 辅助方法 ========== + + def _get_filters(self): + """获取筛选配置 - TVBox兼容版""" + base_filters = [ + { + 'key': 'area', + 'name': '地区', + 'value': [ + {'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': '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 = {} + category_ids = [ + 'movie_bt_tags/xiju', 'movie_bt_tags/aiqing', 'movie_bt_tags/adt', + 'movie_bt_tags/at', 'movie_bt_tags/donghua', 'movie_bt_tags/qihuan', + 'movie_bt_tags/xuanni', 'movie_bt_tags/kehuan', 'movie_bt_tags/juqing', + 'movie_bt_tags/kongbu', 'meiju', 'gf' + ] + + for category_id in category_ids: + filters[category_id] = base_filters + + return filters + + def _build_url(self, tid, pg, extend): + """构建URL - 支持筛选""" + try: + # 基础分类URL映射 + if tid.startswith('movie_bt_tags/'): + url = f"{self.host}/{tid}" + elif tid == 'meiju': + url = f"{self.host}/meiju" + elif tid == 'gf': + url = f"{self.host}/gf" + else: + url = f"{self.host}/{tid}" + + # 添加分页 + if pg and pg != '1': + if '?' in url: + url += f"&paged={pg}" + else: + url += f"?paged={pg}" + + return url + except Exception as e: + self.log(f"构建URL出错: {str(e)}") + return f"{self.host}/movie_bt_tags/xiju" + + def _get_videos(self, doc, limit=None): + """获取视频列表""" + try: + videos = [] + seen_ids = set() + + # 尝试多种选择器 + selectors = [ + '//li[.//a[contains(@href,"/movie/")]]', + '//div[contains(@class,"item")]//li[.//a[contains(@href,"/movie/")]]' + ] + + for selector in selectors: + elements = doc.xpath(selector) + if elements: + for elem in elements: + video = self._extract_video_info(elem) + if video and video['vod_id'] not in seen_ids: + videos.append(video) + seen_ids.add(video['vod_id']) + break + + return videos[:limit] if limit and videos else videos + except Exception as e: + self.log(f"获取视频列表出错: {str(e)}") + return [] + + def _extract_video_info(self, element, is_search=False): + """提取视频信息""" + try: + # 提取链接 + links = element.xpath('.//a[contains(@href,"/movie/")]/@href') + if not links: + return None + + link = links[0] + if link.startswith('/'): + link = self.host + link + + vod_id = self.regStr(r'/movie/(\d+)\.html', link) + if not vod_id: + return None + + # 提取标题 + title_selectors = [ + './/h3/a/text()', + './/h3/text()', + './/a/@title', + './/a/text()' + ] + title = '' + for selector in title_selectors: + titles = element.xpath(selector) + for t in titles: + if t and t.strip() and len(t.strip()) > 1: + title = t.strip() + break + if title: + break + + if not title: + return None + + # 提取图片 + pic = self._extract_image(element, is_search, vod_id) + + # 提取备注 + remarks = self._extract_remarks(element) + + return { + 'vod_id': vod_id, + 'vod_name': title, + 'vod_pic': pic, + 'vod_remarks': remarks, + 'vod_year': '' + } + except Exception as e: + self.log(f"提取视频信息出错: {str(e)}") + return None + + def _extract_image(self, element, is_search=False, vod_id=None): + """图片提取 - 处理懒加载""" + pic_selectors = [ + './/img/@data-original', + './/img/@data-src', + './/img/@src' + ] + + for selector in pic_selectors: + pics = element.xpath(selector) + for p in pics: + # 跳过懒加载占位符 + if (p and not p.endswith('blank.gif') and + not p.startswith('data:image/') and 'base64' not in p): + if p.startswith('//'): + return 'https:' + p + elif p.startswith('/'): + return self.host + p + elif p.startswith('http'): + return p + + # 搜索页面特殊处理:从详情页面获取 + if is_search and vod_id: + return self._get_image_from_detail(vod_id) + + return '' + + def _extract_remarks(self, element): + """提取备注信息""" + remarks_selectors = [ + './/span[contains(@class,"rating")]/text()', + './/div[contains(@class,"rating")]/text()', + './/span[contains(@class,"status")]/text()', + './/div[contains(@class,"status")]/text()', + './/span[contains(text(),"集")]/text()', + './/span[contains(text(),"1080p")]/text()', + './/span[contains(text(),"HD")]/text()' + ] + + for selector in remarks_selectors: + remarks_list = element.xpath(selector) + for r in remarks_list: + if r and r.strip(): + return r.strip() + + return '' + + def _get_image_from_detail(self, vod_id): + """从详情页面获取图片""" + try: + detail_url = f"{self.host}/movie/{vod_id}.html" + rsp = self.fetch(detail_url, headers=self.headers) + doc = self.html(rsp.text) + + # 详情页图片选择器 + pic_selectors = [ + '//img[contains(@class,"poster")]/@src', + '//div[contains(@class,"poster")]//img/@src', + '//img[contains(@alt,"")]/@src' + ] + + for selector in pic_selectors: + pics = doc.xpath(selector) + for p in pics: + if p and not p.endswith('blank.gif'): + if p.startswith('//'): + return 'https:' + p + elif p.startswith('/'): + return self.host + p + elif p.startswith('http'): + return p + except: + pass + + return '' + + def _is_relevant_search_result(self, title, search_key): + """检查搜索结果是否与搜索关键词相关""" + if not title or not search_key: + return False + + title_lower = title.lower() + search_key_lower = search_key.lower() + + # 直接包含搜索关键词的肯定相关 + if search_key_lower in title_lower: + return True + + # 字符匹配 + search_chars = set(search_key_lower.replace(' ', '')) + title_chars = set(title_lower.replace(' ', '')) + + if len(search_chars) > 0: + match_ratio = len(search_chars & title_chars) / len(search_chars) + if match_ratio >= 0.6: + return True + + # 短搜索词要求严格匹配 + if len(search_key_lower) <= 2: + return search_key_lower in title_lower + + return False + + def _get_detail(self, doc, vod_id): + """获取详情信息""" + try: + # 提取标题 + title_selectors = [ + '//h1/text()', + '//h2/text()', + '//title/text()' + ] + title = '' + for selector in title_selectors: + titles = doc.xpath(selector) + for t in titles: + if t and t.strip(): + title = t.strip() + break + if title: + break + + # 提取图片 + pic_selectors = [ + '//img[contains(@class,"poster")]/@src', + '//div[contains(@class,"poster")]//img/@src', + '//img/@src' + ] + pic = '' + for selector in pic_selectors: + pics = doc.xpath(selector) + for p in pics: + if p and not p.endswith('blank.gif'): + if p.startswith('//'): + pic = 'https:' + p + elif p.startswith('/'): + pic = self.host + p + elif p.startswith('http'): + pic = p + break + if pic: + break + + # 提取描述 + desc_selectors = [ + '//div[contains(@class,"intro")]//text()', + '//div[contains(@class,"description")]//text()', + '//p[contains(@class,"desc")]//text()' + ] + desc = '' + for selector in desc_selectors: + descs = doc.xpath(selector) + desc_parts = [] + for d in descs: + if d and d.strip(): + desc_parts.append(d.strip()) + if desc_parts: + desc = ' '.join(desc_parts) + break + + # 提取演员 + actor_selectors = [ + '//li[contains(text(),"主演")]/text()', + '//span[contains(text(),"主演")]/following-sibling::text()', + '//div[contains(@class,"actor")]//text()' + ] + actor = '' + for selector in actor_selectors: + actors = doc.xpath(selector) + for a in actors: + if a and a.strip() and '主演' in a: + actor = a.strip().replace('主演:', '').replace('主演', '') + break + if actor: + break + + # 提取导演 + director_selectors = [ + '//li[contains(text(),"导演")]/text()', + '//span[contains(text(),"导演")]/following-sibling::text()', + '//div[contains(@class,"director")]//text()' + ] + director = '' + for selector in director_selectors: + directors = doc.xpath(selector) + for d in directors: + if d and d.strip() and '导演' in d: + director = d.strip().replace('导演:', '').replace('导演', '') + break + if director: + break + + # 提取播放源 + play_sources = self._parse_play_sources(doc, vod_id) + + return { + 'vod_id': vod_id, + '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([source['name'] for source in play_sources]), + 'vod_play_url': '$$$'.join([source['episodes'] for source in play_sources]) + } + except Exception as e: + self.log(f"获取详情出错: {str(e)}") + return None + + def _parse_play_sources(self, doc, vod_id): + """解析播放源""" + try: + play_sources = [] + + # 查找播放链接 + episode_selectors = [ + '//a[contains(@href,"/v_play/")]', + '//div[contains(@class,"play")]//a' + ] + + episodes = [] + for selector in episode_selectors: + episode_elements = doc.xpath(selector) + if episode_elements: + for ep in episode_elements: + ep_title = ep.xpath('./text()')[0] if ep.xpath('./text()') else '' + ep_url = ep.xpath('./@href')[0] if ep.xpath('./@href') else '' + + if ep_title and ep_url: + # 提取播放ID + play_id = self.regStr(r'/v_play/([^.]+)\.html', ep_url) + if play_id: + episodes.append(f"{ep_title.strip()}${play_id}") + break + + if episodes: + play_sources.append({ + 'name': '默认播放', + 'episodes': '#'.join(episodes) + }) + else: + # 默认播放源 + play_sources.append({ + 'name': '默认播放', + 'episodes': f'第1集$bXZfMTM0NTY4LW5tXzE=' + }) + + return play_sources + except Exception as e: + self.log(f"解析播放源出错: {str(e)}") + return [{'name': '默认播放', 'episodes': f'第1集$bXZfMTM0NTY4LW5tXzE='}] diff --git a/py/云端影视.py b/py/云端影视.py new file mode 100644 index 0000000..596a860 --- /dev/null +++ b/py/云端影视.py @@ -0,0 +1,245 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import re +import sys +import threading +import requests +from Crypto.Hash import MD5 +sys.path.append("..") +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad, unpad +from urllib.parse import quote, urlparse +from base64 import b64encode, b64decode +import json +import time +from base.spider import Spider + + +class Spider(Spider): + + def init(self, extend=""): + self.host = self.gethost() + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def action(self, action): + pass + + def destroy(self): + pass + + def homeContent(self, filter): + data = self.getdata("/api.php/getappapi.index/initV119") + dy = {"class": "类型", "area": "地区", "lang": "语言", "year": "年份", "letter": "字母", "by": "排序", + "sort": "排序"} + filters = {} + classes = [] + json_data = data["type_list"] + homedata = data["banner_list"][8:] + for item in json_data: + if item["type_name"] == "全部": + continue + has_non_empty_field = False + jsontype_extend = json.loads(item["type_extend"]) + homedata.extend(item["recommend_list"]) + jsontype_extend["sort"] = "最新,最热,最赞" + classes.append({"type_name": item["type_name"], "type_id": item["type_id"]}) + for key in dy: + if key in jsontype_extend and jsontype_extend[key].strip() != "": + has_non_empty_field = True + break + if has_non_empty_field: + filters[str(item["type_id"])] = [] + for dkey in jsontype_extend: + if dkey in dy and jsontype_extend[dkey].strip() != "": + values = jsontype_extend[dkey].split(",") + value_array = [{"n": value.strip(), "v": value.strip()} for value in values if + value.strip() != ""] + filters[str(item["type_id"])].append({"key": dkey, "name": dy[dkey], "value": value_array}) + result = {} + result["class"] = classes + result["filters"] = filters + result["list"] = homedata[1:] + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, tid, pg, filter, extend): + body = {"area": extend.get('area', '全部'), "year": extend.get('year', '全部'), "type_id": tid, "page": pg, + "sort": extend.get('sort', '最新'), "lang": extend.get('lang', '全部'), + "class": extend.get('class', '全部')} + result = {} + data = self.getdata("/api.php/getappapi.index/typeFilterVodList", body) + result["list"] = data["recommend_list"] + result["page"] = pg + result["pagecount"] = 9999 + result["limit"] = 90 + result["total"] = 999999 + return result + + def detailContent(self, ids): + body = f"vod_id={ids[0]}" + data = self.getdata("/api.php/getappapi.index/vodDetail", body) + vod = data["vod"] + play = [] + names = [] + for itt in data["vod_play_list"]: + a = [] + names.append(itt["player_info"]["show"]) + for it in itt['urls']: + it['user_agent'] = itt["player_info"].get("user_agent") + it["parse"] = itt["player_info"].get("parse") + a.append(f"{it['name']}${self.e64(json.dumps(it))}") + play.append("#".join(a)) + vod["vod_play_from"] = "$$$".join(names) + vod["vod_play_url"] = "$$$".join(play) + result = {"list": [vod]} + return result + + def searchContent(self, key, quick, pg="1"): + body = f"keywords={key}&type_id=0&page={pg}" + data = self.getdata("/api.php/getappapi.index/searchList", body) + result = {"list": data["search_list"], "page": pg} + return result + + def playerContent(self, flag, id, vipFlags): + ids = json.loads(self.d64(id)) + h = {"User-Agent": (ids['user_agent'] or "okhttp/3.14.9")} + try: + if re.search(r'url=', ids['parse_api_url']): + data = self.fetch(ids['parse_api_url'], headers=h, timeout=10).json() + url = data.get('url') or data['data'].get('url') + else: + body = f"parse_api={ids.get('parse') or ids['parse_api_url'].replace(ids['url'], '')}&url={quote(self.aes(ids['url'], True))}&token={ids.get('token')}" + b = self.getdata("/api.php/getappapi.index/vodParse", body)['json'] + url = json.loads(b)['url'] + if 'error' in url: raise ValueError(f"解析失败: {url}") + p = 0 + except Exception as e: + print('错误信息:', e) + url, p = ids['url'], 1 + + if re.search(r'\.jpg|\.png|\.jpeg', url): + url = self.Mproxy(url) + result = {} + result["parse"] = p + result["url"] = url + result["header"] = h + return result + + def localProxy(self, param): + return self.Mlocal(param) + + def gethost(self): + headers = { + 'User-Agent': 'okhttp/3.14.9' + } + response = self.fetch('https://ydysdynamicdomainname.68.gy:10678/c9m2js298x82h6/l9m8bx23j2o2p9q/dynamicdomainname.txt', + headers=headers).text + return self.host_late(response.split('\n')) + + 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 aes(self, text, b=None): + key = b"k9o3p2c8b7m3z0o8" + cipher = AES.new(key, AES.MODE_CBC, key) + if b: + ct_bytes = cipher.encrypt(pad(text.encode("utf-8"), AES.block_size)) + ct = b64encode(ct_bytes).decode("utf-8") + return ct + else: + pt = unpad(cipher.decrypt(b64decode(text)), AES.block_size) + return pt.decode("utf-8") + + def header(self): + t = str(int(time.time())) + header = {"Referer": self.host, + "User-Agent": "okhttp/3.14.9", "app-version-code": "140", "app-ui-mode": "light", + "app-api-verify-time": t, "app-user-device-id": self.md5(t), + "app-api-verify-sign": self.aes(t, True), + "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"} + return header + + def getdata(self, path, data=None): + vdata = self.post(f"{self.host}{path}", headers=self.header(), data=data, timeout=10).json()['data'] + data1 = self.aes(vdata) + return json.loads(data1) + + def Mproxy(self, url): + return f"{self.getProxyUrl()}&url={self.e64(url)}&type=m3u8" + + def Mlocal(self, param, header=None): + url = self.d64(param["url"]) + ydata = self.fetch(url, headers=header, allow_redirects=False) + data = ydata.content.decode('utf-8') + if ydata.headers.get('Location'): + url = ydata.headers['Location'] + data = self.fetch(url, headers=header).content.decode('utf-8') + parsed_url = urlparse(url) + durl = parsed_url.scheme + "://" + parsed_url.netloc + lines = data.strip().split('\n') + for index, string in enumerate(lines): + if '#EXT' not in string and 'http' not in string: + last_slash_index = string.rfind('/') + lpath = string[:last_slash_index + 1] + lines[index] = durl + ('' if lpath.startswith('/') else '/') + lpath + data = '\n'.join(lines) + return [200, "application/vnd.apple.mpegur", data] + + 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() diff --git a/py/云速影视.py b/py/云速影视.py new file mode 100644 index 0000000..a87909f --- /dev/null +++ b/py/云速影视.py @@ -0,0 +1,219 @@ +import re +import sys +from Crypto.Hash import MD5 +sys.path.append("..") +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad, unpad +from urllib.parse import quote, urlparse +from base64 import b64encode, b64decode +import json +import time +from base.spider import Spider + + +class Spider(Spider): + + def init(self, extend=""): + self.host = self.gethost() + self.did=self.getdid() + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def action(self, action): + pass + + def destroy(self): + pass + + def homeContent(self, filter): + data = self.getdata("/api.php/getappapi.index/initV119") + dy = {"class": "类型", "area": "地区", "lang": "语言", "year": "年份", "letter": "字母", "by": "排序", + "sort": "排序"} + filters = {} + classes = [] + json_data = data["type_list"] + homedata = data["banner_list"][8:] + for item in json_data: + if item["type_name"] == "全部": + continue + has_non_empty_field = False + jsontype_extend = json.loads(item["type_extend"]) + homedata.extend(item["recommend_list"]) + jsontype_extend["sort"] = "最新,最热,最赞" + classes.append({"type_name": item["type_name"], "type_id": item["type_id"]}) + for key in dy: + if key in jsontype_extend and jsontype_extend[key].strip() != "": + has_non_empty_field = True + break + if has_non_empty_field: + filters[str(item["type_id"])] = [] + for dkey in jsontype_extend: + if dkey in dy and jsontype_extend[dkey].strip() != "": + values = jsontype_extend[dkey].split(",") + value_array = [{"n": value.strip(), "v": value.strip()} for value in values if + value.strip() != ""] + filters[str(item["type_id"])].append({"key": dkey, "name": dy[dkey], "value": value_array}) + result = {} + result["class"] = classes + result["filters"] = filters + result["list"] = homedata[1:] + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, tid, pg, filter, extend): + body = {"area": extend.get('area', '全部'), "year": extend.get('year', '全部'), "type_id": tid, "page": pg, + "sort": extend.get('sort', '最新'), "lang": extend.get('lang', '全部'), + "class": extend.get('class', '全部')} + result = {} + data = self.getdata("/api.php/getappapi.index/typeFilterVodList", body) + result["list"] = data["recommend_list"] + result["page"] = pg + result["pagecount"] = 9999 + result["limit"] = 90 + result["total"] = 999999 + return result + + def detailContent(self, ids): + body = f"vod_id={ids[0]}" + data = self.getdata("/api.php/getappapi.index/vodDetail", body) + vod = data["vod"] + play = [] + names = [] + for itt in data["vod_play_list"]: + a = [] + names.append(itt["player_info"]["show"]) + for it in itt['urls']: + it['user_agent'] = itt["player_info"].get("user_agent") + it["parse"] = itt["player_info"].get("parse") + a.append(f"{it['name']}${self.e64(json.dumps(it))}") + play.append("#".join(a)) + vod["vod_play_from"] = "$$$".join(names) + vod["vod_play_url"] = "$$$".join(play) + result = {"list": [vod]} + return result + + def searchContent(self, key, quick, pg="1"): + body = f"keywords={key}&type_id=0&page={pg}" + data = self.getdata("/api.php/getappapi.index/searchList", body) + result = {"list": data["search_list"], "page": pg} + return result + + def playerContent(self, flag, id, vipFlags): + ids = json.loads(self.d64(id)) + h = {"User-Agent": (ids['user_agent'] or "okhttp/3.14.9")} + try: + if re.search(r'url=', ids['parse_api_url']): + data = self.fetch(ids['parse_api_url'], headers=h, timeout=10).json() + url = data.get('url') or data['data'].get('url') + else: + body = f"parse_api={ids.get('parse') or ids['parse_api_url'].replace(ids['url'], '')}&url={quote(self.aes(ids['url'], True))}&token={ids.get('token')}" + b = self.getdata("/api.php/getappapi.index/vodParse", body)['json'] + url = json.loads(b)['url'] + if 'error' in url: raise ValueError(f"解析失败: {url}") + p = 0 + except Exception as e: + print('错误信息:', e) + url, p = ids['url'], 1 + + if re.search(r'\.jpg|\.png|\.jpeg', url): + url = self.Mproxy(url) + result = {} + result["parse"] = p + result["url"] = url + result["header"] = h + return result + + def localProxy(self, param): + return self.Mlocal(param) + + def gethost(self): + headers = { + 'User-Agent': 'okhttp/3.14.9' + } + response = self.fetch('https://jingyu-1312635929.cos.ap-nanjing.myqcloud.com/1.json',headers=headers).text + return response.strip() + + def getdid(self): + did=self.getCache('did') + if not did: + t = str(int(time.time())) + did = self.md5(t) + self.setCache('did', did) + return did + + def aes(self, text, b=None): + key = b"4d83b87c4c5ea111" + cipher = AES.new(key, AES.MODE_CBC, key) + if b: + ct_bytes = cipher.encrypt(pad(text.encode("utf-8"), AES.block_size)) + ct = b64encode(ct_bytes).decode("utf-8") + return ct + else: + pt = unpad(cipher.decrypt(b64decode(text)), AES.block_size) + return pt.decode("utf-8") + + def header(self): + t = str(int(time.time())) + header = {"Referer": self.host, + "User-Agent": "okhttp/3.14.9", "app-version-code": "300", "app-ui-mode": "light", + "app-api-verify-time": t, "app-user-device-id": self.did, + "app-api-verify-sign": self.aes(t, True), + "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"} + return header + + def getdata(self, path, data=None): + vdata = self.post(f"{self.host}{path}", headers=self.header(), data=data, timeout=10).json()['data'] + data1 = self.aes(vdata) + return json.loads(data1) + + def Mproxy(self, url): + return f"{self.getProxyUrl()}&url={self.e64(url)}&type=m3u8" + + def Mlocal(self, param, header=None): + url = self.d64(param["url"]) + ydata = self.fetch(url, headers=header, allow_redirects=False) + data = ydata.content.decode('utf-8') + if ydata.headers.get('Location'): + url = ydata.headers['Location'] + data = self.fetch(url, headers=header).content.decode('utf-8') + parsed_url = urlparse(url) + durl = parsed_url.scheme + "://" + parsed_url.netloc + lines = data.strip().split('\n') + for index, string in enumerate(lines): + if '#EXT' not in string and 'http' not in string: + last_slash_index = string.rfind('/') + lpath = string[:last_slash_index + 1] + lines[index] = durl + ('' if lpath.startswith('/') else '/') + lpath + data = '\n'.join(lines) + return [200, "application/vnd.apple.mpegur", data] + + 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() + diff --git a/py/优酷视频.py b/py/优酷视频.py new file mode 100644 index 0000000..399d0db --- /dev/null +++ b/py/优酷视频.py @@ -0,0 +1,301 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import json +import sys +import time +from concurrent.futures import ThreadPoolExecutor, as_completed +from urllib.parse import quote +from Crypto.Hash import MD5 +import requests +sys.path.append('..') +from base.spider import Spider + + +class Spider(Spider): + + def init(self, extend=""): + self.session = requests.Session() + self.session.headers.update(self.headers) + self.session.cookies.update(self.cookie) + self.get_ctoken() + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + host='https://www.youku.com' + + shost='https://search.youku.com' + + h5host='https://acs.youku.com' + + ihost='https://v.youku.com' + + headers = { + 'User-Agent': 'Mozilla/5.0 (; Windows 10.0.26100.3194_64 ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Electron/14.2.0 Safari/537.36 Node/14.17.0 YoukuDesktop/9.2.60 UOSYouku (2.0.1)-Electron(UTDID ZYmGMAAAACkDAMU8hbiMmYdd;CHANNEL official;ZREAL 0;BTYPE TM2013;BRAND TIMI;BUILDVER 9.2.60.1001)', + 'Referer': f'{host}/' + } + + cookie={ + "__ysuid": "17416134165380iB", + "__aysid": "1741613416541WbD", + "xlly_s": "1", + "isI18n": "false", + "cna": "bNdVIKmmsHgCAXW9W6yrQ1/s", + "__ayft": "1741672162330", + "__arpvid": "1741672162331FBKgrn-1741672162342", + "__ayscnt": "1", + "__aypstp": "1", + "__ayspstp": "3", + "tfstk": "gZbiib4JpG-6DqW-B98_2rwPuFrd1fTXQt3vHEp4YpJIBA3OgrWcwOi90RTOo9XVQ5tAM5NcK_CP6Ep97K2ce1XDc59v3KXAgGFLyzC11ET2n8U8yoyib67M3xL25e8gS8pbyzC1_ET4e8URWTsSnHv2uh8VTeJBgEuN3d-ELQAWuKWV36PHGpJ2uEWVTxvicLX1ewyUXYSekxMf-CxMEqpnoqVvshvP_pABOwvXjL5wKqeulm52np_zpkfCDGW9Ot4uKFIRwZtP7vP9_gfAr3KEpDWXSIfWRay-DHIc_Z-hAzkD1i5Ooi5LZ0O5YO_1mUc476YMI3R6xzucUnRlNe_zemKdm172xMwr2L7CTgIkbvndhFAVh3_YFV9Ng__52U4SQKIdZZjc4diE4EUxlFrfKmiXbBOHeP72v7sAahuTtWm78hRB1yV3tmg9bBOEhWVnq5KwOBL5." + } + + def homeContent(self, filter): + result = {} + categories = ["电视剧", "电影", "综艺", "动漫", "少儿", "纪录片", "文化", "亲子", "教育", "搞笑", "生活", + "体育", "音乐", "游戏"] + classes = [{'type_name': category, 'type_id': category} for category in categories] + filters = {} + self.typeid = {} + with ThreadPoolExecutor(max_workers=len(categories)) as executor: + tasks = { + executor.submit(self.cf, {'type': category}, True): category + for category in categories + } + + for future in as_completed(tasks): + try: + category = tasks[future] + session, ft = future.result() + filters[category] = ft + self.typeid[category] = session + except Exception as e: + print(f"处理分类 {tasks[future]} 时出错: {str(e)}") + + result['class'] = classes + result['filters'] = filters + return result + + def homeVideoContent(self): + try: + vlist = [] + params={"ms_codes":"2019061000","params":"{\"debug\":0,\"gray\":0,\"pageNo\":1,\"utdid\":\"ZYmGMAAAACkDAMU8hbiMmYdd\",\"userId\":\"\",\"bizKey\":\"YOUKU_WEB\",\"appPackageKey\":\"com.youku.YouKu\",\"showNodeList\":0,\"reqSubNode\":0,\"nodeKey\":\"WEBHOME\",\"bizContext\":\"{\\\"spmA\\\":\\\"a2hja\\\"}\"}","system_info":"{\"device\":\"pcweb\",\"os\":\"pcweb\",\"ver\":\"1.0.0.0\",\"userAgent\":\"Mozilla/5.0 (; Windows 10.0.26100.3194_64 ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Electron/14.2.0 Safari/537.36 Node/14.17.0 YoukuDesktop/9.2.60 UOSYouku (2.0.1)-Electron(UTDID ZYmGMAAAACkDAMU8hbiMmYdd;CHANNEL official;ZREAL 0;BTYPE TM2013;BRAND TIMI;BUILDVER 9.2.60.1001)\",\"guid\":\"1590141704165YXe\",\"appPackageKey\":\"com.youku.pcweb\",\"young\":0,\"brand\":\"\",\"network\":\"\",\"ouid\":\"\",\"idfa\":\"\",\"scale\":\"\",\"operator\":\"\",\"resolution\":\"\",\"pid\":\"\",\"childGender\":0,\"zx\":0}"} + data=self.getdata(f'{self.h5host}/h5/mtop.youku.columbus.home.query/1.0/',params) + okey=list(data['data'].keys())[0] + for i in data['data'][okey]['data']['nodes'][0]['nodes'][-1]['nodes'][0]['nodes']: + if i.get('nodes') and i['nodes'][0].get('data'): + i=i['nodes'][0]['data'] + if i.get('assignId'): + vlist.append({ + 'vod_id': i['assignId'], + 'vod_name': i.get('title'), + 'vod_pic': i.get('vImg') or i.get('img'), + 'vod_year': i.get('mark',{}).get('data',{}).get('text'), + 'vod_remarks': i.get('summary') + }) + return {'list': vlist} + except Exception as e: + print(f"处理主页视频数据时出错: {str(e)}") + return {'list': []} + + def categoryContent(self, tid, pg, filter, extend): + result = {} + vlist = [] + result['page'] = pg + result['limit'] = 90 + result['total'] = 999999 + pagecount = 9999 + params = {'type': tid} + id = self.typeid[tid] + params.update(extend) + if pg == '1': + id=self.cf(params) + data=self.session.get(f'{self.host}/category/data?session={id}¶ms={quote(json.dumps(params))}&pageNo={pg}').json() + try: + data=data['data']['filterData'] + for i in data['listData']: + if i.get('videoLink') and 's=' in i['videoLink']: + vlist.append({ + 'vod_id': i.get('videoLink').split('s=')[-1], + 'vod_name': i.get('title'), + 'vod_pic': i.get('img'), + 'vod_year': i.get('rightTagText'), + 'vod_remarks': i.get('summary') + }) + self.typeid[tid]=quote(json.dumps(data['session'])) + except: + pagecount=pg + result['list'] = vlist + result['pagecount'] = pagecount + return result + + def detailContent(self, ids): + try: + data=self.session.get(f'{self.ihost}/v_getvideo_info/?showId={ids[0]}').json() + v=data['data'] + vod = { + 'type_name': v.get('showVideotype'), + 'vod_year': v.get('lastUpdate'), + 'vod_remarks': v.get('rc_title'), + 'vod_actor': v.get('_personNameStr'), + 'vod_content': v.get('showdesc'), + 'vod_play_from': '优酷', + 'vod_play_url': '' + } + params={"biz":"new_detail_web2","videoId":v.get('vid'),"scene":"web_page","componentVersion":"3","ip":data.get('ip'),"debug":0,"utdid":"ZYmGMAAAACkDAMU8hbiMmYdd","userId":0,"platform":"pc","nextSession":"","gray":0,"source":"pcNoPrev","showId":ids[0]} + sdata,index=self.getinfo(params) + pdata=sdata['nodes'] + if index > len(pdata): + batch_size = len(pdata) + total_batches = ((index + batch_size - 1) // batch_size) - 1 + ssj = json.loads(sdata['data']['session']) + with ThreadPoolExecutor(max_workers=total_batches) as executor: + futures = [] + for batch in range(total_batches): + start = batch_size + 1 + (batch * batch_size) + end = start + batch_size - 1 + next_session = ssj.copy() + next_session.update({ + "itemStartStage": start, + "itemEndStage": min(end, index) + }) + current_params = params.copy() + current_params['nextSession'] = json.dumps(next_session) + futures.append((start, executor.submit(self.getvinfo, current_params))) + futures.sort(key=lambda x: x[0]) + + for _, future in futures: + try: + result = future.result() + pdata.extend(result['nodes']) + except Exception as e: + print(f"Error fetching data: {str(e)}") + vod['vod_play_url'] = '#'.join([f"{i['data'].get('title')}${i['data']['action'].get('value')}" for i in pdata]) + return {'list': [vod]} + except Exception as e: + print(e) + return {'list': [{'vod_play_from': '哎呀翻车啦', 'vod_play_url': f'呜呜呜${self.host}'}]} + + def searchContent(self, key, quick, pg="1"): + data=self.session.get(f'{self.shost}/api/search?pg={pg}&keyword={key}').json() + vlist = [] + for i in data['pageComponentList']: + if i.get('commonData') and (i['commonData'].get('showId') or i['commonData'].get('realShowId')): + i=i['commonData'] + vlist.append({ + 'vod_id': i.get('showId') or i.get('realShowId'), + 'vod_name': i['titleDTO'].get('displayName'), + 'vod_pic': i['posterDTO'].get('vThumbUrl'), + 'vod_year': i.get('feature'), + 'vod_remarks': i.get('updateNotice') + }) + return {'list': vlist, 'page': pg} + + def playerContent(self, flag, id, vipFlags): + return {'jx':1,'parse': 1, 'url': f"{self.ihost}/video?vid={id}", 'header': ''} + + def localProxy(self, param): + pass + + def cf(self,params,b=False): + response = self.session.get(f'{self.host}/category/data?params={quote(json.dumps(params))}&optionRefresh=1&pageNo=1').json() + data=response['data']['filterData'] + session=quote(json.dumps(data['session'])) + if b: + return session,self.get_filter_data(data['filter']['filterData'][1:]) + return session + + def process_key(self, key): + if '_' not in key: + return key + parts = key.split('_') + result = parts[0] + for part in parts[1:]: + if part: + result += part[0].upper() + part[1:] + return result + + def get_filter_data(self, data): + result = [] + try: + for item in data: + if not item.get('subFilter'): + continue + first_sub = item['subFilter'][0] + if not first_sub.get('filterType'): + continue + filter_item = { + 'key': self.process_key(first_sub['filterType']), + 'name': first_sub['title'], + 'value': [] + } + for sub in item['subFilter']: + if 'value' in sub: + filter_item['value'].append({ + 'n': sub['title'], + 'v': sub['value'] + }) + if filter_item['value']: + result.append(filter_item) + + except Exception as e: + print(f"处理筛选数据时出错: {str(e)}") + + return result + + def get_ctoken(self): + data=self.session.get(f'{self.h5host}/h5/mtop.ykrec.recommendservice.recommend/1.0/?jsv=2.6.1&appKey=24679788') + + def md5(self,t,text): + h = MD5.new() + token=self.session.cookies.get('_m_h5_tk').split('_')[0] + data=f"{token}&{t}&24679788&{text}" + h.update(data.encode('utf-8')) + return h.hexdigest() + + def getdata(self, url, params, recursion_count=0, max_recursion=3): + data = json.dumps(params) + t = int(time.time() * 1000) + jsdata = { + 'appKey': '24679788', + 't': t, + 'sign': self.md5(t, data), + 'data': data + } + response = self.session.get(url, params=jsdata) + if '令牌过期' in response.text: + if recursion_count >= max_recursion: + raise Exception("达到最大递归次数,无法继续请求") + self.get_ctoken() + return self.getdata(url, params, recursion_count + 1, max_recursion) + else: + return response.json() + + def getvinfo(self,params): + body = { + "ms_codes": "2019030100", + "params": json.dumps(params), + "system_info": "{\"os\":\"iku\",\"device\":\"iku\",\"ver\":\"9.2.9\",\"appPackageKey\":\"com.youku.iku\",\"appPackageId\":\"pcweb\"}" + } + data = self.getdata(f'{self.h5host}/h5/mtop.youku.columbus.gateway.new.execute/1.0/', body) + okey = list(data['data'].keys())[0] + i = data['data'][okey]['data'] + return i + + def getinfo(self,params): + i = self.getvinfo(params) + jdata=i['nodes'][0]['nodes'][3] + info=i['data']['extra']['episodeTotal'] + if i['data']['extra']['showCategory'] in ['电影','游戏']: + jdata = i['nodes'][0]['nodes'][4] + return jdata,info + diff --git a/py/偷乐短剧.py b/py/偷乐短剧.py new file mode 100644 index 0000000..4aeb27b --- /dev/null +++ b/py/偷乐短剧.py @@ -0,0 +1,790 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# 偷乐短剧爬虫 + +import sys +import json +import re +import time +import urllib.parse +import requests +from bs4 import BeautifulSoup + +# 导入基础类 +sys.path.append('../../') +try: + from base.spider import Spider +except ImportError: + # 本地调试时的替代实现 + class Spider: + def init(self, extend=""): + pass + +class Spider(Spider): + def __init__(self): + # 网站主URL + self.siteUrl = "https://www.toule.top" + + # 根据网站实际结构,分类链接格式为: /index.php/vod/show/class/分类名/id/1.html + # 分类ID映射 - 从网站中提取的分类 + self.cateManual = { + "男频": "/index.php/vod/show/class/%E7%94%B7%E9%A2%91/id/1.html", + "女频": "/index.php/vod/show/class/%E5%A5%B3%E9%A2%91/id/1.html", + "都市": "/index.php/vod/show/class/%E9%83%BD%E5%B8%82/id/1.html", + "赘婿": "/index.php/vod/show/class/%E8%B5%98%E5%A9%BF/id/1.html", + "战神": "/index.php/vod/show/class/%E6%88%98%E7%A5%9E/id/1.html", + "古代言情": "/index.php/vod/show/class/%E5%8F%A4%E4%BB%A3%E8%A8%80%E6%83%85/id/1.html", + "现代言情": "/index.php/vod/show/class/%E7%8E%B0%E4%BB%A3%E8%A8%80%E6%83%85/id/1.html", + "历史": "/index.php/vod/show/class/%E5%8E%86%E5%8F%B2/id/1.html", + "玄幻": "/index.php/vod/show/class/%E7%8E%84%E5%B9%BB/id/1.html", + "搞笑": "/index.php/vod/show/class/%E6%90%9E%E7%AC%91/id/1.html", + "甜宠": "/index.php/vod/show/class/%E7%94%9C%E5%AE%A0/id/1.html", + "励志": "/index.php/vod/show/class/%E5%8A%B1%E5%BF%97/id/1.html", + "逆袭": "/index.php/vod/show/class/%E9%80%86%E8%A2%AD/id/1.html", + "穿越": "/index.php/vod/show/class/%E7%A9%BF%E8%B6%8A/id/1.html", + "古装": "/index.php/vod/show/class/%E5%8F%A4%E8%A3%85/id/1.html" + } + + # 请求头 + self.headers = { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36", + "Referer": "https://www.toule.top/", + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", + "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8", + "Accept-Encoding": "gzip, deflate, br", + "Connection": "keep-alive", + } + + + # 缓存 + self.cache = {} + self.cache_timeout = {} + + def getName(self): + return "偷乐短剧" + + def init(self, extend=""): + # 初始化方法,可以留空 + return + + def isVideoFormat(self, url): + """判断是否为视频格式""" + video_formats = ['.mp4', '.m3u8', '.ts', '.flv', '.avi', '.mkv', '.mov', '.rmvb', '.3gp'] + for format in video_formats: + if format in url.lower(): + return True + return False + + def manualVideoCheck(self): + """是否需要手动检查视频""" + return False + + # 工具方法 - 网络请求 + def fetch(self, url, headers=None, data=None, method="GET"): + """统一的网络请求方法""" + try: + if headers is None: + headers = self.headers.copy() + + if method.upper() == "GET": + response = requests.get(url, headers=headers, params=data, timeout=10,verify=False) + else: # POST + response = requests.post(url, headers=headers, data=data, timeout=10,verify=False) + + response.raise_for_status() + response.encoding = response.apparent_encoding or 'utf-8' + return response + except Exception as e: + self.log(f"请求失败: {url}, 错误: {str(e)}", "ERROR") + return None + + # 缓存方法 + def getCache(self, key, timeout=3600): + """获取缓存数据""" + if key in self.cache and key in self.cache_timeout: + if time.time() < self.cache_timeout[key]: + return self.cache[key] + else: + del self.cache[key] + del self.cache_timeout[key] + return None + + def setCache(self, key, value, timeout=3600): + """设置缓存数据""" + self.cache[key] = value + self.cache_timeout[key] = time.time() + timeout + + # 日志方法 + def log(self, msg, level='INFO'): + """记录日志""" + levels = { + 'DEBUG': 0, + 'INFO': 1, + 'WARNING': 2, + 'ERROR': 3 + } + + current_level = 'INFO' # 可以设置为DEBUG以获取更多信息 + + if levels.get(level, 4) >= levels.get(current_level, 1): + print(f"[{level}] {time.strftime('%Y-%m-%d %H:%M:%S')} - {msg}") + + # 辅助方法 - 从URL中提取视频ID + def extractVodId(self, url): + """从URL中提取视频ID""" + # 路径格式: /index.php/vod/play/id/9024/sid/1/nid/1.html + match = re.search(r'/id/(\d+)/', url) + if match: + return match.group(1) + return "" + + # 辅助方法 - 从网页内容中提取分类 + def extractCategories(self, text): + """从网页内容中提取分类标签""" + cats = [] + # 匹配标签字符串,例如: "男频,逆袭,亲情,短剧" + if "," in text: + parts = text.split(",") + for part in parts: + part = part.strip() + if part and part != "短剧": + cats.append(part) + return cats + + # 主要接口实现 + def homeContent(self, filter): + """获取首页分类及内容""" + result = {} + classes = [] + + # 从缓存获取 + cache_key = 'home_classes' + cached_classes = self.getCache(cache_key) + if cached_classes: + classes = cached_classes + else: + # 使用预定义的分类 + for k, v in self.cateManual.items(): + classes.append({ + 'type_id': v, # 使用完整URL路径作为type_id + 'type_name': k + }) + + # 保存到缓存 + self.setCache(cache_key, classes, 24*3600) # 缓存24小时 + + result['class'] = classes + + # 获取首页推荐视频 + videos = self.homeVideoContent().get('list', []) + result['list'] = videos + + return result + + def homeVideoContent(self): + """获取首页推荐视频内容""" + result = {'list': []} + videos = [] + + # 从缓存获取 + cache_key = 'home_videos' + cached_videos = self.getCache(cache_key) + if cached_videos: + return {'list': cached_videos} + + try: + response = self.fetch(self.siteUrl) + if response and response.status_code == 200: + html = response.text + soup = BeautifulSoup(html, 'html.parser') + + # 查找最新更新区域 + latest_section = soup.find('h2', text=lambda t: t and '最新更新' in t) + if latest_section: + container = latest_section.parent # 获取容器 + if container: + # 查找所有 li.item 元素 + items = container.find_all('li', class_='item') + + for item in items: + try: + # 获取链接和标题 + title_link = item.find('h3') + if not title_link: + continue + + title = title_link.text.strip() + + # 获取第一个链接作为详情页链接 + link_tag = item.find('a') + if not link_tag: + continue + + link = link_tag.get('href', '') + if not link.startswith('http'): + link = urllib.parse.urljoin(self.siteUrl, link) + + # 提取ID + vid = self.extractVodId(link) + if not vid: + continue + + # 获取图片 + img_tag = item.find('img') + img_url = "" + if img_tag: + img_url = img_tag.get('src', img_tag.get('data-src', '')) + if img_url and not img_url.startswith('http'): + img_url = urllib.parse.urljoin(self.siteUrl, img_url) + + # 获取备注信息 + remarks = "" + remarks_tag = item.find('span', class_='remarks') + if remarks_tag: + remarks = remarks_tag.text.strip() + + # 获取标签信息 + tags = "" + tags_tag = item.find('span', class_='tags') + if tags_tag: + tags = tags_tag.text.strip() + + # 合并备注和标签 + if remarks and tags: + remarks = f"{remarks} | {tags}" + elif tags: + remarks = tags + + # 构建视频项 + videos.append({ + 'vod_id': vid, + 'vod_name': title, + 'vod_pic': img_url, + 'vod_remarks': remarks + }) + except Exception as e: + self.log(f"处理视频项时出错: {str(e)}", "ERROR") + continue + + # 保存到缓存 + self.setCache(cache_key, videos, 3600) # 缓存1小时 + except Exception as e: + self.log(f"获取首页视频内容发生错误: {str(e)}", "ERROR") + + result['list'] = videos + return result + + def categoryContent(self, tid, pg, filter, extend): + """获取分类内容""" + result = {} + videos = [] + + # 处理页码 + if pg is None: + pg = 1 + else: + pg = int(pg) + + # 构建分类URL - tid是完整的URL路径 + if tid.startswith("/"): + # 替换页码,URL格式可能像: /index.php/vod/show/class/男频/id/1.html + if pg > 1: + if "html" in tid: + category_url = tid.replace(".html", f"/page/{pg}.html") + else: + category_url = f"{tid}/page/{pg}.html" + else: + category_url = tid + + full_url = urllib.parse.urljoin(self.siteUrl, category_url) + else: + # 如果tid不是URL路径,可能是旧版分类ID,尝试查找对应URL + category_url = "" + for name, url in self.cateManual.items(): + if name == tid: + category_url = url + break + + if not category_url: + self.log(f"未找到分类ID对应的URL: {tid}", "ERROR") + result['list'] = [] + result['page'] = pg + result['pagecount'] = 1 + result['limit'] = 0 + result['total'] = 0 + return result + + # 处理页码 + if pg > 1: + if "html" in category_url: + category_url = category_url.replace(".html", f"/page/{pg}.html") + else: + category_url = f"{category_url}/page/{pg}.html" + + full_url = urllib.parse.urljoin(self.siteUrl, category_url) + + # 请求分类页 + try: + response = self.fetch(full_url) + if response and response.status_code == 200: + html = response.text + soup = BeautifulSoup(html, 'html.parser') + + # 查找视频项,根据实际HTML结构调整 + items = soup.find_all('li', class_='item') + + for item in items: + try: + # 获取链接和标题 + title_tag = item.find('h3') + if not title_tag: + continue + + title = title_tag.text.strip() + + # 获取链接 + link_tag = item.find('a') + if not link_tag: + continue + + link = link_tag.get('href', '') + if not link.startswith('http'): + link = urllib.parse.urljoin(self.siteUrl, link) + + # 提取ID + vid = self.extractVodId(link) + if not vid: + continue + + # 获取图片 + img_tag = item.find('img') + img_url = "" + if img_tag: + img_url = img_tag.get('src', img_tag.get('data-src', '')) + if img_url and not img_url.startswith('http'): + img_url = urllib.parse.urljoin(self.siteUrl, img_url) + + # 获取备注信息 + remarks = "" + remarks_tag = item.find('span', class_='remarks') + if remarks_tag: + remarks = remarks_tag.text.strip() + + # 获取标签信息 + tags = "" + tags_tag = item.find('span', class_='tags') + if tags_tag: + tags = tags_tag.text.strip() + + # 合并备注和标签 + if remarks and tags: + remarks = f"{remarks} | {tags}" + elif tags: + remarks = tags + + # 构建视频项 + videos.append({ + 'vod_id': vid, + 'vod_name': title, + 'vod_pic': img_url, + 'vod_remarks': remarks + }) + except Exception as e: + self.log(f"处理分类视频项时出错: {str(e)}", "ERROR") + continue + + # 查找分页信息 + # 默认值 + total = len(videos) + pagecount = 1 + limit = 20 + + # 尝试查找分页元素 + pagination = soup.find('ul', class_='page') + if pagination: + # 查找最后一页的链接 + last_page_links = pagination.find_all('a') + for link in last_page_links: + page_text = link.text.strip() + if page_text.isdigit(): + pagecount = max(pagecount, int(page_text)) + except Exception as e: + self.log(f"获取分类内容发生错误: {str(e)}", "ERROR") + + result['list'] = videos + result['page'] = pg + result['pagecount'] = pagecount + result['limit'] = limit + result['total'] = total + + return result + + def detailContent(self, ids): + """获取详情内容""" + result = {} + + if not ids or len(ids) == 0: + return result + + # 视频ID + vid = ids[0] + + # 构建播放页URL + play_url = f"{self.siteUrl}/index.php/vod/play/id/{vid}/sid/1/nid/1.html" + + try: + response = self.fetch(play_url) + if not response or response.status_code != 200: + return result + + html = response.text + soup = BeautifulSoup(html, 'html.parser') + + # 提取视频基本信息 + # 标题 + title = "" + title_tag = soup.find('h1', class_='items-title') + if title_tag: + title = title_tag.text.strip() + + # 图片 + pic = "" + pic_tag = soup.find('img', class_='thumb') + if pic_tag: + pic = pic_tag.get('src', '') + if pic and not pic.startswith('http'): + pic = urllib.parse.urljoin(self.siteUrl, pic) + + # 简介 + desc = "" + desc_tag = soup.find('div', class_='text-content') + if desc_tag: + desc = desc_tag.text.strip() + + # 标签/分类 + tags = [] + tags_container = soup.find('span', class_='items-tags') + if tags_container: + tag_links = tags_container.find_all('a') + for tag in tag_links: + tag_text = tag.text.strip() + if tag_text: + tags.append(tag_text) + + # 提取播放列表 + play_from = "偷乐短剧" + play_list = [] + + # 查找播放列表区域 + play_area = soup.find('div', class_='swiper-wrapper') + if play_area: + # 查找所有剧集链接 + episode_links = play_area.find_all('a') + for ep in episode_links: + ep_title = ep.text.strip() + ep_url = ep.get('href', '') + + if ep_url: + # 直接使用URL作为ID + if not ep_url.startswith('http'): + ep_url = urllib.parse.urljoin(self.siteUrl, ep_url) + + # 提取集数信息 + ep_num = ep_title + if ep_num.isdigit(): + ep_num = f"第{ep_num}集" + + play_list.append(f"{ep_num}${ep_url}") + + # 如果没有找到播放列表,查找播放按钮 + if not play_list: + play_btn = soup.find('a', class_='btn-play') + if play_btn: + play_url = play_btn.get('href', '') + if play_url: + if not play_url.startswith('http'): + play_url = urllib.parse.urljoin(self.siteUrl, play_url) + + play_list.append(f"播放${play_url}") + + # 如果仍然没有找到播放链接,使用播放页URL + if not play_list: + play_url = f"{self.siteUrl}/index.php/vod/play/id/{vid}/sid/1/nid/1.html" + play_list.append(f"播放${play_url}") + + # 提取更多信息(导演、演员等) + director = "" + actor = "" + year = "" + area = "" + remarks = "" + + # 查找备注信息 + meta_items = soup.find_all('div', class_='meta-item') + for item in meta_items: + item_title = item.find('span', class_='item-title') + item_content = item.find('span', class_='item-content') + + if item_title and item_content: + title_text = item_title.text.strip() + content_text = item_content.text.strip() + + if "导演" in title_text: + director = content_text + elif "主演" in title_text: + actor = content_text + elif "年份" in title_text: + year = content_text + elif "地区" in title_text: + area = content_text + elif "简介" in title_text: + if not desc: + desc = content_text + elif "状态" in title_text: + remarks = content_text + + # 如果没有从meta-item中获取到remarks + if not remarks: + remarks_tag = soup.find('span', class_='remarks') + if remarks_tag: + remarks = remarks_tag.text.strip() + + # 构建标准数据结构 + vod = { + "vod_id": vid, + "vod_name": title, + "vod_pic": pic, + "vod_year": year, + "vod_area": area, + "vod_remarks": remarks, + "vod_actor": actor, + "vod_director": director, + "vod_content": desc, + "type_name": ",".join(tags), + "vod_play_from": play_from, + "vod_play_url": "#".join(play_list) + } + + result = { + 'list': [vod] + } + except Exception as e: + self.log(f"获取详情内容时出错: {str(e)}", "ERROR") + + return result + + def searchContent(self, key, quick, pg=1): + """搜索功能""" + result = {} + videos = [] + + # 构建搜索URL和参数 + search_url = f"{self.siteUrl}/index.php/vod/search.html" + params = {"wd": key} + + try: + response = self.fetch(search_url, data=params) + if response and response.status_code == 200: + html = response.text + soup = BeautifulSoup(html, 'html.parser') + + # 查找搜索结果项 + search_items = soup.find_all('li', class_='item') + + for item in search_items: + try: + # 获取标题 + title_tag = item.find('h3') + if not title_tag: + continue + + title = title_tag.text.strip() + + # 获取链接 + link_tag = item.find('a') + if not link_tag: + continue + + link = link_tag.get('href', '') + if not link.startswith('http'): + link = urllib.parse.urljoin(self.siteUrl, link) + + # 提取视频ID + vid = self.extractVodId(link) + if not vid: + continue + + # 获取图片 + img_tag = item.find('img') + img_url = "" + if img_tag: + img_url = img_tag.get('src', img_tag.get('data-src', '')) + if img_url and not img_url.startswith('http'): + img_url = urllib.parse.urljoin(self.siteUrl, img_url) + + # 获取备注信息 + remarks = "" + remarks_tag = item.find('span', class_='remarks') + if remarks_tag: + remarks = remarks_tag.text.strip() + + # 获取标签信息 + tags = "" + tags_tag = item.find('span', class_='tags') + if tags_tag: + tags = tags_tag.text.strip() + + # 合并备注和标签 + if remarks and tags: + remarks = f"{remarks} | {tags}" + elif tags: + remarks = tags + + # 构建视频项 + videos.append({ + 'vod_id': vid, + 'vod_name': title, + 'vod_pic': img_url, + 'vod_remarks': remarks + }) + except Exception as e: + self.log(f"处理搜索结果时出错: {str(e)}", "ERROR") + continue + except Exception as e: + self.log(f"搜索功能发生错误: {str(e)}", "ERROR") + + result['list'] = videos + return result + + def searchContentPage(self, key, quick, pg=1): + return self.searchContent(key, quick, pg) + + def playerContent(self, flag, id, vipFlags): + """获取播放内容""" + result = {} + + try: + # 判断是否已经是视频URL + if self.isVideoFormat(id): + result["parse"] = 0 + result["url"] = id + result["playUrl"] = "" + result["header"] = json.dumps(self.headers) + return result + + # 判断是否是完整的页面URL + if id.startswith(('http://', 'https://')): + play_url = id + # 尝试作为相对路径处理 + elif id.startswith('/'): + play_url = urllib.parse.urljoin(self.siteUrl, id) + # 假设是视频ID,构建播放页面URL + else: + # 检查是否是"视频ID_集数"格式 + parts = id.split('_') + if len(parts) > 1 and parts[0].isdigit(): + vid = parts[0] + nid = parts[1] + play_url = f"{self.siteUrl}/index.php/vod/play/id/{vid}/sid/1/nid/{nid}.html" + else: + # 直接当作视频ID处理 + play_url = f"{self.siteUrl}/index.php/vod/play/id/{id}/sid/1/nid/1.html" + + # 访问播放页获取真实播放地址 + try: + self.log(f"正在解析播放页面: {play_url}") + response = self.fetch(play_url) + if response and response.status_code == 200: + html = response.text + + # 查找player_aaaa变量 + player_match = re.search(r'var\s+player_aaaa\s*=\s*({.*?});', html, re.DOTALL) + if player_match: + try: + player_data = json.loads(player_match.group(1)) + if 'url' in player_data: + video_url = player_data['url'] + if not video_url.startswith('http'): + video_url = urllib.parse.urljoin(self.siteUrl, video_url) + + self.log(f"从player_aaaa获取到视频地址: {video_url}") + result["parse"] = 0 + result["url"] = video_url + result["playUrl"] = "" + result["header"] = json.dumps(self.headers) + return result + except json.JSONDecodeError as e: + self.log(f"解析player_aaaa JSON出错: {str(e)}", "ERROR") + + # 如果player_aaaa解析失败,尝试其他方式 + # 1. 查找video标签 + video_match = re.search(r']*src=["\'](.*?)["\']', html) + if video_match: + video_url = video_match.group(1) + if not video_url.startswith('http'): + video_url = urllib.parse.urljoin(self.siteUrl, video_url) + + self.log(f"从video标签找到视频地址: {video_url}") + result["parse"] = 0 + result["url"] = video_url + result["playUrl"] = "" + result["header"] = json.dumps(self.headers) + return result + + # 2. 查找iframe + iframe_match = re.search(r']*src=["\'](.*?)["\']', html) + if iframe_match: + iframe_url = iframe_match.group(1) + if not iframe_url.startswith('http'): + iframe_url = urllib.parse.urljoin(self.siteUrl, iframe_url) + + self.log(f"找到iframe,正在解析: {iframe_url}") + # 访问iframe内容 + iframe_response = self.fetch(iframe_url) + if iframe_response and iframe_response.status_code == 200: + iframe_html = iframe_response.text + + # 在iframe内容中查找视频地址 + iframe_video_match = re.search(r'(https?://[^\'"]+\.(mp4|m3u8|ts))', iframe_html) + if iframe_video_match: + video_url = iframe_video_match.group(1) + + self.log(f"从iframe中找到视频地址: {video_url}") + result["parse"] = 0 + result["url"] = video_url + result["playUrl"] = "" + result["header"] = json.dumps({ + "User-Agent": self.headers["User-Agent"], + "Referer": iframe_url + }) + return result + + # 3. 查找任何可能的视频URL + url_match = re.search(r'(https?://[^\'"]+\.(mp4|m3u8|ts))', html) + if url_match: + video_url = url_match.group(1) + + self.log(f"找到可能的视频地址: {video_url}") + result["parse"] = 0 + result["url"] = video_url + result["playUrl"] = "" + result["header"] = json.dumps(self.headers) + return result + except Exception as e: + self.log(f"解析播放地址时出错: {str(e)}", "ERROR") + + # 如果所有方式都失败,返回外部解析标志 + self.log("未找到直接可用的视频地址,需要外部解析", "WARNING") + result["parse"] = 1 # 表示需要外部解析 + result["url"] = play_url # 返回播放页面URL + result["playUrl"] = "" + result["header"] = json.dumps(self.headers) + + except Exception as e: + self.log(f"获取播放内容时出错: {str(e)}", "ERROR") + + return result + + def localProxy(self, param): + """本地代理""" + return [404, "text/plain", {}, "Not Found"] diff --git a/py/光速APP.py b/py/光速APP.py new file mode 100644 index 0000000..4a58f39 --- /dev/null +++ b/py/光速APP.py @@ -0,0 +1,222 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import re +import sys +from Crypto.Hash import MD5 +sys.path.append('..') +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad, unpad +from urllib.parse import quote, urlparse +from base64 import b64encode, b64decode +import json +import time +from base.spider import Spider + +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 action(self, action): + pass + + def destroy(self): + pass + + def homeContent(self, filter): + data = self.getdata("/api.php/getappapi.index/initV119") + dy = {"class": "类型", "area": "地区", "lang": "语言", "year": "年份", "letter": "字母", "by": "排序", + "sort": "排序"} + filters = {} + classes = [] + json_data = data["type_list"] + homedata = data["banner_list"][8:] + for item in json_data: + if item["type_name"] == "全部": + continue + has_non_empty_field = False + jsontype_extend = json.loads(item["type_extend"]) + homedata.extend(item["recommend_list"]) + jsontype_extend["sort"] = "最新,最热,最赞" + classes.append({"type_name": item["type_name"], "type_id": item["type_id"]}) + for key in dy: + if key in jsontype_extend and jsontype_extend[key].strip() != "": + has_non_empty_field = True + break + if has_non_empty_field: + filters[str(item["type_id"])] = [] + for dkey in jsontype_extend: + if dkey in dy and jsontype_extend[dkey].strip() != "": + values = jsontype_extend[dkey].split(",") + value_array = [{"n": value.strip(), "v": value.strip()} for value in values if + value.strip() != ""] + filters[str(item["type_id"])].append({"key": dkey, "name": dy[dkey], "value": value_array}) + result = {} + result["class"] = classes + result["filters"] = filters + result["list"] = homedata[1:] + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, tid, pg, filter, extend): + body = {"area": extend.get('area', '全部'), "year": extend.get('year', '全部'), "type_id": tid, "page": pg, + "sort": extend.get('sort', '最新'), "lang": extend.get('lang', '全部'), + "class": extend.get('class', '全部')} + result = {} + data = self.getdata("/api.php/getappapi.index/typeFilterVodList", body) + result["list"] = data["recommend_list"] + result["page"] = pg + result["pagecount"] = 9999 + result["limit"] = 90 + result["total"] = 999999 + return result + + def detailContent(self, ids): + body = f"vod_id={ids[0]}" + data = self.getdata("/api.php/getappapi.index/vodDetail", body) + vod = data["vod"] + play = [] + names = [] + for itt in data["vod_play_list"]: + a = [] + names.append(itt["player_info"]["show"]) + for it in itt['urls']: + it['user_agent']=itt["player_info"].get("user_agent") + it["parse"]=itt["player_info"].get("parse") + a.append(f"{it['name']}${self.e64(json.dumps(it))}") + play.append("#".join(a)) + vod["vod_play_from"] = "$$$".join(names) + vod["vod_play_url"] = "$$$".join(play) + result = {"list": [vod]} + return result + + def searchContent(self, key, quick, pg="1"): + body = f"keywords={key}&type_id=0&page={pg}" + data = self.getdata("/api.php/getappapi.index/searchList", body) + result = {"list": data["search_list"], "page": pg} + return result + + def playerContent(self, flag, id, vipFlags): + ids = json.loads(self.d64(id)) + h={"User-Agent": (ids['user_agent'] or "okhttp/3.14.9")} + url = ids['url'] + p=1 + try: + if re.search(r'\?url=', ids['parse_api_url']): + data=self.fetch(ids['parse_api_url'], headers=h, timeout=10).json() + url=data.get('url') or data['data'].get('url') + elif not re.search(r'\.m3u8|\.mp4', ids.get('url')): + body = f"parse_api={ids.get('parse') or ids['parse_api_url'].replace(ids['url'], '')}&url={quote(self.aes('encrypt', ids['url']))}&token={ids.get('token')}" + b = self.getdata("/api.php/getappapi.index/vodParse", body)['json'] + url = json.loads(b)['url'] + p=0 + except Exception as e: + print('错误信息:',e) + pass + if re.search(r'\.jpg|\.png|\.jpeg', url): + url = self.Mproxy(url) + result = {} + result["parse"] = p + result["url"] = url + result["header"] = h + return result + + def localProxy(self, param): + return self.Mlocal(param) + + def gethost(self): + headers = { + 'User-Agent': 'okhttp/3.14.9' + } + host = self.fetch('https://jingyu-1312635929.cos.ap-nanjing.myqcloud.com/1.json', + headers=headers).text.strip() + return host + + phend = { + 'User-Agent': 'Dalvik/2.1.0 (Linux; U; Android 11; M2012K10C Build/RP1A.200720.011)', + 'allowCrossProtocolRedirects': 'true' + } + + def aes(self, operation, text): + key = "4d83b87c4c5ea111".encode("utf-8") + iv = key + if operation == "encrypt": + cipher = AES.new(key, AES.MODE_CBC, iv) + ct_bytes = cipher.encrypt(pad(text.encode("utf-8"), AES.block_size)) + ct = b64encode(ct_bytes).decode("utf-8") + return ct + elif operation == "decrypt": + cipher = AES.new(key, AES.MODE_CBC, iv) + pt = unpad(cipher.decrypt(b64decode(text)), AES.block_size) + return pt.decode("utf-8") + + def header(self): + t = str(int(time.time())) + header = {"Referer":self.host, + "User-Agent": "okhttp/3.14.9", "app-version-code": "300", "app-ui-mode": "light", + "app-api-verify-time": t, "app-user-device-id": self.md5(t), + "app-api-verify-sign": self.aes("encrypt", t), + "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"} + return header + + def getdata(self, path, data=None): + vdata = self.post(f"{self.host}{path}", headers=self.header(), data=data, timeout=10).json()['data'] + data1 = self.aes("decrypt", vdata) + return json.loads(data1) + + def Mproxy(self, url): + return self.getProxyUrl() + "&url=" + b64encode(url.encode('utf-8')).decode('utf-8') + "&type=m3u8" + + def Mlocal(self, param,header=None): + url = self.d64(param["url"]) + ydata = self.fetch(url, headers=header, allow_redirects=False) + data = ydata.content.decode('utf-8') + if ydata.headers.get('Location'): + url = ydata.headers['Location'] + data = self.fetch(url, headers=header).content.decode('utf-8') + parsed_url = urlparse(url) + durl = parsed_url.scheme + "://" + parsed_url.netloc + lines = data.strip().split('\n') + for index, string in enumerate(lines): + if '#EXT' not in string and 'http' not in string: + last_slash_index = string.rfind('/') + lpath = string[:last_slash_index + 1] + lines[index] = durl + ('' if lpath.startswith('/') else '/') + lpath + data = '\n'.join(lines) + return [200, "application/vnd.apple.mpegur", data] + + 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() diff --git a/py/光速影视.py b/py/光速影视.py new file mode 100644 index 0000000..33b1204 --- /dev/null +++ b/py/光速影视.py @@ -0,0 +1,222 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import re +import sys +from Crypto.Hash import MD5 +sys.path.append('..') +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad, unpad +from urllib.parse import quote, urlparse +from base64 import b64encode, b64decode +import json +import time +from base.spider import Spider + +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 action(self, action): + pass + + def destroy(self): + pass + + def homeContent(self, filter): + data = self.getdata("/api.php/getappapi.index/initV119") + dy = {"class": "类型", "area": "地区", "lang": "语言", "year": "年份", "letter": "字母", "by": "排序", + "sort": "排序"} + filters = {} + classes = [] + json_data = data["type_list"] + homedata = data["banner_list"][8:] + for item in json_data: + if item["type_name"] == "全部": + continue + has_non_empty_field = False + jsontype_extend = json.loads(item["type_extend"]) + homedata.extend(item["recommend_list"]) + jsontype_extend["sort"] = "最新,最热,最赞" + classes.append({"type_name": item["type_name"], "type_id": item["type_id"]}) + for key in dy: + if key in jsontype_extend and jsontype_extend[key].strip() != "": + has_non_empty_field = True + break + if has_non_empty_field: + filters[str(item["type_id"])] = [] + for dkey in jsontype_extend: + if dkey in dy and jsontype_extend[dkey].strip() != "": + values = jsontype_extend[dkey].split(",") + value_array = [{"n": value.strip(), "v": value.strip()} for value in values if + value.strip() != ""] + filters[str(item["type_id"])].append({"key": dkey, "name": dy[dkey], "value": value_array}) + result = {} + result["class"] = classes + result["filters"] = filters + result["list"] = homedata[1:] + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, tid, pg, filter, extend): + body = {"area": extend.get('area', '全部'), "year": extend.get('year', '全部'), "type_id": tid, "page": pg, + "sort": extend.get('sort', '最新'), "lang": extend.get('lang', '全部'), + "class": extend.get('class', '全部')} + result = {} + data = self.getdata("/api.php/getappapi.index/typeFilterVodList", body) + result["list"] = data["recommend_list"] + result["page"] = pg + result["pagecount"] = 9999 + result["limit"] = 90 + result["total"] = 999999 + return result + + def detailContent(self, ids): + body = f"vod_id={ids[0]}" + data = self.getdata("/api.php/getappapi.index/vodDetail", body) + vod = data["vod"] + play = [] + names = [] + for itt in data["vod_play_list"]: + a = [] + names.append(itt["player_info"]["show"]) + for it in itt['urls']: + it['user_agent']=itt["player_info"].get("user_agent") + it["parse"]=itt["player_info"].get("parse") + a.append(f"{it['name']}${self.e64(json.dumps(it))}") + play.append("#".join(a)) + vod["vod_play_from"] = "$$$".join(names) + vod["vod_play_url"] = "$$$".join(play) + result = {"list": [vod]} + return result + + def searchContent(self, key, quick, pg="1"): + body = f"keywords={key}&type_id=0&page={pg}" + data = self.getdata("/api.php/getappapi.index/searchList", body) + result = {"list": data["search_list"], "page": pg} + return result + + def playerContent(self, flag, id, vipFlags): + ids = json.loads(self.d64(id)) + h = {"User-Agent": (ids['user_agent'] or "okhttp/3.14.9")} + try: + if re.search(r'url=', ids['parse_api_url']): + data = self.fetch(ids['parse_api_url'], headers=h, timeout=10).json() + url = data.get('url') or data['data'].get('url') + else: + body = f"parse_api={ids.get('parse') or ids['parse_api_url'].replace(ids['url'], '')}&url={quote(self.aes(ids['url'], True))}&token={ids.get('token')}" + b = self.getdata("/api.php/getappapi.index/vodParse", body)['json'] + url = json.loads(b)['url'] + if 'error' in url: raise ValueError(f"解析失败: {url}") + p = 0 + except Exception as e: + print('错误信息:', e) + url, p = ids['url'], 1 + + if re.search(r'\.jpg|\.png|\.jpeg', url): + url = self.Mproxy(url) + result = {} + result["parse"] = p + result["url"] = url + result["header"] = h + return result + + def localProxy(self, param): + return self.Mlocal(param) + + def gethost(self): + headers = { + 'User-Agent': 'okhttp/3.14.9' + } + host = self.fetch('https://jingyu-1312635929.cos.ap-nanjing.myqcloud.com/1.json', + headers=headers).text.strip() + return host + + phend = { + 'User-Agent': 'Dalvik/2.1.0 (Linux; U; Android 11; M2012K10C Build/RP1A.200720.011)', + 'allowCrossProtocolRedirects': 'true' + } + + def aes(self, operation, text): + key = "4d83b87c4c5ea111".encode("utf-8") + iv = key + if operation == "encrypt": + cipher = AES.new(key, AES.MODE_CBC, iv) + ct_bytes = cipher.encrypt(pad(text.encode("utf-8"), AES.block_size)) + ct = b64encode(ct_bytes).decode("utf-8") + return ct + elif operation == "decrypt": + cipher = AES.new(key, AES.MODE_CBC, iv) + pt = unpad(cipher.decrypt(b64decode(text)), AES.block_size) + return pt.decode("utf-8") + + def header(self): + t = str(int(time.time())) + header = {"Referer":self.host, + "User-Agent": "okhttp/3.14.9", "app-version-code": "300", "app-ui-mode": "light", + "app-api-verify-time": t, "app-user-device-id": self.md5(t), + "app-api-verify-sign": self.aes("encrypt", t), + "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"} + return header + + def getdata(self, path, data=None): + vdata = self.post(f"{self.host}{path}", headers=self.header(), data=data, timeout=10).json()['data'] + data1 = self.aes("decrypt", vdata) + return json.loads(data1) + + def Mproxy(self, url): + return self.getProxyUrl() + "&url=" + b64encode(url.encode('utf-8')).decode('utf-8') + "&type=m3u8" + + def Mlocal(self, param,header=None): + url = self.d64(param["url"]) + ydata = self.fetch(url, headers=header, allow_redirects=False) + data = ydata.content.decode('utf-8') + if ydata.headers.get('Location'): + url = ydata.headers['Location'] + data = self.fetch(url, headers=header).content.decode('utf-8') + parsed_url = urlparse(url) + durl = parsed_url.scheme + "://" + parsed_url.netloc + lines = data.strip().split('\n') + for index, string in enumerate(lines): + if '#EXT' not in string and 'http' not in string: + last_slash_index = string.rfind('/') + lpath = string[:last_slash_index + 1] + lines[index] = durl + ('' if lpath.startswith('/') else '/') + lpath + data = '\n'.join(lines) + return [200, "application/vnd.apple.mpegur", data] + + 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() diff --git a/py/农民影视.py b/py/农民影视.py new file mode 100644 index 0000000..c218cad --- /dev/null +++ b/py/农民影视.py @@ -0,0 +1,223 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import concurrent.futures +import json +import re +import sys +import time +from base64 import b64decode, b64encode +import requests +from pyquery import PyQuery as pq +sys.path.append('..') +from base.spider import Spider + + +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 = { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36', + 'Pragma': 'no-cache', + 'Cache-Control': 'no-cache', + 'sec-ch-ua-platform': '"Android"', + 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="130", "Google Chrome";v="130"', + 'DNT': '1', + 'sec-ch-ua-mobile': '?1', + 'Sec-Fetch-Site': 'cross-site', + 'Sec-Fetch-Mode': 'no-cors', + 'Sec-Fetch-Dest': 'video', + 'Sec-Fetch-Storage-Access': 'active', + 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8' + } + + config ={"1": [{"key": "cateId","name": "类型","value": [{"n": "全部","v": "1"},{"n": "动作片","v": "5"},{"n": "喜剧片","v": "6"},{"n": "爱情片","v": "7"},{"n": "科幻片","v": "8"},{"n": "恐怖片","v": "9"},{"n": "剧情片","v": "10"},{"n": "战争片","v": "11"},{"n": "惊悚片","v": "16"},{"n": "奇幻片","v": "17"}]},{"key": "area","name": "地区","value": [{"n": "全部","v": ""},{"n": "大陆","v": "大陆"},{"n": "香港","v": "香港"},{"n": "台湾","v": "台湾"},{"n": "美国","v": "美国"},{"n": "韩国","v": "韩国"},{"n": "日本","v": "日本"},{"n": "泰国","v": "泰国"},{"n": "新加坡","v": "新加坡"},{"n": "马来西亚","v": "马来西亚"},{"n": "印度","v": "印度"},{"n": "英国","v": "英国"},{"n": "法国","v": "法国"},{"n": "加拿大","v": "加拿大"},{"n": "西班牙","v": "西班牙"},{"n": "俄罗斯","v": "俄罗斯"},{"n": "其它","v": "其它"}]},{"key": "year","name": "时间","value": [{"n": "全部","v": ""},{"n": "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"},{"n": "1979","v": "1979"},{"n": "1978","v": "1978"},{"n": "1977","v": "1977"},{"n": "1976","v": "1976"},{"n": "1975","v": "1975"},{"n": "1974","v": "1974"},{"n": "1973","v": "1973"},{"n": "1972","v": "1972"},{"n": "1971","v": "1971"},{"n": "1970","v": "1970"},{"n": "1969","v": "1969"},{"n": "1968","v": "1968"},{"n": "1967","v": "1967"},{"n": "1966","v": "1966"},{"n": "1965","v": "1965"},{"n": "1964","v": "1964"},{"n": "1963","v": "1963"},{"n": "1962","v": "1962"},{"n": "1961","v": "1961"},{"n": "1960","v": "1960"},{"n": "1959","v": "1959"},{"n": "1958","v": "1958"},{"n": "1957","v": "1957"},{"n": "1956","v": "1956"},{"n": "1955","v": "1955"},{"n": "1954","v": "1954"},{"n": "1953","v": "1953"},{"n": "1952","v": "1952"},{"n": "1951","v": "1951"},{"n": "1950","v": "1950"},{"n": "1949","v": "1949"},{"n": "1948","v": "1948"},{"n": "1947","v": "1947"},{"n": "1946","v": "1946"},{"n": "1945","v": "1945"},{"n": "1944","v": "1944"},{"n": "1943","v": "1943"},{"n": "1942","v": "1942"},{"n": "1941","v": "1941"},{"n": "1940","v": "1940"},{"n": "1939","v": "1939"},{"n": "1938","v": "1938"},{"n": "1937","v": "1937"},{"n": "1936","v": "1936"},{"n": "1935","v": "1935"},{"n": "1934","v": "1934"},{"n": "1933","v": "1933"},{"n": "1932","v": "1932"},{"n": "1931","v": "1931"},{"n": "1930","v": "1930"},{"n": "1929","v": "1929"},{"n": "1928","v": "1928"},{"n": "1927","v": "1927"},{"n": "1926","v": "1926"},{"n": "1925","v": "1925"},{"n": "1924","v": "1924"},{"n": "1923","v": "1923"},{"n": "1922","v": "1922"},{"n": "1921","v": "1921"},{"n": "1920","v": "1920"},{"n": "1919","v": "1919"},{"n": "1918","v": "1918"},{"n": "1917","v": "1917"},{"n": "1916","v": "1916"},{"n": "1915","v": "1915"},{"n": "1914","v": "1914"}]},{"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": ""},{"n": "时间","v": "time"},{"n": "人气","v": "hits"},{"n": "评分","v": "score"}]}],"2": [{"key": "cateId","name": "类型","value": [{"n": "全部","v": "2"},{"n": "国产剧","v": "12"},{"n": "港台泰","v": "13"},{"n": "日韩剧","v": "14"},{"n": "欧美剧","v": "15"}]},{"key": "area","name": "地区","value": [{"n": "全部","v": ""},{"n": "大陆","v": "大陆"},{"n": "香港","v": "香港"},{"n": "台湾","v": "台湾"},{"n": "美国","v": "美国"},{"n": "韩国","v": "韩国"},{"n": "日本","v": "日本"},{"n": "泰国","v": "泰国"},{"n": "新加坡","v": "新加坡"},{"n": "马来西亚","v": "马来西亚"},{"n": "印度","v": "印度"},{"n": "英国","v": "英国"},{"n": "法国","v": "法国"},{"n": "加拿大","v": "加拿大"},{"n": "西班牙","v": "西班牙"},{"n": "俄罗斯","v": "俄罗斯"},{"n": "其它","v": "其它"}]},{"key": "year","name": "时间","value": [{"n": "全部","v": ""},{"n": "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"},{"n": "1979","v": "1979"},{"n": "1978","v": "1978"},{"n": "1977","v": "1977"},{"n": "1976","v": "1976"},{"n": "1975","v": "1975"},{"n": "1974","v": "1974"},{"n": "1973","v": "1973"},{"n": "1972","v": "1972"},{"n": "1971","v": "1971"},{"n": "1970","v": "1970"},{"n": "1969","v": "1969"},{"n": "1968","v": "1968"},{"n": "1967","v": "1967"},{"n": "1966","v": "1966"},{"n": "1965","v": "1965"},{"n": "1964","v": "1964"},{"n": "1963","v": "1963"},{"n": "1962","v": "1962"},{"n": "1961","v": "1961"},{"n": "1960","v": "1960"}]},{"key": "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": ""},{"n": "时间","v": "time"},{"n": "人气","v": "hits"},{"n": "评分","v": "score"}]}],"3": [{"key": "area","name": "地区","value": [{"n": "全部","v": ""},{"n": "大陆","v": "大陆"},{"n": "香港","v": "香港"},{"n": "台湾","v": "台湾"},{"n": "美国","v": "美国"},{"n": "韩国","v": "韩国"},{"n": "日本","v": "日本"},{"n": "泰国","v": "泰国"},{"n": "新加坡","v": "新加坡"},{"n": "马来西亚","v": "马来西亚"},{"n": "印度","v": "印度"},{"n": "英国","v": "英国"},{"n": "法国","v": "法国"},{"n": "加拿大","v": "加拿大"},{"n": "西班牙","v": "西班牙"},{"n": "俄罗斯","v": "俄罗斯"},{"n": "其它","v": "其它"}]},{"key": "year","name": "时间","value": [{"n": "全部","v": ""},{"n": "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"}]},{"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": ""},{"n": "时间","v": "time"},{"n": "人气","v": "hits"},{"n": "评分","v": "score"}]}],"4": [{"key": "cateId","name": "类型","value": [{"n": "全部","v": "4"},{"n": "动漫剧","v": "18"},{"n": "动漫片","v": "19"}]},{"key": "area","name": "地区","value": [{"n": "全部","v": ""},{"n": "大陆","v": "大陆"},{"n": "香港","v": "香港"},{"n": "台湾","v": "台湾"},{"n": "美国","v": "美国"},{"n": "韩国","v": "韩国"},{"n": "日本","v": "日本"},{"n": "泰国","v": "泰国"},{"n": "新加坡","v": "新加坡"},{"n": "马来西亚","v": "马来西亚"},{"n": "印度","v": "印度"},{"n": "英国","v": "英国"},{"n": "法国","v": "法国"},{"n": "加拿大","v": "加拿大"},{"n": "西班牙","v": "西班牙"},{"n": "俄罗斯","v": "俄罗斯"},{"n": "其它","v": "其它"}]},{"key": "year","name": "时间","value": [{"n": "全部","v": ""},{"n": "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"},{"n": "1979","v": "1979"},{"n": "1978","v": "1978"},{"n": "1977","v": "1977"},{"n": "1976","v": "1976"},{"n": "1975","v": "1975"},{"n": "1974","v": "1974"},{"n": "1973","v": "1973"},{"n": "1972","v": "1972"},{"n": "1971","v": "1971"},{"n": "1970","v": "1970"},{"n": "1969","v": "1969"},{"n": "1968","v": "1968"},{"n": "1967","v": "1967"}]},{"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": ""},{"n": "时间","v": "time"},{"n": "人气","v": "hits"},{"n": "评分","v": "score"}]}],"26": [{"key": "area","name": "地区","value": [{"n": "全部","v": ""},{"n": "大陆","v": "大陆"},{"n": "香港","v": "香港"},{"n": "台湾","v": "台湾"},{"n": "美国","v": "美国"},{"n": "韩国","v": "韩国"},{"n": "日本","v": "日本"},{"n": "泰国","v": "泰国"},{"n": "新加坡","v": "新加坡"},{"n": "马来西亚","v": "马来西亚"},{"n": "印度","v": "印度"},{"n": "英国","v": "英国"},{"n": "法国","v": "法国"},{"n": "加拿大","v": "加拿大"},{"n": "西班牙","v": "西班牙"},{"n": "俄罗斯","v": "俄罗斯"},{"n": "其它","v": "其它"}]},{"key": "year","name": "时间","value": [{"n": "全部","v": ""},{"n": "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": ""},{"n": "时间","v": "time"},{"n": "人气","v": "hits"},{"n": "评分","v": "score"}]}]} + + def homeContent(self, filter): + data = self.getpq() + cdata = data('#topnav .swiper-wrapper li') + result = {} + classes = [] + videos = [] + for k in cdata.items(): + i = k('a').attr('href') + if i and 'type' in i and '音乐' not in k.text(): + classes.append({ + 'type_name': k.text(), + 'type_id': i.split('-')[-3], + }) + for i in list(data('.globalPicList').items())[1:]: + videos.extend(self.getlist(i('ul li'))) + result['class'] = classes + result['filters'] = self.config + result['list'] = videos + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, tid, pg, filter, extend): + data = self.getpq( + f"/vod-list-id-{extend.get('cateId', tid)}-pg-{pg}-order--by-{extend.get('by', 'time')}-class-0-year-{extend.get('year', '')}-letter-{extend.get('letter', '')}-area-{extend.get('area', '')}-lang-.html") + result = {} + result['list'] = self.getlist(data('.globalPicList .resize_list li')) + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + data = self.getpq(ids[0]) + v = data('.numList ul li').eq(0)('a').attr('href') + html = self.getpq(v) + d = html('.detailPosterIntro script').eq(0).text() + mac_from = re.search(r"mac_from='(.*?)'", d) + mac_url = re.search(r"mac_url='(.*?)'", d).group(1) + z = data('.page-bd') + c = z('.desc_item') + vod = { + 'vod_name': z('h1 a').text(), + 'vod_year': c.eq(3)('a').text(), + 'vod_remarks': c.eq(0)('font').text(), + 'vod_actor': c.eq(1)('a').text(), + 'vod_director': c.eq(2)('a').text(), + 'vod_content': data('.detail-con p').text().split(':')[-1], + 'vod_play_from': mac_from.group(1) if mac_from else '呜呜呜', + 'vod_play_url': mac_url + } + return {'list': [vod]} + + def searchContent(self, key, quick, pg="1"): + data = pq(self.post(f"{self.host}/index.php?m=vod-search", data={'wd': key}, headers=self.headers).text) + video = [] + for k in data('#data_list li').items(): + video.append({ + 'vod_id': k('.pic a').attr('href'), + 'vod_name': k('.sTit').text(), + 'vod_pic': k('.pic img').attr('src'), + 'vod_year': k('.sStyle').text(), + 'vod_remarks': k('.sDes').eq(-1).text() + }) + return {'list': video, 'page': pg} + + def playerContent(self, flag, id, vipFlags): + try: + if flag == '呜呜呜': raise Exception('未找到播放地址') + jxdata = self.getpq(f"/player/{flag}.js").html() + jxurl = re.search(r'http.*?url=', jxdata).group() + data = self.fetch(f"{jxurl}{id}", headers=self.headers).text + matches = re.findall(r'http.*?url=', data) + if len(matches): + url = [] + for i, x in enumerate(matches): + js = {'jx': x, 'id': id} + purl = f"{self.getProxyUrl()}&wdict={self.e64(json.dumps(js))}" + url.extend([f'线路{i + 1}', purl]) + else: + url = re.search(r"url='(.*?)'", data).group(1) + if not url: raise Exception('未找到播放地址') + p = 0 + except: + p, url = 1, id + return {'parse': p, 'url': url, 'header': self.headers} + + def localProxy(self, param): + wdict = json.loads(self.d64(param['wdict'])) + url = f"{wdict['jx']}{wdict['id']}" + data = pq(self.fetch(url, headers=self.headers).text) + html = data('script').eq(-1).text() + url = re.search(r'src="(.*?)"', html).group(1) + return [302, 'text/html', None, {'Location': url}] + + def liveContent(self, url): + pass + + def gethost(self): + data = pq(self.fetch('https://www.nmdvd.com', headers=self.headers).text) + hlist = data('a[rel="nofollow"] b').text().split(' ') + return self.host_late(hlist) + + def host_late(self, urls): + with concurrent.futures.ThreadPoolExecutor() as executor: + future_to_url = { + executor.submit(self.test_host, f"https://{url}"): f"https://{url}" + for url in urls + } + results = {} + for future in concurrent.futures.as_completed(future_to_url): + url = future_to_url[future] + try: + results[url] = future.result() + except Exception as e: + results[url] = float('inf') + min_url = min(results.items(), key=lambda x: x[1])[0] if results else None + if all(delay == float('inf') for delay in results.values()) or not min_url: + return f"https://{urls[0]}" + return min_url + + def test_host(self, url): + try: + start_time = time.monotonic() + response = requests.head( + url, + timeout=1.0, + allow_redirects=False, + headers=self.headers + ) + response.raise_for_status() + return (time.monotonic() - start_time) * 1000 + except Exception as e: + print(f"测试{url}失败: {str(e)}") + return float('inf') + + def getpq(self, path=''): + data = self.fetch(f"{self.host}{path}", headers=self.headers).text + return pq(data) + + def getlist(self, data): + videos = [] + for k in data.items(): + i = k('.sBottom') + j = i('em').text() + i.remove('em') + videos.append({ + 'vod_id': k('a').attr('href'), + 'vod_name': k('.sTit').text(), + 'vod_pic': k('.pic img').attr('src'), + 'vod_year': j, + 'vod_remarks': i.text(), + }) + return videos + + 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 "" diff --git a/py/剧多短剧.py b/py/剧多短剧.py new file mode 100644 index 0000000..a25f44f --- /dev/null +++ b/py/剧多短剧.py @@ -0,0 +1,313 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import base64 +import binascii +import json +import random +import sys +import time +import uuid +from base64 import b64decode, b64encode +from Crypto.Cipher import AES +from Crypto.Hash import MD5 +from Crypto.Util.Padding import unpad, pad +sys.path.append('..') +from base.spider import Spider + + +class Spider(Spider): + + def init(self, extend=""): + self.ut = False + # self.did, self.ntid =self.getdid() + self.did, self.ntid = 'e59eb2465f61b9ca','65a0de19b3a2ec93fa479ad6' + self.token, self.uid = self.gettoken() + self.phost, self.phz,self.mphost=self.getpic() + # self.phost, self.phz,self.mphost = ('https://dbtp.tgydy.com','.log','https://dplay.nbzsmc.com') + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + host='http://192.151.245.34:8089' + + def md5(self, text): + h = MD5.new() + h.update(text.encode('utf-8')) + return h.hexdigest() + + def uuid(self): + return str(uuid.uuid4()) + + def getdid(self): + did = self.random_str(16) + ntid = self.random_str(24) + return did, ntid + # try: + # if self.getCache('did'): + # return self.getCache('did'), self.getCache('ntid') + # else: + # self.setCache('did', did) + # self.setCache('ntid', ntid) + # return did, ntid + # except Exception as e: + # self.setCache('did', did) + # self.setCache('ntid', ntid) + # return did, ntid + + def aes(self, text, bool=True): + key = b64decode('c0k4N1RfKTY1U1cjJERFRA==') + iv = b64decode('VzIjQWRDVkdZSGFzSEdEVA==') + if bool: + cipher = AES.new(key, AES.MODE_CBC, iv) + ct_bytes = cipher.encrypt(pad(text.encode("utf-8"), AES.block_size)) + ct = b64encode(ct_bytes).decode("utf-8") + return ct + else: + cipher = AES.new(key, AES.MODE_CBC, iv) + pt = unpad(cipher.decrypt(b64decode(text)), AES.block_size) + ptt=json.loads(pt.decode("utf-8")) + return ptt + + def random_str(self,length=24): + hex_chars = '0123456789abcdef' + return ''.join(random.choice(hex_chars) for _ in range(length)) + + def gettoken(self): + params={"deviceId":self.did,"deviceModel":"8848钛晶手机","devicePlatform":"1","tenantId":self.ntid} + data=self.getdata('/supports/anonyLogin',params) + self.ut=True + return data['data']['token'], data['data']['userId'] + + def getdata(self,path,params=None): + t = int(time.time()*1000) + n=self.md5(f'{self.uuid()}{t}') + if params: + ct=self.aes(json.dumps(params)) + else: + ct=f'{t}{n}' + s=self.md5(f'{ct}8j@78m.367HGDF') + headers = { + 'User-Agent': 'okhttp-okgo/jeasonlzy', + 'Connection': 'Keep-Alive', + 'Accept-Language': 'zh-CN,zh;q=0.8', + 'tenantId': self.ntid, + 'n': n, + 't': str(int(t/1000)), + 's': s, + } + if self.ut: + headers['ta-token'] = self.token + headers['userId'] = self.uid + if params: + params={'ct':ct} + response = self.post(f'{self.host}{path}', headers=headers, json=params).text + else: + response = self.fetch(f'{self.host}{path}', headers=headers).text + data=self.aes(response[1:-1],False) + return data + + def getpic(self): + try: + at = int(time.time() * 1000) + t=str(int(at/ 1000)) + n = self.md5(f'{self.uuid()}{at}') + headers = { + 'Host': '192.151.245.34:8089', + 'User-Agent': 'okhttp-okgo/jeasonlzy', + 'Connection': 'Keep-Alive', + 'Accept-Language': 'zh-CN,zh;q=0.8', + 'tenantId': self.ntid, + 'userId': self.uid, + 'ta-token': self.token, + 'n': n, + 't': t, + 's': self.md5(f'{t}{n}8j@78m.367HGDF') + } + params = { + 'tenantId': self.ntid, + } + response = self.fetch(f'{self.host}/supports/configs', params=params, headers=headers).text + data=self.aes(response[1:-1],False) + config = { + 'image_cdn': '', + 'image_cdn_path': '', + 'cdn-domain': '' + } + for item in data.get('data', []): + name = item.get('name') + records = item.get('records', []) + + if name in config and records: + value = records[0].get('value', '') + if name == 'cdn-domain': + value = value.split('#')[0] + config[name] = value + + return config['image_cdn'], config['image_cdn_path'], config['cdn-domain'] + + except Exception as e: + print(f"Error in getpic: {e}") + return 'https://dbtp.tgydy.com', '.log', 'https://dplay.nbzsmc.com' + + def getlist(self,data): + vod=[] + for i in data: + vod.append({ + 'vod_id': f'{i.get("movieId")}@{i.get("entryNum")}', + 'vod_name': i.get('title'), + 'vod_pic': f'{self.getProxyUrl()}&path={i.get("thumbnail")}', + 'vod_year': i.get('score'), + 'vod_remarks': f'{i.get("entryNum")}集' + }) + return vod + + def homeContent(self, filter): + data=self.getdata('/movies/classifies') + result = {} + cateManual = { + "榜单": "ranking/getTodayHotRank", + "专辑": "getTMovieFolderPage", + "剧场": "getClassMoviePage2", + "演员": "follow/getRecommendActorPage", + } + classes = [] + for k in cateManual: + classes.append({ + 'type_name': k, + 'type_id': cateManual[k] + }) + filters = {} + if data.get('data'): + filters["getClassMoviePage2"] = [ + { + "key": "type", + "name": "分类", + "value": [ + {"n": item["name"], "v": item["classifyId"]} + for item in data["data"] + ] + } + ] + filters["ranking/getTodayHotRank"] = [ + { + "key": "type", + "name": "榜单", + "value": [ + {"n": "播放榜", "v": "getWeekHotPlayRank"}, + {"n": "高赞榜", "v": "getWeekStarRank"}, + {"n": "追剧榜", "v": "getSubTMoviePage"}, + {"n": "高分榜", "v": "ranking/getScoreRank"} + ] + } + ] + filters["follow/getRecommendActorPage"] = [ + { + "key": "type", + "name": "性别", + "value": [ + {"n": "男", "v": "0"}, + {"n": "女", "v": "1"} + ] + } + ] + result['class'] = classes + result['filters'] = filters + return result + + def homeVideoContent(self): + params = {"pageNo":"1","pageSize":"30","platform":"1","deviceId":self.did,"tenantId":self.ntid} + data=self.getdata('/news/getRecommendTMoviePage',params) + vod=self.getlist(data['data']['records']) + return {'list':vod} + + def categoryContent(self, tid, pg, filter, extend): + params={} + path = f'/news/{tid}' + if tid=='getClassMoviePage2': + parama={"pageNo":pg,"pageSize":"30","orderFlag":"0","haveActor":"-1","classifyId":extend.get('type','-1'),"tagId":""} + elif 'rank' in tid: + path=f'/news/{extend.get("type") or tid}' + parama={"pageNo":pg,"pageSize":"30"} + elif 'follow' in tid: + parama={"pageNo":pg,"pageSize":"20"} + if extend.get('type'): + path=f'/news/getActorPage' + parama={"pageNo":pg,"pageSize":"50","sex":extend.get('type')} + elif tid=='getTMovieFolderPage': + parama={"pageNo":pg,"pageSize":"20"} + elif '@' in tid: + path='/news/getActorTMoviePage' + parama={"id":tid.split('@')[0],"pageNo":pg,"pageSize":"30"} + params['platform'] = '1' + params['deviceId'] = self.did + params['tenantId'] = self.ntid + data=self.getdata(path,parama) + vods=[] + if 'follow' in tid: + for i in data['data']['records']: + vods.append({ + 'vod_id': f'{i.get("id")}@', + 'vod_name': i.get('name'), + 'vod_pic': f"{self.getProxyUrl()}&path={i.get('avatar')}", + 'vod_tag': 'folder', + 'vod_remarks': f'作品{i.get("movieNum")}', + 'style': {"type": "oval"} + }) + else: + vdata=data['data']['records'] + if tid=='getTMovieFolderPage': + vdata=[j for i in data['data']['records'] for j in i['movieList']] + vods=self.getlist(vdata) + result = {} + result['list'] = vods + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + ids=ids[0].split('@') + params = {"pageNo": "1", "pageSize": ids[1], "movieId": ids[0], "platform": "1", "deviceId": self.did, "tenantId": self.ntid} + data = self.getdata('/news/getEntryPage', params) + print(data) + plist=[f'第{i.get("entryNum")}集${i.get("mp4PlayAddress") or i.get("playAddress")}' for i in data['data']['records']] + vod = { + 'vod_play_from': '嗷呜爱看短剧', + 'vod_play_url': '#'.join(plist), + } + return {'list':[vod]} + + def searchContent(self, key, quick, pg="1"): + params = {"pageNo": pg, "pageSize": "20", "keyWord": key, "orderFlag": "0", "platform": "1", "deviceId": self.did, "tenantId": self.ntid} + data = self.getdata('/news/searchTMoviePage', params) + vod = self.getlist(data['data']['records']) + return {'list':vod,'page':pg} + + def playerContent(self, flag, id, vipFlags): + return {'parse': 0, 'url': f'{self.mphost}{id}', 'header': {'User-Agent':'Dalvik/2.1.0 (Linux; U; Android 11; M2012K10C Build/RP1A.200720.011)'}} + + def localProxy(self, param): + data=self.fetch(f'{self.phost}{param.get("path")}{self.phz}',headers={'User-Agent':'Dalvik/2.1.0 (Linux; U; Android 11; M2012K10C Build/RP1A.200720.011)'}) + def decrypt(encrypted_text): + try: + key = base64.urlsafe_b64decode("iM41VipvCFtToAFFRExEXw==") + iv = base64.urlsafe_b64decode("0AXRTXzmMSrlRSemWb4sVQ==") + cipher = AES.new(key, AES.MODE_CBC, iv) + decrypted_padded = cipher.decrypt(encrypted_text) + decrypted_data = unpad(decrypted_padded, AES.block_size) + return decrypted_data + except (binascii.Error, ValueError): + return None + return [200, data.headers.get('Content-Type'), decrypt(data.content)] + diff --git a/py/剧多短剧APP.py b/py/剧多短剧APP.py new file mode 100644 index 0000000..0d4e893 --- /dev/null +++ b/py/剧多短剧APP.py @@ -0,0 +1,314 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import base64 +import binascii +import json +import random +import sys +import time +import uuid +from base64 import b64decode, b64encode +from Crypto.Cipher import AES +from Crypto.Hash import MD5 +from Crypto.Util.Padding import unpad, pad +sys.path.append('..') +from base.spider import Spider + + +class Spider(Spider): + + def init(self, extend=""): + self.ut = False + # self.did, self.ntid =self.getdid() + self.did, self.ntid = 'e59eb2465f61b9ca','65a0de19b3a2ec93fa479ad6' + self.token, self.uid = self.gettoken() + self.phost, self.phz,self.mphost=self.getpic() + # self.phost, self.phz,self.mphost = ('https://dbtp.tgydy.com','.log','https://dplay.nbzsmc.com') + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + host='http://192.151.245.34:8089' + + def md5(self, text): + h = MD5.new() + h.update(text.encode('utf-8')) + return h.hexdigest() + + def uuid(self): + return str(uuid.uuid4()) + + def getdid(self): + did = self.random_str(16) + ntid = self.random_str(24) + return did, ntid + # try: + # if self.getCache('did'): + # return self.getCache('did'), self.getCache('ntid') + # else: + # self.setCache('did', did) + # self.setCache('ntid', ntid) + # return did, ntid + # except Exception as e: + # self.setCache('did', did) + # self.setCache('ntid', ntid) + # return did, ntid + + def aes(self, text, bool=True): + key = b64decode('c0k4N1RfKTY1U1cjJERFRA==') + iv = b64decode('VzIjQWRDVkdZSGFzSEdEVA==') + if bool: + cipher = AES.new(key, AES.MODE_CBC, iv) + ct_bytes = cipher.encrypt(pad(text.encode("utf-8"), AES.block_size)) + ct = b64encode(ct_bytes).decode("utf-8") + return ct + else: + cipher = AES.new(key, AES.MODE_CBC, iv) + pt = unpad(cipher.decrypt(b64decode(text)), AES.block_size) + ptt=json.loads(pt.decode("utf-8")) + return ptt + + def random_str(self,length=24): + hex_chars = '0123456789abcdef' + return ''.join(random.choice(hex_chars) for _ in range(length)) + + def gettoken(self): + params={"deviceId":self.did,"deviceModel":"8848钛晶手机","devicePlatform":"1","tenantId":self.ntid} + data=self.getdata('/supports/anonyLogin',params) + self.ut=True + return data['data']['token'], data['data']['userId'] + + def getdata(self,path,params=None): + t = int(time.time()*1000) + n=self.md5(f'{self.uuid()}{t}') + if params: + ct=self.aes(json.dumps(params)) + else: + ct=f'{t}{n}' + s=self.md5(f'{ct}8j@78m.367HGDF') + headers = { + 'User-Agent': 'okhttp-okgo/jeasonlzy', + 'Connection': 'Keep-Alive', + 'Accept-Language': 'zh-CN,zh;q=0.8', + 'tenantId': self.ntid, + 'n': n, + 't': str(int(t/1000)), + 's': s, + } + if self.ut: + headers['ta-token'] = self.token + headers['userId'] = self.uid + if params: + params={'ct':ct} + response = self.post(f'{self.host}{path}', headers=headers, json=params).text + else: + response = self.fetch(f'{self.host}{path}', headers=headers).text + data=self.aes(response[1:-1],False) + return data + + def getpic(self): + try: + at = int(time.time() * 1000) + t=str(int(at/ 1000)) + n = self.md5(f'{self.uuid()}{at}') + headers = { + 'Host': '192.151.245.34:8089', + 'User-Agent': 'okhttp-okgo/jeasonlzy', + 'Connection': 'Keep-Alive', + 'Accept-Language': 'zh-CN,zh;q=0.8', + 'tenantId': self.ntid, + 'userId': self.uid, + 'ta-token': self.token, + 'n': n, + 't': t, + 's': self.md5(f'{t}{n}8j@78m.367HGDF') + } + params = { + 'tenantId': self.ntid, + } + response = self.fetch(f'{self.host}/supports/configs', params=params, headers=headers).text + data=self.aes(response[1:-1],False) + config = { + 'image_cdn': '', + 'image_cdn_path': '', + 'cdn-domain': '' + } + for item in data.get('data', []): + name = item.get('name') + records = item.get('records', []) + + if name in config and records: + value = records[0].get('value', '') + if name == 'cdn-domain': + value = value.split('#')[0] + config[name] = value + + return config['image_cdn'], config['image_cdn_path'], config['cdn-domain'] + + except Exception as e: + print(f"Error in getpic: {e}") + return 'https://dbtp.tgydy.com', '.log', 'https://dplay.nbzsmc.com' + + def getlist(self,data): + vod=[] + for i in data: + vod.append({ + 'vod_id': f'{i.get("movieId")}@{i.get("entryNum")}', + 'vod_name': i.get('title'), + 'vod_pic': f'{self.getProxyUrl()}&path={i.get("thumbnail")}', + 'vod_year': i.get('score'), + 'vod_remarks': f'{i.get("entryNum")}集' + }) + return vod + + def homeContent(self, filter): + data=self.getdata('/movies/classifies') + result = {} + cateManual = { + "榜单": "ranking/getTodayHotRank", + "专辑": "getTMovieFolderPage", + "剧场": "getClassMoviePage2", + "演员": "follow/getRecommendActorPage", + } + classes = [] + for k in cateManual: + classes.append({ + 'type_name': k, + 'type_id': cateManual[k] + }) + filters = {} + if data.get('data'): + filters["getClassMoviePage2"] = [ + { + "key": "type", + "name": "分类", + "value": [ + {"n": item["name"], "v": item["classifyId"]} + for item in data["data"] + ] + } + ] + filters["ranking/getTodayHotRank"] = [ + { + "key": "type", + "name": "榜单", + "value": [ + {"n": "播放榜", "v": "getWeekHotPlayRank"}, + {"n": "高赞榜", "v": "getWeekStarRank"}, + {"n": "追剧榜", "v": "getSubTMoviePage"}, + {"n": "高分榜", "v": "ranking/getScoreRank"} + ] + } + ] + filters["follow/getRecommendActorPage"] = [ + { + "key": "type", + "name": "性别", + "value": [ + {"n": "男", "v": "0"}, + {"n": "女", "v": "1"} + ] + } + ] + result['class'] = classes + result['filters'] = filters + return result + + def homeVideoContent(self): + params = {"pageNo":"1","pageSize":"30","platform":"1","deviceId":self.did,"tenantId":self.ntid} + data=self.getdata('/news/getRecommendTMoviePage',params) + vod=self.getlist(data['data']['records']) + return {'list':vod} + + def categoryContent(self, tid, pg, filter, extend): + params={} + path = f'/news/{tid}' + if tid=='getClassMoviePage2': + parama={"pageNo":pg,"pageSize":"30","orderFlag":"0","haveActor":"-1","classifyId":extend.get('type','-1'),"tagId":""} + elif 'rank' in tid: + path=f'/news/{extend.get("type") or tid}' + parama={"pageNo":pg,"pageSize":"30"} + elif 'follow' in tid: + parama={"pageNo":pg,"pageSize":"20"} + if extend.get('type'): + path=f'/news/getActorPage' + parama={"pageNo":pg,"pageSize":"50","sex":extend.get('type')} + elif tid=='getTMovieFolderPage': + parama={"pageNo":pg,"pageSize":"20"} + elif '@' in tid: + path='/news/getActorTMoviePage' + parama={"id":tid.split('@')[0],"pageNo":pg,"pageSize":"30"} + params['platform'] = '1' + params['deviceId'] = self.did + params['tenantId'] = self.ntid + data=self.getdata(path,parama) + vods=[] + if 'follow' in tid: + for i in data['data']['records']: + vods.append({ + 'vod_id': f'{i.get("id")}@', + 'vod_name': i.get('name'), + 'vod_pic': i.get('avatar'), + 'vod_tag': 'folder', + 'vod_remarks': f'作品{i.get("movieNum")}', + 'style': {"type": "oval"} + }) + else: + vdata=data['data']['records'] + if tid=='getTMovieFolderPage': + vdata=[j for i in data['data']['records'] for j in i['movieList']] + vods=self.getlist(vdata) + result = {} + result['list'] = vods + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + ids=ids[0].split('@') + params = {"pageNo": "1", "pageSize": ids[1], "movieId": ids[0], "platform": "1", "deviceId": self.did, "tenantId": self.ntid} + data = self.getdata('/news/getEntryPage', params) + print(data) + plist=[f'第{i.get("entryNum")}集${i.get("mp4PlayAddress") or i.get("playAddress")}' for i in data['data']['records']] + vod = { + 'vod_play_from': '嗷呜爱看短剧', + 'vod_play_url': '#'.join(plist), + } + return {'list':[vod]} + + def searchContent(self, key, quick, pg="1"): + params = {"pageNo": pg, "pageSize": "20", "keyWord": key, "orderFlag": "0", "platform": "1", "deviceId": self.did, "tenantId": self.ntid} + data = self.getdata('/news/searchTMoviePage', params) + vod = self.getlist(data['data']['records']) + return {'list':vod,'page':pg} + + def playerContent(self, flag, id, vipFlags): + return {'parse': 0, 'url': f'{self.mphost}{id}', 'header': {'User-Agent':'Dalvik/2.1.0 (Linux; U; Android 11; M2012K10C Build/RP1A.200720.011)'}} + + def localProxy(self, param): + type=param.get('path').split('.')[-1] + data=self.fetch(f'{self.phost}{param.get("path")}{self.phz}',headers={'User-Agent':'Dalvik/2.1.0 (Linux; U; Android 11; M2012K10C Build/RP1A.200720.011)'}) + def decrypt(encrypted_text): + try: + key = base64.urlsafe_b64decode("iM41VipvCFtToAFFRExEXw==") + iv = base64.urlsafe_b64decode("0AXRTXzmMSrlRSemWb4sVQ==") + cipher = AES.new(key, AES.MODE_CBC, iv) + decrypted_padded = cipher.decrypt(encrypted_text) + decrypted_data = unpad(decrypted_padded, AES.block_size) + return decrypted_data + except (binascii.Error, ValueError): + return None + return [200, f'image/{type}', decrypt(data.content)] + diff --git a/py/剧粑粑影视.py b/py/剧粑粑影视.py new file mode 100644 index 0000000..458e9d3 --- /dev/null +++ b/py/剧粑粑影视.py @@ -0,0 +1,315 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import json +import random +import re +import sys +import time +from base64 import b64decode, b64encode +import concurrent.futures +import requests +from Crypto.Hash import MD5 +from pyquery import PyQuery as pq +sys.path.append('..') +from base.spider import Spider + +class Spider(Spider): + + def init(self, extend=""): + self.host=self.gethost() + self.headers.update({ + 'referer': f'{self.host}/', + 'origin': self.host, + }) + self.session = requests.Session() + self.session.headers.update(self.headers) + self.session.get(self.host) + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + headers = { + 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.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,application/signed-exchange;v=b3;q=0.7', + 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="134", "Google Chrome";v="134"', + 'sec-ch-ua-mobile': '?0', + 'sec-ch-ua-platform': '"macOS"', + 'sec-fetch-site': 'same-origin', + 'sec-fetch-mode': 'navigate', + 'sec-fetch-user': '?1', + 'sec-fetch-dest': 'document', + 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', + } + + config={ + "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":"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":"其他"}]},{"key":"year","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"},{"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":"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":"网剧"},{"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":"泰国"},{"n":"印度","v":"印度"},{"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"},{"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":"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":"求职"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"内地","v":"内地"},{"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"},{"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":"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":"推理"},{"n":"搞笑","v":"搞笑"},{"n":"冒险","v":"冒险"},{"n":"萝莉","v":"萝莉"},{"n":"校园","v":"校园"},{"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":"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":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}], + } + + def homeContent(self, filter): + data=self.getpq() + result = {} + classes = [] + for k in data('ul.swiper-wrapper').eq(0)('li').items(): + i=k('a').attr('href') + if i and 'type' in i: + classes.append({ + 'type_name': k.text(), + 'type_id': re.findall(r'\d+', i)[0], + }) + result['class'] = classes + result['list'] = self.getlist(data('.tab-content.ewave-pannel_bd li')) + result['filters'] = self.config + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, tid, pg, filter, extend): + path=f"/vodshow/{tid}-{extend.get('area','')}-{extend.get('by','')}-{extend.get('class','')}-----{pg}---{extend.get('year','')}.html" + data=self.getpq(path) + result = {} + result['list'] = self.getlist(data('ul.ewave-vodlist.clearfix li')) + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + data=self.getpq(f"/voddetail/{ids[0]}.html") + v=data('.ewave-content__detail') + c=data('p') + vod = { + 'type_name':c.eq(0)('a').text(), + 'vod_year': v('.data.hidden-sm').text(), + 'vod_remarks': v('h1').text(), + 'vod_actor': c.eq(1)('a').text(), + 'vod_director': c.eq(2)('a').text(), + 'vod_content': c.eq(-1).text(), + 'vod_play_from': '', + 'vod_play_url': '' + } + nd=list(data('ul.nav-tabs.swiper-wrapper li').items()) + pd=list(data('ul.ewave-content__playlist').items()) + n,p=[],[] + for i,x in enumerate(nd): + n.append(x.text()) + p.append('#'.join([f"{j.text()}${j('a').attr('href')}" for j in pd[i]('li').items()])) + vod['vod_play_url']='$$$'.join(p) + vod['vod_play_from']='$$$'.join(n) + return {'list':[vod]} + + def searchContent(self, key, quick, pg="1"): + if pg=="1": + p=f"-------------.html?wd={key}" + else: + p=f"{key}----------{pg}---.html" + data=self.getpq(f"/vodsearch/{p}") + return {'list':self.getlist(data('ul.ewave-vodlist__media.clearfix li')),'page':pg} + + def playerContent(self, flag, id, vipFlags): + try: + data=self.getpq(id) + jstr = json.loads(data('.ewave-player__video script').eq(0).text().split('=', 1)[-1]) + jxpath='/bbplayer/api.php' + data=self.session.post(f"{self.host}{jxpath}",data={'vid':jstr['url']}).json()['data'] + if re.search(r'\.m3u8|\.mp4',data['url']): + url=data['url'] + elif data['urlmode'] == 1: + url=self.decode1(data['url']) + elif data['urlmode'] == 2: + url=self.decode2(data['url']) + elif re.search(r'\.m3u8|\.mp4',jstr['url']): + url=jstr['url'] + else: + url=None + if not url:raise Exception('未找到播放地址') + p,c=0,'' + except Exception as e: + self.log(f"解析失败: {e}") + p,url,c=1,f"{self.host}{id}",'document.querySelector("#playleft iframe").contentWindow.document.querySelector("#start").click()' + return {'parse': p, 'url': url, 'header': {'User-Agent':'okhttp/3.12.1'},'click': c} + + def localProxy(self, param): + wdict=json.loads(self.d64(param['wdict'])) + url=f"{wdict['jx']}{wdict['id']}" + data=pq(self.fetch(url,headers=self.headers).text) + html=data('script').eq(-1).text() + url = re.search(r'src="(.*?)"', html).group(1) + return [302,'text/html',None,{'Location':url}] + + def liveContent(self, url): + pass + + def gethost(self): + data=pq(self.fetch('https://www.jubaba.vip',headers=self.headers).text) + hlist=list(data('.content-top ul li').items())[:2] + hsots=[j('a').attr('href') for i in hlist for j in i('a').items()] + return self.host_late(hsots) + + def host_late(self, urls): + with concurrent.futures.ThreadPoolExecutor() as executor: + future_to_url = { + executor.submit(self.test_host, url): url + for url in urls + } + results = {} + for future in concurrent.futures.as_completed(future_to_url): + url = future_to_url[future] + try: + results[url] = future.result() + except Exception as e: + results[url] = float('inf') + min_url = min(results.items(), key=lambda x: x[1])[0] if results else None + if all(delay == float('inf') for delay in results.values()) or not min_url: + return urls[0] + return min_url + + def test_host(self, url): + try: + start_time = time.monotonic() + response = requests.head( + url, + timeout=1.0, + allow_redirects=False, + headers=self.headers + ) + response.raise_for_status() + return (time.monotonic() - start_time) * 1000 + except Exception as e: + print(f"测试{url}失败: {str(e)}") + return float('inf') + + def getpq(self, path='',min=0,max=3): + data = self.session.get(f"{self.host}{path}") + data=data.text + try: + if '人机验证' in data: + print(f"第{min}次尝试人机验证") + jstr=pq(data)('script').eq(-1).html() + token,tpath,stt=self.extract(jstr) + body={'value':self.encrypt(self.host,stt),'token':self.encrypt(token,stt)} + cd=self.session.post(f"{self.host}{tpath}",data=body) + if min>max:raise Exception('人机验证失败') + return self.getpq(path,min+1,max) + return pq(data) + except: + return pq(data.encode('utf-8')) + + def encrypt(self, input_str,staticchars): + encodechars = "" + for char in input_str: + num0 = staticchars.find(char) + if num0 == -1: + code = char + else: + code = staticchars[(num0 + 3) % 62] + num1 = random.randint(0, 61) + num2 = random.randint(0, 61) + encodechars += staticchars[num1] + code + staticchars[num2] + return self.e64(encodechars) + + def extract(self, js_code): + token_match = re.search(r'var token = encrypt\("([^"]+)"\);', js_code) + token_value = token_match.group(1) if token_match else None + url_match = re.search(r'var url = \'([^\']+)\';', js_code) + url_value = url_match.group(1) if url_match else None + staticchars_match = re.search(r'var\s+staticchars\s*=\s*["\']([^"\']+)["\'];', js_code) + staticchars = staticchars_match.group(1) if staticchars_match else None + return token_value, url_value,staticchars + + def decode1(self, val): + url = self._custom_str_decode(val) + parts = url.split("/") + result = "/".join(parts[2:]) + key1 = json.loads(self.d64(parts[1])) + key2 = json.loads(self.d64(parts[0])) + decoded = self.d64(result) + return self._de_string(key1, key2, decoded) + + def _custom_str_decode(self, val): + decoded = self.d64(val) + key = self.md5("test") + result = "" + for i in range(len(decoded)): + result += chr(ord(decoded[i]) ^ ord(key[i % len(key)])) + return self.d64(result) + + def _de_string(self, key_array, value_array, input_str): + result = "" + for char in input_str: + if re.match(r'^[a-zA-Z]$', char): + if char in key_array: + index = key_array.index(char) + result += value_array[index] + continue + result += char + return result + + def decode2(self, url): + key = "PXhw7UT1B0a9kQDKZsjIASmOezxYG4CHo5Jyfg2b8FLpEvRr3WtVnlqMidu6cN" + url=self.d64(url) + result = "" + i = 1 + while i < len(url): + try: + index = key.find(url[i]) + if index == -1: + char = url[i] + else: + char = key[(index + 59) % 62] + result += char + except IndexError: + break + i += 3 + return result + + def getlist(self, data): + videos = [] + for k in data.items(): + j = k('.ewave-vodlist__thumb') + h=k('.text-overflow a') + if not h.attr('href'):h=j + videos.append({ + 'vod_id': re.findall(r'\d+', h.attr('href'))[0], + 'vod_name': j.attr('title'), + 'vod_pic': j.attr('data-original'), + 'vod_remarks': k('.pic-text').text(), + }) + return videos + + 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() diff --git a/py/哔哩直播.py b/py/哔哩直播.py new file mode 100644 index 0000000..6f427c7 --- /dev/null +++ b/py/哔哩直播.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/py/哔哩视频.py b/py/哔哩视频.py new file mode 100644 index 0000000..2b8a7cf --- /dev/null +++ b/py/哔哩视频.py @@ -0,0 +1,468 @@ +#coding=utf-8 +#!/usr/bin/python +import sys +import json +import time +from datetime import datetime +from difflib import SequenceMatcher +from urllib.parse import quote, unquote +sys.path.append('..') +from base.spider import Spider + +class Spider(Spider): # 元类 默认的元类 type + def getName(self): + return "B站番剧" + + def init(self, extend): + try: + self.extendDict = json.loads(extend) + except: + self.extendDict = {} + + def destroy(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def homeContent(self, filter): + result = {} + cateManual = { + "番剧": "1", + "国创": "4", + "电影": "2", + "综艺": "7", + "电视剧": "5", + } + classes = [] + for k in cateManual: + classes.append({ + 'type_name': k, + 'type_id': cateManual[k] + }) + result['class'] = classes + if filter: + result['filters'] = self.config['filter'] + currentYear = datetime.now().year + for resultfilter in result['filters']: + for rf in result['filters'][resultfilter]: + if rf['key'] == 'year': + for rfv in rf['value']: + if rfv['n'].isdigit(): + if int(rfv['n']) < currentYear: + pos = rf['value'].index(rfv) + for year in range(currentYear, int(rfv['n']), -1): + rf['value'].insert(pos, {'v': f'[{str(year)},{str(year+1)})', 'n': str(year)}) + pos += 1 + break + else: + break + elif rf['key'] == 'release_date': + for rfv in rf['value']: + if rfv['n'].isdigit(): + if int(rfv['n']) < currentYear: + pos = rf['value'].index(rfv) + for year in range(currentYear, int(rfv['n']), -1): + rf['value'].insert(pos, {'v': f'[{str(year)}-01-01 00:00:00,{str(year+1)}-01-01 00:00:00)', 'n': str(year)}) + pos += 1 + break + else: + break + return result + + def homeVideoContent(self): + return self.categoryContent('1', '1', False, {}) + + def categoryContent(self, cid, page, filter, ext): + page = int(page) + result = {} + videos = [] + cookie, _, _ = self.getCookie('{}') + url = 'https://api.bilibili.com/pgc/season/index/result?order=2&sort=0&pagesize=20&type=1&st={}&season_type={}&page={}'.format(cid, cid, page) + for key in ext: + url += f'&{key}={quote(ext[key])}' + r = self.fetch(url, headers=self.header, cookies=cookie, timeout=5) + data = json.loads(self.cleanText(r.text)) + vodList = data['data']['list'] + for vod in vodList: + aid = str(vod['season_id']).strip() + title = self.removeHtmlTags(self.cleanText(vod['title'])) + img = vod['cover'].strip() + remark = vod['index_show'].strip() + videos.append({ + "vod_id": aid, + "vod_name": title, + "vod_pic": img, + "vod_remarks": remark + }) + lenvideos = len(videos) + if data['data']['has_next'] == 1: + pagecount = page + 1 + else: + pagecount = page + result['list'] = videos + result['page'] = page + result['pagecount'] = pagecount + result['limit'] = lenvideos + result['total'] = lenvideos + return result + + def detailContent(self, did): + did = did[0] + url = "http://api.bilibili.com/pgc/view/web/season?season_id={0}".format(did) + r = self.fetch(url, headers=self.header, timeout=10) + data = json.loads(self.cleanText(r.text)) + vod = { + "vod_id": did, + "vod_name": self.removeHtmlTags(data['result']['title']), + "vod_pic": data['result']['cover'], + "type_name": data['result']['share_sub_title'], + "vod_actor": data['result']['actors'].replace('\n', ','), + "vod_content": self.removeHtmlTags(data['result']['evaluate']) + } + videoList = data['result']['episodes'] + playUrl = '' + for video in videoList: + eid = video['id'] + cid = video['cid'] + name = self.removeHtmlTags(video['share_copy']).replace("#", "-").replace('$', '*') + remark = time.strftime('%H:%M:%S', time.gmtime(video['duration']/1000)) + if remark.startswith('00:'): + remark = remark[3:] + playUrl = playUrl + '[{}]/{}${}_{}#'.format(remark, name, eid, cid) + vod['vod_play_from'] = 'B站番剧' + vod['vod_play_url'] = playUrl.strip('#') + result = { + 'list': [ + vod + ] + } + return result + + def searchContent(self, key, quick): + return self.searchContentPage(key, quick, '1') + + def searchContentPage(self, key, quick, page): + videos = [] + cookie = '' + if 'cookie' in self.extendDict: + cookie = self.extendDict['cookie'] + if 'json' in self.extendDict: + r = self.fetch(self.extendDict['json'], timeout=10) + if 'cookie' in r.json(): + cookie = r.json()['cookie'] + if cookie == '': + cookie = '{}' + elif type(cookie) == str and cookie.startswith('http'): + cookie = self.fetch(cookie, timeout=10).text.strip() + try: + if type(cookie) == dict: + cookie = json.dumps(cookie, ensure_ascii=False) + except: + pass + cookie, _, _ = self.getCookie(cookie) + url = f'https://api.bilibili.com/x/web-interface/search/type?search_type=media_bangumi&keyword={key}&page={page}' + r = self.fetch(url, headers=self.header, cookies=cookie, timeout=5) + data = json.loads(self.cleanText(r.text)) + if 'result' not in data['data']: + return {'list': videos}, 1 + vodList = data['data']['result'] + for vod in vodList: + sid = str(vod['season_id']).strip() + title = self.removeHtmlTags(self.cleanText(vod['title'])) + if SequenceMatcher(None, title, key).ratio() < 0.6 and key not in title: + continue + img = vod['eps'][0]['cover'].strip() + remark = self.removeHtmlTags(vod['index_show']).strip() + videos.append({ + "vod_id": sid, + "vod_name": title, + "vod_pic": img, + "vod_remarks": remark + }) + result = { + 'list': videos + } + return result + + def playerContent(self, flag, pid, vipFlags): + result = {} + pidList = pid.split("_") + aid = pidList[0] + cid = pidList[1] + url = 'https://api.bilibili.com/pgc/player/web/playurl?ep_id={0}&cid={1}&qn=120&fnval=4048&fnver=0&fourk=1'.format(aid, cid) + cookie = '' + extendDict = self.extendDict + if 'cookie' in extendDict: + cookie = extendDict['cookie'] + if 'json' in extendDict: + r = self.fetch(extendDict['json'], timeout=10) + if 'cookie' in r.json(): + cookie = r.json()['cookie'] + if cookie == '': + cookie = '{}' + elif type(cookie) == str and cookie.startswith('http'): + cookie = self.fetch(cookie, timeout=10).text.strip() + try: + if type(cookie) == dict: + cookie = json.dumps(cookie, ensure_ascii=False) + except: + pass + cookiesDict, _, _ = self.getCookie(cookie) + cookies = quote(json.dumps(cookiesDict)) + if 'thread' in extendDict: + thread = str(extendDict['thread']) + else: + thread = '0' + result["parse"] = '0' + result["playUrl"] = '' + result["url"] = f'http://127.0.0.1:9978/proxy?do=py&type=mpd&cookies={cookies}&url={quote(url)}&aid={aid}&cid={cid}&thread={thread}' + result["header"] = self.header + result['danmaku'] = 'https://api.bilibili.com/x/v1/dm/list.so?oid={}'.format(cid) + result["format"] = 'application/dash+xml' + return result + + def localProxy(self, params): + if params['type'] == "mpd": + return self.proxyMpd(params) + if params['type'] == "media": + return self.proxyMedia(params) + return None + + def proxyMpd(self, params): + content, durlinfos, mediaType = self.getDash(params) + if mediaType == 'mpd': + return [200, "application/dash+xml", content] + else: + url = content + durlinfo = durlinfos['durl'][0]['backup_url'] + try: + r = self.fetch(url, headers=self.header, stream=True, timeout=1) + statusCode = r.status_code + try: + r.close() + except: + pass + except: + try: + r.close() + except: + pass + statusCode = 404 + for url in durlinfo: + try: + r = self.fetch(url, headers=self.header, stream=True, timeout=1) + statusCode = r.status_code + except: + statusCode = 404 + if statusCode == 200: + break + try: + r.close() + except: + pass + if statusCode != 200 and self.retry == 0: + self.retry += 1 + self.proxyMedia(params, True) + header = self.header.copy() + if 'range' in params: + header['Range'] = params['range'] + if '127.0.0.1:7777' in url: + header['Location'] = url + return [302, "video/MP2T", None, header] + return [206, "application/octet-stream", self.fetch(content, headers=header, stream=True).content] + + def proxyMedia(self, params, forceRefresh=False): + _, dashinfos, _ = self.getDash(params) + if 'videoid' in params: + videoid = int(params['videoid']) + dashinfo = dashinfos['video'][videoid] + url = dashinfo['baseUrl'] + elif 'audioid' in params: + audioid = int(params['audioid']) + dashinfo = dashinfos['audio'][audioid] + url = dashinfo['baseUrl'] + else: + return [404, "text/plain", ""] + try: + r = self.fetch(url, headers=params['headers'], stream=True) + statusCode = r.status_code + try: + r.close() + except: + pass + except: + try: + r.close() + except: + pass + statusCode = 404 + for url in dashinfo['backupUrl']: + try: + r = self.fetch(url, headers=self.header, stream=True, timeout=1) + statusCode = r.status_code + except: + statusCode = 404 + if statusCode == 200: + break + try: + r.close() + except: + pass + if statusCode != 200 and self.retry == 0: + self.retry += 1 + self.proxyMedia(params, True) + header = self.header.copy() + if 'range' in params: + header['Range'] = params['range'] + return [206, "application/octet-stream", self.fetch(url, headers=header, stream=True).content] + + def getDash(self, params, forceRefresh=False): + aid = params['aid'] + cid = params['cid'] + url = unquote(params['url']) + if 'thread' in params: + thread = params['thread'] + else: + thread = 0 + header = self.header.copy() + self.setCache('debug', params['cookies']) + cookieDict = json.loads(params['cookies']) + key = f'bilimdmpdCache_{aid}_{cid}' + if forceRefresh: + self.delCache(key) + else: + data = self.getCache(key) + if data: + return data['content'], data['dashinfos'], data['type'] + + cookies = cookieDict.copy() + r = self.fetch(url, cookies=cookies, headers=header, timeout=5) + data = json.loads(self.cleanText(r.text)) + if data['code'] != 0: + return '', {}, '' + if not 'dash' in data['result']: + purl = data['result']['durl'][0]['url'] + try: + expiresAt = int(self.regStr(reg='deadline=(\d+)', src=purl).group(1)) - 60 + except: + expiresAt = int(time.time()) + 600 + if int(thread) > 0: + try: + self.fetch('http://127.0.0.1:7777') + except: + self.fetch('http://127.0.0.1:9978/go') + purl = f'http://127.0.0.1:7777?url={quote(purl)}&thread={thread}' + self.setCache(key, {'content': purl, 'type': 'mp4', 'dashinfos': data['result'], 'expiresAt': expiresAt}) + return purl, data['result'], 'mp4' + + dashinfos = data['result']['dash'] + duration = dashinfos['duration'] + minBufferTime = dashinfos['minBufferTime'] + videoinfo = '' + videoid = 0 + deadlineList = [] + # videoList = sorted(dashinfos['video'], key=lambda x: x['bandwidth'], reverse=True) + for video in dashinfos['video']: + try: + deadline = int(self.regStr(reg='deadline=(\d+)', src=video['baseUrl']).group(1)) + except: + deadline = int(time.time()) + 600 + deadlineList.append(deadline) + codecs = video['codecs'] + bandwidth = video['bandwidth'] + frameRate = video['frameRate'] + height = video['height'] + width = video['width'] + void = video['id'] + vidparams = params.copy() + vidparams['videoid'] = videoid + baseUrl = f'http://127.0.0.1:9978/proxy?do=py&type=media&cookies={quote(json.dumps(cookies))}&url={quote(url)}&aid={aid}&cid={cid}&videoid={videoid}' + videoinfo = videoinfo + f""" + {baseUrl} + + + + \n""" + videoid += 1 + audioinfo = '' + audioid = 0 + # audioList = sorted(dashinfos['audio'], key=lambda x: x['bandwidth'], reverse=True) + for audio in dashinfos['audio']: + try: + deadline = int(self.regStr(reg='deadline=(\d+)', src=audio['baseUrl']).group(1)) + except: + deadline = int(time.time()) + 600 + deadlineList.append(deadline) + bandwidth = audio['bandwidth'] + codecs = audio['codecs'] + aoid = audio['id'] + aidparams = params.copy() + aidparams['audioid'] = audioid + baseUrl = f'http://127.0.0.1:9978/proxy?do=py&type=media&cookies={quote(json.dumps(cookies))}&url={quote(url)}&aid={aid}&cid={cid}&audioid={audioid}' + audioinfo = audioinfo + f""" + {baseUrl} + + + + \n""" + audioid += 1 + mpd = f""" + + + + {videoinfo.strip()} + + + {audioinfo.strip()} + + + """ + expiresAt = min(deadlineList) - 60 + self.setCache(key, {'type': 'mpd', 'content': mpd.replace('&', '&'), 'dashinfos': dashinfos, 'expiresAt': expiresAt}) + return mpd.replace('&', '&'), dashinfos, 'mpd' + + def getCookie(self, cookie): + if '{' in cookie and '}' in cookie: + cookies = json.loads(cookie) + else: + cookies = dict([co.strip().split('=', 1) for co in cookie.strip(';').split(';')]) + bblogin = self.getCache('bblogin') + if bblogin: + imgKey = bblogin['imgKey'] + subKey = bblogin['subKey'] + return cookies, imgKey, subKey + + header = { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36" + } + r = self.fetch("http://api.bilibili.com/x/web-interface/nav", cookies=cookies, headers=header, timeout=10) + data = json.loads(r.text) + code = data["code"] + if code == 0: + imgKey = data['data']['wbi_img']['img_url'].rsplit('/', 1)[1].split('.')[0] + subKey = data['data']['wbi_img']['sub_url'].rsplit('/', 1)[1].split('.')[0] + self.setCache('bblogin', {'imgKey': imgKey, 'subKey': subKey, 'expiresAt': int(time.time()) + 1200}) + return cookies, imgKey, subKey + r = self.fetch("https://www.bilibili.com/", headers=header, timeout=5) + cookies = r.cookies.get_dict() + imgKey = '' + subKey = '' + return cookies, imgKey, subKey + + def removeHtmlTags(self, src): + from re import sub, compile + clean = compile('<.*?>') + return sub(clean, '', src) + + retry = 0 + header = { + "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36", + "Referer": "https://www.bilibili.com" + } + config = { + "filter": {"1":[{"key":"season_version","name":"类型","value":[{"v":'-1',"n":"全部"},{"v":'1',"n":"正片"},{"v":'2',"n":"电影"},{"v":'3',"n":"其他"}]},{"key":"area","name":"地区","value":[{"v":'-1',"n":"全部"},{"v":'2',"n":"日本"},{"v":'3',"n":"美国"},{"v":"1,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,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,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70","n":"其他"}]},{"key":"is_finish","name":"状态","value":[{"v":'-1',"n":"全部"},{"v":'1',"n":"完结"},{"v":'0',"n":"连载"}]},{"key":"copyright","name":"版权","value":[{"v":'-1',"n":"全部"},{"v":'3',"n":"独家"},{"v":"1,2,4","n":"其他"}]},{"key":"season_status","name":"付费","value":[{"v":'-1',"n":"全部"},{"v":'1',"n":"免费"},{"v":"2,6","n":"付费"},{"v":"4,6","n":"大会员"}]},{"key":"season_month","name":"季度","value":[{"v":'-1',"n":"全部"},{"v":'1',"n":"1月"},{"v":'4',"n":"4月"},{"v":'7',"n":"7月"},{"v":'10',"n":"10月"}]},{"key":"year","name":"年份","value":[{"v":'-1',"n":"全部"},{"v":"[2023,2024)","n":"2023"},{"v":"[2022,2023)","n":"2022"},{"v":"[2021,2022)","n":"2021"},{"v":"[2020,2021)","n":"2020"},{"v":"[2019,2020)","n":"2019"},{"v":"[2018,2019)","n":"2018"},{"v":"[2017,2018)","n":"2017"},{"v":"[2016,2017)","n":"2016"},{"v":"[2015,2016)","n":"2015"},{"v":"[2010,2015)","n":"2014-2010"},{"v":"[2005,2010)","n":"2009-2005"},{"v":"[2000,2005)","n":"2004-2000"},{"v":"[1990,2000)","n":"90年代"},{"v":"[1980,1990)","n":"80年代"},{"v":"[,1980)","n":"更早"}]},{"key":"style_id","name":"风格","value":[{"v":'-1',"n":"全部"},{"v":'10010',"n":"原创"},{"v":'10011',"n":"漫画改"},{"v":'10012',"n":"小说改"},{"v":'10013',"n":"游戏改"},{"v":'10102',"n":"特摄"},{"v":'10015',"n":"布袋戏"},{"v":'10016',"n":"热血"},{"v":'10017',"n":"穿越"},{"v":'10018',"n":"奇幻"},{"v":'10020',"n":"战斗"},{"v":'10021',"n":"搞笑"},{"v":'10022',"n":"日常"},{"v":'10023',"n":"科幻"},{"v":'10024',"n":"萌系"},{"v":'10025',"n":"治愈"},{"v":'10026',"n":"校园"},{"v":'10027',"n":"少儿"},{"v":'10028',"n":"泡面"},{"v":'10029',"n":"恋爱"},{"v":'10030',"n":"少女"},{"v":'10031',"n":"魔法"},{"v":'10032',"n":"冒险"},{"v":'10033',"n":"历史"},{"v":'10034',"n":"架空"},{"v":'10035',"n":"机战"},{"v":'10036',"n":"神魔"},{"v":'10037',"n":"声控"},{"v":'10038',"n":"运动"},{"v":'10039',"n":"励志"},{"v":'10040',"n":"音乐"},{"v":'10041',"n":"推理"},{"v":'10042',"n":"社团"},{"v":'10043',"n":"智斗"},{"v":'10044',"n":"催泪"},{"v":'10045',"n":"美食"},{"v":'10046',"n":"偶像"},{"v":'10047',"n":"乙女"},{"v":'10048',"n":"职场"}]}],"4":[{"key":"season_version","name":"类型","value":[{"v":'-1',"n":"全部"},{"v":'1',"n":"正片"},{"v":'2',"n":"电影"},{"v":'3',"n":"其他"}]},{"key":"area","name":"地区","value":[{"v":'-1',"n":"全部"},{"v":'2',"n":"日本"},{"v":'3',"n":"美国"},{"v":"1,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,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,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70","n":"其他"}]},{"key":"is_finish","name":"状态","value":[{"v":'-1',"n":"全部"},{"v":'1',"n":"完结"},{"v":'0',"n":"连载"}]},{"key":"copyright","name":"版权","value":[{"v":'-1',"n":"全部"},{"v":'3',"n":"独家"},{"v":"1,2,4","n":"其他"}]},{"key":"season_status","name":"付费","value":[{"v":'-1',"n":"全部"},{"v":'1',"n":"免费"},{"v":"2,6","n":"付费"},{"v":"4,6","n":"大会员"}]},{"key":"year","name":"年份","value":[{"v":'-1',"n":"全部"},{"v":"[2023,2024)","n":"2023"},{"v":"[2022,2023)","n":"2022"},{"v":"[2021,2022)","n":"2021"},{"v":"[2020,2021)","n":"2020"},{"v":"[2019,2020)","n":"2019"},{"v":"[2018,2019)","n":"2018"},{"v":"[2017,2018)","n":"2017"},{"v":"[2016,2017)","n":"2016"},{"v":"[2015,2016)","n":"2015"},{"v":"[2010,2015)","n":"2014-2010"},{"v":"[2005,2010)","n":"2009-2005"},{"v":"[2000,2005)","n":"2004-2000"},{"v":"[1990,2000)","n":"90年代"},{"v":"[1980,1990)","n":"80年代"},{"v":"[,1980)","n":"更早"}]},{"key":"style_id","name":"风格","value":[{"v":'-1',"n":"全部"},{"v":'10010',"n":"原创"},{"v":'10011',"n":"漫画改"},{"v":'10012',"n":"小说改"},{"v":'10013',"n":"游戏改"},{"v":'10014',"n":"动态漫"},{"v":'10015',"n":"布袋戏"},{"v":'10016',"n":"热血"},{"v":'10018',"n":"奇幻"},{"v":'10019',"n":"玄幻"},{"v":'10020',"n":"战斗"},{"v":'10021',"n":"搞笑"},{"v":'10078',"n":"武侠"},{"v":'10022',"n":"日常"},{"v":'10023',"n":"科幻"},{"v":'10024',"n":"萌系"},{"v":'10025',"n":"治愈"},{"v":'10057',"n":"悬疑"},{"v":'10026',"n":"校园"},{"v":'10027',"n":"少儿"},{"v":'10028',"n":"泡面"},{"v":'10029',"n":"恋爱"},{"v":'10030',"n":"少女"},{"v":'10031',"n":"魔法"},{"v":'10033',"n":"历史"},{"v":'10035',"n":"机战"},{"v":'10036',"n":"神魔"},{"v":'10037',"n":"声控"},{"v":'10038',"n":"运动"},{"v":'10039',"n":"励志"},{"v":'10040',"n":"音乐"},{"v":'10041',"n":"推理"},{"v":'10042',"n":"社团"},{"v":'10043',"n":"智斗"},{"v":'10044',"n":"催泪"},{"v":'10045',"n":"美食"},{"v":'10046',"n":"偶像"},{"v":'10047',"n":"乙女"},{"v":'10048',"n":"职场"},{"v":'10049',"n":"古风"}]}],"2":[{"key":"area","name":"地区","value":[{"v":'-1',"n":"全部"},{"v":'1',"n":"中国大陆"},{"v":"6,7","n":"中国港台"},{"v":'3',"n":"美国"},{"v":'2',"n":"日本"},{"v":'8',"n":"韩国"},{"v":'9',"n":"法国"},{"v":'4',"n":"英国"},{"v":'15',"n":"德国"},{"v":'10',"n":"泰国"},{"v":'35',"n":"意大利"},{"v":'13',"n":"西班牙"},{"v":"5,11,12,14,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70","n":"其他"}]},{"key":"season_status","name":"付费","value":[{"v":'-1',"n":"全部"},{"v":'1',"n":"免费"},{"v":"2,6","n":"付费"},{"v":"4,6","n":"大会员"}]},{"key":"style_id","name":"风格","value":[{"v":'-1',"n":"全部"},{"v":'10104',"n":"短片"},{"v":'10050',"n":"剧情"},{"v":'10051',"n":"喜剧"},{"v":'10052',"n":"爱情"},{"v":'10053',"n":"动作"},{"v":'10054',"n":"恐怖"},{"v":'10023',"n":"科幻"},{"v":'10055',"n":"犯罪"},{"v":'10056',"n":"惊悚"},{"v":'10057',"n":"悬疑"},{"v":'10018',"n":"奇幻"},{"v":'10058',"n":"战争"},{"v":'10059',"n":"动画"},{"v":'10060',"n":"传记"},{"v":'10061',"n":"家庭"},{"v":'10062',"n":"歌舞"},{"v":'10033',"n":"历史"},{"v":'10032',"n":"冒险"},{"v":'10063',"n":"纪实"},{"v":'10064',"n":"灾难"},{"v":'10011',"n":"漫画改"},{"v":'10012',"n":"小说改"}]},{"key":"release_date","name":"年份","value":[{"v":'-1',"n":"全部"},{"v":"[2023-01-01 00:00:00,2024-01-01 00:00:00)","n":"2023"},{"v":"[2022-01-01 00:00:00,2023-01-01 00:00:00)","n":"2022"},{"v":"[2021-01-01 00:00:00,2022-01-01 00:00:00)","n":"2021"},{"v":"[2020-01-01 00:00:00,2021-01-01 00:00:00)","n":"2020"},{"v":"[2019-01-01 00:00:00,2020-01-01 00:00:00)","n":"2019"},{"v":"[2018-01-01 00:00:00,2019-01-01 00:00:00)","n":"2018"},{"v":"[2017-01-01 00:00:00,2018-01-01 00:00:00)","n":"2017"},{"v":"[2016-01-01 00:00:00,2017-01-01 00:00:00)","n":"2016"},{"v":"[2010-01-01 00:00:00,2016-01-01 00:00:00)","n":"2015-2010"},{"v":"[2005-01-01 00:00:00,2010-01-01 00:00:00)","n":"2009-2005"},{"v":"[2000-01-01 00:00:00,2005-01-01 00:00:00)","n":"2004-2000"},{"v":"[1990-01-01 00:00:00,2000-01-01 00:00:00)","n":"90年代"},{"v":"[1980-01-01 00:00:00,1990-01-01 00:00:00)","n":"80年代"},{"v":"[,1980-01-01 00:00:00)","n":"更早"}]}],"5":[{"key":"area","name":"地区","value":[{"v":'-1',"n":"全部"},{"v":"1,6,7","n":"中国"},{"v":'2',"n":"日本"},{"v":'3',"n":"美国"},{"v":'4',"n":"英国"},{"v":'10',"n":"泰国"},{"v":"5,8,9,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,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,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70","n":"其他"}]},{"key":"season_status","name":"付费","value":[{"v":'-1',"n":"全部"},{"v":'1',"n":"免费"},{"v":"2,6","n":"付费"},{"v":"4,6","n":"大会员"}]},{"key":"style_id","name":"风格","value":[{"v":'-1',"n":"全部"},{"v":'10021',"n":"搞笑"},{"v":'10018',"n":"奇幻"},{"v":'10058',"n":"战争"},{"v":'10078',"n":"武侠"},{"v":'10079',"n":"青春"},{"v":'10103',"n":"短剧"},{"v":'10080',"n":"都市"},{"v":'10081',"n":"古装"},{"v":'10082',"n":"谍战"},{"v":'10083',"n":"经典"},{"v":'10084',"n":"情感"},{"v":'10057',"n":"悬疑"},{"v":'10039',"n":"励志"},{"v":'10085',"n":"神话"},{"v":'10017',"n":"穿越"},{"v":'10086',"n":"年代"},{"v":'10087',"n":"农村"},{"v":'10088',"n":"刑侦"},{"v":'10050',"n":"剧情"},{"v":'10061',"n":"家庭"},{"v":'10033',"n":"历史"},{"v":'10089',"n":"军旅"},{"v":'10023',"n":"科幻"}]},{"key":"release_date","name":"年份","value":[{"v":'-1',"n":"全部"},{"v":"[2023-01-01 00:00:00,2024-01-01 00:00:00)","n":"2023"},{"v":"[2022-01-01 00:00:00,2023-01-01 00:00:00)","n":"2022"},{"v":"[2021-01-01 00:00:00,2022-01-01 00:00:00)","n":"2021"},{"v":"[2020-01-01 00:00:00,2021-01-01 00:00:00)","n":"2020"},{"v":"[2019-01-01 00:00:00,2020-01-01 00:00:00)","n":"2019"},{"v":"[2018-01-01 00:00:00,2019-01-01 00:00:00)","n":"2018"},{"v":"[2017-01-01 00:00:00,2018-01-01 00:00:00)","n":"2017"},{"v":"[2016-01-01 00:00:00,2017-01-01 00:00:00)","n":"2016"},{"v":"[2010-01-01 00:00:00,2016-01-01 00:00:00)","n":"2015-2010"},{"v":"[2005-01-01 00:00:00,2010-01-01 00:00:00)","n":"2009-2005"},{"v":"[2000-01-01 00:00:00,2005-01-01 00:00:00)","n":"2004-2000"},{"v":"[1990-01-01 00:00:00,2000-01-01 00:00:00)","n":"90年代"},{"v":"[1980-01-01 00:00:00,1990-01-01 00:00:00)","n":"80年代"},{"v":"[,1980-01-01 00:00:00)","n":"更早"}]}],"7":[{"key":"season_status","name":"付费","value":[{"v":'-1',"n":"全部"},{"v":'1',"n":"免费"},{"v":"2,6","n":"付费"},{"v":"4,6","n":"大会员"}]},{"key":"style_id","name":"风格","value":[{"v":'-1',"n":"全部"},{"v":'10040',"n":"音乐"},{"v":'10090',"n":"访谈"},{"v":'10091',"n":"脱口秀"},{"v":'10092',"n":"真人秀"},{"v":'10094',"n":"选秀"},{"v":'10045',"n":"美食"},{"v":'10095',"n":"旅游"},{"v":'10098',"n":"晚会"},{"v":'10096',"n":"演唱会"},{"v":'10084',"n":"情感"},{"v":'10051',"n":"喜剧"},{"v":'10097',"n":"亲子"},{"v":'10100',"n":"文化"},{"v":'10048',"n":"职场"},{"v":'10069',"n":"萌宠"},{"v":'10099',"n":"养成"}]}]} + } \ No newline at end of file diff --git a/py/嗨皮影视.py b/py/嗨皮影视.py new file mode 100644 index 0000000..511ddfe --- /dev/null +++ b/py/嗨皮影视.py @@ -0,0 +1,146 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import sys +sys.path.append('..') +from base.spider import Spider +import requests + + +class Spider(Spider): + + def init(self, extend=""): + pass + + def getName(self): + return "hitv" + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + def homeContent(self, filter): + result = {} + cateManual = { + # "直播": "live", + '排行榜': 'rank', + "电影": "1", + "剧集": "2", + "综艺": "3", + "动画": "4", + "短片": "5" + } + classes = [] + for k in cateManual: + classes.append({ + 'type_name': k, + 'type_id': cateManual[k] + }) + result['class'] = classes + return result + + host = "https://wys.upfuhn.com" + headers = { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) " + "Chrome/80.0.3987.149 Safari/537.36" + } + + def list(self, list): + videos = [] + for it in list: + videos.append({ + "vod_id": it['video_site_id'], + "vod_name": it['video_name'], + "vod_pic": it['video_horizontal_url'] or it['video_vertical_url'], + "vod_remarks": it['newest_series_num'], + "vod_year": it['years'], + }) + return videos + + def homeVideoContent(self): + url = f'{self.host}/v1/ys_video_sites/hot?t=1' + data = requests.get(url, headers=self.headers).json() + videos = self.list(data['data']['data']) + result = {'list': videos} + return result + + def categoryContent(self, tid, pg, filter, extend): + path = f'/v1/ys_video_sites?t={tid}&s_t=0&a&y&o=0&ps=21&pn={pg}' + rank = False + if tid == 'rank': + if pg == 1: + path = f'/v1/ys_video_sites/ranking' + rank = True + else: + path = '' + # elif tid == 'live' and pg == 1: + # path = f'/v1/ys_live_tvs' + videos = [] + result = {} + try: + data = requests.get(self.host + path, headers=self.headers).json() + if rank: + for video in data['data']: + videos.extend(data['data'][video]) + else: + videos = data['data']['data'] + result = {} + result['list'] = self.list(videos) + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + except: + result['list'] = [] + return result + + def detailContent(self, ids): + tid = ids[0] + url = f'{self.host}/v1/ys_video_series/by_vid/{tid}' + data = requests.get(url, headers=self.headers).json() + data1 = data['data']['ys_video_site'] + urls = [] + for it in data['data']['data']: + urls.append(it['series_num'] + '$' + it['video_url']) + vod = { + 'vod_name': data1['video_name'], + 'type_name': data1['tag'], + 'vod_year': data1['years'], + 'vod_area': data1['area'], + 'vod_director': data1['main_actor'], + 'vod_content': data1['video_desc'], + 'vod_play_from': '嗨皮在线', + 'vod_play_url': '#'.join(urls), + } + result = { + 'list': [ + vod + ] + } + return result + + def searchContent(self, key, quick, pg=1): + url = f'{self.host}/v1/ys_video_sites/search?s={key}&o=0&ps=200&pn={pg}' + data = requests.get(url, headers=self.headers).json() + videos = data['data']['video_sites'] + if data['data']['first_video_series'] is not None: + videos = [data['data']['first_video_series']] + videos + result = {} + result['list'] = self.list(videos) + result['page'] = pg + return result + + def playerContent(self, flag, id, vipFlags): + result = { + 'url': id, + 'parse': 0, + 'header': self.headers + } + return result + + def localProxy(self, param): + pass diff --git a/py/嗷呜动漫.py b/py/嗷呜动漫.py new file mode 100644 index 0000000..0c9a52e --- /dev/null +++ b/py/嗷呜动漫.py @@ -0,0 +1,280 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import colorsys +import random +import re +import sys +from base64 import b64decode, b64encode +from email.utils import unquote +from Crypto.Hash import MD5 +sys.path.append("..") +import json +import time +from pyquery import PyQuery as pq +from base.spider import Spider + +class Spider(Spider): + + def init(self, extend=""): + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def action(self, action): + pass + + def destroy(self): + pass + + host='https://www.aowu.tv' + + headers = { + 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.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,application/signed-exchange;v=b3;q=0.7', + 'pragma': 'no-cache', + 'cache-control': 'no-cache', + 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="134", "Google Chrome";v="134"', + 'sec-ch-ua-mobile': '?0', + 'sec-ch-ua-platform': '"macOS"', + 'dnt': '1', + 'upgrade-insecure-requests': '1', + 'sec-fetch-site': 'same-origin', + 'sec-fetch-mode': 'navigate', + 'sec-fetch-user': '?1', + 'sec-fetch-dest': 'document', + 'referer': f'{host}/', + 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', + 'priority': 'u=0, i', + } + + def homeContent(self, filter): + data=self.getpq(self.fetch(self.host,headers=self.headers).text) + result = {} + classes = [] + ldata=data('.wrap.border-box.public-r .public-list-box') + cd={"新番":"32","番剧":"20","剧场":"33"} + for k,r in cd.items(): + classes.append({ + 'type_name': k, + 'type_id': r, + }) + videos=[] + for i in ldata.items(): + j = i('.public-list-exp') + k=i('.public-list-button') + videos.append({ + 'vod_id': j.attr('href').split('/')[-1].split('-')[0], + 'vod_name': k('.time-title').text(), + 'vod_pic': j('img').attr('data-src'), + 'vod_year': f"·{j('.public-list-prb').text()}", + 'vod_remarks': k('.public-list-subtitle').text(), + }) + result['class'] = classes + result['list']=videos + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, tid, pg, filter, extend): + body = {'type':tid,'class':'','area':'','lang':'','version':'','state':'','letter':'','page':pg} + data = self.post(f"{self.host}/index.php/api/vod", headers=self.headers, data=self.getbody(body)).json() + result = {} + result['list'] = data['list'] + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + data = self.getpq(self.fetch(f"{self.host}/play/{ids[0]}-1-1.html", headers=self.headers).text) + v=data('.player-info-text .this-text') + vod = { + 'type_name': v.eq(-1)('a').text(), + 'vod_year': v.eq(1)('a').text(), + 'vod_remarks': v.eq(0).text(), + 'vod_actor': v.eq(2)('a').text(), + 'vod_content': data('.player-content').text() + } + ns=data('.swiper-wrapper .vod-playerUrl') + ps=data('.player-list-box .anthology-list-box ul') + play,names=[],[] + for i in range(len(ns)): + n=ns.eq(i)('a') + n('span').remove() + names.append(re.sub(r"[\ue679\xa0]", "", n.text())) + play.append('#'.join([f"{v.text()}${v('a').attr('href')}" for v in ps.eq(i)('li').items()])) + vod["vod_play_from"] = "$$$".join(names) + vod["vod_play_url"] = "$$$".join(play) + result = {"list": [vod]} + return result + + def searchContent(self, key, quick, pg="1"): + data = self.fetch(f"{self.host}/index.php/ajax/suggest?mid=1&wd={key}&limit=9999×tamp={int(time.time()*1000)}", headers=self.headers).json() + videos=[] + for i in data['list']: + videos.append({ + 'vod_id': i['id'], + 'vod_name': i['name'], + 'vod_pic': i['pic'] + }) + return {'list':videos,'page':pg} + + def playerContent(self, flag, id, vipFlags): + p,url1= 1,'' + yurl=f"{self.host}{id}" + data = self.getpq(self.fetch(yurl, headers=self.headers).text) + dmhtm=data('.ds-log-set') + dmdata={'vod_id':dmhtm.attr('data-id'),'vod_ep':dmhtm.attr('data-nid')} + try: + jstr = data('.player-top.box.radius script').eq(0).text() + jsdata = json.loads(jstr.split('=',1)[-1]) + url1= jsdata['url'] + data = self.fetch(f"{self.host}/player/?url={unquote(self.d64(jsdata['url']))}", headers=self.headers).text + data=self.p_qjs(self.getjstr(data)) + url=data['qualities'] if len(data['qualities']) else data['url'] + p = 0 + if not url:raise Exception("未找到播放地址") + except Exception as e: + self.log(e) + url = yurl + if re.search(r'\.m3u8|\.mp4',url1):url=url1 + dmurl = f"{self.getProxyUrl()}&data={self.e64(json.dumps(dmdata))}&type=dm.xml" + return {"parse": p, "url": url, "header": {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36'},'danmaku':dmurl} + + def localProxy(self, param): + try: + data = json.loads(self.d64(param['data'])) + headers = { + 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36', + 'origin': self.host, + 'Content-Type': 'application/x-www-form-urlencoded' + } + params = {'vod_id': data['vod_id'], 'vod_ep': data['vod_ep']} + res = self.post(f"https://app.wuyaoy.cn/danmu/api.php/getDanmu", headers=headers, data=params).json() + danmustr = f'\n\n\tchat.aowudm.com\n\t88888888\n\t0\n\t99999\n\t0\n\t0\n\tk-v\n' + my_list = ['1', '4', '5', '6'] + for i in sorted(res['data'], key=lambda x: x['time']): + dms = [str(i.get('time',1)), random.choice(my_list), '25', self.get_color(), '0'] + dmtxt = re.sub(r'[<>&\u0000\b]', '', self.cleanText(i.get('text', ''))) + tempdata = f'\t{dmtxt}\n' + danmustr += tempdata + danmustr += '' + return [200,'text/xml',danmustr] + except Exception as e: + print(f"获取弹幕失败:{str(e)}") + return "" + + def getbody(self, params): + t=int(time.time()) + h = MD5.new() + h.update(f"DS{t}DCC147D11943AF75".encode('utf-8')) + key=h.hexdigest() + params.update({'time':t,'key':key}) + return params + + def getpq(self, data): + data=self.cleanText(data) + try: + return pq(data) + except Exception as e: + print(f"{str(e)}") + return pq(data.encode('utf-8')) + + def get_color(self): + h = random.random() + s = random.uniform(0.7, 1.0) + v = random.uniform(0.8, 1.0) + r, g, b = colorsys.hsv_to_rgb(h, s, v) + r = int(r * 255) + g = int(g * 255) + b = int(b * 255) + decimal_color = (r << 16) + (g << 8) + b + return str(decimal_color) + + def getjstr(self, data): + pattern = r'new\s+Artplayer\s*\((\{[\s\S]*?\})\);' + match = re.search(pattern, data) + config_str = match.group(1) if match else '{}' + + replacements = [ + (r'contextmenu\s*:\s*\[[\s\S]*?\{[\s\S]*?\}[\s\S]*?\],', 'contextmenu: [],'), + (r'customType\s*:\s*\{[\s\S]*?\},', 'customType: {},'), + (r'plugins\s*:\s*\[\s*artplayerPluginDanmuku\(\{[\s\S]*?lockTime:\s*\d+,?\s*\}\)\,?\s*\]', 'plugins: []') + ] + for pattern, replacement in replacements: + config_str = re.sub(pattern, replacement, config_str) + return config_str + + def p_qjs(self, config_str): + try: + from com.whl.quickjs.wrapper import QuickJSContext + ctx = QuickJSContext.create() + js_code = f""" + function extractVideoInfo() {{ + try {{ + const config = {config_str}; + const result = {{ + url: "", + qualities: [] + }}; + if (config.url) {{ + result.url = config.url; + }} + if (config.quality && Array.isArray(config.quality)) {{ + config.quality.forEach(function(q) {{ + if (q && q.url) {{ + result.qualities.push(q.html || "嗷呜"); + result.qualities.push(q.url); + }} + }}); + }} + + return JSON.stringify(result); + }} catch (e) {{ + return JSON.stringify({{ + error: "解析错误: " + e.message, + url: "", + qualities: [] + }}); + }} + }} + extractVideoInfo(); + """ + result_json = ctx.evaluate(js_code) + ctx.destroy() + return json.loads(result_json) + + except Exception as e: + self.log(f"执行失败: {e}") + return { + "error": str(e), + "url": "", + "qualities": [] + } + + 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: + 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: + return "" + + diff --git a/py/国外剧.py b/py/国外剧.py new file mode 100644 index 0000000..eae5fc7 --- /dev/null +++ b/py/国外剧.py @@ -0,0 +1,216 @@ +import re +import sys +from Crypto.Hash import MD5 +sys.path.append("..") +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad, unpad +from urllib.parse import quote, urlparse +from base64 import b64encode, b64decode +import json +import time +from base.spider import Spider + + +class Spider(Spider): + + def init(self, extend=""): + self.host = 'https://guowaiju.com' + self.did=self.getdid() + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def action(self, action): + pass + + def destroy(self): + pass + + def homeContent(self, filter): + data = self.getdata("/api.php/getappapi.index/initV119") + dy = {"class": "类型", "area": "地区", "lang": "语言", "year": "年份", "letter": "字母", "by": "排序", + "sort": "排序"} + filters = {} + classes = [] + json_data = data["type_list"] + homedata = data["banner_list"][8:] + for item in json_data: + if item["type_name"] == "全部": + continue + has_non_empty_field = False + jsontype_extend = json.loads(item["type_extend"]) + homedata.extend(item["recommend_list"]) + jsontype_extend["sort"] = "最新,最热,最赞" + classes.append({"type_name": item["type_name"], "type_id": item["type_id"]}) + for key in dy: + if key in jsontype_extend and jsontype_extend[key].strip() != "": + has_non_empty_field = True + break + if has_non_empty_field: + filters[str(item["type_id"])] = [] + for dkey in jsontype_extend: + if dkey in dy and jsontype_extend[dkey].strip() != "": + values = jsontype_extend[dkey].split(",") + value_array = [{"n": value.strip(), "v": value.strip()} for value in values if + value.strip() != ""] + filters[str(item["type_id"])].append({"key": dkey, "name": dy[dkey], "value": value_array}) + result = {} + result["class"] = classes + result["filters"] = filters + result["list"] = homedata[1:] + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, tid, pg, filter, extend): + body = {"area": extend.get('area', '全部'), "year": extend.get('year', '全部'), "type_id": tid, "page": pg, + "sort": extend.get('sort', '最新'), "lang": extend.get('lang', '全部'), + "class": extend.get('class', '全部')} + result = {} + data = self.getdata("/api.php/getappapi.index/typeFilterVodList", body) + result["list"] = data["recommend_list"] + result["page"] = pg + result["pagecount"] = 9999 + result["limit"] = 90 + result["total"] = 999999 + return result + + def detailContent(self, ids): + body = f"vod_id={ids[0]}" + data = self.getdata("/api.php/getappapi.index/vodDetail", body) + vod = data["vod"] + play = [] + names = [] + for itt in reversed(data["vod_play_list"]): + a = [] + names.append(itt["player_info"]["show"]) + for it in itt['urls']: + it['user_agent'] = itt["player_info"].get("user_agent") + it["parse"] = itt["player_info"].get("parse") + a.append(f"{it['name']}${self.e64(json.dumps(it))}") + play.append("#".join(a)) + vod["vod_play_from"] = "$$$".join(names) + vod["vod_play_url"] = "$$$".join(play) + result = {"list": [vod]} + return result + + def searchContent(self, key, quick, pg="1"): + body = f"keywords={key}&type_id=0&page={pg}" + data = self.getdata("/api.php/getappapi.index/searchList", body) + result = {"list": data["search_list"], "page": pg} + return result + + def playerContent(self, flag, id, vipFlags): + ids = json.loads(self.d64(id)) + h = {"User-Agent": (ids['user_agent'] or "okhttp/3.14.9")} + try: + if re.search(r'url=', ids['parse_api_url']): + data = self.fetch(ids['parse_api_url'], headers=h, timeout=10).json() + url = data.get('url') or data['data'].get('url') + else: + body = f"parse_api={ids.get('parse') or ids['parse_api_url'].replace(ids['url'], '')}&url={quote(self.aes(ids['url'], True))}&token={ids.get('token')}" + b = self.getdata("/api.php/getappapi.index/vodParse", body)['json'] + url = json.loads(b)['url'] + if 'error' in url: raise ValueError(f"解析失败: {url}") + p = 0 + except Exception as e: + print('错误信息:', e) + url, p = ids['url'], 1 + + if re.search(r'\.jpg|\.png|\.jpeg', url): + url = self.Mproxy(url) + result = {} + result["parse"] = p + result["url"] = url + result["header"] = h + return result + + def localProxy(self, param): + headers = {"User-Agent": "okhttp/3.14.9"} + url = self.d64(param['url']) + ydata = self.fetch(url, headers=headers, allow_redirects=False) + data = ydata.content.decode('utf-8') + if ydata.headers.get('Location'): + url = ydata.headers['Location'] + data = self.fetch(url, headers=headers).content.decode('utf-8') + lines = data.strip().split('\n') + last_r = url[:url.rfind('/')] + parsed_url = urlparse(url) + durl = parsed_url.scheme + "://" + parsed_url.netloc + for index, string in enumerate(lines): + if '#EXT' not in string: + if 'http' not in string: + domain = last_r if string.count('/') < 2 else durl + string = domain + ('' if string.startswith('/') else '/') + string + if string.split('.')[-1].split('?')[0] == 'm3u8': + string = self.Mproxy(string) + lines[index] = string + data = '\n'.join(lines) + return [200, "application/vnd.apple.mpegur", data] + + def getdid(self): + did=self.getCache('did') + if not did: + t = str(int(time.time())) + did = self.md5(t) + self.setCache('did', did) + return did + + def aes(self, text, b=None): + key = b"7xv16h7qgkrs9b1p" + cipher = AES.new(key, AES.MODE_CBC, key) + if b: + ct_bytes = cipher.encrypt(pad(text.encode("utf-8"), AES.block_size)) + ct = b64encode(ct_bytes).decode("utf-8") + return ct + else: + pt = unpad(cipher.decrypt(b64decode(text)), AES.block_size) + return pt.decode("utf-8") + + def header(self): + t = str(int(time.time())) + header = { + "User-Agent": "okhttp/3.14.9", "app-version-code": "110", "app-ui-mode": "light", + "app-api-verify-time": t, "app-user-device-id": self.did, + "app-api-verify-sign": self.aes(t, True), + "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8" + } + return header + + def getdata(self, path, data=None): + vdata = self.post(f"{self.host}{path}", headers=self.header(), data=data, timeout=10).json()['data'] + data1 = self.aes(vdata) + return json.loads(data1) + + def Mproxy(self, url): + return f"{self.getProxyUrl()}&url={self.e64(url)}&type=m3u8" + + 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() + + diff --git a/py/央视影视.py b/py/央视影视.py new file mode 100644 index 0000000..20f8581 --- /dev/null +++ b/py/央视影视.py @@ -0,0 +1,242 @@ +#coding=utf-8 +#!/usr/bin/python +import sys +sys.path.append('..') +from base.spider import Spider +import json +import time +import base64 +import requests + +class Spider(Spider): + def getName(self): + return "央视综艺" + + def init(self, extend=""): + print("============{0}============".format(extend)) + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def homeContent(self, filter): + result = {} + cateManual = { + "中华情": "TOPC1451541564922207", + "回声嘹亮": "TOPC1451535575561597", + "你好生活第三季": "TOPC1627961377879898", + "我的艺术清单": "TOPC1582272259917160", + "黄金100秒": "TOPC1451468496522494", + "非常6+1": "TOPC1451467940101208", + "向幸福出发": "TOPC1451984638791216", + "幸福账单": "TOPC1451984801613379", + "中国文艺报道": "TOPC1601348042760302", + "舞蹈世界": "TOPC1451547605511387", + "艺览天下": "TOPC1451984851125433", + "天天把歌唱": "TOPC1451535663610626", + "金牌喜剧班": "TOPC1611826337610628", + "环球综艺秀": "TOPC1571300682556971", + "挑战不可能第五季": "TOPC1579169060379297", + "我们有一套": "TOPC1451527089955940", + "为了你": "TOPC1451527001597710", + "朗读者第一季": "TOPC1487120479377477", + "挑战不可能第二季": "TOPC1474277421637816", + "精彩一刻": "TOPC1451464786232149", + "挑战不可能之加油中国": "TOPC1547519813971570", + "挑战不可能第一季": "TOPC1452063816677656", + "机智过人第三季": "TOPC1564019920570762", + "经典咏流传第二季": "TOPC1547521714115947", + "挑战不可能第三季": "TOPC1509500865106312", + "经典咏流传第一季": "TOPC1513676755770201", + "欢乐中国人第二季": "TOPC1516784350726581", + "故事里的中国第一季": "TOPC1569729252342702", + "你好生活第二季": "TOPC1604397385056621", + "喜上加喜": "TOPC1590026042145705", + "走在回家的路上": "TOPC1577697653272281", + "综艺盛典": "TOPC1451985071887935", + "艺术人生": "TOPC1451984891490556", + "全家好拍档": "TOPC1474275463547690", + "大魔术师": "TOPC1451984047073332", + "欢乐一家亲": "TOPC1451984214170587", + "开心辞典": "TOPC1451984378754815", + "综艺星天地": "TOPC1451985188986150", + "激情广场": "TOPC1451984341218765", + "笑星大联盟": "TOPC1451984731428297", + "天天乐": "TOPC1451984447718918", + "欢乐英雄": "TOPC1451984242834620", + "欢乐中国行": "TOPC1451984301286720", + "我爱满堂彩": "TOPC1451538709371329", + "综艺头条": "TOPC1569226855085860", + "中华情": "TOPC1451541564922207", + "魔法奇迹": "TOPC1451542029126607" + } + 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 = { + 'list': [] + } + return result + + def categoryContent(self, tid, pg, filter, extend): + result = {} + extend['id'] = tid + extend['p'] = pg + filterParams = ["id", "p", "d"] + params = ["", "", ""] + for idx in range(len(filterParams)): + fp = filterParams[idx] + if fp in extend.keys(): + params[idx] = '{0}={1}'.format(filterParams[idx], extend[fp]) + suffix = '&'.join(params) + url = 'https://api.cntv.cn/NewVideo/getVideoListByColumn?{0}&n=20&sort=desc&mode=0&serviceId=tvcctv&t=json'.format(suffix) + if not tid.startswith('TOPC'): + url = 'https://api.cntv.cn/NewVideo/getVideoListByAlbumIdNew?{0}&n=20&sort=desc&mode=0&serviceId=tvcctv&t=json'.format(suffix) + rsp = self.fetch(url, headers=self.header) + jo = json.loads(rsp.text) + vodList = jo['data']['list'] + videos = [] + for vod in vodList: + guid = vod['guid'] + title = vod['title'] + img = vod['image'] + brief = vod['brief'] + videos.append({ + "vod_id": guid + "###" + img, + "vod_name": title, + "vod_pic": img, + "vod_remarks": '' + }) + result['list'] = videos + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, array): + aid = array[0].split('###') + tid = aid[0] + url = "https://vdn.apps.cntv.cn/api/getHttpVideoInfo.do?pid={0}".format(tid) + + rsp = self.fetch(url, headers=self.header) + jo = json.loads(rsp.text) + title = jo['title'].strip() + link = jo['hls_url'].strip() + vod = { + "vod_id": tid, + "vod_name": title, + "vod_pic": aid[1], + "type_name": '', + "vod_year": "", + "vod_area": "", + "vod_remarks": "", + "vod_actor": "", + "vod_director": "", + "vod_content": "" + } + vod['vod_play_from'] = 'CCTV' + vod['vod_play_url'] = title + "$" + link + + result = { + 'list': [vod] + } + return result + + def searchContent(self, key, quick): + result = { + 'list': [] + } + return result + + def playerContent(self, flag, id, vipFlags): + result = {} + # 先尝试获取原始m3u8文件 + rsp = self.fetch(id, headers=self.header) + content = rsp.text.strip() + + if not content: + # 如果获取失败,直接返回原始链接 + result["parse"] = 0 + result["playUrl"] = '' + result["url"] = id + result["header"] = self.header + return result + + arr = content.split('\n') + urlPrefix = self.regStr(id, '(http[s]?://[a-zA-z0-9.]+)/') + + # 尝试获取高清链接 + resolutions = ['2000', '1200', '800'] # 从高到低尝试 + final_url = id # 默认使用原始链接 + + for res in resolutions: + try: + subUrl = arr[-1].split('/') + subUrl[3] = res + subUrl[-1] = f'{res}.m3u8' + hdUrl = urlPrefix + '/'.join(subUrl) + + # 检查高清链接是否有效 + hdRsp = requests.head(hdUrl, headers=self.header, timeout=5) + if hdRsp.status_code == 200: + final_url = hdUrl + break + except: + continue + + result["parse"] = 0 + result["playUrl"] = '' + result["url"] = final_url + result["header"] = self.header + return result + + config = { + "player": {}, + "filter": { + "TOPC1451557970755294": [ + { + "key": "d", + "name": "年份", + "value": [ + {"n": "全部", "v": ""}, + {"n": "2023", "v": "2023"}, + {"n": "2022", "v": "2022"}, + {"n": "2021", "v": "2021"}, + {"n": "2020", "v": "2020"}, + {"n": "2019", "v": "2019"}, + {"n": "2018", "v": "2018"}, + {"n": "2017", "v": "2017"}, + {"n": "2016", "v": "2016"}, + {"n": "2015", "v": "2015"}, + {"n": "2014", "v": "2014"}, + {"n": "2013", "v": "2013"}, + {"n": "2012", "v": "2012"}, + {"n": "2011", "v": "2011"}, + {"n": "2010", "v": "2010"}, + {"n": "2009", "v": "2009"} + ] + } + ] + } + } + header = { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36", + "Referer": "https://www.cctv.com/", + "Origin": "https://www.cctv.com" + } + + def localProxy(self, param): + return [200, "video/MP2T", None, ""] \ No newline at end of file diff --git a/py/奇库影视.py b/py/奇库影视.py new file mode 100644 index 0000000..4c4dd52 --- /dev/null +++ b/py/奇库影视.py @@ -0,0 +1,381 @@ +""" + +作者 啦啦啦 🚓 内容均从互联网收集而来 仅供交流学习使用 版权归原创者所有 如侵犯了您的权益 请通知作者 将及时删除侵权内容 + ====================kaiyuebinguan==================== + +""" + +import requests +from bs4 import BeautifulSoup +import re +from base.spider import Spider +import sys +import json +import base64 +import urllib.parse + +sys.path.append('..') + +xurl = "https://qkys.me" + +headerx = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0' + } + +pm = '' + +class Spider(Spider): + global xurl + 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": "1", "type_name": "冉神电影🎃"}, + {"type_id": "2", "type_name": "冉神剧集🎃"}, + {"type_id": "4", "type_name": "冉神动漫🎃"}, + {"type_id": "5", "type_name": "冉神纪录片🎃"}, + {"type_id": "3", "type_name": "冉神综艺🎃"}], + + "list": [], + "filters": {"1": [{"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"}]}], + "2": [{"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"}]}], + "5": [{"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"}]}], + "3": [{"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"}]}], + "4": [{"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"}]}]}} + + return result + + def homeVideoContent(self): + videos = [] + try: + detail = requests.get(url=xurl, headers=headerx) + detail.encoding = "utf-8" + res = detail.text + doc = BeautifulSoup(res, "lxml") + + soups = doc.find_all('div', class_="module-items module-poster-items-base") + + for soup in soups: + vods = soup.find_all('a', class_="module-poster-item module-item") + + for vod in vods: + + name = vod['title'] + + id = vod['href'] + + pic = vod.find('img')['data-original'] + if 'http' not in pic: + pic = xurl + pic + + remarks = vod.find('div', class_='module-item-note') + if remarks: + remark = remarks.text.strip() + else: + remark = "" + + video = { + "vod_id": id, + "vod_name": '冉神📽️' + name, + "vod_pic": pic, + "vod_remarks": '冉神▶️' + remark + } + videos.append(video) + + result = {'list': videos} + return result + except: + pass + + def categoryContent(self, cid, pg, filter, ext): + result = {} + videos = [] + if pg: + page = int(pg) + else: + page = 1 + + if '年代' in ext.keys(): + NdType = ext['年代'] + else: + NdType = '' + + if page == '1': + url = f'{xurl}/vodshow/{cid}-----------2025.html' + + else: + url = f'{xurl}/vodshow/{cid}--------{str(page)}---{NdType}.html' + + try: + detail = requests.get(url=url, headers=headerx) + detail.encoding = "utf-8" + res = detail.text + doc = BeautifulSoup(res, "lxml") + + soups = doc.find_all('div', class_="module") + + for soup in soups: + vods = soup.find_all('a', class_="module-poster-item module-item") + + for vod in vods: + + name = vod['title'] + + id = vod['href'] + + pic = vod.find('img')['data-original'] + + if 'http' not in pic: + pic = xurl + pic + + remarks = vod.find('div', class_='module-item-note') + if remarks: + remark = remarks.text.strip() + else: + remark = "" + + video = { + "vod_id": id, + "vod_name": '冉神📽️' + name, + "vod_pic": pic, + "vod_remarks": '冉神▶️' + remark + } + videos.append(video) + + except: + pass + result = {'list': videos} + result['page'] = pg + result['pagecount'] = 99 + result['limit'] = 90 + result['total'] = 99 + return result + + def detailContent(self, ids): + global pm + did = ids[0] + result = {} + videos = [] + playurl = '' + if 'http' not in did: + did = xurl + did + res1 = requests.get(url=did, headers=headerx) + res1.encoding = "utf-8" + res = res1.text + + xianlu = self.extract_middle_text(res, '
    ', 2, 'data-dropdown-value="(.*?)">') + + bofang = self.extract_middle_text(res, '
    ') + + videos.append({ + "vod_id": did, + "vod_actor": '😸冉神 😸冉神', + "vod_director": '😸冉神', + "vod_content": '😸请不要相信任何广告!!!祝您观影愉快!', + "vod_play_from": xianlu, + "vod_play_url": bofang + }) + result['list'] = videos + return result + + def playerContent(self, flag, id, vipFlags): + parts = id.split("http") + xiutan = 0 + if xiutan == 0: + if len(parts) > 1: + before_https, after_https = parts[0], 'http' + parts[1] + res = requests.get(url=after_https, headers=headerx) + res = res.text + + url = self.extract_middle_text(res, '"},"url":"', '","', 0).replace('\\', '') + + result = {} + result["parse"] = xiutan + result["playUrl"] = '' + result["url"] = url + result["header"] = headerx + return result + + def searchContentPage(self, key, quick, page): + result = {} + videos = [] + if not page: + page = '1' + if page == '1': + url = f'{xurl}/vodsearch/-------------.html?wd={key}' + else: + url = f'{xurl}/vodsearch/{key}----------{str(page)}---.html' + + detail = requests.get(url=url, headers=headerx) + detail.encoding = "utf-8" + res = detail.text + doc = BeautifulSoup(res, "lxml") + + soups = doc.find_all('div', class_="module-items module-card-items") + + for soup in soups: + vods = soup.find_all('div', class_="module-card-item module-item") + + for vod in vods: + + name = vod.find('img')['alt'] + + id = vod.find('a')['href'] + + pic = vod.find('img')['data-original'] + if 'http' not in pic: + pic = xurl + pic + + remarks = vod.find('div', class_='module-item-note') + 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'] = page + result['pagecount'] = 60 + result['limit'] = 30 + result['total'] = 999999 + return result + + def searchContent(self, key, quick): + 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 \ No newline at end of file diff --git a/py/奇迹影视.py b/py/奇迹影视.py new file mode 100644 index 0000000..b3ff4c7 --- /dev/null +++ b/py/奇迹影视.py @@ -0,0 +1,216 @@ +import re +import sys +from Crypto.Hash import MD5 +sys.path.append("..") +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad, unpad +from urllib.parse import quote, urlparse +from base64 import b64encode, b64decode +import json +import time +from base.spider import Spider + + +class Spider(Spider): + + def init(self, extend=""): + self.host='https://www.qj1080.top' + self.did=self.getdid() + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def action(self, action): + pass + + def destroy(self): + pass + + def homeContent(self, filter): + data = self.getdata("/api.php/getappapi.index/initV119") + dy = {"class": "类型", "area": "地区", "lang": "语言", "year": "年份", "letter": "字母", "by": "排序", + "sort": "排序"} + filters = {} + classes = [] + json_data = data["type_list"] + homedata = data["banner_list"][8:] + for item in json_data: + if item["type_name"] == "全部": + continue + has_non_empty_field = False + jsontype_extend = json.loads(item["type_extend"]) + homedata.extend(item["recommend_list"]) + jsontype_extend["sort"] = "最新,最热,最赞" + classes.append({"type_name": item["type_name"], "type_id": item["type_id"]}) + for key in dy: + if key in jsontype_extend and jsontype_extend[key].strip() != "": + has_non_empty_field = True + break + if has_non_empty_field: + filters[str(item["type_id"])] = [] + for dkey in jsontype_extend: + if dkey in dy and jsontype_extend[dkey].strip() != "": + values = jsontype_extend[dkey].split(",") + value_array = [{"n": value.strip(), "v": value.strip()} for value in values if + value.strip() != ""] + filters[str(item["type_id"])].append({"key": dkey, "name": dy[dkey], "value": value_array}) + result = {} + result["class"] = classes + result["filters"] = filters + result["list"] = homedata[1:] + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, tid, pg, filter, extend): + body = {"area": extend.get('area', '全部'), "year": extend.get('year', '全部'), "type_id": tid, "page": pg, + "sort": extend.get('sort', '最新'), "lang": extend.get('lang', '全部'), + "class": extend.get('class', '全部')} + result = {} + data = self.getdata("/api.php/getappapi.index/typeFilterVodList", body) + result["list"] = data["recommend_list"] + result["page"] = pg + result["pagecount"] = 9999 + result["limit"] = 90 + result["total"] = 999999 + return result + + def detailContent(self, ids): + body = f"vod_id={ids[0]}" + data = self.getdata("/api.php/getappapi.index/vodDetail", body) + vod = data["vod"] + play = [] + names = [] + for itt in data["vod_play_list"]: + a = [] + names.append(itt["player_info"]["show"]) + for it in itt['urls']: + it['user_agent'] = itt["player_info"].get("user_agent") + it["parse"] = itt["player_info"].get("parse") + a.append(f"{it['name']}${self.e64(json.dumps(it))}") + play.append("#".join(a)) + vod["vod_play_from"] = "$$$".join(names) + vod["vod_play_url"] = "$$$".join(play) + result = {"list": [vod]} + return result + + def searchContent(self, key, quick, pg="1"): + body = f"keywords={key}&type_id=0&page={pg}" + data = self.getdata("/api.php/getappapi.index/searchList", body) + result = {"list": data["search_list"], "page": pg} + return result + + def playerContent(self, flag, id, vipFlags): + ids = json.loads(self.d64(id)) + h = {"User-Agent": (ids['user_agent'] or "okhttp/3.14.9")} + try: + if re.search(r'url=', ids['parse_api_url']): + data = self.fetch(ids['parse_api_url'], headers=h, timeout=10).json() + url = data.get('url') or data['data'].get('url') + else: + body = f"parse_api={ids.get('parse') or ids['parse_api_url'].replace(ids['url'], '')}&url={quote(self.aes(ids['url'], True))}&token={ids.get('token')}" + b = self.getdata("/api.php/getappapi.index/vodParse", body)['json'] + url = json.loads(b)['url'] + if 'error' in url: raise ValueError(f"解析失败: {url}") + p = 0 + except Exception as e: + print('错误信息:', e) + url, p = ids['url'], 1 + + if re.search(r'\.jpg|\.png|\.jpeg', url): + url = self.Mproxy(url) + result = {} + result["parse"] = p + result["url"] = url + result["header"] = h + return result + + def localProxy(self, param): + headers = {"User-Agent": "okhttp/3.14.9"} + url = self.d64(param['url']) + ydata = self.fetch(url, headers=headers, allow_redirects=False) + data = ydata.content.decode('utf-8') + if ydata.headers.get('Location'): + url = ydata.headers['Location'] + data = self.fetch(url, headers=headers).content.decode('utf-8') + lines = data.strip().split('\n') + last_r = url[:url.rfind('/')] + parsed_url = urlparse(url) + durl = parsed_url.scheme + "://" + parsed_url.netloc + for index, string in enumerate(lines): + if '#EXT' not in string: + if 'http' not in string: + domain = last_r if string.count('/') < 2 else durl + string = domain + ('' if string.startswith('/') else '/') + string + if string.split('.')[-1].split('?')[0] == 'm3u8': + string = self.Mproxy(string) + lines[index] = string + data = '\n'.join(lines) + return [200, "application/vnd.apple.mpegur", data] + + def getdid(self): + did=self.getCache('did') + if not did: + t = str(int(time.time())) + did = self.md5(t) + self.setCache('did', did) + return did + + def aes(self, text, b=None): + key = b"8t2L9x5Qz4A7p3y6" + cipher = AES.new(key, AES.MODE_CBC, key) + if b: + ct_bytes = cipher.encrypt(pad(text.encode("utf-8"), AES.block_size)) + ct = b64encode(ct_bytes).decode("utf-8") + return ct + else: + pt = unpad(cipher.decrypt(b64decode(text)), AES.block_size) + return pt.decode("utf-8") + + def header(self): + t = str(int(time.time())) + header = { + "User-Agent": "okhttp/3.14.9", "app-version-code": "666", "app-ui-mode": "light", + "app-api-verify-time": t, "app-user-device-id": self.did, + "app-api-verify-sign": self.aes(t, True), + "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8" + } + return header + + def getdata(self, path, data=None): + vdata = self.post(f"{self.host}{path}", headers=self.header(), data=data, timeout=10).json()['data'] + data1 = self.aes(vdata) + return json.loads(data1) + + def Mproxy(self, url): + return f"{self.getProxyUrl()}&url={self.e64(url)}&type=m3u8" + + 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() + + diff --git a/py/好帅短剧.py b/py/好帅短剧.py new file mode 100644 index 0000000..5392224 --- /dev/null +++ b/py/好帅短剧.py @@ -0,0 +1,128 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import json +import sys +sys.path.append('..') +from base.spider import Spider +from pyquery import PyQuery as pq + +class Spider(Spider): + + def init(self, extend=""): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def action(self, action): + pass + + def destroy(self): + pass + + host='https://www.nhsyy.com' + + headers = { + 'Accept': '*/*', + 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8', + 'Cache-Control': 'no-cache', + 'Connection': 'keep-alive', + 'DNT': '1', + 'Origin': host, + 'Pragma': 'no-cache', + 'Referer': f'{host}/', + 'Sec-Fetch-Dest': 'empty', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Site': 'cross-site', + 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36', + 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="130", "Google Chrome";v="130"', + 'sec-ch-ua-mobile': '?1', + 'sec-ch-ua-platform': '"Android"', + } + + def homeContent(self, filter): + data = pq(self.fetch(self.host, headers=self.headers).text) + result = {} + classes = [] + for i in data('.drop-content-items li').items(): + j = i('a').attr('href') + if j and 'type' in j: + id = j.split('/')[-1].split('.')[0] + classes.append({ + 'type_name': i('a').text(), + 'type_id': id + }) + hlist = self.getlist(data('.module-lines-list .module-item')) + result['class'] = classes + result['list'] = hlist + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, tid, pg, filter, extend): + data = self.fetch(f'{self.host}/vodshwo/{tid}--------{pg}---.html', headers=self.headers).text + vlist = self.getlist(pq(data)('.module-list .module-item')) + return {"list": vlist, "page": pg, "pagecount": 9999, "limit": 90, "total": 999999} + + def detailContent(self, ids): + data = pq(self.fetch(f"{self.host}{ids[0]}", headers=self.headers).text) + udata = data('.scroll-box-y .scroll-content a') + vdata = data('.video-info-main .video-info-item') + vod = { + 'vod_year': vdata.eq(2)('div').text(), + 'vod_remarks': vdata.eq(3)('div').text(), + 'vod_actor': vdata.eq(1)('a').text(), + 'vod_director': vdata.eq(0)('a').text(), + 'typt_name': data('.video-info-aux a').eq(0).attr('title'), + 'vod_content': vdata.eq(4)('p').eq(-1).text(), + 'vod_play_from': '嗷呜爱看短剧', + 'vod_play_url': '#'.join([f"{i.text()}${i.attr('href')}" for i in udata.items()]), + } + result = {"list": [vod]} + return result + + def searchContent(self, key, quick, pg="1"): + dlist = self.fetch(f'{self.host}/vodsearch/{key}----------{pg}---.html', headers=self.headers).text + ldata = pq(dlist)('.module-list .module-search-item') + vlist = [] + for i in ldata.items(): + img = i('.module-item-pic') + vlist.append({ + 'vod_id': i('.video-serial').attr('href'), + 'vod_name': img('img').attr('alt'), + 'vod_pic': img('img').attr('data-src'), + 'vod_year': i('.tag-link a').eq(0).text(), + 'vod_remarks': i('.video-serial').text() + }) + result = {"list": vlist, "page": pg} + return result + + def playerContent(self, flag, id, vipFlags): + data=self.fetch(f"{self.host}{id}", headers=self.headers).text + jstr = pq(data)('.player-wrapper script').eq(0).text() + try: + jdata = json.loads(jstr.split('=', 1)[-1]) + url = jdata.get('url') or jdata.get('next_url') + p=0 + except: + url,p = f"{self.host}{id}",1 + return {'parse': p, 'url': url, 'header': self.headers} + + def localProxy(self, param): + pass + + def getlist(self, data): + vlist = [] + for i in data.items(): + img = i('.module-item-pic') + vlist.append({ + 'vod_id': img('a').attr('href'), + 'vod_name': img('img').attr('alt'), + 'vod_pic': img('img').attr('data-src'), + 'vod_remarks': i('.module-item-text').text() + }) + return vlist diff --git a/py/小熊猫影视.py b/py/小熊猫影视.py new file mode 100644 index 0000000..e369b33 --- /dev/null +++ b/py/小熊猫影视.py @@ -0,0 +1,652 @@ +# 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 bs4 import BeautifulSoup +from base64 import b64decode +import urllib.request +import urllib.parse +import binascii +import requests +import base64 +import json +import time +import sys +import re +import os + +sys.path.append('..') + +xurl = "http://220.231.146.94:6261" + +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' + } + +pm = '' + +class Spider(Spider): + global xurl + 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": "2", "type_name": "集多电影🌠"}, + {"type_id": "1", "type_name": "集多剧集🌠"}, + {"type_id": "3", "type_name": "集多综艺🌠"}, + {"type_id": "4", "type_name": "集多动漫🌠"}, + {"type_id": "6", "type_name": "集多少儿🌠"}, + {"type_id": "5", "type_name": "集多短剧🌠"}, + {"type_id": "12", "type_name": "集多纪录🌠"}, + {"type_id": "15", "type_name": "集多直播🌠"}] + } + + return result + + def decrypt(self, encrypted_data): + key = "aEw3eE40UDlyUzJ2SzVNcQ==" + iv = "aEw3eE40UDlyUzJ2SzVNcQ==" + key_bytes = base64.b64decode(key) + iv_bytes = base64.b64decode(iv) + encrypted_bytes = base64.b64decode(encrypted_data) + cipher = AES.new(key_bytes, AES.MODE_CBC, iv_bytes) + decrypted_padded_bytes = cipher.decrypt(encrypted_bytes) + decrypted_bytes = unpad(decrypted_padded_bytes, AES.block_size) + return decrypted_bytes.decode('utf-8') + + def decrypt_wb(self, encrypted_data): + key_base64 = "aEw3eE40UDlyUzJ2SzVNcQ==" + key_bytes = base64.b64decode(key_base64) + iv_base64 = "aEw3eE40UDlyUzJ2SzVNcQ==" + iv_bytes = base64.b64decode(iv_base64) + plaintext = encrypted_data + cipher = AES.new(key_bytes, AES.MODE_CBC, iv_bytes) + ciphertext_bytes = cipher.encrypt(pad(plaintext.encode('utf-8'), AES.block_size)) + ciphertext_base64 = base64.b64encode(ciphertext_bytes).decode('utf-8') + return ciphertext_base64 + + def homeVideoContent(self): + videos = [] + payload = {} + + response = requests.post(xurl + "/api.php/getappapi.index/initV119", headers=headerx, json=payload) + if response.status_code == 200: + response_data = response.json() + data = response_data.get('data') + + encrypted_data = data + detail = self.decrypt(encrypted_data) + detail = json.loads(detail) + + duoxuan = ['1', '2', '3','4','5','6','7','8'] + for duo in duoxuan: + js = detail['type_list'][int(duo)]['recommend_list'] + for vod in js: + name = vod['vod_name'] + + id = vod['vod_id'] + + pic = vod['vod_pic'] + + remark = vod['vod_remarks'] + + video = { + "vod_id": id, + "vod_name": name, + "vod_pic": pic, + "vod_remarks": '集多▶️' + remark + } + videos.append(video) + + result = {'list': videos} + return result + + def categoryContent(self, cid, pg, filter, ext): + result = {} + videos = [] + + if pg: + page = int(pg) + else: + page = 1 + + payload = { + "area": "全部", + "year": "全部", + "type_id": cid, + "page": str(page), + "sort": "最新", + "lang": "全部", + "class": "全部" + } + + response = requests.post(xurl + "/api.php/getappapi.index/typeFilterVodList", headers=headerx, json=payload) + if response.status_code == 200: + response_data = response.json() + data = response_data.get('data') + encrypted_data = data + detail = self.decrypt(encrypted_data) + detail = json.loads(detail) + + js = detail['recommend_list'] + for vod in js: + name = vod['vod_name'] + + id = vod['vod_id'] + + pic = vod['vod_pic'] + + remark = vod['vod_remarks'] + + 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): + global pm + did = ids[0] + result = {} + videos = [] + xianlu = '' + purl = '' + + payload = { + "vod_id": did + } + + response = requests.post(xurl + "/api.php/getappapi.index/vodDetail", headers=headerx, json=payload) + if response.status_code == 200: + response_data = response.json() + data = response_data.get('data') + encrypted_data = data + detail = self.decrypt(encrypted_data) + detail = json.loads(detail) + + url = 'https://fs-im-kefu.7moor-fs1.com/ly/4d2c3f00-7d4c-11e5-af15-41bf63ae4ea0/1732707176882/jiduo.txt' + response = requests.get(url) + response.encoding = 'utf-8' + code = response.text + name = self.extract_middle_text(code, "s1='", "'", 0) + Jumps = self.extract_middle_text(code, "s2='", "'", 0) + + vod_content = '😸集多🎉为您介绍剧情📢' + detail['vod']['vod_blurb'] + + vod_actor = detail['vod']['vod_actor'] + + vod_director = detail['vod']['vod_director'] + + vod_remarks = detail['vod']['vod_remarks'] + + vod_area = detail['vod']['vod_area'] + + vod_year = detail['vod']['vod_year'] + + if name not in vod_content: + bofang = Jumps + xianlu = '1' + else: + soup = detail['vod_play_list'] + + gl = [] + + for vod in soup: + + xian = vod['player_info']['show'] + + if any(item in xian for item in gl): + continue + + xianlu = xianlu + xian + '$$$' + + soups = vod['urls'] + + for vods in soups: + + name = vods['name'] + + token = vods['token'] + + parse = vods['parse_api_url'] + "@" + token + + purl = purl + name + '$' + parse + '#' + + purl = purl[:-1] + '$$$' + + xianlu = xianlu[:-3] + + purl = purl[:-3] + + videos.append({ + "vod_id": did, + "vod_actor": vod_actor, + "vod_director": vod_director, + "vod_content": vod_content, + "vod_remarks": vod_remarks, + "vod_year": vod_year, + "vod_area": vod_area, + "vod_play_from": xianlu, + "vod_play_url": purl + }) + + result['list'] = videos + return result + + def playerContent(self, flag, id, vipFlags): + + if 'ETH-' in id: # BA蓝光 + fenge = id.split("@") + fenges = fenge[0].split("ETH-") + parse_api = fenges[0] + url1 = "ETH-" + fenges[1] + id2 = self.decrypt_wb(url1) + payload = { + "parse_api": parse_api, + "url": id2, + "token": fenge[1] + } + response = requests.post(xurl+"/api.php/getappapi.index/vodParse", headers=headerx, json=payload) + if response.status_code == 200: + response_data = response.json() + data = response_data.get('data') + encrypted_data = data + detail = self.decrypt(encrypted_data) + detail = json.loads(detail) + detail_json = json.loads(detail.get('json')) + url = detail_json.get('url') + + elif 'mtv-' in id: # MT蓝光 + fenge = id.split("@") + fenges = fenge[0].split("mtv-") + parse_api = fenges[0] + url1 = "mtv-" + fenges[1] + id2 = self.decrypt_wb(url1) + payload = { + "parse_api": parse_api, + "url": id2, + "token": fenge[1] + } + response = requests.post(xurl+"/api.php/getappapi.index/vodParse", headers=headerx, json=payload) + if response.status_code == 200: + response_data = response.json() + data = response_data.get('data') + encrypted_data = data + detail = self.decrypt(encrypted_data) + detail = json.loads(detail) + detail_json = json.loads(detail.get('json')) + url = detail_json.get('url') + + elif 'Ace_Net-' in id: # AC蓝光 + fenge = id.split("@") + fenges = fenge[0].split("Ace_Net-") + parse_api = fenges[0] + url1 = "Ace_Net-" + fenges[1] + id2 = self.decrypt_wb(url1) + payload = { + "parse_api": parse_api, + "url": id2, + "token": fenge[1] + } + response = requests.post(xurl+"/api.php/getappapi.index/vodParse", headers=headerx, json=payload) + if response.status_code == 200: + response_data = response.json() + data = response_data.get('data') + encrypted_data = data + detail = self.decrypt(encrypted_data) + detail = json.loads(detail) + detail_json = json.loads(detail.get('json')) + url = detail_json.get('url') + + elif 'jlqp-' in id: # JL蓝光 + fenge = id.split("@") + fenges = fenge[0].split("jlqp-") + parse_api = fenges[0] + url1 = "jlqp-" + fenges[1] + id2 = self.decrypt_wb(url1) + payload = { + "parse_api": parse_api, + "url": id2, + "token": fenge[1] + } + response = requests.post(xurl+"/api.php/getappapi.index/vodParse", headers=headerx, json=payload) + if response.status_code == 200: + response_data = response.json() + data = response_data.get('data') + encrypted_data = data + detail = self.decrypt(encrypted_data) + detail = json.loads(detail) + detail_json = json.loads(detail.get('json')) + url = detail_json.get('url') + + elif 'SGYA-' in id: # SG蓝光 + fenge = id.split("type") + fenges = fenge[1].split("@") + url = fenge[0] + "token=" + fenges[1] + "&type" + fenges[0] + payload = {} + response = requests.post(url=url, headers=headerx, json=payload) + if response.status_code == 200: + response_data = response.json() + url = response_data.get('url') + + elif 'sdm3u8-' in id: # SD蓝光 + fenge = id.split("@") + fenges = fenge[0].split("sdm3u8-") + parse_api = fenges[0] + url1 = "sdm3u8-" + fenges[1] + id2 = self.decrypt_wb(url1) + payload = { + "parse_api": parse_api, + "url": id2, + "token": fenge[1] + } + response = requests.post(xurl+"/api.php/getappapi.index/vodParse", headers=headerx, json=payload) + if response.status_code == 200: + response_data = response.json() + data = response_data.get('data') + encrypted_data = data + detail = self.decrypt(encrypted_data) + detail = json.loads(detail) + detail_json = json.loads(detail.get('json')) + url = detail_json.get('url') + + elif 'SGSJ-' in id: # SJ蓝光 + fenge = id.split("type") + fenges = fenge[1].split("@") + url = fenge[0] + "token=" + fenges[1] + "&type" + fenges[0] + payload = {} + response = requests.post(url=url, headers=headerx, json=payload) + if response.status_code == 200: + response_data = response.json() + url = response_data.get('url') + + elif 'mgtv.com' in id: # 芒果蓝光 + fenge = id.split("@") + fenges = fenge[0].split("https") + parse_api = fenges[0] + url1 = "https" + fenges[1] + id2 = self.decrypt_wb(url1) + payload = { + "parse_api": parse_api, + "url": id2, + "token": fenge[1] + } + response = requests.post(xurl+"/api.php/getappapi.index/vodParse", headers=headerx, json=payload) + if response.status_code == 200: + response_data = response.json() + data = response_data.get('data') + encrypted_data = data + detail = self.decrypt(encrypted_data) + detail = json.loads(detail) + detail_json = json.loads(detail.get('json')) + url = detail_json.get('url') + + elif 'ACG-' in id: # CG蓝光 + fenge = id.split("@") + fenges = fenge[0].split("ACG-") + parse_api = fenges[0] + url1 = "ACG-" + fenges[1] + id2 = self.decrypt_wb(url1) + payload = { + "parse_api": parse_api, + "url": id2, + "token": fenge[1] + } + response = requests.post(xurl+"/api.php/getappapi.index/vodParse", headers=headerx, json=payload) + if response.status_code == 200: + response_data = response.json() + data = response_data.get('data') + encrypted_data = data + detail = self.decrypt(encrypted_data) + detail = json.loads(detail) + detail_json = json.loads(detail.get('json')) + url = detail_json.get('url') + + elif 'dmbs-' in id: # 动漫专线 + fenge = id.split("@") + fenges = fenge[0].split("dmbs-") + parse_api = fenges[0] + url1 = "dmbs-" + fenges[1] + id2 = self.decrypt_wb(url1) + payload = { + "parse_api": parse_api, + "url": id2, + "token": fenge[1] + } + response = requests.post(xurl+"/api.php/getappapi.index/vodParse", headers=headerx, json=payload) + if response.status_code == 200: + response_data = response.json() + data = response_data.get('data') + encrypted_data = data + detail = self.decrypt(encrypted_data) + detail = json.loads(detail) + detail_json = json.loads(detail.get('json')) + url = detail_json.get('url') + response = requests.get(url=url, headers=headerx, allow_redirects=False) + if response.status_code == 302: + url = response.headers.get('Location') + + elif '0-' in id: # AR蓝光 + fenge = id.split("@") + fenges = fenge[0].split("0-") + parse_api = fenges[0] + url1 = "0-" + fenges[1] + id2 = self.decrypt_wb(url1) + payload = { + "parse_api": parse_api, + "url": id2, + "token": fenge[1] + } + response = requests.post(xurl+"/api.php/getappapi.index/vodParse", headers=headerx, json=payload) + if response.status_code == 200: + response_data = response.json() + data = response_data.get('data') + encrypted_data = data + detail = self.decrypt(encrypted_data) + detail = json.loads(detail) + detail_json = json.loads(detail.get('json')) + url = detail_json.get('url') + + elif 'mlive-' in id: # 中央卫视 + fenge = id.split("@") + fenges = fenge[0].split("mlive-") + parse_api = fenges[0] + url1 = "mlive-" + fenges[1] + id2 = self.decrypt_wb(url1) + payload = { + "parse_api": parse_api, + "url": id2, + "token": fenge[1] + } + response = requests.post(xurl+"/api.php/getappapi.index/vodParse", headers=headerx, json=payload) + if response.status_code == 200: + response_data = response.json() + data = response_data.get('data') + encrypted_data = data + detail = self.decrypt(encrypted_data) + detail = json.loads(detail) + detail_json = json.loads(detail.get('json')) + url = detail_json.get('url') + + elif 'mp4' in id: # 4K + fenge = id.split("@") + fenges = fenge[0].split("http") + url = "http" + fenges[1] + response = requests.get(url=url, headers=headerx, allow_redirects=False) + if response.status_code == 302: + url = response.headers.get('Location') + + elif 'iqiyi.com' in id or 'qq.com' in id or 'youku.com' in id or 'bilibili.com' in id or 'ixigua.com' in id: # QY蓝光 QQ蓝光 YK蓝光 B站 西瓜蓝光 + fenge = id.split("@") + url = fenge[0] + + elif 'm3u8' in id: # TT蓝光 + fenge = id.split("@") + url = fenge[0] + + result = {} + result["parse"] = 1 + result["playUrl"] = '' + result["url"] = url + result["header"] = headerx + return result + + def searchContentPage(self, key, quick, page): + result = {} + videos = [] + + if not page: + page = '1' + + payload = { + "keywords": key, + "type_id": "0", + "page": str(page), + } + + response = requests.post(xurl + "/api.php/getappapi.index/searchList", headers=headerx, json=payload) + + if response.status_code == 200: + response_data = response.json() + data = response_data.get('data') + encrypted_data = data + detail = self.decrypt(encrypted_data) + detail = json.loads(detail) + + js = detail['search_list'] + for vod in js: + name = vod['vod_name'] + + id = vod['vod_id'] + + pic = vod['vod_pic'] + + remark = vod['vod_remarks'] + + video = { + "vod_id": id, + "vod_name": name, + "vod_pic": pic, + "vod_remarks": '集多▶️' + remark + } + videos.append(video) + + result = {'list': videos} + result['page'] = page + 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/py/小红影视.py b/py/小红影视.py new file mode 100644 index 0000000..f884543 --- /dev/null +++ b/py/小红影视.py @@ -0,0 +1,174 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import re +import sys +from base64 import b64decode +from Crypto.Cipher import AES +from Crypto.Hash import MD5 +from Crypto.Util.Padding import unpad +sys.path.append("..") +import json +import time +from pyquery import PyQuery as pq +from base.spider import Spider + +class Spider(Spider): + + def init(self, extend=""): + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def action(self, action): + pass + + def destroy(self): + pass + + host='https://www.xiaohys.com' + + headers = { + 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36', + 'Accept': 'application/json, text/javascript, */*; q=0.01', + 'sec-ch-ua-platform': '"macOS"', + 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="134", "Google Chrome";v="134"', + 'Origin': host, + 'Referer': f"{host}/", + } + + def homeContent(self, filter): + data=self.getpq(self.fetch(self.host,headers=self.headers).text) + result = {} + classes = [] + for k in data('.head-more.box a').items(): + i=k.attr('href') + if i and '/show' in i: + classes.append({ + 'type_name': k.text(), + 'type_id': i.split('/')[-1] + }) + result['class'] = classes + result['list']=self.getlist(data('.border-box.diy-center .public-list-div')) + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, tid, pg, filter, extend): + body = {'type':tid,'class':'','area':'','lang':'','version':'','state':'','letter':'','page':pg} + data = self.post(f"{self.host}/index.php/api/vod", headers=self.headers, data=self.getbody(body)).json() + result = {} + result['list'] = data['list'] + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + data = self.getpq(self.fetch(f"{self.host}/detail/{ids[0]}/", headers=self.headers).text) + v=data('.detail-info.lightSpeedIn .slide-info') + vod = { + 'vod_year': v.eq(-1).text(), + 'vod_remarks': v.eq(0).text(), + 'vod_actor': v.eq(3).text(), + 'vod_director': v.eq(2).text(), + 'vod_content': data('.switch-box #height_limit').text() + } + np=data('.anthology.wow.fadeInUp') + ndata=np('.anthology-tab .swiper-wrapper .swiper-slide') + pdata=np('.anthology-list .anthology-list-box ul') + play,names=[],[] + for i in range(len(ndata)): + n=ndata.eq(i)('a') + n('span').remove() + names.append(n.text()) + vs=[] + for v in pdata.eq(i)('li').items(): + vs.append(f"{v.text()}${v('a').attr('href')}") + play.append('#'.join(vs)) + vod["vod_play_from"] = "$$$".join(names) + vod["vod_play_url"] = "$$$".join(play) + result = {"list": [vod]} + return result + + def searchContent(self, key, quick, pg="1"): + data = self.fetch(f"{self.host}/index.php/ajax/suggest?mid=1&wd={key}&limit=9999×tamp={int(time.time()*1000)}", headers=self.headers).json() + videos=[] + for i in data['list']: + videos.append({ + 'vod_id': i['id'], + 'vod_name': i['name'], + 'vod_pic': i['pic'] + }) + return {'list':videos,'page':pg} + + def playerContent(self, flag, id, vipFlags): + h,p,url1= {"User-Agent": "okhttp/3.14.9"},1,'' + url=f"{self.host}{id}" + data = self.getpq(self.fetch(url, headers=self.headers).text) + try: + jstr = data('.player .player-left script').eq(0).text() + jsdata = json.loads(jstr.split('=',1)[-1]) + body, url1= {'url': jsdata['url'],'referer':url},jsdata['url'] + data = self.post(f"{self.host}/static/player/artplayer/api.php?ac=getdate", headers=self.headers, data=body).json() + l=self.aes(data['data'],data['iv']) + url=l.get('url') or l['data'].get('url') + p = 0 + if not url:raise Exception('未找到播放地址') + except Exception as e: + print('错误信息:',e) + if re.search(r'\.m3u8|\.mp4',url1):url=url1 + result = {} + result["parse"] = p + result["url"] = url + result["header"] = h + return result + + def localProxy(self, param): + pass + + def getbody(self, params): + t=int(time.time()) + h = MD5.new() + h.update(f"DS{t}DCC147D11943AF75".encode('utf-8')) + key=h.hexdigest() + params.update({'time':t,'key':key}) + return params + + def getlist(self,data): + videos=[] + for i in data.items(): + id = i('a').attr('href') + if id: + id = re.search(r'\d+', id).group(0) + img = i('img').attr('data-src') + if img and 'url=' in img and 'http' not in img: img = f'{self.host}{img}' + videos.append({ + 'vod_id': id, + 'vod_name': i('img').attr('alt'), + 'vod_pic': img, + 'vod_remarks': i('.public-prt').text() or i('.public-list-prb').text() + }) + return videos + + def getpq(self, data): + try: + return pq(data) + except Exception as e: + print(f"{str(e)}") + return pq(data.encode('utf-8')) + + def aes(self, text,iv): + key = b"d978a93ffb4d3a00" + iv = iv.encode("utf-8") + cipher = AES.new(key, AES.MODE_CBC, iv) + pt = unpad(cipher.decrypt(b64decode(text)), AES.block_size) + return json.loads(pt.decode("utf-8")) diff --git a/py/小红薯APP.py b/py/小红薯APP.py new file mode 100644 index 0000000..3372c79 --- /dev/null +++ b/py/小红薯APP.py @@ -0,0 +1,175 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import json +import random +import sys +import time +from base64 import b64decode +from Crypto.Cipher import AES +from Crypto.Hash import MD5 +from Crypto.Util.Padding import unpad +sys.path.append('..') +from base.spider import Spider + + +class Spider(Spider): + + def getName(self): + return "小红书" + + def init(self, extend=""): + self.did = self.random_str(32) + self.token,self.phost = self.gettoken() + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + def random_str(self,length=16): + hex_chars = '0123456789abcdef' + return ''.join(random.choice(hex_chars) for _ in range(length)) + + def md5(self, text: str) -> str: + h = MD5.new() + h.update(text.encode('utf-8')) + return h.hexdigest() + + def homeContent(self, filter): + data = self.fetch(f'{self.host}/api/video/queryClassifyList?mark=4', headers=self.headers()).json()['encData'] + data1 = self.aes(data) + result = {} + classes = [] + for k in data1['data']: + classes.append({'type_name': k['classifyTitle'], 'type_id': k['classifyId']}) + result['class'] = classes + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, tid, pg, filter, extend): + path=f'/api/short/video/getShortVideos?classifyId={tid}&videoMark=4&page={pg}&pageSize=20' + result = {} + videos = [] + data=self.fetch(f'{self.host}{path}', headers=self.headers()).json()['encData'] + vdata=self.aes(data) + for k in vdata['data']: + videos.append({"vod_id": k['videoId'], 'vod_name': k.get('title'), 'vod_pic': self.getProxyUrl() + '&url=' + k['coverImg'], + 'vod_remarks': self.dtim(k.get('playTime'))}) + result["list"] = videos + result["page"] = pg + result["pagecount"] = 9999 + result["limit"] = 90 + result["total"] = 999999 + return result + + def detailContent(self, ids): + path = f'/api/video/getVideoById?videoId={ids[0]}' + data = self.fetch(f'{self.host}{path}', headers=self.headers()).json()['encData'] + v = self.aes(data) + d=f'{v["title"]}$auth_key={v["authKey"]}&path={v["videoUrl"]}' + vod = {'vod_name': v["title"], 'type_name': ''.join(v.get('tagTitles',[])),'vod_play_from': v.get('nickName') or "小红书官方", 'vod_play_url': d} + result = {"list": [vod]} + return result + + def searchContent(self, key, quick, pg='1'): + pass + + def playerContent(self, flag, id, vipFlags): + h=self.headers() + h['Authorization'] = h.pop('aut') + del h['deviceid'] + result = {"parse": 0, "url": f"{self.host}/api/m3u8/decode/authPath?{id}", "header": h} + return result + + def localProxy(self, param): + return self.action(param) + + def aes(self, word): + key = b64decode("SmhiR2NpT2lKSVV6STFOaQ==") + iv = key + cipher = AES.new(key, AES.MODE_CBC, iv) + decrypted = unpad(cipher.decrypt(b64decode(word)), AES.block_size) + return json.loads(decrypted.decode('utf-8')) + + def dtim(self, seconds): + try: + seconds = int(seconds) + hours = seconds // 3600 + remaining_seconds = seconds % 3600 + minutes = remaining_seconds // 60 + remaining_seconds = remaining_seconds % 60 + + formatted_minutes = str(minutes).zfill(2) + formatted_seconds = str(remaining_seconds).zfill(2) + + if hours > 0: + formatted_hours = str(hours).zfill(2) + return f"{formatted_hours}:{formatted_minutes}:{formatted_seconds}" + else: + return f"{formatted_minutes}:{formatted_seconds}" + except: + return '' + + def getsign(self): + t=str(int(time.time() * 1000)) + return self.md5(t[3:8]) + + def gettoken(self): + url = f'{self.host}/api/user/traveler' + headers = { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 11; M2012K10C Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/87.0.4280.141 Mobile Safari/537.36;SuiRui/xhs/ver=1.2.6', + 'deviceid': self.did, 't': str(int(time.time() * 1000)), 's': self.getsign(), } + data = {'deviceId': self.did, 'tt': 'U', 'code': '', 'chCode': 'dafe13'} + data1 = self.post(url, json=data, headers=headers).json() + data2 = data1['data'] + return data2['token'], data2['imgDomain'] + + host = 'https://jhfkdnov21vfd.dyfcbkggxn.work' + + def headers(self): + henda = { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 11; M2012K10C Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/87.0.4280.141 Mobile Safari/537.36;SuiRui/xhs/ver=1.2.6', + 'deviceid': self.did, 't': str(int(time.time() * 1000)), 's': self.getsign(), 'aut': self.token} + return henda + + def action(self, param): + headers = { + 'User-Agent': 'Dalvik/2.1.0 (Linux; U; Android 11; M2012K10C Build/RP1A.200720.011)'} + data = self.fetch(f'{self.phost}{param["url"]}', headers=headers) + type=data.headers.get('Content-Type').split(';')[0] + base64_data = self.img(data.content, 100, '2020-zq3-888') + return [200, type, base64_data] + + def img(self, data: bytes, length: int, key: str): + GIF = b'\x47\x49\x46' + JPG = b'\xFF\xD8\xFF' + PNG = b'\x89\x50\x4E\x47\x0D\x0A\x1A\x0A' + + def is_dont_need_decode_for_gif(data): + return len(data) > 2 and data[:3] == GIF + + def is_dont_need_decode_for_jpg(data): + return len(data) > 7 and data[:3] == JPG + + def is_dont_need_decode_for_png(data): + return len(data) > 7 and data[1:8] == PNG[1:8] + + if is_dont_need_decode_for_png(data): + return data + elif is_dont_need_decode_for_gif(data): + return data + elif is_dont_need_decode_for_jpg(data): + return data + else: + key_bytes = key.encode('utf-8') + result = bytearray(data) + for i in range(length): + result[i] ^= key_bytes[i % len(key_bytes)] + return bytes(result) diff --git a/py/小苹果APP.py b/py/小苹果APP.py new file mode 100644 index 0000000..ff03224 --- /dev/null +++ b/py/小苹果APP.py @@ -0,0 +1,171 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import sys +sys.path.append('..') +from base.spider import Spider +from urllib.parse import quote + +class Spider(Spider): + def getName(self): + return "xpg" + + def init(self, extend=""): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + def homeContent(self, filter): + data = self.fetch( + "{0}/api.php/v2.vod/androidtypes".format(self.host), + headers=self.header, + ).json() + dy = { + "classes": "类型", + "areas": "地区", + "years": "年份", + "sortby": "排序", + } + filters = {} + classes = [] + for item in data['data']: + has_non_empty_field = False + item['soryby'] = ['updatetime', 'hits', 'score'] + demos = ['时间', '人气', '评分'] + classes.append({"type_name": item["type_name"], "type_id": str(item["type_id"])}) + for key in dy: + if key in item and len(item[key]) > 1: + has_non_empty_field = True + break + if has_non_empty_field: + filters[str(item["type_id"])] = [] + for dkey in item: + if dkey in dy and len(item[dkey]) > 1: + values = item[dkey] + value_array = [ + {"n": demos[idx] if dkey == "sortby" else value.strip(), "v": value.strip()} + for idx, value in enumerate(values) + if value.strip() != "" + ] + filters[str(item["type_id"])].append( + {"key": dkey, "name": dy[dkey], "value": value_array} + ) + result = {} + result["class"] = classes + result["filters"] = filters + return result + + host = "http://item.xpgtv.com" + header = { + 'User-Agent': 'okhttp/3.12.11', + 'token': 'ElEDlwCVgXcFHFhddiq2JKteHofExRBUrfNlmHrWetU3VVkxnzJAodl52N9EUFS+Dig2A/fBa/V9RuoOZRBjYvI+GW8kx3+xMlRecaZuECdb/3AdGkYpkjW3wCnpMQxf8vVeCz5zQLDr8l8bUChJiLLJLGsI+yiNskiJTZz9HiGBZhZuWh1mV1QgYah5CLTbSz8=', + 'token2': 'a0kEsBKRgTkBZ29NZ3WcNKN/C4T00RN/hNkmmGa5JMBeEENnqydLoetm/t8=', + 'user_id': 'XPGBOX', + 'version': 'XPGBOX com.phoenix.tv1.5.3', + 'timestamp': '1732286435', + 'hash': 'd9ab', + } + + def homeVideoContent(self): + rsp = self.fetch("{0}/api.php/v2.main/androidhome".format(self.host), headers=self.header) + root = rsp.json()['data']['list'] + videos = [] + for vodd in root: + for vod in vodd['list']: + videos.append({ + "vod_id": vod['id'], + "vod_name": vod['name'], + "vod_pic": vod['pic'], + "vod_remarks": vod['score'] + }) + result = { + 'list': videos + } + return result + + def categoryContent(self, tid, pg, filter, extend): + parms = [] + parms.append(f"page={pg}") + parms.append(f"type={tid}") + if extend.get('areas'): + parms.append(f"area={quote(extend['areaes'])}") + if extend.get('years'): + parms.append(f"year={quote(extend['yeares'])}") + if extend.get('sortby'): + parms.append(f"sortby={extend['sortby']}") + if extend.get('classes'): + parms.append(f"class={quote(extend['classes'])}") + parms = "&".join(parms) + result = {} + url = '{0}/api.php/v2.vod/androidfilter10086?{1}'.format(self.host, parms) + rsp = self.fetch(url, headers=self.header) + root = rsp.json()['data'] + videos = [] + for vod in root: + videos.append({ + "vod_id": vod['id'], + "vod_name": vod['name'], + "vod_pic": vod['pic'], + "vod_remarks": vod['score'] + }) + result['list'] = videos + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + id = ids[0] + url = '{0}/api.php/v3.vod/androiddetail2?vod_id={1}'.format(self.host, id) + rsp = self.fetch(url, headers=self.header) + root = rsp.json()['data'] + node = root['urls'] + d = [it['key'] + "$" + f"http://c.xpgtv.net/m3u8/{it['url']}.m3u8" for it in node] + vod = { + "vod_name": root['name'], + 'vod_play_from': '小苹果', + 'vod_play_url': '#'.join(d), + } + print(vod) + result = { + 'list': [ + vod + ] + } + return result + + def searchContent(self, key, quick, pg='1'): + url = '{0}/api.php/v2.vod/androidsearch10086?page={1}&wd={2}'.format(self.host, pg, key) + rsp = self.fetch(url, headers=self.header) + root = rsp.json()['data'] + videos = [] + for vod in root: + videos.append({ + "vod_id": vod['id'], + "vod_name": vod['name'], + "vod_pic": vod['pic'], + "vod_remarks": vod['score'] + }) + result = { + 'list': videos + } + return result + + def playerContent(self, flag, id, vipFlags): + result = {} + result["parse"] = 0 + result["url"] = id + result["header"] = self.header + return result + + def localProxy(self, param): + pass + + diff --git a/py/小苹果影视.py b/py/小苹果影视.py new file mode 100644 index 0000000..d1c651d --- /dev/null +++ b/py/小苹果影视.py @@ -0,0 +1,140 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import sys +sys.path.append('..') +from base.spider import Spider + +class Spider(Spider): + + def init(self, extend=""): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + host='http://item.xpgcom.com' + + headers = { + "User-Agent": "okhttp/3.12.11" + } + + def homeContent(self, filter): + data = self.fetch(f"{self.host}/api.php/v2.vod/androidtypes",headers=self.headers,).json() + dy = { + "classes": "类型", + "areas": "地区", + "years": "年份", + "sortby": "排序", + } + filters = {} + classes = [] + for item in data['data']: + has_non_empty_field = False + item['soryby'] = ['updatetime', 'hits', 'score'] + demos = ['时间', '人气', '评分'] + classes.append({"type_name": item["type_name"], "type_id": str(item["type_id"])}) + for key in dy: + if key in item and len(item[key]) > 1: + has_non_empty_field = True + break + if has_non_empty_field: + filters[str(item["type_id"])] = [] + for dkey in item: + if dkey in dy and len(item[dkey]) > 1: + values = item[dkey] + value_array = [ + {"n": demos[idx] if dkey == "sortby" else value.strip(), "v": value.strip()} + for idx, value in enumerate(values) + if value.strip() != "" + ] + filters[str(item["type_id"])].append( + {"key": dkey, "name": dy[dkey], "value": value_array} + ) + result = {} + result["class"] = classes + result["filters"] = filters + return result + + def homeVideoContent(self): + rsp = self.fetch(f"{self.host}/api.php/v2.main/androidhome", headers=self.headers).json() + videos = [] + for i in rsp['data']['list']:videos.extend(self.getlist(i['list'])) + return {'list':videos} + + def categoryContent(self, tid, pg, filter, extend): + params = { + "page": pg, + "type": tid, + "area":extend.get('areaes',''), + "year":extend.get('yeares',''), + "sortby":extend.get('sortby',''), + "class":extend.get('classes','') + } + params={i:v for i,v in params.items() if v} + rsp = self.fetch(f'{self.host}/api.php/v2.vod/androidfilter10086', headers=self.headers, params=params).json() + result = {} + result['list'] = self.getlist(rsp['data']) + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + rsp = self.fetch(f'{self.host}/api.php/v3.vod/androiddetail2?vod_id={ids[0]}', headers=self.headers).json() + v = rsp['data'] + vod = { + 'vod_year':v.get('year'), + 'vod_area':v.get('area'), + 'vod_lang':v.get('lang'), + 'type_name':v.get('className'), + 'vod_actor':v.get('actor'), + 'vod_director':v.get('director'), + 'vod_content':v.get('content'), + 'vod_play_from': '小苹果', + 'vod_play_url': '#'.join([f"{i['key']}${i['url']}" for i in v['urls']]) + } + return {'list':[vod]} + + def searchContent(self, key, quick, pg='1'): + rsp = self.fetch(f'{self.host}/api.php/v2.vod/androidsearch10086?page={pg}&wd={key}', headers=self.headers).json() + return {'list':self.getlist(rsp['data']),'page':pg} + + def playerContent(self, flag, id, vipFlags): + header = { + 'user_id': 'XPGBOX', + 'token2': 'SnAXiSW8vScXE0Z9aDOnK5xffbO75w1+uPom3WjnYfVEA1oWtUdi2Ihy1N8=', + 'version': 'XPGBOX com.phoenix.tv1.5.7', + 'hash': 'd78a', + 'screenx': '2345', + 'user-agent': 'Lavf/58.12.100', + 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36', + 'token': 'ElEDlwCVgXcFHFhddiq2JKteHofExRBUrfNlmHrWetU3VVkxnzJAodl52N9EUFS+Dig2A/fBa/V9RuoOZRBjYvI+GW8kx3+xMlRecaZuECdb/3AdGkYpkjW3wCnpMQxf8vVeCz5zQLDr8l8bUChJiLLJLGsI+yiNskiJTZz9HiGBZhZuWh1mV1QgYah5CLTbSz8=', + 'timestamp': '1743060300', + 'screeny': '1065', + } + if 'http' not in id:id=f"http://c.xpgtv.net/m3u8/{id}.m3u8" + return {"parse": 0, "url": id, "header": header} + + def localProxy(self, param): + pass + + def getlist(self,data): + videos = [] + for vod in data: + r=f"更新至{vod.get('updateInfo')}" if vod.get('updateInfo') else '' + videos.append({ + "vod_id": vod['id'], + "vod_name": vod['name'], + "vod_pic": vod['pic'], + "vod_remarks": r or vod['score'] + }) + return videos + + diff --git a/py/恋鱼影视.py b/py/恋鱼影视.py new file mode 100644 index 0000000..bfefb89 --- /dev/null +++ b/py/恋鱼影视.py @@ -0,0 +1,212 @@ +import re +import sys +from Crypto.Hash import MD5 +sys.path.append("..") +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad, unpad +from urllib.parse import quote, urlparse +from base64 import b64encode, b64decode +import json +import time +from base.spider import Spider + + +class Spider(Spider): + + def init(self, extend=""): + self.host = 'http://47.122.22.78' + self.did=self.getdid() + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def action(self, action): + pass + + def destroy(self): + pass + + def homeContent(self, filter): + data = self.getdata("/api.php/getappapi.index/initV119") + dy = {"class": "类型", "area": "地区", "lang": "语言", "year": "年份", "letter": "字母", "by": "排序", + "sort": "排序"} + filters = {} + classes = [] + json_data = data["type_list"] + homedata = data["banner_list"][8:] + for item in json_data: + if item["type_name"] == "全部": + continue + has_non_empty_field = False + jsontype_extend = json.loads(item["type_extend"]) + homedata.extend(item["recommend_list"]) + jsontype_extend["sort"] = "最新,最热,最赞" + classes.append({"type_name": item["type_name"], "type_id": item["type_id"]}) + for key in dy: + if key in jsontype_extend and jsontype_extend[key].strip() != "": + has_non_empty_field = True + break + if has_non_empty_field: + filters[str(item["type_id"])] = [] + for dkey in jsontype_extend: + if dkey in dy and jsontype_extend[dkey].strip() != "": + values = jsontype_extend[dkey].split(",") + value_array = [{"n": value.strip(), "v": value.strip()} for value in values if + value.strip() != ""] + filters[str(item["type_id"])].append({"key": dkey, "name": dy[dkey], "value": value_array}) + result = {} + result["class"] = classes + result["filters"] = filters + result["list"] = homedata[1:] + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, tid, pg, filter, extend): + body = {"area": extend.get('area', '全部'), "year": extend.get('year', '全部'), "type_id": tid, "page": pg, + "sort": extend.get('sort', '最新'), "lang": extend.get('lang', '全部'), + "class": extend.get('class', '全部')} + result = {} + data = self.getdata("/api.php/getappapi.index/typeFilterVodList", body) + result["list"] = data["recommend_list"] + result["page"] = pg + result["pagecount"] = 9999 + result["limit"] = 90 + result["total"] = 999999 + return result + + def detailContent(self, ids): + body = f"vod_id={ids[0]}" + data = self.getdata("/api.php/getappapi.index/vodDetail", body) + vod = data["vod"] + play = [] + names = [] + for itt in data["vod_play_list"]: + a = [] + names.append(itt["player_info"]["show"]) + for it in itt['urls']: + it['user_agent'] = itt["player_info"].get("user_agent") + it["parse"] = itt["player_info"].get("parse") + a.append(f"{it['name']}${self.e64(json.dumps(it))}") + play.append("#".join(a)) + vod["vod_play_from"] = "$$$".join(names) + vod["vod_play_url"] = "$$$".join(play) + result = {"list": [vod]} + return result + + def searchContent(self, key, quick, pg="1"): + body = f"keywords={key}&type_id=0&page={pg}" + data = self.getdata("/api.php/getappapi.index/searchList", body) + result = {"list": data["search_list"], "page": pg} + return result + + def playerContent(self, flag, id, vipFlags): + ids = json.loads(self.d64(id)) + h = {"User-Agent": (ids['user_agent'] or "okhttp/3.14.9")} + try: + if re.search(r'url=', ids['parse_api_url']): + data = self.fetch(ids['parse_api_url'], headers=h, timeout=10).json() + url = data.get('url') or data['data'].get('url') + else: + body = f"parse_api={ids.get('parse') or ids['parse_api_url'].replace(ids['url'], '')}&url={quote(self.aes(ids['url'], True))}&token={ids.get('token')}" + b = self.getdata("/api.php/getappapi.index/vodParse", body)['json'] + url = json.loads(b)['url'] + if 'error' in url: raise ValueError(f"解析失败: {url}") + p = 0 + except Exception as e: + print('错误信息:', e) + url, p = ids['url'], 1 + + if re.search(r'\.jpg|\.png|\.jpeg', url): + url = self.Mproxy(url) + result = {} + result["parse"] = p + result["url"] = url + result["header"] = h + return result + + def localProxy(self, param): + return self.Mlocal(param) + + def aes(self, text, b=None): + key = b"1234567890123456" + cipher = AES.new(key, AES.MODE_CBC, key) + if b: + ct_bytes = cipher.encrypt(pad(text.encode("utf-8"), AES.block_size)) + ct = b64encode(ct_bytes).decode("utf-8") + return ct + else: + pt = unpad(cipher.decrypt(b64decode(text)), AES.block_size) + return pt.decode("utf-8") + + def header(self): + t = str(int(time.time())) + header = {"Referer": self.host, + "User-Agent": "okhttp/3.14.9", "app-version-code": "101", "app-ui-mode": "light", + "app-api-verify-time": t, "app-user-device-id": self.did, + "app-api-verify-sign": self.aes(t, True), + "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"} + return header + + def getdid(self): + did=self.getCache('did') + if not did: + t = str(int(time.time())) + did = self.md5(t) + self.setCache('did', did) + return did + + def getdata(self, path, data=None): + vdata = self.post(f"{self.host}{path}", headers=self.header(), data=data, timeout=10).json()['data'] + data1 = self.aes(vdata) + return json.loads(data1) + + def Mproxy(self, url): + return f"{self.getProxyUrl()}&url={self.e64(url)}&type=m3u8" + + def Mlocal(self, param, header=None): + url = self.d64(param["url"]) + ydata = self.fetch(url, headers=header, allow_redirects=False) + data = ydata.content.decode('utf-8') + if ydata.headers.get('Location'): + url = ydata.headers['Location'] + data = self.fetch(url, headers=header).content.decode('utf-8') + parsed_url = urlparse(url) + durl = parsed_url.scheme + "://" + parsed_url.netloc + lines = data.strip().split('\n') + for index, string in enumerate(lines): + if '#EXT' not in string and 'http' not in string: + last_slash_index = string.rfind('/') + lpath = string[:last_slash_index + 1] + lines[index] = durl + ('' if lpath.startswith('/') else '/') + lpath + data = '\n'.join(lines) + return [200, "application/vnd.apple.mpegur", data] + + 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() + diff --git a/py/悠悠APP.py b/py/悠悠APP.py new file mode 100644 index 0000000..70958b9 --- /dev/null +++ b/py/悠悠APP.py @@ -0,0 +1,220 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import re +import sys +from Crypto.Hash import MD5 +sys.path.append("..") +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad, unpad +from urllib.parse import quote, urlparse +from base64 import b64encode, b64decode +import json +import time +from base.spider import Spider + +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 action(self, action): + pass + + def destroy(self): + pass + + def homeContent(self, filter): + data = self.getdata("/api.php/getappapi.index/initV119") + dy = {"class": "类型", "area": "地区", "lang": "语言", "year": "年份", "letter": "字母", "by": "排序", + "sort": "排序"} + filters = {} + classes = [] + json_data = data["type_list"] + homedata = data["banner_list"][8:] + for item in json_data: + if item["type_name"] == "全部": + continue + has_non_empty_field = False + jsontype_extend = json.loads(item["type_extend"]) + homedata.extend(item["recommend_list"]) + jsontype_extend["sort"] = "最新,最热,最赞" + classes.append({"type_name": item["type_name"], "type_id": item["type_id"]}) + for key in dy: + if key in jsontype_extend and jsontype_extend[key].strip() != "": + has_non_empty_field = True + break + if has_non_empty_field: + filters[str(item["type_id"])] = [] + for dkey in jsontype_extend: + if dkey in dy and jsontype_extend[dkey].strip() != "": + values = jsontype_extend[dkey].split(",") + value_array = [{"n": value.strip(), "v": value.strip()} for value in values if + value.strip() != ""] + filters[str(item["type_id"])].append({"key": dkey, "name": dy[dkey], "value": value_array}) + result = {} + result["class"] = classes + result["filters"] = filters + result["list"] = homedata[1:] + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, tid, pg, filter, extend): + body = {"area": extend.get('area', '全部'), "year": extend.get('year', '全部'), "type_id": tid, "page": pg, + "sort": extend.get('sort', '最新'), "lang": extend.get('lang', '全部'), + "class": extend.get('class', '全部')} + result = {} + data = self.getdata("/api.php/getappapi.index/typeFilterVodList", body) + result["list"] = data["recommend_list"] + result["page"] = pg + result["pagecount"] = 9999 + result["limit"] = 90 + result["total"] = 999999 + return result + + def detailContent(self, ids): + body = f"vod_id={ids[0]}" + data = self.getdata("/api.php/getappapi.index/vodDetail", body) + vod = data["vod"] + play = [] + names = [] + for itt in data["vod_play_list"]: + a = [] + names.append(itt["player_info"]["show"]) + for it in itt['urls']: + it['user_agent']=itt["player_info"].get("user_agent") + it["parse"]=itt["player_info"].get("parse") + a.append(f"{it['name']}${self.e64(json.dumps(it))}") + play.append("#".join(a)) + vod["vod_play_from"] = "$$$".join(names) + vod["vod_play_url"] = "$$$".join(play) + result = {"list": [vod]} + return result + + def searchContent(self, key, quick, pg="1"): + body = f"keywords={key}&type_id=0&page={pg}" + data = self.getdata("/api.php/getappapi.index/searchList", body) + result = {"list": data["search_list"], "page": pg} + return result + + def playerContent(self, flag, id, vipFlags): + ids = json.loads(self.d64(id)) + h={"User-Agent": (ids['user_agent'] or "okhttp/3.14.9")} + url = ids['url'] + p=1 + try: + if re.search(r'\?url=', ids['parse_api_url']): + data=self.fetch(ids['parse_api_url'], headers=h, timeout=10).json() + url=data.get('url') or data['data'].get('url') + elif not re.search(r'\.m3u8|\.mp4', ids.get('url')): + body = f"parse_api={ids.get('parse') or ids['parse_api_url'].replace(ids['url'], '')}&url={quote(self.aes(ids['url'],True))}&token={ids.get('token')}" + b = self.getdata("/api.php/getappapi.index/vodParse", body)['json'] + url = json.loads(b)['url'] + p=0 + except Exception as e: + print('错误信息:',e) + pass + if re.search(r'\.jpg|\.png|\.jpeg', url): + url = self.Mproxy(url) + result = {} + result["parse"] = p + result["url"] = url + result["header"] = h + return result + + def localProxy(self, param): + return self.Mlocal(param) + + def gethost(self): + headers = { + 'User-Agent': 'okhttp/3.14.9' + } + host = self.fetch('http://host.yyys.news/250123.txt', headers=headers).text + return host.strip() + + phend = { + 'User-Agent': 'Dalvik/2.1.0 (Linux; U; Android 11; M2012K10C Build/RP1A.200720.011)', + 'allowCrossProtocolRedirects': 'true' + } + + def aes(self, text,b=None): + key = b"RuN9LRvwTRgpQnpK" + cipher = AES.new(key, AES.MODE_CBC, key) + if b: + ct_bytes = cipher.encrypt(pad(text.encode("utf-8"), AES.block_size)) + ct = b64encode(ct_bytes).decode("utf-8") + return ct + else : + pt = unpad(cipher.decrypt(b64decode(text)), AES.block_size) + return pt.decode("utf-8") + + def header(self): + t = str(int(time.time())) + header = {"Referer":self.host, + "User-Agent": "okhttp/3.14.9", "app-version-code": "547", "app-ui-mode": "light", + "app-api-verify-time": t, "app-user-device-id": self.md5(t), + "app-api-verify-sign": self.aes(t,True), + "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"} + return header + + def getdata(self, path, data=None): + vdata = self.post(f"{self.host}{path}", headers=self.header(), data=data, timeout=10).json()['data'] + data1 = self.aes(vdata) + return json.loads(data1) + + def Mproxy(self, url): + return f"{self.getProxyUrl()}&url={self.e64(url)}&type=m3u8" + + def Mlocal(self, param,header=None): + url = self.d64(param["url"]) + ydata = self.fetch(url, headers=header, allow_redirects=False) + data = ydata.content.decode('utf-8') + if ydata.headers.get('Location'): + url = ydata.headers['Location'] + data = self.fetch(url, headers=header).content.decode('utf-8') + parsed_url = urlparse(url) + durl = parsed_url.scheme + "://" + parsed_url.netloc + lines = data.strip().split('\n') + for index, string in enumerate(lines): + if '#EXT' not in string and 'http' not in string: + last_slash_index = string.rfind('/') + lpath = string[:last_slash_index + 1] + lines[index] = durl + ('' if lpath.startswith('/') else '/') + lpath + data = '\n'.join(lines) + return [200, "application/vnd.apple.mpegur", data] + + 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() + diff --git a/py/推特APP.py b/py/推特APP.py new file mode 100644 index 0000000..b8dfe13 --- /dev/null +++ b/py/推特APP.py @@ -0,0 +1,216 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import json +import sys +import time +from base64 import b64decode +from urllib.parse import quote +from Crypto.Cipher import AES +from Crypto.Hash import MD5 +from Crypto.Util.Padding import unpad +sys.path.append('..') +from base.spider import Spider + + +class Spider(Spider): + + def getName(self): + return "tuit" + + def init(self, extend=""): + self.did = MD5.new((self.t).encode()).hexdigest() + self.token = self.gettoken() + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def action(self, action): + pass + + def destroy(self): + pass + + def aes(self, word): + key = b64decode("SmhiR2NpT2lKSVV6STFOaQ==") + iv = key + cipher = AES.new(key, AES.MODE_CBC, iv) + decrypted = unpad(cipher.decrypt(b64decode(word)), AES.block_size) + return json.loads(decrypted.decode('utf-8')) + + def dtim(self, seconds): + seconds = int(seconds) + hours = seconds // 3600 + remaining_seconds = seconds % 3600 + minutes = remaining_seconds // 60 + remaining_seconds = remaining_seconds % 60 + + formatted_minutes = str(minutes).zfill(2) + formatted_seconds = str(remaining_seconds).zfill(2) + + if hours > 0: + formatted_hours = str(hours).zfill(2) + return f"{formatted_hours}:{formatted_minutes}:{formatted_seconds}" + else: + return f"{formatted_minutes}:{formatted_seconds}" + + def gettoken(self): + url = 'https://d1frehx187fm2c.cloudfront.net/api/user/traveler' + headers = { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 11; M2012K10C Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/87.0.4280.141 Mobile Safari/537.36;SuiRui/twitter/ver=1.3.4', + 'deviceid': self.did, 't': self.t, 's': self.sign, } + data = {'deviceId': self.did, 'tt': 'U', 'code': '', 'chCode': ''} + data1 = self.post(url, json=data, headers=headers).json() + token = data1['data']['token'] + return token + + t = str(int(time.time() * 1000)) + sign = MD5.new((t[3:8]).encode()).hexdigest() + host = 'https://api.wcyfhknomg.work' + + def headers(self): + henda = { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 11; M2012K10C Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/87.0.4280.141 Mobile Safari/537.36;SuiRui/twitter/ver=1.3.4', + 'deviceid': self.did, 't': self.t, 's': self.sign, 'aut': self.token} + return henda + + def homeContent(self, filter): + data = self.fetch(f'{self.host}/api/video/classifyList', headers=self.headers()).json()['encData'] + data1 = self.aes(data) + result = {'filters': {"1": [{"key": "fl", "name": "分类", + "value": [{"n": "最近更新", "v": "1"}, {"n": "最多播放", "v": "2"}, + {"n": "好评榜", "v": "3"}]}], "2": [{"key": "fl", "name": "分类", + "value": [ + {"n": "最近更新", "v": "1"}, + {"n": "最多播放", "v": "2"}, + {"n": "好评榜", "v": "3"}]}], + "3": [{"key": "fl", "name": "分类", + "value": [{"n": "最近更新", "v": "1"}, {"n": "最多播放", "v": "2"}, + {"n": "好评榜", "v": "3"}]}], "4": [{"key": "fl", "name": "分类", + "value": [ + {"n": "最近更新", "v": "1"}, + {"n": "最多播放", "v": "2"}, + {"n": "好评榜", "v": "3"}]}], + "5": [{"key": "fl", "name": "分类", + "value": [{"n": "最近更新", "v": "1"}, {"n": "最多播放", "v": "2"}, + {"n": "好评榜", "v": "3"}]}], "6": [{"key": "fl", "name": "分类", + "value": [ + {"n": "最近更新", "v": "1"}, + {"n": "最多播放", "v": "2"}, + {"n": "好评榜", "v": "3"}]}], + "7": [{"key": "fl", "name": "分类", + "value": [{"n": "最近更新", "v": "1"}, {"n": "最多播放", "v": "2"}, + {"n": "好评榜", "v": "3"}]}], "jx": [{"key": "type", "name": "精选", + "value": [{"n": "日榜", "v": "1"}, + {"n": "周榜", "v": "2"}, + {"n": "月榜", "v": "3"}, + {"n": "总榜", + "v": "4"}]}]}} + classes = [{'type_name': "精选", 'type_id': "jx"}] + for k in data1['data']: + classes.append({'type_name': k['classifyTitle'], 'type_id': k['classifyId']}) + result['class'] = classes + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, tid, pg, filter, extend): + path = f'/api/video/queryVideoByClassifyId?pageSize=20&page={pg}&classifyId={tid}&sortType={extend.get("fl", "1")}' + if 'click' in tid: + path = f'/api/video/queryPersonVideoByType?pageSize=20&page={pg}&userId={tid.replace("click", "")}' + if tid == 'jx': + path = f'/api/video/getRankVideos?pageSize=20&page={pg}&type={extend.get("type", "1")}' + data = self.fetch(f'{self.host}{path}', headers=self.headers()).json()['encData'] + data1 = self.aes(data)['data'] + result = {} + videos = [] + for k in data1: + img = 'https://dg2ordyr4k5v3.cloudfront.net/' + k.get('coverImg')[0] + id = f'{k.get("videoId")}?{k.get("userId")}?{k.get("nickName")}' + if 'click' in tid: + id = id + 'click' + videos.append({"vod_id": id, 'vod_name': k.get('title'), 'vod_pic': self.getProxyUrl() + '&url=' + img, + 'vod_remarks': self.dtim(k.get('playTime')),'style': {"type": "rect", "ratio": 1.33}}) + result["list"] = videos + result["page"] = pg + result["pagecount"] = 9999 + result["limit"] = 90 + result["total"] = 999999 + return result + + def detailContent(self, ids): + vid = ids[0].replace('click', '').split('?') + path = f'/api/video/can/watch?videoId={vid[0]}' + data = self.fetch(f'{self.host}{path}', headers=self.headers()).json()['encData'] + data1 = self.aes(data)['playPath'] + clj = '[a=cr:' + json.dumps({'id': vid[1] + 'click', 'name': vid[2]}) + '/]' + vid[2] + '[/a]' + if 'click' in ids[0]: + clj = vid[2] + vod = {'vod_director': clj, 'vod_play_from': "推特", 'vod_play_url': vid[2] + "$" + data1} + result = {"list": [vod]} + return result + + def searchContent(self, key, quick, pg='1'): + path = f'/api/search/keyWord?pageSize=20&page={pg}&searchWord={quote(key)}&searchType=1' + data = self.fetch(f'{self.host}{path}', headers=self.headers()).json()['encData'] + data1 = self.aes(data)['videoList'] + result = {} + videos = [] + for k in data1: + img = 'https://dg2ordyr4k5v3.cloudfront.net/' + k.get('coverImg')[0] + id = f'{k.get("videoId")}?{k.get("userId")}?{k.get("nickName")}' + videos.append({"vod_id": id, 'vod_name': k.get('title'), 'vod_pic': self.getProxyUrl() + '&url=' + img, + 'vod_remarks': self.dtim(k.get('playTime')), 'style': {"type": "rect", "ratio": 1.33}}) + result["list"] = videos + result["page"] = pg + result["pagecount"] = 9999 + result["limit"] = 90 + result["total"] = 999999 + return result + + def playerContent(self, flag, id, vipFlags): + result = {"parse": 0, "url": id, "header": {'User-Agent': 'Mozilla/5.0 (Linux; Android 11; M2012K10C Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/87.0.4280.141 Mobile Safari/537.36;SuiRui/twitter/ver=1.3.4'}} + return result + + def localProxy(self, param): + return self.imgs(param) + + def imgs(self, param): + headers = { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 11; M2012K10C Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/87.0.4280.141 Mobile Safari/537.36;SuiRui/twitter/ver=1.3.4'} + url = param['url'] + type = url.split('.')[-1].split('_')[0] + data = self.fetch(url,headers=headers).content + bdata = self.img(data, 100, '2020-zq3-888') + return [200, f'image/{type}', bdata] + + def img(self, data: bytes, length: int, key: str): + GIF = b'\x47\x49\x46' + JPG = b'\xFF\xD8\xFF' + PNG = b'\x89\x50\x4E\x47\x0D\x0A\x1A\x0A' + + def is_dont_need_decode_for_gif(data): + return len(data) > 2 and data[:3] == GIF + + def is_dont_need_decode_for_jpg(data): + return len(data) > 7 and data[:3] == JPG + + def is_dont_need_decode_for_png(data): + return len(data) > 7 and data[1:8] == PNG[1:8] + + if is_dont_need_decode_for_png(data): + return data + elif is_dont_need_decode_for_gif(data): + return data + elif is_dont_need_decode_for_jpg(data): + return data + else: + key_bytes = key.encode('utf-8') + result = bytearray(data) + for i in range(length): + result[i] ^= key_bytes[i % len(key_bytes)] + return bytes(result) diff --git a/py/文才影视.py b/py/文才影视.py new file mode 100644 index 0000000..01bba91 --- /dev/null +++ b/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/py/旺旺影视.py b/py/旺旺影视.py new file mode 100644 index 0000000..c218cad --- /dev/null +++ b/py/旺旺影视.py @@ -0,0 +1,223 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import concurrent.futures +import json +import re +import sys +import time +from base64 import b64decode, b64encode +import requests +from pyquery import PyQuery as pq +sys.path.append('..') +from base.spider import Spider + + +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 = { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36', + 'Pragma': 'no-cache', + 'Cache-Control': 'no-cache', + 'sec-ch-ua-platform': '"Android"', + 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="130", "Google Chrome";v="130"', + 'DNT': '1', + 'sec-ch-ua-mobile': '?1', + 'Sec-Fetch-Site': 'cross-site', + 'Sec-Fetch-Mode': 'no-cors', + 'Sec-Fetch-Dest': 'video', + 'Sec-Fetch-Storage-Access': 'active', + 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8' + } + + config ={"1": [{"key": "cateId","name": "类型","value": [{"n": "全部","v": "1"},{"n": "动作片","v": "5"},{"n": "喜剧片","v": "6"},{"n": "爱情片","v": "7"},{"n": "科幻片","v": "8"},{"n": "恐怖片","v": "9"},{"n": "剧情片","v": "10"},{"n": "战争片","v": "11"},{"n": "惊悚片","v": "16"},{"n": "奇幻片","v": "17"}]},{"key": "area","name": "地区","value": [{"n": "全部","v": ""},{"n": "大陆","v": "大陆"},{"n": "香港","v": "香港"},{"n": "台湾","v": "台湾"},{"n": "美国","v": "美国"},{"n": "韩国","v": "韩国"},{"n": "日本","v": "日本"},{"n": "泰国","v": "泰国"},{"n": "新加坡","v": "新加坡"},{"n": "马来西亚","v": "马来西亚"},{"n": "印度","v": "印度"},{"n": "英国","v": "英国"},{"n": "法国","v": "法国"},{"n": "加拿大","v": "加拿大"},{"n": "西班牙","v": "西班牙"},{"n": "俄罗斯","v": "俄罗斯"},{"n": "其它","v": "其它"}]},{"key": "year","name": "时间","value": [{"n": "全部","v": ""},{"n": "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"},{"n": "1979","v": "1979"},{"n": "1978","v": "1978"},{"n": "1977","v": "1977"},{"n": "1976","v": "1976"},{"n": "1975","v": "1975"},{"n": "1974","v": "1974"},{"n": "1973","v": "1973"},{"n": "1972","v": "1972"},{"n": "1971","v": "1971"},{"n": "1970","v": "1970"},{"n": "1969","v": "1969"},{"n": "1968","v": "1968"},{"n": "1967","v": "1967"},{"n": "1966","v": "1966"},{"n": "1965","v": "1965"},{"n": "1964","v": "1964"},{"n": "1963","v": "1963"},{"n": "1962","v": "1962"},{"n": "1961","v": "1961"},{"n": "1960","v": "1960"},{"n": "1959","v": "1959"},{"n": "1958","v": "1958"},{"n": "1957","v": "1957"},{"n": "1956","v": "1956"},{"n": "1955","v": "1955"},{"n": "1954","v": "1954"},{"n": "1953","v": "1953"},{"n": "1952","v": "1952"},{"n": "1951","v": "1951"},{"n": "1950","v": "1950"},{"n": "1949","v": "1949"},{"n": "1948","v": "1948"},{"n": "1947","v": "1947"},{"n": "1946","v": "1946"},{"n": "1945","v": "1945"},{"n": "1944","v": "1944"},{"n": "1943","v": "1943"},{"n": "1942","v": "1942"},{"n": "1941","v": "1941"},{"n": "1940","v": "1940"},{"n": "1939","v": "1939"},{"n": "1938","v": "1938"},{"n": "1937","v": "1937"},{"n": "1936","v": "1936"},{"n": "1935","v": "1935"},{"n": "1934","v": "1934"},{"n": "1933","v": "1933"},{"n": "1932","v": "1932"},{"n": "1931","v": "1931"},{"n": "1930","v": "1930"},{"n": "1929","v": "1929"},{"n": "1928","v": "1928"},{"n": "1927","v": "1927"},{"n": "1926","v": "1926"},{"n": "1925","v": "1925"},{"n": "1924","v": "1924"},{"n": "1923","v": "1923"},{"n": "1922","v": "1922"},{"n": "1921","v": "1921"},{"n": "1920","v": "1920"},{"n": "1919","v": "1919"},{"n": "1918","v": "1918"},{"n": "1917","v": "1917"},{"n": "1916","v": "1916"},{"n": "1915","v": "1915"},{"n": "1914","v": "1914"}]},{"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": ""},{"n": "时间","v": "time"},{"n": "人气","v": "hits"},{"n": "评分","v": "score"}]}],"2": [{"key": "cateId","name": "类型","value": [{"n": "全部","v": "2"},{"n": "国产剧","v": "12"},{"n": "港台泰","v": "13"},{"n": "日韩剧","v": "14"},{"n": "欧美剧","v": "15"}]},{"key": "area","name": "地区","value": [{"n": "全部","v": ""},{"n": "大陆","v": "大陆"},{"n": "香港","v": "香港"},{"n": "台湾","v": "台湾"},{"n": "美国","v": "美国"},{"n": "韩国","v": "韩国"},{"n": "日本","v": "日本"},{"n": "泰国","v": "泰国"},{"n": "新加坡","v": "新加坡"},{"n": "马来西亚","v": "马来西亚"},{"n": "印度","v": "印度"},{"n": "英国","v": "英国"},{"n": "法国","v": "法国"},{"n": "加拿大","v": "加拿大"},{"n": "西班牙","v": "西班牙"},{"n": "俄罗斯","v": "俄罗斯"},{"n": "其它","v": "其它"}]},{"key": "year","name": "时间","value": [{"n": "全部","v": ""},{"n": "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"},{"n": "1979","v": "1979"},{"n": "1978","v": "1978"},{"n": "1977","v": "1977"},{"n": "1976","v": "1976"},{"n": "1975","v": "1975"},{"n": "1974","v": "1974"},{"n": "1973","v": "1973"},{"n": "1972","v": "1972"},{"n": "1971","v": "1971"},{"n": "1970","v": "1970"},{"n": "1969","v": "1969"},{"n": "1968","v": "1968"},{"n": "1967","v": "1967"},{"n": "1966","v": "1966"},{"n": "1965","v": "1965"},{"n": "1964","v": "1964"},{"n": "1963","v": "1963"},{"n": "1962","v": "1962"},{"n": "1961","v": "1961"},{"n": "1960","v": "1960"}]},{"key": "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": ""},{"n": "时间","v": "time"},{"n": "人气","v": "hits"},{"n": "评分","v": "score"}]}],"3": [{"key": "area","name": "地区","value": [{"n": "全部","v": ""},{"n": "大陆","v": "大陆"},{"n": "香港","v": "香港"},{"n": "台湾","v": "台湾"},{"n": "美国","v": "美国"},{"n": "韩国","v": "韩国"},{"n": "日本","v": "日本"},{"n": "泰国","v": "泰国"},{"n": "新加坡","v": "新加坡"},{"n": "马来西亚","v": "马来西亚"},{"n": "印度","v": "印度"},{"n": "英国","v": "英国"},{"n": "法国","v": "法国"},{"n": "加拿大","v": "加拿大"},{"n": "西班牙","v": "西班牙"},{"n": "俄罗斯","v": "俄罗斯"},{"n": "其它","v": "其它"}]},{"key": "year","name": "时间","value": [{"n": "全部","v": ""},{"n": "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"}]},{"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": ""},{"n": "时间","v": "time"},{"n": "人气","v": "hits"},{"n": "评分","v": "score"}]}],"4": [{"key": "cateId","name": "类型","value": [{"n": "全部","v": "4"},{"n": "动漫剧","v": "18"},{"n": "动漫片","v": "19"}]},{"key": "area","name": "地区","value": [{"n": "全部","v": ""},{"n": "大陆","v": "大陆"},{"n": "香港","v": "香港"},{"n": "台湾","v": "台湾"},{"n": "美国","v": "美国"},{"n": "韩国","v": "韩国"},{"n": "日本","v": "日本"},{"n": "泰国","v": "泰国"},{"n": "新加坡","v": "新加坡"},{"n": "马来西亚","v": "马来西亚"},{"n": "印度","v": "印度"},{"n": "英国","v": "英国"},{"n": "法国","v": "法国"},{"n": "加拿大","v": "加拿大"},{"n": "西班牙","v": "西班牙"},{"n": "俄罗斯","v": "俄罗斯"},{"n": "其它","v": "其它"}]},{"key": "year","name": "时间","value": [{"n": "全部","v": ""},{"n": "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"},{"n": "1979","v": "1979"},{"n": "1978","v": "1978"},{"n": "1977","v": "1977"},{"n": "1976","v": "1976"},{"n": "1975","v": "1975"},{"n": "1974","v": "1974"},{"n": "1973","v": "1973"},{"n": "1972","v": "1972"},{"n": "1971","v": "1971"},{"n": "1970","v": "1970"},{"n": "1969","v": "1969"},{"n": "1968","v": "1968"},{"n": "1967","v": "1967"}]},{"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": ""},{"n": "时间","v": "time"},{"n": "人气","v": "hits"},{"n": "评分","v": "score"}]}],"26": [{"key": "area","name": "地区","value": [{"n": "全部","v": ""},{"n": "大陆","v": "大陆"},{"n": "香港","v": "香港"},{"n": "台湾","v": "台湾"},{"n": "美国","v": "美国"},{"n": "韩国","v": "韩国"},{"n": "日本","v": "日本"},{"n": "泰国","v": "泰国"},{"n": "新加坡","v": "新加坡"},{"n": "马来西亚","v": "马来西亚"},{"n": "印度","v": "印度"},{"n": "英国","v": "英国"},{"n": "法国","v": "法国"},{"n": "加拿大","v": "加拿大"},{"n": "西班牙","v": "西班牙"},{"n": "俄罗斯","v": "俄罗斯"},{"n": "其它","v": "其它"}]},{"key": "year","name": "时间","value": [{"n": "全部","v": ""},{"n": "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": ""},{"n": "时间","v": "time"},{"n": "人气","v": "hits"},{"n": "评分","v": "score"}]}]} + + def homeContent(self, filter): + data = self.getpq() + cdata = data('#topnav .swiper-wrapper li') + result = {} + classes = [] + videos = [] + for k in cdata.items(): + i = k('a').attr('href') + if i and 'type' in i and '音乐' not in k.text(): + classes.append({ + 'type_name': k.text(), + 'type_id': i.split('-')[-3], + }) + for i in list(data('.globalPicList').items())[1:]: + videos.extend(self.getlist(i('ul li'))) + result['class'] = classes + result['filters'] = self.config + result['list'] = videos + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, tid, pg, filter, extend): + data = self.getpq( + f"/vod-list-id-{extend.get('cateId', tid)}-pg-{pg}-order--by-{extend.get('by', 'time')}-class-0-year-{extend.get('year', '')}-letter-{extend.get('letter', '')}-area-{extend.get('area', '')}-lang-.html") + result = {} + result['list'] = self.getlist(data('.globalPicList .resize_list li')) + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + data = self.getpq(ids[0]) + v = data('.numList ul li').eq(0)('a').attr('href') + html = self.getpq(v) + d = html('.detailPosterIntro script').eq(0).text() + mac_from = re.search(r"mac_from='(.*?)'", d) + mac_url = re.search(r"mac_url='(.*?)'", d).group(1) + z = data('.page-bd') + c = z('.desc_item') + vod = { + 'vod_name': z('h1 a').text(), + 'vod_year': c.eq(3)('a').text(), + 'vod_remarks': c.eq(0)('font').text(), + 'vod_actor': c.eq(1)('a').text(), + 'vod_director': c.eq(2)('a').text(), + 'vod_content': data('.detail-con p').text().split(':')[-1], + 'vod_play_from': mac_from.group(1) if mac_from else '呜呜呜', + 'vod_play_url': mac_url + } + return {'list': [vod]} + + def searchContent(self, key, quick, pg="1"): + data = pq(self.post(f"{self.host}/index.php?m=vod-search", data={'wd': key}, headers=self.headers).text) + video = [] + for k in data('#data_list li').items(): + video.append({ + 'vod_id': k('.pic a').attr('href'), + 'vod_name': k('.sTit').text(), + 'vod_pic': k('.pic img').attr('src'), + 'vod_year': k('.sStyle').text(), + 'vod_remarks': k('.sDes').eq(-1).text() + }) + return {'list': video, 'page': pg} + + def playerContent(self, flag, id, vipFlags): + try: + if flag == '呜呜呜': raise Exception('未找到播放地址') + jxdata = self.getpq(f"/player/{flag}.js").html() + jxurl = re.search(r'http.*?url=', jxdata).group() + data = self.fetch(f"{jxurl}{id}", headers=self.headers).text + matches = re.findall(r'http.*?url=', data) + if len(matches): + url = [] + for i, x in enumerate(matches): + js = {'jx': x, 'id': id} + purl = f"{self.getProxyUrl()}&wdict={self.e64(json.dumps(js))}" + url.extend([f'线路{i + 1}', purl]) + else: + url = re.search(r"url='(.*?)'", data).group(1) + if not url: raise Exception('未找到播放地址') + p = 0 + except: + p, url = 1, id + return {'parse': p, 'url': url, 'header': self.headers} + + def localProxy(self, param): + wdict = json.loads(self.d64(param['wdict'])) + url = f"{wdict['jx']}{wdict['id']}" + data = pq(self.fetch(url, headers=self.headers).text) + html = data('script').eq(-1).text() + url = re.search(r'src="(.*?)"', html).group(1) + return [302, 'text/html', None, {'Location': url}] + + def liveContent(self, url): + pass + + def gethost(self): + data = pq(self.fetch('https://www.nmdvd.com', headers=self.headers).text) + hlist = data('a[rel="nofollow"] b').text().split(' ') + return self.host_late(hlist) + + def host_late(self, urls): + with concurrent.futures.ThreadPoolExecutor() as executor: + future_to_url = { + executor.submit(self.test_host, f"https://{url}"): f"https://{url}" + for url in urls + } + results = {} + for future in concurrent.futures.as_completed(future_to_url): + url = future_to_url[future] + try: + results[url] = future.result() + except Exception as e: + results[url] = float('inf') + min_url = min(results.items(), key=lambda x: x[1])[0] if results else None + if all(delay == float('inf') for delay in results.values()) or not min_url: + return f"https://{urls[0]}" + return min_url + + def test_host(self, url): + try: + start_time = time.monotonic() + response = requests.head( + url, + timeout=1.0, + allow_redirects=False, + headers=self.headers + ) + response.raise_for_status() + return (time.monotonic() - start_time) * 1000 + except Exception as e: + print(f"测试{url}失败: {str(e)}") + return float('inf') + + def getpq(self, path=''): + data = self.fetch(f"{self.host}{path}", headers=self.headers).text + return pq(data) + + def getlist(self, data): + videos = [] + for k in data.items(): + i = k('.sBottom') + j = i('em').text() + i.remove('em') + videos.append({ + 'vod_id': k('a').attr('href'), + 'vod_name': k('.sTit').text(), + 'vod_pic': k('.pic img').attr('src'), + 'vod_year': j, + 'vod_remarks': i.text(), + }) + return videos + + 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 "" diff --git a/py/柯南影视.py b/py/柯南影视.py new file mode 100644 index 0000000..5313945 --- /dev/null +++ b/py/柯南影视.py @@ -0,0 +1,197 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import re +import sys +from urllib.parse import quote, urlparse +from Crypto.Hash import SHA256 +sys.path.append("..") +import json +import time +from pyquery import PyQuery as pq +from base.spider import Spider + +class Spider(Spider): + + def init(self, extend=""): + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def action(self, action): + pass + + def destroy(self): + pass + + host='https://www.knvod.com' + + 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-CN,zh;q=0.9,en;q=0.8', + 'Sec-Fetch-Dest': 'document', + 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36', + 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="134", "Google Chrome";v="134"', + 'sec-ch-ua-platform': '"macOS"', + 'Origin': host, + 'Referer': f"{host}/", + 'Cookie':'X-Robots-Tag=CDN-VERIFY' + } + + def homeContent(self, filter): + data=self.getpq(self.fetch(self.host,headers=self.headers).text) + result = {} + classes = [] + for k in data('.head-more.box a').items(): + i=k.attr('href') + if i and '/show' in i: + classes.append({ + 'type_name': k.text(), + 'type_id': re.findall(r'\d+', i)[0] + }) + result['class'] = classes + result['list']=self.getlist(data('.border-box.public-r .public-list-div')) + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, tid, pg, filter, extend): + data=self.getpq(self.fetch(f"{self.host}/show/{tid}--------{pg}---/",headers=self.headers).text) + result = {} + result['list'] = self.getlist(data('.border-box.public-r .public-list-div')) + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + data = self.getpq(self.fetch(f"{self.host}/list/{ids[0]}/", headers=self.headers).text) + v=data('.detail-info.lightSpeedIn .slide-info') + vod = { + 'vod_year': v.eq(-1).text().split(':',1)[-1], + 'vod_remarks': v.eq(0), + 'vod_actor': v.eq(3).text().split(':',1)[-1], + 'vod_director': v.eq(2).text().split(':',1)[-1], + 'vod_content': data('.switch-box #height_limit').text() + } + np=data('.anthology.wow.fadeInUp') + ndata=np('.anthology-tab .swiper-wrapper .swiper-slide') + pdata=np('.anthology-list .anthology-list-box ul') + play,names=[],[] + for i in range(len(ndata)): + n=ndata.eq(i)('a') + n('span').remove() + names.append(n.text()) + vs=[] + for v in pdata.eq(i)('li').items(): + vs.append(f"{v.text()}${v('a').attr('href')}") + play.append('#'.join(vs)) + vod["vod_play_from"] = "$$$".join(names) + vod["vod_play_url"] = "$$$".join(play) + result = {"list": [vod]} + return result + + def searchContent(self, key, quick, pg="1"): + data = self.fetch(f"{self.host}/index.php/ajax/suggest?mid=1&wd={key}&limit=9999×tamp={int(time.time()*1000)}", headers=self.headers).json() + videos=[] + for i in data['list']: + videos.append({ + 'vod_id': i['id'], + 'vod_name': i['name'], + 'vod_pic': i['pic'] + }) + return {'list':videos,'page':pg} + + def playerContent(self, flag, id, vipFlags): + h={ + 'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.8 Mobile/15E148 Safari/604.1', + 'Origin': self.host + } + data = self.getpq(self.fetch(f"{self.host}{id}", headers=self.headers).text) + try: + jstr = data('.player-box .player-left script').eq(1).text() + jsdata = json.loads(jstr.split('=',1)[-1]) + url = jsdata.get('url') + if not re.search(r'\.m3u8|\.mp4',jsdata['url']): + jxd=self.fetch(f"{self.host}/static/player/{jsdata['from']}.js", headers=self.headers).text + jx=re.search(r'http.*?url=', jxd) + if not jx:raise Exception('未找到jx') + parsed_url = urlparse(jx.group()) + jxhost = parsed_url.scheme + "://" + parsed_url.netloc + title=data('head title').eq(0).text().split('-')[0] + next=f"{self.host.split('//')[-1]}{jsdata['link_next']}" if jsdata.get('link_next') else '' + cd=self.fetch(f"{jx.group()}{jsdata['url']}&next=//{next}&title={quote(title)}", headers=self.headers).text + match = re.search(r'var\s+config\s*=\s*(\{[\s\S]*?\})', cd) + if not match:raise Exception('未找到config') + cm=re.sub(r',\s*}(?=\s*$)', '}', match.group(1)) + config=json.loads(cm) + config.update({'key':self.sha256(f"{self.gettime()}knvod")}) + config.pop('next',None) + headers = { + 'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.8 Mobile/15E148 Safari/604.1', + 'Accept': 'application/json, text/javascript, */*; q=0.01', + 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8', + 'Cache-Control': 'no-cache', + 'DNT': '1', + 'Origin': jxhost, + 'Pragma': 'no-cache', + 'Sec-Fetch-Dest': 'empty', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Site': 'same-origin', + 'Sec-Fetch-Storage-Access': 'active', + 'X-Requested-With': 'XMLHttpRequest', + } + h['Origin']=jxhost + jd=self.post(f"{jxhost}/post.php", headers=headers, data=json.dumps(config)) + data=json.loads(jd.content.decode('utf-8-sig')) + url=data.get('knvod') + p = 0 + if not url:raise Exception('未找到播放地址') + except Exception as e: + print('错误信息:',e) + p,url=1,f"{self.host}{id}" + return {"parse": p, "url": url, "header": h} + + def localProxy(self, param): + pass + + def getlist(self,data): + videos=[] + for i in data.items(): + id = i('a').attr('href') + if id: + id = re.search(r'\d+', id).group(0) + img = i('img').attr('data-src') + if img and 'url=' in img and 'http' not in img: img = f'{self.host}{img}' + videos.append({ + 'vod_id': id, + 'vod_name': i('a').attr('title'), + 'vod_pic': img, + 'vod_remarks': i('.public-prt').text() or i('.public-list-prb').text() + }) + return videos + + def getpq(self, data): + try: + return pq(data) + except Exception as e: + print(f"{str(e)}") + return pq(data.encode('utf-8')) + + def gettime(self): + current_time = int(time.time()) + hourly_timestamp = current_time - (current_time % 3600) + return hourly_timestamp + + def sha256(self, text): + sha = SHA256.new() + sha.update(text.encode()) + return sha.hexdigest() diff --git a/py/河马短剧.py b/py/河马短剧.py new file mode 100644 index 0000000..eeee8ba --- /dev/null +++ b/py/河马短剧.py @@ -0,0 +1,581 @@ +# -*- coding: utf-8 -*- +import requests +import re +import json +import traceback +import sys + +sys.path.append('../../') +try: + from base.spider import Spider +except ImportError: + # 定义一个基础接口类,用于本地测试 + class Spider: + def init(self, extend=""): + pass + +class Spider(Spider): + def __init__(self): + self.siteUrl = "https://www.kuaikaw.cn" + self.nextData = None # 缓存NEXT_DATA数据 + self.cateManual = { + "甜宠": "462", + "古装仙侠": "1102", + "现代言情": "1145", + "青春": "1170", + "豪门恩怨": "585", + "逆袭": "417-464", + "重生": "439-465", + "系统": "1159", + "总裁": "1147", + "职场商战": "943" + } + + def getName(self): + # 返回爬虫名称 + return "河马短剧" + + def init(self, extend=""): + return + + def fetch(self, url, headers=None): + """统一的网络请求接口""" + if headers is None: + 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 Edg/120.0.0.0", + "Referer": self.siteUrl, + "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,en;q=0.8" + } + + try: + response = requests.get(url, headers=headers, timeout=10, allow_redirects=True) + response.raise_for_status() + return response + except Exception as e: + print(f"请求异常: {url}, 错误: {str(e)}") + return None + + def isVideoFormat(self, url): + # 检查是否为视频格式 + video_formats = ['.mp4', '.mkv', '.avi', '.wmv', '.m3u8', '.flv', '.rmvb'] + for format in video_formats: + if format in url.lower(): + return True + return False + + def manualVideoCheck(self): + # 不需要手动检查 + return False + + def homeContent(self, filter): + """获取首页分类及筛选""" + result = {} + # 分类列表,使用已初始化的cateManual + classes = [] + for k in self.cateManual: + classes.append({ + 'type_name': k, + 'type_id': self.cateManual[k] + }) + result['class'] = classes + # 获取首页推荐视频 + try: + result['list'] = self.homeVideoContent()['list'] + except: + result['list'] = [] + + return result + + def homeVideoContent(self): + """获取首页推荐视频内容""" + videos = [] + try: + response = self.fetch(self.siteUrl) + html_content = response.text + # 提取NEXT_DATA JSON数据 + next_data_pattern = r'' + next_data_match = re.search(next_data_pattern, html_content, re.DOTALL) + if next_data_match: + next_data_json = json.loads(next_data_match.group(1)) + page_props = next_data_json.get("props", {}).get("pageProps", {}) + # 获取轮播图数据 - 这些通常是推荐内容 + if "bannerList" in page_props and isinstance(page_props["bannerList"], list): + banner_list = page_props["bannerList"] + for banner in banner_list: + book_id = banner.get("bookId", "") + book_name = banner.get("bookName", "") + cover_url = banner.get("coverWap", banner.get("wapUrl", "")) + # 获取状态和章节数 + status = banner.get("statusDesc", "") + total_chapters = banner.get("totalChapterNum", "") + if book_id and book_name: + videos.append({ + "vod_id": f"/drama/{book_id}", + "vod_name": book_name, + "vod_pic": cover_url, + "vod_remarks": f"{status} {total_chapters}集" if total_chapters else status + }) + + # SEO分类下的推荐 + if "seoColumnVos" in page_props and isinstance(page_props["seoColumnVos"], list): + for column in page_props["seoColumnVos"]: + book_infos = column.get("bookInfos", []) + for book in book_infos: + book_id = book.get("bookId", "") + book_name = book.get("bookName", "") + cover_url = book.get("coverWap", "") + status = book.get("statusDesc", "") + total_chapters = book.get("totalChapterNum", "") + + if book_id and book_name: + videos.append({ + "vod_id": f"/drama/{book_id}", + "vod_name": book_name, + "vod_pic": cover_url, + "vod_remarks": f"{status} {total_chapters}集" if total_chapters else status + }) + + # # 去重 + # seen = set() + # unique_videos = [] + # for video in videos: + # if video["vod_id"] not in seen: + # seen.add(video["vod_id"]) + # unique_videos.append(video) + # videos = unique_videos + + except Exception as e: + print(f"获取首页推荐内容出错: {e}") + + result = { + "list": videos + } + return result + + def categoryContent(self, tid, pg, filter, extend): + """获取分类内容""" + result = {} + videos = [] + url = f"{self.siteUrl}/browse/{tid}/{pg}" + response = self.fetch(url) + html_content = response.text + # 提取NEXT_DATA JSON数据 + next_data_pattern = r'' + next_data_match = re.search(next_data_pattern, html_content, re.DOTALL) + if next_data_match: + next_data_json = json.loads(next_data_match.group(1)) + page_props = next_data_json.get("props", {}).get("pageProps", {}) + # 获取总页数和当前页 + current_page = page_props.get("page", 1) + total_pages = page_props.get("pages", 1) + # 获取书籍列表 + book_list = page_props.get("bookList", []) + # 转换为通用格式 + for book in book_list: + book_id = book.get("bookId", "") + book_name = book.get("bookName", "") + cover_url = book.get("coverWap", "") + status_desc = book.get("statusDesc", "") + total_chapters = book.get("totalChapterNum", "") + if book_id and book_name: + videos.append({ + "vod_id": f"/drama/{book_id}", + "vod_name": book_name, + "vod_pic": cover_url, + "vod_remarks": f"{status_desc} {total_chapters}集" if total_chapters else status_desc + }) + # 构建返回结果 + result = { + "list": videos, + "page": int(current_page), + "pagecount": total_pages, + "limit": len(videos), + "total": total_pages * len(videos) if videos else 0 + } + return result + + def switch(self, key, pg): + # 搜索功能 + search_results = [] + # 获取第一页结果,并检查总页数 + url = f"{self.siteUrl}/search?searchValue={key}&page={pg}" + response = self.fetch(url) + html_content = response.text + # 提取NEXT_DATA JSON数据 + next_data_pattern = r'' + next_data_match = re.search(next_data_pattern, html_content, re.DOTALL) + if next_data_match: + next_data_json = json.loads(next_data_match.group(1)) + page_props = next_data_json.get("props", {}).get("pageProps", {}) + # 获取总页数 + total_pages = page_props.get("pages", 1) + # 处理所有页的数据 + all_book_list = [] + # 添加第一页的书籍列表 + book_list = page_props.get("bookList", []) + all_book_list.extend(book_list) + # 如果有多页,获取其他页的数据 + if total_pages > 1 : # quick模式只获取第一页 + for page in range(2, total_pages + 1): + next_page_url = f"{self.siteUrl}/search?searchValue={key}&page={page}" + next_page_response = self.fetch(next_page_url) + next_page_html = next_page_response.text + next_page_match = re.search(next_data_pattern, next_page_html, re.DOTALL) + if next_page_match: + next_page_json = json.loads(next_page_match.group(1)) + next_page_props = next_page_json.get("props", {}).get("pageProps", {}) + next_page_books = next_page_props.get("bookList", []) + all_book_list.extend(next_page_books) + # 转换为统一的搜索结果格式 + for book in all_book_list: + book_id = book.get("bookId", "") + book_name = book.get("bookName", "") + cover_url = book.get("coverWap", "") + total_chapters = book.get("totalChapterNum", "0") + status_desc = book.get("statusDesc", "") + # 构建视频项 + vod = { + "vod_id": f"/drama/{book_id}", + "vod_name": book_name, + "vod_pic": cover_url, + "vod_remarks": f"{status_desc} {total_chapters}集" + } + search_results.append(vod) + result = { + "list": search_results, + "page": pg + } + return result + + def searchContent(self, key, quick, pg=1): + result = self.switch(key, pg=pg) + result['page'] = pg + return result + + def searchContentPage(self, key, quick, pg=1): + return self.searchContent(key, quick, pg) + + def detailContent(self, ids): + # 获取剧集信息 + vod_id = ids[0] + episode_id = None + chapter_id = None + + if not vod_id.startswith('/drama/'): + if vod_id.startswith('/episode/'): + episode_info = vod_id.replace('/episode/', '').split('/') + if len(episode_info) >= 2: + episode_id = episode_info[0] + chapter_id = episode_info[1] + vod_id = f'/drama/{episode_id}' + else: + vod_id = '/drama/' + vod_id + + drama_url = self.siteUrl + vod_id + print(f"请求URL: {drama_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 Edg/120.0.0.0", + "Referer": self.siteUrl, + "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,en;q=0.8" + } + + rsp = self.fetch(drama_url, headers=headers) + if not rsp or rsp.status_code != 200: + print(f"请求失败,状态码: {getattr(rsp, 'status_code', 'N/A')}") + return {} + + html = rsp.text + next_data_match = re.search(r'', html, re.DOTALL) + + if not next_data_match: + print("未找到NEXT_DATA内容") + return {} + + try: + next_data = json.loads(next_data_match.group(1)) + page_props = next_data.get("props", {}).get("pageProps", {}) + print(f"找到页面属性,包含 {len(page_props.keys())} 个键") + + book_info = page_props.get("bookInfoVo", {}) + chapter_list = page_props.get("chapterList", []) + + title = book_info.get("title", "") + sub_title = f"{book_info.get('totalChapterNum', '')}集" + + categories = [] + for category in book_info.get("categoryList", []): + categories.append(category.get("name", "")) + + vod_content = book_info.get("introduction", "") + + vod = { + "vod_id": vod_id, + "vod_name": title, + "vod_pic": book_info.get("coverWap", ""), + "type_name": ",".join(categories), + "vod_year": "", + "vod_area": book_info.get("countryName", ""), + "vod_remarks": sub_title, + "vod_actor": ", ".join([p.get("name", "") for p in book_info.get("performerList", [])]), + "vod_director": "", + "vod_content": vod_content + } + + # 处理播放列表 + play_url_list = [] + episodes = [] + + if chapter_list: + print(f"找到 {len(chapter_list)} 个章节") + + # 先检查是否有可以直接使用的MP4链接作为模板 + mp4_template = None + first_mp4_chapter_id = None + + # 先搜索第一个章节的MP4链接 + # 为提高成功率,尝试直接请求第一个章节的播放页 + if chapter_list and len(chapter_list) > 0: + first_chapter = chapter_list[0] + first_chapter_id = first_chapter.get("chapterId", "") + drama_id_clean = vod_id.replace('/drama/', '') + + if first_chapter_id and drama_id_clean: + first_episode_url = f"{self.siteUrl}/episode/{drama_id_clean}/{first_chapter_id}" + print(f"请求第一集播放页: {first_episode_url}") + + first_rsp = self.fetch(first_episode_url, headers=headers) + if first_rsp and first_rsp.status_code == 200: + first_html = first_rsp.text + # 直接从HTML提取MP4链接 + mp4_pattern = r'(https?://[^"\']+\.mp4)' + mp4_matches = re.findall(mp4_pattern, first_html) + if mp4_matches: + mp4_template = mp4_matches[0] + first_mp4_chapter_id = first_chapter_id + print(f"找到MP4链接模板: {mp4_template}") + print(f"模板对应的章节ID: {first_mp4_chapter_id}") + + # 如果未找到模板,再检查章节对象中是否有MP4链接 + if not mp4_template: + for chapter in chapter_list[:5]: # 只检查前5个章节以提高效率 + if "chapterVideoVo" in chapter and chapter["chapterVideoVo"]: + chapter_video = chapter["chapterVideoVo"] + mp4_url = chapter_video.get("mp4", "") or chapter_video.get("mp4720p", "") or chapter_video.get("vodMp4Url", "") + if mp4_url and ".mp4" in mp4_url: + mp4_template = mp4_url + first_mp4_chapter_id = chapter.get("chapterId", "") + print(f"从chapterVideoVo找到MP4链接模板: {mp4_template}") + print(f"模板对应的章节ID: {first_mp4_chapter_id}") + break + + # 遍历所有章节处理播放信息 + for chapter in chapter_list: + chapter_id = chapter.get("chapterId", "") + chapter_name = chapter.get("chapterName", "") + + # 1. 如果章节自身有MP4链接,直接使用 + if "chapterVideoVo" in chapter and chapter["chapterVideoVo"]: + chapter_video = chapter["chapterVideoVo"] + mp4_url = chapter_video.get("mp4", "") or chapter_video.get("mp4720p", "") or chapter_video.get("vodMp4Url", "") + if mp4_url and ".mp4" in mp4_url: + episodes.append(f"{chapter_name}${mp4_url}") + continue + + # 2. 如果有MP4模板,尝试替换章节ID构建MP4链接 + if mp4_template and first_mp4_chapter_id and chapter_id: + # 替换模板中的章节ID部分 + if first_mp4_chapter_id in mp4_template: + new_mp4_url = mp4_template.replace(first_mp4_chapter_id, chapter_id) + episodes.append(f"{chapter_name}${new_mp4_url}") + continue + + # 3. 如果上述方法都不可行,回退到使用chapter_id构建中间URL + if chapter_id and chapter_name: + url = f"{vod_id}${chapter_id}${chapter_name}" + episodes.append(f"{chapter_name}${url}") + + if not episodes and vod_id: + # 尝试构造默认的集数 + total_chapters = int(book_info.get("totalChapterNum", "0")) + if total_chapters > 0: + print(f"尝试构造 {total_chapters} 个默认集数") + + # 如果知道章节ID的模式,可以构造 + if chapter_id and episode_id: + for i in range(1, total_chapters + 1): + chapter_name = f"第{i}集" + url = f"{vod_id}${chapter_id}${chapter_name}" + episodes.append(f"{chapter_name}${url}") + else: + # 使用普通的构造方式 + for i in range(1, total_chapters + 1): + chapter_name = f"第{i}集" + url = f"{vod_id}${chapter_name}" + episodes.append(f"{chapter_name}${url}") + + if episodes: + play_url_list.append("#".join(episodes)) + vod['vod_play_from'] = '河马剧场' + vod['vod_play_url'] = '$$$'.join(play_url_list) + + result = { + 'list': [vod] + } + return result + except Exception as e: + print(f"解析详情页失败: {str(e)}") + print(traceback.format_exc()) + return {} + + def playerContent(self, flag, id, vipFlags): + result = {} + print(f"调用playerContent: flag={flag}, id={id}") + + 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 Edg/120.0.0.0", + "Referer": self.siteUrl, + "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,en;q=0.8" + } + + # 解析id参数 + parts = id.split('$') + drama_id = None + chapter_id = None + + if len(parts) >= 2: + drama_id = parts[0] + chapter_id = parts[1] + chapter_name = parts[2] if len(parts) > 2 else "第一集" + print(f"解析参数: drama_id={drama_id}, chapter_id={chapter_id}") + else: + # 处理旧数据格式 + print(f"使用原始URL格式: {id}") + result["parse"] = 0 + result["url"] = id + result["header"] = json.dumps(headers) + return result + + # 直接检查chapter_id是否包含http(可能已经是视频链接) + if 'http' in chapter_id and '.mp4' in chapter_id: + print(f"已经是MP4链接: {chapter_id}") + result["parse"] = 0 + result["url"] = chapter_id + result["header"] = json.dumps(headers) + return result + + # 构建episode页面URL + drama_id_clean = drama_id.replace('/drama/', '') + episode_url = f"{self.siteUrl}/episode/{drama_id_clean}/{chapter_id}" + print(f"请求episode页面: {episode_url}") + + try: + rsp = self.fetch(episode_url, headers=headers) + if not rsp or rsp.status_code != 200: + print(f"请求失败,状态码: {getattr(rsp, 'status_code', 'N/A')}") + result["parse"] = 0 + result["url"] = id + result["header"] = json.dumps(headers) + return result + + html = rsp.text + print(f"获取页面大小: {len(html)} 字节") + + # 尝试从NEXT_DATA提取视频链接 + mp4_url = None + + # 方法1: 从NEXT_DATA提取 + next_data_match = re.search(r'', html, re.DOTALL) + if next_data_match: + try: + print("找到NEXT_DATA") + next_data = json.loads(next_data_match.group(1)) + page_props = next_data.get("props", {}).get("pageProps", {}) + + # 从chapterList中查找当前章节 + chapter_list = page_props.get("chapterList", []) + print(f"找到章节列表,长度: {len(chapter_list)}") + + for chapter in chapter_list: + if chapter.get("chapterId") == chapter_id: + print(f"找到匹配的章节: {chapter.get('chapterName')}") + chapter_video = chapter.get("chapterVideoVo", {}) + mp4_url = chapter_video.get("mp4", "") or chapter_video.get("mp4720p", "") or chapter_video.get("vodMp4Url", "") + if mp4_url: + print(f"从chapterList找到MP4链接: {mp4_url}") + break + + # 如果未找到,尝试从当前章节获取 + if not mp4_url: + current_chapter = page_props.get("chapterInfo", {}) + if current_chapter: + print("找到当前章节信息") + chapter_video = current_chapter.get("chapterVideoVo", {}) + mp4_url = chapter_video.get("mp4", "") or chapter_video.get("mp4720p", "") or chapter_video.get("vodMp4Url", "") + if mp4_url: + print(f"从chapterInfo找到MP4链接: {mp4_url}") + except Exception as e: + print(f"解析NEXT_DATA失败: {str(e)}") + print(traceback.format_exc()) + + # 方法2: 直接从HTML中提取MP4链接 + if not mp4_url: + mp4_pattern = r'(https?://[^"\']+\.mp4)' + mp4_matches = re.findall(mp4_pattern, html) + if mp4_matches: + # 查找含有chapter_id的链接 + matched_mp4 = False + for url in mp4_matches: + if chapter_id in url: + mp4_url = url + matched_mp4 = True + print(f"从HTML直接提取章节MP4链接: {mp4_url}") + break + + # 如果没找到包含chapter_id的链接,使用第一个 + if not matched_mp4 and mp4_matches: + mp4_url = mp4_matches[0] + print(f"从HTML直接提取MP4链接: {mp4_url}") + + if mp4_url and ".mp4" in mp4_url: + print(f"最终找到的MP4链接: {mp4_url}") + result["parse"] = 0 + result["url"] = mp4_url + result["header"] = json.dumps(headers) + return result + else: + print(f"未找到有效的MP4链接,尝试再次解析页面内容") + # 再尝试一次从HTML中广泛搜索所有可能的MP4链接 + all_mp4_pattern = r'(https?://[^"\']+\.mp4)' + all_mp4_matches = re.findall(all_mp4_pattern, html) + if all_mp4_matches: + mp4_url = all_mp4_matches[0] + print(f"从HTML广泛搜索找到MP4链接: {mp4_url}") + result["parse"] = 0 + result["url"] = mp4_url + result["header"] = json.dumps(headers) + return result + + print(f"未找到视频链接,返回原episode URL: {episode_url}") + result["parse"] = 0 + result["url"] = episode_url + result["header"] = json.dumps(headers) + return result + except Exception as e: + print(f"请求或解析失败: {str(e)}") + print(traceback.format_exc()) + result["parse"] = 0 + result["url"] = id + result["header"] = json.dumps(headers) + return result + + def localProxy(self, param): + # 本地代理处理,此处简单返回传入的参数 + return [200, "video/MP2T", {}, param] + + def destroy(self): + # 资源回收 + pass \ No newline at end of file diff --git a/py/浴火社APP.py b/py/浴火社APP.py new file mode 100644 index 0000000..4698b09 --- /dev/null +++ b/py/浴火社APP.py @@ -0,0 +1,349 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import json +import re +import sys +import threading +import time +from base64 import b64decode, b64encode +import requests +from Crypto.Cipher import AES +from Crypto.Hash import MD5 +from Crypto.Util.Padding import unpad +sys.path.append('..') +from base.spider import Spider + + +class Spider(Spider): + + def init(self, extend=""): + self.did = self.getdid() + self.token=self.gettoken() + domain=self.domain() + self.phost=self.host_late(domain['domain_preview']) + self.bhost=domain['domain_original'] + self.names=domain['name_original'] + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + host = 'https://lulu-api-92mizw.jcdwn.com' + + headers = { + 'User-Agent': 'okhttp/4.11.0', + 'referer': 'https://app.nova-traffic-1688.com', + } + + def homeContent(self, filter): + BASE_CATEGORIES = [ + {'type_name': '片商', 'type_id': 'makers'}, + {'type_name': '演员', 'type_id': 'actor'} + ] + + SORT_OPTIONS = { + 'key': 'sortby', + 'name': 'sortby', + 'value': [ + {'n': '最新', 'v': 'on_shelf_at'}, + {'n': '最热', 'v': 'hot'} + ] + } + + tags = self.getdata('/api/v1/video/tag?current=1&pageSize=100&level=1') + producers = self.getdata('/api/v1/video/producer?current=1&pageSize=100&status=1') + regions = self.getdata('/api/v1/video/region?current=1&pageSize=100') + result = {'class': [], 'filters': {}} + result['class'].extend(BASE_CATEGORIES) + for category in BASE_CATEGORIES: + result['filters'][category['type_id']] = [SORT_OPTIONS] + if tags.get('data'): + main_tag = tags['data'][0] + result['class'].append({ + 'type_name': '发现', + 'type_id': f'{main_tag["id"]}_tag' + }) + tag_values = [ + {'n': tag['name'], 'v': f"{tag['id']}_tag"} + for tag in tags['data'][1:] + if tag.get('id') + ] + result['filters'][f'{main_tag["id"]}_tag'] = [ + {'key': 'tagtype', 'name': 'tagtype', 'value': tag_values}, + SORT_OPTIONS + ] + + region_filter = { + 'key': 'region_ids', + 'name': 'region_ids', + 'value': [ + {'n': region['name'], 'v': region['id']} + for region in regions['data'][1:] + if region.get('id') + ] + } + self.aid=regions['data'][0]['id'] + result['filters']['actor'].append({ + 'key': 'region_id', + 'name': 'region_id', + 'value': region_filter['value'][:2] + }) + complex_sort = { + 'key': 'sortby', + 'name': 'sortby', + 'value': [ + {'n': '综合', 'v': 'complex'}, + *SORT_OPTIONS['value'] + ] + } + producer_filters = [region_filter, complex_sort] + for producer in producers['data']: + result['class'].append({ + 'type_name': producer['name'], + 'type_id': f'{producer["id"]}_sx' + }) + result['filters'][f'{producer["id"]}_sx'] = producer_filters + return result + + def homeVideoContent(self): + data=self.getdata('/api/v1/video?current=1&pageSize=60®ion_ids=&sortby=complex') + return {'list':self.getlist(data)} + + def categoryContent(self, tid, pg, filter, extend): + if 'act' in tid: + data=self.getact(tid, pg, filter, extend) + elif 'tag' in tid: + data=self.gettag(tid, pg, filter, extend) + elif 'sx' in tid: + data=self.getsx(tid, pg, filter, extend) + elif 'make' in tid: + data=self.getmake(tid, pg, filter, extend) + result = {} + result['list'] = data + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + v=self.getdata(f'/api/v1/video?current=1&pageSize=1&id={ids[0]}&detail=1') + v=v['data'][0] + vod = { + 'vod_name': v.get('title'), + 'type_name': '/'.join(v.get('tag_names',[])), + 'vod_play_from': '浴火社', + 'vod_play_url': '' + } + p=[] + for i,j in enumerate(self.bhost): + p.append(f'{self.names[i]}${j}{v.get("highres_url") or v.get("preview_url")}@@@{v["id"]}') + vod['vod_play_url'] = '#'.join(p) + return {'list':[vod]} + + def searchContent(self, key, quick, pg="1"): + data=self.getdata(f'/api/v1/video?current={pg}&pageSize=30&title={key}') + return {'list':self.getlist(data),'page':pg} + + def playerContent(self, flag, id, vipFlags): + url=f'{self.getProxyUrl()}&url={self.e64(id)}&type=m3u8' + return {'parse': 0, 'url': url, 'header': self.headers} + + def localProxy(self, param): + if param.get('type')=='image': + data=self.fetch(param.get('url'), headers=self.headers).text + content=b64decode(data.encode('utf-8')) + return [200, 'image/png', content] + if param.get('type')=='m3u8': + ids=self.d64(param.get('url')).split('@@@') + data=self.fetch(ids[0], headers=self.headers).text + lines = data.strip().split('\n') + for index, string in enumerate(lines): + if 'URI=' in string: + replacement = f'URI="{self.getProxyUrl()}&id={ids[1]}&type=mkey"' + lines[index]=re.sub(r'URI="[^"]+"', replacement, string) + continue + if '#EXT' not in string and 'http' not in string: + last_slash_index = ids[0].rfind('/') + lpath = ids[0][:last_slash_index + 1] + lines[index] = f'{lpath}{string}' + data = '\n'.join(lines) + return [200, 'audio/x-mpegurl', data] + if param.get('type')=='mkey': + id=param.get('id') + headers = { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 11; M2012K10C Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/87.0.4280.141 Mobile Safari/537.36', + 'authdog': self.token + } + response = self.fetch(f'{self.host}/api/v1/video/key/{id}', headers=headers) + type=response.headers.get('Content-Type') + return [200, type, response.content] + + 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 getdid(self): + did = self.md5(str(int(time.time() * 1000))) + try: + if self.getCache('did'): + return self.getCache('did') + else: + self.setCache('did', did) + return did + except Exception as e: + self.setCache('did', did) + return did + + 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 domain(self): + headers = { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 11; M2012K10C Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/87.0.4280.141 Mobile Safari/537.36', + } + response = self.fetch(f'{self.host}/api/v1/system/domain', headers=headers) + return self.aes(response.content) + + def aes(self, word): + key = b64decode("amtvaWc5ZnJ2Ym5taml1eQ==") + iv = b64decode("AAEFAwQFCQcICQoLDA0ODw==") + cipher = AES.new(key, AES.MODE_CBC, iv) + decrypted = unpad(cipher.decrypt(word), AES.block_size) + return json.loads(decrypted.decode('utf-8')) + + def md5(self, text): + h = MD5.new() + h.update(text.encode('utf-8')) + return h.hexdigest() + + def gettoken(self): + headers = { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 11; M2012K10C Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/87.0.4280.141 Mobile Safari/537.36', + 'cookei': self.md5(f'{self.did}+android'), + 'siteid': '11', + 'siteauthority': 'lls888.tv' + } + + json_data = { + 'app_id': 'jukjoe.zqgpi.hfzvde.sdot', + 'phone_device': 'Redmi M2012K10C', + 'device_id': self.did, + 'device_type': 'android', + 'invite_code': 'oi1o', + 'is_first': 1, + 'os_version': '11', + 'version': '8.59', + } + response = self.post(f'{self.host}/api/v1/member/device', headers=headers, json=json_data) + tdata = self.aes(response.content) + return f'{tdata["token_type"]} {tdata["access_token"]}' + + def getdata(self, path): + headers = { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 11; M2012K10C Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/87.0.4280.141 Mobile Safari/537.36', + 'authdog': self.token + } + response = self.fetch(f'{self.host}{path}', headers=headers) + return self.aes(response.content) + + def getimg(self, path): + if not path.startswith('/'): + path = f'/{path}' + return f'{self.getProxyUrl()}&url={self.phost}{path}&type=image' + + def getlist(self,data): + videos = [] + for i in data['data']: + videos.append({ + 'vod_id': i['id'], + 'vod_name': i['title'], + 'vod_pic': self.getimg(i.get('coverphoto_h' or i.get('coverphoto_v'))), + 'style': {"type": "rect", "ratio": 1.33}}) + return videos + + def geticon(self, data, st='',style=None): + if style is None:style = {"type": "oval"} + videos = [] + for i in data['data']: + videos.append({ + 'vod_id': f'{i["id"]}{st}', + 'vod_name': i['name'], + 'vod_pic': self.getimg(i.get('icon_path')), + 'vod_tag': 'folder', + 'style': style}) + return videos + + def getact(self, tid, pg, filter, extend): + if tid == 'actor' and pg=='1': + data = self.getdata(f'/api/v1/video/actor?current=1&pageSize=999®ion_id={extend.get("region_id",self.aid)}&discover_page={pg}') + return self.geticon(data, '_act') + elif '_act' in tid: + data = self.getdata(f'/api/v1/video?current={pg}&pageSize=50&actor_ids={tid.split("_")[0]}&sortby={extend.get("sortby","on_shelf_at")}') + return self.getlist(data) + + def gettag(self, tid, pg, filter, extend): + if '_tag' in tid: + tid=extend.get('tagtype',tid) + data=self.getdata(f'/api/v1/video/tag?current={pg}&pageSize=100&level=2&parent_id={tid.split("_")[0]}') + return self.geticon(data, '_stag',{"type": "rect", "ratio": 1.33}) + elif '_stag' in tid: + data = self.getdata(f'/api/v1/video?current={pg}&pageSize=50&tag_ids={tid.split("_")[0]}&sortby={extend.get("sortby","on_shelf_at")}') + return self.getlist(data) + + def getsx(self, tid, pg, filter, extend): + data=self.getdata(f'/api/v1/video?current={pg}&pageSize=20&producer_ids={tid.split("_")[0]}®ion_ids={extend.get("region_ids","")}&sortby={extend.get("sortby","complex")}') + return self.getlist(data) + + def getmake(self, tid, pg, filter, extend): + if pg=='1': + data=self.getdata('/api/v1/video/producer?current=1&pageSize=100&status=1') + return self.geticon(data, '_sx',{"type": "rect", "ratio": 1.33}) + diff --git a/py/海马影视.py b/py/海马影视.py new file mode 100644 index 0000000..801ffaf --- /dev/null +++ b/py/海马影视.py @@ -0,0 +1,181 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import json +import random +import string +import sys +from base64 import b64decode, b64encode +from urllib.parse import quote, unquote +sys.path.append('..') +import concurrent.futures +from base.spider import Spider + + +class Spider(Spider): + + def init(self, extend=""): + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + host='http://w.dcmovie.top' + + headers = { + 'User-Agent': 'okhttp/4.9.1', + 'mark-time': 'null', + 'fn-api-version': '1.3.2', + 'versionCode': '5', + 'product': 'gysg', + } + + def homeContent(self, filter): + data=self.fetch(f"{self.host}/api.php/vod/type", headers=self.headers).json() + result,filters,videos = {},{},[] + classes = [{'type_id': i['type_name'], 'type_name': i['type_name']} for i in data['list'][1:]] + body={'token':'', 'type_id':data['list'][0]['type_id']} + ldata=self.post(f"{self.host}/api.php/vod/category", data=body, headers=self.headers).json() + for i in ldata['data']['banner']: + videos.append({ + 'vod_id':i.get('vod_id'), + 'vod_name':i.get('vod_name'), + 'vod_pic':i.get('vod_pic_thumb') + }) + with concurrent.futures.ThreadPoolExecutor(max_workers=len(classes)) as executor: + future_to_aid = {executor.submit(self.fts, aid): aid for aid in classes} + for future in concurrent.futures.as_completed(future_to_aid): + aid = future_to_aid[future] + try: + aid_id, fts = future.result() + filters[aid_id] = fts + except Exception as e: + print(f"Error processing aid {aid}: {e}") + result['class'] = classes + result['filters'] = filters + result['list'] = videos + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, tid, pg, filter, extend): + params={'state':extend.get('state',tid) or tid,'class':extend.get('classes','全部'),'area':extend.get('area','全部'),'year':extend.get('year','全部'),'lang':extend.get('lang','全部'),'version':extend.get('version','全部'),'pg':pg} + data=self.fetch(f"{self.host}/api.php/vod/list", params=params, headers=self.headers).json() + result = {} + videos = [] + for i in data['data']['list']: + if str(i.get('vod_id', 0)) != '0': + videos.append({ + 'vod_id': i.get('vod_id'), + 'vod_name': i.get('vod_name'), + 'vod_pic': i.get('vod_pic'), + 'vod_year': f"{i.get('vod_score')}分", + 'vod_remarks': i.get('vod_remarks') + }) + result['list'] = videos + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + body={'ids':ids[0],'uni_code':self.getunc(),'ac':'detail','token':''} + data=self.post(f"{self.host}/api.php/vod/detail2", data=body, headers=self.headers).json() + v=data['data'] + vod = { + 'type_name': v.get('type_name'), + 'vod_year': v.get('vod_year'), + 'vod_area': v.get('vod_area'), + 'vod_lang': v.get('vod_lang'), + 'vod_remarks': v.get('vod_remarks'), + 'vod_actor': v.get('vod_actor'), + 'vod_director': v.get('vod_director'), + 'vod_content': v.get('vod_content') + } + n,p=[],[] + for i in v['vod_play_list']: + pp=i['player_info'] + n.append(pp['show']) + np=[] + for j in i['urls']: + cd={'parse':pp.get('parse'),'url':j['url'],'headers':pp.get('headers')} + np.append(f"{j['name']}${self.e64(json.dumps(cd))}") + p.append('#'.join(np)) + vod.update({'vod_play_from':'$$$'.join(n),'vod_play_url':'$$$'.join(p)}) + return {'list':[vod]} + + def searchContent(self, key, quick, pg="1"): + data=self.fetch(f"{self.host}/api.php/vod/search", params={'keywords':key,'type':'1','pg':pg}, headers=self.headers).json() + return {'list':data['list'],'page':pg} + + def playerContent(self, flag, id, vipFlags): + ids=json.loads(self.d64(id)) + headers = {} + urls=ids['url'] + if ids.get('headers'): + hs=ids['headers'].split('=>',1) + headers[hs[0].strip()]=hs[-1].strip() + if isinstance(ids.get('parse'), list) and len(ids['parse']) > 0: + urls=[] + for i,x in enumerate(ids['parse']): + su=f"{self.getProxyUrl()}&url={quote(x+ids['url'])}" + urls.extend([f'解析{i+1}',su]) + return {'parse': 0, 'url': urls, 'header': headers} + + def localProxy(self, param): + try: + body = {'url':unquote(param['url'])} + data=self.post(f"{self.host}/api.php/vod/m_jie_xi", data=body, headers=self.headers).json() + url=data.get('url') or data['data'].get('url') + return [302,'video/MP2T',None,{'Location':url}] + except: + return [] + + def liveContent(self, url): + pass + + def fts(self, tdata): + params={'state':tdata['type_id'],'pg':'1'} + data = self.fetch(f"{self.host}/api.php/vod/list", params=params, headers=self.headers).json() + ftks = ["classes", "area", "lang", "year", "version", "state"] + filter = [ + { + 'name': k, + 'key': k, + 'value': [{'n': i, 'v': i} for i in v.split(',')] + } + for k, v in data['data']['classes']["type_extend"].items() + if k in ftks and v + ] + return tdata['type_id'],filter + + def getunc(self): + chars = string.ascii_lowercase + string.digits + data = ''.join(random.choice(chars) for _ in range(16)) + return self.e64(data) + + 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: + 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: + return "" diff --git a/py/火车太顺APP.py b/py/火车太顺APP.py new file mode 100644 index 0000000..6a80179 --- /dev/null +++ b/py/火车太顺APP.py @@ -0,0 +1,301 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import sys +from urllib.parse import urlparse +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 init(self, extend=""): + self.device = self.device_id() + self.host = self.gethost() + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def action(self, action): + pass + + def destroy(self): + pass + + 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 not re.search(r"\.m3u8|\.mp4", url): + try: + data = json.loads(b64decode(id.encode('utf-8')).decode('utf-8')) + 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') + except Exception as e: + pass + if re.search(r'\.jpg|\.png|\.jpeg', url): + url = self.Mproxy(url) + result = {} + result["parse"] = 0 + result["url"] = url + result["header"] = {'user-agent': 'okhttp/4.9.2'} + return result + + def localProxy(self, param): + return self.Mlocal(param) + + def Mproxy(self, url): + return self.getProxyUrl() + "&url=" + b64encode(url.encode('utf-8')).decode('utf-8') + "&type=m3u8" + + def Mlocal(self, param,header=None): + url = self.d64(param["url"]) + ydata = self.fetch(url, headers=header, allow_redirects=False) + data = ydata.content.decode('utf-8') + if ydata.headers.get('Location'): + url = ydata.headers['Location'] + data = self.fetch(url, headers=header).content.decode('utf-8') + parsed_url = urlparse(url) + durl = parsed_url.scheme + "://" + parsed_url.netloc + lines = data.strip().split('\n') + for index, string in enumerate(lines): + if '#EXT' not in string and 'http' not in string: + last_slash_index = string.rfind('/') + lpath = string[:last_slash_index + 1] + lines[index] = durl + ('' if lpath.startswith('/') else '/') + lpath + 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): + try: + url = 'https://dns.alidns.com/dns-query' + headers = { + 'User-Agent': 'okhttp/4.9.2', + 'Accept': 'application/dns-message' + } + params = { + 'dns': 'AAABAAABAAAAAAAACWJmbTExYXM5ZgdmdXFpeXVuAmNuAAAcAAE' + } + response = self.fetch(url, headers=headers, params=params) + host=self.parse_dns_name(response.content, 12) + return f"https://{host}" + except: + return "https://bfm11as9f.fuqiyun.cn" + + def parse_dns_name(self, data, offset): + parts = [] + while True: + length = data[offset] + if length == 0: + break + offset += 1 + parts.append(data[offset:offset + length].decode('utf-8')) + offset += length + return '.'.join(parts) + + def header(self): + headers = { + 'User-Agent': 'Android', + 'Accept': 'application/prs.55App.v2+json', + 'timestamp': str(int(time.time())), + 'x-client-setting': '{"pure-mode":0}', + '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"] = str(int(time.time())) + 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: + vd={"from_code": it['from_code'], "play_url": it['play_url'], "episode_id": it['episode_id'], "type": "play"} + play_urls.append( + f"{it['episode_name']}${b64encode(json.dumps(vd).encode('utf-8')).decode('utf-8')}" + ) + 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/py/火车影视.py b/py/火车影视.py new file mode 100644 index 0000000..6a80179 --- /dev/null +++ b/py/火车影视.py @@ -0,0 +1,301 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import sys +from urllib.parse import urlparse +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 init(self, extend=""): + self.device = self.device_id() + self.host = self.gethost() + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def action(self, action): + pass + + def destroy(self): + pass + + 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 not re.search(r"\.m3u8|\.mp4", url): + try: + data = json.loads(b64decode(id.encode('utf-8')).decode('utf-8')) + 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') + except Exception as e: + pass + if re.search(r'\.jpg|\.png|\.jpeg', url): + url = self.Mproxy(url) + result = {} + result["parse"] = 0 + result["url"] = url + result["header"] = {'user-agent': 'okhttp/4.9.2'} + return result + + def localProxy(self, param): + return self.Mlocal(param) + + def Mproxy(self, url): + return self.getProxyUrl() + "&url=" + b64encode(url.encode('utf-8')).decode('utf-8') + "&type=m3u8" + + def Mlocal(self, param,header=None): + url = self.d64(param["url"]) + ydata = self.fetch(url, headers=header, allow_redirects=False) + data = ydata.content.decode('utf-8') + if ydata.headers.get('Location'): + url = ydata.headers['Location'] + data = self.fetch(url, headers=header).content.decode('utf-8') + parsed_url = urlparse(url) + durl = parsed_url.scheme + "://" + parsed_url.netloc + lines = data.strip().split('\n') + for index, string in enumerate(lines): + if '#EXT' not in string and 'http' not in string: + last_slash_index = string.rfind('/') + lpath = string[:last_slash_index + 1] + lines[index] = durl + ('' if lpath.startswith('/') else '/') + lpath + 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): + try: + url = 'https://dns.alidns.com/dns-query' + headers = { + 'User-Agent': 'okhttp/4.9.2', + 'Accept': 'application/dns-message' + } + params = { + 'dns': 'AAABAAABAAAAAAAACWJmbTExYXM5ZgdmdXFpeXVuAmNuAAAcAAE' + } + response = self.fetch(url, headers=headers, params=params) + host=self.parse_dns_name(response.content, 12) + return f"https://{host}" + except: + return "https://bfm11as9f.fuqiyun.cn" + + def parse_dns_name(self, data, offset): + parts = [] + while True: + length = data[offset] + if length == 0: + break + offset += 1 + parts.append(data[offset:offset + length].decode('utf-8')) + offset += length + return '.'.join(parts) + + def header(self): + headers = { + 'User-Agent': 'Android', + 'Accept': 'application/prs.55App.v2+json', + 'timestamp': str(int(time.time())), + 'x-client-setting': '{"pure-mode":0}', + '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"] = str(int(time.time())) + 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: + vd={"from_code": it['from_code'], "play_url": it['play_url'], "episode_id": it['episode_id'], "type": "play"} + play_urls.append( + f"{it['episode_name']}${b64encode(json.dumps(vd).encode('utf-8')).decode('utf-8')}" + ) + 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/py/爱奇艺.py b/py/爱奇艺.py new file mode 100644 index 0000000..2b0af3d --- /dev/null +++ b/py/爱奇艺.py @@ -0,0 +1,248 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import random +import sys +from base64 import b64encode, b64decode +from concurrent.futures import ThreadPoolExecutor, as_completed +from urllib.parse import urlencode +sys.path.append('..') +from base.spider import Spider + + +class Spider(Spider): + + def init(self, extend=""): + self.did = self.random_str(32) + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + rhost = 'https://www.iqiyi.com' + + hhost='https://mesh.if.iqiyi.com' + + dhost='https://miniapp.iqiyi.com' + + headers = { + 'Origin': rhost, + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36', + 'Referer': f'{rhost}/', + } + + def homeContent(self, filter): + result = {} + cateManual = { + "全部": "1009", + "电影": "1", + "剧集": "2", + "综艺": "6", + "动漫": "4", + "儿童": "15", + "微剧": "35", + "纪录片": "3" + } + classes = [] + filters = {} + for k in cateManual: + classes.append({ + 'type_name': k, + 'type_id': cateManual[k] + }) + 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 + return result + + def homeVideoContent(self): + data=self.fetch(f'{self.hhost}/portal/lw/v5/channel/recommend?v=13.014.21150', headers=self.headers).json() + vlist = [] + for i in data['items'][1:]: + for j in i['video'][0]['data']: + id = j.get('firstId') + pic=j.get('prevue',{}).get('image_url') or j.get('album_image_url_hover') + if id and pic: + pu=j.get('prevue',{}).get('page_url') or j.get('page_url').split('?')[0] + id = f'{id}@{self.e64(pu)}' + vlist.append({ + 'vod_id': id, + 'vod_name': j.get('display_name'), + 'vod_pic': pic, + 'vod_year': j.get('sns_score'), + 'vod_remarks': j.get('dq_updatestatus') or j.get('rank_prefix') + }) + return {'list':vlist} + + def categoryContent(self, tid, pg, filter, extend): + if pg == "1": + self.sid = '' + new_data = {'mode':'24'} + for key, value in extend.items(): + if value: + key_value_pairs = self.d64(value).split(',') + for pair in key_value_pairs: + k, v = pair.split('=') + if k in new_data: + new_data[k] += "," + v + else: + new_data[k] = v + path=f'/portal/lw/videolib/data?uid=&passport_id=&ret_num=60&version=13.014.21150&device_id={self.did}&channel_id={tid}&page_id={pg}&session={self.sid}&os=&conduit_id=&vip=0&auth&recent_selected_tag=&ad=%5B%7B%22lm%22:%225%22,%22ai%22:%225%22,%22fp%22:%226%22,%22sei%22:%22Sa867aa9d326e2bd8654d8c2a8636055e%22,%22position%22:%22library%22%7D%5D&adExt=%7B%22r%22:%221.2.1-ares6-pure%22%7D&dfp=a12f96215b2f7842a98c082799ca0c3d9236be00946701b106829754d8ece3aaf8&filter={urlencode(new_data)}' + data=self.fetch(f'{self.hhost}{path}', headers=self.headers).json() + self.sid = data['session'] + videos = [] + for i in data['data']: + id = i.get('firstId') or i.get('tv_id') + if not id: + id=i.get('play_url').split(';')[0].split('=')[-1] + if id and not i.get('h'): + id=f'{id}@{self.e64(i.get("page_url"))}' + videos.append({ + 'vod_id': id, + 'vod_name': i.get('display_name'), + 'vod_pic': i.get('album_image_url_hover'), + 'vod_year': i.get('sns_score'), + 'vod_remarks': i.get('dq_updatestatus') or i.get('pay_mark') + }) + result = {} + result['list'] = videos + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + ids = ids[0].split('@') + ids[-1] = self.d64(ids[-1]) + data = self.fetch(f'{self.dhost}/h5/mina/baidu/play/body/v1/{ids[0]}/', headers=self.headers).json() + v=data['data']['playInfo'] + vod = { + 'vod_name': v.get('albumName'), + 'type_name': v.get('tags'), + 'vod_year': v.get('albumYear'), + 'vod_remarks': v.get('updateStrategy'), + 'vod_actor': v.get('mainActors'), + 'vod_director': v.get('directors'), + 'vod_content': v.get('albumDesc'), + 'vod_play_from': '爱奇艺', + 'vod_play_url': '' + } + if data.get('data') and data['data'].get('videoList') and data['data']['videoList'].get('videos'): + purl=[f'{i["shortTitle"]}${i["pageUrl"]}' for i in data['data']['videoList']['videos']] + pg=data['data']['videoList'].get('totalPages') + if pg and pg > 1: + id = v['albumId'] + pages = list(range(2, pg + 1)) + page_results = {} + with ThreadPoolExecutor(max_workers=10) as executor: + future_to_page = { + executor.submit(self.fetch_page_data, page, id): page + for page in pages + } + for future in as_completed(future_to_page): + page = future_to_page[future] + try: + result = future.result() + page_results[page] = result + except Exception as e: + print(f"Error fetching page {page}: {e}") + for page in sorted(page_results.keys()): + purl.extend(page_results[page]) + vod['vod_play_url'] = '#'.join(purl) + else: + vdata=self.fetch(f'{self.dhost}/h5/mina/baidu/play/head/v1/{ids[0]}/', headers=self.headers).json() + v=vdata['data']['playInfo'] + vod = { + 'vod_name': v.get('shortTitle'), + 'type_name': v.get('channelName'), + 'vod_year': v.get('year'), + 'vod_remarks': v.get('focus'), + 'vod_actor': v.get('mainActors'), + 'vod_director': v.get('directors'), + 'vod_content': v.get('desc'), + 'vod_play_from': '爱奇艺', + 'vod_play_url': f'{v.get("shortTitle")}${ids[-1]}' + } + return {'list':[vod]} + + def searchContent(self, key, quick, pg="1"): + data=self.fetch(f'{self.hhost}/portal/lw/search/homePageV3?key={key}¤t_page={pg}&mode=1&source=input&suggest=&version=13.014.21150&pageNum={pg}&pageSize=25&pu=&u={self.did}&scale=150&token=&userVip=0&conduit=&vipType=-1&os=&osShortName=win10&dataType=&appMode=', headers=self.headers).json() + videos = [] + vdata=data['data']['templates'] + for i in data['data']['templates']: + if i.get('intentAlbumInfos'): + vdata=[{'albumInfo': c} for c in i['intentAlbumInfos']]+vdata + + for i in vdata: + if i.get('albumInfo') and (i['albumInfo'].get('playQipuId','') or i['albumInfo'].get('qipuId')) and i['albumInfo'].get('pageUrl'): + b=i['albumInfo'] + id=f"{(b.get('playQipuId','') or b.get('qipuId'))}@{self.e64(b.get('pageUrl'))}" + videos.append({ + 'vod_id': id, + 'vod_name': b.get('title'), + 'vod_pic': b.get('img'), + 'vod_year': (b.get('year',{}) or {}).get('value'), + 'vod_remarks': b.get('subscriptContent') or b.get('channel') or b.get('vipTips') + }) + return {'list':videos,'page':pg} + + def playerContent(self, flag, id, vipFlags): + return {'jx':1,'parse': 1, 'url': id, 'header': ''} + + def localProxy(self, param): + pass + + def fetch_page_data(self, page, id): + try: + url = f'{self.dhost}/h5/mina/avlist/{page}/{id}/' + data = self.fetch(url, headers=self.headers).json() + return [f'{i["shortTitle"]}${i["pageUrl"]}' for i in data['data']['videoList']['videos']] + except: + return [] + + def getf(self,body): + data=self.fetch(f'{self.hhost}/portal/lw/videolib/tag?channel_id={body["type_id"]}&tagAdd=&selected_tag_name=&version=13.014.21150&device={self.did}&uid=', headers=self.headers).json() + ft = [] + # for i in data[:-1]: + for i in data: + try: + value_array = [{"n": value['text'], "v": self.e64(value['tag_param'])} for value in i['tags'] if + value.get('tag_param')] + ft.append({"key": i['group'], "name": i['group'], "value": value_array}) + except: + print(i) + return (body['type_id'], ft) + + 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: str): + 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 random_str(self,length=16): + hex_chars = '0123456789abcdef' + return ''.join(random.choice(hex_chars) for _ in range(length)) diff --git a/py/爱瓜TVAPP.py b/py/爱瓜TVAPP.py new file mode 100644 index 0000000..5432413 --- /dev/null +++ b/py/爱瓜TVAPP.py @@ -0,0 +1,165 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +# 温馨提示:搜索只能搜拼音联想 +import sys +import time +import uuid +from Crypto.Hash import MD5 +sys.path.append('..') +from base.spider import Spider + + +class Spider(Spider): + + def init(self, extend=""): + self.uid = self.getuid() + self.token, self.code = self.getuserinfo() + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + host = 'https://tvapi211.magicetech.com' + + headers = {'User-Agent': 'okhttp/3.11.0'} + + def homeContent(self, filter): + body = {'token': self.token, 'authcode': self.code} + data = self.post(f'{self.host}/hr_1_1_0/apptvapi/web/index.php/video/filter-header', json=self.getbody(body), + headers=self.headers).json() + result = {} + classes = [] + filters = {} + for k in data['data']: + classes.append({ + 'type_name': k['channel_name'], + 'type_id': str(k['channel_id']), + }) + filters[str(k['channel_id'])] = [] + for i in k['search_box']: + if len(i['list']): + filters[str(k['channel_id'])].append({ + 'key': i['field'], + 'name': i['label'], + 'value': [{'n': j['display'], 'v': str(j['value'])} for j in i['list'] if j['value']] + }) + result['class'] = classes + result['filters'] = filters + return result + + def homeVideoContent(self): + body = {'token': self.token, 'authcode': self.code} + data = self.post(f'{self.host}/hr_1_1_0/apptvapi/web/index.php/video/index-tv', json=self.getbody(body), + headers=self.headers).json() + return {'list': self.getlist(data['data'][0]['banner'])} + + def categoryContent(self, tid, pg, filter, extend): + body = {'token': self.token, 'authcode': self.code, 'channel_id': tid, 'area': extend.get('area', '0'), + 'year': extend.get('year', '0'), 'sort': extend.get('sort', '0'), 'tag': extend.get('tag', 'hot'), + 'status': extend.get('status', '0'), 'page_num': pg, 'page_size': '24'} + data = self.post(f'{self.host}/hr_1_1_0/apptvapi/web/index.php/video/filter-video', json=self.getbody(body), + headers=self.headers).json() + result = {} + result['list'] = self.getlist(data['data']['list']) + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + ids = ids[0].split('@') + body = {'token': self.token, 'authcode': self.code, 'channel_id': ids[0], 'video_id': ids[1]} + data = self.post(f'{self.host}/hr_1_1_0/apptvapi/web/index.php/video/detail', json=self.getbody(body), + headers=self.headers).json() + vdata = {} + for k in data['data']['chapters']: + i = k['sourcelist'] + for j in i: + if j['source_name'] not in vdata: vdata[j['source_name']] = [] + vdata[j['source_name']].append(f"{k['title']}${j['source_url']}") + plist, names = [], [] + for key, value in vdata.items(): + names.append(key) + plist.append('#'.join(value)) + vod = { + 'vod_play_from': '$$$'.join(names), + 'vod_play_url': '$$$'.join(plist), + } + return {'list': [vod]} + + def searchContent(self, key, quick, pg="1"): + body = {'token': self.token, 'authcode': self.code, 'keyword': key, 'page_num': pg} + data = self.post(f'{self.host}/hr_1_1_0/apptvapi/web/index.php/search/letter-result', json=self.getbody(body), + headers=self.headers).json() + return {'list': self.getlist(data['data']['list'])} + + def playerContent(self, flag, id, vipFlags): + # https://rysp.tv + # https://aigua.tv + result = { + "parse": 0, + "url": "id", + "header": { + "User-Agent": "Dalvik/2.1.0 (Linux; U; Android 11; M2012K10C Build/RP1A.200720.011)", + "Origin": "https://aigua.tv", + "Referer": "https://aigua.tv/" + } + } + return result + + def localProxy(self, param): + pass + + def getuserinfo(self): + data = self.post(f'{self.host}/hr_1_1_0/apptvapi/web/index.php/user/auth-login', json=self.getbody(), + headers=self.headers).json() + v = data['data'] + return v['user_token'], v['authcode'] + + def getuid(self): + uid = self.getCache('uid') + if not uid: + uid = str(uuid.uuid4()) + self.setCache('uid', uid) + return uid + + def getbody(self, json_data=None): + if json_data is None: json_data = {} + params = {"product": "4", "ver": "1.1.0", "debug": "1", "appId": "1", "osType": "3", "marketChannel": "tv", + "sysVer": "11", "time": str(int(time.time())), "packageName": "com.gzsptv.gztvvideo", + "udid": self.uid, } + json_data.update(params) + sorted_json = dict(sorted(json_data.items(), key=lambda item: item[0])) + text = '&'.join(f"{k}={v}" for k, v in sorted_json.items() if v != '') + md5_hash = self.md5(f"jI7POOBbmiUZ0lmi{text}D9ShYdN51ksWptpkTu11yenAJu7Zu3cR").upper() + json_data.update({'sign': md5_hash}) + return json_data + + def md5(self, text): + h = MD5.new() + h.update(text.encode('utf-8')) + return h.hexdigest() + + def getlist(self, data): + videos = [] + for i in data: + if type(i.get('video')) == dict: i = i['video'] + videos.append({ + 'vod_id': f"{i.get('channel_id')}@{i.get('video_id')}", + 'vod_name': i.get('video_name'), + 'vod_pic': i.get('cover'), + 'vod_year': i.get('score'), + 'vod_remarks': i.get('flag'), + }) + return videos + diff --git a/py/爱瓜影视.py b/py/爱瓜影视.py new file mode 100644 index 0000000..e3b1e51 --- /dev/null +++ b/py/爱瓜影视.py @@ -0,0 +1,166 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +# 温馨提示:搜索只能搜拼音联想 +# 播放需要挂代理 +import sys +import time +import uuid +from Crypto.Hash import MD5 +sys.path.append('..') +from base.spider import Spider + + +class Spider(Spider): + + def init(self, extend=""): + self.uid = self.getuid() + self.token, self.code = self.getuserinfo() + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + host = 'https://tvapi211.magicetech.com' + + headers = {'User-Agent': 'okhttp/3.11.0'} + + def homeContent(self, filter): + body = {'token': self.token, 'authcode': self.code} + data = self.post(f'{self.host}/hr_1_1_0/apptvapi/web/index.php/video/filter-header', json=self.getbody(body), + headers=self.headers).json() + result = {} + classes = [] + filters = {} + for k in data['data']: + classes.append({ + 'type_name': k['channel_name'], + 'type_id': str(k['channel_id']), + }) + filters[str(k['channel_id'])] = [] + for i in k['search_box']: + if len(i['list']): + filters[str(k['channel_id'])].append({ + 'key': i['field'], + 'name': i['label'], + 'value': [{'n': j['display'], 'v': str(j['value'])} for j in i['list'] if j['value']] + }) + result['class'] = classes + result['filters'] = filters + return result + + def homeVideoContent(self): + body = {'token': self.token, 'authcode': self.code} + data = self.post(f'{self.host}/hr_1_1_0/apptvapi/web/index.php/video/index-tv', json=self.getbody(body), + headers=self.headers).json() + return {'list': self.getlist(data['data'][0]['banner'])} + + def categoryContent(self, tid, pg, filter, extend): + body = {'token': self.token, 'authcode': self.code, 'channel_id': tid, 'area': extend.get('area', '0'), + 'year': extend.get('year', '0'), 'sort': extend.get('sort', '0'), 'tag': extend.get('tag', 'hot'), + 'status': extend.get('status', '0'), 'page_num': pg, 'page_size': '24'} + data = self.post(f'{self.host}/hr_1_1_0/apptvapi/web/index.php/video/filter-video', json=self.getbody(body), + headers=self.headers).json() + result = {} + result['list'] = self.getlist(data['data']['list']) + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + ids = ids[0].split('@') + body = {'token': self.token, 'authcode': self.code, 'channel_id': ids[0], 'video_id': ids[1]} + data = self.post(f'{self.host}/hr_1_1_0/apptvapi/web/index.php/video/detail', json=self.getbody(body), + headers=self.headers).json() + vdata = {} + for k in data['data']['chapters']: + i = k['sourcelist'] + for j in i: + if j['source_name'] not in vdata: vdata[j['source_name']] = [] + vdata[j['source_name']].append(f"{k['title']}${j['source_url']}") + plist, names = [], [] + for key, value in vdata.items(): + names.append(key) + plist.append('#'.join(value)) + vod = { + 'vod_play_from': '$$$'.join(names), + 'vod_play_url': '$$$'.join(plist), + } + return {'list': [vod]} + + def searchContent(self, key, quick, pg="1"): + body = {'token': self.token, 'authcode': self.code, 'keyword': key, 'page_num': pg} + data = self.post(f'{self.host}/hr_1_1_0/apptvapi/web/index.php/search/letter-result', json=self.getbody(body), + headers=self.headers).json() + return {'list': self.getlist(data['data']['list'])} + + def playerContent(self, flag, id, vipFlags): + # https://rysp.tv + # https://aigua.tv + result = { + "parse": 0, + "url": id, + "header": { + "User-Agent": "Dalvik/2.1.0 (Linux; U; Android 11; M2012K10C Build/RP1A.200720.011)", + "Origin": "https://aigua.tv", + "Referer": "https://aigua.tv/" + } + } + return result + + def localProxy(self, param): + pass + + def getuserinfo(self): + data = self.post(f'{self.host}/hr_1_1_0/apptvapi/web/index.php/user/auth-login', json=self.getbody(), + headers=self.headers).json() + v = data['data'] + return v['user_token'], v['authcode'] + + def getuid(self): + uid = self.getCache('uid') + if not uid: + uid = str(uuid.uuid4()) + self.setCache('uid', uid) + return uid + + def getbody(self, json_data=None): + if json_data is None: json_data = {} + params = {"product": "4", "ver": "1.1.0", "debug": "1", "appId": "1", "osType": "3", "marketChannel": "tv", + "sysVer": "11", "time": str(int(time.time())), "packageName": "com.gzsptv.gztvvideo", + "udid": self.uid, } + json_data.update(params) + sorted_json = dict(sorted(json_data.items(), key=lambda item: item[0])) + text = '&'.join(f"{k}={v}" for k, v in sorted_json.items() if v != '') + md5_hash = self.md5(f"jI7POOBbmiUZ0lmi{text}D9ShYdN51ksWptpkTu11yenAJu7Zu3cR").upper() + json_data.update({'sign': md5_hash}) + return json_data + + def md5(self, text): + h = MD5.new() + h.update(text.encode('utf-8')) + return h.hexdigest() + + def getlist(self, data): + videos = [] + for i in data: + if type(i.get('video')) == dict: i = i['video'] + videos.append({ + 'vod_id': f"{i.get('channel_id')}@{i.get('video_id')}", + 'vod_name': i.get('video_name'), + 'vod_pic': i.get('cover'), + 'vod_year': i.get('score'), + 'vod_remarks': i.get('flag'), + }) + return videos + diff --git a/py/爱看短剧.py b/py/爱看短剧.py new file mode 100644 index 0000000..638f407 --- /dev/null +++ b/py/爱看短剧.py @@ -0,0 +1,314 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import base64 +import binascii +import json +import random +import sys +import time +import uuid +from base64 import b64decode, b64encode +from Crypto.Cipher import AES +from Crypto.Hash import MD5 +from Crypto.Util.Padding import unpad, pad +sys.path.append('..') +from base.spider import Spider + + +class Spider(Spider): + + def init(self, extend=""): + self.ut = False + # self.did, self.ntid =self.getdid() + self.did, self.ntid = 'e59eb2465f61b9ca','65a0de19b3a2ec93fa479ad6' + self.token, self.uid = self.gettoken() + self.phost, self.phz,self.mphost=self.getpic() + # self.phost, self.phz,self.mphost = ('https://dbtp.tgydy.com','.log','https://dplay.nbzsmc.com') + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + host='http://192.151.245.34:8089' + + def md5(self, text): + h = MD5.new() + h.update(text.encode('utf-8')) + return h.hexdigest() + + def uuid(self): + return str(uuid.uuid4()) + + def getdid(self): + did = self.random_str(16) + ntid = self.random_str(24) + return did, ntid + # try: + # if self.getCache('did'): + # return self.getCache('did'), self.getCache('ntid') + # else: + # self.setCache('did', did) + # self.setCache('ntid', ntid) + # return did, ntid + # except Exception as e: + # self.setCache('did', did) + # self.setCache('ntid', ntid) + # return did, ntid + + def aes(self, text, bool=True): + key = b64decode('c0k4N1RfKTY1U1cjJERFRA==') + iv = b64decode('VzIjQWRDVkdZSGFzSEdEVA==') + if bool: + cipher = AES.new(key, AES.MODE_CBC, iv) + ct_bytes = cipher.encrypt(pad(text.encode("utf-8"), AES.block_size)) + ct = b64encode(ct_bytes).decode("utf-8") + return ct + else: + cipher = AES.new(key, AES.MODE_CBC, iv) + pt = unpad(cipher.decrypt(b64decode(text)), AES.block_size) + ptt=json.loads(pt.decode("utf-8")) + return ptt + + def random_str(self,length=24): + hex_chars = '0123456789abcdef' + return ''.join(random.choice(hex_chars) for _ in range(length)) + + def gettoken(self): + params={"deviceId":self.did,"deviceModel":"8848钛晶手机","devicePlatform":"1","tenantId":self.ntid} + data=self.getdata('/supports/anonyLogin',params) + self.ut=True + return data['data']['token'], data['data']['userId'] + + def getdata(self,path,params=None): + t = int(time.time()*1000) + n=self.md5(f'{self.uuid()}{t}') + if params: + ct=self.aes(json.dumps(params)) + else: + ct=f'{t}{n}' + s=self.md5(f'{ct}8j@78m.367HGDF') + headers = { + 'User-Agent': 'okhttp-okgo/jeasonlzy', + 'Connection': 'Keep-Alive', + 'Accept-Language': 'zh-CN,zh;q=0.8', + 'tenantId': self.ntid, + 'n': n, + 't': str(int(t/1000)), + 's': s, + } + if self.ut: + headers['ta-token'] = self.token + headers['userId'] = self.uid + if params: + params={'ct':ct} + response = self.post(f'{self.host}{path}', headers=headers, json=params).text + else: + response = self.fetch(f'{self.host}{path}', headers=headers).text + data=self.aes(response[1:-1],False) + return data + + def getpic(self): + try: + at = int(time.time() * 1000) + t=str(int(at/ 1000)) + n = self.md5(f'{self.uuid()}{at}') + headers = { + 'Host': '192.151.245.34:8089', + 'User-Agent': 'okhttp-okgo/jeasonlzy', + 'Connection': 'Keep-Alive', + 'Accept-Language': 'zh-CN,zh;q=0.8', + 'tenantId': self.ntid, + 'userId': self.uid, + 'ta-token': self.token, + 'n': n, + 't': t, + 's': self.md5(f'{t}{n}8j@78m.367HGDF') + } + params = { + 'tenantId': self.ntid, + } + response = self.fetch(f'{self.host}/supports/configs', params=params, headers=headers).text + data=self.aes(response[1:-1],False) + config = { + 'image_cdn': '', + 'image_cdn_path': '', + 'cdn-domain': '' + } + for item in data.get('data', []): + name = item.get('name') + records = item.get('records', []) + + if name in config and records: + value = records[0].get('value', '') + if name == 'cdn-domain': + value = value.split('#')[0] + config[name] = value + + return config['image_cdn'], config['image_cdn_path'], config['cdn-domain'] + + except Exception as e: + print(f"Error in getpic: {e}") + return 'https://dbtp.tgydy.com', '.log', 'https://dplay.nbzsmc.com' + + def getlist(self,data): + vod=[] + for i in data: + vod.append({ + 'vod_id': f'{i.get("movieId")}@{i.get("entryNum")}', + 'vod_name': i.get('title'), + 'vod_pic': f'{self.getProxyUrl()}&path={i.get("thumbnail")}', + 'vod_year': i.get('score'), + 'vod_remarks': f'{i.get("entryNum")}集' + }) + return vod + + def homeContent(self, filter): + data=self.getdata('/movies/classifies') + result = {} + cateManual = { + "榜单": "ranking/getTodayHotRank", + "专辑": "getTMovieFolderPage", + "剧场": "getClassMoviePage2", + "演员": "follow/getRecommendActorPage", + } + classes = [] + for k in cateManual: + classes.append({ + 'type_name': k, + 'type_id': cateManual[k] + }) + filters = {} + if data.get('data'): + filters["getClassMoviePage2"] = [ + { + "key": "type", + "name": "分类", + "value": [ + {"n": item["name"], "v": item["classifyId"]} + for item in data["data"] + ] + } + ] + filters["ranking/getTodayHotRank"] = [ + { + "key": "type", + "name": "榜单", + "value": [ + {"n": "播放榜", "v": "getWeekHotPlayRank"}, + {"n": "高赞榜", "v": "getWeekStarRank"}, + {"n": "追剧榜", "v": "getSubTMoviePage"}, + {"n": "高分榜", "v": "ranking/getScoreRank"} + ] + } + ] + filters["follow/getRecommendActorPage"] = [ + { + "key": "type", + "name": "性别", + "value": [ + {"n": "男", "v": "0"}, + {"n": "女", "v": "1"} + ] + } + ] + result['class'] = classes + result['filters'] = filters + return result + + def homeVideoContent(self): + params = {"pageNo":"1","pageSize":"30","platform":"1","deviceId":self.did,"tenantId":self.ntid} + data=self.getdata('/news/getRecommendTMoviePage',params) + vod=self.getlist(data['data']['records']) + return {'list':vod} + + def categoryContent(self, tid, pg, filter, extend): + params={} + path = f'/news/{tid}' + if tid=='getClassMoviePage2': + parama={"pageNo":pg,"pageSize":"30","orderFlag":"0","haveActor":"-1","classifyId":extend.get('type','-1'),"tagId":""} + elif 'rank' in tid: + path=f'/news/{extend.get("type") or tid}' + parama={"pageNo":pg,"pageSize":"30"} + elif 'follow' in tid: + parama={"pageNo":pg,"pageSize":"20"} + if extend.get('type'): + path=f'/news/getActorPage' + parama={"pageNo":pg,"pageSize":"50","sex":extend.get('type')} + elif tid=='getTMovieFolderPage': + parama={"pageNo":pg,"pageSize":"20"} + elif '@' in tid: + path='/news/getActorTMoviePage' + parama={"id":tid.split('@')[0],"pageNo":pg,"pageSize":"30"} + params['platform'] = '1' + params['deviceId'] = self.did + params['tenantId'] = self.ntid + data=self.getdata(path,parama) + vods=[] + if 'follow' in tid: + for i in data['data']['records']: + vods.append({ + 'vod_id': f'{i.get("id")}@', + 'vod_name': i.get('name'), + 'vod_pic': i.get('avatar'), + 'vod_tag': 'folder', + 'vod_remarks': f'作品{i.get("movieNum")}', + 'style': {"type": "oval"} + }) + else: + vdata=data['data']['records'] + if tid=='getTMovieFolderPage': + vdata=[j for i in data['data']['records'] for j in i['movieList']] + vods=self.getlist(vdata) + result = {} + result['list'] = vods + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + ids=ids[0].split('@') + params = {"pageNo": "1", "pageSize": ids[1], "movieId": ids[0], "platform": "1", "deviceId": self.did, "tenantId": self.ntid} + data = self.getdata('/news/getEntryPage', params) + print(data) + plist=[f'第{i.get("entryNum")}集${i.get("mp4PlayAddress") or i.get("playAddress")}' for i in data['data']['records']] + vod = { + 'vod_play_from': '爱看短剧', + 'vod_play_url': '#'.join(plist), + } + return {'list':[vod]} + + def searchContent(self, key, quick, pg="1"): + params = {"pageNo": pg, "pageSize": "20", "keyWord": key, "orderFlag": "0", "platform": "1", "deviceId": self.did, "tenantId": self.ntid} + data = self.getdata('/news/searchTMoviePage', params) + vod = self.getlist(data['data']['records']) + return {'list':vod,'page':pg} + + def playerContent(self, flag, id, vipFlags): + return {'parse': 0, 'url': f'{self.mphost}{id}', 'header': {'User-Agent':'Dalvik/2.1.0 (Linux; U; Android 11; M2012K10C Build/RP1A.200720.011)'}} + + def localProxy(self, param): + type=param.get('path').split('.')[-1] + data=self.fetch(f'{self.phost}{param.get("path")}{self.phz}',headers={'User-Agent':'Dalvik/2.1.0 (Linux; U; Android 11; M2012K10C Build/RP1A.200720.011)'}) + def decrypt(encrypted_text): + try: + key = base64.urlsafe_b64decode("iM41VipvCFtToAFFRExEXw==") + iv = base64.urlsafe_b64decode("0AXRTXzmMSrlRSemWb4sVQ==") + cipher = AES.new(key, AES.MODE_CBC, iv) + decrypted_padded = cipher.decrypt(encrypted_text) + decrypted_data = unpad(decrypted_padded, AES.block_size) + return decrypted_data + except (binascii.Error, ValueError): + return None + return [200, f'image/{type}', decrypt(data.content)] + diff --git a/py/猎手影视.py b/py/猎手影视.py new file mode 100644 index 0000000..1a6a4d7 --- /dev/null +++ b/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/py/球球.py b/py/球球.py new file mode 100644 index 0000000..ffcd9c0 --- /dev/null +++ b/py/球球.py @@ -0,0 +1,330 @@ +# 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 binascii +import requests +import base64 +import json +import time +import sys +import re +import os + +sys.path.append('..') + +xurl = "https://kzb29rda.com" + +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' + } + +pm = '' + +class Spider(Spider): + global xurl + 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": "82", "type_name": "英超"}, + {"type_id": "120", "type_name": "西甲"}, + {"type_id": "129", "type_name": "德甲"}, + {"type_id": "108", "type_name": "意甲"}, + {"type_id": "142", "type_name": "法甲"}, + {"type_id": "46", "type_name": "欧冠"}, + {"type_id": "542", "type_name": "中超"}, + {"type_id": "567", "type_name": "日职联"}, + {"type_id": "590", "type_name": "澳超"}, + {"type_id": "83", "type_name": "英冠"}, + {"type_id": "457", "type_name": "美职业"}, + {"type_id": "543", "type_name": "中甲"}, + {"type_id": "168", "type_name": "荷甲"}, + {"type_id": "581", "type_name": "韩K联"}, + {"type_id": "465", "type_name": "墨西超"}, + {"type_id": "546", "type_name": "中女超"}, + {"type_id": "568", "type_name": "日职乙"}, + {"type_id": "575", "type_name": "日联杯"}, + {"type_id": "614", "type_name": "沙特联"}, + {"type_id": "629", "type_name": "阿联酋杯"}, + {"type_id": "238", "type_name": "俄超"}, + {"type_id": "151", "type_name": "葡超"}, + {"type_id": "209", "type_name": "丹麦超"}, + {"type_id": "121", "type_name": "西乙"}, + {"type_id": "1722", "type_name": "牙买超"}, + {"type_id": "34", "type_name": "国际友谊"}, + {"type_id": "2115", "type_name": "墨女超"}, + {"type_id": "130", "type_name": "德乙"}, + {"type_id": "1788", "type_name": "印尼甲"}, + {"type_id": "462", "type_name": "智利甲"}, + {"type_id": "143", "type_name": "法乙"}, + {"type_id": "466", "type_name": "墨西甲"}, + {"type_id": "592", "type_name": "澳维超"}, + {"type_id": "475", "type_name": "哥伦甲"}, + {"type_id": "589", "type_name": "韩国杯"}, + {"type_id": "586", "type_name": "韩女联"}, + {"type_id": "582", "type_name": "韩K2联"}, + {"type_id": "461", "type_name": "美公开赛"}, + {"type_id": "315", "type_name": "土超"}, + {"type_id": "429", "type_name": "阿甲"}, + {"type_id": "602", "type_name": "澳女联"}, + {"type_id": "316", "type_name": "土甲"}, + {"type_id": "97", "type_name": "英乙U21"}, + {"type_id": "332", "type_name": "保甲"}, + {"type_id": "55", "type_name": "欧女冠"}, + {"type_id": "84", "type_name": "英甲"}, + {"type_id": "169", "type_name": "荷乙"}], + } + + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, cid, pg, filter, ext): + result = {} + videos = [] + + current_timestamp = int(datetime.now().timestamp()) + dt_object = datetime.fromtimestamp(current_timestamp) + formatted_date = dt_object.strftime('%Y-%m-%d') + + url = f'{xurl}/prod-api/match/list/new?isfanye=1&type=1&cid={cid}&ishot=-1&pn=1&ps=20&level=&name=&langtype=zh&starttime={formatted_date}&pid=4&zoneId=Asia%2FShanghai&zhuboType=0' + + detail = requests.get(url=url, headers=headerx) + detail.encoding = "utf-8" + if detail.status_code == 200: + data = detail.json() + + js = data['data']['dataList'] + + for vod in js: + + nameq = vod['hteam_name'] + nameh = vod['ateam_name'] + name = nameq + ' - ' + nameh + + id = vod['id'] + + pic = vod['ateam_logo'] + + zhuangtai = vod['status_up_name'] + zhuangtai = zhuangtai.replace('完场', '回看') + shijian = vod['matchtime'] + bifen = vod['score'] + remark = zhuangtai + ' ' + shijian + ' 比分' + bifen + + video = { + "vod_id": id, + "vod_name": name, + "vod_pic": pic, + "vod_remarks": remark + } + videos.append(video) + + result = {'list': videos} + result['page'] = pg + result['pagecount'] = 1 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + global pm + did = ids[0] + result = {} + videos = [] + xianlu = '' + bofang = '' + + url = f'{xurl}/prod-api/match/detail?mid={did}&type=1&isnew=1&pid=4&langtype=zh&test=1&zoneId=Asia%2FShanghai' + detail = requests.get(url=url, headers=headerx) + detail.encoding = "utf-8" + if detail.status_code == 200: + data = detail.json() + + url = 'https://fs-im-kefu.7moor-fs1.com/ly/4d2c3f00-7d4c-11e5-af15-41bf63ae4ea0/1732707176882/jiduo.txt' + response = requests.get(url) + response.encoding = 'utf-8' + code = response.text + name = self.extract_middle_text(code, "s1='", "'", 0) + Jumps = self.extract_middle_text(code, "s2='", "'", 0) + + kaichang = data['data']['matchinfo']['matchtime'] + bifen = data['data']['matchinfo']['score'] + diqun = data['data']['matchinfo']['name'] + zhuangtai = data['data']['matchinfo']['status_up_name'] + duizhanq = data['data']['matchinfo']['ateam_name'] + duizhanh = data['data']['matchinfo']['hteam_name'] + + content = '😸集多为您介绍一场' + diqun +'的比赛 参赛双方是 ' + duizhanq +' - '+ duizhanh + ' 比赛时间是 ' + kaichang + ' 现在是 ' + zhuangtai + ' 比分是 ' + bifen + ' 请勿相信任何广告 免费分享 收费死全家' + + director = data['data']['matchinfo']['name'] + + actor = duizhanq + ' - ' + duizhanh + + remarks = data['data']['matchinfo']['status_up_name'] + + year = data['data']['matchinfo']['matchtime'] + + if name not in content: + bofang = Jumps + xianlu = '1' + else: + soups = data['data']['matchinfo']['video_url'] + + if soups: + bofang = soups + xianlu = '集多回看专线' + else: + js = data['data']['matchinfo']['global_live_urls'] + + for sou in js: + + id = sou['url'] + + name = sou['name'] + + bofang = bofang + name + '$' + id + '#' + + bofang = bofang[:-1] + + xianlu = '集多现场专线' + + videos.append({ + "vod_id": did, + "vod_director": director, + "vod_actor": actor, + "vod_remarks": remarks, + "vod_year": year, + "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, page): + pass + + 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/py/甜圈短剧.py b/py/甜圈短剧.py new file mode 100644 index 0000000..40cac38 --- /dev/null +++ b/py/甜圈短剧.py @@ -0,0 +1,156 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import sys +sys.path.append('..') +from base.spider import Spider + +class Spider(Spider): + + def init(self, extend=""): + pass + + def getName(self): + return "甜圈短剧" + + def isVideoFormat(self, url): + return True + + def manualVideoCheck(self): + return False + + def destroy(self): + pass + + # 更新为新的域名 + ahost = 'https://mov.cenguigui.cn' + + headers = { + 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36', + 'sec-ch-ua-platform': '"macOS"', + 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="134", "Google Chrome";v="134"', + 'DNT': '1', + 'sec-ch-ua-mobile': '?0', + 'Sec-Fetch-Site': 'cross-site', + 'Sec-Fetch-Mode': 'no-cors', + 'Sec-Fetch-Dest': 'video', + 'Sec-Fetch-Storage-Access': 'active', + 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8', + } + + def homeContent(self, filter): + 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': '🎬 小人物'}, + {'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': '喜剧', 'type_name': '🎬 喜剧'}, + {'type_id': '剧情', 'type_name': '🎬 剧情'}]} + return result + + def homeVideoContent(self): + return [] + + def categoryContent(self, tid, pg, filter, extend): + params = { + 'classname': tid, + 'offset': str((int(pg) - 1)), + } + # 更新请求路径为 /duanju/api.php + data = self.fetch(f'{self.ahost}/duanju/api.php', params=params, headers=self.headers).json() + videos = [] + for k in data['data']: + videos.append({ + 'vod_id': k.get('book_id'), + 'vod_name': k.get('title'), + 'vod_pic': k.get('cover'), + 'vod_year': k.get('score'), + 'vod_remarks': f"{k.get('sub_title')}|{k.get('episode_cnt')}" + }) + result = {} + result['list'] = videos + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + # 更新请求路径为 /duanju/api.php + v = self.fetch(f'{self.ahost}/duanju/api.php', params={'book_id': ids[0]}, headers=self.headers).json() + vod = { + 'vod_id': ids[0], + 'vod_name': v.get('title'), + 'type_name': v.get('category'), + 'vod_year': v.get('time'), + 'vod_remarks': v.get('duration'), + 'vod_content': v.get('desc'), + 'vod_play_from': '爱看短剧', + 'vod_play_url': '#'.join([f"{i['title']}${i['video_id']}" for i in v['data']]) + } + return {'list': [vod]} + + def searchContent(self, key, quick, pg="1"): + return self.categoryContent(key, pg, True, {}) + + def playerContent(self, flag, id, vipFlags): + # 更新请求路径为 /duanju/api.php + data = self.fetch(f'{self.ahost}/duanju/api.php', params={'video_id': id}, headers=self.headers).json() + return {'parse': 0, 'url': data['data']['url'], 'header': self.headers} + + def localProxy(self, param): + pass \ No newline at end of file diff --git a/py/盘友圈.py b/py/盘友圈.py new file mode 100644 index 0000000..8b0cfba --- /dev/null +++ b/py/盘友圈.py @@ -0,0 +1,151 @@ +# coding=utf-8 +# !/usr/bin/python +import requests +from bs4 import BeautifulSoup +import re +from base.spider import Spider +import sys +import json +import os +import base64 +sys.path.append('..') +xurl='https://panyq.com' +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' +} + + + +class Spider(Spider): + global xurl2 + global xurl + global headerx + + def getName(self): + return "首页" + + def init(self, extend): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + + def homeContent(self, filter): + pass + return result + + def homeVideoContent(self): + + pass + + def categoryContent(self, cid, pg, filter, ext): + pass + + + + def detailContent(self, ids): + try: + data = json.loads(bytes.fromhex(ids[0]).decode()) + verify = requests.post(f'{xurl}/search/{data["hash"]}', + headers=self.getheader(-1), + data=json.dumps(data['data'], separators=(",", ":")).encode(), + ) + if verify.status_code == 200: + eid = data['data'][0]['eid'] + rdata = json.dumps([{"eid": eid}], separators=(",", ":")).encode() + res = requests.post(f'{xurl}/go/{eid}', headers=self.getheader(1), data=rdata) + purl = json.loads(res.text.strip().split('\n')[-1].split(":", 1)[-1])['data']['link'] + if not re.search(r'pwd=|码', purl) and data['password']: + purl = f"{purl}{'&' if '?' in purl else '?'}pwd={data['password']}" + print("获取盘链接为:", purl) + else: + raise Exception('验证失败') + vod = { + 'vod_id': '', + 'vod_name': '', + 'vod_pic': '', + 'type_name': '', + 'vod_year': '', + 'vod_area': '', + 'vod_remarks': '', + 'vod_actor': '', + 'vod_director': '', + 'vod_content': '', + 'vod_play_from': '集多网盘', + 'vod_play_url': purl + } + params = { + "do": "push", + "url": purl + } + response = requests.post("http://127.0.0.1:9978/action", data=params, headers={ + "Content-Type": "application/x-www-form-urlencoded" +}) + return {'list': [vod]} + except Exception as e: + print(e) + return {'list': []} + + def playerContent(self, flag, id, vipFlags): + pass + + def searchContentPage(self, key, quick, page='1'): + sign, sha, hash = self.getsign(key, page) + headers = self.getheader() + res = requests.get(f'{xurl}/api/search', params={'sign': sign}, headers=headers).json() + videos = [] + for i in res['data']['hits']: + ccc = [{"eid": i.get("eid"), "sha": sha, "page_num": page}] + ddd = (json.dumps({'sign': sign, 'hash': hash, 'data': ccc, 'password': i.get('password')})).encode().hex() + if i.get('group')=='quark': + pic='https://android-artworks.25pp.com/fs08/2024/12/27/7/125_d45d9de77c805e17ede25e4a2d9d3444_con.png' + elif i.get('group')=='baidu': + pic='https://is4-ssl.mzstatic.com/image/thumb/Purple126/v4/dd/45/eb/dd45eb77-d21d-92f2-c46d-979797a6be4a/AppIcon-0-0-1x_U007emarketing-0-0-0-7-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png/1024x1024bb.jpg' + else: + pic='https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg.alicdn.com%2Fbao%2Fuploaded%2Fi4%2F2213060290763%2FO1CN01joakK61HVUwob2JIJ_%21%212213060290763.jpg&refer=http%3A%2F%2Fimg.alicdn.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1757745912&t=e7b98fced3a4f092c8ef26490997b004' + videos.append({ + 'vod_id': ddd, + 'vod_name': i.get('desc').split('')[0].replace('', ""), + 'vod_pic': pic, + 'vod_remarks': i.get('group'), + }) + return {'list': videos, 'page': page} + + def searchContent(self, key, quick): + return self.searchContentPage(key, quick, '1') + + def searchContent(self, key, quick, pg): + return self.searchContentPage(key, quick, pg) + + + def getsign(self,key,pg): + headers=self.getheader() + data=json.dumps([{"cat":"all","query":key,"pageNum":int(pg),"enableSearchMusic":False,"enableSearchGame":False,"enableSearchEbook":False}],separators=(",", ":"),ensure_ascii= False).encode() + res = requests.post(xurl, headers=headers, data=data).text + hash=re.search(r'"hash",\s*"([^"]+)"', res).group(1) + sign = re.search(r'"sign":\s*"([^"]+)"', res).group(1) + sha= re.search(r'"sha":\s*"([^"]+)"', res).group(1) + return sign,sha,hash + + def getheader(self,k=0): + kes=['ecce0904d756da58b9ea5dd03da3cacea9fa29c6','4c5c1ef8a225004ce229e9afa4cc7189eed3e6fe','c4ed62e2b5a8e3212b334619f0cdbaa77fa842ff'] + headers = { + 'origin': xurl, + 'referer': f'{xurl}/', + 'next-action': kes[k], + 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="136", "Google Chrome";v="136"', + 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.7103.48 Safari/537.36', + } + return headers + 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/py/米盘搜.py b/py/米盘搜.py new file mode 100644 index 0000000..2ee4a7e --- /dev/null +++ b/py/米盘搜.py @@ -0,0 +1,173 @@ +# coding=utf-8 +# !/usr/bin/python +import requests +from bs4 import BeautifulSoup +import re +from base.spider import Spider +import sys +import json +import os +import base64 + +sys.path.append('..') +xurl = 'http://www.misoso.cc' +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' +} + + +class Spider(Spider): + global xurl + global headerx + + def getName(self): + return "米盘搜" + + def init(self, extend): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def homeContent(self, filter): + pass + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, cid, pg, filter, ext): + pass + + def detailContent(self, ids): + try: + # 解码ID获取链接信息 + data = json.loads(bytes.fromhex(ids[0]).decode()) + purl = data['url'] + + # 如果有密码且链接中不包含密码参数,则添加密码 + if data.get('password') and not re.search(r'pwd=|密码', purl): + purl = f"{purl}{'&' if '?' in purl else '?'}pwd={data['password']}" + + print("获取盘链接为:", purl) + + vod = { + 'vod_id': '', + 'vod_name': '', + 'vod_pic': '', + 'type_name': '', + 'vod_year': '', + 'vod_area': '', + 'vod_remarks': '', + 'vod_actor': '', + 'vod_director': '', + 'vod_content': '', + 'vod_play_from': '米盘搜', + 'vod_play_url': purl + } + + # 推送链接到本地服务 + params = { + "do": "push", + "url": purl + } + response = requests.post("http://127.0.0.1:9978/action", data=params, headers={ + "Content-Type": "application/x-www-form-urlencoded" + }) + + return {'list': [vod]} + except Exception as e: + print(e) + # 如果解码失败,尝试直接使用ID作为链接 + purl = ids[0] + vod = { + 'vod_id': '', + 'vod_name': '', + 'vod_pic': '', + 'type_name': '', + 'vod_year': '', + 'vod_area': '', + 'vod_remarks': '', + 'vod_actor': '', + 'vod_director': '', + 'vod_content': '', + 'vod_play_from': '米盘搜', + 'vod_play_url': purl + } + params = { + "do": "push", + "url": purl + } + response = requests.post("http://127.0.0.1:9978/action", data=params, headers={ + "Content-Type": "application/x-www-form-urlencoded" + }) + return {'list': [vod]} + + def playerContent(self, flag, id, vipFlags): + pass + + def searchContentPage(self, key, quick, page='1'): + videos = [] + data = { + "page": int(page), + "q": key, + "user": "", + "exact": False, + "format": [], + "share_time": "", + "size": 15, + "type": "", + "exclude_user": [], + "adv_params": { + "wechat_pwd": "", + "platform": "pc" + } + } + res = requests.post(f'{xurl}/v1/search/disk', json=data, headers=headerx).text + js1 = json.loads(res) + for i in js1['data']['list']: + url = i['link'] + name = i['disk_name'].replace('', "").replace('', "") + + # 根据链接类型设置不同的图标 + if 'drive.uc' in url: + pic = 'https://img1.baidu.com/it/u=2031987711,74538878&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=505' + elif 'pan.quark' in url: + pic = 'https://img2.baidu.com/it/u=1963522584,2950363542&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500' + elif 'pan.baidu' in url: + pic = 'https://bkimg.cdn.bcebos.com/pic/35a85edf8db1cb13b7bc9af2d354564e93584b7e' + else: + pic = 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg.alicdn.com%2Fbao%2Fuploaded%2Fi4%2F2213060290763%2FO1CN01joakK61HVUwob2JIJ_%21%212213060290763.jpg&refer=http%3A%2F%2Fimg.alicdn.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1757745912&t=e7b98fced3a4f092c8ef26490997b004' + + # 编码链接信息,包括URL和可能的密码 + link_data = { + "url": url, + "password": i.get('password', '') + } + vid = json.dumps(link_data).encode().hex() + + videos.append({ + 'vod_id': vid, + 'vod_name': name, + 'vod_pic': pic, + 'vod_remarks': i.get('shared_time', '') + }) + return {'list': videos, 'page': page} + + def searchContent(self, key, quick): + return self.searchContentPage(key, quick, '1') + + def searchContent(self, key, quick, pg): + return self.searchContentPage(key, quick, pg) + + 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/py/红果短剧.py b/py/红果短剧.py new file mode 100644 index 0000000..fea8d5f --- /dev/null +++ b/py/红果短剧.py @@ -0,0 +1,127 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import re +import sys +from pyquery import PyQuery as pq +sys.path.append('..') +from base.spider import Spider + +class Spider(Spider): + + def init(self, extend=""): + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + host='https://www.hongguodj.cc' + + headers = { + 'Accept': '*/*', + 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8', + 'Cache-Control': 'no-cache', + 'Connection': 'keep-alive', + 'DNT': '1', + 'Origin': host, + 'Pragma': 'no-cache', + 'Sec-Fetch-Dest': 'empty', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Site': 'cross-site', + 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36', + 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="134", "Google Chrome";v="134"', + 'sec-ch-ua-mobile': '?0', + 'sec-ch-ua-platform': '"macOS"', + } + + def homeContent(self, filter): + result = {} + classes = [] + vlist = [] + data = pq(self.fetch(self.host, headers=self.headers).text) + for i in list(data('.slip li').items())[1:]: + classes.append({ + 'type_name': i.text(), + 'type_id': re.findall(r'\d+', i('a').attr('href'))[0] + }) + for i in data('.wrap .rows').items(): + vlist.extend(self.getlist(i('li'))) + result['class'] = classes + result['list'] = vlist + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, tid, pg, filter, extend): + data=pq(self.fetch(f'{self.host}/type/{tid}-{pg}.html', headers=self.headers).text) + result = {} + result['list'] = self.getlist(data('.list ul li')) + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + data=pq(self.fetch(f'{self.host}{ids[0]}', headers=self.headers).text) + v=data('.info') + p=v('p') + vod = { + 'vod_name': v('h1').text(), + 'type_name': p.eq(2).text(), + 'vod_year': p.eq(3).text(), + 'vod_area': p.eq(4).text(), + 'vod_remarks': v('em').text(), + 'vod_actor': p.eq(0).text(), + 'vod_director': p.eq(1).text(), + 'vod_content': data('#desc .text').text(), + 'vod_play_from': '', + 'vod_play_url': '' + } + names = [i.text() for i in data('.title.slip a').items()] + plist=[] + for i in data('.play-list ul').items(): + plist.append('#'.join([f'{j("a").text()}${j("a").attr("href")}' for j in i('li').items()])) + vod['vod_play_from'] = '$$$'.join(names) + vod['vod_play_url'] = '$$$'.join(plist) + return {'list': [vod]} + + def searchContent(self, key, quick, pg="1"): + data=pq(self.fetch(f'{self.host}/search/{key}----------{pg}---.html', headers=self.headers).text) + return {'list': self.getlist(data('.show.rows li')),'page':pg} + + def playerContent(self, flag, id, vipFlags): + p=0 + uid=f'{self.host}{id}' + data=pq(self.fetch(uid, headers=self.headers).text) + url=data('.video.ratio').attr('data-play') + if not url: + url = uid + p = 1 + return {'parse': p, 'url': url, 'header': self.headers} + + def localProxy(self, param): + pass + + def getlist(self,data): + vlist = [] + for j in data.items(): + vlist.append({ + 'vod_id': j('a').attr('href'), + 'vod_name': j('img').attr('alt'), + 'vod_pic': self.host + j('img').attr('data-src'), + 'vod_year': j('.bg').text(), + 'vod_remarks': j('p').text() + }) + return vlist + + diff --git a/py/红果网页.py b/py/红果网页.py new file mode 100644 index 0000000..fea8d5f --- /dev/null +++ b/py/红果网页.py @@ -0,0 +1,127 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import re +import sys +from pyquery import PyQuery as pq +sys.path.append('..') +from base.spider import Spider + +class Spider(Spider): + + def init(self, extend=""): + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + host='https://www.hongguodj.cc' + + headers = { + 'Accept': '*/*', + 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8', + 'Cache-Control': 'no-cache', + 'Connection': 'keep-alive', + 'DNT': '1', + 'Origin': host, + 'Pragma': 'no-cache', + 'Sec-Fetch-Dest': 'empty', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Site': 'cross-site', + 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36', + 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="134", "Google Chrome";v="134"', + 'sec-ch-ua-mobile': '?0', + 'sec-ch-ua-platform': '"macOS"', + } + + def homeContent(self, filter): + result = {} + classes = [] + vlist = [] + data = pq(self.fetch(self.host, headers=self.headers).text) + for i in list(data('.slip li').items())[1:]: + classes.append({ + 'type_name': i.text(), + 'type_id': re.findall(r'\d+', i('a').attr('href'))[0] + }) + for i in data('.wrap .rows').items(): + vlist.extend(self.getlist(i('li'))) + result['class'] = classes + result['list'] = vlist + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, tid, pg, filter, extend): + data=pq(self.fetch(f'{self.host}/type/{tid}-{pg}.html', headers=self.headers).text) + result = {} + result['list'] = self.getlist(data('.list ul li')) + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + data=pq(self.fetch(f'{self.host}{ids[0]}', headers=self.headers).text) + v=data('.info') + p=v('p') + vod = { + 'vod_name': v('h1').text(), + 'type_name': p.eq(2).text(), + 'vod_year': p.eq(3).text(), + 'vod_area': p.eq(4).text(), + 'vod_remarks': v('em').text(), + 'vod_actor': p.eq(0).text(), + 'vod_director': p.eq(1).text(), + 'vod_content': data('#desc .text').text(), + 'vod_play_from': '', + 'vod_play_url': '' + } + names = [i.text() for i in data('.title.slip a').items()] + plist=[] + for i in data('.play-list ul').items(): + plist.append('#'.join([f'{j("a").text()}${j("a").attr("href")}' for j in i('li').items()])) + vod['vod_play_from'] = '$$$'.join(names) + vod['vod_play_url'] = '$$$'.join(plist) + return {'list': [vod]} + + def searchContent(self, key, quick, pg="1"): + data=pq(self.fetch(f'{self.host}/search/{key}----------{pg}---.html', headers=self.headers).text) + return {'list': self.getlist(data('.show.rows li')),'page':pg} + + def playerContent(self, flag, id, vipFlags): + p=0 + uid=f'{self.host}{id}' + data=pq(self.fetch(uid, headers=self.headers).text) + url=data('.video.ratio').attr('data-play') + if not url: + url = uid + p = 1 + return {'parse': p, 'url': url, 'header': self.headers} + + def localProxy(self, param): + pass + + def getlist(self,data): + vlist = [] + for j in data.items(): + vlist.append({ + 'vod_id': j('a').attr('href'), + 'vod_name': j('img').attr('alt'), + 'vod_pic': self.host + j('img').attr('data-src'), + 'vod_year': j('.bg').text(), + 'vod_remarks': j('p').text() + }) + return vlist + + diff --git a/py/绝对影视.py b/py/绝对影视.py new file mode 100644 index 0000000..820abf2 --- /dev/null +++ b/py/绝对影视.py @@ -0,0 +1,147 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import base64 +import re +import sys +from Crypto.Cipher import AES +from Crypto.Util.Padding import unpad +from pyquery import PyQuery as pq +sys.path.append('..') +from base.spider import Spider + + +class Spider(Spider): + + def init(self, extend=""): + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + host = 'https://www.jdys.art' + + headers = { + 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36', + 'sec-ch-ua-platform': '"macOS"', + 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="134", "Google Chrome";v="134"', + 'dnt': '1', + 'sec-ch-ua-mobile': '?0', + 'origin': host, + 'sec-fetch-site': 'cross-site', + 'sec-fetch-mode': 'cors', + 'sec-fetch-dest': 'empty', + 'referer': f'{host}/', + 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', + 'priority': 'u=1, i', + } + + def homeContent(self, filter): + data = self.getpq(self.fetch(self.host, headers=self.headers).text) + result = {} + classes = [] + for k in list(data('.navtop .navlist li').items())[:9]: + classes.append({ + 'type_name': k('a').text(), + 'type_id': k('a').attr('href'), + }) + result['class'] = classes + result['list'] = self.getlist(data('.mi_btcon .bt_img ul li')) + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, tid, pg, filter, extend): + data = self.getpq(self.fetch(f"{tid}{'' if pg == '1' else f'page/{pg}/'}", headers=self.headers).text) + result = {} + result['list'] = self.getlist(data('.mi_cont .bt_img ul li')) + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + data = self.getpq(self.fetch(ids[0], headers=self.headers).text) + data2 = data('.moviedteail_list li') + vod = { + 'vod_name': data('.dytext h1').text(), + 'type_name': data2.eq(0).text(), + 'vod_year': data2.eq(2).text(), + 'vod_area': data2.eq(1).text(), + 'vod_remarks': data2.eq(4).text(), + 'vod_actor': data2.eq(7).text(), + 'vod_director': data2.eq(5).text(), + 'vod_content': data('.yp_context').text().strip() + } + vdata = data('.paly_list_btn a') + play = [] + for i in vdata.items(): + a = i.text() + "$" + i.attr.href + play.append(a) + vod["vod_play_from"] = "在线播放" + vod["vod_play_url"] = "#".join(play) + result = {"list": [vod]} + return result + + def searchContent(self, key, quick, pg="1"): + data = self.getpq(self.fetch(f"{self.host}/page/{pg}/?s={key}", headers=self.headers).text) + return {'list': self.getlist(data('.mi_cont .bt_img ul li')), 'page': pg} + + def playerContent(self, flag, id, vipFlags): + data = self.getpq(self.fetch(id, headers=self.headers).text) + try: + sc = data('.videoplay script').eq(-1).text() + strd = re.findall(r'var\s+[^=]*=\s*"([^"]*)";', sc) + kdata = re.findall(r'parse\((.*?)\);', sc) + jm = self.aes(strd[0], kdata[0].replace('"', ''), kdata[1].replace('"', '')) + url = re.search(r'url: "(.*?)"', jm).group(1) + p = 0 + except: + p = 1 + url = id + result = {} + result["parse"] = p + result["url"] = url + result["header"] = self.headers + return result + + def localProxy(self, param): + pass + + def getpq(self, text): + try: + return pq(text) + except Exception as e: + print(f"{str(e)}") + return pq(text.encode('utf-8')) + + def getlist(self, data): + videos = [] + for i in data.items(): + videos.append({ + 'vod_id': i('a').attr('href'), + 'vod_name': i('a img').attr('alt'), + 'vod_pic': i('a img').attr('src'), + 'vod_remarks': i('.dycategory').text(), + 'vod_year': i('.dyplayinfo').text() or i('.rating').text(), + }) + return videos + + def aes(self, word, key, iv): + key = key.encode('utf-8') + iv = iv.encode('utf-8') + encrypted_data = base64.b64decode(word) + cipher = AES.new(key, AES.MODE_CBC, iv) + decrypted_data = cipher.decrypt(encrypted_data) + decrypted_data = unpad(decrypted_data, AES.block_size) + return decrypted_data.decode('utf-8') diff --git a/py/网络直播.py b/py/网络直播.py new file mode 100644 index 0000000..4e54c02 --- /dev/null +++ b/py/网络直播.py @@ -0,0 +1,767 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import json +import re +import sys +import time +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=""): + tid = 'douyin' + headers = self.gethr(0, tid) + response = requests.head(self.hosts[tid], headers=headers) + ttwid = response.cookies.get('ttwid') + headers.update({ + 'authority': self.hosts[tid].split('//')[-1], + 'cookie': f'ttwid={ttwid}' if ttwid else '' + }) + self.dyheaders = headers + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + 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 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"], + "douyin": "https://live.douyin.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", + "douyin": "https://live.douyin.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': referers['bili'], + 'user-agent': headers[0]['User-Agent'] + }, + 'douyin': { + 'User-Agent': 'libmpv', + 'Icy-MetaData': '1' + }, + 'huya': { + 'User-Agent': 'ExoPlayer', + 'Connection': 'Keep-Alive', + 'Icy-MetaData': '1' + }, + 'douyu': { + 'User-Agent': 'libmpv', + 'Icy-MetaData': '1' + } + } + + def process_bili(self): + try: + self.blfdata = self.fetch( + f'{self.hosts["bili"][0]}/room/v1/Area/getList?need_entrance=1&parent_id=0', + headers=self.gethr(0, 'bili') + ).json() + return ('bili', [{'key': 'cate', 'name': '分类', + 'value': [{'n': i['name'], 'v': str(i['id'])} + for i in self.blfdata['data']]}]) + except Exception as e: + print(f"bili处理错误: {e}") + return 'bili', None + + def process_douyin(self): + try: + data = self.getpq(self.hosts['douyin'], headers=self.dyheaders)('script') + for i in data.items(): + if 'categoryData' in i.text(): + content = i.text() + start = content.find('{') + end = content.rfind('}') + 1 + if start != -1 and end != -1: + json_str = content[start:end] + json_str = json_str.replace('\\"', '"') + try: + self.dyifdata = json.loads(json_str) + return ('douyin', [{'key': 'cate', 'name': '分类', + 'value': [{'n': i['partition']['title'], + 'v': f"{i['partition']['id_str']}@@{i['partition']['title']}"} + for i in self.dyifdata['categoryData']]}]) + except json.JSONDecodeError as e: + print(f"douyin解析错误: {e}") + return 'douyin', None + except Exception as e: + print(f"douyin请求或处理错误: {e}") + return 'douyin', None + + 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", + "抖音": "douyin", + "斗鱼": "douyu", + "网易": "wangyi" + } + classes = [] + filters = { + 'huya': [{'key': 'cate', 'name': '分类', + 'value': [{'n': '网游', 'v': '1'}, {'n': '单机', 'v': '2'}, + {'n': '娱乐', 'v': '8'}, {'n': '手游', 'v': '3'}]}] + } + + with ThreadPoolExecutor(max_workers=3) as executor: + futures = { + executor.submit(self.process_bili): 'bili', + executor.submit(self.process_douyin): 'douyin', + 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 'douyin' in tid: + vdata, pagecount = self.douyinContent(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): + if extend.get('cate') and pg == '1' and 'click' not in tid: + for i in self.blfdata['data']: + if str(i['id']) == extend['cate']: + for j in i['list']: + v = self.buildvod( + vod_id=f"click_{tid}@@{i['id']}@@{j['id']}", + vod_name=j.get('name'), + vod_pic=j.get('pic'), + vod_tag=1, + style={"type": "oval", "ratio": 1} + ) + vdata.append(v) + return vdata, 1 + else: + path = f'/xlive/web-interface/v1/second/getListByArea?platform=web&sort=online&page_size=30&page={pg}' + if 'click' in tid: + ids = tid.split('_')[1].split('@@') + tid = ids[0] + path = f'/xlive/web-interface/v1/second/getList?platform=web&parent_area_id={ids[1]}&area_id={ids[-1]}&sort_type=&page={pg}' + data = self.fetch(f'{self.hosts[tid][0]}{path}', headers=self.gethr(0, tid)).json() + for i in data['data']['list']: + if i.get('roomid'): + data = self.buildvod( + f"{tid}@@{i['roomid']}", + i.get('title'), + i.get('cover'), + i.get('watched_show', {}).get('text_large'), + 0, + i.get('uname'), + style={"type": "rect", "ratio": 1.33} + ) + vdata.append(data) + return vdata, 9999 + + 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 douyinContent(self, tid, pg, filter, extend, vdata): + if extend.get('cate') and pg == '1' and 'click' not in tid: + ids = extend.get('cate').split('@@') + for i in self.dyifdata['categoryData']: + c = i['partition'] + if c['id_str'] == ids[0] and c['title'] == ids[1]: + vlist = i['sub_partition'].copy() + vlist.insert(0, {'partition': c}) + for j in vlist: + j = j['partition'] + v = self.buildvod( + vod_id=f"click_{tid}@@{j['id_str']}@@{j['type']}", + vod_name=j.get('title'), + vod_pic='https://p3-pc-weboff.byteimg.com/tos-cn-i-9r5gewecjs/pwa_v3/512x512-1.png', + vod_tag=1, + style={"type": "oval", "ratio": 1} + ) + vdata.append(v) + return vdata, 1 + else: + path = f'/webcast/web/partition/detail/room/?aid=6383&app_name=douyin_web&live_id=1&device_platform=web&count=15&offset={(int(pg) - 1) * 15}&partition=720&partition_type=1' + if 'click' in tid: + ids = tid.split('_')[1].split('@@') + tid = ids[0] + path = f'/webcast/web/partition/detail/room/?aid=6383&app_name=douyin_web&live_id=1&device_platform=web&count=15&offset={(int(pg) - 1) * 15}&partition={ids[1]}&partition_type={ids[-1]}&req_from=2' + data = self.fetch(f'{self.hosts[tid]}{path}', headers=self.dyheaders).json() + for i in data['data']['data']: + v = self.buildvod( + vod_id=f"{tid}@@{i['web_rid']}", + vod_name=i['room'].get('title'), + vod_pic=i['room']['cover'].get('url_list')[0], + vod_year=i.get('user_count_str'), + vod_remarks=i['room']['owner'].get('nickname'), + 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] == 'douyin': + vod = self.douyinDetail(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): + try: + vdata = self.fetch( + f'{self.hosts[ids[0]][0]}/xlive/web-room/v1/index/getInfoByRoom?room_id={ids[1]}&wts={int(time.time())}', + headers=self.gethr(0, ids[0])).json() + v = vdata['data']['room_info'] + vod = self.buildvod( + vod_name=v.get('title'), + type_name=v.get('parent_area_name') + '/' + v.get('area_name'), + vod_remarks=v.get('tags'), + vod_play_from=v.get('title'), + ) + data = self.fetch( + f'{self.hosts[ids[0]][0]}/xlive/web-room/v2/index/getRoomPlayInfo?room_id={ids[1]}&protocol=0%2C1&format=0%2C1%2C2&codec=0%2C1&platform=web', + headers=self.gethr(0, ids[0])).json() + vdnams = data['data']['playurl_info']['playurl']['g_qn_desc'] + all_accept_qns = [] + streams = data['data']['playurl_info']['playurl']['stream'] + for stream in streams: + for format_item in stream['format']: + for codec in format_item['codec']: + if 'accept_qn' in codec: + all_accept_qns.append(codec['accept_qn']) + max_accept_qn = max(all_accept_qns, key=len) if all_accept_qns else [] + quality_map = { + item['qn']: item['desc'] + for item in vdnams + } + quality_names = [f"{quality_map.get(qn)}${ids[0]}@@{ids[1]}@@{qn}" for qn in max_accept_qn] + vod['vod_play_url'] = "#".join(quality_names) + return vod + except Exception as e: + return self.handle_exception(e) + + def huyaDetail(self, ids): + try: + vdata = self.fetch(f'{self.hosts[ids[0]][1]}/cache.php?m=Live&do=profileRoom&roomid={ids[1]}', + headers=self.headers[0]).json() + v = vdata['data']['liveData'] + vod = self.buildvod( + vod_name=v.get('introduction'), + type_name=v.get('gameFullName'), + vod_director=v.get('nick'), + vod_remarks=v.get('contentIntro'), + ) + data = dict(reversed(list(vdata['data']['stream'].items()))) + names = [] + plist = [] + + for stream_type, stream_data in data.items(): + if isinstance(stream_data, dict) and 'multiLine' in stream_data and 'rateArray' in stream_data: + names.append(f"线路{len(names) + 1}") + qualities = sorted( + stream_data['rateArray'], + key=lambda x: (x['iBitRate'], x['sDisplayName']), + reverse=True + ) + cdn_urls = [] + for cdn in stream_data['multiLine']: + quality_urls = [] + for quality in qualities: + quality_name = quality['sDisplayName'] + bit_rate = quality['iBitRate'] + base_url = cdn['url'] + if bit_rate > 0: + if '.m3u8' in base_url: + new_url = base_url.replace( + 'ratio=2000', + f'ratio={bit_rate}' + ) + else: + new_url = base_url.replace( + 'imgplus.flv', + f'imgplus_{bit_rate}.flv' + ) + else: + new_url = base_url + quality_urls.extend([quality_name, new_url]) + encoded_urls = self.e64(json.dumps(quality_urls)) + cdn_urls.append(f"{cdn['cdnType']}${ids[0]}@@{encoded_urls}") + + if cdn_urls: + plist.append('#'.join(cdn_urls)) + vod['vod_play_from'] = "$$$".join(names) + vod['vod_play_url'] = "$$$".join(plist) + return vod + except Exception as e: + return self.handle_exception(e) + + def douyinDetail(self, ids): + url = f'{self.hosts[ids[0]]}/webcast/room/web/enter/?aid=6383&app_name=douyin_web&live_id=1&device_platform=web&enter_from=web_live&web_rid={ids[1]}&room_id_str=&enter_source=&Room-Enter-User-Login-Ab=0&is_need_double_stream=false&cookie_enabled=true&screen_width=1980&screen_height=1080&browser_language=zh-CN&browser_platform=Win32&browser_name=Edge&browser_version=125.0.0.0' + data = self.fetch(url, headers=self.dyheaders).json() + try: + vdata = data['data']['data'][0] + vod = self.buildvod( + vod_name=vdata['title'], + vod_remarks=vdata['user_count_str'], + ) + resolution_data = vdata['stream_url']['live_core_sdk_data']['pull_data']['options']['qualities'] + stream_json = vdata['stream_url']['live_core_sdk_data']['pull_data']['stream_data'] + stream_json = json.loads(stream_json) + available_types = [] + if any(sdk_key in stream_json['data'] and 'main' in stream_json['data'][sdk_key] for sdk_key in + stream_json['data']): + available_types.append('main') + if any(sdk_key in stream_json['data'] and 'backup' in stream_json['data'][sdk_key] for sdk_key in + stream_json['data']): + available_types.append('backup') + plist = [] + for line_type in available_types: + format_arrays = {'flv': [], 'hls': [], 'lls': []} + qualities = sorted(resolution_data, key=lambda x: x['level'], reverse=True) + for quality in qualities: + sdk_key = quality['sdk_key'] + if sdk_key in stream_json['data'] and line_type in stream_json['data'][sdk_key]: + stream_info = stream_json['data'][sdk_key][line_type] + if stream_info.get('flv'): + format_arrays['flv'].extend([quality['name'], stream_info['flv']]) + if stream_info.get('hls'): + format_arrays['hls'].extend([quality['name'], stream_info['hls']]) + if stream_info.get('lls'): + format_arrays['lls'].extend([quality['name'], stream_info['lls']]) + format_urls = [] + for format_name, url_array in format_arrays.items(): + if url_array: + encoded_urls = self.e64(json.dumps(url_array)) + format_urls.append(f"{format_name}${ids[0]}@@{encoded_urls}") + + if format_urls: + plist.append('#'.join(format_urls)) + + names = ['线路1', '线路2'][:len(plist)] + vod['vod_play_from'] = "$$$".join(names) + vod['vod_play_url'] = "$$$".join(plist) + return vod + + except Exception as e: + return self.handle_exception(e) + + def douyuDetail(self, ids): + headers = self.gethr(0, zr=f'{self.hosts[ids[0]]}/{ids[1]}') + try: + data = self.fetch(f'{self.hosts[ids[0]]}/betard/{ids[1]}', headers=headers).json() + vname = data['room']['room_name'] + vod = self.buildvod( + vod_name=vname, + vod_remarks=data['room'].get('second_lvl_name'), + vod_director=data['room'].get('nickname'), + ) + vdata = self.fetch(f'{self.hosts[ids[0]]}/swf_api/homeH5Enc?rids={ids[1]}', headers=headers).json() + json_body = vdata['data'] + json_body = {"html": self.douyu_text(json_body[f'room{ids[1]}']), "rid": ids[1]} + sign = self.post('http://alive.nsapps.cn/api/AllLive/DouyuSign', json=json_body, headers=self.headers[1]).json()['data'] + body = f'{sign}&cdn=&rate=-1&ver=Douyu_223061205&iar=1&ive=1&hevc=0&fa=0' + body=self.params_to_json(body) + nubdata = self.post(f'{self.hosts[ids[0]]}/lapi/live/getH5Play/{ids[1]}', data=body, headers=headers).json() + plist = [] + names = [] + for i,x in enumerate(nubdata['data']['cdnsWithName']): + names.append(f'线路{i+1}') + d = {'sign': sign, 'cdn': x['cdn'], 'id': ids[1]} + plist.append( + f'{vname}${ids[0]}@@{self.e64(json.dumps(d))}@@{self.e64(json.dumps(nubdata["data"]["multirates"]))}') + vod['vod_play_from'] = "$$$".join(names) + vod['vod_play_url'] = "$$$".join(plist) + return vod + except Exception as e: + return self.handle_exception(e) + + def douyu_text(self, text): + function_positions = [m.start() for m in re.finditer('function', text)] + total_functions = len(function_positions) + if total_functions % 2 == 0: + target_index = total_functions // 2 + 1 + else: + target_index = (total_functions - 1) // 2 + 1 + if total_functions >= target_index: + cut_position = function_positions[target_index - 1] + ctext = text[4:cut_position] + return re.sub(r'eval\(strc\)\([\w\d,]+\)', 'strc', ctext) + return text + + 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', 'douyin','huya']: + p, url = 0, json.loads(self.d64(ids[1])) + elif ids[0] == 'bili': + p, url = self.biliplay(ids) + elif ids[0] == 'huya': + p, url = 0, json.loads(self.d64(ids[1])) + 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): + try: + data = self.fetch( + f'{self.hosts[ids[0]][0]}/xlive/web-room/v2/index/getRoomPlayInfo?room_id={ids[1]}&protocol=0,1&format=0,2&codec=0&platform=web&qn={ids[2]}', + headers=self.gethr(0, ids[0])).json() + urls = [] + line_index = 1 + for stream in data['data']['playurl_info']['playurl']['stream']: + for format_item in stream['format']: + for codec in format_item['codec']: + for url_info in codec['url_info']: + full_url = f"{url_info['host']}/{codec['base_url'].lstrip('/')}{url_info['extra']}" + urls.extend([f"线路{line_index}", full_url]) + line_index += 1 + return 0, urls + except Exception as e: + return 1, self.excepturl + + def douyuplay(self, ids): + try: + sdata = json.loads(self.d64(ids[1])) + headers = self.gethr(0, zr=f'{self.hosts[ids[0]]}/{sdata["id"]}') + ldata = json.loads(self.d64(ids[2])) + result_obj = {} + with ThreadPoolExecutor(max_workers=len(ldata)) as executor: + futures = [ + executor.submit( + self.douyufp, + sdata, + quality, + headers, + self.hosts[ids[0]], + result_obj + ) for quality in ldata + ] + for future in futures: + future.result() + + result = [] + for bit in sorted(result_obj.keys(), reverse=True): + result.extend(result_obj[bit]) + + if result: + return 0, result + return 1, self.excepturl + + except Exception as e: + return 1, self.excepturl + + def douyufp(self, sdata, quality, headers, host, result_obj): + try: + body = f'{sdata["sign"]}&cdn={sdata["cdn"]}&rate={quality["rate"]}' + body=self.params_to_json(body) + data = self.post(f'{host}/lapi/live/getH5Play/{sdata["id"]}', + data=body, headers=headers).json() + if data.get('data'): + play_url = data['data']['rtmp_url'] + '/' + data['data']['rtmp_live'] + bit = quality.get('bit', 0) + if bit not in result_obj: + result_obj[bit] = [] + result_obj[bit].extend([quality['name'], play_url]) + except Exception as e: + print(f"Error fetching {quality['name']}: {str(e)}") + + 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}'} + diff --git a/py/美帕APP.py b/py/美帕APP.py new file mode 100644 index 0000000..bcb3a51 --- /dev/null +++ b/py/美帕APP.py @@ -0,0 +1,93 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import sys +sys.path.append('..') +from base.spider import Spider + + +class Spider(Spider): + def getName(self): + return "mp" + + def init(self, extend=""): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + host = 'https://g.c494.com' + + header = { + 'User-Agent': 'Dart/2.10 (dart:io)', + 'platform_version': 'RP1A.200720.011', + 'version': '2.2.3', + 'copyright': 'xiaogui', + 'platform': 'android', + 'client_name': '576O5p+P5b2x6KeG', + } + + def homeContent(self, filter): + data = self.fetch(f'{self.host}/api.php/app/nav?token=', headers=self.header).json() + dy = {"class": "类型", "area": "地区", "lang": "语言", "year": "年份", "letter": "字母", "by": "排序", + "sort": "排序"} + filters = {} + classes = [] + json_data = data["list"] + for item in json_data: + has_non_empty_field = False + jsontype_extend = item["type_extend"] + classes.append({"type_name": item["type_name"], "type_id": str(item["type_id"])}) + for key in dy: + if key in jsontype_extend and jsontype_extend[key].strip() != "": + has_non_empty_field = True + break + if has_non_empty_field: + filters[str(item["type_id"])] = [] + for dkey in jsontype_extend: + if dkey in dy and jsontype_extend[dkey].strip() != "": + values = jsontype_extend[dkey].split(",") + value_array = [{"n": value.strip(), "v": value.strip()} for value in values if + value.strip() != ""] + filters[str(item["type_id"])].append({"key": dkey, "name": dy[dkey], "value": value_array}) + result = {} + result["class"] = classes + result["filters"] = filters + return result + + def homeVideoContent(self): + rsp = self.fetch(f"{self.host}/api.php/app/index_video?token=", headers=self.header) + root = rsp.json()['list'] + videos = [item for vodd in root for item in vodd['vlist']] + return {'list': videos} + + def categoryContent(self, tid, pg, filter, extend): + parms = {"pg": pg, "tid": tid, "class": extend.get("class", ""), "area": extend.get("area", ""), + "lang": extend.get("lang", ""), "year": extend.get("year", ""), "token": ""} + data = self.fetch(f'{self.host}/api.php/app/video', params=parms, headers=self.header).json() + return data + + def detailContent(self, ids): + parms = {"id": ids[0], "token": ""} + data = self.fetch(f'{self.host}/api.php/app/video_detail', params=parms, headers=self.header).json() + vod = data['data'] + vod.pop('pause_advert_list', None) + vod.pop('init_advert_list', None) + vod.pop('vod_url_with_player', None) + return {"list": [vod]} + + def searchContent(self, key, quick, pg='1'): + parms = {'pg': pg, 'text': key, 'token': ''} + data = self.fetch(f'{self.host}/api.php/app/search', params=parms, headers=self.header).json() + return data + + def playerContent(self, flag, id, vipFlags): + return {"parse": 0, "url": id, "header": {'User-Agent': 'User-Agent: Lavf/58.12.100'}} + + def localProxy(self, param): + pass diff --git a/py/美帕影视.py b/py/美帕影视.py new file mode 100644 index 0000000..bcb3a51 --- /dev/null +++ b/py/美帕影视.py @@ -0,0 +1,93 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import sys +sys.path.append('..') +from base.spider import Spider + + +class Spider(Spider): + def getName(self): + return "mp" + + def init(self, extend=""): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + host = 'https://g.c494.com' + + header = { + 'User-Agent': 'Dart/2.10 (dart:io)', + 'platform_version': 'RP1A.200720.011', + 'version': '2.2.3', + 'copyright': 'xiaogui', + 'platform': 'android', + 'client_name': '576O5p+P5b2x6KeG', + } + + def homeContent(self, filter): + data = self.fetch(f'{self.host}/api.php/app/nav?token=', headers=self.header).json() + dy = {"class": "类型", "area": "地区", "lang": "语言", "year": "年份", "letter": "字母", "by": "排序", + "sort": "排序"} + filters = {} + classes = [] + json_data = data["list"] + for item in json_data: + has_non_empty_field = False + jsontype_extend = item["type_extend"] + classes.append({"type_name": item["type_name"], "type_id": str(item["type_id"])}) + for key in dy: + if key in jsontype_extend and jsontype_extend[key].strip() != "": + has_non_empty_field = True + break + if has_non_empty_field: + filters[str(item["type_id"])] = [] + for dkey in jsontype_extend: + if dkey in dy and jsontype_extend[dkey].strip() != "": + values = jsontype_extend[dkey].split(",") + value_array = [{"n": value.strip(), "v": value.strip()} for value in values if + value.strip() != ""] + filters[str(item["type_id"])].append({"key": dkey, "name": dy[dkey], "value": value_array}) + result = {} + result["class"] = classes + result["filters"] = filters + return result + + def homeVideoContent(self): + rsp = self.fetch(f"{self.host}/api.php/app/index_video?token=", headers=self.header) + root = rsp.json()['list'] + videos = [item for vodd in root for item in vodd['vlist']] + return {'list': videos} + + def categoryContent(self, tid, pg, filter, extend): + parms = {"pg": pg, "tid": tid, "class": extend.get("class", ""), "area": extend.get("area", ""), + "lang": extend.get("lang", ""), "year": extend.get("year", ""), "token": ""} + data = self.fetch(f'{self.host}/api.php/app/video', params=parms, headers=self.header).json() + return data + + def detailContent(self, ids): + parms = {"id": ids[0], "token": ""} + data = self.fetch(f'{self.host}/api.php/app/video_detail', params=parms, headers=self.header).json() + vod = data['data'] + vod.pop('pause_advert_list', None) + vod.pop('init_advert_list', None) + vod.pop('vod_url_with_player', None) + return {"list": [vod]} + + def searchContent(self, key, quick, pg='1'): + parms = {'pg': pg, 'text': key, 'token': ''} + data = self.fetch(f'{self.host}/api.php/app/search', params=parms, headers=self.header).json() + return data + + def playerContent(self, flag, id, vipFlags): + return {"parse": 0, "url": id, "header": {'User-Agent': 'User-Agent: Lavf/58.12.100'}} + + def localProxy(self, param): + pass diff --git a/py/胖虎APP.py b/py/胖虎APP.py new file mode 100644 index 0000000..a76035f --- /dev/null +++ b/py/胖虎APP.py @@ -0,0 +1,215 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import re +import sys +sys.path.append('..') +from base.spider import Spider +from Cryptodome.Cipher import AES +from Cryptodome.Util.Padding import pad, unpad +from base64 import b64encode, b64decode +import json +import time + + +class Spider(Spider): + def getName(self): + return "py_胖虎" + + def init(self, extend=""): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + def aes(self, operation, text): + key = "ihIwTbt2YAe9TGea".encode('utf-8') + iv = key + + if operation == 'encrypt': + cipher = AES.new(key, AES.MODE_CBC, iv) + ct_bytes = cipher.encrypt(pad(text.encode('utf-8'), AES.block_size)) + ct = b64encode(ct_bytes).decode('utf-8') + return ct + elif operation == 'decrypt': + cipher = AES.new(key, AES.MODE_CBC, iv) + pt = unpad(cipher.decrypt(b64decode(text)), AES.block_size) + return pt.decode('utf-8') + + host = "http://sm.physkan.top:3389" + t = str(int(time.time())) + + def homeContent(self, filter): + self.header = { + 'User-Agent': 'okhttp/3.14.9', + 'app-version-code': '402', + 'app-ui-mode': 'light', + 'app-user-device-id': '25f869d32598d3d3089a929453dff0bb7', + 'app-api-verify-time': self.t, + 'app-api-verify-sign': self.aes('encrypt', self.t), + 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' + } + data = self.fetch("{0}/api.php/getappapi.index/initV119".format(self.host), headers=self.header).content.decode( + 'utf-8') + data1 = json.loads(data)['data'] + print(data1) + data2 = self.aes('decrypt', data1) + dy = { + "class": "类型", + "area": "地区", + "lang": "语言", + "year": "年份", + "letter": "字母", + "by": "排序", + "sort": "排序" + } + + filter = {} + classes = [] + json_data = json.loads(data2)['type_list'] + self.homedata = json.loads(data2)['banner_list'] + + for item in json_data: + if item['type_name'] == '全部': + continue + + has_non_empty_field = False + jsontype_extend = json.loads(item['type_extend']) + jsontype_extend["sort"] = "最新,最热,最赞" + + classes.append({ + "type_name": item['type_name'], + "type_id": item['type_id'] + }) + + for key in dy: + if key in jsontype_extend and jsontype_extend[key].strip() != "": + has_non_empty_field = True + break + + if has_non_empty_field: + filter[str(item['type_id'])] = [] + + for dkey in jsontype_extend: + if dkey in dy and jsontype_extend[dkey].strip() != "": + values = jsontype_extend[dkey].split(',') + value_array = [ + {"n": value.strip(), "v": value.strip()} + for value in values if value.strip() != '' + ] + + filter[str(item['type_id'])].append({ + "key": dkey, + "name": dy[dkey], + "value": value_array + }) + result = {} + result['class'] = classes + result['filter'] = filter + return result + + def homeVideoContent(self): + result = { + 'list': self.homedata + } + return result + + def categoryContent(self, tid, pg, filter, extend): + body = f"area={extend.get('area', '全部')}&year={extend.get('year', '全部')}&type_id={tid}&page={pg}&sort={extend.get('sort', '最新')}&lang={extend.get('lang', '全部')}&class={extend.get('class', '全部')}" + result = {} + url = '{0}/api.php/getappapi.index/typeFilterVodList'.format(self.host) + data = self.post(url, headers=self.header, data=body).content.decode('utf-8') + data1 = json.loads(data)['data'] + data2 = self.aes('decrypt', data1) + result['list'] = json.loads(data2)['recommend_list'] + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + body = f"vod_id={ids[0]}" + print(body) + url = '{0}/api.php/getappapi.index/vodDetail'.format(self.host) + data = self.post(url, headers=self.header, data=body).content.decode('utf-8') + data1 = json.loads(data)['data'] + data2 = json.loads(self.aes('decrypt', data1)) + print(data2) + vod = data2['vod'] + print(vod) + play = [] + names = [] + for itt in data2['vod_play_list']: + a = [] + names.append(itt['player_info']['show']) + parse = itt['player_info']['parse'] + for it in itt['urls']: + if re.search(r'mp4|m3u8', it['url']): + a.append(f"{it['name']}${it['url']}") + elif re.search(r'www.yemu.xyz', it['parse_api_url']): + a.append(f"{it['name']}${it['parse_api_url']}") + else: + a.append( + f"{it['name']}${'parse_api=' + parse + '&url=' + self.aes('encrypt', it['url']) + '&token=' + it['token']}") + play.append('#'.join(a)) + vod['vod_play_from'] = '$$$'.join(names) + vod['vod_play_url'] = '$$$'.join(play) + result = { + 'list': [ + vod + ] + } + return result + + def searchContent(self, key, quick, pg='1'): + body = f"keywords={key}&type_id=0&page={pg}" + url = '{0}/api.php/getappapi.index/searchList'.format(self.host) + data = self.post(url, headers=self.header, data=body).content.decode('utf-8') + data1 = json.loads(data)['data'] + data2 = self.aes('decrypt', data1) + result = { + 'list': json.loads(data2)['search_list'] + } + return result + + def playerContent(self, flag, id, vipFlags): + def edu(str): + def replacer(match): + from urllib.parse import quote_plus + return match.group(1) + quote_plus(match.group(2)) + match.group(3) + + return re.sub(r'(url=)(.*?)(&token)', replacer, str) + + url = id + parse = 0 + if 'm3u8' not in url and 'mp4' not in url: + try: + body = edu(url) + print(body) + data = self.post('{0}/api.php/getappapi.index/vodParse'.format(self.host), headers=self.header, + data=body).content.decode('utf-8') + data1 = json.loads(data)['data'] + data2 = json.loads(self.aes('decrypt', data1))['json'] + url = json.loads(data2)['url'] + except: + url = id + parse = 1 + if not id.startswith('https://www.yemu.xyz'): + url = 'https://www.yemu.xyz/?url={0}'.format(id) + result = {} + print(url) + headers = self.header.copy() + del headers['Content-type'] + result["parse"] = parse + result["url"] = url + result["header"] = headers + return result + + def localProxy(self, param): + pass diff --git a/py/腾讯视频.py b/py/腾讯视频.py new file mode 100644 index 0000000..7a5218f --- /dev/null +++ b/py/腾讯视频.py @@ -0,0 +1,323 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import json +import sys +import uuid +import copy +sys.path.append('..') +from base.spider import Spider +from concurrent.futures import ThreadPoolExecutor, as_completed + + +class Spider(Spider): + + def init(self, extend=""): + self.dbody = { + "page_params": { + "channel_id": "", + "filter_params": "sort=75", + "page_type": "channel_operation", + "page_id": "channel_list_second_page" + } + } + self.body = self.dbody + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + host = 'https://v.qq.com' + + apihost = 'https://pbaccess.video.qq.com' + + headers = { + 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.5410.0 Safari/537.36', + 'origin': host, + 'referer': f'{host}/' + } + + def homeContent(self, filter): + cdata = { + "电视剧": "100113", + "电影": "100173", + "综艺": "100109", + "纪录片": "100105", + "动漫": "100119", + "少儿": "100150", + "短剧": "110755" + } + result = {} + classes = [] + filters = {} + for k in cdata: + classes.append({ + 'type_name': k, + 'type_id': cdata[k] + }) + with ThreadPoolExecutor(max_workers=len(classes)) as executor: + futures = [executor.submit(self.get_filter_data, item['type_id']) for item in classes] + for future in futures: + cid, data = future.result() + if not data.get('data', {}).get('module_list_datas'): + continue + filter_dict = {} + try: + items = data['data']['module_list_datas'][-1]['module_datas'][-1]['item_data_lists']['item_datas'] + for item in items: + if not item.get('item_params', {}).get('index_item_key'): + continue + params = item['item_params'] + filter_key = params['index_item_key'] + if filter_key not in filter_dict: + filter_dict[filter_key] = { + 'key': filter_key, + 'name': params['index_name'], + 'value': [] + } + filter_dict[filter_key]['value'].append({ + 'n': params['option_name'], + 'v': params['option_value'] + }) + except (IndexError, KeyError): + continue + filters[cid] = list(filter_dict.values()) + result['class'] = classes + result['filters'] = filters + return result + + def homeVideoContent(self): + json_data = {'page_context':None,'page_params':{'page_id':'100101','page_type':'channel','skip_privacy_types':'0','support_click_scan':'1','new_mark_label_enabled':'1','ams_cookies':'',},'page_bypass_params':{'params':{'caller_id':'','data_mode':'default','page_id':'','page_type':'channel','platform_id':'2','user_mode':'default',},'scene':'channel','abtest_bypass_id':'',}} + data = self.post(f'{self.apihost}/trpc.vector_layout.page_view.PageService/getPage',headers=self.headers, json=json_data).json() + vlist = [] + for it in data['data']['CardList'][0]['children_list']['list']['cards']: + if it.get('params'): + p = it['params'] + tag = json.loads(p.get('uni_imgtag', '{}') or p.get('imgtag', '{}') or '{}') + id = it.get('id') or p.get('cid') + name = p.get('mz_title') or p.get('title') + if name and 'http' not in id: + vlist.append({ + 'vod_id': id, + 'vod_name': name, + 'vod_pic': p.get('image_url'), + 'vod_year': tag.get('tag_2', {}).get('text'), + 'vod_remarks': tag.get('tag_4', {}).get('text') + }) + return {'list': vlist} + + def categoryContent(self, tid, pg, filter, extend): + result = {} + params = { + "sort": extend.get('sort', '75'), + "attr": extend.get('attr', '-1'), + "itype": extend.get('itype', '-1'), + "ipay": extend.get('ipay', '-1'), + "iarea": extend.get('iarea', '-1'), + "iyear": extend.get('iyear', '-1'), + "theater": extend.get('theater', '-1'), + "award": extend.get('award', '-1'), + "recommend": extend.get('recommend', '-1') + } + if pg == '1': + self.body = self.dbody.copy() + self.body['page_params']['channel_id'] = tid + self.body['page_params']['filter_params'] = self.josn_to_params(params) + data = self.post( + f'{self.apihost}/trpc.universal_backend_service.page_server_rpc.PageServer/GetPageData?video_appid=1000005&vplatform=2&vversion_name=8.9.10&new_mark_label_enabled=1', + json=self.body, headers=self.headers).json() + ndata = data['data'] + if ndata['has_next_page']: + result['pagecount'] = 9999 + self.body['page_context'] = ndata['next_page_context'] + else: + result['pagecount'] = int(pg) + vlist = [] + for its in ndata['module_list_datas'][-1]['module_datas'][-1]['item_data_lists']['item_datas']: + id = its.get('item_params', {}).get('cid') + if id: + p = its['item_params'] + tag = json.loads(p.get('uni_imgtag', '{}') or p.get('imgtag', '{}') or '{}') + name = p.get('mz_title') or p.get('title') + pic = p.get('new_pic_hz') or p.get('new_pic_vt') + vlist.append({ + 'vod_id': id, + 'vod_name': name, + 'vod_pic': pic, + 'vod_year': tag.get('tag_2', {}).get('text'), + 'vod_remarks': tag.get('tag_4', {}).get('text') + }) + result['list'] = vlist + result['page'] = pg + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + vbody = {"page_params":{"req_from":"web","cid":ids[0],"vid":"","lid":"","page_type":"detail_operation","page_id":"detail_page_introduction"},"has_cache":1} + body = {"page_params":{"req_from":"web_vsite","page_id":"vsite_episode_list","page_type":"detail_operation","id_type":"1","page_size":"","cid":ids[0],"vid":"","lid":"","page_num":"","page_context":"","detail_page_type":"1"},"has_cache":1} + with ThreadPoolExecutor(max_workers=2) as executor: + future_detail = executor.submit(self.get_vdata, vbody) + future_episodes = executor.submit(self.get_vdata, body) + vdata = future_detail.result() + data = future_episodes.result() + + pdata = self.process_tabs(data, body, ids) + if not pdata: + return self.handle_exception(None, "No pdata available") + + try: + star_list = vdata['data']['module_list_datas'][0]['module_datas'][0]['item_data_lists']['item_datas'][ + 0].get('sub_items', {}).get('star_list', {}).get('item_datas', []) + actors = [star['item_params']['name'] for star in star_list] + names = ['腾讯视频', '预告片'] + plist, ylist = self.process_pdata(pdata, ids) + if not plist: + del names[0] + if not ylist: + del names[1] + vod = self.build_vod(vdata, actors, plist, ylist, names) + return {'list': [vod]} + except Exception as e: + return self.handle_exception(e, "Error processing detail") + + def searchContent(self, key, quick, pg="1"): + headers = self.headers.copy() + headers.update({'Content-Type': 'application/json'}) + body = {'version':'25021101','clientType':1,'filterValue':'','uuid':str(uuid.uuid4()),'retry':0,'query':key,'pagenum':int(pg)-1,'pagesize':30,'queryFrom':0,'searchDatakey':'','transInfo':'','isneedQc':True,'preQid':'','adClientInfo':'','extraInfo':{'isNewMarkLabel':'1','multi_terminal_pc':'1','themeType':'1',},} + data = self.post(f'{self.apihost}/trpc.videosearch.mobile_search.MultiTerminalSearch/MbSearch?vplatform=2', + json=body, headers=headers).json() + vlist = [] + vname=["电视剧", "电影", "综艺", "纪录片", "动漫", "少儿", "短剧"] + v=data['data']['normalList']['itemList'] + d=data['data']['areaBoxList'][0]['itemList'] + q=v+d + if v[0].get('doc') and v[0]['doc'].get('id') =='MainNeed':q=d+v + for k in q: + if k.get('doc') and k.get('videoInfo') and k['doc'].get('id') and '外站' not in k['videoInfo'].get('subTitle') and k['videoInfo'].get('title') and k['videoInfo'].get('typeName') in vname: + img_tag = k.get('videoInfo', {}).get('imgTag') + if img_tag is not None and isinstance(img_tag, str): + try: + tag = json.loads(img_tag) + except json.JSONDecodeError as e: + tag = {} + else: + tag = {} + pic = k.get('videoInfo', {}).get('imgUrl') + vlist.append({ + 'vod_id': k['doc']['id'], + 'vod_name': self.removeHtmlTags(k['videoInfo']['title']), + 'vod_pic': pic, + 'vod_year': k['videoInfo'].get('typeName') +' '+ tag.get('tag_2', {}).get('text', ''), + 'vod_remarks': tag.get('tag_4', {}).get('text', '') + }) + return {'list': vlist, 'page': pg} + + def playerContent(self, flag, id, vipFlags): + ids = id.split('@') + url = f"{self.host}/x/cover/{ids[0]}/{ids[1]}.html" + return {'jx':1,'parse': 1, 'url': url, 'header': ''} + + def localProxy(self, param): + pass + + def get_filter_data(self, cid): + hbody = self.dbody.copy() + hbody['page_params']['channel_id'] = cid + data = self.post( + f'{self.apihost}/trpc.universal_backend_service.page_server_rpc.PageServer/GetPageData?video_appid=1000005&vplatform=2&vversion_name=8.9.10&new_mark_label_enabled=1', + json=hbody, headers=self.headers).json() + return cid, data + + def get_vdata(self, body): + try: + vdata = self.post( + f'{self.apihost}/trpc.universal_backend_service.page_server_rpc.PageServer/GetPageData?video_appid=3000010&vplatform=2&vversion_name=8.2.96', + json=body, headers=self.headers + ).json() + return vdata + except Exception as e: + print(f"Error in get_vdata: {str(e)}") + return {'data': {'module_list_datas': []}} + + def process_pdata(self, pdata, ids): + plist = [] + ylist = [] + for k in pdata: + if k.get('item_id'): + pid = f"{k['item_params']['union_title']}${ids[0]}@{k['item_id']}" + if '预告' in k['item_params']['union_title']: + ylist.append(pid) + else: + plist.append(pid) + return plist, ylist + + def build_vod(self, vdata, actors, plist, ylist, names): + d = vdata['data']['module_list_datas'][0]['module_datas'][0]['item_data_lists']['item_datas'][0]['item_params'] + urls = [] + if plist: + urls.append('#'.join(plist)) + if ylist: + urls.append('#'.join(ylist)) + vod = { + 'type_name': d.get('sub_genre', ''), + 'vod_name': d.get('title', ''), + 'vod_year': d.get('year', ''), + 'vod_area': d.get('area_name', ''), + 'vod_remarks': d.get('holly_online_time', '') or d.get('hotval', ''), + 'vod_actor': ','.join(actors), + 'vod_content': d.get('cover_description', ''), + 'vod_play_from': '$$$'.join(names), + 'vod_play_url': '$$$'.join(urls) + } + return vod + + def handle_exception(self, e, message): + print(f"{message}: {str(e)}") + return {'list': [{'vod_play_from': '哎呀翻车啦', 'vod_play_url': '翻车啦#555'}]} + + def process_tabs(self, data, body, ids): + try: + pdata = data['data']['module_list_datas'][-1]['module_datas'][-1]['item_data_lists']['item_datas'] + tabs = data['data']['module_list_datas'][-1]['module_datas'][-1]['module_params'].get('tabs') + if tabs and len(json.loads(tabs)): + tabs = json.loads(tabs) + remaining_tabs = tabs[1:] + task_queue = [] + for tab in remaining_tabs: + nbody = copy.deepcopy(body) + nbody['page_params']['page_context'] = tab['page_context'] + task_queue.append(nbody) + with ThreadPoolExecutor(max_workers=10) as executor: + future_map = {executor.submit(self.get_vdata, task): idx for idx, task in enumerate(task_queue)} + results = [None] * len(task_queue) + for future in as_completed(future_map.keys()): + idx = future_map[future] + results[idx] = future.result() + for result in results: + if result: + page_data = result['data']['module_list_datas'][-1]['module_datas'][-1]['item_data_lists'][ + 'item_datas'] + pdata.extend(page_data) + return pdata + except Exception as e: + print(f"Error processing episodes: {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) + + diff --git a/py/芒果视频.py b/py/芒果视频.py new file mode 100644 index 0000000..6ba8e34 --- /dev/null +++ b/py/芒果视频.py @@ -0,0 +1,205 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import sys +import time +from concurrent.futures import ThreadPoolExecutor, as_completed +sys.path.append('..') +from base.spider import Spider + +class Spider(Spider): + + def init(self, extend=""): + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + rhost='https://www.mgtv.com' + + host='https://pianku.api.mgtv.com' + + vhost='https://pcweb.api.mgtv.com' + + mhost='https://dc.bz.mgtv.com' + + shost='https://mobileso.bz.mgtv.com' + + 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', + 'origin': rhost, + 'referer': f'{rhost}/' + } + + def homeContent(self, filter): + result = {} + cateManual = { + "电影": "3", + "电视剧": "2", + "综艺": "1", + "动画": "50", + "少儿": "10", + "纪录片": "51", + "教育": "115" + } + classes = [] + filters = {} + for k in cateManual: + classes.append({ + 'type_name': k, + 'type_id': cateManual[k] + }) + 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 + return result + + def homeVideoContent(self): + data=self.fetch(f'{self.mhost}/dynamic/v1/channel/index/0/0/0/1000000/0/0/17/1354?type=17&version=5.0&t={str(int(time.time()*1000))}&_support=10000000', headers=self.headers).json() + videoList = [] + for i in data['data']: + if i.get('DSLList') and len(i['DSLList']): + for j in i['DSLList']: + if j.get('data') and j['data'].get('items') and len(j['data']['items']): + for k in j['data']['items']: + videoList.append({ + 'vod_id': k["videoId"], + 'vod_name': k['videoName'], + 'vod_pic': k['img'], + 'vod_year': k.get('cornerTitle'), + 'vod_remarks': k.get('time') or k.get('desc'), + }) + return {'list':videoList} + + def categoryContent(self, tid, pg, filter, extend): + body={ + 'allowedRC': '1', + 'platform': 'pcweb', + 'channelId': tid, + 'pn': pg, + 'pc': '80', + 'hudong': '1', + '_support': '10000000' + } + body.update(extend) + data=self.fetch(f'{self.host}/rider/list/pcweb/v3', params=body, headers=self.headers).json() + videoList = [] + for i in data['data']['hitDocs']: + videoList.append({ + 'vod_id': i["playPartId"], + 'vod_name': i['title'], + 'vod_pic': i['img'], + 'vod_year': (i.get('rightCorner',{}) or {}).get('text') or i.get('year'), + 'vod_remarks': i['updateInfo'] + }) + result = {} + result['list'] = videoList + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + vbody={'allowedRC': '1', 'vid': ids[0], 'type': 'b', '_support': '10000000'} + vdata=self.fetch(f'{self.vhost}/video/info', params=vbody, headers=self.headers).json() + d=vdata['data']['info']['detail'] + vod = { + 'vod_name': vdata['data']['info']['title'], + 'type_name': d.get('kind'), + 'vod_year': d.get('releaseTime'), + 'vod_area': d.get('area'), + 'vod_lang': d.get('language'), + 'vod_remarks': d.get('updateInfo'), + 'vod_actor': d.get('leader'), + 'vod_director': d.get('director'), + 'vod_content': d.get('story'), + 'vod_play_from': '芒果TV', + 'vod_play_url': '' + } + data,pdata=self.fetch_page_data('1', ids[0],True) + pagecount=data['data'].get('total_page') or 1 + if int(pagecount)>1: + pages = list(range(2, pagecount+1)) + page_results = {} + with ThreadPoolExecutor(max_workers=10) as executor: + future_to_page = { + executor.submit(self.fetch_page_data, page, ids[0]): page + for page in pages + } + for future in as_completed(future_to_page): + page = future_to_page[future] + try: + result = future.result() + page_results[page] = result + except Exception as e: + print(f"Error fetching page {page}: {e}") + for page in sorted(page_results.keys()): + pdata.extend(page_results[page]) + vod['vod_play_url'] = '#'.join(pdata) + return {'list':[vod]} + + def searchContent(self, key, quick, pg="1"): + data=self.fetch(f'{self.shost}/applet/search/v1?channelCode=mobile-wxap&q={key}&pn={pg}&pc=10&_support=10000000', headers=self.headers).json() + videoList = [] + for i in data['data']['contents']: + if i.get('data') and len(i['data']): + k = i['data'][0] + if k.get('vid') and k.get('img'): + try: + videoList.append({ + 'vod_id': k['vid'], + 'vod_name': k['title'], + 'vod_pic': k['img'], + 'vod_year': (i.get('rightTopCorner',{}) or {}).get('text') or i.get('year'), + 'vod_remarks': '/'.join(i.get('desc',[])), + }) + except: + print(k) + return {'list':videoList,'page':pg} + + def playerContent(self, flag, id, vipFlags): + id=f'{self.rhost}{id}' + return {'jx':1,'parse': 1, 'url': id, 'header': ''} + + def localProxy(self, param): + pass + + def getf(self, body): + params = { + 'allowedRC': '1', + 'channelId': body['type_id'], + 'platform': 'pcweb', + '_support': '10000000', + } + data = self.fetch(f'{self.host}/rider/config/channel/v1', params=params, headers=self.headers).json() + ft = [] + for i in data['data']['listItems']: + try: + value_array = [{"n": value['tagName'], "v": value['tagId']} for value in i['items'] if + value.get('tagName')] + ft.append({"key": i['eName'], "name": i['typeName'], "value": value_array}) + except: + print(i) + return body['type_id'], ft + + def fetch_page_data(self, page, id, b=False): + body = {'version': '5.5.35', 'video_id': id, 'page': page, 'size': '30', + 'platform': '4', 'src': 'mgtv', 'allowedRC': '1', '_support': '10000000'} + data = self.fetch(f'{self.vhost}/episode/list', params=body, headers=self.headers).json() + ldata = [f'{i["t3"]}${i["url"]}' for i in data['data']['list']] + if b: + return data, ldata + else: + return ldata diff --git a/py/若惜影视.py b/py/若惜影视.py new file mode 100644 index 0000000..1b33d5d --- /dev/null +++ b/py/若惜影视.py @@ -0,0 +1,255 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import re +import sys +from Crypto.Hash import MD5 +sys.path.append("..") +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad, unpad +from urllib.parse import quote, urlparse +from base64 import b64encode, b64decode +from concurrent.futures import ThreadPoolExecutor +import json +import time +from base.spider import Spider + +class Spider(Spider): + + ''' + sites照常配置, + lives配置: + { + "name": "xxxx", + "type": 3, + "api": "路径/若惜追剧APP.py", + "ext": "" + } + ''' + + def init(self, extend=""): + self.host = self.gethost() + pass + + def getName(self): + pass + + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def action(self, action): + pass + + def destroy(self): + pass + + def homeContent(self, filter): + data = self.getdata("/api.php/getappapi.index/initV119") + dy = {"class": "类型", "area": "地区", "lang": "语言", "year": "年份", "letter": "字母", "by": "排序", + "sort": "排序"} + filters = {} + classes = [] + json_data = data["type_list"] + homedata = data["banner_list"][8:] + for item in json_data: + if item["type_name"] == "全部": + continue + has_non_empty_field = False + jsontype_extend = json.loads(item["type_extend"]) + homedata.extend(item["recommend_list"]) + jsontype_extend["sort"] = "最新,最热,最赞" + classes.append({"type_name": item["type_name"], "type_id": item["type_id"]}) + for key in dy: + if key in jsontype_extend and jsontype_extend[key].strip() != "": + has_non_empty_field = True + break + if has_non_empty_field: + filters[str(item["type_id"])] = [] + for dkey in jsontype_extend: + if dkey in dy and jsontype_extend[dkey].strip() != "": + values = jsontype_extend[dkey].split(",") + value_array = [{"n": value.strip(), "v": value.strip()} for value in values if + value.strip() != ""] + filters[str(item["type_id"])].append({"key": dkey, "name": dy[dkey], "value": value_array}) + result = {} + result["class"] = classes + result["filters"] = filters + result["list"] = homedata[1:] + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, tid, pg, filter, extend): + body = {"area": extend.get('area', '全部'), "year": extend.get('year', '全部'), "type_id": tid, "page": pg, + "sort": extend.get('sort', '最新'), "lang": extend.get('lang', '全部'), + "class": extend.get('class', '全部')} + result = {} + data = self.getdata("/api.php/getappapi.index/typeFilterVodList", body) + result["list"] = data["recommend_list"] + result["page"] = pg + result["pagecount"] = 9999 + result["limit"] = 90 + result["total"] = 999999 + return result + + def detailContent(self, ids): + body = f"vod_id={ids[0]}" + data = self.getdata("/api.php/getappapi.index/vodDetail", body) + vod = data["vod"] + play = [] + names = [] + for itt in data["vod_play_list"]: + a = [] + names.append(itt["player_info"]["show"]) + for it in itt['urls']: + it['user_agent']=itt["player_info"].get("user_agent") + it["parse"]=itt["player_info"].get("parse") + a.append(f"{it['name']}${self.e64(json.dumps(it))}") + play.append("#".join(a)) + vod["vod_play_from"] = "$$$".join(names) + vod["vod_play_url"] = "$$$".join(play) + result = {"list": [vod]} + return result + + def searchContent(self, key, quick, pg="1"): + body = f"keywords={key}&type_id=0&page={pg}" + data = self.getdata("/api.php/getappapi.index/searchList", body) + result = {"list": data["search_list"], "page": pg} + return result + + def playerContent(self, flag, id, vipFlags): + ids = json.loads(self.d64(id)) + h={"User-Agent": (ids['user_agent'] or "okhttp/3.14.9")} + try: + if re.search(r'url=', ids['parse_api_url']): + data=self.fetch(ids['parse_api_url'], headers=h, timeout=10).json() + url=data.get('url') or data['data'].get('url') + else: + body = f"parse_api={ids.get('parse') or ids['parse_api_url'].replace(ids['url'], '')}&url={quote(self.aes(ids['url'],True))}&token={ids.get('token')}" + b = self.getdata("/api.php/getappapi.index/vodParse", body)['json'] + url = json.loads(b)['url'] + if 'error' in url:raise ValueError(f"解析失败: {url}") + p=0 + except Exception as e: + print('错误信息:',e) + url, p = ids['url'], 1 + + if re.search(r'\.jpg|\.png|\.jpeg', url): + url = self.Mproxy(url) + result = {} + result["parse"] = p + result["url"] = url + result["header"] = h + return result + + def liveContent(self, url): + id=self.homeContent(True)['class'][-1]['type_id'] + vlist=self.categoryContent(id,1,False,{})['list'] + results = [] + with ThreadPoolExecutor(max_workers=len(vlist)) as executor: + futures = [executor.submit(self.livedetailContent, item['vod_name'], item['vod_id']) for item in vlist] + for future in futures: + try: + detail = future.result() + if detail: + results.append(detail) + except Exception as e: + print(f"处理详情数据失败: {str(e)}") + return '\n'.join(results) + + def livedetailContent(self, name,id): + try: + print(f"获取直播源:{name}") + body = f"vod_id={id}" + data = self.getdata("/api.php/getappapi.index/vodDetail", body) + play = [f"{name},#genre#"] + for itt in data["vod_play_list"]: + for it in itt['urls']: + play.append(f"{it['name']}, {it['url']}") + except Exception as e: + print(f"获取直播源失败:{str(e)}") + play=[] + return '\n'.join(play) + + def localProxy(self, param): + return self.Mlocal(param) + + def gethost(self): + headers = { + 'User-Agent': 'okhttp/3.14.9' + } + host = self.fetch('https://rxysyyds.oss-cn-chengdu.aliyuncs.com/getapp.txt', headers=headers).text + return host.strip() + + def aes(self, text,b=None): + key = b"ebad3f1a58b13933" + cipher = AES.new(key, AES.MODE_CBC, key) + if b: + ct_bytes = cipher.encrypt(pad(text.encode("utf-8"), AES.block_size)) + ct = b64encode(ct_bytes).decode("utf-8") + return ct + else : + pt = unpad(cipher.decrypt(b64decode(text)), AES.block_size) + return pt.decode("utf-8") + + def header(self): + t = str(int(time.time())) + header = {"Referer":self.host, + "User-Agent": "okhttp/3.14.9", "app-version-code": "140", "app-ui-mode": "light", + "app-api-verify-time": t, "app-user-device-id": self.md5(t), + "app-api-verify-sign": self.aes(t,True), + "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"} + return header + + def getdata(self, path, data=None): + vdata = self.post(f"{self.host}{path}", headers=self.header(), data=data, timeout=10).json()['data'] + data1 = self.aes(vdata) + return json.loads(data1) + + def Mproxy(self, url): + return f"{self.getProxyUrl()}&url={self.e64(url)}&type=m3u8" + + def Mlocal(self, param,header=None): + url = self.d64(param["url"]) + ydata = self.fetch(url, headers=header, allow_redirects=False) + data = ydata.content.decode('utf-8') + if ydata.headers.get('Location'): + url = ydata.headers['Location'] + data = self.fetch(url, headers=header).content.decode('utf-8') + parsed_url = urlparse(url) + durl = parsed_url.scheme + "://" + parsed_url.netloc + lines = data.strip().split('\n') + for index, string in enumerate(lines): + if '#EXT' not in string and 'http' not in string: + last_slash_index = string.rfind('/') + lpath = string[:last_slash_index + 1] + lines[index] = durl + ('' if lpath.startswith('/') else '/') + lpath + data = '\n'.join(lines) + return [200, "application/vnd.apple.mpegur", data] + + 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() diff --git a/py/茶杯狐影视.py b/py/茶杯狐影视.py new file mode 100644 index 0000000..2c879bf --- /dev/null +++ b/py/茶杯狐影视.py @@ -0,0 +1,359 @@ +# coding = utf-8 +# !/usr/bin/python + +""" + +作者 繁华 🚓 内容均从互联网收集而来 仅供交流学习使用 版权归原创者所有 如侵犯了您的权益 请通知作者 将及时删除侵权内容 + ====================fanhua==================== + +""" + +from Crypto.Util.Padding import unpad +from urllib.parse import unquote +from Crypto.Cipher import ARC4 +from urllib.parse import quote +from base.spider import Spider +from bs4 import BeautifulSoup +import urllib.request +import urllib.parse +import binascii +import requests +import base64 +import json +import time +import sys +import re +import os + +sys.path.append('..') + +xurl = "https://cupfoxys.cc" + +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' + } + +# headerx = { +# 'User-Agent': 'Linux; Android 12; Pixel 3 XL) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.101 Mobile Safari/537.36' +# } + +pm = '' + +class Spider(Spider): + global xurl + 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":"dy","type_name":"电影"},{"type_id":"dsj","type_name":"电视剧"},{"type_id":"dm","type_name":"动漫"},{"type_id":"zy","type_name":"综艺"}],"list":[],"filters":{"dy":[{"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":"微电影"},{"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":"其他"}]},{"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"}]},{"key":"语言","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"法语","v":"法语"},{"n":"德语","v":"德语"},{"n":"其它","v":"其它"}]}],"dsj":[{"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":"经典"},{"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":"其他"}]},{"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"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]},{"key":"语言","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]}],"dm":[{"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":"机战"},{"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":"大陆","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"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]},{"key":"语言","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]}],"zy":[{"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":"晚会"},{"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":"美国"}]},{"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"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]},{"key":"语言","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]}]}} + + return result + + def homeVideoContent(self): + videos = [] + + try: + detail = requests.get(url=xurl, headers=headerx) + detail.encoding = "utf-8" + res = detail.text + doc = BeautifulSoup(res, "lxml") + soups = doc.find_all('div', class_="vod-list") + for soup in soups: + vods = soup.find_all('div', class_="col-xs-4") + for vod in vods: + names = vod.find('div', class_="vod-item") + name = names.find('h3').text + id = vod.select_one('h3 a')['href'] + pics = vod.find_all('div') + pic = pics[1]['data-original'] + if 'http' not in pic: + pic = xurl + pic + remarks = vod.find('span', class_="text-row-1") + remark = remarks.text.strip() + video = { + "vod_id": id, + "vod_name": name, + "vod_pic": pic, + "vod_remarks": remark + } + videos.append(video) + result = {'list': videos} + return result + except: + pass + def categoryContent(self, cid, pg, filter, ext): + result = {} + videos = [] + if pg: + page = int(pg) + else: + page = 1 + if '类型' in ext.keys(): + lxType = ext['类型'] + else: + lxType = '' + if '地区' in ext.keys(): + DqType = ext['地区'] + else: + DqType = '' + if '语言' in ext.keys(): + YyType = ext['语言'] + else: + YyType = '' + if '年代' in ext.keys(): + NdType = ext['年代'] + else: + NdType = '' + if '剧情' in ext.keys(): + JqType = ext['剧情'] + else: + JqType = '' + if '排序' in ext.keys(): + pxType = ext['排序'] + else: + pxType = '' + url = f'{xurl}/vod/{cid}-{DqType}--{lxType}-{YyType}----{pg}---{NdType}/' + # https://cupfoxys.cc/vod/dsj-%E5%A4%A7%E9%99%86--%E7%88%B1%E6%83%85-%E5%9B%BD%E8%AF%AD-------2024/ + try: + print(url) + detail = requests.get(url=url, headers=headerx) + detail.encoding = "utf-8" + res = detail.text + doc = BeautifulSoup(res, "lxml") + soups = doc.find_all('div', class_="row") + for soup in soups: + vods = soup.find_all('div', class_="col-xs-4") + for vod in vods: + names = vod.find('div', class_="vod-item") + name = names.find('h3').text + id = vod.select_one('h3 a')['href'] + pics = vod.find_all('div') + pic = pics[1]['data-original'] + if 'http' not in pic: + pic = xurl + pic + remarks = vod.find('span', class_="text-row-1") + remark = remarks.text.strip() + video = { + "vod_id": id, + "vod_name": name, + "vod_pic": pic, + "vod_remarks": remark + } + videos.append(video) + except: + pass + result = {'list': videos} + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + def detailContent(self, ids): + global pm + did = ids[0] + result = {} + videos = [] + if 'http' not in did: + did = xurl + did + res = requests.get(url=did, headers=headerx) + res.encoding = "utf-8" + res = res.text + tiaozhuan = '0' + if tiaozhuan == '1': + didt = self.extract_middle_text(res, 'class="play">', '

    ', 1, 'href="(.*?)"') + if 'http' not in didt: + didt = xurl + didt + ress = requests.get(url=didt, headers=headerx) + ress.encoding = "utf-8" + ress = ress.text + duoxian = '0' + if duoxian == '1': + doc = BeautifulSoup(ress, 'lxml') + soups = doc.find('span', class_='animate__animated') + vods = soups.find_all('a')[1:] + res1 = '' + for vod in vods: + url = self.extract_middle_text(str(vod), 'href="', '"', 0) + if 'http' not in url: + url = xurl + url + resss = requests.get(url, headers=headerx) + resss.encoding = 'utf-8' + resss = resss.text + res1 = res1 + resss + res2 = ress + res1 + url = 'https://9071.kstore.vip/py/yz.txt' + response = requests.get(url) + response.encoding = 'utf-8' + code = response.text + name = self.extract_middle_text(code, "s1='", "'", 0) + Jumps = self.extract_middle_text(code, "s2='", "'", 0) + content = '😸繁华🎉绍剧情📢本资源来源于网络🚓侵权请联系删除👉' + self.extract_middle_text(res,'

    ', '').replace('\u3000\u3000', '') + if name not in content: + bofang = Jumps + else: + bofang = self.extract_middle_text(res, '

      (.*?)') + xianlu = self.extract_middle_text(res, 'ul class="tab-box','
    ',2, '(.*?)') + actors = self.extract_middle_text(res, 'class="fa fa-user-o fa-fw">
    主演:', '', 1,'href=".*?" target=".*?">(.*?)') + director = self.extract_middle_text(res, 'class="fa fa-user-o fa-fw">
    导演:', '', 1,'(.*?)') + videos.append({ + "vod_id": did, + "vod_actor": actors, + "vod_director": director, + "vod_content": content, + "vod_play_from": xianlu, + "vod_play_url": bofang + }) + result['list'] = videos + return result + def playerContent(self, flag, id, vipFlags): + parts = id.split("http") + xiutan = 0 + if xiutan == 0: + if len(parts) > 1: + before_https, after_https = parts[0], 'http' + parts[1] + if '239755956819.mp4' in after_https: + url = after_https + else: + res = requests.get(url=after_https, headers=headerx) + res = res.text + url = self.extract_middle_text(res, '},"url":"', '"', 0).replace('\\', '') + result = {} + result["parse"] = xiutan + result["playUrl"] = '' + result["url"] = url + result["header"] = headerx + return result + if xiutan == 1: + if len(parts) > 1: + before_https, after_https = parts[0], 'http' + parts[1] + result = {} + result["parse"] = xiutan + result["playUrl"] = '' + result["url"] = after_https + result["header"] = headerx + return result + def searchContentPage(self, key, quick, page): + result = {} + videos = [] + if not page: + page = '1' + if page == '1': + url = f'{xurl}/search/-------------/?wd={key}' + else: + url = f'{xurl}/search/{key}----------{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_="search-list") + for soup in soups: + vods = soup.find_all('div', class_="search-item row") + for vod in vods: + names = vod.find('h2', class_="search-item-title") + name = names.find('a')['title'] + id = vod.find('a')['href'] + pic = vod.select_one('a div')['data-original'] + if 'http' not in pic: + pic = xurl + pic + remarks = vod.find('ul', class_="search-item-desc") + remark = remarks.find('li').text + video = { + "vod_id": id, + "vod_name": name, + "vod_pic": pic, + "vod_remarks": remark + } + videos.append(video) + result['list'] = videos + result['page'] = page + 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/py/蓝莓短剧.py b/py/蓝莓短剧.py new file mode 100644 index 0000000..fd79fc0 --- /dev/null +++ b/py/蓝莓短剧.py @@ -0,0 +1,391 @@ +# -*- coding: utf-8 -*- +import requests +import json +import time +import sys +import urllib.parse + +sys.path.append('../../') +try: + from base.spider import Spider +except ImportError: + # 定义一个基础接口类,用于本地测试 + class Spider: + def init(self, extend=""): + pass + +class Spider(Spider): + def __init__(self): + self.siteUrl = "https://app.whjzjx.cn" + # 分类ID映射 + self.cateManual = { + "古装": "5", + "穿越": "17", + "逆袭": "7", + "重生": "6" + } + # 请求头 + self.headers = { + "Connection": "keep-alive", + "Content-Type": "application/x-www-form-urlencoded", + "user-agent": "okhttp/4.10.0", + "user_agent": "Mozilla/5.0 (Linux; Android 9; ASUS_I003DD Build/PI; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/68.0.3440.70 Mobile Safari/537.36", + "Host": "app.whjzjx.cn", + "Accept-Encoding": "gzip" + } + # token缓存 + self.token = None + self.tokenExpireTime = 0 + + def getName(self): + # 返回爬虫名称 + return "蓝莓短剧" + + def init(self, extend=""): + return + + def isVideoFormat(self, url): + # 检查是否为视频格式 + video_formats = ['.mp4', '.m3u8', '.ts'] + for format in video_formats: + if format in url.lower(): + return True + return False + + def manualVideoCheck(self): + # 不需要手动检查 + return False + + def getToken(self): + """获取API访问Token""" + # 如果token有效期内,直接返回 + current_time = time.time() + if self.token and current_time < self.tokenExpireTime: + return self.token + + # 否则重新获取 + try: + tkurl = 'https://app.whjzjx.cn/v1/account/login' + body = "device=20caaae96b3443174bf4ebdbdcc253776" + + response = requests.post( + tkurl, + headers=self.headers, + data=body + ) + + if response.status_code == 200: + json_data = response.json() + # 修复:服务器返回的是"ok"而不是0 + if json_data.get('code') == 0 or json_data.get('code') == "ok" or json_data.get('status') == 0: + self.token = json_data['data']['token'] + # 设置token过期时间为1小时 + self.tokenExpireTime = current_time + 3600 + return self.token + + print(f"获取token失败: {response.text}") + return None + except Exception as e: + print(f"获取token异常: {str(e)}") + return None + + def fetchWithToken(self, url, method="GET", body=None): + """带token的网络请求""" + token = self.getToken() + if not token: + print("无法获取token") + return None + + headers = self.headers.copy() + headers["authorization"] = token + + try: + if method.upper() == "GET": + response = requests.get(url, headers=headers, timeout=10) + else: # POST + response = requests.post(url, headers=headers, data=body, timeout=10) + + response.raise_for_status() + return response + except Exception as e: + print(f"请求失败: {url}, 错误: {str(e)}") + return None + + def homeContent(self, filter): + """获取首页分类及筛选""" + result = {} + classes = [] + + # 添加分类 + for k in self.cateManual: + classes.append({ + 'type_id': self.cateManual[k], + 'type_name': k + }) + + result['class'] = classes + + # 获取首页推荐视频 + try: + result['list'] = self.homeVideoContent()['list'] + except: + result['list'] = [] + + return result + + def homeVideoContent(self): + """获取首页推荐视频内容""" + # 使用第一个分类的内容作为首页推荐 + first_cate = list(self.cateManual.values())[0] + result = self.categoryContent(first_cate, 1, False, None) + # 不打印错误信息,除非列表为空 + if not result.get('list'): + print("未获取到首页推荐视频") + return result + + def categoryContent(self, tid, pg, filter, extend): + """获取分类内容""" + result = {} + videos = [] + + try: + # 构建请求URL:分类页 + url = f"{self.siteUrl}/v1/theater/home_page?theater_class_id={tid}&page_num={int(pg)-1}&page_size=24" + + response = self.fetchWithToken(url) + if not response: + return result + + json_data = response.json() + + # 服务器正常响应状态检查,返回"ok"或status=0认为是成功 + if not(json_data.get('code') == 0 or json_data.get('code') == "ok" or json_data.get('status') == 0): + print(f"获取分类数据失败: {json_data}") + return result + + # 不再打印json_data,而是处理正常返回的数据 + # 解析视频列表 + data_list = json_data.get('data', {}).get('list', []) + for item in data_list: + theater = item.get('theater', {}) + if not theater: + continue + + video_id = theater.get('id') + title = theater.get('title') + cover = theater.get('cover_url') + total = theater.get('total', '') + play_amount = theater.get('play_amount_str', '') + + videos.append({ + "vod_id": video_id, + "vod_name": title, + "vod_pic": cover, + "vod_remarks": f"{total}集", + "vod_content": f"播放量:{play_amount}" + }) + + # 构建返回结果 + result = { + 'list': videos, + 'page': pg, + 'pagecount': 9999, # 假设有很多页 + 'limit': 24, + 'total': 999999 # 设置一个较大数值 + } + except Exception as e: + print(f"获取分类内容异常: {str(e)}") + + return result + + def detailContent(self, ids): + """获取详情页内容""" + video_id = ids[0] + result = {} + + try: + # 构建详情页请求URL + url = f"{self.siteUrl}/v2/theater_parent/detail?theater_parent_id={video_id}" + + response = self.fetchWithToken(url) + if not response: + return {} + + json_data = response.json() + if not(json_data.get('code') == 0 or json_data.get('code') == "ok" or json_data.get('status') == 0): + print(f"获取详情数据失败: {json_data}") + return {} + + # 解析详情数据 + data = json_data.get('data', {}) + title = data.get('title', '') + cover = data.get('cover_url', '') + total = data.get('total', '') + + # 提取剧集列表 + theaters = data.get('theaters', []) + episodes = [] + + for index, theater in enumerate(theaters): + ep_name = f"第{theater.get('num', '')}集" + # 生成格式为 video_id_episode_index 的ID,方便playerContent提取 + ep_url = f"{video_id}_{index}" + episodes.append(f"{ep_name}${ep_url}") + + # 构建VOD数据 + vod = { + "vod_id": video_id, + "vod_name": title, + "vod_pic": cover, + "vod_remarks": f"{total}集", + "vod_content": data.get('introduction', ''), + "vod_play_from": "蓝莓短剧", + "vod_play_url": "#".join(episodes) + } + + result = { + 'list': [vod] + } + except Exception as e: + print(f"获取详情内容异常: {str(e)}") + + return result + + def searchContent(self, key, quick, pg=1): + """搜索功能""" + result = {} + videos = [] + + try: + # 构建搜索请求 + url = f"{self.siteUrl}/v2/search" + body = f"text={urllib.parse.quote(key)}" + + response = self.fetchWithToken(url, method="POST", body=body) + if not response: + return {} + + json_data = response.json() + # 修改这里,使用与detailContent相同的条件判断 + if not(json_data.get('code') == 0 or json_data.get('code') == "ok" or json_data.get('status') == 0): + print(f"搜索数据失败: {json_data}") + return {} + + # 解析搜索结果 + search_data = json_data.get('data', {}).get('search_data', []) + for item in search_data: + video_id = item.get('id') + title = item.get('title') + cover = item.get('cover_url') + score = item.get('score_str', '') + total = item.get('total', '') + + videos.append({ + "vod_id": video_id, + "vod_name": title, + "vod_pic": cover, + "vod_remarks": f"{score}|{total}集" + }) + + result = { + 'list': videos, + 'page': pg + } + except Exception as e: + print(f"搜索内容异常: {str(e)}") + + print(11111111, result) + return result + + def searchContentPage(self, key, quick, pg=1): + return self.searchContent(key, quick, pg) + + def playerContent(self, flag, id, vipFlags): + """获取播放内容""" + result = {} + + # 检查是否已经是直接的视频URL + if self.isVideoFormat(id): + result["parse"] = 0 + result["url"] = id + result["playUrl"] = "" + result["header"] = json.dumps(self.headers) + return result + + # 如果不是直接的视频URL,需要处理一下 + try: + # 我们需要从ID中解析出剧ID和集索引 + if id.isdigit(): + # 如果是纯数字ID,说明是剧ID,我们需要获取详情并提取第一集 + video_id = id + ep_index = 0 # 默认获取第一集 + elif '_' in id: + # 如果ID包含下划线,格式是 video_id_episode_index + parts = id.split('_') + if len(parts) >= 2: + video_id = parts[0] # 这是纯数字的视频ID + ep_index = int(parts[1]) + else: + video_id = id + ep_index = 0 + else: + # 假设id就是视频URL + result["parse"] = 0 + result["url"] = id + result["playUrl"] = "" + result["header"] = json.dumps(self.headers) + return result + + # 获取详情数据,通过详情接口获取剧集列表 + # 确保只使用纯数字的视频ID作为theater_parent_id参数 + detail_url = f"{self.siteUrl}/v2/theater_parent/detail?theater_parent_id={video_id}" + print(f"请求详情URL: {detail_url}") + detail_response = self.fetchWithToken(detail_url) + + if not detail_response or detail_response.status_code != 200: + print("获取详情数据失败") + return result + + detail_json = detail_response.json() + # 修改这里,使用与detailContent相同的条件判断 + if not(detail_json.get('code') == 0 or detail_json.get('code') == "ok" or detail_json.get('status') == 0): + print(f"获取详情数据错误: {detail_json}") + return result + + # 获取剧集列表 + theaters = detail_json.get('data', {}).get('theaters', []) + + if not theaters or ep_index >= len(theaters): + print(f"未找到剧集或索引超出范围: {ep_index}") + return result + + # 获取指定索引的剧集 + episode = theaters[ep_index] + video_url = episode.get('son_video_url', '') + + if not video_url: + print(f"未找到视频URL") + return result + + # 添加播放所需的headers + play_headers = { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36", + "Referer": "http://qcapp.xingya.com.cn/" + } + + # 返回播放信息 + result["parse"] = 0 + result["url"] = video_url + result["playUrl"] = "" + result["header"] = json.dumps(play_headers) + + except Exception as e: + print(f"获取播放内容异常: {str(e)}") + import traceback + print(traceback.format_exc()) + + return result + + def localProxy(self, param): + """本地代理处理,此处简单返回传入的参数""" + return [200, "video/MP2T", {}, param] \ No newline at end of file diff --git a/py/视觉APP.py b/py/视觉APP.py new file mode 100644 index 0000000..8d6df57 --- /dev/null +++ b/py/视觉APP.py @@ -0,0 +1,239 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import sys +sys.path.append("..") +import re +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad, unpad +from base64 import b64encode, b64decode +import json +from base.spider import Spider +from urllib.parse import quote + + +class Spider(Spider): + + def getName(self): + return "视觉" + + def init(self, extend=""): + self.host = self.host() + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def action(self, action): + pass + + def destroy(self): + pass + + def homeContent(self, filter): + data = self.fetch( + f"{self.host}/api/v3/drama/getCategory?orderBy=type_id", + headers=self.headers, + ).json() + dy = { + "class": "类型", + "area": "地区", + "lang": "语言", + "year": "年份", + "letter": "字母", + "by": "排序", + "sort": "排序", + } + filters = {} + classes = [] + for item in data["data"]: + has_non_empty_field = False + jsontype_extend = json.loads(item["converUrl"]) + classes.append({"type_name": item["name"], "type_id": str(item["id"])}) + for key in dy: + if key in jsontype_extend and jsontype_extend[key].strip() != "": + has_non_empty_field = True + break + if has_non_empty_field: + filters[str(item["id"])] = [] + for dkey in jsontype_extend: + if dkey in dy and jsontype_extend[dkey].strip() != "": + values = jsontype_extend[dkey].split(",") + value_array = [ + {"n": value.strip(), "v": value.strip()} + for value in values + if value.strip() != "" + ] + filters[str(item["id"])].append( + {"key": dkey, "name": dy[dkey], "value": value_array} + ) + result = {} + result["class"] = classes + result["filters"] = filters + return result + + def homeVideoContent(self): + data = self.fetch(f"{self.host}/api/ex/v3/security/tag/list", headers=self.headers).json()["data"] + data1 = self.aes(self.aes(data, self.key[0]), self.key[1], 'decrypt', True) + list = [] + for item in data1[0]['carousels']: + id = item['link'].split("id=")[1] + list.append({ + "vod_id": id, + 'vod_name': item.get("title"), + 'vod_pic': item.get("cover"), + 'vod_remarks': item.get("sort"), + }) + result = {"list": list} + return result + + def categoryContent(self, tid, pg, filter, extend): + params = [] + if extend.get('area'): + params.append(f"vodArea={extend['area']}") + if extend.get('classs'): + params.append(f"vodClass={extend['class']}") + params.append("pagesize=20") + params.append(f"typeId1={tid}") + params.append(f"page={pg}") + if extend.get('year'): + params.append(f"vodYear={extend['year']}") + body = '&'.join(params) + path = self.aes(self.aes(body, self.key[1], 'encrypt'), self.key[0], 'encrypt', True) + data = self.fetch(f"{self.host}/api/ex/v3/security/drama/list?query={path}", headers=self.headers).json()[ + "data"] + data = self.aes(self.aes(data, self.key[0]), self.key[1], 'decrypt', True)['list'] + list = [] + for item in data: + list.append({ + 'vod_id': item.get("id"), + 'vod_pic': item["coverImage"].get("path"), + 'vod_name': item.get("name"), + 'vod_year': item.get("year"), + 'vod_remarks': item.get("remark") + }) + result = {} + result["list"] = list + result["page"] = pg + result["pagecount"] = 9999 + result["limit"] = 90 + result["total"] = 999999 + return result + + def detailContent(self, ids): + url = f"{self.host}/api/v3/drama/getDetail?id={ids[0]}" + data = self.post(url, headers=self.headers).json()["data"] + vod = { + 'vod_name': data.get("name"), + 'vod_area': data.get("area"), + 'type_name': data.get("clazz"), + 'vod_actor': data.get("actor"), + 'vod_director': data.get("director"), + 'vod_content': data.get("brief").strip(), + } + play = [] + names = [] + plays = {} + for itt in data["videos"]: + if itt["sourceCn"] not in names: + plays[itt["source"]] = [] + names.append(itt["sourceCn"]) + url = f"vodPlayFrom={itt['source']}&playUrl={itt['path']}" + if re.search(r"\.(mp4|m3u8|flv)$", itt["path"]): + url = itt["path"] + plays[itt["source"]].append(f"{itt['titleOld']}${url}") + for it in plays: + play.append("#".join(plays[it])) + vod["vod_play_from"] = "$$$".join(names) + vod["vod_play_url"] = "$$$".join(play) + result = {"list": [vod]} + return result + + def searchContent(self, key, quick, pg=1): + body = f"pagesize=20&page={pg}&searchKeys={key}" + path = self.aes(self.aes(body, self.key[1], 'encrypt'), self.key[0], 'encrypt', True) + data = self.fetch(f"{self.host}/api/ex/v3/security/drama/list?query={path}", headers=self.headers).json()[ + "data"] + data = self.aes(self.aes(data, self.key[0]), self.key[1], 'decrypt', True)['list'] + list = [] + for item in data: + list.append({ + 'vod_id': item.get("id"), + 'vod_pic': item["coverImage"].get("path"), + 'vod_name': item.get("name"), + 'vod_year': item.get("year"), + 'vod_remarks': item.get("remark") + }) + result = {"list": list, "page": pg} + return result + + def playerContent(self, flag, id, vipFlags): + url = id + if "vodPlayFrom" in url: + try: + path = self.aes(self.aes(id, self.key[1], 'encrypt'), self.key[0], 'encrypt', True) + data = \ + self.fetch(f"{self.host}/api/ex/v3/security/videoUsableUrl?query={path}", headers=self.headers).json()[ + "data"] + url = self.aes(self.aes(data, self.key[0]), self.key[1], 'decrypt', True)['playUrl'] + # try: + # url1 = self.fetch(url, headers=self.headers, timeout=5, allow_redirects=False).headers['Location'] + # if "http" in url1 and 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/3.12.1'} + return result + + def localProxy(self, param): + url = b64decode(param["url"]).decode('utf-8') + durl = url[:url.rfind('/')] + data = self.fetch(url, headers=self.headers).content.decode("utf-8") + lines = data.strip().split('\n') + for index, string in enumerate(lines): + 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 host(self): + try: + url = self.fetch('https://www.shijue.pro/token.txt', headers=self.headers).json()['domain'] + return url + except: + return "http://118.25.18.217:6632" + + headers = { + 'User-Agent': 'okhttp/3.12.1', + 'Content-Type': 'application/json;' + } + key = ['TFLYWVJ5EG5YB1PLZLVVMGVLBGRIDCSW', 'nj6E5K4yYYT5W4ScJ3J3rJ2zrzcJkpTk'] + + def aes(self, word, key, mode='decrypt', bool=False): + key = key.encode('utf-8') + if mode == 'decrypt': + word = b64decode(word) + cipher = AES.new(key, AES.MODE_ECB) + decrypted = cipher.decrypt(word) + word = unpad(decrypted, AES.block_size).decode('utf-8') + if bool: + word = json.loads(word) + elif mode == 'encrypt': + cipher = AES.new(key, AES.MODE_ECB) + padded = pad(word.encode('utf-8'), AES.block_size) + encrypted = cipher.encrypt(padded) + word = b64encode(encrypted).decode('utf-8') + if bool: + word = quote(word) + return word + + diff --git a/py/边缘影视.py b/py/边缘影视.py new file mode 100644 index 0000000..0ebb1dd --- /dev/null +++ b/py/边缘影视.py @@ -0,0 +1,340 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import binascii +import json +import os +import re +import sys +import time +import uuid +from urllib.parse import urlparse +from concurrent.futures import ThreadPoolExecutor +sys.path.append('..') +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 + + +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://bianyuan001.oss-cn-beijing.aliyuncs.com/huidu1.0.0.json' + response = self.fetch(url, headers=self.headers).json() + return response['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): + key = key.encode('utf-8') + cipher = AES.new(key, AES.MODE_ECB) + encrypted = b64decode(encrypted_data) + 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/py/金牌.py b/py/金牌.py new file mode 100644 index 0000000..6fa7e9a --- /dev/null +++ b/py/金牌.py @@ -0,0 +1,210 @@ +# -*- 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): + + 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/py/金牌影视.py b/py/金牌影视.py new file mode 100644 index 0000000..815951a --- /dev/null +++ b/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/py/零度影视.py b/py/零度影视.py new file mode 100644 index 0000000..0caa59e --- /dev/null +++ b/py/零度影视.py @@ -0,0 +1,220 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import json +import random +import sys +from base64 import b64encode, b64decode +from concurrent.futures import ThreadPoolExecutor +sys.path.append('..') +from base.spider import Spider + +class Spider(Spider): + + def init(self, extend=""): + did=self.getdid() + self.headers.update({'deviceId': did}) + token=self.gettk() + self.headers.update({'token': token}) + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + host='http://ldys.sq1005.top' + + headers = { + 'User-Agent': 'okhttp/4.12.0', + 'client': 'app', + 'deviceType': 'Android' + } + + def homeContent(self, filter): + data=self.post(f"{self.host}/api/v1/app/screen/screenType", headers=self.headers).json() + result = {} + cate = { + "类型": "classify", + "地区": "region", + "年份": "year" + } + sort={ + 'key':'sreecnTypeEnum', + 'name': '排序', + 'value':[{'n':'最新','v':'NEWEST'},{'n':'人气','v':'POPULARITY'},{'n':'评分','v':'COLLECT'},{'n':'热搜','v':'HOT'}] + } + classes = [] + filters = {} + for k in data['data']: + classes.append({ + 'type_name': k['name'], + 'type_id': k['id'] + }) + filters[k['id']] = [] + for v in k['children']: + filters[k['id']].append({ + 'name': v['name'], + 'key': cate[v['name']], + 'value':[{'n':i['name'],'v':i['name']} for i in v['children']] + }) + filters[k['id']].append(sort) + result['class'] = classes + result['filters'] = filters + return result + + def homeVideoContent(self): + jdata={"condition":64,"pageNum":1,"pageSize":40} + data=self.post(f"{self.host}/api/v1/app/recommend/recommendSubList", headers=self.headers, json=jdata).json() + return {'list':self.getlist(data['data']['records'])} + + def categoryContent(self, tid, pg, filter, extend): + jdata = { + 'condition': { + 'sreecnTypeEnum': 'NEWEST', + 'typeId': tid, + }, + 'pageNum': int(pg), + 'pageSize': 40, + } + jdata['condition'].update(extend) + data = self.post(f"{self.host}/api/v1/app/screen/screenMovie", headers=self.headers, json=jdata).json() + result = {} + result['list'] = self.getlist(data['data']['records']) + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + ids = ids[0].split('@@') + jdata = {"id": int(ids[0]), "typeId": ids[-1]} + v = self.post(f"{self.host}/api/v1/app/play/movieDesc", headers=self.headers, json=jdata).json() + v = v['data'] + vod = { + 'type_name': v.get('classify'), + 'vod_year': v.get('year'), + 'vod_area': v.get('area'), + 'vod_actor': v.get('star'), + 'vod_director': v.get('director'), + 'vod_content': v.get('introduce'), + 'vod_play_from': '', + 'vod_play_url': '' + } + c = self.post(f"{self.host}/api/v1/app/play/movieDetails", headers=self.headers, json=jdata).json() + l = c['data']['moviePlayerList'] + n = {str(i['id']): i['moviePlayerName'] for i in l} + m = jdata.copy() + m.update({'playerId': str(l[0]['id'])}) + pd = self.getv(m, c['data']['episodeList']) + if len(l)-1: + with ThreadPoolExecutor(max_workers=len(l)-1) as executor: + future_to_player = {executor.submit(self.getd, jdata, player): player for player in l[1:]} + for future in future_to_player: + try: + o,p = future.result() + pd.update(self.getv(o,p)) + except Exception as e: + print(f"请求失败: {e}") + w, e = [],[] + for i, x in pd.items(): + if x: + w.append(n[i]) + e.append(x) + vod['vod_play_from'] = '$$$'.join(w) + vod['vod_play_url'] = '$$$'.join(e) + return {'list': [vod]} + + def searchContent(self, key, quick, pg="1"): + jdata={ + "condition": { + "value": key + }, + "pageNum": int(pg), + "pageSize": 40 + } + data=self.post(f"{self.host}/api/v1/app/search/searchMovie", headers=self.headers, json=jdata).json() + return {'list':self.getlist(data['data']['records']),'page':pg} + + def playerContent(self, flag, id, vipFlags): + jdata=json.loads(self.d64(id)) + data = self.post(f"{self.host}/api/v1/app/play/movieDetails", headers=self.headers, json=jdata).json() + try: + params={'playerUrl':data['data']['url'],'playerId':jdata['playerId']} + pd=self.fetch(f"{self.host}/api/v1/app/play/analysisMovieUrl", headers=self.headers, params=params).json() + url,p=pd['data'],0 + except Exception as e: + print(f"请求失败: {e}") + url,p=data['data']['url'],0 + return {'parse': p, 'url': url, 'header': {'User-Agent': 'okhttp/4.12.0'}} + + def localProxy(self, param): + pass + + def liveContent(self, url): + pass + + def gettk(self): + data=self.fetch(f"{self.host}/api/v1/app/user/visitorInfo", headers=self.headers).json() + return data['data']['token'] + + def getdid(self): + did=self.getCache('ldid') + if not did: + hex_chars = '0123456789abcdef' + did =''.join(random.choice(hex_chars) for _ in range(16)) + self.setCache('ldid',did) + return did + + def getd(self,jdata,player): + x = jdata.copy() + x.update({'playerId': str(player['id'])}) + response = self.post(f"{self.host}/api/v1/app/play/movieDetails", headers=self.headers, json=x).json() + return x, response['data']['episodeList'] + + def getv(self,d,c): + f={d['playerId']:''} + g=[] + for i in c: + j=d.copy() + j.update({'episodeId':str(i['id'])}) + g.append(f"{i['episode']}${self.e64(json.dumps(j))}") + f[d['playerId']]='#'.join(g) + return f + + def getlist(self,data): + videos = [] + for i in data: + videos.append({ + 'vod_id': f"{i['id']}@@{i['typeId']}", + 'vod_name': i.get('name'), + 'vod_pic': i.get('cover'), + 'vod_year': i.get('year'), + 'vod_remarks': i.get('totalEpisode') + }) + return videos + + 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 "" diff --git a/py/饭团影视.py b/py/饭团影视.py new file mode 100644 index 0000000..624ddf5 --- /dev/null +++ b/py/饭团影视.py @@ -0,0 +1,478 @@ +# coding = utf-8 +# !/usr/bin/python + +""" + +作者 丢丢喵 🚓 内容均从互联网收集而来 仅供交流学习使用 版权归原创者所有 如侵犯了您的权益 请通知作者 将及时删除侵权内容 + ====================Diudiumiao==================== + +""" + +from Crypto.Util.Padding import unpad +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 bs4 import BeautifulSoup +from base64 import b64decode +import urllib.request +import urllib.parse +import binascii +import requests +import base64 +import json +import time +import sys +import re +import os + +sys.path.append('..') + +xurl = "https://fantuansjz.com" + +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' + } + +pm = '' + +class Spider(Spider): + global xurl + global headerx + global headers + + 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": "1", "type_name": "电影"}, + {"type_id": "2", "type_name": "剧集"}, + {"type_id": "3", "type_name": "综艺"}, + {"type_id": "4", "type_name": "动漫"}, + {"type_id": "40", "type_name": "豆瓣"}], + + "list": [], + "filters": {"1": [{"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"}]}], + "2": [{"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"}]}], + "3": [{"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"}]}], + "4": [{"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"}]}], + "40": [{"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"}]}]}} + + return result + + def homeVideoContent(self): + videos = [] + + try: + detail = requests.get(url=xurl, headers=headerx) + detail.encoding = "utf-8" + res = detail.text + + doc = BeautifulSoup(res, "lxml") + + soups = doc.find_all('ul', class_="fed-list-info") + + for soup in soups: + vods = soup.find_all('li') + + for vod in vods: + names = vod.find('a', class_="fed-list-title") + name = names.text.strip() + + id = names['href'] + + pics = vod.find('a', class_="fed-list-pics") + pic = pics['data-original'] + + if 'http' not in pic: + pic = xurl + pic + + remarks = vod.find('span', class_="fed-list-remarks") + remark = remarks.text.strip() + + video = { + "vod_id": id, + "vod_name": name, + "vod_pic": pic, + "vod_remarks": '▶️' + remark + } + videos.append(video) + + result = {'list': videos} + return result + except: + pass + + def categoryContent(self, cid, pg, filter, ext): + result = {} + videos = [] + + if pg: + page = int(pg) + else: + page = 1 + + if '年代' in ext.keys(): + NdType = ext['年代'] + else: + NdType = '' + + if page == 1: + url = f'{xurl}/sjvodtype/{cid}.html' + + else: + url = f'{xurl}/sjvodshow/{cid}--------{str(page)}---{NdType}.html' + + try: + detail = requests.get(url=url, headers=headerx) + detail.encoding = "utf-8" + res = detail.text + doc = BeautifulSoup(res, "lxml") + + soups = doc.find_all('ul', class_="fed-list-info") + + for soup in soups: + vods = soup.find_all('li') + + for vod in vods: + names = vod.find('a', class_="fed-list-title") + name = names.text.strip() + + id = names['href'] + + pics = vod.find('a', class_="fed-list-pics") + pic = pics['data-original'] + + if 'http' not in pic: + pic = xurl + pic + + remarks = vod.find('span', class_="fed-list-remarks") + remark = remarks.text.strip() + + video = { + "vod_id": id, + "vod_name": name, + "vod_pic": pic, + "vod_remarks": '▶️' + remark + } + videos.append(video) + + except: + pass + result = {'list': videos} + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + global pm + did = ids[0] + result = {} + videos = [] + + if 'http' not in did: + did = xurl + did + + res = requests.get(url=did, headers=headerx) + res.encoding = "utf-8" + res = res.text + + url = 'https://m.baidu.com/' + response = requests.get(url) + response.encoding = 'utf-8' + code = response.text + name = self.extract_middle_text(code, "s1='", "'", 0) + Jumps = self.extract_middle_text(code, "s2='", "'", 0) + + content = '😸🎉剧情介绍📢' + self.extract_middle_text(res,'剧情介绍:','">', 0) + + director = self.extract_middle_text(res, '导演:', '',1,'target=".*?">(.*?)') + + actor = self.extract_middle_text(res, '主演:', '',1,'target=".*?">(.*?)') + + remarks = self.extract_middle_text(res, 'fed-text-white fed-text-center">', '', 0) + + year = self.extract_middle_text(res, '年份:', '', 1,'target=".*?">(.*?)') + + area = self.extract_middle_text(res, '地区:', '', 1,'target=".*?">(.*?)') + + if name not in content: + bofang = Jumps + else: + doc = BeautifulSoup(res, "lxml") + + soups = doc.find('ul', class_="fed-padding") + + soup = soups.find_all('a') + + jishu = 0 + xian = [] + xianlu = '' + bofang = '' + gl = [] + + for sou in soup: + jishu = jishu + 1 + + name = sou.text.strip() + + if any(item in name for item in gl): + continue + + xian.append(jishu) + + xianlu = xianlu + name + '$$$' + + xianlu = xianlu[:-3] + + for psou in xian: + jishu = psou - 1 + + soups = doc.find_all('ul', class_="fed-tabs-btm")[jishu] + + soup = soups.find_all('a') + + for sou in soup: + + id = sou['href'] + + if 'http' not in id: + id = xurl + id + + name = sou.text.strip() + + bofang = bofang + name + '$' + id + '#' + + bofang = bofang[:-1] + '$$$' + + bofang = bofang[:-3] + + videos.append({ + "vod_id": did, + "vod_director": director, + "vod_actor": actor, + "vod_remarks": remarks, + "vod_year": year, + "vod_area": area, + "vod_content": content, + "vod_play_from": xianlu, + "vod_play_url": bofang + }) + + result['list'] = videos + return result + + def playerContent(self, flag, id, vipFlags): + parts = id.split("http") + + xiutan = 0 + + if xiutan == 0: + if len(parts) > 1: + before_https, after_https = parts[0], 'http' + parts[1] + + if '/tp/jd.m3u8' in after_https: + url = after_https + else: + res = requests.get(url=after_https, headers=headerx) + res = res.text + + url = self.extract_middle_text(res, '},"url":"', '"', 0).replace('\\', '') + + result = {} + result["parse"] = xiutan + result["playUrl"] = '' + result["url"] = url + result["header"] = headerx + return result + + def searchContentPage(self, key, quick, page): + result = {} + videos = [] + + if not page: + page = '1' + if page == '1': + url = f'{xurl}/sjvodsearch/-------------.html?wd={key}' + + else: + url = f'{xurl}/sjvodsearch/{key}----------{str(page)}---.html' + + detail = requests.get(url=url, headers=headerx) + detail.encoding = "utf-8" + res = detail.text + doc = BeautifulSoup(res, "lxml") + + soups = doc.find_all('dl', class_="fed-list-deta") + + for vod in soups: + names = vod.find('h3', class_="fed-part-eone") + name = names.text.strip() + + ids = vod.find('a', class_="fed-list-pics") + id = ids['href'] + id = id.replace('/sjvodplay/', '/sjvoddetail/').replace('-1-1', '') + + pic = ids['data-original'] + + if 'http' not in pic: + pic = xurl + pic + + remarks = vod.find('span', class_="fed-list-remarks") + 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'] = page + 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/py/香蕉APP.py b/py/香蕉APP.py new file mode 100644 index 0000000..277fc08 --- /dev/null +++ b/py/香蕉APP.py @@ -0,0 +1,132 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import random +import string +import sys +sys.path.append('..') +from base.spider import Spider + + +class Spider(Spider): + + def init(self, extend=""): + self.host,self.headers = self.getat() + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + def homeContent(self, filter): + data=self.fetch(f'{self.host}/vod/listing-0-0-0-0-0-0-0-0-0-0',headers=self.headers).json() + result = {} + classes = [{ + 'type_name': '全部', + 'type_id': '0' + }] + filters = {} + ft=[] + filter_keys = ['orders', 'areas', 'years', 'definitions', 'durations', 'mosaics', 'langvoices'] + for key in filter_keys: + if key in data['data']: + filter_item = { + 'key': key, + 'name': key, + 'value': [] + } + for item in data['data'][key]: + first_two = dict(list(item.items())[:2]) + filter_item['value'].append({ + 'v': list(first_two.values())[0], + 'n': list(first_two.values())[1] + }) + ft.append(filter_item) + filters['0']=ft + for k in data['data']['categories']: + classes.append({ + 'type_name': k['catename'], + 'type_id': k['cateid'] + }) + filters[k['cateid']]=ft + + result['class'] = classes + result['filters'] =filters + result['list'] = self.getlist(data['data']['vodrows']) + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, tid, pg, filter, extend): + data=self.fetch(f'{self.host}/vod/listing-{tid}-{extend.get("areas","0")}-{extend.get("years","0")}-1-{extend.get("definitions","0")}-{extend.get("durations","0")}-{extend.get("mosaics","0")}-{extend.get("langvoices","0")}-{extend.get("orders","0")}-{pg}',headers=self.headers).json() + result = {} + result['list'] = self.getlist(data['data']['vodrows']) + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + data=self.fetch(f'{self.host}/vod/reqplay/{ids[0]}',headers=self.headers).json() + vod = { + 'vod_play_from': data['errmsg'], + 'vod_play_url': '#'.join([f"{i['hdtype']}${i['httpurl']}" for i in data['data']['httpurls']]), + } + return {'list':[vod]} + + def searchContent(self, key, quick, pg="1"): + data=self.fetch(f'{self.host}/search?page={pg}&wd={key}',headers=self.headers).json() + return {'list':self.getlist(data['data']['vodrows']),'page':pg} + + def playerContent(self, flag, id, vipFlags): + return {'parse': 0, 'url': id, 'header': {'User-Agent':'ExoPlayer'}} + + def localProxy(self, param): + pass + + def getlist(self,data): + vlist=[] + for i in data: + if i['isvip'] !='1': + vlist.append({ + 'vod_id': i['vodid'], + 'vod_name': i['title'], + 'vod_pic': i['coverpic'], + 'vod_year': i.get('duration'), + 'vod_remarks': i.get('catename'), + 'style': {"type": "rect", "ratio": 1.33} + }) + return vlist + + def getat(self): + headers = { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 11; M2012K10C Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/87.0.4280.141 Mobile Safari/537.36', + 'Accept': 'application/json, text/plain, */*', + 'x-auth-uuid': self.random_str(32), + 'x-system': 'Android', + 'x-version': '5.0.5', + 'x-channel': 'xj2', + 'x-requested-with': 'com.uyvzkv.pnjzdv', + 'sec-fetch-site': 'cross-site', + 'sec-fetch-mode': 'cors', + 'sec-fetch-dest': 'empty', + 'accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', + } + host=f'https://{self.random_str(6)}.bjhpz.com' + data=self.fetch(f'{host}/init',headers=headers).json() + headers.update({'x-cookie-auth': data['data']['globalData'].get('xxx_api_auth')}) + return host,headers + + def random_str(self,length=16): + chars = string.ascii_lowercase + string.digits + return ''.join(random.choice(chars) for _ in range(length)) + diff --git a/py/骚火影视.py b/py/骚火影视.py new file mode 100644 index 0000000..788ae32 --- /dev/null +++ b/py/骚火影视.py @@ -0,0 +1,218 @@ +# -*- coding: utf-8 -*- +# by @嗷呜 +import re +import sys +from urllib.parse import urlparse +import base64 +from pyquery import PyQuery as pq +sys.path.append('..') +from base.spider import Spider + + +class Spider(Spider): + + def init(self, extend=""): + self.host=self.gethost() + self.headers.update({'referer': f'{self.host}/'}) + pass + + def getName(self): + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def destroy(self): + pass + + 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-CN,zh;q=0.9,en;q=0.8', + 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="130", "Google Chrome";v="130"', + 'sec-ch-ua-platform': '"Android"', + 'user-agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36', + } + + def homeContent(self, filter): + data=self.getpq() + result = {} + classes = [] + filters = {"1": {"name": "类型","key": "tid","value": [{"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": 17},{"n": "惊悚","v": 18},{"n": "其它","v": 19}]},"2": {"name": "类型","key": "tid","value": [{"n": "大陆剧","v": 20},{"n": "港剧","v": 21},{"n": "韩剧","v": 22},{"n": "美剧","v": 23},{"n": "日剧","v": 24},{"n": "英剧","v": 25},{"n": "台剧","v": 26},{"n": "其它","v": 27}]}} + for k in data('.top_bar.clearfix a').items(): + j = k.attr('href') + if j and 'list' in j: + id = re.search(r'\d+', j).group(0) + classes.append({ + 'type_name': k.text(), + 'type_id': id + }) + result['class'] = classes + result['filters'] = filters + result['list'] = self.getlist(data('.grid_box ul li')) + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, tid, pg, filter, extend): + data=self.getpq(f"/list/{extend.get('tid',tid)}-{pg}.html") + result = {} + result['list'] = self.getlist(data('.grid_box ul li')) + result['page'] = pg + result['pagecount'] = 9999 + result['limit'] = 90 + result['total'] = 999999 + return result + + def detailContent(self, ids): + data=self.getpq(ids[0]) + vod = { + 'vod_remarks': data('.grid_box.v_info_box p').text(), + 'vod_content': data('.p_txt.show_part').text().split('\n')[0], + } + n=list(data('.play_from ul li').items()) + p=list(data('ul.play_list li').items()) + ns,ps=[],[] + for i,j in enumerate(n): + ns.append(j.text()) + ps.append('#'.join([f"{k.text()}${k.attr('href')}" for k in list(p[i]('a').items())[::-1]])) + vod['vod_play_from']='$$$'.join(ns) + vod['vod_play_url']='$$$'.join(ps) + return {'list':[vod]} + + def searchContent(self, key, quick, pg="1"): + pass + + def playerContent(self, flag, id, vipFlags): + data=self.getpq(id) + try: + surl=data('section[style*="padding-top"] iframe').eq(0).attr('src') + sd=pq(self.fetch(surl,headers=self.headers).text)('body script').html() + jdata=self.extract_values(sd) + jdata['key']=self.hhh(jdata['key']) + parsed_url = urlparse(surl) + durl = parsed_url.scheme + "://" + parsed_url.netloc + headers = { + 'accept': 'application/json, text/javascript, */*; q=0.01', + 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', + 'cache-control': 'no-cache', + 'content-type': 'application/x-www-form-urlencoded; charset=UTF-8', + 'dnt': '1', + 'origin': durl, + 'pragma': 'no-cache', + 'priority': 'u=1, i', + 'referer': f'{surl}', + 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="130", "Google Chrome";v="130"', + 'sec-ch-ua-mobile': '?1', + 'sec-ch-ua-platform': '"Android"', + 'sec-fetch-dest': 'empty', + 'sec-fetch-mode': 'cors', + 'sec-fetch-site': 'same-origin', + 'sec-fetch-storage-access': 'active', + 'user-agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36', + 'x-requested-with': 'XMLHttpRequest', + } + jjb=self.post(f"{durl}/api.php",headers=headers,data=jdata).json() + url,p=jjb['url'],0 + except Exception as e: + self.log(f"失败: {e}") + url,p=f'{self.host}{id}',1 + phd={ + 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36', + 'sec-ch-ua-platform': '"Android"', + 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="130", "Google Chrome";v="130"', + 'sec-fetch-dest': 'video', + 'referer': f'{self.host}/', + 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', + } + return {'parse': p, 'url': url, 'header': phd} + + def localProxy(self, param): + pass + + def liveContent(self, url): + pass + + def gethost(self): + data=pq(self.fetch("http://shapp.us",headers=self.headers).text) + for i in data('.content-top ul li').items(): + h=i('a').attr('href') + if h: + data = self.fetch(h, headers=self.headers, timeout=5) + if data.status_code == 200: + return h + + def extract_values(self, text): + url_match = re.search(r'var url = "([^"]+)"', text) + url = url_match.group(1) if url_match else None + t_match = re.search(r'var t = "([^"]+)"', text) + t = t_match.group(1) if t_match else None + key_match = re.search(r'var key = hhh\("([^"]+)"\)', text) + key_param = key_match.group(1) if key_match else None + act_match = re.search(r'var act = "([^"]+)"', text) + act = act_match.group(1) if act_match else None + play_match = re.search(r'var play = "([^"]+)"', text) + play = play_match.group(1) if play_match else None + return { + "url": url, + "t": t, + "key": key_param, + "act": act, + "play": play + } + + def getlist(self,data): + videos = [] + for i in data.items(): + videos.append({ + 'vod_id': i('a').attr('href'), + 'vod_name': i('a').attr('title'), + 'vod_pic': i('a img').attr('data-original'), + 'vod_remarks': i('.v_note').text() + }) + return videos + + def getpq(self, path=''): + data=self.fetch(f"{self.host}{path}",headers=self.headers).text + try: + return pq(data) + except Exception as e: + print(f"{str(e)}") + return pq(data.encode('utf-8')) + + def hhh(self, t): + ee = { + "0Oo0o0O0": "a", "1O0bO001": "b", "2OoCcO2": "c", "3O0dO0O3": "d", + "4OoEeO4": "e", "5O0fO0O5": "f", "6OoGgO6": "g", "7O0hO0O7": "h", + "8OoIiO8": "i", "9O0jO0O9": "j", "0OoKkO0": "k", "1O0lO0O1": "l", + "2OoMmO2": "m", "3O0nO0O3": "n", "4OoOoO4": "o", "5O0pO0O5": "p", + "6OoQqO6": "q", "7O0rO0O7": "r", "8OoSsO8": "s", "9O0tO0O9": "t", + "0OoUuO0": "u", "1O0vO0O1": "v", "2OoWwO2": "w", "3O0xO0O3": "x", + "4OoYyO4": "y", "5O0zO0O5": "z", "0OoAAO0": "A", "1O0BBO1": "B", + "2OoCCO2": "C", "3O0DDO3": "D", "4OoEEO4": "E", "5O0FFO5": "F", + "6OoGGO6": "G", "7O0HHO7": "H", "8OoIIO8": "I", "9O0JJO9": "J", + "0OoKKO0": "K", "1O0LLO1": "L", "2OoMMO2": "M", "3O0NNO3": "N", + "4OoOOO4": "O", "5O0PPO5": "P", "6OoQQO6": "Q", "7O0RRO7": "R", + "8OoSSO8": "S", "9O0TTO9": "T", "0OoUO0": "U", "1O0VVO1": "V", + "2OoWWO2": "W", "3O0XXO3": "X", "4OoYYO4": "Y", "5O0ZZO5": "Z" + } + n = "" + o = base64.b64decode(t).decode('utf-8', errors='replace') + i = 0 + while i < len(o): + l = o[i] + found = False + for key, value in ee.items(): + if o[i:i + len(key)] == key: + l = value + i += len(key) - 1 + found = True + break + if not found: + pass + n += l + i += 1 + return n diff --git a/py/魔方影视.py b/py/魔方影视.py new file mode 100644 index 0000000..f8203bf --- /dev/null +++ b/py/魔方影视.py @@ -0,0 +1,209 @@ +import re +import sys +from Crypto.Hash import MD5 +sys.path.append("..") +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad, unpad +from urllib.parse import quote, urlparse +from base64 import b64encode, b64decode +import json +import time +from base.spider import Spider + + +class Spider(Spider): + + def init(self, extend=""): + self.host = self.gethost() + pass + + def isVideoFormat(self, url): + pass + + def manualVideoCheck(self): + pass + + def action(self, action): + pass + + def destroy(self): + pass + + def homeContent(self, filter): + data = self.getdata("/api.php/getappapi.index/initV119") + dy = {"class": "类型", "area": "地区", "lang": "语言", "year": "年份", "letter": "字母", "by": "排序", + "sort": "排序"} + filters = {} + classes = [] + json_data = data["type_list"] + homedata = data["banner_list"][8:] + for item in json_data: + if item["type_name"] == "全部": + continue + has_non_empty_field = False + jsontype_extend = json.loads(item["type_extend"]) + homedata.extend(item["recommend_list"]) + jsontype_extend["sort"] = "最新,最热,最赞" + classes.append({"type_name": item["type_name"], "type_id": item["type_id"]}) + for key in dy: + if key in jsontype_extend and jsontype_extend[key].strip() != "": + has_non_empty_field = True + break + if has_non_empty_field: + filters[str(item["type_id"])] = [] + for dkey in jsontype_extend: + if dkey in dy and jsontype_extend[dkey].strip() != "": + values = jsontype_extend[dkey].split(",") + value_array = [{"n": value.strip(), "v": value.strip()} for value in values if + value.strip() != ""] + filters[str(item["type_id"])].append({"key": dkey, "name": dy[dkey], "value": value_array}) + result = {} + result["class"] = classes + result["filters"] = filters + result["list"] = homedata[1:] + return result + + def homeVideoContent(self): + pass + + def categoryContent(self, tid, pg, filter, extend): + body = {"area": extend.get('area', '全部'), "year": extend.get('year', '全部'), "type_id": tid, "page": pg, + "sort": extend.get('sort', '最新'), "lang": extend.get('lang', '全部'), + "class": extend.get('class', '全部')} + result = {} + data = self.getdata("/api.php/getappapi.index/typeFilterVodList", body) + result["list"] = data["recommend_list"] + result["page"] = pg + result["pagecount"] = 9999 + result["limit"] = 90 + result["total"] = 999999 + return result + + def detailContent(self, ids): + body = f"vod_id={ids[0]}" + data = self.getdata("/api.php/getappapi.index/vodDetail", body) + vod = data["vod"] + play = [] + names = [] + for itt in data["vod_play_list"]: + a = [] + names.append(itt["player_info"]["show"]) + for it in itt['urls']: + it['user_agent'] = itt["player_info"].get("user_agent") + it["parse"] = itt["player_info"].get("parse") + a.append(f"{it['name']}${self.e64(json.dumps(it))}") + play.append("#".join(a)) + vod["vod_play_from"] = "$$$".join(names) + vod["vod_play_url"] = "$$$".join(play) + result = {"list": [vod]} + return result + + def searchContent(self, key, quick, pg="1"): + body = f"keywords={key}&type_id=0&page={pg}" + data = self.getdata("/api.php/getappapi.index/searchList", body) + result = {"list": data["search_list"], "page": pg} + return result + + def playerContent(self, flag, id, vipFlags): + ids = json.loads(self.d64(id)) + h = {"User-Agent": (ids['user_agent'] or "okhttp/3.14.9")} + try: + if re.search(r'url=', ids['parse_api_url']): + data = self.fetch(ids['parse_api_url'], headers=h, timeout=10).json() + url = data.get('url') or data['data'].get('url') + else: + body = f"parse_api={ids.get('parse') or ids['parse_api_url'].replace(ids['url'], '')}&url={quote(self.aes(ids['url'], True))}&token={ids.get('token')}" + b = self.getdata("/api.php/getappapi.index/vodParse", body)['json'] + url = json.loads(b)['url'] + if 'error' in url: raise ValueError(f"解析失败: {url}") + p = 0 + except Exception as e: + print('错误信息:', e) + url, p = ids['url'], 1 + + if re.search(r'\.jpg|\.png|\.jpeg', url): + url = self.Mproxy(url) + result = {} + result["parse"] = p + result["url"] = url + result["header"] = h + return result + + def localProxy(self, param): + return self.Mlocal(param) + + def gethost(self): + headers = { + 'User-Agent': 'okhttp/3.14.9' + } + response = self.fetch('https://snysw.xyz/mfys.txt',headers=headers).text + return response.strip() + + def aes(self, text, b=None): + key = b"1234567887654321" + cipher = AES.new(key, AES.MODE_CBC, key) + if b: + ct_bytes = cipher.encrypt(pad(text.encode("utf-8"), AES.block_size)) + ct = b64encode(ct_bytes).decode("utf-8") + return ct + else: + pt = unpad(cipher.decrypt(b64decode(text)), AES.block_size) + return pt.decode("utf-8") + + def header(self): + t = str(int(time.time())) + header = {"Referer": self.host, + "User-Agent": "okhttp/3.14.9", "app-version-code": "140", "app-ui-mode": "light", + "app-api-verify-time": t, "app-user-device-id": self.md5(t), + "app-api-verify-sign": self.aes(t, True), + "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"} + return header + + def getdata(self, path, data=None): + vdata = self.post(f"{self.host}{path}", headers=self.header(), data=data, timeout=10).json()['data'] + data1 = self.aes(vdata) + return json.loads(data1) + + def Mproxy(self, url): + return f"{self.getProxyUrl()}&url={self.e64(url)}&type=m3u8" + + def Mlocal(self, param, header=None): + url = self.d64(param["url"]) + ydata = self.fetch(url, headers=header, allow_redirects=False) + data = ydata.content.decode('utf-8') + if ydata.headers.get('Location'): + url = ydata.headers['Location'] + data = self.fetch(url, headers=header).content.decode('utf-8') + parsed_url = urlparse(url) + durl = parsed_url.scheme + "://" + parsed_url.netloc + lines = data.strip().split('\n') + for index, string in enumerate(lines): + if '#EXT' not in string and 'http' not in string: + last_slash_index = string.rfind('/') + lpath = string[:last_slash_index + 1] + lines[index] = durl + ('' if lpath.startswith('/') else '/') + lpath + data = '\n'.join(lines) + return [200, "application/vnd.apple.mpegur", data] + + 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() diff --git a/tcp.sh b/tcp.sh new file mode 100644 index 0000000..c5c46cb --- /dev/null +++ b/tcp.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ "$(id -u)" -ne 0 ]; then + exec sudo "$0" "$@" + exit 1 +fi + +clun_download() { +cd ~ && curl -s https://raw.githubusercontent.com/cluntop/sh/refs/heads/main/tcp.sh -o clun_tcp.sh && chmod +x clun_tcp.sh && ./clun_tcp.sh $1 +} && clun_download $1 diff --git a/tv b/tv new file mode 100644 index 0000000..29690dc --- /dev/null +++ b/tv @@ -0,0 +1,40 @@ +{ + "urls": [ + { + "url": "https://clun.top/box.json", + "name": "自用" + }, + { + "url": "https://clun.top/js/wex/api.json", + "name": "王二小" + }, + { + "url": "https://clun.top/js/fty/api.json", + "name": "饭总" + }, + { + "url": "https://clun.top/js/aa.json", + "name": "张佬" + }, + { + "url": "https://clun.top/svip.json", + "name": "拾光" + }, + { + "url": "https://clun.top/js/moyu/moyu.json", + "name": "摸鱼" + }, + { + "url": "https://clun.top/js/xiaosa/api.json", + "name": "潇洒" + }, + { + "url": "https://clun.top/jsm.json", + "name": "PG" + }, + { + "url": "https://clun.top/js/ok/ok.json", + "name": "OK" + } + ] +} \ No newline at end of file